diff -Nru mariadb-10.1-10.1.25/client/mysqladmin.cc mariadb-10.1-10.1.30/client/mysqladmin.cc --- mariadb-10.1-10.1.25/client/mysqladmin.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqladmin.cc 2017-12-21 15:48:45.000000000 +0000 @@ -298,8 +298,12 @@ #endif break; case OPT_MYSQL_PROTOCOL: - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } break; } return 0; diff -Nru mariadb-10.1-10.1.25/client/mysqlbinlog.cc mariadb-10.1-10.1.30/client/mysqlbinlog.cc --- mariadb-10.1-10.1.25/client/mysqlbinlog.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqlbinlog.cc 2017-12-21 15:48:45.000000000 +0000 @@ -1649,8 +1649,12 @@ remote_opt= 1; break; case OPT_MYSQL_PROTOCOL: - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } break; case OPT_START_DATETIME: start_datetime= convert_str_to_timestamp(start_datetime_str); @@ -1663,8 +1667,15 @@ opt_base64_output_mode= BASE64_OUTPUT_ALWAYS; else { - opt_base64_output_mode= (enum_base64_output_mode) - (find_type_or_exit(argument, &base64_output_mode_typelib, opt->name)-1); + int val; + + if ((val= find_type_with_warning(argument, &base64_output_mode_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } + opt_base64_output_mode= (enum_base64_output_mode) (val - 1); } break; case OPT_REWRITE_DB: // db_from->db_to @@ -2670,10 +2681,11 @@ if (!argc || opt_version) { - if (!argc) - usage(); if (!opt_version) + { + usage(); retval= ERROR_STOP; + } goto err; } diff -Nru mariadb-10.1-10.1.25/client/mysql.cc mariadb-10.1-10.1.30/client/mysql.cc --- mariadb-10.1-10.1.25/client/mysql.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysql.cc 2017-12-21 15:48:45.000000000 +0000 @@ -149,7 +149,7 @@ default_pager_set= 0, opt_sigint_ignore= 0, auto_vertical_output= 0, show_warnings= 0, executing_query= 0, - ignore_spaces= 0, opt_progress_reports; + ignore_spaces= 0, opt_binhex= 0, opt_progress_reports; static my_bool debug_info_flag, debug_check_flag, batch_abort_on_error; static my_bool column_types_flag; static my_bool preserve_comments= 0; @@ -1065,8 +1065,7 @@ static COMMANDS *find_command(char *name); static COMMANDS *find_command(char cmd_name); -static bool add_line(String &buffer, char *line, ulong line_length, - char *in_string, bool *ml_comment, bool truncated); +static bool add_line(String &, char *, ulong, char *, bool *, bool); static void remove_cntrl(String &buffer); static void print_table_data(MYSQL_RES *result); static void print_table_data_html(MYSQL_RES *result); @@ -1078,7 +1077,7 @@ static void end_timer(ulong start_time,char *buff); static void mysql_end_timer(ulong start_time,char *buff); static void nice_time(double sec,char *buff,bool part_second); -extern "C" sig_handler mysql_end(int sig); +extern "C" sig_handler mysql_end(int sig) __attribute__ ((noreturn)); extern "C" sig_handler handle_sigint(int sig); #if defined(HAVE_TERMIOS_H) && defined(GWINSZ_IN_SYS_IOCTL) static sig_handler window_resize(int sig); @@ -1095,7 +1094,7 @@ only name(first DELIMITER_NAME_LEN bytes) is checked. */ return (len >= DELIMITER_NAME_LEN && - !my_strnncoll(charset_info, (uchar*) name, DELIMITER_NAME_LEN, + !my_strnncoll(&my_charset_latin1, (uchar*) name, DELIMITER_NAME_LEN, (uchar *) DELIMITER_NAME, DELIMITER_NAME_LEN)); } @@ -1492,6 +1491,8 @@ {"batch", 'B', "Don't use history file. Disable interactive behavior. (Enables --silent.)", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"binary-as-hex", 'b', "Print binary data as hex", &opt_binhex, &opt_binhex, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"character-sets-dir", OPT_CHARSETS_DIR, "Directory for character set files.", &charsets_dir, &charsets_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, @@ -1792,8 +1793,12 @@ break; case OPT_MYSQL_PROTOCOL: #ifndef EMBEDDED_LIBRARY - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } #endif break; case OPT_SERVER_ARG: @@ -3314,7 +3319,8 @@ print_table_data_html(result); else if (opt_xml) print_table_data_xml(result); - else if (vertical || (auto_vertical_output && (terminal_width < get_result_width(result)))) + else if (vertical || (auto_vertical_output && + (terminal_width < get_result_width(result)))) print_table_data_vertically(result); else if (opt_silent && verbose <= 2 && !output_tables) print_tab_data(result); @@ -3533,6 +3539,41 @@ } +/* Used to determine if we should invoke print_as_hex for this field */ + +static bool +is_binary_field(MYSQL_FIELD *field) +{ + if ((field->charsetnr == 63) && + (field->type == MYSQL_TYPE_BIT || + field->type == MYSQL_TYPE_BLOB || + field->type == MYSQL_TYPE_LONG_BLOB || + field->type == MYSQL_TYPE_MEDIUM_BLOB || + field->type == MYSQL_TYPE_TINY_BLOB || + field->type == MYSQL_TYPE_VAR_STRING || + field->type == MYSQL_TYPE_STRING || + field->type == MYSQL_TYPE_VARCHAR || + field->type == MYSQL_TYPE_GEOMETRY)) + return 1; + return 0; +} + + +/* Print binary value as hex literal (0x ...) */ + +static void +print_as_hex(FILE *output_file, const char *str, ulong len, ulong total_bytes_to_send) +{ + const char *ptr= str, *end= ptr+len; + ulong i; + fprintf(output_file, "0x"); + for(; ptr < end; ptr++) + fprintf(output_file, "%02X", *((uchar*)ptr)); + for (i= 2*len+2; i < total_bytes_to_send; i++) + tee_putc((int)' ', output_file); +} + + static void print_table_data(MYSQL_RES *result) { @@ -3559,6 +3600,8 @@ length= MY_MAX(length,field->max_length); if (length < 4 && !IS_NOT_NULL(field->flags)) length=4; // Room for "NULL" + if (opt_binhex && is_binary_field(field)) + length= 2 + length * 2; field->max_length=length; num_flag[mysql_field_tell(result) - 1]= IS_NUM(field->type); separator.fill(separator.length()+length+2,'-'); @@ -3626,9 +3669,11 @@ many extra padding-characters we should send with the printing function. */ visible_length= charset_info->cset->numcells(charset_info, buffer, buffer + data_length); - extra_padding= data_length - visible_length; + extra_padding= (uint) (data_length - visible_length); - if (field_max_length > MAX_COLUMN_LENGTH) + if (opt_binhex && is_binary_field(field)) + print_as_hex(PAGER, cur[off], lengths[off], field_max_length); + else if (field_max_length > MAX_COLUMN_LENGTH) tee_print_sized_data(buffer, data_length, MAX_COLUMN_LENGTH+extra_padding, FALSE); else { @@ -3762,11 +3807,15 @@ if (interrupted_query) break; ulong *lengths=mysql_fetch_lengths(result); + field= mysql_fetch_fields(result); (void) tee_fputs("", PAGER); for (uint i=0; i < mysql_num_fields(result); i++) { (void) tee_fputs("", PAGER); - xmlencode_print(cur[i], lengths[i]); + if (opt_binhex && is_binary_field(&field[i])) + print_as_hex(PAGER, cur[i], lengths[i], lengths[i]); + else + xmlencode_print(cur[i], lengths[i]); (void) tee_fputs("", PAGER); } (void) tee_fputs("", PAGER); @@ -3802,7 +3851,10 @@ if (cur[i]) { tee_fprintf(PAGER, "\">"); - xmlencode_print(cur[i], lengths[i]); + if (opt_binhex && is_binary_field(&fields[i])) + print_as_hex(PAGER, cur[i], lengths[i], lengths[i]); + else + xmlencode_print(cur[i], lengths[i]); tee_fprintf(PAGER, "\n"); } else @@ -3849,23 +3901,28 @@ { unsigned int i; const char *p; - + if (opt_binhex && is_binary_field(field)) + fprintf(PAGER, "0x"); for (i= 0, p= cur[off]; i < lengths[off]; i+= 1, p+= 1) { - if (*p == '\0') - tee_putc((int)' ', PAGER); + if (opt_binhex && is_binary_field(field)) + fprintf(PAGER, "%02X", *((uchar*)p)); else - tee_putc((int)*p, PAGER); + { + if (*p == '\0') + tee_putc((int)' ', PAGER); + else + tee_putc((int)*p, PAGER); + } } tee_putc('\n', PAGER); } - else + else tee_fprintf(PAGER, "NULL\n"); } } } - /* print_warnings should be called right after executing a statement */ static void print_warnings() @@ -4002,11 +4059,19 @@ while ((cur = mysql_fetch_row(result))) { lengths=mysql_fetch_lengths(result); - safe_put_field(cur[0],lengths[0]); + field= mysql_fetch_fields(result); + if (opt_binhex && is_binary_field(&field[0])) + print_as_hex(PAGER, cur[0], lengths[0], lengths[0]); + else + safe_put_field(cur[0],lengths[0]); + for (uint off=1 ; off < mysql_num_fields(result); off++) { (void) tee_fputs("\t", PAGER); - safe_put_field(cur[off], lengths[off]); + if (opt_binhex && field && is_binary_field(&field[off])) + print_as_hex(PAGER, cur[off], lengths[off], lengths[off]); + else + safe_put_field(cur[off], lengths[off]); } (void) tee_fputs("\n", PAGER); } @@ -4798,10 +4863,11 @@ tee_fprintf(stdout, "Protocol:\t\tCompressed\n"); #endif - if ((status_str= mysql_stat(&mysql)) && !mysql_error(&mysql)[0]) + const char *pos; + if ((status_str= mysql_stat(&mysql)) && !mysql_error(&mysql)[0] && + (pos= strchr(status_str,' '))) { ulong sec; - const char *pos= strchr(status_str,' '); /* print label */ tee_fprintf(stdout, "%.*s\t\t\t", (int) (pos-status_str), status_str); if ((status_str= str2int(pos,10,0,LONG_MAX,(long*) &sec))) diff -Nru mariadb-10.1-10.1.25/client/mysqlcheck.c mariadb-10.1-10.1.30/client/mysqlcheck.c --- mariadb-10.1-10.1.25/client/mysqlcheck.c 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqlcheck.c 2017-12-21 15:48:45.000000000 +0000 @@ -367,8 +367,12 @@ print_version(); exit(0); break; case OPT_MYSQL_PROTOCOL: - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } break; } diff -Nru mariadb-10.1-10.1.25/client/mysqldump.c mariadb-10.1-10.1.30/client/mysqldump.c --- mariadb-10.1-10.1.25/client/mysqldump.c 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqldump.c 2017-12-21 15:48:45.000000000 +0000 @@ -92,8 +92,7 @@ static void add_load_option(DYNAMIC_STRING *str, const char *option, const char *option_value); -static ulong find_set(TYPELIB *lib, const char *x, size_t length, - char **err_pos, uint *err_len); +static ulong find_set(TYPELIB *, const char *, size_t, char **, uint *); static char *alloc_query_str(ulong size); static void field_escape(DYNAMIC_STRING* in, const char *from); @@ -957,8 +956,12 @@ break; } case (int) OPT_MYSQL_PROTOCOL: - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } break; } return 0; @@ -5471,7 +5474,7 @@ var_len= (uint) (pos - start); strmake(buff, start, MY_MIN(sizeof(buff) - 1, var_len)); find= find_type(buff, lib, FIND_TYPE_BASIC); - if (!find) + if (find <= 0) { *err_pos= (char*) start; *err_len= var_len; diff -Nru mariadb-10.1-10.1.25/client/mysqlimport.c mariadb-10.1-10.1.30/client/mysqlimport.c --- mariadb-10.1-10.1.25/client/mysqlimport.c 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqlimport.c 2017-12-21 15:48:45.000000000 +0000 @@ -249,8 +249,12 @@ break; #endif case OPT_MYSQL_PROTOCOL: - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } break; case '#': DBUG_PUSH(argument ? argument : "d:t:o"); @@ -675,7 +679,7 @@ MYF(0)))) return -2; - for (counter= 0; *argv != NULL; argv++) /* Loop through tables */ + for (; *argv != NULL; argv++) /* Loop through tables */ { pthread_mutex_lock(&counter_mutex); while (counter == opt_use_threads) diff -Nru mariadb-10.1-10.1.25/client/mysqlshow.c mariadb-10.1-10.1.30/client/mysqlshow.c --- mariadb-10.1-10.1.25/client/mysqlshow.c 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqlshow.c 2017-12-21 15:48:45.000000000 +0000 @@ -328,8 +328,12 @@ #endif break; case OPT_MYSQL_PROTOCOL: - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } break; case '#': DBUG_PUSH(argument ? argument : "d:t:o"); diff -Nru mariadb-10.1-10.1.25/client/mysqlslap.c mariadb-10.1-10.1.30/client/mysqlslap.c --- mariadb-10.1-10.1.25/client/mysqlslap.c 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqlslap.c 2017-12-21 15:48:45.000000000 +0000 @@ -779,8 +779,12 @@ #endif break; case OPT_MYSQL_PROTOCOL: - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } break; case '#': DBUG_PUSH(argument ? argument : default_dbug_option); diff -Nru mariadb-10.1-10.1.25/client/mysqltest.cc mariadb-10.1-10.1.30/client/mysqltest.cc --- mariadb-10.1-10.1.25/client/mysqltest.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysqltest.cc 2017-12-21 15:48:45.000000000 +0000 @@ -600,7 +600,7 @@ void str_to_file(const char *fname, char *str, int size); void str_to_file2(const char *fname, char *str, int size, my_bool append); -void fix_win_paths(const char *val, int len); +void fix_win_paths(const char *val, size_t len); const char *get_errname_from_code (uint error_code); int multi_reg_replace(struct st_replace_regex* r,char* val); @@ -814,8 +814,7 @@ LogFile log_file; LogFile progress_file; -void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val, - int len); +void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val, size_t len); void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val); void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val); void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING* ds_input, @@ -2653,6 +2652,7 @@ if (!mysql) { struct st_command command; + DBUG_ASSERT(query_end); memset(&command, 0, sizeof(command)); command.query= (char*)query; command.first_word_len= (*query_end - query); @@ -4024,7 +4024,25 @@ strxnmov(path, sizeof(path), dir, sep, file->name, NULL); if (!MY_S_ISDIR(file->mystat->st_mode)) + { err= my_delete(path, 0); +#ifdef _WIN32 + /* + On Windows, check and possible reset readonly attribute. + my_delete(), or DeleteFile does not remove theses files. + */ + if (err) + { + DWORD attr= GetFileAttributes(path); + if (attr != INVALID_FILE_ATTRIBUTES && + (attr & FILE_ATTRIBUTE_READONLY)) + { + SetFileAttributes(path, attr &~ FILE_ATTRIBUTE_READONLY); + err= my_delete(path, 0); + } + } +#endif + } else err= rmtree(path); @@ -7274,8 +7292,12 @@ exit(0); case OPT_MYSQL_PROTOCOL: #ifndef EMBEDDED_LIBRARY - opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib, - opt->name); + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } #endif break; case '?': @@ -7488,7 +7510,7 @@ => all \ from c:\mysql\m... until next space is converted into / */ -void fix_win_paths(const char *val, int len) +void fix_win_paths(const char *val, size_t len) { uint i; char *p; @@ -11013,7 +11035,7 @@ /* Append the string to ds, with optional replace */ void replace_dynstr_append_mem(DYNAMIC_STRING *ds, - const char *val, int len) + const char *val, size_t len) { char lower[512]; #ifdef __WIN__ diff -Nru mariadb-10.1-10.1.25/client/mysql_upgrade.c mariadb-10.1-10.1.30/client/mysql_upgrade.c --- mariadb-10.1-10.1.25/client/mysql_upgrade.c 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/client/mysql_upgrade.c 2017-12-21 15:48:45.000000000 +0000 @@ -166,8 +166,8 @@ "server with which it was built/distributed.", &opt_version_check, &opt_version_check, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, - {"write-binlog", OPT_WRITE_BINLOG, "All commands including those, " - "issued by mysqlcheck, are written to the binary log.", + {"write-binlog", OPT_WRITE_BINLOG, "All commands including those " + "issued by mysqlcheck are written to the binary log.", &opt_write_binlog, &opt_write_binlog, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} @@ -1171,6 +1171,8 @@ { int fd= create_temp_file(cnf_file_path, opt_tmpdir[0] ? opt_tmpdir : NULL, "mysql_upgrade-", O_CREAT | O_WRONLY, MYF(MY_FAE)); + if (fd < 0) + die(NULL); my_write(fd, USTRING_WITH_LEN( "[client]\n"), MYF(MY_FAE)); my_write(fd, (uchar*)ds_args.str, ds_args.length, MYF(MY_FAE)); my_close(fd, MYF(0)); diff -Nru mariadb-10.1-10.1.25/cmake/bison.cmake mariadb-10.1-10.1.30/cmake/bison.cmake --- mariadb-10.1-10.1.25/cmake/bison.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/bison.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -47,6 +47,21 @@ ENDIF() ENDIF() IF(BISON_USABLE) + # Workaround for VS regenerating output even + # when outputs are up-to-date. At least, fix output timestamp + # after build so that files that depend on generated header are + # not rebuilt. + IF(CMAKE_GENERATOR MATCHES "Visual Studio") + FIND_PROGRAM(TOUCH_EXECUTABLE touch DOC "Path to touch executable" + PATHS "C:/Program Files/Git/usr/bin" + "C:/Program Files (x86)/Git/usr/bin") + IF(TOUCH_EXECUTABLE) + SET(VS_FIX_OUTPUT_TIMESTAMPS + COMMAND ${TOUCH_EXECUTABLE} -r ${input_yy} ${output_cc} + COMMAND ${TOUCH_EXECUTABLE} -r ${input_yy} ${output_h}) + ENDIF() + ENDIF() + ADD_CUSTOM_COMMAND( OUTPUT ${output_cc} ${output_h} @@ -54,8 +69,9 @@ --output=${output_cc} --defines=${output_h} ${input_yy} - DEPENDS ${input_yy} - ) + ${VS_FIX_OUTPUT_TIMESTAMPS} + DEPENDS ${input_yy} + ) ELSE() # Bison is missing or not usable, e.g too old IF(EXISTS ${output_cc} AND EXISTS ${output_h}) diff -Nru mariadb-10.1-10.1.25/cmake/cpack_rpm.cmake mariadb-10.1-10.1.30/cmake/cpack_rpm.cmake --- mariadb-10.1-10.1.25/cmake/cpack_rpm.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/cpack_rpm.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -168,9 +168,14 @@ "MariaDB-client") IF(WITH_WSREP) -SETA(CPACK_RPM_server_PACKAGE_REQUIRES - "galera" "rsync" "lsof" "grep" "gawk" "iproute" - "coreutils" "findutils" "tar" "which") + SETA(CPACK_RPM_server_PACKAGE_REQUIRES + "galera" "rsync" "lsof" "grep" "gawk" "iproute" + "coreutils" "findutils" "tar") + IF (RPM MATCHES "sles11") + SETA(CPACK_RPM_server_PACKAGE_REQUIRES "util-linux") + ELSE() + SETA(CPACK_RPM_server_PACKAGE_REQUIRES "which") + ENDIF() ENDIF() SET(CPACK_RPM_server_PRE_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-prein.sh) diff -Nru mariadb-10.1-10.1.25/cmake/dtrace.cmake mariadb-10.1-10.1.30/cmake/dtrace.cmake --- mariadb-10.1-10.1.25/cmake/dtrace.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/dtrace.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -42,7 +42,8 @@ # On FreeBSD, dtrace does not handle userland tracing yet IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD" AND NOT BUGGY_GCC_NO_DTRACE_MODULES - AND NOT BUGGY_LINUX_DTRACE) + AND NOT BUGGY_LINUX_DTRACE + AND NOT CMAKE_SYSTEM_NAME MATCHES "SunOS") SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace") ENDIF() SET(HAVE_DTRACE ${ENABLE_DTRACE}) diff -Nru mariadb-10.1-10.1.25/cmake/install_layout.cmake mariadb-10.1-10.1.30/cmake/install_layout.cmake --- mariadb-10.1-10.1.25/cmake/install_layout.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/install_layout.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -162,6 +162,8 @@ SET(INSTALL_UNIX_ADDRDIR_RPM "${INSTALL_MYSQLDATADIR_RPM}/mysql.sock") SET(INSTALL_SYSTEMD_UNITDIR_RPM "/usr/lib/systemd/system") +SET(INSTALL_SYSTEMD_SYSUSERSDIR_RPM "/usr/lib/sysusers.d") +SET(INSTALL_SYSTEMD_TMPFILESDIR_RPM "/usr/lib/tmpfiles.d") # # DEB layout @@ -191,6 +193,8 @@ SET(INSTALL_UNIX_ADDRDIR_DEB "/var/run/mysqld/mysqld.sock") SET(INSTALL_SYSTEMD_UNITDIR_DEB "/lib/systemd/system") +SET(INSTALL_SYSTEMD_SYSUSERSDIR_DEB "/usr/lib/sysusers.d") +SET(INSTALL_SYSTEMD_TMPFILESDIR_DEB "/usr/lib/tmpfiles.d") # # SVR4 layout @@ -232,7 +236,7 @@ # layout is chosen) FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN SYSCONF SYSCONF2 INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA UNIX_ADDR - SYSTEMD_UNIT) + SYSTEMD_UNIT SYSTEMD_SYSUSERS SYSTEMD_TMPFILES) SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}} CACHE STRING "${var} installation directory" ${FORCE}) MARK_AS_ADVANCED(INSTALL_${var}DIR) diff -Nru mariadb-10.1-10.1.25/cmake/install_macros.cmake mariadb-10.1-10.1.30/cmake/install_macros.cmake --- mariadb-10.1-10.1.25/cmake/install_macros.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/install_macros.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -32,17 +32,8 @@ ENDIF() SET(targets ${ARG_DEFAULT_ARGS}) FOREACH(target ${targets}) - GET_TARGET_PROPERTY(type ${target} TYPE) - GET_TARGET_PROPERTY(location ${target} LOCATION) - STRING(REPLACE ".exe" ".pdb" pdb_location ${location}) - STRING(REPLACE ".dll" ".pdb" pdb_location ${pdb_location}) - STRING(REPLACE ".lib" ".pdb" pdb_location ${pdb_location}) - IF(CMAKE_GENERATOR MATCHES "Visual Studio") - STRING(REPLACE - "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" - pdb_location ${pdb_location}) - ENDIF() - + GET_TARGET_PROPERTY(target_type ${target} TYPE) + set(comp "") IF(target MATCHES "mysqld" OR type MATCHES "MODULE") @@ -61,11 +52,9 @@ IF(NOT comp) SET(comp Debuginfo_archive_only) # not in MSI ENDIF() - IF(type MATCHES "STATIC") - # PDB for static libraries might be unsupported http://public.kitware.com/Bug/view.php?id=14600 - SET(opt OPTIONAL) - ENDIF() - INSTALL(FILES ${pdb_location} DESTINATION ${ARG_INSTALL_LOCATION} COMPONENT ${comp} ${opt}) + IF(NOT target_type MATCHES "STATIC") + INSTALL(FILES $ DESTINATION ${ARG_INSTALL_LOCATION} COMPONENT ${comp}) + ENDIF() ENDFOREACH() ENDIF() ENDFUNCTION() @@ -211,37 +200,22 @@ ENDIF() ENDIF() -MACRO(SIGN_TARGET) - MYSQL_PARSE_ARGUMENTS(ARG "COMPONENT" "" ${ARGN}) - SET(target ${ARG_DEFAULT_ARGS}) - IF(ARG_COMPONENT) - SET(comp COMPONENT ${ARG_COMPONENT}) - ELSE() - SET(comp) - ENDIF() - GET_TARGET_PROPERTY(target_type ${target} TYPE) - IF(target_type AND NOT target_type MATCHES "STATIC") - GET_TARGET_PROPERTY(target_location ${target} LOCATION) - IF(CMAKE_GENERATOR MATCHES "Visual Studio") - STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" - target_location ${target_location}) - ENDIF() - INSTALL(CODE - "EXECUTE_PROCESS(COMMAND - \"${SIGNTOOL_EXECUTABLE}\" verify /pa /q \"${target_location}\" - RESULT_VARIABLE ERR) - IF(NOT \${ERR} EQUAL 0) - EXECUTE_PROCESS(COMMAND - \"${SIGNTOOL_EXECUTABLE}\" sign ${SIGNTOOL_PARAMETERS} \"${target_location}\" - RESULT_VARIABLE ERR) + +FUNCTION(SIGN_TARGET target) + IF(NOT SIGNCODE) + RETURN() ENDIF() - IF(NOT \${ERR} EQUAL 0) - MESSAGE(FATAL_ERROR \"Error signing '${target_location}'\") + GET_TARGET_PROPERTY(target_type ${target} TYPE) + IF((NOT target_type) OR (target_type MATCHES "STATIC")) + RETURN() ENDIF() - " ${comp}) - ENDIF() -ENDMACRO() - + # Mark executable for signing by creating empty *.signme file + # The actual signing happens in preinstall step + # (which traverses + ADD_CUSTOM_COMMAND(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E touch "$.signme" + ) +ENDFUNCTION() # Installs targets, also installs pdbs on Windows. # diff -Nru mariadb-10.1-10.1.25/cmake/maintainer.cmake mariadb-10.1-10.1.30/cmake/maintainer.cmake --- mariadb-10.1-10.1.25/cmake/maintainer.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/maintainer.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -20,6 +20,11 @@ SET(MY_WARNING_FLAGS "${MY_WARNING_FLAGS} -Wvla") ENDIF() +MY_CHECK_C_COMPILER_FLAG("-Wno-format-truncation") +IF(HAVE_C__Wno_format_truncation) + SET(MY_WARNING_FLAGS "${MY_WARNING_FLAGS} -Wno-format-truncation") +ENDIF() + # Common warning flags for GCC and Clang SET(MY_C_WARNING_FLAGS "${MY_WARNING_FLAGS} -Wwrite-strings -Wdeclaration-after-statement") diff -Nru mariadb-10.1-10.1.25/cmake/os/Windows.cmake mariadb-10.1-10.1.30/cmake/os/Windows.cmake --- mariadb-10.1-10.1.25/cmake/os/Windows.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/os/Windows.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -114,8 +114,8 @@ ENDIF() #TODO: update the code and remove the disabled warnings - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /wd4291 /wd4577 /we4099") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996 /we4700") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /wd4291 /wd4577 /we4099 /we4700") IF(CMAKE_SIZEOF_VOID_P MATCHES 8) # _WIN64 is defined by the compiler itself. diff -Nru mariadb-10.1-10.1.25/cmake/pcre.cmake mariadb-10.1-10.1.30/cmake/pcre.cmake --- mariadb-10.1-10.1.25/cmake/pcre.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/pcre.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -1,11 +1,23 @@ +INCLUDE (CheckCSourceRuns) + SET(WITH_PCRE "auto" CACHE STRING "Which pcre to use (possible values are 'bundled', 'system', or 'auto')") MACRO (CHECK_PCRE) IF(WITH_PCRE STREQUAL "system" OR WITH_PCRE STREQUAL "auto") - CHECK_LIBRARY_EXISTS(pcre pcre_stack_guard "" HAVE_PCRE) + CHECK_LIBRARY_EXISTS(pcre pcre_stack_guard "" HAVE_PCRE_STACK_GUARD) + IF(NOT CMAKE_CROSSCOMPILING) + SET(CMAKE_REQUIRED_LIBRARIES "pcre") + CHECK_C_SOURCE_RUNS(" + #include + int main() { + return -pcre_exec(NULL, NULL, NULL, -999, -999, 0, NULL, 0) < 256; + }" PCRE_STACK_SIZE_OK) + SET(CMAKE_REQUIRED_LIBRARIES) + ENDIF() ENDIF() - IF(NOT HAVE_PCRE OR WITH_PCRE STREQUAL "bundled") + IF(NOT HAVE_PCRE_STACK_GUARD OR NOT PCRE_STACK_SIZE_OK OR + WITH_PCRE STREQUAL "bundled") IF (WITH_PCRE STREQUAL "system") MESSAGE(FATAL_ERROR "system pcre is not found or unusable") ENDIF() diff -Nru mariadb-10.1-10.1.25/cmake/plugin.cmake mariadb-10.1-10.1.30/cmake/plugin.cmake --- mariadb-10.1-10.1.25/cmake/plugin.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/plugin.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -222,7 +222,8 @@ # Install dynamic library IF(ARG_COMPONENT) IF(CPACK_COMPONENTS_ALL AND - NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT}) + NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT} + AND INSTALL_SYSCONF2DIR) IF (ARG_STORAGE_ENGINE) SET(ver " = %{version}-%{release}") ELSE() diff -Nru mariadb-10.1-10.1.25/cmake/sign.cmake.in mariadb-10.1-10.1.30/cmake/sign.cmake.in --- mariadb-10.1-10.1.25/cmake/sign.cmake.in 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/sign.cmake.in 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,18 @@ +FILE(GLOB_RECURSE files "@CMAKE_BINARY_DIR@/*.signme") +MESSAGE(STATUS "signing files") +FOREACH(f ${files}) + STRING(REPLACE ".signme" "" exe_location "${f}") + + string (REPLACE ";" " " params "@SIGNTOOL_PARAMETERS@") + #MESSAGE("@SIGNTOOL_EXECUTABLE@" sign ${params} "${exe_location}") + + EXECUTE_PROCESS(COMMAND + "@SIGNTOOL_EXECUTABLE@" sign @SIGNTOOL_PARAMETERS@ "${exe_location}" + RESULT_VARIABLE ERR) + IF(NOT ${ERR} EQUAL 0) + MESSAGE( "Error ${ERR} signing ${exe_location}") + ELSE() + FILE(REMOVE ${f}) + ENDIF() + +ENDFOREACH() diff -Nru mariadb-10.1-10.1.25/cmake/ssl.cmake mariadb-10.1-10.1.30/cmake/ssl.cmake --- mariadb-10.1-10.1.25/cmake/ssl.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/ssl.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -1,4 +1,5 @@ -# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2012, Oracle and/or its affiliates. +# Copyright (c) 2011, 2017, MariaDB Corporation # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -11,7 +12,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # We support different versions of SSL: # - "bundled" uses source code in /extra/yassl @@ -180,7 +181,7 @@ ) MESSAGE(STATUS "OPENSSL_MAJOR_VERSION = ${OPENSSL_MAJOR_VERSION}") ENDIF() - IF(OPENSSL_MAJOR_VERSION GREATER 0) + IF(TRUE) #OPENSSL_MAJOR_VERSION GREATER 0) SET(SSL_SOURCES "") SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARY}) IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") @@ -207,7 +208,7 @@ HAVE_EncryptAes128Gcm) ELSE() IF(WITH_SSL STREQUAL "system") - MESSAGE(SEND_ERROR "Cannot find appropriate system libraries for SSL. Use WITH_SSL=bundled to enable SSL support") + MESSAGE(SEND_ERROR "Cannot find appropriate system libraries for SSL. Use WITH_SSL=bundled to enable SSL support") ENDIF() MYSQL_USE_BUNDLED_SSL() ENDIF() diff -Nru mariadb-10.1-10.1.25/cmake/systemd.cmake mariadb-10.1-10.1.30/cmake/systemd.cmake --- mariadb-10.1-10.1.25/cmake/systemd.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/systemd.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -76,9 +76,11 @@ UNSET(HAVE_SYSTEMD_SD_NOTIFYF) MESSAGE(STATUS "Systemd features not enabled") IF(WITH_SYSTEMD STREQUAL "yes") - MESSAGE(FATAL_ERROR "Requested WITH_SYSTEMD=YES however no dependencies installed/found") + MESSAGE(FATAL_ERROR "Requested WITH_SYSTEMD=yes however no dependencies installed/found") ENDIF() ENDIF() + ELSEIF(NOT WITH_SYSTEMD STREQUAL "no") + MESSAGE(FATAL_ERROR "Invalid value for WITH_SYSTEMD. Must be 'yes', 'no', or 'auto'.") ENDIF() ENDIF() ENDMACRO() diff -Nru mariadb-10.1-10.1.25/cmake/wsrep.cmake mariadb-10.1-10.1.30/cmake/wsrep.cmake --- mariadb-10.1-10.1.25/cmake/wsrep.cmake 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/cmake/wsrep.cmake 2017-12-21 15:48:45.000000000 +0000 @@ -26,7 +26,7 @@ OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ${with_wsrep_default}) # Set the patch version -SET(WSREP_PATCH_VERSION "19") +SET(WSREP_PATCH_VERSION "21") # Obtain wsrep API version FILE(STRINGS "${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h" WSREP_API_VERSION diff -Nru mariadb-10.1-10.1.25/CMakeLists.txt mariadb-10.1-10.1.30/CMakeLists.txt --- mariadb-10.1-10.1.25/CMakeLists.txt 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/CMakeLists.txt 2017-12-21 15:48:45.000000000 +0000 @@ -479,6 +479,12 @@ INCLUDE(CPack) +IF(WIN32 AND SIGNCODE) + # Configure post-install script for authenticode signing + CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/cmake/sign.cmake.in sign.cmake @ONLY) + INSTALL(SCRIPT ${PROJECT_BINARY_DIR}/sign.cmake) +ENDIF() + IF(NON_DISTRIBUTABLE_WARNING) MESSAGE(WARNING " You have linked MariaDB with GPLv3 libraries! You may not distribute the resulting binary. If you do, you will put yourself into a legal problem with Free Software Foundation.") diff -Nru mariadb-10.1-10.1.25/debian/additions/mariadb.conf.d/50-client.cnf mariadb-10.1-10.1.30/debian/additions/mariadb.conf.d/50-client.cnf --- mariadb-10.1-10.1.25/debian/additions/mariadb.conf.d/50-client.cnf 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/additions/mariadb.conf.d/50-client.cnf 2018-01-02 11:51:23.000000000 +0000 @@ -7,9 +7,6 @@ # Default is Latin1, if you need UTF-8 set this (also in server section) default-character-set = utf8mb4 -# socket location -socket = /var/run/mysqld/mysqld.sock - # Example of client certificate usage # ssl-cert=/etc/mysql/client-cert.pem # ssl-key=/etc/mysql/client-key.pem diff -Nru mariadb-10.1-10.1.25/debian/changelog mariadb-10.1-10.1.30/debian/changelog --- mariadb-10.1-10.1.25/debian/changelog 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/changelog 2018-01-02 11:51:23.000000000 +0000 @@ -1,14 +1,34 @@ +mariadb-10.1 (10.1.30-0ubuntu0.17.10.1) artful-security; urgency=high + + [ Otto Kekäläinen ] + * SECURITY UPDATE: New upstream release 10.1.30. Includes fixes for + the following security vulnerabilities (LP: #1740768) + - CVE-2017-15365 + * Previous release 10.1.29 included included fixes for + the following security vulnerabilities: + - CVE-2017-10378 + - CVE-2017-10268 + - MDEV-13819 + * Previous release 10.1.26 included included fixes for + - CVE-2017-10384 + - CVE-2017-10379 + - CVE-2017-10286 + - CVE-2017-3636 + - CVE-2017-3641 + - CVE-2017-3653 + * Delete unnecessary systemd files introduced by upstream + + [ Vicentiu Ciorbaru ] + * Fix Mroonga compilation failure on arm64 + + -- Otto Kekäläinen Tue, 02 Jan 2018 13:51:23 +0200 + mariadb-10.1 (10.1.25-1) unstable; urgency=medium * New upstream version 10.1.25 * Update quilt patches on top of mariadb-10.1.25 release - * Explicitly add dh_systemd_start snippets to mariadb-server-10.1 - because it's all messed up with different name for sysvinit ('mysql') - and systemd ('mariadb') (Closes: #865870) - * Don't disable PIE, it's enabled by upstream anyway (Closes: #865737) - * Add default socket location for client (Closes: #864662) - -- Ondřej Surý Sun, 30 Jul 2017 14:15:48 +0200 + -- Ondřej Surý Wed, 12 Jul 2017 09:39:19 +0200 mariadb-10.1 (10.1.24-6) unstable; urgency=medium diff -Nru mariadb-10.1-10.1.25/debian/control mariadb-10.1-10.1.30/debian/control --- mariadb-10.1-10.1.25/debian/control 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/control 2018-01-02 11:51:23.000000000 +0000 @@ -1,7 +1,8 @@ Source: mariadb-10.1 Section: database Priority: optional -Maintainer: Debian MySQL Maintainers +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian MySQL Maintainers Uploaders: Otto Kekäläinen , Arnaud Fontaine , Ondřej Surý diff -Nru mariadb-10.1-10.1.25/debian/libmariadbclient-dev.install mariadb-10.1-10.1.30/debian/libmariadbclient-dev.install --- mariadb-10.1-10.1.25/debian/libmariadbclient-dev.install 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/libmariadbclient-dev.install 2018-01-02 11:51:23.000000000 +0000 @@ -1,6 +1,7 @@ #!/usr/bin/dh-exec usr/bin/mysql_config usr/include/mysql/*.h +usr/include/mysql/private/*.h usr/include/mysql/psi/*.h usr/lib/*/libmariadbclient.a usr/lib/*/libmariadbclient.so diff -Nru mariadb-10.1-10.1.25/debian/mariadb-server-10.1.postinst mariadb-10.1-10.1.30/debian/mariadb-server-10.1.postinst --- mariadb-10.1-10.1.25/debian/mariadb-server-10.1.postinst 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/mariadb-server-10.1.postinst 2018-01-02 11:51:23.000000000 +0000 @@ -167,13 +167,9 @@ #DEBHELPER# -# Modified dh_systemd_start snippet that's not added automatically due /etc/init.d/mysql -if [ -d /run/systemd/system ]; then - systemctl --system daemon-reload >/dev/null || true - deb-systemd-invoke start mariadb.service >/dev/null || true # Modified dh_installinit snippet to only run with sysvinit -elif [ -x "/etc/init.d/mysql" ]; then - if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then + if [ ! -e /run/systemd/system ] && [ -x "/etc/init.d/mysql" ]; then invoke-rc.d mysql start || exit $? fi fi diff -Nru mariadb-10.1-10.1.25/debian/mariadb-server-10.1.postrm mariadb-10.1-10.1.30/debian/mariadb-server-10.1.postrm --- mariadb-10.1-10.1.25/debian/mariadb-server-10.1.postrm 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/mariadb-server-10.1.postrm 2018-01-02 11:51:23.000000000 +0000 @@ -47,9 +47,4 @@ fi -# Modified dh_systemd_start snippet that's not added automatically due /etc/init.d/mysql -if [ -d /run/systemd/system ]; then - systemctl --system daemon-reload >/dev/null || true -fi - exit 0 diff -Nru mariadb-10.1-10.1.25/debian/mariadb-server-10.1.prerm mariadb-10.1-10.1.30/debian/mariadb-server-10.1.prerm --- mariadb-10.1-10.1.25/debian/mariadb-server-10.1.prerm 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/mariadb-server-10.1.prerm 2018-01-02 11:51:23.000000000 +0000 @@ -3,11 +3,8 @@ #DEBHELPER# -# Modified dh_systemd_start snippet that's not added automatically due /etc/init.d/mysql -if [ -d /run/systemd/system ]; then - deb-systemd-invoke stop mariadb.service >/dev/null # Modified dh_installinit snippet to only run with sysvinit -elif [ -x "/etc/init.d/mysql" ]; then +if [ ! -e /run/systemd/system ] && [ -x "/etc/init.d/mysql" ]; then invoke-rc.d mysql stop || exit $? fi diff -Nru mariadb-10.1-10.1.25/debian/not-installed mariadb-10.1-10.1.30/debian/not-installed --- mariadb-10.1-10.1.25/debian/not-installed 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/not-installed 2018-01-02 11:51:23.000000000 +0000 @@ -357,3 +357,9 @@ usr/share/man/man1/mysqlbug.1 usr/share/man/man1/mysql.server.1 usr/share/man/man1/my_safe_process.1 +usr/share/groonga-normalizer-mysql/README.md +usr/share/groonga-normalizer-mysql/lgpl-2.0.txt +usr/share/mysql/mroonga/COPYING +usr/share/mysql/mroonga/AUTHORS +usr/share/groonga/README.md +usr/share/groonga/COPYING diff -Nru mariadb-10.1-10.1.25/debian/patches/0026-Mroonga-fix-ice-arm64.patch mariadb-10.1-10.1.30/debian/patches/0026-Mroonga-fix-ice-arm64.patch --- mariadb-10.1-10.1.25/debian/patches/0026-Mroonga-fix-ice-arm64.patch 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/0026-Mroonga-fix-ice-arm64.patch 2018-01-02 11:51:23.000000000 +0000 @@ -0,0 +1,22 @@ +From: Vicentiu Ciorbaru + +Subject: Workaround for ICE in mroonga on Arm64 architecture +Details: There seems to be a bug in gcc-6.3.0 on arm64 where it fails +to compile a file which makes use of the not_equal_float function. +A basic logic workaround solves the problem by calling the equal_float +function instead. + + +diff --git a/storage/mroonga/vendor/groonga/lib/ts/ts_expr_node.c b/storage/mroonga/vendor/groonga/lib/ts/ts_expr_node.c +index 44378cfa..a3d838c3 100644 +--- a/storage/mroonga/vendor/groonga/lib/ts/ts_expr_node.c ++++ b/storage/mroonga/vendor/groonga/lib/ts/ts_expr_node.c +@@ -562,7 +562,7 @@ inline static grn_ts_bool + grn_ts_op_not_equal_float(grn_ts_float lhs, grn_ts_float rhs) + { + /* To suppress warnings, "lhs != rhs" is not used. */ +- return (lhs < rhs) || (lhs > rhs); ++ return !grn_ts_op_equal_float(lhs, rhs); + } + + /* grn_ts_op_not_equal_time() returns lhs != rhs. */ diff -Nru mariadb-10.1-10.1.25/debian/patches/Add_default_ExecStartPre_to_mariadb@.service.patch mariadb-10.1-10.1.30/debian/patches/Add_default_ExecStartPre_to_mariadb@.service.patch --- mariadb-10.1-10.1.25/debian/patches/Add_default_ExecStartPre_to_mariadb@.service.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/Add_default_ExecStartPre_to_mariadb@.service.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,6 +1,6 @@ --- mariadb-10.1.orig/support-files/mariadb@.service.in +++ mariadb-10.1/support-files/mariadb@.service.in -@@ -65,6 +65,8 @@ ProtectHome=true +@@ -67,6 +67,8 @@ ProtectHome=true # Execute pre and post scripts as root, otherwise it does it as User= PermissionsStartOnly=true diff -Nru mariadb-10.1-10.1.25/debian/patches/armhf_mroonga_storage_fail.patch mariadb-10.1-10.1.30/debian/patches/armhf_mroonga_storage_fail.patch --- mariadb-10.1-10.1.25/debian/patches/armhf_mroonga_storage_fail.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/armhf_mroonga_storage_fail.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,11 +1,16 @@ -Description: Prevent unaligned memory access on armhf in mroonga storage engine - Make use of memcpy instead of straight pointer dereferencing. The surrounding - code uses the same logic and should be fixed upstream. -Author: Vicențiu Ciorbaru +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:29 +0200 +Subject: armhf_mroonga_storage_fail ---- mariadb-10.1.orig/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp -+++ mariadb-10.1/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp -@@ -612,9 +612,10 @@ namespace mrn { +--- + storage/mroonga/lib/mrn_multiple_column_key_codec.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp b/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp +index 0038a7f..5213da8 100644 +--- a/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp ++++ b/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp +@@ -621,9 +621,10 @@ namespace mrn { long long int long_long_value; mrn_byte_order_network_to_host(&long_long_value, grn_key, grn_key_size); int max_bit = (grn_key_size * 8 - 1); diff -Nru mariadb-10.1-10.1.25/debian/patches/c11_atomics.patch mariadb-10.1-10.1.30/debian/patches/c11_atomics.patch --- mariadb-10.1-10.1.25/debian/patches/c11_atomics.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/c11_atomics.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,10 +1,19 @@ -Description: Fix mips missing atomics primitives - On mips we don't have native support for 64bit atomic operations. Make use - of libatomic to emulate them. -Author: Vicențiu Ciorbaru +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:29 +0200 +Subject: c11_atomics ---- mariadb-10.1.orig/configure.cmake -+++ mariadb-10.1/configure.cmake +--- + configure.cmake | 23 +++++++++++++++++++++-- + include/atomic/gcc_builtins.h | 15 +++++++++++++++ + include/atomic/nolock.h | 4 ++-- + mysys/CMakeLists.txt | 4 ++++ + sql/CMakeLists.txt | 4 ++++ + 5 files changed, 46 insertions(+), 4 deletions(-) + +diff --git a/configure.cmake b/configure.cmake +index 0057c7f..43ad114 100644 +--- a/configure.cmake ++++ b/configure.cmake @@ -128,7 +128,7 @@ IF(UNIX) ENDIF() FIND_PACKAGE(Threads) @@ -42,8 +51,10 @@ ELSE() MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!") ENDIF() ---- mariadb-10.1.orig/include/atomic/gcc_builtins.h -+++ mariadb-10.1/include/atomic/gcc_builtins.h +diff --git a/include/atomic/gcc_builtins.h b/include/atomic/gcc_builtins.h +index 56a0323..044be2e 100644 +--- a/include/atomic/gcc_builtins.h ++++ b/include/atomic/gcc_builtins.h @@ -16,6 +16,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -73,8 +84,10 @@ #ifdef MY_ATOMIC_MODE_DUMMY #define make_atomic_load_body(S) ret= *a #define make_atomic_store_body(S) *a= v ---- mariadb-10.1.orig/include/atomic/nolock.h -+++ mariadb-10.1/include/atomic/nolock.h +diff --git a/include/atomic/nolock.h b/include/atomic/nolock.h +index 2137445..2ad7d98 100644 +--- a/include/atomic/nolock.h ++++ b/include/atomic/nolock.h @@ -17,7 +17,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -93,8 +106,10 @@ # include "gcc_builtins.h" # elif defined(__i386__) || defined(__x86_64__) # include "x86-gcc.h" ---- mariadb-10.1.orig/mysys/CMakeLists.txt -+++ mariadb-10.1/mysys/CMakeLists.txt +diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt +index eb7f75e..a9221d7 100644 +--- a/mysys/CMakeLists.txt ++++ b/mysys/CMakeLists.txt @@ -78,6 +78,10 @@ IF(HAVE_BFD_H) TARGET_LINK_LIBRARIES(mysys bfd) ENDIF(HAVE_BFD_H) @@ -106,9 +121,11 @@ IF (WIN32) TARGET_LINK_LIBRARIES(mysys IPHLPAPI) ENDIF(WIN32) ---- mariadb-10.1.orig/sql/CMakeLists.txt -+++ mariadb-10.1/sql/CMakeLists.txt -@@ -178,6 +178,10 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI +diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt +index b4acac5..8247714 100644 +--- a/sql/CMakeLists.txt ++++ b/sql/CMakeLists.txt +@@ -165,6 +165,10 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI ${SSL_LIBRARIES} ${LIBSYSTEMD}) diff -Nru mariadb-10.1-10.1.25/debian/patches/extend_default_test_timeout_for_tokudb.patch mariadb-10.1-10.1.30/debian/patches/extend_default_test_timeout_for_tokudb.patch --- mariadb-10.1-10.1.25/debian/patches/extend_default_test_timeout_for_tokudb.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/extend_default_test_timeout_for_tokudb.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,10 +1,15 @@ -Description: Extend timeout - Some Debian pbuilder/sbuilder chroots can be very slow and would timeout in - vain as given enough time the build result is fully correct. -Forwarded: not-needed -Author: Otto Kekäläinen ---- mariadb-10.1.orig/mysql-test/CMakeLists.txt -+++ mariadb-10.1/mysql-test/CMakeLists.txt +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: extend_default_test_timeout_for_tokudb + +--- + mysql-test/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/mysql-test/CMakeLists.txt b/mysql-test/CMakeLists.txt +index 1c7cfaf..bc45177 100644 +--- a/mysql-test/CMakeLists.txt ++++ b/mysql-test/CMakeLists.txt @@ -64,7 +64,7 @@ ELSE() ENDIF() diff -Nru mariadb-10.1-10.1.25/debian/patches/fix-FTBFS-on-GNU-Hurd.patch mariadb-10.1-10.1.30/debian/patches/fix-FTBFS-on-GNU-Hurd.patch --- mariadb-10.1-10.1.25/debian/patches/fix-FTBFS-on-GNU-Hurd.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/fix-FTBFS-on-GNU-Hurd.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,324 +0,0 @@ ---- mariadb-10.1.orig/cmake/package_name.cmake -+++ mariadb-10.1/cmake/package_name.cmake -@@ -81,6 +81,9 @@ IF(NOT VERSION) - SET(DEFAULT_MACHINE "i386") - ENDIF() - ENDIF() -+ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "GNU") -+ SET(DEFAULT_PLATFORM "GNU") -+ SET(DEFAULT_MACHINE "i386") - ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin") - IF(CMAKE_OSX_DEPLOYMENT_TARGET) - SET(DEFAULT_PLATFORM "osx${CMAKE_OSX_DEPLOYMENT_TARGET}") ---- mariadb-10.1.orig/cmake/dtrace.cmake -+++ mariadb-10.1/cmake/dtrace.cmake -@@ -45,6 +45,10 @@ MACRO(CHECK_DTRACE) - AND NOT BUGGY_LINUX_DTRACE) - SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace") - ENDIF() -+ # On GNU/Hurd, dtrace is not supported -+ IF(DTRACE AND CMAKE_SYSTEM_NAME MATCHES "GNU") -+ SET(ENABLE_DTRACE OFF CACHE BOOL "Disable dtrace") -+ ENDIF() - SET(HAVE_DTRACE ${ENABLE_DTRACE}) - IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") - IF(CMAKE_SIZEOF_VOID_P EQUAL 4) ---- mariadb-10.1.orig/storage/mroonga/vendor/groonga/config.h.cmake -+++ mariadb-10.1/storage/mroonga/vendor/groonga/config.h.cmake -@@ -109,6 +109,7 @@ - #cmakedefine HAVE_STRING_H - #cmakedefine HAVE_SYS_MMAN_H - #cmakedefine HAVE_SYS_PARAM_H -+#cmakedefine HAVE_SYS_POLL_H - #cmakedefine HAVE_SYS_RESOURCE_H - #cmakedefine HAVE_SYS_SELECT_H - #cmakedefine HAVE_SYS_SOCKET_H ---- mariadb-10.1.orig/mysys/mysys_priv.h -+++ mariadb-10.1/mysys/mysys_priv.h -@@ -16,6 +16,10 @@ - #ifndef MYSYS_PRIV_INCLUDED - #define MYSYS_PRIV_INCLUDED - -+#ifndef _GNU_SOURCE -+#define _GNU_SOURCE -+#endif -+ - #include - #include - #include -@@ -111,7 +115,7 @@ void my_error_unregister_all(void); - #ifndef O_PATH /* not Linux */ - #if defined(O_SEARCH) /* Illumos */ - #define O_PATH O_SEARCH --#elif defined(O_EXEC) /* FreeBSD */ -+#elif defined(O_EXEC) && defined(__FreeBSD_kernel__) /* FreeBSD */ - #define O_PATH O_EXEC - #endif - #endif -@@ -128,8 +132,8 @@ const char *my_open_parent_dir_nosymlink - return res; - #elif defined(HAVE_REALPATH) && defined(PATH_MAX) - #define NOSYMLINK_FUNCTION_BODY(AT,NOAT) \ -- char buf[PATH_MAX+1]; \ -- if (realpath(pathname, buf) == NULL) return -1; \ -+ char *buf = realpath(NULL, 0); \ -+ if (buf == NULL) return -1; \ - if (strcmp(pathname, buf)) { errno= ENOTDIR; return -1; } \ - return NOAT; - #elif defined(HAVE_REALPATH) ---- mariadb-10.1.orig/storage/mroonga/vendor/groonga/lib/grn_com.h -+++ mariadb-10.1/storage/mroonga/vendor/groonga/lib/grn_com.h -@@ -66,13 +66,22 @@ GRN_API grn_com_queue_entry *grn_com_que - - /******* grn_com ********/ - --#ifdef USE_SELECT -+#if defined(USE_SELECT) - # ifdef HAVE_SYS_SELECT_H - # include - # endif /* HAVE_SYS_SELECT_H */ - # define GRN_COM_POLLIN 1 - # define GRN_COM_POLLOUT 2 - #else /* USE_SELECT */ -+# ifdef USE_POLL -+# if defined(HAVE_POLL_H) -+# include -+# elif defined(HAVE_SYS_POLL_H) -+# include -+# endif /* defined(HAVE_POLL_H) */ -+# define GRN_COM_POLLIN POLLIN -+# define GRN_COM_POLLOUT POLLOUT -+#else /* USE_POLL */ - # ifdef USE_EPOLL - # include - # define GRN_COM_POLLIN EPOLLIN -@@ -82,16 +91,9 @@ GRN_API grn_com_queue_entry *grn_com_que - # include - # define GRN_COM_POLLIN EVFILT_READ - # define GRN_COM_POLLOUT EVFILT_WRITE --# else /* USE_KQUEUE */ --# if defined(HAVE_POLL_H) --# include --# elif defined(HAVE_SYS_POLL_H) --# include --# endif /* defined(HAVE_POLL_H) */ --# define GRN_COM_POLLIN POLLIN --# define GRN_COM_POLLOUT POLLOUT - # endif /* USE_KQUEUE */ - # endif /* USE_EPOLL */ -+#endif /* USE_POLL */ - #endif /* USE_SELECT */ - - typedef struct _grn_com grn_com; -@@ -137,7 +139,7 @@ struct _grn_com_event { - grn_com_addr curr_edge_id; - grn_com *acceptor; - void *opaque; --#ifndef USE_SELECT -+#if !defined(USE_SELECT) || !defined(USE_POLL) - #ifdef USE_EPOLL - int epfd; - struct epoll_event *events; -@@ -150,7 +152,7 @@ struct _grn_com_event { - struct pollfd *events; - #endif /* USE_KQUEUE */ - #endif /* USE_EPOLL */ --#endif /* USE_SELECT */ -+#endif /* USE_SELECT || USE_POLL */ - }; - - grn_rc grn_com_init(void); ---- mariadb-10.1.orig/storage/mroonga/vendor/groonga/lib/com.c -+++ mariadb-10.1/storage/mroonga/vendor/groonga/lib/com.c -@@ -277,7 +277,7 @@ grn_com_event_init(grn_ctx *ctx, grn_com - MUTEX_INIT(ev->mutex); - COND_INIT(ev->cond); - GRN_COM_QUEUE_INIT(&ev->recv_old); --#ifndef USE_SELECT -+#if !defined(USE_SELECT) && !defined(USE_POLL) - # ifdef USE_EPOLL - if ((ev->events = GRN_MALLOC(sizeof(struct epoll_event) * max_nevents))) { - if ((ev->epfd = epoll_create(max_nevents)) != -1) { -@@ -306,9 +306,9 @@ grn_com_event_init(grn_ctx *ctx, grn_com - grn_hash_close(ctx, ev->hash); - ev->hash = NULL; - ev->events = NULL; --#else /* USE_SELECT */ -+#else /* USE_SELECT && USE_POLL */ - goto exit; --#endif /* USE_SELECT */ -+#endif /* USE_SELECT && USE_POLL */ - } - exit : - return ctx->rc; -@@ -322,7 +322,7 @@ grn_com_event_fin(grn_ctx *ctx, grn_com_ - grn_msg_close(ctx, msg); - } - if (ev->hash) { grn_hash_close(ctx, ev->hash); } --#ifndef USE_SELECT -+#if !defined(USE_SELECT) && !defined(USE_POLL) - if (ev->events) { GRN_FREE(ev->events); } - # ifdef USE_EPOLL - grn_close(ev->epfd); -@@ -330,7 +330,7 @@ grn_com_event_fin(grn_ctx *ctx, grn_com_ - # ifdef USE_KQUEUE - grn_close(ev->kqfd); - # endif /* USE_KQUEUE*/ --#endif /* USE_SELECT */ -+#endif /* USE_SELECT && USE_POLL */ - return GRN_SUCCESS; - } - ---- mariadb-10.1.orig/sql/wsrep_binlog.cc -+++ mariadb-10.1/sql/wsrep_binlog.cc -@@ -318,13 +318,23 @@ int wsrep_write_cache(wsrep_t* const ws - - void wsrep_dump_rbr_buf(THD *thd, const void* rbr_buf, size_t buf_len) - { -- char filename[PATH_MAX]= {0}; -- int len= snprintf(filename, PATH_MAX, "%s/GRA_%ld_%lld.log", -+ int len = snprintf(NULL, 0, "%s/GRA_%ld_%lld.log", - wsrep_data_home_dir, thd->thread_id, - (long long)wsrep_thd_trx_seqno(thd)); -- if (len >= PATH_MAX) -+ if (len < 0) - { -- WSREP_ERROR("RBR dump path too long: %d, skipping dump.", len); -+ WSREP_ERROR("snprintf error: %d, skipping dump.", len); -+ DBUG_VOID_RETURN; -+ } -+ -+ char *filename= (char *)malloc(len++); -+ int len1= snprintf(filename, len, "%s/GRA_%ld_%lld.log", -+ wsrep_data_home_dir, thd->thread_id, -+ (long long)wsrep_thd_trx_seqno(thd)); -+ if (len >= len1) -+ { -+ WSREP_ERROR("RBR dump path truncated: %d, skipping dump.", len); -+ free(filename); - return; - } - -@@ -343,6 +353,7 @@ void wsrep_dump_rbr_buf(THD *thd, const - WSREP_ERROR("Failed to open file '%s': %d (%s)", - filename, errno, strerror(errno)); - } -+ free(filename); - } - - /* -@@ -448,19 +459,29 @@ void wsrep_dump_rbr_buf_with_header(THD - { - DBUG_ENTER("wsrep_dump_rbr_buf_with_header"); - -- char filename[PATH_MAX]= {0}; - File file; - IO_CACHE cache; - Log_event_writer writer(&cache); - Format_description_log_event *ev; - -- int len= my_snprintf(filename, PATH_MAX, "%s/GRA_%ld_%lld_v2.log", -+ int len= snprintf(NULL, 0, "%s/GRA_%ld_%lld_v2.log", -+ wsrep_data_home_dir, thd->thread_id, -+ (long long) wsrep_thd_trx_seqno(thd)); -+ -+ if (len < 0) -+ { -+ WSREP_ERROR("snprintf error: %d, skipping dump.", len); -+ DBUG_VOID_RETURN; -+ } -+ -+ char *filename= (char*)malloc(len++); -+ int len1= my_snprintf(filename, len, "%s/GRA_%ld_%lld_v2.log", - wsrep_data_home_dir, thd->thread_id, - (long long) wsrep_thd_trx_seqno(thd)); - -- if (len >= PATH_MAX) -+ if (len >= len1) - { -- WSREP_ERROR("RBR dump path too long: %d, skipping dump.", len); -+ WSREP_ERROR("RBR dump path truncated: %d, skipping dump.", len); - DBUG_VOID_RETURN; - } - -@@ -498,6 +519,7 @@ void wsrep_dump_rbr_buf_with_header(THD - } - - cleanup2: -+ free(filename); - end_io_cache(&cache); - - cleanup1: ---- mariadb-10.1.orig/extra/mariabackup/backup_copy.cc -+++ mariadb-10.1/extra/mariabackup/backup_copy.cc -@@ -623,11 +623,13 @@ static - int - mkdirp(const char *pathname, int Flags, myf MyFlags) - { -- char parent[PATH_MAX], *p; -+ char *parent, *p; -+ int len = strlen(pathname) + 1; - - /* make a parent directory path */ -- strncpy(parent, pathname, sizeof(parent)); -- parent[sizeof(parent) - 1] = 0; -+ parent = (char *)malloc(len); -+ strncpy(parent, pathname, len); -+ parent[len] = 0; - - for (p = parent + strlen(parent); - !is_path_separator(*p) && p != parent; p--); -@@ -636,19 +638,23 @@ mkdirp(const char *pathname, int Flags, - - /* try to make parent directory */ - if (p != parent && mkdirp(parent, Flags, MyFlags) != 0) { -+ free(parent); - return(-1); - } - - /* make this one if parent has been made */ - if (my_mkdir(pathname, Flags, MyFlags) == 0) { -+ free(parent); - return(0); - } - - /* if it already exists that is fine */ - if (errno == EEXIST) { -+ free(parent); - return(0); - } - -+ free(parent); - return(-1); - } - -@@ -658,17 +664,24 @@ bool - equal_paths(const char *first, const char *second) - { - #ifdef HAVE_REALPATH -- char real_first[PATH_MAX]; -- char real_second[PATH_MAX]; -+ char *real_first, *real_second; -+ int result; - -- if (realpath(first, real_first) == NULL) { -+ real_first = realpath(first, 0); -+ if (real_first == NULL) { - return false; - } -- if (realpath(second, real_second) == NULL) { -+ -+ real_second = realpath(second, 0); -+ if (real_second == NULL) { -+ free(real_second); - return false; - } - -- return (strcmp(real_first, real_second) == 0); -+ result = strcmp(real_first, real_second); -+ free(real_first); -+ free(real_second); -+ return result == 0; - #else - return strcmp(first, second) == 0; - #endif diff -Nru mariadb-10.1-10.1.25/debian/patches/hurd_socket.patch mariadb-10.1-10.1.30/debian/patches/hurd_socket.patch --- mariadb-10.1-10.1.25/debian/patches/hurd_socket.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/hurd_socket.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,11 +1,15 @@ -Description: Do not check socket path truncation on hurd either - On GNU/Hurd perl's $sock->hostpath() can't work since the path is not recorded - in the socket internals. GNU/Hurd doesn't have any socket path limitation - anyway, so the attached proposed patch just skips the check. -Author: Samuel Thibault +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:29 +0200 +Subject: hurd_socket ---- mariadb-10.1.orig/mysql-test/lib/My/Platform.pm -+++ mariadb-10.1/mysql-test/lib/My/Platform.pm +--- + mysql-test/lib/My/Platform.pm | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/mysql-test/lib/My/Platform.pm b/mysql-test/lib/My/Platform.pm +index 110cf8a..c49450b 100644 +--- a/mysql-test/lib/My/Platform.pm ++++ b/mysql-test/lib/My/Platform.pm @@ -112,6 +112,8 @@ sub check_socket_path_length { return 0 if ($^O eq 'aix'); # See Debian bug #670722 - failing on kFreeBSD even after setting short path diff -Nru mariadb-10.1-10.1.25/debian/patches/innodb_simulate_comp_test_speedup.patch mariadb-10.1-10.1.30/debian/patches/innodb_simulate_comp_test_speedup.patch --- mariadb-10.1-10.1.25/debian/patches/innodb_simulate_comp_test_speedup.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/innodb_simulate_comp_test_speedup.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,14 +1,15 @@ -Description: Add options to innodb test that fixes possible test failure - It was noticed that the test innodb_simulate_comp_failures_small - repeatedly fails on some machines because the test is way too I/O - heavy and mysqld starts to time-out under heavy load. - . - Remove this once upstream has released an official fix. -Author: Otto Kekäläinen -Bug: https://jira.mariadb.org/browse/MDEV-6682 +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: innodb_simulate_comp_test_speedup ---- mariadb-10.1.orig/mysql-test/suite/innodb/t/innodb_simulate_comp_failures_small-master.opt -+++ mariadb-10.1/mysql-test/suite/innodb/t/innodb_simulate_comp_failures_small-master.opt +--- + mysql-test/suite/innodb/t/innodb_simulate_comp_failures_small-master.opt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/mysql-test/suite/innodb/t/innodb_simulate_comp_failures_small-master.opt b/mysql-test/suite/innodb/t/innodb_simulate_comp_failures_small-master.opt +index fae3205..2ac6dc5 100644 +--- a/mysql-test/suite/innodb/t/innodb_simulate_comp_failures_small-master.opt ++++ b/mysql-test/suite/innodb/t/innodb_simulate_comp_failures_small-master.opt @@ -1,2 +1,3 @@ --innodb-file-per-table +--innodb-flush-log-at-trx-commit=2 diff -Nru mariadb-10.1-10.1.25/debian/patches/kFreeBSD-gettid.patch mariadb-10.1-10.1.30/debian/patches/kFreeBSD-gettid.patch --- mariadb-10.1-10.1.25/debian/patches/kFreeBSD-gettid.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/kFreeBSD-gettid.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,5 +1,15 @@ ---- mariadb-10.1.orig/storage/tokudb/PerconaFT/portability/portability.cc -+++ mariadb-10.1/storage/tokudb/PerconaFT/portability/portability.cc +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:29 +0200 +Subject: kFreeBSD-gettid + +--- + storage/tokudb/PerconaFT/portability/portability.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/storage/tokudb/PerconaFT/portability/portability.cc b/storage/tokudb/PerconaFT/portability/portability.cc +index 19f445a..73dce92 100644 +--- a/storage/tokudb/PerconaFT/portability/portability.cc ++++ b/storage/tokudb/PerconaFT/portability/portability.cc @@ -115,6 +115,10 @@ toku_os_gettid(void) { return syscall(SYS_gettid); #elif defined(HAVE_PTHREAD_GETTHREADID_NP) diff -Nru mariadb-10.1-10.1.25/debian/patches/libmariadbclient-rename.patch mariadb-10.1-10.1.30/debian/patches/libmariadbclient-rename.patch --- mariadb-10.1-10.1.25/debian/patches/libmariadbclient-rename.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/libmariadbclient-rename.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,13 +1,22 @@ -Author: Otto Kekäläinen -Date: Fri Jul 8 23:52:23 2016 +0300 - Rename libmysqlclient to libmariadbclient in order to ship a - libmariadbclient.so.18 in libmariadbclient18 and - libmariadbclient.so in libmariadbclient-dev. There is a separate - libmariadbclient-dev-compat package that links libmysqlclient.so - to libmariadbclient.so. +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:27 +0200 +Subject: libmariadbclient-rename ---- mariadb-10.1.orig/client/CMakeLists.txt -+++ mariadb-10.1/client/CMakeLists.txt +--- + client/CMakeLists.txt | 24 ++++++++++++------------ + cmake/for_clients.cmake | 8 ++++---- + libmysql/CMakeLists.txt | 27 ++++++++++++++++----------- + man/mysql_config.1 | 6 +++--- + scripts/make_win_bin_dist | 8 ++++---- + scripts/mysql_config.pl.in | 6 +++--- + tests/CMakeLists.txt | 6 +++--- + unittest/mysys/CMakeLists.txt | 2 +- + 8 files changed, 46 insertions(+), 41 deletions(-) + +diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt +index e4643ad..523912e 100644 +--- a/client/CMakeLists.txt ++++ b/client/CMakeLists.txt @@ -32,7 +32,7 @@ COPY_OPENSSL_DLLS(copy_openssl_client) ADD_DEFINITIONS(${SSL_DEFINES}) MYSQL_ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc @@ -76,49 +85,58 @@ SET_TARGET_PROPERTIES (mysqlcheck mysqldump mysqlimport mysql_upgrade mysqlshow mysqlslap mysql_plugin async_example PROPERTIES HAS_CXX TRUE) ---- mariadb-10.1.orig/libmysql/CMakeLists.txt -+++ mariadb-10.1/libmysql/CMakeLists.txt -@@ -278,7 +278,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux") - - INCLUDE (CheckCSourceCompiles) - FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.ld" -- "VERSION {\nlibmysqlclient_18 {\nglobal: *;\n};\n}\n") -+ "VERSION {\nlibmariadbclient_18 {\nglobal: *;\n};\n}\n") - SET(CMAKE_REQUIRED_LIBRARIES "-Wl,src.ld") - CHECK_C_SOURCE_COMPILES("int main() { return 0; }" - SUPPORTS_VERSION_IN_LINK_SCRIPT) -@@ -380,18 +380,18 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux") - # Generate version script. - # Create semicolon separated lists of functions to export from - # Since RPM packages use separate versioning for 5.1 API -- # and 5.5 API (libmysqlclient_16 vs libmysqlclient_18), -+ # and 5.5 API (libmariadbclient_16 vs libmariadbclient_18), - # we need 2 lists. - SET (VERSION_HEADER - "VERSION { -- libmysqlclient_18 { -+ libmariadbclient_18 { - global:") - SET (VERSION_FOOTER - " local: - *; - }; +diff --git a/cmake/for_clients.cmake b/cmake/for_clients.cmake +index dd79ea1..879da78 100644 +--- a/cmake/for_clients.cmake ++++ b/cmake/for_clients.cmake +@@ -2,8 +2,8 @@ + # Generate LIBS and CFLAGS that third-party clients should use + # -- libmysqlclient_16 { -+ libmariadbclient_16 { +-# Use cmake variables to inspect dependencies for +-# mysqlclient library (add -l stuff) ++# Use cmake variables to inspect dependencies for ++# mariadbclient library (add -l stuff) + SET(CLIENT_LIBS "") + SET(LIBS "") + +@@ -45,10 +45,10 @@ MACRO(EXTRACT_LINK_LIBRARIES target var) + ENDIF() + ENDMACRO() + +-EXTRACT_LINK_LIBRARIES(mysqlclient LIBS) ++EXTRACT_LINK_LIBRARIES(mariadbclient LIBS) + EXTRACT_LINK_LIBRARIES(mysqlserver EMB_LIBS) + +-SET(LIBS "-lmysqlclient ${ZLIB_DEPS} ${LIBS} ${openssl_libs}") ++SET(LIBS "-lmariadbclient ${ZLIB_DEPS} ${LIBS} ${openssl_libs}") + SET(EMB_LIBS "-lmysqld ${ZLIB_DEPS} ${EMB_LIBS} ${openssl_libs}") + + MACRO(REPLACE_FOR_CLIENTS VAR) +diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt +index acbd80b..5819d79 100644 +--- a/libmysql/CMakeLists.txt ++++ b/libmysql/CMakeLists.txt +@@ -398,6 +398,10 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux") + libmysqlclient_16 { /* empty here. aliases are added above */ }; ++ ++ libmariadbclient_16 { ++ /* empty here. aliases are added above */ ++ }; } -@@ -401,7 +401,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux") - SET (CLIENT_API_5_1_ALIASES) + ") + +@@ -407,6 +411,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux") FOREACH (f ${CLIENT_API_FUNCTIONS_5_1} ${CLIENT_API_5_1_EXTRA}) SET(CLIENT_API_5_1_LIST "${CLIENT_API_5_1_LIST}\t${f};\n") -- SET(CLIENT_API_5_1_ALIASES "${CLIENT_API_5_1_ALIASES}\"${f}@libmysqlclient_16\" = ${f};\n") -+ SET(CLIENT_API_5_1_ALIASES "${CLIENT_API_5_1_ALIASES}\"${f}@libmariadbclient_16\" = ${f};\n") + SET(CLIENT_API_5_1_ALIASES "${CLIENT_API_5_1_ALIASES}\"${f}@libmysqlclient_16\" = ${f};\n") ++ SET(DEBIAN9_ALIASES "${DEBIAN9_ALIASES}\"${f}@libmariadbclient_16\" = ${f};\n") + SET(DEBIAN9_ALIASES "${DEBIAN9_ALIASES}\"${f}@libmariadbclient_18\" = ${f};\n") ENDFOREACH() - SET (CLIENT_API_5_5_LIST) -@@ -446,13 +446,13 @@ ADD_DEPENDENCIES(clientlib GenError) +@@ -457,13 +462,13 @@ ADD_DEPENDENCIES(clientlib GenError) SET(LIBS clientlib dbug strings vio mysys mysys_ssl ${ZLIB_LIBRARY} ${SSL_LIBRARIES} ${LIBDL}) @@ -135,7 +153,7 @@ INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) ENDIF() -@@ -468,7 +468,7 @@ IF(UNIX) +@@ -479,7 +484,7 @@ IF(UNIX) SET(${OUTNAME} ${LIBNAME}${EXTENSION}${DOT_VERSION}) ENDIF() ENDMACRO() @@ -144,7 +162,7 @@ ENDIF() IF(NOT DISABLE_SHARED) -@@ -484,9 +484,9 @@ IF(NOT DISABLE_SHARED) +@@ -495,9 +500,9 @@ IF(NOT DISABLE_SHARED) ELSE() SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}.0.0") ENDIF() @@ -156,7 +174,7 @@ VERSION "${OS_SHARED_LIB_VERSION}" SOVERSION "${SHARED_LIB_MAJOR_VERSION}") IF(LINK_FLAG_NO_UNDEFINED OR VERSION_SCRIPT_LINK_FLAGS) -@@ -499,13 +499,13 @@ IF(NOT DISABLE_SHARED) +@@ -510,13 +515,13 @@ IF(NOT DISABLE_SHARED) "${libmysql_link_flags} ${LINK_FLAG_NO_UNDEFINED} ${VERSION_SCRIPT_LINK_FLAGS}") ENDIF() # clean direct output needs to be set several targets have the same name @@ -174,7 +192,7 @@ "${CMAKE_SHARED_LIBRARY_SUFFIX}" "" linkname) -@@ -514,7 +514,7 @@ IF(NOT DISABLE_SHARED) +@@ -525,7 +530,7 @@ IF(NOT DISABLE_SHARED) LIST(REMOVE_DUPLICATES OS_SHARED_LIB_SYMLINKS) FOREACH(ver ${OS_SHARED_LIB_SYMLINKS}) GET_VERSIONED_LIBNAME( @@ -183,8 +201,10 @@ "${CMAKE_SHARED_LIBRARY_SUFFIX}" "${ver}" linkname) ---- mariadb-10.1.orig/man/mysql_config.1 -+++ mariadb-10.1/man/mysql_config.1 +diff --git a/man/mysql_config.1 b/man/mysql_config.1 +index 47e8a3a..c699974 100644 +--- a/man/mysql_config.1 ++++ b/man/mysql_config.1 @@ -38,7 +38,7 @@ supports the following options\&. \fB\-\-cflags\fR .sp @@ -206,34 +226,10 @@ \-lpthread \-lz \-lcrypt \-lnsl \-lm \-lpthread] \-\-socket [/tmp/mysql\&.sock] \-\-port [3306] ---- mariadb-10.1.orig/cmake/for_clients.cmake -+++ mariadb-10.1/cmake/for_clients.cmake -@@ -2,8 +2,8 @@ - # Generate LIBS and CFLAGS that third-party clients should use - # - --# Use cmake variables to inspect dependencies for --# mysqlclient library (add -l stuff) -+# Use cmake variables to inspect dependencies for -+# mariadbclient library (add -l stuff) - SET(CLIENT_LIBS "") - SET(LIBS "") - -@@ -45,10 +45,10 @@ MACRO(EXTRACT_LINK_LIBRARIES target var) - ENDIF() - ENDMACRO() - --EXTRACT_LINK_LIBRARIES(mysqlclient LIBS) -+EXTRACT_LINK_LIBRARIES(mariadbclient LIBS) - EXTRACT_LINK_LIBRARIES(mysqlserver EMB_LIBS) - --SET(LIBS "-lmysqlclient ${ZLIB_DEPS} ${LIBS} ${openssl_libs}") -+SET(LIBS "-lmariadbclient ${ZLIB_DEPS} ${LIBS} ${openssl_libs}") - SET(EMB_LIBS "-lmysqld ${ZLIB_DEPS} ${EMB_LIBS} ${openssl_libs}") - - MACRO(REPLACE_FOR_CLIENTS VAR) ---- mariadb-10.1.orig/scripts/make_win_bin_dist -+++ mariadb-10.1/scripts/make_win_bin_dist +diff --git a/scripts/make_win_bin_dist b/scripts/make_win_bin_dist +index 2415d40..bfff308 100755 +--- a/scripts/make_win_bin_dist ++++ b/scripts/make_win_bin_dist @@ -293,7 +293,7 @@ mkdir -p $DESTDIR/lib/plugin cp sql/$TARGET/mysqld.lib $DESTDIR/lib/ cp libmysql/$TARGET/libmysql.dll \ @@ -263,8 +259,10 @@ mysys/debug/mysys.lib \ mysys/debug/mysys.pdb \ regex/debug/regex.lib \ ---- mariadb-10.1.orig/scripts/mysql_config.pl.in -+++ mariadb-10.1/scripts/mysql_config.pl.in +diff --git a/scripts/mysql_config.pl.in b/scripts/mysql_config.pl.in +index f2c27bc..9cf718b 100644 +--- a/scripts/mysql_config.pl.in ++++ b/scripts/mysql_config.pl.in @@ -183,15 +183,15 @@ if ( $^O eq "MSWin32" ) my $linkpath = "$pkglibdir"; # user32 is only needed for debug or embedded @@ -284,8 +282,10 @@ @lib_e_opts = ($linkpath,"-lmysqld"); } ---- mariadb-10.1.orig/tests/CMakeLists.txt -+++ mariadb-10.1/tests/CMakeLists.txt +diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt +index f32e027..cb7e31c 100644 +--- a/tests/CMakeLists.txt ++++ b/tests/CMakeLists.txt @@ -18,12 +18,12 @@ ADD_DEFINITIONS("-DMYSQL_CLIENT") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) @@ -310,8 +310,10 @@ SET_TARGET_PROPERTIES(async_queries PROPERTIES LINKER_LANGUAGE CXX) ENDIF() ---- mariadb-10.1.orig/unittest/mysys/CMakeLists.txt -+++ mariadb-10.1/unittest/mysys/CMakeLists.txt +diff --git a/unittest/mysys/CMakeLists.txt b/unittest/mysys/CMakeLists.txt +index ad5195a..965df3c 100644 +--- a/unittest/mysys/CMakeLists.txt ++++ b/unittest/mysys/CMakeLists.txt @@ -21,7 +21,7 @@ MY_ADD_TESTS(my_vsnprintf LINK_LIBRARIES ADD_DEFINITIONS(${SSL_DEFINES}) diff -Nru mariadb-10.1-10.1.25/debian/patches/mips-connect-unaligned.patch mariadb-10.1-10.1.30/debian/patches/mips-connect-unaligned.patch --- mariadb-10.1-10.1.25/debian/patches/mips-connect-unaligned.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/mips-connect-unaligned.patch 2018-01-02 11:51:23.000000000 +0000 @@ -12,8 +12,8 @@ Author: James Cowgill --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ---- mariadb-10.1.orig/storage/connect/valblk.h -+++ mariadb-10.1/storage/connect/valblk.h +--- a/storage/connect/valblk.h ++++ b/storage/connect/valblk.h @@ -139,6 +139,7 @@ class VALBLK : public BLOCK { int Prec; // Precision of float values }; // end of class VALBLK @@ -101,9 +101,9 @@ }; // end of class TYPBLK /***********************************************************************/ ---- mariadb-10.1.orig/storage/connect/valblk.cpp -+++ mariadb-10.1/storage/connect/valblk.cpp -@@ -265,14 +265,14 @@ bool TYPBLK::Init(PGLOBAL g, bool +--- a/storage/connect/valblk.cpp ++++ b/storage/connect/valblk.cpp +@@ -266,14 +266,14 @@ bool TYPBLK::Init(PGLOBAL g, bool template char *TYPBLK::GetCharString(char *p, int n) { @@ -120,7 +120,7 @@ return p; } // end of GetCharString -@@ -288,7 +288,7 @@ void TYPBLK::SetValue(PVAL valp, i +@@ -289,7 +289,7 @@ void TYPBLK::SetValue(PVAL valp, i ChkTyp(valp); if (!(b = valp->IsNull())) @@ -129,7 +129,7 @@ else Reset(n); -@@ -350,9 +350,9 @@ void TYPBLK::SetValue(PCSZ p, int +@@ -351,9 +351,9 @@ void TYPBLK::SetValue(PCSZ p, int ulonglong val = CharToNumber(p, strlen(p), maxval, Unsigned, &minus); if (minus && val < maxval) @@ -141,7 +141,7 @@ SetNull(n, false); } // end of SetValue -@@ -395,7 +395,7 @@ void TYPBLK::SetValue(PCSZ p, in +@@ -396,7 +396,7 @@ void TYPBLK::SetValue(PCSZ p, in throw Type; } // endif Check @@ -150,7 +150,7 @@ SetNull(n, false); } // end of SetValue -@@ -427,7 +427,7 @@ void TYPBLK::SetValue(PVBLK pv, in +@@ -428,7 +428,7 @@ void TYPBLK::SetValue(PVBLK pv, in ChkTyp(pv); if (!(b = pv->IsNull(n2) && Nullable)) @@ -159,7 +159,7 @@ else Reset(n1); -@@ -478,10 +478,10 @@ void TYPBLK::SetMin(PVAL valp, int +@@ -479,10 +479,10 @@ void TYPBLK::SetMin(PVAL valp, int { CheckParms(valp, n) TYPE tval = GetTypedValue(valp); @@ -172,7 +172,7 @@ } // end of SetMin -@@ -493,10 +493,10 @@ void TYPBLK::SetMax(PVAL valp, int +@@ -494,10 +494,10 @@ void TYPBLK::SetMax(PVAL valp, int { CheckParms(valp, n) TYPE tval = GetTypedValue(valp); @@ -185,7 +185,7 @@ } // end of SetMax -@@ -510,8 +510,7 @@ void TYPBLK::SetValues(PVBLK pv, i +@@ -511,8 +511,7 @@ void TYPBLK::SetValues(PVBLK pv, i CheckType(pv) TYPE *lp = ((TYPBLK*)pv)->Typp; @@ -195,7 +195,7 @@ } // end of SetValues #endif // 0 -@@ -522,7 +521,7 @@ void TYPBLK::SetValues(PVBLK pv, i +@@ -523,7 +522,7 @@ void TYPBLK::SetValues(PVBLK pv, i template void TYPBLK::Move(int i, int j) { @@ -204,7 +204,7 @@ MoveNull(i, j); } // end of Move -@@ -536,7 +535,7 @@ int TYPBLK::CompVal(PVAL vp, int n +@@ -537,7 +536,7 @@ int TYPBLK::CompVal(PVAL vp, int n ChkIndx(n); ChkTyp(vp); #endif // _DEBUG @@ -213,7 +213,7 @@ TYPE vlv = GetTypedValue(vp); return (vlv > mlv) ? 1 : (vlv < mlv) ? (-1) : 0; -@@ -548,8 +547,8 @@ int TYPBLK::CompVal(PVAL vp, int n +@@ -549,8 +548,8 @@ int TYPBLK::CompVal(PVAL vp, int n template int TYPBLK::CompVal(int i1, int i2) { @@ -224,7 +224,7 @@ return (lv1 > lv2) ? 1 : (lv1 < lv2) ? (-1) : 0; } // end of CompVal -@@ -586,7 +585,7 @@ int TYPBLK::Find(PVAL vp) +@@ -587,7 +586,7 @@ int TYPBLK::Find(PVAL vp) TYPE n = GetTypedValue(vp); for (i = 0; i < Nval; i++) @@ -233,7 +233,7 @@ break; return (i < Nval) ? i : (-1); -@@ -602,7 +601,7 @@ int TYPBLK::GetMaxLength(void) +@@ -603,7 +602,7 @@ int TYPBLK::GetMaxLength(void) int i, n, m; for (i = n = 0; i < Nval; i++) { @@ -242,7 +242,7 @@ n = MY_MAX(n, m); } // endfor i -@@ -1332,7 +1331,7 @@ char *DATBLK::GetCharString(char *p, int +@@ -1333,7 +1332,7 @@ char *DATBLK::GetCharString(char *p, int char *vp; if (Dvalp) { @@ -251,7 +251,7 @@ vp = Dvalp->GetCharString(p); } else vp = TYPBLK::GetCharString(p, n); -@@ -1348,7 +1347,7 @@ void DATBLK::SetValue(PCSZ p, int n) +@@ -1349,7 +1348,7 @@ void DATBLK::SetValue(PCSZ p, int n) if (Dvalp) { // Decode the string according to format Dvalp->SetValue_psz(p); diff -Nru mariadb-10.1-10.1.25/debian/patches/mips-groonga-atomic.patch mariadb-10.1-10.1.30/debian/patches/mips-groonga-atomic.patch --- mariadb-10.1-10.1.25/debian/patches/mips-groonga-atomic.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/mips-groonga-atomic.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,13 +1,17 @@ -Description: Ensure groonga is built with libatomic - MIPS (and possibly other) platforms require linking against libatomic to - support 64-bit atomic integers. Groonga was failing to do so and all related - tests were failing with an atomics relocation error on MIPS. -Author: James Cowgill +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: mips-groonga-atomic + --- -This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ---- mariadb-10.1.orig/storage/mroonga/vendor/groonga/CMakeLists.txt -+++ mariadb-10.1/storage/mroonga/vendor/groonga/CMakeLists.txt -@@ -234,6 +234,8 @@ endmacro() + storage/mroonga/vendor/groonga/CMakeLists.txt | 2 ++ + storage/mroonga/vendor/groonga/lib/CMakeLists.txt | 1 + + 2 files changed, 3 insertions(+) + +diff --git a/storage/mroonga/vendor/groonga/CMakeLists.txt b/storage/mroonga/vendor/groonga/CMakeLists.txt +index e27070f..7f1899c 100644 +--- a/storage/mroonga/vendor/groonga/CMakeLists.txt ++++ b/storage/mroonga/vendor/groonga/CMakeLists.txt +@@ -238,6 +238,8 @@ endmacro() include(build/ac_macros/check_headers.m4) include(build/ac_macros/check_functions.m4) @@ -16,9 +20,11 @@ ac_check_symbols(fpclassify math.h) ac_check_lib(m fpclassify) ---- mariadb-10.1.orig/storage/mroonga/vendor/groonga/lib/CMakeLists.txt -+++ mariadb-10.1/storage/mroonga/vendor/groonga/lib/CMakeLists.txt -@@ -62,6 +62,7 @@ endif() +diff --git a/storage/mroonga/vendor/groonga/lib/CMakeLists.txt b/storage/mroonga/vendor/groonga/lib/CMakeLists.txt +index 6765261..6c13737 100644 +--- a/storage/mroonga/vendor/groonga/lib/CMakeLists.txt ++++ b/storage/mroonga/vendor/groonga/lib/CMakeLists.txt +@@ -90,6 +90,7 @@ endif() set_target_properties(libgroonga PROPERTIES OUTPUT_NAME "groonga") set(GRN_ALL_LIBRARIES diff -Nru mariadb-10.1-10.1.25/debian/patches/mips-machine.patch mariadb-10.1-10.1.30/debian/patches/mips-machine.patch --- mariadb-10.1-10.1.25/debian/patches/mips-machine.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/mips-machine.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,17 +1,15 @@ -Description: Fix DEFAULT_MACHINE on mips - The DEFAULT_MACHINE constant is calculated from the CMAKE_SYSTEM_PROCESSOR - variable which contains the processor which built mariadb. Since most Debian - buildds run on 64-bit hardware even though they build 32-bit binaries, - DEFAULT_MACHINE previously contained "mips64" on 32-bit builds. This confuses - some mroonga tests which rely on DEFAULT_MACHINE to detect 64-bitness. - . - This patch fixes the value of DEFAULT_MACHINE so it always contains just "mips" - on 32-bit mips builds. -Author: James Cowgill +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:29 +0200 +Subject: mips-machine + --- -This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ---- mariadb-10.1.orig/cmake/package_name.cmake -+++ mariadb-10.1/cmake/package_name.cmake + cmake/package_name.cmake | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/cmake/package_name.cmake b/cmake/package_name.cmake +index 4930a6b..7681f78 100644 +--- a/cmake/package_name.cmake ++++ b/cmake/package_name.cmake @@ -34,6 +34,10 @@ IF(NOT VERSION) SET(DEFAULT_MACHINE "mips") ENDIF() diff -Nru mariadb-10.1-10.1.25/debian/patches/mips-unstable-tests.patch mariadb-10.1-10.1.30/debian/patches/mips-unstable-tests.patch --- mariadb-10.1-10.1.25/debian/patches/mips-unstable-tests.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/mips-unstable-tests.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -Description: Remove various tests from unstable-tests which now pass on MIPS -Author: James Cowgill ---- -This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ---- mariadb-10.1.orig/mysql-test/unstable-tests -+++ mariadb-10.1/mysql-test/unstable-tests -@@ -143,7 +143,6 @@ engines/funcs.* : Not m - federated.assisted_discovery : Modified in 10.1.24 - federated.federated_bug_585688 : MDEV-12907 - Valgrind - federated.federated_innodb : MDEV-10617, MDEV-10417 - Wrong checksum, timeouts, fails on Mips --federated.federated_partition : MDEV-10417 - Fails on Mips - federated.federated_transactions : MDEV-10617, MDEV-10417 - Wrong checksum, timeouts, fails on Mips - federated.federatedx : MDEV-10617 - Wrong checksum, timeouts - -@@ -231,11 +230,10 @@ mroonga/storage.repair_table_no_index_fi - - #---------------------------------------------------------------- - --multi_source.gtid : MDEV-10417 - Fails on Mips - multi_source.info_logs : MDEV-10042 - Wrong result, MDEV-12629 - Valgrind warnings - multi_source.mdev-9544 : Added in 10.1.25 --multi_source.multisource : MDEV-10417 - Fails on Mips - multi_source.reset_slave : MDEV-10690 - wrong result -+multi_source.gtid : MDEV-10620 - Timeout in wait condition - multi_source.simple : MDEV-4633 - Wrong slave status output - multi_source.status_vars : MDEV-4632 - failed while waiting for Slave_received_heartbeats - -@@ -271,31 +269,25 @@ roles.show_create_database-10463 : - #---------------------------------------------------------------- - - rpl.last_insert_id : MDEV-10625 - warnings in error log --rpl.rpl_auto_increment : MDEV-10417 - Fails on Mips --rpl.rpl_auto_increment_bug45679 : MDEV-10417 - Fails on Mips - rpl.rpl_auto_increment_update_failure : MDEV-10625 - warnings in error log - rpl.rpl_binlog_index : MDEV-9501 - Warning: failed registering on master - rpl.rpl_checksum_cache : MDEV-12173 - Unexpected error --rpl.rpl_ddl : MDEV-10417 - Fails on Mips - rpl.rpl_domain_id_filter_restart : MDEV-10684 - Wrong result - rpl.rpl_gtid_basic : MDEV-10681 - server startup problem - rpl.rpl_gtid_crash : MDEV-9501 - Warning: failed registering on master - rpl.rpl_gtid_mdev9033 : MDEV-10680 - warnings - rpl.rpl_gtid_stop_start : MDEV-10629 - Crash on shutdown, MDEV-12629 - Valgrind warnings - rpl.rpl_gtid_until : MDEV-10625 - warnings in error log --rpl.rpl_innodb_bug30888 : MDEV-10417 - Fails on Mips - rpl.rpl_insert : MDEV-9329 - Fails on Ubuntu/s390x - rpl.rpl_insert_delayed : MDEV-9329 - Fails on Ubuntu/s390x --rpl.rpl_invoked_features : MDEV-10417 - Fails on Mips - rpl.rpl_mariadb_slave_capability : MDEV-11018 - sporadic wrong events in binlog - rpl.rpl_mdev-11092 : MDEV-13065 - Wrong value in include; added in 10.1.24 --rpl.rpl_mdev6020 : MDEV-10630, MDEV-10417 - Timeouts, fails on Mips -+rpl.rpl_mdev6020 : MDEV-10630, MDEV-10417 - Timeouts - rpl.rpl_parallel : MDEV-10653 - Timeouts - rpl.rpl_parallel_mdev6589 : MDEV-12979 - Assertion failure - rpl.rpl_parallel_optimistic : MDEV-10511 - timeout - rpl.rpl_parallel_retry : MDEV-11119 - Server crash - rpl.rpl_parallel_temptable : MDEV-10356 - Crash in close_thread_tables --rpl.rpl_partition_innodb : MDEV-10417 - Fails on Mips - rpl.rpl_password_boundaries : MDEV-11534 - Slave IO warnings - rpl.rpl_row_log_innodb : MDEV-10688 - Wrong result - rpl.rpl_row_sp001 : MDEV-9329 - Fails on Ubuntu/s390x diff -Nru mariadb-10.1-10.1.25/debian/patches/mysqld_multi_confd.patch mariadb-10.1-10.1.30/debian/patches/mysqld_multi_confd.patch --- mariadb-10.1-10.1.25/debian/patches/mysqld_multi_confd.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/mysqld_multi_confd.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,8 +1,16 @@ -Description: Makes mysqld_multi reading conf.d (Closes: #778761) -Author: Jan Wagner ---- mariadb-10.1.orig/scripts/mysqld_multi.sh -+++ mariadb-10.1/scripts/mysqld_multi.sh -@@ -513,6 +513,7 @@ sub list_defaults_files +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: mysqld_multi_confd + +--- + scripts/mysqld_multi.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/scripts/mysqld_multi.sh b/scripts/mysqld_multi.sh +index c6515a3..f50f0fe 100644 +--- a/scripts/mysqld_multi.sh ++++ b/scripts/mysqld_multi.sh +@@ -497,6 +497,7 @@ sub list_defaults_files '@prefix@/my.cnf', ($ENV{MYSQL_HOME} ? "$ENV{MYSQL_HOME}/my.cnf" : undef), $opt{'extra-file'}, diff -Nru mariadb-10.1-10.1.25/debian/patches/mysqld_multi.server_lsb-header.patch mariadb-10.1-10.1.30/debian/patches/mysqld_multi.server_lsb-header.patch --- mariadb-10.1-10.1.25/debian/patches/mysqld_multi.server_lsb-header.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/mysqld_multi.server_lsb-header.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,7 +1,15 @@ -Description: Provides LSB headers for example initscript (Closes: #778762) -Author: Jan Wagner ---- mariadb-10.1.orig/support-files/mysqld_multi.server.sh -+++ mariadb-10.1/support-files/mysqld_multi.server.sh +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: mysqld_multi.server_lsb-header + +--- + support-files/mysqld_multi.server.sh | 20 ++++++++++++++++++-- + 1 file changed, 18 insertions(+), 2 deletions(-) + +diff --git a/support-files/mysqld_multi.server.sh b/support-files/mysqld_multi.server.sh +index 75908a5..9e0dd79 100644 +--- a/support-files/mysqld_multi.server.sh ++++ b/support-files/mysqld_multi.server.sh @@ -14,8 +14,24 @@ # Version 1.0 # diff -Nru mariadb-10.1-10.1.25/debian/patches/mysql-test__db_test.patch mariadb-10.1-10.1.30/debian/patches/mysql-test__db_test.patch --- mariadb-10.1-10.1.25/debian/patches/mysql-test__db_test.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/mysql-test__db_test.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,20 +1,29 @@ +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: mysql-test__db_test + ## 50_mysql-test__db_test.dpatch by Christian Hammers ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Patch 33_scripts__mysql_create_system_tables__no_test removes the ## DP: rights for anybody to connect to the test database but the test ## DP: suite depends on them. ---- mariadb-10.1.orig/mysql-test/mysql-test-run.pl -+++ mariadb-10.1/mysql-test/mysql-test-run.pl -@@ -3203,6 +3203,11 @@ sub mysql_install_db { - mtr_appendfile_to_file("$sql_dir/mysql_system_tables_data.sql", - $bootstrap_sql_file); +--- + mysql-test/mysql-test-run.pl | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl +index ac9f493..7e7f116 100755 +--- a/mysql-test/mysql-test-run.pl ++++ b/mysql-test/mysql-test-run.pl +@@ -3203,6 +3203,10 @@ sub mysql_install_db { + mtr_appendfile_to_file("$sql_dir/mysql_system_tables_data.sql", + $bootstrap_sql_file); -+ mtr_tofile($bootstrap_sql_file, "-- Debian removed the default privileges on the 'test' database\n"); -+ mtr_tofile($bootstrap_sql_file, "INSERT INTO mysql.db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');\n"); -+ mtr_tofile($bootstrap_sql_file, "INSERT INTO mysql.db VALUES ('%','test\\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');\n"); ++ mtr_tofile($bootstrap_sql_file, "-- Debian removed the default privileges on the 'test' database\n"); ++ mtr_tofile($bootstrap_sql_file, "INSERT INTO mysql.db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');\n"); ++ mtr_tofile($bootstrap_sql_file, "INSERT INTO mysql.db VALUES ('%','test\\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');\n"); + -+ - # Add test data for timezone - this is just a subset, on a real - # system these tables will be populated either by mysql_tzinfo_to_sql - # or by downloading the timezone table package from our website + # Add test data for timezone - this is just a subset, on a real + # system these tables will be populated either by mysql_tzinfo_to_sql + # or by downloading the timezone table package from our website diff -Nru mariadb-10.1-10.1.25/debian/patches/remove_rename_mariadb-server_files_in.patch mariadb-10.1-10.1.30/debian/patches/remove_rename_mariadb-server_files_in.patch --- mariadb-10.1-10.1.25/debian/patches/remove_rename_mariadb-server_files_in.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/remove_rename_mariadb-server_files_in.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,9 +1,15 @@ -Description: Remove upstream debian/* handling that is obsolete -Forwarded: not-needed -Author: Otto Kekäläinen +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: remove_rename_mariadb-server_files_in ---- mariadb-10.1.orig/CMakeLists.txt -+++ mariadb-10.1/CMakeLists.txt +--- + CMakeLists.txt | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a386549..fdfead9 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt @@ -443,12 +443,6 @@ CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/info_macros.cmake.in ${CMAKE_BINARY_DIR}/info_macros.cmake @ONLY) diff -Nru mariadb-10.1-10.1.25/debian/patches/remove-systemd-obsolete-target.patch mariadb-10.1-10.1.30/debian/patches/remove-systemd-obsolete-target.patch --- mariadb-10.1-10.1.25/debian/patches/remove-systemd-obsolete-target.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/remove-systemd-obsolete-target.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,24 +1,31 @@ -Description: Remove obsoleted systemd target - In Debian 9 the syslog.target is socket activated and thus obsolete to define. - For details see Lintian warning - https://lintian.debian.org/tags/systemd-service-file-refers-to-obsolete-target.html -Author: Otto Kekäläinen +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:29 +0200 +Subject: remove-systemd-obsolete-target ---- mariadb-10.1.orig/support-files/mariadb.service.in -+++ mariadb-10.1/support-files/mariadb.service.in -@@ -15,7 +15,6 @@ - [Unit] - Description=MariaDB database server +--- + support-files/mariadb.service.in | 1 - + support-files/mariadb@.service.in | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/support-files/mariadb.service.in b/support-files/mariadb.service.in +index 6a307b2..7f40583 100644 +--- a/support-files/mariadb.service.in ++++ b/support-files/mariadb.service.in +@@ -17,7 +17,6 @@ Description=MariaDB @VERSION@ database s + Documentation=man:mysqld(8) + Documentation=https://mariadb.com/kb/en/library/systemd/ After=network.target -After=syslog.target [Install] WantedBy=multi-user.target ---- mariadb-10.1.orig/support-files/mariadb@.service.in -+++ mariadb-10.1/support-files/mariadb@.service.in -@@ -20,7 +20,6 @@ - [Unit] - Description=MariaDB database server +diff --git a/support-files/mariadb@.service.in b/support-files/mariadb@.service.in +index 410e743..02be006 100644 +--- a/support-files/mariadb@.service.in ++++ b/support-files/mariadb@.service.in +@@ -22,7 +22,6 @@ Description=MariaDB @VERSION@ database s + Documentation=man:mysqld(8) + Documentation=https://mariadb.com/kb/en/library/systemd/ After=network.target -After=syslog.target diff -Nru mariadb-10.1-10.1.25/debian/patches/replace_dash_with_bash_mbug675185.patch mariadb-10.1-10.1.30/debian/patches/replace_dash_with_bash_mbug675185.patch --- mariadb-10.1-10.1.25/debian/patches/replace_dash_with_bash_mbug675185.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/replace_dash_with_bash_mbug675185.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,3 +1,7 @@ +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: replace_dash_with_bash_mbug675185 + ## 61_replace_dash_with_bash_mbug675185.dpatch by ## ## All lines beginning with `## DP:' are a description of the patch. @@ -5,8 +9,14 @@ ## DP: A race in dash causes mysqld_safe to occasionally loop infinitely. ## DP: Fix by using bash instead. ## DP: https://bugs.launchpad.net/ubuntu/+source/mysql-dfsg-5.0/+bug/675185 ---- mariadb-10.1.orig/scripts/mysqld_safe.sh -+++ mariadb-10.1/scripts/mysqld_safe.sh +--- + scripts/mysqld_safe.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh +index 3236ebb..96b4ca7 100644 +--- a/scripts/mysqld_safe.sh ++++ b/scripts/mysqld_safe.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash diff -Nru mariadb-10.1-10.1.25/debian/patches/scripts__mysql_create_system_tables__no_test.patch mariadb-10.1-10.1.30/debian/patches/scripts__mysql_create_system_tables__no_test.patch --- mariadb-10.1-10.1.25/debian/patches/scripts__mysql_create_system_tables__no_test.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/scripts__mysql_create_system_tables__no_test.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,3 +1,7 @@ +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:27 +0200 +Subject: scripts__mysql_create_system_tables__no_test + ## 33_scripts__mysql_create_system_tables__no_test.dpatch by ## ## All lines beginning with `## DP:' are a description of the patch. @@ -5,9 +9,14 @@ ## DP: A user with no password prevents a normal user from login under certain ## DP: circumstances as it is checked first. See #301741. ## DP: http://bugs.mysql.com/bug.php?id=6901 +--- + scripts/mysql_system_tables_data.sql | 10 ---------- + 1 file changed, 10 deletions(-) ---- mariadb-10.1.orig/scripts/mysql_system_tables_data.sql -+++ mariadb-10.1/scripts/mysql_system_tables_data.sql +diff --git a/scripts/mysql_system_tables_data.sql b/scripts/mysql_system_tables_data.sql +index 9556e7b..0783f3d 100644 +--- a/scripts/mysql_system_tables_data.sql ++++ b/scripts/mysql_system_tables_data.sql @@ -26,16 +26,6 @@ -- a plain character SELECT LOWER( REPLACE((SELECT REPLACE(@@hostname,'_','\_')),'%','\%') )INTO @current_hostname; diff -Nru mariadb-10.1-10.1.25/debian/patches/scripts__mysqld_safe.sh__signals.patch mariadb-10.1-10.1.30/debian/patches/scripts__mysqld_safe.sh__signals.patch --- mariadb-10.1-10.1.25/debian/patches/scripts__mysqld_safe.sh__signals.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/scripts__mysqld_safe.sh__signals.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,11 +1,20 @@ +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:27 +0200 +Subject: scripts__mysqld_safe.sh__signals + ## 38_scripts__mysqld_safe.sh__signals.dpatch by ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Executes /etc/init.d/mysql on signals ## DP: Reported as http://bugs.mysql.com/bug.php?id=31361 +--- + scripts/mysqld_safe.sh | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) ---- mariadb-10.1.orig/scripts/mysqld_safe.sh -+++ mariadb-10.1/scripts/mysqld_safe.sh +diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh +index bcaf7b8..3236ebb 100644 +--- a/scripts/mysqld_safe.sh ++++ b/scripts/mysqld_safe.sh @@ -37,7 +37,6 @@ skip_err_log=0 syslog_tag_mysqld=mysqld syslog_tag_mysqld_safe=mysqld_safe diff -Nru mariadb-10.1-10.1.25/debian/patches/scripts__mysql_install_db.sh__no_test.patch mariadb-10.1-10.1.30/debian/patches/scripts__mysql_install_db.sh__no_test.patch --- mariadb-10.1-10.1.25/debian/patches/scripts__mysql_install_db.sh__no_test.patch 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/scripts__mysql_install_db.sh__no_test.patch 2018-01-02 11:51:23.000000000 +0000 @@ -1,12 +1,21 @@ +From: Debian MySQL Maintainers +Date: Thu, 10 Aug 2017 20:40:28 +0200 +Subject: scripts__mysql_install_db.sh__no_test + ## 41_scripts__mysql_install_db.sh__no_test.dpatch by ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: scripts__mysql_install_db.sh__no_test ## DP: http://bugs.mysql.com/bug.php?id=6901 +--- + scripts/mysql_install_db.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) ---- mariadb-10.1.orig/scripts/mysql_install_db.sh -+++ mariadb-10.1/scripts/mysql_install_db.sh -@@ -406,7 +406,7 @@ then +diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh +index aad9ef5..c6f0e3c 100644 +--- a/scripts/mysql_install_db.sh ++++ b/scripts/mysql_install_db.sh +@@ -408,7 +408,7 @@ then fi # Create database directories diff -Nru mariadb-10.1-10.1.25/debian/patches/series mariadb-10.1-10.1.30/debian/patches/series --- mariadb-10.1-10.1.25/debian/patches/series 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/patches/series 2018-01-02 11:51:23.000000000 +0000 @@ -12,13 +12,12 @@ mips-groonga-atomic.patch mips-connect-unaligned.patch mips-machine.patch -mips-unstable-tests.patch hurd_socket.patch armhf_mroonga_storage_fail.patch c11_atomics.patch remove-systemd-obsolete-target.patch kFreeBSD-gettid.patch mips-innobase-atomic.patch -fix-FTBFS-on-GNU-Hurd.patch mytop-merge_src:mytop_improvements.patch Add_default_ExecStartPre_to_mariadb@.service.patch +0026-Mroonga-fix-ice-arm64.patch diff -Nru mariadb-10.1-10.1.25/debian/rules mariadb-10.1-10.1.30/debian/rules --- mariadb-10.1-10.1.25/debian/rules 2017-07-30 12:15:48.000000000 +0000 +++ mariadb-10.1-10.1.30/debian/rules 2018-01-02 11:51:23.000000000 +0000 @@ -4,7 +4,7 @@ # enable Debian Hardening # see: https://wiki.debian.org/Hardening -export DEB_BUILD_MAINT_OPTIONS = hardening=+all +export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-pie DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/default.mk @@ -123,6 +123,12 @@ rm -rf $(TMP)/usr/share/mysql/mysql-test/plugin/tokudb/tokudb/*.py rm -rf $(TMP)/usr/share/mysql/mysql-test/plugin/tokudb/tokudb/t/*.py + # Delete useless systemd files introduced in upstream commit + # https://github.com/MariaDB/server/commit/7bbc6c14d1e8fcf1f4737e0a5fcf6237fe18bd23 + # They have no function in Debian systems and their path and usage is unstandardized. + rm -rf $(TMP)/usr/lib/sysusers.d/sysusers.conf + rm -rf $(TMP)/usr/lib/tmpfiles.d/tmpfiles.conf + # nm numeric soft is not enough, therefore extra sort in command # to satisfy Debian reproducible build requirements nm --defined-only $(BUILDDIR)/sql/mysqld | LC_ALL=C sort | gzip -n -9 > $(TMP)/usr/share/doc/mariadb-server-10.1/mysqld.sym.gz @@ -137,14 +143,11 @@ dh_systemd_enable --name=mariadb dh_systemd_enable --no-enable --name=mariadb@ -# Disable dh_systemd_start due /etc/init.d/mysql messing with the automatic snippets -override_dh_systemd_start: - : - # Start mysql at sequence number 19 before 20 where apache, proftpd etc gets # started which might depend on a running database server. override_dh_installinit-arch: dh_installinit --name=mysql --no-start -- defaults 19 21 + dh_systemd_start --no-restart-after-upgrade override_dh_installcron-arch: dh_installcron --name mysql-server diff -Nru mariadb-10.1-10.1.25/Docs/INFO_SRC mariadb-10.1-10.1.30/Docs/INFO_SRC --- mariadb-10.1-10.1.25/Docs/INFO_SRC 2017-07-01 18:20:31.000000000 +0000 +++ mariadb-10.1-10.1.30/Docs/INFO_SRC 2017-12-21 15:48:56.000000000 +0000 @@ -1,8 +1,8 @@ -commit: da7604a2943f633df3b193e26ee20110bae9fa7a -date: 2017-07-01 21:12:26 +0300 -build-date: 2017-07-01 20:20:31 +0200 -short: da7604a +commit: 461cf3e5a3c2d346d75b1407b285f8daf9d01f67 +date: 2017-12-21 17:40:01 +0200 +build-date: 2017-12-21 15:48:56 +0000 +short: 461cf3e branch: HEAD -MariaDB source 10.1.25 +MariaDB source 10.1.30 diff -Nru mariadb-10.1-10.1.25/extra/CMakeLists.txt mariadb-10.1-10.1.30/extra/CMakeLists.txt --- mariadb-10.1-10.1.25/extra/CMakeLists.txt 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/CMakeLists.txt 2017-12-21 15:48:45.000000000 +0000 @@ -77,7 +77,9 @@ ../storage/innobase/buf/buf0checksum.cc ../storage/innobase/ut/ut0crc32.cc ../storage/innobase/ut/ut0ut.cc + ../storage/innobase/buf/buf0buf.cc ../storage/innobase/page/page0zip.cc + ../storage/innobase/fil/fil0crypt.cc ) IF(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le") diff -Nru mariadb-10.1-10.1.25/extra/innochecksum.cc mariadb-10.1-10.1.30/extra/innochecksum.cc --- mariadb-10.1-10.1.25/extra/innochecksum.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/innochecksum.cc 2017-12-21 15:48:45.000000000 +0000 @@ -1,6 +1,6 @@ /* - Copyright (c) 2005, 2012, Oracle and/or its affiliates. - Copyright (c) 2014, 2015, MariaDB Corporation. + Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2014, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -42,6 +42,8 @@ /* Only parts of these files are included from the InnoDB codebase. The parts not included are excluded by #ifndef UNIV_INNOCHECKSUM. */ +typedef void fil_space_t; + #include "univ.i" /* include all of this */ #define FLST_BASE_NODE_SIZE (4 + 2 * FIL_ADDR_SIZE) @@ -55,6 +57,7 @@ #include "fsp0types.h" #include "rem0rec.h" #include "buf0checksum.h" /* buf_calc_page_*() */ +#include "buf0buf.h" /* buf_page_is_corrupted */ #include "fil0fil.h" /* FIL_* */ #include "page0page.h" /* PAGE_* */ #include "page0zip.h" /* page_zip_*() */ @@ -63,6 +66,10 @@ fsp_flags_get_zip_size() */ #include "ut0crc32.h" /* ut_crc32_init() */ #include "fsp0pagecompress.h" /* fil_get_compression_alg_name */ +#include "fil0crypt.h" /* fil_space_verify_crypt_checksum */ +#include "page0size.h" + +#include #ifdef UNIV_NONINL # include "fsp0fsp.ic" @@ -70,50 +77,105 @@ # include "ut0rnd.ic" #endif +#ifndef PRIuMAX +#define PRIuMAX "llu" +#endif + /* Global variables */ -static my_bool verbose; -static my_bool debug; -static my_bool skip_corrupt; -static my_bool just_count; -static ulong start_page; -static ulong end_page; -static ulong do_page; -static my_bool use_end_page; -static my_bool do_one_page; -static my_bool per_page_details; +static bool verbose; +static bool just_count; +static unsigned long long start_page; +static unsigned long long end_page; +static unsigned long long do_page; +static bool use_end_page; +static bool do_one_page; static my_bool do_leaf; +static my_bool per_page_details; static ulong n_merge; -ulong srv_page_size; /* replaces declaration in srv0srv.c */ +extern ulong srv_checksum_algorithm; static ulong physical_page_size; /* Page size in bytes on disk. */ static ulong logical_page_size; /* Page size when uncompressed. */ -static bool compressed= false; /* Is tablespace compressed */ - -int n_undo_state_active; -int n_undo_state_cached; -int n_undo_state_to_free; -int n_undo_state_to_purge; -int n_undo_state_prepared; -int n_undo_state_other; -int n_undo_insert, n_undo_update, n_undo_other; -int n_bad_checksum; -int n_fil_page_index; -int n_fil_page_undo_log; -int n_fil_page_inode; -int n_fil_page_ibuf_free_list; -int n_fil_page_allocated; -int n_fil_page_ibuf_bitmap; -int n_fil_page_type_sys; -int n_fil_page_type_trx_sys; -int n_fil_page_type_fsp_hdr; -int n_fil_page_type_allocated; -int n_fil_page_type_xdes; -int n_fil_page_type_blob; -int n_fil_page_type_zblob; -int n_fil_page_type_other; -int n_fil_page_type_page_compressed; -int n_fil_page_type_page_compressed_encrypted; +ulong srv_page_size; +page_size_t univ_page_size(0, 0, false); +/* Current page number (0 based). */ +unsigned long long cur_page_num; +/* Skip the checksum verification. */ +static bool no_check; +/* Enabled for strict checksum verification. */ +bool strict_verify = 0; +/* Enabled for rewrite checksum. */ +static bool do_write; +/* Mismatches count allowed (0 by default). */ +static unsigned long long allow_mismatches=0; +static bool page_type_summary; +static bool page_type_dump; +/* Store filename for page-type-dump option. */ +char* page_dump_filename = 0; +/* skip the checksum verification & rewrite if page is doublewrite buffer. */ +static bool skip_page = 0; +const char *dbug_setting = "FALSE"; +char* log_filename = NULL; +/* User defined filename for logging. */ +FILE* log_file = NULL; +/* Enabled for log write option. */ +static bool is_log_enabled = false; + +#ifndef _WIN32 +/* advisory lock for non-window system. */ +struct flock lk; +#endif /* _WIN32 */ + +/* Strict check algorithm name. */ +static ulong strict_check; +/* Rewrite checksum algorithm name. */ +static ulong write_check; + +/* Innodb page type. */ +struct innodb_page_type { + int n_undo_state_active; + int n_undo_state_cached; + int n_undo_state_to_free; + int n_undo_state_to_purge; + int n_undo_state_prepared; + int n_undo_state_other; + int n_undo_insert; + int n_undo_update; + int n_undo_other; + int n_fil_page_index; + int n_fil_page_undo_log; + int n_fil_page_inode; + int n_fil_page_ibuf_free_list; + int n_fil_page_ibuf_bitmap; + int n_fil_page_type_sys; + int n_fil_page_type_trx_sys; + int n_fil_page_type_fsp_hdr; + int n_fil_page_type_allocated; + int n_fil_page_type_xdes; + int n_fil_page_type_blob; + int n_fil_page_type_zblob; + int n_fil_page_type_other; + int n_fil_page_type_zblob2; + int n_fil_page_type_page_compressed; + int n_fil_page_type_page_compressed_encrypted; +} page_type; + +/* Possible values for "--strict-check" for strictly verify checksum +and "--write" for rewrite checksum. */ +static const char *innochecksum_algorithms[] = { + "crc32", + "crc32", + "innodb", + "innodb", + "none", + "none", + NullS +}; -int n_fil_page_max_index_id; +/* Used to define an enumerate type of the "innochecksum algorithm". */ +static TYPELIB innochecksum_algorithms_typelib = { + array_elements(innochecksum_algorithms)-1,"", + innochecksum_algorithms, NULL +}; #define SIZE_RANGES_FOR_PAGE 10 #define NUM_RETRIES 3 @@ -143,7 +205,7 @@ last element for pages with more than logical_page_size */ unsigned long long pages_in_size_range[SIZE_RANGES_FOR_PAGE+2]; - std::map leaves; + std::map leaves; per_index_stats():pages(0), leaf_pages(0), first_leaf_page(0), count(0), free_pages(0), max_data_size(0), total_n_recs(0), @@ -155,64 +217,1001 @@ std::map index_ids; -bool encrypted = false; +void print_index_leaf_stats( + unsigned long long id, + const per_index_stats& index, + FILE* fil_out) + +{ + ulint page_no = index.first_leaf_page; + std::map::const_iterator it_page = index.leaves.find(page_no); + fprintf(fil_out, "\nindex: %llu leaf page stats: n_pages = %llu\n", + id, index.leaf_pages); + fprintf(fil_out, "page_no\tdata_size\tn_recs\n"); + while (it_page != index.leaves.end()) { + const per_page_stats& stat = it_page->second; + fprintf(fil_out, "%llu\t" ULINTPF "\t" ULINTPF "\n", it_page->first, stat.data_size, stat.n_recs); + page_no = stat.right_page_no; + it_page = index.leaves.find(page_no); + } +} + +void defrag_analysis( + unsigned long long id, + const per_index_stats& index, + FILE* fil_out) +{ + // TODO: make it work for compressed pages too + std::map::const_iterator it = index.leaves.find(index.first_leaf_page); + ulint n_pages = 0; + ulint n_leaf_pages = 0; + while (it != index.leaves.end()) { + ulint data_size_total = 0; + for (ulong i = 0; i < n_merge; i++) { + const per_page_stats& stat = it->second; + n_leaf_pages ++; + data_size_total += stat.data_size; + it = index.leaves.find(stat.right_page_no); + if (it == index.leaves.end()) { + break; + } + } + + if (index.max_data_size) { + n_pages += data_size_total / index.max_data_size; + if (data_size_total % index.max_data_size != 0) { + n_pages += 1; + } + } + } + + if (index.leaf_pages) { + fprintf(fil_out, "count = " ULINTPF " free = " ULINTPF "\n", index.count, index.free_pages); + } + + if (!n_leaf_pages) { + n_leaf_pages = 1; + } + + fprintf(fil_out, "%llu\t\t%llu\t\t" ULINTPF "\t\t" ULINTPF "\t\t" ULINTPF "\t\t%.2f\t" ULINTPF "\n", + id, index.leaf_pages, n_leaf_pages, n_merge, n_pages, + 1.0 - (double)n_pages / (double)n_leaf_pages, index.max_data_size); +} + +void print_leaf_stats( + FILE* fil_out) +{ + fprintf(fil_out, "\n**************************************************\n"); + fprintf(fil_out, "index_id\t#leaf_pages\t#actual_leaf_pages\tn_merge\t" + "#leaf_after_merge\tdefrag\n"); + for (std::map::const_iterator it = index_ids.begin(); + it != index_ids.end(); it++) { + const per_index_stats& index = it->second; + + if (verbose) { + print_index_leaf_stats(it->first, index, fil_out); + } + + if (n_merge) { + defrag_analysis(it->first, index, fil_out); + } + } +} -/* Get the page size of the filespace from the filespace header. */ +/** Get the page size of the filespace from the filespace header. +@param[in] buf buffer used to read the page. +@return page size */ static -my_bool +const page_size_t get_page_size( -/*==========*/ - FILE* f, /*!< in: file pointer, must be open - and set to start of file */ - byte* buf, /*!< in: buffer used to read the page */ - ulong* logical_page_size, /*!< out: Logical/Uncompressed page size */ - ulong* physical_page_size) /*!< out: Physical/Commpressed page size */ + byte* buf) { - ulong flags; + const ulint flags = mach_read_from_4(buf + FIL_PAGE_DATA + + FSP_SPACE_FLAGS); - int bytes= fread(buf, 1, UNIV_PAGE_SIZE_MIN, f); + const ulint ssize = FSP_FLAGS_GET_PAGE_SSIZE(flags); - if (ferror(f)) - { - perror("Error reading file header"); - return FALSE; - } + if (ssize == 0) { + srv_page_size = UNIV_PAGE_SIZE_ORIG; + } else { + srv_page_size = ((UNIV_ZIP_SIZE_MIN >> 1) << ssize); + } - if (bytes != UNIV_PAGE_SIZE_MIN) - { - fprintf(stderr, "Error; Was not able to read the minimum page size "); - fprintf(stderr, "of %d bytes. Bytes read was %d\n", UNIV_PAGE_SIZE_MIN, bytes); - return FALSE; - } + univ_page_size.copy_from( + page_size_t(srv_page_size, srv_page_size, false)); - rewind(f); + return(page_size_t(flags)); +} - flags = mach_read_from_4(buf + FIL_PAGE_DATA + FSP_SPACE_FLAGS); +#ifdef _WIN32 +/***********************************************//* + @param [in] error error no. from the getLastError(). - /* srv_page_size is used by InnoDB code as UNIV_PAGE_SIZE */ - srv_page_size = *logical_page_size = fsp_flags_get_page_size(flags); + @retval error message corresponding to error no. +*/ +static +char* +error_message( + int error) +{ + static char err_msg[1024] = {'\0'}; + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, + NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR)err_msg, sizeof(err_msg), NULL ); - /* fsp_flags_get_zip_size() will return zero if not compressed. */ - *physical_page_size = fsp_flags_get_zip_size(flags); - if (*physical_page_size == 0) - { - *physical_page_size= *logical_page_size; - } - else - { - compressed= true; - } + return (err_msg); +} +#endif /* _WIN32 */ + +/***********************************************//* + @param>>_______[in] name>_____name of file. + @retval file pointer; file pointer is NULL when error occured. +*/ + +FILE* +open_file( + const char* name) +{ + int fd; /* file descriptor. */ + FILE* fil_in; +#ifdef _WIN32 + HANDLE hFile; /* handle to open file. */ + DWORD access; /* define access control */ + int flags = 0; /* define the mode for file + descriptor */ + + if (do_write) { + access = GENERIC_READ | GENERIC_WRITE; + flags = _O_RDWR | _O_BINARY; + } else { + access = GENERIC_READ; + flags = _O_RDONLY | _O_BINARY; + } + + /* CreateFile() also provide advisory lock with the usage of + access and share mode of the file.*/ + hFile = CreateFile( + (LPCTSTR) name, access, 0L, NULL, + OPEN_EXISTING, NULL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) { + /* print the error message. */ + fprintf(stderr, "Filename::%s %s\n", name, + error_message(GetLastError())); + + return (NULL); + } + + /* get the file descriptor. */ + fd= _open_osfhandle((intptr_t)hFile, flags); +#else /* _WIN32 */ + + int create_flag; + /* define the advisory lock and open file mode. */ + if (do_write) { + create_flag = O_RDWR; + lk.l_type = F_WRLCK; + } else { + create_flag = O_RDONLY; + lk.l_type = F_RDLCK; + } + + fd = open(name, create_flag); + + lk.l_whence = SEEK_SET; + lk.l_start = lk.l_len = 0; + + if (fcntl(fd, F_SETLK, &lk) == -1) { + fprintf(stderr, "Error: Unable to lock file::" + " %s\n", name); + perror("fcntl"); + return (NULL); + } +#endif /* _WIN32 */ + + if (do_write) { + fil_in = fdopen(fd, "rb+"); + } else { + fil_in = fdopen(fd, "rb"); + } + + return (fil_in); +} + +/************************************************************//* + Read the content of file + + @param [in,out] buf read the file in buffer + @param [in] partial_page_read enable when to read the + remaining buffer for first page. + @param [in] physical_page_size Physical/Commpressed page size. + @param [in,out] fil_in file pointer created for the + tablespace. + @retval no. of bytes read. +*/ +ulong read_file( + byte* buf, + bool partial_page_read, + ulong physical_page_size, + FILE* fil_in) +{ + ulong bytes = 0; + + DBUG_ASSERT(physical_page_size >= UNIV_ZIP_SIZE_MIN); + + if (partial_page_read) { + buf += UNIV_ZIP_SIZE_MIN; + physical_page_size -= UNIV_ZIP_SIZE_MIN; + bytes = UNIV_ZIP_SIZE_MIN; + } + + bytes += ulong(fread(buf, 1, physical_page_size, fil_in)); + + return bytes; +} + +/** Check if page is corrupted or not. +@param[in] buf page frame +@param[in] page_size page size +@param[in] is_encrypted true if page0 contained cryp_data + with crypt_scheme encrypted +@param[in] is_compressed true if page0 fsp_flags contained + page compression flag +@retval true if page is corrupted otherwise false. */ +static +bool +is_page_corrupted( + byte* buf, + const page_size_t& page_size, + bool is_encrypted, + bool is_compressed) +{ + + /* enable if page is corrupted. */ + bool is_corrupted; + /* use to store LSN values. */ + ulint logseq; + ulint logseqfield; + ulint page_type = mach_read_from_2(buf+FIL_PAGE_TYPE); + uint key_version = mach_read_from_4(buf+FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + ulint space_id = mach_read_from_4( + buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); + + /* We can't trust only a page type, thus we take account + also fsp_flags or crypt_data on page 0 */ + if ((page_type == FIL_PAGE_PAGE_COMPRESSED && is_compressed) || + (page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED && + is_compressed && is_encrypted)) { + /* Page compressed tables do not contain post compression + checksum. */ + return (false); + } + + if (page_size.is_compressed()) { + /* check the stored log sequence numbers + for uncompressed tablespace. */ + logseq = mach_read_from_4(buf + FIL_PAGE_LSN + 4); + logseqfield = mach_read_from_4( + buf + page_size.logical() - + FIL_PAGE_END_LSN_OLD_CHKSUM + 4); + + if (is_log_enabled) { + fprintf(log_file, + "space::" ULINTPF " page::%llu" + "; log sequence number:first = " ULINTPF + "; second = " ULINTPF "\n", + space_id, cur_page_num, logseq, logseqfield); + if (logseq != logseqfield) { + fprintf(log_file, + "Fail; space::" ULINTPF " page::%llu" + " invalid (fails log " + "sequence number check)\n", + space_id, cur_page_num); + } + } + } + + /* Again we can't trust only FIL_PAGE_FILE_FLUSH_LSN field + now repurposed as FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION, + we need to check also crypt_data contents. + + If page is encrypted, use different checksum calculation + as innochecksum can't decrypt pages. Note that some old InnoDB + versions did not initialize FIL_PAGE_FILE_FLUSH_LSN field + so if crypt checksum does not match we verify checksum using + normal method. */ + if (is_encrypted && key_version != 0) { + is_corrupted = !fil_space_verify_crypt_checksum(buf, + page_size.is_compressed() ? page_size.physical() : 0, NULL, cur_page_num); + } else { + is_corrupted = true; + } + + if (is_corrupted) { + is_corrupted = buf_page_is_corrupted( + true, buf, page_size.is_compressed() ? page_size.physical() : 0, NULL); + } + + return(is_corrupted); +} +/********************************************//* + Check if page is doublewrite buffer or not. + @param [in] page buffer page - return TRUE; + @retval true if page is doublewrite buffer otherwise false. +*/ +static +bool +is_page_doublewritebuffer( + const byte* page) +{ + if ((cur_page_num >= FSP_EXTENT_SIZE) + && (cur_page_num < FSP_EXTENT_SIZE * 3)) { + /* page is doublewrite buffer. */ + return (true); + } + + return (false); } +/*******************************************************//* +Check if page is empty or not. + @param [in] page page to checked for empty. + @param [in] len size of page. -/* command line argument to do page checks (that's it) */ -/* another argument to specify page ranges... seek to right spot and go from there */ + @retval true if page is empty. + @retval false if page is not empty. +*/ +static +bool +is_page_empty( + const byte* page, + size_t len) +{ + while (len--) { + if (*page++) { + return (false); + } + } + return (true); +} + +/********************************************************************//** +Rewrite the checksum for the page. +@param [in/out] page page buffer +@param [in] physical_page_size page size in bytes on disk. +@param [in] iscompressed Is compressed/Uncompressed Page. + +@retval true : do rewrite +@retval false : skip the rewrite as checksum stored match with + calculated or page is doublwrite buffer. +*/ -static struct my_option innochecksum_options[] = +bool +update_checksum( + byte* page, + ulong physical_page_size, + bool iscompressed) { + ib_uint32_t checksum = 0; + byte stored1[4]; /* get FIL_PAGE_SPACE_OR_CHKSUM field checksum */ + byte stored2[4]; /* get FIL_PAGE_END_LSN_OLD_CHKSUM field checksum */ + + ut_ad(page); + /* If page is doublewrite buffer, skip the rewrite of checksum. */ + if (skip_page) { + return (false); + } + + memcpy(stored1, page + FIL_PAGE_SPACE_OR_CHKSUM, 4); + memcpy(stored2, page + physical_page_size - + FIL_PAGE_END_LSN_OLD_CHKSUM, 4); + + /* Check if page is empty, exclude the checksum field */ + if (is_page_empty(page + 4, physical_page_size - 12) + && is_page_empty(page + physical_page_size - 4, 4)) { + + memset(page + FIL_PAGE_SPACE_OR_CHKSUM, 0, 4); + memset(page + physical_page_size - + FIL_PAGE_END_LSN_OLD_CHKSUM, 0, 4); + + goto func_exit; + } + + if (iscompressed) { + /* page is compressed */ + checksum = page_zip_calc_checksum( + page, physical_page_size, + static_cast(write_check)); + + mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM, checksum); + if (is_log_enabled) { + fprintf(log_file, "page::%llu; Updated checksum =" + " %u\n", cur_page_num, checksum); + } + + } else { + /* page is uncompressed. */ + + /* Store the new formula checksum */ + switch ((srv_checksum_algorithm_t) write_check) { + + case SRV_CHECKSUM_ALGORITHM_CRC32: + case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: + checksum = buf_calc_page_crc32(page); + break; + + case SRV_CHECKSUM_ALGORITHM_INNODB: + case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: + checksum = (ib_uint32_t) + buf_calc_page_new_checksum(page); + break; + + case SRV_CHECKSUM_ALGORITHM_NONE: + case SRV_CHECKSUM_ALGORITHM_STRICT_NONE: + checksum = BUF_NO_CHECKSUM_MAGIC; + break; + /* no default so the compiler will emit a warning if new + enum is added and not handled here */ + } + + mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM, checksum); + if (is_log_enabled) { + fprintf(log_file, "page::%llu; Updated checksum field1" + " = %u\n", cur_page_num, checksum); + } + + if (write_check == SRV_CHECKSUM_ALGORITHM_STRICT_INNODB + || write_check == SRV_CHECKSUM_ALGORITHM_INNODB) { + checksum = (ib_uint32_t) + buf_calc_page_old_checksum(page); + } + + mach_write_to_4(page + physical_page_size - + FIL_PAGE_END_LSN_OLD_CHKSUM,checksum); + + if (is_log_enabled) { + fprintf(log_file, "page::%llu; Updated checksum " + "field2 = %u\n", cur_page_num, checksum); + } + + } + +func_exit: + /* The following code is to check the stored checksum with the + calculated checksum. If it matches, then return FALSE to skip + the rewrite of checksum, otherwise return TRUE. */ + if (iscompressed) { + if (!memcmp(stored1, page + FIL_PAGE_SPACE_OR_CHKSUM, 4)) { + return (false); + } + return (true); + } + + if (!memcmp(stored1, page + FIL_PAGE_SPACE_OR_CHKSUM, 4) + && !memcmp(stored2, page + physical_page_size - + FIL_PAGE_END_LSN_OLD_CHKSUM, 4)) { + return (false); + + } + + return (true); +} + +/** + Write the content to the file +@param[in] filename name of the file. +@param[in,out] file file pointer where content + have to be written +@param[in] buf file buffer read +@param[in] compressed Enabled if tablespace is + compressed. +@param[in,out] pos current file position. +@param[in] page_size page size in bytes on disk. + +@retval true if successfully written +@retval false if a non-recoverable error occurred +*/ +static +bool +write_file( + const char* filename, + FILE* file, + byte* buf, + bool compressed, + fpos_t* pos, + ulong page_size) +{ + bool do_update; + + do_update = update_checksum(buf, page_size, compressed); + + if (file != stdin) { + if (do_update) { + /* Set the previous file pointer position + saved in pos to current file position. */ + if (0 != fsetpos(file, pos)) { + perror("fsetpos"); + return(false); + } + } else { + /* Store the current file position in pos */ + if (0 != fgetpos(file, pos)) { + perror("fgetpos"); + return(false); + } + return(true); + } + } + + if (page_size + != fwrite(buf, 1, page_size, file == stdin ? stdout : file)) { + fprintf(stderr, "Failed to write page::%llu to %s: %s\n", + cur_page_num, filename, strerror(errno)); + + return(false); + } + if (file != stdin) { + fflush(file); + /* Store the current file position in pos */ + if (0 != fgetpos(file, pos)) { + perror("fgetpos"); + return(false); + } + } + + return(true); +} + +/* +Parse the page and collect/dump the information about page type +@param [in] page buffer page +@param [out] xdes extend descriptor page +@param [in] file file for diagnosis. +@param [in] page_size page_size +@param [in] is_encrypted tablespace is encrypted +*/ +void +parse_page( + const byte* page, + byte* xdes, + FILE* file, + const page_size_t& page_size, + bool is_encrypted) +{ + unsigned long long id; + ulint undo_page_type; + char str[20]={'\0'}; + ulint n_recs; + ulint page_no; + ulint left_page_no; + ulint right_page_no; + ulint data_bytes; + bool is_leaf; + int size_range_id; + + /* Check whether page is doublewrite buffer. */ + if(skip_page) { + strcpy(str, "Double_write_buffer"); + } else { + strcpy(str, "-"); + } + + switch (mach_read_from_2(page + FIL_PAGE_TYPE)) { + + case FIL_PAGE_INDEX: { + uint key_version = mach_read_from_4(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + page_type.n_fil_page_index++; + + /* If page is encrypted we can't read index header */ + if (!is_encrypted) { + id = mach_read_from_8(page + PAGE_HEADER + PAGE_INDEX_ID); + n_recs = mach_read_from_2(page + PAGE_HEADER + PAGE_N_RECS); + page_no = mach_read_from_4(page + FIL_PAGE_OFFSET); + left_page_no = mach_read_from_4(page + FIL_PAGE_PREV); + right_page_no = mach_read_from_4(page + FIL_PAGE_NEXT); + ulint is_comp = mach_read_from_2(page + PAGE_HEADER + PAGE_N_HEAP) & 0x8000; + ulint level = mach_read_from_2(page + PAGE_HEADER + PAGE_LEVEL); + ulint garbage = mach_read_from_2(page + PAGE_HEADER + PAGE_GARBAGE); + + + data_bytes = (ulint)(mach_read_from_2(page + PAGE_HEADER + PAGE_HEAP_TOP) + - (is_comp + ? PAGE_NEW_SUPREMUM_END + : PAGE_OLD_SUPREMUM_END) + - garbage); + + is_leaf = (!*(const uint16*) (page + (PAGE_HEADER + PAGE_LEVEL))); + + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tIndex page\t\t\t|" + "\tindex id=%llu,", cur_page_num, id); + + fprintf(file, + " page level=" ULINTPF + ", No. of records=" ULINTPF + ", garbage=" ULINTPF ", %s\n", + level, n_recs, garbage, str); + } + + size_range_id = (data_bytes * SIZE_RANGES_FOR_PAGE + + page_size.logical() - 1) / + page_size.logical(); + + if (size_range_id > SIZE_RANGES_FOR_PAGE + 1) { + /* data_bytes is bigger than logical_page_size */ + size_range_id = SIZE_RANGES_FOR_PAGE + 1; + } + + if (per_page_details) { + printf("index id=%llu page " ULINTPF " leaf %d n_recs " ULINTPF " data_bytes " ULINTPF + "\n", id, page_no, is_leaf, n_recs, data_bytes); + } + + /* update per-index statistics */ + { + if (index_ids.count(id) == 0) { + index_ids[id] = per_index_stats(); + } + std::map::iterator it; + it = index_ids.find(id); + per_index_stats &index = (it->second); + const byte* des = xdes + XDES_ARR_OFFSET + + XDES_SIZE * ((page_no & (page_size.physical() - 1)) + / FSP_EXTENT_SIZE); + if (xdes_get_bit(des, XDES_FREE_BIT, + page_no % FSP_EXTENT_SIZE)) { + index.free_pages++; + return; + } + + index.pages++; + + if (is_leaf) { + index.leaf_pages++; + if (data_bytes > index.max_data_size) { + index.max_data_size = data_bytes; + } + struct per_page_stats pp(n_recs, data_bytes, + left_page_no, right_page_no); + + index.leaves[page_no] = pp; + + if (left_page_no == ULINT32_UNDEFINED) { + index.first_leaf_page = page_no; + index.count++; + } + } + + index.total_n_recs += n_recs; + index.total_data_bytes += data_bytes; + index.pages_in_size_range[size_range_id] ++; + } + } else { + fprintf(file, "#::%llu\t\t|\t\tEncrypted Index page\t\t\t|" + "\tkey_version %u,%s\n", cur_page_num, key_version, str); + } + + break; + } + case FIL_PAGE_UNDO_LOG: + page_type.n_fil_page_undo_log++; + undo_page_type = mach_read_from_2(page + + TRX_UNDO_PAGE_HDR + TRX_UNDO_PAGE_TYPE); + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tUndo log page\t\t\t|", + cur_page_num); + } + if (undo_page_type == TRX_UNDO_INSERT) { + page_type.n_undo_insert++; + if (page_type_dump) { + fprintf(file, "\t%s", + "Insert Undo log page"); + } + + } else if (undo_page_type == TRX_UNDO_UPDATE) { + page_type.n_undo_update++; + if (page_type_dump) { + fprintf(file, "\t%s", + "Update undo log page"); + } + } + + undo_page_type = mach_read_from_2(page + TRX_UNDO_SEG_HDR + + TRX_UNDO_STATE); + switch (undo_page_type) { + case TRX_UNDO_ACTIVE: + page_type.n_undo_state_active++; + if (page_type_dump) { + fprintf(file, ", %s", "Undo log of " + "an active transaction"); + } + break; + + case TRX_UNDO_CACHED: + page_type.n_undo_state_cached++; + if (page_type_dump) { + fprintf(file, ", %s", "Page is " + "cached for quick reuse"); + } + break; + + case TRX_UNDO_TO_FREE: + page_type.n_undo_state_to_free++; + if (page_type_dump) { + fprintf(file, ", %s", "Insert undo " + "segment that can be freed"); + } + break; + + case TRX_UNDO_TO_PURGE: + page_type.n_undo_state_to_purge++; + if (page_type_dump) { + fprintf(file, ", %s", "Will be " + "freed in purge when all undo" + "data in it is removed"); + } + break; + + case TRX_UNDO_PREPARED: + page_type.n_undo_state_prepared++; + if (page_type_dump) { + fprintf(file, ", %s", "Undo log of " + "an prepared transaction"); + } + break; + + default: + page_type.n_undo_state_other++; + break; + } + if(page_type_dump) { + fprintf(file, ", %s\n", str); + } + break; + + case FIL_PAGE_INODE: + page_type.n_fil_page_inode++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tInode page\t\t\t|" + "\t%s\n",cur_page_num, str); + } + break; + + case FIL_PAGE_IBUF_FREE_LIST: + page_type.n_fil_page_ibuf_free_list++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tInsert buffer free list" + " page\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_ALLOCATED: + page_type.n_fil_page_type_allocated++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tFreshly allocated " + "page\t\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_IBUF_BITMAP: + page_type.n_fil_page_ibuf_bitmap++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tInsert Buffer " + "Bitmap\t\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_SYS: + page_type.n_fil_page_type_sys++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tSystem page\t\t\t|" + "\t%s\n",cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_TRX_SYS: + page_type.n_fil_page_type_trx_sys++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tTransaction system " + "page\t\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_FSP_HDR: + page_type.n_fil_page_type_fsp_hdr++; + memcpy(xdes, page, page_size.physical()); + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tFile Space " + "Header\t\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_XDES: + page_type.n_fil_page_type_xdes++; + memcpy(xdes, page, page_size.physical()); + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tExtent descriptor " + "page\t\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_BLOB: + page_type.n_fil_page_type_blob++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tBLOB page\t\t\t|\t%s\n", + cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_ZBLOB: + page_type.n_fil_page_type_zblob++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tCompressed BLOB " + "page\t\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_TYPE_ZBLOB2: + page_type.n_fil_page_type_zblob2++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tSubsequent Compressed " + "BLOB page\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_PAGE_COMPRESSED: + page_type.n_fil_page_type_page_compressed++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tPage compressed " + "page\t|\t%s\n", cur_page_num, str); + } + break; + + case FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED: + page_type.n_fil_page_type_page_compressed_encrypted++; + if (page_type_dump) { + fprintf(file, "#::%llu\t\t|\t\tPage compressed encrypted " + "page\t|\t%s\n", cur_page_num, str); + } + break; + default: + page_type.n_fil_page_type_other++; + break; + } +} +/** +@param [in/out] file_name name of the filename + +@retval FILE pointer if successfully created else NULL when error occured. +*/ +FILE* +create_file( + char* file_name) +{ + FILE* file = NULL; + +#ifndef _WIN32 + file = fopen(file_name, "wb"); + if (file == NULL) { + fprintf(stderr, "Failed to create file: %s: %s\n", + file_name, strerror(errno)); + return(NULL); + } +#else + HANDLE hFile; /* handle to open file. */ + int fd = 0; + hFile = CreateFile((LPCTSTR) file_name, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_DELETE, + NULL, CREATE_NEW, NULL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) { + /* print the error message. */ + fprintf(stderr, "Filename::%s %s\n", + file_name, + error_message(GetLastError())); + + return(NULL); + } + + /* get the file descriptor. */ + fd= _open_osfhandle((intptr_t)hFile, _O_RDWR | _O_BINARY); + file = fdopen(fd, "wb"); +#endif /* _WIN32 */ + + return(file); +} + +/* + Print the page type count of a tablespace. + @param [in] fil_out stream where the output goes. +*/ +void +print_summary( + FILE* fil_out) +{ + fprintf(fil_out, "\n================PAGE TYPE SUMMARY==============\n"); + fprintf(fil_out, "#PAGE_COUNT\tPAGE_TYPE"); + fprintf(fil_out, "\n===============================================\n"); + fprintf(fil_out, "%8d\tIndex page\n", + page_type.n_fil_page_index); + fprintf(fil_out, "%8d\tUndo log page\n", + page_type.n_fil_page_undo_log); + fprintf(fil_out, "%8d\tInode page\n", + page_type.n_fil_page_inode); + fprintf(fil_out, "%8d\tInsert buffer free list page\n", + page_type.n_fil_page_ibuf_free_list); + fprintf(fil_out, "%8d\tFreshly allocated page\n", + page_type.n_fil_page_type_allocated); + fprintf(fil_out, "%8d\tInsert buffer bitmap\n", + page_type.n_fil_page_ibuf_bitmap); + fprintf(fil_out, "%8d\tSystem page\n", + page_type.n_fil_page_type_sys); + fprintf(fil_out, "%8d\tTransaction system page\n", + page_type.n_fil_page_type_trx_sys); + fprintf(fil_out, "%8d\tFile Space Header\n", + page_type.n_fil_page_type_fsp_hdr); + fprintf(fil_out, "%8d\tExtent descriptor page\n", + page_type.n_fil_page_type_xdes); + fprintf(fil_out, "%8d\tBLOB page\n", + page_type.n_fil_page_type_blob); + fprintf(fil_out, "%8d\tCompressed BLOB page\n", + page_type.n_fil_page_type_zblob); + fprintf(fil_out, "%8d\tPage compressed page\n", + page_type.n_fil_page_type_page_compressed); + fprintf(fil_out, "%8d\tPage compressed encrypted page\n", + page_type.n_fil_page_type_page_compressed_encrypted); + fprintf(fil_out, "%8d\tOther type of page\n", + page_type.n_fil_page_type_other); + fprintf(fil_out, "\n===============================================\n"); + fprintf(fil_out, "Additional information:\n"); + fprintf(fil_out, "Undo page type: %d insert, %d update, %d other\n", + page_type.n_undo_insert, + page_type.n_undo_update, + page_type.n_undo_other); + fprintf(fil_out, "Undo page state: %d active, %d cached, %d to_free, %d" + " to_purge, %d prepared, %d other\n", + page_type.n_undo_state_active, + page_type.n_undo_state_cached, + page_type.n_undo_state_to_free, + page_type.n_undo_state_to_purge, + page_type.n_undo_state_prepared, + page_type.n_undo_state_other); + + fprintf(fil_out, "index_id\t#pages\t\t#leaf_pages\t#recs_per_page" + "\t#bytes_per_page\n"); + + for (std::map::const_iterator it = index_ids.begin(); + it != index_ids.end(); it++) { + const per_index_stats& index = it->second; + fprintf(fil_out, "%lld\t\t%lld\t\t%lld\t\t%lld\t\t%lld\n", + it->first, index.pages, index.leaf_pages, + index.total_n_recs / index.pages, + index.total_data_bytes / index.pages); + } + + fprintf(fil_out, "\n"); + fprintf(fil_out, "index_id\tpage_data_bytes_histgram(empty,...,oversized)\n"); + + for (std::map::const_iterator it = index_ids.begin(); + it != index_ids.end(); it++) { + fprintf(fil_out, "%lld\t", it->first); + const per_index_stats& index = it->second; + for (ulint i = 0; i < SIZE_RANGES_FOR_PAGE+2; i++) { + fprintf(fil_out, "\t%lld", index.pages_in_size_range[i]); + } + fprintf(fil_out, "\n"); + } + + if (do_leaf) { + print_leaf_stats(fil_out); + } +} + +/* command line argument for innochecksum tool. */ +static struct my_option innochecksum_options[] = { {"help", '?', "Displays this help and exits.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"info", 'I', "Synonym for --help.", @@ -221,864 +1220,781 @@ 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', "Verbose (prints progress every 5 seconds).", &verbose, &verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"debug", 'd', "Debug mode (prints checksums for each page, implies verbose).", - &debug, &debug, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"skip_corrupt", 'u', "Skip corrupt pages.", - &skip_corrupt, &skip_corrupt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"count", 'c', "Print the count of pages in the file.", +#ifndef DBUG_OFF + {"debug", '#', "Output debug log. See " REFMAN "dbug-package.html", + &dbug_setting, &dbug_setting, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, +#endif /* !DBUG_OFF */ + {"count", 'c', "Print the count of pages in the file and exits.", &just_count, &just_count, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"start_page", 's', "Start on this page number (0 based).", - &start_page, &start_page, 0, GET_ULONG, REQUIRED_ARG, - 0, 0, (longlong) 2L*1024L*1024L*1024L, 0, 1, 0}, + &start_page, &start_page, 0, GET_ULL, REQUIRED_ARG, + 0, 0, ULLONG_MAX, 0, 1, 0}, {"end_page", 'e', "End at this page number (0 based).", - &end_page, &end_page, 0, GET_ULONG, REQUIRED_ARG, - 0, 0, (longlong) 2L*1024L*1024L*1024L, 0, 1, 0}, + &end_page, &end_page, 0, GET_ULL, REQUIRED_ARG, + 0, 0, ULLONG_MAX, 0, 1, 0}, {"page", 'p', "Check only this page (0 based).", - &do_page, &do_page, 0, GET_ULONG, REQUIRED_ARG, - 0, 0, (longlong) 2L*1024L*1024L*1024L, 0, 1, 0}, - {"per_page_details", 'i', "Print out per-page detail information.", - &per_page_details, &per_page_details, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0} - , - {"leaf", 'l', "Examine leaf index pages", + &do_page, &do_page, 0, GET_ULL, REQUIRED_ARG, + 0, 0, ULLONG_MAX, 0, 1, 0}, + {"strict-check", 'C', "Specify the strict checksum algorithm by the user.", + &strict_check, &strict_check, &innochecksum_algorithms_typelib, + GET_ENUM, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"no-check", 'n', "Ignore the checksum verification.", + &no_check, &no_check, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"allow-mismatches", 'a', "Maximum checksum mismatch allowed.", + &allow_mismatches, &allow_mismatches, 0, + GET_ULL, REQUIRED_ARG, 0, 0, ULLONG_MAX, 0, 1, 0}, + {"write", 'w', "Rewrite the checksum algorithm by the user.", + &write_check, &write_check, &innochecksum_algorithms_typelib, + GET_ENUM, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"page-type-summary", 'S', "Display a count of each page type " + "in a tablespace.", &page_type_summary, &page_type_summary, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"page-type-dump", 'D', "Dump the page type info for each page in a " + "tablespace.", &page_dump_filename, &page_dump_filename, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"per-page-details", 'i', "Print out per-page detail information.", + &per_page_details, &per_page_details, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"log", 'l', "log output.", + &log_filename, &log_filename, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"leaf", 'f', "Examine leaf index pages", &do_leaf, &do_leaf, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"merge", 'm', "leaf page count if merge given number of consecutive pages", - &n_merge, &n_merge, 0, GET_ULONG, REQUIRED_ARG, - 0, 0, (longlong)10L, 0, 1, 0}, + &n_merge, &n_merge, 0, GET_ULONG, REQUIRED_ARG, 0, 0, (longlong)10L, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; +/* Print out the Innodb version and machine information. */ static void print_version(void) { - printf("%s Ver %s, for %s (%s)\n", - my_progname, INNODB_VERSION_STR, - SYSTEM_TYPE, MACHINE_TYPE); +#ifdef DBUG_OFF + printf("%s Ver %s, for %s (%s)\n", + my_progname, INNODB_VERSION_STR, + SYSTEM_TYPE, MACHINE_TYPE); +#else + printf("%s-debug Ver %s, for %s (%s)\n", + my_progname, INNODB_VERSION_STR, + SYSTEM_TYPE, MACHINE_TYPE); +#endif /* DBUG_OFF */ } static void usage(void) { - print_version(); - puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000")); - printf("InnoDB offline file checksum utility.\n"); - printf("Usage: %s [-c] [-s ] [-e ] [-p ] [-v] [-d] \n", my_progname); - my_print_help(innochecksum_options); - my_print_variables(innochecksum_options); + print_version(); + puts(ORACLE_WELCOME_COPYRIGHT_NOTICE("2000")); + printf("InnoDB offline file checksum utility.\n"); + printf("Usage: %s [-c] [-s ] [-e ] " + "[-p ] [-i] [-v] [-a ] [-n] " + "[-C ] [-w ] [-S] [-D ] " + "[-l ] [-l] [-m ] \n", my_progname); + printf("See " REFMAN "innochecksum.html for usage hints.\n"); + my_print_help(innochecksum_options); + my_print_variables(innochecksum_options); } extern "C" my_bool innochecksum_get_one_option( -/*========================*/ - int optid, - const struct my_option *opt __attribute__((unused)), - char *argument __attribute__((unused))) -{ - switch (optid) { - case 'd': - verbose=1; /* debug implies verbose... */ - break; - case 'e': - use_end_page= 1; - break; - case 'p': - end_page= start_page= do_page; - use_end_page= 1; - do_one_page= 1; - break; - case 'V': - print_version(); - exit(0); - break; - case 'I': - case '?': - usage(); - exit(0); - break; - } - return 0; + int optid, + const struct my_option *opt MY_ATTRIBUTE((unused)), + char *argument MY_ATTRIBUTE((unused))) +{ + switch (optid) { +#ifndef DBUG_OFF + case '#': + dbug_setting = argument + ? argument + : IF_WIN("d:O,innochecksum.trace", + "d:o,/tmp/innochecksum.trace"); + DBUG_PUSH(dbug_setting); + break; +#endif /* !DBUG_OFF */ + case 'e': + use_end_page = true; + break; + case 'p': + end_page = start_page = do_page; + use_end_page = true; + do_one_page = true; + break; + case 'V': + print_version(); + my_end(0); + exit(EXIT_SUCCESS); + break; + case 'C': + strict_verify = true; + switch ((srv_checksum_algorithm_t) strict_check) { + + case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: + case SRV_CHECKSUM_ALGORITHM_CRC32: + srv_checksum_algorithm = + SRV_CHECKSUM_ALGORITHM_STRICT_CRC32; + break; + + case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: + case SRV_CHECKSUM_ALGORITHM_INNODB: + srv_checksum_algorithm = + SRV_CHECKSUM_ALGORITHM_STRICT_INNODB; + break; + + case SRV_CHECKSUM_ALGORITHM_STRICT_NONE: + case SRV_CHECKSUM_ALGORITHM_NONE: + srv_checksum_algorithm = + SRV_CHECKSUM_ALGORITHM_STRICT_NONE; + break; + default: + return(true); + } + break; + case 'n': + no_check = true; + break; + case 'a': + case 'S': + break; + case 'w': + do_write = true; + break; + case 'D': + page_type_dump = true; + break; + case 'l': + is_log_enabled = true; + break; + case 'I': + case '?': + usage(); + my_end(0); + exit(EXIT_SUCCESS); + break; + } + + return(false); } -static int get_options( -/*===================*/ - int *argc, - char ***argv) +static +bool +get_options( + int *argc, + char ***argv) { - int ho_error; + if (handle_options(argc, argv, innochecksum_options, + innochecksum_get_one_option)) { + my_end(0); + exit(true); + } - if ((ho_error=handle_options(argc, argv, innochecksum_options, innochecksum_get_one_option))) - exit(ho_error); + /* The next arg must be the filename */ + if (!*argc) { + usage(); + my_end(0); + return (true); + } - /* The next arg must be the filename */ - if (!*argc) - { - usage(); - return 1; - } - return 0; -} /* get_options */ + return (false); +} -/*********************************************************************//** -Gets the file page type. -@return type; NOTE that if the type has not been written to page, the -return value not defined */ -ulint -fil_page_get_type( -/*==============*/ - uchar* page) /*!< in: file page */ -{ - return(mach_read_from_2(page + FIL_PAGE_TYPE)); -} - -/**************************************************************//** -Gets the index id field of a page. -@return index id */ -ib_uint64_t -btr_page_get_index_id( -/*==================*/ - uchar* page) /*!< in: index page */ -{ - return(mach_read_from_8(page + PAGE_HEADER + PAGE_INDEX_ID)); -} - -/********************************************************//** -Gets the next index page number. -@return next page number */ -ulint -btr_page_get_next( -/*==============*/ - const page_t* page) /*!< in: index page */ -{ - return(mach_read_from_4(page + FIL_PAGE_NEXT)); -} - -/********************************************************//** -Gets the previous index page number. -@return prev page number */ -ulint -btr_page_get_prev( -/*==============*/ - const page_t* page) /*!< in: index page */ +/** Check from page 0 if table is encrypted. +@param[in] filename Filename +@param[in] page_size page size +@param[in] page Page 0 +@retval true if tablespace is encrypted, false if not +*/ +static +bool check_encryption( + const char* filename, + const page_size_t& page_size, + byte * page) { - return(mach_read_from_4(page + FIL_PAGE_PREV)); -} + ulint offset = (FSP_HEADER_OFFSET + (XDES_ARR_OFFSET + XDES_SIZE * + (page_size.physical()) / FSP_EXTENT_SIZE)); -void -parse_page( -/*=======*/ - uchar* page, /* in: buffer page */ - uchar* xdes) /* in: extend descriptor page */ -{ - ib_uint64_t id; - ulint x; - ulint n_recs; - ulint page_no; - ulint left_page_no; - ulint right_page_no; - ulint data_bytes; - int is_leaf; - int size_range_id; - - switch (fil_page_get_type(page)) { - case FIL_PAGE_INDEX: - n_fil_page_index++; - id = btr_page_get_index_id(page); - n_recs = page_get_n_recs(page); - page_no = page_get_page_no(page); - left_page_no = btr_page_get_prev(page); - right_page_no = btr_page_get_next(page); - data_bytes = page_get_data_size(page); - is_leaf = page_is_leaf(page); - size_range_id = (data_bytes * SIZE_RANGES_FOR_PAGE - + logical_page_size - 1) / - logical_page_size; - if (size_range_id > SIZE_RANGES_FOR_PAGE + 1) { - /* data_bytes is bigger than logical_page_size */ - size_range_id = SIZE_RANGES_FOR_PAGE + 1; - } - if (per_page_details) { - printf("index " IB_ID_FMT " page " ULINTPF - " leaf %d n_recs " ULINTPF " data_bytes " ULINTPF - "\n", id, page_no, is_leaf, n_recs, data_bytes); - } - /* update per-index statistics */ - { - if (index_ids.count(id) == 0) { - index_ids[id] = per_index_stats(); - } - std::map::iterator it; - it = index_ids.find(id); - per_index_stats &index = (it->second); - uchar* des = xdes + XDES_ARR_OFFSET - + XDES_SIZE * ((page_no & (physical_page_size - 1)) - / FSP_EXTENT_SIZE); - if (xdes_get_bit(des, XDES_FREE_BIT, - page_no % FSP_EXTENT_SIZE)) { - index.free_pages++; - return; - } - index.pages++; - if (is_leaf) { - index.leaf_pages++; - if (data_bytes > index.max_data_size) { - index.max_data_size = data_bytes; - } - struct per_page_stats pp(n_recs, data_bytes, - left_page_no, right_page_no); - - index.leaves[page_no] = pp; - - if (left_page_no == ULINT32_UNDEFINED) { - index.first_leaf_page = page_no; - index.count++; - } - } - index.total_n_recs += n_recs; - index.total_data_bytes += data_bytes; - index.pages_in_size_range[size_range_id] ++; - } - - break; - case FIL_PAGE_UNDO_LOG: - if (per_page_details) { - printf("FIL_PAGE_UNDO_LOG\n"); - } - n_fil_page_undo_log++; - x = mach_read_from_2(page + TRX_UNDO_PAGE_HDR + - TRX_UNDO_PAGE_TYPE); - if (x == TRX_UNDO_INSERT) - n_undo_insert++; - else if (x == TRX_UNDO_UPDATE) - n_undo_update++; - else - n_undo_other++; - - x = mach_read_from_2(page + TRX_UNDO_SEG_HDR + TRX_UNDO_STATE); - switch (x) { - case TRX_UNDO_ACTIVE: n_undo_state_active++; break; - case TRX_UNDO_CACHED: n_undo_state_cached++; break; - case TRX_UNDO_TO_FREE: n_undo_state_to_free++; break; - case TRX_UNDO_TO_PURGE: n_undo_state_to_purge++; break; - case TRX_UNDO_PREPARED: n_undo_state_prepared++; break; - default: n_undo_state_other++; break; - } - break; - case FIL_PAGE_INODE: - if (per_page_details) { - printf("FIL_PAGE_INODE\n"); - } - n_fil_page_inode++; - break; - case FIL_PAGE_IBUF_FREE_LIST: - if (per_page_details) { - printf("FIL_PAGE_IBUF_FREE_LIST\n"); - } - n_fil_page_ibuf_free_list++; - break; - case FIL_PAGE_TYPE_ALLOCATED: - if (per_page_details) { - printf("FIL_PAGE_TYPE_ALLOCATED\n"); - } - n_fil_page_type_allocated++; - break; - case FIL_PAGE_IBUF_BITMAP: - if (per_page_details) { - printf("FIL_PAGE_IBUF_BITMAP\n"); - } - n_fil_page_ibuf_bitmap++; - break; - case FIL_PAGE_TYPE_SYS: - if (per_page_details) { - printf("FIL_PAGE_TYPE_SYS\n"); - } - n_fil_page_type_sys++; - break; - case FIL_PAGE_TYPE_TRX_SYS: - if (per_page_details) { - printf("FIL_PAGE_TYPE_TRX_SYS\n"); - } - n_fil_page_type_trx_sys++; - break; - case FIL_PAGE_TYPE_FSP_HDR: - if (per_page_details) { - printf("FIL_PAGE_TYPE_FSP_HDR\n"); - } - memcpy(xdes, page, physical_page_size); - n_fil_page_type_fsp_hdr++; - break; - case FIL_PAGE_TYPE_XDES: - if (per_page_details) { - printf("FIL_PAGE_TYPE_XDES\n"); - } - memcpy(xdes, page, physical_page_size); - n_fil_page_type_xdes++; - break; - case FIL_PAGE_TYPE_BLOB: - if (per_page_details) { - printf("FIL_PAGE_TYPE_BLOB\n"); - } - n_fil_page_type_blob++; - break; - case FIL_PAGE_TYPE_ZBLOB: - case FIL_PAGE_TYPE_ZBLOB2: - if (per_page_details) { - printf("FIL_PAGE_TYPE_ZBLOB/2\n"); - } - n_fil_page_type_zblob++; - break; - case FIL_PAGE_PAGE_COMPRESSED: - if (per_page_details) { - printf("FIL_PAGE_PAGE_COMPRESSED\n"); - } - n_fil_page_type_page_compressed++; - break; - case FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED: - if (per_page_details) { - printf("FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED\n"); - } - n_fil_page_type_page_compressed_encrypted++; - break; - default: - if (per_page_details) { - printf("FIL_PAGE_TYPE_OTHER\n"); - } - n_fil_page_type_other++; - } -} - -void print_index_leaf_stats(unsigned long long id, const per_index_stats& index) -{ - ulint page_no = index.first_leaf_page; - std::map::const_iterator it_page = index.leaves.find(page_no); - printf("\nindex: %llu leaf page stats: n_pages = %llu\n", - id, index.leaf_pages); - printf("page_no\tdata_size\tn_recs\n"); - while (it_page != index.leaves.end()) { - const per_page_stats& stat = it_page->second; - printf(ULINTPF "\t" ULINTPF "\t" ULINTPF "\n", - it_page->first, stat.data_size, stat.n_recs); - page_no = stat.right_page_no; - it_page = index.leaves.find(page_no); - } -} + if (memcmp(page + offset, CRYPT_MAGIC, MAGIC_SZ) != 0) { + return false; + } -void defrag_analysis(unsigned long long id, const per_index_stats& index) -{ - // TODO: make it work for compressed pages too - std::map::const_iterator it = index.leaves.find(index.first_leaf_page); - ulint n_pages = 0; - ulint n_leaf_pages = 0; - while (it != index.leaves.end()) { - ulint data_size_total = 0; - for (ulong i = 0; i < n_merge; i++) { - const per_page_stats& stat = it->second; - n_leaf_pages ++; - data_size_total += stat.data_size; - it = index.leaves.find(stat.right_page_no); - if (it == index.leaves.end()) { - break; - } - } - if (index.max_data_size) { - n_pages += data_size_total / index.max_data_size; - if (data_size_total % index.max_data_size != 0) { - n_pages += 1; - } - } - } - if (!n_leaf_pages) { - n_leaf_pages=1; - } - printf("count = " ULINTPF " free = " ULINTPF "\n", - index.count, index.free_pages); - if (n_leaf_pages) { - printf("%llu\t\t%llu\t\t" - ULINTPF "\t\t%lu\t\t" ULINTPF "\t\t%.2f\t" ULINTPF "\n", - id, index.leaf_pages, n_leaf_pages, n_merge, n_pages, - 1.0 - (double)n_pages / (double)n_leaf_pages, index.max_data_size); - } -} + ulint type = mach_read_from_1(page + offset + MAGIC_SZ + 0); -void print_leaf_stats() -{ - printf("\n**************************************************\n"); - printf("index_id\t#leaf_pages\t#actual_leaf_pages\tn_merge\t" - "#leaf_after_merge\tdefrag\n"); - for (std::map::const_iterator it = index_ids.begin(); it != index_ids.end(); it++) { - const per_index_stats& index = it->second; - if (verbose) { - print_index_leaf_stats(it->first, index); - } - if (n_merge) { - defrag_analysis(it->first, index); - } - } -} + if (! (type == CRYPT_SCHEME_UNENCRYPTED || + type == CRYPT_SCHEME_1)) { + return false; + } -void -print_stats() -/*========*/ -{ - unsigned long long i; + ulint iv_length = mach_read_from_1(page + offset + MAGIC_SZ + 1); - printf("%d\tbad checksum\n", n_bad_checksum); - printf("%d\tFIL_PAGE_INDEX\n", n_fil_page_index); - printf("%d\tFIL_PAGE_UNDO_LOG\n", n_fil_page_undo_log); - printf("%d\tFIL_PAGE_INODE\n", n_fil_page_inode); - printf("%d\tFIL_PAGE_IBUF_FREE_LIST\n", n_fil_page_ibuf_free_list); - printf("%d\tFIL_PAGE_TYPE_ALLOCATED\n", n_fil_page_type_allocated); - printf("%d\tFIL_PAGE_IBUF_BITMAP\n", n_fil_page_ibuf_bitmap); - printf("%d\tFIL_PAGE_TYPE_SYS\n", n_fil_page_type_sys); - printf("%d\tFIL_PAGE_TYPE_TRX_SYS\n", n_fil_page_type_trx_sys); - printf("%d\tFIL_PAGE_TYPE_FSP_HDR\n", n_fil_page_type_fsp_hdr); - printf("%d\tFIL_PAGE_TYPE_XDES\n", n_fil_page_type_xdes); - printf("%d\tFIL_PAGE_TYPE_BLOB\n", n_fil_page_type_blob); - printf("%d\tFIL_PAGE_TYPE_ZBLOB\n", n_fil_page_type_zblob); - printf("%d\tFIL_PAGE_PAGE_COMPRESSED\n", n_fil_page_type_page_compressed); - printf("%d\tFIL_PAGE_PAGE_COMPRESSED_ENCRYPTED\n", n_fil_page_type_page_compressed_encrypted); - printf("%d\tother\n", n_fil_page_type_other); - printf("%d\tmax index_id\n", n_fil_page_max_index_id); - printf("undo type: %d insert, %d update, %d other\n", - n_undo_insert, n_undo_update, n_undo_other); - printf("undo state: %d active, %d cached, %d to_free, %d to_purge," - " %d prepared, %d other\n", n_undo_state_active, - n_undo_state_cached, n_undo_state_to_free, - n_undo_state_to_purge, n_undo_state_prepared, - n_undo_state_other); - - printf("index_id\t#pages\t\t#leaf_pages\t#recs_per_page" - "\t#bytes_per_page\n"); - for (std::map::const_iterator it = index_ids.begin(); it != index_ids.end(); it++) { - const per_index_stats& index = it->second; - ulonglong recs_per_page = index.total_n_recs; - ulonglong bytes_per_page = index.total_data_bytes; - if (index.total_n_recs && index.pages) { - recs_per_page = index.total_n_recs / index.pages; - } - if (index.total_data_bytes && index.pages) { - bytes_per_page = index.total_data_bytes / index.pages; - } - printf("%llu\t\t%llu\t\t%llu\t\t%llu\t\t%llu\n", - it->first, index.pages, index.leaf_pages, - recs_per_page, - bytes_per_page); - } - printf("\n"); - printf("index_id\tpage_data_bytes_histgram(empty,...,oversized)\n"); - for (std::map::const_iterator it = index_ids.begin(); it != index_ids.end(); it++) { - printf("%llu\t", it->first); - const per_index_stats& index = it->second; - for (i = 0; i < SIZE_RANGES_FOR_PAGE+2; i++) { - printf("\t%llu", index.pages_in_size_range[i]); - } - printf("\n"); - } - if (do_leaf) { - print_leaf_stats(); - } -} - -int main(int argc, char **argv) -{ - FILE* f; /* our input file */ - char* filename; /* our input filename. */ - unsigned char *big_buf= 0, *buf; - unsigned char *big_xdes= 0, *xdes; - ulong bytes; /* bytes read count */ - ulint ct; /* current page number (0 based) */ - time_t now; /* current time */ - time_t lastt; /* last time */ - ulint oldcsum, oldcsumfield, csum, csumfield, crc32, logseq, logseqfield; - /* ulints for checksum storage */ - unsigned long long int size; /* size of file (has to be 64 bits) */ - ulint pages; /* number of pages in file */ - long long offset= 0; - int fd; - - printf("InnoDB offline file checksum utility.\n"); - - ut_crc32_init(); - - MY_INIT(argv[0]); - - if (get_options(&argc,&argv)) - exit(1); - - if (verbose) - my_print_variables(innochecksum_options); - - /* The file name is not optional */ - filename = *argv; - if (*filename == '\0') - { - fprintf(stderr, "Error; File name missing\n"); - goto error_out; - } + if (iv_length != CRYPT_SCHEME_1_IV_LEN) { + return false; + } -#ifdef _WIN32 - /* Switch off OS file buffering for the file. */ + uint min_key_version = mach_read_from_4 + (page + offset + MAGIC_SZ + 2 + iv_length); - HANDLE h = CreateFile(filename, GENERIC_READ, - FILE_SHARE_READ|FILE_SHARE_WRITE, 0, - OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0); + uint key_id = mach_read_from_4 + (page + offset + MAGIC_SZ + 2 + iv_length + 4); - if (!h) - { - fprintf(stderr, "Error; cant open file\n"); - goto error; - } + if (type == CRYPT_SCHEME_1 && is_log_enabled) { + fprintf(log_file,"Tablespace %s encrypted key_version %u key_id %u\n", + filename, min_key_version, key_id); + } - if (!GetFileSizeEx(h, (LARGE_INTEGER *)&size)) - { - fprintf(stderr, "Error; GetFileSize() failed\n"); - goto error; - } + return (type == CRYPT_SCHEME_1); +} - fd = _open_osfhandle ((intptr_t) h, _O_RDONLY); - if (fd < 0) - { - fprintf(stderr, "Error; _open_osfhandle() failed\n"); - goto error; - } +/** +Verify page checksum. +@param[in] buf page to verify +@param[in] page_size page size +@param[in] is_encrypted true if tablespace is encrypted +@param[in] is_compressed true if tablespace is page compressed +@param[in,out] mismatch_count Number of pages failed in checksum verify +@retval 0 if page checksum matches or 1 if it does not match +*/ +static +int verify_checksum( + byte* buf, + const page_size_t& page_size, + bool is_encrypted, + bool is_compressed, + unsigned long long* mismatch_count) +{ + int exit_status = 0; + bool is_corrupted = false; - f = _fdopen(fd, "rb"); - if (!f) - { - fprintf(stderr, "Error; fdopen() failed\n"); - goto error; - } + is_corrupted = is_page_corrupted( + buf, page_size, is_encrypted, is_compressed); - /* - Disable stdio buffering (FILE_FLAG_NO_BUFFERING requires properly IO buffers - which stdio does not guarantee. - */ - setvbuf(f, NULL, _IONBF, 0); + if (is_corrupted) { + fprintf(stderr, "Fail: page::%llu invalid\n", + cur_page_num); + + (*mismatch_count)++; + + if (*mismatch_count > allow_mismatches) { + fprintf(stderr, + "Exceeded the " + "maximum allowed " + "checksum mismatch " + "count::%llu current::%llu\n", + *mismatch_count, + allow_mismatches); -#else - struct stat st; - /* stat the file to get size and page count */ - if (stat(filename, &st)) - { - fprintf(stderr, "Error; %s cannot be found\n", filename); - goto error_out; - } - size= st.st_size; + exit_status = 1; + } + } - /* Open the file for reading */ - f= fopen(filename, "rb"); -#endif + return (exit_status); +} - if (f == NULL) - { - fprintf(stderr, "Error; %s cannot be opened", filename); - perror(" "); - goto error_out; - } +/** Rewrite page checksum if needed. +@param[in] filename File name +@param[in] fil_in File pointer +@param[in] buf page +@param[in] page_size page size +@param[in] pos File position +@param[in] is_encrypted true if tablespace is encrypted +@param[in] is_compressed true if tablespace is page compressed +@retval 0 if checksum rewrite was successful, 1 if error was detected */ +static +int +rewrite_checksum( + const char* filename, + FILE* fil_in, + byte* buf, + const page_size_t& page_size, + fpos_t* pos, + bool is_encrypted, + bool is_compressed) +{ + int exit_status = 0; + /* Rewrite checksum. Note that for encrypted and + page compressed tables this is not currently supported. */ + if (do_write && + !is_encrypted && + !is_compressed + && !write_file(filename, fil_in, buf, + page_size.is_compressed(), pos, + static_cast(page_size.physical()))) { - big_buf = (unsigned char *)malloc(2 * UNIV_PAGE_SIZE_MAX); - if (big_buf == NULL) - { - fprintf(stderr, "Error; failed to allocate memory\n"); - perror(""); - goto error_f; - } + exit_status = 1; + } - /* Make sure the page is aligned */ - buf = (unsigned char*)ut_align_down(big_buf - + UNIV_PAGE_SIZE_MAX, UNIV_PAGE_SIZE_MAX); + return (exit_status); +} - big_xdes = (unsigned char *)malloc(2 * UNIV_PAGE_SIZE_MAX); - if (big_xdes == NULL) - { - fprintf(stderr, "Error; failed to allocate memory\n"); - perror(""); - goto error_big_buf; - } +int main( + int argc, + char **argv) +{ + /* our input file. */ + FILE* fil_in = NULL; + /* our input filename. */ + char* filename; + /* Buffer to store pages read. */ + byte* buf_ptr = NULL; + byte* xdes_ptr = NULL; + byte* buf = NULL; + byte* xdes = NULL; + /* bytes read count */ + ulong bytes; + /* current time */ + time_t now; + /* last time */ + time_t lastt; + /* stat, to get file size. */ +#ifdef _WIN32 + struct _stat64 st; +#else + struct stat st; +#endif /* _WIN32 */ - /* Make sure the page is aligned */ - xdes = (unsigned char*)ut_align_down(big_xdes - + UNIV_PAGE_SIZE_MAX, UNIV_PAGE_SIZE_MAX); + int exit_status = 0; + /* size of file (has to be 64 bits) */ + unsigned long long int size = 0; + /* number of pages in file */ + ulint pages; + + off_t offset = 0; + /* count the no. of page corrupted. */ + unsigned long long mismatch_count = 0; + + bool partial_page_read = false; + /* Enabled when read from stdin is done. */ + bool read_from_stdin = false; + FILE* fil_page_type = NULL; + fpos_t pos; + + /* Use to check the space id of given file. If space_id is zero, + then check whether page is doublewrite buffer.*/ + ulint space_id = 0UL; + /* enable when space_id of given file is zero. */ + bool is_system_tablespace = false; + + ut_crc32_init(); + MY_INIT(argv[0]); + DBUG_ENTER("main"); + DBUG_PROCESS(argv[0]); + + if (get_options(&argc,&argv)) { + exit_status = 1; + goto my_exit; + } - if (!get_page_size(f, buf, &logical_page_size, &physical_page_size)) - goto error; + if (strict_verify && no_check) { + fprintf(stderr, "Error: --strict-check option cannot be used " + "together with --no-check option.\n"); + exit_status = 1; + goto my_exit; + } - if (compressed) - { - printf("Table is compressed\n"); - printf("Key block size is %lu\n", physical_page_size); - } - else - { - printf("Table is uncompressed\n"); - printf("Page size is %lu\n", physical_page_size); - } + if (no_check && !do_write) { + fprintf(stderr, "Error: --no-check must be associated with " + "--write option.\n"); + exit_status = 1; + goto my_exit; + } - pages= (ulint) (size / physical_page_size); + if (page_type_dump) { + fil_page_type = create_file(page_dump_filename); + if (!fil_page_type) { + exit_status = 1; + goto my_exit; + } + } - if (just_count) - { - if (verbose) - printf("Number of pages: "); - printf(ULINTPF "\n", pages); - goto ok; - } - else if (verbose) - { - printf("file %s = %llu bytes (" ULINTPF " pages)...\n", - filename, size, pages); - if (do_one_page) - printf("InnoChecksum; checking page %lu\n", do_page); - else - printf("InnoChecksum; checking pages in range %lu to %lu\n", start_page, use_end_page ? end_page : (pages - 1)); - } + if (is_log_enabled) { + log_file = create_file(log_filename); + if (!log_file) { + exit_status = 1; + goto my_exit; + } + fprintf(log_file, "InnoDB File Checksum Utility.\n"); + } -#ifdef UNIV_LINUX - if (posix_fadvise(fileno(f), 0, 0, POSIX_FADV_SEQUENTIAL) || - posix_fadvise(fileno(f), 0, 0, POSIX_FADV_NOREUSE)) - { - perror("posix_fadvise failed"); - } -#endif + if (verbose) { + my_print_variables(innochecksum_options); + } - /* seek to the necessary position */ - if (start_page) - { - fd= fileno(f); - if (!fd) - { - perror("Error; Unable to obtain file descriptor number"); - goto error; - } + buf_ptr = (byte*) malloc(UNIV_PAGE_SIZE_MAX * 2); + xdes_ptr = (byte*)malloc(UNIV_PAGE_SIZE_MAX * 2); + buf = (byte *) ut_align(buf_ptr, UNIV_PAGE_SIZE_MAX); + xdes = (byte *) ut_align(xdes_ptr, UNIV_PAGE_SIZE_MAX); + + /* The file name is not optional. */ + for (int i = 0; i < argc; ++i) { + /* Reset parameters for each file. */ + filename = argv[i]; + memset(&page_type, 0, sizeof(innodb_page_type)); + partial_page_read = false; + skip_page = false; + + if (is_log_enabled) { + fprintf(log_file, "Filename = %s\n", filename); + } + + if (*filename == '-') { + /* read from stdin. */ + fil_in = stdin; + read_from_stdin = true; - offset= (longlong)start_page * (longlong)physical_page_size; + } + + /* stat the file to get size and page count. */ + if (!read_from_stdin && #ifdef _WIN32 - if (_lseeki64(fd, offset, SEEK_SET) != offset) + _stat64(filename, &st)) { #else - if (lseek(fd, offset, SEEK_SET) != offset) -#endif - { - perror("Error; Unable to seek to necessary offset"); - goto error; - } - } + stat(filename, &st)) { +#endif /* _WIN32 */ + fprintf(stderr, "Error: %s cannot be found\n", + filename); + + exit_status = 1; + goto my_exit; + } + + if (!read_from_stdin) { + size = st.st_size; + fil_in = open_file(filename); + /*If fil_in is NULL, terminate as some error encountered */ + if(fil_in == NULL) { + exit_status = 1; + goto my_exit; + } + /* Save the current file pointer in pos variable.*/ + if (0 != fgetpos(fil_in, &pos)) { + perror("fgetpos"); + exit_status = 1; + goto my_exit; + } + } + + /* Read the minimum page size. */ + bytes = ulong(fread(buf, 1, UNIV_ZIP_SIZE_MIN, fil_in)); + partial_page_read = true; + + if (bytes != UNIV_ZIP_SIZE_MIN) { + fprintf(stderr, "Error: Was not able to read the " + "minimum page size "); + fprintf(stderr, "of %d bytes. Bytes read was " ULINTPF "\n", + UNIV_ZIP_SIZE_MIN, bytes); + + exit_status = 1; + goto my_exit; + } + + /* enable variable is_system_tablespace when space_id of given + file is zero. Use to skip the checksum verification and rewrite + for doublewrite pages. */ + is_system_tablespace = (!memcmp(&space_id, buf + + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID, 4)) + ? true : false; + + /* Determine page size, zip_size and page compression + from fsp_flags and encryption metadata from page 0 */ + const page_size_t& page_size = get_page_size(buf); + ulint flags = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + buf); + ulint zip_size = page_size.is_compressed() ? page_size.logical() : 0; + logical_page_size = page_size.is_compressed() ? zip_size : 0; + physical_page_size = page_size.physical(); + srv_page_size = page_size.logical(); + bool is_compressed = FSP_FLAGS_HAS_PAGE_COMPRESSION(flags); + + if (page_size.physical() > UNIV_ZIP_SIZE_MIN) { + /* Read rest of the page 0 to determine crypt_data */ + bytes = ulong(read_file(buf, partial_page_read, page_size.physical(), fil_in)); + + if (bytes != page_size.physical()) { + fprintf(stderr, "Error: Was not able to read the " + "rest of the page "); + fprintf(stderr, "of " ULINTPF " bytes. Bytes read was " ULINTPF "\n", + page_size.physical() - UNIV_ZIP_SIZE_MIN, bytes); + + exit_status = 1; + goto my_exit; + } + partial_page_read = false; + } + + /* Now that we have full page 0 in buffer, check encryption */ + bool is_encrypted = check_encryption(filename, page_size, buf); + + /* Verify page 0 contents. Note that we can't allow + checksum mismatch on page 0, because that would mean we + could not trust it content. */ + if (!no_check) { + unsigned long long tmp_allow_mismatches = allow_mismatches; + allow_mismatches = 0; + + exit_status = verify_checksum(buf, page_size, is_encrypted, is_compressed, &mismatch_count); + + if (exit_status) { + fprintf(stderr, "Error: Page 0 checksum mismatch, can't continue. \n"); + goto my_exit; + } + allow_mismatches = tmp_allow_mismatches; + } + + if ((exit_status = rewrite_checksum(filename, fil_in, buf, + page_size, &pos, is_encrypted, is_compressed))) { + goto my_exit; + } + + if (page_type_dump) { + fprintf(fil_page_type, + "\n\nFilename::%s\n", filename); + fprintf(fil_page_type, + "========================================" + "======================================\n"); + fprintf(fil_page_type, + "\tPAGE_NO\t\t|\t\tPAGE_TYPE\t\t" + "\t|\tEXTRA INFO\n"); + fprintf(fil_page_type, + "========================================" + "======================================\n"); + } + + if (per_page_details) { + printf("page %llu ", cur_page_num); + } + + if (page_type_summary || page_type_dump) { + parse_page(buf, xdes, fil_page_type, page_size, is_encrypted); + } + + pages = (ulint) (size / page_size.physical()); + + if (just_count) { + if (read_from_stdin) { + fprintf(stderr, "Number of pages:" ULINTPF "\n", pages); + } else { + printf("Number of pages:" ULINTPF "\n", pages); + } + continue; + } else if (verbose && !read_from_stdin) { + if (is_log_enabled) { + fprintf(log_file, "file %s = %llu bytes " + "(" ULINTPF " pages)\n", filename, size, pages); + if (do_one_page) { + fprintf(log_file, "Innochecksum: " + "checking page::%llu;\n", + do_page); + } + } + } else { + if (is_log_enabled) { + fprintf(log_file, "Innochecksum: checking " + "pages in range::%llu to %llu\n", + start_page, use_end_page ? + end_page : (pages - 1)); + } + } + + /* seek to the necessary position */ + if (start_page) { + if (!read_from_stdin) { + /* If read is not from stdin, we can use + fseeko() to position the file pointer to + the desired page. */ + partial_page_read = false; - /* main checksumming loop */ - ct= start_page; - lastt= 0; - while (!feof(f)) - { - int page_ok = 1; + offset = (off_t) start_page + * (off_t) page_size.physical(); +#ifdef _WIN32 + if (_fseeki64(fil_in, offset, SEEK_SET)) { +#else + if (fseeko(fil_in, offset, SEEK_SET)) { +#endif /* _WIN32 */ + perror("Error: Unable to seek to " + "necessary offset"); + + exit_status = 1; + goto my_exit; + } + /* Save the current file pointer in + pos variable. */ + if (0 != fgetpos(fil_in, &pos)) { + perror("fgetpos"); + + exit_status = 1; + goto my_exit; + } + } else { + + ulong count = 0; + + while (!feof(fil_in)) { + if (start_page == count) { + break; + } + /* We read a part of page to find the + minimum page size. We cannot reset + the file pointer to the beginning of + the page if we are reading from stdin + (fseeko() on stdin doesn't work). So + read only the remaining part of page, + if partial_page_read is enable. */ + bytes = read_file(buf, + partial_page_read, + static_cast( + page_size.physical()), + fil_in); + + partial_page_read = false; + count++; + + if (!bytes || feof(fil_in)) { + fprintf(stderr, "Error: Unable " + "to seek to necessary " + "offset"); + + exit_status = 1; + goto my_exit; + } + } + } + } + + /* main checksumming loop */ + cur_page_num = start_page ? start_page : cur_page_num + 1; + lastt = 0; + while (!feof(fil_in)) { + + bytes = read_file(buf, partial_page_read, + static_cast( + page_size.physical()), fil_in); + partial_page_read = false; + + if (!bytes && feof(fil_in)) { + break; + } + + if (ferror(fil_in)) { + fprintf(stderr, "Error reading " ULINTPF " bytes", + page_size.physical()); + perror(" "); + + exit_status = 1; + goto my_exit; + } + + if (bytes != page_size.physical()) { + fprintf(stderr, "Error: bytes read (" ULINTPF ") " + "doesn't match page size (" ULINTPF ")\n", + bytes, page_size.physical()); + exit_status = 1; + goto my_exit; + } + + if (is_system_tablespace) { + /* enable when page is double write buffer.*/ + skip_page = is_page_doublewritebuffer(buf); + } else { + skip_page = false; + } + + ulint cur_page_type = mach_read_from_2(buf+FIL_PAGE_TYPE); + + /* FIXME: Page compressed or Page compressed and encrypted + pages do not contain checksum. */ + if (cur_page_type == FIL_PAGE_PAGE_COMPRESSED || + cur_page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { + skip_page = true; + } + + /* If no-check is enabled, skip the + checksum verification.*/ + if (!no_check + && !skip_page + && (exit_status = verify_checksum(buf, page_size, + is_encrypted, is_compressed, &mismatch_count))) { + goto my_exit; + } + + if ((exit_status = rewrite_checksum(filename, fil_in, buf, + page_size, &pos, is_encrypted, is_compressed))) { + goto my_exit; + } + + /* end if this was the last page we were supposed to check */ + if (use_end_page && (cur_page_num >= end_page)) { + break; + } + + if (per_page_details) { + printf("page %llu ", cur_page_num); + } + + if (page_type_summary || page_type_dump) { + parse_page(buf, xdes, fil_page_type, page_size, is_encrypted); + } + + /* do counter increase and progress printing */ + cur_page_num++; + + if (verbose && !read_from_stdin) { + if ((cur_page_num % 64) == 0) { + now = time(0); + if (!lastt) { + lastt= now; + } + if (now - lastt >= 1 + && is_log_enabled) { + fprintf(log_file, "page::%llu " + "okay: %.3f%% done\n", + (cur_page_num - 1), + (float) cur_page_num / pages * 100); + lastt = now; + } + } + } + } + + if (!read_from_stdin) { + /* flcose() will flush the data and release the lock if + any acquired. */ + fclose(fil_in); + } + + /* Enabled for page type summary. */ + if (page_type_summary) { + if (!read_from_stdin) { + fprintf(stdout, "\nFile::%s",filename); + print_summary(stdout); + } else { + print_summary(stderr); + } + } + } - bytes= fread(buf, 1, physical_page_size, f); + if (is_log_enabled) { + fclose(log_file); + } - if (!bytes && feof(f)) - goto ok; + free(buf_ptr); + free(xdes_ptr); - if (ferror(f)) - { - fprintf(stderr, "Error reading %lu bytes", physical_page_size); - perror(" "); - goto error; - } - - ulint page_type = mach_read_from_2(buf+FIL_PAGE_TYPE); - ulint key_version = mach_read_from_4(buf + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); - - if (key_version && page_type != FIL_PAGE_PAGE_COMPRESSED) { - encrypted = true; - } else { - encrypted = false; - } - - ulint comp_method = 0; - - if (encrypted) { - comp_method = mach_read_from_2(buf+FIL_PAGE_DATA+FIL_PAGE_COMPRESSED_SIZE); - } else { - comp_method = mach_read_from_8(buf+FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); - } - - ulint comp_size = mach_read_from_2(buf+FIL_PAGE_DATA); - ib_uint32_t encryption_checksum = mach_read_from_4(buf+FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION + 4); - - - if (page_type == FIL_PAGE_PAGE_COMPRESSED) { - /* Page compressed tables do not have any checksum */ - if (debug) - fprintf(stderr, "Page " ULINTPF - " page compressed with method %s real_size " ULINTPF "\n", ct, - fil_get_compression_alg_name(comp_method), comp_size); - page_ok = 1; - } else if (compressed) { - /* compressed pages */ - ulint crccsum = page_zip_calc_checksum(buf, physical_page_size, SRV_CHECKSUM_ALGORITHM_CRC32); - ulint icsum = page_zip_calc_checksum(buf, physical_page_size, SRV_CHECKSUM_ALGORITHM_INNODB); - - if (debug) { - if (key_version != 0) { - fprintf(stderr, - "Page " ULINTPF - " encrypted key_version " ULINTPF - " calculated = " ULINTPF "; crc32 = " ULINTPF - "; recorded = %u\n", - ct, key_version, icsum, crccsum, encryption_checksum); - } - } - - if (encrypted) { - if (encryption_checksum != 0 && crccsum != encryption_checksum && icsum != encryption_checksum) { - if (debug) - fprintf(stderr, "page " ULINTPF - ": compressed: calculated = " ULINTPF - "; crc32 = " ULINTPF "; recorded = %u\n", - ct, icsum, crccsum, encryption_checksum); - fprintf(stderr, "Fail; page " ULINTPF - " invalid (fails compressed page checksum).\n", ct); - } - } else { - if (!page_zip_verify_checksum(buf, physical_page_size)) { - fprintf(stderr, "Fail; page " ULINTPF - " invalid (fails compressed page checksum).\n", ct); - if (!skip_corrupt) - goto error; - page_ok = 0; - } - } - } else { - if (key_version != 0) { - /* Encrypted page */ - if (debug) { - if (page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { - fprintf(stderr, - "Page " ULINTPF - " page compressed with method %s real_size " ULINTPF - " and encrypted key_version " ULINTPF " checksum %u\n", - ct, fil_get_compression_alg_name(comp_method), comp_size, key_version, encryption_checksum); - } else { - fprintf(stderr, - "Page " ULINTPF - " encrypted key_version " ULINTPF " checksum %u\n", - ct, key_version, encryption_checksum); - } - } - } - - /* Page compressed tables do not contain FIL tailer */ - if (page_type != FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED && page_type != FIL_PAGE_PAGE_COMPRESSED) { - /* check the "stored log sequence numbers" */ - logseq= mach_read_from_4(buf + FIL_PAGE_LSN + 4); - logseqfield= mach_read_from_4(buf + logical_page_size - FIL_PAGE_END_LSN_OLD_CHKSUM + 4); - if (debug) - printf("page " ULINTPF - ": log sequence number: first = " ULINTPF - "; second = " ULINTPF "\n", - ct, logseq, logseqfield); - if (logseq != logseqfield) - { - fprintf(stderr, "Fail; page " ULINTPF - " invalid (fails log sequence number check)\n", ct); - if (!skip_corrupt) - goto error; - page_ok = 0; - } - - /* check old method of checksumming */ - oldcsum= buf_calc_page_old_checksum(buf); - oldcsumfield= mach_read_from_4(buf + logical_page_size - FIL_PAGE_END_LSN_OLD_CHKSUM); - if (debug) - printf("page " ULINTPF - ": old style: calculated = " ULINTPF - "; recorded = " ULINTPF "\n", - ct, oldcsum, oldcsumfield); - if (oldcsumfield != mach_read_from_4(buf + FIL_PAGE_LSN) && oldcsumfield != oldcsum) - { - fprintf(stderr, "Fail; page " ULINTPF - " invalid (fails old style checksum)\n", ct); - if (!skip_corrupt) - goto error; - page_ok = 0; - } - } - - /* now check the new method */ - csum= buf_calc_page_new_checksum(buf); - crc32= buf_calc_page_crc32(buf); - csumfield= mach_read_from_4(buf + FIL_PAGE_SPACE_OR_CHKSUM); - - if (key_version) - csumfield = encryption_checksum; - - if (debug) - printf("page " ULINTPF - ": new style: calculated = " ULINTPF - "; crc32 = " ULINTPF "; recorded = " ULINTPF "\n", - ct, csum, crc32, csumfield); - if (csumfield != 0 && crc32 != csumfield && csum != csumfield) - { - fprintf(stderr, "Fail; page " ULINTPF - " invalid (fails innodb and crc32 checksum)\n", ct); - if (!skip_corrupt) - goto error; - page_ok = 0; - } - } - /* end if this was the last page we were supposed to check */ - if (use_end_page && (ct >= end_page)) - goto ok; - - if (per_page_details) - { - printf("page " ULINTPF " ", ct); - } - - /* do counter increase and progress printing */ - ct++; - - if (!page_ok) - { - if (per_page_details) - { - printf("BAD_CHECKSUM\n"); - } - n_bad_checksum++; - continue; - } - - /* Can't parse compressed or/and encrypted pages */ - if (page_type != FIL_PAGE_PAGE_COMPRESSED && !encrypted) { - parse_page(buf, xdes); - } - - if (verbose) - { - if (ct % 64 == 0) - { - now= time(0); - if (!lastt) lastt= now; - if (now - lastt >= 1) - { - printf("page " ULINTPF " okay: %.3f%% done\n", - (ct - 1), (float) ct / pages * 100); - lastt= now; - } - } - } - } + my_end(exit_status); + DBUG_RETURN(exit_status); + +my_exit: + if (buf_ptr) { + free(buf_ptr); + } + + if (xdes_ptr) { + free(xdes_ptr); + } + + if (!read_from_stdin && fil_in) { + fclose(fil_in); + } + + if (log_file) { + fclose(log_file); + } -ok: - if (!just_count) - print_stats(); - free(big_xdes); - free(big_buf); - fclose(f); - my_end(0); - exit(0); - -error: - free(big_xdes); -error_big_buf: - free(big_buf); -error_f: - fclose(f); -error_out: - my_end(0); - exit(1); + my_end(exit_status); + DBUG_RETURN(exit_status); } diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/backup_copy.cc mariadb-10.1-10.1.30/extra/mariabackup/backup_copy.cc --- mariadb-10.1-10.1.25/extra/mariabackup/backup_copy.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/backup_copy.cc 2017-12-21 15:48:45.000000000 +0000 @@ -1700,26 +1700,28 @@ ut_crc32_init(); /* copy undo tablespaces */ - if (srv_undo_tablespaces > 0) { - dst_dir = (srv_undo_dir && *srv_undo_dir) - ? srv_undo_dir : mysql_data_home; - ds_data = ds_create(dst_dir, DS_TYPE_LOCAL); + dst_dir = (srv_undo_dir && *srv_undo_dir) + ? srv_undo_dir : mysql_data_home; - for (i = 1; i <= srv_undo_tablespaces; i++) { - char filename[20]; - sprintf(filename, "undo%03u", (uint)i); - if (!(ret = copy_or_move_file(filename, filename, - dst_dir, 1))) { - goto cleanup; - } - } + ds_data = ds_create(dst_dir, DS_TYPE_LOCAL); - ds_destroy(ds_data); - ds_data = NULL; + for (i = 1; ; i++) { + char filename[20]; + sprintf(filename, "undo%03u", (uint)i); + if (!file_exists(filename)) { + break; + } + if (!(ret = copy_or_move_file(filename, filename, + dst_dir, 1))) { + goto cleanup; + } } + ds_destroy(ds_data); + ds_data = NULL; + /* copy redo logs */ dst_dir = (srv_log_group_home_dir && *srv_log_group_home_dir) @@ -1844,7 +1846,7 @@ } } - /* copy buufer pool dump */ + /* copy buffer pool dump */ if (innobase_buffer_pool_filename) { const char *src_name; diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/backup_mysql.cc mariadb-10.1-10.1.30/extra/mariabackup/backup_mysql.cc --- mariadb-10.1-10.1.25/extra/mariabackup/backup_mysql.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/backup_mysql.cc 2017-12-21 15:48:45.000000000 +0000 @@ -112,6 +112,11 @@ (char *) &opt_secure_auth); } + if (xb_plugin_dir && *xb_plugin_dir){ + mysql_options(connection, MYSQL_PLUGIN_DIR, xb_plugin_dir); + } + mysql_options(connection, MYSQL_OPT_PROTOCOL, &opt_protocol); + msg_ts("Connecting to MySQL server host: %s, user: %s, password: %s, " "port: %s, socket: %s\n", opt_host ? opt_host : "localhost", opt_user ? opt_user : "not set", diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/backup_wsrep.h mariadb-10.1-10.1.30/extra/mariabackup/backup_wsrep.h --- mariadb-10.1-10.1.25/extra/mariabackup/backup_wsrep.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/backup_wsrep.h 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,32 @@ +/****************************************************** +Percona XtraBackup: hot backup tool for InnoDB +(c) 2009-2014 Percona LLC and/or its affiliates +Originally Created 3/3/2009 Yasufumi Kinoshita +Written by Alexey Kopytov, Aleksandr Kuzminsky, Stewart Smith, Vadim Tkachenko, +Yasufumi Kinoshita, Ignacio Nin and Baron Schwartz. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*******************************************************/ + +#ifndef MARIABACKUP_WSREP_H +#define MARIABACKUP_WSREP_H + +/*********************************************************************** +Store Galera checkpoint info in the 'xtrabackup_galera_info' file, if that +information is present in the trx system header. Otherwise, do nothing. */ +void +xb_write_galera_info(bool incremental_prepare); +/*==================*/ + +#endif diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/changed_page_bitmap.cc mariadb-10.1-10.1.30/extra/mariabackup/changed_page_bitmap.cc --- mariadb-10.1-10.1.25/extra/mariabackup/changed_page_bitmap.cc 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/changed_page_bitmap.cc 2017-12-21 15:48:45.000000000 +0000 @@ -538,7 +538,7 @@ lsn_t missing_interval_start, /*! bmp_end_lsn)) { - msg("xtrabackup: incremental backup LSN " LSN_PF + msg("mariabackup: incremental backup LSN " LSN_PF " is larger than than the last checkpoint LSN " LSN_PF "\n", bmp_start_lsn, bmp_end_lsn); return NULL; @@ -700,7 +700,7 @@ ¤t_page_end_lsn, bmp_start_lsn))) { - msg("xtrabackup: Warning: changed page bitmap file " + msg("mariabackup: Warning: changed page bitmap file " "\'%s\' corrupted\n", bitmap_file.name); rbt_free(result); free(bitmap_files.files); @@ -805,7 +805,7 @@ if (UNIV_UNLIKELY(!last_page_ok)) { - msg("xtrabackup: warning: changed page bitmap file " + msg("mariabackup: warning: changed page bitmap file " "\'%s\' corrupted.\n", bitmap_file.name); rbt_free(result); free(bitmap_files.files); diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/crc/crc_glue.c mariadb-10.1-10.1.30/extra/mariabackup/crc/crc_glue.c --- mariadb-10.1-10.1.25/extra/mariabackup/crc/crc_glue.c 2017-07-01 18:20:15.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/crc/crc_glue.c 2017-12-21 15:48:45.000000000 +0000 @@ -24,7 +24,7 @@ #include #include -#if __GNUC__ >= 4 && defined(__x86_64__) +#if defined(__GNUC__) && defined(__x86_64__) static int pclmul_enabled = 0; #endif diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/fil_cur.cc mariadb-10.1-10.1.30/extra/mariabackup/fil_cur.cc --- mariadb-10.1-10.1.25/extra/mariabackup/fil_cur.cc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/fil_cur.cc 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,5 @@ /****************************************************** -XtraBackup: hot backup tool for InnoDB +MariaBackup: hot backup tool for InnoDB (c) 2009-2013 Percona LLC and/or its affiliates. Originally Created 3/3/2009 Yasufumi Kinoshita Written by Alexey Kopytov, Aleksandr Kuzminsky, Stewart Smith, Vadim Tkachenko, @@ -173,7 +173,7 @@ /* The following call prints an error message */ os_file_get_last_error(TRUE); - msg("[%02u] xtrabackup: error: cannot open " + msg("[%02u] mariabackup: error: cannot open " "tablespace %s\n", thread_n, cursor->abs_path); @@ -202,7 +202,7 @@ cursor->file = node->handle; if (stat(cursor->abs_path, &cursor->statinfo)) { - msg("[%02u] xtrabackup: error: cannot stat %s\n", + msg("[%02u] mariabackup: error: cannot stat %s\n", thread_n, cursor->abs_path); xb_fil_cur_close(cursor); @@ -229,7 +229,7 @@ msg("[%02u] %s is compressed with page size = " "%lu bytes\n", thread_n, node->name, page_size); if (page_size_shift < 10 || page_size_shift > 14) { - msg("[%02u] xtrabackup: Error: Invalid " + msg("[%02u] mariabackup: Error: Invalid " "page size: %lu.\n", thread_n, page_size); ut_error; } @@ -300,9 +300,9 @@ offset + to_read == cursor->statinfo.st_size) { if (to_read < (ib_int64_t) cursor->page_size) { - msg("[%02u] xtrabackup: Warning: junk at the end of " + msg("[%02u] mariabackup: Warning: junk at the end of " "%s:\n", cursor->thread_n, cursor->abs_path); - msg("[%02u] xtrabackup: Warning: offset = %llu, " + msg("[%02u] mariabackup: Warning: offset = %llu, " "to_read = %llu\n", cursor->thread_n, (unsigned long long) offset, @@ -356,13 +356,13 @@ page_no < (ib_int64_t) FSP_EXTENT_SIZE * 3) { /* skip doublewrite buffer pages */ xb_a(cursor->page_size == UNIV_PAGE_SIZE); - msg("[%02u] xtrabackup: " + msg("[%02u] mariabackup: " "Page %lu is a doublewrite buffer page, " "skipping.\n", cursor->thread_n, page_no); } else { retry_count--; if (retry_count == 0) { - msg("[%02u] xtrabackup: " + msg("[%02u] mariabackup: " "Error: failed to read page after " "10 retries. File %s seems to be " "corrupted.\n", cursor->thread_n, @@ -370,7 +370,7 @@ ret = XB_FIL_CUR_ERROR; break; } - msg("[%02u] xtrabackup: " + msg("[%02u] mariabackup: " "Database page corruption detected at page " "%lu, retrying...\n", cursor->thread_n, page_no); diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/write_filt.cc mariadb-10.1-10.1.30/extra/mariabackup/write_filt.cc --- mariadb-10.1-10.1.25/extra/mariabackup/write_filt.cc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/write_filt.cc 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,5 @@ /****************************************************** -XtraBackup: hot backup tool for InnoDB +MariaBackup: hot backup tool for InnoDB (c) 2009-2013 Percona LLC and/or its affiliates. Originally Created 3/3/2009 Yasufumi Kinoshita Written by Alexey Kopytov, Aleksandr Kuzminsky, Stewart Smith, Vadim Tkachenko, @@ -27,6 +27,7 @@ #include "write_filt.h" #include "fil_cur.h" #include "xtrabackup.h" +#include /************************************************************************ Write-through page write filter. */ @@ -68,18 +69,21 @@ { char meta_name[FN_REFLEN]; xb_delta_info_t info; - ulint buf_size; xb_wf_incremental_ctxt_t *cp = &(ctxt->u.wf_incremental_ctxt); ctxt->cursor = cursor; /* allocate buffer for incremental backup (4096 pages) */ - buf_size = (cursor->page_size / 4 + 1) * cursor->page_size; - cp->delta_buf_base = static_cast(ut_malloc(buf_size)); - memset(cp->delta_buf_base, 0, buf_size); - cp->delta_buf = static_cast - (ut_align(cp->delta_buf_base, UNIV_PAGE_SIZE_MAX)); + cp->delta_buf_size = (cursor->page_size / 4) * cursor->page_size; + cp->delta_buf = (unsigned char *)os_mem_alloc_large(&cp->delta_buf_size); + + if (!cp->delta_buf) { + msg("[%02u] mariabackup: Error: " + "cannot allocate %zu bytes\n", + cursor->thread_n, (size_t) cp->delta_buf_size); + return (FALSE); + } /* write delta meta info */ snprintf(meta_name, sizeof(meta_name), "%s%s", dst_name, @@ -88,7 +92,7 @@ info.zip_size = cursor->zip_size; info.space_id = cursor->space_id; if (!xb_write_delta_metadata(meta_name, &info)) { - msg("[%02u] xtrabackup: Error: " + msg("[%02u] mariabackup: Error: " "failed to write meta info for %s\n", cursor->thread_n, cursor->rel_path); return(FALSE); @@ -183,10 +187,7 @@ wf_incremental_deinit(xb_write_filt_ctxt_t *ctxt) { xb_wf_incremental_ctxt_t *cp = &(ctxt->u.wf_incremental_ctxt); - - if (cp->delta_buf_base != NULL) { - ut_free(cp->delta_buf_base); - } + os_mem_free_large(cp->delta_buf, cp->delta_buf_size); } /************************************************************************ diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/write_filt.h mariadb-10.1-10.1.30/extra/mariabackup/write_filt.h --- mariadb-10.1-10.1.25/extra/mariabackup/write_filt.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/write_filt.h 2017-12-21 15:48:45.000000000 +0000 @@ -30,7 +30,7 @@ /* Incremental page filter context */ typedef struct { - byte *delta_buf_base; + ulint delta_buf_size; byte *delta_buf; ulint npages; } xb_wf_incremental_ctxt_t; diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/wsrep.cc mariadb-10.1-10.1.30/extra/mariabackup/wsrep.cc --- mariadb-10.1-10.1.25/extra/mariabackup/wsrep.cc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/wsrep.cc 2017-12-21 15:48:45.000000000 +0000 @@ -46,6 +46,7 @@ #include #include "common.h" +#include "backup_wsrep.h" #ifdef WITH_WSREP #define WSREP_XID_PREFIX "WSREPXid" #define WSREP_XID_PREFIX_LEN MYSQL_XID_PREFIX_LEN @@ -194,7 +195,7 @@ fp = fopen(XB_GALERA_INFO_FILENAME, "w"); if (fp == NULL) { - msg("xtrabackup: error: " + msg("mariabackup: error: " "could not create " XB_GALERA_INFO_FILENAME ", errno = %d\n", errno); @@ -203,12 +204,12 @@ seqno = wsrep_xid_seqno(&xid); - msg("xtrabackup: Recovered WSREP position: %s:%lld\n", + msg("mariabackup: Recovered WSREP position: %s:%lld\n", uuid_str, (long long) seqno); if (fprintf(fp, "%s:%lld", uuid_str, (long long) seqno) < 0) { - msg("xtrabackup: error: " + msg("mariabackup: error: " "could not write to " XB_GALERA_INFO_FILENAME ", errno = %d\n", errno); diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/wsrep.h mariadb-10.1-10.1.30/extra/mariabackup/wsrep.h --- mariadb-10.1-10.1.25/extra/mariabackup/wsrep.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/wsrep.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -/****************************************************** -Percona XtraBackup: hot backup tool for InnoDB -(c) 2009-2014 Percona LLC and/or its affiliates -Originally Created 3/3/2009 Yasufumi Kinoshita -Written by Alexey Kopytov, Aleksandr Kuzminsky, Stewart Smith, Vadim Tkachenko, -Yasufumi Kinoshita, Ignacio Nin and Baron Schwartz. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*******************************************************/ - -#ifndef WSREP_H -#define WSREP_H - -/*********************************************************************** -Store Galera checkpoint info in the 'xtrabackup_galera_info' file, if that -information is present in the trx system header. Otherwise, do nothing. */ -void -xb_write_galera_info(bool incremental_prepare); -/*==================*/ - -#endif diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/xtrabackup.cc mariadb-10.1-10.1.30/extra/mariabackup/xtrabackup.cc --- mariadb-10.1-10.1.25/extra/mariabackup/xtrabackup.cc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/xtrabackup.cc 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,5 @@ /****************************************************** -XtraBackup: hot backup tool for InnoDB +MariaBackup: hot backup tool for InnoDB (c) 2009-2017 Percona LLC and/or its affiliates Originally Created 3/3/2009 Yasufumi Kinoshita Written by Alexey Kopytov, Aleksandr Kuzminsky, Stewart Smith, Vadim Tkachenko, @@ -85,7 +85,7 @@ #include "xbstream.h" #include "changed_page_bitmap.h" #include "read_filt.h" -#include "wsrep.h" +#include "backup_wsrep.h" #include "innobackupex.h" #include "backup_mysql.h" #include "backup_copy.h" @@ -95,6 +95,7 @@ #include #include #include +#include /* TODO: replace with appropriate macros used in InnoDB 5.6 */ #define PAGE_ZIP_MIN_SIZE_SHIFT 10 @@ -123,6 +124,7 @@ longlong xtrabackup_use_memory = 100*1024*1024L; my_bool xtrabackup_create_ib_logfile = FALSE; +uint opt_protocol; long xtrabackup_throttle = 0; /* 0:unlimited */ lint io_ticket; os_event_t wait_throttle = NULL; @@ -560,6 +562,7 @@ OPT_XTRA_TABLES_EXCLUDE, OPT_XTRA_DATABASES_EXCLUDE, + OPT_PROTOCOL }; struct my_option xb_client_options[] = @@ -799,6 +802,9 @@ 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"protocol", OPT_PROTOCOL, "The protocol to use for connection (tcp, socket, pipe, memory).", + 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"socket", 'S', "This option specifies the socket to use when " "connecting to the local database server with a UNIX domain socket. " "The option accepts a string argument. See mysql --help for details.", @@ -831,6 +837,11 @@ (uchar*) &opt_incremental_history_uuid, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"remove-original", OPT_REMOVE_ORIGINAL, "Remove .qp files after decompression.", + (uchar *) &opt_remove_original, + (uchar *) &opt_remove_original, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"ftwrl-wait-query-type", OPT_LOCK_WAIT_QUERY_TYPE, "This option specifies which types of queries are allowed to complete " "before innobackupex will issue the global lock. Default is all.", @@ -1092,11 +1103,13 @@ (G_PTR*) &defaults_group, (G_PTR*) &defaults_group, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"plugin-dir", OPT_PLUGIN_DIR, "Server plugin directory", + {"plugin-dir", OPT_PLUGIN_DIR, + "Server plugin directory. Used to load encryption plugin during 'prepare' phase." + "Has no effect in the 'backup' phase (plugin directory during backup is the same as server's)", &xb_plugin_dir, &xb_plugin_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, - { "plugin-load", OPT_PLUGIN_LOAD, "encrypton plugin to load", + { "plugin-load", OPT_PLUGIN_LOAD, "encrypton plugin to load during 'prepare' phase.", &xb_plugin_load, &xb_plugin_load, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, @@ -1148,13 +1161,13 @@ xtrabackup_target_dir); fp = fopen(pid_path, "w"); if (fp == NULL) { - msg("xtrabackup: Error: cannot open %s\n", pid_path); + msg("mariabackup: Error: cannot open %s\n", pid_path); exit(EXIT_FAILURE); } fprintf(fp, "%u\n", (uint) pid); fclose(fp); - msg("xtrabackup: DEBUG: Suspending at debug sync point '%s'. " + msg("mariabackup: DEBUG: Suspending at debug sync point '%s'. " "Resume with 'kill -SIGCONT %u'.\n", name, (uint) pid); debug_sync_resumed= 0; @@ -1164,7 +1177,7 @@ } /* On resume */ - msg("xtrabackup: DEBUG: removing the pid file.\n"); + msg("mariabackup: DEBUG: removing the pid file.\n"); my_delete(pid_path, MYF(MY_WME)); #endif } @@ -1364,8 +1377,17 @@ start[1]=0 ; } break; - - + case OPT_PROTOCOL: + if (argument) + { + if ((opt_protocol= find_type_with_warning(argument, &sql_protocol_typelib, + opt->name)) <= 0) + { + sf_leaking_memory= 1; /* no memory leak reports here */ + exit(1); + } + } + break; #include "sslopt-case.h" case '?': @@ -1454,19 +1476,19 @@ /* Check that values don't overflow on 32-bit systems. */ if (sizeof(ulint) == 4) { if (xtrabackup_use_memory > UINT_MAX32) { - msg("xtrabackup: use-memory can't be over 4GB" + msg("mariabackup: use-memory can't be over 4GB" " on 32-bit systems\n"); } if (innobase_buffer_pool_size > UINT_MAX32) { - msg("xtrabackup: innobase_buffer_pool_size can't be " + msg("mariabackup: innobase_buffer_pool_size can't be " "over 4GB on 32-bit systems\n"); goto error; } if (innobase_log_file_size > UINT_MAX32) { - msg("xtrabackup: innobase_log_file_size can't be " + msg("mariabackup: innobase_log_file_size can't be " "over 4GB on 32-bit systemsi\n"); goto error; @@ -1493,9 +1515,9 @@ read from MySQL .cnf file */ if (xtrabackup_backup) { - msg("xtrabackup: using the following InnoDB configuration:\n"); + msg("mariabackup: using the following InnoDB configuration:\n"); } else { - msg("xtrabackup: using the following InnoDB configuration " + msg("mariabackup: using the following InnoDB configuration " "for recovery:\n"); } @@ -1505,7 +1527,7 @@ srv_data_home = (xtrabackup_backup && innobase_data_home_dir ? innobase_data_home_dir : default_path); - msg("xtrabackup: innodb_data_home_dir = %s\n", srv_data_home); + msg("mariabackup: innodb_data_home_dir = %s\n", srv_data_home); /* Set default InnoDB data file size to 10 MB and let it be auto-extending. Thus users can use InnoDB in >= 4.0 without having @@ -1514,7 +1536,7 @@ if (!innobase_data_file_path) { innobase_data_file_path = (char*) "ibdata1:10M:autoextend"; } - msg("xtrabackup: innodb_data_file_path = %s\n", + msg("mariabackup: innodb_data_file_path = %s\n", innobase_data_file_path); /* Since InnoDB edits the argument in the next call, we make another @@ -1525,7 +1547,7 @@ ret = (my_bool) srv_parse_data_file_paths_and_sizes( internal_innobase_data_file_path); if (ret == FALSE) { - msg("xtrabackup: syntax error in innodb_data_file_path\n"); + msg("mariabackup: syntax error in innodb_data_file_path\n"); mem_free_and_error: free(internal_innobase_data_file_path); internal_innobase_data_file_path = NULL; @@ -1558,7 +1580,7 @@ if (xtrabackup_prepare && xtrabackup_incremental_dir) { srv_log_group_home_dir = xtrabackup_incremental_dir; } - msg("xtrabackup: innodb_log_group_home_dir = %s\n", + msg("mariabackup: innodb_log_group_home_dir = %s\n", srv_log_group_home_dir); srv_normalize_path_for_win(srv_log_group_home_dir); @@ -1580,9 +1602,9 @@ srv_n_log_files = (ulint) innobase_log_files_in_group; srv_log_file_size = (ulint) innobase_log_file_size; - msg("xtrabackup: innodb_log_files_in_group = %ld\n", + msg("mariabackup: innodb_log_files_in_group = %ld\n", srv_n_log_files); - msg("xtrabackup: innodb_log_file_size = %lld\n", + msg("mariabackup: innodb_log_file_size = %lld\n", (long long int) srv_log_file_size); srv_log_buffer_size = (ulint) innobase_log_buffer_size; @@ -1713,7 +1735,7 @@ return(FALSE); error: - msg("xtrabackup: innodb_init_param(): Error occured.\n"); + msg("mariabackup: innodb_init_param(): Error occured.\n"); return(TRUE); } @@ -1744,7 +1766,7 @@ return(FALSE); error: - msg("xtrabackup: innodb_init(): Error occured.\n"); + msg("mariabackup: innodb_init(): Error occured.\n"); return(TRUE); } @@ -1754,7 +1776,7 @@ srv_fast_shutdown = (ulint) innobase_fast_shutdown; innodb_inited = 0; - msg("xtrabackup: starting shutdown with innodb_fast_shutdown = %lu\n", + msg("mariabackup: starting shutdown with innodb_fast_shutdown = %lu\n", srv_fast_shutdown); innodb_shutdown(); @@ -1785,7 +1807,7 @@ fp = fopen(filename,"r"); if(!fp) { - msg("xtrabackup: Error: cannot open %s\n", filename); + msg("mariabackup: Error: cannot open %s\n", filename); return(FALSE); } @@ -1864,7 +1886,7 @@ stream = ds_open(ds_ctxt, XTRABACKUP_METADATA_FILENAME, &mystat); if (stream == NULL) { - msg("xtrabackup: Error: cannot open output stream " + msg("mariabackup: Error: cannot open output stream " "for %s\n", XTRABACKUP_METADATA_FILENAME); return(FALSE); } @@ -1897,7 +1919,7 @@ fp = fopen(filepath, "w"); if(!fp) { - msg("xtrabackup: Error: cannot open %s\n", filepath); + msg("mariabackup: Error: cannot open %s\n", filepath); return(FALSE); } if (fwrite(buf, len, 1, fp) < 1) { @@ -1947,11 +1969,11 @@ fclose(fp); if (info->page_size == ULINT_UNDEFINED) { - msg("xtrabackup: page_size is required in %s\n", filepath); + msg("mariabackup: page_size is required in %s\n", filepath); r = FALSE; } if (info->space_id == ULINT_UNDEFINED) { - msg("xtrabackup: Warning: This backup was taken with XtraBackup 2.0.1 " + msg("mariabackup: Warning: This backup was taken with XtraBackup 2.0.1 " "or earlier, some DDL operations between full and incremental " "backups may be handled incorrectly\n"); } @@ -1983,7 +2005,7 @@ f = ds_open(ds_meta, filename, &mystat); if (f == NULL) { - msg("xtrabackup: Error: cannot open output stream for %s\n", + msg("mariabackup: Error: cannot open output stream for %s\n", filename); return(FALSE); } @@ -2354,14 +2376,14 @@ if (write_filter->init != NULL && !write_filter->init(&write_filt_ctxt, dst_name, &cursor)) { - msg("[%02u] xtrabackup: error: " + msg("[%02u] mariabackup: error: " "failed to initialize page write filter.\n", thread_n); goto error; } dstfile = ds_open(ds_data, dst_name, &cursor.statinfo); if (dstfile == NULL) { - msg("[%02u] xtrabackup: error: " + msg("[%02u] mariabackup: error: " "cannot open the destination stream for %s\n", thread_n, dst_name); goto error; @@ -2411,7 +2433,7 @@ if (write_filter && write_filter->deinit) { write_filter->deinit(&write_filt_ctxt);; } - msg("[%02u] xtrabackup: Error: " + msg("[%02u] mariabackup: Error: " "xtrabackup_copy_datafile() failed.\n", thread_n); return(TRUE); /*ERROR*/ @@ -2423,10 +2445,10 @@ if (write_filter && write_filter->deinit) { write_filter->deinit(&write_filt_ctxt); } - msg("[%02u] xtrabackup: Warning: We assume the " + msg("[%02u] mariabackup: Warning: We assume the " "table was dropped during xtrabackup execution " "and ignore the file.\n", thread_n); - msg("[%02u] xtrabackup: Warning: skipping tablespace %s.\n", + msg("[%02u] mariabackup: Warning: skipping tablespace %s.\n", thread_n, node_name); return(FALSE); } @@ -2539,8 +2561,9 @@ to this lsn */ lsn_t* group_scanned_lsn,/*!< out: scanning succeeded up to this lsn */ - bool* finished) /*!< out: false if is not able to scan + bool* finished, /*!< out: false if is not able to scan any more in this log group */ + bool* must_reread_log) /*!< out: should re-read buffer from disk, incomplete read*/ { lsn_t scanned_lsn; ulint data_len; @@ -2550,6 +2573,7 @@ ulint scanned_checkpoint_no = 0; *finished = false; + *must_reread_log = false; scanned_lsn = start_lsn; log_block = log_sys->buf; @@ -2577,14 +2601,14 @@ break; } - msg("xtrabackup: error:" + msg("mariabackup: error:" " log block numbers mismatch:\n" - "xtrabackup: error: expected log block no. %lu," + "mariabackup: error: expected log block no. %lu," " but got no. %lu from the log file.\n", (ulong) scanned_no, (ulong) no); if ((no - scanned_no) % blocks_in_group == 0) { - msg("xtrabackup: error:" + msg("mariabackup: error:" " it looks like InnoDB log has wrapped" " around before xtrabackup could" " process all records due to either" @@ -2596,18 +2620,20 @@ } else if (!checksum_is_ok) { /* Garbage or an incompletely written log block */ - msg("xtrabackup: warning: Log block checksum mismatch" + msg("mariabackup: warning: Log block checksum mismatch" " (block no %lu at lsn " LSN_PF "): \n" "expected %lu, calculated checksum %lu\n", (ulong) no, scanned_lsn, (ulong) log_block_get_checksum(log_block), (ulong) log_block_calc_checksum(log_block)); - msg("xtrabackup: warning: this is possible when the " + msg("mariabackup: warning: this is possible when the " "log block has not been fully written by the " "server, will retry later.\n"); - *finished = true; - break; + *finished = false; + *must_reread_log = true; + my_sleep(1000); + return false; } if (log_block_get_flush_bit(log_block)) { @@ -2676,7 +2702,7 @@ } if (ds_write(dst_log_file, log_sys->buf, write_size)) { - msg("xtrabackup: Error: " + msg("mariabackup: Error: " "write to logfile failed\n"); return(false); } @@ -2719,14 +2745,23 @@ mutex_enter(&log_sys->mutex); - log_group_read_log_seg(LOG_RECOVER, log_sys->buf, - group, start_lsn, end_lsn, false); + bool scan_ok = false; + bool must_reread_log; + int retries = 0; + do { + + log_group_read_log_seg(LOG_RECOVER, log_sys->buf, + group, start_lsn, end_lsn, false); - if (!xtrabackup_scan_log_recs(group, is_last, - start_lsn, &contiguous_lsn, &group_scanned_lsn, - &finished)) { + scan_ok = xtrabackup_scan_log_recs(group, is_last, + start_lsn, &contiguous_lsn, &group_scanned_lsn, + &finished, &must_reread_log); + + } while (!scan_ok && must_reread_log && retries++ < 100); + + if (!scan_ok) { goto error; - } + } mutex_exit(&log_sys->mutex); @@ -2757,7 +2792,7 @@ error: mutex_exit(&log_sys->mutex); ds_close(dst_log_file); - msg("xtrabackup: Error: xtrabackup_copy_logfile() failed.\n"); + msg("mariabackup: Error: xtrabackup_copy_logfile() failed.\n"); return(TRUE); } @@ -2900,7 +2935,7 @@ /* copy the datafile */ if(xtrabackup_copy_datafile(node, num)) { - msg("[%02u] xtrabackup: Error: " + msg("[%02u] mariabackup: Error: " "failed to copy datafile.\n", num); exit(EXIT_FAILURE); } @@ -3072,25 +3107,25 @@ &flushed_lsn, &sum_of_new_sizes); if (err != DB_SUCCESS) { - msg("xtrabackup: Could not open or create data files.\n" - "xtrabackup: If you tried to add new data files, and it " + msg("mariabackup: Could not open or create data files.\n" + "mariabackup: If you tried to add new data files, and it " "failed here,\n" - "xtrabackup: you should now edit innodb_data_file_path in " + "mariabackup: you should now edit innodb_data_file_path in " "my.cnf back\n" - "xtrabackup: to what it was, and remove the new ibdata " + "mariabackup: to what it was, and remove the new ibdata " "files InnoDB created\n" - "xtrabackup: in this failed attempt. InnoDB only wrote " + "mariabackup: in this failed attempt. InnoDB only wrote " "those files full of\n" - "xtrabackup: zeros, but did not yet use them in any way. " + "mariabackup: zeros, but did not yet use them in any way. " "But be careful: do not\n" - "xtrabackup: remove old data files which contain your " + "mariabackup: remove old data files which contain your " "precious data!\n"); return(err); } /* create_new_db must not be TRUE.. */ if (create_new_db) { - msg("xtrabackup: could not find data files at the " + msg("mariabackup: could not find data files at the " "specified datadir\n"); return(DB_ERROR); } @@ -3109,7 +3144,7 @@ srv_undo_tablespaces_init(), because fil_is_user_tablespace_id() * relies on srv_undo_tablespaces_open to be properly initialized */ - msg("xtrabackup: Generating a list of tablespaces\n"); + msg("mariabackup: Generating a list of tablespaces\n"); err = fil_load_single_table_tablespaces(xb_check_if_open_tablespace); if (err != DB_SUCCESS) { @@ -3157,7 +3192,7 @@ } if (i == 1000) { - msg("xtrabackup: Warning: %lu threads created by InnoDB" + msg("mariabackup: Warning: %lu threads created by InnoDB" " had not exited at shutdown!\n", (ulong) os_thread_count); } @@ -3243,12 +3278,12 @@ /* perform only basic validation. validate length and path symbols */ if (len > NAME_LEN) { - msg("xtrabackup: name `%s` is too long.\n", name); + msg("mariabackup: name `%s` is too long.\n", name); exit(EXIT_FAILURE); } p = strpbrk(name, "/\\~"); if (p && p - name < NAME_LEN) { - msg("xtrabackup: name `%s` is not valid.\n", name); + msg("mariabackup: name `%s` is not valid.\n", name); exit(EXIT_FAILURE); } } @@ -3327,7 +3362,7 @@ const char* name) /*!< in: name of table */ { if (strchr(name, '.') == NULL) { - msg("xtrabackup: `%s` is not fully qualified name.\n", name); + msg("mariabackup: `%s` is not fully qualified name.\n", name); exit(EXIT_FAILURE); } @@ -3349,7 +3384,7 @@ if (ret != 0) { regerror(ret, &compiled_regex, errbuf, sizeof(errbuf)); - msg("xtrabackup: error: %s regcomp(%s): %s\n", + msg("mariabackup: error: %s regcomp(%s): %s\n", error_context, regex, errbuf); exit(EXIT_FAILURE); } @@ -3418,7 +3453,7 @@ /* read and store the filenames */ fp = fopen(filename, "r"); if (!fp) { - msg("xtrabackup: cannot open %s\n", + msg("mariabackup: cannot open %s\n", filename); exit(EXIT_FAILURE); } @@ -3427,7 +3462,7 @@ if (p) { *p = '\0'; } else { - msg("xtrabackup: `%s...` name is too long", name_buf); + msg("mariabackup: `%s...` name is too long", name_buf); exit(EXIT_FAILURE); } @@ -3719,19 +3754,19 @@ data_thread_ctxt_t *data_threads; #ifdef USE_POSIX_FADVISE - msg("xtrabackup: uses posix_fadvise().\n"); + msg("mariabackup: uses posix_fadvise().\n"); #endif /* cd to datadir */ if (my_setwd(mysql_real_data_home,MYF(MY_WME))) { - msg("xtrabackup: cannot my_setwd %s\n", mysql_real_data_home); + msg("mariabackup: cannot my_setwd %s\n", mysql_real_data_home); exit(EXIT_FAILURE); } - msg("xtrabackup: cd to %s\n", mysql_real_data_home); + msg("mariabackup: cd to %s\n", mysql_real_data_home); - msg("xtrabackup: open files limit requested %u, set to %u\n", + msg("mariabackup: open files limit requested %u, set to %u\n", (uint) xb_open_files_limit, xb_set_max_open_files(xb_open_files_limit)); @@ -3746,7 +3781,7 @@ srv_close_files = (bool)xb_close_files; if (srv_close_files) - msg("xtrabackup: warning: close-files specified. Use it " + msg("mariabackup: warning: close-files specified. Use it " "at your own risk. If there are DDL operations like table DROP TABLE " "or RENAME TABLE during the backup, inconsistent backup will be " "produced.\n"); @@ -3768,7 +3803,7 @@ } else if (0 == ut_strcmp(srv_file_flush_method_str, "O_DIRECT")) { srv_unix_file_flush_method = SRV_UNIX_O_DIRECT; - msg("xtrabackup: using O_DIRECT\n"); + msg("mariabackup: using O_DIRECT\n"); } else if (0 == ut_strcmp(srv_file_flush_method_str, "littlesync")) { srv_unix_file_flush_method = SRV_UNIX_LITTLESYNC; @@ -3776,23 +3811,17 @@ srv_unix_file_flush_method = SRV_UNIX_NOSYNC; } else if (0 == ut_strcmp(srv_file_flush_method_str, "ALL_O_DIRECT")) { srv_unix_file_flush_method = SRV_UNIX_ALL_O_DIRECT; - msg("xtrabackup: using ALL_O_DIRECT\n"); + msg("mariabackup: using ALL_O_DIRECT\n"); } else if (0 == ut_strcmp(srv_file_flush_method_str, "O_DIRECT_NO_FSYNC")) { srv_unix_file_flush_method = SRV_UNIX_O_DIRECT_NO_FSYNC; - msg("xtrabackup: using O_DIRECT_NO_FSYNC\n"); + msg("mariabackup: using O_DIRECT_NO_FSYNC\n"); } else { - msg("xtrabackup: Unrecognized value %s for " + msg("mariabackup: Unrecognized value %s for " "innodb_flush_method\n", srv_file_flush_method_str); exit(EXIT_FAILURE); } - /* We can only use synchronous unbuffered IO on Windows for now */ - if (srv_file_flush_method_str != NULL) { - msg("xtrabackupp: Warning: " - "ignoring innodb_flush_method = %s on Windows.\n", srv_file_flush_method_str); - } - #ifdef _WIN32 srv_win_file_flush_method = SRV_WIN_IO_UNBUFFERED; srv_use_native_aio = FALSE; @@ -3855,12 +3884,12 @@ } if ((log_opened && log_created)) { msg( - "xtrabackup: Error: all log files must be created at the same time.\n" - "xtrabackup: All log files must be created also in database creation.\n" - "xtrabackup: If you want bigger or smaller log files, shut down the\n" - "xtrabackup: database and make sure there were no errors in shutdown.\n" - "xtrabackup: Then delete the existing log files. Edit the .cnf file\n" - "xtrabackup: and start the database again.\n"); + "mariabackup: Error: all log files must be created at the same time.\n" + "mariabackup: All log files must be created also in database creation.\n" + "mariabackup: If you want bigger or smaller log files, shut down the\n" + "mariabackup: database and make sure there were no errors in shutdown.\n" + "mariabackup: Then delete the existing log files. Edit the .cnf file\n" + "mariabackup: and start the database again.\n"); //return(DB_ERROR); exit(EXIT_FAILURE); @@ -3869,7 +3898,7 @@ /* log_file_created must not be TRUE, if online */ if (log_file_created) { - msg("xtrabackup: Something wrong with source files...\n"); + msg("mariabackup: Something wrong with source files...\n"); exit(EXIT_FAILURE); } @@ -3879,7 +3908,7 @@ if (xtrabackup_extra_lsndir &&!my_stat(xtrabackup_extra_lsndir,&stat_info,MYF(0)) && (my_mkdir(xtrabackup_extra_lsndir,0777,MYF(0)) < 0)) { - msg("xtrabackup: Error: cannot mkdir %d: %s\n", + msg("mariabackup: Error: cannot mkdir %d: %s\n", my_errno, xtrabackup_extra_lsndir); exit(EXIT_FAILURE); } @@ -3887,7 +3916,7 @@ /* create target dir if not exist */ if (!xtrabackup_stream_str && !my_stat(xtrabackup_target_dir,&stat_info,MYF(0)) && (my_mkdir(xtrabackup_target_dir,0777,MYF(0)) < 0)){ - msg("xtrabackup: Error: cannot mkdir %d: %s\n", + msg("mariabackup: Error: cannot mkdir %d: %s\n", my_errno, xtrabackup_target_dir); exit(EXIT_FAILURE); } @@ -3973,7 +4002,7 @@ memset(&stat_info, 0, sizeof(MY_STAT)); dst_log_file = ds_open(ds_redo, XB_LOG_FILENAME, &stat_info); if (dst_log_file == NULL) { - msg("xtrabackup: error: failed to open the target stream for " + msg("mariabackup: error: failed to open the target stream for " "'%s'.\n", XB_LOG_FILENAME); ut_free(log_hdr_buf_); exit(EXIT_FAILURE); @@ -3987,7 +4016,7 @@ + (sizeof "xtrabkup ") - 1)); if (ds_write(dst_log_file, log_hdr_buf, LOG_FILE_HDR_SIZE)) { - msg("xtrabackup: error: write to logfile failed\n"); + msg("mariabackup: error: write to logfile failed\n"); ut_free(log_hdr_buf_); exit(EXIT_FAILURE); } @@ -4023,7 +4052,7 @@ /* Populate fil_system with tablespaces to copy */ err = xb_load_tablespaces(); if (err != DB_SUCCESS) { - msg("xtrabackup: error: xb_load_tablespaces() failed with" + msg("mariabackup: error: xb_load_tablespaces() failed with" "error code %lu\n", err); exit(EXIT_FAILURE); } @@ -4039,25 +4068,25 @@ changed_page_bitmap = xb_page_bitmap_init(); } if (!changed_page_bitmap) { - msg("xtrabackup: using the full scan for incremental " + msg("mariabackup: using the full scan for incremental " "backup\n"); } else if (incremental_lsn != checkpoint_lsn_start) { /* Do not print that bitmaps are used when dummy bitmap is build for an empty LSN range. */ - msg("xtrabackup: using the changed page bitmap\n"); + msg("mariabackup: using the changed page bitmap\n"); } } ut_a(xtrabackup_parallel > 0); if (xtrabackup_parallel > 1) { - msg("xtrabackup: Starting %u threads for parallel data " + msg("mariabackup: Starting %u threads for parallel data " "files transfer\n", xtrabackup_parallel); } it = datafiles_iter_new(f_system); if (it == NULL) { - msg("xtrabackup: Error: datafiles_iter_new() failed.\n"); + msg("mariabackup: Error: datafiles_iter_new() failed.\n"); exit(EXIT_FAILURE); } @@ -4112,7 +4141,7 @@ err = recv_find_max_checkpoint(&max_cp_group, &max_cp_field); if (err != DB_SUCCESS) { - msg("xtrabackup: Error: recv_find_max_checkpoint() failed.\n"); + msg("mariabackup: Error: recv_find_max_checkpoint() failed.\n"); mutex_exit(&log_sys->mutex); goto skip_last_cp; } @@ -4126,14 +4155,14 @@ mutex_exit(&log_sys->mutex); - msg("xtrabackup: The latest check point (for incremental): " + msg("mariabackup: The latest check point (for incremental): " "'" LSN_PF "'\n", latest_cp); } skip_last_cp: /* stop log_copying_thread */ log_copying = FALSE; os_event_set(log_copying_stop); - msg("xtrabackup: Stopping log copying thread.\n"); + msg("mariabackup: Stopping log copying thread.\n"); while (log_copying_running) { msg("."); os_thread_sleep(200000); /*0.2 sec*/ @@ -4156,7 +4185,7 @@ metadata_last_lsn = log_copy_scanned_lsn; if (!xtrabackup_stream_metadata(ds_meta)) { - msg("xtrabackup: Error: failed to stream metadata.\n"); + msg("mariabackup: Error: failed to stream metadata.\n"); exit(EXIT_FAILURE); } if (xtrabackup_extra_lsndir) { @@ -4165,7 +4194,7 @@ sprintf(filename, "%s/%s", xtrabackup_extra_lsndir, XTRABACKUP_METADATA_FILENAME); if (!xtrabackup_write_metadata(filename)) { - msg("xtrabackup: Error: failed to write metadata " + msg("mariabackup: Error: failed to write metadata " "to '%s'.\n", filename); exit(EXIT_FAILURE); } @@ -4187,7 +4216,7 @@ wait_throttle = NULL; } - msg("xtrabackup: Transaction log of lsn (" LSN_PF ") to (" LSN_PF + msg("mariabackup: Transaction log of lsn (" LSN_PF ") to (" LSN_PF ") was copied.\n", checkpoint_lsn_start, log_copy_scanned_lsn); xb_filters_free(); @@ -4195,7 +4224,7 @@ /* Make sure that the latest checkpoint made it to xtrabackup_logfile */ if (latest_cp > log_copy_scanned_lsn) { - msg("xtrabackup: error: last checkpoint LSN (" LSN_PF + msg("mariabackup: error: last checkpoint LSN (" LSN_PF ") is larger than last copied LSN (" LSN_PF ").\n", latest_cp, log_copy_scanned_lsn); exit(EXIT_FAILURE); @@ -4256,7 +4285,7 @@ /* The following call prints an error message */ os_file_get_last_error(TRUE); - msg("xtrabackup: Warning: cannot open %s. will try to find.\n", + msg("mariabackup: Warning: cannot open %s. will try to find.\n", src_path); /* check if ib_logfile0 may be xtrabackup_logfile */ @@ -4266,7 +4295,7 @@ &success,0); if (!success) { os_file_get_last_error(TRUE); - msg(" xtrabackup: Fatal error: cannot find %s.\n", + msg("mariabackup: Fatal error: cannot find %s.\n", src_path); goto error; @@ -4280,7 +4309,7 @@ if ( ut_memcmp(log_buf + LOG_FILE_WAS_CREATED_BY_HOT_BACKUP, (byte*)"xtrabkup", (sizeof "xtrabkup") - 1) == 0) { - msg(" xtrabackup: 'ib_logfile0' seems to be " + msg("mariabackup: 'ib_logfile0' seems to be " "'xtrabackup_logfile'. will retry.\n"); os_file_close(src_file); @@ -4295,8 +4324,7 @@ goto retry; } - msg(" xtrabackup: Fatal error: cannot find %s.\n", - src_path); + msg("mariabackup: Fatal error: cannot find %s.\n", src_path); os_file_close(src_file); src_file = XB_FILE_UNDEFINED; @@ -4317,7 +4345,7 @@ if ( ut_memcmp(log_buf + LOG_FILE_WAS_CREATED_BY_HOT_BACKUP, (byte*)"xtrabkup", (sizeof "xtrabkup") - 1) != 0 ) { - msg("xtrabackup: notice: xtrabackup_logfile was already used " + msg("mariabackup: notice: xtrabackup_logfile was already used " "to '--prepare'.\n"); goto skip_modify; } else { @@ -4350,7 +4378,7 @@ } if (!checkpoint_found) { - msg("xtrabackup: No valid checkpoint found.\n"); + msg("mariabackup: No valid checkpoint found.\n"); goto error; } @@ -4456,7 +4484,7 @@ file_size = os_file_get_size(src_file); } - msg("xtrabackup: xtrabackup_logfile detected: size=" INT64PF ", " + msg("mariabackup: xtrabackup_logfile detected: size=" INT64PF ", " "start_lsn=(" LSN_PF ")\n", file_size, max_lsn); os_file_close(src_file); @@ -4492,7 +4520,7 @@ free(log_buf); if (src_file != XB_FILE_UNDEFINED) os_file_close(src_file); - msg("xtrabackup: Error: xtrabackup_init_temp_log() failed.\n"); + msg("mariabackup: Error: xtrabackup_init_temp_log() failed.\n"); return(TRUE); /*ERROR*/ } @@ -4544,14 +4572,14 @@ OS_FILE_READ_WRITE, &ret,0); if (!ret) { - msg("xtrabackup: cannot create file %s\n", path); + msg("mariabackup: cannot create file %s\n", path); return ret; } ret = os_file_set_size(path, *file, FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE); if (!ret) { - msg("xtrabackup: cannot set size for file %s\n", path); + msg("mariabackup: cannot set size for file %s\n", path); os_file_close(*file); os_file_delete(0, path); return ret; @@ -4595,7 +4623,7 @@ ut_free(buf); if (!ret) { - msg("xtrabackup: could not write the first page to %s\n", + msg("mariabackup: could not write the first page to %s\n", path); os_file_close(*file); os_file_delete(0, path); @@ -4659,7 +4687,7 @@ /* Create the database directory if it doesn't exist yet */ if (!os_file_create_directory(dest_dir, FALSE)) { - msg("xtrabackup: error: cannot create dir %s\n", dest_dir); + msg("mariabackup: error: cannot create dir %s\n", dest_dir); return file; } @@ -4692,13 +4720,13 @@ snprintf(tmpname, FN_REFLEN, "%s/xtrabackup_tmp_#%lu", dbname, fil_space->id); - msg("xtrabackup: Renaming %s to %s.ibd\n", + msg("mariabackup: Renaming %s to %s.ibd\n", fil_space->name, tmpname); if (!fil_rename_tablespace(NULL, fil_space->id, tmpname, NULL)) { - msg("xtrabackup: Cannot rename %s to %s\n", + msg("mariabackup: Cannot rename %s to %s\n", fil_space->name, tmpname); goto exit; } @@ -4707,7 +4735,7 @@ if (space_id == ULINT_UNDEFINED) { - msg("xtrabackup: Error: Cannot handle DDL operation on tablespace " + msg("mariabackup: Error: Cannot handle DDL operation on tablespace " "%s\n", dest_space_name); exit(EXIT_FAILURE); } @@ -4719,13 +4747,13 @@ strncpy(tmpname, dest_space_name, FN_REFLEN); - msg("xtrabackup: Renaming %s to %s\n", + msg("mariabackup: Renaming %s to %s\n", fil_space->name, dest_space_name); if (!fil_rename_tablespace(NULL, fil_space->id, tmpname, NULL)) { - msg("xtrabackup: Cannot rename %s to %s\n", + msg("mariabackup: Cannot rename %s to %s\n", fil_space->name, dest_space_name); goto exit; } @@ -4737,7 +4765,7 @@ if (!fil_space_create(dest_space_name, space_id, 0, FIL_TABLESPACE, 0, false)) { - msg("xtrabackup: Cannot create tablespace %s\n", + msg("mariabackup: Cannot create tablespace %s\n", dest_space_name); goto exit; } @@ -4771,7 +4799,7 @@ if (ok) { *success = TRUE; } else { - msg("xtrabackup: Cannot open file %s\n", real_name); + msg("mariabackup: Cannot open file %s\n", real_name); } exit: @@ -4843,11 +4871,11 @@ page_size = info.page_size; page_size_shift = get_bit_shift(page_size); - msg("xtrabackup: page size for %s is %lu bytes\n", + msg("mariabackup: page size for %s is %lu bytes\n", src_path, page_size); if (page_size_shift < 10 || page_size_shift > UNIV_PAGE_SIZE_SHIFT_MAX) { - msg("xtrabackup: error: invalid value of page_size " + msg("mariabackup: error: invalid value of page_size " "(%lu bytes) read from %s\n", page_size, meta_path); goto error; } @@ -4858,7 +4886,7 @@ &success,0); if (!success) { os_file_get_last_error(TRUE); - msg("xtrabackup: error: cannot open %s\n", src_path); + msg("mariabackup: error: cannot open %s\n", src_path); goto error; } @@ -4870,7 +4898,7 @@ dbname, space_name, info.space_id, info.zip_size, dst_path, sizeof(dst_path), &success); if (!success) { - msg("xtrabackup: error: cannot open %s\n", dst_path); + msg("mariabackup: error: cannot open %s\n", dst_path); goto error; } @@ -4909,7 +4937,7 @@ last_buffer = TRUE; break; default: - msg("xtrabackup: error: %s seems not " + msg("mariabackup: error: %s seems not " ".delta file.\n", src_path); goto error; } @@ -4942,12 +4970,36 @@ if (offset_on_page == 0xFFFFFFFFUL) break; - success = os_file_write(dst_path, dst_file, - incremental_buffer + - page_in_buffer * page_size, - (offset_on_page << - page_size_shift), - page_size); + uchar *buf = incremental_buffer + page_in_buffer * page_size; + const os_offset_t off = os_offset_t(offset_on_page)*page_size; + + if (off == 0) { + /* Read tablespace size from page 0, + extend the tablespace to specified size. */ + os_offset_t n_pages = mach_read_from_4(buf + FSP_HEADER_OFFSET + FSP_SIZE); + ulint space_id = mach_read_from_4(buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); + if (space_id != TRX_SYS_SPACE) { + if (!os_file_set_size(dst_path, dst_file, n_pages*page_size)) + goto error; + } else { + /* System tablespace needs special handling , since + it can consist of multiple files. The first one has full + tablespace size in page 0, but only last file should be extended. */ + mutex_enter(&fil_system->mutex); + fil_space_t* space = fil_space_get_by_id(space_id); + mutex_exit(&fil_system->mutex); + DBUG_ASSERT(space); + fil_node_t* n = UT_LIST_GET_FIRST(space->chain); + if(strcmp(n->name, dst_path) == 0) { + /* Got first tablespace file, with correct size */ + ulint actual_size; + if (!fil_extend_space_to_desired_size(&actual_size, 0, (ulint)n_pages)) + goto error; + } + } + } + + success = os_file_write(dst_path, dst_file, buf, off, page_size); if (!success) { goto error; } @@ -4958,8 +5010,11 @@ if (incremental_buffer_base) ut_free(incremental_buffer_base); - if (src_file != XB_FILE_UNDEFINED) + if (src_file != XB_FILE_UNDEFINED) { os_file_close(src_file); + /* Remove .delta file after it was successfully applied.*/ + os_file_delete(0,src_path); + } if (dst_file != XB_FILE_UNDEFINED) os_file_close(dst_file); return TRUE; @@ -4971,7 +5026,7 @@ os_file_close(src_file); if (dst_file != XB_FILE_UNDEFINED) os_file_close(dst_file); - msg("xtrabackup: Error: xtrabackup_apply_delta(): " + msg("mariabackup: Error: xtrabackup_apply_delta(): " "failed to apply %s to %s.\n", src_path, dst_path); return FALSE; } @@ -5035,7 +5090,7 @@ callback */ { ulint ret; - char dbpath[FN_REFLEN]; + char dbpath[OS_FILE_MAX_PATH]; os_file_dir_t dir; os_file_dir_t dbdir; os_file_stat_t dbinfo; @@ -5080,7 +5135,7 @@ os_file_closedir(dbdir); } else { - msg("xtrabackup: Cannot open dir %s\n", + msg("mariabackup: Cannot open dir %s\n", path); } @@ -5088,7 +5143,7 @@ dir = os_file_opendir(path, FALSE); if (dir == NULL) { - msg("xtrabackup: Cannot open dir %s\n", + msg("mariabackup: Cannot open dir %s\n", path); } @@ -5101,8 +5156,7 @@ goto next_datadir_item; } - sprintf(dbpath, "%s/%s", path, - dbinfo.name); + snprintf(dbpath, sizeof(dbpath), "%s/%s", path, dbinfo.name); srv_normalize_path_for_win(dbpath); dbdir = os_file_opendir(dbpath, FALSE); @@ -5231,7 +5285,7 @@ error: if (src_file != XB_FILE_UNDEFINED) os_file_close(src_file); - msg("xtrabackup: Error: xtrabackup_close_temp_log() failed.\n"); + msg("mariabackup: Error: xtrabackup_close_temp_log() failed.\n"); return(TRUE); /*ERROR*/ } @@ -5260,7 +5314,7 @@ if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) { - msg("xtrabackup: Error: writing index fields."); + msg("mariabackup: Error: writing index fields."); return(false); } @@ -5274,7 +5328,7 @@ if (fwrite(row, 1, sizeof(len), file) != sizeof(len) || fwrite(field->name, 1, len, file) != len) { - msg("xtrabackup: Error: writing index column."); + msg("mariabackup: Error: writing index column."); return(false); } @@ -5301,7 +5355,7 @@ mach_write_to_4(row, UT_LIST_GET_LEN(table->indexes)); if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) { - msg("xtrabackup: Error: writing index count."); + msg("mariabackup: Error: writing index count."); return(false); } @@ -5349,7 +5403,7 @@ if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) { - msg("xtrabackup: Error: writing index meta-data."); + msg("mariabackup: Error: writing index meta-data."); return(false); } @@ -5364,7 +5418,7 @@ if (fwrite(row, 1, sizeof(len), file) != sizeof(len) || fwrite(index->name, 1, len, file) != len) { - msg("xtrabackup: Error: writing index name."); + msg("mariabackup: Error: writing index name."); return(false); } @@ -5417,7 +5471,7 @@ mach_write_to_4(ptr, col->max_prefix); if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) { - msg("xtrabackup: Error: writing table column data."); + msg("mariabackup: Error: writing table column data."); return(false); } @@ -5438,7 +5492,7 @@ if (fwrite(row, 1, sizeof(len), file) != sizeof(len) || fwrite(col_name, 1, len, file) != len) { - msg("xtrabackup: Error: writing column name."); + msg("mariabackup: Error: writing column name."); return(false); } @@ -5464,7 +5518,7 @@ mach_write_to_4(value, IB_EXPORT_CFG_VERSION_V1); if (fwrite(&value, 1, sizeof(value), file) != sizeof(value)) { - msg("xtrabackup: Error: writing meta-data version number."); + msg("mariabackup: Error: writing meta-data version number."); return(false); } @@ -5480,7 +5534,7 @@ if (fwrite(&value, 1, sizeof(value), file) != sizeof(value) || fwrite(hostname, 1, len, file) != len) { - msg("xtrabackup: Error: writing hostname."); + msg("mariabackup: Error: writing hostname."); return(false); } @@ -5495,7 +5549,7 @@ if (fwrite(&value, 1, sizeof(value), file) != sizeof(value) || fwrite(table->name, 1, len, file) != len) { - msg("xtrabackup: Error: writing table name."); + msg("mariabackup: Error: writing table name."); return(false); } @@ -5506,7 +5560,7 @@ mach_write_to_8(row, table->autoinc); if (fwrite(row, 1, sizeof(ib_uint64_t), file) != sizeof(ib_uint64_t)) { - msg("xtrabackup: Error: writing table autoinc value."); + msg("mariabackup: Error: writing table autoinc value."); return(false); } @@ -5525,7 +5579,7 @@ mach_write_to_4(ptr, table->n_cols); if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) { - msg("xtrabackup: Error: writing table meta-data."); + msg("mariabackup: Error: writing table meta-data."); return(false); } @@ -5553,7 +5607,7 @@ file = fopen(file_path, "w+b"); if (file == NULL) { - msg("xtrabackup: Error: cannot open %s\n", node->name); + msg("mariabackup: Error: cannot open %s\n", node->name); success = false; } else { @@ -5569,7 +5623,7 @@ } if (fclose(file) != 0) { - msg("xtrabackup: Error: cannot close %s\n", node->name); + msg("mariabackup: Error: cannot close %s\n", node->name); success = false; } @@ -5607,7 +5661,7 @@ fp = fopen(filename, "w"); if (!fp) { - msg("xtrabackup: failed to open '%s'\n", filename); + msg("mariabackup: failed to open '%s'\n", filename); return(false); } @@ -5631,11 +5685,11 @@ if (my_setwd(xtrabackup_real_target_dir,MYF(MY_WME))) { - msg("xtrabackup: cannot my_setwd %s\n", + msg("mariabackup: cannot my_setwd %s\n", xtrabackup_real_target_dir); exit(EXIT_FAILURE); } - msg("xtrabackup: cd to %s\n", xtrabackup_real_target_dir); + msg("mariabackup: cd to %s\n", xtrabackup_real_target_dir); encryption_plugin_prepare_init(argc, argv); @@ -5650,36 +5704,36 @@ XTRABACKUP_METADATA_FILENAME); if (!xtrabackup_read_metadata(metadata_path)) { - msg("xtrabackup: Error: failed to read metadata from '%s'\n", + msg("mariabackup: Error: failed to read metadata from '%s'\n", metadata_path); exit(EXIT_FAILURE); } if (!strcmp(metadata_type, "full-backuped")) { - msg("xtrabackup: This target seems to be not prepared yet.\n"); + msg("mariabackup: This target seems to be not prepared yet.\n"); } else if (!strcmp(metadata_type, "log-applied")) { - msg("xtrabackup: This target seems to be already " + msg("mariabackup: This target seems to be already " "prepared with --apply-log-only.\n"); goto skip_check; } else if (!strcmp(metadata_type, "full-prepared")) { - msg("xtrabackup: This target seems to be already prepared.\n"); + msg("mariabackup: This target seems to be already prepared.\n"); } else { - msg("xtrabackup: This target seems not to have correct " + msg("mariabackup: This target seems not to have correct " "metadata...\n"); exit(EXIT_FAILURE); } if (xtrabackup_incremental) { - msg("xtrabackup: error: applying incremental backup " + msg("mariabackup: error: applying incremental backup " "needs target prepared with --apply-log-only.\n"); exit(EXIT_FAILURE); } skip_check: if (xtrabackup_incremental && metadata_to_lsn != incremental_lsn) { - msg("xtrabackup: error: This incremental backup seems " + msg("mariabackup: error: This incremental backup seems " "not to be proper for the target.\n" - "xtrabackup: Check 'to_lsn' of the target and " + "mariabackup: Check 'to_lsn' of the target and " "'from_lsn' of the incremental.\n"); exit(EXIT_FAILURE); } @@ -5716,7 +5770,7 @@ if (xtrabackup_incremental) { err = xb_data_files_init(); if (err != DB_SUCCESS) { - msg("xtrabackup: error: xb_data_files_init() failed " + msg("mariabackup: error: xb_data_files_init() failed " "with error code %lu\n", err); goto error_cleanup; } @@ -5766,8 +5820,8 @@ srv_n_write_io_threads = 4; } - msg("xtrabackup: Starting InnoDB instance for recovery.\n" - "xtrabackup: Using %lld bytes for buffer pool " + msg("mariabackup: Starting InnoDB instance for recovery.\n" + "mariabackup: Using %lld bytes for buffer pool " "(set by --use-memory parameter)\n", xtrabackup_use_memory); srv_max_buf_pool_modified_pct = (double)max_buf_pool_modified_pct; @@ -5779,54 +5833,8 @@ if(innodb_init()) goto error_cleanup; - if (xtrabackup_incremental) { - - it = datafiles_iter_new(fil_system); - if (it == NULL) { - msg("xtrabackup: Error: datafiles_iter_new() failed.\n"); - exit(EXIT_FAILURE); - } - - while ((node = datafiles_iter_next(it)) != NULL) { - byte *header; - ulint size; - ulint actual_size; - mtr_t mtr; - buf_block_t *block; - ulint flags; - - space = node->space; - - /* Align space sizes along with fsp header. We want to process - each space once, so skip all nodes except the first one in a - multi-node space. */ - if (UT_LIST_GET_PREV(chain, node) != NULL) { - continue; - } - - mtr_start(&mtr); - - mtr_s_lock(fil_space_get_latch(space->id, &flags), &mtr); - - block = buf_page_get(space->id, - dict_tf_get_zip_size(flags), - 0, RW_S_LATCH, &mtr); - header = FSP_HEADER_OFFSET + buf_block_get_frame(block); - - size = mtr_read_ulint(header + FSP_SIZE, MLOG_4BYTES, - &mtr); - - mtr_commit(&mtr); - - fil_extend_space_to_desired_size(&actual_size, space->id, size); - } - - datafiles_iter_free(it); - - } /* if (xtrabackup_incremental) */ - if (xtrabackup_export) { - msg("xtrabackup: export option is specified.\n"); + msg("mariabackup: export option is specified.\n"); pfs_os_file_t info_file; char info_file_path[FN_REFLEN]; ibool success; @@ -5843,7 +5851,7 @@ it = datafiles_iter_new(fil_system); if (it == NULL) { - msg("xtrabackup: Error: datafiles_iter_new() " + msg("mariabackup: Error: datafiles_iter_new() " "failed.\n"); exit(EXIT_FAILURE); } @@ -5890,7 +5898,7 @@ table = dict_table_get_low(table_name); if (!table) { - msg("xtrabackup: error: " + msg("mariabackup: error: " "cannot find dictionary " "record of table %s\n", table_name); @@ -5905,7 +5913,7 @@ index = dict_table_get_first_index(table); n_index = UT_LIST_GET_LEN(table->indexes); if (n_index > 31) { - msg("xtrabackup: warning: table '%s' has more " + msg("mariabackup: warning: table '%s' has more " "than 31 indexes, .exp file was not " "generated. Table will fail to import " "on server version prior to 5.6.\n", @@ -5921,7 +5929,7 @@ strncpy((char *) page + 12, table_name, 500); - msg("xtrabackup: export metadata of " + msg("mariabackup: export metadata of " "table '%s' to file `%s` " "(%lu indexes)\n", table_name, info_file_path, @@ -5935,7 +5943,7 @@ strncpy((char *) page + n_index * 512 + 12, index->name, 500); - msg("xtrabackup: name=%s, " + msg("mariabackup: name=%s, " "id.low=%lu, page=%lu\n", index->name, (ulint)(index->id & @@ -5999,17 +6007,17 @@ && srv_start_lsn < incremental_to_lsn) ||(!xtrabackup_incremental && srv_start_lsn < metadata_to_lsn)) { - msg("xtrabackup: error: " + msg("mariabackup: error: " "The transaction log file is corrupted.\n" - "xtrabackup: error: " + "mariabackup: error: " "The log was not applied to the intended LSN!\n"); - msg("xtrabackup: Log applied to lsn " LSN_PF "\n", + msg("mariabackup: Log applied to lsn " LSN_PF "\n", srv_start_lsn); if (xtrabackup_incremental) { - msg("xtrabackup: The intended lsn is " LSN_PF "\n", + msg("mariabackup: The intended lsn is " LSN_PF "\n", incremental_to_lsn); } else { - msg("xtrabackup: The intended lsn is " LSN_PF "\n", + msg("mariabackup: The intended lsn is " LSN_PF "\n", metadata_to_lsn); } exit(EXIT_FAILURE); @@ -6050,7 +6058,7 @@ sprintf(filename, "%s/%s", xtrabackup_target_dir, XTRABACKUP_METADATA_FILENAME); if (!xtrabackup_write_metadata(filename)) { - msg("xtrabackup: Error: failed to write metadata " + msg("mariabackup: Error: failed to write metadata " "to '%s'\n", filename); exit(EXIT_FAILURE); } @@ -6058,7 +6066,7 @@ if(xtrabackup_extra_lsndir) { sprintf(filename, "%s/%s", xtrabackup_extra_lsndir, XTRABACKUP_METADATA_FILENAME); if (!xtrabackup_write_metadata(filename)) { - msg("xtrabackup: Error: failed to write " + msg("mariabackup: Error: failed to write " "metadata to '%s'\n", filename); exit(EXIT_FAILURE); } @@ -6370,7 +6378,7 @@ if (optend - argv[i] == 15 && !strncmp(argv[i], "--defaults-file", optend - argv[i])) { - msg("xtrabackup: Error: --defaults-file " + msg("mariabackup: Error: --defaults-file " "must be specified first on the command " "line\n"); exit(EXIT_FAILURE); @@ -6379,7 +6387,7 @@ !strncmp(argv[i], "--defaults-extra-file", optend - argv[i])) { - msg("xtrabackup: Error: --defaults-extra-file " + msg("mariabackup: Error: --defaults-extra-file " "must be specified first on the command " "line\n"); exit(EXIT_FAILURE); @@ -6399,8 +6407,7 @@ for (n = 0; (*argv_client)[n]; n++) {}; argc_client = n; - if (strcmp(base_name(my_progname), INNOBACKUPEX_BIN_NAME) == 0 && - argc_client > 0) { + if (innobackupex_mode && argc_client > 0) { /* emulate innobackupex script */ innobackupex_mode = true; if (!ibx_handle_options(&argc_client, argv_client)) { @@ -6431,7 +6438,7 @@ } if (!server_option) { - msg("xtrabackup: Error:" + msg("mariabackup: Error:" " unknown argument: '%s'\n", opt); exit(EXIT_FAILURE); } @@ -6446,12 +6453,10 @@ { char **client_defaults, **server_defaults; char cwd[FN_REFLEN]; - static char INNOBACKUPEX_EXE[]= "innobackupex"; if (argc > 1 && (strcmp(argv[1], "--innobackupex") == 0)) { argv++; argc--; - argv[0] = INNOBACKUPEX_EXE; innobackupex_mode = true; } @@ -6476,6 +6481,11 @@ system_charset_info = &my_charset_utf8_general_ci; key_map_full.set_all(); + logger.init_base(); + logger.set_handlers(LOG_FILE, LOG_NONE, LOG_NONE); + mysql_mutex_init(key_LOCK_error_log, &LOCK_error_log, + MY_MUTEX_INIT_FAST); + handle_options(argc, argv, &client_defaults, &server_defaults); int argc_server; @@ -6494,7 +6504,7 @@ if ((!xtrabackup_print_param) && (!xtrabackup_prepare) && (strcmp(mysql_data_home, "./") == 0)) { if (!xtrabackup_print_param) usage(); - msg("\nxtrabackup: Error: Please set parameter 'datadir'\n"); + msg("\nmariabackup: Error: Please set parameter 'datadir'\n"); exit(EXIT_FAILURE); } @@ -6563,7 +6573,7 @@ error = 1; if (error) { - msg("xtrabackup: value '%s' may be wrong format for " + msg("mariabackup: value '%s' may be wrong format for " "incremental option.\n", xtrabackup_incremental); exit(EXIT_FAILURE); } @@ -6573,7 +6583,7 @@ sprintf(filename, "%s/%s", xtrabackup_incremental_basedir, XTRABACKUP_METADATA_FILENAME); if (!xtrabackup_read_metadata(filename)) { - msg("xtrabackup: error: failed to read metadata from " + msg("mariabackup: error: failed to read metadata from " "%s\n", filename); exit(EXIT_FAILURE); } @@ -6586,7 +6596,7 @@ sprintf(filename, "%s/%s", xtrabackup_incremental_dir, XTRABACKUP_METADATA_FILENAME); if (!xtrabackup_read_metadata(filename)) { - msg("xtrabackup: error: failed to read metadata from " + msg("mariabackup: error: failed to read metadata from " "%s\n", filename); exit(EXIT_FAILURE); } @@ -6623,7 +6633,7 @@ } if (xtrabackup_export && innobase_file_per_table == FALSE) { - msg("xtrabackup: auto-enabling --innodb-file-per-table due to " + msg("mariabackup: auto-enabling --innodb-file-per-table due to " "the --export option\n"); innobase_file_per_table = TRUE; } diff -Nru mariadb-10.1-10.1.25/extra/mariabackup/xtrabackup.h mariadb-10.1-10.1.30/extra/mariabackup/xtrabackup.h --- mariadb-10.1-10.1.25/extra/mariabackup/xtrabackup.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/mariabackup/xtrabackup.h 2017-12-21 15:48:45.000000000 +0000 @@ -55,6 +55,8 @@ extern char *xtrabackup_incremental_basedir; extern char *innobase_data_home_dir; extern char *innobase_buffer_pool_filename; +extern char *xb_plugin_dir; +extern uint opt_protocol; extern ds_ctxt_t *ds_meta; extern ds_ctxt_t *ds_data; diff -Nru mariadb-10.1-10.1.25/extra/my_print_defaults.c mariadb-10.1-10.1.30/extra/my_print_defaults.c --- mariadb-10.1-10.1.25/extra/my_print_defaults.c 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/my_print_defaults.c 2017-12-21 15:48:45.000000000 +0000 @@ -98,18 +98,23 @@ {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; -void cleanup_and_exit(int exit_code) +static void cleanup_and_exit(int exit_code) __attribute__ ((noreturn)); +static void cleanup_and_exit(int exit_code) { my_end(0); exit(exit_code); } -static void usage(my_bool version) +static void version() { - printf("%s Ver 1.6 for %s at %s\n",my_progname,SYSTEM_TYPE, - MACHINE_TYPE); - if (version) - return; + printf("%s Ver 1.6 for %s at %s\n",my_progname,SYSTEM_TYPE, MACHINE_TYPE); +} + + +static void usage() __attribute__ ((noreturn)); +static void usage() +{ + version(); puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license\n"); puts("Prints all arguments that is give to some program using the default files"); printf("Usage: %s [OPTIONS] [groups]\n", my_progname); @@ -133,12 +138,13 @@ cleanup_and_exit(0); case 'I': case '?': - usage(0); + usage(); case 'v': verbose++; break; case 'V': - usage(1); + version(); + /* fall through */ case '#': DBUG_PUSH(argument ? argument : default_dbug_option); break; @@ -186,7 +192,7 @@ nargs+= array_elements(mysqld_groups); if (nargs < 2) - usage(0); + usage(); load_default_groups=(char**) my_malloc(nargs*sizeof(char*), MYF(MY_WME)); if (!load_default_groups) diff -Nru mariadb-10.1-10.1.25/extra/replace.c mariadb-10.1-10.1.30/extra/replace.c --- mariadb-10.1-10.1.25/extra/replace.c 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/replace.c 2017-12-21 15:48:45.000000000 +0000 @@ -174,7 +174,7 @@ break; case 'V': version=1; - /* fall through */ + /* fall through */ case 'I': case '?': help=1; /* Help text written */ diff -Nru mariadb-10.1-10.1.25/extra/yassl/CMakeLists.txt mariadb-10.1-10.1.30/extra/yassl/CMakeLists.txt --- mariadb-10.1-10.1.25/extra/yassl/CMakeLists.txt 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/yassl/CMakeLists.txt 2017-12-21 15:48:45.000000000 +0000 @@ -30,8 +30,3 @@ ADD_CONVENIENCE_LIBRARY(yassl ${YASSL_SOURCES}) RESTRICT_SYMBOL_EXPORTS(yassl) -IF(MSVC) - INSTALL_DEBUG_TARGET(yassl DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() - - diff -Nru mariadb-10.1-10.1.25/extra/yassl/include/openssl/ssl.h mariadb-10.1-10.1.30/extra/yassl/include/openssl/ssl.h --- mariadb-10.1-10.1.25/extra/yassl/include/openssl/ssl.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/yassl/include/openssl/ssl.h 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,6 @@ /* - Copyright (c) 2005, 2014, Oracle and/or its affiliates. + Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + Use is subject to license terms. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,7 +35,7 @@ #include "rsa.h" -#define YASSL_VERSION "2.4.2" +#define YASSL_VERSION "2.4.4" #if defined(__cplusplus) diff -Nru mariadb-10.1-10.1.25/extra/yassl/README mariadb-10.1-10.1.30/extra/yassl/README --- mariadb-10.1-10.1.25/extra/yassl/README 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/yassl/README 2017-12-21 15:48:45.000000000 +0000 @@ -12,6 +12,14 @@ *** end Note *** +yaSSL Release notes, version 2.4.4 (8/8/2017) + This release of yaSSL fixes an interop issue. A fix for detecting cipher + suites with non leading zeros is included as yaSSL only supports cipher + suites with leading zeros. Thanks for the report from Security Innovation + and Oracle. + + Users interoping with other SSL stacks should update. + yaSSL Release notes, version 2.4.2 (9/22/2016) This release of yaSSL fixes a medium security vulnerability. A fix for potential AES side channel leaks is included that a local user monitoring diff -Nru mariadb-10.1-10.1.25/extra/yassl/src/yassl_imp.cpp mariadb-10.1-10.1.30/extra/yassl/src/yassl_imp.cpp --- mariadb-10.1-10.1.25/extra/yassl/src/yassl_imp.cpp 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/yassl/src/yassl_imp.cpp 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2014, Oracle and/or its affiliates + Copyright (c) 2005, 2017, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1578,6 +1578,10 @@ ssl.SetError(badVersion_error); return; } + if (cipher_suite_[0] != 0x00) { + ssl.SetError(unknown_cipher); + return; + } ssl.set_pending(cipher_suite_[1]); ssl.set_random(random_, server_end); if (id_len_) diff -Nru mariadb-10.1-10.1.25/extra/yassl/src/yassl_int.cpp mariadb-10.1-10.1.30/extra/yassl/src/yassl_int.cpp --- mariadb-10.1-10.1.25/extra/yassl/src/yassl_int.cpp 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/yassl/src/yassl_int.cpp 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2014, Oracle and/or its affiliates + Copyright (c) 2005, 2017, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1399,12 +1399,17 @@ // start with best, if a match we are good, Ciphers are at odd index // since all SSL and TLS ciphers have 0x00 first byte for (uint i = 1; i < secure_.get_parms().suites_size_; i += 2) - for (uint j = 1; j < length; j+= 2) - if (secure_.use_parms().suites_[i] == peer[j]) { + for (uint j = 0; (j + 1) < length; j+= 2) { + if (peer[j] != 0x00) { + continue; // only 0x00 first byte supported + } + + if (secure_.use_parms().suites_[i] == peer[j + 1]) { secure_.use_parms().suite_[0] = 0x00; - secure_.use_parms().suite_[1] = peer[j]; + secure_.use_parms().suite_[1] = peer[j + 1]; return; } + } SetError(match_error); } @@ -2697,4 +2702,3 @@ yaSSL::sessionsInstance = 0; yaSSL::errorsInstance = 0; } - diff -Nru mariadb-10.1-10.1.25/extra/yassl/taocrypt/CMakeLists.txt mariadb-10.1-10.1.30/extra/yassl/taocrypt/CMakeLists.txt --- mariadb-10.1-10.1.25/extra/yassl/taocrypt/CMakeLists.txt 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/extra/yassl/taocrypt/CMakeLists.txt 2017-12-21 15:48:45.000000000 +0000 @@ -32,7 +32,3 @@ ADD_CONVENIENCE_LIBRARY(taocrypt ${TAOCRYPT_SOURCES}) RESTRICT_SYMBOL_EXPORTS(taocrypt) -IF(MSVC) - INSTALL_DEBUG_TARGET(taocrypt DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() - diff -Nru mariadb-10.1-10.1.25/include/ma_dyncol.h mariadb-10.1-10.1.30/include/ma_dyncol.h --- mariadb-10.1-10.1.25/include/ma_dyncol.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/ma_dyncol.h 2017-12-21 15:48:45.000000000 +0000 @@ -63,6 +63,12 @@ /* NO and OK is the same used just to show semantics */ #define ER_DYNCOL_NO ER_DYNCOL_OK +#ifdef HAVE_CHARSET_utf8mb4 +#define DYNCOL_UTF (&my_charset_utf8mb4_general_ci) +#else +#define DYNCOL_UTF (&my_charset_utf8_general_ci) +#endif + enum enum_dyncol_func_result { ER_DYNCOL_OK= 0, diff -Nru mariadb-10.1-10.1.25/include/m_string.h mariadb-10.1-10.1.30/include/m_string.h --- mariadb-10.1-10.1.25/include/m_string.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/m_string.h 2017-12-21 15:48:45.000000000 +0000 @@ -64,15 +64,6 @@ extern "C" { #endif -/* - my_str_malloc(), my_str_realloc() and my_str_free() are assigned to - implementations in strings/alloc.c, but can be overridden in - the calling program. - */ -extern void *(*my_str_malloc)(size_t); -extern void *(*my_str_realloc)(void *, size_t); -extern void (*my_str_free)(void *); - #ifdef DBUG_OFF #if defined(HAVE_STPCPY) && MY_GNUC_PREREQ(3, 4) && !defined(__INTEL_COMPILER) #define strmov(A,B) __builtin_stpcpy((A),(B)) diff -Nru mariadb-10.1-10.1.25/include/my_global.h mariadb-10.1-10.1.30/include/my_global.h --- mariadb-10.1-10.1.25/include/my_global.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/my_global.h 2017-12-21 15:48:45.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (c) 2001, 2013, Oracle and/or its affiliates. - Copyright (c) 2010, 2013, Monty Program Ab. + Copyright (c) 2009, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -439,9 +439,8 @@ #define SIGNAL_HANDLER_RESET_ON_DELIVERY #endif -#ifndef STDERR_FILENO -#define STDERR_FILENO fileno(stderr) -#endif +/* don't assume that STDERR_FILENO is 2, mysqld can freopen */ +#undef STDERR_FILENO #ifndef SO_EXT #ifdef _WIN32 diff -Nru mariadb-10.1-10.1.25/include/mysql.h.pp mariadb-10.1-10.1.30/include/mysql.h.pp --- mariadb-10.1-10.1.25/include/mysql.h.pp 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/mysql.h.pp 2017-12-21 15:48:45.000000000 +0000 @@ -221,8 +221,6 @@ extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); extern int find_type_with_warning(const char *x, TYPELIB *typelib, const char *option); -extern int find_type_or_exit(const char *x, TYPELIB *typelib, - const char *option); extern int find_type(const char *x, const TYPELIB *typelib, unsigned int flags); extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); extern const char *get_type(TYPELIB *typelib,unsigned int nr); diff -Nru mariadb-10.1-10.1.25/include/my_sys.h mariadb-10.1-10.1.30/include/my_sys.h --- mariadb-10.1-10.1.25/include/my_sys.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/my_sys.h 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2013, Oracle and/or its affiliates. - Copyright (c) 2010, 2016, Monty Program Ab. + Copyright (c) 2010, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/include/service_versions.h mariadb-10.1-10.1.30/include/service_versions.h --- mariadb-10.1-10.1.25/include/service_versions.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/service_versions.h 2017-12-21 15:48:45.000000000 +0000 @@ -36,7 +36,7 @@ #define VERSION_progress_report 0x0100 #define VERSION_thd_alloc 0x0100 #define VERSION_thd_autoinc 0x0100 -#define VERSION_thd_error_context 0x0100 +#define VERSION_thd_error_context 0x0200 #define VERSION_thd_rnd 0x0100 #define VERSION_thd_specifics 0x0100 #define VERSION_thd_timezone 0x0100 diff -Nru mariadb-10.1-10.1.25/include/typelib.h mariadb-10.1-10.1.30/include/typelib.h --- mariadb-10.1-10.1.25/include/typelib.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/typelib.h 2017-12-21 15:48:45.000000000 +0000 @@ -29,8 +29,6 @@ extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); extern int find_type_with_warning(const char *x, TYPELIB *typelib, const char *option); -extern int find_type_or_exit(const char *x, TYPELIB *typelib, - const char *option); #define FIND_TYPE_BASIC 0 /** makes @c find_type() require the whole name, no prefix */ #define FIND_TYPE_NO_PREFIX (1 << 0) diff -Nru mariadb-10.1-10.1.25/include/wsrep.h mariadb-10.1-10.1.30/include/wsrep.h --- mariadb-10.1-10.1.25/include/wsrep.h 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/include/wsrep.h 2017-12-21 15:48:45.000000000 +0000 @@ -45,6 +45,10 @@ #define WSREP_WARN(...) WSREP_LOG(sql_print_warning, ##__VA_ARGS__) #define WSREP_ERROR(...) WSREP_LOG(sql_print_error, ##__VA_ARGS__) +#define WSREP_SYNC_WAIT(thd_, before_) \ + { if (WSREP_CLIENT(thd_) && \ + wsrep_sync_wait(thd_, before_)) goto error; } + #else #define IF_WSREP(A,B) B #define DBUG_ASSERT_IF_WSREP(A) @@ -55,6 +59,8 @@ #define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) #define WSREP_TO_ISOLATION_END #define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) -#endif +#define WSREP_SYNC_WAIT(thd_, before_) + +#endif /* WITH_WSREP */ -#endif /* WSERP_INCLUDED */ +#endif /* WSREP_INCLUDED */ diff -Nru mariadb-10.1-10.1.25/libmysql/CMakeLists.txt mariadb-10.1-10.1.30/libmysql/CMakeLists.txt --- mariadb-10.1-10.1.25/libmysql/CMakeLists.txt 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/libmysql/CMakeLists.txt 2017-12-21 15:48:45.000000000 +0000 @@ -391,6 +391,10 @@ *; }; + libmariadbclient_18 { + /* empty here. aliases are added above */ + }; + libmysqlclient_16 { /* empty here. aliases are added above */ }; @@ -399,16 +403,23 @@ SET (CLIENT_API_5_1_LIST) SET (CLIENT_API_5_1_ALIASES) + SET (DEBIAN9_ALIASES) FOREACH (f ${CLIENT_API_FUNCTIONS_5_1} ${CLIENT_API_5_1_EXTRA}) SET(CLIENT_API_5_1_LIST "${CLIENT_API_5_1_LIST}\t${f};\n") SET(CLIENT_API_5_1_ALIASES "${CLIENT_API_5_1_ALIASES}\"${f}@libmysqlclient_16\" = ${f};\n") + SET(DEBIAN9_ALIASES "${DEBIAN9_ALIASES}\"${f}@libmariadbclient_18\" = ${f};\n") ENDFOREACH() SET (CLIENT_API_5_5_LIST) FOREACH (f ${CLIENT_API_FUNCTIONS_5_5} ${CLIENT_API_5_5_EXTRA}) SET(CLIENT_API_5_5_LIST "${CLIENT_API_5_5_LIST}\t${f};\n") + SET(DEBIAN9_ALIASES "${DEBIAN9_ALIASES}\"${f}@libmariadbclient_18\" = ${f};\n") ENDFOREACH() + IF(NOT DEB) + SET (DEBIAN9_ALIASES) + ENDIF() + ELSE (NOT DISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING) SET (CLIENT_API_5_1_ALIASES "/* Versioning disabled per user request. MDEV-5982 */") ENDIF (NOT DISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING) diff -Nru mariadb-10.1-10.1.25/libmysql/libmysql.c mariadb-10.1-10.1.30/libmysql/libmysql.c --- mariadb-10.1-10.1.25/libmysql/libmysql.c 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/libmysql/libmysql.c 2017-12-21 15:48:45.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. - Copyright (c) 2009, 2014, SkySQL Ab. +/* Copyright (c) 2000, 2014, Oracle and/or its affiliates + Copyright (c) 2009, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -4919,4 +4919,3 @@ { return net_field_length(packet); } - diff -Nru mariadb-10.1-10.1.25/libmysql/libmysql_versions.ld.in mariadb-10.1-10.1.30/libmysql/libmysql_versions.ld.in --- mariadb-10.1-10.1.25/libmysql/libmysql_versions.ld.in 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/libmysql/libmysql_versions.ld.in 2017-12-21 15:48:45.000000000 +0000 @@ -16,6 +16,8 @@ @CLIENT_API_5_1_ALIASES@ +@DEBIAN9_ALIASES@ + /* On Fedora the following symbols are exported, but renamed into a mysql_ namespace. We export them as aliases, but keep original symbols too. See diff -Nru mariadb-10.1-10.1.25/libmysqld/CMakeLists.txt mariadb-10.1-10.1.30/libmysqld/CMakeLists.txt --- mariadb-10.1-10.1.25/libmysqld/CMakeLists.txt 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/libmysqld/CMakeLists.txt 2017-12-21 15:48:45.000000000 +0000 @@ -156,15 +156,6 @@ INSTALL(FILES embedded_priv.h DESTINATION ${INSTALL_INCLUDEDIR}/private COMPONENT ${COMPONENT_MYSQLSERVER}) -# Visual Studio users need debug static library -IF(MSVC) - INSTALL_DEBUG_TARGET(mysqlserver DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() - -IF(UNIX) - INSTALL_DEBUG_TARGET(mysqlserver DESTINATION ${INSTALL_LIBDIR} RENAME - ${CMAKE_STATIC_LIBRARY_PREFIX}mysqld-debug) -ENDIF() # List of exported functions in embedded (client api except client plugin or # async (*_start/*_cont functions) diff -Nru mariadb-10.1-10.1.25/libmysqld/libmysqld.c mariadb-10.1-10.1.30/libmysqld/libmysqld.c --- mariadb-10.1-10.1.25/libmysqld/libmysqld.c 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/libmysqld/libmysqld.c 2017-12-21 15:48:45.000000000 +0000 @@ -121,6 +121,9 @@ my_free(mysql->options.my_cnf_file); my_free(mysql->options.my_cnf_group); mysql->options.my_cnf_file=mysql->options.my_cnf_group=0; + + if (mysql->options.protocol == UINT_MAX32) + goto error; } if (!db || !db[0]) diff -Nru mariadb-10.1-10.1.25/libmysqld/lib_sql.cc mariadb-10.1-10.1.30/libmysqld/lib_sql.cc --- mariadb-10.1-10.1.25/libmysqld/lib_sql.cc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/libmysqld/lib_sql.cc 2017-12-21 15:48:45.000000000 +0000 @@ -140,8 +140,7 @@ } /* Clear result variables */ - thd->clear_error(); - thd->get_stmt_da()->reset_diagnostics_area(); + thd->clear_error(1); mysql->affected_rows= ~(my_ulonglong) 0; mysql->field_count= 0; net_clear_error(net); diff -Nru mariadb-10.1-10.1.25/man/mysql_upgrade.1 mariadb-10.1-10.1.30/man/mysql_upgrade.1 --- mariadb-10.1-10.1.25/man/mysql_upgrade.1 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/man/mysql_upgrade.1 2017-12-21 15:48:45.000000000 +0000 @@ -691,8 +691,7 @@ .sp Cause binary logging to be enabled while \fBmysql_upgrade\fR -runs\&. This is the default behavior; to disable binary logging during the upgrade, use the inverse of this option (that is, start the program with -\fB\-\-skip\-write\-binlog\fR)\&. +runs\&. .RE .SH "COPYRIGHT" .br diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc 2017-12-21 15:48:45.000000000 +0000 @@ -18,8 +18,8 @@ # and replication is started from it. # ---source include/master-slave.inc --source include/have_binlog_format_mixed.inc +--source include/master-slave.inc --connection slave # Make sure the slave is stopped while we are messing with master. diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_checksum.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_checksum.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_checksum.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_checksum.inc 2017-12-21 15:48:45.000000000 +0000 @@ -7,9 +7,9 @@ # WL2540 replication events checksum # Testing configuration parameters ---source include/master-slave.inc --source include/have_debug.inc --source include/have_binlog_format_mixed.inc +--source include/master-slave.inc call mtr.add_suppression('Slave can not handle replication events with the checksum that master is configured to log'); call mtr.add_suppression('Replication event checksum verification failed'); diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_incident.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_incident.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_incident.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_incident.inc 2017-12-21 15:48:45.000000000 +0000 @@ -4,8 +4,8 @@ # Please check all dependent tests after modifying it # ---source include/master-slave.inc --source include/have_debug.inc +--source include/master-slave.inc --echo **** On Master **** CREATE TABLE t1 (a INT); diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc 2017-12-21 15:48:45.000000000 +0000 @@ -35,8 +35,8 @@ # Configuring the Environment ###################################################################### source include/have_debug.inc; -source include/master-slave.inc; source include/have_log_bin.inc; +source include/master-slave.inc; connection slave; diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_loaddata.test mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_loaddata.test --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_loaddata.test 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_loaddata.test 2017-12-21 15:48:45.000000000 +0000 @@ -11,8 +11,8 @@ # check if START SLAVE, RESET SLAVE, CHANGE MASTER reset Last_slave_error and # Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986) --- source include/master-slave.inc source include/have_innodb.inc; +source include/master-slave.inc; --disable_query_log CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_log.test mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_log.test --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_log.test 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_log.test 2017-12-21 15:48:45.000000000 +0000 @@ -65,6 +65,8 @@ # To make it predictable, we do a useless update now, but which has the # interest of making the slave catch both rotate events. +let $skip_checkpoint_events=1; + eval create table t3 (a int)ENGINE=$engine_type; # Sync slave and force it to start on another binary log diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_packet.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_packet.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_packet.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_packet.inc 2017-12-21 15:48:45.000000000 +0000 @@ -15,8 +15,9 @@ # BUG#55322: SHOW BINLOG EVENTS increases @@SESSION.MAX_ALLOWED_PACKET # max-out size db name -source include/master-slave.inc; source include/have_binlog_format_row.inc; +source include/master-slave.inc; + call mtr.add_suppression("Slave I/O: Got a packet bigger than 'slave_max_allowed_packet' bytes, .*error.* 1153"); call mtr.add_suppression("Log entry on master is longer than slave_max_allowed_packet"); let $db= DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________; diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_skip_replication.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_skip_replication.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_skip_replication.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_skip_replication.inc 2017-12-21 15:48:45.000000000 +0000 @@ -16,8 +16,8 @@ # so if it is needed, it should be set explicitly before each call. # ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc connection slave; # Test that SUPER is required to change @@replicate_events_marked_for_skip. diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc 2017-12-21 15:48:45.000000000 +0000 @@ -25,8 +25,8 @@ # IO thread does not do it in an uncontrolled manner. --source include/have_binlog_format_statement.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc --disable_query_log CREATE TABLE t1 (c1 TEXT) engine=InnoDB; diff -Nru mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_sync.inc mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_sync.inc --- mariadb-10.1-10.1.25/mysql-test/extra/rpl_tests/rpl_sync.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/extra/rpl_tests/rpl_sync.inc 2017-12-21 15:48:45.000000000 +0000 @@ -32,12 +32,12 @@ # Configuring the environment ######################################################################################## --echo =====Configuring the enviroment=======; ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_valgrind.inc --source include/have_debug.inc --source include/have_innodb.inc --source include/not_crashrep.inc +--source include/master-slave.inc call mtr.add_suppression('Attempting backtrace'); call mtr.add_suppression("Recovery from master pos .* and file master-bin.000001"); diff -Nru mariadb-10.1-10.1.25/mysql-test/include/binlog_parallel_replication_marks.test mariadb-10.1-10.1.30/mysql-test/include/binlog_parallel_replication_marks.test --- mariadb-10.1-10.1.25/mysql-test/include/binlog_parallel_replication_marks.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/binlog_parallel_replication_marks.test 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,80 @@ +# Test the markings on GTID events (ddl, waited, trans, +# @@skip_parallel_replication) that are used to control parallel +# replication on the slave. + +--source include/have_innodb.inc + +RESET MASTER; +--source include/wait_for_binlog_checkpoint.inc + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +--let $binlog_pos1=query_get_value(SHOW MASTER STATUS, Position, 1) +/* GTID */ INSERT INTO t1 VALUES (1,0); +/* GTID */ BEGIN; +/* GTID */ INSERT INTO t1 VALUES (2,0); +/* GTID */ ALTER TABLE t1 ADD c INT; +/* GTID */ INSERT INTO t1 VALUES (3,0,0); +/* GTID */ COMMIT; +/* GTID */ BEGIN; +/* GTID */ UPDATE t1 SET b=1, c=1 WHERE a=2; +/* GTID */ CREATE TEMPORARY TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +/* GTID */ INSERT INTO t2 VALUES (4,10), (5,20); +/* GTID */ INSERT INTO t1 SELECT a, 2, b FROM t2; +/* GTID */ DROP TEMPORARY TABLE t2; +/* GTID */ INSERT INTO t1 VALUES (6, 3, 0); +/* GTID */ COMMIT; +/* GTID */ CREATE TEMPORARY TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ BEGIN; +/* GTID */ DELETE FROM t1 WHERE a=5; +/* GTID */ INSERT INTO t3 VALUES (7); +/* GTID */ INSERT INTO t1 SELECT a, 4, 0 FROM t3; +/* GTID */ UPDATE t1 SET c=1 WHERE a=7; +/* GTID */ DROP TEMPORARY TABLE t3; +/* GTID */ COMMIT; +/* GTID */ CREATE TEMPORARY TABLE t4 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ BEGIN; +/* GTID */ INSERT INTO t1 VALUES (8, 5, 0); +/* GTID */ ALTER TABLE t4 ADD b INT; +/* GTID */ INSERT INTO t1 VALUES (9, 5, 1); +/* GTID */ COMMIT; +connect (tmp_con,localhost,root,,); +/* GTID */ INSERT INTO t1 VALUES (10, 6, 0); +/* GTID */ BEGIN; +/* GTID */ CREATE TEMPORARY TABLE t5 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ INSERT INTO t1 VALUES (11, 7, 0); +/* GTID */ COMMIT; +--let $before_drop_pos=query_get_value(SHOW MASTER STATUS, Position, 1) +disconnect tmp_con; +connection default; + +# We need to wait for the implicit DROP TEMPORARY TABLE to be logged after +# tmp_con disconnect, otherwise we get sporadic test failures. +--let $wait_condition= SELECT variable_value > $before_drop_pos FROM information_schema.global_status WHERE variable_name = 'binlog_snapshot_position' +--source include/wait_condition.inc + +--let $binlog_pos2=query_get_value(SHOW MASTER STATUS, Position, 1) + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +FLUSH LOGS; + +--let $MYSQLD_DATADIR= `select @@datadir` +--let $file= $MYSQLTEST_VARDIR/tmp/binlog_parallel_replication_marks.out +--let OUTPUT_FILE=$file +exec $MYSQL_BINLOG --start_position=$binlog_pos1 --stop_position=$binlog_pos2 $MYSQLD_DATADIR/$binlog_file > $file; + +perl; +my $file= $ENV{'OUTPUT_FILE'}; +open F, "<", $file + or die "Unable to open file '$file': $!\n"; +while () { + s/^#\d+ +\d+:\d+:\d+ /# /; + s/GTID \d+-\d+-\d+/GTID #-#-#/; + s/end_log_pos \d+/end_log_pos #/; + s/table id \d+/table id #/; + s/mapped to number \d+/mapped to number #/; + print if /GTID|BEGIN|COMMIT|Table_map|Write_rows|Update_rows|Delete_rows|generated by server|40005 TEMPORARY/; +} +close F; +EOF + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/include/check-testcase.test mariadb-10.1-10.1.30/mysql-test/include/check-testcase.test --- mariadb-10.1-10.1.25/mysql-test/include/check-testcase.test 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/check-testcase.test 2017-12-21 15:48:45.000000000 +0000 @@ -79,6 +79,8 @@ let $datadir=`select @@datadir`; list_files $datadir mysql_upgrade_info; +list_files $datadir/test #sql*; +list_files $datadir/mysql #sql*; --enable_query_log diff -Nru mariadb-10.1-10.1.25/mysql-test/include/fail_start_mysqld.inc mariadb-10.1-10.1.30/mysql-test/include/fail_start_mysqld.inc --- mariadb-10.1-10.1.25/mysql-test/include/fail_start_mysqld.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/fail_start_mysqld.inc 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,18 @@ +# ==== Usage ==== +# +# [--let $restart_parameters= --innodb-force-recovery=0 --innodb-read-only=1] +# [--let $mysqld_stub_cmd= $MYSQLD_LAST_CMD] +# [--let $error_log= $MYSQLTEST_VARDIR/log/mysqld.1.err] +# --source include/fail_restart_mysqld.inc + +# Evaluate the default of $error_log +if (!$error_log) +{ + --let $error_log= $MYSQLTEST_VARDIR/log/mysqld.1.err +} + +--error 1 +--exec $mysqld_stub_cmd $restart_parameters >> $error_log 2>&1 + +# As the server is stopped +--disable_reconnect diff -Nru mariadb-10.1-10.1.25/mysql-test/include/filter_file.inc mariadb-10.1-10.1.30/mysql-test/include/filter_file.inc --- mariadb-10.1-10.1.25/mysql-test/include/filter_file.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/filter_file.inc 2017-12-21 15:48:45.000000000 +0000 @@ -53,6 +53,9 @@ # # $rpl_debug # If set, verbose debug info is printed. +# +# $filter_script +# If set, rows matching this regexp will be filtered out --let $include_filename= filter_file.inc --source include/begin_include_file.inc @@ -67,10 +70,12 @@ --let _FF_PRE_SCRIPT= $pre_script --let _FF_SCRIPT= $script +--let _FF_FILTER_SCRIPT= $filter_script --let _FF_INPUT_FILE= $input_file --let _FF_OUTPUT_FILE= $output_file --let _FF_SELECT_COLUMNS= $select_columns --let _FF_DEBUG= $rpl_debug + if (!$output_file) { --let _FF_OUTPUT_FILE= $input_file @@ -79,6 +84,7 @@ my $pre_script = $ENV{'_FF_PRE_SCRIPT'}; $pre_script =~ s/DOLLAR/\$/g; my $script = $ENV{'_FF_SCRIPT'}; + my $filter_script = $ENV{'_FF_FILTER_SCRIPT'}; $script =~ s/DOLLAR/\$/g; my $input_file = $ENV{'_FF_INPUT_FILE'}; my $output_file = $ENV{'_FF_OUTPUT_FILE'}; @@ -123,7 +129,10 @@ { ' . $script . ' } - $filtered_contents .= $_."\n"; + if (!$filter_script || ! m/$filter_script/) + { + $filtered_contents .= $_."\n"; + } } close FILE or die "Error closing $input_file: $!"; open FILE, "> $output_file" or die "Error opening $output_file: $!"; diff -Nru mariadb-10.1-10.1.25/mysql-test/include/galera_cluster.inc mariadb-10.1-10.1.30/mysql-test/include/galera_cluster.inc --- mariadb-10.1-10.1.25/mysql-test/include/galera_cluster.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/galera_cluster.inc 2017-12-21 15:48:45.000000000 +0000 @@ -8,3 +8,5 @@ --let $galera_cluster_size = 2 --source include/galera_init.inc + +--source include/have_innodb.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/include/have_debug.inc mariadb-10.1-10.1.30/mysql-test/include/have_debug.inc --- mariadb-10.1-10.1.25/mysql-test/include/have_debug.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/have_debug.inc 2017-12-21 15:48:45.000000000 +0000 @@ -2,8 +2,3 @@ # suite.pm will make sure that all tests including this file # will be skipped unless this is a debug build. # -# The test below is redundant - -if (`select version() not like '%debug%'`) { - --skip Needs a debug build -} diff -Nru mariadb-10.1-10.1.25/mysql-test/include/have_example_plugin.inc mariadb-10.1-10.1.30/mysql-test/include/have_example_plugin.inc --- mariadb-10.1-10.1.25/mysql-test/include/have_example_plugin.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/have_example_plugin.inc 2017-12-21 15:48:45.000000000 +0000 @@ -1,14 +1,4 @@ # -# Check if server has support for loading plugins +# suite.pm will make sure that all tests including this file +# will be skipped unless dynamic ha_example plugin is available # -if (`SELECT @@have_dynamic_loading != 'YES'`) { - --skip Example plugin requires dynamic loading -} - -# -# Check if the variable EXAMPLE_PLUGIN is set -# -if (!$HA_EXAMPLE_SO) { - --skip Need example plugin -} - diff -Nru mariadb-10.1-10.1.25/mysql-test/include/have_innodb.inc mariadb-10.1-10.1.30/mysql-test/include/have_innodb.inc --- mariadb-10.1-10.1.25/mysql-test/include/have_innodb.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/have_innodb.inc 2017-12-21 15:48:45.000000000 +0000 @@ -2,9 +2,3 @@ # suite.pm will make sure that all tests including this file # will be skipped unless innodb or xtradb is enabled # -# The test below is redundant - -if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' AND support IN ('YES', 'DEFAULT', 'ENABLED')`) -{ - --skip Test requires InnoDB. -} diff -Nru mariadb-10.1-10.1.25/mysql-test/include/have_xtradb.inc mariadb-10.1-10.1.30/mysql-test/include/have_xtradb.inc --- mariadb-10.1-10.1.25/mysql-test/include/have_xtradb.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/have_xtradb.inc 2017-12-21 15:48:45.000000000 +0000 @@ -2,10 +2,3 @@ # suite.pm will make sure that all tests including this file # will be skipped unless xtradb is enabled # -# The test below is redundant - -if (!`SELECT count(*) FROM information_schema.plugins WHERE - plugin_name = 'innodb' AND plugin_status = 'active' AND - plugin_description LIKE '%xtradb%'`){ - skip Needs XtraDB engine; -} diff -Nru mariadb-10.1-10.1.25/mysql-test/include/innodb_encrypt_log.combinations mariadb-10.1-10.1.30/mysql-test/include/innodb_encrypt_log.combinations --- mariadb-10.1-10.1.25/mysql-test/include/innodb_encrypt_log.combinations 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/innodb_encrypt_log.combinations 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,7 @@ +[crypt] +innodb_encrypt_log=ON +innodb_encryption_rotate_key_age=1 +plugin_load_add=$DEBUG_KEY_MANAGEMENT_SO + +[clear] +skip_innodb_encrypt_log diff -Nru mariadb-10.1-10.1.25/mysql-test/include/innodb_encrypt_log.inc mariadb-10.1-10.1.30/mysql-test/include/innodb_encrypt_log.inc --- mariadb-10.1-10.1.25/mysql-test/include/innodb_encrypt_log.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/innodb_encrypt_log.inc 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,4 @@ +# The goal of including this file is to enable innodb_encrypt_log combinations +# (see include/innodb_encrypt_log.combinations) + +--source include/have_innodb.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/include/innodb_undo_tablespaces.combinations mariadb-10.1-10.1.30/mysql-test/include/innodb_undo_tablespaces.combinations --- mariadb-10.1-10.1.25/mysql-test/include/innodb_undo_tablespaces.combinations 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/innodb_undo_tablespaces.combinations 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,5 @@ +[undo0] +innodb-undo-tablespaces=0 + +[undo3] +innodb-undo-tablespaces=3 diff -Nru mariadb-10.1-10.1.25/mysql-test/include/innodb_undo_tablespaces.inc mariadb-10.1-10.1.30/mysql-test/include/innodb_undo_tablespaces.inc --- mariadb-10.1-10.1.25/mysql-test/include/innodb_undo_tablespaces.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/innodb_undo_tablespaces.inc 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,3 @@ +# The goal of including this file is to enable innodb_undo_tablespaces combinations +# (see include/innodb_undo_tablespaces.combinations) + diff -Nru mariadb-10.1-10.1.25/mysql-test/include/not_embedded.inc mariadb-10.1-10.1.30/mysql-test/include/not_embedded.inc --- mariadb-10.1-10.1.25/mysql-test/include/not_embedded.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/not_embedded.inc 2017-12-21 15:48:45.000000000 +0000 @@ -2,9 +2,3 @@ # suite.pm will make sure that all tests including this file # will be skipped unless this is an embedded test run # -# The test below is redundant - -if (`select version() like '%embedded%'`) { - This should never happen; -} - diff -Nru mariadb-10.1-10.1.25/mysql-test/include/not_windows.inc mariadb-10.1-10.1.30/mysql-test/include/not_windows.inc --- mariadb-10.1-10.1.25/mysql-test/include/not_windows.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/not_windows.inc 2017-12-21 15:48:45.000000000 +0000 @@ -1,4 +1,4 @@ ---require r/not_windows.require -disable_query_log; -select convert(@@version_compile_os using latin1) NOT IN ("Win32","Win64","Windows") as "TRUE"; -enable_query_log; +# +# suite.pm will make sure that all tests including this file +# will be skipped unless this is on Windows +# diff -Nru mariadb-10.1-10.1.25/mysql-test/include/restart_mysqld.inc mariadb-10.1-10.1.30/mysql-test/include/restart_mysqld.inc --- mariadb-10.1-10.1.25/mysql-test/include/restart_mysqld.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/restart_mysqld.inc 2017-12-21 15:48:45.000000000 +0000 @@ -31,7 +31,7 @@ --exec echo "wait" > $_expect_file_name # Send shutdown to the connected server and give -# it 10 seconds to die before zapping it +# it an opted number of seconds to die before zapping it shutdown_server $server_shutdown_timeout; # Write file to make mysql-test-run.pl start up the server again @@ -50,6 +50,9 @@ # Call script that will poll the server waiting for it to be back online again --source include/wait_until_connected_again.inc +# Wait for wsrep +--source include/wait_wsrep_ready.inc + # Turn off reconnect again --disable_reconnect diff -Nru mariadb-10.1-10.1.25/mysql-test/include/search_pattern_in_file++.inc mariadb-10.1-10.1.30/mysql-test/include/search_pattern_in_file++.inc --- mariadb-10.1-10.1.25/mysql-test/include/search_pattern_in_file++.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/search_pattern_in_file++.inc 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,81 @@ +# Purpose: +# Simple search with Perl for a pattern in some file. +# +# The advantages compared to thinkable auxiliary constructs using the +# mysqltest language and SQL are: +# 1. We do not need a running MySQL server. +# 2. SQL causes "noise" during debugging and increases the size of logs. +# Perl code does not disturb at all. +# +# The environment variables SEARCH_FILE and SEARCH_PATTERN must be set +# before sourcing this routine. +# +# Optionally, SEARCH_RANGE can be set to the max number of bytes of the file +# to search. If negative, it will search that many bytes at the end of the +# file. By default the search happens from the last CURRENT_TEST: +# marker till the end of file (appropriate for searching error logs). +# +# Optionally, SEARCH_ABORT can be set to "FOUND" or "NOT FOUND" and this +# will abort if the search result doesn't match the requested one. +# +# In case of +# - SEARCH_FILE and/or SEARCH_PATTERN is not set +# - SEARCH_FILE cannot be opened +# the test will abort immediate. +# +# Typical use case (check invalid server startup options): +# let $error_log= $MYSQLTEST_VARDIR/log/my_restart.err; +# --error 0,1 +# --remove_file $error_log +# let SEARCH_FILE= $error_log; +# # Stop the server +# let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect; +# --exec echo "wait" > $restart_file +# --shutdown_server 10 +# --source include/wait_until_disconnected.inc +# +# --error 1 +# --exec $MYSQLD_CMD > $error_log 2>&1 +# # The server restart aborts +# let SEARCH_PATTERN= \[ERROR\] Aborting; +# --source include/search_pattern_in_file.inc +# +# Created: 2011-11-11 mleich +# + +perl; + use strict; + die "SEARCH_FILE not set" unless $ENV{SEARCH_FILE}; + my @search_files= glob($ENV{SEARCH_FILE}); + my $search_pattern= $ENV{SEARCH_PATTERN} or die "SEARCH_PATTERN not set"; + my $search_range= $ENV{SEARCH_RANGE}; + my $content; + foreach my $search_file (@search_files) { + open(FILE, '<', $search_file) || die("Can't open file $search_file: $!"); + my $file_content; + if ($search_range > 0) { + read(FILE, $file_content, $search_range, 0); + } elsif ($search_range < 0) { + my $size= -s $search_file; + $search_range = -$size if $size > -$search_range; + seek(FILE, $search_range, 2); + read(FILE, $file_content, -$search_range, 0); + } else { + while() { # error log + if (/^CURRENT_TEST:/) { + $content=''; + } else { + $content.=$_; + } + } + } + close(FILE); + $content.= $file_content; + } + my @matches=($content =~ m/$search_pattern/gs); + my $res=@matches ? "FOUND " . scalar(@matches) : "NOT FOUND"; + $ENV{SEARCH_FILE} =~ s{^.*?([^/\\]+)$}{$1}; + print "$res /$search_pattern/ in $ENV{SEARCH_FILE}\n"; + die "$ENV{SEARCH_ABORT}\n" + if $ENV{SEARCH_ABORT} && $res =~ /^$ENV{SEARCH_ABORT}/; +EOF diff -Nru mariadb-10.1-10.1.25/mysql-test/include/show_binlog_events.inc mariadb-10.1-10.1.30/mysql-test/include/show_binlog_events.inc --- mariadb-10.1-10.1.25/mysql-test/include/show_binlog_events.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/show_binlog_events.inc 2017-12-21 15:48:45.000000000 +0000 @@ -7,7 +7,7 @@ # [--let $binlog_file= [ | LAST]] # [--let $binlog_start= ] # [--let $binlog_limit= 1, 3 ] -# [--let $keep_gtid_events= 1] +# [--let $skip_checkpoint_events= 1] # --source include/show_binlog_events.inc # # Parameters: @@ -26,12 +26,6 @@ # Limit for the 'LIMIT' clause of SHOW BINLOG EVENTS, i.e.: # $binlog_limit= 3 -- print three events # $binlog_limit= 4, 3 -- skip four events, print the three next events -# -# $keep_gtid_events -# By default, Gtid_log_event and Previous_gtid_log_event are -# filtered out, so that the output is independent of whether GTIDs -# are enabled or not. If this flag is set, events are kept but -# the actual GTID values are masked out. --let $include_filename= show_binlog_events.inc --source include/begin_include_file.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/include/show_events.inc mariadb-10.1-10.1.30/mysql-test/include/show_events.inc --- mariadb-10.1-10.1.25/mysql-test/include/show_events.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/show_events.inc 2017-12-21 15:48:45.000000000 +0000 @@ -104,8 +104,15 @@ s{DOLLARmysqltest_vardir}{MYSQLTEST_VARDIR}g; || --let $pre_script= my DOLLARmysqltest_vardir = DOLLARENV{'MYSQLTEST_VARDIR'}; + --delimiter ; +if ($skip_checkpoint_events) +{ + let $filter_script=Binlog_checkpoint; +} + + #--let $select_columns= 1 3 6 --let $input_file= $output_file --source include/filter_file.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/include/show_gtid_list.inc mariadb-10.1-10.1.30/mysql-test/include/show_gtid_list.inc --- mariadb-10.1-10.1.25/mysql-test/include/show_gtid_list.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/show_gtid_list.inc 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,15 @@ +# ==== Purpose ==== +# +# Extract Gtid_list info from SHOW BINLOG EVENTS output masking +# non-deterministic fields. +# +# ==== Usage ==== +# +# [--let $binlog_file=filename +# +if ($binlog_file) +{ + --let $_in_binlog_file=in '$binlog_file' +} +--replace_column 2 # 5 # +--eval show binlog events $_in_binlog_file limit 1,1 diff -Nru mariadb-10.1-10.1.25/mysql-test/include/shutdown_mysqld.inc mariadb-10.1-10.1.30/mysql-test/include/shutdown_mysqld.inc --- mariadb-10.1-10.1.25/mysql-test/include/shutdown_mysqld.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/shutdown_mysqld.inc 2017-12-21 15:48:45.000000000 +0000 @@ -1,3 +1,17 @@ +# ==== Usage ==== +# +# [--let $shutdown_timeout= 30] +# [--let $allow_rpl_inited= 1] +# --source include/shutdown_mysqld.inc + +# The default value is empty +--let $server_shutdown_timeout= + +if ($shutdown_timeout) +{ + --let $server_shutdown_timeout= $shutdown_timeout +} + # This is the first half of include/restart_mysqld.inc. if ($rpl_inited) { @@ -13,6 +27,6 @@ --exec echo "wait" > $_expect_file_name # Send shutdown to the connected server ---shutdown_server +--shutdown_server $server_shutdown_timeout --source include/wait_until_disconnected.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/include/start_mysqld.inc mariadb-10.1-10.1.30/mysql-test/include/start_mysqld.inc --- mariadb-10.1-10.1.25/mysql-test/include/start_mysqld.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/start_mysqld.inc 2017-12-21 15:48:45.000000000 +0000 @@ -16,6 +16,9 @@ # Call script that will poll the server waiting for it to be back online again --source include/wait_until_connected_again.inc +# Wait for wsrep +--source include/wait_wsrep_ready.inc + # Turn off reconnect again --disable_reconnect diff -Nru mariadb-10.1-10.1.25/mysql-test/include/wait_for_slave_sql_error_and_skip.inc mariadb-10.1-10.1.30/mysql-test/include/wait_for_slave_sql_error_and_skip.inc --- mariadb-10.1-10.1.25/mysql-test/include/wait_for_slave_sql_error_and_skip.inc 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/wait_for_slave_sql_error_and_skip.inc 2017-12-21 15:48:45.000000000 +0000 @@ -66,6 +66,13 @@ } source include/start_slave.inc; +# start_slave.inc returns when Slave_SQL_Running=Yes. But the slave +# thread sets it before clearing Last_SQL_Errno. So we have to wait +# for Last_SQL_Errno=0 separately. + +let $slave_param= Last_SQL_Errno; +let $slave_param_value= 0; +source include/wait_for_slave_param.inc; --let $include_filename= wait_for_slave_sql_error_and_skip.inc [errno=$slave_sql_errno] --source include/end_include_file.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/include/wait_wsrep_ready.inc mariadb-10.1-10.1.30/mysql-test/include/wait_wsrep_ready.inc --- mariadb-10.1-10.1.25/mysql-test/include/wait_wsrep_ready.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/include/wait_wsrep_ready.inc 2017-12-21 15:48:45.000000000 +0000 @@ -0,0 +1,18 @@ +# +# If the wsrep plugin is loaded, wait until the wsrep provider becomes +# ready for use. +# + +--disable_query_log +--disable_result_log + +if (`SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'wsrep' AND PLUGIN_STATUS='ACTIVE'`) +{ + if (`SELECT @@GLOBAL.WSREP_ON`) + { + --source include/galera_wait_ready.inc + } +} + +--enable_query_log +--enable_result_log diff -Nru mariadb-10.1-10.1.25/mysql-test/mysql-test-run.pl mariadb-10.1-10.1.30/mysql-test/mysql-test-run.pl --- mariadb-10.1-10.1.25/mysql-test/mysql-test-run.pl 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/mysql-test-run.pl 2017-12-21 15:48:46.000000000 +0000 @@ -2,7 +2,7 @@ # -*- cperl -*- # Copyright (c) 2004, 2014, Oracle and/or its affiliates. -# Copyright (c) 2009, 2014, Monty Program Ab +# Copyright (c) 2009, 2017, MariaDB Corporation # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -195,6 +195,7 @@ unit- vcol- wsrep- + galera- ); my $opt_suites; @@ -741,8 +742,7 @@ # Repeat test $opt_repeat number of times my $repeat= $result->{repeat} || 1; - # Don't repeat if test was skipped - if ($repeat < $opt_repeat && $result->{'result'} ne 'MTR_RES_SKIPPED') + if ($repeat < $opt_repeat) { $result->{retries}= 0; $result->{rep_failures}++ if $result->{failures}; @@ -1267,10 +1267,6 @@ fix_vs_config_dir(); - # Respect MTR_BINDIR variable, which is typically set in to the - # build directory in out-of-source builds. - $bindir=$ENV{MTR_BINDIR}||$basedir; - # Look for the client binaries directory if ($path_client_bindir) { @@ -2821,7 +2817,7 @@ # Some InnoDB options are incompatible with the default bootstrap. # If they are used, re-bootstrap if ( $extra_opts and - "@$extra_opts" =~ /--innodb[-_](?:page[-_]size|checksum[-_]algorithm|undo[-_]tablespaces|log[-_]group[-_]home[-_]dir|data[-_]home[-_]dir)/ ) + "@$extra_opts" =~ /--innodb[-_](?:page[-_]size|checksum[-_]algorithm|undo[-_]tablespaces|log[-_]group[-_]home[-_]dir|data[-_]home[-_]dir)|data[-_]file[-_]path/ ) { mysql_install_db($mysqld, undef, $extra_opts); } @@ -3109,14 +3105,16 @@ mtr_add_arg($args, "--bootstrap"); mtr_add_arg($args, "--basedir=%s", $install_basedir); mtr_add_arg($args, "--datadir=%s", $install_datadir); + mtr_add_arg($args, "--plugin-dir=%s", $plugindir); mtr_add_arg($args, "--default-storage-engine=myisam"); - mtr_add_arg($args, "--skip-plugin-$_") for @optional_plugins; + mtr_add_arg($args, "--loose-skip-plugin-$_") for @optional_plugins; # starting from 10.0 bootstrap scripts require InnoDB mtr_add_arg($args, "--loose-innodb"); mtr_add_arg($args, "--loose-innodb-log-file-size=5M"); mtr_add_arg($args, "--disable-sync-frm"); mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/"); mtr_add_arg($args, "--core-file"); + mtr_add_arg($args, "--console"); if ( $opt_debug ) { @@ -3135,13 +3133,6 @@ mtr_add_arg($args, $extra_opt); } } - # InnoDB options can come not only from the command line, but also - # from option files or combinations - foreach my $extra_opt ( @$extra_opts ) { - if ($extra_opt =~ /--innodb/) { - mtr_add_arg($args, $extra_opt); - } - } # If DISABLE_GRANT_OPTIONS is defined when the server is compiled (e.g., # configure --disable-grant-options), mysqld will not recognize the @@ -3156,97 +3147,107 @@ # ---------------------------------------------------------------------- $ENV{'MYSQLD_BOOTSTRAP_CMD'}= "$exe_mysqld_bootstrap " . join(" ", @$args); - + # Extra options can come not only from the command line, but also + # from option files or combinations. We want them on a command line + # that is executed now, because otherwise the datadir might be + # incompatible with the test settings, but not on the general + # $MYSQLD_BOOTSTRAP_CMD line + foreach my $extra_opt ( @$extra_opts ) { + mtr_add_arg($args, $extra_opt); + } # ---------------------------------------------------------------------- # Create the bootstrap.sql file # ---------------------------------------------------------------------- - my $bootstrap_sql_file= "$opt_vardir/tmp/bootstrap.sql"; + my $bootstrap_sql_file= "$opt_vardir/log/bootstrap.sql"; - if ($opt_boot_gdb) { - gdb_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), - $bootstrap_sql_file); - } - if ($opt_boot_dbx) { - dbx_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), - $bootstrap_sql_file); - } - if ($opt_boot_ddd) { - ddd_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), - $bootstrap_sql_file); - } - - my $path_sql= my_find_file($install_basedir, - ["mysql", "sql/share", "share/mariadb", - "share/mysql", "share", "scripts"], - "mysql_system_tables.sql", - NOT_REQUIRED); - - if (-f $path_sql ) - { - my $sql_dir= dirname($path_sql); - # Use the mysql database for system tables - mtr_tofile($bootstrap_sql_file, "use mysql;\n"); - - # Add the offical mysql system tables - # for a production system - mtr_appendfile_to_file("$sql_dir/mysql_system_tables.sql", - $bootstrap_sql_file); - - # Add the performance tables - # for a production system - mtr_appendfile_to_file("$sql_dir/mysql_performance_tables.sql", - $bootstrap_sql_file); - - # Add the mysql system tables initial data - # for a production system - mtr_appendfile_to_file("$sql_dir/mysql_system_tables_data.sql", - $bootstrap_sql_file); - - # Add test data for timezone - this is just a subset, on a real - # system these tables will be populated either by mysql_tzinfo_to_sql - # or by downloading the timezone table package from our website - mtr_appendfile_to_file("$sql_dir/mysql_test_data_timezone.sql", - $bootstrap_sql_file); - - # Fill help tables, just an empty file when running from bk repo - # but will be replaced by a real fill_help_tables.sql when - # building the source dist - mtr_appendfile_to_file("$sql_dir/fill_help_tables.sql", - $bootstrap_sql_file); - - # mysql.gtid_slave_pos was created in InnoDB, but many tests - # run without InnoDB. Alter it to MyISAM now - mtr_tofile($bootstrap_sql_file, "ALTER TABLE gtid_slave_pos ENGINE=MyISAM;\n"); - } - else + if (! -e $bootstrap_sql_file) { - # Install db from init_db.sql that exist in early 5.1 and 5.0 - # versions of MySQL - my $init_file= "$install_basedir/mysql-test/lib/init_db.sql"; - mtr_report(" - from '$init_file'"); - my $text= mtr_grab_file($init_file) or - mtr_error("Can't open '$init_file': $!"); + if ($opt_boot_gdb) { + gdb_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), + $bootstrap_sql_file); + } + if ($opt_boot_dbx) { + dbx_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), + $bootstrap_sql_file); + } + if ($opt_boot_ddd) { + ddd_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), + $bootstrap_sql_file); + } + + my $path_sql= my_find_file($install_basedir, + ["mysql", "sql/share", "share/mariadb", + "share/mysql", "share", "scripts"], + "mysql_system_tables.sql", + NOT_REQUIRED); + + if (-f $path_sql ) + { + my $sql_dir= dirname($path_sql); + # Use the mysql database for system tables + mtr_tofile($bootstrap_sql_file, "use mysql;\n"); + + # Add the offical mysql system tables + # for a production system + mtr_appendfile_to_file("$sql_dir/mysql_system_tables.sql", + $bootstrap_sql_file); + + # Add the performance tables + # for a production system + mtr_appendfile_to_file("$sql_dir/mysql_performance_tables.sql", + $bootstrap_sql_file); + + # Add the mysql system tables initial data + # for a production system + mtr_appendfile_to_file("$sql_dir/mysql_system_tables_data.sql", + $bootstrap_sql_file); + + # Add test data for timezone - this is just a subset, on a real + # system these tables will be populated either by mysql_tzinfo_to_sql + # or by downloading the timezone table package from our website + mtr_appendfile_to_file("$sql_dir/mysql_test_data_timezone.sql", + $bootstrap_sql_file); + + # Fill help tables, just an empty file when running from bk repo + # but will be replaced by a real fill_help_tables.sql when + # building the source dist + mtr_appendfile_to_file("$sql_dir/fill_help_tables.sql", + $bootstrap_sql_file); + + # mysql.gtid_slave_pos was created in InnoDB, but many tests + # run without InnoDB. Alter it to MyISAM now + mtr_tofile($bootstrap_sql_file, "ALTER TABLE gtid_slave_pos ENGINE=MyISAM;\n"); + } + else + { + # Install db from init_db.sql that exist in early 5.1 and 5.0 + # versions of MySQL + my $init_file= "$install_basedir/mysql-test/lib/init_db.sql"; + mtr_report(" - from '$init_file'"); + my $text= mtr_grab_file($init_file) or + mtr_error("Can't open '$init_file': $!"); - mtr_tofile($bootstrap_sql_file, - sql_to_bootstrap($text)); - } + mtr_tofile($bootstrap_sql_file, + sql_to_bootstrap($text)); + } - # Remove anonymous users - mtr_tofile($bootstrap_sql_file, - "DELETE FROM mysql.user where user= '';\n"); + # Remove anonymous users + mtr_tofile($bootstrap_sql_file, + "DELETE FROM mysql.user where user= '';\n"); - # Create mtr database - mtr_tofile($bootstrap_sql_file, - "CREATE DATABASE mtr CHARSET=latin1;\n"); + # Create mtr database + mtr_tofile($bootstrap_sql_file, + "CREATE DATABASE mtr CHARSET=latin1;\n"); - # Add help tables and data for warning detection and supression - mtr_tofile($bootstrap_sql_file, - sql_to_bootstrap(mtr_grab_file("include/mtr_warnings.sql"))); + # Add help tables and data for warning detection and supression + mtr_tofile($bootstrap_sql_file, + sql_to_bootstrap(mtr_grab_file("include/mtr_warnings.sql"))); - # Add procedures for checking server is restored after testcase - mtr_tofile($bootstrap_sql_file, - sql_to_bootstrap(mtr_grab_file("include/mtr_check.sql"))); + # Add procedures for checking server is restored after testcase + mtr_tofile($bootstrap_sql_file, + sql_to_bootstrap(mtr_grab_file("include/mtr_check.sql"))); + } # Log bootstrap command my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log"; @@ -5075,6 +5076,11 @@ } } + # "Dynamic" version of MYSQLD_CMD is reevaluated with each mysqld_start. + # Use it to restart the server at testing a failing server start (e.g + # due to incompatible options). + $ENV{'MYSQLD_LAST_CMD'}= "$exe @$args"; + if ( $opt_gdb || $opt_manual_gdb ) { gdb_arguments(\$args, \$exe, $mysqld->name()); @@ -5811,7 +5817,7 @@ $$exe= $debugger; } - elsif ( $debugger =~ /windbg/ ) + elsif ( $debugger =~ /windbg|vsjitdebugger/ ) { # windbg exe arg1 .. argn diff -Nru mariadb-10.1-10.1.25/mysql-test/r/alter_table.result mariadb-10.1-10.1.30/mysql-test/r/alter_table.result --- mariadb-10.1-10.1.25/mysql-test/r/alter_table.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/alter_table.result 2017-12-21 15:48:46.000000000 +0000 @@ -1359,6 +1359,58 @@ execute stmt1; deallocate prepare stmt1; drop table t2; +# +# MDEV-8960 Can't refer the same column twice in one ALTER TABLE +# +CREATE TABLE t1 ( +`a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL, +ALTER COLUMN `consultant_id` DROP DEFAULT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `consultant_id` int(11) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +DROP TABLE t1; +CREATE TABLE t1 ( +`a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL, +ALTER COLUMN `consultant_id` SET DEFAULT 2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `consultant_id` int(11) NOT NULL DEFAULT '2' +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +DROP TABLE t1; +CREATE TABLE t1 ( +`a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2, +ALTER COLUMN `consultant_id` DROP DEFAULT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `consultant_id` int(11) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +DROP TABLE t1; +CREATE TABLE t1 ( +`a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2, +ALTER COLUMN `consultant_id` DROP DEFAULT, +MODIFY COLUMN `consultant_id` BIGINT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `consultant_id` bigint(20) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +DROP TABLE t1; CREATE TABLE t1 ( id INT(11) NOT NULL, x_param INT(11) DEFAULT NULL, @@ -2122,7 +2174,7 @@ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 DROP TABLE t1; # -# Start of 10.1 tests +# End of 10.0 tests # # # MDEV-7374 : Losing connection to MySQL while running ALTER TABLE @@ -2145,3 +2197,6 @@ KEY `i1` (`a`) COMMENT 'comment2' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; +# +# End of 10.1 tests +# diff -Nru mariadb-10.1-10.1.25/mysql-test/r/binary_to_hex.result mariadb-10.1-10.1.30/mysql-test/r/binary_to_hex.result --- mariadb-10.1-10.1.25/mysql-test/r/binary_to_hex.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/binary_to_hex.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,117 @@ +USE test; +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 (c1 TINYBLOB, +c2 BLOB, +c3 MEDIUMBLOB, +c4 LONGBLOB, +c5 TEXT, +c6 BIT(1), +c7 CHAR, +c8 VARCHAR(10), +c9 GEOMETRY) CHARACTER SET = binary; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` tinyblob, + `c2` blob, + `c3` mediumblob, + `c4` longblob, + `c5` blob, + `c6` bit(1) DEFAULT NULL, + `c7` binary(1) DEFAULT NULL, + `c8` varbinary(10) DEFAULT NULL, + `c9` geometry DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=binary +INSERT INTO t1 VALUES ('tinyblob-text readable', 'blob-text readable', +'mediumblob-text readable', 'longblob-text readable', +'text readable', b'1', 'c', 'variable', +POINT(1, 1)); +CREATE TABLE t2(id int, `col1` binary(10),`col2` blob); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `id` int(11) DEFAULT NULL, + `col1` binary(10) DEFAULT NULL, + `col2` blob +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t2 VALUES (1, X'AB1234', X'123ABC'), (2, X'DE1234', X'123DEF'); +#Print the table contents when binary-as-hex option is off. +SELECT * FROM t1; +c1 c2 c3 c4 c5 c6 c7 c8 c9 +tinyblob-text readable blob-text readable mediumblob-text readable longblob-text readable text readable # c variable # +SELECT * FROM t2; +id col1 col2 +1 # # +2 # # +#Print the table contents after turning on the binary-as-hex option + +#Print the table contents in tab format + +c1 c2 c3 c4 c5 c6 c7 c8 c9 +0x74696E79626C6F622D74657874207265616461626C65 0x626C6F622D74657874207265616461626C65 0x6D656469756D626C6F622D74657874207265616461626C65 0x6C6F6E67626C6F622D74657874207265616461626C65 0x74657874207265616461626C65 0x01 0x63 0x7661726961626C65 0x000000000101000000000000000000F03F000000000000F03F +id col1 col2 +1 0xAB123400000000000000 0x123ABC +2 0xDE123400000000000000 0x123DEF + +#Print the table contents in table format + ++------------------------------------------------+----------------------------------------+----------------------------------------------------+------------------------------------------------+------------------------------+------------+------------+--------------------+------------------------------------------------------+ +| c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c9 | ++------------------------------------------------+----------------------------------------+----------------------------------------------------+------------------------------------------------+------------------------------+------------+------------+--------------------+------------------------------------------------------+ +| 0x74696E79626C6F622D74657874207265616461626C65 | 0x626C6F622D74657874207265616461626C65 | 0x6D656469756D626C6F622D74657874207265616461626C65 | 0x6C6F6E67626C6F622D74657874207265616461626C65 | 0x74657874207265616461626C65 | 0x01 | 0x63 | 0x7661726961626C65 | 0x000000000101000000000000000000F03F000000000000F03F | ++------------------------------------------------+----------------------------------------+----------------------------------------------------+------------------------------------------------+------------------------------+------------+------------+--------------------+------------------------------------------------------+ ++------+------------------------+------------+ +| id | col1 | col2 | ++------+------------------------+------------+ +| 1 | 0xAB123400000000000000 | 0x123ABC | ++------+------------------------+------------+ + +#Print the table contents vertically + +*************************** 1. row *************************** +c1: 0x74696E79626C6F622D74657874207265616461626C65 +c2: 0x626C6F622D74657874207265616461626C65 +c3: 0x6D656469756D626C6F622D74657874207265616461626C65 +c4: 0x6C6F6E67626C6F622D74657874207265616461626C65 +c5: 0x74657874207265616461626C65 +c6: 0x01 +c7: 0x63 +c8: 0x7661726961626C65 +c9: 0x000000000101000000000000000000F03F000000000000F03F + +#Print the table contents in xml format + + + + + + 0x74696E79626C6F622D74657874207265616461626C65 + 0x626C6F622D74657874207265616461626C65 + 0x6D656469756D626C6F622D74657874207265616461626C65 + 0x6C6F6E67626C6F622D74657874207265616461626C65 + 0x74657874207265616461626C65 + 0x01 + 0x63 + 0x7661726961626C65 + 0x000000000101000000000000000000F03F000000000000F03F + + + + + + + 1 + 0xAB123400000000000000 + 0x123ABC + + + + 2 + 0xDE123400000000000000 + 0x123DEF + + + +#Print the table contents in html format + +
c1c2c3c4c5c6c7c8c9
0x74696E79626C6F622D74657874207265616461626C650x626C6F622D74657874207265616461626C650x6D656469756D626C6F622D74657874207265616461626C650x6C6F6E67626C6F622D74657874207265616461626C650x74657874207265616461626C650x010x630x7661726961626C650x000000000101000000000000000000F03F000000000000F03F
idcol1col2
10xAB1234000000000000000x123ABC
20xDE1234000000000000000x123DEF
DROP TABLE t1, t2; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/case.result mariadb-10.1-10.1.30/mysql-test/r/case.result --- mariadb-10.1-10.1.25/mysql-test/r/case.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/case.result 2017-12-21 15:48:46.000000000 +0000 @@ -220,6 +220,22 @@ 3 11120436154190595086 drop table t1, t2; End of 5.0 tests +# +# Bug#19875294 ASSERTION `SRC' FAILED IN MY_STRNXFRM_UNICODE +# (SIG 6 -STRINGS/CTYPE-UTF8.C:5151) +# +set @@sql_mode=''; +CREATE TABLE t1(c1 SET('','')CHARACTER SET ucs2); +Warnings: +Note 1291 Column 'c1' has duplicated value '' in SET +INSERT INTO t1 VALUES(990101.102); +Warnings: +Warning 1265 Data truncated for column 'c1' at row 1 +SELECT COALESCE(c1)FROM t1 ORDER BY 1; +COALESCE(c1) + +DROP TABLE t1; +set @@sql_mode=default; CREATE TABLE t1(a YEAR); SELECT 1 FROM t1 WHERE a=1 AND CASE 1 WHEN a THEN 1 ELSE 1 END; 1 diff -Nru mariadb-10.1-10.1.25/mysql-test/r/count_distinct.result mariadb-10.1-10.1.30/mysql-test/r/count_distinct.result --- mariadb-10.1-10.1.25/mysql-test/r/count_distinct.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/count_distinct.result 2017-12-21 15:48:46.000000000 +0000 @@ -94,3 +94,40 @@ 2 drop table t1; drop view v1; +create table t1 (user_id char(64) character set utf8); +insert t1 values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17); +set @@tmp_table_size = 1024; +select count(distinct user_id) from t1; +count(distinct user_id) +17 +alter table t1 modify user_id char(128) character set utf8; +select count(distinct user_id) from t1; +count(distinct user_id) +17 +drop table t1; +set @@tmp_table_size = default; +create table t1 ( +a VARCHAR(1020), +b int +); +insert into t1 values +( 0 , 1 ), +( 1 , 2 ), +( 2 , 3 ), +( 3 , 4 ), +( 4 , 5 ), +( 5 , 6 ), +( 6 , 7 ), +( 7 , 8 ), +( 8 , 9 ), +( 9 , 10 ), +( 0 , 11 ), +( 1 , 12 ), +( 2 , 13 ), +( 3 , 14 ); +set @@tmp_table_size=1024; +select count(distinct a) from t1; +count(distinct a) +10 +drop table t1; +set @@tmp_table_size = default; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_gbk.result mariadb-10.1-10.1.30/mysql-test/r/ctype_gbk.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_gbk.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_gbk.result 2017-12-21 15:48:46.000000000 +0000 @@ -5100,6 +5100,24 @@ DROP TABLE t1; # Start of ctype_E05C.inc # +# MDEV-9886 Illegal mix of collations with a view comparing a field to a binary constant +# +SET NAMES latin1; +CREATE TABLE t1 (a TEXT CHARACTER SET gbk); +INSERT INTO t1 VALUES (0xEE5D); +SELECT a<>0xEE5D AS a FROM t1; +a +0 +CREATE VIEW v1 AS SELECT a<>0xEE5D AS a FROM t1; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`a` <> 0xee5d) AS `a` from `t1` latin1 latin1_swedish_ci +SELECT * FROM v1; +a +0 +DROP VIEW v1; +DROP TABLE t1; +# # End of 10.0 tests # # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_latin1.result mariadb-10.1-10.1.30/mysql-test/r/ctype_latin1.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_latin1.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_latin1.result 2017-12-21 15:48:46.000000000 +0000 @@ -7972,6 +7972,24 @@ _latin1 0x7E _latin1 X'7E' _latin1 B'01111110' ~ ~ ~ # +# MDEV-9886 Illegal mix of collations with a view comparing a field to a binary constant +# +SET NAMES latin1; +CREATE TABLE t1 (a TEXT CHARACTER SET latin1); +INSERT INTO t1 VALUES (0xC0); +SELECT a<>0xEE5D AS a FROM t1; +a +1 +CREATE VIEW v1 AS SELECT a<>0xC0 AS a FROM t1; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`a` <> 0xc0) AS `a` from `t1` latin1 latin1_swedish_ci +SELECT * FROM v1; +a +0 +DROP VIEW v1; +DROP TABLE t1; +# # End of 10.0 tests # # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_ucs.result mariadb-10.1-10.1.30/mysql-test/r/ctype_ucs.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_ucs.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_ucs.result 2017-12-21 15:48:46.000000000 +0000 @@ -4586,6 +4586,36 @@ SET sql_mode=DEFAULT; SET NAMES utf8; # +# MDEV-13972 crash in Item_func_sec_to_time::get_date +# +SELECT SEC_TO_TIME(CONVERT(900*24*60*60 USING ucs2)); +SEC_TO_TIME(CONVERT(900*24*60*60 USING ucs2)) +838:59:59.999999 +Warnings: +Warning 1292 Truncated incorrect time value: '77760000' +# +# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +# +CREATE TABLE t1 (c1 VARCHAR(32766) CHARACTER SET ucs2); +DESCRIBE t1; +Field Type Null Key Default Extra +c1 varchar(32766) YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(32767) CHARACTER SET ucs2); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 text YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(32768) CHARACTER SET ucs2); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 mediumtext YES NULL +DROP TABLE t1; +# # End of 5.5 tests # # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_utf32.result mariadb-10.1-10.1.30/mysql-test/r/ctype_utf32.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_utf32.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_utf32.result 2017-12-21 15:48:46.000000000 +0000 @@ -1678,6 +1678,21 @@ SET sql_mode=DEFAULT; SET NAMES utf8; # +# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +# +CREATE TABLE t1 (c1 VARCHAR(16383) CHARACTER SET utf32); +DESCRIBE t1; +Field Type Null Key Default Extra +c1 varchar(16383) YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(16384) CHARACTER SET utf32); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 mediumtext YES NULL +DROP TABLE t1; +# # End of 5.5 tests # # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4_heap.result mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4_heap.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4_heap.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4_heap.result 2017-12-21 15:48:46.000000000 +0000 @@ -1802,7 +1802,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FD' select convert(char(0xff,0x8f) using utf8mb4); convert(char(0xff,0x8f) using utf8mb4) -NULL +?? Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF\x8F' select hex(convert(char(2557 using latin1) using utf8mb4)); @@ -1971,7 +1971,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FF' select hex(convert(0xFF using utf8mb4)); hex(convert(0xFF using utf8mb4)) -NULL +3F Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF' select hex(_utf8mb4 0x616263FF); diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4_innodb.result mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4_innodb.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4_innodb.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4_innodb.result 2017-12-21 15:48:46.000000000 +0000 @@ -1930,7 +1930,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FD' select convert(char(0xff,0x8f) using utf8mb4); convert(char(0xff,0x8f) using utf8mb4) -NULL +?? Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF\x8F' select hex(convert(char(2557 using latin1) using utf8mb4)); @@ -2099,7 +2099,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FF' select hex(convert(0xFF using utf8mb4)); hex(convert(0xFF using utf8mb4)) -NULL +3F Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF' select hex(_utf8mb4 0x616263FF); diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4_myisam.result mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4_myisam.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4_myisam.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4_myisam.result 2017-12-21 15:48:46.000000000 +0000 @@ -1930,7 +1930,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FD' select convert(char(0xff,0x8f) using utf8mb4); convert(char(0xff,0x8f) using utf8mb4) -NULL +?? Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF\x8F' select hex(convert(char(2557 using latin1) using utf8mb4)); @@ -2099,7 +2099,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FF' select hex(convert(0xFF using utf8mb4)); hex(convert(0xFF using utf8mb4)) -NULL +3F Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF' select hex(_utf8mb4 0x616263FF); diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4.result mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8mb4.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8mb4.result 2017-12-21 15:48:46.000000000 +0000 @@ -1970,7 +1970,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FD' select convert(char(0xff,0x8f) using utf8mb4); convert(char(0xff,0x8f) using utf8mb4) -NULL +?? Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF\x8F' select hex(convert(char(2557 using latin1) using utf8mb4)); @@ -2139,7 +2139,7 @@ Warning 1300 Invalid utf8mb4 character string: 'FF' select hex(convert(0xFF using utf8mb4)); hex(convert(0xFF using utf8mb4)) -NULL +3F Warnings: Warning 1300 Invalid utf8mb4 character string: '\xFF' select hex(_utf8mb4 0x616263FF); @@ -3421,6 +3421,32 @@ a 😁 b a ? b DROP TABLE t1; # +# MDEV-8949: COLUMN_CREATE unicode name breakage +# +SET NAMES utf8mb4; +SELECT COLUMN_JSON(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1)); +COLUMN_JSON(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1)) +{"😎":1} +SELECT COLUMN_LIST(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1)); +COLUMN_LIST(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1)) +`😎` +SELECT COLUMN_GET(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1), _utf8mb4 0xF09F988E +as int); +COLUMN_GET(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1), _utf8mb4 0xF09F988E +as int) +1 +CREATE TABLE t1 AS SELECT +COLUMN_LIST(COLUMN_CREATE('a',1)), +COLUMN_JSON(COLUMN_CREATE('b',1)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `COLUMN_LIST(COLUMN_CREATE('a',1))` longtext CHARACTER SET utf8mb4, + `COLUMN_JSON(COLUMN_CREATE('b',1))` longtext CHARACTER SET utf8mb4 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +SET NAMES default; +# # End of 10.0 tests # # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8.result mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8.result --- mariadb-10.1-10.1.25/mysql-test/r/ctype_utf8.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ctype_utf8.result 2017-12-21 15:48:46.000000000 +0000 @@ -1945,7 +1945,7 @@ Warning 1300 Invalid utf8 character string: 'FD' select convert(char(0xff,0x8f) using utf8); convert(char(0xff,0x8f) using utf8) -NULL +?? Warnings: Warning 1300 Invalid utf8 character string: '\xFF\x8F' select hex(convert(char(2557 using latin1) using utf8)); @@ -2114,7 +2114,7 @@ Warning 1300 Invalid utf8 character string: 'FF' select hex(convert(0xFF using utf8)); hex(convert(0xFF using utf8)) -NULL +3F Warnings: Warning 1300 Invalid utf8 character string: '\xFF' select hex(_utf8 0x616263FF); @@ -6274,6 +6274,28 @@ SET sql_mode=DEFAULT; DROP TABLE t1; # +# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +# +CREATE TABLE t1 (c1 VARCHAR(21844) CHARACTER SET utf8); +DESCRIBE t1; +Field Type Null Key Default Extra +c1 varchar(21844) YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(21845) CHARACTER SET utf8); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 text YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(21846) CHARACTER SET utf8); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 mediumtext YES NULL +DROP TABLE t1; +# # End of 5.5 tests # # @@ -10242,6 +10264,21 @@ DROP TABLE allbytes; # End of ctype_backslash.inc # +# MDEV-12681 Wrong VIEW results for CHAR(0xDF USING latin1) +# +SET NAMES utf8; +SELECT CHAR(0xDF USING latin1); +CHAR(0xDF USING latin1) +ß +CREATE OR REPLACE VIEW v1 AS SELECT CHAR(0xDF USING latin1) AS c; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select char(0xdf using latin1) AS `c` utf8 utf8_general_ci +SELECT * FROM v1; +c +ß +DROP VIEW v1; +# # End of 10.0 tests # # @@ -10473,5 +10510,30 @@ DROP PROCEDURE p1; SET @@SQL_MODE=default; # +# MDEV-10191 non convertible chars convert() resulted in Null instead "?" on Windows +# +SET sql_mode='STRICT_TRANS_TABLES'; +SELECT CONVERT(_utf8 0xC499 USING latin1); +CONVERT(_utf8 0xC499 USING latin1) +? +Warnings: +Warning 1977 Cannot convert 'utf8' character 0xC499 to 'latin1' +SELECT CAST(_utf8 0xC499 AS CHAR CHARACTER SET latin1); +CAST(_utf8 0xC499 AS CHAR CHARACTER SET latin1) +? +Warnings: +Warning 1977 Cannot convert 'utf8' character 0xC499 to 'latin1' +SET sql_mode=default; +SELECT CONVERT(_utf8 0xC499 USING latin1); +CONVERT(_utf8 0xC499 USING latin1) +? +Warnings: +Warning 1977 Cannot convert 'utf8' character 0xC499 to 'latin1' +SELECT CAST(_utf8 0xC499 AS CHAR CHARACTER SET latin1); +CAST(_utf8 0xC499 AS CHAR CHARACTER SET latin1) +? +Warnings: +Warning 1977 Cannot convert 'utf8' character 0xC499 to 'latin1' +# # End of 10.1 tests # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/delete_returning.result mariadb-10.1-10.1.30/mysql-test/r/delete_returning.result --- mariadb-10.1-10.1.25/mysql-test/r/delete_returning.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/delete_returning.result 2017-12-21 15:48:46.000000000 +0000 @@ -199,3 +199,15 @@ 2 DROP PROCEDURE p1; DROP TABLE t1; +# +# MDEV-13776: DELETE ... RETURNING with sql_mode='ONLY_FULL_GROUP_BY' +# +set @sql_mode_save= @@sql_mode; +set sql_mode='ONLY_FULL_GROUP_BY'; +CREATE TABLE t1 (id INT); +INSERT INTO t1 VALUE(1),(2),(3); +DELETE FROM t1 WHERE id > 2 RETURNING *; +id +3 +set sql_mode=@sql_mode_save; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/delimiter_command_case_sensitivity.result mariadb-10.1-10.1.30/mysql-test/r/delimiter_command_case_sensitivity.result --- mariadb-10.1-10.1.25/mysql-test/r/delimiter_command_case_sensitivity.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/delimiter_command_case_sensitivity.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,2 @@ +1 +1 diff -Nru mariadb-10.1-10.1.25/mysql-test/r/errors.result mariadb-10.1-10.1.30/mysql-test/r/errors.result --- mariadb-10.1-10.1.25/mysql-test/r/errors.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/errors.result 2017-12-21 15:48:46.000000000 +0000 @@ -27,7 +27,7 @@ ERROR 42000: Display width out of range for 'a' (max = 255) set sql_mode='traditional'; create table t1 (a varchar(66000)); -ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead +ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead set sql_mode=default; CREATE TABLE t1 (a INT); SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0))); @@ -168,7 +168,7 @@ WHERE COLUMN_CREATE( 1, 'v', 1, 'w' ) IS NULL; ERROR 22007: Illegal value used as argument of dynamic column function drop table t1; +set max_session_mem_used = 50000; +select * from seq_1_to_1000; set max_session_mem_used = 8192; select * from seq_1_to_1000; -Got one of the listed errors -set global max_session_mem_used = default; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/explain_json.result mariadb-10.1-10.1.30/mysql-test/r/explain_json.result --- mariadb-10.1-10.1.25/mysql-test/r/explain_json.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/explain_json.result 2017-12-21 15:48:46.000000000 +0000 @@ -1524,12 +1524,12 @@ "key_length": "5", "used_key_parts": ["a"], "ref": ["test.t3.a"], - "r_loops": 0, + "r_loops": 1, "rows": 1, - "r_rows": null, + "r_rows": 10, "r_total_time_ms": "REPLACED", "filtered": 100, - "r_filtered": null, + "r_filtered": 100, "index_condition_bka": "((t4.b + 1) <= (t3.b + 1))" }, "buffer_type": "flat", diff -Nru mariadb-10.1-10.1.25/mysql-test/r/func_in.result mariadb-10.1-10.1.30/mysql-test/r/func_in.result --- mariadb-10.1-10.1.25/mysql-test/r/func_in.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/func_in.result 2017-12-21 15:48:46.000000000 +0000 @@ -811,9 +811,17 @@ EXECUTE s; 1 DROP TABLE t1; +# # End of 5.3 tests # -# Start of 10.0 tests +create table t1 (a int); +insert t1 values (1),(2),(3); +select * from t1 where 1 in (a, name_const('a', null)); +a +1 +drop table t1; +# +# End of 5.5 tests # # # MDEV-10020 InnoDB NOT IN Query Crash When One Item Is NULL @@ -829,7 +837,7 @@ a b DROP TABLE t1; # -# Start of 10.1 tests +# End of 10.0 tests # # # MDEV-8755 Equal field propagation is not performed any longer for the IN list when multiple comparison types diff -Nru mariadb-10.1-10.1.25/mysql-test/r/func_misc.result mariadb-10.1-10.1.30/mysql-test/r/func_misc.result --- mariadb-10.1-10.1.25/mysql-test/r/func_misc.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/func_misc.result 2017-12-21 15:48:46.000000000 +0000 @@ -1429,3 +1429,34 @@ # -- Done. +# +# MDEV-13685 Can not replay binary log due to Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'concat' +# +SET NAMES utf8; +SELECT COERCIBILITY(NAME_CONST('name','test')); +COERCIBILITY(NAME_CONST('name','test')) +2 +SELECT COERCIBILITY(NAME_CONST('name',TIME'00:00:00')); +COERCIBILITY(NAME_CONST('name',TIME'00:00:00')) +5 +SELECT COERCIBILITY(NAME_CONST('name',15)); +COERCIBILITY(NAME_CONST('name',15)) +5 +SELECT CONCAT(NAME_CONST('name',15),'오'); +CONCAT(NAME_CONST('name',15),'오') +15오 +SET NAMES latin1; +# +# MDEV-14116 INET6_NTOA output is set as null to varchar(39) variable +# +CREATE PROCEDURE p1() +BEGIN +DECLARE ip_full_addr varchar(39) DEFAULT ""; +SELECT INET6_NTOA(UNHEX('20000000000000000000000000000000')) into ip_full_addr; +SELECT ip_full_addr; +END; +$$ +CALL p1(); +ip_full_addr +2000:: +DROP PROCEDURE p1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/func_regexp_pcre.result mariadb-10.1-10.1.30/mysql-test/r/func_regexp_pcre.result --- mariadb-10.1-10.1.25/mysql-test/r/func_regexp_pcre.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/func_regexp_pcre.result 2017-12-21 15:48:46.000000000 +0000 @@ -883,6 +883,38 @@ 1 Warnings: Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp +SELECT CONCAT(REPEAT('100,',60),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$'; +CONCAT(REPEAT('100,',60),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$' +1 +SELECT CONCAT(REPEAT('100,',200),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$'; +CONCAT(REPEAT('100,',200),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$' +0 +Warnings: +Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp +SELECT REGEXP_INSTR(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'); +REGEXP_INSTR(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$') +1 +SELECT REGEXP_INSTR(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'); +REGEXP_INSTR(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$') +0 +Warnings: +Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp +SELECT LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')); +LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')) +243 +SELECT LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')); +LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')) +0 +Warnings: +Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp +SELECT LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', '')); +LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', '')) +0 +SELECT LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', '')); +LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', '')) +803 +Warnings: +Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp SELECT REGEXP_INSTR('a_kollision', 'oll'); REGEXP_INSTR('a_kollision', 'oll') 4 diff -Nru mariadb-10.1-10.1.25/mysql-test/r/func_set.result mariadb-10.1-10.1.30/mysql-test/r/func_set.result --- mariadb-10.1-10.1.25/mysql-test/r/func_set.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/func_set.result 2017-12-21 15:48:46.000000000 +0000 @@ -221,21 +221,11 @@ DROP TABLE t1; # -# Start of 5.3 tests -# -# -# MDEV-4512 Valgrind warnings in my_long10_to_str_8bit on INTERVAL and DATE_ADD with incorrect types -# -CREATE TABLE t1 (pk INT PRIMARY KEY); -INSERT INTO t1 VALUES (10),(11); -SELECT INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 ) FROM t1; -INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 ) -8 -8 -Warnings: -Warning 1292 Incorrect datetime value: '10' for column 'pk' at row 1 -Warning 1292 Incorrect datetime value: '11' for column 'pk' at row 2 -DROP TABLE t1; -# -# End of 5.3 tests +# MDEV-14596 Crash in INTERVAL(ROW(..),ROW(..)) # +SELECT INTERVAL(ROW(1,1),ROW(1,2)); +ERROR 21000: Operand should contain 1 column(s) +SELECT INTERVAL(1,ROW(1,2)); +ERROR 21000: Operand should contain 1 column(s) +SELECT INTERVAL(ROW(1,2),1); +ERROR 21000: Operand should contain 1 column(s) diff -Nru mariadb-10.1-10.1.25/mysql-test/r/func_str.result mariadb-10.1-10.1.30/mysql-test/r/func_str.result --- mariadb-10.1-10.1.25/mysql-test/r/func_str.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/func_str.result 2017-12-21 15:48:46.000000000 +0000 @@ -4547,6 +4547,27 @@ # End of 5.6 tests # # +# Start of 10.0 tests +# +# +# MDEV-12681 Wrong VIEW results for CHAR(0xDF USING latin1) +# +EXPLAIN EXTENDED SELECT CHAR(0xDF USING latin1); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Note 1003 select char(0xdf using latin1) AS `CHAR(0xDF USING latin1)` +EXPLAIN EXTENDED SELECT CHAR(0xDF USING `binary`); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Note 1003 select char(0xdf) AS `CHAR(0xDF USING ``binary``)` +EXPLAIN EXTENDED SELECT CHAR(0xDF); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Note 1003 select char(0xdf) AS `CHAR(0xDF)` +# # Start of 10.1 tests # # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/func_time.result mariadb-10.1-10.1.30/mysql-test/r/func_time.result --- mariadb-10.1-10.1.25/mysql-test/r/func_time.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/func_time.result 2017-12-21 15:48:46.000000000 +0000 @@ -2771,7 +2771,33 @@ 1 MOD ADDTIME( '13:58:57', '00:00:01' ) + 2 3 # -# Start of 10.0 tests +# MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value +# +SET sql_mode='NO_ZERO_IN_DATE'; +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 SELECT timediff(timestamp'2008-12-31 23:59:59.000001',timestamp'2008-12-30 01:01:01.000002'); +SELECT * FROM t1; +a +46:58:57.999999 +DROP TABLE t1; +SET sql_mode=DEFAULT; +# +# MDEV-13972 crash in Item_func_sec_to_time::get_date +# +DO TO_DAYS(SEC_TO_TIME(TIME(CEILING(UUID())))); +DO TO_DAYS(SEC_TO_TIME(MAKEDATE('',RAND(~(''))))); +Warnings: +Warning 1292 Truncated incorrect INTEGER value: '' +Warning 1292 Truncated incorrect INTEGER value: '' +Warning 1292 Truncated incorrect INTEGER value: '' +Warning 1292 Truncated incorrect time value: '20000101' +SELECT SEC_TO_TIME(MAKEDATE(0,RAND(~0))); +SEC_TO_TIME(MAKEDATE(0,RAND(~0))) +838:59:59 +Warnings: +Warning 1292 Truncated incorrect time value: '20000101' +# +# End of 5.5 tests # # # MDEV-8205 timediff returns null when comparing decimal time to time string value diff -Nru mariadb-10.1-10.1.25/mysql-test/r/gis-precise.result mariadb-10.1-10.1.30/mysql-test/r/gis-precise.result --- mariadb-10.1-10.1.25/mysql-test/r/gis-precise.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/gis-precise.result 2017-12-21 15:48:46.000000000 +0000 @@ -486,6 +486,25 @@ select ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)')); ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)')) 0 +SELECT ST_RELATE( +ST_DIFFERENCE( +GEOMETRYFROMTEXT(' + MULTILINESTRING( + ( 12841 36140, 8005 31007, 26555 31075, 52765 41191, + 28978 6548, 45720 32057, 53345 3221 ), + ( 8304 59107, 25233 31592, 40502 25303, 8205 42940 ), + ( 7829 7305, 58841 56759, 64115 8512, 37562 54145, 2210 14701 ), + ( 20379 2805, 40807 27770, 28147 14883, 26439 29383, 55663 5086 ), + ( 35944 64702, 14433 23728, 49317 26241, 790 16941 ) + ) + '), +GEOMETRYFROMTEXT('POINT(46061 13545)') +), +GEOMETRYFROMTEXT('POINT(4599 60359)'), +'F*FFFF**F' + ) as relate_res; +relate_res +0 DROP TABLE IF EXISTS p1; CREATE PROCEDURE p1(dist DOUBLE, geom TEXT) BEGIN diff -Nru mariadb-10.1-10.1.25/mysql-test/r/gis.result mariadb-10.1-10.1.30/mysql-test/r/gis.result --- mariadb-10.1-10.1.25/mysql-test/r/gis.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/gis.result 2017-12-21 15:48:46.000000000 +0000 @@ -331,8 +331,8 @@ 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon; fid AsText(Centroid(g)) -117 POINT(55.58852775304245 17.426536064113982) -118 POINT(55.58852775304245 17.426536064113982) +117 POINT(57.98031067576927 17.854754130800433) +118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon; fid Area(g) @@ -682,11 +682,11 @@ select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from t1 where object_id=85998; object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo)) -85998 MULTIPOLYGON 1 POINT(115.31877315203187 -36.23747282102153) +85998 MULTIPOLYGON 1 POINT(115.2970604672862 -36.23335610879993) select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from t1 where object_id=85984; object_id geometrytype(geo) ISSIMPLE(GEO) ASTEXT(centroid(geo)) -85984 MULTIPOLYGON 1 POINT(-114.87787186923313 36.33101763469059) +85984 MULTIPOLYGON 1 POINT(-114.86854472054372 36.34725218253213) drop table t1; create table t1 (fl geometry not null); insert into t1 values (1); diff -Nru mariadb-10.1-10.1.25/mysql-test/r/gis-rt-precise.result mariadb-10.1-10.1.30/mysql-test/r/gis-rt-precise.result --- mariadb-10.1-10.1.25/mysql-test/r/gis-rt-precise.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/gis-rt-precise.result 2017-12-21 15:48:46.000000000 +0000 @@ -60,3 +60,25 @@ 45 LINESTRING(51 51,60 60) DROP TABLE t1; End of 5.5 tests. +CREATE TABLE t1 ( +coordinate point NOT NULL, +SPATIAL KEY coordinate (coordinate) +) ENGINE=Aria DEFAULT CHARSET=ascii PAGE_CHECKSUM=1; +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +coordinate point NO MUL NULL +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(0 0)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(10 0)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(10 10)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(0 10)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(5 5)")); +SELECT astext(coordinate) FROM t1 WHERE ST_Intersects(ST_LineFromText("LINESTRING(0 0, 10 0, 10 10, 0 10)"), coordinate); +astext(coordinate) +POINT(0 0) +POINT(10 0) +POINT(10 10) +POINT(0 10) +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +coordinate point NO MUL NULL +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/group_by.result mariadb-10.1-10.1.30/mysql-test/r/group_by.result --- mariadb-10.1-10.1.25/mysql-test/r/group_by.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/group_by.result 2017-12-21 15:48:46.000000000 +0000 @@ -2609,6 +2609,58 @@ a drop table t1; set sql_mode= @save_sql_mode; +create table t1 (f1 int); +insert into t1 values (5),(9); +create table t2 (f2 int); +insert into t2 values (0),(6); +create table t3 (f3 int); +insert into t3 values (6),(3); +create table t4 (f4 int); +insert into t4 values (1),(0); +select +(select min(f1) from t1 where f1 in (select min(f4) from t2)) as field7, +(select count(*) from t3 where f3 in (select max(f4) from t2 group by field7)) +from t4; +ERROR 42S22: Reference 'field7' not supported (reference to group function) +drop table t1, t2, t3, t4; +create table t1 (i1 int); +insert into t1 values (1); +create table t2 (i int); +insert into t2 values (2); +select 1 from t1 left join t2 b on b.i = (select max(b.i) from t2); +1 +1 +drop table t1, t2; +create table t1 (c1 int, c2 int); +create table t2 (c1 int, c2 int); +select t1.c1 as c1, t2.c2 as c1 from t1, t2 where t1.c1 < 20 and t2.c2 > 5 group by t1.c1, t2.c2 having t1.c1 < 3; +c1 c1 +drop table t1, t2; +SET @old_sort_buff_size = @@sort_buffer_size; +SET @@sort_buffer_size=256*1024; +CREATE TABLE t1 (c INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES +(2011),(1977),(1982),(2027),(2023),(NULL),(NULL),(2004),(1974),(2032), +(1993),(NULL),(1995),(2034),(NULL),(2009),(1900),(NULL),(2025),(1900), +(2033),(1900),(2012),(NULL),(2009),(1992),(1974),(1974),(2012),(2028), +(2007),(2012),(1900),(1983),(1900),(2010),(1987),(1994),(1981),(2032), +(2010),(1989),(2014),(1900),(1900),(1976),(1978),(2007),(2030),(NULL), +(2002),(1997),(1900),(NULL),(2000),(2027),(1975),(2026),(1975),(2026), +(2029),(1977),(1900),(1900),(2031),(1993),(1986),(2012),(1979),(2013), +(1994),(2014),(2025),(2006),(1971),(1974),(2021),(2011),(NULL),(1991), +(2001),(1977),(2023),(2012),(1900),(1978),(1998),(NULL),(1988),(1999), +(2017),(2008),(1976),(1900),(2005),(2030),(2023),(1900),(1978),(1990), +(1978),(1987),(2030),(1900),(2034),(2006),(2015),(2001),(2019),(2024), +(2030),(1989),(1997),(2007),(2023),(1994),(1971),(2011),(2011),(2015), +(1984),(1978),(1979),(1989),(2008),(2030); +SELECT ExtractValue('','/a') AS f1, SPACE(c) AS f2 FROM t1 GROUP BY f1, f2 WITH ROLLUP; +f1 f2 + NULL + + NULL +NULL NULL +SET @@sort_buffer_size = @old_sort_buff_size; +DROP TABLE t1; # # Bug #58782 # Missing rows with SELECT .. WHERE .. IN subquery diff -Nru mariadb-10.1-10.1.25/mysql-test/r/having.result mariadb-10.1-10.1.30/mysql-test/r/having.result --- mariadb-10.1-10.1.25/mysql-test/r/having.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/having.result 2017-12-21 15:48:46.000000000 +0000 @@ -698,6 +698,21 @@ expected -- 1 row(s) returned not ER_BAD_FIELD_ERROR drop table t1; # +# mdev-14368: grouping query with alias for aggregate function in HAVING +# when sql_mode = 'ONLY_FULL_GROUP_BY' +set @save_sql_mode= @@sql_mode; +set sql_mode = 'ONLY_FULL_GROUP_BY'; +create table t1(a int); +insert t1 values (4),(1),(2),(1), (3),(4); +SELECT a, COUNT(a) as ct FROM t1 GROUP BY a HAVING ct>0; +a ct +1 2 +2 1 +3 1 +4 2 +set sql_mode=@save_sql_mode; +drop table t1; +# # Bug mdev-5160: two-way join with HAVING over the second table # CREATE TABLE t1 (c1 varchar(6)) ENGINE=MyISAM; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/information_schema.result mariadb-10.1-10.1.30/mysql-test/r/information_schema.result --- mariadb-10.1-10.1.25/mysql-test/r/information_schema.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/information_schema.result 2017-12-21 15:48:46.000000000 +0000 @@ -2069,3 +2069,35 @@ drop database mysqltest; drop database db1; set global sql_mode=default; +USE test; +# +# End of 10.0 tests +# +# +# Start of 10.1 tests +# +# +# MDEV-13242 Wrong results for queries with row constructors and information_schema +# +CREATE TABLE tt1(c1 INT); +CREATE TABLE tt2(c2 INT); +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (('tt1', 'c1')); +count(*) +1 +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (('tt2', 'c2')); +count(*) +1 +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (('tt1','c1'),('tt2', 'c2')); +count(*) +2 +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (SELECT 'tt1','c1' FROM dual UNION SELECT 'tt2', 'c2' FROM dual); +count(*) +2 +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name='tt1' AND column_name='c1') OR (table_name='tt2' AND column_name='c2'); +count(*) +2 +SELECT column_name FROM information_schema.columns WHERE (table_name, column_name) IN (('tt1','c1'),('tt2', 'c2')) ORDER BY column_name; +column_name +c1 +c2 +DROP TABLE tt1, tt2; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/insert.result mariadb-10.1-10.1.30/mysql-test/r/insert.result --- mariadb-10.1-10.1.25/mysql-test/r/insert.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/insert.result 2017-12-21 15:48:46.000000000 +0000 @@ -717,3 +717,37 @@ Warnings: Warning 1062 Duplicate entry '1' for key 'f1' DROP TABLE t1; +# +# MDEV-13290 Assertion Assertion `!is_set() || (m_status == DA_OK_BULK +# && is_bulk_op())' or `! is_set()' failed +# +SET @save_mode= @@sql_mode; +SET sql_mode= 'STRICT_ALL_TABLES'; +CREATE TABLE t1 (f1 INT DEFAULT 0, f2 INT); +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT f1, f2 FROM t1 WHERE f1 = 'x' WITH CHECK OPTION; +REPLACE INTO v1 SET f2 = 1; +ERROR 22007: Truncated incorrect DOUBLE value: 'x' +SELECT * from t1; +f1 f2 +drop view v1; +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT f1, f2 FROM t1 WHERE f1 = cast('' as decimal) WITH CHECK OPTION; +REPLACE INTO v1 SET f2 = 1; +ERROR 22007: Truncated incorrect DECIMAL value: '' +SELECT * from t1; +f1 f2 +drop view v1; +SELECT 0,0 INTO OUTFILE 't1.txt'; +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT f1, f2 FROM t1 WHERE f1 = 'x' WITH CHECK OPTION; +LOAD DATA INFILE 't1.txt' INTO TABLE v1; +ERROR 22007: Truncated incorrect DOUBLE value: 'x' +SELECT * from t1; +f1 f2 +drop view v1; +drop table t1; +SET @@sql_mode= @save_mode; +CREATE TABLE t1 (f INT); +CREATE VIEW v1 AS SELECT * FROM t1 WHERE f <=> 'foo' WITH CHECK OPTION; +REPLACE INTO v1 SET f = NULL; +ERROR HY000: CHECK OPTION failed 'test.v1' +DROP VIEW v1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/join_cache.result mariadb-10.1-10.1.30/mysql-test/r/join_cache.result --- mariadb-10.1-10.1.25/mysql-test/r/join_cache.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/join_cache.result 2017-12-21 15:48:46.000000000 +0000 @@ -5880,7 +5880,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 2 1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) -2 UNCACHEABLE SUBQUERY t3 system NULL NULL NULL NULL 1 +2 UNCACHEABLE SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE set @counter=0; select count(*) from t1 straight_join t2 where c1 = c2-0 and c2 <= (select max(c3) from t3 where c3 = 2 and @counter:=@counter+1); diff -Nru mariadb-10.1-10.1.25/mysql-test/r/join_outer_jcl6.result mariadb-10.1-10.1.30/mysql-test/r/join_outer_jcl6.result --- mariadb-10.1-10.1.25/mysql-test/r/join_outer_jcl6.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/join_outer_jcl6.result 2017-12-21 15:48:46.000000000 +0000 @@ -2444,6 +2444,19 @@ Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0) DROP FUNCTION f1; DROP TABLE t1,t2; +# +# MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields +# +CREATE TABLE t1 (b1 BIT NOT NULL); +INSERT INTO t1 VALUES (0),(1); +CREATE TABLE t2 (b2 BIT NOT NULL); +INSERT INTO t2 VALUES (0),(1); +SET SESSION JOIN_CACHE_LEVEL = 3; +SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2; +t1.b1+'0' t2.b2 + '0' +0 0 +1 1 +DROP TABLE t1, t2; # end of 5.5 tests SET optimizer_switch=@save_optimizer_switch; set join_cache_level=default; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/join_outer.result mariadb-10.1-10.1.30/mysql-test/r/join_outer.result --- mariadb-10.1-10.1.25/mysql-test/r/join_outer.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/join_outer.result 2017-12-21 15:48:46.000000000 +0000 @@ -2433,5 +2433,18 @@ Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`col2` = `test`.`t1`.`col1`)) where (`f1`(`test`.`t2`.`col3`,0) = 0) DROP FUNCTION f1; DROP TABLE t1,t2; +# +# MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields +# +CREATE TABLE t1 (b1 BIT NOT NULL); +INSERT INTO t1 VALUES (0),(1); +CREATE TABLE t2 (b2 BIT NOT NULL); +INSERT INTO t2 VALUES (0),(1); +SET SESSION JOIN_CACHE_LEVEL = 3; +SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2; +t1.b1+'0' t2.b2 + '0' +0 0 +1 1 +DROP TABLE t1, t2; # end of 5.5 tests SET optimizer_switch=@save_optimizer_switch; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/loadxml.result mariadb-10.1-10.1.30/mysql-test/r/loadxml.result --- mariadb-10.1-10.1.25/mysql-test/r/loadxml.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/loadxml.result 2017-12-21 15:48:46.000000000 +0000 @@ -5,10 +5,10 @@ rows identified by ''; select * from t1 order by a; a b -1 b1 -2 b2 -3 b3 -11 b11 +1 b1 +2 b2 +3 b3 +11 b11 111 b111 112 b112 & < > " ' &unknown; -- check entities 212 b212 @@ -81,17 +81,17 @@ ROWS IDENTIFIED BY '' (a,@b) SET b=concat('!',@b); SELECT * FROM t1 ORDER BY a; a b -1 !b1 -11 !b11 +1 ! b1 +11 ! b11 111 !b111 112 !b112 & < > " ' &unknown; -- check entities -2 !b2 +2 ! b2 212 !b212 213 !b213 214 !b214 215 !b215 216 !&bb b; -3 !b3 +3 ! b3 DROP TABLE t1; # # Bug#16171518 LOAD XML DOES NOT HANDLE EMPTY ELEMENTS diff -Nru mariadb-10.1-10.1.25/mysql-test/r/log_tables-big.result mariadb-10.1-10.1.30/mysql-test/r/log_tables-big.result --- mariadb-10.1-10.1.25/mysql-test/r/log_tables-big.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/log_tables-big.result 2017-12-21 15:48:46.000000000 +0000 @@ -1,3 +1,4 @@ +set @log_output.saved = @@global.log_output; set @@global.log_output = 'TABLE'; set session long_query_time=10; select get_lock('bug27638', 1); @@ -7,25 +8,25 @@ select get_lock('bug27638', 2); get_lock('bug27638', 2) 0 -select if (query_time >= '00:00:01', 'OK', 'WRONG') as qt, sql_text from mysql.slow_log +select if (query_time >= '00:00:01', 'OK', concat('WRONG: ',query_time)) as qt, sql_text from mysql.slow_log where sql_text = 'select get_lock(\'bug27638\', 2)'; qt sql_text OK select get_lock('bug27638', 2) select get_lock('bug27638', 60); get_lock('bug27638', 60) 0 -select if (query_time >= '00:00:59', 'OK', 'WRONG') as qt, sql_text from mysql.slow_log +select if (query_time >= '00:00:59', 'OK', concat('WRONG: ',query_time)) as qt, sql_text from mysql.slow_log where sql_text = 'select get_lock(\'bug27638\', 60)'; qt sql_text OK select get_lock('bug27638', 60) select get_lock('bug27638', 101); get_lock('bug27638', 101) 0 -select if (query_time >= '00:01:40', 'OK', 'WRONG') as qt, sql_text from mysql.slow_log +select if (query_time >= '00:01:40', 'OK', concat('WRONG: ',query_time)) as qt, sql_text from mysql.slow_log where sql_text = 'select get_lock(\'bug27638\', 101)'; qt sql_text OK select get_lock('bug27638', 101) select release_lock('bug27638'); release_lock('bug27638') 1 -set @@global.log_output=default; +set @@global.log_output = @log_output.saved; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/mdev13607.result mariadb-10.1-10.1.30/mysql-test/r/mdev13607.result --- mariadb-10.1-10.1.25/mysql-test/r/mdev13607.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/mdev13607.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,469 @@ +# +# Bug mdev-13607: overflow of current_record_count +# +CREATE TABLE t1 (id INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES +(1),(2),(3),(4),(5),(6),(7),(8),(9),(10), +(11),(12),(13),(14),(15),(16),(17),(18),(19),(20), +(21),(22),(23),(24),(25),(26),(27),(28),(29),(30), +(31),(32),(33),(34),(35),(36),(37),(38),(39),(40), +(41),(42),(43),(44),(45),(46),(47),(48),(49),(50); +CREATE TABLE t2 (id INT) ENGINE=InnoDB; +INSERT INTO t2 VALUES (1),(2); +CREATE TABLE t3 (id INT) ENGINE=InnoDB; +INSERT INTO t3 VALUES (1),(2); +ANALYZE TABLE t1, t2, t3; +Table Op Msg_type Msg_text +test.t1 analyze status OK +test.t2 analyze status OK +test.t3 analyze status OK +explain SELECT * FROM +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_1 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_2 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_3 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_4 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_5 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_6 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_7 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_8 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_9 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_10 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_11 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_12 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_13 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_14 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_15 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_16 +; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY r1 ALL NULL NULL NULL NULL 2 +1 PRIMARY d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +1 PRIMARY r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +1 PRIMARY ALL NULL NULL NULL NULL -1127208515966861312 Using join buffer (incremental, BNL join) +17 DERIVED r1 ALL NULL NULL NULL NULL 2 +17 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +17 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +17 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED r1 ALL NULL NULL NULL NULL 2 +16 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +16 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +16 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED r1 ALL NULL NULL NULL NULL 2 +15 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +15 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +15 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED r1 ALL NULL NULL NULL NULL 2 +14 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +14 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +14 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED r1 ALL NULL NULL NULL NULL 2 +13 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +13 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +13 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED r1 ALL NULL NULL NULL NULL 2 +12 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +12 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +12 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED r1 ALL NULL NULL NULL NULL 2 +11 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +11 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +11 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED r1 ALL NULL NULL NULL NULL 2 +10 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +10 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +10 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED r1 ALL NULL NULL NULL NULL 2 +9 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +9 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +9 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED r1 ALL NULL NULL NULL NULL 2 +8 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +8 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +8 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED r1 ALL NULL NULL NULL NULL 2 +7 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +7 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +7 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED r1 ALL NULL NULL NULL NULL 2 +6 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +6 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +6 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED r1 ALL NULL NULL NULL NULL 2 +5 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +5 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +5 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED r1 ALL NULL NULL NULL NULL 2 +4 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +4 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +4 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED r1 ALL NULL NULL NULL NULL 2 +3 DERIVED d1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join) +3 DERIVED r2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED d2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED r3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED d3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED r4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED d4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED r5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED d5 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED r6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED d6 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED r7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED d7 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED r8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED d8 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p1 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p2 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p3 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p4 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p5 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p6 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p7 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p8 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +3 DERIVED p9 ALL NULL NULL NULL NULL 50 Using where; Using join buffer (incremental, BNL join) +DROP TABLE t1,t2,t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/myisam.result mariadb-10.1-10.1.30/mysql-test/r/myisam.result --- mariadb-10.1-10.1.25/mysql-test/r/myisam.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/myisam.result 2017-12-21 15:48:46.000000000 +0000 @@ -1699,7 +1699,14 @@ ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; create table t1 (v varchar(65535)); -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +Warnings: +Note 1246 Converting column 'v' from VARCHAR to TEXT +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` text +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop table t1; set storage_engine=MyISAM; set @save_concurrent_insert=@@concurrent_insert; set global concurrent_insert=1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/mysqlbinlog.result mariadb-10.1-10.1.30/mysql-test/r/mysqlbinlog.result --- mariadb-10.1-10.1.25/mysql-test/r/mysqlbinlog.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/mysqlbinlog.result 2017-12-21 15:48:46.000000000 +0000 @@ -1250,3 +1250,4 @@ ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; +mysqlbinlog Ver VER for OS at ARCH diff -Nru mariadb-10.1-10.1.25/mysql-test/r/mysqld--help.result mariadb-10.1-10.1.30/mysql-test/r/mysqld--help.result --- mariadb-10.1-10.1.25/mysql-test/r/mysqld--help.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/mysqld--help.result 2017-12-21 15:48:46.000000000 +0000 @@ -1,4 +1,4 @@ -Windows bug: happens when a new line is exactly at the right offset +Windows bug: happens when a new line is exactly at the right offset. The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file. @@ -23,13 +23,15 @@ Creating and dropping stored procedures alters ACLs (Defaults to on; use --skip-automatic-sp-privileges to disable.) --back-log=# The number of outstanding connection requests MariaDB can - have. This comes into play when the main MySQL thread + have. This comes into play when the main MariaDB thread gets very many connection requests in a very short time (Automatically configured unless set explicitly) -b, --basedir=name Path to installation directory. All paths are usually resolved relative to this - --big-tables Allow big result sets by saving all temporary sets on - file (Solves most 'table full' errors) + --big-tables Old variable, which if set to 1, allows large result sets + by saving all temporary sets to disk, avoiding 'table + full' errors. No longer needed, as the server now handles + this automatically. sql_big_tables is a synonym. --bind-address=name IP address to bind to. --binlog-annotate-row-events Tells the master to annotate RBR events with the @@ -104,7 +106,7 @@ The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you - can increase this to get more performance + can increase this to get more performance. --bootstrap Used by mysql installation scripts. --bulk-insert-buffer-size=# Size of tree cache used in bulk insert optimisation. Note @@ -161,12 +163,21 @@ --default-week-format=# The default week format used by WEEK() functions --delay-key-write[=name] - Type of DELAY_KEY_WRITE. One of: OFF, ON, ALL + Specifies how MyISAM tables handles CREATE TABLE + DELAY_KEY_WRITE. If set to ON, the default, any DELAY KEY + WRITEs are honored. The key buffer is then flushed only + when the table closes, speeding up writes. MyISAM tables + should be automatically checked upon startup in this + case, and --external locking should not be used, as it + can lead to index corruption. If set to OFF, DELAY KEY + WRITEs are ignored, while if set to ALL, all new opened + tables are treated as if created with DELAY KEY WRITEs + enabled. --delayed-insert-limit=# After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute - before continuing + before continuing. --delayed-insert-timeout=# How long a INSERT DELAYED thread should wait for INSERT statements before terminating @@ -231,7 +242,7 @@ --gdb Set up signals usable for debugging. Deprecated, use --general-log Log connections and queries to a table or log file. Defaults logging to a file 'hostname'.log or a table - mysql.general_logif --log-output=TABLE is used + mysql.general_logif --log-output=TABLE is used. --general-log-file=name Log connections and queries to given file --getopt-prefix-matching @@ -372,7 +383,7 @@ logs. --log-slave-updates Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you - plan to daisy-chain the slaves + plan to daisy-chain the slaves. --log-slow-admin-statements Log slow OPTIMIZE, ANALYZE, ALTER and other administrative statements to the slow log if it is open. @@ -567,7 +578,7 @@ automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is - deprecated + deprecated. --optimizer-selectivity-sampling-limit=# Controls number of record samples to check condition selectivity @@ -754,7 +765,9 @@ The size of the buffer that is allocated when preloading indexes --profiling-history-size=# - Limit of query profiling memory + Number of statements about which profiling information is + maintained. If set to 0, no profiles are stored. See SHOW + PROFILES. --progress-report-time=# Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable @@ -792,21 +805,21 @@ --read-rnd-buffer-size=# When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks - --relay-log=name The location and name to use for relay logs + --relay-log=name The location and name to use for relay logs. --relay-log-index=name The location and name to use for the file that keeps a list of the last relay logs --relay-log-info-file=name The location and name of the file that remembers where - the SQL replication thread is in the relay logs + the SQL replication thread is in the relay logs. --relay-log-purge if disabled - do not purge relay logs. if enabled - purge - them as soon as they are no more needed + them as soon as they are no more needed. (Defaults to on; use --skip-relay-log-purge to disable.) --relay-log-recovery Enables automatic relay log recovery right after the database startup, which means that the IO Thread starts re-fetching from the master right after the last - transaction processed + transaction processed. --relay-log-space-limit=# Maximum space to use for all relay logs --replicate-annotate-row-events @@ -950,7 +963,7 @@ idempotent. For example, in row based replication attempts to delete rows that doesn't exist will be ignored. In STRICT mode, replication will stop on any - unexpected difference between the master and the slave + unexpected difference between the master and the slave. --slave-load-tmpdir=name The location where the slave should put its temporary files when replicating a LOAD DATA INFILE command @@ -1016,7 +1029,7 @@ --slow-query-log Log slow queries to a table or log file. Defaults logging to a file 'hostname'-slow.log or a table mysql.slow_log if --log-output=TABLE is used. Must be enabled to - activate other slow log options + activate other slow log options. --slow-query-log-file=name Log slow queries to given log file. Defaults logging to 'hostname'-slow.log. Must be enabled to activate other @@ -1099,8 +1112,8 @@ --timed-mutexes Specify whether to time mutexes. Deprecated, has no effect. --tmp-table-size=# If an internal in-memory temporary table exceeds this - size, MySQL will automatically convert it to an on-disk - MyISAM or Aria table + size, MariaDB will automatically convert it to an on-disk + MyISAM or Aria table. -t, --tmpdir=name Path for temporary files. Several paths may be specified, separated by a colon (:), in this case they are used in a round-robin fashion @@ -1164,7 +1177,7 @@ chroot (No default value) completion-type NO_CHAIN concurrent-insert AUTO -console FALSE +console TRUE date-format %Y-%m-%d datetime-format %Y-%m-%d %H:%i:%s deadlock-search-depth-long 15 diff -Nru mariadb-10.1-10.1.25/mysql-test/r/mysqld--help,win.rdiff mariadb-10.1-10.1.30/mysql-test/r/mysqld--help,win.rdiff --- mariadb-10.1-10.1.25/mysql-test/r/mysqld--help,win.rdiff 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/mysqld--help,win.rdiff 2017-12-21 15:48:46.000000000 +0000 @@ -1,6 +1,6 @@ --- mysqld--help.result +++ mysqld--help,win.reject -@@ -321,7 +321,6 @@ The following options may be given as the first argument: +@@ -333,7 +333,6 @@ The number of segments in a key cache -L, --language=name Client error messages in given language. May be given as a full path. Deprecated. Use --lc-messages-dir instead. @@ -8,7 +8,7 @@ --lc-messages=name Set the language used for the error messages. -L, --lc-messages-dir=name Directory where error messages are -@@ -517,6 +516,7 @@ The following options may be given as the first argument: +@@ -533,6 +532,7 @@ Use MySQL-5.6 (instead of MariaDB-5.3) format for TIME, DATETIME, TIMESTAMP columns. (Defaults to on; use --skip-mysql56-temporal-format to disable.) @@ -16,7 +16,7 @@ --net-buffer-length=# Buffer length for TCP/IP and socket communication --net-read-timeout=# -@@ -906,6 +906,9 @@ The following options may be given as the first argument: +@@ -924,6 +924,9 @@ files within specified directory --server-id=# Uniquely identifies the server instance in the community of replication partners @@ -26,7 +26,7 @@ --show-slave-auth-info Show user and password in SHOW SLAVE HOSTS on this master. -@@ -1016,6 +1019,10 @@ The following options may be given as the first argument: +@@ -1034,6 +1037,10 @@ Log slow queries to given log file. Defaults logging to 'hostname'-slow.log. Must be enabled to activate other slow log options @@ -37,7 +37,7 @@ --socket=name Socket file to use for connection --sort-buffer-size=# Each thread that needs to do a sort allocates a buffer of -@@ -1034,6 +1041,7 @@ The following options may be given as the first argument: +@@ -1052,6 +1059,7 @@ NO_ENGINE_SUBSTITUTION, PAD_CHAR_TO_FULL_LENGTH --stack-trace Print a symbolic stack trace on failure (Defaults to on; use --skip-stack-trace to disable.) @@ -45,7 +45,7 @@ --stored-program-cache=# The soft upper limit for number of cached stored routines for one connection. -@@ -1070,25 +1078,11 @@ The following options may be given as the first argument: +@@ -1088,25 +1096,11 @@ COMMIT, ROLLBACK --thread-cache-size=# How many threads we should keep in a cache for reuse @@ -73,9 +73,9 @@ --thread-stack=# The stack size for each thread --time-format=name The TIME format (ignored) --timed-mutexes Specify whether to time mutexes. Deprecated, has no -@@ -1097,8 +1091,8 @@ The following options may be given as the first argument: - size, MySQL will automatically convert it to an on-disk - MyISAM or Aria table +@@ -1115,8 +1109,8 @@ + size, MariaDB will automatically convert it to an on-disk + MyISAM or Aria table. -t, --tmpdir=name Path for temporary files. Several paths may be specified, - separated by a colon (:), in this case they are used in a - round-robin fashion @@ -84,7 +84,7 @@ --transaction-alloc-block-size=# Allocation block size for transactions to be stored in binary log -@@ -1224,7 +1218,6 @@ key-cache-block-size 1024 +@@ -1240,7 +1234,6 @@ key-cache-division-limit 100 key-cache-file-hash-size 512 key-cache-segments 0 @@ -92,7 +92,7 @@ lc-messages en_US lc-messages-dir MYSQL_SHAREDIR/ lc-time-names en_US -@@ -1290,6 +1283,7 @@ myisam-sort-buffer-size 134216704 +@@ -1307,6 +1300,7 @@ myisam-stats-method NULLS_UNEQUAL myisam-use-mmap FALSE mysql56-temporal-format TRUE @@ -100,7 +100,7 @@ net-buffer-length 16384 net-read-timeout 30 net-retry-count 10 -@@ -1386,6 +1380,8 @@ safe-user-create FALSE +@@ -1403,6 +1397,8 @@ secure-auth TRUE secure-file-priv (No default value) server-id 0 @@ -109,7 +109,7 @@ show-slave-auth-info FALSE silent-startup FALSE skip-grant-tables TRUE -@@ -1409,6 +1405,7 @@ slave-transaction-retries 10 +@@ -1426,6 +1422,7 @@ slave-type-conversions slow-launch-time 2 slow-query-log FALSE @@ -117,7 +117,7 @@ sort-buffer-size 2097152 sql-mode NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION stack-trace TRUE -@@ -1421,15 +1418,13 @@ sync-master-info 10000 +@@ -1438,15 +1435,13 @@ sync-relay-log 10000 sync-relay-log-info 10000 sysdate-is-now FALSE diff -Nru mariadb-10.1-10.1.25/mysql-test/r/mysql_upgrade.result mariadb-10.1-10.1.30/mysql-test/r/mysql_upgrade.result --- mariadb-10.1-10.1.25/mysql-test/r/mysql_upgrade.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/mysql_upgrade.result 2017-12-21 15:48:46.000000000 +0000 @@ -474,6 +474,29 @@ even_longer_user_name_number_3_to_test_the_grantor_and_definer_field_length@localhost DROP USER very_long_user_name_number_1, very_long_user_name_number_2, even_longer_user_name_number_3_to_test_the_grantor_and_definer_field_length@localhost; DROP PROCEDURE test.pr; +use test; +call mtr.add_suppression('Column last_update in table "mysql"."innodb_table_stats" is INT NOT NULL but should be'); +alter table mysql.innodb_table_stats modify last_update int not null; +create table extralongname_extralongname_extralongname_extralongname_ext ( +id int(10) unsigned not null, +created_date date not null, +created timestamp not null, +primary key (created,id,created_date) +) engine=innodb stats_persistent=1 default charset=latin1 +partition by range (year(created_date)) +subpartition by hash (month(created_date)) +subpartitions 2 ( +partition p2007 values less than (2008), +partition p2008 values less than (2009) +); +select length(table_name) from mysql.innodb_table_stats; +length(table_name) +79 +79 +79 +79 +drop table extralongname_extralongname_extralongname_extralongname_ext; +End of 10.0 tests set sql_mode=default; # Droping the previously created mysql_upgrade_info file.. create table test.t1(a int) engine=MyISAM; @@ -536,4 +559,4 @@ ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE test.t1; SET GLOBAL enforce_storage_engine=NULL; -End of tests +End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/r/not_windows.require mariadb-10.1-10.1.30/mysql-test/r/not_windows.require --- mariadb-10.1-10.1.25/mysql-test/r/not_windows.require 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/not_windows.require 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -TRUE -1 diff -Nru mariadb-10.1-10.1.25/mysql-test/r/old-mode.result mariadb-10.1-10.1.30/mysql-test/r/old-mode.result --- mariadb-10.1-10.1.25/mysql-test/r/old-mode.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/old-mode.result 2017-12-21 15:48:46.000000000 +0000 @@ -127,3 +127,48 @@ Warning 1264 Out of range value for column 'b' at row 1 DROP TABLE t1; SET @@global.mysql56_temporal_format=DEFAULT; +set time_zone='Europe/Moscow'; +set global mysql56_temporal_format=false; +create table t1 (a timestamp); +set timestamp=1288477526; +insert t1 values (null); +set timestamp=1288481126; +insert t1 values (null); +select a, unix_timestamp(a) from t1; +a unix_timestamp(a) +2010-10-31 02:25:26 1288477526 +2010-10-31 02:25:26 1288481126 +set global mysql56_temporal_format=true; +select a, unix_timestamp(a) from t1; +a unix_timestamp(a) +2010-10-31 02:25:26 1288477526 +2010-10-31 02:25:26 1288481126 +alter table t1 modify a timestamp; +select a, unix_timestamp(a) from t1; +a unix_timestamp(a) +2010-10-31 02:25:26 1288477526 +2010-10-31 02:25:26 1288481126 +drop table t1; +set global mysql56_temporal_format=false; +create table t1 (a timestamp); +set timestamp=1288477526; +insert t1 values (null); +set timestamp=1288481126; +insert t1 values (null); +select a, unix_timestamp(a) from t1; +a unix_timestamp(a) +2010-10-31 02:25:26 1288477526 +2010-10-31 02:25:26 1288481126 +set global mysql56_temporal_format=true; +select a, unix_timestamp(a) from t1; +a unix_timestamp(a) +2010-10-31 02:25:26 1288477526 +2010-10-31 02:25:26 1288481126 +create table t2 (a timestamp); +insert t2 select a from t1; +select a, unix_timestamp(a) from t2; +a unix_timestamp(a) +2010-10-31 02:25:26 1288477526 +2010-10-31 02:25:26 1288481126 +drop table t1, t2; +set time_zone=DEFAULT; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/openssl_1.result mariadb-10.1-10.1.30/mysql-test/r/openssl_1.result --- mariadb-10.1-10.1.25/mysql-test/r/openssl_1.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/openssl_1.result 2017-12-21 15:48:46.000000000 +0000 @@ -196,9 +196,9 @@ mysqldump: Got error: 2026: "SSL connection error: Unable to get private key" when trying to connect DROP TABLE t1; Variable_name Value -Ssl_cipher DHE-RSA-AES256-SHA +Ssl_cipher AES256-SHA Variable_name Value -Ssl_cipher EDH-RSA-DES-CBC3-SHA +Ssl_cipher AES128-SHA select 'is still running; no cipher request crashed the server' as result from dual; result is still running; no cipher request crashed the server diff -Nru mariadb-10.1-10.1.25/mysql-test/r/openssl_6975,tlsv10.result mariadb-10.1-10.1.30/mysql-test/r/openssl_6975,tlsv10.result --- mariadb-10.1-10.1.25/mysql-test/r/openssl_6975,tlsv10.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/openssl_6975,tlsv10.result 2017-12-21 15:48:46.000000000 +0000 @@ -1,11 +1,11 @@ create user ssl_sslv3@localhost; -grant select on test.* to ssl_sslv3@localhost require cipher "RC4-SHA"; +grant select on test.* to ssl_sslv3@localhost require cipher "AES128-SHA"; create user ssl_tls12@localhost; grant select on test.* to ssl_tls12@localhost require cipher "AES128-SHA256"; TLS1.2 ciphers: user is ok with any cipher ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure -TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA +TLS1.2 ciphers: user requires SSLv3 cipher AES128-SHA ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure TLS1.2 ciphers: user requires TLSv1.2 cipher AES128-SHA256 @@ -13,12 +13,12 @@ ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure SSLv3 ciphers: user is ok with any cipher Variable_name Value -Ssl_cipher RC4-SHA +Ssl_cipher AES256-SHA Variable_name Value Ssl_cipher DHE-RSA-AES256-SHA -SSLv3 ciphers: user requires SSLv3 cipher RC4-SHA +SSLv3 ciphers: user requires SSLv3 cipher AES128-SHA Variable_name Value -Ssl_cipher RC4-SHA +Ssl_cipher AES128-SHA ERROR 1045 (28000): Access denied for user 'ssl_sslv3'@'localhost' (using password: NO) SSLv3 ciphers: user requires TLSv1.2 cipher AES128-SHA256 ERROR 1045 (28000): Access denied for user 'ssl_tls12'@'localhost' (using password: NO) diff -Nru mariadb-10.1-10.1.25/mysql-test/r/openssl_6975,tlsv12.result mariadb-10.1-10.1.30/mysql-test/r/openssl_6975,tlsv12.result --- mariadb-10.1-10.1.25/mysql-test/r/openssl_6975,tlsv12.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/openssl_6975,tlsv12.result 2017-12-21 15:48:46.000000000 +0000 @@ -1,5 +1,5 @@ create user ssl_sslv3@localhost; -grant select on test.* to ssl_sslv3@localhost require cipher "RC4-SHA"; +grant select on test.* to ssl_sslv3@localhost require cipher "AES128-SHA"; create user ssl_tls12@localhost; grant select on test.* to ssl_tls12@localhost require cipher "AES128-SHA256"; TLS1.2 ciphers: user is ok with any cipher @@ -7,7 +7,7 @@ Ssl_cipher AES128-SHA256 Variable_name Value Ssl_cipher DHE-RSA-AES256-GCM-SHA384 -TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA +TLS1.2 ciphers: user requires SSLv3 cipher AES128-SHA ERROR 1045 (28000): Access denied for user 'ssl_sslv3'@'localhost' (using password: NO) ERROR 1045 (28000): Access denied for user 'ssl_sslv3'@'localhost' (using password: NO) TLS1.2 ciphers: user requires TLSv1.2 cipher AES128-SHA256 @@ -17,7 +17,7 @@ SSLv3 ciphers: user is ok with any cipher ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure -SSLv3 ciphers: user requires SSLv3 cipher RC4-SHA +SSLv3 ciphers: user requires SSLv3 cipher AES128-SHA ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure SSLv3 ciphers: user requires TLSv1.2 cipher AES128-SHA256 diff -Nru mariadb-10.1-10.1.25/mysql-test/r/partition_datatype.result mariadb-10.1-10.1.30/mysql-test/r/partition_datatype.result --- mariadb-10.1-10.1.25/mysql-test/r/partition_datatype.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/partition_datatype.result 2017-12-21 15:48:46.000000000 +0000 @@ -314,12 +314,14 @@ drop table t1; create table t1 (a varchar(3070)) partition by key (a); ERROR HY000: The total length of the partitioning fields is too large +create table t1 (a varchar(65532) not null) partition by key (a); +ERROR HY000: The total length of the partitioning fields is too large create table t1 (a varchar(65533)) partition by key (a); -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +ERROR HY000: A BLOB field is not allowed in partition function create table t1 (a varchar(65534) not null) partition by key (a); -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +ERROR HY000: A BLOB field is not allowed in partition function create table t1 (a varchar(65535)) partition by key (a); -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +ERROR HY000: A BLOB field is not allowed in partition function create table t1 (a bit(27), primary key (a)) engine=myisam partition by hash (a) (partition p0, partition p1, partition p2); diff -Nru mariadb-10.1-10.1.25/mysql-test/r/partition_symlink.result mariadb-10.1-10.1.30/mysql-test/r/partition_symlink.result --- mariadb-10.1-10.1.25/mysql-test/r/partition_symlink.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/partition_symlink.result 2017-12-21 15:48:46.000000000 +0000 @@ -33,11 +33,15 @@ ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/tmp/' INSERT INTO t1 VALUES (0), (1), (2); ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; -ERROR HY000: Tables have different definitions ALTER TABLE t1 EXCHANGE PARTITION p2 WITH TABLE t2; ERROR HY000: Tables have different definitions +SELECT * FROM t1; +a +1 +2 SELECT * FROM t2; a +0 DROP TABLE t1, t2; # Creating two non colliding tables mysqltest2.t1 and test.t1 # test.t1 have partitions in mysqltest2-directory! diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ps.result mariadb-10.1-10.1.30/mysql-test/r/ps.result --- mariadb-10.1-10.1.25/mysql-test/r/ps.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ps.result 2017-12-21 15:48:46.000000000 +0000 @@ -4189,4 +4189,147 @@ Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`c` AS `c` from `test`.`t1` where 0 deallocate prepare stmt2; drop table t1; +# +# MDEV-9208: Function->Function->View = Mysqld segfault +# (Server crashes in Dependency_marker::visit_field on 2nd +# execution with merged subquery) +# +CREATE TABLE t1 (i1 INT); +insert into t1 values(1),(2); +CREATE TABLE t2 (i2 INT); +insert into t2 values(1),(2); +prepare stmt from " + select 1 from ( + select + if (i1<0, 0, 0) as f1, + (select f1) as f2 + from t1, t2 + ) sq +"; +execute stmt; +1 +1 +1 +1 +1 +execute stmt; +1 +1 +1 +1 +1 +drop table t1,t2; +# +# MDEV-9619: Assertion `null_ref_table' failed in virtual +# table_map Item_direct_view_ref::used_tables() const on 2nd +# execution of PS +# +CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM; +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES ('a'),('b'); +CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM; +INSERT INTO t2 VALUES ('c'),('d'); +PREPARE stmt FROM "SELECT * FROM v1 WHERE f1 = SOME ( SELECT f2 FROM t2 )"; +EXECUTE stmt; +f1 +EXECUTE stmt; +f1 +insert into t1 values ('c'); +EXECUTE stmt; +f1 +c +EXECUTE stmt; +f1 +c +deallocate prepare stmt; +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM; +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES ('a'),('b'); +CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM; +INSERT INTO t2 VALUES ('c'),('d'); +PREPARE stmt FROM "SELECT * FROM v1 WHERE (f1,f1) = SOME ( SELECT f2,f2 FROM t2 )"; +EXECUTE stmt; +f1 +EXECUTE stmt; +f1 +insert into t1 values ('c'); +EXECUTE stmt; +f1 +c +EXECUTE stmt; +f1 +c +deallocate prepare stmt; +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (column1 INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (3),(9); +CREATE TABLE t2 (column2 INT) ENGINE=MyISAM; +INSERT INTO t2 VALUES (1),(4); +CREATE TABLE t3 (column3 INT) ENGINE=MyISAM; +INSERT INTO t3 VALUES (6),(8); +CREATE TABLE t4 (column4 INT) ENGINE=MyISAM; +INSERT INTO t4 VALUES (2),(5); +PREPARE stmt FROM " +SELECT ( + SELECT MAX( table1.column1 ) AS field1 + FROM t1 AS table1 + WHERE (111,table3.column3) IN ( SELECT 111,table2.column2 AS field2 FROM t2 AS table2 ) +) AS sq +FROM t3 AS table3, t4 AS table4 GROUP BY sq +"; +EXECUTE stmt; +sq +NULL +EXECUTE stmt; +sq +NULL +deallocate prepare stmt; +drop table t1,t2,t3,t4; +create table t1 (a int, b int, c int); +create table t2 (x int, y int, z int); +create table t3 as select * from t1; +insert into t1 values (1,2,3),(4,5,6),(100,200,300),(400,500,600); +insert into t2 values (1,2,3),(7,8,9),(100,200,300),(400,500,600); +insert into t3 values (1,2,3),(11,12,13),(100,0,0),(400,500,600); +set @optimizer_switch_save=@@optimizer_switch; +set @join_cache_level_save=@@join_cache_level; +set optimizer_switch='materialization=off'; +set join_cache_level=0; +select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z); +a b c +1 2 3 +400 500 600 +prepare stmt from "select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z)"; +EXECUTE stmt; +a b c +1 2 3 +400 500 600 +EXECUTE stmt; +a b c +1 2 3 +400 500 600 +create view v1 as select * from t1; +create view v2 as select * from t2; +create view v3 as select * from t3; +select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z); +a b c +1 2 3 +400 500 600 +prepare stmt from "select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z)"; +EXECUTE stmt; +a b c +1 2 3 +400 500 600 +EXECUTE stmt; +a b c +1 2 3 +400 500 600 +set optimizer_switch=@optimizer_switch_save; +set join_cache_level=@join_cache_level_save; +deallocate prepare stmt; +drop view v1,v2,v3; +drop table t1,t2,t3; # End of 5.5 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/r/range_vs_index_merge_innodb.result mariadb-10.1-10.1.30/mysql-test/r/range_vs_index_merge_innodb.result --- mariadb-10.1-10.1.25/mysql-test/r/range_vs_index_merge_innodb.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/range_vs_index_merge_innodb.result 2017-12-21 15:48:46.000000000 +0000 @@ -1808,5 +1808,86 @@ 7 Pennsylvania Harrisburg 8 Virginia Richmond DROP TABLE t1; +# +# mdev-11574: do not build index merge of two indexes when +# one index is an infix of the other index +# +set names utf8; +CREATE DATABASE world; +use world; +CREATE TABLE Country ( +Code char(3) NOT NULL default '', +Name char(52) NOT NULL default '', +SurfaceArea float(10,2) NOT NULL default '0.00', +Population int(11) NOT NULL default '0', +Capital int(11) default NULL, +PRIMARY KEY (Code), +UNIQUE INDEX (Name) +); +CREATE TABLE City ( +ID int(11) NOT NULL auto_increment, +Name char(35) NOT NULL default '', +Country char(3) NOT NULL default '', +Population int(11) NOT NULL default '0', +PRIMARY KEY (ID), +INDEX (Population), +INDEX (Country) +); +CREATE TABLE CountryLanguage ( +Country char(3) NOT NULL default '', +Language char(30) NOT NULL default '', +Percentage float(3,1) NOT NULL default '0.0', +PRIMARY KEY (Country, Language), +INDEX (Percentage) +); +DROP INDEX Country ON City; +CREATE INDEX CountryName ON City(Country,Name); +CREATE INDEX Name ON City(Name); +select * from City +where +Country='FIN' AND Name IN ('Lahti','Imatra') OR +Country='RUS' AND Name IN ('St Petersburg', 'Moscow') OR +Country='SWE' AND Name IN ('Stockholm', 'Uppsala') OR +Country='DEU' AND Name IN ('Berlin', 'Bonn') OR +Country='BEL' AND Name IN ('Antwerpen', 'Gent') OR +Country='PRT' AND Name IN ('Braga', 'Porto') OR +Country='FRA' AND Name IN ('Paris', 'Marcel') OR +Country='POL' AND Name IN ('Warszawa', 'Wroclaw') OR +Country='NOR' AND Name IN ('Oslo', 'Bergen') OR +Country='ITA' AND Name IN ('Napoli', 'Venezia'); +ID Name Country Population +175 Antwerpen BEL 446525 +176 Gent BEL 224180 +3068 Berlin DEU 3386667 +3087 Bonn DEU 301048 +3242 Lahti FIN 96921 +2974 Paris FRA 2125246 +1466 Napoli ITA 1002619 +1474 Venezia ITA 277305 +2808 Bergen NOR 230948 +2807 Oslo NOR 508726 +2928 Warszawa POL 1615369 +2931 Wroclaw POL 636765 +2918 Braga PRT 90535 +2915 Porto PRT 273060 +3580 Moscow RUS 8389200 +3581 St Petersburg RUS 4694000 +3048 Stockholm SWE 750348 +3051 Uppsala SWE 189569 +explain select * from City +where +Country='FIN' AND Name IN ('Lahti','Imatra') OR +Country='RUS' AND Name IN ('St Petersburg', 'Moscow') OR +Country='SWE' AND Name IN ('Stockholm', 'Uppsala') OR +Country='DEU' AND Name IN ('Berlin', 'Bonn') OR +Country='BEL' AND Name IN ('Antwerpen', 'Gent') OR +Country='PRT' AND Name IN ('Braga', 'Porto') OR +Country='FRA' AND Name IN ('Paris', 'Marcel') OR +Country='POL' AND Name IN ('Warszawa', 'Wroclaw') OR +Country='NOR' AND Name IN ('Oslo', 'Bergen') OR +Country='ITA' AND Name IN ('Napoli', 'Venezia'); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City range CountryName,Name CountryName 38 NULL 20 Using index condition; Using where +DROP DATABASE world; set session optimizer_switch='index_merge_sort_intersection=default'; SET SESSION STORAGE_ENGINE=DEFAULT; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/range_vs_index_merge.result mariadb-10.1-10.1.30/mysql-test/r/range_vs_index_merge.result --- mariadb-10.1-10.1.25/mysql-test/r/range_vs_index_merge.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/range_vs_index_merge.result 2017-12-21 15:48:46.000000000 +0000 @@ -1807,4 +1807,85 @@ 7 Pennsylvania Harrisburg 8 Virginia Richmond DROP TABLE t1; +# +# mdev-11574: do not build index merge of two indexes when +# one index is an infix of the other index +# +set names utf8; +CREATE DATABASE world; +use world; +CREATE TABLE Country ( +Code char(3) NOT NULL default '', +Name char(52) NOT NULL default '', +SurfaceArea float(10,2) NOT NULL default '0.00', +Population int(11) NOT NULL default '0', +Capital int(11) default NULL, +PRIMARY KEY (Code), +UNIQUE INDEX (Name) +); +CREATE TABLE City ( +ID int(11) NOT NULL auto_increment, +Name char(35) NOT NULL default '', +Country char(3) NOT NULL default '', +Population int(11) NOT NULL default '0', +PRIMARY KEY (ID), +INDEX (Population), +INDEX (Country) +); +CREATE TABLE CountryLanguage ( +Country char(3) NOT NULL default '', +Language char(30) NOT NULL default '', +Percentage float(3,1) NOT NULL default '0.0', +PRIMARY KEY (Country, Language), +INDEX (Percentage) +); +DROP INDEX Country ON City; +CREATE INDEX CountryName ON City(Country,Name); +CREATE INDEX Name ON City(Name); +select * from City +where +Country='FIN' AND Name IN ('Lahti','Imatra') OR +Country='RUS' AND Name IN ('St Petersburg', 'Moscow') OR +Country='SWE' AND Name IN ('Stockholm', 'Uppsala') OR +Country='DEU' AND Name IN ('Berlin', 'Bonn') OR +Country='BEL' AND Name IN ('Antwerpen', 'Gent') OR +Country='PRT' AND Name IN ('Braga', 'Porto') OR +Country='FRA' AND Name IN ('Paris', 'Marcel') OR +Country='POL' AND Name IN ('Warszawa', 'Wroclaw') OR +Country='NOR' AND Name IN ('Oslo', 'Bergen') OR +Country='ITA' AND Name IN ('Napoli', 'Venezia'); +ID Name Country Population +175 Antwerpen BEL 446525 +176 Gent BEL 224180 +3068 Berlin DEU 3386667 +3087 Bonn DEU 301048 +3242 Lahti FIN 96921 +2974 Paris FRA 2125246 +1466 Napoli ITA 1002619 +1474 Venezia ITA 277305 +2808 Bergen NOR 230948 +2807 Oslo NOR 508726 +2928 Warszawa POL 1615369 +2931 Wroclaw POL 636765 +2918 Braga PRT 90535 +2915 Porto PRT 273060 +3580 Moscow RUS 8389200 +3581 St Petersburg RUS 4694000 +3048 Stockholm SWE 750348 +3051 Uppsala SWE 189569 +explain select * from City +where +Country='FIN' AND Name IN ('Lahti','Imatra') OR +Country='RUS' AND Name IN ('St Petersburg', 'Moscow') OR +Country='SWE' AND Name IN ('Stockholm', 'Uppsala') OR +Country='DEU' AND Name IN ('Berlin', 'Bonn') OR +Country='BEL' AND Name IN ('Antwerpen', 'Gent') OR +Country='PRT' AND Name IN ('Braga', 'Porto') OR +Country='FRA' AND Name IN ('Paris', 'Marcel') OR +Country='POL' AND Name IN ('Warszawa', 'Wroclaw') OR +Country='NOR' AND Name IN ('Oslo', 'Bergen') OR +Country='ITA' AND Name IN ('Napoli', 'Venezia'); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City range CountryName,Name CountryName 38 NULL 22 Using index condition; Using where +DROP DATABASE world; set session optimizer_switch='index_merge_sort_intersection=default'; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/read_only.result mariadb-10.1-10.1.30/mysql-test/r/read_only.result --- mariadb-10.1-10.1.25/mysql-test/r/read_only.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/read_only.result 2017-12-21 15:48:46.000000000 +0000 @@ -34,6 +34,8 @@ create temporary table t4 (a int) select * from t3; insert into t3 values(1); insert into t4 select * from t3; +create table t3 (a int); +ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement update t1,t3 set t1.a=t3.a+1 where t1.a=t3.a; ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement update t1,t3 set t3.a=t1.a+1 where t1.a=t3.a; @@ -49,6 +51,9 @@ drop table t1; insert into t1 values(1); ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement +drop temporary table if exists t1; +Warnings: +Note 1051 Unknown table 'test.t1' connection default; set global read_only=0; lock table t1 write; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/show_check.result mariadb-10.1-10.1.30/mysql-test/r/show_check.result --- mariadb-10.1-10.1.25/mysql-test/r/show_check.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/show_check.result 2017-12-21 15:48:46.000000000 +0000 @@ -962,7 +962,7 @@ def information_schema COLUMNS COLUMNS TABLE_SCHEMA TABLE_SCHEMA 253 192 4 N 1 0 33 def information_schema COLUMNS COLUMNS TABLE_NAME TABLE_NAME 253 192 2 N 1 0 33 def information_schema COLUMNS COLUMNS COLUMN_NAME COLUMN_NAME 253 192 1 N 1 0 33 -def information_schema COLUMNS COLUMNS COLUMN_DEFAULT COLUMN_DEFAULT 252 589815 0 Y 16 0 33 +def information_schema COLUMNS COLUMNS COLUMN_DEFAULT COLUMN_DEFAULT 252 589788 0 Y 16 0 33 def information_schema COLUMNS COLUMNS IS_NULLABLE IS_NULLABLE 253 9 2 N 1 0 33 def information_schema COLUMNS COLUMNS DATA_TYPE DATA_TYPE 253 192 3 N 1 0 33 def information_schema COLUMNS COLUMNS CHARACTER_SET_NAME CHARACTER_SET_NAME 253 96 0 Y 0 0 33 @@ -987,7 +987,7 @@ def information_schema COLUMNS COLUMNS COLUMN_TYPE Type 252 589815 7 N 17 0 33 def information_schema COLUMNS COLUMNS IS_NULLABLE Null 253 9 2 N 1 0 33 def information_schema COLUMNS COLUMNS COLUMN_KEY Key 253 9 3 N 1 0 33 -def information_schema COLUMNS COLUMNS COLUMN_DEFAULT Default 252 589815 0 Y 16 0 33 +def information_schema COLUMNS COLUMNS COLUMN_DEFAULT Default 252 589788 0 Y 16 0 33 def information_schema COLUMNS COLUMNS EXTRA Extra 253 81 0 N 1 0 33 Field Type Null Key Default Extra c int(11) NO PRI NULL diff -Nru mariadb-10.1-10.1.25/mysql-test/r/show_function_with_pad_char_to_full_length.result mariadb-10.1-10.1.30/mysql-test/r/show_function_with_pad_char_to_full_length.result --- mariadb-10.1-10.1.25/mysql-test/r/show_function_with_pad_char_to_full_length.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/show_function_with_pad_char_to_full_length.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,24 @@ +create function f() returns int return 1; +show function status; +Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation +T f T T T T T T T T T +set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; +show function status; +Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation +T f T T T T T T T T T +drop function f; +select @@sql_mode; +@@sql_mode +PAD_CHAR_TO_FULL_LENGTH +create function f() returns int return 1; +select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f'; +ROUTINE_NAME +f +set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; +select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f'; +ROUTINE_NAME +f +drop function f; +select @@sql_mode; +@@sql_mode +PAD_CHAR_TO_FULL_LENGTH diff -Nru mariadb-10.1-10.1.25/mysql-test/r/sp.result mariadb-10.1-10.1.30/mysql-test/r/sp.result --- mariadb-10.1-10.1.25/mysql-test/r/sp.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/sp.result 2017-12-21 15:48:46.000000000 +0000 @@ -8079,4 +8079,44 @@ CALL sp1(); drop user 'foo'@'%'; drop procedure sp1; +# +# MDEV-10972: Insert from select / view / union -- +# repeatable crash in 10.1, 10.2 Linux/Mac/Windows +# +create table t (id int auto_increment primary key); +insert into t values (9494),(9495),(9496),(9497),(9498),(9499),(9500),(9501),(9502),(9503); +create VIEW v AS +select id from t +union +select id from t +; +drop procedure if exists p; +Warnings: +Note 1305 PROCEDURE test.p does not exist +create procedure p() +insert into tmp_t select t.id from ( +select id from v +union +select id from v +) sq +inner join t on (sq.id = t.id); +CALL p(); +ERROR 42S02: Table 'test.tmp_t' doesn't exist +create table tmp_t (id int null); +CALL p(); +drop procedure p; +drop view v; +drop table t, tmp_t; +# +# MDEV-13936: Server crashes in Time_and_counter_tracker::incr_loops +# +CREATE TABLE t1 (i INT); +CREATE VIEW v1 AS SELECT * FROM t1 WHERE RAND() > 0.5; +CREATE FUNCTION f1() RETURNS INT RETURN ( SELECT MAX(i) FROM v1 ); +REPLACE INTO v1 VALUES (f1()); +ERROR HY000: The target table v1 of the INSERT is not insertable-into +SET @aux = f1(); +DROP FUNCTION f1; +DROP VIEW v1; +DROP TABLE t1; #End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/r/ssl.result mariadb-10.1-10.1.30/mysql-test/r/ssl.result --- mariadb-10.1-10.1.25/mysql-test/r/ssl.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/ssl.result 2017-12-21 15:48:46.000000000 +0000 @@ -2173,7 +2173,7 @@ still connected? still connected? create user mysqltest_1@localhost; -grant usage on mysqltest.* to mysqltest_1@localhost require cipher "EDH-RSA-DES-CBC3-SHA"; +grant usage on mysqltest.* to mysqltest_1@localhost require cipher "AES256-SHA"; Variable_name Value -Ssl_cipher EDH-RSA-DES-CBC3-SHA +Ssl_cipher AES256-SHA drop user mysqltest_1@localhost; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/strict.result mariadb-10.1-10.1.30/mysql-test/r/strict.result --- mariadb-10.1-10.1.25/mysql-test/r/strict.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/strict.result 2017-12-21 15:48:46.000000000 +0000 @@ -1240,9 +1240,9 @@ DROP TABLE t1; set @@sql_mode='traditional'; create table t1(a varchar(65537)); -ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead +ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead create table t1(a varbinary(65537)); -ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead +ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead set @@sql_mode='traditional'; create table t1(a int, b date not null); alter table t1 modify a bigint unsigned not null; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_exists2in.result mariadb-10.1-10.1.30/mysql-test/r/subselect_exists2in.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_exists2in.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_exists2in.result 2017-12-21 15:48:46.000000000 +0000 @@ -934,5 +934,42 @@ foo set optimizer_switch= @optimizer_switch_save; DROP TABLE t1; +# +# MDEV-14164: Unknown column error when adding aggregate to function +# in oracle style procedure FOR loop +# +CREATE TABLE t1(id INT, val INT); +CREATE PROCEDURE p1() +BEGIN +DECLARE cur1 CURSOR FOR SELECT * FROM ( +SELECT DISTINCT id FROM t1) a +WHERE NOT EXISTS (SELECT * FROM ( SELECT id FROM t1) b +WHERE a.id=b.id); +OPEN cur1; +CLOSE cur1; +OPEN cur1; +CLOSE cur1; +END; +// +CALL p1(); +DROP PROCEDURE p1; +DROP TABLE t1; +CREATE TABLE t1(id INT, val INT); +CREATE PROCEDURE p1() +BEGIN +SELECT * FROM (SELECT DISTINCT id FROM t1) a +WHERE NOT a.id IN (SELECT b.id FROM t1 b); +SELECT * FROM (SELECT DISTINCT id FROM t1) a +WHERE NOT EXISTS (SELECT * FROM t1 b WHERE a.id=b.id); +END; +// +CALL p1(); +id +id +CALL p1(); +id +id +DROP PROCEDURE p1; +DROP TABLE t1; # End of 10.0 tests set optimizer_switch=default; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_mat_cost_bugs.result mariadb-10.1-10.1.30/mysql-test/r/subselect_mat_cost_bugs.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_mat_cost_bugs.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_mat_cost_bugs.result 2017-12-21 15:48:46.000000000 +0000 @@ -502,3 +502,20 @@ 1 PRIMARY t1 index idx idx 5 NULL 5 Using where; Using index 2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away drop table t1; +# +# MDEV-13135: subquery with ON expression subject to +# semi-join optimizations +# +CREATE TABLE t1 (a INT); +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT a AS v_a FROM t1; +INSERT INTO t1 VALUES (1),(3); +CREATE TABLE t2 (b INT, KEY(b)); +INSERT INTO t2 VALUES (3),(4); +SELECT * FROM t1 WHERE a NOT IN ( +SELECT b FROM t2 INNER JOIN v1 ON (b IN ( SELECT a FROM t1 )) +WHERE v_a = b +); +a +1 +DROP VIEW v1; +DROP TABLE t1,t2; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_no_exists_to_in.result mariadb-10.1-10.1.30/mysql-test/r/subselect_no_exists_to_in.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_no_exists_to_in.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_no_exists_to_in.result 2017-12-21 15:48:46.000000000 +0000 @@ -4703,7 +4703,7 @@ SET SESSION sql_mode=@old_sql_mode; drop table t2, t1; drop view v1; -End of 5.0 tests. +# End of 5.0 tests. create table t_out (subcase char(3), a1 char(2), b1 char(2), c1 char(2)); create table t_in (a2 char(2), b2 char(2), c2 char(2)); @@ -5578,7 +5578,7 @@ select * from t2 where a=(select a from t1) and a='x'; ERROR 21000: Subquery returns more than 1 row drop table t1,t2; -End of 5.1 tests +# End of 5.1 tests # # Bug #11765713 58705: # OPTIMIZER LET ENGINE DEPEND ON UNINITIALIZED VALUES @@ -6188,7 +6188,7 @@ OR c_sq1_alias1.pk != @var3)) ) AS alias3; pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey DROP TABLE t1,t2; -End of 5.2 tests +# End of 5.2 tests # # BUG#779885: Crash in eliminate_item_equal with materialization=on in # @@ -7145,9 +7145,10 @@ CREATE TABLE t2 (f2 INT, KEY(f2)); INSERT INTO t2 VALUES (3); CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -3 +ERROR 42000: Can't group on 'sq' SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0; f2 3 @@ -7155,9 +7156,10 @@ count(*) 1 delete from t1; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -NULL +ERROR 42000: Can't group on 'sq' drop view v2; drop table t1,t2; # @@ -7172,6 +7174,44 @@ foo bar DROP TABLE t1; # +# MDEV-10146: Wrong result (or questionable result and behavior) +# with aggregate function in uncorrelated SELECT subquery +# +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (f2 int); +INSERT INTO t2 VALUES (3); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +( SELECT MAX(f1) FROM t2 ) +2 +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +( SELECT MAX(f1) FROM t2 ) +2 +INSERT INTO t2 VALUES (4); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +ERROR 21000: Subquery returns more than 1 row +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +ERROR 21000: Subquery returns more than 1 row +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (f1 INT, KEY(f1)) ENGINE=MyISAM; +INSERT t1 VALUES (4),(8); +CREATE TABLE t2 (f2 INT, KEY(f2)) ENGINE=MyISAM; +INSERT t2 VALUES (6); +SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +(SELECT MAX(sq.f2) FROM t1) +NULL +# +# Disable this query till MDEV-13399 is resolved +# +# INSERT t2 VALUES (9); +# --error ER_SUBQUERY_NO_1_ROW +# SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +# +drop table t1, t2; +# End of 10.0 tests +# # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops # with UNION in ALL subquery # @@ -7198,7 +7238,7 @@ f1 f2 f3 DROP TABLE t1, t2; SET NAMES default; -End of 10.1 tests +# End of 10.1 tests set optimizer_switch=default; select @@optimizer_switch like '%exists_to_in=off%'; @@optimizer_switch like '%exists_to_in=off%' diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_no_mat.result mariadb-10.1-10.1.30/mysql-test/r/subselect_no_mat.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_no_mat.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_no_mat.result 2017-12-21 15:48:46.000000000 +0000 @@ -4701,7 +4701,7 @@ SET SESSION sql_mode=@old_sql_mode; drop table t2, t1; drop view v1; -End of 5.0 tests. +# End of 5.0 tests. create table t_out (subcase char(3), a1 char(2), b1 char(2), c1 char(2)); create table t_in (a2 char(2), b2 char(2), c2 char(2)); @@ -5576,7 +5576,7 @@ select * from t2 where a=(select a from t1) and a='x'; ERROR 21000: Subquery returns more than 1 row drop table t1,t2; -End of 5.1 tests +# End of 5.1 tests # # Bug #11765713 58705: # OPTIMIZER LET ENGINE DEPEND ON UNINITIALIZED VALUES @@ -6183,7 +6183,7 @@ OR c_sq1_alias1.pk != @var3)) ) AS alias3; pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey DROP TABLE t1,t2; -End of 5.2 tests +# End of 5.2 tests # # BUG#779885: Crash in eliminate_item_equal with materialization=on in # @@ -7138,9 +7138,10 @@ CREATE TABLE t2 (f2 INT, KEY(f2)); INSERT INTO t2 VALUES (3); CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -3 +ERROR 42000: Can't group on 'sq' SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0; f2 3 @@ -7148,9 +7149,10 @@ count(*) 1 delete from t1; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -NULL +ERROR 42000: Can't group on 'sq' drop view v2; drop table t1,t2; # @@ -7165,6 +7167,44 @@ foo bar DROP TABLE t1; # +# MDEV-10146: Wrong result (or questionable result and behavior) +# with aggregate function in uncorrelated SELECT subquery +# +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (f2 int); +INSERT INTO t2 VALUES (3); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +( SELECT MAX(f1) FROM t2 ) +2 +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +( SELECT MAX(f1) FROM t2 ) +2 +INSERT INTO t2 VALUES (4); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +ERROR 21000: Subquery returns more than 1 row +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +ERROR 21000: Subquery returns more than 1 row +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (f1 INT, KEY(f1)) ENGINE=MyISAM; +INSERT t1 VALUES (4),(8); +CREATE TABLE t2 (f2 INT, KEY(f2)) ENGINE=MyISAM; +INSERT t2 VALUES (6); +SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +(SELECT MAX(sq.f2) FROM t1) +NULL +# +# Disable this query till MDEV-13399 is resolved +# +# INSERT t2 VALUES (9); +# --error ER_SUBQUERY_NO_1_ROW +# SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +# +drop table t1, t2; +# End of 10.0 tests +# # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops # with UNION in ALL subquery # @@ -7191,7 +7231,7 @@ f1 f2 f3 DROP TABLE t1, t2; SET NAMES default; -End of 10.1 tests +# End of 10.1 tests set optimizer_switch=default; select @@optimizer_switch like '%materialization=on%'; @@optimizer_switch like '%materialization=on%' diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_no_opts.result mariadb-10.1-10.1.30/mysql-test/r/subselect_no_opts.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_no_opts.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_no_opts.result 2017-12-21 15:48:46.000000000 +0000 @@ -4697,7 +4697,7 @@ SET SESSION sql_mode=@old_sql_mode; drop table t2, t1; drop view v1; -End of 5.0 tests. +# End of 5.0 tests. create table t_out (subcase char(3), a1 char(2), b1 char(2), c1 char(2)); create table t_in (a2 char(2), b2 char(2), c2 char(2)); @@ -5572,7 +5572,7 @@ select * from t2 where a=(select a from t1) and a='x'; ERROR 21000: Subquery returns more than 1 row drop table t1,t2; -End of 5.1 tests +# End of 5.1 tests # # Bug #11765713 58705: # OPTIMIZER LET ENGINE DEPEND ON UNINITIALIZED VALUES @@ -6179,7 +6179,7 @@ OR c_sq1_alias1.pk != @var3)) ) AS alias3; pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey DROP TABLE t1,t2; -End of 5.2 tests +# End of 5.2 tests # # BUG#779885: Crash in eliminate_item_equal with materialization=on in # @@ -7136,9 +7136,10 @@ CREATE TABLE t2 (f2 INT, KEY(f2)); INSERT INTO t2 VALUES (3); CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -3 +ERROR 42000: Can't group on 'sq' SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0; f2 3 @@ -7146,9 +7147,10 @@ count(*) 1 delete from t1; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -NULL +ERROR 42000: Can't group on 'sq' drop view v2; drop table t1,t2; # @@ -7163,6 +7165,44 @@ foo bar DROP TABLE t1; # +# MDEV-10146: Wrong result (or questionable result and behavior) +# with aggregate function in uncorrelated SELECT subquery +# +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (f2 int); +INSERT INTO t2 VALUES (3); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +( SELECT MAX(f1) FROM t2 ) +2 +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +( SELECT MAX(f1) FROM t2 ) +2 +INSERT INTO t2 VALUES (4); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +ERROR 21000: Subquery returns more than 1 row +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +ERROR 21000: Subquery returns more than 1 row +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (f1 INT, KEY(f1)) ENGINE=MyISAM; +INSERT t1 VALUES (4),(8); +CREATE TABLE t2 (f2 INT, KEY(f2)) ENGINE=MyISAM; +INSERT t2 VALUES (6); +SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +(SELECT MAX(sq.f2) FROM t1) +NULL +# +# Disable this query till MDEV-13399 is resolved +# +# INSERT t2 VALUES (9); +# --error ER_SUBQUERY_NO_1_ROW +# SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +# +drop table t1, t2; +# End of 10.0 tests +# # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops # with UNION in ALL subquery # @@ -7189,5 +7229,5 @@ f1 f2 f3 DROP TABLE t1, t2; SET NAMES default; -End of 10.1 tests +# End of 10.1 tests set @optimizer_switch_for_subselect_test=null; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_no_scache.result mariadb-10.1-10.1.30/mysql-test/r/subselect_no_scache.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_no_scache.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_no_scache.result 2017-12-21 15:48:46.000000000 +0000 @@ -4707,7 +4707,7 @@ SET SESSION sql_mode=@old_sql_mode; drop table t2, t1; drop view v1; -End of 5.0 tests. +# End of 5.0 tests. create table t_out (subcase char(3), a1 char(2), b1 char(2), c1 char(2)); create table t_in (a2 char(2), b2 char(2), c2 char(2)); @@ -5582,7 +5582,7 @@ select * from t2 where a=(select a from t1) and a='x'; ERROR 21000: Subquery returns more than 1 row drop table t1,t2; -End of 5.1 tests +# End of 5.1 tests # # Bug #11765713 58705: # OPTIMIZER LET ENGINE DEPEND ON UNINITIALIZED VALUES @@ -6194,7 +6194,7 @@ OR c_sq1_alias1.pk != @var3)) ) AS alias3; pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey DROP TABLE t1,t2; -End of 5.2 tests +# End of 5.2 tests # # BUG#779885: Crash in eliminate_item_equal with materialization=on in # @@ -7151,9 +7151,10 @@ CREATE TABLE t2 (f2 INT, KEY(f2)); INSERT INTO t2 VALUES (3); CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -3 +ERROR 42000: Can't group on 'sq' SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0; f2 3 @@ -7161,9 +7162,10 @@ count(*) 1 delete from t1; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -NULL +ERROR 42000: Can't group on 'sq' drop view v2; drop table t1,t2; # @@ -7178,6 +7180,44 @@ foo bar DROP TABLE t1; # +# MDEV-10146: Wrong result (or questionable result and behavior) +# with aggregate function in uncorrelated SELECT subquery +# +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (f2 int); +INSERT INTO t2 VALUES (3); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +( SELECT MAX(f1) FROM t2 ) +2 +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +( SELECT MAX(f1) FROM t2 ) +2 +INSERT INTO t2 VALUES (4); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +ERROR 21000: Subquery returns more than 1 row +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +ERROR 21000: Subquery returns more than 1 row +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (f1 INT, KEY(f1)) ENGINE=MyISAM; +INSERT t1 VALUES (4),(8); +CREATE TABLE t2 (f2 INT, KEY(f2)) ENGINE=MyISAM; +INSERT t2 VALUES (6); +SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +(SELECT MAX(sq.f2) FROM t1) +NULL +# +# Disable this query till MDEV-13399 is resolved +# +# INSERT t2 VALUES (9); +# --error ER_SUBQUERY_NO_1_ROW +# SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +# +drop table t1, t2; +# End of 10.0 tests +# # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops # with UNION in ALL subquery # @@ -7204,7 +7244,7 @@ f1 f2 f3 DROP TABLE t1, t2; SET NAMES default; -End of 10.1 tests +# End of 10.1 tests set optimizer_switch=default; select @@optimizer_switch like '%subquery_cache=on%'; @@optimizer_switch like '%subquery_cache=on%' diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_no_semijoin.result mariadb-10.1-10.1.30/mysql-test/r/subselect_no_semijoin.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_no_semijoin.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_no_semijoin.result 2017-12-21 15:48:46.000000000 +0000 @@ -4697,7 +4697,7 @@ SET SESSION sql_mode=@old_sql_mode; drop table t2, t1; drop view v1; -End of 5.0 tests. +# End of 5.0 tests. create table t_out (subcase char(3), a1 char(2), b1 char(2), c1 char(2)); create table t_in (a2 char(2), b2 char(2), c2 char(2)); @@ -5572,7 +5572,7 @@ select * from t2 where a=(select a from t1) and a='x'; ERROR 21000: Subquery returns more than 1 row drop table t1,t2; -End of 5.1 tests +# End of 5.1 tests # # Bug #11765713 58705: # OPTIMIZER LET ENGINE DEPEND ON UNINITIALIZED VALUES @@ -6179,7 +6179,7 @@ OR c_sq1_alias1.pk != @var3)) ) AS alias3; pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey DROP TABLE t1,t2; -End of 5.2 tests +# End of 5.2 tests # # BUG#779885: Crash in eliminate_item_equal with materialization=on in # @@ -7136,9 +7136,10 @@ CREATE TABLE t2 (f2 INT, KEY(f2)); INSERT INTO t2 VALUES (3); CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -3 +ERROR 42000: Can't group on 'sq' SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0; f2 3 @@ -7146,9 +7147,10 @@ count(*) 1 delete from t1; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -NULL +ERROR 42000: Can't group on 'sq' drop view v2; drop table t1,t2; # @@ -7163,6 +7165,44 @@ foo bar DROP TABLE t1; # +# MDEV-10146: Wrong result (or questionable result and behavior) +# with aggregate function in uncorrelated SELECT subquery +# +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (f2 int); +INSERT INTO t2 VALUES (3); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +( SELECT MAX(f1) FROM t2 ) +2 +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +( SELECT MAX(f1) FROM t2 ) +2 +INSERT INTO t2 VALUES (4); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +ERROR 21000: Subquery returns more than 1 row +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +ERROR 21000: Subquery returns more than 1 row +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (f1 INT, KEY(f1)) ENGINE=MyISAM; +INSERT t1 VALUES (4),(8); +CREATE TABLE t2 (f2 INT, KEY(f2)) ENGINE=MyISAM; +INSERT t2 VALUES (6); +SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +(SELECT MAX(sq.f2) FROM t1) +NULL +# +# Disable this query till MDEV-13399 is resolved +# +# INSERT t2 VALUES (9); +# --error ER_SUBQUERY_NO_1_ROW +# SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +# +drop table t1, t2; +# End of 10.0 tests +# # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops # with UNION in ALL subquery # @@ -7189,6 +7229,6 @@ f1 f2 f3 DROP TABLE t1, t2; SET NAMES default; -End of 10.1 tests +# End of 10.1 tests set @optimizer_switch_for_subselect_test=null; set @join_cache_level_for_subselect_test=NULL; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect_nulls.result mariadb-10.1-10.1.30/mysql-test/r/subselect_nulls.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect_nulls.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect_nulls.result 2017-12-21 15:48:46.000000000 +0000 @@ -115,3 +115,9 @@ set optimizer_switch= @tmp_subselect_nulls; drop table x1; drop table x2; +select (select 1, 2) in (select 3, 4); +(select 1, 2) in (select 3, 4) +0 +select (select NULL, NULL) in (select 3, 4); +(select NULL, NULL) in (select 3, 4) +NULL diff -Nru mariadb-10.1-10.1.25/mysql-test/r/subselect.result mariadb-10.1-10.1.30/mysql-test/r/subselect.result --- mariadb-10.1-10.1.25/mysql-test/r/subselect.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/subselect.result 2017-12-21 15:48:46.000000000 +0000 @@ -4701,7 +4701,7 @@ SET SESSION sql_mode=@old_sql_mode; drop table t2, t1; drop view v1; -End of 5.0 tests. +# End of 5.0 tests. create table t_out (subcase char(3), a1 char(2), b1 char(2), c1 char(2)); create table t_in (a2 char(2), b2 char(2), c2 char(2)); @@ -5576,7 +5576,7 @@ select * from t2 where a=(select a from t1) and a='x'; ERROR 21000: Subquery returns more than 1 row drop table t1,t2; -End of 5.1 tests +# End of 5.1 tests # # Bug #11765713 58705: # OPTIMIZER LET ENGINE DEPEND ON UNINITIALIZED VALUES @@ -6188,7 +6188,7 @@ OR c_sq1_alias1.pk != @var3)) ) AS alias3; pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey DROP TABLE t1,t2; -End of 5.2 tests +# End of 5.2 tests # # BUG#779885: Crash in eliminate_item_equal with materialization=on in # @@ -7145,9 +7145,10 @@ CREATE TABLE t2 (f2 INT, KEY(f2)); INSERT INTO t2 VALUES (3); CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -3 +ERROR 42000: Can't group on 'sq' SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0; f2 3 @@ -7155,9 +7156,10 @@ count(*) 1 delete from t1; +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +ERROR 42000: Can't group on 'sq' SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; -sq -NULL +ERROR 42000: Can't group on 'sq' drop view v2; drop table t1,t2; # @@ -7172,6 +7174,44 @@ foo bar DROP TABLE t1; # +# MDEV-10146: Wrong result (or questionable result and behavior) +# with aggregate function in uncorrelated SELECT subquery +# +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (f2 int); +INSERT INTO t2 VALUES (3); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +( SELECT MAX(f1) FROM t2 ) +2 +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +( SELECT MAX(f1) FROM t2 ) +2 +INSERT INTO t2 VALUES (4); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +ERROR 21000: Subquery returns more than 1 row +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; +ERROR 21000: Subquery returns more than 1 row +drop view v1; +drop table t1,t2; +CREATE TABLE t1 (f1 INT, KEY(f1)) ENGINE=MyISAM; +INSERT t1 VALUES (4),(8); +CREATE TABLE t2 (f2 INT, KEY(f2)) ENGINE=MyISAM; +INSERT t2 VALUES (6); +SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +(SELECT MAX(sq.f2) FROM t1) +NULL +# +# Disable this query till MDEV-13399 is resolved +# +# INSERT t2 VALUES (9); +# --error ER_SUBQUERY_NO_1_ROW +# SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +# +drop table t1, t2; +# End of 10.0 tests +# # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops # with UNION in ALL subquery # @@ -7198,4 +7238,4 @@ f1 f2 f3 DROP TABLE t1, t2; SET NAMES default; -End of 10.1 tests +# End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/r/symlink.result mariadb-10.1-10.1.30/mysql-test/r/symlink.result --- mariadb-10.1-10.1.25/mysql-test/r/symlink.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/symlink.result 2017-12-21 15:48:46.000000000 +0000 @@ -227,3 +227,15 @@ CREATE TABLE test.t1(id INT(11)) ENGINE MYISAM DATA DIRECTORY "MYSQLTEST_VARDIR/tmp"; DROP TABLE test.t1; +use test; +create table t1(c1 int, c2 int, c3 varchar(100)) engine=MyISAM data directory='MYSQL_TMP_DIR' index directory = 'MYSQL_TMP_DIR'; +insert t1 values (1,2,3), (2,3,4), (3,4,5), (4,5,6), (5,6,7), (6,7,8), (7,8,9); +alter online table t1 delay_key_write=1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` int(11) DEFAULT NULL, + `c3` varchar(100) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 DELAY_KEY_WRITE=1 DATA DIRECTORY='MYSQL_TMP_DIR/' INDEX DIRECTORY='MYSQL_TMP_DIR/' +drop table t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/tc_heuristic_recover.result mariadb-10.1-10.1.30/mysql-test/r/tc_heuristic_recover.result --- mariadb-10.1-10.1.25/mysql-test/r/tc_heuristic_recover.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/tc_heuristic_recover.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,37 @@ +call mtr.add_suppression("Can't init tc log"); +call mtr.add_suppression("Found 1 prepared transactions!"); +call mtr.add_suppression("Aborting"); +set debug_sync='RESET'; +CREATE TABLE t1 (i INT) ENGINE=InnoDB; +SET GLOBAL innodb_flush_log_at_trx_commit=1; +FLUSH TABLES; +set debug_sync='ha_commit_trans_after_prepare WAIT_FOR go'; +INSERT INTO t1 VALUES (1);; +# Prove that no COMMIT or ROLLBACK occurred yet. +SELECT * FROM t1; +i +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SELECT * FROM t1; +i +1 +# Kill the server +FOUND 1 /was in the XA prepared state/ in mysqld.1.err +FOUND 1 /Found 1 prepared transactions!/ in mysqld.1.err +NOT FOUND /\[ERROR\] Can\'t init tc log/ in mysqld.1.err +FOUND 2 /was in the XA prepared state/ in mysqld.1.err +FOUND 1 /Found 1 prepared transactions!/ in mysqld.1.err +FOUND 1 /\[ERROR\] Can\'t init tc log/ in mysqld.1.err +FOUND 1 /Please restart mysqld without --tc-heuristic-recover/ in mysqld.1.err +FOUND 3 /was in the XA prepared state/ in mysqld.1.err +FOUND 1 /Found 1 prepared transactions!/ in mysqld.1.err +FOUND 2 /\[ERROR\] Can\'t init tc log/ in mysqld.1.err +FOUND 2 /Please restart mysqld without --tc-heuristic-recover/ in mysqld.1.err +FOUND 3 /was in the XA prepared state/ in mysqld.1.err +FOUND 1 /Found 1 prepared transactions!/ in mysqld.1.err +SET TRANSACTION ISOLATION LEVEL READ COMMITTED; +SELECT * FROM t1; +i +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SELECT * FROM t1; +i +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/trigger.result mariadb-10.1-10.1.30/mysql-test/r/trigger.result --- mariadb-10.1-10.1.25/mysql-test/r/trigger.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/trigger.result 2017-12-21 15:48:46.000000000 +0000 @@ -2290,3 +2290,20 @@ ERROR 22001: Data too long for column 'c' at row 1 DROP TRIGGER t1_bi; DROP TABLE t1; +# +# MDEV-13936: Server crashes in Time_and_counter_tracker::incr_loops +# +CREATE TABLE t1 (i INT); +CREATE VIEW v1 AS SELECT * FROM t1 WHERE RAND() > 0.5; +CREATE TABLE t2 (a int); +CREATE TABLE t3 (a int); +create trigger trg after insert on t2 for each row +INSERT INTO t3 SELECT MAX(i) FROM v1 UNION SELECT MAX(i) FROM v1; +drop table t1; +insert into t2 value (2); +ERROR 42S02: Table 'test.t1' doesn't exist +CREATE TABLE t1 (i INT); +insert into t2 value (2); +DROP VIEW v1; +DROP TABLE t1,t2,t3; +End of 10.1 tests. diff -Nru mariadb-10.1-10.1.25/mysql-test/r/type_bit.result mariadb-10.1-10.1.30/mysql-test/r/type_bit.result --- mariadb-10.1-10.1.25/mysql-test/r/type_bit.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/type_bit.result 2017-12-21 15:48:46.000000000 +0000 @@ -806,3 +806,27 @@ NULL DROP TABLE t1; End of 5.1 tests +# +# Start of 10.1 tests +# +# +# MDEV-8867 Wrong field type or metadata for COALESCE(bit_column, 1) +# +CREATE TABLE t1 (val bit(1)); +INSERT INTO t1 VALUES (0); +CREATE TABLE t2 AS SELECT COALESCE(val, 1) AS c FROM t1; +SELECT * FROM t2; +c +0 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c` decimal(1,0) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t2; +SELECT COALESCE(val, 1) FROM t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def COALESCE(val, 1) 246 2 1 Y 32896 0 63 +COALESCE(val, 1) +0 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/type_blob.result mariadb-10.1-10.1.30/mysql-test/r/type_blob.result --- mariadb-10.1-10.1.25/mysql-test/r/type_blob.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/type_blob.result 2017-12-21 15:48:46.000000000 +0000 @@ -37,7 +37,7 @@ CREATE TABLE t2 (a char(256)); ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT instead CREATE TABLE t1 (a varchar(70000) default "hello"); -ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead +ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead CREATE TABLE t2 (a blob default "hello"); ERROR 42000: BLOB/TEXT column 'a' can't have a default value drop table if exists t1,t2; diff -Nru mariadb-10.1-10.1.25/mysql-test/r/type_date.result mariadb-10.1-10.1.30/mysql-test/r/type_date.result --- mariadb-10.1-10.1.25/mysql-test/r/type_date.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/type_date.result 2017-12-21 15:48:46.000000000 +0000 @@ -843,5 +843,16 @@ Warning 1292 Incorrect datetime value: '1' DROP TABLE t1; # +# MDEV-14221 Assertion `0' failed in Item::field_type_for_temporal_comparison +# +CREATE TABLE t1 (d DATE); +INSERT INTO t1 VALUES ('1985-05-13'),('1989-12-24'); +SELECT d, COUNT(*) FROM t1 GROUP BY d WITH ROLLUP HAVING CASE d WHEN '2017-05-25' THEN 0 ELSE 1 END; +d COUNT(*) +1985-05-13 1 +1989-12-24 1 +NULL 2 +DROP TABLE t1; +# # End of 10.1 tests # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/type_varchar.result mariadb-10.1-10.1.30/mysql-test/r/type_varchar.result --- mariadb-10.1-10.1.25/mysql-test/r/type_varchar.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/type_varchar.result 2017-12-21 15:48:46.000000000 +0000 @@ -513,7 +513,76 @@ Warning 1292 Truncated incorrect DOUBLE value: ' ' DROP TABLE t1; # -# Start of 10.0 tests +# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +# +CREATE TABLE t1 (c1 VARBINARY(65532)); +DESCRIBE t1; +Field Type Null Key Default Extra +c1 varbinary(65532) YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARBINARY(65533)); +Warnings: +Note 1246 Converting column 'c1' from VARBINARY to BLOB +DESCRIBE t1; +Field Type Null Key Default Extra +c1 blob YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARBINARY(65534)); +Warnings: +Note 1246 Converting column 'c1' from VARBINARY to BLOB +DESCRIBE t1; +Field Type Null Key Default Extra +c1 blob YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARBINARY(65535)); +Warnings: +Note 1246 Converting column 'c1' from VARBINARY to BLOB +DESCRIBE t1; +Field Type Null Key Default Extra +c1 blob YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARBINARY(65536)); +Warnings: +Note 1246 Converting column 'c1' from VARBINARY to BLOB +DESCRIBE t1; +Field Type Null Key Default Extra +c1 mediumblob YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(65532)); +DESCRIBE t1; +Field Type Null Key Default Extra +c1 varchar(65532) YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(65533)); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 text YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(65534)); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 text YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(65535)); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 text YES NULL +DROP TABLE t1; +CREATE TABLE t1 (c1 VARCHAR(65536)); +Warnings: +Note 1246 Converting column 'c1' from VARCHAR to TEXT +DESCRIBE t1; +Field Type Null Key Default Extra +c1 mediumtext YES NULL +DROP TABLE t1; +# +# End of 5.5 tests # # # MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns diff -Nru mariadb-10.1-10.1.25/mysql-test/r/union.result mariadb-10.1-10.1.30/mysql-test/r/union.result --- mariadb-10.1-10.1.25/mysql-test/r/union.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/union.result 2017-12-21 15:48:46.000000000 +0000 @@ -2051,6 +2051,24 @@ 2016-06-04 00:00:00 drop table t1; End of 5.0 tests +create table t1 (a int, b int); +insert into t1 values (1,1),(2,2),(3,3); +create table t2 (c varchar(30), d varchar(30)); +insert into t1 values ('1','1'),('2','2'),('4','4'); +create table t3 (e int, f int); +insert into t3 values (1,1),(2,2),(31,31),(32,32); +select e,f, (e , f) in (select e,b from t1 union select c,d from t2) as sub from t3; +e f sub +1 1 1 +2 2 1 +31 31 0 +32 32 0 +select avg(f), (e , f) in (select e,b from t1 union select c,d from t2) as sub from t3 group by sub; +avg(f) sub +31.5000 0 +1.5000 1 +drop table t1,t2,t3; +End of 5.5 tests # # WL#1763 Avoid creating temporary table in UNION ALL # diff -Nru mariadb-10.1-10.1.25/mysql-test/r/user_var.result mariadb-10.1-10.1.30/mysql-test/r/user_var.result --- mariadb-10.1-10.1.25/mysql-test/r/user_var.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/user_var.result 2017-12-21 15:48:46.000000000 +0000 @@ -1,4 +1,3 @@ -drop table if exists t1,t2; set @a := foo; ERROR 42S22: Unknown column 'foo' in 'field list' set @a := connection_id() + 3; @@ -126,14 +125,14 @@ set @a=0; select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i; @a @a:="hello" @a @a:=3 @a @a:="hello again" -0 hello 0 3 3 hello again -0 hello 0 3 3 hello again -0 hello 0 3 3 hello again +0 hello 0 3 0 hello again +0 hello 0 3 0 hello again +0 hello 0 3 0 hello again select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i; @a @a:="hello" @a @a:=3 @a @a:="hello again" -hello again hello hello 3 3 hello again -hello again hello hello 3 3 hello again -hello again hello hello 3 3 hello again +hello again hello hello again 3 hello again hello again +hello again hello hello again 3 hello again hello again +hello again hello hello again 3 hello again hello again drop table t1; set @a=_latin2'test'; select charset(@a),collation(@a),coercibility(@a); @@ -570,3 +569,6 @@ # set @var= repeat('a',20000); 1 +explain select @a:=max(seq) from seq_1_to_1000000; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away diff -Nru mariadb-10.1-10.1.25/mysql-test/r/variables.result mariadb-10.1-10.1.30/mysql-test/r/variables.result --- mariadb-10.1-10.1.25/mysql-test/r/variables.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/variables.result 2017-12-21 15:48:46.000000000 +0000 @@ -1544,7 +1544,7 @@ 1 explain SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); id select_type table type possible_keys key key_len ref rows Extra -1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using where SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); one @@ -1555,7 +1555,7 @@ set sql_buffer_result=1; explain SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); id select_type table type possible_keys key key_len ref rows Extra -1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using temporary 2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using where SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); one diff -Nru mariadb-10.1-10.1.25/mysql-test/r/view.result mariadb-10.1-10.1.30/mysql-test/r/view.result --- mariadb-10.1-10.1.25/mysql-test/r/view.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/r/view.result 2017-12-21 15:48:46.000000000 +0000 @@ -5651,6 +5651,31 @@ Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t3`.`e` AS `e`,`test`.`t3`.`f` AS `f` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(((`test`.`t2`.`c` = `test`.`t1`.`b`) and (`test`.`t3`.`f` = `test`.`t1`.`a`) and (`test`.`t2`.`d` = `test`.`t3`.`e`) and (`test`.`t1`.`a` is not null) and (`test`.`t1`.`a` is not null) and (`test`.`t1`.`b` is not null))) where (`test`.`t1`.`a` < 5) drop view v1; drop table t1,t2,t3; +# +# MDEV-11240: Server crashes in check_view_single_update or +# Assertion `derived->table' failed in mysql_derived_merge_for_insert +# +CREATE TABLE t3 (a INT); +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT t2.a FROM t3 AS t1, t3 AS t2; +CREATE ALGORITHM = MERGE VIEW v2 AS SELECT * FROM v1; +PREPARE stmt FROM 'REPLACE INTO v2 SELECT a FROM t3'; +ERROR HY000: Can not insert into join view 'test.v2' without fields list +drop view v1,v2; +drop table t3; +# +# MDEV-14619: VIEW and GROUP_CONCAT +# +CREATE TABLE t1 (str text); +INSERT INTO t1 VALUES ("My"),("SQL"); +CREATE VIEW v1 AS SELECT GROUP_CONCAT(str SEPARATOR '\\') FROM t1; +SELECT * FROM v1; +GROUP_CONCAT(str SEPARATOR '\\') +My\SQL +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select group_concat(`t1`.`str` separator '\\') AS `GROUP_CONCAT(str SEPARATOR '\\')` from `t1` latin1 latin1_swedish_ci +drop view v1; +drop table t1; # ----------------------------------------------------------------- # -- End of 5.5 tests. # ----------------------------------------------------------------- diff -Nru mariadb-10.1-10.1.25/mysql-test/README mariadb-10.1-10.1.30/mysql-test/README --- mariadb-10.1-10.1.25/mysql-test/README 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/README 2017-12-21 15:48:45.000000000 +0000 @@ -1,74 +1,93 @@ -This directory contains a test suite for the MySQL daemon. To run -the currently existing test cases, simply execute ./mysql-test-run in -this directory. It will fire up the newly built mysqld and test it. - -Note that you do not have to have to do "make install", and you could -actually have a co-existing MySQL installation. The tests will not -conflict with it. To run the test suite in a source directory, you -must do make first. - -All tests must pass. If one or more of them fail on your system, please -read the following manual section for instructions on how to report the -problem: +This directory contains test suites for the MariaDB server. To run +currently existing test cases, execute ./mysql-test-run in this directory. + +Some tests are known to fail on some platforms or be otherwise unreliable. +The file "unstable-tests" contains the list of such tests along with +a comment for every test. +To exclude them from the test run, execute + # ./mysql-test-run --skip-test-list=unstable-tests + +In general you do not have to have to do "make install", and you can have +a co-existing MariaDB installation, the tests will not conflict with it. +To run the tests in a source directory, you must do "make" first. + +In Red Hat distributions, you should run the script as user "mysql". +The user is created with nologin shell, so the best bet is something like + # su - + # cd /usr/share/mysql-test + # su -s /bin/bash mysql -c "./mysql-test-run --skip-test-list=unstable-tests" + +This will use the installed MariaDB executables, but will run a private +copy of the server process (using data files within /usr/share/mysql-test), +so you need not start the mysqld service beforehand. + +You can omit --skip-test-list option if you want to check whether +the listed failures occur for you. + +To clean up afterwards, remove the created "var" subdirectory, e.g. + # su -s /bin/bash - mysql -c "rm -rf /usr/share/mysql-test/var" + +If one or more tests fail on your system on reasons other than listed +in lists of unstable tests, please read the following manual section +for instructions on how to report the problem: https://mariadb.com/kb/en/reporting-bugs If you want to use an already running MySQL server for specific tests, use the --extern option to mysql-test-run. Please note that in this mode, -the test suite expects you to provide the names of the tests to run. +you are expected to provide names of the tests to run. + For example, here is the command to run the "alias" and "analyze" tests with an external server: -mysql-test-run --extern socket=/tmp/mysql.sock alias analyze + # mysql-test-run --extern socket=/tmp/mysql.sock alias analyze -To match your setup, you might also need to provide --socket, --user, and -other relevant options. +To match your setup, you might need to provide other relevant options. -With no test cases named on the command line, mysql-test-run falls back -to the normal "non-extern" behavior. The reason for this is that some -tests cannot run with an external server. +With no test names on the command line, mysql-test-run will attempt +to execute the default set of tests, which will certainly fail, because +many tests cannot run with an external server (they need to control the +options with which the server is started, restart the server during +execution, etc.) You can create your own test cases. To create a test case, create a new file in the t subdirectory using a text editor. The file should have a .test extension. For example: - xemacs t/test_case_name.test + # xemacs t/test_case_name.test - In the file, put a set of SQL statements that create some tables, - load test data, and run some queries to manipulate it. +In the file, put a set of SQL statements that create some tables, +load test data, and run some queries to manipulate it. - We would appreciate it if you name your test tables t1, t2, t3 ... (to not - conflict too much with existing tables). +Your test should begin by dropping the tables you are going to create and +end by dropping them again. This ensures that you can run the test over +and over again. - Your test should begin by dropping the tables you are going to create and - end by dropping them again. This ensures that you can run the test over - and over again. - - If you are using mysqltest commands (like result file names) in your - test case, you should create the result file as follows: +If you are using mysqltest commands in your test case, you should create +the result file as follows: - mysql-test-run --record test_case_name + # mysql-test-run --record test_case_name - or + or - mysqltest --record < t/test_case_name.test + # mysqltest --record < t/test_case_name.test - If you only have a simple test cases consisting of SQL statements and - comments, you can create the test case in one of the following ways: +If you only have a simple test case consisting of SQL statements and +comments, you can create the result file in one of the following ways: - mysql-test-run --record test_case_name + # mysql-test-run --record test_case_name - mysql test < t/test_case_name.test > r/test_case_name.result + # mysql test < t/test_case_name.test > r/test_case_name.result - mysqltest --record --database test --result-file=r/test_case_name.result < t/test_case_name.test + # mysqltest --record --database test --result-file=r/test_case_name.result < t/test_case_name.test - When this is done, take a look at r/test_case_name.result - - If the result is incorrect, you have found a bug. In this case, you should - edit the test result to the correct results so that we can verify - that the bug is corrected in future releases. +When this is done, take a look at r/test_case_name.result . +If the result is incorrect, you have found a bug. In this case, you should +edit the test result to the correct results so that we can verify that +the bug is corrected in future releases. If you want to submit your test case you can send it -to maria-developers@lists.launchpad.com or attach it to a bug report on +to maria-developers@lists.launchpad.net or attach it to a bug report on http://mariadb.org/jira/. If the test case is really big or if it contains 'not public' data, diff -Nru mariadb-10.1-10.1.25/mysql-test/std_data/loadxml.dat mariadb-10.1-10.1.30/mysql-test/std_data/loadxml.dat --- mariadb-10.1-10.1.25/mysql-test/std_data/loadxml.dat 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/std_data/loadxml.dat 2017-12-21 15:48:46.000000000 +0000 @@ -9,19 +9,19 @@ 1 - b1 + b1 2 - b2 + b2 3 - b3 + b3 11 - b11 + b11 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/archive/archive_gis.result mariadb-10.1-10.1.30/mysql-test/suite/archive/archive_gis.result --- mariadb-10.1-10.1.25/mysql-test/suite/archive/archive_gis.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/archive/archive_gis.result 2017-12-21 15:48:46.000000000 +0000 @@ -326,8 +326,8 @@ 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid; fid AsText(Centroid(g)) -117 POINT(55.58852775304245 17.426536064113982) -118 POINT(55.58852775304245 17.426536064113982) +117 POINT(57.98031067576927 17.854754130800433) +118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid; fid Area(g) diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_flush_binlogs_delete_domain.result mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_flush_binlogs_delete_domain.result --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_flush_binlogs_delete_domain.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_flush_binlogs_delete_domain.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,78 @@ +RESET MASTER; +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (); +and the command execution is effective thence rotates binlog as usual +show binary logs; +Log_name File_size +master-bin.000001 # +master-bin.000002 # +Non-existed domain is warned, the command completes without rotation +but with a warning +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99); +Warnings: +Warning 1076 The gtid domain being deleted ('99') is not in the current binlog state +show binary logs; +Log_name File_size +master-bin.000001 # +master-bin.000002 # +SET @@SESSION.gtid_domain_id=1; +SET @@SESSION.server_id=1; +CREATE TABLE t (a int); +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); +ERROR HY000: Could not delete gtid domain. Reason: binlog files may contain gtids from the domain ('1') being deleted. Make sure to first purge those files. +FLUSH BINARY LOGS; +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); +ERROR HY000: Could not delete gtid domain. Reason: binlog files may contain gtids from the domain ('1') being deleted. Make sure to first purge those files. +PURGE BINARY LOGS TO 'master-bin.000003';; +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); +Gtid_list of the current binlog does not contain '1': +show binlog events in 'master-bin.000004' limit 1,1; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000004 # Gtid_list 1 # [] +But the previous log's Gtid_list may have it which explains a warning from the following command +show binlog events in 'master-bin.000003' limit 1,1; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000003 # Gtid_list 1 # [1-1-1] +Already deleted domain in Gtid_list of the earliest log is benign +but may cause a warning +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); +Warnings: +Warning 1076 The current gtid binlog state is incompatible with a former one missing gtids from the '1-1' domain-server pair which is referred to in the gtid list describing an earlier state. Ignore if the domain ('1') was already explicitly deleted. +Warning 1076 The gtid domain being deleted ('1') is not in the current binlog state +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0); +ERROR HY000: Could not delete gtid domain. Reason: binlog files may contain gtids from the domain ('1') being deleted. Make sure to first purge those files. +FLUSH BINARY LOGS; +PURGE BINARY LOGS TO 'master-bin.000005'; +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0); +Warnings: +Warning 1076 The gtid domain being deleted ('0') is not in the current binlog state +Gtid_list of the current binlog does not contain 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0: +show binlog events in 'master-bin.000006' limit 1,1; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000006 # Gtid_list 1 # [] +SET @@SESSION.gtid_domain_id=1;; +SET @@SESSION.server_id=1; +SET @@SESSION.gtid_seq_no=1; +INSERT INTO t SET a=1; +SET @@SESSION.server_id=2; +SET @@SESSION.gtid_seq_no=2; +INSERT INTO t SET a=2; +SET @@SESSION.gtid_domain_id=11; +SET @@SESSION.server_id=11; +SET @@SESSION.gtid_seq_no=11; +INSERT INTO t SET a=11; +SET @gtid_binlog_state_saved=@@GLOBAL.gtid_binlog_state; +FLUSH BINARY LOGS; +SET @@SESSION.gtid_domain_id=11; +SET @@SESSION.server_id=11; +SET @@SESSION.gtid_seq_no=1; +INSERT INTO t SET a=1; +SELECT @gtid_binlog_state_saved "as original state", @@GLOBAL.gtid_binlog_state as "out of order for 11 domain state"; +as original state out of order for 11 domain state +1-1-1,1-2-2,11-11-11 1-1-1,1-2-2,11-11-1 +PURGE BINARY LOGS TO 'master-bin.000007'; +the following command succeeds with warnings +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); +Warnings: +Warning 1076 The current gtid binlog state is incompatible with a former one having a gtid '11-11-1' which is less than the '11-11-11' of the gtid list describing an earlier state. The state may have been affected by manually injecting a lower sequence number gtid or via replication. +DROP TABLE t; +RESET MASTER; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_gtid_delete_domain_debug.result mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_gtid_delete_domain_debug.result --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_gtid_delete_domain_debug.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_gtid_delete_domain_debug.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,6 @@ +SET @@SESSION.debug_dbug='+d,inject_binlog_delete_domain_init_error'; +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99); +ERROR HY000: Could not delete gtid domain. Reason: injected error. +SHOW WARNINGS; +Level Code Message +Error 1076 Could not delete gtid domain. Reason: injected error. diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_row.result mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_row.result --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_row.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_row.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,94 @@ +RESET MASTER; +CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +/* GTID */ INSERT INTO t1 VALUES (1,0); +/* GTID */ BEGIN; +/* GTID */ INSERT INTO t1 VALUES (2,0); +/* GTID */ ALTER TABLE t1 ADD c INT; +/* GTID */ INSERT INTO t1 VALUES (3,0,0); +/* GTID */ COMMIT; +/* GTID */ BEGIN; +/* GTID */ UPDATE t1 SET b=1, c=1 WHERE a=2; +/* GTID */ CREATE TEMPORARY TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +/* GTID */ INSERT INTO t2 VALUES (4,10), (5,20); +/* GTID */ INSERT INTO t1 SELECT a, 2, b FROM t2; +/* GTID */ DROP TEMPORARY TABLE t2; +/* GTID */ INSERT INTO t1 VALUES (6, 3, 0); +/* GTID */ COMMIT; +/* GTID */ CREATE TEMPORARY TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ BEGIN; +/* GTID */ DELETE FROM t1 WHERE a=5; +/* GTID */ INSERT INTO t3 VALUES (7); +/* GTID */ INSERT INTO t1 SELECT a, 4, 0 FROM t3; +/* GTID */ UPDATE t1 SET c=1 WHERE a=7; +/* GTID */ DROP TEMPORARY TABLE t3; +/* GTID */ COMMIT; +/* GTID */ CREATE TEMPORARY TABLE t4 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ BEGIN; +/* GTID */ INSERT INTO t1 VALUES (8, 5, 0); +/* GTID */ ALTER TABLE t4 ADD b INT; +/* GTID */ INSERT INTO t1 VALUES (9, 5, 1); +/* GTID */ COMMIT; +/* GTID */ INSERT INTO t1 VALUES (10, 6, 0); +/* GTID */ BEGIN; +/* GTID */ CREATE TEMPORARY TABLE t5 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ INSERT INTO t1 VALUES (11, 7, 0); +/* GTID */ COMMIT; +FLUSH LOGS; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +/* GTID */ ALTER TABLE t1 ADD c INT +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Update_rows: table id # flags: STMT_END_F +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Delete_rows: table id # flags: STMT_END_F +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Update_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +# server id 1 end_log_pos # Table_map: `test`.`t1` mapped to number # +# server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t5` +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_stm_mix.result mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_stm_mix.result --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_stm_mix.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_parallel_replication_marks_stm_mix.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,93 @@ +RESET MASTER; +CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +/* GTID */ INSERT INTO t1 VALUES (1,0); +/* GTID */ BEGIN; +/* GTID */ INSERT INTO t1 VALUES (2,0); +/* GTID */ ALTER TABLE t1 ADD c INT; +/* GTID */ INSERT INTO t1 VALUES (3,0,0); +/* GTID */ COMMIT; +/* GTID */ BEGIN; +/* GTID */ UPDATE t1 SET b=1, c=1 WHERE a=2; +/* GTID */ CREATE TEMPORARY TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +/* GTID */ INSERT INTO t2 VALUES (4,10), (5,20); +/* GTID */ INSERT INTO t1 SELECT a, 2, b FROM t2; +/* GTID */ DROP TEMPORARY TABLE t2; +/* GTID */ INSERT INTO t1 VALUES (6, 3, 0); +/* GTID */ COMMIT; +/* GTID */ CREATE TEMPORARY TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ BEGIN; +/* GTID */ DELETE FROM t1 WHERE a=5; +/* GTID */ INSERT INTO t3 VALUES (7); +/* GTID */ INSERT INTO t1 SELECT a, 4, 0 FROM t3; +/* GTID */ UPDATE t1 SET c=1 WHERE a=7; +/* GTID */ DROP TEMPORARY TABLE t3; +/* GTID */ COMMIT; +/* GTID */ CREATE TEMPORARY TABLE t4 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ BEGIN; +/* GTID */ INSERT INTO t1 VALUES (8, 5, 0); +/* GTID */ ALTER TABLE t4 ADD b INT; +/* GTID */ INSERT INTO t1 VALUES (9, 5, 1); +/* GTID */ COMMIT; +/* GTID */ INSERT INTO t1 VALUES (10, 6, 0); +/* GTID */ BEGIN; +/* GTID */ CREATE TEMPORARY TABLE t5 (a INT PRIMARY KEY) ENGINE=InnoDB; +/* GTID */ INSERT INTO t1 VALUES (11, 7, 0); +/* GTID */ COMMIT; +FLUSH LOGS; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +/* GTID */ INSERT INTO t1 VALUES (1,0) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +/* GTID */ INSERT INTO t1 VALUES (2,0) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +/* GTID */ ALTER TABLE t1 ADD c INT +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +/* GTID */ INSERT INTO t1 VALUES (3,0,0) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +BEGIN +/* GTID */ UPDATE t1 SET b=1, c=1 WHERE a=2 +/* GTID */ CREATE TEMPORARY TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB +/* GTID */ INSERT INTO t2 VALUES (4,10), (5,20) +/* GTID */ INSERT INTO t1 SELECT a, 2, b FROM t2 +DROP TEMPORARY TABLE `t2` /* generated by server */ +/* GTID */ INSERT INTO t1 VALUES (6, 3, 0) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +/* GTID */ CREATE TEMPORARY TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB +# server id 1 end_log_pos # GTID #-#-# ddl +BEGIN +/* GTID */ DELETE FROM t1 WHERE a=5 +/* GTID */ INSERT INTO t3 VALUES (7) +/* GTID */ INSERT INTO t1 SELECT a, 4, 0 FROM t3 +/* GTID */ UPDATE t1 SET c=1 WHERE a=7 +DROP TEMPORARY TABLE `t3` /* generated by server */ +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +/* GTID */ CREATE TEMPORARY TABLE t4 (a INT PRIMARY KEY) ENGINE=InnoDB +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +/* GTID */ INSERT INTO t1 VALUES (8, 5, 0) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +/* GTID */ ALTER TABLE t4 ADD b INT +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +/* GTID */ INSERT INTO t1 VALUES (9, 5, 1) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# trans +BEGIN +/* GTID */ INSERT INTO t1 VALUES (10, 6, 0) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +BEGIN +/* GTID */ CREATE TEMPORARY TABLE t5 (a INT PRIMARY KEY) ENGINE=InnoDB +/* GTID */ INSERT INTO t1 VALUES (11, 7, 0) +COMMIT/*!*/; +# server id 1 end_log_pos # GTID #-#-# ddl +DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t5` +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_unsafe.result mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_unsafe.result --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/r/binlog_unsafe.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/r/binlog_unsafe.result 2017-12-21 15:48:46.000000000 +0000 @@ -1,14 +1,14 @@ #### Setup tables #### -CREATE TABLE t0 (a CHAR(100)); -CREATE TABLE t1 (a CHAR(100)); -CREATE TABLE t2 (a CHAR(100)); -CREATE TABLE t3 (a CHAR(100)); -CREATE TABLE ta0 (a CHAR(100)); -CREATE TABLE ta1 (a CHAR(100)); -CREATE TABLE ta2 (a CHAR(100)); -CREATE TABLE ta3 (a CHAR(100)); +CREATE TABLE t0 (a CHAR(200)); +CREATE TABLE t1 (a CHAR(200)); +CREATE TABLE t2 (a CHAR(200)); +CREATE TABLE t3 (a CHAR(200)); +CREATE TABLE ta0 (a CHAR(200)); +CREATE TABLE ta1 (a CHAR(200)); +CREATE TABLE ta2 (a CHAR(200)); +CREATE TABLE ta3 (a CHAR(200)); CREATE TABLE autoinc_table (a INT PRIMARY KEY AUTO_INCREMENT); -CREATE TABLE data_table (a CHAR(100)); +CREATE TABLE data_table (a CHAR(200)); INSERT INTO data_table VALUES ('foo'); CREATE TABLE trigger_table_1 (a INT); CREATE TABLE trigger_table_2 (a INT); @@ -2392,7 +2392,7 @@ DROP PROCEDURE p1; DROP TABLE t1; DROP TABLE IF EXISTS t1; -CREATE TABLE t1 (a VARCHAR(100), b VARCHAR(100)); +CREATE TABLE t1 (a VARCHAR(200), b VARCHAR(200)); INSERT INTO t1 VALUES ('a','b'); UPDATE t1 SET b = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s' WHERE a = 'a' LIMIT 1; Warnings: @@ -2423,7 +2423,7 @@ BEGIN SET @@SQL_LOG_BIN = 0; INSERT INTO t1 VALUES(@@global.sync_binlog); -RETURN 100; +RETURN 200; END| "One unsafe warning should be issued in the following statement" SELECT fun_check_log_bin(); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_flush_binlogs_delete_domain.test mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_flush_binlogs_delete_domain.test --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_flush_binlogs_delete_domain.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_flush_binlogs_delete_domain.test 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,137 @@ +# Prove basic properties of +# +# FLUSH BINARY LOGS DELETE_DOMAIN_ID = (...) +# +# The command removes the supplied list of domains from the current +# @@global.gtid_binlog_state provided the binlog files do not contain +# events from such domains. + +# The test is not format specific. One format is chosen to run it. +--source include/have_binlog_format_mixed.inc + +# Reset binlog state +RESET MASTER; + +# Empty list is accepted +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (); +--echo and the command execution is effective thence rotates binlog as usual +--source include/show_binary_logs.inc + +--echo Non-existed domain is warned, the command completes without rotation +--echo but with a warning +--let $binlog_pre_flush=query_get_value(SHOW MASTER STATUS, Position, 1) +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99); +--let $binlog_start=$binlog_pre_flush +--source include/show_binary_logs.inc + +# Log one event in a specified domain and try to delete the domain +SET @@SESSION.gtid_domain_id=1; +SET @@SESSION.server_id=1; +CREATE TABLE t (a int); + +--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); + +# the same error after log rotation +FLUSH BINARY LOGS; +--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); + +# the latest binlog does not really contain any events incl ones from 1-domain +--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1) +--eval PURGE BINARY LOGS TO '$purge_to_binlog'; +# So now it's safe to delete +--error 0 +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); +--echo Gtid_list of the current binlog does not contain '1': +--let $binlog_file=query_get_value(SHOW MASTER STATUS, File, 1) +--source include/show_gtid_list.inc +--echo But the previous log's Gtid_list may have it which explains a warning from the following command +--let $binlog_file=$purge_to_binlog +--source include/show_gtid_list.inc + +--echo Already deleted domain in Gtid_list of the earliest log is benign +--echo but may cause a warning +--error 0 +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1); + +# Few domains delete. The chosen number verifies among others how +# expected overrun of the static buffers of underlying dynamic arrays is doing. +--let $domain_cnt=17 +--let $server_in_domain_cnt=3 +--let $domain_list= +--disable_query_log +while ($domain_cnt) +{ + --let servers=$server_in_domain_cnt + --eval SET @@SESSION.gtid_domain_id=$domain_cnt + while ($servers) + { + --eval SET @@SESSION.server_id=10*$domain_cnt + $servers + --eval INSERT INTO t SET a=@@SESSION.server_id + + --dec $servers + } + --let $domain_list= $domain_cnt, $domain_list + + --dec $domain_cnt +} +--enable_query_log +--let $zero=0 +--let $domain_list= $domain_list$zero + +--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN +--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID = ($domain_list) + +# Now satisfy the safety condtion to purge log files containing $domain list +FLUSH BINARY LOGS; +--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1) +--eval PURGE BINARY LOGS TO '$purge_to_binlog' +--error 0 +--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID = ($domain_list) +--echo Gtid_list of the current binlog does not contain $domain_list: +--let $binlog_file=query_get_value(SHOW MASTER STATUS, File, 1) +--source include/show_gtid_list.inc + +# Show reaction on @@global.gtid_binlog_state not succeeding +# earlier state as described by the 1st binlog' Gtid_list. +# Now let it be out-order gtid logged to a domain unrelated to deletion. + +--let $del_d_id=1 +--eval SET @@SESSION.gtid_domain_id=$del_d_id; +SET @@SESSION.server_id=1; +SET @@SESSION.gtid_seq_no=1; +INSERT INTO t SET a=1; +SET @@SESSION.server_id=2; +SET @@SESSION.gtid_seq_no=2; +INSERT INTO t SET a=2; + +SET @@SESSION.gtid_domain_id=11; +SET @@SESSION.server_id=11; +SET @@SESSION.gtid_seq_no=11; +INSERT INTO t SET a=11; + +SET @gtid_binlog_state_saved=@@GLOBAL.gtid_binlog_state; +FLUSH BINARY LOGS; + +# Inject out of order for domain '11' before +SET @@SESSION.gtid_domain_id=11; +SET @@SESSION.server_id=11; +SET @@SESSION.gtid_seq_no=1; +INSERT INTO t SET a=1; + +SELECT @gtid_binlog_state_saved "as original state", @@GLOBAL.gtid_binlog_state as "out of order for 11 domain state"; + +# to delete '1', first to purge logs containing its events +--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1) +--eval PURGE BINARY LOGS TO '$purge_to_binlog' + +--echo the following command succeeds with warnings +--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID = ($del_d_id) + +# +# Cleanup +# + +DROP TABLE t; +RESET MASTER; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_gtid_delete_domain_debug.test mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_gtid_delete_domain_debug.test --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_gtid_delete_domain_debug.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_gtid_delete_domain_debug.test 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,11 @@ +# Check "internal" error branches of +# FLUSH BINARY LOGS DELETE_DOMAIN_ID = (...) +# handler. +--source include/have_debug.inc +--source include/have_binlog_format_mixed.inc + +SET @@SESSION.debug_dbug='+d,inject_binlog_delete_domain_init_error'; +--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN +FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99); + +SHOW WARNINGS; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_row.test mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_row.test --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_row.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_row.test 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,3 @@ +--source include/have_log_bin.inc +--source include/have_binlog_format_row.inc +--source include/binlog_parallel_replication_marks.test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_stm_mix.test mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_stm_mix.test --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_stm_mix.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_parallel_replication_marks_stm_mix.test 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,3 @@ +--source include/have_log_bin.inc +--source include/have_binlog_format_mixed_or_statement.inc +--source include/binlog_parallel_replication_marks.test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_unsafe.test mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_unsafe.test --- mariadb-10.1-10.1.25/mysql-test/suite/binlog/t/binlog_unsafe.test 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/binlog/t/binlog_unsafe.test 2017-12-21 15:48:46.000000000 +0000 @@ -106,16 +106,16 @@ --echo #### Setup tables #### -CREATE TABLE t0 (a CHAR(100)); -CREATE TABLE t1 (a CHAR(100)); -CREATE TABLE t2 (a CHAR(100)); -CREATE TABLE t3 (a CHAR(100)); -CREATE TABLE ta0 (a CHAR(100)); -CREATE TABLE ta1 (a CHAR(100)); -CREATE TABLE ta2 (a CHAR(100)); -CREATE TABLE ta3 (a CHAR(100)); +CREATE TABLE t0 (a CHAR(200)); +CREATE TABLE t1 (a CHAR(200)); +CREATE TABLE t2 (a CHAR(200)); +CREATE TABLE t3 (a CHAR(200)); +CREATE TABLE ta0 (a CHAR(200)); +CREATE TABLE ta1 (a CHAR(200)); +CREATE TABLE ta2 (a CHAR(200)); +CREATE TABLE ta3 (a CHAR(200)); CREATE TABLE autoinc_table (a INT PRIMARY KEY AUTO_INCREMENT); -CREATE TABLE data_table (a CHAR(100)); +CREATE TABLE data_table (a CHAR(200)); INSERT INTO data_table VALUES ('foo'); CREATE TABLE trigger_table_1 (a INT); CREATE TABLE trigger_table_2 (a INT); @@ -429,7 +429,7 @@ DROP TABLE IF EXISTS t1; --enable_warnings -CREATE TABLE t1 (a VARCHAR(100), b VARCHAR(100)); +CREATE TABLE t1 (a VARCHAR(200), b VARCHAR(200)); INSERT INTO t1 VALUES ('a','b'); UPDATE t1 SET b = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s' WHERE a = 'a' LIMIT 1; DROP TABLE t1; @@ -467,7 +467,7 @@ BEGIN SET @@SQL_LOG_BIN = 0; INSERT INTO t1 VALUES(@@global.sync_binlog); - RETURN 100; + RETURN 200; END| DELIMITER ;| --echo "One unsafe warning should be issued in the following statement" diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/disabled.def mariadb-10.1-10.1.30/mysql-test/suite/encryption/disabled.def --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/disabled.def 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/disabled.def 2017-12-21 15:48:46.000000000 +0000 @@ -12,3 +12,4 @@ innodb_scrub : MDEV-8139 scrubbing does not work reliably innodb_scrub_background : MDEV-8139 scrubbing does not work reliably + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/encryption_force.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/encryption_force.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/encryption_force.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/encryption_force.result 2017-12-21 15:48:46.000000000 +0000 @@ -34,11 +34,11 @@ /*!50100 PARTITION BY HASH (a) PARTITIONS 2 */ alter table t1 encrypted=no; -ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTED' alter table t2 encrypted=yes; alter table t3 encrypted=default; alter table t4 encrypted=no; -ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTED' show create table t1; Table Create Table t1 CREATE TABLE `t1` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/filekeys_encfile_file.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/filekeys_encfile_file.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/filekeys_encfile_file.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/filekeys_encfile_file.result 2017-12-21 15:48:46.000000000 +0000 @@ -14,7 +14,7 @@ `b` char(200) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes `encryption_key_id`=2 alter table t1 encryption_key_id=3; -ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID' show create table t1; Table Create Table t1 CREATE TABLE `t1` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/filekeys_encfile.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/filekeys_encfile.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/filekeys_encfile.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/filekeys_encfile.result 2017-12-21 15:48:46.000000000 +0000 @@ -14,7 +14,7 @@ `b` char(200) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes `encryption_key_id`=2 alter table t1 encryption_key_id=3; -ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID' show create table t1; Table Create Table t1 CREATE TABLE `t1` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innochecksum.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innochecksum.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innochecksum.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innochecksum.result 2017-12-21 15:48:46.000000000 +0000 @@ -7,6 +7,7 @@ CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTED=NO; CREATE TABLE t4 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1; CREATE TABLE t5 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4; +CREATE TABLE t6 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB; # Write file to make mysql-test-run.pl expect the "crash", but don't # start it until it's told to # We give 30 seconds to do a clean shutdown because we do not want @@ -18,6 +19,27 @@ # Run innochecksum on t3 # Run innochecksum on t4 # Run innochecksum on t4 +# Run innochecksum on t5 +# Run innochecksum on t6 +# Backup tables before corrupting +# Corrupt FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION +# Run innochecksum on t2 +# Run innochecksum on t3 +# no encryption corrupting the field should not have effect +# Run innochecksum on t6 +# no encryption corrupting the field should not have effect +# Restore the original tables +# Corrupt FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION+4 (post encryption checksum) +# Run innochecksum on t2 +# Run innochecksum on t3 +# Run innochecksum on t6 +# no encryption corrupting the field should not have effect +# Restore the original tables +# Corrupt FIL_DATA+10 (data) +# Run innochecksum on t2 +# Run innochecksum on t3 +# Run innochecksum on t6 +# Restore the original tables # Write file to make mysql-test-run.pl start up the server again # Cleanup -DROP TABLE t1, t2, t3, t4, t5; +DROP TABLE t1, t2, t3, t4, t5, t6; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb-encryption-alter.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb-encryption-alter.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb-encryption-alter.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb-encryption-alter.result 2017-12-21 15:48:46.000000000 +0000 @@ -43,11 +43,10 @@ Warnings: Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 1 when encryption is disabled ALTER TABLE t1 ENCRYPTION_KEY_ID=99; -ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID' SHOW WARNINGS; Level Code Message Warning 140 InnoDB: ENCRYPTION_KEY_ID 99 not available -Error 1005 Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") -Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB +Error 1478 Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID' set innodb_default_encryption_key_id = 1; drop table t1,t2; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb_encryption.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb_encryption.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb_encryption.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb_encryption.result 2017-12-21 15:48:46.000000000 +0000 @@ -6,25 +6,26 @@ innodb_encryption_rotate_key_age 15 innodb_encryption_rotation_iops 100 innodb_encryption_threads 4 -DESCRIBE INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; -Field Type Null Key Default Extra -SPACE int(11) unsigned NO 0 -NAME varchar(655) YES NULL -ENCRYPTION_SCHEME int(11) unsigned NO 0 -KEYSERVER_REQUESTS int(11) unsigned NO 0 -MIN_KEY_VERSION int(11) unsigned NO 0 -CURRENT_KEY_VERSION int(11) unsigned NO 0 -KEY_ROTATION_PAGE_NUMBER bigint(21) unsigned YES NULL -KEY_ROTATION_MAX_PAGE_NUMBER bigint(21) unsigned YES NULL -CURRENT_KEY_ID int(11) unsigned NO 0 -ROTATING_OR_FLUSHING int(1) unsigned NO 0 -# Wait max 5 min for key encryption threads to encrypt one space -# Success! -# Wait max 10 min for key encryption threads to encrypt all space +SET GLOBAL innodb_encrypt_tables = ON; +# Wait max 10 min for key encryption threads to encrypt all spaces +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +mysql/innodb_table_stats +mysql/innodb_index_stats +./ibdata1 # Success! # Now turn off encryption and wait for threads to decrypt everything SET GLOBAL innodb_encrypt_tables = off; -# Wait max 10 min for key encryption threads to decrypt all space +# Wait max 10 min for key encryption threads to encrypt all spaces +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +mysql/innodb_table_stats +mysql/innodb_index_stats +./ibdata1 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME # Success! # Shutdown innodb_encryption_threads SET GLOBAL innodb_encryption_threads=0; @@ -32,16 +33,24 @@ # since threads are off tables should remain unencrypted SET GLOBAL innodb_encrypt_tables = on; # Wait 15s to check that nothing gets encrypted +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +mysql/innodb_table_stats +mysql/innodb_index_stats +./ibdata1 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME # Success! # Startup innodb_encryption_threads SET GLOBAL innodb_encryption_threads=@start_global_value; -# Wait 1 min to check that it start encrypting again -# Success! -# -# Check that restart with encryption turned off works -# even if spaces are encrypted -# -# First wait max 10 min for key encryption threads to encrypt all spaces +# Wait max 10 min for key encryption threads to encrypt all spaces +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +mysql/innodb_table_stats +mysql/innodb_index_stats +./ibdata1 # Success! # Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0 SHOW VARIABLES LIKE 'innodb_encrypt%'; @@ -51,9 +60,10 @@ innodb_encryption_rotate_key_age 15 innodb_encryption_rotation_iops 100 innodb_encryption_threads 0 -SELECT COUNT(*) > 0 as should_be_1 -FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION -WHERE MIN_KEY_VERSION <> 0; -should_be_1 -1 -# Restart mysqld again...with default options +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +mysql/innodb_table_stats +mysql/innodb_index_stats +./ibdata1 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb-first-page-read.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb-first-page-read.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb-first-page-read.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb-first-page-read.result 2017-12-21 15:48:46.000000000 +0000 @@ -1,5 +1,6 @@ SET GLOBAL innodb_file_format = `Barracuda`; SET GLOBAL innodb_file_per_table = ON; +FLUSH STATUS; create database innodb_test; use innodb_test; create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; @@ -50,40 +51,48 @@ insert into innodb_datadir2 select * from innodb_normal; insert into innodb_datadir3 select * from innodb_normal; commit; +FLUSH STATUS; # Restart server and see how many page 0's are read -# result should be less than actual number of tables -# i.e. < 23 + 3 = 26 -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 19 +# result should actual number of tables except remote tables could be read twice +# i.e. < 23 + 3*2 = 29 +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 use innodb_test; -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 19 +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 use test; -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 19 +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 set global innodb_encrypt_tables=OFF; # wait until tables are decrypted -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 29 +# result should be actual number of tables except remote tables could be read twice +# i.e. < 23 + 3*2 = 29 +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 use innodb_test; -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 29 +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 use test; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 +FLUSH STATUS; # restart and see number read page 0 -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 19 +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 use innodb_test; -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 19 +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 use test; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 29 +1 drop database innodb_test; -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 29 +FLUSH STATUS; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb-key-rotation-disable.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb-key-rotation-disable.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb-key-rotation-disable.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb-key-rotation-disable.result 2017-12-21 15:48:46.000000000 +0000 @@ -2,9 +2,6 @@ NAME SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; NAME -mysql/innodb_table_stats -mysql/innodb_index_stats -./ibdata1 create database enctests; use enctests; create table t1(a int not null primary key, b char(200)) engine=innodb; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb_lotoftables.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb_lotoftables.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/innodb_lotoftables.result 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/innodb_lotoftables.result 2017-12-21 15:48:46.000000000 +0000 @@ -19,10 +19,9 @@ show status like 'innodb_pages0_read%'; Variable_name Value Innodb_pages0_read 3 -# should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 +# should be empty +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%'; +NAME create database innodb_encrypted_2; use innodb_encrypted_2; show status like 'innodb_pages0_read%'; @@ -34,14 +33,112 @@ show status like 'innodb_pages0_read%'; Variable_name Value Innodb_pages0_read 3 -# should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 -# should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 +# should contain 100 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_2/t_1 +innodb_encrypted_2/t_10 +innodb_encrypted_2/t_100 +innodb_encrypted_2/t_11 +innodb_encrypted_2/t_12 +innodb_encrypted_2/t_13 +innodb_encrypted_2/t_14 +innodb_encrypted_2/t_15 +innodb_encrypted_2/t_16 +innodb_encrypted_2/t_17 +innodb_encrypted_2/t_18 +innodb_encrypted_2/t_19 +innodb_encrypted_2/t_2 +innodb_encrypted_2/t_20 +innodb_encrypted_2/t_21 +innodb_encrypted_2/t_22 +innodb_encrypted_2/t_23 +innodb_encrypted_2/t_24 +innodb_encrypted_2/t_25 +innodb_encrypted_2/t_26 +innodb_encrypted_2/t_27 +innodb_encrypted_2/t_28 +innodb_encrypted_2/t_29 +innodb_encrypted_2/t_3 +innodb_encrypted_2/t_30 +innodb_encrypted_2/t_31 +innodb_encrypted_2/t_32 +innodb_encrypted_2/t_33 +innodb_encrypted_2/t_34 +innodb_encrypted_2/t_35 +innodb_encrypted_2/t_36 +innodb_encrypted_2/t_37 +innodb_encrypted_2/t_38 +innodb_encrypted_2/t_39 +innodb_encrypted_2/t_4 +innodb_encrypted_2/t_40 +innodb_encrypted_2/t_41 +innodb_encrypted_2/t_42 +innodb_encrypted_2/t_43 +innodb_encrypted_2/t_44 +innodb_encrypted_2/t_45 +innodb_encrypted_2/t_46 +innodb_encrypted_2/t_47 +innodb_encrypted_2/t_48 +innodb_encrypted_2/t_49 +innodb_encrypted_2/t_5 +innodb_encrypted_2/t_50 +innodb_encrypted_2/t_51 +innodb_encrypted_2/t_52 +innodb_encrypted_2/t_53 +innodb_encrypted_2/t_54 +innodb_encrypted_2/t_55 +innodb_encrypted_2/t_56 +innodb_encrypted_2/t_57 +innodb_encrypted_2/t_58 +innodb_encrypted_2/t_59 +innodb_encrypted_2/t_6 +innodb_encrypted_2/t_60 +innodb_encrypted_2/t_61 +innodb_encrypted_2/t_62 +innodb_encrypted_2/t_63 +innodb_encrypted_2/t_64 +innodb_encrypted_2/t_65 +innodb_encrypted_2/t_66 +innodb_encrypted_2/t_67 +innodb_encrypted_2/t_68 +innodb_encrypted_2/t_69 +innodb_encrypted_2/t_7 +innodb_encrypted_2/t_70 +innodb_encrypted_2/t_71 +innodb_encrypted_2/t_72 +innodb_encrypted_2/t_73 +innodb_encrypted_2/t_74 +innodb_encrypted_2/t_75 +innodb_encrypted_2/t_76 +innodb_encrypted_2/t_77 +innodb_encrypted_2/t_78 +innodb_encrypted_2/t_79 +innodb_encrypted_2/t_8 +innodb_encrypted_2/t_80 +innodb_encrypted_2/t_81 +innodb_encrypted_2/t_82 +innodb_encrypted_2/t_83 +innodb_encrypted_2/t_84 +innodb_encrypted_2/t_85 +innodb_encrypted_2/t_86 +innodb_encrypted_2/t_87 +innodb_encrypted_2/t_88 +innodb_encrypted_2/t_89 +innodb_encrypted_2/t_9 +innodb_encrypted_2/t_90 +innodb_encrypted_2/t_91 +innodb_encrypted_2/t_92 +innodb_encrypted_2/t_93 +innodb_encrypted_2/t_94 +innodb_encrypted_2/t_95 +innodb_encrypted_2/t_96 +innodb_encrypted_2/t_97 +innodb_encrypted_2/t_98 +innodb_encrypted_2/t_99 +# should contain 0 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME create database innodb_encrypted_3; use innodb_encrypted_3; show status like 'innodb_pages0_read%'; @@ -53,33 +150,626 @@ show status like 'innodb_pages0_read%'; Variable_name Value Innodb_pages0_read 3 -# should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 -# should be 200 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -200 +# should contain 100 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_2/t_1 +innodb_encrypted_2/t_10 +innodb_encrypted_2/t_100 +innodb_encrypted_2/t_11 +innodb_encrypted_2/t_12 +innodb_encrypted_2/t_13 +innodb_encrypted_2/t_14 +innodb_encrypted_2/t_15 +innodb_encrypted_2/t_16 +innodb_encrypted_2/t_17 +innodb_encrypted_2/t_18 +innodb_encrypted_2/t_19 +innodb_encrypted_2/t_2 +innodb_encrypted_2/t_20 +innodb_encrypted_2/t_21 +innodb_encrypted_2/t_22 +innodb_encrypted_2/t_23 +innodb_encrypted_2/t_24 +innodb_encrypted_2/t_25 +innodb_encrypted_2/t_26 +innodb_encrypted_2/t_27 +innodb_encrypted_2/t_28 +innodb_encrypted_2/t_29 +innodb_encrypted_2/t_3 +innodb_encrypted_2/t_30 +innodb_encrypted_2/t_31 +innodb_encrypted_2/t_32 +innodb_encrypted_2/t_33 +innodb_encrypted_2/t_34 +innodb_encrypted_2/t_35 +innodb_encrypted_2/t_36 +innodb_encrypted_2/t_37 +innodb_encrypted_2/t_38 +innodb_encrypted_2/t_39 +innodb_encrypted_2/t_4 +innodb_encrypted_2/t_40 +innodb_encrypted_2/t_41 +innodb_encrypted_2/t_42 +innodb_encrypted_2/t_43 +innodb_encrypted_2/t_44 +innodb_encrypted_2/t_45 +innodb_encrypted_2/t_46 +innodb_encrypted_2/t_47 +innodb_encrypted_2/t_48 +innodb_encrypted_2/t_49 +innodb_encrypted_2/t_5 +innodb_encrypted_2/t_50 +innodb_encrypted_2/t_51 +innodb_encrypted_2/t_52 +innodb_encrypted_2/t_53 +innodb_encrypted_2/t_54 +innodb_encrypted_2/t_55 +innodb_encrypted_2/t_56 +innodb_encrypted_2/t_57 +innodb_encrypted_2/t_58 +innodb_encrypted_2/t_59 +innodb_encrypted_2/t_6 +innodb_encrypted_2/t_60 +innodb_encrypted_2/t_61 +innodb_encrypted_2/t_62 +innodb_encrypted_2/t_63 +innodb_encrypted_2/t_64 +innodb_encrypted_2/t_65 +innodb_encrypted_2/t_66 +innodb_encrypted_2/t_67 +innodb_encrypted_2/t_68 +innodb_encrypted_2/t_69 +innodb_encrypted_2/t_7 +innodb_encrypted_2/t_70 +innodb_encrypted_2/t_71 +innodb_encrypted_2/t_72 +innodb_encrypted_2/t_73 +innodb_encrypted_2/t_74 +innodb_encrypted_2/t_75 +innodb_encrypted_2/t_76 +innodb_encrypted_2/t_77 +innodb_encrypted_2/t_78 +innodb_encrypted_2/t_79 +innodb_encrypted_2/t_8 +innodb_encrypted_2/t_80 +innodb_encrypted_2/t_81 +innodb_encrypted_2/t_82 +innodb_encrypted_2/t_83 +innodb_encrypted_2/t_84 +innodb_encrypted_2/t_85 +innodb_encrypted_2/t_86 +innodb_encrypted_2/t_87 +innodb_encrypted_2/t_88 +innodb_encrypted_2/t_89 +innodb_encrypted_2/t_9 +innodb_encrypted_2/t_90 +innodb_encrypted_2/t_91 +innodb_encrypted_2/t_92 +innodb_encrypted_2/t_93 +innodb_encrypted_2/t_94 +innodb_encrypted_2/t_95 +innodb_encrypted_2/t_96 +innodb_encrypted_2/t_97 +innodb_encrypted_2/t_98 +innodb_encrypted_2/t_99 +# should contain 100 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_3/t_1 +innodb_encrypted_3/t_10 +innodb_encrypted_3/t_100 +innodb_encrypted_3/t_11 +innodb_encrypted_3/t_12 +innodb_encrypted_3/t_13 +innodb_encrypted_3/t_14 +innodb_encrypted_3/t_15 +innodb_encrypted_3/t_16 +innodb_encrypted_3/t_17 +innodb_encrypted_3/t_18 +innodb_encrypted_3/t_19 +innodb_encrypted_3/t_2 +innodb_encrypted_3/t_20 +innodb_encrypted_3/t_21 +innodb_encrypted_3/t_22 +innodb_encrypted_3/t_23 +innodb_encrypted_3/t_24 +innodb_encrypted_3/t_25 +innodb_encrypted_3/t_26 +innodb_encrypted_3/t_27 +innodb_encrypted_3/t_28 +innodb_encrypted_3/t_29 +innodb_encrypted_3/t_3 +innodb_encrypted_3/t_30 +innodb_encrypted_3/t_31 +innodb_encrypted_3/t_32 +innodb_encrypted_3/t_33 +innodb_encrypted_3/t_34 +innodb_encrypted_3/t_35 +innodb_encrypted_3/t_36 +innodb_encrypted_3/t_37 +innodb_encrypted_3/t_38 +innodb_encrypted_3/t_39 +innodb_encrypted_3/t_4 +innodb_encrypted_3/t_40 +innodb_encrypted_3/t_41 +innodb_encrypted_3/t_42 +innodb_encrypted_3/t_43 +innodb_encrypted_3/t_44 +innodb_encrypted_3/t_45 +innodb_encrypted_3/t_46 +innodb_encrypted_3/t_47 +innodb_encrypted_3/t_48 +innodb_encrypted_3/t_49 +innodb_encrypted_3/t_5 +innodb_encrypted_3/t_50 +innodb_encrypted_3/t_51 +innodb_encrypted_3/t_52 +innodb_encrypted_3/t_53 +innodb_encrypted_3/t_54 +innodb_encrypted_3/t_55 +innodb_encrypted_3/t_56 +innodb_encrypted_3/t_57 +innodb_encrypted_3/t_58 +innodb_encrypted_3/t_59 +innodb_encrypted_3/t_6 +innodb_encrypted_3/t_60 +innodb_encrypted_3/t_61 +innodb_encrypted_3/t_62 +innodb_encrypted_3/t_63 +innodb_encrypted_3/t_64 +innodb_encrypted_3/t_65 +innodb_encrypted_3/t_66 +innodb_encrypted_3/t_67 +innodb_encrypted_3/t_68 +innodb_encrypted_3/t_69 +innodb_encrypted_3/t_7 +innodb_encrypted_3/t_70 +innodb_encrypted_3/t_71 +innodb_encrypted_3/t_72 +innodb_encrypted_3/t_73 +innodb_encrypted_3/t_74 +innodb_encrypted_3/t_75 +innodb_encrypted_3/t_76 +innodb_encrypted_3/t_77 +innodb_encrypted_3/t_78 +innodb_encrypted_3/t_79 +innodb_encrypted_3/t_8 +innodb_encrypted_3/t_80 +innodb_encrypted_3/t_81 +innodb_encrypted_3/t_82 +innodb_encrypted_3/t_83 +innodb_encrypted_3/t_84 +innodb_encrypted_3/t_85 +innodb_encrypted_3/t_86 +innodb_encrypted_3/t_87 +innodb_encrypted_3/t_88 +innodb_encrypted_3/t_89 +innodb_encrypted_3/t_9 +innodb_encrypted_3/t_90 +innodb_encrypted_3/t_91 +innodb_encrypted_3/t_92 +innodb_encrypted_3/t_93 +innodb_encrypted_3/t_94 +innodb_encrypted_3/t_95 +innodb_encrypted_3/t_96 +innodb_encrypted_3/t_97 +innodb_encrypted_3/t_98 +innodb_encrypted_3/t_99 use test; show status like 'innodb_pages0_read%'; Variable_name Value Innodb_pages0_read 3 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -200 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_2/t_1 +innodb_encrypted_2/t_10 +innodb_encrypted_2/t_100 +innodb_encrypted_2/t_11 +innodb_encrypted_2/t_12 +innodb_encrypted_2/t_13 +innodb_encrypted_2/t_14 +innodb_encrypted_2/t_15 +innodb_encrypted_2/t_16 +innodb_encrypted_2/t_17 +innodb_encrypted_2/t_18 +innodb_encrypted_2/t_19 +innodb_encrypted_2/t_2 +innodb_encrypted_2/t_20 +innodb_encrypted_2/t_21 +innodb_encrypted_2/t_22 +innodb_encrypted_2/t_23 +innodb_encrypted_2/t_24 +innodb_encrypted_2/t_25 +innodb_encrypted_2/t_26 +innodb_encrypted_2/t_27 +innodb_encrypted_2/t_28 +innodb_encrypted_2/t_29 +innodb_encrypted_2/t_3 +innodb_encrypted_2/t_30 +innodb_encrypted_2/t_31 +innodb_encrypted_2/t_32 +innodb_encrypted_2/t_33 +innodb_encrypted_2/t_34 +innodb_encrypted_2/t_35 +innodb_encrypted_2/t_36 +innodb_encrypted_2/t_37 +innodb_encrypted_2/t_38 +innodb_encrypted_2/t_39 +innodb_encrypted_2/t_4 +innodb_encrypted_2/t_40 +innodb_encrypted_2/t_41 +innodb_encrypted_2/t_42 +innodb_encrypted_2/t_43 +innodb_encrypted_2/t_44 +innodb_encrypted_2/t_45 +innodb_encrypted_2/t_46 +innodb_encrypted_2/t_47 +innodb_encrypted_2/t_48 +innodb_encrypted_2/t_49 +innodb_encrypted_2/t_5 +innodb_encrypted_2/t_50 +innodb_encrypted_2/t_51 +innodb_encrypted_2/t_52 +innodb_encrypted_2/t_53 +innodb_encrypted_2/t_54 +innodb_encrypted_2/t_55 +innodb_encrypted_2/t_56 +innodb_encrypted_2/t_57 +innodb_encrypted_2/t_58 +innodb_encrypted_2/t_59 +innodb_encrypted_2/t_6 +innodb_encrypted_2/t_60 +innodb_encrypted_2/t_61 +innodb_encrypted_2/t_62 +innodb_encrypted_2/t_63 +innodb_encrypted_2/t_64 +innodb_encrypted_2/t_65 +innodb_encrypted_2/t_66 +innodb_encrypted_2/t_67 +innodb_encrypted_2/t_68 +innodb_encrypted_2/t_69 +innodb_encrypted_2/t_7 +innodb_encrypted_2/t_70 +innodb_encrypted_2/t_71 +innodb_encrypted_2/t_72 +innodb_encrypted_2/t_73 +innodb_encrypted_2/t_74 +innodb_encrypted_2/t_75 +innodb_encrypted_2/t_76 +innodb_encrypted_2/t_77 +innodb_encrypted_2/t_78 +innodb_encrypted_2/t_79 +innodb_encrypted_2/t_8 +innodb_encrypted_2/t_80 +innodb_encrypted_2/t_81 +innodb_encrypted_2/t_82 +innodb_encrypted_2/t_83 +innodb_encrypted_2/t_84 +innodb_encrypted_2/t_85 +innodb_encrypted_2/t_86 +innodb_encrypted_2/t_87 +innodb_encrypted_2/t_88 +innodb_encrypted_2/t_89 +innodb_encrypted_2/t_9 +innodb_encrypted_2/t_90 +innodb_encrypted_2/t_91 +innodb_encrypted_2/t_92 +innodb_encrypted_2/t_93 +innodb_encrypted_2/t_94 +innodb_encrypted_2/t_95 +innodb_encrypted_2/t_96 +innodb_encrypted_2/t_97 +innodb_encrypted_2/t_98 +innodb_encrypted_2/t_99 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_3/t_1 +innodb_encrypted_3/t_10 +innodb_encrypted_3/t_100 +innodb_encrypted_3/t_11 +innodb_encrypted_3/t_12 +innodb_encrypted_3/t_13 +innodb_encrypted_3/t_14 +innodb_encrypted_3/t_15 +innodb_encrypted_3/t_16 +innodb_encrypted_3/t_17 +innodb_encrypted_3/t_18 +innodb_encrypted_3/t_19 +innodb_encrypted_3/t_2 +innodb_encrypted_3/t_20 +innodb_encrypted_3/t_21 +innodb_encrypted_3/t_22 +innodb_encrypted_3/t_23 +innodb_encrypted_3/t_24 +innodb_encrypted_3/t_25 +innodb_encrypted_3/t_26 +innodb_encrypted_3/t_27 +innodb_encrypted_3/t_28 +innodb_encrypted_3/t_29 +innodb_encrypted_3/t_3 +innodb_encrypted_3/t_30 +innodb_encrypted_3/t_31 +innodb_encrypted_3/t_32 +innodb_encrypted_3/t_33 +innodb_encrypted_3/t_34 +innodb_encrypted_3/t_35 +innodb_encrypted_3/t_36 +innodb_encrypted_3/t_37 +innodb_encrypted_3/t_38 +innodb_encrypted_3/t_39 +innodb_encrypted_3/t_4 +innodb_encrypted_3/t_40 +innodb_encrypted_3/t_41 +innodb_encrypted_3/t_42 +innodb_encrypted_3/t_43 +innodb_encrypted_3/t_44 +innodb_encrypted_3/t_45 +innodb_encrypted_3/t_46 +innodb_encrypted_3/t_47 +innodb_encrypted_3/t_48 +innodb_encrypted_3/t_49 +innodb_encrypted_3/t_5 +innodb_encrypted_3/t_50 +innodb_encrypted_3/t_51 +innodb_encrypted_3/t_52 +innodb_encrypted_3/t_53 +innodb_encrypted_3/t_54 +innodb_encrypted_3/t_55 +innodb_encrypted_3/t_56 +innodb_encrypted_3/t_57 +innodb_encrypted_3/t_58 +innodb_encrypted_3/t_59 +innodb_encrypted_3/t_6 +innodb_encrypted_3/t_60 +innodb_encrypted_3/t_61 +innodb_encrypted_3/t_62 +innodb_encrypted_3/t_63 +innodb_encrypted_3/t_64 +innodb_encrypted_3/t_65 +innodb_encrypted_3/t_66 +innodb_encrypted_3/t_67 +innodb_encrypted_3/t_68 +innodb_encrypted_3/t_69 +innodb_encrypted_3/t_7 +innodb_encrypted_3/t_70 +innodb_encrypted_3/t_71 +innodb_encrypted_3/t_72 +innodb_encrypted_3/t_73 +innodb_encrypted_3/t_74 +innodb_encrypted_3/t_75 +innodb_encrypted_3/t_76 +innodb_encrypted_3/t_77 +innodb_encrypted_3/t_78 +innodb_encrypted_3/t_79 +innodb_encrypted_3/t_8 +innodb_encrypted_3/t_80 +innodb_encrypted_3/t_81 +innodb_encrypted_3/t_82 +innodb_encrypted_3/t_83 +innodb_encrypted_3/t_84 +innodb_encrypted_3/t_85 +innodb_encrypted_3/t_86 +innodb_encrypted_3/t_87 +innodb_encrypted_3/t_88 +innodb_encrypted_3/t_89 +innodb_encrypted_3/t_9 +innodb_encrypted_3/t_90 +innodb_encrypted_3/t_91 +innodb_encrypted_3/t_92 +innodb_encrypted_3/t_93 +innodb_encrypted_3/t_94 +innodb_encrypted_3/t_95 +innodb_encrypted_3/t_96 +innodb_encrypted_3/t_97 +innodb_encrypted_3/t_98 +innodb_encrypted_3/t_99 SET GLOBAL innodb_encrypt_tables = on; SET GLOBAL innodb_encryption_threads=4; -# Wait until all encrypted tables have been encrypted -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -200 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_2/t_1 +innodb_encrypted_2/t_10 +innodb_encrypted_2/t_100 +innodb_encrypted_2/t_11 +innodb_encrypted_2/t_12 +innodb_encrypted_2/t_13 +innodb_encrypted_2/t_14 +innodb_encrypted_2/t_15 +innodb_encrypted_2/t_16 +innodb_encrypted_2/t_17 +innodb_encrypted_2/t_18 +innodb_encrypted_2/t_19 +innodb_encrypted_2/t_2 +innodb_encrypted_2/t_20 +innodb_encrypted_2/t_21 +innodb_encrypted_2/t_22 +innodb_encrypted_2/t_23 +innodb_encrypted_2/t_24 +innodb_encrypted_2/t_25 +innodb_encrypted_2/t_26 +innodb_encrypted_2/t_27 +innodb_encrypted_2/t_28 +innodb_encrypted_2/t_29 +innodb_encrypted_2/t_3 +innodb_encrypted_2/t_30 +innodb_encrypted_2/t_31 +innodb_encrypted_2/t_32 +innodb_encrypted_2/t_33 +innodb_encrypted_2/t_34 +innodb_encrypted_2/t_35 +innodb_encrypted_2/t_36 +innodb_encrypted_2/t_37 +innodb_encrypted_2/t_38 +innodb_encrypted_2/t_39 +innodb_encrypted_2/t_4 +innodb_encrypted_2/t_40 +innodb_encrypted_2/t_41 +innodb_encrypted_2/t_42 +innodb_encrypted_2/t_43 +innodb_encrypted_2/t_44 +innodb_encrypted_2/t_45 +innodb_encrypted_2/t_46 +innodb_encrypted_2/t_47 +innodb_encrypted_2/t_48 +innodb_encrypted_2/t_49 +innodb_encrypted_2/t_5 +innodb_encrypted_2/t_50 +innodb_encrypted_2/t_51 +innodb_encrypted_2/t_52 +innodb_encrypted_2/t_53 +innodb_encrypted_2/t_54 +innodb_encrypted_2/t_55 +innodb_encrypted_2/t_56 +innodb_encrypted_2/t_57 +innodb_encrypted_2/t_58 +innodb_encrypted_2/t_59 +innodb_encrypted_2/t_6 +innodb_encrypted_2/t_60 +innodb_encrypted_2/t_61 +innodb_encrypted_2/t_62 +innodb_encrypted_2/t_63 +innodb_encrypted_2/t_64 +innodb_encrypted_2/t_65 +innodb_encrypted_2/t_66 +innodb_encrypted_2/t_67 +innodb_encrypted_2/t_68 +innodb_encrypted_2/t_69 +innodb_encrypted_2/t_7 +innodb_encrypted_2/t_70 +innodb_encrypted_2/t_71 +innodb_encrypted_2/t_72 +innodb_encrypted_2/t_73 +innodb_encrypted_2/t_74 +innodb_encrypted_2/t_75 +innodb_encrypted_2/t_76 +innodb_encrypted_2/t_77 +innodb_encrypted_2/t_78 +innodb_encrypted_2/t_79 +innodb_encrypted_2/t_8 +innodb_encrypted_2/t_80 +innodb_encrypted_2/t_81 +innodb_encrypted_2/t_82 +innodb_encrypted_2/t_83 +innodb_encrypted_2/t_84 +innodb_encrypted_2/t_85 +innodb_encrypted_2/t_86 +innodb_encrypted_2/t_87 +innodb_encrypted_2/t_88 +innodb_encrypted_2/t_89 +innodb_encrypted_2/t_9 +innodb_encrypted_2/t_90 +innodb_encrypted_2/t_91 +innodb_encrypted_2/t_92 +innodb_encrypted_2/t_93 +innodb_encrypted_2/t_94 +innodb_encrypted_2/t_95 +innodb_encrypted_2/t_96 +innodb_encrypted_2/t_97 +innodb_encrypted_2/t_98 +innodb_encrypted_2/t_99 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_3/t_1 +innodb_encrypted_3/t_10 +innodb_encrypted_3/t_100 +innodb_encrypted_3/t_11 +innodb_encrypted_3/t_12 +innodb_encrypted_3/t_13 +innodb_encrypted_3/t_14 +innodb_encrypted_3/t_15 +innodb_encrypted_3/t_16 +innodb_encrypted_3/t_17 +innodb_encrypted_3/t_18 +innodb_encrypted_3/t_19 +innodb_encrypted_3/t_2 +innodb_encrypted_3/t_20 +innodb_encrypted_3/t_21 +innodb_encrypted_3/t_22 +innodb_encrypted_3/t_23 +innodb_encrypted_3/t_24 +innodb_encrypted_3/t_25 +innodb_encrypted_3/t_26 +innodb_encrypted_3/t_27 +innodb_encrypted_3/t_28 +innodb_encrypted_3/t_29 +innodb_encrypted_3/t_3 +innodb_encrypted_3/t_30 +innodb_encrypted_3/t_31 +innodb_encrypted_3/t_32 +innodb_encrypted_3/t_33 +innodb_encrypted_3/t_34 +innodb_encrypted_3/t_35 +innodb_encrypted_3/t_36 +innodb_encrypted_3/t_37 +innodb_encrypted_3/t_38 +innodb_encrypted_3/t_39 +innodb_encrypted_3/t_4 +innodb_encrypted_3/t_40 +innodb_encrypted_3/t_41 +innodb_encrypted_3/t_42 +innodb_encrypted_3/t_43 +innodb_encrypted_3/t_44 +innodb_encrypted_3/t_45 +innodb_encrypted_3/t_46 +innodb_encrypted_3/t_47 +innodb_encrypted_3/t_48 +innodb_encrypted_3/t_49 +innodb_encrypted_3/t_5 +innodb_encrypted_3/t_50 +innodb_encrypted_3/t_51 +innodb_encrypted_3/t_52 +innodb_encrypted_3/t_53 +innodb_encrypted_3/t_54 +innodb_encrypted_3/t_55 +innodb_encrypted_3/t_56 +innodb_encrypted_3/t_57 +innodb_encrypted_3/t_58 +innodb_encrypted_3/t_59 +innodb_encrypted_3/t_6 +innodb_encrypted_3/t_60 +innodb_encrypted_3/t_61 +innodb_encrypted_3/t_62 +innodb_encrypted_3/t_63 +innodb_encrypted_3/t_64 +innodb_encrypted_3/t_65 +innodb_encrypted_3/t_66 +innodb_encrypted_3/t_67 +innodb_encrypted_3/t_68 +innodb_encrypted_3/t_69 +innodb_encrypted_3/t_7 +innodb_encrypted_3/t_70 +innodb_encrypted_3/t_71 +innodb_encrypted_3/t_72 +innodb_encrypted_3/t_73 +innodb_encrypted_3/t_74 +innodb_encrypted_3/t_75 +innodb_encrypted_3/t_76 +innodb_encrypted_3/t_77 +innodb_encrypted_3/t_78 +innodb_encrypted_3/t_79 +innodb_encrypted_3/t_8 +innodb_encrypted_3/t_80 +innodb_encrypted_3/t_81 +innodb_encrypted_3/t_82 +innodb_encrypted_3/t_83 +innodb_encrypted_3/t_84 +innodb_encrypted_3/t_85 +innodb_encrypted_3/t_86 +innodb_encrypted_3/t_87 +innodb_encrypted_3/t_88 +innodb_encrypted_3/t_89 +innodb_encrypted_3/t_9 +innodb_encrypted_3/t_90 +innodb_encrypted_3/t_91 +innodb_encrypted_3/t_92 +innodb_encrypted_3/t_93 +innodb_encrypted_3/t_94 +innodb_encrypted_3/t_95 +innodb_encrypted_3/t_96 +innodb_encrypted_3/t_97 +innodb_encrypted_3/t_98 +innodb_encrypted_3/t_99 show status like 'innodb_pages0_read%'; Variable_name Value Innodb_pages0_read 3 @@ -129,26 +819,416 @@ show status like 'innodb_pages0_read%'; Variable_name Value Innodb_pages0_read 303 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -200 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_3/t_1 +innodb_encrypted_3/t_10 +innodb_encrypted_3/t_100 +innodb_encrypted_3/t_11 +innodb_encrypted_3/t_12 +innodb_encrypted_3/t_13 +innodb_encrypted_3/t_14 +innodb_encrypted_3/t_15 +innodb_encrypted_3/t_16 +innodb_encrypted_3/t_17 +innodb_encrypted_3/t_18 +innodb_encrypted_3/t_19 +innodb_encrypted_3/t_2 +innodb_encrypted_3/t_20 +innodb_encrypted_3/t_21 +innodb_encrypted_3/t_22 +innodb_encrypted_3/t_23 +innodb_encrypted_3/t_24 +innodb_encrypted_3/t_25 +innodb_encrypted_3/t_26 +innodb_encrypted_3/t_27 +innodb_encrypted_3/t_28 +innodb_encrypted_3/t_29 +innodb_encrypted_3/t_3 +innodb_encrypted_3/t_30 +innodb_encrypted_3/t_31 +innodb_encrypted_3/t_32 +innodb_encrypted_3/t_33 +innodb_encrypted_3/t_34 +innodb_encrypted_3/t_35 +innodb_encrypted_3/t_36 +innodb_encrypted_3/t_37 +innodb_encrypted_3/t_38 +innodb_encrypted_3/t_39 +innodb_encrypted_3/t_4 +innodb_encrypted_3/t_40 +innodb_encrypted_3/t_41 +innodb_encrypted_3/t_42 +innodb_encrypted_3/t_43 +innodb_encrypted_3/t_44 +innodb_encrypted_3/t_45 +innodb_encrypted_3/t_46 +innodb_encrypted_3/t_47 +innodb_encrypted_3/t_48 +innodb_encrypted_3/t_49 +innodb_encrypted_3/t_5 +innodb_encrypted_3/t_50 +innodb_encrypted_3/t_51 +innodb_encrypted_3/t_52 +innodb_encrypted_3/t_53 +innodb_encrypted_3/t_54 +innodb_encrypted_3/t_55 +innodb_encrypted_3/t_56 +innodb_encrypted_3/t_57 +innodb_encrypted_3/t_58 +innodb_encrypted_3/t_59 +innodb_encrypted_3/t_6 +innodb_encrypted_3/t_60 +innodb_encrypted_3/t_61 +innodb_encrypted_3/t_62 +innodb_encrypted_3/t_63 +innodb_encrypted_3/t_64 +innodb_encrypted_3/t_65 +innodb_encrypted_3/t_66 +innodb_encrypted_3/t_67 +innodb_encrypted_3/t_68 +innodb_encrypted_3/t_69 +innodb_encrypted_3/t_7 +innodb_encrypted_3/t_70 +innodb_encrypted_3/t_71 +innodb_encrypted_3/t_72 +innodb_encrypted_3/t_73 +innodb_encrypted_3/t_74 +innodb_encrypted_3/t_75 +innodb_encrypted_3/t_76 +innodb_encrypted_3/t_77 +innodb_encrypted_3/t_78 +innodb_encrypted_3/t_79 +innodb_encrypted_3/t_8 +innodb_encrypted_3/t_80 +innodb_encrypted_3/t_81 +innodb_encrypted_3/t_82 +innodb_encrypted_3/t_83 +innodb_encrypted_3/t_84 +innodb_encrypted_3/t_85 +innodb_encrypted_3/t_86 +innodb_encrypted_3/t_87 +innodb_encrypted_3/t_88 +innodb_encrypted_3/t_89 +innodb_encrypted_3/t_9 +innodb_encrypted_3/t_90 +innodb_encrypted_3/t_91 +innodb_encrypted_3/t_92 +innodb_encrypted_3/t_93 +innodb_encrypted_3/t_94 +innodb_encrypted_3/t_95 +innodb_encrypted_3/t_96 +innodb_encrypted_3/t_97 +innodb_encrypted_3/t_98 +innodb_encrypted_3/t_99 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_2/t_1 +innodb_encrypted_2/t_10 +innodb_encrypted_2/t_100 +innodb_encrypted_2/t_11 +innodb_encrypted_2/t_12 +innodb_encrypted_2/t_13 +innodb_encrypted_2/t_14 +innodb_encrypted_2/t_15 +innodb_encrypted_2/t_16 +innodb_encrypted_2/t_17 +innodb_encrypted_2/t_18 +innodb_encrypted_2/t_19 +innodb_encrypted_2/t_2 +innodb_encrypted_2/t_20 +innodb_encrypted_2/t_21 +innodb_encrypted_2/t_22 +innodb_encrypted_2/t_23 +innodb_encrypted_2/t_24 +innodb_encrypted_2/t_25 +innodb_encrypted_2/t_26 +innodb_encrypted_2/t_27 +innodb_encrypted_2/t_28 +innodb_encrypted_2/t_29 +innodb_encrypted_2/t_3 +innodb_encrypted_2/t_30 +innodb_encrypted_2/t_31 +innodb_encrypted_2/t_32 +innodb_encrypted_2/t_33 +innodb_encrypted_2/t_34 +innodb_encrypted_2/t_35 +innodb_encrypted_2/t_36 +innodb_encrypted_2/t_37 +innodb_encrypted_2/t_38 +innodb_encrypted_2/t_39 +innodb_encrypted_2/t_4 +innodb_encrypted_2/t_40 +innodb_encrypted_2/t_41 +innodb_encrypted_2/t_42 +innodb_encrypted_2/t_43 +innodb_encrypted_2/t_44 +innodb_encrypted_2/t_45 +innodb_encrypted_2/t_46 +innodb_encrypted_2/t_47 +innodb_encrypted_2/t_48 +innodb_encrypted_2/t_49 +innodb_encrypted_2/t_5 +innodb_encrypted_2/t_50 +innodb_encrypted_2/t_51 +innodb_encrypted_2/t_52 +innodb_encrypted_2/t_53 +innodb_encrypted_2/t_54 +innodb_encrypted_2/t_55 +innodb_encrypted_2/t_56 +innodb_encrypted_2/t_57 +innodb_encrypted_2/t_58 +innodb_encrypted_2/t_59 +innodb_encrypted_2/t_6 +innodb_encrypted_2/t_60 +innodb_encrypted_2/t_61 +innodb_encrypted_2/t_62 +innodb_encrypted_2/t_63 +innodb_encrypted_2/t_64 +innodb_encrypted_2/t_65 +innodb_encrypted_2/t_66 +innodb_encrypted_2/t_67 +innodb_encrypted_2/t_68 +innodb_encrypted_2/t_69 +innodb_encrypted_2/t_7 +innodb_encrypted_2/t_70 +innodb_encrypted_2/t_71 +innodb_encrypted_2/t_72 +innodb_encrypted_2/t_73 +innodb_encrypted_2/t_74 +innodb_encrypted_2/t_75 +innodb_encrypted_2/t_76 +innodb_encrypted_2/t_77 +innodb_encrypted_2/t_78 +innodb_encrypted_2/t_79 +innodb_encrypted_2/t_8 +innodb_encrypted_2/t_80 +innodb_encrypted_2/t_81 +innodb_encrypted_2/t_82 +innodb_encrypted_2/t_83 +innodb_encrypted_2/t_84 +innodb_encrypted_2/t_85 +innodb_encrypted_2/t_86 +innodb_encrypted_2/t_87 +innodb_encrypted_2/t_88 +innodb_encrypted_2/t_89 +innodb_encrypted_2/t_9 +innodb_encrypted_2/t_90 +innodb_encrypted_2/t_91 +innodb_encrypted_2/t_92 +innodb_encrypted_2/t_93 +innodb_encrypted_2/t_94 +innodb_encrypted_2/t_95 +innodb_encrypted_2/t_96 +innodb_encrypted_2/t_97 +innodb_encrypted_2/t_98 +innodb_encrypted_2/t_99 SET GLOBAL innodb_encrypt_tables = off; SET GLOBAL innodb_encryption_threads=4; -# Wait until all default encrypted tables have been decrypted -# should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -100 -# should be 200 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -COUNT(*) -200 -show status like 'innodb_pages0_read%'; -Variable_name Value -Innodb_pages0_read 303 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_2/t_1 +innodb_encrypted_2/t_10 +innodb_encrypted_2/t_100 +innodb_encrypted_2/t_11 +innodb_encrypted_2/t_12 +innodb_encrypted_2/t_13 +innodb_encrypted_2/t_14 +innodb_encrypted_2/t_15 +innodb_encrypted_2/t_16 +innodb_encrypted_2/t_17 +innodb_encrypted_2/t_18 +innodb_encrypted_2/t_19 +innodb_encrypted_2/t_2 +innodb_encrypted_2/t_20 +innodb_encrypted_2/t_21 +innodb_encrypted_2/t_22 +innodb_encrypted_2/t_23 +innodb_encrypted_2/t_24 +innodb_encrypted_2/t_25 +innodb_encrypted_2/t_26 +innodb_encrypted_2/t_27 +innodb_encrypted_2/t_28 +innodb_encrypted_2/t_29 +innodb_encrypted_2/t_3 +innodb_encrypted_2/t_30 +innodb_encrypted_2/t_31 +innodb_encrypted_2/t_32 +innodb_encrypted_2/t_33 +innodb_encrypted_2/t_34 +innodb_encrypted_2/t_35 +innodb_encrypted_2/t_36 +innodb_encrypted_2/t_37 +innodb_encrypted_2/t_38 +innodb_encrypted_2/t_39 +innodb_encrypted_2/t_4 +innodb_encrypted_2/t_40 +innodb_encrypted_2/t_41 +innodb_encrypted_2/t_42 +innodb_encrypted_2/t_43 +innodb_encrypted_2/t_44 +innodb_encrypted_2/t_45 +innodb_encrypted_2/t_46 +innodb_encrypted_2/t_47 +innodb_encrypted_2/t_48 +innodb_encrypted_2/t_49 +innodb_encrypted_2/t_5 +innodb_encrypted_2/t_50 +innodb_encrypted_2/t_51 +innodb_encrypted_2/t_52 +innodb_encrypted_2/t_53 +innodb_encrypted_2/t_54 +innodb_encrypted_2/t_55 +innodb_encrypted_2/t_56 +innodb_encrypted_2/t_57 +innodb_encrypted_2/t_58 +innodb_encrypted_2/t_59 +innodb_encrypted_2/t_6 +innodb_encrypted_2/t_60 +innodb_encrypted_2/t_61 +innodb_encrypted_2/t_62 +innodb_encrypted_2/t_63 +innodb_encrypted_2/t_64 +innodb_encrypted_2/t_65 +innodb_encrypted_2/t_66 +innodb_encrypted_2/t_67 +innodb_encrypted_2/t_68 +innodb_encrypted_2/t_69 +innodb_encrypted_2/t_7 +innodb_encrypted_2/t_70 +innodb_encrypted_2/t_71 +innodb_encrypted_2/t_72 +innodb_encrypted_2/t_73 +innodb_encrypted_2/t_74 +innodb_encrypted_2/t_75 +innodb_encrypted_2/t_76 +innodb_encrypted_2/t_77 +innodb_encrypted_2/t_78 +innodb_encrypted_2/t_79 +innodb_encrypted_2/t_8 +innodb_encrypted_2/t_80 +innodb_encrypted_2/t_81 +innodb_encrypted_2/t_82 +innodb_encrypted_2/t_83 +innodb_encrypted_2/t_84 +innodb_encrypted_2/t_85 +innodb_encrypted_2/t_86 +innodb_encrypted_2/t_87 +innodb_encrypted_2/t_88 +innodb_encrypted_2/t_89 +innodb_encrypted_2/t_9 +innodb_encrypted_2/t_90 +innodb_encrypted_2/t_91 +innodb_encrypted_2/t_92 +innodb_encrypted_2/t_93 +innodb_encrypted_2/t_94 +innodb_encrypted_2/t_95 +innodb_encrypted_2/t_96 +innodb_encrypted_2/t_97 +innodb_encrypted_2/t_98 +innodb_encrypted_2/t_99 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +NAME +innodb_encrypted_3/t_1 +innodb_encrypted_3/t_10 +innodb_encrypted_3/t_100 +innodb_encrypted_3/t_11 +innodb_encrypted_3/t_12 +innodb_encrypted_3/t_13 +innodb_encrypted_3/t_14 +innodb_encrypted_3/t_15 +innodb_encrypted_3/t_16 +innodb_encrypted_3/t_17 +innodb_encrypted_3/t_18 +innodb_encrypted_3/t_19 +innodb_encrypted_3/t_2 +innodb_encrypted_3/t_20 +innodb_encrypted_3/t_21 +innodb_encrypted_3/t_22 +innodb_encrypted_3/t_23 +innodb_encrypted_3/t_24 +innodb_encrypted_3/t_25 +innodb_encrypted_3/t_26 +innodb_encrypted_3/t_27 +innodb_encrypted_3/t_28 +innodb_encrypted_3/t_29 +innodb_encrypted_3/t_3 +innodb_encrypted_3/t_30 +innodb_encrypted_3/t_31 +innodb_encrypted_3/t_32 +innodb_encrypted_3/t_33 +innodb_encrypted_3/t_34 +innodb_encrypted_3/t_35 +innodb_encrypted_3/t_36 +innodb_encrypted_3/t_37 +innodb_encrypted_3/t_38 +innodb_encrypted_3/t_39 +innodb_encrypted_3/t_4 +innodb_encrypted_3/t_40 +innodb_encrypted_3/t_41 +innodb_encrypted_3/t_42 +innodb_encrypted_3/t_43 +innodb_encrypted_3/t_44 +innodb_encrypted_3/t_45 +innodb_encrypted_3/t_46 +innodb_encrypted_3/t_47 +innodb_encrypted_3/t_48 +innodb_encrypted_3/t_49 +innodb_encrypted_3/t_5 +innodb_encrypted_3/t_50 +innodb_encrypted_3/t_51 +innodb_encrypted_3/t_52 +innodb_encrypted_3/t_53 +innodb_encrypted_3/t_54 +innodb_encrypted_3/t_55 +innodb_encrypted_3/t_56 +innodb_encrypted_3/t_57 +innodb_encrypted_3/t_58 +innodb_encrypted_3/t_59 +innodb_encrypted_3/t_6 +innodb_encrypted_3/t_60 +innodb_encrypted_3/t_61 +innodb_encrypted_3/t_62 +innodb_encrypted_3/t_63 +innodb_encrypted_3/t_64 +innodb_encrypted_3/t_65 +innodb_encrypted_3/t_66 +innodb_encrypted_3/t_67 +innodb_encrypted_3/t_68 +innodb_encrypted_3/t_69 +innodb_encrypted_3/t_7 +innodb_encrypted_3/t_70 +innodb_encrypted_3/t_71 +innodb_encrypted_3/t_72 +innodb_encrypted_3/t_73 +innodb_encrypted_3/t_74 +innodb_encrypted_3/t_75 +innodb_encrypted_3/t_76 +innodb_encrypted_3/t_77 +innodb_encrypted_3/t_78 +innodb_encrypted_3/t_79 +innodb_encrypted_3/t_8 +innodb_encrypted_3/t_80 +innodb_encrypted_3/t_81 +innodb_encrypted_3/t_82 +innodb_encrypted_3/t_83 +innodb_encrypted_3/t_84 +innodb_encrypted_3/t_85 +innodb_encrypted_3/t_86 +innodb_encrypted_3/t_87 +innodb_encrypted_3/t_88 +innodb_encrypted_3/t_89 +innodb_encrypted_3/t_9 +innodb_encrypted_3/t_90 +innodb_encrypted_3/t_91 +innodb_encrypted_3/t_92 +innodb_encrypted_3/t_93 +innodb_encrypted_3/t_94 +innodb_encrypted_3/t_95 +innodb_encrypted_3/t_96 +innodb_encrypted_3/t_97 +innodb_encrypted_3/t_98 +innodb_encrypted_3/t_99 use test; drop database innodb_encrypted_1; drop database innodb_encrypted_2; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/second_plugin-12863.result mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/second_plugin-12863.result --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/r/second_plugin-12863.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/r/second_plugin-12863.result 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,7 @@ +call mtr.add_suppression('debug.key.management'); +install soname 'debug_key_management'; +ERROR HY000: Can't initialize function 'debug_key_management'; Plugin initialization function failed. +create table t1 (a varchar(255)) engine=innodb encrypted=yes; +create table t2 (a varchar(255)) engine=innodb; +create table t3 (a varchar(255)) engine=innodb encrypted=no; +drop table t1, t2, t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/encryption_force.test mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/encryption_force.test --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/encryption_force.test 2017-07-01 18:20:16.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/encryption_force.test 2017-12-21 15:48:46.000000000 +0000 @@ -22,13 +22,11 @@ show create table t3; show create table t4; ---replace_regex /#sql-[0-9a-f_]*/#sql-temporary/ ---error ER_CANT_CREATE_TABLE +--error ER_ILLEGAL_HA_CREATE_OPTION alter table t1 encrypted=no; alter table t2 encrypted=yes; alter table t3 encrypted=default; ---replace_regex /#sql-[0-9a-f_]*/#sql-temporary/ ---error ER_CANT_CREATE_TABLE +--error ER_ILLEGAL_HA_CREATE_OPTION alter table t4 encrypted=no; show create table t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/filekeys_goodtest.inc mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/filekeys_goodtest.inc --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/filekeys_goodtest.inc 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/filekeys_goodtest.inc 2017-12-21 15:48:46.000000000 +0000 @@ -7,8 +7,7 @@ alter table t1 encryption_key_id=2; show create table t1; ---replace_regex /#sql-[0-9a-f_]*/#sql-temporary/ ---error ER_CANT_CREATE_TABLE +--error ER_ILLEGAL_HA_CREATE_OPTION alter table t1 encryption_key_id=3; show create table t1; alter table t1 encryption_key_id=33; @@ -17,4 +16,3 @@ show create table t1; drop table t1; - diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innochecksum.test mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innochecksum.test --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innochecksum.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innochecksum.test 2017-12-21 15:48:46.000000000 +0000 @@ -2,27 +2,24 @@ # MDEV-8773: InnoDB innochecksum does not work with encrypted or page compressed tables # -# Don't test under embedded +# Don't test under embedded as we restart server -- source include/not_embedded.inc # Require InnoDB -- source include/have_innodb.inc -- source include/have_file_key_management_plugin.inc +-- source include/innodb_page_size_small.inc if (!$INNOCHECKSUM) { --echo Need innochecksum binary --die Need innochecksum binary } ---disable_query_log -let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`; -let $innodb_file_format_orig = `SELECT @@innodb_file_format`; -let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`; ---enable_query_log - +--disable_warnings SET GLOBAL innodb_file_format = `Barracuda`; SET GLOBAL innodb_file_per_table = ON; # zlib set global innodb_compression_algorithm = 1; +--enable_warnings --echo # Create and populate a tables CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=4; @@ -30,9 +27,11 @@ CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTED=NO; CREATE TABLE t4 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1; CREATE TABLE t5 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4; +CREATE TABLE t6 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB; --disable_query_log --let $i = 1000 +begin; while ($i) { INSERT INTO t1 (b) VALUES (REPEAT('abcdefghijklmnopqrstuvwxyz', 100)); @@ -42,6 +41,8 @@ INSERT INTO t3 SELECT * FROM t1; INSERT INTO t4 SELECT * FROM t1; INSERT INTO t5 SELECT * FROM t1; +INSERT INTO t6 SELECT * FROM t1; +commit; --enable_query_log let $MYSQLD_DATADIR=`select @@datadir`; @@ -50,6 +51,10 @@ let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd; let t4_IBD = $MYSQLD_DATADIR/test/t4.ibd; let t5_IBD = $MYSQLD_DATADIR/test/t5.ibd; +let t6_IBD = $MYSQLD_DATADIR/test/t6.ibd; + +let INNODB_PAGE_SIZE=`select @@innodb_page_size`; +let MYSQLD_DATADIR=`select @@datadir`; --echo # Write file to make mysql-test-run.pl expect the "crash", but don't --echo # start it until it's told to @@ -83,19 +88,198 @@ --exec $INNOCHECKSUM $t4_IBD +--echo # Run innochecksum on t5 + +--exec $INNOCHECKSUM $t5_IBD + +--echo # Run innochecksum on t6 + +--exec $INNOCHECKSUM $t6_IBD + --enable_result_log +--echo # Backup tables before corrupting +--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t1.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t2.ibd $MYSQLD_DATADIR/test/t2.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t3.ibd $MYSQLD_DATADIR/test/t3.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t4.ibd $MYSQLD_DATADIR/test/t4.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t5.ibd $MYSQLD_DATADIR/test/t5.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t6.ibd $MYSQLD_DATADIR/test/t6.ibd.backup + +# +# MDEV-11939: innochecksum mistakes a file for an encrypted one +# + +--echo # Corrupt FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION + +perl; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t1.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t2.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t3.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t6.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +EOF + +-- disable_result_log +--error 1 +--exec $INNOCHECKSUM $t1_IBD + +--echo # Run innochecksum on t2 + +--error 1 +--exec $INNOCHECKSUM $t2_IBD + +--echo # Run innochecksum on t3 +--echo # no encryption corrupting the field should not have effect +--exec $INNOCHECKSUM $t3_IBD + +--echo # Run innochecksum on t6 +--echo # no encryption corrupting the field should not have effect +--exec $INNOCHECKSUM $t6_IBD + +--enable_result_log + +--echo # Restore the original tables +--remove_file $MYSQLD_DATADIR/test/t1.ibd +--remove_file $MYSQLD_DATADIR/test/t2.ibd +--remove_file $MYSQLD_DATADIR/test/t3.ibd +--remove_file $MYSQLD_DATADIR/test/t4.ibd +--remove_file $MYSQLD_DATADIR/test/t5.ibd +--remove_file $MYSQLD_DATADIR/test/t6.ibd +--copy_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd +--copy_file $MYSQLD_DATADIR/test/t2.ibd.backup $MYSQLD_DATADIR/test/t2.ibd +--copy_file $MYSQLD_DATADIR/test/t3.ibd.backup $MYSQLD_DATADIR/test/t3.ibd +--copy_file $MYSQLD_DATADIR/test/t4.ibd.backup $MYSQLD_DATADIR/test/t4.ibd +--copy_file $MYSQLD_DATADIR/test/t5.ibd.backup $MYSQLD_DATADIR/test/t5.ibd +--copy_file $MYSQLD_DATADIR/test/t6.ibd.backup $MYSQLD_DATADIR/test/t6.ibd + +--echo # Corrupt FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION+4 (post encryption checksum) + +perl; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t1.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 30, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t2.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 30, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t3.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 30, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t6.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 30, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +EOF + +-- disable_result_log +--error 1 +--exec $INNOCHECKSUM $t1_IBD + +--echo # Run innochecksum on t2 +--error 1 +--exec $INNOCHECKSUM $t2_IBD + +--echo # Run innochecksum on t3 +--error 1 +--exec $INNOCHECKSUM $t3_IBD + +--echo # Run innochecksum on t6 +--echo # no encryption corrupting the field should not have effect +--exec $INNOCHECKSUM $t6_IBD + +--enable_result_log + +--echo # Restore the original tables +--remove_file $MYSQLD_DATADIR/test/t1.ibd +--remove_file $MYSQLD_DATADIR/test/t2.ibd +--remove_file $MYSQLD_DATADIR/test/t3.ibd +--remove_file $MYSQLD_DATADIR/test/t4.ibd +--remove_file $MYSQLD_DATADIR/test/t5.ibd +--remove_file $MYSQLD_DATADIR/test/t6.ibd +--copy_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd +--copy_file $MYSQLD_DATADIR/test/t2.ibd.backup $MYSQLD_DATADIR/test/t2.ibd +--copy_file $MYSQLD_DATADIR/test/t3.ibd.backup $MYSQLD_DATADIR/test/t3.ibd +--copy_file $MYSQLD_DATADIR/test/t4.ibd.backup $MYSQLD_DATADIR/test/t4.ibd +--copy_file $MYSQLD_DATADIR/test/t5.ibd.backup $MYSQLD_DATADIR/test/t5.ibd +--copy_file $MYSQLD_DATADIR/test/t6.ibd.backup $MYSQLD_DATADIR/test/t6.ibd + +--echo # Corrupt FIL_DATA+10 (data) + +perl; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t1.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 48, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t2.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 48, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t3.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 48, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t6.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 48, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +EOF + +-- disable_result_log +--error 1 +--exec $INNOCHECKSUM $t1_IBD + +--echo # Run innochecksum on t2 +--error 1 +--exec $INNOCHECKSUM $t2_IBD + +--echo # Run innochecksum on t3 +--error 1 +--exec $INNOCHECKSUM $t3_IBD + +--echo # Run innochecksum on t6 +--error 1 +--exec $INNOCHECKSUM $t6_IBD + +--enable_result_log + +--echo # Restore the original tables +--move_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd +--move_file $MYSQLD_DATADIR/test/t2.ibd.backup $MYSQLD_DATADIR/test/t2.ibd +--move_file $MYSQLD_DATADIR/test/t3.ibd.backup $MYSQLD_DATADIR/test/t3.ibd +--move_file $MYSQLD_DATADIR/test/t4.ibd.backup $MYSQLD_DATADIR/test/t4.ibd +--move_file $MYSQLD_DATADIR/test/t5.ibd.backup $MYSQLD_DATADIR/test/t5.ibd +--move_file $MYSQLD_DATADIR/test/t6.ibd.backup $MYSQLD_DATADIR/test/t6.ibd + --echo # Write file to make mysql-test-run.pl start up the server again --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --enable_reconnect --source include/wait_until_connected_again.inc --echo # Cleanup -DROP TABLE t1, t2, t3, t4, t5; - -# reset system ---disable_query_log -EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig; -EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; -EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig; ---enable_query_log +DROP TABLE t1, t2, t3, t4, t5, t6; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb-encryption-alter.test mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb-encryption-alter.test --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb-encryption-alter.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb-encryption-alter.test 2017-12-21 15:48:46.000000000 +0000 @@ -33,10 +33,8 @@ CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB; SHOW CREATE TABLE t1; CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=1; ---replace_regex /#sql-[0-9a-f_]*/#sql-temporary/ ---error 1005 +--error ER_ILLEGAL_HA_CREATE_OPTION ALTER TABLE t1 ENCRYPTION_KEY_ID=99; ---replace_regex /#sql-[0-9a-f_]*/#sql-temporary/ SHOW WARNINGS; set innodb_default_encryption_key_id = 1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb_encryption.test mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb_encryption.test --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb_encryption.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb_encryption.test 2017-12-21 15:48:46.000000000 +0000 @@ -3,6 +3,7 @@ # -- source include/have_innodb.inc -- source include/have_example_key_management_plugin.inc +-- source include/innodb_undo_tablespaces.inc # embedded does not support restart -- source include/not_embedded.inc @@ -11,78 +12,29 @@ SHOW VARIABLES LIKE 'innodb_encrypt%'; -DESCRIBE INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SET GLOBAL innodb_encrypt_tables = ON; ---echo # Wait max 5 min for key encryption threads to encrypt one space -let $cnt=300; -while ($cnt) -{ - let $success=`SELECT COUNT(*) > 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION > 0`; - if ($success) - { - let $cnt=0; - } - if (!$success) - { - real_sleep 1; - dec $cnt; - } -} -if (!$success) -{ - SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; - SHOW STATUS LIKE 'innodb_encryption%'; - -- die Timeout waiting for encryption threads -} ---echo # Success! +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) >= 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; ---echo # Wait max 10 min for key encryption threads to encrypt all space -let $cnt=600; -while ($cnt) -{ - let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0`; - if ($success) - { - let $cnt=0; - } - if (!$success) - { - real_sleep 1; - dec $cnt; - } -} -if (!$success) -{ - SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; - SHOW STATUS LIKE 'innodb_encryption%'; - -- die Timeout waiting for encryption threads -} --echo # Success! --echo # Now turn off encryption and wait for threads to decrypt everything SET GLOBAL innodb_encrypt_tables = off; ---echo # Wait max 10 min for key encryption threads to decrypt all space -let $cnt=600; -while ($cnt) -{ - let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0`; - if ($success) - { - let $cnt=0; - } - if (!$success) - { - real_sleep 1; - dec $cnt; - } -} -if (!$success) -{ - SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; - SHOW STATUS LIKE 'innodb_encryption%'; - -- die Timeout waiting for encryption threads -} +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + --echo # Success! --echo # Shutdown innodb_encryption_threads @@ -93,84 +45,32 @@ SET GLOBAL innodb_encrypt_tables = on; --echo # Wait 15s to check that nothing gets encrypted -let $cnt=15; -while ($cnt) -{ - let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0`; - if ($success) - { - real_sleep 1; - dec $cnt; - } - if (!$success) - { - SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; - -- die Failure, tablespace getting encrypted even if innodb_encryption_threads=0 - } -} +--let $wait_timeout= 15 +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + --echo # Success! --echo # Startup innodb_encryption_threads SET GLOBAL innodb_encryption_threads=@start_global_value; ---echo # Wait 1 min to check that it start encrypting again -let $cnt=60; -while ($cnt) -{ - let $success=`SELECT COUNT(*) > 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 OR KEY_ROTATION_PAGE_NUMBER IS NOT NULL`; - if ($success) - { - let $cnt=0; - } - if (!$success) - { - real_sleep 1; - dec $cnt; - } -} -if (!$success) -{ - SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; - SHOW STATUS LIKE 'innodb_encryption%'; - -- die Timeout waiting for encryption threads -} ---echo # Success! +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) >=3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; ---echo # ---echo # Check that restart with encryption turned off works ---echo # even if spaces are encrypted ---echo # ---echo # First wait max 10 min for key encryption threads to encrypt all spaces -let $cnt=600; -while ($cnt) -{ - let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0`; - if ($success) - { - let $cnt=0; - } - if (!$success) - { - real_sleep 1; - dec $cnt; - } -} -if (!$success) -{ - SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; - SHOW STATUS LIKE 'innodb_encryption%'; - -- die Timeout waiting for encryption threads -} --echo # Success! --echo # Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0 -- let $restart_parameters=--innodb_encrypt_tables=0 --innodb_encryption_threads=0 -- source include/restart_mysqld.inc SHOW VARIABLES LIKE 'innodb_encrypt%'; -SELECT COUNT(*) > 0 as should_be_1 -FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION -WHERE MIN_KEY_VERSION <> 0; ---echo # Restart mysqld again...with default options --- let $restart_parameters= --- source include/restart_mysqld.inc +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb-first-page-read.test mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb-first-page-read.test --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb-first-page-read.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb-first-page-read.test 2017-12-21 15:48:46.000000000 +0000 @@ -7,6 +7,8 @@ SET GLOBAL innodb_file_per_table = ON; --enable_warnings +FLUSH STATUS; + create database innodb_test; use innodb_test; create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; @@ -63,16 +65,19 @@ insert into innodb_datadir3 select * from innodb_normal; commit; +FLUSH STATUS; + --echo # Restart server and see how many page 0's are read --source include/restart_mysqld.inc ---echo # result should be less than actual number of tables ---echo # i.e. < 23 + 3 = 26 -show status like 'innodb_pages0_read%'; +--echo # result should actual number of tables except remote tables could be read twice +--echo # i.e. < 23 + 3*2 = 29 + +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; use innodb_test; -show status like 'innodb_pages0_read%'; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; use test; -show status like 'innodb_pages0_read%'; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; set global innodb_encrypt_tables=OFF; @@ -80,18 +85,25 @@ --let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 --source include/wait_condition.inc -show status like 'innodb_pages0_read%'; +--echo # result should be actual number of tables except remote tables could be read twice +--echo # i.e. < 23 + 3*2 = 29 + +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; use innodb_test; -show status like 'innodb_pages0_read%'; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; use test; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; + +FLUSH STATUS; --echo # restart and see number read page 0 -- source include/restart_mysqld.inc -show status like 'innodb_pages0_read%'; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; use innodb_test; -show status like 'innodb_pages0_read%'; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; use test; +SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; drop database innodb_test; -show status like 'innodb_pages0_read%'; +FLUSH STATUS; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb_lotoftables.test mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb_lotoftables.test --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/innodb_lotoftables.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/innodb_lotoftables.test 2017-12-21 15:48:46.000000000 +0000 @@ -53,9 +53,8 @@ # # Verify # ---echo # should be 100 - -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%'; +--echo # should be empty +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%'; # # This will create 100 tables that are encrypted always @@ -89,10 +88,10 @@ # # Verify # ---echo # should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; ---echo # should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; +--echo # should contain 100 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +--echo # should contain 0 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; # # This will create 100 tables that are not encrypted @@ -126,45 +125,26 @@ # # Verify # ---echo # should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; ---echo # should be 200 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; +--echo # should contain 100 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +--echo # should contain 100 tables +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; use test; show status like 'innodb_pages0_read%'; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; SET GLOBAL innodb_encrypt_tables = on; SET GLOBAL innodb_encryption_threads=4; ---echo # Wait until all encrypted tables have been encrypted -let $cnt=600; -while ($cnt) -{ - let $success=`SELECT COUNT(*) = 100 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0`; - if ($success) - { - let $cnt=0; - } - if (!$success) - { - real_sleep 1; - dec $cnt; - } -} -if (!$success) -{ - SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; - SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; - SHOW STATUS LIKE 'innodb_encryption%'; - -- die Timeout waiting for encryption threads -} +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 100 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +--source include/wait_condition.inc -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; show status like 'innodb_pages0_read%'; --echo # Success! @@ -231,40 +211,19 @@ show status like 'innodb_pages0_read%'; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; SET GLOBAL innodb_encrypt_tables = off; SET GLOBAL innodb_encryption_threads=4; ---echo # Wait until all default encrypted tables have been decrypted -let $cnt=600; -while ($cnt) -{ - let $success=`SELECT COUNT(*) = 100 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0`; - if ($success) - { - let $cnt=0; - } - if (!$success) - { - real_sleep 1; - dec $cnt; - } -} -if (!$success) -{ - SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; - SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; - SHOW STATUS LIKE 'innodb_encryption%'; - -- die Timeout waiting for encryption threads -} +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 100 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +--source include/wait_condition.inc ---echo # should be 100 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; ---echo # should be 200 -SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; -show status like 'innodb_pages0_read%'; + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; # # Cleanup diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/second_plugin-12863.test mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/second_plugin-12863.test --- mariadb-10.1-10.1.25/mysql-test/suite/encryption/t/second_plugin-12863.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/encryption/t/second_plugin-12863.test 2017-12-21 15:48:46.000000000 +0000 @@ -0,0 +1,16 @@ +# +# MDEV-12863 No table can be created after second encryption plugin attempted to load +# +--source include/have_innodb.inc +--source include/have_file_key_management_plugin.inc + +call mtr.add_suppression('debug.key.management'); + +--error 1123 +install soname 'debug_key_management'; + +create table t1 (a varchar(255)) engine=innodb encrypted=yes; +create table t2 (a varchar(255)) engine=innodb; +create table t3 (a varchar(255)) engine=innodb encrypted=no; + +drop table t1, t2, t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/engines/funcs/t/rpl_insert.test mariadb-10.1-10.1.30/mysql-test/suite/engines/funcs/t/rpl_insert.test --- mariadb-10.1-10.1.25/mysql-test/suite/engines/funcs/t/rpl_insert.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/engines/funcs/t/rpl_insert.test 2017-12-21 15:48:47.000000000 +0000 @@ -2,9 +2,9 @@ --echo # Bug#20821: INSERT DELAYED fails to write some rows to binlog --echo # ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_windows.inc +--source include/master-slave.inc --disable_warnings CREATE SCHEMA IF NOT EXISTS mysqlslap; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/federated/net_thd_crash-12725.result mariadb-10.1-10.1.30/mysql-test/suite/federated/net_thd_crash-12725.result --- mariadb-10.1-10.1.25/mysql-test/suite/federated/net_thd_crash-12725.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/federated/net_thd_crash-12725.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,10 @@ +SET GLOBAL query_cache_size= 16*1024*1024; +SET GLOBAL query_cache_type= 1; +CREATE TABLE t1 (i INT); +CREATE TABLE t2 (i INT) ENGINE=FEDERATED CONNECTION="mysql://root@localhost:MASTER_MYPORT/test/t1"; +ALTER TABLE t2 DISABLE KEYS; +ERROR HY000: Storage engine FEDERATED of the table `test`.`t2` doesn't have this option +CREATE TABLE t3 (i INT) ENGINE=FEDERATED CONNECTION="mysql://root@localhost:MASTER_MYPORT/test/t1"; +SET GLOBAL query_cache_size= default; +SET GLOBAL query_cache_type= default; +drop table t1, t2, t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/federated/net_thd_crash-12725.test mariadb-10.1-10.1.30/mysql-test/suite/federated/net_thd_crash-12725.test --- mariadb-10.1-10.1.25/mysql-test/suite/federated/net_thd_crash-12725.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/federated/net_thd_crash-12725.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,17 @@ +# +# MDEV-12725 select on federated table crashes server +# +# +SET GLOBAL query_cache_size= 16*1024*1024; +SET GLOBAL query_cache_type= 1; +CREATE TABLE t1 (i INT); +--replace_result $MASTER_MYPORT MASTER_MYPORT +eval CREATE TABLE t2 (i INT) ENGINE=FEDERATED CONNECTION="mysql://root@localhost:$MASTER_MYPORT/test/t1"; +--error ER_ILLEGAL_HA +ALTER TABLE t2 DISABLE KEYS; +--replace_result $MASTER_MYPORT MASTER_MYPORT +eval CREATE TABLE t3 (i INT) ENGINE=FEDERATED CONNECTION="mysql://root@localhost:$MASTER_MYPORT/test/t1"; +source include/restart_mysqld.inc; +SET GLOBAL query_cache_size= default; +SET GLOBAL query_cache_type= default; +drop table t1, t2, t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/disabled.def mariadb-10.1-10.1.30/mysql-test/suite/galera/disabled.def --- mariadb-10.1-10.1.25/mysql-test/suite/galera/disabled.def 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/disabled.def 2017-12-21 15:48:47.000000000 +0000 @@ -1,58 +1,61 @@ -galera_wsrep_provider_unset_set : lp1379204 'Unsupported protocol downgrade: incremental data collection disabled. Expect abort.' -galera_kill_nochanges : mysql-wsrep#24 Galera server does not restart properly if killed -galera_bf_abort_for_update : mysql-wsrep#26 SELECT FOR UPDATE sometimes allowed to proceed in the face of a concurrent update -galera_toi_ddl_fk_insert : qa#39 galera_toi_ddl_fk_insert fails sporadically -galera_binlog_row_image : MDEV-7471 - Enable binlog_row_image parameter in MariaDB -galera_binlog_rows_query_log_events : Unknown system variable 'binlog_rows_query_log_events' (see annotate_rows_log_event) - -galera_ist_mysqldump : Lost connection to MySQL server during query -galera_ist_xtrabackup-v2 : mysqltest failed but provided no output -galera_ist_innodb_flush_logs : mysqltest failed but provided no output -galera_sst_mysqldump : query 'show status' failed with wrong errno 1927 -galera_as_master_gtid : Needs to be re-worked -galera_as_master_gtid_change_master : Needs to be re-worked -galera_migrate : query 'let $success= `$wait_condition`' failed: 1146 -galera_var_notify_cmd : Result content mismatch -query_cache : Fails intermittently due to content mismatch. Needs to be investigated -basic : Fails intermittently without providing any output. Needs to be investigated -galera_var_auto_inc_control_on : Failing sporadically with content mismatch -galera_parallel_simple : Failing sporadically -galera_bf_abort : Failing sporadically -galera_log_output_csv : Failing sporadically -galera_as_slave_preordered : wsrep-preordered is not available in MariaDB Galera cluster -galera_gra_log : TODO: investigate -galera_as_slave_replication_bundle : TODO: investigate -galera_ssl_upgrade : TODO: investigate -mysql-wsrep#90 : TODO: investigate -galera_flush : mysql-wsrep/issues/229 -galera_transaction_read_only : mysql-wsrep/issues/229 -galera_gcs_fragment : Incorrect arguments to SET -galera_flush_local : Fails sporadically -galera_binlog_stmt_autoinc : TODO: investigate -galera_concurrent_ctas : Test times out, investigate -MW-286 : TODO: investigate -galera_sst_xtrabackup-v2-options : TODO: Fix test case -galera_sst_xtrabackup-v2 : TODO: Fix test case -galera_sst_xtrabackup-v2_encrypt_with_key : TODO: Fix test case -mysql-wsrep#33 : TODO: investigate -MW-258 : MDEV-11229 -galera_as_master : MDEV-11229 -MW-44 : MDEV-11229 -galera_gcs_fc_limit : MDEV-11229 -galera_roles : MDEV-11229 -galera_lock_table : MDEV-11229 -GAL-480 : Investigate -galera_fk_no_pk :Investigate -galera_account_management : Investigate -galera.galera_var_retry_autocommit : MDEV-12319 #Sparodic Faliure -galera.galera_gcs_fc_limit : MDEV-12319 #Sparodic Faliure -galera.galera_toi_ddl_nonconflicting : MDEV-12319 #Sparodic Faliure -galera.mysql-wsrep#198 : MDEV-12319 #Sparodic Faliure -galera.galera_pc_ignore_sb : MDEV-12319 #Sparodic Faliure -galera.MW-329 : MDEV-12319 #Sparodic Faliure -galera.galera_ist_recv_bind : MDEV-12319 #Failed to start mysqld -galera.galera_ist_restart_joiner : MDEV-12319 #Failed to start mysqld -galera.galera_ssl_compression : MDEV-12319 #Failed to start mysqld -galera.galera_wan : MDEV-12319 #Failed to start mysqld -galera.rpl_row_annotate : MDEV-12319 #Failed to start mysqld -galera_restart_on_unknown_option : Solve +############################################################################## +# +# List the test cases that are to be disabled temporarily. +# +# Separate the test case name and the comment with ':'. +# +# : MDEV- +# +# Do not use any TAB characters for whitespace. +# +############################################################################## +MW-336 : MDEV-13549 Galera test failures +galera_gra_log : MDEV-13549 Galera test failures +galera_flush_local : MDEV-13549 Galera test failures +galera_flush : MDEV-13549 Galera test failures +MW-329 : MDEV-13549 Galera test failures +galera_account_management : MariaDB 10.0 does not support ALTER USER +galera_binlog_row_image : MariaDB 10.0 does not support binlog_row_image +galera_binlog_rows_query_log_events: MariaDB does not support binlog_rows_query_log_events +GAL-419 : MDEV-13549 Galera test failures +galera_toi_ddl_fk_insert : MDEV-13549 Galera test failures +galera_var_notify_cmd : MDEV-13549 Galera test failures +galera_var_slave_threads : MDEV-13549 Galera test failures +mysql-wsrep#90 : MDEV-13549 Galera test failures +galera_as_master_gtid : Requires MySQL GTID +galera_as_master_gtid_change_master : Requires MySQL GTID +galera_as_slave_replication_bundle : MDEV-13549 Galera test failures +galera_as_slave_preordered : wsrep-preordered feature not merged to MariaDB +galera_gcs_fragment : MDEV-13549 Galera test failures +galera_gcache_recover : MDEV-13549 Galera test failures +galera_gcache_recover_full_gcache : MDEV-13549 Galera test failures +galera_gcache_recover_manytrx : MDEV-13549 Galera test failures +galera_ist_mysqldump : MDEV-13549 Galera test failures +mysql-wsrep#31 : MDEV-13549 Galera test failures +galera_migrate : MariaDB 10.0 does not support START SLAVE USER +galera_concurrent_ctas : MDEV-13549 Galera test failures +galera_bf_abort_for_update : MDEV-13549 Galera test failures +galera_wsrep_desync_wsrep_on : MDEV-13549 Galera test failures +galera_ssl_upgrade : MDEV-13549 Galera test failures +mysql-wsrep#33 : MDEV-13549 Galera test failures +galera_var_auto_inc_control_on : MDEV-13549 Galera test failures +MW-44 : MDEV-13549 Galera test failures +galera_var_retry_autocommit : MDEV-13549 Galera test failures +pxc-421 : MDEV-13549 Galera test failures +lp1376747-2 : MDEV-13549 Galera test failures +lp1376747 : MDEV-13549 Galera test failures +galera_toi_ddl_nonconflicting : MDEV-13549 Galera test failures +galera_parallel_simple : MDEV-13549 Galera test failures +galera_admin : MDEV-13549 Galera test failures +galera_var_max_ws_rows : MDEV-13549 Galera test failures 10.1 +MW-286 : MDEV-13549 Galera test failures 10.1 +galera_as_master: MDEV-13549 Galera test failures 10.1 +galera_pc_ignore_sb : MDEV-13549 Galera test failures 10.1 +galera_lock_table : MDEV-13549 Galera test failures 10.1 +MW-284 : MDEV-13549 Galera test failures 10.1 +galera_as_slave : MDEV-13549 Galera test failures 10.1 +MW-328C: MDEV-13549 Galera test failures 10.1 +MW-328A: MDEV-13549 Galera test failures 10.1 +MW-328B: MDEV-13549 Galera test failures 10.1 +MW-328: MDEV-13549 Galera test failures 10.1 +galera_suspend_slave: MDEV-13549 Galera test failures 10.1 \ No newline at end of file diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_master.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_master.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_master.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_master.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -29,7 +29,7 @@ wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 [mysqld.2] #galera_port=@OPT.port @@ -48,7 +48,7 @@ wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 [mysqld.3] server-id=3 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_master_slave.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_master_slave.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_master_slave.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_master_slave.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -29,7 +29,7 @@ # enforce read-committed characteristics across the cluster wsrep_causal_reads=ON -wsrep_sync_wait = 7 +wsrep_sync_wait = 15 wsrep_node_address=127.0.0.1 wsrep_sst_receive_address=127.0.0.2:@mysqld.2.#sst_port @@ -49,7 +49,7 @@ # enforce read-committed characteristics across the cluster wsrep_causal_reads=ON -wsrep_sync_wait = 7 +wsrep_sync_wait = 15 wsrep_node_address=127.0.0.1 wsrep_sst_receive_address=127.0.0.2:@mysqld.3.#sst_port diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_master_with_repl_filter.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_master_with_repl_filter.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_master_with_repl_filter.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_master_with_repl_filter.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -23,7 +23,7 @@ # enforce read-committed characteristics across the cluster wsrep_causal_reads=ON -wsrep_sync_wait = 7 +wsrep_sync_wait = 15 wsrep_node_address=127.0.0.1 wsrep_sst_receive_address=127.0.0.2:@mysqld.1.#sst_port @@ -49,7 +49,7 @@ # enforce read-committed characteristics across the cluster wsrep_causal_reads=ON -wsrep_sync_wait = 7 +wsrep_sync_wait = 15 wsrep_node_address=127.0.0.1 wsrep_sst_receive_address=127.0.0.2:@mysqld.2.#sst_port diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_slave.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_slave.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes_as_slave.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes_as_slave.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -33,7 +33,7 @@ # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 server-id=2 [mysqld.3] @@ -57,7 +57,7 @@ # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 server-id=3 [ENV] diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_2nodes.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_2nodes.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -9,7 +9,7 @@ wsrep-provider=@ENV.WSREP_PROVIDER wsrep_node_address=127.0.0.1 # enforce read-committed characteristics across the cluster -wsrep-sync-wait=7 +wsrep-sync-wait=15 [mysqld.1] #galera_port=@OPT.port @@ -29,7 +29,7 @@ # enforce read-committed characteristics across the cluster wsrep_causal_reads=ON -wsrep_sync_wait = 7 +wsrep_sync_wait = 15 wsrep_node_address=127.0.0.1 wsrep_sst_receive_address=127.0.0.2:@mysqld.2.#sst_port diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_3nodes_as_slave.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_3nodes_as_slave.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_3nodes_as_slave.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_3nodes_as_slave.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -30,7 +30,7 @@ # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 server-id=2 [mysqld.3] @@ -51,7 +51,7 @@ # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 server-id=3 [mysqld.4] @@ -72,7 +72,7 @@ # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 server-id=4 [ENV] diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_4nodes.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_4nodes.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/galera_4nodes.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/galera_4nodes.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -10,7 +10,7 @@ wsrep_node_address=127.0.0.1 # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 [mysqld.1] #galera_port=@OPT.port diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/GAL-401.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/GAL-401.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/GAL-401.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/GAL-401.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,13 +1,16 @@ SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; SET @@global.wsrep_desync = 1; SET SESSION wsrep_dirty_reads=1; +SET SESSION wsrep_sync_wait=0; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)); SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0'; +SET wsrep_dirty_reads=0; SHOW STATUS LIKE 'wsrep_desync_count'; Variable_name Value wsrep_desync_count 0 SET @@global.wsrep_desync = 0; +SET SESSION wsrep_sync_wait=15; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_applier_ftwrl_table_alter.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_applier_ftwrl_table_alter.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_applier_ftwrl_table_alter.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_applier_ftwrl_table_alter.result 2017-12-21 15:48:47.000000000 +0000 @@ -12,7 +12,7 @@ COUNT(*) = 1 1 UNLOCK TABLES; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_applier_ftwrl_table.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_applier_ftwrl_table.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_applier_ftwrl_table.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_applier_ftwrl_table.result 2017-12-21 15:48:47.000000000 +0000 @@ -8,7 +8,7 @@ COUNT(*) = 0 1 UNLOCK TABLES; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SELECT COUNT(*) = 2 FROM t1; COUNT(*) = 2 1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_as_slave_autoinc.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_as_slave_autoinc.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_as_slave_autoinc.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_as_slave_autoinc.result 2017-12-21 15:48:47.000000000 +0000 @@ -35,11 +35,9 @@ show variables like 'binlog_format'; Variable_name Value binlog_format STATEMENT -show variables like '%auto_increment%'; +show variables like 'auto_increment_increment'; Variable_name Value auto_increment_increment 7 -auto_increment_offset 5 -wsrep_auto_increment_control ON select * from t1; i c 1 dummy_text diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_bf_abort_flush_for_export.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_bf_abort_flush_for_export.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_bf_abort_flush_for_export.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_bf_abort_flush_for_export.result 2017-12-21 15:48:47.000000000 +0000 @@ -6,7 +6,7 @@ UNLOCK TABLES; COMMIT; SET AUTOCOMMIT=ON; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SELECT COUNT(*) = 1 FROM t1; COUNT(*) = 1 1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_bf_lock_wait.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_bf_lock_wait.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_bf_lock_wait.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_bf_lock_wait.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,18 @@ +CREATE TABLE t1 ENGINE=InnoDB select 1 as a, 1 as b union select 2, 2; +ALTER TABLE t1 add primary key(a); +CREATE PROCEDURE p1() +BEGIN +DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback; +WHILE 1 DO +start transaction; +update t1 set b=connection_id() where a=1; +commit; +END WHILE; +END| +call p1; +call p1; +call p1; +call p1; +checking error log for 'BF lock wait long' message for 10 times every 10 seconds ... +drop table t1; +drop procedure p1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_ddl_multiline.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_ddl_multiline.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_ddl_multiline.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_ddl_multiline.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,80 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE t3 (f1 INTEGER) ENGINE=InnoDB; CREATE TABLE t4 (f1 INTEGER) ENGINE=InnoDB;; +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (1); +CREATE TABLE t5 (f1 INTEGER) ENGINE=InnoDB; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE t6 (f1 INTEGER) ENGINE=InnoDB; INSERT INTO t2 VALUES (1);; +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +include/diff_servers.inc [servers=1 2] +DROP TABLE t1, t2, t3, t4, t5, t6; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_defaults.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_defaults.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_defaults.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_defaults.result 2017-12-21 15:48:47.000000000 +0000 @@ -50,8 +50,8 @@ WSREP_SST_DONOR WSREP_SST_DONOR_REJECTS_QUERIES OFF WSREP_SST_METHOD rsync -WSREP_SYNC_WAIT 7 -; ; ; cert.log_conflicts = no; debug = no; evs.auto_evict = 0; evs.causal_keepalive_period = PT1S; evs.debug_log_mask = 0x1; evs.delay_margin = PT1S; evs.delayed_keep_period = PT30S; evs.inactive_check_period = PT0.5S; evs.inactive_timeout = PT15S; evs.info_log_mask = 0; evs.install_timeout = PT7.5S; evs.join_retrans_period = PT1S; evs.keepalive_period = PT1S; evs.max_install_timeouts = 3; evs.send_window = 4; evs.stats_report_period = PT1M; evs.suspect_timeout = PT10S; evs.use_aggregate = true; evs.user_send_window = 2; evs.version = 0; evs.view_forget_timeout = P1D; ; gcache.keep_pages_size = 0; gcache.mem_size = 0; ; gcache.page_size = 128M; gcache.recover = no; gcache.size = 10M; gcomm.thread_prio = ; gcs.fc_debug = 0; gcs.fc_factor = 1.0; gcs.fc_limit = 16; gcs.fc_master_slave = no; gcs.max_packet_size = 64500; gcs.max_throttle = 0.25; ; gcs.recv_q_soft_limit = 0.25; gcs.sync_donor = no; ; gmcast.mcast_addr = ; gmcast.mcast_ttl = 1; gmcast.peer_timeout = PT3S; gmcast.segment = 0; gmcast.time_wait = PT5S; gmcast.version = 0; ; pc.announce_timeout = PT3S; pc.checksum = false; pc.ignore_quorum = false; pc.ignore_sb = false; pc.linger = PT20S; pc.npvo = false; pc.recovery = true; pc.version = 0; pc.wait_prim = true; pc.wait_prim_timeout = PT30S; pc.weight = 1; protonet.backend = asio; protonet.version = 0; repl.causal_read_timeout = PT90S; repl.commit_order = 3; repl.key_format = FLAT8; repl.max_ws_size = 2147483647; repl.proto_max = 7; socket.checksum = 2; socket.recv_buf_size = 212992; +WSREP_SYNC_WAIT 15 +; ; ; cert.log_conflicts = no; debug = no; evs.auto_evict = 0; evs.causal_keepalive_period = PT1S; evs.debug_log_mask = 0x1; evs.delay_margin = PT1S; evs.delayed_keep_period = PT30S; evs.inactive_check_period = PT0.5S; evs.inactive_timeout = PT30S; evs.info_log_mask = 0; evs.install_timeout = PT15S; evs.join_retrans_period = PT1S; evs.keepalive_period = PT1S; evs.max_install_timeouts = 3; evs.send_window = 4; evs.stats_report_period = PT1M; evs.suspect_timeout = PT10S; evs.use_aggregate = true; evs.user_send_window = 2; evs.version = 0; evs.view_forget_timeout = P1D; ; gcache.keep_pages_size = 0; gcache.mem_size = 0; ; gcache.page_size = 128M; gcache.recover = no; gcache.size = 10M; gcomm.thread_prio = ; gcs.fc_debug = 0; gcs.fc_factor = 1.0; gcs.fc_limit = 16; gcs.fc_master_slave = no; gcs.max_packet_size = 64500; gcs.max_throttle = 0.25; ; gcs.recv_q_soft_limit = 0.25; gcs.sync_donor = no; ; gmcast.mcast_addr = ; gmcast.mcast_ttl = 1; gmcast.peer_timeout = PT3S; gmcast.segment = 0; gmcast.time_wait = PT5S; gmcast.version = 0; ; pc.announce_timeout = PT3S; pc.checksum = false; pc.ignore_quorum = false; pc.ignore_sb = false; pc.linger = PT20S; pc.npvo = false; pc.recovery = true; pc.version = 0; pc.wait_prim = true; pc.wait_prim_timeout = PT30S; pc.weight = 1; protonet.backend = asio; protonet.version = 0; repl.causal_read_timeout = PT90S; repl.commit_order = 3; repl.key_format = FLAT8; repl.max_ws_size = 2147483647; repl.proto_max = 7; socket.checksum = 2; socket.recv_buf_size = 212992; SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE 'wsrep_%' AND VARIABLE_NAME != 'wsrep_debug_sync_waiters'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_insert_ignore.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_insert_ignore.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_insert_ignore.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_insert_ignore.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ -SET GLOBAL wsrep_sync_wait = 7; -SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 15; +SET GLOBAL wsrep_sync_wait = 15; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; INSERT INTO t1 VALUES (1); INSERT IGNORE INTO t1 VALUES (1), (2); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_ist_progress.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_ist_progress.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_ist_progress.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_ist_progress.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,19 @@ +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1'; +SET SESSION wsrep_on = OFF; +SET SESSION wsrep_on = ON; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (5); +INSERT INTO t1 VALUES (6); +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (9); +INSERT INTO t1 VALUES (10); +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 0'; +include/assert_grep.inc [Receiving IST: 11 writesets, seqnos] +include/assert_grep.inc [Receiving IST\.\.\. 0\.0% \( 0/11 events\) complete] +include/assert_grep.inc [Receiving IST\.\.\.100\.0% \(11/11 events\) complete] +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_ist_restart_joiner.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_ist_restart_joiner.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_ist_restart_joiner.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_ist_restart_joiner.result 2017-12-21 15:48:47.000000000 +0000 @@ -4,16 +4,11 @@ SET GLOBAL wsrep_provider = 'none'; UPDATE t1 SET f2 = 'b' WHERE f1 > 1; UPDATE t1 SET f2 = 'c' WHERE f1 > 2; -SET GLOBAL wsrep_provider_options = 'dbug=d,recv_IST_after_apply_trx'; -SET SESSION wsrep_sync_wait = 0; Loading wsrep_provider ... -SHOW STATUS LIKE 'wsrep_debug_sync_waiters'; -Variable_name Value -wsrep_debug_sync_waiters recv_IST_after_apply_trx +SET SESSION wsrep_on=OFF; +SET SESSION wsrep_on=ON; UPDATE t1 SET f2 = 'd' WHERE f1 > 3; -CREATE TABLE t2 (f1 INTEGER); UPDATE t1 SET f2 = 'e' WHERE f1 > 4; -CREATE TABLE t3 (f1 INTEGER); Performing --wsrep-recover ... Starting server ... Using --wsrep-start-position when starting mysqld ... @@ -34,10 +29,4 @@ 4 d 5 e 6 f -SELECT COUNT(*) = 0 FROM t2; -COUNT(*) = 0 -1 -SELECT COUNT(*) = 0 FROM t3; -COUNT(*) = 0 -1 -DROP TABLE t1, t2, t3; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_many_rows.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_many_rows.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_many_rows.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_many_rows.result 2017-12-21 15:48:47.000000000 +0000 @@ -5,7 +5,7 @@ CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) Engine=InnoDB; INSERT INTO t1 (f2) SELECT a1.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; SET SESSION wsrep_sync_wait = 0; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SET GLOBAL wsrep_provider_options = 'repl.causal_read_timeout=PT1H'; SELECT COUNT(*) = 100000 FROM t1; COUNT(*) = 100000 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_mdev_13787.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_mdev_13787.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_mdev_13787.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_mdev_13787.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,3 @@ +create table t(a int); +insert into t select 1; +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_parallel_apply_lock_table.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_parallel_apply_lock_table.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_parallel_apply_lock_table.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_parallel_apply_lock_table.result 2017-12-21 15:48:47.000000000 +0000 @@ -18,7 +18,7 @@ COUNT(*) = 0 1 UNLOCK TABLES; -SET SESSION wsrep_sync_wait = 7;; +SET SESSION wsrep_sync_wait = 15;; SELECT COUNT(*) = 1 FROM t1; COUNT(*) = 1 1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_parallel_simple.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_parallel_simple.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_parallel_simple.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_parallel_simple.result 2017-12-21 15:48:47.000000000 +0000 @@ -16,7 +16,7 @@ INSERT INTO t2 VALUES (1); SET SESSION wsrep_sync_wait = 0; UNLOCK TABLES; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SELECT COUNT(*) = 10 FROM t1; COUNT(*) = 10 0 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_query_cache_sync_wait.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_query_cache_sync_wait.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_query_cache_sync_wait.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_query_cache_sync_wait.result 2017-12-21 15:48:47.000000000 +0000 @@ -4,7 +4,6 @@ SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb"; Warnings: Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead -SET SESSION wsrep_sync_wait = 7; SELECT MAX(id) FROM t1; MAX(id) 1 @@ -16,7 +15,6 @@ Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; FLUSH QUERY CACHE; -SET SESSION wsrep_sync_wait = 7; SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb"; Warnings: Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead @@ -29,11 +27,9 @@ Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; INSERT INTO t1 VALUES (4); -SET SESSION wsrep_sync_wait = 7; SELECT MAX(id) FROM t1; MAX(id) 4 -SET SESSION wsrep_sync_wait = 7; FLUSH STATUS; SELECT MAX(id) FROM t1; MAX(id) @@ -45,7 +41,6 @@ Warnings: Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead INSERT INTO t1 VALUES (5); -SET SESSION wsrep_sync_wait = 7; SELECT MAX(id) FROM t1 ; SET GLOBAL DEBUG = ""; Warnings: diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_suspend_slave.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_suspend_slave.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_suspend_slave.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_suspend_slave.result 2017-12-21 15:48:47.000000000 +0000 @@ -3,8 +3,11 @@ INSERT INTO t1 VALUES (1); Got one of the listed errors Resuming node_2 ... +SET SESSION wsrep_sync_wait = 1; INSERT INTO t1 VALUES (1); +SET SESSION wsrep_sync_wait = 1; SELECT COUNT(*) = 1 FROM t1; COUNT(*) = 1 1 +SET SESSION wsrep_sync_wait = 15; DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_sync_wait_show.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_sync_wait_show.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_sync_wait_show.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_sync_wait_show.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,4 @@ -SET SESSION wsrep_sync_wait = 1; +SET SESSION wsrep_sync_wait = 8; CREATE DATABASE db1; SHOW CREATE DATABASE db1; Database Create Database diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_unicode_identifiers.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_unicode_identifiers.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_unicode_identifiers.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_unicode_identifiers.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ -SET GLOBAL wsrep_sync_wait = 7; -SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 15; +SET GLOBAL wsrep_sync_wait = 15; CREATE DATABASE `database with space`; USE `database with space`; CREATE TABLE `table with space` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_var_dirty_reads.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_var_dirty_reads.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_var_dirty_reads.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_var_dirty_reads.result 2017-12-21 15:48:47.000000000 +0000 @@ -3,10 +3,6 @@ SELECT * FROM t1; i 1 -create user user1; -grant all privileges on *.* to user1; -create user user2; -grant all privileges on *.* to user2; SET @@global.wsrep_cluster_address = ''; SET @@session.wsrep_dirty_reads=OFF; SET SESSION wsrep_sync_wait=0; @@ -18,87 +14,33 @@ wsrep_cluster_status non-Primary SELECT * FROM t1; ERROR 08S01: WSREP has not yet prepared node for application use -SELECT @@wsrep_dirty_reads; -@@wsrep_dirty_reads -0 -SELECT 2; -2 -2 -SELECT 2+2 FROM DUAL; -2+2 -4 +SELECT 1 FROM t1; +ERROR 08S01: WSREP has not yet prepared node for application use SET @@session.wsrep_dirty_reads=ON; SELECT * FROM t1; i 1 -connect con1, localhost, user1,,test,$NODE_MYPORT_2,$NODE_MYSOCK_2; -SET SESSION wsrep_sync_wait=0; -set session wsrep_dirty_reads=1; -prepare stmt_show from 'select 1'; -prepare stmt_select from 'select * from t1'; -prepare stmt_insert from 'insert into t1 values(1)'; -set session wsrep_dirty_reads=0; -execute stmt_show; -ERROR 08S01: WSREP has not yet prepared node for application use -execute stmt_select; -ERROR 08S01: WSREP has not yet prepared node for application use -execute stmt_insert; -ERROR 08S01: WSREP has not yet prepared node for application use -SET wsrep_dirty_reads=ON; -select @@session.wsrep_dirty_reads; -@@session.wsrep_dirty_reads -1 -execute stmt_show; -1 +SELECT 1 FROM t1; 1 -execute stmt_select; -i 1 -execute stmt_insert; +SELECT i, variable_name, variable_value FROM t1, information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads" AND i = 1; +i variable_name variable_value +1 WSREP_DIRTY_READS ON +SET @@session.wsrep_dirty_reads=OFF; +SELECT i, variable_name, variable_value FROM t1, information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads" AND i = 1; ERROR 08S01: WSREP has not yet prepared node for application use -SET @@global.wsrep_dirty_reads=ON; -connect con2, localhost, user2,,test,$NODE_MYPORT_2,$NODE_MYSOCK_2; -select @@session.wsrep_dirty_reads; -@@session.wsrep_dirty_reads -1 -prepare stmt_show from 'select 1'; -prepare stmt_select from 'select * from t1'; -prepare stmt_insert from 'insert into t1 values(1)'; -execute stmt_show; +SELECT 1; 1 1 -execute stmt_select; -i -1 -execute stmt_insert; +USE information_schema; ERROR 08S01: WSREP has not yet prepared node for application use -SET SESSION wsrep_sync_wait=1; -execute stmt_show; -1 -1 -execute stmt_select; -i -1 -execute stmt_insert; +SELECT * FROM information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads"; ERROR 08S01: WSREP has not yet prepared node for application use -SET SESSION wsrep_sync_wait=7; -execute stmt_show; -1 -1 -execute stmt_select; -i -1 -execute stmt_insert; +SELECT COUNT(*) >= 10 FROM performance_schema.events_statements_history; ERROR 08S01: WSREP has not yet prepared node for application use -connection node_2; -SET @@global.wsrep_dirty_reads=OFF; -connection node_1; +USE test; SELECT * FROM t1; i 1 DROP TABLE t1; -drop user user1; -drop user user2; -disconnect node_2; -disconnect node_1; # End of test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_var_node_address.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_var_node_address.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_var_node_address.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_var_node_address.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,5 @@ call mtr.add_suppression("WSREP: Stray state UUID msg: .* current group state WAIT_STATE_UUID .*"); +call mtr.add_suppression("WSREP: Protocol violation. JOIN message sender .* is not in state transfer (.*). Message ignored."); SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; VARIABLE_VALUE = 4 1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_var_sync_wait.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_var_sync_wait.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_var_sync_wait.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_var_sync_wait.result 2017-12-21 15:48:47.000000000 +0000 @@ -3,15 +3,12 @@ # SELECT @@global.wsrep_sync_wait; @@global.wsrep_sync_wait -7 +15 SELECT @@global.wsrep_causal_reads; @@global.wsrep_causal_reads 1 CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=InnoDB; SET GLOBAL wsrep_sync_wait = 1; -SHOW TABLES LIKE '%t1'; -Tables_in_test (%t1) -t1 SELECT COUNT(*) = 0 FROM t1; COUNT(*) = 0 1 @@ -24,7 +21,7 @@ UPDATE t3 SET f1 = 2; affected rows: 1 info: Rows matched: 1 Changed: 1 Warnings: 0 -SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 15; DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_wsrep_provider_unset_set.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_wsrep_provider_unset_set.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/galera_wsrep_provider_unset_set.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/galera_wsrep_provider_unset_set.result 2017-12-21 15:48:47.000000000 +0000 @@ -3,6 +3,7 @@ SET GLOBAL wsrep_provider='none'; INSERT INTO t1 VALUES (2); INSERT INTO t1 VALUES (3); +SET SESSION wsrep_sync_wait = 0; INSERT INTO t1 VALUES (4); SELECT COUNT(*) = 4 FROM t1; COUNT(*) = 4 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-284.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-284.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-284.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-284.result 2017-12-21 15:48:47.000000000 +0000 @@ -9,7 +9,7 @@ include/wait_for_slave_to_start.inc INSERT INTO t1 VALUES (1); DROP TABLE t1; -SET global wsrep_sync_wait=7; +SET global wsrep_sync_wait=15; STOP SLAVE; RESET SLAVE ALL; CALL mtr.add_suppression('failed registering on master'); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-329.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-329.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-329.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-329.result 2017-12-21 15:48:47.000000000 +0000 @@ -18,3 +18,4 @@ 1 DROP PROCEDURE proc_insert; DROP TABLE t1; +CALL mtr.add_suppression("conflict state 3 after post commit"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-336.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-336.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-336.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-336.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,42 @@ +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; +SET GLOBAL wsrep_slave_threads = 10; +SET GLOBAL wsrep_slave_threads = 1; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_slave_threads = 10; +SELECT COUNT(*) = 11 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +COUNT(*) = 11 +1 +SET GLOBAL wsrep_slave_threads = 20; +SELECT COUNT(*) = 21 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +COUNT(*) = 21 +1 +SET GLOBAL wsrep_slave_threads = 1; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (5); +INSERT INTO t1 VALUES (6); +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (9); +SET GLOBAL wsrep_slave_threads = 10; +SET GLOBAL wsrep_slave_threads = 0; +Warnings: +Warning 1292 Truncated incorrect wsrep_slave_threads value: '0' +INSERT INTO t1 VALUES (10); +INSERT INTO t1 VALUES (11); +INSERT INTO t1 VALUES (12); +INSERT INTO t1 VALUES (13); +INSERT INTO t1 VALUES (14); +INSERT INTO t1 VALUES (15); +INSERT INTO t1 VALUES (16); +INSERT INTO t1 VALUES (17); +INSERT INTO t1 VALUES (18); +INSERT INTO t1 VALUES (19); +INSERT INTO t1 VALUES (20); +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +COUNT(*) = 2 +1 +SET GLOBAL wsrep_slave_threads = 1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-357.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-357.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-357.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-357.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,6 @@ +SET GLOBAL wsrep_slave_threads = 0; +Warnings: +Warning 1292 Truncated incorrect wsrep_slave_threads value: '0' +CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 VALUES (1); +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-388.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-388.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-388.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-388.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,46 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(255)) Engine=InnoDB; +CREATE PROCEDURE insert_proc () +BEGIN +DECLARE CONTINUE HANDLER FOR SQLEXCEPTION +BEGIN +GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO; +END; +INSERT INTO t1 VALUES (1, 'node 1'),(2, 'node 1'); +INSERT INTO t1 VALUES (3, 'node 1'); +END| +SET GLOBAL wsrep_slave_threads = 2; +SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb"; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +INSERT INTO t1 VALUES (1, 'node 2');; +SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached"; +SET SESSION wsrep_sync_wait = 0; +SET SESSION DEBUG_SYNC = 'wsrep_after_replication SIGNAL wsrep_after_replication_reached WAIT_FOR wsrep_after_replication_continue'; +CALL insert_proc ();; +SET SESSION DEBUG_SYNC = "now WAIT_FOR wsrep_after_replication_reached"; +SET GLOBAL DEBUG = ""; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +SET DEBUG_SYNC = "now SIGNAL wsrep_after_replication_continue"; +SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; +SELECT @errno = 1213; +@errno = 1213 +0 +SELECT * FROM t1; +f1 f2 +1 node 2 +3 node 1 +SELECT * FROM t1; +f1 f2 +1 node 2 +3 node 1 +SET GLOBAL wsrep_slave_threads = DEFAULT; +DROP TABLE t1; +DROP PROCEDURE insert_proc; +SET GLOBAL debug = NULL; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +SET debug_sync='RESET'; +SELECT @@debug_sync; +@@debug_sync +ON - current signal: '' diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-402.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-402.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-402.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-402.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,192 @@ +CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER, f2 INTEGER, +CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1) ON DELETE CASCADE); +INSERT INTO p VALUES (1, 0); +INSERT INTO p VALUES (2, 0); +INSERT INTO c VALUES (1, 1, 0); +SET AUTOCOMMIT=ON; +START TRANSACTION; +UPDATE c SET f2=1 where f1=1; +SET SESSION wsrep_sync_wait = 0; +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync'; +DELETE FROM p WHERE f1 = 1; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync'; +COMMIT; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync'; +SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync'; +SET GLOBAL wsrep_provider_options = 'dbug='; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT * FROM p; +f1 f2 +2 0 +SELECT * FROM c; +f1 p_id f2 +DROP TABLE c; +DROP TABLE p; +CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER, f2 INTEGER, +CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1) ON UPDATE CASCADE); +INSERT INTO p VALUES (1, 0); +INSERT INTO p VALUES (2, 0); +INSERT INTO c VALUES (1, 1, 0); +SET AUTOCOMMIT=ON; +START TRANSACTION; +UPDATE c SET f2=2 where f1=1; +SET SESSION wsrep_sync_wait = 0; +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync'; +UPDATE p set f1=11 WHERE f1 = 1; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync'; +COMMIT; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync'; +SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync'; +SET GLOBAL wsrep_provider_options = 'dbug='; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT * FROM p; +f1 f2 +2 0 +11 0 +SELECT * FROM c; +f1 p_id f2 +1 11 0 +DROP TABLE c; +DROP TABLE p; +CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER, f2 INTEGER, +CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1) ON UPDATE CASCADE); +INSERT INTO p VALUES (1, 0); +INSERT INTO p VALUES (2, 0); +INSERT INTO c VALUES (1, 1, 0); +SET AUTOCOMMIT=ON; +START TRANSACTION; +UPDATE c SET p_id=2 where f1=1; +SET SESSION wsrep_sync_wait = 0; +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync'; +UPDATE p set f1=11 WHERE f1 = 1; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync'; +COMMIT; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync'; +SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync'; +SET GLOBAL wsrep_provider_options = 'dbug='; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT * FROM p; +f1 f2 +2 0 +11 0 +SELECT * FROM c; +f1 p_id f2 +1 11 0 +SET AUTOCOMMIT=ON; +START TRANSACTION; +UPDATE p set f1=21 WHERE f1 = 11; +SET SESSION wsrep_sync_wait = 0; +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync'; +UPDATE c SET p_id=2 where f1=1; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync'; +COMMIT; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync'; +SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync'; +SET GLOBAL wsrep_provider_options = 'dbug='; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT * FROM p; +f1 f2 +2 0 +11 0 +SELECT * FROM c; +f1 p_id f2 +1 2 0 +DROP TABLE c; +DROP TABLE p; +CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER, +f2 INTEGER, +CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1) +ON DELETE CASCADE, +CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1)); +INSERT INTO p1 VALUES (1, 0); +INSERT INTO p2 VALUES (1, 0); +INSERT INTO c VALUES (1, 1, 1, 0); +SET AUTOCOMMIT=ON; +START TRANSACTION; +UPDATE p2 SET f2=2 where f1=1; +SET SESSION wsrep_sync_wait = 0; +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync'; +DELETE FROM p1 WHERE f1 = 1; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync'; +COMMIT; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync'; +SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync'; +SET GLOBAL wsrep_provider_options = 'dbug='; +SELECT * FROM p1; +f1 f2 +SELECT * FROM p2; +f1 f2 +1 2 +SELECT * FROM c; +f1 p1_id p2_id f2 +DROP TABLE c; +DROP TABLE p1; +DROP TABLE p2; +CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER, +f2 INTEGER, +CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1) +ON DELETE CASCADE, +CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1) +ON DELETE CASCADE); +INSERT INTO p1 VALUES (1, 0); +INSERT INTO p2 VALUES (1, 0); +INSERT INTO c VALUES (1, 1, 1, 0); +SET AUTOCOMMIT=ON; +START TRANSACTION; +DELETE FROM p2 WHERE f1=1; +SET SESSION wsrep_sync_wait = 0; +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync'; +DELETE FROM p1 WHERE f1=1; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync'; +COMMIT; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync'; +SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync'; +SET GLOBAL wsrep_provider_options = 'dbug='; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT * FROM p1; +f1 f2 +SELECT * FROM p2; +f1 f2 +1 0 +SELECT * FROM c; +f1 p1_id p2_id f2 +DROP TABLE c; +DROP TABLE p1; +DROP TABLE p2; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-86-wait1.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-86-wait1.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-86-wait1.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-86-wait1.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,48 @@ +SELECT @@debug_sync; +@@debug_sync +ON - current signal: '' +SET SESSION wsrep_sync_wait = 1; +SET GLOBAL debug = "+d,sync.wsrep_apply_cb"; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +CREATE TABLE t_wait1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t_wait1 VALUES (1); +SET SESSION debug_sync = "now WAIT_FOR sync.wsrep_apply_cb_reached"; +SHOW BINARY LOGS; +SHOW BINLOG EVENTS; +SHOW COLUMNS FROM t1; +SHOW CREATE EVENT e1; +SHOW CREATE FUNCTION f1; +SHOW CREATE PROCEDURE p1; +SHOW CREATE TABLE t1; +SHOW CREATE TRIGGER tr1; +SHOW CREATE VIEW v1; +SHOW DATABASES; +SHOW ENGINE InnoDB STATUS; +SHOW FUNCTION CODE f1; +SHOW FUNCTION STATUS; +SHOW GRANTS FOR 'root'@'localhost'; +SHOW INDEX FROM t1; +SHOW OPEN TABLES; +SHOW PROCEDURE CODE p1; +SHOW PROCEDURE STATUS; +SHOW PRIVILEGES; +SHOW STATUS LIKE 'wsrep_cluster_size'; +SHOW TABLE STATUS; +SHOW TABLES; +SHOW TRIGGERS; +SHOW GLOBAL VARIABLES LIKE 'foo_bar'; +SHOW WARNINGS; +SET GLOBAL debug = "-d,sync.wsrep_apply_cb"; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +SET SESSION debug_sync = "now SIGNAL signal.wsrep_apply_cb"; +SET SESSION wsrep_sync_wait = default; +DROP TABLE t_wait1; +SET GLOBAL debug = NULL; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +SET debug_sync='RESET'; +SELECT @@debug_sync; +@@debug_sync +ON - current signal: '' diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-86-wait8.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-86-wait8.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/MW-86-wait8.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/MW-86-wait8.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,50 @@ +SELECT @@debug_sync; +@@debug_sync +ON - current signal: '' +SET SESSION wsrep_sync_wait = 8; +SET GLOBAL debug = "+d,sync.wsrep_apply_cb"; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +CREATE TABLE t_wait8 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t_wait8 VALUES (1); +SET GLOBAL wsrep_provider_options = "repl.causal_read_timeout=PT0.1S"; +SET SESSION debug_sync = "now WAIT_FOR sync.wsrep_apply_cb_reached"; +SHOW BINARY LOGS; +SHOW BINLOG EVENTS; +SHOW COLUMNS FROM t1; +SHOW CREATE DATABASE db1; +SHOW CREATE EVENT e1; +SHOW CREATE FUNCTION f1; +SHOW CREATE PROCEDURE p1; +SHOW CREATE TABLE t1; +SHOW CREATE TRIGGER tr1; +SHOW CREATE VIEW v1; +SHOW DATABASES; +SHOW ENGINE InnoDB STATUS; +SHOW FUNCTION CODE f1; +SHOW FUNCTION STATUS; +SHOW GRANTS FOR 'root'@'localhost'; +SHOW INDEX FROM t1; +SHOW OPEN TABLES; +SHOW PROCEDURE CODE p1; +SHOW PROCEDURE STATUS; +SHOW PRIVILEGES; +SHOW STATUS LIKE 'wsrep_cluster_size'; +SHOW TABLE STATUS; +SHOW TABLES; +SHOW TRIGGERS; +SHOW GLOBAL VARIABLES LIKE 'foo_bar'; +SHOW WARNINGS; +SET GLOBAL debug = "-d,sync.wsrep_apply_cb"; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; +SET SESSION wsrep_sync_wait = default; +DROP TABLE t_wait8; +SET GLOBAL debug = NULL; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +SET debug_sync='RESET'; +SELECT @@debug_sync; +@@debug_sync +ON - current signal: '' diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/mysql-wsrep#198.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/mysql-wsrep#198.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/mysql-wsrep#198.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/mysql-wsrep#198.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,8 @@ CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; CREATE TABLE t2 (id INT PRIMARY KEY) ENGINE=InnoDB; +SELECT 1 FROM DUAL; +1 +1 LOCK TABLE t2 WRITE; OPTIMIZE TABLE t1,t2;; REPAIR TABLE t1,t2;; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/mysql-wsrep#201.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/mysql-wsrep#201.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/mysql-wsrep#201.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/mysql-wsrep#201.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,3 @@ CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB; INSERT INTO t1 VALUES (DEFAULT); SET GLOBAL query_cache_size=1355776; -SET SESSION wsrep_sync_wait = 7; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/pxc-421.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/pxc-421.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/pxc-421.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/pxc-421.result 2017-12-21 15:48:47.000000000 +0000 @@ -6,6 +6,7 @@ SET GLOBAL wsrep_provider='none'; INSERT INTO t1 VALUES (2); INSERT INTO t1 VALUES (3); +set SESSION wsrep_sync_wait=0; INSERT INTO t1 VALUES (4); set GLOBAL wsrep_slave_threads=5; SELECT COUNT(*) = 5 FROM t1; @@ -25,6 +26,7 @@ SELECT COUNT(*) FROM t1; COUNT(*) 16 +SET GLOBAL auto_increment_offset = 2; SELECT COUNT(*) FROM t1; COUNT(*) 15 @@ -33,3 +35,4 @@ wsrep_slave_threads 12 SET GLOBAL wsrep_slave_threads = 1; DROP TABLE t1; +SET GLOBAL auto_increment_offset = 1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/r/sql_log_bin.result mariadb-10.1-10.1.30/mysql-test/suite/galera/r/sql_log_bin.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera/r/sql_log_bin.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/r/sql_log_bin.result 2017-12-21 15:48:47.000000000 +0000 @@ -6,6 +6,7 @@ # Disable binary logging for current session SET SQL_LOG_BIN=OFF; INSERT INTO t1 VALUES (2); +FLUSH BINARY LOGS; CREATE TABLE t2(c1 INT PRIMARY KEY) ENGINE=INNODB; INSERT INTO t2 VALUES (1); CREATE TABLE test.t3 AS SELECT * from t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/suite.pm mariadb-10.1-10.1.30/mysql-test/suite/galera/suite.pm --- mariadb-10.1-10.1.25/mysql-test/suite/galera/suite.pm 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/suite.pm 2017-12-21 15:48:47.000000000 +0000 @@ -19,6 +19,9 @@ my ($spath) = grep { -f "$_/wsrep_sst_rsync"; } "$::bindir/scripts", $::path_client_bindir; return "No SST scripts" unless $spath; +my ($cpath) = grep { -f "$_/mysql"; } "$::bindir/scripts", $::path_client_bindir; +return "No scritps" unless $cpath; + my ($epath) = grep { -f "$_/my_print_defaults"; } "$::bindir/extra", $::path_client_bindir; return "No my_print_defaults" unless $epath; @@ -65,13 +68,19 @@ qr(WSREP: TO isolation failed for: .*), qr|WSREP: gcs_caused\(\) returned .*|, qr|WSREP: Protocol violation. JOIN message sender .* is not in state transfer \(SYNCED\). Message ignored.|, + qr|WSREP: Protocol violation. JOIN message sender .* is not in state transfer \(JOINED\). Message ignored.|, + qr|WSREP: Unsupported protocol downgrade: incremental data collection disabled. Expect abort.|, qr(WSREP: Action message in non-primary configuration from member [0-9]*), qr(WSREP: discarding established .*), + qr|WSREP: .*core_handle_uuid_msg.*|, + qr(WSREP: --wsrep-causal-reads=ON takes precedence over --wsrep-sync-wait=0. WSREP_SYNC_WAIT_BEFORE_READ is on), + qr|WSREP: JOIN message from member .* in non-primary configuration. Ignored.|, ); $ENV{PATH}="$epath:$ENV{PATH}"; $ENV{PATH}="$spath:$ENV{PATH}" unless $epath eq $spath; +$ENV{PATH}="$cpath:$ENV{PATH}" unless $cpath eq $spath; bless { }; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/GAL-401.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/GAL-401.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/GAL-401.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/GAL-401.test 2017-12-21 15:48:47.000000000 +0000 @@ -10,6 +10,7 @@ --connection node_2 SET @@global.wsrep_desync = 1; SET SESSION wsrep_dirty_reads=1; +SET SESSION wsrep_sync_wait=0; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; --let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; --source include/wait_condition.inc @@ -27,10 +28,13 @@ # Reconnect node 2 to the PC: --connection node_2 SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0'; +SET wsrep_dirty_reads=0; --let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; --source include/wait_condition.inc --let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; --source include/wait_condition.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc # Must return 0: SHOW STATUS LIKE 'wsrep_desync_count'; @@ -41,6 +45,7 @@ --let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; --source include/wait_condition.inc +SET SESSION wsrep_sync_wait=15; SHOW CREATE TABLE t1; DROP TABLE t1; CALL mtr.add_suppression("WSREP: Protocol violation. JOIN message sender (.*) is not in state transfer \\(SYNCED\\). Message ignored."); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera#414.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera#414.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera#414.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera#414.test 2017-12-21 15:48:47.000000000 +0000 @@ -6,6 +6,11 @@ --source include/have_innodb.inc --source include/galera_cluster.inc +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--source include/auto_increment_offset_save.inc + # We perform the shutdown/restart sequence in here. If there was a crash during shutdown, MTR will detect it --connection node_2 @@ -35,3 +40,4 @@ --source include/wait_condition.inc CALL mtr.add_suppression("Failed to set packet size"); +--source include/auto_increment_offset_restore.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_applier_ftwrl_table_alter.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_applier_ftwrl_table_alter.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_applier_ftwrl_table_alter.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_applier_ftwrl_table_alter.test 2017-12-21 15:48:47.000000000 +0000 @@ -29,7 +29,7 @@ UNLOCK TABLES; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SHOW CREATE TABLE t1; SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE = 'Waiting for table metadata lock'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_applier_ftwrl_table.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_applier_ftwrl_table.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_applier_ftwrl_table.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_applier_ftwrl_table.test 2017-12-21 15:48:47.000000000 +0000 @@ -28,7 +28,7 @@ --connection node_1 UNLOCK TABLES; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SELECT COUNT(*) = 2 FROM t1; DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_as_slave_autoinc.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_as_slave_autoinc.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_as_slave_autoinc.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_as_slave_autoinc.test 2017-12-21 15:48:47.000000000 +0000 @@ -48,7 +48,7 @@ select * from t1; show variables like 'binlog_format'; -show variables like '%auto_increment%'; +show variables like 'auto_increment_increment'; --connection node_2 --let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_bf_abort_flush_for_export.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_bf_abort_flush_for_export.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_bf_abort_flush_for_export.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_bf_abort_flush_for_export.test 2017-12-21 15:48:47.000000000 +0000 @@ -27,7 +27,7 @@ COMMIT; SET AUTOCOMMIT=ON; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SELECT COUNT(*) = 1 FROM t1; --let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_bf_lock_wait.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_bf_lock_wait.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_bf_lock_wait.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_bf_lock_wait.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,52 @@ +--source include/galera_cluster.inc +--source include/big_test.inc + +CREATE TABLE t1 ENGINE=InnoDB select 1 as a, 1 as b union select 2, 2; +ALTER TABLE t1 add primary key(a); + +DELIMITER |; + +CREATE PROCEDURE p1() +BEGIN + DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback; + WHILE 1 DO + start transaction; + update t1 set b=connection_id() where a=1; + commit; + END WHILE; +END| + + +DELIMITER ;| + +--connect node_1_p1, 127.0.0.1, root, , test, $NODE_MYPORT_1 +send call p1; +--connect node_1_p2, 127.0.0.1, root, , test, $NODE_MYPORT_1 +send call p1; +--connect node_2_p1, 127.0.0.1, root, , test, $NODE_MYPORT_2 +send call p1; +--connect node_2_p2, 127.0.0.1, root, , test, $NODE_MYPORT_2 +send call p1; + +connection default; +let $counter=10; +let $sleep_period=10; + +echo checking error log for 'BF lock wait long' message for $counter times every $sleep_period seconds ...; +while($counter > 0) +{ +--disable_query_log +--disable_result_log + eval do sleep($sleep_period); +--enable_query_log +--enable_result_log + +# use error 0,1 instead if want test to continue + --error 1 + exec grep 'BF lock wait long' $MYSQLTEST_VARDIR/log/mysqld.*.err; + dec $counter; +} + +drop table t1; +drop procedure p1; + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ddl_multiline.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ddl_multiline.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ddl_multiline.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ddl_multiline.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,54 @@ +# +# Test that Galera works correctly with multiline statements, in particular involving DDLs +# + +--source include/galera_cluster.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; + +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; + +--connection node_2 +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; + +--connection node_1 +--send CREATE TABLE t3 (f1 INTEGER) ENGINE=InnoDB; CREATE TABLE t4 (f1 INTEGER) ENGINE=InnoDB; +--reap + +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; + +--connection node_2 +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; + +--connection node_1 +INSERT INTO t1 VALUES (1); CREATE TABLE t5 (f1 INTEGER) ENGINE=InnoDB; + +SELECT COUNT(*) = 1 FROM t1; +SHOW CREATE TABLE t5; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; +SHOW CREATE TABLE t5; + +--connection node_1 +--send CREATE TABLE t6 (f1 INTEGER) ENGINE=InnoDB; INSERT INTO t2 VALUES (1); +--reap + +SELECT COUNT(*) = 1 FROM t2; +SHOW CREATE TABLE t6; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t2; +SHOW CREATE TABLE t6; + +--let $diff_servers = 1 2 +--source include/diff_servers.inc + +--connection node_1 +DROP TABLE t1, t2, t3, t4, t5, t6; + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ftwrl.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ftwrl.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ftwrl.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ftwrl.test 2017-12-21 15:48:47.000000000 +0000 @@ -29,12 +29,11 @@ UNLOCK TABLES; -SHOW TABLES; -SELECT COUNT(*) = 1 FROM t1; - --disable_query_log --eval SET GLOBAL wsrep_provider_options = "$wsrep_provider_options_orig"; --enable_query_log -DROP TABLE t1; +SHOW TABLES; +SELECT COUNT(*) = 1 FROM t1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_gcs_fc_limit.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_gcs_fc_limit.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_gcs_fc_limit.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_gcs_fc_limit.test 2017-12-21 15:48:47.000000000 +0000 @@ -21,11 +21,11 @@ --connection node_1 --sleep 1 INSERT INTO t1 VALUES (2); ---sleep 1 +--sleep 2 INSERT INTO t1 VALUES (3); ---sleep 1 +--sleep 2 INSERT INTO t1 VALUES (4); ---sleep 1 +--sleep 2 # This query will hang because flow control will kick in --send diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_insert_ignore.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_insert_ignore.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_insert_ignore.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_insert_ignore.test 2017-12-21 15:48:47.000000000 +0000 @@ -2,10 +2,10 @@ --source include/have_innodb.inc --let $wsrep_sync_wait_orig = (SELECT @@wsrep_sync_wait) -SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 15; --connection node_2 -SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 15; # diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_mysqldump.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_mysqldump.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_mysqldump.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_mysqldump.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -9,3 +9,4 @@ [mysqld.2] wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true' + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_progress.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_progress.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_progress.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_progress.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,5 @@ +!include ../galera_2nodes.cnf + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_progress.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_progress.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_progress.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_progress.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,76 @@ +# +# Test progress output during IST +# + +--source include/galera_cluster.inc +# This could cause out of storage if run /dev/shm +--source include/big_test.inc + +# Isolate node #2 +--connection node_2 +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1'; + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +--connection node_2 +SET SESSION wsrep_on = OFF; +--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc +SET SESSION wsrep_on = ON; + +# Node #2 is now isolated. Run some transactions to accumulate writesets for IST + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (5); +INSERT INTO t1 VALUES (6); +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (9); +INSERT INTO t1 VALUES (10); + +# Restore node #2, IST is performed + +--connection node_2 +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 0'; + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +--connection node_2 +--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc + +# +# Grep for expected IST output in joiner log +# + +--connection node_1 + +--let $assert_count = 1 +--let $assert_file = $MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_only_after = Need state transfer + +--let $assert_text = Receiving IST: 11 writesets, seqnos +--let $assert_select = Receiving IST: 11 writesets, seqnos +--source include/assert_grep.inc + +--let $assert_text = Receiving IST\.\.\. 0\.0% \( 0/11 events\) complete +--let $assert_select = Receiving IST\.\.\. 0\.0% \( 0/11 events\) complete +--source include/assert_grep.inc + +--let $assert_text = Receiving IST\.\.\.100\.0% \(11/11 events\) complete +--let $assert_select = Receiving IST\.\.\.100\.0% \(11/11 events\) complete +--source include/assert_grep.inc + +# Cleanup + +--connection node_1 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_recv_bind.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_recv_bind.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_recv_bind.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_recv_bind.test 2017-12-21 15:48:47.000000000 +0000 @@ -5,6 +5,7 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +--source include/big_test.inc --connection node_1 SELECT @@wsrep_provider_options LIKE '%ist.recv_bind = 127.0.0.1%'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_restart_joiner.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_restart_joiner.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_restart_joiner.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_restart_joiner.test 2017-12-21 15:48:47.000000000 +0000 @@ -8,6 +8,8 @@ --source include/have_innodb.inc --source include/have_debug_sync.inc --source suite/galera/include/galera_have_debug_sync.inc +# This could cause out of storage if run /dev/shm +--source include/big_test.inc # Save original auto_increment_offset values. --let $node_1=node_1 @@ -31,13 +33,6 @@ UPDATE t1 SET f2 = 'c' WHERE f1 > 2; --connection node_2 -# Make sure IST will block ... ---let $galera_sync_point = recv_IST_after_apply_trx ---source include/galera_set_sync_point.inc - -SET SESSION wsrep_sync_wait = 0; - - # Write file to make mysql-test-run.pl expect the crash, but don't start it --let $_server_id= `SELECT @@server_id` --let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect @@ -48,21 +43,23 @@ # ... and restart provider to force IST --echo Loading wsrep_provider ... --disable_query_log +# base_port setting is lost for some reason when unloading provider, so we need to restore it +--eval SET GLOBAL wsrep_provider_options= 'base_port=$NODE_GALERAPORT_2'; --eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig'; +# Make sure IST will block ... +--let $galera_sync_point = recv_IST_after_apply_trx +--source include/galera_set_sync_point.inc --eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; --enable_query_log -# We can not use a wait_condition on SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS as such queries are blocked during IST -# so we perform a simple sleep and SHOW instead - ---sleep 5 -SHOW STATUS LIKE 'wsrep_debug_sync_waiters'; +SET SESSION wsrep_on=OFF; +--let $wait_condition = SELECT VARIABLE_VALUE = 'recv_IST_after_apply_trx' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters'; +--source include/wait_condition.inc +SET SESSION wsrep_on=ON; --connection node_1 -# Perform DML and DDL while IST is in progress ---connection node_1 +# Perform DML while IST is in progress UPDATE t1 SET f2 = 'd' WHERE f1 > 3; -CREATE TABLE t2 (f1 INTEGER); # Kill node #2 while IST is in progress --connection node_2 @@ -85,9 +82,8 @@ --let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' --source include/wait_condition.inc -# Perform DML and DDL while node #2 is down +# Perform DML while node #2 is down UPDATE t1 SET f2 = 'e' WHERE f1 > 4; -CREATE TABLE t3 (f1 INTEGER); --connection node_2 @@ -106,11 +102,9 @@ --connection node_2 SELECT * FROM t1; -SELECT COUNT(*) = 0 FROM t2; -SELECT COUNT(*) = 0 FROM t3; --connection node_1 -DROP TABLE t1, t2, t3; +DROP TABLE t1; # Restore original auto_increment_offset values. --source include/auto_increment_offset_restore.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_rsync.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_rsync.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_rsync.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_rsync.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -5,7 +5,9 @@ [mysqld.1] wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' +wsrep_sync_wait=1 [mysqld.2] wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true' +wsrep_sync_wait=1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_rsync.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_rsync.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ist_rsync.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ist_rsync.test 2017-12-21 15:48:47.000000000 +0000 @@ -2,7 +2,12 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--source include/auto_increment_offset_save.inc --source suite/galera/include/galera_st_disconnect_slave.inc --source suite/galera/include/galera_st_shutdown_slave.inc --source suite/galera/include/galera_st_kill_slave.inc --source suite/galera/include/galera_st_kill_slave_ddl.inc +--source include/auto_increment_offset_restore.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_many_rows.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_many_rows.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_many_rows.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_many_rows.test 2017-12-21 15:48:47.000000000 +0000 @@ -16,7 +16,7 @@ --connection node_2 SET SESSION wsrep_sync_wait = 0; --let $wsrep_provider_options_node2 = `SELECT @@wsrep_provider_options` -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SET GLOBAL wsrep_provider_options = 'repl.causal_read_timeout=PT1H'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_mdev_13787.opt mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_mdev_13787.opt --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_mdev_13787.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_mdev_13787.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--innodb-stats-persistent=1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_mdev_13787.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_mdev_13787.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_mdev_13787.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_mdev_13787.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,6 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc +--connection node_1 +create table t(a int); +insert into t select 1; +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_migrate.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_migrate.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_migrate.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_migrate.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -13,7 +13,7 @@ wsrep_node_address=127.0.0.1 wsrep_causal_reads=ON -wsrep_sync_wait = 7 +wsrep_sync_wait = 15 [mysqld.1] #galera_port=@OPT.port diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_parallel_simple.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_parallel_simple.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_parallel_simple.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_parallel_simple.test 2017-12-21 15:48:47.000000000 +0000 @@ -45,7 +45,7 @@ UNLOCK TABLES; -SET SESSION wsrep_sync_wait = 7; +SET SESSION wsrep_sync_wait = 15; SELECT COUNT(*) = 10 FROM t1; SELECT COUNT(*) = 10 FROM t2; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_query_cache_sync_wait.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_query_cache_sync_wait.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_query_cache_sync_wait.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_query_cache_sync_wait.test 2017-12-21 15:48:47.000000000 +0000 @@ -10,7 +10,6 @@ --let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` SET GLOBAL wsrep_provider_options = "repl.causal_read_timeout=PT1S"; SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb"; -SET SESSION wsrep_sync_wait = 7; SELECT MAX(id) FROM t1; # first lookup miss # @@ -27,7 +26,6 @@ SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; FLUSH QUERY CACHE; -SET SESSION wsrep_sync_wait = 7; SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb"; SET DEBUG_SYNC = "RESET"; @@ -52,9 +50,7 @@ INSERT INTO t1 VALUES (4); --connection node_2 -SET SESSION wsrep_sync_wait = 7; SELECT MAX(id) FROM t1; -SET SESSION wsrep_sync_wait = 7; # # Query cache hit @@ -73,7 +69,6 @@ INSERT INTO t1 VALUES (5); --connection node_2 -SET SESSION wsrep_sync_wait = 7; --send SELECT MAX(id) FROM t1 --connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_restart_on_unknown_option.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_restart_on_unknown_option.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_restart_on_unknown_option.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_restart_on_unknown_option.test 2017-12-21 15:48:47.000000000 +0000 @@ -6,6 +6,11 @@ CALL mtr.add_suppression("Aborting"); CALL mtr.add_suppression("unknown option '--galera-unknown-option'"); +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--source include/auto_increment_offset_save.inc + # # We should count the number of "Assertion failed" warnings # in the log file before and after testing. To do this we need @@ -148,3 +153,5 @@ } EOF --remove_file $TEST_LOG.copy + +--source include/auto_increment_offset_restore.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ssl_compression.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ssl_compression.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ssl_compression.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ssl_compression.test 2017-12-21 15:48:47.000000000 +0000 @@ -7,6 +7,7 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +--source include/big_test.inc SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ssl.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ssl.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_ssl.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_ssl.test 2017-12-21 15:48:47.000000000 +0000 @@ -8,6 +8,7 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +--source include/big_test.inc SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_suspend_slave.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_suspend_slave.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_suspend_slave.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_suspend_slave.test 2017-12-21 15:48:47.000000000 +0000 @@ -25,7 +25,7 @@ my $pid_filename = $ENV{'NODE_2_PIDFILE'}; my $mysqld_pid = `cat $pid_filename`; chomp($mysqld_pid); - system("kill -19 $mysqld_pid"); + system("kill -SIGSTOP $mysqld_pid"); exit(0); EOF @@ -37,10 +37,11 @@ my $pid_filename = $ENV{'NODE_2_PIDFILE'}; my $mysqld_pid = `cat $pid_filename`; chomp($mysqld_pid); - system("kill -18 $mysqld_pid"); + system("kill -SIGCONT $mysqld_pid"); exit(0); EOF +SET SESSION wsrep_sync_wait = 1; --sleep 10 --source include/wait_until_ready.inc INSERT INTO t1 VALUES (1); @@ -50,9 +51,11 @@ --source include/galera_connect.inc --connection node_2a +SET SESSION wsrep_sync_wait = 1; --source include/wait_until_ready.inc SELECT COUNT(*) = 1 FROM t1; +SET SESSION wsrep_sync_wait = 15; DROP TABLE t1; # Restore original auto_increment_offset values. diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_sync_wait_show.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_sync_wait_show.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_sync_wait_show.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_sync_wait_show.test 2017-12-21 15:48:47.000000000 +0000 @@ -7,7 +7,8 @@ --source include/have_debug.inc --connection node_2 -SET SESSION wsrep_sync_wait = 1; +# MW-86 SHOW commands have now bitmap value 8 +SET SESSION wsrep_sync_wait = 8; --connection node_1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_unicode_identifiers.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_unicode_identifiers.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_unicode_identifiers.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_unicode_identifiers.test 2017-12-21 15:48:47.000000000 +0000 @@ -6,10 +6,10 @@ --source include/have_innodb.inc --let $wsrep_sync_wait_orig = (SELECT @@wsrep_sync_wait) -SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 15; --connection node_2 -SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 15; --connection node_1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_var_dirty_reads.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_var_dirty_reads.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_var_dirty_reads.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_var_dirty_reads.test 2017-12-21 15:48:47.000000000 +0000 @@ -17,15 +17,10 @@ INSERT INTO t1 VALUES(1); SELECT * FROM t1; -create user user1; -grant all privileges on *.* to user1; -create user user2; -grant all privileges on *.* to user2; - SET @@global.wsrep_cluster_address = ''; SET @@session.wsrep_dirty_reads=OFF; -# Set wsrep_sync_wait to avoid ER_LOCK_WAIT_TIMEOUT (MDEV-6832). +# Set wsrep_sync_wait to avoid ER_LOCK_WAIT_TIMEOUT. SET SESSION wsrep_sync_wait=0; # Must return 'OFF' @@ -37,75 +32,31 @@ --error ER_UNKNOWN_COM_ERROR SELECT * FROM t1; -#Select query which does not access table should be allowed MDEV-11016 -SELECT @@wsrep_dirty_reads; -SELECT 2; -SELECT 2+2 FROM DUAL; +--error ER_UNKNOWN_COM_ERROR +SELECT 1 FROM t1; SET @@session.wsrep_dirty_reads=ON; SELECT * FROM t1; +SELECT 1 FROM t1; ---enable_connect_log ---connect (con1, localhost, user1,,test,$NODE_MYPORT_2,$NODE_MYSOCK_2) -#Just test the session behavior -SET SESSION wsrep_sync_wait=0; +SELECT i, variable_name, variable_value FROM t1, information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads" AND i = 1; -set session wsrep_dirty_reads=1; -#Prepared statement creation should be allowed MDEV-11479 -prepare stmt_show from 'select 1'; -prepare stmt_select from 'select * from t1'; -prepare stmt_insert from 'insert into t1 values(1)'; -set session wsrep_dirty_reads=0; - -#No Preapare stmt/proceure will be allowed ---error ER_UNKNOWN_COM_ERROR -execute stmt_show; ---error ER_UNKNOWN_COM_ERROR -execute stmt_select; ---error ER_UNKNOWN_COM_ERROR -execute stmt_insert; +SET @@session.wsrep_dirty_reads=OFF; -SET wsrep_dirty_reads=ON; -select @@session.wsrep_dirty_reads; -#Only prepare statement which does not change data should be allowed -execute stmt_show; -execute stmt_select; --error ER_UNKNOWN_COM_ERROR -execute stmt_insert; -SET @@global.wsrep_dirty_reads=ON; +SELECT i, variable_name, variable_value FROM t1, information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads" AND i = 1; ---connect (con2, localhost, user2,,test,$NODE_MYPORT_2,$NODE_MYSOCK_2) -#Just test the session behavior -select @@session.wsrep_dirty_reads; +SELECT 1; -prepare stmt_show from 'select 1'; -prepare stmt_select from 'select * from t1'; -prepare stmt_insert from 'insert into t1 values(1)'; - -#Only prepare statement which does not change data should be allowed -execute stmt_show; -execute stmt_select; --error ER_UNKNOWN_COM_ERROR -execute stmt_insert; +USE information_schema; -#wsrep_dirty_read should work when wsrep_sync_wait is 1 or non zero -#because we already are disconnected , So It does not make any sense -#to wait for other nodes -SET SESSION wsrep_sync_wait=1; -execute stmt_show; -execute stmt_select; --error ER_UNKNOWN_COM_ERROR -execute stmt_insert; +SELECT * FROM information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads"; -SET SESSION wsrep_sync_wait=7; -execute stmt_show; -execute stmt_select; --error ER_UNKNOWN_COM_ERROR -execute stmt_insert; - ---connection node_2 -SET @@global.wsrep_dirty_reads=OFF; +SELECT COUNT(*) >= 10 FROM performance_schema.events_statements_history; --disable_query_log --eval SET @@global.wsrep_cluster_address = '$wsrep_cluster_address_saved' @@ -113,13 +64,11 @@ --source include/wait_until_connected_again.inc --connection node_1 +USE test; SELECT * FROM t1; # Cleanup DROP TABLE t1; -drop user user1; -drop user user2; -# Restore original auto_increment_offset values. --source include/auto_increment_offset_restore.inc --source include/galera_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_var_node_address.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_var_node_address.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_var_node_address.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_var_node_address.test 2017-12-21 15:48:47.000000000 +0000 @@ -7,6 +7,8 @@ --source include/have_innodb.inc call mtr.add_suppression("WSREP: Stray state UUID msg: .* current group state WAIT_STATE_UUID .*"); +call mtr.add_suppression("WSREP: Protocol violation. JOIN message sender .* is not in state transfer (.*). Message ignored."); + SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; --connection node_1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_var_sync_wait.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_var_sync_wait.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_var_sync_wait.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_var_sync_wait.test 2017-12-21 15:48:47.000000000 +0000 @@ -20,7 +20,10 @@ --connection node_2 SET GLOBAL wsrep_sync_wait = 1; # Those statements should see the table -SHOW TABLES LIKE '%t1'; + +# MW-86 SHOW commands have now their own bitmask +# SHOW TABLES LIKE '%t1'; + SELECT COUNT(*) = 0 FROM t1; --connection node_1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_wsrep_provider_unset_set.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_wsrep_provider_unset_set.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/galera_wsrep_provider_unset_set.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/galera_wsrep_provider_unset_set.test 2017-12-21 15:48:47.000000000 +0000 @@ -6,6 +6,11 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--source include/auto_increment_offset_save.inc + --connection node_1 CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; INSERT INTO t1 VALUES (1); @@ -26,6 +31,8 @@ --eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; --enable_query_log +SET SESSION wsrep_sync_wait = 0; + --source include/wait_until_connected_again.inc --source include/galera_wait_ready.inc @@ -39,3 +46,5 @@ SELECT COUNT(*) = 3 FROM t1; DROP TABLE t1; + +--source include/auto_increment_offset_restore.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/lp1376747-4.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/lp1376747-4.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/lp1376747-4.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/lp1376747-4.test 2017-12-21 15:48:47.000000000 +0000 @@ -45,7 +45,7 @@ --connection node_2a --reap UNLOCK TABLES; ---sleep 1 +--sleep 2 SHOW CREATE TABLE t1; SELECT * from t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-286.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-286.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-286.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-286.test 2017-12-21 15:48:47.000000000 +0000 @@ -25,6 +25,7 @@ --error ER_QUERY_INTERRUPTED ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_sync_wait = 0; SET wsrep_on = TRUE; SET GLOBAL wsrep_desync = FALSE; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-329.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-329.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-329.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-329.test 2017-12-21 15:48:47.000000000 +0000 @@ -80,3 +80,6 @@ --connection node_1 DROP PROCEDURE proc_insert; DROP TABLE t1; + +# Due to MW-330, Multiple "conflict state 3 after post commit" warnings if table is dropped while SP is running +CALL mtr.add_suppression("conflict state 3 after post commit"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-336.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-336.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-336.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-336.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,64 @@ +# +# MW-336 Slave threads may leak if variable wsrep_slave_threads is set repeatedly +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; + +--connection node_1 +SET GLOBAL wsrep_slave_threads = 10; +SET GLOBAL wsrep_slave_threads = 1; + +--connection node_2 +INSERT INTO t1 VALUES (1); + +--connection node_1 +--sleep 0.5 +SET GLOBAL wsrep_slave_threads = 10; +--sleep 0.5 +SELECT COUNT(*) = 11 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; + +SET GLOBAL wsrep_slave_threads = 20; +--sleep 0.5 +SELECT COUNT(*) = 21 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; + + +SET GLOBAL wsrep_slave_threads = 1; + +--connection node_2 +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (5); +INSERT INTO t1 VALUES (6); +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (9); + + +--connection node_1 +SET GLOBAL wsrep_slave_threads = 10; +SET GLOBAL wsrep_slave_threads = 0; + +--connection node_2 +INSERT INTO t1 VALUES (10); +INSERT INTO t1 VALUES (11); +INSERT INTO t1 VALUES (12); +INSERT INTO t1 VALUES (13); +INSERT INTO t1 VALUES (14); +INSERT INTO t1 VALUES (15); +INSERT INTO t1 VALUES (16); +INSERT INTO t1 VALUES (17); +INSERT INTO t1 VALUES (18); +INSERT INTO t1 VALUES (19); +INSERT INTO t1 VALUES (20); + +--connection node_1 +--sleep 0.5 +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; + +SET GLOBAL wsrep_slave_threads = 1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-357.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-357.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-357.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-357.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,13 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_2 +SET GLOBAL wsrep_slave_threads = 0; + +--connection node_1 +CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=InnoDB; + +--connection node_1 +INSERT INTO t1 VALUES (1); + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-369.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-369.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-369.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-369.test 2017-12-21 15:48:47.000000000 +0000 @@ -244,4 +244,3 @@ DROP TABLE c; DROP TABLE p; ---sleep 3 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-388.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-388.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-388.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-388.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,76 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(255)) Engine=InnoDB; + +DELIMITER |; +CREATE PROCEDURE insert_proc () +BEGIN + DECLARE CONTINUE HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO; + END; + INSERT INTO t1 VALUES (1, 'node 1'),(2, 'node 1'); + INSERT INTO t1 VALUES (3, 'node 1'); +END| +DELIMITER ;| + +# We need two slave threads here to guarantee progress. +# If we use only one thread the following could happen +# in node_1: +# We block the only slave thread in wsrep_apply_cb and we +# issue an INSERT (by calling the stored procedure) that will +# try to acquire galera's local monitor in pre_commit(). +# This usually works fine, except for when a commit cut event +# sneaks in the slave queue and gets a local seqno smaller than +# that of the INSERT. Because there is only one slave thread, +# commit cut is not processed and therefore does not advance +# local monitor, and our INSERT remains stuck there. +SET GLOBAL wsrep_slave_threads = 2; +SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb"; + +--connection node_2 +--send INSERT INTO t1 VALUES (1, 'node 2'); + +--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 +--connection node_1a +SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached"; + +--connection node_1 +SET SESSION wsrep_sync_wait = 0; +SET SESSION DEBUG_SYNC = 'wsrep_after_replication SIGNAL wsrep_after_replication_reached WAIT_FOR wsrep_after_replication_continue'; +--send CALL insert_proc (); + +--connection node_1a +SET SESSION DEBUG_SYNC = "now WAIT_FOR wsrep_after_replication_reached"; + + +SET GLOBAL DEBUG = ""; +SET DEBUG_SYNC = "now SIGNAL wsrep_after_replication_continue"; +SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; + +--connection node_2 +--reap + +--connection node_1 +# We expect no errors here, because the handler in insert_proc() caught the deadlock error +--reap +SELECT @errno = 1213; +SELECT * FROM t1; + +--connection node_2 +SELECT * FROM t1; + +--connection node_1 +SET GLOBAL wsrep_slave_threads = DEFAULT; +DROP TABLE t1; +DROP PROCEDURE insert_proc; + +SET GLOBAL debug = NULL; +SET debug_sync='RESET'; + +# Make sure no pending signals are leftover to surprise subsequent tests. +SELECT @@debug_sync; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-402.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-402.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-402.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-402.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,228 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_debug_sync.inc +--source suite/galera/include/galera_have_debug_sync.inc + +# +# we must open connection node_1a here, MW-369.inc will use it later +# +--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 + +# +# cascading delete operation is replicated from node2 +# and this conflicts with an update for child table in node1 +# +# As a result, the update should fail for certification error +# +--connection node_1 + +CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER, f2 INTEGER, + CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1) ON DELETE CASCADE); + + +INSERT INTO p VALUES (1, 0); +INSERT INTO p VALUES (2, 0); + +INSERT INTO c VALUES (1, 1, 0); + +--let $mw_369_parent_query = UPDATE c SET f2=1 where f1=1 +--let $mw_369_child_query = DELETE FROM p WHERE f1 = 1 + +--connection node_1a +--source MW-369.inc + +# Commit fails +--connection node_1 +--error ER_LOCK_DEADLOCK +--reap + +--connection node_2 +SELECT * FROM p; +SELECT * FROM c; + +DROP TABLE c; +DROP TABLE p; + +# +# cascading update operation is replicated from node2 +# and this conflicts with an update for child table in node1 +# +# As a result, the update should fail for certification error +# +--connection node_1 + +CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER, f2 INTEGER, + CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1) ON UPDATE CASCADE); + + +INSERT INTO p VALUES (1, 0); +INSERT INTO p VALUES (2, 0); + +INSERT INTO c VALUES (1, 1, 0); + +--let $mw_369_parent_query = UPDATE c SET f2=2 where f1=1 +--let $mw_369_child_query = UPDATE p set f1=11 WHERE f1 = 1 + +--connection node_1a +--source MW-369.inc + +# Commit fails +--connection node_1 +--error ER_LOCK_DEADLOCK +--reap + +--connection node_2 +SELECT * FROM p; +SELECT * FROM c; + +DROP TABLE c; +DROP TABLE p; + +# +# ON UPDATE CASCADE tests +# Here we update primary key of parent table to cause cascaded update +# on child table +# +# cascading update operation is replicated from node2 +# and this conflicts with an update for child table in node1 +# +# As a result, the update should fail for certification error +# +--connection node_1 + +CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER, f2 INTEGER, + CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1) ON UPDATE CASCADE); + + +INSERT INTO p VALUES (1, 0); +INSERT INTO p VALUES (2, 0); + +INSERT INTO c VALUES (1, 1, 0); + +--let $mw_369_parent_query = UPDATE c SET p_id=2 where f1=1 +--let $mw_369_child_query = UPDATE p set f1=11 WHERE f1 = 1 + +--connection node_1a +--source MW-369.inc + +# Commit fails +--connection node_1 +--error ER_LOCK_DEADLOCK +--reap + +# same as previous, but statements in different order +--connection node_2 +SELECT * FROM p; +SELECT * FROM c; + +--let $mw_369_parent_query = UPDATE p set f1=21 WHERE f1 = 11 +--let $mw_369_child_query = UPDATE c SET p_id=2 where f1=1 + +--connection node_1a +--source MW-369.inc + +# Commit fails +--connection node_1 +--error ER_LOCK_DEADLOCK +--reap + + +--connection node_2 +SELECT * FROM p; +SELECT * FROM c; + +DROP TABLE c; +DROP TABLE p; + +# +# CASCADE DELETE tests with two parent tables +# Here we cause cascaded operation on child table through +# one parent table and have other operation on the other +# parent table +# +# cascading update operation is replicated from node2 +# but this does not conflict with an update for the other parent table in node1 +# +# As a result, the update on p2 should succeed +# +--connection node_1 + +CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER, + f2 INTEGER, + CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1) + ON DELETE CASCADE, + CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1)); + +INSERT INTO p1 VALUES (1, 0); +INSERT INTO p2 VALUES (1, 0); + +INSERT INTO c VALUES (1, 1, 1, 0); + +--let $mw_369_parent_query = UPDATE p2 SET f2=2 where f1=1 +--let $mw_369_child_query = DELETE FROM p1 WHERE f1 = 1 + +--connection node_1a +--source MW-369.inc + +# Commit succeeds +--connection node_1 +--reap + +--connection node_2 +SELECT * FROM p1; +SELECT * FROM p2; +SELECT * FROM c; + +DROP TABLE c; +DROP TABLE p1; +DROP TABLE p2; + +# +# CASCADE DELETE tests with two parent tables +# Here we cause cascaded operation on child table through +# one parent table and issue other delete operation through the +# other parent table. The cascade progresses to same child table row where +# we should see the conflict to happen +# +# As a result, the update on p2 should fail +# +--connection node_1 + +CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB; +CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER, + f2 INTEGER, + CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1) + ON DELETE CASCADE, + CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1) + ON DELETE CASCADE); + +INSERT INTO p1 VALUES (1, 0); +INSERT INTO p2 VALUES (1, 0); + +INSERT INTO c VALUES (1, 1, 1, 0); + +--let $mw_369_parent_query = DELETE FROM p2 WHERE f1=1 +--let $mw_369_child_query = DELETE FROM p1 WHERE f1=1 + +--connection node_1a +--source MW-369.inc + +# Commit succeeds +--connection node_1 +--error ER_LOCK_DEADLOCK +--reap + +--connection node_2 +SELECT * FROM p1; +SELECT * FROM p2; +SELECT * FROM c; + +DROP TABLE c; +DROP TABLE p1; +DROP TABLE p2; \ No newline at end of file diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait1-master.opt mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait1-master.opt --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait1-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait1-master.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--log-bin --log-slave-updates diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait1.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait1.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait1.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait1.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,106 @@ +# +# SHOW commands no longer obey wsrep_sync_wait = 1 (WSREP_SYNC_WAIT_BEFORE_READ) +# (they do not wait for the background INSERT in the applier in node_2 to +# complete) +# +--source include/galera_cluster.inc +--source include/have_binlog_format_row.inc +--source include/have_debug_sync.inc + +--connection node_2 +# Make sure no signals have been leftover from previous tests to surprise us. +SELECT @@debug_sync; + +SET SESSION wsrep_sync_wait = 1; +SET GLOBAL debug = "+d,sync.wsrep_apply_cb"; + +--connection node_1 +CREATE TABLE t_wait1 (f1 INTEGER) ENGINE=InnoDB; +# This will complete in node_1 but will start a background apply in node_2 +# which will stop because of sync.wsrep_apply_cb we set above. +INSERT INTO t_wait1 VALUES (1); + +--connection node_2 + +SET SESSION debug_sync = "now WAIT_FOR sync.wsrep_apply_cb_reached"; + +--disable_result_log + +SHOW BINARY LOGS; + +SHOW BINLOG EVENTS; + +--error ER_NO_SUCH_TABLE +SHOW COLUMNS FROM t1; + +--error ER_EVENT_DOES_NOT_EXIST +SHOW CREATE EVENT e1; + +--error ER_SP_DOES_NOT_EXIST +SHOW CREATE FUNCTION f1; + +--error ER_SP_DOES_NOT_EXIST +SHOW CREATE PROCEDURE p1; + +--error ER_NO_SUCH_TABLE +SHOW CREATE TABLE t1; + +--error ER_TRG_DOES_NOT_EXIST +SHOW CREATE TRIGGER tr1; + +--error ER_NO_SUCH_TABLE +SHOW CREATE VIEW v1; + +SHOW DATABASES; + +SHOW ENGINE InnoDB STATUS; + +--error ER_SP_DOES_NOT_EXIST +SHOW FUNCTION CODE f1; + +SHOW FUNCTION STATUS; + +SHOW GRANTS FOR 'root'@'localhost'; + +--error ER_NO_SUCH_TABLE +SHOW INDEX FROM t1; + +SHOW OPEN TABLES; + +--error ER_SP_DOES_NOT_EXIST +SHOW PROCEDURE CODE p1; + +SHOW PROCEDURE STATUS; + +SHOW PRIVILEGES; + +SHOW STATUS LIKE 'wsrep_cluster_size'; + +SHOW TABLE STATUS; + +SHOW TABLES; + +SHOW TRIGGERS; + +SHOW GLOBAL VARIABLES LIKE 'foo_bar'; + +--error 0 +SHOW WARNINGS; + +--enable_result_log + +# Unblock the background INSERT and remove the sync point. +SET GLOBAL debug = "-d,sync.wsrep_apply_cb"; +SET SESSION debug_sync = "now SIGNAL signal.wsrep_apply_cb"; + +SET SESSION wsrep_sync_wait = default; + +# This will wait for the background INSERT to complete before we quit +# from the test. +DROP TABLE t_wait1; + +SET GLOBAL debug = NULL; +SET debug_sync='RESET'; + +# Make sure no pending signals are leftover to surprise subsequent tests. +SELECT @@debug_sync; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait8-master.opt mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait8-master.opt --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait8-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait8-master.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--log-bin --log-slave-updates diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait8.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait8.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/MW-86-wait8.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/MW-86-wait8.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,128 @@ +# +# SHOW commands now obey wsrep_sync_wait = 8 (WSREP_SYNC_WAIT_BEFORE_SHOW) +# +--source include/galera_cluster.inc +--source include/have_binlog_format_row.inc +--source include/have_debug_sync.inc + +--connection node_2 +# Make sure no signals have been leftover from previous tests to surprise us. +SELECT @@debug_sync; + +SET SESSION wsrep_sync_wait = 8; +SET GLOBAL debug = "+d,sync.wsrep_apply_cb"; + +--connection node_1 +CREATE TABLE t_wait8 (f1 INTEGER) ENGINE=InnoDB; +# This will complete in node_1 but will start a background apply in node_2 +# which will stop because of sync.wsrep_apply_cb we set above. +INSERT INTO t_wait8 VALUES (1); + +--connection node_2 + +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = "repl.causal_read_timeout=PT0.1S"; + +SET SESSION debug_sync = "now WAIT_FOR sync.wsrep_apply_cb_reached"; + +--disable_result_log + +--error ER_LOCK_WAIT_TIMEOUT +SHOW BINARY LOGS; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW BINLOG EVENTS; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW COLUMNS FROM t1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW CREATE DATABASE db1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW CREATE EVENT e1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW CREATE FUNCTION f1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW CREATE PROCEDURE p1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW CREATE TABLE t1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW CREATE TRIGGER tr1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW CREATE VIEW v1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW DATABASES; + +--error 0 +SHOW ENGINE InnoDB STATUS; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW FUNCTION CODE f1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW FUNCTION STATUS; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW GRANTS FOR 'root'@'localhost'; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW INDEX FROM t1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW OPEN TABLES; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW PROCEDURE CODE p1; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW PROCEDURE STATUS; + +--error 0 +SHOW PRIVILEGES; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW STATUS LIKE 'wsrep_cluster_size'; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW TABLE STATUS; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW TABLES; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW TRIGGERS; + +--error ER_LOCK_WAIT_TIMEOUT +SHOW GLOBAL VARIABLES LIKE 'foo_bar'; + +--error 0 +SHOW WARNINGS; + +--enable_result_log + +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = "$wsrep_provider_options_orig" +--enable_query_log + +# Unblock the background INSERT and remove the sync point. +SET GLOBAL debug = "-d,sync.wsrep_apply_cb"; +SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; + +SET SESSION wsrep_sync_wait = default; + +# This will wait for the background INSERT to complete before we quit +# from the test. +DROP TABLE t_wait8; + +SET GLOBAL debug = NULL; +SET debug_sync='RESET'; + +# Make sure no pending signals are leftover to surprise subsequent tests. +SELECT @@debug_sync; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/mysql-wsrep#198.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/mysql-wsrep#198.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/mysql-wsrep#198.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/mysql-wsrep#198.test 2017-12-21 15:48:47.000000000 +0000 @@ -5,6 +5,9 @@ CREATE TABLE t2 (id INT PRIMARY KEY) ENGINE=InnoDB; --connection node_2 +# Ensure that the tables have been created on node #2 +SELECT 1 FROM DUAL; + LOCK TABLE t2 WRITE; --connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/mysql-wsrep#201.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/mysql-wsrep#201.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/mysql-wsrep#201.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/mysql-wsrep#201.test 2017-12-21 15:48:47.000000000 +0000 @@ -8,7 +8,6 @@ --connection node_2 --let $qcache_size_orig = `SELECT @@GLOBAL.query_cache_size` SET GLOBAL query_cache_size=1355776; -SET SESSION wsrep_sync_wait = 7; --disable_query_log diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/pxc-421.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/pxc-421.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/pxc-421.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/pxc-421.test 2017-12-21 15:48:47.000000000 +0000 @@ -31,6 +31,7 @@ --eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; --enable_query_log +set SESSION wsrep_sync_wait=0; --source include/wait_until_connected_again.inc --source include/galera_wait_ready.inc @@ -53,8 +54,12 @@ --eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_2 SELECT COUNT(*) FROM t1; +SET GLOBAL auto_increment_offset = 2; + --connection node_1 SELECT COUNT(*) FROM t1; show global variables like 'wsrep_slave_threads'; --eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_1 DROP TABLE t1; + +SET GLOBAL auto_increment_offset = 1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/query_cache.opt mariadb-10.1-10.1.30/mysql-test/suite/galera/t/query_cache.opt --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/query_cache.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/query_cache.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--query_cache_type=1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera/t/sql_log_bin.test mariadb-10.1-10.1.30/mysql-test/suite/galera/t/sql_log_bin.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera/t/sql_log_bin.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera/t/sql_log_bin.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,13 @@ # Test to check the behavior of galera cluster with sql_log_bin=ON|OFF & binary # logging is disabled. sql_bin_log should not affect galera replication. +# +# The following bugfixes are tested: +# +# MDEV-9510: Segmentation fault in binlog thread. +# A scenario otherwise causing a similar segfault is replayed. +# The test must pass having no crashes. +# The sequence of sql statements is provided by original +# sql_log_bin.test augmented with a FLUSH BINLOG LOGS, below. --source include/galera_cluster.inc --source include/have_innodb.inc @@ -15,6 +23,10 @@ --echo # Disable binary logging for current session SET SQL_LOG_BIN=OFF; INSERT INTO t1 VALUES (2); + +# MDEV-9510: the following binlog rotation due to FLUSH segfaults wo/ the fixes +FLUSH BINARY LOGS; + CREATE TABLE t2(c1 INT PRIMARY KEY) ENGINE=INNODB; INSERT INTO t2 VALUES (1); CREATE TABLE test.t3 AS SELECT * from t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/disabled.def mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/disabled.def --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/disabled.def 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/disabled.def 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,3 @@ -galera_garbd : Fix the test case -galera_evs_suspect_timeout : TODO: investigate -galera_innobackupex_backup : TODO: investigate galera_slave_options_do :MDEV-8798 galera_slave_options_ignore : MDEV-8798 -galera_pc_bootstrap : TODO: Investigate: Timeout in wait_condition.inc -galera_pc_weight : Test times out -galera_safe_to_bootstrap : I Really dont know :( + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/galera_3nodes.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/galera_3nodes.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/galera_3nodes.cnf 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/galera_3nodes.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -11,9 +11,12 @@ wsrep_node_address=127.0.0.1 # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON -wsrep-sync-wait=7 +wsrep-sync-wait=15 [mysqld.1] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port wsrep-cluster-address='gcomm://' wsrep_provider_options='base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S' diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/GAL-501.result mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/GAL-501.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/GAL-501.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/GAL-501.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,14 @@ +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; +VARIABLE_VALUE LIKE '%[::1]%' +1 +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 3 +1 +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_ipv6_mysqldump.result mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_ipv6_mysqldump.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_ipv6_mysqldump.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_ipv6_mysqldump.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,26 @@ +GRANT ALL PRIVILEGES ON *.* TO 'sst'; +SET GLOBAL wsrep_sst_auth = 'sst:'; +SET GLOBAL wsrep_sst_method = 'mysqldump'; +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +Loading wsrep provider ... +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; +VARIABLE_VALUE LIKE '%[::1]%' +1 +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +DROP USER sst; +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); +CALL mtr.add_suppression("InnoDB: New log files created"); +CALL mtr.add_suppression("InnoDB: Creating foreign key constraint system tables"); +CALL mtr.add_suppression("Can't open and lock time zone table"); +CALL mtr.add_suppression("Can't open and lock privilege tables"); +CALL mtr.add_suppression("Info table is not ready to be used"); +CALL mtr.add_suppression("Native table .* has the wrong structure"); +CALL mtr.add_suppression("Unsupported protocol downgrade: incremental data collection disabled. Expect abort"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_ipv6_rsync.result mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_ipv6_rsync.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_ipv6_rsync.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_ipv6_rsync.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,14 @@ +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; +VARIABLE_VALUE LIKE '%[::1]%' +1 +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 3 +1 +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_ipv6_xtrabackup-v2.result mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_ipv6_xtrabackup-v2.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_ipv6_xtrabackup-v2.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_ipv6_xtrabackup-v2.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,18 @@ +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; +VARIABLE_VALUE LIKE '%[::1]%' +1 +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 3 +1 +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; +include/assert_grep.inc [Streaming the backup to joiner at \[::1\]] +include/assert_grep.inc [async IST sender starting to serve tcp://\[::1\]:] +include/assert_grep.inc [IST receiver addr using tcp://\[::1\]] +include/assert_grep.inc [Prepared IST receiver, listening at: tcp://\[::1\]] diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_var_dirty_reads2.result mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_var_dirty_reads2.result --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/r/galera_var_dirty_reads2.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/r/galera_var_dirty_reads2.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,48 @@ +CREATE TABLE t1 (f1 INTEGER); +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; +SET SESSION wsrep_sync_wait = 0; +SET SESSION wsrep_dirty_reads = 1; +SELECT f1 FROM t1; +f1 +1 +USE test; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +LOCK TABLE t1 WRITE; +UNLOCK TABLES; +FLUSH TABLES WITH READ LOCK; +UNLOCK TABLES; +PREPARE stmt_select FROM 'SELECT f1 FROM t1'; +EXECUTE stmt_select; +f1 +1 +PREPARE stmt_update FROM 'UPDATE t1 SET f1 = f1 + f1'; +SET GLOBAL wsrep_dirty_reads = 1; +SET GLOBAL wsrep_sync_wait = 0; +SET GLOBAL wsrep_dirty_reads = 0; +SET GLOBAL wsrep_sync_wait = 15; +SET SESSION wsrep_dirty_reads = 1; +INSERT INTO t1 SELECT * FROM t1; +ERROR 08S01: WSREP has not yet prepared node for application use +DELETE FROM t1; +ERROR 08S01: WSREP has not yet prepared node for application use +UPDATE t1 SET f1 = f1 + 1; +ERROR 08S01: WSREP has not yet prepared node for application use +DROP TABLE t1; +ERROR 08S01: WSREP has not yet prepared node for application use +EXECUTE stmt_update; +ERROR 08S01: WSREP has not yet prepared node for application use +SET SESSION wsrep_dirty_reads = 0; +SELECT * FROM t1; +ERROR 08S01: WSREP has not yet prepared node for application use +EXECUTE stmt_select; +ERROR 08S01: WSREP has not yet prepared node for application use +SELECT COUNT(*) > 0 FROM INFORMATION_SCHEMA.PROCESSLIST; +COUNT(*) > 0 +1 +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/GAL-501.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/GAL-501.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/GAL-501.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/GAL-501.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,26 @@ +!include ../galera_3nodes.cnf + +[mysqld] +wsrep_sst_method=rsync + + +[mysqld.1] +wsrep-cluster-address=gcomm:// +wsrep_node_address=[::1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]' +wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.1.port' + +[mysqld.2] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_node_address=[::1] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]' +wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.2.port' + +[mysqld.3] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_node_address=[::1] +wsrep_provider_options='base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]' +wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.3.port' diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/GAL-501.test mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/GAL-501.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/GAL-501.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/GAL-501.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,38 @@ +# +# Test GAL-501 Improved URI parsing for IPv6 addresses +# The .cnf file contains +# wsrep_node_address=[::1] +# ist.recv_addr=[::1] + +--source include/galera_cluster.inc +--source include/have_ipv6.inc + +# Confirm that initial handshake happened over ipv6 + +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +# Force IST + +--connection node_2 +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; + +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,22 @@ +!include ../galera_3nodes.cnf + +[mysqld] +wsrep_sst_method=rsync + +[mysqld.1] +wsrep-cluster-address=gcomm:// +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.1.port' + +[mysqld.2] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.2.port' + +[mysqld.3] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.3.port' diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,56 @@ +--source include/galera_cluster.inc +--source include/have_ipv6.inc + +--connection node_1 +GRANT ALL PRIVILEGES ON *.* TO 'sst'; + +--let $wsrep_sst_auth_orig = `SELECT @@wsrep_sst_auth` +SET GLOBAL wsrep_sst_auth = 'sst:'; + +--connection node_2 +--source include/wait_until_connected_again.inc +--let $wsrep_sst_method_orig = `SELECT @@wsrep_sst_method` +--let $wsrep_sst_receive_address_orig = `SELECT @@wsrep_sst_receive_address` + +--disable_query_log +--eval SET GLOBAL wsrep_sst_receive_address = '[::1]:$NODE_MYPORT_2'; +--enable_query_log +SET GLOBAL wsrep_sst_method = 'mysqldump'; + + +# +# Force mysqldump SST +# + +--connection node_2 +--source suite/galera/include/galera_unload_provider.inc +--remove_file $MYSQLTEST_VARDIR/mysqld.2/data/grastate.dat + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + + +--connection node_2 +--source suite/galera/include/galera_load_provider.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; + +# Confirm that initial handshake happened over ipv6 + +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; + +--source suite/galera/include/galera_sst_restore.inc +--connection node_2 +CALL mtr.add_suppression("Unsupported protocol downgrade: incremental data collection disabled. Expect abort"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,22 @@ +!include ../galera_3nodes.cnf + +[mysqld] +wsrep_sst_method=rsync + +[mysqld.1] +wsrep-cluster-address=gcomm:// +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.1.port' + +[mysqld.2] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.2.port' + +[mysqld.3] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.3.port' diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,32 @@ +--source include/galera_cluster.inc +--source include/have_ipv6.inc + +# Confirm that initial handshake happened over ipv6 + +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +# Force IST + +--connection node_2 +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; + +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.cnf mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,26 @@ +!include ../galera_3nodes.cnf + +[mysqld] +wsrep_sst_method=xtrabackup-v2 +wsrep_sst_auth="root:" + +[mysqld.1] +wsrep-cluster-address=gcomm:// +wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.1.port' + +[mysqld.2] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.2.port' + +[mysqld.3] +wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' +wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port' +wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port' +wsrep_node_incoming_address='[::1]:@mysqld.3.port' + +[SST] +sockopt=",pf=ip6" diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.test mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_ipv6_xtrabackup-v2.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,62 @@ +--source include/galera_cluster.inc +--source include/have_ipv6.inc + +# Confirm that initial handshake happened over ipv6 + +SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses'; +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +# Force IST + +--connection node_2 +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; + +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; + +# Confirm that key messages around SST and IST reference IPv6 + +--connection node_1 +--let $assert_file = $MYSQLTEST_VARDIR/log/mysqld.1.err +--let $assert_only_after = CURRENT_TEST + +--let $assert_count = 2 +--let $assert_text = Streaming the backup to joiner at \[::1\] +--let $assert_select = Streaming the backup to joiner at \[::1\] +--source include/assert_grep.inc + +--let $assert_count = 1 +--let $assert_text = async IST sender starting to serve tcp://\[::1\]: +--let $assert_select = async IST sender starting to serve tcp://\[::1\]: +--source include/assert_grep.inc + +--let $assert_file = $MYSQLTEST_VARDIR/log/mysqld.2.err + +--let $assert_text = IST receiver addr using tcp://\[::1\] +--let $assert_select = IST receiver addr using tcp://\[::1\] +--source include/assert_grep.inc + +--let $assert_text = Prepared IST receiver, listening at: tcp://\[::1\] +--let $assert_select = Prepared IST receiver, listening at: tcp://\[::1\] +--source include/assert_grep.inc + + + + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_var_dirty_reads2.test mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_var_dirty_reads2.test --- mariadb-10.1-10.1.25/mysql-test/suite/galera_3nodes/t/galera_var_dirty_reads2.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/galera_3nodes/t/galera_var_dirty_reads2.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,112 @@ +# +# Additional tests for wsrep_dirty_reads +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER); +INSERT INTO t1 VALUES (1); + +--connection node_2 +SET GLOBAL wsrep_provider_options='gmcast.isolate=1'; + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +--connection node_2 +SET SESSION wsrep_sync_wait = 0; + +--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc + +SET SESSION wsrep_dirty_reads = 1; + +# Those statements should succeed + +--error 0 +SELECT f1 FROM t1; + +--error 0 +USE test; + +--error 0 +SHOW CREATE TABLE t1; + +--error 0 +LOCK TABLE t1 WRITE; + +--error 0 +UNLOCK TABLES; + +--error 0 +FLUSH TABLES WITH READ LOCK; + +--error 0 +UNLOCK TABLES; + +--error 0 +PREPARE stmt_select FROM 'SELECT f1 FROM t1'; + +--error 0 +EXECUTE stmt_select; + +--error 0 +PREPARE stmt_update FROM 'UPDATE t1 SET f1 = f1 + f1'; + +# Mysqldump should succeed + +SET GLOBAL wsrep_dirty_reads = 1; +SET GLOBAL wsrep_sync_wait = 0; +--error 0 +--exec $MYSQL_DUMP -u root -S $NODE_MYSOCK_2 test >/dev/null +SET GLOBAL wsrep_dirty_reads = 0; +SET GLOBAL wsrep_sync_wait = 15; + +# Those statements should fail + +SET SESSION wsrep_dirty_reads = 1; + +--error ER_UNKNOWN_COM_ERROR +INSERT INTO t1 SELECT * FROM t1; + +--error ER_UNKNOWN_COM_ERROR +DELETE FROM t1; + +--error ER_UNKNOWN_COM_ERROR +UPDATE t1 SET f1 = f1 + 1; + +--error ER_UNKNOWN_COM_ERROR +DROP TABLE t1; + +--error ER_UNKNOWN_COM_ERROR +EXECUTE stmt_update; + +# With wsrep_dirty_reads = 0 , even SELECTS are not allowed + +SET SESSION wsrep_dirty_reads = 0; + +--error ER_UNKNOWN_COM_ERROR +SELECT * FROM t1; + +--error ER_UNKNOWN_COM_ERROR +EXECUTE stmt_select; + +# But reads from INFORMATION_SCHEMA are allowed + +--error 0 +SELECT COUNT(*) > 0 FROM INFORMATION_SCHEMA.PROCESSLIST; + +# Restore cluster +SET GLOBAL wsrep_provider_options='gmcast.isolate=0'; + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc + +--connection node_2 +--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/ibd_convert.pl mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/ibd_convert.pl --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/ibd_convert.pl 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/ibd_convert.pl 2017-12-21 15:48:47.000000000 +0000 @@ -11,7 +11,7 @@ # FIL_PAGE_DATA + FSP_SPACE_FLAGS = 38 + 16 = 54 bytes from the start my($flags) = unpack "x[54]N", $_; my $badflags = ($flags & 0x3f); - my $compression_level=6; + my $compression_level=3; $badflags |= 1<<6|$compression_level<<7 if ($flags & 1 << 16); $badflags |= ($flags & 15 << 6) << 7; # PAGE_SSIZE diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/import.inc mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/import.inc --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/import.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/import.inc 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,40 @@ +# Export Table and Import from saved files .cfg and .ibd +# Caller should create t1 table definition and populate table + +let $MYSQLD_DATADIR = `SELECT @@datadir`; + +if(!$source_db) { + let $source_db = test; +} + +if(!$dest_db) { + let $dest_db = test; +} + +eval FLUSH TABLES $source_db.t1 FOR EXPORT; + +--copy_file $MYSQLD_DATADIR/$source_db/t1.cfg $MYSQLD_DATADIR/t1.cfg_back +--copy_file $MYSQLD_DATADIR/$source_db/t1.ibd $MYSQLD_DATADIR/t1.ibd_back + +UNLOCK TABLES; + +if($source_db != $dest_db) { + eval USE $dest_db; + let $create1 = query_get_value(SHOW CREATE TABLE $source_db.t1, Create Table, 1); + eval $create1; +} + +eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE; + +--move_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg +--move_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd + +eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE; + +eval CHECK TABLE $dest_db.t1; +eval SHOW CREATE TABLE $dest_db.t1; +eval SELECT * FROM $dest_db.t1; + +if($source_db != $dest_db) { + eval DROP TABLE $dest_db.t1; +} diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/innodb_dict.inc mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/innodb_dict.inc --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/innodb_dict.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/innodb_dict.inc 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,9 @@ +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; + +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; + +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/innodb-wl6045.inc mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/innodb-wl6045.inc --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/include/innodb-wl6045.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/include/innodb-wl6045.inc 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,22 @@ +--echo ===> Testing size=$size +--disable_warnings +--eval CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=$size +--enable_warnings + +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); + +--source include/shutdown_mysqld.inc + +#STOP; + +--exec $INNOCHECKSUM $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --write=crc32 $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/t1.ibd + +--source include/start_mysqld.inc +select * from t1; +drop table t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/101_compatibility.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/101_compatibility.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/101_compatibility.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/101_compatibility.result 2017-12-21 15:48:47.000000000 +0000 @@ -7,7 +7,7 @@ CREATE TABLE td(a INT)ENGINE=InnoDB ROW_FORMAT=DYNAMIC; CREATE TABLE tz(a INT)ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; CREATE TABLE tdd(a INT) ENGINE=InnoDB, DATA DIRECTORY='MYSQL_TMP_DIR'; -CREATE TABLE tp(a INT) ENGINE=InnoDB page_compressed=1; +CREATE TABLE tp(a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC PAGE_COMPRESSED=1; CREATE TABLE ti(a INT) ENGINE=InnoDB; FLUSH TABLES ti FOR EXPORT; backup: ti diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/alter_rename_existing.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/alter_rename_existing.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/alter_rename_existing.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/alter_rename_existing.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,96 @@ +# +# Show what happens during ALTER TABLE when an existing file +# exists in the target location. +# +# Bug #19218794: IF TABLESPACE EXISTS, CAN'T CREATE TABLE, +# BUT CAN ALTER ENGINE=INNODB +# +CREATE TABLE t1 (a SERIAL, b CHAR(10)) ENGINE=Memory; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); +# +# Create a file called MYSQLD_DATADIR/test/t1.ibd +# Directory listing of test/*.ibd +# +t1.ibd +ALTER TABLE t1 ENGINE = InnoDB; +ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 184 "Tablespace already exists") +# +# Move the file to InnoDB as t2 +# +ALTER TABLE t1 RENAME TO t2, ENGINE = INNODB; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(10) DEFAULT NULL, + UNIQUE KEY `a` (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +SELECT * from t2; +a b +1 one +2 two +3 three +ALTER TABLE t2 RENAME TO t1; +ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 184 "Tablespace already exists") +# +# Create another t1, but in the system tablespace. +# +SET GLOBAL innodb_file_per_table=OFF; +CREATE TABLE t1 (a SERIAL, b CHAR(20)) ENGINE=InnoDB; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(20) DEFAULT NULL, + UNIQUE KEY `a` (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +name space=0 +test/t1 1 +# +# ALTER TABLE from system tablespace to system tablespace +# +ALTER TABLE t1 ADD COLUMN c INT, ALGORITHM=INPLACE; +ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=COPY; +# +# Try to move t1 from the system tablespace to a file-per-table +# while a blocking t1.ibd file exists. +# +SET GLOBAL innodb_file_per_table=ON; +ALTER TABLE t1 ADD COLUMN e1 INT, ALGORITHM=INPLACE; +ERROR HY000: Tablespace for table 'test/t1' exists. Please DISCARD the tablespace before IMPORT. +ALTER TABLE t1 ADD COLUMN e2 INT, ALGORITHM=COPY; +ERROR HY000: Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME' (errno: 184 "Tablespace already exists") +# +# Delete the blocking file called MYSQLD_DATADIR/test/t1.ibd +# Move t1 to file-per-table using ALGORITHM=INPLACE with no blocking t1.ibd. +# +ALTER TABLE t1 ADD COLUMN e INT, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(20) DEFAULT NULL, + `c` int(11) DEFAULT NULL, + `d` int(11) DEFAULT NULL, + `e` int(11) DEFAULT NULL, + UNIQUE KEY `a` (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +name space=0 +test/t1 0 +DROP TABLE t1; +# +# Rename t2.ibd to t1.ibd. +# +ALTER TABLE t2 RENAME TO t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +name space=0 +test/t1 0 +SELECT * from t1; +a b +1 one +2 two +3 three +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/create-index-debug.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/create-index-debug.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/create-index-debug.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/create-index-debug.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,26 @@ +SET @saved_debug_dbug = @@SESSION.debug_dbug; +# +#BUG#21326304 INNODB ONLINE ALTER TABLE ENDS IN CRASH ON DISK FULL +# +CREATE TABLE t1(f1 CHAR(255) NOT NULL, f2 CHAR(255) NOT NULL, f3 +CHAR(255) NOT NULL, f4 CHAR(255) NOT NULL, f5 CHAR(255) NOT NULL,f6 +CHAR(255) NOT NULL, f7 CHAR(255) NOT NULL, f8 CHAR(255) NOT NULL,f9 +CHAR(255) NOT NULL, f10 CHAR(255) NOT NULL, f11 CHAR(255) NOT NULL,f12 +CHAR(255) NOT NULL, f13 CHAR(255) NOT NULL, f14 CHAR(255) NOT NULL,f15 +CHAR(255) NOT NULL, f16 CHAR(255) NOT NULL, f17 CHAR(255) NOT NULL,f18 +CHAR(255) NOT NULL) +ENGINE=INNODB ROW_FORMAT=DYNAMIC; +Warnings: +Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +INSERT INTO t1 +VALUES('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r'); +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +SET debug_dbug = '+d,disk_is_full'; +ALTER TABLE t1 FORCE, ALGORITHM=INPLACE; +ERROR HY000: The table 't1' is full +SET debug_dbug= @saved_debug_dbug; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/index_tree_operation.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/index_tree_operation.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/index_tree_operation.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/index_tree_operation.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,55 @@ +# +# Bug#15923864 (Bug#67718): +# INNODB DRASTICALLY UNDER-FILLS PAGES IN CERTAIN CONDITIONS +# +SET GLOBAL innodb_file_per_table=ON; +CREATE TABLE t1 (a BIGINT PRIMARY KEY, b VARCHAR(4096)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (0, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1000, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1001, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1002, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (2, REPEAT('a', 4096)); +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; +page_number number_records +3 2 +4 3 +5 3 +INSERT INTO t1 VALUES (999, REPEAT('a', 4096)); +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; +page_number number_records +3 3 +4 3 +5 3 +6 1 +INSERT INTO t1 VALUES (998, REPEAT('a', 4096)); +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; +page_number number_records +3 3 +4 3 +5 3 +6 2 +INSERT INTO t1 VALUES (997, REPEAT('a', 4096)); +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; +page_number number_records +3 3 +4 3 +5 3 +6 3 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-16k.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-16k.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-16k.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-16k.result 2017-12-21 15:48:47.000000000 +0000 @@ -331,9 +331,10 @@ UPDATE t1 SET a=@c,b=@c,c=@c,d=@c,e=@c,f=@c,g=@c,h=@c,i=@c,j=@c, k=@c,l=@c,m=@c,n=@c,o=@c,p=@c,q=@c,r=@c,s=@c,t=@c,u=@c; CREATE INDEX t1f ON t1 (f(767)); +BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d,f=@d,g=@d,h=@d,i=@d,j=@d, k=@d,l=@d,m=@d,n=@d,o=@d,p=@d,q=@d,r=@d,s=@d,t=@d,u=@d; -ERROR HY000: Undo log record is too big. +ROLLBACK; BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d; UPDATE t1 SET f=@d,g=@d,h=@d,i=@d,j=@d,k=@d,l=@d,m=@d, @@ -366,8 +367,9 @@ CREATE INDEX t1s ON t1 (s(767)); UPDATE t1 SET s=@e; CREATE INDEX t1t ON t1 (t(767)); +BEGIN; UPDATE t1 SET t=@e; -ERROR HY000: Undo log record is too big. +ROLLBACK; CREATE INDEX t1u ON t1 (u(767)); ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs CREATE INDEX t1ut ON t1 (u(767), t(767)); @@ -546,11 +548,11 @@ ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; INSERT INTO bug12547647 VALUES (5,REPEAT('khdfo5AlOq',1900),REPEAT('g',7751)); COMMIT; +BEGIN; UPDATE bug12547647 SET c = REPEAT('b',16928); -ERROR HY000: Undo log record is too big. SHOW WARNINGS; Level Code Message -Error 1713 Undo log record is too big. +ROLLBACK; DROP TABLE bug12547647; SET SESSION innodb_strict_mode = off; CREATE TABLE t1( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-32k.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-32k.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-32k.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-32k.result 2017-12-21 15:48:47.000000000 +0000 @@ -228,13 +228,14 @@ ka=@c,la=@c,ma=@c,na=@c,oa=@c,pa=@c,qa=@c,ra=@c,sa=@c,ta=@c,ua=@c, va=@c,wa=@c,xa=@c,ya=@c,za=@c; CREATE INDEX t1f17 ON t1 (v(767)); +BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d,f=@d,g=@d,h=@d,i=@d,j=@d, k=@d,l=@d,m=@d,n=@d,o=@d,p=@d,q=@d,r=@d,s=@d,t=@d,u=@d, v=@d,w=@d,x=@d,y=@d,z=@d, aa=@d,ba=@d,ca=@d,da=@d,ea=@d,fa=@d,ga=@d,ha=@d,ia=@d,ja=@d, ka=@d,la=@d,ma=@d,na=@d,oa=@d,pa=@d,qa=@d,ra=@d,sa=@d,ta=@d,ua=@d, va=@d,wa=@d,xa=@d,ya=@d,za=@d; -ERROR HY000: Undo log record is too big. +ROLLBACK; BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d; UPDATE t1 SET f=@d,g=@d,h=@d,i=@d,j=@d; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-64k.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-64k.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-64k.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-64k.result 2017-12-21 15:48:47.000000000 +0000 @@ -11,80 +11,26 @@ 65536 # Test 4) The maximum row size is dependent upon the page size. SET SESSION innodb_strict_mode = ON; -CREATE TABLE t1 ( -c01 char(200), c02 char(200), c03 char(200), c04 char(200), c05 char(200), -c06 char(200), c07 char(200), c08 char(200), c09 char(200), c10 char(200), -c11 char(200), c12 char(200), c13 char(200), c14 char(200), c15 char(200), -c16 char(200), c17 char(200), c18 char(200), c19 char(200), c20 char(200), -c21 char(200), c22 char(200), c23 char(200), c24 char(200), c25 char(200), -c26 char(200), c27 char(200), c28 char(200), c29 char(200), c30 char(200), -c31 char(200), c32 char(200), c33 char(200), c34 char(200), c35 char(200), -c36 char(200), c37 char(200), c38 char(200), c39 char(200), c40 char(200), -c41 char(200), c42 char(200), c43 char(200), c44 char(200), c45 char(200), -c46 char(200), c47 char(200), c48 char(200), c49 char(200), c50 char(200), -c51 char(200), c52 char(200), c53 char(200), c54 char(200), c55 char(200), -c56 char(200), c57 char(200), c58 char(200), c59 char(200), c60 char(200), -c61 char(200), c62 char(200), c63 char(200), c64 char(200), c65 char(200), -c66 char(200), c67 char(200), c68 char(200), c69 char(200), c70 char(200), -c71 char(200), c72 char(200), c73 char(200), c74 char(200), c75 char(200), -c76 char(200), c77 char(200), c78 char(200), c79 char(200), c80 char(200), -c101 char(200), c102 char(200), c103 char(200), c104 char(200), c105 char(200), -c106 char(200), c107 char(200), c108 char(200), c109 char(200), c110 char(200), -c111 char(200), c112 char(200), c113 char(200), c114 char(200), c115 char(200), -c116 char(200), c117 char(200), c118 char(200), c119 char(200), c120 char(200), -c121 char(200), c122 char(200), c123 char(200), c124 char(200), c125 char(200), -c126 char(200), c127 char(200), c128 char(200), c129 char(200), c130 char(200), -c131 char(200), c132 char(200), c133 char(200), c134 char(200), c135 char(200), -c136 char(200), c137 char(200), c138 char(200), c139 char(200), c140 char(200), -c141 char(200), c142 char(200), c143 char(200), c144 char(200), c145 char(200), -c146 char(200), c147 char(200), c148 char(200), c149 char(200), c150 char(200), -c151 char(200), c152 char(200), c153 char(200), c154 char(200), c155 char(200), -c156 char(200), c157 char(200), c158 char(200), c159 char(200), c160 char(200), -c161 char(200), c162 char(200), c163 char(200), c164 char(200), c165 char(200), -c166 char(200), c167 char(200), c168 char(200), c169 char(200), c170 char(200), -c171 char(200), c172 char(200), c173 char(200), c174 char(200), c175 char(200), -c176 char(200), c177 char(200), c178 char(200), c179 char(200), c180 char(200), -c190 char(200), -c81 char(143) -) ROW_FORMAT=redundant; -DROP TABLE t1; -CREATE TABLE t1 ( -c01 char(200), c02 char(200), c03 char(200), c04 char(200), c05 char(200), -c06 char(200), c07 char(200), c08 char(200), c09 char(200), c10 char(200), -c11 char(200), c12 char(200), c13 char(200), c14 char(200), c15 char(200), -c16 char(200), c17 char(200), c18 char(200), c19 char(200), c20 char(200), -c21 char(200), c22 char(200), c23 char(200), c24 char(200), c25 char(200), -c26 char(200), c27 char(200), c28 char(200), c29 char(200), c30 char(200), -c31 char(200), c32 char(200), c33 char(200), c34 char(200), c35 char(200), -c36 char(200), c37 char(200), c38 char(200), c39 char(200), c40 char(200), -c41 char(200), c42 char(200), c43 char(200), c44 char(200), c45 char(200), -c46 char(200), c47 char(200), c48 char(200), c49 char(200), c50 char(200), -c51 char(200), c52 char(200), c53 char(200), c54 char(200), c55 char(200), -c56 char(200), c57 char(200), c58 char(200), c59 char(200), c60 char(200), -c61 char(200), c62 char(200), c63 char(200), c64 char(200), c65 char(200), -c66 char(200), c67 char(200), c68 char(200), c69 char(200), c70 char(200), -c71 char(200), c72 char(200), c73 char(200), c74 char(200), c75 char(200), -c76 char(200), c77 char(200), c78 char(200), c79 char(200), c80 char(200), -c101 char(200), c102 char(200), c103 char(200), c104 char(200), c105 char(200), -c106 char(200), c107 char(200), c108 char(200), c109 char(200), c110 char(200), -c111 char(200), c112 char(200), c113 char(200), c114 char(200), c115 char(200), -c116 char(200), c117 char(200), c118 char(200), c119 char(200), c120 char(200), -c121 char(200), c122 char(200), c123 char(200), c124 char(200), c125 char(200), -c126 char(200), c127 char(200), c128 char(200), c129 char(200), c130 char(200), -c131 char(200), c132 char(200), c133 char(200), c134 char(200), c135 char(200), -c136 char(200), c137 char(200), c138 char(200), c139 char(200), c140 char(200), -c141 char(200), c142 char(200), c143 char(200), c144 char(200), c145 char(200), -c146 char(200), c147 char(200), c148 char(200), c149 char(200), c150 char(200), -c151 char(200), c152 char(200), c153 char(200), c154 char(200), c155 char(200), -c156 char(200), c157 char(200), c158 char(200), c159 char(200), c160 char(200), -c161 char(200), c162 char(200), c163 char(200), c164 char(200), c165 char(200), -c166 char(200), c167 char(200), c168 char(200), c169 char(200), c170 char(200), -c171 char(200), c172 char(200), c173 char(200), c174 char(200), c175 char(200), -c176 char(200), c177 char(200), c178 char(200), c179 char(200), c180 char(200), -c190 char(200), -c81 char(144) -) ROW_FORMAT=redundant; -ERROR 42000: Row size too large (> max_row_size). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +SELECT @@innodb_strict_mode; +@@innodb_strict_mode +1 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +ERROR 42000: Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +show warnings; +Level Code Message +Error 1118 Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +Warning 1030 Got error 139 "Too big row" from storage engine InnoDB CREATE TABLE t1 ( c01 char(200), c02 char(200), c03 char(200), c04 char(200), c05 char(200), c06 char(200), c07 char(200), c08 char(200), c09 char(200), c10 char(200), @@ -317,6 +263,7 @@ vc=@c,wc=@c,xc=@c,yc=@c,zc=@c; COMMIT; CREATE INDEX tg1f2 ON t1 (ia(767),ja(767)); +BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d,f=@d,g=@d,h=@d,i=@d,j=@d, k=@d,l=@d,m=@d,n=@d,o=@d,p=@d,q=@d,r=@d,s=@d,t=@d,u=@d, v=@d,w=@d,x=@d,y=@d,z=@d, @@ -329,7 +276,7 @@ ac=@d,bc=@d,cc=@d,dc=@d,ec=@d,fc=@d,gc=@d,hc=@d,ic=@d,jc=@d, kc=@d,lc=@d,mc=@d,nc=@d,oc=@d,pc=@d,qc=@d,rc=@d,sc=@d,tc=@d,uc=@d, vc=@d,wc=@d,xc=@d,yc=@d,zc=@d; -ERROR HY000: Undo log record is too big. +ROLLBACK; BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d; UPDATE t1 SET f=@d,g=@d,h=@d,i=@d,j=@d; @@ -379,7 +326,7 @@ CREATE INDEX xte1e5 ON t1 (ec(767),fc(767)); UPDATE t1 SET t=@e; CREATE INDEX xt5k1f6 ON t1 (lc(767),mc(767)); -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 32702. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 16383. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-alter-autoinc.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-alter-autoinc.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-alter-autoinc.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-alter-autoinc.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,174 @@ +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES(347),(33101),(123),(45),(6); +SET @old_sql_mode = @@sql_mode; +SET @@sql_mode = 'STRICT_TRANS_TABLES'; +ALTER TABLE t1 ADD PRIMARY KEY(a); +SET @@sql_mode = @old_sql_mode; +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, +LOCK=NONE; +ERROR 0A000: LOCK=NONE is not supported. Reason: Adding an auto-increment column requires a lock. Try LOCK=SHARED. +ALTER TABLE t1 ADD id INT AUTO_INCREMENT; +ERROR 42000: Incorrect table definition; there can be only one auto column and it must be defined as a key +ALTER TABLE t1 ADD id INT AUTO_INCREMENT, ADD INDEX(a, id); +ERROR 42000: Incorrect table definition; there can be only one auto column and it must be defined as a key +ALTER TABLE t1 ADD id INT NOT NULL, ADD INDEX(id, a); +SELECT * FROM t1; +a id +6 0 +45 0 +123 0 +347 0 +33101 0 +SET AUTO_INCREMENT_INCREMENT = 5, AUTO_INCREMENT_OFFSET = 30; +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, +DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=COPY; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=latin1 +BEGIN; +INSERT INTO t1 VALUES(7,0); +SELECT * FROM t1; +a id +6 45 +45 50 +123 55 +347 60 +33101 65 +7 70 +ROLLBACK; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=latin1 +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, +DROP COLUMN id, AUTO_INCREMENT = 42, LOCK=NONE; +ERROR 0A000: LOCK=NONE is not supported. Reason: Adding an auto-increment column requires a lock. Try LOCK=SHARED. +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, +DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=INPLACE; +SELECT * FROM t1; +a id +6 45 +45 50 +123 55 +347 60 +33101 65 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=latin1 +INSERT INTO t1 SET a=123; +INSERT INTO t1 VALUES(-123,-45); +ALTER TABLE t1 AUTO_INCREMENT = 75; +INSERT INTO t1 SET a=123; +SELECT * FROM t1; +a id +-123 -45 +6 45 +45 50 +123 55 +347 60 +33101 65 +123 70 +123 75 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES(347),(33101),(123),(45),(6); +ALTER TABLE t1 ADD PRIMARY KEY(a); +ALTER TABLE t1 ADD id INT NOT NULL, ADD INDEX(id, a); +SELECT * FROM t1; +a id +6 0 +45 0 +123 0 +347 0 +33101 0 +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, +DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=latin1 +BEGIN; +INSERT INTO t1 VALUES(7,0); +SELECT * FROM t1; +a id +6 45 +45 50 +123 55 +347 60 +33101 65 +7 70 +ROLLBACK; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=latin1 +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, +DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=COPY; +SELECT * FROM t1; +a id +6 45 +45 50 +123 55 +347 60 +33101 65 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=latin1 +INSERT INTO t1 SET a=123; +INSERT INTO t1 VALUES(-123,-45); +ALTER TABLE t1 AUTO_INCREMENT = 75; +INSERT INTO t1 SET a=123; +SELECT * FROM t1; +a id +-123 -45 +6 45 +45 50 +123 55 +347 60 +33101 65 +123 75 +123 80 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `id` (`id`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=85 DEFAULT CHARSET=latin1 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-alter.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-alter.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-alter.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-alter.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,861 @@ +SET NAMES utf8; +CREATE TABLE t1 ( +c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, +INDEX(c2)) +ENGINE=InnoDB; +INSERT INTO t1 SET c1=1; +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME LIKE 'test/t%'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +CREATE TABLE t1p LIKE t1; +CREATE TABLE t1c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3), +CONSTRAINT t1c2 FOREIGN KEY (c2) REFERENCES t1(c2), +CONSTRAINT t1c3 FOREIGN KEY (c3) REFERENCES t1p(c2)) +ENGINE=InnoDB; +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i +WHERE FOR_NAME LIKE 'test/t%'; +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c2 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT '1', + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1 ALTER c2 DROP DEFAULT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11), + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c2 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE c2 c2 INT AFTER c1; +ALTER TABLE t1 CHANGE c1 c1 INT FIRST; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c2 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE C2 c3 INT; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE c3 C INT; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +C 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 C +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 C 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE C Cöŀumň_TWO INT; +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 Cöŀumň_TWO 0 +test/t1c3 c3 c2 0 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +Cöŀumň_TWO 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 Cöŀumň_TWO +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 Cöŀumň_TWO 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE cöĿǖmň_two c3 INT; +ERROR 42S22: Unknown column 'cöĿǖmň_two' in 't1' +ALTER TABLE t1 CHANGE cÖĿUMŇ_two c3 INT, RENAME TO t3; +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; +NAME NAME +test/t1 test/t3 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `c1` int(11) NOT NULL, + `c3` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c3`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + KEY `c3` (`c3`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t3` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t3 CHANGE c3 +`12345678901234567890123456789012345678901234567890123456789012345` INT; +ERROR 42000: Identifier name '12345678901234567890123456789012345678901234567890123456789012345' is too long +ALTER TABLE t3 CHANGE c3 +`1234567890123456789012345678901234567890123456789012345678901234` INT; +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `c1` int(11) NOT NULL, + `1234567890123456789012345678901234567890123456789012345678901234` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`1234567890123456789012345678901234567890123456789012345678901234`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿偀` INT; +ERROR 42000: Identifier name '倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠' is too long +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿ä` INT; +ERROR 42000: Identifier name '倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠' is too long +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾ä` INT; +ALTER TABLE t3 CHANGE +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾Ä` +c3 INT; +ALTER TABLE t3 CHANGE c3 𐌀𐌁𐌂𐌃𐌄𐌅𐌆𐌇𐌈𐌉𐌊𐌋𐌌𐌍𐌎𐌏𐌐𐌑𐌒𐌓𐌔𐌕𐌖𐌗𐌘𐌙𐌚𐌛𐌜 INT; +ERROR HY000: Invalid utf8 character string: '\xF0\x90\x8C\x80\xF0\x90\x8C\x81\xF0\x90\x8C\x82\xF0\x90\x8C\x83' +ALTER TABLE t3 CHANGE c3 😲 INT; +ERROR HY000: Invalid utf8 character string: '\xF0\x9F\x98\xB2' +ALTER TABLE t3 RENAME TO t2; +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; +NAME NAME +test/t1 test/t2 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c1` int(11) NOT NULL, + `c3` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c3`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +RENAME TABLE t2 TO t1; +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; +NAME NAME +test/t1 test/t1 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 DROP INDEX c2; +ERROR HY000: Cannot drop index 'c2': needed in a foreign key constraint +ALTER TABLE t1 DROP INDEX c4; +ERROR 42000: Can't DROP 'c4'; check that column/key exists +ALTER TABLE t1c DROP FOREIGN KEY c2; +ERROR 42000: Can't DROP 'c2'; check that column/key exists +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2; +ERROR 42000: Can't DROP 'c2'; check that column/key exists +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2, DROP INDEX c2; +ERROR 42000: Can't DROP 'c2'; check that column/key exists +ALTER TABLE t1c DROP INDEX c2; +ERROR HY000: Cannot drop index 'c2': needed in a foreign key constraint +ALTER TABLE t1c DROP FOREIGN KEY ẗ1C2; +ERROR 42000: Can't DROP 'ẗ1C2'; check that column/key exists +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + KEY `c3` (`c3`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SET foreign_key_checks=0; +DROP TABLE t1p; +SET foreign_key_checks=1; +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + KEY `c3` (`c3`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +CREATE TABLE t1p (c1 INT PRIMARY KEY, c2 INT, INDEX(c2)) ENGINE=InnoDB; +ALTER TABLE t1c DROP INDEX C2, DROP INDEX C3; +ERROR HY000: Cannot drop index 'c2': needed in a foreign key constraint +ALTER TABLE t1c DROP INDEX C3; +ERROR HY000: Cannot drop index 'c3': needed in a foreign key constraint +SET foreign_key_checks=0; +ALTER TABLE t1c DROP INDEX C3; +SET foreign_key_checks=1; +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1c DROP FOREIGN KEY t1C3; +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +ALTER TABLE t1c DROP INDEX c2, DROP FOREIGN KEY t1C2; +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +ALTER TABLE t1 DROP INDEX c2, CHANGE c3 c2 INT; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +CREATE TABLE t1o LIKE t1; +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=NONE; +ERROR 0A000: LOCK=NONE is not supported. Reason: Fulltext index creation requires a lock. Try LOCK=SHARED. +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=SHARED; +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +SHOW CREATE TABLE tt; +Table Create Table +tt CREATE TABLE `tt` ( + `pk` int(11) NOT NULL, + `c2` int(11) DEFAULT '42', + `ct` text, + PRIMARY KEY (`pk`), + FULLTEXT KEY `ct` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=COPY; +ERROR 42000: Incorrect column name 'dB_row_Id' +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=INPLACE; +ERROR 42000: Incorrect column name 'DB_ROW_ID' +ALTER TABLE t1o CHANGE c1 DB_TRX_ID INT; +ERROR 42000: Incorrect column name 'DB_TRX_ID' +ALTER TABLE t1o CHANGE c1 db_roll_ptr INT; +ERROR 42000: Incorrect column name 'DB_ROLL_PTR' +ALTER TABLE t1o ADD COLUMN DB_TRX_ID INT; +ERROR 42000: Incorrect column name 'DB_TRX_ID' +ALTER TABLE t1o ADD COLUMN db_roll_ptr INT; +ERROR 42000: Incorrect column name 'db_roll_ptr' +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN FTS_DOC_ID BIGINT; +ERROR HY000: Column 'FTS_DOC_ID' is of wrong type for an InnoDB FULLTEXT index +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED; +ERROR HY000: Column 'FTS_DOC_ID' is of wrong type for an InnoDB FULLTEXT index +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL; +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN FTS_DOC_ID INT; +ERROR 42S21: Duplicate column name 'FTS_DOC_ID' +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot drop or rename FTS_DOC_ID. Try ALGORITHM=COPY. +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID, DROP INDEX ct, ALGORITHM=INPLACE; +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN cu TEXT; +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try ALGORITHM=COPY. +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try ALGORITHM=COPY. +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), +ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try ALGORITHM=COPY. +ALTER TABLE t1o ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try ALGORITHM=COPY. +ALTER TABLE t1o ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL; +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot drop or rename FTS_DOC_ID. Try ALGORITHM=COPY. +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID; +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=COPY; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=INPLACE; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_Doc_ID INT, +ALGORITHM=INPLACE; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +CREATE TABLE t1n LIKE t1o; +ALTER TABLE t1n ADD FULLTEXT INDEX(ct); +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=INPLACE; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=COPY; +ERROR 42000: Incorrect column name 'Fts_DOC_ID' +ALTER TABLE t1n CHANGE FTS_DOC_ID c11 INT, ALGORITHM=INPLACE; +ERROR 42S22: Unknown column 'FTS_DOC_ID' in 't1n' +ALTER TABLE t1n CHANGE c1 FTS_DOC_ïD INT, ALGORITHM=INPLACE; +ALTER TABLE t1n CHANGE FTS_DOC_ÏD c1 INT, ALGORITHM=INPLACE; +ALTER TABLE t1n CHANGE c1 c2 INT, CHANGE c2 ct INT, CHANGE ct c1 TEXT, +ALGORITHM=INPLACE; +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c2` int(11) NOT NULL, + `ct` int(11) DEFAULT NULL, + `c1` text, + `cu` text, + PRIMARY KEY (`c2`), + FULLTEXT KEY `ct` (`c1`), + FULLTEXT KEY `ct_2` (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1n CHANGE c2 c1 INT, CHANGE ct c2 INT, CHANGE c1 ct TEXT, +ALGORITHM=COPY; +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `ct` text, + `cu` text, + PRIMARY KEY (`c1`), + FULLTEXT KEY `ct` (`ct`), + FULLTEXT KEY `ct_2` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=INPLACE; +ERROR 42000: Key column 'c2' doesn't exist in table +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=COPY; +ERROR 42000: Key column 'c2' doesn't exist in table +ALTER TABLE t1n ADD INDEX(c4), CHANGE c2 c4 INT, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c1` int(11) NOT NULL, + `c4` int(11) DEFAULT NULL, + `ct` text, + `cu` text, + PRIMARY KEY (`c1`), + KEY `c4` (`c4`), + FULLTEXT KEY `ct` (`ct`), + FULLTEXT KEY `ct_2` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1n DROP INDEX c4; +ALTER TABLE t1n CHANGE c4 c1 INT, ADD INDEX(c1), ALGORITHM=INPLACE; +ERROR 42S21: Duplicate column name 'c1' +ALTER TABLE t1n CHANGE c4 c11 INT, ADD INDEX(c11), ALGORITHM=INPLACE; +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c1` int(11) NOT NULL, + `c11` int(11) DEFAULT NULL, + `ct` text, + `cu` text, + PRIMARY KEY (`c1`), + KEY `c11` (`c11`), + FULLTEXT KEY `ct` (`ct`), + FULLTEXT KEY `ct_2` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1n; +ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL, DROP INDEX ct, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL, DROP INDEX ct; +ALTER TABLE t1o CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ALGORITHM=INPLACE; +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot drop or rename FTS_DOC_ID. Try ALGORITHM=COPY. +SELECT sc.pos FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t1o' AND sc.NAME='FTS_DOC_ID'; +pos +0 +SHOW CREATE TABLE t1o; +Table Create Table +t1o CREATE TABLE `t1o` ( + `FTS_DOC_ID` bigint(20) unsigned NOT NULL, + `c2` int(11) DEFAULT NULL, + `ct` text, + `cu` text, + PRIMARY KEY (`FTS_DOC_ID`), + FULLTEXT KEY `ct` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +DROP INDEX ct, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1o; +Table Create Table +t1o CREATE TABLE `t1o` ( + `foo_id` bigint(20) unsigned NOT NULL, + `c2` int(11) DEFAULT NULL, + `ct` text, + `cu` text, + PRIMARY KEY (`foo_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1c, t1p, sys_tables, sys_indexes, sys_foreign; +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME='test/t1o'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i WHERE FOR_NAME='test/t1o'; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +foo_id 0 6 1800 8 +c2 1 6 1027 4 +ct 2 5 524540 10 +cu 3 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 foo_id +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +ALTER TABLE t1o ADD UNIQUE INDEX FTS_DOC_ID_INDEX(FTS_DOC_ID), +ADD FULLTEXT INDEX(ct), +CHANGE foo_id FTS_DOC_ID BIGINT UNSIGNED NOT NULL; +ALTER TABLE t1o DROP INDEX ct, DROP INDEX FTS_DOC_ID_INDEX, +CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL; +ALTER TABLE t1o ADD UNIQUE INDEX FTS_DOC_ID_INDEX(foo_id); +ALTER TABLE t1o CHANGE foo_id FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ADD FULLTEXT INDEX(ct); +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot drop or rename FTS_DOC_ID. Try ALGORITHM=COPY. +DROP TABLE sys_indexes; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +FTS_DOC_ID 0 6 1800 8 +c2 1 6 1027 4 +ct 2 5 524540 10 +cu 3 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 FTS_DOC_ID +FTS_DOC_ID_INDEX 0 FTS_DOC_ID +ct 0 ct +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +DROP TABLE tt, t1o, sys_tables, sys_indexes, sys_foreign; +CREATE TABLE t (t TEXT, FULLTEXT(t)) ENGINE=InnoDB; +DROP INDEX t ON t; +SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name +FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE name LIKE '%FTS_%' ORDER BY 1, 2; +prefix name +FTS_0 test/FTS_AUX_BEING_DELETED +FTS_0 test/FTS_AUX_BEING_DELETED_CACHE +FTS_0 test/FTS_AUX_CONFIG +FTS_0 test/FTS_AUX_DELETED +FTS_0 test/FTS_AUX_DELETED_CACHE +SELECT sc.pos, sc.NAME FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t'; +pos NAME +0 t +1 FTS_DOC_ID +ALTER TABLE t ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE; +SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name +FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE name LIKE '%FTS_%' ORDER BY 1, 2; +prefix name +ALTER TABLE t ADD FULLTEXT INDEX(t); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SELECT sc.pos, sc.NAME FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t'; +pos NAME +0 t +1 FTS_DOC_ID +DROP TABLE t; +# +# Bug #19465984 INNODB DATA DICTIONARY IS NOT UPDATED WHILE +# RENAMING THE COLUMN +# +CREATE TABLE t1(c1 INT NOT NULL, PRIMARY KEY(c1))ENGINE=INNODB; +CREATE TABLE t2(c2 INT NOT NULL, FOREIGN KEY(c2) REFERENCES t1(c1))ENGINE=INNODB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c2` int(11) NOT NULL, + KEY `c2` (`c2`), + CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1 CHANGE COLUMN c1 C1 INT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `C1` int(11) NOT NULL, + PRIMARY KEY (`C1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c2` int(11) NOT NULL, + KEY `c2` (`c2`), + CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `C1` int(11) NOT NULL, + PRIMARY KEY (`C1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c2` int(11) NOT NULL, + KEY `c2` (`c2`), + CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c2`) REFERENCES `t1` (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t2, t1; +# +# BUG 20029625 - HANDLE_FATAL_SIGNAL (SIG=11) IN +# DICT_MEM_TABLE_COL_RENAME_LOW +# +CREATE TABLE parent(a INT, b INT, KEY(a, b)) ENGINE = InnoDB; +CREATE TABLE t1(a1 INT, a2 INT) ENGINE = InnoDB; +set foreign_key_checks=0; +ALTER TABLE t1 ADD CONSTRAINT fk_a FOREIGN KEY(a1, a2) REFERENCES parent(a, b) ON DELETE SET NULL ON UPDATE CASCADE; +ALTER TABLE t1 CHANGE a2 a3 INT,ADD CONSTRAINT fk_1 FOREIGN KEY(a1, a3) REFERENCES parent(a, b) ON DELETE SET NULL ON UPDATE CASCADE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a1` int(11) DEFAULT NULL, + `a3` int(11) DEFAULT NULL, + KEY `fk_1` (`a1`,`a3`), + CONSTRAINT `fk_1` FOREIGN KEY (`a1`, `a3`) REFERENCES `parent` (`a`, `b`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_a` FOREIGN KEY (`a1`, `a3`) REFERENCES `parent` (`a`, `b`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 CHANGE a3 a4 INT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a1` int(11) DEFAULT NULL, + `a4` int(11) DEFAULT NULL, + KEY `fk_1` (`a1`,`a4`), + CONSTRAINT `fk_1` FOREIGN KEY (`a1`, `a4`) REFERENCES `parent` (`a`, `b`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_a` FOREIGN KEY (`a1`, `a4`) REFERENCES `parent` (`a`, `b`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE parent CHANGE b c INT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a1` int(11) DEFAULT NULL, + `a4` int(11) DEFAULT NULL, + KEY `fk_1` (`a1`,`a4`), + CONSTRAINT `fk_1` FOREIGN KEY (`a1`, `a4`) REFERENCES `parent` (`a`, `c`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_a` FOREIGN KEY (`a1`, `a4`) REFERENCES `parent` (`a`, `c`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1, parent; +# +#BUG#21514135 SCHEMA MISMATCH ERROR WHEN IMPORTING TABLESPACE AFTER +#DROPPING AN INDEX +# +CREATE DATABASE source_db; +CREATE DATABASE dest_db; +CREATE TABLE source_db.t1 ( +id int(11) NOT NULL, +age int(11) DEFAULT NULL, +name varchar(20), +PRIMARY KEY (id), +KEY index1 (age) +) ENGINE=InnoDB; +ALTER TABLE source_db.t1 DROP INDEX index1, ADD INDEX index2(name, age), algorithm=inplace; +FLUSH TABLES source_db.t1 FOR EXPORT; +UNLOCK TABLES; +USE dest_db; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `index2` (`name`,`age`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +ALTER TABLE dest_db.t1 DISCARD TABLESPACE; +ALTER TABLE dest_db.t1 IMPORT TABLESPACE; +CHECK TABLE dest_db.t1; +Table Op Msg_type Msg_text +dest_db.t1 check status OK +SHOW CREATE TABLE dest_db.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `index2` (`name`,`age`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * FROM dest_db.t1; +id age name +DROP TABLE dest_db.t1; +ALTER TABLE source_db.t1 DROP INDEX index2, algorithm=inplace; +FLUSH TABLES source_db.t1 FOR EXPORT; +UNLOCK TABLES; +USE dest_db; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +ALTER TABLE dest_db.t1 DISCARD TABLESPACE; +ALTER TABLE dest_db.t1 IMPORT TABLESPACE; +CHECK TABLE dest_db.t1; +Table Op Msg_type Msg_text +dest_db.t1 check status OK +SHOW CREATE TABLE dest_db.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `age` int(11) DEFAULT NULL, + `name` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * FROM dest_db.t1; +id age name +DROP TABLE dest_db.t1; +DROP TABLE source_db.t1; +DROP DATABASE source_db; +DROP DATABASE dest_db; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-alter-table.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-alter-table.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-alter-table.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-alter-table.result 2017-12-21 15:48:47.000000000 +0000 @@ -185,3 +185,44 @@ KEY `org_id` (`org_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 DROP TABLE ticket; +CREATE TABLE t ( +id bigint(20) unsigned NOT NULL auto_increment, +d date NOT NULL, +a bigint(20) unsigned NOT NULL, +b smallint(5) unsigned DEFAULT NULL, +PRIMARY KEY (id,d) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs STATS_SAMPLE_PAGES=2 +PARTITION BY RANGE COLUMNS(d) +( +PARTITION p20170914 VALUES LESS THAN ('2017-09-15') ENGINE = InnoDB, +PARTITION p99991231 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB); +insert into t(d,a,b) values ('2017-09-15',rand()*10000,rand()*10); +insert into t(d,a,b) values ('2017-09-15',rand()*10000,rand()*10); +replace into t(d,a,b) select '2017-09-15',rand()*10000,rand()*10 from t t1, t t2, t t3, t t4; +select count(*) from t where d ='2017-09-15'; +count(*) +18 +ALTER TABLE t CHANGE b c smallint(5) unsigned , ADD KEY idx_d_a (d, a); +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `d` date NOT NULL, + `a` bigint(20) unsigned NOT NULL, + `c` smallint(5) unsigned DEFAULT NULL, + PRIMARY KEY (`id`,`d`), + KEY `idx_d_a` (`d`,`a`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs STATS_SAMPLE_PAGES=2 +/*!50500 PARTITION BY RANGE COLUMNS(d) +(PARTITION p20170914 VALUES LESS THAN ('2017-09-15') ENGINE = InnoDB, + PARTITION p99991231 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */ +analyze table t; +Table Op Msg_type Msg_text +test.t analyze status OK +select count(*) from t where d ='2017-09-15'; +count(*) +18 +select count(*) from t force index(primary) where d ='2017-09-15'; +count(*) +18 +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-autoinc.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-autoinc.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-autoinc.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-autoinc.result 2017-12-21 15:48:47.000000000 +0000 @@ -1348,3 +1348,21 @@ KEY `i` (`i`) ) ENGINE=InnoDB AUTO_INCREMENT=401 DEFAULT CHARSET=latin1 DROP TABLE t; +# +# MDEV-14008 Assertion failing: `!is_set() || (m_status == DA_OK_BULK && is_bulk_op()) +# +SET sql_mode=STRICT_ALL_TABLES; +CREATE TABLE t1 ( +c1 DOUBLE NOT NULL PRIMARY KEY AUTO_INCREMENT +) ENGINE=InnoDB AUTO_INCREMENT=10000000000000000000; +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +c1 +1e19 +DROP TABLE t1; +CREATE TABLE t1 (a DOUBLE PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB; +INSERT INTO t1 VALUES (-1); +SELECT * FROM t1; +a +-1 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-enlarge-blob.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-enlarge-blob.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-enlarge-blob.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-enlarge-blob.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,18 @@ +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=REDUNDANT; +SHOW WARNINGS; +Level Code Message +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; +UPDATE t1 SET a=CONCAT(a, RAND(), a); +UPDATE t1 SET a=CONCAT(a, RAND(), a); +SELECT * from t1; +DROP TABLE t1; +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=DYNAMIC; +SHOW WARNINGS; +Level Code Message +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; +UPDATE t1 SET a=CONCAT(a, RAND(), a); +UPDATE t1 SET a=CONCAT(a, RAND(), a); +SELECT * from t1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-get-fk.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-get-fk.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-get-fk.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-get-fk.result 2017-12-21 15:48:47.000000000 +0000 @@ -40,6 +40,9 @@ CONSTRAINT `fk_crewRoleAssigned_crewId` FOREIGN KEY (`crew_id`) REFERENCES `crew` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_crewRoleAssigned_pilotId` FOREIGN KEY (`crew_id`) REFERENCES `pilot` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='This is a comment about tables' +SET GLOBAL innodb_buffer_pool_load_now = ON; +SET GLOBAL innodb_buffer_pool_dump_now = ON; +SET GLOBAL innodb_buffer_pool_load_abort = ON; ALTER TABLE `repro`.`crew_role_assigned` COMMENT = "This is a new comment about tables"; SHOW CREATE TABLE `repro`.`crew_role_assigned`; Table Create Table diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_gis.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_gis.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_gis.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_gis.result 2017-12-21 15:48:47.000000000 +0000 @@ -326,8 +326,8 @@ 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon ORDER by fid; fid AsText(Centroid(g)) -117 POINT(55.58852775304245 17.426536064113982) -118 POINT(55.58852775304245 17.426536064113982) +117 POINT(57.98031067576927 17.854754130800433) +118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon ORDER by fid; fid Area(g) diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-debug.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-debug.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-debug.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-debug.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,91 @@ +set global innodb_file_per_table=on; +set global innodb_file_format='Barracuda'; +CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1)) Engine=InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5); +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG='+d,ib_build_indexes_too_many_concurrent_trxs, ib_rename_indexes_too_many_concurrent_trxs, ib_drop_index_too_many_concurrent_trxs'; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +ERROR HY000: Too many active concurrent transactions +SET DEBUG_DBUG = @saved_debug_dbug; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE bug13861218 (c1 INT NOT NULL, c2 INT NOT NULL, INDEX(c2)) +ENGINE=InnoDB; +INSERT INTO bug13861218 VALUES (8, 0), (4, 0), (0, 0); +SET DEBUG_DBUG = '+d,ib_row_merge_buf_add_two'; +CREATE UNIQUE INDEX ui ON bug13861218(c1); +SET DEBUG_DBUG = @saved_debug_dbug; +DROP TABLE bug13861218; +CREATE TABLE bug13861218 (c1 INT NOT NULL, c2 INT UNIQUE) ENGINE=InnoDB; +INSERT INTO bug13861218 VALUES (8, NULL), (4, NULL), (0, NULL); +SET DEBUG_DBUG = '+d,ib_row_merge_buf_add_two'; +CREATE UNIQUE INDEX ui ON bug13861218(c1); +SET DEBUG_DBUG = @saved_debug_dbug; +DROP TABLE bug13861218; +set global innodb_file_per_table=1; +set global innodb_file_format=Antelope; +set global innodb_file_format_max=Antelope; +# +# Bug #21762319 ADDING INDEXES ON EMPTY TABLE IS SLOW +# WITH LARGE INNODB_SORT_BUFFER_SIZE. +call mtr.add_suppression("InnoDB: Cannot create temporary merge file"); +create table t480(a serial)engine=innodb; +insert into t480 +values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(), +(),(),(),(),(),(),(),(); +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +create table t1(f1 int auto_increment not null, +f2 char(200) not null, f3 char(200) not null, +f4 char(200) not null,primary key(f1))engine=innodb; +insert into t1 select NULL,'aaa','bbb','ccc' from t480; +insert into t1 select NULL,'aaaa','bbbb','cccc' from t480; +insert into t1 select NULL,'aaaaa','bbbbb','ccccc' from t480; +insert into t1 select NULL,'aaaaaa','bbbbbb','cccccc' from t480; +insert into t1 select NULL,'aaaaaaa','bbbbbbb','ccccccc' from t480; +insert into t1 select NULL,'aaaaaaaa','bbbbbbbb','cccccccc' from t480; +select count(*) from t1; +count(*) +2880 +SET DEBUG_DBUG = '+d,innobase_tmpfile_creation_failure'; +alter table t1 force, algorithm=inplace; +ERROR HY000: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space +SET DEBUG_DBUG = @saved_debug_dbug; +drop table t1, t480; +# +# MDEV-12827 Assertion failure when reporting duplicate key error +# in online table rebuild +# +CREATE TABLE t1 (j INT UNIQUE, i INT UNIQUE) ENGINE=InnoDB; +SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL built WAIT_FOR log'; +ALTER TABLE t1 DROP j, FORCE; +SET DEBUG_SYNC='now WAIT_FOR built'; +INSERT INTO t1 (i) VALUES (0),(0); +ERROR 23000: Duplicate entry '0' for key 'i' +SET DEBUG_SYNC='now SIGNAL log'; +ERROR 23000: Duplicate entry '0' for key 'i' +SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL built2 WAIT_FOR log2'; +ALTER TABLE t1 DROP j, FORCE; +SET DEBUG_SYNC='now WAIT_FOR built2'; +INSERT INTO t1 (i) VALUES (0),(1); +UPDATE t1 SET i=0; +ERROR 23000: Duplicate entry '0' for key 'i' +SET DEBUG_SYNC='now SIGNAL log2'; +ERROR 23000: Duplicate entry '0' for key 'i' +SET DEBUG_SYNC='RESET'; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online,crypt.rdiff mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online,crypt.rdiff --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online,crypt.rdiff 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online,crypt.rdiff 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,20 @@ +--- innodb-index-online.result ++++ innodb-index-online,crypt.reject +@@ -260,7 +260,7 @@ + @merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0, + @rowlog_encrypt_1>@rowlog_encrypt_0; + sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0 +-0 0 0 0 ++0 1 1 1 + SET DEBUG_SYNC = 'now SIGNAL dml2_done'; + ERROR HY000: Creating index 'c2e' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again. + SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +@@ -364,7 +364,7 @@ + @rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted, + @rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted; + sort_encrypted sort_decrypted log_encrypted log_decrypted +-0 0 0 0 ++1 1 1 1 + SELECT COUNT(c22f) FROM t1; + COUNT(c22f) + 320 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online-delete.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online-delete.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online-delete.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online-delete.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,13 @@ +CREATE TABLE t (a INT PRIMARY KEY, b INT NOT NULL) ENGINE=InnoDB; +INSERT INTO t VALUES(1,2),(2,3); +SET DEBUG_SYNC='alter_table_inplace_after_lock_downgrade SIGNAL do WAIT_FOR m'; +SET DEBUG_SYNC='innodb_after_inplace_alter_table SIGNAL scanned WAIT_FOR done'; +CREATE INDEX tb ON t(b); +SET DEBUG_SYNC='now WAIT_FOR do'; +SET DEBUG_SYNC='row_update_for_mysql_error SIGNAL m WAIT_FOR scanned'; +UPDATE t SET a=2 WHERE a=1; +ERROR 23000: Duplicate entry '2' for key 'PRIMARY' +call mtr.add_suppression('InnoDB: record in index .*tb was not found on rollback, trying to insert'); +SET DEBUG_SYNC='now SIGNAL done'; +SET DEBUG_SYNC='RESET'; +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online-fk.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online-fk.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online-fk.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online-fk.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,604 @@ +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,3); +CREATE INDEX tb ON parent(b); +INSERT INTO parent VALUES(10,20),(20,30); +CREATE TABLE child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); +INSERT INTO child VALUES(10,20); +ALTER TABLE child ADD FOREIGN KEY(a2) REFERENCES parent(b), +ALGORITHM = INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Adding foreign keys needs foreign_key_checks=OFF. Try ALGORITHM=COPY. +SET foreign_key_checks = 0; +ALTER TABLE child ADD CONSTRAINT fk_1 FOREIGN KEY (a2) +REFERENCES parent(b) ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +ALTER TABLE child ADD CONSTRAINT fk_1 FOREIGN KEY (a2) +REFERENCES parent(b) ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Duplicate foreign key constraint name 'test/fk_1' +SET foreign_key_checks = 1; +INSERT INTO child VALUES(1,2),(2,3); +INSERT INTO child VALUES(4,4); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`child`, CONSTRAINT `fk_1` FOREIGN KEY (`a2`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE) +SELECT * FROM parent; +a b +1 2 +2 3 +10 20 +20 30 +SET foreign_key_checks = 0; +ALTER TABLE child ADD CONSTRAINT fk_20 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'fk_20' in the referenced table 'parent' +SHOW WARNINGS; +Level Code Message +Error 1822 Failed to add the foreign key constaint. Missing index for constraint 'fk_20' in the referenced table 'parent' +SHOW ERRORS; +Level Code Message +Error 1822 Failed to add the foreign key constaint. Missing index for constraint 'fk_20' in the referenced table 'parent' +CREATE INDEX idx1 on parent(a, b); +ALTER TABLE child ADD CONSTRAINT fk_10 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ALTER TABLE child ADD CONSTRAINT fk_2 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, ADD INDEX idx1(a1,a2), +ALGORITHM = INPLACE; +ALTER TABLE child ADD CONSTRAINT fk_3 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE; +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +test/fk_10 test/child test/parent 2 5 +test/fk_2 test/child test/parent 2 5 +test/fk_3 test/child test/parent 2 5 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +test/fk_10 a1 a 0 +test/fk_10 a2 b 1 +test/fk_2 a1 a 0 +test/fk_2 a2 b 1 +test/fk_3 a1 a 0 +test/fk_3 a2 b 1 +SET foreign_key_checks = 1; +INSERT INTO child VALUES(5,4); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`child`, CONSTRAINT `fk_1` FOREIGN KEY (`a2`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE) +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1` int(11) NOT NULL, + `a2` int(11) DEFAULT NULL, + PRIMARY KEY (`a1`), + KEY `tb` (`a2`), + KEY `idx1` (`a1`,`a2`), + CONSTRAINT `fk_1` FOREIGN KEY (`a2`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_10` FOREIGN KEY (`a1`, `a2`) REFERENCES `parent` (`a`, `b`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_2` FOREIGN KEY (`a1`, `a2`) REFERENCES `parent` (`a`, `b`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_3` FOREIGN KEY (`a1`, `a2`) REFERENCES `parent` (`a`, `b`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DELETE FROM parent where a = 1; +SELECT * FROM child; +a1 a2 +1 NULL +2 3 +10 20 +SET foreign_key_checks = 0; +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG = '+d,innodb_test_open_ref_fail'; +ALTER TABLE child ADD CONSTRAINT fk_4 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SET DEBUG_DBUG = @saved_debug_dbug; +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +test/fk_10 test/child test/parent 2 5 +test/fk_2 test/child test/parent 2 5 +test/fk_3 test/child test/parent 2 5 +test/fk_4 test/child test/parent 2 5 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +test/fk_10 a1 a 0 +test/fk_10 a2 b 1 +test/fk_2 a1 a 0 +test/fk_2 a2 b 1 +test/fk_3 a1 a 0 +test/fk_3 a2 b 1 +test/fk_4 a1 a 0 +test/fk_4 a2 b 1 +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +name name +test/child a1 +test/child a2 +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; +NAME +SYS_DATAFILES +SYS_FOREIGN +SYS_FOREIGN_COLS +SYS_TABLESPACES +mysql/innodb_index_stats +mysql/innodb_table_stats +test/child +test/parent +INSERT INTO child VALUES(5,4); +SET foreign_key_checks = 1; +INSERT INTO child VALUES(6,5); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`child`, CONSTRAINT `fk_1` FOREIGN KEY (`a2`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE) +SET foreign_key_checks = 0; +CREATE TABLE `#parent` (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +CREATE INDEX tb ON `#parent`(a, b); +CREATE TABLE `#child` (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; +CREATE INDEX tb ON `#child`(a1, a2); +SET DEBUG_DBUG = '+d,innodb_test_no_foreign_idx'; +ALTER TABLE `#child` ADD CONSTRAINT fk_40 FOREIGN KEY (a1, a2) +REFERENCES `#parent`(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'fk_40' in the foreign table '#child' +SET DEBUG_DBUG = @saved_debug_dbug; +SHOW ERRORS; +Level Code Message +Error 1821 Failed to add the foreign key constaint. Missing index for constraint 'fk_40' in the foreign table '#child' +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +test/fk_10 test/child test/parent 2 5 +test/fk_2 test/child test/parent 2 5 +test/fk_3 test/child test/parent 2 5 +test/fk_4 test/child test/parent 2 5 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +test/fk_10 a1 a 0 +test/fk_10 a2 b 1 +test/fk_2 a1 a 0 +test/fk_2 a2 b 1 +test/fk_3 a1 a 0 +test/fk_3 a2 b 1 +test/fk_4 a1 a 0 +test/fk_4 a2 b 1 +SET DEBUG_DBUG = '+d,innodb_test_no_reference_idx'; +ALTER TABLE child ADD CONSTRAINT fk_42 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'fk_42' in the referenced table 'parent' +SET DEBUG_DBUG = @saved_debug_dbug; +SHOW ERRORS; +Level Code Message +Error 1822 Failed to add the foreign key constaint. Missing index for constraint 'fk_42' in the referenced table 'parent' +SET DEBUG_DBUG = '+d,innodb_test_wrong_fk_option'; +ALTER TABLE child ADD CONSTRAINT fk_42 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constraint on table 'child'. Incorrect options in FOREIGN KEY constraint 'test/fk_42' +SET DEBUG_DBUG = @saved_debug_dbug; +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +test/fk_10 test/child test/parent 2 5 +test/fk_2 test/child test/parent 2 5 +test/fk_3 test/child test/parent 2 5 +test/fk_4 test/child test/parent 2 5 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +test/fk_10 a1 a 0 +test/fk_10 a2 b 1 +test/fk_2 a1 a 0 +test/fk_2 a2 b 1 +test/fk_3 a1 a 0 +test/fk_3 a2 b 1 +test/fk_4 a1 a 0 +test/fk_4 a2 b 1 +SET DEBUG_DBUG = '+d,innodb_test_cannot_add_fk_system'; +ALTER TABLE `#child` ADD CONSTRAINT fk_43 FOREIGN KEY (a1, a2) +REFERENCES `#parent`(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constraint 'test/fk_43' to system tables +SET DEBUG_DBUG = @saved_debug_dbug; +SHOW ERRORS; +Level Code Message +Error 1823 Failed to add the foreign key constraint 'test/fk_43' to system tables +DROP TABLE `#child`; +DROP TABLE `#parent`; +SET foreign_key_checks = 0; +ALTER TABLE child ADD CONSTRAINT fk_5 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ADD CONSTRAINT fk_6 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +test/fk_10 test/child test/parent 2 5 +test/fk_2 test/child test/parent 2 5 +test/fk_3 test/child test/parent 2 5 +test/fk_4 test/child test/parent 2 5 +test/fk_5 test/child test/parent 1 6 +test/fk_6 test/child test/parent 2 5 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +test/fk_10 a1 a 0 +test/fk_10 a2 b 1 +test/fk_2 a1 a 0 +test/fk_2 a2 b 1 +test/fk_3 a1 a 0 +test/fk_3 a2 b 1 +test/fk_4 a1 a 0 +test/fk_4 a2 b 1 +test/fk_5 a2 b 0 +test/fk_6 a1 a 0 +test/fk_6 a2 b 1 +DROP TABLE child; +DROP TABLE parent; +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,3); +CREATE INDEX tb ON parent(b); +INSERT INTO parent VALUES(10,20),(20,30); +CREATE TABLE child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); +INSERT INTO child VALUES(10,20); +SET foreign_key_checks = 0; +ALTER TABLE child DROP INDEX tb, ADD CONSTRAINT fk_4 FOREIGN KEY (a2) +REFERENCES parent(b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1` int(11) NOT NULL, + `a2` int(11) DEFAULT NULL, + PRIMARY KEY (`a1`), + KEY `fk_4` (`a2`), + CONSTRAINT `fk_4` FOREIGN KEY (`a2`) REFERENCES `parent` (`b`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_4 test/child test/parent 1 5 +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_4 a2 b 0 +SET foreign_key_checks = 1; +DROP TABLE child; +DROP TABLE parent; +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,3); +CREATE INDEX tb ON parent(b); +INSERT INTO parent VALUES(10,20),(20,30); +CREATE TABLE child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); +SET foreign_key_checks = 0; +ALTER TABLE child CHANGE a2 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR 42000: Key column 'a2' doesn't exist in table +ALTER TABLE child CHANGE a2 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a3) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +DROP TABLE child; +DROP TABLE parent; +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,3); +CREATE INDEX tb ON parent(b); +INSERT INTO parent VALUES(10,20),(20,30); +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); +SET foreign_key_checks = 0; +SET DEBUG_DBUG = '+d,innodb_test_cannot_add_fk_system'; +ALTER TABLE child ADD PRIMARY KEY idx (a3), CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constraint 'test/fk_1' to system tables +SET DEBUG_DBUG = @saved_debug_dbug; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +name name +test/child a1 +test/child a2 +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; +NAME +SYS_DATAFILES +SYS_FOREIGN +SYS_FOREIGN_COLS +SYS_TABLESPACES +mysql/innodb_index_stats +mysql/innodb_table_stats +test/child +test/parent +ALTER TABLE child ADD PRIMARY KEY idx (a3), CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +name name +test/child a2 +test/child a3 +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; +NAME +SYS_DATAFILES +SYS_FOREIGN +SYS_FOREIGN_COLS +SYS_TABLESPACES +mysql/innodb_index_stats +mysql/innodb_table_stats +test/child +test/parent +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a3` int(11) NOT NULL, + `a2` int(11) DEFAULT NULL, + PRIMARY KEY (`a3`), + KEY `tb` (`a2`), + CONSTRAINT `fk_1` FOREIGN KEY (`a2`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE child; +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; +ALTER TABLE child ADD PRIMARY KEY idx (a1), +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SELECT * from information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a2 b 0 +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +name name +test/child a1 +test/child a2 +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; +NAME +SYS_DATAFILES +SYS_FOREIGN +SYS_FOREIGN_COLS +SYS_TABLESPACES +mysql/innodb_index_stats +mysql/innodb_table_stats +test/child +test/parent +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1` int(11) NOT NULL, + `a2` int(11) DEFAULT NULL, + PRIMARY KEY (`a1`), + KEY `fk_1` (`a2`), + CONSTRAINT `fk_1` FOREIGN KEY (`a2`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE child; +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; +ALTER TABLE child CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a3) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SELECT * from information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_1 test/child test/parent 1 6 +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_1 a3 b 0 +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +name name +test/child a2 +test/child a3 +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; +NAME +SYS_DATAFILES +SYS_FOREIGN +SYS_FOREIGN_COLS +SYS_TABLESPACES +mysql/innodb_index_stats +mysql/innodb_table_stats +test/child +test/parent +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a3` int(11) DEFAULT NULL, + `a2` int(11) DEFAULT NULL, + KEY `fk_1` (`a3`), + CONSTRAINT `fk_1` FOREIGN KEY (`a3`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE child; +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; +ALTER TABLE child ADD PRIMARY KEY idx (a3), CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a3) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constraint on table 'child'. Incorrect options in FOREIGN KEY constraint 'test/fk_1' +DROP TABLE parent; +DROP TABLE child; +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL, c INT) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2,3),(2,3,4); +CREATE INDEX tb ON parent(b); +CREATE TABLE child (a1 INT NOT NULL, a2 INT, a3 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); +ALTER TABLE child +ADD CONSTRAINT fk_a FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +ALTER TABLE child +ADD CONSTRAINT fk_b FOREIGN KEY (a1) REFERENCES parent(a), +ALGORITHM = INPLACE; +ALTER TABLE child CHANGE a2 a2_new INT, CHANGE a1 a1_new INT; +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1_new` int(11) DEFAULT NULL, + `a2_new` int(11) DEFAULT NULL, + `a3` int(11) DEFAULT NULL, + KEY `tb` (`a2_new`), + KEY `fk_b` (`a1_new`), + CONSTRAINT `fk_a` FOREIGN KEY (`a2_new`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_b` FOREIGN KEY (`a1_new`) REFERENCES `parent` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * from information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_a test/child test/parent 1 6 +test/fk_b test/child test/parent 1 0 +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_a a2_new b 0 +test/fk_b a1_new a 0 +ALTER TABLE child +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1_new) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2_new) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(c), +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'fk_new_3' in the referenced table 'parent' +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1_new` int(11) DEFAULT NULL, + `a2_new` int(11) DEFAULT NULL, + `a3` int(11) DEFAULT NULL, + KEY `tb` (`a2_new`), + KEY `fk_b` (`a1_new`), + CONSTRAINT `fk_a` FOREIGN KEY (`a2_new`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_b` FOREIGN KEY (`a1_new`) REFERENCES `parent` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * from information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_a test/child test/parent 1 6 +test/fk_b test/child test/parent 1 0 +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_a a2_new b 0 +test/fk_b a1_new a 0 +ALTER TABLE child +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1_new) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2_new) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(a), +ALGORITHM = INPLACE; +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1_new` int(11) DEFAULT NULL, + `a2_new` int(11) DEFAULT NULL, + `a3` int(11) DEFAULT NULL, + KEY `tb` (`a2_new`), + KEY `fk_new_1` (`a1_new`), + KEY `fk_new_3` (`a3`), + CONSTRAINT `fk_a` FOREIGN KEY (`a2_new`) REFERENCES `parent` (`b`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_b` FOREIGN KEY (`a1_new`) REFERENCES `parent` (`a`), + CONSTRAINT `fk_new_1` FOREIGN KEY (`a1_new`) REFERENCES `parent` (`b`), + CONSTRAINT `fk_new_2` FOREIGN KEY (`a2_new`) REFERENCES `parent` (`a`), + CONSTRAINT `fk_new_3` FOREIGN KEY (`a3`) REFERENCES `parent` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * from information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_a test/child test/parent 1 6 +test/fk_b test/child test/parent 1 0 +test/fk_new_1 test/child test/parent 1 0 +test/fk_new_2 test/child test/parent 1 0 +test/fk_new_3 test/child test/parent 1 0 +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_a a2_new b 0 +test/fk_b a1_new a 0 +test/fk_new_1 a1_new b 0 +test/fk_new_2 a2_new a 0 +test/fk_new_3 a3 a 0 +DROP TABLE child; +CREATE TABLE child (a1 INT NOT NULL, a2 INT, a3 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); +ALTER TABLE child ADD PRIMARY KEY idx (a1), +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(c), +ALGORITHM = INPLACE; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'fk_new_3' in the referenced table 'parent' +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1` int(11) NOT NULL, + `a2` int(11) DEFAULT NULL, + `a3` int(11) DEFAULT NULL, + KEY `tb` (`a2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * from information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +ALTER TABLE child ADD PRIMARY KEY idx (a1), +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(a), +ALGORITHM = INPLACE; +SHOW CREATE TABLE child; +Table Create Table +child CREATE TABLE `child` ( + `a1` int(11) NOT NULL, + `a2` int(11) DEFAULT NULL, + `a3` int(11) DEFAULT NULL, + PRIMARY KEY (`a1`), + KEY `tb` (`a2`), + KEY `fk_new_3` (`a3`), + CONSTRAINT `fk_new_1` FOREIGN KEY (`a1`) REFERENCES `parent` (`b`), + CONSTRAINT `fk_new_2` FOREIGN KEY (`a2`) REFERENCES `parent` (`a`), + CONSTRAINT `fk_new_3` FOREIGN KEY (`a3`) REFERENCES `parent` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT * from information_schema.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/fk_new_1 test/child test/parent 1 0 +test/fk_new_2 test/child test/parent 1 0 +test/fk_new_3 test/child test/parent 1 0 +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/fk_new_1 a1 b 0 +test/fk_new_2 a2 a 0 +test/fk_new_3 a3 a 0 +SET foreign_key_checks = 1; +DROP TABLE child; +DROP TABLE parent; +CREATE TABLE Parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO Parent VALUES(1,2),(2,3); +CREATE INDEX tb ON Parent(b); +INSERT INTO Parent VALUES(10,20),(20,30); +CREATE TABLE Child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; +CREATE INDEX tb ON Child(a2); +INSERT INTO Child VALUES(10,20); +SET foreign_key_checks = 0; +ALTER TABLE Child ADD CONSTRAINT fk_1 FOREIGN KEY (a2) +REFERENCES Parent(b) ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +DROP TABLE Child; +DROP TABLE Parent; +CREATE TABLE `t2`(a int,c int,d int) ENGINE=INNODB; +CREATE TABLE `t3`(a int,c int,d int) ENGINE=INNODB; +CREATE INDEX idx ON t3(a); +ALTER TABLE `t2` ADD CONSTRAINT `fw` FOREIGN KEY (`c`) REFERENCES t3 (a); +ALTER TABLE `t2` ADD CONSTRAINT `e` foreign key (`d`) REFERENCES t3(a); +ALTER TABLE `t3` ADD CONSTRAINT `e` foreign key (`c`) REFERENCES `t2`(`c`) ON UPDATE SET NULL; +ERROR HY000: Failed to add the foreign key constraint 'test/e' to system tables +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; +ID FOR_NAME REF_NAME N_COLS TYPE +test/e test/t2 test/t3 1 0 +test/fw test/t2 test/t3 1 0 +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; +ID FOR_COL_NAME REF_COL_NAME POS +test/e d a 0 +test/fw c a 0 +DROP TABLE t2; +DROP TABLE t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online-purge.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online-purge.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online-purge.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online-purge.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,36 @@ +CREATE TABLE t (a INT PRIMARY KEY, c TEXT) ENGINE=InnoDB; +CREATE TABLE u (a INT PRIMARY KEY, b INT, c INT NOT NULL) ENGINE=InnoDB; +INSERT INTO t VALUES (1,'aa'); +BEGIN; +INSERT INTO u SET a=1, c=1; +INSERT INTO u SELECT a+1,NULL,a+1 FROM u; +INSERT INTO u SELECT a+2,NULL,a+2 FROM u; +INSERT INTO u SELECT a+4,NULL,a+4 FROM u; +INSERT INTO u SELECT a+8,NULL,a+8 FROM u; +INSERT INTO u SELECT a+16,NULL,a+16 FROM u; +INSERT INTO u SELECT a+32,NULL,a+32 FROM u; +INSERT INTO u SELECT a+64,NULL,a+64 FROM u; +INSERT INTO u SELECT a+128,NULL,a+64 FROM u; +INSERT INTO u SELECT a+256,NULL,a+64 FROM u; +COMMIT; +BEGIN; +DELETE FROM u; +SET DEBUG_SYNC='row_log_apply_before SIGNAL created_u WAIT_FOR dml_done_u'; +ALTER TABLE u ADD INDEX (c); +COMMIT; +SET DEBUG_SYNC='now WAIT_FOR created_u'; +SELECT state FROM information_schema.processlist +WHERE info='ALTER TABLE u ADD INDEX (c)'; +state +debug sync point: row_log_apply_before +SET DEBUG_SYNC='row_log_apply_before SIGNAL created_t WAIT_FOR dml_done_t'; +CREATE INDEX c1 ON t (c(1)); +SET DEBUG_SYNC='now WAIT_FOR created_t'; +UPDATE t SET c='ab'; +SELECT SLEEP(10); +SLEEP(10) +0 +SET DEBUG_SYNC='now SIGNAL dml_done_u'; +SET DEBUG_SYNC='now SIGNAL dml_done_t'; +SET DEBUG_SYNC='RESET'; +DROP TABLE t,u; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-index-online.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-index-online.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,431 @@ +call mtr.add_suppression("InnoDB: Warning: Small buffer pool size"); +SET @global_innodb_file_per_table_orig = @@global.innodb_file_per_table; +SET GLOBAL innodb_file_per_table = on; +CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, c3 TEXT) +ENGINE=InnoDB STATS_PERSISTENT=0; +INSERT INTO t1 VALUES (1,1,''), (2,2,''), (3,3,''), (4,4,''), (5,5,''); +SET GLOBAL innodb_monitor_enable = module_ddl; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SET DEBUG_SYNC = 'RESET'; +SET DEBUG_SYNC = 'write_row_noreplace SIGNAL have_handle WAIT_FOR go_ahead'; +INSERT INTO t1 VALUES(1,2,3); +SET DEBUG_SYNC = 'now WAIT_FOR have_handle'; +SET lock_wait_timeout = 1; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG = '+d,innodb_OOM_prepare_inplace_alter'; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +ERROR HY000: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space +SET DEBUG_DBUG = @saved_debug_dbug; +SET DEBUG_DBUG = '+d,innodb_OOM_inplace_alter'; +CREATE UNIQUE INDEX c2 ON t1(c2); +ERROR HY000: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space +SET DEBUG_DBUG = @saved_debug_dbug; +CREATE UNIQUE INDEX c2 ON t1(c2); +DROP INDEX c2 ON t1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` text, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=0 +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL scanned WAIT_FOR rollback_done'; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +COMMIT; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +ERROR 23000: Duplicate entry '4' for key 'c2' +DELETE FROM t1 WHERE c1 = 7; +ALTER TABLE t1 ADD FOREIGN KEY(c2) REFERENCES t1(c2), ALGORITHM = INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Adding foreign keys needs foreign_key_checks=OFF. Try ALGORITHM=COPY. +ALTER TABLE t1 ADD UNIQUE INDEX(c2), LOCK = EXCLUSIVE, ALGORITHM = INPLACE; +DROP INDEX c2 ON t1; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +SET DEBUG_SYNC = 'now WAIT_FOR scanned'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +ROLLBACK; +SET DEBUG_SYNC = 'now SIGNAL rollback_done'; +ERROR 23000: Duplicate entry '4' for key 'c2' +SET DEBUG_SYNC = 'row_log_apply_after SIGNAL created WAIT_FOR dml_done'; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +SET DEBUG_SYNC = 'now WAIT_FOR created'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 1 +INSERT INTO t1 VALUES(6,3,1); +SET DEBUG_SYNC = 'now SIGNAL dml_done'; +ERROR 23000: Duplicate entry for key 'c2' +DELETE FROM t1 WHERE c1=6; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +INSERT INTO t1 VALUES(6,3,1); +ERROR 23000: Duplicate entry '3' for key 'c2' +INSERT INTO t1 VALUES(7,4,2); +ERROR 23000: Duplicate entry '4' for key 'c2' +ALTER TABLE t1 STATS_PERSISTENT=1; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +UPDATE mysql.innodb_index_stats SET stat_value = 5 +WHERE database_name = 'test' AND table_name= 't1' AND index_name = 'PRIMARY' +AND stat_value = 6; +SELECT * FROM mysql.innodb_index_stats WHERE table_name IN ('t1'); +database_name table_name index_name last_update stat_name stat_value sample_size stat_description +test t1 PRIMARY LAST_UPDATE n_diff_pfx01 5 1 c1 +test t1 PRIMARY LAST_UPDATE n_leaf_pages 1 NULL Number of leaf pages in the index +test t1 PRIMARY LAST_UPDATE size 1 NULL Number of pages in the index +test t1 c2 LAST_UPDATE n_diff_pfx01 5 1 c2 +test t1 c2 LAST_UPDATE n_leaf_pages 1 NULL Number of leaf pages in the index +test t1 c2 LAST_UPDATE size 1 NULL Number of pages in the index +CREATE TABLE t1_c2_stats SELECT * FROM mysql.innodb_index_stats +WHERE database_name = 'test' AND table_name = 't1' and index_name = 'c2'; +ALTER TABLE t1_c2_stats ENGINE=INNODB; +DROP INDEX c2 ON t1; +ANALYZE TABLE t1_c2_stats; +Table Op Msg_type Msg_text +test.t1_c2_stats analyze status OK +SELECT * FROM mysql.innodb_index_stats WHERE table_name IN ('t1', 't1_c2_stats'); +database_name table_name index_name last_update stat_name stat_value sample_size stat_description +test t1 PRIMARY LAST_UPDATE n_diff_pfx01 5 1 c1 +test t1 PRIMARY LAST_UPDATE n_leaf_pages 1 NULL Number of leaf pages in the index +test t1 PRIMARY LAST_UPDATE size 1 NULL Number of pages in the index +KILL QUERY @id; +ERROR 70100: Query execution was interrupted +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2d_created WAIT_FOR kill_done'; +CREATE INDEX c2d ON t1(c2); +SET DEBUG_SYNC = 'now WAIT_FOR c2d_created'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +KILL QUERY @id; +SET DEBUG_SYNC = 'now SIGNAL kill_done'; +ERROR 70100: Query execution was interrupted +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1 SELECT 5 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 10 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 20 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 40 + c1, c2, c3 FROM t1; +EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 80 Using where +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +UPDATE t1_c2_stats SET index_name = 'c2d'; +UPDATE t1_c2_stats SET stat_value = 2 WHERE stat_name = 'n_diff_pfx01'; +INSERT INTO t1_c2_stats +SELECT database_name, table_name, index_name, last_update, 'n_diff_pfx02', 80, +sample_size, 'c2,c1' FROM t1_c2_stats +WHERE stat_name = 'n_diff_pfx01' AND stat_description = 'c2'; +INSERT INTO mysql.innodb_index_stats SELECT * FROM t1_c2_stats; +DROP TABLE t1_c2_stats; +CREATE INDEX c2d ON t1(c2); +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 0 PRIMARY 1 c1 A 80 NULL NULL BTREE +t1 1 c2d 1 c2 A 10 NULL NULL YES BTREE +EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range c2d c2d 5 NULL 32 Using where; Using index +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` text, + PRIMARY KEY (`c1`), + KEY `c2d` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=1 +SET @merge_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2e_created WAIT_FOR dml2_done'; +SET lock_wait_timeout = 10; +ALTER TABLE t1 DROP INDEX c2d, ADD INDEX c2e(c2), +ALGORITHM = INPLACE; +INSERT INTO t1 SELECT 80 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 160 + c1, c2, c3 FROM t1; +SET DEBUG_SYNC = 'now WAIT_FOR c2e_created'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +BEGIN; +DELETE FROM t1; +ROLLBACK; +UPDATE t1 SET c2 = c2 + 1; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +BEGIN; +DELETE FROM t1; +ROLLBACK; +UPDATE t1 SET c2 = c2 + 1; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +BEGIN; +DELETE FROM t1; +ROLLBACK; +UPDATE t1 SET c2 = c2 + 1; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +BEGIN; +DELETE FROM t1; +ROLLBACK; +UPDATE t1 SET c2 = c2 + 1; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = '?c2e'; +name pos +c2 0 +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SELECT +(@merge_encrypt_1-@merge_encrypt_0)- +(@merge_decrypt_1-@merge_decrypt_0) as sort_balance, +@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0, +@rowlog_encrypt_1>@rowlog_encrypt_0; +sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0 +0 0 0 0 +SET DEBUG_SYNC = 'now SIGNAL dml2_done'; +ERROR HY000: Creating index 'c2e' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again. +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 1 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = 'c2e'; +name pos +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 1 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +ALTER TABLE t1 COMMENT 'testing if c2e will be dropped'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done'; +ALTER TABLE t1 ADD INDEX c2f(c2); +SET DEBUG_SYNC = 'now WAIT_FOR c2f_created'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +BEGIN; +INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 160; +DELETE FROM t1 WHERE c1 > 320; +ROLLBACK; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +BEGIN; +INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 160; +DELETE FROM t1 WHERE c1 > 320; +ROLLBACK; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +SET DEBUG_SYNC = 'now SIGNAL dml3_done'; +Warnings: +Note 1831 Duplicate index `c2f`. This is deprecated and will be disallowed in a future release. +ALTER TABLE t1 CHANGE c2 c22f INT; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SET @merge_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); +SELECT +(@merge_encrypt_2-@merge_encrypt_1)- +(@merge_decrypt_2-@merge_decrypt_1) as sort_balance, +(@rowlog_encrypt_2-@rowlog_encrypt_1)- +(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance; +sort_balance log_balance +0 0 +SELECT +@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted, +@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted, +@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted, +@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted; +sort_encrypted sort_decrypted log_encrypted log_decrypted +0 0 0 0 +SELECT COUNT(c22f) FROM t1; +COUNT(c22f) +320 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 ADD UNIQUE INDEX c3p5(c3(5)); +ERROR 23000: Duplicate entry 'NULL' for key 'c3p5' +UPDATE t1 SET c3 = NULL WHERE c3 = ''; +SET lock_wait_timeout = 1; +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c3p5_created WAIT_FOR ins_done'; +ALTER TABLE t1 ADD UNIQUE INDEX c3p5(c3(5)); +SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created'; +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = '?c3p5'; +name pos +c3 0 +SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL ins_done WAIT_FOR ddl_timed_out'; +INSERT INTO t1 VALUES(347,33101,NULL); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET DEBUG_SYNC = 'now SIGNAL ddl_timed_out'; +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = 'c3p5'; +name pos +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 1 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 1 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c22f` int(11) DEFAULT NULL, + `c3` text, + PRIMARY KEY (`c1`), + KEY `c2d` (`c22f`), + KEY `c2f` (`c22f`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=1 COMMENT='testing if c2e will be dropped' +ALTER TABLE t1 DROP INDEX c2d, DROP INDEX c2f; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +ALTER TABLE t1 ADD INDEX c2h(c22f), ALGORITHM = INPLACE; +ALTER TABLE t1 ADD INDEX c2h(c22f), ALGORITHM = COPY; +ERROR 42000: Duplicate key name 'c2h' +SET DEBUG_SYNC = 'RESET'; +SET GLOBAL innodb_monitor_disable = module_ddl; +DROP TABLE t1; +SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig; +SET GLOBAL innodb_monitor_enable = default; +SET GLOBAL innodb_monitor_disable = default; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_max_recordsize_32k.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_max_recordsize_32k.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_max_recordsize_32k.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_max_recordsize_32k.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,388 @@ +SELECT @@innodb_page_size; +@@innodb_page_size +32768 +SET GLOBAL innodb_file_format='Barracuda'; +SET GLOBAL innodb_file_per_table=ON; +SET @@innodb_strict_mode=ON; +SELECT @@innodb_file_format; +@@innodb_file_format +Barracuda +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +SELECT @@innodb_strict_mode; +@@innodb_strict_mode +1 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT= COMPACT; +ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT= DYNAMIC; +ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +show warnings; +Level Code Message +Error 1118 Row size too large (> 16318). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +Warning 1030 Got error 139 "Too big row" from storage engine InnoDB +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +ERROR 42000: Row size too large (> 16315). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +show warnings; +Level Code Message +Error 1118 Row size too large (> 16315). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +Warning 1030 Got error 139 "Too big row" from storage engine InnoDB +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=FIXED; +ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +show warnings; +Level Code Message +Warning 1478 InnoDB: invalid ROW_FORMAT specifier. +Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; +ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +show warnings; +Level Code Message +Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. +Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB +SET @@innodb_strict_mode=OFF; +SELECT @@innodb_strict_mode; +@@innodb_strict_mode +0 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPACT; +Warnings: +Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); +ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 +DROP TABLE tab5; +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPACT; +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); +ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL +DROP TABLE tab5; +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=DYNAMIC; +ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=DYNAMIC; +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); +ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL +DROP TABLE tab5; +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +Warnings: +Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255)); +ERROR 42000: Row size too large (> 16315). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 +DROP TABLE tab5; +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',89),NULL); +ERROR 42000: Row size too large (> 16315). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',88),NULL); +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL +DROP TABLE tab5; +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; +Warnings: +Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=COMPACT. +DROP TABLE tab5; +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; +SHOW WARNINGS; +Level Code Message +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +LENGTH(col) +16384 +32768 +65535 +FLUSH TABLE t; +ANALYZE TABLE t; +Table Op Msg_type Msg_text +test.t analyze status OK +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +stat_value +6 +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +clustered_index_size +7 +DROP TABLE t; +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; +SHOW WARNINGS; +Level Code Message +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +LENGTH(col) +16384 +32768 +65535 +FLUSH TABLE t; +ANALYZE TABLE t; +Table Op Msg_type Msg_text +test.t analyze status OK +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +stat_value +4 +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +clustered_index_size +5 +DROP TABLE t; +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; +SHOW WARNINGS; +Level Code Message +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +LENGTH(col) +16384 +32768 +65535 +FLUSH TABLE t; +ANALYZE TABLE t; +Table Op Msg_type Msg_text +test.t analyze status OK +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +stat_value +4 +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +clustered_index_size +5 +DROP TABLE t; +# Success diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_max_recordsize_64k.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_max_recordsize_64k.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_max_recordsize_64k.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_max_recordsize_64k.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,591 @@ +SELECT @@innodb_page_size; +@@innodb_page_size +65536 +SET GLOBAL innodb_file_format='Barracuda'; +SET GLOBAL innodb_file_per_table=ON; +SET @@innodb_strict_mode=ON; +SELECT @@innodb_file_format; +@@innodb_file_format +Barracuda +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +SELECT @@innodb_strict_mode; +@@innodb_strict_mode +1 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT= COMPACT; +ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT= DYNAMIC; +ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +ERROR 42000: Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +show warnings; +Level Code Message +Error 1118 Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +Warning 1030 Got error 139 "Too big row" from storage engine InnoDB +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=FIXED; +ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +show warnings; +Level Code Message +Warning 1478 InnoDB: invalid ROW_FORMAT specifier. +Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; +ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +show warnings; +Level Code Message +Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. +Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") +Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB +SET @@innodb_strict_mode=OFF; +SELECT @@innodb_strict_mode; +@@innodb_strict_mode +0 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT=COMPACT; +Warnings: +Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); +ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 +DROP TABLE tab5; +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), +ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), +ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), +ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), +ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), +ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), +ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), +ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), +ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), +ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), +ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), +ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) +) +ENGINE = innodb ROW_FORMAT=COMPACT; +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); +ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL +DROP TABLE tab5; +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT=DYNAMIC; +ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), +ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), +ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), +ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), +ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), +ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), +ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), +ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), +ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), +ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), +ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), +ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) +) +ENGINE = innodb ROW_FORMAT=DYNAMIC; +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); +ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL +DROP TABLE tab5; +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +Warnings: +Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); +ERROR 42000: Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 +DROP TABLE tab5; +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), +ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), +ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), +ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), +ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), +ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), +ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), +ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), +ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), +ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), +ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), +ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) +) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',27),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); +ERROR 42000: Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',26),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); +SELECT * FROM tab5; +col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL +DROP TABLE tab5; +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; +Warnings: +Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=COMPACT. +DROP TABLE tab5; +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; +SHOW WARNINGS; +Level Code Message +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +LENGTH(col) +16384 +32768 +65535 +FLUSH TABLE t; +ANALYZE TABLE t; +Table Op Msg_type Msg_text +test.t analyze status OK +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +stat_value +4 +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +clustered_index_size +5 +DROP TABLE t; +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; +SHOW WARNINGS; +Level Code Message +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +LENGTH(col) +16384 +32768 +65535 +FLUSH TABLE t; +ANALYZE TABLE t; +Table Op Msg_type Msg_text +test.t analyze status OK +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +stat_value +3 +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +clustered_index_size +4 +DROP TABLE t; +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; +SHOW WARNINGS; +Level Code Message +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +LENGTH(col) +16384 +32768 +65535 +FLUSH TABLE t; +ANALYZE TABLE t; +Table Op Msg_type Msg_text +test.t analyze status OK +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +stat_value +3 +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +clustered_index_size +4 +DROP TABLE t; +# Success diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-page_compression_tables.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-page_compression_tables.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-page_compression_tables.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-page_compression_tables.result 2017-12-21 15:48:47.000000000 +0000 @@ -38,12 +38,11 @@ `b` char(200) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT alter table innodb_redundant page_compressed=1; -ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'PAGE_COMPRESSED' show warnings; Level Code Message Warning 140 InnoDB: PAGE_COMPRESSED table can't have ROW_TYPE=REDUNDANT -Error 1005 Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") -Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB +Error 1478 Table storage engine 'InnoDB' does not support the create option 'PAGE_COMPRESSED' show create table innodb_redundant; Table Create Table innodb_redundant CREATE TABLE `innodb_redundant` ( diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-replace-debug.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-replace-debug.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-replace-debug.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-replace-debug.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,13 @@ +# +# Bug#17604730 ASSERTION: *CURSOR->INDEX->NAME == TEMP_INDEX_PREFIX +# +create table t1 (f1 int primary key, f2 int, f3 int, unique key k1(f2), +key k2(f3)) engine=innodb; +insert into t1 values (14, 24, 34); +set @@debug_dbug = '+d,row_ins_sec_index_entry_timeout'; +replace into t1 values (14, 25, 34); +select * from t1; +f1 f2 f3 +14 25 34 +drop table t1; +set @@debug_dbug = '-d,row_ins_sec_index_entry_timeout'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-table-online,crypt.rdiff mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-table-online,crypt.rdiff --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-table-online,crypt.rdiff 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-table-online,crypt.rdiff 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,20 @@ +--- innodb-table-online.result ++++ innodb-table-online,crypt.reject +@@ -254,7 +254,7 @@ + @merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0, + @rowlog_encrypt_1>@rowlog_encrypt_0; + sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0 +-0 0 0 0 ++0 0 0 1 + SET DEBUG_SYNC = 'now SIGNAL dml2_done'; + # session con1 + ERROR HY000: Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again. +@@ -345,7 +345,7 @@ + @rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted, + @rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted; + sort_encrypted sort_decrypted log_encrypted log_decrypted +-0 0 0 0 ++1 1 1 1 + ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)); + ERROR 23000: Duplicate entry '' for key 'PRIMARY' + UPDATE t1 SET c3 = NULL WHERE c3 = ''; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-table-online.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-table-online.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-table-online.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-table-online.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,446 @@ +call mtr.add_suppression("InnoDB: Warning: Small buffer pool size"); +call mtr.add_suppression("InnoDB: Error: table 'test/t1'"); +call mtr.add_suppression("MySQL is trying to open a table handle but the .ibd file for"); +SET @global_innodb_file_per_table_orig = @@global.innodb_file_per_table; +SET GLOBAL innodb_file_per_table = on; +SET @file_format = @@GLOBAL.innodb_file_format; +SET GLOBAL innodb_file_format = Barracuda; +CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 CHAR(255) NOT NULL) +ENGINE = InnoDB; +INSERT INTO t1 VALUES (1,1,''), (2,2,''), (3,3,''), (4,4,''), (5,5,''); +SET GLOBAL innodb_monitor_enable = module_ddl; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SET DEBUG_SYNC = 'RESET'; +SET DEBUG_SYNC = 'write_row_noreplace SIGNAL have_handle WAIT_FOR go_ahead'; +INSERT INTO t1 VALUES(1,2,3); +# Establish session con1 (user=root) +SET DEBUG_SYNC = 'now WAIT_FOR have_handle'; +SET lock_wait_timeout = 1; +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; +# session default +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +# session con1 +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG = '+d,innodb_OOM_prepare_inplace_alter'; +ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE; +ERROR HY000: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space +SET SESSION DEBUG = @saved_debug_dbug; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +SET SESSION DEBUG = '+d,innodb_OOM_inplace_alter'; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE; +ERROR HY000: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space +SET SESSION DEBUG = @saved_debug_dbug; +Warnings: +Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead +ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE; +# session default +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) NOT NULL, + `c3` char(255) NOT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +# session con1 +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR insert_done'; +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# session default +COMMIT; +# session con1 +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2); +ERROR 23000: Duplicate entry '4' for key 'c2' +# session default +DELETE FROM t1 WHERE c1 = 7; +# session con1 +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ROW_FORMAT=COMPACT, +LOCK = SHARED, ALGORITHM = INPLACE; +ALTER TABLE t1 ADD UNIQUE INDEX(c2), +LOCK = EXCLUSIVE, ALGORITHM = INPLACE; +Warnings: +Note 1831 Duplicate index `c2_2`. This is deprecated and will be disallowed in a future release. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) NOT NULL, + `c3` char(255) NOT NULL, + UNIQUE KEY `c2` (`c2`), + UNIQUE KEY `c2_2` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT +ALTER TABLE t1 DROP INDEX c2, ALGORITHM = INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Dropping a primary key is not allowed without also adding a new primary key. Try ALGORITHM=COPY. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) NOT NULL, + `c3` char(255) NOT NULL, + UNIQUE KEY `c2` (`c2`), + UNIQUE KEY `c2_2` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT +ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1); +# session default +SET DEBUG_SYNC = 'now WAIT_FOR scanned'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +BEGIN; +INSERT INTO t1 VALUES(4,7,2); +SET DEBUG_SYNC = 'now SIGNAL insert_done'; +# session con1 +ERROR 23000: Duplicate entry '4' for key 'PRIMARY' +# session default +ROLLBACK; +# session con1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) NOT NULL, + `c3` char(255) NOT NULL, + UNIQUE KEY `c2` (`c2`), + UNIQUE KEY `c2_2` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ALGORITHM = INPLACE; +ERROR 42000: Can't DROP 'PRIMARY'; check that column/key exists +ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1), ALGORITHM = INPLACE; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +# session default +INSERT INTO t1 VALUES(6,3,1); +ERROR 23000: Duplicate entry '3' for key 'c2_2' +INSERT INTO t1 VALUES(7,4,2); +ERROR 23000: Duplicate entry '4' for key 'c2_2' +DROP INDEX c2_2 ON t1; +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +ROLLBACK; +# session con1 +KILL QUERY @id; +ERROR 70100: Query execution was interrupted +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR dml_done'; +SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL applied WAIT_FOR kill_done'; +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; +# session default +SET DEBUG_SYNC = 'now WAIT_FOR rebuilt'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +ROLLBACK; +SET DEBUG_SYNC = 'now SIGNAL dml_done WAIT_FOR applied'; +KILL QUERY @id; +SET DEBUG_SYNC = 'now SIGNAL kill_done'; +# session con1 +ERROR 70100: Query execution was interrupted +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +# session default +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1 SELECT 5 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 10 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 20 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 40 + c1, c2, c3 FROM t1; +EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL ROWS Using where +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SET @merge_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +# session con1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) NOT NULL, + `c3` char(255) NOT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done'; +SET lock_wait_timeout = 10; +ALTER TABLE t1 ROW_FORMAT=COMPACT +PAGE_COMPRESSED = YES PAGE_COMPRESSION_LEVEL = 1, ALGORITHM = INPLACE; +# session default +INSERT INTO t1 SELECT 80 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 160 + c1, c2, c3 FROM t1; +UPDATE t1 SET c2 = c2 + 1; +SET DEBUG_SYNC = 'now WAIT_FOR rebuilt2'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +BEGIN; +DELETE FROM t1; +ROLLBACK; +UPDATE t1 SET c2 = c2 + 1; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +BEGIN; +DELETE FROM t1; +ROLLBACK; +UPDATE t1 SET c2 = c2 + 1; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +BEGIN; +DELETE FROM t1; +ROLLBACK; +UPDATE t1 SET c2 = c2 + 1; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SELECT +(@merge_encrypt_1-@merge_encrypt_0)- +(@merge_decrypt_1-@merge_decrypt_0) as sort_balance, +@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0, +@rowlog_encrypt_1>@rowlog_encrypt_0; +sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0 +0 0 0 0 +SET DEBUG_SYNC = 'now SIGNAL dml2_done'; +# session con1 +ERROR HY000: Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again. +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt3 WAIT_FOR dml3_done'; +ALTER TABLE t1 ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT; +ERROR 42000: Multiple primary key defined +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT; +ERROR 23000: Duplicate entry '5' for key 'PRIMARY' +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c1,c22f,c4(5)), +CHANGE c2 c22f INT, CHANGE c3 c3 CHAR(255) NULL, CHANGE c1 c1 INT AFTER c22f, +ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online', LOCK=NONE; +# session default +SET DEBUG_SYNC = 'now WAIT_FOR rebuilt3'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +BEGIN; +INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 240; +DELETE FROM t1 WHERE c1 > 320; +ROLLBACK; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 1 +ddl_pending_alter_table 1 +SET DEBUG_SYNC = 'now SIGNAL dml3_done'; +# session con1 +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +SELECT COUNT(c22f) FROM t1; +COUNT(c22f) +320 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SET @merge_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); +SELECT +(@merge_encrypt_2-@merge_encrypt_1)- +(@merge_decrypt_2-@merge_decrypt_1) as sort_balance, +(@rowlog_encrypt_2-@rowlog_encrypt_1)- +(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance; +sort_balance log_balance +0 0 +SELECT +@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted, +@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted, +@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted, +@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted; +sort_encrypted sort_decrypted log_encrypted log_decrypted +0 0 0 0 +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)); +ERROR 23000: Duplicate entry '' for key 'PRIMARY' +UPDATE t1 SET c3 = NULL WHERE c3 = ''; +SET lock_wait_timeout = 1; +ALTER TABLE t1 DROP COLUMN c22f, ADD PRIMARY KEY c3p5(c3(5)); +ERROR 42000: Multiple primary key defined +SET @old_sql_mode = @@sql_mode; +SET @@sql_mode = 'STRICT_TRANS_TABLES'; +ALTER TABLE t1 DROP COLUMN c22f, DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)), +ALGORITHM = INPLACE; +ERROR 22004: Invalid use of NULL value +ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL; +ERROR 22004: Invalid use of NULL value +SET @@sql_mode = @old_sql_mode; +UPDATE t1 SET c3=LEFT(CONCAT(c1,REPEAT('foo',c1)),255) WHERE c3 IS NULL; +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created0 WAIT_FOR ins_done0'; +SET @@sql_mode = 'STRICT_TRANS_TABLES'; +ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL, DROP COLUMN c22f, +ADD COLUMN c5 CHAR(5) DEFAULT 'tired' FIRST; +# session default +SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created0'; +BEGIN; +INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti','YLETV2'); +INSERT INTO t1 VALUES(33101,347,NULL,''); +SET DEBUG_SYNC = 'now SIGNAL ins_done0'; +# session con1 +ERROR 22004: Invalid use of NULL value +SET @@sql_mode = @old_sql_mode; +# session default +ROLLBACK; +# session con1 +ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL; +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created WAIT_FOR ins_done'; +ALTER TABLE t1 DROP PRIMARY KEY, DROP COLUMN c22f, +ADD COLUMN c6 VARCHAR(1000) DEFAULT +'I love tracking down hard-to-reproduce bugs.', +ADD PRIMARY KEY c3p5(c3(5), c6(2)); +# session default +SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created'; +SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL ins_done WAIT_FOR ddl_timed_out'; +INSERT INTO t1 VALUES(347,33101,NULL,''); +ERROR 23000: Column 'c3' cannot be null +INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti',''); +# session con1 +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET DEBUG_SYNC = 'now SIGNAL ddl_timed_out'; +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; +name count +ddl_background_drop_indexes 0 +ddl_background_drop_tables 0 +ddl_online_create_index 0 +ddl_pending_alter_table 0 +# session default +SELECT COUNT(*) FROM t1; +COUNT(*) +321 +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; +SELECT * FROM t1 LIMIT 10; +c22f c1 c3 c4 +5 1 1foo Online +6 2 2foofoo Online +7 3 3foofoofoo Online +8 4 4foofoofoofoo Online +9 5 5foofoofoofoofoo Online +5 6 6foofoofoofoofoofoo Online +6 7 7foofoofoofoofoofoofoo Online +7 8 8foofoofoofoofoofoofoofoo Online +8 9 9foofoofoofoofoofoofoofoofoo Online +9 10 10foofoofoofoofoofoofoofoofoofoo Online +# session con1 +ALTER TABLE t1 DISCARD TABLESPACE; +# Disconnect session con1 +# session default +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c22f` int(11) NOT NULL, + `c1` int(11) NOT NULL, + `c3` char(255) NOT NULL, + `c4` varchar(6) NOT NULL DEFAULT 'Online', + PRIMARY KEY (`c1`,`c22f`,`c4`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT +SET DEBUG_SYNC = 'RESET'; +SET GLOBAL innodb_monitor_disable = module_ddl; +DROP TABLE t1; +SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig; +SET GLOBAL innodb_file_format = @file_format; +SET GLOBAL innodb_monitor_enable = default; +SET GLOBAL innodb_monitor_disable = default; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-wl5522-debug.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-wl5522-debug.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-wl5522-debug.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-wl5522-debug.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,26 +1,15 @@ -call mtr.add_suppression("InnoDB: Page for tablespace .* "); -call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS="); -call mtr.add_suppression("InnoDB: Corruption: Block in space_id .* in file .* corrupted"); -call mtr.add_suppression("InnoDB: Based on page type .*"); -FLUSH TABLES; SET GLOBAL innodb_file_per_table = 1; -DROP DATABASE IF EXISTS test_wl5522; -Warnings: -Note 1008 Can't drop database 'test_wl5522'; database doesn't exist CREATE DATABASE test_wl5522; -SET SESSION debug_dbug="+d,ib_discard_before_commit_crash"; CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = InnoDB; INSERT INTO test_wl5522.t1 VALUES(1),(2),(3); +SET SESSION debug_dbug="+d,ib_discard_before_commit_crash"; ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; ERROR HY000: Lost connection to MySQL server during query DROP TABLE test_wl5522.t1; SET GLOBAL innodb_file_per_table = 1; -SELECT @@innodb_file_per_table; -@@innodb_file_per_table -1 -SET SESSION debug_dbug="+d,ib_discard_after_commit_crash"; CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = InnoDB; INSERT INTO test_wl5522.t1 VALUES(1),(2),(3); +SET SESSION debug_dbug="+d,ib_discard_after_commit_crash"; ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; ERROR HY000: Lost connection to MySQL server during query DROP TABLE test_wl5522.t1; @@ -37,19 +26,18 @@ SELECT COUNT(*) FROM test_wl5522.t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; SELECT * FROM test_wl5522.t1; ERROR HY000: Tablespace has been discarded for table 't1' +SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; ERROR HY000: Lost connection to MySQL server during query -SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; SELECT COUNT(*) FROM test_wl5522.t1; ERROR HY000: Tablespace has been discarded for table 't1' +SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; ERROR HY000: Lost connection to MySQL server during query unlink: t1.ibd unlink: t1.cfg -# Restart and reconnect to the server DROP TABLE test_wl5522.t1; SET GLOBAL innodb_file_per_table = 1; SELECT @@innodb_file_per_table; @@ -495,7 +483,7 @@ INDEX idx1(c2), INDEX idx2(c3(512)), INDEX idx3(c4(512))) Engine=InnoDB; -SET GLOBAL INNODB_PURGE_STOP_NOW=ON; +START TRANSACTION WITH CONSISTENT SNAPSHOT; SET GLOBAL innodb_disable_background_merge=ON; SET GLOBAL innodb_monitor_reset = ibuf_merges; SET GLOBAL innodb_monitor_reset = ibuf_merges_insert; @@ -660,7 +648,7 @@ WHERE name = 'ibuf_merges_inserts' AND count > 0; name SET GLOBAL innodb_disable_background_merge=OFF; -SET GLOBAL INNODB_PURGE_RUN_NOW=ON; +COMMIT; DROP TABLE test_wl5522.t1; CREATE TABLE test_wl5522.t1 ( c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, @@ -796,8 +784,8 @@ ) ENGINE=InnoDB AUTO_INCREMENT=185 DEFAULT CHARSET=latin1 DROP TABLE test_wl5522.t1; CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; -INSERT INTO test_wl5522.t1 VALUES -(100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 1200)); +INSERT IGNORE INTO test_wl5522.t1 VALUES +(100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 2731)); Warnings: Warning 1265 Data truncated for column 'c2' at row 1 INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; @@ -832,7 +820,7 @@ SELECT COUNT(*) FROM test_wl5522.t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,buf_page_is_corrupt_failure"; +SET SESSION debug_dbug="+d,buf_page_import_corrupt_failure"; ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Data structure corruption SET SESSION debug_dbug=@saved_debug_dbug; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-wl5522-debug-zip.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-wl5522-debug-zip.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-wl5522-debug-zip.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-wl5522-debug-zip.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,565 +0,0 @@ -call mtr.add_suppression("InnoDB: Page for tablespace "); -call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS=0x"); -call mtr.add_suppression("InnoDB: Corruption: Block in space_id .* in file .* corrupted"); -call mtr.add_suppression("InnoDB: Based on page type .*"); -FLUSH TABLES; -SET GLOBAL innodb_file_per_table = 1; -SET GLOBAL innodb_file_format = `Barracuda`; -SET SESSION innodb_strict_mode=1; -DROP DATABASE IF EXISTS test_wl5522; -Warnings: -Note 1008 Can't drop database 'test_wl5522'; database doesn't exist -CREATE DATABASE test_wl5522; -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; -INSERT INTO test_wl5522.t1 VALUES (1), (2), (3), (4); -FLUSH TABLES test_wl5522.t1 FOR EXPORT; -backup: t1 -UNLOCK TABLES; -DROP TABLE test_wl5522.t1; -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; -INSERT INTO test_wl5522.t1 VALUES (1); -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; -SELECT * FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Lost connection to MySQL server during query -SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Lost connection to MySQL server during query -unlink: t1.ibd -unlink: t1.cfg -# Restart and reconnect to the server -DROP TABLE test_wl5522.t1; -SET GLOBAL innodb_file_per_table = 1; -SET GLOBAL innodb_file_format = `Barracuda`; -SET SESSION innodb_strict_mode=1; -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -restore: t1 .ibd and .cfg files -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -CHECK TABLE test_wl5522.t1; -Table Op Msg_type Msg_text -test_wl5522.t1 check status OK -SELECT COUNT(*) FROM test_wl5522.t1; -COUNT(*) -4 -INSERT INTO test_wl5522.t1 VALUES(400), (500), (600); -SELECT * FROM test_wl5522.t1; -c1 -1 -2 -3 -4 -400 -500 -600 -DROP TABLE test_wl5522.t1; -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET @saved_debug_dbug = @@SESSION.debug_dbug; -SET SESSION debug_dbug="+d,ib_import_internal_error"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Internal error: While updating the of index "GEN_CLUST_INDEX" - Generic error -SET SESSION debug_dbug=@saved_debug_dbug; -restore: t1 .ibd and .cfg files -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -DROP TABLE test_wl5522.t1; -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_reset_space_and_lsn_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Too many concurrent transactions -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug=@saved_debug_dbug; -SET SESSION debug_dbug="+d,ib_import_open_tablespace_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Got error 44 't1.ibd -SET SESSION debug_dbug=@saved_debug_dbug; -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_check_bitmap_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Incorrect key file for table 't1'; try to repair it -SET SESSION debug_dbug=@saved_debug_dbug; -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_cluster_root_adjust_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Incorrect key file for table 't1'; try to repair it -SET SESSION debug_dbug=@saved_debug_dbug; -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_cluster_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Incorrect key file for table 't1'; try to repair it -SET SESSION debug_dbug=@saved_debug_dbug; -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_sec_root_adjust_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Incorrect key file for table 't1'; try to repair it -SET SESSION debug_dbug=@saved_debug_dbug; -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_set_max_rowid_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Incorrect key file for table 't1'; try to repair it -SET SESSION debug_dbug=@saved_debug_dbug; -unlink: t1.ibd -unlink: t1.cfg -DROP TABLE test_wl5522.t1; -CREATE TABLE test_wl5522.t1 ( -c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, -c2 BIGINT, -c3 VARCHAR(2048), -c4 VARCHAR(2048), -INDEX idx1(c2), -INDEX idx2(c3(512)), -INDEX idx3(c4(512))) Engine=InnoDB -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; -SET GLOBAL INNODB_PURGE_STOP_NOW=ON; -SET GLOBAL innodb_disable_background_merge=ON; -SET GLOBAL innodb_monitor_reset = ibuf_merges; -SET GLOBAL innodb_monitor_reset = ibuf_merges_insert; -INSERT INTO test_wl5522.t1(c2, c3, c4) VALUES -(1, REPEAT('a', 2048), REPEAT('a', 2048)), -(2, REPEAT('b', 2048), REPEAT('b', 2048)), -(3, REPEAT('c', 2048), REPEAT('c', 2048)), -(4, REPEAT('d', 2048), REPEAT('d', 2048)); -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -DELETE FROM test_wl5522.t1 WHERE c2 = 1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c3 = REPEAT("c2", 1024); -UPDATE test_wl5522.t1 SET c4 = REPEAT("c4", 1024); -SHOW CREATE TABLE test_wl5522.t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `c1` bigint(20) NOT NULL AUTO_INCREMENT, - `c2` bigint(20) DEFAULT NULL, - `c3` varchar(2048) DEFAULT NULL, - `c4` varchar(2048) DEFAULT NULL, - PRIMARY KEY (`c1`), - KEY `idx1` (`c2`), - KEY `idx2` (`c3`(512)), - KEY `idx3` (`c4`(512)) -) ENGINE=InnoDB AUTO_INCREMENT=248 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8 -SELECT c1, c2 FROM test_wl5522.t1; -c1 c2 -2 32 -3 48 -4 64 -6 92 -7 108 -8 124 -13 197 -14 213 -15 229 -17 257 -18 273 -19 289 -28 422 -29 438 -30 454 -32 482 -33 498 -34 514 -36 542 -37 558 -38 574 -40 602 -41 618 -42 634 -59 887 -60 903 -61 919 -63 947 -64 963 -65 979 -67 1007 -68 1023 -69 1039 -71 1067 -72 1083 -73 1099 -75 1127 -76 1143 -77 1159 -79 1187 -80 1203 -81 1219 -83 1247 -84 1263 -85 1279 -87 1307 -88 1323 -89 1339 -122 1832 -123 1848 -124 1864 -126 1892 -127 1908 -128 1924 -130 1952 -131 1968 -132 1984 -134 2012 -135 2028 -136 2044 -138 2072 -139 2088 -140 2104 -142 2132 -143 2148 -144 2164 -146 2192 -147 2208 -148 2224 -150 2252 -151 2268 -152 2284 -154 2312 -155 2328 -156 2344 -158 2372 -159 2388 -160 2404 -162 2432 -163 2448 -164 2464 -166 2492 -167 2508 -168 2524 -170 2552 -171 2568 -172 2584 -174 2612 -175 2628 -176 2644 -178 2672 -179 2688 -180 2704 -182 2732 -183 2748 -184 2764 -SELECT COUNT(*) FROM test_wl5522.t1; -COUNT(*) -96 -SELECT SUM(c2) FROM test_wl5522.t1; -SUM(c2) -145278 -SELECT name -FROM information_schema.innodb_metrics -WHERE name = 'ibuf_merges_insert' AND count = 0; -name -FLUSH TABLES test_wl5522.t1 FOR EXPORT; -backup: t1 -UNLOCK TABLES; -SELECT name -FROM information_schema.innodb_metrics -WHERE name = 'ibuf_merges' AND count > 0; -name -ibuf_merges -SELECT name -FROM information_schema.innodb_metrics -WHERE name = 'ibuf_merges_inserts' AND count > 0; -name -SET GLOBAL innodb_disable_background_merge=OFF; -SET GLOBAL INNODB_PURGE_RUN_NOW=ON; -DROP TABLE test_wl5522.t1; -CREATE TABLE test_wl5522.t1 ( -c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, -c2 BIGINT, -c3 VARCHAR(2048), -c4 VARCHAR(2048), -INDEX idx1(c2), -INDEX idx2(c3(512)), -INDEX idx3(c4(512))) Engine=InnoDB -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; -SELECT c1, c2 FROM test_wl5522.t1; -c1 c2 -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -restore: t1 .ibd and .cfg files -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -CHECK TABLE test_wl5522.t1; -Table Op Msg_type Msg_text -test_wl5522.t1 check status OK -SELECT c1,c2 FROM test_wl5522.t1; -c1 c2 -2 32 -3 48 -4 64 -6 92 -7 108 -8 124 -13 197 -14 213 -15 229 -17 257 -18 273 -19 289 -28 422 -29 438 -30 454 -32 482 -33 498 -34 514 -36 542 -37 558 -38 574 -40 602 -41 618 -42 634 -59 887 -60 903 -61 919 -63 947 -64 963 -65 979 -67 1007 -68 1023 -69 1039 -71 1067 -72 1083 -73 1099 -75 1127 -76 1143 -77 1159 -79 1187 -80 1203 -81 1219 -83 1247 -84 1263 -85 1279 -87 1307 -88 1323 -89 1339 -122 1832 -123 1848 -124 1864 -126 1892 -127 1908 -128 1924 -130 1952 -131 1968 -132 1984 -134 2012 -135 2028 -136 2044 -138 2072 -139 2088 -140 2104 -142 2132 -143 2148 -144 2164 -146 2192 -147 2208 -148 2224 -150 2252 -151 2268 -152 2284 -154 2312 -155 2328 -156 2344 -158 2372 -159 2388 -160 2404 -162 2432 -163 2448 -164 2464 -166 2492 -167 2508 -168 2524 -170 2552 -171 2568 -172 2584 -174 2612 -175 2628 -176 2644 -178 2672 -179 2688 -180 2704 -182 2732 -183 2748 -184 2764 -SELECT COUNT(*) FROM test_wl5522.t1; -COUNT(*) -96 -SELECT SUM(c2) FROM test_wl5522.t1; -SUM(c2) -145278 -SHOW CREATE TABLE test_wl5522.t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `c1` bigint(20) NOT NULL AUTO_INCREMENT, - `c2` bigint(20) DEFAULT NULL, - `c3` varchar(2048) DEFAULT NULL, - `c4` varchar(2048) DEFAULT NULL, - PRIMARY KEY (`c1`), - KEY `idx1` (`c2`), - KEY `idx2` (`c3`(512)), - KEY `idx3` (`c4`(512)) -) ENGINE=InnoDB AUTO_INCREMENT=185 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8 -DROP TABLE test_wl5522.t1; -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -INSERT INTO test_wl5522.t1 VALUES -(100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 1200)); -Warnings: -Warning 1265 Data truncated for column 'c2' at row 1 -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -SELECT COUNT(*) FROM test_wl5522.t1; -COUNT(*) -256 -FLUSH TABLES test_wl5522.t1 FOR EXPORT; -backup: t1 -UNLOCK TABLES; -DROP TABLE test_wl5522.t1; -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_trigger_corruption_1"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Data structure corruption -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,buf_page_is_corrupt_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_trigger_corruption_2"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Index corrupt: Externally stored column(5) has a reference length of 19 in the cluster index "GEN_CLUST_INDEX" -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,ib_import_trigger_corruption_3"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Incorrect key file for table 't1'; try to repair it -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -SET SESSION debug_dbug="+d,ib_import_create_index_failure_1"; -ALTER TABLE test_wl5522.t1 ADD INDEX idx(c1); -Warnings: -Warning 1814 Tablespace has been discarded for table 't1' -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,fil_space_create_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Got error 11 't1.ibd -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,dict_tf_to_fsp_flags_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Got error 39 't1.ibd -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; -SELECT COUNT(*) FROM test_wl5522.t1; -ERROR HY000: Tablespace has been discarded for table 't1' -restore: t1 .ibd and .cfg files -SET SESSION debug_dbug="+d,fsp_flags_is_valid_failure"; -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Data structure corruption -SET SESSION debug_dbug=@saved_debug_dbug; -DROP TABLE test_wl5522.t1; -unlink: t1.ibd -unlink: t1.cfg -DROP DATABASE test_wl5522; -set global innodb_monitor_disable = all; -set global innodb_monitor_reset_all = all; -set global innodb_monitor_enable = default; -set global innodb_monitor_disable = default; -set global innodb_monitor_reset = default; -set global innodb_monitor_reset_all = default; -SET GLOBAL INNODB_FILE_PER_TABLE=1; -SET GLOBAL INNODB_FILE_FORMAT=Antelope; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-wl5980-alter.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-wl5980-alter.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb-wl5980-alter.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb-wl5980-alter.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,1409 @@ +# +# This is a copy of innodb-alter.test except using remote tablespaces +# and showing those files. +# +SET default_storage_engine=InnoDB; +SET GLOBAL innodb_file_per_table=ON; +SET NAMES utf8; +CREATE TABLE t1 ( +c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, +INDEX(c2)) +ENGINE=InnoDB DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir'; +INSERT INTO t1 SET c1=1; +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME LIKE 'test/t%'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +CREATE TABLE t1p LIKE t1; +CREATE TABLE t1c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3), +CONSTRAINT t1c2 FOREIGN KEY (c2) REFERENCES t1(c2), +CONSTRAINT t1c3 FOREIGN KEY (c3) REFERENCES t1p(c2)) +ENGINE=InnoDB DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir'; +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i +WHERE FOR_NAME LIKE 'test/t%'; +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c2 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT '1', + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +ALTER TABLE t1 ALTER c2 DROP DEFAULT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11), + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c2 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE c2 c2 INT AFTER c1; +ALTER TABLE t1 CHANGE c1 c1 INT FIRST; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c2 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c2 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE C2 c3 INT; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE c3 C INT; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +C 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 C +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 C 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE C Cöŀumň_TWO INT; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 Cöŀumň_TWO 0 +test/t1c3 c3 c2 0 +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +Cöŀumň_TWO 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 Cöŀumň_TWO +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 Cöŀumň_TWO 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 CHANGE cöĿǖmň_two c3 INT; +ERROR 42S22: Unknown column 'cöĿǖmň_two' in 't1' +ALTER TABLE t1 CHANGE cÖĿUMŇ_two c3 INT, RENAME TO t3; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +t3.frm +t3.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t3.ibd +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; +NAME NAME +test/t1 test/t3 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `c1` int(11) NOT NULL, + `c3` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c3`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + KEY `c3` (`c3`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t3` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +ALTER TABLE t3 CHANGE c3 +`12345678901234567890123456789012345678901234567890123456789012345` INT; +ERROR 42000: Identifier name '12345678901234567890123456789012345678901234567890123456789012345' is too long +ALTER TABLE t3 CHANGE c3 +`1234567890123456789012345678901234567890123456789012345678901234` INT; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +t3.frm +t3.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t3.ibd +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `c1` int(11) NOT NULL, + `1234567890123456789012345678901234567890123456789012345678901234` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`1234567890123456789012345678901234567890123456789012345678901234`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿偀` INT; +ERROR 42000: Identifier name '倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠' is too long +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿ä` INT; +ERROR 42000: Identifier name '倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠' is too long +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾ä` INT; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +t3.frm +t3.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t3.ibd +ALTER TABLE t3 CHANGE +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾Ä` +c3 INT; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +t3.frm +t3.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t3.ibd +ALTER TABLE t3 CHANGE c3 𐌀𐌁𐌂𐌃𐌄𐌅𐌆𐌇𐌈𐌉𐌊𐌋𐌌𐌍𐌎𐌏𐌐𐌑𐌒𐌓𐌔𐌕𐌖𐌗𐌘𐌙𐌚𐌛𐌜 INT; +ERROR HY000: Invalid utf8 character string: '\xF0\x90\x8C\x80\xF0\x90\x8C\x81\xF0\x90\x8C\x82\xF0\x90\x8C\x83' +ALTER TABLE t3 CHANGE c3 😲 INT; +ERROR HY000: Invalid utf8 character string: '\xF0\x9F\x98\xB2' +ALTER TABLE t3 RENAME TO t2; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +t2.frm +t2.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t2.ibd +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; +NAME NAME +test/t1 test/t2 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c1` int(11) NOT NULL, + `c3` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c2` (`c3`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +RENAME TABLE t2 TO t1; +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; +NAME NAME +test/t1 test/t1 +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.ibd +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1 DROP INDEX c2; +ERROR HY000: Cannot drop index 'c2': needed in a foreign key constraint +ALTER TABLE t1 DROP INDEX c4; +ERROR 42000: Can't DROP 'c4'; check that column/key exists +ALTER TABLE t1c DROP FOREIGN KEY c2; +ERROR 42000: Can't DROP 'c2'; check that column/key exists +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2; +ERROR 42000: Can't DROP 'c2'; check that column/key exists +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2, DROP INDEX c2; +ERROR 42000: Can't DROP 'c2'; check that column/key exists +ALTER TABLE t1c DROP INDEX c2; +ERROR HY000: Cannot drop index 'c2': needed in a foreign key constraint +ALTER TABLE t1c DROP FOREIGN KEY ẗ1C2; +ERROR 42000: Can't DROP 'ẗ1C2'; check that column/key exists +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + KEY `c3` (`c3`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +SET foreign_key_checks=0; +DROP TABLE t1p; +SET foreign_key_checks=1; +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + KEY `c3` (`c3`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +CREATE TABLE t1p (c1 INT PRIMARY KEY, c2 INT, INDEX(c2)) +ENGINE=InnoDB DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir'; +ALTER TABLE t1c DROP INDEX C2, DROP INDEX C3; +ERROR HY000: Cannot drop index 'c2': needed in a foreign key constraint +ALTER TABLE t1c DROP INDEX C3; +ERROR HY000: Cannot drop index 'c3': needed in a foreign key constraint +SET foreign_key_checks=0; +ALTER TABLE t1c DROP INDEX C3; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +t1p.ibd +SET foreign_key_checks=1; +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`), + CONSTRAINT `t1c3` FOREIGN KEY (`c3`) REFERENCES `t1p` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +test/t1c3 c3 c2 0 +ALTER TABLE t1c DROP FOREIGN KEY t1C3; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +t1p.ibd +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `c2` (`c2`), + CONSTRAINT `t1c2` FOREIGN KEY (`c2`) REFERENCES `t1` (`c3`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +test/t1c2 c2 c3 0 +ALTER TABLE t1c DROP INDEX c2, DROP FOREIGN KEY t1C2; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +t1p.ibd +SHOW CREATE TABLE t1c; +Table Create Table +t1c CREATE TABLE `t1c` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `c3` int(11) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c3 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +c2 0 c3 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +ALTER TABLE t1 DROP INDEX c2, CHANGE c3 c2 INT; +### files in MYSQL_DATA_DIR/test +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1.frm +t1.isl +t1c.frm +t1c.isl +t1p.frm +t1p.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1.ibd +t1c.ibd +t1p.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +c1 0 6 1283 4 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 c1 +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +CREATE TABLE t1o LIKE t1; +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=NONE; +ERROR 0A000: LOCK=NONE is not supported. Reason: Fulltext index creation requires a lock. Try LOCK=SHARED. +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=SHARED; +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +SHOW CREATE TABLE tt; +Table Create Table +tt CREATE TABLE `tt` ( + `pk` int(11) NOT NULL, + `c2` int(11) DEFAULT '42', + `ct` text, + PRIMARY KEY (`pk`), + FULLTEXT KEY `ct` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir/' +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=COPY; +ERROR 42000: Incorrect column name 'dB_row_Id' +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=INPLACE; +ERROR 42000: Incorrect column name 'DB_ROW_ID' +ALTER TABLE t1o CHANGE c1 DB_TRX_ID INT; +ERROR 42000: Incorrect column name 'DB_TRX_ID' +ALTER TABLE t1o CHANGE c1 db_roll_ptr INT; +ERROR 42000: Incorrect column name 'DB_ROLL_PTR' +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=COPY; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=INPLACE; +ERROR HY000: Column 'FTS_DOC_ID' is of wrong type for an InnoDB FULLTEXT index +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_Doc_ID INT, +ALGORITHM=INPLACE; +ERROR 42000: Incorrect column name 'FTS_Doc_ID' +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +CREATE TABLE t1n LIKE t1o; +ALTER TABLE t1n ADD FULLTEXT INDEX(ct); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=INPLACE; +ERROR 42000: Incorrect column name 'FTS_DOC_ID' +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=COPY; +ERROR 42000: Incorrect column name 'Fts_DOC_ID' +ALTER TABLE t1n CHANGE FTS_DOC_ID c11 INT, ALGORITHM=INPLACE; +ERROR 42S22: Unknown column 'FTS_DOC_ID' in 't1n' +ALTER TABLE t1n CHANGE c1 FTS_DOC_ïD INT, ALGORITHM=INPLACE; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +ALTER TABLE t1n CHANGE FTS_DOC_ÏD c1 INT, ALGORITHM=INPLACE; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +ALTER TABLE t1n CHANGE c1 c2 INT, CHANGE c2 ct INT, CHANGE ct c1 TEXT, +ALGORITHM=INPLACE; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c2` int(11) NOT NULL, + `ct` int(11) DEFAULT NULL, + `c1` text, + PRIMARY KEY (`c2`), + FULLTEXT KEY `ct` (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1n CHANGE c2 c1 INT, CHANGE ct c2 INT, CHANGE c1 ct TEXT, +ALGORITHM=COPY; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c1` int(11) NOT NULL, + `c2` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + FULLTEXT KEY `ct` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=INPLACE; +ERROR 42000: Key column 'c2' doesn't exist in table +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=COPY; +ERROR 42000: Key column 'c2' doesn't exist in table +ALTER TABLE t1n ADD INDEX(c4), CHANGE c2 c4 INT, ALGORITHM=INPLACE; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c1` int(11) NOT NULL, + `c4` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c4` (`c4`), + FULLTEXT KEY `ct` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1n DROP INDEX c4; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +ALTER TABLE t1n CHANGE c4 c1 INT, ADD INDEX(c1), ALGORITHM=INPLACE; +ERROR 42S21: Duplicate column name 'c1' +ALTER TABLE t1n CHANGE c4 c11 INT, ADD INDEX(c11), ALGORITHM=INPLACE; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1n.frm +t1n.ibd +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +SHOW CREATE TABLE t1n; +Table Create Table +t1n CREATE TABLE `t1n` ( + `c1` int(11) NOT NULL, + `c11` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`c1`), + KEY `c11` (`c11`), + FULLTEXT KEY `ct` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1n; +ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +LOCK=NONE; +ERROR 0A000: LOCK=NONE is not supported. Reason: Cannot drop or rename FTS_DOC_ID. Try LOCK=SHARED. +SELECT sc.pos FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t1o' AND sc.NAME='FTS_DOC_ID'; +pos +0 +SHOW CREATE TABLE t1o; +Table Create Table +t1o CREATE TABLE `t1o` ( + `FTS_DOC_ID` bigint(20) unsigned NOT NULL, + `c2` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`FTS_DOC_ID`), + FULLTEXT KEY `ct` (`ct`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +DROP INDEX ct, LOCK=NONE; +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1c.frm +t1c.isl +t1o.frm +t1o.ibd +t1p.frm +t1p.isl +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +t1c.ibd +t1p.ibd +tt.ibd +SHOW CREATE TABLE t1o; +Table Create Table +t1o CREATE TABLE `t1o` ( + `foo_id` bigint(20) unsigned NOT NULL, + `c2` int(11) DEFAULT NULL, + `ct` text, + PRIMARY KEY (`foo_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1c, t1p, sys_tables, sys_indexes, sys_foreign; +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME='test/t1o'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i WHERE FOR_NAME='test/t1o'; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +foo_id 0 6 1800 8 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 foo_id +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +ALTER TABLE t1o ADD UNIQUE INDEX FTS_DOC_ID_INDEX(foo_id); +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1o.frm +t1o.ibd +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +tt.ibd +ALTER TABLE t1o CHANGE foo_id FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ADD FULLTEXT INDEX(ct); +### files in MYSQL_DATA_DIR/test +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +FTS_AUX_INDEX_1.ibd +FTS_AUX_INDEX_2.ibd +FTS_AUX_INDEX_3.ibd +FTS_AUX_INDEX_4.ibd +FTS_AUX_INDEX_5.ibd +FTS_AUX_INDEX_6.ibd +FTS_AUX_BEING_DELETED.ibd +FTS_AUX_BEING_DELETED_CACHE.ibd +FTS_AUX_CONFIG.ibd +FTS_AUX_DELETED.ibd +FTS_AUX_DELETED_CACHE.ibd +sys_foreign.frm +sys_foreign.ibd +sys_indexes.frm +sys_indexes.ibd +sys_tables.frm +sys_tables.ibd +t1o.frm +t1o.ibd +tt.frm +tt.isl +### files in MYSQL_TMP_DIR/alt_dir/test +tt.ibd +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL; +ERROR HY000: Index 'FTS_DOC_ID_INDEX' is of wrong type for an InnoDB FULLTEXT index +DROP TABLE sys_indexes; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +SELECT i.NAME,i.POS,i.MTYPE,i.PRTYPE,i.LEN +FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +NAME POS MTYPE PRTYPE LEN +FTS_DOC_ID 0 6 1800 8 +c2 1 6 1027 4 +ct 2 5 524540 10 +SELECT si.NAME,i.POS,i.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS i +INNER JOIN sys_indexes si ON i.INDEX_ID=si.INDEX_ID; +NAME POS NAME +PRIMARY 0 FTS_DOC_ID +FTS_DOC_ID_INDEX 0 FTS_DOC_ID +ct 0 ct +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; +ID FOR_COL_NAME REF_COL_NAME POS +# +# Cleanup +# +DROP TABLE tt, t1o, sys_tables, sys_indexes, sys_foreign; +### files in MYSQL_DATA_DIR/test +### files in MYSQL_TMP_DIR/alt_dir/test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_zip_innochecksum2.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_zip_innochecksum2.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_zip_innochecksum2.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_zip_innochecksum2.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,160 @@ +SET GLOBAL innodb_compression_level=0; +SELECT @@innodb_compression_level; +@@innodb_compression_level +0 +CREATE TABLE t1 (j LONGBLOB) ENGINE = InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; +INSERT INTO t1 VALUES (repeat('abcdefghijklmnopqrstuvwxyz',200)); +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +# stop the server + +Variables (--variable-name=value) +and boolean options {FALSE|TRUE} Value (after reading options) +--------------------------------- ---------------------------------------- +verbose TRUE +debug FALSE +count FALSE +start-page 0 +end-page 0 +page 0 +strict-check crc32 +no-check FALSE +allow-mismatches 0 +write crc32 +page-type-summary FALSE +page-type-dump MYSQLTEST_VARDIR/tmp/dump.txt +per-page-details FALSE +log (No default value) +leaf FALSE +merge 0 +[1]:# check the both short and long options for "help" +[2]:# Run the innochecksum when file isn't provided. +# It will print the innochecksum usage similar to --help option. +innochecksum Ver #.#.# +Copyright (c) YEAR, YEAR , Oracle, MariaDB Corporation Ab and others. + +InnoDB offline file checksum utility. +Usage: innochecksum [-c] [-s ] [-e ] [-p ] [-i] [-v] [-a ] [-n] [-C ] [-w ] [-S] [-D ] [-l ] [-l] [-m ] + -?, --help Displays this help and exits. + -I, --info Synonym for --help. + -V, --version Displays version information and exits. + -v, --verbose Verbose (prints progress every 5 seconds). + -c, --count Print the count of pages in the file and exits. + -s, --start-page=# Start on this page number (0 based). + -e, --end-page=# End at this page number (0 based). + -p, --page=# Check only this page (0 based). + -C, --strict-check=name + Specify the strict checksum algorithm by the user.. One + of: crc32, crc32, innodb, innodb, none, none + -n, --no-check Ignore the checksum verification. + -a, --allow-mismatches=# + Maximum checksum mismatch allowed. + -w, --write=name Rewrite the checksum algorithm by the user.. One of: + crc32, crc32, innodb, innodb, none, none + -S, --page-type-summary + Display a count of each page type in a tablespace. + -D, --page-type-dump=name + Dump the page type info for each page in a tablespace. + -i, --per-page-details + Print out per-page detail information. + -l, --log=name log output. + -f, --leaf Examine leaf index pages + -m, --merge=# leaf page count if merge given number of consecutive + pages + +Variables (--variable-name=value) +and boolean options {FALSE|TRUE} Value (after reading options) +--------------------------------- ---------------------------------------- +verbose FALSE +count FALSE +start-page 0 +end-page 0 +page 0 +strict-check crc32 +no-check FALSE +allow-mismatches 0 +write crc32 +page-type-summary FALSE +page-type-dump (No default value) +per-page-details FALSE +log (No default value) +leaf FALSE +merge 0 +[3]:# check the both short and long options for "count" and exit +Number of pages:# +Number of pages:# +[4]:# Print the version of innochecksum and exit +innochecksum Ver #.#.## Restart the DB server +DROP TABLE t1; +[5]:# Check the innochecksum for compressed table t1 with different key_block_size +# Test for KEY_BLOCK_SIZE=1 +===> Testing size=1 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +# Test for KEY_BLOCK_SIZE=2 +===> Testing size=2 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +# Test for for KEY_BLOCK_SIZE=4 +===> Testing size=4 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +set innodb_strict_mode=off; +# Test for for KEY_BLOCK_SIZE=8 +===> Testing size=8 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +set innodb_strict_mode=off; +# Test for KEY_BLOCK_SIZE=16 +===> Testing size=16 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +# Test[5] completed diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_zip_innochecksum3.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_zip_innochecksum3.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_zip_innochecksum3.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_zip_innochecksum3.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,227 @@ +# Set the environmental variables +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to.*"); +[1]: Further Test are for rewrite checksum (innodb|crc32|none) for all ibd file & start the server. +CREATE TABLE tab1 (pk INTEGER NOT NULL PRIMARY KEY, +linestring_key GEOMETRY NOT NULL, +linestring_nokey GEOMETRY NOT NULL) +ENGINE=InnoDB ; +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (1, ST_GeomFromText('POINT(10 10) '), ST_GeomFromText('POINT(10 10) ')); +CREATE INDEX linestring_index ON tab1(linestring_nokey(5)); +ALTER TABLE tab1 ADD KEY (linestring_key(5)); +# create a compressed table +CREATE TABLE tab2(col_1 CHAR (255) , +col_2 VARCHAR (255), col_3 longtext, +col_4 longtext,col_5 longtext, +col_6 longtext , col_7 int ) +engine = innodb row_format=compressed key_block_size=4; +CREATE INDEX idx1 ON tab2(col_3(10)); +CREATE INDEX idx2 ON tab2(col_4(10)); +CREATE INDEX idx3 ON tab2(col_5(10)); +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,5); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,4); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,3); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,2); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,1); +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[1(a)]: Rewrite into new checksum=InnoDB for all *.ibd file and ibdata1 +: start the server with innodb_checksum_algorithm=strict_innodb +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (2, ST_GeomFromText('LINESTRING(10 10,20 20,30 30)'), ST_GeomFromText('LINESTRING(10 10,20 20,30 30)')); +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,6); +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[1(b)]: Rewrite into new checksum=crc32 for all *.ibd file and ibdata1 +# start the server with innodb_checksum_algorithm=strict_crc32 +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (3, ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))'), +ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))')); +SET @col_1 = repeat('g', 5); +SET @col_2 = repeat('h', 20); +SET @col_3 = repeat('i', 100); +SET @col_4 = repeat('j', 100); +SET @col_5 = repeat('k', 100); +SET @col_6 = repeat('l', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,7); +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[1(c)]: Rewrite into new checksum=none for all *.ibd file and ibdata1 +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (4, ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) '), ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) ')); +SET @col_1 = repeat('m', 5); +SET @col_2 = repeat('n', 20); +SET @col_3 = repeat('o', 100); +SET @col_4 = repeat('p', 100); +SET @col_5 = repeat('q', 100); +SET @col_6 = repeat('r', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,8); +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[2]: Check the page type summary with shortform for tab1.ibd + +File::tab#.ibd +================PAGE TYPE SUMMARY============== +#PAGE_COUNT PAGE_TYPE +=============================================== + # Index page + # Undo log page + # Inode page + # Insert buffer free list page + # Freshly allocated page + # Insert buffer bitmap + # System page + # Transaction system page + # File Space Header + # Extent descriptor page + # BLOB page + # Compressed BLOB page + # Page compressed page + # Page compressed encrypted page + # Other type of page + +=============================================== +Additional information: +Undo page type: # insert, # update, # other +Undo page state: # active, # cached, # to_free, # to_purge, # prepared, # other +index_id #pages #leaf_pages #recs_per_page #bytes_per_page +# # # # # +# # # # # +# # # # # + +index_id page_data_bytes_histgram(empty,...,oversized) +# # # # # # # # # # # # # +# # # # # # # # # # # # # +# # # # # # # # # # # # # +[3]: Check the page type summary with longform for tab1.ibd + +File::tab#.ibd +================PAGE TYPE SUMMARY============== +#PAGE_COUNT PAGE_TYPE +=============================================== + # Index page + # Undo log page + # Inode page + # Insert buffer free list page + # Freshly allocated page + # Insert buffer bitmap + # System page + # Transaction system page + # File Space Header + # Extent descriptor page + # BLOB page + # Compressed BLOB page + # Page compressed page + # Page compressed encrypted page + # Other type of page + +=============================================== +Additional information: +Undo page type: # insert, # update, # other +Undo page state: # active, # cached, # to_free, # to_purge, # prepared, # other +index_id #pages #leaf_pages #recs_per_page #bytes_per_page +# # # # # +# # # # # +# # # # # + +index_id page_data_bytes_histgram(empty,...,oversized) +# # # # # # # # # # # # # +# # # # # # # # # # # # # +# # # # # # # # # # # # # +[4]: Page type dump for with longform for tab1.ibd +# Print the contents stored in dump.txt + + +Filename::tab#.ibd +============================================================================== + PAGE_NO | PAGE_TYPE | EXTRA INFO +============================================================================== +#::# | File Space Header | - +#::# | Insert Buffer Bitmap | - +#::# | Inode page | - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Freshly allocated page | - +#::# | Freshly allocated page | - +# Variables used by page type dump for ibdata1 + +Variables (--variable-name=value) +and boolean options {FALSE|TRUE} Value (after reading options) +--------------------------------- ---------------------------------------- +verbose TRUE +count FALSE +start-page 0 +end-page 0 +page 0 +strict-check crc32 +no-check FALSE +allow-mismatches 0 +write crc32 +page-type-summary FALSE +page-type-dump MYSQLTEST_VARDIR/tmp/dump.txt +per-page-details FALSE +log (No default value) +leaf FALSE +merge 0 +[5]: Page type dump for with shortform for tab1.ibd + + +Filename::tab#.ibd +============================================================================== + PAGE_NO | PAGE_TYPE | EXTRA INFO +============================================================================== +#::# | File Space Header | - +#::# | Insert Buffer Bitmap | - +#::# | Inode page | - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Freshly allocated page | - +#::# | Freshly allocated page | - +[6]: check the valid lower bound values for option +# allow-mismatches,page,start-page,end-page +[9]: check the both short and long options "page" and "start-page" when +# seek value is larger than file size. +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +[34]: check the invalid upper bound values for options, allow-mismatches, end-page, start-page and page. +# innochecksum will fail with error code: 1 +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +DROP TABLE tab1,tab2; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_zip_innochecksum.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_zip_innochecksum.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/innodb_zip_innochecksum.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/innodb_zip_innochecksum.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,91 @@ +# Set the environmental variables +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: Warning: database page corruption or a failed"); +CREATE TABLE tab1(c1 INT PRIMARY KEY,c2 VARCHAR(20)) ENGINE=InnoDB; +CREATE INDEX idx1 ON tab1(c2(10)); +INSERT INTO tab1 VALUES(1, 'Innochecksum InnoDB1'); +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +insert into t1 values(1,"i"); +insert into t1 values(2,"am"); +insert into t1 values(3,"compressed table"); +# Shutdown the Server +# Server Default checksum = innodb +[1b]: check the innochecksum without --strict-check +[2]: check the innochecksum with full form --strict-check=crc32 +[3]: check the innochecksum with short form -C crc32 +[4]: check the innochecksum with --no-check ignores algorithm check, warning is expected +FOUND /Error: --no-check must be associated with --write option./ in my_restart.err +[5]: check the innochecksum with short form --no-check ignores algorithm check, warning is expected +FOUND /Error: --no-check must be associated with --write option./ in my_restart.err +[6]: check the innochecksum with full form strict-check & no-check , an error is expected +FOUND /Error: --strict-check option cannot be used together with --no-check option./ in my_restart.err +[7]: check the innochecksum with short form strict-check & no-check , an error is expected +FOUND /Error: --strict-check option cannot be used together with --no-check option./ in my_restart.err +[8]: check the innochecksum with short & full form combination +# strict-check & no-check, an error is expected +FOUND /Error: --strict-check option cannot be used together with --no-check option./ in my_restart.err +[9]: check the innochecksum with full form --strict-check=innodb +[10]: check the innochecksum with full form --strict-check=none +# when server Default checksum=crc32 +[11]: check the innochecksum with short form -C innodb +# when server Default checksum=crc32 +[12]: check the innochecksum with short form -C none +# when server Default checksum=crc32 +[13]: check strict-check with invalid values +FOUND /Error while setting value \'strict_innodb\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_innodb\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_crc32\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_crc32\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_none\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_none\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'InnoBD\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'InnoBD\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'crc\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'no\' to \'strict-check\'/ in my_restart.err +[14a]: when server default checksum=crc32 rewrite new checksum=crc32 with innochecksum +# Also check the long form of write option. +[14b]: when server default checksum=crc32 rewrite new checksum=innodb with innochecksum +# Also check the long form of write option. +# start the server with innodb_checksum_algorithm=InnoDB +INSERT INTO tab1 VALUES(2, 'Innochecksum CRC32'); +SELECT c1,c2 FROM tab1 order by c1,c2; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +# Stop the server +[15]: when server default checksum=crc32 rewrite new checksum=none with innochecksum +# Also check the short form of write option. +# Start the server with checksum algorithm=none +INSERT INTO tab1 VALUES(3, 'Innochecksum None'); +SELECT c1,c2 FROM tab1 order by c1,c2; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +3 Innochecksum None +DROP TABLE t1; +# Stop the server +[16]: rewrite into new checksum=crc32 with innochecksum +# Restart the DB server with innodb_checksum_algorithm=crc32 +SELECT * FROM tab1; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +3 Innochecksum None +DELETE FROM tab1 where c1=3; +SELECT c1,c2 FROM tab1 order by c1,c2; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +# Stop server +[17]: rewrite into new checksum=InnoDB +# Restart the DB server with innodb_checksum_algorithm=InnoDB +DELETE FROM tab1 where c1=2; +SELECT * FROM tab1; +c1 c2 +1 Innochecksum InnoDB1 +# Stop server +[18]:check Innochecksum with invalid write options +FOUND /Error while setting value \'strict_crc32\' to \'write\'/ in my_restart.err +FOUND /Error while setting value \'strict_innodb\' to \'write\'/ in my_restart.err +FOUND /Error while setting value \'crc23\' to \'write\'/ in my_restart.err +DROP TABLE tab1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/recovery_shutdown.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/recovery_shutdown.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/recovery_shutdown.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/recovery_shutdown.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,56 @@ +# +# MDEV-13797 InnoDB may hang if shutdown is initiated soon after startup +# while rolling back recovered incomplete transactions +# +CREATE TABLE t (a INT) ENGINE=InnoDB; +BEGIN; +COMMIT; +CREATE TABLE t8 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t8 (a) SELECT NULL FROM t; +UPDATE t8 SET a=a+100, b=a; +DELETE FROM t8; +CREATE TABLE t7 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t7 (a) SELECT NULL FROM t; +UPDATE t7 SET a=a+100, b=a; +DELETE FROM t7; +CREATE TABLE t6 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t6 (a) SELECT NULL FROM t; +UPDATE t6 SET a=a+100, b=a; +DELETE FROM t6; +CREATE TABLE t5 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t5 (a) SELECT NULL FROM t; +UPDATE t5 SET a=a+100, b=a; +DELETE FROM t5; +CREATE TABLE t4 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t4 (a) SELECT NULL FROM t; +UPDATE t4 SET a=a+100, b=a; +DELETE FROM t4; +CREATE TABLE t3 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t3 (a) SELECT NULL FROM t; +UPDATE t3 SET a=a+100, b=a; +DELETE FROM t3; +CREATE TABLE t2 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t2 (a) SELECT NULL FROM t; +UPDATE t2 SET a=a+100, b=a; +DELETE FROM t2; +CREATE TABLE t1 (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +INSERT INTO t1 (a) SELECT NULL FROM t; +UPDATE t1 SET a=a+100, b=a; +DELETE FROM t1; +INSERT INTO t1(a) SELECT NULL FROM t; +INSERT INTO t1(a) SELECT NULL FROM t1; +INSERT INTO t1(a) SELECT NULL FROM t1; +INSERT INTO t1(a) SELECT NULL FROM t1; +INSERT INTO t1(a) SELECT NULL FROM t1; +SET GLOBAL innodb_flush_log_at_trx_commit=1; +CREATE TABLE u(a SERIAL) ENGINE=INNODB; +# Kill and restart +DROP TABLE t,u; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/table_definition_cache_debug.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/table_definition_cache_debug.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/table_definition_cache_debug.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/table_definition_cache_debug.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,16 @@ +SET @save_tdc= @@GLOBAL.table_definition_cache; +SET @save_toc= @@GLOBAL.table_open_cache; +SET GLOBAL table_definition_cache= 400; +SET GLOBAL table_open_cache= 1024; +CREATE TABLE to_be_evicted(a INT PRIMARY KEY, b INT NOT NULL) ENGINE=InnoDB; +INSERT INTO to_be_evicted VALUES(1,2),(2,1); +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL scanned WAIT_FOR got_duplicate'; +ALTER TABLE to_be_evicted ADD UNIQUE INDEX(b); +SET DEBUG_SYNC = 'now WAIT_FOR scanned'; +BEGIN; +INSERT INTO to_be_evicted VALUES(3, 2); +SET DEBUG_SYNC = 'now SIGNAL got_duplicate'; +ERROR 23000: Duplicate entry '2' for key 'b' +COMMIT; +SET DEBUG_SYNC = RESET; +FLUSH TABLES; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/undo_log.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/undo_log.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/undo_log.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/undo_log.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,142 @@ +CREATE TABLE test_tab ( +a_str_18 mediumtext, +b_str_3 varchar(32) DEFAULT NULL, +a_str_13 mediumtext, +b_str_5 varchar(40) DEFAULT NULL, +b_str_6 varchar(50) DEFAULT NULL, +b_str_7 char(32) DEFAULT NULL, +b_str_8 varchar(32) DEFAULT NULL, +b_str_9 varchar(255) DEFAULT NULL, +a_str_28 char(255) DEFAULT NULL, +a_str_27 varchar(255) DEFAULT NULL, +b_str_10 varchar(32) DEFAULT NULL, +a_str_26 varchar(255) DEFAULT NULL, +a_str_6 varchar(50) DEFAULT NULL, +b_str_11 varchar(32) DEFAULT NULL, +b_str_12 varchar(255) DEFAULT NULL, +b_str_13 char(32) DEFAULT NULL, +b_str_14 varchar(32) DEFAULT NULL, +b_str_15 char(32) DEFAULT NULL, +b_str_16 char(32) DEFAULT NULL, +b_str_17 varchar(32) DEFAULT NULL, +b_str_18 varchar(32) DEFAULT NULL, +a_str_25 varchar(40) DEFAULT NULL, +b_str_19 varchar(255) DEFAULT NULL, +a_str_23 varchar(40) DEFAULT NULL, +b_str_20 varchar(32) DEFAULT NULL, +a_str_21 varchar(255) DEFAULT NULL, +a_str_20 varchar(255) DEFAULT NULL, +a_str_39 varchar(255) DEFAULT NULL, +a_str_38 varchar(255) DEFAULT NULL, +a_str_37 varchar(255) DEFAULT NULL, +b_str_21 char(32) DEFAULT NULL, +b_str_23 varchar(80) DEFAULT NULL, +b_str_24 varchar(32) DEFAULT NULL, +b_str_25 varchar(32) DEFAULT NULL, +b_str_26 char(32) NOT NULL DEFAULT '', +b_str_27 varchar(255) DEFAULT NULL, +a_str_36 varchar(255) DEFAULT NULL, +a_str_33 varchar(100) DEFAULT NULL, +a_ref_10 char(32) DEFAULT NULL, +b_str_28 char(32) DEFAULT NULL, +b_str_29 char(32) DEFAULT NULL, +a_ref_6 char(32) DEFAULT NULL, +a_ref_12 varchar(32) DEFAULT NULL, +a_ref_11 varchar(32) DEFAULT NULL, +a_str_49 varchar(40) DEFAULT NULL, +b_str_30 varchar(32) DEFAULT NULL, +a_ref_3 varchar(32) DEFAULT NULL, +a_str_48 varchar(40) DEFAULT NULL, +a_ref_1 char(32) DEFAULT NULL, +b_str_31 varchar(32) DEFAULT NULL, +b_str_32 varchar(255) DEFAULT NULL, +b_str_33 char(32) DEFAULT NULL, +b_str_34 varchar(32) DEFAULT NULL, +a_str_47 varchar(40) DEFAULT NULL, +b_str_36 varchar(255) DEFAULT NULL, +a_str_46 varchar(40) DEFAULT NULL, +a_str_45 varchar(255) DEFAULT NULL, +b_str_38 varchar(32) DEFAULT NULL, +b_str_39 char(32) DEFAULT NULL, +b_str_40 varchar(32) DEFAULT NULL, +a_str_41 varchar(255) DEFAULT NULL, +b_str_41 varchar(32) DEFAULT NULL, +PRIMARY KEY (b_str_26), +UNIQUE KEY a_str_47 (a_str_47), +UNIQUE KEY a_str_49 (a_str_49), +UNIQUE KEY a_str_33 (a_str_33), +UNIQUE KEY a_str_46 (a_str_46), +UNIQUE KEY a_str_48 (a_str_48), +KEY b_str_18 (b_str_18), +KEY a_str_26 (a_str_26), +KEY b_str_27 (b_str_27,b_str_19), +KEY b_str_41 (b_str_41), +KEY b_str_15 (b_str_15), +KEY a_str_20 (a_str_20), +KEY b_str_17 (b_str_17), +KEY b_str_40 (b_str_40), +KEY b_str_24 (b_str_24), +KEY b_str_10 (b_str_10), +KEY b_str_16 (b_str_16), +KEY b_str_29 (b_str_29), +KEY a_str_41 (a_str_41), +KEY b_str_7 (b_str_7), +KEY a_str_45 (a_str_45), +KEY a_str_28 (a_str_28), +KEY a_str_37 (a_str_37), +KEY b_str_6 (b_str_6), +KEY a_ref_6 (a_ref_6), +KEY b_str_34 (b_str_34), +KEY b_str_38 (b_str_38), +KEY a_ref_10 (a_ref_10), +KEY b_str_21 (b_str_21), +KEY b_str_23 (b_str_23,b_str_19), +KEY b_str_33 (b_str_33), +KEY a_ref_12 (a_ref_12), +KEY a_str_18 (a_str_18(255)), +KEY a_str_39 (a_str_39), +KEY a_str_27 (a_str_27), +KEY a_str_25 (a_str_25), +KEY b_str_9 (b_str_9), +KEY a_str_23 (a_str_23), +KEY b_str_8 (b_str_8), +KEY a_str_21 (a_str_21), +KEY b_str_3 (b_str_3), +KEY b_str_30 (b_str_30), +KEY b_str_12 (b_str_12), +KEY b_str_25 (b_str_25), +KEY b_str_13 (b_str_13), +KEY a_str_38 (a_str_38), +KEY a_str_13 (a_str_13(255)), +KEY a_str_36 (a_str_36), +KEY b_str_28 (b_str_28), +KEY b_str_19 (b_str_19), +KEY b_str_11 (b_str_11), +KEY a_ref_1 (a_ref_1), +KEY b_str_20 (b_str_20), +KEY b_str_14 (b_str_14), +KEY a_ref_3 (a_ref_3), +KEY b_str_39 (b_str_39), +KEY b_str_32 (b_str_32), +KEY a_str_6 (a_str_6), +KEY b_str_5 (b_str_5), +KEY b_str_31 (b_str_31), +KEY a_ref_11 (a_ref_11) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; +BEGIN; +INSERT INTO test_tab (b_str_26, a_str_13, a_str_18) VALUES +('a', REPEAT('f',4031), REPEAT('g', 4031)); +UPDATE test_tab SET a_str_13=REPEAT('h',4032), a_str_18=REPEAT('i',4032); +SELECT 'Reducing length to 4030'; +Reducing length to 4030 +Reducing length to 4030 +UPDATE test_tab SET a_str_13=REPEAT('j',4030), a_str_18=REPEAT('k',4030); +UPDATE test_tab SET a_str_13=REPEAT('l',4031), a_str_18=REPEAT('m',4031); +ROLLBACK; +SELECT COUNT(*) FROM test_tab; +COUNT(*) +0 +CHECK TABLE test_tab; +Table Op Msg_type Msg_text +test.test_tab check status OK +DROP TABLE test_tab; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/xa_recovery.result mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/xa_recovery.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/r/xa_recovery.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/r/xa_recovery.result 2017-12-21 15:48:47.000000000 +0000 @@ -4,7 +4,7 @@ UPDATE t1 set a=2; XA END 'x'; XA PREPARE 'x'; -# Kill and restart +# Kill and restart: --innodb-force-recovery=2 SELECT * FROM t1 LOCK IN SHARE MODE; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT * FROM t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/101_compatibility.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/101_compatibility.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/101_compatibility.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/101_compatibility.test 2017-12-21 15:48:47.000000000 +0000 @@ -28,7 +28,7 @@ --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR EVAL CREATE TABLE tdd(a INT) ENGINE=InnoDB, DATA DIRECTORY='$MYSQL_TMP_DIR'; -CREATE TABLE tp(a INT) ENGINE=InnoDB page_compressed=1; +CREATE TABLE tp(a INT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC PAGE_COMPRESSED=1; CREATE TABLE ti(a INT) ENGINE=InnoDB; FLUSH TABLES ti FOR EXPORT; perl; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/alter_rename_existing.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/alter_rename_existing.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/alter_rename_existing.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/alter_rename_existing.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,93 @@ +--echo # +--echo # Show what happens during ALTER TABLE when an existing file +--echo # exists in the target location. +--echo # +--echo # Bug #19218794: IF TABLESPACE EXISTS, CAN'T CREATE TABLE, +--echo # BUT CAN ALTER ENGINE=INNODB +--echo # + +--source include/have_innodb.inc + +--disable_query_log +LET $MYSQLD_DATADIR = `select @@datadir`; +SET @old_innodb_file_per_table = @@innodb_file_per_table; +--enable_query_log + +CREATE TABLE t1 (a SERIAL, b CHAR(10)) ENGINE=Memory; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); + +--echo # +--echo # Create a file called MYSQLD_DATADIR/test/t1.ibd +--exec echo "This is not t1.ibd" > $MYSQLD_DATADIR/test/t1.ibd + +--echo # Directory listing of test/*.ibd +--echo # +--list_files $MYSQLD_DATADIR/test/ *.ibd + +--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/ +--error ER_ERROR_ON_RENAME +ALTER TABLE t1 ENGINE = InnoDB; + +--echo # +--echo # Move the file to InnoDB as t2 +--echo # +ALTER TABLE t1 RENAME TO t2, ENGINE = INNODB; +SHOW CREATE TABLE t2; +SELECT * from t2; + +--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/ +--error ER_ERROR_ON_RENAME +ALTER TABLE t2 RENAME TO t1; + +--echo # +--echo # Create another t1, but in the system tablespace. +--echo # +SET GLOBAL innodb_file_per_table=OFF; +CREATE TABLE t1 (a SERIAL, b CHAR(20)) ENGINE=InnoDB; +INSERT INTO t1(b) VALUES('one'), ('two'), ('three'); +SHOW CREATE TABLE t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; + +--echo # +--echo # ALTER TABLE from system tablespace to system tablespace +--echo # +ALTER TABLE t1 ADD COLUMN c INT, ALGORITHM=INPLACE; +ALTER TABLE t1 ADD COLUMN d INT, ALGORITHM=COPY; + +--echo # +--echo # Try to move t1 from the system tablespace to a file-per-table +--echo # while a blocking t1.ibd file exists. +--echo # +SET GLOBAL innodb_file_per_table=ON; +--replace_regex /$MYSQLD_DATADIR/MYSQLD_DATADIR/ +--error ER_TABLESPACE_EXISTS +ALTER TABLE t1 ADD COLUMN e1 INT, ALGORITHM=INPLACE; +--replace_regex /Error on rename of '.*' to '.*'/Error on rename of 'OLD_FILE_NAME' to 'NEW_FILE_NAME'/ +--error ER_ERROR_ON_RENAME +ALTER TABLE t1 ADD COLUMN e2 INT, ALGORITHM=COPY; + +--echo # +--echo # Delete the blocking file called MYSQLD_DATADIR/test/t1.ibd +--remove_file $MYSQLD_DATADIR/test/t1.ibd + +--echo # Move t1 to file-per-table using ALGORITHM=INPLACE with no blocking t1.ibd. +--echo # +ALTER TABLE t1 ADD COLUMN e INT, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; + +DROP TABLE t1; + +--echo # +--echo # Rename t2.ibd to t1.ibd. +--echo # +ALTER TABLE t2 RENAME TO t1; +SELECT name, space=0 FROM information_schema.innodb_sys_tables WHERE name = 'test/t1'; +SELECT * from t1; + +DROP TABLE t1; + +--disable_query_log +call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot rename '.*' to '.*' for space ID .* because the target file exists. Remove the target file and try again"); +SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; +--enable_query_log diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/create-index-debug.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/create-index-debug.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/create-index-debug.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/create-index-debug.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,34 @@ +--source include/have_innodb.inc +--source include/have_innodb_16k.inc +--source include/have_debug.inc + +SET @saved_debug_dbug = @@SESSION.debug_dbug; + +--echo # +--echo #BUG#21326304 INNODB ONLINE ALTER TABLE ENDS IN CRASH ON DISK FULL +--echo # +CREATE TABLE t1(f1 CHAR(255) NOT NULL, f2 CHAR(255) NOT NULL, f3 +CHAR(255) NOT NULL, f4 CHAR(255) NOT NULL, f5 CHAR(255) NOT NULL,f6 +CHAR(255) NOT NULL, f7 CHAR(255) NOT NULL, f8 CHAR(255) NOT NULL,f9 +CHAR(255) NOT NULL, f10 CHAR(255) NOT NULL, f11 CHAR(255) NOT NULL,f12 +CHAR(255) NOT NULL, f13 CHAR(255) NOT NULL, f14 CHAR(255) NOT NULL,f15 +CHAR(255) NOT NULL, f16 CHAR(255) NOT NULL, f17 CHAR(255) NOT NULL,f18 +CHAR(255) NOT NULL) +ENGINE=INNODB ROW_FORMAT=DYNAMIC; + +INSERT INTO t1 +VALUES('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r'); + +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; +INSERT INTO t1 SELECT * FROM t1; + +SET debug_dbug = '+d,disk_is_full'; + +--error ER_RECORD_FILE_FULL +ALTER TABLE t1 FORCE, ALGORITHM=INPLACE; + +SET debug_dbug= @saved_debug_dbug; + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/index_tree_operation.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/index_tree_operation.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/index_tree_operation.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/index_tree_operation.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--innodb-sys-tablespaces diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/index_tree_operation.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/index_tree_operation.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/index_tree_operation.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/index_tree_operation.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,74 @@ +-- source include/have_innodb.inc +-- source include/have_innodb_16k.inc +--echo # +--echo # Bug#15923864 (Bug#67718): +--echo # INNODB DRASTICALLY UNDER-FILLS PAGES IN CERTAIN CONDITIONS +--echo # +# InnoDB should try to insert to the next page before split, +# if the insert record for split_and_insert is last of the page. +# Otherwise, the follwing records 999,998,997 cause each page per record. +# + +--disable_query_log +SET @old_innodb_file_per_table = @@innodb_file_per_table; +--enable_query_log + +SET GLOBAL innodb_file_per_table=ON; + +CREATE TABLE t1 (a BIGINT PRIMARY KEY, b VARCHAR(4096)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (0, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1000, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1001, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1002, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (1, REPEAT('a', 4096)); +INSERT INTO t1 VALUES (2, REPEAT('a', 4096)); + +# | 0, 1, 2 | 1000, 1001, 1002| + +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; + +INSERT INTO t1 VALUES (999, REPEAT('a', 4096)); + +# try to insert '999' to the end of '0,1,2' page, but no space +# the next '1000,1001,1002' page has also no space. +# | 0, 1, 2 | 999 | 1000, 1001, 1002| + +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; + + +INSERT INTO t1 VALUES (998, REPEAT('a', 4096)); + +# try to insert to the end of '0,1,2' page, but no space +# the next '998' page has space. +# | 0, 1, 2 | 998, 999 | 1000, 1001, 1002| + +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; + +INSERT INTO t1 VALUES (997, REPEAT('a', 4096)); + +# same +# | 0, 1, 2 | 997, 998, 999 | 1000, 1001, 1002| + +SELECT page_number, number_records +FROM information_schema.innodb_sys_tablespaces s1, +information_schema.innodb_buffer_page s2 +WHERE s1.space = s2.space AND name = 'test/t1' +AND page_type = "INDEX" ORDER BY page_number; + +DROP TABLE t1; + +--disable_query_log +SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; +--enable_query_log diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-16k.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-16k.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-16k.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-16k.test 2017-12-21 15:48:47.000000000 +0000 @@ -328,10 +328,10 @@ # because the UNDO records will be smaller. CREATE INDEX t1f ON t1 (f(767)); ---error 1713 +BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d,f=@d,g=@d,h=@d,i=@d,j=@d, k=@d,l=@d,m=@d,n=@d,o=@d,p=@d,q=@d,r=@d,s=@d,t=@d,u=@d; - +ROLLBACK; BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d; UPDATE t1 SET f=@d,g=@d,h=@d,i=@d,j=@d,k=@d,l=@d,m=@d, @@ -371,8 +371,9 @@ # that CANNOT be updated. CREATE INDEX t1t ON t1 (t(767)); ---error 1713 +BEGIN; UPDATE t1 SET t=@e; +ROLLBACK; # The function dict_index_too_big_for_undo() prevents us from adding # one more index. But it is too late. The record is already too big. @@ -515,9 +516,10 @@ COMMIT; # The following used to cause a hang while doing infinite undo log allocation. ---error 1713 +BEGIN; UPDATE bug12547647 SET c = REPEAT('b',16928); SHOW WARNINGS; +ROLLBACK; DROP TABLE bug12547647; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-32k-crash-master.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-32k-crash-master.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-32k-crash-master.opt 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-32k-crash-master.opt 2017-12-21 15:48:47.000000000 +0000 @@ -1 +1,5 @@ ---default_storage_engine=InnoDB --innodb-buffer-pool-size=24M +--default_storage_engine=InnoDB +--innodb-buffer-pool-size=32M +--innodb-log-file-size=32M +--innodb-page-size=32K + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-32k-master.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-32k-master.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-32k-master.opt 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-32k-master.opt 2017-12-21 15:48:47.000000000 +0000 @@ -1,3 +1,4 @@ --default_storage_engine=InnoDB ---innodb-buffer-pool-size=24M - +--innodb-page-size=32K +--innodb-log-file-size=32M +--innodb-buffer-pool-size=32M diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-32k.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-32k.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-32k.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-32k.test 2017-12-21 15:48:47.000000000 +0000 @@ -294,13 +294,14 @@ CREATE INDEX t1f17 ON t1 (v(767)); ---error 1713 +BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d,f=@d,g=@d,h=@d,i=@d,j=@d, k=@d,l=@d,m=@d,n=@d,o=@d,p=@d,q=@d,r=@d,s=@d,t=@d,u=@d, v=@d,w=@d,x=@d,y=@d,z=@d, aa=@d,ba=@d,ca=@d,da=@d,ea=@d,fa=@d,ga=@d,ha=@d,ia=@d,ja=@d, ka=@d,la=@d,ma=@d,na=@d,oa=@d,pa=@d,qa=@d,ra=@d,sa=@d,ta=@d,ua=@d, va=@d,wa=@d,xa=@d,ya=@d,za=@d; +ROLLBACK; BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-64k-crash-master.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-64k-crash-master.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-64k-crash-master.opt 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-64k-crash-master.opt 2017-12-21 15:48:47.000000000 +0000 @@ -1 +1,5 @@ ---default_storage_engine=InnoDB --innodb-buffer-pool-size=24M +--default_storage_engine=InnoDB +--innodb-buffer-pool-size=32M +--innodb-page-size=64K +--innodb-log-file-size=32M + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-64k-master.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-64k-master.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-64k-master.opt 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-64k-master.opt 2017-12-21 15:48:47.000000000 +0000 @@ -1,3 +1,4 @@ --default_storage_engine=InnoDB ---innodb-buffer-pool-size=24M - +--innodb-buffer-pool-size=32M +--innodb-page-size=64K +--innodb-log-file-size=32M diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-64k.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-64k.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-64k.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-64k.test 2017-12-21 15:48:47.000000000 +0000 @@ -26,86 +26,23 @@ --echo # Test 4) The maximum row size is dependent upon the page size. SET SESSION innodb_strict_mode = ON; +SELECT @@innodb_strict_mode; -# Redundant table; 32698 bytes - -CREATE TABLE t1 ( -c01 char(200), c02 char(200), c03 char(200), c04 char(200), c05 char(200), -c06 char(200), c07 char(200), c08 char(200), c09 char(200), c10 char(200), -c11 char(200), c12 char(200), c13 char(200), c14 char(200), c15 char(200), -c16 char(200), c17 char(200), c18 char(200), c19 char(200), c20 char(200), -c21 char(200), c22 char(200), c23 char(200), c24 char(200), c25 char(200), -c26 char(200), c27 char(200), c28 char(200), c29 char(200), c30 char(200), -c31 char(200), c32 char(200), c33 char(200), c34 char(200), c35 char(200), -c36 char(200), c37 char(200), c38 char(200), c39 char(200), c40 char(200), -c41 char(200), c42 char(200), c43 char(200), c44 char(200), c45 char(200), -c46 char(200), c47 char(200), c48 char(200), c49 char(200), c50 char(200), -c51 char(200), c52 char(200), c53 char(200), c54 char(200), c55 char(200), -c56 char(200), c57 char(200), c58 char(200), c59 char(200), c60 char(200), -c61 char(200), c62 char(200), c63 char(200), c64 char(200), c65 char(200), -c66 char(200), c67 char(200), c68 char(200), c69 char(200), c70 char(200), -c71 char(200), c72 char(200), c73 char(200), c74 char(200), c75 char(200), -c76 char(200), c77 char(200), c78 char(200), c79 char(200), c80 char(200), -c101 char(200), c102 char(200), c103 char(200), c104 char(200), c105 char(200), -c106 char(200), c107 char(200), c108 char(200), c109 char(200), c110 char(200), -c111 char(200), c112 char(200), c113 char(200), c114 char(200), c115 char(200), -c116 char(200), c117 char(200), c118 char(200), c119 char(200), c120 char(200), -c121 char(200), c122 char(200), c123 char(200), c124 char(200), c125 char(200), -c126 char(200), c127 char(200), c128 char(200), c129 char(200), c130 char(200), -c131 char(200), c132 char(200), c133 char(200), c134 char(200), c135 char(200), -c136 char(200), c137 char(200), c138 char(200), c139 char(200), c140 char(200), -c141 char(200), c142 char(200), c143 char(200), c144 char(200), c145 char(200), -c146 char(200), c147 char(200), c148 char(200), c149 char(200), c150 char(200), -c151 char(200), c152 char(200), c153 char(200), c154 char(200), c155 char(200), -c156 char(200), c157 char(200), c158 char(200), c159 char(200), c160 char(200), -c161 char(200), c162 char(200), c163 char(200), c164 char(200), c165 char(200), -c166 char(200), c167 char(200), c168 char(200), c169 char(200), c170 char(200), -c171 char(200), c172 char(200), c173 char(200), c174 char(200), c175 char(200), -c176 char(200), c177 char(200), c178 char(200), c179 char(200), c180 char(200), -c190 char(200), -c81 char(143) -) ROW_FORMAT=redundant; - -DROP TABLE t1; - ---replace_regex /> [0-9]*/> max_row_size/ +# Redundant table --error ER_TOO_BIG_ROWSIZE -CREATE TABLE t1 ( -c01 char(200), c02 char(200), c03 char(200), c04 char(200), c05 char(200), -c06 char(200), c07 char(200), c08 char(200), c09 char(200), c10 char(200), -c11 char(200), c12 char(200), c13 char(200), c14 char(200), c15 char(200), -c16 char(200), c17 char(200), c18 char(200), c19 char(200), c20 char(200), -c21 char(200), c22 char(200), c23 char(200), c24 char(200), c25 char(200), -c26 char(200), c27 char(200), c28 char(200), c29 char(200), c30 char(200), -c31 char(200), c32 char(200), c33 char(200), c34 char(200), c35 char(200), -c36 char(200), c37 char(200), c38 char(200), c39 char(200), c40 char(200), -c41 char(200), c42 char(200), c43 char(200), c44 char(200), c45 char(200), -c46 char(200), c47 char(200), c48 char(200), c49 char(200), c50 char(200), -c51 char(200), c52 char(200), c53 char(200), c54 char(200), c55 char(200), -c56 char(200), c57 char(200), c58 char(200), c59 char(200), c60 char(200), -c61 char(200), c62 char(200), c63 char(200), c64 char(200), c65 char(200), -c66 char(200), c67 char(200), c68 char(200), c69 char(200), c70 char(200), -c71 char(200), c72 char(200), c73 char(200), c74 char(200), c75 char(200), -c76 char(200), c77 char(200), c78 char(200), c79 char(200), c80 char(200), -c101 char(200), c102 char(200), c103 char(200), c104 char(200), c105 char(200), -c106 char(200), c107 char(200), c108 char(200), c109 char(200), c110 char(200), -c111 char(200), c112 char(200), c113 char(200), c114 char(200), c115 char(200), -c116 char(200), c117 char(200), c118 char(200), c119 char(200), c120 char(200), -c121 char(200), c122 char(200), c123 char(200), c124 char(200), c125 char(200), -c126 char(200), c127 char(200), c128 char(200), c129 char(200), c130 char(200), -c131 char(200), c132 char(200), c133 char(200), c134 char(200), c135 char(200), -c136 char(200), c137 char(200), c138 char(200), c139 char(200), c140 char(200), -c141 char(200), c142 char(200), c143 char(200), c144 char(200), c145 char(200), -c146 char(200), c147 char(200), c148 char(200), c149 char(200), c150 char(200), -c151 char(200), c152 char(200), c153 char(200), c154 char(200), c155 char(200), -c156 char(200), c157 char(200), c158 char(200), c159 char(200), c160 char(200), -c161 char(200), c162 char(200), c163 char(200), c164 char(200), c165 char(200), -c166 char(200), c167 char(200), c168 char(200), c169 char(200), c170 char(200), -c171 char(200), c172 char(200), c173 char(200), c174 char(200), c175 char(200), -c176 char(200), c177 char(200), c178 char(200), c179 char(200), c180 char(200), -c190 char(200), -c81 char(144) -) ROW_FORMAT=redundant; +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +show warnings; # Compact table, 32701 bytes @@ -367,7 +304,7 @@ CREATE INDEX tg1f2 ON t1 (ia(767),ja(767)); ---error 1713 +BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d,f=@d,g=@d,h=@d,i=@d,j=@d, k=@d,l=@d,m=@d,n=@d,o=@d,p=@d,q=@d,r=@d,s=@d,t=@d,u=@d, v=@d,w=@d,x=@d,y=@d,z=@d, @@ -380,6 +317,7 @@ ac=@d,bc=@d,cc=@d,dc=@d,ec=@d,fc=@d,gc=@d,hc=@d,ic=@d,jc=@d, kc=@d,lc=@d,mc=@d,nc=@d,oc=@d,pc=@d,qc=@d,rc=@d,sc=@d,tc=@d,uc=@d, vc=@d,wc=@d,xc=@d,yc=@d,zc=@d; +ROLLBACK; BEGIN; UPDATE t1 SET a=@d,b=@d,c=@d,d=@d,e=@d; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter-autoinc.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter-autoinc.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter-autoinc.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter-autoinc.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,104 @@ +--source include/have_innodb.inc + +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES(347),(33101),(123),(45),(6); +# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on. +SET @old_sql_mode = @@sql_mode; +SET @@sql_mode = 'STRICT_TRANS_TABLES'; +ALTER TABLE t1 ADD PRIMARY KEY(a); +SET @@sql_mode = @old_sql_mode; + +# We cannot assign AUTO_INCREMENT values during online index creation. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, + LOCK=NONE; + +--error ER_WRONG_AUTO_KEY +ALTER TABLE t1 ADD id INT AUTO_INCREMENT; + +--error ER_WRONG_AUTO_KEY +ALTER TABLE t1 ADD id INT AUTO_INCREMENT, ADD INDEX(a, id); + +ALTER TABLE t1 ADD id INT NOT NULL, ADD INDEX(id, a); + +SELECT * FROM t1; + +# Test with a non-default increment and offset +SET AUTO_INCREMENT_INCREMENT = 5, AUTO_INCREMENT_OFFSET = 30; + +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, + DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=COPY; + +SHOW CREATE TABLE t1; + +# The autoinc next value should increase. It is not rolled back. +BEGIN; +INSERT INTO t1 VALUES(7,0); +SELECT * FROM t1; +ROLLBACK; + +SHOW CREATE TABLE t1; + +# We cannot assign AUTO_INCREMENT values during online index creation. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, + DROP COLUMN id, AUTO_INCREMENT = 42, LOCK=NONE; + +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, + DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=INPLACE; + +SELECT * FROM t1; +SHOW CREATE TABLE t1; + +INSERT INTO t1 SET a=123; +INSERT INTO t1 VALUES(-123,-45); + +ALTER TABLE t1 AUTO_INCREMENT = 75; + +INSERT INTO t1 SET a=123; +SELECT * FROM t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +# ALGORITHM=INPLACE should deliver identical results to ALGORITHM=COPY. +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES(347),(33101),(123),(45),(6); +ALTER TABLE t1 ADD PRIMARY KEY(a); + +ALTER TABLE t1 ADD id INT NOT NULL, ADD INDEX(id, a); + +SELECT * FROM t1; + +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, + DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=INPLACE; + +SHOW CREATE TABLE t1; + +# The autoinc next value should increase. It is not rolled back. +BEGIN; +INSERT INTO t1 VALUES(7,0); +SELECT * FROM t1; +ROLLBACK; + +SHOW CREATE TABLE t1; + +ALTER TABLE t1 DROP PRIMARY KEY, ADD id INT AUTO_INCREMENT PRIMARY KEY, + DROP COLUMN id, AUTO_INCREMENT = 42, ALGORITHM=COPY; + +SELECT * FROM t1; + +SHOW CREATE TABLE t1; + +INSERT INTO t1 SET a=123; +INSERT INTO t1 VALUES(-123,-45); + +ALTER TABLE t1 AUTO_INCREMENT = 75; + +INSERT INTO t1 SET a=123; +SELECT * FROM t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,3 @@ +--loose-innodb-sys-indexes +--loose-innodb-sys-columns +--loose-innodb-sys-fields diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter-table.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter-table.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter-table.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter-table.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,5 @@ --source include/innodb_page_size.inc +--source include/have_partition.inc # # MMDEV-8386: MariaDB creates very big tmp file and hangs on xtradb @@ -171,3 +172,35 @@ SHOW CREATE TABLE ticket; DROP TABLE ticket; + +# +# MDEV-13838: Wrong result after altering a partitioned table +# + +CREATE TABLE t ( +id bigint(20) unsigned NOT NULL auto_increment, +d date NOT NULL, +a bigint(20) unsigned NOT NULL, +b smallint(5) unsigned DEFAULT NULL, +PRIMARY KEY (id,d) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs STATS_SAMPLE_PAGES=2 +PARTITION BY RANGE COLUMNS(d) +( +PARTITION p20170914 VALUES LESS THAN ('2017-09-15') ENGINE = InnoDB, +PARTITION p99991231 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB); + +insert into t(d,a,b) values ('2017-09-15',rand()*10000,rand()*10); +insert into t(d,a,b) values ('2017-09-15',rand()*10000,rand()*10); + +replace into t(d,a,b) select '2017-09-15',rand()*10000,rand()*10 from t t1, t t2, t t3, t t4; + +select count(*) from t where d ='2017-09-15'; + +ALTER TABLE t CHANGE b c smallint(5) unsigned , ADD KEY idx_d_a (d, a); +SHOW CREATE TABLE t; +analyze table t; + +select count(*) from t where d ='2017-09-15'; +select count(*) from t force index(primary) where d ='2017-09-15'; + +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-alter.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-alter.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,483 @@ +--source include/have_innodb.inc + +SET NAMES utf8; + +CREATE TABLE t1 ( + c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, + INDEX(c2)) +ENGINE=InnoDB; + +INSERT INTO t1 SET c1=1; + +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME LIKE 'test/t%'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; + +CREATE TABLE t1p LIKE t1; + +CREATE TABLE t1c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3), + CONSTRAINT t1c2 FOREIGN KEY (c2) REFERENCES t1(c2), + CONSTRAINT t1c3 FOREIGN KEY (c3) REFERENCES t1p(c2)) +ENGINE=InnoDB; + +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i +WHERE FOR_NAME LIKE 'test/t%'; + +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; + +-- source suite/innodb/include/innodb_dict.inc + +SHOW CREATE TABLE t1; +ALTER TABLE t1 ALTER c2 DROP DEFAULT; +SHOW CREATE TABLE t1; + +-- source suite/innodb/include/innodb_dict.inc + +# These should be no-op. +ALTER TABLE t1 CHANGE c2 c2 INT AFTER c1; +ALTER TABLE t1 CHANGE c1 c1 INT FIRST; + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 CHANGE C2 c3 INT; + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 CHANGE c3 C INT; + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 CHANGE C Cöŀumň_TWO INT; + +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; + +-- source suite/innodb/include/innodb_dict.inc + +-- error ER_BAD_FIELD_ERROR +ALTER TABLE t1 CHANGE cöĿǖmň_two c3 INT; + +ALTER TABLE t1 CHANGE cÖĿUMŇ_two c3 INT, RENAME TO t3; + +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; + +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t1c; + +# The maximum column name length should be 64 characters. +--error ER_TOO_LONG_IDENT +ALTER TABLE t3 CHANGE c3 +`12345678901234567890123456789012345678901234567890123456789012345` INT; +ALTER TABLE t3 CHANGE c3 +`1234567890123456789012345678901234567890123456789012345678901234` INT; +SHOW CREATE TABLE t3; + +# Test the length limit with non-ASCII utf-8 characters. +--error ER_TOO_LONG_IDENT +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿偀` INT; +--error ER_TOO_LONG_IDENT +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿ä` INT; +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾ä` INT; + +# check that the rename is case-insensitive (note the upper-case ä at end) +ALTER TABLE t3 CHANGE +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾Ä` +c3 INT; + +# test with 4-byte UTF-8 (should be disallowed) +--error ER_INVALID_CHARACTER_STRING +ALTER TABLE t3 CHANGE c3 𐌀𐌁𐌂𐌃𐌄𐌅𐌆𐌇𐌈𐌉𐌊𐌋𐌌𐌍𐌎𐌏𐌐𐌑𐌒𐌓𐌔𐌕𐌖𐌗𐌘𐌙𐌚𐌛𐌜 INT; +--error ER_INVALID_CHARACTER_STRING +ALTER TABLE t3 CHANGE c3 😲 INT; + +ALTER TABLE t3 RENAME TO t2; + +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; + +SHOW CREATE TABLE t2; + +RENAME TABLE t2 TO t1; + +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; + +-- source suite/innodb/include/innodb_dict.inc + +--error ER_DROP_INDEX_FK +ALTER TABLE t1 DROP INDEX c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1 DROP INDEX c4; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2, DROP INDEX c2; + +--error ER_DROP_INDEX_FK +ALTER TABLE t1c DROP INDEX c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY ẗ1C2; + +SHOW CREATE TABLE t1c; + +SET foreign_key_checks=0; +DROP TABLE t1p; +SET foreign_key_checks=1; + +SHOW CREATE TABLE t1c; + +-- source suite/innodb/include/innodb_dict.inc + +CREATE TABLE t1p (c1 INT PRIMARY KEY, c2 INT, INDEX(c2)) ENGINE=InnoDB; + +--error ER_DROP_INDEX_FK +ALTER TABLE t1c DROP INDEX C2, DROP INDEX C3; +--error ER_DROP_INDEX_FK +ALTER TABLE t1c DROP INDEX C3; + +SET foreign_key_checks=0; +ALTER TABLE t1c DROP INDEX C3; +SET foreign_key_checks=1; + +SHOW CREATE TABLE t1c; +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1c DROP FOREIGN KEY t1C3; + +SHOW CREATE TABLE t1c; +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1c DROP INDEX c2, DROP FOREIGN KEY t1C2; + +SHOW CREATE TABLE t1c; + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 DROP INDEX c2, CHANGE c3 c2 INT; + +-- source suite/innodb/include/innodb_dict.inc + +CREATE TABLE t1o LIKE t1; + +# This will implicitly add a FTS_DOC_ID column, which cannot be done online. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=NONE; + +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=SHARED; + +# The output should be empty, because index->id was reassigned. +-- source suite/innodb/include/innodb_dict.inc + +SHOW CREATE TABLE tt; + +# DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR are reserved InnoDB system column names. +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=COPY; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 DB_TRX_ID INT; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 db_roll_ptr INT; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD COLUMN DB_TRX_ID INT; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD COLUMN db_roll_ptr INT; + +--error ER_INNODB_FT_WRONG_DOCID_COLUMN +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN FTS_DOC_ID BIGINT; +--error ER_INNODB_FT_WRONG_DOCID_COLUMN +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED; + +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL; + +--error ER_DUP_FIELDNAME +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN FTS_DOC_ID INT; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID, ALGORITHM=INPLACE; + +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID, DROP INDEX ct, ALGORITHM=INPLACE; + +# This creates a hidden FTS_DOC_ID column. +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ADD COLUMN cu TEXT; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT, +ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED, +ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED; + +# This would drop the hidden FTS_DOC_ID column and create +# a fulltext index on ct and another fulltext index on cu. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o ADD FULLTEXT INDEX(cu), +ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL, ALGORITHM=INPLACE; + +# Replace the hidden FTS_DOC_ID column with a user-visible one. +# This used to work if there is at most one fulltext index. +# Currently, we disallow native ALTER TABLE if the table +# contains any FULLTEXT indexes. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; +ALTER TABLE t1o ADD COLUMN FTS_DOC_ID BIGINT UNSIGNED NOT NULL; +# Replace the user-visible FTS_DOC_ID column with a hidden one. +# We do not support this in-place. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID, ALGORITHM=INPLACE; +ALTER TABLE t1o DROP COLUMN FTS_DOC_ID; + +# FTS_DOC_ID is the internal row identifier for full-text search. +# It should be of type BIGINT UNSIGNED NOT NULL. +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=COPY; + +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_Doc_ID INT, +ALGORITHM=INPLACE; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; + +CREATE TABLE t1n LIKE t1o; + +ALTER TABLE t1n ADD FULLTEXT INDEX(ct); +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=COPY; +--error ER_BAD_FIELD_ERROR +ALTER TABLE t1n CHANGE FTS_DOC_ID c11 INT, ALGORITHM=INPLACE; +ALTER TABLE t1n CHANGE c1 FTS_DOC_ïD INT, ALGORITHM=INPLACE; + +ALTER TABLE t1n CHANGE FTS_DOC_ÏD c1 INT, ALGORITHM=INPLACE; +ALTER TABLE t1n CHANGE c1 c2 INT, CHANGE c2 ct INT, CHANGE ct c1 TEXT, +ALGORITHM=INPLACE; +SHOW CREATE TABLE t1n; +ALTER TABLE t1n CHANGE c2 c1 INT, CHANGE ct c2 INT, CHANGE c1 ct TEXT, +ALGORITHM=COPY; +SHOW CREATE TABLE t1n; + +--error ER_KEY_COLUMN_DOES_NOT_EXITS +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=INPLACE; +--error ER_KEY_COLUMN_DOES_NOT_EXITS +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=COPY; +ALTER TABLE t1n ADD INDEX(c4), CHANGE c2 c4 INT, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1n; +ALTER TABLE t1n DROP INDEX c4; +--error ER_DUP_FIELDNAME +ALTER TABLE t1n CHANGE c4 c1 INT, ADD INDEX(c1), ALGORITHM=INPLACE; +ALTER TABLE t1n CHANGE c4 c11 INT, ADD INDEX(c11), ALGORITHM=INPLACE; + +SHOW CREATE TABLE t1n; +DROP TABLE t1n; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL, DROP INDEX ct, +ALGORITHM=INPLACE; + +# This will copy the table, removing the hidden FTS_DOC_ID column. +ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL, DROP INDEX ct; + +ALTER TABLE t1o CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; + +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), ALGORITHM=INPLACE; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; + +# This should not show duplicates. +SELECT sc.pos FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t1o' AND sc.NAME='FTS_DOC_ID'; + +SHOW CREATE TABLE t1o; + +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +DROP INDEX ct, ALGORITHM=INPLACE; + +SHOW CREATE TABLE t1o; + +DROP TABLE t1c, t1p, sys_tables, sys_indexes, sys_foreign; + +# Check the internal schemata of tt, t1o. + +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME='test/t1o'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i WHERE FOR_NAME='test/t1o'; + +-- source suite/innodb/include/innodb_dict.inc + +# Ensure that there exists no hidden FTS_DOC_ID_INDEX on foo_id. + +ALTER TABLE t1o ADD UNIQUE INDEX FTS_DOC_ID_INDEX(FTS_DOC_ID), +ADD FULLTEXT INDEX(ct), +CHANGE foo_id FTS_DOC_ID BIGINT UNSIGNED NOT NULL; + +ALTER TABLE t1o DROP INDEX ct, DROP INDEX FTS_DOC_ID_INDEX, +CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL; + +ALTER TABLE t1o ADD UNIQUE INDEX FTS_DOC_ID_INDEX(foo_id); + +ALTER TABLE t1o CHANGE foo_id FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ADD FULLTEXT INDEX(ct); + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; + +DROP TABLE sys_indexes; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; + +-- source suite/innodb/include/innodb_dict.inc + +DROP TABLE tt, t1o, sys_tables, sys_indexes, sys_foreign; + +CREATE TABLE t (t TEXT, FULLTEXT(t)) ENGINE=InnoDB; +DROP INDEX t ON t; + +LET $regexp=/FTS_([0-9a-f_]+)([A-Z_]+)/FTS_AUX_\2/; +--replace_regex $regexp +SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name +FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE name LIKE '%FTS_%' ORDER BY 1, 2; + +SELECT sc.pos, sc.NAME FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t'; + +ALTER TABLE t ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE; + +--replace_regex $regexp +SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name +FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE name LIKE '%FTS_%' ORDER BY 1, 2; + +ALTER TABLE t ADD FULLTEXT INDEX(t); + +SELECT sc.pos, sc.NAME FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t'; + +DROP TABLE t; + +--disable_query_log +call mtr.add_suppression("deleting orphaned .ibd file"); +--enable_query_log + +--echo # +--echo # Bug #19465984 INNODB DATA DICTIONARY IS NOT UPDATED WHILE +--echo # RENAMING THE COLUMN +--echo # +CREATE TABLE t1(c1 INT NOT NULL, PRIMARY KEY(c1))ENGINE=INNODB; +CREATE TABLE t2(c2 INT NOT NULL, FOREIGN KEY(c2) REFERENCES t1(c1))ENGINE=INNODB; +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +ALTER TABLE t1 CHANGE COLUMN c1 C1 INT; +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +# FIXME: MDEV-13671 InnoDB should use case-insensitive column name comparisons +# like the rest of the server +#ALTER TABLE t1 CHANGE COLUMN C1 c5 INT; +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +DROP TABLE t2, t1; + +--echo # +--echo # BUG 20029625 - HANDLE_FATAL_SIGNAL (SIG=11) IN +--echo # DICT_MEM_TABLE_COL_RENAME_LOW +--echo # +CREATE TABLE parent(a INT, b INT, KEY(a, b)) ENGINE = InnoDB; +CREATE TABLE t1(a1 INT, a2 INT) ENGINE = InnoDB; + +set foreign_key_checks=0; +ALTER TABLE t1 ADD CONSTRAINT fk_a FOREIGN KEY(a1, a2) REFERENCES parent(a, b) ON DELETE SET NULL ON UPDATE CASCADE; + +ALTER TABLE t1 CHANGE a2 a3 INT,ADD CONSTRAINT fk_1 FOREIGN KEY(a1, a3) REFERENCES parent(a, b) ON DELETE SET NULL ON UPDATE CASCADE; +SHOW CREATE TABLE t1; +CHECK TABLE t1; + +ALTER TABLE t1 CHANGE a3 a4 INT; +SHOW CREATE TABLE t1; +CHECK TABLE t1; + +ALTER TABLE parent CHANGE b c INT; +SHOW CREATE TABLE t1; +CHECK TABLE t1; + +DROP TABLE t1, parent; + +--echo # +--echo #BUG#21514135 SCHEMA MISMATCH ERROR WHEN IMPORTING TABLESPACE AFTER +--echo #DROPPING AN INDEX +--echo # +let $source_db = source_db; +let $dest_db = dest_db; + +eval CREATE DATABASE $source_db; +eval CREATE DATABASE $dest_db; + +eval CREATE TABLE $source_db.t1 ( + id int(11) NOT NULL, + age int(11) DEFAULT NULL, + name varchar(20), + PRIMARY KEY (id), + KEY index1 (age) + ) ENGINE=InnoDB; + +eval ALTER TABLE $source_db.t1 DROP INDEX index1, ADD INDEX index2(name, age), algorithm=inplace; + +--source suite/innodb/include/import.inc + +eval ALTER TABLE $source_db.t1 DROP INDEX index2, algorithm=inplace; + +--source suite/innodb/include/import.inc + +eval DROP TABLE $source_db.t1; +eval DROP DATABASE $source_db; +eval DROP DATABASE $dest_db; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-autoinc.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-autoinc.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-autoinc.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-autoinc.test 2017-12-21 15:48:47.000000000 +0000 @@ -680,3 +680,20 @@ SELECT * FROM t; SHOW CREATE TABLE t; DROP TABLE t; + +--echo # +--echo # MDEV-14008 Assertion failing: `!is_set() || (m_status == DA_OK_BULK && is_bulk_op()) +--echo # + +SET sql_mode=STRICT_ALL_TABLES; +CREATE TABLE t1 ( + c1 DOUBLE NOT NULL PRIMARY KEY AUTO_INCREMENT +) ENGINE=InnoDB AUTO_INCREMENT=10000000000000000000; +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 (a DOUBLE PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB; +INSERT INTO t1 VALUES (-1); +SELECT * FROM t1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,5 @@ +--innodb-file-per-table +--innodb-file-format='Barracuda' +--innodb-buffer-pool-size=32M +--innodb-page-size=64k +--innodb-strict-mode=OFF diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-enlarge-blob.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-enlarge-blob.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-enlarge-blob.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-enlarge-blob.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,29 @@ +--source include/have_innodb.inc + +# +# MDEV-13227: Assertion failure len < 16384 in file rem0rec.cc line 1285 +# Crashes with innodb_page_size=64K. Does not crash at <= 32K. +# +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=REDUNDANT; +SHOW WARNINGS; +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; +UPDATE t1 SET a=CONCAT(a, RAND(), a); +UPDATE t1 SET a=CONCAT(a, RAND(), a); +# random data no output we are only interested if fails +--disable_result_log +SELECT * from t1; +--enable_result_log +DROP TABLE t1; + +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=DYNAMIC; +SHOW WARNINGS; +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; +UPDATE t1 SET a=CONCAT(a, RAND(), a); +UPDATE t1 SET a=CONCAT(a, RAND(), a); +# random data no output we are only interested if fails +--disable_result_log +SELECT * from t1; +--enable_result_log +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-get-fk.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-get-fk.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-get-fk.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-get-fk.test 2017-12-21 15:48:47.000000000 +0000 @@ -40,6 +40,11 @@ ALTER TABLE `repro`.`crew_role_assigned` COMMENT = 'innodb_read_only'; SHOW CREATE TABLE `repro`.`crew_role_assigned`; +# These should be ignored in innodb_read_only mode. +SET GLOBAL innodb_buffer_pool_load_now = ON; +SET GLOBAL innodb_buffer_pool_dump_now = ON; +SET GLOBAL innodb_buffer_pool_load_abort = ON; + -- let $restart_parameters= -- source include/restart_mysqld.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-debug.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-debug.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-debug.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-debug.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--innodb-sort-buffer-size=64k diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-debug.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-debug.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-debug.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-debug.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,122 @@ +-- source include/have_debug.inc +-- source include/have_innodb.inc +-- source include/have_debug_sync.inc + +let $per_table=`select @@innodb_file_per_table`; +let $format=`select @@innodb_file_format`; +set global innodb_file_per_table=on; +set global innodb_file_format='Barracuda'; + +# +# Test for BUG# 12739098, check whether trx->error_status is reset on error. +# +CREATE TABLE t1(c1 INT NOT NULL, c2 INT, PRIMARY KEY(c1)) Engine=InnoDB; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5); + +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG='+d,ib_build_indexes_too_many_concurrent_trxs, ib_rename_indexes_too_many_concurrent_trxs, ib_drop_index_too_many_concurrent_trxs'; +--error ER_TOO_MANY_CONCURRENT_TRXS +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +SET DEBUG_DBUG = @saved_debug_dbug; + +SHOW CREATE TABLE t1; +DROP TABLE t1; + +# +# Test for Bug#13861218 Records are not fully sorted during index creation +# +CREATE TABLE bug13861218 (c1 INT NOT NULL, c2 INT NOT NULL, INDEX(c2)) +ENGINE=InnoDB; +INSERT INTO bug13861218 VALUES (8, 0), (4, 0), (0, 0); +SET DEBUG_DBUG = '+d,ib_row_merge_buf_add_two'; +# Force creation of a PRIMARY KEY on c1 to see what happens on the index(c2). +# No crash here, because n_uniq for c2 includes the clustered index fields +CREATE UNIQUE INDEX ui ON bug13861218(c1); +SET DEBUG_DBUG = @saved_debug_dbug; +DROP TABLE bug13861218; + +CREATE TABLE bug13861218 (c1 INT NOT NULL, c2 INT UNIQUE) ENGINE=InnoDB; +INSERT INTO bug13861218 VALUES (8, NULL), (4, NULL), (0, NULL); +SET DEBUG_DBUG = '+d,ib_row_merge_buf_add_two'; +# Force creation of a PRIMARY KEY on c1 to see what happens on the index(c2). +# assertion failure: ut_ad(cmp_dtuple_rec(dtuple, rec, rec_offsets) > 0) +CREATE UNIQUE INDEX ui ON bug13861218(c1); +SET DEBUG_DBUG = @saved_debug_dbug; +DROP TABLE bug13861218; + +eval set global innodb_file_per_table=$per_table; +eval set global innodb_file_format=$format; +eval set global innodb_file_format_max=$format; + +--echo # +--echo # Bug #21762319 ADDING INDEXES ON EMPTY TABLE IS SLOW +--echo # WITH LARGE INNODB_SORT_BUFFER_SIZE. + +call mtr.add_suppression("InnoDB: Cannot create temporary merge file"); + +# Table with large data which is greater than sort buffer + +create table t480(a serial)engine=innodb; +insert into t480 +values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(), +(),(),(),(),(),(),(),(); +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +insert into t480 select 0 from t480; +create table t1(f1 int auto_increment not null, + f2 char(200) not null, f3 char(200) not null, + f4 char(200) not null,primary key(f1))engine=innodb; +insert into t1 select NULL,'aaa','bbb','ccc' from t480; +insert into t1 select NULL,'aaaa','bbbb','cccc' from t480; +insert into t1 select NULL,'aaaaa','bbbbb','ccccc' from t480; +insert into t1 select NULL,'aaaaaa','bbbbbb','cccccc' from t480; +insert into t1 select NULL,'aaaaaaa','bbbbbbb','ccccccc' from t480; +insert into t1 select NULL,'aaaaaaaa','bbbbbbbb','cccccccc' from t480; +select count(*) from t1; + +SET DEBUG_DBUG = '+d,innobase_tmpfile_creation_failure'; +--error ER_OUT_OF_RESOURCES +alter table t1 force, algorithm=inplace; +SET DEBUG_DBUG = @saved_debug_dbug; +drop table t1, t480; + +--echo # +--echo # MDEV-12827 Assertion failure when reporting duplicate key error +--echo # in online table rebuild +--echo # + +CREATE TABLE t1 (j INT UNIQUE, i INT UNIQUE) ENGINE=InnoDB; +--connect (con1,localhost,root,,test) +SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL built WAIT_FOR log'; +--send +ALTER TABLE t1 DROP j, FORCE; + +--connection default +SET DEBUG_SYNC='now WAIT_FOR built'; +--error ER_DUP_ENTRY +INSERT INTO t1 (i) VALUES (0),(0); +SET DEBUG_SYNC='now SIGNAL log'; + +--connection con1 +--error ER_DUP_ENTRY +reap; +SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL built2 WAIT_FOR log2'; +--send +ALTER TABLE t1 DROP j, FORCE; + +--connection default +SET DEBUG_SYNC='now WAIT_FOR built2'; +INSERT INTO t1 (i) VALUES (0),(1); +--error ER_DUP_ENTRY +UPDATE t1 SET i=0; +SET DEBUG_SYNC='now SIGNAL log2'; + +--connection con1 +--error ER_DUP_ENTRY +reap; +--disconnect con1 +--connection default +SET DEBUG_SYNC='RESET'; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-delete.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-delete.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-delete.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-delete.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,36 @@ +--source include/have_innodb.inc +--source include/have_debug_sync.inc + +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + +connect (con1,localhost,root,,); + +connection default; + +CREATE TABLE t (a INT PRIMARY KEY, b INT NOT NULL) ENGINE=InnoDB; +INSERT INTO t VALUES(1,2),(2,3); + +SET DEBUG_SYNC='alter_table_inplace_after_lock_downgrade SIGNAL do WAIT_FOR m'; +SET DEBUG_SYNC='innodb_after_inplace_alter_table SIGNAL scanned WAIT_FOR done'; +--send +CREATE INDEX tb ON t(b); + +connection con1; +SET DEBUG_SYNC='now WAIT_FOR do'; +SET DEBUG_SYNC='row_update_for_mysql_error SIGNAL m WAIT_FOR scanned'; +--error ER_DUP_ENTRY +UPDATE t SET a=2 WHERE a=1; +call mtr.add_suppression('InnoDB: record in index .*tb was not found on rollback, trying to insert'); +SET DEBUG_SYNC='now SIGNAL done'; + +disconnect con1; + +connection default; +reap; +SET DEBUG_SYNC='RESET'; +DROP TABLE t; + +# Check that all connections opened by test cases in this file are really +# gone so execution of other tests won't be affected by their presence. +--source include/wait_until_count_sessions.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-fk.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-fk.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-fk.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-fk.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,4 @@ +--loose-innodb-sys-tables +--loose-innodb-sys-columns +--loose-innodb-sys-foreign +--loose-innodb-sys-foreign-cols diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-fk.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-fk.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-fk.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-fk.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,484 @@ +--source include/have_innodb.inc +--source include/have_debug.inc + +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,3); + +CREATE INDEX tb ON parent(b); + +INSERT INTO parent VALUES(10,20),(20,30); + +CREATE TABLE child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; + +CREATE INDEX tb ON child(a2); + +INSERT INTO child VALUES(10,20); + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE child ADD FOREIGN KEY(a2) REFERENCES parent(b), +ALGORITHM = INPLACE; + +SET foreign_key_checks = 0; + +ALTER TABLE child ADD CONSTRAINT fk_1 FOREIGN KEY (a2) +REFERENCES parent(b) ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; + +# duplicated foreign key name +--error ER_FK_DUP_NAME +ALTER TABLE child ADD CONSTRAINT fk_1 FOREIGN KEY (a2) +REFERENCES parent(b) ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SET foreign_key_checks = 1; + +INSERT INTO child VALUES(1,2),(2,3); + +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO child VALUES(4,4); + +SELECT * FROM parent; + +SET foreign_key_checks = 0; + +# This would fail. No corresponding index +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE child ADD CONSTRAINT fk_20 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SHOW WARNINGS; + +SHOW ERRORS; + +CREATE INDEX idx1 on parent(a, b); + +ALTER TABLE child ADD CONSTRAINT fk_10 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +# This should be successful, as we added the index +ALTER TABLE child ADD CONSTRAINT fk_2 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, ADD INDEX idx1(a1,a2), +ALGORITHM = INPLACE; + +ALTER TABLE child ADD CONSTRAINT fk_3 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; + +SET foreign_key_checks = 1; + +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO child VALUES(5,4); + +SHOW CREATE TABLE child; + +DELETE FROM parent where a = 1; + +SELECT * FROM child; + +# Now test referenced table cannot be opened. This should work fine +# when foreign_key_checks is set to 0 + +SET foreign_key_checks = 0; + +# This is to test the scenario we cannot open the referenced table. +# Since foreign_key_checks is set to 0, the foreign key should still +# be added. +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG = '+d,innodb_test_open_ref_fail'; +ALTER TABLE child ADD CONSTRAINT fk_4 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SET DEBUG_DBUG = @saved_debug_dbug; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; + +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; + +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; + +# this should succeed, since we disabled the foreign key check +INSERT INTO child VALUES(5,4); + +SET foreign_key_checks = 1; + +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO child VALUES(6,5); + +SET foreign_key_checks = 0; + +# Create some table with 'funny' characters, for testing the +# error message +CREATE TABLE `#parent` (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; + +CREATE INDEX tb ON `#parent`(a, b); + +CREATE TABLE `#child` (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; + +CREATE INDEX tb ON `#child`(a1, a2); + +# This is to test the scenario no foreign index, alter table should fail +SET DEBUG_DBUG = '+d,innodb_test_no_foreign_idx'; +--error ER_FK_NO_INDEX_CHILD, +ALTER TABLE `#child` ADD CONSTRAINT fk_40 FOREIGN KEY (a1, a2) +REFERENCES `#parent`(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SET DEBUG_DBUG = @saved_debug_dbug; + +SHOW ERRORS; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; + +# This is to test the scenario no index on referenced table, +# alter table should fail +SET DEBUG_DBUG = '+d,innodb_test_no_reference_idx'; +--error ER_FK_NO_INDEX_PARENT, +ALTER TABLE child ADD CONSTRAINT fk_42 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SET DEBUG_DBUG = @saved_debug_dbug; + +SHOW ERRORS; + +# This is to test the scenario no index on referenced table, +# alter table should fail +SET DEBUG_DBUG = '+d,innodb_test_wrong_fk_option'; +--error ER_FK_INCORRECT_OPTION +ALTER TABLE child ADD CONSTRAINT fk_42 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SET DEBUG_DBUG = @saved_debug_dbug; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; + +# This is to test the scenario cannot add fk to the system table, +# alter table should fail +SET DEBUG_DBUG = '+d,innodb_test_cannot_add_fk_system'; +--error ER_FK_FAIL_ADD_SYSTEM +ALTER TABLE `#child` ADD CONSTRAINT fk_43 FOREIGN KEY (a1, a2) +REFERENCES `#parent`(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SET DEBUG_DBUG = @saved_debug_dbug; + +SHOW ERRORS; + +DROP TABLE `#child`; +DROP TABLE `#parent`; + +# Now test add multiple foreign key constrain in a single clause +SET foreign_key_checks = 0; + +ALTER TABLE child ADD CONSTRAINT fk_5 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ADD CONSTRAINT fk_6 FOREIGN KEY (a1, a2) +REFERENCES parent(a, b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; + +DROP TABLE child; +DROP TABLE parent; + +# Test a case where child's foreign key index is being dropped in the +# same clause of adding the foreign key. In theory, MySQL will +# automatically create a new index to meet the index requirement +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; + +INSERT INTO parent VALUES(1,2),(2,3); + +CREATE INDEX tb ON parent(b); + +INSERT INTO parent VALUES(10,20),(20,30); + +CREATE TABLE child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; + +CREATE INDEX tb ON child(a2); + +INSERT INTO child VALUES(10,20); + +SET foreign_key_checks = 0; + +ALTER TABLE child DROP INDEX tb, ADD CONSTRAINT fk_4 FOREIGN KEY (a2) +REFERENCES parent(b) ON DELETE CASCADE ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SHOW CREATE TABLE child; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN; + +SELECT * FROM information_schema.INNODB_SYS_FOREIGN_COLS; + +SET foreign_key_checks = 1; + +DROP TABLE child; + +DROP TABLE parent; + +# Test ADD FOREIGN KEY together with renaming columns. +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; + +INSERT INTO parent VALUES(1,2),(2,3); + +CREATE INDEX tb ON parent(b); + +INSERT INTO parent VALUES(10,20),(20,30); + +CREATE TABLE child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; + +CREATE INDEX tb ON child(a2); + +SET foreign_key_checks = 0; + +--error ER_KEY_COLUMN_DOES_NOT_EXITS +ALTER TABLE child CHANGE a2 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +ALTER TABLE child CHANGE a2 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a3) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +DROP TABLE child; + +DROP TABLE parent; + +# Add test for add Primary key and FK on changing columns +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,3); + +CREATE INDEX tb ON parent(b); + +INSERT INTO parent VALUES(10,20),(20,30); + +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; + +CREATE INDEX tb ON child(a2); + +SET foreign_key_checks = 0; + +# Let's rebuild the table and add the FK, make the add FK failed. + +SET DEBUG_DBUG = '+d,innodb_test_cannot_add_fk_system'; +--error ER_FK_FAIL_ADD_SYSTEM +ALTER TABLE child ADD PRIMARY KEY idx (a3), CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; +SET DEBUG_DBUG = @saved_debug_dbug; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; + +# This should be successful. It will also check any left over +# from previous failed operation (if dictionary entries not cleaned, +# it will have dup key error. +ALTER TABLE child ADD PRIMARY KEY idx (a3), CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; + +SHOW CREATE TABLE child; + +DROP TABLE child; + +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; + +# Now try primary index and FK +ALTER TABLE child ADD PRIMARY KEY idx (a1), +ADD CONSTRAINT fk_1 FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SELECT * from information_schema.INNODB_SYS_FOREIGN; +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; + +SHOW CREATE TABLE child; + +DROP TABLE child; + +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; + +ALTER TABLE child CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a3) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +SELECT * from information_schema.INNODB_SYS_FOREIGN; +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; +SELECT t2.name, t1.name FROM information_schema.innodb_sys_columns t1, information_schema.innodb_sys_tables t2 WHERE t1.table_id = t2.table_id AND t2.name LIKE "%child" ORDER BY t1.name; +SELECT NAME FROM information_schema.INNODB_SYS_TABLES; + +SHOW CREATE TABLE child; + +DROP TABLE child; + +CREATE TABLE child (a1 INT NOT NULL, a2 INT) ENGINE = InnoDB; +# Now try all three +--error ER_FK_INCORRECT_OPTION +ALTER TABLE child ADD PRIMARY KEY idx (a3), CHANGE a1 a3 INT, +ADD CONSTRAINT fk_1 FOREIGN KEY (a3) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +DROP TABLE parent; +DROP TABLE child; + +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL, c INT) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2,3),(2,3,4); + +CREATE INDEX tb ON parent(b); + +CREATE TABLE child (a1 INT NOT NULL, a2 INT, a3 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); + +ALTER TABLE child +ADD CONSTRAINT fk_a FOREIGN KEY (a2) REFERENCES parent(b) +ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +ALTER TABLE child +ADD CONSTRAINT fk_b FOREIGN KEY (a1) REFERENCES parent(a), +ALGORITHM = INPLACE; + +ALTER TABLE child CHANGE a2 a2_new INT, CHANGE a1 a1_new INT; + +SHOW CREATE TABLE child; + +SELECT * from information_schema.INNODB_SYS_FOREIGN; +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; + +# The third add FK will fail +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE child +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1_new) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2_new) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(c), +ALGORITHM = INPLACE; + +# It should still have only 2 FKs +SHOW CREATE TABLE child; + +SELECT * from information_schema.INNODB_SYS_FOREIGN; + +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; + +#Now let's make it successful +ALTER TABLE child +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1_new) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2_new) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(a), +ALGORITHM = INPLACE; + +# It should still have 5 FKs +SHOW CREATE TABLE child; + +SELECT * from information_schema.INNODB_SYS_FOREIGN; + +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; + +DROP TABLE child; +CREATE TABLE child (a1 INT NOT NULL, a2 INT, a3 INT) ENGINE = InnoDB; +CREATE INDEX tb ON child(a2); + +# Let's try this 3rd fk failure with add primary index +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE child ADD PRIMARY KEY idx (a1), +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(c), +ALGORITHM = INPLACE; + +# It should still have no FKs, no PRIMARY +SHOW CREATE TABLE child; + +SELECT * from information_schema.INNODB_SYS_FOREIGN; + +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; + +# make it successful +ALTER TABLE child ADD PRIMARY KEY idx (a1), +ADD CONSTRAINT fk_new_1 FOREIGN KEY (a1) REFERENCES parent(b), +ADD CONSTRAINT fk_new_2 FOREIGN KEY (a2) REFERENCES parent(a), +ADD CONSTRAINT fk_new_3 FOREIGN KEY (a3) REFERENCES parent(a), +ALGORITHM = INPLACE; + +# It should have 3 FKs, a new PRIMARY +SHOW CREATE TABLE child; + +SELECT * from information_schema.INNODB_SYS_FOREIGN; + +SELECT * from information_schema.INNODB_SYS_FOREIGN_COLS; + +SET foreign_key_checks = 1; + +DROP TABLE child; +DROP TABLE parent; + +CREATE TABLE Parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO Parent VALUES(1,2),(2,3); + +CREATE INDEX tb ON Parent(b); + +INSERT INTO Parent VALUES(10,20),(20,30); + +CREATE TABLE Child (a1 INT PRIMARY KEY, a2 INT) ENGINE = InnoDB; + +CREATE INDEX tb ON Child(a2); + +INSERT INTO Child VALUES(10,20); + +SET foreign_key_checks = 0; + +ALTER TABLE Child ADD CONSTRAINT fk_1 FOREIGN KEY (a2) +REFERENCES Parent(b) ON DELETE SET NULL ON UPDATE CASCADE, +ALGORITHM = INPLACE; + +DROP TABLE Child; +DROP TABLE Parent; + +# This is the test for bug 14594526 - FK: ASSERTION IN +# DICT_TABLE_CHECK_FOR_DUP_INDEXES +CREATE TABLE `t2`(a int,c int,d int) ENGINE=INNODB; +CREATE TABLE `t3`(a int,c int,d int) ENGINE=INNODB; +CREATE INDEX idx ON t3(a); + +ALTER TABLE `t2` ADD CONSTRAINT `fw` FOREIGN KEY (`c`) REFERENCES t3 (a); + +ALTER TABLE `t2` ADD CONSTRAINT `e` foreign key (`d`) REFERENCES t3(a); + +--error ER_FK_FAIL_ADD_SYSTEM +ALTER TABLE `t3` ADD CONSTRAINT `e` foreign key (`c`) REFERENCES `t2`(`c`) ON UPDATE SET NULL; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS; + +DROP TABLE t2; + +DROP TABLE t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,6 @@ +--innodb-sort-buffer-size=64k +--innodb-online-alter-log-max-size=128k +--innodb-buffer-pool-size=5M +--innodb-log-buffer-size=256k +--innodb-sys-indexes +--innodb-sys-fields diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-purge.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-purge.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online-purge.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online-purge.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,73 @@ +--source include/have_innodb.inc +--source include/have_debug_sync.inc + +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + +connect (con1,localhost,root,,); + +connect (con2,localhost,root,,); +connection default; + +CREATE TABLE t (a INT PRIMARY KEY, c TEXT) ENGINE=InnoDB; +CREATE TABLE u (a INT PRIMARY KEY, b INT, c INT NOT NULL) ENGINE=InnoDB; + +INSERT INTO t VALUES (1,'aa'); +BEGIN; +INSERT INTO u SET a=1, c=1; +INSERT INTO u SELECT a+1,NULL,a+1 FROM u; +INSERT INTO u SELECT a+2,NULL,a+2 FROM u; +INSERT INTO u SELECT a+4,NULL,a+4 FROM u; +INSERT INTO u SELECT a+8,NULL,a+8 FROM u; +INSERT INTO u SELECT a+16,NULL,a+16 FROM u; +INSERT INTO u SELECT a+32,NULL,a+32 FROM u; +INSERT INTO u SELECT a+64,NULL,a+64 FROM u; +INSERT INTO u SELECT a+128,NULL,a+64 FROM u; +INSERT INTO u SELECT a+256,NULL,a+64 FROM u; +COMMIT; + +BEGIN; +DELETE FROM u; + +connection con2; +SET DEBUG_SYNC='row_log_apply_before SIGNAL created_u WAIT_FOR dml_done_u'; +--send +ALTER TABLE u ADD INDEX (c); + +connection default; +# Check that the above SELECT is blocked +let $wait_condition= + SELECT COUNT(*) = 1 from information_schema.processlist + WHERE state = 'Waiting for table metadata lock' AND + info = 'ALTER TABLE u ADD INDEX (c)'; +--source include/wait_condition.inc + +COMMIT; +SET DEBUG_SYNC='now WAIT_FOR created_u'; +SELECT state FROM information_schema.processlist +WHERE info='ALTER TABLE u ADD INDEX (c)'; + +connection con1; +SET DEBUG_SYNC='row_log_apply_before SIGNAL created_t WAIT_FOR dml_done_t'; +--send +CREATE INDEX c1 ON t (c(1)); +connection default; +SET DEBUG_SYNC='now WAIT_FOR created_t'; +UPDATE t SET c='ab'; +# Allow purge to kick in. TODO: Trigger this faster, somehow. +SELECT SLEEP(10); +SET DEBUG_SYNC='now SIGNAL dml_done_u'; +connection con2; +reap; +SET DEBUG_SYNC='now SIGNAL dml_done_t'; +disconnect con2; +connection con1; +reap; +disconnect con1; +connection default; +SET DEBUG_SYNC='RESET'; +DROP TABLE t,u; + +# Check that all connections opened by test cases in this file are really +# gone so execution of other tests won't be affected by their presence. +--source include/wait_until_count_sessions.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-index-online.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-index-online.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,485 @@ +--source include/innodb_page_size_small.inc +--source include/innodb_encrypt_log.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +let $innodb_metrics_select= +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; + +call mtr.add_suppression("InnoDB: Warning: Small buffer pool size"); + +# DISCARD TABLESPACE needs file-per-table +SET @global_innodb_file_per_table_orig = @@global.innodb_file_per_table; +SET GLOBAL innodb_file_per_table = on; + +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + +CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, c3 TEXT) +ENGINE=InnoDB STATS_PERSISTENT=0; +INSERT INTO t1 VALUES (1,1,''), (2,2,''), (3,3,''), (4,4,''), (5,5,''); + +SET GLOBAL innodb_monitor_enable = module_ddl; +eval $innodb_metrics_select; + +SET DEBUG_SYNC = 'RESET'; +SET DEBUG_SYNC = 'write_row_noreplace SIGNAL have_handle WAIT_FOR go_ahead'; +--send +INSERT INTO t1 VALUES(1,2,3); + +connect (con1,localhost,root,,); +connection con1; + +# This should block at the end because of the INSERT in connection default +# is holding a metadata lock. +SET DEBUG_SYNC = 'now WAIT_FOR have_handle'; +SET lock_wait_timeout = 1; +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; + +connection default; +--error ER_DUP_ENTRY +reap; +eval $innodb_metrics_select; + +connection con1; +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG = '+d,innodb_OOM_prepare_inplace_alter'; +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +SET DEBUG_DBUG = @saved_debug_dbug; +SET DEBUG_DBUG = '+d,innodb_OOM_inplace_alter'; +--error ER_OUT_OF_RESOURCES +CREATE UNIQUE INDEX c2 ON t1(c2); +SET DEBUG_DBUG = @saved_debug_dbug; +CREATE UNIQUE INDEX c2 ON t1(c2); +DROP INDEX c2 ON t1; + +connection default; +SHOW CREATE TABLE t1; +# Insert a duplicate entry (4) for the upcoming UNIQUE INDEX(c2). +BEGIN; +INSERT INTO t1 VALUES(7,4,2); + +connection con1; +# This DEBUG_SYNC should not kick in yet, because the duplicate key will be +# detected before we get a chance to apply the online log. +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL scanned WAIT_FOR rollback_done'; +# This will be a lock wait timeout on the meta-data lock, +# because the transaction inserting (7,4,2) is still active. +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +connection default; +COMMIT; +connection con1; +--error ER_DUP_ENTRY +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +connection default; +DELETE FROM t1 WHERE c1 = 7; +connection con1; +# ADD FOREIGN KEY is not supported in-place +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 ADD FOREIGN KEY(c2) REFERENCES t1(c2), ALGORITHM = INPLACE; +# The previous DEBUG_SYNC should be ignored, because an exclusive lock +# has been requested and the online log is not being allocated. +ALTER TABLE t1 ADD UNIQUE INDEX(c2), LOCK = EXCLUSIVE, ALGORITHM = INPLACE; +DROP INDEX c2 ON t1; +# Now the previous DEBUG_SYNC should kick in. +--send +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR scanned'; +eval $innodb_metrics_select; + +# Insert a duplicate entry (4) for the already started UNIQUE INDEX(c2). +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +ROLLBACK; +SET DEBUG_SYNC = 'now SIGNAL rollback_done'; + +connection con1; +# Because the modification log will be applied in order, there will be +# a duplicate key error on the (7,4,2) even though we roll it back. +--error ER_DUP_ENTRY +reap; +# Now, create the index without any concurrent DML, while no duplicate exists. +SET DEBUG_SYNC = 'row_log_apply_after SIGNAL created WAIT_FOR dml_done'; +--send +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR created'; +# At this point, the index has been created inside InnoDB but not yet +# in the MySQL data dictionary. +eval $innodb_metrics_select; +# A duplicate key error should now be triggered by InnoDB, but reported +# by the ALTER TABLE because the index does not 'officially' exist yet. +INSERT INTO t1 VALUES(6,3,1); +SET DEBUG_SYNC = 'now SIGNAL dml_done'; +connection con1; +# This is due to the duplicate entry (6,3,1). +--error ER_DUP_UNKNOWN_IN_INDEX +reap; +DELETE FROM t1 WHERE c1=6; +ALTER TABLE t1 ADD UNIQUE INDEX(c2); +eval $innodb_metrics_select; + +connection default; +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES(6,3,1); +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES(7,4,2); +ALTER TABLE t1 STATS_PERSISTENT=1; +ANALYZE TABLE t1; +# Purge may or may not have cleaned up the DELETE FROM t1 WHERE c1 = 7; +UPDATE mysql.innodb_index_stats SET stat_value = 5 +WHERE database_name = 'test' AND table_name= 't1' AND index_name = 'PRIMARY' +AND stat_value = 6; +--replace_column 4 LAST_UPDATE +SELECT * FROM mysql.innodb_index_stats WHERE table_name IN ('t1'); +CREATE TABLE t1_c2_stats SELECT * FROM mysql.innodb_index_stats +WHERE database_name = 'test' AND table_name = 't1' and index_name = 'c2'; +# in Embedded mode (./mtr --embedded-server) the t1_c2_stats table gets +# created in MyISAM format by default even if we set +# default_storage_engine='innodb' +ALTER TABLE t1_c2_stats ENGINE=INNODB; +DROP INDEX c2 ON t1; +ANALYZE TABLE t1_c2_stats; +--replace_column 4 LAST_UPDATE +SELECT * FROM mysql.innodb_index_stats WHERE table_name IN ('t1', 't1_c2_stats'); + +connection con1; +let $ID= `SELECT @id := CONNECTION_ID()`; +--error ER_QUERY_INTERRUPTED +KILL QUERY @id; + +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2d_created WAIT_FOR kill_done'; +--send +CREATE INDEX c2d ON t1(c2); + +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR c2d_created'; +eval $innodb_metrics_select; +let $ignore= `SELECT @id := $ID`; +KILL QUERY @id; +SET DEBUG_SYNC = 'now SIGNAL kill_done'; + +connection con1; +--error ER_QUERY_INTERRUPTED +reap; +eval $innodb_metrics_select; + +connection default; +CHECK TABLE t1; +INSERT INTO t1 SELECT 5 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 10 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 20 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 40 + c1, c2, c3 FROM t1; +# Purge may or may not have cleaned up the DELETE FROM t1 WHERE c1 = 7; +--replace_result 81 80 +EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3; +ANALYZE TABLE t1; + +connection con1; +# Forge some statistics for c2d, and see that they will be used +UPDATE t1_c2_stats SET index_name = 'c2d'; +# Fake the statistics. The cardinality should be 5,80. +UPDATE t1_c2_stats SET stat_value = 2 WHERE stat_name = 'n_diff_pfx01'; +INSERT INTO t1_c2_stats +SELECT database_name, table_name, index_name, last_update, 'n_diff_pfx02', 80, +sample_size, 'c2,c1' FROM t1_c2_stats +WHERE stat_name = 'n_diff_pfx01' AND stat_description = 'c2'; +INSERT INTO mysql.innodb_index_stats SELECT * FROM t1_c2_stats; +DROP TABLE t1_c2_stats; + +CREATE INDEX c2d ON t1(c2); +# This should show the newly calculated stats by CREATE INDEX above, +# not the faked cardinality=4 for c2d(c2). +# Purge may or may not have cleaned up the DELETE FROM t1 WHERE c1 = 7; +--replace_result 81 80 +SHOW INDEX FROM t1; +EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3; + +SHOW CREATE TABLE t1; + +connection default; +SET @merge_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +connection con1; + +# Exceed the configured innodb_online_alter_log_max_size. +# The actual limit is a multiple of innodb_sort_buf_size, +# because that is the size of the in-memory log buffers. +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2e_created WAIT_FOR dml2_done'; +# Ensure that the ALTER TABLE will be executed even with some concurrent DML. +SET lock_wait_timeout = 10; +--send +# FIXME: MDEV-13668 +#ALTER TABLE t1 CHANGE c2 c22 INT, DROP INDEX c2d, ADD INDEX c2e(c22), +ALTER TABLE t1 DROP INDEX c2d, ADD INDEX c2e(c2), +ALGORITHM = INPLACE; + +# Generate some log (delete-mark, delete-unmark, insert etc.) +# while the index creation is blocked. Some of this may run +# in parallel with the clustered index scan. +connection default; +INSERT INTO t1 SELECT 80 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 160 + c1, c2, c3 FROM t1; +#UPDATE t1 SET c2 = c2 + 1; +SET DEBUG_SYNC = 'now WAIT_FOR c2e_created'; +# At this point, the clustered index scan must have completed, +# but the modification log keeps accumulating due to the DEBUG_SYNC. +eval $innodb_metrics_select; +let $c= 4; +while ($c) +{ + BEGIN; + DELETE FROM t1; + ROLLBACK; + UPDATE t1 SET c2 = c2 + 1; + BEGIN; + UPDATE t1 SET c2 = c2 + 1; + DELETE FROM t1; + ROLLBACK; + dec $c; +} +# Incomplete index c2e should exist until the DDL thread notices the overflow. +# (The output below strips TEMP_INDEX_PREFIX from the name.) +eval $innodb_metrics_select; +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = '?c2e'; + +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); + +SELECT +(@merge_encrypt_1-@merge_encrypt_0)- +(@merge_decrypt_1-@merge_decrypt_0) as sort_balance, +@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0, +@rowlog_encrypt_1>@rowlog_encrypt_0; + +# Release con1. +SET DEBUG_SYNC = 'now SIGNAL dml2_done'; + +connection con1; +# If the following fails with the wrong error, it probably means that +# you should rerun with a larger mtr --debug-sync-timeout. +--error ER_INNODB_ONLINE_LOG_TOO_BIG +reap; +# The index c2e should have been dropped from the data dictionary +# when the above error was noticed. It should still exist in the +# cache with index->online_status = ONLINE_INDEX_ABORTED_DROPPED. +eval $innodb_metrics_select; +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = 'c2e'; + +# ddl_background_drop_indexes = 1 here, because the incomplete index c2e still +# exists in the InnoDB data dictionary cache. +eval $innodb_metrics_select; + +connection default; + +ALTER TABLE t1 COMMENT 'testing if c2e will be dropped'; + +# Check that the 'zombie' index c2e was dropped. +eval $innodb_metrics_select; + +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); + +connection con1; +# Accumulate and apply some modification log. +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done'; +--send +# FIXME: MDEV-13668 +#ALTER TABLE t1 ADD INDEX c2f(c22f), CHANGE c2 c22f INT; +ALTER TABLE t1 ADD INDEX c2f(c2); + +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR c2f_created'; +# Generate some log (delete-mark, delete-unmark, insert etc.) +eval $innodb_metrics_select; +let $c= 2; +while ($c) +{ +BEGIN; +INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 160; +DELETE FROM t1 WHERE c1 > 320; +ROLLBACK; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +dec $c; +} +eval $innodb_metrics_select; +# Release con1. +SET DEBUG_SYNC = 'now SIGNAL dml3_done'; + +connection con1; +reap; +# FIXME: MDEV-13668 +ALTER TABLE t1 CHANGE c2 c22f INT; + +eval $innodb_metrics_select; + +connection default; + +SET @merge_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); + +SELECT +(@merge_encrypt_2-@merge_encrypt_1)- +(@merge_decrypt_2-@merge_decrypt_1) as sort_balance, +(@rowlog_encrypt_2-@rowlog_encrypt_1)- +(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance; +SELECT +@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted, +@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted, +@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted, +@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted; + +connection con1; +SELECT COUNT(c22f) FROM t1; +CHECK TABLE t1; + +# Create a column prefix index. +--error ER_DUP_ENTRY +ALTER TABLE t1 ADD UNIQUE INDEX c3p5(c3(5)); +UPDATE t1 SET c3 = NULL WHERE c3 = ''; +SET lock_wait_timeout = 1; +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c3p5_created WAIT_FOR ins_done'; +--send +ALTER TABLE t1 ADD UNIQUE INDEX c3p5(c3(5)); + +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created'; + +# Check that the index was created. +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = '?c3p5'; + +SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL ins_done WAIT_FOR ddl_timed_out'; +--send +INSERT INTO t1 VALUES(347,33101,NULL); + +connection con1; +--error ER_LOCK_WAIT_TIMEOUT +reap; +SET DEBUG_SYNC = 'now SIGNAL ddl_timed_out'; + +# InnoDB should have cleaned up the index c3p5 from the data dictionary, +# but not yet from the dictionary cache. +SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf +ON si.index_id = sf.index_id WHERE si.name = 'c3p5'; +eval $innodb_metrics_select; + +connection default; +reap; +# Index c3p5 should still exist in the data dictionary cache. +eval $innodb_metrics_select; + +--disable_parsing +# Temporarily disabled by fix for bug#14213236. Should be either +# removed or updated to take into account that locking for IMPORT/ +# DISCARD TABLESPACE happens on MDL layer. New test case is added +# to validate this at MDL layer(i_main.alter_table.test) + +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2g_created WAIT_FOR dml4_done'; +# The lock upgrade at the end of the ALTER will conflict with the DISCARD. +SET lock_wait_timeout = 1; +--send +ALTER TABLE t1 DROP INDEX c2f, ADD INDEX c2g(c22f); + +connection con1; +SET DEBUG_SYNC = 'now WAIT_FOR c2g_created'; + +connect (con2,localhost,root,,); +connection con2; + +# This will conflict with the ALTER in connection default, above. +SET lock_wait_timeout = 10; +--send +ALTER TABLE t1 DISCARD TABLESPACE; + +connection con1; +let $wait_condition= + SELECT COUNT(*) = 1 FROM information_schema.processlist + WHERE state = 'Waiting for table level lock' and + info = 'ALTER TABLE t1 DISCARD TABLESPACE'; +--source include/wait_condition.inc + +SET DEBUG_SYNC = 'now SIGNAL dml4_done'; +disconnect con1; +connection con2; +reap; +disconnect con2; +connection default; +--error ER_LOCK_WAIT_TIMEOUT +reap; +--enable_parsing +#remove below con1 disconnect if above test case is enabled +connection con1; +disconnect con1; +connection default; + +SHOW CREATE TABLE t1; +ALTER TABLE t1 DROP INDEX c2d, DROP INDEX c2f; +# The ALTER TABLE should have cleaned up c3p5 from the cache. +eval $innodb_metrics_select; +ALTER TABLE t1 ADD INDEX c2h(c22f), ALGORITHM = INPLACE; +--error ER_DUP_KEYNAME +ALTER TABLE t1 ADD INDEX c2h(c22f), ALGORITHM = COPY; + +SET DEBUG_SYNC = 'RESET'; +SET GLOBAL innodb_monitor_disable = module_ddl; + +DROP TABLE t1; + +# Check that all connections opened by test cases in this file are really +# gone so execution of other tests won't be affected by their presence. +--source include/wait_until_count_sessions.inc + +SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig; +--disable_warnings +SET GLOBAL innodb_monitor_enable = default; +SET GLOBAL innodb_monitor_disable = default; +--enable_warnings diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,3 @@ +--innodb-page-size=32K +--innodb_buffer_pool_size=32M +--innodb-stats-persistent=ON diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,400 @@ +--source include/have_innodb.inc +--source include/have_innodb_32k.inc + +# Check page size 32k +SELECT @@innodb_page_size; + +let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; +let $innodb_file_format = `SELECT @@innodb_file_format`; +let $innodb_strict_mode = `SELECT @@innodb_strict_mode`; + +--disable_warnings +SET GLOBAL innodb_file_format='Barracuda'; +SET GLOBAL innodb_file_per_table=ON; +SET @@innodb_strict_mode=ON; +--enable_warnings + +SELECT @@innodb_file_format; +SELECT @@innodb_file_per_table; +SELECT @@innodb_strict_mode; + +# Check the error when the max record length > 16K for innodb_page_size=32k +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT= COMPACT; + +# Check the error when the max record length > 16K for innodb_page_size=32k +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT= DYNAMIC; +show warnings; + +# Check the error when the max record length > 16K for innodb_page_size=32k +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +show warnings; + +# FIXED not supported +-- error 1005 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=FIXED; +show warnings; + +-- error 1005 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; +show warnings; + +--disable_warnings +SET @@innodb_strict_mode=OFF; +SELECT @@innodb_strict_mode; +--enable_warnings + +# Check the Warning | 139 | Row size too large (> 16318) +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPACT; + +# row size 16353 > 16K +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Warning | 139 | Row size too large (> 16318) +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPACT; + +# row size 16318 : expected to fail +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); + +# row size 16317 +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Error | 118 | Row size too large (> 16318) +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=DYNAMIC; + +# Check the Warning | 139 | Row size too large (> 16318) +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=DYNAMIC; + +# row size 16318 : expected to fail +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); + +# row size 16317 +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Warning | 139 | Row size too large (> 16318) +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; + +# 65 * 255 = 16575 +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255)); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Warning | 139 | Row size too large (> 16318) +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; + +# row size 16315 : expected to fail +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',89),NULL); + +# row size 16314 +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',88),NULL); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Warning | 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=COMPACT +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; + +DROP TABLE tab5; + +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; +SHOW WARNINGS; +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +FLUSH TABLE t; +ANALYZE TABLE t; +# retrieve the number of leaf pages +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +DROP TABLE t; + +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; +SHOW WARNINGS; +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +FLUSH TABLE t; +ANALYZE TABLE t; +# retrieve the number of leaf pages +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +DROP TABLE t; + +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; +SHOW WARNINGS; +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +FLUSH TABLE t; +ANALYZE TABLE t; +# retrieve the number of leaf pages +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +DROP TABLE t; + +# cleanup +--disable_query_log +--disable_warnings +eval SET GLOBAL INNODB_FILE_FORMAT=$innodb_file_format; +eval SET GLOBAL INNODB_FILE_PER_TABLE=$innodb_file_per_table; +eval SET GLOBAL INNODB_STRICT_MODE=$innodb_strict_mode; +--enable_warnings +--enable_query_log + +--echo # Success + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,3 @@ +--innodb-page-size=64K +--innodb_buffer_pool_size=32M +--innodb-stats-persistent=ON diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,604 @@ +--source include/have_innodb.inc +--source include/have_innodb_64k.inc + +# Check page size 64k +SELECT @@innodb_page_size; + +let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; +let $innodb_file_format = `SELECT @@innodb_file_format`; +let $innodb_strict_mode = `SELECT @@innodb_strict_mode`; + +--disable_warnings +SET GLOBAL innodb_file_format='Barracuda'; +SET GLOBAL innodb_file_per_table=ON; +SET @@innodb_strict_mode=ON; +--enable_warnings + +SELECT @@innodb_file_format; +SELECT @@innodb_file_per_table; +SELECT @@innodb_strict_mode; + +# Check the error when the max record length > 32K for innodb_page_size=64k +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT= COMPACT; + +# Check the error when the max record length > 16K for innodb_page_size=64k +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT= DYNAMIC; + +# Check the error when the max record length > 16K for innodb_page_size=64k +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=REDUNDANT; +show warnings; + +# FIXED not supported +-- error 1005 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=FIXED; +show warnings; + +-- error 1005 +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; +show warnings; + +--disable_warnings +SET @@innodb_strict_mode=OFF; +SELECT @@innodb_strict_mode; +--enable_warnings + +# Check the Warning | 139 | Row size too large +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT=COMPACT; + +# row size 32936 : should fail +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); + +SELECT * FROM tab5; +DROP TABLE tab5; + +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), +ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), +ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), +ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), +ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), +ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), +ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), +ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), +ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), +ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), +ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), +ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) +) +ENGINE = innodb ROW_FORMAT=COMPACT; + +# row size 16384 >= 16K : expected to fail +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); + +# row size 16383 < 16K : expected to pass +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Error | 118 | Row size too large (> 16318) +--error ER_TOO_BIG_ROWSIZE +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT=DYNAMIC; + +# Check the Warning | 139 | Row size too large (> 16318) +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), +ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), +ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), +ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), +ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), +ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), +ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), +ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), +ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), +ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), +ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), +ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) +) +ENGINE = innodb ROW_FORMAT=DYNAMIC; + +# row size 16384 >= 16K : expected to fail +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); + +# row size 16383 < 16K : expected to pass +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Warning | 139 | Row size too large +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), +col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), +col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), +col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), +col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), +col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), +col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), +col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), +col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), +col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), +col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), +ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), +ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), +ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), +ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), +ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), +ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), +ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), +ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), +ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), +ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), +ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) +) +ENGINE = innodb ROW_FORMAT=REDUNDANT; + +# 65 * 255 = 16575 +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Warning | 139 | Row size too large +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), +ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), +ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), +ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), +ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), +ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), +ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), +ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), +ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), +ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), +ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), +ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) +) +ENGINE = innodb ROW_FORMAT=REDUNDANT; + +# row size 16383 >= 16K-1 : expected to fail +--error ER_TOO_BIG_ROWSIZE +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',27),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); + +# row size 16382 < 16K-1 : expected to pass +INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), +repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',26),NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL, +NULL,NULL,NULL,NULL,NULL +); + +SELECT * FROM tab5; +DROP TABLE tab5; + +# Check the Warning | 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=COMPACT +--replace_regex /> [0-9]+/> NNNN/ +CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), +col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), +col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), +col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), +col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), +col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), +col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), +col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), +col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), +col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), +col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) +ENGINE = innodb ROW_FORMAT=COMPRESSED; + +DROP TABLE tab5; + +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; +SHOW WARNINGS; +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +FLUSH TABLE t; +ANALYZE TABLE t; +# retrieve the number of leaf pages +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +DROP TABLE t; + +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; +SHOW WARNINGS; +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +FLUSH TABLE t; +ANALYZE TABLE t; +# retrieve the number of leaf pages +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +DROP TABLE t; + +CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; +SHOW WARNINGS; +INSERT INTO t VALUES (REPEAT('a',16384)); +INSERT INTO t VALUES (REPEAT('a',32768)); +INSERT INTO t VALUES (REPEAT('a',65535)); +SELECT LENGTH(col) FROM t; +FLUSH TABLE t; +ANALYZE TABLE t; +# retrieve the number of leaf pages +SELECT stat_value FROM mysql.innodb_index_stats where database_name = 'test' and table_name= 't' and stat_name='n_leaf_pages'; +SELECT clustered_index_size from mysql.innodb_table_stats where database_name = 'test' and table_name= 't'; +DROP TABLE t; + +# cleanup +--disable_query_log +--disable_warnings +eval SET GLOBAL INNODB_FILE_FORMAT=$innodb_file_format; +eval SET GLOBAL INNODB_FILE_PER_TABLE=$innodb_file_per_table; +eval SET GLOBAL INNODB_STRICT_MODE=$innodb_strict_mode; +--enable_warnings +--enable_query_log + +--echo # Success + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-page_compression_tables.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-page_compression_tables.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-page_compression_tables.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-page_compression_tables.test 2017-12-21 15:48:47.000000000 +0000 @@ -32,10 +32,8 @@ show warnings; create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant; show create table innodb_redundant; ---replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ ---error 1005 +--error ER_ILLEGAL_HA_CREATE_OPTION alter table innodb_redundant page_compressed=1; ---replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ show warnings; show create table innodb_redundant; alter table innodb_redundant row_format=compact page_compressed=1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-replace-debug.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-replace-debug.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-replace-debug.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-replace-debug.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,15 @@ +--source include/have_innodb.inc +--source include/have_debug.inc + +--echo # +--echo # Bug#17604730 ASSERTION: *CURSOR->INDEX->NAME == TEMP_INDEX_PREFIX +--echo # + +create table t1 (f1 int primary key, f2 int, f3 int, unique key k1(f2), + key k2(f3)) engine=innodb; +insert into t1 values (14, 24, 34); +set @@debug_dbug = '+d,row_ins_sec_index_entry_timeout'; +replace into t1 values (14, 25, 34); +select * from t1; +drop table t1; +set @@debug_dbug = '-d,row_ins_sec_index_entry_timeout'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-table-online-master.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-table-online-master.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-table-online-master.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-table-online-master.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--innodb-sort-buffer-size=64k --innodb-online-alter-log-max-size=512k --innodb-buffer-pool-size=5M --innodb-log-buffer-size=256k diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-table-online.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-table-online.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-table-online.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-table-online.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,454 @@ +--source include/innodb_page_size_small.inc +--source include/innodb_encrypt_log.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +let $innodb_metrics_select= +SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl'; + +call mtr.add_suppression("InnoDB: Warning: Small buffer pool size"); +# these will be triggered by DISCARD TABLESPACE +call mtr.add_suppression("InnoDB: Error: table 'test/t1'"); +call mtr.add_suppression("MySQL is trying to open a table handle but the .ibd file for"); + +# DISCARD TABLESPACE needs file-per-table +SET @global_innodb_file_per_table_orig = @@global.innodb_file_per_table; +SET GLOBAL innodb_file_per_table = on; +# PAGE_COMPRESSED needs innodb_file_format!=Antelope +SET @file_format = @@GLOBAL.innodb_file_format; +SET GLOBAL innodb_file_format = Barracuda; + +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + +CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 CHAR(255) NOT NULL) +ENGINE = InnoDB; +INSERT INTO t1 VALUES (1,1,''), (2,2,''), (3,3,''), (4,4,''), (5,5,''); + +SET GLOBAL innodb_monitor_enable = module_ddl; +eval $innodb_metrics_select; + +SET DEBUG_SYNC = 'RESET'; +SET DEBUG_SYNC = 'write_row_noreplace SIGNAL have_handle WAIT_FOR go_ahead'; +--send +INSERT INTO t1 VALUES(1,2,3); + +--echo # Establish session con1 (user=root) +connect (con1,localhost,root,,); +connection con1; + +# This should block at the end because of the INSERT in connection default +# is holding a metadata lock. +SET DEBUG_SYNC = 'now WAIT_FOR have_handle'; +SET lock_wait_timeout = 1; +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; + +--echo # session default +connection default; +--error ER_DUP_ENTRY +reap; +eval $innodb_metrics_select; + +--echo # session con1 +connection con1; +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET DEBUG_DBUG = '+d,innodb_OOM_prepare_inplace_alter'; +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE; +SET SESSION DEBUG = @saved_debug_dbug; +SET SESSION DEBUG = '+d,innodb_OOM_inplace_alter'; +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE; +SET SESSION DEBUG = @saved_debug_dbug; +ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE; + +--echo # session default +connection default; +SHOW CREATE TABLE t1; +# Insert a duplicate entry (4) for the upcoming UNIQUE INDEX(c2). +BEGIN; +INSERT INTO t1 VALUES(7,4,2); + +--echo # session con1 +connection con1; +# This DEBUG_SYNC should not kick in yet, because the duplicate key will be +# detected before we get a chance to apply the online log. +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR insert_done'; +# This will be a lock wait timeout on the meta-data lock, +# because the transaction inserting (7,4,2) is still active. +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2); + +--echo # session default +connection default; +COMMIT; + +--echo # session con1 +connection con1; +--error ER_DUP_ENTRY +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2); + +--echo # session default +connection default; +DELETE FROM t1 WHERE c1 = 7; + +--echo # session con1 +connection con1; +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ROW_FORMAT=COMPACT, +LOCK = SHARED, ALGORITHM = INPLACE; + +# The previous DEBUG_SYNC should be ignored, because an exclusive lock +# has been requested and the online log is not being allocated. +ALTER TABLE t1 ADD UNIQUE INDEX(c2), +LOCK = EXCLUSIVE, ALGORITHM = INPLACE; + +SHOW CREATE TABLE t1; +# We do not support plain DROP_PK_INDEX without ADD_PK_INDEX. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 DROP INDEX c2, ALGORITHM = INPLACE; +SHOW CREATE TABLE t1; +# Now the previous DEBUG_SYNC should kick in. +--send +ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1); + +--echo # session default +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR scanned'; +eval $innodb_metrics_select; + +# Insert a duplicate entry (4) for the already started UNIQUE INDEX(c1). +BEGIN; +INSERT INTO t1 VALUES(4,7,2); +SET DEBUG_SYNC = 'now SIGNAL insert_done'; + +--echo # session con1 +connection con1; +# Because the modification log will be applied in order and we did +# not roll back before the log apply, there will be a duplicate key +# error on the (4,7,2). +--error ER_DUP_ENTRY +reap; + +--echo # session default +connection default; +ROLLBACK; + +--echo # session con1 +connection con1; +SHOW CREATE TABLE t1; +# Now, rebuild the table without any concurrent DML, while no duplicate exists. +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ALGORITHM = INPLACE; +ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1), ALGORITHM = INPLACE; +eval $innodb_metrics_select; + +--echo # session default +connection default; +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES(6,3,1); +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES(7,4,2); +DROP INDEX c2_2 ON t1; +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +ROLLBACK; + +--echo # session con1 +connection con1; +let $ID= `SELECT @id := CONNECTION_ID()`; +--error ER_QUERY_INTERRUPTED +KILL QUERY @id; + +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR dml_done'; +SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL applied WAIT_FOR kill_done'; +--send +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; + +--echo # session default +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR rebuilt'; +eval $innodb_metrics_select; +BEGIN; +INSERT INTO t1 VALUES(7,4,2); +ROLLBACK; +SET DEBUG_SYNC = 'now SIGNAL dml_done WAIT_FOR applied'; +let $ignore= `SELECT @id := $ID`; +KILL QUERY @id; +SET DEBUG_SYNC = 'now SIGNAL kill_done'; + +--echo # session con1 +connection con1; +--error ER_QUERY_INTERRUPTED +reap; +eval $innodb_metrics_select; + +--echo # session default +connection default; +CHECK TABLE t1; +INSERT INTO t1 SELECT 5 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 10 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 20 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 40 + c1, c2, c3 FROM t1; +# Purge may or may not have cleaned up the DELETE FROM t1 WHERE c1 = 7; +--replace_column 9 ROWS +EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3; +ANALYZE TABLE t1; + +SET @merge_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_0= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); + +--echo # session con1 +connection con1; +SHOW CREATE TABLE t1; +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; + +# Exceed the configured innodb_online_alter_log_max_size. +# The actual limit is a multiple of innodb_sort_buf_size, +# because that is the size of the in-memory log buffers. +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done'; +# Ensure that the ALTER TABLE will be executed even with some concurrent DML. +SET lock_wait_timeout = 10; +--send +ALTER TABLE t1 ROW_FORMAT=COMPACT +PAGE_COMPRESSED = YES PAGE_COMPRESSION_LEVEL = 1, ALGORITHM = INPLACE; + +# Generate some log (delete-mark, delete-unmark, insert etc.) +# while the index creation is blocked. Some of this may run +# in parallel with the clustered index scan. +--echo # session default +connection default; +INSERT INTO t1 SELECT 80 + c1, c2, c3 FROM t1; +INSERT INTO t1 SELECT 160 + c1, c2, c3 FROM t1; +UPDATE t1 SET c2 = c2 + 1; +SET DEBUG_SYNC = 'now WAIT_FOR rebuilt2'; +# At this point, the clustered index scan must have completed, +# but the modification log keeps accumulating due to the DEBUG_SYNC. +eval $innodb_metrics_select; +let $c= 3; +while ($c) +{ + BEGIN; + DELETE FROM t1; + ROLLBACK; + UPDATE t1 SET c2 = c2 + 1; + BEGIN; + UPDATE t1 SET c2 = c2 + 1; + DELETE FROM t1; + ROLLBACK; + dec $c; +} +# Temporary table should exist until the DDL thread notices the overflow. +eval $innodb_metrics_select; + +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); + +SELECT +(@merge_encrypt_1-@merge_encrypt_0)- +(@merge_decrypt_1-@merge_decrypt_0) as sort_balance, +@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0, +@rowlog_encrypt_1>@rowlog_encrypt_0; + +# Release con1. +SET DEBUG_SYNC = 'now SIGNAL dml2_done'; + +--echo # session con1 +connection con1; +# If the following fails with the wrong error, it probably means that +# you should rerun with a larger mtr --debug-sync-timeout. +--error ER_INNODB_ONLINE_LOG_TOO_BIG +reap; +# The table should have been dropped from the data dictionary +# when the above error was noticed. +eval $innodb_metrics_select; + +SET @merge_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_1= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); + +# Accumulate and apply some modification log. +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt3 WAIT_FOR dml3_done'; +--error ER_MULTIPLE_PRI_KEY +ALTER TABLE t1 ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT; +--error ER_DUP_ENTRY +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT; +--send +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c1,c22f,c4(5)), +CHANGE c2 c22f INT, CHANGE c3 c3 CHAR(255) NULL, CHANGE c1 c1 INT AFTER c22f, +ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online', LOCK=NONE; + +--echo # session default +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR rebuilt3'; +# Generate some log (delete-mark, delete-unmark, insert etc.) +eval $innodb_metrics_select; +BEGIN; +INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 240; +DELETE FROM t1 WHERE c1 > 320; +ROLLBACK; +BEGIN; +UPDATE t1 SET c2 = c2 + 1; +DELETE FROM t1; +ROLLBACK; +eval $innodb_metrics_select; +# Release con1. +SET DEBUG_SYNC = 'now SIGNAL dml3_done'; + +--echo # session con1 +connection con1; +reap; +eval $innodb_metrics_select; +SELECT COUNT(c22f) FROM t1; +CHECK TABLE t1; + +SET @merge_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'); +SET @merge_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'); +SET @rowlog_encrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'); +SET @rowlog_decrypt_2= +(SELECT variable_value FROM information_schema.global_status +WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'); + +SELECT +(@merge_encrypt_2-@merge_encrypt_1)- +(@merge_decrypt_2-@merge_decrypt_1) as sort_balance, +(@rowlog_encrypt_2-@rowlog_encrypt_1)- +(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance; +SELECT +@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted, +@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted, +@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted, +@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted; + +# Create a column prefix index. +--error ER_DUP_ENTRY +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)); +UPDATE t1 SET c3 = NULL WHERE c3 = ''; +SET lock_wait_timeout = 1; +--error ER_MULTIPLE_PRI_KEY +ALTER TABLE t1 DROP COLUMN c22f, ADD PRIMARY KEY c3p5(c3(5)); +SET @old_sql_mode = @@sql_mode; +# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on. +# And adding a PRIMARY KEY will also add NOT NULL implicitly! +SET @@sql_mode = 'STRICT_TRANS_TABLES'; +--error ER_INVALID_USE_OF_NULL +ALTER TABLE t1 DROP COLUMN c22f, DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)), +ALGORITHM = INPLACE; + +--error ER_INVALID_USE_OF_NULL +ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL; +SET @@sql_mode = @old_sql_mode; +UPDATE t1 SET c3=LEFT(CONCAT(c1,REPEAT('foo',c1)),255) WHERE c3 IS NULL; + +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created0 WAIT_FOR ins_done0'; +# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on. +SET @@sql_mode = 'STRICT_TRANS_TABLES'; +--send +ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL, DROP COLUMN c22f, +ADD COLUMN c5 CHAR(5) DEFAULT 'tired' FIRST; + +--echo # session default +connection default; + +SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created0'; +BEGIN; +INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti','YLETV2'); +INSERT INTO t1 VALUES(33101,347,NULL,''); +SET DEBUG_SYNC = 'now SIGNAL ins_done0'; + +--echo # session con1 +connection con1; +--error ER_INVALID_USE_OF_NULL +reap; +SET @@sql_mode = @old_sql_mode; + +--echo # session default +connection default; +ROLLBACK; + +--echo # session con1 +connection con1; +ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL; +SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created WAIT_FOR ins_done'; +--send +ALTER TABLE t1 DROP PRIMARY KEY, DROP COLUMN c22f, +ADD COLUMN c6 VARCHAR(1000) DEFAULT +'I love tracking down hard-to-reproduce bugs.', +ADD PRIMARY KEY c3p5(c3(5), c6(2)); + +--echo # session default +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created'; +SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL ins_done WAIT_FOR ddl_timed_out'; +--error ER_BAD_NULL_ERROR +INSERT INTO t1 VALUES(347,33101,NULL,''); +--send +INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti',''); + +--echo # session con1 +connection con1; +--error ER_LOCK_WAIT_TIMEOUT +reap; +SET DEBUG_SYNC = 'now SIGNAL ddl_timed_out'; +eval $innodb_metrics_select; + +--echo # session default +connection default; +reap; +SELECT COUNT(*) FROM t1; +ALTER TABLE t1 ROW_FORMAT=REDUNDANT; +SELECT * FROM t1 LIMIT 10; + +--echo # session con1 +connection con1; +ALTER TABLE t1 DISCARD TABLESPACE; +--echo # Disconnect session con1 +disconnect con1; + +--echo # session default +connection default; +SHOW CREATE TABLE t1; +SET DEBUG_SYNC = 'RESET'; +SET GLOBAL innodb_monitor_disable = module_ddl; +DROP TABLE t1; + +# Check that all connections opened by test cases in this file are really +# gone so execution of other tests won't be affected by their presence. +--source include/wait_until_count_sessions.inc + +SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig; +SET GLOBAL innodb_file_format = @file_format; +--disable_warnings +SET GLOBAL innodb_monitor_enable = default; +SET GLOBAL innodb_monitor_disable = default; +--enable_warnings diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5522-debug.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5522-debug.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5522-debug.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5522-debug.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,4 @@ -# Not supported in embedded +# mysql-test-run.pl --embedded cannot restart the server. --source include/not_embedded.inc # Adding big test option for this test. @@ -15,12 +15,6 @@ -- source include/have_innodb.inc -call mtr.add_suppression("InnoDB: Page for tablespace .* "); -call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS="); -call mtr.add_suppression("InnoDB: Corruption: Block in space_id .* in file .* corrupted"); -call mtr.add_suppression("InnoDB: Based on page type .*"); -FLUSH TABLES; - let MYSQLD_DATADIR =`SELECT @@datadir`; let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; let $pathfix=/: '.*test_wl5522.*t1.ibd'/: 'test_wl5522\\t1.ibd'/; @@ -28,51 +22,36 @@ SET GLOBAL innodb_file_per_table = 1; -DROP DATABASE IF EXISTS test_wl5522; CREATE DATABASE test_wl5522; -##### Before DISCARD commit crash -SET SESSION debug_dbug="+d,ib_discard_before_commit_crash"; - CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = InnoDB; INSERT INTO test_wl5522.t1 VALUES(1),(2),(3); -# Write file to make mysql-test-run.pl start up the server again ---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--let $_server_id= `SELECT @@server_id` +--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect -# Execute the statement that causes the crash +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_discard_before_commit_crash"; --error 2013 ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; ---enable_reconnect ---source include/wait_until_connected_again.inc ---disable_reconnect +--source include/start_mysqld.inc DROP TABLE test_wl5522.t1; -#### Before DISCARD commit crash -##### After DISCARD commit crash SET GLOBAL innodb_file_per_table = 1; -SELECT @@innodb_file_per_table; - -SET SESSION debug_dbug="+d,ib_discard_after_commit_crash"; CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = InnoDB; INSERT INTO test_wl5522.t1 VALUES(1),(2),(3); -# Write file to make mysql-test-run.pl start up the server again ---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - -# Execute the statement that causes the crash +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_discard_after_commit_crash"; --error 2013 ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; ---enable_reconnect ---source include/wait_until_connected_again.inc ---disable_reconnect +--source include/start_mysqld.inc DROP TABLE test_wl5522.t1; -#### After DISCARD commit crash SET GLOBAL innodb_file_per_table = 1; @@ -106,59 +85,35 @@ ib_restore_tablespaces("test_wl5522", "t1"); EOF -##### Before commit crash -SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; - --error ER_TABLESPACE_DISCARDED SELECT * FROM test_wl5522.t1; -# Write file to make mysql-test-run.pl start up the server again ---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - -# Execute the statement that causes the crash +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; --error 2013 ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; ---enable_reconnect ---source include/wait_until_connected_again.inc ---disable_reconnect - -#### Before commit crash +--source include/start_mysqld.inc # Check that the DD is consistent after recovery -##### Before checkpoint crash -SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; - --error ER_TABLESPACE_DISCARDED SELECT COUNT(*) FROM test_wl5522.t1; -# Don't start up the server right away. ---exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - -# Execute the statement that causes the crash +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; --error 2013 ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; # After the above test the results are non-deterministic, # delete the old tablespace files and drop the table, # recreate the table and do a proper import. --- source include/wait_until_disconnected.inc perl; do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; ib_unlink_tablespace("test_wl5522", "t1"); EOF ---echo # Restart and reconnect to the server ---enable_reconnect ---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---source include/wait_until_connected_again.inc ---disable_reconnect - -#### Before checkpoint crash - -# After the above test the results are non-deterministic, recreate the table -# and do a proper import. +--source include/start_mysqld.inc DROP TABLE test_wl5522.t1; @@ -198,6 +153,7 @@ FLUSH TABLES test_wl5522.t1 FOR EXPORT; UNLOCK TABLES; + SET SESSION debug_dbug=@saved_debug_dbug; DROP TABLE test_wl5522.t1; @@ -1087,7 +1043,9 @@ INDEX idx3(c4(512))) Engine=InnoDB; # Stop purge so that it doesn't remove the delete marked entries. -SET GLOBAL INNODB_PURGE_STOP_NOW=ON; +connect (purge_control,localhost,root); +START TRANSACTION WITH CONSISTENT SNAPSHOT; +connection default; # Disable change buffer merge from the master thread, additionally # enable aggressive flushing so that more changes are buffered. @@ -1157,7 +1115,10 @@ SET GLOBAL innodb_disable_background_merge=OFF; # Enable normal operation -SET GLOBAL INNODB_PURGE_RUN_NOW=ON; +connection purge_control; +COMMIT; +disconnect purge_control; +connection default; DROP TABLE test_wl5522.t1; @@ -1195,8 +1156,8 @@ # a Btree that has several levels CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; -INSERT INTO test_wl5522.t1 VALUES - (100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 1200)); +INSERT IGNORE INTO test_wl5522.t1 VALUES + (100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 2731)); INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; @@ -1262,7 +1223,7 @@ ib_restore_tablespaces("test_wl5522", "t1"); EOF -SET SESSION debug_dbug="+d,buf_page_is_corrupt_failure"; +SET SESSION debug_dbug="+d,buf_page_import_corrupt_failure"; --replace_regex /'.*t1.cfg'/'t1.cfg'/ @@ -1484,6 +1445,8 @@ call mtr.add_suppression("Failed to find tablespace for table '\"test_wl5522\".\"t1\"' in the cache"); call mtr.add_suppression("Could not find a valid tablespace file for 'test_wl5522.*t1'"); call mtr.add_suppression("while reading index meta-data, expected to read 44 bytes but read only 0 bytes"); +call mtr.add_suppression("Page for tablespace.*that index is not found from configuration file"); +call mtr.add_suppression("Invalid FSP_SPACE_FLAGS=0x0"); --enable_query_log #cleanup diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5522-debug-zip.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5522-debug-zip.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5522-debug-zip.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5522-debug-zip.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,746 +0,0 @@ -# Not supported in embedded ---source include/not_embedded.inc - -# This test case needs to crash the server. Needs a debug server. ---source include/have_debug.inc - -# Don't test this under valgrind, memory leaks will occur. ---source include/not_valgrind.inc - -# Avoid CrashReporter popup on Mac ---source include/not_crashrep.inc - --- source include/have_innodb.inc - -# compressed table in tests are with sizes KEY_BLOCK_SIZE 1,2,4,8,16 -# Table creatation fails if KEY_BLOCK_SIZE > innodb-page-size,so -# allow test to run only when innodb-page-size=16 ---source include/have_innodb_16k.inc - -call mtr.add_suppression("InnoDB: Page for tablespace "); -call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS=0x"); -call mtr.add_suppression("InnoDB: Corruption: Block in space_id .* in file .* corrupted"); -call mtr.add_suppression("InnoDB: Based on page type .*"); -FLUSH TABLES; - -let MYSQLD_DATADIR =`SELECT @@datadir`; -let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; -let $innodb_file_format = `SELECT @@innodb_file_format`; -let $pathfix=/: '.*test_wl5522.*t1.ibd'/: 'test_wl5522_t1.ibd'/; - -SET GLOBAL innodb_file_per_table = 1; - -SET GLOBAL innodb_file_format = `Barracuda`; -SET SESSION innodb_strict_mode=1; - -DROP DATABASE IF EXISTS test_wl5522; -CREATE DATABASE test_wl5522; - -# Create the table that we will use for crash recovery (during IMPORT) -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; -INSERT INTO test_wl5522.t1 VALUES (1), (2), (3), (4); - ---replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ - -FLUSH TABLES test_wl5522.t1 FOR EXPORT; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_backup_tablespaces("test_wl5522", "t1"); -EOF -UNLOCK TABLES; - -DROP TABLE test_wl5522.t1; - -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; -INSERT INTO test_wl5522.t1 VALUES (1); - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_discard_tablespaces("test_wl5522", "t1"); -EOF - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -##### Before commit crash -SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; - ---error ER_TABLESPACE_DISCARDED -SELECT * FROM test_wl5522.t1; - -# Write file to make mysql-test-run.pl start up the server again ---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - -# Execute the statement that causes the crash ---error 2013 -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - ---enable_reconnect ---source include/wait_until_connected_again.inc ---disable_reconnect - -#### Before commit crash - -# Check that the DD is consistent after recovery - -##### Before checkpoint crash -SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Don't start up the server right away. ---exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - -# Execute the statement that causes the crash ---error 2013 -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -# After the above test the results are non-deterministic, -# delete the old tablespace files and drop the table, -# recreate the table and do a proper import. --- source include/wait_until_disconnected.inc -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - ---echo # Restart and reconnect to the server ---enable_reconnect ---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---source include/wait_until_connected_again.inc ---disable_reconnect - -#### Before checkpoint crash - -# After the above test the results are non-deterministic, recreate the table -# and do a proper import. - -DROP TABLE test_wl5522.t1; - -SET GLOBAL innodb_file_per_table = 1; -SET GLOBAL innodb_file_format = `Barracuda`; - -SET SESSION innodb_strict_mode=1; - -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -CHECK TABLE test_wl5522.t1; - -SELECT COUNT(*) FROM test_wl5522.t1; - -INSERT INTO test_wl5522.t1 VALUES(400), (500), (600); - -SELECT * FROM test_wl5522.t1; - -DROP TABLE test_wl5522.t1; - -# Test handling of internal failure error -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -# Test failure after reset of space id and LSN in the tablespace -SET @saved_debug_dbug = @@SESSION.debug_dbug; -SET SESSION debug_dbug="+d,ib_import_internal_error"; - ---replace_regex /'.*t1.cfg'/'t1.cfg'/ - ---error ER_INTERNAL_ERROR -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -DROP TABLE test_wl5522.t1; - - -# Test failure after reset of space id and LSN in the tablespace -CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb -ROW_FORMAT=COMPRESSED; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -# Test failure after reset of space id and LSN in the tablespace -SET SESSION debug_dbug="+d,ib_import_reset_space_and_lsn_failure"; - ---replace_regex /'.*t1.cfg'/'t1.cfg'/ - ---error ER_INTERNAL_ERROR -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Test failure after attempting a tablespace open -SET SESSION debug_dbug="+d,ib_import_open_tablespace_failure"; - ---replace_regex /'.*[\/\\]/'/ ---error ER_GET_ERRMSG -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -# Test failure after ibuf check -SET SESSION debug_dbug="+d,ib_import_check_bitmap_failure"; - -# Need proper mapping of error codes :-( ---error ER_NOT_KEYFILE -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -# Test failure after adjusting the cluster index root page -SET SESSION debug_dbug="+d,ib_import_cluster_root_adjust_failure"; - ---error ER_NOT_KEYFILE -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -# Test failure after importing the cluster index -SET SESSION debug_dbug="+d,ib_import_cluster_failure"; - ---error ER_NOT_KEYFILE -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -# Test failure after importing the secondary index(es) -SET SESSION debug_dbug="+d,ib_import_sec_root_adjust_failure"; - ---error ER_NOT_KEYFILE -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -# Test failure after importing the cluster index -SET SESSION debug_dbug="+d,ib_import_set_max_rowid_failure"; - ---error ER_NOT_KEYFILE -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -# Left over from the failed IMPORT -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -DROP TABLE test_wl5522.t1; - ---disable_query_log -# Enable metrics for the counters we are going to use -set global innodb_monitor_enable = purge_stop_count; -set global innodb_monitor_enable = purge_resume_count; -set global innodb_monitor_enable = ibuf_merges; -set global innodb_monitor_enable = ibuf_merges_insert; ---enable_query_log - -# -# Create a large table with delete marked records, disable purge during -# the update so that we can test the IMPORT purge code. -# -CREATE TABLE test_wl5522.t1 ( - c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, - c2 BIGINT, - c3 VARCHAR(2048), - c4 VARCHAR(2048), - INDEX idx1(c2), - INDEX idx2(c3(512)), - INDEX idx3(c4(512))) Engine=InnoDB - ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; - -# Stop purge so that it doesn't remove the delete marked entries. -SET GLOBAL INNODB_PURGE_STOP_NOW=ON; - -# Disable change buffer merge from the master thread, additionally -# enable aggressive flushing so that more changes are buffered. -SET GLOBAL innodb_disable_background_merge=ON; -SET GLOBAL innodb_monitor_reset = ibuf_merges; -SET GLOBAL innodb_monitor_reset = ibuf_merges_insert; - -INSERT INTO test_wl5522.t1(c2, c3, c4) VALUES - (1, REPEAT('a', 2048), REPEAT('a', 2048)), - (2, REPEAT('b', 2048), REPEAT('b', 2048)), - (3, REPEAT('c', 2048), REPEAT('c', 2048)), - (4, REPEAT('d', 2048), REPEAT('d', 2048)); - -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; - -DELETE FROM test_wl5522.t1 WHERE c2 = 1; - -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c2 = c2 + c1; -UPDATE test_wl5522.t1 SET c3 = REPEAT("c2", 1024); -UPDATE test_wl5522.t1 SET c4 = REPEAT("c4", 1024); - -SHOW CREATE TABLE test_wl5522.t1; - -SELECT c1, c2 FROM test_wl5522.t1; -SELECT COUNT(*) FROM test_wl5522.t1; -SELECT SUM(c2) FROM test_wl5522.t1; - -SELECT name - FROM information_schema.innodb_metrics - WHERE name = 'ibuf_merges_insert' AND count = 0; - -FLUSH TABLES test_wl5522.t1 FOR EXPORT; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_backup_tablespaces("test_wl5522", "t1"); -EOF - -UNLOCK TABLES; - -SELECT name - FROM information_schema.innodb_metrics - WHERE name = 'ibuf_merges' AND count > 0; - -SELECT name - FROM information_schema.innodb_metrics - WHERE name = 'ibuf_merges_inserts' AND count > 0; - -SET GLOBAL innodb_disable_background_merge=OFF; - -# Enable normal operation -SET GLOBAL INNODB_PURGE_RUN_NOW=ON; - -DROP TABLE test_wl5522.t1; - -CREATE TABLE test_wl5522.t1 ( - c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, - c2 BIGINT, - c3 VARCHAR(2048), - c4 VARCHAR(2048), - INDEX idx1(c2), - INDEX idx2(c3(512)), - INDEX idx3(c4(512))) Engine=InnoDB - ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; - -SELECT c1, c2 FROM test_wl5522.t1; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; -CHECK TABLE test_wl5522.t1; - -SELECT c1,c2 FROM test_wl5522.t1; -SELECT COUNT(*) FROM test_wl5522.t1; -SELECT SUM(c2) FROM test_wl5522.t1; - -SHOW CREATE TABLE test_wl5522.t1; - -DROP TABLE test_wl5522.t1; - -#### -# Create a table and save the tablespace and .cfg file, we need to create -# a Btree that has several levels -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -INSERT INTO test_wl5522.t1 VALUES - (100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 1200)); - -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; -SELECT COUNT(*) FROM test_wl5522.t1; -FLUSH TABLES test_wl5522.t1 FOR EXPORT; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_backup_tablespaces("test_wl5522", "t1"); -EOF - -UNLOCK TABLES; - -DROP TABLE test_wl5522.t1; - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug="+d,ib_import_trigger_corruption_1"; - ---replace_regex /'.*t1.cfg'/'t1.cfg'/ - ---error ER_INTERNAL_ERROR -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -# - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug="+d,buf_page_is_corrupt_failure"; - ---replace_regex /'.*t1.cfg'/'t1.cfg'/ - -# Following alter is not failing -#--error ER_INTERNAL_ERROR -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug="+d,ib_import_trigger_corruption_2"; - ---replace_regex $pathfix - ---error ER_INNODB_INDEX_CORRUPT -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug="+d,ib_import_trigger_corruption_3"; - ---replace_regex /'.*t1.cfg'/'t1.cfg'/ - ---error ER_NOT_KEYFILE -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -SET SESSION debug_dbug="+d,ib_import_create_index_failure_1"; - -ALTER TABLE test_wl5522.t1 ADD INDEX idx(c1); - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -# - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug="+d,fil_space_create_failure"; - ---replace_regex /'.*[\/\\]/'/ ---error ER_GET_ERRMSG -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -# - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug="+d,dict_tf_to_fsp_flags_failure"; - ---replace_regex /'.*[\/\\]/'/ ---error ER_GET_ERRMSG -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - -# - -CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb -ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; - -ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; - ---error ER_TABLESPACE_DISCARDED -SELECT COUNT(*) FROM test_wl5522.t1; - -# Restore files -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_restore_tablespaces("test_wl5522", "t1"); -EOF - -SET SESSION debug_dbug="+d,fsp_flags_is_valid_failure"; - ---replace_regex /'.*t1.cfg'/'t1.cfg'/ - ---error ER_INTERNAL_ERROR -ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; - -SET SESSION debug_dbug=@saved_debug_dbug; - -DROP TABLE test_wl5522.t1; - -perl; -do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; -ib_unlink_tablespace("test_wl5522", "t1"); -EOF - - -DROP DATABASE test_wl5522; - -set global innodb_monitor_disable = all; -set global innodb_monitor_reset_all = all; - --- disable_warnings -set global innodb_monitor_enable = default; -set global innodb_monitor_disable = default; -set global innodb_monitor_reset = default; -set global innodb_monitor_reset_all = default; --- enable_warnings - ---disable_query_log -call mtr.add_suppression("'Resource temporarily unavailable'"); -call mtr.add_suppression("Monitor ibuf_merges is already enabled"); -call mtr.add_suppression("Monitor ibuf_merges_insert is already enabled"); -call mtr.add_suppression("Got error -1 when reading table '.*'"); -call mtr.add_suppression("InnoDB: Table '.*' tablespace is set as discarded."); -call mtr.add_suppression("InnoDB: Tablespace '.*' exists in the cache.*"); -call mtr.add_suppression("InnoDB: Freeing existing tablespace '.*' entry from the cache with id.*"); -call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded"); -call mtr.add_suppression(".*There was an error writing to the meta data file.*"); -call mtr.add_suppression("InnoDB: Trying to import a tablespace, but could not open the tablespace file"); -call mtr.add_suppression("Unsupported tablespace format"); -call mtr.add_suppression("Error in page .* of index \"GEN_CLUST_INDEX\" of table \"test_wl5522\".\"t1\""); -call mtr.add_suppression("Page is marked as free"); -call mtr.add_suppression("t1.ibd: Page .* at offset .* looks corrupted"); -call mtr.add_suppression("but tablespace with that id or name does not exist"); -call mtr.add_suppression("Failed to find tablespace for table '\"test_wl5522\".\"t1\"' in the cache"); -call mtr.add_suppression("Could not find a valid tablespace file for 'test_wl5522.*t1'"); ---enable_query_log - -#cleanup ---remove_file $MYSQLTEST_VARDIR/tmp/t1.cfg ---remove_file $MYSQLTEST_VARDIR/tmp/t1.ibd - -eval SET GLOBAL INNODB_FILE_PER_TABLE=$innodb_file_per_table; -eval SET GLOBAL INNODB_FILE_FORMAT=$innodb_file_format; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5980-alter.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5980-alter.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5980-alter.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5980-alter.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,3 @@ +--loose-innodb-sys-indexes +--loose-innodb-sys-columns +--loose-innodb-sys-fields diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5980-alter.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5980-alter.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb-wl5980-alter.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb-wl5980-alter.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,593 @@ +--echo # +--echo # This is a copy of innodb-alter.test except using remote tablespaces +--echo # and showing those files. +--echo # + +--source include/have_innodb.inc + +--disable_query_log +# These values can change during the test +LET $innodb_file_per_table_orig=`select @@innodb_file_per_table`; +LET $regexp=/FTS_([0-9a-f_]+)([A-Z0-9_]+)\.ibd/FTS_AUX_\2.ibd/; + +# Set up some variables +LET $MYSQL_DATA_DIR = `select @@datadir`; +LET $data_directory_clause = DATA DIRECTORY='$MYSQL_TMP_DIR/alt_dir'; +--enable_query_log + +SET default_storage_engine=InnoDB; +SET GLOBAL innodb_file_per_table=ON; + +SET NAMES utf8; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval CREATE TABLE t1 ( + c1 INT PRIMARY KEY, c2 INT DEFAULT 1, ct TEXT, + INDEX(c2)) +ENGINE=InnoDB $data_directory_clause; + +INSERT INTO t1 SET c1=1; + +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME LIKE 'test/t%'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; + +CREATE TABLE t1p LIKE t1; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval CREATE TABLE t1c (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX(c2), INDEX(c3), + CONSTRAINT t1c2 FOREIGN KEY (c2) REFERENCES t1(c2), + CONSTRAINT t1c3 FOREIGN KEY (c3) REFERENCES t1p(c2)) +ENGINE=InnoDB $data_directory_clause; + +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i +WHERE FOR_NAME LIKE 'test/t%'; + +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; + +-- source suite/innodb/include/innodb_dict.inc + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; +ALTER TABLE t1 ALTER c2 DROP DEFAULT; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +-- source suite/innodb/include/innodb_dict.inc + +# These should be no-op. +ALTER TABLE t1 CHANGE c2 c2 INT AFTER c1; +ALTER TABLE t1 CHANGE c1 c1 INT FIRST; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 CHANGE C2 c3 INT; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 CHANGE c3 C INT; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 CHANGE C Cöŀumň_TWO INT; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS i +INNER JOIN sys_foreign sf ON i.ID = sf.ID; + +-- source suite/innodb/include/innodb_dict.inc + +-- error ER_BAD_FIELD_ERROR +ALTER TABLE t1 CHANGE cöĿǖmň_two c3 INT; + +ALTER TABLE t1 CHANGE cÖĿUMŇ_two c3 INT, RENAME TO t3; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t3; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1c; + +# The maximum column name length should be 64 characters. +--error ER_TOO_LONG_IDENT +ALTER TABLE t3 CHANGE c3 +`12345678901234567890123456789012345678901234567890123456789012345` INT; +ALTER TABLE t3 CHANGE c3 +`1234567890123456789012345678901234567890123456789012345678901234` INT; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t3; + +# Test the length limit with non-ASCII utf-8 characters. +--error ER_TOO_LONG_IDENT +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿偀` INT; + +--error ER_TOO_LONG_IDENT +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿ä` INT; + +ALTER TABLE t3 CHANGE +`1234567890123456789012345678901234567890123456789012345678901234` +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾ä` INT; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +# check that the rename is case-insensitive (note the upper-case ä at end) +ALTER TABLE t3 CHANGE +`倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾Ä` +c3 INT; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +# test with 4-byte UTF-8 (should be disallowed) +--error ER_INVALID_CHARACTER_STRING +ALTER TABLE t3 CHANGE c3 𐌀𐌁𐌂𐌃𐌄𐌅𐌆𐌇𐌈𐌉𐌊𐌋𐌌𐌍𐌎𐌏𐌐𐌑𐌒𐌓𐌔𐌕𐌖𐌗𐌘𐌙𐌚𐌛𐌜 INT; + +--error ER_INVALID_CHARACTER_STRING +ALTER TABLE t3 CHANGE c3 😲 INT; + +ALTER TABLE t3 RENAME TO t2; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t2; + +RENAME TABLE t2 TO t1; + +SELECT st.NAME, i.NAME +FROM sys_tables st INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLES i +ON i.TABLE_ID=st.TABLE_ID; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +-- source suite/innodb/include/innodb_dict.inc + +--error ER_DROP_INDEX_FK +ALTER TABLE t1 DROP INDEX c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1 DROP INDEX c4; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY t1c2, DROP FOREIGN KEY c2, DROP INDEX c2; + +--error ER_DROP_INDEX_FK +ALTER TABLE t1c DROP INDEX c2; + +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1c DROP FOREIGN KEY ẗ1C2; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1c; + +SET foreign_key_checks=0; +DROP TABLE t1p; +SET foreign_key_checks=1; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1c; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +-- source suite/innodb/include/innodb_dict.inc + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval CREATE TABLE t1p (c1 INT PRIMARY KEY, c2 INT, INDEX(c2)) + ENGINE=InnoDB $data_directory_clause; + +--error ER_DROP_INDEX_FK +ALTER TABLE t1c DROP INDEX C2, DROP INDEX C3; +--error ER_DROP_INDEX_FK +ALTER TABLE t1c DROP INDEX C3; + +SET foreign_key_checks=0; +ALTER TABLE t1c DROP INDEX C3; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +SET foreign_key_checks=1; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1c; + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1c DROP FOREIGN KEY t1C3; + +--echo ### files in MYSQL_DATA_DIR/test +--list_files $MYSQL_DATA_DIR/test +--replace_regex $regexp +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1c; +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1c DROP INDEX c2, DROP FOREIGN KEY t1C2; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1c; + +-- source suite/innodb/include/innodb_dict.inc + +ALTER TABLE t1 DROP INDEX c2, CHANGE c3 c2 INT; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +-- source suite/innodb/include/innodb_dict.inc + +CREATE TABLE t1o LIKE t1; + +# This will implicitly add a DOC_ID column. +# The LOCK=NONE should thus fail. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=NONE; + +# Retry with LOCK=EXCLUSIVE. +ALTER TABLE t1 ADD FULLTEXT INDEX (ct), +CHANGE c1 pk INT, ALTER c2 SET DEFAULT 42, RENAME TO tt, +ALGORITHM=INPLACE, LOCK=SHARED; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +# The output should be empty, because index->id was reassigned. +-- source suite/innodb/include/innodb_dict.inc + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE tt; + +# DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR are reserved InnoDB system column names. +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=COPY; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 dB_row_Id INT, ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 DB_TRX_ID INT; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o CHANGE c1 db_roll_ptr INT; + +# FTS_DOC_ID is the internal row identifier for full-text search. +# It should be of type BIGINT UNSIGNED NOT NULL. +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=COPY; + +--error ER_INNODB_FT_WRONG_DOCID_COLUMN +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_DOC_ID INT, +ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), CHANGE c1 FTS_Doc_ID INT, +ALGORITHM=INPLACE; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; + +CREATE TABLE t1n LIKE t1o; + +ALTER TABLE t1n ADD FULLTEXT INDEX(ct); + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=INPLACE; +--error ER_WRONG_COLUMN_NAME +ALTER TABLE t1n CHANGE c1 Fts_DOC_ID INT, ALGORITHM=COPY; +--error ER_BAD_FIELD_ERROR +ALTER TABLE t1n CHANGE FTS_DOC_ID c11 INT, ALGORITHM=INPLACE; +ALTER TABLE t1n CHANGE c1 FTS_DOC_ïD INT, ALGORITHM=INPLACE; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +ALTER TABLE t1n CHANGE FTS_DOC_ÏD c1 INT, ALGORITHM=INPLACE; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +ALTER TABLE t1n CHANGE c1 c2 INT, CHANGE c2 ct INT, CHANGE ct c1 TEXT, +ALGORITHM=INPLACE; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1n; +ALTER TABLE t1n CHANGE c2 c1 INT, CHANGE ct c2 INT, CHANGE c1 ct TEXT, +ALGORITHM=COPY; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1n; + +--error ER_KEY_COLUMN_DOES_NOT_EXITS +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=INPLACE; +--error ER_KEY_COLUMN_DOES_NOT_EXITS +ALTER TABLE t1n ADD INDEX(c2), CHANGE c2 c4 INT, ALGORITHM=COPY; + +ALTER TABLE t1n ADD INDEX(c4), CHANGE c2 c4 INT, ALGORITHM=INPLACE; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1n; +ALTER TABLE t1n DROP INDEX c4; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--error ER_DUP_FIELDNAME +ALTER TABLE t1n CHANGE c4 c1 INT, ADD INDEX(c1), ALGORITHM=INPLACE; +ALTER TABLE t1n CHANGE c4 c11 INT, ADD INDEX(c11), ALGORITHM=INPLACE; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1n; +DROP TABLE t1n; + +ALTER TABLE t1o MODIFY c1 BIGINT UNSIGNED NOT NULL; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +ALTER TABLE t1o ADD FULLTEXT INDEX(ct), +CHANGE c1 FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ALGORITHM=INPLACE; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +# This would create a hidden FTS_DOC_ID column, which cannot be done online. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +LOCK=NONE; + +# This should not show duplicates. +SELECT sc.pos FROM information_schema.innodb_sys_columns sc +INNER JOIN information_schema.innodb_sys_tables st +ON sc.TABLE_ID=st.TABLE_ID +WHERE st.NAME='test/t1o' AND sc.NAME='FTS_DOC_ID'; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1o; + +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL, +DROP INDEX ct, LOCK=NONE; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +SHOW CREATE TABLE t1o; + +DROP TABLE t1c, t1p, sys_tables, sys_indexes, sys_foreign; + +# Check the internal schemata of tt, t1o. + +CREATE TABLE sys_tables SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES +WHERE NAME='test/t1o'; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; +CREATE TABLE sys_foreign SELECT i.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN i WHERE FOR_NAME='test/t1o'; + +-- source suite/innodb/include/innodb_dict.inc + +# Ensure that there exists no hidden FTS_DOC_ID_INDEX on foo_id. + +ALTER TABLE t1o ADD UNIQUE INDEX FTS_DOC_ID_INDEX(foo_id); + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +ALTER TABLE t1o CHANGE foo_id FTS_DOC_ID BIGINT UNSIGNED NOT NULL, +ADD FULLTEXT INDEX(ct); + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test + +--error ER_INNODB_FT_WRONG_DOCID_INDEX +ALTER TABLE t1o CHANGE FTS_DOC_ID foo_id BIGINT UNSIGNED NOT NULL; + +DROP TABLE sys_indexes; +CREATE TABLE sys_indexes SELECT i.* FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES i +INNER JOIN sys_tables st ON i.TABLE_ID=st.TABLE_ID; + +-- source suite/innodb/include/innodb_dict.inc + +--echo # +--echo # Cleanup +--echo # + +DROP TABLE tt, t1o, sys_tables, sys_indexes, sys_foreign; + +--echo ### files in MYSQL_DATA_DIR/test +--replace_regex $regexp +--list_files $MYSQL_DATA_DIR/test +--echo ### files in MYSQL_TMP_DIR/alt_dir/test +--replace_regex $regexp +--list_files $MYSQL_TMP_DIR/alt_dir/test +--rmdir $MYSQL_TMP_DIR/alt_dir/test +--rmdir $MYSQL_TMP_DIR/alt_dir + +-- disable_query_log +eval set global innodb_file_per_table=$innodb_file_per_table_orig; +call mtr.add_suppression("deleting orphaned .ibd file"); +-- enable_query_log diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,4 @@ +--skip-innodb-doublewrite +--innodb-file-per-table +--innodb-file-format=Barracuda +--innodb-change-buffering=none diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,118 @@ +#************************************************************ +# WL6045:Improve Innochecksum +#************************************************************ +--source include/innodb_page_size_small.inc +--source include/have_debug.inc +--source include/no_valgrind_without_big.inc +# Avoid CrashReporter popup on Mac. +--source include/not_crashrep.inc + +--source include/not_embedded.inc +-- source include/big_test.inc + +--disable_query_log +# This warning occurs due to small buffer pool size(i.e. 8MB). It doesn't occur +# with --mysqld=--innodb_buffer_pool_size=10MB +call mtr.add_suppression("\\[Warning\\] InnoDB: Difficult to find free blocks in the buffer pool.*"); +--enable_query_log +let MYSQLD_BASEDIR= `SELECT @@basedir`; +let MYSQLD_DATADIR= `SELECT @@datadir`; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; + +SET GLOBAL innodb_compression_level=0; +SELECT @@innodb_compression_level; + +CREATE TABLE t1 (j LONGBLOB) ENGINE = InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; +INSERT INTO t1 VALUES (repeat('abcdefghijklmnopqrstuvwxyz',200)); +let $i=10; +while ($i > 0) { + INSERT INTO t1 SELECT * from t1; + dec $i; +} + +--echo # stop the server +--source include/shutdown_mysqld.inc + +# Page_type_dump for t1 +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--exec $INNOCHECKSUM -v --page-type-dump $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/test/t1.ibd +--file_exists $MYSQLTEST_VARDIR/tmp/dump.txt +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +--echo [1]:# check the both short and long options for "help" +--exec $INNOCHECKSUM --help $MYSQLD_DATADIR/test/t1.ibd > $MYSQLTEST_VARDIR/tmp/help_output_long.txt +--exec $INNOCHECKSUM -I $MYSQLD_DATADIR/test/t1.ibd > $MYSQLTEST_VARDIR/tmp/help_output_short.txt +--diff_files $MYSQLTEST_VARDIR/tmp/help_output_long.txt $MYSQLTEST_VARDIR/tmp/help_output_short.txt + +--echo [2]:# Run the innochecksum when file isn't provided. +--echo # It will print the innochecksum usage similar to --help option. +--error 1 +--exec $INNOCHECKSUM > $MYSQLTEST_VARDIR/tmp/usage.txt +--diff_files $MYSQLTEST_VARDIR/tmp/help_output_long.txt $MYSQLTEST_VARDIR/tmp/usage.txt +--remove_file $MYSQLTEST_VARDIR/tmp/usage.txt + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +my $file= 'help_output_long.txt'; +# open file in write mode +open IN_FILE,"<", "$dir/tmp/$file" or die $!; +open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!; +while() { + unless ($_=~ /^debug.*$/ || $_=~ /\-#, \-\-debug.*$/ || $_=~ /http:.*html/) { + $_=~ s/^\S*innochecksum.+Ver.+[0-9]*\.[0-9]*\.[0-9]*.+$/innochecksum Ver #.#.#/g; + $_=~ s/(Copyright\s\(c\))\s([0-9]*),\s([0-9]*)(.*)/$1 YEAR, YEAR $4/g; + $_=~ s/Usage:.*\[-c/Usage: innochecksum [-c/g; + print OUT_FILE $_; + } +} +close(IN_FILE); +close(OUT_FILE); +# move the new content from tmp file to the orginal file. +move ("$dir/tmp/tmpfile", "$dir/tmp/$file"); +EOF + +--cat_file $MYSQLTEST_VARDIR/tmp/help_output_long.txt +--remove_file $MYSQLTEST_VARDIR/tmp/help_output_long.txt +--remove_file $MYSQLTEST_VARDIR/tmp/help_output_short.txt + +--echo [3]:# check the both short and long options for "count" and exit +--replace_regex /[0-9]+/#/ +--exec $INNOCHECKSUM --count $MYSQLD_DATADIR/test/t1.ibd +--replace_regex /[0-9]+/#/ +--exec $INNOCHECKSUM -c $MYSQLD_DATADIR/test/t1.ibd + +--echo [4]:# Print the version of innochecksum and exit +--replace_regex /.*innochecksum.*Ver.*[0-9]*.[0-9]*.[0-9]*.*/innochecksum Ver #.#.#/ +--exec $INNOCHECKSUM -V $MYSQLD_DATADIR/test/t1.ibd + +--echo # Restart the DB server +--source include/start_mysqld.inc + +DROP TABLE t1; + +--echo [5]:# Check the innochecksum for compressed table t1 with different key_block_size +--echo # Test for KEY_BLOCK_SIZE=1 +--let $size=1 +--source ../include/innodb-wl6045.inc + +--echo # Test for KEY_BLOCK_SIZE=2 +--let $size=2 +--source ../include/innodb-wl6045.inc + +--echo # Test for for KEY_BLOCK_SIZE=4 +--let $size=4 +--source ../include/innodb-wl6045.inc + +set innodb_strict_mode=off; +--echo # Test for for KEY_BLOCK_SIZE=8 +--let $size=8 +--source ../include/innodb-wl6045.inc + +set innodb_strict_mode=off; +--echo # Test for KEY_BLOCK_SIZE=16 +--let $size=16 +--source ../include/innodb-wl6045.inc +--echo # Test[5] completed diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,2 @@ +--innodb-file-per-table +--innodb-file-format=Barracuda diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,406 @@ +#************************************************************ +# WL6045:Improve Innochecksum +#************************************************************ +--source include/innodb_page_size_small.inc + +--source include/no_valgrind_without_big.inc + +# Embedded server does not support crashing. +--source include/not_embedded.inc + +# Avoid CrashReporter popup on Mac. +--source include/not_crashrep.inc + +--echo # Set the environmental variables +let MYSQLD_BASEDIR= `SELECT @@basedir`; +let MYSQLD_DATADIR= `SELECT @@datadir`; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; + +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to.*"); + +--echo [1]: Further Test are for rewrite checksum (innodb|crc32|none) for all ibd file & start the server. + +CREATE TABLE tab1 (pk INTEGER NOT NULL PRIMARY KEY, +linestring_key GEOMETRY NOT NULL, +linestring_nokey GEOMETRY NOT NULL) +ENGINE=InnoDB ; + +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (1, ST_GeomFromText('POINT(10 10) '), ST_GeomFromText('POINT(10 10) ')); + +CREATE INDEX linestring_index ON tab1(linestring_nokey(5)); +ALTER TABLE tab1 ADD KEY (linestring_key(5)); + +--echo # create a compressed table +CREATE TABLE tab2(col_1 CHAR (255) , +col_2 VARCHAR (255), col_3 longtext, +col_4 longtext,col_5 longtext, +col_6 longtext , col_7 int ) +engine = innodb row_format=compressed key_block_size=4; + +CREATE INDEX idx1 ON tab2(col_3(10)); +CREATE INDEX idx2 ON tab2(col_4(10)); +CREATE INDEX idx3 ON tab2(col_5(10)); + +# load the with repeat function +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); + +# insert 5 records +let $i = 5; +while ($i) { + eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) + VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + dec $i; +} + +--disable_result_log +SELECT * FROM tab2 ORDER BY col_7; + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [1(a)]: Rewrite into new checksum=InnoDB for all *.ibd file and ibdata1 +--exec $INNOCHECKSUM --write=InnoDB $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --write=InnoDB $MYSQLD_DATADIR/test/tab2.ibd +--exec $INNOCHECKSUM --write=InnoDB $MYSQLD_DATADIR/ibdata1 +perl; +foreach (glob("$ENV{MYSQLD_DATADIR}/*/*.ibd")) { + system("$ENV{INNOCHECKSUM} --no-check --write=InnoDB $_") +} +EOF + +--echo : start the server with innodb_checksum_algorithm=strict_innodb +--let $restart_parameters= --innodb_checksum_algorithm=strict_innodb +--source include/start_mysqld.inc + +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (2, ST_GeomFromText('LINESTRING(10 10,20 20,30 30)'), ST_GeomFromText('LINESTRING(10 10,20 20,30 30)')); + +# load the with repeat function +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); + +# check the table status is GOOD with DML +let $i = 6; +eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + +-- disable_result_log +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; + +-- disable_result_log +SELECT * FROM tab2 ORDER BY col_7; + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [1(b)]: Rewrite into new checksum=crc32 for all *.ibd file and ibdata1 +--exec $INNOCHECKSUM --write=CRC32 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --write=CRC32 $MYSQLD_DATADIR/test/tab2.ibd +--exec $INNOCHECKSUM --write=CRC32 $MYSQLD_DATADIR/ibdata1 +perl; +foreach (glob("$ENV{MYSQLD_DATADIR}/*/*.ibd")) { + system("$ENV{INNOCHECKSUM} --no-check --write=crc32 $_") +} +EOF + +--echo # start the server with innodb_checksum_algorithm=strict_crc32 +--let $restart_parameters= --innodb_checksum_algorithm=strict_crc32 +--source include/start_mysqld.inc + +# check the table status is GOOD with DML +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (3, ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))'), +ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))')); + +# load the with repeat function +SET @col_1 = repeat('g', 5); +SET @col_2 = repeat('h', 20); +SET @col_3 = repeat('i', 100); +SET @col_4 = repeat('j', 100); +SET @col_5 = repeat('k', 100); +SET @col_6 = repeat('l', 100); + +# check the table status is GOOD with DML +let $i = 7; +eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + +# check the records from table +-- disable_result_log +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; + +-- disable_result_log +SELECT * FROM tab2 ORDER BY col_7; + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [1(c)]: Rewrite into new checksum=none for all *.ibd file and ibdata1 +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/test/tab2.ibd +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/ibdata1 +perl; +foreach (glob("$ENV{MYSQLD_DATADIR}/undo*")) { + system("$ENV{INNOCHECKSUM} --no-check --write=NONE $_") +} +foreach (glob("$ENV{MYSQLD_DATADIR}/*/*.ibd")) { + system("$ENV{INNOCHECKSUM} --no-check --write=NONE $_") +} +EOF + +--let $restart_parameters= --innodb_checksum_algorithm=strict_none +--source include/start_mysqld.inc +--let $restart_parameters= +# check the table status is GOOD with DML +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (4, ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) '), ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) ')); + +# load the with repeat function +SET @col_1 = repeat('m', 5); +SET @col_2 = repeat('n', 20); +SET @col_3 = repeat('o', 100); +SET @col_4 = repeat('p', 100); +SET @col_5 = repeat('q', 100); +SET @col_6 = repeat('r', 100); + +# check the table status is GOOD with DML +let $i = 8; +eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + +# check the records from table +-- disable_result_log +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; + +--disable_result_log +SELECT * FROM tab2 ORDER BY col_7; +--enable_result_log + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [2]: Check the page type summary with shortform for tab1.ibd +--replace_regex /File.*.ibd/File::tab1.ibd/ /[0-9]+/#/ +--exec $INNOCHECKSUM -S $MYSQLD_DATADIR/test/tab1.ibd 2>$MYSQLTEST_VARDIR/tmp/page_summary_short.txt + +--echo [3]: Check the page type summary with longform for tab1.ibd +--replace_regex /File.*.ibd/File::tab1.ibd/ /[0-9]+/#/ +--exec $INNOCHECKSUM --page-type-summary $MYSQLD_DATADIR/test/tab1.ibd 2>$MYSQLTEST_VARDIR/tmp/page_summary_long.txt + +--remove_file $MYSQLTEST_VARDIR/tmp/page_summary_short.txt +--remove_file $MYSQLTEST_VARDIR/tmp/page_summary_long.txt +--echo [4]: Page type dump for with longform for tab1.ibd +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--exec $INNOCHECKSUM --page-type-dump $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/test/tab1.ibd + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +opendir(DIR, $dir) or die $!; +my $file= 'dump.txt'; +# open file in write mode +open IN_FILE,"<", "$dir/tmp/$file" or die $!; +open OUT_FILE, ">", "$dir/tmp/innochecksum_3_tempfile" or die $!; +while() +{ + # Replace the intergers to # and complete file path to file name only. + $_=~ s/Filename.+/Filename::tab1.ibd/g; + $_=~ s/\d+/#/g; + print OUT_FILE $_; +} +close(IN_FILE); +close(OUT_FILE); +# move the new content from tmp file to the orginal file. +move ("$dir/tmp/innochecksum_3_tempfile", "$dir/tmp/$file"); +closedir(DIR); +EOF + +--echo # Print the contents stored in dump.txt +cat_file $MYSQLTEST_VARDIR/tmp/dump.txt; +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +--echo # Variables used by page type dump for ibdata1 +--exec $INNOCHECKSUM -v --page-type-dump $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/ibdata1 > $MYSQLTEST_VARDIR/tmp/page_verbose_summary.txt + +--file_exists $MYSQLTEST_VARDIR/tmp/dump.txt +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +opendir(DIR, $dir) or die $!; +my $file= 'page_verbose_summary.txt'; +# open file in write mode +open IN_FILE,"<", "$dir/tmp/$file" or die $!; +open OUT_FILE, ">", "$dir/tmp/innochecksum_3_tempfile" or die $!; +while() +{ + # Replace complete file path to file name only. + $_=~ s/$dir/MYSQLTEST_VARDIR/; + # Remove debug option, which is not in all builds + next if (/debug/); + print OUT_FILE $_; +} +close(IN_FILE); +close(OUT_FILE); +# move the new content from tmp file to the orginal file. +move ("$dir/tmp/innochecksum_3_tempfile", "$dir/tmp/$file"); +closedir(DIR); +EOF + +cat_file $MYSQLTEST_VARDIR/tmp/page_verbose_summary.txt; +--remove_file $MYSQLTEST_VARDIR/tmp/page_verbose_summary.txt + +--echo [5]: Page type dump for with shortform for tab1.ibd +--exec $INNOCHECKSUM -D $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/test/tab1.ibd + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +opendir(DIR, $dir) or die $!; +my $file= 'dump.txt'; +# open file in write mode +open IN_FILE,"<", "$dir/tmp/$file" or die $!; +open OUT_FILE, ">", "$dir/tmp/innochecksum_3_tempfile" or die $!; +while() +{ + # Replace the intergers to # and complete file path to file name only. + $_=~ s/Filename.+/Filename::tab1.ibd/g; + $_=~ s/\d+/#/g; + print OUT_FILE $_; +} +close(IN_FILE); +close(OUT_FILE); +# move the new content from tmp file to the orginal file. +move ("$dir/tmp/innochecksum_3_tempfile", "$dir/tmp/$file"); +closedir(DIR); +EOF + +# Print the contents stored in dump.txt +cat_file $MYSQLTEST_VARDIR/tmp/dump.txt; +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +--echo [6]: check the valid lower bound values for option +--echo # allow-mismatches,page,start-page,end-page +--exec $INNOCHECKSUM --allow-mismatches=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -a 0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --page=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -p 0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --start-page=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -s 0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --end-page=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -e 0 $MYSQLD_DATADIR/test/tab1.ibd + +# +# These produce now errors +# +#--echo [7]: check the negative values for option +#--echo # allow-mismatches,page,start-page,end-page. +#--echo # They will reset to zero for negative values. +#--echo # check the invalid lower bound values +#--exec $INNOCHECKSUM --allow-mismatches=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -a -1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --page=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -p -1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --start-page=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -s -1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --end-page=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -e -1 $MYSQLD_DATADIR/test/tab1.ibd +# +#--echo [8]: check the valid upper bound values for +#--echo # both short and long options "allow-mismatches" and "end-page" +# +#--exec $INNOCHECKSUM --allow-mismatches=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -a 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --end-page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -e 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd + +--echo [9]: check the both short and long options "page" and "start-page" when +--echo # seek value is larger than file size. +--error 1 +--exec $INNOCHECKSUM --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -p 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --start-page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -s 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--echo [34]: check the invalid upper bound values for options, allow-mismatches, end-page, start-page and page. +--echo # innochecksum will fail with error code: 1 +--error 1 +--exec $INNOCHECKSUM --allow-mismatches=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -a 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --end-page=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -e 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --page=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -p 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --start-page=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -s 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc +--remove_file $SEARCH_FILE + +# Cleanup +--source include/start_mysqld.inc + +DROP TABLE tab1,tab2; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,4 @@ +--skip-innodb-doublewrite +--innodb-file-per-table +--innodb-file-format=Barracuda + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/innodb_zip_innochecksum.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/innodb_zip_innochecksum.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,239 @@ +#************************************************************ +# WL6045:Improve Innochecksum +#************************************************************ +--source include/innodb_page_size_small.inc +--source include/no_valgrind_without_big.inc +# Embedded server does not support crashing. +--source include/not_embedded.inc + +# Avoid CrashReporter popup on Mac. +--source include/not_crashrep.inc + +--echo # Set the environmental variables +let MYSQLD_BASEDIR= `SELECT @@basedir`; +let MYSQLD_DATADIR= `SELECT @@datadir`; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: Warning: database page corruption or a failed"); + +CREATE TABLE tab1(c1 INT PRIMARY KEY,c2 VARCHAR(20)) ENGINE=InnoDB; +CREATE INDEX idx1 ON tab1(c2(10)); +INSERT INTO tab1 VALUES(1, 'Innochecksum InnoDB1'); +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +insert into t1 values(1,"i"); +insert into t1 values(2,"am"); +insert into t1 values(3,"compressed table"); + +--echo # Shutdown the Server +--source include/shutdown_mysqld.inc +--echo # Server Default checksum = innodb + +# +# Not repeatable with --parallel= >1 +# +#--echo [1a]: check the innochecksum when file doesn't exists +#--error 1 +#--exec $INNOCHECKSUM $MYSQLD_DATADIR/test/aa.ibd 2> $SEARCH_FILE +#let SEARCH_PATTERN= Error: $MYSQLD_DATADIR/test/aa.ibd cannot be found; +#--source include/search_pattern_in_file.inc + +--echo [1b]: check the innochecksum without --strict-check +--exec $INNOCHECKSUM $MYSQLD_DATADIR/test/tab1.ibd + +--echo [2]: check the innochecksum with full form --strict-check=crc32 +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/tab1.ibd + +--echo [3]: check the innochecksum with short form -C crc32 +--exec $INNOCHECKSUM -C crc32 $MYSQLD_DATADIR/test/tab1.ibd + +--echo [4]: check the innochecksum with --no-check ignores algorithm check, warning is expected +--error 1 +--exec $INNOCHECKSUM --no-check $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --no-check must be associated with --write option.; +--source include/search_pattern_in_file.inc + +--echo [5]: check the innochecksum with short form --no-check ignores algorithm check, warning is expected +--error 1 +--exec $INNOCHECKSUM -n $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --no-check must be associated with --write option.; +--source include/search_pattern_in_file.inc + +--echo [6]: check the innochecksum with full form strict-check & no-check , an error is expected +--error 1 +--exec $INNOCHECKSUM --strict-check=innodb --no-check $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --strict-check option cannot be used together with --no-check option.; +--source include/search_pattern_in_file.inc + +--echo [7]: check the innochecksum with short form strict-check & no-check , an error is expected +--error 1 +--exec $INNOCHECKSUM -C innodb -n $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --strict-check option cannot be used together with --no-check option.; +--source include/search_pattern_in_file.inc + +--echo [8]: check the innochecksum with short & full form combination +--echo # strict-check & no-check, an error is expected +--error 1 +--exec $INNOCHECKSUM --strict-check=innodb -n $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --strict-check option cannot be used together with --no-check option.; +--source include/search_pattern_in_file.inc + +--echo [9]: check the innochecksum with full form --strict-check=innodb +# Server Default checksum = crc32 +--exec $INNOCHECKSUM --strict-check=innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [10]: check the innochecksum with full form --strict-check=none +--echo # when server Default checksum=crc32 +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [11]: check the innochecksum with short form -C innodb +--echo # when server Default checksum=crc32 +--exec $INNOCHECKSUM -C innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [12]: check the innochecksum with short form -C none +--echo # when server Default checksum=crc32 +--exec $INNOCHECKSUM -C none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [13]: check strict-check with invalid values +--error 1 +--exec $INNOCHECKSUM --strict-check=strict_innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_innodb\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C strict_innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_innodb\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=strict_crc32 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_crc32\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C strict_crc32 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_crc32\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=strict_none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_none\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C strict_none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_none\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=InnoBD $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'InnoBD\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C InnoBD $MYSQLD_DATADIR/test/tab1.ibd 2>$SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'InnoBD\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=crc $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'crc\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=no $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'no\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--echo [14a]: when server default checksum=crc32 rewrite new checksum=crc32 with innochecksum +--echo # Also check the long form of write option. +--exec $INNOCHECKSUM --strict-check=crc32 --write=crc32 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 --write=crc32 $MYSQLD_DATADIR/test/t1.ibd +# Rewrite done, verify with --strict-check=crc32 +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/t1.ibd + +--echo [14b]: when server default checksum=crc32 rewrite new checksum=innodb with innochecksum +--echo # Also check the long form of write option. +--exec $INNOCHECKSUM --no-check --write=innodb $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 --write=innodb $MYSQLD_DATADIR/test/t1.ibd +# Rewrite done, verify with --strict-check=innodb +--exec $INNOCHECKSUM --strict-check=innodb $MYSQLD_DATADIR/test/tab1.ibd + +--echo # start the server with innodb_checksum_algorithm=InnoDB +--let $restart_parameters= --innodb_checksum_algorithm=innodb +--source include/start_mysqld.inc + +INSERT INTO tab1 VALUES(2, 'Innochecksum CRC32'); +SELECT c1,c2 FROM tab1 order by c1,c2; + +--echo # Stop the server +--source include/shutdown_mysqld.inc + +--echo [15]: when server default checksum=crc32 rewrite new checksum=none with innochecksum +--echo # Also check the short form of write option. +--exec $INNOCHECKSUM --no-check -w none $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --no-check -w none $MYSQLD_DATADIR/test/t1.ibd +# Rewrite done, verify with --strict-check=none +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/t1.ibd + +--echo # Start the server with checksum algorithm=none +--let $restart_parameters= --innodb_checksum_algorithm=none +--source include/start_mysqld.inc + +INSERT INTO tab1 VALUES(3, 'Innochecksum None'); +SELECT c1,c2 FROM tab1 order by c1,c2; +DROP TABLE t1; + +--echo # Stop the server +--source include/shutdown_mysqld.inc + +--echo [16]: rewrite into new checksum=crc32 with innochecksum +--exec $INNOCHECKSUM --no-check --write=crc32 $MYSQLD_DATADIR/test/tab1.ibd + +--echo # Restart the DB server with innodb_checksum_algorithm=crc32 +--let $restart_parameters= --innodb_checksum_algorithm=crc32 +--source include/start_mysqld.inc + +SELECT * FROM tab1; +DELETE FROM tab1 where c1=3; +SELECT c1,c2 FROM tab1 order by c1,c2; + +--echo # Stop server +--source include/shutdown_mysqld.inc + +--echo [17]: rewrite into new checksum=InnoDB +--exec $INNOCHECKSUM --no-check --write=InnoDB $MYSQLD_DATADIR/test/tab1.ibd + +--echo # Restart the DB server with innodb_checksum_algorithm=InnoDB +--let $restart_parameters= --innodb_checksum_algorithm=innodb +--source include/start_mysqld.inc + +DELETE FROM tab1 where c1=2; +SELECT * FROM tab1; + +--echo # Stop server +--source include/shutdown_mysqld.inc + +--echo [18]:check Innochecksum with invalid write options +--error 1 +--exec $INNOCHECKSUM --no-check --write=strict_crc32 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN=Error while setting value \'strict_crc32\' to \'write\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --no-check --write=strict_innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN=Error while setting value \'strict_innodb\' to \'write\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --no-check --write=crc23 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN=Error while setting value \'crc23\' to \'write\'; +--source include/search_pattern_in_file.inc +--remove_file $SEARCH_FILE + +# Cleanup +--let $restart_parameters= +--source include/start_mysqld.inc + +DROP TABLE tab1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/log_data_file_size.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/log_data_file_size.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/log_data_file_size.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/log_data_file_size.test 2017-12-21 15:48:47.000000000 +0000 @@ -24,13 +24,13 @@ my $page_size = $ENV{'INNODB_PAGE_SIZE'}; my $restart; +open(FILE, "+<", "$ENV{'MYSQLD_DATADIR'}ibdata1") or die; if ($ENV{'MYSQLD_IS_DEBUG'}) { # It is impractical to ensure that CREATE TABLE t will extend ibdata1. # We rely on innodb_system_tablespace_extend_debug=1 # to recover from this fault injection if no size change was redo-logged. my $root = $ENV{'INNODB_ROOT_PAGE'}; - open(FILE, "+<", "$ENV{'MYSQLD_DATADIR'}ibdata1") or die; my $size = sysseek(FILE, 0, SEEK_END) / $page_size; seek(FILE, $page_size * ($root + 1), SEEK_SET) or die; my $empty_tail= 1; @@ -40,8 +40,22 @@ $restart = "--innodb-data-file-size-debug=$size"; truncate(FILE, $page_size * $root); } - close FILE; } +# Clear the doublewrite buffer entries for our tables. +sysseek(FILE, 6 * $page_size - 190, 0)||die "Unable to seek ibdata1\n"; +sysread(FILE, $_, 12) == 12||die "Unable to read TRX_SYS\n"; +my($magic,$d1,$d2)=unpack "NNN", $_; +die "magic=$magic, $d1, $d2\n" unless $magic == 536853855 && $d2 >= $d1 + 64; +sysseek(FILE, $d1 * $page_size, 0)||die "Unable to seek ibdata1\n"; +# Find the pages in the doublewrite buffer +for (my $d = $d1; $d < $d2 + 64; $d++) { + sysread(FILE, $_, $page_size)==$page_size||die "Cannot read doublewrite\n"; + my($space_id,$offset)=unpack "x[4]Nx[26]N",$_; + next unless $space_id && $offset > 3; + sysseek(FILE, $d * $page_size, 0)||die "Unable to seek ibdata1\n"; + syswrite(FILE, chr(0) x $page_size)==$page_size||die; +} +close FILE; open(FILE, ">$ENV{MYSQLTEST_VARDIR}/log/start_mysqld.txt") || die; print FILE "--let \$restart_parameters=$restart\n" if $restart; print FILE "--source include/start_mysqld.inc\n"; @@ -51,6 +65,9 @@ close FILE; open(FILE, "+<", "$ENV{'MYSQLD_DATADIR'}test/ibd4f.ibd") or die; truncate(FILE, $page_size * 4 + 1234); +# Work around MDEV-12699 and ensure that the truncated page is all-zero. +sysseek(FILE, $page_size * 4, 0); +syswrite(FILE, chr(0) x 1234); close FILE; open(FILE, "+<", "$ENV{'MYSQLD_DATADIR'}test/ibd5.ibd") or die; truncate(FILE, $page_size * 5); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/recovery_shutdown.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/recovery_shutdown.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/recovery_shutdown.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/recovery_shutdown.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,57 @@ +--source include/have_innodb.inc +--source include/not_embedded.inc + +--echo # +--echo # MDEV-13797 InnoDB may hang if shutdown is initiated soon after startup +--echo # while rolling back recovered incomplete transactions +--echo # + +CREATE TABLE t (a INT) ENGINE=InnoDB; +let $size = 100; +let $trx = 8; +let $c = $size; +BEGIN; +--disable_query_log +while ($c) { +INSERT INTO t VALUES(); +dec $c; +} +--enable_query_log +COMMIT; + +let $c = $trx; +while ($c) +{ +connect (con$c,localhost,root,,); +eval CREATE TABLE t$c (a SERIAL, b INT UNIQUE, c INT UNIQUE) ENGINE=InnoDB; +BEGIN; +eval INSERT INTO t$c (a) SELECT NULL FROM t; +eval UPDATE t$c SET a=a+$size, b=a; +eval DELETE FROM t$c; +dec $c; +} + +INSERT INTO t1(a) SELECT NULL FROM t; +INSERT INTO t1(a) SELECT NULL FROM t1; +INSERT INTO t1(a) SELECT NULL FROM t1; +INSERT INTO t1(a) SELECT NULL FROM t1; +INSERT INTO t1(a) SELECT NULL FROM t1; + +--connection default +SET GLOBAL innodb_flush_log_at_trx_commit=1; +CREATE TABLE u(a SERIAL) ENGINE=INNODB; + +--source include/kill_and_restart_mysqld.inc +--source include/restart_mysqld.inc + +--disable_query_log +let $c = $trx; +while ($c) +{ +disconnect con$c; +eval DROP TABLE t$c; +dec $c; +} +--enable_query_log + +DROP TABLE t,u; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/table_definition_cache_debug.opt mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/table_definition_cache_debug.opt --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/table_definition_cache_debug.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/table_definition_cache_debug.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--innodb-open-files=20 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/table_definition_cache_debug.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/table_definition_cache_debug.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/table_definition_cache_debug.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/table_definition_cache_debug.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,66 @@ +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +SET @save_tdc= @@GLOBAL.table_definition_cache; +SET @save_toc= @@GLOBAL.table_open_cache; + +# InnoDB plugin essentially ignores table_definition_cache size +# and hard-wires it to 400, which also is the minimum allowed value. +SET GLOBAL table_definition_cache= 400; +SET GLOBAL table_open_cache= 1024; + +CREATE TABLE to_be_evicted(a INT PRIMARY KEY, b INT NOT NULL) ENGINE=InnoDB; +INSERT INTO to_be_evicted VALUES(1,2),(2,1); + +connect(ddl,localhost,root,,); +SET DEBUG_SYNC = 'row_log_apply_before SIGNAL scanned WAIT_FOR got_duplicate'; +--send +ALTER TABLE to_be_evicted ADD UNIQUE INDEX(b); + +connection default; +SET DEBUG_SYNC = 'now WAIT_FOR scanned'; + +# During the ADD UNIQUE INDEX, start a transaction that inserts a duplicate +# and then hogs the table lock, so that the unique index cannot be dropped. +BEGIN; +INSERT INTO to_be_evicted VALUES(3, 2); +SET DEBUG_SYNC = 'now SIGNAL got_duplicate'; + +connection ddl; +--error ER_DUP_ENTRY +reap; + +disconnect ddl; +connection default; +# Release the table lock. +COMMIT; +SET DEBUG_SYNC = RESET; + +# Allow cache eviction. +FLUSH TABLES; +--disable_query_log + +# Pollute the cache with many tables, so that our table will be evicted. +let $N=1000; +let $loop=$N; +while ($loop) +{ + eval CREATE TABLE t_$loop(id INT)ENGINE=InnoDB; + dec $loop; +} + +# Hopefully let InnoDB evict the tables. +sleep 10; + +let $loop=$N; +while ($loop) +{ + eval DROP TABLE t_$loop; + dec $loop; +} + +SET GLOBAL table_definition_cache= @save_tdc; +SET GLOBAL table_open_cache= @save_toc; + +DROP TABLE to_be_evicted; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/undo_log.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/undo_log.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/undo_log.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/undo_log.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,139 @@ +--source include/have_innodb.inc +CREATE TABLE test_tab ( +a_str_18 mediumtext, +b_str_3 varchar(32) DEFAULT NULL, +a_str_13 mediumtext, +b_str_5 varchar(40) DEFAULT NULL, +b_str_6 varchar(50) DEFAULT NULL, +b_str_7 char(32) DEFAULT NULL, +b_str_8 varchar(32) DEFAULT NULL, +b_str_9 varchar(255) DEFAULT NULL, +a_str_28 char(255) DEFAULT NULL, +a_str_27 varchar(255) DEFAULT NULL, +b_str_10 varchar(32) DEFAULT NULL, +a_str_26 varchar(255) DEFAULT NULL, +a_str_6 varchar(50) DEFAULT NULL, +b_str_11 varchar(32) DEFAULT NULL, +b_str_12 varchar(255) DEFAULT NULL, +b_str_13 char(32) DEFAULT NULL, +b_str_14 varchar(32) DEFAULT NULL, +b_str_15 char(32) DEFAULT NULL, +b_str_16 char(32) DEFAULT NULL, +b_str_17 varchar(32) DEFAULT NULL, +b_str_18 varchar(32) DEFAULT NULL, +a_str_25 varchar(40) DEFAULT NULL, +b_str_19 varchar(255) DEFAULT NULL, +a_str_23 varchar(40) DEFAULT NULL, +b_str_20 varchar(32) DEFAULT NULL, +a_str_21 varchar(255) DEFAULT NULL, +a_str_20 varchar(255) DEFAULT NULL, +a_str_39 varchar(255) DEFAULT NULL, +a_str_38 varchar(255) DEFAULT NULL, +a_str_37 varchar(255) DEFAULT NULL, +b_str_21 char(32) DEFAULT NULL, +b_str_23 varchar(80) DEFAULT NULL, +b_str_24 varchar(32) DEFAULT NULL, +b_str_25 varchar(32) DEFAULT NULL, +b_str_26 char(32) NOT NULL DEFAULT '', +b_str_27 varchar(255) DEFAULT NULL, +a_str_36 varchar(255) DEFAULT NULL, +a_str_33 varchar(100) DEFAULT NULL, +a_ref_10 char(32) DEFAULT NULL, +b_str_28 char(32) DEFAULT NULL, +b_str_29 char(32) DEFAULT NULL, +a_ref_6 char(32) DEFAULT NULL, +a_ref_12 varchar(32) DEFAULT NULL, +a_ref_11 varchar(32) DEFAULT NULL, +a_str_49 varchar(40) DEFAULT NULL, +b_str_30 varchar(32) DEFAULT NULL, +a_ref_3 varchar(32) DEFAULT NULL, +a_str_48 varchar(40) DEFAULT NULL, +a_ref_1 char(32) DEFAULT NULL, +b_str_31 varchar(32) DEFAULT NULL, +b_str_32 varchar(255) DEFAULT NULL, +b_str_33 char(32) DEFAULT NULL, +b_str_34 varchar(32) DEFAULT NULL, +a_str_47 varchar(40) DEFAULT NULL, +b_str_36 varchar(255) DEFAULT NULL, +a_str_46 varchar(40) DEFAULT NULL, +a_str_45 varchar(255) DEFAULT NULL, +b_str_38 varchar(32) DEFAULT NULL, +b_str_39 char(32) DEFAULT NULL, +b_str_40 varchar(32) DEFAULT NULL, +a_str_41 varchar(255) DEFAULT NULL, +b_str_41 varchar(32) DEFAULT NULL, +PRIMARY KEY (b_str_26), +UNIQUE KEY a_str_47 (a_str_47), +UNIQUE KEY a_str_49 (a_str_49), +UNIQUE KEY a_str_33 (a_str_33), +UNIQUE KEY a_str_46 (a_str_46), +UNIQUE KEY a_str_48 (a_str_48), +KEY b_str_18 (b_str_18), +KEY a_str_26 (a_str_26), +KEY b_str_27 (b_str_27,b_str_19), +KEY b_str_41 (b_str_41), +KEY b_str_15 (b_str_15), +KEY a_str_20 (a_str_20), +KEY b_str_17 (b_str_17), +KEY b_str_40 (b_str_40), +KEY b_str_24 (b_str_24), +KEY b_str_10 (b_str_10), +KEY b_str_16 (b_str_16), +KEY b_str_29 (b_str_29), +KEY a_str_41 (a_str_41), +KEY b_str_7 (b_str_7), +KEY a_str_45 (a_str_45), +KEY a_str_28 (a_str_28), +KEY a_str_37 (a_str_37), +KEY b_str_6 (b_str_6), +KEY a_ref_6 (a_ref_6), +KEY b_str_34 (b_str_34), +KEY b_str_38 (b_str_38), +KEY a_ref_10 (a_ref_10), +KEY b_str_21 (b_str_21), +KEY b_str_23 (b_str_23,b_str_19), +KEY b_str_33 (b_str_33), +KEY a_ref_12 (a_ref_12), +KEY a_str_18 (a_str_18(255)), +KEY a_str_39 (a_str_39), +KEY a_str_27 (a_str_27), +KEY a_str_25 (a_str_25), +KEY b_str_9 (b_str_9), +KEY a_str_23 (a_str_23), +KEY b_str_8 (b_str_8), +KEY a_str_21 (a_str_21), +KEY b_str_3 (b_str_3), +KEY b_str_30 (b_str_30), +KEY b_str_12 (b_str_12), +KEY b_str_25 (b_str_25), +KEY b_str_13 (b_str_13), +KEY a_str_38 (a_str_38), +KEY a_str_13 (a_str_13(255)), +KEY a_str_36 (a_str_36), +KEY b_str_28 (b_str_28), +KEY b_str_19 (b_str_19), +KEY b_str_11 (b_str_11), +KEY a_ref_1 (a_ref_1), +KEY b_str_20 (b_str_20), +KEY b_str_14 (b_str_14), +KEY a_ref_3 (a_ref_3), +KEY b_str_39 (b_str_39), +KEY b_str_32 (b_str_32), +KEY a_str_6 (a_str_6), +KEY b_str_5 (b_str_5), +KEY b_str_31 (b_str_31), +KEY a_ref_11 (a_ref_11) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; + +BEGIN; +INSERT INTO test_tab (b_str_26, a_str_13, a_str_18) VALUES +('a', REPEAT('f',4031), REPEAT('g', 4031)); + +UPDATE test_tab SET a_str_13=REPEAT('h',4032), a_str_18=REPEAT('i',4032); +SELECT 'Reducing length to 4030'; +UPDATE test_tab SET a_str_13=REPEAT('j',4030), a_str_18=REPEAT('k',4030); +UPDATE test_tab SET a_str_13=REPEAT('l',4031), a_str_18=REPEAT('m',4031); +ROLLBACK; +SELECT COUNT(*) FROM test_tab; +CHECK TABLE test_tab; +DROP TABLE test_tab; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/xa_recovery.test mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/xa_recovery.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb/t/xa_recovery.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb/t/xa_recovery.test 2017-12-21 15:48:47.000000000 +0000 @@ -15,7 +15,12 @@ XA START 'x'; UPDATE t1 set a=2; XA END 'x'; XA PREPARE 'x'; connection default; +# innodb_force_recovery=2 prevents the purge and tests that the fix of +# MDEV-13606 XA PREPARE transactions should survive innodb_force_recovery=1 or 2 +# is present. +--let $restart_parameters= --innodb-force-recovery=2 --source include/kill_and_restart_mysqld.inc +--let $restart_parameters= disconnect con1; connect (con1,localhost,root); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/r/concurrent_insert.result mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/r/concurrent_insert.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/r/concurrent_insert.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/r/concurrent_insert.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,8 @@ +CREATE TABLE t1(a VARCHAR(5),FULLTEXT KEY(a)) ENGINE=InnoDB; +SET DEBUG_SYNC = 'get_next_FTS_DOC_ID SIGNAL prepared WAIT_FOR race'; +REPLACE INTO t1(a) values('aaa'); +SET DEBUG_SYNC = 'now WAIT_FOR prepared'; +REPLACE INTO t1(a) VALUES('aaa'); +SET DEBUG_SYNC = 'now SIGNAL race'; +SET DEBUG_SYNC = 'RESET'; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/r/fulltext.result mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/r/fulltext.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/r/fulltext.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/r/fulltext.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,3 @@ -drop table if exists t1,t2,t3; CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b)) ENGINE = InnoDB; INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'), ('Full-text indexes', 'are called collections'), @@ -637,3 +636,58 @@ DEALLOCATE PREPARE stmt; DROP TABLE t1; End of 5.1 tests +CREATE TABLE z(a INTEGER) engine=innodb; +CREATE TABLE q(b TEXT CHARSET latin1, fulltext(b)) engine=innodb; +EXPLAIN SELECT 1 FROM q WHERE (SELECT MATCH(b) AGAINST ('*') FROM z); +ERROR 42000: syntax error, unexpected $end, expecting FTS_TERM or FTS_NUMB or '*' +SELECT 1 FROM q WHERE (SELECT MATCH(b) AGAINST ('*') FROM z); +ERROR 42000: syntax error, unexpected $end, expecting FTS_TERM or FTS_NUMB or '*' +EXPLAIN SELECT MATCH(b) AGAINST ('*') FROM z; +ERROR 42S22: Unknown column 'b' in 'field list' +SELECT MATCH(b) AGAINST ('*') FROM z; +ERROR 42S22: Unknown column 'b' in 'field list' +EXPLAIN SELECT MATCH(a) AGAINST ('*') FROM z; +ERROR HY000: Can't find FULLTEXT index matching the column list +SELECT MATCH(a) AGAINST ('*') FROM z; +ERROR HY000: Can't find FULLTEXT index matching the column list +EXPLAIN SELECT MATCH(b) AGAINST ('*') FROM q; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE q ALL NULL NULL NULL NULL 1 +SELECT MATCH(b) AGAINST ('*') FROM q; +ERROR 42000: syntax error, unexpected $end, expecting FTS_TERM or FTS_NUMB or '*' +DROP TABLE z, q; +create table t ( +FTS_DOC_ID BIGINT UNSIGNED PRIMARY KEY, t TEXT, FULLTEXT KEY (t) +) ENGINE=InnoDB; +INSERT INTO t values (1, 'foo bar'), (2, 'foo bar'), (3, 'foo'); +SELECT * FROM t WHERE MATCH(t) AGAINST ('foo bar' IN BOOLEAN MODE) +LIMIT 0; +FTS_DOC_ID t +SELECT * FROM t WHERE MATCH(t) AGAINST ('foo bar' IN BOOLEAN MODE) +LIMIT 1; +FTS_DOC_ID t +1 foo bar +SELECT * FROM t WHERE MATCH(t) AGAINST ('foo bar' IN BOOLEAN MODE) +LIMIT 2; +FTS_DOC_ID t +1 foo bar +2 foo bar +SELECT * FROM t WHERE MATCH(t) AGAINST ('foo bar' IN BOOLEAN MODE) +LIMIT 3; +FTS_DOC_ID t +1 foo bar +2 foo bar +3 foo +SELECT * FROM t WHERE MATCH(t) AGAINST ('foo bar' IN BOOLEAN MODE) +LIMIT 4; +FTS_DOC_ID t +1 foo bar +2 foo bar +3 foo +SELECT * FROM t WHERE MATCH(t) AGAINST ('foo bar' IN BOOLEAN MODE) +LIMIT 5; +FTS_DOC_ID t +1 foo bar +2 foo bar +3 foo +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/t/concurrent_insert.test mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/t/concurrent_insert.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/t/concurrent_insert.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/t/concurrent_insert.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,20 @@ +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +CREATE TABLE t1(a VARCHAR(5),FULLTEXT KEY(a)) ENGINE=InnoDB; +SET DEBUG_SYNC = 'get_next_FTS_DOC_ID SIGNAL prepared WAIT_FOR race'; +--send +REPLACE INTO t1(a) values('aaa'); + +connect(dml, localhost, root, ,); +SET DEBUG_SYNC = 'now WAIT_FOR prepared'; +REPLACE INTO t1(a) VALUES('aaa'); +SET DEBUG_SYNC = 'now SIGNAL race'; +disconnect dml; + +connection default; +reap; +SET DEBUG_SYNC = 'RESET'; + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/t/fulltext.test mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/t/fulltext.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_fts/t/fulltext.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_fts/t/fulltext.test 2017-12-21 15:48:47.000000000 +0000 @@ -4,10 +4,6 @@ --source include/have_innodb.inc ---disable_warnings -drop table if exists t1,t2,t3; ---enable_warnings - CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b)) ENGINE = InnoDB; INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'), ('Full-text indexes', 'are called collections'), @@ -679,3 +675,45 @@ DROP TABLE t1; --echo End of 5.1 tests + +# This is an adapted and extended version of an Oracle test for +# Bug#21140111: Explain ... match against: Assertion failed: ret ... +# No bug was repeatable for MariaDB. + +CREATE TABLE z(a INTEGER) engine=innodb; +CREATE TABLE q(b TEXT CHARSET latin1, fulltext(b)) engine=innodb; + +--error ER_PARSE_ERROR +EXPLAIN SELECT 1 FROM q WHERE (SELECT MATCH(b) AGAINST ('*') FROM z); +--error ER_PARSE_ERROR +SELECT 1 FROM q WHERE (SELECT MATCH(b) AGAINST ('*') FROM z); +--error ER_BAD_FIELD_ERROR +EXPLAIN SELECT MATCH(b) AGAINST ('*') FROM z; +--error ER_BAD_FIELD_ERROR +SELECT MATCH(b) AGAINST ('*') FROM z; +--error ER_FT_MATCHING_KEY_NOT_FOUND +EXPLAIN SELECT MATCH(a) AGAINST ('*') FROM z; +--error ER_FT_MATCHING_KEY_NOT_FOUND +SELECT MATCH(a) AGAINST ('*') FROM z; +EXPLAIN SELECT MATCH(b) AGAINST ('*') FROM q; +--error ER_PARSE_ERROR +SELECT MATCH(b) AGAINST ('*') FROM q; + +DROP TABLE z, q; + +create table t ( + FTS_DOC_ID BIGINT UNSIGNED PRIMARY KEY, t TEXT, FULLTEXT KEY (t) +) ENGINE=InnoDB; + +INSERT INTO t values (1, 'foo bar'), (2, 'foo bar'), (3, 'foo'); +let $limit=0; +let $N=6; +while ($N) +{ + eval SELECT * FROM t WHERE MATCH(t) AGAINST ('foo bar' IN BOOLEAN MODE) + LIMIT $limit; + inc $limit; + dec $N; +} + +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/r/innodb_prefix_index_liftedlimit.result mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/r/innodb_prefix_index_liftedlimit.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/r/innodb_prefix_index_liftedlimit.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/r/innodb_prefix_index_liftedlimit.result 2017-12-21 15:48:47.000000000 +0000 @@ -584,12 +584,12 @@ CREATE INDEX prefix_idx3 ON worklog5743(col_3_text (3072)); CREATE INDEX prefix_idx4 ON worklog5743(col_4_blob (3072)); CREATE INDEX prefix_idx5 ON worklog5743(col_5_text (3072)); +BEGIN; UPDATE worklog5743 SET col_1_varbinary = REPEAT("c", 4000) WHERE col_1_varbinary = REPEAT("a", 4000) AND col_2_varchar = REPEAT("o", 4000); -ERROR HY000: Undo log record is too big. SHOW WARNINGS; Level Code Message -Error 1713 Undo log record is too big. +ROLLBACK; DROP TABLE worklog5743; CREATE TABLE worklog5743 ( col_1_varbinary VARBINARY (4000) , col_2_varchar VARCHAR (4000) , @@ -627,13 +627,13 @@ REPEAT("a", 4000) , REPEAT("a", 255) ); ROLLBACK; +BEGIN; UPDATE worklog5743 SET col_1_varbinary = REPEAT("c", 4000) WHERE col_1_varbinary = REPEAT("a", 4000) AND col_2_varchar = REPEAT("o", 4000); -ERROR HY000: Undo log record is too big. SHOW WARNINGS; Level Code Message -Error 1713 Undo log record is too big. +ROLLBACK; SELECT col_1_varbinary = REPEAT("c", 4000) FROM worklog5743 WHERE col_1_varbinary = REPEAT("c", 4000) AND col_2_varchar = REPEAT("o", 4000); col_1_varbinary = REPEAT("c", 4000) diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,566 @@ +call mtr.add_suppression("InnoDB: Tablespace for table .* is set as discarded."); +call mtr.add_suppression("InnoDB: Cannot calculate statistics for table .* because the .ibd file is missing. Please refer to .* for how to resolve the issue."); +call mtr.add_suppression("InnoDB: Page 0 at offset 0 looks corrupted in file .*"); +call mtr.add_suppression("InnoDB: Page for tablespace "); +call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS=0x"); +FLUSH TABLES; +SET GLOBAL innodb_file_per_table=1; +SET GLOBAL innodb_file_format=Barracuda; +SET SESSION innodb_strict_mode=1; +CREATE DATABASE test_wl5522; +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; +INSERT INTO test_wl5522.t1 VALUES (1), (2), (3), (4); +FLUSH TABLES test_wl5522.t1 FOR EXPORT; +backup: t1 +UNLOCK TABLES; +DROP TABLE test_wl5522.t1; +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; +INSERT INTO test_wl5522.t1 VALUES (1); +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; +SELECT * FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Lost connection to MySQL server during query +SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Lost connection to MySQL server during query +unlink: t1.ibd +unlink: t1.cfg +# Restart and reconnect to the server +DROP TABLE test_wl5522.t1; +SET SESSION innodb_strict_mode=1; +SET @file_per_table = @@GLOBAL.innodb_file_per_table; +SET @file_format = @@GLOBAL.innodb_file_format; +SET GLOBAL innodb_file_per_table=1; +SET GLOBAL innodb_file_format=Barracuda; +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +restore: t1 .ibd and .cfg files +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +CHECK TABLE test_wl5522.t1; +Table Op Msg_type Msg_text +test_wl5522.t1 check status OK +SELECT COUNT(*) FROM test_wl5522.t1; +COUNT(*) +4 +INSERT INTO test_wl5522.t1 VALUES(400), (500), (600); +SELECT * FROM test_wl5522.t1; +c1 +1 +2 +3 +4 +400 +500 +600 +DROP TABLE test_wl5522.t1; +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET SESSION debug_dbug="+d,ib_import_internal_error"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Internal error: While updating the of index "GEN_CLUST_INDEX" - Generic error +SET SESSION debug_dbug=@saved_debug_dbug; +restore: t1 .ibd and .cfg files +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +DROP TABLE test_wl5522.t1; +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_reset_space_and_lsn_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Too many concurrent transactions +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug=@saved_debug_dbug; +SET SESSION debug_dbug="+d,ib_import_open_tablespace_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Got error 44 't1.ibd +SET SESSION debug_dbug=@saved_debug_dbug; +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_check_bitmap_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Incorrect key file for table 't1'; try to repair it +SET SESSION debug_dbug=@saved_debug_dbug; +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_cluster_root_adjust_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Incorrect key file for table 't1'; try to repair it +SET SESSION debug_dbug=@saved_debug_dbug; +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_cluster_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Incorrect key file for table 't1'; try to repair it +SET SESSION debug_dbug=@saved_debug_dbug; +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_sec_root_adjust_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Incorrect key file for table 't1'; try to repair it +SET SESSION debug_dbug=@saved_debug_dbug; +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_set_max_rowid_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Incorrect key file for table 't1'; try to repair it +SET SESSION debug_dbug=@saved_debug_dbug; +unlink: t1.ibd +unlink: t1.cfg +DROP TABLE test_wl5522.t1; +CREATE TABLE test_wl5522.t1 ( +c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c2 BIGINT, +c3 VARCHAR(2048), +c4 VARCHAR(2048), +INDEX idx1(c2), +INDEX idx2(c3(512)), +INDEX idx3(c4(512))) Engine=InnoDB +ROW_FORMAT=COMPRESSED; +START TRANSACTION WITH CONSISTENT SNAPSHOT; +SET GLOBAL innodb_disable_background_merge=ON; +SET GLOBAL innodb_monitor_reset = ibuf_merges; +SET GLOBAL innodb_monitor_reset = ibuf_merges_insert; +INSERT INTO test_wl5522.t1(c2, c3, c4) VALUES +(1, REPEAT('a', 2048), REPEAT('a', 2048)), +(2, REPEAT('b', 2048), REPEAT('b', 2048)), +(3, REPEAT('c', 2048), REPEAT('c', 2048)), +(4, REPEAT('d', 2048), REPEAT('d', 2048)); +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +DELETE FROM test_wl5522.t1 WHERE c2 = 1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c3 = REPEAT("c2", 1024); +UPDATE test_wl5522.t1 SET c4 = REPEAT("c4", 1024); +SHOW CREATE TABLE test_wl5522.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` bigint(20) NOT NULL AUTO_INCREMENT, + `c2` bigint(20) DEFAULT NULL, + `c3` varchar(2048) DEFAULT NULL, + `c4` varchar(2048) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `idx1` (`c2`), + KEY `idx2` (`c3`(512)), + KEY `idx3` (`c4`(512)) +) ENGINE=InnoDB AUTO_INCREMENT=248 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED +SELECT c1, c2 FROM test_wl5522.t1; +c1 c2 +2 32 +3 48 +4 64 +6 92 +7 108 +8 124 +13 197 +14 213 +15 229 +17 257 +18 273 +19 289 +28 422 +29 438 +30 454 +32 482 +33 498 +34 514 +36 542 +37 558 +38 574 +40 602 +41 618 +42 634 +59 887 +60 903 +61 919 +63 947 +64 963 +65 979 +67 1007 +68 1023 +69 1039 +71 1067 +72 1083 +73 1099 +75 1127 +76 1143 +77 1159 +79 1187 +80 1203 +81 1219 +83 1247 +84 1263 +85 1279 +87 1307 +88 1323 +89 1339 +122 1832 +123 1848 +124 1864 +126 1892 +127 1908 +128 1924 +130 1952 +131 1968 +132 1984 +134 2012 +135 2028 +136 2044 +138 2072 +139 2088 +140 2104 +142 2132 +143 2148 +144 2164 +146 2192 +147 2208 +148 2224 +150 2252 +151 2268 +152 2284 +154 2312 +155 2328 +156 2344 +158 2372 +159 2388 +160 2404 +162 2432 +163 2448 +164 2464 +166 2492 +167 2508 +168 2524 +170 2552 +171 2568 +172 2584 +174 2612 +175 2628 +176 2644 +178 2672 +179 2688 +180 2704 +182 2732 +183 2748 +184 2764 +SELECT COUNT(*) FROM test_wl5522.t1; +COUNT(*) +96 +SELECT SUM(c2) FROM test_wl5522.t1; +SUM(c2) +145278 +SELECT name +FROM information_schema.innodb_metrics +WHERE name = 'ibuf_merges_insert' AND count = 0; +name +FLUSH TABLES test_wl5522.t1 FOR EXPORT; +backup: t1 +UNLOCK TABLES; +SELECT name +FROM information_schema.innodb_metrics +WHERE name = 'ibuf_merges' AND count > 0; +name +ibuf_merges +SELECT name +FROM information_schema.innodb_metrics +WHERE name = 'ibuf_merges_inserts' AND count > 0; +name +SET GLOBAL innodb_disable_background_merge=OFF; +COMMIT; +DROP TABLE test_wl5522.t1; +CREATE TABLE test_wl5522.t1 ( +c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c2 BIGINT, +c3 VARCHAR(2048), +c4 VARCHAR(2048), +INDEX idx1(c2), +INDEX idx2(c3(512)), +INDEX idx3(c4(512))) Engine=InnoDB +ROW_FORMAT=COMPRESSED; +SELECT c1, c2 FROM test_wl5522.t1; +c1 c2 +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +restore: t1 .ibd and .cfg files +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +CHECK TABLE test_wl5522.t1; +Table Op Msg_type Msg_text +test_wl5522.t1 check status OK +SELECT c1,c2 FROM test_wl5522.t1; +c1 c2 +2 32 +3 48 +4 64 +6 92 +7 108 +8 124 +13 197 +14 213 +15 229 +17 257 +18 273 +19 289 +28 422 +29 438 +30 454 +32 482 +33 498 +34 514 +36 542 +37 558 +38 574 +40 602 +41 618 +42 634 +59 887 +60 903 +61 919 +63 947 +64 963 +65 979 +67 1007 +68 1023 +69 1039 +71 1067 +72 1083 +73 1099 +75 1127 +76 1143 +77 1159 +79 1187 +80 1203 +81 1219 +83 1247 +84 1263 +85 1279 +87 1307 +88 1323 +89 1339 +122 1832 +123 1848 +124 1864 +126 1892 +127 1908 +128 1924 +130 1952 +131 1968 +132 1984 +134 2012 +135 2028 +136 2044 +138 2072 +139 2088 +140 2104 +142 2132 +143 2148 +144 2164 +146 2192 +147 2208 +148 2224 +150 2252 +151 2268 +152 2284 +154 2312 +155 2328 +156 2344 +158 2372 +159 2388 +160 2404 +162 2432 +163 2448 +164 2464 +166 2492 +167 2508 +168 2524 +170 2552 +171 2568 +172 2584 +174 2612 +175 2628 +176 2644 +178 2672 +179 2688 +180 2704 +182 2732 +183 2748 +184 2764 +SELECT COUNT(*) FROM test_wl5522.t1; +COUNT(*) +96 +SELECT SUM(c2) FROM test_wl5522.t1; +SUM(c2) +145278 +SHOW CREATE TABLE test_wl5522.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` bigint(20) NOT NULL AUTO_INCREMENT, + `c2` bigint(20) DEFAULT NULL, + `c3` varchar(2048) DEFAULT NULL, + `c4` varchar(2048) DEFAULT NULL, + PRIMARY KEY (`c1`), + KEY `idx1` (`c2`), + KEY `idx2` (`c3`(512)), + KEY `idx3` (`c4`(512)) +) ENGINE=InnoDB AUTO_INCREMENT=185 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED +DROP TABLE test_wl5522.t1; +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +INSERT IGNORE INTO test_wl5522.t1 VALUES +(100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 1200)); +Warnings: +Warning 1265 Data truncated for column 'c2' at row 1 +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +SELECT COUNT(*) FROM test_wl5522.t1; +COUNT(*) +256 +FLUSH TABLES test_wl5522.t1 FOR EXPORT; +backup: t1 +UNLOCK TABLES; +DROP TABLE test_wl5522.t1; +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_1"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Data structure corruption +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,buf_page_import_corrupt_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Data structure corruption +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_2"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Index corrupt: Externally stored column(5) has a reference length of 19 in the cluster index "GEN_CLUST_INDEX" +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_3"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Incorrect key file for table 't1'; try to repair it +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +SET SESSION debug_dbug="+d,ib_import_create_index_failure_1"; +ALTER TABLE test_wl5522.t1 ADD INDEX idx(c1); +Warnings: +Warning 1814 Tablespace has been discarded for table 't1' +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,fil_space_create_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Got error 11 't1.ibd +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,dict_tf_to_fsp_flags_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Got error 39 't1.ibd +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; +SELECT COUNT(*) FROM test_wl5522.t1; +ERROR HY000: Tablespace has been discarded for table 't1' +restore: t1 .ibd and .cfg files +SET SESSION debug_dbug="+d,fsp_flags_is_valid_failure"; +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table '"test_wl5522"."t1"' : Data structure corruption +SET SESSION debug_dbug=@saved_debug_dbug; +DROP TABLE test_wl5522.t1; +unlink: t1.ibd +unlink: t1.cfg +DROP DATABASE test_wl5522; +set global innodb_monitor_disable = all; +set global innodb_monitor_reset_all = all; +set global innodb_monitor_enable = default; +set global innodb_monitor_disable = default; +set global innodb_monitor_reset = default; +set global innodb_monitor_reset_all = default; +SET GLOBAL innodb_file_per_table = @file_per_table; +SET GLOBAL innodb_file_format = @file_format; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/t/innodb_prefix_index_liftedlimit.test mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/t/innodb_prefix_index_liftedlimit.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/t/innodb_prefix_index_liftedlimit.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/t/innodb_prefix_index_liftedlimit.test 2017-12-21 15:48:47.000000000 +0000 @@ -536,10 +536,11 @@ CREATE INDEX prefix_idx3 ON worklog5743(col_3_text (3072)); CREATE INDEX prefix_idx4 ON worklog5743(col_4_blob (3072)); CREATE INDEX prefix_idx5 ON worklog5743(col_5_text (3072)); ---error ER_UNDO_RECORD_TOO_BIG +BEGIN; UPDATE worklog5743 SET col_1_varbinary = REPEAT("c", 4000) WHERE col_1_varbinary = REPEAT("a", 4000) AND col_2_varchar = REPEAT("o", 4000); SHOW WARNINGS; +ROLLBACK; DROP TABLE worklog5743; #------------------------------------------------------------------------------ @@ -585,13 +586,12 @@ REPEAT("a", 4000) , REPEAT("a", 255) ); ROLLBACK; -# Bug#12547647 - UPDATE LOGGING COULD EXCEED LOG PAGE SIZE -# Instead of this error, it would hang before this fix. ---error ER_UNDO_RECORD_TOO_BIG +BEGIN; UPDATE worklog5743 SET col_1_varbinary = REPEAT("c", 4000) WHERE col_1_varbinary = REPEAT("a", 4000) AND col_2_varchar = REPEAT("o", 4000); SHOW WARNINGS; +ROLLBACK; SELECT col_1_varbinary = REPEAT("c", 4000) FROM worklog5743 WHERE col_1_varbinary = REPEAT("c", 4000) AND col_2_varchar = REPEAT("o", 4000); INSERT INTO worklog5743 VALUES(REPEAT("a", 4000) , REPEAT("o", 4000), diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test --- mariadb-10.1-10.1.25/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,747 @@ +# mysql-test-run.pl --embedded cannot restart the server. +--source include/not_embedded.inc + +# This test case needs to crash the server. Needs a debug server. +--source include/have_debug.inc + +# Valgrind can hang or return spurious messages on DBUG_SUICIDE +--source include/not_valgrind.inc + +# Avoid CrashReporter popup on Mac +--source include/not_crashrep.inc + +-- source include/innodb_page_size_small.inc + +call mtr.add_suppression("InnoDB: Tablespace for table .* is set as discarded."); +call mtr.add_suppression("InnoDB: Cannot calculate statistics for table .* because the .ibd file is missing. Please refer to .* for how to resolve the issue."); +call mtr.add_suppression("InnoDB: Page 0 at offset 0 looks corrupted in file .*"); +call mtr.add_suppression("InnoDB: Page for tablespace "); +call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS=0x"); +FLUSH TABLES; + +SET GLOBAL innodb_file_per_table=1; +SET GLOBAL innodb_file_format=Barracuda; + +let MYSQLD_DATADIR =`SELECT @@datadir`; +let $pathfix=/: '.*test_wl5522.*t1.ibd'/: 'test_wl5522_t1.ibd'/; + +SET SESSION innodb_strict_mode=1; + +CREATE DATABASE test_wl5522; + +# Create the table that we will use for crash recovery (during IMPORT) +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; +INSERT INTO test_wl5522.t1 VALUES (1), (2), (3), (4); + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES test_wl5522.t1 FOR EXPORT; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_backup_tablespaces("test_wl5522", "t1"); +EOF +UNLOCK TABLES; + +DROP TABLE test_wl5522.t1; + +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; +INSERT INTO test_wl5522.t1 VALUES (1); + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_discard_tablespaces("test_wl5522", "t1"); +EOF + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +##### Before commit crash +SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; + +--error ER_TABLESPACE_DISCARDED +SELECT * FROM test_wl5522.t1; + +# Write file to make mysql-test-run.pl start up the server again +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +# Execute the statement that causes the crash +--error 2013 +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +--enable_reconnect +--source include/wait_until_connected_again.inc +--disable_reconnect + +#### Before commit crash + +# Check that the DD is consistent after recovery + +##### Before checkpoint crash +SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Don't start up the server right away. +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +# Execute the statement that causes the crash +--error 2013 +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +# After the above test the results are non-deterministic, +# delete the old tablespace files and drop the table, +# recreate the table and do a proper import. +-- source include/wait_until_disconnected.inc +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +--echo # Restart and reconnect to the server +--enable_reconnect +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--source include/wait_until_connected_again.inc +--disable_reconnect + +#### Before checkpoint crash + +# After the above test the results are non-deterministic, recreate the table +# and do a proper import. + +DROP TABLE test_wl5522.t1; + +SET SESSION innodb_strict_mode=1; +SET @file_per_table = @@GLOBAL.innodb_file_per_table; +SET @file_format = @@GLOBAL.innodb_file_format; + +SET GLOBAL innodb_file_per_table=1; +SET GLOBAL innodb_file_format=Barracuda; + +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +CHECK TABLE test_wl5522.t1; + +SELECT COUNT(*) FROM test_wl5522.t1; + +INSERT INTO test_wl5522.t1 VALUES(400), (500), (600); + +SELECT * FROM test_wl5522.t1; + +DROP TABLE test_wl5522.t1; + +# Test handling of internal failure error +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +# Test failure after reset of space id and LSN in the tablespace +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET SESSION debug_dbug="+d,ib_import_internal_error"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_INTERNAL_ERROR +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +DROP TABLE test_wl5522.t1; + + +# Test failure after reset of space id and LSN in the tablespace +CREATE TABLE test_wl5522.t1 (c1 INT) ENGINE = Innodb +ROW_FORMAT=COMPRESSED; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +# Test failure after reset of space id and LSN in the tablespace +SET SESSION debug_dbug="+d,ib_import_reset_space_and_lsn_failure"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_INTERNAL_ERROR +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Test failure after attempting a tablespace open +SET SESSION debug_dbug="+d,ib_import_open_tablespace_failure"; + +--replace_regex /'.*[\/\\]/'/ +--error ER_GET_ERRMSG +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +# Test failure after ibuf check +SET SESSION debug_dbug="+d,ib_import_check_bitmap_failure"; + +# Need proper mapping of error codes :-( +--error ER_NOT_KEYFILE +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +# Test failure after adjusting the cluster index root page +SET SESSION debug_dbug="+d,ib_import_cluster_root_adjust_failure"; + +--error ER_NOT_KEYFILE +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +# Test failure after importing the cluster index +SET SESSION debug_dbug="+d,ib_import_cluster_failure"; + +--error ER_NOT_KEYFILE +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +# Test failure after importing the secondary index(es) +SET SESSION debug_dbug="+d,ib_import_sec_root_adjust_failure"; + +--error ER_NOT_KEYFILE +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +# Test failure after importing the cluster index +SET SESSION debug_dbug="+d,ib_import_set_max_rowid_failure"; + +--error ER_NOT_KEYFILE +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Left over from the failed IMPORT +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +DROP TABLE test_wl5522.t1; + +--disable_query_log +# Enable metrics for the counters we are going to use +set global innodb_monitor_enable = purge_stop_count; +set global innodb_monitor_enable = purge_resume_count; +set global innodb_monitor_enable = ibuf_merges; +set global innodb_monitor_enable = ibuf_merges_insert; +--enable_query_log + +# +# Create a large table with delete marked records, disable purge during +# the update so that we can test the IMPORT purge code. +# +CREATE TABLE test_wl5522.t1 ( + c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + c2 BIGINT, + c3 VARCHAR(2048), + c4 VARCHAR(2048), + INDEX idx1(c2), + INDEX idx2(c3(512)), + INDEX idx3(c4(512))) Engine=InnoDB + ROW_FORMAT=COMPRESSED; + +# Stop purge so that it doesn't remove the delete marked entries. +connect (purge_control,localhost,root); +START TRANSACTION WITH CONSISTENT SNAPSHOT; +connection default; + +# Disable change buffer merge from the master thread, additionally +# enable aggressive flushing so that more changes are buffered. +SET GLOBAL innodb_disable_background_merge=ON; +SET GLOBAL innodb_monitor_reset = ibuf_merges; +SET GLOBAL innodb_monitor_reset = ibuf_merges_insert; + +INSERT INTO test_wl5522.t1(c2, c3, c4) VALUES + (1, REPEAT('a', 2048), REPEAT('a', 2048)), + (2, REPEAT('b', 2048), REPEAT('b', 2048)), + (3, REPEAT('c', 2048), REPEAT('c', 2048)), + (4, REPEAT('d', 2048), REPEAT('d', 2048)); + +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1(c2, c3, c4) SELECT c2, c3, c4 FROM test_wl5522.t1; + +DELETE FROM test_wl5522.t1 WHERE c2 = 1; + +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c2 = c2 + c1; +UPDATE test_wl5522.t1 SET c3 = REPEAT("c2", 1024); +UPDATE test_wl5522.t1 SET c4 = REPEAT("c4", 1024); + +SHOW CREATE TABLE test_wl5522.t1; + +SELECT c1, c2 FROM test_wl5522.t1; +SELECT COUNT(*) FROM test_wl5522.t1; +SELECT SUM(c2) FROM test_wl5522.t1; + +SELECT name + FROM information_schema.innodb_metrics + WHERE name = 'ibuf_merges_insert' AND count = 0; + +FLUSH TABLES test_wl5522.t1 FOR EXPORT; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_backup_tablespaces("test_wl5522", "t1"); +EOF + +UNLOCK TABLES; + +SELECT name + FROM information_schema.innodb_metrics + WHERE name = 'ibuf_merges' AND count > 0; + +SELECT name + FROM information_schema.innodb_metrics + WHERE name = 'ibuf_merges_inserts' AND count > 0; + +SET GLOBAL innodb_disable_background_merge=OFF; + +# Enable normal operation +connection purge_control; +COMMIT; +disconnect purge_control; +connection default; + +DROP TABLE test_wl5522.t1; + +CREATE TABLE test_wl5522.t1 ( + c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + c2 BIGINT, + c3 VARCHAR(2048), + c4 VARCHAR(2048), + INDEX idx1(c2), + INDEX idx2(c3(512)), + INDEX idx3(c4(512))) Engine=InnoDB + ROW_FORMAT=COMPRESSED; + +SELECT c1, c2 FROM test_wl5522.t1; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; +CHECK TABLE test_wl5522.t1; + +SELECT c1,c2 FROM test_wl5522.t1; +SELECT COUNT(*) FROM test_wl5522.t1; +SELECT SUM(c2) FROM test_wl5522.t1; + +SHOW CREATE TABLE test_wl5522.t1; + +DROP TABLE test_wl5522.t1; + +#### +# Create a table and save the tablespace and .cfg file, we need to create +# a Btree that has several levels +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +INSERT IGNORE INTO test_wl5522.t1 VALUES + (100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 1200)); + +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +INSERT INTO test_wl5522.t1 SELECT * FROM test_wl5522.t1; +SELECT COUNT(*) FROM test_wl5522.t1; +FLUSH TABLES test_wl5522.t1 FOR EXPORT; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_backup_tablespaces("test_wl5522", "t1"); +EOF + +UNLOCK TABLES; + +DROP TABLE test_wl5522.t1; + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_1"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_INTERNAL_ERROR +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +# + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug="+d,buf_page_import_corrupt_failure"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +# Following alter is failing +--error ER_INTERNAL_ERROR +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_2"; + +--replace_regex $pathfix + +--error ER_INNODB_INDEX_CORRUPT +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_3"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_NOT_KEYFILE +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +SET SESSION debug_dbug="+d,ib_import_create_index_failure_1"; + +ALTER TABLE test_wl5522.t1 ADD INDEX idx(c1); + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +# + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug="+d,fil_space_create_failure"; + +--replace_regex /'.*[\/\\]/'/ +--error ER_GET_ERRMSG +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +# + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug="+d,dict_tf_to_fsp_flags_failure"; + +--replace_regex /'.*[\/\\]/'/ +--error ER_GET_ERRMSG +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + +# + +CREATE TABLE test_wl5522.t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb +ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; + +ALTER TABLE test_wl5522.t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM test_wl5522.t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_restore_tablespaces("test_wl5522", "t1"); +EOF + +SET SESSION debug_dbug="+d,fsp_flags_is_valid_failure"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_INTERNAL_ERROR +ALTER TABLE test_wl5522.t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE test_wl5522.t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/../innodb/include/innodb-util.pl"; +ib_unlink_tablespace("test_wl5522", "t1"); +EOF + + +DROP DATABASE test_wl5522; + +set global innodb_monitor_disable = all; +set global innodb_monitor_reset_all = all; + +-- disable_warnings +set global innodb_monitor_enable = default; +set global innodb_monitor_disable = default; +set global innodb_monitor_reset = default; +set global innodb_monitor_reset_all = default; +-- enable_warnings + +--disable_query_log +call mtr.add_suppression("'Resource temporarily unavailable'"); +call mtr.add_suppression("Monitor ibuf_merges is already enabled"); +call mtr.add_suppression("Monitor ibuf_merges_insert is already enabled"); +call mtr.add_suppression("Got error -1 when reading table '.*'"); +call mtr.add_suppression("InnoDB: Table '.*' tablespace is set as discarded."); +call mtr.add_suppression("InnoDB: Tablespace '.*' exists in the cache.*"); +call mtr.add_suppression("InnoDB: Freeing existing tablespace '.*' entry from the cache with id.*"); +call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded"); +call mtr.add_suppression(".*There was an error writing to the meta data file.*"); +call mtr.add_suppression("InnoDB: Trying to import a tablespace, but could not open the tablespace file"); +call mtr.add_suppression("Unsupported tablespace format"); +call mtr.add_suppression("Error in page .* of index \"GEN_CLUST_INDEX\" of table \"test_wl5522\".\"t1\""); +call mtr.add_suppression("Page is marked as free"); +call mtr.add_suppression("t1.ibd: Page .* at offset .* looks corrupted"); +call mtr.add_suppression("but tablespace with that id or name does not exist"); +call mtr.add_suppression("Failed to find tablespace for table '\"test_wl5522\".\"t1\"' in the cache"); +call mtr.add_suppression("Could not find a valid tablespace file for 'test_wl5522.*t1'"); +call mtr.add_suppression("Index for table 't1' is corrupt; try to repair it"); +--enable_query_log + +#cleanup +--remove_file $MYSQLTEST_VARDIR/tmp/t1.cfg +--remove_file $MYSQLTEST_VARDIR/tmp/t1.ibd + +SET GLOBAL innodb_file_per_table = @file_per_table; +SET GLOBAL innodb_file_format = @file_format; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/maria/maria.result mariadb-10.1-10.1.30/mysql-test/suite/maria/maria.result --- mariadb-10.1-10.1.25/mysql-test/suite/maria/maria.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/maria/maria.result 2017-12-21 15:48:47.000000000 +0000 @@ -1595,7 +1595,14 @@ ) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0 drop table t1; create table t1 (v varchar(65535)); -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs +Warnings: +Note 1246 Converting column 'v' from VARCHAR to TEXT +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `v` text +) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0 +drop table t1; set @save_concurrent_insert=@@concurrent_insert; set global concurrent_insert=1; create table t1 (a int) ROW_FORMAT=FIXED; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/maria/maria.test mariadb-10.1-10.1.30/mysql-test/suite/maria/maria.test --- mariadb-10.1-10.1.25/mysql-test/suite/maria/maria.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/maria/maria.test 2017-12-21 15:48:47.000000000 +0000 @@ -927,8 +927,9 @@ drop table t1; # ARIA specific varchar tests ---error 1118 create table t1 (v varchar(65535)); +show create table t1; +drop table t1; # # Test concurrent insert diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only-incr.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only-incr.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only-incr.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only-incr.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,33 @@ +call mtr.add_suppression("InnoDB: New log files created"); +CREATE TABLE t(a INT UNSIGNED PRIMARY KEY) ENGINE INNODB; +INSERT INTO t VALUES(0); +COMMIT; +start transaction; +BEGIN; +DELETE FROM t LIMIT 1; +SET GLOBAL innodb_flush_log_at_trx_commit = 1; +ROLLBACK; +NOT FOUND /Rollback of trx with id/ in current_test +# expect NOT FOUND +NOT FOUND /Rollback of trx with id/ in current_test +# expect NOT FOUND +commit; +SELECT count(*) FROM t; +count(*) +201 +# Restore and check results +# shutdown server +# remove datadir +# xtrabackup move back +# restart server +SELECT COUNT(*) FROM t; +COUNT(*) +1 +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SELECT COUNT(*) FROM t; +COUNT(*) +201 +SELECT * FROM t; +a +0 +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only-incr.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only-incr.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only-incr.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only-incr.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,70 @@ +--source include/have_innodb.inc + +call mtr.add_suppression("InnoDB: New log files created"); + +let $basedir=$MYSQLTEST_VARDIR/tmp/backup; +let $incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1; + +CREATE TABLE t(a INT UNSIGNED PRIMARY KEY) ENGINE INNODB; +INSERT INTO t VALUES(0); +COMMIT; + +start transaction; +--disable_query_log +let $n=100; +while ($n) { +eval INSERT t VALUES(101-$n); +dec $n; +} + +--disable_result_log +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir; +--enable_result_log +let $n=100; +while ($n) { +eval INSERT t VALUES(201-$n); +dec $n; +} +--enable_query_log +connect (flush_log,localhost,root,,); +BEGIN; +DELETE FROM t LIMIT 1; +SET GLOBAL innodb_flush_log_at_trx_commit = 1; +ROLLBACK; +disconnect flush_log; +connection default; + +--disable_result_log +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir ; +exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir ; +--enable_result_log + +let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test; +--let SEARCH_PATTERN= Rollback of trx with id +--source include/search_pattern_in_file.inc +--echo # expect NOT FOUND + +exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ; + +--source include/search_pattern_in_file.inc +--echo # expect NOT FOUND + +commit; +SELECT count(*) FROM t; +echo # Restore and check results; +--let $targetdir=$basedir +--let $restart_parameters= --innodb-force-recovery=3 +--source include/restart_and_restore.inc + +rmdir $basedir; +rmdir $incremental_dir; + +SELECT COUNT(*) FROM t; +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SELECT COUNT(*) FROM t; + +--let $restart_parameters= +--source include/restart_mysqld.inc + +SELECT * FROM t; +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: New log files created"); +CREATE TABLE t(a varchar(60)) ENGINE INNODB; +start transaction; +INSERT INTO t VALUES(1); +NOT FOUND /Rollback of trx with id/ in current_test +# expect NOT FOUND +SELECT count(*) FROM t; +count(*) +1 +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/apply-log-only.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/apply-log-only.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,25 @@ +--source include/have_innodb.inc +call mtr.add_suppression("InnoDB: New log files created"); + +let $basedir=$MYSQLTEST_VARDIR/tmp/backup; + +CREATE TABLE t(a varchar(60)) ENGINE INNODB; +start transaction; +INSERT INTO t VALUES(1); + +--disable_result_log +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir; +--enable_result_log + +exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir ; + +let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test; +--let SEARCH_PATTERN= Rollback of trx with id +--source include/search_pattern_in_file.inc +--echo # expect NOT FOUND + +SELECT count(*) FROM t; +DROP TABLE t; + +# Cleanup +rmdir $basedir; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/auth_plugin_win.opt mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/auth_plugin_win.opt --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/auth_plugin_win.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/auth_plugin_win.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--loose-enable-named-pipe diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/auth_plugin_win.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/auth_plugin_win.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/auth_plugin_win.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/auth_plugin_win.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,5 @@ +INSTALL SONAME 'auth_named_pipe'; +CREATE USER 'USERNAME' IDENTIFIED WITH named_pipe; +GRANT ALL PRIVILEGES ON *.* to USERNAME; +DROP USER 'USERNAME'; +UNINSTALL SONAME 'auth_named_pipe'; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/auth_plugin_win.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/auth_plugin_win.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/auth_plugin_win.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/auth_plugin_win.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,31 @@ +--source include/windows.inc +--source include/not_embedded.inc + +if (!$AUTH_NAMED_PIPE_SO) { + skip No named pipe plugin; +} + +if (!$USERNAME) { + skip USERNAME variable is undefined; +} + +if (`SELECT count(*) <> 0 FROM mysql.user WHERE user = '$USERNAME'`) { + skip \$USER=$USER which exists in mysql.user; +} + +INSTALL SONAME 'auth_named_pipe'; + +--replace_result $USERNAME USERNAME +eval CREATE USER '$USERNAME' IDENTIFIED WITH named_pipe; +--replace_result $USERNAME USERNAME +eval GRANT ALL PRIVILEGES ON *.* to $USERNAME; + +let $targetdir=$MYSQLTEST_VARDIR/tmp/backup; +--disable_result_log +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf -u $USERNAME --backup --protocol=pipe --target-dir=$targetdir; +--enable_result_log +--replace_result $USERNAME USERNAME +eval DROP USER '$USERNAME'; +rmdir $targetdir; +UNINSTALL SONAME 'auth_named_pipe'; + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/compress_qpress.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/compress_qpress.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/compress_qpress.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/compress_qpress.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,15 @@ +CREATE TABLE t(i INT) ENGINE INNODB; +INSERT INTO t VALUES(1); +# xtrabackup backup +INSERT INTO t VALUES(2); +# xtrabackup prepare +t.frm.qp +t.ibd.qp +# shutdown server +# remove datadir +# xtrabackup move back +# restart server +SELECT * FROM t; +i +1 +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/compress_qpress.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/compress_qpress.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/compress_qpress.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/compress_qpress.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,24 @@ +CREATE TABLE t(i INT) ENGINE INNODB; +INSERT INTO t VALUES(1); +echo # xtrabackup backup; +let $targetdir=$MYSQLTEST_VARDIR/tmp/backup; + +--disable_result_log +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --compress --target-dir=$targetdir; +--enable_result_log + +INSERT INTO t VALUES(2); + + +echo # xtrabackup prepare; +--disable_result_log +list_files $targetdir/test *.qp; +exec $XTRABACKUP --decompress --remove-original --target-dir=$targetdir; +list_files $targetdir/test *.qp; +exec $XTRABACKUP --prepare --target-dir=$targetdir; +-- source include/restart_and_restore.inc +--enable_result_log + +SELECT * FROM t; +DROP TABLE t; +rmdir $targetdir; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/data_directory.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/data_directory.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/data_directory.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/data_directory.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,13 @@ +CREATE TABLE t(a INT) ENGINE=InnoDB DATA DIRECTORY='table_data_dir'; +INSERT INTO t VALUES(1); +# xtrabackup backup +# xtrabackup prepare +DROP TABLE t; +# shutdown server +# remove datadir +# xtrabackup move back +# restart server +SELECT * FROM t; +a +1 +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/data_directory.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/data_directory.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/data_directory.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/data_directory.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,23 @@ +let $table_data_dir=$MYSQLTEST_VARDIR/ddir; +mkdir $table_data_dir; +--replace_result $table_data_dir table_data_dir +EVAL CREATE TABLE t(a INT) ENGINE=InnoDB DATA DIRECTORY='$table_data_dir'; +INSERT INTO t VALUES(1); +echo # xtrabackup backup; +let $targetdir=$MYSQLTEST_VARDIR/tmp/backup; +--disable_result_log +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir; +--enable_result_log +--source include/shutdown_mysqld.inc +echo # xtrabackup prepare; +--disable_result_log +exec $XTRABACKUP --prepare --target-dir=$targetdir; +--source include/start_mysqld.inc +DROP TABLE t; +rmdir $table_data_dir; +-- source include/restart_and_restore.inc +--enable_result_log +SELECT * FROM t; +DROP TABLE t; +rmdir $targetdir; +rmdir $table_data_dir; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/incremental_backup.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/incremental_backup.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/incremental_backup.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/incremental_backup.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,14 @@ call mtr.add_suppression("InnoDB: New log files created"); -CREATE TABLE t(i INT) ENGINE INNODB; +CREATE TABLE t(i INT PRIMARY KEY) ENGINE INNODB; +BEGIN; +INSERT INTO t VALUES(2); +SET GLOBAL innodb_flush_log_at_trx_commit = 1; INSERT INTO t VALUES(1); # Create full backup , modify table, then create incremental/differential backup -INSERT INTO t VALUES(2); +BEGIN; +INSERT INTO t VALUES(0); +DELETE FROM t WHERE i=0; +COMMIT; SELECT * FROM t; i 1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/incremental_backup.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/incremental_backup.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/incremental_backup.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/incremental_backup.test 2017-12-21 15:48:47.000000000 +0000 @@ -4,23 +4,31 @@ let $basedir=$MYSQLTEST_VARDIR/tmp/backup; let $incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1; - -CREATE TABLE t(i INT) ENGINE INNODB; +CREATE TABLE t(i INT PRIMARY KEY) ENGINE INNODB; +BEGIN; +INSERT INTO t VALUES(2); +connect (con1,localhost,root,,); +SET GLOBAL innodb_flush_log_at_trx_commit = 1; INSERT INTO t VALUES(1); echo # Create full backup , modify table, then create incremental/differential backup; --disable_result_log exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir; --enable_result_log -INSERT INTO t VALUES(2); +BEGIN; +INSERT INTO t VALUES(0); +DELETE FROM t WHERE i=0; +connection default; +COMMIT; SELECT * FROM t; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir; --disable_result_log echo # Prepare full backup, apply incremental one; exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir; -exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir ; +exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ; +disconnect con1; echo # Restore and check results; let $targetdir=$basedir; -- source include/restart_and_restore.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/mdev-14447.opt mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/mdev-14447.opt --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/mdev-14447.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/mdev-14447.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--sequence --innodb-data-file-path=ibdata_first:3M;ibdata_second:1M:autoextend \ No newline at end of file diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/mdev-14447.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/mdev-14447.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/mdev-14447.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/mdev-14447.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,19 @@ +call mtr.add_suppression("InnoDB: New log files created"); +CREATE TABLE t(a varchar(40) PRIMARY KEY, b varchar(40), c varchar(40), d varchar(40), index(b,c,d)) ENGINE INNODB; +# Create full backup , modify table, then create incremental/differential backup +BEGIN; +INSERT INTO t select uuid(), uuid(), uuid(), uuid() from seq_1_to_100000; +COMMIT; +SELECT count(*) FROM t; +count(*) +100000 +# Prepare full backup, apply incremental one +# Restore and check results +# shutdown server +# remove datadir +# xtrabackup move back +# restart server +SELECT count(*) FROM t; +count(*) +100000 +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/mdev-14447.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/mdev-14447.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/mdev-14447.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/mdev-14447.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,46 @@ +call mtr.add_suppression("InnoDB: New log files created"); + +let $basedir=$MYSQLTEST_VARDIR/tmp/backup; +let $incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1; + +CREATE TABLE t(a varchar(40) PRIMARY KEY, b varchar(40), c varchar(40), d varchar(40), index(b,c,d)) ENGINE INNODB; + +echo # Create full backup , modify table, then create incremental/differential backup; +--disable_result_log +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir; +--enable_result_log +BEGIN; +INSERT INTO t select uuid(), uuid(), uuid(), uuid() from seq_1_to_100000; +COMMIT; +SELECT count(*) FROM t; + +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir; + +--disable_result_log +echo # Prepare full backup, apply incremental one; +exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir; +exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ; + +echo # Restore and check results; +let $targetdir=$basedir; +#-- source include/restart_and_restore.inc + +let $_datadir= `SELECT @@datadir`; +let $innodb_data_file_path=`SELECT @@innodb_data_file_path`; +echo # shutdown server; +--source include/shutdown_mysqld.inc +echo # remove datadir; +rmdir $_datadir; +echo # xtrabackup move back; +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --copy-back --datadir=$_datadir "--innodb_data_file_path=$innodb_data_file_path" --target-dir=$targetdir; +echo # restart server; +--source include/start_mysqld.inc + + +--enable_result_log +SELECT count(*) FROM t; +DROP TABLE t; + +# Cleanup +rmdir $basedir; +rmdir $incremental_dir; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/partition_datadir.opt mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/partition_datadir.opt --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/partition_datadir.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/partition_datadir.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--partition \ No newline at end of file diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/partition_datadir.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/partition_datadir.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/partition_datadir.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/partition_datadir.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,22 @@ +CREATE TABLE t(i int) +ENGINE=InnoDB +PARTITION BY RANGE (i) +(PARTITION p0 VALUES LESS THAN (100), +PARTITION P1 VALUES LESS THAN (200), +PARTITION p2 VALUES LESS THAN (300) DATA DIRECTORY = 'MYSQLTEST_VARDIR/partitdata', +PARTITION p3 VALUES LESS THAN (400) DATA DIRECTORY = 'MYSQLTEST_VARDIR/partitdata', +PARTITION p4 VALUES LESS THAN MAXVALUE); +INSERT INTO t VALUES (1), (101), (201), (301), (401); +DROP TABLE t; +# shutdown server +# remove datadir +# xtrabackup move back +# restart server +SELECT * FROM t; +i +1 +101 +201 +301 +401 +DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/partition_datadir.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/partition_datadir.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/partition_datadir.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/partition_datadir.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,24 @@ +let $targetdir=$MYSQLTEST_VARDIR/backup; +mkdir $targetdir; +mkdir $MYSQLTEST_VARDIR/partitdata; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t(i int) +ENGINE=InnoDB +PARTITION BY RANGE (i) +(PARTITION p0 VALUES LESS THAN (100), + PARTITION P1 VALUES LESS THAN (200), + PARTITION p2 VALUES LESS THAN (300) DATA DIRECTORY = '$MYSQLTEST_VARDIR/partitdata', + PARTITION p3 VALUES LESS THAN (400) DATA DIRECTORY = '$MYSQLTEST_VARDIR/partitdata', + PARTITION p4 VALUES LESS THAN MAXVALUE); +INSERT INTO t VALUES (1), (101), (201), (301), (401); +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir; +exec $XTRABACKUP --prepare --target-dir=$targetdir; +DROP TABLE t; +rmdir $MYSQLTEST_VARDIR/partitdata; +--source include/restart_and_restore.inc +--enable_result_log +SELECT * FROM t; +DROP TABLE t; +rmdir $targetdir; +rmdir $MYSQLTEST_VARDIR/partitdata; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/suite.pm mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/suite.pm --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/suite.pm 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/suite.pm 2017-12-21 15:48:47.000000000 +0000 @@ -23,9 +23,13 @@ $ENV{INNOBACKUPEX}= "$mariabackup_exe --innobackupex"; +my $have_qpress = index(`qpress 2>&1`,"Compression") > 0; + + sub skip_combinations { my %skip; $skip{'include/have_file_key_management.inc'} = 'needs file_key_management plugin' unless $ENV{FILE_KEY_MANAGEMENT_SO}; + $skip{'compress_qpress.test'}= 'needs qpress executable in PATH' unless $have_qpress; %skip; } diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/xb_aws_key_management.opt mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/xb_aws_key_management.opt --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/xb_aws_key_management.opt 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/xb_aws_key_management.opt 2017-12-21 15:48:47.000000000 +0000 @@ -1,3 +1,3 @@ --plugin-load-add=$AWS_KEY_MANAGEMENT_SO --loose-aws-key-management ---loose-aws-key-management-master-key-id=$AWS_KEY_MANAGEMENT_MASTER_KEY_ID +--loose-aws-key-management-mock=ON diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/xb_aws_key_management.result mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/xb_aws_key_management.result --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/xb_aws_key_management.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/xb_aws_key_management.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,7 @@ CREATE TABLE t(c VARCHAR(10)) ENGINE INNODB encrypted=yes; +Warnings: +Note 1105 AWS KMS plugin: generated encrypted datakey for key id=1, version=1 +Note 1105 AWS KMS plugin: loaded key 1, version 1, key length 128 bit INSERT INTO t VALUES('foobar1'); # xtrabackup backup # shutdown server @@ -8,4 +11,6 @@ SELECT * from t; c foobar1 +Warnings: +Note 1105 AWS KMS plugin: loaded key 1, version 1, key length 128 bit DROP TABLE t; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/xb_aws_key_management.test mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/xb_aws_key_management.test --- mariadb-10.1-10.1.25/mysql-test/suite/mariabackup/xb_aws_key_management.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/mariabackup/xb_aws_key_management.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,13 +1,9 @@ +--source include/have_debug.inc if (`SELECT COUNT(*)=0 FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'aws_key_management' AND PLUGIN_STATUS='ACTIVE'`) { --skip needs aws_key_management plugin plugin } -if (`SELECT @@aws_key_management_master_key_id=''`) -{ - --skip Test requires AWS_KEY_MANAGEMEMENT_MASTER_KEY_ID env. variable -} - CREATE TABLE t(c VARCHAR(10)) ENGINE INNODB encrypted=yes; INSERT INTO t VALUES('foobar1'); echo # xtrabackup backup; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/inc/part_alter_values.inc mariadb-10.1-10.1.30/mysql-test/suite/parts/inc/part_alter_values.inc --- mariadb-10.1-10.1.25/mysql-test/suite/parts/inc/part_alter_values.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/inc/part_alter_values.inc 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,37 @@ +--echo # +--echo # MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine +--echo # + +--eval CREATE TABLE t1 (i INT) ENGINE=$engine PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2)); +ALTER TABLE t1 ROW_FORMAT=COMPRESSED; +ALTER TABLE t1 DROP PARTITION p1; +SELECT * FROM t1; + +# Cleanup +DROP TABLE t1; + + +--echo # +--echo # MDEV-13788 Server crash when issuing bad SQL partition syntax +--echo # + +--eval CREATE TABLE t1 (id int, d date) ENGINE=$engine PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE)) +SHOW CREATE TABLE t1; +--error ER_PARTITION_REQUIRES_VALUES_ERROR +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( + PARTITION p2, /* Notice no values */ + PARTITION p3 VALUES LESS THAN (MAXVALUE) +); +DROP TABLE t1; + + +--eval CREATE TABLE t1 (id int, d date) ENGINE=$engine PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3)) +SHOW CREATE TABLE t1; +--error ER_PARTITION_REQUIRES_VALUES_ERROR +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( + PARTITION p2, /* Notice no values */ + PARTITION p3 VALUES IN (4,5,6) +); +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/inc/part_exch_drop_tabs.inc mariadb-10.1-10.1.30/mysql-test/suite/parts/inc/part_exch_drop_tabs.inc --- mariadb-10.1-10.1.25/mysql-test/suite/parts/inc/part_exch_drop_tabs.inc 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/inc/part_exch_drop_tabs.inc 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,3 @@ ---disable_warnings DROP TABLE IF EXISTS t_10; DROP TABLE IF EXISTS t_100; DROP TABLE IF EXISTS t_1000; @@ -11,5 +10,3 @@ DROP TABLE IF EXISTS tsp_04; DROP TABLE IF EXISTS t_empty; DROP TABLE IF EXISTS t_null; ---enable_warnings - diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/inc/part_exch_tabs.inc mariadb-10.1-10.1.30/mysql-test/suite/parts/inc/part_exch_tabs.inc --- mariadb-10.1-10.1.25/mysql-test/suite/parts/inc/part_exch_tabs.inc 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/inc/part_exch_tabs.inc 2017-12-21 15:48:47.000000000 +0000 @@ -1,51 +1,27 @@ ---disable_warnings -DROP TABLE IF EXISTS t_10; -DROP TABLE IF EXISTS t_100; -DROP TABLE IF EXISTS t_1000; -DROP TABLE IF EXISTS tp; -DROP TABLE IF EXISTS tsp; -DROP TABLE IF EXISTS t_empty; -DROP TABLE IF EXISTS t_null; ---enable_warnings - -eval CREATE TABLE t_10 (a INT, - b VARCHAR(55), - PRIMARY KEY (a)) $data_directory $index_directory -ENGINE = $engine_table; - -eval CREATE TABLE t_100 (a INT, - b VARCHAR(55), - PRIMARY KEY (a)) $data_directory $index_directory -ENGINE = $engine_table; - -eval CREATE TABLE t_1000 (a INT, - b VARCHAR(55), - PRIMARY KEY (a)) $data_directory $index_directory -ENGINE = $engine_table; - -eval CREATE TABLE t_empty (a INT, - b VARCHAR(55), - PRIMARY KEY (a)) $data_directory $index_directory -ENGINE = $engine_table; - -eval CREATE TABLE t_null (a INT, - b VARCHAR(55), - PRIMARY KEY (a)) $data_directory $index_directory -ENGINE = $engine_table; - -eval CREATE TABLE tp (a INT, - b VARCHAR(55), - PRIMARY KEY (a)) $data_directory $index_directory -ENGINE = $engine_part +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) $data_directory $index_directory ENGINE = $engine_table; + +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) $data_directory $index_directory ENGINE = $engine_table; + +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) $data_directory $index_directory ENGINE = $engine_table; + +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) $data_directory $index_directory ENGINE = $engine_table; + +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) $data_directory $index_directory ENGINE = $engine_table; + +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) $data_directory $index_directory ENGINE = $engine_part PARTITION BY RANGE (a) (PARTITION p0 VALUES LESS THAN (10) $p_data_directory $p_index_directory, PARTITION p1 VALUES LESS THAN (100) $p_data_directory $p_index_directory, PARTITION p2 VALUES LESS THAN (1000) $p_data_directory $p_index_directory); -eval CREATE TABLE tsp (a INT, - b VARCHAR(55), - PRIMARY KEY (a)) $data_directory $index_directory -ENGINE = $engine_subpart +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) $data_directory $index_directory ENGINE = $engine_subpart PARTITION BY RANGE (a) SUBPARTITION BY HASH(a) (PARTITION p0 VALUES LESS THAN (10) $p_data_directory $p_index_directory @@ -53,8 +29,7 @@ SUBPARTITION sp01, SUBPARTITION sp02, SUBPARTITION sp03, - SUBPARTITION sp04), - PARTITION p1 VALUES LESS THAN (100) + SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) (SUBPARTITION sp10 $p_data_directory $p_index_directory, SUBPARTITION sp11 $p_data_directory $p_index_directory, SUBPARTITION sp12 $p_data_directory $p_index_directory, @@ -99,41 +74,13 @@ INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); -eval CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) - ENGINE = $engine_table $data_directory $index_directory - AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; -eval CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) - ENGINE = $engine_table $data_directory $index_directory - AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; -eval CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) - ENGINE = $engine_table $data_directory $index_directory - AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; -eval CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) - ENGINE = $engine_table $data_directory $index_directory - AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; -eval CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) - ENGINE = $engine_table $data_directory $index_directory - AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; - -SHOW CREATE TABLE t_10; -SHOW CREATE TABLE t_100; -SHOW CREATE TABLE t_1000; -SHOW CREATE TABLE tp; -SHOW CREATE TABLE tsp; - ---sorted_result -SELECT * FROM t_10; ---sorted_result -SELECT * FROM t_100; ---sorted_result -SELECT * FROM t_1000; ---sorted_result -SELECT * FROM tp; ---sorted_result -SELECT * FROM tp WHERE a< 10; ---sorted_result -SELECT * FROM tp WHERE a BETWEEN 11 AND 100; ---sorted_result -SELECT * FROM tp WHERE a BETWEEN 101 AND 200; ---sorted_result -SELECT * FROM tsp; +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = $engine_table $data_directory $index_directory AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = $engine_table $data_directory $index_directory AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = $engine_table $data_directory $index_directory AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = $engine_table $data_directory $index_directory AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; +eval CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = $engine_table $data_directory $index_directory AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/longname.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/longname.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/longname.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/longname.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,37 @@ +set names utf8; +create database mysqltest1; +select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; +database_name table_name length(table_name) +CREATE TABLE mysqltest1.test_jfg_table_name_with_64_chars_123456789012345678901234567890 ( +id int(10) unsigned NOT NULL, +id2 int(10) unsigned NOT NULL, +PRIMARY KEY ( id, id2 ) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +PARTITION BY RANGE ( id ) +SUBPARTITION BY HASH ( id2 ) +SUBPARTITIONS 2 ( +PARTITION test_jfg_partition_name_with_60_chars_1234567890123456789012 VALUES LESS THAN (1000) ENGINE = InnoDB, +PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); +Warnings: +Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; +database_name table_name length(table_name) +CREATE TABLE mysqltest1.éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé ( +id int(10) unsigned NOT NULL, +id2 int(10) unsigned NOT NULL, +PRIMARY KEY ( id, id2 ) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +PARTITION BY RANGE ( id ) +SUBPARTITION BY HASH ( id2 ) +SUBPARTITIONS 2 ( +PARTITION çççççççççççççççççççççççççççççççççççççççççççççççççççççççççççç VALUES LESS THAN (1000) ENGINE = InnoDB, +PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); +ERROR HY000: The path specified for @0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@0n@ is too long. +drop database mysqltest1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_alter_innodb.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_alter_innodb.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_alter_innodb.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_alter_innodb.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,49 @@ +# +# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine +# +CREATE TABLE t1 (i INT) ENGINE=InnoDB PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));; +ALTER TABLE t1 ROW_FORMAT=COMPRESSED; +Warnings: +Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +ALTER TABLE t1 DROP PARTITION p1; +SELECT * FROM t1; +i +DROP TABLE t1; +# +# MDEV-13788 Server crash when issuing bad SQL partition syntax +# +CREATE TABLE t1 (id int, d date) ENGINE=InnoDB PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `d` date DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50500 PARTITION BY RANGE COLUMNS(d) +(PARTITION p1 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */ +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( +PARTITION p2, /* Notice no values */ +PARTITION p3 VALUES LESS THAN (MAXVALUE) +); +ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition +DROP TABLE t1; +CREATE TABLE t1 (id int, d date) ENGINE=InnoDB PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `d` date DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (id) +(PARTITION p1 VALUES IN (1,2,3) ENGINE = InnoDB) */ +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( +PARTITION p2, /* Notice no values */ +PARTITION p3 VALUES IN (4,5,6) +); +ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_alter_maria.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_alter_maria.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_alter_maria.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_alter_maria.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,62 @@ +create table t1 ( +pk bigint not null auto_increment, +dt datetime default null, +unique (pk, dt) +) engine=aria row_format=dynamic +partition by range columns(dt) ( +partition `p20171231` values less than ('2017-12-31'), +partition `p20181231` values less than ('2018-12-31') +); +insert into t1 values (1,'2017-09-28 15:12:00'); +select * from t1; +pk dt +1 2017-09-28 15:12:00 +alter table t1 drop partition p20181231; +select * from t1; +pk dt +1 2017-09-28 15:12:00 +drop table t1; +# +# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine +# +CREATE TABLE t1 (i INT) ENGINE=Aria PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));; +ALTER TABLE t1 ROW_FORMAT=COMPRESSED; +ALTER TABLE t1 DROP PARTITION p1; +SELECT * FROM t1; +i +DROP TABLE t1; +# +# MDEV-13788 Server crash when issuing bad SQL partition syntax +# +CREATE TABLE t1 (id int, d date) ENGINE=Aria PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `d` date DEFAULT NULL +) ENGINE=Aria DEFAULT CHARSET=latin1 +/*!50500 PARTITION BY RANGE COLUMNS(d) +(PARTITION p1 VALUES LESS THAN (MAXVALUE) ENGINE = Aria) */ +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( +PARTITION p2, /* Notice no values */ +PARTITION p3 VALUES LESS THAN (MAXVALUE) +); +ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition +DROP TABLE t1; +CREATE TABLE t1 (id int, d date) ENGINE=Aria PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `d` date DEFAULT NULL +) ENGINE=Aria DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (id) +(PARTITION p1 VALUES IN (1,2,3) ENGINE = Aria) */ +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( +PARTITION p2, /* Notice no values */ +PARTITION p3 VALUES IN (4,5,6) +); +ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_alter_myisam.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_alter_myisam.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_alter_myisam.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_alter_myisam.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,44 @@ +# +# MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine +# +CREATE TABLE t1 (i INT) ENGINE=MyISAM PARTITION BY LIST(i) (PARTITION p0 VALUES IN (1), PARTITION p1 VALUES IN (2));; +ALTER TABLE t1 ROW_FORMAT=COMPRESSED; +ALTER TABLE t1 DROP PARTITION p1; +SELECT * FROM t1; +i +DROP TABLE t1; +# +# MDEV-13788 Server crash when issuing bad SQL partition syntax +# +CREATE TABLE t1 (id int, d date) ENGINE=MyISAM PARTITION BY RANGE COLUMNS(d) (PARTITION p1 VALUES LESS THAN (MAXVALUE)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `d` date DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +/*!50500 PARTITION BY RANGE COLUMNS(d) +(PARTITION p1 VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) */ +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( +PARTITION p2, /* Notice no values */ +PARTITION p3 VALUES LESS THAN (MAXVALUE) +); +ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition +DROP TABLE t1; +CREATE TABLE t1 (id int, d date) ENGINE=MyISAM PARTITION BY LIST (id) (PARTITION p1 VALUES IN (1,2,3)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `d` date DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (id) +(PARTITION p1 VALUES IN (1,2,3) ENGINE = MyISAM) */ +ALTER TABLE t1 REORGANIZE PARTITION p1 INTO +( +PARTITION p2, /* Notice no values */ +PARTITION p3 VALUES IN (4,5,6) +); +ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_myisam_innodb.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_myisam_innodb.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_myisam_innodb.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_myisam_innodb.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,3 +1,58 @@ +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) , +PARTITION p1 VALUES LESS THAN (100) , +PARTITION p2 VALUES LESS THAN (1000) ); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 , +SUBPARTITION sp11 , +SUBPARTITION sp12 , +SUBPARTITION sp13 , +SUBPARTITION sp14 ), +PARTITION p2 VALUES LESS THAN (1000) +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MariaDB DROP TABLE IF EXISTS t_10; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_14.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_14.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_14.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_14.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,198 @@ -use test; +# === Data/Index directories are identical +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p1 VALUES LESS THAN (100) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp13 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp14 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'), +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; +# === partition has directories, the table does not +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p1 VALUES LESS THAN (100) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp13 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp14 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'), +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR HY000: Tables have different definitions +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; +# === the table has directories, partition does not +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) , +PARTITION p1 VALUES LESS THAN (100) , +PARTITION p2 VALUES LESS THAN (1000) ); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 , +SUBPARTITION sp11 , +SUBPARTITION sp12 , +SUBPARTITION sp13 , +SUBPARTITION sp14 ), +PARTITION p2 VALUES LESS THAN (1000) +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ERROR HY000: Tables have different definitions DROP TABLE IF EXISTS t_10; @@ -13,7 +207,62 @@ DROP TABLE IF EXISTS tsp_04; DROP TABLE IF EXISTS t_empty; DROP TABLE IF EXISTS t_null; -use test; +# === data directory differs +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p1 VALUES LESS THAN (100) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp13 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +SUBPARTITION sp14 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'), +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ERROR HY000: Tables have different definitions DROP TABLE IF EXISTS t_10; @@ -28,7 +277,62 @@ DROP TABLE IF EXISTS tsp_04; DROP TABLE IF EXISTS t_empty; DROP TABLE IF EXISTS t_null; -use test; +# === index directory differs +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir', +PARTITION p1 VALUES LESS THAN (100) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir', +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' ENGINE = MYISAM +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir', +SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir', +SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir', +SUBPARTITION sp13 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir', +SUBPARTITION sp14 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'), +PARTITION p2 VALUES LESS THAN (1000) DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ERROR HY000: Tables have different definitions DROP TABLE IF EXISTS t_10; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_15.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_15.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_15.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_15.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,10 +1,65 @@ use test; +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) , +PARTITION p1 VALUES LESS THAN (100) , +PARTITION p2 VALUES LESS THAN (1000) ); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 , +SUBPARTITION sp11 , +SUBPARTITION sp12 , +SUBPARTITION sp13 , +SUBPARTITION sp14 ), +PARTITION p2 VALUES LESS THAN (1000) +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = InnoDB AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = InnoDB AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = InnoDB AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = InnoDB AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = InnoDB AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; CREATE TABLE t_11 (a INT, b VARCHAR(55), FOREIGN KEY (a) REFERENCES t_10 (a) ON DELETE CASCADE) ENGINE= InnoDB; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ERROR HY000: Table to exchange with partition has foreign key references: 't_11' -DROP TABLE IF EXISTS t_11; +DROP TABLE t_11; DROP TABLE IF EXISTS t_10; DROP TABLE IF EXISTS t_100; DROP TABLE IF EXISTS t_1000; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_2.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_2.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_2.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_2.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,59 @@ use test; +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) , +PARTITION p1 VALUES LESS THAN (100) , +PARTITION p2 VALUES LESS THAN (1000) ); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 , +SUBPARTITION sp11 , +SUBPARTITION sp12 , +SUBPARTITION sp13 , +SUBPARTITION sp14 ), +PARTITION p2 VALUES LESS THAN (1000) +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; SELECT * FROM t_10; a b 1 One @@ -102,20 +157,20 @@ CREATE TABLE t_11(a INT,b VARCHAR(55)) SELECT * FROM t_10; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ERROR HY000: Tables have different definitions -DROP TABLE IF EXISTS t_11; +DROP TABLE t_11; CREATE TABLE t_11(a INT,b CHAR(55),PRIMARY KEY(a)) ENGINE= MYISAM SELECT * FROM t_10; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ERROR HY000: Tables have different definitions -DROP TABLE IF EXISTS t_11; +DROP TABLE t_11; CREATE TABLE t_11(a INT,b VARCHAR(55),PRIMARY KEY(a)) ENGINE= MEMORY SELECT * FROM t_10; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MariaDB -DROP TABLE IF EXISTS t_11; +DROP TABLE t_11; CREATE TABLE t_11(a INT,b CHAR(55),PRIMARY KEY(a)) ENGINE= MYISAM PARTITION BY KEY() AS SELECT * FROM t_10; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ERROR HY000: Table to exchange with partition is partitioned: 't_11' -DROP TABLE IF EXISTS t_11; +DROP TABLE t_11; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE tsp; ERROR HY000: Table to exchange with partition is partitioned: 'tsp' ALTER TABLE tsp EXCHANGE PARTITION p0 WITH TABLE t_10; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_3.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_3.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_3.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_3.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,4 +1,159 @@ use test; +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) , +PARTITION p1 VALUES LESS THAN (100) , +PARTITION p2 VALUES LESS THAN (1000) ); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = InnoDB +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 , +SUBPARTITION sp11 , +SUBPARTITION sp12 , +SUBPARTITION sp13 , +SUBPARTITION sp14 ), +PARTITION p2 VALUES LESS THAN (1000) +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM t_100; +a b +11 Eleven +13 Thirdteen +15 Fifeteen +19 Nineteen +91 Ninety-one +93 Ninety-three +95 Ninety-five +99 Ninety-nine +SELECT * FROM t_1000; +a b +111 Hundred elven +113 Hundred thirdteen +115 Hundred fiveteen +119 Hundred nineteen +131 Hundred thirty-one +133 Hundred thirty-three +135 Hundred thirty-five +139 Hundred thirty-nine +151 Hundred fifty-one +153 Hundred fifty-three +155 Hundred fity-five +159 Hundred fifty-nine +191 Hundred ninety-one +193 Hundred ninety-three +195 Hundred ninety-five +199 Hundred ninety-nine +SELECT * FROM tp; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +12 twelve +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +14 Fourteen +16 Sixteen +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +18 Eightteen +182 Hundred eighty-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tsp; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +12 twelve +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +14 Fourteen +16 Sixteen +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +18 Eightteen +182 Hundred eight-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tsp_00; +a b +5 Five +SELECT * FROM tsp_01; +a b +1 One +SELECT * FROM tsp_02; +a b +SELECT * FROM tsp_03; +a b +3 Three +SELECT * FROM tsp_04; +a b +9 Nine ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MariaDB ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_6.result mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_6.result --- mariadb-10.1-10.1.25/mysql-test/suite/parts/r/partition_exch_qa_6.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/r/partition_exch_qa_6.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,61 @@ CREATE USER test2@localhost; +CREATE TABLE t_10 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_100 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_1000 (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_empty (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE t_null (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM; +CREATE TABLE tp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) , +PARTITION p1 VALUES LESS THAN (100) , +PARTITION p2 VALUES LESS THAN (1000) ); +CREATE TABLE tsp (a INT, b VARCHAR(55), PRIMARY KEY (a)) ENGINE = MYISAM +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (10) +(SUBPARTITION sp00, +SUBPARTITION sp01, +SUBPARTITION sp02, +SUBPARTITION sp03, +SUBPARTITION sp04), PARTITION p1 VALUES LESS THAN (100) +(SUBPARTITION sp10 , +SUBPARTITION sp11 , +SUBPARTITION sp12 , +SUBPARTITION sp13 , +SUBPARTITION sp14 ), +PARTITION p2 VALUES LESS THAN (1000) +(SUBPARTITION sp20, +SUBPARTITION sp21, +SUBPARTITION sp22, +SUBPARTITION sp23, +SUBPARTITION sp24)); +INSERT INTO t_10 VALUES (1, "One"), (3, "Three"), (5, "Five"), (9, "Nine"); +INSERT INTO t_100 VALUES (11, "Eleven"), (13, "Thirdteen"), (15, "Fifeteen"), (19, "Nineteen"); +INSERT INTO t_100 VALUES (91, "Ninety-one"), (93, "Ninety-three"), (95, "Ninety-five"), (99, "Ninety-nine"); +INSERT INTO t_1000 VALUES (111, "Hundred elven"), (113, "Hundred thirdteen"), (115, "Hundred fiveteen"), (119, "Hundred nineteen"); +INSERT INTO t_1000 VALUES (131, "Hundred thirty-one"), (133, "Hundred thirty-three"), (135, "Hundred thirty-five"), (139, "Hundred thirty-nine"); +INSERT INTO t_1000 VALUES (151, "Hundred fifty-one"), (153, "Hundred fifty-three"), (155, "Hundred fity-five"), (159, "Hundred fifty-nine"); +INSERT INTO t_1000 VALUES (191, "Hundred ninety-one"), (193, "Hundred ninety-three"), (195, "Hundred ninety-five"), (199, "Hundred ninety-nine"); +INSERT INTO t_null VALUES (1, "NULL"); +INSERT INTO tp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tp VALUES (182, "Hundred eighty-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +INSERT INTO tsp VALUES (2, "Two"), (4, "Four"), (6, "Six"), (8, "Eight"); +INSERT INTO tsp VALUES (12, "twelve"), (14, "Fourteen"), (16, "Sixteen"), (18, "Eightteen"); +INSERT INTO tsp VALUES (112, "Hundred twelve"), (114, "Hundred fourteen"), (116, "Hundred sixteen"), (118, "Hundred eightteen"); +INSERT INTO tsp VALUES (122, "Hundred twenty-two"), (124, "Hundred twenty-four"), (126, "Hundred twenty-six"), (128, "Hundred twenty-eight"); +INSERT INTO tsp VALUES (162, "Hundred sixty-two"), (164, "Hundred sixty-four"), (166, "Hundred sixty-six"), (168, "Hundred sixty-eight"); +INSERT INTO tsp VALUES (182, "Hundred eight-two"), (184, "Hundred eighty-four"), (186, "Hundred eighty-six"), (188, "Hundred eighty-eight"); +CREATE TABLE tsp_01(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 1; +CREATE TABLE tsp_02(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 2; +CREATE TABLE tsp_03(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 3; +CREATE TABLE tsp_04(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 4; +CREATE TABLE tsp_00(a INT,b VARCHAR(55),PRIMARY KEY (a)) ENGINE = MYISAM AS SELECT a, b FROM t_10 WHERE MOD(a,5)= 0; GRANT USAGE ON *.* TO test2@localhost; GRANT CREATE, DROP, ALTER, UPDATE, INSERT, SELECT ON test.* TO test2@localhost; -connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); -USE test; SHOW GRANTS FOR CURRENT_USER; Grants for test2@localhost GRANT USAGE ON *.* TO 'test2'@'localhost' @@ -53,10 +106,7 @@ 4 Four 6 Six 8 Eight -disconnect test2; -connection default; REVOKE INSERT ON test.* FROM test2@localhost; -connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); USE test; SHOW GRANTS FOR CURRENT_USER; Grants for test2@localhost @@ -64,11 +114,8 @@ GRANT SELECT, UPDATE, CREATE, DROP, ALTER ON `test`.* TO 'test2'@'localhost' ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ERROR 42000: INSERT command denied to user 'test2'@'localhost' for table 'tp' -disconnect test2; -connection default; GRANT INSERT ON test.* TO test2@localhost; REVOKE CREATE ON test.* FROM test2@localhost; -connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); USE test; SHOW GRANTS FOR CURRENT_USER; Grants for test2@localhost @@ -76,20 +123,14 @@ GRANT SELECT, INSERT, UPDATE, DROP, ALTER ON `test`.* TO 'test2'@'localhost' ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; ERROR 42000: CREATE command denied to user 'test2'@'localhost' for table 'tsp' -disconnect test2; -connection default; GRANT CREATE ON test.* TO test2@localhost; REVOKE DROP ON test.* FROM test2@localhost; -connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); -USE test; SHOW GRANTS FOR CURRENT_USER; Grants for test2@localhost GRANT USAGE ON *.* TO 'test2'@'localhost' GRANT SELECT, INSERT, UPDATE, CREATE, ALTER ON `test`.* TO 'test2'@'localhost' ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ERROR 42000: DROP command denied to user 'test2'@'localhost' for table 'tp' -disconnect test2; -connection default; DROP TABLE IF EXISTS t_10; DROP TABLE IF EXISTS t_100; DROP TABLE IF EXISTS t_1000; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/longname.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/longname.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/longname.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/longname.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,32 @@ +source include/have_innodb.inc; +source include/have_partition.inc; +set names utf8; + +create database mysqltest1; +select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; +CREATE TABLE mysqltest1.test_jfg_table_name_with_64_chars_123456789012345678901234567890 ( + id int(10) unsigned NOT NULL, + id2 int(10) unsigned NOT NULL, + PRIMARY KEY ( id, id2 ) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +PARTITION BY RANGE ( id ) + SUBPARTITION BY HASH ( id2 ) + SUBPARTITIONS 2 ( + PARTITION test_jfg_partition_name_with_60_chars_1234567890123456789012 VALUES LESS THAN (1000) ENGINE = InnoDB, + PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); + +select database_name, table_name, length(table_name) from mysql.innodb_table_stats where database_name = 'mysqltest1'; + +--error ER_PATH_LENGTH +CREATE TABLE mysqltest1.éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé ( + id int(10) unsigned NOT NULL, + id2 int(10) unsigned NOT NULL, + PRIMARY KEY ( id, id2 ) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +PARTITION BY RANGE ( id ) + SUBPARTITION BY HASH ( id2 ) + SUBPARTITIONS 2 ( + PARTITION çççççççççççççççççççççççççççççççççççççççççççççççççççççççççççç VALUES LESS THAN (1000) ENGINE = InnoDB, + PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB); + +drop database mysqltest1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_alter_innodb.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_alter_innodb.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_alter_innodb.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_alter_innodb.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,4 @@ +--source include/have_innodb.inc +--source include/have_partition.inc +--let $engine=InnoDB +--source inc/part_alter_values.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_alter_maria.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_alter_maria.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_alter_maria.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_alter_maria.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,21 @@ +# +# MDEV-13937 Aria engine: Internal Error 160 after partition handling +# +source include/have_partition.inc; +create table t1 ( + pk bigint not null auto_increment, + dt datetime default null, + unique (pk, dt) +) engine=aria row_format=dynamic + partition by range columns(dt) ( + partition `p20171231` values less than ('2017-12-31'), + partition `p20181231` values less than ('2018-12-31') +); +insert into t1 values (1,'2017-09-28 15:12:00'); +select * from t1; +alter table t1 drop partition p20181231; +select * from t1; +drop table t1; + +--let $engine=Aria +--source inc/part_alter_values.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_alter_myisam.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_alter_myisam.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_alter_myisam.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_alter_myisam.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,3 @@ +--source include/have_partition.inc +--let $engine=MyISAM +--source inc/part_alter_values.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_myisam_innodb.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_myisam_innodb.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_myisam_innodb.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_myisam_innodb.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,21 +1,17 @@ # Author: Horst Hunger # Created: 2010-07-05 ---source include/have_innodb.inc ---source include/have_partition.inc +source include/have_innodb.inc; +source include/have_partition.inc; let $engine_table= MYISAM; let $engine_part= InnoDB; let $engine_subpart= InnoDB; ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc ---enable_result_log ---enable_query_log +source suite/parts/inc/part_exch_tabs.inc; ---error 1497 +error ER_MIX_HANDLER_ERROR; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ---source suite/parts/inc/part_exch_drop_tabs.inc +source suite/parts/inc/part_exch_drop_tabs.inc; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_14.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_14.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_14.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_14.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,94 +1,66 @@ # Author: Horst Hunger # Created: 2010-07-13 ---source include/not_windows.inc ---source include/have_partition.inc ---source include/have_symlink.inc +source include/not_windows.inc; +source include/have_partition.inc; +source include/have_symlink.inc; let $engine_table= MYISAM; let $engine_part= MYISAM; let $engine_subpart= MYISAM; - -# DATA DIRECTORY -# Make directory for partition data let $data_dir_path= $MYSQLTEST_VARDIR/mysql-test-data-dir; ---mkdir $data_dir_path -let $p_data_directory= DATA DIRECTORY = '$data_dir_path'; -let $data_directory= DATA DIRECTORY = '$data_dir_path'; - -# INDEX DIRECTORY -# Make directory for partition index let $idx_dir_path= $MYSQLTEST_VARDIR/mysql-test-idx-dir; ---mkdir $idx_dir_path -let $p_index_directory= INDEX DIRECTORY = '$idx_dir_path'; -let $index_directory= INDEX DIRECTORY = '$idx_dir_path'; - -use test; - ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc ---enable_result_log ---enable_query_log - ---error ER_TABLES_DIFFERENT_METADATA -ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; - ---source suite/parts/inc/part_exch_drop_tabs.inc ---rmdir $data_dir_path ---rmdir $idx_dir_path - -# DATA DIRECTORY -# Make directory for partition data -let $data_dir_path= $MYSQLTEST_VARDIR/mysql-test-data-dir; ---mkdir $data_dir_path -let $p_data_directory= DATA DIRECTORY = '$data_dir_path'; - -# INDEX DIRECTORY -# Make directory for partition index -let $idx_dir_path= $MYSQLTEST_VARDIR/mysql-test-idx-dir; ---mkdir $idx_dir_path -let $p_index_directory= INDEX DIRECTORY = '$idx_dir_path'; - -use test; - ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc ---enable_result_log ---enable_query_log - ---error ER_TABLES_DIFFERENT_METADATA -ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; - ---source suite/parts/inc/part_exch_drop_tabs.inc ---rmdir $data_dir_path ---rmdir $idx_dir_path - -# DATA DIRECTORY -# Make directory for partition data -let $data_dir_path= $MYSQLTEST_VARDIR/mysql-test-data-dir; ---mkdir $data_dir_path -let $data_directory= DATA DIRECTORY = '$data_dir_path'; - -# INDEX DIRECTORY -# Make directory for partition index -let $idx_dir_path= $MYSQLTEST_VARDIR/mysql-test-idx-dir; ---mkdir $idx_dir_path -let $index_directory= INDEX DIRECTORY = '$idx_dir_path'; - -use test; +mkdir $data_dir_path; +mkdir $idx_dir_path; ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc ---enable_result_log ---enable_query_log - ---error ER_TABLES_DIFFERENT_METADATA -ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; - ---source suite/parts/inc/part_exch_drop_tabs.inc ---rmdir $data_dir_path ---rmdir $idx_dir_path +echo # === Data/Index directories are identical; + let $p_data_directory= DATA DIRECTORY = '$data_dir_path'; + let $data_directory= DATA DIRECTORY = '$data_dir_path'; + let $p_index_directory= INDEX DIRECTORY = '$idx_dir_path'; + let $index_directory= INDEX DIRECTORY = '$idx_dir_path'; + source suite/parts/inc/part_exch_tabs.inc; + ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; + source suite/parts/inc/part_exch_drop_tabs.inc; + +echo # === partition has directories, the table does not; + let $p_data_directory= DATA DIRECTORY = '$data_dir_path'; + let $data_directory= ; + let $p_index_directory= INDEX DIRECTORY = '$idx_dir_path'; + let $index_directory= ; + source suite/parts/inc/part_exch_tabs.inc; + error ER_TABLES_DIFFERENT_METADATA; + ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; + source suite/parts/inc/part_exch_drop_tabs.inc; + +echo # === the table has directories, partition does not; + let $p_data_directory= ; + let $data_directory= DATA DIRECTORY = '$data_dir_path'; + let $p_index_directory= ; + let $index_directory= INDEX DIRECTORY = '$idx_dir_path'; + source suite/parts/inc/part_exch_tabs.inc; + error ER_TABLES_DIFFERENT_METADATA; + ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; + source suite/parts/inc/part_exch_drop_tabs.inc; + +echo # === data directory differs; + let $p_data_directory= DATA DIRECTORY = '$data_dir_path'; + let $data_directory= DATA DIRECTORY = '$idx_dir_path'; + let $p_index_directory= INDEX DIRECTORY = '$idx_dir_path'; + let $index_directory= INDEX DIRECTORY = '$idx_dir_path'; + source suite/parts/inc/part_exch_tabs.inc; + error ER_TABLES_DIFFERENT_METADATA; + ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; + source suite/parts/inc/part_exch_drop_tabs.inc; + +echo # === index directory differs; + let $p_data_directory= DATA DIRECTORY = '$data_dir_path'; + let $data_directory= DATA DIRECTORY = '$data_dir_path'; + let $p_index_directory= DATA DIRECTORY = '$data_dir_path'; + let $index_directory= DATA DIRECTORY = '$idx_dir_path'; + source suite/parts/inc/part_exch_tabs.inc; + error ER_TABLES_DIFFERENT_METADATA; + ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; + source suite/parts/inc/part_exch_drop_tabs.inc; +rmdir $idx_dir_path; +rmdir $data_dir_path; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_15.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_15.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_15.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_15.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ # Author: Horst Hunger # Created: 2010-07-15 ---source include/have_innodb.inc ---source include/have_partition.inc +source include/have_innodb.inc; +source include/have_partition.inc; let $engine_table= InnoDB; let $engine_part= InnoDB; @@ -10,11 +10,7 @@ use test; ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc ---enable_result_log ---enable_query_log +source suite/parts/inc/part_exch_tabs.inc; # 21) Foreign Key. # Exchange of partition with table differing in structure. @@ -22,10 +18,8 @@ FOREIGN KEY (a) REFERENCES t_10 (a) ON DELETE CASCADE) ENGINE= InnoDB; #--error ER_TABLES_DIFFERENT_METADATA ---error ER_PARTITION_EXCHANGE_FOREIGN_KEY +error ER_PARTITION_EXCHANGE_FOREIGN_KEY; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ---disable_warnings -DROP TABLE IF EXISTS t_11; ---enable_warnings ---source suite/parts/inc/part_exch_drop_tabs.inc +DROP TABLE t_11; +source suite/parts/inc/part_exch_drop_tabs.inc; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_2.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_2.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_2.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_2.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ # Author: Horst Hunger # Created: 2010-07-05 ---source include/have_partition.inc +source include/have_partition.inc; let $engine_table= MYISAM; let $engine_part= MYISAM; @@ -9,72 +9,61 @@ use test; ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc ---enable_result_log ---enable_query_log +source suite/parts/inc/part_exch_tabs.inc; ---sorted_result +sorted_result; SELECT * FROM t_10; ---sorted_result +sorted_result; SELECT * FROM t_100; ---sorted_result +sorted_result; SELECT * FROM t_1000; ---sorted_result +sorted_result; SELECT * FROM tp; ---sorted_result +sorted_result; SELECT * FROM tsp; ---sorted_result +sorted_result; SELECT * FROM tsp_00; ---sorted_result +sorted_result; SELECT * FROM tsp_01; ---sorted_result +sorted_result; SELECT * FROM tsp_02; ---sorted_result +sorted_result; SELECT * FROM tsp_03; ---sorted_result +sorted_result; SELECT * FROM tsp_04; # 3) Invalid exchanges. # Exchange of partition with table differing in structure. CREATE TABLE t_11(a INT,b VARCHAR(55)) SELECT * FROM t_10; ---error ER_TABLES_DIFFERENT_METADATA +error ER_TABLES_DIFFERENT_METADATA; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ---disable_warnings -DROP TABLE IF EXISTS t_11; ---enable_warnings +DROP TABLE t_11; eval CREATE TABLE t_11(a INT,b CHAR(55),PRIMARY KEY(a)) ENGINE= $engine_table SELECT * FROM t_10; ---error ER_TABLES_DIFFERENT_METADATA +error ER_TABLES_DIFFERENT_METADATA; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ---disable_warnings -DROP TABLE IF EXISTS t_11; +DROP TABLE t_11; CREATE TABLE t_11(a INT,b VARCHAR(55),PRIMARY KEY(a)) ENGINE= MEMORY SELECT * FROM t_10; ---error ER_MIX_HANDLER_ERROR +error ER_MIX_HANDLER_ERROR; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ---disable_warnings -DROP TABLE IF EXISTS t_11; ---enable_warnings +DROP TABLE t_11; # Exchange of partition with partitioned table. eval CREATE TABLE t_11(a INT,b CHAR(55),PRIMARY KEY(a)) ENGINE= $engine_table PARTITION BY KEY() AS SELECT * FROM t_10; ---error ER_PARTITION_EXCHANGE_PART_TABLE +error ER_PARTITION_EXCHANGE_PART_TABLE; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_11; ---disable_warnings -DROP TABLE IF EXISTS t_11; ---enable_warnings +DROP TABLE t_11; # Exchange of subpartition with partitioned table. ---error ER_PARTITION_EXCHANGE_PART_TABLE +error ER_PARTITION_EXCHANGE_PART_TABLE; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE tsp; # Exchange of subpartitioned partition with table. ---error ER_PARTITION_INSTEAD_OF_SUBPARTITION +error ER_PARTITION_INSTEAD_OF_SUBPARTITION; ALTER TABLE tsp EXCHANGE PARTITION p0 WITH TABLE t_10; # Exchange of values in partition not fitting the hash. ---error ER_ROW_DOES_NOT_MATCH_PARTITION +error ER_ROW_DOES_NOT_MATCH_PARTITION; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_100; # Exchange of values in subpartition not fitting the hash. ---error ER_ROW_DOES_NOT_MATCH_PARTITION +error ER_ROW_DOES_NOT_MATCH_PARTITION; ALTER TABLE tp EXCHANGE PARTITION p2 WITH TABLE t_10; ---source suite/parts/inc/part_exch_drop_tabs.inc +source suite/parts/inc/part_exch_drop_tabs.inc; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_3.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_3.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_3.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_3.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ # Author: Horst Hunger # Created: 2010-07-05 ---source include/have_partition.inc ---source include/have_innodb.inc +source include/have_partition.inc; +source include/have_innodb.inc; let $engine_table= MYISAM; let $engine_part= InnoDB; @@ -10,38 +10,34 @@ use test; ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc +source suite/parts/inc/part_exch_tabs.inc; ---sorted_result +sorted_result; SELECT * FROM t_10; ---sorted_result +sorted_result; SELECT * FROM t_100; ---sorted_result +sorted_result; SELECT * FROM t_1000; ---sorted_result +sorted_result; SELECT * FROM tp; ---sorted_result +sorted_result; SELECT * FROM tsp; ---sorted_result +sorted_result; SELECT * FROM tsp_00; ---sorted_result +sorted_result; SELECT * FROM tsp_01; ---sorted_result +sorted_result; SELECT * FROM tsp_02; ---sorted_result +sorted_result; SELECT * FROM tsp_03; ---sorted_result +sorted_result; SELECT * FROM tsp_04; ---enable_result_log ---enable_query_log # 5) Exchanges with different engines. ---error ER_MIX_HANDLER_ERROR +error ER_MIX_HANDLER_ERROR; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ---error ER_MIX_HANDLER_ERROR +error ER_MIX_HANDLER_ERROR; ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; ---source suite/parts/inc/part_exch_drop_tabs.inc +source suite/parts/inc/part_exch_drop_tabs.inc; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_6.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_6.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/partition_exch_qa_6.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/partition_exch_qa_6.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ # Author: Horst Hunger # Created: 2010-07-06 ---source include/not_embedded.inc ---source include/have_partition.inc +source include/not_embedded.inc; +source include/have_partition.inc; let $engine_table= MYISAM; let $engine_part= MYISAM; @@ -10,93 +10,75 @@ CREATE USER test2@localhost; ---disable_result_log ---disable_query_log ---source suite/parts/inc/part_exch_tabs.inc ---enable_result_log ---enable_query_log +source suite/parts/inc/part_exch_tabs.inc; GRANT USAGE ON *.* TO test2@localhost; GRANT CREATE, DROP, ALTER, UPDATE, INSERT, SELECT ON test.* TO test2@localhost; ---echo connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); connect (test2,localhost,test2,,test,$MASTER_MYPORT,$MASTER_MYSOCK); -USE test; SHOW GRANTS FOR CURRENT_USER; # 9) Exchanges with different owner. # Privilege for ALTER and SELECT ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ---sorted_result +sorted_result; SELECT * FROM t_10; ---sorted_result +sorted_result; SELECT * FROM tp WHERE a BETWEEN 0 AND 10; # Back to former values. ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ---sorted_result +sorted_result; SELECT * FROM t_10; ---sorted_result +sorted_result; SELECT * FROM tp WHERE a BETWEEN 0 AND 10; ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; ---sorted_result +sorted_result; SELECT * FROM tsp_00; ---sorted_result +sorted_result; SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; # Back to former values. ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; ---sorted_result +sorted_result; SELECT * FROM tsp_00; ---sorted_result +sorted_result; SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; ---echo disconnect test2; disconnect test2; ---echo connection default; connection default; REVOKE INSERT ON test.* FROM test2@localhost; ---echo connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); connect (test2,localhost,test2,,test,$MASTER_MYPORT,$MASTER_MYSOCK); USE test; SHOW GRANTS FOR CURRENT_USER; # Privilege for ALTER and SELECT ---error ER_TABLEACCESS_DENIED_ERROR +error ER_TABLEACCESS_DENIED_ERROR; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ---echo disconnect test2; disconnect test2; ---echo connection default; connection default; GRANT INSERT ON test.* TO test2@localhost; REVOKE CREATE ON test.* FROM test2@localhost; ---echo connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); connect (test2,localhost,test2,,test,$MASTER_MYPORT,$MASTER_MYSOCK); USE test; SHOW GRANTS FOR CURRENT_USER; ---error ER_TABLEACCESS_DENIED_ERROR +error ER_TABLEACCESS_DENIED_ERROR; ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; ---echo disconnect test2; disconnect test2; ---echo connection default; connection default; GRANT CREATE ON test.* TO test2@localhost; REVOKE DROP ON test.* FROM test2@localhost; ---echo connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); connect (test2,localhost,test2,,test,$MASTER_MYPORT,$MASTER_MYSOCK); -USE test; SHOW GRANTS FOR CURRENT_USER; # Privilege for ALTER and SELECT ---error ER_TABLEACCESS_DENIED_ERROR +error ER_TABLEACCESS_DENIED_ERROR; ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; ---echo disconnect test2; disconnect test2; ---echo connection default; connection default; ---source suite/parts/inc/part_exch_drop_tabs.inc +source suite/parts/inc/part_exch_drop_tabs.inc; DROP USER test2@localhost; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/parts/t/rpl_partition.test mariadb-10.1-10.1.30/mysql-test/suite/parts/t/rpl_partition.test --- mariadb-10.1-10.1.25/mysql-test/suite/parts/t/rpl_partition.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/parts/t/rpl_partition.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ --source include/have_partition.inc --source include/have_innodb.inc ---source include/master-slave.inc --source include/big_test.inc +--source include/master-slave.inc --vertical_results diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/perfschema/r/misc.result mariadb-10.1-10.1.30/mysql-test/suite/perfschema/r/misc.result --- mariadb-10.1-10.1.25/mysql-test/suite/perfschema/r/misc.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/perfschema/r/misc.result 2017-12-21 15:48:47.000000000 +0000 @@ -118,3 +118,19 @@ select count(*) from events_statements_history where sql_text like "%..."; count(*) 2 +use test; +create table t1 (id int); +insert into t1 values (1), (2), (3); +truncate performance_schema.events_statements_history; +select * from t1; +id +1 +2 +3 +insert into t1 select RAND()*10000 from t1; +select sql_text, rows_examined from performance_schema.events_statements_history; +sql_text rows_examined +truncate performance_schema.events_statements_history 0 +select * from t1 3 +insert into t1 select RAND()*10000 from t1 6 +drop table t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/perfschema/r/privilege_table_io.result mariadb-10.1-10.1.30/mysql-test/suite/perfschema/r/privilege_table_io.result --- mariadb-10.1-10.1.25/mysql-test/suite/perfschema/r/privilege_table_io.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/perfschema/r/privilege_table_io.result 2017-12-21 15:48:47.000000000 +0000 @@ -12,6 +12,7 @@ optimize table mysql.user; optimize table mysql.db; optimize table mysql.proxies_priv; +optimize table mysql.roles_mapping; optimize table mysql.tables_priv; optimize table mysql.procs_priv; optimize table mysql.servers; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/perfschema/r/start_server_low_digest.result mariadb-10.1-10.1.30/mysql-test/suite/perfschema/r/start_server_low_digest.result --- mariadb-10.1-10.1.25/mysql-test/suite/perfschema/r/start_server_low_digest.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/perfschema/r/start_server_low_digest.result 2017-12-21 15:48:47.000000000 +0000 @@ -8,5 +8,5 @@ #################################### SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long; event_name digest digest_text sql_text -statement/sql/truncate e1c917a43f978456fab15240f89372ca TRUNCATE TABLE truncate table events_statements_history_long -statement/sql/select 3f7ca34376814d0e985337bd588b5ffd SELECT ? + ? + SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 +statement/sql/truncate 6206ac02a54d832f55015e480e6f2213 TRUNCATE TABLE truncate table events_statements_history_long +statement/sql/select 4cc1c447d79877c4e8df0423fd0cde9a SELECT ? + ? + SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/perfschema/t/misc.test mariadb-10.1-10.1.30/mysql-test/suite/perfschema/t/misc.test --- mariadb-10.1-10.1.25/mysql-test/suite/perfschema/t/misc.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/perfschema/t/misc.test 2017-12-21 15:48:47.000000000 +0000 @@ -207,3 +207,18 @@ select _utf8mb4 'васÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑ' as B; select count(*) from events_statements_history where sql_text like "%..."; + + +# +# MDEV-10486 MariaDB 10.x does not update rows_examined in performance_schema tables +# Verify that the rows_examined counter is set properly. + +use test; +create table t1 (id int); +insert into t1 values (1), (2), (3); +truncate performance_schema.events_statements_history; +select * from t1; +insert into t1 select RAND()*10000 from t1; +select sql_text, rows_examined from performance_schema.events_statements_history; +drop table t1; + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/perfschema/t/privilege_table_io.test mariadb-10.1-10.1.30/mysql-test/suite/perfschema/t/privilege_table_io.test --- mariadb-10.1-10.1.25/mysql-test/suite/perfschema/t/privilege_table_io.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/perfschema/t/privilege_table_io.test 2017-12-21 15:48:47.000000000 +0000 @@ -18,6 +18,7 @@ optimize table mysql.user; optimize table mysql.db; optimize table mysql.proxies_priv; +optimize table mysql.roles_mapping; optimize table mysql.tables_priv; optimize table mysql.procs_priv; optimize table mysql.servers; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/plugins/r/binlog-simple_plugin_check.result mariadb-10.1-10.1.30/mysql-test/suite/plugins/r/binlog-simple_plugin_check.result --- mariadb-10.1-10.1.25/mysql-test/suite/plugins/r/binlog-simple_plugin_check.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/plugins/r/binlog-simple_plugin_check.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,19 @@ +INSTALL SONAME "simple_password_check"; +SELECT PLUGIN_NAME FROM INFORMATION_SCHEMA.PLUGINS +WHERE PLUGIN_NAME='simple_password_check'; +PLUGIN_NAME +simple_password_check +# +# MDEV-14031 Password policy causes replication failure +# +CREATE USER user1@localhost IDENTIFIED BY 'BsG9#9.cem#!85'; +CREATE USER user2@localhost IDENTIFIED BY 'bsg9#d.cem#!85'; +ERROR HY000: Your password does not satisfy the current policy requirements +DROP USER user1@localhost; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; CREATE USER user1@localhost IDENTIFIED BY 'BsG9#9.cem#!85' +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; DROP USER user1@localhost +UNINSTALL PLUGIN simple_password_check; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/plugins/r/server_audit.result mariadb-10.1-10.1.30/mysql-test/suite/plugins/r/server_audit.result --- mariadb-10.1-10.1.25/mysql-test/suite/plugins/r/server_audit.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/plugins/r/server_audit.result 2017-12-21 15:48:47.000000000 +0000 @@ -47,6 +47,7 @@ set global server_audit_events='connect,query'; select 1, 2, +# comment 3; 1 2 3 1 2 3 @@ -161,7 +162,9 @@ 2 CREATE USER u1 IDENTIFIED BY 'pwd-123'; GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; -SET PASSWORD FOR u1 = PASSWORD('pwd 098'); +SET PASSWORD +# comment +FOR u1 = PASSWORD('pwd 098'); SET PASSWORD FOR u1=; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 CREATE USER u3 IDENTIFIED BY ''; @@ -253,7 +256,7 @@ TIME,HOSTNAME,root,localhost,ID,ID,RENAME,test,t1|test.renamed_t1, TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'alter table t1 rename renamed_t1',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_events=\'connect,query\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select 1, 2, 3',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select 1,\n2,\n# comment\n3',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t2 values (1), (2)',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t2',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t_doesnt_exist',ID @@ -336,7 +339,7 @@ TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'/*comment*/ select 2',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u1 IDENTIFIED BY *****',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'GRANT ALL ON sa_db TO u2 IDENTIFIED BY *****',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1 = PASSWORD(*****)',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD \n# comment\nFOR u1 = PASSWORD(*****)',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1=',ID TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u3 IDENTIFIED BY *****',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop user u1, u2, u3',0 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/plugins/r/thread_pool_server_audit.result mariadb-10.1-10.1.30/mysql-test/suite/plugins/r/thread_pool_server_audit.result --- mariadb-10.1-10.1.25/mysql-test/suite/plugins/r/thread_pool_server_audit.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/plugins/r/thread_pool_server_audit.result 2017-12-21 15:48:47.000000000 +0000 @@ -47,6 +47,7 @@ set global server_audit_events='connect,query'; select 1, 2, +# comment 3; 1 2 3 1 2 3 @@ -161,7 +162,9 @@ 2 CREATE USER u1 IDENTIFIED BY 'pwd-123'; GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; -SET PASSWORD FOR u1 = PASSWORD('pwd 098'); +SET PASSWORD +# comment +FOR u1 = PASSWORD('pwd 098'); SET PASSWORD FOR u1=; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 CREATE USER u3 IDENTIFIED BY ''; @@ -253,7 +256,7 @@ TIME,HOSTNAME,root,localhost,ID,ID,RENAME,test,t1|test.renamed_t1, TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'alter table t1 rename renamed_t1',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_events=\'connect,query\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select 1, 2, 3',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select 1,\n2,\n# comment\n3',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t2 values (1), (2)',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t2',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t_doesnt_exist',ID @@ -336,7 +339,7 @@ TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'/*comment*/ select 2',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u1 IDENTIFIED BY *****',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'GRANT ALL ON sa_db TO u2 IDENTIFIED BY *****',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1 = PASSWORD(*****)',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD\n# comment\nFOR u1 = PASSWORD(*****)',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1=',ID TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u3 IDENTIFIED BY *****',0 TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop user u1, u2, u3',0 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/plugins/t/binlog-simple_plugin_check.test mariadb-10.1-10.1.30/mysql-test/suite/plugins/t/binlog-simple_plugin_check.test --- mariadb-10.1-10.1.25/mysql-test/suite/plugins/t/binlog-simple_plugin_check.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/plugins/t/binlog-simple_plugin_check.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,31 @@ +--source include/not_embedded.inc +--source include/have_binlog_format_statement.inc + +if (!$SIMPLE_PASSWORD_CHECK_SO) { + skip No SIMPLE_PASSWORD_CHECK plugin; +} + +INSTALL SONAME "simple_password_check"; +SELECT PLUGIN_NAME FROM INFORMATION_SCHEMA.PLUGINS +WHERE PLUGIN_NAME='simple_password_check'; + + +--echo # +--echo # MDEV-14031 Password policy causes replication failure +--echo # + +--disable_query_log +RESET MASTER; # get rid of previous tests binlog +--enable_query_log + +CREATE USER user1@localhost IDENTIFIED BY 'BsG9#9.cem#!85'; + +--error ER_NOT_VALID_PASSWORD +CREATE USER user2@localhost IDENTIFIED BY 'bsg9#d.cem#!85'; + +DROP USER user1@localhost; + +--let $binlog_file = LAST +source include/show_binlog_events.inc; + +UNINSTALL PLUGIN simple_password_check; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/plugins/t/server_audit.test mariadb-10.1-10.1.30/mysql-test/suite/plugins/t/server_audit.test --- mariadb-10.1-10.1.25/mysql-test/suite/plugins/t/server_audit.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/plugins/t/server_audit.test 2017-12-21 15:48:47.000000000 +0000 @@ -38,6 +38,7 @@ set global server_audit_events='connect,query'; select 1, 2, +# comment 3; insert into t2 values (1), (2); select * from t2; @@ -106,7 +107,9 @@ select * from t1; CREATE USER u1 IDENTIFIED BY 'pwd-123'; GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; -SET PASSWORD FOR u1 = PASSWORD('pwd 098'); +SET PASSWORD +# comment +FOR u1 = PASSWORD('pwd 098'); --error 1064 SET PASSWORD FOR u1=; CREATE USER u3 IDENTIFIED BY ''; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/plugins/t/thread_pool_server_audit.test mariadb-10.1-10.1.30/mysql-test/suite/plugins/t/thread_pool_server_audit.test --- mariadb-10.1-10.1.25/mysql-test/suite/plugins/t/thread_pool_server_audit.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/plugins/t/thread_pool_server_audit.test 2017-12-21 15:48:47.000000000 +0000 @@ -38,6 +38,7 @@ set global server_audit_events='connect,query'; select 1, 2, +# comment 3; insert into t2 values (1), (2); select * from t2; @@ -106,7 +107,9 @@ select * from t1; CREATE USER u1 IDENTIFIED BY 'pwd-123'; GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; -SET PASSWORD FOR u1 = PASSWORD('pwd 098'); +SET PASSWORD +# comment +FOR u1 = PASSWORD('pwd 098'); --error 1064 SET PASSWORD FOR u1=; CREATE USER u3 IDENTIFIED BY ''; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/roles/definer.result mariadb-10.1-10.1.30/mysql-test/suite/roles/definer.result --- mariadb-10.1-10.1.25/mysql-test/suite/roles/definer.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/roles/definer.result 2017-12-21 15:48:47.000000000 +0000 @@ -626,3 +626,117 @@ Grants for utest GRANT SELECT ON *.* TO 'utest' drop role utest; +# +# MDEV-13676: Field "create Procedure" is NULL, even if the the user +# has role which is the definer. (SHOW CREATE PROCEDURE) +# +create database rtest; +create role r1; +create role r2; +create role r3; +grant all privileges on rtest.* to r1; +create user user1; +grant r1 to user1; +grant r1 to r2; +grant r2 to user1; +grant r3 to user1; +set role r2; +use rtest; +CREATE DEFINER=current_role() PROCEDURE user1_proc() SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END;// +set role r2; +show create procedure user1_proc; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +user1_proc NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`r2` PROCEDURE `user1_proc`() + SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END latin1 latin1_swedish_ci latin1_swedish_ci +# +# Currently one can not use as definer any role except CURRENT_ROLE +# +CREATE DEFINER='r1' PROCEDURE user1_proc2() SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END;// +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +set role r1; +CREATE DEFINER='r1' PROCEDURE user1_proc2() SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END;// +show create procedure user1_proc2; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +user1_proc2 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`r1` PROCEDURE `user1_proc2`() + SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END latin1 latin1_swedish_ci latin1_swedish_ci +# +# Test to see if the user can still see the procedure code if the +# role that owns it is granted to him indirectly. +# +set role r2; +show create procedure user1_proc2; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +user1_proc2 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`r1` PROCEDURE `user1_proc2`() + SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END latin1 latin1_swedish_ci latin1_swedish_ci +# +# One should not be able to see the procedure code if the role that owns +# the procedure is not set by the user or is not in the subgraph of the +# currently active role. +# +set role r3; +show create procedure user1_proc2; +ERROR 42000: PROCEDURE user1_proc2 does not exist +use rtest; +# +# Try a few edge cases, with usernames identical to role name; +# +create user user_like_role; +create user foo; +create role user_like_role; +grant select on rtest.* to user_like_role; +grant select on rtest.* to foo; +grant select on rtest.* to user_like_role@'%'; +grant user_like_role to foo; +# +# Here we have a procedure that is owned by user_like_role USER +# We don't want user_like_role ROLE to have access to its code. +# +CREATE DEFINER=`user_like_role`@`%` PROCEDURE sensitive_proc() SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END;// +use rtest; +show create procedure sensitive_proc; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +sensitive_proc NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`user_like_role`@`%` PROCEDURE `sensitive_proc`() + SQL SECURITY INVOKER +BEGIN +SELECT NOW(), VERSION(); +END latin1 latin1_swedish_ci latin1_swedish_ci +set role user_like_role; +use rtest; +# +# Foo has the set rolename identical to the procedure's definer's username. +# Foo should not have access to this procedure. +# +show create procedure sensitive_proc; +ERROR 42000: PROCEDURE sensitive_proc does not exist +drop role r1; +drop role r2; +drop role r3; +drop role user_like_role; +drop user user1; +drop user foo; +drop user user_like_role; +drop procedure user1_proc; +drop procedure user1_proc2; +drop procedure sensitive_proc; +drop database rtest; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/roles/definer.test mariadb-10.1-10.1.30/mysql-test/suite/roles/definer.test --- mariadb-10.1-10.1.25/mysql-test/suite/roles/definer.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/roles/definer.test 2017-12-21 15:48:47.000000000 +0000 @@ -332,3 +332,125 @@ show grants for utest; drop role utest; +--echo # +--echo # MDEV-13676: Field "create Procedure" is NULL, even if the the user +--echo # has role which is the definer. (SHOW CREATE PROCEDURE) +--echo # + +create database rtest; +create role r1; +create role r2; +create role r3; +grant all privileges on rtest.* to r1; + +create user user1; +grant r1 to user1; +grant r1 to r2; +grant r2 to user1; +grant r3 to user1; + +connect (user1, localhost,user1,,,,,); +set role r2; +use rtest; + +DELIMITER //; +CREATE DEFINER=current_role() PROCEDURE user1_proc() SQL SECURITY INVOKER + BEGIN + SELECT NOW(), VERSION(); + END;// +DELIMITER ;// + +set role r2; +show create procedure user1_proc; + +--echo # +--echo # Currently one can not use as definer any role except CURRENT_ROLE +--echo # +DELIMITER //; +--error ER_SPECIFIC_ACCESS_DENIED_ERROR +CREATE DEFINER='r1' PROCEDURE user1_proc2() SQL SECURITY INVOKER + BEGIN + SELECT NOW(), VERSION(); + END;// +DELIMITER ;// + +set role r1; +DELIMITER //; +CREATE DEFINER='r1' PROCEDURE user1_proc2() SQL SECURITY INVOKER + BEGIN + SELECT NOW(), VERSION(); + END;// +DELIMITER ;// + +show create procedure user1_proc2; +--echo # +--echo # Test to see if the user can still see the procedure code if the +--echo # role that owns it is granted to him indirectly. +--echo # +set role r2; +show create procedure user1_proc2; + +--echo # +--echo # One should not be able to see the procedure code if the role that owns +--echo # the procedure is not set by the user or is not in the subgraph of the +--echo # currently active role. +--echo # +set role r3; +--error ER_SP_DOES_NOT_EXIST +show create procedure user1_proc2; + +connection default; + +use rtest; + +--echo # +--echo # Try a few edge cases, with usernames identical to role name; +--echo # + +create user user_like_role; +create user foo; +create role user_like_role; +grant select on rtest.* to user_like_role; +grant select on rtest.* to foo; +grant select on rtest.* to user_like_role@'%'; + +grant user_like_role to foo; + +--echo # +--echo # Here we have a procedure that is owned by user_like_role USER +--echo # We don't want user_like_role ROLE to have access to its code. +--echo # +DELIMITER //; +CREATE DEFINER=`user_like_role`@`%` PROCEDURE sensitive_proc() SQL SECURITY INVOKER + BEGIN + SELECT NOW(), VERSION(); + END;// +DELIMITER ;// + +connect (user_like_role, localhost, user_like_role,,,,,); +use rtest; +show create procedure sensitive_proc; + +connect (foo, localhost, foo,,,,,); +set role user_like_role; +use rtest; + +--echo # +--echo # Foo has the set rolename identical to the procedure's definer's username. +--echo # Foo should not have access to this procedure. +--echo # +--error ER_SP_DOES_NOT_EXIST +show create procedure sensitive_proc; + +connection default; +drop role r1; +drop role r2; +drop role r3; +drop role user_like_role; +drop user user1; +drop user foo; +drop user user_like_role; +drop procedure user1_proc; +drop procedure user1_proc2; +drop procedure sensitive_proc; +drop database rtest; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/roles/flush_roles-12366.result mariadb-10.1-10.1.30/mysql-test/suite/roles/flush_roles-12366.result --- mariadb-10.1-10.1.25/mysql-test/suite/roles/flush_roles-12366.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/roles/flush_roles-12366.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,539 @@ +# +# MDEV-12366: FLUSH PRIVILEGES can break hierarchy of roles +# +# This testcase contains a user, who is granted a master role +# operations_cluster. operations_cluster is granted 8 different roles +# who in turn each have 4 different roles granted to them. +# +# Only the leaf roles contain privileges to access databases. +# Make sure the user has access to all databases if the master role +# is granted to him. +# +CREATE USER u; +CREATE ROLE operations_cluster; +GRANT operations_cluster TO u; +CREATE DATABASE bob_live_sg; +CREATE TABLE bob_live_sg.a (i INT(10)); +CREATE TABLE bob_live_sg.b (i INT(10)); +CREATE TABLE bob_live_sg.c (i INT(10)); +CREATE TABLE bob_live_sg.d (i INT(10)); +CREATE DATABASE oms_live_sg; +CREATE TABLE oms_live_sg.a (i INT(10)); +CREATE TABLE oms_live_sg.b (i INT(10)); +CREATE TABLE oms_live_sg.c (i INT(10)); +CREATE TABLE oms_live_sg.d (i INT(10)); +CREATE DATABASE bob_live_ph; +CREATE TABLE bob_live_ph.a (i INT(10)); +CREATE TABLE bob_live_ph.b (i INT(10)); +CREATE TABLE bob_live_ph.c (i INT(10)); +CREATE TABLE bob_live_ph.d (i INT(10)); +CREATE DATABASE oms_live_ph; +CREATE TABLE oms_live_ph.a (i INT(10)); +CREATE TABLE oms_live_ph.b (i INT(10)); +CREATE TABLE oms_live_ph.c (i INT(10)); +CREATE TABLE oms_live_ph.d (i INT(10)); +CREATE DATABASE bob_live_id; +CREATE TABLE bob_live_id.a (i INT(10)); +CREATE TABLE bob_live_id.b (i INT(10)); +CREATE TABLE bob_live_id.c (i INT(10)); +CREATE TABLE bob_live_id.d (i INT(10)); +CREATE DATABASE oms_live_id; +CREATE TABLE oms_live_id.a (i INT(10)); +CREATE TABLE oms_live_id.b (i INT(10)); +CREATE TABLE oms_live_id.c (i INT(10)); +CREATE TABLE oms_live_id.d (i INT(10)); +CREATE DATABASE bob_live_hk; +CREATE TABLE bob_live_hk.a (i INT(10)); +CREATE TABLE bob_live_hk.b (i INT(10)); +CREATE TABLE bob_live_hk.c (i INT(10)); +CREATE TABLE bob_live_hk.d (i INT(10)); +CREATE DATABASE oms_live_hk; +CREATE TABLE oms_live_hk.a (i INT(10)); +CREATE TABLE oms_live_hk.b (i INT(10)); +CREATE TABLE oms_live_hk.c (i INT(10)); +CREATE TABLE oms_live_hk.d (i INT(10)); +CREATE DATABASE bob_live_vn; +CREATE TABLE bob_live_vn.a (i INT(10)); +CREATE TABLE bob_live_vn.b (i INT(10)); +CREATE TABLE bob_live_vn.c (i INT(10)); +CREATE TABLE bob_live_vn.d (i INT(10)); +CREATE DATABASE oms_live_vn; +CREATE TABLE oms_live_vn.a (i INT(10)); +CREATE TABLE oms_live_vn.b (i INT(10)); +CREATE TABLE oms_live_vn.c (i INT(10)); +CREATE TABLE oms_live_vn.d (i INT(10)); +CREATE DATABASE bob_live_tw; +CREATE TABLE bob_live_tw.a (i INT(10)); +CREATE TABLE bob_live_tw.b (i INT(10)); +CREATE TABLE bob_live_tw.c (i INT(10)); +CREATE TABLE bob_live_tw.d (i INT(10)); +CREATE DATABASE oms_live_tw; +CREATE TABLE oms_live_tw.a (i INT(10)); +CREATE TABLE oms_live_tw.b (i INT(10)); +CREATE TABLE oms_live_tw.c (i INT(10)); +CREATE TABLE oms_live_tw.d (i INT(10)); +CREATE DATABASE bob_live_my; +CREATE TABLE bob_live_my.a (i INT(10)); +CREATE TABLE bob_live_my.b (i INT(10)); +CREATE TABLE bob_live_my.c (i INT(10)); +CREATE TABLE bob_live_my.d (i INT(10)); +CREATE DATABASE oms_live_my; +CREATE TABLE oms_live_my.a (i INT(10)); +CREATE TABLE oms_live_my.b (i INT(10)); +CREATE TABLE oms_live_my.c (i INT(10)); +CREATE TABLE oms_live_my.d (i INT(10)); +CREATE DATABASE bob_live_th; +CREATE TABLE bob_live_th.a (i INT(10)); +CREATE TABLE bob_live_th.b (i INT(10)); +CREATE TABLE bob_live_th.c (i INT(10)); +CREATE TABLE bob_live_th.d (i INT(10)); +CREATE DATABASE oms_live_th; +CREATE TABLE oms_live_th.a (i INT(10)); +CREATE TABLE oms_live_th.b (i INT(10)); +CREATE TABLE oms_live_th.c (i INT(10)); +CREATE TABLE oms_live_th.d (i INT(10)); +CREATE ROLE a_sg; +CREATE ROLE b_sg; +CREATE ROLE c_sg; +CREATE ROLE d_sg; +CREATE ROLE operations_sg; +GRANT a_sg TO operations_sg; +GRANT b_sg TO operations_sg; +GRANT c_sg TO operations_sg; +GRANT d_sg TO operations_sg; +GRANT SELECT ON bob_live_sg.a TO a_sg; +GRANT SELECT ON bob_live_sg.b TO b_sg; +GRANT SELECT ON bob_live_sg.c TO c_sg; +GRANT SELECT ON bob_live_sg.d TO d_sg; +GRANT SELECT ON oms_live_sg.a TO a_sg; +GRANT SELECT ON oms_live_sg.b TO b_sg; +GRANT SELECT ON oms_live_sg.c TO c_sg; +GRANT SELECT ON oms_live_sg.d TO d_sg; +CREATE ROLE a_ph; +CREATE ROLE b_ph; +CREATE ROLE c_ph; +CREATE ROLE d_ph; +CREATE ROLE operations_ph; +GRANT a_ph TO operations_ph; +GRANT b_ph TO operations_ph; +GRANT c_ph TO operations_ph; +GRANT d_ph TO operations_ph; +GRANT SELECT ON bob_live_ph.a TO a_ph; +GRANT SELECT ON bob_live_ph.b TO b_ph; +GRANT SELECT ON bob_live_ph.c TO c_ph; +GRANT SELECT ON bob_live_ph.d TO d_ph; +GRANT SELECT ON oms_live_ph.a TO a_ph; +GRANT SELECT ON oms_live_ph.b TO b_ph; +GRANT SELECT ON oms_live_ph.c TO c_ph; +GRANT SELECT ON oms_live_ph.d TO d_ph; +CREATE ROLE a_id; +CREATE ROLE b_id; +CREATE ROLE c_id; +CREATE ROLE d_id; +CREATE ROLE operations_id; +GRANT a_id TO operations_id; +GRANT b_id TO operations_id; +GRANT c_id TO operations_id; +GRANT d_id TO operations_id; +GRANT SELECT ON bob_live_id.a TO a_id; +GRANT SELECT ON bob_live_id.b TO b_id; +GRANT SELECT ON bob_live_id.c TO c_id; +GRANT SELECT ON bob_live_id.d TO d_id; +GRANT SELECT ON oms_live_id.a TO a_id; +GRANT SELECT ON oms_live_id.b TO b_id; +GRANT SELECT ON oms_live_id.c TO c_id; +GRANT SELECT ON oms_live_id.d TO d_id; +CREATE ROLE a_hk; +CREATE ROLE b_hk; +CREATE ROLE c_hk; +CREATE ROLE d_hk; +CREATE ROLE operations_hk; +GRANT a_hk TO operations_hk; +GRANT b_hk TO operations_hk; +GRANT c_hk TO operations_hk; +GRANT d_hk TO operations_hk; +GRANT SELECT ON bob_live_hk.a TO a_hk; +GRANT SELECT ON bob_live_hk.b TO b_hk; +GRANT SELECT ON bob_live_hk.c TO c_hk; +GRANT SELECT ON bob_live_hk.d TO d_hk; +GRANT SELECT ON oms_live_hk.a TO a_hk; +GRANT SELECT ON oms_live_hk.b TO b_hk; +GRANT SELECT ON oms_live_hk.c TO c_hk; +GRANT SELECT ON oms_live_hk.d TO d_hk; +CREATE ROLE a_vn; +CREATE ROLE b_vn; +CREATE ROLE c_vn; +CREATE ROLE d_vn; +CREATE ROLE operations_vn; +GRANT a_vn TO operations_vn; +GRANT b_vn TO operations_vn; +GRANT c_vn TO operations_vn; +GRANT d_vn TO operations_vn; +GRANT SELECT ON bob_live_vn.a TO a_vn; +GRANT SELECT ON bob_live_vn.b TO b_vn; +GRANT SELECT ON bob_live_vn.c TO c_vn; +GRANT SELECT ON bob_live_vn.d TO d_vn; +GRANT SELECT ON oms_live_vn.a TO a_vn; +GRANT SELECT ON oms_live_vn.b TO b_vn; +GRANT SELECT ON oms_live_vn.c TO c_vn; +GRANT SELECT ON oms_live_vn.d TO d_vn; +CREATE ROLE a_tw; +CREATE ROLE b_tw; +CREATE ROLE c_tw; +CREATE ROLE d_tw; +CREATE ROLE operations_tw; +GRANT a_tw TO operations_tw; +GRANT b_tw TO operations_tw; +GRANT c_tw TO operations_tw; +GRANT d_tw TO operations_tw; +GRANT SELECT ON bob_live_tw.a TO a_tw; +GRANT SELECT ON bob_live_tw.b TO b_tw; +GRANT SELECT ON bob_live_tw.c TO c_tw; +GRANT SELECT ON bob_live_tw.d TO d_tw; +GRANT SELECT ON oms_live_tw.a TO a_tw; +GRANT SELECT ON oms_live_tw.b TO b_tw; +GRANT SELECT ON oms_live_tw.c TO c_tw; +GRANT SELECT ON oms_live_tw.d TO d_tw; +CREATE ROLE a_my; +CREATE ROLE b_my; +CREATE ROLE c_my; +CREATE ROLE d_my; +CREATE ROLE operations_my; +GRANT a_my TO operations_my; +GRANT b_my TO operations_my; +GRANT c_my TO operations_my; +GRANT d_my TO operations_my; +GRANT SELECT ON bob_live_my.a TO a_my; +GRANT SELECT ON bob_live_my.b TO b_my; +GRANT SELECT ON bob_live_my.c TO c_my; +GRANT SELECT ON bob_live_my.d TO d_my; +GRANT SELECT ON oms_live_my.a TO a_my; +GRANT SELECT ON oms_live_my.b TO b_my; +GRANT SELECT ON oms_live_my.c TO c_my; +GRANT SELECT ON oms_live_my.d TO d_my; +CREATE ROLE a_th; +CREATE ROLE b_th; +CREATE ROLE c_th; +CREATE ROLE d_th; +CREATE ROLE operations_th; +GRANT a_th TO operations_th; +GRANT b_th TO operations_th; +GRANT c_th TO operations_th; +GRANT d_th TO operations_th; +GRANT SELECT ON bob_live_th.a TO a_th; +GRANT SELECT ON bob_live_th.b TO b_th; +GRANT SELECT ON bob_live_th.c TO c_th; +GRANT SELECT ON bob_live_th.d TO d_th; +GRANT SELECT ON oms_live_th.a TO a_th; +GRANT SELECT ON oms_live_th.b TO b_th; +GRANT SELECT ON oms_live_th.c TO c_th; +GRANT SELECT ON oms_live_th.d TO d_th; +GRANT operations_sg TO operations_cluster; +GRANT operations_ph TO operations_cluster; +GRANT operations_id TO operations_cluster; +GRANT operations_hk TO operations_cluster; +GRANT operations_vn TO operations_cluster; +GRANT operations_tw TO operations_cluster; +GRANT operations_my TO operations_cluster; +GRANT operations_th TO operations_cluster; +SHOW DATABASES; +Database +information_schema +test +SET ROLE operations_cluster; +SHOW DATABASES; +Database +bob_live_hk +bob_live_id +bob_live_my +bob_live_ph +bob_live_sg +bob_live_th +bob_live_tw +bob_live_vn +information_schema +oms_live_hk +oms_live_id +oms_live_my +oms_live_ph +oms_live_sg +oms_live_th +oms_live_tw +oms_live_vn +test +SELECT COUNT(1) FROM oms_live_sg.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_sg.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_sg.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_sg.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.d; +COUNT(1) +0 +FLUSH PRIVILEGES; +SHOW DATABASES; +Database +information_schema +test +SET ROLE operations_cluster; +SHOW DATABASES; +Database +bob_live_hk +bob_live_id +bob_live_my +bob_live_ph +bob_live_sg +bob_live_th +bob_live_tw +bob_live_vn +information_schema +oms_live_hk +oms_live_id +oms_live_my +oms_live_ph +oms_live_sg +oms_live_th +oms_live_tw +oms_live_vn +test +SELECT COUNT(1) FROM oms_live_sg.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_sg.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_sg.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_sg.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_ph.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_id.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_hk.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_vn.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_tw.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_my.d; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.a; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.b; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.c; +COUNT(1) +0 +SELECT COUNT(1) FROM oms_live_th.d; +COUNT(1) +0 +DROP DATABASE bob_live_sg; +DROP DATABASE oms_live_sg; +DROP DATABASE bob_live_ph; +DROP DATABASE oms_live_ph; +DROP DATABASE bob_live_id; +DROP DATABASE oms_live_id; +DROP DATABASE bob_live_hk; +DROP DATABASE oms_live_hk; +DROP DATABASE bob_live_vn; +DROP DATABASE oms_live_vn; +DROP DATABASE bob_live_tw; +DROP DATABASE oms_live_tw; +DROP DATABASE bob_live_my; +DROP DATABASE oms_live_my; +DROP DATABASE bob_live_th; +DROP DATABASE oms_live_th; +DROP ROLE operations_sg; +DROP ROLE a_sg; +DROP ROLE b_sg; +DROP ROLE c_sg; +DROP ROLE d_sg; +DROP ROLE operations_ph; +DROP ROLE a_ph; +DROP ROLE b_ph; +DROP ROLE c_ph; +DROP ROLE d_ph; +DROP ROLE operations_id; +DROP ROLE a_id; +DROP ROLE b_id; +DROP ROLE c_id; +DROP ROLE d_id; +DROP ROLE operations_hk; +DROP ROLE a_hk; +DROP ROLE b_hk; +DROP ROLE c_hk; +DROP ROLE d_hk; +DROP ROLE operations_vn; +DROP ROLE a_vn; +DROP ROLE b_vn; +DROP ROLE c_vn; +DROP ROLE d_vn; +DROP ROLE operations_tw; +DROP ROLE a_tw; +DROP ROLE b_tw; +DROP ROLE c_tw; +DROP ROLE d_tw; +DROP ROLE operations_my; +DROP ROLE a_my; +DROP ROLE b_my; +DROP ROLE c_my; +DROP ROLE d_my; +DROP ROLE operations_th; +DROP ROLE a_th; +DROP ROLE b_th; +DROP ROLE c_th; +DROP ROLE d_th; +DROP USER u; +DROP ROLE operations_cluster; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/roles/flush_roles-12366.test mariadb-10.1-10.1.30/mysql-test/suite/roles/flush_roles-12366.test --- mariadb-10.1-10.1.25/mysql-test/suite/roles/flush_roles-12366.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/roles/flush_roles-12366.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,379 @@ +--source include/not_embedded.inc +--echo # +--echo # MDEV-12366: FLUSH PRIVILEGES can break hierarchy of roles +--echo # +--echo # This testcase contains a user, who is granted a master role +--echo # operations_cluster. operations_cluster is granted 8 different roles +--echo # who in turn each have 4 different roles granted to them. +--echo # +--echo # Only the leaf roles contain privileges to access databases. +--echo # Make sure the user has access to all databases if the master role +--echo # is granted to him. +--echo # +CREATE USER u; +CREATE ROLE operations_cluster; +GRANT operations_cluster TO u; +CREATE DATABASE bob_live_sg; +CREATE TABLE bob_live_sg.a (i INT(10)); +CREATE TABLE bob_live_sg.b (i INT(10)); +CREATE TABLE bob_live_sg.c (i INT(10)); +CREATE TABLE bob_live_sg.d (i INT(10)); +CREATE DATABASE oms_live_sg; +CREATE TABLE oms_live_sg.a (i INT(10)); +CREATE TABLE oms_live_sg.b (i INT(10)); +CREATE TABLE oms_live_sg.c (i INT(10)); +CREATE TABLE oms_live_sg.d (i INT(10)); +CREATE DATABASE bob_live_ph; +CREATE TABLE bob_live_ph.a (i INT(10)); +CREATE TABLE bob_live_ph.b (i INT(10)); +CREATE TABLE bob_live_ph.c (i INT(10)); +CREATE TABLE bob_live_ph.d (i INT(10)); +CREATE DATABASE oms_live_ph; +CREATE TABLE oms_live_ph.a (i INT(10)); +CREATE TABLE oms_live_ph.b (i INT(10)); +CREATE TABLE oms_live_ph.c (i INT(10)); +CREATE TABLE oms_live_ph.d (i INT(10)); +CREATE DATABASE bob_live_id; +CREATE TABLE bob_live_id.a (i INT(10)); +CREATE TABLE bob_live_id.b (i INT(10)); +CREATE TABLE bob_live_id.c (i INT(10)); +CREATE TABLE bob_live_id.d (i INT(10)); +CREATE DATABASE oms_live_id; +CREATE TABLE oms_live_id.a (i INT(10)); +CREATE TABLE oms_live_id.b (i INT(10)); +CREATE TABLE oms_live_id.c (i INT(10)); +CREATE TABLE oms_live_id.d (i INT(10)); +CREATE DATABASE bob_live_hk; +CREATE TABLE bob_live_hk.a (i INT(10)); +CREATE TABLE bob_live_hk.b (i INT(10)); +CREATE TABLE bob_live_hk.c (i INT(10)); +CREATE TABLE bob_live_hk.d (i INT(10)); +CREATE DATABASE oms_live_hk; +CREATE TABLE oms_live_hk.a (i INT(10)); +CREATE TABLE oms_live_hk.b (i INT(10)); +CREATE TABLE oms_live_hk.c (i INT(10)); +CREATE TABLE oms_live_hk.d (i INT(10)); +CREATE DATABASE bob_live_vn; +CREATE TABLE bob_live_vn.a (i INT(10)); +CREATE TABLE bob_live_vn.b (i INT(10)); +CREATE TABLE bob_live_vn.c (i INT(10)); +CREATE TABLE bob_live_vn.d (i INT(10)); +CREATE DATABASE oms_live_vn; +CREATE TABLE oms_live_vn.a (i INT(10)); +CREATE TABLE oms_live_vn.b (i INT(10)); +CREATE TABLE oms_live_vn.c (i INT(10)); +CREATE TABLE oms_live_vn.d (i INT(10)); +CREATE DATABASE bob_live_tw; +CREATE TABLE bob_live_tw.a (i INT(10)); +CREATE TABLE bob_live_tw.b (i INT(10)); +CREATE TABLE bob_live_tw.c (i INT(10)); +CREATE TABLE bob_live_tw.d (i INT(10)); +CREATE DATABASE oms_live_tw; +CREATE TABLE oms_live_tw.a (i INT(10)); +CREATE TABLE oms_live_tw.b (i INT(10)); +CREATE TABLE oms_live_tw.c (i INT(10)); +CREATE TABLE oms_live_tw.d (i INT(10)); +CREATE DATABASE bob_live_my; +CREATE TABLE bob_live_my.a (i INT(10)); +CREATE TABLE bob_live_my.b (i INT(10)); +CREATE TABLE bob_live_my.c (i INT(10)); +CREATE TABLE bob_live_my.d (i INT(10)); +CREATE DATABASE oms_live_my; +CREATE TABLE oms_live_my.a (i INT(10)); +CREATE TABLE oms_live_my.b (i INT(10)); +CREATE TABLE oms_live_my.c (i INT(10)); +CREATE TABLE oms_live_my.d (i INT(10)); +CREATE DATABASE bob_live_th; +CREATE TABLE bob_live_th.a (i INT(10)); +CREATE TABLE bob_live_th.b (i INT(10)); +CREATE TABLE bob_live_th.c (i INT(10)); +CREATE TABLE bob_live_th.d (i INT(10)); +CREATE DATABASE oms_live_th; +CREATE TABLE oms_live_th.a (i INT(10)); +CREATE TABLE oms_live_th.b (i INT(10)); +CREATE TABLE oms_live_th.c (i INT(10)); +CREATE TABLE oms_live_th.d (i INT(10)); +CREATE ROLE a_sg; +CREATE ROLE b_sg; +CREATE ROLE c_sg; +CREATE ROLE d_sg; +CREATE ROLE operations_sg; +GRANT a_sg TO operations_sg; +GRANT b_sg TO operations_sg; +GRANT c_sg TO operations_sg; +GRANT d_sg TO operations_sg; +GRANT SELECT ON bob_live_sg.a TO a_sg; +GRANT SELECT ON bob_live_sg.b TO b_sg; +GRANT SELECT ON bob_live_sg.c TO c_sg; +GRANT SELECT ON bob_live_sg.d TO d_sg; +GRANT SELECT ON oms_live_sg.a TO a_sg; +GRANT SELECT ON oms_live_sg.b TO b_sg; +GRANT SELECT ON oms_live_sg.c TO c_sg; +GRANT SELECT ON oms_live_sg.d TO d_sg; +CREATE ROLE a_ph; +CREATE ROLE b_ph; +CREATE ROLE c_ph; +CREATE ROLE d_ph; +CREATE ROLE operations_ph; +GRANT a_ph TO operations_ph; +GRANT b_ph TO operations_ph; +GRANT c_ph TO operations_ph; +GRANT d_ph TO operations_ph; +GRANT SELECT ON bob_live_ph.a TO a_ph; +GRANT SELECT ON bob_live_ph.b TO b_ph; +GRANT SELECT ON bob_live_ph.c TO c_ph; +GRANT SELECT ON bob_live_ph.d TO d_ph; +GRANT SELECT ON oms_live_ph.a TO a_ph; +GRANT SELECT ON oms_live_ph.b TO b_ph; +GRANT SELECT ON oms_live_ph.c TO c_ph; +GRANT SELECT ON oms_live_ph.d TO d_ph; +CREATE ROLE a_id; +CREATE ROLE b_id; +CREATE ROLE c_id; +CREATE ROLE d_id; +CREATE ROLE operations_id; +GRANT a_id TO operations_id; +GRANT b_id TO operations_id; +GRANT c_id TO operations_id; +GRANT d_id TO operations_id; +GRANT SELECT ON bob_live_id.a TO a_id; +GRANT SELECT ON bob_live_id.b TO b_id; +GRANT SELECT ON bob_live_id.c TO c_id; +GRANT SELECT ON bob_live_id.d TO d_id; +GRANT SELECT ON oms_live_id.a TO a_id; +GRANT SELECT ON oms_live_id.b TO b_id; +GRANT SELECT ON oms_live_id.c TO c_id; +GRANT SELECT ON oms_live_id.d TO d_id; +CREATE ROLE a_hk; +CREATE ROLE b_hk; +CREATE ROLE c_hk; +CREATE ROLE d_hk; +CREATE ROLE operations_hk; +GRANT a_hk TO operations_hk; +GRANT b_hk TO operations_hk; +GRANT c_hk TO operations_hk; +GRANT d_hk TO operations_hk; +GRANT SELECT ON bob_live_hk.a TO a_hk; +GRANT SELECT ON bob_live_hk.b TO b_hk; +GRANT SELECT ON bob_live_hk.c TO c_hk; +GRANT SELECT ON bob_live_hk.d TO d_hk; +GRANT SELECT ON oms_live_hk.a TO a_hk; +GRANT SELECT ON oms_live_hk.b TO b_hk; +GRANT SELECT ON oms_live_hk.c TO c_hk; +GRANT SELECT ON oms_live_hk.d TO d_hk; +CREATE ROLE a_vn; +CREATE ROLE b_vn; +CREATE ROLE c_vn; +CREATE ROLE d_vn; +CREATE ROLE operations_vn; +GRANT a_vn TO operations_vn; +GRANT b_vn TO operations_vn; +GRANT c_vn TO operations_vn; +GRANT d_vn TO operations_vn; +GRANT SELECT ON bob_live_vn.a TO a_vn; +GRANT SELECT ON bob_live_vn.b TO b_vn; +GRANT SELECT ON bob_live_vn.c TO c_vn; +GRANT SELECT ON bob_live_vn.d TO d_vn; +GRANT SELECT ON oms_live_vn.a TO a_vn; +GRANT SELECT ON oms_live_vn.b TO b_vn; +GRANT SELECT ON oms_live_vn.c TO c_vn; +GRANT SELECT ON oms_live_vn.d TO d_vn; +CREATE ROLE a_tw; +CREATE ROLE b_tw; +CREATE ROLE c_tw; +CREATE ROLE d_tw; +CREATE ROLE operations_tw; +GRANT a_tw TO operations_tw; +GRANT b_tw TO operations_tw; +GRANT c_tw TO operations_tw; +GRANT d_tw TO operations_tw; +GRANT SELECT ON bob_live_tw.a TO a_tw; +GRANT SELECT ON bob_live_tw.b TO b_tw; +GRANT SELECT ON bob_live_tw.c TO c_tw; +GRANT SELECT ON bob_live_tw.d TO d_tw; +GRANT SELECT ON oms_live_tw.a TO a_tw; +GRANT SELECT ON oms_live_tw.b TO b_tw; +GRANT SELECT ON oms_live_tw.c TO c_tw; +GRANT SELECT ON oms_live_tw.d TO d_tw; +CREATE ROLE a_my; +CREATE ROLE b_my; +CREATE ROLE c_my; +CREATE ROLE d_my; +CREATE ROLE operations_my; +GRANT a_my TO operations_my; +GRANT b_my TO operations_my; +GRANT c_my TO operations_my; +GRANT d_my TO operations_my; +GRANT SELECT ON bob_live_my.a TO a_my; +GRANT SELECT ON bob_live_my.b TO b_my; +GRANT SELECT ON bob_live_my.c TO c_my; +GRANT SELECT ON bob_live_my.d TO d_my; +GRANT SELECT ON oms_live_my.a TO a_my; +GRANT SELECT ON oms_live_my.b TO b_my; +GRANT SELECT ON oms_live_my.c TO c_my; +GRANT SELECT ON oms_live_my.d TO d_my; +CREATE ROLE a_th; +CREATE ROLE b_th; +CREATE ROLE c_th; +CREATE ROLE d_th; +CREATE ROLE operations_th; +GRANT a_th TO operations_th; +GRANT b_th TO operations_th; +GRANT c_th TO operations_th; +GRANT d_th TO operations_th; +GRANT SELECT ON bob_live_th.a TO a_th; +GRANT SELECT ON bob_live_th.b TO b_th; +GRANT SELECT ON bob_live_th.c TO c_th; +GRANT SELECT ON bob_live_th.d TO d_th; +GRANT SELECT ON oms_live_th.a TO a_th; +GRANT SELECT ON oms_live_th.b TO b_th; +GRANT SELECT ON oms_live_th.c TO c_th; +GRANT SELECT ON oms_live_th.d TO d_th; +GRANT operations_sg TO operations_cluster; +GRANT operations_ph TO operations_cluster; +GRANT operations_id TO operations_cluster; +GRANT operations_hk TO operations_cluster; +GRANT operations_vn TO operations_cluster; +GRANT operations_tw TO operations_cluster; +GRANT operations_my TO operations_cluster; +GRANT operations_th TO operations_cluster; + +connect(con1,localhost,u,,); +SHOW DATABASES; +SET ROLE operations_cluster; +SHOW DATABASES; +SELECT COUNT(1) FROM oms_live_sg.a; +SELECT COUNT(1) FROM oms_live_sg.b; +SELECT COUNT(1) FROM oms_live_sg.c; +SELECT COUNT(1) FROM oms_live_sg.d; +SELECT COUNT(1) FROM oms_live_ph.a; +SELECT COUNT(1) FROM oms_live_ph.b; +SELECT COUNT(1) FROM oms_live_ph.c; +SELECT COUNT(1) FROM oms_live_ph.d; +SELECT COUNT(1) FROM oms_live_id.a; +SELECT COUNT(1) FROM oms_live_id.b; +SELECT COUNT(1) FROM oms_live_id.c; +SELECT COUNT(1) FROM oms_live_id.d; +SELECT COUNT(1) FROM oms_live_hk.a; +SELECT COUNT(1) FROM oms_live_hk.b; +SELECT COUNT(1) FROM oms_live_hk.c; +SELECT COUNT(1) FROM oms_live_hk.d; +SELECT COUNT(1) FROM oms_live_vn.a; +SELECT COUNT(1) FROM oms_live_vn.b; +SELECT COUNT(1) FROM oms_live_vn.c; +SELECT COUNT(1) FROM oms_live_vn.d; +SELECT COUNT(1) FROM oms_live_tw.a; +SELECT COUNT(1) FROM oms_live_tw.b; +SELECT COUNT(1) FROM oms_live_tw.c; +SELECT COUNT(1) FROM oms_live_tw.d; +SELECT COUNT(1) FROM oms_live_my.a; +SELECT COUNT(1) FROM oms_live_my.b; +SELECT COUNT(1) FROM oms_live_my.c; +SELECT COUNT(1) FROM oms_live_my.d; +SELECT COUNT(1) FROM oms_live_th.a; +SELECT COUNT(1) FROM oms_live_th.b; +SELECT COUNT(1) FROM oms_live_th.c; +SELECT COUNT(1) FROM oms_live_th.d; + + +connect(con2,localhost,root,,); +FLUSH PRIVILEGES; + +connect(con3,localhost,u,,); +SHOW DATABASES; +SET ROLE operations_cluster; +SHOW DATABASES; +SELECT COUNT(1) FROM oms_live_sg.a; +SELECT COUNT(1) FROM oms_live_sg.b; +SELECT COUNT(1) FROM oms_live_sg.c; +SELECT COUNT(1) FROM oms_live_sg.d; +SELECT COUNT(1) FROM oms_live_ph.a; +SELECT COUNT(1) FROM oms_live_ph.b; +SELECT COUNT(1) FROM oms_live_ph.c; +SELECT COUNT(1) FROM oms_live_ph.d; +SELECT COUNT(1) FROM oms_live_id.a; +SELECT COUNT(1) FROM oms_live_id.b; +SELECT COUNT(1) FROM oms_live_id.c; +SELECT COUNT(1) FROM oms_live_id.d; +SELECT COUNT(1) FROM oms_live_hk.a; +SELECT COUNT(1) FROM oms_live_hk.b; +SELECT COUNT(1) FROM oms_live_hk.c; +SELECT COUNT(1) FROM oms_live_hk.d; +SELECT COUNT(1) FROM oms_live_vn.a; +SELECT COUNT(1) FROM oms_live_vn.b; +SELECT COUNT(1) FROM oms_live_vn.c; +SELECT COUNT(1) FROM oms_live_vn.d; +SELECT COUNT(1) FROM oms_live_tw.a; +SELECT COUNT(1) FROM oms_live_tw.b; +SELECT COUNT(1) FROM oms_live_tw.c; +SELECT COUNT(1) FROM oms_live_tw.d; +SELECT COUNT(1) FROM oms_live_my.a; +SELECT COUNT(1) FROM oms_live_my.b; +SELECT COUNT(1) FROM oms_live_my.c; +SELECT COUNT(1) FROM oms_live_my.d; +SELECT COUNT(1) FROM oms_live_th.a; +SELECT COUNT(1) FROM oms_live_th.b; +SELECT COUNT(1) FROM oms_live_th.c; +SELECT COUNT(1) FROM oms_live_th.d; + + +connect(con4,localhost,root,,); + +DROP DATABASE bob_live_sg; +DROP DATABASE oms_live_sg; +DROP DATABASE bob_live_ph; +DROP DATABASE oms_live_ph; +DROP DATABASE bob_live_id; +DROP DATABASE oms_live_id; +DROP DATABASE bob_live_hk; +DROP DATABASE oms_live_hk; +DROP DATABASE bob_live_vn; +DROP DATABASE oms_live_vn; +DROP DATABASE bob_live_tw; +DROP DATABASE oms_live_tw; +DROP DATABASE bob_live_my; +DROP DATABASE oms_live_my; +DROP DATABASE bob_live_th; +DROP DATABASE oms_live_th; +DROP ROLE operations_sg; +DROP ROLE a_sg; +DROP ROLE b_sg; +DROP ROLE c_sg; +DROP ROLE d_sg; +DROP ROLE operations_ph; +DROP ROLE a_ph; +DROP ROLE b_ph; +DROP ROLE c_ph; +DROP ROLE d_ph; +DROP ROLE operations_id; +DROP ROLE a_id; +DROP ROLE b_id; +DROP ROLE c_id; +DROP ROLE d_id; +DROP ROLE operations_hk; +DROP ROLE a_hk; +DROP ROLE b_hk; +DROP ROLE c_hk; +DROP ROLE d_hk; +DROP ROLE operations_vn; +DROP ROLE a_vn; +DROP ROLE b_vn; +DROP ROLE c_vn; +DROP ROLE d_vn; +DROP ROLE operations_tw; +DROP ROLE a_tw; +DROP ROLE b_tw; +DROP ROLE c_tw; +DROP ROLE d_tw; +DROP ROLE operations_my; +DROP ROLE a_my; +DROP ROLE b_my; +DROP ROLE c_my; +DROP ROLE d_my; +DROP ROLE operations_th; +DROP ROLE a_th; +DROP ROLE b_th; +DROP ROLE c_th; +DROP ROLE d_th; +DROP USER u; +DROP ROLE operations_cluster; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test mariadb-10.1-10.1.30/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test --- mariadb-10.1-10.1.25/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ ---source include/master-slave.inc --source include/have_binlog_format_mixed.inc +--source include/master-slave.inc --enable_connect_log diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/roles/set_role-13655.result mariadb-10.1-10.1.30/mysql-test/suite/roles/set_role-13655.result --- mariadb-10.1-10.1.25/mysql-test/suite/roles/set_role-13655.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/roles/set_role-13655.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,50 @@ +# +# MDEV-13655: SET ROLE does not properly grant privileges. +# +# We must test that if aditional db privileges get granted to a role +# which previously inherited privileges from another granted role +# keep the internal memory structures intact. +# +create role simple; +# +# First we create an entry with privileges for databases for the simple role. +# +grant select, insert, update, delete, lock tables, execute on t.* to simple; +create role admin; +# +# Now we grant the simple role to admin. This means that db privileges +# should propagate to admin. +# +grant simple to admin; +show grants for admin; +Grants for admin +GRANT simple TO 'admin' +GRANT USAGE ON *.* TO 'admin' +GRANT USAGE ON *.* TO 'simple' +GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE ON `t`.* TO 'simple' +# +# Finally, we give the admin all the available privileges for the db. +# +grant all on t.* to admin; +# +# Create a user to test out the new roles; +# +create user foo; +grant admin to foo; +create database t; +ERROR 42000: Access denied for user 'foo'@'%' to database 't' +set role admin; +show grants; +Grants for foo@% +GRANT admin TO 'foo'@'%' +GRANT USAGE ON *.* TO 'foo'@'%' +GRANT simple TO 'admin' +GRANT USAGE ON *.* TO 'admin' +GRANT ALL PRIVILEGES ON `t`.* TO 'admin' +GRANT USAGE ON *.* TO 'simple' +GRANT SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE ON `t`.* TO 'simple' +create database t; +drop database t; +drop role simple; +drop role admin; +drop user foo; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/roles/set_role-13655.test mariadb-10.1-10.1.30/mysql-test/suite/roles/set_role-13655.test --- mariadb-10.1-10.1.25/mysql-test/suite/roles/set_role-13655.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/roles/set_role-13655.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,49 @@ +source include/not_embedded.inc; + +--echo # +--echo # MDEV-13655: SET ROLE does not properly grant privileges. +--echo # +--echo # We must test that if aditional db privileges get granted to a role +--echo # which previously inherited privileges from another granted role +--echo # keep the internal memory structures intact. +--echo # + +create role simple; + +--echo # +--echo # First we create an entry with privileges for databases for the simple role. +--echo # +grant select, insert, update, delete, lock tables, execute on t.* to simple; +create role admin; + +--echo # +--echo # Now we grant the simple role to admin. This means that db privileges +--echo # should propagate to admin. +--echo # +grant simple to admin; +show grants for admin; + +--echo # +--echo # Finally, we give the admin all the available privileges for the db. +--echo # +grant all on t.* to admin; + +--echo # +--echo # Create a user to test out the new roles; +--echo # +create user foo; +grant admin to foo; + +connect (foo,localhost,foo,,,,,); +--error ER_DBACCESS_DENIED_ERROR +create database t; +set role admin; +show grants; +create database t; +drop database t; + +connection default; + +drop role simple; +drop role admin; +drop user foo; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/circular_serverid0.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/circular_serverid0.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/circular_serverid0.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/circular_serverid0.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,30 @@ +include/rpl_init.inc [topology=1->2->1] +include/rpl_connect.inc [creating M4] +include/rpl_connect.inc [creating M2] +SET @old_debug= @@global.debug; +STOP SLAVE; +SET GLOBAL debug_dbug= "+d,dbug.rows_events_to_delay_relay_logging"; +START SLAVE IO_THREAD; +include/wait_for_slave_io_to_start.inc +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb; +INSERT INTO `t1` VALUES (null, repeat('a', 1024)), (null, repeat('b', 1024)); +SET debug_sync='now WAIT_FOR start_sql_thread'; +START SLAVE SQL_THREAD; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Gtid # # GTID #-#-# +slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb +SET debug_sync='now SIGNAL go_on_relay_logging'; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Gtid # # GTID #-#-# +slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb +slave-bin.000001 # Gtid # # BEGIN GTID #-#-# +slave-bin.000001 # Table_map # # table_id: # (test.t1) +slave-bin.000001 # Write_rows_v1 # # table_id: # +slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F +slave-bin.000001 # Xid # # COMMIT /* XID */ +drop table t1; +SET GLOBAL debug_dbug= @old_debug; +SET debug_sync='RESET'; +include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_gtid_delete_domain.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_gtid_delete_domain.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_gtid_delete_domain.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_gtid_delete_domain.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,30 @@ +include/master-slave.inc +[connection master] +SET @@SESSION.gtid_domain_id=0; +CREATE TABLE t (a INT); +call mtr.add_suppression("connecting slave requested to start from.*which is not in the master's binlog"); +include/stop_slave.inc +CHANGE MASTER TO master_use_gtid=slave_pos; +SET @@SESSION.gtid_domain_id=11; +SET @@SESSION.server_id=111; +SET @@SESSION.gtid_seq_no=1; +INSERT INTO t SET a=1; +SET @save.gtid_slave_pos=@@global.gtid_slave_pos; +SET @@global.gtid_slave_pos=concat(@@global.gtid_slave_pos, ",", 11, "-", 111, "-", 1 + 1); +Warnings: +Warning 1947 Specified GTID 0-1-1 conflicts with the binary log which contains a more recent GTID 0-2-2. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos. +START SLAVE IO_THREAD; +include/wait_for_slave_io_error.inc [errno=1236] +FLUSH BINARY LOGS; +PURGE BINARY LOGS TO 'master-bin.000002';; +FLUSH BINARY LOGS DELETE_DOMAIN_ID=(11); +include/start_slave.inc +INSERT INTO t SET a=1; +include/wait_for_slave_io_error.inc [errno=1236] +FLUSH BINARY LOGS; +PURGE BINARY LOGS TO 'master-bin.000004';; +FLUSH BINARY LOGS DELETE_DOMAIN_ID=(11); +include/start_slave.inc +SET @@SESSION.gtid_domain_id=0; +DROP TABLE t; +include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_parallel_optimistic.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_parallel_optimistic.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_parallel_optimistic.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_parallel_optimistic.result 2017-12-21 15:48:47.000000000 +0000 @@ -496,6 +496,53 @@ 57 7 58 8 59 9 +*** MDEV-8075: DROP TEMPORARY TABLE not marked as ddl, causing optimistic parallel replication to fail *** +include/stop_slave.inc +INSERT INTO t1 VALUES (40, 10); +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (41); +BEGIN; +INSERT INTO t2 SELECT a, 20 FROM t1; +DROP TEMPORARY TABLE t1; +COMMIT; +INSERT INTO t1 VALUES (42, 10); +include/save_master_gtid.inc +SELECT * FROM t1 WHERE a >= 40 ORDER BY a; +a b +40 10 +42 10 +SELECT * FROM t2 WHERE a >= 40 ORDER BY a; +a b +41 20 +50 0 +51 1 +52 2 +53 3 +54 4 +55 5 +56 6 +57 7 +58 8 +59 9 +include/start_slave.inc +include/sync_with_master_gtid.inc +SELECT * FROM t1 WHERE a >= 40 ORDER BY a; +a b +40 10 +42 10 +SELECT * FROM t2 WHERE a >= 40 ORDER BY a; +a b +41 20 +50 0 +51 1 +52 2 +53 3 +54 4 +55 5 +56 6 +57 7 +58 8 +59 9 include/stop_slave.inc SET GLOBAL slave_parallel_mode=@old_parallel_mode; SET GLOBAL slave_parallel_threads=@old_parallel_threads; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,29 @@ +include/master-slave.inc +[connection master] +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 (c1) VALUES (1); +include/stop_slave_sql.inc +FLUSH LOGS; +FLUSH LOGS; +INSERT INTO t1 (c1) VALUES (2); +include/sync_slave_io_with_master.inc +call mtr.add_suppression("File '.*slave-relay-bin."); +call mtr.add_suppression("Could not open log file"); +call mtr.add_suppression("Failed to open the relay log"); +call mtr.add_suppression("Failed to initialize the master info structure"); +include/rpl_stop_server.inc [server_number=2] +# Removing file(s) +include/rpl_start_server.inc [server_number=2] +START SLAVE; +ERROR HY000: Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log +START SLAVE; +ERROR HY000: Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log +RESET SLAVE; +DROP TABLE t1; +START SLAVE UNTIL MASTER_LOG_FILE= 'MASTER_LOG_FILE', MASTER_LOG_POS= MASTER_LOG_POS;; +include/wait_for_slave_sql_to_stop.inc +include/stop_slave_io.inc +include/start_slave.inc +include/diff_tables.inc [master:t1, slave:t1] +DROP TABLE t1; +include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_row_log_innodb.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_row_log_innodb.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_row_log_innodb.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_row_log_innodb.result 2017-12-21 15:48:47.000000000 +0000 @@ -215,7 +215,6 @@ master-bin.000001 # Rotate # # master-bin.000002;pos=POS include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Gtid # # GTID #-#-# master-bin.000002 # Query # # use `test`; create table t3 (a int)ENGINE=InnoDB master-bin.000002 # Gtid # # GTID #-#-# @@ -253,7 +252,6 @@ slave-bin.000001 # Rotate # # slave-bin.000002;pos=POS include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Gtid # # GTID #-#-# slave-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=InnoDB slave-bin.000002 # Gtid # # BEGIN GTID #-#-# diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_row_log.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_row_log.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_row_log.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_row_log.result 2017-12-21 15:48:47.000000000 +0000 @@ -215,7 +215,6 @@ master-bin.000001 # Rotate # # master-bin.000002;pos=POS include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Gtid # # GTID #-#-# master-bin.000002 # Query # # use `test`; create table t3 (a int)ENGINE=MyISAM master-bin.000002 # Gtid # # GTID #-#-# @@ -253,7 +252,6 @@ slave-bin.000001 # Rotate # # slave-bin.000002;pos=POS include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Gtid # # GTID #-#-# slave-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=MyISAM slave-bin.000002 # Gtid # # BEGIN GTID #-#-# diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_sp_variables.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_sp_variables.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_sp_variables.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_sp_variables.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,24 @@ +include/master-slave.inc +[connection master] +# +# MDEV-13685 Can not replay binary log due to Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'concat' +# +SET NAMES utf8; +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8); +CREATE PROCEDURE p1() +BEGIN +DECLARE v_id INT DEFAULT 2017; +INSERT INTO test.t1 SELECT CONCAT(v_id, '오'); +END; +$$ +CALL p1; +SELECT * FROM t1; +a +2017오 +SET NAMES utf8; +SELECT * FROM t1; +a +2017오 +DROP PROCEDURE p1; +DROP TABLE t1; +include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_stm_log.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_stm_log.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_stm_log.result 2017-07-01 18:20:17.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_stm_log.result 2017-12-21 15:48:47.000000000 +0000 @@ -215,7 +215,6 @@ master-bin.000001 # Rotate # # master-bin.000002;pos=POS include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Binlog_checkpoint # # master-bin.000002 master-bin.000002 # Gtid # # GTID #-#-# master-bin.000002 # Query # # use `test`; create table t3 (a int)ENGINE=MyISAM master-bin.000002 # Gtid # # GTID #-#-# @@ -252,7 +251,6 @@ slave-bin.000001 # Rotate # # slave-bin.000002;pos=POS include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info -slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002 slave-bin.000002 # Gtid # # GTID #-#-# slave-bin.000002 # Query # # use `test`; create table t2 (n int)ENGINE=MyISAM slave-bin.000002 # Gtid # # BEGIN GTID #-#-# diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,28 @@ +include/master-slave.inc +[connection master] +set global time_zone='Europe/Moscow'; +set time_zone='UTC'; +stop slave; +start slave; +set global mysql56_temporal_format=false; +set global time_zone='Europe/Moscow'; +set time_zone='UTC'; +create table t1 (pk int primary key, t timestamp not null); +set timestamp = 1288477526; +insert into t1 values (1,null); +set timestamp = 1288481126; +insert into t1 values (2,null); +select pk, t, unix_timestamp(t) from t1; +pk t unix_timestamp(t) +1 2010-10-30 22:25:26 1288477526 +2 2010-10-30 23:25:26 1288481126 +set time_zone=default; +select pk, t, unix_timestamp(t) from t1; +pk t unix_timestamp(t) +1 2010-10-31 02:25:26 1288477526 +2 2010-10-31 02:25:26 1288481126 +set global time_zone=default; +drop table t1; +set global time_zone=default; +set global mysql56_temporal_format=default; +include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/circular_serverid0.cnf mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/circular_serverid0.cnf --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/circular_serverid0.cnf 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/circular_serverid0.cnf 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,30 @@ +!include ../my.cnf + +[mysqld.1] +gtid-domain-id=4 +server-id=4 +# +log-slave-updates +slave-parallel-threads=0 +gtid-strict-mode=1 +gtid-ignore-duplicates=1 + +# +# Max-size row events to minimum with the idea to create +# a number of Rows_log_event per Query. +# +binlog-row-event-max-size=1024 + +[mysqld.2] +gtid-domain-id=2 +server-id=2 +# +log-slave-updates +slave-parallel-threads=0 +gtid-strict-mode=1 +gtid-ignore-duplicates=1 +binlog-row-event-max-size=1024 +# The slave will be initialized with a @@global.dbug-var value +skip-slave-start=1 + + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/circular_serverid0.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/circular_serverid0.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/circular_serverid0.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/circular_serverid0.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,104 @@ +# +# Testing chain/circular replication scenario of MDEV-9670 +# The effect of the bug was that we got a commit with a GTID with server_id +# + +--source include/have_binlog_format_row.inc +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +--let $rpl_topology= 1->2->1 +--source include/rpl_init.inc + +--let $rpl_connection_name= M4 +--let $rpl_server_number= 1 +--source include/rpl_connect.inc + +--let $rpl_connection_name= M2 +--let $rpl_server_number= 2 +--source include/rpl_connect.inc + +# The parameter reflects binlog-row-event-max-size @cnf. +--let $row_size=1024 + +SET @old_debug= @@global.debug; + +--connection M2 +STOP SLAVE; +SET GLOBAL debug_dbug= "+d,dbug.rows_events_to_delay_relay_logging"; +START SLAVE IO_THREAD; +--source include/wait_for_slave_io_to_start.inc + +--connection M2 +# This query also creates a Gtid event group whose Gtid will remain in +# ignored status for too long causing a following group split. + +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb; +--sync_slave_with_master M4 + +# This INSERT will be logged as two Write_log events which the buggy +# slave applier would split. + +--connection M4 +eval INSERT INTO `t1` VALUES (null, repeat('a', $row_size)), (null, repeat('b', $row_size)); + +# START M2 IO thread and wait for its signal to follow with the SQL +# thread start. At this moment the SQL thread shall be having 2 and +# "half" groups to execute. The "hafl" one would be committed by the +# buggy applier after which the IO is released to queue the rest of +# the 3rd group which the SQL thread commits separately to complete +# the split. + +--connection M2 + +# wait for IO signal to start the SQL thread. IO will be hanging upon that. +SET debug_sync='now WAIT_FOR start_sql_thread'; + +# Now the slave server has relay log whose last group is incomplete. +# An unfixed slave server would go to "insert" a "fake" +# Gtid_list_log_event event which actually would commit the incomplete +# group. However before to actual commit do_apply_event() hits some assert. +# In the fixed server the fake Gtid_list_log_event is *not* inserted +# in the middle of a group. +START SLAVE SQL_THREAD; + +# Sleep for a little time to give SQL thread a chance to commit while +# the IO thread is hanging (see +# DBUG_EXECUTE_IF("dbug.rows_events_to_delay_relay_logging"...) in +# queue_event). Alternatively to reproduce the case when buggy slave +# wait for the 1st group commit + +#--let $count= 1 +#--let $table= t1 +#--source include/wait_until_rows_count.inc + +--sleep 2 + +# Demonstrate either no split group in the correct slave or the 1nd +# group in the buggy one +--source include/show_binlog_events.inc + +# Release the IO thread +SET debug_sync='now SIGNAL go_on_relay_logging'; + +# Sync servers +--sync_slave_with_master M4 +--connection M4 +--sync_slave_with_master M2 +--connection M2 + +# Demonstrate replication goes correctly not to create any split, or +# the 2nd group in the buggy slave +--source include/show_binlog_events.inc + +# +# Cleanup +# +--connection M4 +drop table t1; + +--connection M2 +SET GLOBAL debug_dbug= @old_debug; +SET debug_sync='RESET'; +--source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ ---source include/master-slave.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc --enable_connect_log --connection master diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test 2017-12-21 15:48:47.000000000 +0000 @@ -5,9 +5,9 @@ # is replication unsafe. # -source include/master-slave.inc; source include/have_binlog_format_mixed.inc; source include/have_innodb.inc; +source include/master-slave.inc; call mtr.add_suppression('Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.'); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ -source include/master-slave.inc; source include/have_innodb.inc; source include/have_binlog_format_statement.inc; +source include/master-slave.inc; connection slave; call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_blackhole.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_blackhole.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_blackhole.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_blackhole.test 2017-12-21 15:48:47.000000000 +0000 @@ -15,8 +15,8 @@ # primary key lookup), and index/key with multiple matches (forcing an # index search). -source include/master-slave.inc; source include/have_blackhole.inc; +source include/master-slave.inc; call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_concurrency_error.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_concurrency_error.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_concurrency_error.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_concurrency_error.test 2017-12-21 15:48:47.000000000 +0000 @@ -17,9 +17,9 @@ # log, the error is ignored and only the non-transactional tables are changed. ############################################################################### ---source include/master-slave.inc --source include/have_innodb.inc --source include/have_binlog_format_statement.inc +--source include/master-slave.inc call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_conditional_comments.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_conditional_comments.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_conditional_comments.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_conditional_comments.test 2017-12-21 15:48:47.000000000 +0000 @@ -8,8 +8,8 @@ # will be binlogged as # 'INSERT INTO t1 VALUES (1) /*!10000, (2)*/ /* 99999 ,(3)*/'. ############################################################################### -source include/master-slave.inc; source include/have_binlog_format_statement.inc; +source include/master-slave.inc; CREATE TABLE t1(c1 INT); source include/show_binlog_events.inc; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_empty_master_host.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_empty_master_host.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_empty_master_host.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_empty_master_host.test 2017-12-21 15:48:47.000000000 +0000 @@ -16,8 +16,8 @@ # along the way if error/no error is thrown and/or if replication starts # working when expected. ---source include/master-slave.inc --source include/have_binlog_format_mixed.inc +--source include/master-slave.inc connection slave; STOP SLAVE; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test 2017-12-21 15:48:47.000000000 +0000 @@ -2,8 +2,8 @@ # Purpose: To test having extra columns on the master WL#3915 ############################################################# -- source include/have_binlog_format_row.inc --- source include/master-slave.inc -- source include/have_innodb.inc +-- source include/master-slave.inc let $engine_type = 'InnoDB'; --source extra/rpl_tests/rpl_extra_col_master.test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_flush_logs.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_flush_logs.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_flush_logs.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_flush_logs.test 2017-12-21 15:48:47.000000000 +0000 @@ -4,8 +4,8 @@ # works fine. # ---source include/master-slave.inc --source include/have_binlog_format_statement.inc +--source include/master-slave.inc connection master; # Test 'flush error logs' statement. diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_geometry.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_geometry.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_geometry.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_geometry.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ -source include/master-slave.inc; source include/have_binlog_format_row.inc; +source include/master-slave.inc; # # Bug#48776, Bug#43784 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test 2017-12-21 15:48:47.000000000 +0000 @@ -8,9 +8,9 @@ # Finish the following tests by calling its common test script: # extra/rpl_tests/rpl_get_master_version_and_clock.test. -source include/master-slave.inc; source include/have_debug.inc; source include/have_debug_sync.inc; +source include/master-slave.inc; # # The test is not supposed to have any binglog affairs. diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_grant.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_grant.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_grant.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_grant.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ # Tests of grants and users -source include/master-slave.inc; source include/not_embedded.inc; +source include/master-slave.inc; --echo **** On Master **** connection master; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_gtid_delete_domain.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_gtid_delete_domain.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_gtid_delete_domain.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_gtid_delete_domain.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,95 @@ +# In case master's gtid binlog state is divergent from the slave's gtid_slave_pos +# slave may not be able to connect. +# For instance when slave is more updated in some of domains, see +# MDEV-12012 as example, the master's state may require adjustment. +# In a specific case of an "old" divergent domain, that is there +# won't be no more event groups from it generated, the states can be +# made compatible with wiping the problematic domain away. After that slave +# becomes connectable. +# +# Notice that the slave applied gtid state is not really required to +# be similarly cleaned in order for replication to flow. +# However this could lead to an expected error when the master +# resumes binlogging of such domain which the test demonstrate. + +--source include/master-slave.inc + +--connection master +# enforce the default domain_id binlogging explicitly +SET @@SESSION.gtid_domain_id=0; +CREATE TABLE t (a INT); +--sync_slave_with_master + +--connection slave +call mtr.add_suppression("connecting slave requested to start from.*which is not in the master's binlog"); + +--source include/stop_slave.inc +CHANGE MASTER TO master_use_gtid=slave_pos; + +--connection master +# create extra gtid domains for binlog state +--let $extra_domain_id=11 +--let $extra_domain_server_id=111 +--let $extra_gtid_seq_no=1 +--eval SET @@SESSION.gtid_domain_id=$extra_domain_id +--eval SET @@SESSION.server_id=$extra_domain_server_id +--eval SET @@SESSION.gtid_seq_no=$extra_gtid_seq_no +INSERT INTO t SET a=1; + +# +# Set up the slave replication state as if slave knows more events from the extra +# domain. +# +--connection slave +SET @save.gtid_slave_pos=@@global.gtid_slave_pos; +--eval SET @@global.gtid_slave_pos=concat(@@global.gtid_slave_pos, ",", $extra_domain_id, "-", $extra_domain_server_id, "-", $extra_gtid_seq_no + 1) + +# unsuccessful attempt to start slave +START SLAVE IO_THREAD; +--let $slave_io_errno=1236 +--source include/wait_for_slave_io_error.inc + +--connection master +# adjust the master binlog state +FLUSH BINARY LOGS; +--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1) +--eval PURGE BINARY LOGS TO '$purge_to_binlog'; +# with final removal of the extra domain +--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID=($extra_domain_id) + +--connection slave +# start the slave sucessfully +--source include/start_slave.inc + +--connection master +# but the following gtid from the *extra* domain will break replication +INSERT INTO t SET a=1; + +# take note of the slave io thread error due to being dismissed +# extra domain at connection to master which tried becoming active; +# slave is to stop. +--connection slave +--let $errno=1236 +--source include/wait_for_slave_io_error.inc + +# let's apply the very same medicine +--connection master +FLUSH BINARY LOGS; +--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1) +--eval PURGE BINARY LOGS TO '$purge_to_binlog'; +# with final removal of the extra domain +--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID=($extra_domain_id) + +--connection slave +--source include/start_slave.inc + +# +# cleanup +# +--connection master +SET @@SESSION.gtid_domain_id=0; +DROP TABLE t; + +sync_slave_with_master; + +--source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ ---source include/master-slave.inc --source include/have_innodb.inc --source include/have_debug.inc +--source include/master-slave.inc CREATE TABLE t1 (i int) ENGINE=InnoDB; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ # Testing master to slave heartbeat protocol, test cases that need debug build. ---source include/master-slave.inc --source include/have_debug.inc +--source include/master-slave.inc connection slave; --source include/stop_slave.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ --source include/have_innodb.inc ---source include/master-slave.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc # # Bug#68220: innodb_rows_updated is misleading on slave when *info_repository=TABLE diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_insert.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_insert.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_insert.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_insert.test 2017-12-21 15:48:47.000000000 +0000 @@ -2,9 +2,9 @@ --echo # Bug#20821: INSERT DELAYED fails to write some rows to binlog --echo # ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_windows.inc +--source include/master-slave.inc disable_query_log; call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_invoked_features.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_invoked_features.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_invoked_features.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_invoked_features.test 2017-12-21 15:48:47.000000000 +0000 @@ -5,8 +5,8 @@ # Features for Replication. ######################################### ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc disable_query_log; call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test 2017-12-21 15:48:47.000000000 +0000 @@ -4,8 +4,8 @@ # if the path of the load data file is a symbolic link. # --source include/not_windows.inc ---source include/master-slave.inc --source include/have_binlog_format_statement.inc +--source include/master-slave.inc create table t1(a int not null auto_increment, b int, primary key(a) ); load data infile '../../std_data/rpl_loaddata.dat' into table t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ ---source include/master-slave.inc --source include/have_debug.inc --source include/have_debug_sync.inc --source include/have_binlog_format_row.inc --source include/have_innodb.inc +--source include/master-slave.inc connection master; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mdev-11092.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mdev-11092.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mdev-11092.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mdev-11092.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ --source include/have_innodb.inc ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_windows.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc ######################################################################################## call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mdev8193.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mdev8193.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mdev8193.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mdev8193.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ ---source include/master-slave.inc --source include/have_binlog_format_statement.inc +--source include/master-slave.inc --connection slave diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ --source include/have_innodb.inc ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_windows.inc --source include/have_binlog_format_mixed.inc +--source include/master-slave.inc --source extra/rpl_tests/rpl_binlog_max_cache_size.test --source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test 2017-12-21 15:48:47.000000000 +0000 @@ -3,8 +3,8 @@ ################################################################################ --source include/have_udf.inc --source include/have_binlog_format_mixed.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc --let $engine=Innodb set session storage_engine=innodb; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test 2017-12-21 15:48:47.000000000 +0000 @@ -3,8 +3,8 @@ # tables. For further details, please, read WL#2687 and WL#5072. ################################################################################### --source include/have_binlog_format_mixed.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc let $engine_type=Innodb; let $database_name=test; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test 2017-12-21 15:48:47.000000000 +0000 @@ -3,8 +3,8 @@ # tables. For further details, please, read WL#2687 and WL#5072. ################################################################################### --source include/have_binlog_format_mixed.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc --disable_query_log SET SESSION binlog_direct_non_transactional_updates = OFF; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_not_null_innodb.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_not_null_innodb.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_not_null_innodb.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_not_null_innodb.test 2017-12-21 15:48:47.000000000 +0000 @@ -11,9 +11,9 @@ # 3 - NULL --> NOT NULL ( sql-mode != STRICT and no failures) # ################################################################################# ---source include/master-slave.inc --source include/have_innodb.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc let $engine=Innodb; --source extra/rpl_tests/rpl_not_null.test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_not_null_myisam.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_not_null_myisam.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_not_null_myisam.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_not_null_myisam.test 2017-12-21 15:48:47.000000000 +0000 @@ -11,8 +11,8 @@ # 3 - NULL --> NOT NULL ( sql-mode != STRICT and no failures) # ################################################################################# ---source include/master-slave.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc let $engine=MyISAM; --source extra/rpl_tests/rpl_not_null.test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_parallel_optimistic.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_parallel_optimistic.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_parallel_optimistic.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_parallel_optimistic.test 2017-12-21 15:48:47.000000000 +0000 @@ -456,6 +456,30 @@ SELECT * FROM t2 WHERE a >= 50 ORDER BY a; +--echo *** MDEV-8075: DROP TEMPORARY TABLE not marked as ddl, causing optimistic parallel replication to fail *** + +--connection server_2 +--source include/stop_slave.inc + +--connection server_1 +INSERT INTO t1 VALUES (40, 10); +CREATE TEMPORARY TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (41); +BEGIN; +INSERT INTO t2 SELECT a, 20 FROM t1; +DROP TEMPORARY TABLE t1; +COMMIT; +INSERT INTO t1 VALUES (42, 10); +--source include/save_master_gtid.inc +SELECT * FROM t1 WHERE a >= 40 ORDER BY a; +SELECT * FROM t2 WHERE a >= 40 ORDER BY a; + +--connection server_2 +--source include/start_slave.inc +--source include/sync_with_master_gtid.inc +SELECT * FROM t1 WHERE a >= 40 ORDER BY a; +SELECT * FROM t2 WHERE a >= 40 ORDER BY a; + # Clean up. --connection server_2 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_performance_schema.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_performance_schema.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_performance_schema.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_performance_schema.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ ---source include/master-slave.inc --source include/have_perfschema.inc --source include/have_binlog_format_mixed.inc +--source include/master-slave.inc UPDATE performance_schema.setup_instruments SET ENABLED="NO"; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_read_only.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_read_only.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_read_only.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_read_only.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ # Test case for BUG #11733 --- source include/master-slave.inc -- source include/have_innodb.inc +-- source include/master-slave.inc call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_report_port.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_report_port.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_report_port.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_report_port.test 2017-12-21 15:48:47.000000000 +0000 @@ -17,8 +17,8 @@ # case on doing SHOW SLAVE HOSTS on the master, we get the actual port number # of the slave (ie. SLAVE_PORT). -source include/master-slave.inc; source include/have_binlog_format_mixed.inc; +source include/master-slave.inc; connection master; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,91 @@ +############################################################################### +# Bug#24901077: RESET SLAVE ALL DOES NOT ALWAYS RESET SLAVE +# +# Problem: +# ======= +# If you have a relay log index file that has ended up with +# some relay log files that do not exists, then RESET SLAVE +# ALL is not enough to get back to a clean state. +############################################################################### +# Remove all slave-relay-bin.0* files (do not remove slave-relay-bin.index) +# During server restart rli initialization will fail as there are no +# relay logs. In case of bug RESET SLAVE will not do the required clean up +# as rli is not inited and subsequent START SLAVE will fail. +# Disable "Warning 1612 Being purged log ./slave-relay-bin.0* was not found" +# because it is different on Unix and Windows systems. + +--source include/have_binlog_format_mixed.inc +--source include/master-slave.inc + +--connection master +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 (c1) VALUES (1); +--sync_slave_with_master + +--connection slave +--source include/stop_slave_sql.inc +--let $MYSQLD_SLAVE_DATADIR= `select @@datadir` + +--connection master +# Generate more relay logs on slave. +FLUSH LOGS; +FLUSH LOGS; +INSERT INTO t1 (c1) VALUES (2); + +--source include/sync_slave_io_with_master.inc +call mtr.add_suppression("File '.*slave-relay-bin."); +call mtr.add_suppression("Could not open log file"); +call mtr.add_suppression("Failed to open the relay log"); +call mtr.add_suppression("Failed to initialize the master info structure"); + +# Stop slave +--let $rpl_server_number= 2 +--source include/rpl_stop_server.inc + +# Delete file(s) +--echo # Removing $remove_pattern file(s) +--let $remove_pattern= slave-relay-bin.0* +--remove_files_wildcard $MYSQLD_SLAVE_DATADIR $remove_pattern + +# Start slave +--let $rpl_server_number= 2 +--source include/rpl_start_server.inc + +# Start slave must fail because of the removed file(s). +--error ER_MASTER_INFO +START SLAVE; + +# Try a second time, it must fail again. +--error ER_MASTER_INFO +START SLAVE; + +# Retrieve master executed position before reset slave. +--let $master_exec_file= query_get_value("SHOW SLAVE STATUS", Relay_Master_Log_File, 1) +--let $master_exec_pos= query_get_value("SHOW SLAVE STATUS", Exec_Master_Log_Pos, 1) + +# Reset slave. +# Disable "Warning 1612 Being purged log ./slave-relay-bin.0* was not found" +# because it is different on Unix and Windows systems. +--disable_warnings +RESET SLAVE; +--enable_warnings +DROP TABLE t1; +--replace_result $master_exec_file MASTER_LOG_FILE $master_exec_pos MASTER_LOG_POS +--eval START SLAVE UNTIL MASTER_LOG_FILE= '$master_exec_file', MASTER_LOG_POS= $master_exec_pos; +--source include/wait_for_slave_sql_to_stop.inc +--source include/stop_slave_io.inc + +# Start slave. +--source include/start_slave.inc + +--connection master +--sync_slave_with_master +# Check consistency. +--let $diff_tables= master:t1, slave:t1 +--source include/diff_tables.inc + +# Cleanup +--connection master +DROP TABLE t1; +--sync_slave_with_master +--source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ --source include/have_innodb.inc ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_windows.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc --source extra/rpl_tests/rpl_binlog_max_cache_size.test --source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_colSize.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_colSize.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_colSize.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_colSize.test 2017-12-21 15:48:47.000000000 +0000 @@ -6,8 +6,8 @@ # having columns that are smaller (shorter) than the slave. # ################################################################## --- source include/master-slave.inc -- source include/have_binlog_format_row.inc +-- source include/master-slave.inc --disable_warnings DROP TABLE IF EXISTS t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_corruption.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_corruption.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_corruption.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_corruption.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ # ---source include/master-slave.inc --source include/have_debug.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc # BUG#11753004: 44360: REPLICATION FAILED diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_create_table.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_create_table.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_create_table.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_create_table.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ # Testing table creations for row-based replication. --source include/have_binlog_format_row.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc connection slave; --source include/have_innodb.inc connection master; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_find_row.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_find_row.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_find_row.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_find_row.test 2017-12-21 15:48:47.000000000 +0000 @@ -16,8 +16,8 @@ # has been fixed. # --- source include/master-slave.inc -- source include/have_binlog_format_row.inc +-- source include/master-slave.inc # # Case #1: master has key, but slave has not. diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test 2017-12-21 15:48:47.000000000 +0000 @@ -3,8 +3,8 @@ ################################################################################ --source include/have_udf.inc --source include/have_binlog_format_row.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc --let $engine=Innodb set session storage_engine=innodb; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_index_choice.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_index_choice.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_index_choice.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_index_choice.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ --source include/have_binlog_format_row.inc ---source include/master-slave.inc --source include/have_debug.inc --source include/have_innodb.inc +--source include/master-slave.inc # Bug#58997: Row-based replication breaks on table with only fulltext index: connection master; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_merge_engine.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_merge_engine.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_merge_engine.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_merge_engine.test 2017-12-21 15:48:47.000000000 +0000 @@ -12,8 +12,8 @@ # deletes their contents through the merge table. Finally, the slave # is synchronized with the master and (after the fix) it won't crash. # ---source include/master-slave.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc --connection master CREATE TABLE t1 (a int) ENGINE=MyISAM; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ -- source include/have_binlog_format_row.inc --- source include/master-slave.inc -- source include/have_innodb.inc +-- source include/master-slave.inc # # BUG#52868 Wrong handling of NULL value during update, replication out of sync diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test 2017-12-21 15:48:47.000000000 +0000 @@ -12,8 +12,8 @@ # This test issues SHOW [BINLOG|RELAYLOG] EVENTS both on master and slave after # some statements have been issued. --- source include/master-slave.inc -- source include/have_binlog_format_row.inc +-- source include/master-slave.inc -- source extra/rpl_tests/rpl_show_relaylog_events.inc --source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2017-12-21 15:48:47.000000000 +0000 @@ -26,9 +26,9 @@ # with mysqlbinlog reporting that it was unable to succeed in # reading the event. --- source include/master-slave.inc -- source include/have_innodb.inc -- source include/have_binlog_format_row.inc +-- source include/master-slave.inc -- disable_warnings DROP TABLE IF EXISTS `t1`; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test 2017-12-21 15:48:47.000000000 +0000 @@ -6,8 +6,8 @@ # table was binlogged in RBR. # ---source include/master-slave.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc #This statement is not binlogged in RBR. CREATE TEMPORARY TABLE t1(c1 INTEGER); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_utf16.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_utf16.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_utf16.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_utf16.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ --- source include/master-slave.inc -- source include/have_binlog_format_row.inc -- source include/have_utf16.inc +-- source include/master-slave.inc # # BUG#51716: Char column with utf16 character set gives wrong padding on slave diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_wide_table.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_wide_table.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_row_wide_table.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_row_wide_table.test 2017-12-21 15:48:47.000000000 +0000 @@ -8,8 +8,8 @@ # in corrupt binlog ################################################################## --- source include/master-slave.inc -- source include/have_binlog_format_row.inc +-- source include/master-slave.inc --disable_warnings DROP TABLE IF EXISTS t300; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_savepoint.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_savepoint.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_savepoint.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_savepoint.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc --echo # --echo # Bug#50124 Rpl failure on DROP table with concurrent txn/non-txn diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_server_id_ignore.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_server_id_ignore.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_server_id_ignore.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_server_id_ignore.test 2017-12-21 15:48:47.000000000 +0000 @@ -17,8 +17,8 @@ # b. nullifying the list and resuming of taking binlog from the very beginning with # executing events this time -source include/master-slave.inc; source include/have_binlog_format_mixed.inc; +source include/master-slave.inc; connection slave; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_set_null_innodb.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_set_null_innodb.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_set_null_innodb.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_set_null_innodb.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ -- source include/have_binlog_format_mixed_or_row.inc --- source include/master-slave.inc -- source include/have_innodb.inc +-- source include/master-slave.inc -- let $engine= InnoDB -- source extra/rpl_tests/rpl_set_null.test diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_skip_error.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_skip_error.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_skip_error.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_skip_error.test 2017-12-21 15:48:47.000000000 +0000 @@ -23,8 +23,8 @@ # bug in this test: BUG#30594: rpl.rpl_skip_error is nondeterministic: # BUG#39393: slave-skip-errors does not work when using ROW based replication -source include/master-slave.inc; source include/have_innodb.inc; +source include/master-slave.inc; --echo ==== Test Without sql_mode=strict_trans_tables ==== diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_skip_incident.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_skip_incident.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_skip_incident.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_skip_incident.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ ---source include/master-slave.inc --source include/have_debug.inc +--source include/master-slave.inc --echo **** On Master **** CREATE TABLE t1 (a INT); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test 2017-12-21 15:48:47.000000000 +0000 @@ -20,9 +20,9 @@ --source include/have_binlog_format_statement.inc --source include/have_innodb.inc --source include/have_debug.inc ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_var_link.inc +--source include/master-slave.inc ########################################################################## # Loading data diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_slave_skip.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_slave_skip.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_slave_skip.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_slave_skip.test 2017-12-21 15:48:47.000000000 +0000 @@ -4,8 +4,8 @@ # test for MIXED mode. source include/have_binlog_format_mixed.inc; -source include/master-slave.inc; source include/have_innodb.inc; +source include/master-slave.inc; --echo **** On Slave **** connection slave; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_slow_query_log.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_slow_query_log.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_slow_query_log.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_slow_query_log.test 2017-12-21 15:48:47.000000000 +0000 @@ -25,8 +25,8 @@ # Note that due to the sleep() command the insert is written to the binary # log in row format. -source include/master-slave.inc; source include/have_binlog_format_statement.inc; +source include/master-slave.inc; CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_sp_variables.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_sp_variables.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_sp_variables.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_sp_variables.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,28 @@ +source include/master-slave.inc; + +--echo # +--echo # MDEV-13685 Can not replay binary log due to Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'concat' +--echo # + +connection master; +SET NAMES utf8; +CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8); +DELIMITER $$; +CREATE PROCEDURE p1() +BEGIN + DECLARE v_id INT DEFAULT 2017; + INSERT INTO test.t1 SELECT CONCAT(v_id, '오'); +END; +$$ +DELIMITER ;$$ +CALL p1; +SELECT * FROM t1; +sync_slave_with_master; +SET NAMES utf8; +SELECT * FROM t1; +connection master; +DROP PROCEDURE p1; +DROP TABLE t1; +sync_slave_with_master; + +--source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,8 @@ --source include/have_innodb.inc ---source include/master-slave.inc --source include/not_embedded.inc --source include/not_windows.inc --source include/have_binlog_format_statement.inc +--source include/master-slave.inc --source extra/rpl_tests/rpl_binlog_max_cache_size.test --source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test 2017-12-21 15:48:47.000000000 +0000 @@ -5,8 +5,8 @@ ################################################################################### --source include/big_test.inc --source include/have_binlog_format_statement.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc --source extra/rpl_tests/rpl_drop_create_temp_table.test --source include/rpl_end.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test 2017-12-21 15:48:47.000000000 +0000 @@ -3,8 +3,8 @@ ################################################################################ --source include/have_udf.inc --source include/have_binlog_format_statement.inc ---source include/master-slave.inc --source include/have_innodb.inc +--source include/master-slave.inc --let $engine=Innodb set session storage_engine=innodb; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_loadfile.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_loadfile.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_loadfile.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_loadfile.test 2017-12-21 15:48:47.000000000 +0000 @@ -12,8 +12,8 @@ ########## # Includes --- source include/master-slave.inc -- source include/have_binlog_format_statement.inc +-- source include/master-slave.inc disable_query_log; call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,9 +1,9 @@ ################################################################################ # Please, check ./extra/rpl_tests/rpl_start_stop_slave.test ################################################################################ ---source include/master-slave.inc --source include/have_binlog_format_statement.inc --source include/have_innodb.inc +--source include/master-slave.inc # make innodb updates run fast --connection slave diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_user_variables.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_user_variables.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_stm_user_variables.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_stm_user_variables.test 2017-12-21 15:48:47.000000000 +0000 @@ -2,8 +2,8 @@ # BUG#49562: SBR out of sync when using numeric data types + user variable # --- source include/master-slave.inc -- source include/have_binlog_format_statement.inc +-- source include/master-slave.inc ## Setup user variables for several numeric types, so that we get ## coverage on the User_var_log_event different val types diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,37 @@ +# +# MDEV-12672 Replicated TIMESTAMP fields given wrong value near DST change +# +source include/have_binlog_format_row.inc; +source include/master-slave.inc; + +connection slave; +set global time_zone='Europe/Moscow'; +set time_zone='UTC'; +stop slave; +start slave; + +connection master; +set global mysql56_temporal_format=false; +set global time_zone='Europe/Moscow'; +set time_zone='UTC'; + +create table t1 (pk int primary key, t timestamp not null); +set timestamp = 1288477526; +insert into t1 values (1,null); +set timestamp = 1288481126; +insert into t1 values (2,null); + +sync_slave_with_master; + +select pk, t, unix_timestamp(t) from t1; +set time_zone=default; +select pk, t, unix_timestamp(t) from t1; + +set global time_zone=default; + +connection master; +drop table t1; +set global time_zone=default; +set global mysql56_temporal_format=default; + +source include/rpl_end.inc; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_temporary_errors.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_temporary_errors.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_temporary_errors.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_temporary_errors.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,6 @@ source include/have_binlog_format_row.inc; -source include/master-slave.inc; source include/have_innodb.inc; +source include/master-slave.inc; call mtr.add_suppression("Deadlock found"); call mtr.add_suppression("Can't find record in 't.'"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test 2017-12-21 15:48:47.000000000 +0000 @@ -9,9 +9,9 @@ # 4: sync to slave and check the number of temp tables on slave. # -source include/master-slave.inc; source include/have_binlog_format_mixed.inc; source include/have_innodb.inc; +source include/master-slave.inc; --echo ==== Initialize ==== diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/sec_behind_master-5114.test mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/sec_behind_master-5114.test --- mariadb-10.1-10.1.25/mysql-test/suite/rpl/t/sec_behind_master-5114.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/rpl/t/sec_behind_master-5114.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ -source include/master-slave.inc; source include/have_binlog_format_statement.inc; +source include/master-slave.inc; call mtr.add_suppression("Unsafe statement written to the binary log"); diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/storage_engine/type_spatial_indexes.result mariadb-10.1-10.1.30/mysql-test/suite/storage_engine/type_spatial_indexes.result --- mariadb-10.1-10.1.25/mysql-test/suite/storage_engine/type_spatial_indexes.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/storage_engine/type_spatial_indexes.result 2017-12-21 15:48:47.000000000 +0000 @@ -350,8 +350,8 @@ 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon; fid AsText(Centroid(g)) -117 POINT(55.58852775304245 17.426536064113982) -118 POINT(55.58852775304245 17.426536064113982) +117 POINT(57.98031067576927 17.854754130800433) +118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon; fid Area(g) @@ -1050,8 +1050,8 @@ 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon; fid AsText(Centroid(g)) -117 POINT(55.58852775304245 17.426536064113982) -118 POINT(55.58852775304245 17.426536064113982) +117 POINT(57.98031067576927 17.854754130800433) +118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon; fid Area(g) diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/storage_engine/type_spatial.result mariadb-10.1-10.1.30/mysql-test/suite/storage_engine/type_spatial.result --- mariadb-10.1-10.1.25/mysql-test/suite/storage_engine/type_spatial.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/storage_engine/type_spatial.result 2017-12-21 15:48:47.000000000 +0000 @@ -350,8 +350,8 @@ 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon; fid AsText(Centroid(g)) -117 POINT(55.58852775304245 17.426536064113982) -118 POINT(55.58852775304245 17.426536064113982) +117 POINT(57.98031067576927 17.854754130800433) +118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon; fid Area(g) diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/inc/explicit_defaults_for_timestamp.inc mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/inc/explicit_defaults_for_timestamp.inc --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/inc/explicit_defaults_for_timestamp.inc 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/inc/explicit_defaults_for_timestamp.inc 2017-12-21 15:48:47.000000000 +0000 @@ -97,3 +97,16 @@ ALTER TABLE t1 ADD b TIMESTAMP; SHOW CREATE TABLE t1; DROP TABLE t1; + +--echo # +--echo # MDEV-10802 TIMESTAMP NOT NULL field with explicit_defaults_for_timestamp and NO_ZERO_DATE shouldn't throw error +--echo # + +SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30'); +SET sql_mode='ANSI,NO_ZERO_DATE'; +CREATE TABLE t1 (a TIMESTAMP NOT NULL); +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +DROP TABLE t1; +SET sql_mode=DEFAULT; +SET timestamp=DEFAULT; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_off.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_off.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_off.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_off.result 2017-12-21 15:48:47.000000000 +0000 @@ -173,3 +173,16 @@ `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; +# +# MDEV-10802 TIMESTAMP NOT NULL field with explicit_defaults_for_timestamp and NO_ZERO_DATE shouldn't throw error +# +SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30'); +SET sql_mode='ANSI,NO_ZERO_DATE'; +CREATE TABLE t1 (a TIMESTAMP NOT NULL); +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +a +2001-01-01 10:20:30 +DROP TABLE t1; +SET sql_mode=DEFAULT; +SET timestamp=DEFAULT; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_on.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_on.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_on.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/explicit_defaults_for_timestamp_on.result 2017-12-21 15:48:47.000000000 +0000 @@ -178,3 +178,18 @@ `b` timestamp NULL DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; +# +# MDEV-10802 TIMESTAMP NOT NULL field with explicit_defaults_for_timestamp and NO_ZERO_DATE shouldn't throw error +# +SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30'); +SET sql_mode='ANSI,NO_ZERO_DATE'; +CREATE TABLE t1 (a TIMESTAMP NOT NULL); +INSERT INTO t1 VALUES (); +Warnings: +Warning 1364 Field 'a' doesn't have a default value +SELECT * FROM t1; +a +0000-00-00 00:00:00 +DROP TABLE t1; +SET sql_mode=DEFAULT; +SET timestamp=DEFAULT; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_now_basic.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_now_basic.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_now_basic.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_now_basic.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,8 @@ -SET @orig = @@global.innodb_buffer_pool_dump_now; -SELECT @orig; -@orig +SELECT @@global.innodb_buffer_pool_dump_now; +@@global.innodb_buffer_pool_dump_now 0 +SELECT variable_value INTO @old_dump_status FROM information_schema.global_status +WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'; SET GLOBAL innodb_buffer_pool_dump_now = ON; SELECT @@global.innodb_buffer_pool_dump_now; @@global.innodb_buffer_pool_dump_now diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_pct_basic.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_pct_basic.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_pct_basic.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_buffer_pool_dump_pct_basic.result 2017-12-21 15:48:47.000000000 +0000 @@ -2,7 +2,8 @@ SELECT @orig; @orig 100 -SET GLOBAL innodb_buffer_pool_dump_pct=3, GLOBAL innodb_buffer_pool_dump_now = ON; +SET GLOBAL innodb_buffer_pool_dump_pct=3; +# Do the dump SET GLOBAL innodb_buffer_pool_dump_pct=0; SELECT @@global.innodb_buffer_pool_dump_pct; @@global.innodb_buffer_pool_dump_pct diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_buffer_pool_load_now_basic.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_buffer_pool_load_now_basic.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_buffer_pool_load_now_basic.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_buffer_pool_load_now_basic.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,8 +1,6 @@ -SET @orig = @@global.innodb_buffer_pool_load_now; -SELECT @orig; -@orig +SELECT @@global.innodb_buffer_pool_load_now; +@@global.innodb_buffer_pool_load_now 0 -SET GLOBAL innodb_buffer_pool_dump_now = ON; SET GLOBAL innodb_buffer_pool_load_now = ON; SELECT variable_value FROM information_schema.global_status diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_log_compressed_pages_basic.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_log_compressed_pages_basic.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/innodb_log_compressed_pages_basic.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/innodb_log_compressed_pages_basic.result 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ SET @start_global_value = @@global.innodb_log_compressed_pages; SELECT @start_global_value; @start_global_value -0 +1 '#---------------------BS_STVARS_028_01----------------------#' SELECT COUNT(@@GLOBAL.innodb_log_compressed_pages); COUNT(@@GLOBAL.innodb_log_compressed_pages) @@ -66,4 +66,4 @@ SET @@global.innodb_log_compressed_pages = @start_global_value; SELECT @@global.innodb_log_compressed_pages; @@global.innodb_log_compressed_pages -0 +1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit.rdiff 2017-12-21 15:48:47.000000000 +0000 @@ -125,7 +125,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -753,7 +753,7 @@ +@@ -767,7 +767,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 120 VARIABLE_SCOPE GLOBAL @@ -134,7 +134,7 @@ VARIABLE_COMMENT Number of pages reserved in doublewrite buffer for batch flushing NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 127 -@@ -837,7 +837,7 @@ +@@ -851,7 +851,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -143,7 +143,7 @@ VARIABLE_COMMENT Speeds up the shutdown process of the InnoDB storage engine. Possible values are 0, 1 (faster) or 2 (fastest - crash-like). NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 2 -@@ -851,7 +851,7 @@ +@@ -865,7 +865,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 600 VARIABLE_SCOPE GLOBAL @@ -152,7 +152,7 @@ VARIABLE_COMMENT Maximum number of seconds that semaphore times out in InnoDB. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -921,7 +921,7 @@ +@@ -935,7 +935,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -161,7 +161,7 @@ VARIABLE_COMMENT Make the first page of the given tablespace dirty. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -935,7 +935,7 @@ +@@ -949,7 +949,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 30 VARIABLE_SCOPE GLOBAL @@ -170,7 +170,7 @@ VARIABLE_COMMENT Number of iterations over which the background flushing is averaged. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1000 -@@ -963,7 +963,7 @@ +@@ -977,7 +977,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -179,7 +179,7 @@ VARIABLE_COMMENT Controls the durability/speed trade-off for commits. Set to 0 (write and flush redo log to disk only once per second), 1 (flush to disk at each commit), 2 (write to log at commit but flush to disk only once per second) or 3 (flush to disk at prepare and at commit, slower and usually redundant). 1 and 3 guarantees that after a crash, committed transactions will not be lost and will be consistent with the binlog and other transactional engines. 2 can get inconsistent and lose transactions if there is a power failure or kernel crash but not if mysqld crashes. 0 has no guarantees in case of crash. 0 and 2 can be faster than 1 or 3. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 3 -@@ -991,7 +991,7 @@ +@@ -1005,7 +1005,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -188,7 +188,7 @@ VARIABLE_COMMENT Set to 0 (don't flush neighbors from buffer pool), 1 (flush contiguous neighbors from buffer pool) or 2 (flush neighbors from buffer pool), when flushing a block NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 2 -@@ -1033,7 +1033,7 @@ +@@ -1047,7 +1047,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -298,7 +298,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1341,7 +1341,7 @@ +@@ -1355,7 +1355,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 50 VARIABLE_SCOPE SESSION @@ -307,7 +307,7 @@ VARIABLE_COMMENT Timeout in seconds an InnoDB transaction may wait for a lock before being rolled back. Values above 100000000 disable the timeout. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1073741824 -@@ -1355,10 +1355,10 @@ +@@ -1369,10 +1369,10 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 16777216 VARIABLE_SCOPE GLOBAL @@ -320,7 +320,7 @@ NUMERIC_BLOCK_SIZE 1024 ENUM_VALUE_LIST NULL READ_ONLY YES -@@ -1397,7 +1397,7 @@ +@@ -1411,7 +1411,7 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 2 VARIABLE_SCOPE GLOBAL @@ -329,7 +329,7 @@ VARIABLE_COMMENT Number of log files in the log group. InnoDB writes to the files in a circular fashion. NUMERIC_MIN_VALUE 2 NUMERIC_MAX_VALUE 100 -@@ -1439,10 +1439,10 @@ +@@ -1453,10 +1453,10 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 1024 VARIABLE_SCOPE GLOBAL @@ -342,7 +342,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1481,10 +1481,10 @@ +@@ -1495,10 +1495,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -355,7 +355,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1495,7 +1495,7 @@ +@@ -1509,7 +1509,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -364,7 +364,7 @@ VARIABLE_COMMENT Maximum delay of user threads in micro-seconds NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 10000000 -@@ -1509,7 +1509,7 @@ +@@ -1523,7 +1523,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -373,7 +373,7 @@ VARIABLE_COMMENT Number of identical copies of log groups we keep for the database. Currently this should be set to 1. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 10 -@@ -1579,7 +1579,7 @@ +@@ -1593,7 +1593,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 8 VARIABLE_SCOPE GLOBAL @@ -382,7 +382,7 @@ VARIABLE_COMMENT Number of multi-threaded flush threads NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 64 -@@ -1635,10 +1635,10 @@ +@@ -1649,10 +1649,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -395,7 +395,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY YES -@@ -1663,7 +1663,7 @@ +@@ -1677,7 +1677,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 16 VARIABLE_SCOPE GLOBAL @@ -404,7 +404,7 @@ VARIABLE_COMMENT Number of rw_locks protecting buffer pool page_hash. Rounded up to the next power of 2 NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1024 -@@ -1677,7 +1677,7 @@ +@@ -1691,7 +1691,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 16384 VARIABLE_SCOPE GLOBAL @@ -413,7 +413,7 @@ VARIABLE_COMMENT Page size to use for all InnoDB tablespaces. NUMERIC_MIN_VALUE 4096 NUMERIC_MAX_VALUE 65536 -@@ -1719,7 +1719,7 @@ +@@ -1733,7 +1733,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 300 VARIABLE_SCOPE GLOBAL @@ -422,7 +422,7 @@ VARIABLE_COMMENT Number of UNDO log pages to purge in one batch from the history list. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 5000 -@@ -1761,7 +1761,7 @@ +@@ -1775,7 +1775,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -431,7 +431,7 @@ VARIABLE_COMMENT Purge threads can be from 1 to 32. Default is 1. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 32 -@@ -1789,7 +1789,7 @@ +@@ -1803,7 +1803,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 56 VARIABLE_SCOPE GLOBAL @@ -440,7 +440,7 @@ VARIABLE_COMMENT Number of pages that must be accessed sequentially for InnoDB to trigger a readahead. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 64 -@@ -1803,7 +1803,7 @@ +@@ -1817,7 +1817,7 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 4 VARIABLE_SCOPE GLOBAL @@ -449,7 +449,7 @@ VARIABLE_COMMENT Number of background read I/O threads in InnoDB. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 64 -@@ -1831,10 +1831,10 @@ +@@ -1845,10 +1845,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -462,7 +462,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1859,7 +1859,7 @@ +@@ -1873,7 +1873,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 128 VARIABLE_SCOPE GLOBAL @@ -471,7 +471,7 @@ VARIABLE_COMMENT Number of undo logs to use (deprecated). NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 128 -@@ -1873,7 +1873,7 @@ +@@ -1887,7 +1887,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -480,7 +480,7 @@ VARIABLE_COMMENT An InnoDB page number. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -1929,7 +1929,7 @@ +@@ -1943,7 +1943,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1048576 VARIABLE_SCOPE GLOBAL @@ -489,7 +489,7 @@ VARIABLE_COMMENT Memory buffer size for index creation NUMERIC_MIN_VALUE 65536 NUMERIC_MAX_VALUE 67108864 -@@ -1943,10 +1943,10 @@ +@@ -1957,10 +1957,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 6 VARIABLE_SCOPE GLOBAL @@ -502,7 +502,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -2139,7 +2139,7 @@ +@@ -2167,7 +2167,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -511,7 +511,7 @@ VARIABLE_COMMENT Size of the mutex/lock wait array. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1024 -@@ -2153,10 +2153,10 @@ +@@ -2181,10 +2181,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 30 VARIABLE_SCOPE GLOBAL @@ -524,7 +524,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -2181,7 +2181,7 @@ +@@ -2209,7 +2209,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -533,7 +533,7 @@ VARIABLE_COMMENT Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1000 -@@ -2195,7 +2195,7 @@ +@@ -2223,7 +2223,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 10000 VARIABLE_SCOPE GLOBAL @@ -542,7 +542,7 @@ VARIABLE_COMMENT Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1000000 -@@ -2251,7 +2251,7 @@ +@@ -2293,7 +2293,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 128 VARIABLE_SCOPE GLOBAL @@ -551,7 +551,7 @@ VARIABLE_COMMENT Number of undo logs to use. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 128 -@@ -2265,7 +2265,7 @@ +@@ -2307,7 +2307,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -560,7 +560,7 @@ VARIABLE_COMMENT Number of undo tablespaces to use. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 126 -@@ -2363,7 +2363,7 @@ +@@ -2405,7 +2405,7 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 4 VARIABLE_SCOPE GLOBAL diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb,32bit,xtradb.rdiff 2017-12-21 15:48:47.000000000 +0000 @@ -1,5 +1,5 @@ ---- suite/sys_vars/r/sysvars_innodb.result 2016-05-06 14:03:16.000000000 +0300 -+++ suite/sys_vars/r/sysvars_innodb,32bit.reject 2016-05-08 13:28:44.312418574 +0300 +--- suite/sys_vars/r/sysvars_innodb.result ++++ suite/sys_vars/r/sysvars_innodb,32bit.reject @@ -47,13 +47,27 @@ ENUM_VALUE_LIST OFF,ON READ_ONLY NO @@ -298,7 +298,7 @@ VARIABLE_NAME INNODB_DATA_FILE_PATH SESSION_VALUE NULL GLOBAL_VALUE ibdata1:12M:autoextend -@@ -753,7 +893,7 @@ +@@ -767,7 +907,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 120 VARIABLE_SCOPE GLOBAL @@ -307,7 +307,7 @@ VARIABLE_COMMENT Number of pages reserved in doublewrite buffer for batch flushing NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 127 -@@ -761,6 +901,20 @@ +@@ -775,6 +915,20 @@ ENUM_VALUE_LIST NULL READ_ONLY YES COMMAND_LINE_ARGUMENT OPTIONAL @@ -328,7 +328,7 @@ VARIABLE_NAME INNODB_ENCRYPTION_ROTATE_KEY_AGE SESSION_VALUE NULL GLOBAL_VALUE 1 -@@ -831,13 +985,27 @@ +@@ -845,13 +999,27 @@ ENUM_VALUE_LIST OFF,ON,FORCE READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -357,7 +357,7 @@ VARIABLE_COMMENT Speeds up the shutdown process of the InnoDB storage engine. Possible values are 0, 1 (faster) or 2 (fastest - crash-like). NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 2 -@@ -851,7 +1019,7 @@ +@@ -865,7 +1033,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 600 VARIABLE_SCOPE GLOBAL @@ -366,7 +366,7 @@ VARIABLE_COMMENT Maximum number of seconds that semaphore times out in InnoDB. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -921,7 +1089,7 @@ +@@ -935,7 +1103,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -375,7 +375,7 @@ VARIABLE_COMMENT Make the first page of the given tablespace dirty. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -935,7 +1103,7 @@ +@@ -949,7 +1117,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 30 VARIABLE_SCOPE GLOBAL @@ -384,7 +384,7 @@ VARIABLE_COMMENT Number of iterations over which the background flushing is averaged. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1000 -@@ -958,12 +1126,12 @@ +@@ -972,12 +1140,12 @@ READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_FLUSH_LOG_AT_TRX_COMMIT @@ -400,7 +400,7 @@ VARIABLE_COMMENT Controls the durability/speed trade-off for commits. Set to 0 (write and flush redo log to disk only once per second), 1 (flush to disk at each commit), 2 (write to log at commit but flush to disk only once per second) or 3 (flush to disk at prepare and at commit, slower and usually redundant). 1 and 3 guarantees that after a crash, committed transactions will not be lost and will be consistent with the binlog and other transactional engines. 2 can get inconsistent and lose transactions if there is a power failure or kernel crash but not if mysqld crashes. 0 has no guarantees in case of crash. 0 and 2 can be faster than 1 or 3. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 3 -@@ -991,7 +1159,7 @@ +@@ -1005,7 +1173,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -409,7 +409,7 @@ VARIABLE_COMMENT Set to 0 (don't flush neighbors from buffer pool), 1 (flush contiguous neighbors from buffer pool) or 2 (flush neighbors from buffer pool), when flushing a block NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 2 -@@ -1033,7 +1201,7 @@ +@@ -1047,7 +1215,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -575,7 +575,7 @@ VARIABLE_NAME INNODB_LOCKS_UNSAFE_FOR_BINLOG SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -1341,7 +1551,7 @@ +@@ -1355,7 +1565,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 50 VARIABLE_SCOPE SESSION @@ -584,7 +584,7 @@ VARIABLE_COMMENT Timeout in seconds an InnoDB transaction may wait for a lock before being rolled back. Values above 100000000 disable the timeout. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1073741824 -@@ -1349,35 +1559,105 @@ +@@ -1363,37 +1573,107 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED @@ -620,7 +620,8 @@ COMMAND_LINE_ARGUMENT OPTIONAL -VARIABLE_NAME INNODB_LOG_COMPRESSED_PAGES +VARIABLE_NAME INNODB_LOG_ARCH_DIR -+SESSION_VALUE NULL + SESSION_VALUE NULL +-GLOBAL_VALUE ON +GLOBAL_VALUE PATH +GLOBAL_VALUE_ORIGIN COMPILE-TIME +DEFAULT_VALUE @@ -704,10 +705,12 @@ +READ_ONLY NO +COMMAND_LINE_ARGUMENT REQUIRED +VARIABLE_NAME INNODB_LOG_COMPRESSED_PAGES - SESSION_VALUE NULL - GLOBAL_VALUE OFF ++SESSION_VALUE NULL ++GLOBAL_VALUE ON GLOBAL_VALUE_ORIGIN COMPILE-TIME -@@ -1397,7 +1677,7 @@ + DEFAULT_VALUE ON + VARIABLE_SCOPE GLOBAL +@@ -1411,7 +1691,7 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 2 VARIABLE_SCOPE GLOBAL @@ -716,7 +719,7 @@ VARIABLE_COMMENT Number of log files in the log group. InnoDB writes to the files in a circular fashion. NUMERIC_MIN_VALUE 2 NUMERIC_MAX_VALUE 100 -@@ -1439,9 +1719,37 @@ +@@ -1453,9 +1733,37 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 1024 VARIABLE_SCOPE GLOBAL @@ -755,7 +758,7 @@ NUMERIC_MAX_VALUE 18446744073709551615 NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL -@@ -1481,10 +1789,10 @@ +@@ -1495,10 +1803,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -768,7 +771,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1495,7 +1803,7 @@ +@@ -1509,7 +1817,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -777,7 +780,7 @@ VARIABLE_COMMENT Maximum delay of user threads in micro-seconds NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 10000000 -@@ -1509,7 +1817,7 @@ +@@ -1523,7 +1831,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -786,7 +789,7 @@ VARIABLE_COMMENT Number of identical copies of log groups we keep for the database. Currently this should be set to 1. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 10 -@@ -1579,7 +1887,7 @@ +@@ -1593,7 +1901,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 8 VARIABLE_SCOPE GLOBAL @@ -795,7 +798,7 @@ VARIABLE_COMMENT Number of multi-threaded flush threads NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 64 -@@ -1635,10 +1943,10 @@ +@@ -1649,10 +1957,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -808,7 +811,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY YES -@@ -1663,7 +1971,7 @@ +@@ -1677,7 +1985,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 16 VARIABLE_SCOPE GLOBAL @@ -817,7 +820,7 @@ VARIABLE_COMMENT Number of rw_locks protecting buffer pool page_hash. Rounded up to the next power of 2 NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1024 -@@ -1677,7 +1985,7 @@ +@@ -1691,7 +1999,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 16384 VARIABLE_SCOPE GLOBAL @@ -826,8 +829,8 @@ VARIABLE_COMMENT Page size to use for all InnoDB tablespaces. NUMERIC_MIN_VALUE 4096 NUMERIC_MAX_VALUE 65536 -@@ -1713,13 +2021,69 @@ - ENUM_VALUE_LIST NULL +@@ -1727,13 +2035,69 @@ + ENUM_VALUE_LIST OFF,ON READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL +VARIABLE_NAME INNODB_PRIORITY_CLEANER @@ -897,7 +900,7 @@ VARIABLE_COMMENT Number of UNDO log pages to purge in one batch from the history list. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 5000 -@@ -1761,7 +2125,7 @@ +@@ -1775,7 +2139,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -906,7 +909,7 @@ VARIABLE_COMMENT Purge threads can be from 1 to 32. Default is 1. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 32 -@@ -1789,7 +2153,7 @@ +@@ -1803,7 +2167,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 56 VARIABLE_SCOPE GLOBAL @@ -915,7 +918,7 @@ VARIABLE_COMMENT Number of pages that must be accessed sequentially for InnoDB to trigger a readahead. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 64 -@@ -1803,7 +2167,7 @@ +@@ -1817,7 +2181,7 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 4 VARIABLE_SCOPE GLOBAL @@ -924,7 +927,7 @@ VARIABLE_COMMENT Number of background read I/O threads in InnoDB. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 64 -@@ -1831,10 +2195,10 @@ +@@ -1845,10 +2209,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -937,7 +940,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1859,7 +2223,7 @@ +@@ -1873,7 +2237,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 128 VARIABLE_SCOPE GLOBAL @@ -946,7 +949,7 @@ VARIABLE_COMMENT Number of undo logs to use (deprecated). NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 128 -@@ -1873,7 +2237,7 @@ +@@ -1887,7 +2251,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -955,7 +958,7 @@ VARIABLE_COMMENT An InnoDB page number. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -1881,6 +2245,48 @@ +@@ -1895,6 +2259,48 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -1004,7 +1007,7 @@ VARIABLE_NAME INNODB_SCRUB_LOG SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -1909,6 +2315,34 @@ +@@ -1923,6 +2329,34 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -1039,7 +1042,7 @@ VARIABLE_NAME INNODB_SIMULATE_COMP_FAILURES SESSION_VALUE NULL GLOBAL_VALUE 0 -@@ -1929,7 +2363,7 @@ +@@ -1943,7 +2377,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1048576 VARIABLE_SCOPE GLOBAL @@ -1048,7 +1051,7 @@ VARIABLE_COMMENT Memory buffer size for index creation NUMERIC_MIN_VALUE 65536 NUMERIC_MAX_VALUE 67108864 -@@ -1943,10 +2377,10 @@ +@@ -1957,10 +2391,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 6 VARIABLE_SCOPE GLOBAL @@ -1061,7 +1064,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1972,7 +2406,7 @@ +@@ -2000,7 +2434,7 @@ DEFAULT_VALUE nulls_equal VARIABLE_SCOPE GLOBAL VARIABLE_TYPE ENUM @@ -1070,7 +1073,7 @@ NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -@@ -2139,7 +2573,7 @@ +@@ -2167,7 +2601,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1 VARIABLE_SCOPE GLOBAL @@ -1079,7 +1082,7 @@ VARIABLE_COMMENT Size of the mutex/lock wait array. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1024 -@@ -2153,10 +2587,10 @@ +@@ -2181,10 +2615,10 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 30 VARIABLE_SCOPE GLOBAL @@ -1092,7 +1095,7 @@ NUMERIC_BLOCK_SIZE 0 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -2181,7 +2615,7 @@ +@@ -2209,7 +2643,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -1101,7 +1104,7 @@ VARIABLE_COMMENT Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1000 -@@ -2195,7 +2629,7 @@ +@@ -2223,7 +2657,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 10000 VARIABLE_SCOPE GLOBAL @@ -1110,7 +1113,7 @@ VARIABLE_COMMENT Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1000000 -@@ -2217,6 +2651,34 @@ +@@ -2245,6 +2679,34 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -1145,7 +1148,7 @@ VARIABLE_NAME INNODB_TRX_PURGE_VIEW_UPDATE_ONLY_DEBUG SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -2265,7 +2727,7 @@ +@@ -2293,7 +2755,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 128 VARIABLE_SCOPE GLOBAL @@ -1154,7 +1157,7 @@ VARIABLE_COMMENT Number of undo logs to use. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 128 -@@ -2279,7 +2741,7 @@ +@@ -2307,7 +2769,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE GLOBAL @@ -1163,7 +1166,7 @@ VARIABLE_COMMENT Number of undo tablespaces to use. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 126 -@@ -2294,7 +2756,7 @@ +@@ -2322,7 +2784,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN @@ -1172,8 +1175,8 @@ NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -@@ -2315,6 +2777,20 @@ - ENUM_VALUE_LIST NULL +@@ -2343,6 +2805,20 @@ + ENUM_VALUE_LIST OFF,ON READ_ONLY YES COMMAND_LINE_ARGUMENT NONE +VARIABLE_NAME INNODB_USE_GLOBAL_FLUSH_LOG_AT_TRX_COMMIT @@ -1193,8 +1196,8 @@ VARIABLE_NAME INNODB_USE_MTFLUSH SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -2329,6 +2805,20 @@ - ENUM_VALUE_LIST NULL +@@ -2357,6 +2833,20 @@ + ENUM_VALUE_LIST OFF,ON READ_ONLY YES COMMAND_LINE_ARGUMENT NONE +VARIABLE_NAME INNODB_USE_STACKTRACE @@ -1214,12 +1217,12 @@ VARIABLE_NAME INNODB_USE_SYS_MALLOC SESSION_VALUE NULL GLOBAL_VALUE ON -@@ -2359,12 +2849,12 @@ +@@ -2387,12 +2877,12 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_VERSION SESSION_VALUE NULL --GLOBAL_VALUE 5.6.36 -+GLOBAL_VALUE 5.6.36-82.0 +-GLOBAL_VALUE 5.6.37 ++GLOBAL_VALUE 5.6.36-82.2 GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL @@ -1229,7 +1232,7 @@ NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -@@ -2377,7 +2867,7 @@ +@@ -2405,7 +2895,7 @@ GLOBAL_VALUE_ORIGIN CONFIG DEFAULT_VALUE 4 VARIABLE_SCOPE GLOBAL diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb.result 2017-12-21 15:48:47.000000000 +0000 @@ -1347,7 +1347,7 @@ NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST fcfs,vats -READ_ONLY NO +READ_ONLY YES COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME INNODB_LOCK_WAIT_TIMEOUT SESSION_VALUE 50 @@ -1393,9 +1393,9 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_LOG_COMPRESSED_PAGES SESSION_VALUE NULL -GLOBAL_VALUE OFF +GLOBAL_VALUE ON GLOBAL_VALUE_ORIGIN COMPILE-TIME -DEFAULT_VALUE OFF +DEFAULT_VALUE ON VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN VARIABLE_COMMENT Enables/disables the logging of entire compressed page images. InnoDB logs the compressed pages to prevent corruption if the zlib compression algorithm changes. When turned OFF, InnoDB will assume that the zlib compression algorithm doesn't change. @@ -2387,7 +2387,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_VERSION SESSION_VALUE NULL -GLOBAL_VALUE 5.6.36 +GLOBAL_VALUE 5.6.37 GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff 2017-12-21 15:48:47.000000000 +0000 @@ -1,7 +1,7 @@ --- suite/sys_vars/r/sysvars_innodb.result +++ suite/sys_vars/r/sysvars_innodb,xtradb.reject @@ -47,6 +47,20 @@ - ENUM_VALUE_LIST NULL + ENUM_VALUE_LIST OFF,ON READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL +VARIABLE_NAME INNODB_ADAPTIVE_HASH_INDEX_PARTITIONS @@ -22,7 +22,7 @@ SESSION_VALUE NULL GLOBAL_VALUE 150000 @@ -355,6 +369,20 @@ - ENUM_VALUE_LIST NULL + ENUM_VALUE_LIST OFF,ON READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED +VARIABLE_NAME INNODB_BUFFER_POOL_POPULATE @@ -177,7 +177,7 @@ VARIABLE_NAME INNODB_DATA_FILE_PATH SESSION_VALUE NULL GLOBAL_VALUE ibdata1:12M:autoextend -@@ -761,6 +901,20 @@ +@@ -775,6 +915,20 @@ ENUM_VALUE_LIST NULL READ_ONLY YES COMMAND_LINE_ARGUMENT OPTIONAL @@ -198,7 +198,7 @@ VARIABLE_NAME INNODB_ENCRYPTION_ROTATE_KEY_AGE SESSION_VALUE NULL GLOBAL_VALUE 1 -@@ -831,6 +985,20 @@ +@@ -845,6 +999,20 @@ ENUM_VALUE_LIST OFF,ON,FORCE READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -219,7 +219,7 @@ VARIABLE_NAME INNODB_FAST_SHUTDOWN SESSION_VALUE NULL GLOBAL_VALUE 1 -@@ -958,11 +1126,11 @@ +@@ -972,11 +1140,11 @@ READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_FLUSH_LOG_AT_TRX_COMMIT @@ -296,7 +296,7 @@ VARIABLE_NAME INNODB_LOCKS_UNSAFE_FOR_BINLOG SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -1349,6 +1559,62 @@ +@@ -1363,6 +1573,62 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED @@ -359,8 +359,8 @@ VARIABLE_NAME INNODB_LOG_BUFFER_SIZE SESSION_VALUE NULL GLOBAL_VALUE 1048576 -@@ -1377,6 +1643,20 @@ - ENUM_VALUE_LIST NULL +@@ -1391,6 +1657,20 @@ + ENUM_VALUE_LIST OFF,ON READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL +VARIABLE_NAME INNODB_LOG_CHECKSUM_ALGORITHM @@ -379,8 +379,8 @@ +COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME INNODB_LOG_COMPRESSED_PAGES SESSION_VALUE NULL - GLOBAL_VALUE OFF -@@ -1447,6 +1727,34 @@ + GLOBAL_VALUE ON +@@ -1461,6 +1741,34 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED @@ -415,8 +415,8 @@ VARIABLE_NAME INNODB_MAX_DIRTY_PAGES_PCT SESSION_VALUE NULL GLOBAL_VALUE 75.000000 -@@ -1713,6 +2021,62 @@ - ENUM_VALUE_LIST NULL +@@ -1727,6 +2035,62 @@ + ENUM_VALUE_LIST OFF,ON READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL +VARIABLE_NAME INNODB_PRIORITY_CLEANER @@ -478,7 +478,7 @@ VARIABLE_NAME INNODB_PURGE_BATCH_SIZE SESSION_VALUE NULL GLOBAL_VALUE 300 -@@ -1881,6 +2245,48 @@ +@@ -1895,6 +2259,48 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -527,7 +527,7 @@ VARIABLE_NAME INNODB_SCRUB_LOG SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -1909,6 +2315,34 @@ +@@ -1923,6 +2329,34 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -562,7 +562,7 @@ VARIABLE_NAME INNODB_SIMULATE_COMP_FAILURES SESSION_VALUE NULL GLOBAL_VALUE 0 -@@ -1972,7 +2406,7 @@ +@@ -2000,7 +2434,7 @@ DEFAULT_VALUE nulls_equal VARIABLE_SCOPE GLOBAL VARIABLE_TYPE ENUM @@ -571,7 +571,7 @@ NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -@@ -2217,6 +2651,34 @@ +@@ -2245,6 +2679,34 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL @@ -606,7 +606,7 @@ VARIABLE_NAME INNODB_TRX_PURGE_VIEW_UPDATE_ONLY_DEBUG SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -2294,7 +2756,7 @@ +@@ -2322,7 +2784,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN @@ -615,8 +615,8 @@ NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -@@ -2315,6 +2777,20 @@ - ENUM_VALUE_LIST NULL +@@ -2343,6 +2805,20 @@ + ENUM_VALUE_LIST OFF,ON READ_ONLY YES COMMAND_LINE_ARGUMENT NONE +VARIABLE_NAME INNODB_USE_GLOBAL_FLUSH_LOG_AT_TRX_COMMIT @@ -636,8 +636,8 @@ VARIABLE_NAME INNODB_USE_MTFLUSH SESSION_VALUE NULL GLOBAL_VALUE OFF -@@ -2329,6 +2805,20 @@ - ENUM_VALUE_LIST NULL +@@ -2357,6 +2833,20 @@ + ENUM_VALUE_LIST OFF,ON READ_ONLY YES COMMAND_LINE_ARGUMENT NONE +VARIABLE_NAME INNODB_USE_STACKTRACE @@ -657,12 +657,12 @@ VARIABLE_NAME INNODB_USE_SYS_MALLOC SESSION_VALUE NULL GLOBAL_VALUE ON -@@ -2359,12 +2849,12 @@ +@@ -2387,12 +2877,12 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_VERSION SESSION_VALUE NULL --GLOBAL_VALUE 5.6.36 -+GLOBAL_VALUE 5.6.36-82.0 +-GLOBAL_VALUE 5.6.37 ++GLOBAL_VALUE 5.6.36-82.2 GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff 2017-12-21 15:48:47.000000000 +0000 @@ -24,7 +24,7 @@ VARIABLE_SCOPE GLOBAL -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MySQL thread gets very many connection requests in a very short time + VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets very many connection requests in a very short time NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 65535 @@ -144,7 +144,7 @@ @@ -64,7 +64,7 @@ READ_ONLY NO @@ -256,7 +256,7 @@ VARIABLE_TYPE BIGINT UNSIGNED - VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance + VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance. NUMERIC_MIN_VALUE 4096 -NUMERIC_MAX_VALUE 18446744073709551615 +NUMERIC_MAX_VALUE 4294967295 @@ -140,7 +140,7 @@ VARIABLE_SCOPE GLOBAL -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing + VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 @@ -645,7 +645,7 @@ @@ -458,7 +458,7 @@ VARIABLE_COMMENT Limit assumed max number of seeks when looking up rows based on a key NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -2003,7 +2003,7 @@ +@@ -2017,7 +2017,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1024 VARIABLE_SCOPE SESSION @@ -467,7 +467,7 @@ VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored) NUMERIC_MIN_VALUE 4 NUMERIC_MAX_VALUE 8388608 -@@ -2017,7 +2017,7 @@ +@@ -2031,7 +2031,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE SESSION @@ -664,7 +664,7 @@ VARIABLE_SCOPE SESSION -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated + VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 63 @@ -2451,7 +2451,7 @@ @@ -979,7 +979,7 @@ VARIABLE_SCOPE SESSION -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT Limit of query profiling memory + VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 100 @@ -3039,7 +3039,7 @@ @@ -1172,7 +1172,7 @@ NUMERIC_MAX_VALUE 512 @@ -3994,7 +3994,7 @@ VARIABLE_TYPE BIGINT UNSIGNED - VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MySQL will automatically convert it to an on-disk MyISAM or Aria table + VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. NUMERIC_MIN_VALUE 1024 -NUMERIC_MAX_VALUE 18446744073709551615 +NUMERIC_MAX_VALUE 4294967295 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result 2017-12-21 15:48:47.000000000 +0000 @@ -30,7 +30,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT autocommit +VARIABLE_COMMENT If set to 1, the default, all queries are committed immediately. If set to 0, they are only committed upon a COMMIT statement, or rolled back with a ROLLBACK statement. If autocommit is set to 0, and then changed to 1, all open transactions are immediately committed. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -86,7 +86,7 @@ DEFAULT_VALUE 150 VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MySQL thread gets very many connection requests in a very short time +VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets very many connection requests in a very short time NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 65535 NUMERIC_BLOCK_SIZE 1 @@ -114,7 +114,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Allow big result sets by saving all temporary sets on file (Solves most 'table full' errors) +VARIABLE_COMMENT Old variable, which if set to 1, allows large result sets by saving all temporary sets to disk, avoiding 'table full' errors. No longer needed, as the server now handles this automatically. sql_big_tables is a synonym. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -254,7 +254,7 @@ DEFAULT_VALUE 32768 VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance +VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance. NUMERIC_MIN_VALUE 4096 NUMERIC_MAX_VALUE 18446744073709551615 NUMERIC_BLOCK_SIZE 4096 @@ -632,7 +632,7 @@ DEFAULT_VALUE 100 VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing +VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 NUMERIC_BLOCK_SIZE 1 @@ -674,7 +674,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE GLOBAL VARIABLE_TYPE ENUM -VARIABLE_COMMENT Type of DELAY_KEY_WRITE +VARIABLE_COMMENT Specifies how MyISAM tables handles CREATE TABLE DELAY_KEY_WRITE. If set to ON, the default, any DELAY KEY WRITEs are honored. The key buffer is then flushed only when the table closes, speeding up writes. MyISAM tables should be automatically checked upon startup in this case, and --external locking should not be used, as it can lead to index corruption. If set to OFF, DELAY KEY WRITEs are ignored, while if set to ALL, all new opened tables are treated as if created with DELAY KEY WRITEs enabled. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -884,7 +884,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT foreign_key_checks +VARIABLE_COMMENT If set to 1 (the default) foreign key constraints (including ON UPDATE and ON DELETE behavior) InnoDB tables are checked, while if set to 0, they are not checked. 0 is not recommended for normal use, though it can be useful in situations where you know the data is consistent, but want to reload data in a different order from that that specified by parent/child relationships. Setting this variable to 1 does not retrospectively check for inconsistencies introduced while set to 0. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -968,7 +968,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Log connections and queries to a table or log file. Defaults logging to a file 'hostname'.log or a table mysql.general_logif --log-output=TABLE is used +VARIABLE_COMMENT Log connections and queries to a table or log file. Defaults logging to a file 'hostname'.log or a table mysql.general_logif --log-output=TABLE is used. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1038,7 +1038,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_compress +VARIABLE_COMMENT If the zlib compression library is accessible to the server, this will be set to YES, otherwise it will be NO. The COMPRESS() and UNCOMPRESS() functions will only be available if set to YES. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1052,7 +1052,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_crypt +VARIABLE_COMMENT If the crypt() system call is available this variable will be set to YES, otherwise it will be set to NO. If set to NO, the ENCRYPT() function cannot be used. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1066,7 +1066,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_dynamic_loading +VARIABLE_COMMENT If the server supports dynamic loading of plugins, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1080,7 +1080,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_geometry +VARIABLE_COMMENT If the server supports spatial data types, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1094,7 +1094,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_profiling +VARIABLE_COMMENT If statement profiling is available, will be set to YES, otherwise will be set to NO. See SHOW PROFILES and SHOW PROFILE. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1108,7 +1108,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_query_cache +VARIABLE_COMMENT If the server supports the query cache, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1122,7 +1122,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_rtree_keys +VARIABLE_COMMENT If RTREE indexes (used for spatial indexes) are available, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1136,7 +1136,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_ssl +VARIABLE_COMMENT If the server supports secure connections, will be set to YES, otherwise will be set to NO. If set to DISABLED, the server was compiled with TLS support, but was not started with TLS support (see the mysqld options). See also have_openssl. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -2438,7 +2438,7 @@ DEFAULT_VALUE 62 VARIABLE_SCOPE SESSION VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated +VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 63 NUMERIC_BLOCK_SIZE 1 @@ -3012,7 +3012,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT profiling +VARIABLE_COMMENT If set to 1 (0 is default), statement profiling will be enabled. See SHOW PROFILES and SHOW PROFILE. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3026,7 +3026,7 @@ DEFAULT_VALUE 15 VARIABLE_SCOPE SESSION VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT Limit of query profiling memory +VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 100 NUMERIC_BLOCK_SIZE 1 @@ -3054,7 +3054,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE INT UNSIGNED -VARIABLE_COMMENT The version of the client/server protocol used by the MySQL server +VARIABLE_COMMENT The version of the client/server protocol used by the MariaDB server NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 NUMERIC_BLOCK_SIZE 1 @@ -3376,7 +3376,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION ONLY VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT skip_replication +VARIABLE_COMMENT Changes are logged into the binary log with the @@skip_replication flag set. Such events will not be replicated by slaves that run with --replicate-events-marked-for-skip set different from its default of REPLICATE. See Selectively skipping replication of binlog events for more information. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3446,7 +3446,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Log slow queries to a table or log file. Defaults logging to a file 'hostname'-slow.log or a table mysql.slow_log if --log-output=TABLE is used. Must be enabled to activate other slow log options +VARIABLE_COMMENT Log slow queries to a table or log file. Defaults logging to a file 'hostname'-slow.log or a table mysql.slow_log if --log-output=TABLE is used. Must be enabled to activate other slow log options. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3502,7 +3502,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_auto_is_null +VARIABLE_COMMENT If set to 1, the query SELECT * FROM table_name WHERE auto_increment_column IS NULL will return an auto-increment that has just been successfully inserted, the same as the LAST_INSERT_ID() function. Some ODBC programs make use of this IS NULL comparison. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3516,7 +3516,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_big_selects +VARIABLE_COMMENT If set to 0, MariaDB will not perform large SELECTs. See max_join_size for details. If max_join_size is set to anything but DEFAULT, sql_big_selects is automatically set to 0. If sql_big_selects is again set, max_join_size will be ignored. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3530,7 +3530,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_buffer_result +VARIABLE_COMMENT If set to 1 (0 is default), results from SELECT statements are always placed into temporary tables. This can help the server when it takes a long time to send the results to the client by allowing the table locks to be freed early. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3544,7 +3544,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Controls whether logging to the binary log is done +VARIABLE_COMMENT If set to 0 (1 is the default), no logging to the binary log is done for the client. Only clients with the SUPER privilege can update this variable. Can have unintended consequences if set globally, see SET SQL_LOG_BIN. Starting MariaDB 10.1.7, this variable does not affect the replication of events in a Galera cluster. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3558,7 +3558,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_log_off +VARIABLE_COMMENT If set to 1 (0 is the default), no logging to the general query log is done for the client. Only clients with the SUPER privilege can update this variable. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3586,7 +3586,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_notes +VARIABLE_COMMENT If set to 1, the default, warning_count is incremented each time a Note warning is encountered. If set to 0, Note warnings are not recorded. mysqldump has outputs to set this variable to 0 so that no unnecessary increments occur when data is reloaded. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3600,7 +3600,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_quote_show_create +VARIABLE_COMMENT If set to 1, the default, the server will quote identifiers for SHOW CREATE DATABASE, SHOW CREATE TABLE and SHOW CREATE VIEW statements. Quoting is disabled if set to 0. Enable to ensure replications works when identifiers require quoting. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3614,7 +3614,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_safe_updates +VARIABLE_COMMENT If set to 1, UPDATEs and DELETEs need either a key in the WHERE clause, or a LIMIT clause, or else they will aborted. Prevents the common mistake of accidentally deleting or updating every row in a table. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3642,7 +3642,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_warnings +VARIABLE_COMMENT If set to 1, single-row INSERTs will produce a string containing warning information if a warning occurs. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3964,7 +3964,7 @@ DEFAULT_VALUE SYSTEM VARIABLE_SCOPE SESSION VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT time_zone +VARIABLE_COMMENT The current time zone, used to initialize the time zone for a client when it connects. Set to SYSTEM by default, in which the client uses the system time zone value. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3992,7 +3992,7 @@ DEFAULT_VALUE 16777216 VARIABLE_SCOPE SESSION VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MySQL will automatically convert it to an on-disk MyISAM or Aria table +VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 18446744073709551615 NUMERIC_BLOCK_SIZE 1 @@ -4048,7 +4048,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Set default transaction access mode to read only. +VARIABLE_COMMENT Default transaction access mode. If set to OFF, the default, access is read/write. If set to ON, access is read-only. The SET TRANSACTION statement can also change the value of this variable. See SET TRANSACTION and START TRANSACTION. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4062,7 +4062,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT unique_checks +VARIABLE_COMMENT If set to 1, the default, secondary indexes in InnoDB tables are performed. If set to 0, storage engines can (but are not required to) assume that duplicate keys are not present in input data. Set to 0 to speed up imports of large tables to InnoDB. The storage engine will still issue a duplicate key error if it detects one, even if set to 0. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4162,7 +4162,7 @@ VARIABLE_NAME HAVE_OPENSSL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_openssl +VARIABLE_COMMENT Comparing have_openssl with have_ssl will indicate whether YaSSL or openssl was used. If YaSSL, have_ssl will be YES, but have_openssl will be NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4172,7 +4172,7 @@ VARIABLE_NAME HAVE_SYMLINK VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_symlink +VARIABLE_COMMENT If symbolic link support is enabled, will be set to YES, otherwise will be set to NO. Required for the INDEX DIRECTORY and DATA DIRECTORY table options (see CREATE TABLE) and Windows symlink support. Will be set to DISABLED if the server is started with the --skip-symbolic-links option. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4262,7 +4262,7 @@ VARIABLE_NAME VERSION VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT Server version +VARIABLE_COMMENT Server version number. It may also include a suffix with configuration or build information. -debug indicates debugging support was enabled on the server, and -log indicates at least one of the binary log, general log or slow query log are enabled, for example 10.1.1-MariaDB-mariadb1precise-log. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4272,7 +4272,7 @@ VARIABLE_NAME VERSION_COMMENT VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT version_comment +VARIABLE_COMMENT Value of the COMPILATION_COMMENT option specified by CMake when building MariaDB, for example mariadb.org binary distribution. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4282,7 +4282,7 @@ VARIABLE_NAME VERSION_COMPILE_MACHINE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT version_compile_machine +VARIABLE_COMMENT The machine type or architecture MariaDB was built on, for example i686. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4292,7 +4292,7 @@ VARIABLE_NAME VERSION_COMPILE_OS VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT version_compile_os +VARIABLE_COMMENT Operating system that MariaDB was built on, for example debian-linux-gnu. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff 2017-12-21 15:48:47.000000000 +0000 @@ -24,7 +24,7 @@ VARIABLE_SCOPE GLOBAL -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MySQL thread gets very many connection requests in a very short time + VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets very many connection requests in a very short time NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 65535 @@ -144,7 +144,7 @@ @@ -64,7 +64,7 @@ READ_ONLY NO @@ -256,7 +256,7 @@ VARIABLE_TYPE BIGINT UNSIGNED - VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance + VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance. NUMERIC_MIN_VALUE 4096 -NUMERIC_MAX_VALUE 18446744073709551615 +NUMERIC_MAX_VALUE 4294967295 @@ -140,7 +140,7 @@ VARIABLE_SCOPE GLOBAL -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing + VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 @@ -659,7 +659,7 @@ @@ -458,7 +458,7 @@ VARIABLE_COMMENT Limit assumed max number of seeks when looking up rows based on a key NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -2199,7 +2199,7 @@ +@@ -2213,7 +2213,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 1024 VARIABLE_SCOPE SESSION @@ -467,7 +467,7 @@ VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored) NUMERIC_MIN_VALUE 4 NUMERIC_MAX_VALUE 8388608 -@@ -2213,7 +2213,7 @@ +@@ -2227,7 +2227,7 @@ GLOBAL_VALUE_ORIGIN COMPILE-TIME DEFAULT_VALUE 0 VARIABLE_SCOPE SESSION @@ -664,7 +664,7 @@ VARIABLE_SCOPE SESSION -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated + VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 63 @@ -2647,7 +2647,7 @@ @@ -979,7 +979,7 @@ VARIABLE_SCOPE SESSION -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED - VARIABLE_COMMENT Limit of query profiling memory + VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 100 @@ -3235,7 +3235,7 @@ @@ -1208,7 +1208,7 @@ NUMERIC_MAX_VALUE 512 @@ -4764,7 +4764,7 @@ VARIABLE_TYPE BIGINT UNSIGNED - VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MySQL will automatically convert it to an on-disk MyISAM or Aria table + VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. NUMERIC_MIN_VALUE 1024 -NUMERIC_MAX_VALUE 18446744073709551615 +NUMERIC_MAX_VALUE 4294967295 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result 2017-12-21 15:48:47.000000000 +0000 @@ -30,7 +30,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT autocommit +VARIABLE_COMMENT If set to 1, the default, all queries are committed immediately. If set to 0, they are only committed upon a COMMIT statement, or rolled back with a ROLLBACK statement. If autocommit is set to 0, and then changed to 1, all open transactions are immediately committed. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -86,7 +86,7 @@ DEFAULT_VALUE 150 VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MySQL thread gets very many connection requests in a very short time +VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets very many connection requests in a very short time NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 65535 NUMERIC_BLOCK_SIZE 1 @@ -114,7 +114,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Allow big result sets by saving all temporary sets on file (Solves most 'table full' errors) +VARIABLE_COMMENT Old variable, which if set to 1, allows large result sets by saving all temporary sets to disk, avoiding 'table full' errors. No longer needed, as the server now handles this automatically. sql_big_tables is a synonym. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -254,7 +254,7 @@ DEFAULT_VALUE 32768 VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance +VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance. NUMERIC_MIN_VALUE 4096 NUMERIC_MAX_VALUE 18446744073709551615 NUMERIC_BLOCK_SIZE 4096 @@ -646,7 +646,7 @@ DEFAULT_VALUE 100 VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing +VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 NUMERIC_BLOCK_SIZE 1 @@ -688,7 +688,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE GLOBAL VARIABLE_TYPE ENUM -VARIABLE_COMMENT Type of DELAY_KEY_WRITE +VARIABLE_COMMENT Specifies how MyISAM tables handles CREATE TABLE DELAY_KEY_WRITE. If set to ON, the default, any DELAY KEY WRITEs are honored. The key buffer is then flushed only when the table closes, speeding up writes. MyISAM tables should be automatically checked upon startup in this case, and --external locking should not be used, as it can lead to index corruption. If set to OFF, DELAY KEY WRITEs are ignored, while if set to ALL, all new opened tables are treated as if created with DELAY KEY WRITEs enabled. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -912,7 +912,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT foreign_key_checks +VARIABLE_COMMENT If set to 1 (the default) foreign key constraints (including ON UPDATE and ON DELETE behavior) InnoDB tables are checked, while if set to 0, they are not checked. 0 is not recommended for normal use, though it can be useful in situations where you know the data is consistent, but want to reload data in a different order from that that specified by parent/child relationships. Setting this variable to 1 does not retrospectively check for inconsistencies introduced while set to 0. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -996,7 +996,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Log connections and queries to a table or log file. Defaults logging to a file 'hostname'.log or a table mysql.general_logif --log-output=TABLE is used +VARIABLE_COMMENT Log connections and queries to a table or log file. Defaults logging to a file 'hostname'.log or a table mysql.general_logif --log-output=TABLE is used. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1150,7 +1150,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_compress +VARIABLE_COMMENT If the zlib compression library is accessible to the server, this will be set to YES, otherwise it will be NO. The COMPRESS() and UNCOMPRESS() functions will only be available if set to YES. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1164,7 +1164,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_crypt +VARIABLE_COMMENT If the crypt() system call is available this variable will be set to YES, otherwise it will be set to NO. If set to NO, the ENCRYPT() function cannot be used. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1178,7 +1178,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_dynamic_loading +VARIABLE_COMMENT If the server supports dynamic loading of plugins, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1192,7 +1192,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_geometry +VARIABLE_COMMENT If the server supports spatial data types, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1206,7 +1206,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_profiling +VARIABLE_COMMENT If statement profiling is available, will be set to YES, otherwise will be set to NO. See SHOW PROFILES and SHOW PROFILE. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1220,7 +1220,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_query_cache +VARIABLE_COMMENT If the server supports the query cache, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1234,7 +1234,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_rtree_keys +VARIABLE_COMMENT If RTREE indexes (used for spatial indexes) are available, will be set to YES, otherwise will be set to NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1248,7 +1248,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_ssl +VARIABLE_COMMENT If the server supports secure connections, will be set to YES, otherwise will be set to NO. If set to DISABLED, the server was compiled with TLS support, but was not started with TLS support (see the mysqld options). See also have_openssl. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -1822,7 +1822,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves +VARIABLE_COMMENT Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -2634,7 +2634,7 @@ DEFAULT_VALUE 62 VARIABLE_SCOPE SESSION VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated +VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value; if set to 63, the optimizer will switch to the original find_best search. NOTE: The value 63 and its associated behaviour is deprecated. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 63 NUMERIC_BLOCK_SIZE 1 @@ -3208,7 +3208,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT profiling +VARIABLE_COMMENT If set to 1 (0 is default), statement profiling will be enabled. See SHOW PROFILES and SHOW PROFILE. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3222,7 +3222,7 @@ DEFAULT_VALUE 15 VARIABLE_SCOPE SESSION VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT Limit of query profiling memory +VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 100 NUMERIC_BLOCK_SIZE 1 @@ -3250,7 +3250,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE INT UNSIGNED -VARIABLE_COMMENT The version of the client/server protocol used by the MySQL server +VARIABLE_COMMENT The version of the client/server protocol used by the MariaDB server NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 NUMERIC_BLOCK_SIZE 1 @@ -3474,7 +3474,7 @@ DEFAULT_VALUE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT The location and name to use for relay logs +VARIABLE_COMMENT The location and name to use for relay logs. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3502,7 +3502,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT The location and name to use for the file that keeps a list of the last relay logs +VARIABLE_COMMENT The location and name to use for the file that keeps a list of the last relay logs. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3516,7 +3516,7 @@ DEFAULT_VALUE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT The location and name of the file that remembers where the SQL replication thread is in the relay logs +VARIABLE_COMMENT The location and name of the file that remembers where the SQL replication thread is in the relay logs. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3530,7 +3530,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT if disabled - do not purge relay logs. if enabled - purge them as soon as they are no more needed +VARIABLE_COMMENT if disabled - do not purge relay logs. if enabled - purge them as soon as they are no more needed. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3544,7 +3544,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Enables automatic relay log recovery right after the database startup, which means that the IO Thread starts re-fetching from the master right after the last transaction processed +VARIABLE_COMMENT Enables automatic relay log recovery right after the database startup, which means that the IO Thread starts re-fetching from the master right after the last transaction processed. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3852,7 +3852,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION ONLY VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT skip_replication +VARIABLE_COMMENT Changes are logged into the binary log with the @@skip_replication flag set. Such events will not be replicated by slaves that run with --replicate-events-marked-for-skip set different from its default of REPLICATE. See Selectively skipping replication of binlog events for more information. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -3922,7 +3922,7 @@ DEFAULT_VALUE STRICT VARIABLE_SCOPE GLOBAL VARIABLE_TYPE ENUM -VARIABLE_COMMENT How replication events should be executed. Legal values are STRICT (default) and IDEMPOTENT. In IDEMPOTENT mode, replication will not stop for operations that are idempotent. For example, in row based replication attempts to delete rows that doesn't exist will be ignored. In STRICT mode, replication will stop on any unexpected difference between the master and the slave +VARIABLE_COMMENT How replication events should be executed. Legal values are STRICT (default) and IDEMPOTENT. In IDEMPOTENT mode, replication will not stop for operations that are idempotent. For example, in row based replication attempts to delete rows that doesn't exist will be ignored. In STRICT mode, replication will stop on any unexpected difference between the master and the slave. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4104,7 +4104,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Log slow queries to a table or log file. Defaults logging to a file 'hostname'-slow.log or a table mysql.slow_log if --log-output=TABLE is used. Must be enabled to activate other slow log options +VARIABLE_COMMENT Log slow queries to a table or log file. Defaults logging to a file 'hostname'-slow.log or a table mysql.slow_log if --log-output=TABLE is used. Must be enabled to activate other slow log options. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4160,7 +4160,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_auto_is_null +VARIABLE_COMMENT If set to 1, the query SELECT * FROM table_name WHERE auto_increment_column IS NULL will return an auto-increment that has just been successfully inserted, the same as the LAST_INSERT_ID() function. Some ODBC programs make use of this IS NULL comparison. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4174,7 +4174,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_big_selects +VARIABLE_COMMENT If set to 0, MariaDB will not perform large SELECTs. See max_join_size for details. If max_join_size is set to anything but DEFAULT, sql_big_selects is automatically set to 0. If sql_big_selects is again set, max_join_size will be ignored. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4188,7 +4188,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_buffer_result +VARIABLE_COMMENT If set to 1 (0 is default), results from SELECT statements are always placed into temporary tables. This can help the server when it takes a long time to send the results to the client by allowing the table locks to be freed early. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4202,7 +4202,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Controls whether logging to the binary log is done +VARIABLE_COMMENT If set to 0 (1 is the default), no logging to the binary log is done for the client. Only clients with the SUPER privilege can update this variable. Can have unintended consequences if set globally, see SET SQL_LOG_BIN. Starting MariaDB 10.1.7, this variable does not affect the replication of events in a Galera cluster. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4216,7 +4216,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_log_off +VARIABLE_COMMENT If set to 1 (0 is the default), no logging to the general query log is done for the client. Only clients with the SUPER privilege can update this variable. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4244,7 +4244,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_notes +VARIABLE_COMMENT If set to 1, the default, warning_count is incremented each time a Note warning is encountered. If set to 0, Note warnings are not recorded. mysqldump has outputs to set this variable to 0 so that no unnecessary increments occur when data is reloaded. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4258,7 +4258,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_quote_show_create +VARIABLE_COMMENT If set to 1, the default, the server will quote identifiers for SHOW CREATE DATABASE, SHOW CREATE TABLE and SHOW CREATE VIEW statements. Quoting is disabled if set to 0. Enable to ensure replications works when identifiers require quoting. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4272,7 +4272,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_safe_updates +VARIABLE_COMMENT If set to 1, UPDATEs and DELETEs need either a key in the WHERE clause, or a LIMIT clause, or else they will aborted. Prevents the common mistake of accidentally deleting or updating every row in a table. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4314,7 +4314,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT sql_warnings +VARIABLE_COMMENT If set to 1, single-row INSERTs will produce a string containing warning information if a warning occurs. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4734,7 +4734,7 @@ DEFAULT_VALUE SYSTEM VARIABLE_SCOPE SESSION VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT time_zone +VARIABLE_COMMENT The current time zone, used to initialize the time zone for a client when it connects. Set to SYSTEM by default, in which the client uses the system time zone value. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4762,7 +4762,7 @@ DEFAULT_VALUE 16777216 VARIABLE_SCOPE SESSION VARIABLE_TYPE BIGINT UNSIGNED -VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MySQL will automatically convert it to an on-disk MyISAM or Aria table +VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 18446744073709551615 NUMERIC_BLOCK_SIZE 1 @@ -4818,7 +4818,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Set default transaction access mode to read only. +VARIABLE_COMMENT Default transaction access mode. If set to OFF, the default, access is read/write. If set to ON, access is read-only. The SET TRANSACTION statement can also change the value of this variable. See SET TRANSACTION and START TRANSACTION. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4832,7 +4832,7 @@ DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT unique_checks +VARIABLE_COMMENT If set to 1, the default, secondary indexes in InnoDB tables are performed. If set to 0, storage engines can (but are not required to) assume that duplicate keys are not present in input data. Set to 0 to speed up imports of large tables to InnoDB. The storage engine will still issue a duplicate key error if it detects one, even if set to 0. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4932,7 +4932,7 @@ VARIABLE_NAME HAVE_OPENSSL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_openssl +VARIABLE_COMMENT Comparing have_openssl with have_ssl will indicate whether YaSSL or openssl was used. If YaSSL, have_ssl will be YES, but have_openssl will be NO. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -4942,7 +4942,7 @@ VARIABLE_NAME HAVE_SYMLINK VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT have_symlink +VARIABLE_COMMENT If symbolic link support is enabled, will be set to YES, otherwise will be set to NO. Required for the INDEX DIRECTORY and DATA DIRECTORY table options (see CREATE TABLE) and Windows symlink support. Will be set to DISABLED if the server is started with the --skip-symbolic-links option. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -5032,7 +5032,7 @@ VARIABLE_NAME VERSION VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT Server version +VARIABLE_COMMENT Server version number. It may also include a suffix with configuration or build information. -debug indicates debugging support was enabled on the server, and -log indicates at least one of the binary log, general log or slow query log are enabled, for example 10.1.1-MariaDB-mariadb1precise-log. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -5042,7 +5042,7 @@ VARIABLE_NAME VERSION_COMMENT VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT version_comment +VARIABLE_COMMENT Value of the COMPILATION_COMMENT option specified by CMake when building MariaDB, for example mariadb.org binary distribution. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -5052,7 +5052,7 @@ VARIABLE_NAME VERSION_COMPILE_MACHINE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT version_compile_machine +VARIABLE_COMMENT The machine type or architecture MariaDB was built on, for example i686. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -5062,7 +5062,7 @@ VARIABLE_NAME VERSION_COMPILE_OS VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT version_compile_os +VARIABLE_COMMENT Operating system that MariaDB was built on, for example debian-linux-gnu. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_wsrep.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_wsrep.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/sysvars_wsrep.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/sysvars_wsrep.result 2017-12-21 15:48:47.000000000 +0000 @@ -288,7 +288,7 @@ DEFAULT_VALUE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT Node address +VARIABLE_COMMENT Specifies the node's network address, in the format ip address[:port]. Used in situations where autoguessing is not reliable. As of MariaDB 10.1.8, supports IPv6. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -316,7 +316,7 @@ DEFAULT_VALUE HOSTNAME VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT Node name +VARIABLE_COMMENT Name of this node. This name can be used in wsrep_sst_donor as a preferred donor. Note that multiple nodes in a cluster can have the same name. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -372,7 +372,7 @@ DEFAULT_VALUE NULL VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT wsrep patch version +VARIABLE_COMMENT Wsrep patch version, for example wsrep_MAJVER.MINVER. NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -400,7 +400,7 @@ DEFAULT_VALUE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR -VARIABLE_COMMENT provider specific options +VARIABLE_COMMENT Semicolon (;) separated list of wsrep options (see wsrep_provider_options documentation). NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -442,7 +442,7 @@ DEFAULT_VALUE OFF VARIABLE_SCOPE GLOBAL VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT Should MySQL slave be restarted automatically, when node joins back to cluster +VARIABLE_COMMENT Should MariaDB slave be restarted automatically, when node joins back to cluster NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL @@ -598,7 +598,7 @@ VARIABLE_TYPE INT UNSIGNED VARIABLE_COMMENT Ensure "synchronous" read view before executing an operation of the type specified by bitmask: 1 - READ(includes SELECT, SHOW and BEGIN/START TRANSACTION); 2 - UPDATE and DELETE; 4 - INSERT and REPLACE NUMERIC_MIN_VALUE 0 -NUMERIC_MAX_VALUE 7 +NUMERIC_MAX_VALUE 15 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/wsrep_sync_wait_basic.result mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/wsrep_sync_wait_basic.result --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/r/wsrep_sync_wait_basic.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/r/wsrep_sync_wait_basic.result 2017-12-21 15:48:47.000000000 +0000 @@ -34,11 +34,9 @@ @@session.wsrep_sync_wait 7 SET @@session.wsrep_sync_wait=8; -Warnings: -Warning 1292 Truncated incorrect wsrep_sync_wait value: '8' SELECT @@session.wsrep_sync_wait; @@session.wsrep_sync_wait -7 +8 # invalid values SET @@global.wsrep_sync_wait=NULL; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_now_basic.test mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_now_basic.test --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_now_basic.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_now_basic.test 2017-12-21 15:48:47.000000000 +0000 @@ -5,8 +5,31 @@ -- source include/have_innodb.inc # Check the default value -SET @orig = @@global.innodb_buffer_pool_dump_now; -SELECT @orig; +SELECT @@global.innodb_buffer_pool_dump_now; + +-- let $file = `SELECT CONCAT(@@datadir, @@global.innodb_buffer_pool_filename)` +-- error 0,1 +-- remove_file $file + +SELECT variable_value INTO @old_dump_status FROM information_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'; + +# A previous test could have run buffer pool dump already; +# in this case we want to make sure that the current time is different +# from the timestamp in the status variable. +# We should have had a smart wait condition here, like the commented one below, +# let $wait_condition = +# SELECT TRIM(SUBSTR('$old_status', -8)) != DATE_FORMAT(CURTIME(), '%k:%i:%s'); +# -- source include/wait_condition.inc + +# ... but we can't because of MDEV-9867, so there will be just sleep instead. +# And it might be not enough to sleep one second, so we'll have to sleep two. + +if (`SELECT variable_value LIKE '%completed at%' FROM information_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'`) +{ + -- sleep 2 +} # Do the dump SET GLOBAL innodb_buffer_pool_dump_now = ON; @@ -15,11 +38,11 @@ # Wait for the dump to complete let $wait_condition = - SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) dump completed at ' + SELECT variable_value != @old_dump_status + AND SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) dump completed at ' FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'; -- source include/wait_condition.inc # Confirm that the dump file has been created --- let $file = `SELECT CONCAT(@@datadir, @@global.innodb_buffer_pool_filename)` -- file_exists $file diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_pct_basic.test mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_pct_basic.test --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_pct_basic.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_dump_pct_basic.test 2017-12-21 15:48:47.000000000 +0000 @@ -8,19 +8,15 @@ SET @orig = @@global.innodb_buffer_pool_dump_pct; SELECT @orig; -# Do the dump -SET GLOBAL innodb_buffer_pool_dump_pct=3, GLOBAL innodb_buffer_pool_dump_now = ON; +SET GLOBAL innodb_buffer_pool_dump_pct=3; -# Wait for the dump to complete -let $wait_condition = - SELECT SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) dump completed at ' - FROM information_schema.global_status - WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'; --- source include/wait_condition.inc +--echo # Do the dump -# Confirm that the dump file has been created --- let $file = `SELECT CONCAT(@@datadir, @@global.innodb_buffer_pool_filename)` --- file_exists $file +--disable_query_log +--disable_result_log +--source innodb_buffer_pool_dump_now_basic.test +--enable_result_log +--enable_query_log --disable_warnings SET GLOBAL innodb_buffer_pool_dump_pct=0; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.opt mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.opt --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--innodb-buffer-pool-load-at-startup=off diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/innodb_buffer_pool_load_now_basic.test 2017-12-21 15:48:47.000000000 +0000 @@ -5,42 +5,22 @@ -- source include/have_innodb.inc # Check the default value -SET @orig = @@global.innodb_buffer_pool_load_now; -SELECT @orig; +SELECT @@global.innodb_buffer_pool_load_now; -let $old_status= `SELECT variable_value FROM information_schema.global_status - WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'`; +# Make sure there is a dump file to load -# A previous test could have run buffer pool dump already; -# in this case we want to make sure that the current time is different -# from the timestamp in the status variable. -# We should have had a smart wait condition here, like the commented one below, -# but we can't because of MDEV-9867, so there will be just sleep instead. -# And it might be not enough to sleep one second, so we'll have to sleep two. -# let $wait_condition = -# SELECT TRIM(SUBSTR('$old_status', -8)) != DATE_FORMAT(CURTIME(), '%k:%i:%s'); -# -- source include/wait_condition.inc - -if (`SELECT variable_value LIKE '%dump completed at%' FROM information_schema.global_status - WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'`) -{ - -- sleep 2 -} - -# Do the dump -SET GLOBAL innodb_buffer_pool_dump_now = ON; - -# Wait for the dump to complete -let $wait_condition = - SELECT variable_value != '$old_status' - AND SUBSTR(variable_value, 1, 33) = 'Buffer pool(s) dump completed at ' - FROM information_schema.global_status - WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'; --- source include/wait_condition.inc - -# Confirm the file is really created -- let $file = `SELECT CONCAT(@@datadir, @@global.innodb_buffer_pool_filename)` +-- error 0,1 -- file_exists $file +if ($errno) +{ + # Dump file does not exist, get it created + --disable_query_log + --disable_result_log + --source innodb_buffer_pool_dump_now_basic.test + --enable_result_log + --enable_query_log +} # Load the dump SET GLOBAL innodb_buffer_pool_load_now = ON; diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/wsrep_on_basic.opt mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/wsrep_on_basic.opt --- mariadb-10.1-10.1.25/mysql-test/suite/sys_vars/t/wsrep_on_basic.opt 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/sys_vars/t/wsrep_on_basic.opt 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1 @@ +--innodb-lock-schedule-algorithm=FCFS diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/vcol/r/vcol_misc.result mariadb-10.1-10.1.30/mysql-test/suite/vcol/r/vcol_misc.result --- mariadb-10.1-10.1.25/mysql-test/suite/vcol/r/vcol_misc.result 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/vcol/r/vcol_misc.result 2017-12-21 15:48:47.000000000 +0000 @@ -338,7 +338,26 @@ drop table t1; set sql_mode=default; # -# Start of 10.1 tests +# MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value +# +SET sql_mode='NO_ZERO_IN_DATE'; +CREATE TABLE t1 +( +a datetime DEFAULT NULL, +b datetime DEFAULT NULL, +c time GENERATED ALWAYS AS (timediff(`a`,`b`)) VIRTUAL +); +INSERT INTO t1 VALUES ('2008-12-31 23:59:59.000001','2008-12-30 01:01:01.000002',DEFAULT); +SELECT * FROM t1; +a b c +2008-12-31 23:59:59 2008-12-30 01:01:01 46:58:58 +DROP TABLE t1; +SET sql_mode=DEFAULT; +# +# End of 5.5 tests +# +# +# End of 10.0 tests # # # MDEV-8441 Bad SHOW CREATE TABLE output for a table with a virtual column diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/vcol/t/vcol_misc.test mariadb-10.1-10.1.30/mysql-test/suite/vcol/t/vcol_misc.test --- mariadb-10.1-10.1.25/mysql-test/suite/vcol/t/vcol_misc.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/vcol/t/vcol_misc.test 2017-12-21 15:48:47.000000000 +0000 @@ -302,9 +302,28 @@ drop table t1; set sql_mode=default; +--echo # +--echo # MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value +--echo # + +SET sql_mode='NO_ZERO_IN_DATE'; +CREATE TABLE t1 +( + a datetime DEFAULT NULL, + b datetime DEFAULT NULL, + c time GENERATED ALWAYS AS (timediff(`a`,`b`)) VIRTUAL +); +INSERT INTO t1 VALUES ('2008-12-31 23:59:59.000001','2008-12-30 01:01:01.000002',DEFAULT); +SELECT * FROM t1; +DROP TABLE t1; +SET sql_mode=DEFAULT; --echo # ---echo # Start of 10.1 tests +--echo # End of 5.5 tests +--echo # + +--echo # +--echo # End of 10.0 tests --echo # --echo # @@ -328,7 +347,6 @@ SELECT COLUMN_GET(@aaa, 'price' AS INT) aaa; SELECT COLUMN_GET(@aaa, 'price' AS DOUBLE) aaa; - --echo # --echo # End of 10.1 tests --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/wsrep/disabled.def mariadb-10.1-10.1.30/mysql-test/suite/wsrep/disabled.def --- mariadb-10.1-10.1.25/mysql-test/suite/wsrep/disabled.def 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/wsrep/disabled.def 2017-12-21 15:48:47.000000000 +0000 @@ -1 +1 @@ -foreign_key : MDEV-7915 + diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/wsrep/t/mdev_6832.opt mariadb-10.1-10.1.30/mysql-test/suite/wsrep/t/mdev_6832.opt --- mariadb-10.1-10.1.25/mysql-test/suite/wsrep/t/mdev_6832.opt 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/wsrep/t/mdev_6832.opt 2017-12-21 15:48:47.000000000 +0000 @@ -1 +1 @@ ---wsrep-provider=$WSREP_PROVIDER --wsrep-cluster-address=gcomm:// --wsrep-on=1 --wsrep_causal_reads=ON +--wsrep-provider=$WSREP_PROVIDER --wsrep-cluster-address=gcomm:// --wsrep-on=1 diff -Nru mariadb-10.1-10.1.25/mysql-test/suite/wsrep/t/mdev_7798.opt mariadb-10.1-10.1.30/mysql-test/suite/wsrep/t/mdev_7798.opt --- mariadb-10.1-10.1.25/mysql-test/suite/wsrep/t/mdev_7798.opt 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/suite/wsrep/t/mdev_7798.opt 2017-12-21 15:48:47.000000000 +0000 @@ -1 +1 @@ ---wsrep-provider=$WSREP_PROVIDER --wsrep-cluster-address=gcomm:// --wsrep-on=1 --wsrep_causal_reads=ON +--wsrep-provider=$WSREP_PROVIDER --wsrep-cluster-address=gcomm:// --wsrep-on=1 diff -Nru mariadb-10.1-10.1.25/mysql-test/t/alter_table_online.test mariadb-10.1-10.1.30/mysql-test/t/alter_table_online.test --- mariadb-10.1-10.1.25/mysql-test/t/alter_table_online.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/alter_table_online.test 2017-12-21 15:48:47.000000000 +0000 @@ -285,6 +285,8 @@ ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE; DROP TABLE t1; +# End of 10.0 tests + # # MDEV-11335 Changing delay_key_write option for MyISAM table should not copy rows # @@ -306,3 +308,5 @@ insert t1 values (1,2),(2,3),(3,4); show status like 'Feature_delay_key_write'; drop table t1; + +# End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/alter_table.test mariadb-10.1-10.1.30/mysql-test/t/alter_table.test --- mariadb-10.1-10.1.25/mysql-test/t/alter_table.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/alter_table.test 2017-12-21 15:48:47.000000000 +0000 @@ -1254,6 +1254,48 @@ deallocate prepare stmt1; drop table t2; +--echo # +--echo # MDEV-8960 Can't refer the same column twice in one ALTER TABLE +--echo # + +CREATE TABLE t1 ( + `a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; + +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL, +ALTER COLUMN `consultant_id` DROP DEFAULT; + +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 ( + `a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; + +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL, +ALTER COLUMN `consultant_id` SET DEFAULT 2; +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 ( + `a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; + +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2, +ALTER COLUMN `consultant_id` DROP DEFAULT; +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t1 ( + `a` int(11) DEFAULT NULL +) DEFAULT CHARSET=utf8; + +ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2, +ALTER COLUMN `consultant_id` DROP DEFAULT, +MODIFY COLUMN `consultant_id` BIGINT; +SHOW CREATE TABLE t1; +DROP TABLE t1; + # # Test of ALTER TABLE IF [NOT] EXISTS # @@ -1768,7 +1810,7 @@ DROP TABLE t1; --echo # ---echo # Start of 10.1 tests +--echo # End of 10.0 tests --echo # --echo # @@ -1788,3 +1830,7 @@ ALTER TABLE t1 DROP INDEX i1, ADD INDEX i1(a) COMMENT 'comment2'; SHOW CREATE TABLE t1; DROP TABLE t1; + +--echo # +--echo # End of 10.1 tests +--echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/binary_to_hex.test mariadb-10.1-10.1.30/mysql-test/t/binary_to_hex.test --- mariadb-10.1-10.1.25/mysql-test/t/binary_to_hex.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/binary_to_hex.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,76 @@ +# === Purpose === +# The purpose of this test case is to make +# sure that the binary data in tables is printed +# as hex when the option binary-as-hex is enabled. +# +# === Related bugs and/or worklogs === +# Bug #25340722 - PRINT BINARY DATA AS HEX IN THE MYSQL +# CLIENT (CONTRIBUTION) +# + +# Save the initial number of concurrent sessions +--source include/count_sessions.inc +--source include/not_embedded.inc + +USE test; +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +CREATE TABLE t1 (c1 TINYBLOB, + c2 BLOB, + c3 MEDIUMBLOB, + c4 LONGBLOB, + c5 TEXT, + c6 BIT(1), + c7 CHAR, + c8 VARCHAR(10), + c9 GEOMETRY) CHARACTER SET = binary; + +SHOW CREATE TABLE t1; + +INSERT INTO t1 VALUES ('tinyblob-text readable', 'blob-text readable', + 'mediumblob-text readable', 'longblob-text readable', + 'text readable', b'1', 'c', 'variable', + POINT(1, 1)); + +CREATE TABLE t2(id int, `col1` binary(10),`col2` blob); + +SHOW CREATE TABLE t2; + +INSERT INTO t2 VALUES (1, X'AB1234', X'123ABC'), (2, X'DE1234', X'123DEF'); + +--echo #Print the table contents when binary-as-hex option is off. +--replace_column 6 # 9 # +SELECT * FROM t1; + +--replace_column 2 # 3 # +SELECT * FROM t2; + +--echo #Print the table contents after turning on the binary-as-hex option +--echo +--echo #Print the table contents in tab format +--echo +--exec $MYSQL test --binary-as-hex -e "SELECT * FROM t1; SELECT * FROM t2;" +--echo +--echo #Print the table contents in table format +--echo +--exec $MYSQL test --binary-as-hex --table -e "SELECT * FROM t1; SELECT * FROM t2 WHERE col2=0x123ABC;" +--echo +--echo #Print the table contents vertically +--echo +--exec $MYSQL test --binary-as-hex --vertical -e "SELECT * FROM t1;" +--echo +--echo #Print the table contents in xml format +--echo +--exec $MYSQL test --binary-as-hex --xml -e "SELECT * FROM t1; SELECT * FROM t2;" +--echo +--echo #Print the table contents in html format +--echo +--exec $MYSQL test --binary-as-hex --html -e "SELECT * FROM t1; SELECT * FROM t2;" + +#Cleanup +DROP TABLE t1, t2; + +# Wait till all disconnects are completed + --source include/wait_until_count_sessions.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/t/case.test mariadb-10.1-10.1.30/mysql-test/t/case.test --- mariadb-10.1-10.1.25/mysql-test/t/case.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/case.test 2017-12-21 15:48:47.000000000 +0000 @@ -174,6 +174,18 @@ --echo End of 5.0 tests +--echo # +--echo # Bug#19875294 ASSERTION `SRC' FAILED IN MY_STRNXFRM_UNICODE +--echo # (SIG 6 -STRINGS/CTYPE-UTF8.C:5151) +--echo # + +set @@sql_mode=''; +CREATE TABLE t1(c1 SET('','')CHARACTER SET ucs2); +INSERT INTO t1 VALUES(990101.102); +SELECT COALESCE(c1)FROM t1 ORDER BY 1; +DROP TABLE t1; +set @@sql_mode=default; + # # lp:1001510 # Bug #11764313 57135: CRASH IN ITEM_FUNC_CASE::FIND_ITEM WITH CASE WHEN diff -Nru mariadb-10.1-10.1.25/mysql-test/t/count_distinct.test mariadb-10.1-10.1.30/mysql-test/t/count_distinct.test --- mariadb-10.1-10.1.25/mysql-test/t/count_distinct.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/count_distinct.test 2017-12-21 15:48:47.000000000 +0000 @@ -107,3 +107,48 @@ select count(distinct i) from v1; drop table t1; drop view v1; + +# +# MDEV-12136 SELECT COUNT(DISTINCT) returns the wrong value when tmp_table_size is limited +# +create table t1 (user_id char(64) character set utf8); +insert t1 values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17); +set @@tmp_table_size = 1024; +select count(distinct user_id) from t1; +alter table t1 modify user_id char(128) character set utf8; +select count(distinct user_id) from t1; +drop table t1; +set @@tmp_table_size = default; + +# +# MDEV-13457: Wrong result for aggregate function with distinct clause when the value for +# tmp_table_size is small +# + +create table t1 ( +a VARCHAR(1020), +b int +); +insert into t1 values +( 0 , 1 ), +( 1 , 2 ), +( 2 , 3 ), +( 3 , 4 ), +( 4 , 5 ), +( 5 , 6 ), +( 6 , 7 ), +( 7 , 8 ), +( 8 , 9 ), +( 9 , 10 ), +( 0 , 11 ), +( 1 , 12 ), +( 2 , 13 ), +( 3 , 14 ); +set @@tmp_table_size=1024; +select count(distinct a) from t1; +drop table t1; +set @@tmp_table_size = default; + +# +# End of 5.5 tests +# diff -Nru mariadb-10.1-10.1.25/mysql-test/t/create_drop_event.test mariadb-10.1-10.1.30/mysql-test/t/create_drop_event.test --- mariadb-10.1-10.1.25/mysql-test/t/create_drop_event.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/create_drop_event.test 2017-12-21 15:48:47.000000000 +0000 @@ -10,11 +10,13 @@ CREATE EVENT ev1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO t1 VALUES (10); SELECT EVENT_NAME, EVENT_DEFINITION FROM INFORMATION_SCHEMA.EVENTS; +--source include/count_sessions.inc SET GLOBAL event_scheduler=on; let $wait_condition= SELECT count(*)>0 FROM t1; --source include/wait_condition.inc SELECT DISTINCT a FROM t1; SET GLOBAL event_scheduler=off; +--source include/wait_until_count_sessions.inc DELETE FROM t1; --error ER_EVENT_ALREADY_EXISTS @@ -30,6 +32,7 @@ --source include/wait_condition.inc SELECT DISTINCT a FROM t1; SET GLOBAL event_scheduler=off; +--source include/wait_until_count_sessions.inc DELETE FROM t1; DROP EVENT IF EXISTS ev1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/create_or_replace2.test mariadb-10.1-10.1.30/mysql-test/t/create_or_replace2.test --- mariadb-10.1-10.1.25/mysql-test/t/create_or_replace2.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/create_or_replace2.test 2017-12-21 15:48:47.000000000 +0000 @@ -3,9 +3,9 @@ # --source include/have_debug.inc ---source include/master-slave.inc --source include/have_binlog_format_row.inc --source include/have_xtradb.inc +--source include/master-slave.inc --disable_warnings drop table if exists t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ctype_gbk.test mariadb-10.1-10.1.30/mysql-test/t/ctype_gbk.test --- mariadb-10.1-10.1.25/mysql-test/t/ctype_gbk.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ctype_gbk.test 2017-12-21 15:48:47.000000000 +0000 @@ -199,6 +199,20 @@ SET NAMES gbk; --source include/ctype_E05C.inc +--echo # +--echo # MDEV-9886 Illegal mix of collations with a view comparing a field to a binary constant +--echo # + +SET NAMES latin1; +CREATE TABLE t1 (a TEXT CHARACTER SET gbk); +INSERT INTO t1 VALUES (0xEE5D); +SELECT a<>0xEE5D AS a FROM t1; +CREATE VIEW v1 AS SELECT a<>0xEE5D AS a FROM t1; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +DROP VIEW v1; +DROP TABLE t1; + --echo # --echo # End of 10.0 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ctype_latin1.test mariadb-10.1-10.1.30/mysql-test/t/ctype_latin1.test --- mariadb-10.1-10.1.25/mysql-test/t/ctype_latin1.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ctype_latin1.test 2017-12-21 15:48:47.000000000 +0000 @@ -245,6 +245,22 @@ --echo # SELECT _latin1 0x7E, _latin1 X'7E', _latin1 B'01111110'; + +--echo # +--echo # MDEV-9886 Illegal mix of collations with a view comparing a field to a binary constant +--echo # + +SET NAMES latin1; +CREATE TABLE t1 (a TEXT CHARACTER SET latin1); +INSERT INTO t1 VALUES (0xC0); +SELECT a<>0xEE5D AS a FROM t1; +CREATE VIEW v1 AS SELECT a<>0xC0 AS a FROM t1; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +DROP VIEW v1; +DROP TABLE t1; + + --echo # --echo # End of 10.0 tests --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ctype_ucs.test mariadb-10.1-10.1.30/mysql-test/t/ctype_ucs.test --- mariadb-10.1-10.1.25/mysql-test/t/ctype_ucs.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ctype_ucs.test 2017-12-21 15:48:47.000000000 +0000 @@ -826,6 +826,29 @@ SET NAMES utf8; --echo # +--echo # MDEV-13972 crash in Item_func_sec_to_time::get_date +--echo # + +SELECT SEC_TO_TIME(CONVERT(900*24*60*60 USING ucs2)); + +--echo # +--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +--echo # + +CREATE TABLE t1 (c1 VARCHAR(32766) CHARACTER SET ucs2); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(32767) CHARACTER SET ucs2); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(32768) CHARACTER SET ucs2); +DESCRIBE t1; +DROP TABLE t1; + + +--echo # --echo # End of 5.5 tests --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ctype_utf32.test mariadb-10.1-10.1.30/mysql-test/t/ctype_utf32.test --- mariadb-10.1-10.1.25/mysql-test/t/ctype_utf32.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ctype_utf32.test 2017-12-21 15:48:47.000000000 +0000 @@ -904,6 +904,19 @@ SET NAMES utf8; --echo # +--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +--echo # + +CREATE TABLE t1 (c1 VARCHAR(16383) CHARACTER SET utf32); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(16384) CHARACTER SET utf32); +DESCRIBE t1; +DROP TABLE t1; + + +--echo # --echo # End of 5.5 tests --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ctype_utf8mb4.test mariadb-10.1-10.1.30/mysql-test/t/ctype_utf8mb4.test --- mariadb-10.1-10.1.25/mysql-test/t/ctype_utf8mb4.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ctype_utf8mb4.test 2017-12-21 15:48:47.000000000 +0000 @@ -1914,6 +1914,24 @@ DROP TABLE t1; --echo # +--echo # MDEV-8949: COLUMN_CREATE unicode name breakage +--echo # + +SET NAMES utf8mb4; +SELECT COLUMN_JSON(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1)); +SELECT COLUMN_LIST(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1)); +SELECT COLUMN_GET(COLUMN_CREATE(_utf8mb4 0xF09F988E, 1), _utf8mb4 0xF09F988E +as int); + +CREATE TABLE t1 AS SELECT + COLUMN_LIST(COLUMN_CREATE('a',1)), + COLUMN_JSON(COLUMN_CREATE('b',1)); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +SET NAMES default; + +--echo # --echo # End of 10.0 tests --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ctype_utf8.test mariadb-10.1-10.1.30/mysql-test/t/ctype_utf8.test --- mariadb-10.1-10.1.25/mysql-test/t/ctype_utf8.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ctype_utf8.test 2017-12-21 15:48:47.000000000 +0000 @@ -1716,6 +1716,22 @@ DROP TABLE t1; --echo # +--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +--echo # + +CREATE TABLE t1 (c1 VARCHAR(21844) CHARACTER SET utf8); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(21845) CHARACTER SET utf8); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(21846) CHARACTER SET utf8); +DESCRIBE t1; +DROP TABLE t1; + +--echo # --echo # End of 5.5 tests --echo # @@ -1854,6 +1870,18 @@ --source include/ctype_unescape.inc --echo # +--echo # MDEV-12681 Wrong VIEW results for CHAR(0xDF USING latin1) +--echo # + +SET NAMES utf8; +SELECT CHAR(0xDF USING latin1); +CREATE OR REPLACE VIEW v1 AS SELECT CHAR(0xDF USING latin1) AS c; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +DROP VIEW v1; + + +--echo # --echo # End of 10.0 tests --echo # @@ -1983,6 +2011,18 @@ #DROP FUNCTION f1; #SET NAMES utf8; +--echo # +--echo # MDEV-10191 non convertible chars convert() resulted in Null instead "?" on Windows +--echo # + +SET sql_mode='STRICT_TRANS_TABLES'; +SELECT CONVERT(_utf8 0xC499 USING latin1); +SELECT CAST(_utf8 0xC499 AS CHAR CHARACTER SET latin1); + +SET sql_mode=default; +SELECT CONVERT(_utf8 0xC499 USING latin1); +SELECT CAST(_utf8 0xC499 AS CHAR CHARACTER SET latin1); + --echo # --echo # End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/delete_returning.test mariadb-10.1-10.1.30/mysql-test/t/delete_returning.test --- mariadb-10.1-10.1.25/mysql-test/t/delete_returning.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/delete_returning.test 2017-12-21 15:48:47.000000000 +0000 @@ -155,3 +155,18 @@ DROP PROCEDURE p1; DROP TABLE t1; +--echo # +--echo # MDEV-13776: DELETE ... RETURNING with sql_mode='ONLY_FULL_GROUP_BY' +--echo # + +set @sql_mode_save= @@sql_mode; +set sql_mode='ONLY_FULL_GROUP_BY'; + +CREATE TABLE t1 (id INT); +INSERT INTO t1 VALUE(1),(2),(3); + +DELETE FROM t1 WHERE id > 2 RETURNING *; + +set sql_mode=@sql_mode_save; + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/delimiter_case_mdev_10728.sql mariadb-10.1-10.1.30/mysql-test/t/delimiter_case_mdev_10728.sql --- mariadb-10.1-10.1.25/mysql-test/t/delimiter_case_mdev_10728.sql 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/delimiter_case_mdev_10728.sql 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,3 @@ +DeLiMiTeR A; +SELECT 1 A; +delimiter ; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/delimiter_command_case_sensitivity.test mariadb-10.1-10.1.30/mysql-test/t/delimiter_command_case_sensitivity.test --- mariadb-10.1-10.1.25/mysql-test/t/delimiter_command_case_sensitivity.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/delimiter_command_case_sensitivity.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,4 @@ +source include/not_embedded.inc; + +# MDEV-10728 +--exec $MYSQL --default-character-set=binary < "t/delimiter_case_mdev_10728.sql" diff -Nru mariadb-10.1-10.1.25/mysql-test/t/errors.test mariadb-10.1-10.1.30/mysql-test/t/errors.test --- mariadb-10.1-10.1.25/mysql-test/t/errors.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/errors.test 2017-12-21 15:48:47.000000000 +0000 @@ -203,7 +203,13 @@ # # errors caused by max_session_mem_used # +--disable_result_log +set max_session_mem_used = 50000; +--error 0,ER_OPTION_PREVENTS_STATEMENT +select * from seq_1_to_1000; set max_session_mem_used = 8192; ---error ER_SQL_DISCOVER_ERROR,ER_OPTION_PREVENTS_STATEMENT +--error 0,ER_OPTION_PREVENTS_STATEMENT select * from seq_1_to_1000; -set global max_session_mem_used = default; +--enable_result_log +# We may not be able to execute any more queries with this connection +# because of too little memory# diff -Nru mariadb-10.1-10.1.25/mysql-test/t/func_in.test mariadb-10.1-10.1.30/mysql-test/t/func_in.test --- mariadb-10.1-10.1.25/mysql-test/t/func_in.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/func_in.test 2017-12-21 15:48:47.000000000 +0000 @@ -605,11 +605,20 @@ DROP TABLE t1; +--echo # --echo # End of 5.3 tests +--echo # +# +# Bug#26361149 MYSQL SERVER CRASHES AT: COL IN(IFNULL(CONST, COL), NAME_CONST('NAME', NULL)) +# +create table t1 (a int); +insert t1 values (1),(2),(3); +select * from t1 where 1 in (a, name_const('a', null)); +drop table t1; --echo # ---echo # Start of 10.0 tests +--echo # End of 5.5 tests --echo # --echo # @@ -626,7 +635,7 @@ DROP TABLE t1; --echo # ---echo # Start of 10.1 tests +--echo # End of 10.0 tests --echo # --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/func_misc.test mariadb-10.1-10.1.30/mysql-test/t/func_misc.test --- mariadb-10.1-10.1.25/mysql-test/t/func_misc.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/func_misc.test 2017-12-21 15:48:47.000000000 +0000 @@ -1107,3 +1107,30 @@ --echo --echo # -- Done. --echo + + +--echo # +--echo # MDEV-13685 Can not replay binary log due to Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation 'concat' +--echo # +SET NAMES utf8; +SELECT COERCIBILITY(NAME_CONST('name','test')); +SELECT COERCIBILITY(NAME_CONST('name',TIME'00:00:00')); +SELECT COERCIBILITY(NAME_CONST('name',15)); +SELECT CONCAT(NAME_CONST('name',15),'오'); +SET NAMES latin1; + +--echo # +--echo # MDEV-14116 INET6_NTOA output is set as null to varchar(39) variable +--echo # + +DELIMITER $$; +CREATE PROCEDURE p1() +BEGIN + DECLARE ip_full_addr varchar(39) DEFAULT ""; + SELECT INET6_NTOA(UNHEX('20000000000000000000000000000000')) into ip_full_addr; + SELECT ip_full_addr; +END; +$$ +DELIMITER ;$$ +CALL p1(); +DROP PROCEDURE p1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/func_regexp_pcre.test mariadb-10.1-10.1.30/mysql-test/t/func_regexp_pcre.test --- mariadb-10.1-10.1.25/mysql-test/t/func_regexp_pcre.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/func_regexp_pcre.test 2017-12-21 15:48:47.000000000 +0000 @@ -432,6 +432,25 @@ SELECT 1 FROM dual WHERE ('Alpha,Bravo,Charlie,Delta,Echo,Foxtrot,StrataCentral,Golf,Hotel,India,Juliet,Kilo,Lima,Mike,StrataL3,November,Oscar,StrataL2,Sand,P3,P4SwitchTest,Arsys,Poppa,ExtensionMgr,Arp,Quebec,Romeo,StrataApiV2,PtReyes,Sierra,SandAcl,Arrow,Artools,BridgeTest,Tango,SandT,PAlaska,Namespace,Agent,Qos,PatchPanel,ProjectReport,Ark,Gimp,Agent,SliceAgent,Arnet,Bgp,Ale,Tommy,Central,AsicPktTestLib,Hsc,SandL3,Abuild,Pca9555,Standby,ControllerDut,CalSys,SandLib,Sb820,PointV2,BfnLib,Evpn,BfnSdk,Sflow,ManagementActive,AutoTest,GatedTest,Bgp,Sand,xinetd,BfnAgentLib,bf-utils,Hello,BfnState,Eos,Artest,Qos,Scd,ThermoMgr,Uniform,EosUtils,Eb,FanController,Central,BfnL3,BfnL2,tcp_wrappers,Victor,Environment,Route,Failover,Whiskey,Xray,Gimp,BfnFixed,Strata,SoCal,XApi,Msrp,XpProfile,tcpdump,PatchPanel,ArosTest,FhTest,Arbus,XpAcl,MacConc,XpApi,telnet,QosTest,Alpha2,BfnVlan,Stp,VxlanControllerTest,MplsAgent,Bravo2,Lanz,BfnMbb,Intf,XCtrl,Unicast,SandTunnel,L3Unicast,Ipsec,MplsTest,Rsvp,EthIntf,StageMgr,Sol,MplsUtils,Nat,Ira,P4NamespaceDut,Counters,Charlie2,Aqlc,Mlag,Power,OpenFlow,Lag,RestApi,BfdTest,strongs,Sfa,CEosUtils,Adt746,MaintenanceMode,MlagDut,EosImage,IpEth,MultiProtocol,Launcher,Max3179,Snmp,Acl,IpEthTest,PhyEee,bf-syslibs,tacc,XpL2,p4-ar-switch,p4-bf-switch,LdpTest,BfnPhy,Mirroring,Phy6,Ptp' REGEXP '^((?!\b(Strata|StrataApi|StrataApiV2)\b).)*$'); # +# MDEV-13173 An RLIKE that previously worked on 10.0 now returns "Got error 'pcre_exec: recursion limit of 100 exceeded' from regexp" +# +SELECT CONCAT(REPEAT('100,',60),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$'; +--replace_regex /[0-9]+ exceeded/NUM exceeded/ +SELECT CONCAT(REPEAT('100,',200),'101') RLIKE '^(([1-9][0-9]*),)*[1-9][0-9]*$'; + +SELECT REGEXP_INSTR(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'); +--replace_regex /[0-9]+ exceeded/NUM exceeded/ +SELECT REGEXP_INSTR(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$'); + +SELECT LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')); +--replace_regex /[0-9]+ exceeded/NUM exceeded/ +SELECT LENGTH(REGEXP_SUBSTR(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$')); + +SELECT LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',60),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', '')); +--replace_regex /[0-9]+ exceeded/NUM exceeded/ +SELECT LENGTH(REGEXP_REPLACE(CONCAT(REPEAT('100,',200),'101'), '^(([1-9][0-9]*),)*[1-9][0-9]*$', '')); + +# # MDEV-12942 REGEXP_INSTR returns 1 when using brackets # SELECT REGEXP_INSTR('a_kollision', 'oll'); diff -Nru mariadb-10.1-10.1.25/mysql-test/t/func_set.test mariadb-10.1-10.1.30/mysql-test/t/func_set.test --- mariadb-10.1-10.1.25/mysql-test/t/func_set.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/func_set.test 2017-12-21 15:48:47.000000000 +0000 @@ -136,18 +136,14 @@ --echo DROP TABLE t1; ---echo # ---echo # Start of 5.3 tests ---echo # --echo # ---echo # MDEV-4512 Valgrind warnings in my_long10_to_str_8bit on INTERVAL and DATE_ADD with incorrect types +--echo # MDEV-14596 Crash in INTERVAL(ROW(..),ROW(..)) --echo # -CREATE TABLE t1 (pk INT PRIMARY KEY); -INSERT INTO t1 VALUES (10),(11); -SELECT INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 ) FROM t1; -DROP TABLE t1; ---echo # ---echo # End of 5.3 tests ---echo # +--error ER_OPERAND_COLUMNS +SELECT INTERVAL(ROW(1,1),ROW(1,2)); +--error ER_OPERAND_COLUMNS +SELECT INTERVAL(1,ROW(1,2)); +--error ER_OPERAND_COLUMNS +SELECT INTERVAL(ROW(1,2),1); diff -Nru mariadb-10.1-10.1.25/mysql-test/t/func_str.test mariadb-10.1-10.1.30/mysql-test/t/func_str.test --- mariadb-10.1-10.1.25/mysql-test/t/func_str.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/func_str.test 2017-12-21 15:48:47.000000000 +0000 @@ -1757,6 +1757,18 @@ --echo # --echo # +--echo # Start of 10.0 tests +--echo # + +--echo # +--echo # MDEV-12681 Wrong VIEW results for CHAR(0xDF USING latin1) +--echo # + +EXPLAIN EXTENDED SELECT CHAR(0xDF USING latin1); +EXPLAIN EXTENDED SELECT CHAR(0xDF USING `binary`); +EXPLAIN EXTENDED SELECT CHAR(0xDF); + +--echo # --echo # Start of 10.1 tests --echo # @@ -1800,7 +1812,6 @@ SELECT f1,HEX(f2) FROM t1 WHERE f1='YQ==' AND (f2= from_base64("Yq==") OR f2= from_base64("YQ==")); DROP TABLE t1; - --echo # --echo # End of 10.1 tests --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/func_time.test mariadb-10.1-10.1.30/mysql-test/t/func_time.test --- mariadb-10.1-10.1.25/mysql-test/t/func_time.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/func_time.test 2017-12-21 15:48:47.000000000 +0000 @@ -1677,9 +1677,33 @@ --echo # SELECT 1 MOD ADDTIME( '13:58:57', '00:00:01' ) + 2; +--echo # +--echo # MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value +--echo # + +SET sql_mode='NO_ZERO_IN_DATE'; +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 SELECT timediff(timestamp'2008-12-31 23:59:59.000001',timestamp'2008-12-30 01:01:01.000002'); +SELECT * FROM t1; +DROP TABLE t1; +SET sql_mode=DEFAULT; + + +--echo # +--echo # MDEV-13972 crash in Item_func_sec_to_time::get_date +--echo # + +# The below query can return warning sporadically +--disable_warnings +DO TO_DAYS(SEC_TO_TIME(TIME(CEILING(UUID())))); +--enable_warnings + +DO TO_DAYS(SEC_TO_TIME(MAKEDATE('',RAND(~(''))))); +SELECT SEC_TO_TIME(MAKEDATE(0,RAND(~0))); + --echo # ---echo # Start of 10.0 tests +--echo # End of 5.5 tests --echo # --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/gis-precise.test mariadb-10.1-10.1.30/mysql-test/t/gis-precise.test --- mariadb-10.1-10.1.25/mysql-test/t/gis-precise.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/gis-precise.test 2017-12-21 15:48:47.000000000 +0000 @@ -362,5 +362,24 @@ select ST_Touches(ST_PolygonFromText('POLYGON((0 0,0 5,5 5,5 0,0 0))'),ST_PointFromText('POINT(0 0)')); select ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)')); +# MDEV-12705 10.1.18-MariaDB-1~jessie - mysqld got signal 11. +SELECT ST_RELATE( + ST_DIFFERENCE( + GEOMETRYFROMTEXT(' + MULTILINESTRING( + ( 12841 36140, 8005 31007, 26555 31075, 52765 41191, + 28978 6548, 45720 32057, 53345 3221 ), + ( 8304 59107, 25233 31592, 40502 25303, 8205 42940 ), + ( 7829 7305, 58841 56759, 64115 8512, 37562 54145, 2210 14701 ), + ( 20379 2805, 40807 27770, 28147 14883, 26439 29383, 55663 5086 ), + ( 35944 64702, 14433 23728, 49317 26241, 790 16941 ) + ) + '), + GEOMETRYFROMTEXT('POINT(46061 13545)') + ), + GEOMETRYFROMTEXT('POINT(4599 60359)'), + 'F*FFFF**F' + ) as relate_res; + --source include/gis_debug.inc diff -Nru mariadb-10.1-10.1.25/mysql-test/t/gis-rt-precise.test mariadb-10.1-10.1.30/mysql-test/t/gis-rt-precise.test --- mariadb-10.1-10.1.25/mysql-test/t/gis-rt-precise.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/gis-rt-precise.test 2017-12-21 15:48:47.000000000 +0000 @@ -62,3 +62,25 @@ DROP TABLE t1; --echo End of 5.5 tests. + +# +# MDEV-12078 Using spatial index changes type from point to geometry. +# +CREATE TABLE t1 ( + coordinate point NOT NULL, + SPATIAL KEY coordinate (coordinate) +) ENGINE=Aria DEFAULT CHARSET=ascii PAGE_CHECKSUM=1; + +SHOW COLUMNS FROM t1; + +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(0 0)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(10 0)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(10 10)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(0 10)")); +INSERT INTO t1 (coordinate) VALUES(ST_PointFromText("POINT(5 5)")); + +SELECT astext(coordinate) FROM t1 WHERE ST_Intersects(ST_LineFromText("LINESTRING(0 0, 10 0, 10 10, 0 10)"), coordinate); + +SHOW COLUMNS FROM t1; + +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/gis.test mariadb-10.1-10.1.30/mysql-test/t/gis.test --- mariadb-10.1-10.1.25/mysql-test/t/gis.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/gis.test 2017-12-21 15:48:47.000000000 +0000 @@ -351,15 +351,15 @@ 36.248666,-115.263639 36.247466,-115.263839 36.252766,-115.261439 36.252666,-115.261439 36.247366,-115.247239 36.247066)))')); -# Expected result is 115.31877315203187, but IA64 returns 115.31877315203188 -# due to fused multiply-add instructions. ---replace_result 115.31877315203188 115.31877315203187 +# Expected results are 115.2970604672862 and 36.23335610879993, but IA64 returns +# slightly different values due to fused multiply-add instructions. +--replace_result 115.29706047613604 115.2970604672862 36.23335611157958 36.23335610879993 select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from t1 where object_id=85998; -# Expected result is 36.3310176346905, but IA64 returns 36.3310176346904 +# Expected result is 36.34725218253213, but IA64 returns 36.34725217627852 # due to fused multiply-add instructions. ---replace_result 36.3310176346904 36.3310176346905 -114.87787186923326 -114.87787186923313 36.33101763469053 36.33101763469059 36.33101763469043 36.33101763469059 +--replace_result 36.34725217627852 36.34725218253213 -114.86854470090232 -114.86854472054372 select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from t1 where object_id=85984; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/group_by.test mariadb-10.1-10.1.30/mysql-test/t/group_by.test --- mariadb-10.1-10.1.25/mysql-test/t/group_by.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/group_by.test 2017-12-21 15:48:47.000000000 +0000 @@ -1726,6 +1726,70 @@ select a from t1 group by a having a > 1; drop table t1; set sql_mode= @save_sql_mode; + +# +# MDEV-7826 Server crashes in Item_subselect::enumerate_field_refs_processor +# +create table t1 (f1 int); +insert into t1 values (5),(9); +create table t2 (f2 int); +insert into t2 values (0),(6); +create table t3 (f3 int); +insert into t3 values (6),(3); +create table t4 (f4 int); +insert into t4 values (1),(0); +--error ER_ILLEGAL_REFERENCE +select +(select min(f1) from t1 where f1 in (select min(f4) from t2)) as field7, +(select count(*) from t3 where f3 in (select max(f4) from t2 group by field7)) +from t4; +drop table t1, t2, t3, t4; + +# +# MDEV-13180 Unused left join causes server crash +# +create table t1 (i1 int); +insert into t1 values (1); +create table t2 (i int); +insert into t2 values (2); +select 1 from t1 left join t2 b on b.i = (select max(b.i) from t2); +drop table t1, t2; + + +# +# MDEV-12489 The select stmt may fail due to "having clause is ambiguous" unexpected +# +create table t1 (c1 int, c2 int); +create table t2 (c1 int, c2 int); +select t1.c1 as c1, t2.c2 as c1 from t1, t2 where t1.c1 < 20 and t2.c2 > 5 group by t1.c1, t2.c2 having t1.c1 < 3; +drop table t1, t2; + +# +# MDEV-12350: Heap corruption, overrun buffer, ASAN errors, server crash in my_fill_8bit / filesort +# + +SET @old_sort_buff_size = @@sort_buffer_size; +SET @@sort_buffer_size=256*1024; +CREATE TABLE t1 (c INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES + (2011),(1977),(1982),(2027),(2023),(NULL),(NULL),(2004),(1974),(2032), + (1993),(NULL),(1995),(2034),(NULL),(2009),(1900),(NULL),(2025),(1900), + (2033),(1900),(2012),(NULL),(2009),(1992),(1974),(1974),(2012),(2028), + (2007),(2012),(1900),(1983),(1900),(2010),(1987),(1994),(1981),(2032), + (2010),(1989),(2014),(1900),(1900),(1976),(1978),(2007),(2030),(NULL), + (2002),(1997),(1900),(NULL),(2000),(2027),(1975),(2026),(1975),(2026), + (2029),(1977),(1900),(1900),(2031),(1993),(1986),(2012),(1979),(2013), + (1994),(2014),(2025),(2006),(1971),(1974),(2021),(2011),(NULL),(1991), + (2001),(1977),(2023),(2012),(1900),(1978),(1998),(NULL),(1988),(1999), + (2017),(2008),(1976),(1900),(2005),(2030),(2023),(1900),(1978),(1990), + (1978),(1987),(2030),(1900),(2034),(2006),(2015),(2001),(2019),(2024), + (2030),(1989),(1997),(2007),(2023),(1994),(1971),(2011),(2011),(2015), + (1984),(1978),(1979),(1989),(2008),(2030); + +SELECT ExtractValue('','/a') AS f1, SPACE(c) AS f2 FROM t1 GROUP BY f1, f2 WITH ROLLUP; +SET @@sort_buffer_size = @old_sort_buff_size; +DROP TABLE t1; + # # End of MariaDB 5.5 tests # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/having.test mariadb-10.1-10.1.30/mysql-test/t/having.test --- mariadb-10.1-10.1.25/mysql-test/t/having.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/having.test 2017-12-21 15:48:47.000000000 +0000 @@ -729,6 +729,23 @@ drop table t1; --echo # +--echo # mdev-14368: grouping query with alias for aggregate function in HAVING +--echo # when sql_mode = 'ONLY_FULL_GROUP_BY' + + +set @save_sql_mode= @@sql_mode; +set sql_mode = 'ONLY_FULL_GROUP_BY'; + +create table t1(a int); +insert t1 values (4),(1),(2),(1), (3),(4); + +SELECT a, COUNT(a) as ct FROM t1 GROUP BY a HAVING ct>0; + +set sql_mode=@save_sql_mode; + +drop table t1; + +--echo # --echo # Bug mdev-5160: two-way join with HAVING over the second table --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/information_schema.test mariadb-10.1-10.1.30/mysql-test/t/information_schema.test --- mariadb-10.1-10.1.25/mysql-test/t/information_schema.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/information_schema.test 2017-12-21 15:48:47.000000000 +0000 @@ -1910,3 +1910,29 @@ --source include/wait_until_count_sessions.inc set global sql_mode=default; + +USE test; + +--echo # +--echo # End of 10.0 tests +--echo # + + +--echo # +--echo # Start of 10.1 tests +--echo # + + +--echo # +--echo # MDEV-13242 Wrong results for queries with row constructors and information_schema +--echo # + +CREATE TABLE tt1(c1 INT); +CREATE TABLE tt2(c2 INT); +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (('tt1', 'c1')); +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (('tt2', 'c2')); +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (('tt1','c1'),('tt2', 'c2')); +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name, column_name) IN (SELECT 'tt1','c1' FROM dual UNION SELECT 'tt2', 'c2' FROM dual); +SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name='tt1' AND column_name='c1') OR (table_name='tt2' AND column_name='c2'); +SELECT column_name FROM information_schema.columns WHERE (table_name, column_name) IN (('tt1','c1'),('tt2', 'c2')) ORDER BY column_name; +DROP TABLE tt1, tt2; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/insert.test mariadb-10.1-10.1.30/mysql-test/t/insert.test --- mariadb-10.1-10.1.25/mysql-test/t/insert.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/insert.test 2017-12-21 15:48:47.000000000 +0000 @@ -573,3 +573,42 @@ set @@old_mode=""; insert ignore into t1 values (1,12); DROP TABLE t1; + +--echo # +--echo # MDEV-13290 Assertion Assertion `!is_set() || (m_status == DA_OK_BULK +--echo # && is_bulk_op())' or `! is_set()' failed +--echo # + +SET @save_mode= @@sql_mode; +SET sql_mode= 'STRICT_ALL_TABLES'; +CREATE TABLE t1 (f1 INT DEFAULT 0, f2 INT); +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT f1, f2 FROM t1 WHERE f1 = 'x' WITH CHECK OPTION; +--error ER_TRUNCATED_WRONG_VALUE +REPLACE INTO v1 SET f2 = 1; +SELECT * from t1; +drop view v1; +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT f1, f2 FROM t1 WHERE f1 = cast('' as decimal) WITH CHECK OPTION; +--error ER_TRUNCATED_WRONG_VALUE +REPLACE INTO v1 SET f2 = 1; +SELECT * from t1; +drop view v1; +SELECT 0,0 INTO OUTFILE 't1.txt'; +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT f1, f2 FROM t1 WHERE f1 = 'x' WITH CHECK OPTION; +--error ER_TRUNCATED_WRONG_VALUE +LOAD DATA INFILE 't1.txt' INTO TABLE v1; +SELECT * from t1; +let $MYSQLD_DATADIR= `select @@datadir`; +remove_file $MYSQLD_DATADIR/test/t1.txt; +drop view v1; +drop table t1; +SET @@sql_mode= @save_mode; + +# +# MDEV-13861 Assertion `0' failed in Protocol::end_statement +# +CREATE TABLE t1 (f INT); +CREATE VIEW v1 AS SELECT * FROM t1 WHERE f <=> 'foo' WITH CHECK OPTION; +--error ER_VIEW_CHECK_FAILED +REPLACE INTO v1 SET f = NULL; +DROP VIEW v1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/join_outer.test mariadb-10.1-10.1.30/mysql-test/t/join_outer.test --- mariadb-10.1-10.1.25/mysql-test/t/join_outer.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/join_outer.test 2017-12-21 15:48:47.000000000 +0000 @@ -1962,6 +1962,20 @@ DROP TABLE t1,t2; +--echo # +--echo # MDEV-10397: Server crashes in key_copy with join_cache_level > 2 and join on BIT fields +--echo # + +CREATE TABLE t1 (b1 BIT NOT NULL); +INSERT INTO t1 VALUES (0),(1); + +CREATE TABLE t2 (b2 BIT NOT NULL); +INSERT INTO t2 VALUES (0),(1); + +SET SESSION JOIN_CACHE_LEVEL = 3; +SELECT t1.b1+'0' , t2.b2 + '0' FROM t1 LEFT JOIN t2 ON b1 = b2; +DROP TABLE t1, t2; + --echo # end of 5.5 tests SET optimizer_switch=@save_optimizer_switch; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/log_tables-big.test mariadb-10.1-10.1.30/mysql-test/t/log_tables-big.test --- mariadb-10.1-10.1.25/mysql-test/t/log_tables-big.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/log_tables-big.test 2017-12-21 15:48:47.000000000 +0000 @@ -7,6 +7,7 @@ # check that CSV engine was compiled in --source include/have_csv.inc +set @log_output.saved = @@global.log_output; set @@global.log_output = 'TABLE'; connect (con1,localhost,root,,); @@ -21,13 +22,13 @@ connection con2; set session long_query_time=1; select get_lock('bug27638', 2); -select if (query_time >= '00:00:01', 'OK', 'WRONG') as qt, sql_text from mysql.slow_log +select if (query_time >= '00:00:01', 'OK', concat('WRONG: ',query_time)) as qt, sql_text from mysql.slow_log where sql_text = 'select get_lock(\'bug27638\', 2)'; select get_lock('bug27638', 60); -select if (query_time >= '00:00:59', 'OK', 'WRONG') as qt, sql_text from mysql.slow_log +select if (query_time >= '00:00:59', 'OK', concat('WRONG: ',query_time)) as qt, sql_text from mysql.slow_log where sql_text = 'select get_lock(\'bug27638\', 60)'; select get_lock('bug27638', 101); -select if (query_time >= '00:01:40', 'OK', 'WRONG') as qt, sql_text from mysql.slow_log +select if (query_time >= '00:01:40', 'OK', concat('WRONG: ',query_time)) as qt, sql_text from mysql.slow_log where sql_text = 'select get_lock(\'bug27638\', 101)'; connection con1; select release_lock('bug27638'); @@ -36,4 +37,4 @@ disconnect con1; disconnect con2; -set @@global.log_output=default; +set @@global.log_output = @log_output.saved; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/mdev13607.test mariadb-10.1-10.1.30/mysql-test/t/mdev13607.test --- mariadb-10.1-10.1.25/mysql-test/t/mdev13607.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/mdev13607.test 2017-12-21 15:48:47.000000000 +0000 @@ -0,0 +1,60 @@ +--echo # +--echo # Bug mdev-13607: overflow of current_record_count +--echo # + +--source include/have_innodb.inc + +CREATE TABLE t1 (id INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES +(1),(2),(3),(4),(5),(6),(7),(8),(9),(10), +(11),(12),(13),(14),(15),(16),(17),(18),(19),(20), +(21),(22),(23),(24),(25),(26),(27),(28),(29),(30), +(31),(32),(33),(34),(35),(36),(37),(38),(39),(40), +(41),(42),(43),(44),(45),(46),(47),(48),(49),(50); + +CREATE TABLE t2 (id INT) ENGINE=InnoDB; +INSERT INTO t2 VALUES (1),(2); + +CREATE TABLE t3 (id INT) ENGINE=InnoDB; +INSERT INTO t3 VALUES (1),(2); + +ANALYZE TABLE t1, t2, t3; + +let $q= +SELECT * FROM +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_1 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_2 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_3 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_4 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_5 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_6 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_7 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_8 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_9 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_10 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_11 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_12 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_13 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_14 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_15 +INNER JOIN +(SELECT p1.* FROM t1 p1 NATURAL JOIN t2 r1 NATURAL JOIN t3 d1 NATURAL JOIN t1 p2 NATURAL JOIN t2 r2 NATURAL JOIN t3 d2 NATURAL JOIN t1 p3 NATURAL JOIN t2 r3 NATURAL JOIN t3 d3 NATURAL JOIN t1 p4 NATURAL JOIN t2 r4 NATURAL JOIN t3 d4 NATURAL JOIN t1 p5 NATURAL JOIN t2 r5 NATURAL JOIN t3 d5 NATURAL JOIN t1 p6 NATURAL JOIN t2 r6 NATURAL JOIN t3 d6 NATURAL JOIN t1 p7 NATURAL JOIN t2 r7 NATURAL JOIN t3 d7 NATURAL JOIN t1 p8 NATURAL JOIN t2 r8 NATURAL JOIN t3 d8 NATURAL JOIN t1 p9 ) gp_16 +; + +eval explain $q; + +DROP TABLE t1,t2,t3; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/myisam.test mariadb-10.1-10.1.30/mysql-test/t/myisam.test --- mariadb-10.1-10.1.25/mysql-test/t/myisam.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/myisam.test 2017-12-21 15:48:47.000000000 +0000 @@ -1030,8 +1030,9 @@ drop table t1; # MyISAM specific varchar tests ---error 1118 create table t1 (v varchar(65535)); +show create table t1; +drop table t1; eval set storage_engine=$default; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/mysqlbinlog.test mariadb-10.1-10.1.30/mysql-test/t/mysqlbinlog.test --- mariadb-10.1-10.1.25/mysql-test/t/mysqlbinlog.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/mysqlbinlog.test 2017-12-21 15:48:47.000000000 +0000 @@ -589,3 +589,9 @@ --exec $MYSQL_BINLOG --hexdump std_data/mdev-4645-binlog_group_id.binlog --exec $MYSQL_BINLOG --hexdump std_data/mdev-4645-binlog_group_id_checksum.binlog --exec $MYSQL_BINLOG --hexdump std_data/mdev-4645-binlog_none.binlog + +# +# MDEV-12372 mysqlbinlog --version output is the same on 10.x as on 5.5.x, and contains not only version +# +replace_regex /.*mysqlbinlog(\.exe)? Ver .* for .* at [-_a-zA-Z0-9]+/mysqlbinlog Ver VER for OS at ARCH/; +exec $MYSQL_BINLOG --version; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/mysqld--help.test mariadb-10.1-10.1.30/mysql-test/t/mysqld--help.test --- mariadb-10.1-10.1.25/mysql-test/t/mysqld--help.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/mysqld--help.test 2017-12-21 15:48:48.000000000 +0000 @@ -42,7 +42,7 @@ $re2=join('|', @plugins); $skip=0; open(F, '<', "$ENV{MYSQL_TMP_DIR}/mysqld--help.txt") or die; - print "Windows bug: happens when a new line is exactly at the right offset\n"; + print "Windows bug: happens when a new line is exactly at the right offset.\n"; while () { next if 1../The following groups are read/; # formatting, skip line consisting entirely of dashes and blanks diff -Nru mariadb-10.1-10.1.25/mysql-test/t/mysql_upgrade.test mariadb-10.1-10.1.30/mysql-test/t/mysql_upgrade.test --- mariadb-10.1-10.1.25/mysql-test/t/mysql_upgrade.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/mysql_upgrade.test 2017-12-21 15:48:47.000000000 +0000 @@ -1,6 +1,7 @@ -- source include/mysql_upgrade_preparation.inc -- source include/have_working_dns.inc -- source include/have_innodb.inc +-- source include/have_partition.inc set sql_mode=""; @@ -168,6 +169,31 @@ DROP USER very_long_user_name_number_1, very_long_user_name_number_2, even_longer_user_name_number_3_to_test_the_grantor_and_definer_field_length@localhost; DROP PROCEDURE test.pr; +# +# MDEV-13274 mysql_upgrade fails if dbname+tablename+partioname > 64 chars +# +use test; +call mtr.add_suppression('Column last_update in table "mysql"."innodb_table_stats" is INT NOT NULL but should be'); +alter table mysql.innodb_table_stats modify last_update int not null; + +create table extralongname_extralongname_extralongname_extralongname_ext ( + id int(10) unsigned not null, + created_date date not null, + created timestamp not null, + primary key (created,id,created_date) +) engine=innodb stats_persistent=1 default charset=latin1 + partition by range (year(created_date)) + subpartition by hash (month(created_date)) + subpartitions 2 ( + partition p2007 values less than (2008), + partition p2008 values less than (2009) + ); +--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1 +select length(table_name) from mysql.innodb_table_stats; +drop table extralongname_extralongname_extralongname_extralongname_ext; + +--echo End of 10.0 tests + set sql_mode=default; # @@ -192,4 +218,4 @@ --remove_file $MYSQLD_DATADIR/mysql_upgrade_info SET GLOBAL enforce_storage_engine=NULL; ---echo End of tests +--echo End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/old-mode.test mariadb-10.1-10.1.30/mysql-test/t/old-mode.test --- mariadb-10.1-10.1.25/mysql-test/t/old-mode.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/old-mode.test 2017-12-21 15:48:48.000000000 +0000 @@ -83,3 +83,37 @@ DROP TABLE t1; SET @@global.mysql56_temporal_format=DEFAULT; +# +# MDEV-12672 Replicated TIMESTAMP fields given wrong value near DST change +# + +# Copy_field +set time_zone='Europe/Moscow'; +set global mysql56_temporal_format=false; +create table t1 (a timestamp); +set timestamp=1288477526; +insert t1 values (null); +set timestamp=1288481126; +insert t1 values (null); +select a, unix_timestamp(a) from t1; +set global mysql56_temporal_format=true; +select a, unix_timestamp(a) from t1; +alter table t1 modify a timestamp; +select a, unix_timestamp(a) from t1; +drop table t1; + +# field_conv_incompatible() +set global mysql56_temporal_format=false; +create table t1 (a timestamp); +set timestamp=1288477526; +insert t1 values (null); +set timestamp=1288481126; +insert t1 values (null); +select a, unix_timestamp(a) from t1; +set global mysql56_temporal_format=true; +select a, unix_timestamp(a) from t1; +create table t2 (a timestamp); +insert t2 select a from t1; +select a, unix_timestamp(a) from t2; +drop table t1, t2; +set time_zone=DEFAULT; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/openssl_1.test mariadb-10.1-10.1.30/mysql-test/t/openssl_1.test --- mariadb-10.1-10.1.25/mysql-test/t/openssl_1.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/openssl_1.test 2017-12-21 15:48:48.000000000 +0000 @@ -221,8 +221,8 @@ # # Common ciphers to openssl and yassl ---exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=DHE-RSA-AES256-SHA ---exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=EDH-RSA-DES-CBC3-SHA +--exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=AES256-SHA +--exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=AES128-SHA --disable_query_log --disable_result_log diff -Nru mariadb-10.1-10.1.25/mysql-test/t/openssl_6975.test mariadb-10.1-10.1.30/mysql-test/t/openssl_6975.test --- mariadb-10.1-10.1.25/mysql-test/t/openssl_6975.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/openssl_6975.test 2017-12-21 15:48:48.000000000 +0000 @@ -8,7 +8,8 @@ # this is OpenSSL test. create user ssl_sslv3@localhost; -grant select on test.* to ssl_sslv3@localhost require cipher "RC4-SHA"; +# grant select on test.* to ssl_sslv3@localhost require cipher "AES128-SHA"; +grant select on test.* to ssl_sslv3@localhost require cipher "AES128-SHA"; create user ssl_tls12@localhost; grant select on test.* to ssl_tls12@localhost require cipher "AES128-SHA256"; @@ -17,9 +18,9 @@ disable_abort_on_error; echo TLS1.2 ciphers: user is ok with any cipher; exec $mysql --ssl-cipher=AES128-SHA256; ---replace_result DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-GCM-SHA384 +--replace_result DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-GCM-SHA384 exec $mysql --ssl-cipher=TLSv1.2; -echo TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA; +echo TLS1.2 ciphers: user requires SSLv3 cipher AES128-SHA; exec $mysql --user ssl_sslv3 --ssl-cipher=AES128-SHA256; exec $mysql --user ssl_sslv3 --ssl-cipher=TLSv1.2; echo TLS1.2 ciphers: user requires TLSv1.2 cipher AES128-SHA256; @@ -27,13 +28,13 @@ exec $mysql --user ssl_tls12 --ssl-cipher=TLSv1.2; echo SSLv3 ciphers: user is ok with any cipher; -exec $mysql --ssl-cipher=RC4-SHA; +exec $mysql --ssl-cipher=AES256-SHA; exec $mysql --ssl-cipher=SSLv3; -echo SSLv3 ciphers: user requires SSLv3 cipher RC4-SHA; -exec $mysql --user ssl_sslv3 --ssl-cipher=RC4-SHA; +echo SSLv3 ciphers: user requires SSLv3 cipher AES128-SHA; +exec $mysql --user ssl_sslv3 --ssl-cipher=AES128-SHA; exec $mysql --user ssl_sslv3 --ssl-cipher=SSLv3; echo SSLv3 ciphers: user requires TLSv1.2 cipher AES128-SHA256; -exec $mysql --user ssl_tls12 --ssl-cipher=RC4-SHA; +exec $mysql --user ssl_tls12 --ssl-cipher=AES128-SHA; exec $mysql --user ssl_tls12 --ssl-cipher=SSLv3; drop user ssl_sslv3@localhost; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/partition_datatype.test mariadb-10.1-10.1.30/mysql-test/t/partition_datatype.test --- mariadb-10.1-10.1.25/mysql-test/t/partition_datatype.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/partition_datatype.test 2017-12-21 15:48:48.000000000 +0000 @@ -217,11 +217,13 @@ drop table t1; -- error ER_PARTITION_FIELDS_TOO_LONG create table t1 (a varchar(3070)) partition by key (a); --- error ER_TOO_BIG_ROWSIZE +-- error ER_PARTITION_FIELDS_TOO_LONG +create table t1 (a varchar(65532) not null) partition by key (a); +-- error ER_BLOB_FIELD_IN_PART_FUNC_ERROR create table t1 (a varchar(65533)) partition by key (a); --- error ER_TOO_BIG_ROWSIZE +-- error ER_BLOB_FIELD_IN_PART_FUNC_ERROR create table t1 (a varchar(65534) not null) partition by key (a); --- error ER_TOO_BIG_ROWSIZE +-- error ER_BLOB_FIELD_IN_PART_FUNC_ERROR create table t1 (a varchar(65535)) partition by key (a); # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/partition_symlink.test mariadb-10.1-10.1.30/mysql-test/t/partition_symlink.test --- mariadb-10.1-10.1.25/mysql-test/t/partition_symlink.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/partition_symlink.test 2017-12-21 15:48:48.000000000 +0000 @@ -38,11 +38,10 @@ --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR SHOW CREATE TABLE t2; INSERT INTO t1 VALUES (0), (1), (2); ---error ER_TABLES_DIFFERENT_METADATA ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; --error ER_TABLES_DIFFERENT_METADATA ALTER TABLE t1 EXCHANGE PARTITION p2 WITH TABLE t2; ---sorted_result +SELECT * FROM t1; SELECT * FROM t2; DROP TABLE t1, t2; # skipped because of bug#52354 diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ps.test mariadb-10.1-10.1.30/mysql-test/t/ps.test --- mariadb-10.1-10.1.25/mysql-test/t/ps.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ps.test 2017-12-21 15:48:48.000000000 +0000 @@ -3731,4 +3731,133 @@ drop table t1; +--echo # +--echo # MDEV-9208: Function->Function->View = Mysqld segfault +--echo # (Server crashes in Dependency_marker::visit_field on 2nd +--echo # execution with merged subquery) +--echo # + +CREATE TABLE t1 (i1 INT); +insert into t1 values(1),(2); + +CREATE TABLE t2 (i2 INT); +insert into t2 values(1),(2); + +prepare stmt from " + select 1 from ( + select + if (i1<0, 0, 0) as f1, + (select f1) as f2 + from t1, t2 + ) sq +"; + +execute stmt; +execute stmt; + +drop table t1,t2; + +--echo # +--echo # MDEV-9619: Assertion `null_ref_table' failed in virtual +--echo # table_map Item_direct_view_ref::used_tables() const on 2nd +--echo # execution of PS +--echo # + +CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM; +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES ('a'),('b'); + +CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM; +INSERT INTO t2 VALUES ('c'),('d'); + +PREPARE stmt FROM "SELECT * FROM v1 WHERE f1 = SOME ( SELECT f2 FROM t2 )"; +EXECUTE stmt; +EXECUTE stmt; +insert into t1 values ('c'); +EXECUTE stmt; +EXECUTE stmt; + +deallocate prepare stmt; +drop view v1; +drop table t1,t2; + +CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM; +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES ('a'),('b'); + +CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM; +INSERT INTO t2 VALUES ('c'),('d'); + +PREPARE stmt FROM "SELECT * FROM v1 WHERE (f1,f1) = SOME ( SELECT f2,f2 FROM t2 )"; +EXECUTE stmt; +EXECUTE stmt; +insert into t1 values ('c'); +EXECUTE stmt; +EXECUTE stmt; + +deallocate prepare stmt; +drop view v1; +drop table t1,t2; + + + +CREATE TABLE t1 (column1 INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (3),(9); + +CREATE TABLE t2 (column2 INT) ENGINE=MyISAM; + +INSERT INTO t2 VALUES (1),(4); + +CREATE TABLE t3 (column3 INT) ENGINE=MyISAM; +INSERT INTO t3 VALUES (6),(8); + +CREATE TABLE t4 (column4 INT) ENGINE=MyISAM; +INSERT INTO t4 VALUES (2),(5); + +PREPARE stmt FROM " +SELECT ( + SELECT MAX( table1.column1 ) AS field1 + FROM t1 AS table1 + WHERE (111,table3.column3) IN ( SELECT 111,table2.column2 AS field2 FROM t2 AS table2 ) +) AS sq +FROM t3 AS table3, t4 AS table4 GROUP BY sq +"; + +EXECUTE stmt; +EXECUTE stmt; + +deallocate prepare stmt; +drop table t1,t2,t3,t4; + +create table t1 (a int, b int, c int); +create table t2 (x int, y int, z int); +create table t3 as select * from t1; +insert into t1 values (1,2,3),(4,5,6),(100,200,300),(400,500,600); +insert into t2 values (1,2,3),(7,8,9),(100,200,300),(400,500,600); +insert into t3 values (1,2,3),(11,12,13),(100,0,0),(400,500,600); + + +set @optimizer_switch_save=@@optimizer_switch; +set @join_cache_level_save=@@join_cache_level; +set optimizer_switch='materialization=off'; +set join_cache_level=0; +select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z); +prepare stmt from "select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z)"; +EXECUTE stmt; +EXECUTE stmt; + +create view v1 as select * from t1; +create view v2 as select * from t2; +create view v3 as select * from t3; +select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z); +prepare stmt from "select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z)"; +EXECUTE stmt; +EXECUTE stmt; +set optimizer_switch=@optimizer_switch_save; +set join_cache_level=@join_cache_level_save; + +deallocate prepare stmt; +drop view v1,v2,v3; +drop table t1,t2,t3; + --echo # End of 5.5 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/range_vs_index_merge.test mariadb-10.1-10.1.30/mysql-test/t/range_vs_index_merge.test --- mariadb-10.1-10.1.25/mysql-test/t/range_vs_index_merge.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/range_vs_index_merge.test 2017-12-21 15:48:48.000000000 +0000 @@ -1241,6 +1241,59 @@ DROP TABLE t1; +--echo # +--echo # mdev-11574: do not build index merge of two indexes when +--echo # one index is an infix of the other index +--echo # + +set names utf8; + +CREATE DATABASE world; + +use world; + +--source include/world_schema.inc + +--disable_query_log +--disable_result_log +--disable_warnings +--source include/world.inc +--enable_warnings +--enable_result_log +--enable_query_log + +DROP INDEX Country ON City; +CREATE INDEX CountryName ON City(Country,Name); +CREATE INDEX Name ON City(Name); + +--disable_query_log +--disable_result_log +--disable_warnings +ANALYZE TABLE City; +--enable_warnings +--enable_result_log +--enable_query_log + +let $q= +select * from City +where + Country='FIN' AND Name IN ('Lahti','Imatra') OR + Country='RUS' AND Name IN ('St Petersburg', 'Moscow') OR + Country='SWE' AND Name IN ('Stockholm', 'Uppsala') OR + Country='DEU' AND Name IN ('Berlin', 'Bonn') OR + Country='BEL' AND Name IN ('Antwerpen', 'Gent') OR + Country='PRT' AND Name IN ('Braga', 'Porto') OR + Country='FRA' AND Name IN ('Paris', 'Marcel') OR + Country='POL' AND Name IN ('Warszawa', 'Wroclaw') OR + Country='NOR' AND Name IN ('Oslo', 'Bergen') OR + Country='ITA' AND Name IN ('Napoli', 'Venezia'); + +eval $q; +eval explain $q; + + +DROP DATABASE world; + #the following command must be the last one in the file set session optimizer_switch='index_merge_sort_intersection=default'; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/read_only.test mariadb-10.1-10.1.30/mysql-test/t/read_only.test --- mariadb-10.1-10.1.25/mysql-test/t/read_only.test 2017-07-01 18:20:18.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/read_only.test 2017-12-21 15:48:48.000000000 +0000 @@ -84,6 +84,9 @@ insert into t4 select * from t3; +--error ER_OPTION_PREVENTS_STATEMENT +create table t3 (a int); + # a non-temp table updated: --error ER_OPTION_PREVENTS_STATEMENT update t1,t3 set t1.a=t3.a+1 where t1.a=t3.a; @@ -116,6 +119,11 @@ insert into t1 values(1); # +# MDEV-14056 DROP TEMPORARY TABLE IF EXISTS causes error 1290 with read_only option +# +drop temporary table if exists t1; + +# # Bug#11733 COMMITs should not happen if read-only is set # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/show_function_with_pad_char_to_full_length.test mariadb-10.1-10.1.30/mysql-test/t/show_function_with_pad_char_to_full_length.test --- mariadb-10.1-10.1.25/mysql-test/t/show_function_with_pad_char_to_full_length.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/show_function_with_pad_char_to_full_length.test 2017-12-21 15:48:48.000000000 +0000 @@ -0,0 +1,23 @@ +# +# Test that show function status succeeds with +# sql_mode = 'PAD_CHAR_TO_FULL_LENGTH (MDEV-13149) + +# show function status + +create function f() returns int return 1; +--replace_column 1 T 3 T 4 T 5 T 6 T 7 T 8 T 9 T 10 T 11 T +show function status; +set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; +--replace_column 1 T 3 T 4 T 5 T 6 T 7 T 8 T 9 T 10 T 11 T +show function status; +drop function f; +select @@sql_mode; + +# select ROUTINE_NAME from information_schema.ROUTINES + +create function f() returns int return 1; +select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f'; +set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; +select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f'; +drop function f; +select @@sql_mode; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/sp.test mariadb-10.1-10.1.30/mysql-test/t/sp.test --- mariadb-10.1-10.1.25/mysql-test/t/sp.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/sp.test 2017-12-21 15:48:48.000000000 +0000 @@ -9556,5 +9556,53 @@ drop user 'foo'@'%'; drop procedure sp1; +--echo # +--echo # MDEV-10972: Insert from select / view / union -- +--echo # repeatable crash in 10.1, 10.2 Linux/Mac/Windows +--echo # + +create table t (id int auto_increment primary key); +insert into t values (9494),(9495),(9496),(9497),(9498),(9499),(9500),(9501),(9502),(9503); + +create VIEW v AS +select id from t +union +select id from t +; + +drop procedure if exists p; +create procedure p() +insert into tmp_t select t.id from ( + select id from v + union + select id from v +) sq +inner join t on (sq.id = t.id); + +--error ER_NO_SUCH_TABLE +CALL p(); +create table tmp_t (id int null); +CALL p(); + +drop procedure p; +drop view v; +drop table t, tmp_t; + + +--echo # +--echo # MDEV-13936: Server crashes in Time_and_counter_tracker::incr_loops +--echo # +CREATE TABLE t1 (i INT); +CREATE VIEW v1 AS SELECT * FROM t1 WHERE RAND() > 0.5; +CREATE FUNCTION f1() RETURNS INT RETURN ( SELECT MAX(i) FROM v1 ); + +--error ER_NON_INSERTABLE_TABLE +REPLACE INTO v1 VALUES (f1()); +SET @aux = f1(); + +# Cleanup +DROP FUNCTION f1; +DROP VIEW v1; +DROP TABLE t1; --echo #End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/ssl.test mariadb-10.1-10.1.30/mysql-test/t/ssl.test --- mariadb-10.1-10.1.25/mysql-test/t/ssl.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/ssl.test 2017-12-21 15:48:48.000000000 +0000 @@ -33,8 +33,8 @@ disconnect ssl_con; create user mysqltest_1@localhost; -grant usage on mysqltest.* to mysqltest_1@localhost require cipher "EDH-RSA-DES-CBC3-SHA"; ---exec $MYSQL -umysqltest_1 --ssl-cipher=EDH-RSA-DES-CBC3-SHA -e "show status like 'ssl_cipher'" 2>&1 +grant usage on mysqltest.* to mysqltest_1@localhost require cipher "AES256-SHA"; +--exec $MYSQL -umysqltest_1 --ssl-cipher=AES256-SHA -e "show status like 'ssl_cipher'" 2>&1 drop user mysqltest_1@localhost; # Wait till all disconnects are completed diff -Nru mariadb-10.1-10.1.25/mysql-test/t/stat_tables_repl.test mariadb-10.1-10.1.30/mysql-test/t/stat_tables_repl.test --- mariadb-10.1-10.1.25/mysql-test/t/stat_tables_repl.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/stat_tables_repl.test 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,6 @@ --source include/have_stat_tables.inc ---source include/master-slave.inc --source include/have_binlog_format_row.inc +--source include/master-slave.inc --echo # --echo # Bug mdev-485: unexpected failure with replication of DROP/ALTER table diff -Nru mariadb-10.1-10.1.25/mysql-test/t/subselect_exists2in.test mariadb-10.1-10.1.30/mysql-test/t/subselect_exists2in.test --- mariadb-10.1-10.1.25/mysql-test/t/subselect_exists2in.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/subselect_exists2in.test 2017-12-21 15:48:48.000000000 +0000 @@ -786,6 +786,46 @@ DROP TABLE t1; +--echo # +--echo # MDEV-14164: Unknown column error when adding aggregate to function +--echo # in oracle style procedure FOR loop +--echo # + +CREATE TABLE t1(id INT, val INT); +DELIMITER //; +CREATE PROCEDURE p1() +BEGIN + DECLARE cur1 CURSOR FOR SELECT * FROM ( + SELECT DISTINCT id FROM t1) a + WHERE NOT EXISTS (SELECT * FROM ( SELECT id FROM t1) b + WHERE a.id=b.id); + OPEN cur1; + CLOSE cur1; + OPEN cur1; + CLOSE cur1; +END; +// +DELIMITER ;// +CALL p1(); +DROP PROCEDURE p1; +DROP TABLE t1; + +CREATE TABLE t1(id INT, val INT); +DELIMITER //; +CREATE PROCEDURE p1() +BEGIN + SELECT * FROM (SELECT DISTINCT id FROM t1) a + WHERE NOT a.id IN (SELECT b.id FROM t1 b); + SELECT * FROM (SELECT DISTINCT id FROM t1) a + WHERE NOT EXISTS (SELECT * FROM t1 b WHERE a.id=b.id); +END; +// +DELIMITER ;// +CALL p1(); +CALL p1(); +DROP PROCEDURE p1; +DROP TABLE t1; + --echo # End of 10.0 tests #restore defaults diff -Nru mariadb-10.1-10.1.25/mysql-test/t/subselect_mat_cost_bugs.test mariadb-10.1-10.1.30/mysql-test/t/subselect_mat_cost_bugs.test --- mariadb-10.1-10.1.25/mysql-test/t/subselect_mat_cost_bugs.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/subselect_mat_cost_bugs.test 2017-12-21 15:48:48.000000000 +0000 @@ -522,4 +522,23 @@ drop table t1; +--echo # +--echo # MDEV-13135: subquery with ON expression subject to +--echo # semi-join optimizations +--echo # + +CREATE TABLE t1 (a INT); +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT a AS v_a FROM t1; +INSERT INTO t1 VALUES (1),(3); + +CREATE TABLE t2 (b INT, KEY(b)); +INSERT INTO t2 VALUES (3),(4); + +SELECT * FROM t1 WHERE a NOT IN ( + SELECT b FROM t2 INNER JOIN v1 ON (b IN ( SELECT a FROM t1 )) + WHERE v_a = b +); + +DROP VIEW v1; +DROP TABLE t1,t2; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/subselect_nulls.test mariadb-10.1-10.1.30/mysql-test/t/subselect_nulls.test --- mariadb-10.1-10.1.25/mysql-test/t/subselect_nulls.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/subselect_nulls.test 2017-12-21 15:48:48.000000000 +0000 @@ -97,3 +97,9 @@ drop table x1; drop table x2; + +# +# MDEV-7339 Server crashes in Item_func_trig_cond::val_int +# +select (select 1, 2) in (select 3, 4); +select (select NULL, NULL) in (select 3, 4); diff -Nru mariadb-10.1-10.1.25/mysql-test/t/subselect.test mariadb-10.1-10.1.30/mysql-test/t/subselect.test --- mariadb-10.1-10.1.25/mysql-test/t/subselect.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/subselect.test 2017-12-21 15:48:48.000000000 +0000 @@ -3600,7 +3600,7 @@ drop table t2, t1; drop view v1; ---echo End of 5.0 tests. +--echo # End of 5.0 tests. # # Test [NOT] IN truth table (both as top-level and general predicate). @@ -4685,7 +4685,7 @@ drop table t1,t2; ---echo End of 5.1 tests +--echo # End of 5.1 tests --echo # --echo # Bug #11765713 58705: @@ -5156,7 +5156,7 @@ DROP TABLE t1,t2; ---echo End of 5.2 tests +--echo # End of 5.2 tests --echo # --echo # BUG#779885: Crash in eliminate_item_equal with materialization=on in @@ -6004,11 +6004,17 @@ CREATE ALGORITHM=MERGE VIEW v2 AS SELECT * FROM t2; +--error ER_WRONG_GROUP_FIELD +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +--error ER_WRONG_GROUP_FIELD SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; SELECT * FROM v2 where ( SELECT MIN(v2.f2) FROM t1 ) > 0; SELECT count(*) FROM v2 group by ( SELECT MIN(v2.f2) FROM t1 ); delete from t1; +--error ER_WRONG_GROUP_FIELD +SELECT ( SELECT MIN(t2.f2) FROM t1 ) AS sq FROM t2 GROUP BY sq; +--error ER_WRONG_GROUP_FIELD SELECT ( SELECT MIN(v2.f2) FROM t1 ) AS sq FROM v2 GROUP BY sq; drop view v2; @@ -6024,6 +6030,49 @@ SELECT * FROM t1 WHERE f2 <= SOME ( SELECT f1 FROM t1 ); DROP TABLE t1; +--echo # +--echo # MDEV-10146: Wrong result (or questionable result and behavior) +--echo # with aggregate function in uncorrelated SELECT subquery +--echo # +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT * FROM t1; +INSERT INTO t1 VALUES (1),(2); + +CREATE TABLE t2 (f2 int); + +INSERT INTO t2 VALUES (3); +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; + +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; + +INSERT INTO t2 VALUES (4); + +--error ER_SUBQUERY_NO_1_ROW +SELECT ( SELECT MAX(f1) FROM t2 ) FROM v1; +--error ER_SUBQUERY_NO_1_ROW +SELECT ( SELECT MAX(f1) FROM t2 ) FROM t1; + +drop view v1; +drop table t1,t2; + +# +# MDEV-7828 Assertion `key_read == 0' failed in TABLE::enable_keyread with SELECT SQ and WHERE SQ +# +CREATE TABLE t1 (f1 INT, KEY(f1)) ENGINE=MyISAM; +INSERT t1 VALUES (4),(8); +CREATE TABLE t2 (f2 INT, KEY(f2)) ENGINE=MyISAM; +INSERT t2 VALUES (6); +SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +--echo # +--echo # Disable this query till MDEV-13399 is resolved +--echo # +--echo # INSERT t2 VALUES (9); +--echo # --error ER_SUBQUERY_NO_1_ROW +--echo # SELECT (SELECT MAX(sq.f2) FROM t1) FROM (SELECT * FROM t2) AS sq WHERE f2 = 2; +--echo # +drop table t1, t2; + +--echo # End of 10.0 tests --echo # --echo # MDEV-9487: Server crashes in Time_and_counter_tracker::incr_loops @@ -6051,4 +6100,4 @@ DROP TABLE t1, t2; SET NAMES default; ---echo End of 10.1 tests +--echo # End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/symlink.test mariadb-10.1-10.1.30/mysql-test/t/symlink.test --- mariadb-10.1-10.1.25/mysql-test/t/symlink.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/symlink.test 2017-12-21 15:48:48.000000000 +0000 @@ -316,3 +316,28 @@ DATA DIRECTORY "$MYSQLTEST_VARDIR/tmp"; DROP TABLE test.t1; +use test; + +# +# End of 5.5 tests +# + +# +# End of 10.0 tests +# + +# +# MDEV-13636 ALTER TABLE ... DELAY_KEY_WRITE=1 creates table copy for MyISAM table with DATA DIRECTORY/INDEX DIRECTORY options +# +replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR; +eval +create table t1(c1 int, c2 int, c3 varchar(100)) engine=MyISAM data directory='$MYSQL_TMP_DIR' index directory = '$MYSQL_TMP_DIR'; +insert t1 values (1,2,3), (2,3,4), (3,4,5), (4,5,6), (5,6,7), (6,7,8), (7,8,9); +alter online table t1 delay_key_write=1; +replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR; +show create table t1; +drop table t1; + +# +# End of 10.1 tests +# diff -Nru mariadb-10.1-10.1.25/mysql-test/t/tc_heuristic_recover.test mariadb-10.1-10.1.30/mysql-test/t/tc_heuristic_recover.test --- mariadb-10.1-10.1.25/mysql-test/t/tc_heuristic_recover.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/tc_heuristic_recover.test 2017-12-21 15:48:48.000000000 +0000 @@ -0,0 +1,106 @@ +# The test verifies a few server/engine recovery option combinations. +# Specifically, MDEV-13437,13438 are concerned with no crashes +# due to InnoDB being read-only during --tc-heuristic-recover=ROLLBACK|COMMIT. +# +# Initially the test commits a transaction and in the following proceeds +# throughout some phases. +# Within them the server is shut down and attempted to restart, to succeed +# that in the end. +# All this proves no crashes and effective rollback of the transaction. +# +--source include/have_innodb.inc +# The test logics really requires --log-bin. +--source include/have_binlog_format_mixed.inc +--source include/have_debug_sync.inc +--source include/not_embedded.inc + +call mtr.add_suppression("Can't init tc log"); +call mtr.add_suppression("Found 1 prepared transactions!"); +call mtr.add_suppression("Aborting"); + +# Now take a shapshot of the last time server options. +# +# The "restart" expect-file facility can't be engaged because the server +# having conflicting options may not succeed to boot up. +# Also notice $MYSQLD_CMD is too "static" being unaware of the actual options +# of the last (before shutdown or kill) server run. +# That's why $MYSQLD_LAST_CMD that allows for the server new start +# with more options appended to a stub set which is settled at this very point. +--let $mysqld_stub_cmd= $MYSQLD_LAST_CMD +--let $error_log= $MYSQLTEST_VARDIR/log/mysqld.1.err +--let SEARCH_FILE= $error_log +set debug_sync='RESET'; + +CREATE TABLE t1 (i INT) ENGINE=InnoDB; +SET GLOBAL innodb_flush_log_at_trx_commit=1; +FLUSH TABLES; # we need the table post crash-restart, see MDEV-8841. + +# Run transaction in a separate "prey" connection +--connect (con1,localhost,root,,) +# The signal won't arrive though +set debug_sync='ha_commit_trans_after_prepare WAIT_FOR go'; +--send INSERT INTO t1 VALUES (1); + +--connection default + +--let $table= information_schema.processlist +--let $where= where state = 'debug sync point: ha_commit_trans_after_prepare' +--let $wait_condition= SELECT count(*) = 1 FROM $table $where +--source include/wait_condition.inc + +--echo # Prove that no COMMIT or ROLLBACK occurred yet. +SELECT * FROM t1; +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SELECT * FROM t1; + +# TODO: MDEV-12700 Allow innodb_read_only startup without prior slow shutdown. +--source include/kill_mysqld.inc +--let $restart_parameters= --innodb-force-recovery=4 +--source include/fail_start_mysqld.inc + +--let SEARCH_PATTERN= was in the XA prepared state +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= Found 1 prepared transactions! +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= \\[ERROR\\] Can\\'t init tc log +--source include/search_pattern_in_file++.inc + +--let $restart_parameters= --innodb-force-recovery=4 --tc-heuristic-recover=COMMIT +--source include/fail_start_mysqld.inc +--let SEARCH_PATTERN= was in the XA prepared state +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= Found 1 prepared transactions! +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= \\[ERROR\\] Can\\'t init tc log +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= Please restart mysqld without --tc-heuristic-recover +--source include/search_pattern_in_file++.inc + +--let $restart_parameters= --tc-heuristic-recover=ROLLBACK +--source include/fail_start_mysqld.inc + +--let SEARCH_PATTERN= was in the XA prepared state +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= Found 1 prepared transactions! +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= \\[ERROR\\] Can\\'t init tc log +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= Please restart mysqld without --tc-heuristic-recover +--source include/search_pattern_in_file++.inc + +--let $restart_parameters= +--source include/start_mysqld.inc + +--let SEARCH_PATTERN= was in the XA prepared state +--source include/search_pattern_in_file++.inc +--let SEARCH_PATTERN= Found 1 prepared transactions! +--source include/search_pattern_in_file++.inc + +SET TRANSACTION ISOLATION LEVEL READ COMMITTED; +SELECT * FROM t1; +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +SELECT * FROM t1; +# +# Cleanup +# +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/trigger.test mariadb-10.1-10.1.30/mysql-test/t/trigger.test --- mariadb-10.1-10.1.25/mysql-test/t/trigger.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/trigger.test 2017-12-21 15:48:48.000000000 +0000 @@ -2634,3 +2634,27 @@ DROP TRIGGER t1_bi; DROP TABLE t1; +--echo # +--echo # MDEV-13936: Server crashes in Time_and_counter_tracker::incr_loops +--echo # + +CREATE TABLE t1 (i INT); +CREATE VIEW v1 AS SELECT * FROM t1 WHERE RAND() > 0.5; +CREATE TABLE t2 (a int); +CREATE TABLE t3 (a int); + +create trigger trg after insert on t2 for each row + INSERT INTO t3 SELECT MAX(i) FROM v1 UNION SELECT MAX(i) FROM v1; + +drop table t1; + +--error ER_NO_SUCH_TABLE +insert into t2 value (2); +CREATE TABLE t1 (i INT); +insert into t2 value (2); + +DROP VIEW v1; +DROP TABLE t1,t2,t3; + + +--echo End of 10.1 tests. diff -Nru mariadb-10.1-10.1.25/mysql-test/t/type_bit.test mariadb-10.1-10.1.30/mysql-test/t/type_bit.test --- mariadb-10.1-10.1.25/mysql-test/t/type_bit.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/type_bit.test 2017-12-21 15:48:48.000000000 +0000 @@ -439,3 +439,22 @@ DROP TABLE t1; --echo End of 5.1 tests + +--echo # +--echo # Start of 10.1 tests +--echo # + +--echo # +--echo # MDEV-8867 Wrong field type or metadata for COALESCE(bit_column, 1) +--echo # + +CREATE TABLE t1 (val bit(1)); +INSERT INTO t1 VALUES (0); +CREATE TABLE t2 AS SELECT COALESCE(val, 1) AS c FROM t1; +SELECT * FROM t2; +SHOW CREATE TABLE t2; +DROP TABLE t2; +--enable_metadata +SELECT COALESCE(val, 1) FROM t1; +--disable_metadata +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/t/type_date.test mariadb-10.1-10.1.30/mysql-test/t/type_date.test --- mariadb-10.1-10.1.25/mysql-test/t/type_date.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/type_date.test 2017-12-21 15:48:48.000000000 +0000 @@ -576,6 +576,15 @@ SELECT DATE(COALESCE(a)), DATE(COALESCE(b)), DATE(COALESCE(c)) FROM t1; DROP TABLE t1; +--echo # +--echo # MDEV-14221 Assertion `0' failed in Item::field_type_for_temporal_comparison +--echo # + +CREATE TABLE t1 (d DATE); +INSERT INTO t1 VALUES ('1985-05-13'),('1989-12-24'); +SELECT d, COUNT(*) FROM t1 GROUP BY d WITH ROLLUP HAVING CASE d WHEN '2017-05-25' THEN 0 ELSE 1 END; +DROP TABLE t1; + --echo # --echo # End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/type_varchar.test mariadb-10.1-10.1.30/mysql-test/t/type_varchar.test --- mariadb-10.1-10.1.25/mysql-test/t/type_varchar.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/type_varchar.test 2017-12-21 15:48:48.000000000 +0000 @@ -219,7 +219,51 @@ DROP TABLE t1; --echo # ---echo # Start of 10.0 tests +--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535 +--echo # + +CREATE TABLE t1 (c1 VARBINARY(65532)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARBINARY(65533)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARBINARY(65534)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARBINARY(65535)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARBINARY(65536)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(65532)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(65533)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(65534)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(65535)); +DESCRIBE t1; +DROP TABLE t1; + +CREATE TABLE t1 (c1 VARCHAR(65536)); +DESCRIBE t1; +DROP TABLE t1; + +--echo # +--echo # End of 5.5 tests --echo # --echo # diff -Nru mariadb-10.1-10.1.25/mysql-test/t/union.test mariadb-10.1-10.1.30/mysql-test/t/union.test --- mariadb-10.1-10.1.25/mysql-test/t/union.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/union.test 2017-12-21 15:48:48.000000000 +0000 @@ -1405,6 +1405,20 @@ --echo End of 5.0 tests +# +# Bug #24595639: INCORRECT BEHAVIOR IN QUERY WITH UNION AND GROUP BY +# +create table t1 (a int, b int); +insert into t1 values (1,1),(2,2),(3,3); +create table t2 (c varchar(30), d varchar(30)); +insert into t1 values ('1','1'),('2','2'),('4','4'); +create table t3 (e int, f int); +insert into t3 values (1,1),(2,2),(31,31),(32,32); +select e,f, (e , f) in (select e,b from t1 union select c,d from t2) as sub from t3; +select avg(f), (e , f) in (select e,b from t1 union select c,d from t2) as sub from t3 group by sub; +drop table t1,t2,t3; + +--echo End of 5.5 tests --echo # --echo # WL#1763 Avoid creating temporary table in UNION ALL diff -Nru mariadb-10.1-10.1.25/mysql-test/t/user_var.test mariadb-10.1-10.1.30/mysql-test/t/user_var.test --- mariadb-10.1-10.1.25/mysql-test/t/user_var.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/user_var.test 2017-12-21 15:48:48.000000000 +0000 @@ -1,7 +1,5 @@ # Initialise ---disable_warnings -drop table if exists t1,t2; ---enable_warnings +source include/have_sequence.inc; --error 1054 set @a := foo; @@ -501,3 +499,9 @@ --enable_column_names --enable_query_log +# +# MDEV-13897 SELECT @a := MAX(col) FROM t requires full index scan +# +explain select @a:=max(seq) from seq_1_to_1000000; + +# End of 10.1 tests diff -Nru mariadb-10.1-10.1.25/mysql-test/t/view.test mariadb-10.1-10.1.30/mysql-test/t/view.test --- mariadb-10.1-10.1.25/mysql-test/t/view.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/view.test 2017-12-21 15:48:48.000000000 +0000 @@ -1,3 +1,4 @@ +--source include/have_partition.inc --disable_warnings drop table if exists t1,t2,t3,t4,t5,t6,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; @@ -5577,6 +5578,31 @@ drop view v1; drop table t1,t2,t3; +--echo # +--echo # MDEV-11240: Server crashes in check_view_single_update or +--echo # Assertion `derived->table' failed in mysql_derived_merge_for_insert +--echo # + +CREATE TABLE t3 (a INT); +CREATE ALGORITHM = MERGE VIEW v1 AS SELECT t2.a FROM t3 AS t1, t3 AS t2; +CREATE ALGORITHM = MERGE VIEW v2 AS SELECT * FROM v1; +--error ER_VIEW_NO_INSERT_FIELD_LIST +PREPARE stmt FROM 'REPLACE INTO v2 SELECT a FROM t3'; +drop view v1,v2; +drop table t3; + +--echo # +--echo # MDEV-14619: VIEW and GROUP_CONCAT +--echo # + +CREATE TABLE t1 (str text); +INSERT INTO t1 VALUES ("My"),("SQL"); +CREATE VIEW v1 AS SELECT GROUP_CONCAT(str SEPARATOR '\\') FROM t1; +SELECT * FROM v1; +SHOW CREATE VIEW v1; +drop view v1; +drop table t1; + --echo # ----------------------------------------------------------------- --echo # -- End of 5.5 tests. --echo # ----------------------------------------------------------------- diff -Nru mariadb-10.1-10.1.25/mysql-test/t/xml.test mariadb-10.1-10.1.30/mysql-test/t/xml.test --- mariadb-10.1-10.1.25/mysql-test/t/xml.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/t/xml.test 2017-12-21 15:48:48.000000000 +0000 @@ -674,9 +674,7 @@ --echo # Bug#58175 xml functions read initialized bytes when conversions happen --echo # SET NAMES latin1; ---enable_prepare_warnings SELECT UPDATEXML(CONVERT('' USING swe7), TRUNCATE('',1), 0); ---disable_prepare_warnings --echo # --echo # Bug#12375190: UPDATEXML CRASHES ON SIMPLE INPUTS @@ -715,7 +713,7 @@ SELECT UPDATEXML(txt, CONCAT('//', REPEAT('b', 63)), '63/63+') FROM t1; DROP TABLE t1; -# This will call my_str_realloc_mysqld() +# This will call realloc() CREATE TABLE t1 (a TEXT); INSERT INTO t1 VALUES (CONCAT('<', REPEAT('b',128),'>b128<',REPEAT('c',512),'>c512')); SELECT ExtractValue (a, CONCAT('//',REPEAT('c',512))) AS c512 FROM t1; diff -Nru mariadb-10.1-10.1.25/mysql-test/unstable-tests mariadb-10.1-10.1.30/mysql-test/unstable-tests --- mariadb-10.1-10.1.25/mysql-test/unstable-tests 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysql-test/unstable-tests 2017-12-21 15:48:48.000000000 +0000 @@ -23,77 +23,98 @@ # ############################################################################## -main.alter_table_online : Modified in 10.1.24 +main.alter_table : Modified in 10.1.29 main.alter_table_trans : MDEV-12084 - timeout -main.analyze_format_json : MDEV-11866 - Wrong result -main.analyze_stmt_orderby : MDEV-11866 - Wrong result main.analyze_stmt_slow_query_log : MDEV-12237 - Wrong result -main.bootstrap : Modified in 10.1.25 +main.auth_named_pipe : MDEV-14724 - System error 2 +main.bootstrap : Include files modified in 10.1.29 +main.case : Modified in 10.1.29 main.create_delayed : MDEV-10605 - failed with timeout -main.ctype_ucs : Modified in 10.1.25 +main.ctype_gbk : Modified in 10.1.29 +main.ctype_latin1 : Modified in 10.1.29 +main.ctype_ucs : Modified in 10.1.29 main.ctype_utf16le : MDEV-10675: timeout or extra warnings -main.derived_view : Modified in 10.1.24 -main.drop-no_root : MDEV-12633 - Valgrind warnings -main.errors : MDEV-13179 - Wrong error 1290; modified in 10.1.25 +main.ctype_utf32 : Modified in 10.1.29 +main.ctype_utf8 : Modified in 10.1.30 +main.ctype_utf8mb4 : Modified in 10.1.30 +main.delete_returning : Modified in 10.1.29 +main.delimiter_command_case_sensitivity : Added in 10.1.29 +main.events_2 : MDEV-13277 - Server crash main.events_bugs : MDEV-12892 - Crash in fill_schema_processlist main.events_restart : MDEV-12236 - Server shutdown problem -main.func_concat : Modified in 10.1.25 -main.func_crypt : Modified in 10.1.25 -main.func_regexp_pcre : Modified in 10.1.25 -main.gis : Modified in 10.1.25 +main.func_in : Modified in 10.1.29 +main.func_misc : Modified in 10.1.29 +main.func_regexp_pcre : Modified in 10.1.29 +main.func_set : Modified in 10.1.30 +main.func_str : Modified in 10.1.30 +main.func_time : Modified in 10.1.29 +main.gis-precise : Modified in 10.1.29 +main.group_by : Modified in 10.1.30 +main.having : Modified in 10.1.30 main.host_cache_size_functionality : MDEV-10606 - sporadic failure on shutdown main.index_intersect_innodb : MDEV-10643 - failed with timeout main.index_merge_innodb : MDEV-7142 - Wrong execution plan, timeout with valgrind +main.information_schema : Modified in 10.1.29 main.innodb_mysql_lock : MDEV-7861 - sporadic lock detection failure -main.join_outer : Modified in 10.1.25 +main.join_outer : Modified in 10.1.30 main.kill_processlist-6619 : MDEV-10793 - wrong result in processlist -main.loadxml : Modified in 10.1.24 main.mdev-504 : MDEV-10607 - sporadic "can't connect" +main.mdev13607 : Added in 10.1.29 main.mdev375 : MDEV-10607 - sporadic "can't connect" -main.mdl_sync : Modified in 10.1.25 main.merge : MDEV-10607 - sporadic "can't connect" -main.myisam_debug : Modified in 10.1.24 -main.mysql : Modified in 10.1.25 -main.mysqlcheck : MDEV-12633 - Valgrind warnings +main.myisam : Modified in 10.1.29 +main.mysql_upgrade_noengine : MDEV-14355 - Plugin is busy +main.mysqlbinlog : Modified in 10.1.29 main.mysqlslap : MDEV-11801 - timeout -main.mysqltest : MDEV-9269 - fails on Alpha; modified in 10.1.25 -main.mysql_client_test : MDEV-12633 - Valgrind warnings -main.mysql_client_test_comp : MDEV-12633 - Valgrind warnings -main.mysql_client_test_nonblock : MDEV-12633 - Valgrind warnings -main.mysqld--help : Modified in 10.1.25 -main.order_by : MOdified in 10.1.25 +main.mysqltest : MDEV-9269 - fails on Alpha main.order_by_optimizer_innodb : MDEV-10683 - wrong execution plan -main.partition_alter : Modified in 10.1.25 +main.partition_datatype : Modified in 10.1.29 +main.partition_example : Include files modified in 10.1.29 main.partition_innodb_plugin : MDEV-12901 - Valgrind warnings -main.ps : MDEV-11017 - sporadic wrong Prepared_stmt_count +main.plugin : Include files modified in 10.1.29 +main.plugin_innodb : Include files modified in 10.1.29 +main.plugin_load : Include files modified in 10.1.29 +main.plugin_load_option : Include files modified in 10.1.29 +main.plugin_maturity : Include files modified in 10.1.29 +main.plugin_not_embedded : Include files modified in 10.1.29 +main.ps : MDEV-11017 - sporadic wrong Prepared_stmt_count; modified in 10.1.29 main.query_cache : MDEV-12895 - Wrong result +main.range_vs_index_merge : Modified in 10.1.29 main.range_vs_index_merge_innodb : MDEV-12637 - Timeout -main.repair_symlink-5543 : MDEV-12215 - Wrong error codes +main.read_only : Modified in 10.1.29 main.set_statement : MDEV-13183 - Wrong result -main.show_check : MDEV-12633 - Valgrind warnings main.show_explain : MDEV-10674 - sporadic failure +main.show_function_with_pad_char_to_full_length : Added in 10.1.29 +main.sp : Modified in 10.1.30 main.sp-security : MDEV-10607 - sporadic "can't connect" main.status : MDEV-8510 - sporadic wrong result +main.subselect_exists2in : Modified in 10.1.29 main.subselect_innodb : MDEV-10614 - sporadic wrong results -main.subselect_mat_cost_bugs : Modified in 10.1.25 -main.subselect_sj : Modified in 10.1.24 -main.subselect_sj_mat : Modified in 10.1.25 -main.subselect_sj2_mat : Modified in 10.1.25 -main.symlink-aria-11902 : MDEV-12215 - Unexpected errors -main.symlink-myisam-11902 : MDEV-12215 - Unexpected errors +main.subselect_mat_cost_bugs : Modified in 10.1.29 +main.table_options-5867 : Include files modified in 10.1.29 +main.trigger : Modified in 10.1.30 +main.truncate_badse : Include files modified in 10.1.29 +main.type_bit : Modified in 10.1.29 +main.type_date : Modified in 10.1.29 main.type_datetime_hires : MDEV-10687 - timeout -main.view : Modified in 10.1.25 +main.type_varchar : Modified in 10.1.29 +main.user_var : Modified in 10.1.29 +main.view : Modified in 10.1.30 +main.xml : Modified in 10.1.30 #---------------------------------------------------------------- -archive.discover : MDEV-10510 - table is marked as crashed +archive.discover : MDEV-10510 - Table is marked as crashed +archive.mysqlhotcopy_archive : MDEV-14726 - Table is marked as crashed #---------------------------------------------------------------- binlog.binlog_commit_wait : MDEV-10150 - Error: too much time elapsed +binlog.binlog_flush_binlogs_delete_domain : MDEV-14431 - Wrong error code; added in 10.1.30 +binlog.binlog_gtid_delete_domain_debug : Added in 10.1.30 binlog.binlog_killed : MDEV-12925 - Wrong result +binlog.binlog_spurious_ddl_errors : Include files modified in 10.1.29 binlog.binlog_xa_recover : MDEV-8517 - Extra checkpoint -binlog.mysqladmin : Added in 10.1.24 #---------------------------------------------------------------- @@ -101,30 +122,39 @@ binlog_encryption.encrypted_master : MDEV-12906 - Failed to sync binlog_encryption.rpl_parallel : MDEV-10653 - Timeout binlog_encryption.rpl_semi_sync : MDEV-11220 - Wrong result, MDEV-11673 - Valgrind warning +binlog_encryption.rpl_ssl : MDEV-14507 - Timeout on SLES 11.4 +binlog_encryption.rpl_typeconv : MDEV-14362 - Lost connection to MySQL server during query #---------------------------------------------------------------- -connect.jdbc_new : Modified in 10.1.24 +connect.json_java_2 : Include file modified in 10.1.29 +connect.json_java_3 : Include file modified in 10.1.29 +connect.json_mongo_c : Include file modified in 10.1.29 +connect.mongo_c : Include file modified in 10.1.29 +connect.mongo_java_2 : Include file modified in 10.1.29 +connect.mongo_java_3 : Include file modified in 10.1.29 connect.tbl : MDEV-9844, MDEV-10179 - sporadic crashes, valgrind warnings, wrong results +connect.tbl_thread : MDEV-9844, MDEV-10179, MDEV-14214 - sporadic crashes, valgrind warnings, wrong results +connect.zip : MDEV-13884 - Wrong result #---------------------------------------------------------------- -csv.read_only : Added in 10.1.24 - -#---------------------------------------------------------------- - -encryption.create_or_replace : MDEV-9359 - Assertion failure +encryption.create_or_replace : MDEV-9359 - Assertion failure, MDEV-13516 - Assertion failure +encryption.debug_key_management : MDEV-13841 - Timeout on wait condition +encryption.encrypt_and_grep : MDEV-13765 - Wrong result +encryption.encryption_force : Modified in 10.1.29 +encryption.filekeys_encfile : Include file modified in 10.1.29 +encryption.filekeys_encfile_file : Include file modified in 10.1.29 encryption.innodb-bad-key-change2 : MDEV-12632 - Valgrind warnings -encryption.innodb-checksum-algorithm : MDEV-13167 - Assertion failure; added in 10.1.25 -encryption.innodb-compressed-blob : Modified in 10.1.25 +encryption.innodb-compressed-blob : MDEV-14728 - Unable to get certificate encryption.innodb-discard-import-change : MDEV-12632 - Valgrind warnings +encryption.innodb-encryption-alter : Modified in 10.1.29 encryption.innodb_encryption_discard_import : MDEV-12903 - Wrong result encryption.innodb_encryption_filekeys : MDEV-9962 - timeouts encryption.innodb_encryption-page-compression : MDEV-12630 - crash or assertion failure encryption.innodb_encryption_tables : MDEV-9359 - Assertion failure encryption.innodb_first_page : MDEV-10689 - crashes -encryption.innodb-first-page-read : MDEV-13181 - Signal 8; added in 10.1.25 -encryption.innodb-key-rotation-disable : Modified in 10.1.24 +encryption.innodb-first-page-read : MDEV-14356 - Timeout on wait condition encryption.innodb_lotoftables : MDEV-11531 - InnoDB error encryption.innodb-missing-key : MDEV-9359 - assertion failure encryption.innodb-page_encryption : MDEV-10641 - mutex problem @@ -140,7 +170,6 @@ #---------------------------------------------------------------- -federated.assisted_discovery : Modified in 10.1.24 federated.federated_bug_585688 : MDEV-12907 - Valgrind federated.federated_innodb : MDEV-10617, MDEV-10417 - Wrong checksum, timeouts, fails on Mips federated.federated_partition : MDEV-10417 - Fails on Mips @@ -157,69 +186,79 @@ #---------------------------------------------------------------- -galera.galera_autoinc_sst_xtrabackup : Config modified in 10.1.24 -galera.galera_defaults : Modified in 10.1.25 -galera.galera_gcs_fc_limit : Modified in 10.1.24 -galera.MW-369 : Added in 10.1.25 +galera.* : The suite was enabled in 10.1.27 and is still unstable +galera_3nodes.* : The suite has not been stabilized yet -galera_3nodes.* : config files modified in 10.1.24 +galera.galera_applier_ftwrl_table_alter : MDEV-13738 - MySQL server has gone away +galera.galera_gcs_fc_limit : MDEV-13877 - Timeout +galera.galera_suspend_slave : MDEV-13873 - Wrong error code +galera.galera_toi_truncate : MDEV-13743 - query 'reap' succeeded +galera.galera_unicode_identifiers : MDEV-13871 - Unknown database +galera.galera_var_node_address : MDEV-13880 - Failed to start mysqld +galera.galera_wan : MDEV-13879 - Stray state UUID msg warnings +galera.galera_wsrep_log_conficts : MDEV-13874 - check-testcase failed +galera.partition : MDEV-13881 - Wrong result +galera.query_cache : MDEV-13883 - Wrong result +galera.MW-328A : MDEV-13876 - Wrong result #---------------------------------------------------------------- -innodb.101_compatibility : Modified in 10.1.25 innodb.binlog_consistent : MDEV-10618 - Server fails to start -innodb.doublewrite : MDEV-12905 - Lost connection to MySQL server; modified in 10.1.25 -innodb.drop_table_background : Added in 10.1.24 -innodb.innodb-alter-debug : MDEV-13182 - InnoDB: adjusting FSP_SPACE_FLAGS; modified in 10.1.25 -innodb.innodb-alter-discard : Modified in 10.1.25 -innodb.innodb-alter-nullable : Modified in 10.1.25 -innodb.innodb-alter-table : MDEV-10619 - Testcase timeout; modified in 10.1.25 -innodb.innodb-alter-tempfile : Modified in 10.1.25 +innodb.doublewrite : MDEV-12905, MDEV-14205 - Lost connection to MySQL server +innodb_fts.fulltext2 : MDEV-14727 - Long semaphore wait +innodb.innodb-16k : Modified in 10.1.29 +innodb.innodb-32k : Modified in 10.1.29 +innodb.innodb-64k : Modified in 10.1.29 +innodb.innodb-64k-crash : MDEV-13872 - Failure and crash on startup +innodb.innodb-alter : Modified in 10.1.29 +innodb.innodb-alter-debug : MDEV-13182 - InnoDB: adjusting FSP_SPACE_FLAGS +innodb.innodb-alter-table : MDEV-10619 - Testcase timeout; modified in 10.1.29 +innodb.innodb-autoinc : Modified in 10.1.30 innodb.innodb-blob : MDEV-12053 - Client crash -innodb.innodb_bug14147491 : MDEV-11808 - wrong error codes, also modified in 10.1.24 +innodb.innodb_bug14147491 : MDEV-11808 - wrong error codes innodb.innodb_bug30423 : MDEV-7311 - Wrong number of rows in the plan -innodb.innodb_bug53290 : MDEV-12634 - Valgrind warnings -innodb.innodb-page_compression_bzip2 : Modified in 10.1.24 -innodb.innodb-page_compression_default : Modified in 10.1.24 -innodb.innodb-page_compression_lz4 : Modified in 10.1.24 -innodb.innodb-page_compression_lzma : Modified in 10.1.24 -innodb.innodb-page_compression_lzo : Modified in 10.1.24 -innodb.innodb-page_compression_snappy : Modified in 10.1.24 -innodb.innodb-page_compression_zip : MDEV-10641 - mutex problem; modified in 10.1.24 -innodb.innodb_prefix_index_restart_server : MDEV-12899 - Server crash on shutdown +innodb.innodb_bug48024 : MDEV-14352 - Assertion failure +innodb.innodb-fk : MDEV-13832 - Assertion failure on shutdown +innodb.innodb-get-fk : Modified in 10.1.29 +innodb.innodb-page_compression_lzma : MDEV-14353 - wrong result on Fedora 25 +innodb.innodb-page_compression_tables : Modified in 10.1.29 +innodb.innodb-page_compression_zip : MDEV-10641 - mutex problem +innodb.innodb-replace-debug : Added in 10.1.30 innodb.innodb_stats : MDEV-10682 - wrong result innodb.innodb_sys_semaphore_waits : MDEV-10331 - wrong result -innodb.log_data_file_size : MDEV-12893 - Database page corruption; modified in 10.1.25 -innodb.log_file_size : Modified in 10.1.25 -innodb.row_format_redundant : Added in 10.1.25 -innodb.table_flags : Added in 10.1.25 +innodb.innodb-table-online : Modified in 10.1.29 +innodb.innodb-wl5522-debug : Modified in 10.1.29 +innodb.innodb-wl5980-alter : Modified in 10.1.29 +innodb.innodb_zip_innochecksum2 : MDEV-13882 - Warning: difficult to find free blocks +innodb.recovery_shutdown : Added in 10.1.30 +innodb.table_definition_cache_debug : MDEV-14206 - Extra warning; opt file modified in 10.1.30 +innodb.table_flags : MDEV-14363 - Operating system error number 2 +innodb.undo_log : Modified in 10.1.29 +innodb_fts.concurrent_insert : Added in 10.1.29 +innodb_fts.fulltext : Modified in 10.1.29 innodb_fts.fulltext_misc : MDEV-12636 - Valgrind warnings -innodb_zip.innodb_bug36169 : Modified in 10.1.25 -innodb_zip.innodb_bug36172 : Modified in 10.1.25 -innodb_zip.innodb_bug52745 : Modified in 10.1.25 -innodb_zip.innodb_bug53591 : Modified in 10.1.25 -innodb_zip.innodb_bug56680 : Modified in 10.1.25 -innodb_zip.innodb-create-options : Modified in 10.1.25 -innodb_zip.innodb-zip : Modified in 10.1.25 +innodb_zip.innodb_prefix_index_liftedlimit : Modified in 10.1.29 +innodb_zip.wl5522_debug_zip : Added in 10.1.29 #---------------------------------------------------------------- -mariabackup.* : suite.pm modified in 10.1.24 - -mariabackup.full_backup : Modified in 10.1.25 -mariabackup.incremental_backup : Uses include file modified in 10.1.25 -mariabackup.incremental_encrypted : Modified in 10.1.25 -mariabackup.xb_aws_key_management : Uses include file modified in 10.1.25 -mariabackup.xb_compressed_encrypted : Modified in 10.1.25 -mariabackup.xb_file_key_management : Modified in 10.1.25 -mariabackup.xb_fulltext_encrypted : Uses include file modified in 10.1.25 -mariabackup.xb_partition : Uses include file modified in 10.1.25 -mariabackup.xbstream : Uses include file modified in 10.1.25 +maria.maria : MDEV-14430 - Wrong result; modified in 10.1.29 #---------------------------------------------------------------- +mariabackup.compress_qpress : Added in 10.1.29 +mariabackup.data_directory : Added in 10.1.29 +mariabackup.incremental_backup : Modified in 10.1.29 +mariabackup.mdev-14447 : Added in 10.1.30 +mariabackup.partition_datadir : Added in 10.1.29 + +#---------------------------------------------------------------- + +mroonga.* : Many tests and include files added and modified in 10.1.29 +mroonga/storage.* : Many tests and include files added and modified in 10.1.29 + mroonga/storage.column_datetime_32bit_2038 : Wrong result on Alpha mroonga/storage.column_datetime_32bit_before_unix_epoch : Wrong result on Alpha mroonga/storage.column_datetime_32bit_max : Wrong result on Alpha @@ -228,12 +267,17 @@ mroonga/storage.index_multiple_column_unique_date_order_32bit_desc : Wrong result on Alpha mroonga/storage.index_multiple_column_unique_datetime_index_read : MDEV-8643 - valgrind warnings mroonga/storage.repair_table_no_index_file : MDEV-9364 - wrong result +mroonga/storage.variable_query_log_file_disabled_empty_value : Modified in 10.1.30 +mroonga/storage.variable_query_log_file_disabled_null_value : Modified in 10.1.30 +mroonga/storage.variable_query_log_file_enabled_empty_value : Modified in 10.1.30 +mroonga/storage.variable_query_log_file_enabled_null_value : Modified in 10.1.30 +mroonga/storage.variable_query_log_file_new_value : Modified in 10.1.30 +mroonga/storage.variable_query_log_file_same_value : Modified in 10.1.30 #---------------------------------------------------------------- multi_source.gtid : MDEV-10417 - Fails on Mips multi_source.info_logs : MDEV-10042 - Wrong result, MDEV-12629 - Valgrind warnings -multi_source.mdev-9544 : Added in 10.1.25 multi_source.multisource : MDEV-10417 - Fails on Mips multi_source.reset_slave : MDEV-10690 - wrong result multi_source.simple : MDEV-4633 - Wrong slave status output @@ -241,32 +285,37 @@ #---------------------------------------------------------------- +parts.partition_alter_innodb : Added in 10.1.30 +parts.partition_alter_maria : Modified in 10.1.30 +parts.partition_alter_myisam : Added in 10.1.30 +parts.partition_alter2_2_maria : MDEV-14364 - Lost connection to MySQL server during query +parts.partition_auto_increment_maria : MDEV-14430 - Wrong result parts.partition_innodb_status_file : MDEV-12901 - Valgrind -parts.quoting : Modified in 10.1.25 #---------------------------------------------------------------- -perfschema.bad_option_2 : Modified in 10.1.25 perfschema.func_file_io : MDEV-5708 - fails for s390x perfschema.func_mutex : MDEV-5708 - fails for s390x +perfschema.misc : Modified in 10.1.30 perfschema.privilege_table_io : MDEV-13184 - Extra lines perfschema.setup_actors : MDEV-10679 - rare crash perfschema.socket_summary_by_event_name_func : MDEV-10622 - Socket summary tables do not match perfschema.stage_mdl_global : MDEV-11803 - wrong result on slow builders perfschema.stage_mdl_table : MDEV-12638 - Wrong result -perfschema.start_server_1_digest : Added in 10.1.24 perfschema.threads_mysql : MDEV-10677 - sporadic wrong result #---------------------------------------------------------------- +plugins.binlog-simple_plugin_check : Added in 10.1.30 plugins.feedback_plugin_send : MDEV-7932 - ssl failed for url -plugins.server_audit : MDEV-9562 - crashes on sol10-sparc -plugins.thread_pool_server_audit : MDEV-9562 - crashes on sol10-sparc +plugins.server_audit : MDEV-9562 - crashes on sol10-sparc; modified in 10.1.29 +plugins.thread_pool_server_audit : MDEV-9562 - crashes on sol10-sparc; modified in 10.1.29 #---------------------------------------------------------------- -roles.current_role_view-12666 : Added in 10.1.25 -roles.show_create_database-10463 : Added in 10.1.25 +roles.definer : Modified in 10.1.29 +roles.flush_roles-12366 : Added in 10.1.30 +roles.set_role-13655 : Added in 10.1.30 #---------------------------------------------------------------- @@ -277,38 +326,60 @@ rpl.rpl_binlog_index : MDEV-9501 - Warning: failed registering on master rpl.rpl_checksum_cache : MDEV-12173 - Unexpected error rpl.rpl_ddl : MDEV-10417 - Fails on Mips +rpl.rpl_domain_id_filter_io_crash : MDEV-14357 - Wrong result rpl.rpl_domain_id_filter_restart : MDEV-10684 - Wrong result rpl.rpl_gtid_basic : MDEV-10681 - server startup problem rpl.rpl_gtid_crash : MDEV-9501 - Warning: failed registering on master +rpl.rpl_gtid_delete_domain : MDEV-14463 - Timeout in include; added in 10.1.30 rpl.rpl_gtid_mdev9033 : MDEV-10680 - warnings +rpl.rpl_gtid_reconnect : MDEV-14497 - Timeout rpl.rpl_gtid_stop_start : MDEV-10629 - Crash on shutdown, MDEV-12629 - Valgrind warnings rpl.rpl_gtid_until : MDEV-10625 - warnings in error log rpl.rpl_innodb_bug30888 : MDEV-10417 - Fails on Mips rpl.rpl_insert : MDEV-9329 - Fails on Ubuntu/s390x rpl.rpl_insert_delayed : MDEV-9329 - Fails on Ubuntu/s390x +rpl.rpl_insert_ignore : MDEV-14365 - Lost connection to MySQL server during query rpl.rpl_invoked_features : MDEV-10417 - Fails on Mips rpl.rpl_mariadb_slave_capability : MDEV-11018 - sporadic wrong events in binlog -rpl.rpl_mdev-11092 : MDEV-13065 - Wrong value in include; added in 10.1.24 rpl.rpl_mdev6020 : MDEV-10630, MDEV-10417 - Timeouts, fails on Mips +rpl.rpl_mixed_mixing_engines : MDEV-14489 - Sync slave with master failed +rpl.rpl_non_direct_mixed_mixing_engines : MDEV-14489 - Sync slave with master failed +rpl.rpl_non_direct_row_mixing_engines : MDEV-14491 - Long semaphore wait +rpl.rpl_non_direct_stm_mixing_engines : MDEV-14489 - Sync slave with master failed rpl.rpl_parallel : MDEV-10653 - Timeouts rpl.rpl_parallel_mdev6589 : MDEV-12979 - Assertion failure -rpl.rpl_parallel_optimistic : MDEV-10511 - timeout +rpl.rpl_parallel_multilevel2 : MDEV-14723 - Timeout +rpl.rpl_parallel_optimistic : MDEV-10511 - Timeout rpl.rpl_parallel_retry : MDEV-11119 - Server crash rpl.rpl_parallel_temptable : MDEV-10356 - Crash in close_thread_tables rpl.rpl_partition_innodb : MDEV-10417 - Fails on Mips rpl.rpl_password_boundaries : MDEV-11534 - Slave IO warnings -rpl.rpl_row_log_innodb : MDEV-10688 - Wrong result +rpl.rpl_plugin_load : Include files modified in 10.1.29 +rpl.rpl_row_drop_create_temp_table : MDEV-14487 - Wrong result +rpl.rpl_row_img_blobs : MDEV-13875 - command "diff_files" failed +rpl.rpl_row_img_eng_min : MDEV-13875 - command "diff_files" failed +rpl.rpl_row_img_eng_noblob : MDEV-13875 - command "diff_files" failed +rpl.rpl_row_log : Include file modified in 10.1.30 +rpl.rpl_row_log_innodb : Include file modified in 10.1.30 +rpl.rpl_row_mixing_engines : MDEV-14491 - Long semaphore wait rpl.rpl_row_sp001 : MDEV-9329 - Fails on Ubuntu/s390x -rpl.rpl_row_utf32 : One-time server startup timeout on ppc64le in 10.1.25 rpl.rpl_semi_sync : MDEV-11220 - Wrong result +rpl.rpl_semi_sync_after_sync : MDEV-14366 - Wrong result +rpl.rpl_semi_sync_after_sync_row : MDEV-14366 - Wrong result rpl.rpl_semi_sync_event_after_sync : MDEV-11806 - warnings -rpl.rpl_semi_sync_uninstall_plugin : MDEV-7140 - Wrong plugin status, MDEV-10892 - Assertion failure +rpl.rpl_semi_sync_uninstall_plugin : MDEV-7140 - Wrong plugin status rpl.rpl_semi_sync_wait_point : MDEV-11807 - timeout in wait condition rpl.rpl_show_slave_hosts : MDEV-10681 - server startup problem rpl.rpl_skip_replication : MDEV-9268 - Fails with timeout in sync_slave_with_master on Alpha rpl.rpl_slave_grp_exec : MDEV-10514 - Unexpected deadlock +rpl.rpl_start_stop_slave : MDEV-13567 - Replication failure +rpl.rpl_stm_log : Include file modified in 10.1.30 +rpl.rpl_stm_mixing_engines : MDEV-14489 - Sync slave with master failed +rpl.rpl_stm_relay_ign_space : MDEV-14360 - Test assertion rpl.rpl_sync : MDEV-10633 - Database page corruption +rpl.rpl_table_options : Include files modified in 10.1.29 rpl.rpl_temporary_error2 : MDEV-10634 - Wrong number of retries +rpl.sec_behind_master-5114 : MDEV-13878 - Wrong result #---------------------------------------------------------------- @@ -344,23 +415,21 @@ #---------------------------------------------------------------- sys_vars.autocommit_func2 : MDEV-9329 - Fails on Ubuntu/s390x -sys_vars.delay_key_write_func : Modified in 10.1.24 +sys_vars.explicit_defaults_for_timestamp_off : Include file modified in 10.1.29 +sys_vars.explicit_defaults_for_timestamp_on : Include file modified in 10.1.29 sys_vars.keep_files_on_create_basic : MDEV-10676 - timeout -sys_vars.innodb_buffer_pool_dump_pct_basic : MDEV-10651 - sporadic failure on file_exists +sys_vars.innodb_buffer_pool_dump_now_basic : Modified in 10.1.29 +sys_vars.innodb_buffer_pool_dump_pct_basic : Modified in 10.1.29 +sys_vars.innodb_buffer_pool_load_now_basic : Modified in 10.1.29 sys_vars.innodb_fatal_semaphore_wait_threshold : MDEV-10513 - crashes -sys_vars.innodb_sched_priority_cleaner_basic : Modified in 10.1.25 sys_vars.log_slow_admin_statements_func : MDEV-12235 - Server crash sys_vars.rpl_init_slave_func : MDEV-10149 - wrong results -sys_vars.sysvars_innodb : MDEV-6958 - error-prone rdiffs -sys_vars.sysvars_server_embedded : MDEV-6958 - error-prone rdiffs sys_vars.sysvars_wsrep : MDEV-12522 - Dependency on specific wsrep_provider sys_vars.thread_cache_size_func : MDEV-11775 - Wrong result sys_vars.wait_timeout_func : MDEV-12896 - Wrong result -sys_vars.sysvars_wsrep : Modified in 10.1.24 #---------------------------------------------------------------- -tokudb.bug-1657908 : Added in 10.1.24 tokudb.change_column_all_1000_10 : MDEV-12640 - Crash tokudb.change_column_bin : MDEV-12640 - Crash tokudb.change_column_char : MDEV-12822 - Lost connection to MySQL server @@ -368,26 +437,22 @@ tokudb.cluster_filter_hidden : MDEV-10678 - Wrong execution plan tokudb.cluster_filter_unpack_varchar : MDEV-10636 - Wrong execution plan tokudb.dir_per_db : MDEV-11537 - Wrong result +tokudb.dir_per_db_rename_to_nonexisting_schema : MDEV-14359 - Directory not empty tokudb.hotindex-insert-bigchar : MDEV-12640 - Crash +tokudb.hotindex-insert-1 : MDEV-13870 - Lost connection to MySQL server tokudb.hotindex-update-1 : MDEV-12640 - Crash tokudb.rows-32m-rand-insert : MDEV-12640 - Crash tokudb.rows-32m-seq-insert : MDEV-12640 - Crash -tokudb_backup.backup_master_info : Added in 10.1.24 -tokudb_backup.backup_master_state : Added in 10.1.24 -tokudb_backup.empty_slave_info_file : Added in 10.1.24 -tokudb_backup.innodb_use_native_aio_enabled : Added in 10.1.24 -tokudb_backup.rpl_safe_slave : Added in 10.1.24 -tokudb_backup.rpl_tokudb_commit_sync : Added in 10.1.24 - tokudb_bugs.checkpoint_lock : MDEV-10637 - Wrong processlist output tokudb_bugs.checkpoint_lock_3 : MDEV-10637 - Wrong processlist output -tokudb_bugs.db233 : Modified in 10.1.24 -tokudb_bugs.leak172 : Modified in 10.1.24 tokudb_bugs.xa : MDEV-11804 - Lock wait timeout tokudb_mariadb.mdev6657 : MDEV-12737 - Wrong plan, valgrind warnings +rpl-tokudb.rpl_tokudb_row_log : Include file modified in 10.1.30 +rpl-tokudb.rpl_tokudb_stm_log : Include file modified in 10.1.30 + #---------------------------------------------------------------- unit.lf : MDEV-12897 - Signal 11 thrown @@ -397,11 +462,13 @@ vcol.not_supported : MDEV-10639 - Testcase timeout vcol.vcol_keys_innodb : MDEV-10639 - Testcase timeout +vcol.vcol_misc : Modified in 10.1.29 #---------------------------------------------------------------- wsrep.binlog_format : MDEV-11532 - WSREP has not yet prepared node +wsrep.foreign_key : MDEV-14725 - WSREP has not yet prepared node +wsrep.mdev_6832 : MDEV-14195 - Failure upon check-testcase wsrep.pool_of_threads : MDEV-12234 - Library problem on Power -wsrep.variables : Include file modified in 10.1.25 wsrep_info.plugin : MDEV-12909 - Wrong result diff -Nru mariadb-10.1-10.1.25/mysys/ma_dyncol.c mariadb-10.1-10.1.30/mysys/ma_dyncol.c --- mariadb-10.1-10.1.25/mysys/ma_dyncol.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/ma_dyncol.c 2017-12-21 15:48:48.000000000 +0000 @@ -4183,8 +4183,7 @@ } else { - if ((rc= mariadb_dyncol_val_str(json, &val, - &my_charset_utf8_general_ci, '"')) < 0) + if ((rc= mariadb_dyncol_val_str(json, &val, DYNCOL_UTF, '"')) < 0) goto err; } } diff -Nru mariadb-10.1-10.1.25/mysys/my_default.c mariadb-10.1-10.1.30/mysys/my_default.c --- mariadb-10.1-10.1.25/mysys/my_default.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/my_default.c 2017-12-21 15:48:48.000000000 +0000 @@ -487,8 +487,7 @@ easily command line options override options in configuration files NOTES - In case of fatal error, the function will print a warning and do - exit(1) + In case of fatal error, the function will print a warning and returns 2 To free used memory one should call free_defaults() with the argument that was put in *argv @@ -641,8 +640,7 @@ err: fprintf(stderr,"Fatal error in defaults handling. Program aborted\n"); - exit(1); - return 0; /* Keep compiler happy */ + return 2; } diff -Nru mariadb-10.1-10.1.25/mysys/my_fopen.c mariadb-10.1-10.1.30/mysys/my_fopen.c --- mariadb-10.1-10.1.25/mysys/my_fopen.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/my_fopen.c 2017-12-21 15:48:48.000000000 +0000 @@ -142,7 +142,7 @@ /* A hack around a race condition in the implementation of freopen. - The race condition steams from the fact that the current fd of + The race condition stems from the fact that the current fd of the stream is closed before its number is used to duplicate the new file descriptor. This defeats the desired atomicity of the close and duplicate of dup2(). diff -Nru mariadb-10.1-10.1.25/mysys/my_init.c mariadb-10.1-10.1.30/mysys/my_init.c --- mariadb-10.1-10.1.25/mysys/my_init.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/my_init.c 2017-12-21 15:48:48.000000000 +0000 @@ -200,7 +200,6 @@ _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE ); _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR ); _CrtCheckMemory(); - _CrtDumpMemoryLeaks(); #endif } diff -Nru mariadb-10.1-10.1.25/mysys/my_malloc.c mariadb-10.1-10.1.30/mysys/my_malloc.c --- mariadb-10.1-10.1.25/mysys/my_malloc.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/my_malloc.c 2017-12-21 15:48:48.000000000 +0000 @@ -109,7 +109,7 @@ my_error(EE_OUTOFMEMORY, MYF(ME_BELL + ME_WAITTANG + ME_NOREFRESH + ME_FATALERROR),size); if (my_flags & MY_FAE) - exit(1); + abort(); } else { diff -Nru mariadb-10.1-10.1.25/mysys/my_new.cc mariadb-10.1-10.1.30/mysys/my_new.cc --- mariadb-10.1-10.1.25/mysys/my_new.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/my_new.cc 2017-12-21 15:48:48.000000000 +0000 @@ -47,6 +47,11 @@ return (void *) my_malloc (sz ? sz : 1, MYF(0)); } +void operator delete (void *ptr, std::size_t) +{ + my_free(ptr); +} + void operator delete (void *ptr) { my_free(ptr); @@ -56,6 +61,11 @@ { my_free(ptr); } + +void operator delete[] (void *ptr, std::size_t) throw () +{ + my_free(ptr); +} void operator delete(void* ptr, const std::nothrow_t&) throw() { diff -Nru mariadb-10.1-10.1.25/mysys/my_winerr.c mariadb-10.1-10.1.30/mysys/my_winerr.c --- mariadb-10.1-10.1.25/mysys/my_winerr.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/my_winerr.c 2017-12-21 15:48:48.000000000 +0000 @@ -75,7 +75,9 @@ { ERROR_ALREADY_EXISTS, EEXIST }, /* 183 */ { ERROR_FILENAME_EXCED_RANGE, ENOENT }, /* 206 */ { ERROR_NESTING_NOT_ALLOWED, EAGAIN }, /* 215 */ - { ERROR_NOT_ENOUGH_QUOTA, ENOMEM } /* 1816 */ + { ERROR_FILE_SYSTEM_LIMITATION, EFBIG }, /* 665 */ + { ERROR_NO_SYSTEM_RESOURCES, ENOMEM }, /* 1450 */ + { ERROR_NOT_ENOUGH_QUOTA, ENOMEM } /* 1816 */ }; /* size of the table */ diff -Nru mariadb-10.1-10.1.25/mysys/stacktrace.c mariadb-10.1-10.1.30/mysys/stacktrace.c --- mariadb-10.1-10.1.25/mysys/stacktrace.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/stacktrace.c 2017-12-21 15:48:48.000000000 +0000 @@ -765,7 +765,7 @@ size_t my_write_stderr(const void *buf, size_t count) { - return (size_t) write(STDERR_FILENO, buf, count); + return (size_t) write(fileno(stderr), buf, count); } diff -Nru mariadb-10.1-10.1.25/mysys/thr_alarm.c mariadb-10.1-10.1.30/mysys/thr_alarm.c --- mariadb-10.1-10.1.25/mysys/thr_alarm.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/thr_alarm.c 2017-12-21 15:48:48.000000000 +0000 @@ -273,7 +273,7 @@ /* Come here when some alarm in queue is due. Mark all alarms with are finnished in list. - Shedule alarms to be sent again after 1-10 sec (many alarms at once) + Schedule alarms to be sent again after 1-10 sec (many alarms at once) If alarm_aborted is set then all alarms are given and resent every second. */ @@ -425,7 +425,7 @@ if (alarm_aborted != 1) /* If memory not freed */ { mysql_mutex_lock(&LOCK_alarm); - DBUG_PRINT("info",("Resheduling %d waiting alarms",alarm_queue.elements)); + DBUG_PRINT("info",("Rescheduling %d waiting alarms",alarm_queue.elements)); alarm_aborted= -1; /* mark aborted */ if (alarm_queue.elements || (alarm_thread_running && free_structures)) { diff -Nru mariadb-10.1-10.1.25/mysys/typelib.c mariadb-10.1-10.1.30/mysys/typelib.c --- mariadb-10.1-10.1.25/mysys/typelib.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/mysys/typelib.c 2017-12-21 15:48:48.000000000 +0000 @@ -45,18 +45,6 @@ } -int find_type_or_exit(const char *x, TYPELIB *typelib, const char *option) -{ - int res; - if ((res= find_type_with_warning(x, typelib, option)) <= 0) - { - sf_leaking_memory= 1; /* no memory leak reports here */ - exit(1); - } - return res; -} - - /** Search after a string in a list of strings. Endspace in x is not compared. diff -Nru mariadb-10.1-10.1.25/pcre/ChangeLog mariadb-10.1-10.1.30/pcre/ChangeLog --- mariadb-10.1-10.1.25/pcre/ChangeLog 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/ChangeLog 2017-12-21 15:48:48.000000000 +0000 @@ -4,6 +4,53 @@ Note that the PCRE 8.xx series (PCRE1) is now in a bugfix-only state. All development is happening in the PCRE2 10.xx series. +Version 8.41 05-July-2017 +------------------------- + +1. Fixed typo in CMakeLists.txt (wrong number of arguments for +PCRE_STATIC_RUNTIME (affects MSVC only). + +2. Issue 1 for 8.40 below was not correctly fixed. If pcregrep in multiline +mode with --only-matching matched several lines, it restarted scanning at the +next line instead of moving on to the end of the matched string, which can be +several lines after the start. + +3. Fix a missing else in the JIT compiler reported by 'idaifish'. + +4. A (?# style comment is now ignored between a basic quantifier and a +following '+' or '?' (example: /X+(?#comment)?Y/. + +5. Avoid use of a potentially overflowing buffer in pcregrep (patch by Petr +Pisar). + +6. Fuzzers have reported issues in pcretest. These are NOT serious (it is, +after all, just a test program). However, to stop the reports, some easy ones +are fixed: + + (a) Check for values < 256 when calling isprint() in pcretest. + (b) Give an error for too big a number after \O. + +7. In the 32-bit library in non-UTF mode, an attempt to find a Unicode +property for a character with a code point greater than 0x10ffff (the Unicode +maximum) caused a crash. + +8. The alternative matching function, pcre_dfa_exec() misbehaved if it +encountered a character class with a possessive repeat, for example [a-f]{3}+. + +9. When pcretest called pcre_copy_substring() in 32-bit mode, it set the buffer +length incorrectly, which could result in buffer overflow. + +10. Remove redundant line of code (accidentally left in ages ago). + +11. Applied C++ patch from Irfan Adilovic to guard 'using std::' directives +with namespace pcrecpp (Bugzilla #2084). + +12. Remove a duplication typo in pcre_tables.c. + +13. Fix returned offsets from regexec() when REG_STARTEND is used with a +starting offset greater than zero. + + Version 8.40 11-January-2017 ---------------------------- diff -Nru mariadb-10.1-10.1.25/pcre/CMakeLists.txt mariadb-10.1-10.1.30/pcre/CMakeLists.txt --- mariadb-10.1-10.1.25/pcre/CMakeLists.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/CMakeLists.txt 2017-12-21 15:48:48.000000000 +0000 @@ -128,9 +128,9 @@ SET(PCRE_NEWLINE "LF" CACHE STRING "What to recognize as a newline (one of CR, LF, CRLF, ANY, ANYCRLF).") -# MARIADB: Changed the default from OFF to ON as pcre_test.bat on Windows -# MARIADB: fails complaining about too small stack size on Windows. -SET(PCRE_NO_RECURSE ON CACHE BOOL +# Windows has much smaller stack (pcre recursion limit of 112, vs +# 250-500 on Linuxes) +SET(PCRE_NO_RECURSE "${WIN32}" CACHE BOOL "If ON, then don't use stack recursion when matching. See NO_RECURSE in config.h.in for details.") SET(PCRE_POSIX_MALLOC_THRESHOLD "10" CACHE STRING diff -Nru mariadb-10.1-10.1.25/pcre/configure.ac mariadb-10.1-10.1.30/pcre/configure.ac --- mariadb-10.1-10.1.25/pcre/configure.ac 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/configure.ac 2017-12-21 15:48:48.000000000 +0000 @@ -9,18 +9,18 @@ dnl be defined as -RC2, for example. For real releases, it should be empty. m4_define(pcre_major, [8]) -m4_define(pcre_minor, [40]) +m4_define(pcre_minor, [41]) m4_define(pcre_prerelease, []) -m4_define(pcre_date, [2017-01-11]) +m4_define(pcre_date, [2017-07-05]) # NOTE: The CMakeLists.txt file searches for the above variables in the first # 50 lines of this file. Please update that if the variables above are moved. # Libtool shared library interface versions (current:revision:age) -m4_define(libpcre_version, [3:8:2]) -m4_define(libpcre16_version, [2:8:2]) -m4_define(libpcre32_version, [0:8:0]) -m4_define(libpcreposix_version, [0:4:0]) +m4_define(libpcre_version, [3:9:2]) +m4_define(libpcre16_version, [2:9:2]) +m4_define(libpcre32_version, [0:9:0]) +m4_define(libpcreposix_version, [0:5:0]) m4_define(libpcrecpp_version, [0:1:0]) AC_PREREQ(2.57) diff -Nru mariadb-10.1-10.1.25/pcre/doc/html/pcrejit.html mariadb-10.1-10.1.30/pcre/doc/html/pcrejit.html --- mariadb-10.1-10.1.25/pcre/doc/html/pcrejit.html 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/doc/html/pcrejit.html 2017-12-21 15:48:48.000000000 +0000 @@ -79,9 +79,12 @@

If your program may sometimes be linked with versions of PCRE that are older -than 8.20, but you want to use JIT when it is available, you can test -the values of PCRE_MAJOR and PCRE_MINOR, or the existence of a JIT macro such -as PCRE_CONFIG_JIT, for compile-time control of your code. +than 8.20, but you want to use JIT when it is available, you can test the +values of PCRE_MAJOR and PCRE_MINOR, or the existence of a JIT macro such as +PCRE_CONFIG_JIT, for compile-time control of your code. Also beware that the +pcre_jit_exec() function was not available at all before 8.32, +and may not be available at all if PCRE isn't compiled with +--enable-jit. See the "JIT FAST PATH API" section below for details.


SIMPLE USE OF JIT

@@ -119,6 +122,20 @@ PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE +If using pcre_jit_exec() and supporting a pre-8.32 version of +PCRE, you can insert: +

+   #if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32
+   pcre_jit_exec(...);
+   #else
+   pcre_exec(...)
+   #endif
+
+but as described in the "JIT FAST PATH API" section below this assumes +version 8.32 and later are compiled with --enable-jit, which may +break. +
+
The JIT compiler generates different optimized code for each of the three modes (normal, soft partial, hard partial). When pcre_exec() is called, the appropriate code is run if it is available. Otherwise, the pattern is @@ -428,6 +445,36 @@ Bypassing the sanity checks and the pcre_exec() wrapping can give speedups of more than 10%.

+

+Note that the pcre_jit_exec() function is not available in versions of +PCRE before 8.32 (released in November 2012). If you need to support versions +that old you must either use the slower pcre_exec(), or switch between +the two codepaths by checking the values of PCRE_MAJOR and PCRE_MINOR. +

+

+Due to an unfortunate implementation oversight, even in versions 8.32 +and later there will be no pcre_jit_exec() stub function defined +when PCRE is compiled with --disable-jit, which is the default, and +there's no way to detect whether PCRE was compiled with --enable-jit +via a macro. +

+

+If you need to support versions older than 8.32, or versions that may +not build with --enable-jit, you must either use the slower +pcre_exec(), or switch between the two codepaths by checking the +values of PCRE_MAJOR and PCRE_MINOR. +

+

+Switching between the two by checking the version assumes that all the +versions being targeted are built with --enable-jit. To also support +builds that may use --disable-jit either pcre_exec() must be +used, or a compile-time check for JIT via pcre_config() (which +assumes the runtime environment will be the same), or as the Git +project decided to do, simply assume that pcre_jit_exec() is +present in 8.32 or later unless a compile-time flag is provided, see +the "grep: un-break building with PCRE >= 8.32 without --enable-jit" +commit in git.git for an example of that. +


SEE ALSO

pcreapi(3) @@ -443,9 +490,9 @@


REVISION

-Last updated: 17 March 2013 +Last updated: 05 July 2017
-Copyright © 1997-2013 University of Cambridge. +Copyright © 1997-2017 University of Cambridge.

Return to the PCRE index page. diff -Nru mariadb-10.1-10.1.25/pcre/doc/html/pcretest.html mariadb-10.1-10.1.30/pcre/doc/html/pcretest.html --- mariadb-10.1-10.1.25/pcre/doc/html/pcretest.html 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/doc/html/pcretest.html 2017-12-21 15:48:48.000000000 +0000 @@ -74,6 +74,11 @@ maximum portability, therefore, it is safest to use only ASCII characters in pcretest input files.

+

+The input is processed using using C's string functions, so must not +contain binary zeroes, even though in Unix-like environments, fgets() +treats any bytes other than newline as data characters. +


PCRE's 8-BIT, 16-BIT AND 32-BIT LIBRARIES

From release 8.30, two separate PCRE libraries can be built. The original one @@ -1149,9 +1154,9 @@


REVISION

-Last updated: 09 February 2014 +Last updated: 23 February 2017
-Copyright © 1997-2014 University of Cambridge. +Copyright © 1997-2017 University of Cambridge.

Return to the PCRE index page. diff -Nru mariadb-10.1-10.1.25/pcre/doc/pcrejit.3 mariadb-10.1-10.1.30/pcre/doc/pcrejit.3 --- mariadb-10.1-10.1.25/pcre/doc/pcrejit.3 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/doc/pcrejit.3 2017-12-21 15:48:48.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PCREJIT 3 "17 March 2013" "PCRE 8.33" +.TH PCREJIT 3 "05 July 2017" "PCRE 8.41" .SH NAME PCRE - Perl-compatible regular expressions .SH "PCRE JUST-IN-TIME COMPILER SUPPORT" @@ -54,9 +54,12 @@ API that is JIT-specific. .P If your program may sometimes be linked with versions of PCRE that are older -than 8.20, but you want to use JIT when it is available, you can test -the values of PCRE_MAJOR and PCRE_MINOR, or the existence of a JIT macro such -as PCRE_CONFIG_JIT, for compile-time control of your code. +than 8.20, but you want to use JIT when it is available, you can test the +values of PCRE_MAJOR and PCRE_MINOR, or the existence of a JIT macro such as +PCRE_CONFIG_JIT, for compile-time control of your code. Also beware that the +\fBpcre_jit_exec()\fP function was not available at all before 8.32, +and may not be available at all if PCRE isn't compiled with +--enable-jit. See the "JIT FAST PATH API" section below for details. . . .SH "SIMPLE USE OF JIT" @@ -96,6 +99,19 @@ PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE .sp +If using \fBpcre_jit_exec()\fP and supporting a pre-8.32 version of +PCRE, you can insert: +.sp + #if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32 + pcre_jit_exec(...); + #else + pcre_exec(...) + #endif +.sp +but as described in the "JIT FAST PATH API" section below this assumes +version 8.32 and later are compiled with --enable-jit, which may +break. +.sp The JIT compiler generates different optimized code for each of the three modes (normal, soft partial, hard partial). When \fBpcre_exec()\fP is called, the appropriate code is run if it is available. Otherwise, the pattern is @@ -404,6 +420,32 @@ .P Bypassing the sanity checks and the \fBpcre_exec()\fP wrapping can give speedups of more than 10%. +.P +Note that the \fBpcre_jit_exec()\fP function is not available in versions of +PCRE before 8.32 (released in November 2012). If you need to support versions +that old you must either use the slower \fBpcre_exec()\fP, or switch between +the two codepaths by checking the values of PCRE_MAJOR and PCRE_MINOR. +.P +Due to an unfortunate implementation oversight, even in versions 8.32 +and later there will be no \fBpcre_jit_exec()\fP stub function defined +when PCRE is compiled with --disable-jit, which is the default, and +there's no way to detect whether PCRE was compiled with --enable-jit +via a macro. +.P +If you need to support versions older than 8.32, or versions that may +not build with --enable-jit, you must either use the slower +\fBpcre_exec()\fP, or switch between the two codepaths by checking the +values of PCRE_MAJOR and PCRE_MINOR. +.P +Switching between the two by checking the version assumes that all the +versions being targeted are built with --enable-jit. To also support +builds that may use --disable-jit either \fBpcre_exec()\fP must be +used, or a compile-time check for JIT via \fBpcre_config()\fP (which +assumes the runtime environment will be the same), or as the Git +project decided to do, simply assume that \fBpcre_jit_exec()\fP is +present in 8.32 or later unless a compile-time flag is provided, see +the "grep: un-break building with PCRE >= 8.32 without --enable-jit" +commit in git.git for an example of that. . . .SH "SEE ALSO" @@ -426,6 +468,6 @@ .rs .sp .nf -Last updated: 17 March 2013 -Copyright (c) 1997-2013 University of Cambridge. +Last updated: 05 July 2017 +Copyright (c) 1997-2017 University of Cambridge. .fi diff -Nru mariadb-10.1-10.1.25/pcre/doc/pcretest.1 mariadb-10.1-10.1.30/pcre/doc/pcretest.1 --- mariadb-10.1-10.1.25/pcre/doc/pcretest.1 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/doc/pcretest.1 2017-12-21 15:48:48.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PCRETEST 1 "09 February 2014" "PCRE 8.35" +.TH PCRETEST 1 "23 February 2017" "PCRE 8.41" .SH NAME pcretest - a program for testing Perl-compatible regular expressions. .SH SYNOPSIS @@ -50,6 +50,10 @@ (hex 1A) causes an immediate end of file, and no further data is read. For maximum portability, therefore, it is safest to use only ASCII characters in \fBpcretest\fP input files. +.P +The input is processed using using C's string functions, so must not +contain binary zeroes, even though in Unix-like environments, \fBfgets()\fP +treats any bytes other than newline as data characters. . . .SH "PCRE's 8-BIT, 16-BIT AND 32-BIT LIBRARIES" @@ -1151,6 +1155,6 @@ .rs .sp .nf -Last updated: 09 February 2014 -Copyright (c) 1997-2014 University of Cambridge. +Last updated: 23 February 2017 +Copyright (c) 1997-2017 University of Cambridge. .fi diff -Nru mariadb-10.1-10.1.25/pcre/doc/pcretest.txt mariadb-10.1-10.1.30/pcre/doc/pcretest.txt --- mariadb-10.1-10.1.25/pcre/doc/pcretest.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/doc/pcretest.txt 2017-12-21 15:48:48.000000000 +0000 @@ -39,6 +39,10 @@ For maximum portability, therefore, it is safest to use only ASCII characters in pcretest input files. + The input is processed using using C's string functions, so must not + contain binary zeroes, even though in Unix-like environments, fgets() + treats any bytes other than newline as data characters. + PCRE's 8-BIT, 16-BIT AND 32-BIT LIBRARIES @@ -1083,5 +1087,5 @@ REVISION - Last updated: 09 February 2014 - Copyright (c) 1997-2014 University of Cambridge. + Last updated: 23 February 2017 + Copyright (c) 1997-2017 University of Cambridge. diff -Nru mariadb-10.1-10.1.25/pcre/doc/pcre.txt mariadb-10.1-10.1.30/pcre/doc/pcre.txt --- mariadb-10.1-10.1.25/pcre/doc/pcre.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/doc/pcre.txt 2017-12-21 15:48:48.000000000 +0000 @@ -8365,7 +8365,11 @@ If your program may sometimes be linked with versions of PCRE that are older than 8.20, but you want to use JIT when it is available, you can test the values of PCRE_MAJOR and PCRE_MINOR, or the existence of a JIT - macro such as PCRE_CONFIG_JIT, for compile-time control of your code. + macro such as PCRE_CONFIG_JIT, for compile-time control of your code. + Also beware that the pcre_jit_exec() function was not available at all + before 8.32, and may not be available at all if PCRE isn't compiled + with --enable-jit. See the "JIT FAST PATH API" section below for + details. SIMPLE USE OF JIT @@ -8407,6 +8411,18 @@ PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE + If using pcre_jit_exec() and supporting a pre-8.32 version of PCRE, you + can insert: + + #if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32 + pcre_jit_exec(...); + #else + pcre_exec(...) + #endif + + but as described in the "JIT FAST PATH API" section below this assumes + version 8.32 and later are compiled with --enable-jit, which may break. + The JIT compiler generates different optimized code for each of the three modes (normal, soft partial, hard partial). When pcre_exec() is called, the appropriate code is run if it is available. Otherwise, the @@ -8696,6 +8712,33 @@ Bypassing the sanity checks and the pcre_exec() wrapping can give speedups of more than 10%. + Note that the pcre_jit_exec() function is not available in versions of + PCRE before 8.32 (released in November 2012). If you need to support + versions that old you must either use the slower pcre_exec(), or switch + between the two codepaths by checking the values of PCRE_MAJOR and + PCRE_MINOR. + + Due to an unfortunate implementation oversight, even in versions 8.32 + and later there will be no pcre_jit_exec() stub function defined when + PCRE is compiled with --disable-jit, which is the default, and there's + no way to detect whether PCRE was compiled with --enable-jit via a + macro. + + If you need to support versions older than 8.32, or versions that may + not build with --enable-jit, you must either use the slower + pcre_exec(), or switch between the two codepaths by checking the values + of PCRE_MAJOR and PCRE_MINOR. + + Switching between the two by checking the version assumes that all the + versions being targeted are built with --enable-jit. To also support + builds that may use --disable-jit either pcre_exec() must be used, or a + compile-time check for JIT via pcre_config() (which assumes the runtime + environment will be the same), or as the Git project decided to do, + simply assume that pcre_jit_exec() is present in 8.32 or later unless a + compile-time flag is provided, see the "grep: un-break building with + PCRE >= 8.32 without --enable-jit" commit in git.git for an example of + that. + SEE ALSO @@ -8711,8 +8754,8 @@ REVISION - Last updated: 17 March 2013 - Copyright (c) 1997-2013 University of Cambridge. + Last updated: 05 July 2017 + Copyright (c) 1997-2017 University of Cambridge. ------------------------------------------------------------------------------ diff -Nru mariadb-10.1-10.1.25/pcre/NEWS mariadb-10.1-10.1.30/pcre/NEWS --- mariadb-10.1-10.1.25/pcre/NEWS 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/NEWS 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,12 @@ News about PCRE releases ------------------------ +Release 8.41 13-June-2017 +------------------------- + +This is a bug-fix release. + + Release 8.40 11-January-2017 ---------------------------- diff -Nru mariadb-10.1-10.1.25/pcre/pcre_compile.c mariadb-10.1-10.1.30/pcre/pcre_compile.c --- mariadb-10.1-10.1.25/pcre/pcre_compile.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_compile.c 2017-12-21 15:48:48.000000000 +0000 @@ -1249,6 +1249,7 @@ if ((c = *ptr) >= CHAR_8) break; + /* fall through */ /* Fall through with a digit less than 8 */ /* \0 always starts an octal number, but we may drop through to here with a @@ -5097,6 +5098,8 @@ either not match or match, depending on whether the class is or is not negated. */ + /* fall through */ + default: if (local_negate && (xclass || tempptr[2] != CHAR_RIGHT_SQUARE_BRACKET)) @@ -5739,6 +5742,21 @@ ptr = p - 1; /* Character before the next significant one. */ } + /* We also need to skip over (?# comments, which are not dependent on + extended mode. */ + + if (ptr[1] == CHAR_LEFT_PARENTHESIS && ptr[2] == CHAR_QUESTION_MARK && + ptr[3] == CHAR_NUMBER_SIGN) + { + ptr += 4; + while (*ptr != CHAR_NULL && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++; + if (*ptr == CHAR_NULL) + { + *errorcodeptr = ERR18; + goto FAILED; + } + } + /* If the next character is '+', we have a possessive quantifier. This implies greediness, whatever the setting of the PCRE_UNGREEDY option. If the next character is '?' this is a minimizing repeat, by default, @@ -7150,7 +7168,7 @@ goto FAILED; } /* Fall through to handle (?P< as (?< is handled */ - + /* fall through */ /* ------------------------------------------------------------ */ DEFINE_NAME: /* Come here from (?< handling */ @@ -8210,7 +8228,6 @@ if (mclength == 1 || req_caseopt == 0) { - firstchar = mcbuffer[0] | req_caseopt; firstchar = mcbuffer[0]; firstcharflags = req_caseopt; diff -Nru mariadb-10.1-10.1.25/pcre/pcrecpp_unittest.cc mariadb-10.1-10.1.30/pcre/pcrecpp_unittest.cc --- mariadb-10.1-10.1.25/pcre/pcrecpp_unittest.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcrecpp_unittest.cc 2017-12-21 15:48:48.000000000 +0000 @@ -43,6 +43,7 @@ #include #include "pcrecpp.h" +using std::string; using pcrecpp::StringPiece; using pcrecpp::RE; using pcrecpp::RE_Options; diff -Nru mariadb-10.1-10.1.25/pcre/pcre_dfa_exec.c mariadb-10.1-10.1.30/pcre/pcre_dfa_exec.c --- mariadb-10.1-10.1.25/pcre/pcre_dfa_exec.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_dfa_exec.c 2017-12-21 15:48:48.000000000 +0000 @@ -7,7 +7,7 @@ below for why this module is different). Written by Philip Hazel - Copyright (c) 1997-2014 University of Cambridge + Copyright (c) 1997-2017 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -2625,7 +2625,7 @@ if (isinclass) { int max = (int)GET2(ecode, 1 + IMM2_SIZE); - if (*ecode == OP_CRPOSRANGE) + if (*ecode == OP_CRPOSRANGE && count >= (int)GET2(ecode, 1)) { active_count--; /* Remove non-match possibility */ next_active_state--; diff -Nru mariadb-10.1-10.1.25/pcre/pcre_exec.c mariadb-10.1-10.1.30/pcre/pcre_exec.c --- mariadb-10.1-10.1.25/pcre/pcre_exec.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_exec.c 2017-12-21 15:48:48.000000000 +0000 @@ -509,6 +509,12 @@ (e.g. stopped by repeated call or recursion limit) */ +#ifdef __GNUC__ +static int +match(REGISTER PCRE_PUCHAR eptr, REGISTER const pcre_uchar *ecode, + PCRE_PUCHAR mstart, int offset_top, match_data *md, eptrblock *eptrb, + unsigned int rdepth) __attribute__((noinline,noclone)); +#endif static int match(REGISTER PCRE_PUCHAR eptr, REGISTER const pcre_uchar *ecode, PCRE_PUCHAR mstart, int offset_top, match_data *md, eptrblock *eptrb, @@ -669,7 +675,7 @@ return match((PCRE_PUCHAR)&rdepth, NULL, NULL, 0, NULL, NULL, 1); else { - int len = (char *)&rdepth - (char *)eptr; + int len = (int)((char *)&rdepth - (char *)eptr); return (len > 0)? -len : len; } } @@ -1053,6 +1059,8 @@ group. At this point, the return is converted into MATCH_NOMATCH so that previous backup points can be taken. */ + /* fall through */ + case OP_ONCE: case OP_BRA: case OP_SBRA: diff -Nru mariadb-10.1-10.1.25/pcre/pcregrep.c mariadb-10.1-10.1.30/pcre/pcregrep.c --- mariadb-10.1-10.1.25/pcre/pcregrep.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcregrep.c 2017-12-21 15:48:48.000000000 +0000 @@ -1804,11 +1804,6 @@ if (line_buffered) fflush(stdout); rc = 0; /* Had some success */ - /* If the current match ended past the end of the line (only possible - in multiline mode), we are done with this line. */ - - if ((unsigned int)offsets[1] > linelength) goto END_ONE_MATCH; - startoffset = offsets[1]; /* Restart after the match */ if (startoffset <= oldstartoffset) { @@ -1818,6 +1813,22 @@ if (utf8) while ((matchptr[startoffset] & 0xc0) == 0x80) startoffset++; } + + /* If the current match ended past the end of the line (only possible + in multiline mode), we must move on to the line in which it did end + before searching for more matches. */ + + while (startoffset > (int)linelength) + { + matchptr = ptr += linelength + endlinelength; + filepos += (int)(linelength + endlinelength); + linenumber++; + startoffset -= (int)(linelength + endlinelength); + t = end_of_line(ptr, endptr, &endlinelength); + linelength = t - ptr - endlinelength; + length = (size_t)(endptr - ptr); + } + goto ONLY_MATCHING_RESTART; } } @@ -3179,9 +3190,11 @@ cp->hint = pcre_study(cp->compiled, study_options, &error); if (error != NULL) { - char s[16]; - if (patterns->next == NULL) s[0] = 0; else sprintf(s, " number %d", j); - fprintf(stderr, "pcregrep: Error while studying regex%s: %s\n", s, error); + if (patterns->next == NULL) + fprintf(stderr, "pcregrep: Error while studying regex: %s\n", error); + else + fprintf(stderr, "pcregrep: Error while studying regex number %d: %s\n", + j, error); goto EXIT2; } #ifdef SUPPORT_PCREGREP_JIT diff -Nru mariadb-10.1-10.1.25/pcre/pcre_internal.h mariadb-10.1-10.1.30/pcre/pcre_internal.h --- mariadb-10.1-10.1.25/pcre/pcre_internal.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_internal.h 2017-12-21 15:48:48.000000000 +0000 @@ -2772,6 +2772,9 @@ extern const pcre_uint16 PRIV(ucd_stage2)[]; extern const pcre_uint32 PRIV(ucp_gentype)[]; extern const pcre_uint32 PRIV(ucp_gbtable)[]; +#ifdef COMPILE_PCRE32 +extern const ucd_record PRIV(dummy_ucd_record)[]; +#endif #ifdef SUPPORT_JIT extern const int PRIV(ucp_typerange)[]; #endif @@ -2780,10 +2783,16 @@ /* UCD access macros */ #define UCD_BLOCK_SIZE 128 -#define GET_UCD(ch) (PRIV(ucd_records) + \ +#define REAL_GET_UCD(ch) (PRIV(ucd_records) + \ PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \ UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE]) +#ifdef COMPILE_PCRE32 +#define GET_UCD(ch) ((ch > 0x10ffff)? PRIV(dummy_ucd_record) : REAL_GET_UCD(ch)) +#else +#define GET_UCD(ch) REAL_GET_UCD(ch) +#endif + #define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype #define UCD_SCRIPT(ch) GET_UCD(ch)->script #define UCD_CATEGORY(ch) PRIV(ucp_gentype)[UCD_CHARTYPE(ch)] diff -Nru mariadb-10.1-10.1.25/pcre/pcre_jit_compile.c mariadb-10.1-10.1.30/pcre/pcre_jit_compile.c --- mariadb-10.1-10.1.25/pcre/pcre_jit_compile.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_jit_compile.c 2017-12-21 15:48:48.000000000 +0000 @@ -487,7 +487,7 @@ #undef CMP /* Used for accessing the elements of the stack. */ -#define STACK(i) ((-(i) - 1) * (int)sizeof(sljit_sw)) +#define STACK(i) ((i) * (int)sizeof(sljit_sw)) #define TMP1 SLJIT_R0 #define TMP2 SLJIT_R2 @@ -552,13 +552,15 @@ sljit_emit_cmp(compiler, (type), (src1), (src1w), (src2), (src2w)) #define CMPTO(type, src1, src1w, src2, src2w, label) \ sljit_set_label(sljit_emit_cmp(compiler, (type), (src1), (src1w), (src2), (src2w)), (label)) -#define OP_FLAGS(op, dst, dstw, src, srcw, type) \ - sljit_emit_op_flags(compiler, (op), (dst), (dstw), (src), (srcw), (type)) +#define OP_FLAGS(op, dst, dstw, type) \ + sljit_emit_op_flags(compiler, (op), (dst), (dstw), (type)) #define GET_LOCAL_BASE(dst, dstw, offset) \ sljit_get_local_base(compiler, (dst), (dstw), (offset)) #define READ_CHAR_MAX 0x7fffffff +#define INVALID_UTF_CHAR 888 + static pcre_uchar *bracketend(pcre_uchar *cc) { SLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NOT) || (*cc >= OP_ONCE && *cc <= OP_SCOND)); @@ -784,7 +786,7 @@ default: /* All opcodes are supported now! */ - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); return NULL; } } @@ -1660,9 +1662,9 @@ { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -OVECTOR(0)); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); setsom_found = TRUE; } cc += 1; @@ -1676,9 +1678,9 @@ { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->mark_ptr); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); setmark_found = TRUE; } cc += 1 + 2 + cc[1]; @@ -1689,27 +1691,27 @@ { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -OVECTOR(0)); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); setsom_found = TRUE; } if (common->mark_ptr != 0 && !setmark_found) { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->mark_ptr); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); setmark_found = TRUE; } if (common->capture_last_ptr != 0 && !capture_last_found) { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->capture_last_ptr); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); capture_last_found = TRUE; } cc += 1 + LINK_SIZE; @@ -1723,20 +1725,20 @@ { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->capture_last_ptr); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); capture_last_found = TRUE; } offset = (GET2(cc, 1 + LINK_SIZE)) << 1; OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, OVECTOR(offset)); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset)); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP2, 0); - stackpos += (int)sizeof(sljit_sw); + stackpos -= (int)sizeof(sljit_sw); cc += 1 + LINK_SIZE + IMM2_SIZE; break; @@ -1887,18 +1889,17 @@ BOOL tmp2empty = TRUE; pcre_uchar *alternative; enum { - start, loop, end } status; -status = save ? start : loop; -stackptr = STACK(stackptr - 2); +status = loop; +stackptr = STACK(stackptr); stacktop = STACK(stacktop - 1); if (!save) { - stackptr += (needs_control_head ? 2 : 1) * sizeof(sljit_sw); + stacktop -= (needs_control_head ? 2 : 1) * sizeof(sljit_sw); if (stackptr < stacktop) { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), stackptr); @@ -1914,196 +1915,186 @@ /* The tmp1next must be TRUE in either way. */ } +SLJIT_ASSERT(common->recursive_head_ptr != 0); + do { count = 0; - switch(status) + if (cc >= ccend) { - case start: - SLJIT_ASSERT(save && common->recursive_head_ptr != 0); + if (!save) + break; + count = 1; srcw[0] = common->recursive_head_ptr; if (needs_control_head) { SLJIT_ASSERT(common->control_head_ptr != 0); count = 2; - srcw[1] = common->control_head_ptr; + srcw[0] = common->control_head_ptr; + srcw[1] = common->recursive_head_ptr; + } + status = end; + } + else switch(*cc) + { + case OP_KET: + if (PRIVATE_DATA(cc) != 0) + { + count = 1; + srcw[0] = PRIVATE_DATA(cc); + SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); + cc += PRIVATE_DATA(cc + 1); } - status = loop; + cc += 1 + LINK_SIZE; break; - case loop: - if (cc >= ccend) + case OP_ASSERT: + case OP_ASSERT_NOT: + case OP_ASSERTBACK: + case OP_ASSERTBACK_NOT: + case OP_ONCE: + case OP_ONCE_NC: + case OP_BRAPOS: + case OP_SBRA: + case OP_SBRAPOS: + case OP_SCOND: + count = 1; + srcw[0] = PRIVATE_DATA(cc); + SLJIT_ASSERT(srcw[0] != 0); + cc += 1 + LINK_SIZE; + break; + + case OP_CBRA: + case OP_SCBRA: + if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) { - status = end; - break; + count = 1; + srcw[0] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); } + cc += 1 + LINK_SIZE + IMM2_SIZE; + break; - switch(*cc) - { - case OP_KET: - if (PRIVATE_DATA(cc) != 0) - { - count = 1; - srcw[0] = PRIVATE_DATA(cc); - SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); - cc += PRIVATE_DATA(cc + 1); - } - cc += 1 + LINK_SIZE; - break; + case OP_CBRAPOS: + case OP_SCBRAPOS: + count = 2; + srcw[0] = PRIVATE_DATA(cc); + srcw[1] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); + SLJIT_ASSERT(srcw[0] != 0 && srcw[1] != 0); + cc += 1 + LINK_SIZE + IMM2_SIZE; + break; - case OP_ASSERT: - case OP_ASSERT_NOT: - case OP_ASSERTBACK: - case OP_ASSERTBACK_NOT: - case OP_ONCE: - case OP_ONCE_NC: - case OP_BRAPOS: - case OP_SBRA: - case OP_SBRAPOS: - case OP_SCOND: + case OP_COND: + /* Might be a hidden SCOND. */ + alternative = cc + GET(cc, 1); + if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) + { count = 1; srcw[0] = PRIVATE_DATA(cc); SLJIT_ASSERT(srcw[0] != 0); - cc += 1 + LINK_SIZE; - break; - - case OP_CBRA: - case OP_SCBRA: - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) - { - count = 1; - srcw[0] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); - } - cc += 1 + LINK_SIZE + IMM2_SIZE; - break; + } + cc += 1 + LINK_SIZE; + break; - case OP_CBRAPOS: - case OP_SCBRAPOS: - count = 2; + CASE_ITERATOR_PRIVATE_DATA_1 + if (PRIVATE_DATA(cc)) + { + count = 1; srcw[0] = PRIVATE_DATA(cc); - srcw[1] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); - SLJIT_ASSERT(srcw[0] != 0 && srcw[1] != 0); - cc += 1 + LINK_SIZE + IMM2_SIZE; - break; - - case OP_COND: - /* Might be a hidden SCOND. */ - alternative = cc + GET(cc, 1); - if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) - { - count = 1; - srcw[0] = PRIVATE_DATA(cc); - SLJIT_ASSERT(srcw[0] != 0); - } - cc += 1 + LINK_SIZE; - break; - - CASE_ITERATOR_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc)) - { - count = 1; - srcw[0] = PRIVATE_DATA(cc); - } - cc += 2; + } + cc += 2; #ifdef SUPPORT_UTF - if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); #endif - break; + break; - CASE_ITERATOR_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc)) - { - count = 2; - srcw[0] = PRIVATE_DATA(cc); - srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); - } - cc += 2; + CASE_ITERATOR_PRIVATE_DATA_2A + if (PRIVATE_DATA(cc)) + { + count = 2; + srcw[0] = PRIVATE_DATA(cc); + srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); + } + cc += 2; #ifdef SUPPORT_UTF - if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); #endif - break; + break; - CASE_ITERATOR_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc)) - { - count = 2; - srcw[0] = PRIVATE_DATA(cc); - srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); - } - cc += 2 + IMM2_SIZE; + CASE_ITERATOR_PRIVATE_DATA_2B + if (PRIVATE_DATA(cc)) + { + count = 2; + srcw[0] = PRIVATE_DATA(cc); + srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); + } + cc += 2 + IMM2_SIZE; #ifdef SUPPORT_UTF - if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); + if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); #endif - break; + break; - CASE_ITERATOR_TYPE_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc)) + CASE_ITERATOR_TYPE_PRIVATE_DATA_1 + if (PRIVATE_DATA(cc)) + { + count = 1; + srcw[0] = PRIVATE_DATA(cc); + } + cc += 1; + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_2A + if (PRIVATE_DATA(cc)) + { + count = 2; + srcw[0] = PRIVATE_DATA(cc); + srcw[1] = srcw[0] + sizeof(sljit_sw); + } + cc += 1; + break; + + CASE_ITERATOR_TYPE_PRIVATE_DATA_2B + if (PRIVATE_DATA(cc)) + { + count = 2; + srcw[0] = PRIVATE_DATA(cc); + srcw[1] = srcw[0] + sizeof(sljit_sw); + } + cc += 1 + IMM2_SIZE; + break; + + case OP_CLASS: + case OP_NCLASS: +#if defined SUPPORT_UTF || !defined COMPILE_PCRE8 + case OP_XCLASS: + size = (*cc == OP_XCLASS) ? GET(cc, 1) : 1 + 32 / (int)sizeof(pcre_uchar); +#else + size = 1 + 32 / (int)sizeof(pcre_uchar); +#endif + if (PRIVATE_DATA(cc)) + switch(get_class_iterator_size(cc + size)) { + case 1: count = 1; srcw[0] = PRIVATE_DATA(cc); - } - cc += 1; - break; + break; - CASE_ITERATOR_TYPE_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc)) - { + case 2: count = 2; srcw[0] = PRIVATE_DATA(cc); srcw[1] = srcw[0] + sizeof(sljit_sw); - } - cc += 1; - break; + break; - CASE_ITERATOR_TYPE_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc)) - { - count = 2; - srcw[0] = PRIVATE_DATA(cc); - srcw[1] = srcw[0] + sizeof(sljit_sw); + default: + SLJIT_UNREACHABLE(); + break; } - cc += 1 + IMM2_SIZE; - break; - - case OP_CLASS: - case OP_NCLASS: -#if defined SUPPORT_UTF || !defined COMPILE_PCRE8 - case OP_XCLASS: - size = (*cc == OP_XCLASS) ? GET(cc, 1) : 1 + 32 / (int)sizeof(pcre_uchar); -#else - size = 1 + 32 / (int)sizeof(pcre_uchar); -#endif - if (PRIVATE_DATA(cc)) - switch(get_class_iterator_size(cc + size)) - { - case 1: - count = 1; - srcw[0] = PRIVATE_DATA(cc); - break; - - case 2: - count = 2; - srcw[0] = PRIVATE_DATA(cc); - srcw[1] = srcw[0] + sizeof(sljit_sw); - break; - - default: - SLJIT_ASSERT_STOP(); - break; - } - cc += size; - break; - - default: - cc = next_opcode(common, cc); - SLJIT_ASSERT(cc != NULL); - break; - } + cc += size; break; - case end: - SLJIT_ASSERT_STOP(); + default: + cc = next_opcode(common, cc); + SLJIT_ASSERT(cc != NULL); break; } @@ -2312,7 +2303,7 @@ { DEFINE_COMPILER; -OP2(SLJIT_SUB | SLJIT_SET_E, COUNT_MATCH, 0, COUNT_MATCH, 0, SLJIT_IMM, 1); +OP2(SLJIT_SUB | SLJIT_SET_Z, COUNT_MATCH, 0, COUNT_MATCH, 0, SLJIT_IMM, 1); add_jump(compiler, &common->calllimit, JUMP(SLJIT_ZERO)); } @@ -2322,7 +2313,7 @@ DEFINE_COMPILER; SLJIT_ASSERT(size > 0); -OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw)); +OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw)); #ifdef DESTROY_REGISTERS OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 12345); OP1(SLJIT_MOV, TMP3, 0, TMP1, 0); @@ -2330,7 +2321,7 @@ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, TMP1, 0); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP1, 0); #endif -add_stub(common, CMP(SLJIT_GREATER, STACK_TOP, 0, STACK_LIMIT, 0)); +add_stub(common, CMP(SLJIT_LESS, STACK_TOP, 0, STACK_LIMIT, 0)); } static SLJIT_INLINE void free_stack(compiler_common *common, int size) @@ -2338,7 +2329,7 @@ DEFINE_COMPILER; SLJIT_ASSERT(size > 0); -OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw)); +OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw)); } static sljit_uw * allocate_read_only_data(compiler_common *common, sljit_uw size) @@ -2396,7 +2387,7 @@ OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, length - 1); loop = LABEL(); OP1(SLJIT_MOVU, SLJIT_MEM1(SLJIT_R1), sizeof(sljit_sw), SLJIT_R0, 0); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, loop); } } @@ -2434,7 +2425,7 @@ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, length - 2); loop = LABEL(); OP1(SLJIT_MOVU, SLJIT_MEM1(TMP2), sizeof(sljit_sw), TMP1, 0); - OP2(SLJIT_SUB | SLJIT_SET_E, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, loop); } @@ -2452,22 +2443,22 @@ { while (current != NULL) { - switch (current[-2]) + switch (current[1]) { case type_then_trap: break; case type_mark: - if (STRCMP_UC_UC(skip_arg, (pcre_uchar *)current[-3]) == 0) - return current[-4]; + if (STRCMP_UC_UC(skip_arg, (pcre_uchar *)current[2]) == 0) + return current[3]; break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } - SLJIT_ASSERT(current > (sljit_sw*)current[-1]); - current = (sljit_sw*)current[-1]; + SLJIT_ASSERT(current[0] == 0 || current < (sljit_sw*)current[0]); + current = (sljit_sw*)current[0]; } return -1; } @@ -2501,7 +2492,7 @@ OP2(SLJIT_ASHR, SLJIT_S1, 0, SLJIT_S1, 0, SLJIT_IMM, UCHAR_SHIFT); #endif OP1(SLJIT_MOVU_S32, SLJIT_MEM1(SLJIT_R2), sizeof(int), SLJIT_S1, 0); -OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1); +OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, loop); JUMPHERE(early_quit); @@ -3106,8 +3097,8 @@ OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); /* Skip low surrogate if necessary. */ OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xdc00); - OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xdc00); + OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0); return; @@ -3126,6 +3117,7 @@ if (nltype == NLTYPE_ANY) { add_jump(compiler, &common->anynewline, JUMP(SLJIT_FAST_CALL)); + sljit_set_current_flags(compiler, SLJIT_SET_Z); add_jump(compiler, backtracks, JUMP(jumpifmatch ? SLJIT_NOT_ZERO : SLJIT_ZERO)); } else if (nltype == NLTYPE_ANYCRLF) @@ -3167,7 +3159,7 @@ OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); /* Searching for the first zero. */ -OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); @@ -3181,7 +3173,7 @@ OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); -OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x10000); +OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x10000); jump = JUMP(SLJIT_NOT_ZERO); /* Three byte sequence. */ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); @@ -3215,15 +3207,15 @@ OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); /* Searching for the first zero. */ -OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); sljit_emit_fast_return(compiler, RETURN_ADDR, 0); JUMPHERE(jump); -OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x400); -OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_NOT_ZERO); +OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x400); +OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_NOT_ZERO); /* This code runs only in 8 bit mode. No need to shift the value. */ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0); OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1)); @@ -3246,7 +3238,7 @@ sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x20); +OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x20); jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); @@ -3287,10 +3279,30 @@ /* Search the UCD record for the character comes in TMP1. Returns chartype in TMP1 and UCD offset in TMP2. */ DEFINE_COMPILER; +#ifdef COMPILE_PCRE32 +struct sljit_jump *jump; +#endif + +#if defined SLJIT_DEBUG && SLJIT_DEBUG +/* dummy_ucd_record */ +const ucd_record *record = GET_UCD(INVALID_UTF_CHAR); +SLJIT_ASSERT(record->script == ucp_Common && record->chartype == ucp_Cn && record->gbprop == ucp_gbOther); +SLJIT_ASSERT(record->caseset == 0 && record->other_case == 0); +#endif SLJIT_ASSERT(UCD_BLOCK_SIZE == 128 && sizeof(ucd_record) == 8); sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); + +#ifdef COMPILE_PCRE32 +if (!common->utf) + { + jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x10ffff + 1); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); + JUMPHERE(jump); + } +#endif + OP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT); OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1)); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK); @@ -3365,8 +3377,8 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); end = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, common->newline & 0xff); - OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, common->newline & 0xff); + OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); #if defined COMPILE_PCRE16 || defined COMPILE_PCRE32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); #endif @@ -3403,8 +3415,8 @@ { singlechar = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xd800); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); - OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); + OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); JUMPHERE(singlechar); @@ -3853,7 +3865,7 @@ } } -#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) +#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) && !(defined SUPPORT_VALGRIND) static sljit_s32 character_to_int32(pcre_uchar chr) { @@ -4019,6 +4031,7 @@ instruction[1] = 0xbc; instruction[2] = 0xc0 | (tmp1_ind << 3) | tmp1_ind; sljit_emit_op_custom(compiler, instruction, 3); +sljit_set_current_flags(compiler, SLJIT_SET_Z); nomatch = JUMP(SLJIT_ZERO); @@ -4119,6 +4132,7 @@ instruction[1] = 0xbc; instruction[2] = 0xc0 | (tmp1_ind << 3) | tmp1_ind; sljit_emit_op_custom(compiler, instruction, 3); +sljit_set_current_flags(compiler, SLJIT_SET_Z); JUMPTO(SLJIT_ZERO, start); @@ -4155,18 +4169,8 @@ OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_ADD, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr, SLJIT_IMM, IN_UCHARS(offset + 1)); -#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) - if (sljit_x86_is_cmov_available()) - { - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, STR_END, 0, TMP3, 0); - sljit_x86_emit_cmov(compiler, SLJIT_GREATER, STR_END, TMP3, 0); - } -#endif - { - quit = CMP(SLJIT_LESS_EQUAL, STR_END, 0, TMP3, 0); - OP1(SLJIT_MOV, STR_END, 0, TMP3, 0); - JUMPHERE(quit); - } + OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP3, 0); + sljit_emit_cmov(compiler, SLJIT_GREATER, STR_END, TMP3, 0); } #if defined SUPPORT_UTF && !defined COMPILE_PCRE32 @@ -4174,11 +4178,11 @@ utf_start = LABEL(); #endif -#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) +#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) && !(defined SUPPORT_VALGRIND) /* SSE2 accelerated first character search. */ -if (sljit_x86_is_sse2_available()) +if (sljit_has_cpu_feature(SLJIT_HAS_SSE2)) { fast_forward_first_char2_sse2(common, char1, char2); @@ -4213,16 +4217,16 @@ if (offset > 0) OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offset)); } - else if (sljit_x86_is_cmov_available()) - { - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); - sljit_x86_emit_cmov(compiler, SLJIT_GREATER_EQUAL, STR_PTR, has_match_end ? SLJIT_MEM1(SLJIT_SP) : STR_END, has_match_end ? common->match_end_ptr : 0); - } else { - quit = CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0); - OP1(SLJIT_MOV, STR_PTR, 0, has_match_end ? SLJIT_MEM1(SLJIT_SP) : STR_END, has_match_end ? common->match_end_ptr : 0); - JUMPHERE(quit); + OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + if (has_match_end) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); + sljit_emit_cmov(compiler, SLJIT_GREATER_EQUAL, STR_PTR, TMP1, 0); + } + else + sljit_emit_cmov(compiler, SLJIT_GREATER_EQUAL, STR_PTR, STR_END, 0); } if (has_match_end) @@ -4249,10 +4253,10 @@ } else { - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char1); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char2); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char1); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char2); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); found = JUMP(SLJIT_NOT_ZERO); } } @@ -4571,8 +4575,8 @@ firstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(2)); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, STR_PTR, 0, TMP1, 0); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_GREATER_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, STR_PTR, 0, TMP1, 0); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER_EQUAL); #if defined COMPILE_PCRE16 || defined COMPILE_PCRE32 OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT); #endif @@ -4616,8 +4620,8 @@ JUMPHERE(foundcr); notfoundnl = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, CHAR_NL); - OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, CHAR_NL); + OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); #if defined COMPILE_PCRE16 || defined COMPILE_PCRE32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); #endif @@ -4670,7 +4674,7 @@ OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)start_bits); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); found = JUMP(SLJIT_NOT_ZERO); } @@ -4692,8 +4696,8 @@ { CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xd800, start); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); - OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); + OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); } @@ -4780,31 +4784,31 @@ struct sljit_label *mainloop; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -OP1(SLJIT_MOV, TMP1, 0, STACK_TOP, 0); -GET_LOCAL_BASE(TMP3, 0, 0); +OP1(SLJIT_MOV, TMP3, 0, STACK_TOP, 0); +GET_LOCAL_BASE(TMP1, 0, 0); /* Drop frames until we reach STACK_TOP. */ mainloop = LABEL(); -OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), 0); -OP2(SLJIT_SUB | SLJIT_SET_S, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0); -jump = JUMP(SLJIT_SIG_LESS_EQUAL); - -OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP3, 0); -OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(TMP1), sizeof(sljit_sw)); -OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), sizeof(sljit_sw), SLJIT_MEM1(TMP1), 2 * sizeof(sljit_sw)); -OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 3 * sizeof(sljit_sw)); +OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), -sizeof(sljit_sw)); +jump = CMP(SLJIT_SIG_LESS_EQUAL, TMP2, 0, SLJIT_IMM, 0); + +OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); +OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(STACK_TOP), -2 * sizeof(sljit_sw)); +OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), sizeof(sljit_sw), SLJIT_MEM1(STACK_TOP), -3 * sizeof(sljit_sw)); +OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 3 * sizeof(sljit_sw)); JUMPTO(SLJIT_JUMP, mainloop); JUMPHERE(jump); -jump = JUMP(SLJIT_SIG_LESS); -/* End of dropping frames. */ +jump = CMP(SLJIT_NOT_ZERO /* SIG_LESS */, TMP2, 0, SLJIT_IMM, 0); +/* End of reverting values. */ +OP1(SLJIT_MOV, STACK_TOP, 0, TMP3, 0); sljit_emit_fast_return(compiler, RETURN_ADDR, 0); JUMPHERE(jump); OP1(SLJIT_NEG, TMP2, 0, TMP2, 0); -OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP3, 0); -OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(TMP1), sizeof(sljit_sw)); -OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 2 * sizeof(sljit_sw)); +OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); +OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(STACK_TOP), -2 * sizeof(sljit_sw)); +OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 2 * sizeof(sljit_sw)); JUMPTO(SLJIT_JUMP, mainloop); } @@ -4837,11 +4841,11 @@ jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); add_jump(compiler, &common->getucd, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Nd - ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); JUMPHERE(jump); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP2, 0); } @@ -4881,11 +4885,11 @@ jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); add_jump(compiler, &common->getucd, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Nd - ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); JUMPHERE(jump); } else @@ -4913,7 +4917,7 @@ } set_jumps(skipread_list, LABEL()); -OP2(SLJIT_XOR | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1); +OP2(SLJIT_XOR | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1); sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0); } @@ -5064,7 +5068,7 @@ return TRUE; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); return FALSE; } } @@ -5077,22 +5081,22 @@ sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x0a); -OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); -OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); +OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); +OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); +OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); #if defined SUPPORT_UTF || defined COMPILE_PCRE16 || defined COMPILE_PCRE32 #ifdef COMPILE_PCRE8 if (common->utf) { #endif - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); #ifdef COMPILE_PCRE8 } #endif #endif /* SUPPORT_UTF || COMPILE_PCRE16 || COMPILE_PCRE32 */ -OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); +OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); sljit_emit_fast_return(compiler, RETURN_ADDR, 0); } @@ -5103,34 +5107,34 @@ sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x09); -OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x20); -OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xa0); +OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x09); +OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); +OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x20); +OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); +OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xa0); #if defined SUPPORT_UTF || defined COMPILE_PCRE16 || defined COMPILE_PCRE32 #ifdef COMPILE_PCRE8 if (common->utf) { #endif - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x1680); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x1680); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x2000); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x200A - 0x2000); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x202f - 0x2000); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x205f - 0x2000); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x3000 - 0x2000); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x200A - 0x2000); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x202f - 0x2000); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x205f - 0x2000); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x3000 - 0x2000); #ifdef COMPILE_PCRE8 } #endif #endif /* SUPPORT_UTF || COMPILE_PCRE16 || COMPILE_PCRE32 */ -OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); +OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); sljit_emit_fast_return(compiler, RETURN_ADDR, 0); } @@ -5143,22 +5147,22 @@ sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x0a); -OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); -OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); +OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); +OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); +OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); #if defined SUPPORT_UTF || defined COMPILE_PCRE16 || defined COMPILE_PCRE32 #ifdef COMPILE_PCRE8 if (common->utf) { #endif - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); #ifdef COMPILE_PCRE8 } #endif #endif /* SUPPORT_UTF || COMPILE_PCRE16 || COMPILE_PCRE32 */ -OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); +OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); sljit_emit_fast_return(compiler, RETURN_ADDR, 0); } @@ -5183,7 +5187,7 @@ OP1(MOVU_UCHAR, CHAR1, 0, SLJIT_MEM1(TMP1), IN_UCHARS(1)); OP1(MOVU_UCHAR, CHAR2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1)); jump = CMP(SLJIT_NOT_EQUAL, CHAR1, 0, CHAR2, 0); -OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1)); +OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1)); JUMPTO(SLJIT_NOT_ZERO, label); JUMPHERE(jump); @@ -5227,7 +5231,7 @@ JUMPHERE(jump); #endif jump = CMP(SLJIT_NOT_EQUAL, CHAR1, 0, CHAR2, 0); -OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1)); +OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1)); JUMPTO(SLJIT_NOT_ZERO, label); JUMPHERE(jump); @@ -5394,7 +5398,7 @@ #endif default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } context->ucharptr = 0; @@ -5568,7 +5572,7 @@ break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } cc += 2; @@ -5592,7 +5596,7 @@ OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); add_jump(compiler, &found, JUMP(SLJIT_NOT_ZERO)); } @@ -5625,7 +5629,7 @@ OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); add_jump(compiler, list, JUMP(SLJIT_NOT_ZERO)); #ifdef COMPILE_PCRE8 @@ -5644,6 +5648,15 @@ if (needschar && !charsaved) OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0); +#ifdef COMPILE_PCRE32 + if (!common->utf) + { + jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x10ffff + 1); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); + JUMPHERE(jump); + } +#endif + OP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT); OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1)); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK); @@ -5735,14 +5748,14 @@ if (numberofcmps < 3 && (*cc == XCL_SINGLE || *cc == XCL_RANGE)) { - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); - OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, numberofcmps == 0 ? SLJIT_UNUSED : TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_EQUAL); numberofcmps++; } else if (numberofcmps > 0) { - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); numberofcmps = 0; } @@ -5761,14 +5774,14 @@ if (numberofcmps < 3 && (*cc == XCL_SINGLE || *cc == XCL_RANGE)) { - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); - OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, numberofcmps == 0 ? SLJIT_UNUSED : TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); numberofcmps++; } else if (numberofcmps > 0) { - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); numberofcmps = 0; } @@ -5793,12 +5806,12 @@ break; case PT_LAMP: - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - typeoffset); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ll - typeoffset); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lt - typeoffset); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - typeoffset); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ll - typeoffset); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lt - typeoffset); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -5820,33 +5833,33 @@ case PT_SPACE: case PT_PXSPACE: SET_CHAR_OFFSET(9); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd - 0x9); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd - 0x9); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x9); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x9); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x9); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x9); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); SET_TYPE_OFFSET(ucp_Zl); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Zl); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Zl); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; case PT_WORD: - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_UNDERSCORE - charoffset)); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_UNDERSCORE - charoffset)); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); /* Fall through. */ case PT_ALNUM: SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); - OP_FLAGS((*cc == PT_ALNUM) ? SLJIT_MOV : SLJIT_OR, TMP2, 0, (*cc == PT_ALNUM) ? SLJIT_UNUSED : TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP_FLAGS((*cc == PT_ALNUM) ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); SET_TYPE_OFFSET(ucp_Nd); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_No - ucp_Nd); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -5868,8 +5881,8 @@ OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset); OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]); } - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[1]); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[1]); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); other_cases += 2; } else if (is_powerof2(other_cases[2] ^ other_cases[1])) @@ -5881,63 +5894,63 @@ OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset); OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]); } - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[2]); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[2]); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[0] - charoffset)); - OP_FLAGS(SLJIT_OR | ((other_cases[3] == NOTACHAR) ? SLJIT_SET_E : 0), TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[0] - charoffset)); + OP_FLAGS(SLJIT_OR | ((other_cases[3] == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL); other_cases += 3; } else { - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); } while (*other_cases != NOTACHAR) { - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); - OP_FLAGS(SLJIT_OR | ((*other_cases == NOTACHAR) ? SLJIT_SET_E : 0), TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); + OP_FLAGS(SLJIT_OR | ((*other_cases == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL); } jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; case PT_UCNC: - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_DOLLAR_SIGN - charoffset)); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_COMMERCIAL_AT - charoffset)); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_GRAVE_ACCENT - charoffset)); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_DOLLAR_SIGN - charoffset)); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_COMMERCIAL_AT - charoffset)); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_GRAVE_ACCENT - charoffset)); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); SET_CHAR_OFFSET(0xa0); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(0xd7ff - charoffset)); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(0xd7ff - charoffset)); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); SET_CHAR_OFFSET(0); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xe000 - 0); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_GREATER_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xe000 - 0); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_GREATER_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; case PT_PXGRAPH: /* C and Z groups are the farthest two groups. */ SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_GREATER); + OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER); jump = CMP(SLJIT_NOT_EQUAL, typereg, 0, SLJIT_IMM, ucp_Cf - ucp_Ll); /* In case of ucp_Cf, we overwrite the result. */ SET_CHAR_OFFSET(0x2066); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x2066); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x2066); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); JUMPHERE(jump); jump = CMP(SLJIT_ZERO ^ invertcmp, TMP2, 0, SLJIT_IMM, 0); @@ -5946,21 +5959,21 @@ case PT_PXPRINT: /* C and Z groups are the farthest two groups. */ SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_GREATER); + OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Ll); - OP_FLAGS(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_NOT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Ll); + OP_FLAGS(SLJIT_AND, TMP2, 0, SLJIT_NOT_EQUAL); jump = CMP(SLJIT_NOT_EQUAL, typereg, 0, SLJIT_IMM, ucp_Cf - ucp_Ll); /* In case of ucp_Cf, we overwrite the result. */ SET_CHAR_OFFSET(0x2066); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); - OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); + OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); JUMPHERE(jump); jump = CMP(SLJIT_ZERO ^ invertcmp, TMP2, 0, SLJIT_IMM, 0); @@ -5968,21 +5981,21 @@ case PT_PXPUNCT: SET_TYPE_OFFSET(ucp_Sc); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Sc); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Sc); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); SET_CHAR_OFFSET(0); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x7f); - OP_FLAGS(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x7f); + OP_FLAGS(SLJIT_AND, TMP2, 0, SLJIT_LESS_EQUAL); SET_TYPE_OFFSET(ucp_Pc); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ps - ucp_Pc); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_LESS_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ps - ucp_Pc); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } cc += 2; @@ -6028,6 +6041,7 @@ case OP_NOT_WORD_BOUNDARY: case OP_WORD_BOUNDARY: add_jump(compiler, &common->wordboundary, JUMP(SLJIT_FAST_CALL)); + sljit_set_current_flags(compiler, SLJIT_SET_Z); add_jump(compiler, backtracks, JUMP(type == OP_NOT_WORD_BOUNDARY ? SLJIT_NOT_ZERO : SLJIT_ZERO)); return cc; @@ -6043,10 +6057,10 @@ else { jump[1] = CMP(SLJIT_EQUAL, TMP2, 0, STR_END, 0); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); - OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_UNUSED, 0, SLJIT_LESS); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff); - OP_FLAGS(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_NOT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); + OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff); + OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_NOT_EQUAL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL)); check_partial(common, TRUE); add_jump(compiler, backtracks, JUMP(SLJIT_JUMP)); @@ -6068,9 +6082,9 @@ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); jump[1] = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR); OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); - OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); + OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); jump[2] = JUMP(SLJIT_GREATER); - add_jump(compiler, backtracks, JUMP(SLJIT_LESS)); + add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL) /* LESS */); /* Equal. */ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1)); jump[3] = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_NL); @@ -6089,6 +6103,7 @@ read_char_range(common, common->nlmin, common->nlmax, TRUE); add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, STR_END, 0)); add_jump(compiler, &common->anynewline, JUMP(SLJIT_FAST_CALL)); + sljit_set_current_flags(compiler, SLJIT_SET_Z); add_jump(compiler, backtracks, JUMP(SLJIT_ZERO)); OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1); } @@ -6204,7 +6219,7 @@ label = LABEL(); add_jump(compiler, backtracks, CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP3, 0)); skip_char_back(common); - OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, TMP2, 0, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); } else @@ -6217,7 +6232,7 @@ check_start_used_ptr(common); return cc + LINK_SIZE; } -SLJIT_ASSERT_STOP(); +SLJIT_UNREACHABLE(); return cc; } @@ -6250,7 +6265,7 @@ #endif read_char8_type(common, type == OP_NOT_DIGIT); /* Flip the starting bit in the negative case. */ - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_digit); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_digit); add_jump(compiler, backtracks, JUMP(type == OP_DIGIT ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -6264,7 +6279,7 @@ else #endif read_char8_type(common, type == OP_NOT_WHITESPACE); - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_space); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_space); add_jump(compiler, backtracks, JUMP(type == OP_WHITESPACE ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -6278,7 +6293,7 @@ else #endif read_char8_type(common, type == OP_NOT_WORDCHAR); - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_word); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_word); add_jump(compiler, backtracks, JUMP(type == OP_WORDCHAR ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -6320,8 +6335,8 @@ #elif defined COMPILE_PCRE16 jump[0] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xd800); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); - OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_UNUSED, 0, SLJIT_EQUAL); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); + OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); #endif @@ -6383,6 +6398,7 @@ detect_partial_match(common, backtracks); read_char_range(common, 0x9, 0x3000, type == OP_NOT_HSPACE); add_jump(compiler, &common->hspace, JUMP(SLJIT_FAST_CALL)); + sljit_set_current_flags(compiler, SLJIT_SET_Z); add_jump(compiler, backtracks, JUMP(type == OP_NOT_HSPACE ? SLJIT_NOT_ZERO : SLJIT_ZERO)); return cc; @@ -6392,6 +6408,7 @@ detect_partial_match(common, backtracks); read_char_range(common, 0xa, 0x2029, type == OP_NOT_VSPACE); add_jump(compiler, &common->vspace, JUMP(SLJIT_FAST_CALL)); + sljit_set_current_flags(compiler, SLJIT_SET_Z); add_jump(compiler, backtracks, JUMP(type == OP_NOT_VSPACE ? SLJIT_NOT_ZERO : SLJIT_ZERO)); return cc; @@ -6418,7 +6435,7 @@ OP1(SLJIT_MOV_U32, TMP1, 0, SLJIT_MEM1(STACK_TOP), (sljit_sw)PRIV(ucp_gbtable)); OP1(SLJIT_MOV, STACK_TOP, 0, TMP2, 0); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); JUMPTO(SLJIT_NOT_ZERO, label); OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0); @@ -6587,7 +6604,7 @@ OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); add_jump(compiler, backtracks, JUMP(SLJIT_ZERO)); #if defined SUPPORT_UTF || !defined COMPILE_PCRE8 @@ -6604,7 +6621,7 @@ return cc + GET(cc, 0) - 1; #endif } -SLJIT_ASSERT_STOP(); +SLJIT_UNREACHABLE(); return cc; } @@ -6790,9 +6807,9 @@ #endif /* SUPPORT_UTF && SUPPORT_UCP */ { if (ref) - OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP1, 0); + OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP1, 0); else - OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw), TMP1, 0); + OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw), TMP1, 0); if (withchecks) jump = JUMP(SLJIT_ZERO); @@ -6883,7 +6900,7 @@ cc += 1 + IMM2_SIZE + 1 + 2 * IMM2_SIZE; break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } @@ -6897,7 +6914,7 @@ OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0); /* Temporary release of STR_PTR. */ - OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); /* Handles both invalid and empty cases. Since the minimum repeat, is zero the invalid case is basically the same as an empty case. */ if (ref) @@ -6910,7 +6927,7 @@ zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw)); } /* Restore if not zero length. */ - OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); } else { @@ -7157,7 +7174,7 @@ (((int)sizeof(PUBL(callout_block)) + 7) & ~7) #define CALLOUT_ARG_OFFSET(arg) \ - (-CALLOUT_ARG_SIZE + SLJIT_OFFSETOF(PUBL(callout_block), arg)) + SLJIT_OFFSETOF(PUBL(callout_block), arg) static SLJIT_INLINE pcre_uchar *compile_callout_matchingpath(compiler_common *common, pcre_uchar *cc, backtrack_common *parent) { @@ -7187,7 +7204,8 @@ /* Needed to save important temporary registers. */ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0); -OP2(SLJIT_SUB, SLJIT_R1, 0, STACK_TOP, 0, SLJIT_IMM, CALLOUT_ARG_SIZE); +/* SLJIT_R0 = arguments */ +OP1(SLJIT_MOV, SLJIT_R1, 0, STACK_TOP, 0); GET_LOCAL_BASE(SLJIT_R2, 0, OVECTOR_START); sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_callout)); OP1(SLJIT_MOV_S32, SLJIT_RETURN_REG, 0, SLJIT_RETURN_REG, 0); @@ -7195,12 +7213,12 @@ free_stack(common, CALLOUT_ARG_SIZE / sizeof(sljit_sw)); /* Check return value. */ -OP2(SLJIT_SUB | SLJIT_SET_S, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); +OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER)); if (common->forced_quit_label == NULL) - add_jump(compiler, &common->forced_quit, JUMP(SLJIT_SIG_LESS)); + add_jump(compiler, &common->forced_quit, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */); else - JUMPTO(SLJIT_SIG_LESS, common->forced_quit_label); + JUMPTO(SLJIT_NOT_EQUAL /* SIG_LESS */, common->forced_quit_label); return cc + 2 + 2 * LINK_SIZE; } @@ -7321,7 +7339,7 @@ allocate_stack(common, framesize + extrasize); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); - OP2(SLJIT_SUB, TMP2, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + extrasize) * sizeof(sljit_sw)); + OP2(SLJIT_ADD, TMP2, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + extrasize) * sizeof(sljit_sw)); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP2, 0); if (needs_control_head) OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr); @@ -7392,22 +7410,22 @@ free_stack(common, extrasize); if (needs_control_head) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(-1)); } else { if ((opcode != OP_ASSERT_NOT && opcode != OP_ASSERTBACK_NOT) || conditional) { /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */ - OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw)); if (needs_control_head) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(-1)); } else { OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); if (needs_control_head) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), (framesize + 1) * sizeof(sljit_sw)); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(-framesize - 2)); add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); } } @@ -7418,25 +7436,25 @@ if (conditional) { if (extrasize > 0) - OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), needs_control_head ? sizeof(sljit_sw) : 0); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), needs_control_head ? STACK(-2) : STACK(-1)); } else if (bra == OP_BRAZERO) { if (framesize < 0) - OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (extrasize - 1) * sizeof(sljit_sw)); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize)); else { - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw)); - OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (framesize + extrasize - 1) * sizeof(sljit_sw)); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-framesize - 1)); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-framesize - extrasize)); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0); } - OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0); } else if (framesize >= 0) { /* For OP_BRA and OP_BRAMINZERO. */ - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw)); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-framesize - 1)); } } add_jump(compiler, found, JUMP(SLJIT_JUMP)); @@ -7480,12 +7498,12 @@ set_jumps(common->positive_assert_quit, LABEL()); SLJIT_ASSERT(framesize != no_stack); if (framesize < 0) - OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, extrasize * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, extrasize * sizeof(sljit_sw)); else { OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); - OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + extrasize) * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + extrasize) * sizeof(sljit_sw)); } JUMPHERE(jump); } @@ -7534,18 +7552,18 @@ { /* We know that STR_PTR was stored on the top of the stack. */ if (extrasize > 0) - OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (extrasize - 1) * sizeof(sljit_sw)); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize)); /* Keep the STR_PTR on the top of the stack. */ if (bra == OP_BRAZERO) { - OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); if (extrasize == 2) OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0); } else if (bra == OP_BRAMINZERO) { - OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0); } } @@ -7554,13 +7572,13 @@ if (bra == OP_BRA) { /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */ - OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw)); - OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (extrasize - 2) * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw)); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize + 1)); } else { /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */ - OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 2) * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 2) * sizeof(sljit_sw)); if (extrasize == 2) { OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0)); @@ -7588,7 +7606,7 @@ { OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw)); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-framesize - 1)); } set_jumps(backtrack->common.topbacktracks, LABEL()); } @@ -7675,23 +7693,23 @@ } if (needs_control_head) - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), (ket != OP_KET || has_alternatives) ? sizeof(sljit_sw) : 0); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), (ket != OP_KET || has_alternatives) ? STACK(-2) : STACK(-1)); /* TMP2 which is set here used by OP_KETRMAX below. */ if (ket == OP_KETRMAX) - OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), 0); + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(-1)); else if (ket == OP_KETRMIN) { /* Move the STR_PTR to the private_data_ptr. */ - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-1)); } } else { stacksize = (ket != OP_KET || has_alternatives) ? 2 : 1; - OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + stacksize) * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + stacksize) * sizeof(sljit_sw)); if (needs_control_head) - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), 0); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-1)); if (ket == OP_KETRMAX) { @@ -7927,7 +7945,7 @@ { /* Except when the whole stack frame must be saved. */ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); - braminzero = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (BACKTRACK_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_sw)); + braminzero = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), STACK(-BACKTRACK_AS(bracket_backtrack)->u.framesize - 2)); } JUMPHERE(skip); } @@ -8000,7 +8018,7 @@ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0); if (BACKTRACK_AS(bracket_backtrack)->u.framesize == no_frame) - OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, needs_control_head ? (2 * sizeof(sljit_sw)) : sizeof(sljit_sw)); + OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, needs_control_head ? (2 * sizeof(sljit_sw)) : sizeof(sljit_sw)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize + 1), TMP2, 0); } else if (ket == OP_KETRMAX || has_alternatives) @@ -8018,7 +8036,7 @@ OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); - OP2(SLJIT_SUB, TMP2, 0, STACK_TOP, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw)); + OP2(SLJIT_ADD, TMP2, 0, STACK_TOP, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw)); stacksize = needs_control_head ? 1 : 0; if (ket != OP_KET || has_alternatives) @@ -8090,13 +8108,13 @@ slot = common->name_table + GET2(matchingpath, 1) * common->name_entry_size; OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)); - OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(slot, 0) << 1), TMP1, 0); + OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(slot, 0) << 1), TMP1, 0); slot += common->name_entry_size; i--; while (i-- > 0) { OP2(SLJIT_SUB, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(slot, 0) << 1), TMP1, 0); - OP2(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, STR_PTR, 0); + OP2(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, TMP2, 0, STR_PTR, 0); slot += common->name_entry_size; } OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0); @@ -8111,7 +8129,7 @@ if (*matchingpath == OP_FAIL) stacksize = 0; - if (*matchingpath == OP_RREF) + else if (*matchingpath == OP_RREF) { stacksize = GET2(matchingpath, 1); if (common->currententry == NULL) @@ -8244,7 +8262,7 @@ { if (has_alternatives) BACKTRACK_AS(bracket_backtrack)->alternative_matchingpath = LABEL(); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, rmax_label); /* Drop STR_PTR for greedy plus quantifier. */ if (opcode != OP_ONCE) @@ -8274,7 +8292,7 @@ if (repeat_type == OP_EXACT) { count_match(common); - OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, rmax_label); } else if (repeat_type == OP_UPTO) @@ -8374,7 +8392,7 @@ break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } @@ -8452,7 +8470,7 @@ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); if (needs_control_head) OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr); - OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, -STACK(stacksize - 1)); + OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw)); stack = 0; if (!zero) @@ -8524,7 +8542,7 @@ { if (offset != 0) { - OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, stacksize * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, stacksize * sizeof(sljit_sw)); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), cbraprivptr, STR_PTR, 0); @@ -8535,10 +8553,10 @@ else { OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); - OP2(SLJIT_ADD, STACK_TOP, 0, TMP2, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, TMP2, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw)); if (opcode == OP_SBRAPOS) - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw)); - OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw), STR_PTR, 0); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), STACK(-framesize - 2)); + OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), STACK(-framesize - 2), STR_PTR, 0); } /* Even if the match is empty, we need to reset the control head. */ @@ -8584,7 +8602,7 @@ else { OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); - OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw)); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP2), STACK(-framesize - 2)); } } @@ -8601,7 +8619,7 @@ if (framesize < 0) add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(stacksize - 1), SLJIT_IMM, 0)); else /* TMP2 is set to [private_data_ptr] above. */ - add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(TMP2), (stacksize - 1) * sizeof(sljit_sw), SLJIT_IMM, 0)); + add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(TMP2), STACK(-stacksize), SLJIT_IMM, 0)); } /* None of them matched. */ @@ -8824,7 +8842,7 @@ OP1(SLJIT_MOV, tmp_base, tmp_offset, SLJIT_IMM, exact); label = LABEL(); compile_char1_matchingpath(common, type, cc, &backtrack->topbacktracks, FALSE); - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); } else @@ -8832,7 +8850,7 @@ OP1(SLJIT_MOV, tmp_base, tmp_offset, SLJIT_IMM, exact); label = LABEL(); compile_char1_matchingpath(common, type, cc, &backtrack->topbacktracks, TRUE); - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); } } @@ -8862,7 +8880,7 @@ if (opcode == OP_UPTO) { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0); - OP2(SLJIT_SUB | SLJIT_SET_E, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); jump = JUMP(SLJIT_ZERO); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0, TMP1, 0); } @@ -8924,7 +8942,7 @@ label = LABEL(); if (opcode == OP_UPTO) { - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_ZERO)); } compile_char1_matchingpath(common, type, cc, &backtrack->topbacktracks, FALSE); @@ -8944,7 +8962,7 @@ OP1(SLJIT_MOV, base, offset1, STR_PTR, 0); if (opcode == OP_UPTO) { - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); add_jump(compiler, &no_match, JUMP(SLJIT_ZERO)); } @@ -8971,7 +8989,7 @@ if (opcode == OP_UPTO) { - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); } else @@ -9000,7 +9018,7 @@ if (opcode == OP_UPTO) { - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); } else @@ -9026,7 +9044,7 @@ compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE); if (opcode == OP_UPTO) { - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); } @@ -9113,7 +9131,7 @@ label = LABEL(); compile_char1_matchingpath(common, type, cc, &no_match, TRUE); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, STR_PTR, 0); - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); set_jumps(no_match, LABEL()); OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1); @@ -9124,7 +9142,7 @@ label = LABEL(); detect_partial_match(common, &no_match); compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE); - OP2(SLJIT_SUB | SLJIT_SET_E, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1); JUMPTO(SLJIT_NOT_ZERO, label); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); set_jumps(no_char1_match, LABEL()); @@ -9142,7 +9160,7 @@ break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } @@ -9264,7 +9282,7 @@ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr); allocate_stack(common, size); if (size > 3) - OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0, SLJIT_IMM, (size - 3) * sizeof(sljit_sw)); + OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0, SLJIT_IMM, (size - 3) * sizeof(sljit_sw)); else OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(size - 1), SLJIT_IMM, BACKTRACK_AS(then_trap_backtrack)->start); @@ -9569,7 +9587,7 @@ break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); return; } if (cc == NULL) @@ -9677,7 +9695,7 @@ case OP_MINUPTO: OP1(SLJIT_MOV, TMP1, 0, base, offset1); OP1(SLJIT_MOV, STR_PTR, 0, base, offset0); - OP2(SLJIT_SUB | SLJIT_SET_E, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); + OP2(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); add_jump(compiler, &jumplist, JUMP(SLJIT_ZERO)); OP1(SLJIT_MOV, base, offset1, TMP1, 0); @@ -9723,7 +9741,7 @@ break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } @@ -9831,7 +9849,7 @@ { OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(assert_backtrack)->private_data_ptr); add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(assert_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(assert_backtrack)->framesize * sizeof(sljit_sw)); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(assert_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-CURRENT_AS(assert_backtrack)->framesize - 1)); set_jumps(current->topbacktracks, LABEL()); } @@ -9841,7 +9859,7 @@ if (bra == OP_BRAZERO) { /* We know there is enough place on the stack. */ - OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0); JUMPTO(SLJIT_JUMP, CURRENT_AS(assert_backtrack)->matchingpath); JUMPHERE(brajump); @@ -9954,7 +9972,7 @@ else { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); - CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (CURRENT_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_sw), CURRENT_AS(bracket_backtrack)->recursive_matchingpath); + CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), STACK(-CURRENT_AS(bracket_backtrack)->u.framesize - 2), CURRENT_AS(bracket_backtrack)->recursive_matchingpath); } /* Drop STR_PTR for non-greedy plus quantifier. */ if (opcode != OP_ONCE) @@ -10060,7 +10078,7 @@ { OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr); add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw)); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-assert->framesize - 1)); } cond = JUMP(SLJIT_JUMP); set_jumps(CURRENT_AS(bracket_backtrack)->u.assert->condfailed, LABEL()); @@ -10201,7 +10219,7 @@ { OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr); add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw)); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-assert->framesize - 1)); } JUMPHERE(cond); } @@ -10256,7 +10274,7 @@ JUMPHERE(once); /* Restore previous private_data_ptr */ if (CURRENT_AS(bracket_backtrack)->u.framesize >= 0) - OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracket_backtrack)->u.framesize * sizeof(sljit_sw)); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-CURRENT_AS(bracket_backtrack)->u.framesize - 1)); else if (ket == OP_KETRMIN) { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(1)); @@ -10346,7 +10364,7 @@ free_stack(common, CURRENT_AS(bracketpos_backtrack)->stacksize); JUMPHERE(jump); } -OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(bracketpos_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracketpos_backtrack)->framesize * sizeof(sljit_sw)); +OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(bracketpos_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-CURRENT_AS(bracketpos_backtrack)->framesize - 1)); } static SLJIT_INLINE void compile_braminzero_backtrackingpath(compiler_common *common, struct backtrack_common *current) @@ -10392,10 +10410,10 @@ jump = JUMP(SLJIT_JUMP); loop = LABEL(); - OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), -(int)sizeof(sljit_sw)); + OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), STACK(0)); JUMPHERE(jump); - CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), -(int)(2 * sizeof(sljit_sw)), TMP1, 0, loop); - CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), -(int)(3 * sizeof(sljit_sw)), TMP2, 0, loop); + CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(1), TMP1, 0, loop); + CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(2), TMP2, 0, loop); add_jump(compiler, &common->then_trap->quit, JUMP(SLJIT_JUMP)); return; } @@ -10645,7 +10663,7 @@ break; default: - SLJIT_ASSERT_STOP(); + SLJIT_UNREACHABLE(); break; } current = current->prev; @@ -10684,7 +10702,7 @@ count_match(common); allocate_stack(common, private_data_size + framesize + alternativesize); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(private_data_size + framesize + alternativesize - 1), TMP2, 0); -copy_private_data(common, ccbegin, ccend, TRUE, private_data_size + framesize + alternativesize, framesize + alternativesize, needs_control_head); +copy_private_data(common, ccbegin, ccend, TRUE, framesize + alternativesize, private_data_size + framesize + alternativesize, needs_control_head); if (needs_control_head) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, STACK_TOP, 0); @@ -10737,9 +10755,9 @@ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr); if (needs_frame) { - OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw)); - add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw)); + add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw)); } OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 0); common->quit = NULL; @@ -10750,32 +10768,32 @@ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr); if (needs_frame) { - OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw)); - add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw)); + add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL)); + OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw)); } OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 1); JUMPHERE(jump); if (common->quit != NULL) set_jumps(common->quit, LABEL()); -copy_private_data(common, ccbegin, ccend, FALSE, private_data_size + framesize + alternativesize, framesize + alternativesize, needs_control_head); +copy_private_data(common, ccbegin, ccend, FALSE, framesize + alternativesize, private_data_size + framesize + alternativesize, needs_control_head); free_stack(common, private_data_size + framesize + alternativesize); if (needs_control_head) { - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), 2 * sizeof(sljit_sw)); - OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), sizeof(sljit_sw)); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-3)); + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(-2)); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, TMP1, 0); OP1(SLJIT_MOV, TMP1, 0, TMP3, 0); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP2, 0); } else { - OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), sizeof(sljit_sw)); + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(-2)); OP1(SLJIT_MOV, TMP1, 0, TMP3, 0); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, TMP2, 0); } -sljit_emit_fast_return(compiler, SLJIT_MEM1(STACK_TOP), 0); +sljit_emit_fast_return(compiler, SLJIT_MEM1(STACK_TOP), STACK(-1)); } #undef COMPILE_BACKTRACKINGPATH @@ -11237,7 +11255,7 @@ OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack)); OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, top), STACK_TOP, 0); -OP2(SLJIT_ADD, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, limit), SLJIT_IMM, STACK_GROWTH_RATE); +OP2(SLJIT_SUB, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, limit), SLJIT_IMM, STACK_GROWTH_RATE); sljit_emit_ijump(compiler, SLJIT_CALL2, SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_stack_resize)); jump = CMP(SLJIT_NOT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); @@ -11391,10 +11409,10 @@ sljit_u8 local_space[MACHINE_STACK_SIZE]; struct sljit_stack local_stack; -local_stack.top = (sljit_sw)&local_space; -local_stack.base = local_stack.top; -local_stack.limit = local_stack.base + MACHINE_STACK_SIZE; -local_stack.max_limit = local_stack.limit; +local_stack.max_limit = local_space; +local_stack.limit = local_space; +local_stack.base = local_space + MACHINE_STACK_SIZE; +local_stack.top = local_space + MACHINE_STACK_SIZE; arguments->stack = &local_stack; convert_executable_func.executable_func = executable_func; return convert_executable_func.call_executable_func(arguments); diff -Nru mariadb-10.1-10.1.25/pcre/pcreposix.c mariadb-10.1-10.1.30/pcre/pcreposix.c --- mariadb-10.1-10.1.25/pcre/pcreposix.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcreposix.c 2017-12-21 15:48:48.000000000 +0000 @@ -6,7 +6,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2016 University of Cambridge + Copyright (c) 1997-2017 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -389,8 +389,8 @@ { for (i = 0; i < (size_t)rc; i++) { - pmatch[i].rm_so = ovector[i*2]; - pmatch[i].rm_eo = ovector[i*2+1]; + pmatch[i].rm_so = ovector[i*2] + so; + pmatch[i].rm_eo = ovector[i*2+1] + so; } if (allocated_ovector) free(ovector); for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1; diff -Nru mariadb-10.1-10.1.25/pcre/pcre_scanner_unittest.cc mariadb-10.1-10.1.30/pcre/pcre_scanner_unittest.cc --- mariadb-10.1-10.1.25/pcre/pcre_scanner_unittest.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_scanner_unittest.cc 2017-12-21 15:48:48.000000000 +0000 @@ -57,6 +57,7 @@ } while (0) using std::vector; +using std::string; using pcrecpp::StringPiece; using pcrecpp::Scanner; diff -Nru mariadb-10.1-10.1.25/pcre/pcre_stringpiece.h.in mariadb-10.1-10.1.30/pcre/pcre_stringpiece.h.in --- mariadb-10.1-10.1.25/pcre/pcre_stringpiece.h.in 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_stringpiece.h.in 2017-12-21 15:48:48.000000000 +0000 @@ -52,12 +52,12 @@ #include +namespace pcrecpp { + using std::memcmp; using std::strlen; using std::string; -namespace pcrecpp { - class PCRECPP_EXP_DEFN StringPiece { private: const char* ptr_; diff -Nru mariadb-10.1-10.1.25/pcre/pcre_stringpiece_unittest.cc mariadb-10.1-10.1.30/pcre/pcre_stringpiece_unittest.cc --- mariadb-10.1-10.1.25/pcre/pcre_stringpiece_unittest.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_stringpiece_unittest.cc 2017-12-21 15:48:48.000000000 +0000 @@ -24,6 +24,7 @@ } \ } while (0) +using std::string; using pcrecpp::StringPiece; static void CheckSTLComparator() { diff -Nru mariadb-10.1-10.1.25/pcre/pcre_tables.c mariadb-10.1-10.1.30/pcre/pcre_tables.c --- mariadb-10.1-10.1.25/pcre/pcre_tables.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_tables.c 2017-12-21 15:48:48.000000000 +0000 @@ -6,7 +6,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel - Copyright (c) 1997-2012 University of Cambridge + Copyright (c) 1997-2017 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -161,7 +161,7 @@ (1<= 32 && (c) < 127) #endif -#define PRINTOK(c) (locale_set? isprint(c) : PRINTABLE(c)) +#define PRINTOK(c) (locale_set? (((c) < 256) && isprint(c)) : PRINTABLE(c)) /* Posix support is disabled in 16 or 32 bit only mode. */ #if !defined SUPPORT_PCRE8 && !defined NOPOSIX @@ -426,11 +426,11 @@ #define PCRE_COPY_NAMED_SUBSTRING32(rc, re, bptr, offsets, count, \ namesptr, cbuffer, size) \ rc = pcre32_copy_named_substring((pcre32 *)re, (PCRE_SPTR32)bptr, offsets, \ - count, (PCRE_SPTR32)namesptr, (PCRE_UCHAR32 *)cbuffer, size/2) + count, (PCRE_SPTR32)namesptr, (PCRE_UCHAR32 *)cbuffer, size/4) #define PCRE_COPY_SUBSTRING32(rc, bptr, offsets, count, i, cbuffer, size) \ rc = pcre32_copy_substring((PCRE_SPTR32)bptr, offsets, count, i, \ - (PCRE_UCHAR32 *)cbuffer, size/2) + (PCRE_UCHAR32 *)cbuffer, size/4) #define PCRE_DFA_EXEC32(count, re, extra, bptr, len, start_offset, options, \ offsets, size_offsets, workspace, size_workspace) \ @@ -4834,7 +4834,16 @@ continue; case 'O': - while(isdigit(*p)) n = n * 10 + *p++ - '0'; + while(isdigit(*p)) + { + if (n > (INT_MAX-10)/10) /* Hack to stop fuzzers */ + { + printf("** \\O argument is too big\n"); + yield = 1; + goto EXIT; + } + n = n * 10 + *p++ - '0'; + } if (n > size_offsets_max) { size_offsets_max = n; diff -Nru mariadb-10.1-10.1.25/pcre/pcre_ucd.c mariadb-10.1-10.1.30/pcre/pcre_ucd.c --- mariadb-10.1-10.1.25/pcre/pcre_ucd.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/pcre_ucd.c 2017-12-21 15:48:48.000000000 +0000 @@ -38,6 +38,20 @@ const pcre_uint32 PRIV(ucd_caseless_sets)[] = {0}; #else +/* If the 32-bit library is run in non-32-bit mode, character values +greater than 0x10ffff may be encountered. For these we set up a +special record. */ + +#ifdef COMPILE_PCRE32 +const ucd_record PRIV(dummy_ucd_record)[] = {{ + ucp_Common, /* script */ + ucp_Cn, /* type unassigned */ + ucp_gbOther, /* grapheme break property */ + 0, /* case set */ + 0, /* other case */ + }}; +#endif + /* When recompiling tables with a new Unicode version, please check the types in this structure definition from pcre_internal.h (the actual field names will be different): diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testinput1 mariadb-10.1-10.1.30/pcre/testdata/testinput1 --- mariadb-10.1-10.1.25/pcre/testdata/testinput1 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testinput1 2017-12-21 15:48:48.000000000 +0000 @@ -5739,4 +5739,7 @@ /(?=.*X)X$/ \ X +/X+(?#comment)?/ + >XXX< + /-- End of testinput1 --/ diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testinput12 mariadb-10.1-10.1.30/pcre/testdata/testinput12 --- mariadb-10.1-10.1.25/pcre/testdata/testinput12 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testinput12 2017-12-21 15:48:48.000000000 +0000 @@ -104,4 +104,6 @@ /(.|.)*?bx/ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax +/((?(?!))x)(?'name')(?1)/S++ + /-- End of testinput12 --/ diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testinput15 mariadb-10.1-10.1.30/pcre/testdata/testinput15 --- mariadb-10.1-10.1.25/pcre/testdata/testinput15 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testinput15 2017-12-21 15:48:48.000000000 +0000 @@ -363,4 +363,7 @@ /abc/89 +//8+L + \xf1\xad\xae\xae + /-- End of testinput15 --/ diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testinput8 mariadb-10.1-10.1.30/pcre/testdata/testinput8 --- mariadb-10.1-10.1.25/pcre/testdata/testinput8 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testinput8 2017-12-21 15:48:48.000000000 +0000 @@ -4845,4 +4845,7 @@ aaa\D a\D +/(02-)?[0-9]{3}-[0-9]{3}/ + 02-123-123 + /-- End of testinput8 --/ diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testoutput1 mariadb-10.1-10.1.30/pcre/testdata/testoutput1 --- mariadb-10.1-10.1.25/pcre/testdata/testoutput1 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testoutput1 2017-12-21 15:48:48.000000000 +0000 @@ -9442,4 +9442,8 @@ \ X 0: X +/X+(?#comment)?/ + >XXX< + 0: X + /-- End of testinput1 --/ diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testoutput12 mariadb-10.1-10.1.30/pcre/testdata/testoutput12 --- mariadb-10.1-10.1.25/pcre/testdata/testoutput12 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testoutput12 2017-12-21 15:48:48.000000000 +0000 @@ -201,4 +201,6 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax Error -8 (match limit exceeded) +/((?(?!))x)(?'name')(?1)/S++ + /-- End of testinput12 --/ diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testoutput15 mariadb-10.1-10.1.30/pcre/testdata/testoutput15 --- mariadb-10.1-10.1.25/pcre/testdata/testoutput15 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testoutput15 2017-12-21 15:48:48.000000000 +0000 @@ -1136,4 +1136,9 @@ /abc/89 Failed: setting UTF is disabled by the application at offset 0 +//8+L + \xf1\xad\xae\xae + 0: + 0+ \x{6dbae} + /-- End of testinput15 --/ diff -Nru mariadb-10.1-10.1.25/pcre/testdata/testoutput8 mariadb-10.1-10.1.30/pcre/testdata/testoutput8 --- mariadb-10.1-10.1.25/pcre/testdata/testoutput8 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/pcre/testdata/testoutput8 2017-12-21 15:48:48.000000000 +0000 @@ -7801,4 +7801,8 @@ ** Show all captures ignored after DFA matching 0: a +/(02-)?[0-9]{3}-[0-9]{3}/ + 02-123-123 + 0: 02-123-123 + /-- End of testinput8 --/ diff -Nru mariadb-10.1-10.1.25/plugin/aws_key_management/aws_key_management_plugin.cc mariadb-10.1-10.1.30/plugin/aws_key_management/aws_key_management_plugin.cc --- mariadb-10.1-10.1.25/plugin/aws_key_management/aws_key_management_plugin.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/plugin/aws_key_management/aws_key_management_plugin.cc 2017-12-21 15:48:48.000000000 +0000 @@ -82,9 +82,20 @@ static int rotate_key; static int request_timeout; +#ifndef DBUG_OFF +#define WITH_AWS_MOCK 1 +#else +#define WITH_AWS_MOCK 0 +#endif + +#if WITH_AWS_MOCK +static char mock; +#endif + + /* AWS functionality*/ -static int aws_decrypt_key(const char *path, KEY_INFO *info); -static int aws_generate_datakey(uint key_id, uint version); +static int read_and_decrypt_key(const char *path, KEY_INFO *info); +static int generate_and_save_datakey(uint key_id, uint version); static int extract_id_and_version(const char *name, uint *id, uint *ver); static unsigned int get_latest_key_version(unsigned int key_id); @@ -95,6 +106,35 @@ static Aws::KMS::KMSClient *client; +#if WITH_AWS_MOCK +/* + Mock routines to test plugin without actual AWS KMS interaction + we only need to mock 2 functions - generating encrypted key, and decrypt + + This mock functions do no-op encryption, i.e encrypt and decrypt of + a buffer return the buffer itself. +*/ + +/* + Generate random "encrypted" key. We do not encrypt anything in mock mode. +*/ +static int mock_generate_encrypted_key(Aws::Utils::ByteBuffer *result) +{ + size_t len = key_spec == 0?16 : 32; + *result = Aws::Utils::ByteBuffer(len); + my_random_bytes(result->GetUnderlyingData(), (int)len); + return 0; +} + + +static int mock_decrypt(Aws::Utils::ByteBuffer input, Aws::Utils::ByteBuffer* output, Aws::String *errmsg) +{ + /* We do not encrypt or decrypt in mock mode.*/ + *output = input; + return 0; +} +#endif + /* Redirect AWS trace to error log */ class MySQLLogSystem : public Aws::Utils::Logging::FormattedLogSystem { @@ -163,13 +203,7 @@ Aws::SDKOptions sdkOptions; -/* - Plugin initialization. - - Create KMS client and scan datadir to find out which keys and versions - are present. -*/ -static int plugin_init(void *p) +static int aws_init() { #ifdef HAVE_YASSL @@ -198,7 +232,29 @@ my_printf_error(ER_UNKNOWN_ERROR, "Can not initialize KMS client", ME_ERROR_LOG | ME_WARNING); return -1; } - + return 0; +} + +static int init() +{ +#if WITH_AWS_MOCK + if(mock) + return 0; +#endif + return aws_init(); +} + +/* + Plugin initialization. + + Create KMS client and scan datadir to find out which keys and versions + are present. +*/ +static int plugin_init(void *p) +{ + if (init()) + return -1; + vector files= traverse_current_directory(); for (size_t i=0; i < files.size(); i++) { @@ -214,14 +270,29 @@ } -static int plugin_deinit(void *p) +static void aws_shutdown() { - latest_version_cache.clear(); - key_info_cache.clear(); delete client; ShutdownAWSLogging(); - Aws::ShutdownAPI(sdkOptions); +} + + +static void shutdown() +{ +#if WITH_AWS_MOCK + if(mock) + return; +#endif + aws_shutdown(); +} + + +static int plugin_deinit(void *p) +{ + latest_version_cache.clear(); + key_info_cache.clear(); + shutdown(); return 0; } @@ -251,7 +322,7 @@ char path[256]; format_keyfile_name(path, sizeof(path), info->key_id, info->key_version); - ret= aws_decrypt_key(path, info); + ret= read_and_decrypt_key(path, info); if (ret) info->load_failed= true; @@ -317,14 +388,7 @@ else // (ver == 0) { /* Generate a new key, version 1 */ - if (!master_key_id[0]) - { - my_printf_error(ER_UNKNOWN_ERROR, - "Can't generate encryption key %u, because 'aws_key_management_master_key_id' parameter is not set", - MYF(0), key_id); - return(ENCRYPTION_KEY_VERSION_INVALID); - } - if (aws_generate_datakey(key_id, 1) != 0) + if (generate_and_save_datakey(key_id, 1) != 0) return(ENCRYPTION_KEY_VERSION_INVALID); info.key_id= key_id; info.key_version= 1; @@ -336,11 +400,35 @@ return(info.key_version); } +/* Decrypt Byte buffer with AWS. */ +static int aws_decrypt(Aws::Utils::ByteBuffer input, Aws::Utils::ByteBuffer* output, Aws::String *errmsg) +{ + DecryptRequest request; + request.SetCiphertextBlob(input); + DecryptOutcome outcome = client->Decrypt(request); + if (!outcome.IsSuccess()) + { + *errmsg = outcome.GetError().GetMessage(); + return -1; + } + *output= outcome.GetResult().GetPlaintext(); + return 0; +} + + +static int decrypt(Aws::Utils::ByteBuffer input, Aws::Utils::ByteBuffer* output, Aws::String *errmsg) +{ +#if WITH_AWS_MOCK + if(mock) + return mock_decrypt(input,output, errmsg); +#endif + return aws_decrypt(input, output, errmsg); +} /* Decrypt a file with KMS */ -static int aws_decrypt_key(const char *path, KEY_INFO *info) +static int read_and_decrypt_key(const char *path, KEY_INFO *info) { /* Read file content into memory */ @@ -361,20 +449,21 @@ ifs.read(&contents[0], pos); /* Decrypt data the with AWS */ - DecryptRequest request; - Aws::Utils::ByteBuffer byteBuffer((unsigned char *)contents.data(), pos); - request.SetCiphertextBlob(byteBuffer); - DecryptOutcome outcome = client->Decrypt(request); - if (!outcome.IsSuccess()) + + Aws::Utils::ByteBuffer input((unsigned char *)contents.data(), pos); + Aws::Utils::ByteBuffer plaintext; + Aws::String errmsg; + + if (decrypt(input, &plaintext, &errmsg)) { - my_printf_error(ER_UNKNOWN_ERROR, "AWS KMS plugin: Decrypt failed for %s : %s", ME_ERROR_LOG, path, - outcome.GetError().GetMessage().c_str()); - return(-1); + my_printf_error(ER_UNKNOWN_ERROR, "AWS KMS plugin: Decrypt failed for %s : %s", ME_ERROR_LOG, path, + errmsg.c_str()); + return -1; } - Aws::Utils::ByteBuffer plaintext = outcome.GetResult().GetPlaintext(); + size_t len = plaintext.GetLength(); - if (len > (int)sizeof(info->data)) + if (len > sizeof(info->data)) { my_printf_error(ER_UNKNOWN_ERROR, "AWS KMS plugin: encoding key too large for %s", ME_ERROR_LOG, path); return(ENCRYPTION_KEY_BUFFER_TOO_SMALL); @@ -385,9 +474,15 @@ } -/* Generate a new datakey and store it a file */ -static int aws_generate_datakey(uint keyid, uint version) +int aws_generate_encrypted_key(Aws::Utils::ByteBuffer *result) { + if (!master_key_id[0]) + { + my_printf_error(ER_UNKNOWN_ERROR, + "Can't generate encryption key, because 'aws_key_management_master_key_id' parameter is not set", + MYF(0)); + return(-1); + } GenerateDataKeyWithoutPlaintextRequest request; request.SetKeyId(master_key_id); request.SetKeySpec(DataKeySpecMapper::GetDataKeySpecForName(key_spec_names[key_spec])); @@ -401,11 +496,30 @@ outcome.GetError().GetMessage().c_str()); return(-1); } + *result = outcome.GetResult().GetCiphertextBlob(); + return 0; +} + + +static int generate_encrypted_key(Aws::Utils::ByteBuffer *output) +{ +#if WITH_AWS_MOCK + if(mock) + return mock_generate_encrypted_key(output); +#endif + return aws_generate_encrypted_key(output); +} + +/* Generate a new datakey and store it a file */ +static int generate_and_save_datakey(uint keyid, uint version) +{ + Aws::Utils::ByteBuffer byteBuffer; + + if (generate_encrypted_key(&byteBuffer)) + return -1; string out; char filename[20]; - Aws::Utils::ByteBuffer byteBuffer = outcome.GetResult().GetCiphertextBlob(); - format_keyfile_name(filename, sizeof(filename), keyid, version); int fd= open(filename, O_WRONLY |O_CREAT|O_BINARY, IF_WIN(_S_IREAD, S_IRUSR| S_IRGRP| S_IROTH)); if (fd < 0) @@ -438,7 +552,7 @@ my_printf_error(ER_UNKNOWN_ERROR, "key %u does not exist", MYF(ME_JUST_WARNING), key_id); return -1; } - else if (aws_generate_datakey(key_id, ver + 1)) + else if (generate_and_save_datakey(key_id, ver + 1)) { my_printf_error(ER_UNKNOWN_ERROR, "Could not generate datakey for key id= %u, ver= %u", MYF(ME_JUST_WARNING), key_id, ver); @@ -594,6 +708,13 @@ "AWS region. For example us-east-1, or eu-central-1. If no value provided, SDK default is used.", NULL, NULL, ""); +#if WITH_AWS_MOCK +static MYSQL_SYSVAR_BOOL(mock, mock, + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, + "Mock AWS KMS calls (for testing).", + NULL, NULL, 0); +#endif + static struct st_mysql_sys_var* settings[]= { MYSQL_SYSVAR(master_key_id), MYSQL_SYSVAR(key_spec), @@ -601,6 +722,9 @@ MYSQL_SYSVAR(log_level), MYSQL_SYSVAR(request_timeout), MYSQL_SYSVAR(region), +#if WITH_AWS_MOCK + MYSQL_SYSVAR(mock), +#endif NULL }; diff -Nru mariadb-10.1-10.1.25/plugin/aws_key_management/CMakeLists.txt mariadb-10.1-10.1.30/plugin/aws_key_management/CMakeLists.txt --- mariadb-10.1-10.1.25/plugin/aws_key_management/CMakeLists.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/plugin/aws_key_management/CMakeLists.txt 2017-12-21 15:48:48.000000000 +0000 @@ -20,6 +20,7 @@ ENDIF() RETURN() ENDMACRO() +SET(CMAKE_CXX_STANDARD 11) MYSQL_ADD_PLUGIN(aws_key_management aws_key_management_plugin.cc DISABLED COMPONENT aws-key-management) diff -Nru mariadb-10.1-10.1.25/plugin/handler_socket/CMakeLists.txt mariadb-10.1-10.1.30/plugin/handler_socket/CMakeLists.txt --- mariadb-10.1-10.1.25/plugin/handler_socket/CMakeLists.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/plugin/handler_socket/CMakeLists.txt 2017-12-21 15:48:48.000000000 +0000 @@ -8,6 +8,12 @@ #Remove -fno-implicit-templates from compiler flags(handlersocket would not work with it) STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) +include(CheckCXXCompilerFlag) +check_cxx_compiler_flag(" -Wdeprecated-declarations" HAVE_CXX_WDEPRECATED_DECLARATIONS) +IF (HAVE_CXX_WDEPRECATED_DECLARATIONS) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") +ENDIF() + INCLUDE_DIRECTORIES(libhsclient) # Handlersocket client library. We do not distribute it, diff -Nru mariadb-10.1-10.1.25/plugin/metadata_lock_info/metadata_lock_info.cc mariadb-10.1-10.1.30/plugin/metadata_lock_info/metadata_lock_info.cc --- mariadb-10.1-10.1.25/plugin/metadata_lock_info/metadata_lock_info.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/plugin/metadata_lock_info/metadata_lock_info.cc 2017-12-21 15:48:48.000000000 +0000 @@ -44,12 +44,6 @@ { C_STRING_WITH_LEN("MDL_EXCLUSIVE") }, }; -static const LEX_STRING metadata_lock_info_duration[] = { - { C_STRING_WITH_LEN("MDL_STATEMENT") }, - { C_STRING_WITH_LEN("MDL_TRANSACTION") }, - { C_STRING_WITH_LEN("MDL_EXPLICIT") }, -}; - static ST_FIELD_INFO i_s_metadata_lock_info_fields_info[] = { {"THREAD_ID", 20, MYSQL_TYPE_LONGLONG, 0, @@ -128,8 +122,6 @@ == MDL_key::NAMESPACE_END); compile_time_assert(sizeof(metadata_lock_info_lock_mode)/sizeof(LEX_STRING) == MDL_TYPE_END); - compile_time_assert(sizeof(metadata_lock_info_duration)/sizeof(LEX_STRING) - == MDL_DURATION_END); ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *) p; DBUG_ENTER("i_s_metadata_lock_info_init"); diff -Nru mariadb-10.1-10.1.25/plugin/semisync/semisync_master.cc mariadb-10.1-10.1.30/plugin/semisync/semisync_master.cc --- mariadb-10.1-10.1.25/plugin/semisync/semisync_master.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/plugin/semisync/semisync_master.cc 2017-12-21 15:48:48.000000000 +0000 @@ -555,7 +555,7 @@ if (need_copy_send_pos) { - strcpy(reply_file_name_, log_file_name); + strmake_buf(reply_file_name_, log_file_name); reply_file_pos_ = log_file_pos; reply_file_name_inited_ = true; @@ -663,7 +663,7 @@ if (cmp <= 0) { /* This thd has a lower position, let's update the minimum info. */ - strcpy(wait_file_name_, trx_wait_binlog_name); + strmake_buf(wait_file_name_, trx_wait_binlog_name); wait_file_pos_ = trx_wait_binlog_pos; rpl_semi_sync_master_wait_pos_backtraverse++; @@ -674,7 +674,7 @@ } else { - strcpy(wait_file_name_, trx_wait_binlog_name); + strmake_buf(wait_file_name_, trx_wait_binlog_name); wait_file_pos_ = trx_wait_binlog_pos; wait_file_name_inited_ = true; diff -Nru mariadb-10.1-10.1.25/plugin/server_audit/server_audit.c mariadb-10.1-10.1.30/plugin/server_audit/server_audit.c --- mariadb-10.1-10.1.25/plugin/server_audit/server_audit.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/plugin/server_audit/server_audit.c 2017-12-21 15:48:48.000000000 +0000 @@ -15,7 +15,7 @@ #define PLUGIN_VERSION 0x104 -#define PLUGIN_STR_VERSION "1.4.1" +#define PLUGIN_STR_VERSION "1.4.3" #define _my_thread_var loc_thread_var @@ -1089,6 +1089,7 @@ const struct mysql_event_connection *event) { cn->query_id= 0; + cn->query_length= 0; cn->log_always= 0; cn->thread_id= event->thread_id; get_str_n(cn->db, &cn->db_length, sizeof(cn->db), @@ -1120,6 +1121,21 @@ } while(0) +#define ESC_MAP_SIZE 0x60 +static const char esc_map[ESC_MAP_SIZE]= +{ + 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, '\'', 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\\', 0, 0, 0 +}; + +static char escaped_char(char c) +{ + return ((unsigned char ) c) >= ESC_MAP_SIZE ? 0 : esc_map[(unsigned char) c]; +} static void setup_connection_initdb(struct connection_info *cn, @@ -1130,6 +1146,7 @@ cn->thread_id= event->general_thread_id; cn->query_id= 0; + cn->query_length= 0; cn->log_always= 0; get_str_n(cn->db, &cn->db_length, sizeof(cn->db), event->general_query, event->general_query_length); @@ -1145,7 +1162,7 @@ } else { - get_str_n(cn->user, &cn->user_length, sizeof(cn->db), + get_str_n(cn->user, &cn->user_length, sizeof(cn->user), uh_buffer, user_len); get_str_n(cn->host, &cn->host_length, sizeof(cn->host), uh_buffer+user_len+1, host_len); @@ -1162,6 +1179,7 @@ cn->thread_id= event->thread_id; cn->query_id= query_counter++; cn->log_always= 0; + cn->query_length= 0; get_str_n(cn->db, &cn->db_length, sizeof(cn->db), event->database, event->database_length); get_str_n(cn->user, &cn->user_length, sizeof(cn->db), @@ -1183,6 +1201,7 @@ cn->thread_id= event->general_thread_id; cn->query_id= query_counter++; cn->log_always= 0; + cn->query_length= 0; get_str_n(cn->db, &cn->db_length, sizeof(cn->db), "", 0); if (get_user_host(event->general_user, event->general_user_length, @@ -1196,7 +1215,7 @@ } else { - get_str_n(cn->user, &cn->user_length, sizeof(cn->db), + get_str_n(cn->user, &cn->user_length, sizeof(cn->user), uh_buffer, user_len); get_str_n(cn->host, &cn->host_length, sizeof(cn->host), uh_buffer+user_len+1, host_len); @@ -1323,21 +1342,16 @@ const char *res_end= result + result_len - 2; while (len) { + char esc_c; + if (result >= res_end) break; - if (*str == '\'') - { - if (result+1 >= res_end) - break; - *(result++)= '\\'; - *(result++)= '\''; - } - else if (*str == '\\') + if ((esc_c= escaped_char(*str))) { if (result+1 >= res_end) break; *(result++)= '\\'; - *(result++)= '\\'; + *(result++)= esc_c; } else if (is_space(*str)) *(result++)= ' '; @@ -1426,19 +1440,12 @@ no_password: if (result >= res_end) break; - if (*str == '\'') + if ((b_char= escaped_char(*str))) { if (result+1 >= res_end) break; *(result++)= '\\'; - *(result++)= '\''; - } - else if (*str == '\\') - { - if (result+1 >= res_end) - break; - *(result++)= '\\'; - *(result++)= '\\'; + *(result++)= b_char; } else if (is_space(*str)) *(result++)= ' '; @@ -1956,7 +1963,7 @@ /* That one is important as this function can be called with */ /* &lock_operations locked when the server logs an error reported */ /* by this plugin. */ - if (internal_stop_logging) + if (!thd || internal_stop_logging) return; flogger_mutex_lock(&lock_operations); @@ -2007,6 +2014,7 @@ event_query_command(event)) { log_statement(cn, event, "QUERY"); + cn->query_length= 0; /* So the log_current_query() won't log this again. */ } } else if (event_class == MYSQL_AUDIT_TABLE_CLASS && FILTER(EVENT_TABLE) && cn) @@ -2522,7 +2530,8 @@ if (!thd) return; cn= get_loc_info(thd); - if (!ci_needs_setup(cn) && FILTER(EVENT_QUERY) && do_log_user(cn->user)) + if (!ci_needs_setup(cn) && cn->query_length && + FILTER(EVENT_QUERY) && do_log_user(cn->user)) { log_statement_ex(cn, cn->query_time, thd_get_thread_id(thd), cn->query, cn->query_length, 0, "QUERY"); diff -Nru mariadb-10.1-10.1.25/plugin/wsrep_info/mysql-test/wsrep_info/my.cnf mariadb-10.1-10.1.30/plugin/wsrep_info/mysql-test/wsrep_info/my.cnf --- mariadb-10.1-10.1.25/plugin/wsrep_info/mysql-test/wsrep_info/my.cnf 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/plugin/wsrep_info/mysql-test/wsrep_info/my.cnf 2017-12-21 15:48:48.000000000 +0000 @@ -8,8 +8,6 @@ innodb-locks-unsafe-for-binlog=1 wsrep-cluster-address=gcomm:// wsrep_provider=@ENV.WSREP_PROVIDER -# enforce read-committed characteristics across the cluster -wsrep_causal_reads=ON [mysqld.1] #galera_port=@OPT.port diff -Nru mariadb-10.1-10.1.25/scripts/CMakeLists.txt mariadb-10.1-10.1.30/scripts/CMakeLists.txt --- mariadb-10.1-10.1.25/scripts/CMakeLists.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/CMakeLists.txt 2017-12-21 15:48:48.000000000 +0000 @@ -1,4 +1,5 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. +# Copyright (c) 2011, 2017, MariaDB Corporation # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -116,6 +117,13 @@ ENDFOREACH() ENDIF() + +IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + SET (PERL_PATH "/usr/local/bin/perl") +ELSE() + SET (PERL_PATH "/usr/bin/perl") +ENDIF() + IF(UNIX) # FIND_PROC and CHECK_PID are used by mysqld_safe IF(CMAKE_SYSTEM_NAME MATCHES "Linux") @@ -213,6 +221,11 @@ SET(localstatedir ${MYSQL_DATADIR}) ENDIF() +SET(resolveip_locations "$basedir/${INSTALL_BINDIR} $basedir/bin") +SET(mysqld_locations "$basedir/${INSTALL_SBINDIR} $basedir/libexec $basedir/sbin $basedir/bin") +SET(errmsg_locations "$basedir/${INSTALL_MYSQLSHAREDIR}/english $basedir/share/english $basedir/share/mysql/english") +SET(pkgdata_locations "$basedir/${INSTALL_MYSQLSHAREDIR} $basedir/share $basedir/share/mysql") + IF(UNIX) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_install_db.sh ${CMAKE_CURRENT_BINARY_DIR}/mysql_install_db ESCAPE_QUOTES @ONLY) @@ -291,12 +304,16 @@ IF(WITH_WSREP) SET(WSREP_SCRIPTS wsrep_sst_mysqldump - wsrep_sst_common wsrep_sst_rsync wsrep_sst_xtrabackup wsrep_sst_xtrabackup-v2 wsrep_sst_mariabackup ) + # The following script is sourced from other SST scripts, so it should + # not be made executable. + SET(WSREP_SOURCE + wsrep_sst_common + ) ENDIF() IF (NOT WITHOUT_SERVER) SET(SERVER_SCRIPTS @@ -336,6 +353,9 @@ MESSAGE(FATAL_ERROR "Can not find ${file}.sh or ${file} in " "${CMAKE_CURRENT_SOURCE_DIR}" ) ENDIF() + # TODO: The following EXECUTE could be redundant as INSTALL_SCRIPT + # macro does an INSTALL(PROGRAMS ..) that automatically sets +x on + # the executable. EXECUTE_PROCESS(COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/${file}) IF(NOT ${file}_COMPONENT) SET(${file}_COMPONENT Server) @@ -346,6 +366,20 @@ COMPONENT ${${file}_COMPONENT} ) ENDFOREACH() + + FOREACH(file ${WSREP_SOURCE}) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh + ${CMAKE_CURRENT_BINARY_DIR}/${file} ESCAPE_QUOTES @ONLY) + IF(NOT ${file}_COMPONENT) + SET(${file}_COMPONENT Server) + ENDIF() + INSTALL(FILES + ${CMAKE_CURRENT_BINARY_DIR}/${file} + DESTINATION ${INSTALL_BINDIR} + COMPONENT ${${file}_COMPONENT} + ) + ENDFOREACH() + ENDIF() # Install libgcc as mylibgcc.a @@ -363,4 +397,3 @@ COMPONENT Development) ENDIF() ENDIF() - diff -Nru mariadb-10.1-10.1.25/scripts/dheadgen.pl mariadb-10.1-10.1.30/scripts/dheadgen.pl --- mariadb-10.1-10.1.25/scripts/dheadgen.pl 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/dheadgen.pl 2017-12-21 15:48:48.000000000 +0000 @@ -1,10 +1,4 @@ -#!/usr/bin/perl -w - -# -# Copyright (c) 2008, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. -# - +# Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff -Nru mariadb-10.1-10.1.25/scripts/galera_recovery.sh mariadb-10.1-10.1.30/scripts/galera_recovery.sh --- mariadb-10.1-10.1.25/scripts/galera_recovery.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/galera_recovery.sh 2017-12-21 15:48:48.000000000 +0000 @@ -69,7 +69,7 @@ wsrep_recover_position() { # Redirect server's error log to the log file. eval /usr/sbin/mysqld $cmdline_args --user=$user --wsrep_recover \ - --log-error="$log_file" + --disable-log-error 2> "$log_file" ret=$? if [ $ret -ne 0 ]; then # Something went wrong, let us also print the error log so that it diff -Nru mariadb-10.1-10.1.25/scripts/mysqlaccess.sh mariadb-10.1-10.1.30/scripts/mysqlaccess.sh --- mariadb-10.1-10.1.25/scripts/mysqlaccess.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysqlaccess.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,6 @@ -#!/usr/bin/perl +#!@PERL_PATH@ -# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public @@ -477,16 +477,23 @@ # ***************************** # Read configuration-file MySQLaccess::Debug::Print(1, "Reading configuration file..."); - if (-f "./$script_conf") { - require "./$script_conf"; + if (-f "@sysconfdir@/$script_conf") { + print "Configuration file '$script_conf' is found in '@sysconfdir@/'\n"; + require "@sysconfdir@/$script_conf"; } elsif (-f "@prefix@/$script_conf") { + print "Configuration file '$script_conf' is found in '@prefix@/'\n"; require "@prefix@/$script_conf"; } - elsif (-f "@sysconfdir@/$script_conf") { - require "@sysconfdir@/$script_conf"; + elsif (-f "./$script_conf") { + print "\nERROR! Configuration file '$script_conf' is found in the current "; + print "directory.\nThe permissible locations for this file are either "; + print "@sysconfdir@/ or @prefix@/\n"; + print "Please move it to one of these locations and retry.\n\n"; + exit 0; } + # **************************** # Read in all parameters if ($MySQLaccess::CMD) { #command-line version diff -Nru mariadb-10.1-10.1.25/scripts/mysql_config.pl.in mariadb-10.1-10.1.30/scripts/mysql_config.pl.in --- mariadb-10.1-10.1.25/scripts/mysql_config.pl.in 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_config.pl.in 2017-12-21 15:48:48.000000000 +0000 @@ -1,7 +1,7 @@ -#!/usr/bin/perl +#!@PERL_PATH@ # -*- cperl -*- # -# Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/scripts/mysql_convert_table_format.sh mariadb-10.1-10.1.30/scripts/mysql_convert_table_format.sh --- mariadb-10.1-10.1.25/scripts/mysql_convert_table_format.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_convert_table_format.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,5 @@ -#!/usr/bin/perl -# Copyright (c) 2000-2002, 2006, 2007 MySQL AB, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. +#!@PERL_PATH@ +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/scripts/mysqld_multi.sh mariadb-10.1-10.1.30/scripts/mysqld_multi.sh --- mariadb-10.1-10.1.25/scripts/mysqld_multi.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysqld_multi.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,23 +1,7 @@ -#!/usr/bin/perl -# Copyright (c) 2000, 2010, Oracle and/or its affiliates. -# Copyright (c) 2000-2011 Monty Program Ab, Jani Tolonen -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; version 2 -# of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the Free -# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, -# MA 02110-1301, USA +#!@PERL_PATH@ -# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. +# Copyright (c) 2010, 2017, MariaDB Corporation # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public diff -Nru mariadb-10.1-10.1.25/scripts/mysqld_safe.sh mariadb-10.1-10.1.30/scripts/mysqld_safe.sh --- mariadb-10.1-10.1.25/scripts/mysqld_safe.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysqld_safe.sh 2017-12-21 15:48:48.000000000 +0000 @@ -246,7 +246,7 @@ local euid=$(id -u) local ret=0 - local wr_logfile=$(mktemp $DATADIR/wsrep_recovery.XXXXXX) + local wr_logfile=$(mktemp /tmp/wsrep_recovery.XXXXXX) # safety checks if [ -z $wr_logfile ]; then @@ -264,11 +264,11 @@ local wr_pidfile="$DATADIR/"`@HOSTNAME@`"-recover.pid" - local wr_options="--log_error='$wr_logfile' --pid-file='$wr_pidfile'" + local wr_options="--disable-log-error --pid-file='$wr_pidfile'" log_notice "WSREP: Running position recovery with $wr_options" - eval_log_error "$mysqld_cmd --wsrep_recover $wr_options" + eval "$mysqld_cmd --wsrep_recover $wr_options 2> $wr_logfile" local rp="$(grep 'WSREP: Recovered position:' $wr_logfile)" if [ -z "$rp" ]; then @@ -989,8 +989,8 @@ then : else - exec 1>&- - exec 2>&- + exec 1>/dev/null + exec 2>/dev/null fi # maximum number of wsrep restarts diff -Nru mariadb-10.1-10.1.25/scripts/mysqldumpslow.sh mariadb-10.1-10.1.30/scripts/mysqldumpslow.sh --- mariadb-10.1-10.1.25/scripts/mysqldumpslow.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysqldumpslow.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,7 +1,6 @@ -#!/usr/bin/perl +#!@PERL_PATH@ -# Copyright (c) 2000-2002, 2005-2008 MySQL AB, 2008, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public diff -Nru mariadb-10.1-10.1.25/scripts/mysql_find_rows.sh mariadb-10.1-10.1.30/scripts/mysql_find_rows.sh --- mariadb-10.1-10.1.25/scripts/mysql_find_rows.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_find_rows.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,5 @@ -#!/usr/bin/perl -# Copyright (c) 2000, 2004, 2006 MySQL AB, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. +#!@PERL_PATH@ +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/scripts/mysql_fix_extensions.sh mariadb-10.1-10.1.30/scripts/mysql_fix_extensions.sh --- mariadb-10.1-10.1.25/scripts/mysql_fix_extensions.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_fix_extensions.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,7 +1,6 @@ -#!/usr/bin/perl +#!@PERL_PATH@ -# Copyright (c) 2001 MySQL AB, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. +# Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public diff -Nru mariadb-10.1-10.1.25/scripts/mysqlhotcopy.sh mariadb-10.1-10.1.30/scripts/mysqlhotcopy.sh --- mariadb-10.1-10.1.25/scripts/mysqlhotcopy.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysqlhotcopy.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,6 @@ -#!/usr/bin/perl +#!@PERL_PATH@ -# Copyright (c) 2000, 2010, Oracle and/or its affiliates +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public diff -Nru mariadb-10.1-10.1.25/scripts/mysql_install_db.pl.in mariadb-10.1-10.1.30/scripts/mysql_install_db.pl.in --- mariadb-10.1-10.1.25/scripts/mysql_install_db.pl.in 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_install_db.pl.in 2017-12-21 15:48:48.000000000 +0000 @@ -1,7 +1,7 @@ -#!/usr/bin/perl +#!@PERL_PATH@ # -*- cperl -*- # -# Copyright (c) 2007, 2013, Oracle and/or its affiliates. +# Copyright (c) 2007, 2017, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/scripts/mysql_install_db.sh mariadb-10.1-10.1.30/scripts/mysql_install_db.sh --- mariadb-10.1-10.1.25/scripts/mysql_install_db.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_install_db.sh 2017-12-21 15:48:48.000000000 +0000 @@ -187,7 +187,7 @@ # Try to find a specific file within --basedir which can either be a binary # release or installed source directory and return the path. -find_in_basedir() +find_in_dirs() { case "$1" in --dir) @@ -199,13 +199,13 @@ for dir in "$@" do - if test -f "$basedir/$dir/$file" + if test -f "$dir/$file" then if test -n "$return_dir" then - echo "$basedir/$dir" + echo "$dir" else - echo "$basedir/$dir/$file" + echo "$dir/$file" fi break fi @@ -269,7 +269,7 @@ print_defaults="$builddir/extra/my_print_defaults" elif test -n "$basedir" then - print_defaults=`find_in_basedir my_print_defaults bin extra` + print_defaults=`find_in_dirs my_print_defaults $basedir/bin $basedir/extra` if test -z "$print_defaults" then cannot_find_file my_print_defaults $basedir/bin $basedir/extra @@ -295,44 +295,46 @@ then basedir="$builddir" bindir="$basedir/client" - extra_bindir="$basedir/extra" + resolveip="$basedir/extra/resolveip" mysqld="$basedir/sql/mysqld" langdir="$basedir/sql/share/english" srcpkgdatadir="$srcdir/scripts" buildpkgdatadir="$builddir/scripts" - scriptdir="$srcdir/scripts" elif test -n "$basedir" then - bindir="$basedir/bin" - extra_bindir="$bindir" - mysqld=`find_in_basedir mysqld libexec sbin bin` + bindir="$basedir/bin" # only used in the help text + resolveip=`find_in_dirs resolveip @resolveip_locations@` + if test -z "$resolveip" + then + cannot_find_file resolveip @resolveip_locations@ + exit 1 + fi + mysqld=`find_in_dirs mysqld @mysqld_locations@` if test -z "$mysqld" then - cannot_find_file mysqld $basedir/libexec $basedir/sbin $basedir/bin + cannot_find_file mysqld @mysqld_locations@ exit 1 fi - langdir=`find_in_basedir --dir errmsg.sys share/english share/mysql/english` + langdir=`find_in_dirs --dir errmsg.sys @errmsg_locations@` if test -z "$langdir" then - cannot_find_file errmsg.sys $basedir/share/english $basedir/share/mysql/english + cannot_find_file errmsg.sys @errmsg_locations@ exit 1 fi - srcpkgdatadir=`find_in_basedir --dir fill_help_tables.sql share share/mysql` + srcpkgdatadir=`find_in_dirs --dir fill_help_tables.sql @pkgdata_locations@` buildpkgdatadir=$srcpkgdatadir if test -z "$srcpkgdatadir" then - cannot_find_file fill_help_tables.sql $basedir/share $basedir/share/mysql + cannot_find_file fill_help_tables.sql @pkgdata_locations@ exit 1 fi - scriptdir="$basedir/scripts" else basedir="@prefix@" bindir="@bindir@" - extra_bindir="$bindir" + resolveip="$bindir/resolveip" mysqld="@libexecdir@/mysqld" srcpkgdatadir="@pkgdatadir@" buildpkgdatadir="@pkgdatadir@" - scriptdir="@scriptdir@" fi # Set up paths to SQL scripts required for bootstrap @@ -376,14 +378,14 @@ # Check if hostname is valid if test "$cross_bootstrap" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0 then - resolved=`"$extra_bindir/resolveip" $hostname 2>&1` + resolved=`"$resolveip" $hostname 2>&1` if test $? -ne 0 then - resolved=`"$extra_bindir/resolveip" localhost 2>&1` + resolved=`"$resolveip" localhost 2>&1` if test $? -ne 0 then echo "Neither host '$hostname' nor 'localhost' could be looked up with" - echo "'$extra_bindir/resolveip'" + echo "'$resolveip'" echo "Please configure the 'hostname' command to return a correct" echo "hostname." echo "If you want to solve this at a later stage, restart this script" @@ -391,7 +393,7 @@ link_to_help exit 1 fi - echo "WARNING: The host '$hostname' could not be looked up with resolveip." + echo "WARNING: The host '$hostname' could not be looked up with $resolveip." echo "This probably means that your libc libraries are not 100 % compatible" echo "with this binary MariaDB version. The MariaDB daemon, mysqld, should work" echo "normally with the exception that host name resolving will not work." @@ -479,7 +481,7 @@ echo "The problem could be conflicting information in an external" echo "my.cnf files. You can ignore these by doing:" echo - echo " shell> $scriptdir/scripts/mysql_install_db --defaults-file=~/.my.cnf" + echo " shell> $0 --defaults-file=~/.my.cnf" echo echo "You can also try to start the mysqld daemon with:" echo diff -Nru mariadb-10.1-10.1.25/scripts/mysql_secure_installation.pl.in mariadb-10.1-10.1.30/scripts/mysql_secure_installation.pl.in --- mariadb-10.1-10.1.25/scripts/mysql_secure_installation.pl.in 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_secure_installation.pl.in 2017-12-21 15:48:48.000000000 +0000 @@ -1,7 +1,7 @@ -#!/usr/bin/perl +#!@PERL_PATH@ # -*- cperl -*- # -# Copyright (c) 2007, 2012, Oracle and/or its affiliates. +# Copyright (c) 2007, 2017, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -388,6 +388,3 @@ HERE - - - diff -Nru mariadb-10.1-10.1.25/scripts/mysql_setpermission.sh mariadb-10.1-10.1.30/scripts/mysql_setpermission.sh --- mariadb-10.1-10.1.25/scripts/mysql_setpermission.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_setpermission.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,8 +1,7 @@ -#!/usr/bin/perl +#!@PERL_PATH@ ## Emacs, this is -*- perl -*- mode? :-) -# Copyright (c) 2000, 2007 MySQL AB, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public diff -Nru mariadb-10.1-10.1.25/scripts/mysql_system_tables_fix.sql mariadb-10.1-10.1.30/scripts/mysql_system_tables_fix.sql --- mariadb-10.1-10.1.25/scripts/mysql_system_tables_fix.sql 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_system_tables_fix.sql 2017-12-21 15:48:48.000000000 +0000 @@ -672,6 +672,15 @@ # Convering the host name to lower case for existing users UPDATE user SET host=LOWER( host ) WHERE LOWER( host ) <> host; +# fix bad data when upgrading from unfixed InnoDB (MDEV-13360) +set @str="delete from innodb_index_stats where length(table_name) > 64"; +set @str=if(@have_innodb <> 0, @str, "set @dummy = 0"); +prepare stmt from @str; +execute stmt; +set @str=replace(@str, "innodb_index_stats", "innodb_table_stats"); +prepare stmt from @str; +execute stmt; + # update timestamp fields in the innodb stat tables set @str="alter table mysql.innodb_index_stats modify last_update timestamp not null default current_timestamp on update current_timestamp"; set @str=if(@have_innodb <> 0, @str, "set @dummy = 0"); diff -Nru mariadb-10.1-10.1.25/scripts/mysql_zap.sh mariadb-10.1-10.1.30/scripts/mysql_zap.sh --- mariadb-10.1-10.1.25/scripts/mysql_zap.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/mysql_zap.sh 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,5 @@ -#!/usr/bin/perl -# Copyright (c) 2000-2002, 2004, 2006 MySQL AB, 2009 Sun Microsystems, Inc. -# Use is subject to license terms. +#!@PERL_PATH@ +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/scripts/wsrep_sst_common.sh mariadb-10.1-10.1.30/scripts/wsrep_sst_common.sh --- mariadb-10.1-10.1.25/scripts/wsrep_sst_common.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/wsrep_sst_common.sh 2017-12-21 15:48:48.000000000 +0000 @@ -32,6 +32,22 @@ case "$1" in '--address') readonly WSREP_SST_OPT_ADDR="$2" + # + # Break address string into host:port/path parts + # + if echo $WSREP_SST_OPT_ADDR | grep -qe '^\[.*\]' + then + # IPv6 notation + readonly WSREP_SST_OPT_HOST=${WSREP_SST_OPT_ADDR/\]*/\]} + readonly WSREP_SST_OPT_HOST_UNESCAPED=$(echo $WSREP_SST_OPT_HOST | \ + cut -d '[' -f 2 | cut -d ']' -f 1) + else + # "traditional" notation + readonly WSREP_SST_OPT_HOST=${WSREP_SST_OPT_ADDR%%[:/]*} + fi + readonly WSREP_SST_OPT_PORT=$(echo $WSREP_SST_OPT_ADDR | \ + cut -d ']' -f 2 | cut -s -d ':' -f 2 | cut -d '/' -f 1) + readonly WSREP_SST_OPT_PATH=${WSREP_SST_OPT_ADDR#*/} shift ;; '--bypass') @@ -181,6 +197,11 @@ wsrep_log "[ERROR] $*" } +wsrep_log_warning() +{ + wsrep_log "[WARNING] $*" +} + wsrep_log_info() { wsrep_log "[INFO] $*" @@ -214,3 +235,39 @@ return $ret } + +# +# user can specify xtrabackup specific settings that will be used during sst +# process like encryption, etc..... +# parse such configuration option. (group for xb settings is [sst] in my.cnf +# +# 1st param: group : name of the config file section, e.g. mysqld +# 2nd param: var : name of the variable in the section, e.g. server-id +# 3rd param: - : default value for the param +parse_cnf() +{ + local group=$1 + local var=$2 + local reval="" + + # print the default settings for given group using my_print_default. + # normalize the variable names specified in cnf file (user can use _ or - for example log-bin or log_bin) + # then grep for needed variable + # finally get the variable value (if variables has been specified multiple time use the last value only) + + # look in group+suffix + if [ -n $WSREP_SST_OPT_CONF_SUFFIX ]; then + reval=$($MY_PRINT_DEFAULTS "${group}${WSREP_SST_OPT_CONF_SUFFIX}" | awk -F= '{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}' | grep -- "--$var=" | cut -d= -f2- | tail -1) + fi + + # look in group + if [ -z $reval ]; then + reval=$($MY_PRINT_DEFAULTS $group | awk -F= '{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}' | grep -- "--$var=" | cut -d= -f2- | tail -1) + fi + + # use default if we haven't found a value + if [ -z $reval ]; then + [ -n $3 ] && reval=$3 + fi + echo $reval +} diff -Nru mariadb-10.1-10.1.25/scripts/wsrep_sst_mysqldump.sh mariadb-10.1-10.1.30/scripts/wsrep_sst_mysqldump.sh --- mariadb-10.1-10.1.25/scripts/wsrep_sst_mysqldump.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/wsrep_sst_mysqldump.sh 2017-12-21 15:48:48.000000000 +0000 @@ -30,6 +30,7 @@ { [ "$1" = "127.0.0.1" ] && return 0 [ "$1" = "localhost" ] && return 0 + [ "$1" = "[::1]" ] && return 0 [ "$1" = "$(hostname -s)" ] && return 0 [ "$1" = "$(hostname -f)" ] && return 0 [ "$1" = "$(hostname -d)" ] && return 0 @@ -116,8 +117,9 @@ $MYSQL_CLIENT $AUTH -S$WSREP_SST_OPT_SOCKET --disable-reconnect --connect_timeout=10 |\ tail -1 | awk -F ' ' '{ print $2 }') -MYSQL="$MYSQL_CLIENT $AUTH -h$WSREP_SST_OPT_HOST -P$WSREP_SST_OPT_PORT "\ -"--disable-reconnect --connect_timeout=10" +MYSQL="$MYSQL_CLIENT $WSREP_SST_OPT_CONF "\ +"$AUTH -h${WSREP_SST_OPT_HOST_UNESCAPED:-$WSREP_SST_OPT_HOST} "\ +"-P$WSREP_SST_OPT_PORT --disable-reconnect --connect_timeout=10" # Check if binary logging is enabled on the joiner node. # Note: SELECT cannot be used at this point. diff -Nru mariadb-10.1-10.1.25/scripts/wsrep_sst_rsync.sh mariadb-10.1-10.1.30/scripts/wsrep_sst_rsync.sh --- mariadb-10.1-10.1.25/scripts/wsrep_sst_rsync.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/wsrep_sst_rsync.sh 2017-12-21 15:48:48.000000000 +0000 @@ -67,6 +67,11 @@ exit 2 # ENOENT fi + if ! which lsof > /dev/null; then + wsrep_log_error "lsof tool not found in PATH! Make sure you have it installed." + exit 2 # ENOENT + fi + local port_info=$(lsof -i :$rsync_port -Pn 2>/dev/null | \ grep "(LISTEN)") local is_rsync=$(echo $port_info | \ @@ -97,9 +102,19 @@ WSREP_LOG_DIR=${WSREP_LOG_DIR:-""} # if WSREP_LOG_DIR env. variable is not set, try to get it from my.cnf if [ -z "$WSREP_LOG_DIR" ]; then - WSREP_LOG_DIR=$($MY_PRINT_DEFAULTS --mysqld \ - | grep -- '--innodb[-_]log[-_]group[-_]home[-_]dir=' \ - | cut -b 29- ) + WSREP_LOG_DIR=$(parse_cnf mariadb-10.0 innodb_log_group_home_dir "") +fi +if [ -z "$WSREP_LOG_DIR" ]; then + WSREP_LOG_DIR=$(parse_cnf mysqld innodb_log_group_home_dir "") +fi +if [ -z "$WSREP_LOG_DIR" ]; then + WSREP_LOG_DIR=$(parse_cnf server innodb_log_group_home_dir "") +fi +if [ -z "$WSREP_LOG_DIR" ]; then + WSREP_LOG_DIR=$(parse_cnf mariadb innodb_log_group_home_dir "") +fi +if [ -z "$WSREP_LOG_DIR" ]; then + WSREP_LOG_DIR=$(parse_cnf mysqld-10.0 innodb_log_group_home_dir "") fi if [ -n "$WSREP_LOG_DIR" ]; then @@ -222,8 +237,8 @@ [ "$OS" == "Linux" ] && count=$(grep -c processor /proc/cpuinfo) [ "$OS" == "Darwin" -o "$OS" == "FreeBSD" ] && count=$(sysctl -n hw.ncpu) - find . -maxdepth 1 -mindepth 1 -type d -not -name "lost+found" -print0 | \ - xargs -I{} -0 -P $count \ + find . -maxdepth 1 -mindepth 1 -type d -not -name "lost+found" \ + -print0 | xargs -I{} -0 -P $count \ rsync --owner --group --perms --links --specials \ --ignore-times --inplace --recursive --delete --quiet \ $WHOLE_FILE_OPT --exclude '*/ib_logfile*' "$WSREP_SST_OPT_DATA"/{}/ \ @@ -284,9 +299,9 @@ RSYNC_CONF="$WSREP_SST_OPT_DATA/$MODULE.conf" if [ -n "${MYSQL_TMP_DIR:-}" ] ; then - SILENT="log file = $MYSQL_TMP_DIR/rsynd.log" + SILENT="log file = $MYSQL_TMP_DIR/rsyncd.log" else - SILENT="" + SILENT="" fi cat << EOF > "$RSYNC_CONF" @@ -304,6 +319,7 @@ # rm -rf "$DATA"/ib_logfile* # we don't want old logs around # listen at all interfaces (for firewalled setups) + readonly RSYNC_PORT=${WSREP_SST_OPT_PORT:-4444} rsync --daemon --no-detach --port $RSYNC_PORT --config "$RSYNC_CONF" & RSYNC_REAL_PID=$! @@ -312,7 +328,7 @@ sleep 0.2 done - echo "ready $ADDR/$MODULE" + echo "ready $WSREP_SST_OPT_HOST:$RSYNC_PORT/$MODULE" # wait for SST to complete by monitoring magic file while [ ! -r "$MAGIC_FILE" ] && check_pid "$RSYNC_PID" && \ diff -Nru mariadb-10.1-10.1.25/scripts/wsrep_sst_xtrabackup-v2.sh mariadb-10.1-10.1.30/scripts/wsrep_sst_xtrabackup-v2.sh --- mariadb-10.1-10.1.25/scripts/wsrep_sst_xtrabackup-v2.sh 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/scripts/wsrep_sst_xtrabackup-v2.sh 2017-12-21 15:48:48.000000000 +0000 @@ -35,8 +35,8 @@ SST_PORT="" REMOTEIP="" REMOTEHOST="" +tca="" tcert="" -tpem="" tkey="" sockopt="" progress="" @@ -48,7 +48,6 @@ # Initially stagemsg="${WSREP_SST_OPT_ROLE}" cpat="" -speciald=1 ib_home_dir="" ib_log_dir="" ib_undo_dir="" @@ -72,6 +71,11 @@ scomp="" sdecomp="" +ssl_dhparams="" + +ssl_cert="" +ssl_ca="" +ssl_key="" # Required for backup locks # For backup locks it is 1 sent by joiner @@ -151,6 +155,10 @@ if [[ -z $ekey ]];then ecmd="xbcrypt --encrypt-algo=$ealgo --encrypt-key-file=$ekeyfile" else + wsrep_log_warning "Using the 'encrypt-key' option causes the encryption key" + wsrep_log_warning "to be set via the command-line and is considered insecure." + wsrep_log_warning "It is recommended to use the 'encrypt-key-file' option instead." + ecmd="xbcrypt --encrypt-algo=$ealgo --encrypt-key=$ekey" fi @@ -161,6 +169,86 @@ stagemsg+="-XB-Encrypted" } +# +# If the ssl_dhparams variable is already set, uses that as a source +# of dh parameters for OpenSSL. Otherwise, looks for dhparams.pem in the +# datadir, and creates it there if it can't find the file. +# No input parameters +# +check_for_dhparams() +{ + if [[ -z "$ssl_dhparams" ]]; then + if ! [[ -r "$DATA/dhparams.pem" ]]; then + wsrep_check_programs openssl + wsrep_log_info "Could not find dhparams file, creating $DATA/dhparams.pem" + + if ! openssl dhparam -out "$DATA/dhparams.pem" 2048 >/dev/null 2>&1 + then + wsrep_log_error "******** FATAL ERROR ********************************* " + wsrep_log_error "* Could not create the dhparams.pem file with OpenSSL. " + wsrep_log_error "****************************************************** " + exit 22 + fi + fi + ssl_dhparams="$DATA/dhparams.pem" + fi +} + +# +# verifies that the certificate matches the private key +# doing this will save us having to wait for a timeout that would +# otherwise occur. +# +# 1st param: path to the cert +# 2nd param: path to the private key +# +verify_cert_matches_key() +{ + local cert_path=$1 + local key_path=$2 + + wsrep_check_programs openssl diff + + # generate the public key from the cert and the key + # they should match (otherwise we can't create an SSL connection) + if ! diff <(openssl x509 -in "$cert_path" -pubkey -noout) <(openssl rsa -in "$key_path" -pubout 2>/dev/null) >/dev/null 2>&1 + then + wsrep_log_error "******** FATAL ERROR ************************* " + wsrep_log_error "* The certifcate and private key do not match. " + wsrep_log_error "* Please check your certificate and key files. " + wsrep_log_error "********************************************** " + exit 22 + fi +} + +# Checks to see if the file exists +# If the file does not exist (or cannot be read), issues an error +# and exits +# +# 1st param: file name to be checked (for read access) +# 2nd param: 1st error message (header) +# 3rd param: 2nd error message (footer, optional) +# +verify_file_exists() +{ + local file_path=$1 + local error_message1=$2 + local error_message2=$3 + + if ! [[ -r "$file_path" ]]; then + wsrep_log_error "******** FATAL ERROR ************************* " + wsrep_log_error "* $error_message1 " + wsrep_log_error "* Could not find/access : $file_path " + + if ! [[ -z "$error_message2" ]]; then + wsrep_log_error "* $error_message2 " + fi + + wsrep_log_error "********************************************** " + exit 22 + fi +} + get_transfer() { if [[ -z $SST_PORT ]];then @@ -174,15 +262,25 @@ wsrep_log_error "nc(netcat) not found in path: $PATH" exit 2 fi + + if [[ $encrypt -eq 2 || $encrypt -eq 3 || $encrypt -eq 4 ]]; then + wsrep_log_error "******** FATAL ERROR *********************** " + wsrep_log_error "* Using SSL encryption (encrypt= 2, 3, or 4) " + wsrep_log_error "* is not supported when using nc(netcat). " + wsrep_log_error "******************************************** " + exit 22 + fi + wsrep_log_info "Using netcat as streamer" if [[ "$WSREP_SST_OPT_ROLE" == "joiner" ]];then - if nc -h 2>&1 | grep -q ncat;then - tcmd="nc -l ${TSST_PORT}" + if nc -h 2>&1 | grep -q ncat; then + tcmd="nc $sockopt -l ${TSST_PORT}" else - tcmd="nc -dl ${TSST_PORT}" + tcmd="nc $sockopt -dl ${TSST_PORT}" fi else - tcmd="nc ${REMOTEIP} ${TSST_PORT}" + # netcat doesn't understand [] around IPv6 address + tcmd="nc ${REMOTEIP//[\[\]]/} ${TSST_PORT}" fi else tfmt='socat' @@ -192,74 +290,111 @@ exit 2 fi - if [[ $encrypt -eq 2 || $encrypt -eq 3 ]] && ! socat -V | grep -q "WITH_OPENSSL 1";then - wsrep_log_error "Encryption requested, but socat is not OpenSSL enabled (encrypt=$encrypt)" - exit 2 - fi + donor_extra="" + joiner_extra="" + if [[ $encrypt -eq 2 || $encrypt -eq 3 || $encrypt -eq 4 ]]; then + if ! socat -V | grep -q WITH_OPENSSL; then + wsrep_log_error "******** FATAL ERROR ****************** " + wsrep_log_error "* socat is not openssl enabled. " + wsrep_log_error "* Unable to encrypt SST communications. " + wsrep_log_error "*************************************** " + exit 2 + fi - if [[ $encrypt -eq 2 ]];then - wsrep_log_info "Using openssl based encryption with socat: with crt and pem" - if [[ -z $tpem || -z $tcert ]];then - wsrep_log_error "Both PEM and CRT files required" - exit 22 + # Determine the socat version + SOCAT_VERSION=`socat -V 2>&1 | grep -oe '[0-9]\.[0-9][\.0-9]*' | head -n1` + if [[ -z "$SOCAT_VERSION" ]]; then + wsrep_log_error "******** FATAL ERROR **************** " + wsrep_log_error "* Cannot determine the socat version. " + wsrep_log_error "************************************* " + exit 2 fi + + # socat versions < 1.7.3 will have 512-bit dhparams (too small) + # so create 2048-bit dhparams and send that as a parameter + # socat version >= 1.7.3, checks to see if the peername matches the hostname + # set commonname="" to disable the peername checks + # + if ! check_for_version "$SOCAT_VERSION" "1.7.3"; then + if [[ "$WSREP_SST_OPT_ROLE" == "joiner" ]]; then + # dhparams check (will create ssl_dhparams if needed) + check_for_dhparams + joiner_extra=",dhparam=$ssl_dhparams" + fi + fi + if check_for_version "$SOCAT_VERSION" "1.7.3"; then + donor_extra=',commonname=""' + fi + fi + + if [[ $encrypt -eq 2 ]]; then + wsrep_log_warning "**** WARNING **** encrypt=2 is deprecated and will be removed in a future release" + wsrep_log_info "Using openssl based encryption with socat: with crt and ca" + + verify_file_exists "$tcert" "Both certificate and CA files are required." \ + "Please check the 'tcert' option. " + verify_file_exists "$tca" "Both certificate and CA files are required." \ + "Please check the 'tca' option. " + stagemsg+="-OpenSSL-Encrypted-2" if [[ "$WSREP_SST_OPT_ROLE" == "joiner" ]];then - wsrep_log_info "Decrypting with cert=${tpem}, cafile=${tcert}" - tcmd="socat -u openssl-listen:${TSST_PORT},reuseaddr,cert=${tpem},cafile=${tcert}${sockopt} stdio" + wsrep_log_info "Decrypting with CERT: $tcert, CA: $tca" + tcmd="socat -u openssl-listen:${TSST_PORT},reuseaddr,cert=${tcert},cafile=${tca}${joiner_extra}${sockopt} stdio" else - wsrep_log_info "Encrypting with cert=${tpem}, cafile=${tcert}" - tcmd="socat -u stdio openssl-connect:${REMOTEHOST}:${TSST_PORT},cert=${tpem},cafile=${tcert}${sockopt}" + wsrep_log_info "Encrypting with CERT: $tcert, CA: $tca" + tcmd="socat -u stdio openssl-connect:${REMOTEIP}:${TSST_PORT},cert=${tcert},cafile=${tca}${donor_extra}${sockopt}" fi elif [[ $encrypt -eq 3 ]];then + wsrep_log_warning "**** WARNING **** encrypt=3 is deprecated and will be removed in a future release" wsrep_log_info "Using openssl based encryption with socat: with key and crt" - if [[ -z $tpem || -z $tkey ]];then - wsrep_log_error "Both certificate and key files required" - exit 22 - fi + + verify_file_exists "$tcert" "Both certificate and key files are required." \ + "Please check the 'tcert' option. " + verify_file_exists "$tkey" "Both certificate and key files are required." \ + "Please check the 'tkey' option. " + stagemsg+="-OpenSSL-Encrypted-3" if [[ "$WSREP_SST_OPT_ROLE" == "joiner" ]];then - if [[ -z $tcert ]];then - wsrep_log_info "Decrypting with cert=${tpem}, key=${tkey}, verify=0" - tcmd="socat -u openssl-listen:${TSST_PORT},reuseaddr,cert=${tpem},key=${tkey},verify=0${sockopt} stdio" - else - wsrep_log_info "Decrypting with cert=${tpem}, key=${tkey}, cafile=${tcert}" - tcmd="socat -u openssl-listen:${TSST_PORT},reuseaddr,cert=${tpem},key=${tkey},cafile=${tcert}${sockopt} stdio" - fi + wsrep_log_info "Decrypting with CERT: $tcert, KEY: $tkey" + tcmd="socat -u openssl-listen:${TSST_PORT},reuseaddr,cert=${tcert},key=${tkey},verify=0${joiner_extra}${sockopt} stdio" else - if [[ -z $tcert ]];then - wsrep_log_info "Encrypting with cert=${tpem}, key=${tkey}, verify=0" - tcmd="socat -u stdio openssl-connect:${REMOTEIP}:${TSST_PORT},cert=${tpem},key=${tkey},verify=0${sockopt}" - else - wsrep_log_info "Encrypting with cert=${tpem}, key=${tkey}, cafile=${tcert}" - tcmd="socat -u stdio openssl-connect:${REMOTEHOST}:${TSST_PORT},cert=${tpem},key=${tkey},cafile=${tcert}${sockopt}" - fi + wsrep_log_info "Encrypting with CERT: $tcert, KEY: $tkey" + tcmd="socat -u stdio openssl-connect:${REMOTEIP}:${TSST_PORT},cert=${tcert},key=${tkey},verify=0${sockopt}" fi + elif [[ $encrypt -eq 4 ]]; then + wsrep_log_info "Using openssl based encryption with socat: with key, crt, and ca" - else - if [[ "$WSREP_SST_OPT_ROLE" == "joiner" ]];then + verify_file_exists "$ssl_ca" "CA, certificate, and key files are required." \ + "Please check the 'ssl-ca' option. " + verify_file_exists "$ssl_cert" "CA, certificate, and key files are required." \ + "Please check the 'ssl-cert' option. " + verify_file_exists "$ssl_key" "CA, certificate, and key files are required." \ + "Please check the 'ssl-key' option. " + + # Check to see that the key matches the cert + verify_cert_matches_key $ssl_cert $ssl_key + + stagemsg+="-OpenSSL-Encrypted-4" + if [[ "$WSREP_SST_OPT_ROLE" == "joiner" ]]; then + wsrep_log_info "Decrypting with CERT: $ssl_cert, KEY: $ssl_key, CA: $ssl_ca" + tcmd="socat -u openssl-listen:${TSST_PORT},reuseaddr,cert=${ssl_cert},key=${ssl_key},cafile=${ssl_ca},verify=1${joiner_extra}${sockopt} stdio" + else + wsrep_log_info "Encrypting with CERT: $ssl_cert, KEY: $ssl_key, CA: $ssl_ca" + tcmd="socat -u stdio openssl-connect:${REMOTEIP}:${TSST_PORT},cert=${ssl_cert},key=${ssl_key},cafile=${ssl_ca},verify=1${donor_extra}${sockopt}" + fi + + else + if [[ $encrypt -eq 1 ]]; then + wsrep_log_warning "**** WARNING **** encrypt=1 is deprecated and will be removed in a future release" + fi + + if [[ "$WSREP_SST_OPT_ROLE" == "joiner" ]]; then tcmd="socat -u TCP-LISTEN:${TSST_PORT},reuseaddr${sockopt} stdio" else tcmd="socat -u stdio TCP:${REMOTEIP}:${TSST_PORT}${sockopt}" fi fi fi - -} - -parse_cnf() -{ - local group=$1 - local var=$2 - # print the default settings for given group using my_print_default. - # normalize the variable names specified in cnf file (user can use _ or - for example log-bin or log_bin) - # then grep for needed variable - # finally get the variable value (if variables has been specified multiple time use the last value only) - reval=$($MY_PRINT_DEFAULTS $group | awk -F= '{if ($1 ~ /_/) { gsub(/_/,"-",$1); print $1"="$2 } else { print $0 }}' | grep -- "--$var=" | cut -d= -f2- | tail -1) - if [[ -z $reval ]];then - [[ -n $3 ]] && reval=$3 - fi - echo $reval } get_footprint() @@ -309,15 +444,15 @@ { sfmt=$(parse_cnf sst streamfmt "xbstream") tfmt=$(parse_cnf sst transferfmt "socat") - tcert=$(parse_cnf sst tca "") - tpem=$(parse_cnf sst tcert "") + tca=$(parse_cnf sst tca "") + tcert=$(parse_cnf sst tcert "") tkey=$(parse_cnf sst tkey "") encrypt=$(parse_cnf sst encrypt 0) sockopt=$(parse_cnf sst sockopt "") progress=$(parse_cnf sst progress "") rebuild=$(parse_cnf sst rebuild 0) ttime=$(parse_cnf sst time 0) - cpat=$(parse_cnf sst cpat '.*galera\.cache$\|.*sst_in_progress$\|.*\.sst$\|.*gvwstate\.dat$\|.*grastate\.dat$\|.*\.err$\|.*\.log$\|.*RPM_UPGRADE_MARKER$\|.*RPM_UPGRADE_HISTORY$') + cpat=$(parse_cnf sst cpat '.*\.pem$\|.*init\.ok$\|.*galera\.cache$\|.*sst_in_progress$\|.*\.sst$\|.*gvwstate\.dat$\|.*grastate\.dat$\|.*\.err$\|.*\.log$\|.*RPM_UPGRADE_MARKER$\|.*RPM_UPGRADE_HISTORY$') ealgo=$(parse_cnf xtrabackup encrypt "") ekey=$(parse_cnf xtrabackup encrypt-key "") ekeyfile=$(parse_cnf xtrabackup encrypt-key-file "") @@ -331,9 +466,23 @@ ekey=$(parse_cnf sst encrypt-key "") ekeyfile=$(parse_cnf sst encrypt-key-file "") fi + + # Pull the parameters needed for encrypt=4 + ssl_ca=$(parse_cnf sst ssl-ca "") + if [[ -z "$ssl_ca" ]]; then + ssl_ca=$(parse_cnf mysqld ssl-ca "") + fi + ssl_cert=$(parse_cnf sst ssl-cert "") + if [[ -z "$ssl_cert" ]]; then + ssl_cert=$(parse_cnf mysqld ssl-cert "") + fi + ssl_key=$(parse_cnf sst ssl-key "") + if [[ -z "$ssl_key" ]]; then + ssl_key=$(parse_cnf mysqld ssl-key "") + fi + rlimit=$(parse_cnf sst rlimit "") uextra=$(parse_cnf sst use-extra 0) - speciald=$(parse_cnf sst sst-special-dirs 1) iopts=$(parse_cnf sst inno-backup-opts "") iapts=$(parse_cnf sst inno-apply-opts "") impts=$(parse_cnf sst inno-move-opts "") @@ -342,13 +491,8 @@ ssystag=$(parse_cnf mysqld_safe syslog-tag "${SST_SYSLOG_TAG:-}") ssystag+="-" - if [[ $speciald -eq 0 ]];then - wsrep_log_error "sst-special-dirs equal to 0 is not supported, falling back to 1" - speciald=1 - fi - if [[ $ssyslog -ne -1 ]];then - if $MY_PRINT_DEFAULTS mysqld_safe | tr '_' '-' | grep -q -- "--syslog";then + if $MY_PRINT_DEFAULTS mysqld_safe | tr '_' '-' | grep -q -- "--syslog";then ssyslog=1 fi fi @@ -494,32 +638,30 @@ setup_ports() { if [[ "$WSREP_SST_OPT_ROLE" == "donor" ]];then - SST_PORT=$(echo $WSREP_SST_OPT_ADDR | awk -F '[:/]' '{ print $2 }') - REMOTEIP=$(echo $WSREP_SST_OPT_ADDR | awk -F ':' '{ print $1 }') - REMOTEHOST=$(getent hosts $REMOTEIP | awk '{ print $2 }') - if [[ -z $REMOTEHOST ]];then - REMOTEHOST=$REMOTEIP - fi - lsn=$(echo $WSREP_SST_OPT_ADDR | awk -F '[:/]' '{ print $4 }') - sst_ver=$(echo $WSREP_SST_OPT_ADDR | awk -F '[:/]' '{ print $5 }') + SST_PORT=$WSREP_SST_OPT_PORT + REMOTEIP=$WSREP_SST_OPT_HOST + lsn=$(echo $WSREP_SST_OPT_PATH | awk -F '[/]' '{ print $2 }') + sst_ver=$(echo $WSREP_SST_OPT_PATH | awk -F '[/]' '{ print $3 }') else - SST_PORT=$(echo ${WSREP_SST_OPT_ADDR} | awk -F ':' '{ print $2 }') + SST_PORT=$WSREP_SST_OPT_PORT fi } -# waits ~10 seconds for nc to open the port and then reports ready +# waits ~1 minute for nc/socat to open the port and then reports ready # (regardless of timeout) wait_for_listen() { - local PORT=$1 - local ADDR=$2 + local HOST=$1 + local PORT=$2 local MODULE=$3 - for i in {1..50} + + for i in {1..300} do ss -p state listening "( sport = :$PORT )" | grep -qE 'socat|nc' && break sleep 0.2 done - echo "ready ${ADDR}/${MODULE}//$sst_ver" + + echo "ready ${HOST}:${PORT}/${MODULE}//$sst_ver" } check_extra() @@ -527,7 +669,7 @@ local use_socket=1 if [[ $uextra -eq 1 ]];then if $MY_PRINT_DEFAULTS --mysqld | tr '_' '-' | grep -- "--thread-handling=" | grep -q 'pool-of-threads';then - local eport=$($MY_PRINT_DEFAULTS --mysqld | tr '_' '-' | grep -- "--extra-port=" | cut -d= -f2) + local eport=$($MY_PRINT_DEFAULTS mysqld | tr '_' '-' | grep -- "--extra-port=" | cut -d= -f2) if [[ -n $eport ]];then # Xtrabackup works only locally. # Hence, setting host to 127.0.0.1 unconditionally. @@ -622,11 +764,64 @@ } +# Returns the version string in a standardized format +# Input "1.2.3" => echoes "010203" +# Wrongly formatted values => echoes "000000" +normalize_version() +{ + local major=0 + local minor=0 + local patch=0 + + # Only parses purely numeric version numbers, 1.2.3 + # Everything after the first three values are ignored + if [[ $1 =~ ^([0-9]+)\.([0-9]+)\.?([0-9]*)([\.0-9])*$ ]]; then + major=${BASH_REMATCH[1]} + minor=${BASH_REMATCH[2]} + patch=${BASH_REMATCH[3]} + fi + + printf %02d%02d%02d $major $minor $patch +} + +# Compares two version strings +# The first parameter is the version to be checked +# The second parameter is the minimum version required +# Returns 1 (failure) if $1 >= $2, 0 (success) otherwise +check_for_version() +{ + local local_version_str="$( normalize_version $1 )" + local required_version_str="$( normalize_version $2 )" + + if [[ "$local_version_str" < "$required_version_str" ]]; then + return 1 + else + return 0 + fi +} + + if [[ ! -x `which $INNOBACKUPEX_BIN` ]];then wsrep_log_error "innobackupex not in path: $PATH" exit 2 fi +# check the version, we require XB-2.4 to ensure that we can pass the +# datadir via the command-line option +XB_REQUIRED_VERSION="2.3.5" + +XB_VERSION=`$INNOBACKUPEX_BIN --version 2>&1 | grep -oe '[0-9]\.[0-9][\.0-9]*' | head -n1` +if [[ -z $XB_VERSION ]]; then + wsrep_log_error "FATAL: Cannot determine the $INNOBACKUPEX_BIN version. Needs xtrabackup-$XB_REQUIRED_VERSION or higher to perform SST" + exit 2 +fi + +if ! check_for_version $XB_VERSION $XB_REQUIRED_VERSION; then + wsrep_log_error "FATAL: The $INNOBACKUPEX_BIN version is $XB_VERSION. Needs xtrabackup-$XB_REQUIRED_VERSION or higher to perform SST" + exit 2 +fi + + rm -f "${MAGIC_FILE}" if [[ ! ${WSREP_SST_OPT_ROLE} == 'joiner' && ! ${WSREP_SST_OPT_ROLE} == 'donor' ]];then @@ -670,14 +865,14 @@ } INNOAPPLY="${INNOBACKUPEX_BIN} $disver $iapts --apply-log \$rebuildcmd \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-apply " - INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} $disver $impts --move-back --force-non-empty-directories \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move " - INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)" + INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_DEFAULT} $disver $impts --datadir=${DATA} --move-back --force-non-empty-directories \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move " + INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_DEFAULT} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)" fi else INNOAPPLY="${INNOBACKUPEX_BIN} $disver $iapts --apply-log \$rebuildcmd \${DATA} &>\${DATA}/innobackup.prepare.log" - INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} $disver $impts --move-back --force-non-empty-directories \${DATA} &>\${DATA}/innobackup.move.log" - INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2>\${DATA}/innobackup.backup.log" + INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_DEFAULT} --defaults-group=mysqld${WSREP_SST_OPT_CONF_SUFFIX} $disver $impts --datadir=${DATA} --move-back --force-non-empty-directories \${DATA} &>\${DATA}/innobackup.move.log" + INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_DEFAULT} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2>\${DATA}/innobackup.backup.log" fi get_stream @@ -718,15 +913,6 @@ fi get_keys - if [[ $encrypt -eq 1 ]];then - if [[ -n $ekey ]];then - INNOEXTRA+=" --encrypt=$ealgo --encrypt-key=$ekey " - else - INNOEXTRA+=" --encrypt=$ealgo --encrypt-key-file=$ekeyfile " - fi - fi - - check_extra wsrep_log_info "Streaming GTID file before SST" @@ -739,17 +925,17 @@ if [[ $encrypt -eq 1 ]];then if [[ -n $scomp ]];then - tcmd=" $ecmd | $scomp | $tcmd " + tcmd=" \$ecmd | $scomp | $tcmd " else - tcmd=" $ecmd | $tcmd " + tcmd=" \$ecmd | $tcmd " fi elif [[ -n $scomp ]];then tcmd=" $scomp | $tcmd " fi - send_donor $DATA "${stagemsg}-gtid" + # Restore the transport commmand to its original state tcmd="$ttcmd" if [[ -n $progress ]];then get_footprint @@ -764,10 +950,16 @@ wsrep_log_info "Streaming the backup to joiner at ${REMOTEIP} ${SST_PORT:-4444}" - if [[ -n $scomp ]];then + # Add compression to the head of the stream (if specified) + if [[ -n $scomp ]]; then tcmd="$scomp | $tcmd" fi + # Add encryption to the head of the stream (if specified) + if [[ $encrypt -eq 1 ]]; then + tcmd=" \$ecmd | $tcmd " + fi + set +e timeit "${stagemsg}-SST" "$INNOBACKUP | $tcmd; RC=( "\${PIPESTATUS[@]}" )" set -e @@ -797,9 +989,9 @@ get_keys if [[ $encrypt -eq 1 ]];then if [[ -n $scomp ]];then - tcmd=" $ecmd | $scomp | $tcmd " + tcmd=" \$ecmd | $scomp | $tcmd " else - tcmd=" $ecmd | $tcmd " + tcmd=" \$ecmd | $tcmd " fi elif [[ -n $scomp ]];then tcmd=" $scomp | $tcmd " @@ -824,7 +1016,6 @@ stagemsg="Joiner-Recv" - sencrypted=1 nthreads=1 @@ -835,14 +1026,7 @@ # May need xtrabackup_checkpoints later on rm -f ${DATA}/xtrabackup_binary ${DATA}/xtrabackup_galera_info ${DATA}/xtrabackup_logfile - ADDR=${WSREP_SST_OPT_ADDR} - if [ -z "${SST_PORT}" ] - then - SST_PORT=4444 - ADDR="$(echo ${WSREP_SST_OPT_ADDR} | awk -F ':' '{ print $1 }'):${SST_PORT}" - fi - - wait_for_listen ${SST_PORT} ${ADDR} ${MODULE} & + wait_for_listen ${WSREP_SST_OPT_HOST} ${WSREP_SST_OPT_PORT:-4444} ${MODULE} & trap sig_joiner_cleanup HUP PIPE INT TERM trap cleanup_joiner EXIT @@ -855,9 +1039,9 @@ get_keys if [[ $encrypt -eq 1 && $sencrypted -eq 1 ]];then if [[ -n $sdecomp ]];then - strmcmd=" $sdecomp | $ecmd | $strmcmd" + strmcmd=" $sdecomp | \$ecmd | $strmcmd" else - strmcmd=" $ecmd | $strmcmd" + strmcmd=" \$ecmd | $strmcmd" fi elif [[ -n $sdecomp ]];then strmcmd=" $sdecomp | $strmcmd" @@ -888,7 +1072,7 @@ wsrep_log_info "Cleaning the existing datadir and innodb-data/log directories" - find $ib_home_dir $ib_log_dir $ib_undo_dir $DATA -mindepth 1 -regex $cpat -prune -o -exec rm -rfv {} 1>&2 \+ + find $ib_home_dir $ib_log_dir $ib_undo_dir $DATA -mindepth 1 -prune -regex $cpat -o -exec rm -rfv {} 1>&2 \+ tempdir=$(parse_cnf mysqld log-bin "") if [[ -n ${tempdir:-} ]];then diff -Nru mariadb-10.1-10.1.25/sql/CMakeLists.txt mariadb-10.1-10.1.30/sql/CMakeLists.txt --- mariadb-10.1-10.1.25/sql/CMakeLists.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/CMakeLists.txt 2017-12-21 15:48:48.000000000 +0000 @@ -48,24 +48,13 @@ SET(GEN_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc -${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h -) -SET(GEN_DIGEST_SOURCES - ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h +${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h +${CMAKE_CURRENT_BINARY_DIR}/lex_token.h ) SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} - ${GEN_DIGEST_SOURCES} PROPERTIES GENERATED 1) -# Gen_lex_token -# Make sure sql_yacc.h is generated before compiling gen_lex_token - -IF(NOT CMAKE_GENERATOR MATCHES "Visual Studio") - SET(DEPENDS_gen_lex_token DEPENDS gen_lex_token) - SET(DEPENDS_gen_lex_hash DEPENDS gen_lex_hash) -ENDIF() - IF(NOT CMAKE_CROSSCOMPILING) ADD_EXECUTABLE(gen_lex_token gen_lex_token.cc @@ -75,7 +64,7 @@ ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h COMMAND gen_lex_token > lex_token.h - ${DEPENDS_gen_lex_token} + DEPENDS gen_lex_token ) ADD_DEFINITIONS(-DMYSQL_SERVER -DHAVE_EVENT_SCHEDULER) @@ -148,7 +137,6 @@ table_cache.cc encryption.cc ${CMAKE_CURRENT_BINARY_DIR}/sql_builtin.cc ${GEN_SOURCES} - ${GEN_DIGEST_SOURCES} ${MYSYS_LIBWRAP_SOURCE} ) @@ -169,7 +157,6 @@ ADD_LIBRARY(sql STATIC ${SQL_SOURCE}) ADD_DEPENDENCIES(sql GenServerSource) -ADD_DEPENDENCIES(sql GenDigestServerSource) DTRACE_INSTRUMENT(sql) TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATIC_PLUGIN_LIBS} mysys mysys_ssl dbug strings vio pcre ${LIBJEMALLOC} @@ -208,7 +195,7 @@ SET(MYSQLD_DEF ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.def) SET(MYSQLD_EXP ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.exp) SET(MYSQLD_LIB ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.lib) - SET(MYSQLD_CORELIBS sql mysys mysys_ssl dbug strings) + SET(MYSQLD_CORELIBS sql mysys dbug strings) FOREACH (CORELIB ${MYSQLD_CORELIBS}) GET_TARGET_PROPERTY(LOC ${CORELIB} LOCATION) FILE(TO_NATIVE_PATH ${LOC} LOC) @@ -219,25 +206,45 @@ IF(CMAKE_SIZEOF_VOID_P EQUAL 8) SET(_PLATFORM x64) ENDIF() + # Create a cmake script to generate import and export libs + # from a .def file + SET(CMAKE_CONFIGURABLE_FILE_CONTENT " + IF ((mysqld_lib.def IS_NEWER_THAN mysqld_lib.lib) OR + (mysqld_lib.def IS_NEWER_THAN mysqld_lib.exp)) + FILE(REMOVE mysqld_lib.lib mysqld_lib.exp) + SET(ENV{VS_UNICODE_OUTPUT}) + EXECUTE_PROCESS ( + COMMAND \"${CMAKE_LINKER}\" /lib /NAME:mysqld.exe \"/DEF:${MYSQLD_DEF}\" /MACHINE:${_PLATFORM} + RESULT_VARIABLE ret) + IF(NOT ret EQUAL 0) + MESSAGE(FATAL_ERROR \"process failed ret=\${ret}\") + ENDIF() + ENDIF() + ") + + CONFIGURE_FILE( + ${PROJECT_SOURCE_DIR}/cmake/configurable_file_content.in + make_mysqld_lib.cmake) + + IF(CMAKE_VERSION VERSION_GREATER "3.2.0") + SET(MYSQLD_LIB_BYPRODUCTS BYPRODUCTS ${MYSQLD_DEF} ${MYSQLD_LIB} ${MYSQLD_EXP}) + ENDIF() ADD_CUSTOM_COMMAND( - OUTPUT ${MYSQLD_DEF} - COMMAND cscript ARGS //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js - ${_PLATFORM} /forLib ${LIB_LOCATIONS} > mysqld_lib.def.tmp + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.stamp + ${MYSQLD_LIB_BYPRODUCTS} + COMMENT "Generating mysqld_lib.def, mysqld_lib.lib, mysqld_lib.exp" + COMMAND cscript //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js + ${_PLATFORM} /forLib ${LIB_LOCATIONS} > mysqld_lib.def.tmp COMMAND ${CMAKE_COMMAND} -E copy_if_different mysqld_lib.def.tmp mysqld_lib.def COMMAND ${CMAKE_COMMAND} -E remove mysqld_lib.def.tmp + COMMAND ${CMAKE_COMMAND} -P make_mysqld_lib.cmake + COMMAND ${CMAKE_COMMAND} -E touch mysqld_lib.stamp WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${MYSQLD_CORELIBS} ) - ADD_CUSTOM_COMMAND( - OUTPUT ${MYSQLD_LIB} - COMMAND lib - ARGS /NAME:mysqld.exe "/DEF:${MYSQLD_DEF}" "/MACHINE:${_PLATFORM}" - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS ${MYSQLD_DEF} - ) - ADD_CUSTOM_TARGET(gen_mysqld_lib DEPENDS ${MYSQLD_LIB}) + ADD_CUSTOM_TARGET(gen_mysqld_lib DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mysqld_lib.stamp) ADD_LIBRARY(mysqld_import_lib UNKNOWN IMPORTED GLOBAL) SET_TARGET_PROPERTIES(mysqld_import_lib PROPERTIES IMPORTED_LOCATION ${MYSQLD_LIB}) ENDIF() @@ -253,7 +260,9 @@ ENDIF() IF(NOT WITHOUT_DYNAMIC_PLUGINS) - SET_TARGET_PROPERTIES(mysqld PROPERTIES ENABLE_EXPORTS TRUE) + IF(NOT MSVC) + SET_TARGET_PROPERTIES(mysqld PROPERTIES ENABLE_EXPORTS TRUE) + ENDIF() GET_TARGET_PROPERTY(mysqld_link_flags mysqld LINK_FLAGS) IF(NOT mysqld_link_flags) SET(mysqld_link_flags) @@ -267,7 +276,6 @@ ENDIF() ENDIF(NOT WITHOUT_DYNAMIC_PLUGINS) -SET_TARGET_PROPERTIES(mysqld PROPERTIES ENABLE_EXPORTS TRUE) TARGET_LINK_LIBRARIES(mysqld sql) # Provide plugins with minimal set of libraries @@ -293,10 +301,6 @@ SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "${MYSQLD_LINK_FLAGS} ${WITH_MYSQLD_LDFLAGS}") ENDIF() -INSTALL_DEBUG_TARGET(mysqld - DESTINATION ${INSTALL_SBINDIR} - PDB_DESTINATION ${INSTALL_SBINDIR}/debug - RENAME mysqld-debug) INCLUDE(${CMAKE_SOURCE_DIR}/cmake/bison.cmake) @@ -330,7 +334,7 @@ ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h COMMAND gen_lex_hash > lex_hash.h - ${DEPENDS_gen_lex_hash} + DEPENDS gen_lex_hash ) MYSQL_ADD_EXECUTABLE(mysql_tzinfo_to_sql tztime.cc COMPONENT Server) @@ -342,27 +346,13 @@ DEPENDS ${GEN_SOURCES} ) -ADD_CUSTOM_TARGET( - GenDigestServerSource - DEPENDS ${GEN_DIGEST_SOURCES} -) - #Need this only for embedded SET_TARGET_PROPERTIES(GenServerSource PROPERTIES EXCLUDE_FROM_ALL TRUE) IF(WIN32 OR HAVE_DLOPEN AND NOT DISABLE_SHARED) - ADD_LIBRARY(udf_example MODULE udf_example.c) + ADD_LIBRARY(udf_example MODULE udf_example.c udf_example.def) SET_TARGET_PROPERTIES(udf_example PROPERTIES PREFIX "") - # udf_example depends on strings - IF(WIN32) - IF(MSVC) - SET_TARGET_PROPERTIES(udf_example PROPERTIES LINK_FLAGS "/DEF:${CMAKE_CURRENT_SOURCE_DIR}/udf_example.def") - ENDIF() - TARGET_LINK_LIBRARIES(udf_example strings) - ELSE() - # udf_example is using safemutex exported by mysqld - TARGET_LINK_LIBRARIES(udf_example mysqld) - ENDIF() + TARGET_LINK_LIBRARIES(udf_example strings) ENDIF() FOREACH(tool glibtoolize libtoolize aclocal autoconf autoheader automake gtar diff -Nru mariadb-10.1-10.1.25/sql/datadict.cc mariadb-10.1-10.1.30/sql/datadict.cc --- mariadb-10.1-10.1.25/sql/datadict.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/datadict.cc 2017-12-21 15:48:48.000000000 +0000 @@ -45,6 +45,8 @@ engine_name is a LEX_STRING, where engine_name->str must point to a buffer of at least NAME_CHAR_LEN+1 bytes. + If engine_name is 0, then the function will only test if the file is a + view or not @retval FRMTYPE_ERROR error @retval FRMTYPE_TABLE table @@ -72,12 +74,23 @@ goto err; } + /* + We return FRMTYPE_TABLE if we can read the .frm file. This allows us + to drop a bad .frm file with DROP TABLE + */ type= FRMTYPE_TABLE; - if (!is_binary_frm_header(header) || !engine_name) + /* engine_name is 0 if we only want to know if table is view or not */ + if (!engine_name) goto err; + /* Initialize engine name in case we are not able to find it out */ engine_name->length= 0; + engine_name->str[0]= 0; + + if (!is_binary_frm_header(header)) + goto err; + dbt= header[3]; /* cannot use ha_resolve_by_legacy_type without a THD */ diff -Nru mariadb-10.1-10.1.25/sql/debug_sync.cc mariadb-10.1-10.1.30/sql/debug_sync.cc --- mariadb-10.1-10.1.25/sql/debug_sync.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/debug_sync.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1502,7 +1502,7 @@ { if (!--action->hit_limit) { - thd->killed= KILL_QUERY; + thd->set_killed(KILL_QUERY); my_error(ER_DEBUG_SYNC_HIT_LIMIT, MYF(0)); } DBUG_PRINT("debug_sync_exec", ("hit_limit: %lu at: '%s'", diff -Nru mariadb-10.1-10.1.25/sql/encryption.cc mariadb-10.1-10.1.30/sql/encryption.cc --- mariadb-10.1-10.1.25/sql/encryption.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/encryption.cc 2017-12-21 15:48:48.000000000 +0000 @@ -98,19 +98,27 @@ int finalize_encryption_plugin(st_plugin_int *plugin) { - encryption_handler.encryption_key_get_func= - (uint (*)(uint, uint, uchar*, uint*))no_key; - encryption_handler.encryption_key_get_latest_version_func= no_key; - encryption_handler.encryption_ctx_size_func= zero_size; + bool used= plugin_ref_to_int(encryption_manager) == plugin; + + if (used) + { + encryption_handler.encryption_key_get_func= + (uint (*)(uint, uint, uchar*, uint*))no_key; + encryption_handler.encryption_key_get_latest_version_func= no_key; + encryption_handler.encryption_ctx_size_func= zero_size; + } if (plugin && plugin->plugin->deinit && plugin->plugin->deinit(NULL)) { DBUG_PRINT("warning", ("Plugin '%s' deinit function returned error.", plugin->name.str)); } - if (encryption_manager) + + if (used) + { plugin_unlock(NULL, encryption_manager); - encryption_manager= 0; + encryption_manager= 0; + } return 0; } diff -Nru mariadb-10.1-10.1.25/sql/event_data_objects.cc mariadb-10.1-10.1.30/sql/event_data_objects.cc --- mariadb-10.1-10.1.25/sql/event_data_objects.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/event_data_objects.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1472,19 +1472,33 @@ bool save_tx_read_only= thd->tx_read_only; thd->tx_read_only= false; - if (WSREP(thd)) - { + /* + This code is processing event execution and does not have client + connection. Here, event execution will now execute a prepared + DROP EVENT statement, but thd->lex->sql_command is set to + SQLCOM_CREATE_PROCEDURE + DROP EVENT will be logged in binlog, and we have to + replicate it to make all nodes have consistent event definitions + Wsrep DDL replication is triggered inside Events::drop_event(), + and here we need to prepare the THD so that DDL replication is + possible, essentially it requires setting sql_command to + SQLCOMM_DROP_EVENT, we will switch sql_command for the duration + of DDL replication only. + */ + const enum_sql_command sql_command_save= thd->lex->sql_command; + const bool sql_command_set= WSREP(thd); + + if (sql_command_set) thd->lex->sql_command = SQLCOM_DROP_EVENT; - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL); - } ret= Events::drop_event(thd, dbname, name, FALSE); - WSREP_TO_ISOLATION_END; + if (sql_command_set) + { + WSREP_TO_ISOLATION_END; + thd->lex->sql_command = sql_command_save; + } -#ifdef WITH_WSREP - error: -#endif thd->tx_read_only= save_tx_read_only; thd->security_ctx->master_access= saved_master_access; } diff -Nru mariadb-10.1-10.1.25/sql/events.cc mariadb-10.1-10.1.30/sql/events.cc --- mariadb-10.1-10.1.25/sql/events.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/events.cc 2017-12-21 15:48:48.000000000 +0000 @@ -188,8 +188,8 @@ expr= tmp_expr - (tmp_expr/60)*60; /* the code after the switch will finish */ - } break; + } case INTERVAL_HOUR_SECOND: { ulonglong tmp_expr= expr; @@ -205,8 +205,8 @@ expr= tmp_expr - (tmp_expr/60)*60; /* the code after the switch will finish */ - } break; + } case INTERVAL_DAY_SECOND: { ulonglong tmp_expr= expr; @@ -228,8 +228,8 @@ expr= tmp_expr - (tmp_expr/60)*60; /* the code after the switch will finish */ - } break; + } case INTERVAL_DAY_MICROSECOND: case INTERVAL_HOUR_MICROSECOND: case INTERVAL_MINUTE_MICROSECOND: @@ -243,7 +243,8 @@ break; case INTERVAL_WEEK: expr/= 7; - /* fall through */ + close_quote= FALSE; + break; default: close_quote= FALSE; break; @@ -334,6 +335,7 @@ if (check_access(thd, EVENT_ACL, parse_data->dbname.str, NULL, NULL, 0, 0)) DBUG_RETURN(TRUE); + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) if (lock_object_name(thd, MDL_key::EVENT, parse_data->dbname.str, parse_data->name.str)) @@ -416,6 +418,10 @@ thd->restore_stmt_binlog_format(save_binlog_format); DBUG_RETURN(ret); +#ifdef WITH_WSREP + error: + DBUG_RETURN(TRUE); +#endif /* WITH_WSREP */ } @@ -456,6 +462,9 @@ if (check_access(thd, EVENT_ACL, parse_data->dbname.str, NULL, NULL, 0, 0)) DBUG_RETURN(TRUE); + + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + if (lock_object_name(thd, MDL_key::EVENT, parse_data->dbname.str, parse_data->name.str)) DBUG_RETURN(TRUE); @@ -540,6 +549,10 @@ thd->restore_stmt_binlog_format(save_binlog_format); DBUG_RETURN(ret); +#ifdef WITH_WSREP +error: + DBUG_RETURN(TRUE); +#endif /* WITH_WSREP */ } @@ -580,6 +593,8 @@ if (check_access(thd, EVENT_ACL, dbname.str, NULL, NULL, 0, 0)) DBUG_RETURN(TRUE); + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + /* Turn off row binlogging of this statement and use statement-based so that all supporting tables are updated for DROP EVENT command. @@ -601,6 +616,10 @@ thd->restore_stmt_binlog_format(save_binlog_format); DBUG_RETURN(ret); +#ifdef WITH_WSREP +error: + DBUG_RETURN(TRUE); +#endif } diff -Nru mariadb-10.1-10.1.25/sql/field.cc mariadb-10.1-10.1.30/sql/field.cc --- mariadb-10.1-10.1.25/sql/field.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/field.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,6 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. - Copyright (c) 2008, 2013, Monty Program Ab. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. + Copyright (c) 2008, 2017, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -4729,7 +4729,7 @@ return j; } -longlong Field_double::val_int(void) +longlong Field_double::val_int_from_real(bool want_unsigned_result) { ASSERT_COLUMN_MARKED_FOR_READ; double j; @@ -4737,8 +4737,15 @@ bool error; float8get(j,ptr); - res= double_to_longlong(j, 0, &error); - if (error) + res= double_to_longlong(j, want_unsigned_result, &error); + /* + Note, val_uint() is currently used for auto_increment purposes only, + and we want to suppress all warnings in such cases. + If we ever start using val_uint() for other purposes, + val_int_from_real() will need a new separate parameter to + suppress warnings. + */ + if (error && !want_unsigned_result) { THD *thd= get_thd(); ErrConvDouble err(j); @@ -5064,6 +5071,23 @@ } +int Field_timestamp::store_timestamp(Field_timestamp *from) +{ + ulong sec_part; + my_time_t ts= from->get_timestamp(&sec_part); + store_TIME(ts, sec_part); + if (!ts && !sec_part && get_thd()->variables.sql_mode & MODE_NO_ZERO_DATE) + { + ErrConvString s( + STRING_WITH_LEN("0000-00-00 00:00:00.000000") - (decimals() ? 6 - decimals() : 7), + system_charset_info); + set_datetime_warning(WARN_DATA_TRUNCATED, &s, MYSQL_TIMESTAMP_DATETIME, 1); + return 1; + } + return 0; +} + + double Field_timestamp::val_real(void) { return (double) Field_timestamp::val_int(); @@ -8885,13 +8909,13 @@ ulonglong tmp=(ulonglong) Field_enum::val_int(); uint bitnr=0; + /* + Some callers expect *val_buffer to contain the result, + so we assign to it, rather than doing 'return &empty_set_string. + */ + *val_buffer= empty_set_string; if (tmp == 0) { - /* - Some callers expect *val_buffer to contain the result, - so we assign to it, rather than doing 'return &empty_set_string. - */ - *val_buffer= empty_set_string; return val_buffer; } diff -Nru mariadb-10.1-10.1.25/sql/field_conv.cc mariadb-10.1-10.1.30/sql/field_conv.cc --- mariadb-10.1-10.1.25/sql/field_conv.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/field_conv.cc 2017-12-21 15:48:48.000000000 +0000 @@ -219,6 +219,13 @@ } +static int copy_timestamp_fields(Field *from, Field *to) +{ + DBUG_ASSERT(from->type() == MYSQL_TYPE_TIMESTAMP); + DBUG_ASSERT(to->type() == MYSQL_TYPE_TIMESTAMP); + return ((Field_timestamp*)to)->store_timestamp((Field_timestamp*)from); +} + static void do_skip(Copy_field *copy __attribute__((unused))) { } @@ -417,6 +424,12 @@ } +static void do_field_timestamp(Copy_field *copy) +{ + copy_timestamp_fields(copy->from_field, copy->to_field); +} + + static void do_field_temporal(Copy_field *copy) { MYSQL_TIME ltime; @@ -724,7 +737,9 @@ ((to->table->in_use->variables.sql_mode & (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE)) && mysql_type_to_time_type(to->type()) != MYSQL_TIMESTAMP_TIME)) - return do_field_temporal; + return (from->type() == MYSQL_TYPE_TIMESTAMP && + to->type() == MYSQL_TYPE_TIMESTAMP) + ? do_field_timestamp : do_field_temporal; /* Do binary copy */ } // Check if identical fields @@ -924,6 +939,10 @@ my_decimal buff; return to->store_decimal(from->val_decimal(&buff)); } + if (from->type() == MYSQL_TYPE_TIMESTAMP && to->type() == MYSQL_TYPE_TIMESTAMP) + { + return copy_timestamp_fields(from, to); + } if (from->cmp_type() == TIME_RESULT) { MYSQL_TIME ltime; diff -Nru mariadb-10.1-10.1.25/sql/field.h mariadb-10.1-10.1.30/sql/field.h --- mariadb-10.1-10.1.25/sql/field.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/field.h 2017-12-21 15:48:48.000000000 +0000 @@ -745,6 +745,10 @@ { return store(ls->str, ls->length, cs); } virtual double val_real(void)=0; virtual longlong val_int(void)=0; + virtual ulonglong val_uint(void) + { + return (ulonglong) val_int(); + } virtual bool val_bool(void)= 0; virtual my_decimal *val_decimal(my_decimal *); inline String *val_str(String *str) { return val_str(str, str); } @@ -1999,6 +2003,7 @@ class Field_double :public Field_real { + longlong val_int_from_real(bool want_unsigned_result); public: Field_double(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -2025,7 +2030,8 @@ int store(longlong nr, bool unsigned_val); int reset(void) { bzero(ptr,sizeof(double)); return 0; } double val_real(void); - longlong val_int(void); + longlong val_int(void) { return val_int_from_real(false); } + ulonglong val_uint(void) { return (ulonglong) val_int_from_real(true); } String *val_str(String*,String *); bool send_binary(Protocol *protocol); int cmp(const uchar *,const uchar *); @@ -2186,6 +2192,7 @@ int store(longlong nr, bool unsigned_val); int store_time_dec(MYSQL_TIME *ltime, uint dec); int store_decimal(const my_decimal *); + int store_timestamp(Field_timestamp *from); double val_real(void); longlong val_int(void); String *val_str(String*,String *); diff -Nru mariadb-10.1-10.1.25/sql/filesort.cc mariadb-10.1-10.1.30/sql/filesort.cc --- mariadb-10.1-10.1.25/sql/filesort.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/filesort.cc 2017-12-21 15:48:48.000000000 +0000 @@ -998,7 +998,8 @@ if (maybe_null) *to++=1; char *tmp_buffer= param->tmp_buffer ? param->tmp_buffer : (char*)to; - String tmp(tmp_buffer, param->sort_length, cs); + String tmp(tmp_buffer, param->tmp_buffer ? param->sort_length : + sort_field->length, cs); String *res= item->str_result(&tmp); if (!res) { diff -Nru mariadb-10.1-10.1.25/sql/filesort_utils.cc mariadb-10.1-10.1.30/sql/filesort_utils.cc --- mariadb-10.1-10.1.25/sql/filesort_utils.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/filesort_utils.cc 2017-12-21 15:48:48.000000000 +0000 @@ -96,7 +96,7 @@ if (m_idx_array.is_null()) { - sort_buff_sz= num_records * (record_length + sizeof(uchar*)); + sort_buff_sz= ((size_t)num_records) * (record_length + sizeof(uchar*)); set_if_bigger(sort_buff_sz, record_length * MERGEBUFF2); uchar **sort_keys= (uchar**) my_malloc(sort_buff_sz, MYF(MY_THREAD_SPECIFIC)); diff -Nru mariadb-10.1-10.1.25/sql/handler.cc mariadb-10.1-10.1.30/sql/handler.cc --- mariadb-10.1-10.1.25/sql/handler.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/handler.cc 2017-12-21 15:48:48.000000000 +0000 @@ -73,6 +73,14 @@ ulong total_ha= 0; /* number of storage engines (from handlertons[]) that support 2pc */ ulong total_ha_2pc= 0; +#ifndef DBUG_OFF +/* + Number of non-mandatory 2pc handlertons whose initialization failed + to estimate total_ha_2pc value under supposition of the failures + have not occcured. +*/ +ulong failed_ha_2pc= 0; +#endif /* size of savepoint storage area (see ha_init) */ ulong savepoint_alloc_size= 0; @@ -397,7 +405,7 @@ } static volatile int32 need_full_discover_for_existence= 0; -static volatile int32 engines_with_discover_table_names= 0; +static volatile int32 engines_with_discover_file_names= 0; static volatile int32 engines_with_discover= 0; static int full_discover_for_existence(handlerton *, const char *, const char *) @@ -422,8 +430,8 @@ if (hton->discover_table_existence == full_discover_for_existence) my_atomic_add32(&need_full_discover_for_existence, val); - if (hton->discover_table_names) - my_atomic_add32(&engines_with_discover_table_names, val); + if (hton->discover_table_names && hton->tablefile_extensions[0]) + my_atomic_add32(&engines_with_discover_file_names, val); if (hton->discover_table) my_atomic_add32(&engines_with_discover, val); @@ -649,6 +657,10 @@ (void) plugin->plugin->deinit(NULL); err: +#ifndef DBUG_OFF + if (hton->prepare && hton->state == SHOW_OPTION_YES) + failed_ha_2pc++; +#endif my_free(hton); err_no_hton_memory: plugin->data= NULL; @@ -1660,6 +1672,11 @@ { // cannot happen my_error(ER_ERROR_DURING_ROLLBACK, MYF(0), err); error=1; +#ifdef WITH_WSREP + WSREP_WARN("handlerton rollback failed, thd %lu %lld conf %d SQL %s", + thd->thread_id, thd->query_id, thd->wsrep_conflict_state, + thd->query()); +#endif /* WITH_WSREP */ } status_var_increment(thd->status_var.ha_rollback_count); ha_info_next= ha_info->next(); @@ -1854,7 +1871,7 @@ { #ifndef DBUG_OFF char buf[XIDDATASIZE*4+6]; // see xid_to_str - sql_print_information("ignore xid %s", xid_to_str(buf, info->list+i)); + DBUG_PRINT("info", ("ignore xid %s", xid_to_str(buf, info->list+i))); #endif xid_cache_insert(info->list+i, XA_PREPARED); info->found_foreign_xids++; @@ -1871,19 +1888,31 @@ tc_heuristic_recover == TC_HEURISTIC_RECOVER_COMMIT) { #ifndef DBUG_OFF - char buf[XIDDATASIZE*4+6]; // see xid_to_str - sql_print_information("commit xid %s", xid_to_str(buf, info->list+i)); + int rc= +#endif + hton->commit_by_xid(hton, info->list+i); +#ifndef DBUG_OFF + if (rc == 0) + { + char buf[XIDDATASIZE*4+6]; // see xid_to_str + DBUG_PRINT("info", ("commit xid %s", xid_to_str(buf, info->list+i))); + } #endif - hton->commit_by_xid(hton, info->list+i); } else { #ifndef DBUG_OFF - char buf[XIDDATASIZE*4+6]; // see xid_to_str - sql_print_information("rollback xid %s", - xid_to_str(buf, info->list+i)); + int rc= +#endif + hton->rollback_by_xid(hton, info->list+i); +#ifndef DBUG_OFF + if (rc == 0) + { + char buf[XIDDATASIZE*4+6]; // see xid_to_str + DBUG_PRINT("info", ("rollback xid %s", + xid_to_str(buf, info->list+i))); + } #endif - hton->rollback_by_xid(hton, info->list+i); } } if (got < info->len) @@ -1905,7 +1934,8 @@ /* commit_list and tc_heuristic_recover cannot be set both */ DBUG_ASSERT(info.commit_list==0 || tc_heuristic_recover==0); /* if either is set, total_ha_2pc must be set too */ - DBUG_ASSERT(info.dry_run || total_ha_2pc>(ulong)opt_bin_log); + DBUG_ASSERT(info.dry_run || + (failed_ha_2pc + total_ha_2pc) > (ulong)opt_bin_log); if (total_ha_2pc <= (ulong)opt_bin_log) DBUG_RETURN(0); @@ -5033,10 +5063,15 @@ { char engine_buf[NAME_CHAR_LEN + 1]; LEX_STRING engine= { engine_buf, 0 }; + frm_type_enum type; - if (dd_frm_type(thd, path, &engine) != FRMTYPE_VIEW) + if ((type= dd_frm_type(thd, path, &engine)) == FRMTYPE_ERROR) + DBUG_RETURN(0); + + if (type != FRMTYPE_VIEW) { - plugin_ref p= plugin_lock_by_name(thd, &engine, MYSQL_STORAGE_ENGINE_PLUGIN); + plugin_ref p= plugin_lock_by_name(thd, &engine, + MYSQL_STORAGE_ENGINE_PLUGIN); *hton= p ? plugin_hton(p) : NULL; if (*hton) // verify that the table really exists @@ -5159,6 +5194,7 @@ { LEX_STRING **src= tables->front(); LEX_STRING **dst= src; + sort(); while (++dst <= tables->back()) { LEX_STRING *s= *src, *d= *dst; @@ -5226,10 +5262,12 @@ int error; DBUG_ENTER("ha_discover_table_names"); - if (engines_with_discover_table_names == 0 && !reusable) + if (engines_with_discover_file_names == 0 && !reusable) { - error= ext_table_discovery_simple(dirp, result); - result->sort(); + st_discover_names_args args= {db, NULL, result, 0}; + error= ext_table_discovery_simple(dirp, result) || + plugin_foreach(thd, discover_names, + MYSQL_STORAGE_ENGINE_PLUGIN, &args); } else { @@ -5242,8 +5280,6 @@ error= extension_based_table_discovery(dirp, reg_ext, result) || plugin_foreach(thd, discover_names, MYSQL_STORAGE_ENGINE_PLUGIN, &args); - result->sort(); - if (args.possible_duplicates > 0) result->remove_duplicates(); } diff -Nru mariadb-10.1-10.1.25/sql/handler.h mariadb-10.1-10.1.30/sql/handler.h --- mariadb-10.1-10.1.25/sql/handler.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/handler.h 2017-12-21 15:48:48.000000000 +0000 @@ -1470,16 +1470,30 @@ static unsigned int const CREATED_TEMP_TABLE= 0x02; static unsigned int const DROPPED_TEMP_TABLE= 0x04; static unsigned int const DID_WAIT= 0x08; + static unsigned int const DID_DDL= 0x10; void mark_created_temp_table() { DBUG_PRINT("debug", ("mark_created_temp_table")); m_unsafe_rollback_flags|= CREATED_TEMP_TABLE; } + void mark_dropped_temp_table() + { + DBUG_PRINT("debug", ("mark_dropped_temp_table")); + m_unsafe_rollback_flags|= DROPPED_TEMP_TABLE; + } + bool has_created_dropped_temp_table() const { + return + (m_unsafe_rollback_flags & (CREATED_TEMP_TABLE|DROPPED_TEMP_TABLE)) != 0; + } void mark_trans_did_wait() { m_unsafe_rollback_flags|= DID_WAIT; } bool trans_did_wait() const { return (m_unsafe_rollback_flags & DID_WAIT) != 0; } + void mark_trans_did_ddl() { m_unsafe_rollback_flags|= DID_DDL; } + bool trans_did_ddl() const { + return (m_unsafe_rollback_flags & DID_DDL) != 0; + } }; @@ -1750,6 +1764,13 @@ used_fields|= (HA_CREATE_USED_CHARSET | HA_CREATE_USED_DEFAULT_CHARSET); return false; } + ulong table_options_with_row_type() + { + if (row_type == ROW_TYPE_DYNAMIC || row_type == ROW_TYPE_PAGE) + return table_options | HA_OPTION_PACK_RECORD; + else + return table_options; + } }; diff -Nru mariadb-10.1-10.1.25/sql/ha_partition.cc mariadb-10.1-10.1.30/sql/ha_partition.cc --- mariadb-10.1-10.1.25/sql/ha_partition.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/ha_partition.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,6 @@ /* - Copyright (c) 2005, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2013, Monty Program Ab & SkySQL Ab + Copyright (c) 2005, 2017, Oracle and/or its affiliates. + Copyright (c) 2009, 2017, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -674,7 +674,7 @@ HA_CREATE_INFO *create_info) { int error; - char name_buff[FN_REFLEN], name_lc_buff[FN_REFLEN]; + char name_buff[FN_REFLEN + 1], name_lc_buff[FN_REFLEN]; char *name_buffer_ptr; const char *path; uint i; @@ -716,8 +716,9 @@ for (j= 0; j < m_part_info->num_subparts; j++) { part_elem= sub_it++; - create_partition_name(name_buff, path, name_buffer_ptr, - NORMAL_PART_NAME, FALSE); + if ((error= create_partition_name(name_buff, sizeof(name_buff), path, + name_buffer_ptr, NORMAL_PART_NAME, FALSE))) + goto create_error; if ((error= set_up_table_before_create(table_arg, name_buff, create_info, part_elem)) || ((error= (*file)->ha_create(name_buff, table_arg, create_info)))) @@ -729,8 +730,9 @@ } else { - create_partition_name(name_buff, path, name_buffer_ptr, - NORMAL_PART_NAME, FALSE); + if ((error= create_partition_name(name_buff, sizeof(name_buff), path, + name_buffer_ptr, NORMAL_PART_NAME, FALSE))) + goto create_error; if ((error= set_up_table_before_create(table_arg, name_buff, create_info, part_elem)) || ((error= (*file)->ha_create(name_buff, table_arg, create_info)))) @@ -746,9 +748,9 @@ name_buffer_ptr= m_name_buffer_ptr; for (abort_file= file, file= m_file; file < abort_file; file++) { - create_partition_name(name_buff, path, name_buffer_ptr, NORMAL_PART_NAME, - FALSE); - (void) (*file)->ha_delete_table((const char*) name_buff); + if (!create_partition_name(name_buff, sizeof(name_buff), path, + name_buffer_ptr, NORMAL_PART_NAME, FALSE)) + (void) (*file)->ha_delete_table((const char*) name_buff); name_buffer_ptr= strend(name_buffer_ptr) + 1; } handler::delete_table(name); @@ -775,7 +777,7 @@ int ha_partition::drop_partitions(const char *path) { List_iterator part_it(m_part_info->partitions); - char part_name_buff[FN_REFLEN]; + char part_name_buff[FN_REFLEN + 1]; uint num_parts= m_part_info->partitions.elements; uint num_subparts= m_part_info->num_subparts; uint i= 0; @@ -808,9 +810,11 @@ { partition_element *sub_elem= sub_it++; part= i * num_subparts + j; - create_subpartition_name(part_name_buff, path, - part_elem->partition_name, - sub_elem->partition_name, name_variant); + if ((ret_error= create_subpartition_name(part_name_buff, + sizeof(part_name_buff), path, + part_elem->partition_name, + sub_elem->partition_name, name_variant))) + error= ret_error; file= m_file[part]; DBUG_PRINT("info", ("Drop subpartition %s", part_name_buff)); if ((ret_error= file->ha_delete_table(part_name_buff))) @@ -821,15 +825,19 @@ } else { - create_partition_name(part_name_buff, path, - part_elem->partition_name, name_variant, - TRUE); - file= m_file[i]; - DBUG_PRINT("info", ("Drop partition %s", part_name_buff)); - if ((ret_error= file->ha_delete_table(part_name_buff))) + if ((ret_error= create_partition_name(part_name_buff, + sizeof(part_name_buff), path, + part_elem->partition_name, name_variant, TRUE))) error= ret_error; - if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) - error= 1; + else + { + file= m_file[i]; + DBUG_PRINT("info", ("Drop partition %s", part_name_buff)); + if ((ret_error= file->ha_delete_table(part_name_buff))) + error= ret_error; + if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) + error= 1; + } } if (part_elem->part_state == PART_IS_CHANGED) part_elem->part_state= PART_NORMAL; @@ -865,8 +873,8 @@ { List_iterator part_it(m_part_info->partitions); List_iterator temp_it(m_part_info->temp_partitions); - char part_name_buff[FN_REFLEN]; - char norm_name_buff[FN_REFLEN]; + char part_name_buff[FN_REFLEN + 1]; + char norm_name_buff[FN_REFLEN + 1]; uint num_parts= m_part_info->partitions.elements; uint part_count= 0; uint num_subparts= m_part_info->num_subparts; @@ -908,10 +916,11 @@ { sub_elem= sub_it++; file= m_reorged_file[part_count++]; - create_subpartition_name(norm_name_buff, path, - part_elem->partition_name, - sub_elem->partition_name, - NORMAL_PART_NAME); + if ((ret_error= create_subpartition_name(norm_name_buff, + sizeof(norm_name_buff), path, + part_elem->partition_name, + sub_elem->partition_name, NORMAL_PART_NAME))) + error= ret_error; DBUG_PRINT("info", ("Delete subpartition %s", norm_name_buff)); if ((ret_error= file->ha_delete_table(norm_name_buff))) error= ret_error; @@ -924,16 +933,20 @@ else { file= m_reorged_file[part_count++]; - create_partition_name(norm_name_buff, path, - part_elem->partition_name, NORMAL_PART_NAME, - TRUE); - DBUG_PRINT("info", ("Delete partition %s", norm_name_buff)); - if ((ret_error= file->ha_delete_table(norm_name_buff))) + if ((ret_error= create_partition_name(norm_name_buff, + sizeof(norm_name_buff), path, + part_elem->partition_name, NORMAL_PART_NAME, TRUE))) error= ret_error; - else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) - error= 1; else - part_elem->log_entry= NULL; /* Indicate success */ + { + DBUG_PRINT("info", ("Delete partition %s", norm_name_buff)); + if ((ret_error= file->ha_delete_table(norm_name_buff))) + error= ret_error; + else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) + error= 1; + else + part_elem->log_entry= NULL; /* Indicate success */ + } } } while (++i < temp_partitions); (void) sync_ddl_log(); @@ -976,10 +989,11 @@ { sub_elem= sub_it++; part= i * num_subparts + j; - create_subpartition_name(norm_name_buff, path, - part_elem->partition_name, - sub_elem->partition_name, - NORMAL_PART_NAME); + if ((ret_error= create_subpartition_name(norm_name_buff, + sizeof(norm_name_buff), path, + part_elem->partition_name, + sub_elem->partition_name, NORMAL_PART_NAME))) + error= ret_error; if (part_elem->part_state == PART_IS_CHANGED) { file= m_reorged_file[part_count++]; @@ -991,10 +1005,11 @@ (void) sync_ddl_log(); } file= m_new_file[part]; - create_subpartition_name(part_name_buff, path, - part_elem->partition_name, - sub_elem->partition_name, - TEMP_PART_NAME); + if ((ret_error= create_subpartition_name(part_name_buff, + sizeof(part_name_buff), path, + part_elem->partition_name, + sub_elem->partition_name, TEMP_PART_NAME))) + error= ret_error; DBUG_PRINT("info", ("Rename subpartition from %s to %s", part_name_buff, norm_name_buff)); if ((ret_error= file->ha_rename_table(part_name_buff, @@ -1008,32 +1023,36 @@ } else { - create_partition_name(norm_name_buff, path, - part_elem->partition_name, NORMAL_PART_NAME, - TRUE); - if (part_elem->part_state == PART_IS_CHANGED) + if ((ret_error= create_partition_name(norm_name_buff, + sizeof(norm_name_buff), path, + part_elem->partition_name, NORMAL_PART_NAME, TRUE)) || + (ret_error= create_partition_name(part_name_buff, + sizeof(part_name_buff), path, + part_elem->partition_name, TEMP_PART_NAME, TRUE))) + error= ret_error; + else { - file= m_reorged_file[part_count++]; - DBUG_PRINT("info", ("Delete partition %s", norm_name_buff)); - if ((ret_error= file->ha_delete_table(norm_name_buff))) + if (part_elem->part_state == PART_IS_CHANGED) + { + file= m_reorged_file[part_count++]; + DBUG_PRINT("info", ("Delete partition %s", norm_name_buff)); + if ((ret_error= file->ha_delete_table(norm_name_buff))) + error= ret_error; + else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) + error= 1; + (void) sync_ddl_log(); + } + file= m_new_file[i]; + DBUG_PRINT("info", ("Rename partition from %s to %s", + part_name_buff, norm_name_buff)); + if ((ret_error= file->ha_rename_table(part_name_buff, + norm_name_buff))) error= ret_error; else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) error= 1; - (void) sync_ddl_log(); + else + part_elem->log_entry= NULL; } - file= m_new_file[i]; - create_partition_name(part_name_buff, path, - part_elem->partition_name, TEMP_PART_NAME, - TRUE); - DBUG_PRINT("info", ("Rename partition from %s to %s", - part_name_buff, norm_name_buff)); - if ((ret_error= file->ha_rename_table(part_name_buff, - norm_name_buff))) - error= ret_error; - else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos)) - error= 1; - else - part_elem->log_entry= NULL; } } } while (++i < num_parts); @@ -1649,7 +1668,7 @@ { List_iterator part_it(m_part_info->partitions); List_iterator t_it(m_part_info->temp_partitions); - char part_name_buff[FN_REFLEN]; + char part_name_buff[FN_REFLEN + 1]; uint num_parts= m_part_info->partitions.elements; uint num_subparts= m_part_info->num_subparts; uint i= 0; @@ -1878,10 +1897,14 @@ do { partition_element *sub_elem= sub_it++; - create_subpartition_name(part_name_buff, path, - part_elem->partition_name, - sub_elem->partition_name, - name_variant); + if ((error= create_subpartition_name(part_name_buff, + sizeof(part_name_buff), path, + part_elem->partition_name, sub_elem->partition_name, + name_variant))) + { + cleanup_new_partition(part_count); + DBUG_RETURN(error); + } part= i * num_subparts + j; DBUG_PRINT("info", ("Add subpartition %s", part_name_buff)); if ((error= prepare_new_partition(table, create_info, @@ -1899,9 +1922,14 @@ } else { - create_partition_name(part_name_buff, path, - part_elem->partition_name, name_variant, - TRUE); + if ((error= create_partition_name(part_name_buff, + sizeof(part_name_buff), path, part_elem->partition_name, + name_variant, TRUE))) + { + cleanup_new_partition(part_count); + DBUG_RETURN(error); + } + DBUG_PRINT("info", ("Add partition %s", part_name_buff)); if ((error= prepare_new_partition(table, create_info, new_file_array[i], @@ -2272,8 +2300,8 @@ { int save_error= 0; int error; - char from_buff[FN_REFLEN], to_buff[FN_REFLEN], from_lc_buff[FN_REFLEN], - to_lc_buff[FN_REFLEN]; + char from_buff[FN_REFLEN + 1], to_buff[FN_REFLEN + 1], + from_lc_buff[FN_REFLEN], to_lc_buff[FN_REFLEN]; char *name_buffer_ptr; const char *from_path; const char *to_path= NULL; @@ -2309,13 +2337,15 @@ i= 0; do { - create_partition_name(from_buff, from_path, name_buffer_ptr, - NORMAL_PART_NAME, FALSE); + if ((error= create_partition_name(from_buff, sizeof(from_buff), from_path, + name_buffer_ptr, NORMAL_PART_NAME, FALSE))) + goto rename_error; if (to != NULL) { // Rename branch - create_partition_name(to_buff, to_path, name_buffer_ptr, - NORMAL_PART_NAME, FALSE); + if ((error= create_partition_name(to_buff, sizeof(to_buff), to_path, + name_buffer_ptr, NORMAL_PART_NAME, FALSE))) + goto rename_error; error= (*file)->ha_rename_table(from_buff, to_buff); if (error) goto rename_error; @@ -2344,12 +2374,14 @@ for (abort_file= file, file= m_file; file < abort_file; file++) { /* Revert the rename, back from 'to' to the original 'from' */ - create_partition_name(from_buff, from_path, name_buffer_ptr, - NORMAL_PART_NAME, FALSE); - create_partition_name(to_buff, to_path, name_buffer_ptr, - NORMAL_PART_NAME, FALSE); - /* Ignore error here */ - (void) (*file)->ha_rename_table(to_buff, from_buff); + if (!create_partition_name(from_buff, sizeof(from_buff), from_path, + name_buffer_ptr, NORMAL_PART_NAME, FALSE) && + !create_partition_name(to_buff, sizeof(to_buff), to_path, + name_buffer_ptr, NORMAL_PART_NAME, FALSE)) + { + /* Ignore error here */ + (void) (*file)->ha_rename_table(to_buff, from_buff); + } name_buffer_ptr= strend(name_buffer_ptr) + 1; } DBUG_RETURN(error); @@ -3416,7 +3448,7 @@ char *name_buffer_ptr; int error= HA_ERR_INITIALIZATION; handler **file; - char name_buff[FN_REFLEN]; + char name_buff[FN_REFLEN + 1]; ulonglong check_table_flags; DBUG_ENTER("ha_partition::open"); @@ -3470,8 +3502,9 @@ file= m_is_clone_of->m_file; for (i= 0; i < m_tot_parts; i++) { - create_partition_name(name_buff, name, name_buffer_ptr, NORMAL_PART_NAME, - FALSE); + if ((error= create_partition_name(name_buff, sizeof(name_buff), name, + name_buffer_ptr, NORMAL_PART_NAME, FALSE))) + goto err_handler; /* ::clone() will also set ha_share from the original. */ if (!(m_file[i]= file[i]->clone(name_buff, m_clone_mem_root))) { @@ -3487,8 +3520,9 @@ file= m_file; do { - create_partition_name(name_buff, name, name_buffer_ptr, NORMAL_PART_NAME, - FALSE); + if ((error= create_partition_name(name_buff, sizeof(name_buff), name, + name_buffer_ptr, NORMAL_PART_NAME, FALSE))) + goto err_handler; table->s->connect_string = m_connect_string[(uint)(file-m_file)]; if ((error= (*file)->ha_open(table, name_buff, mode, test_if_locked | HA_OPEN_NO_PSI_CALL))) @@ -7863,7 +7897,7 @@ case MYSQL_TYPE_BLOB: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_GEOMETRY: - /* fall through. */ + /* fall through */ default: DBUG_ASSERT(0); // New type? /* Fall through for default hashing (5.5). */ diff -Nru mariadb-10.1-10.1.25/sql/ha_partition.h mariadb-10.1-10.1.30/sql/ha_partition.h --- mariadb-10.1-10.1.25/sql/ha_partition.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/ha_partition.h 2017-12-21 15:48:48.000000000 +0000 @@ -356,6 +356,10 @@ virtual void change_table_ptr(TABLE *table_arg, TABLE_SHARE *share); virtual bool check_if_incompatible_data(HA_CREATE_INFO *create_info, uint table_changes); + void update_part_create_info(HA_CREATE_INFO *create_info, uint part_id) + { + m_file[part_id]->update_create_info(create_info); + } private: int copy_partitions(ulonglong * const copied, ulonglong * const deleted); void cleanup_new_partition(uint part_count); diff -Nru mariadb-10.1-10.1.25/sql/item.cc mariadb-10.1-10.1.30/sql/item.cc --- mariadb-10.1-10.1.25/sql/item.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. - Copyright (c) 2010, 2017, MariaDB + Copyright (c) 2010, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -770,6 +770,7 @@ cached_table(0), depended_from(0), can_be_depended(TRUE) { name = (char*) field_name_arg; + name_length= name ? strlen(name) : 0; } @@ -783,6 +784,7 @@ cached_table(NULL), depended_from(NULL), can_be_depended(TRUE) { name = (char*) field_name_arg; + name_length= name ? strlen(name) : 0; } @@ -1740,7 +1742,10 @@ { set_name(item_name->ptr(), (uint) item_name->length(), system_charset_info); } - collation.set(value_item->collation.collation, DERIVATION_IMPLICIT); + if (value_item->collation.derivation == DERIVATION_NUMERIC) + collation.set_numeric(); + else + collation.set(value_item->collation.collation, DERIVATION_IMPLICIT); max_length= value_item->max_length; decimals= value_item->decimals; fixed= 1; @@ -2128,6 +2133,9 @@ Item **args, uint nargs, uint flags, int item_sep) { + THD *thd= current_thd; + if (thd->lex->is_ps_or_view_context_analysis()) + return false; Item **arg, *safe_args[2]= {NULL, NULL}; /* @@ -2143,7 +2151,6 @@ safe_args[1]= args[item_sep]; } - THD *thd= current_thd; bool res= FALSE; uint i; @@ -2674,7 +2681,8 @@ return (get_depended_from() ? OUTER_REF_TABLE_BIT : field->table->map); } -void Item_field::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_field::fix_after_pullout(st_select_lex *new_parent, Item **ref, + bool merge) { if (new_parent == get_depended_from()) depended_from= NULL; @@ -2718,6 +2726,19 @@ if (!need_change) return; + if (!merge) + { + /* + It is transformation without merge. + This field was "outer" for the inner SELECT where it was taken and + moved up. + "Outer" fields uses normal SELECT_LEX context of upper SELECTs for + name resolution, so we can switch everything to it safely. + */ + this->context= &new_parent->context; + return; + } + Name_resolution_context *ctx= new Name_resolution_context(); if (context->select_lex == new_parent) { @@ -4454,7 +4475,7 @@ int cur_match_degree= 0; /* SELECT list element with explicit alias */ - if ((*(cur_group->item))->name && + if ((*(cur_group->item))->name && !table_name && !(*(cur_group->item))->is_autogenerated_name && !my_strcasecmp(system_charset_info, (*(cur_group->item))->name, field_name)) @@ -4602,7 +4623,8 @@ if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY && select->having_fix_field && - select_ref != not_found_item && !group_by_ref) + select_ref != not_found_item && !group_by_ref && + !ref->alias_name_used) { /* Report the error if fields was found only in the SELECT item list and @@ -4875,6 +4897,12 @@ ((ref_type == REF_ITEM || ref_type == FIELD_ITEM) ? (Item_ident*) (*reference) : 0)); + if (thd->lex->in_sum_func && + thd->lex->in_sum_func->nest_level >= select->nest_level) + { + set_if_bigger(thd->lex->in_sum_func->max_arg_level, + select->nest_level); + } /* A reference to a view field had been found and we substituted it instead of this Item (find_field_in_tables @@ -5620,7 +5648,7 @@ srccs == &my_charset_bin ? dstcs->csname : srccs->csname, err.ptr()); - return m_thd->is_strict_mode(); + return false; } if (const char *pos= cannot_convert_error_pos()) { @@ -5633,7 +5661,7 @@ ER_CANNOT_CONVERT_CHARACTER, ER_THD(m_thd, ER_CANNOT_CONVERT_CHARACTER), srccs->csname, buf, dstcs->csname); - return m_thd->is_strict_mode(); + return false; } return false; } @@ -5824,7 +5852,7 @@ Field_string(max_length, maybe_null, name, collation.collation); break; } - /* Fall through */ + /* fall through */ case MYSQL_TYPE_ENUM: case MYSQL_TYPE_SET: case MYSQL_TYPE_VAR_STRING: @@ -6629,6 +6657,7 @@ */ if (const_item() && !(basic_const_item() || item->basic_const_item() || + item->type() == Item::NULL_ITEM || /* Item_name_const hack */ item->type() == Item::FIELD_ITEM || item->type() == SUBSELECT_ITEM || item->type() == CACHE_ITEM || @@ -6810,7 +6839,11 @@ // Find which select the field is in. This is achieved by walking up // the select tree and looking for the table of interest. st_select_lex *sel; - for (sel= current_select; sel; sel= sel->outer_select()) + for (sel= current_select; + sel ; + sel= (sel->context.outer_context ? + sel->context.outer_context->select_lex: + NULL)) { List_iterator li(sel->leaf_tables); TABLE_LIST *tbl; @@ -7983,7 +8016,6 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference) { - DBUG_ASSERT(1); /* view fild reference must be defined */ DBUG_ASSERT(*ref); /* (*ref)->check_cols() will be made in Item_direct_ref::fix_fields */ @@ -8044,18 +8076,19 @@ void Item_outer_ref::fix_after_pullout(st_select_lex *new_parent, - Item **ref_arg) + Item **ref_arg, bool merge) { if (get_depended_from() == new_parent) { *ref_arg= outer_ref; - (*ref_arg)->fix_after_pullout(new_parent, ref_arg); + (*ref_arg)->fix_after_pullout(new_parent, ref_arg, merge); } } -void Item_ref::fix_after_pullout(st_select_lex *new_parent, Item **refptr) +void Item_ref::fix_after_pullout(st_select_lex *new_parent, Item **refptr, + bool merge) { - (*ref)->fix_after_pullout(new_parent, ref); + (*ref)->fix_after_pullout(new_parent, ref, merge); if (get_depended_from() == new_parent) depended_from= NULL; } @@ -9836,7 +9869,7 @@ table_map Item_direct_view_ref::used_tables() const { - DBUG_ASSERT(null_ref_table); + DBUG_ASSERT(fixed); if (get_depended_from()) return OUTER_REF_TABLE_BIT; diff -Nru mariadb-10.1-10.1.25/sql/item_cmpfunc.cc mariadb-10.1-10.1.30/sql/item_cmpfunc.cc --- mariadb-10.1-10.1.25/sql/item_cmpfunc.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_cmpfunc.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1229,10 +1229,11 @@ } -void Item_in_optimizer::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_in_optimizer::fix_after_pullout(st_select_lex *new_parent, + Item **ref, bool merge) { /* This will re-calculate attributes of our Item_in_subselect: */ - Item_bool_func::fix_after_pullout(new_parent, ref); + Item_bool_func::fix_after_pullout(new_parent, ref, merge); /* Then, re-calculate not_null_tables_cache: */ eval_not_null_tables(NULL); @@ -1848,6 +1849,19 @@ } +bool Item_func_interval::fix_fields(THD *thd, Item **ref) +{ + if (Item_int_func::fix_fields(thd, ref)) + return true; + for (uint i= 0 ; i < row->cols(); i++) + { + if (row->element_index(i)->check_cols(1)) + return true; + } + return false; +} + + void Item_func_interval::fix_length_and_dec() { uint rows= row->cols(); @@ -2060,10 +2074,11 @@ } -void Item_func_between::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_func_between::fix_after_pullout(st_select_lex *new_parent, + Item **ref, bool merge) { /* This will re-calculate attributes of the arguments */ - Item_func_opt_neg::fix_after_pullout(new_parent, ref); + Item_func_opt_neg::fix_after_pullout(new_parent, ref, merge); /* Then, re-calculate not_null_tables_cache according to our special rules */ eval_not_null_tables(NULL); } @@ -2406,10 +2421,11 @@ } -void Item_func_if::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_func_if::fix_after_pullout(st_select_lex *new_parent, + Item **ref, bool merge) { /* This will re-calculate attributes of the arguments */ - Item_func::fix_after_pullout(new_parent, ref); + Item_func::fix_after_pullout(new_parent, ref, merge); /* Then, re-calculate not_null_tables_cache according to our special rules */ eval_not_null_tables(NULL); } @@ -4138,10 +4154,11 @@ } -void Item_func_in::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_func_in::fix_after_pullout(st_select_lex *new_parent, Item **ref, + bool merge) { /* This will re-calculate attributes of the arguments */ - Item_func_opt_neg::fix_after_pullout(new_parent, ref); + Item_func_opt_neg::fix_after_pullout(new_parent, ref, merge); /* Then, re-calculate not_null_tables_cache according to our special rules */ eval_not_null_tables(NULL); } @@ -4663,7 +4680,8 @@ } -void Item_cond::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_cond::fix_after_pullout(st_select_lex *new_parent, Item **ref, + bool merge) { List_iterator li(list); Item *item; @@ -4676,7 +4694,7 @@ while ((item=li++)) { table_map tmp_table_map; - item->fix_after_pullout(new_parent, li.ref()); + item->fix_after_pullout(new_parent, li.ref(), merge); item= *li.ref(); used_tables_and_const_cache_join(item); @@ -5317,7 +5335,7 @@ DBUG_ASSERT(thd == current_thd); stack_used= available_stack_size(thd->thread_stack, &stack_used); m_pcre_extra.match_limit_recursion= - (my_thread_stack_size - stack_used)/my_pcre_frame_size; + (my_thread_stack_size - STACK_MIN_SIZE - stack_used)/my_pcre_frame_size; } @@ -5412,7 +5430,7 @@ switch (rc) { case PCRE_ERROR_NULL: - errmsg= "pcre_exec: null arguement passed"; + errmsg= "pcre_exec: null argument passed"; break; case PCRE_ERROR_BADOPTION: errmsg= "pcre_exec: bad option"; @@ -5581,6 +5599,12 @@ } +bool Item_func_regex::fix_fields(THD *thd, Item **ref) +{ + re.set_recursion_limit(thd); + return Item_bool_func::fix_fields(thd, ref); +} + void Item_func_regex::fix_length_and_dec() { @@ -5607,6 +5631,13 @@ } +bool Item_func_regexp_instr::fix_fields(THD *thd, Item **ref) +{ + re.set_recursion_limit(thd); + return Item_int_func::fix_fields(thd, ref); +} + + void Item_func_regexp_instr::fix_length_and_dec() { @@ -6872,7 +6903,7 @@ null_value= 1; return 1; } - if (my_charset_same(nm->charset(), &my_charset_utf8_general_ci)) + if (my_charset_same(nm->charset(), DYNCOL_UTF)) { buf.str= (char *) nm->ptr(); buf.length= nm->length(); @@ -6882,11 +6913,11 @@ uint strlen; uint dummy_errors; buf.str= (char *)sql_alloc((strlen= nm->length() * - my_charset_utf8_general_ci.mbmaxlen + 1)); + DYNCOL_UTF->mbmaxlen + 1)); if (buf.str) { buf.length= - copy_and_convert(buf.str, strlen, &my_charset_utf8_general_ci, + copy_and_convert(buf.str, strlen, DYNCOL_UTF, nm->ptr(), nm->length(), nm->charset(), &dummy_errors); } diff -Nru mariadb-10.1-10.1.25/sql/item_cmpfunc.h mariadb-10.1-10.1.30/sql/item_cmpfunc.h --- mariadb-10.1-10.1.25/sql/item_cmpfunc.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_cmpfunc.h 2017-12-21 15:48:48.000000000 +0000 @@ -342,7 +342,7 @@ virtual void get_cache_parameters(List ¶meters); bool is_top_level_item(); bool eval_not_null_tables(uchar *opt_arg); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); bool invisible_mode(); void reset_cache() { cache= NULL; } }; @@ -824,7 +824,7 @@ void fix_length_and_dec(); virtual void print(String *str, enum_query_type query_type); bool eval_not_null_tables(uchar *opt_arg); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); bool count_sargable_conds(uchar *arg); void add_key_fields(JOIN *join, KEY_FIELD **key_fields, uint *and_level, table_map usable_tables, @@ -878,6 +878,7 @@ { allowed_arg_cols= 0; // Fetch this value from first argument } + bool fix_fields(THD *, Item **); longlong val_int(); void fix_length_and_dec(); const char *func_name() const { return "interval"; } @@ -980,7 +981,7 @@ } const char *func_name() const { return "if"; } bool eval_not_null_tables(uchar *opt_arg); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); private: void cache_type_info(Item *source); }; @@ -1595,7 +1596,7 @@ enum Functype functype() const { return IN_FUNC; } const char *func_name() const { return " IN "; } bool eval_not_null_tables(uchar *opt_arg); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); bool count_sargable_conds(uchar *arg); }; @@ -1991,6 +1992,7 @@ DBUG_VOID_RETURN; } longlong val_int(); + bool fix_fields(THD *thd, Item **ref); void fix_length_and_dec(); const char *func_name() const { return "regexp"; } @@ -2018,6 +2020,7 @@ DBUG_VOID_RETURN; } longlong val_int(); + bool fix_fields(THD *thd, Item **ref); void fix_length_and_dec(); const char *func_name() const { return "regexp_instr"; } }; @@ -2061,7 +2064,7 @@ list.append(nlist); } bool fix_fields(THD *, Item **ref); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); enum Type type() const { return COND_ITEM; } List* argument_list() { return &list; } diff -Nru mariadb-10.1-10.1.25/sql/item_func.cc mariadb-10.1-10.1.30/sql/item_func.cc --- mariadb-10.1-10.1.25/sql/item_func.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_func.cc 2017-12-21 15:48:48.000000000 +0000 @@ -270,7 +270,8 @@ } -void Item_func::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_func::fix_after_pullout(st_select_lex *new_parent, Item **ref, + bool merge) { Item **arg,**arg_end; @@ -281,7 +282,7 @@ { for (arg=args, arg_end=args+arg_count; arg != arg_end ; arg++) { - (*arg)->fix_after_pullout(new_parent, arg); + (*arg)->fix_after_pullout(new_parent, arg, merge); Item *item= *arg; used_tables_and_const_cache_join(item); @@ -3959,7 +3960,7 @@ { DBUG_ASSERT(fixed == 1); longlong result= 0; - String *gtid_pos = args[0]->val_str(&value); + String *gtid_pos __attribute__((unused)) = args[0]->val_str(&value); if (args[0]->null_value) { diff -Nru mariadb-10.1-10.1.25/sql/item_func.h mariadb-10.1-10.1.30/sql/item_func.h --- mariadb-10.1-10.1.25/sql/item_func.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_func.h 2017-12-21 15:48:48.000000000 +0000 @@ -126,7 +126,7 @@ Item_func_or_sum::cleanup(); used_tables_and_const_cache_init(); } - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); void quick_fix_field(); table_map not_null_tables() const; void update_used_tables() @@ -1773,12 +1773,6 @@ create_tmp_field(false, table, MY_INT32_NUM_DECIMAL_DIGITS) : tmp_table_field_from_field_type(table, false, true); } - table_map used_tables() const - { - return used_tables_cache | RAND_TABLE_BIT; - } - bool const_item() const { return 0; } - bool is_expensive() { return 1; } virtual void print(String *str, enum_query_type query_type); void print_as_stmt(String *str, enum_query_type query_type); const char *func_name() const { return "set_user_var"; } diff -Nru mariadb-10.1-10.1.25/sql/item_geofunc.cc mariadb-10.1-10.1.30/sql/item_geofunc.cc --- mariadb-10.1-10.1.25/sql/item_geofunc.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_geofunc.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1194,6 +1194,8 @@ } else func->repeat_expression(shape_a); + if (func->reserve_op_buffer(1)) + return 1; func->add_operation(op_matrix(nc%3), 1); if (do_store_shapes) { @@ -1364,11 +1366,13 @@ Gcalc_function::op_intersection, 2); func.add_operation(Gcalc_function::op_internals, 1); shape_a= func.get_next_expression_pos(); - if ((null_value= g1.store_shapes(&trn))) + if ((null_value= g1.store_shapes(&trn)) || + func.reserve_op_buffer(1)) break; func.add_operation(Gcalc_function::op_internals, 1); shape_b= func.get_next_expression_pos(); - if ((null_value= g2.store_shapes(&trn))) + if ((null_value= g2.store_shapes(&trn)) || + func.reserve_op_buffer(1)) break; func.add_operation(Gcalc_function::v_find_t | Gcalc_function::op_intersection, 2); @@ -1603,6 +1607,8 @@ { if (buffer_op == Gcalc_function::op_difference) { + if (m_fn->reserve_op_buffer(1)) + return 1; m_fn->add_operation(Gcalc_function::op_false, 0); return 0; } diff -Nru mariadb-10.1-10.1.25/sql/item.h mariadb-10.1-10.1.30/sql/item.h --- mariadb-10.1-10.1.25/sql/item.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item.h 2017-12-21 15:48:48.000000000 +0000 @@ -1,8 +1,8 @@ #ifndef SQL_ITEM_INCLUDED #define SQL_ITEM_INCLUDED -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. - Copyright (c) 2009, 2016, MariaDB +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. + Copyright (c) 2009, 2017, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -548,8 +548,7 @@ class Item_splocal; /** - String_copier that honors the current sql_mode (strict vs non strict) - and can send warnings. + String_copier that sends Item specific warnings. */ class String_copier_for_item: public String_copier { @@ -730,7 +729,9 @@ Fix after some tables has been pulled out. Basically re-calculate all attributes that are dependent on the tables. */ - virtual void fix_after_pullout(st_select_lex *new_parent, Item **ref) {}; + virtual void fix_after_pullout(st_select_lex *new_parent, Item **ref, + bool merge) + {}; /* This method should be used in case where we are sure that we do not need @@ -2385,7 +2386,7 @@ bool send(Protocol *protocol, String *str_arg); void reset_field(Field *f); bool fix_fields(THD *, Item **); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); void make_field(Send_field *tmp_field); int save_in_field(Field *field,bool no_conversions); void save_org_in_field(Field *field, fast_field_copier optimizer_data); @@ -2582,6 +2583,17 @@ Field *result_field; Item_null_result(THD *thd): Item_null(thd), result_field(0) {} bool is_result_field() { return result_field != 0; } +#if MARIADB_VERSION_ID < 100300 + enum_field_types field_type() const + { + return result_field->type(); + } +#else + const Type_handler *type_handler() const + { + return result_field->type_handler(); + } +#endif void save_in_result_field(bool no_conversions) { save_in_field(result_field, no_conversions); @@ -3895,7 +3907,7 @@ bool send(Protocol *prot, String *tmp); void make_field(Send_field *field); bool fix_fields(THD *, Item **); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); int save_in_field(Field *field, bool no_conversions); void save_org_in_field(Field *field, fast_field_copier optimizer_data); fast_field_copier setup_fast_field_copier(Field *field) @@ -4132,6 +4144,8 @@ bool fix_fields(THD *thd, Item **it); void cleanup(); + Item *get_orig_item() const { return orig_item; } + /* Methods of getting value which should be cached in the cache */ void save_val(Field *to); double val_real(); @@ -4163,9 +4177,9 @@ Item *it= ((Item *) item)->real_item(); return orig_item->eq(it, binary_cmp); } - void fix_after_pullout(st_select_lex *new_parent, Item **refptr) + void fix_after_pullout(st_select_lex *new_parent, Item **refptr, bool merge) { - orig_item->fix_after_pullout(new_parent, &orig_item); + orig_item->fix_after_pullout(new_parent, &orig_item, merge); } int save_in_field(Field *to, bool no_conversions); enum Item_result result_type () const { return orig_item->result_type(); } @@ -4423,7 +4437,7 @@ outer_ref->save_org_in_field(result_field, NULL); } bool fix_fields(THD *, Item **); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); table_map used_tables() const { return (*ref)->const_item() ? 0 : OUTER_REF_TABLE_BIT; diff -Nru mariadb-10.1-10.1.25/sql/item_inetfunc.cc mariadb-10.1-10.1.30/sql/item_inetfunc.cc --- mariadb-10.1-10.1.25/sql/item_inetfunc.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_inetfunc.cc 2017-12-21 15:48:48.000000000 +0000 @@ -181,7 +181,8 @@ return NULL; } - String *arg_str= args[0]->val_str(buffer); + StringBuffer tmp; + String *arg_str= args[0]->val_str(&tmp); if (!arg_str) // Out-of memory happened. The error has been reported. { // Or: the underlying field is NULL null_value= true; @@ -679,7 +680,7 @@ @retval true The string has been converted sucessfully. */ -bool Item_func_inet6_aton::calc_value(String *arg, String *buffer) +bool Item_func_inet6_aton::calc_value(const String *arg, String *buffer) { // ipv4-string -> varbinary(4) // ipv6-string -> varbinary(16) @@ -719,7 +720,7 @@ @retval true The string has been converted sucessfully. */ -bool Item_func_inet6_ntoa::calc_value(String *arg, String *buffer) +bool Item_func_inet6_ntoa::calc_value(const String *arg, String *buffer) { if (arg->charset() != &my_charset_bin) return false; diff -Nru mariadb-10.1-10.1.25/sql/item_inetfunc.h mariadb-10.1-10.1.30/sql/item_inetfunc.h --- mariadb-10.1-10.1.25/sql/item_inetfunc.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_inetfunc.h 2017-12-21 15:48:48.000000000 +0000 @@ -98,7 +98,7 @@ virtual String *val_str_ascii(String *buffer); protected: - virtual bool calc_value(String *arg, String *buffer) = 0; + virtual bool calc_value(const String *arg, String *buffer) = 0; }; @@ -125,7 +125,7 @@ } protected: - virtual bool calc_value(String *arg, String *buffer); + virtual bool calc_value(const String *arg, String *buffer); }; @@ -157,7 +157,7 @@ } protected: - virtual bool calc_value(String *arg, String *buffer); + virtual bool calc_value(const String *arg, String *buffer); }; diff -Nru mariadb-10.1-10.1.25/sql/item_row.cc mariadb-10.1-10.1.30/sql/item_row.cc --- mariadb-10.1-10.1.25/sql/item_row.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_row.cc 2017-12-21 15:48:48.000000000 +0000 @@ -24,7 +24,6 @@ #include "sql_class.h" // THD, set_var.h: THD #include "set_var.h" - void Item_row::illegal_method_call(const char *method) { DBUG_ENTER("Item_row::illegal_method_call"); @@ -110,13 +109,14 @@ } -void Item_row::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_row::fix_after_pullout(st_select_lex *new_parent, Item **ref, + bool merge) { used_tables_and_const_cache_init(); not_null_tables_cache= 0; for (uint i= 0; i < arg_count; i++) { - args[i]->fix_after_pullout(new_parent, &args[i]); + args[i]->fix_after_pullout(new_parent, &args[i], merge); used_tables_and_const_cache_join(args[i]); not_null_tables_cache|= args[i]->not_null_tables(); } diff -Nru mariadb-10.1-10.1.25/sql/item_row.h mariadb-10.1-10.1.30/sql/item_row.h --- mariadb-10.1-10.1.25/sql/item_row.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_row.h 2017-12-21 15:48:48.000000000 +0000 @@ -47,13 +47,10 @@ Item_row(THD *thd, List &list): Item(thd), Item_args(thd, list), not_null_tables_cache(0), with_null(0) { } - Item_row(THD *thd, Item_row *item): - Item(thd), - Item_args(item), - Used_tables_and_const_cache(item), - not_null_tables_cache(0), - with_null(0) - {} + Item_row(THD *thd, Item_row *row): + Item(thd), Item_args(thd, static_cast(row)), Used_tables_and_const_cache(), + not_null_tables_cache(0), with_null(0) + { } enum Type type() const { return ROW_ITEM; }; void illegal_method_call(const char *); @@ -83,7 +80,7 @@ return 0; }; bool fix_fields(THD *thd, Item **ref); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); void cleanup(); void split_sum_func(THD *thd, Item **ref_pointer_array, List &fields, uint flags); diff -Nru mariadb-10.1-10.1.25/sql/item_strfunc.cc mariadb-10.1-10.1.30/sql/item_strfunc.cc --- mariadb-10.1-10.1.25/sql/item_strfunc.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_strfunc.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1281,6 +1281,13 @@ /*********************************************************************/ +bool Item_func_regexp_replace::fix_fields(THD *thd, Item **ref) +{ + re.set_recursion_limit(thd); + return Item_str_func::fix_fields(thd, ref); +} + + void Item_func_regexp_replace::fix_length_and_dec() { if (agg_arg_charsets_for_string_result_with_comparison(collation, args, 3)) @@ -1416,6 +1423,13 @@ } +bool Item_func_regexp_substr::fix_fields(THD *thd, Item **ref) +{ + re.set_recursion_limit(thd); + return Item_str_func::fix_fields(thd, ref); +} + + void Item_func_regexp_substr::fix_length_and_dec() { if (agg_arg_charsets_for_string_result_with_comparison(collation, args, 2)) @@ -2835,6 +2849,20 @@ } +void Item_func_char::print(String *str, enum_query_type query_type) +{ + str->append(Item_func_char::func_name()); + str->append('('); + print_args(str, 0, query_type); + if (collation.collation != &my_charset_bin) + { + str->append(C_STRING_WITH_LEN(" using ")); + str->append(collation.collation->csname); + } + str->append(')'); +} + + String *Item_func_char::val_str(String *str) { DBUG_ASSERT(fixed == 1); @@ -4400,7 +4428,7 @@ if (res) { // guaranty UTF-8 string for names - if (my_charset_same(res->charset(), &my_charset_utf8_general_ci)) + if (my_charset_same(res->charset(), DYNCOL_UTF)) { keys_str[i].length= res->length(); keys_str[i].str= sql_strmake(res->ptr(), res->length()); @@ -4411,11 +4439,11 @@ uint dummy_errors; char *str= (char *)sql_alloc((strlen= res->length() * - my_charset_utf8_general_ci.mbmaxlen + 1)); + DYNCOL_UTF->mbmaxlen + 1)); if (str) { keys_str[i].length= - copy_and_convert(str, strlen, &my_charset_utf8_general_ci, + copy_and_convert(str, strlen, DYNCOL_UTF, res->ptr(), res->length(), res->charset(), &dummy_errors); keys_str[i].str= str; @@ -4634,9 +4662,10 @@ char *ptr; size_t length, alloc_length; dynstr_reassociate(&json, &ptr, &length, &alloc_length); - str->reset(ptr, length, alloc_length, &my_charset_utf8_general_ci); + str->reset(ptr, length, alloc_length, DYNCOL_UTF); null_value= FALSE; } + str->set_charset(DYNCOL_UTF); return str; null: @@ -4734,7 +4763,7 @@ return 1; } - if (my_charset_same(nm->charset(), &my_charset_utf8_general_ci)) + if (my_charset_same(nm->charset(), DYNCOL_UTF)) { buf.str= (char *) nm->ptr(); buf.length= nm->length(); @@ -4744,11 +4773,11 @@ uint strlen; uint dummy_errors; buf.str= (char *)sql_alloc((strlen= nm->length() * - my_charset_utf8_general_ci.mbmaxlen + 1)); + DYNCOL_UTF->mbmaxlen + 1)); if (buf.str) { buf.length= - copy_and_convert(buf.str, strlen, &my_charset_utf8_general_ci, + copy_and_convert(buf.str, strlen, DYNCOL_UTF, nm->ptr(), nm->length(), nm->charset(), &dummy_errors); } @@ -5187,7 +5216,6 @@ goto null; str->length(0); - str->set_charset(&my_charset_utf8_general_ci); for (i= 0; i < count; i++) { append_identifier(current_thd, str, names[i].str, names[i].length); @@ -5197,6 +5225,7 @@ null_value= FALSE; if (names) my_free(names); + str->set_charset(DYNCOL_UTF); return str; null: diff -Nru mariadb-10.1-10.1.25/sql/item_strfunc.h mariadb-10.1-10.1.30/sql/item_strfunc.h --- mariadb-10.1-10.1.25/sql/item_strfunc.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_strfunc.h 2017-12-21 15:48:48.000000000 +0000 @@ -305,6 +305,7 @@ DBUG_VOID_RETURN; } String *val_str(String *str); + bool fix_fields(THD *thd, Item **ref); void fix_length_and_dec(); const char *func_name() const { return "regexp_replace"; } }; @@ -325,6 +326,7 @@ DBUG_VOID_RETURN; } String *val_str(String *str); + bool fix_fields(THD *thd, Item **ref); void fix_length_and_dec(); const char *func_name() const { return "regexp_substr"; } }; @@ -782,6 +784,7 @@ max_length= arg_count * 4; } const char *func_name() const { return "char"; } + void print(String *str, enum_query_type query_type); }; @@ -1281,14 +1284,14 @@ class Item_func_dyncol_json: public Item_str_func { public: - Item_func_dyncol_json(THD *thd, Item *str): Item_str_func(thd, str) {} + Item_func_dyncol_json(THD *thd, Item *str): Item_str_func(thd, str) + {collation.set(DYNCOL_UTF);} const char *func_name() const{ return "column_json"; } String *val_str(String *); void fix_length_and_dec() { max_length= MAX_BLOB_WIDTH; maybe_null= 1; - collation.set(&my_charset_bin); decimals= 0; } }; @@ -1321,7 +1324,8 @@ class Item_func_dyncol_list: public Item_str_func { public: - Item_func_dyncol_list(THD *thd, Item *str): Item_str_func(thd, str) {}; + Item_func_dyncol_list(THD *thd, Item *str): Item_str_func(thd, str) + {collation.set(DYNCOL_UTF);} void fix_length_and_dec() { maybe_null= 1; max_length= MAX_BLOB_WIDTH; }; const char *func_name() const{ return "column_list"; } String *val_str(String *); diff -Nru mariadb-10.1-10.1.25/sql/item_subselect.cc mariadb-10.1-10.1.30/sql/item_subselect.cc --- mariadb-10.1-10.1.25/sql/item_subselect.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_subselect.cc 2017-12-21 15:48:48.000000000 +0000 @@ -330,7 +330,8 @@ while ((upper= it++)) { - if (upper->item->walk(&Item::enumerate_field_refs_processor, FALSE, arg)) + if (upper->item && + upper->item->walk(&Item::enumerate_field_refs_processor, FALSE, arg)) return TRUE; } return FALSE; @@ -446,7 +447,8 @@ OUTER_REF_TABLE_BIT. */ -void Item_subselect::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_subselect::fix_after_pullout(st_select_lex *new_parent, + Item **ref, bool merge) { recalc_used_tables(new_parent, TRUE); parent_select= new_parent; @@ -1152,7 +1154,8 @@ /* as far as we moved content to upper level we have to fix dependences & Co */ - substitution->fix_after_pullout(select_lex->outer_select(), &substitution); + substitution->fix_after_pullout(select_lex->outer_select(), + &substitution, TRUE); } DBUG_RETURN(false); } @@ -1438,6 +1441,10 @@ DBUG_ENTER("Item_in_subselect::Item_in_subselect"); DBUG_PRINT("info", ("in_strategy: %u", (uint)in_strategy)); left_expr_orig= left_expr= left_exp; + /* prepare to possible disassembling the item in convert_subq_to_sj() */ + if (left_exp->type() == Item::ROW_ITEM) + left_expr_orig= new (thd->mem_root) + Item_row(thd, static_cast(left_exp)); func= &eq_creator; init(select_lex, new (thd->mem_root) select_exists_subselect(thd, this)); max_columns= UINT_MAX; @@ -1461,6 +1468,10 @@ { DBUG_ENTER("Item_allany_subselect::Item_allany_subselect"); left_expr_orig= left_expr= left_exp; + /* prepare to possible disassembling the item in convert_subq_to_sj() */ + if (left_exp->type() == Item::ROW_ITEM) + left_expr_orig= new (thd->mem_root) + Item_row(thd, static_cast(left_exp)); func= func_creator(all_arg); init(select_lex, new (thd->mem_root) select_exists_subselect(thd, this)); max_columns= 1; @@ -2925,7 +2936,7 @@ goto out; } } - outer_exp->fix_after_pullout(unit->outer_select(), &outer_exp); + outer_exp->fix_after_pullout(unit->outer_select(), &outer_exp, FALSE); outer_exp->update_used_tables(); outer.push_back(outer_exp, thd->mem_root); } @@ -3306,10 +3317,11 @@ } -void Item_in_subselect::fix_after_pullout(st_select_lex *new_parent, Item **ref) +void Item_in_subselect::fix_after_pullout(st_select_lex *new_parent, + Item **ref, bool merge) { - left_expr->fix_after_pullout(new_parent, &left_expr); - Item_subselect::fix_after_pullout(new_parent, ref); + left_expr->fix_after_pullout(new_parent, &left_expr, merge); + Item_subselect::fix_after_pullout(new_parent, ref, merge); used_tables_cache |= left_expr->used_tables(); } @@ -3413,7 +3425,8 @@ { DBUG_ASSERT(thd); uint cols_num= left_expr->cols(); - if (!abort_on_null && left_expr->maybe_null && !pushed_cond_guards) + if (!abort_on_null && !pushed_cond_guards && + (left_expr->maybe_null || cols_num > 1)) { if (!(pushed_cond_guards= (bool*)thd->alloc(sizeof(bool) * cols_num))) return TRUE; diff -Nru mariadb-10.1-10.1.25/sql/item_subselect.h mariadb-10.1-10.1.30/sql/item_subselect.h --- mariadb-10.1-10.1.25/sql/item_subselect.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_subselect.h 2017-12-21 15:48:48.000000000 +0000 @@ -169,7 +169,7 @@ } bool fix_fields(THD *thd, Item **ref); bool mark_as_dependent(THD *thd, st_select_lex *select, Item *item); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); void recalc_used_tables(st_select_lex *new_parent, bool after_pullout); virtual bool exec(); /* @@ -607,7 +607,7 @@ virtual void print(String *str, enum_query_type query_type); bool fix_fields(THD *thd, Item **ref); void fix_length_and_dec(); - void fix_after_pullout(st_select_lex *new_parent, Item **ref); + void fix_after_pullout(st_select_lex *new_parent, Item **ref, bool merge); bool const_item() const { return Item_subselect::const_item() && left_expr->const_item(); diff -Nru mariadb-10.1-10.1.25/sql/item_sum.cc mariadb-10.1-10.1.30/sql/item_sum.cc --- mariadb-10.1-10.1.25/sql/item_sum.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_sum.cc 2017-12-21 15:48:48.000000000 +0000 @@ -3594,7 +3594,7 @@ } } str->append(STRING_WITH_LEN(" separator \'")); - str->append(*separator); + str->append_for_single_quote(separator->ptr(), separator->length()); str->append(STRING_WITH_LEN("\')")); } diff -Nru mariadb-10.1-10.1.25/sql/item_timefunc.cc mariadb-10.1-10.1.30/sql/item_timefunc.cc --- mariadb-10.1-10.1.25/sql/item_timefunc.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_timefunc.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1793,9 +1793,18 @@ ltime->hour= TIME_MAX_HOUR+1; check_time_range(ltime, decimals, &unused); - make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN, - err->ptr(), err->length(), - MYSQL_TIMESTAMP_TIME, NullS); + if (!err) + { + ErrConvInteger err2(sec, unsigned_flag); + make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN, + &err2, MYSQL_TIMESTAMP_TIME, NullS); + } + else + { + ErrConvString err2(err); + make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN, + &err2, MYSQL_TIMESTAMP_TIME, NullS); + } return 0; } @@ -2396,7 +2405,7 @@ if (copier.copy_with_warn(cast_cs, &tmp_value, strcs, str->ptr(), str->length(), cast_length)) { - null_value= 1; // In strict mode: malformed data or could not convert + null_value= 1; // EOM return 0; } check_truncation_with_warn(str, copier.source_end_pos() - str->ptr()); @@ -3100,7 +3109,7 @@ const char *val= format; const char *end= format + length; - for (; val != end && val != end; val++) + for (; val != end; val++) { if (*val == '%' && val+1 != end) { diff -Nru mariadb-10.1-10.1.25/sql/item_timefunc.h mariadb-10.1-10.1.30/sql/item_timefunc.h --- mariadb-10.1-10.1.25/sql/item_timefunc.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/item_timefunc.h 2017-12-21 15:48:48.000000000 +0000 @@ -502,8 +502,16 @@ { return val_decimal_from_date(decimal_value); } Field *create_field_for_create_select(TABLE *table) { return tmp_table_field_from_field_type(table, false, false); } +#if MARIADB_VERSION_ID > 100300 +#error This code should be removed in 10.3, to use the derived save_in_field() +#else int save_in_field(Field *field, bool no_conversions) - { return save_date_in_field(field); } + { + return field_type() == MYSQL_TYPE_TIME ? + save_time_in_field(field) : + save_date_in_field(field); + } +#endif void fix_length_and_dec(); }; diff -Nru mariadb-10.1-10.1.25/sql/lex.h mariadb-10.1-10.1.30/sql/lex.h --- mariadb-10.1-10.1.25/sql/lex.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/lex.h 2017-12-21 15:48:48.000000000 +0000 @@ -179,6 +179,7 @@ { "DELAYED", SYM(DELAYED_SYM)}, { "DELAY_KEY_WRITE", SYM(DELAY_KEY_WRITE_SYM)}, { "DELETE", SYM(DELETE_SYM)}, + { "DELETE_DOMAIN_ID", SYM(DELETE_DOMAIN_ID_SYM)}, { "DESC", SYM(DESC)}, { "DESCRIBE", SYM(DESCRIBE)}, { "DES_KEY_FILE", SYM(DES_KEY_FILE)}, diff -Nru mariadb-10.1-10.1.25/sql/log.cc mariadb-10.1-10.1.30/sql/log.cc --- mariadb-10.1-10.1.25/sql/log.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/log.cc 2017-12-21 15:48:48.000000000 +0000 @@ -6622,6 +6622,120 @@ purge(); } + +/** + Searches for the first (oldest) binlog file name in in the binlog index. + + @param[in,out] buf_arg pointer to a buffer to hold found + the first binary log file name + @return NULL on success, otherwise error message +*/ +static const char* get_first_binlog(char* buf_arg) +{ + IO_CACHE *index_file; + size_t length; + char fname[FN_REFLEN]; + const char* errmsg= NULL; + + DBUG_ENTER("get_first_binlog"); + + DBUG_ASSERT(mysql_bin_log.is_open()); + + mysql_bin_log.lock_index(); + + index_file=mysql_bin_log.get_index_file(); + if (reinit_io_cache(index_file, READ_CACHE, (my_off_t) 0, 0, 0)) + { + errmsg= "failed to create a cache on binlog index"; + goto end; + } + /* The file ends with EOF or empty line */ + if ((length=my_b_gets(index_file, fname, sizeof(fname))) <= 1) + { + errmsg= "empty binlog index"; + goto end; + } + else + { + fname[length-1]= 0; // Remove end \n + } + if (normalize_binlog_name(buf_arg, fname, false)) + { + errmsg= "cound not normalize the first file name in the binlog index"; + goto end; + } +end: + mysql_bin_log.unlock_index(); + + DBUG_RETURN(errmsg); +} + +/** + Check weather the gtid binlog state can safely remove gtid + domains passed as the argument. A safety condition is satisfied when + there are no events from the being deleted domains in the currently existing + binlog files. Upon successful check the supplied domains are removed + from @@gtid_binlog_state. The caller is supposed to rotate binlog so that + the active latest file won't have the deleted domains in its Gtid_list header. + + @param domain_drop_lex gtid domain id sequence from lex. + Passed as a pointer to dynamic array must be not empty + unless pointer value NULL. + @retval zero on success + @retval > 0 ineffective call none from the *non* empty + gtid domain sequence is deleted + @retval < 0 on error +*/ +static int do_delete_gtid_domain(DYNAMIC_ARRAY *domain_drop_lex) +{ + int rc= 0; + Gtid_list_log_event *glev= NULL; + char buf[FN_REFLEN]; + File file; + IO_CACHE cache; + const char* errmsg= NULL; + char errbuf[MYSQL_ERRMSG_SIZE]= {0}; + + if (!domain_drop_lex) + return 0; // still "effective" having empty domain sequence to delete + + DBUG_ASSERT(domain_drop_lex->elements > 0); + mysql_mutex_assert_owner(mysql_bin_log.get_log_lock()); + + if ((errmsg= get_first_binlog(buf)) != NULL) + goto end; + bzero((char*) &cache, sizeof(cache)); + if ((file= open_binlog(&cache, buf, &errmsg)) == (File) -1) + goto end; + errmsg= get_gtid_list_event(&cache, &glev); + end_io_cache(&cache); + mysql_file_close(file, MYF(MY_WME)); + + DBUG_EXECUTE_IF("inject_binlog_delete_domain_init_error", + errmsg= "injected error";); + if (errmsg) + goto end; + errmsg= rpl_global_gtid_binlog_state.drop_domain(domain_drop_lex, + glev, errbuf); + +end: + if (errmsg) + { + if (strlen(errmsg) > 0) + { + my_error(ER_BINLOG_CANT_DELETE_GTID_DOMAIN, MYF(0), errmsg); + rc= -1; + } + else + { + rc= 1; + } + } + delete glev; + + return rc; +} + /** The method is a shortcut of @c rotate() and @c purge(). LOCK_log is acquired prior to rotate and is released after it. @@ -6631,9 +6745,10 @@ @retval nonzero - error in rotating routine. */ -int MYSQL_BIN_LOG::rotate_and_purge(bool force_rotate) +int MYSQL_BIN_LOG::rotate_and_purge(bool force_rotate, + DYNAMIC_ARRAY *domain_drop_lex) { - int error= 0; + int err_gtid=0, error= 0; ulong prev_binlog_id; DBUG_ENTER("MYSQL_BIN_LOG::rotate_and_purge"); bool check_purge= false; @@ -6641,7 +6756,14 @@ //todo: fix the macro def and restore safe_mutex_assert_not_owner(&LOCK_log); mysql_mutex_lock(&LOCK_log); prev_binlog_id= current_binlog_id; - if ((error= rotate(force_rotate, &check_purge))) + + if ((err_gtid= do_delete_gtid_domain(domain_drop_lex))) + { + // inffective attempt to delete merely skips rotate and purge + if (err_gtid < 0) + error= 1; // otherwise error is propagated the user + } + else if ((error= rotate(force_rotate, &check_purge))) check_purge= false; /* NOTE: Run purge_logs wo/ holding LOCK_log because it does not need @@ -7043,8 +7165,15 @@ mode. Also, do not write the cached updates to binlog if binary logging is disabled (log-bin/sql_log_bin). */ - if (wsrep_emulate_bin_log || !(thd->variables.option_bits & OPTION_BIN_LOG)) + if (wsrep_emulate_bin_log) + { DBUG_RETURN(0); + } + else if (!(thd->variables.option_bits & OPTION_BIN_LOG)) + { + cache_mngr->need_unlog= false; + DBUG_RETURN(0); + } entry.thd= thd; entry.cache_mngr= cache_mngr; @@ -9322,8 +9451,10 @@ if (using_heuristic_recover()) { + mysql_mutex_lock(&LOCK_log); /* generate a new binlog to mask a corrupted one */ open(opt_name, LOG_BIN, 0, 0, WRITE_CACHE, max_binlog_size, 0, TRUE); + mysql_mutex_unlock(&LOCK_log); cleanup(); return 1; } @@ -9365,11 +9496,19 @@ if (err) DBUG_RETURN(0); + + bool need_unlog= cache_mngr->need_unlog; + /* + The transaction won't need the flag anymore. + Todo/fixme: consider to move the statement into cache_mngr->reset() + relocated to the current or later point. + */ + cache_mngr->need_unlog= false; /* If using explicit user XA, we will not have XID. We must still return a non-zero cookie (as zero cookie signals error). */ - if (!xid || !cache_mngr->need_unlog) + if (!xid || !need_unlog) DBUG_RETURN(BINLOG_COOKIE_DUMMY(cache_mngr->delayed_error)); else DBUG_RETURN(BINLOG_COOKIE_MAKE(cache_mngr->binlog_id, @@ -9442,6 +9581,9 @@ if (b->binlog_id == binlog_id) { --b->xid_count; + + DBUG_ASSERT(b->xid_count >= 0); // catch unmatched (++) decrement + break; } first= false; @@ -9643,6 +9785,8 @@ { THD_STAGE_INFO(thd, stage_binlog_processing_checkpoint_notify); DEBUG_SYNC(thd, "binlog_background_thread_before_mark_xid_done"); + /* Set the thread start time */ + thd->set_time(); /* Grab next pointer first, as mark_xid_done() may free the element. */ next= queue->next_in_queue; mysql_bin_log.mark_xid_done(queue->binlog_id, true); @@ -9769,8 +9913,8 @@ sizeof(xev->xid)); if (!x || my_hash_insert(&xids, x)) goto err2; - break; } + break; } case BINLOG_CHECKPOINT_EVENT: if (first_round && do_xa) @@ -10215,6 +10359,73 @@ } } + +/* + Find the Gtid_list_log_event at the start of a binlog. + + NULL for ok, non-NULL error message for error. + + If ok, then the event is returned in *out_gtid_list. This can be NULL if we + get back to binlogs written by old server version without GTID support. If + so, it means we have reached the point to start from, as no GTID events can + exist in earlier binlogs. +*/ +const char * +get_gtid_list_event(IO_CACHE *cache, Gtid_list_log_event **out_gtid_list) +{ + Format_description_log_event init_fdle(BINLOG_VERSION); + Format_description_log_event *fdle; + Log_event *ev; + const char *errormsg = NULL; + + *out_gtid_list= NULL; + + if (!(ev= Log_event::read_log_event(cache, 0, &init_fdle, + opt_master_verify_checksum)) || + ev->get_type_code() != FORMAT_DESCRIPTION_EVENT) + { + if (ev) + delete ev; + return "Could not read format description log event while looking for " + "GTID position in binlog"; + } + + fdle= static_cast(ev); + + for (;;) + { + Log_event_type typ; + + ev= Log_event::read_log_event(cache, 0, fdle, opt_master_verify_checksum); + if (!ev) + { + errormsg= "Could not read GTID list event while looking for GTID " + "position in binlog"; + break; + } + typ= ev->get_type_code(); + if (typ == GTID_LIST_EVENT) + break; /* Done, found it */ + if (typ == START_ENCRYPTION_EVENT) + { + if (fdle->start_decryption((Start_encryption_log_event*) ev)) + errormsg= "Could not set up decryption for binlog."; + } + delete ev; + if (typ == ROTATE_EVENT || typ == STOP_EVENT || + typ == FORMAT_DESCRIPTION_EVENT || typ == START_ENCRYPTION_EVENT) + continue; /* Continue looking */ + + /* We did not find any Gtid_list_log_event, must be old binlog. */ + ev= NULL; + break; + } + + delete fdle; + *out_gtid_list= static_cast(ev); + return errormsg; +} + struct st_mysql_storage_engine binlog_storage_engine= { MYSQL_HANDLERTON_INTERFACE_VERSION }; diff -Nru mariadb-10.1-10.1.25/sql/log_event.cc mariadb-10.1-10.1.30/sql/log_event.cc --- mariadb-10.1-10.1.25/sql/log_event.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/log_event.cc 2017-12-21 15:48:48.000000000 +0000 @@ -371,12 +371,6 @@ #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) -static void clear_all_errors(THD *thd, Relay_log_info *rli) -{ - thd->is_slave_error = 0; - thd->clear_error(); -} - inline int idempotent_error_code(int err_code) { int ret= 0; @@ -2475,8 +2469,8 @@ case 2: { strmake(typestr, "ENUM(2 bytes)", typestr_length); - if (!ptr) - goto return_null; + if (!ptr) + goto return_null; int32 i32= uint2korr(ptr); my_b_printf(file, "%d", i32); @@ -4255,7 +4249,7 @@ DBUG_PRINT("info", ("log_pos: %lu", (ulong) log_pos)); - clear_all_errors(thd, const_cast(rli)); + thd->clear_error(1); current_stmt_is_commit= is_commit(); DBUG_ASSERT(!current_stmt_is_commit || !rgi->tables_to_lock); @@ -4475,7 +4469,7 @@ to check/fix it. */ if (mysql_test_parse_for_slave(thd, thd->query(), thd->query_length())) - clear_all_errors(thd, const_cast(rli)); /* Can ignore query */ + thd->clear_error(1); else { rli->report(ERROR_LEVEL, expected_error, rgi->gtid_info(), @@ -4556,7 +4550,7 @@ ignored_error_code(actual_error)) { DBUG_PRINT("info",("error ignored")); - clear_all_errors(thd, const_cast(rli)); + thd->clear_error(1); if (actual_error == ER_QUERY_INTERRUPTED || actual_error == ER_CONNECTION_KILLED) thd->reset_killed(); @@ -6025,8 +6019,7 @@ new_db.str= (char *) rpl_filter->get_rewrite_db(db, &new_db.length); thd->set_db(new_db.str, new_db.length); DBUG_ASSERT(thd->query() == 0); - thd->is_slave_error= 0; - clear_all_errors(thd, const_cast(rli)); + thd->clear_error(1); /* see Query_log_event::do_apply_event() and BUG#13360 */ DBUG_ASSERT(!rgi->m_table_map.count()); @@ -6036,7 +6029,7 @@ */ lex_start(thd); thd->lex->local_file= local_fname; - thd->reset_for_next_command(); + thd->reset_for_next_command(0); // Errors are cleared above /* We test replicate_*_db rules. Note that we have already prepared @@ -6635,8 +6628,10 @@ if (thd_arg->transaction.stmt.trans_did_wait() || thd_arg->transaction.all.trans_did_wait()) flags2|= FL_WAITED; - if (sql_command_flags[thd->lex->sql_command] & - (CF_DISALLOW_IN_RO_TRANS | CF_AUTO_COMMIT_TRANS)) + if (thd_arg->transaction.stmt.trans_did_ddl() || + thd_arg->transaction.stmt.has_created_dropped_temp_table() || + thd_arg->transaction.all.trans_did_ddl() || + thd_arg->transaction.all.has_created_dropped_temp_table()) flags2|= FL_DDL; else if (is_transactional) flags2|= FL_TRANSACTIONAL; @@ -7862,21 +7857,6 @@ we keep the flags set to UNDEF_F. */ uint bytes_read= ((val + val_len) - buf_start); -#ifndef DBUG_OFF - bool old_pre_checksum_fd= description_event->is_version_before_checksum( - &description_event->server_version_split); -#endif - DBUG_ASSERT((bytes_read == data_written - - (old_pre_checksum_fd || - (description_event->checksum_alg == - BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN) - || - (bytes_read == data_written -1 - - (old_pre_checksum_fd || - (description_event->checksum_alg == - BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN)); if ((data_written - bytes_read) > 0) { flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + @@ -10089,7 +10069,7 @@ slave_rows_error_report(WARNING_LEVEL, error, rgi, thd, table, get_type_str(), RPL_LOG_NAME, (ulong) log_pos); - clear_all_errors(thd, const_cast(rli)); + thd->clear_error(1); error= 0; if (idempotent_error == 0) break; @@ -10141,7 +10121,7 @@ slave_rows_error_report(WARNING_LEVEL, error, rgi, thd, table, get_type_str(), RPL_LOG_NAME, (ulong) log_pos); - clear_all_errors(thd, const_cast(rli)); + thd->clear_error(1); error= 0; } } // if (table) diff -Nru mariadb-10.1-10.1.25/sql/log.h mariadb-10.1-10.1.30/sql/log.h --- mariadb-10.1-10.1.25/sql/log.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/log.h 2017-12-21 15:48:48.000000000 +0000 @@ -755,7 +755,7 @@ int update_log_index(LOG_INFO* linfo, bool need_update_threads); int rotate(bool force_rotate, bool* check_purge); void checkpoint_and_purge(ulong binlog_id); - int rotate_and_purge(bool force_rotate); + int rotate_and_purge(bool force_rotate, DYNAMIC_ARRAY* drop_gtid_domain= NULL); /** Flush binlog cache and synchronize to disk. @@ -1165,4 +1165,9 @@ return &tc_log_mmap; } + +class Gtid_list_log_event; +const char * +get_gtid_list_event(IO_CACHE *cache, Gtid_list_log_event **out_gtid_list); + #endif /* LOG_H */ diff -Nru mariadb-10.1-10.1.25/sql/multi_range_read.cc mariadb-10.1-10.1.30/sql/multi_range_read.cc --- mariadb-10.1-10.1.25/sql/multi_range_read.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/multi_range_read.cc 2017-12-21 15:48:48.000000000 +0000 @@ -1224,28 +1224,18 @@ ptrdiff_t bytes_for_keys= (full_buf_end - full_buf) - bytes_for_rowids; - if (bytes_for_keys < key_buff_elem_size + 1) - { - ptrdiff_t add= key_buff_elem_size + 1 - bytes_for_keys; - bytes_for_keys= key_buff_elem_size + 1; - bytes_for_rowids -= add; - } - - if (bytes_for_rowids < (ptrdiff_t)rowid_buf_elem_size + 1) - { - ptrdiff_t add= (ptrdiff_t)(rowid_buf_elem_size + 1 - bytes_for_rowids); - bytes_for_rowids= (ptrdiff_t)rowid_buf_elem_size + 1; - bytes_for_keys -= add; - } + if (bytes_for_keys < key_buff_elem_size + 1 || + bytes_for_rowids < (ptrdiff_t)rowid_buf_elem_size + 1) + return TRUE; /* Failed to provide minimum space for one of the buffers */ rowid_buffer_end= full_buf + bytes_for_rowids; rowid_buffer.set_buffer_space(full_buf, rowid_buffer_end); key_buffer= &backward_key_buf; key_buffer->set_buffer_space(rowid_buffer_end, full_buf_end); - if (!key_buffer->have_space_for(key_buff_elem_size) || - !rowid_buffer.have_space_for((size_t)rowid_buf_elem_size)) - return TRUE; /* Failed to provide minimum space for one of the buffers */ + /* The above code guarantees that the buffers are big enough */ + DBUG_ASSERT(key_buffer->have_space_for(key_buff_elem_size) && + rowid_buffer.have_space_for((size_t)rowid_buf_elem_size)); return FALSE; } diff -Nru mariadb-10.1-10.1.25/sql/mysqld.cc mariadb-10.1-10.1.30/sql/mysqld.cc --- mariadb-10.1-10.1.25/sql/mysqld.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/mysqld.cc 2017-12-21 15:48:48.000000000 +0000 @@ -878,7 +878,7 @@ key_LOCK_prepared_stmt_count, key_LOCK_rpl_status, key_LOCK_server_started, key_LOCK_status, key_LOCK_show_status, - key_LOCK_system_variables_hash, key_LOCK_thd_data, + key_LOCK_system_variables_hash, key_LOCK_thd_data, key_LOCK_thd_kill, key_LOCK_user_conn, key_LOCK_uuid_short_generator, key_LOG_LOCK_log, key_master_info_data_lock, key_master_info_run_lock, key_master_info_sleep_lock, key_master_info_start_stop_lock, @@ -949,6 +949,7 @@ { &key_LOCK_wait_commit, "wait_for_commit::LOCK_wait_commit", 0}, { &key_LOCK_gtid_waiting, "gtid_waiting::LOCK_gtid_waiting", 0}, { &key_LOCK_thd_data, "THD::LOCK_thd_data", 0}, + { &key_LOCK_thd_kill, "THD::LOCK_thd_kill", 0}, { &key_LOCK_user_conn, "LOCK_user_conn", PSI_FLAG_GLOBAL}, { &key_LOCK_uuid_short_generator, "LOCK_uuid_short_generator", PSI_FLAG_GLOBAL}, { &key_LOG_LOCK_log, "LOG::LOCK_log", 0}, @@ -1650,7 +1651,7 @@ if (WSREP(tmp) && (tmp->wsrep_exec_mode==REPL_RECV || tmp->wsrep_applier)) continue; #endif - tmp->killed= KILL_SERVER_HARD; + tmp->set_killed(KILL_SERVER_HARD); MYSQL_CALLBACK(thread_scheduler, post_kill_notification, (tmp)); mysql_mutex_lock(&tmp->LOCK_thd_data); if (tmp->mysys_var) @@ -1738,7 +1739,7 @@ if (WSREP(tmp) && tmp->wsrep_exec_mode==REPL_RECV) { sql_print_information("closing wsrep system thread"); - tmp->killed= KILL_CONNECTION; + tmp->set_killed(KILL_CONNECTION); MYSQL_CALLBACK(thread_scheduler, post_kill_notification, (tmp)); if (tmp->mysys_var) { @@ -3541,8 +3542,6 @@ extern "C" void *my_str_malloc_mysqld(size_t size); -extern "C" void my_str_free_mysqld(void *ptr); -extern "C" void *my_str_realloc_mysqld(void *ptr, size_t size); void *my_str_malloc_mysqld(size_t size) { @@ -3550,17 +3549,6 @@ } -void my_str_free_mysqld(void *ptr) -{ - my_free(ptr); -} - -void *my_str_realloc_mysqld(void *ptr, size_t size) -{ - return my_realloc(ptr, size, MYF(MY_FAE)); -} - - #ifdef __WIN__ pthread_handler_t handle_shutdown(void *arg) @@ -3586,7 +3574,6 @@ #endif -#ifndef EMBEDDED_LIBRARY /** This function is used to check for stack overrun for pathological cases of regular expressions and 'like' expressions. @@ -3615,18 +3602,10 @@ return 0; return check_enough_stack_size_slow(); } -#endif - -/* - Initialize my_str_malloc() and my_str_free() -*/ static void init_libstrings() { - my_str_malloc= &my_str_malloc_mysqld; - my_str_free= &my_str_free_mysqld; - my_str_realloc= &my_str_realloc_mysqld; #ifndef EMBEDDED_LIBRARY my_string_stack_guard= check_enough_stack_size; #endif @@ -3637,12 +3616,13 @@ static void init_pcre() { pcre_malloc= pcre_stack_malloc= my_str_malloc_mysqld; - pcre_free= pcre_stack_free= my_str_free_mysqld; -#ifndef EMBEDDED_LIBRARY + pcre_free= pcre_stack_free= my_free; pcre_stack_guard= check_enough_stack_size_slow; /* See http://pcre.org/original/doc/html/pcrestack.html */ - my_pcre_frame_size= -pcre_exec(NULL, NULL, NULL, -999, -999, 0, NULL, 0) + 16; -#endif + my_pcre_frame_size= -pcre_exec(NULL, NULL, NULL, -999, -999, 0, NULL, 0); + // pcre can underestimate its stack usage. Use a safe value, as in the manual + set_if_bigger(my_pcre_frame_size, 500); + my_pcre_frame_size += 16; // Again, safety margin, see the manual } @@ -3943,11 +3923,16 @@ thd->status_var.local_memory_used > (int64)thd->variables.max_mem_used && !thd->killed && !thd->get_stmt_da()->is_set()) { - char buf[1024]; - thd->killed= KILL_QUERY; + /* Ensure we don't get called here again */ + char buf[50], *buf2; + thd->set_killed(KILL_QUERY); my_snprintf(buf, sizeof(buf), "--max-thread-mem-used=%llu", thd->variables.max_mem_used); - my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), buf); + if ((buf2= (char*) thd->alloc(256))) + { + my_snprintf(buf2, 256, ER_THD(thd, ER_OPTION_PREVENTS_STATEMENT), buf); + thd->set_killed(KILL_QUERY, ER_OPTION_PREVENTS_STATEMENT, buf2); + } } DBUG_ASSERT((longlong) thd->status_var.local_memory_used >= 0); } @@ -5743,9 +5728,6 @@ #ifdef __WIN__ if (!opt_console) { - if (reopen_fstreams(log_error_file, stdout, stderr)) - unireg_abort(1); - setbuf(stderr, NULL); FreeConsole(); // Remove window } @@ -6318,7 +6300,7 @@ DBUG_PRINT("error", ("Can't create thread to handle request (error %d)", error)); - thd->killed= KILL_CONNECTION; // Safety + thd->set_killed(KILL_CONNECTION); // Safety mysql_mutex_unlock(&LOCK_thread_count); mysql_mutex_lock(&LOCK_connection_count); @@ -9222,8 +9204,29 @@ } #ifdef WITH_WSREP case OPT_WSREP_CAUSAL_READS: - wsrep_causal_reads_update(&global_system_variables); + { + if (global_system_variables.wsrep_causal_reads) + { + WSREP_WARN("option --wsrep-causal-reads is deprecated"); + if (!(global_system_variables.wsrep_sync_wait & WSREP_SYNC_WAIT_BEFORE_READ)) + { + WSREP_WARN("--wsrep-causal-reads=ON takes precedence over --wsrep-sync-wait=%u. " + "WSREP_SYNC_WAIT_BEFORE_READ is on", + global_system_variables.wsrep_sync_wait); + global_system_variables.wsrep_sync_wait |= WSREP_SYNC_WAIT_BEFORE_READ; + } + } + else + { + if (global_system_variables.wsrep_sync_wait & WSREP_SYNC_WAIT_BEFORE_READ) { + WSREP_WARN("--wsrep-sync-wait=%u takes precedence over --wsrep-causal-reads=OFF. " + "WSREP_SYNC_WAIT_BEFORE_READ is on", + global_system_variables.wsrep_sync_wait); + global_system_variables.wsrep_causal_reads = 1; + } + } break; + } case OPT_WSREP_SYNC_WAIT: global_system_variables.wsrep_causal_reads= MY_TEST(global_system_variables.wsrep_sync_wait & diff -Nru mariadb-10.1-10.1.25/sql/mysqld.h mariadb-10.1-10.1.30/sql/mysqld.h --- mariadb-10.1-10.1.25/sql/mysqld.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/mysqld.h 2017-12-21 15:48:49.000000000 +0000 @@ -290,7 +290,7 @@ key_LOCK_prepared_stmt_count, key_LOCK_rpl_status, key_LOCK_server_started, key_LOCK_status, key_LOCK_show_status, - key_LOCK_thd_data, + key_LOCK_thd_data, key_LOCK_thd_kill, key_LOCK_user_conn, key_LOG_LOCK_log, key_master_info_data_lock, key_master_info_run_lock, key_master_info_sleep_lock, key_master_info_start_stop_lock, diff -Nru mariadb-10.1-10.1.25/sql/net_serv.cc mariadb-10.1-10.1.30/sql/net_serv.cc --- mariadb-10.1-10.1.25/sql/net_serv.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/net_serv.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. - Copyright (c) 2012, 2016, MariaDB + Copyright (c) 2012, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/sql/opt_range.cc mariadb-10.1-10.1.30/sql/opt_range.cc --- mariadb-10.1-10.1.25/sql/opt_range.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/opt_range.cc 2017-12-21 15:48:49.000000000 +0000 @@ -7306,8 +7306,10 @@ table_map param_comp= ~(param->prev_tables | param->read_tables | param->current_table); #ifdef HAVE_SPATIAL + Field::geometry_type sav_geom_type; if (field_item->field->type() == MYSQL_TYPE_GEOMETRY) { + sav_geom_type= ((Field_geom*) field_item->field)->geom_type; /* We have to be able to store all sorts of spatial features here */ ((Field_geom*) field_item->field)->geom_type= Field::GEOM_GEOMETRY; } @@ -7338,6 +7340,13 @@ } } } + +#ifdef HAVE_SPATIAL + if (field_item->field->type() == MYSQL_TYPE_GEOMETRY) + { + ((Field_geom*) field_item->field)->geom_type= sav_geom_type; + } +#endif /*HAVE_SPATIAL*/ DBUG_RETURN(ftree); } @@ -8329,6 +8338,34 @@ } /* + Check whether the key parts inf_init..inf_end-1 of one index can compose + an infix for the key parts key_init..key_end-1 of another index +*/ + +static +bool is_key_infix(KEY_PART *key_init, KEY_PART *key_end, + KEY_PART *inf_init, KEY_PART *inf_end) +{ + KEY_PART *key_part, *inf_part; + for (key_part= key_init; key_part < key_end; key_part++) + { + if (key_part->field->eq(inf_init->field)) + break; + } + if (key_part == key_end) + return false; + for (key_part++, inf_part= inf_init + 1; + key_part < key_end && inf_part < inf_end; + key_part++, inf_part++) + { + if (!key_part->field->eq(inf_part->field)) + return false; + } + return inf_part == inf_end; +} + + +/* Check whether range parts of two trees must be ored for some indexes SYNOPSIS @@ -8384,14 +8421,9 @@ KEY_PART *key2_init= param->key[idx2]+tree2->keys[idx2]->part; KEY_PART *key2_end= param->key[idx2]+tree2->keys[idx2]->max_part_no; - KEY_PART *part1, *part2; - for (part1= key1_init, part2= key2_init; - part1 < key1_end && part2 < key2_end; - part1++, part2++) - { - if (!part1->field->eq(part2->field)) - DBUG_RETURN(FALSE); - } + if (!is_key_infix(key1_init, key1_end, key2_init, key2_end) && + !is_key_infix(key2_init, key2_end, key1_init, key1_end)) + DBUG_RETURN(FALSE); } } diff -Nru mariadb-10.1-10.1.25/sql/opt_subselect.cc mariadb-10.1-10.1.30/sql/opt_subselect.cc --- mariadb-10.1-10.1.25/sql/opt_subselect.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/opt_subselect.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1612,6 +1612,7 @@ sj-nest. */ st_select_lex *subq_lex= subq_pred->unit->first_select(); + DBUG_ASSERT(subq_lex->next_select() == NULL); nested_join->join_list.empty(); List_iterator_fast li(subq_lex->top_join_list); TABLE_LIST *tl; @@ -1664,7 +1665,7 @@ { tl->jtbm_table_no= table_no; Item *dummy= tl->jtbm_subselect; - tl->jtbm_subselect->fix_after_pullout(parent_lex, &dummy); + tl->jtbm_subselect->fix_after_pullout(parent_lex, &dummy, true); DBUG_ASSERT(dummy == tl->jtbm_subselect); } SELECT_LEX *old_sl= tl->select_lex; @@ -1715,7 +1716,8 @@ if (subq_pred->left_expr->cols() == 1) { - nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr, + /* add left = select_list_element */ + nested_join->sj_outer_expr_list.push_back(&subq_pred->left_expr, thd->mem_root); /* Create Item_func_eq. Note that @@ -1729,26 +1731,62 @@ Item_func_eq *item_eq= new (thd->mem_root) Item_func_eq(thd, subq_pred->left_expr_orig, subq_lex->ref_pointer_array[0]); + if (!item_eq) + DBUG_RETURN(TRUE); if (subq_pred->left_expr_orig != subq_pred->left_expr) thd->change_item_tree(item_eq->arguments(), subq_pred->left_expr); item_eq->in_equality_no= 0; sj_nest->sj_on_expr= and_items(thd, sj_nest->sj_on_expr, item_eq); } - else + else if (subq_pred->left_expr->type() == Item::ROW_ITEM) { + /* + disassemple left expression and add + left1 = select_list_element1 and left2 = select_list_element2 ... + */ for (uint i= 0; i < subq_pred->left_expr->cols(); i++) { - nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr-> - element_index(i), + nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr->addr(i), thd->mem_root); - Item_func_eq *item_eq= + Item_func_eq *item_eq= new (thd->mem_root) - Item_func_eq(thd, subq_pred->left_expr->element_index(i), + Item_func_eq(thd, subq_pred->left_expr_orig->element_index(i), subq_lex->ref_pointer_array[i]); + if (!item_eq) + DBUG_RETURN(TRUE); + DBUG_ASSERT(subq_pred->left_expr->element_index(i)->fixed); + if (subq_pred->left_expr_orig->element_index(i) != + subq_pred->left_expr->element_index(i)) + thd->change_item_tree(item_eq->arguments(), + subq_pred->left_expr->element_index(i)); item_eq->in_equality_no= i; sj_nest->sj_on_expr= and_items(thd, sj_nest->sj_on_expr, item_eq); } } + else + { + /* + add row operation + left = (select_list_element1, select_list_element2, ...) + */ + Item_row *row= new (thd->mem_root) Item_row(thd, subq_lex->pre_fix); + /* fix fields on subquery was call so they should be the same */ + DBUG_ASSERT(subq_pred->left_expr->cols() == row->cols()); + if (!row) + DBUG_RETURN(TRUE); + nested_join->sj_outer_expr_list.push_back(&subq_pred->left_expr); + Item_func_eq *item_eq= + new (thd->mem_root) Item_func_eq(thd, subq_pred->left_expr_orig, row); + if (!item_eq) + DBUG_RETURN(TRUE); + for (uint i= 0; i < row->cols(); i++) + { + if (row->element_index(i) != subq_lex->ref_pointer_array[i]) + thd->change_item_tree(row->addr(i), subq_lex->ref_pointer_array[i]); + } + item_eq->in_equality_no= 0; + sj_nest->sj_on_expr= and_items(thd, sj_nest->sj_on_expr, item_eq); + } /* Fix the created equality and AND @@ -1768,7 +1806,8 @@ Walk through sj nest's WHERE and ON expressions and call item->fix_table_changes() for all items. */ - sj_nest->sj_on_expr->fix_after_pullout(parent_lex, &sj_nest->sj_on_expr); + sj_nest->sj_on_expr->fix_after_pullout(parent_lex, &sj_nest->sj_on_expr, + TRUE); fix_list_after_tbl_changes(parent_lex, &sj_nest->nested_join->join_list); @@ -1927,7 +1966,7 @@ DBUG_ASSERT(parent_join->table_count < MAX_TABLES); Item *conds= hash_sj_engine->semi_join_conds; - conds->fix_after_pullout(parent_lex, &conds); + conds->fix_after_pullout(parent_lex, &conds, TRUE); DBUG_EXECUTE("where", print_where(conds,"SJ-EXPR", QT_ORDINARY);); @@ -1979,7 +2018,7 @@ while ((table= it++)) { if (table->on_expr) - table->on_expr->fix_after_pullout(new_parent, &table->on_expr); + table->on_expr->fix_after_pullout(new_parent, &table->on_expr, TRUE); if (table->nested_join) fix_list_after_tbl_changes(new_parent, &table->nested_join->join_list); } @@ -3302,8 +3341,8 @@ ulonglong get_bound_sj_equalities(TABLE_LIST *sj_nest, table_map remaining_tables) { - List_iterator li(sj_nest->nested_join->sj_outer_expr_list); - Item *item; + List_iterator li(sj_nest->nested_join->sj_outer_expr_list); + Item **item; uint i= 0; ulonglong res= 0; while ((item= li++)) @@ -3314,7 +3353,7 @@ class and see if there is an element that is bound? (this is an optional feature) */ - if (!(item->used_tables() & remaining_tables)) + if (!(item[0]->used_tables() & remaining_tables)) { res |= 1ULL << i; } diff -Nru mariadb-10.1-10.1.25/sql/partition_info.cc mariadb-10.1-10.1.30/sql/partition_info.cc --- mariadb-10.1-10.1.25/sql/partition_info.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/partition_info.cc 2017-12-21 15:48:49.000000000 +0000 @@ -39,9 +39,6 @@ { MEM_ROOT *mem_root= thd->mem_root; DBUG_ENTER("partition_info::get_clone"); - - if (!this) - DBUG_RETURN(NULL); List_iterator part_it(partitions); partition_element *part; partition_info *clone= new (mem_root) partition_info(); @@ -889,6 +886,7 @@ */ partition_element *partition_info::get_part_elem(const char *partition_name, char *file_name, + size_t file_name_size, uint32 *part_id) { List_iterator part_it(partitions); @@ -910,10 +908,10 @@ sub_part_elem->partition_name, partition_name)) { if (file_name) - create_subpartition_name(file_name, "", - part_elem->partition_name, - partition_name, - NORMAL_PART_NAME); + if (create_subpartition_name(file_name, file_name_size, "", + part_elem->partition_name, + partition_name, NORMAL_PART_NAME)) + DBUG_RETURN(NULL); *part_id= j + (i * num_subparts); DBUG_RETURN(sub_part_elem); } @@ -928,8 +926,9 @@ part_elem->partition_name, partition_name)) { if (file_name) - create_partition_name(file_name, "", partition_name, - NORMAL_PART_NAME, TRUE); + if (create_partition_name(file_name, file_name_size, "", + partition_name, NORMAL_PART_NAME, TRUE)) + DBUG_RETURN(NULL); *part_id= i; DBUG_RETURN(part_elem); } @@ -2744,6 +2743,24 @@ DBUG_RETURN(result); } + +bool partition_info::error_if_requires_values() const +{ + switch (part_type) { + case NOT_A_PARTITION: + case HASH_PARTITION: + break; + case RANGE_PARTITION: + my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), "RANGE", "LESS THAN"); + return true; + case LIST_PARTITION: + my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), "LIST", "IN"); + return true; + } + return false; +} + + /** Fix partition data from parser. @@ -2833,6 +2850,8 @@ part_elem= it++; List_iterator list_val_it(part_elem->list_val_list); num_elements= part_elem->list_val_list.elements; + if (!num_elements && error_if_requires_values()) + DBUG_RETURN(true); DBUG_ASSERT(part_type == RANGE_PARTITION ? num_elements == 1U : TRUE); for (j= 0; j < num_elements; j++) diff -Nru mariadb-10.1-10.1.25/sql/partition_info.h mariadb-10.1-10.1.30/sql/partition_info.h --- mariadb-10.1-10.1.25/sql/partition_info.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/partition_info.h 2017-12-21 15:48:49.000000000 +0000 @@ -340,9 +340,8 @@ bool init_column_part(THD *thd); bool add_column_list_value(THD *thd, Item *item); void set_show_version_string(String *packet); - partition_element *get_part_elem(const char *partition_name, - char *file_name, - uint32 *part_id); + partition_element *get_part_elem(const char *partition_name, char *file_name, + size_t file_name_size, uint32 *part_id); void report_part_expr_error(bool use_subpart_expr); bool set_used_partition(List &fields, List &values, @@ -369,6 +368,7 @@ bool *prune_needs_default_values, MY_BITMAP *used_partitions); bool has_same_partitioning(partition_info *new_part_info); + bool error_if_requires_values() const; private: static int list_part_cmp(const void* a, const void* b); bool set_up_default_partitions(handler *file, HA_CREATE_INFO *info, diff -Nru mariadb-10.1-10.1.25/sql/records.cc mariadb-10.1-10.1.30/sql/records.cc --- mariadb-10.1-10.1.25/sql/records.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/records.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,6 @@ /* Copyright (c) 2000, 2010, Oracle and/or its affiliates. + Copyright (c) 2009, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru mariadb-10.1-10.1.25/sql/rpl_gtid.cc mariadb-10.1-10.1.30/sql/rpl_gtid.cc --- mariadb-10.1-10.1.25/sql/rpl_gtid.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/rpl_gtid.cc 2017-12-21 15:48:49.000000000 +0000 @@ -26,7 +26,7 @@ #include "key.h" #include "rpl_gtid.h" #include "rpl_rli.h" - +#include "log_event.h" const LEX_STRING rpl_gtid_slave_state_table_name= { C_STRING_WITH_LEN("gtid_slave_pos") }; @@ -1728,6 +1728,155 @@ return res; } +/** + Remove domains supplied by the first argument from binlog state. + Removal is done for any domain whose last gtids (from all its servers) match + ones in Gtid list event of the 2nd argument. + + @param ids gtid domain id sequence, may contain dups + @param glev pointer to Gtid list event describing + the match condition + @param errbuf [out] pointer to possible error message array + + @retval NULL as success when at least one domain is removed + @retval "" empty string to indicate ineffective call + when no domains removed + @retval NOT EMPTY string otherwise an error message +*/ +const char* +rpl_binlog_state::drop_domain(DYNAMIC_ARRAY *ids, + Gtid_list_log_event *glev, + char* errbuf) +{ + DYNAMIC_ARRAY domain_unique; // sequece (unsorted) of unique element*:s + rpl_binlog_state::element* domain_unique_buffer[16]; + ulong k, l; + const char* errmsg= NULL; + + DBUG_ENTER("rpl_binlog_state::drop_domain"); + + my_init_dynamic_array2(&domain_unique, + sizeof(element*), domain_unique_buffer, + sizeof(domain_unique_buffer) / sizeof(element*), 4, 0); + + mysql_mutex_lock(&LOCK_binlog_state); + + /* + Gtid list is supposed to come from a binlog's Gtid_list event and + therefore should be a subset of the current binlog state. That is + for every domain in the list the binlog state contains a gtid with + sequence number not less than that of the list. + Exceptions of this inclusion rule are: + A. the list may still refer to gtids from already deleted domains. + Files containing them must have been purged whereas the file + with the list is not yet. + B. out of order groups were injected + C. manually build list of binlog files violating the inclusion + constraint. + While A is a normal case (not necessarily distinguishable from C though), + B and C may require the user's attention so any (incl the A's suspected) + inconsistency is diagnosed and *warned*. + */ + for (l= 0, errbuf[0]= 0; l < glev->count; l++, errbuf[0]= 0) + { + rpl_gtid* rb_state_gtid= find_nolock(glev->list[l].domain_id, + glev->list[l].server_id); + if (!rb_state_gtid) + sprintf(errbuf, + "missing gtids from the '%u-%u' domain-server pair which is " + "referred to in the gtid list describing an earlier state. Ignore " + "if the domain ('%u') was already explicitly deleted", + glev->list[l].domain_id, glev->list[l].server_id, + glev->list[l].domain_id); + else if (rb_state_gtid->seq_no < glev->list[l].seq_no) + sprintf(errbuf, + "having a gtid '%u-%u-%llu' which is less than " + "the '%u-%u-%llu' of the gtid list describing an earlier state. " + "The state may have been affected by manually injecting " + "a lower sequence number gtid or via replication", + rb_state_gtid->domain_id, rb_state_gtid->server_id, + rb_state_gtid->seq_no, glev->list[l].domain_id, + glev->list[l].server_id, glev->list[l].seq_no); + if (strlen(errbuf)) // use strlen() as cheap flag + push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN, + ER_BINLOG_CANT_DELETE_GTID_DOMAIN, + "The current gtid binlog state is incompatible with " + "a former one %s.", errbuf); + } + + /* + For each domain_id from ids + when no such domain in binlog state + warn && continue + For each domain.server's last gtid + when not locate the last gtid in glev.list + error out binlog state can't change + otherwise continue + */ + for (ulong i= 0; i < ids->elements; i++) + { + rpl_binlog_state::element *elem= NULL; + ulong *ptr_domain_id; + bool not_match; + + ptr_domain_id= (ulong*) dynamic_array_ptr(ids, i); + elem= (rpl_binlog_state::element *) + my_hash_search(&hash, (const uchar *) ptr_domain_id, 0); + if (!elem) + { + push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN, + ER_BINLOG_CANT_DELETE_GTID_DOMAIN, + "The gtid domain being deleted ('%lu') is not in " + "the current binlog state", *ptr_domain_id); + continue; + } + + for (not_match= true, k= 0; k < elem->hash.records; k++) + { + rpl_gtid *d_gtid= (rpl_gtid *)my_hash_element(&elem->hash, k); + for (ulong l= 0; l < glev->count && not_match; l++) + not_match= !(*d_gtid == glev->list[l]); + } + + if (not_match) + { + sprintf(errbuf, "binlog files may contain gtids from the domain ('%lu') " + "being deleted. Make sure to first purge those files", + *ptr_domain_id); + errmsg= errbuf; + goto end; + } + // compose a sequence of unique pointers to domain object + for (k= 0; k < domain_unique.elements; k++) + { + if ((rpl_binlog_state::element*) dynamic_array_ptr(&domain_unique, k) + == elem) + break; // domain_id's elem has been already in + } + if (k == domain_unique.elements) // proven not to have duplicates + insert_dynamic(&domain_unique, (uchar*) &elem); + } + + // Domain removal from binlog state + for (k= 0; k < domain_unique.elements; k++) + { + rpl_binlog_state::element *elem= *(rpl_binlog_state::element**) + dynamic_array_ptr(&domain_unique, k); + my_hash_free(&elem->hash); + my_hash_delete(&hash, (uchar*) elem); + } + + DBUG_ASSERT(strlen(errbuf) == 0); + + if (domain_unique.elements == 0) + errmsg= ""; + +end: + mysql_mutex_unlock(&LOCK_binlog_state); + delete_dynamic(&domain_unique); + + DBUG_RETURN(errmsg); +} slave_connection_state::slave_connection_state() { diff -Nru mariadb-10.1-10.1.25/sql/rpl_gtid.h mariadb-10.1-10.1.30/sql/rpl_gtid.h --- mariadb-10.1-10.1.25/sql/rpl_gtid.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/rpl_gtid.h 2017-12-21 15:48:49.000000000 +0000 @@ -34,6 +34,13 @@ uint64 seq_no; }; +inline bool operator==(const rpl_gtid& lhs, const rpl_gtid& rhs) +{ + return + lhs.domain_id == rhs.domain_id && + lhs.server_id == rhs.server_id && + lhs.seq_no == rhs.seq_no; +}; enum enum_gtid_skip_type { GTID_SKIP_NOT, GTID_SKIP_STANDALONE, GTID_SKIP_TRANSACTION @@ -93,6 +100,7 @@ class Relay_log_info; struct rpl_group_info; +class Gtid_list_log_event; /* Replication slave state. @@ -256,6 +264,7 @@ rpl_gtid *find_nolock(uint32 domain_id, uint32 server_id); rpl_gtid *find(uint32 domain_id, uint32 server_id); rpl_gtid *find_most_recent(uint32 domain_id); + const char* drop_domain(DYNAMIC_ARRAY *ids, Gtid_list_log_event *glev, char*); }; diff -Nru mariadb-10.1-10.1.25/sql/rpl_handler.cc mariadb-10.1-10.1.30/sql/rpl_handler.cc --- mariadb-10.1-10.1.25/sql/rpl_handler.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/rpl_handler.cc 2017-12-21 15:48:49.000000000 +0000 @@ -267,7 +267,7 @@ thd->semisync_info= log_info; } - strcpy(log_info->log_file, log_file+dirname_length(log_file)); + strmake_buf(log_info->log_file, log_file+dirname_length(log_file)); log_info->log_pos = log_pos; FOREACH_OBSERVER(ret, after_flush, false, diff -Nru mariadb-10.1-10.1.25/sql/rpl_mi.cc mariadb-10.1-10.1.30/sql/rpl_mi.cc --- mariadb-10.1-10.1.25/sql/rpl_mi.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/rpl_mi.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2006, 2012, Oracle and/or its affiliates. - Copyright (c) 2010, 2011, Monty Program Ab +/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. + Copyright (c) 2010, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -844,7 +844,6 @@ if (!mi->inited) DBUG_VOID_RETURN; - end_relay_log_info(&mi->rli); if (mi->fd >= 0) { end_io_cache(&mi->file); @@ -883,6 +882,7 @@ /* We use 2 here instead of 1 just to make it easier when debugging */ mi->killed= 2; end_master_info(mi); + end_relay_log_info(&mi->rli); mi->unlock_slave_threads(); delete mi; diff -Nru mariadb-10.1-10.1.25/sql/rpl_parallel.cc mariadb-10.1-10.1.30/sql/rpl_parallel.cc --- mariadb-10.1-10.1.25/sql/rpl_parallel.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/rpl_parallel.cc 2017-12-21 15:48:49.000000000 +0000 @@ -714,9 +714,7 @@ DBUG_EXECUTE_IF("inject_mdev8031", { /* Simulate that we get deadlock killed at this exact point. */ rgi->killed_for_retry= rpl_group_info::RETRY_KILL_KILLED; - mysql_mutex_lock(&thd->LOCK_thd_data); - thd->killed= KILL_CONNECTION; - mysql_mutex_unlock(&thd->LOCK_thd_data); + thd->set_killed(KILL_CONNECTION); }); rgi->cleanup_context(thd, 1); wait_for_pending_deadlock_kill(thd, rgi); @@ -862,9 +860,7 @@ /* Simulate that we get deadlock killed during open_binlog(). */ thd->reset_for_next_command(); rgi->killed_for_retry= rpl_group_info::RETRY_KILL_KILLED; - mysql_mutex_lock(&thd->LOCK_thd_data); - thd->killed= KILL_CONNECTION; - mysql_mutex_unlock(&thd->LOCK_thd_data); + thd->set_killed(KILL_CONNECTION); thd->send_kill_message(); fd= (File)-1; err= 1; diff -Nru mariadb-10.1-10.1.25/sql/rpl_rli.cc mariadb-10.1-10.1.30/sql/rpl_rli.cc --- mariadb-10.1-10.1.25/sql/rpl_rli.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/rpl_rli.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2006, 2013, Oracle and/or its affiliates. - Copyright (c) 2010, 2013, Monty Program Ab +/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. + Copyright (c) 2011, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -54,8 +54,8 @@ sync_counter(0), is_relay_log_recovery(is_slave_recovery), save_temporary_tables(0), mi(0), inuse_relaylog_list(0), last_inuse_relaylog(0), - cur_log_old_open_count(0), group_relay_log_pos(0), - event_relay_log_pos(0), + cur_log_old_open_count(0), error_on_rli_init_info(false), + group_relay_log_pos(0), event_relay_log_pos(0), #if HAVE_valgrind is_fake(FALSE), #endif @@ -119,16 +119,21 @@ const char* info_fname) { char fname[FN_REFLEN+128]; - int info_fd; + int info_fd= -1; const char* msg = 0; int error = 0; + mysql_mutex_t *log_lock; DBUG_ENTER("init_relay_log_info"); DBUG_ASSERT(!rli->no_storage); // Don't init if there is no storage if (rli->inited) // Set if this function called DBUG_RETURN(0); + + log_lock= rli->relay_log.get_log_lock(); fn_format(fname, info_fname, mysql_data_home, "", 4+32); mysql_mutex_lock(&rli->data_lock); + if (rli->error_on_rli_init_info) + goto err; info_fd = rli->info_fd; rli->cur_log_fd = -1; rli->slave_skip_counter=0; @@ -208,7 +213,6 @@ Master_info* mi= rli->mi; char buf_relay_logname[FN_REFLEN], buf_relaylog_index_name_buff[FN_REFLEN]; char *buf_relaylog_index_name= opt_relaylog_index_name; - mysql_mutex_t *log_lock; create_logfile_name_with_suffix(buf_relay_logname, sizeof(buf_relay_logname), @@ -228,7 +232,6 @@ note, that if open() fails, we'll still have index file open but a destructor will take care of that */ - log_lock= rli->relay_log.get_log_lock(); mysql_mutex_lock(log_lock); if (rli->relay_log.open_index_file(buf_relaylog_index_name, ln, TRUE) || rli->relay_log.open(ln, LOG_BIN, 0, 0, SEQ_READ_APPEND, @@ -254,8 +257,8 @@ if ((info_fd= mysql_file_open(key_file_relay_log_info, fname, O_CREAT|O_RDWR|O_BINARY, MYF(MY_WME))) < 0) { - sql_print_error("Failed to create a new relay log info file (\ -file '%s', errno %d)", fname, my_errno); + sql_print_error("Failed to create a new relay log info file (" + "file '%s', errno %d)", fname, my_errno); msg= current_thd->get_stmt_da()->message(); goto err; } @@ -306,7 +309,9 @@ if (info_fd >= 0) mysql_file_close(info_fd, MYF(0)); rli->info_fd= -1; + mysql_mutex_lock(log_lock); rli->relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT); + mysql_mutex_unlock(log_lock); mysql_mutex_unlock(&rli->data_lock); DBUG_RETURN(1); } @@ -428,17 +433,24 @@ goto err; } rli->inited= 1; + rli->error_on_rli_init_info= false; mysql_mutex_unlock(&rli->data_lock); DBUG_RETURN(0); err: - sql_print_error("%s", msg); + rli->error_on_rli_init_info= true; + if (msg) + sql_print_error("%s", msg); end_io_cache(&rli->info_file); if (info_fd >= 0) mysql_file_close(info_fd, MYF(0)); rli->info_fd= -1; + + mysql_mutex_lock(log_lock); rli->relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT); + mysql_mutex_unlock(log_lock); mysql_mutex_unlock(&rli->data_lock); + DBUG_RETURN(1); } @@ -1101,6 +1113,8 @@ const char** errmsg) { int error=0; + const char *ln; + char name_buf[FN_REFLEN]; DBUG_ENTER("purge_relay_logs"); /* @@ -1127,12 +1141,37 @@ if (!rli->inited) { DBUG_PRINT("info", ("rli->inited == 0")); - DBUG_RETURN(0); - } - - DBUG_ASSERT(rli->slave_running == 0); - DBUG_ASSERT(rli->mi->slave_running == 0); + if (rli->error_on_rli_init_info) + { + ln= rli->relay_log.generate_name(opt_relay_logname, "-relay-bin", + 1, name_buf); + if (rli->relay_log.open_index_file(opt_relaylog_index_name, ln, TRUE)) + { + sql_print_error("Unable to purge relay log files. Failed to open relay " + "log index file:%s.", rli->relay_log.get_index_fname()); + DBUG_RETURN(1); + } + mysql_mutex_lock(rli->relay_log.get_log_lock()); + if (rli->relay_log.open(ln, LOG_BIN, 0, 0, SEQ_READ_APPEND, + (rli->max_relay_log_size ? rli->max_relay_log_size : + max_binlog_size), 1, TRUE)) + { + sql_print_error("Unable to purge relay log files. Failed to open relay " + "log file:%s.", rli->relay_log.get_log_fname()); + mysql_mutex_unlock(rli->relay_log.get_log_lock()); + DBUG_RETURN(1); + } + mysql_mutex_unlock(rli->relay_log.get_log_lock()); + } + else + DBUG_RETURN(0); + } + else + { + DBUG_ASSERT(rli->slave_running == 0); + DBUG_ASSERT(rli->mi->slave_running == 0); + } mysql_mutex_lock(&rli->data_lock); /* @@ -1179,6 +1218,12 @@ rli->group_relay_log_name[0]= rli->event_relay_log_name[0]= 0; } + if (!rli->inited && rli->error_on_rli_init_info) + { + mysql_mutex_lock(rli->relay_log.get_log_lock()); + rli->relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT); + mysql_mutex_unlock(rli->relay_log.get_log_lock()); + } err: DBUG_PRINT("info",("log_space_total: %llu",rli->log_space_total)); mysql_mutex_unlock(&rli->data_lock); diff -Nru mariadb-10.1-10.1.25/sql/rpl_rli.h mariadb-10.1-10.1.30/sql/rpl_rli.h --- mariadb-10.1-10.1.25/sql/rpl_rli.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/rpl_rli.h 2017-12-21 15:48:49.000000000 +0000 @@ -1,4 +1,5 @@ -/* Copyright (c) 2005, 2012, Oracle and/or its affiliates. +/* Copyright (c) 2005, 2017, Oracle and/or its affiliates. + Copyright (c) 2009, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -176,7 +177,14 @@ a different log under our feet */ uint32 cur_log_old_open_count; - + + /* + If on init_info() call error_on_rli_init_info is true that means + that previous call to init_info() terminated with an error, RESET + SLAVE must be executed and the problem fixed manually. + */ + bool error_on_rli_init_info; + /* Let's call a group (of events) : - a transaction diff -Nru mariadb-10.1-10.1.25/sql/share/errmsg-utf8.txt mariadb-10.1-10.1.30/sql/share/errmsg-utf8.txt --- mariadb-10.1-10.1.25/sql/share/errmsg-utf8.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/share/errmsg-utf8.txt 2017-12-21 15:48:49.000000000 +0000 @@ -1732,32 +1732,32 @@ spa "Puede ser solamente un campo automatico y este debe ser definido como una clave" swe "Det får finnas endast ett AUTO_INCREMENT-fält och detta måste vara en nyckel" ukr "Невірне визначення таблиці; Може бути лише один автоматичний стовбець, що повинен бути визначений як ключ" -ER_UNUSED_9 - eng "You should never see it" +ER_BINLOG_CANT_DELETE_GTID_DOMAIN + eng "Could not delete gtid domain. Reason: %s." ER_NORMAL_SHUTDOWN - cze "%s: normální ukončení\n" - dan "%s: Normal nedlukning\n" - nla "%s: Normaal afgesloten \n" - eng "%s: Normal shutdown\n" - est "%s: MariaDB lõpetas\n" - fre "%s: Arrêt normal du serveur\n" - ger "%s: Normal heruntergefahren\n" - greek "%s: Φυσιολογική διαδικασία shutdown\n" - hun "%s: Normal leallitas\n" - ita "%s: Shutdown normale\n" - jpn "%s: 通常シャットダウン\n" - kor "%s: 정상적인 shutdown\n" - nor "%s: Normal avslutning\n" - norwegian-ny "%s: Normal nedkopling\n" - pol "%s: Standardowe zakończenie działania\n" - por "%s: 'Shutdown' normal\n" - rum "%s: Terminare normala\n" - rus "%s: Корректная остановка\n" - serbian "%s: Normalno gašenje\n" - slo "%s: normálne ukončenie\n" - spa "%s: Apagado normal\n" - swe "%s: Normal avslutning\n" - ukr "%s: Нормальне завершення\n" + cze "%s: norm-Bální ukončení" + dan "%s: Normal nedlukning" + nla "%s: Normaal afgesloten" + eng "%s: Normal shutdown" + est "%s: MariaDB lõpetas" + fre "%s: Arrêt normal du serveur" + ger "%s: Normal heruntergefahren" + greek "%s: Φυσιολογική διαδικασία shutdown" + hun "%s: Normal leallitas" + ita "%s: Shutdown normale" + jpn "%s: 通常シャットダウン" + kor "%s: 정상적인 shutdown" + nor "%s: Normal avslutning" + norwegian-ny "%s: Normal nedkopling" + pol "%s: Standardowe zakończenie działania" + por "%s: 'Shutdown' normal" + rum "%s: Terminare normala" + rus "%s: Корректная остановка" + serbian "%s: Normalno gašenje" + slo "%s: normálne ukončenie" + spa "%s: Apagado normal" + swe "%s: Normal avslutning" + ukr "%s: Нормальне завершення" ER_GOT_SIGNAL cze "%s: přijat signal %d, končím\n" dan "%s: Fangede signal %d. Afslutter!!\n" @@ -7118,7 +7118,7 @@ eng "%s does not support subqueries or stored functions." ER_SET_STATEMENT_NOT_SUPPORTED 42000 eng "The system variable %.200s cannot be set in SET STATEMENT." -ER_UNUSED_17 +ER_UNUSED_9 eng "You should never see it" ER_USER_CREATE_EXISTS eng "Can't create user '%-.64s'@'%-.64s'; it already exists" diff -Nru mariadb-10.1-10.1.25/sql/slave.cc mariadb-10.1-10.1.30/sql/slave.cc --- mariadb-10.1-10.1.25/sql/slave.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/slave.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. - Copyright (c) 2009, 2017, MariaDB +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. + Copyright (c) 2009, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -483,6 +483,7 @@ { delete active_mi; active_mi= 0; + sql_print_error("Failed to allocate memory for the Master Info structure"); goto err; } @@ -545,7 +546,6 @@ DBUG_RETURN(error); err: - sql_print_error("Failed to allocate memory for the Master Info structure"); error= 1; goto end; } @@ -2466,6 +2466,7 @@ } if (rli->ign_gtids.count()) { + DBUG_ASSERT(!rli->is_in_group()); // Ensure no active transaction glev= new Gtid_list_log_event(&rli->ign_gtids, Gtid_list_log_event::FLAG_IGN_GTIDS); rli->ign_gtids.reset(); @@ -3187,7 +3188,6 @@ thd->variables.sql_log_slow= opt_log_slow_slave_statements; thd->variables.log_slow_filter= global_system_variables.log_slow_filter; set_slave_thread_options(thd); - thd->client_capabilities = CLIENT_LOCAL_FILES; mysql_mutex_lock(&LOCK_thread_count); thd->thread_id= thd->variables.pseudo_thread_id= thread_id++; mysql_mutex_unlock(&LOCK_thread_count); @@ -3610,7 +3610,9 @@ apply_event_and_update_pos_for_parallel(Log_event* ev, THD* thd, rpl_group_info *rgi) { +#ifndef DBUG_OFF Relay_log_info* rli= rgi->rli; +#endif mysql_mutex_assert_not_owner(&rli->data_lock); int reason= apply_event_and_update_pos_setup(ev, thd, rgi); /* @@ -5582,7 +5584,9 @@ bool gtid_skip_enqueue= false; bool got_gtid_event= false; rpl_gtid event_gtid; - +#ifndef DBUG_OFF + static uint dbug_rows_event_count= 0; +#endif /* FD_q must have been prepared for the first R_a event inside get_master_version_and_clock() @@ -5649,6 +5653,26 @@ (uchar)buf[EVENT_TYPE_OFFSET] != FORMAT_DESCRIPTION_EVENT /* a way to escape */) DBUG_RETURN(queue_old_event(mi,buf,event_len)); +#ifdef ENABLED_DEBUG_SYNC + /* + A (+d,dbug.rows_events_to_delay_relay_logging)-test is supposed to + create a few Write_log_events and after receiving the 1st of them + the IO thread signals to launch the SQL thread, and sets itself to + wait for a release signal. + */ + DBUG_EXECUTE_IF("dbug.rows_events_to_delay_relay_logging", + if ((buf[EVENT_TYPE_OFFSET] == WRITE_ROWS_EVENT_V1 || + buf[EVENT_TYPE_OFFSET] == WRITE_ROWS_EVENT) && + ++dbug_rows_event_count == 2) + { + const char act[]= + "now SIGNAL start_sql_thread " + "WAIT_FOR go_on_relay_logging"; + DBUG_ASSERT(debug_sync_service); + DBUG_ASSERT(!debug_sync_set_action(current_thd, + STRING_WITH_LEN(act))); + };); +#endif mysql_mutex_lock(&mi->data_lock); switch ((uchar)buf[EVENT_TYPE_OFFSET]) { @@ -6314,6 +6338,7 @@ mysql_mutex_t *log_lock; DBUG_ENTER("end_relay_log_info"); + rli->error_on_rli_init_info= false; if (!rli->inited) DBUG_VOID_RETURN; if (rli->info_fd >= 0) @@ -6897,9 +6922,12 @@ DBUG_RETURN(ev); } - if (rli->ign_gtids.count()) + if (rli->ign_gtids.count() && !rli->is_in_group()) { - /* We generate and return a Gtid_list, to update gtid_slave_pos. */ + /* + We generate and return a Gtid_list, to update gtid_slave_pos, + unless being in the middle of a group. + */ DBUG_PRINT("info",("seeing ignored end gtids")); ev= new Gtid_list_log_event(&rli->ign_gtids, Gtid_list_log_event::FLAG_IGN_GTIDS); diff -Nru mariadb-10.1-10.1.25/sql/spatial.cc mariadb-10.1-10.1.30/sql/spatial.cc --- mariadb-10.1-10.1.25/sql/spatial.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/spatial.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1149,8 +1149,8 @@ uint32 n_points, org_n_points; double prev_x, prev_y; double cur_area= 0; - double cur_cx= 0; - double cur_cy= 0; + double cur_cx= 0, cur_cy= 0; + double sum_cx= 0, sum_cy= 0; if (no_data(data, 4)) return 1; @@ -1164,17 +1164,32 @@ while (--n_points) // One point is already read { double tmp_x, tmp_y; + double loc_area; get_point(&tmp_x, &tmp_y, data); data+= POINT_DATA_SIZE; - cur_area+= (prev_x + tmp_x) * (prev_y - tmp_y); + loc_area= prev_x * tmp_y - tmp_x * prev_y; + cur_area+= loc_area; cur_cx+= tmp_x; cur_cy+= tmp_y; + sum_cx+= (prev_x + tmp_x) * loc_area; + sum_cy+= (prev_y + tmp_y) * loc_area; + prev_x= tmp_x; prev_y= tmp_y; } - cur_area= fabs(cur_area) / 2; - cur_cx= cur_cx / (org_n_points - 1); - cur_cy= cur_cy / (org_n_points - 1); + + if (fabs(cur_area) > 1e-10) + { + cur_cx= sum_cx / cur_area / 3.0; + cur_cy= sum_cy / cur_area / 3.0; + } + else + { + cur_cx= cur_cx / (org_n_points - 1); + cur_cy= cur_cy / (org_n_points - 1); + } + + cur_area= fabs(cur_area); if (!first_loop) { diff -Nru mariadb-10.1-10.1.25/sql/sp.cc mariadb-10.1-10.1.30/sql/sp.cc --- mariadb-10.1-10.1.25/sql/sp.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sp.cc 2017-12-21 15:48:49.000000000 +0000 @@ -760,6 +760,7 @@ else { sp= thd->lex->sphead; + sp->set_select_number(thd->select_number); } thd->pop_internal_handler(); diff -Nru mariadb-10.1-10.1.25/sql/sp_head.cc mariadb-10.1-10.1.30/sql/sp_head.cc --- mariadb-10.1-10.1.25/sql/sp_head.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sp_head.cc 2017-12-21 15:48:49.000000000 +0000 @@ -141,7 +141,6 @@ case DECIMAL_RESULT: if (item->field_type() != MYSQL_TYPE_BIT) return item->val_str(str); - else {/* Bit type is handled as binary string */} /* fall through */ case STRING_RESULT: { @@ -598,7 +597,7 @@ m_flags(0), m_sp_cache_version(0), m_creation_ctx(0), - unsafe_flags(0), + unsafe_flags(0), m_select_number(1), m_recursion_level(0), m_next_cached_sp(0), m_cont_level(0) @@ -1137,6 +1136,19 @@ if (check_stack_overrun(thd, 7 * STACK_MIN_SIZE, (uchar*)&old_packet)) DBUG_RETURN(TRUE); + /* + Normally the counter is not reset between parsing and first execution, + but it is possible in case of error to have parsing on one CALL and + first execution (where VIEW will be parsed and added). So we store the + counter after parsing and restore it before execution just to avoid + repeating SELECT numbers. + + Other problem is that it can be more SELECTs parsed in case of fixing + error causes previous interruption of the SP. So it is save not just + assign old value but add it. + */ + thd->select_number+= m_select_number; + /* init per-instruction memroot */ init_sql_alloc(&execute_mem_root, MEM_ROOT_BLOCK_SIZE, 0, MYF(0)); @@ -1470,6 +1482,16 @@ m_recursion_level + 1)); m_first_instance->m_first_free_instance= this; + /* + This execution of the SP was aborted with an error (e.g. "Table not + found"). However it might still have consumed some numbers from the + thd->select_number counter. The next sp->exec() call must not use the + consumed numbers, so we remember the first free number (We know that + nobody will use it as this execution has stopped with an error). + */ + if (err_status) + set_select_number(thd->select_number); + DBUG_RETURN(err_status); } @@ -2101,7 +2123,6 @@ if (!err_status) { err_status= execute(thd, TRUE); - DBUG_PRINT("info", ("execute returned %d", (int) err_status)); } if (save_log_general) @@ -2519,10 +2540,18 @@ *full_access= ((!check_table_access(thd, SELECT_ACL, &tables, FALSE, 1, TRUE) && (tables.grant.privilege & SELECT_ACL) != 0) || + /* Check if user owns the routine. */ (!strcmp(sp->m_definer_user.str, thd->security_ctx->priv_user) && !strcmp(sp->m_definer_host.str, - thd->security_ctx->priv_host))); + thd->security_ctx->priv_host)) || + /* Check if current role or any of the sub-granted roles + own the routine. */ + (sp->m_definer_host.length == 0 && + (!strcmp(sp->m_definer_user.str, + thd->security_ctx->priv_role) || + check_role_is_granted(thd->security_ctx->priv_role, NULL, + sp->m_definer_user.str)))); if (!*full_access) return check_some_routine_access(thd, sp->m_db.str, sp->m_name.str, sp->m_type == TYPE_ENUM_PROCEDURE); @@ -4307,4 +4336,3 @@ lex->add_to_query_tables(table); return table; } - diff -Nru mariadb-10.1-10.1.25/sql/sp_head.h mariadb-10.1-10.1.30/sql/sp_head.h --- mariadb-10.1-10.1.25/sql/sp_head.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sp_head.h 2017-12-21 15:48:49.000000000 +0000 @@ -232,6 +232,7 @@ */ uint32 unsafe_flags; + uint m_select_number; public: inline Stored_program_creation_ctx *get_creation_ctx() { @@ -521,6 +522,8 @@ sp_pcontext *get_parse_context() { return m_pcont; } + void set_select_number(uint num) { m_select_number= num; } + private: MEM_ROOT *m_thd_root; ///< Temp. store for thd's mem_root diff -Nru mariadb-10.1-10.1.25/sql/sp_rcontext.cc mariadb-10.1-10.1.30/sql/sp_rcontext.cc --- mariadb-10.1-10.1.25/sql/sp_rcontext.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sp_rcontext.cc 2017-12-21 15:48:49.000000000 +0000 @@ -331,8 +331,7 @@ /* Reset error state. */ thd->clear_error(); - thd->killed= NOT_KILLED; // Some errors set thd->killed - // (e.g. "bad data"). + thd->reset_killed(); // Some errors set thd->killed, (e.g. "bad data"). /* Add a frame to handler-call-stack. */ Sql_condition_info *cond_info= diff -Nru mariadb-10.1-10.1.25/sql/sql_acl.cc mariadb-10.1-10.1.30/sql/sql_acl.cc --- mariadb-10.1-10.1.25/sql/sql_acl.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_acl.cc 2017-12-21 15:48:49.000000000 +0000 @@ -634,9 +634,6 @@ char *hostname, char *rolename, bool with_admin_option) { - if (!this) - return true; - size_t uname_l = safe_strlen(username); size_t hname_l = safe_strlen(hostname); size_t rname_l = safe_strlen(rolename); @@ -2285,37 +2282,42 @@ } -static void acl_update_db(const char *user, const char *host, const char *db, +static bool acl_update_db(const char *user, const char *host, const char *db, ulong privileges) { mysql_mutex_assert_owner(&acl_cache->lock); + bool updated= false; + for (uint i=0 ; i < acl_dbs.elements ; i++) { ACL_DB *acl_db=dynamic_element(&acl_dbs,i,ACL_DB*); if ((!acl_db->user && !user[0]) || - (acl_db->user && - !strcmp(user,acl_db->user))) + (acl_db->user && + !strcmp(user,acl_db->user))) { if ((!acl_db->host.hostname && !host[0]) || - (acl_db->host.hostname && - !strcmp(host, acl_db->host.hostname))) + (acl_db->host.hostname && + !strcmp(host, acl_db->host.hostname))) { - if ((!acl_db->db && !db[0]) || - (acl_db->db && !strcmp(db,acl_db->db))) + if ((!acl_db->db && !db[0]) || + (acl_db->db && !strcmp(db,acl_db->db))) - { - if (privileges) + { + if (privileges) { acl_db->access= privileges; acl_db->initial_access= acl_db->access; } - else - delete_dynamic_element(&acl_dbs,i); - } + else + delete_dynamic_element(&acl_dbs,i); + updated= true; + } } } } + + return updated; } @@ -3749,9 +3751,21 @@ acl_cache->clear(1); // Clear privilege cache if (old_row_exists) acl_update_db(combo.user.str,combo.host.str,db,rights); - else - if (rights) - acl_insert_db(combo.user.str,combo.host.str,db,rights); + else if (rights) + { + /* + If we did not have an already existing row, for users, we must always + insert an ACL_DB entry. For roles however, it is possible that one was + already created when DB privileges were propagated from other granted + roles onto the current role. For this case, first try to update the + existing entry, otherwise insert a new one. + */ + if (!combo.is_role() || + !acl_update_db(combo.user.str, combo.host.str, db, rights)) + { + acl_insert_db(combo.user.str,combo.host.str,db,rights); + } + } DBUG_RETURN(0); /* This could only happen if the grant tables got corrupted */ @@ -5654,6 +5668,7 @@ { PRIVS_TO_MERGE *data= (PRIVS_TO_MERGE *)context; + DBUG_ASSERT(grantee->counter > 0); if (--grantee->counter) return 1; // don't recurse into grantee just yet @@ -6746,17 +6761,14 @@ DBUG_RETURN(return_val); } - -static my_bool role_propagate_grants_action(void *ptr, - void *unused __attribute__((unused))) +static my_bool collect_leaf_roles(void *role_ptr, + void *roles_array) { - ACL_ROLE *role= (ACL_ROLE *)ptr; - if (role->counter) - return 0; - - mysql_mutex_assert_owner(&acl_cache->lock); - PRIVS_TO_MERGE data= { PRIVS_TO_MERGE::ALL, 0, 0 }; - traverse_role_graph_up(role, &data, NULL, merge_role_privileges); + ACL_ROLE *role= static_cast(role_ptr); + Dynamic_array *array= + static_cast *>(roles_array); + if (!role->counter) + array->push(role); return 0; } @@ -6823,7 +6835,15 @@ } mysql_mutex_lock(&acl_cache->lock); - my_hash_iterate(&acl_roles, role_propagate_grants_action, NULL); + Dynamic_array leaf_roles; + my_hash_iterate(&acl_roles, collect_leaf_roles, &leaf_roles); + PRIVS_TO_MERGE data= { PRIVS_TO_MERGE::ALL, 0, 0 }; + for (size_t i= 0; i < leaf_roles.elements(); i++) + { + traverse_role_graph_up(leaf_roles.at(i), &data, NULL, + merge_role_privileges); + } + mysql_mutex_unlock(&acl_cache->lock); mysql_rwlock_unlock(&LOCK_grant); @@ -8473,6 +8493,17 @@ mysql_mutex_unlock(&acl_cache->lock); } +static int check_role_is_granted_callback(ACL_USER_BASE *grantee, void *data) +{ + LEX_CSTRING *rolename= static_cast(data); + if (rolename->length == grantee->user.length && + !strcmp(rolename->str, grantee->user.str)) + return -1; // End search, we've found our role. + + /* Keep looking, we haven't found our role yet. */ + return 0; +} + /* Initialize a TABLE_LIST array and open grant tables @@ -9499,13 +9530,13 @@ } } - binlog= true; if (replace_user_table(thd, tables[USER_TABLE].table, *user_name, 0, 0, 1, 0)) { append_user(thd, &wrong_users, user_name); result= TRUE; continue; } + binlog= true; // every created role is automatically granted to its creator-admin if (handle_as_role) @@ -10452,7 +10483,6 @@ } #endif /*NO_EMBEDDED_ACCESS_CHECKS */ - SHOW_VAR acl_statistics[] = { #ifndef NO_EMBEDDED_ACCESS_CHECKS {"column_grants", (char*)show_column_grants, SHOW_SIMPLE_FUNC}, @@ -10468,6 +10498,43 @@ {NullS, NullS, SHOW_LONG}, }; +/* Check if a role is granted to a user/role. We traverse the role graph + and return true if we find a match. + + hostname == NULL means we are looking for a role as a starting point, + otherwise a user. +*/ +bool check_role_is_granted(const char *username, + const char *hostname, + const char *rolename) +{ + DBUG_ENTER("check_role_is_granted"); + bool result= false; +#ifndef NO_EMBEDDED_ACCESS_CHECKS + ACL_USER_BASE *root; + mysql_mutex_lock(&acl_cache->lock); + if (hostname) + root= find_user_exact(username, hostname); + else + root= find_acl_role(username); + + LEX_CSTRING role_lex; + role_lex.str= rolename; + role_lex.length= strlen(rolename); + + if (root && /* No grantee, nothing to search. */ + traverse_role_graph_down(root, &role_lex, check_role_is_granted_callback, + NULL) == -1) + { + /* We have found the role during our search. */ + result= true; + } + + /* We haven't found the role or we had no initial grantee to start from. */ + mysql_mutex_unlock(&acl_cache->lock); +#endif + DBUG_RETURN(result); +} int fill_schema_enabled_roles(THD *thd, TABLE_LIST *tables, COND *cond) { @@ -12839,4 +12906,3 @@ MariaDB_PLUGIN_MATURITY_STABLE /* Maturity */ } maria_declare_plugin_end; - diff -Nru mariadb-10.1-10.1.25/sql/sql_acl.h mariadb-10.1-10.1.30/sql/sql_acl.h --- mariadb-10.1-10.1.25/sql/sql_acl.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_acl.h 2017-12-21 15:48:49.000000000 +0000 @@ -406,6 +406,14 @@ extern SHOW_VAR acl_statistics[]; +/* Check if a role is granted to a user/role. + + If hostname == NULL, search for a role as the starting grantee. +*/ +bool check_role_is_granted(const char *username, + const char *hostname, + const char *rolename); + #ifndef DBUG_OFF extern ulong role_global_merges, role_db_merges, role_table_merges, role_column_merges, role_routine_merges; diff -Nru mariadb-10.1-10.1.25/sql/sql_admin.cc mariadb-10.1-10.1.30/sql/sql_admin.cc --- mariadb-10.1-10.1.25/sql/sql_admin.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_admin.cc 2017-12-21 15:48:49.000000000 +0000 @@ -66,7 +66,6 @@ if (thd->get_stmt_da()->is_ok()) thd->get_stmt_da()->reset_diagnostics_area(); table_list->table= NULL; - result_code= result_code ? HA_ADMIN_FAILED : HA_ADMIN_OK; DBUG_RETURN(result_code); } diff -Nru mariadb-10.1-10.1.25/sql/sql_base.cc mariadb-10.1-10.1.30/sql/sql_base.cc --- mariadb-10.1-10.1.25/sql/sql_base.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_base.cc 2017-12-21 15:48:49.000000000 +0000 @@ -400,7 +400,7 @@ if ((in_use->system_thread & SYSTEM_THREAD_DELAYED_INSERT) && ! in_use->killed) { - in_use->killed= KILL_SYSTEM_THREAD; + in_use->set_killed(KILL_SYSTEM_THREAD); mysql_mutex_lock(&in_use->mysys_var->mutex); if (in_use->mysys_var->current_cond) { @@ -1245,6 +1245,7 @@ thd->variables.character_set_client= cs_save; thd->get_stmt_da()->set_overwrite_status(true); + thd->transaction.stmt.mark_dropped_temp_table(); if ((error= (mysql_bin_log.write(&qinfo) || error))) { /* @@ -7852,13 +7853,15 @@ bool setup_fields(THD *thd, Item **ref_pointer_array, List &fields, enum_mark_columns mark_used_columns, - List *sum_func_list, bool allow_sum_func) + List *sum_func_list, List *pre_fix, + bool allow_sum_func) { reg2 Item *item; enum_mark_columns save_mark_used_columns= thd->mark_used_columns; nesting_map save_allow_sum_func= thd->lex->allow_sum_func; List_iterator it(fields); bool save_is_item_list_lookup; + bool make_pre_fix= (pre_fix && (pre_fix->elements == 0)); DBUG_ENTER("setup_fields"); DBUG_PRINT("enter", ("ref_pointer_array: %p", ref_pointer_array)); @@ -7905,6 +7908,9 @@ thd->lex->current_select->cur_pos_in_select_list= 0; while ((item= it++)) { + if (make_pre_fix) + pre_fix->push_back(item, thd->stmt_arena->mem_root); + if ((!item->fixed && item->fix_fields(thd, it.ref())) || (item= *(it.ref()))->check_cols(1)) { @@ -9135,7 +9141,7 @@ if ((in_use->system_thread & SYSTEM_THREAD_DELAYED_INSERT) && !in_use->killed) { - in_use->killed= KILL_SYSTEM_THREAD; + in_use->set_killed(KILL_SYSTEM_THREAD); mysql_mutex_lock(&in_use->mysys_var->mutex); if (in_use->mysys_var->current_cond) { diff -Nru mariadb-10.1-10.1.25/sql/sql_base.h mariadb-10.1-10.1.30/sql/sql_base.h --- mariadb-10.1-10.1.25/sql/sql_base.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_base.h 2017-12-21 15:48:49.000000000 +0000 @@ -174,7 +174,8 @@ List *sum_func_list, uint wild_num); bool setup_fields(THD *thd, Item** ref_pointer_array, List &item, enum_mark_columns mark_used_columns, - List *sum_func_list, bool allow_sum_func); + List *sum_func_list, List *pre_fix, + bool allow_sum_func); void unfix_fields(List &items); bool fill_record(THD * thd, TABLE *table_arg, List &fields, List &values, bool ignore_errors); @@ -405,7 +406,7 @@ bool res; thd->lex->select_lex.no_wrap_view_item= TRUE; res= setup_fields(thd, ref_pointer_array, item, mark_used_columns, - sum_func_list, allow_sum_func); + sum_func_list, NULL, allow_sum_func); thd->lex->select_lex.no_wrap_view_item= FALSE; return res; } diff -Nru mariadb-10.1-10.1.25/sql/sql_cache.cc mariadb-10.1-10.1.30/sql/sql_cache.cc --- mariadb-10.1-10.1.25/sql/sql_cache.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_cache.cc 2017-12-21 15:48:49.000000000 +0000 @@ -2160,8 +2160,7 @@ response, we can't handle it anyway. */ (void) trans_commit_stmt(thd); - if (!thd->get_stmt_da()->is_set()) - thd->get_stmt_da()->disable_status(); + thd->get_stmt_da()->disable_status(); BLOCK_UNLOCK_RD(query_block); MYSQL_QUERY_CACHE_HIT(thd->query(), (ulong) thd->limit_found_rows); @@ -4615,7 +4614,7 @@ DBUG_PRINT("warning", ("%5d QUERY CACHE WRECK => DISABLED",line)); DBUG_PRINT("warning", ("==================================")); if (thd) - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); cache_dump(); /* check_integrity(0); */ /* Can't call it here because of locks */ bins_dump(); diff -Nru mariadb-10.1-10.1.25/sql/sql_class.cc mariadb-10.1-10.1.30/sql/sql_class.cc --- mariadb-10.1-10.1.25/sql/sql_class.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_class.cc 2017-12-21 15:48:49.000000000 +0000 @@ -236,7 +236,7 @@ sql_field->field_name)) {} if (!sql_field) { - my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), column->field_name); + my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), column->field_name.str); DBUG_RETURN(TRUE); } if (type == Key::FOREIGN_KEY && sql_field->vcol_info) @@ -333,7 +333,7 @@ */ void thd_set_killed(THD *thd) { - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); } /** @@ -691,12 +691,6 @@ @param buffer pointer to preferred result buffer @param length length of buffer @param max_query_len how many chars of query to copy (0 for all) - - @req LOCK_thread_count - - @note LOCK_thread_count mutex is not necessary when the function is invoked on - the currently running thread (current_thd) or if the caller in some other - way guarantees that access to thd->query is serialized. @return Pointer to string */ @@ -710,6 +704,9 @@ const Security_context *sctx= &thd->main_security_ctx; char header[256]; int len; + + mysql_mutex_lock(&LOCK_thread_count); + /* The pointers thd->query and thd->proc_info might change since they are being modified concurrently. This is acceptable for proc_info since its @@ -765,6 +762,7 @@ } mysql_mutex_unlock(&thd->LOCK_thd_data); } + mysql_mutex_unlock(&LOCK_thread_count); if (str.c_ptr_safe() == buffer) return buffer; @@ -935,6 +933,7 @@ query_start_used= query_start_sec_part_used= 0; count_cuted_fields= CHECK_FIELD_IGNORE; killed= NOT_KILLED; + killed_err= 0; col_access=0; is_slave_error= thread_specific_used= FALSE; my_hash_clear(&handler_tables_hash); @@ -992,6 +991,7 @@ #endif mysql_mutex_init(key_LOCK_thd_data, &LOCK_thd_data, MY_MUTEX_INIT_FAST); mysql_mutex_init(key_LOCK_wakeup_ready, &LOCK_wakeup_ready, MY_MUTEX_INIT_FAST); + mysql_mutex_init(key_LOCK_thd_kill, &LOCK_thd_kill, MY_MUTEX_INIT_FAST); mysql_cond_init(key_COND_wakeup_ready, &COND_wakeup_ready, 0); /* LOCK_thread_count goes before LOCK_thd_data - the former is called around @@ -1023,6 +1023,8 @@ wsrep_info[sizeof(wsrep_info) - 1] = '\0'; /* make sure it is 0-terminated */ wsrep_sync_wait_gtid = WSREP_GTID_UNDEFINED; wsrep_affected_rows = 0; + wsrep_replicate_GTID = false; + wsrep_skip_wsrep_GTID = false; #endif /* Call to init() below requires fully initialized Open_tables_state. */ reset_open_tables_state(this); @@ -1256,7 +1258,7 @@ push_warning and strict SQL_MODE case. */ level= Sql_condition::WARN_LEVEL_ERROR; - killed= KILL_BAD_DATA; + set_killed(KILL_BAD_DATA); } switch (level) @@ -1439,6 +1441,8 @@ wsrep_TOI_pre_query_len = 0; wsrep_sync_wait_gtid = WSREP_GTID_UNDEFINED; wsrep_affected_rows = 0; + wsrep_replicate_GTID = false; + wsrep_skip_wsrep_GTID = false; #endif /* WITH_WSREP */ if (variables.sql_log_bin) @@ -1564,7 +1568,7 @@ DBUG_ENTER("THD::cleanup"); DBUG_ASSERT(cleanup_done == 0); - killed= KILL_CONNECTION; + set_killed(KILL_CONNECTION); #ifdef ENABLE_WHEN_BINLOG_WILL_BE_ABLE_TO_PREPARE if (transaction.xid_state.xa_state == XA_PREPARED) { @@ -1667,6 +1671,7 @@ mysql_cond_destroy(&COND_wakeup_ready); mysql_mutex_destroy(&LOCK_wakeup_ready); mysql_mutex_destroy(&LOCK_thd_data); + mysql_mutex_destroy(&LOCK_thd_kill); #ifndef DBUG_OFF dbug_sentry= THD_SENTRY_GONE; #endif @@ -1839,7 +1844,8 @@ state_to_set= killed; /* Set the 'killed' flag of 'this', which is the target THD object. */ - killed= state_to_set; + mysql_mutex_lock(&LOCK_thd_kill); + set_killed_no_mutex(state_to_set); if (state_to_set >= KILL_CONNECTION || state_to_set == NOT_KILLED) { @@ -1925,6 +1931,7 @@ } mysql_mutex_unlock(&mysys_var->mutex); } + mysql_mutex_unlock(&LOCK_thd_kill); DBUG_VOID_RETURN; } @@ -1942,7 +1949,7 @@ mysql_mutex_lock(&LOCK_thd_data); - killed= KILL_CONNECTION; + set_killed(KILL_CONNECTION); #ifdef SIGNAL_WITH_VIO_CLOSE /* @@ -1978,7 +1985,7 @@ DBUG_PRINT("info", ("kill delayed thread")); mysql_mutex_lock(&in_use->LOCK_thd_data); if (in_use->killed < KILL_CONNECTION) - in_use->killed= KILL_CONNECTION; + in_use->set_killed(KILL_CONNECTION); if (in_use->mysys_var) { mysql_mutex_lock(&in_use->mysys_var->mutex); @@ -2031,13 +2038,21 @@ /* Get error number for killed state Note that the error message can't have any parameters. + If one needs parameters, one should use THD::killed_err_msg See thd::kill_message() */ -int killed_errno(killed_state killed) +int THD::killed_errno() { DBUG_ENTER("killed_errno"); - DBUG_PRINT("enter", ("killed: %d", killed)); + DBUG_PRINT("enter", ("killed: %d killed_errno: %d", + killed, killed_err ? killed_err->no: 0)); + + /* Ensure that killed_err is not set if we are not killed */ + DBUG_ASSERT(!killed_err || killed != NOT_KILLED); + + if (killed_err) + DBUG_RETURN(killed_err->no); switch (killed) { case NOT_KILLED: @@ -2478,7 +2493,7 @@ { my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_FATALERROR), ALIGN_SIZE(sizeof(TABLE_LIST)) + key_length + 1); - killed= KILL_CONNECTION; + set_killed(KILL_CONNECTION); return 0; } @@ -4113,7 +4128,7 @@ if (external_user) { my_free(external_user); - user= NULL; + external_user= NULL; } my_free(ip); @@ -4330,6 +4345,10 @@ however not more often than global.progress_report_time. If global.progress_report_time is 0, then don't send progress reports, but check every second if the value has changed + + We clear any errors that we get from sending the progress packet to + the client as we don't want to set an error without the caller knowing + about it. */ static void thd_send_progress(THD *thd) @@ -4346,8 +4365,12 @@ thd->progress.next_report_time= (report_time + seconds_to_next * 1000000000ULL); if (global_system_variables.progress_report_time && - thd->variables.progress_report_time) + thd->variables.progress_report_time && !thd->is_error()) + { net_send_progress_packet(thd); + if (thd->is_error()) + thd->clear_error(); + } } } @@ -4835,11 +4858,14 @@ extern "C" int thd_binlog_format(const MYSQL_THD thd) { - if (((WSREP(thd) && wsrep_emulate_bin_log) || mysql_bin_log.is_open()) && - thd->variables.option_bits & OPTION_BIN_LOG) + if (WSREP(thd)) + { + /* for wsrep binlog format is meaningful also when binlogging is off */ return (int) thd->wsrep_binlog_format(); - else - return BINLOG_FORMAT_UNSPEC; + } + if (mysql_bin_log.is_open() && (thd->variables.option_bits & OPTION_BIN_LOG)) + return (int) thd->variables.binlog_format; + return BINLOG_FORMAT_UNSPEC; } extern "C" void thd_mark_transaction_to_rollback(MYSQL_THD thd, bool all) diff -Nru mariadb-10.1-10.1.25/sql/sql_class.h mariadb-10.1-10.1.30/sql/sql_class.h --- mariadb-10.1-10.1.25/sql/sql_class.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_class.h 2017-12-21 15:48:49.000000000 +0000 @@ -482,7 +482,6 @@ KILL_SERVER_HARD= 15 }; -extern int killed_errno(killed_state killed); #define killed_mask_hard(killed) ((killed_state) ((killed) & ~KILL_HARD_BIT)) enum killed_type @@ -1550,6 +1549,29 @@ /** + Implements the trivial error handler which counts errors as they happen. +*/ + +class Counting_error_handler : public Internal_error_handler +{ +public: + int errors; + bool handle_condition(THD *thd, + uint sql_errno, + const char* sqlstate, + Sql_condition::enum_warning_level level, + const char* msg, + Sql_condition ** cond_hdl) + { + if (level == Sql_condition::WARN_LEVEL_ERROR) + errors++; + return false; + } + Counting_error_handler() : errors(0) {} +}; + + +/** This class is an internal error handler implementation for DROP TABLE statements. The thing is that there may be warnings during execution of these statements, which should not be exposed to the user. @@ -1924,7 +1946,7 @@ rpl_sql_thread_info *rpl_sql_info; } system_thread_info; - void reset_for_next_command(); + void reset_for_next_command(bool do_clear_errors= 1); /* Constant for THD::where initialization in the beginning of every query. @@ -1980,6 +2002,8 @@ Is locked when THD is deleted. */ mysql_mutex_t LOCK_thd_data; + /* Protect kill information */ + mysql_mutex_t LOCK_thd_kill; /* all prepared statements and cursors of this connection */ Statement_map stmt_map; @@ -2615,7 +2639,7 @@ void check_limit_rows_examined() { if (++accessed_rows_and_keys > lex->limit_rows_examined_cnt) - killed= ABORT_QUERY; + set_killed(ABORT_QUERY); } USER_CONN *user_connect; @@ -2716,6 +2740,16 @@ */ killed_state volatile killed; + /* + The following is used if one wants to have a specific error number and + text for the kill + */ + struct err_info + { + int no; + const char msg[256]; + } *killed_err; + /* See also thd_killed() */ inline bool check_killed() { @@ -3280,18 +3314,18 @@ @todo: To silence an error, one should use Internal_error_handler mechanism. Issuing an error that can be possibly later "cleared" is not compatible with other installed error handlers and audit plugins. - In future this function will be removed. */ - inline void clear_error() + inline void clear_error(bool clear_diagnostics= 0) { DBUG_ENTER("clear_error"); - if (get_stmt_da()->is_error()) + if (get_stmt_da()->is_error() || clear_diagnostics) get_stmt_da()->reset_diagnostics_area(); is_slave_error= 0; if (killed == KILL_BAD_DATA) - killed= NOT_KILLED; // KILL_BAD_DATA can be reset w/o a mutex + reset_killed(); DBUG_VOID_RETURN; } + #ifndef EMBEDDED_LIBRARY inline bool vio_ok() const { return net.vio != 0; } /** Return FALSE if connection to client is broken. */ @@ -3401,10 +3435,54 @@ state after execution of a non-prepared SQL statement. */ void end_statement(); - inline int killed_errno() const + + /* + Mark thread to be killed, with optional error number and string. + string is not released, so it has to be allocted on thd mem_root + or be a global string + + Ensure that we don't replace a kill with a lesser one. For example + if user has done 'kill_connection' we shouldn't replace it with + KILL_QUERY. + */ + inline void set_killed(killed_state killed_arg, + int killed_errno_arg= 0, + const char *killed_err_msg_arg= 0) { - return ::killed_errno(killed); + mysql_mutex_lock(&LOCK_thd_kill); + set_killed_no_mutex(killed_arg, killed_errno_arg, killed_err_msg_arg); + mysql_mutex_unlock(&LOCK_thd_kill); } + /* + This is only used by THD::awake where we need to keep the lock mutex + locked over some time. + It's ok to have this inline, as in most cases killed_errno_arg will + be a constant 0 and most of the function will disappear. + */ + inline void set_killed_no_mutex(killed_state killed_arg, + int killed_errno_arg= 0, + const char *killed_err_msg_arg= 0) + { + if (killed <= killed_arg) + { + killed= killed_arg; + if (killed_errno_arg) + { + /* + If alloc fails, we only remember the killed flag. + The worst things that can happen is that we get + a suboptimal error message. + */ + if ((killed_err= (err_info*) alloc(sizeof(*killed_err)))) + { + killed_err->no= killed_errno_arg; + ::strmake((char*) killed_err->msg, killed_err_msg_arg, + sizeof(killed_err->msg)-1); + } + } + } + } + int killed_errno(); inline void reset_killed() { /* @@ -3413,9 +3491,10 @@ */ if (killed != NOT_KILLED) { - mysql_mutex_lock(&LOCK_thd_data); + mysql_mutex_lock(&LOCK_thd_kill); killed= NOT_KILLED; - mysql_mutex_unlock(&LOCK_thd_data); + killed_err= 0; + mysql_mutex_unlock(&LOCK_thd_kill); } } inline void reset_kill_query() @@ -3426,11 +3505,14 @@ mysys_var->abort= 0; } } - inline void send_kill_message() const + inline void send_kill_message() { + mysql_mutex_lock(&LOCK_thd_kill); int err= killed_errno(); if (err) - my_message(err, ER_THD(this, err), MYF(0)); + my_message(err, killed_err ? killed_err->msg : ER_THD(this, err), + MYF(0)); + mysql_mutex_unlock(&LOCK_thd_kill); } /* return TRUE if we will abort query if we make a warning now */ inline bool really_abort_on_warning() @@ -4013,6 +4095,8 @@ bool wsrep_ignore_table; wsrep_gtid_t wsrep_sync_wait_gtid; ulong wsrep_affected_rows; + bool wsrep_replicate_GTID; + bool wsrep_skip_wsrep_GTID; #endif /* WITH_WSREP */ /* Handling of timeouts for commands */ @@ -4048,6 +4132,16 @@ { main_lex.restore_set_statement_var(); } + /* Copy relevant `stmt` transaction flags to `all` transaction. */ + void merge_unsafe_rollback_flags() + { + if (transaction.stmt.modified_non_trans_table) + transaction.all.modified_non_trans_table= TRUE; + transaction.all.m_unsafe_rollback_flags|= + (transaction.stmt.m_unsafe_rollback_flags & + (THD_TRANS::DID_WAIT | THD_TRANS::CREATED_TEMP_TABLE | + THD_TRANS::DROPPED_TEMP_TABLE | THD_TRANS::DID_DDL)); + } }; @@ -5035,7 +5129,7 @@ { DBUG_ENTER("unique_add"); DBUG_PRINT("info", ("tree %u - %lu", tree.elements_in_tree, max_elements)); - if (!(tree.flag & TREE_ONLY_DUPS) && + if (!(tree.flag & TREE_ONLY_DUPS) && tree.elements_in_tree >= max_elements && flush()) DBUG_RETURN(1); DBUG_RETURN(!tree_insert(&tree, ptr, 0, tree.custom_arg)); diff -Nru mariadb-10.1-10.1.25/sql/sql_connect.cc mariadb-10.1-10.1.30/sql/sql_connect.cc --- mariadb-10.1-10.1.25/sql/sql_connect.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_connect.cc 2017-12-21 15:48:49.000000000 +0000 @@ -314,13 +314,9 @@ void init_max_user_conn(void) { #ifndef NO_EMBEDDED_ACCESS_CHECKS - if (my_hash_init(&hash_user_connections,system_charset_info,max_connections, - 0,0, (my_hash_get_key) get_key_conn, - (my_hash_free_key) free_user, 0)) - { - sql_print_error("Initializing hash_user_connections failed."); - exit(1); - } + my_hash_init(&hash_user_connections, system_charset_info, max_connections, + 0, 0, (my_hash_get_key) get_key_conn, + (my_hash_free_key) free_user, 0); #endif } @@ -479,24 +475,16 @@ void init_global_user_stats(void) { - if (my_hash_init(&global_user_stats, system_charset_info, max_connections, - 0, 0, (my_hash_get_key) get_key_user_stats, - (my_hash_free_key)free_user_stats, 0)) - { - sql_print_error("Initializing global_user_stats failed."); - exit(1); - } + my_hash_init(&global_user_stats, system_charset_info, max_connections, + 0, 0, (my_hash_get_key) get_key_user_stats, + (my_hash_free_key) free_user_stats, 0); } void init_global_client_stats(void) { - if (my_hash_init(&global_client_stats, system_charset_info, max_connections, - 0, 0, (my_hash_get_key) get_key_user_stats, - (my_hash_free_key)free_user_stats, 0)) - { - sql_print_error("Initializing global_client_stats failed."); - exit(1); - } + my_hash_init(&global_client_stats, system_charset_info, max_connections, + 0, 0, (my_hash_get_key) get_key_user_stats, + (my_hash_free_key) free_user_stats, 0); } extern "C" uchar *get_key_table_stats(TABLE_STATS *table_stats, size_t *length, @@ -513,12 +501,9 @@ void init_global_table_stats(void) { - if (my_hash_init(&global_table_stats, system_charset_info, max_connections, - 0, 0, (my_hash_get_key) get_key_table_stats, - (my_hash_free_key)free_table_stats, 0)) { - sql_print_error("Initializing global_table_stats failed."); - exit(1); - } + my_hash_init(&global_table_stats, system_charset_info, max_connections, + 0, 0, (my_hash_get_key) get_key_table_stats, + (my_hash_free_key) free_table_stats, 0); } extern "C" uchar *get_key_index_stats(INDEX_STATS *index_stats, size_t *length, @@ -535,13 +520,9 @@ void init_global_index_stats(void) { - if (my_hash_init(&global_index_stats, system_charset_info, max_connections, - 0, 0, (my_hash_get_key) get_key_index_stats, - (my_hash_free_key)free_index_stats, 0)) - { - sql_print_error("Initializing global_index_stats failed."); - exit(1); - } + my_hash_init(&global_index_stats, system_charset_info, max_connections, + 0, 0, (my_hash_get_key) get_key_index_stats, + (my_hash_free_key) free_index_stats, 0); } @@ -1196,7 +1177,7 @@ if (thd->is_error()) { Host_errors errors; - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); thd->print_aborted_warning(0, "init_connect command failed"); sql_print_warning("%s", thd->get_stmt_da()->message()); diff -Nru mariadb-10.1-10.1.25/sql/sql_const.h mariadb-10.1-10.1.30/sql/sql_const.h --- mariadb-10.1-10.1.25/sql/sql_const.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_const.h 2017-12-21 15:48:49.000000000 +0000 @@ -45,7 +45,18 @@ #define MAX_MBWIDTH 3 /* Max multibyte sequence */ #define MAX_FILENAME_MBWIDTH 5 #define MAX_FIELD_CHARLENGTH 255 -#define MAX_FIELD_VARCHARLENGTH 65535 +/* + In MAX_FIELD_VARCHARLENGTH we reserve extra bytes for the overhead: + - 2 bytes for the length + - 1 byte for NULL bits + to avoid the "Row size too large" error for these three corner definitions: + CREATE TABLE t1 (c VARBINARY(65533)); + CREATE TABLE t1 (c VARBINARY(65534)); + CREATE TABLE t1 (c VARBINARY(65535)); + Like VARCHAR(65536), they will be converted to BLOB automatically + in non-sctict mode. +*/ +#define MAX_FIELD_VARCHARLENGTH (65535-2-1) #define MAX_FIELD_BLOBLENGTH UINT_MAX32 /* cf field_blob::get_length() */ #define CONVERT_IF_BIGGER_TO_BLOB 512 /* Threshold *in characters* */ diff -Nru mariadb-10.1-10.1.25/sql/sql_delete.cc mariadb-10.1-10.1.30/sql/sql_delete.cc --- mariadb-10.1-10.1.25/sql/sql_delete.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_delete.cc 2017-12-21 15:48:49.000000000 +0000 @@ -766,7 +766,7 @@ DELETE_ACL, SELECT_ACL, TRUE)) DBUG_RETURN(TRUE); if ((wild_num && setup_wild(thd, table_list, field_list, NULL, wild_num)) || - setup_fields(thd, NULL, field_list, MARK_COLUMNS_READ, NULL, 0) || + setup_fields(thd, NULL, field_list, MARK_COLUMNS_READ, NULL, NULL, 0) || setup_conds(thd, table_list, select_lex->leaf_tables, conds) || setup_ftfuncs(select_lex)) DBUG_RETURN(TRUE); diff -Nru mariadb-10.1-10.1.25/sql/sql_derived.cc mariadb-10.1-10.1.30/sql/sql_derived.cc --- mariadb-10.1-10.1.25/sql/sql_derived.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_derived.cc 2017-12-21 15:48:49.000000000 +0000 @@ -466,7 +466,8 @@ // Update used tables cache according to new table map if (derived->on_expr) { - derived->on_expr->fix_after_pullout(parent_lex, &derived->on_expr); + derived->on_expr->fix_after_pullout(parent_lex, &derived->on_expr, + TRUE); fix_list_after_tbl_changes(parent_lex, &derived->nested_join->join_list); } } @@ -520,6 +521,8 @@ derived->merge_underlying_list != 0)); if (derived->merged_for_insert) DBUG_RETURN(FALSE); + if (derived->init_derived(thd, FALSE)) + DBUG_RETURN(TRUE); if (derived->is_materialized_derived()) DBUG_RETURN(mysql_derived_prepare(thd, lex, derived)); if ((thd->lex->sql_command == SQLCOM_UPDATE_MULTI || @@ -634,7 +637,8 @@ SELECT_LEX_UNIT *unit= derived->get_unit(); DBUG_ENTER("mysql_derived_prepare"); bool res= FALSE; - DBUG_PRINT("enter", ("unit 0x%lx", (ulong) unit)); + DBUG_PRINT("enter", ("unit: %p table_list: %p Alias '%s'", + unit, derived, derived->alias)); // Skip already prepared views/DT if (!unit || unit->prepared || diff -Nru mariadb-10.1-10.1.25/sql/sql_do.cc mariadb-10.1-10.1.30/sql/sql_do.cc --- mariadb-10.1-10.1.25/sql/sql_do.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_do.cc 2017-12-21 15:48:49.000000000 +0000 @@ -29,7 +29,7 @@ List_iterator li(values); Item *value; DBUG_ENTER("mysql_do"); - if (setup_fields(thd, 0, values, MARK_COLUMNS_NONE, 0, 0)) + if (setup_fields(thd, 0, values, MARK_COLUMNS_NONE, 0, NULL, 0)) DBUG_RETURN(TRUE); while ((value = li++)) (void) value->is_null(); diff -Nru mariadb-10.1-10.1.25/sql/sql_explain.cc mariadb-10.1-10.1.30/sql/sql_explain.cc --- mariadb-10.1-10.1.25/sql/sql_explain.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_explain.cc 2017-12-21 15:48:49.000000000 +0000 @@ -349,10 +349,13 @@ item_list.push_back(new (mem_root) Item_string_sys(thd, jtype_str), mem_root); - /* 'possible_keys' */ + /* 'possible_keys' + The buffer must not be deallocated before we call send_data, otherwise + we may end up reading freed memory. + */ + StringBuffer<64> possible_keys_buf; if (possible_keys && !possible_keys->is_empty()) { - StringBuffer<64> possible_keys_buf; push_string_list(thd, &item_list, *possible_keys, &possible_keys_buf); } else diff -Nru mariadb-10.1-10.1.25/sql/sql_insert.cc mariadb-10.1-10.1.30/sql/sql_insert.cc --- mariadb-10.1-10.1.25/sql/sql_insert.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_insert.cc 2017-12-21 15:48:49.000000000 +0000 @@ -258,7 +258,7 @@ if (table_list->is_view()) unfix_fields(fields); - res= setup_fields(thd, 0, fields, MARK_COLUMNS_WRITE, 0, 0); + res= setup_fields(thd, 0, fields, MARK_COLUMNS_WRITE, 0, NULL, 0); /* Restore the current context. */ ctx_state.restore_state(context, table_list); @@ -372,7 +372,7 @@ } /* Check the fields we are going to modify */ - if (setup_fields(thd, 0, update_fields, MARK_COLUMNS_WRITE, 0, 0)) + if (setup_fields(thd, 0, update_fields, MARK_COLUMNS_WRITE, 0, NULL, 0)) return -1; if (insert_table_list->is_view() && @@ -794,7 +794,7 @@ my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), counter); goto abort; } - if (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, 0)) + if (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, NULL, 0)) goto abort; switch_to_nullable_trigger_fields(*values, table); } @@ -1509,12 +1509,12 @@ table_list->next_local= 0; context->resolve_in_table_list_only(table_list); - res= (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, 0) || + res= (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, NULL, 0) || check_insert_fields(thd, context->table_list, fields, *values, !insert_into_view, 0, &map)); if (!res) - res= setup_fields(thd, 0, update_values, MARK_COLUMNS_READ, 0, 0); + res= setup_fields(thd, 0, update_values, MARK_COLUMNS_READ, 0, NULL, 0); if (!res && duplic == DUP_UPDATE) { @@ -2681,7 +2681,7 @@ { mysql_mutex_lock(&di->thd.LOCK_thd_data); if (di->thd.killed < KILL_CONNECTION) - di->thd.killed= KILL_CONNECTION; + di->thd.set_killed(KILL_CONNECTION); if (di->thd.mysys_var) { mysql_mutex_lock(&di->thd.mysys_var->mutex); @@ -2827,7 +2827,7 @@ thd->set_current_time(); threads.append(thd); if (abort_loop) - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); else thd->reset_killed(); mysql_mutex_unlock(&LOCK_thread_count); @@ -2972,7 +2972,7 @@ } #endif if (error == ETIMEDOUT || error == ETIME) - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); } /* We can't lock di->mutex and mysys_var->mutex at the same time */ mysql_mutex_unlock(&di->mutex); @@ -3001,7 +3001,7 @@ if (! (thd->lock= mysql_lock_tables(thd, &di->table, 1, 0))) { /* Fatal error */ - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); } mysql_cond_broadcast(&di->cond_client); } @@ -3010,7 +3010,7 @@ if (di->handle_inserts()) { /* Some fatal error */ - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); } } di->status=0; @@ -3054,7 +3054,7 @@ this. */ mysql_mutex_lock(&thd->LOCK_thd_data); - thd->killed= KILL_CONNECTION_HARD; // If error + thd->set_killed(KILL_CONNECTION_HARD); // If error thd->mdl_context.set_needs_thr_lock_abort(0); mysql_mutex_unlock(&thd->LOCK_thd_data); @@ -3143,7 +3143,7 @@ max_rows= delayed_insert_limit; if (thd.killed || table->s->tdc->flushed) { - thd.killed= KILL_SYSTEM_THREAD; + thd.set_killed(KILL_SYSTEM_THREAD); max_rows= ULONG_MAX; // Do as much as possible } @@ -3478,7 +3478,7 @@ */ lex->current_select= &lex->select_lex; - res= (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, 0) || + res= (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, NULL, 0) || check_insert_fields(thd, table_list, *fields, values, !insert_into_view, 1, &map)); @@ -3531,7 +3531,7 @@ ctx_state.get_first_name_resolution_table(); res= res || setup_fields(thd, 0, *info.update_values, - MARK_COLUMNS_READ, 0, 0); + MARK_COLUMNS_READ, 0, NULL, 0); if (!res) { /* @@ -4360,6 +4360,15 @@ bool select_create::send_eof() { DBUG_ENTER("select_create::send_eof"); + + /* + The routine that writes the statement in the binary log + is in select_insert::prepare_eof(). For that reason, we + mark the flag at this point. + */ + if (table->s->tmp_table) + thd->transaction.stmt.mark_created_temp_table(); + if (prepare_eof()) { abort_result_set(); diff -Nru mariadb-10.1-10.1.25/sql/sql_join_cache.cc mariadb-10.1-10.1.30/sql/sql_join_cache.cc --- mariadb-10.1-10.1.25/sql/sql_join_cache.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_join_cache.cc 2017-12-21 15:48:49.000000000 +0000 @@ -3877,6 +3877,7 @@ /* Dynamic range access is never used with BKA */ DBUG_ASSERT(join_tab->use_quick != 2); + join_tab->tracker->r_scans++; save_or_restore_used_tabs(join_tab, FALSE); init_mrr_buff(); @@ -3920,6 +3921,8 @@ int rc= join_tab->table->file->multi_range_read_next((range_id_t*)ptr) ? -1 : 0; if (!rc) { + join_tab->tracker->r_rows++; + join_tab->tracker->r_rows_after_where++; /* If a record in in an incremental cache contains no fields then the association for the last record in cache will be equal to cache->end_pos diff -Nru mariadb-10.1-10.1.25/sql/sql_lex.cc mariadb-10.1-10.1.30/sql/sql_lex.cc --- mariadb-10.1-10.1.25/sql/sql_lex.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_lex.cc 2017-12-21 15:48:49.000000000 +0000 @@ -800,6 +800,7 @@ /* Reset LEX_MASTER_INFO */ lex->mi.reset(lex->sql_command == SQLCOM_CHANGE_MASTER); + delete_dynamic(&lex->delete_gtid_domain); DBUG_VOID_RETURN; } @@ -2878,6 +2879,10 @@ INITIAL_LEX_PLUGIN_LIST_SIZE, 0); reset_query_tables_list(TRUE); mi.init(); + init_dynamic_array2(&delete_gtid_domain, sizeof(ulong*), + gtid_domain_static_buffer, + initial_gtid_domain_buffer_size, + initial_gtid_domain_buffer_size, 0); } @@ -4861,4 +4866,3 @@ BINLOG_DIRECT_OFF & TRX_CACHE_NOT_EMPTY); } #endif - diff -Nru mariadb-10.1-10.1.25/sql/sql_lex.h mariadb-10.1-10.1.30/sql/sql_lex.h --- mariadb-10.1-10.1.25/sql/sql_lex.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_lex.h 2017-12-21 15:48:49.000000000 +0000 @@ -743,6 +743,7 @@ Group_list_ptrs *group_list_ptrs; List item_list; /* list of fields & expressions */ + List pre_fix; /* above list before fix_fields */ List interval_list; bool is_item_list_lookup; /* @@ -2725,6 +2726,13 @@ */ Item *limit_rows_examined; ulonglong limit_rows_examined_cnt; + /** + Holds a set of domain_ids for deletion at FLUSH..DELETE_DOMAIN_ID + */ + DYNAMIC_ARRAY delete_gtid_domain; + static const ulong initial_gtid_domain_buffer_size= 16; + ulong gtid_domain_static_buffer[initial_gtid_domain_buffer_size]; + inline void set_limit_rows_examined() { if (limit_rows_examined) diff -Nru mariadb-10.1-10.1.25/sql/sql_load.cc mariadb-10.1-10.1.30/sql/sql_load.cc --- mariadb-10.1-10.1.25/sql/sql_load.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_load.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. - Copyright (c) 2010, 2016, MariaDB + Copyright (c) 2010, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -353,22 +353,22 @@ Let us also prepare SET clause, altough it is probably empty in this case. */ - if (setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, 0) || - setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, 0)) + if (setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, NULL, 0) || + setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, NULL, 0)) DBUG_RETURN(TRUE); } else { // Part field list /* TODO: use this conds for 'WITH CHECK OPTIONS' */ - if (setup_fields(thd, 0, fields_vars, MARK_COLUMNS_WRITE, 0, 0) || - setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, 0) || + if (setup_fields(thd, 0, fields_vars, MARK_COLUMNS_WRITE, 0, NULL, 0) || + setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, NULL, 0) || check_that_all_fields_are_given_values(thd, table, table_list)) DBUG_RETURN(TRUE); /* Add all fields with default functions to table->write_set. */ if (table->default_field) table->mark_default_fields_for_write(); /* Fix the expressions in SET clause */ - if (setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, 0)) + if (setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, NULL, 0)) DBUG_RETURN(TRUE); } switch_to_nullable_trigger_fields(fields_vars, table); @@ -613,7 +613,7 @@ DBUG_EXECUTE_IF("simulate_kill_bug27571", { error=1; - thd->killed= KILL_QUERY; + thd->set_killed(KILL_QUERY); };); #ifndef EMBEDDED_LIBRARY diff -Nru mariadb-10.1-10.1.25/sql/sql_parse.cc mariadb-10.1-10.1.30/sql/sql_parse.cc --- mariadb-10.1-10.1.25/sql/sql_parse.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_parse.cc 2017-12-21 15:48:49.000000000 +0000 @@ -669,6 +669,7 @@ */ save_vio= thd->net.vio; thd->net.vio= 0; + thd->clear_error(1); dispatch_command(COM_QUERY, thd, buf, len); thd->client_capabilities= save_client_capabilities; thd->net.vio= save_vio; @@ -800,6 +801,7 @@ if (bootstrap_error) break; + thd->reset_kill_query(); /* Ensure that killed_errmsg is released */ free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC)); free_root(&thd->transaction.mem_root,MYF(MY_KEEP_PREALLOC)); thd->lex->restore_set_statement_var(); @@ -954,13 +956,8 @@ if(!thd->skip_wait_timeout) my_net_set_read_timeout(net, thd->variables.net_wait_timeout); - - /* - XXX: this code is here only to clear possible errors of init_connect. - Consider moving to init_connect() instead. - */ - thd->clear_error(); // Clear error message - thd->get_stmt_da()->reset_diagnostics_area(); + /* Errors and diagnostics are cleared once here before query */ + thd->clear_error(1); net_new_transaction(net); @@ -1123,6 +1120,7 @@ WSREP_WARN("For retry temporally setting character set to : %s", my_charset_latin1.csname); } + thd->clear_error(); return_value= dispatch_command(command, thd, thd->wsrep_retry_query, thd->wsrep_retry_query_len); thd->variables.character_set_client = current_charset; @@ -1162,8 +1160,7 @@ @retval FALSE The statement isn't updating any relevant tables. */ -static my_bool deny_updates_if_read_only_option(THD *thd, - TABLE_LIST *all_tables) +static bool deny_updates_if_read_only_option(THD *thd, TABLE_LIST *all_tables) { DBUG_ENTER("deny_updates_if_read_only_option"); @@ -1172,11 +1169,7 @@ LEX *lex= thd->lex; - const my_bool user_is_super= - ((ulong)(thd->security_ctx->master_access & SUPER_ACL) == - (ulong)SUPER_ACL); - - if (user_is_super) + if (thd->security_ctx->master_access & SUPER_ACL) DBUG_RETURN(FALSE); if (!(sql_command_flags[lex->sql_command] & CF_CHANGES_DATA)) @@ -1186,32 +1179,26 @@ if (lex->sql_command == SQLCOM_UPDATE_MULTI) DBUG_RETURN(FALSE); - const my_bool create_temp_tables= - (lex->sql_command == SQLCOM_CREATE_TABLE) && lex->tmp_table(); - - const my_bool drop_temp_tables= - (lex->sql_command == SQLCOM_DROP_TABLE) && lex->tmp_table(); - - const my_bool update_real_tables= - some_non_temp_table_to_be_updated(thd, all_tables) && - !(create_temp_tables || drop_temp_tables); - - - const my_bool create_or_drop_databases= - (lex->sql_command == SQLCOM_CREATE_DB) || - (lex->sql_command == SQLCOM_DROP_DB); + if (lex->sql_command == SQLCOM_CREATE_DB || + lex->sql_command == SQLCOM_DROP_DB) + DBUG_RETURN(TRUE); - if (update_real_tables || create_or_drop_databases) - { - /* - An attempt was made to modify one or more non-temporary tables. - */ - DBUG_RETURN(TRUE); - } + /* + a table-to-be-created is not in the temp table list yet, + so CREATE TABLE needs a special treatment + */ + if (lex->sql_command == SQLCOM_CREATE_TABLE) + DBUG_RETURN(!lex->tmp_table()); + /* + a table-to-be-dropped might not exist (DROP TEMPORARY TABLE IF EXISTS), + cannot use the temp table list either. + */ + if (lex->sql_command == SQLCOM_DROP_TABLE && lex->tmp_table()) + DBUG_RETURN(FALSE); - /* Assuming that only temporary tables are modified. */ - DBUG_RETURN(FALSE); + /* Now, check thd->temporary_tables list */ + DBUG_RETURN(some_non_temp_table_to_be_updated(thd, all_tables)); } @@ -1272,7 +1259,7 @@ my_error(ER_LOCK_DEADLOCK, MYF(0), "wsrep aborted transaction"); WSREP_DEBUG("Deadlock error for: %s", thd->query()); mysql_mutex_unlock(&thd->LOCK_wsrep_thd); - thd->killed = NOT_KILLED; + thd->reset_killed(); thd->mysys_var->abort = 0; thd->wsrep_conflict_state = NO_CONFLICT; thd->wsrep_retry_counter = 0; @@ -1625,7 +1612,7 @@ break; } packet= arg_end + 1; - thd->reset_for_next_command(); + thd->reset_for_next_command(0); // Don't clear errors lex_start(thd); /* Must be before we init the table list. */ if (lower_case_table_names) @@ -1694,7 +1681,10 @@ } #endif case COM_QUIT: - /* We don't calculate statistics for this command */ + /* Note: We don't calculate statistics for this command */ + + /* Ensure that quit works even if max_mem_used is set */ + thd->variables.max_mem_used= LONGLONG_MAX; general_log_print(thd, command, NullS); net->error=0; // Don't give 'abort' message thd->get_stmt_da()->disable_status(); // Don't send anything back @@ -1722,9 +1712,12 @@ kill_zombie_dump_threads(slave_server_id); thd->variables.server_id = slave_server_id; - general_log_print(thd, command, "Log: '%s' Pos: %ld", packet+10, - (long) pos); - mysql_binlog_send(thd, thd->strdup(packet + 10), (my_off_t) pos, flags); + const char *name= packet + 10; + size_t nlen= strlen(name); + + general_log_print(thd, command, "Log: '%s' Pos: %lu", name, pos); + if (nlen < FN_REFLEN) + mysql_binlog_send(thd, thd->strmake(name, nlen), (my_off_t)pos, flags); unregister_slave(thd,1,1); /* fake COM_QUIT -- if we get here, the thread needs to terminate */ error = TRUE; @@ -1964,16 +1957,18 @@ THD_STAGE_INFO(thd, stage_cleaning_up); thd->reset_query(); - thd->set_examined_row_count(0); // For processlist - thd->set_command(COM_SLEEP); /* Performance Schema Interface instrumentation, end */ MYSQL_END_STATEMENT(thd->m_statement_psi, thd->get_stmt_da()); + thd->set_examined_row_count(0); // For processlist + thd->set_command(COM_SLEEP); + thd->m_statement_psi= NULL; thd->m_digest= NULL; dec_thread_running(); thd->packet.shrink(thd->variables.net_buffer_length); // Reclaim some memory + thd->reset_kill_query(); /* Ensure that killed_errmsg is released */ free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC)); #if defined(ENABLED_PROFILING) @@ -2847,6 +2842,7 @@ goto error; } } + thd->transaction.stmt.mark_trans_did_ddl(); } #ifndef DBUG_OFF @@ -2904,6 +2900,7 @@ #endif case SQLCOM_SHOW_STATUS: { + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); execute_show_status(thd, all_tables); break; } @@ -2942,21 +2939,21 @@ case SQLCOM_SHOW_TABLE_STATUS: case SQLCOM_SHOW_OPEN_TABLES: case SQLCOM_SHOW_GENERIC: + case SQLCOM_SHOW_PLUGINS: case SQLCOM_SHOW_FIELDS: case SQLCOM_SHOW_KEYS: - case SQLCOM_SELECT: - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) - goto error; - /* fall through */ - case SQLCOM_SHOW_PLUGINS: case SQLCOM_SHOW_VARIABLES: case SQLCOM_SHOW_CHARSETS: case SQLCOM_SHOW_COLLATIONS: case SQLCOM_SHOW_STORAGE_ENGINES: case SQLCOM_SHOW_PROFILE: - { + case SQLCOM_SELECT: + { #ifdef WITH_WSREP - DBUG_ASSERT(thd->wsrep_exec_mode != REPL_RECV); + if (lex->sql_command == SQLCOM_SELECT) + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_READ) + else + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW) #endif /* WITH_WSREP */ thd->status_var.last_query_cost= 0.0; @@ -3080,6 +3077,7 @@ case SQLCOM_SHOW_RELAYLOG_EVENTS: /* fall through */ case SQLCOM_SHOW_BINLOG_EVENTS: { + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); if (check_global_access(thd, REPL_SLAVE_ACL)) goto error; res = mysql_show_binlog_events(thd); @@ -3306,7 +3304,7 @@ #ifdef WITH_PARTITION_STORAGE_ENGINE { partition_info *part_info= thd->lex->part_info; - if (part_info && !(part_info= thd->lex->part_info->get_clone(thd))) + if (part_info && !(part_info= part_info->get_clone(thd))) { res= -1; goto end_with_restore_list; @@ -3651,6 +3649,7 @@ { if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL)) goto error; + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); res = show_binlogs(thd); break; } @@ -3658,15 +3657,13 @@ #endif /* EMBEDDED_LIBRARY */ case SQLCOM_SHOW_CREATE: { - DBUG_ASSERT(first_table == all_tables && first_table != 0); + DBUG_ASSERT(first_table == all_tables && first_table != 0); #ifdef DONT_ALLOW_SHOW_COMMANDS my_message(ER_NOT_ALLOWED_COMMAND, ER_THD(thd, ER_NOT_ALLOWED_COMMAND), MYF(0)); /* purecov: inspected */ goto error; #else - - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) - goto error; + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); /* Access check: @@ -3730,8 +3727,7 @@ case SQLCOM_CHECKSUM: { DBUG_ASSERT(first_table == all_tables && first_table != 0); - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) - goto error; + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_READ); if (check_table_access(thd, SELECT_ACL, all_tables, FALSE, UINT_MAX, FALSE)) @@ -3742,6 +3738,7 @@ } case SQLCOM_UPDATE: { + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE); ha_rows found= 0, updated= 0; DBUG_ASSERT(first_table == all_tables && first_table != 0); if (WSREP_CLIENT(thd) && @@ -3777,16 +3774,14 @@ if (up_result != 2) break; } - /* Fall through */ + /* fall through */ case SQLCOM_UPDATE_MULTI: { DBUG_ASSERT(first_table == all_tables && first_table != 0); /* if we switched from normal update, rights are checked */ if (up_result != 2) { - if (WSREP_CLIENT(thd) && - wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE)) - goto error; + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE); if ((res= multi_update_precheck(thd, all_tables))) break; } @@ -3856,10 +3851,6 @@ break; } case SQLCOM_REPLACE: - { - if (WSREP_CLIENT(thd) && - wsrep_sync_wait(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE)) - goto error; #ifndef DBUG_OFF if (mysql_bin_log.is_open()) { @@ -3894,10 +3885,10 @@ DBUG_PRINT("debug", ("Just after generate_incident()")); } #endif - } - /* fall through */ + /* fall through */ case SQLCOM_INSERT: { + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE); DBUG_ASSERT(first_table == all_tables && first_table != 0); if (WSREP_CLIENT(thd) && @@ -3955,6 +3946,7 @@ case SQLCOM_REPLACE_SELECT: case SQLCOM_INSERT_SELECT: { + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE); select_result *sel_result; bool explain= MY_TEST(lex->describe); DBUG_ASSERT(first_table == all_tables && first_table != 0); @@ -4077,6 +4069,7 @@ } case SQLCOM_DELETE: { + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE); select_result *sel_result=lex->result; DBUG_ASSERT(first_table == all_tables && first_table != 0); if (WSREP_CLIENT(thd) && @@ -4137,6 +4130,7 @@ } case SQLCOM_DELETE_MULTI: { + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE); DBUG_ASSERT(first_table == all_tables && first_table != 0); TABLE_LIST *aux_tables= thd->lex->auxiliary_table_list.first; multi_delete *result; @@ -4217,19 +4211,6 @@ /* So that DROP TEMPORARY TABLE gets to binlog at commit/rollback */ thd->variables.option_bits|= OPTION_KEEP_LOG; } - if (WSREP(thd)) - { - for (TABLE_LIST *table= all_tables; table; table= table->next_global) - { - if (!lex->tmp_table() && - (!thd->is_current_stmt_binlog_format_row() || - !find_temporary_table(thd, table))) - { - WSREP_TO_ISOLATION_BEGIN(NULL, NULL, all_tables); - break; - } - } - } /* If we are a slave, we should add IF EXISTS if the query executed on the master without an error. This will help a slave to @@ -4239,6 +4220,20 @@ if (thd->slave_thread && !thd->slave_expected_error && slave_ddl_exec_mode_options == SLAVE_EXEC_MODE_IDEMPOTENT) lex->create_info.set(DDL_options_st::OPT_IF_EXISTS); + + if (WSREP(thd)) + { + for (TABLE_LIST *table= all_tables; table; table= table->next_global) + { + if (!lex->tmp_table() && + (!thd->is_current_stmt_binlog_format_row() || + !find_temporary_table(thd, table))) + { + WSREP_TO_ISOLATION_BEGIN(NULL, NULL, all_tables); + break; + } + } + } /* DDL and binlog write order are protected by metadata locks. */ res= mysql_rm_table(thd, first_table, lex->if_exists(), lex->tmp_table()); @@ -4544,9 +4539,7 @@ db_name.length= lex->name.length; strmov(db_name.str, lex->name.str); -#ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; -#endif /* WITH_WSREP */ + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); if (check_db_name(&db_name)) { @@ -4572,7 +4565,6 @@ if (res) break; - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) switch (lex->sql_command) { case SQLCOM_CREATE_EVENT: { @@ -4601,14 +4593,11 @@ /* lex->unit.cleanup() is called outside, no need to call it here */ break; case SQLCOM_SHOW_CREATE_EVENT: -#ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; -#endif /* WITH_WSREP */ + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); res= Events::show_create_event(thd, lex->spname->m_db, lex->spname->m_name); break; case SQLCOM_DROP_EVENT: - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) if (!(res= Events::drop_event(thd, lex->spname->m_db, lex->spname->m_name, lex->if_exists()))) @@ -4973,6 +4962,7 @@ if (!grant_user) goto error; + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); res = mysql_show_grants(thd, grant_user); break; } @@ -5046,18 +5036,23 @@ /* Disconnect the current client connection. */ if (tx_release) { - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); thd->print_aborted_warning(3, "RELEASE"); } #ifdef WITH_WSREP - if (WSREP(thd) && (thd->wsrep_conflict_state != NO_CONFLICT && - thd->wsrep_conflict_state != REPLAYING)) - { - DBUG_ASSERT(thd->is_error()); // the error is already issued + if (WSREP(thd)) { + + if (thd->wsrep_conflict_state == NO_CONFLICT || + thd->wsrep_conflict_state == REPLAYING) + { + my_ok(thd); + } + } else { +#endif /* WITH_WSREP */ + my_ok(thd); +#ifdef WITH_WSREP } - else #endif /* WITH_WSREP */ - my_ok(thd); break; } case SQLCOM_ROLLBACK: @@ -5092,15 +5087,18 @@ } /* Disconnect the current client connection. */ if (tx_release) - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); +#ifdef WITH_WSREP + if (WSREP(thd)) { + if (thd->wsrep_conflict_state == NO_CONFLICT) { + my_ok(thd); + } + } else { +#endif /* WITH_WSREP */ + my_ok(thd); #ifdef WITH_WSREP - if (WSREP(thd) && thd->wsrep_conflict_state != NO_CONFLICT) - { - DBUG_ASSERT(thd->is_error()); // the error is already issued } - else #endif /* WITH_WSREP */ - my_ok(thd); break; } case SQLCOM_RELEASE_SAVEPOINT: @@ -5451,18 +5449,14 @@ } case SQLCOM_SHOW_CREATE_PROC: { -#ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; -#endif /* WITH_WSREP */ + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); if (sp_show_create_routine(thd, TYPE_ENUM_PROCEDURE, lex->spname)) goto error; break; } case SQLCOM_SHOW_CREATE_FUNC: { -#ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; -#endif /* WITH_WSREP */ + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); if (sp_show_create_routine(thd, TYPE_ENUM_FUNCTION, lex->spname)) goto error; break; @@ -5475,9 +5469,7 @@ stored_procedure_type type= (lex->sql_command == SQLCOM_SHOW_PROC_CODE ? TYPE_ENUM_PROCEDURE : TYPE_ENUM_FUNCTION); -#ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; -#endif /* WITH_WSREP */ + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); if (sp_cache_routine(thd, type, lex->spname, FALSE, &sp)) goto error; if (!sp || sp->show_routine_code(thd)) @@ -5499,9 +5491,7 @@ if (check_ident_length(&lex->spname->m_name)) goto error; -#ifdef WITH_WSREP - if (WSREP_CLIENT(thd) && wsrep_sync_wait(thd)) goto error; -#endif /* WITH_WSREP */ + WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW); if (show_create_trigger(thd, lex->spname)) goto error; /* Error has been already logged. */ @@ -5513,7 +5503,6 @@ Note: SQLCOM_CREATE_VIEW also handles 'ALTER VIEW' commands as specified through the thd->lex->create_view_mode flag. */ - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) res= mysql_create_view(thd, first_table, thd->lex->create_view_mode); break; } @@ -5529,7 +5518,6 @@ case SQLCOM_CREATE_TRIGGER: { /* Conditionally writes to binlog. */ - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) res= mysql_create_or_drop_trigger(thd, all_tables, 1); break; @@ -5537,7 +5525,6 @@ case SQLCOM_DROP_TRIGGER: { /* Conditionally writes to binlog. */ - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) res= mysql_create_or_drop_trigger(thd, all_tables, 0); break; } @@ -5602,13 +5589,11 @@ my_ok(thd); break; case SQLCOM_INSTALL_PLUGIN: - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) if (! (res= mysql_install_plugin(thd, &thd->lex->comment, &thd->lex->ident))) my_ok(thd); break; case SQLCOM_UNINSTALL_PLUGIN: - WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) if (! (res= mysql_uninstall_plugin(thd, &thd->lex->comment, &thd->lex->ident))) my_ok(thd); @@ -5736,6 +5721,25 @@ } if (thd->is_error() || (thd->variables.option_bits & OPTION_MASTER_SQL_ERROR)) trans_rollback_stmt(thd); +#ifdef WITH_WSREP + if (thd->spcont && + (thd->wsrep_conflict_state == MUST_ABORT || + thd->wsrep_conflict_state == ABORTED || + thd->wsrep_conflict_state == CERT_FAILURE)) + { + /* + The error was cleared, but THD was aborted by wsrep and + wsrep_conflict_state is still set accordingly. This + situation is expected if we are running a stored procedure + that declares a handler that catches ER_LOCK_DEADLOCK error. + In which case the error may have been cleared in method + sp_rcontext::handle_sql_condition(). + */ + trans_rollback_stmt(thd); + thd->wsrep_conflict_state= NO_CONFLICT; + thd->killed= NOT_KILLED; + } +#endif /* WITH_WSREP */ else { /* If commit fails, we should be able to reset the OK status. */ @@ -5953,6 +5957,7 @@ if (!(res= check_table_access(thd, SELECT_ACL, all_tables, FALSE, UINT_MAX, FALSE))) res= execute_sqlcom_select(thd, all_tables); + /* Don't log SHOW STATUS commands to slow query log */ thd->server_status&= ~(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED); @@ -6878,6 +6883,8 @@ Reset the part of THD responsible for the state of command processing. + @param do_clear_error Set if we should clear errors + This needs to be called before execution of every statement (prepared or conventional). It is not called by substatements of routines. @@ -6885,12 +6892,16 @@ @todo Call it after we use THD for queries, not before. */ -void THD::reset_for_next_command() +void THD::reset_for_next_command(bool do_clear_error) { THD *thd= this; DBUG_ENTER("THD::reset_for_next_command"); DBUG_ASSERT(!thd->spcont); /* not for substatements of routines */ DBUG_ASSERT(! thd->in_sub_stmt); + + if (do_clear_error) + clear_error(1); + thd->free_list= 0; thd->select_number= 1; /* @@ -6936,8 +6947,7 @@ if (!thd->in_multi_stmt_transaction_mode()) { thd->variables.option_bits&= ~OPTION_KEEP_LOG; - thd->transaction.all.modified_non_trans_table= FALSE; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); } DBUG_ASSERT(thd->security_ctx== &thd->main_security_ctx); thd->thread_specific_used= FALSE; @@ -6947,8 +6957,6 @@ reset_dynamic(&thd->user_var_events); thd->user_var_events_alloc= thd->mem_root; } - thd->clear_error(); - thd->get_stmt_da()->reset_diagnostics_area(); thd->get_stmt_da()->reset_for_next_command(); thd->rand_used= 0; thd->m_sent_row_count= thd->m_examined_row_count= 0; @@ -7180,7 +7188,7 @@ thd->wsrep_conflict_state == CERT_FAILURE) { thd->reset_for_next_command(); - thd->killed= NOT_KILLED; + thd->reset_killed(); if (is_autocommit && thd->lex->sql_command != SQLCOM_SELECT && (thd->wsrep_retry_counter < thd->variables.wsrep_retry_autocommit)) @@ -7208,7 +7216,7 @@ thd->thread_id, is_autocommit, thd->wsrep_retry_counter, thd->variables.wsrep_retry_autocommit, thd->query()); my_error(ER_LOCK_DEADLOCK, MYF(0), "wsrep aborted transaction"); - thd->killed= NOT_KILLED; + thd->reset_killed(); thd->wsrep_conflict_state= NO_CONFLICT; if (thd->wsrep_conflict_state != REPLAYING) thd->wsrep_retry_counter= 0; // reset @@ -8282,10 +8290,10 @@ uint error; if (!(error= kill_one_thread(thd, id, state, type))) { - if ((!thd->killed)) + if (!thd->killed) my_ok(thd); else - my_error(killed_errno(thd->killed), MYF(0), id); + thd->send_kill_message(); } else my_error(error, MYF(0), id); diff -Nru mariadb-10.1-10.1.25/sql/sql_partition_admin.cc mariadb-10.1-10.1.30/sql/sql_partition_admin.cc --- mariadb-10.1-10.1.25/sql/sql_partition_admin.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_partition_admin.cc 2017-12-21 15:48:49.000000000 +0000 @@ -171,7 +171,8 @@ */ static bool compare_table_with_partition(THD *thd, TABLE *table, TABLE *part_table, - partition_element *part_elem) + partition_element *part_elem, + uint part_id) { HA_CREATE_INFO table_create_info, part_create_info; Alter_info part_alter_info; @@ -196,6 +197,7 @@ } /* db_type is not set in prepare_alter_table */ part_create_info.db_type= part_table->part_info->default_engine_type; + ((ha_partition*)(part_table->file))->update_part_create_info(&part_create_info, part_id); /* Since we exchange the partition with the table, allow exchanging auto_increment value as well. @@ -492,7 +494,7 @@ partition_element *part_elem; char *partition_name; char temp_name[FN_REFLEN+1]; - char part_file_name[FN_REFLEN+1]; + char part_file_name[2*FN_REFLEN+1]; char swap_file_name[FN_REFLEN+1]; char temp_file_name[FN_REFLEN+1]; uint swap_part_id; @@ -540,7 +542,7 @@ if ((!thd->is_current_stmt_binlog_format_row() || /* TODO: Do we really need to check for temp tables in this case? */ !find_temporary_table(thd, table_list)) && - wsrep_to_isolation_begin(thd, table_list->db, table_list->table_name, + wsrep_to_isolation_begin(thd, table_list->db, table_list->table_name, NULL)) { WSREP_WARN("ALTER TABLE EXCHANGE PARTITION isolation failure"); @@ -590,9 +592,9 @@ temp_name, "", FN_IS_TMP); if (!(part_elem= part_table->part_info->get_part_elem(partition_name, - part_file_name + - part_file_name_len, - &swap_part_id))) + part_file_name + part_file_name_len, + sizeof(part_file_name) - part_file_name_len, + &swap_part_id))) { // my_error(ER_UNKNOWN_PARTITION, MYF(0), partition_name, // part_table->alias); @@ -606,7 +608,8 @@ DBUG_RETURN(TRUE); } - if (compare_table_with_partition(thd, swap_table, part_table, part_elem)) + if (compare_table_with_partition(thd, swap_table, part_table, part_elem, + swap_part_id)) DBUG_RETURN(TRUE); /* Table and partition has same structure/options, OK to exchange */ @@ -789,7 +792,7 @@ if (WSREP(thd) && (!thd->is_current_stmt_binlog_format_row() || !find_temporary_table(thd, first_table)) && wsrep_to_isolation_begin( - thd, first_table->db, first_table->table_name, NULL) + thd, first_table->db, first_table->table_name, NULL) ) { WSREP_WARN("ALTER TABLE TRUNCATE PARTITION isolation failure"); diff -Nru mariadb-10.1-10.1.25/sql/sql_partition.cc mariadb-10.1-10.1.30/sql/sql_partition.cc --- mariadb-10.1-10.1.25/sql/sql_partition.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_partition.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2005, 2014, Oracle and/or its affiliates. - Copyright (c) 2009, 2014, SkySQL Ab. +/* Copyright (c) 2005, 2017, Oracle and/or its affiliates. + Copyright (c) 2009, 2017, SkySQL Ab. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -4652,10 +4652,6 @@ option_diffs[errors++]= "MAX_ROWS"; if (part_elem->part_min_rows != table_create_info->min_rows) option_diffs[errors++]= "MIN_ROWS"; - if (part_elem->data_file_name || table_create_info->data_file_name) - option_diffs[errors++]= "DATA DIRECTORY"; - if (part_elem->index_file_name || table_create_info->index_file_name) - option_diffs[errors++]= "INDEX DIRECTORY"; for (i= 0; i < errors; i++) my_error(ER_PARTITION_EXCHANGE_DIFFERENT_OPTION, MYF(0), @@ -4716,7 +4712,7 @@ thd->work_part_info= thd->lex->part_info; if (thd->work_part_info && - !(thd->work_part_info= thd->lex->part_info->get_clone(thd))) + !(thd->work_part_info= thd->work_part_info->get_clone(thd))) DBUG_RETURN(TRUE); /* ALTER_ADMIN_PARTITION is handled in mysql_admin_table */ @@ -4886,16 +4882,11 @@ my_error(ER_PARTITION_WRONG_VALUES_ERROR, MYF(0), "LIST", "IN"); } - else if (tab_part_info->part_type == RANGE_PARTITION) - { - my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "RANGE", "LESS THAN"); - } else { - DBUG_ASSERT(tab_part_info->part_type == LIST_PARTITION); - my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "LIST", "IN"); + DBUG_ASSERT(tab_part_info->part_type == RANGE_PARTITION || + tab_part_info->part_type == LIST_PARTITION); + (void) tab_part_info->error_if_requires_values(); } goto err; } @@ -5989,8 +5980,8 @@ DDL_LOG_ENTRY ddl_log_entry; partition_info *part_info= lpt->part_info; DDL_LOG_MEMORY_ENTRY *log_entry; - char tmp_path[FN_REFLEN]; - char normal_path[FN_REFLEN]; + char tmp_path[FN_REFLEN + 1]; + char normal_path[FN_REFLEN + 1]; List_iterator part_it(part_info->partitions); uint temp_partitions= part_info->temp_partitions.elements; uint num_elements= part_info->partitions.elements; @@ -6014,14 +6005,15 @@ ddl_log_entry.next_entry= *next_entry; ddl_log_entry.handler_name= ha_resolve_storage_engine_name(sub_elem->engine_type); - create_subpartition_name(tmp_path, path, - part_elem->partition_name, - sub_elem->partition_name, - TEMP_PART_NAME); - create_subpartition_name(normal_path, path, - part_elem->partition_name, - sub_elem->partition_name, - NORMAL_PART_NAME); + if (create_subpartition_name(tmp_path, sizeof(tmp_path), path, + part_elem->partition_name, + sub_elem->partition_name, + TEMP_PART_NAME) || + create_subpartition_name(normal_path, sizeof(normal_path), path, + part_elem->partition_name, + sub_elem->partition_name, + NORMAL_PART_NAME)) + DBUG_RETURN(TRUE); ddl_log_entry.name= normal_path; ddl_log_entry.from_name= tmp_path; if (part_elem->part_state == PART_IS_CHANGED) @@ -6042,12 +6034,13 @@ ddl_log_entry.next_entry= *next_entry; ddl_log_entry.handler_name= ha_resolve_storage_engine_name(part_elem->engine_type); - create_partition_name(tmp_path, path, - part_elem->partition_name, - TEMP_PART_NAME, TRUE); - create_partition_name(normal_path, path, - part_elem->partition_name, - NORMAL_PART_NAME, TRUE); + if (create_partition_name(tmp_path, sizeof(tmp_path), path, + part_elem->partition_name, TEMP_PART_NAME, + TRUE) || + create_partition_name(normal_path, sizeof(normal_path), path, + part_elem->partition_name, NORMAL_PART_NAME, + TRUE)) + DBUG_RETURN(TRUE); ddl_log_entry.name= normal_path; ddl_log_entry.from_name= tmp_path; if (part_elem->part_state == PART_IS_CHANGED) @@ -6086,7 +6079,7 @@ DDL_LOG_ENTRY ddl_log_entry; partition_info *part_info= lpt->part_info; DDL_LOG_MEMORY_ENTRY *log_entry; - char tmp_path[FN_LEN]; + char tmp_path[FN_REFLEN + 1]; List_iterator part_it(part_info->partitions); List_iterator temp_it(part_info->temp_partitions); uint num_temp_partitions= part_info->temp_partitions.elements; @@ -6125,10 +6118,10 @@ ddl_log_entry.next_entry= *next_entry; ddl_log_entry.handler_name= ha_resolve_storage_engine_name(sub_elem->engine_type); - create_subpartition_name(tmp_path, path, - part_elem->partition_name, - sub_elem->partition_name, - name_variant); + if (create_subpartition_name(tmp_path, sizeof(tmp_path), path, + part_elem->partition_name, + sub_elem->partition_name, name_variant)) + DBUG_RETURN(TRUE); ddl_log_entry.name= tmp_path; if (write_ddl_log_entry(&ddl_log_entry, &log_entry)) { @@ -6144,9 +6137,10 @@ ddl_log_entry.next_entry= *next_entry; ddl_log_entry.handler_name= ha_resolve_storage_engine_name(part_elem->engine_type); - create_partition_name(tmp_path, path, - part_elem->partition_name, - name_variant, TRUE); + if (create_partition_name(tmp_path, sizeof(tmp_path), path, + part_elem->partition_name, name_variant, + TRUE)) + DBUG_RETURN(TRUE); ddl_log_entry.name= tmp_path; if (write_ddl_log_entry(&ddl_log_entry, &log_entry)) { @@ -6832,9 +6826,7 @@ lpt->part_info= part_info; lpt->alter_info= alter_info; lpt->create_info= create_info; - lpt->db_options= create_info->table_options; - if (create_info->row_type == ROW_TYPE_DYNAMIC) - lpt->db_options|= HA_OPTION_PACK_RECORD; + lpt->db_options= create_info->table_options_with_row_type(); lpt->table= table; lpt->key_info_buffer= 0; lpt->key_count= 0; @@ -8266,31 +8258,41 @@ return res; } +/* used in error messages below */ +static const char *longest_str(const char *s1, const char *s2, + const char *s3=0) +{ + if (strlen(s2) > strlen(s1)) s1= s2; + if (s3 && strlen(s3) > strlen(s1)) s1= s3; + return s1; +} + /* Create partition names SYNOPSIS create_partition_name() - out:out Created partition name string + out:out The buffer for the created partition name string + must be *at least* of FN_REFLEN+1 bytes in1 First part in2 Second part name_variant Normal, temporary or renamed partition name RETURN VALUE - NONE + 0 if ok, error if name too long DESCRIPTION This method is used to calculate the partition name, service routine to the del_ren_cre_table method. */ -void create_partition_name(char *out, const char *in1, - const char *in2, uint name_variant, - bool translate) +int create_partition_name(char *out, size_t outlen, const char *in1, + const char *in2, uint name_variant, bool translate) { char transl_part_name[FN_REFLEN]; - const char *transl_part; + const char *transl_part, *end; + DBUG_ASSERT(outlen >= FN_REFLEN + 1); // consistency! same limit everywhere if (translate) { @@ -8299,51 +8301,62 @@ } else transl_part= in2; + if (name_variant == NORMAL_PART_NAME) - strxmov(out, in1, "#P#", transl_part, NullS); + end= strxnmov(out, outlen-1, in1, "#P#", transl_part, NullS); else if (name_variant == TEMP_PART_NAME) - strxmov(out, in1, "#P#", transl_part, "#TMP#", NullS); + end= strxnmov(out, outlen-1, in1, "#P#", transl_part, "#TMP#", NullS); else if (name_variant == RENAMED_PART_NAME) - strxmov(out, in1, "#P#", transl_part, "#REN#", NullS); + end= strxnmov(out, outlen-1, in1, "#P#", transl_part, "#REN#", NullS); + if (end - out == static_cast(outlen-1)) + { + my_error(ER_PATH_LENGTH, MYF(0), longest_str(in1, transl_part)); + return HA_WRONG_CREATE_OPTION; + } + return 0; } - -/* - Create subpartition name - - SYNOPSIS - create_subpartition_name() - out:out Created partition name string - in1 First part - in2 Second part - in3 Third part - name_variant Normal, temporary or renamed partition name - - RETURN VALUE - NONE - - DESCRIPTION - This method is used to calculate the subpartition name, service routine to - the del_ren_cre_table method. -*/ - -void create_subpartition_name(char *out, const char *in1, - const char *in2, const char *in3, - uint name_variant) +/** + Create subpartition name. This method is used to calculate the + subpartition name, service routine to the del_ren_cre_table method. + The output buffer size should be FN_REFLEN + 1(terminating '\0'). + + @param [out] out Created partition name string + @param in1 First part + @param in2 Second part + @param in3 Third part + @param name_variant Normal, temporary or renamed partition name + + @retval true Error. + @retval false Success. +*/ + +int create_subpartition_name(char *out, size_t outlen, + const char *in1, const char *in2, + const char *in3, uint name_variant) { - char transl_part_name[FN_REFLEN], transl_subpart_name[FN_REFLEN]; + char transl_part_name[FN_REFLEN], transl_subpart_name[FN_REFLEN], *end; + DBUG_ASSERT(outlen >= FN_REFLEN + 1); // consistency! same limit everywhere tablename_to_filename(in2, transl_part_name, FN_REFLEN); tablename_to_filename(in3, transl_subpart_name, FN_REFLEN); + if (name_variant == NORMAL_PART_NAME) - strxmov(out, in1, "#P#", transl_part_name, - "#SP#", transl_subpart_name, NullS); + end= strxnmov(out, outlen-1, in1, "#P#", transl_part_name, + "#SP#", transl_subpart_name, NullS); else if (name_variant == TEMP_PART_NAME) - strxmov(out, in1, "#P#", transl_part_name, - "#SP#", transl_subpart_name, "#TMP#", NullS); + end= strxnmov(out, outlen-1, in1, "#P#", transl_part_name, + "#SP#", transl_subpart_name, "#TMP#", NullS); else if (name_variant == RENAMED_PART_NAME) - strxmov(out, in1, "#P#", transl_part_name, - "#SP#", transl_subpart_name, "#REN#", NullS); + end= strxnmov(out, outlen-1, in1, "#P#", transl_part_name, + "#SP#", transl_subpart_name, "#REN#", NullS); + if (end - out == static_cast(outlen-1)) + { + my_error(ER_PATH_LENGTH, MYF(0), + longest_str(in1, transl_part_name, transl_subpart_name)); + return HA_WRONG_CREATE_OPTION; + } + return 0; } uint get_partition_field_store_length(Field *field) diff -Nru mariadb-10.1-10.1.25/sql/sql_partition.h mariadb-10.1-10.1.30/sql/sql_partition.h --- mariadb-10.1-10.1.25/sql/sql_partition.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_partition.h 2017-12-21 15:48:49.000000000 +0000 @@ -1,7 +1,8 @@ #ifndef SQL_PARTITION_INCLUDED #define SQL_PARTITION_INCLUDED -/* Copyright (c) 2006, 2013, Oracle and/or its affiliates. +/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. + Copyright (c) 2011, 2017, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -277,12 +278,12 @@ #define partition_key_modified(X,Y) 0 #endif -void create_partition_name(char *out, const char *in1, - const char *in2, uint name_variant, - bool translate); -void create_subpartition_name(char *out, const char *in1, - const char *in2, const char *in3, - uint name_variant); +int __attribute__((warn_unused_result)) + create_partition_name(char *out, size_t outlen, const char *in1, const char + *in2, uint name_variant, bool translate); +int __attribute__((warn_unused_result)) + create_subpartition_name(char *out, size_t outlen, const char *in1, const + char *in2, const char *in3, uint name_variant); void set_field_ptr(Field **ptr, const uchar *new_buf, const uchar *old_buf); void set_key_field_ptr(KEY *key_info, const uchar *new_buf, diff -Nru mariadb-10.1-10.1.25/sql/sql_plugin.cc mariadb-10.1-10.1.30/sql/sql_plugin.cc --- mariadb-10.1-10.1.25/sql/sql_plugin.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_plugin.cc 2017-12-21 15:48:49.000000000 +0000 @@ -228,7 +228,6 @@ static HASH plugin_hash[MYSQL_MAX_PLUGIN_TYPE_NUM]; static MEM_ROOT plugin_mem_root; static bool reap_needed= false; -static int plugin_array_version=0; static bool initialized= 0; ulong dlopen_count; @@ -322,7 +321,6 @@ static void cleanup_variables(struct system_variables *vars); static void plugin_vars_free_values(sys_var *vars); static void restore_ptr_backup(uint n, st_ptr_backup *backup); -static plugin_ref intern_plugin_lock(LEX *lex, plugin_ref plugin); static void intern_plugin_unlock(LEX *lex, plugin_ref plugin); static void reap_plugins(void); @@ -943,15 +941,17 @@ } -static plugin_ref intern_plugin_lock(LEX *lex, plugin_ref rc) +static plugin_ref intern_plugin_lock(LEX *lex, plugin_ref rc, + uint state_mask= PLUGIN_IS_READY | + PLUGIN_IS_UNINITIALIZED | + PLUGIN_IS_DELETED) { st_plugin_int *pi= plugin_ref_to_int(rc); DBUG_ENTER("intern_plugin_lock"); mysql_mutex_assert_owner(&LOCK_plugin); - if (pi->state & (PLUGIN_IS_READY | PLUGIN_IS_UNINITIALIZED | - PLUGIN_IS_DELETED)) + if (pi->state & state_mask) { plugin_ref plugin; #ifdef DBUG_OFF @@ -1146,7 +1146,6 @@ if (!(tmp_plugin_ptr= plugin_insert_or_reuse(&tmp))) goto err; - plugin_array_version++; if (my_hash_insert(&plugin_hash[plugin->type], (uchar*)tmp_plugin_ptr)) tmp_plugin_ptr->state= PLUGIN_IS_FREED; init_alloc_root(&tmp_plugin_ptr->mem_root, 4096, 4096, MYF(0)); @@ -1240,7 +1239,6 @@ my_hash_delete(&plugin_hash[plugin->plugin->type], (uchar*)plugin); plugin_dl_del(plugin->plugin_dl); plugin->state= PLUGIN_IS_FREED; - plugin_array_version++; free_root(&plugin->mem_root, MYF(0)); } else @@ -1853,11 +1851,11 @@ switch ((*(p++)= *(list++))) { case '\0': list= NULL; /* terminate the loop */ -#ifndef __WIN__ /* fall through */ + case ';': +#ifndef __WIN__ case ':': /* can't use this as delimiter as it may be drive letter */ #endif - case ';': str->str[str->length]= '\0'; if (str == &name) // load all plugins in named module { @@ -2110,12 +2108,16 @@ bool error; int argc=orig_argc; char **argv=orig_argv; + unsigned long event_class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE] = + { MYSQL_AUDIT_GENERAL_CLASSMASK }; DBUG_ENTER("mysql_install_plugin"); tables.init_one_table("mysql", 5, "plugin", 6, "plugin", TL_WRITE); if (!opt_noacl && check_table_access(thd, INSERT_ACL, &tables, FALSE, 1, FALSE)) DBUG_RETURN(TRUE); + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + /* need to open before acquiring LOCK_plugin or it will deadlock */ if (! (table = open_ltable(thd, &tables, TL_WRITE, MYSQL_LOCK_IGNORE_TIMEOUT))) @@ -2148,8 +2150,6 @@ See also mysql_uninstall_plugin() and initialize_audit_plugin() */ - unsigned long event_class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE] = - { MYSQL_AUDIT_GENERAL_CLASSMASK }; mysql_audit_acquire_plugins(thd, event_class_mask); mysql_mutex_lock(&LOCK_plugin); @@ -2180,6 +2180,10 @@ if (argv) free_defaults(argv); DBUG_RETURN(error); +#ifdef WITH_WSREP +error: + DBUG_RETURN(TRUE); +#endif /* WITH_WSREP */ } @@ -2246,6 +2250,8 @@ TABLE_LIST tables; LEX_STRING dl= *dl_arg; bool error= false; + unsigned long event_class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE] = + { MYSQL_AUDIT_GENERAL_CLASSMASK }; DBUG_ENTER("mysql_uninstall_plugin"); tables.init_one_table("mysql", 5, "plugin", 6, "plugin", TL_WRITE); @@ -2253,6 +2259,8 @@ if (!opt_noacl && check_table_access(thd, DELETE_ACL, &tables, FALSE, 1, FALSE)) DBUG_RETURN(TRUE); + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + /* need to open before acquiring LOCK_plugin or it will deadlock */ if (! (table= open_ltable(thd, &tables, TL_WRITE, MYSQL_LOCK_IGNORE_TIMEOUT))) DBUG_RETURN(TRUE); @@ -2278,8 +2286,6 @@ See also mysql_install_plugin() and initialize_audit_plugin() */ - unsigned long event_class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE] = - { MYSQL_AUDIT_GENERAL_CLASSMASK }; mysql_audit_acquire_plugins(thd, event_class_mask); mysql_mutex_lock(&LOCK_plugin); @@ -2309,70 +2315,65 @@ mysql_mutex_unlock(&LOCK_plugin); DBUG_RETURN(error); +#ifdef WITH_WSREP +error: + DBUG_RETURN(TRUE); +#endif /* WITH_WSREP */ } bool plugin_foreach_with_mask(THD *thd, plugin_foreach_func *func, int type, uint state_mask, void *arg) { - uint idx, total; - struct st_plugin_int *plugin, **plugins; - int version=plugin_array_version; + uint idx, total= 0; + struct st_plugin_int *plugin; + plugin_ref *plugins; + my_bool res= FALSE; DBUG_ENTER("plugin_foreach_with_mask"); if (!initialized) DBUG_RETURN(FALSE); - state_mask= ~state_mask; // do it only once - mysql_mutex_lock(&LOCK_plugin); - total= type == MYSQL_ANY_PLUGIN ? plugin_array.elements - : plugin_hash[type].records; /* Do the alloca out here in case we do have a working alloca: - leaving the nested stack frame invalidates alloca allocation. + leaving the nested stack frame invalidates alloca allocation. */ - plugins=(struct st_plugin_int **)my_alloca(total*sizeof(plugin)); if (type == MYSQL_ANY_PLUGIN) { - for (idx= 0; idx < total; idx++) + plugins= (plugin_ref*) my_alloca(plugin_array.elements * sizeof(plugin_ref)); + for (idx= 0; idx < plugin_array.elements; idx++) { plugin= *dynamic_element(&plugin_array, idx, struct st_plugin_int **); - plugins[idx]= !(plugin->state & state_mask) ? plugin : NULL; + if ((plugins[total]= intern_plugin_lock(0, plugin_int_to_ref(plugin), + state_mask))) + total++; } } else { HASH *hash= plugin_hash + type; - for (idx= 0; idx < total; idx++) + plugins= (plugin_ref*) my_alloca(hash->records * sizeof(plugin_ref)); + for (idx= 0; idx < hash->records; idx++) { plugin= (struct st_plugin_int *) my_hash_element(hash, idx); - plugins[idx]= !(plugin->state & state_mask) ? plugin : NULL; + if ((plugins[total]= intern_plugin_lock(0, plugin_int_to_ref(plugin), + state_mask))) + total++; } } mysql_mutex_unlock(&LOCK_plugin); for (idx= 0; idx < total; idx++) { - if (unlikely(version != plugin_array_version)) - { - mysql_mutex_lock(&LOCK_plugin); - for (uint i=idx; i < total; i++) - if (plugins[i] && plugins[i]->state & state_mask) - plugins[i]=0; - mysql_mutex_unlock(&LOCK_plugin); - } - plugin= plugins[idx]; /* It will stop iterating on first engine error when "func" returns TRUE */ - if (plugin && func(thd, plugin_int_to_ref(plugin), arg)) - goto err; + if ((res= func(thd, plugins[idx], arg))) + break; } + plugin_unlock_list(0, plugins, total); my_afree(plugins); - DBUG_RETURN(FALSE); -err: - my_afree(plugins); - DBUG_RETURN(TRUE); + DBUG_RETURN(res); } @@ -3491,7 +3492,6 @@ options->max_value= getopt_double2ulonglong((opt)->max_val); \ options->block_size= (long) (opt)->blk_sz; - void plugin_opt_set_limits(struct my_option *options, const struct st_mysql_sys_var *opt) { diff -Nru mariadb-10.1-10.1.25/sql/sql_prepare.cc mariadb-10.1-10.1.30/sql/sql_prepare.cc --- mariadb-10.1-10.1.25/sql/sql_prepare.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_prepare.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1321,7 +1321,7 @@ my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), counter); goto error; } - if (setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, 0)) + if (setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, NULL, 0)) goto error; } } @@ -1411,7 +1411,7 @@ table_list->register_want_access(want_privilege); #endif thd->lex->select_lex.no_wrap_view_item= TRUE; - res= setup_fields(thd, 0, select->item_list, MARK_COLUMNS_READ, 0, 0); + res= setup_fields(thd, 0, select->item_list, MARK_COLUMNS_READ, 0, NULL, 0); thd->lex->select_lex.no_wrap_view_item= FALSE; if (res) goto error; @@ -1422,7 +1422,8 @@ (SELECT_ACL & ~table_list->table->grant.privilege); table_list->register_want_access(SELECT_ACL); #endif - if (setup_fields(thd, 0, stmt->lex->value_list, MARK_COLUMNS_NONE, 0, 0) || + if (setup_fields(thd, 0, stmt->lex->value_list, MARK_COLUMNS_NONE, 0, NULL, + 0) || check_unique_table(thd, table_list)) goto error; /* TODO: here we should send types of placeholders to the client. */ @@ -1592,7 +1593,7 @@ if (open_normal_and_derived_tables(thd, tables, MYSQL_OPEN_FORCE_SHARED_MDL, DT_PREPARE | DT_CREATE)) DBUG_RETURN(TRUE); - DBUG_RETURN(setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, 0)); + DBUG_RETURN(setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, NULL, 0)); } diff -Nru mariadb-10.1-10.1.25/sql/sql_reload.cc mariadb-10.1-10.1.30/sql/sql_reload.cc --- mariadb-10.1-10.1.25/sql/sql_reload.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_reload.cc 2017-12-21 15:48:49.000000000 +0000 @@ -153,7 +153,10 @@ tmp_write_to_binlog= 0; if (mysql_bin_log.is_open()) { - if (mysql_bin_log.rotate_and_purge(true)) + DYNAMIC_ARRAY *drop_gtid_domain= + (thd && (thd->lex->delete_gtid_domain.elements > 0)) ? + &thd->lex->delete_gtid_domain : NULL; + if (mysql_bin_log.rotate_and_purge(true, drop_gtid_domain)) *write_to_binlog= -1; if (WSREP_ON) diff -Nru mariadb-10.1-10.1.25/sql/sql_repl.cc mariadb-10.1-10.1.30/sql/sql_repl.cc --- mariadb-10.1-10.1.25/sql/sql_repl.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_repl.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. - Copyright (c) 2008, 2014, SkySQL Ab. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. + Copyright (c) 2008, 2017, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ #include #include "rpl_handler.h" #include "debug_sync.h" - +#include "log.h" // get_gtid_list_event enum enum_gtid_until_state { GTID_UNTIL_NOT_DONE, @@ -875,72 +875,6 @@ DBUG_RETURN(current_list); } -/* - Find the Gtid_list_log_event at the start of a binlog. - - NULL for ok, non-NULL error message for error. - - If ok, then the event is returned in *out_gtid_list. This can be NULL if we - get back to binlogs written by old server version without GTID support. If - so, it means we have reached the point to start from, as no GTID events can - exist in earlier binlogs. -*/ -static const char * -get_gtid_list_event(IO_CACHE *cache, Gtid_list_log_event **out_gtid_list) -{ - Format_description_log_event init_fdle(BINLOG_VERSION); - Format_description_log_event *fdle; - Log_event *ev; - const char *errormsg = NULL; - - *out_gtid_list= NULL; - - if (!(ev= Log_event::read_log_event(cache, 0, &init_fdle, - opt_master_verify_checksum)) || - ev->get_type_code() != FORMAT_DESCRIPTION_EVENT) - { - if (ev) - delete ev; - return "Could not read format description log event while looking for " - "GTID position in binlog"; - } - - fdle= static_cast(ev); - - for (;;) - { - Log_event_type typ; - - ev= Log_event::read_log_event(cache, 0, fdle, opt_master_verify_checksum); - if (!ev) - { - errormsg= "Could not read GTID list event while looking for GTID " - "position in binlog"; - break; - } - typ= ev->get_type_code(); - if (typ == GTID_LIST_EVENT) - break; /* Done, found it */ - if (typ == START_ENCRYPTION_EVENT) - { - if (fdle->start_decryption((Start_encryption_log_event*) ev)) - errormsg= "Could not set up decryption for binlog."; - } - delete ev; - if (typ == ROTATE_EVENT || typ == STOP_EVENT || - typ == FORMAT_DESCRIPTION_EVENT || typ == START_ENCRYPTION_EVENT) - continue; /* Continue looking */ - - /* We did not find any Gtid_list_log_event, must be old binlog. */ - ev= NULL; - break; - } - - delete fdle; - *out_gtid_list= static_cast(ev); - return errormsg; -} - /* Check if every GTID requested by the slave is contained in this (or a later) @@ -3348,6 +3282,7 @@ // close master_info_file, relay_log_info_file, set mi->inited=rli->inited=0 end_master_info(mi); + end_relay_log_info(&mi->rli); // and delete these two files create_logfile_name_with_suffix(master_info_file_tmp, sizeof(master_info_file_tmp), diff -Nru mariadb-10.1-10.1.25/sql/sql_repl.h mariadb-10.1-10.1.30/sql/sql_repl.h --- mariadb-10.1-10.1.25/sql/sql_repl.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_repl.h 2017-12-21 15:48:49.000000000 +0000 @@ -82,7 +82,6 @@ int rpl_load_gtid_state(slave_connection_state *state, bool use_binlog); bool rpl_gtid_pos_check(THD *thd, char *str, size_t len); bool rpl_gtid_pos_update(THD *thd, char *str, size_t len); - #else struct LOAD_FILE_IO_CACHE : public IO_CACHE { }; diff -Nru mariadb-10.1-10.1.25/sql/sql_select.cc mariadb-10.1-10.1.30/sql/sql_select.cc --- mariadb-10.1-10.1.25/sql/sql_select.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_select.cc 2017-12-21 15:48:49.000000000 +0000 @@ -797,7 +797,7 @@ wild_num)) || select_lex->setup_ref_array(thd, real_og_num) || setup_fields(thd, (*rref_pointer_array), fields_list, MARK_COLUMNS_READ, - &all_fields, 1) || + &all_fields, &select_lex->pre_fix, 1) || setup_without_group(thd, (*rref_pointer_array), tables_list, select_lex->leaf_tables, fields_list, all_fields, &conds, order, group_list, @@ -3592,7 +3592,7 @@ #endif DBUG_EXECUTE_IF("bug11747970_raise_error", - { join->thd->killed= KILL_QUERY_HARD; }); + { join->thd->set_killed(KILL_QUERY_HARD); }); if (error) { table->file->print_error(error, MYF(0)); @@ -7874,9 +7874,11 @@ best_access_path(join, s, remaining_tables, idx, disable_jbuf, record_count, join->positions + idx, &loose_scan_pos); - /* Compute the cost of extending the plan with 's' */ - - current_record_count= record_count * position->records_read; + /* Compute the cost of extending the plan with 's', avoid overflow */ + if (position->records_read < DBL_MAX / record_count) + current_record_count= record_count * position->records_read; + else + current_record_count= DBL_MAX; current_read_time=read_time + position->read_time + current_record_count / (double) TIME_FOR_COMPARE; @@ -14639,10 +14641,23 @@ nested_join= table->nested_join; if (table->sj_on_expr && !in_sj) { - /* - If this is a semi-join that is not contained within another semi-join, - leave it intact (otherwise it is flattened) - */ + /* + If this is a semi-join that is not contained within another semi-join + leave it intact (otherwise it is flattened) + */ + /* + Make sure that any semi-join appear in + the join->select_lex->sj_nests list only once + */ + List_iterator_fast sj_it(join->select_lex->sj_nests); + TABLE_LIST *sj_nest; + while ((sj_nest= sj_it++)) + { + if (table == sj_nest) + break; + } + if (sj_nest) + continue; join->select_lex->sj_nests.push_back(table, join->thd->mem_root); /* diff -Nru mariadb-10.1-10.1.25/sql/sql_show.cc mariadb-10.1-10.1.30/sql/sql_show.cc --- mariadb-10.1-10.1.25/sql/sql_show.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_show.cc 2017-12-21 15:48:49.000000000 +0000 @@ -126,6 +126,12 @@ ** List all table types supported ***************************************************************************/ + +static bool is_show_command(THD *thd) +{ + return sql_command_flags[thd->lex->sql_command] & CF_STATUS_COMMAND; +} + static int make_version_string(char *buf, int buf_length, uint version) { return my_snprintf(buf, buf_length, "%d.%d", version>>8,version&0xff); @@ -265,7 +271,7 @@ TABLE *table= tables->table; if (plugin_foreach_with_mask(thd, show_plugins, MYSQL_ANY_PLUGIN, - ~PLUGIN_IS_FREED, table)) + ~(PLUGIN_IS_FREED | PLUGIN_IS_DYING), table)) DBUG_RETURN(1); DBUG_RETURN(0); @@ -973,13 +979,20 @@ if (tl.add_file(file->name)) goto err; } - tl.sort(); } else { if (ha_discover_table_names(thd, db, dirp, &tl, false)) goto err; } +#if MYSQL_VERSION_ID < 100300 + /* incomplete optimization, but a less drastic change in GA version */ + if (!thd->lex->select_lex.order_list.elements && + !thd->lex->select_lex.group_list.elements) +#else + if (is_show_command(thd)) +#endif + tl.sort(); DBUG_PRINT("info",("found: %zu files", files->elements())); my_dirend(dirp); @@ -3640,6 +3653,15 @@ return 0; } } + else if (item->type() == Item::ROW_ITEM) + { + Item_row *item_row= static_cast(item); + for (uint i= 0; i < item_row->cols(); i++) + { + if (!uses_only_table_name_fields(item_row->element_index(i), table)) + return 0; + } + } else if (item->type() == Item::FIELD_ITEM) { Item_field *item_field= (Item_field*)item; @@ -3659,6 +3681,11 @@ strlen(item_field->field_name), 0))) return 0; } + else if (item->type() == Item::EXPR_CACHE_ITEM) + { + Item_cache_wrapper *tmp= static_cast(item); + return uses_only_table_name_fields(tmp->get_orig_item(), table); + } else if (item->type() == Item::REF_ITEM) return uses_only_table_name_fields(item->real_item(), table); @@ -4051,7 +4078,7 @@ */ if (res == FIND_FILES_DIR) { - if (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) + if (is_show_command(thd)) return 1; thd->clear_error(); return 2; @@ -5586,7 +5613,8 @@ DBUG_ENTER("fill_schema_engines"); if (plugin_foreach_with_mask(thd, iter_schema_engines, MYSQL_STORAGE_ENGINE_PLUGIN, - ~PLUGIN_IS_FREED, tables->table)) + ~(PLUGIN_IS_FREED | PLUGIN_IS_DYING), + tables->table)) DBUG_RETURN(1); DBUG_RETURN(0); } @@ -5871,13 +5899,13 @@ val_int() == TYPE_ENUM_PROCEDURE)) return 0; - if ((lex->sql_command == SQLCOM_SHOW_STATUS_PROC && + if (!is_show_command(thd) || + (lex->sql_command == SQLCOM_SHOW_STATUS_PROC && proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int() == TYPE_ENUM_PROCEDURE) || (lex->sql_command == SQLCOM_SHOW_STATUS_FUNC && proc_table->field[MYSQL_PROC_MYSQL_TYPE]->val_int() == - TYPE_ENUM_FUNCTION) || - (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) == 0) + TYPE_ENUM_FUNCTION)) { restore_record(table, s->default_values); if (!wild || !wild[0] || !wild_case_compare(system_charset_info, @@ -6009,6 +6037,10 @@ DBUG_RETURN(1); } + /* Disable padding temporarily so it doesn't break the query */ + ulonglong sql_mode_was = thd->variables.sql_mode; + thd->variables.sql_mode &= ~MODE_PAD_CHAR_TO_FULL_LENGTH; + if (proc_table->file->ha_index_init(0, 1)) { res= 1; @@ -6044,6 +6076,7 @@ (void) proc_table->file->ha_index_end(); close_system_tables(thd, &open_tables_state_backup); + thd->variables.sql_mode = sql_mode_was; DBUG_RETURN(res); } @@ -7626,7 +7659,7 @@ tmp_table_param->field_count= field_count; tmp_table_param->schema_table= 1; SELECT_LEX *select_lex= thd->lex->current_select; - bool keep_row_order= sql_command_flags[thd->lex->sql_command] & CF_STATUS_COMMAND; + bool keep_row_order= is_show_command(thd); if (!(table= create_tmp_table(thd, tmp_table_param, field_list, (ORDER*) 0, 0, 0, (select_lex->options | thd->variables.option_bits | diff -Nru mariadb-10.1-10.1.25/sql/sql_table.cc mariadb-10.1-10.1.30/sql/sql_table.cc --- mariadb-10.1-10.1.25/sql/sql_table.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_table.cc 2017-12-21 15:48:49.000000000 +0000 @@ -2088,6 +2088,7 @@ DBUG_RETURN(TRUE); my_ok(thd); DBUG_RETURN(FALSE); + } @@ -2134,7 +2135,6 @@ return 0; } - /** Execute the drop of a normal or temporary table. @@ -2560,6 +2560,9 @@ if (non_trans_tmp_table_deleted || trans_tmp_table_deleted || non_tmp_table_deleted) { + if (non_trans_tmp_table_deleted || trans_tmp_table_deleted) + thd->transaction.stmt.mark_dropped_temp_table(); + query_cache_invalidate3(thd, tables, 0); if (!dont_log_query && mysql_bin_log.is_open()) { @@ -2568,6 +2571,9 @@ /* Chop of the last comma */ built_non_trans_tmp_query.chop(); built_non_trans_tmp_query.append(" /* generated by server */"); +#ifdef WITH_WSREP + thd->wsrep_skip_wsrep_GTID = true; +#endif /* WITH_WSREP */ error |= thd->binlog_query(THD::STMT_QUERY_TYPE, built_non_trans_tmp_query.ptr(), built_non_trans_tmp_query.length(), @@ -2580,6 +2586,9 @@ /* Chop of the last comma */ built_trans_tmp_query.chop(); built_trans_tmp_query.append(" /* generated by server */"); +#ifdef WITH_WSREP + thd->wsrep_skip_wsrep_GTID = true; +#endif /* WITH_WSREP */ error |= thd->binlog_query(THD::STMT_QUERY_TYPE, built_trans_tmp_query.ptr(), built_trans_tmp_query.length(), @@ -2594,6 +2603,9 @@ built_query.append(" /* generated by server */"); int error_code = non_tmp_error ? thd->get_stmt_da()->sql_errno() : 0; +#ifdef WITH_WSREP + thd->wsrep_skip_wsrep_GTID = false; +#endif /* WITH_WSREP */ error |= thd->binlog_query(THD::STMT_QUERY_TYPE, built_query.ptr(), built_query.length(), @@ -2642,6 +2654,9 @@ } end: +#ifdef WITH_WSREP + thd->wsrep_skip_wsrep_GTID = false; +#endif /* WITH_WSREP */ DBUG_RETURN(error); } @@ -4146,7 +4161,8 @@ if (!sql_field->def && !sql_field->has_default_function() && (sql_field->flags & NOT_NULL_FLAG) && - !is_timestamp_type(sql_field->sql_type)) + (!is_timestamp_type(sql_field->sql_type) || + opt_explicit_defaults_for_timestamp)) { sql_field->flags|= NO_DEFAULT_VALUE_FLAG; sql_field->pack_flag|= FIELDFLAG_NO_DEFAULT; @@ -4155,6 +4171,7 @@ if (thd->variables.sql_mode & MODE_NO_ZERO_DATE && !sql_field->def && !sql_field->vcol_info && is_timestamp_type(sql_field->sql_type) && + !opt_explicit_defaults_for_timestamp && (sql_field->flags & NOT_NULL_FLAG) && (type == Field::NONE || type == Field::TIMESTAMP_UN_FIELD)) { @@ -4397,10 +4414,7 @@ set_table_default_charset(thd, create_info, (char*) db); - db_options= create_info->table_options; - if (create_info->row_type == ROW_TYPE_DYNAMIC || - create_info->row_type == ROW_TYPE_PAGE) - db_options|= HA_OPTION_PACK_RECORD; + db_options= create_info->table_options_with_row_type(); if (!(file= get_new_handler((TABLE_SHARE*) 0, thd->mem_root, create_info->db_type))) @@ -4780,7 +4794,7 @@ thd->variables.option_bits|= OPTION_KEEP_LOG; thd->log_current_statement= 1; create_info->table_was_deleted= 1; - DBUG_EXECUTE_IF("send_kill_after_delete", thd->killed= KILL_QUERY; ); + DBUG_EXECUTE_IF("send_kill_after_delete", thd->set_killed(KILL_QUERY); ); /* Restart statement transactions for the case of CREATE ... SELECT. @@ -5073,6 +5087,9 @@ if (thd->is_current_stmt_binlog_format_row() && create_info->tmp_table()) DBUG_RETURN(result); + if (create_info->tmp_table()) + thd->transaction.stmt.mark_created_temp_table(); + /* Write log if no error or if we already deleted a table */ if (!result || thd->log_current_statement) { @@ -5567,13 +5584,17 @@ DBUG_PRINT("info", ("res: %d tmp_table: %d create_info->table: %p", res, create_info->tmp_table(), local_create_info.table)); - if (!res && create_info->tmp_table() && local_create_info.table) + if (create_info->tmp_table()) { - /* - Remember that tmp table creation was logged so that we know if - we should log a delete of it. - */ - local_create_info.table->s->table_creation_was_logged= 1; + thd->transaction.stmt.mark_created_temp_table(); + if (!res && local_create_info.table) + { + /* + Remember that tmp table creation was logged so that we know if + we should log a delete of it. + */ + local_create_info.table->s->table_creation_was_logged= 1; + } } do_logging= TRUE; } @@ -6880,7 +6901,6 @@ case Alter_info::LEAVE_AS_IS: if (!indexes_were_disabled) break; - /* disabled indexes */ /* fall through */ case Alter_info::DISABLE: error= table->file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); @@ -7534,9 +7554,25 @@ { if (def->change && ! def->field) { - my_error(ER_BAD_FIELD_ERROR, MYF(0), def->change, - table->s->table_name.str); - goto err; + /* + Check if there is modify for newly added field. + */ + Create_field *find; + find_it.rewind(); + while((find=find_it++)) + { + if (!my_strcasecmp(system_charset_info,find->field_name, def->field_name)) + break; + } + + if (find && !find->field) + find_it.remove(); + else + { + my_error(ER_BAD_FIELD_ERROR, MYF(0), def->change, + table->s->table_name.str); + goto err; + } } /* Check that the DATE/DATETIME not null field we are going to add is @@ -7602,6 +7638,29 @@ find_it.after(def); // Put column after this } } + /* + Check if there is alter for newly added field. + */ + alter_it.rewind(); + Alter_column *alter; + while ((alter=alter_it++)) + { + if (!my_strcasecmp(system_charset_info,def->field_name, alter->name)) + break; + } + if (alter) + { + if (def->sql_type == MYSQL_TYPE_BLOB) + { + my_error(ER_BLOB_CANT_HAVE_DEFAULT, MYF(0), def->change); + goto err; + } + if ((def->def=alter->def)) // Use new default + def->flags&= ~NO_DEFAULT_VALUE_FLAG; + else + def->flags|= NO_DEFAULT_VALUE_FLAG; + alter_it.remove(); + } } if (alter_info->alter_list.elements) { @@ -9366,8 +9425,12 @@ bool mysql_trans_commit_alter_copy_data(THD *thd) { bool error= FALSE; + uint save_unsafe_rollback_flags; DBUG_ENTER("mysql_trans_commit_alter_copy_data"); + /* Save flags as transcommit_implicit_are_deleting_them */ + save_unsafe_rollback_flags= thd->transaction.stmt.m_unsafe_rollback_flags; + if (ha_enable_transaction(thd, TRUE)) DBUG_RETURN(TRUE); @@ -9382,6 +9445,7 @@ if (trans_commit_implicit(thd)) error= TRUE; + thd->transaction.stmt.m_unsafe_rollback_flags= save_unsafe_rollback_flags; DBUG_RETURN(error); } diff -Nru mariadb-10.1-10.1.25/sql/sql_trigger.cc mariadb-10.1-10.1.30/sql/sql_trigger.cc --- mariadb-10.1-10.1.25/sql/sql_trigger.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_trigger.cc 2017-12-21 15:48:49.000000000 +0000 @@ -441,6 +441,7 @@ my_error(ER_BINLOG_CREATE_ROUTINE_NEED_SUPER, MYF(0)); DBUG_RETURN(TRUE); } + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) if (!create) { @@ -606,6 +607,10 @@ my_ok(thd); DBUG_RETURN(result); +#ifdef WITH_WSREP + error: + DBUG_RETURN(true); +#endif /* WITH_WSREP */ } /** diff -Nru mariadb-10.1-10.1.25/sql/sql_union.cc mariadb-10.1-10.1.30/sql/sql_union.cc --- mariadb-10.1-10.1.25/sql/sql_union.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_union.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. - Copyright (c) 2010, 2014, SkySQL Ab. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. + Copyright (c) 2010, 2017, Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -484,6 +484,19 @@ Item *item_tmp; while ((item_tmp= it++)) { + /* + If the outer query has a GROUP BY clause, an outer reference to this + query block may have been wrapped in a Item_outer_ref, which has not + been fixed yet. An Item_type_holder must be created based on a fixed + Item, so use the inner Item instead. + */ + DBUG_ASSERT(item_tmp->fixed || + (item_tmp->type() == Item::REF_ITEM && + ((Item_ref *)(item_tmp))->ref_type() == + Item_ref::OUTER_REF)); + if (!item_tmp->fixed) + item_tmp= item_tmp->real_item(); + /* Error's in 'new' will be detected after loop */ types.push_back(new (thd_arg->mem_root) Item_type_holder(thd_arg, item_tmp)); @@ -1240,4 +1253,3 @@ } } } - diff -Nru mariadb-10.1-10.1.25/sql/sql_update.cc mariadb-10.1-10.1.30/sql/sql_update.cc --- mariadb-10.1-10.1.25/sql/sql_update.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_update.cc 2017-12-21 15:48:49.000000000 +0000 @@ -359,7 +359,7 @@ table_list->grant.want_privilege= table->grant.want_privilege= (SELECT_ACL & ~table->grant.privilege); #endif - if (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, 0)) + if (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, NULL, 0)) { free_underlaid_joins(thd, select_lex); DBUG_RETURN(1); /* purecov: inspected */ @@ -940,7 +940,7 @@ // simulated killing after the loop must be ineffective for binlogging DBUG_EXECUTE_IF("simulate_kill_bug27571", { - thd->killed= KILL_QUERY; + thd->set_killed(KILL_QUERY); };); error= (killed_status == NOT_KILLED)? error : 1; @@ -1711,7 +1711,7 @@ reference tables */ - int error= setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, 0); + int error= setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, NULL, 0); ti.rewind(); while ((table_ref= ti++)) diff -Nru mariadb-10.1-10.1.25/sql/sql_view.cc mariadb-10.1-10.1.30/sql/sql_view.cc --- mariadb-10.1-10.1.25/sql/sql_view.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_view.cc 2017-12-21 15:48:49.000000000 +0000 @@ -429,6 +429,8 @@ lex->link_first_table_back(view, link_to_local); view->open_type= OT_BASE_ONLY; + WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL) + /* ignore lock specs for CREATE statement */ @@ -695,6 +697,10 @@ lex->link_first_table_back(view, link_to_local); unit->cleanup(); DBUG_RETURN(res || thd->is_error()); +#ifdef WITH_WSREP + error: + DBUG_RETURN(true); +#endif /* WITH_WSREP */ } diff -Nru mariadb-10.1-10.1.25/sql/sql_yacc.cc mariadb-10.1-10.1.30/sql/sql_yacc.cc --- mariadb-10.1-10.1.25/sql/sql_yacc.cc 2017-07-01 18:20:31.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_yacc.cc 2017-12-21 15:48:56.000000000 +0000 @@ -1,21 +1,19 @@ +/* A Bison parser, made by GNU Bison 3.0.2. */ -/* A Bison parser, made by GNU Bison 2.4.1. */ +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. -/* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -28,7 +26,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -46,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.4.1" +#define YYBISON_VERSION "3.0.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -60,23 +58,17 @@ /* Pull parsers. */ #define YYPULL 1 -/* Using locations. */ -#define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse MYSQLparse #define yylex MYSQLlex #define yyerror MYSQLerror -#define yylval MYSQLlval -#define yychar MYSQLchar #define yydebug MYSQLdebug #define yynerrs MYSQLnerrs /* Copy the first part of user declarations. */ - -/* Line 189 of yacc.c */ -#line 25 "/home/buildbot/git/sql/sql_yacc.yy" +#line 25 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:339 */ #define YYLIP (& thd->m_parser_state->m_lip) #define YYPS (& thd->m_parser_state->m_yacc) @@ -1000,14 +992,15 @@ } while(0) +#line 996 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:339 */ -/* Line 189 of yacc.c */ -#line 1006 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +# ifndef YY_NULLPTR +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -1017,660 +1010,666 @@ # define YYERROR_VERBOSE 0 #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 +/* In a future release of Bison, this section will be replaced + by #include "sql_yacc.h". */ +#ifndef YY_MYSQL_HOME_BUILDBOT_GIT_MKDIST_SQL_SQL_YACC_H_INCLUDED +# define YY_MYSQL_HOME_BUILDBOT_GIT_MKDIST_SQL_SQL_YACC_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int MYSQLdebug; #endif - -/* Tokens. */ +/* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - ABORT_SYM = 258, - ACCESSIBLE_SYM = 259, - ACTION = 260, - ADD = 261, - ADMIN_SYM = 262, - ADDDATE_SYM = 263, - AFTER_SYM = 264, - AGAINST = 265, - AGGREGATE_SYM = 266, - ALGORITHM_SYM = 267, - ALL = 268, - ALTER = 269, - ALWAYS_SYM = 270, - ANALYZE_SYM = 271, - AND_AND_SYM = 272, - AND_SYM = 273, - ANY_SYM = 274, - AS = 275, - ASC = 276, - ASCII_SYM = 277, - ASENSITIVE_SYM = 278, - AT_SYM = 279, - ATOMIC_SYM = 280, - AUTHORS_SYM = 281, - AUTOEXTEND_SIZE_SYM = 282, - AUTO_INC = 283, - AUTO_SYM = 284, - AVG_ROW_LENGTH = 285, - AVG_SYM = 286, - BACKUP_SYM = 287, - BEFORE_SYM = 288, - BEGIN_SYM = 289, - BETWEEN_SYM = 290, - BIGINT = 291, - BINARY = 292, - BINLOG_SYM = 293, - BIN_NUM = 294, - BIT_AND = 295, - BIT_OR = 296, - BIT_SYM = 297, - BIT_XOR = 298, - BLOB_SYM = 299, - BLOCK_SYM = 300, - BOOLEAN_SYM = 301, - BOOL_SYM = 302, - BOTH = 303, - BTREE_SYM = 304, - BY = 305, - BYTE_SYM = 306, - CACHE_SYM = 307, - CALL_SYM = 308, - CASCADE = 309, - CASCADED = 310, - CASE_SYM = 311, - CAST_SYM = 312, - CATALOG_NAME_SYM = 313, - CHAIN_SYM = 314, - CHANGE = 315, - CHANGED = 316, - CHARSET = 317, - CHAR_SYM = 318, - CHECKPOINT_SYM = 319, - CHECKSUM_SYM = 320, - CHECK_SYM = 321, - CIPHER_SYM = 322, - CLASS_ORIGIN_SYM = 323, - CLIENT_SYM = 324, - CLOSE_SYM = 325, - COALESCE = 326, - CODE_SYM = 327, - COLLATE_SYM = 328, - COLLATION_SYM = 329, - COLUMNS = 330, - COLUMN_ADD_SYM = 331, - COLUMN_CHECK_SYM = 332, - COLUMN_CREATE_SYM = 333, - COLUMN_DELETE_SYM = 334, - COLUMN_GET_SYM = 335, - COLUMN_SYM = 336, - COLUMN_NAME_SYM = 337, - COMMENT_SYM = 338, - COMMITTED_SYM = 339, - COMMIT_SYM = 340, - COMPACT_SYM = 341, - COMPLETION_SYM = 342, - COMPRESSED_SYM = 343, - CONCURRENT = 344, - CONDITION_SYM = 345, - CONNECTION_SYM = 346, - CONSISTENT_SYM = 347, - CONSTRAINT = 348, - CONSTRAINT_CATALOG_SYM = 349, - CONSTRAINT_NAME_SYM = 350, - CONSTRAINT_SCHEMA_SYM = 351, - CONTAINS_SYM = 352, - CONTEXT_SYM = 353, - CONTINUE_SYM = 354, - CONTRIBUTORS_SYM = 355, - CONVERT_SYM = 356, - COUNT_SYM = 357, - CPU_SYM = 358, - CREATE = 359, - CROSS = 360, - CUBE_SYM = 361, - CURDATE = 362, - CURRENT_SYM = 363, - CURRENT_USER = 364, - CURRENT_ROLE = 365, - CURRENT_POS_SYM = 366, - CURSOR_SYM = 367, - CURSOR_NAME_SYM = 368, - CURTIME = 369, - DATABASE = 370, - DATABASES = 371, - DATAFILE_SYM = 372, - DATA_SYM = 373, - DATETIME = 374, - DATE_ADD_INTERVAL = 375, - DATE_SUB_INTERVAL = 376, - DATE_SYM = 377, - DAY_HOUR_SYM = 378, - DAY_MICROSECOND_SYM = 379, - DAY_MINUTE_SYM = 380, - DAY_SECOND_SYM = 381, - DAY_SYM = 382, - DEALLOCATE_SYM = 383, - DECIMAL_NUM = 384, - DECIMAL_SYM = 385, - DECLARE_SYM = 386, - DEFAULT = 387, - DEFINER_SYM = 388, - DELAYED_SYM = 389, - DELAY_KEY_WRITE_SYM = 390, - DELETE_SYM = 391, - DESC = 392, - DESCRIBE = 393, - DES_KEY_FILE = 394, - DETERMINISTIC_SYM = 395, - DIAGNOSTICS_SYM = 396, - DIRECTORY_SYM = 397, - DISABLE_SYM = 398, - DISCARD = 399, - DISK_SYM = 400, - DISTINCT = 401, - DIV_SYM = 402, - DOUBLE_SYM = 403, - DO_DOMAIN_IDS_SYM = 404, - DO_SYM = 405, - DROP = 406, - DUAL_SYM = 407, - DUMPFILE = 408, - DUPLICATE_SYM = 409, - DYNAMIC_SYM = 410, - EACH_SYM = 411, - ELSE = 412, - ELSEIF_SYM = 413, - ENABLE_SYM = 414, - ENCLOSED = 415, - END = 416, - ENDS_SYM = 417, - END_OF_INPUT = 418, - ENGINES_SYM = 419, - ENGINE_SYM = 420, - ENUM = 421, - EQUAL_SYM = 422, - ERROR_SYM = 423, - ERRORS = 424, - ESCAPED = 425, - ESCAPE_SYM = 426, - EVENTS_SYM = 427, - EVENT_SYM = 428, - EVERY_SYM = 429, - EXCHANGE_SYM = 430, - EXAMINED_SYM = 431, - EXECUTE_SYM = 432, - EXISTS = 433, - EXIT_SYM = 434, - EXPANSION_SYM = 435, - EXPORT_SYM = 436, - EXTENDED_SYM = 437, - EXTENT_SIZE_SYM = 438, - EXTRACT_SYM = 439, - FALSE_SYM = 440, - FAST_SYM = 441, - FAULTS_SYM = 442, - FETCH_SYM = 443, - FILE_SYM = 444, - FIRST_SYM = 445, - FIXED_SYM = 446, - FLOAT_NUM = 447, - FLOAT_SYM = 448, - FLUSH_SYM = 449, - FORCE_SYM = 450, - FOREIGN = 451, - FOR_SYM = 452, - FORMAT_SYM = 453, - FOUND_SYM = 454, - FROM = 455, - FULL = 456, - FULLTEXT_SYM = 457, - FUNCTION_SYM = 458, - GE = 459, - GENERAL = 460, - GENERATED_SYM = 461, - GEOMETRYCOLLECTION = 462, - GEOMETRY_SYM = 463, - GET_FORMAT = 464, - GET_SYM = 465, - GLOBAL_SYM = 466, - GRANT = 467, - GRANTS = 468, - GROUP_SYM = 469, - GROUP_CONCAT_SYM = 470, - HANDLER_SYM = 471, - HARD_SYM = 472, - HASH_SYM = 473, - HAVING = 474, - HELP_SYM = 475, - HEX_NUM = 476, - HEX_STRING = 477, - HIGH_PRIORITY = 478, - HOST_SYM = 479, - HOSTS_SYM = 480, - HOUR_MICROSECOND_SYM = 481, - HOUR_MINUTE_SYM = 482, - HOUR_SECOND_SYM = 483, - HOUR_SYM = 484, - ID_SYM = 485, - IDENT = 486, - IDENTIFIED_SYM = 487, - IDENT_QUOTED = 488, - IF_SYM = 489, - IGNORE_DOMAIN_IDS_SYM = 490, - IGNORE_SYM = 491, - IGNORE_SERVER_IDS_SYM = 492, - IMPORT = 493, - INDEXES = 494, - INDEX_SYM = 495, - INFILE = 496, - INITIAL_SIZE_SYM = 497, - INNER_SYM = 498, - INOUT_SYM = 499, - INSENSITIVE_SYM = 500, - INSERT = 501, - INSERT_METHOD = 502, - INSTALL_SYM = 503, - INTERVAL_SYM = 504, - INTO = 505, - INT_SYM = 506, - INVOKER_SYM = 507, - IN_SYM = 508, - IO_SYM = 509, - IPC_SYM = 510, - IS = 511, - ISOLATION = 512, - ISSUER_SYM = 513, - ITERATE_SYM = 514, - JOIN_SYM = 515, - KEYS = 516, - KEY_BLOCK_SIZE = 517, - KEY_SYM = 518, - KILL_SYM = 519, - LANGUAGE_SYM = 520, - LAST_SYM = 521, - LAST_VALUE = 522, - LE = 523, - LEADING = 524, - LEAVES = 525, - LEAVE_SYM = 526, - LEFT = 527, - LESS_SYM = 528, - LEVEL_SYM = 529, - LEX_HOSTNAME = 530, - LIKE = 531, - LIMIT = 532, - LINEAR_SYM = 533, - LINES = 534, - LINESTRING = 535, - LIST_SYM = 536, - LOAD = 537, - LOCAL_SYM = 538, - LOCATOR_SYM = 539, - LOCKS_SYM = 540, - LOCK_SYM = 541, - LOGFILE_SYM = 542, - LOGS_SYM = 543, - LONGBLOB = 544, - LONGTEXT = 545, - LONG_NUM = 546, - LONG_SYM = 547, - LOOP_SYM = 548, - LOW_PRIORITY = 549, - MASTER_CONNECT_RETRY_SYM = 550, - MASTER_GTID_POS_SYM = 551, - MASTER_HOST_SYM = 552, - MASTER_LOG_FILE_SYM = 553, - MASTER_LOG_POS_SYM = 554, - MASTER_PASSWORD_SYM = 555, - MASTER_PORT_SYM = 556, - MASTER_SERVER_ID_SYM = 557, - MASTER_SSL_CAPATH_SYM = 558, - MASTER_SSL_CA_SYM = 559, - MASTER_SSL_CERT_SYM = 560, - MASTER_SSL_CIPHER_SYM = 561, - MASTER_SSL_CRL_SYM = 562, - MASTER_SSL_CRLPATH_SYM = 563, - MASTER_SSL_KEY_SYM = 564, - MASTER_SSL_SYM = 565, - MASTER_SSL_VERIFY_SERVER_CERT_SYM = 566, - MASTER_SYM = 567, - MASTER_USER_SYM = 568, - MASTER_USE_GTID_SYM = 569, - MASTER_HEARTBEAT_PERIOD_SYM = 570, - MATCH = 571, - MAX_CONNECTIONS_PER_HOUR = 572, - MAX_QUERIES_PER_HOUR = 573, - MAX_ROWS = 574, - MAX_SIZE_SYM = 575, - MAX_SYM = 576, - MAX_UPDATES_PER_HOUR = 577, - MAX_STATEMENT_TIME_SYM = 578, - MAX_USER_CONNECTIONS_SYM = 579, - MAX_VALUE_SYM = 580, - MEDIUMBLOB = 581, - MEDIUMINT = 582, - MEDIUMTEXT = 583, - MEDIUM_SYM = 584, - MEMORY_SYM = 585, - MERGE_SYM = 586, - MESSAGE_TEXT_SYM = 587, - MICROSECOND_SYM = 588, - MIGRATE_SYM = 589, - MINUTE_MICROSECOND_SYM = 590, - MINUTE_SECOND_SYM = 591, - MINUTE_SYM = 592, - MIN_ROWS = 593, - MIN_SYM = 594, - MODE_SYM = 595, - MODIFIES_SYM = 596, - MODIFY_SYM = 597, - MOD_SYM = 598, - MONTH_SYM = 599, - MULTILINESTRING = 600, - MULTIPOINT = 601, - MULTIPOLYGON = 602, - MUTEX_SYM = 603, - MYSQL_SYM = 604, - MYSQL_ERRNO_SYM = 605, - NAMES_SYM = 606, - NAME_SYM = 607, - NATIONAL_SYM = 608, - NATURAL = 609, - NCHAR_STRING = 610, - NCHAR_SYM = 611, - NE = 612, - NEG = 613, - NEW_SYM = 614, - NEXT_SYM = 615, - NODEGROUP_SYM = 616, - NONE_SYM = 617, - NOT2_SYM = 618, - NOT_SYM = 619, - NOW_SYM = 620, - NO_SYM = 621, - NO_WAIT_SYM = 622, - NO_WRITE_TO_BINLOG = 623, - NULL_SYM = 624, - NUM = 625, - NUMBER_SYM = 626, - NUMERIC_SYM = 627, - NVARCHAR_SYM = 628, - OFFSET_SYM = 629, - OLD_PASSWORD_SYM = 630, - ON = 631, - ONE_SYM = 632, - ONLY_SYM = 633, - ONLINE_SYM = 634, - OPEN_SYM = 635, - OPTIMIZE = 636, - OPTIONS_SYM = 637, - OPTION = 638, - OPTIONALLY = 639, - OR2_SYM = 640, - ORDER_SYM = 641, - OR_OR_SYM = 642, - OR_SYM = 643, - OUTER = 644, - OUTFILE = 645, - OUT_SYM = 646, - OWNER_SYM = 647, - PACK_KEYS_SYM = 648, - PAGE_SYM = 649, - PAGE_CHECKSUM_SYM = 650, - PARAM_MARKER = 651, - PARSER_SYM = 652, - PARSE_VCOL_EXPR_SYM = 653, - PARTIAL = 654, - PARTITION_SYM = 655, - PARTITIONS_SYM = 656, - PARTITIONING_SYM = 657, - PASSWORD_SYM = 658, - PERSISTENT_SYM = 659, - PHASE_SYM = 660, - PLUGINS_SYM = 661, - PLUGIN_SYM = 662, - POINT_SYM = 663, - POLYGON = 664, - PORT_SYM = 665, - POSITION_SYM = 666, - PRECISION = 667, - PREPARE_SYM = 668, - PRESERVE_SYM = 669, - PREV_SYM = 670, - PRIMARY_SYM = 671, - PRIVILEGES = 672, - PROCEDURE_SYM = 673, - PROCESS = 674, - PROCESSLIST_SYM = 675, - PROFILE_SYM = 676, - PROFILES_SYM = 677, - PROXY_SYM = 678, - PURGE = 679, - QUARTER_SYM = 680, - QUERY_SYM = 681, - QUICK = 682, - RANGE_SYM = 683, - READS_SYM = 684, - READ_ONLY_SYM = 685, - READ_SYM = 686, - READ_WRITE_SYM = 687, - REAL = 688, - REBUILD_SYM = 689, - RECOVER_SYM = 690, - REDOFILE_SYM = 691, - REDO_BUFFER_SIZE_SYM = 692, - REDUNDANT_SYM = 693, - REFERENCES = 694, - REGEXP = 695, - RELAY = 696, - RELAYLOG_SYM = 697, - RELAY_LOG_FILE_SYM = 698, - RELAY_LOG_POS_SYM = 699, - RELAY_THREAD = 700, - RELEASE_SYM = 701, - RELOAD = 702, - REMOVE_SYM = 703, - RENAME = 704, - REORGANIZE_SYM = 705, - REPAIR = 706, - REPEATABLE_SYM = 707, - REPEAT_SYM = 708, - REPLACE = 709, - REPLICATION = 710, - REQUIRE_SYM = 711, - RESET_SYM = 712, - RESIGNAL_SYM = 713, - RESOURCES = 714, - RESTORE_SYM = 715, - RESTRICT = 716, - RESUME_SYM = 717, - RETURNED_SQLSTATE_SYM = 718, - RETURNING_SYM = 719, - RETURNS_SYM = 720, - RETURN_SYM = 721, - REVERSE_SYM = 722, - REVOKE = 723, - RIGHT = 724, - ROLE_SYM = 725, - ROLLBACK_SYM = 726, - ROLLUP_SYM = 727, - ROUTINE_SYM = 728, - ROWS_SYM = 729, - ROW_FORMAT_SYM = 730, - ROW_SYM = 731, - ROW_COUNT_SYM = 732, - RTREE_SYM = 733, - SAVEPOINT_SYM = 734, - SCHEDULE_SYM = 735, - SCHEMA_NAME_SYM = 736, - SECOND_MICROSECOND_SYM = 737, - SECOND_SYM = 738, - SECURITY_SYM = 739, - SELECT_SYM = 740, - SENSITIVE_SYM = 741, - SEPARATOR_SYM = 742, - SERIALIZABLE_SYM = 743, - SERIAL_SYM = 744, - SESSION_SYM = 745, - SERVER_SYM = 746, - SERVER_OPTIONS = 747, - SET = 748, - SET_VAR = 749, - SHARE_SYM = 750, - SHIFT_LEFT = 751, - SHIFT_RIGHT = 752, - SHOW = 753, - SHUTDOWN = 754, - SIGNAL_SYM = 755, - SIGNED_SYM = 756, - SIMPLE_SYM = 757, - SLAVE = 758, - SLAVES = 759, - SLAVE_POS_SYM = 760, - SLOW = 761, - SMALLINT = 762, - SNAPSHOT_SYM = 763, - SOCKET_SYM = 764, - SOFT_SYM = 765, - SONAME_SYM = 766, - SOUNDS_SYM = 767, - SOURCE_SYM = 768, - SPATIAL_SYM = 769, - SPECIFIC_SYM = 770, - SQLEXCEPTION_SYM = 771, - SQLSTATE_SYM = 772, - SQLWARNING_SYM = 773, - SQL_BIG_RESULT = 774, - SQL_BUFFER_RESULT = 775, - SQL_CACHE_SYM = 776, - SQL_CALC_FOUND_ROWS = 777, - SQL_NO_CACHE_SYM = 778, - SQL_SMALL_RESULT = 779, - SQL_SYM = 780, - SQL_THREAD = 781, - REF_SYSTEM_ID_SYM = 782, - SSL_SYM = 783, - STARTING = 784, - STARTS_SYM = 785, - START_SYM = 786, - STATEMENT_SYM = 787, - STATS_AUTO_RECALC_SYM = 788, - STATS_PERSISTENT_SYM = 789, - STATS_SAMPLE_PAGES_SYM = 790, - STATUS_SYM = 791, - STDDEV_SAMP_SYM = 792, - STD_SYM = 793, - STOP_SYM = 794, - STORAGE_SYM = 795, - STRAIGHT_JOIN = 796, - STRING_SYM = 797, - SUBCLASS_ORIGIN_SYM = 798, - SUBDATE_SYM = 799, - SUBJECT_SYM = 800, - SUBPARTITIONS_SYM = 801, - SUBPARTITION_SYM = 802, - SUBSTRING = 803, - SUM_SYM = 804, - SUPER_SYM = 805, - SUSPEND_SYM = 806, - SWAPS_SYM = 807, - SWITCHES_SYM = 808, - SYSDATE = 809, - TABLES = 810, - TABLESPACE = 811, - TABLE_REF_PRIORITY = 812, - TABLE_SYM = 813, - TABLE_CHECKSUM_SYM = 814, - TABLE_NAME_SYM = 815, - TEMPORARY = 816, - TEMPTABLE_SYM = 817, - TERMINATED = 818, - TEXT_STRING = 819, - TEXT_SYM = 820, - THAN_SYM = 821, - THEN_SYM = 822, - TIMESTAMP = 823, - TIMESTAMP_ADD = 824, - TIMESTAMP_DIFF = 825, - TIME_SYM = 826, - TINYBLOB = 827, - TINYINT = 828, - TINYTEXT = 829, - TO_SYM = 830, - TRAILING = 831, - TRANSACTION_SYM = 832, - TRANSACTIONAL_SYM = 833, - TRIGGERS_SYM = 834, - TRIGGER_SYM = 835, - TRIM = 836, - TRUE_SYM = 837, - TRUNCATE_SYM = 838, - TYPES_SYM = 839, - TYPE_SYM = 840, - UDF_RETURNS_SYM = 841, - ULONGLONG_NUM = 842, - UNCOMMITTED_SYM = 843, - UNDEFINED_SYM = 844, - UNDERSCORE_CHARSET = 845, - UNDOFILE_SYM = 846, - UNDO_BUFFER_SIZE_SYM = 847, - UNDO_SYM = 848, - UNICODE_SYM = 849, - UNINSTALL_SYM = 850, - UNION_SYM = 851, - UNIQUE_SYM = 852, - UNKNOWN_SYM = 853, - UNLOCK_SYM = 854, - UNSIGNED = 855, - UNTIL_SYM = 856, - UPDATE_SYM = 857, - UPGRADE_SYM = 858, - USAGE = 859, - USER = 860, - USE_FRM = 861, - USE_SYM = 862, - USING = 863, - UTC_DATE_SYM = 864, - UTC_TIMESTAMP_SYM = 865, - UTC_TIME_SYM = 866, - VALUES = 867, - VALUE_SYM = 868, - VARBINARY = 869, - VARCHAR = 870, - VARIABLES = 871, - VARIANCE_SYM = 872, - VARYING = 873, - VAR_SAMP_SYM = 874, - VIA_SYM = 875, - VIEW_SYM = 876, - VIRTUAL_SYM = 877, - WAIT_SYM = 878, - WARNINGS = 879, - WEEK_SYM = 880, - WEIGHT_STRING_SYM = 881, - WHEN_SYM = 882, - WHERE = 883, - WHILE_SYM = 884, - WITH = 885, - WITH_CUBE_SYM = 886, - WITH_ROLLUP_SYM = 887, - WORK_SYM = 888, - WRAPPER_SYM = 889, - WRITE_SYM = 890, - X509_SYM = 891, - XA_SYM = 892, - XML_SYM = 893, - XOR = 894, - YEAR_MONTH_SYM = 895, - YEAR_SYM = 896, - ZEROFILL = 897, - IMPOSSIBLE_ACTION = 898 - }; + enum yytokentype + { + ABORT_SYM = 258, + ACCESSIBLE_SYM = 259, + ACTION = 260, + ADD = 261, + ADMIN_SYM = 262, + ADDDATE_SYM = 263, + AFTER_SYM = 264, + AGAINST = 265, + AGGREGATE_SYM = 266, + ALGORITHM_SYM = 267, + ALL = 268, + ALTER = 269, + ALWAYS_SYM = 270, + ANALYZE_SYM = 271, + AND_AND_SYM = 272, + AND_SYM = 273, + ANY_SYM = 274, + AS = 275, + ASC = 276, + ASCII_SYM = 277, + ASENSITIVE_SYM = 278, + AT_SYM = 279, + ATOMIC_SYM = 280, + AUTHORS_SYM = 281, + AUTOEXTEND_SIZE_SYM = 282, + AUTO_INC = 283, + AUTO_SYM = 284, + AVG_ROW_LENGTH = 285, + AVG_SYM = 286, + BACKUP_SYM = 287, + BEFORE_SYM = 288, + BEGIN_SYM = 289, + BETWEEN_SYM = 290, + BIGINT = 291, + BINARY = 292, + BINLOG_SYM = 293, + BIN_NUM = 294, + BIT_AND = 295, + BIT_OR = 296, + BIT_SYM = 297, + BIT_XOR = 298, + BLOB_SYM = 299, + BLOCK_SYM = 300, + BOOLEAN_SYM = 301, + BOOL_SYM = 302, + BOTH = 303, + BTREE_SYM = 304, + BY = 305, + BYTE_SYM = 306, + CACHE_SYM = 307, + CALL_SYM = 308, + CASCADE = 309, + CASCADED = 310, + CASE_SYM = 311, + CAST_SYM = 312, + CATALOG_NAME_SYM = 313, + CHAIN_SYM = 314, + CHANGE = 315, + CHANGED = 316, + CHARSET = 317, + CHAR_SYM = 318, + CHECKPOINT_SYM = 319, + CHECKSUM_SYM = 320, + CHECK_SYM = 321, + CIPHER_SYM = 322, + CLASS_ORIGIN_SYM = 323, + CLIENT_SYM = 324, + CLOSE_SYM = 325, + COALESCE = 326, + CODE_SYM = 327, + COLLATE_SYM = 328, + COLLATION_SYM = 329, + COLUMNS = 330, + COLUMN_ADD_SYM = 331, + COLUMN_CHECK_SYM = 332, + COLUMN_CREATE_SYM = 333, + COLUMN_DELETE_SYM = 334, + COLUMN_GET_SYM = 335, + COLUMN_SYM = 336, + COLUMN_NAME_SYM = 337, + COMMENT_SYM = 338, + COMMITTED_SYM = 339, + COMMIT_SYM = 340, + COMPACT_SYM = 341, + COMPLETION_SYM = 342, + COMPRESSED_SYM = 343, + CONCURRENT = 344, + CONDITION_SYM = 345, + CONNECTION_SYM = 346, + CONSISTENT_SYM = 347, + CONSTRAINT = 348, + CONSTRAINT_CATALOG_SYM = 349, + CONSTRAINT_NAME_SYM = 350, + CONSTRAINT_SCHEMA_SYM = 351, + CONTAINS_SYM = 352, + CONTEXT_SYM = 353, + CONTINUE_SYM = 354, + CONTRIBUTORS_SYM = 355, + CONVERT_SYM = 356, + COUNT_SYM = 357, + CPU_SYM = 358, + CREATE = 359, + CROSS = 360, + CUBE_SYM = 361, + CURDATE = 362, + CURRENT_SYM = 363, + CURRENT_USER = 364, + CURRENT_ROLE = 365, + CURRENT_POS_SYM = 366, + CURSOR_SYM = 367, + CURSOR_NAME_SYM = 368, + CURTIME = 369, + DATABASE = 370, + DATABASES = 371, + DATAFILE_SYM = 372, + DATA_SYM = 373, + DATETIME = 374, + DATE_ADD_INTERVAL = 375, + DATE_SUB_INTERVAL = 376, + DATE_SYM = 377, + DAY_HOUR_SYM = 378, + DAY_MICROSECOND_SYM = 379, + DAY_MINUTE_SYM = 380, + DAY_SECOND_SYM = 381, + DAY_SYM = 382, + DEALLOCATE_SYM = 383, + DECIMAL_NUM = 384, + DECIMAL_SYM = 385, + DECLARE_SYM = 386, + DEFAULT = 387, + DEFINER_SYM = 388, + DELAYED_SYM = 389, + DELAY_KEY_WRITE_SYM = 390, + DELETE_SYM = 391, + DELETE_DOMAIN_ID_SYM = 392, + DESC = 393, + DESCRIBE = 394, + DES_KEY_FILE = 395, + DETERMINISTIC_SYM = 396, + DIAGNOSTICS_SYM = 397, + DIRECTORY_SYM = 398, + DISABLE_SYM = 399, + DISCARD = 400, + DISK_SYM = 401, + DISTINCT = 402, + DIV_SYM = 403, + DOUBLE_SYM = 404, + DO_DOMAIN_IDS_SYM = 405, + DO_SYM = 406, + DROP = 407, + DUAL_SYM = 408, + DUMPFILE = 409, + DUPLICATE_SYM = 410, + DYNAMIC_SYM = 411, + EACH_SYM = 412, + ELSE = 413, + ELSEIF_SYM = 414, + ENABLE_SYM = 415, + ENCLOSED = 416, + END = 417, + ENDS_SYM = 418, + END_OF_INPUT = 419, + ENGINES_SYM = 420, + ENGINE_SYM = 421, + ENUM = 422, + EQUAL_SYM = 423, + ERROR_SYM = 424, + ERRORS = 425, + ESCAPED = 426, + ESCAPE_SYM = 427, + EVENTS_SYM = 428, + EVENT_SYM = 429, + EVERY_SYM = 430, + EXCHANGE_SYM = 431, + EXAMINED_SYM = 432, + EXECUTE_SYM = 433, + EXISTS = 434, + EXIT_SYM = 435, + EXPANSION_SYM = 436, + EXPORT_SYM = 437, + EXTENDED_SYM = 438, + EXTENT_SIZE_SYM = 439, + EXTRACT_SYM = 440, + FALSE_SYM = 441, + FAST_SYM = 442, + FAULTS_SYM = 443, + FETCH_SYM = 444, + FILE_SYM = 445, + FIRST_SYM = 446, + FIXED_SYM = 447, + FLOAT_NUM = 448, + FLOAT_SYM = 449, + FLUSH_SYM = 450, + FORCE_SYM = 451, + FOREIGN = 452, + FOR_SYM = 453, + FORMAT_SYM = 454, + FOUND_SYM = 455, + FROM = 456, + FULL = 457, + FULLTEXT_SYM = 458, + FUNCTION_SYM = 459, + GE = 460, + GENERAL = 461, + GENERATED_SYM = 462, + GEOMETRYCOLLECTION = 463, + GEOMETRY_SYM = 464, + GET_FORMAT = 465, + GET_SYM = 466, + GLOBAL_SYM = 467, + GRANT = 468, + GRANTS = 469, + GROUP_SYM = 470, + GROUP_CONCAT_SYM = 471, + HANDLER_SYM = 472, + HARD_SYM = 473, + HASH_SYM = 474, + HAVING = 475, + HELP_SYM = 476, + HEX_NUM = 477, + HEX_STRING = 478, + HIGH_PRIORITY = 479, + HOST_SYM = 480, + HOSTS_SYM = 481, + HOUR_MICROSECOND_SYM = 482, + HOUR_MINUTE_SYM = 483, + HOUR_SECOND_SYM = 484, + HOUR_SYM = 485, + ID_SYM = 486, + IDENT = 487, + IDENTIFIED_SYM = 488, + IDENT_QUOTED = 489, + IF_SYM = 490, + IGNORE_DOMAIN_IDS_SYM = 491, + IGNORE_SYM = 492, + IGNORE_SERVER_IDS_SYM = 493, + IMPORT = 494, + INDEXES = 495, + INDEX_SYM = 496, + INFILE = 497, + INITIAL_SIZE_SYM = 498, + INNER_SYM = 499, + INOUT_SYM = 500, + INSENSITIVE_SYM = 501, + INSERT = 502, + INSERT_METHOD = 503, + INSTALL_SYM = 504, + INTERVAL_SYM = 505, + INTO = 506, + INT_SYM = 507, + INVOKER_SYM = 508, + IN_SYM = 509, + IO_SYM = 510, + IPC_SYM = 511, + IS = 512, + ISOLATION = 513, + ISSUER_SYM = 514, + ITERATE_SYM = 515, + JOIN_SYM = 516, + KEYS = 517, + KEY_BLOCK_SIZE = 518, + KEY_SYM = 519, + KILL_SYM = 520, + LANGUAGE_SYM = 521, + LAST_SYM = 522, + LAST_VALUE = 523, + LE = 524, + LEADING = 525, + LEAVES = 526, + LEAVE_SYM = 527, + LEFT = 528, + LESS_SYM = 529, + LEVEL_SYM = 530, + LEX_HOSTNAME = 531, + LIKE = 532, + LIMIT = 533, + LINEAR_SYM = 534, + LINES = 535, + LINESTRING = 536, + LIST_SYM = 537, + LOAD = 538, + LOCAL_SYM = 539, + LOCATOR_SYM = 540, + LOCKS_SYM = 541, + LOCK_SYM = 542, + LOGFILE_SYM = 543, + LOGS_SYM = 544, + LONGBLOB = 545, + LONGTEXT = 546, + LONG_NUM = 547, + LONG_SYM = 548, + LOOP_SYM = 549, + LOW_PRIORITY = 550, + MASTER_CONNECT_RETRY_SYM = 551, + MASTER_GTID_POS_SYM = 552, + MASTER_HOST_SYM = 553, + MASTER_LOG_FILE_SYM = 554, + MASTER_LOG_POS_SYM = 555, + MASTER_PASSWORD_SYM = 556, + MASTER_PORT_SYM = 557, + MASTER_SERVER_ID_SYM = 558, + MASTER_SSL_CAPATH_SYM = 559, + MASTER_SSL_CA_SYM = 560, + MASTER_SSL_CERT_SYM = 561, + MASTER_SSL_CIPHER_SYM = 562, + MASTER_SSL_CRL_SYM = 563, + MASTER_SSL_CRLPATH_SYM = 564, + MASTER_SSL_KEY_SYM = 565, + MASTER_SSL_SYM = 566, + MASTER_SSL_VERIFY_SERVER_CERT_SYM = 567, + MASTER_SYM = 568, + MASTER_USER_SYM = 569, + MASTER_USE_GTID_SYM = 570, + MASTER_HEARTBEAT_PERIOD_SYM = 571, + MATCH = 572, + MAX_CONNECTIONS_PER_HOUR = 573, + MAX_QUERIES_PER_HOUR = 574, + MAX_ROWS = 575, + MAX_SIZE_SYM = 576, + MAX_SYM = 577, + MAX_UPDATES_PER_HOUR = 578, + MAX_STATEMENT_TIME_SYM = 579, + MAX_USER_CONNECTIONS_SYM = 580, + MAX_VALUE_SYM = 581, + MEDIUMBLOB = 582, + MEDIUMINT = 583, + MEDIUMTEXT = 584, + MEDIUM_SYM = 585, + MEMORY_SYM = 586, + MERGE_SYM = 587, + MESSAGE_TEXT_SYM = 588, + MICROSECOND_SYM = 589, + MIGRATE_SYM = 590, + MINUTE_MICROSECOND_SYM = 591, + MINUTE_SECOND_SYM = 592, + MINUTE_SYM = 593, + MIN_ROWS = 594, + MIN_SYM = 595, + MODE_SYM = 596, + MODIFIES_SYM = 597, + MODIFY_SYM = 598, + MOD_SYM = 599, + MONTH_SYM = 600, + MULTILINESTRING = 601, + MULTIPOINT = 602, + MULTIPOLYGON = 603, + MUTEX_SYM = 604, + MYSQL_SYM = 605, + MYSQL_ERRNO_SYM = 606, + NAMES_SYM = 607, + NAME_SYM = 608, + NATIONAL_SYM = 609, + NATURAL = 610, + NCHAR_STRING = 611, + NCHAR_SYM = 612, + NE = 613, + NEG = 614, + NEW_SYM = 615, + NEXT_SYM = 616, + NODEGROUP_SYM = 617, + NONE_SYM = 618, + NOT2_SYM = 619, + NOT_SYM = 620, + NOW_SYM = 621, + NO_SYM = 622, + NO_WAIT_SYM = 623, + NO_WRITE_TO_BINLOG = 624, + NULL_SYM = 625, + NUM = 626, + NUMBER_SYM = 627, + NUMERIC_SYM = 628, + NVARCHAR_SYM = 629, + OFFSET_SYM = 630, + OLD_PASSWORD_SYM = 631, + ON = 632, + ONE_SYM = 633, + ONLY_SYM = 634, + ONLINE_SYM = 635, + OPEN_SYM = 636, + OPTIMIZE = 637, + OPTIONS_SYM = 638, + OPTION = 639, + OPTIONALLY = 640, + OR2_SYM = 641, + ORDER_SYM = 642, + OR_OR_SYM = 643, + OR_SYM = 644, + OUTER = 645, + OUTFILE = 646, + OUT_SYM = 647, + OWNER_SYM = 648, + PACK_KEYS_SYM = 649, + PAGE_SYM = 650, + PAGE_CHECKSUM_SYM = 651, + PARAM_MARKER = 652, + PARSER_SYM = 653, + PARSE_VCOL_EXPR_SYM = 654, + PARTIAL = 655, + PARTITION_SYM = 656, + PARTITIONS_SYM = 657, + PARTITIONING_SYM = 658, + PASSWORD_SYM = 659, + PERSISTENT_SYM = 660, + PHASE_SYM = 661, + PLUGINS_SYM = 662, + PLUGIN_SYM = 663, + POINT_SYM = 664, + POLYGON = 665, + PORT_SYM = 666, + POSITION_SYM = 667, + PRECISION = 668, + PREPARE_SYM = 669, + PRESERVE_SYM = 670, + PREV_SYM = 671, + PRIMARY_SYM = 672, + PRIVILEGES = 673, + PROCEDURE_SYM = 674, + PROCESS = 675, + PROCESSLIST_SYM = 676, + PROFILE_SYM = 677, + PROFILES_SYM = 678, + PROXY_SYM = 679, + PURGE = 680, + QUARTER_SYM = 681, + QUERY_SYM = 682, + QUICK = 683, + RANGE_SYM = 684, + READS_SYM = 685, + READ_ONLY_SYM = 686, + READ_SYM = 687, + READ_WRITE_SYM = 688, + REAL = 689, + REBUILD_SYM = 690, + RECOVER_SYM = 691, + REDOFILE_SYM = 692, + REDO_BUFFER_SIZE_SYM = 693, + REDUNDANT_SYM = 694, + REFERENCES = 695, + REGEXP = 696, + RELAY = 697, + RELAYLOG_SYM = 698, + RELAY_LOG_FILE_SYM = 699, + RELAY_LOG_POS_SYM = 700, + RELAY_THREAD = 701, + RELEASE_SYM = 702, + RELOAD = 703, + REMOVE_SYM = 704, + RENAME = 705, + REORGANIZE_SYM = 706, + REPAIR = 707, + REPEATABLE_SYM = 708, + REPEAT_SYM = 709, + REPLACE = 710, + REPLICATION = 711, + REQUIRE_SYM = 712, + RESET_SYM = 713, + RESIGNAL_SYM = 714, + RESOURCES = 715, + RESTORE_SYM = 716, + RESTRICT = 717, + RESUME_SYM = 718, + RETURNED_SQLSTATE_SYM = 719, + RETURNING_SYM = 720, + RETURNS_SYM = 721, + RETURN_SYM = 722, + REVERSE_SYM = 723, + REVOKE = 724, + RIGHT = 725, + ROLE_SYM = 726, + ROLLBACK_SYM = 727, + ROLLUP_SYM = 728, + ROUTINE_SYM = 729, + ROWS_SYM = 730, + ROW_FORMAT_SYM = 731, + ROW_SYM = 732, + ROW_COUNT_SYM = 733, + RTREE_SYM = 734, + SAVEPOINT_SYM = 735, + SCHEDULE_SYM = 736, + SCHEMA_NAME_SYM = 737, + SECOND_MICROSECOND_SYM = 738, + SECOND_SYM = 739, + SECURITY_SYM = 740, + SELECT_SYM = 741, + SENSITIVE_SYM = 742, + SEPARATOR_SYM = 743, + SERIALIZABLE_SYM = 744, + SERIAL_SYM = 745, + SESSION_SYM = 746, + SERVER_SYM = 747, + SERVER_OPTIONS = 748, + SET = 749, + SET_VAR = 750, + SHARE_SYM = 751, + SHIFT_LEFT = 752, + SHIFT_RIGHT = 753, + SHOW = 754, + SHUTDOWN = 755, + SIGNAL_SYM = 756, + SIGNED_SYM = 757, + SIMPLE_SYM = 758, + SLAVE = 759, + SLAVES = 760, + SLAVE_POS_SYM = 761, + SLOW = 762, + SMALLINT = 763, + SNAPSHOT_SYM = 764, + SOCKET_SYM = 765, + SOFT_SYM = 766, + SONAME_SYM = 767, + SOUNDS_SYM = 768, + SOURCE_SYM = 769, + SPATIAL_SYM = 770, + SPECIFIC_SYM = 771, + SQLEXCEPTION_SYM = 772, + SQLSTATE_SYM = 773, + SQLWARNING_SYM = 774, + SQL_BIG_RESULT = 775, + SQL_BUFFER_RESULT = 776, + SQL_CACHE_SYM = 777, + SQL_CALC_FOUND_ROWS = 778, + SQL_NO_CACHE_SYM = 779, + SQL_SMALL_RESULT = 780, + SQL_SYM = 781, + SQL_THREAD = 782, + REF_SYSTEM_ID_SYM = 783, + SSL_SYM = 784, + STARTING = 785, + STARTS_SYM = 786, + START_SYM = 787, + STATEMENT_SYM = 788, + STATS_AUTO_RECALC_SYM = 789, + STATS_PERSISTENT_SYM = 790, + STATS_SAMPLE_PAGES_SYM = 791, + STATUS_SYM = 792, + STDDEV_SAMP_SYM = 793, + STD_SYM = 794, + STOP_SYM = 795, + STORAGE_SYM = 796, + STRAIGHT_JOIN = 797, + STRING_SYM = 798, + SUBCLASS_ORIGIN_SYM = 799, + SUBDATE_SYM = 800, + SUBJECT_SYM = 801, + SUBPARTITIONS_SYM = 802, + SUBPARTITION_SYM = 803, + SUBSTRING = 804, + SUM_SYM = 805, + SUPER_SYM = 806, + SUSPEND_SYM = 807, + SWAPS_SYM = 808, + SWITCHES_SYM = 809, + SYSDATE = 810, + TABLES = 811, + TABLESPACE = 812, + TABLE_REF_PRIORITY = 813, + TABLE_SYM = 814, + TABLE_CHECKSUM_SYM = 815, + TABLE_NAME_SYM = 816, + TEMPORARY = 817, + TEMPTABLE_SYM = 818, + TERMINATED = 819, + TEXT_STRING = 820, + TEXT_SYM = 821, + THAN_SYM = 822, + THEN_SYM = 823, + TIMESTAMP = 824, + TIMESTAMP_ADD = 825, + TIMESTAMP_DIFF = 826, + TIME_SYM = 827, + TINYBLOB = 828, + TINYINT = 829, + TINYTEXT = 830, + TO_SYM = 831, + TRAILING = 832, + TRANSACTION_SYM = 833, + TRANSACTIONAL_SYM = 834, + TRIGGERS_SYM = 835, + TRIGGER_SYM = 836, + TRIM = 837, + TRUE_SYM = 838, + TRUNCATE_SYM = 839, + TYPES_SYM = 840, + TYPE_SYM = 841, + UDF_RETURNS_SYM = 842, + ULONGLONG_NUM = 843, + UNCOMMITTED_SYM = 844, + UNDEFINED_SYM = 845, + UNDERSCORE_CHARSET = 846, + UNDOFILE_SYM = 847, + UNDO_BUFFER_SIZE_SYM = 848, + UNDO_SYM = 849, + UNICODE_SYM = 850, + UNINSTALL_SYM = 851, + UNION_SYM = 852, + UNIQUE_SYM = 853, + UNKNOWN_SYM = 854, + UNLOCK_SYM = 855, + UNSIGNED = 856, + UNTIL_SYM = 857, + UPDATE_SYM = 858, + UPGRADE_SYM = 859, + USAGE = 860, + USER = 861, + USE_FRM = 862, + USE_SYM = 863, + USING = 864, + UTC_DATE_SYM = 865, + UTC_TIMESTAMP_SYM = 866, + UTC_TIME_SYM = 867, + VALUES = 868, + VALUE_SYM = 869, + VARBINARY = 870, + VARCHAR = 871, + VARIABLES = 872, + VARIANCE_SYM = 873, + VARYING = 874, + VAR_SAMP_SYM = 875, + VIA_SYM = 876, + VIEW_SYM = 877, + VIRTUAL_SYM = 878, + WAIT_SYM = 879, + WARNINGS = 880, + WEEK_SYM = 881, + WEIGHT_STRING_SYM = 882, + WHEN_SYM = 883, + WHERE = 884, + WHILE_SYM = 885, + WITH = 886, + WITH_CUBE_SYM = 887, + WITH_ROLLUP_SYM = 888, + WORK_SYM = 889, + WRAPPER_SYM = 890, + WRITE_SYM = 891, + X509_SYM = 892, + XA_SYM = 893, + XML_SYM = 894, + XOR = 895, + YEAR_MONTH_SYM = 896, + YEAR_SYM = 897, + ZEROFILL = 898, + IMPOSSIBLE_ACTION = 899 + }; #endif /* Tokens. */ #define ABORT_SYM 258 @@ -1807,523 +1806,521 @@ #define DELAYED_SYM 389 #define DELAY_KEY_WRITE_SYM 390 #define DELETE_SYM 391 -#define DESC 392 -#define DESCRIBE 393 -#define DES_KEY_FILE 394 -#define DETERMINISTIC_SYM 395 -#define DIAGNOSTICS_SYM 396 -#define DIRECTORY_SYM 397 -#define DISABLE_SYM 398 -#define DISCARD 399 -#define DISK_SYM 400 -#define DISTINCT 401 -#define DIV_SYM 402 -#define DOUBLE_SYM 403 -#define DO_DOMAIN_IDS_SYM 404 -#define DO_SYM 405 -#define DROP 406 -#define DUAL_SYM 407 -#define DUMPFILE 408 -#define DUPLICATE_SYM 409 -#define DYNAMIC_SYM 410 -#define EACH_SYM 411 -#define ELSE 412 -#define ELSEIF_SYM 413 -#define ENABLE_SYM 414 -#define ENCLOSED 415 -#define END 416 -#define ENDS_SYM 417 -#define END_OF_INPUT 418 -#define ENGINES_SYM 419 -#define ENGINE_SYM 420 -#define ENUM 421 -#define EQUAL_SYM 422 -#define ERROR_SYM 423 -#define ERRORS 424 -#define ESCAPED 425 -#define ESCAPE_SYM 426 -#define EVENTS_SYM 427 -#define EVENT_SYM 428 -#define EVERY_SYM 429 -#define EXCHANGE_SYM 430 -#define EXAMINED_SYM 431 -#define EXECUTE_SYM 432 -#define EXISTS 433 -#define EXIT_SYM 434 -#define EXPANSION_SYM 435 -#define EXPORT_SYM 436 -#define EXTENDED_SYM 437 -#define EXTENT_SIZE_SYM 438 -#define EXTRACT_SYM 439 -#define FALSE_SYM 440 -#define FAST_SYM 441 -#define FAULTS_SYM 442 -#define FETCH_SYM 443 -#define FILE_SYM 444 -#define FIRST_SYM 445 -#define FIXED_SYM 446 -#define FLOAT_NUM 447 -#define FLOAT_SYM 448 -#define FLUSH_SYM 449 -#define FORCE_SYM 450 -#define FOREIGN 451 -#define FOR_SYM 452 -#define FORMAT_SYM 453 -#define FOUND_SYM 454 -#define FROM 455 -#define FULL 456 -#define FULLTEXT_SYM 457 -#define FUNCTION_SYM 458 -#define GE 459 -#define GENERAL 460 -#define GENERATED_SYM 461 -#define GEOMETRYCOLLECTION 462 -#define GEOMETRY_SYM 463 -#define GET_FORMAT 464 -#define GET_SYM 465 -#define GLOBAL_SYM 466 -#define GRANT 467 -#define GRANTS 468 -#define GROUP_SYM 469 -#define GROUP_CONCAT_SYM 470 -#define HANDLER_SYM 471 -#define HARD_SYM 472 -#define HASH_SYM 473 -#define HAVING 474 -#define HELP_SYM 475 -#define HEX_NUM 476 -#define HEX_STRING 477 -#define HIGH_PRIORITY 478 -#define HOST_SYM 479 -#define HOSTS_SYM 480 -#define HOUR_MICROSECOND_SYM 481 -#define HOUR_MINUTE_SYM 482 -#define HOUR_SECOND_SYM 483 -#define HOUR_SYM 484 -#define ID_SYM 485 -#define IDENT 486 -#define IDENTIFIED_SYM 487 -#define IDENT_QUOTED 488 -#define IF_SYM 489 -#define IGNORE_DOMAIN_IDS_SYM 490 -#define IGNORE_SYM 491 -#define IGNORE_SERVER_IDS_SYM 492 -#define IMPORT 493 -#define INDEXES 494 -#define INDEX_SYM 495 -#define INFILE 496 -#define INITIAL_SIZE_SYM 497 -#define INNER_SYM 498 -#define INOUT_SYM 499 -#define INSENSITIVE_SYM 500 -#define INSERT 501 -#define INSERT_METHOD 502 -#define INSTALL_SYM 503 -#define INTERVAL_SYM 504 -#define INTO 505 -#define INT_SYM 506 -#define INVOKER_SYM 507 -#define IN_SYM 508 -#define IO_SYM 509 -#define IPC_SYM 510 -#define IS 511 -#define ISOLATION 512 -#define ISSUER_SYM 513 -#define ITERATE_SYM 514 -#define JOIN_SYM 515 -#define KEYS 516 -#define KEY_BLOCK_SIZE 517 -#define KEY_SYM 518 -#define KILL_SYM 519 -#define LANGUAGE_SYM 520 -#define LAST_SYM 521 -#define LAST_VALUE 522 -#define LE 523 -#define LEADING 524 -#define LEAVES 525 -#define LEAVE_SYM 526 -#define LEFT 527 -#define LESS_SYM 528 -#define LEVEL_SYM 529 -#define LEX_HOSTNAME 530 -#define LIKE 531 -#define LIMIT 532 -#define LINEAR_SYM 533 -#define LINES 534 -#define LINESTRING 535 -#define LIST_SYM 536 -#define LOAD 537 -#define LOCAL_SYM 538 -#define LOCATOR_SYM 539 -#define LOCKS_SYM 540 -#define LOCK_SYM 541 -#define LOGFILE_SYM 542 -#define LOGS_SYM 543 -#define LONGBLOB 544 -#define LONGTEXT 545 -#define LONG_NUM 546 -#define LONG_SYM 547 -#define LOOP_SYM 548 -#define LOW_PRIORITY 549 -#define MASTER_CONNECT_RETRY_SYM 550 -#define MASTER_GTID_POS_SYM 551 -#define MASTER_HOST_SYM 552 -#define MASTER_LOG_FILE_SYM 553 -#define MASTER_LOG_POS_SYM 554 -#define MASTER_PASSWORD_SYM 555 -#define MASTER_PORT_SYM 556 -#define MASTER_SERVER_ID_SYM 557 -#define MASTER_SSL_CAPATH_SYM 558 -#define MASTER_SSL_CA_SYM 559 -#define MASTER_SSL_CERT_SYM 560 -#define MASTER_SSL_CIPHER_SYM 561 -#define MASTER_SSL_CRL_SYM 562 -#define MASTER_SSL_CRLPATH_SYM 563 -#define MASTER_SSL_KEY_SYM 564 -#define MASTER_SSL_SYM 565 -#define MASTER_SSL_VERIFY_SERVER_CERT_SYM 566 -#define MASTER_SYM 567 -#define MASTER_USER_SYM 568 -#define MASTER_USE_GTID_SYM 569 -#define MASTER_HEARTBEAT_PERIOD_SYM 570 -#define MATCH 571 -#define MAX_CONNECTIONS_PER_HOUR 572 -#define MAX_QUERIES_PER_HOUR 573 -#define MAX_ROWS 574 -#define MAX_SIZE_SYM 575 -#define MAX_SYM 576 -#define MAX_UPDATES_PER_HOUR 577 -#define MAX_STATEMENT_TIME_SYM 578 -#define MAX_USER_CONNECTIONS_SYM 579 -#define MAX_VALUE_SYM 580 -#define MEDIUMBLOB 581 -#define MEDIUMINT 582 -#define MEDIUMTEXT 583 -#define MEDIUM_SYM 584 -#define MEMORY_SYM 585 -#define MERGE_SYM 586 -#define MESSAGE_TEXT_SYM 587 -#define MICROSECOND_SYM 588 -#define MIGRATE_SYM 589 -#define MINUTE_MICROSECOND_SYM 590 -#define MINUTE_SECOND_SYM 591 -#define MINUTE_SYM 592 -#define MIN_ROWS 593 -#define MIN_SYM 594 -#define MODE_SYM 595 -#define MODIFIES_SYM 596 -#define MODIFY_SYM 597 -#define MOD_SYM 598 -#define MONTH_SYM 599 -#define MULTILINESTRING 600 -#define MULTIPOINT 601 -#define MULTIPOLYGON 602 -#define MUTEX_SYM 603 -#define MYSQL_SYM 604 -#define MYSQL_ERRNO_SYM 605 -#define NAMES_SYM 606 -#define NAME_SYM 607 -#define NATIONAL_SYM 608 -#define NATURAL 609 -#define NCHAR_STRING 610 -#define NCHAR_SYM 611 -#define NE 612 -#define NEG 613 -#define NEW_SYM 614 -#define NEXT_SYM 615 -#define NODEGROUP_SYM 616 -#define NONE_SYM 617 -#define NOT2_SYM 618 -#define NOT_SYM 619 -#define NOW_SYM 620 -#define NO_SYM 621 -#define NO_WAIT_SYM 622 -#define NO_WRITE_TO_BINLOG 623 -#define NULL_SYM 624 -#define NUM 625 -#define NUMBER_SYM 626 -#define NUMERIC_SYM 627 -#define NVARCHAR_SYM 628 -#define OFFSET_SYM 629 -#define OLD_PASSWORD_SYM 630 -#define ON 631 -#define ONE_SYM 632 -#define ONLY_SYM 633 -#define ONLINE_SYM 634 -#define OPEN_SYM 635 -#define OPTIMIZE 636 -#define OPTIONS_SYM 637 -#define OPTION 638 -#define OPTIONALLY 639 -#define OR2_SYM 640 -#define ORDER_SYM 641 -#define OR_OR_SYM 642 -#define OR_SYM 643 -#define OUTER 644 -#define OUTFILE 645 -#define OUT_SYM 646 -#define OWNER_SYM 647 -#define PACK_KEYS_SYM 648 -#define PAGE_SYM 649 -#define PAGE_CHECKSUM_SYM 650 -#define PARAM_MARKER 651 -#define PARSER_SYM 652 -#define PARSE_VCOL_EXPR_SYM 653 -#define PARTIAL 654 -#define PARTITION_SYM 655 -#define PARTITIONS_SYM 656 -#define PARTITIONING_SYM 657 -#define PASSWORD_SYM 658 -#define PERSISTENT_SYM 659 -#define PHASE_SYM 660 -#define PLUGINS_SYM 661 -#define PLUGIN_SYM 662 -#define POINT_SYM 663 -#define POLYGON 664 -#define PORT_SYM 665 -#define POSITION_SYM 666 -#define PRECISION 667 -#define PREPARE_SYM 668 -#define PRESERVE_SYM 669 -#define PREV_SYM 670 -#define PRIMARY_SYM 671 -#define PRIVILEGES 672 -#define PROCEDURE_SYM 673 -#define PROCESS 674 -#define PROCESSLIST_SYM 675 -#define PROFILE_SYM 676 -#define PROFILES_SYM 677 -#define PROXY_SYM 678 -#define PURGE 679 -#define QUARTER_SYM 680 -#define QUERY_SYM 681 -#define QUICK 682 -#define RANGE_SYM 683 -#define READS_SYM 684 -#define READ_ONLY_SYM 685 -#define READ_SYM 686 -#define READ_WRITE_SYM 687 -#define REAL 688 -#define REBUILD_SYM 689 -#define RECOVER_SYM 690 -#define REDOFILE_SYM 691 -#define REDO_BUFFER_SIZE_SYM 692 -#define REDUNDANT_SYM 693 -#define REFERENCES 694 -#define REGEXP 695 -#define RELAY 696 -#define RELAYLOG_SYM 697 -#define RELAY_LOG_FILE_SYM 698 -#define RELAY_LOG_POS_SYM 699 -#define RELAY_THREAD 700 -#define RELEASE_SYM 701 -#define RELOAD 702 -#define REMOVE_SYM 703 -#define RENAME 704 -#define REORGANIZE_SYM 705 -#define REPAIR 706 -#define REPEATABLE_SYM 707 -#define REPEAT_SYM 708 -#define REPLACE 709 -#define REPLICATION 710 -#define REQUIRE_SYM 711 -#define RESET_SYM 712 -#define RESIGNAL_SYM 713 -#define RESOURCES 714 -#define RESTORE_SYM 715 -#define RESTRICT 716 -#define RESUME_SYM 717 -#define RETURNED_SQLSTATE_SYM 718 -#define RETURNING_SYM 719 -#define RETURNS_SYM 720 -#define RETURN_SYM 721 -#define REVERSE_SYM 722 -#define REVOKE 723 -#define RIGHT 724 -#define ROLE_SYM 725 -#define ROLLBACK_SYM 726 -#define ROLLUP_SYM 727 -#define ROUTINE_SYM 728 -#define ROWS_SYM 729 -#define ROW_FORMAT_SYM 730 -#define ROW_SYM 731 -#define ROW_COUNT_SYM 732 -#define RTREE_SYM 733 -#define SAVEPOINT_SYM 734 -#define SCHEDULE_SYM 735 -#define SCHEMA_NAME_SYM 736 -#define SECOND_MICROSECOND_SYM 737 -#define SECOND_SYM 738 -#define SECURITY_SYM 739 -#define SELECT_SYM 740 -#define SENSITIVE_SYM 741 -#define SEPARATOR_SYM 742 -#define SERIALIZABLE_SYM 743 -#define SERIAL_SYM 744 -#define SESSION_SYM 745 -#define SERVER_SYM 746 -#define SERVER_OPTIONS 747 -#define SET 748 -#define SET_VAR 749 -#define SHARE_SYM 750 -#define SHIFT_LEFT 751 -#define SHIFT_RIGHT 752 -#define SHOW 753 -#define SHUTDOWN 754 -#define SIGNAL_SYM 755 -#define SIGNED_SYM 756 -#define SIMPLE_SYM 757 -#define SLAVE 758 -#define SLAVES 759 -#define SLAVE_POS_SYM 760 -#define SLOW 761 -#define SMALLINT 762 -#define SNAPSHOT_SYM 763 -#define SOCKET_SYM 764 -#define SOFT_SYM 765 -#define SONAME_SYM 766 -#define SOUNDS_SYM 767 -#define SOURCE_SYM 768 -#define SPATIAL_SYM 769 -#define SPECIFIC_SYM 770 -#define SQLEXCEPTION_SYM 771 -#define SQLSTATE_SYM 772 -#define SQLWARNING_SYM 773 -#define SQL_BIG_RESULT 774 -#define SQL_BUFFER_RESULT 775 -#define SQL_CACHE_SYM 776 -#define SQL_CALC_FOUND_ROWS 777 -#define SQL_NO_CACHE_SYM 778 -#define SQL_SMALL_RESULT 779 -#define SQL_SYM 780 -#define SQL_THREAD 781 -#define REF_SYSTEM_ID_SYM 782 -#define SSL_SYM 783 -#define STARTING 784 -#define STARTS_SYM 785 -#define START_SYM 786 -#define STATEMENT_SYM 787 -#define STATS_AUTO_RECALC_SYM 788 -#define STATS_PERSISTENT_SYM 789 -#define STATS_SAMPLE_PAGES_SYM 790 -#define STATUS_SYM 791 -#define STDDEV_SAMP_SYM 792 -#define STD_SYM 793 -#define STOP_SYM 794 -#define STORAGE_SYM 795 -#define STRAIGHT_JOIN 796 -#define STRING_SYM 797 -#define SUBCLASS_ORIGIN_SYM 798 -#define SUBDATE_SYM 799 -#define SUBJECT_SYM 800 -#define SUBPARTITIONS_SYM 801 -#define SUBPARTITION_SYM 802 -#define SUBSTRING 803 -#define SUM_SYM 804 -#define SUPER_SYM 805 -#define SUSPEND_SYM 806 -#define SWAPS_SYM 807 -#define SWITCHES_SYM 808 -#define SYSDATE 809 -#define TABLES 810 -#define TABLESPACE 811 -#define TABLE_REF_PRIORITY 812 -#define TABLE_SYM 813 -#define TABLE_CHECKSUM_SYM 814 -#define TABLE_NAME_SYM 815 -#define TEMPORARY 816 -#define TEMPTABLE_SYM 817 -#define TERMINATED 818 -#define TEXT_STRING 819 -#define TEXT_SYM 820 -#define THAN_SYM 821 -#define THEN_SYM 822 -#define TIMESTAMP 823 -#define TIMESTAMP_ADD 824 -#define TIMESTAMP_DIFF 825 -#define TIME_SYM 826 -#define TINYBLOB 827 -#define TINYINT 828 -#define TINYTEXT 829 -#define TO_SYM 830 -#define TRAILING 831 -#define TRANSACTION_SYM 832 -#define TRANSACTIONAL_SYM 833 -#define TRIGGERS_SYM 834 -#define TRIGGER_SYM 835 -#define TRIM 836 -#define TRUE_SYM 837 -#define TRUNCATE_SYM 838 -#define TYPES_SYM 839 -#define TYPE_SYM 840 -#define UDF_RETURNS_SYM 841 -#define ULONGLONG_NUM 842 -#define UNCOMMITTED_SYM 843 -#define UNDEFINED_SYM 844 -#define UNDERSCORE_CHARSET 845 -#define UNDOFILE_SYM 846 -#define UNDO_BUFFER_SIZE_SYM 847 -#define UNDO_SYM 848 -#define UNICODE_SYM 849 -#define UNINSTALL_SYM 850 -#define UNION_SYM 851 -#define UNIQUE_SYM 852 -#define UNKNOWN_SYM 853 -#define UNLOCK_SYM 854 -#define UNSIGNED 855 -#define UNTIL_SYM 856 -#define UPDATE_SYM 857 -#define UPGRADE_SYM 858 -#define USAGE 859 -#define USER 860 -#define USE_FRM 861 -#define USE_SYM 862 -#define USING 863 -#define UTC_DATE_SYM 864 -#define UTC_TIMESTAMP_SYM 865 -#define UTC_TIME_SYM 866 -#define VALUES 867 -#define VALUE_SYM 868 -#define VARBINARY 869 -#define VARCHAR 870 -#define VARIABLES 871 -#define VARIANCE_SYM 872 -#define VARYING 873 -#define VAR_SAMP_SYM 874 -#define VIA_SYM 875 -#define VIEW_SYM 876 -#define VIRTUAL_SYM 877 -#define WAIT_SYM 878 -#define WARNINGS 879 -#define WEEK_SYM 880 -#define WEIGHT_STRING_SYM 881 -#define WHEN_SYM 882 -#define WHERE 883 -#define WHILE_SYM 884 -#define WITH 885 -#define WITH_CUBE_SYM 886 -#define WITH_ROLLUP_SYM 887 -#define WORK_SYM 888 -#define WRAPPER_SYM 889 -#define WRITE_SYM 890 -#define X509_SYM 891 -#define XA_SYM 892 -#define XML_SYM 893 -#define XOR 894 -#define YEAR_MONTH_SYM 895 -#define YEAR_SYM 896 -#define ZEROFILL 897 -#define IMPOSSIBLE_ACTION 898 - - - +#define DELETE_DOMAIN_ID_SYM 392 +#define DESC 393 +#define DESCRIBE 394 +#define DES_KEY_FILE 395 +#define DETERMINISTIC_SYM 396 +#define DIAGNOSTICS_SYM 397 +#define DIRECTORY_SYM 398 +#define DISABLE_SYM 399 +#define DISCARD 400 +#define DISK_SYM 401 +#define DISTINCT 402 +#define DIV_SYM 403 +#define DOUBLE_SYM 404 +#define DO_DOMAIN_IDS_SYM 405 +#define DO_SYM 406 +#define DROP 407 +#define DUAL_SYM 408 +#define DUMPFILE 409 +#define DUPLICATE_SYM 410 +#define DYNAMIC_SYM 411 +#define EACH_SYM 412 +#define ELSE 413 +#define ELSEIF_SYM 414 +#define ENABLE_SYM 415 +#define ENCLOSED 416 +#define END 417 +#define ENDS_SYM 418 +#define END_OF_INPUT 419 +#define ENGINES_SYM 420 +#define ENGINE_SYM 421 +#define ENUM 422 +#define EQUAL_SYM 423 +#define ERROR_SYM 424 +#define ERRORS 425 +#define ESCAPED 426 +#define ESCAPE_SYM 427 +#define EVENTS_SYM 428 +#define EVENT_SYM 429 +#define EVERY_SYM 430 +#define EXCHANGE_SYM 431 +#define EXAMINED_SYM 432 +#define EXECUTE_SYM 433 +#define EXISTS 434 +#define EXIT_SYM 435 +#define EXPANSION_SYM 436 +#define EXPORT_SYM 437 +#define EXTENDED_SYM 438 +#define EXTENT_SIZE_SYM 439 +#define EXTRACT_SYM 440 +#define FALSE_SYM 441 +#define FAST_SYM 442 +#define FAULTS_SYM 443 +#define FETCH_SYM 444 +#define FILE_SYM 445 +#define FIRST_SYM 446 +#define FIXED_SYM 447 +#define FLOAT_NUM 448 +#define FLOAT_SYM 449 +#define FLUSH_SYM 450 +#define FORCE_SYM 451 +#define FOREIGN 452 +#define FOR_SYM 453 +#define FORMAT_SYM 454 +#define FOUND_SYM 455 +#define FROM 456 +#define FULL 457 +#define FULLTEXT_SYM 458 +#define FUNCTION_SYM 459 +#define GE 460 +#define GENERAL 461 +#define GENERATED_SYM 462 +#define GEOMETRYCOLLECTION 463 +#define GEOMETRY_SYM 464 +#define GET_FORMAT 465 +#define GET_SYM 466 +#define GLOBAL_SYM 467 +#define GRANT 468 +#define GRANTS 469 +#define GROUP_SYM 470 +#define GROUP_CONCAT_SYM 471 +#define HANDLER_SYM 472 +#define HARD_SYM 473 +#define HASH_SYM 474 +#define HAVING 475 +#define HELP_SYM 476 +#define HEX_NUM 477 +#define HEX_STRING 478 +#define HIGH_PRIORITY 479 +#define HOST_SYM 480 +#define HOSTS_SYM 481 +#define HOUR_MICROSECOND_SYM 482 +#define HOUR_MINUTE_SYM 483 +#define HOUR_SECOND_SYM 484 +#define HOUR_SYM 485 +#define ID_SYM 486 +#define IDENT 487 +#define IDENTIFIED_SYM 488 +#define IDENT_QUOTED 489 +#define IF_SYM 490 +#define IGNORE_DOMAIN_IDS_SYM 491 +#define IGNORE_SYM 492 +#define IGNORE_SERVER_IDS_SYM 493 +#define IMPORT 494 +#define INDEXES 495 +#define INDEX_SYM 496 +#define INFILE 497 +#define INITIAL_SIZE_SYM 498 +#define INNER_SYM 499 +#define INOUT_SYM 500 +#define INSENSITIVE_SYM 501 +#define INSERT 502 +#define INSERT_METHOD 503 +#define INSTALL_SYM 504 +#define INTERVAL_SYM 505 +#define INTO 506 +#define INT_SYM 507 +#define INVOKER_SYM 508 +#define IN_SYM 509 +#define IO_SYM 510 +#define IPC_SYM 511 +#define IS 512 +#define ISOLATION 513 +#define ISSUER_SYM 514 +#define ITERATE_SYM 515 +#define JOIN_SYM 516 +#define KEYS 517 +#define KEY_BLOCK_SIZE 518 +#define KEY_SYM 519 +#define KILL_SYM 520 +#define LANGUAGE_SYM 521 +#define LAST_SYM 522 +#define LAST_VALUE 523 +#define LE 524 +#define LEADING 525 +#define LEAVES 526 +#define LEAVE_SYM 527 +#define LEFT 528 +#define LESS_SYM 529 +#define LEVEL_SYM 530 +#define LEX_HOSTNAME 531 +#define LIKE 532 +#define LIMIT 533 +#define LINEAR_SYM 534 +#define LINES 535 +#define LINESTRING 536 +#define LIST_SYM 537 +#define LOAD 538 +#define LOCAL_SYM 539 +#define LOCATOR_SYM 540 +#define LOCKS_SYM 541 +#define LOCK_SYM 542 +#define LOGFILE_SYM 543 +#define LOGS_SYM 544 +#define LONGBLOB 545 +#define LONGTEXT 546 +#define LONG_NUM 547 +#define LONG_SYM 548 +#define LOOP_SYM 549 +#define LOW_PRIORITY 550 +#define MASTER_CONNECT_RETRY_SYM 551 +#define MASTER_GTID_POS_SYM 552 +#define MASTER_HOST_SYM 553 +#define MASTER_LOG_FILE_SYM 554 +#define MASTER_LOG_POS_SYM 555 +#define MASTER_PASSWORD_SYM 556 +#define MASTER_PORT_SYM 557 +#define MASTER_SERVER_ID_SYM 558 +#define MASTER_SSL_CAPATH_SYM 559 +#define MASTER_SSL_CA_SYM 560 +#define MASTER_SSL_CERT_SYM 561 +#define MASTER_SSL_CIPHER_SYM 562 +#define MASTER_SSL_CRL_SYM 563 +#define MASTER_SSL_CRLPATH_SYM 564 +#define MASTER_SSL_KEY_SYM 565 +#define MASTER_SSL_SYM 566 +#define MASTER_SSL_VERIFY_SERVER_CERT_SYM 567 +#define MASTER_SYM 568 +#define MASTER_USER_SYM 569 +#define MASTER_USE_GTID_SYM 570 +#define MASTER_HEARTBEAT_PERIOD_SYM 571 +#define MATCH 572 +#define MAX_CONNECTIONS_PER_HOUR 573 +#define MAX_QUERIES_PER_HOUR 574 +#define MAX_ROWS 575 +#define MAX_SIZE_SYM 576 +#define MAX_SYM 577 +#define MAX_UPDATES_PER_HOUR 578 +#define MAX_STATEMENT_TIME_SYM 579 +#define MAX_USER_CONNECTIONS_SYM 580 +#define MAX_VALUE_SYM 581 +#define MEDIUMBLOB 582 +#define MEDIUMINT 583 +#define MEDIUMTEXT 584 +#define MEDIUM_SYM 585 +#define MEMORY_SYM 586 +#define MERGE_SYM 587 +#define MESSAGE_TEXT_SYM 588 +#define MICROSECOND_SYM 589 +#define MIGRATE_SYM 590 +#define MINUTE_MICROSECOND_SYM 591 +#define MINUTE_SECOND_SYM 592 +#define MINUTE_SYM 593 +#define MIN_ROWS 594 +#define MIN_SYM 595 +#define MODE_SYM 596 +#define MODIFIES_SYM 597 +#define MODIFY_SYM 598 +#define MOD_SYM 599 +#define MONTH_SYM 600 +#define MULTILINESTRING 601 +#define MULTIPOINT 602 +#define MULTIPOLYGON 603 +#define MUTEX_SYM 604 +#define MYSQL_SYM 605 +#define MYSQL_ERRNO_SYM 606 +#define NAMES_SYM 607 +#define NAME_SYM 608 +#define NATIONAL_SYM 609 +#define NATURAL 610 +#define NCHAR_STRING 611 +#define NCHAR_SYM 612 +#define NE 613 +#define NEG 614 +#define NEW_SYM 615 +#define NEXT_SYM 616 +#define NODEGROUP_SYM 617 +#define NONE_SYM 618 +#define NOT2_SYM 619 +#define NOT_SYM 620 +#define NOW_SYM 621 +#define NO_SYM 622 +#define NO_WAIT_SYM 623 +#define NO_WRITE_TO_BINLOG 624 +#define NULL_SYM 625 +#define NUM 626 +#define NUMBER_SYM 627 +#define NUMERIC_SYM 628 +#define NVARCHAR_SYM 629 +#define OFFSET_SYM 630 +#define OLD_PASSWORD_SYM 631 +#define ON 632 +#define ONE_SYM 633 +#define ONLY_SYM 634 +#define ONLINE_SYM 635 +#define OPEN_SYM 636 +#define OPTIMIZE 637 +#define OPTIONS_SYM 638 +#define OPTION 639 +#define OPTIONALLY 640 +#define OR2_SYM 641 +#define ORDER_SYM 642 +#define OR_OR_SYM 643 +#define OR_SYM 644 +#define OUTER 645 +#define OUTFILE 646 +#define OUT_SYM 647 +#define OWNER_SYM 648 +#define PACK_KEYS_SYM 649 +#define PAGE_SYM 650 +#define PAGE_CHECKSUM_SYM 651 +#define PARAM_MARKER 652 +#define PARSER_SYM 653 +#define PARSE_VCOL_EXPR_SYM 654 +#define PARTIAL 655 +#define PARTITION_SYM 656 +#define PARTITIONS_SYM 657 +#define PARTITIONING_SYM 658 +#define PASSWORD_SYM 659 +#define PERSISTENT_SYM 660 +#define PHASE_SYM 661 +#define PLUGINS_SYM 662 +#define PLUGIN_SYM 663 +#define POINT_SYM 664 +#define POLYGON 665 +#define PORT_SYM 666 +#define POSITION_SYM 667 +#define PRECISION 668 +#define PREPARE_SYM 669 +#define PRESERVE_SYM 670 +#define PREV_SYM 671 +#define PRIMARY_SYM 672 +#define PRIVILEGES 673 +#define PROCEDURE_SYM 674 +#define PROCESS 675 +#define PROCESSLIST_SYM 676 +#define PROFILE_SYM 677 +#define PROFILES_SYM 678 +#define PROXY_SYM 679 +#define PURGE 680 +#define QUARTER_SYM 681 +#define QUERY_SYM 682 +#define QUICK 683 +#define RANGE_SYM 684 +#define READS_SYM 685 +#define READ_ONLY_SYM 686 +#define READ_SYM 687 +#define READ_WRITE_SYM 688 +#define REAL 689 +#define REBUILD_SYM 690 +#define RECOVER_SYM 691 +#define REDOFILE_SYM 692 +#define REDO_BUFFER_SIZE_SYM 693 +#define REDUNDANT_SYM 694 +#define REFERENCES 695 +#define REGEXP 696 +#define RELAY 697 +#define RELAYLOG_SYM 698 +#define RELAY_LOG_FILE_SYM 699 +#define RELAY_LOG_POS_SYM 700 +#define RELAY_THREAD 701 +#define RELEASE_SYM 702 +#define RELOAD 703 +#define REMOVE_SYM 704 +#define RENAME 705 +#define REORGANIZE_SYM 706 +#define REPAIR 707 +#define REPEATABLE_SYM 708 +#define REPEAT_SYM 709 +#define REPLACE 710 +#define REPLICATION 711 +#define REQUIRE_SYM 712 +#define RESET_SYM 713 +#define RESIGNAL_SYM 714 +#define RESOURCES 715 +#define RESTORE_SYM 716 +#define RESTRICT 717 +#define RESUME_SYM 718 +#define RETURNED_SQLSTATE_SYM 719 +#define RETURNING_SYM 720 +#define RETURNS_SYM 721 +#define RETURN_SYM 722 +#define REVERSE_SYM 723 +#define REVOKE 724 +#define RIGHT 725 +#define ROLE_SYM 726 +#define ROLLBACK_SYM 727 +#define ROLLUP_SYM 728 +#define ROUTINE_SYM 729 +#define ROWS_SYM 730 +#define ROW_FORMAT_SYM 731 +#define ROW_SYM 732 +#define ROW_COUNT_SYM 733 +#define RTREE_SYM 734 +#define SAVEPOINT_SYM 735 +#define SCHEDULE_SYM 736 +#define SCHEMA_NAME_SYM 737 +#define SECOND_MICROSECOND_SYM 738 +#define SECOND_SYM 739 +#define SECURITY_SYM 740 +#define SELECT_SYM 741 +#define SENSITIVE_SYM 742 +#define SEPARATOR_SYM 743 +#define SERIALIZABLE_SYM 744 +#define SERIAL_SYM 745 +#define SESSION_SYM 746 +#define SERVER_SYM 747 +#define SERVER_OPTIONS 748 +#define SET 749 +#define SET_VAR 750 +#define SHARE_SYM 751 +#define SHIFT_LEFT 752 +#define SHIFT_RIGHT 753 +#define SHOW 754 +#define SHUTDOWN 755 +#define SIGNAL_SYM 756 +#define SIGNED_SYM 757 +#define SIMPLE_SYM 758 +#define SLAVE 759 +#define SLAVES 760 +#define SLAVE_POS_SYM 761 +#define SLOW 762 +#define SMALLINT 763 +#define SNAPSHOT_SYM 764 +#define SOCKET_SYM 765 +#define SOFT_SYM 766 +#define SONAME_SYM 767 +#define SOUNDS_SYM 768 +#define SOURCE_SYM 769 +#define SPATIAL_SYM 770 +#define SPECIFIC_SYM 771 +#define SQLEXCEPTION_SYM 772 +#define SQLSTATE_SYM 773 +#define SQLWARNING_SYM 774 +#define SQL_BIG_RESULT 775 +#define SQL_BUFFER_RESULT 776 +#define SQL_CACHE_SYM 777 +#define SQL_CALC_FOUND_ROWS 778 +#define SQL_NO_CACHE_SYM 779 +#define SQL_SMALL_RESULT 780 +#define SQL_SYM 781 +#define SQL_THREAD 782 +#define REF_SYSTEM_ID_SYM 783 +#define SSL_SYM 784 +#define STARTING 785 +#define STARTS_SYM 786 +#define START_SYM 787 +#define STATEMENT_SYM 788 +#define STATS_AUTO_RECALC_SYM 789 +#define STATS_PERSISTENT_SYM 790 +#define STATS_SAMPLE_PAGES_SYM 791 +#define STATUS_SYM 792 +#define STDDEV_SAMP_SYM 793 +#define STD_SYM 794 +#define STOP_SYM 795 +#define STORAGE_SYM 796 +#define STRAIGHT_JOIN 797 +#define STRING_SYM 798 +#define SUBCLASS_ORIGIN_SYM 799 +#define SUBDATE_SYM 800 +#define SUBJECT_SYM 801 +#define SUBPARTITIONS_SYM 802 +#define SUBPARTITION_SYM 803 +#define SUBSTRING 804 +#define SUM_SYM 805 +#define SUPER_SYM 806 +#define SUSPEND_SYM 807 +#define SWAPS_SYM 808 +#define SWITCHES_SYM 809 +#define SYSDATE 810 +#define TABLES 811 +#define TABLESPACE 812 +#define TABLE_REF_PRIORITY 813 +#define TABLE_SYM 814 +#define TABLE_CHECKSUM_SYM 815 +#define TABLE_NAME_SYM 816 +#define TEMPORARY 817 +#define TEMPTABLE_SYM 818 +#define TERMINATED 819 +#define TEXT_STRING 820 +#define TEXT_SYM 821 +#define THAN_SYM 822 +#define THEN_SYM 823 +#define TIMESTAMP 824 +#define TIMESTAMP_ADD 825 +#define TIMESTAMP_DIFF 826 +#define TIME_SYM 827 +#define TINYBLOB 828 +#define TINYINT 829 +#define TINYTEXT 830 +#define TO_SYM 831 +#define TRAILING 832 +#define TRANSACTION_SYM 833 +#define TRANSACTIONAL_SYM 834 +#define TRIGGERS_SYM 835 +#define TRIGGER_SYM 836 +#define TRIM 837 +#define TRUE_SYM 838 +#define TRUNCATE_SYM 839 +#define TYPES_SYM 840 +#define TYPE_SYM 841 +#define UDF_RETURNS_SYM 842 +#define ULONGLONG_NUM 843 +#define UNCOMMITTED_SYM 844 +#define UNDEFINED_SYM 845 +#define UNDERSCORE_CHARSET 846 +#define UNDOFILE_SYM 847 +#define UNDO_BUFFER_SIZE_SYM 848 +#define UNDO_SYM 849 +#define UNICODE_SYM 850 +#define UNINSTALL_SYM 851 +#define UNION_SYM 852 +#define UNIQUE_SYM 853 +#define UNKNOWN_SYM 854 +#define UNLOCK_SYM 855 +#define UNSIGNED 856 +#define UNTIL_SYM 857 +#define UPDATE_SYM 858 +#define UPGRADE_SYM 859 +#define USAGE 860 +#define USER 861 +#define USE_FRM 862 +#define USE_SYM 863 +#define USING 864 +#define UTC_DATE_SYM 865 +#define UTC_TIMESTAMP_SYM 866 +#define UTC_TIME_SYM 867 +#define VALUES 868 +#define VALUE_SYM 869 +#define VARBINARY 870 +#define VARCHAR 871 +#define VARIABLES 872 +#define VARIANCE_SYM 873 +#define VARYING 874 +#define VAR_SAMP_SYM 875 +#define VIA_SYM 876 +#define VIEW_SYM 877 +#define VIRTUAL_SYM 878 +#define WAIT_SYM 879 +#define WARNINGS 880 +#define WEEK_SYM 881 +#define WEIGHT_STRING_SYM 882 +#define WHEN_SYM 883 +#define WHERE 884 +#define WHILE_SYM 885 +#define WITH 886 +#define WITH_CUBE_SYM 887 +#define WITH_ROLLUP_SYM 888 +#define WORK_SYM 889 +#define WRAPPER_SYM 890 +#define WRITE_SYM 891 +#define X509_SYM 892 +#define XA_SYM 893 +#define XML_SYM 894 +#define XOR 895 +#define YEAR_MONTH_SYM 896 +#define YEAR_SYM 897 +#define ZEROFILL 898 +#define IMPOSSIBLE_ACTION 899 +/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE +typedef union YYSTYPE YYSTYPE; +union YYSTYPE { - -/* Line 214 of yacc.c */ -#line 948 "/home/buildbot/git/sql/sql_yacc.yy" +#line 948 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:355 */ int num; ulong ulong_num; @@ -2396,27 +2393,24 @@ enum enum_mysql_timestamp_type date_time_type; DDL_options_st object_ddl_options; - - -/* Line 214 of yacc.c */ -#line 2403 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" -} YYSTYPE; +#line 2397 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:355 */ +}; # define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif -/* Copy the second part of user declarations. */ -/* Line 264 of yacc.c */ -#line 1021 "/home/buildbot/git/sql/sql_yacc.yy" +int MYSQLparse (THD *thd); -bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); +#endif /* !YY_MYSQL_HOME_BUILDBOT_GIT_MKDIST_SQL_SQL_YACC_H_INCLUDED */ +/* Copy the second part of user declarations. */ +#line 1021 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:358 */ + +bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); -/* Line 264 of yacc.c */ -#line 2420 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" +#line 2414 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:358 */ #ifdef short # undef short @@ -2430,11 +2424,8 @@ #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; #else -typedef short int yytype_int8; +typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 @@ -2454,8 +2445,7 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -2466,41 +2456,70 @@ #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(n) (n) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int yyi) +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") #else -static int -YYID (yyi) - int yyi; +# define YY_INITIAL_VALUE(Value) Value #endif -{ - return yyi; -} +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + #if ! defined yyoverflow || YYERROR_VERBOSE @@ -2519,11 +2538,11 @@ # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 # endif # endif # endif @@ -2531,8 +2550,8 @@ # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely @@ -2546,25 +2565,23 @@ # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif -# if (defined __cplusplus && ! defined _STDLIB_H \ +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ -# ifndef _STDLIB_H -# define _STDLIB_H 1 +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@ -2574,7 +2591,7 @@ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@ -2592,79 +2609,85 @@ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (YYID (0)) -# endif -# endif +# define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) #endif +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + /* YYFINAL -- State number of the termination state. */ #define YYFINAL 635 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 66200 +#define YYLAST 66418 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 666 +#define YYNTOKENS 667 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 1028 +#define YYNNTS 1031 /* YYNRULES -- Number of rules. */ -#define YYNRULES 2854 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 4891 +#define YYNRULES 2860 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 4901 -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 898 +#define YYMAXUTOK 899 -#define YYTRANSLATE(YYX) \ +#define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 659, 2, 2, 2, 653, 648, 2, - 656, 657, 651, 650, 658, 649, 664, 652, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 665, 662, - 646, 644, 645, 2, 663, 2, 2, 2, 2, 2, + 2, 2, 2, 660, 2, 2, 2, 654, 649, 2, + 657, 658, 652, 651, 659, 650, 665, 653, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 666, 663, + 647, 645, 646, 2, 664, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 654, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 655, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 660, 647, 661, 655, 2, 2, 2, + 2, 2, 2, 661, 648, 662, 656, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2741,1432 +2764,304 @@ 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, - 635, 636, 637, 638, 639, 640, 641, 642, 643 + 635, 636, 637, 638, 639, 640, 641, 642, 643, 644 }; #if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint16 yyprhs[] = -{ - 0, 0, 3, 5, 6, 11, 14, 15, 17, 19, - 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, - 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, - 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, - 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, - 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, - 121, 123, 125, 127, 129, 131, 133, 135, 139, 141, - 143, 148, 150, 153, 154, 159, 160, 163, 167, 169, - 172, 173, 177, 178, 185, 187, 191, 195, 199, 203, - 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, - 247, 251, 257, 263, 269, 271, 272, 274, 278, 280, - 281, 283, 287, 289, 290, 292, 296, 298, 302, 306, - 310, 314, 318, 322, 326, 327, 329, 331, 332, 340, - 341, 356, 357, 371, 372, 386, 387, 394, 395, 399, - 405, 412, 417, 421, 422, 426, 427, 440, 442, 446, - 449, 452, 455, 458, 461, 464, 467, 468, 482, 483, - 490, 493, 494, 496, 500, 502, 503, 506, 507, 510, - 511, 513, 518, 519, 522, 523, 526, 527, 531, 533, - 534, 537, 538, 541, 544, 547, 550, 553, 557, 561, - 563, 565, 568, 572, 576, 577, 582, 583, 587, 588, - 590, 594, 596, 597, 599, 603, 605, 606, 610, 611, - 613, 617, 619, 622, 623, 625, 627, 629, 630, 634, - 637, 641, 642, 646, 647, 653, 659, 660, 668, 674, - 675, 678, 680, 682, 684, 688, 690, 692, 694, 698, - 699, 701, 703, 705, 707, 710, 712, 716, 718, 720, - 721, 723, 724, 727, 731, 737, 739, 741, 743, 745, - 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, - 767, 771, 776, 777, 779, 781, 785, 787, 791, 795, - 797, 800, 802, 804, 806, 808, 812, 816, 818, 820, - 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, - 842, 844, 848, 849, 852, 854, 856, 858, 860, 862, - 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, - 883, 889, 890, 893, 894, 898, 901, 904, 907, 908, - 915, 918, 919, 922, 924, 926, 930, 931, 932, 933, - 941, 942, 945, 948, 949, 956, 957, 958, 963, 965, - 967, 970, 972, 975, 976, 977, 984, 985, 986, 993, - 994, 997, 998, 1000, 1001, 1008, 1009, 1013, 1014, 1020, - 1021, 1026, 1030, 1031, 1038, 1039, 1046, 1048, 1049, 1050, - 1057, 1058, 1065, 1066, 1073, 1074, 1079, 1080, 1085, 1086, - 1091, 1093, 1095, 1097, 1099, 1101, 1104, 1109, 1115, 1116, - 1121, 1126, 1131, 1135, 1139, 1142, 1145, 1146, 1149, 1151, - 1154, 1158, 1160, 1162, 1164, 1166, 1168, 1171, 1175, 1177, - 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1198, - 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1219, 1223, - 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1244, - 1248, 1250, 1252, 1254, 1257, 1260, 1263, 1265, 1267, 1269, - 1271, 1274, 1278, 1282, 1286, 1290, 1294, 1298, 1302, 1306, - 1311, 1312, 1314, 1316, 1318, 1320, 1322, 1323, 1331, 1335, - 1336, 1342, 1344, 1347, 1352, 1353, 1354, 1360, 1361, 1369, - 1371, 1372, 1374, 1375, 1380, 1381, 1382, 1386, 1392, 1399, - 1400, 1405, 1408, 1411, 1414, 1417, 1418, 1420, 1421, 1425, - 1426, 1428, 1430, 1434, 1436, 1441, 1447, 1453, 1454, 1457, - 1458, 1459, 1467, 1468, 1479, 1481, 1485, 1487, 1489, 1490, - 1493, 1494, 1498, 1500, 1504, 1505, 1512, 1514, 1515, 1516, - 1522, 1523, 1528, 1530, 1532, 1534, 1538, 1540, 1544, 1545, - 1546, 1552, 1554, 1558, 1560, 1562, 1563, 1567, 1569, 1573, - 1574, 1579, 1581, 1582, 1584, 1587, 1589, 1593, 1598, 1602, - 1606, 1610, 1614, 1619, 1624, 1628, 1629, 1630, 1637, 1638, - 1640, 1641, 1643, 1645, 1648, 1650, 1652, 1653, 1657, 1658, - 1662, 1664, 1668, 1669, 1671, 1673, 1676, 1678, 1681, 1685, - 1689, 1693, 1697, 1701, 1705, 1709, 1713, 1717, 1721, 1725, - 1729, 1733, 1737, 1741, 1745, 1749, 1753, 1757, 1761, 1765, - 1766, 1773, 1775, 1777, 1781, 1786, 1791, 1794, 1797, 1800, - 1804, 1808, 1812, 1816, 1820, 1824, 1828, 1833, 1838, 1840, - 1842, 1844, 1846, 1848, 1850, 1852, 1854, 1856, 1858, 1860, - 1862, 1864, 1866, 1868, 1870, 1872, 1874, 1878, 1880, 1882, - 1885, 1888, 1889, 1899, 1900, 1911, 1912, 1922, 1923, 1933, - 1934, 1945, 1946, 1958, 1959, 1970, 1973, 1974, 1976, 1981, - 1982, 1984, 1987, 1988, 1989, 1995, 1997, 2005, 2006, 2009, - 2010, 2012, 2014, 2015, 2017, 2020, 2022, 2024, 2027, 2030, - 2035, 2039, 2043, 2047, 2051, 2053, 2056, 2058, 2060, 2064, - 2067, 2071, 2074, 2077, 2079, 2083, 2087, 2090, 2094, 2096, - 2099, 2102, 2105, 2107, 2110, 2114, 2116, 2118, 2121, 2125, - 2128, 2132, 2135, 2138, 2142, 2146, 2150, 2156, 2162, 2165, - 2167, 2169, 2171, 2173, 2175, 2177, 2179, 2181, 2183, 2185, - 2187, 2190, 2193, 2195, 2198, 2200, 2203, 2207, 2210, 2212, - 2214, 2216, 2218, 2220, 2222, 2224, 2227, 2228, 2232, 2233, - 2235, 2237, 2243, 2244, 2246, 2249, 2251, 2253, 2255, 2257, - 2261, 2265, 2269, 2273, 2274, 2276, 2277, 2279, 2280, 2282, - 2285, 2287, 2289, 2292, 2295, 2300, 2302, 2306, 2309, 2311, - 2314, 2317, 2320, 2324, 2328, 2332, 2336, 2339, 2342, 2344, - 2347, 2349, 2351, 2353, 2355, 2357, 2358, 2361, 2363, 2365, - 2367, 2369, 2371, 2372, 2375, 2377, 2379, 2380, 2382, 2385, - 2387, 2389, 2390, 2392, 2395, 2397, 2400, 2401, 2403, 2404, - 2409, 2411, 2413, 2415, 2416, 2418, 2421, 2423, 2425, 2428, - 2430, 2434, 2438, 2440, 2442, 2443, 2446, 2447, 2449, 2455, - 2456, 2460, 2464, 2466, 2467, 2470, 2473, 2476, 2477, 2481, - 2485, 2492, 2499, 2501, 2503, 2506, 2509, 2512, 2515, 2518, - 2520, 2522, 2523, 2525, 2527, 2529, 2531, 2532, 2534, 2536, - 2538, 2539, 2541, 2542, 2544, 2545, 2547, 2549, 2552, 2554, - 2557, 2559, 2562, 2563, 2566, 2567, 2570, 2573, 2576, 2579, - 2583, 2586, 2590, 2594, 2598, 2602, 2604, 2606, 2608, 2610, - 2614, 2616, 2618, 2620, 2625, 2628, 2630, 2635, 2636, 2638, - 2639, 2642, 2644, 2648, 2649, 2650, 2658, 2659, 2665, 2673, - 2674, 2680, 2681, 2687, 2688, 2694, 2695, 2700, 2701, 2713, - 2717, 2722, 2726, 2730, 2731, 2740, 2741, 2745, 2747, 2752, - 2753, 2757, 2758, 2761, 2762, 2764, 2765, 2768, 2771, 2774, - 2777, 2779, 2781, 2783, 2788, 2793, 2794, 2801, 2806, 2807, - 2813, 2814, 2821, 2826, 2830, 2832, 2840, 2843, 2845, 2847, - 2848, 2855, 2856, 2860, 2863, 2864, 2870, 2871, 2872, 2879, - 2881, 2885, 2887, 2889, 2893, 2897, 2901, 2904, 2909, 2916, - 2922, 2928, 2934, 2938, 2943, 2946, 2949, 2956, 2962, 2966, - 2972, 2974, 2976, 2978, 2980, 2982, 2983, 2985, 2987, 2990, - 2993, 2997, 3001, 3005, 3009, 3010, 3012, 3013, 3015, 3016, - 3019, 3020, 3022, 3025, 3027, 3029, 3031, 3032, 3034, 3036, - 3037, 3040, 3042, 3043, 3045, 3047, 3049, 3050, 3057, 3058, - 3064, 3069, 3074, 3078, 3079, 3081, 3083, 3087, 3091, 3094, - 3097, 3098, 3101, 3103, 3107, 3108, 3110, 3112, 3113, 3116, - 3121, 3123, 3127, 3128, 3134, 3135, 3137, 3139, 3143, 3144, - 3149, 3150, 3155, 3156, 3158, 3160, 3163, 3165, 3167, 3169, - 3170, 3173, 3174, 3180, 3182, 3186, 3189, 3190, 3194, 3196, - 3201, 3203, 3204, 3209, 3211, 3212, 3217, 3218, 3220, 3224, - 3225, 3227, 3231, 3233, 3235, 3238, 3242, 3243, 3248, 3249, - 3253, 3254, 3256, 3258, 3261, 3263, 3265, 3267, 3269, 3271, - 3274, 3275, 3278, 3279, 3285, 3286, 3288, 3290, 3291, 3296, - 3301, 3305, 3311, 3313, 3317, 3321, 3322, 3329, 3331, 3333, - 3335, 3339, 3342, 3346, 3348, 3350, 3351, 3358, 3360, 3362, - 3364, 3368, 3372, 3377, 3378, 3385, 3386, 3389, 3390, 3395, - 3396, 3399, 3401, 3404, 3409, 3410, 3414, 3418, 3419, 3424, - 3428, 3429, 3433, 3438, 3442, 3454, 3455, 3459, 3468, 3471, - 3472, 3474, 3476, 3478, 3479, 3481, 3484, 3486, 3488, 3490, - 3492, 3493, 3496, 3501, 3505, 3507, 3509, 3513, 3518, 3519, - 3520, 3521, 3522, 3525, 3528, 3530, 3532, 3533, 3536, 3540, - 3541, 3544, 3548, 3549, 3552, 3556, 3560, 3564, 3567, 3571, - 3576, 3580, 3585, 3589, 3594, 3596, 3600, 3605, 3609, 3613, - 3620, 3622, 3628, 3635, 3641, 3649, 3656, 3665, 3671, 3678, - 3683, 3688, 3694, 3698, 3703, 3705, 3709, 3713, 3717, 3721, - 3725, 3729, 3735, 3741, 3745, 3749, 3753, 3757, 3761, 3765, - 3767, 3769, 3771, 3773, 3775, 3777, 3779, 3781, 3783, 3785, - 3787, 3789, 3791, 3793, 3795, 3797, 3799, 3800, 3803, 3805, - 3808, 3810, 3812, 3814, 3817, 3818, 3822, 3824, 3826, 3829, - 3832, 3837, 3839, 3843, 3845, 3847, 3849, 3851, 3853, 3857, - 3859, 3861, 3863, 3865, 3869, 3872, 3875, 3878, 3881, 3885, - 3889, 3895, 3902, 3907, 3912, 3920, 3923, 3930, 3936, 3943, - 3950, 3955, 3960, 3966, 3971, 3978, 3981, 3984, 3989, 3994, - 3999, 4010, 4017, 4026, 4033, 4038, 4043, 4050, 4055, 4060, - 4065, 4072, 4077, 4085, 4093, 4101, 4108, 4115, 4122, 4129, - 4133, 4138, 4145, 4154, 4157, 4160, 4169, 4178, 4185, 4192, - 4195, 4202, 4209, 4218, 4227, 4234, 4243, 4250, 4253, 4262, - 4271, 4274, 4277, 4280, 4287, 4294, 4299, 4304, 4313, 4318, - 4323, 4328, 4333, 4337, 4346, 4353, 4362, 4367, 4372, 4379, - 4384, 4389, 4394, 4401, 4410, 4415, 4419, 4426, 4431, 4438, - 4444, 4453, 4461, 4472, 4474, 4481, 4486, 4491, 4496, 4501, - 4506, 4513, 4518, 4519, 4525, 4532, 4535, 4539, 4540, 4545, - 4546, 4550, 4551, 4553, 4555, 4559, 4564, 4569, 4575, 4580, - 4585, 4590, 4596, 4601, 4602, 4603, 4611, 4616, 4622, 4627, - 4633, 4638, 4643, 4648, 4653, 4658, 4664, 4665, 4674, 4675, - 4679, 4683, 4685, 4690, 4691, 4693, 4694, 4697, 4698, 4699, - 4704, 4709, 4712, 4713, 4717, 4720, 4721, 4726, 4729, 4731, - 4733, 4736, 4738, 4741, 4743, 4746, 4749, 4752, 4753, 4757, - 4758, 4760, 4762, 4766, 4768, 4772, 4774, 4778, 4779, 4781, - 4782, 4785, 4790, 4796, 4798, 4800, 4802, 4804, 4809, 4811, - 4815, 4819, 4820, 4827, 4828, 4837, 4842, 4843, 4852, 4853, - 4864, 4871, 4872, 4881, 4882, 4893, 4900, 4902, 4905, 4907, - 4909, 4912, 4913, 4915, 4921, 4922, 4928, 4932, 4938, 4941, - 4942, 4948, 4950, 4951, 4955, 4956, 4960, 4961, 4962, 4968, - 4969, 4971, 4972, 4974, 4975, 4978, 4982, 4986, 4988, 4990, - 4991, 4999, 5000, 5008, 5010, 5013, 5014, 5015, 5018, 5019, - 5022, 5023, 5025, 5027, 5029, 5031, 5035, 5037, 5041, 5043, - 5045, 5047, 5049, 5051, 5053, 5055, 5057, 5059, 5061, 5063, - 5065, 5067, 5069, 5071, 5073, 5075, 5077, 5079, 5081, 5083, - 5085, 5087, 5089, 5091, 5092, 5094, 5096, 5097, 5100, 5101, - 5103, 5104, 5105, 5109, 5110, 5111, 5115, 5118, 5119, 5120, - 5125, 5130, 5133, 5134, 5136, 5138, 5142, 5146, 5148, 5151, - 5152, 5154, 5155, 5160, 5165, 5168, 5169, 5171, 5173, 5174, - 5176, 5178, 5181, 5187, 5192, 5194, 5198, 5202, 5204, 5206, - 5208, 5210, 5212, 5214, 5215, 5218, 5222, 5227, 5229, 5232, - 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, 5253, - 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, 5271, 5273, - 5275, 5277, 5279, 5281, 5283, 5285, 5287, 5288, 5289, 5296, - 5297, 5299, 5303, 5305, 5309, 5310, 5313, 5317, 5319, 5321, - 5324, 5326, 5327, 5329, 5330, 5334, 5335, 5336, 5344, 5347, - 5349, 5350, 5354, 5355, 5363, 5364, 5372, 5377, 5384, 5389, - 5394, 5400, 5406, 5407, 5414, 5419, 5424, 5430, 5437, 5442, - 5444, 5448, 5450, 5453, 5455, 5459, 5461, 5462, 5465, 5466, - 5469, 5470, 5472, 5473, 5474, 5483, 5484, 5485, 5492, 5493, - 5495, 5497, 5499, 5501, 5503, 5506, 5508, 5510, 5512, 5516, - 5521, 5522, 5526, 5530, 5532, 5535, 5538, 5539, 5543, 5544, - 5550, 5554, 5556, 5560, 5562, 5566, 5568, 5570, 5571, 5573, - 5574, 5579, 5580, 5582, 5586, 5588, 5590, 5592, 5593, 5594, - 5601, 5602, 5603, 5615, 5619, 5621, 5625, 5629, 5631, 5635, - 5636, 5638, 5639, 5644, 5645, 5646, 5656, 5657, 5663, 5664, - 5671, 5672, 5675, 5677, 5681, 5684, 5689, 5690, 5693, 5694, - 5697, 5699, 5701, 5703, 5704, 5709, 5710, 5712, 5713, 5715, - 5717, 5721, 5723, 5725, 5728, 5731, 5734, 5736, 5738, 5740, - 5742, 5743, 5747, 5748, 5752, 5755, 5760, 5765, 5769, 5774, - 5779, 5781, 5785, 5789, 5793, 5797, 5804, 5807, 5810, 5811, - 5818, 5819, 5827, 5833, 5836, 5838, 5840, 5842, 5848, 5854, - 5857, 5860, 5862, 5867, 5871, 5874, 5878, 5881, 5884, 5886, - 5891, 5896, 5900, 5904, 5907, 5911, 5914, 5918, 5922, 5926, - 5930, 5934, 5938, 5942, 5946, 5950, 5954, 5958, 5960, 5962, - 5964, 5966, 5968, 5969, 5971, 5972, 5975, 5976, 5978, 5980, - 5982, 5983, 5986, 5987, 5990, 5991, 5995, 5999, 6000, 6005, - 6006, 6011, 6013, 6015, 6017, 6019, 6021, 6023, 6025, 6029, - 6031, 6033, 6035, 6036, 6040, 6041, 6043, 6045, 6046, 6051, - 6052, 6057, 6059, 6060, 6062, 6067, 6068, 6072, 6076, 6078, - 6081, 6084, 6087, 6090, 6093, 6097, 6100, 6102, 6104, 6106, - 6108, 6111, 6113, 6115, 6117, 6120, 6121, 6123, 6124, 6128, - 6129, 6133, 6137, 6139, 6140, 6145, 6146, 6150, 6153, 6154, - 6156, 6157, 6160, 6161, 6165, 6169, 6172, 6175, 6176, 6182, - 6183, 6185, 6187, 6188, 6190, 6192, 6195, 6197, 6200, 6202, - 6205, 6206, 6207, 6208, 6209, 6232, 6234, 6236, 6237, 6239, - 6240, 6242, 6244, 6245, 6247, 6249, 6250, 6253, 6256, 6258, - 6262, 6267, 6271, 6275, 6276, 6279, 6282, 6284, 6288, 6292, - 6293, 6298, 6299, 6303, 6305, 6307, 6308, 6312, 6315, 6319, - 6321, 6323, 6326, 6327, 6330, 6334, 6336, 6342, 6344, 6346, - 6349, 6352, 6354, 6356, 6358, 6360, 6362, 6364, 6366, 6369, - 6372, 6374, 6376, 6378, 6380, 6382, 6384, 6386, 6388, 6390, - 6393, 6395, 6397, 6399, 6401, 6403, 6406, 6409, 6412, 6414, - 6416, 6420, 6426, 6428, 6430, 6432, 6434, 6436, 6440, 6445, - 6451, 6453, 6459, 6463, 6466, 6468, 6472, 6475, 6478, 6483, - 6485, 6487, 6489, 6491, 6493, 6495, 6497, 6499, 6501, 6503, - 6505, 6507, 6509, 6511, 6515, 6518, 6520, 6522, 6524, 6526, - 6528, 6530, 6532, 6534, 6536, 6538, 6540, 6542, 6544, 6546, - 6548, 6550, 6552, 6554, 6556, 6558, 6560, 6562, 6564, 6566, - 6568, 6570, 6572, 6574, 6576, 6578, 6580, 6582, 6584, 6586, - 6588, 6590, 6592, 6594, 6596, 6598, 6600, 6602, 6604, 6606, - 6608, 6610, 6612, 6614, 6616, 6618, 6620, 6622, 6624, 6626, - 6628, 6630, 6632, 6634, 6636, 6638, 6640, 6642, 6644, 6646, - 6648, 6650, 6652, 6654, 6656, 6658, 6660, 6662, 6664, 6666, - 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 6686, - 6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, - 6708, 6710, 6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, - 6728, 6730, 6732, 6734, 6736, 6738, 6740, 6742, 6744, 6746, - 6748, 6750, 6752, 6754, 6756, 6758, 6760, 6762, 6764, 6766, - 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, 6784, 6786, - 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806, - 6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, - 6828, 6830, 6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, - 6848, 6850, 6852, 6854, 6856, 6858, 6860, 6862, 6864, 6866, - 6868, 6870, 6872, 6874, 6876, 6878, 6880, 6882, 6884, 6886, - 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902, 6904, 6906, - 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926, - 6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, - 6948, 6950, 6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, - 6968, 6970, 6972, 6974, 6976, 6978, 6980, 6982, 6984, 6986, - 6988, 6990, 6992, 6994, 6996, 6998, 7000, 7002, 7004, 7006, - 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022, 7024, 7026, - 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046, - 7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, - 7068, 7070, 7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, - 7088, 7090, 7092, 7094, 7096, 7098, 7100, 7102, 7104, 7106, - 7108, 7110, 7112, 7114, 7116, 7118, 7120, 7122, 7124, 7126, - 7128, 7130, 7132, 7134, 7136, 7138, 7140, 7142, 7144, 7146, - 7148, 7150, 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, - 7168, 7170, 7172, 7174, 7176, 7178, 7180, 7182, 7184, 7186, - 7188, 7190, 7192, 7194, 7196, 7198, 7200, 7202, 7204, 7206, - 7208, 7210, 7212, 7214, 7216, 7218, 7220, 7222, 7224, 7226, - 7228, 7230, 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246, - 7248, 7250, 7252, 7254, 7256, 7258, 7260, 7262, 7264, 7265, - 7269, 7270, 7271, 7279, 7281, 7285, 7286, 7290, 7291, 7295, - 7296, 7300, 7301, 7305, 7308, 7309, 7312, 7313, 7316, 7317, - 7322, 7323, 7327, 7329, 7331, 7333, 7335, 7336, 7338, 7340, - 7342, 7343, 7346, 7349, 7352, 7356, 7360, 7365, 7372, 7375, - 7379, 7383, 7387, 7393, 7396, 7400, 7402, 7406, 7410, 7412, - 7414, 7418, 7422, 7424, 7428, 7431, 7434, 7437, 7440, 7443, - 7445, 7447, 7451, 7453, 7458, 7463, 7465, 7467, 7469, 7471, - 7473, 7474, 7479, 7481, 7483, 7485, 7489, 7493, 7495, 7497, - 7500, 7503, 7506, 7507, 7511, 7516, 7520, 7521, 7529, 7531, - 7534, 7536, 7538, 7540, 7542, 7544, 7546, 7547, 7553, 7555, - 7557, 7559, 7561, 7563, 7567, 7574, 7581, 7588, 7596, 7602, - 7606, 7611, 7613, 7617, 7626, 7635, 7644, 7651, 7656, 7657, - 7661, 7662, 7666, 7668, 7672, 7675, 7677, 7679, 7680, 7682, - 7684, 7687, 7688, 7690, 7692, 7696, 7697, 7701, 7702, 7706, - 7707, 7711, 7712, 7716, 7718, 7720, 7722, 7724, 7726, 7728, - 7730, 7732, 7734, 7736, 7738, 7741, 7744, 7746, 7750, 7753, - 7756, 7759, 7762, 7765, 7768, 7771, 7774, 7776, 7778, 7781, - 7782, 7784, 7788, 7790, 7793, 7796, 7799, 7801, 7805, 7809, - 7811, 7813, 7817, 7819, 7823, 7825, 7829, 7831, 7833, 7835, - 7837, 7842, 7848, 7853, 7860, 7862, 7863, 7867, 7871, 7873, - 7875, 7876, 7879, 7882, 7885, 7888, 7889, 7892, 7893, 7897, - 7900, 7902, 7905, 7908, 7911, 7914, 7917, 7920, 7921, 7925, - 7927, 7928, 7930, 7931, 7933, 7934, 7938, 7941, 7942, 7944, - 7947, 7948, 7950, 7955, 7960, 7966, 7969, 7973, 7974, 7976, - 7977, 7982, 7984, 7986, 7987, 7989, 7990, 7993, 7996, 7998, - 7999, 8001, 8003, 8007, 8012, 8014, 8015, 8021, 8025, 8026, - 8027, 8028, 8030, 8033, 8035, 8037, 8039, 8041, 8043, 8045, - 8047, 8049, 8051, 8054, 8057, 8061, 8063, 8065, 8067, 8069, - 8071, 8073, 8075, 8077, 8079, 8081, 8083, 8085, 8087, 8088, - 8092, 8096, 8100, 8104, 8105, 8109, 8113, 8114, 8123, 8124, - 8128, 8130, 8134, 8135, 8139, 8142, 8147, 8148, 8152, 8157, - 8162, 8163, 8164, 8165, 8166, 8185, 8188, 8190, 8198, 8199, - 8200, 8201, 8202, 8203, 8219, 8220, 8221, 8222, 8223, 8236, - 8241, 8246, 8250, 8255, 8259, 8262, 8264, 8268, 8274, 8276, - 8278, 8279, 8281, 8283, 8284, 8287, 8288, 8289, 8293, 8294, - 8297, 8303, 8307, 8311, 8315 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int16 yyrhs[] = -{ - 667, 0, -1, 163, -1, -1, 670, 668, 662, 669, - -1, 670, 163, -1, -1, 163, -1, 671, -1, 1619, - -1, 1621, -1, 1064, -1, 1133, -1, 1448, -1, 1146, - -1, 727, -1, 683, -1, 1149, -1, 1122, -1, 1627, - -1, 696, -1, 672, -1, 1409, -1, 1443, -1, 1359, - -1, 1361, -1, 676, -1, 1452, -1, 763, -1, 1585, - -1, 1575, -1, 681, -1, 1373, -1, 1691, -1, 1693, - -1, 1163, -1, 1475, -1, 1482, -1, 1567, -1, 1155, - -1, 983, -1, 891, -1, 1170, -1, 674, -1, 1471, - -1, 1630, -1, 1158, -1, 1127, -1, 1376, -1, 1463, - -1, 762, -1, 1582, -1, 1628, -1, 1629, -1, 1182, - -1, 1536, -1, 755, -1, 1429, -1, 1480, -1, 1109, - -1, 1112, -1, 1422, -1, 1692, -1, 1573, -1, 1401, - -1, 1481, -1, 1683, -1, 673, 413, 1528, -1, 128, - -1, 151, -1, 413, 1528, 200, 675, -1, 1525, -1, - 663, 1530, -1, -1, 177, 1528, 677, 678, -1, -1, - 608, 679, -1, 679, 658, 680, -1, 680, -1, 663, - 1530, -1, -1, 220, 682, 1530, -1, -1, 60, 312, - 694, 575, 684, 685, -1, 686, -1, 685, 658, 686, - -1, 297, 644, 1525, -1, 313, 644, 1525, -1, 300, - 644, 1525, -1, 301, 644, 1336, -1, 295, 644, 1336, - -1, 310, 644, 1336, -1, 304, 644, 1525, -1, 303, - 644, 1525, -1, 305, 644, 1525, -1, 306, 644, 1525, - -1, 309, 644, 1525, -1, 311, 644, 1336, -1, 307, - 644, 1525, -1, 308, 644, 1525, -1, 315, 644, 1512, - -1, 237, 644, 656, 687, 657, -1, 149, 644, 656, - 689, 657, -1, 235, 644, 656, 691, 657, -1, 693, - -1, -1, 688, -1, 687, 658, 688, -1, 1336, -1, - -1, 690, -1, 689, 658, 690, -1, 1336, -1, -1, - 692, -1, 691, 658, 692, -1, 1336, -1, 298, 644, - 1525, -1, 299, 644, 1338, -1, 443, 644, 1525, -1, - 444, 644, 1336, -1, 314, 644, 111, -1, 314, 644, - 505, -1, 314, 644, 366, -1, -1, 695, -1, 1525, - -1, -1, 945, 1372, 558, 944, 1521, 697, 879, -1, - -1, 945, 1042, 240, 944, 1528, 1052, 376, 1521, 698, - 656, 1059, 657, 1045, 1096, -1, -1, 945, 1043, 240, - 944, 1528, 376, 1521, 699, 656, 1059, 657, 1046, 1096, - -1, -1, 945, 1044, 240, 944, 1528, 376, 1521, 700, - 656, 1059, 657, 1047, 1096, -1, -1, 945, 115, 944, - 1528, 701, 940, -1, -1, 945, 702, 1649, -1, 945, - 605, 944, 720, 1606, -1, 945, 470, 944, 720, 1589, - 1587, -1, 104, 287, 214, 842, -1, 104, 556, 839, - -1, -1, 945, 703, 704, -1, -1, 491, 944, 1530, - 705, 196, 118, 634, 1530, 382, 656, 706, 657, -1, - 707, -1, 706, 658, 707, -1, 605, 1525, -1, 224, - 1525, -1, 115, 1525, -1, 392, 1525, -1, 403, 1525, - -1, 509, 1525, -1, 410, 1336, -1, -1, 1204, 173, - 944, 721, 709, 376, 480, 710, 715, 712, 717, 150, - 718, -1, -1, 174, 1210, 1306, 711, 713, 714, -1, - 24, 1210, -1, -1, 159, -1, 143, 376, 503, -1, - 143, -1, -1, 530, 1210, -1, -1, 162, 1210, -1, - -1, 716, -1, 376, 87, 1622, 414, -1, -1, 83, - 1525, -1, -1, 719, 776, -1, -1, 1528, 664, 1528, - -1, 1528, -1, -1, 722, 724, -1, -1, 723, 725, - -1, 83, 1525, -1, 265, 525, -1, 366, 525, -1, - 97, 525, -1, 429, 525, 118, -1, 341, 525, 118, - -1, 726, -1, 724, -1, 1622, 140, -1, 525, 484, - 133, -1, 525, 484, 252, -1, -1, 53, 721, 728, - 729, -1, -1, 656, 730, 657, -1, -1, 731, -1, - 731, 658, 1210, -1, 1210, -1, -1, 733, -1, 733, - 658, 734, -1, 734, -1, -1, 1528, 735, 1005, -1, - -1, 737, -1, 737, 658, 738, -1, 738, -1, 739, - 734, -1, -1, 253, -1, 391, -1, 244, -1, -1, - 740, 776, 662, -1, 776, 662, -1, 741, 776, 662, - -1, -1, 742, 743, 662, -1, -1, 131, 774, 744, - 1005, 775, -1, 131, 1528, 90, 197, 751, -1, -1, - 131, 748, 216, 197, 745, 749, 776, -1, 131, 1528, - 112, 197, 746, -1, -1, 747, 1182, -1, 179, -1, - 99, -1, 750, -1, 749, 658, 750, -1, 754, -1, - 1336, -1, 752, -1, 517, 753, 1526, -1, -1, 613, - -1, 751, -1, 1528, -1, 518, -1, 1216, 199, -1, - 516, -1, 500, 756, 758, -1, 1528, -1, 752, -1, - -1, 756, -1, -1, 493, 759, -1, 761, 644, 760, - -1, 759, 658, 761, 644, 760, -1, 1511, -1, 1242, - -1, 1517, -1, 68, -1, 543, -1, 94, -1, 96, - -1, 95, -1, 58, -1, 481, -1, 560, -1, 82, - -1, 113, -1, 332, -1, 350, -1, 458, 757, 758, - -1, 210, 764, 141, 765, -1, -1, 108, -1, 766, - -1, 90, 770, 771, -1, 767, -1, 766, 658, 767, - -1, 768, 644, 769, -1, 1528, -1, 663, 1530, -1, - 371, -1, 477, -1, 760, -1, 772, -1, 771, 658, - 772, -1, 768, 644, 773, -1, 68, -1, 543, -1, - 94, -1, 96, -1, 95, -1, 58, -1, 481, -1, - 560, -1, 82, -1, 113, -1, 332, -1, 350, -1, - 463, -1, 1528, -1, 774, 658, 1528, -1, -1, 132, - 1210, -1, 780, -1, 782, -1, 812, -1, 814, -1, - 827, -1, 784, -1, 785, -1, 786, -1, 787, -1, - 789, -1, 777, -1, 778, -1, 797, -1, 816, -1, - 831, -1, -1, 234, 779, 792, 161, 234, -1, -1, - 781, 671, -1, -1, 466, 783, 1210, -1, 271, 1529, - -1, 259, 1529, -1, 380, 1528, -1, -1, 188, 790, - 1528, 250, 788, 791, -1, 70, 1528, -1, -1, 360, - 200, -1, 200, -1, 1528, -1, 791, 658, 1528, -1, - -1, -1, -1, 793, 1210, 567, 794, 741, 795, 796, - -1, -1, 158, 792, -1, 157, 741, -1, -1, 56, - 798, 799, 810, 161, 56, -1, -1, -1, 800, 1210, - 801, 802, -1, 803, -1, 804, -1, 802, 804, -1, - 807, -1, 803, 807, -1, -1, -1, 627, 805, 1210, - 806, 567, 741, -1, -1, -1, 627, 808, 1210, 809, - 567, 741, -1, -1, 157, 741, -1, -1, 1529, -1, - -1, 1529, 665, 34, 813, 818, 811, -1, -1, 34, - 815, 818, -1, -1, 34, 1216, 25, 817, 818, -1, - -1, 819, 742, 740, 161, -1, 741, 161, 293, -1, - -1, 1210, 150, 822, 741, 161, 629, -1, -1, 741, - 601, 824, 1210, 161, 453, -1, 811, -1, -1, -1, - 1529, 665, 293, 828, 820, 825, -1, -1, 1529, 665, - 629, 829, 821, 825, -1, -1, 1529, 665, 453, 830, - 823, 825, -1, -1, 293, 832, 820, 826, -1, -1, - 629, 833, 821, 826, -1, -1, 453, 834, 823, 826, - -1, 33, -1, 9, -1, 246, -1, 602, -1, 136, - -1, 864, 866, -1, 864, 60, 861, 845, -1, 864, - 6, 861, 840, 849, -1, -1, 607, 287, 214, 1528, - -1, 864, 6, 861, 852, -1, 864, 151, 861, 852, - -1, 865, 844, 855, -1, 865, 844, 858, -1, 6, - 862, -1, 6, 863, -1, -1, 846, 847, -1, 848, - -1, 847, 848, -1, 847, 658, 848, -1, 867, -1, - 868, -1, 869, -1, 850, -1, 851, -1, 850, 851, - -1, 850, 658, 851, -1, 867, -1, 868, -1, 869, - -1, 870, -1, 873, -1, 875, -1, 877, -1, 874, - -1, 853, -1, 854, -1, 853, 854, -1, 853, 658, - 854, -1, 867, -1, 868, -1, 869, -1, 875, -1, - 877, -1, 856, -1, 857, -1, 856, 857, -1, 856, - 658, 857, -1, 867, -1, 871, -1, 872, -1, 873, - -1, 875, -1, 877, -1, 874, -1, 859, -1, 860, - -1, 859, 860, -1, 859, 658, 860, -1, 867, -1, - 875, -1, 877, -1, 117, 1525, -1, 591, 1525, -1, - 436, 1525, -1, 1528, -1, 1528, -1, 430, -1, 432, - -1, 364, 4, -1, 242, 1393, 878, -1, 27, 1393, - 878, -1, 320, 1393, 878, -1, 183, 1393, 878, -1, - 592, 1393, 878, -1, 437, 1393, 878, -1, 361, 1393, - 1337, -1, 83, 1393, 1525, -1, 1436, 165, 1393, 953, - -1, -1, 877, -1, 623, -1, 367, -1, 1339, -1, - 1524, -1, -1, 656, 958, 657, 880, 946, 886, 883, - -1, 946, 886, 883, -1, -1, 656, 936, 657, 881, - 1634, -1, 882, -1, 276, 1521, -1, 656, 276, 1521, - 657, -1, -1, -1, 1490, 939, 936, 884, 1631, -1, - -1, 1490, 939, 656, 936, 657, 885, 1634, -1, 887, - -1, -1, 888, -1, -1, 400, 890, 889, 893, -1, - -1, -1, 400, 892, 893, -1, 50, 894, 904, 905, - 912, -1, 896, 263, 897, 656, 898, 657, -1, -1, - 896, 218, 895, 902, -1, 428, 902, -1, 428, 901, - -1, 281, 902, -1, 281, 901, -1, -1, 278, -1, - -1, 12, 644, 1337, -1, -1, 899, -1, 900, -1, - 899, 658, 900, -1, 1528, -1, 75, 656, 898, 657, - -1, 656, 1204, 910, 1205, 657, -1, 656, 1204, 910, - 1205, 657, -1, -1, 401, 1337, -1, -1, -1, 547, - 50, 896, 218, 903, 906, 911, -1, -1, 547, 50, - 896, 263, 897, 656, 908, 657, 907, 911, -1, 909, - -1, 908, 658, 909, -1, 1528, -1, 1213, -1, -1, - 546, 1337, -1, -1, 656, 913, 657, -1, 914, -1, - 913, 658, 914, -1, -1, 400, 915, 916, 917, 933, - 928, -1, 1528, -1, -1, -1, 612, 273, 566, 918, - 920, -1, -1, 612, 253, 919, 921, -1, 325, -1, - 923, -1, 923, -1, 656, 922, 657, -1, 923, -1, - 922, 658, 923, -1, -1, -1, 656, 924, 926, 925, - 657, -1, 927, -1, 926, 658, 927, -1, 325, -1, - 1213, -1, -1, 656, 929, 657, -1, 930, -1, 929, - 658, 930, -1, -1, 547, 931, 932, 933, -1, 1530, - -1, -1, 934, -1, 934, 935, -1, 935, -1, 556, - 1393, 1530, -1, 1436, 165, 1393, 953, -1, 91, 1393, - 1525, -1, 361, 1393, 1337, -1, 319, 1393, 1339, -1, - 338, 1393, 1339, -1, 118, 142, 1393, 1525, -1, 240, - 142, 1393, 1525, -1, 83, 1393, 1525, -1, -1, -1, - 485, 937, 1197, 1201, 938, 1193, -1, -1, 20, -1, - -1, 941, -1, 942, -1, 941, 942, -1, 952, -1, - 951, -1, -1, 234, 1216, 178, -1, -1, 234, 1216, - 178, -1, 104, -1, 104, 388, 454, -1, -1, 948, - -1, 949, -1, 949, 947, -1, 949, -1, 949, 948, - -1, 949, 658, 948, -1, 165, 1393, 953, -1, 319, - 1393, 1338, -1, 338, 1393, 1338, -1, 30, 1393, 1336, - -1, 403, 1393, 1525, -1, 83, 1393, 1525, -1, 28, - 1393, 1338, -1, 393, 1393, 1336, -1, 393, 1393, 132, - -1, 533, 1393, 1336, -1, 533, 1393, 132, -1, 534, - 1393, 1336, -1, 534, 1393, 132, -1, 535, 1393, 1336, - -1, 535, 1393, 132, -1, 65, 1393, 1336, -1, 559, - 1393, 1336, -1, 395, 1393, 1342, -1, 135, 1393, 1336, - -1, 475, 1393, 955, -1, -1, 596, 1393, 950, 656, - 1461, 657, -1, 951, -1, 952, -1, 247, 1393, 956, - -1, 118, 142, 1393, 1525, -1, 240, 142, 1393, 1525, - -1, 556, 1528, -1, 540, 145, -1, 540, 330, -1, - 91, 1393, 1525, -1, 262, 1393, 1336, -1, 578, 1393, - 1342, -1, 1524, 1392, 1525, -1, 1524, 1392, 1528, -1, - 1524, 1392, 1339, -1, 1524, 1392, 132, -1, 1016, 1007, - 1393, 1009, -1, 1016, 73, 1393, 1015, -1, 1530, -1, - 1530, -1, 132, -1, 191, -1, 155, -1, 88, -1, - 438, -1, 86, -1, 394, -1, 366, -1, 190, -1, - 266, -1, 542, -1, 433, -1, 130, -1, 251, -1, - 959, -1, 960, -1, 959, 658, 960, -1, 961, -1, - 962, -1, 974, 970, -1, 974, 1032, -1, -1, 1039, - 944, 1061, 1051, 963, 656, 1059, 657, 1045, -1, -1, - 1039, 944, 1528, 585, 1058, 964, 656, 1059, 657, 1045, - -1, -1, 1043, 1040, 944, 1061, 965, 656, 1059, 657, - 1046, -1, -1, 1044, 1040, 944, 1061, 966, 656, 1059, - 657, 1047, -1, -1, 972, 1038, 944, 1061, 1051, 967, - 656, 1059, 657, 1045, -1, -1, 972, 1038, 944, 1528, - 585, 1058, 968, 656, 1059, 657, 1045, -1, -1, 972, - 196, 263, 944, 1061, 969, 656, 1059, 657, 1032, -1, - 972, 971, -1, -1, 971, -1, 66, 656, 1210, 657, - -1, -1, 973, -1, 93, 1061, -1, -1, -1, 1520, - 975, 985, 976, 977, -1, 1002, -1, 978, 20, 656, - 984, 657, 979, 980, -1, -1, 206, 15, -1, -1, - 622, -1, 404, -1, -1, 981, -1, 981, 982, -1, - 982, -1, 597, -1, 597, 263, -1, 83, 1525, -1, - 398, 656, 984, 657, -1, 1204, 1210, 1205, -1, 991, - 1000, 996, -1, 992, 1001, 996, -1, 193, 994, 996, - -1, 42, -1, 42, 999, -1, 47, -1, 46, -1, - 987, 999, 1018, -1, 987, 1018, -1, 988, 999, 1019, - -1, 988, 1019, -1, 37, 999, -1, 37, -1, 989, - 999, 1018, -1, 990, 999, 1019, -1, 614, 999, -1, - 641, 1000, 996, -1, 122, -1, 571, 1000, -1, 568, - 1000, -1, 119, 1000, -1, 572, -1, 44, 1000, -1, - 986, 994, 993, -1, 326, -1, 289, -1, 292, 614, - -1, 292, 989, 1018, -1, 574, 1018, -1, 565, 1000, - 1018, -1, 328, 1018, -1, 290, 1018, -1, 130, 994, - 996, -1, 372, 994, 996, -1, 191, 994, 996, -1, - 166, 656, 1063, 657, 1018, -1, 493, 656, 1063, 657, - 1018, -1, 292, 1018, -1, 489, -1, 208, -1, 207, - -1, 408, -1, 346, -1, 280, -1, 345, -1, 409, - -1, 347, -1, 63, -1, 356, -1, 353, 63, -1, - 987, 618, -1, 615, -1, 353, 615, -1, 373, -1, - 356, 615, -1, 353, 63, 618, -1, 356, 618, -1, - 251, -1, 573, -1, 507, -1, 327, -1, 36, -1, - 433, -1, 148, -1, 148, 412, -1, -1, 527, 644, - 370, -1, -1, 999, -1, 995, -1, 656, 370, 658, - 370, 657, -1, -1, 997, -1, 997, 998, -1, 998, - -1, 501, -1, 600, -1, 642, -1, 656, 291, 657, - -1, 656, 587, 657, -1, 656, 129, 657, -1, 656, - 370, 657, -1, -1, 999, -1, -1, 995, -1, -1, - 1003, -1, 1003, 1004, -1, 1004, -1, 369, -1, 1216, - 369, -1, 132, 1006, -1, 376, 602, 365, 1207, -1, - 28, -1, 489, 132, 613, -1, 1031, 263, -1, 597, - -1, 597, 263, -1, 83, 1525, -1, 73, 1013, -1, - 1524, 1392, 1525, -1, 1524, 1392, 1528, -1, 1524, 1392, - 1339, -1, 1524, 1392, 132, -1, 985, 1014, -1, 365, - 1207, -1, 1510, -1, 63, 493, -1, 62, -1, 1530, - -1, 37, -1, 1008, -1, 132, -1, -1, 1007, 1009, - -1, 1530, -1, 37, -1, 1011, -1, 132, -1, 1530, - -1, -1, 73, 1015, -1, 1013, -1, 132, -1, -1, - 132, -1, 1007, 1008, -1, 22, -1, 594, -1, -1, - 51, -1, 1017, 1019, -1, 37, -1, 37, 1017, -1, - -1, 37, -1, -1, 656, 1337, 1021, 657, -1, 21, - -1, 137, -1, 467, -1, -1, 1022, -1, 1022, 1023, - -1, 1023, -1, 1337, -1, 1025, 1024, -1, 1026, -1, - 1027, 658, 1026, -1, 1025, 649, 1025, -1, 1027, -1, - 1028, -1, -1, 274, 1029, -1, -1, 416, -1, 439, - 1521, 1033, 1035, 1036, -1, -1, 656, 1034, 657, -1, - 1034, 658, 1528, -1, 1528, -1, -1, 316, 201, -1, - 316, 399, -1, 316, 502, -1, -1, 376, 602, 1037, - -1, 376, 136, 1037, -1, 376, 602, 1037, 376, 136, - 1037, -1, 376, 136, 1037, 376, 602, 1037, -1, 461, - -1, 54, -1, 493, 369, -1, 366, 5, -1, 493, - 132, -1, 416, 263, -1, 597, 1040, -1, 263, -1, - 240, -1, -1, 1039, -1, 261, -1, 240, -1, 239, - -1, -1, 597, -1, 202, -1, 514, -1, -1, 1048, - -1, -1, 1050, -1, -1, 1049, -1, 1055, -1, 1048, - 1055, -1, 1056, -1, 1049, 1056, -1, 1057, -1, 1050, - 1057, -1, -1, 608, 1058, -1, -1, 608, 1058, -1, - 585, 1058, -1, 608, 1058, -1, 585, 1058, -1, 262, - 1393, 1336, -1, 83, 1525, -1, 1524, 1392, 1525, -1, - 1524, 1392, 1528, -1, 1524, 1392, 1339, -1, 1524, 1392, - 132, -1, 1054, -1, 1053, -1, 1054, -1, 1054, -1, - 630, 397, 1524, -1, 49, -1, 478, -1, 218, -1, - 1059, 658, 1060, 1327, -1, 1060, 1327, -1, 1528, -1, - 1528, 656, 370, 657, -1, -1, 1520, -1, -1, 664, - 1528, -1, 1507, -1, 1063, 658, 1507, -1, -1, -1, - 14, 1065, 1101, 558, 1521, 1066, 1078, -1, -1, 14, - 115, 1077, 1067, 941, -1, 14, 115, 1528, 603, 118, - 142, 352, -1, -1, 14, 418, 721, 1068, 722, -1, - -1, 14, 203, 721, 1069, 722, -1, -1, 14, 1655, - 1652, 1070, 1657, -1, -1, 14, 1652, 1071, 1657, -1, - -1, 14, 1652, 1204, 173, 721, 1072, 1074, 1075, 712, - 717, 1076, -1, 14, 556, 841, -1, 14, 287, 214, - 843, -1, 14, 556, 838, -1, 14, 556, 837, -1, - -1, 14, 491, 1530, 1073, 382, 656, 706, 657, -1, - -1, 376, 480, 710, -1, 716, -1, 376, 480, 710, - 716, -1, -1, 449, 575, 721, -1, -1, 150, 718, - -1, -1, 1528, -1, -1, 144, 556, -1, 238, 556, - -1, 1093, 887, -1, 1093, 1082, -1, 1082, -1, 888, - -1, 1084, -1, 151, 400, 1371, 1091, -1, 434, 400, - 1157, 1083, -1, -1, 381, 400, 1157, 1083, 1079, 1157, - -1, 16, 400, 1157, 1083, -1, -1, 66, 400, 1083, - 1080, 1151, -1, -1, 451, 400, 1157, 1083, 1081, 1129, - -1, 71, 400, 1157, 1337, -1, 583, 400, 1083, -1, - 1087, -1, 175, 400, 1092, 630, 558, 1521, 890, -1, - 448, 402, -1, 13, -1, 1091, -1, -1, 6, 400, - 944, 1157, 1085, 1086, -1, -1, 656, 913, 657, -1, - 401, 1337, -1, -1, 450, 400, 1157, 1088, 1089, -1, - -1, -1, 1091, 1090, 250, 656, 913, 657, -1, 1092, - -1, 1091, 658, 1092, -1, 1528, -1, 1095, -1, 1093, - 658, 1095, -1, 6, 1099, 943, -1, 1094, 961, 1107, - -1, 6, 962, -1, 1094, 656, 958, 657, -1, 60, - 1099, 1370, 1520, 974, 1107, -1, 342, 1099, 1370, 974, - 1107, -1, 151, 1099, 1370, 1520, 1106, -1, 151, 196, - 263, 1370, 1520, -1, 151, 416, 263, -1, 151, 1039, - 1370, 1520, -1, 143, 261, -1, 159, 261, -1, 14, - 1099, 1520, 493, 132, 1510, -1, 14, 1099, 1520, 151, - 132, -1, 449, 1108, 1521, -1, 101, 575, 1007, 1009, - 1014, -1, 947, -1, 195, -1, 1320, -1, 1097, -1, - 1098, -1, -1, 1098, -1, 1097, -1, 1098, 1097, -1, - 1097, 1098, -1, 12, 1393, 132, -1, 12, 1393, 1528, - -1, 286, 1393, 132, -1, 286, 1393, 1528, -1, -1, - 81, -1, -1, 236, -1, -1, 1102, 1103, -1, -1, - 1104, -1, 1104, 1105, -1, 1105, -1, 236, -1, 379, - -1, -1, 461, -1, 54, -1, -1, 9, 1528, -1, - 190, -1, -1, 575, -1, 644, -1, 20, -1, -1, - 531, 503, 694, 1116, 1110, 1120, -1, -1, 531, 13, - 504, 1116, 1111, -1, 539, 503, 694, 1116, -1, 539, - 13, 504, 1116, -1, 531, 577, 1113, -1, -1, 1114, - -1, 1115, -1, 1114, 658, 1115, -1, 630, 92, 508, - -1, 431, 378, -1, 431, 635, -1, -1, 1117, 1118, - -1, 1119, -1, 1118, 658, 1119, -1, -1, 526, -1, - 445, -1, -1, 601, 1121, -1, 601, 296, 644, 1525, - -1, 693, -1, 1121, 658, 693, -1, -1, 65, 1569, - 1123, 1365, 1124, -1, -1, 427, -1, 182, -1, 1569, - 1365, 1129, -1, -1, 621, 1126, 1365, 1132, -1, -1, - 451, 1157, 1128, 1125, -1, -1, 1130, -1, 1131, -1, - 1131, 1130, -1, 427, -1, 182, -1, 606, -1, -1, - 200, 349, -1, -1, 16, 1157, 1569, 1134, 1135, -1, - 1136, -1, 1135, 658, 1136, -1, 1366, 1137, -1, -1, - 404, 197, 1138, -1, 13, -1, 75, 1139, 239, 1141, - -1, 13, -1, -1, 656, 1140, 1143, 657, -1, 13, - -1, -1, 656, 1142, 1144, 657, -1, -1, 1528, -1, - 1143, 658, 1528, -1, -1, 1145, -1, 1144, 658, 1145, - -1, 1528, -1, 416, -1, 38, 1525, -1, 1569, 1365, - 1151, -1, -1, 621, 1148, 1365, 1154, -1, -1, 66, - 1150, 1147, -1, -1, 1152, -1, 1153, -1, 1153, 1152, - -1, 427, -1, 186, -1, 329, -1, 182, -1, 61, - -1, 197, 603, -1, -1, 197, 603, -1, -1, 381, - 1157, 1569, 1156, 1365, -1, -1, 368, -1, 283, -1, - -1, 449, 1569, 1159, 1161, -1, 449, 605, 720, 1160, - -1, 1533, 575, 1533, -1, 1160, 658, 1533, 575, 1533, - -1, 1162, -1, 1161, 658, 1162, -1, 1521, 575, 1521, - -1, -1, 52, 240, 1164, 1165, 253, 1169, -1, 1166, - -1, 1168, -1, 1167, -1, 1166, 658, 1167, -1, 1521, - 1178, -1, 1521, 1176, 1178, -1, 1528, -1, 132, -1, - -1, 282, 240, 250, 52, 1171, 1172, -1, 1175, -1, - 1173, -1, 1174, -1, 1173, 658, 1174, -1, 1521, 1178, - 1181, -1, 1521, 1176, 1178, 1181, -1, -1, 400, 890, - 1177, 656, 1083, 657, -1, -1, 1179, 1180, -1, -1, - 1039, 656, 1302, 657, -1, -1, 236, 270, -1, 1183, - -1, 485, 1188, -1, 656, 1184, 657, 1634, -1, -1, - 1185, 485, 1190, -1, 656, 1184, 657, -1, -1, 1187, - 485, 1282, 1193, -1, 656, 1186, 657, -1, -1, 1190, - 1189, 1631, -1, 1191, 1323, 1328, 1200, -1, 1191, 1354, - 1200, -1, 1191, 1353, 1194, 1312, 1317, 1314, 1323, 1328, - 1343, 1353, 1200, -1, -1, 1192, 1197, 1201, -1, 1195, - 1312, 1317, 1314, 1323, 1328, 1343, 1200, -1, 200, 1196, - -1, -1, 1194, -1, 1263, -1, 152, -1, -1, 1198, - -1, 1198, 1199, -1, 1199, -1, 1648, -1, 523, -1, - 521, -1, -1, 197, 602, -1, 286, 253, 495, 340, - -1, 1201, 658, 1202, -1, 1202, -1, 651, -1, 1204, - 1515, 1205, -1, 1204, 1210, 1205, 1206, -1, -1, -1, - -1, -1, 20, 1528, -1, 20, 1525, -1, 1528, -1, - 1525, -1, -1, 656, 657, -1, 656, 1337, 657, -1, - -1, 656, 657, -1, 656, 1337, 657, -1, -1, 656, - 657, -1, 1210, 1214, 1210, -1, 1210, 639, 1210, -1, - 1210, 1215, 1210, -1, 364, 1210, -1, 1211, 256, 582, - -1, 1211, 256, 1216, 582, -1, 1211, 256, 185, -1, - 1211, 256, 1216, 185, -1, 1211, 256, 598, -1, 1211, - 256, 1216, 598, -1, 1211, -1, 1211, 256, 369, -1, - 1211, 256, 1216, 369, -1, 1211, 167, 1212, -1, 1211, - 1218, 1212, -1, 1211, 1218, 1219, 656, 1643, 657, -1, - 1212, -1, 1213, 253, 656, 1643, 657, -1, 1213, 1216, - 253, 656, 1643, 657, -1, 1213, 253, 656, 1210, 657, - -1, 1213, 253, 656, 1210, 658, 1256, 657, -1, 1213, - 1216, 253, 656, 1210, 657, -1, 1213, 1216, 253, 656, - 1210, 658, 1256, 657, -1, 1213, 35, 1213, 18, 1212, - -1, 1213, 1216, 35, 1213, 18, 1212, -1, 1213, 512, - 276, 1213, -1, 1213, 276, 1225, 1316, -1, 1213, 1216, - 276, 1225, 1316, -1, 1213, 440, 1213, -1, 1213, 1216, - 440, 1213, -1, 1213, -1, 1213, 647, 1213, -1, 1213, - 648, 1213, -1, 1213, 496, 1213, -1, 1213, 497, 1213, - -1, 1213, 650, 1213, -1, 1213, 649, 1213, -1, 1213, - 650, 249, 1210, 1306, -1, 1213, 649, 249, 1210, 1306, - -1, 1213, 651, 1213, -1, 1213, 652, 1213, -1, 1213, - 653, 1213, -1, 1213, 147, 1213, -1, 1213, 343, 1213, - -1, 1213, 654, 1213, -1, 1225, -1, 388, -1, 385, - -1, 18, -1, 17, -1, 364, -1, 363, -1, 659, - -1, 363, -1, 644, -1, 204, -1, 645, -1, 268, - -1, 646, -1, 357, -1, 13, -1, 19, -1, -1, - 20, 1221, -1, 251, -1, 600, 251, -1, 148, -1, - 433, -1, 193, -1, 130, 994, -1, -1, 987, 1222, - 1018, -1, 988, -1, 122, -1, 571, 1000, -1, 119, - 1000, -1, 1210, 658, 1210, 1220, -1, 1223, -1, 1224, - 658, 1223, -1, 1517, -1, 1226, -1, 1227, -1, 1230, - -1, 1228, -1, 1225, 73, 1530, -1, 1511, -1, 1509, - -1, 1242, -1, 1238, -1, 1225, 387, 1225, -1, 650, - 1225, -1, 649, 1225, -1, 655, 1225, -1, 1217, 1225, - -1, 656, 1643, 657, -1, 656, 1210, 657, -1, 656, - 1210, 658, 1256, 657, -1, 476, 656, 1210, 658, 1256, - 657, -1, 178, 656, 1643, 657, -1, 660, 1528, 1210, - 661, -1, 316, 1257, 10, 656, 1213, 1232, 657, -1, - 37, 1225, -1, 57, 656, 1210, 20, 1252, 657, -1, - 56, 1259, 1261, 1260, 161, -1, 101, 656, 1210, 658, - 1252, 657, -1, 101, 656, 1210, 608, 1008, 657, -1, - 132, 656, 1517, 657, -1, 612, 656, 1518, 657, -1, - 249, 1210, 1306, 650, 1210, -1, 63, 656, 1256, 657, - -1, 63, 656, 1256, 608, 1008, 657, -1, 109, 1209, - -1, 110, 1209, -1, 122, 656, 1210, 657, -1, 127, - 656, 1210, 657, -1, 229, 656, 1210, 657, -1, 246, - 656, 1210, 658, 1210, 658, 1210, 658, 1210, 657, -1, - 249, 656, 1210, 658, 1210, 657, -1, 249, 656, 1210, - 658, 1210, 658, 1256, 657, -1, 272, 656, 1210, 658, - 1210, 657, -1, 337, 656, 1210, 657, -1, 344, 656, - 1210, 657, -1, 469, 656, 1210, 658, 1210, 657, -1, - 483, 656, 1210, 657, -1, 571, 656, 1210, 657, -1, - 568, 656, 1210, 657, -1, 568, 656, 1210, 658, 1210, - 657, -1, 581, 656, 1210, 657, -1, 581, 656, 269, - 1210, 200, 1210, 657, -1, 581, 656, 576, 1210, 200, - 1210, 657, -1, 581, 656, 48, 1210, 200, 1210, 657, - -1, 581, 656, 269, 200, 1210, 657, -1, 581, 656, - 576, 200, 1210, 657, -1, 581, 656, 48, 200, 1210, - 657, -1, 581, 656, 1210, 200, 1210, 657, -1, 605, - 656, 657, -1, 641, 656, 1210, 657, -1, 8, 656, - 1210, 658, 1210, 657, -1, 8, 656, 1210, 658, 249, - 1210, 1306, 657, -1, 107, 1209, -1, 114, 1208, -1, - 120, 656, 1210, 658, 249, 1210, 1306, 657, -1, 121, - 656, 1210, 658, 249, 1210, 1306, 657, -1, 184, 656, - 1306, 200, 1210, 657, -1, 209, 656, 1308, 658, 1210, - 657, -1, 365, 1208, -1, 411, 656, 1213, 253, 1210, - 657, -1, 544, 656, 1210, 658, 1210, 657, -1, 544, - 656, 1210, 658, 249, 1210, 1306, 657, -1, 548, 656, - 1210, 658, 1210, 658, 1210, 657, -1, 548, 656, 1210, - 658, 1210, 657, -1, 548, 656, 1210, 200, 1210, 197, - 1210, 657, -1, 548, 656, 1210, 200, 1210, 657, -1, - 554, 1208, -1, 569, 656, 1307, 658, 1210, 658, 1210, - 657, -1, 570, 656, 1307, 658, 1210, 658, 1210, 657, - -1, 609, 1209, -1, 611, 1208, -1, 610, 1208, -1, - 76, 656, 1210, 658, 1224, 657, -1, 79, 656, 1210, - 658, 1256, 657, -1, 77, 656, 1210, 657, -1, 78, - 656, 1224, 657, -1, 80, 656, 1210, 658, 1210, 20, - 1252, 657, -1, 22, 656, 1210, 657, -1, 62, 656, - 1210, 657, -1, 71, 656, 1256, 657, -1, 74, 656, - 1210, 657, -1, 115, 656, 657, -1, 234, 656, 1210, - 658, 1210, 658, 1210, 657, -1, 198, 656, 1210, 658, - 1210, 657, -1, 198, 656, 1210, 658, 1210, 658, 1210, - 657, -1, 267, 656, 1256, 657, -1, 333, 656, 1210, - 657, -1, 343, 656, 1210, 658, 1210, 657, -1, 375, - 656, 1210, 657, -1, 403, 656, 1210, 657, -1, 425, - 656, 1210, 657, -1, 453, 656, 1210, 658, 1210, 657, - -1, 454, 656, 1210, 658, 1210, 658, 1210, 657, -1, - 467, 656, 1210, 657, -1, 477, 656, 657, -1, 583, - 656, 1210, 658, 1210, 657, -1, 625, 656, 1210, 657, - -1, 625, 656, 1210, 658, 1210, 657, -1, 626, 656, - 1210, 1030, 657, -1, 626, 656, 1210, 20, 63, 1020, - 1030, 657, -1, 626, 656, 1210, 20, 37, 1020, 657, - -1, 626, 656, 1210, 658, 1336, 658, 1336, 658, 1336, - 657, -1, 1229, -1, 97, 656, 1210, 658, 1210, 657, - -1, 207, 656, 1256, 657, -1, 280, 656, 1256, 657, - -1, 345, 656, 1256, 657, -1, 346, 656, 1256, 657, - -1, 347, 656, 1256, 657, -1, 408, 656, 1210, 658, - 1210, 657, -1, 409, 656, 1256, 657, -1, -1, 1524, - 656, 1231, 1235, 657, -1, 1528, 664, 1528, 656, 1255, - 657, -1, 1233, 1234, -1, 253, 46, 340, -1, -1, - 253, 354, 265, 340, -1, -1, 630, 426, 180, -1, - -1, 1236, -1, 1237, -1, 1236, 658, 1237, -1, 1204, - 1210, 1205, 1206, -1, 31, 656, 1250, 657, -1, 31, - 656, 146, 1250, 657, -1, 40, 656, 1250, 657, -1, - 41, 656, 1250, 657, -1, 43, 656, 1250, 657, -1, - 102, 656, 1311, 651, 657, -1, 102, 656, 1250, 657, - -1, -1, -1, 102, 656, 146, 1239, 1256, 1240, 657, - -1, 339, 656, 1250, 657, -1, 339, 656, 146, 1250, - 657, -1, 321, 656, 1250, 657, -1, 321, 656, 146, - 1250, 657, -1, 538, 656, 1250, 657, -1, 617, 656, - 1250, 657, -1, 537, 656, 1250, 657, -1, 619, 656, - 1250, 657, -1, 549, 656, 1250, 657, -1, 549, 656, - 146, 1250, 657, -1, -1, 215, 656, 1245, 1241, 1256, - 1247, 1246, 657, -1, -1, 663, 1243, 1244, -1, 1530, - 494, 1210, -1, 1530, -1, 663, 1555, 1530, 1062, -1, - -1, 146, -1, -1, 487, 1507, -1, -1, -1, 386, - 50, 1248, 1249, -1, 1249, 658, 1516, 1327, -1, 1516, - 1327, -1, -1, 1311, 1251, 1210, -1, 37, 1000, -1, - -1, 63, 1000, 1253, 1018, -1, 356, 1000, -1, 251, - -1, 501, -1, 501, 251, -1, 600, -1, 600, 251, - -1, 122, -1, 571, 1000, -1, 119, 1000, -1, 130, - 994, -1, -1, 148, 1254, 1001, -1, -1, 1256, -1, - 1210, -1, 1256, 658, 1210, -1, 1258, -1, 656, 1258, - 657, -1, 1517, -1, 1258, 658, 1517, -1, -1, 1210, - -1, -1, 157, 1210, -1, 627, 1210, 567, 1210, -1, - 1261, 627, 1210, 567, 1210, -1, 1277, -1, 1266, -1, - 1265, -1, 1262, -1, 660, 1528, 1262, 661, -1, 1264, - -1, 1265, 658, 1264, -1, 1262, 1274, 1262, -1, -1, - 1262, 1274, 1262, 376, 1267, 1210, -1, -1, 1262, 1274, - 1262, 608, 1268, 656, 1305, 657, -1, 1262, 354, 1273, - 1277, -1, -1, 1262, 272, 1291, 260, 1262, 376, 1269, - 1210, -1, -1, 1262, 272, 1291, 260, 1277, 1270, 608, - 656, 1305, 657, -1, 1262, 354, 272, 1291, 260, 1277, - -1, -1, 1262, 469, 1291, 260, 1262, 376, 1271, 1210, - -1, -1, 1262, 469, 1291, 260, 1277, 1272, 608, 656, - 1305, 657, -1, 1262, 354, 469, 1291, 260, 1277, -1, - 260, -1, 243, 260, -1, 541, -1, 1273, -1, 105, - 260, -1, -1, 1276, -1, 400, 656, 1305, 657, 890, - -1, -1, 1278, 1521, 1275, 1310, 1300, -1, 1290, 1289, - 1286, -1, 656, 1289, 1279, 657, 1310, -1, 1284, 1635, - -1, -1, 1279, 596, 1639, 1280, 1640, -1, 1282, -1, - -1, 1283, 1646, 1201, -1, -1, 1289, 1285, 1265, -1, - -1, -1, 1287, 1197, 1201, 1288, 1193, -1, -1, 485, - -1, -1, 389, -1, -1, 197, 260, -1, 197, 386, - 50, -1, 197, 214, 50, -1, 195, -1, 236, -1, - -1, 1293, 1039, 1292, 1295, 656, 1304, 657, -1, -1, - 607, 1039, 1292, 1296, 656, 1302, 657, -1, 1294, -1, - 1297, 1294, -1, -1, -1, 1299, 1297, -1, -1, 1301, - 1298, -1, -1, 1304, -1, 1528, -1, 416, -1, 1303, - -1, 1304, 658, 1303, -1, 1528, -1, 1305, 658, 1528, - -1, 1307, -1, 123, -1, 124, -1, 125, -1, 126, - -1, 226, -1, 227, -1, 228, -1, 335, -1, 336, - -1, 482, -1, 640, -1, 127, -1, 625, -1, 229, - -1, 337, -1, 344, -1, 425, -1, 483, -1, 333, - -1, 641, -1, 122, -1, 571, -1, 119, -1, 568, - -1, -1, 20, -1, 644, -1, -1, 1309, 1528, -1, - -1, 13, -1, -1, -1, 628, 1313, 1210, -1, -1, - -1, 219, 1315, 1210, -1, 171, 1225, -1, -1, -1, - 214, 50, 1318, 1319, -1, 1318, 658, 1516, 1327, -1, - 1516, 1327, -1, -1, 631, -1, 632, -1, 386, 50, - 1321, -1, 1321, 658, 1322, -1, 1322, -1, 1518, 1327, - -1, -1, 1324, -1, -1, 386, 50, 1325, 1326, -1, - 1326, 658, 1516, 1327, -1, 1516, 1327, -1, -1, 21, - -1, 137, -1, -1, 1330, -1, 277, -1, 1329, 1331, - -1, 1329, 1331, 474, 176, 1333, -1, 1329, 474, 176, - 1333, -1, 1332, -1, 1332, 658, 1332, -1, 1332, 374, - 1332, -1, 1528, -1, 1509, -1, 587, -1, 291, -1, - 370, -1, 1332, -1, -1, 277, 1332, -1, 277, 474, - 176, -1, 277, 1332, 474, 176, -1, 370, -1, 649, - 370, -1, 649, 291, -1, 370, -1, 221, -1, 291, - -1, 587, -1, 129, -1, 192, -1, 370, -1, 221, - -1, 291, -1, 587, -1, 1340, -1, 370, -1, 587, - -1, 291, -1, 129, -1, 192, -1, 370, -1, 587, - -1, 221, -1, 291, -1, 1340, -1, 1341, -1, 129, - -1, 192, -1, 1336, -1, 132, -1, -1, -1, 418, - 1528, 1344, 656, 1345, 657, -1, -1, 1346, -1, 1346, - 658, 1347, -1, 1347, -1, 1204, 1210, 1205, -1, -1, - 1349, 1350, -1, 1350, 658, 1351, -1, 1351, -1, 1352, - -1, 663, 1530, -1, 1530, -1, -1, 1354, -1, -1, - 250, 1355, 1356, -1, -1, -1, 390, 1527, 1357, 1010, - 1358, 1491, 1494, -1, 153, 1527, -1, 1348, -1, -1, - 150, 1360, 1256, -1, -1, 151, 1372, 1569, 1371, 1362, - 1365, 1106, -1, -1, 151, 240, 1370, 1528, 376, 1521, - 1363, -1, 151, 115, 1371, 1528, -1, 151, 203, 1371, - 1528, 664, 1528, -1, 151, 203, 1371, 1528, -1, 151, - 418, 1371, 721, -1, 151, 605, 1371, 720, 1605, -1, - 151, 470, 1371, 720, 1589, -1, -1, 151, 621, 1371, - 1364, 1365, 1106, -1, 151, 173, 1371, 721, -1, 151, - 580, 1371, 721, -1, 151, 556, 864, 875, 876, -1, - 151, 287, 214, 865, 875, 876, -1, 151, 491, 1371, - 1530, -1, 1366, -1, 1365, 658, 1366, -1, 1521, -1, - 1521, 1275, -1, 1369, -1, 1368, 658, 1369, -1, 1522, - -1, -1, 234, 178, -1, -1, 234, 178, -1, -1, - 561, -1, -1, -1, 246, 1374, 1379, 1100, 1381, 1375, - 1383, 1399, -1, -1, -1, 454, 1377, 1380, 1381, 1378, - 1383, -1, -1, 294, -1, 134, -1, 223, -1, 1408, - -1, 134, -1, 250, 1382, -1, 1382, -1, 1367, -1, - 1386, -1, 656, 657, 1386, -1, 656, 1385, 657, 1386, - -1, -1, 493, 1384, 1390, -1, 1385, 658, 1514, -1, - 1514, -1, 612, 1389, -1, 613, 1389, -1, -1, 936, - 1387, 1631, -1, -1, 656, 936, 657, 1388, 1634, -1, - 1389, 658, 1394, -1, 1394, -1, 1390, 658, 1391, -1, - 1391, -1, 1518, 1392, 1398, -1, 644, -1, 494, -1, - -1, 1392, -1, -1, 656, 1395, 1396, 657, -1, -1, - 1397, -1, 1397, 658, 1398, -1, 1398, -1, 1210, -1, - 132, -1, -1, -1, 376, 154, 1400, 263, 602, 1406, - -1, -1, -1, 602, 1402, 1408, 1100, 1263, 493, 1404, - 1403, 1312, 1323, 1334, -1, 1404, 658, 1405, -1, 1405, - -1, 1518, 1392, 1398, -1, 1406, 658, 1407, -1, 1407, - -1, 1518, 1392, 1398, -1, -1, 294, -1, -1, 136, - 1410, 1420, 1411, -1, -1, -1, 200, 1521, 1275, 1412, - 1312, 1323, 1334, 1413, 1416, -1, -1, 1417, 1414, 200, - 1263, 1312, -1, -1, 200, 1368, 1415, 608, 1263, 1312, - -1, -1, 464, 1201, -1, 1418, -1, 1417, 658, 1418, - -1, 1528, 1419, -1, 1528, 664, 1528, 1419, -1, -1, - 664, 651, -1, -1, 1421, 1420, -1, 427, -1, 294, - -1, 236, -1, -1, 583, 1424, 1423, 1366, -1, -1, - 558, -1, -1, 1426, -1, 1427, -1, 1426, 658, 1427, - -1, 103, -1, 330, -1, 45, 254, -1, 98, 553, - -1, 394, 187, -1, 255, -1, 552, -1, 513, -1, - 13, -1, -1, 197, 426, 370, -1, -1, 498, 1430, - 1431, -1, 116, 1442, -1, 1438, 555, 1437, 1442, -1, - 1438, 579, 1437, 1442, -1, 172, 1437, 1442, -1, 558, - 536, 1437, 1442, -1, 380, 555, 1437, 1442, -1, 406, - -1, 406, 511, 1525, -1, 406, 511, 1442, -1, 165, - 954, 1434, -1, 165, 13, 1434, -1, 1438, 75, 1439, - 1521, 1437, 1442, -1, 1435, 288, -1, 503, 225, -1, - -1, 38, 172, 1440, 1441, 1432, 1328, -1, -1, 442, - 694, 172, 1440, 1441, 1433, 1328, -1, 1041, 1439, 1521, - 1437, 1312, -1, 1436, 164, -1, 26, -1, 100, -1, - 417, -1, 102, 656, 651, 657, 624, -1, 102, 656, - 651, 657, 169, -1, 624, 1328, -1, 169, 1328, -1, - 422, -1, 421, 1425, 1428, 1328, -1, 1554, 536, 1442, - -1, 1438, 420, -1, 1554, 616, 1442, -1, 1007, 1442, - -1, 74, 1442, -1, 213, -1, 213, 197, 1532, 720, - -1, 104, 115, 944, 1528, -1, 104, 558, 1521, -1, - 104, 621, 1521, -1, 312, 536, -1, 13, 504, 536, - -1, 503, 536, -1, 503, 695, 536, -1, 104, 418, - 721, -1, 104, 203, 721, -1, 104, 580, 721, -1, - 418, 536, 1442, -1, 203, 536, 1442, -1, 418, 72, - 721, -1, 203, 72, 721, -1, 104, 173, 721, -1, - 1447, 197, 1210, -1, 1524, 1203, 1442, -1, 536, -1, - 348, -1, 288, -1, 312, -1, 37, -1, -1, 540, - -1, -1, 1439, 1528, -1, -1, 201, -1, 200, -1, - 253, -1, -1, 253, 1525, -1, -1, 200, 1338, -1, - -1, 276, 1203, 1525, -1, 628, 1203, 1210, -1, -1, - 1447, 1521, 1444, 1451, -1, -1, 1447, 1449, 1445, 1446, - -1, 1182, -1, 1373, -1, 1376, -1, 1401, -1, 1409, - -1, 137, -1, 138, -1, 16, 1450, 1446, -1, 182, - -1, 401, -1, 1450, -1, -1, 198, 644, 1530, -1, - -1, 1507, -1, 1528, -1, -1, 194, 1157, 1453, 1454, - -1, -1, 1569, 1455, 1461, 1456, -1, 1459, -1, -1, - 1457, -1, 630, 431, 286, 1462, -1, -1, 197, 1458, - 181, -1, 1459, 658, 1460, -1, 1460, -1, 168, 288, - -1, 165, 288, -1, 205, 288, -1, 506, 288, -1, - 37, 288, -1, 441, 288, 694, -1, 426, 52, -1, - 225, -1, 417, -1, 288, -1, 536, -1, 503, 694, - -1, 312, -1, 139, -1, 459, -1, 1524, 1203, -1, - -1, 1365, -1, -1, 18, 143, 64, -1, -1, 457, - 1464, 1465, -1, 1465, 658, 1466, -1, 1466, -1, -1, - 503, 1467, 694, 1469, -1, -1, 312, 1468, 1470, -1, - 426, 52, -1, -1, 13, -1, -1, 575, 1336, -1, - -1, 424, 1472, 1473, -1, 1435, 288, 1474, -1, 575, - 1525, -1, 33, 1210, -1, -1, 264, 1476, 1477, 1478, - 1479, -1, -1, 217, -1, 510, -1, -1, 91, -1, - 426, -1, 426, 230, -1, 1210, -1, 605, 1533, -1, - 499, -1, 607, 1528, -1, -1, -1, -1, -1, 282, - 1487, 1483, 1489, 1488, 241, 1527, 1484, 1490, 250, 558, - 1521, 1275, 1485, 1010, 1486, 1497, 1491, 1494, 1498, 1500, - 1503, -1, 118, -1, 638, -1, -1, 283, -1, -1, - 89, -1, 294, -1, -1, 454, -1, 236, -1, -1, - 75, 1492, -1, 1492, 1493, -1, 1493, -1, 563, 50, - 1507, -1, 384, 160, 50, 1507, -1, 160, 50, 1507, - -1, 170, 50, 1507, -1, -1, 279, 1495, -1, 1495, - 1496, -1, 1496, -1, 563, 50, 1507, -1, 529, 50, - 1507, -1, -1, 474, 232, 50, 1507, -1, -1, 236, - 370, 1499, -1, 279, -1, 474, -1, -1, 656, 1501, - 657, -1, 656, 657, -1, 1501, 658, 1502, -1, 1502, - -1, 1518, -1, 663, 1530, -1, -1, 493, 1504, -1, - 1504, 658, 1505, -1, 1505, -1, 1518, 1392, 1204, 1398, - 1205, -1, 564, -1, 355, -1, 590, 564, -1, 1506, - 1526, -1, 1526, -1, 1508, -1, 221, -1, 222, -1, - 39, -1, 396, -1, 1511, -1, 650, 1512, -1, 649, - 1512, -1, 1506, -1, 1512, -1, 1513, -1, 369, -1, - 185, -1, 582, -1, 221, -1, 222, -1, 39, -1, - 590, 1508, -1, 370, -1, 291, -1, 587, -1, 129, - -1, 192, -1, 122, 564, -1, 571, 564, -1, 568, - 564, -1, 1518, -1, 1515, -1, 1528, 664, 651, -1, - 1528, 664, 1528, 664, 651, -1, 1210, -1, 1528, -1, - 1519, -1, 1528, -1, 1519, -1, 1528, 664, 1528, -1, - 664, 1528, 664, 1528, -1, 1528, 664, 1528, 664, 1528, - -1, 1528, -1, 1528, 664, 1528, 664, 1528, -1, 1528, - 664, 1528, -1, 664, 1528, -1, 1528, -1, 1528, 664, - 1528, -1, 664, 1528, -1, 1528, 1419, -1, 1528, 664, - 1528, 1419, -1, 1528, -1, 231, -1, 233, -1, 564, - -1, 564, -1, 564, -1, 1524, -1, 1534, -1, 1524, - -1, 1535, -1, 1528, -1, 1525, -1, 275, -1, 1530, - -1, 1530, 663, 1530, -1, 109, 1209, -1, 1531, -1, - 1590, -1, 1531, -1, 1535, -1, 22, -1, 32, -1, - 34, -1, 51, -1, 52, -1, 62, -1, 65, -1, - 64, -1, 70, -1, 76, -1, 77, -1, 78, -1, - 79, -1, 80, -1, 83, -1, 85, -1, 97, -1, - 128, -1, 150, -1, 161, -1, 176, -1, 177, -1, - 194, -1, 198, -1, 210, -1, 216, -1, 220, -1, - 224, -1, 248, -1, 265, -1, 366, -1, 380, -1, - 383, -1, 382, -1, 392, -1, 397, -1, 410, -1, - 413, -1, 448, -1, 451, -1, 457, -1, 460, -1, - 471, -1, 479, -1, 484, -1, 491, -1, 499, -1, - 501, -1, 509, -1, 503, -1, 504, -1, 511, -1, - 531, -1, 539, -1, 583, -1, 594, -1, 595, -1, - 634, -1, 637, -1, 603, -1, 5, -1, 8, -1, - 7, -1, 9, -1, 10, -1, 11, -1, 12, -1, - 15, -1, 19, -1, 24, -1, 25, -1, 26, -1, - 28, -1, 27, -1, 29, -1, 30, -1, 31, -1, - 38, -1, 42, -1, 45, -1, 47, -1, 46, -1, - 49, -1, 55, -1, 58, -1, 59, -1, 61, -1, - 67, -1, 69, -1, 68, -1, 71, -1, 72, -1, - 74, -1, 82, -1, 75, -1, 84, -1, 86, -1, - 87, -1, 88, -1, 89, -1, 91, -1, 92, -1, - 94, -1, 96, -1, 95, -1, 98, -1, 100, -1, - 111, -1, 103, -1, 106, -1, 108, -1, 113, -1, - 118, -1, 117, -1, 119, -1, 122, -1, 127, -1, - 133, -1, 135, -1, 139, -1, 141, -1, 142, -1, - 143, -1, 144, -1, 145, -1, 153, -1, 154, -1, - 155, -1, 162, -1, 166, -1, 165, -1, 164, -1, - 168, -1, 169, -1, 171, -1, 173, -1, 172, -1, - 174, -1, 175, -1, 180, -1, 181, -1, 182, -1, - 183, -1, 187, -1, 186, -1, 199, -1, 159, -1, - 201, -1, 189, -1, 190, -1, 191, -1, 205, -1, - 206, -1, 208, -1, 207, -1, 209, -1, 213, -1, - 211, -1, 218, -1, 217, -1, 225, -1, 229, -1, - 230, -1, 232, -1, 237, -1, 252, -1, 238, -1, - 239, -1, 242, -1, 254, -1, 255, -1, 257, -1, - 258, -1, 247, -1, 262, -1, 267, -1, 266, -1, - 270, -1, 273, -1, 274, -1, 280, -1, 281, -1, - 283, -1, 285, -1, 287, -1, 288, -1, 319, -1, - 312, -1, 315, -1, 296, -1, 297, -1, 301, -1, - 298, -1, 299, -1, 313, -1, 314, -1, 300, -1, - 302, -1, 295, -1, 310, -1, 304, -1, 303, -1, - 305, -1, 306, -1, 307, -1, 308, -1, 309, -1, - 317, -1, 318, -1, 320, -1, 323, -1, 322, -1, - 324, -1, 329, -1, 330, -1, 331, -1, 332, -1, - 333, -1, 334, -1, 337, -1, 338, -1, 342, -1, - 340, -1, 344, -1, 345, -1, 346, -1, 347, -1, - 348, -1, 349, -1, 350, -1, 352, -1, 351, -1, - 353, -1, 356, -1, 360, -1, 359, -1, 367, -1, - 361, -1, 362, -1, 371, -1, 373, -1, 374, -1, - 375, -1, 377, -1, 379, -1, 378, -1, 393, -1, - 394, -1, 399, -1, 402, -1, 401, -1, 403, -1, - 404, -1, 405, -1, 407, -1, 406, -1, 408, -1, - 409, -1, 414, -1, 415, -1, 417, -1, 419, -1, - 420, -1, 421, -1, 422, -1, 423, -1, 425, -1, - 426, -1, 427, -1, 430, -1, 434, -1, 435, -1, - 437, -1, 436, -1, 438, -1, 441, -1, 442, -1, - 443, -1, 444, -1, 445, -1, 447, -1, 450, -1, - 452, -1, 455, -1, 459, -1, 462, -1, 463, -1, - 465, -1, 467, -1, 470, -1, 472, -1, 473, -1, - 474, -1, 477, -1, 475, -1, 476, -1, 478, -1, - 480, -1, 481, -1, 483, -1, 489, -1, 488, -1, - 490, -1, 502, -1, 495, -1, 505, -1, 506, -1, - 508, -1, 510, -1, 512, -1, 513, -1, 521, -1, - 520, -1, 523, -1, 526, -1, 530, -1, 532, -1, - 536, -1, 540, -1, 542, -1, 543, -1, 544, -1, - 545, -1, 547, -1, 546, -1, 550, -1, 551, -1, - 552, -1, 553, -1, 560, -1, 555, -1, 559, -1, - 556, -1, 561, -1, 562, -1, 565, -1, 566, -1, - 577, -1, 578, -1, 579, -1, 568, -1, 569, -1, - 570, -1, 571, -1, 584, -1, 585, -1, 586, -1, - 203, -1, 588, -1, 589, -1, 592, -1, 591, -1, - 598, -1, 601, -1, 605, -1, 606, -1, 616, -1, - 621, -1, 622, -1, 613, -1, 624, -1, 623, -1, - 625, -1, 626, -1, 633, -1, 636, -1, 638, -1, - 641, -1, 620, -1, -1, 493, 1537, 1541, -1, -1, - -1, 493, 532, 1538, 1540, 1539, 197, 670, -1, 1556, - -1, 1540, 658, 1556, -1, -1, 1557, 1542, 1547, -1, - -1, 577, 1543, 1559, -1, -1, 1553, 1544, 1545, -1, - -1, 1556, 1546, 1547, -1, 577, 1559, -1, -1, 658, - 1548, -1, -1, 1549, 1551, -1, -1, 1548, 658, 1550, - 1551, -1, -1, 1553, 1552, 1556, -1, 1557, -1, 211, - -1, 283, -1, 490, -1, -1, 211, -1, 283, -1, - 490, -1, -1, 211, 664, -1, 283, 664, -1, 490, - 664, -1, 1558, 1392, 1566, -1, 1558, 1392, 1566, -1, - 663, 1530, 1392, 1210, -1, 663, 663, 1555, 1558, 1392, - 1566, -1, 1007, 1012, -1, 351, 1392, 1210, -1, 351, - 1009, 1014, -1, 132, 470, 1591, -1, 132, 470, 1591, - 197, 1533, -1, 470, 1530, -1, 403, 1564, 1565, -1, - 1528, -1, 1528, 664, 1528, -1, 132, 664, 1528, -1, - 1560, -1, 1561, -1, 1560, 658, 1561, -1, 1561, 658, - 1560, -1, 1562, -1, 257, 274, 1563, -1, 431, 378, - -1, 431, 635, -1, 431, 588, -1, 431, 84, -1, - 452, 431, -1, 488, -1, 1392, -1, 197, 1533, 1392, - -1, 564, -1, 403, 656, 564, 657, -1, 375, 656, - 564, 657, -1, 1210, -1, 132, -1, 376, -1, 13, - -1, 37, -1, -1, 286, 1569, 1568, 1570, -1, 558, - -1, 555, -1, 1571, -1, 1570, 658, 1571, -1, 1521, - 1310, 1572, -1, 431, -1, 635, -1, 635, 89, -1, - 294, 635, -1, 431, 283, -1, -1, 599, 1574, 1569, - -1, 216, 1521, 380, 1310, -1, 216, 1523, 70, -1, - -1, 216, 1523, 431, 1576, 1577, 1312, 1328, -1, 1578, - -1, 1528, 1579, -1, 190, -1, 360, -1, 190, -1, - 360, -1, 415, -1, 266, -1, -1, 1581, 1580, 656, - 1397, 657, -1, 644, -1, 204, -1, 268, -1, 645, - -1, 646, -1, 468, 720, 1583, -1, 1593, 376, 1592, - 1604, 200, 1607, -1, 1593, 376, 203, 1604, 200, 1607, - -1, 1593, 376, 418, 1604, 200, 1607, -1, 13, 1594, - 658, 212, 383, 200, 1607, -1, 423, 376, 1533, 200, - 1605, -1, 1584, 200, 1607, -1, 7, 383, 197, 1591, - -1, 1591, -1, 212, 720, 1586, -1, 1593, 376, 1592, - 1604, 575, 1606, 1614, 1615, -1, 1593, 376, 203, 1604, - 575, 1606, 1614, 1615, -1, 1593, 376, 418, 1604, 575, - 1606, 1614, 1615, -1, 423, 376, 1533, 575, 1606, 1616, - -1, 1591, 575, 1606, 1588, -1, -1, 630, 7, 1532, - -1, -1, 630, 7, 383, -1, 1591, -1, 1589, 658, - 1591, -1, 110, 1209, -1, 1530, -1, 1590, -1, -1, - 558, -1, 1595, -1, 13, 1594, -1, -1, 417, -1, - 1596, -1, 1595, 658, 1596, -1, -1, 485, 1597, 1611, - -1, -1, 246, 1598, 1611, -1, -1, 602, 1599, 1611, - -1, -1, 439, 1600, 1611, -1, 136, -1, 604, -1, - 240, -1, 14, -1, 104, -1, 151, -1, 177, -1, - 447, -1, 499, -1, 419, -1, 189, -1, 212, 383, - -1, 498, 116, -1, 550, -1, 104, 561, 555, -1, - 286, 555, -1, 455, 503, -1, 455, 69, -1, 104, - 621, -1, 498, 621, -1, 104, 473, -1, 14, 473, - -1, 104, 605, -1, 173, -1, 580, -1, 104, 556, - -1, -1, 18, -1, 1603, 1601, 1602, -1, 1603, -1, - 545, 564, -1, 258, 564, -1, 67, 564, -1, 651, - -1, 1528, 664, 651, -1, 651, 664, 651, -1, 1521, - -1, 1533, -1, 1605, 658, 1533, -1, 1610, -1, 1606, - 658, 1610, -1, 1532, -1, 1607, 658, 1532, -1, 620, - -1, 630, -1, 608, -1, 20, -1, 1533, 232, 50, - 564, -1, 1533, 232, 50, 403, 564, -1, 1533, 232, - 1608, 1530, -1, 1533, 232, 1608, 1530, 1609, 1525, -1, - 1532, -1, -1, 656, 1612, 657, -1, 1612, 658, 1613, - -1, 1613, -1, 1528, -1, -1, 456, 1602, -1, 456, - 528, -1, 456, 636, -1, 456, 362, -1, -1, 630, - 1617, -1, -1, 630, 212, 383, -1, 1617, 1618, -1, - 1618, -1, 212, 383, -1, 318, 1336, -1, 322, 1336, - -1, 317, 1336, -1, 324, 1335, -1, 323, 1512, -1, - -1, 34, 1620, 1623, -1, 777, -1, -1, 1216, -1, - -1, 633, -1, -1, 18, 366, 59, -1, 18, 59, - -1, -1, 446, -1, 366, 446, -1, -1, 479, -1, - 85, 1623, 1624, 1625, -1, 471, 1623, 1624, 1625, -1, - 471, 1623, 575, 1626, 1528, -1, 479, 1528, -1, 446, - 479, 1528, -1, -1, 1632, -1, -1, 596, 1639, 1633, - 1183, -1, 1635, -1, 1632, -1, -1, 1636, -1, -1, - 1637, 1638, -1, 1324, 1328, -1, 1330, -1, -1, 146, - -1, 13, -1, 485, 1281, 1193, -1, 656, 1186, 657, - 1635, -1, 1640, -1, -1, 1641, 596, 1639, 1642, 1640, - -1, 1644, 1641, 1645, -1, -1, -1, -1, 1647, -1, - 1647, 1648, -1, 1648, -1, 541, -1, 223, -1, 146, - -1, 524, -1, 519, -1, 520, -1, 522, -1, 13, - -1, 1654, 1650, -1, 1653, 1651, -1, 1655, 1652, 1657, - -1, 1657, -1, 1665, -1, 1678, -1, 1672, -1, 708, - -1, 1657, -1, 1665, -1, 1678, -1, 1672, -1, 1670, - -1, 708, -1, 1653, -1, 1654, -1, -1, 133, 644, - 1532, -1, 12, 644, 589, -1, 12, 644, 331, -1, - 12, 644, 562, -1, -1, 525, 484, 133, -1, 525, - 484, 252, -1, -1, 1656, 621, 944, 1521, 1658, 1659, - 20, 1661, -1, -1, 656, 1660, 657, -1, 1528, -1, - 1660, 658, 1528, -1, -1, 1662, 1663, 1664, -1, 485, - 1188, -1, 656, 1184, 657, 1634, -1, -1, 630, 66, - 383, -1, 630, 55, 66, 383, -1, 630, 283, 66, - 383, -1, -1, -1, -1, -1, 580, 1204, 944, 1666, - 721, 835, 836, 376, 1204, 1667, 1521, 197, 1204, 1668, - 156, 476, 1669, 776, -1, 11, 1671, -1, 1671, -1, - 203, 944, 1528, 465, 957, 511, 1525, -1, -1, -1, - -1, -1, -1, 203, 944, 721, 656, 1673, 732, 657, - 1674, 465, 1675, 1005, 1676, 723, 1677, 776, -1, -1, - -1, -1, -1, 418, 944, 721, 1679, 656, 1680, 736, - 657, 1681, 723, 1682, 776, -1, 637, 1685, 1684, 1686, - -1, 637, 161, 1684, 1688, -1, 637, 413, 1684, -1, - 637, 85, 1684, 1687, -1, 637, 471, 1684, -1, 637, - 435, -1, 1507, -1, 1507, 658, 1507, -1, 1507, 658, - 1507, 658, 1336, -1, 34, -1, 531, -1, -1, 260, - -1, 462, -1, -1, 377, 405, -1, -1, -1, 551, - 1689, 1690, -1, -1, 197, 334, -1, 248, 407, 1528, - 511, 1525, -1, 248, 511, 1525, -1, 595, 407, 1528, - -1, 595, 511, 1525, -1, 643, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 2023, 2023, 2033, 2032, 2057, 2064, 2066, 2070, 2071, - 2072, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, - 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, - 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, - 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, - 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, - 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2136, 2145, 2146, - 2150, 2159, 2165, 2175, 2174, 2184, 2186, 2190, 2191, 2195, - 2209, 2208, 2225, 2224, 2233, 2234, 2238, 2242, 2246, 2250, - 2254, 2258, 2263, 2267, 2271, 2275, 2279, 2283, 2288, 2292, - 2297, 2324, 2328, 2332, 2337, 2340, 2342, 2343, 2347, 2353, - 2355, 2356, 2360, 2366, 2368, 2369, 2373, 2380, 2384, 2399, - 2403, 2409, 2415, 2421, 2431, 2435, 2439, 2453, 2452, 2491, - 2488, 2501, 2499, 2511, 2509, 2520, 2519, 2532, 2531, 2540, - 2545, 2551, 2555, 2559, 2559, 2566, 2565, 2577, 2578, 2582, - 2587, 2592, 2597, 2602, 2607, 2612, 2620, 2619, 2651, 2650, - 2657, 2664, 2665, 2671, 2677, 2687, 2693, 2699, 2701, 2708, - 2709, 2713, 2723, 2724, 2732, 2732, 2776, 2790, 2801, 2819, - 2820, 2824, 2825, 2830, 2832, 2834, 2836, 2838, 2840, 2842, - 2848, 2849, 2853, 2857, 2865, 2864, 2877, 2879, 2882, 2884, - 2888, 2892, 2899, 2901, 2905, 2906, 2911, 2910, 2943, 2945, - 2949, 2950, 2954, 2958, 2959, 2960, 2961, 2965, 2966, 2970, - 2971, 2976, 2979, 2998, 2997, 3069, 3082, 3081, 3140, 3162, - 3162, 3181, 3182, 3187, 3189, 3194, 3209, 3217, 3221, 3240, - 3241, 3245, 3249, 3255, 3261, 3267, 3276, 3290, 3305, 3311, - 3312, 3318, 3321, 3325, 3333, 3350, 3352, 3370, 3376, 3378, - 3380, 3382, 3384, 3386, 3388, 3390, 3392, 3394, 3396, 3398, - 3403, 3418, 3434, 3435, 3440, 3446, 3455, 3461, 3470, 3478, - 3487, 3496, 3498, 3507, 3512, 3518, 3527, 3535, 3537, 3539, - 3541, 3543, 3545, 3547, 3549, 3551, 3553, 3555, 3557, 3559, - 3564, 3576, 3591, 3592, 3596, 3597, 3598, 3599, 3600, 3601, - 3602, 3603, 3604, 3605, 3606, 3610, 3611, 3612, 3613, 3618, - 3617, 3628, 3628, 3681, 3680, 3705, 3755, 3796, 3815, 3814, - 3834, 3851, 3853, 3854, 3858, 3872, 3889, 3891, 3907, 3889, - 3926, 3928, 3929, 3934, 3933, 4003, 4005, 4003, 4014, 4019, - 4020, 4024, 4025, 4030, 4034, 4029, 4055, 4059, 4054, 4078, - 4088, 4092, 4093, 4098, 4097, 4119, 4118, 4128, 4127, 4138, - 4138, 4178, 4193, 4192, 4224, 4223, 4243, 4257, 4266, 4265, - 4273, 4272, 4281, 4280, 4291, 4290, 4299, 4298, 4308, 4307, - 4318, 4320, 4325, 4327, 4329, 4346, 4351, 4357, 4364, 4365, - 4373, 4379, 4388, 4394, 4400, 4401, 4405, 4405, 4410, 4411, - 4412, 4416, 4417, 4418, 4422, 4426, 4427, 4428, 4432, 4433, - 4434, 4435, 4436, 4437, 4438, 4439, 4443, 4447, 4448, 4449, - 4453, 4454, 4455, 4456, 4457, 4461, 4465, 4466, 4467, 4471, - 4472, 4473, 4474, 4475, 4476, 4477, 4481, 4485, 4486, 4487, - 4491, 4492, 4493, 4498, 4506, 4514, 4522, 4535, 4548, 4553, - 4558, 4566, 4574, 4582, 4590, 4598, 4606, 4614, 4624, 4634, - 4644, 4646, 4650, 4655, 4665, 4666, 4711, 4710, 4713, 4719, - 4719, 4720, 4734, 4735, 4739, 4741, 4740, 4744, 4743, 4749, - 4786, 4787, 4792, 4791, 4810, 4825, 4824, 4841, 4845, 4853, - 4852, 4855, 4857, 4859, 4861, 4866, 4867, 4873, 4874, 4891, - 4892, 4896, 4897, 4901, 4917, 4927, 4938, 4947, 4948, 4961, - 4963, 4962, 4967, 4965, 4976, 4977, 4981, 4996, 5012, 5013, - 5026, 5035, 5057, 5058, 5063, 5062, 5087, 5099, 5115, 5114, - 5129, 5128, 5145, 5167, 5171, 5200, 5212, 5213, 5218, 5229, - 5217, 5254, 5255, 5259, 5272, 5293, 5306, 5332, 5333, 5338, - 5337, 5375, 5384, 5385, 5389, 5390, 5394, 5396, 5402, 5408, - 5410, 5412, 5414, 5416, 5418, 5428, 5443, 5427, 5457, 5458, - 5462, 5463, 5467, 5468, 5472, 5473, 5478, 5481, 5489, 5492, - 5499, 5503, 5509, 5511, 5515, 5516, 5520, 5521, 5522, 5526, - 5531, 5536, 5541, 5546, 5551, 5556, 5561, 5576, 5582, 5597, - 5602, 5617, 5623, 5641, 5646, 5651, 5656, 5661, 5666, 5672, - 5671, 5697, 5698, 5699, 5704, 5709, 5714, 5716, 5718, 5720, - 5726, 5731, 5736, 5744, 5752, 5758, 5767, 5775, 5792, 5813, - 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5834, 5835, 5836, - 5840, 5841, 5842, 5843, 5848, 5855, 5856, 5860, 5861, 5865, - 5866, 5871, 5870, 5878, 5877, 5885, 5884, 5892, 5891, 5901, - 5898, 5909, 5907, 5916, 5915, 5950, 5953, 5955, 5959, 5963, - 5964, 5968, 5973, 5986, 5972, 6005, 6006, 6012, 6013, 6018, - 6021, 6025, 6032, 6033, 6037, 6038, 6042, 6048, 6054, 6058, - 6071, 6088, 6089, 6090, 6105, 6110, 6114, 6119, 6124, 6128, - 6133, 6138, 6144, 6149, 6155, 6159, 6164, 6169, 6187, 6189, - 6192, 6209, 6212, 6217, 6222, 6233, 6238, 6243, 6248, 6250, - 6252, 6254, 6256, 6258, 6260, 6262, 6264, 6266, 6268, 6270, - 6279, 6280, 6281, 6287, 6288, 6289, 6290, 6291, 6295, 6299, - 6300, 6304, 6305, 6309, 6310, 6311, 6312, 6313, 6317, 6318, - 6319, 6320, 6321, 6325, 6330, 6332, 6338, 6340, 6348, 6349, - 6351, 6356, 6365, 6366, 6370, 6371, 6375, 6376, 6377, 6381, - 6382, 6383, 6384, 6387, 6388, 6392, 6393, 6397, 6398, 6402, - 6403, 6407, 6408, 6409, 6410, 6417, 6418, 6424, 6430, 6436, - 6442, 6443, 6450, 6458, 6466, 6472, 6481, 6496, 6502, 6507, - 6508, 6512, 6517, 6521, 6522, 6526, 6527, 6531, 6537, 6541, - 6542, 6546, 6554, 6555, 6559, 6560, 6564, 6565, 6569, 6570, - 6571, 6579, 6580, 6581, 6582, 6583, 6587, 6588, 6593, 6592, - 6605, 6606, 6610, 6613, 6614, 6615, 6616, 6620, 6628, 6635, - 6636, 6640, 6650, 6651, 6655, 6656, 6659, 6661, 6665, 6677, - 6678, 6682, 6689, 6702, 6703, 6705, 6707, 6713, 6718, 6724, - 6730, 6737, 6747, 6748, 6749, 6750, 6751, 6755, 6756, 6760, - 6761, 6765, 6766, 6770, 6771, 6772, 6776, 6777, 6781, 6785, - 6797, 6798, 6802, 6803, 6807, 6808, 6812, 6813, 6817, 6818, - 6822, 6823, 6827, 6828, 6832, 6833, 6834, 6837, 6839, 6844, - 6846, 6848, 6856, 6864, 6870, 6878, 6879, 6883, 6887, 6888, - 6898, 6899, 6900, 6904, 6908, 6915, 6921, 6933, 6934, 6938, - 6939, 6943, 6945, 6954, 6968, 6953, 6988, 6987, 7001, 7010, - 7009, 7025, 7024, 7040, 7039, 7055, 7049, 7066, 7065, 7100, - 7105, 7110, 7115, 7121, 7120, 7129, 7130, 7131, 7132, 7136, - 7137, 7149, 7150, 7154, 7155, 7158, 7160, 7168, 7176, 7178, - 7180, 7181, 7189, 7190, 7196, 7205, 7203, 7216, 7229, 7228, - 7241, 7239, 7252, 7259, 7269, 7270, 7297, 7304, 7308, 7314, - 7312, 7331, 7333, 7338, 7346, 7345, 7361, 7365, 7364, 7376, - 7377, 7381, 7397, 7398, 7402, 7410, 7414, 7419, 7424, 7431, - 7438, 7448, 7458, 7469, 7479, 7485, 7491, 7500, 7510, 7526, - 7540, 7550, 7554, 7559, 7560, 7563, 7565, 7566, 7567, 7568, - 7571, 7576, 7584, 7589, 7597, 7598, 7602, 7603, 7607, 7607, - 7610, 7612, 7616, 7617, 7621, 7622, 7630, 7631, 7632, 7636, - 7637, 7642, 7650, 7651, 7652, 7653, 7658, 7657, 7667, 7666, - 7673, 7680, 7690, 7707, 7710, 7717, 7721, 7728, 7732, 7736, - 7743, 7743, 7749, 7750, 7754, 7755, 7756, 7760, 7761, 7770, - 7777, 7778, 7783, 7782, 7794, 7795, 7796, 7800, 7801, 7801, - 7806, 7805, 7826, 7827, 7831, 7832, 7836, 7837, 7838, 7842, - 7843, 7848, 7847, 7868, 7869, 7873, 7878, 7879, 7886, 7888, - 7892, 7894, 7893, 7905, 7907, 7906, 7919, 7920, 7925, 7934, - 7935, 7936, 7940, 7947, 7957, 7965, 7966, 7966, 7970, 7969, - 7992, 7993, 7997, 7998, 8002, 8003, 8004, 8005, 8006, 8007, - 8011, 8012, 8017, 8016, 8037, 8038, 8039, 8044, 8043, 8049, - 8056, 8062, 8071, 8072, 8076, 8090, 8089, 8102, 8103, 8107, - 8108, 8112, 8122, 8132, 8133, 8138, 8137, 8148, 8149, 8153, - 8154, 8158, 8168, 8179, 8178, 8186, 8186, 8195, 8196, 8201, - 8202, 8211, 8220, 8221, 8225, 8225, 8237, 8242, 8242, 8251, - 8256, 8255, 8270, 8274, 8275, 8296, 8296, 8310, 8321, 8324, - 8326, 8330, 8336, 8343, 8345, 8353, 8354, 8358, 8359, 8376, - 8395, 8397, 8404, 8415, 8416, 8417, 8431, 8436, 8458, 8464, - 8470, 8476, 8477, 8478, 8479, 8480, 8484, 8485, 8486, 8490, - 8491, 8492, 8496, 8497, 8502, 8553, 8560, 8603, 8609, 8615, - 8621, 8627, 8633, 8639, 8645, 8649, 8655, 8661, 8667, 8673, - 8679, 8683, 8689, 8698, 8704, 8712, 8718, 8728, 8734, 8743, - 8753, 8760, 8770, 8776, 8785, 8789, 8795, 8801, 8807, 8813, - 8819, 8825, 8831, 8837, 8843, 8849, 8855, 8861, 8867, 8873, - 8877, 8878, 8882, 8883, 8887, 8888, 8892, 8893, 8897, 8898, - 8899, 8900, 8901, 8902, 8906, 8907, 8912, 8918, 8922, 8929, - 8936, 8943, 8950, 8957, 8963, 8962, 8970, 8977, 8984, 8992, - 9003, 9025, 9032, 9040, 9041, 9042, 9043, 9044, 9045, 9056, - 9057, 9058, 9059, 9060, 9066, 9070, 9076, 9082, 9088, 9094, - 9096, 9103, 9110, 9116, 9140, 9150, 9157, 9165, 9171, 9178, - 9184, 9194, 9201, 9217, 9223, 9229, 9238, 9247, 9253, 9259, - 9265, 9271, 9285, 9296, 9302, 9308, 9314, 9320, 9326, 9333, - 9340, 9346, 9352, 9358, 9364, 9370, 9376, 9382, 9388, 9394, - 9402, 9423, 9430, 9436, 9443, 9450, 9457, 9464, 9470, 9476, - 9483, 9489, 9496, 9502, 9508, 9514, 9520, 9526, 9544, 9550, - 9556, 9563, 9570, 9578, 9585, 9592, 9599, 9606, 9623, 9629, - 9635, 9641, 9647, 9654, 9660, 9666, 9672, 9678, 9684, 9690, - 9697, 9705, 9711, 9717, 9723, 9729, 9737, 9743, 9757, 9763, - 9769, 9777, 9789, 9796, 9811, 9817, 9824, 9831, 9838, 9845, - 9852, 9856, 9876, 9875, 9947, 9985, 9987, 9992, 9993, 9997, - 9998, 10002, 10003, 10007, 10014, 10022, 10049, 10055, 10061, 10067, - 10073, 10079, 10088, 10095, 10097, 10094, 10104, 10115, 10121, 10127, - 10133, 10139, 10145, 10151, 10157, 10163, 10170, 10169, 10189, 10188, - 10200, 10210, 10218, 10234, 10235, 10240, 10245, 10248, 10251, 10250, - 10266, 10268, 10274, 10273, 10290, 10293, 10292, 10296, 10298, 10300, - 10302, 10304, 10306, 10308, 10310, 10316, 10322, 10325, 10324, 10330, - 10331, 10335, 10342, 10350, 10351, 10355, 10362, 10370, 10371, 10375, - 10376, 10380, 10388, 10399, 10400, 10412, 10423, 10424, 10430, 10431, - 10451, 10455, 10453, 10471, 10469, 10480, 10490, 10488, 10506, 10505, - 10515, 10526, 10524, 10543, 10542, 10553, 10565, 10566, 10567, 10571, - 10572, 10580, 10581, 10585, 10600, 10600, 10615, 10651, 10736, 10747, - 10744, 10769, 10782, 10782, 10798, 10797, 10818, 10835, 10818, 10842, - 10846, 10869, 10870, 10875, 10878, 10879, 10880, 10884, 10885, 10890, - 10889, 10895, 10894, 10902, 10903, 10906, 10908, 10908, 10912, 10912, - 10917, 10918, 10922, 10924, 10929, 10930, 10934, 10945, 10958, 10959, - 10960, 10961, 10962, 10963, 10964, 10965, 10966, 10967, 10968, 10969, - 10973, 10974, 10975, 10976, 10977, 10978, 10979, 10980, 10981, 10985, - 10986, 10987, 10988, 10991, 10993, 10994, 10998, 10999, 11007, 11009, - 11013, 11015, 11014, 11028, 11031, 11030, 11045, 11051, 11065, 11067, - 11071, 11073, 11078, 11079, 11096, 11118, 11122, 11123, 11127, 11139, - 11141, 11146, 11145, 11195, 11197, 11202, 11203, 11204, 11208, 11209, - 11213, 11226, 11233, 11238, 11245, 11252, 11259, 11269, 11296, 11300, - 11306, 11312, 11321, 11329, 11333, 11340, 11341, 11345, 11346, 11347, - 11351, 11352, 11353, 11354, 11355, 11356, 11360, 11361, 11362, 11363, - 11364, 11368, 11369, 11370, 11371, 11372, 11376, 11377, 11378, 11379, - 11380, 11384, 11389, 11390, 11394, 11395, 11399, 11401, 11400, 11438, - 11439, 11443, 11444, 11448, 11458, 11458, 11469, 11470, 11473, 11493, - 11497, 11511, 11512, 11517, 11516, 11526, 11536, 11525, 11538, 11551, - 11563, 11562, 11580, 11579, 11588, 11588, 11605, 11611, 11626, 11642, - 11650, 11654, 11659, 11658, 11667, 11672, 11678, 11683, 11688, 11696, - 11697, 11701, 11712, 11725, 11726, 11730, 11742, 11746, 11755, 11758, - 11765, 11766, 11774, 11782, 11773, 11792, 11799, 11791, 11809, 11817, - 11818, 11826, 11830, 11831, 11842, 11843, 11847, 11856, 11857, 11858, - 11860, 11859, 11870, 11872, 11876, 11877, 11879, 11878, 11882, 11881, - 11887, 11888, 11892, 11893, 11897, 11907, 11908, 11912, 11913, 11918, - 11917, 11931, 11932, 11936, 11941, 11949, 11950, 11958, 11960, 11960, - 11968, 11976, 11967, 11998, 11999, 12003, 12011, 12012, 12016, 12026, - 12027, 12034, 12033, 12049, 12060, 12048, 12063, 12062, 12074, 12073, - 12086, 12088, 12092, 12093, 12097, 12110, 12126, 12127, 12131, 12132, - 12136, 12137, 12138, 12143, 12142, 12163, 12165, 12168, 12170, 12173, - 12174, 12177, 12181, 12185, 12189, 12193, 12197, 12201, 12205, 12209, - 12217, 12220, 12230, 12229, 12245, 12252, 12260, 12268, 12276, 12284, - 12292, 12299, 12306, 12312, 12314, 12316, 12325, 12329, 12334, 12333, - 12340, 12339, 12344, 12353, 12360, 12365, 12370, 12375, 12377, 12379, - 12381, 12383, 12385, 12392, 12400, 12402, 12410, 12417, 12424, 12431, - 12437, 12442, 12450, 12458, 12462, 12467, 12474, 12479, 12486, 12493, - 12499, 12506, 12513, 12518, 12523, 12528, 12535, 12557, 12559, 12561, - 12566, 12567, 12570, 12572, 12576, 12577, 12581, 12582, 12586, 12587, - 12591, 12592, 12596, 12597, 12601, 12602, 12610, 12622, 12621, 12637, - 12636, 12646, 12647, 12648, 12649, 12650, 12654, 12655, 12659, 12666, - 12667, 12668, 12672, 12673, 12685, 12686, 12687, 12702, 12701, 12714, - 12713, 12725, 12729, 12730, 12743, 12746, 12745, 12757, 12758, 12763, - 12765, 12767, 12769, 12771, 12773, 12781, 12783, 12785, 12787, 12792, - 12794, 12802, 12804, 12806, 12808, 12824, 12825, 12829, 12830, 12834, - 12833, 12843, 12844, 12848, 12848, 12852, 12851, 12857, 12861, 12862, - 12866, 12867, 12875, 12874, 12885, 12889, 12893, 12906, 12905, 12920, - 12921, 12922, 12925, 12926, 12927, 12928, 12936, 12940, 12949, 12955, - 12967, 12978, 12988, 12998, 12966, 13006, 13007, 13011, 13012, 13016, - 13017, 13025, 13029, 13030, 13031, 13034, 13036, 13040, 13041, 13045, - 13050, 13057, 13062, 13069, 13071, 13075, 13076, 13080, 13085, 13093, - 13094, 13097, 13099, 13107, 13108, 13112, 13113, 13114, 13118, 13120, - 13125, 13126, 13135, 13136, 13140, 13141, 13145, 13158, 13182, 13194, - 13201, 13220, 13228, 13233, 13246, 13255, 13271, 13288, 13289, 13290, - 13298, 13299, 13300, 13301, 13315, 13321, 13327, 13333, 13339, 13345, - 13363, 13373, 13383, 13389, 13398, 13410, 13416, 13422, 13438, 13439, - 13443, 13452, 13467, 13471, 13514, 13518, 13535, 13539, 13611, 13635, - 13665, 13666, 13676, 13683, 13687, 13693, 13699, 13709, 13715, 13724, - 13734, 13735, 13763, 13777, 13791, 13806, 13807, 13817, 13818, 13828, - 13829, 13830, 13834, 13847, 13877, 13887, 13887, 13889, 13899, 13900, - 13901, 13902, 13903, 13904, 13905, 13906, 13907, 13908, 13909, 13910, - 13911, 13912, 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920, - 13921, 13922, 13923, 13924, 13925, 13926, 13927, 13928, 13929, 13930, - 13931, 13932, 13933, 13934, 13935, 13936, 13937, 13938, 13939, 13940, - 13941, 13942, 13943, 13944, 13945, 13946, 13947, 13948, 13949, 13950, - 13951, 13952, 13953, 13954, 13955, 13956, 13957, 13958, 13959, 13969, - 13970, 13971, 13972, 13973, 13974, 13975, 13976, 13977, 13978, 13979, - 13980, 13981, 13982, 13983, 13984, 13985, 13986, 13987, 13988, 13989, - 13990, 13991, 13992, 13993, 13994, 13995, 13996, 13997, 13998, 13999, - 14000, 14001, 14002, 14003, 14004, 14005, 14006, 14007, 14008, 14009, - 14010, 14011, 14012, 14013, 14014, 14015, 14016, 14017, 14018, 14023, - 14024, 14025, 14026, 14027, 14028, 14029, 14030, 14031, 14032, 14033, - 14034, 14035, 14036, 14037, 14038, 14039, 14040, 14041, 14042, 14043, - 14044, 14045, 14046, 14047, 14048, 14049, 14050, 14051, 14052, 14053, - 14054, 14055, 14056, 14057, 14058, 14059, 14060, 14061, 14062, 14063, - 14064, 14065, 14066, 14067, 14068, 14069, 14070, 14071, 14072, 14073, - 14074, 14075, 14076, 14077, 14078, 14079, 14080, 14081, 14082, 14083, - 14084, 14085, 14086, 14087, 14088, 14089, 14090, 14091, 14092, 14093, - 14094, 14095, 14096, 14097, 14098, 14099, 14100, 14101, 14102, 14103, - 14104, 14105, 14106, 14107, 14108, 14109, 14110, 14111, 14112, 14113, - 14114, 14115, 14116, 14117, 14118, 14119, 14120, 14121, 14122, 14123, - 14124, 14125, 14126, 14127, 14128, 14129, 14130, 14131, 14132, 14133, - 14134, 14135, 14136, 14137, 14138, 14139, 14140, 14141, 14142, 14143, - 14144, 14145, 14146, 14147, 14148, 14149, 14150, 14151, 14152, 14153, - 14154, 14155, 14156, 14157, 14158, 14159, 14160, 14161, 14162, 14163, - 14164, 14165, 14166, 14167, 14168, 14169, 14170, 14171, 14172, 14173, - 14174, 14175, 14176, 14177, 14178, 14179, 14180, 14181, 14182, 14183, - 14184, 14185, 14186, 14187, 14188, 14189, 14190, 14191, 14192, 14193, - 14194, 14195, 14196, 14197, 14198, 14199, 14200, 14201, 14202, 14203, - 14204, 14205, 14206, 14207, 14208, 14209, 14210, 14211, 14212, 14213, - 14214, 14215, 14216, 14217, 14218, 14219, 14220, 14221, 14222, 14223, - 14224, 14225, 14226, 14227, 14228, 14229, 14230, 14231, 14232, 14233, - 14234, 14235, 14236, 14237, 14238, 14239, 14240, 14241, 14242, 14243, - 14244, 14245, 14246, 14247, 14248, 14249, 14250, 14251, 14252, 14253, - 14254, 14255, 14256, 14257, 14258, 14259, 14260, 14261, 14262, 14263, - 14264, 14265, 14266, 14267, 14268, 14269, 14270, 14271, 14272, 14273, - 14274, 14275, 14276, 14277, 14278, 14279, 14280, 14281, 14293, 14292, - 14305, 14313, 14304, 14330, 14331, 14336, 14335, 14342, 14341, 14351, - 14350, 14361, 14360, 14366, 14374, 14376, 14381, 14381, 14390, 14389, - 14403, 14402, 14407, 14411, 14412, 14413, 14417, 14418, 14419, 14420, - 14424, 14425, 14426, 14427, 14432, 14456, 14482, 14493, 14505, 14519, - 14534, 14553, 14570, 14582, 14590, 14606, 14632, 14669, 14683, 14684, - 14685, 14686, 14690, 14708, 14726, 14727, 14731, 14732, 14733, 14734, - 14738, 14752, 14756, 14757, 14758, 14768, 14769, 14770, 14776, 14782, - 14794, 14793, 14806, 14807, 14811, 14812, 14816, 14831, 14832, 14833, - 14838, 14839, 14844, 14843, 14860, 14869, 14879, 14878, 14909, 14910, - 14914, 14915, 14919, 14920, 14921, 14922, 14924, 14923, 14936, 14937, - 14938, 14939, 14940, 14946, 14951, 14957, 14968, 14979, 14983, 14990, - 14999, 15001, 15006, 15011, 15018, 15030, 15042, 15049, 15061, 15062, - 15065, 15066, 15069, 15074, 15082, 15092, 15111, 15114, 15116, 15120, - 15121, 15128, 15130, 15134, 15135, 15140, 15139, 15143, 15142, 15146, - 15145, 15149, 15148, 15151, 15152, 15153, 15154, 15155, 15156, 15157, - 15158, 15159, 15160, 15161, 15162, 15163, 15164, 15165, 15166, 15167, - 15168, 15169, 15170, 15171, 15172, 15173, 15174, 15175, 15176, 15180, - 15181, 15185, 15186, 15190, 15197, 15204, 15214, 15225, 15234, 15243, - 15255, 15260, 15268, 15273, 15281, 15286, 15293, 15293, 15294, 15294, - 15297, 15304, 15309, 15315, 15321, 15327, 15331, 15335, 15336, 15340, - 15368, 15370, 15374, 15378, 15382, 15389, 15390, 15394, 15395, 15399, - 15400, 15404, 15405, 15411, 15417, 15423, 15429, 15439, 15438, 15448, - 15457, 15458, 15462, 15463, 15468, 15469, 15470, 15475, 15476, 15477, - 15481, 15482, 15486, 15498, 15507, 15517, 15526, 15540, 15541, 15546, - 15545, 15561, 15562, 15566, 15567, 15571, 15571, 15592, 15593, 15597, - 15598, 15599, 15603, 15608, 15616, 15619, 15617, 15632, 15639, 15660, - 15684, 15686, 15690, 15691, 15695, 15696, 15704, 15705, 15706, 15707, - 15713, 15719, 15729, 15731, 15733, 15738, 15739, 15740, 15741, 15742, - 15746, 15747, 15748, 15749, 15750, 15751, 15761, 15762, 15767, 15780, - 15796, 15798, 15800, 15806, 15807, 15809, 15815, 15814, 15833, 15834, - 15838, 15844, 15853, 15853, 15877, 15878, 15883, 15884, 15886, 15888, - 15902, 15911, 15917, 15922, 15899, 15972, 15973, 15977, 15997, 16018, - 16022, 16028, 16034, 15993, 16093, 16105, 16114, 16118, 16092, 16135, - 16139, 16143, 16147, 16151, 16155, 16162, 16169, 16176, 16186, 16187, - 16191, 16192, 16193, 16197, 16198, 16203, 16205, 16204, 16210, 16211, - 16215, 16222, 16232, 16238, 16249 + 0, 2025, 2025, 2035, 2034, 2059, 2066, 2068, 2072, 2073, + 2074, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, + 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, + 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, + 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, + 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, + 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2138, 2147, 2148, + 2152, 2161, 2167, 2177, 2176, 2186, 2188, 2192, 2193, 2197, + 2211, 2210, 2227, 2226, 2235, 2236, 2240, 2244, 2248, 2252, + 2256, 2260, 2265, 2269, 2273, 2277, 2281, 2285, 2290, 2294, + 2299, 2326, 2330, 2334, 2339, 2342, 2344, 2345, 2349, 2355, + 2357, 2358, 2362, 2368, 2370, 2371, 2375, 2382, 2386, 2401, + 2405, 2411, 2417, 2423, 2433, 2437, 2441, 2455, 2454, 2493, + 2490, 2503, 2501, 2513, 2511, 2522, 2521, 2534, 2533, 2542, + 2547, 2553, 2557, 2561, 2561, 2568, 2567, 2579, 2580, 2584, + 2589, 2594, 2599, 2604, 2609, 2614, 2622, 2621, 2653, 2652, + 2659, 2666, 2667, 2673, 2679, 2689, 2695, 2701, 2703, 2710, + 2711, 2715, 2725, 2726, 2734, 2734, 2778, 2792, 2803, 2821, + 2822, 2826, 2827, 2832, 2834, 2836, 2838, 2840, 2842, 2844, + 2850, 2851, 2855, 2859, 2867, 2866, 2879, 2881, 2884, 2886, + 2890, 2894, 2901, 2903, 2907, 2908, 2913, 2912, 2945, 2947, + 2951, 2952, 2956, 2960, 2961, 2962, 2963, 2967, 2968, 2972, + 2973, 2978, 2981, 3000, 2999, 3071, 3084, 3083, 3142, 3164, + 3164, 3183, 3184, 3189, 3191, 3196, 3211, 3219, 3223, 3242, + 3243, 3247, 3251, 3257, 3263, 3269, 3278, 3292, 3307, 3313, + 3314, 3320, 3323, 3327, 3335, 3352, 3354, 3372, 3378, 3380, + 3382, 3384, 3386, 3388, 3390, 3392, 3394, 3396, 3398, 3400, + 3405, 3420, 3436, 3437, 3442, 3448, 3457, 3463, 3472, 3480, + 3489, 3498, 3500, 3509, 3514, 3520, 3529, 3537, 3539, 3541, + 3543, 3545, 3547, 3549, 3551, 3553, 3555, 3557, 3559, 3561, + 3566, 3578, 3593, 3594, 3598, 3599, 3600, 3601, 3602, 3603, + 3604, 3605, 3606, 3607, 3608, 3612, 3613, 3614, 3615, 3620, + 3619, 3630, 3630, 3683, 3682, 3707, 3757, 3798, 3817, 3816, + 3836, 3853, 3855, 3856, 3860, 3874, 3891, 3893, 3909, 3891, + 3928, 3930, 3931, 3936, 3935, 4005, 4007, 4005, 4016, 4021, + 4022, 4026, 4027, 4032, 4036, 4031, 4057, 4061, 4056, 4080, + 4090, 4094, 4095, 4100, 4099, 4121, 4120, 4130, 4129, 4140, + 4140, 4180, 4195, 4194, 4226, 4225, 4245, 4259, 4268, 4267, + 4275, 4274, 4283, 4282, 4293, 4292, 4301, 4300, 4310, 4309, + 4320, 4322, 4327, 4329, 4331, 4348, 4353, 4359, 4366, 4367, + 4375, 4381, 4390, 4396, 4402, 4403, 4407, 4407, 4412, 4413, + 4414, 4418, 4419, 4420, 4424, 4428, 4429, 4430, 4434, 4435, + 4436, 4437, 4438, 4439, 4440, 4441, 4445, 4449, 4450, 4451, + 4455, 4456, 4457, 4458, 4459, 4463, 4467, 4468, 4469, 4473, + 4474, 4475, 4476, 4477, 4478, 4479, 4483, 4487, 4488, 4489, + 4493, 4494, 4495, 4500, 4508, 4516, 4524, 4537, 4550, 4555, + 4560, 4568, 4576, 4584, 4592, 4600, 4608, 4616, 4626, 4636, + 4646, 4648, 4652, 4657, 4667, 4668, 4707, 4706, 4709, 4715, + 4715, 4716, 4730, 4731, 4735, 4737, 4736, 4740, 4739, 4745, + 4782, 4783, 4788, 4787, 4806, 4821, 4820, 4837, 4841, 4849, + 4848, 4851, 4853, 4855, 4857, 4862, 4863, 4869, 4870, 4887, + 4888, 4892, 4893, 4897, 4913, 4923, 4934, 4943, 4944, 4957, + 4959, 4958, 4963, 4961, 4972, 4973, 4977, 4992, 5008, 5009, + 5022, 5031, 5053, 5054, 5059, 5058, 5083, 5095, 5107, 5106, + 5121, 5120, 5137, 5159, 5163, 5192, 5204, 5205, 5210, 5221, + 5209, 5246, 5247, 5251, 5264, 5285, 5298, 5324, 5325, 5330, + 5329, 5367, 5376, 5377, 5381, 5382, 5386, 5388, 5394, 5400, + 5402, 5404, 5406, 5408, 5410, 5420, 5435, 5419, 5449, 5450, + 5454, 5455, 5459, 5460, 5464, 5465, 5470, 5473, 5481, 5484, + 5491, 5495, 5501, 5503, 5507, 5508, 5512, 5513, 5514, 5518, + 5523, 5528, 5533, 5538, 5543, 5548, 5553, 5568, 5574, 5589, + 5594, 5609, 5615, 5633, 5638, 5643, 5648, 5653, 5658, 5664, + 5663, 5689, 5690, 5691, 5696, 5701, 5706, 5708, 5710, 5712, + 5718, 5723, 5728, 5736, 5744, 5750, 5759, 5767, 5784, 5805, + 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5826, 5827, 5828, + 5832, 5833, 5834, 5835, 5840, 5847, 5848, 5852, 5853, 5857, + 5858, 5863, 5862, 5870, 5869, 5877, 5876, 5884, 5883, 5893, + 5890, 5901, 5899, 5908, 5907, 5942, 5945, 5947, 5951, 5955, + 5956, 5960, 5965, 5978, 5964, 5997, 5998, 6004, 6005, 6010, + 6013, 6017, 6024, 6025, 6029, 6030, 6034, 6040, 6046, 6050, + 6063, 6080, 6081, 6082, 6097, 6102, 6106, 6111, 6116, 6120, + 6125, 6130, 6136, 6141, 6147, 6151, 6156, 6161, 6179, 6181, + 6184, 6201, 6204, 6209, 6214, 6225, 6230, 6235, 6240, 6242, + 6244, 6246, 6248, 6250, 6252, 6254, 6256, 6258, 6260, 6262, + 6271, 6272, 6273, 6279, 6280, 6281, 6282, 6283, 6287, 6291, + 6292, 6296, 6297, 6301, 6302, 6303, 6304, 6305, 6309, 6310, + 6311, 6312, 6313, 6317, 6322, 6324, 6330, 6332, 6340, 6341, + 6343, 6348, 6357, 6358, 6362, 6363, 6367, 6368, 6369, 6373, + 6374, 6375, 6376, 6379, 6380, 6384, 6385, 6389, 6390, 6394, + 6395, 6399, 6400, 6401, 6402, 6409, 6410, 6416, 6422, 6428, + 6434, 6435, 6442, 6450, 6458, 6464, 6473, 6488, 6494, 6499, + 6500, 6504, 6509, 6513, 6514, 6518, 6519, 6523, 6529, 6533, + 6534, 6538, 6546, 6547, 6551, 6552, 6556, 6557, 6561, 6562, + 6563, 6571, 6572, 6573, 6574, 6575, 6579, 6580, 6585, 6584, + 6597, 6598, 6602, 6605, 6606, 6607, 6608, 6612, 6620, 6627, + 6628, 6632, 6642, 6643, 6647, 6648, 6651, 6653, 6657, 6669, + 6670, 6674, 6681, 6694, 6695, 6697, 6699, 6705, 6710, 6716, + 6722, 6729, 6739, 6740, 6741, 6742, 6743, 6747, 6748, 6752, + 6753, 6757, 6758, 6762, 6763, 6764, 6768, 6769, 6773, 6777, + 6789, 6790, 6794, 6795, 6799, 6800, 6804, 6805, 6809, 6810, + 6814, 6815, 6819, 6820, 6824, 6825, 6826, 6829, 6831, 6836, + 6838, 6840, 6848, 6856, 6862, 6870, 6871, 6875, 6879, 6880, + 6890, 6891, 6892, 6896, 6900, 6907, 6913, 6925, 6926, 6930, + 6931, 6935, 6937, 6946, 6960, 6945, 6980, 6979, 6993, 7002, + 7001, 7017, 7016, 7032, 7031, 7047, 7041, 7058, 7057, 7092, + 7097, 7102, 7107, 7113, 7112, 7121, 7122, 7123, 7124, 7128, + 7129, 7141, 7142, 7146, 7147, 7150, 7152, 7160, 7168, 7170, + 7172, 7173, 7181, 7182, 7188, 7197, 7195, 7208, 7221, 7220, + 7233, 7231, 7244, 7251, 7261, 7262, 7289, 7296, 7300, 7306, + 7304, 7323, 7325, 7330, 7338, 7337, 7353, 7357, 7356, 7368, + 7369, 7373, 7389, 7390, 7394, 7402, 7406, 7411, 7416, 7423, + 7430, 7440, 7450, 7461, 7471, 7477, 7483, 7492, 7502, 7518, + 7532, 7542, 7546, 7551, 7552, 7555, 7557, 7558, 7559, 7560, + 7563, 7568, 7576, 7581, 7589, 7590, 7594, 7595, 7599, 7599, + 7602, 7604, 7608, 7609, 7613, 7614, 7622, 7623, 7624, 7628, + 7629, 7634, 7642, 7643, 7644, 7645, 7650, 7649, 7659, 7658, + 7665, 7672, 7682, 7699, 7702, 7709, 7713, 7720, 7724, 7728, + 7735, 7735, 7741, 7742, 7746, 7747, 7748, 7752, 7753, 7762, + 7769, 7770, 7775, 7774, 7786, 7787, 7788, 7792, 7793, 7793, + 7798, 7797, 7818, 7819, 7823, 7824, 7828, 7829, 7830, 7834, + 7835, 7840, 7839, 7860, 7861, 7865, 7870, 7871, 7878, 7880, + 7884, 7886, 7885, 7897, 7899, 7898, 7911, 7912, 7917, 7926, + 7927, 7928, 7932, 7939, 7949, 7957, 7958, 7958, 7962, 7961, + 7984, 7985, 7989, 7990, 7994, 7995, 7996, 7997, 7998, 7999, + 8003, 8004, 8009, 8008, 8029, 8030, 8031, 8036, 8035, 8041, + 8048, 8054, 8063, 8064, 8068, 8082, 8081, 8094, 8095, 8099, + 8100, 8104, 8114, 8124, 8125, 8130, 8129, 8140, 8141, 8145, + 8146, 8150, 8160, 8171, 8170, 8178, 8178, 8187, 8188, 8193, + 8194, 8203, 8212, 8213, 8217, 8217, 8229, 8234, 8234, 8243, + 8248, 8247, 8262, 8266, 8267, 8288, 8288, 8302, 8313, 8316, + 8318, 8322, 8328, 8335, 8337, 8345, 8346, 8350, 8351, 8368, + 8387, 8389, 8396, 8407, 8408, 8409, 8423, 8428, 8450, 8456, + 8462, 8468, 8469, 8470, 8471, 8472, 8476, 8477, 8478, 8482, + 8483, 8484, 8488, 8489, 8494, 8545, 8552, 8595, 8601, 8607, + 8613, 8619, 8625, 8631, 8637, 8641, 8647, 8653, 8659, 8665, + 8671, 8675, 8681, 8690, 8696, 8704, 8710, 8720, 8726, 8735, + 8745, 8752, 8762, 8768, 8777, 8781, 8787, 8793, 8799, 8805, + 8811, 8817, 8823, 8829, 8835, 8841, 8847, 8853, 8859, 8865, + 8869, 8870, 8874, 8875, 8879, 8880, 8884, 8885, 8889, 8890, + 8891, 8892, 8893, 8894, 8898, 8899, 8904, 8910, 8914, 8921, + 8928, 8935, 8942, 8949, 8955, 8954, 8962, 8969, 8976, 8984, + 8995, 9017, 9024, 9032, 9033, 9034, 9035, 9036, 9037, 9048, + 9049, 9050, 9051, 9052, 9058, 9062, 9068, 9074, 9080, 9086, + 9088, 9095, 9102, 9108, 9132, 9142, 9149, 9157, 9163, 9170, + 9176, 9186, 9193, 9209, 9215, 9221, 9230, 9239, 9245, 9251, + 9257, 9263, 9277, 9288, 9294, 9300, 9306, 9312, 9318, 9325, + 9332, 9338, 9344, 9350, 9356, 9362, 9368, 9374, 9380, 9386, + 9394, 9415, 9422, 9428, 9435, 9442, 9449, 9456, 9462, 9468, + 9475, 9481, 9488, 9494, 9500, 9506, 9512, 9518, 9536, 9542, + 9548, 9555, 9562, 9570, 9577, 9584, 9591, 9598, 9615, 9621, + 9627, 9633, 9639, 9646, 9652, 9658, 9664, 9670, 9676, 9682, + 9689, 9697, 9703, 9709, 9715, 9721, 9729, 9735, 9749, 9755, + 9761, 9769, 9781, 9788, 9803, 9809, 9816, 9823, 9830, 9837, + 9844, 9848, 9868, 9867, 9939, 9977, 9979, 9984, 9985, 9989, + 9990, 9994, 9995, 9999, 10006, 10014, 10041, 10047, 10053, 10059, + 10065, 10071, 10080, 10087, 10089, 10086, 10096, 10107, 10113, 10119, + 10125, 10131, 10137, 10143, 10149, 10155, 10162, 10161, 10181, 10180, + 10192, 10202, 10210, 10226, 10227, 10232, 10237, 10240, 10243, 10242, + 10258, 10260, 10266, 10265, 10282, 10285, 10284, 10288, 10290, 10292, + 10294, 10296, 10298, 10300, 10302, 10308, 10314, 10317, 10316, 10322, + 10323, 10327, 10334, 10342, 10343, 10347, 10354, 10362, 10363, 10367, + 10368, 10372, 10380, 10391, 10392, 10404, 10415, 10416, 10422, 10423, + 10443, 10447, 10445, 10463, 10461, 10472, 10482, 10480, 10498, 10497, + 10507, 10518, 10516, 10535, 10534, 10545, 10557, 10558, 10559, 10563, + 10564, 10572, 10573, 10577, 10592, 10592, 10607, 10643, 10728, 10739, + 10736, 10761, 10774, 10774, 10790, 10789, 10810, 10827, 10810, 10834, + 10838, 10861, 10862, 10867, 10870, 10871, 10872, 10876, 10877, 10882, + 10881, 10887, 10886, 10894, 10895, 10898, 10900, 10900, 10904, 10904, + 10909, 10910, 10914, 10916, 10921, 10922, 10926, 10937, 10950, 10951, + 10952, 10953, 10954, 10955, 10956, 10957, 10958, 10959, 10960, 10961, + 10965, 10966, 10967, 10968, 10969, 10970, 10971, 10972, 10973, 10977, + 10978, 10979, 10980, 10983, 10985, 10986, 10990, 10991, 10999, 11001, + 11005, 11007, 11006, 11020, 11023, 11022, 11037, 11043, 11057, 11059, + 11063, 11065, 11070, 11071, 11088, 11110, 11114, 11115, 11119, 11131, + 11133, 11138, 11137, 11187, 11189, 11194, 11195, 11196, 11200, 11201, + 11205, 11218, 11225, 11230, 11237, 11244, 11251, 11261, 11288, 11292, + 11298, 11304, 11313, 11321, 11325, 11332, 11333, 11337, 11338, 11339, + 11343, 11344, 11345, 11346, 11347, 11348, 11352, 11353, 11354, 11355, + 11356, 11360, 11361, 11362, 11363, 11364, 11368, 11369, 11370, 11371, + 11372, 11376, 11381, 11382, 11386, 11387, 11391, 11393, 11392, 11430, + 11431, 11435, 11436, 11440, 11450, 11450, 11461, 11462, 11465, 11485, + 11489, 11503, 11504, 11509, 11508, 11518, 11528, 11517, 11530, 11543, + 11555, 11554, 11572, 11571, 11580, 11580, 11597, 11603, 11618, 11634, + 11642, 11646, 11651, 11650, 11659, 11664, 11670, 11675, 11680, 11688, + 11689, 11693, 11704, 11717, 11718, 11722, 11734, 11738, 11747, 11750, + 11757, 11758, 11766, 11774, 11765, 11784, 11791, 11783, 11801, 11809, + 11810, 11818, 11822, 11823, 11834, 11835, 11839, 11848, 11849, 11850, + 11852, 11851, 11862, 11864, 11868, 11869, 11871, 11870, 11874, 11873, + 11879, 11880, 11884, 11885, 11889, 11899, 11900, 11904, 11905, 11910, + 11909, 11923, 11924, 11928, 11933, 11941, 11942, 11950, 11952, 11952, + 11960, 11968, 11959, 11990, 11991, 11995, 12003, 12004, 12008, 12018, + 12019, 12026, 12025, 12041, 12052, 12040, 12055, 12054, 12066, 12065, + 12078, 12080, 12084, 12085, 12089, 12102, 12118, 12119, 12123, 12124, + 12128, 12129, 12130, 12135, 12134, 12155, 12157, 12160, 12162, 12165, + 12166, 12169, 12173, 12177, 12181, 12185, 12189, 12193, 12197, 12201, + 12209, 12212, 12222, 12221, 12237, 12244, 12252, 12260, 12268, 12276, + 12284, 12291, 12298, 12304, 12306, 12308, 12317, 12321, 12326, 12325, + 12332, 12331, 12336, 12345, 12352, 12357, 12362, 12367, 12369, 12371, + 12373, 12375, 12377, 12384, 12392, 12394, 12402, 12409, 12416, 12423, + 12429, 12434, 12442, 12450, 12454, 12459, 12466, 12471, 12478, 12485, + 12491, 12498, 12505, 12510, 12515, 12520, 12527, 12549, 12551, 12553, + 12558, 12559, 12562, 12564, 12568, 12569, 12573, 12574, 12578, 12579, + 12583, 12584, 12588, 12589, 12593, 12594, 12602, 12614, 12613, 12629, + 12628, 12638, 12639, 12640, 12641, 12642, 12646, 12647, 12651, 12658, + 12659, 12660, 12664, 12665, 12677, 12678, 12679, 12694, 12693, 12706, + 12705, 12717, 12721, 12722, 12735, 12738, 12737, 12749, 12750, 12755, + 12757, 12759, 12761, 12763, 12765, 12773, 12775, 12777, 12779, 12784, + 12786, 12794, 12796, 12798, 12800, 12816, 12817, 12821, 12822, 12825, + 12827, 12828, 12832, 12839, 12840, 12844, 12843, 12853, 12854, 12858, + 12858, 12862, 12861, 12867, 12871, 12872, 12876, 12877, 12885, 12884, + 12895, 12899, 12903, 12916, 12915, 12930, 12931, 12932, 12935, 12936, + 12937, 12938, 12946, 12950, 12959, 12965, 12977, 12988, 12998, 13008, + 12976, 13016, 13017, 13021, 13022, 13026, 13027, 13035, 13039, 13040, + 13041, 13044, 13046, 13050, 13051, 13055, 13060, 13067, 13072, 13079, + 13081, 13085, 13086, 13090, 13095, 13103, 13104, 13107, 13109, 13117, + 13118, 13122, 13123, 13124, 13128, 13130, 13135, 13136, 13145, 13146, + 13150, 13151, 13155, 13168, 13192, 13204, 13211, 13230, 13238, 13243, + 13256, 13265, 13281, 13298, 13299, 13300, 13308, 13309, 13310, 13311, + 13325, 13331, 13337, 13343, 13349, 13355, 13373, 13383, 13393, 13399, + 13408, 13420, 13426, 13432, 13448, 13449, 13453, 13462, 13477, 13481, + 13524, 13528, 13545, 13549, 13621, 13645, 13675, 13676, 13686, 13693, + 13697, 13703, 13709, 13719, 13725, 13734, 13744, 13745, 13773, 13787, + 13801, 13816, 13817, 13827, 13828, 13838, 13839, 13840, 13844, 13857, + 13887, 13897, 13897, 13899, 13909, 13910, 13911, 13912, 13913, 13914, + 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13922, 13923, 13924, + 13925, 13926, 13927, 13928, 13929, 13930, 13931, 13932, 13933, 13934, + 13935, 13936, 13937, 13938, 13939, 13940, 13941, 13942, 13943, 13944, + 13945, 13946, 13947, 13948, 13949, 13950, 13951, 13952, 13953, 13954, + 13955, 13956, 13957, 13958, 13959, 13960, 13961, 13962, 13963, 13964, + 13965, 13966, 13967, 13968, 13969, 13979, 13980, 13981, 13982, 13983, + 13984, 13985, 13986, 13987, 13988, 13989, 13990, 13991, 13992, 13993, + 13994, 13995, 13996, 13997, 13998, 13999, 14000, 14001, 14002, 14003, + 14004, 14005, 14006, 14007, 14008, 14009, 14010, 14011, 14012, 14013, + 14014, 14015, 14016, 14017, 14018, 14019, 14020, 14021, 14022, 14023, + 14024, 14025, 14026, 14027, 14028, 14033, 14034, 14035, 14036, 14037, + 14038, 14039, 14040, 14041, 14042, 14043, 14044, 14045, 14046, 14047, + 14048, 14049, 14050, 14051, 14052, 14053, 14054, 14055, 14056, 14057, + 14058, 14059, 14060, 14061, 14062, 14063, 14064, 14065, 14066, 14067, + 14068, 14069, 14070, 14071, 14072, 14073, 14074, 14075, 14076, 14077, + 14078, 14079, 14080, 14081, 14082, 14083, 14084, 14085, 14086, 14087, + 14088, 14089, 14090, 14091, 14092, 14093, 14094, 14095, 14096, 14097, + 14098, 14099, 14100, 14101, 14102, 14103, 14104, 14105, 14106, 14107, + 14108, 14109, 14110, 14111, 14112, 14113, 14114, 14115, 14116, 14117, + 14118, 14119, 14120, 14121, 14122, 14123, 14124, 14125, 14126, 14127, + 14128, 14129, 14130, 14131, 14132, 14133, 14134, 14135, 14136, 14137, + 14138, 14139, 14140, 14141, 14142, 14143, 14144, 14145, 14146, 14147, + 14148, 14149, 14150, 14151, 14152, 14153, 14154, 14155, 14156, 14157, + 14158, 14159, 14160, 14161, 14162, 14163, 14164, 14165, 14166, 14167, + 14168, 14169, 14170, 14171, 14172, 14173, 14174, 14175, 14176, 14177, + 14178, 14179, 14180, 14181, 14182, 14183, 14184, 14185, 14186, 14187, + 14188, 14189, 14190, 14191, 14192, 14193, 14194, 14195, 14196, 14197, + 14198, 14199, 14200, 14201, 14202, 14203, 14204, 14205, 14206, 14207, + 14208, 14209, 14210, 14211, 14212, 14213, 14214, 14215, 14216, 14217, + 14218, 14219, 14220, 14221, 14222, 14223, 14224, 14225, 14226, 14227, + 14228, 14229, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, + 14238, 14239, 14240, 14241, 14242, 14243, 14244, 14245, 14246, 14247, + 14248, 14249, 14250, 14251, 14252, 14253, 14254, 14255, 14256, 14257, + 14258, 14259, 14260, 14261, 14262, 14263, 14264, 14265, 14266, 14267, + 14268, 14269, 14270, 14271, 14272, 14273, 14274, 14275, 14276, 14277, + 14278, 14279, 14280, 14281, 14282, 14283, 14284, 14285, 14286, 14287, + 14288, 14289, 14290, 14291, 14303, 14302, 14315, 14323, 14314, 14340, + 14341, 14346, 14345, 14352, 14351, 14361, 14360, 14371, 14370, 14376, + 14384, 14386, 14391, 14391, 14400, 14399, 14413, 14412, 14417, 14421, + 14422, 14423, 14427, 14428, 14429, 14430, 14434, 14435, 14436, 14437, + 14442, 14466, 14492, 14503, 14515, 14529, 14544, 14563, 14580, 14592, + 14600, 14616, 14642, 14679, 14693, 14694, 14695, 14696, 14700, 14718, + 14736, 14737, 14741, 14742, 14743, 14744, 14748, 14762, 14766, 14767, + 14768, 14778, 14779, 14780, 14786, 14792, 14804, 14803, 14816, 14817, + 14821, 14822, 14826, 14841, 14842, 14843, 14848, 14849, 14854, 14853, + 14870, 14879, 14889, 14888, 14919, 14920, 14924, 14925, 14929, 14930, + 14931, 14932, 14934, 14933, 14946, 14947, 14948, 14949, 14950, 14956, + 14961, 14967, 14978, 14989, 14993, 15000, 15009, 15011, 15016, 15021, + 15028, 15040, 15052, 15059, 15071, 15072, 15075, 15076, 15079, 15084, + 15092, 15102, 15121, 15124, 15126, 15130, 15131, 15138, 15140, 15144, + 15145, 15150, 15149, 15153, 15152, 15156, 15155, 15159, 15158, 15161, + 15162, 15163, 15164, 15165, 15166, 15167, 15168, 15169, 15170, 15171, + 15172, 15173, 15174, 15175, 15176, 15177, 15178, 15179, 15180, 15181, + 15182, 15183, 15184, 15185, 15186, 15190, 15191, 15195, 15196, 15200, + 15207, 15214, 15224, 15235, 15244, 15253, 15265, 15270, 15278, 15283, + 15291, 15296, 15303, 15303, 15304, 15304, 15307, 15314, 15319, 15325, + 15331, 15337, 15341, 15345, 15346, 15350, 15378, 15380, 15384, 15388, + 15392, 15399, 15400, 15404, 15405, 15409, 15410, 15414, 15415, 15421, + 15427, 15433, 15439, 15449, 15448, 15458, 15467, 15468, 15472, 15473, + 15478, 15479, 15480, 15485, 15486, 15487, 15491, 15492, 15496, 15508, + 15517, 15527, 15536, 15550, 15551, 15556, 15555, 15571, 15572, 15576, + 15577, 15581, 15581, 15602, 15603, 15607, 15608, 15609, 15613, 15618, + 15626, 15629, 15627, 15642, 15649, 15670, 15694, 15696, 15700, 15701, + 15705, 15706, 15714, 15715, 15716, 15717, 15723, 15729, 15739, 15741, + 15743, 15748, 15749, 15750, 15751, 15752, 15756, 15757, 15758, 15759, + 15760, 15761, 15771, 15772, 15777, 15790, 15806, 15808, 15810, 15816, + 15817, 15819, 15825, 15824, 15843, 15844, 15848, 15854, 15863, 15863, + 15887, 15888, 15893, 15894, 15896, 15898, 15912, 15921, 15927, 15932, + 15909, 15982, 15983, 15987, 16007, 16028, 16032, 16038, 16044, 16003, + 16103, 16115, 16124, 16128, 16102, 16145, 16149, 16153, 16157, 16161, + 16165, 16172, 16179, 16186, 16196, 16197, 16201, 16202, 16203, 16207, + 16208, 16213, 16215, 16214, 16220, 16221, 16225, 16232, 16242, 16248, + 16259 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -4200,25 +3095,26 @@ "DATE_SUB_INTERVAL", "DATE_SYM", "DAY_HOUR_SYM", "DAY_MICROSECOND_SYM", "DAY_MINUTE_SYM", "DAY_SECOND_SYM", "DAY_SYM", "DEALLOCATE_SYM", "DECIMAL_NUM", "DECIMAL_SYM", "DECLARE_SYM", "DEFAULT", "DEFINER_SYM", - "DELAYED_SYM", "DELAY_KEY_WRITE_SYM", "DELETE_SYM", "DESC", "DESCRIBE", - "DES_KEY_FILE", "DETERMINISTIC_SYM", "DIAGNOSTICS_SYM", "DIRECTORY_SYM", - "DISABLE_SYM", "DISCARD", "DISK_SYM", "DISTINCT", "DIV_SYM", - "DOUBLE_SYM", "DO_DOMAIN_IDS_SYM", "DO_SYM", "DROP", "DUAL_SYM", - "DUMPFILE", "DUPLICATE_SYM", "DYNAMIC_SYM", "EACH_SYM", "ELSE", - "ELSEIF_SYM", "ENABLE_SYM", "ENCLOSED", "END", "ENDS_SYM", - "END_OF_INPUT", "ENGINES_SYM", "ENGINE_SYM", "ENUM", "EQUAL_SYM", - "ERROR_SYM", "ERRORS", "ESCAPED", "ESCAPE_SYM", "EVENTS_SYM", - "EVENT_SYM", "EVERY_SYM", "EXCHANGE_SYM", "EXAMINED_SYM", "EXECUTE_SYM", - "EXISTS", "EXIT_SYM", "EXPANSION_SYM", "EXPORT_SYM", "EXTENDED_SYM", - "EXTENT_SIZE_SYM", "EXTRACT_SYM", "FALSE_SYM", "FAST_SYM", "FAULTS_SYM", - "FETCH_SYM", "FILE_SYM", "FIRST_SYM", "FIXED_SYM", "FLOAT_NUM", - "FLOAT_SYM", "FLUSH_SYM", "FORCE_SYM", "FOREIGN", "FOR_SYM", - "FORMAT_SYM", "FOUND_SYM", "FROM", "FULL", "FULLTEXT_SYM", - "FUNCTION_SYM", "GE", "GENERAL", "GENERATED_SYM", "GEOMETRYCOLLECTION", - "GEOMETRY_SYM", "GET_FORMAT", "GET_SYM", "GLOBAL_SYM", "GRANT", "GRANTS", - "GROUP_SYM", "GROUP_CONCAT_SYM", "HANDLER_SYM", "HARD_SYM", "HASH_SYM", - "HAVING", "HELP_SYM", "HEX_NUM", "HEX_STRING", "HIGH_PRIORITY", - "HOST_SYM", "HOSTS_SYM", "HOUR_MICROSECOND_SYM", "HOUR_MINUTE_SYM", + "DELAYED_SYM", "DELAY_KEY_WRITE_SYM", "DELETE_SYM", + "DELETE_DOMAIN_ID_SYM", "DESC", "DESCRIBE", "DES_KEY_FILE", + "DETERMINISTIC_SYM", "DIAGNOSTICS_SYM", "DIRECTORY_SYM", "DISABLE_SYM", + "DISCARD", "DISK_SYM", "DISTINCT", "DIV_SYM", "DOUBLE_SYM", + "DO_DOMAIN_IDS_SYM", "DO_SYM", "DROP", "DUAL_SYM", "DUMPFILE", + "DUPLICATE_SYM", "DYNAMIC_SYM", "EACH_SYM", "ELSE", "ELSEIF_SYM", + "ENABLE_SYM", "ENCLOSED", "END", "ENDS_SYM", "END_OF_INPUT", + "ENGINES_SYM", "ENGINE_SYM", "ENUM", "EQUAL_SYM", "ERROR_SYM", "ERRORS", + "ESCAPED", "ESCAPE_SYM", "EVENTS_SYM", "EVENT_SYM", "EVERY_SYM", + "EXCHANGE_SYM", "EXAMINED_SYM", "EXECUTE_SYM", "EXISTS", "EXIT_SYM", + "EXPANSION_SYM", "EXPORT_SYM", "EXTENDED_SYM", "EXTENT_SIZE_SYM", + "EXTRACT_SYM", "FALSE_SYM", "FAST_SYM", "FAULTS_SYM", "FETCH_SYM", + "FILE_SYM", "FIRST_SYM", "FIXED_SYM", "FLOAT_NUM", "FLOAT_SYM", + "FLUSH_SYM", "FORCE_SYM", "FOREIGN", "FOR_SYM", "FORMAT_SYM", + "FOUND_SYM", "FROM", "FULL", "FULLTEXT_SYM", "FUNCTION_SYM", "GE", + "GENERAL", "GENERATED_SYM", "GEOMETRYCOLLECTION", "GEOMETRY_SYM", + "GET_FORMAT", "GET_SYM", "GLOBAL_SYM", "GRANT", "GRANTS", "GROUP_SYM", + "GROUP_CONCAT_SYM", "HANDLER_SYM", "HARD_SYM", "HASH_SYM", "HAVING", + "HELP_SYM", "HEX_NUM", "HEX_STRING", "HIGH_PRIORITY", "HOST_SYM", + "HOSTS_SYM", "HOUR_MICROSECOND_SYM", "HOUR_MINUTE_SYM", "HOUR_SECOND_SYM", "HOUR_SYM", "ID_SYM", "IDENT", "IDENTIFIED_SYM", "IDENT_QUOTED", "IF_SYM", "IGNORE_DOMAIN_IDS_SYM", "IGNORE_SYM", "IGNORE_SERVER_IDS_SYM", "IMPORT", "INDEXES", "INDEX_SYM", "INFILE", @@ -4516,6 +3412,7 @@ "opt_format_json", "opt_describe_column", "flush", "$@173", "flush_options", "$@174", "opt_flush_lock", "flush_lock", "$@175", "flush_options_list", "flush_option", "opt_table_list", + "opt_delete_gtid_domain", "delete_domain_id_list", "delete_domain_id", "optional_flush_tables_arguments", "reset", "$@176", "reset_options", "reset_option", "$@177", "$@178", "slave_reset_options", "master_reset_options", "purge", "$@179", "purge_options", @@ -4574,13 +3471,13 @@ "$@214", "$@215", "$@216", "$@217", "sp_tail", "$@218", "$@219", "$@220", "$@221", "xa", "xid", "begin_or_start", "opt_join_or_resume", "opt_one_phase", "opt_suspend", "$@222", "opt_migrate", "install", - "uninstall", "keep_gcc_happy", 0 + "uninstall", "keep_gcc_happy", YY_NULLPTR }; #endif # ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, @@ -4647,754 +3544,679 @@ 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 61, 62, 60, 124, 38, 45, - 43, 42, 47, 37, 94, 126, 40, 41, 44, 33, - 123, 125, 59, 64, 46, 58 + 895, 896, 897, 898, 899, 61, 62, 60, 124, 38, + 45, 43, 42, 47, 37, 94, 126, 40, 41, 44, + 33, 123, 125, 59, 64, 46, 58 }; # endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = +#define YYPACT_NINF -4291 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-4291))) + +#define YYTABLE_NINF -2800 + +#define yytable_value_is_error(Yytable_value) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const int yypact[] = { - 0, 666, 667, 668, 667, 667, 669, 669, 670, 670, - 670, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 672, 673, 673, - 674, 675, 675, 677, 676, 678, 678, 679, 679, 680, - 682, 681, 684, 683, 685, 685, 686, 686, 686, 686, - 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, - 686, 686, 686, 686, 686, 687, 687, 687, 688, 689, - 689, 689, 690, 691, 691, 691, 692, 693, 693, 693, - 693, 693, 693, 693, 694, 694, 695, 697, 696, 698, - 696, 699, 696, 700, 696, 701, 696, 702, 696, 696, - 696, 696, 696, 703, 696, 705, 704, 706, 706, 707, - 707, 707, 707, 707, 707, 707, 709, 708, 711, 710, - 710, 712, 712, 712, 712, 713, 713, 714, 714, 715, - 715, 716, 717, 717, 719, 718, 720, 721, 721, 722, - 722, 723, 723, 724, 724, 724, 724, 724, 724, 724, - 725, 725, 726, 726, 728, 727, 729, 729, 730, 730, - 731, 731, 732, 732, 733, 733, 735, 734, 736, 736, - 737, 737, 738, 739, 739, 739, 739, 740, 740, 741, - 741, 742, 742, 744, 743, 743, 745, 743, 743, 747, - 746, 748, 748, 749, 749, 750, 751, 751, 752, 753, - 753, 754, 754, 754, 754, 754, 755, 756, 756, 757, - 757, 758, 758, 759, 759, 760, 760, 760, 761, 761, - 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, - 762, 763, 764, 764, 765, 765, 766, 766, 767, 768, - 768, 769, 769, 770, 771, 771, 772, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, - 774, 774, 775, 775, 776, 776, 776, 776, 776, 776, - 776, 776, 776, 776, 776, 777, 777, 777, 777, 779, - 778, 781, 780, 783, 782, 784, 785, 786, 788, 787, - 789, 790, 790, 790, 791, 791, 793, 794, 795, 792, - 796, 796, 796, 798, 797, 800, 801, 799, 799, 802, - 802, 803, 803, 805, 806, 804, 808, 809, 807, 810, - 810, 811, 811, 813, 812, 815, 814, 817, 816, 819, - 818, 820, 822, 821, 824, 823, 825, 826, 828, 827, - 829, 827, 830, 827, 832, 831, 833, 831, 834, 831, - 835, 835, 836, 836, 836, 837, 838, 839, 840, 840, - 841, 841, 842, 843, 844, 844, 846, 845, 847, 847, - 847, 848, 848, 848, 849, 850, 850, 850, 851, 851, - 851, 851, 851, 851, 851, 851, 852, 853, 853, 853, - 854, 854, 854, 854, 854, 855, 856, 856, 856, 857, - 857, 857, 857, 857, 857, 857, 858, 859, 859, 859, - 860, 860, 860, 861, 862, 863, 864, 865, 866, 866, - 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, - 876, 876, 877, 877, 878, 878, 880, 879, 879, 881, - 879, 879, 882, 882, 883, 884, 883, 885, 883, 886, - 887, 887, 889, 888, 890, 892, 891, 893, 894, 895, - 894, 894, 894, 894, 894, 896, 896, 897, 897, 898, - 898, 899, 899, 900, 901, 902, 903, 904, 904, 905, - 906, 905, 907, 905, 908, 908, 909, 910, 911, 911, - 912, 912, 913, 913, 915, 914, 916, 917, 918, 917, - 919, 917, 920, 920, 921, 921, 922, 922, 924, 925, - 923, 926, 926, 927, 927, 928, 928, 929, 929, 931, - 930, 932, 933, 933, 934, 934, 935, 935, 935, 935, - 935, 935, 935, 935, 935, 937, 938, 936, 939, 939, - 940, 940, 941, 941, 942, 942, 943, 943, 944, 944, - 945, 945, 946, 946, 947, 947, 948, 948, 948, 949, - 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, - 949, 949, 949, 949, 949, 949, 949, 949, 949, 950, - 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, - 949, 949, 949, 949, 949, 949, 951, 952, 953, 954, - 955, 955, 955, 955, 955, 955, 955, 956, 956, 956, - 957, 957, 957, 957, 958, 959, 959, 960, 960, 961, - 961, 963, 962, 964, 962, 965, 962, 966, 962, 967, - 962, 968, 962, 969, 962, 962, 970, 970, 971, 972, - 972, 973, 975, 976, 974, 977, 977, 978, 978, 979, - 979, 979, 980, 980, 981, 981, 982, 982, 982, 983, - 984, 985, 985, 985, 985, 985, 985, 985, 985, 985, - 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, - 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, - 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, - 986, 986, 986, 986, 986, 986, 986, 986, 987, 988, - 988, 989, 989, 990, 990, 990, 990, 990, 991, 991, - 991, 991, 991, 992, 992, 992, 993, 993, 994, 994, - 994, 995, 996, 996, 997, 997, 998, 998, 998, 999, - 999, 999, 999, 1000, 1000, 1001, 1001, 1002, 1002, 1003, - 1003, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, - 1004, 1004, 1004, 1004, 1004, 1004, 1005, 1006, 1006, 1007, - 1007, 1008, 1008, 1009, 1009, 1010, 1010, 1011, 1011, 1012, - 1012, 1013, 1014, 1014, 1015, 1015, 1016, 1016, 1017, 1017, - 1017, 1018, 1018, 1018, 1018, 1018, 1019, 1019, 1021, 1020, - 1022, 1022, 1023, 1024, 1024, 1024, 1024, 1025, 1026, 1027, - 1027, 1028, 1029, 1029, 1030, 1030, 1031, 1031, 1032, 1033, - 1033, 1034, 1034, 1035, 1035, 1035, 1035, 1036, 1036, 1036, - 1036, 1036, 1037, 1037, 1037, 1037, 1037, 1038, 1038, 1039, - 1039, 1040, 1040, 1041, 1041, 1041, 1042, 1042, 1043, 1044, - 1045, 1045, 1046, 1046, 1047, 1047, 1048, 1048, 1049, 1049, - 1050, 1050, 1051, 1051, 1052, 1052, 1052, 1053, 1053, 1054, - 1054, 1054, 1054, 1054, 1054, 1055, 1055, 1056, 1057, 1057, - 1058, 1058, 1058, 1059, 1059, 1060, 1060, 1061, 1061, 1062, - 1062, 1063, 1063, 1065, 1066, 1064, 1067, 1064, 1064, 1068, - 1064, 1069, 1064, 1070, 1064, 1071, 1064, 1072, 1064, 1064, - 1064, 1064, 1064, 1073, 1064, 1074, 1074, 1074, 1074, 1075, - 1075, 1076, 1076, 1077, 1077, 1078, 1078, 1078, 1078, 1078, - 1078, 1078, 1078, 1078, 1078, 1079, 1078, 1078, 1080, 1078, - 1081, 1078, 1078, 1078, 1078, 1078, 1082, 1083, 1083, 1085, - 1084, 1086, 1086, 1086, 1088, 1087, 1089, 1090, 1089, 1091, - 1091, 1092, 1093, 1093, 1094, 1095, 1095, 1095, 1095, 1095, - 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, - 1095, 1095, 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1096, - 1097, 1097, 1098, 1098, 1099, 1099, 1100, 1100, 1102, 1101, - 1103, 1103, 1104, 1104, 1105, 1105, 1106, 1106, 1106, 1107, - 1107, 1107, 1108, 1108, 1108, 1108, 1110, 1109, 1111, 1109, - 1109, 1109, 1112, 1113, 1113, 1114, 1114, 1115, 1115, 1115, - 1117, 1116, 1118, 1118, 1119, 1119, 1119, 1120, 1120, 1120, - 1121, 1121, 1123, 1122, 1124, 1124, 1124, 1125, 1126, 1125, - 1128, 1127, 1129, 1129, 1130, 1130, 1131, 1131, 1131, 1132, - 1132, 1134, 1133, 1135, 1135, 1136, 1137, 1137, 1138, 1138, - 1139, 1140, 1139, 1141, 1142, 1141, 1143, 1143, 1143, 1144, - 1144, 1144, 1145, 1145, 1146, 1147, 1148, 1147, 1150, 1149, - 1151, 1151, 1152, 1152, 1153, 1153, 1153, 1153, 1153, 1153, - 1154, 1154, 1156, 1155, 1157, 1157, 1157, 1159, 1158, 1158, - 1160, 1160, 1161, 1161, 1162, 1164, 1163, 1165, 1165, 1166, - 1166, 1167, 1168, 1169, 1169, 1171, 1170, 1172, 1172, 1173, - 1173, 1174, 1175, 1177, 1176, 1179, 1178, 1180, 1180, 1181, - 1181, 1182, 1183, 1183, 1185, 1184, 1184, 1187, 1186, 1186, - 1189, 1188, 1190, 1190, 1190, 1192, 1191, 1193, 1194, 1195, - 1195, 1196, 1196, 1197, 1197, 1198, 1198, 1199, 1199, 1199, - 1200, 1200, 1200, 1201, 1201, 1201, 1202, 1202, 1203, 1204, - 1205, 1206, 1206, 1206, 1206, 1206, 1207, 1207, 1207, 1208, - 1208, 1208, 1209, 1209, 1210, 1210, 1210, 1210, 1210, 1210, - 1210, 1210, 1210, 1210, 1210, 1211, 1211, 1211, 1211, 1211, - 1211, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, - 1212, 1212, 1212, 1212, 1212, 1213, 1213, 1213, 1213, 1213, - 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, - 1214, 1214, 1215, 1215, 1216, 1216, 1217, 1217, 1218, 1218, - 1218, 1218, 1218, 1218, 1219, 1219, 1220, 1220, 1221, 1221, - 1221, 1221, 1221, 1221, 1222, 1221, 1221, 1221, 1221, 1221, - 1223, 1224, 1224, 1225, 1225, 1225, 1225, 1225, 1225, 1225, - 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, - 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, - 1225, 1225, 1225, 1226, 1226, 1226, 1226, 1226, 1226, 1226, - 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, - 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, - 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, - 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, - 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1228, 1228, - 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, - 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, - 1228, 1228, 1228, 1228, 1229, 1229, 1229, 1229, 1229, 1229, - 1229, 1229, 1231, 1230, 1230, 1232, 1232, 1233, 1233, 1234, - 1234, 1235, 1235, 1236, 1236, 1237, 1238, 1238, 1238, 1238, - 1238, 1238, 1238, 1239, 1240, 1238, 1238, 1238, 1238, 1238, - 1238, 1238, 1238, 1238, 1238, 1238, 1241, 1238, 1243, 1242, - 1244, 1244, 1244, 1245, 1245, 1246, 1246, 1247, 1248, 1247, - 1249, 1249, 1251, 1250, 1252, 1253, 1252, 1252, 1252, 1252, - 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1254, 1252, 1255, - 1255, 1256, 1256, 1257, 1257, 1258, 1258, 1259, 1259, 1260, - 1260, 1261, 1261, 1262, 1262, 1263, 1264, 1264, 1265, 1265, - 1266, 1267, 1266, 1268, 1266, 1266, 1269, 1266, 1270, 1266, - 1266, 1271, 1266, 1272, 1266, 1266, 1273, 1273, 1273, 1274, - 1274, 1275, 1275, 1276, 1278, 1277, 1277, 1277, 1279, 1280, - 1279, 1281, 1283, 1282, 1285, 1284, 1287, 1288, 1286, 1289, - 1290, 1291, 1291, 1292, 1292, 1292, 1292, 1293, 1293, 1295, - 1294, 1296, 1294, 1297, 1297, 1298, 1299, 1298, 1301, 1300, - 1302, 1302, 1303, 1303, 1304, 1304, 1305, 1305, 1306, 1306, - 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, - 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1308, - 1308, 1308, 1308, 1309, 1309, 1309, 1310, 1310, 1311, 1311, - 1312, 1313, 1312, 1314, 1315, 1314, 1316, 1316, 1317, 1317, - 1318, 1318, 1319, 1319, 1319, 1320, 1321, 1321, 1322, 1323, - 1323, 1325, 1324, 1326, 1326, 1327, 1327, 1327, 1328, 1328, - 1329, 1330, 1330, 1330, 1331, 1331, 1331, 1332, 1332, 1332, - 1332, 1332, 1333, 1334, 1334, 1334, 1334, 1335, 1335, 1335, - 1336, 1336, 1336, 1336, 1336, 1336, 1337, 1337, 1337, 1337, - 1337, 1338, 1338, 1338, 1338, 1338, 1339, 1339, 1339, 1339, - 1339, 1340, 1341, 1341, 1342, 1342, 1343, 1344, 1343, 1345, - 1345, 1346, 1346, 1347, 1349, 1348, 1350, 1350, 1351, 1352, - 1352, 1353, 1353, 1355, 1354, 1357, 1358, 1356, 1356, 1356, - 1360, 1359, 1362, 1361, 1363, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1364, 1361, 1361, 1361, 1361, 1361, 1361, 1365, - 1365, 1366, 1367, 1368, 1368, 1369, 1370, 1370, 1371, 1371, - 1372, 1372, 1374, 1375, 1373, 1377, 1378, 1376, 1379, 1379, - 1379, 1379, 1380, 1380, 1381, 1381, 1382, 1383, 1383, 1383, - 1384, 1383, 1385, 1385, 1386, 1386, 1387, 1386, 1388, 1386, - 1389, 1389, 1390, 1390, 1391, 1392, 1392, 1393, 1393, 1395, - 1394, 1396, 1396, 1397, 1397, 1398, 1398, 1399, 1400, 1399, - 1402, 1403, 1401, 1404, 1404, 1405, 1406, 1406, 1407, 1408, - 1408, 1410, 1409, 1412, 1413, 1411, 1414, 1411, 1415, 1411, - 1416, 1416, 1417, 1417, 1418, 1418, 1419, 1419, 1420, 1420, - 1421, 1421, 1421, 1423, 1422, 1424, 1424, 1425, 1425, 1426, - 1426, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, - 1428, 1428, 1430, 1429, 1431, 1431, 1431, 1431, 1431, 1431, - 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1432, 1431, - 1433, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, - 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, - 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, - 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1434, 1434, 1434, - 1435, 1435, 1436, 1436, 1437, 1437, 1438, 1438, 1439, 1439, - 1440, 1440, 1441, 1441, 1442, 1442, 1442, 1444, 1443, 1445, - 1443, 1446, 1446, 1446, 1446, 1446, 1447, 1447, 1448, 1449, - 1449, 1449, 1450, 1450, 1451, 1451, 1451, 1453, 1452, 1455, - 1454, 1454, 1456, 1456, 1457, 1458, 1457, 1459, 1459, 1460, - 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, - 1460, 1460, 1460, 1460, 1460, 1461, 1461, 1462, 1462, 1464, - 1463, 1465, 1465, 1467, 1466, 1468, 1466, 1466, 1469, 1469, - 1470, 1470, 1472, 1471, 1473, 1474, 1474, 1476, 1475, 1477, - 1477, 1477, 1478, 1478, 1478, 1478, 1479, 1479, 1480, 1481, - 1483, 1484, 1485, 1486, 1482, 1487, 1487, 1488, 1488, 1489, - 1489, 1489, 1490, 1490, 1490, 1491, 1491, 1492, 1492, 1493, - 1493, 1493, 1493, 1494, 1494, 1495, 1495, 1496, 1496, 1497, - 1497, 1498, 1498, 1499, 1499, 1500, 1500, 1500, 1501, 1501, - 1502, 1502, 1503, 1503, 1504, 1504, 1505, 1506, 1506, 1506, - 1506, 1507, 1507, 1508, 1508, 1508, 1509, 1510, 1510, 1510, - 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, - 1512, 1512, 1512, 1512, 1512, 1513, 1513, 1513, 1514, 1514, - 1515, 1515, 1516, 1517, 1517, 1518, 1518, 1519, 1519, 1519, - 1520, 1520, 1520, 1520, 1521, 1521, 1521, 1522, 1522, 1523, - 1524, 1524, 1525, 1526, 1527, 1528, 1528, 1529, 1529, 1530, - 1530, 1530, 1531, 1531, 1531, 1532, 1532, 1533, 1534, 1534, - 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, - 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, - 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, - 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, - 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, - 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, - 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1537, 1536, - 1538, 1539, 1536, 1540, 1540, 1542, 1541, 1543, 1541, 1544, - 1541, 1546, 1545, 1545, 1547, 1547, 1549, 1548, 1550, 1548, - 1552, 1551, 1551, 1553, 1553, 1553, 1554, 1554, 1554, 1554, - 1555, 1555, 1555, 1555, 1556, 1557, 1557, 1557, 1557, 1557, - 1557, 1557, 1557, 1557, 1557, 1558, 1558, 1558, 1559, 1559, - 1559, 1559, 1560, 1561, 1562, 1562, 1563, 1563, 1563, 1563, - 1564, 1564, 1565, 1565, 1565, 1566, 1566, 1566, 1566, 1566, - 1568, 1567, 1569, 1569, 1570, 1570, 1571, 1572, 1572, 1572, - 1572, 1572, 1574, 1573, 1575, 1575, 1576, 1575, 1577, 1577, - 1578, 1578, 1579, 1579, 1579, 1579, 1580, 1579, 1581, 1581, - 1581, 1581, 1581, 1582, 1583, 1583, 1583, 1583, 1583, 1583, - 1584, 1584, 1585, 1586, 1586, 1586, 1586, 1586, 1587, 1587, - 1588, 1588, 1589, 1589, 1590, 1591, 1591, 1592, 1592, 1593, - 1593, 1594, 1594, 1595, 1595, 1597, 1596, 1598, 1596, 1599, - 1596, 1600, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1601, - 1601, 1602, 1602, 1603, 1603, 1603, 1604, 1604, 1604, 1604, - 1605, 1605, 1606, 1606, 1607, 1607, 1608, 1608, 1609, 1609, - 1610, 1610, 1610, 1610, 1610, 1611, 1611, 1612, 1612, 1613, - 1614, 1614, 1614, 1614, 1614, 1615, 1615, 1616, 1616, 1617, - 1617, 1618, 1618, 1618, 1618, 1618, 1618, 1620, 1619, 1621, - 1622, 1622, 1623, 1623, 1624, 1624, 1624, 1625, 1625, 1625, - 1626, 1626, 1627, 1628, 1628, 1629, 1630, 1631, 1631, 1633, - 1632, 1634, 1634, 1635, 1635, 1637, 1636, 1638, 1638, 1639, - 1639, 1639, 1640, 1640, 1641, 1642, 1641, 1643, 1644, 1645, - 1646, 1646, 1647, 1647, 1648, 1648, 1648, 1648, 1648, 1648, - 1648, 1648, 1649, 1649, 1649, 1650, 1650, 1650, 1650, 1650, - 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1652, 1653, 1654, - 1655, 1655, 1655, 1656, 1656, 1656, 1658, 1657, 1659, 1659, - 1660, 1660, 1662, 1661, 1663, 1663, 1664, 1664, 1664, 1664, - 1666, 1667, 1668, 1669, 1665, 1670, 1670, 1671, 1673, 1674, - 1675, 1676, 1677, 1672, 1679, 1680, 1681, 1682, 1678, 1683, - 1683, 1683, 1683, 1683, 1683, 1684, 1684, 1684, 1685, 1685, - 1686, 1686, 1686, 1687, 1687, 1688, 1689, 1688, 1690, 1690, - 1691, 1691, 1692, 1692, 1693 + 7119, 2309, 1791, 1331, -126, 208, 58144, -4291, 155, 1465, + -4291, -168, 99, -4291, -4291, -4291, -4291, -4291, 3590, -4291, + 58144, 105, 1001, -4291, 26282, -4291, -4291, -4291, -30, -4291, + 196, 1465, -4291, 105, 446, -4291, 58144, -4291, 671, 1593, + 105, -4291, -4291, -4291, 51148, -4291, -168, 58144, -4291, 654, + -4291, -4291, 51148, 207, 216, 643, -23, -4291, -4291, 58144, + -4291, 2216, -4291, 608, 1367, 1291, -4291, -4291, 1123, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 3248, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 26924, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 816, 58144, 1056, 58144, 1390, 58144, + 49240, 58144, -4291, 1376, -4291, -4291, 1525, 1131, -4291, -4291, + 1465, 81, -4291, -4291, 1762, -168, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 1140, -4291, -4291, 1236, -126, -4291, -4291, -4291, + -159, -4291, 1878, 1683, 1448, 58144, 952, 12575, 1675, 1675, + 1675, 1702, 1729, 1675, 1675, 1675, 58144, -4291, 1675, 1675, + 1675, 1465, -4291, -4291, -4291, 1807, 37792, 58144, 1570, 226, + -31, 49240, -4291, 1408, 58144, -126, 79, -4291, 1724, -4291, + -4291, -4291, 64504, 1465, -4291, 1918, 1790, 971, 58144, -4291, + -4291, -4291, 64504, 1109, 925, 1382, -4291, -4291, 1532, -4291, + 38428, 186, -4291, -4291, -4291, 1379, 2593, -4291, 28850, 5845, + 1532, 1529, -126, -83, 1546, -126, -4291, -4291, 58144, -126, + 1465, 1735, -4291, 12575, -4291, 309, 309, 309, -4291, 309, + -4291, 309, 608, 1407, 1583, -4291, -4291, 1415, 58144, 1841, + -4291, 1841, -4291, -4291, 1841, 1335, 1592, 1851, 1862, 1871, + 1556, 763, 1131, 1786, -4291, -4291, -4291, 1459, -19, -4291, + 1536, 41608, -4291, 58144, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 1384, -4291, 1577, 131, 1618, 1980, -4291, 49240, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 26282, + 1506, 58144, -4291, 2017, 12575, 1236, -4291, 1615, -4291, -4291, + 26282, -4291, -4291, 26282, 266, 1277, 58144, -4291, -4291, 2160, + -4291, -4291, -4291, 51784, 952, 1553, 1558, 1571, 17863, -4291, + 1585, 1603, 1619, 12575, 1625, 1633, 1637, 1641, 1645, 1648, + 1656, 1661, 1674, 1680, 1692, 1694, 1703, 1705, 1705, 1705, + 1738, 1743, 1751, 1754, -177, 1758, -4291, 1783, 1794, 1802, + -4291, -4291, 1810, 1814, 1825, 1830, -4291, -4291, 1837, 1843, + 1853, 13236, 1855, 1857, 1860, -4291, 23060, 1868, 1872, 1875, + 1884, 1910, 1925, 1927, 1931, 1950, -4291, -4291, 12575, 1738, + -4291, -4291, 1952, -4291, 1954, 1967, 2002, 2004, 2007, 2012, + 2025, 2042, 2060, 2070, 2086, 2089, 2092, 2106, 2117, 2120, + 2123, 1738, -4291, -167, 2126, 2129, 1128, 2131, -4291, 2137, + -4291, 335, 2153, 1705, 1738, 1738, 2159, 2161, 2165, 2170, + 2172, 2175, 17863, 17863, 17863, 12575, -4291, 58144, -4291, 58144, + 1322, 2168, -4291, 2683, 17863, 212, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, 1537, 1817, -4291, -4291, -4291, -4291, -4291, + -4291, 2177, 1548, 2162, 58144, 58144, 58144, 2223, 58144, 58144, + 58144, -4291, 49240, 1845, 58144, -4291, -4291, 1675, 1824, 4681, + 32055, 2090, 2045, 1866, 1705, -4291, -4291, 607, 613, 672, + 2164, -4291, -4291, 1996, 700, 2186, -4291, 712, 440, -4291, + 92, 723, 727, -4291, -4291, -4291, -4291, -4291, -4291, 1999, + 2345, 2113, -4291, -4291, 175, -4291, -4291, 58144, -4291, 2644, + 12575, -4291, -4291, -4291, 2588, 2324, -4291, -4291, -4291, 894, + 2788, 254, 26282, 1331, 58144, 915, 65776, 65776, 58144, -4291, + 61324, 2182, -4291, -4291, 8188, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 2190, -4291, -4291, 2185, + 12575, 901, -4291, -124, -4291, -4291, 2559, -4291, -4291, 46060, + 26282, 1491, 65140, -4291, -4291, -4291, 23704, -4291, -4291, 2798, + -4291, 2199, -4291, -4291, 1817, 3781, -4291, 2479, 2090, 2503, + -4291, 2686, -4291, 2515, 2410, 1277, 2297, -4291, 2848, 2624, + -4291, 2707, 1677, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, 2264, 2593, -4291, -4291, 52420, 1067, 2432, + -135, 1130, 1344, 37153, 57, 49240, 1575, 874, 29491, 42244, + 2263, -4291, -4291, -4291, -128, 2425, -4291, 2759, -4291, 1, + -4291, 2291, 1129, 1, 46696, 2624, 213, -4291, 215, -4291, + 2756, -4291, -4291, -4291, -4291, 2419, 2407, 2458, -4291, 368, + 2078, -4291, -126, -4291, 828, -4291, 2445, 2624, 1, 213, + -4291, 2696, 2830, 606, 2806, -4291, 1154, -4291, -4291, -4291, + -57, 2910, -4291, 2347, -4291, -4291, -4291, 26282, -4291, -4291, + -4291, 2588, -4291, 189, -4291, -4291, -4291, -4291, 2350, -4291, + -4291, 2650, 2480, -4291, -4291, 764, 2376, 819, -4291, 2877, + -4291, 1331, 58144, -4291, -4291, -4291, 443, 1124, 1525, 1841, + -4291, 1841, 1841, 1841, 1841, 81, 42880, -4291, -4291, -4291, + 2917, 2938, 1705, 2397, -4291, -4291, -4291, -4291, -4291, 3057, + -4291, -4291, 2685, 2953, 2953, 2953, 3072, -4291, -4291, -4291, + 26282, -4291, -4291, -4291, 131, -4291, 2597, 2468, -4291, 58144, + 1618, -4291, 26282, -4291, 2839, 2436, -4291, -4291, 2697, 12575, + -4291, -4291, 12575, 64504, 2945, 1322, -4291, -4291, 163, -4291, + -4291, 26282, 863, -4291, 3041, 2672, -4291, -4291, -4291, 3057, + 2953, 26282, -4291, 2464, -4291, 2456, -4291, 12575, 12575, 358, + 3060, 3140, 3140, 3140, 1322, 2538, 12575, 12575, 12575, 12575, + 12575, 12575, 12575, 12575, 12575, 12575, 12575, 12575, 359, 2504, + -4291, -4291, -4291, 154, -4291, 2514, 12575, 12575, -4291, 12575, + 12575, 27566, -4291, 4809, 12575, 12575, 1022, 3027, 12575, 12575, + 12575, 12575, 3733, 12575, 12575, 12575, 27566, 3188, 2541, -4291, + 2547, 377, 12575, 12575, 382, 12575, 12575, 12575, 12575, 12575, + -4291, -4291, 12575, 12575, 12575, 12575, 17863, 12575, 12575, 12575, + 12575, 12575, 12575, 2548, 12575, 3140, 3140, 12575, 12575, 1101, + -4291, -4291, 12575, 2717, 2717, -4291, 12575, 9270, 12575, -4291, + -4291, 2556, -4291, -4291, -4291, 27566, 3140, 3140, 12575, 12575, + 12575, 3060, 3060, 3060, 232, 2560, -129, 12575, 30132, 2555, + -4291, -4291, -4291, -4291, 12575, 12575, 12575, 17863, -4291, 1755, + -4291, -4291, -4291, -4291, -4291, 13897, 17863, 17863, 2568, 17863, + 17863, 17863, 17863, 17863, 2960, 17863, 17863, 18524, 19185, 17863, + 17863, 17863, 17863, 944, 3060, 49240, 17863, 12575, -4291, -4291, + 58144, -4291, -4291, -4291, 2587, -4291, 2883, 1845, -4291, 47332, + -4291, 826, 3100, -4291, 46060, 26282, -4291, 2603, -4291, 2983, + -4291, 2984, 2987, 2988, -4291, -4291, -4291, -4291, 3229, 2993, + -4291, -126, 2996, -4291, -4291, 2627, -4291, -4291, -4291, 19846, + 49240, -4291, 2629, -4291, 2645, -4291, -4291, -4291, -4291, -4291, + -4291, 2742, -4291, -4291, -4291, -4291, 2651, -4291, 46060, 2651, + -4291, -4291, 2651, -4291, -4291, 2651, 41608, 56, 3266, -4291, + -4291, 58144, -4291, 58780, -4291, 3078, 1397, -4291, 23704, -126, + -4291, 3079, 14558, -4291, -4291, -4291, 3030, 346, 2656, -4291, + -4291, -4291, -4291, 3118, 58144, -4291, -4291, -4291, 12575, 3028, + 2663, -4291, -4291, -4291, 225, 26282, -4291, 1322, -4291, 127, + 127, 2919, 1419, 49240, -4291, -4291, 210, 2671, -4291, 2765, + 2687, -4291, 2771, -4291, -4291, 26282, 2682, -4291, 26282, -4291, + -4291, -4291, 2949, 2776, -4291, -126, 925, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + 2695, 2708, 3157, 2698, 46060, 41608, 101, -4291, 58144, -4291, + 1228, -4291, -4291, 964, -4291, -4291, 924, 43516, -4291, 231, + 2727, 2758, 3108, -4291, -4291, 2705, -4291, 12575, -4291, 2700, + 2712, -4291, -128, -4291, 47332, 58144, -4291, -4291, -4291, -4291, + -4291, 3294, 12575, -4291, 46060, -4291, 1193, -4291, 909, 107, + -128, -4291, -4291, -4291, -4291, -4291, 58144, 53056, 2713, 9931, + 2838, 3123, -4291, -4291, -4291, 2729, 1841, 58144, 58144, 58144, + 26282, 58144, 26282, -4291, 896, 896, -4291, -4291, -4291, -4291, + 1, 58144, 58144, 1, 41608, -4291, 213, 728, 58144, 1, + -4291, 3124, 2826, -4291, -4291, -4291, 3196, -4291, -4291, 3187, + 2731, -4291, 3228, -4291, -4291, 2849, 213, -4291, -4291, 26282, + -4291, -4291, 213, -4291, 213, 213, 12575, 1, 1, 1, + -4291, -50, -4291, -4291, -4291, 2894, -83, -4291, -4291, -4291, + 945, -4291, -4291, 309, 2998, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 1000, -4291, -4291, -4291, + 3226, -4291, 47332, 41608, 3204, 1841, 1841, -4291, -4291, 3235, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, 1841, -4291, -4291, + -4291, -4291, -4291, -4291, 1618, 49240, 58144, 58144, 58144, 26282, + -4291, -4291, -4291, -4291, -4291, 100, -4291, -4291, -4291, 2247, + 3267, -4291, 49240, 3340, -78, 1283, 3340, 2754, -126, 1278, + -4291, 1278, -4291, -4291, -4291, 986, 1841, -4291, -4291, 2755, + -4291, 3008, -4291, -4291, 53692, 26282, -4291, -4291, -4291, 1527, + 2757, 2760, 1322, 1322, 61960, 3361, 2793, 4502, -4291, -4291, + 26282, -4291, 72, -4291, -4291, -4291, 2822, -4291, -4291, -4291, + -4291, 2467, -4291, -4291, 2414, 2819, 2772, -4291, 2949, -4291, + 1509, 58144, 3232, 34609, -4291, 563, 306, -4291, 3140, 2778, + -4291, 2783, 2784, 2785, 12575, 255, 480, 338, -201, 1438, + 484, 570, 1318, 749, -4291, 1616, 751, 782, 885, 236, + -4291, 2790, 2782, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, 2794, -4291, -4291, -4291, 923, 1013, 1458, 1490, 2795, + 2796, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, 3254, -4291, 1035, 1722, -4291, -4291, -4291, -4291, 2799, + -4291, -4291, 1495, 1041, 1077, 277, 2809, 1771, 1088, 1818, + 1820, 2808, 27566, 58144, 3140, 2805, 1497, 1499, 3140, 2812, + 1113, 1631, 1847, 1880, 1903, 1639, 1713, 1178, 1921, 2745, + 1721, 1233, 1240, 1725, 1242, 1293, -4291, 1745, 2814, 2815, + 1300, 206, 3140, 2817, 289, 2818, 2824, 1752, 10592, 11253, + 11914, 228, 1320, -4291, 2820, -4291, 2547, 2827, 2828, 336, + 220, 1756, -4291, 12575, -4291, -4291, 2810, -4291, 2879, 165, + 107, -4291, 2989, 58144, 2358, 193, -4291, -4291, -4291, -4291, + -4291, -4291, 884, -4291, 2831, -4291, 2834, 2477, 2832, 12575, + 248, 2832, 3453, 960, 960, 17863, 3230, 2652, 13236, 988, + 13236, 988, 2832, 2832, 2832, -4291, 17863, 2835, 17863, 17863, + -4291, 3060, 1322, 2836, 1132, 58144, 26282, 826, 2837, -4291, + -4291, -4291, -4291, -4291, -128, -4291, 2840, 218, 26282, 49240, + 2841, -4291, 3356, -4291, -4291, -4291, -4291, -126, -4291, -4291, + 5080, -4291, 26282, 2930, 2937, 2943, -4291, 32696, -4291, -4291, + -4291, -4291, 32696, 14, -4291, 58144, -4291, 2934, -4291, -4291, + -4291, 3278, -4291, 3281, -204, -4291, 24346, 24346, -4291, 24346, + -4291, -4291, -4291, -4291, -4291, 440, -4291, -4291, -4291, -4291, + 374, 989, 3178, 2727, -4291, -4291, -4291, -4291, -4291, -4291, + 33973, 1322, -4291, 26282, -4291, 3273, 940, 26282, -4291, -4291, + 3271, 1322, -4291, -4291, -4291, -4291, -4291, -4291, 2858, -4291, + 2861, -4291, -4291, -4291, -4291, -4291, 2074, 2976, -4291, 3515, + -4291, 12575, -126, -4291, 46060, 46060, 26282, 26282, 26282, 695, + 12575, -4291, 1813, 2871, -4291, -4291, 2804, -4291, 3520, -4291, + 3781, 19846, 47332, 3321, 3336, -4291, 2881, 24346, 24346, 24346, + -4291, -4291, -4291, -4291, 2977, 2977, -4291, 30773, -4291, 12575, + -4291, -4291, -4291, 3364, -4291, 3070, 618, -4291, -4291, -4291, + -4291, -4291, 58144, -4291, 3541, -4291, -4291, 2887, -4291, -4291, + 26282, -4291, -4291, 3337, -4291, 3061, -4291, 1322, -4291, 2893, + 52420, 3362, 9931, 3366, -4291, 47968, -4291, 1322, -128, 2902, + 2908, -4291, -4291, 3291, 659, -4291, 2912, 2913, -4291, 2904, + 2911, 2914, 52420, 12575, -4291, 909, -4291, -4291, -4291, -4291, + -4291, 17863, 1783, -4291, 1322, -4291, -4291, -126, 3374, -126, + 12575, 2909, 58144, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 1, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, 3153, 2624, 2078, + 3123, -4291, 1, 213, 26282, 1, 1, 1322, -4291, -4291, + -4291, -4291, -4291, -4291, 2922, -4291, 2980, -4291, -4291, 3091, + 64504, 2929, -4291, 3393, 2624, -4291, -4291, -4291, 102, 1151, + 2933, 1841, -4291, 58144, 58144, 1841, 1841, 58144, -4291, -4291, + -156, 3216, 3218, -4291, -4291, -128, -128, 3243, -4291, -126, + 3071, 3077, 3082, 3085, 3088, 3113, -4291, -4291, -126, -126, + -4291, -4291, -128, -4291, 1559, -4291, -4291, -4291, -4291, 1842, + -4291, -128, -128, -4291, 178, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 1182, -4291, 5035, -4291, -4291, 26282, 3242, 26282, + 3424, -4291, 3492, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 2969, -4291, -4291, 12575, 3059, -4291, -4291, 2793, + -4291, 2985, 2994, 2999, 3000, 3003, 3004, 3005, 3009, 3010, + 3011, 3012, 3013, 3015, 3016, 3017, 3019, 3024, 3036, 3038, + 3040, 3042, 3043, 3044, 2970, -4291, -4291, -4291, 3037, -4291, + -4291, -4291, -128, -128, -128, -128, -4291, 2374, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 3346, 1136, 58144, 3064, + -4291, 34609, -4291, -4291, 945, -4291, 3026, 15219, -4291, 3034, + -4291, 12575, -4291, -4291, -4291, 1906, 12575, 12575, 3512, 2585, + -4291, 48604, -4291, -4291, -4291, 12575, -4291, 12575, -4291, 12575, + 12575, 12575, 12575, 48604, 2585, 12575, -4291, 3039, -4291, 3425, + 3444, -4291, -4291, -4291, -4291, 12575, 12575, -4291, 12575, 12575, + -4291, 12575, 12575, 12575, 12575, -4291, 12575, -4291, -4291, 17863, + -4291, 3031, 3046, -4291, -4291, -4291, 3050, -4291, 12575, -4291, + -4291, -4291, -4291, -4291, -4291, 12575, -4291, 12575, -4291, 12575, + 12575, -4291, 12575, 12575, -4291, -4291, -4291, 15880, 12575, 12575, + 3051, -4291, -4291, 12575, 12575, 12575, -4291, 12575, 264, 12575, + 453, 12575, 2072, 12575, -4291, 12575, -4291, -4291, -4291, -4291, + 12575, 399, 2074, 2804, 3053, -4291, 1956, 2707, -4291, 1803, + 2810, 3054, 3214, 1228, -4291, -4291, 49240, 12575, -4291, -4291, + -4291, -4291, -4291, -4291, 17863, 362, 3055, 17863, -4291, 3453, + 3733, 3733, 2581, 12575, 248, 3453, 12575, 3058, 3056, -4291, + 12575, 58144, -4291, -4291, -4291, 47332, -4291, 49240, 46060, -4291, + -4291, -4291, 218, -4291, 2603, 3076, -4291, -4291, -4291, 2858, + 60, 3081, 3065, -4291, -4291, -4291, -4291, -4291, -4291, 1968, + -4291, 41608, 149, 3692, 41608, -4291, 3052, -4291, 3066, 3125, + 3126, 3144, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, 2624, 64504, 1813, -4291, -4291, 3074, -4291, + -4291, 2697, 2977, 3087, 3451, 3650, -4291, -4291, -4291, -4291, + 64504, 64504, 12575, 58144, 17863, -4291, 3688, 3092, 3101, 3097, + 3103, 1322, -4291, 3186, -4291, -4291, -4291, 51, -4291, -4291, + -4291, -4291, -4291, 806, 317, -4291, -4291, 3110, 3110, 21774, + -4291, -4291, -4291, 58144, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, 3127, -4291, -4291, 3384, 46060, 41608, 3573, + 3574, 3575, 576, -4291, -4291, -4291, 49240, 3119, -4291, -4291, + -4291, 1322, 3121, 1588, 44152, 3600, 44152, 44152, -4291, 827, + 3521, 3523, -4291, 3391, 2174, 3391, -4291, -4291, 827, 945, + 2949, -4291, 12575, 3736, 3567, 3447, -4291, 49876, -4291, 35245, + -4291, 7679, -4291, 46060, -4291, -4291, -4291, -4291, -4291, 3227, + 3231, 1400, -4291, -4291, 3540, 3368, -4291, -4291, -4291, -128, + 1322, -4291, 2713, 3145, 31414, -4291, 1568, -4291, -4291, 1322, + 194, -4291, -4291, -4291, 3432, -4291, -4291, 3374, -4291, 2727, + 213, -4291, -4291, -50, 2496, -4291, 27566, 62596, 2804, 3470, + -4291, -4291, -4291, 167, 3801, -4291, 58144, 3152, 615, -4291, + -4291, 58144, 3615, 214, 214, 3436, 26282, 26282, 4236, 47968, + 44788, -4291, -4291, -4291, -4291, 3700, -4291, 3701, 1332, -4291, + -4291, 2513, 1283, -4291, -126, -126, -126, -126, 2804, -126, + -126, 1970, -4291, 2513, 2513, 1278, -4291, 173, -4291, -4291, + -4291, -4291, 2658, -128, 3741, 3426, -128, -128, 3741, -128, + 3427, 3428, -128, -128, 3250, 3687, -128, 3570, 3276, 2234, + 3572, -128, 3435, -4291, 3280, 3695, -128, -128, -128, -128, + -128, 3741, 3440, 3792, -128, -128, -4291, -128, 3442, 3441, + 183, 3449, 3450, -128, -128, -128, -128, 889, 58144, -128, + -128, 3454, -128, -4291, -4291, 5677, -4291, -4291, -4291, -4291, + -4291, -4291, 783, 24994, -4291, -4291, -4291, -4291, -128, -4291, + 184, -4291, 3398, -4291, 397, 50512, 63232, 3189, 3207, 54328, + 1322, 64504, 12575, -4291, 3210, 3211, 3215, 2804, -126, -126, + 1568, -126, 2804, -126, -126, -126, -126, -126, -126, -126, + 2804, 2804, -126, 140, 2149, -126, 2804, 4502, -4291, -126, + 2074, 2513, 2513, 2414, -4291, 3646, -128, -4291, 235, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 3205, + 945, 2727, 1699, 2727, 3221, -4291, 13236, 1761, -4291, 1322, + 12575, 1322, 1983, -4291, 3233, 3233, 3233, -4291, 3236, -4291, + -4291, 3233, 3636, 3233, 3637, 3237, 3240, 1981, 1928, -4291, + 2008, 2219, 1776, 3241, 3247, 1537, -4291, 12575, 12575, 1781, + 364, 1804, -36, 1327, 1333, 375, -4291, 1823, 3323, -4291, + -4291, 1828, 1844, 1876, 1891, 1359, 1895, 2022, 13236, 1897, + 275, 386, -4291, 1902, 1418, 1420, 1914, 12575, 1936, 12575, + 1998, 12575, 2005, 2018, 2031, 3244, 3244, 191, -4291, 3253, + -4291, -4291, -4291, 3255, -4291, -4291, -4291, -4291, 2727, 2264, + 1803, -4291, 3251, 1202, -4291, -4291, 3256, 1322, 3260, -4291, + -4291, 12575, -4291, 212, -4291, -4291, 17863, 427, 3264, -4291, + 1322, -4291, -4291, 3265, 1537, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, 3249, -4291, 3481, -4291, -4291, 2578, 32696, + -4291, 58144, 1304, -44, -4291, -4291, 49240, 3542, -4291, 3272, + 35881, 41608, 41608, 41608, 3275, -4291, 59416, 3552, 26282, -4291, + 3696, -4291, -4291, -4291, -4291, 58144, 65776, 65776, 65776, 65776, + 3277, 3279, -4291, -4291, -4291, 3453, 3657, 3536, -4291, -4291, + 2074, 58144, 46060, 3591, -4291, -4291, 3486, 2593, 27566, -4291, + 3287, -4291, 3287, 1799, 3289, 2034, -4291, -4291, -4291, 3283, + 2297, 2039, -4291, 19846, 3748, 2840, -4291, 41608, 41608, 41608, + -4291, 2646, -4291, 30773, 12575, -4291, -4291, -4291, -4291, -4291, + 44152, -4291, -4291, -198, 1202, -4291, 2095, -4291, -4291, -4291, + 3691, 3391, 3391, 827, 3693, 837, -4291, 2666, -4291, 2593, + 1322, 12575, -4291, 3568, -4291, 54964, -4291, -4291, -4291, -4291, + 1146, -4291, -4291, 3298, 3299, 144, 3526, -4291, -4291, -4291, + -4291, 9931, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, 2624, -4291, -4291, -4291, -4291, -4291, 1, + -4291, 3314, -4291, 3305, 3306, -4291, -128, 3339, -4291, -4291, + 41608, 3500, -4291, 1047, 3310, 58144, -4291, 3852, -4291, -4291, + -4291, -4291, -4291, 26282, -4291, -4291, 26282, 20490, -4291, -4291, + 3578, -4291, 3957, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 1842, -4291, -4291, -4291, + 1182, -4291, -4291, 28208, 1841, -4291, 209, -4291, 1841, 1527, + 1527, 3746, 55600, 28208, 105, 1568, 2804, 1702, 2804, 56236, + 105, -126, -126, 2646, -128, 2804, -4291, -4291, 3718, 1675, + 3719, 1702, 1702, -4291, 49240, 58144, -4291, -128, 1413, 2804, + 56872, 1568, 1568, 1702, 105, 27566, 1316, 2728, -4291, -126, + 105, -4291, -4291, -4291, -4291, 26282, 105, 105, 3334, 3090, + 3167, 3213, -4291, -4291, -4291, 2804, 2728, 56236, -4291, -4291, + 4300, -4291, -4291, -4291, 21132, 58144, 343, 518, -4291, 3319, + 39700, 3329, 1331, 341, 3412, 288, -4291, 153, -4291, -4291, + -4291, 3773, 3333, 1294, -4291, 3331, -4291, 56236, -4291, 3341, + -4291, 3343, -4291, 60052, 1322, 2804, 2804, 2804, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 58144, 2513, 1136, -4291, + 34609, 2727, 3568, -4291, -4291, 3733, -4291, 1322, 12575, 912, + -4291, -4291, -4291, -4291, 1563, -4291, -4291, -4291, 3348, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 3075, -4291, -4291, 2585, + -4291, -4291, -4291, 3345, 3733, 3733, -4291, -4291, 12575, -4291, + 3948, 3518, 12575, 12575, -4291, 12575, -4291, 252, 3349, 3377, + -4291, -4291, -4291, -4291, 12575, -4291, -4291, 3733, -4291, 12575, + -4291, -4291, 12575, -4291, 12575, 12575, -4291, 2063, -4291, 2104, + -4291, 2110, -4291, -4291, -4291, 2074, 3352, 3737, -4291, -4291, + -4291, 2074, 3550, -4291, -4291, 2074, 2804, 3337, 2705, -4291, + -4291, -4291, 2707, -129, 58144, -4291, -4291, 2061, -4291, -4291, + 12575, -4291, 49876, -4291, -4291, 2804, 3842, 3738, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 3813, -4291, 3462, -4291, 164, -4291, + -4291, -4291, 626, 626, 626, 16541, 2567, 3873, -4291, -4291, + -4291, 3696, 3758, -4291, 121, 3372, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 58144, 3375, 1672, -4291, 2094, -4291, + -4291, 3376, -4291, -4291, -4291, 2264, 3379, -4291, -128, 16541, + 3110, 3549, -4291, -4291, 1799, 27566, 35245, -4291, -4291, 58144, + -4291, 41608, 2881, 2881, 2881, 44788, -4291, -4291, 1588, -4291, + 1228, 3392, -4291, 945, -4291, 827, 3775, 3778, -4291, 827, + -4291, -4291, -4291, 2264, 1590, 1588, 12575, 2624, -4291, -4291, + 36517, -4291, -4291, -4291, -4291, -4291, -4291, 31414, 52420, -4291, + 2624, -4291, -126, 2334, 27566, 2727, 16541, -4291, -4291, 58144, + -4291, -4291, -4291, -4291, 3529, -4291, 419, 3665, 3409, -4291, + 3388, 3389, -4291, 26282, 3395, 3400, 3397, -4291, -4291, -4291, + 49, -4291, 6174, -4291, -4291, -4291, -4291, -4291, 105, 3390, + 3795, 3796, 1527, -4291, 1841, 28208, -4291, 1841, 1841, 1331, + -4291, -4291, -4291, 125, 56236, -4291, -4291, 28208, -4291, -4291, + -4291, 3403, -4291, -4291, 2074, -4291, -4291, 44788, -126, -4291, + 1702, 58144, -4291, 28208, 28208, -4291, 3434, -126, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, 28208, 56236, 3404, + -4291, 1588, -4291, -4291, -4291, -4291, -4291, 1918, -4291, 56236, + -4291, -4291, 56236, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + 3411, 2694, 2497, -4291, 3408, -4291, 58144, -4291, -4291, 26282, + -4291, -4291, -4291, 5253, 58144, -4291, -4291, -4291, -4291, 58144, + 4052, -4291, 3658, 12575, 12575, 3697, 58144, 3699, -4291, 3994, + -4291, -4291, 3840, 3883, 58144, 5253, 3886, 3887, -4291, 3430, + -4291, 54328, 3522, 2100, -4291, -4291, 2145, -4291, -4291, 2150, + -4291, -4291, -4291, -4291, -4291, 3026, -4291, 3808, 976, 1322, + 3433, 3437, 3438, 3439, 239, 2242, 3727, -4291, -4291, -4291, + 3233, -4291, 3236, -4291, -4291, -4291, 4036, -4291, -4291, 3233, + 3848, -4291, -4291, -4291, 3452, -4291, 3455, 3457, 2115, -4291, + 309, 3458, 2141, 1434, 2261, 3768, 3846, -4291, 3690, -4291, + 2180, 1069, 2184, 2188, 2207, 2209, -4291, -4291, -4291, -4291, + -4291, 3460, -4291, -4291, 524, -4291, 3461, 3567, -4291, -4291, + -4291, -4291, 2265, -4291, -4291, 2287, -4291, -4291, 4103, 3742, + -4291, -4291, -4291, -126, 159, 3496, 3496, 3496, 1783, 1322, + 2293, -4291, 64504, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + 3877, 58144, -4291, -4291, 3473, 3515, 58144, -4291, 3536, -4291, + 2705, 27566, 16541, 3476, 3472, -4291, 819, -4291, -4291, 3471, + -4291, -4291, 2881, -4291, 4060, -4291, -4291, -4291, 2887, 1540, + 3528, 827, 827, 3510, 3530, 12575, 3483, -4291, 93, 2705, + -4291, -4291, 12575, -4291, -4291, 1322, 3722, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 3568, -4291, 3480, 3484, -4291, -4291, + -126, 872, -4291, -4291, 295, 3663, 49240, 3488, 58144, 58144, + 3490, -4291, -4291, 21132, -4291, 4126, -4291, -4291, 12575, 1841, + -4291, -4291, 28208, 3544, 974, 28208, 28208, 3971, 4019, 4022, + -4291, 28208, 2467, 58144, -4291, 3294, -4291, 28208, 3403, -4291, + 234, 3596, -4291, 343, -4291, 27566, -4291, -4291, -4291, 58144, + -4291, 26282, -4291, -4291, 3499, -4291, 3233, 3233, 3233, -4291, + -4291, 3233, -4291, 3236, 3744, 3501, 3236, 3236, -4291, -4291, + -4291, -4291, -4291, 239, 372, -4291, -4291, 239, -4291, -4291, + -4291, 176, 1489, 3236, -4291, -4291, -4291, -4291, -4291, 3503, + -4291, 3233, 3233, 3233, -4291, -4291, 239, 3233, -4291, 3233, + -4291, 3236, 179, 160, 3233, 3233, 3233, 3348, 3502, -4291, + 2303, -4291, -4291, 1322, 3733, 4074, -4291, -4291, 3660, -126, + 4014, 58144, 158, -4291, -4291, 3294, 4034, 2462, -4291, -4291, + -4291, 64504, -4291, 2804, -4291, 2804, -4291, 2804, 45424, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 211, -4291, -4291, 48604, + 4131, -4291, 3798, 3513, -4291, -4291, -4291, -4291, -4291, 239, + -4291, -4291, -4291, -4291, 12575, -4291, -4291, -4291, 12575, -4291, + -4291, 3832, 3993, -4291, -4291, -4291, -4291, -4291, -4291, 3519, + -4291, 2804, 3568, -4291, -4291, 2804, 4032, -4291, -4291, -4291, + 3616, 3617, -4291, -4291, 3618, -4291, -4291, 162, 2466, -4291, + -4291, -4291, -4291, 16541, 63868, -4291, 3916, 3625, -4291, -4291, + -4291, 3531, 3577, -4291, -4291, 2707, -4291, -4291, -4291, -4291, + 905, 3905, -129, -4291, 3583, -4291, -4291, -4291, 3584, 1322, + 58144, -4291, 390, 2707, 1588, 58144, 3935, 3808, -4291, 58144, + 5253, -4291, -4291, -4291, -4291, 3537, 3538, -4291, 58144, -4291, + -4291, -4291, 3822, 341, 3817, 58144, 2310, 1588, 3545, 2314, + -4291, 819, 5677, -4291, -4291, 882, 604, 2214, 28208, 3544, + 1092, 214, -4291, 214, -4291, -4291, -4291, -4291, 3871, 343, + -4291, -4291, -4291, -4291, -4291, 26282, -4291, 105, -4291, -4291, + 3403, 806, 3543, 58144, 3889, -4291, -4291, -4291, -4291, 1122, + -4291, 309, 1122, 1122, -4291, 2432, -4291, 3585, 239, -4291, + -4291, 3588, -4291, -4291, -4291, 1122, 309, 239, -4291, -4291, + -4291, -4291, 1122, 2876, 3675, -4291, 239, -4291, -4291, 4131, + -4291, 239, 4131, 1122, 1122, 58144, -4291, 58144, -4291, 946, + -4291, -4291, -4291, -4291, -4291, 2329, -4291, -4291, -4291, -4291, + 39064, -4291, 12575, -4291, -4291, -4291, -4291, -4291, 576, 60688, + -4291, -4291, -4291, 4031, 3734, 3745, -4291, -4291, -4291, 3555, + -4291, 3559, 1588, 2230, -4291, -4291, -4291, 3556, 2624, -4291, + 4155, -4291, -4291, -4291, -4291, 249, 3838, 2804, 2804, 2804, + 2149, -61, 2466, -4291, -4291, 3620, 26282, 17863, 3677, 58144, + 1651, 3029, -4291, 4175, 4176, 4067, 4180, 905, -4291, -108, + -4291, -4291, 12575, 3576, 12575, 3579, 2333, -4291, -4291, 1527, + 1527, -4291, 390, -4291, -4291, -4291, 924, -4291, -4291, 3766, + -4291, -4291, -4291, 1812, -4291, -4291, 3697, 3580, 2335, 278, + 58144, -4291, 3863, 992, -4291, 3578, 3549, -4291, 2074, 3536, + -4291, -4291, -4291, -4291, 214, -4291, 3581, -4291, 3582, 3586, + 2930, 2937, 2943, 2149, 2149, -4291, -4291, -4291, -4291, -4291, + 3984, -4291, -4291, 2342, -4291, 797, 3868, -4291, -4291, -4291, + -4291, 1122, -4291, 2353, -4291, -4291, -4291, -4291, -4291, -4291, + 2360, -4291, -4291, -4291, 49240, -126, 3165, 4225, -4291, 3643, + -4291, 4115, 3985, -4291, 4230, -4291, 3527, -4291, 3987, 3882, + -128, 3608, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 608, 3623, 3724, -4291, 64504, -4291, 58144, 57508, + -4291, -4291, 33337, -4291, -4291, -4291, 4056, -4291, 1322, -4291, + -4291, 4080, 2264, -4291, -4291, 12575, -4291, -4291, -4291, 3722, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 1410, -4291, + -4291, 27566, 2949, -4291, 2074, -4291, 2372, -4291, -4291, -4291, + 3694, -128, -128, 4116, 4117, -128, -128, -128, -128, 3601, + 3029, -4291, 4096, 309, 309, 4215, 309, -4291, 4217, 4218, + -108, -4291, 1322, 58144, 1322, 58144, -4291, 4071, 4071, -4291, + 3613, -4291, -4291, -4291, -4291, -4291, 288, -4291, 1842, 1684, + -126, -128, 3874, 296, 278, -4291, -4291, -128, 1588, 3621, + 296, 992, -4291, -4291, 49, 3622, 2297, -4291, 2378, 3614, + 3619, -4291, 58144, 3626, 58144, 58144, -4291, -4291, -4291, 3627, + -4291, 58144, -4291, -4291, -4291, 290, -4291, -4291, 239, 309, + 239, -4291, -4291, 3628, -4291, -4291, -4291, 3907, 3661, -4291, + 3629, -4291, -4291, -4291, 40336, 3903, -4291, 3624, 1431, -4291, + 12575, 4125, -4291, -4291, -4291, 2381, -4291, -4291, 39064, -4291, + -4291, -4291, 2705, 1588, 924, -4291, -4291, 3630, -4291, -128, + -4291, 3633, -4291, -4291, 58144, 3635, -4291, -126, -126, -128, + -128, 2842, 2842, 2074, 49240, 3730, -4291, -4291, -128, -4291, + -4291, 309, -4291, 309, 309, -4291, 2422, 2444, 1539, -4291, + -4291, 3639, 5253, 3649, 26282, 3994, 2446, 214, 214, 296, + 1684, -4291, -4291, -4291, -4291, 2804, 1580, -4291, 4007, 4283, + -4291, 40972, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + 58144, 58144, 3647, 2483, 58144, 2506, 2510, 3536, -4291, 1002, + 1002, -4291, -4291, -4291, 2065, -4291, 3628, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 819, 4234, 3919, 4239, 1322, 12575, + -4291, -4291, 57508, -4291, -4291, -4291, 27566, 16541, 2646, -4291, + 3677, -4291, 3651, -4291, -4291, -46, -4291, -4291, -126, -126, + -4291, -4291, -4291, -4291, -4291, 2518, -4291, 49240, -4291, -4291, + -4291, -4291, -4291, 4257, -4291, 4260, 3654, 3656, 12575, 3659, + 3662, -4291, -4291, -4291, -4291, 4174, 64504, 4118, 4167, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 819, 2520, 2524, 58144, 1684, 2529, 278, 992, + 2531, -4291, 4315, -4291, 200, 3945, 3946, -4291, 3666, -4291, + 3668, -4291, 3947, -4291, 3951, 1322, -4291, -4291, -4291, -4291, + -4291, -4291, 2534, -4291, 17202, -4291, -4291, -4291, -4291, -4291, + 49240, -4291, 3730, -4291, -4291, -4291, 54328, 54328, 1322, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, 3892, 1684, 2544, + -4291, 1684, -4291, -4291, -4291, -4291, -4291, -4291, 3726, 4200, + -4291, -96, -4291, -4291, 3864, -4291, 3651, -4291, 3679, -4291, + 3453, 3029, -4291, -4291, 3682, 2552, -4291, -4291, 3649, -4291, + -4291, -4291, -4291, 1684, -4291, 1002, 1002, -4291, -4291, 132, + 4108, 4060, -4291, 17202, 3686, -4291, -4291, -4291, 64504, 4188, + -4291, -4291, -4291, -126, 4082, -4291, 132, -4291, 4298, 3905, + -4291, -4291, -4291, 3872, -4291, -4291, -4291, 309, 4113, -4291, + -4291, 3981, 3698, 64504, 821, 22416, 3862, -4291, -4291, -4291, + -4291, -4291, 49240, 2589, -4291, -4291, 27566, -4291, -4291, -4291, + 25638, 3703, -4291, -128, -4291, 27566, -4291, -4291, 16541, -4291, + -4291 }; -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = { - 0, 2, 1, 0, 4, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, - 4, 1, 2, 0, 4, 0, 2, 3, 1, 2, - 0, 3, 0, 6, 1, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 5, 5, 5, 1, 0, 1, 3, 1, 0, - 1, 3, 1, 0, 1, 3, 1, 3, 3, 3, - 3, 3, 3, 3, 0, 1, 1, 0, 7, 0, - 14, 0, 13, 0, 13, 0, 6, 0, 3, 5, - 6, 4, 3, 0, 3, 0, 12, 1, 3, 2, - 2, 2, 2, 2, 2, 2, 0, 13, 0, 6, - 2, 0, 1, 3, 1, 0, 2, 0, 2, 0, - 1, 4, 0, 2, 0, 2, 0, 3, 1, 0, - 2, 0, 2, 2, 2, 2, 2, 3, 3, 1, - 1, 2, 3, 3, 0, 4, 0, 3, 0, 1, - 3, 1, 0, 1, 3, 1, 0, 3, 0, 1, - 3, 1, 2, 0, 1, 1, 1, 0, 3, 2, - 3, 0, 3, 0, 5, 5, 0, 7, 5, 0, - 2, 1, 1, 1, 3, 1, 1, 1, 3, 0, - 1, 1, 1, 1, 2, 1, 3, 1, 1, 0, - 1, 0, 2, 3, 5, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 4, 0, 1, 1, 3, 1, 3, 3, 1, - 2, 1, 1, 1, 1, 3, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 0, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 5, 0, 2, 0, 3, 2, 2, 2, 0, 6, - 2, 0, 2, 1, 1, 3, 0, 0, 0, 7, - 0, 2, 2, 0, 6, 0, 0, 4, 1, 1, - 2, 1, 2, 0, 0, 6, 0, 0, 6, 0, - 2, 0, 1, 0, 6, 0, 3, 0, 5, 0, - 4, 3, 0, 6, 0, 6, 1, 0, 0, 6, - 0, 6, 0, 6, 0, 4, 0, 4, 0, 4, - 1, 1, 1, 1, 1, 2, 4, 5, 0, 4, - 4, 4, 3, 3, 2, 2, 0, 2, 1, 2, - 3, 1, 1, 1, 1, 1, 2, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, - 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, - 0, 1, 1, 1, 1, 1, 0, 7, 3, 0, - 5, 1, 2, 4, 0, 0, 5, 0, 7, 1, - 0, 1, 0, 4, 0, 0, 3, 5, 6, 0, - 4, 2, 2, 2, 2, 0, 1, 0, 3, 0, - 1, 1, 3, 1, 4, 5, 5, 0, 2, 0, - 0, 7, 0, 10, 1, 3, 1, 1, 0, 2, - 0, 3, 1, 3, 0, 6, 1, 0, 0, 5, - 0, 4, 1, 1, 1, 3, 1, 3, 0, 0, - 5, 1, 3, 1, 1, 0, 3, 1, 3, 0, - 4, 1, 0, 1, 2, 1, 3, 4, 3, 3, - 3, 3, 4, 4, 3, 0, 0, 6, 0, 1, - 0, 1, 1, 2, 1, 1, 0, 3, 0, 3, - 1, 3, 0, 1, 1, 2, 1, 2, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, - 6, 1, 1, 3, 4, 4, 2, 2, 2, 3, - 3, 3, 3, 3, 3, 3, 4, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, - 2, 0, 9, 0, 10, 0, 9, 0, 9, 0, - 10, 0, 11, 0, 10, 2, 0, 1, 4, 0, - 1, 2, 0, 0, 5, 1, 7, 0, 2, 0, - 1, 1, 0, 1, 2, 1, 1, 2, 2, 4, - 3, 3, 3, 3, 1, 2, 1, 1, 3, 2, - 3, 2, 2, 1, 3, 3, 2, 3, 1, 2, - 2, 2, 1, 2, 3, 1, 1, 2, 3, 2, - 3, 2, 2, 3, 3, 3, 5, 5, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 1, 2, 1, 2, 3, 2, 1, 1, - 1, 1, 1, 1, 1, 2, 0, 3, 0, 1, - 1, 5, 0, 1, 2, 1, 1, 1, 1, 3, - 3, 3, 3, 0, 1, 0, 1, 0, 1, 2, - 1, 1, 2, 2, 4, 1, 3, 2, 1, 2, - 2, 2, 3, 3, 3, 3, 2, 2, 1, 2, - 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, - 1, 1, 0, 2, 1, 1, 0, 1, 2, 1, - 1, 0, 1, 2, 1, 2, 0, 1, 0, 4, - 1, 1, 1, 0, 1, 2, 1, 1, 2, 1, - 3, 3, 1, 1, 0, 2, 0, 1, 5, 0, - 3, 3, 1, 0, 2, 2, 2, 0, 3, 3, - 6, 6, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, - 0, 1, 0, 1, 0, 1, 1, 2, 1, 2, - 1, 2, 0, 2, 0, 2, 2, 2, 2, 3, - 2, 3, 3, 3, 3, 1, 1, 1, 1, 3, - 1, 1, 1, 4, 2, 1, 4, 0, 1, 0, - 2, 1, 3, 0, 0, 7, 0, 5, 7, 0, - 5, 0, 5, 0, 5, 0, 4, 0, 11, 3, - 4, 3, 3, 0, 8, 0, 3, 1, 4, 0, - 3, 0, 2, 0, 1, 0, 2, 2, 2, 2, - 1, 1, 1, 4, 4, 0, 6, 4, 0, 5, - 0, 6, 4, 3, 1, 7, 2, 1, 1, 0, - 6, 0, 3, 2, 0, 5, 0, 0, 6, 1, - 3, 1, 1, 3, 3, 3, 2, 4, 6, 5, - 5, 5, 3, 4, 2, 2, 6, 5, 3, 5, - 1, 1, 1, 1, 1, 0, 1, 1, 2, 2, - 3, 3, 3, 3, 0, 1, 0, 1, 0, 2, - 0, 1, 2, 1, 1, 1, 0, 1, 1, 0, - 2, 1, 0, 1, 1, 1, 0, 6, 0, 5, - 4, 4, 3, 0, 1, 1, 3, 3, 2, 2, - 0, 2, 1, 3, 0, 1, 1, 0, 2, 4, - 1, 3, 0, 5, 0, 1, 1, 3, 0, 4, - 0, 4, 0, 1, 1, 2, 1, 1, 1, 0, - 2, 0, 5, 1, 3, 2, 0, 3, 1, 4, - 1, 0, 4, 1, 0, 4, 0, 1, 3, 0, - 1, 3, 1, 1, 2, 3, 0, 4, 0, 3, - 0, 1, 1, 2, 1, 1, 1, 1, 1, 2, - 0, 2, 0, 5, 0, 1, 1, 0, 4, 4, - 3, 5, 1, 3, 3, 0, 6, 1, 1, 1, - 3, 2, 3, 1, 1, 0, 6, 1, 1, 1, - 3, 3, 4, 0, 6, 0, 2, 0, 4, 0, - 2, 1, 2, 4, 0, 3, 3, 0, 4, 3, - 0, 3, 4, 3, 11, 0, 3, 8, 2, 0, - 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, - 0, 2, 4, 3, 1, 1, 3, 4, 0, 0, - 0, 0, 2, 2, 1, 1, 0, 2, 3, 0, - 2, 3, 0, 2, 3, 3, 3, 2, 3, 4, - 3, 4, 3, 4, 1, 3, 4, 3, 3, 6, - 1, 5, 6, 5, 7, 6, 8, 5, 6, 4, - 4, 5, 3, 4, 1, 3, 3, 3, 3, 3, - 3, 5, 5, 3, 3, 3, 3, 3, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 2, 1, 2, - 1, 1, 1, 2, 0, 3, 1, 1, 2, 2, - 4, 1, 3, 1, 1, 1, 1, 1, 3, 1, - 1, 1, 1, 3, 2, 2, 2, 2, 3, 3, - 5, 6, 4, 4, 7, 2, 6, 5, 6, 6, - 4, 4, 5, 4, 6, 2, 2, 4, 4, 4, - 10, 6, 8, 6, 4, 4, 6, 4, 4, 4, - 6, 4, 7, 7, 7, 6, 6, 6, 6, 3, - 4, 6, 8, 2, 2, 8, 8, 6, 6, 2, - 6, 6, 8, 8, 6, 8, 6, 2, 8, 8, - 2, 2, 2, 6, 6, 4, 4, 8, 4, 4, - 4, 4, 3, 8, 6, 8, 4, 4, 6, 4, - 4, 4, 6, 8, 4, 3, 6, 4, 6, 5, - 8, 7, 10, 1, 6, 4, 4, 4, 4, 4, - 6, 4, 0, 5, 6, 2, 3, 0, 4, 0, - 3, 0, 1, 1, 3, 4, 4, 5, 4, 4, - 4, 5, 4, 0, 0, 7, 4, 5, 4, 5, - 4, 4, 4, 4, 4, 5, 0, 8, 0, 3, - 3, 1, 4, 0, 1, 0, 2, 0, 0, 4, - 4, 2, 0, 3, 2, 0, 4, 2, 1, 1, - 2, 1, 2, 1, 2, 2, 2, 0, 3, 0, - 1, 1, 3, 1, 3, 1, 3, 0, 1, 0, - 2, 4, 5, 1, 1, 1, 1, 4, 1, 3, - 3, 0, 6, 0, 8, 4, 0, 8, 0, 10, - 6, 0, 8, 0, 10, 6, 1, 2, 1, 1, - 2, 0, 1, 5, 0, 5, 3, 5, 2, 0, - 5, 1, 0, 3, 0, 3, 0, 0, 5, 0, - 1, 0, 1, 0, 2, 3, 3, 1, 1, 0, - 7, 0, 7, 1, 2, 0, 0, 2, 0, 2, - 0, 1, 1, 1, 1, 3, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 0, 2, 0, 1, - 0, 0, 3, 0, 0, 3, 2, 0, 0, 4, - 4, 2, 0, 1, 1, 3, 3, 1, 2, 0, - 1, 0, 4, 4, 2, 0, 1, 1, 0, 1, - 1, 2, 5, 4, 1, 3, 3, 1, 1, 1, - 1, 1, 1, 0, 2, 3, 4, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 6, 0, - 1, 3, 1, 3, 0, 2, 3, 1, 1, 2, - 1, 0, 1, 0, 3, 0, 0, 7, 2, 1, - 0, 3, 0, 7, 0, 7, 4, 6, 4, 4, - 5, 5, 0, 6, 4, 4, 5, 6, 4, 1, - 3, 1, 2, 1, 3, 1, 0, 2, 0, 2, - 0, 1, 0, 0, 8, 0, 0, 6, 0, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 3, 4, - 0, 3, 3, 1, 2, 2, 0, 3, 0, 5, - 3, 1, 3, 1, 3, 1, 1, 0, 1, 0, - 4, 0, 1, 3, 1, 1, 1, 0, 0, 6, - 0, 0, 11, 3, 1, 3, 3, 1, 3, 0, - 1, 0, 4, 0, 0, 9, 0, 5, 0, 6, - 0, 2, 1, 3, 2, 4, 0, 2, 0, 2, - 1, 1, 1, 0, 4, 0, 1, 0, 1, 1, - 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, - 0, 3, 0, 3, 2, 4, 4, 3, 4, 4, - 1, 3, 3, 3, 3, 6, 2, 2, 0, 6, - 0, 7, 5, 2, 1, 1, 1, 5, 5, 2, - 2, 1, 4, 3, 2, 3, 2, 2, 1, 4, - 4, 3, 3, 2, 3, 2, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, - 1, 1, 0, 1, 0, 2, 0, 1, 1, 1, - 0, 2, 0, 2, 0, 3, 3, 0, 4, 0, - 4, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 1, 1, 0, 3, 0, 1, 1, 0, 4, 0, - 4, 1, 0, 1, 4, 0, 3, 3, 1, 2, - 2, 2, 2, 2, 3, 2, 1, 1, 1, 1, - 2, 1, 1, 1, 2, 0, 1, 0, 3, 0, - 3, 3, 1, 0, 4, 0, 3, 2, 0, 1, - 0, 2, 0, 3, 3, 2, 2, 0, 5, 0, - 1, 1, 0, 1, 1, 2, 1, 2, 1, 2, - 0, 0, 0, 0, 22, 1, 1, 0, 1, 0, - 1, 1, 0, 1, 1, 0, 2, 2, 1, 3, - 4, 3, 3, 0, 2, 2, 1, 3, 3, 0, - 4, 0, 3, 1, 1, 0, 3, 2, 3, 1, - 1, 2, 0, 2, 3, 1, 5, 1, 1, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, - 3, 5, 1, 1, 1, 1, 1, 3, 4, 5, - 1, 5, 3, 2, 1, 3, 2, 2, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, - 0, 0, 7, 1, 3, 0, 3, 0, 3, 0, - 3, 0, 3, 2, 0, 2, 0, 2, 0, 4, - 0, 3, 1, 1, 1, 1, 0, 1, 1, 1, - 0, 2, 2, 2, 3, 3, 4, 6, 2, 3, - 3, 3, 5, 2, 3, 1, 3, 3, 1, 1, - 3, 3, 1, 3, 2, 2, 2, 2, 2, 1, - 1, 3, 1, 4, 4, 1, 1, 1, 1, 1, - 0, 4, 1, 1, 1, 3, 3, 1, 1, 2, - 2, 2, 0, 3, 4, 3, 0, 7, 1, 2, - 1, 1, 1, 1, 1, 1, 0, 5, 1, 1, - 1, 1, 1, 3, 6, 6, 6, 7, 5, 3, - 4, 1, 3, 8, 8, 8, 6, 4, 0, 3, - 0, 3, 1, 3, 2, 1, 1, 0, 1, 1, - 2, 0, 1, 1, 3, 0, 3, 0, 3, 0, - 3, 0, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 2, 0, - 1, 3, 1, 2, 2, 2, 1, 3, 3, 1, - 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, - 4, 5, 4, 6, 1, 0, 3, 3, 1, 1, - 0, 2, 2, 2, 2, 0, 2, 0, 3, 2, - 1, 2, 2, 2, 2, 2, 2, 0, 3, 1, - 0, 1, 0, 1, 0, 3, 2, 0, 1, 2, - 0, 1, 4, 4, 5, 2, 3, 0, 1, 0, - 4, 1, 1, 0, 1, 0, 2, 2, 1, 0, - 1, 1, 3, 4, 1, 0, 5, 3, 0, 0, - 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, - 3, 3, 3, 0, 3, 3, 0, 8, 0, 3, - 1, 3, 0, 3, 2, 4, 0, 3, 4, 4, - 0, 0, 0, 0, 18, 2, 1, 7, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 12, 4, - 4, 3, 4, 3, 2, 1, 3, 5, 1, 1, - 0, 1, 1, 0, 2, 0, 0, 3, 0, 2, - 5, 3, 3, 3, 1 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint16 yydefact[] = -{ - 0, 933, 1942, 2717, 0, 0, 0, 343, 0, 0, - 1128, 2722, 590, 68, 1811, 1936, 1937, 1720, 1750, 2, - 0, 1144, 272, 176, 0, 80, 319, 1752, 0, 1997, - 0, 0, 384, 1144, 0, 495, 0, 1992, 0, 0, - 1144, 388, 1755, 1979, 249, 176, 2722, 0, 1195, 2498, - 1852, 2008, 0, 0, 0, 1835, 0, 2582, 1800, 0, - 386, 0, 2854, 1184, 0, 3, 8, 21, 0, 43, - 26, 31, 16, 20, 15, 56, 50, 28, 2719, 315, + 0, 933, 1942, 2723, 0, 0, 0, 343, 0, 0, + 1128, 2728, 590, 68, 1811, 1936, 1937, 1720, 1750, 2, + 0, 1144, 272, 176, 0, 80, 319, 1752, 0, 2003, + 0, 0, 384, 1144, 0, 495, 0, 1998, 0, 0, + 1144, 388, 1755, 1985, 249, 176, 2728, 0, 1195, 2504, + 1852, 2014, 0, 0, 0, 1835, 0, 2588, 1800, 0, + 386, 0, 2860, 1184, 0, 3, 8, 21, 0, 43, + 26, 31, 16, 20, 15, 56, 50, 28, 2725, 315, 316, 317, 318, 41, 137, 40, 11, 59, 60, 18, 47, 12, 14, 17, 39, 46, 35, 42, 54, 1181, 24, 25, 32, 48, 64, 22, 61, 57, 23, 1942, 13, 27, 49, 44, 36, 58, 65, 37, 55, 38, 63, 30, 51, 29, 9, 10, 19, 52, 53, 45, 66, 33, 62, 34, 0, 963, 0, 0, 0, 0, - 0, 0, 1038, 945, 2786, 2787, 2788, 0, 1146, 1145, - 0, 0, 1285, 1284, 0, 2722, 2112, 1124, 1155, 2189, - 2191, 2190, 2192, 2193, 2194, 2195, 2196, 2197, 2129, 2198, - 2199, 2200, 2202, 2201, 2203, 2204, 2205, 2130, 2131, 2206, - 2207, 2208, 2210, 2209, 2211, 2132, 2133, 2212, 2213, 2214, - 2215, 2134, 2136, 2135, 2216, 2218, 2217, 2137, 2219, 2220, - 2221, 2223, 2138, 2139, 2140, 2141, 2142, 2222, 2143, 2224, - 2144, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2233, 2232, - 2145, 2234, 2235, 2237, 2238, 2239, 2236, 2240, 2242, 2241, - 2243, 2244, 2245, 2146, 2246, 2247, 2248, 2249, 2250, 2251, - 2252, 2253, 2147, 2254, 2255, 2256, 2275, 2148, 2257, 2260, - 2259, 2258, 2261, 2262, 2263, 2265, 2264, 2266, 2267, 2149, - 2150, 2268, 2269, 2270, 2271, 2273, 2272, 2277, 2278, 2279, - 2151, 2152, 2274, 2276, 2476, 2280, 2281, 2283, 2282, 2284, - 2153, 2286, 2285, 2154, 2288, 2287, 2155, 2156, 2289, 2290, - 2291, 2110, 2292, 2111, 2293, 2295, 2296, 2297, 2302, 2157, - 2294, 2298, 2299, 2300, 2301, 2303, 2158, 2305, 2304, 2306, - 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2327, 2318, - 2319, 2321, 2322, 2325, 2320, 2326, 2330, 2329, 2331, 2332, - 2333, 2334, 2335, 2328, 2316, 2323, 2324, 2317, 2336, 2337, - 2315, 2338, 2340, 2339, 2341, 2342, 2343, 2344, 2345, 2346, - 2347, 2348, 2349, 2351, 2350, 2352, 2353, 2354, 2355, 2356, - 2357, 2358, 2360, 2359, 2361, 2362, 2364, 2363, 2366, 2367, - 2159, 2365, 2368, 2369, 2370, 2371, 2372, 2374, 2373, 2160, - 2162, 2161, 2163, 2375, 2376, 2164, 2377, 2379, 2378, 2380, - 2381, 2382, 2384, 2383, 2385, 2386, 2165, 2166, 2387, 2388, - 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, - 2399, 2400, 2402, 2401, 2403, 2404, 2405, 2406, 2407, 2408, - 2409, 2167, 2410, 2168, 2411, 2412, 2169, 2413, 2170, 2414, - 2415, 2416, 2417, 2418, 2171, 2419, 2420, 2421, 2423, 2424, - 2422, 2425, 2172, 2426, 2427, 2428, 2173, 2430, 2429, 2431, - 2174, 2433, 2175, 2176, 2432, 2178, 2179, 2434, 2435, 2436, - 2177, 2437, 2180, 2438, 2439, 2441, 2440, 2442, 2443, 2444, - 2181, 2445, 2446, 2182, 2447, 2448, 2449, 2450, 2451, 2453, - 2452, 2454, 2455, 2456, 2457, 2459, 2461, 2460, 2458, 2462, - 2463, 2464, 2465, 2469, 2470, 2471, 2472, 2466, 2467, 2468, - 2183, 2473, 2474, 2475, 2477, 2478, 2480, 2479, 2184, 2185, - 2481, 2482, 2188, 2483, 2484, 2488, 2485, 2497, 2486, 2487, - 2490, 2489, 2491, 2492, 2493, 2186, 2494, 2187, 2495, 2496, - 194, 2115, 178, 2116, 2128, 345, 124, 2573, 2572, 1082, - 0, 2723, 2724, 0, 0, 0, 1828, 0, 1748, 1748, + 0, 0, 1038, 945, 2792, 2793, 2794, 0, 1146, 1145, + 0, 0, 1285, 1284, 0, 2728, 2118, 1124, 1155, 2195, + 2197, 2196, 2198, 2199, 2200, 2201, 2202, 2203, 2135, 2204, + 2205, 2206, 2208, 2207, 2209, 2210, 2211, 2136, 2137, 2212, + 2213, 2214, 2216, 2215, 2217, 2138, 2139, 2218, 2219, 2220, + 2221, 2140, 2142, 2141, 2222, 2224, 2223, 2143, 2225, 2226, + 2227, 2229, 2144, 2145, 2146, 2147, 2148, 2228, 2149, 2230, + 2150, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2239, 2238, + 2151, 2240, 2241, 2243, 2244, 2245, 2242, 2246, 2248, 2247, + 2249, 2250, 2251, 2152, 2252, 2253, 2254, 2255, 2256, 2257, + 2258, 2259, 2153, 2260, 2261, 2262, 2281, 2154, 2263, 2266, + 2265, 2264, 2267, 2268, 2269, 2271, 2270, 2272, 2273, 2155, + 2156, 2274, 2275, 2276, 2277, 2279, 2278, 2283, 2284, 2285, + 2157, 2158, 2280, 2282, 2482, 2286, 2287, 2289, 2288, 2290, + 2159, 2292, 2291, 2160, 2294, 2293, 2161, 2162, 2295, 2296, + 2297, 2116, 2298, 2117, 2299, 2301, 2302, 2303, 2308, 2163, + 2300, 2304, 2305, 2306, 2307, 2309, 2164, 2311, 2310, 2312, + 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2333, 2324, + 2325, 2327, 2328, 2331, 2326, 2332, 2336, 2335, 2337, 2338, + 2339, 2340, 2341, 2334, 2322, 2329, 2330, 2323, 2342, 2343, + 2321, 2344, 2346, 2345, 2347, 2348, 2349, 2350, 2351, 2352, + 2353, 2354, 2355, 2357, 2356, 2358, 2359, 2360, 2361, 2362, + 2363, 2364, 2366, 2365, 2367, 2368, 2370, 2369, 2372, 2373, + 2165, 2371, 2374, 2375, 2376, 2377, 2378, 2380, 2379, 2166, + 2168, 2167, 2169, 2381, 2382, 2170, 2383, 2385, 2384, 2386, + 2387, 2388, 2390, 2389, 2391, 2392, 2171, 2172, 2393, 2394, + 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, + 2405, 2406, 2408, 2407, 2409, 2410, 2411, 2412, 2413, 2414, + 2415, 2173, 2416, 2174, 2417, 2418, 2175, 2419, 2176, 2420, + 2421, 2422, 2423, 2424, 2177, 2425, 2426, 2427, 2429, 2430, + 2428, 2431, 2178, 2432, 2433, 2434, 2179, 2436, 2435, 2437, + 2180, 2439, 2181, 2182, 2438, 2184, 2185, 2440, 2441, 2442, + 2183, 2443, 2186, 2444, 2445, 2447, 2446, 2448, 2449, 2450, + 2187, 2451, 2452, 2188, 2453, 2454, 2455, 2456, 2457, 2459, + 2458, 2460, 2461, 2462, 2463, 2465, 2467, 2466, 2464, 2468, + 2469, 2470, 2471, 2475, 2476, 2477, 2478, 2472, 2473, 2474, + 2189, 2479, 2480, 2481, 2483, 2484, 2486, 2485, 2190, 2191, + 2487, 2488, 2194, 2489, 2490, 2494, 2491, 2503, 2492, 2493, + 2496, 2495, 2497, 2498, 2499, 2192, 2500, 2193, 2501, 2502, + 194, 2121, 178, 2122, 2134, 345, 124, 2579, 2578, 1082, + 0, 2729, 2730, 0, 0, 0, 1828, 0, 1748, 1748, 1748, 1746, 0, 1748, 1748, 1748, 0, 1751, 1748, 1748, 1748, 0, 73, 1947, 273, 0, 0, 0, 0, 0, - 2109, 0, 336, 1758, 0, 0, 1999, 2015, 0, 2016, - 2010, 2570, 321, 0, 1219, 0, 0, 0, 0, 176, + 2115, 0, 336, 1758, 0, 0, 2005, 2021, 0, 2022, + 2016, 2576, 321, 0, 1219, 0, 0, 0, 0, 176, 1147, 1090, 321, 1809, 0, 239, 248, 250, 251, 247, - 0, 2724, 2735, 1182, 1190, 1639, 1203, 2500, 0, 1916, + 0, 2730, 2741, 1182, 1190, 1639, 1203, 2506, 0, 1916, 251, 0, 124, 1063, 0, 124, 1836, 1833, 0, 0, - 0, 1809, 2009, 0, 2838, 0, 0, 0, 2834, 0, - 2839, 0, 1184, 0, 0, 1, 5, 0, 0, 588, - 888, 588, 889, 887, 588, 2788, 0, 0, 0, 0, - 0, 2270, 2152, 2379, 1929, 1941, 1927, 2104, 0, 936, - 964, 0, 941, 0, 939, 2121, 2120, 2119, 953, 952, - 951, 949, 0, 456, 0, 1040, 2793, 0, 943, 0, - 1101, 1931, 1932, 1933, 1934, 1935, 1938, 367, 2718, 0, + 0, 1809, 2015, 0, 2844, 0, 0, 0, 2840, 0, + 2845, 0, 1184, 0, 0, 1, 5, 0, 0, 588, + 888, 588, 889, 887, 588, 2794, 0, 0, 0, 0, + 0, 2276, 2158, 2385, 1929, 1941, 1927, 2110, 0, 936, + 964, 0, 941, 0, 939, 2127, 2126, 2125, 953, 952, + 951, 949, 0, 456, 0, 1040, 2799, 0, 943, 0, + 1101, 1931, 1932, 1933, 1934, 1935, 1938, 367, 2724, 0, 196, 0, 356, 359, 0, 348, 351, 0, 125, 126, - 0, 1126, 1129, 0, 0, 2727, 0, 591, 142, 0, - 1832, 1831, 1830, 0, 1828, 2190, 2129, 2205, 0, 2078, - 0, 0, 0, 1507, 0, 2134, 0, 2219, 2221, 2138, - 2139, 2140, 2141, 2142, 2145, 0, 0, 1232, 1232, 1232, - 1229, 0, 0, 0, 2244, 2245, 2083, 0, 0, 0, - 2074, 2084, 2152, 2283, 2284, 0, 2076, 2077, 2290, 0, - 0, 0, 2304, 0, 2309, 2081, 0, 0, 2346, 2348, - 0, 0, 2352, 2353, 2354, 2355, 2058, 1287, 0, 1229, - 2073, 2080, 2371, 2066, 2380, 2385, 2386, 0, 2395, 0, - 0, 2417, 0, 2424, 2422, 2428, 0, 0, 2450, 0, - 0, 1229, 2057, 2469, 2470, 2471, 2472, 0, 2075, 2183, - 2082, 0, 2483, 1232, 1229, 1229, 0, 0, 0, 2491, - 2492, 2496, 0, 0, 0, 2758, 1286, 0, 1468, 0, + 0, 1126, 1129, 0, 0, 2733, 0, 591, 142, 0, + 1832, 1831, 1830, 0, 1828, 2196, 2135, 2211, 0, 2084, + 0, 0, 0, 1507, 0, 2140, 0, 2225, 2227, 2144, + 2145, 2146, 2147, 2148, 2151, 0, 0, 1232, 1232, 1232, + 1229, 0, 0, 0, 2250, 2251, 2089, 0, 0, 0, + 2080, 2090, 2158, 2289, 2290, 0, 2082, 2083, 2296, 0, + 0, 0, 2310, 0, 2315, 2087, 0, 0, 2352, 2354, + 0, 0, 2358, 2359, 2360, 2361, 2064, 1287, 0, 1229, + 2079, 2086, 2377, 2072, 2386, 2391, 2392, 0, 2401, 0, + 0, 2423, 0, 2430, 2428, 2434, 0, 0, 2456, 0, + 0, 1229, 2063, 2475, 2476, 2477, 2478, 0, 2081, 2189, + 2088, 0, 2489, 1232, 1229, 1229, 0, 0, 0, 2497, + 2498, 2502, 0, 0, 0, 2764, 1286, 0, 1468, 0, 1501, 1244, 1250, 1264, 0, 1279, 1314, 1315, 1317, 1423, - 1316, 1322, 1321, 1721, 2070, 1320, 1319, 2071, 2072, 1313, - 2094, 2115, 2093, 0, 0, 0, 0, 0, 0, 0, + 1316, 1322, 1321, 1721, 2076, 1320, 1319, 2077, 2078, 1313, + 2100, 2121, 2099, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 1912, 0, 176, 1732, 1748, 75, 0, - 0, 2631, 2646, 2647, 1232, 2643, 2648, 2264, 2150, 2277, - 0, 2645, 2637, 0, 2390, 2394, 2641, 2409, 2412, 2635, - 0, 2175, 2454, 2667, 2639, 2644, 2625, 2612, 2626, 0, - 0, 2629, 2633, 2106, 1613, 2585, 2586, 0, 81, 0, - 0, 1760, 1761, 1759, 1036, 0, 2851, 2000, 2001, 2002, - 0, 2019, 0, 365, 0, 331, 0, 0, 0, 323, + 0, 2637, 2652, 2653, 1232, 2649, 2654, 2270, 2156, 2283, + 0, 2651, 2643, 0, 2396, 2400, 2647, 2415, 2418, 2641, + 0, 2181, 2460, 2673, 2645, 2650, 2631, 2618, 2632, 0, + 0, 2635, 2639, 2112, 1613, 2591, 2592, 0, 81, 0, + 0, 1760, 1761, 1759, 1036, 0, 2857, 2006, 2007, 2008, + 0, 2025, 0, 365, 0, 331, 0, 0, 0, 323, 321, 0, 314, 304, 0, 305, 309, 310, 311, 312, - 313, 306, 307, 377, 308, 2117, 0, 2118, 1142, 0, - 0, 505, 496, 0, 1911, 1910, 0, 1993, 2736, 0, - 0, 0, 321, 377, 1763, 1810, 0, 1762, 1985, 0, - 1983, 1980, 1982, 240, 0, 0, 270, 2191, 2631, 2394, - 2603, 0, 2611, 0, 2730, 2727, 2737, 1713, 0, 1648, - 1640, 0, 1210, 2771, 2766, 2765, 2768, 2769, 1209, 2770, - 1208, 2767, 2764, 1219, 1204, 1206, 1207, 0, 810, 0, - 0, 2523, 2524, 2360, 2380, 2418, 2525, 2466, 0, 0, - 2545, 2499, 2509, 2505, 0, 0, 1874, 0, 810, 1924, - 1875, 0, 0, 1924, 0, 1648, 1914, 1917, 0, 2527, - 1888, 885, 884, 883, 2528, 1910, 0, 1860, 1876, 0, - 1837, 1881, 124, 2529, 0, 1913, 0, 1648, 1924, 0, + 313, 306, 307, 377, 308, 2123, 0, 2124, 1142, 0, + 0, 505, 496, 0, 1911, 1910, 0, 1999, 2742, 0, + 0, 0, 321, 377, 1763, 1810, 0, 1762, 1991, 0, + 1989, 1986, 1988, 240, 0, 0, 270, 2197, 2637, 2400, + 2609, 0, 2617, 0, 2736, 2733, 2743, 1713, 0, 1648, + 1640, 0, 1210, 2777, 2772, 2771, 2774, 2775, 1209, 2776, + 1208, 2773, 2770, 1219, 1204, 1206, 1207, 0, 810, 0, + 0, 2529, 2530, 2366, 2386, 2424, 2531, 2472, 0, 0, + 2551, 2505, 2515, 2511, 0, 0, 1874, 0, 810, 1924, + 1875, 0, 0, 1924, 0, 1648, 1914, 1917, 0, 2533, + 1888, 885, 884, 883, 2534, 1910, 0, 1860, 1876, 0, + 1837, 1881, 124, 2535, 0, 1913, 0, 1648, 1924, 0, 1853, 0, 0, 0, 0, 1218, 0, 246, 1070, 1070, - 0, 0, 1062, 1064, 1065, 1070, 1070, 0, 2852, 2853, - 2583, 1036, 377, 0, 2065, 2063, 2064, 2113, 2835, 2062, - 2061, 2843, 2845, 2831, 2833, 2840, 0, 2743, 1195, 6, - 67, 0, 0, 176, 176, 138, 1219, 1219, 2788, 588, - 144, 588, 588, 588, 588, 0, 1944, 2791, 2792, 2790, - 826, 0, 1232, 2122, 2125, 2789, 2126, 179, 950, 0, + 0, 0, 1062, 1064, 1065, 1070, 1070, 0, 2858, 2859, + 2589, 1036, 377, 0, 2071, 2069, 2070, 2119, 2841, 2068, + 2067, 2849, 2851, 2837, 2839, 2846, 0, 2749, 1195, 6, + 67, 0, 0, 176, 176, 138, 1219, 1219, 2794, 588, + 144, 588, 588, 588, 588, 0, 1944, 2797, 2798, 2796, + 826, 0, 1232, 2128, 2131, 2795, 2132, 179, 950, 0, 457, 179, 0, 0, 0, 0, 0, 458, 459, 395, 0, 1044, 1045, 1039, 1041, 1043, 0, 0, 946, 0, - 2793, 1943, 0, 369, 0, 1157, 1159, 1158, 1175, 198, + 2799, 1943, 0, 369, 0, 1157, 1159, 1158, 1175, 198, 195, 177, 0, 321, 0, 346, 352, 82, 1084, 1739, - 1741, 0, 1130, 2726, 0, 0, 2728, 2732, 141, 0, + 1741, 0, 1130, 2732, 0, 0, 2734, 2738, 141, 0, 0, 0, 1812, 1816, 1822, 1826, 1829, 0, 0, 1618, 1335, 1618, 1618, 1618, 1508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1618, 0, - 1373, 1345, 1346, 0, 1374, 0, 0, 0, 2085, 0, - 0, 0, 2758, 0, 0, 0, 0, 1473, 0, 0, - 0, 2758, 0, 0, 0, 0, 0, 0, 1503, 1505, - 2093, 1618, 0, 0, 1618, 0, 0, 0, 0, 0, + 1373, 1345, 1346, 0, 1374, 0, 0, 0, 2091, 0, + 0, 0, 2764, 0, 0, 0, 0, 1473, 0, 0, + 0, 2764, 0, 0, 0, 0, 0, 0, 1503, 1505, + 2099, 1618, 0, 0, 1618, 0, 0, 0, 0, 0, 1237, 1379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1618, 1618, 0, 0, 1618, - 1387, 2087, 0, 0, 0, 2086, 0, 0, 0, 2059, - 2079, 0, 1390, 1392, 1391, 0, 1618, 1618, 0, 0, + 1387, 2093, 0, 0, 0, 2092, 0, 0, 0, 2065, + 2085, 0, 1390, 1392, 1391, 0, 1618, 1618, 0, 0, 0, 1325, 1324, 1326, 0, 0, 0, 0, 0, 0, 1283, 1282, 1281, 1280, 0, 0, 0, 0, 1289, 0, 1291, 1293, 1288, 1290, 1292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1327, 0, 0, 0, 2060, 1432, + 0, 0, 0, 0, 1327, 0, 0, 0, 2066, 1432, 0, 1749, 1726, 1734, 1728, 1747, 0, 1912, 1729, 0, 1738, 470, 0, 1735, 0, 0, 1722, 0, 74, 0, 1972, 0, 0, 0, 1966, 1968, 1971, 1967, 0, 0, 1973, 124, 0, 1969, 1948, 1951, 1958, 1218, 1949, 0, - 0, 271, 274, 276, 0, 279, 2632, 2630, 2664, 2663, - 2668, 0, 2665, 2661, 2624, 2654, 2695, 2658, 0, 2695, - 2660, 2659, 2695, 2655, 2662, 2695, 0, 2627, 0, 1614, - 1615, 0, 2584, 0, 2105, 0, 0, 1037, 0, 0, - 2003, 2004, 0, 1165, 2020, 2021, 2017, 1613, 2571, 2574, + 0, 271, 274, 276, 0, 279, 2638, 2636, 2670, 2669, + 2674, 0, 2671, 2667, 2630, 2660, 2701, 2664, 0, 2701, + 2666, 2665, 2701, 2661, 2668, 2701, 0, 2633, 0, 1614, + 1615, 0, 2590, 0, 2111, 0, 0, 1037, 0, 0, + 2009, 2010, 0, 1165, 2026, 2027, 2023, 1613, 2577, 2580, 369, 330, 333, 0, 0, 326, 325, 327, 0, 0, 0, 219, 322, 385, 0, 0, 699, 1220, 506, 0, - 0, 517, 0, 0, 70, 71, 0, 1149, 2127, 0, + 0, 517, 0, 0, 70, 71, 0, 1149, 2133, 0, 1148, 1152, 0, 1088, 1091, 0, 374, 389, 0, 1766, - 1756, 1765, 1541, 1990, 1987, 124, 0, 238, 263, 258, + 1756, 1765, 1541, 1996, 1993, 124, 0, 238, 263, 258, 266, 260, 262, 261, 267, 268, 269, 264, 259, 265, - 252, 0, 0, 2630, 0, 0, 2627, 2731, 0, 2733, - 2749, 1191, 2738, 1704, 1641, 1650, 1210, 0, 1649, 1544, + 252, 0, 0, 2636, 0, 0, 2633, 2737, 0, 2739, + 2755, 1191, 2744, 1704, 1641, 1650, 1210, 0, 1649, 1544, 1620, 0, 0, 1193, 1215, 1196, 1214, 0, 1205, 0, - 2501, 2503, 0, 809, 0, 0, 812, 814, 1786, 1785, - 813, 822, 0, 811, 0, 2560, 0, 2543, 0, 2530, - 0, 818, 820, 819, 2538, 817, 0, 0, 2514, 0, + 2507, 2509, 0, 809, 0, 0, 812, 814, 1786, 1785, + 813, 822, 0, 811, 0, 2566, 0, 2549, 0, 2536, + 0, 818, 820, 819, 2544, 817, 0, 0, 2520, 0, 0, 1920, 1218, 1218, 1887, 0, 588, 0, 0, 0, 0, 0, 0, 1854, 0, 0, 639, 1880, 1918, 1919, 1924, 0, 0, 1924, 0, 1893, 1914, 1924, 0, 1924, @@ -5402,19 +4224,19 @@ 1838, 1839, 0, 1867, 1895, 0, 1914, 1879, 1886, 0, 1866, 1873, 0, 1884, 1914, 1914, 0, 1924, 1924, 1924, 1058, 1074, 1056, 1068, 1069, 0, 0, 1061, 1060, 1834, - 1544, 387, 372, 0, 0, 2832, 2846, 2830, 2841, 2842, - 2829, 1186, 2742, 1183, 2741, 2744, 0, 1185, 7, 4, - 0, 135, 0, 0, 0, 588, 588, 1219, 2785, 0, - 2773, 2780, 2781, 2784, 2816, 2783, 2782, 588, 2779, 2772, - 2775, 2776, 2778, 2777, 2793, 0, 0, 0, 0, 0, + 1544, 387, 372, 0, 0, 2838, 2852, 2836, 2847, 2848, + 2835, 1186, 2748, 1183, 2747, 2750, 0, 1185, 7, 4, + 0, 135, 0, 0, 0, 588, 588, 1219, 2791, 0, + 2779, 2786, 2787, 2790, 2822, 2789, 2788, 588, 2785, 2778, + 2781, 2782, 2784, 2783, 2799, 0, 0, 0, 0, 0, 1930, 1928, 1945, 1946, 827, 826, 582, 585, 584, 0, - 0, 2124, 0, 942, 0, 1912, 940, 0, 0, 1912, + 0, 2130, 0, 942, 0, 1912, 940, 0, 0, 1912, 406, 1912, 460, 934, 1042, 0, 588, 947, 944, 1102, 1103, 1106, 368, 221, 0, 0, 494, 1175, 1161, 1177, 0, 199, 201, 357, 321, 0, 0, 0, 1086, 1085, 0, 1083, 1140, 1138, 1137, 1135, 0, 1136, 1134, 1125, - 1131, 1132, 2725, 2729, 1912, 398, 1818, 1743, 1541, 1745, - 2104, 0, 0, 0, 1824, 0, 0, 1619, 1618, 0, + 1131, 1132, 2731, 2735, 1912, 398, 1818, 1743, 1541, 1745, + 2110, 0, 0, 0, 1824, 0, 0, 1619, 1618, 0, 1482, 0, 0, 0, 0, 1509, 0, 0, 0, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 0, 0, 1453, 0, 1482, 1233, 1692, 1693, 1677, 1678, 1676, 1679, @@ -5427,46 +4249,46 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1415, 0, 0, 0, 0, 0, 1618, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1369, 0, 2096, 2095, 0, 0, 0, - 854, 0, 1329, 0, 1328, 1552, 1187, 2754, 2759, 0, - 2530, 1469, 1471, 0, 1235, 1234, 1236, 1247, 1240, 1245, - 1238, 1242, 0, 1294, 2197, 1248, 0, 0, 1276, 2758, + 0, 0, 0, 1369, 0, 2102, 2101, 0, 0, 0, + 854, 0, 1329, 0, 1328, 1552, 1187, 2760, 2765, 0, + 2536, 1469, 1471, 0, 1235, 1234, 1236, 1247, 1240, 1245, + 1238, 1242, 0, 1294, 2203, 1248, 0, 0, 1276, 2764, 1627, 1277, 1262, 1267, 1268, 0, 1265, 1266, 0, 1270, 0, 1269, 1273, 1274, 1275, 1278, 0, 0, 0, 0, - 1318, 1323, 1502, 1219, 2097, 0, 0, 470, 1731, 2622, - 473, 472, 1736, 471, 1787, 2680, 1730, 1046, 0, 0, - 76, 78, 1963, 1960, 1959, 1961, 1965, 124, 1970, 1962, - 0, 1974, 1975, 2244, 2469, 2472, 283, 0, 256, 255, - 257, 280, 0, 0, 2657, 0, 2638, 0, 2642, 2636, - 2640, 2125, 2694, 0, 2620, 2682, 0, 0, 2628, 0, - 2666, 2649, 2653, 2652, 2650, 0, 2651, 2656, 2634, 1617, - 2278, 2363, 0, 1620, 2588, 320, 337, 1753, 2850, 2005, - 2483, 2006, 1998, 0, 2018, 0, 0, 0, 366, 332, + 1318, 1323, 1502, 1219, 2103, 0, 0, 470, 1731, 2628, + 473, 472, 1736, 471, 1787, 2686, 1730, 1046, 0, 0, + 76, 78, 1977, 1960, 1959, 1961, 1965, 124, 1970, 1962, + 0, 1974, 1975, 2250, 2475, 2478, 283, 0, 256, 255, + 257, 280, 0, 0, 2663, 0, 2644, 0, 2648, 2642, + 2646, 2131, 2700, 0, 2626, 2688, 0, 0, 2634, 0, + 2672, 2655, 2659, 2658, 2656, 0, 2657, 2662, 2640, 1617, + 2284, 2369, 0, 1620, 2594, 320, 337, 1753, 2856, 2011, + 2489, 2012, 2004, 0, 2024, 0, 0, 0, 366, 332, 0, 324, 371, 220, 363, 378, 382, 380, 1143, 700, 0, 1219, 504, 503, 502, 501, 0, 519, 499, 507, - 72, 0, 0, 1994, 0, 0, 0, 0, 0, 1092, - 0, 1764, 0, 0, 1742, 1542, 0, 1986, 1988, 1981, - 0, 0, 0, 0, 0, 2684, 2609, 0, 0, 0, - 2734, 2751, 2750, 2739, 0, 0, 1719, 0, 1714, 0, - 1192, 1660, 1661, 2421, 1659, 1651, 1654, 1658, 1657, 1202, + 72, 0, 0, 2000, 0, 0, 0, 0, 0, 1092, + 0, 1764, 0, 0, 1742, 1542, 0, 1992, 1994, 1987, + 0, 0, 0, 0, 0, 2690, 2615, 0, 0, 0, + 2740, 2757, 2756, 2745, 0, 0, 1719, 0, 1714, 0, + 1192, 1660, 1661, 2427, 1659, 1651, 1654, 1658, 1657, 1202, 1560, 1559, 0, 1198, 1516, 1201, 1518, 1515, 1514, 1513, - 0, 1559, 1621, 1628, 1211, 0, 1219, 1220, 1220, 2093, - 0, 0, 0, 2541, 2547, 0, 2540, 2539, 0, 0, - 0, 2562, 2544, 0, 0, 2508, 2548, 2549, 2552, 0, - 0, 0, 0, 0, 2546, 2466, 2510, 2511, 2516, 2506, - 2568, 2569, 2566, 2567, 2565, 2535, 1894, 0, 1922, 0, + 0, 1559, 1621, 1628, 1211, 0, 1219, 1220, 1220, 2099, + 0, 0, 0, 2547, 2553, 0, 2546, 2545, 0, 0, + 0, 2568, 2550, 0, 0, 2514, 2554, 2555, 2558, 0, + 0, 0, 0, 0, 2552, 2472, 2516, 2517, 2522, 2512, + 2574, 2575, 2572, 2573, 2571, 2541, 1894, 0, 1922, 0, 0, 0, 0, 1904, 1898, 1897, 1891, 1899, 1892, 1909, 1908, 1907, 1864, 1863, 1857, 1915, 1903, 1901, 176, 1924, 1862, 1861, 1902, 1900, 1843, 1844, 1845, 0, 1648, 0, 1920, 1896, 1924, 1914, 0, 1924, 1924, 1905, 1906, 1883, 1885, 1059, 1076, 1075, 1071, 1072, 1077, 1067, 1066, 0, - 321, 2836, 2844, 2848, 1648, 2748, 2746, 589, 826, 2618, - 139, 588, 2815, 0, 0, 588, 588, 0, 2774, 145, - 904, 0, 0, 127, 583, 1787, 1787, 0, 2123, 0, + 321, 2842, 2850, 2854, 1648, 2754, 2752, 589, 826, 2624, + 139, 588, 2821, 0, 0, 588, 588, 0, 2780, 145, + 904, 0, 0, 127, 583, 1787, 1787, 0, 2129, 0, 0, 0, 0, 0, 0, 0, 180, 189, 0, 0, 404, 405, 1787, 403, 446, 447, 450, 451, 452, 0, 453, 1787, 1787, 400, 426, 427, 430, 431, 432, 433, - 434, 396, 0, 401, 826, 2794, 2795, 0, 955, 0, + 434, 396, 0, 401, 826, 2800, 2801, 0, 955, 0, 0, 1105, 217, 1164, 1156, 1163, 1160, 1175, 1173, 1162, 880, 879, 0, 1176, 197, 0, 0, 344, 353, 347, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5474,1869 +4296,1383 @@ 0, 0, 0, 0, 83, 84, 104, 1740, 0, 1127, 1139, 1133, 1787, 1787, 1787, 1787, 402, 435, 436, 439, 440, 441, 442, 445, 443, 444, 0, 1912, 0, 0, - 1813, 0, 2107, 1823, 1544, 1827, 1826, 0, 1398, 0, + 1813, 0, 2113, 1823, 1544, 1827, 1826, 0, 1398, 0, 1446, 0, 1448, 1449, 1450, 0, 0, 0, 0, 0, 1399, 0, 1343, 1400, 1401, 0, 1395, 0, 1396, 0, 0, 0, 0, 0, 0, 0, 1452, 0, 1231, 0, 0, 1347, 1348, 1340, 1332, 0, 0, 1425, 0, 0, 1349, 0, 0, 0, 0, 1406, 0, 1426, 1504, 0, - 1506, 2097, 0, 1458, 1407, 1354, 0, 1456, 0, 1355, + 1506, 2103, 0, 1458, 1407, 1354, 0, 1456, 0, 1355, 1427, 1428, 1429, 1409, 1410, 0, 1431, 0, 1411, 0, 0, 1414, 0, 0, 1357, 1462, 1460, 0, 0, 0, 0, 1464, 1359, 0, 0, 0, 1358, 0, 0, 0, 0, 0, 0, 0, 1361, 0, 1341, 1461, 1463, 1417, - 0, 0, 0, 0, 0, 1370, 0, 1199, 1551, 2760, - 1187, 0, 0, 2749, 2757, 1333, 0, 0, 2098, 1241, - 1246, 1239, 1243, 2758, 0, 0, 0, 0, 1260, 1259, - 0, 0, 0, 2758, 1627, 1263, 0, 0, 1442, 1443, + 0, 0, 0, 0, 0, 1370, 0, 1199, 1551, 2766, + 1187, 0, 0, 2755, 2763, 1333, 0, 0, 2104, 1241, + 1246, 1239, 1243, 2764, 0, 0, 0, 0, 1260, 1259, + 0, 0, 0, 2764, 1627, 1263, 0, 0, 1442, 1443, 1499, 0, 1727, 1724, 1737, 0, 1788, 0, 0, 1048, - 1047, 1733, 1046, 79, 0, 1964, 1957, 1976, 1952, 0, - 275, 284, 277, 281, 282, 278, 2699, 0, 2698, 0, - 0, 0, 0, 2617, 2676, 2679, 2104, 0, 0, 0, - 2592, 2599, 2595, 2600, 2593, 2594, 2598, 2601, 2602, 2589, - 2596, 1648, 321, 0, 2007, 1166, 1168, 1169, 1167, 1175, - 0, 0, 2577, 2578, 2576, 2575, 328, 369, 321, 321, - 0, 509, 0, 518, 0, 530, 0, 0, 0, 1996, - 1995, 0, 1150, 1153, 1154, 1099, 1097, 1096, 1098, 1087, - 1093, 1094, 0, 575, 1770, 0, 0, 0, 1776, 1757, - 1767, 0, 1674, 1675, 1671, 1672, 1670, 1673, 1991, 1989, - 1984, 0, 253, 2610, 0, 0, 0, 0, 0, 0, - 0, 2114, 1718, 1715, 0, 1705, 1707, 1708, 1710, 2092, - 1642, 1645, 0, 0, 0, 0, 1559, 1544, 0, 0, - 1536, 1561, 0, 1561, 1538, 1539, 1544, 1544, 1541, 1556, - 0, 0, 1623, 0, 1213, 1221, 1216, 0, 2504, 0, - 2534, 0, 825, 824, 823, 821, 2561, 0, 0, 0, - 2554, 2555, 0, 0, 2531, 2532, 2533, 0, 2536, 2513, - 2514, 2515, 0, 1921, 0, 1868, 1925, 1926, 0, 1890, - 1889, 1859, 0, 1882, 1840, 1922, 1858, 1620, 1914, 1855, - 1856, 1074, 0, 1057, 0, 321, 0, 0, 2847, 2747, - 136, 826, 0, 140, 0, 0, 178, 2824, 2810, 0, - 0, 0, 0, 0, 0, 0, 592, 0, 0, 938, - 183, 186, 184, 0, 185, 0, 0, 455, 454, 0, - 1912, 448, 0, 0, 0, 0, 0, 0, 0, 0, - 147, 0, 0, 1912, 428, 407, 408, 411, 412, 413, - 1034, 1787, 1034, 0, 1787, 1787, 1034, 1787, 0, 0, - 1787, 1787, 0, 0, 1787, 0, 0, 1034, 0, 1787, - 0, 1021, 0, 0, 1787, 1787, 1787, 1787, 1787, 1034, - 0, 0, 1787, 1787, 494, 1787, 0, 0, 1052, 0, - 0, 1787, 1787, 1787, 1787, 0, 0, 1787, 1787, 0, - 1787, 971, 1020, 594, 621, 622, 935, 970, 972, 984, - 490, 0, 1002, 1023, 1024, 1022, 0, 2796, 0, 957, - 959, 1104, 0, 0, 321, 0, 0, 1580, 200, 321, - 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1141, 0, 0, 0, - 0, 1912, 437, 0, 1787, 397, 414, 415, 418, 419, - 420, 421, 422, 425, 423, 424, 1744, 1826, 1544, 1620, - 2105, 1620, 0, 1825, 0, 0, 1447, 1483, 0, 1510, - 0, 1337, 783, 783, 783, 1493, 768, 1497, 1488, 783, - 1489, 783, 1491, 0, 0, 0, 1296, 1312, 0, 0, - 0, 0, 0, 1454, 1451, 0, 0, 0, 0, 0, - 1477, 0, 0, 0, 1342, 0, 1437, 1459, 1457, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1465, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 843, 849, 852, 853, 855, - 847, 0, 1419, 1330, 2752, 1200, 1620, 1219, 2761, 2763, - 0, 2743, 1552, 2755, 929, 1470, 0, 1257, 1253, 0, - 1251, 1626, 1272, 1271, 0, 0, 0, 1261, 1220, 1433, - 1219, 0, 1500, 2099, 1725, 2623, 469, 638, 2681, 1723, - 77, 1955, 0, 1950, 1953, 0, 0, 2696, 0, 2707, - 0, 2686, 2687, 0, 0, 2683, 0, 0, 0, 0, - 0, 0, 2587, 321, 1797, 0, 1175, 1179, 2011, 2580, - 2581, 2579, 0, 361, 361, 361, 361, 0, 510, 511, - 513, 1220, 527, 505, 0, 497, 500, 0, 509, 0, - 0, 1089, 1095, 0, 1203, 0, 1789, 1774, 1781, 1775, - 0, 0, 0, 1773, 2089, 2088, 2095, 2737, 0, 1586, - 0, 0, 2608, 2685, 0, 0, 0, 2740, 815, 1709, - 0, 0, 1646, 1647, 1644, 1662, 1653, 0, 1656, 1655, - 0, 2743, 1554, 0, 1540, 1537, 1562, 0, 1561, 1561, - 1544, 0, 1520, 1519, 1613, 1546, 1203, 1622, 0, 1624, - 1639, 1212, 0, 1217, 1225, 1224, 2090, 2097, 2502, 2542, - 0, 0, 0, 0, 2559, 2553, 2550, 2551, 0, 2512, - 2518, 2517, 2520, 2522, 1684, 1685, 1683, 1681, 1682, 1923, - 1648, 1878, 1877, 1851, 1870, 1872, 1924, 1073, 0, 1080, - 1078, 1801, 1804, 0, 0, 2837, 2849, 0, 0, 2818, - 0, 0, 0, 156, 0, 920, 922, 921, 906, 905, - 0, 131, 133, 0, 679, 128, 481, 490, 593, 596, - 637, 636, 188, 187, 192, 193, 1688, 1689, 1686, 1687, - 461, 474, 1690, 475, 449, 151, 150, 152, 153, 155, - 154, 149, 954, 0, 462, 463, 429, 0, 409, 1035, - 927, 588, 1006, 0, 680, 588, 881, 881, 586, 0, - 0, 1144, 0, 0, 1746, 0, 0, 1144, 0, 0, - 0, 1787, 0, 1014, 966, 0, 1748, 0, 1746, 1746, - 1015, 0, 0, 967, 1787, 0, 0, 0, 0, 0, - 1746, 1144, 0, 0, 0, 492, 0, 1144, 986, 1055, - 1053, 1054, 0, 1144, 1144, 0, 0, 0, 0, 627, - 628, 626, 0, 0, 0, 619, 595, 826, 968, 491, - 969, 679, 0, 1049, 676, 682, 2100, 0, 2798, 2720, - 0, 0, 161, 1108, 0, 1107, 232, 231, 0, 223, - 300, 370, 0, 222, 0, 1583, 0, 1584, 1581, 1582, - 321, 354, 109, 113, 105, 90, 86, 117, 118, 88, - 89, 93, 92, 94, 95, 98, 99, 96, 91, 97, - 87, 121, 123, 122, 100, 119, 120, 85, 468, 467, - 466, 465, 438, 0, 0, 1912, 416, 0, 1620, 1639, - 2108, 1817, 0, 1371, 1511, 0, 0, 784, 1484, 1485, - 1495, 0, 1496, 770, 769, 785, 1487, 1490, 1494, 1492, - 1336, 1344, 1393, 0, 1310, 1394, 0, 1424, 1339, 1338, - 0, 0, 0, 1377, 1404, 0, 1378, 0, 1475, 0, - 0, 1351, 0, 1353, 0, 0, 1439, 1408, 1430, 1380, - 1412, 0, 1356, 1331, 0, 1381, 0, 1386, 1384, 0, - 1360, 0, 0, 1367, 0, 1365, 0, 1366, 0, 1368, - 1416, 1418, 0, 0, 854, 840, 841, 842, 0, 844, - 846, 848, 0, 0, 1628, 1553, 2762, 1189, 2753, 1199, - 0, 0, 1472, 1249, 0, 1258, 1255, 0, 1252, 1221, - 1444, 1434, 0, 0, 292, 287, 295, 289, 291, 290, - 296, 297, 298, 299, 293, 288, 294, 286, 285, 2697, - 0, 2616, 0, 2690, 2692, 2621, 2678, 2677, 2700, 2700, - 2700, 0, 340, 0, 1754, 1170, 1175, 1179, 0, 1171, - 2022, 329, 334, 364, 362, 376, 379, 383, 381, 514, - 0, 0, 0, 534, 0, 532, 508, 0, 1151, 1100, - 375, 1219, 1771, 1783, 0, 1791, 0, 0, 1768, 1778, - 0, 0, 0, 1777, 494, 0, 254, 0, 2605, 2606, - 2604, 0, 1716, 1706, 1645, 1652, 2749, 1613, 1548, 1544, - 1517, 1544, 0, 0, 1525, 1544, 1521, 1523, 1578, 1219, - 1632, 1645, 0, 1648, 1223, 1222, 0, 2564, 2563, 2557, - 2556, 2558, 2537, 0, 0, 1869, 1648, 1865, 0, 0, - 0, 1620, 0, 373, 2619, 202, 652, 653, 651, 650, - 0, 2825, 0, 0, 0, 129, 0, 0, 482, 0, - 0, 0, 654, 655, 657, 658, 2022, 489, 826, 597, - 148, 410, 681, 928, 1144, 0, 0, 0, 881, 675, - 588, 927, 882, 588, 588, 0, 1004, 1030, 1031, 0, - 0, 605, 602, 0, 614, 987, 978, 988, 999, 1001, - 0, 604, 629, 0, 0, 617, 1746, 0, 1012, 0, - 0, 599, 0, 0, 648, 649, 647, 623, 630, 1032, - 1033, 600, 601, 0, 0, 1635, 1637, 1645, 607, 606, - 1695, 1694, 616, 0, 603, 0, 1018, 994, 0, 645, - 643, 640, 642, 641, 646, 644, 618, 609, 608, 611, - 610, 613, 612, 615, 631, 983, 0, 1034, 1034, 1003, - 0, 2103, 0, 1051, 1005, 0, 659, 677, 660, 0, - 0, 635, 634, 632, 633, 0, 0, 2721, 0, 0, - 0, 956, 0, 164, 162, 172, 1110, 1111, 0, 0, - 0, 0, 0, 0, 218, 0, 1178, 0, 0, 0, - 110, 112, 0, 114, 116, 0, 106, 108, 399, 464, - 417, 1826, 1819, 1663, 0, 1512, 0, 0, 0, 0, - 831, 0, 0, 786, 1498, 748, 783, 1307, 768, 1300, - 1302, 1298, 0, 749, 1301, 783, 0, 1304, 1306, 1297, - 0, 1455, 0, 0, 0, 1478, 0, 0, 0, 0, - 0, 0, 0, 1334, 0, 1435, 0, 0, 0, 0, - 0, 0, 1364, 1362, 1363, 838, 1421, 0, 851, 845, - 843, 850, 0, 1623, 1188, 2756, 930, 1254, 0, 1445, - 1956, 1977, 0, 2691, 2689, 2688, 0, 0, 2705, 2705, - 2705, 1796, 1795, 0, 1794, 321, 336, 339, 1798, 1172, - 1180, 2024, 2023, 0, 0, 512, 515, 0, 507, 0, - 531, 0, 498, 576, 0, 0, 0, 1792, 1780, 2743, - 1769, 1772, 2097, 1543, 1587, 2607, 816, 2025, 1643, 1549, - 1547, 1555, 0, 1513, 1544, 1544, 0, 1513, 0, 0, - 1545, 1575, 1557, 1633, 1634, 0, 1629, 1631, 1625, 1696, - 2091, 2519, 2521, 1871, 1079, 1081, 1803, 1639, 1805, 0, - 203, 205, 206, 0, 213, 391, 390, 0, 0, 0, - 0, 0, 0, 0, 479, 476, 679, 478, 578, 598, - 989, 0, 588, 877, 878, 927, 902, 2100, 927, 927, - 0, 0, 0, 977, 0, 1130, 0, 982, 822, 624, - 0, 973, 1013, 1046, 0, 625, 1049, 975, 0, 1638, - 493, 974, 996, 980, 1975, 1007, 1050, 859, 762, 713, - 704, 783, 707, 706, 783, 718, 768, 764, 0, 768, - 768, 741, 740, 758, 744, 726, 831, 831, 725, 761, - 831, 745, 743, 747, 0, 749, 768, 754, 742, 746, - 763, 739, 0, 760, 783, 783, 783, 722, 759, 831, - 0, 752, 783, 683, 768, 831, 836, 0, 0, 783, - 785, 2102, 2800, 0, 2802, 171, 160, 0, 0, 958, - 960, 0, 0, 961, 1116, 0, 226, 301, 822, 302, - 0, 229, 1174, 1585, 321, 102, 0, 103, 0, 101, - 0, 0, 1814, 1372, 781, 779, 782, 780, 829, 834, - 832, 830, 0, 836, 1486, 0, 0, 1309, 1303, 750, - 1308, 1299, 831, 1397, 1375, 1376, 1405, 0, 1476, 1467, - 1403, 0, 1352, 1436, 0, 0, 1413, 1382, 1385, 1383, - 1388, 1389, 0, 1420, 0, 1639, 1256, 0, 1954, 2708, - 2693, 0, 0, 2704, 2702, 0, 2703, 2701, 2669, 0, - 2614, 2615, 2613, 2597, 0, 321, 341, 0, 0, 335, - 1219, 520, 0, 537, 536, 533, 1199, 1782, 1784, 1790, - 1779, 0, 2033, 0, 1526, 0, 1530, 1535, 1531, 0, - 1522, 0, 1579, 0, 1199, 1645, 0, 1711, 1663, 2819, - 0, 0, 2817, 216, 214, 215, 0, 209, 211, 0, - 394, 392, 393, 0, 0, 0, 0, 0, 1645, 925, - 0, 483, 2743, 592, 656, 579, 0, 991, 0, 927, - 902, 2100, 0, 661, 0, 665, 667, 587, 1017, 0, - 1049, 979, 1000, 1019, 1011, 1010, 0, 1009, 1144, 1636, - 995, 997, 1092, 0, 0, 863, 712, 705, 723, 721, - 772, 765, 0, 772, 772, 732, 748, 727, 0, 831, - 738, 731, 750, 753, 755, 757, 772, 0, 831, 720, - 719, 729, 716, 772, 787, 766, 751, 831, 709, 837, - 836, 711, 831, 836, 772, 772, 0, 2799, 0, 2797, - 0, 158, 163, 173, 174, 948, 0, 1117, 1113, 1114, - 1109, 0, 806, 0, 224, 225, 237, 236, 228, 0, - 321, 111, 115, 107, 2421, 1664, 1820, 835, 828, 833, - 0, 1305, 1479, 1645, 0, 1438, 1440, 839, 0, 1648, - 0, 2675, 2674, 2673, 2670, 0, 0, 0, 0, 0, - 0, 0, 2706, 2710, 1793, 0, 0, 0, 528, 0, - 0, 562, 577, 0, 0, 0, 0, 2026, 2028, 0, + 1047, 1733, 1046, 79, 0, 0, 1963, 1964, 1957, 1976, + 1952, 0, 275, 284, 277, 281, 282, 278, 2705, 0, + 2704, 0, 0, 0, 0, 2623, 2682, 2685, 2110, 0, + 0, 0, 2598, 2605, 2601, 2606, 2599, 2600, 2604, 2607, + 2608, 2595, 2602, 1648, 321, 0, 2013, 1166, 1168, 1169, + 1167, 1175, 0, 0, 2583, 2584, 2582, 2581, 328, 369, + 321, 321, 0, 509, 0, 518, 0, 530, 0, 0, + 0, 2002, 2001, 0, 1150, 1153, 1154, 1099, 1097, 1096, + 1098, 1087, 1093, 1094, 0, 575, 1770, 0, 0, 0, + 1776, 1757, 1767, 0, 1674, 1675, 1671, 1672, 1670, 1673, + 1997, 1995, 1990, 0, 253, 2616, 0, 0, 0, 0, + 0, 0, 0, 2120, 1718, 1715, 0, 1705, 1707, 1708, + 1710, 2098, 1642, 1645, 0, 0, 0, 0, 1559, 1544, + 0, 0, 1536, 1561, 0, 1561, 1538, 1539, 1544, 1544, + 1541, 1556, 0, 0, 1623, 0, 1213, 1221, 1216, 0, + 2510, 0, 2540, 0, 825, 824, 823, 821, 2567, 0, + 0, 0, 2560, 2561, 0, 0, 2537, 2538, 2539, 0, + 2542, 2519, 2520, 2521, 0, 1921, 0, 1868, 1925, 1926, + 0, 1890, 1889, 1859, 0, 1882, 1840, 1922, 1858, 1620, + 1914, 1855, 1856, 1074, 0, 1057, 0, 321, 0, 0, + 2853, 2753, 136, 826, 0, 140, 0, 0, 178, 2830, + 2816, 0, 0, 0, 0, 0, 0, 0, 592, 0, + 0, 938, 183, 186, 184, 0, 185, 0, 0, 455, + 454, 0, 1912, 448, 0, 0, 0, 0, 0, 0, + 0, 0, 147, 0, 0, 1912, 428, 407, 408, 411, + 412, 413, 1034, 1787, 1034, 0, 1787, 1787, 1034, 1787, + 0, 0, 1787, 1787, 0, 0, 1787, 0, 0, 1034, + 0, 1787, 0, 1021, 0, 0, 1787, 1787, 1787, 1787, + 1787, 1034, 0, 0, 1787, 1787, 494, 1787, 0, 0, + 1052, 0, 0, 1787, 1787, 1787, 1787, 0, 0, 1787, + 1787, 0, 1787, 971, 1020, 594, 621, 622, 935, 970, + 972, 984, 490, 0, 1002, 1023, 1024, 1022, 0, 2802, + 0, 957, 959, 1104, 0, 0, 321, 0, 0, 1580, + 200, 321, 0, 350, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1141, 0, + 0, 0, 0, 1912, 437, 0, 1787, 397, 414, 415, + 418, 419, 420, 421, 422, 425, 423, 424, 1744, 1826, + 1544, 1620, 2111, 1620, 0, 1825, 0, 0, 1447, 1483, + 0, 1510, 0, 1337, 783, 783, 783, 1493, 768, 1497, + 1488, 783, 1489, 783, 1491, 0, 0, 0, 1296, 1312, + 0, 0, 0, 0, 0, 1454, 1451, 0, 0, 0, + 0, 0, 1477, 0, 0, 0, 1342, 0, 1437, 1459, + 1457, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1465, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 843, 849, 852, + 853, 855, 847, 0, 1419, 1330, 2758, 1200, 1620, 1219, + 2767, 2769, 0, 2749, 1552, 2761, 929, 1470, 0, 1257, + 1253, 0, 1251, 1626, 1272, 1271, 0, 0, 0, 1261, + 1220, 1433, 1219, 0, 1500, 2105, 1725, 2629, 469, 638, + 2687, 1723, 77, 0, 1955, 0, 1950, 1953, 0, 0, + 2702, 0, 2713, 0, 2692, 2693, 0, 0, 2689, 0, + 0, 0, 0, 0, 0, 2593, 321, 1797, 0, 1175, + 1179, 2017, 2586, 2587, 2585, 0, 361, 361, 361, 361, + 0, 510, 511, 513, 1220, 527, 505, 0, 497, 500, + 0, 509, 0, 0, 1089, 1095, 0, 1203, 0, 1789, + 1774, 1781, 1775, 0, 0, 0, 1773, 2095, 2094, 2101, + 2743, 0, 1586, 0, 0, 2614, 2691, 0, 0, 0, + 2746, 815, 1709, 0, 0, 1646, 1647, 1644, 1662, 1653, + 0, 1656, 1655, 0, 2749, 1554, 0, 1540, 1537, 1562, + 0, 1561, 1561, 1544, 0, 1520, 1519, 1613, 1546, 1203, + 1622, 0, 1624, 1639, 1212, 0, 1217, 1225, 1224, 2096, + 2103, 2508, 2548, 0, 0, 0, 0, 2565, 2559, 2556, + 2557, 0, 2518, 2524, 2523, 2526, 2528, 1684, 1685, 1683, + 1681, 1682, 1923, 1648, 1878, 1877, 1851, 1870, 1872, 1924, + 1073, 0, 1080, 1078, 1801, 1804, 0, 0, 2843, 2855, + 0, 0, 2824, 0, 0, 0, 156, 0, 920, 922, + 921, 906, 905, 0, 131, 133, 0, 679, 128, 481, + 490, 593, 596, 637, 636, 188, 187, 192, 193, 1688, + 1689, 1686, 1687, 461, 474, 1690, 475, 449, 151, 150, + 152, 153, 155, 154, 149, 954, 0, 462, 463, 429, + 0, 409, 1035, 927, 588, 1006, 0, 680, 588, 881, + 881, 586, 0, 0, 1144, 0, 0, 1746, 0, 0, + 1144, 0, 0, 0, 1787, 0, 1014, 966, 0, 1748, + 0, 1746, 1746, 1015, 0, 0, 967, 1787, 0, 0, + 0, 0, 0, 1746, 1144, 0, 0, 0, 492, 0, + 1144, 986, 1055, 1053, 1054, 0, 1144, 1144, 0, 0, + 0, 0, 627, 628, 626, 0, 0, 0, 619, 595, + 826, 968, 491, 969, 679, 0, 1049, 676, 682, 2106, + 0, 2804, 2726, 0, 0, 161, 1108, 0, 1107, 232, + 231, 0, 223, 300, 370, 0, 222, 0, 1583, 0, + 1584, 1581, 1582, 321, 354, 109, 113, 105, 90, 86, + 117, 118, 88, 89, 93, 92, 94, 95, 98, 99, + 96, 91, 97, 87, 121, 123, 122, 100, 119, 120, + 85, 468, 467, 466, 465, 438, 0, 0, 1912, 416, + 0, 1620, 1639, 2114, 1817, 0, 1371, 1511, 0, 0, + 784, 1484, 1485, 1495, 0, 1496, 770, 769, 785, 1487, + 1490, 1494, 1492, 1336, 1344, 1393, 0, 1310, 1394, 0, + 1424, 1339, 1338, 0, 0, 0, 1377, 1404, 0, 1378, + 0, 1475, 0, 0, 1351, 0, 1353, 0, 0, 1439, + 1408, 1430, 1380, 1412, 0, 1356, 1331, 0, 1381, 0, + 1386, 1384, 0, 1360, 0, 0, 1367, 0, 1365, 0, + 1366, 0, 1368, 1416, 1418, 0, 0, 854, 840, 841, + 842, 0, 844, 846, 848, 0, 0, 1628, 1553, 2768, + 1189, 2759, 1199, 0, 0, 1472, 1249, 0, 1258, 1255, + 0, 1252, 1221, 1444, 1434, 1979, 0, 0, 292, 287, + 295, 289, 291, 290, 296, 297, 298, 299, 293, 288, + 294, 286, 285, 2703, 0, 2622, 0, 2696, 2698, 2627, + 2684, 2683, 2706, 2706, 2706, 0, 340, 0, 1754, 1170, + 1175, 1179, 0, 1171, 2028, 329, 334, 364, 362, 376, + 379, 383, 381, 514, 0, 0, 0, 534, 0, 532, + 508, 0, 1151, 1100, 375, 1219, 1771, 1783, 0, 1791, + 0, 0, 1768, 1778, 0, 0, 0, 1777, 494, 0, + 254, 0, 2611, 2612, 2610, 0, 1716, 1706, 1645, 1652, + 2755, 1613, 1548, 1544, 1517, 1544, 0, 0, 1525, 1544, + 1521, 1523, 1578, 1219, 1632, 1645, 0, 1648, 1223, 1222, + 0, 2570, 2569, 2563, 2562, 2564, 2543, 0, 0, 1869, + 1648, 1865, 0, 0, 0, 1620, 0, 373, 2625, 202, + 652, 653, 651, 650, 0, 2831, 0, 0, 0, 129, + 0, 0, 482, 0, 0, 0, 654, 655, 657, 658, + 2028, 489, 826, 597, 148, 410, 681, 928, 1144, 0, + 0, 0, 881, 675, 588, 927, 882, 588, 588, 0, + 1004, 1030, 1031, 0, 0, 605, 602, 0, 614, 987, + 978, 988, 999, 1001, 0, 604, 629, 0, 0, 617, + 1746, 0, 1012, 0, 0, 599, 0, 0, 648, 649, + 647, 623, 630, 1032, 1033, 600, 601, 0, 0, 1635, + 1637, 1645, 607, 606, 1695, 1694, 616, 0, 603, 0, + 1018, 994, 0, 645, 643, 640, 642, 641, 646, 644, + 618, 609, 608, 611, 610, 613, 612, 615, 631, 983, + 0, 1034, 1034, 1003, 0, 2109, 0, 1051, 1005, 0, + 659, 677, 660, 0, 0, 635, 634, 632, 633, 0, + 0, 2727, 0, 0, 0, 956, 0, 164, 162, 172, + 1110, 1111, 0, 0, 0, 0, 0, 0, 218, 0, + 1178, 0, 0, 0, 110, 112, 0, 114, 116, 0, + 106, 108, 399, 464, 417, 1826, 1819, 1663, 0, 1512, + 0, 0, 0, 0, 831, 0, 0, 786, 1498, 748, + 783, 1307, 768, 1300, 1302, 1298, 0, 749, 1301, 783, + 0, 1304, 1306, 1297, 0, 1455, 0, 0, 0, 1478, + 0, 0, 0, 0, 0, 0, 0, 1334, 0, 1435, + 0, 0, 0, 0, 0, 0, 1364, 1362, 1363, 838, + 1421, 0, 851, 845, 843, 850, 0, 1623, 1188, 2762, + 930, 1254, 0, 1445, 1982, 0, 1980, 1956, 1983, 0, + 2697, 2695, 2694, 0, 0, 2711, 2711, 2711, 1796, 1795, + 0, 1794, 321, 336, 339, 1798, 1172, 1180, 2030, 2029, + 0, 0, 512, 515, 0, 507, 0, 531, 0, 498, + 576, 0, 0, 0, 1792, 1780, 2749, 1769, 1772, 2103, + 1543, 1587, 2613, 816, 2031, 1643, 1549, 1547, 1555, 0, + 1513, 1544, 1544, 0, 1513, 0, 0, 1545, 1575, 1557, + 1633, 1634, 0, 1629, 1631, 1625, 1696, 2097, 2525, 2527, + 1871, 1079, 1081, 1803, 1639, 1805, 0, 203, 205, 206, + 0, 213, 391, 390, 0, 0, 0, 0, 0, 0, + 0, 479, 476, 679, 478, 578, 598, 989, 0, 588, + 877, 878, 927, 902, 2106, 927, 927, 0, 0, 0, + 977, 0, 1130, 0, 982, 822, 624, 0, 973, 1013, + 1046, 0, 625, 1049, 975, 0, 1638, 493, 974, 996, + 980, 1975, 1007, 1050, 859, 762, 713, 704, 783, 707, + 706, 783, 718, 768, 764, 0, 768, 768, 741, 740, + 758, 744, 726, 831, 831, 725, 761, 831, 745, 743, + 747, 0, 749, 768, 754, 742, 746, 763, 739, 0, + 760, 783, 783, 783, 722, 759, 831, 0, 752, 783, + 683, 768, 831, 836, 0, 0, 783, 785, 2108, 2806, + 0, 2808, 171, 160, 0, 0, 958, 960, 0, 0, + 961, 1116, 0, 226, 301, 822, 302, 0, 229, 1174, + 1585, 321, 102, 0, 103, 0, 101, 0, 0, 1814, + 1372, 781, 779, 782, 780, 829, 834, 832, 830, 0, + 836, 1486, 0, 0, 1309, 1303, 750, 1308, 1299, 831, + 1397, 1375, 1376, 1405, 0, 1476, 1467, 1403, 0, 1352, + 1436, 0, 0, 1413, 1382, 1385, 1383, 1388, 1389, 0, + 1420, 0, 1639, 1256, 1978, 0, 0, 1954, 2714, 2699, + 0, 0, 2710, 2708, 0, 2709, 2707, 2675, 0, 2620, + 2621, 2619, 2603, 0, 321, 341, 0, 0, 335, 1219, + 520, 0, 537, 536, 533, 1199, 1782, 1784, 1790, 1779, + 0, 2039, 0, 1526, 0, 1530, 1535, 1531, 0, 1522, + 0, 1579, 0, 1199, 1645, 0, 1711, 1663, 2825, 0, + 0, 2823, 216, 214, 215, 0, 209, 211, 0, 394, + 392, 393, 0, 0, 0, 0, 0, 1645, 925, 0, + 483, 2749, 592, 656, 579, 0, 991, 0, 927, 902, + 2106, 0, 661, 0, 665, 667, 587, 1017, 0, 1049, + 979, 1000, 1019, 1011, 1010, 0, 1009, 1144, 1636, 995, + 997, 1092, 0, 0, 863, 712, 705, 723, 721, 772, + 765, 0, 772, 772, 732, 748, 727, 0, 831, 738, + 731, 750, 753, 755, 757, 772, 0, 831, 720, 719, + 729, 716, 772, 787, 766, 751, 831, 709, 837, 836, + 711, 831, 836, 772, 772, 0, 2805, 0, 2803, 0, + 158, 163, 173, 174, 948, 0, 1117, 1113, 1114, 1109, + 0, 806, 0, 224, 225, 237, 236, 228, 0, 321, + 111, 115, 107, 2427, 1664, 1820, 835, 828, 833, 0, + 1305, 1479, 1645, 0, 1438, 1440, 839, 0, 1648, 1981, + 0, 2681, 2680, 2679, 2676, 0, 0, 0, 0, 0, + 0, 0, 2712, 2716, 1793, 0, 0, 0, 528, 0, + 0, 562, 577, 0, 0, 0, 0, 2032, 2034, 0, 1717, 1550, 0, 0, 0, 0, 0, 1567, 1568, 0, 0, 1573, 1577, 1558, 1630, 1697, 1210, 1712, 1802, 0, - 204, 207, 2826, 213, 212, 1219, 169, 0, 0, 892, + 204, 207, 2832, 213, 212, 1219, 169, 0, 0, 892, 0, 924, 0, 894, 480, 490, 0, 485, 0, 0, 990, 678, 673, 669, 0, 903, 0, 663, 0, 0, - 0, 0, 0, 0, 0, 1016, 2067, 1008, 494, 976, + 0, 0, 0, 0, 0, 1016, 2073, 1008, 494, 976, 0, 981, 620, 0, 862, 0, 867, 776, 777, 778, 733, 773, 775, 0, 931, 735, 703, 728, 756, 734, 0, 730, 717, 795, 0, 0, 0, 0, 791, 0, 857, 0, 798, 684, 0, 685, 788, 790, 0, 0, - 0, 0, 724, 708, 710, 714, 715, 701, 702, 2101, - 2801, 1195, 1184, 2806, 165, 962, 321, 1112, 0, 1119, + 0, 0, 724, 708, 710, 714, 715, 701, 702, 2107, + 2807, 1195, 1184, 2812, 165, 962, 321, 1112, 0, 1119, 245, 243, 321, 233, 241, 235, 0, 242, 303, 230, 1665, 0, 1219, 1815, 771, 0, 1481, 1350, 1422, 1696, - 1978, 2671, 2711, 2714, 2712, 2713, 2716, 1667, 0, 2715, - 2709, 0, 1541, 1220, 0, 521, 0, 524, 526, 540, + 1984, 2677, 2717, 2720, 2718, 2719, 2722, 1667, 0, 2721, + 2715, 0, 1541, 1220, 0, 521, 0, 524, 526, 540, 0, 1787, 1787, 0, 0, 1787, 1787, 1787, 1787, 555, - 563, 565, 0, 0, 0, 0, 0, 2027, 0, 0, - 2034, 2036, 1527, 0, 1532, 0, 1524, 1563, 1563, 1574, - 0, 1194, 2820, 181, 210, 2811, 161, 170, 0, 890, + 563, 565, 0, 0, 0, 0, 0, 2033, 0, 0, + 2040, 2042, 1527, 0, 1532, 0, 1524, 1563, 1563, 1574, + 0, 1194, 2826, 181, 210, 2817, 161, 170, 0, 890, 0, 1787, 0, 1025, 893, 918, 900, 0, 1645, 0, - 1025, 895, 917, 898, 2022, 0, 2737, 993, 0, 0, - 0, 671, 0, 0, 0, 0, 2069, 2068, 985, 0, + 1025, 895, 917, 898, 2028, 0, 2743, 993, 0, 0, + 0, 671, 0, 0, 0, 0, 2075, 2074, 985, 0, 860, 0, 864, 865, 866, 0, 858, 774, 831, 0, 831, 801, 800, 1226, 793, 808, 688, 0, 0, 799, - 0, 789, 797, 792, 0, 0, 2804, 0, 0, 2803, + 0, 789, 797, 792, 0, 0, 2810, 0, 0, 2809, 0, 167, 175, 1118, 1123, 0, 1120, 1122, 0, 227, 244, 1666, 1821, 1645, 1210, 1669, 1668, 1799, 1807, 0, - 2012, 0, 529, 522, 0, 0, 538, 0, 0, 1787, - 1787, 0, 0, 0, 0, 0, 535, 564, 1787, 2031, - 2032, 0, 2029, 0, 0, 2035, 0, 0, 0, 1571, - 1569, 1219, 0, 2827, 0, 172, 0, 0, 0, 1025, + 2018, 0, 529, 522, 0, 0, 538, 0, 0, 1787, + 1787, 0, 0, 0, 0, 0, 535, 564, 1787, 2037, + 2038, 0, 2035, 0, 0, 2041, 0, 0, 0, 1571, + 1569, 1219, 0, 2833, 0, 172, 0, 0, 0, 1025, 891, 916, 915, 896, 910, 0, 0, 132, 1027, 1026, 901, 0, 923, 926, 134, 899, 477, 487, 486, 992, 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 0, 736, 932, 737, 0, 807, 1226, 796, 1219, 805, - 804, 802, 803, 767, 2743, 0, 0, 0, 166, 0, + 804, 802, 803, 767, 2749, 0, 0, 0, 166, 0, 159, 1115, 0, 234, 1480, 1197, 0, 0, 815, 516, 528, 525, 548, 541, 544, 0, 574, 568, 0, 0, - 570, 571, 569, 566, 559, 0, 557, 0, 2030, 2038, - 2037, 1529, 1534, 0, 1564, 0, 0, 0, 0, 0, - 1700, 1702, 2821, 190, 182, 0, 321, 0, 0, 146, + 570, 571, 569, 566, 559, 0, 557, 0, 2036, 2044, + 2043, 1529, 1534, 0, 1564, 0, 0, 0, 0, 0, + 1700, 1702, 2827, 190, 182, 0, 321, 0, 0, 146, 908, 907, 130, 897, 909, 919, 1029, 1028, 914, 913, - 911, 912, 2743, 0, 0, 0, 890, 0, 892, 894, + 911, 912, 2749, 0, 0, 0, 890, 0, 892, 894, 0, 873, 0, 872, 0, 869, 868, 1227, 0, 794, - 0, 2805, 0, 2807, 0, 168, 1121, 1806, 1808, 2013, + 0, 2811, 0, 2813, 0, 168, 1121, 1806, 1808, 2019, 523, 548, 0, 546, 0, 542, 539, 543, 572, 573, 0, 556, 0, 567, 1566, 1565, 1580, 0, 1220, 1698, - 1219, 181, 191, 2828, 1219, 174, 488, 0, 890, 0, + 1219, 181, 191, 2834, 1219, 174, 488, 0, 890, 0, 662, 890, 666, 668, 998, 875, 876, 874, 0, 0, - 1228, 689, 2808, 2809, 2039, 545, 0, 553, 549, 551, - 554, 562, 561, 558, 0, 0, 1703, 1701, 2822, 2812, + 1228, 689, 2814, 2815, 2045, 545, 0, 553, 549, 551, + 554, 562, 561, 558, 0, 0, 1703, 1701, 2828, 2818, 157, 674, 670, 890, 664, 0, 0, 691, 690, 692, - 0, 2025, 547, 0, 0, 560, 1572, 1570, 321, 0, - 672, 871, 870, 0, 696, 686, 693, 695, 0, 2033, - 552, 550, 2823, 0, 698, 697, 694, 0, 2041, 2813, - 2040, 0, 2045, 321, 0, 0, 2052, 2814, 2043, 2044, - 2042, 2047, 0, 0, 2049, 2050, 0, 2014, 2051, 2046, - 0, 2053, 2055, 0, 2048, 0, 1219, 2054, 0, 1220, - 2056 + 0, 2031, 547, 0, 0, 560, 1572, 1570, 321, 0, + 672, 871, 870, 0, 696, 686, 693, 695, 0, 2039, + 552, 550, 2829, 0, 698, 697, 694, 0, 2047, 2819, + 2046, 0, 2051, 321, 0, 0, 2058, 2820, 2049, 2050, + 2048, 2053, 0, 0, 2055, 2056, 0, 2020, 2057, 2052, + 0, 2059, 2061, 0, 2054, 0, 1219, 2060, 0, 1220, + 2062 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -4291, -4291, -4291, -4291, 1706, 3429, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 1863, -4291, -4291, -4291, -4291, -4291, + 1512, -4291, 329, -4291, 337, -4291, 342, -2530, -475, 3318, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -132, 1173, 3274, -4291, 227, -4291, -122, -4291, -4291, -4291, + -3527, -243, -410, -4291, 24, 20, 3258, -405, -3576, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -3697, -4291, + -4291, -4291, 54, -4291, -4291, -567, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -188, 365, 1953, -4291, -4291, -4291, + 4341, -4291, 3784, -4291, -1915, 2336, -4291, -4291, -4291, -4291, + -4291, 2423, -1854, -4291, -4291, -4291, 1388, -4291, -4291, -4291, + -920, 36, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 565, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 2111, -4291, + -4291, 3704, -4291, -4291, -4291, 1369, -4291, -4291, -4291, -4291, + -4291, -4291, -1328, -4291, 1846, 1848, -4291, 1850, -4291, -306, + 245, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 3224, -4291, + -4291, -4291, -2297, -4291, -4291, -2632, 2716, -4291, -1954, -4291, + -4291, -2109, -4291, -4291, -1869, 344, -4291, -4291, 975, -336, + -4291, -1593, -2123, -2112, -4291, -4291, -4291, -2170, -2169, -804, + 2471, -1247, -2550, -4291, -4291, -4291, -4291, -115, -4291, -4291, + 67, 1601, 2151, -4291, -2702, -4291, -4291, 747, -4291, -4291, + 1370, 572, 1368, -4291, 916, 2971, -1367, -4291, -4291, -4291, + -4291, -4291, -4291, -170, 129, -263, -4291, -4058, 580, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4290, -4291, -4291, + -4291, -414, -4291, -4291, -352, -4291, -4291, -390, -4291, -43, + -2510, -4291, -4291, -4291, -4291, 2226, -1547, -4291, -628, -4291, + 276, 1634, -2934, -2128, -4291, -1038, -1032, -3158, -4291, -4291, + -4291, -4291, 1157, -4291, 529, 1635, -2603, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, 1158, -4291, -4291, -3378, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -409, -4291, -222, 748, + -4291, -3187, 1074, 479, -4291, -4291, -4291, -4291, -909, -3189, + -753, -4291, 75, -2641, -2705, 450, -4291, -4291, 52, -3896, + -4291, -601, -2293, -2565, -227, -4291, -4291, 69, -3510, 1746, + -4291, 418, -908, -2742, 1511, -4291, -4291, 1037, -4291, -1940, + 1036, -4291, -4291, -4291, 1045, -4291, -323, -4291, -4291, -4291, + -4291, -3262, -4291, -1624, -2673, -4291, -4291, 4391, 4392, -2582, + -269, -268, -4291, -4291, -4291, 313, -4291, -4291, -1836, -145, + -38, -28, -2614, -3731, 148, -2945, -4291, 274, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 1682, -1295, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -2686, -3082, -4291, -4291, 1215, + -2959, -2217, -2206, -2600, 3419, -4291, -4291, -4291, -4291, 3357, + -2430, -3610, -4291, -4291, -4291, -4291, -4291, -4291, -4291, 2886, + 1169, -4291, -4291, 1811, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, 312, 1922, -4291, -4291, -4291, -4291, -4291, + 2237, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -175, + -4291, -4291, -4291, -4291, -4291, 577, 2777, -4291, -4291, -4291, + -4291, -9, -4291, -4291, -4291, -4291, 2465, -4291, -4291, -4291, + -4291, 2807, -4291, -4291, -4291, -4291, -4291, -4291, 1482, -4291, + 1964, -4291, -1620, -4291, -4291, 1027, -147, 1907, -627, -4291, + 2064, -4291, 104, -4291, 3422, -4291, -4291, -3272, 3532, -4291, + -4291, -2640, -4291, 3533, -1487, -2871, 2424, 116, -141, -2058, + 1079, -127, 1442, 995, 4587, -4291, -1234, -1211, -4291, -4291, + -2, -4291, -4291, -4291, -4291, -4291, -4291, 2169, 2178, -647, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, 1550, -4291, -4291, -4291, -4291, -1314, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -924, -4291, -2231, -4291, -4291, -4291, + -512, -4291, 3308, -4291, -4291, -4291, -2476, -1497, 1908, 1003, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, 1911, -4291, -1706, + -4291, -2929, -4291, -4291, -4291, -4291, 1576, -4291, -4291, -4291, + -4291, -4291, -4291, -1845, -4291, -2139, 53, -4291, 230, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -237, 822, -232, -3039, + -1212, 1632, -4291, -4291, -1357, 3351, -1908, -4291, 750, -4291, + 2076, 1125, -4291, -4291, -4291, -4291, 616, -2969, 2928, -4291, + -4291, -3346, -1014, -4291, 2931, -4291, -1453, 1475, 429, -4291, + -292, -1196, -1578, -3183, -2558, -4291, 1292, 120, -4291, -4291, + -4291, -220, -4291, -4291, -4291, 1488, -4291, 437, 438, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -578, + -980, -4291, -4291, 2243, -2668, -498, 4498, -13, -4291, -4291, + -4, -4291, -4291, -4291, -4291, 3166, 3115, 2040, -4291, -4291, + -2587, -4291, -4291, 2003, -4291, 735, -985, -928, 1070, -4291, + -4291, 1073, -3475, -4291, -4291, -3, -4291, -4291, -4291, 1019, + -4291, -91, 3975, 0, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 2856, -1141, 3885, -4291, -4291, -4291, -4291, -4291, + -4291, 2426, -4291, -4291, -4291, -4291, -4291, -4291, 3045, 3992, + -606, -1444, -4291, -812, 2427, 1915, -969, -4291, -4291, -4291, + 3489, 3997, -4291, -4291, 4494, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 2648, 660, -4291, -4291, 527, -4291, + -4291, -4291, -4291, 3137, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, 1120, -226, -4291, + 310, -240, -4291, 133, -4291, -4291, -4291, -4291, -4291, -265, + -4291, -4291, -274, -4291, -1110, 3811, -1467, 233, -1352, -2763, + -4291, 1106, 3109, -2985, -703, -1262, -1270, -2886, -15, -4291, + -4291, 3755, 30, -471, -1844, -6, -851, -107, -624, -613, + -863, -4291, -515, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, 1961, -4291, -4291, -4291, 1071, -4291, + 4026, -4291, 2746, -1481, 4029, -586, 2507, 1976, 1982, -4291, + -4291, -4291, -4291, -1970, -4291, -4291, 188, -4291, 2630, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, -4291, -4291, -4291, -4291, 3014, -492, -476, 3154, + 4051, 3676, -4291, 3252, -4291, -4291, -4291, -4291, -4291, 370, + -4291, 1159, 2050, -1550, -2515, -4291, -4291, 2134, 928, -4291, + 1650, -328, -572, -4291, -4291, 367, -4291, -4291, -4291, 1371, + 1574, 4061, 3681, -4291, -4291, -4291, -4291, -4291, -2992, -975, + -4291, -3700, -1562, -4291, -4291, -4291, -2333, -3278, -4291, -4291, + -1095, -4291, -4291, -4291, -4291, -2224, -4291, -4291, -4291, -1, + 4023, 4024, 4025, -4291, -885, -4291, -4291, -4291, -4291, -4291, + -4291, -4291, 3557, -4291, -4291, -4291, -4291, -4291, 3023, 3565, + -4291, -4291, -4291, -4291, -4291, 3571, -4291, -4291, -4291, -4291, + -4291, 1717, -4291, -4291, -4291, -4291, -4291, -4291, -4291, -4291, + -4291 }; -/* YYDEFGOTO[NTERM-NUM]. */ + /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 64, 637, 1639, 65, 66, 67, 68, 69, 1454, 70, 868, 1358, 1950, 1951, 71, 571, 72, 1717, 2314, - 2315, 3735, 3736, 3729, 3730, 3732, 3733, 2316, 697, 698, - 73, 2716, 3900, 3586, 3587, 2208, 645, 646, 1110, 2710, - 2739, 2740, 1648, 3583, 3711, 4414, 3715, 4561, 4670, 4496, - 2819, 4013, 4415, 4416, 566, 2705, 1683, 4613, 2236, 4714, - 2237, 74, 690, 1160, 1710, 1711, 3889, 3890, 3891, 4131, - 4136, 4137, 4138, 4139, 2824, 930, 2272, 2825, 3721, 4241, - 4248, 4249, 3298, 4422, 4423, 4424, 4246, 974, 4425, 75, + 2315, 3739, 3740, 3733, 3734, 3736, 3737, 2316, 697, 698, + 73, 2718, 3907, 3590, 3591, 2208, 645, 646, 1110, 2712, + 2741, 2742, 1648, 3587, 3715, 4424, 3719, 4571, 4680, 4506, + 2821, 4020, 4425, 4426, 566, 2707, 1683, 4623, 2236, 4724, + 2237, 74, 690, 1160, 1710, 1711, 3896, 3897, 3898, 4140, + 4145, 4146, 4147, 4148, 2826, 930, 2272, 2827, 3725, 4250, + 4257, 4258, 3301, 4432, 4433, 4434, 4255, 974, 4435, 75, 597, 598, 976, 1490, 1966, 1491, 76, 77, 565, 1381, - 1382, 1383, 1384, 2515, 1967, 2510, 2511, 3467, 3299, 4244, + 1382, 1383, 1384, 2517, 1967, 2512, 2513, 3471, 3302, 4253, 931, 932, 79, 572, 933, 934, 935, 1438, 936, 937, - 938, 939, 3032, 940, 1434, 3491, 909, 910, 2542, 3482, - 3827, 80, 535, 693, 694, 1716, 2289, 695, 2290, 2830, - 3728, 696, 1162, 2286, 1164, 3495, 941, 2557, 942, 1430, - 81, 1153, 1702, 1703, 943, 1082, 2200, 963, 2050, 3496, - 1443, 944, 2558, 2560, 2559, 82, 582, 623, 592, 3897, - 4143, 669, 670, 708, 2337, 671, 1178, 1128, 1685, 2261, - 2262, 2745, 2746, 2865, 2866, 2867, 2253, 2254, 2255, 2326, + 938, 939, 3035, 940, 1434, 3495, 909, 910, 2544, 3486, + 3834, 80, 535, 693, 694, 1716, 2289, 695, 2290, 2832, + 3732, 696, 1162, 2286, 1164, 3499, 941, 2559, 942, 1430, + 81, 1153, 1702, 1703, 943, 1082, 2200, 963, 2050, 3500, + 1443, 944, 2560, 2562, 2561, 82, 582, 623, 592, 3904, + 4152, 669, 670, 708, 2337, 671, 1178, 1128, 1685, 2261, + 2262, 2747, 2748, 2867, 2868, 2869, 2253, 2254, 2255, 2326, 2327, 2328, 2243, 2244, 2245, 1689, 2240, 2241, 672, 1129, - 1139, 2256, 2257, 2258, 2871, 2330, 2331, 2332, 2333, 2259, - 1942, 2260, 3190, 3175, 4153, 4152, 3176, 3907, 4516, 4732, - 3596, 3597, 3279, 3663, 2278, 83, 585, 952, 1451, 2566, - 1452, 2568, 3037, 3038, 3039, 2032, 2033, 4101, 2037, 2565, - 4288, 4680, 4456, 4457, 3041, 4455, 3045, 3504, 3505, 3839, - 4103, 4291, 4685, 4585, 4766, 4683, 4762, 4684, 4764, 4834, - 4808, 4809, 4596, 4695, 4696, 4770, 4811, 4469, 4470, 4471, - 2588, 3054, 4106, 4156, 2700, 1675, 1676, 3616, 1102, 84, - 3177, 2802, 3178, 3179, 3686, 2804, 2805, 2996, 1565, 3676, - 3647, 3580, 3591, 3592, 3593, 3594, 3595, 4346, 4523, 4348, - 4349, 4520, 4642, 4519, 3696, 3609, 3213, 3214, 3284, 3699, - 4214, 4393, 4394, 4829, 4845, 4846, 4847, 85, 949, 4018, - 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4402, 3362, 3363, - 4370, 4371, 4372, 3357, 3358, 3754, 4395, 4396, 4397, 4019, - 4544, 4042, 1530, 1531, 3532, 1543, 1544, 2653, 2116, 2654, - 1679, 4043, 4044, 4221, 3423, 4072, 3429, 3430, 3431, 2955, - 2956, 2957, 2958, 2959, 2454, 4398, 3698, 4185, 4363, 4366, - 4536, 4745, 3610, 3215, 3613, 1059, 647, 3216, 3217, 4619, - 4503, 4510, 4620, 4511, 4504, 4163, 2713, 4621, 4622, 4623, - 4513, 4506, 3168, 4147, 4148, 3602, 3442, 4373, 86, 142, - 2264, 1120, 1131, 1127, 1150, 676, 2268, 1132, 2820, 3292, - 4235, 659, 2806, 4178, 3925, 4182, 2807, 3626, 2808, 4157, - 4340, 2809, 3942, 4180, 4360, 3627, 3628, 2810, 2811, 2812, - 4627, 4628, 4629, 3218, 1418, 674, 675, 1143, 1144, 1145, - 2501, 3694, 3262, 87, 2196, 2191, 88, 1072, 1073, 1074, - 1610, 1611, 2194, 2195, 2693, 3150, 89, 700, 1721, 1464, - 2048, 90, 961, 2579, 2580, 2581, 3051, 91, 1152, 1699, - 1700, 2271, 3295, 3718, 4014, 4240, 4419, 4236, 4565, 4566, + 1139, 2256, 2257, 2258, 2873, 2330, 2331, 2332, 2333, 2259, + 1942, 2260, 3193, 3178, 4162, 4161, 3179, 3914, 4526, 4742, + 3600, 3601, 3282, 3667, 2278, 83, 585, 952, 1451, 2568, + 1452, 2570, 3040, 3041, 3042, 2032, 2033, 4110, 2037, 2567, + 4298, 4690, 4466, 4467, 3044, 4465, 3048, 3508, 3509, 3846, + 4112, 4301, 4695, 4595, 4776, 4693, 4772, 4694, 4774, 4844, + 4818, 4819, 4606, 4705, 4706, 4780, 4821, 4479, 4480, 4481, + 2590, 3057, 4115, 4165, 2702, 1675, 1676, 3620, 1102, 84, + 3180, 2804, 3181, 3182, 3690, 2806, 2807, 2998, 1565, 3680, + 3651, 3584, 3595, 3596, 3597, 3598, 3599, 4356, 4533, 4358, + 4359, 4530, 4652, 4529, 3700, 3613, 3216, 3217, 3287, 3703, + 4223, 4403, 4404, 4839, 4855, 4856, 4857, 85, 949, 4025, + 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4412, 3365, 3366, + 4380, 4381, 4382, 3360, 3361, 3758, 4405, 4406, 4407, 4026, + 4554, 4049, 1530, 1531, 3536, 1543, 1544, 2655, 2116, 2656, + 1679, 4050, 4051, 4230, 3426, 4079, 3432, 3433, 3434, 2957, + 2958, 2959, 2960, 2961, 2454, 4408, 3702, 4194, 4373, 4376, + 4546, 4755, 3614, 3218, 3617, 1059, 647, 3219, 3220, 4629, + 4513, 4520, 4630, 4521, 4514, 4172, 2715, 4631, 4632, 4633, + 4523, 4516, 3171, 4156, 4157, 3606, 3445, 4383, 86, 142, + 2264, 1120, 1131, 1127, 1150, 676, 2268, 1132, 2822, 3295, + 4244, 659, 2808, 4187, 3932, 4191, 2809, 3630, 2810, 4166, + 4350, 2811, 3949, 4189, 4370, 3631, 3632, 2812, 2813, 2814, + 4637, 4638, 4639, 3221, 1418, 674, 675, 1143, 1144, 1145, + 2501, 3698, 3265, 87, 2196, 2191, 88, 1072, 1073, 1074, + 1610, 1611, 2194, 2195, 2695, 3153, 89, 700, 1721, 1464, + 2048, 90, 961, 2581, 2582, 2583, 3054, 91, 1152, 1699, + 1700, 2271, 3298, 3722, 4021, 4249, 4429, 4245, 4575, 4576, 92, 702, 1171, 93, 540, 1729, 1730, 1731, 2319, 94, 1445, 150, 95, 960, 1457, 1460, 1461, 96, 689, 1154, - 1155, 1156, 1157, 2274, 97, 2013, 2545, 2546, 2547, 2548, - 1707, 2826, 1708, 1709, 2283, 3489, 98, 99, 633, 634, - 2461, 2462, 603, 986, 604, 605, 606, 2964, 2965, 2966, + 1155, 1156, 1157, 2274, 97, 2013, 2547, 2548, 2549, 2550, + 1707, 2828, 1708, 1709, 2283, 3493, 98, 99, 633, 634, + 2461, 2462, 603, 986, 604, 605, 606, 2966, 2967, 2968, 2093, 1003, 1004, 1005, 1513, 1515, 1516, 1607, 1517, 2029, - 3113, 4655, 1214, 1210, 830, 831, 832, 833, 1305, 1306, - 3707, 834, 1315, 1906, 3374, 3769, 4052, 1764, 1765, 835, - 836, 837, 838, 839, 840, 1933, 3395, 3396, 3785, 2487, - 2488, 2489, 841, 2375, 3380, 2389, 842, 1298, 1891, 1821, - 3777, 3388, 4057, 4262, 1749, 2351, 2903, 3750, 3365, 2991, + 3116, 4665, 1214, 1210, 830, 831, 832, 833, 1305, 1306, + 3711, 834, 1315, 1906, 3377, 3773, 4059, 1764, 1765, 835, + 836, 837, 838, 839, 840, 1933, 3398, 3399, 3789, 2487, + 2488, 2489, 841, 2375, 3383, 2389, 842, 1298, 1891, 1821, + 3781, 3391, 4064, 4271, 1749, 2351, 2905, 3754, 3368, 2993, 2456, 1237, 1238, 1195, 2358, 1755, 2094, 2095, 2096, 2097, - 2098, 3868, 3869, 4302, 4115, 4304, 4119, 2635, 2636, 2054, - 2055, 2099, 2100, 3090, 4113, 2457, 2458, 2459, 3091, 3539, - 3105, 3106, 4124, 2626, 2101, 3097, 4609, 4310, 4311, 4707, - 4706, 4312, 4122, 4123, 3870, 3871, 3306, 3307, 3308, 3068, - 1811, 1812, 1819, 1411, 1412, 1750, 2103, 2640, 3110, 3552, - 2478, 2642, 3550, 3876, 2815, 3655, 3656, 989, 990, 2079, - 2620, 3084, 1506, 1507, 1508, 2085, 3085, 3086, 4032, 4449, - 4247, 2960, 3139, 3191, 1782, 1783, 3662, 4127, 4490, 4709, - 4710, 4711, 2076, 2077, 2615, 2616, 2617, 991, 992, 1503, - 2078, 3078, 3857, 100, 547, 101, 1948, 2994, 1355, 2507, - 1169, 1469, 1736, 1737, 858, 854, 561, 102, 573, 2543, - 103, 593, 2052, 914, 966, 1470, 1471, 2589, 3055, 3062, - 2590, 3067, 3849, 3057, 3512, 3513, 2496, 2497, 3058, 3515, - 3846, 3823, 3824, 3484, 4097, 104, 621, 3571, 3151, 3152, - 4577, 4578, 967, 105, 546, 1182, 2879, 4256, 1742, 2339, - 4433, 1183, 1184, 2342, 713, 714, 106, 1077, 617, 1589, - 1590, 1591, 2178, 107, 609, 1060, 3140, 3566, 2162, 956, - 1352, 1570, 1063, 1571, 2148, 2675, 1554, 108, 1116, 1115, + 2098, 3875, 3876, 4312, 4124, 4314, 4128, 2637, 2638, 2054, + 2055, 2099, 2100, 3093, 4122, 2457, 2458, 2459, 3094, 3543, + 3108, 3109, 4133, 2628, 2101, 3100, 4619, 4320, 4321, 4717, + 4716, 4322, 4131, 4132, 3877, 3878, 3309, 3310, 3311, 3071, + 1811, 1812, 1819, 1411, 1412, 1750, 2103, 2642, 3113, 3556, + 2478, 2644, 3554, 3883, 2817, 3659, 3660, 989, 990, 2079, + 2622, 3087, 1506, 1507, 1508, 2085, 3088, 3089, 4039, 4459, + 4256, 2962, 3142, 3194, 1782, 1783, 3666, 4136, 4500, 4719, + 4720, 4721, 2076, 2077, 2617, 2618, 2619, 991, 992, 1503, + 2078, 3081, 3864, 100, 547, 101, 1948, 2996, 1355, 2509, + 1169, 1469, 1736, 1737, 858, 854, 561, 102, 573, 2545, + 103, 593, 2052, 914, 966, 1470, 1471, 2591, 3058, 3065, + 2592, 3070, 3856, 3060, 3516, 3517, 2496, 2497, 3061, 3519, + 3853, 3830, 3831, 3488, 4106, 104, 621, 3575, 3154, 3155, + 4587, 4588, 967, 105, 546, 1182, 2881, 4265, 1742, 2339, + 4443, 1183, 1184, 2342, 713, 714, 106, 1077, 617, 1589, + 1590, 1591, 2178, 107, 609, 1060, 3143, 3570, 2162, 956, + 1352, 1570, 1063, 1571, 2148, 2677, 1554, 108, 1116, 1115, 686, 109, 110, 654, 151, 1671, 111, 869, 1374, 1962, - 3003, 3004, 3452, 1375, 1376, 2508, 4078, 112, 594, 971, - 972, 1475, 1473, 2600, 2057, 113, 587, 957, 2043, 114, - 576, 919, 1422, 2012, 115, 116, 117, 921, 3490, 4678, - 4804, 580, 2015, 1426, 3908, 4112, 4297, 4298, 4300, 4480, - 4481, 4831, 4862, 4870, 4866, 4873, 4874, 4877, 4881, 4882, - 844, 1088, 1089, 845, 4355, 846, 847, 848, 3063, 3064, - 2621, 849, 3065, 850, 3285, 1170, 1739, 569, 531, 666, - 1090, 2612, 852, 946, 1123, 1458, 1982, 1983, 533, 534, - 118, 608, 1007, 2111, 1520, 1021, 1548, 1538, 1547, 2136, - 2670, 2139, 2671, 2672, 3563, 3131, 3564, 3132, 1066, 2132, - 1521, 3133, 1522, 2125, 2126, 2127, 2128, 3125, 1536, 2122, - 2145, 119, 922, 539, 1428, 1429, 2554, 120, 620, 121, - 1413, 2003, 2004, 2539, 3021, 2540, 122, 980, 981, 123, - 897, 2703, 2523, 1938, 1126, 1939, 1989, 900, 1387, 901, - 902, 1402, 1396, 1405, 1399, 4275, 4087, 4088, 2527, 1946, - 1984, 2066, 3013, 3816, 1985, 1976, 2517, 2518, 3818, 4090, - 3471, 4282, 4283, 124, 155, 125, 4715, 542, 705, 1177, - 1498, 126, 127, 128, 129, 1501, 1632, 2610, 1633, 1634, - 1635, 1636, 2206, 2073, 1887, 1888, 3440, 1295, 1296, 2464, - 2967, 2968, 1006, 1105, 1659, 1650, 143, 144, 145, 146, - 1147, 1148, 3288, 3706, 4003, 4229, 4230, 4413, 4559, 1652, - 3162, 4614, 4839, 4863, 1653, 1654, 1655, 3575, 4319, 4612, - 4781, 4838, 1656, 3161, 3894, 4493, 4716, 130, 1091, 631, - 1630, 1625, 1627, 2203, 2698, 131, 132, 133 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -4278 -static const int yypact[] = -{ - 6611, 2890, 1824, 1646, 411, 790, 57939, -4278, 728, -88, - -4278, 455, 923, -4278, -4278, -4278, -4278, -4278, 3725, -4278, - 57939, 999, 1176, -4278, 26127, -4278, -4278, -4278, -23, -4278, - 109, -88, -4278, 999, 479, -4278, 57939, -4278, 880, 1345, - 999, -4278, -4278, -4278, 50954, -4278, 455, 57939, -4278, 849, - -4278, -4278, 50954, 385, 224, 886, -19, -4278, -4278, 57939, - -4278, 2544, -4278, 851, 1542, 1408, -4278, -4278, 1193, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, 3436, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 26768, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, 950, 57939, 980, 57939, 1431, 57939, - 49049, 57939, -4278, 1506, -4278, -4278, 1516, 1040, -4278, -4278, - -88, 1085, -4278, -4278, 1695, 455, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 1117, -4278, -4278, 1191, 411, -4278, -4278, -4278, - -132, -4278, 1790, 1616, 1406, 57939, 822, 12441, 1650, 1650, - 1650, 1677, 1708, 1650, 1650, 1650, 57939, -4278, 1650, 1650, - 1650, -88, -4278, -4278, -4278, 1819, 37619, 57939, 1583, 219, - -76, 49049, -4278, 1451, 57939, 411, 75, -4278, 1718, -4278, - -4278, -4278, 64289, -88, -4278, 1929, 1785, 355, 57939, -4278, - -4278, -4278, 64289, 213, 52, 1386, -4278, -4278, 1540, -4278, - 38254, 188, -4278, -4278, -4278, 814, 2772, -4278, 28691, 4282, - 1540, 1533, 411, -97, 1543, 411, -4278, -4278, 57939, 411, - -88, 1757, -4278, 12441, -4278, 179, 179, 179, -4278, 179, - -4278, 179, 851, 1403, 1582, -4278, -4278, 1412, 57939, 1850, - -4278, 1850, -4278, -4278, 1850, 1238, 1579, 1848, 1865, 1868, - 1552, 1410, 1040, 2329, -4278, -4278, -4278, 1449, -30, -4278, - 1512, 41429, -4278, 57939, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 1372, -4278, 1565, 733, 1600, 1955, -4278, 49049, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 26127, - 1488, 57939, -4278, 1992, 12441, 1191, -4278, 1578, -4278, -4278, - 26127, -4278, -4278, 26127, 231, 36, 57939, -4278, -4278, 2152, - -4278, -4278, -4278, 51589, 822, 1508, 1518, 1520, 17721, -4278, - 1545, 1549, 1554, 12441, 1569, 1576, 1581, 1584, 1595, 1619, - 1626, 1631, 1636, 1639, 1641, 1653, 1665, 1669, 1669, 1669, - 1672, 1674, 1680, 1697, -165, 1702, -4278, 1725, 1759, 1763, - -4278, -4278, 1767, 1769, 1774, 1780, -4278, -4278, 1787, 1797, - 1799, 13101, 1805, 1807, 1813, -4278, 22910, 1821, 1823, 1831, - 1854, 1878, 1894, 1904, 1918, 1926, -4278, -4278, 12441, 1672, - -4278, -4278, 1948, -4278, 1957, 1961, 1965, 1972, 1978, 1982, - 1993, 2000, 2011, 2014, 2031, 2036, 2039, 2045, 2057, 2060, - 2064, 1672, -4278, 1051, 2073, 2079, 1121, 2082, -4278, 2088, - -4278, 189, 2093, 1669, 1672, 1672, 2095, 2097, 2103, 2110, - 2119, 2130, 17721, 17721, 17721, 12441, -4278, 57939, -4278, 57939, - 2018, 3096, -4278, 2696, 17721, 200, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 1563, 1721, -4278, -4278, -4278, -4278, -4278, - -4278, 2133, 1585, 2128, 57939, 57939, 57939, 2261, 57939, 57939, - 57939, -4278, 49049, 1964, 57939, -4278, -4278, 1650, 1756, 5019, - 31891, 2101, 2056, 1893, 1669, -4278, -4278, 725, 746, 780, - 2169, -4278, -4278, 2222, 784, 2195, -4278, 820, 431, -4278, - 119, 829, 844, -4278, -4278, -4278, -4278, -4278, -4278, 1987, - 2395, 2146, -4278, -4278, 162, -4278, -4278, 57939, -4278, 2646, - 12441, -4278, -4278, -4278, 2573, 2300, -4278, -4278, -4278, 217, - 2761, 240, 26127, 1646, 57939, 158, 65559, 65559, 57939, -4278, - 61114, 2156, -4278, -4278, 5823, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, 2171, -4278, -4278, 2184, - 12441, 1365, -4278, -157, -4278, -4278, 2538, -4278, -4278, 45874, - 26127, 1341, 64924, -4278, -4278, -4278, 23553, -4278, -4278, 2796, - -4278, 2192, -4278, -4278, 1721, 3094, -4278, 2474, 2101, 2483, - -4278, 2661, -4278, 2492, 2403, 36, 2288, -4278, 2846, 2627, - -4278, 2708, 1599, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 2259, 2772, -4278, -4278, 52224, 680, 2424, - -138, 1027, 1096, 36981, 752, 49049, 1127, 115, 29331, 42064, - 2262, -4278, -4278, -4278, 796, 2426, -4278, 2760, -4278, -10, - -4278, 2278, 2265, -10, 46509, 2627, 203, -4278, 379, -4278, - 2753, -4278, -4278, -4278, -4278, 2416, 2400, 2450, -4278, 390, - 2802, -4278, 411, -4278, 56, -4278, 2431, 2627, -10, 203, - -4278, 2683, 2810, 627, 2779, -4278, 984, -4278, -4278, -4278, - -71, 2886, -4278, 2325, -4278, -4278, -4278, 26127, -4278, -4278, - -4278, 2573, -4278, 196, -4278, -4278, -4278, -4278, 2328, -4278, - -4278, 2614, 2447, -4278, -4278, 73, 2344, 7, -4278, 2840, - -4278, 1646, 57939, -4278, -4278, -4278, 835, 1703, 1516, 1850, - -4278, 1850, 1850, 1850, 1850, 1085, 42699, -4278, -4278, -4278, - 2884, 2902, 1669, 2359, -4278, -4278, -4278, -4278, -4278, 3021, - -4278, -4278, 2656, 2923, 2923, 2923, 3044, -4278, -4278, -4278, - 26127, -4278, -4278, -4278, 733, -4278, 2572, 2440, -4278, 57939, - 1600, -4278, 26127, -4278, 2805, 2415, -4278, -4278, 2676, 12441, - -4278, -4278, 12441, 64289, 2918, 2018, -4278, -4278, 59, -4278, - -4278, 26127, 299, -4278, 3023, 2643, -4278, -4278, -4278, 3021, - 2923, 26127, -4278, 2445, -4278, 2434, -4278, 12441, 12441, 356, - 3034, 3100, 3100, 3100, 2018, 2496, 12441, 12441, 12441, 12441, - 12441, 12441, 12441, 12441, 12441, 12441, 12441, 12441, 367, 2471, - -4278, -4278, -4278, 307, -4278, 2476, 12441, 12441, -4278, 12441, - 12441, 27409, -4278, 4623, 12441, 12441, 375, 2993, 12441, 12441, - 12441, 12441, 4164, 12441, 12441, 12441, 27409, 3131, 2485, -4278, - 2484, 1081, 12441, 12441, 1170, 12441, 12441, 12441, 12441, 12441, - -4278, -4278, 12441, 12441, 12441, 12441, 17721, 12441, 12441, 12441, - 12441, 12441, 12441, 2500, 12441, 3100, 3100, 12441, 12441, 1484, - -4278, -4278, 12441, 2977, 2977, -4278, 12441, 9141, 12441, -4278, - -4278, 2504, -4278, -4278, -4278, 27409, 3100, 3100, 12441, 12441, - 12441, 3034, 3034, 3034, 320, 2513, 580, 12441, 29971, 2510, - -4278, -4278, -4278, -4278, 12441, 12441, 12441, 17721, -4278, 1448, - -4278, -4278, -4278, -4278, -4278, 13761, 17721, 17721, 2497, 17721, - 17721, 17721, 17721, 17721, 2904, 17721, 17721, 18381, 19041, 17721, - 17721, 17721, 17721, 1158, 3034, 49049, 17721, 12441, -4278, -4278, - 57939, -4278, -4278, -4278, 2523, -4278, 2815, 1964, -4278, 47144, - -4278, -43, 3033, -4278, 45874, 26127, -4278, 2539, -4278, 2927, - -4278, 2929, 2931, 2938, -4278, -4278, -4278, -4278, 3159, 2941, - -4278, 411, 2945, -4278, -4278, 2563, -4278, -4278, -4278, 19701, - 49049, -4278, 2576, -4278, 2593, -4278, -4278, -4278, -4278, -4278, - -4278, 2684, -4278, -4278, -4278, -4278, 2582, -4278, 45874, 2582, - -4278, -4278, 2582, -4278, -4278, 2582, 41429, 37, 3643, -4278, - -4278, 57939, -4278, 58574, -4278, 3006, 1509, -4278, 23553, 411, - -4278, 3015, 14421, -4278, -4278, -4278, 2966, 451, 2594, -4278, - -4278, -4278, -4278, 3053, 57939, -4278, -4278, -4278, 12441, 2964, - 2608, -4278, -4278, -4278, 211, 26127, -4278, 2018, -4278, 124, - 124, 2870, 1664, 49049, -4278, -4278, 184, 2616, -4278, 2703, - 2624, -4278, 2705, -4278, -4278, 26127, 2618, -4278, 26127, -4278, - -4278, -4278, 2888, 2712, -4278, 411, 52, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - 2632, 2653, 3102, 2644, 45874, 41429, 96, -4278, 57939, -4278, - 1495, -4278, -4278, 974, -4278, -4278, 194, 43334, -4278, 592, - 2677, 2702, 3056, -4278, -4278, 2658, -4278, 12441, -4278, 2655, - 2662, -4278, 796, -4278, 47144, 57939, -4278, -4278, -4278, -4278, - -4278, 3252, 12441, -4278, 45874, -4278, -35, -4278, 786, 80, - 796, -4278, -4278, -4278, -4278, -4278, 57939, 52859, 2668, 9801, - 2795, 3079, -4278, -4278, -4278, 2687, 1850, 57939, 57939, 57939, - 26127, 57939, 26127, -4278, 1181, 1181, -4278, -4278, -4278, -4278, - -10, 57939, 57939, -10, 41429, -4278, 203, 763, 57939, -10, - -4278, 3080, 2798, -4278, -4278, -4278, 3166, -4278, -4278, 3158, - 2701, -4278, 3191, -4278, -4278, 2831, 203, -4278, -4278, 26127, - -4278, -4278, 203, -4278, 203, 203, 12441, -10, -10, -10, - -4278, -49, -4278, -4278, -4278, 2862, -97, -4278, -4278, -4278, - 878, -4278, -4278, 179, 2967, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, 1107, -4278, -4278, -4278, - 3197, -4278, 47144, 41429, 3171, 1850, 1850, -4278, -4278, 3204, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, 1850, -4278, -4278, - -4278, -4278, -4278, -4278, 1600, 49049, 57939, 57939, 57939, 26127, - -4278, -4278, -4278, -4278, -4278, 185, -4278, -4278, -4278, 2123, - 3238, -4278, 49049, 2207, -80, 1047, 2207, 2730, 411, 1078, - -4278, 1078, -4278, -4278, -4278, 1450, 1850, -4278, -4278, 2737, - -4278, 2984, -4278, -4278, 53494, 26127, -4278, -4278, -4278, 197, - 2734, 2741, 2018, 2018, 61749, 3347, 2780, 4586, -4278, -4278, - 26127, -4278, 55, -4278, -4278, -4278, 2806, -4278, -4278, -4278, - -4278, 1443, -4278, -4278, 1722, 2801, 2752, -4278, 2888, -4278, - 1460, 57939, 3211, 34441, -4278, 416, 198, -4278, 3100, 2756, - -4278, 2757, 2764, 2765, 12441, 249, 1832, 229, 1294, 1434, - 313, 427, 648, 608, -4278, 1685, 792, 809, 816, 259, - -4278, 2766, 2774, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, 2770, -4278, -4278, -4278, 824, 855, 1308, 1418, 2773, - 2775, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, 3229, -4278, 875, 1694, -4278, -4278, -4278, -4278, 2776, - -4278, -4278, 1440, 930, 970, 324, 2783, 1699, 981, 1741, - 1788, 2789, 27409, 57939, 3100, 2791, 1459, 1463, 3100, 2792, - 1014, 1473, 1809, 1836, 1911, 1478, 1498, 1028, 1937, 2887, - 1660, 1034, 1036, 1692, 1115, 1124, -4278, 1705, 2793, 2794, - 1201, 205, 3100, 2799, 353, 2797, 2804, 1715, 10461, 11121, - 11781, 159, 1207, -4278, 2808, -4278, 2484, 2809, 2812, 361, - 242, 1726, -4278, 12441, -4278, -4278, 2811, -4278, 2876, 190, - 80, -4278, 2979, 57939, 2456, 168, -4278, -4278, -4278, -4278, - -4278, -4278, 70, -4278, 2818, -4278, 2819, 288, 2824, 12441, - 253, 2824, 3154, 1758, 1758, 17721, 2240, 2788, 13101, 1686, - 13101, 1686, 2824, 2824, 2824, -4278, 17721, 2826, 17721, 17721, - -4278, 3034, 2018, 2830, 573, 57939, 26127, -43, 2823, -4278, - -4278, -4278, -4278, -4278, 796, -4278, 2832, 138, 26127, 49049, - 2833, -4278, -4278, -4278, -4278, -4278, -4278, 411, -4278, -4278, - 3823, -4278, 26127, 2919, 2928, 2936, -4278, 32531, -4278, -4278, - -4278, -4278, 32531, 801, -4278, 57939, -4278, 2935, -4278, -4278, - -4278, 3270, -4278, 3271, -211, -4278, 24194, 24194, -4278, 24194, - -4278, -4278, -4278, -4278, -4278, 431, -4278, -4278, -4278, -4278, - 67, 68, 3376, 2677, -4278, -4278, -4278, -4278, -4278, -4278, - 33806, 2018, -4278, 26127, -4278, 3265, 1, 26127, -4278, -4278, - 3258, 2018, -4278, -4278, -4278, -4278, -4278, -4278, 2855, -4278, - 2858, -4278, -4278, -4278, -4278, -4278, 3114, 2970, -4278, 3506, - -4278, 12441, 411, -4278, 45874, 45874, 26127, 26127, 26127, 867, - 12441, -4278, 1388, 2866, -4278, -4278, 3115, -4278, 3510, -4278, - 3094, 19701, 47144, 3315, 3329, -4278, 2872, 24194, 24194, 24194, - -4278, -4278, -4278, -4278, 2969, 2969, -4278, 30611, -4278, 12441, - -4278, -4278, -4278, 3367, -4278, 3070, -69, -4278, -4278, -4278, - -4278, -4278, 57939, -4278, 3007, -4278, -4278, 2889, -4278, -4278, - 26127, -4278, -4278, 3338, -4278, 3058, -4278, 2018, -4278, 2891, - 52224, 3357, 9801, 3359, -4278, 47779, -4278, 2018, 796, 2906, - 2911, -4278, -4278, 3286, -66, -4278, 2912, 2913, -4278, 2908, - 2914, 2917, 52224, 12441, -4278, 786, -4278, -4278, -4278, -4278, - -4278, 17721, 1725, -4278, 2018, -4278, -4278, 411, 3382, 411, - 12441, 2932, 57939, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -10, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, 3162, 2627, 2802, - 3079, -4278, -10, 203, 26127, -10, -10, 2018, -4278, -4278, - -4278, -4278, -4278, -4278, 2926, -4278, 2996, -4278, -4278, 3101, - 64289, 2948, -4278, 3406, 2627, -4278, -4278, -4278, 218, -209, - 2949, 1850, -4278, 57939, 57939, 1850, 1850, 57939, -4278, -4278, - -155, 3235, 3239, -4278, -4278, 796, 796, 3264, -4278, 411, - 3097, 3099, 3107, 3111, 3118, 3141, -4278, -4278, 411, 411, - -4278, -4278, 796, -4278, 558, -4278, -4278, -4278, -4278, 2813, - -4278, 796, 796, -4278, 730, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 1075, -4278, 5110, -4278, -4278, 26127, 3253, 26127, - 3442, -4278, 3509, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 2989, -4278, -4278, 12441, 3082, -4278, -4278, 2780, - -4278, 3002, 3009, 3011, 3019, 3022, 3025, 3026, 3027, 3030, - 3031, 3035, 3037, 3039, 3043, 3047, 3048, 3049, 3051, 3052, - 3054, 3060, 3061, 3063, 3020, -4278, -4278, -4278, 3062, -4278, - -4278, -4278, 796, 796, 796, 796, -4278, 2552, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, 3380, 2540, 57939, 3069, - -4278, 34441, -4278, -4278, 878, -4278, 3024, 15081, -4278, 3055, - -4278, 12441, -4278, -4278, -4278, 2217, 12441, 12441, 3539, 2628, - -4278, 48414, -4278, -4278, -4278, 12441, -4278, 12441, -4278, 12441, - 12441, 12441, 12441, 48414, 2628, 12441, -4278, 3065, -4278, 3459, - 3460, -4278, -4278, -4278, -4278, 12441, 12441, -4278, 12441, 12441, - -4278, 12441, 12441, 12441, 12441, -4278, 12441, -4278, -4278, 17721, - -4278, 3059, 3071, -4278, -4278, -4278, 3072, -4278, 12441, -4278, - -4278, -4278, -4278, -4278, -4278, 12441, -4278, 12441, -4278, 12441, - 12441, -4278, 12441, 12441, -4278, -4278, -4278, 15741, 12441, 12441, - 3073, -4278, -4278, 12441, 12441, 12441, -4278, 12441, 2009, 12441, - 2284, 12441, 2305, 12441, -4278, 12441, -4278, -4278, -4278, -4278, - 12441, 421, 3114, 3115, 3076, -4278, 1939, 2708, -4278, 2392, - 2811, 3077, 3226, 1495, -4278, -4278, 49049, 12441, -4278, -4278, - -4278, -4278, -4278, -4278, 17721, 377, 3081, 17721, -4278, 3154, - 4164, 4164, 1873, 12441, 253, 3154, 12441, 3086, 3068, -4278, - 12441, 57939, -4278, -4278, -4278, 47144, -4278, 49049, 45874, -4278, - -4278, -4278, 138, -4278, 2539, -4278, -4278, 2855, 81, 3074, - 3088, -4278, -4278, -4278, -4278, -4278, -4278, 1949, -4278, 41429, - 144, 3713, 41429, -4278, 3095, -4278, 3098, 3175, 3185, 3186, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, 2627, 64289, 1388, -4278, -4278, 3105, -4278, -4278, 2676, - 2969, 3129, 3483, 3679, -4278, -4278, -4278, -4278, 64289, 64289, - 12441, 57939, 17721, -4278, 3720, 3117, 3119, 3127, 3120, 2018, - -4278, 3199, -4278, -4278, -4278, 187, -4278, -4278, -4278, -4278, - -4278, 76, 2041, -4278, -4278, 3122, 3122, 21626, -4278, -4278, - -4278, 57939, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, 3139, -4278, -4278, 3398, 45874, 41429, 3584, 3585, 3590, - 606, -4278, -4278, -4278, 49049, 3138, -4278, -4278, -4278, 2018, - 3140, 346, 43969, 3619, 43969, 43969, -4278, 652, 3537, 3540, - -4278, 3420, 2161, 3420, -4278, -4278, 652, 878, 2888, -4278, - 12441, 3760, 3592, 3473, -4278, 49684, -4278, 35076, -4278, 7218, - -4278, 45874, -4278, -4278, -4278, -4278, -4278, 3248, 3250, 1335, - -4278, -4278, 3560, 3390, -4278, -4278, -4278, 796, 2018, -4278, - 2668, 3164, 31251, -4278, 995, -4278, -4278, 2018, 304, -4278, - -4278, -4278, 3454, -4278, -4278, 3382, -4278, 2677, 203, -4278, - -4278, -49, 2821, -4278, 27409, 62384, 3115, 3493, -4278, -4278, - -4278, 234, 3818, -4278, 57939, 3173, -122, -4278, -4278, 57939, - 3634, 968, 968, 3455, 26127, 26127, 4134, 47779, 44604, -4278, - -4278, -4278, -4278, 3716, -4278, 3717, 1593, -4278, -4278, 2255, - 1047, -4278, 411, 411, 411, 411, 3115, 411, 411, 1995, - -4278, 2255, 2255, 1078, -4278, 170, -4278, -4278, -4278, -4278, - 3196, 796, 3755, 3437, 796, 796, 3755, 796, 3439, 3444, - 796, 796, 3272, 3703, 796, 3588, 3295, 2048, 3591, 796, - 3453, -4278, 3298, 3714, 796, 796, 796, 796, 796, 3755, - 3457, 3808, 796, 796, -4278, 796, 3461, 3463, 167, 3466, - 3470, 796, 796, 796, 796, 206, 57939, 796, 796, 3476, - 796, -4278, -4278, 5068, -4278, -4278, -4278, -4278, -4278, -4278, - -91, 24841, -4278, -4278, -4278, -4278, 796, -4278, 192, -4278, - 3428, -4278, 1684, 50319, 63019, 3216, 3223, 54129, 2018, 64289, - 12441, -4278, 3228, 3230, 3232, 3115, 411, 411, 995, 411, - 3115, 411, 411, 411, 411, 411, 411, 411, 3115, 3115, - 411, 164, 1129, 411, 3115, 4586, -4278, 411, 3114, 2255, - 2255, 1722, -4278, 3668, 796, -4278, 2468, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, 3227, 878, 2677, - 1487, 2677, 3241, -4278, 13101, 1734, -4278, 2018, 12441, 2018, - 2330, -4278, 3243, 3243, 3243, -4278, 3246, -4278, -4278, 3243, - 3646, 3243, 3652, 3247, 3251, 1997, 2309, -4278, 2002, 2358, - 1777, 3254, 3257, 1563, -4278, 12441, 12441, 1783, 545, 1802, - -84, 1214, 1216, 617, -4278, 1839, 3104, -4278, -4278, 1851, - 1858, 1860, 1862, 1250, 1892, 2004, 13101, 1896, 221, 718, - -4278, 1901, 1295, 1315, 1906, 12441, 1908, 12441, 1915, 12441, - 1920, 1922, 1927, 3249, 3249, 181, -4278, 3259, -4278, -4278, - -4278, 3261, -4278, -4278, -4278, -4278, 2677, 2259, 2392, -4278, - 3268, 1476, -4278, -4278, 3262, 2018, 3273, -4278, -4278, 12441, - -4278, 200, -4278, -4278, 17721, 751, 3274, -4278, 2018, -4278, - -4278, 3276, 1563, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 3479, -4278, -4278, 3491, 32531, -4278, 57939, -201, - 675, -4278, -4278, 49049, 3532, -4278, 3283, 35711, 41429, 41429, - 41429, 3266, -4278, 59209, 3563, 26127, -4278, 3704, -4278, -4278, - -4278, -4278, 57939, 65559, 65559, 65559, 65559, 3285, 3289, -4278, - -4278, -4278, 3154, 3665, 3544, -4278, -4278, 3114, 57939, 45874, - 3599, -4278, -4278, 3496, 2772, 27409, -4278, 3293, -4278, 3293, - 1134, 3296, 2016, -4278, -4278, -4278, 3291, 2288, 2020, -4278, - 19701, 3752, 2832, -4278, 41429, 41429, 41429, -4278, 2622, -4278, - 30611, 12441, -4278, -4278, -4278, -4278, -4278, 43969, -4278, -4278, - -183, 1476, -4278, 1724, -4278, -4278, -4278, 3698, 3420, 3420, - 652, 3700, 772, -4278, 2732, -4278, 2772, 2018, 12441, -4278, - 3575, -4278, 54764, -4278, -4278, -4278, -4278, 1093, -4278, -4278, - 3306, 3307, 214, 3535, -4278, -4278, -4278, -4278, 9801, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - 2627, -4278, -4278, -4278, -4278, -4278, -10, -4278, 3323, -4278, - 3310, 3311, -4278, 796, 3341, -4278, -4278, 41429, 3511, -4278, - 912, 3319, 57939, -4278, 3853, -4278, -4278, -4278, -4278, -4278, - 26127, -4278, -4278, 26127, 20344, -4278, -4278, 3578, -4278, 3654, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 2813, -4278, -4278, -4278, 1075, -4278, -4278, - 28050, 1850, -4278, 208, -4278, 1850, 197, 197, 3746, 55399, - 28050, 999, 995, 3115, 1677, 3115, 56034, 999, 411, 411, - 2622, 796, 3115, -4278, -4278, 3718, 1650, 3719, 1677, 1677, - -4278, 49049, 57939, -4278, 796, 948, 3115, 56669, 995, 995, - 1677, 999, 27409, 2933, 3195, -4278, 411, 999, -4278, -4278, - -4278, -4278, 26127, 999, 999, 2186, 3288, 3369, 3399, -4278, - -4278, -4278, 3115, 3195, 56034, -4278, -4278, 7547, -4278, -4278, - -4278, 20985, 57939, 311, 199, -4278, 3320, 39524, 3327, 1646, - 1399, 3410, 1816, -4278, 157, -4278, -4278, -4278, 3771, 3331, - 1186, -4278, 3328, -4278, 56034, -4278, 3342, -4278, 3340, -4278, - 59844, 2018, 3115, 3115, 3115, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 57939, 2255, 2540, -4278, 34441, 2677, 3575, - -4278, -4278, 4164, -4278, 2018, 12441, 992, -4278, -4278, -4278, - -4278, 1094, -4278, -4278, -4278, 3344, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 2600, -4278, -4278, 2628, -4278, -4278, -4278, - 3345, 4164, 4164, -4278, -4278, 12441, -4278, 3951, 3516, 12441, - 12441, -4278, 12441, -4278, 267, 3348, 3379, -4278, -4278, -4278, - -4278, 12441, -4278, -4278, 4164, -4278, 12441, -4278, -4278, 12441, - -4278, 12441, 12441, -4278, 1931, -4278, 1975, -4278, 2001, -4278, - -4278, -4278, 3114, 3358, 3740, -4278, -4278, -4278, 3114, 3550, - -4278, -4278, 3114, 3115, 3338, 2658, -4278, -4278, -4278, 2708, - 580, 57939, -4278, -4278, 2049, -4278, -4278, 12441, -4278, 49684, - -4278, -4278, 3837, 3733, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - 3811, -4278, 3462, -4278, 178, -4278, -4278, -4278, -137, -137, - -137, 16401, 2567, 3870, -4278, -4278, -4278, 3704, 3757, -4278, - 99, 3371, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - 57939, 3373, 1713, -4278, 2069, -4278, -4278, 3374, -4278, -4278, - -4278, 2259, 3381, -4278, 796, 16401, 3122, 3547, -4278, -4278, - 1134, 27409, 35076, -4278, -4278, 57939, -4278, 41429, 2872, 2872, - 2872, 44604, -4278, -4278, 346, -4278, 1495, 3349, -4278, 878, - -4278, 652, 3777, 3778, -4278, 652, -4278, -4278, -4278, 2259, - 1359, 346, 12441, 2627, -4278, -4278, 36346, -4278, -4278, -4278, - -4278, -4278, -4278, 31251, 52224, -4278, 2627, -4278, 411, 2623, - 27409, 2677, 16401, -4278, -4278, 57939, -4278, -4278, -4278, -4278, - 3529, -4278, 419, 3667, 3411, -4278, 3388, 3394, -4278, 26127, - 3395, 3396, 3397, -4278, -4278, -4278, 125, -4278, 5451, -4278, - -4278, -4278, -4278, -4278, 999, 3403, 3797, 3798, 197, -4278, - 1850, 28050, -4278, 1850, 1850, 1646, -4278, -4278, -4278, 129, - 56034, -4278, -4278, 28050, -4278, -4278, -4278, 3405, -4278, -4278, - 3114, -4278, -4278, 44604, 411, -4278, 1677, 57939, -4278, 28050, - 28050, -4278, 3434, 411, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 28050, 56034, 3407, -4278, 346, -4278, -4278, - -4278, -4278, -4278, 1929, -4278, 56034, -4278, -4278, 56034, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, 3412, 3116, 235, -4278, - 3409, -4278, 57939, -4278, -4278, 26127, -4278, -4278, -4278, 7663, - 57939, -4278, -4278, -4278, -4278, 57939, 4047, -4278, 3655, 12441, - 12441, 3694, 57939, 3695, -4278, 3989, -4278, -4278, 3834, 3877, - 57939, 7663, 3879, 3882, -4278, 3423, -4278, 54129, 3514, 2083, - -4278, -4278, 2098, -4278, -4278, 2112, -4278, -4278, -4278, -4278, - -4278, 3024, -4278, 3806, 528, 2018, 3427, 3429, 3430, 3431, - 220, 2116, 3715, -4278, -4278, -4278, 3243, -4278, 3246, -4278, - -4278, -4278, 4026, -4278, -4278, 3243, 3840, -4278, -4278, -4278, - 3435, -4278, 3438, 3440, 2007, -4278, 179, 3443, 2032, 1376, - 2134, 3753, 3829, -4278, 3670, -4278, 2047, 924, 2115, 2121, - 2201, 2205, -4278, -4278, -4278, -4278, -4278, 3446, -4278, -4278, - 522, -4278, 3441, 3592, -4278, -4278, -4278, -4278, 2138, -4278, - -4278, 4083, 3721, -4278, -4278, -4278, 411, 1252, 3475, 3475, - 3475, 1725, 2018, 2144, -4278, 64289, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 3856, 57939, -4278, -4278, 3451, 3506, 57939, - -4278, 3544, -4278, 2658, 27409, 16401, 3452, 3450, -4278, 7, - -4278, -4278, 3448, -4278, -4278, 2872, -4278, 4035, -4278, -4278, - -4278, 2889, 3472, 3508, 652, 652, 3505, 3513, 12441, 3458, - -4278, 401, 2658, -4278, -4278, 12441, -4278, -4278, 2018, 3699, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, 3575, -4278, 3456, - 3464, -4278, -4278, 411, 287, -4278, -4278, 327, 3638, 49049, - 3467, 57939, 57939, 3468, -4278, -4278, 20985, -4278, 4099, -4278, - -4278, 12441, 1850, -4278, -4278, 28050, 3518, -177, 28050, 28050, - 3949, 3998, 3999, -4278, 28050, 1443, 57939, -4278, 3252, -4278, - 28050, 3405, -4278, 554, 3574, -4278, 311, -4278, 27409, -4278, - -4278, -4278, 57939, -4278, 26127, -4278, -4278, 3478, -4278, 3243, - 3243, 3243, -4278, -4278, 3243, -4278, 3246, 3724, 3481, 3246, - 3246, -4278, -4278, -4278, -4278, -4278, 220, 2216, -4278, -4278, - 220, -4278, -4278, -4278, 166, 1171, 3246, -4278, -4278, -4278, - -4278, -4278, 3488, -4278, 3243, 3243, 3243, -4278, -4278, 220, - 3243, -4278, 3243, -4278, 3246, 403, 163, 3243, 3243, 3243, - 3344, 3482, -4278, 2162, -4278, -4278, 2018, 4164, 4052, -4278, - -4278, 3642, 411, 3997, 57939, 161, -4278, -4278, 3252, 4016, - 2825, -4278, -4278, -4278, 64289, -4278, 3115, -4278, 3115, -4278, - 3115, 45239, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 265, - -4278, -4278, 48414, 4112, -4278, 3780, 3494, -4278, -4278, -4278, - -4278, -4278, 220, -4278, -4278, -4278, -4278, 12441, -4278, -4278, - -4278, 12441, -4278, -4278, 3814, 3971, -4278, -4278, -4278, -4278, - -4278, -4278, 3498, -4278, 3115, 3575, -4278, 4013, -4278, -4278, - -4278, 3593, 3594, -4278, -4278, 3595, -4278, -4278, 160, 2219, - -4278, -4278, -4278, -4278, 16401, 63654, -4278, 3897, 3607, -4278, - -4278, -4278, 3512, 3554, -4278, -4278, 2708, -4278, -4278, -4278, - -4278, 920, 3888, 580, -4278, 3564, -4278, -4278, -4278, 3565, - 2018, 57939, -4278, 834, 2708, 346, 57939, 3921, 3806, -4278, - 57939, 7663, -4278, -4278, -4278, -4278, 3517, 3519, -4278, 57939, - -4278, -4278, -4278, 3799, 1399, 3794, 57939, 2167, 346, 3523, - 2176, -4278, 7, 5068, -4278, -4278, 682, 621, 2213, 28050, - 3518, 1120, 968, -4278, 968, -4278, -4278, -4278, -4278, 4187, - 311, -4278, -4278, -4278, -4278, -4278, 26127, -4278, 999, -4278, - -4278, 3405, 76, 3526, 57939, 3864, -4278, -4278, -4278, -4278, - 1167, -4278, 179, 1167, 1167, -4278, 2424, -4278, 3567, 220, - -4278, -4278, 3568, -4278, -4278, -4278, 1167, 179, 220, -4278, - -4278, -4278, -4278, 1167, 2714, 3663, -4278, 220, -4278, -4278, - 4112, -4278, 220, 4112, 1167, 1167, 57939, -4278, 57939, -4278, - 741, -4278, -4278, -4278, -4278, -4278, 2181, -4278, -4278, -4278, - -4278, 38889, -4278, 12441, -4278, -4278, -4278, -4278, -4278, 606, - 60479, -4278, -4278, -4278, 4015, 3726, 3728, -4278, -4278, -4278, - 3541, -4278, 3543, 346, 2224, -4278, -4278, -4278, 3545, 2627, - 4139, -4278, -4278, -4278, -4278, 183, 3821, 3115, 3115, 3115, - 1129, -100, 2219, -4278, -4278, 3604, 26127, 17721, 3662, 57939, - 1133, 3697, -4278, 4159, 4161, 4054, 4165, 920, -4278, -113, - -4278, -4278, 12441, 3562, 12441, 3571, 2197, -4278, -4278, 197, - 197, -4278, 834, -4278, -4278, -4278, 194, -4278, -4278, 3754, - -4278, -4278, -4278, 1304, -4278, -4278, 3694, 3572, 2241, 121, - 57939, -4278, 3851, 1605, -4278, 3578, 3547, -4278, 3114, 3544, - -4278, -4278, -4278, -4278, 968, -4278, 3573, -4278, 3577, 3580, - 2919, 2928, 2936, 1129, 1129, -4278, -4278, -4278, -4278, -4278, - 3974, -4278, -4278, 2267, -4278, 789, 3854, -4278, -4278, -4278, - -4278, 1167, -4278, 2281, -4278, -4278, -4278, -4278, -4278, -4278, - 2301, -4278, -4278, -4278, 49049, 411, 2814, 4216, -4278, 3632, - -4278, 4106, 3978, -4278, 4222, -4278, 2733, -4278, 3980, 3875, - 796, 3602, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 851, 3618, 3727, -4278, 64289, -4278, 57939, 57304, - -4278, -4278, 33171, -4278, -4278, -4278, 4055, -4278, 2018, -4278, - -4278, 4075, 2259, -4278, -4278, 12441, -4278, -4278, -4278, 3699, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 1415, -4278, - -4278, 27409, 2888, -4278, 3114, -4278, 2323, -4278, -4278, -4278, - 3689, 796, 796, 4114, 4116, 796, 796, 796, 796, 3603, - 3697, -4278, 4095, 179, 179, 4211, 179, -4278, 4212, 4213, - -113, -4278, 2018, 57939, 2018, 57939, -4278, 4068, 4068, -4278, - 3611, -4278, -4278, -4278, -4278, -4278, 1816, -4278, 2813, 1026, - 411, 796, 3871, 291, 121, -4278, -4278, 796, 346, 3613, - 291, 1605, -4278, -4278, 125, 3615, 2288, -4278, 2336, 3617, - 3620, -4278, 57939, 3622, 57939, 57939, -4278, -4278, -4278, 3623, - -4278, 57939, -4278, -4278, -4278, 312, -4278, -4278, 220, 179, - 220, -4278, -4278, 3628, -4278, -4278, -4278, 3909, 3680, -4278, - 3640, -4278, -4278, -4278, 40159, 3905, -4278, 3637, 255, -4278, - 12441, 4135, -4278, -4278, -4278, 2373, -4278, -4278, 38889, -4278, - -4278, -4278, 2658, 346, 194, -4278, -4278, 3644, -4278, 796, - -4278, 3641, -4278, -4278, 57939, 3645, -4278, 411, 411, 796, - 796, 3137, 3137, 3114, 49049, 3756, -4278, -4278, 796, -4278, - -4278, 179, -4278, 179, 179, -4278, 2387, 2394, 1303, -4278, - -4278, 3647, 7663, 2599, 26127, 3989, 2396, 968, 968, 291, - 1026, -4278, -4278, -4278, -4278, 3115, 1610, -4278, 4014, 4294, - -4278, 40794, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - 57939, 57939, 3651, 2414, 57939, 2430, 2437, 3544, -4278, 210, - 210, -4278, -4278, -4278, 2221, -4278, 3628, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, 7, 4245, 3930, 4248, 2018, 12441, - -4278, -4278, 57304, -4278, -4278, -4278, 27409, 16401, 2622, -4278, - 3662, -4278, 3659, -4278, -4278, -40, -4278, -4278, 411, 411, - -4278, -4278, -4278, -4278, -4278, 2443, -4278, 49049, -4278, -4278, - -4278, -4278, -4278, 4267, -4278, 4268, 3666, 3669, 12441, 3664, - 3673, -4278, -4278, -4278, -4278, 4183, 64289, 4131, 4182, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 7, 2453, 2457, 57939, 1026, 2464, 121, 1605, - 2480, -4278, 4328, -4278, 1008, 3958, 3959, -4278, 3681, -4278, - 3682, -4278, 3953, -4278, 3957, 2018, -4278, -4278, -4278, -4278, - -4278, -4278, 2489, -4278, 17061, -4278, -4278, -4278, -4278, -4278, - 49049, -4278, 3756, -4278, -4278, -4278, 54129, 54129, 2018, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, 3902, 1026, 2502, - -4278, 1026, -4278, -4278, -4278, -4278, -4278, -4278, 3741, 4206, - -4278, -65, -4278, -4278, 3873, -4278, 3659, -4278, 3690, -4278, - 3154, 3697, -4278, -4278, 3692, 2508, -4278, -4278, 2599, -4278, - -4278, -4278, -4278, 1026, -4278, 210, 210, -4278, -4278, 128, - 4118, 4035, -4278, 17061, 3696, -4278, -4278, -4278, 64289, 4195, - -4278, -4278, -4278, 411, 4089, -4278, 128, -4278, 4305, 3888, - -4278, -4278, -4278, 3881, -4278, -4278, -4278, 179, 4122, -4278, - -4278, 3990, 3705, 64289, 43, 22267, 3869, -4278, -4278, -4278, - -4278, -4278, 49049, 2515, -4278, -4278, 27409, -4278, -4278, -4278, - 25484, 3706, -4278, 796, -4278, 27409, -4278, -4278, 16401, -4278, - -4278 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -4278, -4278, -4278, -4278, 1717, 3449, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, 1859, -4278, -4278, -4278, -4278, -4278, - 1514, -4278, 340, -4278, 345, -4278, 347, -2542, -496, 3322, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -125, 1174, 3278, -4278, 236, -4278, -109, -4278, -4278, -4278, - -3523, -227, -396, -4278, 26, 19, 3269, -386, -4277, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -2116, -4278, - -4278, -4278, 74, -4278, -4278, -556, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -169, 381, 1884, -4278, -4278, -4278, - 4350, -4278, 3793, -4278, -1925, 2345, -4278, -4278, -4278, -4278, - -4278, 2432, -1830, -4278, -4278, -4278, 1400, -4278, -4278, -4278, - -917, 27, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, 581, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 2122, -4278, - -4278, 3722, -4278, -4278, -4278, 1381, -4278, -4278, -4278, -4278, - -4278, -4278, -1306, -4278, 1863, 1856, -4278, 1864, -4278, -94, - 633, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 3245, -4278, - -4278, -4278, -2323, -4278, -4278, -2446, 2727, -4278, -1993, -4278, - -4278, -2095, -4278, -4278, -1869, 947, -4278, -4278, 873, 386, - -4278, -1538, -2134, -2132, -4278, -4278, -4278, -2175, -2174, -714, - 2488, -1258, -2474, -4278, -4278, -4278, -4278, -92, -4278, -4278, - 91, 1617, 2164, -4278, -2706, -4278, -4278, 766, -4278, -4278, - 1387, 593, 1384, -4278, 933, 2985, -1325, -4278, -4278, -4278, - -4278, -4278, -4278, -150, 149, -243, -4278, -3984, 599, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -2974, -4278, -4278, - -4278, -395, -4278, -4278, -331, -4278, -4278, -369, -4278, -27, - -2514, -4278, -4278, -4278, -4278, 2236, -1548, -4278, -589, -4278, - 295, 1647, -2625, -2123, -4278, -1046, -1019, -3137, -4278, -4278, - -4278, -4278, 1168, -4278, 546, 1644, -2604, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, 1172, -4278, -4278, -3353, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -389, -4278, -200, 760, - -4278, -3184, 1087, 494, -4278, -4278, -4278, -4278, -1532, -3175, - -736, -4278, 93, -2695, -2645, 462, -4278, -4278, 69, -3898, - -4278, -603, -2277, -2573, -212, -4278, -4278, 83, -3539, 1752, - -4278, 432, -1167, -2656, 1521, -4278, -4278, 1044, -4278, -2986, - 1042, -4278, -4278, -4278, 1052, -4278, -307, -4278, -4278, -4278, - -4278, -3289, -4278, -1667, -2571, -4278, -4278, 4397, 4398, -2144, - -254, -253, -4278, -4278, -4278, 328, -4278, -4278, -661, -131, - -21, -13, -2640, -3731, 172, -3367, -4278, 285, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, 1688, -1844, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -3284, -3069, -4278, -4278, 1217, - -2748, -2215, -2210, -2584, 3415, -4278, -4278, -4278, -4278, 3360, - -2402, -3625, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 2893, - 1065, -4278, -4278, 1812, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 323, 1930, -4278, -4278, -4278, -4278, -4278, - 2238, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -162, - -4278, -4278, -4278, -4278, -4278, 587, 2800, -4278, -4278, -4278, - -4278, -9, -4278, -4278, -4278, -4278, 2478, -4278, -4278, -4278, - -4278, 2827, -4278, -4278, -4278, -4278, -4278, -4278, 1489, -4278, - 1971, -4278, -1647, -4278, -4278, 1039, -147, 1923, -625, -4278, - 2068, -4278, 123, -4278, 3447, -4278, -4278, -3286, 3548, -4278, - -4278, -2637, -4278, 3531, -1489, -2888, 2435, 98, -141, -2057, - 1089, -120, 1519, 597, 4545, -4278, -1205, -1240, -4278, -4278, - -2, -4278, -4278, -4278, -4278, -4278, -4278, 2175, 2182, -643, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, 1550, -4278, -4278, -4278, -4278, -1282, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -972, -4278, -2232, -4278, -4278, -4278, - -477, -4278, 3314, -4278, -4278, -4278, -2452, -1508, 1909, 1012, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, 1921, -4278, -1719, - -4278, -2941, -4278, -4278, -4278, -4278, 1586, -4278, -4278, -4278, - -4278, -4278, -4278, -1889, -4278, -2195, 66, -4278, 243, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -217, 833, -216, -3459, - -1209, 1714, -4278, -4278, -1383, 3355, -1905, -4278, 761, -4278, - 2087, 1138, -4278, -4278, -4278, -4278, 635, -2967, 2939, -4278, - -4278, -3394, -1009, -4278, 2940, -4278, -1467, 1490, 446, -4278, - -1498, -1193, -1797, -3165, -2634, -4278, 1307, 142, -4278, -4278, - -4278, -198, -4278, -4278, -4278, 1503, -4278, 458, 459, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -580, - -959, -4278, -4278, 2249, -1500, -491, 4507, 3, -4278, -4278, - 4, -4278, -4278, -4278, -4278, 3174, 3125, 2052, -4278, -4278, - -2588, -4278, -4278, 2010, -4278, 753, -1003, -594, 1082, -4278, - -4278, 1086, -3455, -4278, -4278, 13, -4278, -4278, -4278, 1030, - -4278, -74, 3982, 16, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, 2863, -1138, 3891, -4278, -4278, -4278, -4278, -4278, - -4278, 2427, -4278, -4278, -4278, -4278, -4278, -4278, 3042, 4001, - -606, -1444, -4278, -825, 2433, 1934, -889, -4278, -4278, -4278, - 3497, 4002, -4278, -4278, 4506, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, 2660, 672, -4278, -4278, -4278, -4278, - 3145, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, 1132, -208, -4278, 329, -225, -4278, - 147, -4278, -4278, -4278, -4278, -4278, -252, -4278, -4278, -256, - -4278, -1108, 3819, -1475, 245, -1357, -2737, -4278, 1111, 3123, - -2970, -709, -1224, -1257, -2924, -15, -4278, -4278, 3745, 30, - -479, -1661, -6, -821, -107, -618, -624, -893, -4278, -553, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, 1963, -4278, -4278, -4278, 1073, -4278, 4029, -4278, 2751, - -1491, 4034, -573, 2509, 1985, 1983, -4278, -4278, -4278, -4278, - -1973, -4278, -4278, 212, -4278, 2633, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278, - -4278, -4278, -4278, 3010, -452, -501, 3153, 4051, 3675, -4278, - 3256, -4278, -4278, -4278, -4278, -4278, 382, -4278, -152, 2051, - -1534, -2566, -4278, -4278, 2132, 969, -4278, 1651, -294, -588, - -4278, -4278, 376, -4278, -4278, -4278, 1371, 1737, 4064, 3688, - -4278, -4278, -4278, -4278, -4278, -2954, -971, -4278, -3684, -1927, - -4278, -4278, -4278, -2337, -3274, -4278, -4278, -1101, -4278, -4278, - -4278, -4278, -2235, -4278, -4278, -4278, 5, 4031, 4032, 4033, - -4278, -897, -4278, -4278, -4278, -4278, -4278, -4278, -4278, 3576, - -4278, -4278, -4278, -4278, -4278, 3036, 3579, -4278, -4278, -4278, - -4278, -4278, 3582, -4278, -4278, -4278, -4278, -4278, 1629, -4278, - -4278, -4278, -4278, -4278, -4278, -4278, -4278, -4278 + 3006, 3007, 3456, 1375, 1376, 2510, 2506, 3815, 3816, 4087, + 112, 594, 971, 972, 1475, 1473, 2602, 2057, 113, 587, + 957, 2043, 114, 576, 919, 1422, 2012, 115, 116, 117, + 921, 3494, 4688, 4814, 580, 2015, 1426, 3915, 4121, 4307, + 4308, 4310, 4490, 4491, 4841, 4872, 4880, 4876, 4883, 4884, + 4887, 4891, 4892, 844, 1088, 1089, 845, 4365, 846, 847, + 848, 3066, 3067, 2623, 849, 3068, 850, 3288, 1170, 1739, + 569, 531, 666, 1090, 2614, 852, 946, 1123, 1458, 1982, + 1983, 533, 534, 118, 608, 1007, 2111, 1520, 1021, 1548, + 1538, 1547, 2136, 2672, 2139, 2673, 2674, 3567, 3134, 3568, + 3135, 1066, 2132, 1521, 3136, 1522, 2125, 2126, 2127, 2128, + 3128, 1536, 2122, 2145, 119, 922, 539, 1428, 1429, 2556, + 120, 620, 121, 1413, 2003, 2004, 2541, 3024, 2542, 122, + 980, 981, 123, 897, 2705, 2525, 1938, 1126, 1939, 1989, + 900, 1387, 901, 902, 1402, 1396, 1405, 1399, 4285, 4096, + 4097, 2529, 1946, 1984, 2066, 3016, 3823, 1985, 1976, 2519, + 2520, 3825, 4099, 3475, 4292, 4293, 124, 155, 125, 4725, + 542, 705, 1177, 1498, 126, 127, 128, 129, 1501, 1632, + 2612, 1633, 1634, 1635, 1636, 2206, 2073, 1887, 1888, 3443, + 1295, 1296, 2464, 2969, 2970, 1006, 1105, 1659, 1650, 143, + 144, 145, 146, 1147, 1148, 3291, 3710, 4010, 4238, 4239, + 4423, 4569, 1652, 3165, 4624, 4849, 4873, 1653, 1654, 1655, + 3579, 4329, 4622, 4791, 4848, 1656, 3164, 3901, 4503, 4726, + 130, 1091, 631, 1630, 1625, 1627, 2203, 2700, 131, 132, + 133 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -2794 + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 532, 154, 677, 1062, 681, 1019, 1058, 1096, 1672, 568, - 1532, 1535, 563, 1440, 562, 1502, 1849, 2080, 570, 2340, - 1781, 1549, 1969, 1826, 583, 530, 1567, 78, 1875, 947, - 586, 591, 2087, 668, 157, 1024, 962, 1125, 599, 947, - 2086, 602, 2282, 1124, 2016, 1440, 599, 1744, 1597, 2813, - 2645, 2646, 1103, 622, 2814, 1104, 2137, 1239, 855, 856, - 2279, 1874, 860, 861, 862, 899, 1459, 864, 865, 866, - 843, 600, 3169, 3061, 1677, 1190, 1907, 1908, 3255, 3435, - 1911, 1912, 1913, 1914, 2904, 1916, 1917, 1919, 1921, 1922, - 1923, 1924, 1925, 1943, 656, 3192, 2911, 1968, 2541, 982, - 2999, 1678, 1897, 657, 3641, 1435, 1436, 3192, 3192, 2210, - 1905, 3534, 2199, 3523, 898, 3334, 1069, 3888, 1619, 1076, - 1168, 1790, 3702, 1172, 2018, 2035, 2973, 2224, 2748, 660, - 2749, 532, 2169, 532, 667, 673, 2602, 2509, 3551, 2650, - 3858, 2803, 2912, 3553, 1563, 3181, 3212, 2246, 898, 1351, - 3149, 678, 2182, 3804, 682, 683, 662, 3877, 664, 3544, - 2185, 2186, 2872, 2873, 684, 4110, 3805, 685, 3220, 1598, - 3716, 4150, 3224, 3642, 4238, 3093, 1300, 1301, 4274, 1291, - 1292, 1293, 1409, 3239, 3102, 1300, 1301, 3259, 4009, 3767, - 3753, 1334, 2499, 1701, 3010, 3250, 2329, 2251, 3814, 2030, - 4219, 3364, 3425, 2869, 4500, 2870, 704, 1300, 1301, 1651, - 1660, 4843, 2639, 1300, 1301, 1300, 1301, 2041, 1084, 1751, - 1752, 1753, 1300, 1301, 2969, 3192, 3192, 577, 1084, 4202, - -2590, -2591, 2862, 4321, 1599, 1403, 1771, 614, 1300, 1301, - 1986, 1718, 4038, 581, 3916, 2024, 1300, 1301, 3359, 3360, - 4081, 590, 2318, 1698, 3366, 2469, 3368, 4039, 2576, 1300, - 1301, 2744, 2451, 3939, 4741, 3605, 1552, 3204, 3205, 1835, - 4447, 4040, 1839, 1335, 3605, 3331, 1300, 1301, 3001, 3289, - 3921, 1593, 1028, 1009, -2745, 4765, 3603, 4038, -484, 905, - 1173, 2129, 917, 1858, 1859, 2551, 3619, 1863, 3559, 2067, - 3936, 1117, 3387, 2751, -2104, 2624, 2474, 1613, 1420, 2784, - 4665, 4177, 2660, 3781, 1877, 1878, 3209, 1674, 3426, 3817, - 3692, 4666, 4868, -2672, 1940, -1616, 1335, 1028, 1009, 1424, - 1300, 1301, 1524, 1628, 1070, 3831, 4713, 1300, 1301, 4827, - 2119, 1300, 1301, 3160, -2590, -2591, 1622, 964, -937, 578, - 1674, 3269, 291, 3931, 293, 4518, 2238, 2787, 1432, 2443, - 1723, 3831, 680, 2130, 968, 1338, 1674, 3082, 2120, 1747, - 1300, 1301, -2507, 947, 947, 2731, 1356, 947, 1300, 1301, - 1747, -580, 3743, 4501, 574, 3340, 3341, 3050, 618, 4173, - 4108, 1511, 954, -2745, 1300, 1301, 2192, -581, 611, 1218, - 1085, 1086, 1175, 1568, 3606, 2428, 2356, 156, 4164, 947, - 1085, 1086, 2242, 3536, 2613, 4328, 4478, 3511, 3406, 2521, - 3346, 2702, 3208, 537, 2477, 4038, 538, 2248, 3895, 3470, - 2711, 3235, 2552, 1300, 1301, 1317, 1774, 2280, 3101, 2470, - 4039, 4082, 3798, 950, 1300, 1301, 3800, 2522, 4649, 2495, - 4479, 1572, 3896, 2712, 4040, 1987, 1569, 2522, 2953, 896, - 2281, 1945, 1578, 4140, 908, 1028, 1009, 537, 4334, 3549, - 538, 1409, 3518, 3141, 3537, 2280, 2335, 2193, 969, 4242, - 1512, 1724, 1176, 3083, 2954, 1725, 1719, 3700, 575, 701, - 2252, 1219, 619, 896, 1815, 1477, 1726, 1816, 2281, 1775, - 1400, 3693, 1748, 2577, 2025, 1977, 1453, 965, 3528, 3529, - 3530, 2239, 1789, 1770, 2068, 2201, 2452, 4869, 1433, 2112, - 1665, 2522, 1666, 1667, 1668, 1669, 1525, 1239, 1776, 2121, - 3332, 4133, 1118, 1071, 1425, 1629, 3270, 2133, 4667, 673, - 4134, 4713, 691, 3425, 1302, 4357, -2507, 1303, 4160, 4448, - 673, 4165, 4166, 3832, 3599, 970, 1592, 4828, 2598, 1119, - 667, 903, 1300, 1301, 1614, 667, 699, 3277, 915, 2661, - 2131, 4170, 1151, 4141, 1337, 1302, 4742, 2776, 1303, 3832, - 1941, 1302, 958, 1302, 1303, 918, 1303, 1336, 907, 2625, - 1302, 1722, 1594, 1303, 667, 1988, -1576, 1174, 1777, 2500, - 3863, 2064, 1020, 1500, 3867, 916, 1302, 1714, 2499, 1303, - 947, 2748, 1078, 2749, 1302, 959, 4761, 1303, 1553, 2648, - 156, 3782, 3922, 3843, 3607, 1300, 1301, 1302, 1727, 1677, - 1303, 1320, 1100, 1937, 1300, 1301, 2553, -1576, 3695, 4284, - 1336, 2118, 699, 1421, 1302, 699, 3614, 1303, 3427, 1079, - 906, 3237, 2471, 3192, 1988, 667, 1678, 1130, 4181, 3426, - 3590, 3872, 4306, 4740, 2026, 1300, 1301, 955, 2472, 3333, - 1970, 4743, 3290, 667, 1158, 2479, 1910, 1778, 4135, 1943, - 2803, 2164, 2578, 657, 2167, 1161, 2482, 3603, 2170, 2485, - 2173, 2872, 2873, 1931, 657, -2590, -2591, 657, 1302, 3924, - 1130, 1303, 1602, 4744, 1969, 1302, 2246, 1185, 1303, 1302, - 3192, 3002, 1303, 1720, 4712, 3932, 3933, 1720, 2188, 2189, - 2190, 1758, 1759, -1912, 2747, 4844, 1728, 615, 4085, -2590, - -2591, 4314, 2869, 3436, 2870, 1300, 1301, 3092, 1302, 2687, - 1404, 1303, 3260, 1087, 2089, -1616, 1302, 579, 1814, 1303, - 3206, 4502, 703, 1279, 4331, 1350, 1827, 2251, 1829, 2042, - 1240, 2317, 1302, 984, 3011, 1303, 3342, 2218, 1300, 1301, - 1842, 1843, 1844, 867, 3012, 1947, 2349, 2184, 1848, 1968, - 2031, 4203, 3145, 4198, 1322, 1323, 3815, -484, 1981, 2329, - -2672, 4643, 4342, 4645, 4646, 948, 1720, 1440, 1304, 2868, - 2242, 1302, 3560, 4497, 1303, 3608, 1410, 1304, 2476, 1300, - 1301, 3261, 1302, 3717, 4041, 1303, 2444, 4239, 3853, 3356, - 4292, 1297, -2672, 1299, -1616, 3753, 1300, 1301, 3207, 1304, - 3428, 1333, 1080, 1300, 1301, 1304, 2881, 1304, 4313, 4301, - 2027, 1300, 1301, 2563, 1304, 1720, 1644, -937, 1342, 532, - 1344, 2465, 1346, 1130, 532, 2348, 667, 4172, 532, 4041, - 1304, 3194, 2402, 2429, 1385, 2028, 2406, 2373, 1304, 4436, - 3739, 2065, 1300, 1301, 1343, 1958, 2357, 1124, 3407, 1348, - -580, 1304, -1616, 1353, 3601, 2049, 2360, 1349, 612, 3028, - 2430, 1354, 1300, 1301, 1779, -1912, -581, 898, 1304, 3740, - 2453, 1414, 3027, 3542, 3543, 4125, 1533, 1427, 1537, 4733, - 4734, 1540, 1545, 4737, 4650, 1573, 657, 2374, 1431, 3104, - 4128, 154, 1437, 4116, 4117, 1940, 1579, 1566, 3142, 4142, - 1302, 3449, 3850, 1303, 1401, 1325, 1326, 1327, 1328, 1329, - 1330, 1331, 1332, 1817, -208, 1462, 1818, 1300, 1301, 1534, - 2168, 1472, 1304, 667, 657, 2961, 1124, 1720, 3856, 1304, - 657, 3855, 613, 1304, 1780, 1649, 1649, 2152, 681, 1141, - 2364, 2247, 2242, 3909, 3349, 156, 3351, 1882, 1883, 2058, - 4751, 1882, 2393, 1455, 3501, 3009, 2248, 1300, 1301, 3427, - 4532, 3603, 1304, 1302, 3603, 3603, 1303, 4041, 1300, 1301, - 1304, 1020, 1302, 3061, 4789, 1303, 4174, 667, -1576, 667, - 2432, 2433, 667, 667, -1711, 2500, 1304, 3165, 2449, 2450, - 2334, 4216, 4338, 2113, 4606, 1981, 4607, 3885, 667, 4307, - 158, 1300, 1301, 1302, 2978, 2979, 1303, 3914, 1645, 1552, - 536, 3318, 3576, 2123, 3438, 1300, 1301, 1603, 4786, 2576, - 2252, 1300, 1301, 1300, 1301, 1304, 2213, 2214, 710, 3356, - 3928, 3434, 2813, 3364, 987, 1885, 1304, 2814, 2217, 2335, - 4308, 657, 898, 2748, 2347, 2749, 2226, 2090, 3472, 2875, - 4293, 1378, 699, 3212, 699, 2365, -1616, 4263, 541, 3862, - 4294, 48, 1179, 3866, 1747, 1410, 1641, 1940, 1055, 1640, - 3238, -2666, 2251, 1302, 3239, 2251, 1303, 2267, 4269, 4500, - 1673, 4047, 1142, 1664, 4632, 2656, 711, 2544, 682, 683, - 4050, 3746, -2649, 2400, 3134, 1693, 2632, 2074, 684, 1642, - 1643, 685, 1300, 1301, 657, 584, 1302, 2090, 3644, 1303, - 4796, 1300, 1301, 532, 3770, 3526, 657, 2087, 3546, 2087, - 2087, 2571, 2572, 2224, 2803, 3562, -2653, 3088, 3089, 2926, - -2652, 947, 1677, 3577, 3538, 657, 1738, 2583, 1697, 2683, - 2872, 2873, 2513, 1465, -2134, 1740, 2509, 1302, 2394, 4674, - 1303, 1941, 1604, 1747, 1304, 4033, 3166, 3135, 4533, 1678, - 898, 1892, 2246, 1926, 1302, 2699, -2650, 1303, 3155, 3859, - 988, 1302, 3384, 3385, 1303, -2651, 1605, 2747, 2883, 1302, - 543, 2869, 1303, 2870, 3645, 1240, 2730, 2124, 1300, 1301, - -2656, 14, 4758, 3746, 1300, 1301, 4411, 1834, 1930, 2490, - 1240, 1300, 1301, 1300, 1301, 3603, 1886, 2491, 3199, 3473, - 1302, 3046, 896, 1303, 3146, 1347, 1528, 1304, 2091, 712, - 134, 3033, 2092, 1646, 4186, 4187, 1304, 291, 746, 293, - 1302, 3364, 63, 1303, 3364, 3364, 2367, 1300, 1301, 2977, - 1055, 2982, 2983, 1971, 3391, 3392, 3722, 4339, 2514, 1876, - 2681, 3364, 148, 3747, 564, 2484, 3136, 1304, 4501, 2242, - 1528, 4534, 667, 2686, 2577, 4212, 2689, 2690, 3723, 3364, - 4217, 4220, 4222, 4223, 4295, 2366, 4188, 1902, 2091, 4189, - 1701, 544, 1300, 1301, 3646, 1302, 1838, 2242, 1303, 4081, - 2242, 751, 3042, 2329, -2134, 1300, 1301, 156, 2868, 667, - 1875, 27, 1300, 1301, 1934, 1211, 1212, 3315, 4336, 4208, - 4209, 4210, 3320, 667, -2134, 3578, 2040, 4213, 667, 657, - 3328, 3329, 1970, 1941, 4224, 1302, 3336, 1304, 1303, 588, - 1146, 4746, 3748, 2090, 2075, 3137, 1302, 149, 2502, 1303, - 3348, 136, 2976, 1240, 667, 3408, 3409, 4797, 1133, 3487, - 3547, 607, 2986, -2666, 1505, 3747, 4459, 4259, 2743, 4660, - 1304, 1553, 667, 1300, 1301, 2252, 1529, 4412, 2252, 1302, - 667, 699, 1303, 1472, -2649, 1999, 4460, 2002, 3446, 3447, - 1282, 1927, 657, 1302, 1940, 1647, 1303, 896, 709, 1302, - 765, 1302, 1303, 3709, 1303, 3621, 4690, 4691, 2020, 863, - 3685, 1304, 1134, 4889, 1928, 1300, 1301, 1875, -2653, 657, - 1529, 4309, -2652, 3742, 616, 1940, 3167, 667, 1304, 2008, - 2370, 3651, 3652, 1472, 3579, 1304, -2793, 1300, 1301, 657, - 3725, 2505, 657, 1304, 3751, 4573, 4729, 2371, 2575, 2159, - 3153, 1394, 2248, 2578, 2372, 1961, 1300, 1301, -2650, 545, - 1300, 1301, 2379, 4296, 3478, 3479, 3480, -2651, 667, 667, - 1300, 1301, 2070, 988, 1304, 1300, 1301, 1747, 1190, 781, - 1302, 2088, -2656, 1303, 1723, 699, 2215, 632, 2071, 1302, - 4082, 2109, 1303, 2380, 1304, 1300, 1301, 4703, 667, 2114, - 1608, -2286, 4345, 1135, 4347, 1720, 1300, 1301, 667, 2160, - 2247, 4175, 3022, 2386, 2091, 896, 4841, 4842, 2092, 42, - 2134, 1020, 635, 4446, 4572, 2156, -1939, 2158, 4133, 3612, - 3612, 532, 532, 532, 657, 532, 657, 4134, 2219, 2667, - 4773, 2603, 4638, 4704, 4404, 2165, 532, 4406, 667, 1304, - 48, 636, 532, 3710, 2394, 2228, 2153, 2154, 2155, 3749, - 2157, 4067, 3138, 2265, 2183, 911, 1302, 1055, 2391, 1303, - -2311, 2166, 1302, 657, 658, 1303, 1467, 2172, 1929, 1302, - 1609, 1302, 1303, 2335, 1303, 2998, 638, 2171, 2875, 1304, - 898, 4617, 2087, 2334, 4083, 1271, 4526, 4527, 1055, 2583, - 1304, -2431, 2704, 2874, 661, 1724, 2708, 2709, 2392, 1725, - 1862, 2717, 2718, 1898, 4618, 1302, 667, 667, 1303, 2396, - 1726, 2072, 4337, 1448, 2695, 663, 1449, 947, 2729, 136, - 2149, 2150, 4528, 1304, 2223, 1677, -1939, 2741, 2742, 667, - 2220, 2221, 2222, 657, 3128, 3339, 3887, 1304, 4367, 2747, - 1941, -2286, 2408, 1304, 912, 1304, 667, 1300, 1301, -1219, - 1302, 3749, 1678, 1303, 679, 1275, 2415, 58, 4500, 4705, - 2277, -2286, 2419, 1302, 2420, 4135, 1303, 3293, 2275, 657, - 1302, 1941, 2266, 1303, 4521, 4344, 4575, 1272, 4763, 1300, - 1301, 4767, 1945, 1969, 657, 1621, 810, 2161, 2250, 1681, - 687, 3548, 1300, 1301, 3623, 3622, 3184, 3624, 2857, 2858, - 2859, 2860, 1300, 1301, 3635, 1185, 1136, 2346, 3639, 3640, - -2311, 63, 3350, 1300, 1301, 913, 2585, 2586, 3648, 2490, - 3653, 1300, 1301, -2745, 1304, 3659, 3661, 3556, 3119, 3294, - -2311, 1302, 4634, 1304, 1303, 4258, 3122, 4368, 3678, 3680, - 3682, -2431, 1727, 2422, 3683, 3661, 3923, 1276, 1440, 3445, - 4084, 691, 2423, 601, 3700, 4576, 4204, 3123, 1968, 4205, - 3517, -2431, 2486, 1450, 1300, 1301, 1511, 4085, 1875, -1712, - 1300, 1301, 1137, 1302, 1138, 2322, 1303, 2868, 704, 4369, - 3937, 152, 153, 3287, 3731, 3734, 3737, 1899, 692, 1300, - 1301, 3941, 4515, 3124, 3943, 1302, 1240, 2401, 1303, 2628, - 706, 3514, 4832, 1317, 2981, 2528, 291, 2529, 293, 3027, - 1304, 291, 2503, 293, 1302, 3185, 1304, 1303, 1302, 1300, - 1301, 1303, 2359, 1304, 3506, 1304, 1300, 1301, 1302, 2427, - 707, 1303, -2745, 1302, -1939, 2445, 1303, 4501, 1300, 1301, - 1728, 4722, 3389, 2583, 3390, 1300, 1301, 1300, 1301, 1300, - 1301, 2584, 2038, 1302, 853, 1512, 1303, 2468, 4086, 1304, - 2562, 2984, 688, 2908, 1302, -1939, 537, 1303, 2913, 538, - 537, 1981, 2361, 538, 1981, 1317, 1657, 3302, 3401, 1300, - 1301, 857, 2920, 1300, 1301, 2607, 2608, 2609, 1300, 1301, - 3192, 2493, 859, 1300, 1301, 1300, 1301, 2039, 596, 2492, - 657, 3837, 1300, 1301, 1304, 3802, 596, 1300, 1301, 1300, - 1301, 3612, 657, 667, 1300, 1301, 2935, 1304, 1300, 1301, - 589, 2362, 1337, 3411, 1304, 896, 657, 3192, 3192, 3713, - 870, 1385, 1463, 904, 2242, 2381, 1385, 2629, 920, 2516, - 2618, 2525, 2525, 3412, 2525, 3714, 3838, 4720, 4721, 951, - 2526, 2526, 3073, 2526, 2630, 953, 3023, 699, 1124, 947, - 3873, 3874, 1300, 1301, 2995, 1875, 2631, 3192, 2549, 973, - 2585, 2586, 1427, 962, 667, 947, 947, 657, 2655, 152, - 153, 657, -1939, 2992, 4320, 1304, 2247, 3875, 1300, 1301, - 1317, 3238, 147, 4324, 1300, 1301, 1300, 1301, 3657, 1320, - 1900, 1462, 2574, 975, 4061, 1300, 1301, 1068, 667, 667, - 657, 657, 657, 898, 2587, 1302, 1901, 1075, 1303, 1300, - 1301, 965, 2525, 2525, 2525, 1240, 667, 1304, 1300, 1301, - 1097, 2526, 2526, 2526, 1300, 1301, -1939, 1098, -1826, 1019, - 1109, 667, 2570, 3882, 1099, 2382, 2006, 1302, 2632, 1304, - 1303, 1690, 1691, 2323, 1101, 2638, 2627, 2875, 1111, 1940, - 1302, 2363, 1337, 1303, 657, -1826, 1502, 2390, 1304, 1024, - 1302, 1320, 1304, 1303, 1020, 1112, 1440, 148, 1113, 667, - 1114, 1302, 1304, 907, 1303, 1121, 2404, 1304, -1826, 1302, - 2405, 1646, 1303, 1140, 2341, 1146, 1020, 1735, 1149, 3209, - 2409, 3565, 1300, 1301, 1612, 2413, 3930, 1304, 1300, 1301, - 1617, 1618, 947, 3744, 1159, -1826, 2679, 2334, 1304, 1163, - 3572, 2882, 2874, 1167, 3860, 2414, 3508, 3219, 1180, 2324, - 3222, 3223, 1302, 3225, 1187, 1303, 3228, 3229, 1302, 2688, - 3232, 1303, 3772, 3773, 1188, 3241, 1189, 2673, 657, 2676, - 3245, 3246, 3247, 3248, 3249, 1028, 1009, 1302, 3253, 3254, - 1303, 3256, 149, 2633, 2680, 3787, 2225, 3265, 3266, 3267, - 3268, 1191, 3053, 3272, 3273, 1192, 3275, 2706, 532, 2945, - 1193, 532, 3494, 3494, 3494, 3494, 1320, 1302, 1300, 1301, - 1303, 1337, 1300, 1301, 1302, 1196, 4048, 1303, 1146, 3795, - 1300, 1301, 1197, 2707, 1300, 1301, 1302, 1198, 4038, 1303, - 1199, 1300, 1301, 1302, 3235, 1302, 1303, 1302, 1303, 1340, - 1303, 1200, 2817, 4039, 1533, 1092, 1093, 3567, 1094, 2720, - 1095, 657, 1055, 657, 1875, 2634, 1533, 4040, 2727, 2728, - 3344, 947, 3669, 3310, 3670, 1201, 947, 1302, 1028, 4196, - 1303, 1302, 1202, 1647, 1303, 1087, 1302, 1203, 2280, 1303, - 2229, 1302, 1204, 1302, 1303, 1205, 1303, 1206, 1251, 1304, - 1302, 1300, 1301, 1303, 2230, 1302, 1341, 1302, 1303, 1207, - 1303, 2281, 1302, 1875, 2325, 1303, 1302, 2418, 3671, 1303, - 1270, 1208, 1300, 1301, -2793, 1209, 1300, 1301, 1213, 3373, - 1215, 1304, 2877, 1283, 1284, 2880, 1216, 1329, 1330, 1331, - 1332, 3672, 2368, 2369, 1304, 1941, 3153, 1300, 1301, 2421, - 1774, 2387, 1337, 1217, 1304, 667, 2395, 1337, 1220, 2974, - 1302, 1970, 2424, 1303, 1357, 1304, 1389, 667, 1978, 1322, - 1323, 1979, 2436, 1304, 1980, 1300, 1301, 3673, 3376, -1144, - 1556, 1221, -1144, 2455, 1774, 3540, 1302, 1317, 896, 1303, - 2997, 3353, 1302, 1440, 1302, 1303, 4581, 1303, 2397, 1337, - 1981, 1981, 1981, 1302, 2629, 993, 1303, 1327, 1328, 1329, - 1330, 1331, 1332, 1775, 4727, 1222, 1304, 1302, 4726, 1223, - 1303, 2630, 1304, 1224, 4190, 1225, 1302, 4193, 4194, 1303, - 1226, 4276, 1302, 3098, 3377, 1303, 1227, 3927, 1557, 1345, - 3383, 1304, 1776, 1228, 4206, 2398, 1832, 1775, 3236, 1390, - 2065, 2065, 2065, 1229, 1391, 1230, 1124, 1124, 1124, 3386, - 667, 1233, 4215, 1234, 3237, -1940, 2410, 1337, 1558, 1235, - 947, 1304, 2231, 1300, 1301, 3531, 3186, 1241, 1304, 1242, - 947, 947, 947, 947, 2947, 2993, 291, 1243, 293, 667, - 1304, 667, 667, 2411, 1337, 2251, 3393, 1304, 1392, 1304, - 1302, 1304, 3444, 1303, 1055, 2949, 1302, 3079, 3397, 1303, - 1244, 3845, 1777, 667, 1393, 3398, 667, 3399, 1386, 3400, - 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 3731, 1388, - 3734, 1304, 3737, 3574, 1245, 1304, 4277, 4278, 994, 1124, - 1304, 4279, 4280, 4281, 3879, 1304, 3187, 1304, 2232, 3402, - 1246, 2322, 1395, 3405, 1304, 3040, 2087, 3883, 3410, 1304, - 1247, 1304, 1406, 3413, 4255, 3415, 1304, 2251, 2412, 1337, - 1304, 1398, 3417, 2233, 1248, -1940, 4268, 3419, 624, 3420, - 3674, 3066, 1249, 1320, 3421, 3069, 1302, 1875, 3792, 1303, - 1302, 1778, 4790, 1303, 2416, 1337, 2963, 1337, 1302, 667, - 667, 1303, 1302, 3350, 1252, 1303, 3007, 3008, 667, 1302, - 2655, 1533, 1303, 1253, 1304, 995, 2088, 1254, 2088, 2088, - 3514, 1255, 3604, 2322, 3675, 3188, 3611, 3633, 1256, 625, - 3099, 2874, 3793, -1912, 1257, 2322, 2234, 3634, 1258, 3115, - 1304, 3117, 4487, 4488, 4822, 667, 1304, 4824, 1304, 1259, - 3643, 2864, 3202, 3203, 3372, 2369, 1260, 1304, 3794, 3375, - 1337, 3403, 1337, 3755, 4056, 2892, 1020, 1261, 4058, 1302, - 1262, 1304, 1303, 3520, 3521, 3114, 78, 3524, 3525, 4840, - 1304, 1875, 2229, 1559, 1028, 1009, 1304, 1263, 1876, 4060, - 1302, 2893, 1264, 1303, 1302, 1265, 2230, 1303, 3158, 3171, - 3172, 1266, 2634, 532, 4066, 626, 3807, 1337, 657, 657, - 2242, 667, 667, 1267, 3657, 1302, 1268, -1912, 1303, 3756, - 1269, 4816, 3757, 2864, 3825, 3826, 3840, 3841, 3163, 1273, - 3758, 1316, 2235, 4580, -687, 1274, 1322, 1323, 1277, -2720, - 4025, 4026, 4383, 1302, 1278, 3637, 1303, 2894, 3759, 1281, - 2895, 1285, 1409, 1286, 1304, 4027, 4028, 947, 2896, 1287, - 1304, 4383, 3195, 3196, 3197, 3198, 1288, 3200, 3201, 4029, - 4030, 1407, 4068, 4036, 4045, 1289, 2897, 1397, 4069, 4443, - 4444, 4445, 2242, -1940, 2888, 993, 1290, 4384, 2252, 1339, - 3271, 4062, 1337, 3760, 2242, 4076, 1337, 4385, 4231, 4195, - 4200, 4093, 4094, 4201, 1408, 3286, 4384, 1415, 1779, 1417, - 4041, 1419, 4356, 1423, -1940, 1580, 4385, 3300, 1441, 4227, - 4228, 3309, 4211, 1560, 4329, 4330, 1456, 4491, 4218, 2323, - 4197, 3991, 4890, 4333, 4330, 1940, 1444, -1616, 4417, 4418, - 1304, 1446, 3189, 1317, 1304, 1561, 4386, 1581, 1474, 2486, - 1476, 3761, 1304, 719, 4486, 3525, 1304, 1492, 4070, 1494, - 2252, 1495, 4071, 1304, 2231, 4386, 3316, 3317, 1496, 3319, - 4341, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 4747, 2898, - 3330, 4437, 1497, 3335, 1500, 4261, 1562, 3338, 1326, 1327, - 1328, 1329, 1330, 1331, 1332, -1616, 1504, 3355, 4499, 4330, - 1582, 2323, 134, 2065, 1505, 1583, 3474, 1940, 1509, 1124, - 1514, 996, 997, 2323, 999, 3780, 1001, 1523, 994, 1940, - 4387, 2296, 2297, 1304, 4530, 4531, 1546, -1616, 2732, -1616, - 1550, -1940, 1551, 1002, 1555, 1317, 4350, 2310, 4538, 4539, - 2232, 3497, 3498, 746, 1304, 291, -1616, 293, 1304, 1318, - 1574, -1616, 1575, 3762, 2592, 1576, 3763, 627, 4540, 4539, - 1019, 1577, 152, 153, 291, 2233, 293, 1596, -1616, 1304, - 3808, 1600, 1319, 2618, 1601, -1616, 1606, -856, 1615, 628, - 4583, 4584, -1616, 1616, 2899, -1940, 1623, 1865, 1866, 2324, - 1024, 1624, -1616, 4639, 3841, 995, -856, 1304, 1626, 750, - 1385, 1631, 2516, 1638, -1616, 135, 751, 667, 1055, -1616, - 3486, 1414, 667, 667, 667, 629, 1674, 2593, -1616, 657, - 1680, 3915, 1682, 136, 3918, 3919, 3492, 1684, 2234, 4356, - 4671, 4672, 4377, 3764, 1317, 756, 757, 2733, 1687, 1320, - 1688, 4381, 3040, 667, 4701, 3525, 2594, 3042, 1692, 1876, - 4403, 4702, 3525, 4719, 3203, 4405, 1695, 1584, 1704, 152, - 153, 1696, 2592, -2788, 1240, 3658, 2312, 2313, 667, 667, - 667, 4736, 4330, 1705, 667, 630, 1706, 152, 153, 1715, - 1055, 2088, 1732, 4388, 4374, 4675, -1616, 4738, 4330, 1733, - 4389, 1941, 1055, 137, 4739, 4330, 152, 153, 1743, 4374, - 4771, 4772, 4388, 1741, 1795, 765, 3555, 1335, -1616, 4389, - 4787, 4330, 2628, 1747, 4788, 4330, 2595, 3148, -1616, 2296, - 2297, 4791, 4330, 1754, 2235, 2593, 3345, 4724, 1773, 2900, - 4390, 1320, 1585, 1784, 2997, 2310, 1321, 4794, 3841, 1820, - 2417, 1831, 3554, 1832, 2325, 4517, 4805, 4806, 1833, 4390, - -1616, 667, 1478, 1909, 2594, 3585, 532, 1856, 3588, 4823, - 4330, 1873, 1479, 1941, 657, 4837, 3727, 657, 3286, 776, - 1884, 3765, 4879, 4880, 1893, 1941, 1480, 138, 1440, 4543, - 1915, 3582, -679, 780, 781, 3819, 3820, 1935, 1481, 1482, - 1483, 1936, 1322, 1323, 1875, 2596, 1586, 3209, 1944, 2901, - 3766, -1616, 1949, 4391, 3286, 2734, 1799, 1484, 1324, 3210, - 2861, 1956, 3620, 3618, 3286, 1952, 2735, 1953, 3630, 1954, - 3629, 1960, 4391, 2736, 2595, -1616, 1955, 4579, 2902, 1957, - 1320, 4091, 4092, 1959, 1972, 667, 3629, 1973, 1975, 1974, - 2005, 3650, 3654, 1774, 2592, 2009, 1876, 3666, 3665, 2014, - 2629, 1317, 2017, 2019, 3667, 3668, 657, 2022, 3631, 3632, - 4439, 4582, -679, 1307, 2312, 2313, 1774, 2630, 3629, 4095, - 2023, 2036, 947, -1616, 2044, 3286, 3691, 3209, 2045, 2631, - 2047, 3704, 2046, -2482, 1322, 1323, 3664, 2056, 2053, 3210, - 2060, 996, 997, 998, 999, 1000, 1001, 2061, 3629, 2062, - 1308, 1317, 2063, 2596, 2104, 2102, 1775, 2593, 139, 2105, - 1800, 4392, -679, 1002, 1803, 1587, 2106, 3703, 640, 1525, - 2110, 1804, 2737, 4159, 2592, 2115, 2138, 3660, -1616, 1775, - 4392, 2146, 2147, 1440, 2174, 1776, 2594, 3738, 2151, -1616, - -1616, 3741, 595, 1325, 1326, 1327, 1328, 1329, 1330, 1331, - 1332, 2175, 1309, 2176, 1588, 2177, 2280, 3394, 3186, 2179, - -1616, 2632, -1616, 2180, 1310, 4599, 4600, 2181, 4602, 1409, - 2197, 4651, 2202, 4653, 2211, 2207, 1410, 2216, 802, 2281, - 2227, 140, 4351, 1322, 1323, 4352, 2249, 2593, 2270, -1616, - -1616, 2284, -679, -1616, -1616, 2269, 808, 4554, 640, 2285, - 4692, 810, 1805, 2287, 811, 1777, 2595, 2288, 2336, 2320, - 2338, 2344, 2597, 2350, 2352, -2788, 2594, 2592, 2738, 1875, - 3677, 2353, 2354, 2376, 1533, 2377, 1485, 2378, 3187, 2385, - 2383, 4652, 2384, 2394, 2388, 3806, 2280, 1327, 1328, 1329, - 1330, 1331, 1332, 3115, 1486, 2399, 141, 1320, 2403, 2407, - 2425, 2426, 4579, 1311, -1616, 2434, 2431, 4375, 4376, 2281, - 1807, 4748, 2435, 4353, 4354, 2446, 2447, 2460, 4250, 2448, - 4379, 947, 2463, 2467, -1295, 2473, 2633, 4382, 1332, 3114, - 2593, 2495, 2483, 1218, 1778, 2596, 2595, -1441, 4407, 4408, - 2498, 2504, 1271, 4698, 3040, 4699, 4700, 1320, 2592, 4562, - 1275, 3679, -2127, 2520, 4631, 4569, 2550, 3188, 2556, 2594, - 2519, -2788, -1616, 1720, 2561, 3066, 3852, 2564, 2567, 3854, - 2597, 667, 2591, 2599, 4810, 667, 1533, 2604, 2592, 2605, - 2606, 3681, -679, 2611, 1325, 1326, 1327, 1328, 1329, 1330, - 1331, 1332, 947, 2622, 2623, 1502, -1616, 2637, 2634, 3454, - 2993, 639, 2641, 2643, 2649, 2647, 2651, 1020, 1020, 3455, - 2659, 2593, 2657, -1616, 1876, 2596, 2530, 2658, -1616, 3892, - 2662, 2663, 2664, 3456, 3903, 1487, 4677, 2628, 2665, 2595, - 2531, 2666, 2674, 657, 2691, 3457, 3458, 3459, 2682, 2678, - 2594, 2593, -1616, 4810, 2694, 3910, 3211, 2692, 3884, -1616, - 1322, 1323, 1808, 2697, 3460, 3917, 2696, 2522, 1875, -1616, - 2628, 2714, -679, 3920, 3629, 2715, 2719, 3286, 1810, 1875, - 2594, -1616, 2721, 1875, 2722, 2726, -1616, 667, 1875, 2818, - 642, 3629, 2723, 3286, 3286, -1616, 2724, 1488, 640, 2822, - 2823, 4875, 2532, 2725, 2533, 2827, 2832, 3286, 3629, 2829, - 1322, 1323, 4883, 2833, 1489, 2834, 4875, 872, 2596, 3629, - 2595, 4883, 3629, 2835, 3929, 2856, 2836, 2863, 4505, 2837, - 2838, 2839, 4512, 3935, 2840, 2841, -886, 2878, 2855, 2842, - 3947, 2843, 2754, 2844, 2755, 4472, 3946, 2845, 2882, 657, - 2595, 2846, 2847, 2848, 4001, 2849, 2850, 947, 2851, 4002, - 2891, 1779, 2597, -1616, 2852, 2853, 532, 2854, 2915, 2916, - 642, 2972, 2886, -679, 4017, 2629, -826, -826, 3005, 2757, - 3014, 3309, 2914, 2491, 3189, -1616, 2990, -826, 2927, 2928, - 2940, 4010, 2630, 2962, 2971, -1616, 2534, 2760, 2980, 2596, - 1312, 1313, 1314, 2989, 2631, 2761, 3006, 873, 2629, 4860, - 3018, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 3016, - 3019, 3020, 3017, 3025, 3029, 2630, 3030, -1616, 3031, 2596, - 3043, 3047, 2763, 3044, 3049, 2031, 3048, 2631, 3056, 875, - 4461, 3071, 2597, 3070, 3074, 3075, 1674, 4557, 4462, 2764, - 3076, 2535, 4145, -679, 876, 3087, 3080, 3094, 3081, 4783, - 3095, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 3096, - 3108, 3109, 3120, 3111, 3121, 4463, 1990, 2123, -1616, 2769, - 1991, 2124, 3130, 3461, 3143, 3157, 2632, 3156, 4099, 3159, - 3164, 3170, 1992, 4104, 3182, 3183, 3209, 3221, 1876, 3226, - 548, 3462, -1616, 4505, 3227, 3231, 4080, 3230, 4114, 3233, - 4512, 3234, 3240, 3242, 3243, 880, 3244, 3251, 3252, 2632, - 1359, 3257, -1912, 947, 4472, 3258, 3263, 4587, 4588, 947, - 3264, 4591, 4592, 4593, 4594, 2597, 3274, 3291, 3303, 3304, - 4886, 4118, 3343, 881, 3312, 291, 3313, 293, 3314, 882, - -1616, 3347, 2345, 667, 2773, 4149, 4149, 3367, 549, 3356, - 3286, 2774, 3361, 3369, 3370, 3422, 641, 4625, 3371, 4161, - 3453, 3378, 3286, 3286, 3379, 3475, 2775, 3432, 3286, 3433, - 3629, 4852, 3481, 4132, 3286, 3437, 3441, -143, 550, 883, - 3443, 3448, 1876, 3451, 3476, 1533, 3629, 4464, 657, 3483, - 3488, 2633, 3499, 1448, 3503, -1616, 4867, 3500, 3509, 3510, - 642, 3516, 3527, 3519, 3463, 3522, 2597, -1616, 3541, 4287, - 3545, 988, 1360, 3557, 3558, 551, 3561, 3568, 3569, 3570, - 3573, 3584, 3464, 2777, 2633, 3581, 3160, -1616, 2784, -1616, - 3615, 3636, 3638, 3705, 3700, 3712, 2597, 3719, 1361, 3720, - 3724, 1362, 2778, 1410, -1750, 4688, 4689, 557, 3727, 3726, - 3752, 3775, 3771, 3776, 4697, 3783, -1616, -1616, 4237, 3784, - -1616, -1616, 552, 2634, 2452, 3796, 4465, 3427, 3810, 3811, - 2536, 2537, 2538, 3812, 3828, 2088, 3813, 3830, 1363, 3834, - 3836, 3842, 2583, 643, 3465, 4466, 667, 3864, 3865, 3844, - 3893, 644, 4233, 3898, 3901, 3899, 2634, 2782, 1364, 2783, - 3902, 3466, 3904, 3905, 291, 3906, 293, 2785, 4467, 3911, - 3912, 3913, 1993, 3926, 3934, 3938, 3945, 4004, 3944, 4005, - 4008, 4011, 4012, 4015, 4016, 3531, 4020, 4505, 4512, 4021, - 4022, 4024, 886, 4031, 4034, 4046, 4035, 4036, 4037, 4049, - 1994, 4051, 4053, 4063, 4064, 4054, 4065, 4055, 1995, 4074, - 4059, 4077, 4429, 4073, 4079, 4089, 4098, 4100, 4094, 4109, - 4111, 1365, 3556, 4129, 4121, 3069, -1528, 4126, 4144, 4155, - 4315, -1533, 4130, 4146, 3892, 4151, 4162, 4167, 889, 2791, - 4168, 4169, 4176, 3892, 4184, 1366, 4191, 4192, -69, 3289, - 4149, 890, 1996, 553, 4207, 4232, 4226, 4234, 4243, 4219, - 4260, 4266, 4045, 3286, 4265, 4267, 4270, 4271, 4272, 4273, - 4285, 4358, 2754, 947, 2755, 4286, 4290, 4299, 4289, 4359, - 657, 987, 4303, 4305, 4322, 4325, 4327, 4323, 4364, 4332, - 4365, 1300, 1301, 4362, 4495, 4216, 4378, 2792, 2793, 2794, - 4401, 4430, 4432, 1997, 2795, 554, -826, -826, 4434, 2757, - 4431, 4435, 4438, 4440, 4442, 4472, 4451, -826, 4454, 4473, - 2796, 4474, 4399, 2797, 4475, 4476, 555, 2760, 4483, 4492, - 4409, 4509, 4410, 893, 4529, 2761, 719, 4485, 4498, 4522, - 4535, 4546, 2798, 4524, 4547, 4427, 4525, 1055, 4548, 4426, - 1367, 4549, 4550, 4552, 4553, 894, 4555, 895, 4558, 1368, - 2800, 4571, 2763, 4468, 4570, 4586, 4589, 4560, 4590, 4595, - 4598, 4601, 4603, 4604, 1369, 4608, 1674, 4611, 4626, 2764, - 4633, 4452, 4637, 4640, 4656, 4663, 4641, 2655, 4644, 4647, - 657, 556, 1370, 4458, 4654, 947, 557, 1791, 1792, 1793, - 1794, 1795, 851, 4657, 4664, 1025, 4658, 4669, 4679, 2769, - 2776, 4682, 4676, 4694, -1699, 558, 2751, 4735, 1026, 4350, - 947, 4752, 3598, 4753, 4754, 4761, 746, 4774, 4775, 954, - 1027, 4779, 4776, 4782, 4149, 4777, 1371, 945, 4784, 1372, - 559, 4780, 4785, 4795, 4798, 4799, 4802, 945, 4800, 4801, - 4803, 3695, 4826, 4825, 1028, 1009, 560, 4830, 4833, 4836, - 4848, 4853, 4855, 4851, 1065, 4857, 1029, 4859, 4861, 1373, - 4864, 4865, 4876, 3000, 4885, 291, 3118, 293, 851, 3337, - 4253, 4251, 750, 4616, 2773, 4252, 1595, 3600, 667, 751, - 4326, 2774, 1030, 1442, 1031, 1658, 1032, 4615, 4718, 4820, - 1796, 1797, 1798, 1799, 4399, 4818, 2775, 4494, 1033, 4673, - 1686, 4245, 610, 1067, 2512, 2601, 3468, 4096, 756, 757, - 3173, 2831, 4563, 4567, 3493, 4542, 3036, 1166, 2263, 15, - 16, 3034, 4636, 3035, 1734, 2494, 4514, 3278, 2801, 3940, - 3502, 4102, 3507, 3835, 4681, 2034, 4453, 4760, 4850, 851, - 4105, 4813, 4835, 4597, 2701, 1876, -1912, 1034, 4335, 3690, - 3276, 1035, 4154, 2777, 1036, 3283, 3697, 4856, 4750, 3993, - 3768, 4199, 4225, 851, 4537, 4551, 4759, 4541, 851, 3180, - 4708, 4257, 2778, 3799, 3801, 3424, 3797, 3069, 765, 3069, - 4821, 648, 649, 1037, 4792, 1038, 4793, 4693, 4343, 4723, - 4635, 4630, 4380, 1039, 3689, 1040, 1620, 1800, 3280, 1801, - 1802, 1803, 4508, 3147, 1694, 4361, 851, 2821, 1804, 2198, - 4756, 3052, 4171, 291, 3485, 293, 4149, 950, 4149, 4149, - 3026, 1041, 1042, 851, 2573, 4648, 3829, 2782, 2970, 2783, - 4624, 2321, 2276, 3077, 4556, 1518, 4749, 2785, 3809, 1510, - 3450, 2644, 776, 1043, 2907, 1637, 3103, 2905, 4662, 1302, - 1830, 3861, 1303, 3100, 4610, 4489, 780, 781, 3439, 4814, - 4023, 4815, 4427, 1772, 4075, 1044, 4426, 851, 851, 851, - 851, 2987, 3803, 4179, 4318, 2204, 2205, 3535, 4458, 851, - 3684, 4574, 4817, 3533, 4661, 4316, 4317, 2876, 667, 1805, - 2997, 650, 2007, 2051, 1045, 3024, 3059, 4107, 3848, 4717, - 3886, 3847, 4757, 1081, 2343, 1186, 2684, 2163, 657, 2791, - 1061, 1064, 1670, 2685, 1377, 655, 4183, 4686, 4687, 3144, - 2506, 2059, 3833, 4849, 4858, 4731, 4477, 4605, 4884, 4887, - 1280, 4545, 3851, 3129, 4149, 4149, 3881, 1022, 4149, 4708, - 2108, 2466, 1023, 4819, 2669, 3126, 1806, 1807, 3127, 2069, - 2555, 983, 2209, 1493, 3015, 851, 3072, 4441, 4450, 3469, - 3708, 4730, 1046, 4812, 1998, 985, 4567, 2792, 2793, 2794, - 1876, 945, 945, 1499, 2795, 945, 1106, 1107, 1108, 0, - 2212, 0, 0, 1661, 0, 0, 1662, 0, 1047, 1663, - 2796, 667, 0, 2797, 0, 851, 0, 0, 0, 1048, - 1049, 0, 0, 1050, 1051, 0, 0, 945, 0, 0, - 0, 0, 2798, 0, 0, 0, 0, 0, 4768, 4769, - 0, 0, 0, 0, 1052, 0, 0, 0, 0, 4149, - 2800, 0, 0, 0, 0, 2291, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4888, 1791, 1792, 1793, 1794, - 1795, 802, 0, 0, 0, 4351, 0, 0, 4352, 0, - 0, 0, 0, 0, 667, 4878, 0, 0, 0, 808, - 3309, 3309, 1053, 0, 810, 0, 0, 811, 0, 0, - 0, 0, 0, 0, 0, 1054, 0, 0, 0, 1808, - 3174, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1304, 1809, 1810, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -2526, 0, - 0, 2292, 1055, 2293, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4353, 4354, 0, 0, - 1056, 0, 0, 0, 0, 0, 0, 0, 0, 1796, - 1797, 1798, 1799, 0, 0, 0, 0, 0, 0, 1876, - 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, - 1876, 0, 0, 4854, 1876, 0, 0, 0, 0, 1876, - 0, 2294, 0, 2295, 2296, 2297, 2298, 2299, 0, 2300, - 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, -2526, 2309, - 2310, 2311, 0, 0, 851, 0, 1057, 851, 945, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 532, 154, 677, 1062, 681, 1096, 1672, 1019, 1058, 568, + 1440, 1502, 563, 1103, 562, 1875, 1104, 1781, 570, 2080, + 1826, 1567, 1024, 1874, 583, 962, 530, 1969, 1532, 1535, + 586, 591, 2340, 668, 157, 843, 78, 1124, 599, 1549, + 2087, 602, 1440, 1597, 1744, 1849, 599, 2815, 1125, 2647, + 2648, 855, 856, 622, 2086, 860, 861, 862, 2816, 1351, + 864, 865, 866, 1239, 1563, 1968, 2137, 947, 2906, 600, + 2016, 1190, 3001, 1897, 898, 1435, 1436, 947, 3527, 3064, + 2913, 1905, 1677, 2035, 3258, 2282, 3645, 2279, 1678, 1598, + 899, 3337, 2246, 2210, 656, 2543, 1459, 1619, 3438, 3538, + 3172, 3895, 2018, 657, 1943, 1907, 1908, 3706, 898, 1911, + 1912, 1913, 1914, 2511, 1916, 1917, 1919, 1921, 1922, 1923, + 1924, 1925, 1168, 2199, 982, 1172, 3555, 1790, 2224, 660, + 2975, 532, 2169, 532, 667, 673, 2805, 1069, 682, 2750, + 1076, 2329, 2652, 2914, 3557, 678, 2604, 683, 684, 3215, + 2751, 685, 2182, 3096, 3223, 3184, 4119, 662, 3227, 664, + 2185, 2186, 3105, 3646, 3152, 3809, 3720, 2874, 2875, 3242, + 3808, 4247, 1701, 3195, 3548, 1291, 1292, 1293, 4159, 3757, + 4284, 3253, 1300, 1301, 3821, 3195, 3195, 1334, 4016, 3771, + 3362, 3363, 3865, 3207, 3208, 1409, 3369, 4228, 3371, 3013, + 2251, 4045, 2030, 3262, 704, 2251, 1300, 1301, 1403, 3884, + 1300, 1301, 3428, -484, 2871, 4853, 4046, 14, 2864, 581, + 611, 1651, 1660, 1300, 1301, 2872, 4090, 590, 3563, 614, + 4047, 2615, 1674, 4045, 1674, 2971, 3349, 1300, 1301, 4211, + 2451, 1028, 1009, 2041, 4331, 1300, 1301, 1599, 3603, 1300, + 1301, 3334, 3053, 1300, 1301, 1534, 2641, 3367, 3004, 2024, + 1986, 4045, 2251, 3168, -937, 1698, -580, 1751, 1752, 1753, + 2318, 3292, 2499, 1028, 1009, 3609, 4046, 3928, 1552, 3943, + 4775, 1300, 1301, 1774, 1771, 1335, 3838, 1572, 2499, -1576, + 4047, 4528, 1300, 1301, 1300, 1301, 905, 917, 3785, 1674, + 2746, 1028, 1009, 3195, 3195, 2067, 1300, 1301, 2753, 4837, + 4457, 3343, 3344, 1117, 577, 3946, 4090, 1835, 2322, 2129, + 1839, 1335, 1613, 1300, 1301, 1173, -2678, 3607, 27, 3429, + -1576, -581, 4806, 4186, 1300, 1301, 1524, 3623, 680, -1616, + 1622, 1858, 1859, 1424, -1912, 1863, 1718, 1775, 1084, 1070, + -2110, 3390, 3696, 1300, 1301, 1300, 1301, 1885, 3838, 2238, + 3476, 4510, 1877, 1878, 3144, 3713, 1409, 1528, 1141, 1356, + 1179, 1747, 1747, 1338, 1084, 2733, 1776, 4117, 574, 1300, + 1301, 1300, 1301, 3747, 2089, 618, 2515, 543, 1218, 148, + 1747, 2130, 1300, 1301, 4045, 1747, 2192, 537, 1271, 3540, + 538, -1912, 4773, 1300, 1301, 4777, 3610, 2428, 2361, 4046, + 3296, 947, 947, 2356, 1568, 947, 2242, 3515, 4091, 2866, + 2477, 2242, 4488, 4047, 4338, 4182, 4659, 2523, 3902, 2443, + 2713, 4149, 3717, 3169, 1028, 4205, 2955, 578, 2248, 156, + 1578, 156, 4330, 950, 1300, 1301, 1777, 947, 3718, 158, + 3211, 4334, 3903, 2714, 1644, 2524, 4489, 2362, 1337, 896, + 3541, 4344, 2956, 701, 908, 2947, 541, 1569, 536, 3553, + 1300, 1301, 3297, 3409, 149, 1987, 3522, 2193, 2242, 3056, + 1219, 1665, 575, 1666, 1667, 1668, 1669, 2335, 544, 619, + 1272, 1945, 2516, 896, 2252, 2452, 3104, 1300, 1301, 2252, + 2359, 1300, 1301, 1477, 3839, 1748, 1770, 3335, 4091, 1400, + 291, 1142, 293, 2201, 2239, 4251, 3714, 1529, 1789, 2025, + 2068, 3477, 4092, 1347, 1834, 1778, 4842, 4838, 1886, 1838, + 1525, 1085, 1086, 1239, 3697, 1977, 42, 2112, -2596, 673, + 1453, 4511, 4150, 1937, 1118, 3428, 1940, 3618, 1071, 1425, + 673, 1302, 1528, 4179, 1303, 2133, 2252, 1085, 1086, 3627, + 667, 903, 3532, 3533, 3534, 667, 699, 48, 915, 4367, + 4807, 1119, 1151, 3643, 3644, 1302, 3839, 1592, 1303, 1614, + 1300, 1301, 958, 2778, 3609, 3657, 4317, 1300, 1301, 4458, + 918, 1719, 1302, 1722, 667, 1303, 1714, 2323, 2131, 4750, + 1336, 2164, 1020, 1940, 2167, 916, 1302, 3786, 2170, 1303, + 2173, 4771, 1078, 959, 1302, 1988, 3870, 1303, 1302, 3929, + 3874, 1303, 1302, 1337, 2750, 1303, 3611, 4318, 4294, 2650, + 1553, 2064, 1100, 1174, 907, 2751, 1336, 1677, 2188, 2189, + 2190, -1616, 699, 1678, 3850, 699, 3336, 1645, 947, 1079, + 1302, 2246, -2596, 1303, 2949, 667, 545, 1130, 906, 3430, + 1988, 1302, 3429, 1302, 1303, 3293, 1303, 3594, 3916, 2749, + 3923, 2118, 1910, 667, 1158, 1302, 1970, 2805, 1303, 2026, + 2500, 1602, 3879, 657, 58, 1161, 1758, 1759, 4093, 1931, + 1943, 3005, 1302, 3170, 657, 1303, 2500, 657, 2874, 2875, + 1130, -1576, 1529, 1302, 2479, 4094, 1303, 1185, 3031, 1969, + 1720, 612, -484, 1814, 1404, 2482, 3744, 2090, 2485, 1055, + 615, 1827, 1302, 1829, 1302, 1303, 4722, 1303, 703, 3607, + 4854, 1720, 3195, 3564, 2329, 1842, 1843, 1844, 63, 2689, + 2317, 3931, 1779, 1848, 2870, 2871, 3439, 1968, 1302, 867, + 1302, 1303, 1573, 1303, 3345, 1350, 2872, 3939, 3940, 3263, + 1240, 1302, 984, -937, 1303, -580, 1300, 1301, 1300, 1301, + 3014, 948, 1302, 3822, 4048, 1303, 1055, 1947, -1616, 2218, + 3015, 3148, 1981, 3095, 2031, 613, 2042, 4207, 4324, 3195, + 2184, 3209, 4212, -2678, 1440, 4094, 4095, 3743, 4225, 1300, + 1301, 4653, 1941, 4655, 4656, 1304, 4048, 3612, 1080, 4507, + 3721, 4341, 1780, 1302, 2476, 4248, 1303, 3359, 3757, 3145, + 1410, 1297, 1720, 1299, 2349, -2678, 3860, 2465, 3264, 1304, + -581, 1333, 3210, 1304, 4048, 579, 3359, 2745, -1616, 1302, + 2565, 3431, 1303, 4302, 4311, 2373, 1304, 2883, 1342, 532, + 1344, 4181, 1346, 1130, 532, 2027, 667, 898, 532, 1941, + 1304, 4323, 1646, 3197, 1385, 2429, 1302, 2028, 1304, 1303, + 1302, 1124, 1304, 1303, 1087, 1343, 1304, 1720, 2578, 2453, + 1348, 2247, 2065, 2357, 1353, 1349, 2444, 2049, 2091, 1354, + 1882, 1883, 2092, 4660, 3348, 2374, 1958, 4134, 4151, -1939, + 1279, 1414, 1300, 1301, 1304, 1579, 1533, 1427, 1537, 4512, + 2402, 1540, 1545, 3605, 2406, 1304, 657, 1304, 1431, 4743, + 4744, 154, 1437, 4747, 1723, 4137, 4446, 1566, 2152, 1304, + 2334, 3030, 3452, 3410, 3107, 1882, 2393, 3857, 2430, 3921, + 1300, 1301, 4125, 4126, 1401, 1462, 1304, 2432, 2433, 1302, + 1124, 1472, 1303, 667, 657, 3938, 1302, 1304, 3699, 1303, + 657, 2168, 3546, 3547, 2348, 1649, 1649, 4048, 681, 1146, + 3863, 3012, 3937, 3352, 4761, 3354, 1304, 4169, 1304, 1926, + 4174, 4175, -1616, 1455, -2672, 1420, 3505, 4206, 3998, 2578, + -2655, 1410, 3430, 2626, 2449, 2450, 2360, 2248, 4319, 4542, + 2058, 1020, 1304, -2596, 1304, 1552, 4348, 667, 954, 667, + -1939, 3064, 667, 667, 4799, 1304, 3862, 2213, 2214, 1981, + 2980, 2981, 3387, 3388, 1647, 1628, 1304, 1603, 667, 2217, + 1300, 1301, 898, 3394, 3395, 3272, 3607, -2596, 2662, 3607, + 3607, 3750, 4796, 3892, 3411, 3412, 1724, 4723, 2113, -2659, + 1725, 4183, 1300, 1301, 1593, 4054, 4751, 1378, 1300, 1301, + 3437, 1726, 48, 2815, 4057, -2799, 4303, 1304, 2267, 3869, + 2469, 657, 3935, 3873, 2816, 4510, 4304, -2658, 2226, 4272, + 2335, 3163, 699, 3824, 699, 3449, 3450, 2750, 3215, -2656, + 2877, 4316, 3242, 1304, 1300, 1301, 1641, -2751, 2751, 1640, + -2657, 4878, 682, 584, -2662, 1300, 1301, 1664, 1317, 564, + 1673, 683, 684, 4278, 1747, 685, 1432, 4142, 2074, 2265, + 1304, 3367, 1511, 2579, 1304, 1693, 4143, 1642, 1643, 2400, + 1300, 1301, -2513, 2658, 657, 1302, 1317, 1302, 1303, 2246, + 1303, 1815, 2364, 532, 1816, 3241, 657, 2546, 3774, 1465, + 898, 588, 2805, -2597, 2749, 2511, 2224, 2087, 3530, 2087, + 2087, 3566, 1604, 2251, 2685, 657, 1738, 2123, 1302, 1697, + 1677, 1303, 4642, 3091, 3092, 1740, 1678, 3580, 2874, 2875, + 1448, 2573, 2574, 1449, 2786, 2159, 1605, 607, 2928, 710, + 2701, 1892, 2634, 1727, 1940, 1300, 1301, 4543, 1927, 947, + 2683, 3049, 616, 1304, 3751, 2885, -2751, 3866, 1467, 2251, + 1304, 1512, 4768, 2688, 3550, 1240, 2691, 2692, -1939, 2322, + 3273, 1928, 2347, 4352, 291, 2871, 293, 1629, 1930, 2365, + 1240, 3036, 2789, 63, 2579, 2553, 2872, 4684, 968, 2266, + 2979, 2071, 896, 964, 1556, 2160, 3149, 711, 1862, -1939, + 1300, 1301, 4723, 4197, 2470, 4511, 4198, 1300, 1301, 1300, + 1301, 4349, 3321, 4190, 4144, 632, -2672, -2597, 2984, 2985, + 2329, 1302, -2655, 1971, 1303, 2870, 1433, 2627, 1505, 1876, + 691, 2484, 3607, 3752, 955, 2524, 4217, 4218, 4219, 1701, + 4305, 1728, 667, 156, 4222, 2663, 4879, 2719, 2720, 3581, + 4544, 4233, 2580, 1557, 1320, 2251, -2513, 1902, 4268, 1302, + 1300, 1301, 1303, 2090, 2731, 4195, 4196, 1300, 1301, 1875, + 2866, 1421, 3367, 2743, 2744, 3367, 3367, 1621, 1657, 667, + 1450, -2659, 1320, 1558, 1934, 1300, 1301, 1300, 1301, 1300, + 1301, 2124, 3367, 667, 1300, 1301, 2040, 134, 667, 657, + 1300, 1301, 969, 3045, 1720, 2075, 4221, 1553, 1970, -2658, + 3367, 4226, 4229, 4231, 4232, 1594, -1939, 635, 2585, 4752, + 2502, -2656, 2554, 1240, 667, 2072, 1300, 1301, 2978, 2242, + 712, 4670, -2657, 3351, 3726, 1929, -2662, 988, 2988, 1304, + 1133, 1304, 667, 156, 2859, 2860, 2861, 2862, 4756, 1302, + 667, 699, 1303, 1472, 965, 1999, 3727, 2002, 2367, 3491, + 2370, 3441, 657, 2580, 1300, 1301, 1500, 896, 4700, 4701, + -1939, 1302, 1304, 4899, 1303, 2242, 1875, 1302, 2020, 970, + 1303, 2090, 4421, 2161, 3156, 1300, 1301, 1300, 1301, 657, + 2247, 2371, 3280, 3746, 1134, 2594, 3551, 667, 3662, 2008, + 1941, 1300, 1301, 1472, 4616, 636, 4617, 2252, 4739, 657, + 4583, 658, 657, 1302, 4753, 3187, 1303, 2471, 136, 4306, + 2577, 3482, 3483, 3484, 1302, 1300, 1301, 1303, 1690, 1691, + -2751, 3582, 2507, 2472, 2091, 2248, 4675, 4414, 667, 667, + 4416, 3802, 2070, 1961, 1190, 3804, 4754, 4676, 2323, 1302, + 3753, 2088, 1303, 2252, 1940, 699, 2215, 1300, 1301, 2595, + 4184, 2109, 1300, 1301, 1300, 1301, 1300, 1301, 667, 2114, + 709, 2242, 1720, 2334, 1735, 1304, 2242, 4456, 667, 3025, + -208, 863, 3542, 2876, 4648, 896, 1135, 638, 2596, 4346, + 2134, 1020, 911, 1646, 2372, 2156, 2669, 2158, 1559, 4783, + -1219, 532, 532, 532, 657, 532, 657, 4355, 2219, 4357, + 4173, 4644, -2140, 1304, 1302, 2165, 532, 1303, 667, 2119, + 898, 4582, 532, 4851, 4852, 2228, 2555, 2153, 2154, 2155, + -1711, 2157, 2379, 2706, 2183, 3188, 2605, 2710, 2711, -2751, + 3583, 1817, 2166, 657, 1818, 3616, 3616, 2120, 2172, 2252, + 4536, 4537, 2091, 4422, 3648, 663, 2092, 2171, 2597, 3085, + 1327, 1328, 1329, 1330, 1331, 1332, 2335, 2749, -2597, 1302, + 601, 2877, 1303, 2087, 4377, -2292, 1302, 2394, 1302, 1303, + 987, 1303, 912, 2697, 4040, 3000, 667, 667, 2038, 3704, + 1329, 1330, 1331, 1332, 1175, 2630, 1940, 3625, 1300, 1301, + 1146, 1940, -2597, 1304, 2223, 4347, 1300, 1301, 136, 667, + 2220, 2221, 2222, 657, 3342, 1677, 4538, 3894, 2149, 2150, + 4732, 1678, 2380, 3655, 3656, 1304, 667, 1055, 4354, 1302, + 3649, 1304, 1303, 2039, 3131, 947, 1302, 2598, 1560, 1303, + 2277, 1608, 3750, 1275, 2386, 152, 153, 3137, 2275, 657, + 2391, 661, 4585, 913, 1302, 1647, 1302, 1303, 1302, 1303, + 1561, 1303, -2140, 1302, 657, 4677, 1303, 1304, 2250, 1302, + 2394, 1969, 1303, 4378, 1176, -1912, 3086, 4074, 1304, 688, + 1300, 1301, -2140, 1211, 1212, 1185, 2392, 2346, 1300, 1301, + 4531, 3353, 1300, 1301, 1945, 1302, -2799, 2396, 1303, 1136, + 3552, 1562, 3448, 1304, 4713, 2870, 4267, 3704, 2121, 1968, + 1941, 3138, 1300, 1301, 2600, 4379, 988, 4510, 2280, 1300, + 1301, 1609, 2408, 1300, 1301, -2292, 679, 1440, 1300, 1301, + 3650, 4586, 2704, 1302, 2631, 1276, 1303, 687, 1875, 2490, + 3122, 2281, 2486, 1300, 1301, -2292, 3518, 2491, 1300, 1301, + 4714, 2632, 2242, 2490, 1302, 691, 1302, 1303, 1282, 1303, + 2495, 3560, 291, 2633, 293, 1137, 993, 1138, 1304, 1055, + 1302, 1300, 1301, 1303, 1055, 3222, 1240, 2401, 3225, 3226, + 2983, 3228, 3125, 3290, 3231, 3232, 4525, 2415, 3235, -2317, + 1300, 1301, 2503, 3244, 1302, 1300, 1301, 1303, 3248, 3249, + 3250, 3251, 3252, 3126, 3510, 3751, 3256, 3257, 2910, 3259, + 3139, 1300, 1301, 2915, 692, 3268, 3269, 3270, 3271, 1394, + 3030, 3275, 3276, 1304, 3278, 1511, 1302, 2922, -1712, 1303, + 1304, 1302, 1304, 1302, 1303, 1302, 1303, 2468, 1303, 3127, + 2564, 3844, 2419, 1300, 1301, 2634, 704, 1981, 706, 2420, + 1981, 2422, 1941, 707, 2599, 4469, 3305, 1941, 1300, 1301, + 853, 2937, 1300, 1301, 1300, 1301, 291, 4123, 293, 1300, + 1301, 2493, -1940, 1300, 1301, 4470, 4715, 1940, 2247, 2492, + 657, 1300, 1301, 1304, 3755, 3474, 3845, 857, 3347, 3140, + 1304, 1898, 657, 667, 859, 1300, 1301, 4511, 3376, 870, + 994, 904, 2423, 1300, 1301, 896, 657, 2734, 1304, 2427, + 1304, 1385, 1304, 2524, 1512, 2006, 1385, 1304, 951, 2518, + 2620, 2527, 2527, 1304, 2527, 920, 2366, 3026, 2994, 2445, + 2528, 2528, 3689, 2528, 1124, 1875, 3392, 699, 3616, -2317, + 147, 953, 3393, 3661, 962, 3076, 973, 596, 2551, 1304, + 1300, 1301, 1427, 898, 667, 596, 3195, 657, 2657, -2317, + 2635, 657, 3729, 4730, 4731, 1300, 1301, 1302, 3404, 2997, + 1303, 537, 1300, 1301, 538, 1302, 975, 995, 1303, 947, + 965, 1462, 2576, -1940, 1068, 1300, 1301, 1304, 667, 667, + 657, 657, 657, 3195, 3195, 947, 947, 537, 1300, 1301, + 538, 1075, 2527, 2527, 2527, 1240, 667, 4142, 1304, 2334, + 1304, 2528, 2528, 2528, 2876, 1097, 4143, 2735, 3241, 1098, + -2437, 667, 2572, 1019, 1304, 148, 1101, 3414, 1099, 3415, + 1300, 1301, 2636, 3195, 1109, 2640, 2629, 3889, 1024, 1300, + 1301, 1580, 1111, 4068, 657, 1502, 2363, 1337, 1304, 1302, + 1055, 2877, 1303, 1112, 1020, 4213, 1440, 1302, 4214, 667, + 1303, 1302, 1113, 1463, 1303, 1114, 2381, 1681, -1826, 152, + 153, 1300, 1301, 1581, 907, 1899, 1020, 1300, 1301, 3569, + 1304, 1302, 1300, 1301, 1303, 1304, 1140, 1304, 1302, 1304, + 1121, 1303, 1302, 3748, 1146, 1303, 2681, 1302, 2382, 537, + 1303, 3753, 538, 2390, 1149, 2404, 3141, 2405, 1300, 1301, + 149, 2963, 1302, 1159, 4800, 1303, 1180, 1302, -1826, 2690, + 1303, 3576, 3776, 3777, 2341, 1163, 1582, 2675, 657, 2678, + 3571, 1583, 947, 1941, 3867, 3498, 3498, 3498, 3498, 3512, + 1302, 1167, 2682, 1303, 1774, 3791, 1337, 1300, 1301, 589, + 2630, 1300, 1301, 1774, 4144, 1300, 1301, 2708, 532, 1302, + 1187, 532, 1303, 1340, 1302, 1188, 4832, 1303, 2732, 4834, + -2437, 1251, 3880, 3881, 1300, 1301, 1300, 1301, 1189, 3799, + 1302, 1300, 1301, 1303, 2709, 2736, 1300, 1301, 1612, 3379, + -2437, -1940, 1191, 1270, 1617, 1618, 2737, 1300, 1301, 3882, + 624, 4850, 2819, 2738, 1533, 1875, 1283, 1284, 1775, 2722, + 1192, 657, 1302, 657, 3313, 1303, 1533, 1775, 2729, 2730, + 4627, 1304, -1940, 2951, 2368, 2369, 1193, 1302, 746, 1304, + 1303, 1302, 1196, 1302, 1303, 2585, 1303, 1776, 1302, 2409, + 1197, 1303, 1302, 4628, 1198, 1303, 1776, 2413, 1199, 2585, + 1302, 625, 1200, 1303, 1875, 1201, 3638, 2586, -1826, 1028, + 1009, 947, 3156, 1202, 1302, 3212, 947, 1303, 1203, 3647, + 2225, 134, 1302, 996, 997, 1303, 999, 1978, 1001, 3930, + 1979, 1204, 2879, 1980, 1584, 2882, 1307, 1205, 1900, 2631, + 1389, 1341, 751, 1092, 1093, 1002, 1094, -1144, 1095, 1206, + -1144, 1207, 2739, 1304, 1901, 667, 2632, 1777, -1826, 2976, + 1208, 1304, 1209, 3944, 2884, 1304, 1777, 667, 2633, 1302, + 1970, 2414, 1303, 1308, 3948, 1300, 1301, 3950, 626, 2418, + 2387, 1337, 1087, 2421, 1302, 1304, 1055, 1303, 896, -1940, + 2999, 1302, 1304, 1440, 1303, 1213, 1304, 1981, 1981, 1981, + 1215, 1304, 1345, 2424, 1302, 4591, 3158, 1303, 1216, 1585, + 2436, 1217, 2587, 2588, 2455, 1220, 1304, 1302, 2631, 3356, + 1303, 1304, 4737, 1390, 135, 1309, 2587, 2588, 1391, 2395, + 1337, 3238, 4736, 1357, 3380, 2632, 1778, 1310, 3934, 3386, + 1221, 765, 136, -1940, 1304, 1778, 3202, 3101, 2740, 1302, + 2634, 1222, 1303, 1124, 1124, 1124, 3521, 2322, 1302, 1223, + 667, 1303, 3389, 1304, 2065, 2065, 2065, 1224, 1304, 3447, + 2589, 1225, 1392, 1586, 2890, 2280, 2397, 1337, 2398, 1832, + 3535, 3396, 1226, -2794, 1304, 2995, 3400, 1227, 1393, 667, + 1302, 667, 667, 1303, 1228, 2474, 1302, 2322, 2281, 1303, + 1229, 1302, 3401, 4515, 1303, 2410, 1337, 4522, 1386, 3082, + 1230, 947, 1233, 137, 1234, 667, 1304, 1235, 667, 1388, + 781, 947, 947, 947, 947, 1241, 1311, 1302, 1723, 1242, + 1303, 1304, 1243, 3852, 3402, 1304, 1124, 1304, 2411, 1337, + -1912, 1244, 1304, 3886, 2876, 3318, 1304, 3578, 1395, 3403, + 3323, 3358, 1397, 3405, 1304, 3408, 3890, 3043, 3331, 3332, + 3413, 2412, 1337, 1398, 3339, 2635, 1302, 1245, 1304, 1303, + 1302, 2087, 3416, 1303, 1302, 1406, 1304, 1303, 3212, 2416, + 1337, 1875, 1246, 3069, 1247, 4264, 3608, 3072, 1248, 3518, + 3615, 2594, 1587, 1302, 3418, 1302, 1303, 138, 1303, 2986, + 1302, 667, 667, 1303, 3353, 1302, 993, 1249, 1303, 1252, + 667, 1253, 2657, 1533, 2965, 1337, 1302, 2242, 2088, 1303, + 2088, 2088, 2894, 1304, 1254, 1317, 3010, 3011, 3205, 3206, + 627, 1588, 3637, 2296, 2297, 3239, 3458, 2636, 1304, 3375, + 2369, 3118, 1774, 3120, 3102, 1304, 3459, 667, 2895, 2310, + 1724, 3240, 628, 1779, 1725, 2595, 3420, 2242, 1304, 1255, + 3460, 1256, 1779, 3422, 1257, 1726, 3378, 1337, 1020, 1258, + 4065, 1304, 3461, 3462, 3463, 1875, 3423, 3117, 4515, 4286, + 3406, 1337, 1259, 3661, 2596, 4522, 1409, 78, 629, 3424, + 1876, 3464, 3524, 3525, 3238, 4497, 4498, 3528, 3529, 1260, + 3161, 3174, 3175, 1304, 2896, 532, 1775, 2897, 1028, 1009, + 657, 657, 1304, 667, 667, 2898, 2636, 1261, 1316, 3811, + 1337, 3796, 1407, 4757, -679, 3832, 3833, 1262, 139, 1317, + 4826, 3166, 3501, 3502, 2899, 3189, 2323, 810, 2280, 3212, + 994, 3641, 1940, 1263, 1304, 291, 1264, 293, 630, 1265, + 1304, 3213, 3847, 3848, 2597, 1304, 4590, 3544, 4032, 4033, + -679, 2281, 3797, 1266, 3198, 3199, 3200, 3201, 3798, 3203, + 3204, -1616, 1408, 4063, 1267, 3212, 2323, 1268, 2312, 2313, + 1269, 1304, 1940, 1273, 4287, 4288, 1274, 3213, 1277, 4289, + 4290, 4291, 3274, 3151, 1278, 2296, 2297, 1727, 947, 4067, + 1317, 140, 4240, 4034, 4035, 3190, 1415, 3289, 4036, 4037, + 1281, 2310, 2324, 1312, 1313, 1314, 1285, 995, 1286, 3303, + 1304, 1320, 1287, 3312, 1304, 1417, 4366, 1288, 1304, 1289, + -1616, 1317, 1290, 2598, 1339, -2794, 1419, 2900, 4073, 4501, + 1423, 4900, 4075, 1446, 1795, 1441, 4076, 1304, 1456, 1304, + 1474, 2486, 2324, 4055, 1304, -679, 1444, 2594, 1476, 1304, + 3664, 640, -1616, 1492, -1616, 4077, 141, 4078, 3319, 3320, + 1304, 3322, 4351, 3324, 3325, 3326, 3327, 3328, 3329, 3330, + 1494, -1616, 3333, 3784, 3191, 3338, -1616, 1495, 4447, 3341, + 1497, -679, 1496, 1317, 1500, 1728, -687, 640, 1504, 2280, + 4043, 4052, 1505, -1616, 4393, 1865, 1866, 1124, 1509, 3478, + -1616, 3465, 4515, 4522, 3240, 1055, 1514, -1616, 2065, 4069, + 1337, 2595, 2281, 4083, 1337, 1320, 1523, -1616, 1546, 3466, + 1550, -2794, 1551, 2594, 3626, 2280, 3628, 1318, 3812, -1616, + 2312, 2313, 2901, 3639, -1616, 4084, 4085, 1799, 1555, 4394, + 2596, 4102, 4103, -1616, 1574, 1055, 1575, 3652, 2281, 4395, + 1319, 4236, 4237, 1576, 3663, 3665, 1019, 2325, 4339, 4340, + 1577, 1774, 4343, 4340, 1322, 1323, 2620, 3682, 3684, 3686, + 595, 1024, 1596, 3687, 3665, 1600, 3922, 4427, 4428, 3925, + 3926, 4496, 3529, 4509, 4340, 1601, 1320, 2595, 1941, 2417, + 4540, 4541, 1615, 1385, 1606, 2518, 1616, 2325, 4396, 1623, + 667, 4548, 4549, 3490, 1414, 667, 667, 667, 4550, 4549, + 2597, -1616, 657, 3735, 3738, 3741, 2596, 1320, 1624, 3496, + 4593, 4594, 1626, 2863, 1631, 1775, 4649, 3848, 1941, 4681, + 4682, 1638, 3467, -1616, 4366, 3043, 667, 152, 153, 1674, + 2599, 1800, 1876, -1616, 4199, 1803, 1680, 4202, 4203, 3214, + 3468, 1682, 1804, 1684, 3189, 4204, 4209, 1240, 1687, 4210, + 1688, 667, 667, 667, 4215, -679, 1692, 667, 1322, 1323, + 4711, 3529, 1695, 4397, 2088, -1616, 3045, 2902, 4220, 1320, + 1696, 4384, 4224, 1704, 4227, 1705, 2597, 4685, 1706, 2598, + 1732, 3192, 4712, 3529, 4729, 3206, 4384, 1715, 291, 3559, + 293, -679, 4471, 996, 997, 998, 999, 1000, 1001, 1733, + 4472, 1743, 3469, 1741, 1321, 1325, 1326, 1327, 1328, 1329, + 1330, 1331, 1332, 1335, 3190, 1002, -1616, 2999, 3759, 3470, + -856, 4746, 4340, 1805, 3806, 3558, 2530, 4473, 2531, 1322, + 1323, 4270, 4527, 1747, 667, 3826, 3827, 2903, 3589, 532, + -1616, 3592, 1773, 3814, 4748, 4340, 1754, 657, 4749, 4340, + 657, 3289, 1784, 642, 1820, 2598, 4781, 4782, 4797, 4340, + 1322, 1323, 4798, 4340, 1440, 3586, 2904, 4801, 4340, 4804, + 3848, 1875, 4815, 4816, 3760, -1912, 1324, 3761, 1831, 4589, + 1832, 1807, 4833, 4340, 719, 3762, 1856, 3289, -1616, 642, + 4847, 3731, 1833, 3191, 1873, 3624, 3622, 3289, 1884, 2594, + 1893, 3634, 3681, 3633, 3763, 1909, 2609, 2610, 2611, 1325, + 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1915, 667, 3633, + 152, 153, 1322, 1323, 3654, 3658, 4398, 4889, 4890, 1876, + 3670, 3669, 1935, 4399, 4100, 4101, -679, 3671, 3672, 657, + 1936, 3635, 3636, -1616, 4449, 4104, 1944, 1949, 4592, 3764, + 4474, 3633, 1952, 1953, -1616, -1616, 1954, 1955, 3289, 3695, + 872, 1956, 1957, 2595, 3708, 1959, 1960, 4360, 1972, 3668, + 1973, 4168, -679, 4400, 746, -1616, 2594, -1616, 1974, 3683, + 4387, 3633, 1327, 1328, 1329, 1330, 1331, 1332, 1975, 4391, + 2009, 1410, 2596, 2005, 2014, 2017, 2599, 947, 4413, 2019, + 3707, 2036, 2022, 4415, -1616, -1616, 2023, 3765, -1616, -1616, + 2044, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1440, + 3742, 2045, 2594, 1808, 3745, 3685, 2046, 2047, -2488, 4475, + 2053, 750, 2056, 2061, 2060, 2062, 2102, 2063, 751, 1810, + 2595, 2104, 2105, 639, 2106, 1525, 4401, 2115, 4476, 2532, + 873, 2110, 2138, 4609, 4610, 2146, 4612, 2147, 1317, 2174, + 2175, 2151, 2597, 2533, 2176, 2177, 2181, 756, 757, 2596, + 2179, 4477, 2599, 1325, 1326, 1327, 1328, 1329, 1330, 1331, + 1332, 2180, 875, 2197, 2202, 2207, 2595, 4702, 2211, 2216, + 2227, 2249, 1409, 2270, 2269, 2284, 1875, 2287, 876, 2285, + 3673, 2288, 3674, 2229, 4589, 4564, 2320, 2336, 1533, 3766, + 3192, 2338, 3767, 2344, 2377, 2596, 2350, 2230, 3810, 4662, + 1990, 2352, 2353, 2354, 1991, 2534, 3118, 2535, 2376, 4385, + 4386, 640, 2378, 2383, 2384, 2385, 1992, 765, 2388, 2597, + 2394, 2598, 4389, 2403, 4259, 2399, 3675, 2460, 4758, 4392, + 2407, 1317, 2425, 2426, 4402, 2431, 2463, 2434, 2446, 880, + 4417, 4418, 3117, 2435, 2467, 2447, 2448, 1332, -1295, -886, + 3676, 2473, 2483, 2505, -1441, 1218, 2495, -1616, 3043, 2498, + 2504, 4708, 1271, 4709, 4710, 2597, 4572, 881, 1275, 3768, + 2521, -2133, 4579, 882, 2522, 2552, 947, 1720, 2563, 3069, + 3859, 776, 2558, 3861, 2566, 667, 3677, 2569, 2593, 667, + 1533, 4553, 4641, 2601, 2606, 780, 781, 2607, 2598, 2536, + 2608, 2624, 2613, 4597, 4598, 2625, 2639, 4601, 4602, 4603, + 4604, 1502, 2643, 883, 2995, 4393, -1616, 2645, 2649, 2659, + 2651, 1020, 1020, 4820, 2653, 2660, 2661, 2680, 1876, 2666, + 1055, 2664, 2665, 3899, 1320, 2676, 2667, 3397, 3910, 2668, + 2684, 2693, 2694, 4635, 2598, 2696, 4478, 657, 2698, 947, + -1616, 2699, 2524, 2716, 2537, 2717, 2721, 2723, 2728, 3917, + 4394, 1317, 3891, 2724, 4687, 1875, 2231, -1616, 2725, 3924, + 4395, 2726, -1616, 4885, 2727, 2630, 1875, 3927, 3633, 2820, + 1875, 3289, 2824, 2825, 4893, 1875, 2829, 2831, 4885, 2857, + 2834, 667, 4820, 4893, 2865, 3633, -1616, 3289, 3289, 2835, + 4661, 2858, 4663, -1616, 2836, 2837, 2630, 3769, 2838, 2839, + 2840, 3289, 3633, -1616, 2841, 2842, 2843, 2844, 2845, 4396, + 2846, 2847, 2848, 3633, 2849, -1616, 3633, 1320, 3936, 2850, + -1616, 4698, 4699, 2880, 2893, 2917, 3770, 3942, 2599, -1616, + 4707, 2851, 2232, 2852, 3954, 2853, 1993, 2854, 2855, 2856, + 3953, 2884, 2888, 657, 2918, 4482, 2491, 2916, 4008, 3017, + 2974, 3021, 3022, 4009, 2929, 548, 886, 2233, 2930, 2942, + 532, 2964, 2973, 2982, 1994, 2992, 2991, 3019, 4024, 641, + 3023, 3003, 1995, 3032, 3009, 3312, 3008, 1322, 1323, 3678, + 802, 3020, 2229, 3028, 4361, 3033, 4017, 4362, 3046, 3034, + -143, 3735, 3050, 3738, 947, 3741, 2230, -1616, 808, 3047, + 1300, 1301, 889, 810, 2631, 2599, 811, 4870, 2031, 291, + 3051, 293, 3052, 642, 549, 890, 1996, 3059, 3074, -1616, + 2234, 2632, 3073, 3679, 3077, 3078, 3079, 3090, 3083, -1616, + 3084, 3099, 3097, 2633, 3098, 2631, 3111, 3112, 3114, 4277, + -2726, -856, 3123, 3814, 550, 4567, 3124, 1320, 2123, 4154, + 2124, 2599, 2632, 3146, 3133, 3159, 4793, -1750, 3160, 3162, + 557, -1616, 3167, 3173, 2633, 4363, 4364, 1997, 3185, 3186, + 1322, 1323, 3212, 2538, 2539, 2540, 3233, 3224, 3229, 3230, + 3234, 551, 3236, 3237, 3243, 4108, 3245, 3246, 3247, 1478, + 4113, 3254, 3255, 3260, 3261, 1876, 643, 893, 3294, 1479, + 3266, 3267, 3306, 4089, 644, 3277, 1791, 1792, 1793, 1794, + 1795, 3346, -1616, 1480, 3307, 2634, 2235, 3315, 3316, 894, + 3350, 895, 3317, 2345, 4482, 1481, 1482, 1483, 552, 1326, + 1327, 1328, 1329, 1330, 1331, 1332, -1616, 4127, 3370, 3372, + 3359, 152, 153, 3364, 1484, 3373, 2634, 4398, 3374, 3381, + 667, 3425, 4158, 4158, 4399, 3382, 3455, 3289, 4896, 3440, + 719, 947, 3435, 3457, 3436, 2231, 4170, 947, 3446, 3289, + 3289, 3444, 3451, 3454, 3480, 3289, 3479, 3633, 4862, 3487, + 4141, 3289, 3485, 3492, -1616, 3503, 1448, 3507, 3504, 1876, + 3514, 3513, 1533, 3633, 4400, 657, 3520, 3523, 3526, 3531, + 1322, 1323, 3545, 4877, 3549, 988, 3561, 3562, 3565, 3572, + 1796, 1797, 1798, 1799, 3573, 3574, 3163, 3585, 4297, 3577, + 3588, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 2786, + 2635, 3619, 3640, 3642, 3704, 2756, 3709, 2757, 3716, -1616, + 3723, 2232, 3724, 4360, 3728, 4453, 4454, 4455, 3779, 3730, + 746, -1616, 3731, 3775, -69, 3756, 3780, 3787, 3788, 553, + 3800, 2635, 2452, 152, 153, 4246, 2233, 4401, 3430, -826, + -826, -1616, 2759, -1616, 3817, 3818, 3819, 3820, 3835, 3837, + -826, 3841, 2088, 3843, 3849, 2585, 3871, 1410, 3851, 3872, + 2762, 3900, 3905, 667, 3906, 3908, 3909, 3918, 2763, 4242, + -1616, -1616, 2636, 3911, -1616, -1616, 3913, 750, 3912, 3919, + 3920, 554, 3933, 3945, 751, 3941, 3952, 1800, 3951, 1801, + 1802, 1803, 4011, 4012, 4015, 2765, 4018, 4019, 1804, 2234, + 4022, 4023, 555, 2636, 4027, 4028, 4038, 3535, 4029, 1674, + 4031, 4041, 2766, 756, 757, 4042, 4043, 4044, 4053, 4056, + 4058, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 4070, + 4060, 4439, 4071, 4061, 1485, 4062, 4066, 4072, 4080, 1302, + 4081, 4086, 1303, 2771, 3072, 4402, 4088, 4098, 4107, 4325, + 4109, 4103, 1486, 3899, 4118, 4120, 3560, -1528, 4138, -1533, + 4130, 4135, 3899, 4139, 4153, 4155, 4164, 556, 4160, 4158, + 4176, 4177, 557, 4171, 4178, 4185, 4193, 4200, 4201, 1805, + 4216, 3292, 3289, 765, 4241, 4243, 4252, 4235, 4228, 4269, + 4368, 558, 4052, 4274, 4275, 2235, 4280, 4276, 4369, 657, + 4295, 4281, 4282, 4283, 4296, 4309, 987, 4374, 4299, 291, + 4300, 293, 4313, 4315, 4505, 4332, 559, 4333, 2775, 4335, + 4337, 4372, 4342, 4411, 4225, 2776, 4375, 4388, 4440, 4441, + 4442, 947, 560, 4444, 4448, 4482, 1806, 1807, 4445, 4450, + 2777, 4409, 4452, 4461, 4464, 4483, 4484, 776, 4485, 4419, + 4486, 4420, 4502, 4493, 4519, 4539, 4495, 4508, 4532, 4534, + 4556, 780, 781, 4535, 4437, 4545, 4557, 4558, 4436, 4559, + 4560, 4562, 4563, 4565, 4568, 4570, 4580, 4581, 4605, 4599, + 4600, 4596, 4608, 1487, 2756, 4611, 2757, 4613, 4614, 4618, + 4621, 4650, 4636, 4666, 4673, 4667, 4651, 2779, 4704, 4643, + 4647, 4462, 4674, 4654, 4657, 4664, 4668, 2657, 4679, 4686, + 657, 4689, 4692, 4468, 2778, 2753, 2780, -1699, -826, -826, + 4762, 2759, 851, 4763, 4745, 4764, 3691, 4784, 4771, -826, + 4785, 4786, 2753, 4787, 2754, 4792, 4794, 4789, 4795, 2762, + 4805, 4790, 4808, 4809, 4810, 1488, 4811, 2763, 2756, 4835, + 2757, 4812, 3699, 947, 4158, 4813, 4836, 945, 4843, 4840, + 4846, 4858, 1489, 4734, 4861, 4863, 4865, 945, 4867, 4869, + 4871, 2784, 4874, 2785, 2765, 4875, 4886, 3121, 947, 1808, + 2758, 2787, 4895, 1442, 1065, 2759, 4262, 3002, 1674, 3340, + 4260, 2766, 1595, 1304, 1809, 1810, 4626, 4261, 851, 3604, + 4336, 1658, 4728, 2762, 4625, 4830, 4828, 4504, 667, 1686, + 4683, 2763, 4254, 610, 1067, 2514, 2603, 3472, 4105, 1166, + 2833, 2764, 2771, 1734, 4409, 3497, 3037, 2263, 2494, 4646, + 3039, 3038, 4524, 3281, 3947, 2803, 3506, 4111, 2765, 3511, + 3842, 2034, 4573, 4577, 4691, 4552, 4463, 4770, 4114, 4860, + 4823, 4845, 1674, 2793, 2703, 2766, 802, 4607, 4345, 3279, + 4361, 3694, 4163, 4362, 2767, 3701, 4760, 4866, 3286, 851, + 3772, 4000, 3692, 4208, 808, 1876, 4547, 4234, 4561, 810, + 2770, 4769, 811, 4551, 4266, 3183, 2771, 3427, 291, 3803, + 293, 3805, 3801, 851, 4831, 648, 649, 2775, 851, 4802, + 4718, 4803, 4353, 4645, 2776, 4733, 4640, 3072, 4518, 3072, + 4390, 2794, 2795, 2796, 3283, 3693, 2773, 4703, 2797, 2777, + 1620, 1694, 2198, 4371, 3150, 3055, 2823, 4766, 2321, 4180, + 3489, 2575, 2276, 3176, 2798, 3029, 851, 2799, 3836, 3080, + 1637, 4363, 4364, 1510, 2972, 4566, 4158, 950, 4158, 4158, + 2646, 3813, 291, 851, 293, 4658, 2800, 1518, 2909, 4759, + 4634, 2775, 3453, 2907, 1830, 3103, 3868, 3106, 2776, 4824, + 3442, 4620, 4499, 4030, 2802, 4825, 2779, 4082, 4672, 1772, + 2989, 4188, 3807, 2777, 2204, 3539, 4328, 2205, 3688, 4584, + 4827, 3537, 4437, 4326, 4327, 2780, 4436, 851, 851, 851, + 851, 2878, 650, 2051, 2007, 3027, 4116, 2778, 4468, 851, + 3855, 3062, 3854, 3893, 4671, 4767, 1081, 2343, 667, 1186, + 2999, 1061, 3147, 655, 1670, 2686, 1064, 2687, 2508, 4727, + 2163, 4192, 4279, 2059, 3840, 4859, 3602, 4487, 657, 4868, + 2779, 4897, 1280, 4615, 1377, 4894, 2108, 4696, 4697, 4555, + 2784, 3858, 2785, 3132, 1022, 4741, 2466, 1023, 3888, 2780, + 2787, 3130, 2671, 2781, 4158, 4158, 3129, 2557, 4158, 4718, + 2069, 983, 2291, 4829, 1493, 4451, 2209, 3075, 3018, 4460, + 1998, 3473, 985, 3712, 1661, 851, 1499, 2212, 1106, 1107, + 1108, 4740, 1662, 4822, 0, 0, 4577, 0, 1663, 0, + 1876, 945, 945, 0, 0, 945, 0, 2783, 0, 0, + 0, 0, 0, 0, 2784, 0, 2785, 0, 0, 0, + 0, 667, 0, 0, 2787, 851, 0, 0, 0, 0, + 0, 0, 2793, 0, 0, 0, 0, 945, 1359, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4778, 4779, + 0, 0, 0, 0, 0, 0, 0, 0, 2292, 4158, + 2293, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2790, 0, 0, 0, 0, 4898, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2794, 2795, 2796, 0, 667, 4888, 2793, 2797, 0, 0, + 3312, 3312, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2798, 0, 0, 2799, 0, 2294, 0, + 2295, 2296, 2297, 2298, 2299, 0, 2300, 2301, 2302, 2303, + 2304, 2305, 2306, 2307, 2308, 2800, 2309, 2310, 2311, 0, + 0, 1360, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2802, 2794, 2795, 2796, 0, 0, 0, + 0, 2797, 0, 0, 0, 0, 0, 1361, 0, 0, + 1362, 0, 0, 0, 0, 0, 0, 2798, 0, 0, + 2799, 0, 0, 0, 0, 0, 0, 0, 0, 1876, + 0, 0, 0, 0, 0, 0, 667, 0, 0, 2800, + 1876, 0, 0, 4864, 1876, 0, 0, 1363, 0, 1876, + 0, 0, 0, 3177, 0, 0, 0, 2802, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1364, 0, 0, + 0, 0, 0, 291, 851, 293, 0, 851, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 851, 851, 0, 0, 0, 0, 0, 0, + 0, 0, 1791, 1792, 1793, 1794, 1795, 0, 0, 0, + 0, 0, 851, 851, 0, 0, 2312, 2313, 0, 0, 0, 851, 851, 851, 851, 851, 851, 851, 851, 851, - 851, 851, 851, 0, 0, 0, 1800, 0, 1801, 1802, - 1803, 851, 851, 0, 851, 851, 0, 1804, 0, 851, + 851, 851, 851, 0, 0, 0, 0, 0, 0, 0, + 1365, 851, 851, 0, 851, 851, 0, 0, 0, 851, 851, 0, 0, 851, 851, 851, 851, 0, 851, 851, - 851, 0, 0, 0, 0, 0, 0, 851, 851, 0, + 851, 0, 0, 0, 1366, 0, 0, 851, 851, 0, 851, 851, 851, 851, 851, 0, 0, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 0, 851, 0, 0, 851, 851, 0, 0, 0, 851, 0, 0, - 0, 851, 851, 851, 0, 0, 0, 0, 0, 2312, - 2313, 0, 0, 851, 851, 851, 0, 0, 0, 0, - 0, 0, 851, 0, 0, 0, 0, 0, 1805, 851, - 851, 851, 851, 0, 0, 0, 1359, 0, 0, 0, + 0, 851, 851, 851, 0, 0, 1796, 1797, 1798, 1799, + 0, 2752, 0, 851, 851, 851, 0, 2753, 0, 2754, + 0, 2755, 851, 0, 0, 0, 0, 0, 0, 851, + 851, 851, 851, 2756, 0, 2757, 0, 0, 0, 0, 851, 851, 851, 0, 851, 851, 851, 851, 851, 0, 851, 851, 851, 851, 851, 851, 851, 851, 0, 0, - 0, 851, 851, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2754, 0, 2755, 0, - 0, 0, 0, 0, 0, 1806, 1807, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, - 0, 0, 2751, 0, 2752, 0, 2753, 0, 0, 0, - -826, -826, 0, 2757, 0, 0, 0, 0, 2754, 0, - 2755, -826, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2760, 0, 0, 0, 0, 0, 0, 1360, 2761, - 0, 0, 0, 0, 0, 0, 0, 851, 1083, 0, - 2756, 0, 0, 0, 0, 2757, 2758, 0, 0, 0, - 0, 2759, 0, 851, 1361, 0, 2763, 1362, 0, 0, - 0, 0, 0, 2760, 0, 0, 0, 0, 0, 0, - 1674, 2761, 0, 2764, 0, 0, 0, 0, 0, 0, - 0, 2762, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1363, 0, 0, 0, 2763, 0, - 0, 0, 0, 2769, 0, 0, 0, 0, 0, 1165, - 0, 0, 1674, 0, 1364, 2764, 0, 0, 1808, 0, - 291, 0, 293, 2765, 2766, 0, 0, 0, 0, 0, - 0, 2767, 851, 1809, 1810, 0, 0, 0, 1194, 2768, - 0, 0, 0, -965, 0, 2769, 0, 851, 0, 0, - 0, 0, 0, 0, 0, 2770, 0, 0, 0, 0, - 0, 0, 0, 0, 851, 0, 0, 0, 0, 291, - 0, 293, 0, 0, 0, 2771, 1232, 1365, 2773, 0, - 0, 0, 0, 0, 0, 2774, 0, 0, 0, 0, - 0, 0, 0, 1250, 0, 0, 0, 0, 0, 0, - 2775, 1366, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 291, 0, 293, 0, 0, 0, 0, 2772, 0, - 2773, 851, 0, 0, 0, 0, 0, 2774, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1294, 0, 2775, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2777, 0, 0, - 0, 0, 0, 0, 0, 0, 2776, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2778, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2777, - 0, 0, 0, 0, 0, 0, 1367, 0, 0, 0, - 0, 0, 0, 0, 0, 1368, 0, 0, 2778, 0, - 0, 0, 2779, 0, 0, 1416, 0, 0, 0, 945, - 1369, 2782, 0, 2783, 0, 0, 0, 0, 0, 0, - 0, 2785, 0, 0, 0, 0, 0, 0, 1370, 2754, - 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2780, 0, 0, 0, 1447, 2781, 0, 0, 851, - 0, 0, 0, 2782, 0, 2783, 0, 0, 0, 0, - 2784, 0, 0, 2785, 0, 0, 2757, 0, 0, 0, - 0, 0, 1371, 0, 0, 1372, 0, 0, 0, 0, - 0, 0, 0, 0, 2760, 0, 0, 0, 0, 0, - 0, 0, 2761, 2791, 2786, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1373, 0, 0, 2787, 2788, - 2789, 2790, 0, 0, 0, 0, 0, 0, 0, 2763, - 0, 0, 0, 0, 537, 0, 0, 538, 0, 0, - 0, 0, 0, 1674, 0, 2791, 2764, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2792, 2793, 2794, 0, 0, 0, 0, 2795, 0, - 0, 0, 0, 851, 851, 851, 2769, 0, 0, 0, - 0, 0, 0, 0, 2796, 0, 0, 2797, 851, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2792, 2793, 2794, 2798, 0, 0, 0, - 2795, 0, 0, 0, 851, 0, 0, 0, 0, 0, - 851, 0, 0, 851, 2800, 851, 2796, 0, 0, 2797, - 0, 851, 0, 851, 851, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 293, 0, 0, 0, 2798, 0, - 0, 2773, 0, 2799, 0, 0, 0, 0, 2774, 0, - 0, 0, 0, 0, 1712, 1377, 2800, 1713, 0, 0, - 0, 0, 0, 2775, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1745, 1746, 0, 0, 0, 0, 0, 0, - 0, 1756, 1757, 0, 0, 1760, 1761, 1762, 1763, 1766, - 1767, 1768, 1769, 0, 0, 0, 0, 0, 0, 0, - 0, 1785, 1786, 0, 1787, 1788, 0, 0, 0, 1813, - 2777, 0, -965, 1822, 1823, 1824, 1825, 0, 0, 1828, - 0, 0, 0, 0, 0, 0, 851, 1836, 1837, 2778, - 1840, 1841, 0, 0, 0, 851, 0, 1845, 1846, 1847, - 0, 0, 1850, 1851, 1852, 1853, 1854, 1855, 0, 1857, - 0, 0, 1860, 1861, 0, 0, 0, 1864, 0, 0, - 0, 1867, 1871, 1872, 851, 0, 0, 0, 0, 0, - 0, 0, 0, 1879, 1880, 1881, 0, 1, 0, 2, - 0, 0, 1889, 0, 2782, 0, 2783, 0, 0, 1894, - 1895, 1896, 0, 0, 2785, 0, 0, 851, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 6, 0, 851, 0, - 0, 0, 1932, 8, 0, 0, 851, 0, 9, 10, - 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2791, 12, 0, 0, + 0, 851, 851, 0, 0, 2758, 0, 0, 0, 1367, + 2759, 2760, 0, 0, 0, 0, 2761, 0, 1368, 0, + 0, 0, 0, 0, 0, 0, 0, 1359, 2762, 0, + 0, 0, 0, 1369, 0, 0, 2763, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2764, 0, 0, 0, + 0, 1370, 0, 1800, 0, 1801, 1802, 1803, 0, 0, + 0, 0, 0, 2765, 1804, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1674, 0, 0, + 2766, 0, 0, 0, 0, 0, 0, 851, 0, 2767, + 2768, 0, 0, 0, 0, 1371, 0, 2769, 1372, 0, + 0, 0, 0, 851, 0, 2770, 0, 0, 0, -965, + 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, + 1083, 2772, 0, 0, 0, 0, 0, 0, 1373, 0, + 1360, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2773, 0, 0, 0, 1805, 0, 537, 0, 0, + 538, 0, 0, 0, 0, 0, 1361, 0, 0, 1362, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 293, + 0, 0, 851, 0, 2774, 0, 2775, 0, 0, 0, + 0, 1165, 0, 2776, 0, 0, 1363, 851, 0, 3955, + 3956, 0, 1806, 1807, 0, 3957, 0, 3958, 2777, 3959, + 3960, 0, 0, 0, 851, 0, 1364, 0, 0, 0, + 1194, 0, 291, 0, 293, 0, 3759, 0, 0, 0, + 0, 0, 2778, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1232, 0, + 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, + 0, 851, 0, 0, 0, 1250, 0, 0, 0, 1365, + 0, 0, 3961, 0, 2780, 3962, 0, 0, 2781, 0, + 0, 0, 0, 3963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1366, 0, 0, 0, 0, 0, 0, + 0, 0, 3964, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1294, 0, 0, 0, 0, 2782, 0, 0, + 3965, 0, 2783, 0, 0, 0, 0, 0, 0, 2784, + 0, 2785, 0, 0, 0, 1808, 2786, 0, 0, 2787, + 0, 0, 0, 0, 0, 3966, 0, 3967, 0, 0, + 1809, 1810, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3968, 3969, 0, 0, 0, 0, 0, 0, 945, + 2788, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2789, 2790, 2791, 2792, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1416, 1367, 0, + 0, 0, 0, 0, 0, 3970, 0, 1368, 0, 851, + 0, 2793, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1369, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3971, 0, 0, 1447, 0, 0, + 1370, 0, 0, 3972, 3973, 0, 3974, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2794, + 2795, 2796, 0, 0, 0, 0, 2797, 0, 0, 0, + 3975, 3976, 3977, 0, 1371, 0, 0, 1372, 0, 0, + 0, 0, 2798, 0, 0, 2799, 0, 0, 0, 3978, + 3979, 3980, 0, 0, 0, 0, 0, 3981, 0, 0, + 3982, 0, 0, 0, 2800, 0, 0, 1373, 0, 2801, + 0, 0, 0, 851, 851, 851, 3983, 3984, 0, 0, + 0, 0, 2802, 0, 0, 0, 0, 0, 851, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3985, 3986, 851, 0, 0, 0, 0, 0, + 851, 0, 0, 851, 0, 851, 0, 0, 0, 0, + 0, 851, 0, 851, 851, 0, 0, 3987, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -965, 0, + 0, 0, 0, 0, 0, 2756, 0, 2757, 0, 0, + 0, 0, 0, 0, 0, 1377, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -826, + -826, 0, 2759, 3988, 0, 0, 1712, 3989, 0, 1713, + -826, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2762, 3990, 0, 0, 0, 0, 0, 0, 2763, 0, + 0, 0, 0, 0, 1745, 1746, 0, 0, 0, 0, + 0, 0, 0, 1756, 1757, 0, 0, 1760, 1761, 1762, + 1763, 1766, 1767, 1768, 1769, 2765, 851, 0, 0, 0, + 0, 0, 0, 1785, 1786, 851, 1787, 1788, 0, 1674, + 0, 1813, 2766, 0, 0, 1822, 1823, 1824, 1825, 3991, + 0, 1828, 3992, 0, 0, 3993, 3994, 3995, 3996, 1836, + 1837, 0, 1840, 1841, 851, 0, 0, 0, 0, 1845, + 1846, 1847, 0, 2771, 1850, 1851, 1852, 1853, 1854, 1855, + 0, 1857, 0, 0, 1860, 1861, 0, 0, 1025, 1864, + 0, 0, 0, 1867, 1871, 1872, 0, 851, 3997, 3998, + 0, 1026, 0, 0, 0, 1879, 1880, 1881, 0, 0, + 0, 0, 954, 1027, 1889, 0, 0, 0, 851, 0, + 0, 1894, 1895, 1896, 0, 3999, 851, 0, 0, 0, + 0, 0, 0, 0, 0, 851, 0, 1028, 1009, 291, + 0, 293, 0, 0, 0, 0, 0, 0, 2775, 1029, + 0, 0, 0, 0, 1932, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2777, 0, 0, 0, 0, 1030, 0, 1031, 0, 1032, 0, 0, 0, 0, 0, 945, 0, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, - 15, 16, 0, 0, 0, 0, 0, 2011, 0, 0, - 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 2021, 2792, 2793, 2794, 0, 0, 0, - 0, 2795, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 2796, 0, 2816, - 2797, 0, 0, 0, 0, 0, 0, 21, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2798, - 851, 0, 0, 22, 0, 23, 0, 0, 0, 24, - 0, 0, 0, 25, 0, 0, 0, 2800, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2107, 0, 0, 0, 0, 0, 0, 27, - 0, 28, 0, 0, 0, 0, 0, 2117, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, - 0, 0, 851, 0, 2144, 0, 851, 0, 0, 0, - 0, 851, 851, 0, 0, 30, 0, 0, 0, 31, - 851, 0, 851, 0, 851, 851, 851, 851, 0, 0, - 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1033, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2011, + -1912, 1034, 0, 0, 0, 1035, 2780, 0, 1036, 2818, + 0, 0, 0, 0, 0, 2021, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 851, 0, 0, 0, 0, 0, 0, 1037, 0, 1038, + 0, 0, 0, 0, 0, 0, 0, 1039, 0, 1040, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2784, 0, 2785, 0, 0, 0, 291, 0, 293, + 0, 2787, 0, 0, 0, 1041, 1042, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 851, 0, 2107, 0, 851, 1043, 0, 0, + 0, 851, 851, 0, 0, 0, 0, 0, 0, 2117, + 851, 0, 851, 0, 851, 851, 851, 851, 0, 1044, + 851, 0, 0, 0, 0, 0, 2144, 0, 0, 0, 851, 851, 0, 851, 851, 0, 851, 851, 851, 851, - 0, 851, 0, 0, 851, 0, 0, 0, 0, 0, - 0, 2187, 0, 851, 0, 0, 0, 0, 0, 0, + 0, 851, 0, 2793, 851, 0, 0, 0, 1045, 0, + 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 851, 0, 851, 0, 851, 851, 0, 851, 851, 0, 0, 0, 851, 851, 851, 0, 0, 0, 851, 851, - 851, 0, 851, 0, 851, 0, 851, 0, 851, 0, - 851, 0, 0, 0, 0, 851, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 851, 0, 0, 0, 0, 0, 0, 851, - 0, 34, 851, 35, 0, 0, 0, 0, 851, 0, - 0, 851, 0, 0, 0, 851, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, + 851, 0, 851, 2187, 851, 0, 851, 0, 851, 0, + 851, 0, 2756, 0, 2757, 851, 0, 0, 0, 0, + 0, 2794, 2795, 2796, 0, 0, 0, 0, 2797, 0, + 0, 0, 851, 0, 0, 0, 1046, 0, 0, 851, + 0, 0, 851, 0, 2798, 0, 0, 2799, 851, 2759, + 0, 851, 0, 0, 0, 851, 0, 0, 0, 0, + 0, 0, 1047, 0, 0, 0, 2800, 2762, 0, 0, + 0, 0, 0, 1048, 1049, 2763, 0, 1050, 1051, 0, + 0, 0, 0, 0, 2802, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1052, 0, + 0, 0, 2765, 0, 0, 0, 0, 0, 0, 945, + 0, 0, 0, 0, 0, 0, 1674, 0, 0, 2766, + 0, 0, 0, 0, 0, 945, 945, 851, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 0, 39, 0, 40, 0, 0, 42, 0, 0, - 43, 44, 0, 0, 0, 0, 0, 945, 0, 0, - 0, 45, 0, 0, 46, 0, 0, 0, 0, 2355, - 0, 0, 47, 945, 945, 851, 0, 851, 48, 0, - 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, - 0, 50, 51, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1053, 0, 0, 0, + 2771, 2355, 0, 0, 0, 0, 0, 0, 0, 1054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, + 0, 0, -2532, 0, 0, 0, 1055, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, + 0, 0, 0, 0, 1056, 0, 291, 0, 293, 0, + 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, + 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 2438, 2440, 2442, 0, 0, 56, 0, - 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, - 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2475, 0, 0, 0, 0, 0, - 61, 2816, 0, 2480, 0, 2481, 62, 0, 0, 0, - 0, 0, 0, 0, 3193, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 3193, 3193, 0, 0, + 0, 0, 945, 0, 0, 2438, 2440, 2442, 0, 0, + 0, 0, -2532, 0, 0, 0, 0, 0, 0, 0, + 1057, 0, 0, 2818, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3196, 0, 0, 0, + 0, 0, 0, 0, 2779, 0, 2475, 0, 3196, 3196, + 0, 0, 0, 0, 0, 2480, 0, 2481, 0, 0, + 0, 0, 0, 2780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2818, 0, 0, 0, 0, 0, 0, 0, 2784, 0, + 2785, 0, 0, 0, 0, 0, 0, 0, 2787, 0, + 0, 945, 0, 0, 0, 0, 945, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, - 0, 0, 0, 0, 945, 851, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2569, 0, 0, 0, - 0, 0, 0, 0, 0, 2582, 0, 0, 0, 0, - 0, 0, 0, 0, 3193, 3193, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3196, 3196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2571, 0, + 0, 0, 0, 0, 0, 0, 0, 2584, 0, 0, + 0, 851, 0, 0, 0, 851, 0, 0, 0, 0, + 2793, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2621, 0, 0, 0, + 0, 0, 851, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2619, 1, 0, 2, 0, 851, - 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 2144, 0, 0, - 851, 851, 0, 5, 6, 0, 0, 7, 0, 0, - 0, 8, 0, 0, 0, 0, 9, 10, 2668, 0, + 0, 0, 0, 851, 0, 0, 0, 0, 0, 2144, + 0, 0, 851, 0, 851, 0, 851, 0, 2794, 2795, + 2796, 0, 0, 0, 0, 2797, 0, 0, 0, 0, + 2670, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2798, 0, 0, 2799, 0, 851, 2679, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, - 851, 0, 851, 0, 851, 2677, 11, 0, 0, 0, + 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2802, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 945, 945, 945, 945, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 851, 0, 0, 0, 0, 851, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 18, 0, 0, 0, 0, 0, 945, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 945, 945, - 945, 945, 0, 0, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 23, 0, 0, 851, 24, 0, 0, - 2828, 25, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 0, 0, 851, 0, 0, 0, 27, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 851, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2885, 30, 0, 0, 2887, 31, 0, 0, - 0, 2889, 2890, 0, 32, 0, 0, 0, 0, 0, - 1763, 0, 2906, 0, 1763, 0, 2909, 2910, 0, 0, - 0, 0, 0, 0, 2816, 0, 0, 0, 0, 0, - 2917, 2918, 0, 2919, 0, 0, 2921, 2922, 2923, 2924, - 0, 2925, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2929, 0, 0, 0, 0, 0, 0, - 2930, 0, 2931, 0, 2932, 2933, 0, 2934, 0, 0, - 0, 0, 2937, 2938, 2939, 0, 0, 0, 2941, 2942, - 2943, 0, 2944, 0, 2946, 0, 2948, 0, 2950, 0, - 2951, 0, 33, 0, 0, 2952, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 0, 35, 2975, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2816, 0, 36, 0, 0, 0, 2985, 0, - 0, 2988, 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 945, 0, 38, 0, 0, - 39, 0, 40, 0, 41, 42, 0, 0, 43, 44, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, - 0, 0, 46, 0, 0, 0, 0, 0, 0, 3193, - 47, 0, 0, 0, 0, 0, 48, 0, 0, 0, - 851, 0, 0, 0, 49, 1083, 0, 0, 0, 50, - 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 851, 0, 0, 0, 851, 851, 0, 851, 0, 0, - 0, 0, 53, 0, 0, 0, 851, 0, 0, 0, - 54, 851, 0, 0, 851, 0, 851, 851, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3107, 0, 0, 0, 0, - 0, 0, 851, 0, 55, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, - 57, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, - 0, 0, 3, 0, 62, 0, 4, 0, 0, 0, - 851, 0, 0, 0, 0, 0, 0, 63, 0, 0, - 5, 6, 0, 0, 7, 0, 0, 0, 8, 0, - 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2830, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2816, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 14, 15, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, - 0, 0, 0, 0, 0, 3311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 3352, - 23, 0, 0, 3354, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 851, 851, 0, 0, 0, 0, - 3381, 3382, 0, 0, 27, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 2887, 0, 0, 2818, 2889, 0, + 0, 0, 0, 2891, 2892, 0, 0, 0, 0, 0, + 0, 0, 1763, 0, 2908, 0, 1763, 0, 2911, 2912, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2919, 2920, 0, 2921, 0, 0, 2923, 2924, + 2925, 2926, 0, 2927, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2931, 0, 0, 0, 0, + 0, 0, 2932, 0, 2933, 0, 2934, 2935, 0, 2936, + 0, 0, 0, 0, 2939, 2940, 2941, 0, 0, 0, + 2943, 2944, 2945, 0, 2946, 0, 2948, 0, 2950, 0, + 2952, 0, 2953, 0, 0, 2818, 0, 2954, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2977, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 945, 0, + 2987, 0, 0, 2990, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3404, 29, 0, 0, 0, 0, 0, 0, 0, - 3414, 0, 3416, 0, 3418, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3196, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 851, 0, 0, 0, 851, 851, 1083, + 851, 0, 0, 3, 0, 0, 0, 4, 0, 851, + 0, 0, 0, 0, 851, 0, 0, 851, 0, 851, + 851, 5, 6, 0, 0, 7, 0, 0, 0, 8, + 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3687, 0, 0, 0, 0, 0, 2751, - 0, 2752, 0, 0, 0, 0, 0, 0, 0, 0, - 945, 0, 0, 0, 0, 2754, 0, 2755, 0, 0, + 0, 0, 0, 0, 11, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 851, 0, 0, 0, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, - 0, 0, 2757, 851, 0, 0, 34, 0, 35, 0, - 851, 0, 0, 0, 0, 0, 2619, 0, 0, 0, - 2760, 36, 0, 0, 0, 0, 0, 0, 2761, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 2762, 0, - 0, 0, 0, 2619, 0, 0, 851, 0, 0, 0, - 0, 0, 0, 0, 38, 2763, 0, 39, 0, 40, - 0, 41, 42, 2144, 0, 43, 44, 0, 0, 1674, - 0, 0, 2764, 0, 0, 0, 45, 0, 0, 46, - 2765, 0, 0, 0, 0, 0, 0, 47, 3688, 3948, - 3949, 0, 0, 48, 0, 3950, 2768, 3951, 0, 3952, - 3953, 49, 2769, 0, 0, 0, 50, 51, 52, 0, - 0, 0, 0, 0, 0, 0, 3755, 0, 0, 0, + 0, 0, 0, 12, 0, 0, 0, 0, 0, 3110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2771, 0, 0, 0, 0, 0, 0, 53, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, - 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, - 293, 0, 3954, 0, 0, 3955, 0, 2773, 0, 0, - 0, 0, 0, 3956, 2774, 0, 0, 0, 0, 0, - 0, 55, 851, 0, 0, 0, 851, 0, 0, 2775, - 0, 3957, 0, 56, 0, 0, 0, 57, 0, 0, - 58, 0, 0, 0, 0, 59, 0, 0, 0, 3958, - 0, 0, 0, 2776, 0, 0, 0, 0, 0, 851, - 945, 0, 0, 0, 0, 0, 0, 60, 0, 0, - 0, 0, 0, 0, 3959, 61, 3960, 0, 0, 0, - 0, 62, 0, 0, 0, 0, 2777, 0, 0, 0, - 3961, 3962, 0, 0, 63, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2778, 0, 0, 0, 2779, - 0, 0, 0, 0, 0, 0, 0, 0, 2816, 0, - 3745, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3963, 0, 0, 0, 0, 0, + 851, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3774, 0, 0, 2781, 3778, 3779, 0, 0, 0, 0, - 2782, 0, 2783, 3964, 0, 0, 3786, 0, 0, 0, - 2785, 3788, 3965, 3966, 3789, 3967, 3790, 3791, 0, 4400, + 17, 18, 0, 0, 851, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 851, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 851, 3968, - 3969, 3970, 0, 0, 0, 945, 2788, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3971, 3972, - 3973, 0, 0, 0, 0, 0, 3974, 0, 0, 3975, - 0, 0, 2791, 0, 0, 0, 3822, 0, 0, 0, - 0, 0, 851, 0, 0, 3976, 3977, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 851, 0, 851, + 22, 851, 23, 0, 0, 0, 24, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 0, 0, 2818, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3822, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3978, 3979, 0, 4507, 0, 0, 0, 4507, 0, - 2792, 2793, 2794, 0, 0, 0, 0, 2795, 0, 0, - 0, 0, 0, 0, 0, 0, 3980, 3878, 0, 0, - 0, 0, 0, 2796, 0, 0, 2797, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3822, 0, 0, - 0, 0, 0, 0, 0, 2798, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4400, 0, 2800, 0, 0, 0, 0, 0, 0, - 0, 0, 3981, 0, 0, 0, 3982, 0, 0, 0, - 0, 945, 0, 0, 0, 0, 0, 945, 0, 0, - 3983, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 0, 3314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3984, 0, - 0, 3985, 0, 0, 3986, 3987, 3988, 3989, 0, 0, - 0, 0, 0, 0, 4507, 0, 0, 0, 0, 4507, - 0, 0, 0, 0, 4006, 4007, 4507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3990, 3991, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 851, 851, + 0, 0, 0, 3355, 0, 0, 0, 3357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3992, 851, 0, 0, 0, 0, + 0, 33, 0, 0, 3384, 3385, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, + 35, 0, 0, 0, 0, 3407, 0, 0, 0, 0, + 0, 0, 0, 36, 3417, 0, 3419, 0, 3421, 0, + 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, + 0, 40, 0, 41, 42, 0, 0, 43, 44, 0, + 0, 0, 0, 0, 0, 0, 0, 945, 45, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 0, 48, 0, 851, 0, 0, + 0, 0, 0, 49, 0, 0, 0, 0, 50, 51, + 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 851, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2621, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 2, 0, 0, 2621, 0, + 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 56, 0, 4, 2144, 57, + 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, + 0, 5, 6, 0, 0, 7, 0, 0, 0, 8, + 0, 0, 0, 0, 9, 10, 0, 0, 0, 60, + 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, + 0, 0, 0, 62, 11, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, + 0, 0, 0, 12, 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4507, 0, 0, 0, 0, - 0, 4725, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 15, 16, 851, + 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, + 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3822, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 851, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4120, 851, 0, 0, 0, 0, 0, - 2619, 0, 851, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 0, 23, 0, 0, 0, 24, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 0, 0, 2818, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 851, 0, 0, 4158, 0, 0, 0, - 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 3749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4507, 0, 4507, 4507, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 0, 32, 0, 3778, 0, 0, 4410, 3782, + 3783, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3790, 0, 0, 0, 0, 3792, 0, 0, 3793, + 0, 3794, 3795, 0, 0, 0, 0, 851, 0, 0, + 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4507, 0, 0, 4507, 0, 0, 0, + 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, + 0, 33, 0, 0, 0, 0, 0, 851, 0, 851, + 0, 0, 3829, 0, 0, 0, 0, 0, 34, 0, + 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 4517, 0, 0, 0, 4517, 0, + 0, 0, 0, 0, 37, 0, 3829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, + 0, 40, 0, 41, 42, 0, 0, 43, 44, 0, + 0, 0, 0, 3885, 0, 0, 0, 0, 45, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 4410, 0, 3829, 0, 48, 0, 0, 0, 0, + 0, 0, 0, 49, 0, 0, 0, 0, 50, 51, + 52, 945, 0, 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, - 0, 0, 0, 945, 0, 0, 0, 0, 0, 0, + 851, 0, 1, 0, 2, 0, 0, 0, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2619, 0, 0, 0, 4264, 0, 945, 0, + 5, 6, 0, 0, 0, 0, 0, 0, 8, 0, + 0, 0, 0, 9, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 55, 4517, 0, 0, 0, 0, 4517, + 0, 0, 0, 11, 0, 56, 4517, 0, 0, 57, + 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 4013, 4014, 0, 0, 0, 0, 0, 0, 0, 60, + 0, 0, 0, 0, 0, 0, 13, 61, 0, 0, + 0, 0, 0, 62, 14, 851, 15, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 63, 0, 0, 17, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 0, 4517, 0, 0, 0, 0, + 0, 4735, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 23, 0, 0, 0, 24, 0, 0, 0, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 851, 27, 0, 28, 0, 3829, + 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, + 0, 0, 4129, 0, 0, 0, 0, 0, 0, 2621, + 0, 30, 0, 851, 0, 31, 0, 0, 0, 0, + 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4517, 0, 4517, 4517, 4167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 851, 0, 0, 0, 0, 0, 3822, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4517, 0, 0, 4517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 34, 4517, 35, + 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, + 0, 0, 36, 945, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 945, 0, + 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, + 40, 0, 0, 42, 0, 0, 43, 44, 0, 0, + 0, 2621, 0, 851, 0, 4273, 0, 45, 0, 0, + 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, + 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 49, 0, 0, 0, 0, 50, 51, 52, + 3829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, 0, 0, 57, 0, + 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 62, 0, 0, 0, 0, 0, 0, 4438, + 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4492, + 0, 4494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4482, 0, 4484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7345,41 +5681,44 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 1868, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 4755, 728, 201, 729, 730, 731, - 732, 733, 3822, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 4778, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4765, 0, 0, 0, + 0, 0, 0, 0, 3829, 159, 0, 160, 715, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 716, 0, 169, 170, 171, 172, 173, 174, + 175, 717, 177, 0, 178, 4788, 0, 718, 179, 719, + 720, 721, 180, 722, 0, 181, 182, 183, 1868, 184, + 0, 185, 186, 0, 0, 187, 723, 724, 188, 189, + 0, 190, 725, 726, 192, 193, 0, 194, 195, 196, + 197, 727, 199, 0, 728, 201, 729, 730, 731, 732, + 733, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 734, 221, 0, + 222, 735, 736, 223, 0, 0, 224, 737, 225, 738, + 739, 226, 0, 227, 740, 741, 0, 228, 229, 230, + 742, 743, 744, 0, 0, 0, 0, 745, 233, 746, + 0, 0, 747, 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, @@ -7387,7 +5726,7 @@ 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, + 754, 280, 281, 0, 282, 3829, 755, 283, 284, 285, 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, @@ -7395,7 +5734,7 @@ 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, 1869, 309, 0, 763, 310, 311, 0, 0, 0, 0, 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 3822, 0, 0, 318, 319, 320, 321, + 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, @@ -7446,216 +5785,613 @@ 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, 746, 0, 0, 2142, 234, 0, 235, 0, 0, 0, + 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, + 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, + 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, + 252, 253, 0, 254, 255, 256, 257, 258, 259, 260, + 748, 0, 261, 262, 263, 264, 749, 750, 265, 266, + 0, 267, 268, 269, 751, 0, 270, 0, 0, 0, + 752, 272, 0, 273, 0, 274, 0, 275, 276, 753, + 278, 754, 280, 281, 0, 282, 0, 755, 283, 284, + 285, 0, 286, 756, 757, 0, 287, 288, 0, 0, + 0, 758, 290, 291, 292, 293, 759, 0, 0, 294, + 295, 296, 0, 0, 297, 0, 0, 0, 760, 298, + 299, 761, 0, 0, 300, 0, 301, 302, 0, 303, + 304, 0, 0, 0, 305, 0, 0, 306, 307, 762, + 0, 0, 309, 0, 763, 310, 311, 0, 0, 0, + 0, 0, 764, 313, 0, 314, 0, 315, 0, 316, + 317, 0, 0, 765, 0, 0, 0, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 0, 334, 335, 336, 337, 766, 338, + 339, 340, 341, 767, 342, 343, 344, 0, 0, 0, + 0, 345, 346, 347, 348, 768, 350, 0, 0, 769, + 352, 770, 353, 0, 354, 771, 772, 773, 774, 775, + 359, 360, 361, 362, 363, 364, 0, 776, 365, 0, + 0, 366, 367, 368, 369, 777, 778, 779, 370, 371, + 0, 780, 781, 372, 0, 373, 374, 782, 2143, 376, + 377, 378, 379, 0, 380, 381, 0, 0, 0, 0, + 0, 0, 0, 0, 382, 383, 384, 0, 783, 385, + 0, 386, 0, 387, 388, 784, 390, 391, 392, 393, + 785, 786, 396, 787, 0, 397, 398, 399, 0, 400, + 0, 401, 402, 403, 404, 405, 0, 788, 407, 408, + 0, 0, 409, 0, 0, 0, 410, 411, 412, 413, + 414, 0, 0, 415, 416, 417, 418, 419, 0, 420, + 421, 0, 422, 423, 424, 789, 790, 425, 0, 426, + 0, 427, 428, 0, 429, 430, 0, 431, 0, 791, + 0, 792, 433, 434, 435, 436, 437, 438, 793, 794, + 441, 442, 443, 444, 0, 795, 446, 0, 0, 0, + 447, 448, 449, 450, 0, 0, 0, 451, 0, 0, + 0, 452, 0, 453, 454, 455, 456, 457, 458, 0, + 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, + 0, 0, 465, 466, 0, 467, 0, 0, 468, 0, + 0, 0, 469, 470, 471, 0, 0, 0, 472, 796, + 797, 473, 474, 0, 475, 476, 798, 478, 479, 480, + 799, 800, 481, 482, 483, 484, 801, 485, 486, 0, + 0, 487, 488, 489, 490, 0, 802, 491, 492, 0, + 803, 804, 805, 806, 0, 0, 0, 0, 0, 497, + 498, 499, 0, 807, 808, 809, 501, 502, 503, 810, + 504, 505, 811, 506, 507, 0, 508, 509, 0, 0, + 510, 0, 0, 511, 0, 512, 0, 812, 514, 0, + 0, 813, 814, 815, 816, 515, 0, 0, 516, 817, + 0, 818, 517, 518, 519, 520, 521, 819, 820, 0, + 0, 0, 0, 0, 0, 524, 525, 0, 526, 527, + 528, 0, 0, 821, 0, 0, 0, 0, 0, 0, + 0, 822, 823, 0, 0, 0, 0, 824, 825, 0, + 0, 826, 827, 0, 0, 828, 829, 159, 0, 160, + 715, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 716, 0, 169, 170, 171, 172, + 173, 174, 175, 717, 177, 0, 178, 0, 0, 718, + 179, 719, 720, 721, 180, 722, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 723, 724, + 188, 189, 0, 190, 725, 726, 192, 193, 0, 194, + 195, 196, 197, 727, 199, 0, 728, 201, 729, 730, + 731, 732, 733, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 734, + 221, 0, 222, 735, 736, 223, 0, 0, 224, 737, + 225, 738, 739, 226, 0, 227, 740, 741, 0, 228, + 229, 230, 742, 743, 744, 0, 0, 0, 0, 745, + 233, 746, 0, 0, 747, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 748, 0, 261, 262, 263, 264, 749, 750, 265, + 266, 0, 267, 268, 269, 751, 0, 270, 0, 0, + 0, 752, 272, 2437, 273, 0, 274, 0, 275, 276, + 753, 278, 754, 280, 281, 0, 282, 0, 755, 283, + 284, 285, 0, 286, 756, 757, 0, 287, 288, 0, + 0, 0, 758, 290, 291, 292, 293, 759, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 760, + 298, 299, 761, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 762, 0, 0, 309, 0, 763, 310, 311, 0, 0, + 0, 0, 0, 764, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 765, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 766, + 338, 339, 340, 341, 767, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 768, 350, 0, 0, + 769, 352, 770, 353, 0, 354, 771, 772, 773, 774, + 775, 359, 360, 361, 362, 363, 364, 0, 776, 365, + 0, 0, 366, 367, 368, 369, 777, 778, 779, 370, + 371, 0, 780, 781, 372, 0, 373, 374, 782, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 783, + 385, 0, 386, 0, 387, 388, 784, 390, 391, 392, + 393, 785, 786, 396, 787, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 788, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 789, 790, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 791, 0, 792, 433, 434, 435, 436, 437, 438, 793, + 794, 441, 442, 443, 444, 0, 795, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 796, 797, 473, 474, 0, 475, 476, 798, 478, 479, + 480, 799, 800, 481, 482, 483, 484, 801, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 802, 491, 492, + 0, 803, 804, 805, 806, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 807, 808, 809, 501, 502, 503, + 810, 504, 505, 811, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 812, 514, + 0, 0, 813, 814, 815, 816, 515, 0, 0, 516, + 817, 0, 818, 517, 518, 519, 520, 521, 819, 820, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 0, 821, 0, 0, 0, 0, 0, + 0, 0, 822, 823, 0, 0, 0, 0, 824, 825, + 0, 0, 826, 827, 0, 0, 828, 829, 159, 0, + 160, 715, 162, 163, 164, 165, 0, 0, 166, 0, + 0, 0, 167, 0, 0, 716, 0, 169, 170, 171, + 172, 173, 174, 175, 717, 177, 0, 178, 0, 0, + 718, 179, 719, 720, 721, 180, 722, 0, 181, 182, + 183, 0, 184, 0, 185, 186, 0, 0, 187, 723, + 724, 188, 189, 0, 190, 725, 726, 192, 193, 0, + 194, 195, 196, 197, 727, 199, 0, 728, 201, 729, + 730, 731, 732, 733, 0, 207, 208, 209, 210, 211, + 212, 213, 214, 0, 215, 216, 0, 217, 218, 219, + 734, 221, 0, 222, 735, 736, 223, 0, 0, 224, + 737, 225, 738, 739, 226, 0, 227, 740, 741, 0, + 228, 229, 230, 742, 743, 744, 0, 0, 0, 0, + 745, 233, 746, 0, 0, 747, 234, 0, 235, 0, + 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, + 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, + 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, + 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, + 259, 260, 748, 0, 261, 262, 263, 264, 749, 750, + 265, 266, 0, 267, 268, 269, 751, 0, 270, 0, + 0, 0, 752, 272, 2439, 273, 0, 274, 0, 275, + 276, 753, 278, 754, 280, 281, 0, 282, 0, 755, + 283, 284, 285, 0, 286, 756, 757, 0, 287, 288, + 0, 0, 0, 758, 290, 291, 292, 293, 759, 0, + 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, + 760, 298, 299, 761, 0, 0, 300, 0, 301, 302, + 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, + 307, 762, 0, 0, 309, 0, 763, 310, 311, 0, + 0, 0, 0, 0, 764, 313, 0, 314, 0, 315, + 0, 316, 317, 0, 0, 765, 0, 0, 0, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, + 766, 338, 339, 340, 341, 767, 342, 343, 344, 0, + 0, 0, 0, 345, 346, 347, 348, 768, 350, 0, + 0, 769, 352, 770, 353, 0, 354, 771, 772, 773, + 774, 775, 359, 360, 361, 362, 363, 364, 0, 776, + 365, 0, 0, 366, 367, 368, 369, 777, 778, 779, + 370, 371, 0, 780, 781, 372, 0, 373, 374, 782, + 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, + 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, + 783, 385, 0, 386, 0, 387, 388, 784, 390, 391, + 392, 393, 785, 786, 396, 787, 0, 397, 398, 399, + 0, 400, 0, 401, 402, 403, 404, 405, 0, 788, + 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, + 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, + 0, 420, 421, 0, 422, 423, 424, 789, 790, 425, + 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, + 0, 791, 0, 792, 433, 434, 435, 436, 437, 438, + 793, 794, 441, 442, 443, 444, 0, 795, 446, 0, + 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, + 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, + 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, + 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, + 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, + 472, 796, 797, 473, 474, 0, 475, 476, 798, 478, + 479, 480, 799, 800, 481, 482, 483, 484, 801, 485, + 486, 0, 0, 487, 488, 489, 490, 0, 802, 491, + 492, 0, 803, 804, 805, 806, 0, 0, 0, 0, + 0, 497, 498, 499, 0, 807, 808, 809, 501, 502, + 503, 810, 504, 505, 811, 506, 507, 0, 508, 509, + 0, 0, 510, 0, 0, 511, 0, 512, 0, 812, + 514, 0, 0, 813, 814, 815, 816, 515, 0, 0, + 516, 817, 0, 818, 517, 518, 519, 520, 521, 819, + 820, 0, 0, 0, 0, 0, 0, 524, 525, 0, + 526, 527, 528, 0, 0, 821, 0, 0, 0, 0, + 0, 0, 0, 822, 823, 0, 0, 0, 0, 824, + 825, 0, 0, 826, 827, 0, 0, 828, 829, 159, + 0, 160, 715, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 716, 0, 169, 170, + 171, 172, 173, 174, 175, 717, 177, 0, 178, 0, + 0, 718, 179, 719, 720, 721, 180, 722, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 723, 724, 188, 189, 0, 190, 725, 726, 192, 193, + 0, 194, 195, 196, 197, 727, 199, 0, 728, 201, + 729, 730, 731, 732, 733, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 734, 221, 0, 222, 735, 736, 223, 0, 0, + 224, 737, 225, 738, 739, 226, 0, 227, 740, 741, + 0, 228, 229, 230, 742, 743, 744, 0, 0, 0, + 0, 745, 233, 746, 0, 0, 747, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 748, 0, 261, 262, 263, 264, 749, + 750, 265, 266, 0, 267, 268, 269, 751, 0, 270, + 0, 0, 0, 752, 272, 2441, 273, 0, 274, 0, + 275, 276, 753, 278, 754, 280, 281, 0, 282, 0, + 755, 283, 284, 285, 0, 286, 756, 757, 0, 287, + 288, 0, 0, 0, 758, 290, 291, 292, 293, 759, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 760, 298, 299, 761, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 762, 0, 0, 309, 0, 763, 310, 311, + 0, 0, 0, 0, 0, 764, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 765, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 766, 338, 339, 340, 341, 767, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 768, 350, + 0, 0, 769, 352, 770, 353, 0, 354, 771, 772, + 773, 774, 775, 359, 360, 361, 362, 363, 364, 0, + 776, 365, 0, 0, 366, 367, 368, 369, 777, 778, + 779, 370, 371, 0, 780, 781, 372, 0, 373, 374, + 782, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 783, 385, 0, 386, 0, 387, 388, 784, 390, + 391, 392, 393, 785, 786, 396, 787, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 788, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 789, 790, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 791, 0, 792, 433, 434, 435, 436, 437, + 438, 793, 794, 441, 442, 443, 444, 0, 795, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 796, 797, 473, 474, 0, 475, 476, 798, + 478, 479, 480, 799, 800, 481, 482, 483, 484, 801, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 802, + 491, 492, 0, 803, 804, 805, 806, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 807, 808, 809, 501, + 502, 503, 810, 504, 505, 811, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 812, 514, 0, 0, 813, 814, 815, 816, 515, 0, + 0, 516, 817, 0, 818, 517, 518, 519, 520, 521, + 819, 820, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 0, 821, 0, 0, 0, + 0, 0, 0, 0, 822, 823, 0, 0, 0, 0, + 824, 825, 0, 0, 826, 827, 0, 0, 828, 829, + 159, 0, 160, 715, 162, 163, 164, 165, 0, 0, + 166, 0, 0, 0, 167, 0, 0, 716, 0, 169, + 170, 171, 172, 173, 174, 175, 717, 177, 0, 178, + 0, 0, 718, 179, 719, 720, 721, 180, 722, 0, + 181, 182, 183, 0, 184, 0, 185, 186, 0, 0, + 187, 723, 724, 188, 189, 0, 190, 725, 726, 192, + 193, 0, 194, 195, 196, 197, 727, 199, 0, 728, + 201, 729, 730, 731, 732, 733, 0, 207, 208, 209, + 210, 211, 212, 213, 214, 0, 215, 216, 0, 217, + 218, 219, 734, 221, 0, 222, 735, 736, 223, 0, + 0, 224, 737, 225, 738, 739, 226, 0, 227, 740, + 741, 0, 228, 229, 230, 742, 743, 744, 0, 0, + 0, 0, 745, 233, 746, 0, 0, 747, 234, 0, + 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, + 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, + 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, + 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, + 257, 258, 259, 260, 748, 0, 261, 262, 263, 264, + 749, 750, 265, 266, 0, 267, 268, 269, 751, 0, + 270, 0, 0, 0, 752, 272, 0, 273, 0, 274, + 0, 275, 276, 753, 278, 754, 280, 281, 0, 282, + 0, 755, 283, 284, 285, 0, 286, 756, 757, 0, + 287, 288, 0, 0, 0, 758, 290, 291, 292, 293, + 759, 0, 0, 294, 295, 296, 0, 0, 297, 0, + 0, 0, 760, 298, 299, 761, 0, 0, 300, 0, + 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, + 0, 306, 307, 762, 0, 0, 309, 0, 763, 310, + 311, 0, 0, 0, 0, 0, 764, 313, 0, 314, + 0, 315, 0, 316, 317, 0, 0, 765, 0, 0, + 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, + 336, 337, 766, 338, 339, 340, 341, 767, 342, 343, + 344, 0, 0, 0, 0, 345, 346, 347, 348, 768, + 350, 0, 0, 769, 352, 770, 353, 0, 354, 771, + 772, 773, 774, 775, 359, 360, 361, 362, 363, 364, + 0, 776, 365, 0, 0, 366, 367, 368, 369, 777, + 778, 779, 370, 371, 0, 780, 781, 372, 0, 373, + 374, 782, 0, 376, 377, 378, 379, 0, 380, 381, + 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, + 384, 0, 783, 385, 0, 386, 0, 387, 388, 784, + 390, 391, 392, 393, 785, 786, 396, 787, 0, 397, + 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, + 0, 788, 407, 408, 0, 0, 409, 0, 0, 0, + 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, + 418, 419, 0, 420, 421, 0, 422, 423, 424, 789, + 790, 425, 0, 426, 0, 427, 428, 0, 429, 430, + 0, 431, 0, 791, 0, 792, 433, 434, 435, 436, + 437, 438, 793, 794, 441, 442, 443, 444, 0, 795, + 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, + 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, + 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, + 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, + 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, + 0, 0, 472, 796, 797, 473, 474, 0, 475, 476, + 798, 478, 479, 480, 799, 800, 481, 482, 483, 484, + 801, 485, 486, 0, 0, 487, 488, 489, 490, 0, + 802, 491, 492, 0, 803, 804, 805, 806, 0, 0, + 0, 0, 0, 497, 498, 499, 0, 807, 808, 809, + 501, 502, 503, 810, 504, 505, 811, 506, 507, 0, + 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, + 0, 812, 514, 0, 0, 813, 814, 815, 816, 515, + 0, 0, 516, 817, 0, 818, 517, 518, 519, 520, + 521, 819, 820, 0, 0, 0, 0, 0, 0, 524, + 525, 0, 526, 527, 528, 0, 0, 821, 0, 0, + 0, 0, 0, 0, 0, 822, 823, 0, 0, 0, + 0, 824, 825, 0, 0, 826, 827, 0, 0, 828, + 829, 159, 0, 160, 715, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 716, 0, + 169, 170, 171, 172, 173, 174, 175, 717, 177, 0, + 178, 0, 0, 718, 179, 719, 720, 721, 180, 722, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 723, 724, 188, 189, 0, 190, 725, 726, + 192, 193, 0, 194, 195, 196, 197, 727, 199, 0, + 728, 201, 729, 730, 731, 732, 733, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 734, 221, 0, 222, 735, 736, 223, + 0, 0, 224, 737, 225, 738, 739, 226, 0, 227, + 740, 741, 0, 228, 229, 230, 742, 743, 744, 0, + 0, 0, 0, 745, 233, 746, 0, 0, 747, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 748, 0, 261, 262, 263, + 264, 749, 750, 265, 266, 0, 267, 268, 269, 751, + 0, 270, 0, 0, 0, 752, 272, 0, 273, 0, + 274, 0, 275, 276, 753, 278, 754, 280, 281, 0, + 282, 0, 755, 283, 284, 285, 0, 286, 756, 757, + 0, 287, 288, 0, 0, 0, 758, 290, 291, 292, + 293, 759, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 760, 298, 299, 761, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 762, 0, 0, 309, 0, 763, + 310, 311, 0, 0, 0, 0, 0, 764, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 765, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 766, 338, 339, 340, 341, 767, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 768, 350, 0, 0, 769, 352, 770, 353, 0, 354, + 771, 772, 773, 774, 775, 359, 360, 361, 362, 363, + 364, 0, 776, 365, 0, 0, 366, 367, 368, 369, + 777, 778, 779, 370, 371, 0, 780, 781, 372, 0, + 373, 374, 782, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 783, 385, 0, 386, 0, 387, 388, + 784, 390, 391, 392, 393, 785, 786, 396, 787, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 788, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 789, 790, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 791, 0, 792, 433, 434, 435, + 436, 437, 438, 793, 794, 441, 442, 443, 444, 0, + 795, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 796, 797, 473, 474, 0, 475, + 476, 798, 478, 479, 480, 799, 800, 481, 482, 483, + 484, 801, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 802, 491, 492, 0, 803, 804, 805, 806, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 807, 808, + 809, 501, 502, 503, 810, 504, 505, 811, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 812, 514, 0, 0, 813, 814, 815, 816, + 515, 0, 0, 516, 817, 0, 818, 517, 518, 519, + 520, 521, 819, 820, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 0, 821, 0, + 0, 0, 0, 0, 0, 0, 822, 823, 0, 0, + 0, 0, 824, 1231, 0, 0, 826, 827, 0, 0, + 828, 829, 159, 0, 160, 715, 162, 163, 164, 165, + 1903, 0, 166, 0, 0, 0, 1904, 0, 0, 716, + 0, 169, 170, 171, 172, 173, 174, 175, 717, 177, + 0, 178, 0, 0, 718, 179, 719, 720, 721, 180, + 722, 0, 181, 182, 183, 0, 184, 0, 185, 186, + 0, 0, 187, 723, 724, 188, 189, 0, 190, 725, + 726, 192, 193, 0, 194, 195, 196, 197, 727, 199, + 0, 728, 201, 729, 730, 731, 732, 733, 0, 207, + 208, 209, 210, 211, 212, 213, 214, 0, 215, 216, + 0, 217, 218, 219, 734, 221, 0, 222, 735, 736, + 223, 0, 0, 224, 737, 225, 738, 739, 226, 0, + 227, 740, 741, 0, 228, 229, 230, 742, 743, 744, + 0, 0, 0, 0, 745, 233, 746, 0, 0, 747, + 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, + 238, 239, 240, 241, 0, 0, 0, 0, 242, 0, + 0, 243, 244, 245, 0, 0, 0, 246, 0, 247, + 248, 0, 249, 250, 251, 0, 252, 253, 0, 254, + 255, 256, 257, 258, 259, 260, 748, 0, 261, 262, + 263, 264, 749, 750, 265, 266, 0, 267, 268, 269, + 751, 0, 270, 0, 0, 0, 752, 272, 0, 273, + 0, 274, 0, 275, 276, 753, 278, 754, 280, 281, + 0, 282, 0, 755, 283, 284, 285, 0, 286, 756, + 757, 0, 287, 288, 0, 0, 0, 758, 290, 291, + 292, 293, 759, 0, 0, 294, 295, 296, 0, 0, + 297, 0, 0, 0, 760, 298, 299, 761, 0, 0, + 300, 0, 301, 302, 0, 303, 304, 0, 0, 0, + 305, 0, 0, 306, 307, 762, 0, 0, 309, 0, + 763, 310, 311, 0, 0, 0, 0, 0, 764, 313, + 0, 314, 0, 315, 0, 316, 317, 0, 0, 765, + 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 0, + 334, 335, 336, 337, 766, 338, 339, 340, 341, 767, + 342, 343, 344, 0, 0, 0, 0, 345, 346, 347, + 348, 768, 350, 0, 0, 769, 352, 770, 353, 0, + 354, 771, 772, 773, 774, 775, 359, 360, 361, 362, + 363, 364, 0, 776, 365, 0, 0, 366, 367, 368, + 369, 777, 0, 779, 370, 371, 0, 780, 781, 372, + 0, 373, 374, 782, 0, 376, 377, 378, 379, 0, + 380, 381, 0, 0, 0, 0, 0, 0, 0, 0, + 382, 383, 384, 0, 783, 385, 0, 386, 0, 387, + 388, 784, 390, 391, 392, 393, 785, 786, 396, 787, + 0, 397, 398, 399, 0, 400, 0, 401, 402, 403, + 404, 405, 0, 788, 407, 408, 0, 0, 409, 0, + 0, 0, 410, 411, 412, 413, 414, 0, 0, 415, + 416, 417, 418, 419, 0, 420, 421, 0, 422, 423, + 424, 789, 790, 425, 0, 426, 0, 427, 428, 0, + 429, 430, 0, 431, 0, 791, 0, 792, 433, 434, + 435, 436, 437, 438, 793, 794, 441, 442, 443, 444, + 0, 795, 446, 0, 0, 0, 447, 448, 449, 450, + 0, 0, 0, 451, 0, 0, 0, 452, 0, 453, + 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, + 463, 464, 0, 0, 0, 0, 0, 0, 465, 466, + 0, 467, 0, 0, 468, 0, 0, 0, 469, 470, + 471, 0, 0, 0, 472, 796, 797, 473, 474, 0, + 475, 476, 798, 478, 479, 480, 799, 800, 481, 482, + 483, 484, 801, 485, 486, 0, 0, 487, 488, 489, + 490, 0, 802, 491, 492, 0, 803, 804, 805, 806, + 0, 0, 0, 0, 0, 497, 498, 499, 0, 807, + 808, 809, 501, 502, 503, 810, 504, 505, 811, 506, + 507, 0, 508, 509, 0, 0, 510, 0, 0, 511, + 0, 512, 0, 812, 514, 0, 0, 813, 814, 815, + 816, 515, 0, 0, 516, 817, 0, 818, 517, 518, + 519, 520, 521, 819, 820, 0, 0, 0, 0, 0, + 0, 524, 525, 0, 526, 527, 528, 0, 0, 821, + 0, 0, 0, 0, 0, 0, 0, 822, 823, 0, + 0, 0, 0, 824, 825, 0, 0, 826, 827, 0, + 0, 828, 829, 159, 0, 160, 715, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 716, 0, 169, 170, 171, 172, 173, 174, 175, 717, + 177, 0, 178, 0, 0, 718, 179, 719, 720, 721, + 180, 722, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 723, 724, 188, 189, 0, 190, + 725, 726, 192, 193, 0, 194, 195, 196, 197, 727, + 199, 0, 728, 201, 729, 730, 731, 732, 733, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 734, 221, 0, 222, 735, + 736, 223, 0, 0, 224, 737, 225, 738, 739, 226, + 0, 227, 740, 741, 0, 228, 229, 230, 742, 743, + 744, 0, 0, 0, 0, 745, 233, 746, 0, 0, + 747, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 748, 0, 261, + 262, 263, 264, 749, 750, 265, 266, 0, 267, 268, + 269, 751, 0, 270, 0, 0, 0, 752, 272, 0, + 273, 0, 274, 0, 275, 276, 753, 278, 754, 280, + 281, 0, 282, 0, 755, 283, 284, 285, 0, 286, + 756, 757, 0, 287, 288, 0, 0, 0, 758, 290, + 291, 292, 293, 759, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 760, 298, 299, 761, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 762, 0, 0, 309, + 0, 763, 310, 311, 0, 0, 0, 0, 0, 764, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 765, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 766, 338, 339, 340, 341, + 767, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 768, 350, 0, 0, 769, 352, 770, 353, + 0, 354, 771, 772, 773, 774, 775, 359, 360, 361, + 362, 363, 364, 0, 776, 365, 0, 0, 366, 367, + 368, 369, 777, 778, 779, 370, 371, 0, 780, 781, + 372, 0, 373, 374, 782, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 783, 385, 0, 386, 0, + 387, 388, 784, 390, 391, 392, 393, 785, 786, 396, + 787, 0, 397, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 788, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 789, 790, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 791, 0, 792, 433, + 434, 435, 436, 437, 438, 793, 794, 441, 442, 443, + 444, 0, 795, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 796, 797, 473, 474, + 0, 475, 476, 798, 478, 479, 480, 799, 800, 481, + 482, 483, 484, 801, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 802, 491, 492, 0, 803, 804, 805, + 806, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 807, 808, 809, 501, 502, 503, 810, 504, 505, 811, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 2010, 514, 0, 0, 813, 814, + 815, 816, 515, 0, 0, 516, 817, 0, 818, 517, + 518, 519, 520, 521, 819, 820, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 0, + 821, 0, 0, 0, 0, 0, 0, 0, 822, 823, + 0, 0, 0, 0, 824, 825, 0, 0, 826, 827, + 0, 0, 828, 829, 159, 0, 160, 715, 162, 163, + 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, + 0, 716, 0, 169, 170, 171, 172, 173, 174, 175, + 717, 177, 0, 178, 0, 0, 718, 179, 719, 720, + 721, 180, 722, 0, 181, 182, 183, 0, 184, 0, + 185, 186, 0, 0, 187, 723, 724, 188, 189, 0, + 190, 725, 726, 192, 193, 0, 194, 195, 196, 197, + 727, 199, 0, 728, 201, 729, 730, 731, 732, 733, + 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, + 215, 216, 0, 217, 218, 219, 734, 221, 0, 222, + 735, 736, 223, 0, 0, 224, 737, 225, 738, 739, + 226, 0, 227, 740, 741, 0, 228, 229, 230, 742, + 743, 744, 0, 0, 0, 0, 745, 233, 746, 0, + 0, 747, 234, 0, 235, 0, 0, 0, 0, 236, + 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, + 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, + 0, 247, 248, 0, 249, 250, 251, 0, 252, 253, + 0, 254, 255, 256, 257, 258, 259, 260, 748, 0, + 261, 262, 263, 264, 749, 750, 265, 266, 0, 267, + 268, 269, 751, 0, 270, 0, 0, 0, 752, 272, + 0, 273, 0, 274, 0, 275, 276, 753, 278, 754, + 280, 281, 0, 282, 0, 755, 283, 284, 285, 0, + 286, 756, 757, 0, 287, 288, 0, 0, 0, 758, + 290, 291, 292, 293, 759, 0, 0, 294, 295, 296, + 0, 0, 297, 0, 0, 0, 760, 298, 299, 2886, + 0, 0, 300, 0, 301, 302, 0, 303, 304, 0, + 0, 0, 305, 0, 0, 306, 307, 762, 0, 0, + 309, 0, 763, 310, 311, 0, 0, 0, 0, 0, + 764, 313, 0, 314, 0, 315, 0, 316, 317, 0, + 0, 765, 0, 0, 0, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 0, 334, 335, 336, 337, 766, 338, 339, 340, + 341, 767, 342, 343, 344, 0, 0, 0, 0, 345, + 346, 347, 348, 768, 350, 0, 0, 769, 352, 770, + 353, 0, 354, 771, 772, 773, 774, 775, 359, 360, + 361, 362, 363, 364, 0, 776, 365, 0, 0, 366, + 367, 368, 369, 777, 778, 779, 370, 371, 0, 780, + 781, 372, 0, 373, 374, 782, 0, 376, 377, 378, + 379, 0, 380, 381, 0, 0, 0, 0, 0, 0, + 0, 0, 382, 383, 384, 0, 783, 385, 0, 386, + 0, 387, 388, 784, 390, 391, 392, 393, 785, 786, + 396, 787, 0, 397, 398, 399, 0, 400, 0, 401, + 402, 403, 404, 405, 0, 788, 407, 408, 0, 0, + 409, 0, 0, 0, 410, 411, 412, 413, 414, 0, + 0, 415, 416, 417, 418, 419, 0, 420, 421, 0, + 422, 423, 424, 789, 790, 425, 0, 426, 0, 427, + 428, 0, 429, 430, 0, 431, 0, 791, 0, 792, + 433, 434, 435, 436, 437, 438, 793, 794, 441, 442, + 443, 444, 0, 795, 446, 0, 0, 0, 447, 448, + 449, 450, 0, 0, 0, 451, 0, 0, 0, 452, + 0, 453, 454, 455, 456, 457, 458, 0, 459, 460, + 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, + 465, 466, 0, 467, 0, 0, 468, 0, 0, 0, + 469, 470, 471, 0, 0, 0, 472, 796, 797, 473, + 474, 0, 475, 476, 798, 478, 479, 480, 799, 800, + 481, 482, 483, 484, 801, 485, 486, 0, 0, 487, + 488, 489, 490, 0, 802, 491, 492, 0, 803, 804, + 805, 806, 0, 0, 0, 0, 0, 497, 498, 499, + 0, 807, 808, 809, 501, 502, 503, 810, 504, 505, + 811, 506, 507, 0, 508, 509, 0, 0, 510, 0, + 0, 511, 0, 512, 0, 812, 514, 0, 0, 813, + 814, 815, 816, 515, 0, 0, 516, 817, 0, 818, + 517, 518, 519, 520, 521, 819, 820, 0, 0, 0, + 0, 0, 0, 524, 525, 0, 526, 527, 528, 0, + 0, 821, 0, 0, 0, 0, 0, 0, 0, 822, + 823, 0, 0, 0, 0, 824, 825, 0, 0, 826, + 827, 0, 0, 828, 829, 159, 0, 160, 715, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 716, 0, 169, 170, 171, 172, 173, 174, + 175, 717, 177, 0, 178, 0, 0, 718, 179, 719, + 720, 721, 180, 722, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 723, 724, 188, 189, + 0, 190, 725, 726, 192, 193, 0, 194, 195, 196, + 197, 727, 199, 0, 728, 201, 729, 730, 731, 732, + 733, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 734, 221, 0, + 222, 735, 736, 223, 0, 0, 224, 737, 225, 738, + 739, 226, 0, 227, 740, 741, 0, 228, 229, 230, + 742, 743, 744, 0, 0, 0, 0, 745, 233, 746, + 0, 0, 747, 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 2143, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 2437, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 2439, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 2441, 273, 0, 274, 0, 275, 276, 753, 278, + 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 2938, 0, 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, @@ -7709,9839 +6445,7167 @@ 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, + 746, 0, 0, 3828, 234, 0, 235, 0, 0, 0, + 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, + 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, + 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, + 252, 253, 0, 254, 255, 256, 257, 258, 259, 260, + 748, 0, 261, 262, 263, 264, 749, 750, 265, 266, + 0, 267, 268, 269, 751, 0, 270, 0, 0, 0, + 752, 272, 0, 273, 0, 274, 0, 275, 276, 753, + 278, 754, 280, 281, 0, 282, 0, 755, 283, 284, + 285, 0, 286, 756, 757, 0, 287, 288, 0, 0, + 0, 758, 290, 291, 292, 293, 759, 0, 0, 294, + 295, 296, 0, 0, 297, 0, 0, 0, 760, 298, + 299, 761, 0, 0, 300, 0, 301, 302, 0, 303, + 304, 0, 0, 0, 305, 0, 0, 306, 307, 762, + 0, 0, 309, 0, 763, 310, 311, 0, 0, 0, + 0, 0, 764, 313, 0, 314, 0, 315, 0, 316, + 317, 0, 0, 765, 0, 0, 0, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 0, 334, 335, 336, 337, 766, 338, + 339, 340, 341, 767, 342, 343, 344, 0, 0, 0, + 0, 345, 346, 347, 348, 768, 350, 0, 0, 769, + 352, 770, 353, 0, 354, 771, 772, 773, 774, 775, + 359, 360, 361, 362, 363, 364, 0, 776, 365, 0, + 0, 366, 367, 368, 369, 777, 778, 779, 370, 371, + 0, 780, 781, 372, 0, 373, 374, 782, 0, 376, + 377, 378, 379, 0, 380, 381, 0, 0, 0, 0, + 0, 0, 0, 0, 382, 383, 384, 0, 783, 385, + 0, 386, 0, 387, 388, 784, 390, 391, 392, 393, + 785, 786, 396, 787, 0, 397, 398, 399, 0, 400, + 0, 401, 402, 403, 404, 405, 0, 788, 407, 408, + 0, 0, 409, 0, 0, 0, 410, 411, 412, 413, + 414, 0, 0, 415, 416, 417, 418, 419, 0, 420, + 421, 0, 422, 423, 424, 789, 790, 425, 0, 426, + 0, 427, 428, 0, 429, 430, 0, 431, 0, 791, + 0, 792, 433, 434, 435, 436, 437, 438, 793, 794, + 441, 442, 443, 444, 0, 795, 446, 0, 0, 0, + 447, 448, 449, 450, 0, 0, 0, 451, 0, 0, + 0, 452, 0, 453, 454, 455, 456, 457, 458, 0, + 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, + 0, 0, 465, 466, 0, 467, 0, 0, 468, 0, + 0, 0, 469, 470, 471, 0, 0, 0, 472, 796, + 797, 473, 474, 0, 475, 476, 798, 478, 479, 480, + 799, 800, 481, 482, 483, 484, 801, 485, 486, 0, + 0, 487, 488, 489, 490, 0, 802, 491, 492, 0, + 803, 804, 805, 806, 0, 0, 0, 0, 0, 497, + 498, 499, 0, 807, 808, 809, 501, 502, 503, 810, + 504, 505, 811, 506, 507, 0, 508, 509, 0, 0, + 510, 0, 0, 511, 0, 512, 0, 812, 514, 0, + 0, 813, 814, 815, 816, 515, 0, 0, 516, 817, + 0, 818, 517, 518, 519, 520, 521, 819, 820, 0, + 0, 0, 0, 0, 0, 524, 525, 0, 526, 527, + 528, 0, 0, 821, 0, 0, 0, 0, 0, 0, + 0, 822, 823, 0, 0, 0, 0, 824, 825, 0, + 0, 826, 827, 0, 0, 828, 829, 159, 0, 160, + 715, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 716, 0, 169, 170, 171, 172, + 173, 174, 175, 717, 177, 0, 178, 0, 0, 718, + 179, 719, 720, 721, 180, 722, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 723, 724, + 188, 189, 0, 190, 725, 726, 192, 193, 0, 194, + 195, 196, 197, 727, 199, 0, 728, 201, 729, 730, + 731, 732, 733, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 734, + 221, 0, 222, 735, 736, 223, 0, 0, 224, 737, + 225, 738, 739, 226, 0, 227, 740, 741, 0, 228, + 229, 230, 742, 743, 744, 0, 0, 0, 0, 745, + 233, 746, 0, 0, 747, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 748, 0, 261, 262, 263, 264, 749, 750, 265, + 266, 0, 267, 268, 269, 751, 0, 270, 0, 0, + 0, 752, 272, 0, 273, 0, 274, 0, 275, 276, + 753, 278, 754, 280, 281, 0, 282, 0, 755, 283, + 284, 285, 0, 286, 756, 757, 0, 287, 288, 0, + 0, 0, 758, 290, 291, 292, 293, 759, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 760, + 298, 299, 761, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 762, 0, 0, 309, 0, 763, 310, 311, 0, 0, + 0, 0, 0, 764, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 765, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 766, + 338, 339, 340, 341, 767, 342, 343, 344, 4817, 0, + 0, 0, 345, 346, 347, 348, 768, 350, 0, 0, + 769, 352, 770, 353, 0, 354, 771, 772, 773, 774, + 775, 359, 360, 361, 362, 363, 364, 0, 776, 365, + 0, 0, 366, 367, 368, 369, 777, 0, 779, 370, + 371, 0, 780, 781, 372, 0, 373, 374, 782, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 783, + 385, 0, 386, 0, 387, 388, 784, 390, 391, 392, + 393, 785, 786, 396, 787, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 788, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 789, 790, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 791, 0, 792, 433, 434, 435, 436, 437, 438, 793, + 794, 441, 442, 443, 444, 0, 795, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 796, 797, 473, 474, 0, 475, 476, 798, 478, 479, + 480, 799, 800, 481, 482, 483, 484, 801, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 802, 491, 492, + 0, 803, 804, 805, 806, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 807, 808, 809, 501, 502, 503, + 810, 504, 505, 811, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 812, 514, + 0, 0, 813, 814, 815, 816, 515, 0, 0, 516, + 817, 0, 818, 517, 518, 519, 520, 521, 819, 820, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 0, 821, 0, 0, 0, 0, 0, + 0, 0, 822, 823, 0, 0, 0, 0, 824, 825, + 0, 0, 826, 827, 0, 0, 828, 829, 159, 0, + 160, 715, 162, 163, 164, 165, 0, 0, 166, 0, + 0, 0, 167, 0, 0, 716, 0, 169, 170, 171, + 172, 173, 174, 175, 717, 177, 0, 178, 0, 0, + 718, 179, 719, 720, 721, 180, 722, 0, 181, 182, + 183, 0, 184, 0, 185, 186, 0, 0, 187, 723, + 724, 188, 189, 0, 190, 725, 726, 192, 193, 0, + 194, 195, 196, 197, 727, 199, 0, 728, 201, 729, + 730, 731, 732, 733, 0, 207, 208, 209, 210, 211, + 212, 213, 214, 0, 215, 216, 0, 217, 218, 219, + 734, 221, 0, 222, 735, 736, 223, 0, 0, 224, + 737, 225, 738, 739, 226, 0, 227, 740, 741, 0, + 228, 229, 230, 742, 743, 744, 0, 0, 0, 0, + 745, 233, 746, 0, 0, 747, 234, 0, 235, 0, + 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, + 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, + 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, + 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, + 259, 260, 748, 0, 261, 262, 263, 264, 749, 750, + 265, 266, 0, 267, 268, 269, 751, 0, 270, 0, + 0, 0, 752, 272, 0, 273, 0, 274, 0, 275, + 276, 753, 278, 754, 280, 281, 0, 282, 0, 755, + 283, 284, 285, 0, 286, 756, 757, 0, 287, 288, + 0, 0, 0, 758, 290, 291, 292, 293, 759, 0, + 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, + 760, 298, 299, 761, 0, 0, 300, 0, 301, 302, + 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, + 307, 762, 0, 0, 309, 0, 763, 310, 311, 0, + 0, 0, 0, 0, 764, 313, 0, 314, 0, 315, + 0, 316, 317, 0, 0, 765, 0, 0, 0, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, + 766, 338, 339, 340, 341, 767, 342, 343, 344, 0, + 0, 0, 0, 345, 346, 347, 348, 768, 350, 0, + 0, 769, 352, 770, 353, 0, 354, 771, 772, 773, + 774, 775, 359, 360, 361, 362, 363, 364, 0, 776, + 365, 0, 0, 366, 367, 368, 369, 777, 0, 779, + 370, 371, 0, 780, 781, 372, 0, 373, 374, 782, + 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, + 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, + 783, 385, 0, 386, 0, 387, 388, 784, 390, 391, + 392, 393, 785, 786, 396, 787, 0, 397, 398, 399, + 0, 400, 0, 401, 402, 403, 404, 405, 0, 788, + 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, + 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, + 0, 420, 421, 0, 422, 423, 424, 789, 790, 425, + 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, + 0, 791, 0, 792, 433, 434, 435, 436, 437, 438, + 793, 794, 441, 442, 443, 444, 0, 795, 446, 0, + 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, + 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, + 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, + 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, + 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, + 472, 796, 797, 473, 474, 0, 475, 476, 798, 478, + 479, 480, 799, 800, 481, 482, 483, 484, 801, 485, + 486, 0, 0, 487, 488, 489, 490, 0, 802, 491, + 492, 0, 803, 804, 805, 806, 0, 0, 0, 0, + 0, 497, 498, 499, 0, 807, 808, 809, 501, 502, + 503, 810, 504, 505, 811, 506, 507, 0, 508, 509, + 0, 0, 510, 0, 0, 511, 0, 512, 0, 812, + 514, 0, 0, 813, 814, 815, 816, 515, 0, 0, + 516, 817, 0, 818, 517, 518, 519, 520, 521, 819, + 820, 0, 0, 0, 0, 0, 0, 524, 525, 0, + 526, 527, 528, 0, 0, 821, 0, 0, 0, 0, + 0, 0, 0, 822, 823, 0, 0, 0, 0, 824, + 825, 0, 0, 826, 827, 0, 0, 828, 829, 159, + 0, 160, 715, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 716, 0, 169, 170, + 171, 172, 173, 174, 175, 717, 177, 0, 178, 0, + 0, 718, 179, 719, 720, 721, 180, 722, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 723, 724, 188, 189, 0, 190, 725, 726, 192, 193, + 0, 194, 195, 196, 197, 727, 199, 0, 728, 201, + 729, 730, 731, 732, 733, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 734, 221, 0, 222, 735, 736, 223, 0, 0, + 224, 737, 225, 738, 739, 226, 0, 227, 740, 741, + 0, 228, 229, 230, 742, 743, 744, 0, 0, 0, + 0, 745, 233, 746, 0, 0, 747, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 748, 0, 261, 262, 263, 264, 749, + 750, 265, 266, 0, 267, 268, 269, 751, 0, 270, + 0, 0, 0, 752, 272, 0, 273, 0, 274, 0, + 275, 276, 753, 278, 754, 280, 281, 0, 282, 0, + 755, 283, 284, 285, 0, 286, 756, 757, 0, 287, + 288, 0, 0, 0, 758, 290, 291, 292, 293, 759, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 760, 298, 299, 1918, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 762, 0, 0, 309, 0, 763, 310, 311, + 0, 0, 0, 0, 0, 764, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 765, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 766, 338, 339, 340, 341, 767, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 768, 350, + 0, 0, 769, 352, 770, 353, 0, 354, 771, 772, + 773, 774, 775, 359, 360, 361, 362, 363, 364, 0, + 776, 365, 0, 0, 366, 367, 368, 369, 777, 0, + 779, 370, 371, 0, 780, 781, 372, 0, 373, 374, + 782, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 783, 385, 0, 386, 0, 387, 388, 784, 390, + 391, 392, 393, 785, 786, 396, 787, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 788, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 789, 790, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 791, 0, 792, 433, 434, 435, 436, 437, + 438, 793, 794, 441, 442, 443, 444, 0, 795, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 796, 797, 473, 474, 0, 475, 476, 798, + 478, 479, 480, 799, 800, 481, 482, 483, 484, 801, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 802, + 491, 492, 0, 803, 804, 805, 806, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 807, 808, 809, 501, + 502, 503, 810, 504, 505, 811, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 812, 514, 0, 0, 813, 814, 815, 816, 515, 0, + 0, 516, 817, 0, 818, 517, 518, 519, 520, 521, + 819, 820, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 0, 821, 0, 0, 0, + 0, 0, 0, 0, 822, 823, 0, 0, 0, 0, + 824, 825, 0, 0, 826, 827, 0, 0, 828, 829, + 159, 0, 160, 715, 162, 163, 164, 165, 0, 0, + 166, 0, 0, 0, 167, 0, 0, 716, 0, 169, + 170, 171, 172, 173, 174, 175, 717, 177, 0, 178, + 0, 0, 718, 179, 719, 720, 721, 180, 722, 0, + 181, 182, 183, 0, 184, 0, 185, 186, 0, 0, + 187, 723, 724, 188, 189, 0, 190, 725, 726, 192, + 193, 0, 194, 195, 196, 197, 727, 199, 0, 728, + 201, 729, 730, 731, 732, 733, 0, 207, 208, 209, + 210, 211, 212, 213, 214, 0, 215, 216, 0, 217, + 218, 219, 734, 221, 0, 222, 735, 736, 223, 0, + 0, 224, 737, 225, 738, 739, 226, 0, 227, 740, + 741, 0, 228, 229, 230, 742, 743, 744, 0, 0, + 0, 0, 745, 233, 746, 0, 0, 747, 234, 0, + 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, + 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, + 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, + 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, + 257, 258, 259, 260, 748, 0, 261, 262, 263, 264, + 749, 750, 265, 266, 0, 267, 268, 269, 751, 0, + 270, 0, 0, 0, 752, 272, 0, 273, 0, 274, + 0, 275, 276, 753, 278, 754, 280, 281, 0, 282, + 0, 755, 283, 284, 285, 0, 286, 756, 757, 0, + 287, 288, 0, 0, 0, 758, 290, 291, 292, 293, + 759, 0, 0, 294, 295, 296, 0, 0, 297, 0, + 0, 0, 760, 298, 299, 1920, 0, 0, 300, 0, + 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, + 0, 306, 307, 762, 0, 0, 309, 0, 763, 310, + 311, 0, 0, 0, 0, 0, 764, 313, 0, 314, + 0, 315, 0, 316, 317, 0, 0, 765, 0, 0, + 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, + 336, 337, 766, 338, 339, 340, 341, 767, 342, 343, + 344, 0, 0, 0, 0, 345, 346, 347, 348, 768, + 350, 0, 0, 769, 352, 770, 353, 0, 354, 771, + 772, 773, 774, 775, 359, 360, 361, 362, 363, 364, + 0, 776, 365, 0, 0, 366, 367, 368, 369, 777, + 0, 779, 370, 371, 0, 780, 781, 372, 0, 373, + 374, 782, 0, 376, 377, 378, 379, 0, 380, 381, + 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, + 384, 0, 783, 385, 0, 386, 0, 387, 388, 784, + 390, 391, 392, 393, 785, 786, 396, 787, 0, 397, + 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, + 0, 788, 407, 408, 0, 0, 409, 0, 0, 0, + 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, + 418, 419, 0, 420, 421, 0, 422, 423, 424, 789, + 790, 425, 0, 426, 0, 427, 428, 0, 429, 430, + 0, 431, 0, 791, 0, 792, 433, 434, 435, 436, + 437, 438, 793, 794, 441, 442, 443, 444, 0, 795, + 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, + 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, + 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, + 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, + 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, + 0, 0, 472, 796, 797, 473, 474, 0, 475, 476, + 798, 478, 479, 480, 799, 800, 481, 482, 483, 484, + 801, 485, 486, 0, 0, 487, 488, 489, 490, 0, + 802, 491, 492, 0, 803, 804, 805, 806, 0, 0, + 0, 0, 0, 497, 498, 499, 0, 807, 808, 809, + 501, 502, 503, 810, 504, 505, 811, 506, 507, 0, + 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, + 0, 812, 514, 0, 0, 813, 814, 815, 816, 515, + 0, 0, 516, 817, 0, 818, 517, 518, 519, 520, + 521, 819, 820, 0, 0, 0, 0, 0, 0, 524, + 525, 0, 526, 527, 528, 0, 0, 821, 0, 0, + 0, 0, 0, 0, 0, 822, 823, 0, 0, 0, + 0, 824, 825, 0, 0, 826, 827, 0, 0, 828, + 829, 159, 0, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 719, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 1963, 0, + 0, 0, 0, 232, 233, 746, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 750, 265, 266, 0, 267, 268, 269, 751, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 756, 757, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 765, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 776, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 780, 781, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 802, 491, 492, 0, 1964, 494, 495, 1965, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 808, + 500, 501, 502, 503, 810, 504, 505, 811, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 0, 529, 0, + 0, 0, 0, 0, 0, 159, 0, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 828, 829, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 3213, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 640, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 2280, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 2281, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 3593, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 2585, 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 460, 461, 462, 463, 464, 642, 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 1231, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 1903, 0, 166, 0, 0, 0, - 1904, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 0, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, + 0, 0, 529, 0, 0, 0, 0, 159, 0, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 3285, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 3213, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 640, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 2280, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 2281, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 642, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 0, 529, 0, 0, 0, 0, 159, + 0, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 3285, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 2585, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 0, 529, 0, 0, 0, + 0, 159, 0, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 3063, 0, 0, 167, 0, 0, 168, 829, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 0, 529, 0, + 0, 0, 0, 0, 0, 159, 0, 160, 161, 162, + 163, 164, 165, 0, 4881, 166, 0, 0, 0, 167, + 4882, 829, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 2010, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 2884, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 2936, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 3821, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 778, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 4807, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 0, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 761, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 0, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 1918, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 0, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 715, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 716, 0, 169, 170, 171, 172, 173, - 174, 175, 717, 177, 0, 178, 0, 0, 718, 179, - 719, 720, 721, 180, 722, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 723, 724, 188, - 189, 0, 190, 725, 726, 192, 193, 0, 194, 195, - 196, 197, 727, 199, 0, 728, 201, 729, 730, 731, - 732, 733, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 734, 221, - 0, 222, 735, 736, 223, 0, 0, 224, 737, 225, - 738, 739, 226, 0, 227, 740, 741, 0, 228, 229, - 230, 742, 743, 744, 0, 0, 0, 0, 745, 233, - 746, 0, 0, 747, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 748, - 0, 261, 262, 263, 264, 749, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 752, - 272, 0, 273, 0, 274, 0, 275, 276, 753, 278, - 754, 280, 281, 0, 282, 0, 755, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 758, 290, 291, 292, 293, 759, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 760, 298, 299, - 1920, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 762, 0, - 0, 309, 0, 763, 310, 311, 0, 0, 0, 0, - 0, 764, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 766, 338, 339, - 340, 341, 767, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 768, 350, 0, 0, 769, 352, - 770, 353, 0, 354, 771, 772, 773, 774, 775, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 777, 0, 779, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 782, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 783, 385, 0, - 386, 0, 387, 388, 784, 390, 391, 392, 393, 785, - 786, 396, 787, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 788, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 789, 790, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 791, 0, - 792, 433, 434, 435, 436, 437, 438, 793, 794, 441, - 442, 443, 444, 0, 795, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 796, 797, - 473, 474, 0, 475, 476, 798, 478, 479, 480, 799, - 800, 481, 482, 483, 484, 801, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 803, - 804, 805, 806, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 807, 808, 809, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 812, 514, 0, 0, - 813, 814, 815, 816, 515, 0, 0, 516, 817, 0, - 818, 517, 518, 519, 520, 521, 819, 820, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 822, 823, 0, 0, 0, 0, 824, 825, 0, 0, - 826, 827, 0, 0, 828, 829, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 0, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 719, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 1963, 0, 0, 0, 0, 232, 233, - 746, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 750, 265, 266, 0, - 267, 268, 269, 751, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 756, 757, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 765, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 776, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 780, 781, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 802, 491, 492, 0, 1964, - 494, 495, 1965, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 808, 500, 501, 502, 503, 810, 504, - 505, 811, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 0, 0, 0, 159, - 0, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 828, 829, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 3210, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 640, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 2280, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 2281, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 3589, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 2583, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 642, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 0, 529, 0, 0, 0, 0, - 159, 0, 160, 161, 162, 163, 164, 165, 0, 0, - 166, 0, 0, 0, 167, 0, 0, 168, 3282, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 0, 178, - 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, - 181, 182, 183, 0, 184, 0, 185, 186, 0, 0, - 187, 0, 0, 188, 189, 0, 190, 191, 0, 192, - 193, 0, 194, 195, 196, 197, 198, 199, 0, 200, - 201, 202, 203, 204, 205, 206, 0, 207, 208, 209, - 210, 211, 212, 213, 214, 0, 215, 216, 3210, 217, - 218, 219, 220, 221, 0, 222, 0, 0, 223, 0, - 0, 224, 0, 225, 0, 0, 226, 0, 227, 0, - 0, 0, 228, 229, 230, 0, 0, 231, 0, 0, - 0, 0, 232, 233, 0, 0, 0, 0, 234, 0, - 235, 0, 0, 0, 236, 0, 237, 238, 239, 240, - 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, - 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, - 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, - 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, - 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, - 0, 0, 0, 271, 272, 0, 273, 640, 274, 0, - 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, - 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, - 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, - 0, 0, 294, 295, 296, 2280, 0, 297, 0, 0, - 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, - 302, 0, 303, 304, 0, 0, 0, 305, 2281, 0, - 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, - 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, - 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, - 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, - 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, - 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, - 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, - 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, - 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, - 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, - 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, - 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, - 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, - 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, - 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, - 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, - 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, - 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, - 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, - 457, 458, 0, 459, 460, 461, 462, 463, 464, 642, - 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, - 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, - 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, - 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, - 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, - 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, - 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, - 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, - 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, - 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, - 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, - 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, - 0, 526, 527, 528, 0, 0, 529, 0, 0, 0, - 0, 159, 0, 160, 161, 162, 163, 164, 165, 0, - 0, 166, 0, 0, 0, 167, 0, 0, 168, 3282, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, - 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, - 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, - 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, - 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, - 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, - 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, - 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, - 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, - 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, - 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, - 0, 235, 0, 0, 0, 236, 0, 237, 238, 239, - 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, - 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, - 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, - 257, 258, 259, 260, 0, 0, 261, 262, 263, 264, - 0, 0, 265, 266, 0, 267, 268, 269, 0, 0, - 270, 0, 0, 0, 271, 272, 0, 273, 0, 274, - 0, 275, 276, 277, 278, 279, 280, 281, 0, 282, - 0, 0, 283, 284, 285, 0, 286, 0, 0, 0, - 287, 288, 0, 0, 0, 289, 290, 291, 292, 293, - 0, 0, 0, 294, 295, 296, 0, 0, 297, 0, - 0, 0, 0, 298, 299, 0, 0, 0, 300, 0, - 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, - 0, 306, 307, 308, 0, 0, 309, 0, 0, 310, - 311, 0, 0, 0, 0, 0, 312, 313, 0, 314, - 0, 315, 0, 316, 317, 0, 0, 0, 0, 0, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, - 336, 337, 0, 338, 339, 340, 341, 0, 342, 343, - 344, 0, 0, 0, 0, 345, 346, 347, 348, 349, - 350, 0, 0, 351, 352, 0, 353, 0, 354, 0, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 0, 0, 365, 0, 0, 366, 367, 368, 369, 0, - 0, 0, 370, 371, 0, 0, 0, 372, 0, 373, - 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, - 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, - 384, 0, 0, 385, 0, 386, 0, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 0, 397, - 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, - 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, - 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, - 418, 419, 0, 420, 421, 0, 422, 423, 424, 0, - 0, 425, 0, 426, 0, 427, 428, 0, 429, 430, - 0, 431, 0, 432, 0, 0, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 0, 445, - 446, 2583, 0, 0, 447, 448, 449, 450, 0, 0, - 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, - 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, - 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, - 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, - 0, 0, 472, 0, 0, 473, 474, 0, 475, 476, - 477, 478, 479, 480, 0, 0, 481, 482, 483, 484, - 0, 485, 486, 0, 0, 487, 488, 489, 490, 0, - 0, 491, 492, 0, 493, 494, 495, 496, 0, 0, - 0, 0, 0, 497, 498, 499, 0, 0, 0, 500, - 501, 502, 503, 0, 504, 505, 0, 506, 507, 0, - 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, - 0, 513, 514, 0, 0, 0, 0, 0, 0, 515, - 0, 0, 516, 0, 0, 0, 517, 518, 519, 520, - 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, - 525, 0, 526, 527, 528, 0, 0, 529, 0, 0, - 0, 0, 159, 0, 160, 161, 162, 163, 164, 165, - 0, 0, 166, 3060, 0, 0, 167, 0, 0, 168, - 829, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 0, 178, 0, 0, 0, 179, 0, 0, 0, 180, - 0, 0, 181, 182, 183, 0, 184, 0, 185, 186, - 0, 0, 187, 0, 0, 188, 189, 0, 190, 191, - 0, 192, 193, 0, 194, 195, 196, 197, 198, 199, - 0, 200, 201, 202, 203, 204, 205, 206, 0, 207, - 208, 209, 210, 211, 212, 213, 214, 0, 215, 216, - 0, 217, 218, 219, 220, 221, 0, 222, 0, 0, - 223, 0, 0, 224, 0, 225, 0, 0, 226, 0, - 227, 0, 0, 0, 228, 229, 230, 0, 0, 231, - 0, 0, 0, 0, 232, 233, 0, 0, 0, 0, - 234, 0, 235, 0, 0, 0, 236, 0, 237, 238, - 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, - 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, - 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, - 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, - 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, - 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, - 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, - 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, - 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, - 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, - 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, - 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, - 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, - 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, - 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, - 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, - 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, - 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, - 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, - 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, - 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, - 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, - 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, - 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, - 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, - 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, - 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, - 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, - 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, - 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, - 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, - 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, - 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, - 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, - 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, - 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, - 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, - 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, - 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, - 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, - 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, - 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, - 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, - 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, - 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, - 524, 525, 0, 526, 527, 528, 0, 0, 529, 0, - 0, 0, 0, 0, 0, 159, 0, 160, 161, 162, - 163, 164, 165, 0, 4871, 166, 0, 0, 0, 167, - 4872, 829, 168, 0, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, - 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, - 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, - 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, - 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, - 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, - 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, - 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, - 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, - 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, - 0, 0, 0, 234, 0, 235, 0, 0, 0, 236, - 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, - 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, - 0, 247, 248, 0, 249, 250, 251, 0, 252, 253, - 0, 254, 255, 256, 257, 258, 259, 260, 0, 0, - 261, 262, 263, 264, 0, 0, 265, 266, 0, 267, - 268, 269, 0, 0, 270, 0, 0, 0, 271, 272, - 0, 273, 0, 274, 0, 275, 276, 277, 278, 279, - 280, 281, 0, 282, 0, 0, 283, 284, 285, 0, - 286, 0, 0, 0, 287, 288, 0, 0, 0, 289, - 290, 291, 292, 293, 0, 0, 0, 294, 295, 296, - 0, 0, 297, 0, 0, 0, 0, 298, 299, 0, - 0, 0, 300, 0, 301, 302, 0, 303, 304, 0, - 0, 0, 305, 0, 0, 306, 307, 308, 0, 0, - 309, 0, 0, 310, 311, 0, 0, 0, 0, 0, - 312, 313, 0, 314, 0, 315, 0, 316, 317, 0, - 0, 0, 0, 0, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 0, 334, 335, 336, 337, 0, 338, 339, 340, - 341, 0, 342, 343, 344, 0, 0, 0, 0, 345, - 346, 347, 348, 349, 350, 0, 0, 351, 352, 0, - 353, 0, 354, 0, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 0, 0, 365, 0, 0, 366, - 367, 368, 369, 0, 0, 0, 370, 371, 0, 0, - 0, 372, 0, 373, 374, 375, 0, 376, 377, 378, - 379, 0, 380, 381, 0, 0, 0, 0, 0, 0, - 0, 0, 382, 383, 384, 0, 0, 385, 0, 386, - 0, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 0, 0, 397, 398, 399, 0, 400, 0, 401, - 402, 403, 404, 405, 0, 406, 407, 408, 0, 0, - 409, 0, 0, 0, 410, 411, 412, 413, 414, 0, - 0, 415, 416, 417, 418, 419, 0, 420, 421, 0, - 422, 423, 424, 0, 0, 425, 0, 426, 0, 427, - 428, 0, 429, 430, 0, 431, 0, 432, 0, 0, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 0, 445, 446, 0, 0, 0, 447, 448, - 449, 450, 0, 0, 0, 451, 0, 0, 0, 452, - 0, 453, 454, 455, 456, 457, 458, 0, 459, 460, - 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, - 465, 466, 0, 467, 0, 0, 468, 0, 0, 0, - 469, 470, 471, 0, 0, 0, 472, 0, 0, 473, - 474, 0, 475, 476, 477, 478, 479, 480, 0, 0, - 481, 482, 483, 484, 0, 485, 486, 0, 0, 487, - 488, 489, 490, 0, 0, 491, 492, 0, 493, 494, - 495, 496, 0, 0, 0, 0, 0, 497, 498, 499, - 0, 0, 0, 500, 501, 502, 503, 0, 504, 505, - 0, 506, 507, 0, 508, 509, 0, 0, 510, 0, - 0, 511, 0, 512, 0, 513, 514, 0, 0, 0, - 0, 0, 0, 515, 0, 0, 516, 0, 0, 0, - 517, 518, 519, 520, 521, 522, 523, 0, 0, 0, - 0, 0, 0, 524, 525, 0, 526, 527, 528, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 159, 0, - 160, 161, 162, 163, 164, 165, 1236, 0, 166, 0, - 0, 0, 167, 0, 829, 168, 0, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 0, 178, 0, 0, - 0, 179, 0, 0, 0, 180, 0, 0, 181, 182, - 183, 0, 184, 0, 185, 186, 0, 0, 187, 0, - 0, 188, 189, 0, 190, 191, 0, 192, 193, 0, - 194, 195, 196, 197, 198, 199, 0, 200, 201, 202, - 203, 204, 205, 206, 0, 207, 208, 209, 210, 211, - 212, 213, 214, 0, 215, 216, 0, 217, 218, 219, - 220, 221, 0, 222, 0, 0, 223, 0, 0, 224, - 0, 225, 0, 0, 226, 0, 227, 0, 0, 0, - 228, 229, 230, 0, 0, 231, 0, 0, 0, 0, - 232, 233, 0, 0, 0, 0, 234, 0, 235, 0, - 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, - 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, - 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, - 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, - 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, - 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, - 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, - 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, - 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, - 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, - 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, - 298, 299, 0, 1468, 0, 300, 0, 301, 302, 0, - 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, - 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, - 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, - 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, - 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, - 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, - 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, - 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, - 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, - 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, - 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, - 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, - 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, - 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, - 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, - 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, - 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, - 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, - 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, - 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, - 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, - 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, - 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, - 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, - 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, - 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, - 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, - 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, - 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, - 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, - 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, - 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, - 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, - 527, 528, 0, 0, 529, 0, 0, 0, 0, 159, - 0, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 567, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2524, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 567, 0, - 167, 0, 0, 168, 0, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 0, 0, 0, 159, - 0, 160, 161, 162, 163, 164, 165, 3281, 0, 166, - 0, 0, 0, 167, 0, 3282, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 0, 529, 0, 0, 0, 0, - 0, 0, 159, 0, 160, 161, 162, 163, 164, 165, - 0, 0, 166, 0, 0, 0, 167, 4872, 829, 168, - 0, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 0, 178, 0, 0, 0, 179, 0, 0, 0, 180, - 0, 0, 181, 182, 183, 0, 184, 0, 185, 186, - 0, 0, 187, 0, 0, 188, 189, 0, 190, 191, - 0, 192, 193, 0, 194, 195, 196, 197, 198, 199, - 0, 200, 201, 202, 203, 204, 205, 206, 0, 207, - 208, 209, 210, 211, 212, 213, 214, 0, 215, 216, - 0, 217, 218, 219, 220, 221, 0, 222, 0, 0, - 223, 0, 0, 224, 0, 225, 0, 0, 226, 0, - 227, 0, 0, 0, 228, 229, 230, 0, 0, 231, - 0, 0, 0, 0, 232, 233, 0, 0, 0, 0, - 234, 0, 235, 0, 0, 0, 236, 0, 237, 238, - 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, - 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, - 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, - 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, - 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, - 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, - 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, - 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, - 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, - 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, - 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, - 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, - 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, - 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, - 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, - 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, - 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, - 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, - 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, - 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, - 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, - 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, - 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, - 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, - 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, - 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, - 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, - 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, - 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, - 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, - 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, - 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, - 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, - 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, - 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, - 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, - 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, - 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, - 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, - 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, - 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, - 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, - 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, - 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, - 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, - 524, 525, 0, 526, 527, 528, 0, 0, 529, 0, - 0, 0, 0, 159, 0, 160, 161, 162, 163, 164, - 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, - 168, 567, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, - 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, - 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, - 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, - 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, - 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, - 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, - 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, - 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, - 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, - 0, 234, 0, 235, 0, 0, 0, 236, 0, 237, - 238, 239, 240, 241, 0, 0, 0, 0, 242, 0, - 0, 243, 244, 245, 0, 0, 0, 246, 0, 247, - 248, 0, 249, 250, 251, 0, 252, 253, 0, 254, - 255, 256, 257, 258, 259, 260, 0, 0, 261, 262, - 651, 264, 0, 0, 265, 266, 0, 267, 268, 269, - 0, 0, 270, 0, 0, 0, 652, 272, 0, 273, - 0, 274, 0, 275, 276, 277, 278, 279, 280, 281, - 0, 282, 0, 0, 283, 284, 285, 0, 286, 0, - 0, 0, 287, 288, 0, 0, 0, 289, 290, 291, - 292, 293, 0, 0, 0, 294, 295, 296, 0, 0, - 297, 0, 0, 0, 0, 298, 299, 0, 0, 0, - 300, 0, 301, 302, 0, 303, 304, 0, 0, 0, - 305, 0, 0, 306, 307, 308, 0, 0, 309, 0, - 0, 310, 311, 0, 0, 0, 0, 0, 312, 313, - 0, 314, 0, 315, 0, 316, 317, 0, 0, 0, - 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 0, - 334, 335, 336, 337, 0, 338, 339, 340, 341, 0, - 342, 343, 344, 0, 0, 0, 0, 345, 346, 347, - 348, 349, 350, 0, 0, 351, 352, 0, 353, 0, - 354, 0, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 0, 0, 365, 0, 0, 366, 367, 368, - 369, 0, 0, 0, 370, 371, 0, 0, 0, 372, - 0, 373, 374, 375, 0, 376, 377, 378, 379, 0, - 380, 381, 0, 0, 0, 0, 0, 0, 0, 0, - 382, 383, 384, 0, 0, 385, 0, 386, 0, 653, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, - 0, 397, 398, 399, 0, 400, 0, 401, 402, 403, - 404, 405, 0, 406, 407, 408, 0, 0, 409, 0, - 0, 0, 410, 411, 412, 413, 414, 0, 0, 415, - 416, 417, 418, 419, 0, 420, 421, 0, 422, 423, - 424, 0, 0, 425, 0, 426, 0, 427, 428, 0, - 429, 430, 0, 431, 0, 432, 0, 0, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 0, 445, 446, 0, 0, 0, 447, 448, 449, 450, - 0, 0, 0, 451, 0, 0, 0, 452, 0, 453, - 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, - 463, 464, 0, 0, 0, 0, 0, 0, 465, 466, - 0, 467, 0, 0, 468, 0, 0, 0, 469, 470, - 471, 0, 0, 0, 472, 0, 0, 473, 474, 0, - 475, 476, 477, 478, 479, 480, 0, 0, 481, 482, - 483, 484, 0, 485, 486, 0, 0, 487, 488, 489, - 490, 0, 0, 491, 492, 0, 493, 494, 495, 496, - 0, 0, 0, 0, 0, 497, 498, 499, 0, 0, - 0, 500, 501, 502, 503, 0, 504, 505, 0, 506, - 507, 0, 508, 509, 0, 0, 510, 0, 0, 511, - 0, 512, 0, 513, 514, 0, 0, 0, 0, 0, - 0, 515, 0, 0, 516, 0, 0, 0, 517, 518, - 519, 520, 521, 522, 523, 0, 0, 0, 0, 0, - 0, 524, 525, 0, 526, 527, 528, 0, 0, 529, - 0, 0, 0, 0, 159, 0, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 567, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 0, - 529, 0, 0, 0, 0, 159, 0, 160, 161, 162, - 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, - 0, 0, 168, 829, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, - 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, - 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, - 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, - 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, - 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, - 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, - 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, - 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, - 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, - 0, 0, 0, 234, 0, 235, 0, 0, 0, 236, - 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, - 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, - 0, 247, 248, 0, 249, 250, 251, 0, 252, 253, - 0, 254, 255, 256, 257, 258, 259, 260, 0, 0, - 261, 262, 263, 264, 0, 0, 265, 266, 0, 267, - 268, 269, 0, 0, 270, 0, 0, 0, 271, 272, - 0, 273, 0, 274, 0, 275, 276, 277, 278, 279, - 280, 281, 0, 282, 0, 0, 283, 284, 285, 0, - 286, 0, 0, 0, 287, 288, 0, 0, 0, 289, - 290, 291, 292, 293, 0, 0, 0, 294, 295, 296, - 0, 0, 297, 0, 0, 0, 0, 298, 299, 0, - 0, 0, 300, 0, 301, 302, 0, 303, 304, 0, - 0, 0, 305, 0, 0, 306, 307, 308, 0, 0, - 309, 0, 0, 310, 311, 0, 0, 0, 0, 0, - 312, 313, 0, 314, 0, 315, 0, 316, 317, 0, - 0, 0, 0, 0, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 0, 334, 335, 336, 337, 0, 338, 339, 340, - 341, 0, 342, 343, 344, 0, 0, 0, 0, 345, - 346, 347, 348, 349, 350, 0, 0, 351, 352, 0, - 353, 0, 354, 0, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 0, 0, 365, 0, 0, 366, - 367, 368, 369, 0, 0, 0, 370, 371, 0, 0, - 0, 372, 0, 373, 374, 375, 0, 376, 377, 378, - 379, 0, 380, 381, 0, 0, 0, 0, 0, 0, - 0, 0, 382, 383, 384, 0, 0, 385, 0, 386, - 0, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 0, 0, 397, 398, 399, 0, 400, 0, 401, - 402, 403, 404, 405, 0, 406, 407, 408, 0, 0, - 409, 0, 0, 0, 410, 411, 412, 413, 414, 0, - 0, 415, 416, 417, 418, 419, 0, 420, 421, 0, - 422, 423, 424, 0, 0, 425, 0, 426, 0, 427, - 428, 0, 429, 430, 0, 431, 0, 432, 0, 0, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 0, 445, 446, 0, 0, 0, 447, 448, - 449, 450, 0, 0, 0, 451, 0, 0, 0, 452, - 0, 453, 454, 455, 456, 457, 458, 0, 459, 460, - 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, - 465, 466, 0, 467, 0, 0, 468, 0, 0, 0, - 469, 470, 471, 0, 0, 0, 472, 0, 0, 473, - 474, 0, 475, 476, 477, 478, 479, 480, 0, 0, - 481, 482, 483, 484, 0, 485, 486, 0, 0, 487, - 488, 489, 490, 0, 0, 491, 492, 0, 493, 494, - 495, 496, 0, 0, 0, 0, 0, 497, 498, 499, - 0, 0, 0, 500, 501, 502, 503, 0, 504, 505, - 0, 506, 507, 0, 508, 509, 0, 0, 510, 0, - 0, 511, 0, 512, 0, 513, 514, 0, 0, 0, - 0, 0, 0, 515, 0, 0, 516, 0, 0, 0, - 517, 518, 519, 520, 521, 522, 523, 0, 0, 0, - 0, 0, 0, 524, 525, 0, 526, 527, 528, 0, - 0, 529, 0, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 3282, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 1008, 1009, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 1010, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 1011, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 1012, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 1013, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 1014, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 1015, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 1016, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 1017, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 1018, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 665, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 156, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 1539, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 665, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 156, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 1890, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 665, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 156, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 2614, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 1008, 1009, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 1010, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 1011, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 1012, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 1013, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 1014, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 1015, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 1016, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 1018, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 1379, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 168, 1380, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 0, 0, 1380, 169, 170, 171, 172, 173, - 174, 175, 176, 0, 0, 923, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 0, 0, 0, 0, 187, 7, 0, 188, - 189, 0, 190, 0, 0, 0, 0, 0, 194, 195, - 196, 924, 198, 199, 0, 200, 201, 0, 0, 0, - 0, 0, 0, 207, 0, 209, 0, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 0, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 0, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 0, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 0, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 0, 0, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 925, - 267, 268, 269, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 0, 281, 0, 282, 0, 0, 0, 284, 285, - 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 26, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 0, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 926, 0, 0, 305, 0, 0, 0, 307, 308, 0, - 0, 309, 927, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 32, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 0, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 928, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 383, 384, 0, 0, 0, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 0, 0, 0, 0, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 0, - 0, 422, 0, 424, 41, 0, 425, 0, 0, 0, - 427, 0, 0, 429, 430, 0, 431, 929, 432, 0, - 0, 433, 0, 435, 436, 437, 438, 439, 440, 441, - 0, 443, 444, 0, 445, 0, 0, 0, 0, 447, - 448, 449, 0, 0, 0, 0, 451, 0, 0, 0, - 0, 0, 0, 454, 0, 0, 457, 458, 0, 459, - 0, 461, 0, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 0, 471, 0, 0, 0, 472, 0, 0, - 0, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 0, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 0, 0, 0, 0, 510, - 0, 0, 511, 0, 0, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 60, 0, 0, 0, 524, 0, 0, 526, 0, 528, - 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, - 0, 166, 0, 0, 0, 167, 0, 0, 168, 4568, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, - 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, - 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, - 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, - 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, - 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, - 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, - 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, - 0, 0, 224, 0, 225, 1122, 0, 226, 0, 227, - 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, - 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, - 0, 235, 0, 0, 0, 236, 0, 237, 238, 239, - 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, - 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, - 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, - 257, 258, 259, 260, 0, 0, 261, 262, 263, 264, - 0, 0, 265, 266, 0, 267, 268, 269, 0, 0, - 270, 0, 0, 0, 271, 272, 0, 273, 0, 274, - 0, 275, 276, 277, 278, 279, 280, 281, 0, 282, - 0, 0, 283, 284, 285, 0, 286, 0, 0, 0, - 287, 288, 0, 0, 0, 289, 290, 291, 292, 293, - 0, 0, 0, 294, 295, 296, 0, 0, 297, 0, - 0, 0, 0, 298, 299, 0, 0, 0, 300, 0, - 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, - 0, 306, 307, 308, 0, 0, 309, 0, 0, 310, - 311, 665, 0, 0, 0, 0, 312, 313, 0, 314, - 0, 315, 0, 316, 317, 0, 0, 0, 0, 0, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, - 336, 337, 0, 338, 339, 340, 341, 0, 342, 343, - 344, 0, 0, 0, 0, 345, 346, 347, 348, 349, - 350, 0, 0, 351, 352, 0, 353, 0, 354, 0, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 0, 0, 365, 0, 0, 366, 367, 368, 369, 0, - 0, 0, 370, 371, 0, 0, 0, 372, 0, 373, - 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, - 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, - 384, 0, 0, 385, 0, 386, 0, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 0, 397, - 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, - 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, - 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, - 418, 419, 0, 420, 421, 0, 422, 423, 424, 0, - 0, 425, 0, 426, 0, 427, 428, 0, 429, 430, - 0, 431, 0, 432, 0, 0, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 0, 445, - 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, - 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, - 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, - 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, - 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, - 0, 0, 472, 0, 0, 473, 474, 0, 475, 476, - 477, 478, 479, 480, 0, 0, 481, 482, 483, 484, - 0, 485, 486, 0, 0, 487, 488, 489, 490, 0, - 156, 491, 492, 0, 493, 494, 495, 496, 0, 0, - 0, 0, 0, 497, 498, 499, 0, 0, 0, 500, - 501, 502, 503, 0, 504, 505, 0, 506, 507, 0, - 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, - 0, 513, 514, 0, 0, 0, 0, 0, 0, 515, - 0, 0, 516, 0, 0, 0, 517, 518, 519, 520, - 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, - 525, 0, 526, 527, 528, 0, 159, 529, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, - 167, 0, 1281, 168, 0, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, - 0, 166, 2345, 0, 0, 167, 0, 0, 168, 0, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, - 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, - 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, - 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, - 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, - 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, - 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, - 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, - 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, - 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, - 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, - 0, 235, 0, 0, 0, 236, 0, 237, 238, 239, - 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, - 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, - 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, - 257, 258, 259, 260, 0, 0, 261, 262, 263, 264, - 0, 0, 265, 266, 0, 267, 268, 269, 0, 0, - 270, 0, 0, 0, 271, 272, 0, 273, 0, 274, - 0, 275, 276, 277, 278, 279, 280, 281, 0, 282, - 0, 0, 283, 284, 285, 0, 286, 0, 0, 0, - 287, 288, 0, 0, 0, 289, 290, 291, 292, 293, - 0, 0, 0, 294, 295, 296, 0, 0, 297, 0, - 0, 0, 0, 298, 299, 0, 0, 0, 300, 0, - 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, - 0, 306, 307, 308, 0, 0, 309, 0, 0, 310, - 311, 0, 0, 0, 0, 0, 312, 313, 0, 314, - 0, 315, 0, 316, 317, 0, 0, 0, 0, 0, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, - 336, 337, 0, 338, 339, 340, 341, 0, 342, 343, - 344, 0, 0, 0, 0, 345, 346, 347, 348, 349, - 350, 0, 0, 351, 352, 0, 353, 0, 354, 0, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 0, 0, 365, 0, 0, 366, 367, 368, 369, 0, - 0, 0, 370, 371, 0, 0, 0, 372, 0, 373, - 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, - 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, - 384, 0, 0, 385, 0, 386, 0, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 0, 397, - 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, - 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, - 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, - 418, 419, 0, 420, 421, 0, 422, 423, 424, 0, - 0, 425, 0, 426, 0, 427, 428, 0, 429, 430, - 0, 431, 0, 432, 0, 0, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 0, 445, - 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, - 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, - 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, - 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, - 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, - 0, 0, 472, 0, 0, 473, 474, 0, 475, 476, - 477, 478, 479, 480, 0, 0, 481, 482, 483, 484, - 0, 485, 486, 0, 0, 487, 488, 489, 490, 0, - 0, 491, 492, 0, 493, 494, 495, 496, 0, 0, - 0, 0, 0, 497, 498, 499, 0, 0, 0, 500, - 501, 502, 503, 0, 504, 505, 0, 506, 507, 0, - 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, - 0, 513, 514, 0, 0, 0, 0, 0, 0, 515, - 0, 0, 516, 0, 0, 0, 517, 518, 519, 520, - 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, - 525, 0, 526, 527, 528, 0, 159, 529, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 3116, 0, 0, - 167, 0, 0, 168, 0, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, - 0, 166, 3477, 0, 0, 167, 0, 0, 168, 0, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, - 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, - 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, - 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, - 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, - 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, - 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, - 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, - 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, - 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, - 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, - 0, 235, 0, 0, 0, 236, 0, 237, 238, 239, - 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, - 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, - 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, - 257, 258, 259, 260, 0, 0, 261, 262, 263, 264, - 0, 0, 265, 266, 0, 267, 268, 269, 0, 0, - 270, 0, 0, 0, 271, 272, 0, 273, 0, 274, - 0, 275, 276, 277, 278, 279, 280, 281, 0, 282, - 0, 0, 283, 284, 285, 0, 286, 0, 0, 0, - 287, 288, 0, 0, 0, 289, 290, 291, 292, 293, - 0, 0, 0, 294, 295, 296, 0, 0, 297, 0, - 0, 0, 0, 298, 299, 0, 0, 0, 300, 0, - 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, - 0, 306, 307, 308, 0, 0, 309, 0, 0, 310, - 311, 0, 0, 0, 0, 0, 312, 313, 0, 314, - 0, 315, 0, 316, 317, 0, 0, 0, 0, 0, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, - 336, 337, 0, 338, 339, 340, 341, 0, 342, 343, - 344, 0, 0, 0, 0, 345, 346, 347, 348, 349, - 350, 0, 0, 351, 352, 0, 353, 0, 354, 0, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 0, 0, 365, 0, 0, 366, 367, 368, 369, 0, - 0, 0, 370, 371, 0, 0, 0, 372, 0, 373, - 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, - 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, - 384, 0, 0, 385, 0, 386, 0, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 0, 397, - 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, - 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, - 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, - 418, 419, 0, 420, 421, 0, 422, 423, 424, 0, - 0, 425, 0, 426, 0, 427, 428, 0, 429, 430, - 0, 431, 0, 432, 0, 0, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 0, 445, - 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, - 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, - 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, - 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, - 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, - 0, 0, 472, 0, 0, 473, 474, 0, 475, 476, - 477, 478, 479, 480, 0, 0, 481, 482, 483, 484, - 0, 485, 486, 0, 0, 487, 488, 489, 490, 0, - 0, 491, 492, 0, 493, 494, 495, 496, 0, 0, - 0, 0, 0, 497, 498, 499, 0, 0, 0, 500, - 501, 502, 503, 0, 504, 505, 0, 506, 507, 0, - 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, - 0, 513, 514, 0, 0, 0, 0, 0, 0, 515, - 0, 0, 516, 0, 0, 0, 517, 518, 519, 520, - 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, - 525, 0, 526, 527, 528, 0, 159, 529, 160, 161, - 162, 163, 164, 165, 0, 0, 166, 3880, 0, 0, - 167, 0, 0, 168, 0, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 0, 178, 0, 0, 1526, 179, - 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, - 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, - 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, - 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, - 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, - 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, - 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, - 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, - 0, 0, 0, 1527, 234, 0, 235, 0, 0, 0, - 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, - 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, - 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, - 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, - 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, - 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, - 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, - 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, - 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, - 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, - 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, - 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, - 0, 309, 0, 0, 310, 311, 665, 0, 0, 0, - 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, - 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, - 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, - 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, - 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, - 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, - 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, - 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, - 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, - 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, - 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, - 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, - 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, - 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, - 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, - 448, 449, 450, 0, 0, 1528, 451, 0, 0, 0, - 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, - 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, - 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, - 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, - 487, 488, 489, 490, 0, 156, 491, 492, 0, 493, - 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, - 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, - 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, - 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, - 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, - 0, 0, 529, 0, 159, 1529, 160, 161, 162, 163, - 164, 165, 871, 872, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 873, 0, 224, 0, 225, 0, 874, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 875, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 876, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 877, 257, 258, 259, 878, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 879, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 880, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 881, - 0, 297, 0, 0, 0, 882, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 883, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 884, 402, - 403, 404, 885, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 886, 0, - 415, 416, 417, 418, 419, 0, 887, 421, 0, 422, - 423, 424, 0, 0, 888, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 889, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 890, 891, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 892, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 893, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 894, 512, 895, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 977, 161, 162, 163, 164, 165, 978, 872, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 873, 0, - 224, 0, 225, 0, 874, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 875, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 876, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 877, 257, 258, - 259, 878, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 879, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 880, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 881, 0, 297, 0, 0, 0, - 882, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 883, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 884, 402, 403, 404, 979, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 886, 0, 415, 416, 417, 418, 419, - 0, 887, 421, 0, 422, 423, 424, 0, 0, 888, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 889, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 890, 891, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 892, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 893, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 894, 512, 895, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 2592, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 2593, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 2594, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 2595, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 152, 153, 0, 370, 371, 0, 0, 2596, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 4420, 595, 4421, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 2597, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 1774, 0, 0, 3701, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 1775, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 3186, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 3187, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 3188, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 3189, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 1774, 0, - 0, 4659, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 1775, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 3186, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 3187, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 3188, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 3189, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 1774, 0, 0, 4728, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 1775, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 3186, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 3187, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 3188, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 3189, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 1122, 874, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 1541, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 1542, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 1084, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 1085, 1086, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 1087, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 2081, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 2082, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 783, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 2083, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 2084, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 2081, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 2082, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 783, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 2084, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 1526, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 1527, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 2081, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 2082, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 783, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 4254, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 2084, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 1122, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 1564, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 874, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 2652, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 1526, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 3112, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 3296, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 3297, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 595, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 1181, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 1519, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 1519, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 2135, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 2273, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 3305, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 3617, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 3625, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 3649, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 4564, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 168, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, - 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, - 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, - 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, - 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, - 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, - 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, - 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, - 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, - 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, - 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, - 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 0, 267, 2000, 269, 0, 0, 270, 0, - 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, - 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, - 307, 308, 0, 0, 309, 0, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 2001, 368, 369, 0, 0, 0, - 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, - 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, - 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, - 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, - 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, - 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, - 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, - 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, - 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 0, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 923, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 0, 0, 0, 0, 187, 7, 0, 188, 189, 0, - 190, 0, 0, 0, 0, 0, 194, 195, 196, 924, - 198, 199, 0, 200, 201, 0, 0, 0, 0, 0, - 0, 207, 0, 209, 0, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 0, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, - 0, 0, 243, 244, 245, 0, -338, -338, 246, 0, - -338, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 925, 267, 268, - 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, - 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, - 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 26, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 926, 0, - 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, - 927, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 32, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 928, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, - 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, - 0, 424, 41, 0, 425, 0, 0, 0, 427, 0, - 0, 429, 430, 0, 431, 929, 432, 0, 0, 433, - 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, - 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, - 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, - 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, - 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 60, 0, - 0, 0, 524, 0, 0, 526, 0, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 0, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 0, 0, 923, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 0, 0, 0, 0, 187, - 7, 0, 188, 189, 0, 190, 0, 0, 0, 0, - 0, 194, 195, 196, 924, 198, 199, 0, 200, 201, - 0, 0, 0, 0, 0, 0, 207, 0, 209, 0, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 0, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 0, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 243, 244, 245, - 0, -358, 0, 246, 0, -358, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 0, 0, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 925, 267, 268, 269, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 0, 281, 0, 282, 0, 0, - 0, 284, 285, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 26, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 0, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 926, 0, 0, 305, 0, 0, 0, - 307, 308, 0, 0, 309, 927, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 32, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 0, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 928, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 384, 0, - 0, 0, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 0, 0, 0, 0, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 0, 0, 422, 0, 424, 41, 0, 425, - 0, 0, 0, 427, 0, 0, 429, 430, 0, 431, - 929, 432, 0, 0, 433, 0, 435, 436, 437, 438, - 439, 440, 441, 0, 443, 444, 0, 445, 0, 0, - 0, 0, 447, 448, 449, 0, 0, 0, 0, 451, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 457, - 458, 0, 459, 0, 461, 0, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 0, 471, 0, 0, 0, - 472, 0, 0, 0, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 0, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 0, 0, - 0, 0, 510, 0, 0, 511, 0, 0, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, -358, 0, 60, 0, 0, 0, 524, 0, 0, - 526, 0, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 0, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 923, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 0, 0, 0, 0, 187, 7, 0, 188, 189, 0, - 190, 0, 0, 0, 0, 0, 194, 195, 196, 924, - 198, 199, 0, 200, 201, 0, 0, 0, 0, 0, - 0, 207, 0, 209, 0, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 0, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, - 0, 0, 243, 244, 245, 0, -355, 0, 246, 0, - -355, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 925, 267, 268, - 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, - 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, - 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 26, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 926, 0, - 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, - 927, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 32, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 928, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, - 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, - 0, 424, 41, 0, 425, 0, 0, 0, 427, 0, - 0, 429, 430, 0, 431, 929, 432, 0, 0, 433, - 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, - 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, - 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, - 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, - 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, -355, 0, 60, 0, - 0, 0, 524, 0, 0, 526, 0, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 0, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 0, 0, 923, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 0, 0, 0, 0, 187, - 7, 0, 188, 189, 0, 190, 0, 0, 0, 0, - 0, 194, 195, 196, 924, 198, 199, 0, 200, 201, - 0, 0, 0, 0, 0, 0, 207, 0, 209, 0, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 0, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 0, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 1439, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 0, 0, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 925, 267, 268, 269, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 0, 281, 0, 282, 0, 0, - 0, 284, 285, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 26, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 0, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 926, 0, 0, 305, 0, 0, 0, - 307, 308, 0, 0, 309, 927, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 32, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 0, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 928, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 384, 0, - 0, 0, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 0, 0, 0, 0, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 0, 0, 422, 0, 424, 41, 0, 425, - 0, 0, 0, 427, 0, 0, 429, 430, 0, 431, - 929, 432, 0, 0, 433, 0, 435, 436, 437, 438, - 439, 440, 441, 0, 443, 444, 0, 445, 0, 0, - 0, 0, 447, 448, 449, 0, 0, 0, 0, 451, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 457, - 458, 0, 459, 0, 461, 0, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 0, 471, 0, 0, 0, - 472, 0, 0, 0, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 0, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 0, 0, - 0, 0, 510, 0, 0, 511, 0, 0, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 60, 0, 0, 0, 524, 0, 0, - 526, 0, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 0, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 923, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 0, 0, 0, 0, 187, 7, 0, 188, 189, 0, - 190, 0, 0, 0, 0, 0, 194, 195, 196, 924, - 198, 199, 0, 200, 201, 0, 0, 0, 0, 0, - 0, 207, 0, 209, 0, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 0, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - -360, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 925, 267, 268, - 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, - 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, - 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 26, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 926, 0, - 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, - 927, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 32, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 928, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, - 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, - 0, 424, 41, 0, 425, 0, 0, 0, 427, 0, - 0, 429, 430, 0, 431, 929, 432, 0, 0, 433, - 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, - 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, - 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, - 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, - 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 60, 0, - 0, 0, 524, 0, 0, 526, 0, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 0, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 0, 0, 923, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 0, 0, 0, 0, 187, - 7, 0, 188, 189, 0, 190, 0, 0, 0, 0, - 0, 194, 195, 196, 924, 198, 199, 0, 200, 201, - 0, 0, 0, 0, 0, 0, 207, 0, 209, 0, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 0, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 0, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 3154, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 0, 0, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 925, 267, 268, 269, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 0, 281, 0, 282, 0, 0, - 0, 284, 285, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 26, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 0, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 926, 0, 0, 305, 0, 0, 0, - 307, 308, 0, 0, 309, 927, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 32, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 0, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 928, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 384, 0, - 0, 0, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 0, 0, 0, 0, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 0, 0, 422, 0, 424, 41, 0, 425, - 0, 0, 0, 427, 0, 0, 429, 430, 0, 431, - 929, 432, 0, 0, 433, 0, 435, 436, 437, 438, - 439, 440, 441, 0, 443, 444, 0, 445, 0, 0, - 0, 0, 447, 448, 449, 0, 0, 0, 0, 451, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 457, - 458, 0, 459, 0, 461, 0, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 0, 471, 0, 0, 0, - 472, 0, 0, 0, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 0, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 0, 0, - 0, 0, 510, 0, 0, 511, 0, 0, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 60, 0, 0, 0, 524, 0, 0, - 526, 0, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 0, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 923, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 0, 0, 0, 0, 187, 7, 0, 188, 189, 0, - 190, 0, 0, 0, 0, 0, 194, 195, 196, 924, - 198, 199, 0, 200, 201, 0, 0, 0, 0, 0, - 0, 207, 0, 209, 0, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 0, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 3301, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 925, 267, 268, - 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, - 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, - 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 26, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 926, 0, - 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, - 927, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 32, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 928, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, - 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, - 0, 424, 41, 0, 425, 0, 0, 0, 427, 0, - 0, 429, 430, 0, 431, 929, 432, 0, 0, 433, - 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, - 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, - 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, - 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, - 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 60, 0, - 0, 0, 524, 0, 0, 526, 0, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 0, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 0, 0, 923, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 0, 0, 0, 0, 187, - 7, 0, 188, 189, 0, 190, 0, 0, 0, 0, - 0, 194, 195, 196, 924, 198, 199, 0, 200, 201, - 0, 0, 0, 0, 0, 0, 207, 0, 209, 0, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 0, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 0, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, -342, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 0, 0, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 925, 267, 268, 269, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 0, 281, 0, 282, 0, 0, - 0, 284, 285, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 26, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 0, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 926, 0, 0, 305, 0, 0, 0, - 307, 308, 0, 0, 309, 927, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 32, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 0, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 928, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 384, 0, - 0, 0, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 0, 0, 0, 0, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 0, 0, 422, 0, 424, 41, 0, 425, - 0, 0, 0, 427, 0, 0, 429, 430, 0, 431, - 929, 432, 0, 0, 433, 0, 435, 436, 437, 438, - 439, 440, 441, 0, 443, 444, 0, 445, 0, 0, - 0, 0, 447, 448, 449, 0, 0, 0, 0, 451, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 457, - 458, 0, 459, 0, 461, 0, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 0, 471, 0, 0, 0, - 472, 0, 0, 0, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 0, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 0, 0, - 0, 0, 510, 0, 0, 511, 0, 0, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 60, 0, 0, 0, 524, 0, 0, - 526, 0, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 0, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 923, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 0, 0, 0, 0, 187, 7, 0, 188, 189, 0, - 190, 0, 0, 0, 0, 0, 194, 195, 196, 924, - 198, 199, 0, 200, 201, 0, 0, 0, 0, 0, - 0, 207, 0, 209, 0, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 0, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 0, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 925, 267, 268, - 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, - 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, - 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 26, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 926, 0, - 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, - 927, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 32, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 928, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, - 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, - 0, 424, 41, 0, 425, 0, 0, 0, 427, 0, - 0, 429, 430, 0, 431, 929, 432, 0, 0, 433, - 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, - 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, - 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, - 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, - 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 60, 0, - 0, 0, 524, 0, 0, 526, 0, 528, 0, 159, - 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, - 0, 0, 0, 167, 0, 0, 0, 0, 169, 170, - 171, 172, 173, 174, 175, 176, 0, 0, 923, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, - 182, 183, 0, 184, 0, 0, 0, 0, 0, 187, - 7, 0, 188, 189, 0, 190, 0, 0, 0, 0, - 0, 194, 195, 196, 924, 198, 199, 0, 200, 201, - 0, 0, 0, 0, 0, 0, 207, 0, 209, 0, - 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, - 219, 0, 221, 0, 222, 0, 0, 223, 0, 0, - 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, - 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, - 0, 232, 0, 0, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, - 0, 0, 0, 0, 0, 0, 0, 243, 244, 245, - 0, 0, 0, 246, 0, 0, 248, 0, 249, 250, - 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, - 0, 0, 0, 0, 261, 262, 263, 264, 0, 0, - 265, 266, 925, 267, 268, 269, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 276, 277, 278, 279, 0, 281, 0, 282, 0, 0, - 0, 284, 285, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 0, 289, 290, 291, 292, 293, 26, 0, - 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, - 0, 298, 0, 0, 0, 0, 300, 0, 301, 302, - 0, 303, 304, 926, 0, 0, 305, 0, 0, 0, - 307, 308, 0, 0, 309, 927, 0, 310, 311, 0, - 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 316, 317, 0, 0, 0, 0, 32, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, - 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, - 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, - 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, - 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, - 0, 371, 0, 0, 0, 372, 0, 373, 374, 375, - 0, 376, 377, 378, 928, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 384, 0, - 0, 0, 0, 386, 0, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 0, 0, 0, 0, 398, 399, - 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, - 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, - 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, - 0, 420, 0, 0, 422, 0, 424, 41, 0, 425, - 0, 0, 0, 427, 0, 0, 429, 430, 0, 431, - 929, 432, 0, 0, 433, 0, 435, 436, 437, 438, - 439, 440, 441, 0, 443, 444, 0, 445, 0, 0, - 0, 0, 447, 448, 449, 0, 0, 0, 0, 451, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 457, - 458, 0, 459, 0, 461, 0, 463, 464, 0, 0, - 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 0, 471, 0, 0, 0, - 472, 0, 0, 0, 474, 0, 475, 476, 477, 478, - 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, - 486, 0, 0, 487, 488, 489, 490, 0, 0, 491, - 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, - 0, 497, 498, 499, 0, 0, 0, 0, 501, 502, - 503, 0, 504, 505, 0, 506, 507, 0, 0, 0, - 0, 0, 510, 0, 0, 1466, 0, 0, 0, 513, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, - 523, 0, 0, 60, 0, 0, 0, 524, 0, 0, - 526, 0, 528, 0, 159, 529, 160, 161, 162, 163, - 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, - 0, 0, 0, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 0, 0, 0, 0, 179, 0, 0, - 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, - 0, 0, 0, 0, 187, 0, 0, 188, 189, 0, - 190, 0, 0, 0, 0, 0, 194, 195, 196, 0, - 198, 199, 0, 200, 201, 0, 0, 0, 0, 0, - 0, 207, 0, 209, 0, 211, 212, 213, 214, 0, - 215, 216, 0, 217, 218, 219, 0, 221, 0, 222, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, - 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, - 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, - 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, - 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, - 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, - 0, 248, 0, 249, 250, 251, 0, 252, 253, 0, - 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, - 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, - 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, - 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, - 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, - 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, - 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, - 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, - 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, - 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, - 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, - 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, - 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, - 372, 0, 373, 374, 375, 0, 376, 377, 378, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, - 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, - 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, - 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, - 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, - 0, 424, 0, 0, 425, 0, 0, 0, 427, 0, - 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, - 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, - 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, - 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, - 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, - 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, - 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, - 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, - 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, - 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, - 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, - 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, - 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, - 0, 0, 524, 0, 0, 526, 0, 528, 0, 0, - 529 -}; - -static const yytype_int16 yycheck[] = -{ - 6, 3, 143, 609, 151, 608, 609, 632, 1116, 24, - 1013, 1014, 21, 930, 20, 986, 1256, 1506, 24, 1738, - 1213, 1024, 1379, 1232, 33, 6, 1035, 0, 1285, 582, - 36, 40, 1507, 140, 4, 608, 592, 661, 44, 592, - 1507, 47, 1709, 661, 1427, 962, 52, 1185, 1057, 2264, - 2107, 2108, 641, 59, 2264, 644, 1547, 766, 549, 550, - 1707, 1285, 553, 554, 555, 566, 959, 558, 559, 560, - 547, 45, 2712, 2587, 1120, 718, 1316, 1317, 2784, 2967, - 1320, 1321, 1322, 1323, 2361, 1325, 1326, 1327, 1328, 1329, - 1330, 1331, 1332, 1351, 109, 2729, 2373, 1379, 2003, 600, - 2502, 1120, 1307, 109, 3241, 926, 927, 2741, 2742, 1643, - 1315, 3081, 1620, 3067, 566, 2852, 612, 3572, 1077, 615, - 700, 1222, 3287, 703, 1430, 1450, 2463, 1675, 2262, 135, - 2262, 137, 1576, 139, 140, 141, 2061, 1967, 3108, 2112, - 3534, 2264, 2374, 3110, 1033, 2718, 2750, 1685, 600, 863, - 2692, 146, 1596, 3439, 151, 151, 137, 3551, 139, 3100, - 1604, 1605, 2337, 2337, 151, 3849, 3440, 151, 2752, 1058, - 13, 3902, 2756, 3242, 13, 2627, 17, 18, 18, 822, - 823, 824, 20, 2767, 2636, 17, 18, 20, 3711, 3373, - 3365, 834, 54, 1152, 50, 2779, 1734, 27, 20, 75, - 37, 2896, 21, 2337, 83, 2337, 18, 17, 18, 1106, - 1107, 83, 2101, 17, 18, 17, 18, 33, 39, 1191, - 1192, 1193, 17, 18, 2459, 2859, 2860, 118, 39, 63, - 163, 163, 2327, 4131, 1059, 116, 1208, 13, 17, 18, - 203, 182, 22, 31, 3611, 34, 17, 18, 2893, 2894, - 67, 39, 197, 1150, 2899, 185, 2901, 37, 182, 17, - 18, 2254, 20, 3657, 54, 66, 276, 2741, 2742, 1241, - 370, 51, 1244, 73, 66, 111, 17, 18, 197, 87, - 151, 225, 62, 63, 277, 325, 3210, 22, 163, 70, - 59, 211, 217, 1265, 1266, 294, 3220, 1269, 84, 203, - 3653, 331, 386, 12, 380, 374, 18, 378, 91, 400, - 55, 3936, 378, 46, 1286, 1287, 81, 132, 137, 456, - 9, 66, 279, 163, 367, 163, 73, 62, 63, 89, - 17, 18, 470, 260, 431, 236, 4613, 17, 18, 404, - 375, 17, 18, 465, 277, 277, 150, 134, 163, 240, - 132, 145, 231, 3637, 233, 4339, 436, 448, 200, 200, - 61, 236, 150, 283, 312, 844, 132, 21, 403, 13, - 17, 18, 257, 926, 927, 2244, 867, 930, 17, 18, - 13, 163, 3349, 262, 407, 2859, 2860, 200, 407, 3928, - 3845, 197, 37, 386, 17, 18, 445, 163, 13, 564, - 221, 222, 366, 200, 196, 200, 157, 564, 585, 962, - 221, 222, 242, 596, 2075, 4146, 529, 3054, 197, 630, - 2866, 630, 2745, 555, 171, 22, 558, 1685, 9, 630, - 585, 196, 431, 17, 18, 147, 129, 240, 2633, 369, - 37, 258, 3428, 584, 17, 18, 3432, 658, 136, 658, - 563, 72, 33, 608, 51, 418, 253, 658, 37, 566, - 263, 1354, 72, 136, 571, 62, 63, 555, 4152, 3106, - 558, 20, 3060, 169, 657, 240, 1734, 526, 426, 4018, - 286, 182, 446, 137, 63, 186, 427, 664, 511, 621, - 320, 656, 511, 600, 119, 974, 197, 122, 263, 192, - 69, 190, 146, 427, 293, 1398, 663, 294, 3074, 3075, - 3076, 591, 1221, 146, 418, 1623, 274, 474, 360, 1522, - 1109, 658, 1111, 1112, 1113, 1114, 664, 1236, 221, 564, - 366, 244, 562, 630, 294, 462, 330, 1540, 283, 545, - 253, 4818, 664, 21, 385, 4170, 431, 388, 3915, 649, - 556, 3918, 3919, 454, 3179, 503, 1052, 622, 2056, 589, - 566, 567, 17, 18, 635, 571, 536, 658, 574, 635, - 490, 3924, 679, 246, 658, 385, 366, 286, 388, 454, - 623, 385, 588, 385, 388, 510, 388, 387, 664, 658, - 385, 1171, 536, 388, 600, 558, 195, 366, 291, 461, - 3541, 1494, 608, 596, 3545, 575, 385, 1163, 54, 388, - 1163, 2745, 618, 2745, 385, 589, 656, 388, 628, 2110, - 564, 354, 493, 3511, 416, 17, 18, 385, 329, 1675, - 388, 343, 638, 1347, 17, 18, 635, 236, 439, 4094, - 387, 1534, 612, 426, 385, 615, 3217, 388, 467, 619, - 431, 416, 582, 3287, 558, 661, 1675, 663, 3942, 137, - 3174, 3549, 4121, 4647, 453, 17, 18, 312, 598, 505, - 1379, 461, 480, 679, 689, 1915, 1319, 370, 391, 1937, - 2803, 1570, 606, 689, 1573, 691, 1926, 3611, 1577, 1929, - 1579, 2866, 2866, 1336, 700, 628, 628, 703, 385, 3623, - 706, 388, 75, 493, 2061, 385, 2244, 713, 388, 385, - 3344, 630, 388, 658, 4612, 3639, 3640, 658, 1607, 1608, - 1609, 1198, 1199, 165, 2262, 597, 427, 503, 545, 662, - 662, 4125, 2866, 2968, 2866, 17, 18, 2626, 385, 2183, - 621, 388, 575, 564, 152, 294, 385, 638, 1225, 388, - 2743, 630, 540, 564, 4148, 862, 1233, 27, 1235, 575, - 766, 1720, 385, 575, 620, 388, 2861, 1664, 17, 18, - 1247, 1248, 1249, 561, 630, 1355, 1748, 1602, 1255, 2061, - 656, 615, 2687, 3967, 496, 497, 608, 662, 1406, 2327, - 630, 4522, 4159, 4524, 4525, 583, 658, 1714, 639, 2337, - 242, 385, 588, 4326, 388, 597, 644, 639, 1909, 17, - 18, 644, 385, 656, 594, 388, 657, 656, 3524, 656, - 4106, 827, 662, 829, 662, 4000, 17, 18, 658, 639, - 649, 833, 620, 17, 18, 639, 2344, 639, 4124, 4113, - 629, 17, 18, 2036, 639, 658, 11, 662, 854, 855, - 856, 661, 858, 859, 860, 657, 862, 3926, 864, 594, - 639, 2730, 1834, 658, 870, 1445, 1838, 608, 639, 4263, - 3344, 1495, 17, 18, 855, 1371, 627, 1495, 657, 860, - 662, 639, 431, 864, 3207, 1465, 657, 861, 503, 2550, - 1862, 865, 17, 18, 587, 165, 662, 1349, 639, 3345, - 658, 907, 2549, 3098, 3099, 3875, 1013, 922, 1015, 4640, - 4641, 1018, 1019, 4644, 602, 536, 922, 658, 924, 2638, - 3887, 923, 928, 3864, 3865, 367, 536, 1034, 624, 602, - 385, 2988, 3520, 388, 503, 647, 648, 649, 650, 651, - 652, 653, 654, 568, 657, 960, 571, 17, 18, 197, - 1574, 966, 639, 959, 960, 2453, 1574, 658, 3531, 639, - 966, 3527, 577, 639, 657, 1106, 1107, 1556, 1115, 236, - 657, 1685, 242, 3598, 2879, 564, 2881, 657, 658, 1475, - 4664, 657, 658, 953, 3041, 2519, 2244, 17, 18, 467, - 201, 3915, 639, 385, 3918, 3919, 388, 594, 17, 18, - 639, 1007, 385, 3517, 4735, 388, 3930, 1013, 607, 1015, - 657, 658, 1018, 1019, 200, 461, 639, 49, 657, 658, - 1734, 618, 401, 1524, 4483, 1643, 4485, 3569, 1034, 195, - 240, 17, 18, 385, 657, 658, 388, 3608, 203, 276, - 312, 2838, 130, 257, 2971, 17, 18, 420, 4732, 182, - 320, 17, 18, 17, 18, 639, 1645, 1646, 236, 656, - 3633, 2966, 3277, 3758, 250, 485, 639, 3277, 1657, 2327, - 236, 1077, 1524, 3207, 658, 3207, 1679, 485, 403, 2337, - 160, 869, 1052, 3687, 1054, 658, 635, 4057, 633, 3541, - 170, 485, 706, 3545, 13, 644, 1102, 367, 540, 1101, - 2767, 376, 27, 385, 3688, 27, 388, 1696, 4075, 83, - 1116, 3756, 379, 1108, 4508, 2118, 294, 2010, 1115, 1115, - 3765, 129, 376, 1832, 129, 1140, 354, 153, 1115, 1103, - 1104, 1115, 17, 18, 1140, 656, 385, 485, 190, 388, - 132, 17, 18, 1149, 3376, 3070, 1152, 2622, 376, 2624, - 2625, 2044, 2045, 2701, 3277, 3128, 376, 2624, 2625, 2399, - 376, 1714, 2208, 251, 3091, 1171, 1181, 485, 1149, 2178, - 3345, 3345, 371, 961, 494, 1181, 3006, 385, 650, 4573, - 388, 623, 555, 13, 639, 657, 218, 192, 399, 2208, - 1642, 1298, 2730, 35, 385, 2204, 376, 388, 2696, 3536, - 386, 385, 657, 658, 388, 376, 579, 2745, 2346, 385, - 287, 3345, 388, 3345, 266, 1221, 658, 431, 17, 18, - 376, 136, 4677, 129, 17, 18, 485, 146, 1335, 656, - 1236, 17, 18, 17, 18, 4159, 656, 664, 2736, 564, - 385, 2566, 1349, 388, 2688, 859, 494, 639, 656, 427, - 12, 2557, 660, 418, 3949, 3950, 639, 231, 129, 233, - 385, 3956, 656, 388, 3959, 3960, 658, 17, 18, 2474, - 540, 2480, 2481, 1380, 657, 658, 90, 656, 477, 1285, - 2169, 3976, 283, 291, 108, 1928, 291, 639, 262, 242, - 494, 502, 1298, 2182, 427, 3990, 2185, 2186, 112, 3994, - 3995, 3996, 3997, 3998, 384, 657, 3951, 1309, 656, 3954, - 2269, 388, 17, 18, 366, 385, 146, 242, 388, 67, - 242, 192, 2562, 2861, 644, 17, 18, 564, 2866, 1335, - 2587, 246, 17, 18, 1340, 738, 739, 2835, 656, 3984, - 3985, 3986, 2840, 1349, 664, 433, 1453, 3992, 1354, 1355, - 2848, 2849, 2061, 623, 3999, 385, 2854, 639, 388, 479, - 525, 4650, 370, 485, 390, 370, 385, 368, 1948, 388, - 2878, 133, 2473, 1379, 1380, 657, 658, 369, 6, 3026, - 608, 532, 2483, 658, 277, 291, 253, 4043, 658, 4554, - 639, 628, 1398, 17, 18, 320, 644, 656, 320, 385, - 1406, 1371, 388, 1418, 658, 1411, 273, 1413, 657, 658, - 813, 253, 1418, 385, 367, 580, 388, 1524, 545, 385, - 291, 385, 388, 24, 388, 3222, 4591, 4592, 1434, 556, - 3274, 639, 60, 4888, 276, 17, 18, 2694, 658, 1445, - 644, 607, 658, 3348, 558, 367, 478, 1453, 639, 1419, - 658, 3248, 3249, 1468, 542, 639, 621, 17, 18, 1465, - 3304, 1957, 1468, 639, 370, 4435, 4631, 658, 2048, 288, - 2694, 874, 2730, 606, 658, 1377, 17, 18, 658, 556, - 17, 18, 658, 563, 3018, 3019, 3020, 658, 1494, 1495, - 17, 18, 1498, 386, 639, 17, 18, 13, 2141, 370, - 385, 1507, 658, 388, 61, 1475, 1647, 656, 13, 385, - 258, 1517, 388, 658, 639, 17, 18, 214, 1524, 1525, - 536, 494, 4162, 151, 4164, 658, 17, 18, 1534, 348, - 2244, 3933, 2541, 658, 656, 1642, 4825, 4826, 660, 454, - 1546, 1547, 0, 4280, 4432, 1560, 136, 1562, 244, 3216, - 3217, 1557, 1558, 1559, 1560, 1561, 1562, 253, 1665, 2132, - 4697, 2062, 4516, 260, 4220, 1571, 1572, 4223, 1574, 639, - 485, 163, 1578, 174, 650, 1682, 1557, 1558, 1559, 587, - 1561, 657, 587, 133, 1599, 134, 385, 540, 658, 388, - 494, 1572, 385, 1599, 644, 388, 963, 1578, 440, 385, - 616, 385, 388, 2861, 388, 2498, 413, 1577, 2866, 639, - 2062, 585, 3087, 2327, 362, 564, 4353, 4354, 540, 485, - 639, 494, 2211, 2337, 644, 182, 2215, 2216, 658, 186, - 146, 2225, 2226, 185, 608, 385, 1642, 1643, 388, 658, - 197, 146, 4156, 278, 2200, 214, 281, 2200, 2242, 133, - 1552, 1553, 4358, 639, 1669, 2701, 246, 2251, 2252, 1665, - 1666, 1667, 1668, 1669, 2667, 2858, 3571, 639, 501, 3207, - 623, 644, 658, 639, 223, 639, 1682, 17, 18, 173, - 385, 587, 2701, 388, 644, 564, 658, 602, 83, 386, - 1705, 664, 658, 385, 658, 391, 388, 13, 1704, 1705, - 385, 623, 252, 388, 4344, 585, 291, 656, 4682, 17, - 18, 4685, 2605, 3070, 1720, 1082, 587, 536, 1688, 1122, - 25, 3104, 17, 18, 3224, 3223, 133, 3225, 2322, 2323, - 2324, 2325, 17, 18, 3232, 1741, 364, 1743, 3238, 3239, - 644, 656, 2880, 17, 18, 294, 612, 613, 3246, 656, - 3250, 17, 18, 277, 639, 3253, 3254, 664, 2651, 75, - 664, 385, 4510, 639, 388, 4042, 431, 600, 3266, 3267, - 3268, 644, 329, 658, 3272, 3273, 3620, 656, 2695, 2984, - 528, 664, 658, 46, 664, 370, 615, 452, 3070, 618, - 656, 664, 1933, 428, 17, 18, 197, 545, 3055, 200, - 17, 18, 430, 385, 432, 83, 388, 3345, 18, 642, - 3654, 363, 364, 2816, 3312, 3313, 3314, 369, 627, 17, - 18, 3665, 4336, 488, 3668, 385, 1832, 1833, 388, 105, - 214, 3055, 4806, 147, 2477, 1987, 231, 1989, 233, 3486, - 639, 231, 1949, 233, 385, 252, 639, 388, 385, 17, - 18, 388, 20, 639, 3047, 639, 17, 18, 385, 658, - 454, 388, 386, 385, 454, 658, 388, 262, 17, 18, - 427, 4619, 658, 485, 658, 17, 18, 17, 18, 17, - 18, 493, 218, 385, 234, 286, 388, 1893, 636, 639, - 2031, 18, 155, 2370, 385, 485, 555, 388, 2375, 558, - 555, 2519, 608, 558, 2522, 147, 203, 2824, 658, 17, - 18, 234, 2389, 17, 18, 2067, 2068, 2069, 17, 18, - 4554, 1936, 214, 17, 18, 17, 18, 263, 44, 1935, - 1936, 218, 17, 18, 639, 3433, 52, 17, 18, 17, - 18, 3608, 1948, 1949, 17, 18, 2423, 639, 17, 18, - 605, 657, 658, 658, 639, 2062, 1962, 4591, 4592, 143, - 141, 1967, 621, 380, 242, 657, 1972, 243, 250, 1975, - 2077, 1986, 1987, 658, 1989, 159, 263, 4617, 4618, 50, - 1986, 1987, 2606, 1989, 260, 200, 2542, 1957, 2606, 2542, - 631, 632, 17, 18, 2495, 3252, 272, 4631, 2013, 613, - 612, 613, 2017, 2559, 2010, 2558, 2559, 2013, 2115, 363, - 364, 2017, 602, 2490, 4130, 639, 2730, 658, 17, 18, - 147, 3688, 198, 4139, 17, 18, 17, 18, 3252, 343, - 582, 2046, 2047, 493, 658, 17, 18, 504, 2044, 2045, - 2046, 2047, 2048, 2495, 656, 385, 598, 504, 388, 17, - 18, 294, 2067, 2068, 2069, 2061, 2062, 639, 17, 18, - 657, 2067, 2068, 2069, 17, 18, 656, 485, 608, 2672, - 491, 2077, 2042, 3564, 662, 657, 567, 385, 354, 639, - 388, 1134, 1135, 361, 234, 2100, 2092, 3345, 240, 367, - 385, 657, 658, 388, 2100, 608, 3067, 657, 639, 2672, - 385, 343, 639, 388, 2110, 240, 3023, 283, 240, 2115, - 558, 385, 639, 664, 388, 603, 657, 639, 658, 385, - 657, 418, 388, 558, 664, 525, 2132, 1180, 173, 81, - 657, 3140, 17, 18, 1069, 657, 3636, 639, 17, 18, - 1075, 1076, 2695, 3352, 656, 658, 2152, 2861, 639, 157, - 3153, 664, 2866, 575, 3537, 657, 3049, 2751, 6, 437, - 2754, 2755, 385, 2757, 656, 388, 2760, 2761, 385, 2184, - 2764, 388, 3381, 3382, 656, 2769, 656, 2147, 2184, 2149, - 2774, 2775, 2776, 2777, 2778, 62, 63, 385, 2782, 2783, - 388, 2785, 368, 469, 2168, 3404, 73, 2791, 2792, 2793, - 2794, 656, 161, 2797, 2798, 656, 2800, 2213, 2214, 200, - 656, 2217, 3033, 3034, 3035, 3036, 343, 385, 17, 18, - 388, 658, 17, 18, 385, 656, 3758, 388, 525, 3422, - 17, 18, 656, 2214, 17, 18, 385, 656, 22, 388, - 656, 17, 18, 385, 196, 385, 388, 385, 388, 664, - 388, 656, 2267, 37, 2361, 626, 627, 3146, 629, 2229, - 631, 2267, 540, 2269, 3521, 541, 2373, 51, 2238, 2239, - 2864, 2824, 86, 2829, 88, 656, 2829, 385, 62, 63, - 388, 385, 656, 580, 388, 564, 385, 656, 240, 388, - 83, 385, 656, 385, 388, 656, 388, 656, 779, 639, - 385, 17, 18, 388, 97, 385, 178, 385, 388, 656, - 388, 263, 385, 3570, 592, 388, 385, 657, 132, 388, - 801, 656, 17, 18, 621, 656, 17, 18, 656, 20, - 656, 639, 2338, 814, 815, 2341, 656, 651, 652, 653, - 654, 155, 657, 658, 639, 623, 3570, 17, 18, 657, - 129, 657, 658, 656, 639, 2361, 657, 658, 656, 2466, - 385, 3070, 657, 388, 608, 639, 473, 2373, 1399, 496, - 497, 1402, 657, 639, 1405, 17, 18, 191, 20, 555, - 115, 656, 558, 657, 129, 661, 385, 147, 2495, 388, - 2497, 657, 385, 3310, 385, 388, 4453, 388, 657, 658, - 3018, 3019, 3020, 385, 243, 13, 388, 649, 650, 651, - 652, 653, 654, 192, 4629, 656, 639, 385, 4628, 656, - 388, 260, 639, 656, 3956, 656, 385, 3959, 3960, 388, - 656, 212, 385, 272, 657, 388, 656, 3630, 173, 178, - 657, 639, 221, 656, 3976, 657, 658, 192, 400, 556, - 3074, 3075, 3076, 656, 561, 656, 3074, 3075, 3076, 657, - 2466, 656, 3994, 656, 416, 136, 657, 658, 203, 656, - 3023, 639, 265, 17, 18, 3078, 221, 656, 639, 656, - 3033, 3034, 3035, 3036, 200, 2491, 231, 656, 233, 2495, - 639, 2497, 2498, 657, 658, 27, 657, 639, 605, 639, - 385, 639, 2979, 388, 540, 200, 385, 2614, 657, 388, - 656, 3514, 291, 2519, 621, 657, 2522, 657, 417, 657, - 647, 648, 649, 650, 651, 652, 653, 654, 4026, 473, - 4028, 639, 4030, 3157, 656, 639, 317, 318, 146, 3157, - 639, 322, 323, 324, 3553, 639, 291, 639, 341, 657, - 656, 83, 383, 657, 639, 2561, 4031, 3566, 657, 639, - 656, 639, 575, 657, 4031, 657, 639, 27, 657, 658, - 639, 376, 657, 366, 656, 246, 4074, 657, 34, 657, - 394, 2587, 656, 343, 657, 2591, 385, 3844, 657, 388, - 385, 370, 4736, 388, 657, 658, 657, 658, 385, 2605, - 2606, 388, 385, 3741, 656, 388, 657, 658, 2614, 385, - 2717, 2718, 388, 656, 639, 223, 2622, 656, 2624, 2625, - 3844, 656, 3211, 83, 438, 370, 3215, 3230, 656, 85, - 469, 3345, 657, 165, 656, 83, 429, 3231, 656, 2645, - 639, 2647, 4309, 4310, 4788, 2651, 639, 4791, 639, 656, - 3244, 183, 657, 658, 657, 658, 656, 639, 657, 657, - 658, 657, 658, 63, 657, 37, 2672, 656, 3776, 385, - 656, 639, 388, 657, 658, 2645, 2649, 657, 658, 4823, - 639, 3938, 83, 418, 62, 63, 639, 656, 2694, 657, - 385, 63, 656, 388, 385, 656, 97, 388, 2704, 2714, - 2715, 656, 541, 2709, 657, 161, 657, 658, 2714, 2715, - 242, 2717, 2718, 656, 3938, 385, 656, 165, 388, 119, - 656, 4778, 122, 183, 157, 158, 657, 658, 2709, 656, - 130, 35, 525, 4452, 20, 656, 496, 497, 656, 140, - 657, 658, 28, 385, 656, 3236, 388, 119, 148, 656, - 122, 656, 20, 656, 639, 657, 658, 3310, 130, 656, - 639, 28, 2732, 2733, 2734, 2735, 656, 2737, 2738, 657, - 658, 376, 657, 657, 658, 656, 148, 555, 657, 4277, - 4278, 4279, 242, 454, 567, 13, 656, 73, 320, 656, - 2796, 657, 658, 193, 242, 657, 658, 83, 4007, 3966, - 3967, 657, 658, 3970, 658, 2811, 73, 161, 587, 236, - 594, 511, 4169, 52, 485, 13, 83, 2823, 662, 657, - 658, 2827, 3989, 558, 657, 658, 288, 4316, 3995, 361, - 614, 615, 4889, 657, 658, 367, 665, 105, 657, 658, - 639, 657, 587, 147, 639, 580, 132, 45, 52, 2990, - 658, 251, 639, 39, 657, 658, 639, 383, 657, 376, - 320, 200, 657, 639, 265, 132, 2836, 2837, 376, 2839, - 657, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 657, 251, - 2850, 657, 479, 2853, 596, 4052, 621, 2857, 648, 649, - 650, 651, 652, 653, 654, 163, 50, 567, 657, 658, - 98, 361, 12, 3527, 277, 103, 3013, 367, 200, 3527, - 651, 519, 520, 361, 522, 3392, 524, 493, 146, 367, - 206, 298, 299, 639, 657, 658, 664, 195, 115, 197, - 504, 602, 172, 541, 656, 147, 122, 314, 657, 658, - 341, 3035, 3036, 129, 639, 231, 214, 233, 639, 253, - 197, 219, 536, 353, 129, 555, 356, 413, 657, 658, - 3563, 511, 363, 364, 231, 366, 233, 536, 236, 639, - 3447, 288, 276, 3080, 164, 243, 197, 263, 92, 435, - 657, 658, 250, 658, 356, 656, 658, 1273, 1274, 437, - 3563, 377, 260, 657, 658, 223, 263, 639, 551, 185, - 3006, 657, 3008, 163, 272, 115, 192, 3013, 540, 277, - 3025, 3017, 3018, 3019, 3020, 471, 132, 192, 286, 3025, - 118, 3610, 663, 133, 3613, 3614, 3032, 6, 429, 4386, - 657, 658, 4199, 433, 147, 221, 222, 224, 382, 343, - 117, 4208, 3048, 3049, 657, 658, 221, 4287, 4, 3055, - 4217, 657, 658, 657, 658, 4222, 484, 255, 253, 363, - 364, 621, 129, 173, 3070, 132, 443, 444, 3074, 3075, - 3076, 657, 658, 658, 3080, 531, 400, 363, 364, 161, - 540, 3087, 59, 369, 4192, 4574, 354, 657, 658, 446, - 376, 623, 540, 203, 657, 658, 363, 364, 664, 4207, - 657, 658, 369, 658, 127, 291, 3112, 73, 376, 376, - 657, 658, 105, 13, 657, 658, 291, 296, 386, 298, - 299, 657, 658, 627, 525, 192, 658, 4625, 657, 501, - 416, 343, 330, 657, 3241, 314, 440, 657, 658, 146, - 253, 10, 3112, 658, 592, 4338, 657, 658, 664, 416, - 418, 3157, 58, 656, 221, 3170, 3162, 657, 3173, 657, - 658, 657, 68, 623, 3170, 657, 658, 3173, 3174, 355, - 657, 571, 657, 658, 664, 623, 82, 287, 4095, 365, - 276, 3162, 66, 369, 370, 3479, 3480, 664, 94, 95, - 96, 376, 496, 497, 4451, 370, 394, 81, 165, 571, - 600, 469, 663, 489, 3210, 392, 229, 113, 512, 93, - 658, 52, 3221, 3219, 3220, 288, 403, 288, 3227, 288, - 3226, 658, 489, 410, 291, 493, 288, 4451, 600, 288, - 343, 3819, 3820, 288, 658, 3241, 3242, 644, 656, 555, - 234, 3247, 3251, 129, 129, 230, 3252, 3262, 3257, 283, - 243, 147, 658, 200, 3263, 3264, 3262, 293, 3228, 3229, - 4269, 4454, 66, 167, 443, 444, 129, 260, 3274, 3825, - 662, 401, 3825, 541, 658, 3281, 3282, 81, 575, 272, - 575, 3287, 658, 665, 496, 497, 3256, 575, 400, 93, - 658, 519, 520, 521, 522, 523, 524, 644, 3304, 197, - 204, 147, 658, 370, 602, 628, 192, 192, 418, 253, - 333, 597, 196, 541, 337, 513, 658, 3287, 202, 664, - 658, 344, 509, 3912, 129, 73, 658, 132, 596, 192, - 597, 536, 253, 4250, 254, 221, 221, 3343, 651, 607, - 608, 3347, 517, 647, 648, 649, 650, 651, 652, 653, - 654, 553, 256, 187, 552, 197, 240, 253, 221, 658, - 628, 354, 630, 172, 268, 4473, 4474, 536, 4476, 20, - 508, 4538, 405, 4540, 203, 178, 644, 173, 564, 263, - 142, 491, 568, 496, 497, 571, 656, 192, 404, 657, - 658, 657, 196, 661, 662, 658, 582, 4400, 202, 658, - 4593, 587, 425, 56, 590, 291, 291, 627, 607, 603, - 658, 200, 587, 657, 657, 525, 221, 129, 605, 4676, - 132, 657, 657, 657, 3531, 651, 332, 657, 291, 200, - 657, 4539, 657, 650, 658, 3441, 240, 649, 650, 651, - 652, 653, 654, 3449, 350, 656, 556, 343, 657, 657, - 657, 657, 4676, 357, 105, 658, 657, 4193, 4194, 263, - 483, 4654, 658, 649, 650, 657, 657, 656, 4024, 657, - 4206, 4024, 596, 494, 656, 656, 469, 4213, 654, 3449, - 192, 658, 656, 564, 370, 370, 291, 657, 4224, 4225, - 658, 658, 564, 4601, 3500, 4603, 4604, 343, 129, 4416, - 564, 132, 232, 232, 4507, 4422, 241, 370, 250, 221, - 575, 621, 163, 658, 656, 3521, 3522, 547, 12, 3525, - 587, 3527, 656, 13, 4764, 3531, 3633, 212, 129, 200, - 658, 132, 416, 564, 647, 648, 649, 650, 651, 652, - 653, 654, 4095, 176, 474, 4516, 197, 658, 541, 58, - 3556, 115, 214, 495, 197, 664, 197, 3563, 3564, 68, - 274, 192, 656, 214, 3570, 370, 190, 656, 219, 3575, - 658, 658, 664, 82, 3589, 481, 4579, 105, 664, 291, - 204, 664, 200, 3589, 658, 94, 95, 96, 426, 657, - 221, 192, 243, 4833, 493, 3604, 400, 601, 3568, 250, - 496, 497, 625, 197, 113, 3611, 658, 658, 4865, 260, - 105, 376, 416, 3615, 3620, 376, 352, 3623, 641, 4876, - 221, 272, 525, 4880, 525, 484, 277, 3633, 4885, 376, - 514, 3637, 525, 3639, 3640, 286, 525, 543, 202, 197, - 131, 4865, 266, 525, 268, 656, 644, 3653, 3654, 567, - 496, 497, 4876, 644, 560, 644, 4880, 14, 370, 3665, - 291, 4885, 3668, 644, 3634, 603, 644, 287, 4329, 644, - 644, 644, 4333, 3643, 644, 644, 240, 608, 658, 644, - 3695, 644, 28, 644, 30, 4291, 3692, 644, 664, 3695, - 291, 644, 644, 644, 3700, 644, 644, 4250, 644, 3705, - 161, 587, 587, 354, 644, 644, 3712, 644, 249, 249, - 514, 485, 657, 597, 3720, 243, 62, 63, 644, 65, - 7, 3727, 657, 664, 587, 376, 658, 73, 657, 657, - 657, 3712, 260, 657, 657, 386, 360, 83, 657, 370, - 644, 645, 646, 657, 272, 91, 658, 104, 243, 4857, - 575, 647, 648, 649, 650, 651, 652, 653, 654, 664, - 575, 575, 664, 658, 635, 260, 283, 418, 89, 370, - 50, 644, 118, 656, 575, 656, 656, 272, 656, 136, - 83, 383, 587, 644, 200, 200, 132, 4412, 91, 135, - 200, 415, 3899, 597, 151, 176, 658, 260, 658, 4716, - 260, 647, 648, 649, 650, 651, 652, 653, 654, 389, - 50, 219, 564, 340, 564, 118, 173, 257, 469, 165, - 177, 431, 658, 332, 370, 7, 354, 334, 3834, 656, - 196, 376, 189, 3839, 118, 118, 81, 400, 3844, 400, - 115, 350, 493, 4504, 400, 142, 3816, 575, 376, 261, - 4511, 556, 261, 400, 556, 212, 142, 400, 50, 354, - 37, 400, 165, 4416, 4470, 402, 400, 4461, 4462, 4422, - 400, 4465, 4466, 4467, 4468, 587, 400, 449, 662, 656, - 4883, 376, 214, 240, 656, 231, 656, 233, 656, 246, - 541, 664, 651, 3899, 240, 3901, 3902, 251, 173, 656, - 3906, 247, 656, 251, 657, 656, 470, 4501, 657, 3915, - 431, 657, 3918, 3919, 657, 383, 262, 658, 3924, 658, - 3926, 4838, 656, 3893, 3930, 657, 664, 491, 203, 286, - 657, 657, 3938, 657, 651, 4042, 3942, 240, 3944, 376, - 236, 469, 657, 278, 400, 596, 4863, 658, 349, 453, - 514, 658, 200, 657, 463, 664, 587, 608, 260, 4100, - 260, 386, 139, 657, 657, 240, 431, 644, 658, 658, - 629, 118, 481, 319, 469, 656, 465, 628, 400, 630, - 234, 263, 263, 656, 664, 575, 587, 216, 165, 658, - 662, 168, 338, 644, 558, 4589, 4590, 561, 658, 657, - 656, 50, 657, 487, 4598, 657, 657, 658, 4014, 630, - 661, 662, 287, 541, 274, 657, 319, 467, 181, 286, - 644, 645, 646, 212, 154, 4031, 564, 270, 205, 658, - 657, 657, 485, 597, 543, 338, 4042, 260, 260, 658, - 511, 605, 4012, 376, 656, 634, 541, 393, 225, 395, - 656, 560, 657, 657, 231, 658, 233, 403, 361, 656, - 263, 263, 419, 658, 630, 658, 657, 20, 656, 414, - 376, 376, 83, 239, 197, 4678, 197, 4738, 4739, 197, - 657, 567, 439, 277, 657, 370, 657, 657, 657, 63, - 447, 251, 657, 340, 265, 657, 426, 657, 455, 658, - 657, 18, 4249, 657, 383, 630, 250, 656, 658, 657, - 75, 288, 664, 657, 656, 4121, 608, 418, 480, 20, - 4126, 608, 658, 656, 4130, 657, 608, 178, 485, 475, - 132, 132, 558, 4139, 656, 312, 412, 656, 413, 87, - 4146, 498, 499, 418, 656, 503, 664, 150, 132, 37, - 370, 180, 658, 4159, 340, 657, 143, 564, 564, 564, - 263, 4176, 28, 4716, 30, 558, 612, 279, 656, 4178, - 4176, 250, 608, 608, 657, 376, 382, 658, 4184, 656, - 316, 17, 18, 657, 4325, 618, 618, 533, 534, 535, - 527, 176, 464, 550, 540, 470, 62, 63, 657, 65, - 474, 658, 657, 64, 383, 4811, 602, 73, 546, 50, - 556, 50, 4214, 559, 160, 50, 491, 83, 656, 465, - 4226, 370, 4228, 580, 250, 91, 39, 656, 656, 656, - 376, 15, 578, 656, 602, 4241, 656, 540, 132, 4241, - 417, 263, 20, 263, 369, 602, 644, 604, 630, 426, - 596, 176, 118, 556, 199, 566, 142, 530, 142, 656, - 165, 50, 50, 50, 441, 197, 132, 656, 397, 135, - 657, 4286, 657, 656, 365, 370, 656, 4384, 656, 656, - 4286, 556, 459, 4289, 656, 4838, 561, 123, 124, 125, - 126, 127, 547, 613, 657, 13, 656, 162, 657, 165, - 286, 656, 658, 547, 657, 580, 12, 656, 26, 122, - 4863, 66, 658, 383, 66, 656, 129, 50, 50, 37, - 38, 657, 656, 140, 4330, 656, 503, 582, 197, 506, - 605, 658, 150, 5, 376, 376, 383, 592, 657, 657, - 383, 439, 136, 602, 62, 63, 621, 474, 658, 657, - 232, 156, 263, 657, 609, 50, 74, 476, 236, 536, - 370, 656, 493, 2504, 658, 231, 2649, 233, 623, 2855, - 4030, 4026, 185, 4498, 240, 4028, 1054, 3203, 4384, 192, - 4144, 247, 100, 934, 102, 1107, 104, 4496, 4615, 4785, - 226, 227, 228, 229, 4396, 4781, 262, 4323, 116, 4568, - 1131, 4020, 52, 610, 1972, 2060, 3006, 3826, 221, 222, - 276, 2289, 4418, 4419, 3033, 4385, 2560, 695, 1691, 137, - 138, 2558, 4514, 2559, 1179, 1937, 4335, 2810, 2264, 3663, - 3043, 3838, 3048, 3500, 4584, 1450, 4287, 4680, 4833, 694, - 3841, 4772, 4811, 4470, 2208, 4451, 164, 165, 4153, 3281, - 2803, 169, 3906, 319, 172, 2811, 3284, 4846, 4658, 3699, - 3373, 3967, 4000, 718, 4371, 4396, 4678, 4384, 723, 2717, - 4611, 4039, 338, 3429, 3432, 2954, 3424, 4483, 291, 4485, - 4787, 84, 84, 201, 4738, 203, 4739, 4594, 4160, 4620, - 4511, 4504, 4207, 211, 3277, 213, 1081, 333, 2810, 335, - 336, 337, 4330, 2691, 1144, 4182, 761, 2269, 344, 1616, - 4672, 2581, 3925, 231, 3025, 233, 4522, 4658, 4524, 4525, - 2549, 239, 240, 778, 2046, 4531, 3487, 393, 2460, 395, - 4500, 1731, 1705, 2610, 4411, 1004, 4656, 403, 3449, 991, - 2990, 2106, 355, 261, 2369, 1098, 2637, 2365, 4554, 385, - 1236, 3539, 388, 2632, 4488, 4312, 369, 370, 2972, 4776, - 3727, 4777, 4568, 1208, 3803, 283, 4568, 822, 823, 824, - 825, 2484, 3434, 3938, 4128, 1636, 1636, 3087, 4584, 834, - 3273, 4439, 4780, 3080, 4554, 4127, 4127, 2338, 4594, 425, - 4697, 84, 1418, 1468, 312, 2543, 2586, 3844, 3516, 4614, - 3570, 3515, 4676, 621, 1741, 714, 2179, 1565, 4614, 475, - 609, 609, 1115, 2180, 869, 109, 3944, 4587, 4588, 2685, - 1960, 1476, 3490, 4831, 4849, 4631, 4297, 4480, 4880, 4885, - 811, 4386, 3521, 2670, 4640, 4641, 3563, 608, 4644, 4780, - 1517, 1890, 608, 4784, 2135, 2662, 482, 483, 2663, 1496, - 2017, 600, 1642, 978, 2522, 910, 2605, 4275, 4282, 3008, - 3289, 4631, 380, 4770, 1408, 601, 4672, 533, 534, 535, - 4676, 926, 927, 985, 540, 930, 645, 645, 645, -1, - 1644, -1, -1, 1107, -1, -1, 1107, -1, 406, 1107, - 556, 4697, -1, 559, -1, 950, -1, -1, -1, 417, - 418, -1, -1, 421, 422, -1, -1, 962, -1, -1, - -1, -1, 578, -1, -1, -1, -1, -1, 4688, 4689, - -1, -1, -1, -1, 442, -1, -1, -1, -1, 4735, - 596, -1, -1, -1, -1, 149, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4886, 123, 124, 125, 126, - 127, 564, -1, -1, -1, 568, -1, -1, 571, -1, - -1, -1, -1, -1, 4770, 4872, -1, -1, -1, 582, - 4776, 4777, 490, -1, 587, -1, -1, 590, -1, -1, - -1, -1, -1, -1, -1, 503, -1, -1, -1, 625, - 656, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 639, 640, 641, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, - -1, 235, 540, 237, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 649, 650, -1, -1, - 558, -1, -1, -1, -1, -1, -1, -1, -1, 226, - 227, 228, 229, -1, -1, -1, -1, -1, -1, 4865, - -1, -1, -1, -1, -1, -1, 4872, -1, -1, -1, - 4876, -1, -1, 4843, 4880, -1, -1, -1, -1, 4885, - -1, 295, -1, 297, 298, 299, 300, 301, -1, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 616, 313, - 314, 315, -1, -1, 1159, -1, 624, 1162, 1163, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1187, 1188, -1, -1, -1, -1, -1, -1, - -1, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, - 1205, 1206, 1207, -1, -1, -1, 333, -1, 335, 336, - 337, 1216, 1217, -1, 1219, 1220, -1, 344, -1, 1224, - 1225, -1, -1, 1228, 1229, 1230, 1231, -1, 1233, 1234, - 1235, -1, -1, -1, -1, -1, -1, 1242, 1243, -1, - 1245, 1246, 1247, 1248, 1249, -1, -1, 1252, 1253, 1254, - 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, -1, 1264, - -1, -1, 1267, 1268, -1, -1, -1, 1272, -1, -1, - -1, 1276, 1277, 1278, -1, -1, -1, -1, -1, 443, - 444, -1, -1, 1288, 1289, 1290, -1, -1, -1, -1, - -1, -1, 1297, -1, -1, -1, -1, -1, 425, 1304, - 1305, 1306, 1307, -1, -1, -1, 37, -1, -1, -1, - 1315, 1316, 1317, -1, 1319, 1320, 1321, 1322, 1323, -1, - 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, -1, -1, - -1, 1336, 1337, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 28, -1, 30, -1, - -1, -1, -1, -1, -1, 482, 483, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, - -1, -1, 12, -1, 14, -1, 16, -1, -1, -1, - 62, 63, -1, 65, -1, -1, -1, -1, 28, -1, - 30, 73, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 83, -1, -1, -1, -1, -1, -1, 139, 91, - -1, -1, -1, -1, -1, -1, -1, 1422, 623, -1, - 60, -1, -1, -1, -1, 65, 66, -1, -1, -1, - -1, 71, -1, 1438, 165, -1, 118, 168, -1, -1, - -1, -1, -1, 83, -1, -1, -1, -1, -1, -1, - 132, 91, -1, 135, -1, -1, -1, -1, -1, -1, - -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 205, -1, -1, -1, 118, -1, - -1, -1, -1, 165, -1, -1, -1, -1, -1, 694, - -1, -1, 132, -1, 225, 135, -1, -1, 625, -1, - 231, -1, 233, 143, 144, -1, -1, -1, -1, -1, - -1, 151, 1517, 640, 641, -1, -1, -1, 723, 159, - -1, -1, -1, 163, -1, 165, -1, 1532, -1, -1, - -1, -1, -1, -1, -1, 175, -1, -1, -1, -1, - -1, -1, -1, -1, 1549, -1, -1, -1, -1, 231, - -1, 233, -1, -1, -1, 195, 761, 288, 240, -1, - -1, -1, -1, -1, -1, 247, -1, -1, -1, -1, - -1, -1, -1, 778, -1, -1, -1, -1, -1, -1, - 262, 312, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 231, -1, 233, -1, -1, -1, -1, 238, -1, - 240, 1606, -1, -1, -1, -1, -1, 247, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 825, -1, 262, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 319, -1, -1, - -1, -1, -1, -1, -1, -1, 286, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 338, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 319, - -1, -1, -1, -1, -1, -1, 417, -1, -1, -1, - -1, -1, -1, -1, -1, 426, -1, -1, 338, -1, - -1, -1, 342, -1, -1, 910, -1, -1, -1, 1714, - 441, 393, -1, 395, -1, -1, -1, -1, -1, -1, - -1, 403, -1, -1, -1, -1, -1, -1, 459, 28, - -1, 30, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 381, -1, -1, -1, 950, 386, -1, -1, 1754, - -1, -1, -1, 393, -1, 395, -1, -1, -1, -1, - 400, -1, -1, 403, -1, -1, 65, -1, -1, -1, - -1, -1, 503, -1, -1, 506, -1, -1, -1, -1, - -1, -1, -1, -1, 83, -1, -1, -1, -1, -1, - -1, -1, 91, 475, 434, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 536, -1, -1, 448, 449, - 450, 451, -1, -1, -1, -1, -1, -1, -1, 118, - -1, -1, -1, -1, 555, -1, -1, 558, -1, -1, - -1, -1, -1, 132, -1, 475, 135, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 533, 534, 535, -1, -1, -1, -1, 540, -1, - -1, -1, -1, 1868, 1869, 1870, 165, -1, -1, -1, - -1, -1, -1, -1, 556, -1, -1, 559, 1883, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 533, 534, 535, 578, -1, -1, -1, - 540, -1, -1, -1, 1909, -1, -1, -1, -1, -1, - 1915, -1, -1, 1918, 596, 1920, 556, -1, -1, 559, - -1, 1926, -1, 1928, 1929, -1, -1, -1, -1, -1, - -1, -1, 231, -1, 233, -1, -1, -1, 578, -1, - -1, 240, -1, 583, -1, -1, -1, -1, 247, -1, - -1, -1, -1, -1, 1159, 1960, 596, 1162, -1, -1, - -1, -1, -1, 262, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1187, 1188, -1, -1, -1, -1, -1, -1, - -1, 1196, 1197, -1, -1, 1200, 1201, 1202, 1203, 1204, - 1205, 1206, 1207, -1, -1, -1, -1, -1, -1, -1, - -1, 1216, 1217, -1, 1219, 1220, -1, -1, -1, 1224, - 319, -1, 662, 1228, 1229, 1230, 1231, -1, -1, 1234, - -1, -1, -1, -1, -1, -1, 2041, 1242, 1243, 338, - 1245, 1246, -1, -1, -1, 2050, -1, 1252, 1253, 1254, - -1, -1, 1257, 1258, 1259, 1260, 1261, 1262, -1, 1264, - -1, -1, 1267, 1268, -1, -1, -1, 1272, -1, -1, - -1, 1276, 1277, 1278, 2079, -1, -1, -1, -1, -1, - -1, -1, -1, 1288, 1289, 1290, -1, 14, -1, 16, - -1, -1, 1297, -1, 393, -1, 395, -1, -1, 1304, - 1305, 1306, -1, -1, 403, -1, -1, 2112, -1, -1, - -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 52, 53, -1, 2133, -1, - -1, -1, 1337, 60, -1, -1, 2141, -1, 65, 66, - -1, -1, -1, -1, -1, 2150, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 475, 104, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2200, -1, -1, -1, -1, - -1, 128, -1, -1, -1, -1, -1, -1, -1, 136, - 137, 138, -1, -1, -1, -1, -1, 1422, -1, -1, - -1, -1, -1, 150, 151, -1, -1, -1, -1, -1, - -1, -1, -1, 1438, 533, 534, 535, -1, -1, -1, - -1, 540, -1, -1, -1, -1, -1, -1, -1, -1, - 177, -1, -1, -1, -1, -1, -1, 556, -1, 2264, - 559, -1, -1, -1, -1, -1, -1, 194, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 578, - 2285, -1, -1, 210, -1, 212, -1, -1, -1, 216, - -1, -1, -1, 220, -1, -1, -1, 596, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1517, -1, -1, -1, -1, -1, -1, 246, - -1, 248, -1, -1, -1, -1, -1, 1532, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 264, -1, -1, - -1, -1, 2347, -1, 1549, -1, 2351, -1, -1, -1, - -1, 2356, 2357, -1, -1, 282, -1, -1, -1, 286, - 2365, -1, 2367, -1, 2369, 2370, 2371, 2372, -1, -1, - 2375, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2385, 2386, -1, 2388, 2389, -1, 2391, 2392, 2393, 2394, - -1, 2396, -1, -1, 2399, -1, -1, -1, -1, -1, - -1, 1606, -1, 2408, -1, -1, -1, -1, -1, -1, - 2415, -1, 2417, -1, 2419, 2420, -1, 2422, 2423, -1, - -1, -1, 2427, 2428, 2429, -1, -1, -1, 2433, 2434, - 2435, -1, 2437, -1, 2439, -1, 2441, -1, 2443, -1, - 2445, -1, -1, -1, -1, 2450, -1, -1, -1, -1, - -1, -1, -1, -1, 381, -1, -1, -1, -1, -1, - -1, -1, 2467, -1, -1, -1, -1, -1, -1, 2474, - -1, 398, 2477, 400, -1, -1, -1, -1, 2483, -1, - -1, 2486, -1, -1, -1, 2490, 413, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 424, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 446, - -1, -1, 449, -1, 451, -1, -1, 454, -1, -1, - 457, 458, -1, -1, -1, -1, -1, 2542, -1, -1, - -1, 468, -1, -1, 471, -1, -1, -1, -1, 1754, - -1, -1, 479, 2558, 2559, 2560, -1, 2562, 485, -1, - -1, -1, -1, -1, -1, -1, 493, -1, -1, -1, - -1, 498, 499, 500, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 531, -1, -1, -1, -1, -1, - -1, -1, 539, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2640, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 583, -1, -1, -1, - -1, -1, -1, 1868, 1869, 1870, -1, -1, 595, -1, - -1, -1, 599, -1, -1, 602, -1, -1, -1, -1, - 607, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2695, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1909, -1, -1, -1, -1, -1, - 637, 2716, -1, 1918, -1, 1920, 643, -1, -1, -1, - -1, -1, -1, -1, 2729, -1, -1, -1, -1, 656, - -1, -1, -1, -1, -1, -1, 2741, 2742, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 2803, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 2824, - -1, -1, -1, -1, 2829, 2830, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 2041, -1, -1, -1, - -1, -1, -1, -1, -1, 2050, -1, -1, -1, -1, - -1, -1, -1, -1, 2859, 2860, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2079, 14, -1, 16, -1, 2884, - -1, -1, -1, 2888, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 34, -1, -1, -1, 38, - -1, -1, -1, -1, -1, -1, -1, 2112, -1, -1, - 2915, 2916, -1, 52, 53, -1, -1, 56, -1, -1, - -1, 60, -1, -1, -1, -1, 65, 66, 2133, -1, - -1, 2936, -1, -1, -1, -1, -1, -1, -1, -1, - 2945, -1, 2947, -1, 2949, 2150, 85, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, - -1, -1, -1, -1, 2979, -1, -1, -1, -1, 2984, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 128, - -1, -1, -1, -1, -1, -1, -1, 136, 137, 138, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 150, 151, -1, -1, -1, -1, -1, 3023, -1, - -1, -1, -1, -1, 163, -1, -1, -1, 3033, 3034, - 3035, 3036, -1, -1, -1, -1, -1, -1, 177, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 194, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 210, -1, 212, -1, -1, 3081, 216, -1, -1, - 2285, 220, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 234, -1, -1, -1, -1, - -1, -1, -1, 3108, -1, -1, -1, 246, -1, 248, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3128, -1, 264, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 2347, 282, -1, -1, 2351, 286, -1, -1, - -1, 2356, 2357, -1, 293, -1, -1, -1, -1, -1, - 2365, -1, 2367, -1, 2369, -1, 2371, 2372, -1, -1, - -1, -1, -1, -1, 3179, -1, -1, -1, -1, -1, - 2385, 2386, -1, 2388, -1, -1, 2391, 2392, 2393, 2394, - -1, 2396, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 2408, -1, -1, -1, -1, -1, -1, - 2415, -1, 2417, -1, 2419, 2420, -1, 2422, -1, -1, - -1, -1, 2427, 2428, 2429, -1, -1, -1, 2433, 2434, - 2435, -1, 2437, -1, 2439, -1, 2441, -1, 2443, -1, - 2445, -1, 381, -1, -1, 2450, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, - -1, 400, 2467, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3277, -1, 413, -1, -1, -1, 2483, -1, - -1, 2486, -1, -1, -1, 424, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3310, -1, 446, -1, -1, - 449, -1, 451, -1, 453, 454, -1, -1, 457, 458, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 468, - -1, -1, 471, -1, -1, -1, -1, -1, -1, 3344, - 479, -1, -1, -1, -1, -1, 485, -1, -1, -1, - 3355, -1, -1, -1, 493, 2560, -1, -1, -1, 498, - 499, 500, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3385, -1, -1, -1, 3389, 3390, -1, 3392, -1, -1, - -1, -1, 531, -1, -1, -1, 3401, -1, -1, -1, - 539, 3406, -1, -1, 3409, -1, 3411, 3412, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2640, -1, -1, -1, -1, - -1, -1, 3447, -1, 583, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 595, -1, -1, -1, - 599, -1, -1, 602, -1, -1, -1, -1, 607, -1, - -1, -1, -1, -1, -1, -1, 3481, -1, -1, -1, - -1, -1, 14, -1, 16, -1, -1, -1, -1, -1, - 629, -1, -1, -1, -1, -1, -1, -1, 637, -1, - -1, -1, 34, -1, 643, -1, 38, -1, -1, -1, - 3515, -1, -1, -1, -1, -1, -1, 656, -1, -1, - 52, 53, -1, -1, 56, -1, -1, -1, 60, -1, - -1, -1, -1, 65, 66, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3552, -1, -1, - -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3572, -1, -1, - -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3598, -1, -1, 128, -1, -1, -1, - -1, -1, -1, -1, 136, 137, 138, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 150, 151, - -1, -1, -1, -1, -1, 2830, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 177, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 194, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 210, 2884, - 212, -1, -1, 2888, 216, -1, -1, -1, 220, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 234, -1, 3709, 3710, -1, -1, -1, -1, - 2915, 2916, -1, -1, 246, -1, 248, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 2936, 264, -1, -1, -1, -1, -1, -1, -1, - 2945, -1, 2947, -1, 2949, -1, -1, -1, -1, -1, - 282, -1, -1, -1, 286, -1, -1, -1, -1, -1, - -1, 293, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 6, -1, -1, -1, -1, -1, 12, - -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, - 3825, -1, -1, -1, -1, 28, -1, 30, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3845, -1, -1, -1, -1, -1, -1, -1, -1, 381, - -1, -1, -1, -1, -1, -1, -1, 60, -1, -1, - -1, -1, 65, 3868, -1, -1, 398, -1, 400, -1, - 3875, -1, -1, -1, -1, -1, 3081, -1, -1, -1, - 83, 413, -1, -1, -1, -1, -1, -1, 91, -1, - -1, -1, 424, -1, -1, -1, -1, -1, 101, -1, - -1, -1, -1, 3108, -1, -1, 3911, -1, -1, -1, - -1, -1, -1, -1, 446, 118, -1, 449, -1, 451, - -1, 453, 454, 3128, -1, 457, 458, -1, -1, 132, - -1, -1, 135, -1, -1, -1, 468, -1, -1, 471, - 143, -1, -1, -1, -1, -1, -1, 479, 151, 36, - 37, -1, -1, 485, -1, 42, 159, 44, -1, 46, - 47, 493, 165, -1, -1, -1, 498, 499, 500, -1, - -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 195, -1, -1, -1, -1, -1, -1, 531, - -1, -1, -1, -1, -1, -1, -1, 539, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4024, - -1, -1, -1, -1, -1, -1, -1, -1, 231, -1, - 233, -1, 119, -1, -1, 122, -1, 240, -1, -1, - -1, -1, -1, 130, 247, -1, -1, -1, -1, -1, - -1, 583, 4057, -1, -1, -1, 4061, -1, -1, 262, - -1, 148, -1, 595, -1, -1, -1, 599, -1, -1, - 602, -1, -1, -1, -1, 607, -1, -1, -1, 166, - -1, -1, -1, 286, -1, -1, -1, -1, -1, 4094, - 4095, -1, -1, -1, -1, -1, -1, 629, -1, -1, - -1, -1, -1, -1, 191, 637, 193, -1, -1, -1, - -1, 643, -1, -1, -1, -1, 319, -1, -1, -1, - 207, 208, -1, -1, 656, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, -1, -1, -1, 342, - -1, -1, -1, -1, -1, -1, -1, -1, 4153, -1, - 3355, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 251, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3385, -1, -1, 386, 3389, 3390, -1, -1, -1, -1, - 393, -1, 395, 280, -1, -1, 3401, -1, -1, -1, - 403, 3406, 289, 290, 3409, 292, 3411, 3412, -1, 4214, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4243, 326, - 327, 328, -1, -1, -1, 4250, 449, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 345, 346, - 347, -1, -1, -1, -1, -1, 353, -1, -1, 356, - -1, -1, 475, -1, -1, -1, 3481, -1, -1, -1, - -1, -1, 4287, -1, -1, 372, 373, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4302, -1, 4304, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3515, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 408, 409, -1, 4329, -1, -1, -1, 4333, -1, - 533, 534, 535, -1, -1, -1, -1, 540, -1, -1, - -1, -1, -1, -1, -1, -1, 433, 3552, -1, -1, - -1, -1, -1, 556, -1, -1, 559, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3572, -1, -1, - -1, -1, -1, -1, -1, 578, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4396, -1, 596, -1, -1, -1, -1, -1, -1, - -1, -1, 489, -1, -1, -1, 493, -1, -1, -1, - -1, 4416, -1, -1, -1, -1, -1, 4422, -1, -1, - 507, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4435, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 565, -1, - -1, 568, -1, -1, 571, 572, 573, 574, -1, -1, - -1, -1, -1, -1, 4499, -1, -1, -1, -1, 4504, - -1, -1, -1, -1, 3709, 3710, 4511, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 614, 615, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 641, 4560, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4620, -1, -1, -1, -1, - -1, 4626, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3845, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3868, 4669, -1, -1, -1, -1, -1, - 3875, -1, 4677, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 4708, -1, -1, 3911, -1, -1, -1, - -1, 4716, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4736, -1, 4738, 4739, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 4764, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 4788, -1, -1, 4791, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4823, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4833, -1, - -1, -1, -1, 4838, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 4057, -1, -1, -1, 4061, -1, 4863, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 4888, -1, -1, -1, -1, -1, 4094, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 4243, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4302, -1, 4304, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 4435, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 4560, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, 48, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, 4669, 74, 75, 76, 77, 78, - 79, 80, 4677, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, 4708, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - 269, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, 4888, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, 576, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, 13, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, 376, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, 200, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, 200, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, 200, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, 13, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, -1, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, 364, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, -1, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, -1, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, -1, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, - 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, - 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, 178, - -1, 180, 181, 182, 183, 184, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, 215, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, 246, 247, 248, - 249, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, 272, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, 363, -1, 365, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, 396, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, 453, 454, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, 537, 538, - 539, 540, -1, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, 581, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - 609, 610, 611, 612, 613, -1, -1, 616, 617, -1, - 619, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, -1, - 649, 650, -1, -1, -1, -1, 655, 656, -1, -1, - 659, 660, -1, -1, 663, 664, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - 39, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - 129, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, 185, 186, 187, -1, - 189, 190, 191, 192, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, 221, 222, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, 291, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, 355, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - 369, 370, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, 582, 583, 584, 585, 586, 587, 588, - 589, 590, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, 5, - -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, 663, 664, 22, -1, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, -1, 91, 92, 93, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, 202, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, 240, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, 263, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - 276, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, 485, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, 514, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, -1, 641, -1, -1, -1, -1, - 5, -1, 7, 8, 9, 10, 11, 12, -1, -1, - 15, -1, -1, -1, 19, -1, -1, 22, 664, 24, - 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, - -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, - 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, - 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, - 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, - 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, - 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, - 95, 96, 97, 98, -1, 100, -1, -1, 103, -1, - -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, - -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, - -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, - 135, -1, -1, -1, 139, -1, 141, 142, 143, 144, - 145, -1, -1, -1, -1, 150, -1, -1, 153, 154, - 155, -1, -1, -1, 159, -1, 161, 162, -1, 164, - 165, 166, -1, 168, 169, -1, 171, 172, 173, 174, - 175, 176, 177, -1, -1, 180, 181, 182, 183, -1, - -1, 186, 187, -1, 189, 190, 191, -1, -1, 194, - -1, -1, -1, 198, 199, -1, 201, 202, 203, -1, - 205, 206, 207, 208, 209, 210, 211, -1, 213, -1, - -1, 216, 217, 218, -1, 220, -1, -1, -1, 224, - 225, -1, -1, -1, 229, 230, 231, 232, 233, -1, - -1, -1, 237, 238, 239, 240, -1, 242, -1, -1, - -1, -1, 247, 248, -1, -1, -1, 252, -1, 254, - 255, -1, 257, 258, -1, -1, -1, 262, 263, -1, - 265, 266, 267, -1, -1, 270, -1, -1, 273, 274, - -1, -1, -1, -1, -1, 280, 281, -1, 283, -1, - 285, -1, 287, 288, -1, -1, -1, -1, -1, -1, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, -1, 312, 313, 314, - 315, -1, 317, 318, 319, 320, -1, 322, 323, 324, - -1, -1, -1, -1, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, -1, 340, -1, 342, -1, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, -1, - -1, 356, -1, -1, 359, 360, 361, 362, -1, -1, - -1, 366, 367, -1, -1, -1, 371, -1, 373, 374, - 375, -1, 377, 378, 379, 380, -1, 382, 383, -1, - -1, -1, -1, -1, -1, -1, -1, 392, 393, 394, - -1, -1, 397, -1, 399, -1, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, -1, -1, 413, 414, - 415, -1, 417, -1, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, -1, -1, -1, 434, - 435, 436, 437, 438, -1, -1, 441, 442, 443, 444, - 445, -1, 447, 448, -1, 450, 451, 452, -1, -1, - 455, -1, 457, -1, 459, 460, -1, 462, 463, -1, - 465, -1, 467, -1, -1, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, -1, 483, 484, - -1, -1, -1, 488, 489, 490, 491, -1, -1, -1, - 495, -1, -1, -1, 499, -1, 501, 502, 503, 504, - 505, 506, -1, 508, 509, 510, 511, 512, 513, 514, - -1, -1, -1, -1, -1, 520, 521, -1, 523, -1, - -1, 526, -1, -1, -1, 530, 531, 532, -1, -1, - -1, 536, -1, -1, 539, 540, -1, 542, 543, 544, - 545, 546, 547, -1, -1, 550, 551, 552, 553, -1, - 555, 556, -1, -1, 559, 560, 561, 562, -1, -1, - 565, 566, -1, 568, 569, 570, 571, -1, -1, -1, - -1, -1, 577, 578, 579, -1, -1, -1, 583, 584, - 585, 586, -1, 588, 589, -1, 591, 592, -1, 594, - 595, -1, -1, 598, -1, -1, 601, -1, 603, -1, - 605, 606, -1, -1, -1, -1, -1, -1, 613, -1, - -1, 616, -1, -1, -1, 620, 621, 622, 623, 624, - 625, 626, -1, -1, -1, -1, -1, -1, 633, 634, - -1, 636, 637, 638, -1, -1, 641, -1, -1, -1, - -1, 5, -1, 7, 8, 9, 10, 11, 12, -1, - -1, 15, -1, -1, -1, 19, -1, -1, 22, 664, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, - -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, - -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, - 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, - 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, - 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, - -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, - -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, - -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, - -1, 135, -1, -1, -1, 139, -1, 141, 142, 143, - 144, 145, -1, -1, -1, -1, 150, -1, -1, 153, - 154, 155, -1, -1, -1, 159, -1, 161, 162, -1, - 164, 165, 166, -1, 168, 169, -1, 171, 172, 173, - 174, 175, 176, 177, -1, -1, 180, 181, 182, 183, - -1, -1, 186, 187, -1, 189, 190, 191, -1, -1, - 194, -1, -1, -1, 198, 199, -1, 201, -1, 203, - -1, 205, 206, 207, 208, 209, 210, 211, -1, 213, - -1, -1, 216, 217, 218, -1, 220, -1, -1, -1, - 224, 225, -1, -1, -1, 229, 230, 231, 232, 233, - -1, -1, -1, 237, 238, 239, -1, -1, 242, -1, - -1, -1, -1, 247, 248, -1, -1, -1, 252, -1, - 254, 255, -1, 257, 258, -1, -1, -1, 262, -1, - -1, 265, 266, 267, -1, -1, 270, -1, -1, 273, - 274, -1, -1, -1, -1, -1, 280, 281, -1, 283, - -1, 285, -1, 287, 288, -1, -1, -1, -1, -1, - -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, -1, 312, 313, - 314, 315, -1, 317, 318, 319, 320, -1, 322, 323, - 324, -1, -1, -1, -1, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, -1, 340, -1, 342, -1, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - -1, -1, 356, -1, -1, 359, 360, 361, 362, -1, - -1, -1, 366, 367, -1, -1, -1, 371, -1, 373, - 374, 375, -1, 377, 378, 379, 380, -1, 382, 383, - -1, -1, -1, -1, -1, -1, -1, -1, 392, 393, - 394, -1, -1, 397, -1, 399, -1, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, -1, -1, 413, - 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, - -1, 425, 426, 427, -1, -1, 430, -1, -1, -1, - 434, 435, 436, 437, 438, -1, -1, 441, 442, 443, - 444, 445, -1, 447, 448, -1, 450, 451, 452, -1, - -1, 455, -1, 457, -1, 459, 460, -1, 462, 463, - -1, 465, -1, 467, -1, -1, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, -1, 483, - 484, 485, -1, -1, 488, 489, 490, 491, -1, -1, - -1, 495, -1, -1, -1, 499, -1, 501, 502, 503, - 504, 505, 506, -1, 508, 509, 510, 511, 512, 513, - -1, -1, -1, -1, -1, -1, 520, 521, -1, 523, - -1, -1, 526, -1, -1, -1, 530, 531, 532, -1, - -1, -1, 536, -1, -1, 539, 540, -1, 542, 543, - 544, 545, 546, 547, -1, -1, 550, 551, 552, 553, - -1, 555, 556, -1, -1, 559, 560, 561, 562, -1, - -1, 565, 566, -1, 568, 569, 570, 571, -1, -1, - -1, -1, -1, 577, 578, 579, -1, -1, -1, 583, - 584, 585, 586, -1, 588, 589, -1, 591, 592, -1, - 594, 595, -1, -1, 598, -1, -1, 601, -1, 603, - -1, 605, 606, -1, -1, -1, -1, -1, -1, 613, - -1, -1, 616, -1, -1, -1, 620, 621, 622, 623, - 624, 625, 626, -1, -1, -1, -1, -1, -1, 633, - 634, -1, 636, 637, 638, -1, -1, 641, -1, -1, - -1, -1, 5, -1, 7, 8, 9, 10, 11, 12, - -1, -1, 15, 657, -1, -1, 19, -1, -1, 22, - 664, 24, 25, 26, 27, 28, 29, 30, 31, 32, - -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, - -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, - -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, - -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, - 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, - -1, 94, 95, 96, 97, 98, -1, 100, -1, -1, - 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, - 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, - -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, - 133, -1, 135, -1, -1, -1, 139, -1, 141, 142, - 143, 144, 145, -1, -1, -1, -1, 150, -1, -1, - 153, 154, 155, -1, -1, -1, 159, -1, 161, 162, - -1, 164, 165, 166, -1, 168, 169, -1, 171, 172, - 173, 174, 175, 176, 177, -1, -1, 180, 181, 182, - 183, -1, -1, 186, 187, -1, 189, 190, 191, -1, - -1, 194, -1, -1, -1, 198, 199, -1, 201, -1, - 203, -1, 205, 206, 207, 208, 209, 210, 211, -1, - 213, -1, -1, 216, 217, 218, -1, 220, -1, -1, - -1, 224, 225, -1, -1, -1, 229, 230, 231, 232, - 233, -1, -1, -1, 237, 238, 239, -1, -1, 242, - -1, -1, -1, -1, 247, 248, -1, -1, -1, 252, - -1, 254, 255, -1, 257, 258, -1, -1, -1, 262, - -1, -1, 265, 266, 267, -1, -1, 270, -1, -1, - 273, 274, -1, -1, -1, -1, -1, 280, 281, -1, - 283, -1, 285, -1, 287, 288, -1, -1, -1, -1, - -1, -1, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, -1, 312, - 313, 314, 315, -1, 317, 318, 319, 320, -1, 322, - 323, 324, -1, -1, -1, -1, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, -1, 340, -1, 342, - -1, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, -1, -1, 356, -1, -1, 359, 360, 361, 362, - -1, -1, -1, 366, 367, -1, -1, -1, 371, -1, - 373, 374, 375, -1, 377, 378, 379, 380, -1, 382, - 383, -1, -1, -1, -1, -1, -1, -1, -1, 392, - 393, 394, -1, -1, 397, -1, 399, -1, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, -1, -1, - 413, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, -1, -1, - -1, 434, 435, 436, 437, 438, -1, -1, 441, 442, - 443, 444, 445, -1, 447, 448, -1, 450, 451, 452, - -1, -1, 455, -1, 457, -1, 459, 460, -1, 462, - 463, -1, 465, -1, 467, -1, -1, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, -1, - 483, 484, -1, -1, -1, 488, 489, 490, 491, -1, - -1, -1, 495, -1, -1, -1, 499, -1, 501, 502, - 503, 504, 505, 506, -1, 508, 509, 510, 511, 512, - 513, -1, -1, -1, -1, -1, -1, 520, 521, -1, - 523, -1, -1, 526, -1, -1, -1, 530, 531, 532, - -1, -1, -1, 536, -1, -1, 539, 540, -1, 542, - 543, 544, 545, 546, 547, -1, -1, 550, 551, 552, - 553, -1, 555, 556, -1, -1, 559, 560, 561, 562, - -1, -1, 565, 566, -1, 568, 569, 570, 571, -1, - -1, -1, -1, -1, 577, 578, 579, -1, -1, -1, - 583, 584, 585, 586, -1, 588, 589, -1, 591, 592, - -1, 594, 595, -1, -1, 598, -1, -1, 601, -1, - 603, -1, 605, 606, -1, -1, -1, -1, -1, -1, - 613, -1, -1, 616, -1, -1, -1, 620, 621, 622, - 623, 624, 625, 626, -1, -1, -1, -1, -1, -1, - 633, 634, -1, 636, 637, 638, -1, -1, 641, -1, - -1, -1, -1, -1, -1, 5, -1, 7, 8, 9, - 10, 11, 12, -1, 657, 15, -1, -1, -1, 19, - 663, 664, 22, -1, 24, 25, 26, 27, 28, 29, - 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, - -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, - -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, - -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, - 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, - -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, - -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, - -1, -1, -1, 133, -1, 135, -1, -1, -1, 139, - -1, 141, 142, 143, 144, 145, -1, -1, -1, -1, - 150, -1, -1, 153, 154, 155, -1, -1, -1, 159, - -1, 161, 162, -1, 164, 165, 166, -1, 168, 169, - -1, 171, 172, 173, 174, 175, 176, 177, -1, -1, - 180, 181, 182, 183, -1, -1, 186, 187, -1, 189, - 190, 191, -1, -1, 194, -1, -1, -1, 198, 199, - -1, 201, -1, 203, -1, 205, 206, 207, 208, 209, - 210, 211, -1, 213, -1, -1, 216, 217, 218, -1, - 220, -1, -1, -1, 224, 225, -1, -1, -1, 229, - 230, 231, 232, 233, -1, -1, -1, 237, 238, 239, - -1, -1, 242, -1, -1, -1, -1, 247, 248, -1, - -1, -1, 252, -1, 254, 255, -1, 257, 258, -1, - -1, -1, 262, -1, -1, 265, 266, 267, -1, -1, - 270, -1, -1, 273, 274, -1, -1, -1, -1, -1, - 280, 281, -1, 283, -1, 285, -1, 287, 288, -1, - -1, -1, -1, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, -1, 312, 313, 314, 315, -1, 317, 318, 319, - 320, -1, 322, 323, 324, -1, -1, -1, -1, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, -1, - 340, -1, 342, -1, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, -1, -1, 356, -1, -1, 359, - 360, 361, 362, -1, -1, -1, 366, 367, -1, -1, - -1, 371, -1, 373, 374, 375, -1, 377, 378, 379, - 380, -1, 382, 383, -1, -1, -1, -1, -1, -1, - -1, -1, 392, 393, 394, -1, -1, 397, -1, 399, - -1, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, -1, -1, 413, 414, 415, -1, 417, -1, 419, - 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, - 430, -1, -1, -1, 434, 435, 436, 437, 438, -1, - -1, 441, 442, 443, 444, 445, -1, 447, 448, -1, - 450, 451, 452, -1, -1, 455, -1, 457, -1, 459, - 460, -1, 462, 463, -1, 465, -1, 467, -1, -1, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, -1, 483, 484, -1, -1, -1, 488, 489, - 490, 491, -1, -1, -1, 495, -1, -1, -1, 499, - -1, 501, 502, 503, 504, 505, 506, -1, 508, 509, - 510, 511, 512, 513, -1, -1, -1, -1, -1, -1, - 520, 521, -1, 523, -1, -1, 526, -1, -1, -1, - 530, 531, 532, -1, -1, -1, 536, -1, -1, 539, - 540, -1, 542, 543, 544, 545, 546, 547, -1, -1, - 550, 551, 552, 553, -1, 555, 556, -1, -1, 559, - 560, 561, 562, -1, -1, 565, 566, -1, 568, 569, - 570, 571, -1, -1, -1, -1, -1, 577, 578, 579, - -1, -1, -1, 583, 584, 585, 586, -1, 588, 589, - -1, 591, 592, -1, 594, 595, -1, -1, 598, -1, - -1, 601, -1, 603, -1, 605, 606, -1, -1, -1, - -1, -1, -1, 613, -1, -1, 616, -1, -1, -1, - 620, 621, 622, 623, 624, 625, 626, -1, -1, -1, - -1, -1, -1, 633, 634, -1, 636, 637, 638, -1, - -1, 641, -1, -1, -1, -1, -1, -1, 5, -1, - 7, 8, 9, 10, 11, 12, 656, -1, 15, -1, - -1, -1, 19, -1, 664, 22, -1, 24, 25, 26, - 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, - -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, - 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, - -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, - 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, - 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, - 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, - 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, - -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, - 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, - 127, 128, -1, -1, -1, -1, 133, -1, 135, -1, - -1, -1, 139, -1, 141, 142, 143, 144, 145, -1, - -1, -1, -1, 150, -1, -1, 153, 154, 155, -1, - -1, -1, 159, -1, 161, 162, -1, 164, 165, 166, - -1, 168, 169, -1, 171, 172, 173, 174, 175, 176, - 177, -1, -1, 180, 181, 182, 183, -1, -1, 186, - 187, -1, 189, 190, 191, -1, -1, 194, -1, -1, - -1, 198, 199, -1, 201, -1, 203, -1, 205, 206, - 207, 208, 209, 210, 211, -1, 213, -1, -1, 216, - 217, 218, -1, 220, -1, -1, -1, 224, 225, -1, - -1, -1, 229, 230, 231, 232, 233, -1, -1, -1, - 237, 238, 239, -1, -1, 242, -1, -1, -1, -1, - 247, 248, -1, 250, -1, 252, -1, 254, 255, -1, - 257, 258, -1, -1, -1, 262, -1, -1, 265, 266, - 267, -1, -1, 270, -1, -1, 273, 274, -1, -1, - -1, -1, -1, 280, 281, -1, 283, -1, 285, -1, - 287, 288, -1, -1, -1, -1, -1, -1, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, -1, 312, 313, 314, 315, -1, - 317, 318, 319, 320, -1, 322, 323, 324, -1, -1, - -1, -1, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, -1, 340, -1, 342, -1, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, -1, -1, 356, - -1, -1, 359, 360, 361, 362, -1, -1, -1, 366, - 367, -1, -1, -1, 371, -1, 373, 374, 375, -1, - 377, 378, 379, 380, -1, 382, 383, -1, -1, -1, - -1, -1, -1, -1, -1, 392, 393, 394, -1, -1, - 397, -1, 399, -1, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, -1, -1, 413, 414, 415, -1, - 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, - 427, -1, -1, 430, -1, -1, -1, 434, 435, 436, - 437, 438, -1, -1, 441, 442, 443, 444, 445, -1, - 447, 448, -1, 450, 451, 452, -1, -1, 455, -1, - 457, -1, 459, 460, -1, 462, 463, -1, 465, -1, - 467, -1, -1, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, -1, 483, 484, -1, -1, - -1, 488, 489, 490, 491, -1, -1, -1, 495, -1, - -1, -1, 499, -1, 501, 502, 503, 504, 505, 506, - -1, 508, 509, 510, 511, 512, 513, -1, -1, -1, - -1, -1, -1, 520, 521, -1, 523, -1, -1, 526, - -1, -1, -1, 530, 531, 532, -1, -1, -1, 536, - -1, -1, 539, 540, -1, 542, 543, 544, 545, 546, - 547, -1, -1, 550, 551, 552, 553, -1, 555, 556, - -1, -1, 559, 560, 561, 562, -1, -1, 565, 566, - -1, 568, 569, 570, 571, -1, -1, -1, -1, -1, - 577, 578, 579, -1, -1, -1, 583, 584, 585, 586, - -1, 588, 589, -1, 591, 592, -1, 594, 595, -1, - -1, 598, -1, -1, 601, -1, 603, -1, 605, 606, - -1, -1, -1, -1, -1, -1, 613, -1, -1, 616, - -1, -1, -1, 620, 621, 622, 623, 624, 625, 626, - -1, -1, -1, -1, -1, -1, 633, 634, -1, 636, - 637, 638, -1, -1, 641, -1, -1, -1, -1, 5, - -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, 22, 664, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, -1, 641, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 651, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, 664, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, -1, -1, -1, 5, - -1, 7, 8, 9, 10, 11, 12, 656, -1, 15, - -1, -1, -1, 19, -1, 664, 22, -1, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, -1, 641, -1, -1, -1, -1, - -1, -1, 5, -1, 7, 8, 9, 10, 11, 12, - -1, -1, 15, -1, -1, -1, 19, 663, 664, 22, - -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, - -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, - -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, - -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, - -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, - -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, - 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, - -1, 94, 95, 96, 97, 98, -1, 100, -1, -1, - 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, - 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, - -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, - 133, -1, 135, -1, -1, -1, 139, -1, 141, 142, - 143, 144, 145, -1, -1, -1, -1, 150, -1, -1, - 153, 154, 155, -1, -1, -1, 159, -1, 161, 162, - -1, 164, 165, 166, -1, 168, 169, -1, 171, 172, - 173, 174, 175, 176, 177, -1, -1, 180, 181, 182, - 183, -1, -1, 186, 187, -1, 189, 190, 191, -1, - -1, 194, -1, -1, -1, 198, 199, -1, 201, -1, - 203, -1, 205, 206, 207, 208, 209, 210, 211, -1, - 213, -1, -1, 216, 217, 218, -1, 220, -1, -1, - -1, 224, 225, -1, -1, -1, 229, 230, 231, 232, - 233, -1, -1, -1, 237, 238, 239, -1, -1, 242, - -1, -1, -1, -1, 247, 248, -1, -1, -1, 252, - -1, 254, 255, -1, 257, 258, -1, -1, -1, 262, - -1, -1, 265, 266, 267, -1, -1, 270, -1, -1, - 273, 274, -1, -1, -1, -1, -1, 280, 281, -1, - 283, -1, 285, -1, 287, 288, -1, -1, -1, -1, - -1, -1, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, -1, 312, - 313, 314, 315, -1, 317, 318, 319, 320, -1, 322, - 323, 324, -1, -1, -1, -1, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, -1, 340, -1, 342, - -1, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, -1, -1, 356, -1, -1, 359, 360, 361, 362, - -1, -1, -1, 366, 367, -1, -1, -1, 371, -1, - 373, 374, 375, -1, 377, 378, 379, 380, -1, 382, - 383, -1, -1, -1, -1, -1, -1, -1, -1, 392, - 393, 394, -1, -1, 397, -1, 399, -1, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, -1, -1, - 413, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, -1, -1, - -1, 434, 435, 436, 437, 438, -1, -1, 441, 442, - 443, 444, 445, -1, 447, 448, -1, 450, 451, 452, - -1, -1, 455, -1, 457, -1, 459, 460, -1, 462, - 463, -1, 465, -1, 467, -1, -1, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, -1, - 483, 484, -1, -1, -1, 488, 489, 490, 491, -1, - -1, -1, 495, -1, -1, -1, 499, -1, 501, 502, - 503, 504, 505, 506, -1, 508, 509, 510, 511, 512, - 513, -1, -1, -1, -1, -1, -1, 520, 521, -1, - 523, -1, -1, 526, -1, -1, -1, 530, 531, 532, - -1, -1, -1, 536, -1, -1, 539, 540, -1, 542, - 543, 544, 545, 546, 547, -1, -1, 550, 551, 552, - 553, -1, 555, 556, -1, -1, 559, 560, 561, 562, - -1, -1, 565, 566, -1, 568, 569, 570, 571, -1, - -1, -1, -1, -1, 577, 578, 579, -1, -1, -1, - 583, 584, 585, 586, -1, 588, 589, -1, 591, 592, - -1, 594, 595, -1, -1, 598, -1, -1, 601, -1, - 603, -1, 605, 606, -1, -1, -1, -1, -1, -1, - 613, -1, -1, 616, -1, -1, -1, 620, 621, 622, - 623, 624, 625, 626, -1, -1, -1, -1, -1, -1, - 633, 634, -1, 636, 637, 638, -1, -1, 641, -1, - -1, -1, -1, 5, -1, 7, 8, 9, 10, 11, - 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, - 22, 664, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, - 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, - 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, - 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, - 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, - 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, - 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, - -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, - -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, - 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, - -1, 133, -1, 135, -1, -1, -1, 139, -1, 141, - 142, 143, 144, 145, -1, -1, -1, -1, 150, -1, - -1, 153, 154, 155, -1, -1, -1, 159, -1, 161, - 162, -1, 164, 165, 166, -1, 168, 169, -1, 171, - 172, 173, 174, 175, 176, 177, -1, -1, 180, 181, - 182, 183, -1, -1, 186, 187, -1, 189, 190, 191, - -1, -1, 194, -1, -1, -1, 198, 199, -1, 201, - -1, 203, -1, 205, 206, 207, 208, 209, 210, 211, - -1, 213, -1, -1, 216, 217, 218, -1, 220, -1, - -1, -1, 224, 225, -1, -1, -1, 229, 230, 231, - 232, 233, -1, -1, -1, 237, 238, 239, -1, -1, - 242, -1, -1, -1, -1, 247, 248, -1, -1, -1, - 252, -1, 254, 255, -1, 257, 258, -1, -1, -1, - 262, -1, -1, 265, 266, 267, -1, -1, 270, -1, - -1, 273, 274, -1, -1, -1, -1, -1, 280, 281, - -1, 283, -1, 285, -1, 287, 288, -1, -1, -1, - -1, -1, -1, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, -1, - 312, 313, 314, 315, -1, 317, 318, 319, 320, -1, - 322, 323, 324, -1, -1, -1, -1, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, -1, 340, -1, - 342, -1, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, -1, -1, 356, -1, -1, 359, 360, 361, - 362, -1, -1, -1, 366, 367, -1, -1, -1, 371, - -1, 373, 374, 375, -1, 377, 378, 379, 380, -1, - 382, 383, -1, -1, -1, -1, -1, -1, -1, -1, - 392, 393, 394, -1, -1, 397, -1, 399, -1, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, -1, - -1, 413, 414, 415, -1, 417, -1, 419, 420, 421, - 422, 423, -1, 425, 426, 427, -1, -1, 430, -1, - -1, -1, 434, 435, 436, 437, 438, -1, -1, 441, - 442, 443, 444, 445, -1, 447, 448, -1, 450, 451, - 452, -1, -1, 455, -1, 457, -1, 459, 460, -1, - 462, 463, -1, 465, -1, 467, -1, -1, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - -1, 483, 484, -1, -1, -1, 488, 489, 490, 491, - -1, -1, -1, 495, -1, -1, -1, 499, -1, 501, - 502, 503, 504, 505, 506, -1, 508, 509, 510, 511, - 512, 513, -1, -1, -1, -1, -1, -1, 520, 521, - -1, 523, -1, -1, 526, -1, -1, -1, 530, 531, - 532, -1, -1, -1, 536, -1, -1, 539, 540, -1, - 542, 543, 544, 545, 546, 547, -1, -1, 550, 551, - 552, 553, -1, 555, 556, -1, -1, 559, 560, 561, - 562, -1, -1, 565, 566, -1, 568, 569, 570, 571, - -1, -1, -1, -1, -1, 577, 578, 579, -1, -1, - -1, 583, 584, 585, 586, -1, 588, 589, -1, 591, - 592, -1, 594, 595, -1, -1, 598, -1, -1, 601, - -1, 603, -1, 605, 606, -1, -1, -1, -1, -1, - -1, 613, -1, -1, 616, -1, -1, -1, 620, 621, - 622, 623, 624, 625, 626, -1, -1, -1, -1, -1, - -1, 633, 634, -1, 636, 637, 638, -1, -1, 641, - -1, -1, -1, -1, 5, -1, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, 664, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, -1, - 641, -1, -1, -1, -1, 5, -1, 7, 8, 9, - 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, - -1, -1, 22, 664, 24, 25, 26, 27, 28, 29, - 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, - -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, - -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, - -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, - 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, - 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, - -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, - 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, - -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, - -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, - -1, -1, -1, 133, -1, 135, -1, -1, -1, 139, - -1, 141, 142, 143, 144, 145, -1, -1, -1, -1, - 150, -1, -1, 153, 154, 155, -1, -1, -1, 159, - -1, 161, 162, -1, 164, 165, 166, -1, 168, 169, - -1, 171, 172, 173, 174, 175, 176, 177, -1, -1, - 180, 181, 182, 183, -1, -1, 186, 187, -1, 189, - 190, 191, -1, -1, 194, -1, -1, -1, 198, 199, - -1, 201, -1, 203, -1, 205, 206, 207, 208, 209, - 210, 211, -1, 213, -1, -1, 216, 217, 218, -1, - 220, -1, -1, -1, 224, 225, -1, -1, -1, 229, - 230, 231, 232, 233, -1, -1, -1, 237, 238, 239, - -1, -1, 242, -1, -1, -1, -1, 247, 248, -1, - -1, -1, 252, -1, 254, 255, -1, 257, 258, -1, - -1, -1, 262, -1, -1, 265, 266, 267, -1, -1, - 270, -1, -1, 273, 274, -1, -1, -1, -1, -1, - 280, 281, -1, 283, -1, 285, -1, 287, 288, -1, - -1, -1, -1, -1, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, -1, 312, 313, 314, 315, -1, 317, 318, 319, - 320, -1, 322, 323, 324, -1, -1, -1, -1, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, -1, - 340, -1, 342, -1, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, -1, -1, 356, -1, -1, 359, - 360, 361, 362, -1, -1, -1, 366, 367, -1, -1, - -1, 371, -1, 373, 374, 375, -1, 377, 378, 379, - 380, -1, 382, 383, -1, -1, -1, -1, -1, -1, - -1, -1, 392, 393, 394, -1, -1, 397, -1, 399, - -1, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, -1, -1, 413, 414, 415, -1, 417, -1, 419, - 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, - 430, -1, -1, -1, 434, 435, 436, 437, 438, -1, - -1, 441, 442, 443, 444, 445, -1, 447, 448, -1, - 450, 451, 452, -1, -1, 455, -1, 457, -1, 459, - 460, -1, 462, 463, -1, 465, -1, 467, -1, -1, - 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, - 480, 481, -1, 483, 484, -1, -1, -1, 488, 489, - 490, 491, -1, -1, -1, 495, -1, -1, -1, 499, - -1, 501, 502, 503, 504, 505, 506, -1, 508, 509, - 510, 511, 512, 513, -1, -1, -1, -1, -1, -1, - 520, 521, -1, 523, -1, -1, 526, -1, -1, -1, - 530, 531, 532, -1, -1, -1, 536, -1, -1, 539, - 540, -1, 542, 543, 544, 545, 546, 547, -1, -1, - 550, 551, 552, 553, -1, 555, 556, -1, -1, 559, - 560, 561, 562, -1, -1, 565, 566, -1, 568, 569, - 570, 571, -1, -1, -1, -1, -1, 577, 578, 579, - -1, -1, -1, 583, 584, 585, 586, -1, 588, 589, - -1, 591, 592, -1, 594, 595, -1, -1, 598, -1, - -1, 601, -1, 603, -1, 605, 606, -1, -1, -1, - -1, -1, -1, 613, -1, -1, 616, -1, -1, -1, - 620, 621, 622, 623, 624, 625, 626, -1, -1, -1, - -1, -1, -1, 633, 634, -1, 636, 637, 638, -1, - -1, 641, -1, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, 664, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, 663, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, 275, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, 663, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, 275, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, 663, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, 275, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, 663, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, 663, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, 22, 663, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, -1, -1, 5, -1, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, -1, -1, 663, 24, 25, 26, 27, 28, - 29, 30, 31, -1, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, -1, -1, -1, -1, 55, 56, -1, 58, - 59, -1, 61, -1, -1, -1, -1, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, -1, -1, -1, - -1, -1, -1, 82, -1, 84, -1, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, -1, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, -1, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, -1, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, -1, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, -1, -1, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, 188, - 189, 190, 191, -1, -1, -1, -1, -1, -1, -1, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, -1, 211, -1, 213, -1, -1, -1, 217, 218, - -1, -1, -1, -1, -1, -1, 225, -1, -1, -1, - 229, 230, 231, 232, 233, 234, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, -1, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - 259, -1, -1, 262, -1, -1, -1, 266, 267, -1, - -1, 270, 271, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, 293, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, -1, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, -1, -1, -1, -1, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, -1, - -1, 450, -1, 452, 453, -1, 455, -1, -1, -1, - 459, -1, -1, 462, 463, -1, 465, 466, 467, -1, - -1, 470, -1, 472, 473, 474, 475, 476, 477, 478, - -1, 480, 481, -1, 483, -1, -1, -1, -1, 488, - 489, 490, -1, -1, -1, -1, 495, -1, -1, -1, - -1, -1, -1, 502, -1, -1, 505, 506, -1, 508, - -1, 510, -1, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, -1, 532, -1, -1, -1, 536, -1, -1, - -1, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, -1, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, -1, -1, -1, -1, 598, - -1, -1, 601, -1, -1, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - 629, -1, -1, -1, 633, -1, -1, 636, -1, 638, - -1, 5, 641, 7, 8, 9, 10, 11, 12, -1, - -1, 15, -1, -1, -1, 19, -1, -1, 22, 658, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, - -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, - -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, - 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, - 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, - 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, - -1, -1, 106, -1, 108, 109, -1, 111, -1, 113, - -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, - -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, - -1, 135, -1, -1, -1, 139, -1, 141, 142, 143, - 144, 145, -1, -1, -1, -1, 150, -1, -1, 153, - 154, 155, -1, -1, -1, 159, -1, 161, 162, -1, - 164, 165, 166, -1, 168, 169, -1, 171, 172, 173, - 174, 175, 176, 177, -1, -1, 180, 181, 182, 183, - -1, -1, 186, 187, -1, 189, 190, 191, -1, -1, - 194, -1, -1, -1, 198, 199, -1, 201, -1, 203, - -1, 205, 206, 207, 208, 209, 210, 211, -1, 213, - -1, -1, 216, 217, 218, -1, 220, -1, -1, -1, - 224, 225, -1, -1, -1, 229, 230, 231, 232, 233, - -1, -1, -1, 237, 238, 239, -1, -1, 242, -1, - -1, -1, -1, 247, 248, -1, -1, -1, 252, -1, - 254, 255, -1, 257, 258, -1, -1, -1, 262, -1, - -1, 265, 266, 267, -1, -1, 270, -1, -1, 273, - 274, 275, -1, -1, -1, -1, 280, 281, -1, 283, - -1, 285, -1, 287, 288, -1, -1, -1, -1, -1, - -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, -1, 312, 313, - 314, 315, -1, 317, 318, 319, 320, -1, 322, 323, - 324, -1, -1, -1, -1, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, -1, 340, -1, 342, -1, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - -1, -1, 356, -1, -1, 359, 360, 361, 362, -1, - -1, -1, 366, 367, -1, -1, -1, 371, -1, 373, - 374, 375, -1, 377, 378, 379, 380, -1, 382, 383, - -1, -1, -1, -1, -1, -1, -1, -1, 392, 393, - 394, -1, -1, 397, -1, 399, -1, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, -1, -1, 413, - 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, - -1, 425, 426, 427, -1, -1, 430, -1, -1, -1, - 434, 435, 436, 437, 438, -1, -1, 441, 442, 443, - 444, 445, -1, 447, 448, -1, 450, 451, 452, -1, - -1, 455, -1, 457, -1, 459, 460, -1, 462, 463, - -1, 465, -1, 467, -1, -1, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, -1, 483, - 484, -1, -1, -1, 488, 489, 490, 491, -1, -1, - -1, 495, -1, -1, -1, 499, -1, 501, 502, 503, - 504, 505, 506, -1, 508, 509, 510, 511, 512, 513, - -1, -1, -1, -1, -1, -1, 520, 521, -1, 523, - -1, -1, 526, -1, -1, -1, 530, 531, 532, -1, - -1, -1, 536, -1, -1, 539, 540, -1, 542, 543, - 544, 545, 546, 547, -1, -1, 550, 551, 552, 553, - -1, 555, 556, -1, -1, 559, 560, 561, 562, -1, - 564, 565, 566, -1, 568, 569, 570, 571, -1, -1, - -1, -1, -1, 577, 578, 579, -1, -1, -1, 583, - 584, 585, 586, -1, 588, 589, -1, 591, 592, -1, - 594, 595, -1, -1, 598, -1, -1, 601, -1, 603, - -1, 605, 606, -1, -1, -1, -1, -1, -1, 613, - -1, -1, 616, -1, -1, -1, 620, 621, 622, 623, - 624, 625, 626, -1, -1, -1, -1, -1, -1, 633, - 634, -1, 636, 637, 638, -1, 5, 641, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, - 19, -1, 656, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, 5, 641, 7, 8, 9, 10, 11, 12, -1, - -1, 15, 651, -1, -1, 19, -1, -1, 22, -1, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, - -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, - -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, - 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, - 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, - 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, - -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, - -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, - -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, - -1, 135, -1, -1, -1, 139, -1, 141, 142, 143, - 144, 145, -1, -1, -1, -1, 150, -1, -1, 153, - 154, 155, -1, -1, -1, 159, -1, 161, 162, -1, - 164, 165, 166, -1, 168, 169, -1, 171, 172, 173, - 174, 175, 176, 177, -1, -1, 180, 181, 182, 183, - -1, -1, 186, 187, -1, 189, 190, 191, -1, -1, - 194, -1, -1, -1, 198, 199, -1, 201, -1, 203, - -1, 205, 206, 207, 208, 209, 210, 211, -1, 213, - -1, -1, 216, 217, 218, -1, 220, -1, -1, -1, - 224, 225, -1, -1, -1, 229, 230, 231, 232, 233, - -1, -1, -1, 237, 238, 239, -1, -1, 242, -1, - -1, -1, -1, 247, 248, -1, -1, -1, 252, -1, - 254, 255, -1, 257, 258, -1, -1, -1, 262, -1, - -1, 265, 266, 267, -1, -1, 270, -1, -1, 273, - 274, -1, -1, -1, -1, -1, 280, 281, -1, 283, - -1, 285, -1, 287, 288, -1, -1, -1, -1, -1, - -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, -1, 312, 313, - 314, 315, -1, 317, 318, 319, 320, -1, 322, 323, - 324, -1, -1, -1, -1, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, -1, 340, -1, 342, -1, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - -1, -1, 356, -1, -1, 359, 360, 361, 362, -1, - -1, -1, 366, 367, -1, -1, -1, 371, -1, 373, - 374, 375, -1, 377, 378, 379, 380, -1, 382, 383, - -1, -1, -1, -1, -1, -1, -1, -1, 392, 393, - 394, -1, -1, 397, -1, 399, -1, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, -1, -1, 413, - 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, - -1, 425, 426, 427, -1, -1, 430, -1, -1, -1, - 434, 435, 436, 437, 438, -1, -1, 441, 442, 443, - 444, 445, -1, 447, 448, -1, 450, 451, 452, -1, - -1, 455, -1, 457, -1, 459, 460, -1, 462, 463, - -1, 465, -1, 467, -1, -1, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, -1, 483, - 484, -1, -1, -1, 488, 489, 490, 491, -1, -1, - -1, 495, -1, -1, -1, 499, -1, 501, 502, 503, - 504, 505, 506, -1, 508, 509, 510, 511, 512, 513, - -1, -1, -1, -1, -1, -1, 520, 521, -1, 523, - -1, -1, 526, -1, -1, -1, 530, 531, 532, -1, - -1, -1, 536, -1, -1, 539, 540, -1, 542, 543, - 544, 545, 546, 547, -1, -1, 550, 551, 552, 553, - -1, 555, 556, -1, -1, 559, 560, 561, 562, -1, - -1, 565, 566, -1, 568, 569, 570, 571, -1, -1, - -1, -1, -1, 577, 578, 579, -1, -1, -1, 583, - 584, 585, 586, -1, 588, 589, -1, 591, 592, -1, - 594, 595, -1, -1, 598, -1, -1, 601, -1, 603, - -1, 605, 606, -1, -1, -1, -1, -1, -1, 613, - -1, -1, 616, -1, -1, -1, 620, 621, 622, 623, - 624, 625, 626, -1, -1, -1, -1, -1, -1, 633, - 634, -1, 636, 637, 638, -1, 5, 641, 7, 8, - 9, 10, 11, 12, -1, -1, 15, 651, -1, -1, - 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, - 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, - 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, - 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, -1, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, - -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, -1, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, -1, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, 5, 641, 7, 8, 9, 10, 11, 12, -1, - -1, 15, 651, -1, -1, 19, -1, -1, 22, -1, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, - -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, - -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, - 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, - 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, - 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, - 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, - -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, - -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, - -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, - -1, 135, -1, -1, -1, 139, -1, 141, 142, 143, - 144, 145, -1, -1, -1, -1, 150, -1, -1, 153, - 154, 155, -1, -1, -1, 159, -1, 161, 162, -1, - 164, 165, 166, -1, 168, 169, -1, 171, 172, 173, - 174, 175, 176, 177, -1, -1, 180, 181, 182, 183, - -1, -1, 186, 187, -1, 189, 190, 191, -1, -1, - 194, -1, -1, -1, 198, 199, -1, 201, -1, 203, - -1, 205, 206, 207, 208, 209, 210, 211, -1, 213, - -1, -1, 216, 217, 218, -1, 220, -1, -1, -1, - 224, 225, -1, -1, -1, 229, 230, 231, 232, 233, - -1, -1, -1, 237, 238, 239, -1, -1, 242, -1, - -1, -1, -1, 247, 248, -1, -1, -1, 252, -1, - 254, 255, -1, 257, 258, -1, -1, -1, 262, -1, - -1, 265, 266, 267, -1, -1, 270, -1, -1, 273, - 274, -1, -1, -1, -1, -1, 280, 281, -1, 283, - -1, 285, -1, 287, 288, -1, -1, -1, -1, -1, - -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, -1, 312, 313, - 314, 315, -1, 317, 318, 319, 320, -1, 322, 323, - 324, -1, -1, -1, -1, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, -1, 340, -1, 342, -1, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - -1, -1, 356, -1, -1, 359, 360, 361, 362, -1, - -1, -1, 366, 367, -1, -1, -1, 371, -1, 373, - 374, 375, -1, 377, 378, 379, 380, -1, 382, 383, - -1, -1, -1, -1, -1, -1, -1, -1, 392, 393, - 394, -1, -1, 397, -1, 399, -1, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, -1, -1, 413, - 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, - -1, 425, 426, 427, -1, -1, 430, -1, -1, -1, - 434, 435, 436, 437, 438, -1, -1, 441, 442, 443, - 444, 445, -1, 447, 448, -1, 450, 451, 452, -1, - -1, 455, -1, 457, -1, 459, 460, -1, 462, 463, - -1, 465, -1, 467, -1, -1, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, -1, 483, - 484, -1, -1, -1, 488, 489, 490, 491, -1, -1, - -1, 495, -1, -1, -1, 499, -1, 501, 502, 503, - 504, 505, 506, -1, 508, 509, 510, 511, 512, 513, - -1, -1, -1, -1, -1, -1, 520, 521, -1, 523, - -1, -1, 526, -1, -1, -1, 530, 531, 532, -1, - -1, -1, 536, -1, -1, 539, 540, -1, 542, 543, - 544, 545, 546, 547, -1, -1, 550, 551, 552, 553, - -1, 555, 556, -1, -1, 559, 560, 561, 562, -1, - -1, 565, 566, -1, 568, 569, 570, 571, -1, -1, - -1, -1, -1, 577, 578, 579, -1, -1, -1, 583, - 584, 585, 586, -1, 588, 589, -1, 591, 592, -1, - 594, 595, -1, -1, 598, -1, -1, 601, -1, 603, - -1, 605, 606, -1, -1, -1, -1, -1, -1, 613, - -1, -1, 616, -1, -1, -1, 620, 621, 622, 623, - 624, 625, 626, -1, -1, -1, -1, -1, -1, 633, - 634, -1, 636, 637, 638, -1, 5, 641, 7, 8, - 9, 10, 11, 12, -1, -1, 15, 651, -1, -1, + 0, 0, 529, 0, 0, 0, 0, 0, 0, 159, + 0, 160, 161, 162, 163, 164, 165, 1236, 0, 166, + 0, 0, 0, 167, 0, 829, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 1468, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 0, 529, 0, 0, 0, + 0, 159, 0, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 567, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 0, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2526, 159, + 0, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 567, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 0, 529, 0, 0, 0, + 0, 0, 0, 159, 0, 160, 161, 162, 163, 164, + 165, 3284, 0, 166, 0, 0, 0, 167, 0, 3285, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 0, + 529, 0, 0, 0, 0, 0, 0, 159, 0, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 4882, 829, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 0, 529, 0, 0, 0, 0, 159, + 0, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 567, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 651, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 652, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 653, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 0, 529, 0, 0, 0, + 0, 159, 0, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 567, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 0, 529, 0, + 0, 0, 0, 159, 0, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 168, 829, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 0, + 529, 0, 0, 0, 0, 159, 0, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 3285, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 1008, 1009, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 1010, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 1011, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 1012, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 1013, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 1014, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 1015, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 1016, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 1017, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 0, 529, 0, 0, 0, 159, 0, 160, 161, + 162, 163, 164, 165, 0, 0, 166, 0, 0, 0, + 167, 0, 0, 168, 1018, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, + 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, + 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, + 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, + 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, + 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, + 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, + 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, + 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, + 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, + 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, + 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, + 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, + 252, 253, 0, 254, 255, 256, 257, 258, 259, 260, + 0, 0, 261, 262, 263, 264, 0, 0, 265, 266, + 0, 267, 268, 269, 0, 0, 270, 0, 0, 0, + 271, 272, 0, 273, 0, 274, 0, 275, 276, 277, + 278, 279, 280, 281, 0, 282, 0, 0, 283, 284, + 285, 0, 286, 0, 0, 0, 287, 288, 0, 0, + 0, 289, 290, 291, 292, 293, 0, 0, 0, 294, + 295, 296, 0, 0, 297, 0, 0, 0, 0, 298, + 299, 0, 0, 0, 300, 0, 301, 302, 0, 303, + 304, 0, 0, 0, 305, 0, 0, 306, 307, 308, + 0, 0, 309, 0, 0, 310, 311, 665, 0, 0, + 0, 0, 312, 313, 0, 314, 0, 315, 0, 316, + 317, 0, 0, 0, 0, 0, 0, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 0, 334, 335, 336, 337, 0, 338, + 339, 340, 341, 0, 342, 343, 344, 0, 0, 0, + 0, 345, 346, 347, 348, 349, 350, 0, 0, 351, + 352, 0, 353, 0, 354, 0, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 0, 0, 365, 0, + 0, 366, 367, 368, 369, 0, 0, 0, 370, 371, + 0, 0, 0, 372, 0, 373, 374, 375, 0, 376, + 377, 378, 379, 0, 380, 381, 0, 0, 0, 0, + 0, 0, 0, 0, 382, 383, 384, 0, 0, 385, + 0, 386, 0, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 0, 397, 398, 399, 0, 400, + 0, 401, 402, 403, 404, 405, 0, 406, 407, 408, + 0, 0, 409, 0, 0, 0, 410, 411, 412, 413, + 414, 0, 0, 415, 416, 417, 418, 419, 0, 420, + 421, 0, 422, 423, 424, 0, 0, 425, 0, 426, + 0, 427, 428, 0, 429, 430, 0, 431, 0, 432, + 0, 0, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 0, + 447, 448, 449, 450, 0, 0, 0, 451, 0, 0, + 0, 452, 0, 453, 454, 455, 456, 457, 458, 0, + 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, + 0, 0, 465, 466, 0, 467, 0, 0, 468, 0, + 0, 0, 469, 470, 471, 0, 0, 0, 472, 0, + 0, 473, 474, 0, 475, 476, 477, 478, 479, 480, + 0, 0, 481, 482, 483, 484, 0, 485, 486, 0, + 0, 487, 488, 489, 490, 0, 156, 491, 492, 0, + 493, 494, 495, 496, 0, 0, 0, 0, 0, 497, + 498, 499, 0, 0, 0, 500, 501, 502, 503, 0, + 504, 505, 0, 506, 507, 0, 508, 509, 0, 0, + 510, 0, 0, 511, 0, 512, 0, 513, 514, 0, + 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, + 0, 0, 517, 518, 519, 520, 521, 522, 523, 0, + 0, 0, 0, 0, 0, 524, 525, 0, 526, 527, + 528, 0, 0, 529, 0, 0, 0, 159, 0, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 1539, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 665, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 156, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 0, 529, 0, 0, 0, 159, 0, + 160, 161, 162, 163, 164, 165, 0, 0, 166, 0, + 0, 0, 167, 0, 0, 168, 1890, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 0, 178, 0, 0, + 0, 179, 0, 0, 0, 180, 0, 0, 181, 182, + 183, 0, 184, 0, 185, 186, 0, 0, 187, 0, + 0, 188, 189, 0, 190, 191, 0, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 0, 200, 201, 202, + 203, 204, 205, 206, 0, 207, 208, 209, 210, 211, + 212, 213, 214, 0, 215, 216, 0, 217, 218, 219, + 220, 221, 0, 222, 0, 0, 223, 0, 0, 224, + 0, 225, 0, 0, 226, 0, 227, 0, 0, 0, + 228, 229, 230, 0, 0, 231, 0, 0, 0, 0, + 232, 233, 0, 0, 0, 0, 234, 0, 235, 0, + 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, + 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, + 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, + 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, + 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, + 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, + 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, + 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, + 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, + 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, + 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, + 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, + 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, + 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, + 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, + 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, + 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, + 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, + 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, + 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, + 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, + 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, + 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, + 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, + 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, + 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, + 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, + 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, + 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, + 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, + 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, + 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, + 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, + 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, + 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, + 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, + 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, + 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, + 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, + 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, + 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, + 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, + 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, + 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, + 526, 527, 528, 0, 0, 529, 0, 0, 0, 159, + 0, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 2616, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 1008, 1009, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 1010, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 1011, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 1012, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 1013, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 1014, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 1015, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 1016, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 0, 529, 0, 0, 0, + 159, 0, 160, 161, 162, 163, 164, 165, 0, 0, + 166, 0, 0, 0, 167, 0, 0, 168, 1018, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 0, 178, + 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, + 181, 182, 183, 0, 184, 0, 185, 186, 0, 0, + 187, 0, 0, 188, 189, 0, 190, 191, 0, 192, + 193, 0, 194, 195, 196, 197, 198, 199, 0, 200, + 201, 202, 203, 204, 205, 206, 0, 207, 208, 209, + 210, 211, 212, 213, 214, 1379, 215, 216, 0, 217, + 218, 219, 220, 221, 0, 222, 0, 0, 223, 0, + 0, 224, 0, 225, 0, 0, 226, 0, 227, 0, + 0, 0, 228, 229, 230, 0, 0, 231, 0, 0, + 0, 0, 232, 233, 0, 0, 0, 0, 234, 0, + 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, + 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, + 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, + 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, + 257, 258, 259, 260, 0, 0, 261, 262, 263, 264, + 0, 0, 265, 266, 0, 267, 268, 269, 0, 0, + 270, 0, 0, 0, 271, 272, 0, 273, 0, 274, + 0, 275, 276, 277, 278, 279, 280, 281, 0, 282, + 0, 0, 283, 284, 285, 0, 286, 0, 0, 0, + 287, 288, 0, 0, 0, 289, 290, 291, 292, 293, + 0, 0, 0, 294, 295, 296, 0, 0, 297, 0, + 0, 0, 0, 298, 299, 0, 0, 0, 300, 0, + 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, + 0, 306, 307, 308, 0, 0, 309, 0, 0, 310, + 311, 0, 0, 0, 0, 0, 312, 313, 0, 314, + 0, 315, 0, 316, 317, 0, 0, 0, 0, 0, + 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, + 336, 337, 0, 338, 339, 340, 341, 0, 342, 343, + 344, 0, 0, 0, 0, 345, 346, 347, 348, 349, + 350, 0, 0, 351, 352, 0, 353, 0, 354, 0, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 0, 0, 365, 0, 0, 366, 367, 368, 369, 0, + 0, 0, 370, 371, 0, 0, 0, 372, 0, 373, + 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, + 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, + 384, 0, 0, 385, 0, 386, 0, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 0, 0, 397, + 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, + 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, + 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, + 418, 419, 0, 420, 421, 0, 422, 423, 424, 0, + 0, 425, 0, 426, 0, 427, 428, 0, 429, 430, + 0, 431, 0, 432, 0, 0, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, + 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, + 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, + 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, + 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, + 0, 0, 472, 0, 0, 473, 474, 0, 475, 476, + 477, 478, 479, 480, 0, 0, 481, 482, 483, 484, + 0, 485, 486, 0, 0, 487, 488, 489, 490, 0, + 0, 491, 492, 0, 493, 494, 495, 496, 0, 0, + 0, 0, 0, 497, 498, 499, 0, 0, 0, 500, + 501, 502, 503, 0, 504, 505, 0, 506, 507, 0, + 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, + 0, 513, 514, 0, 0, 0, 0, 0, 0, 515, + 0, 0, 516, 0, 0, 0, 517, 518, 519, 520, + 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, + 525, 0, 526, 527, 528, 0, 0, 529, 0, 0, + 0, 159, 0, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 1380, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 0, 529, 0, + 0, 0, 159, 0, 160, 161, 162, 163, 164, 165, + 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, + 1380, 169, 170, 171, 172, 173, 174, 175, 176, 0, + 0, 923, 0, 0, 0, 179, 0, 0, 0, 180, + 0, 0, 181, 182, 183, 0, 184, 0, 0, 0, + 0, 0, 187, 7, 0, 188, 189, 0, 190, 0, + 0, 0, 0, 0, 194, 195, 196, 924, 198, 199, + 0, 200, 201, 0, 0, 0, 0, 0, 0, 207, + 0, 209, 0, 211, 212, 213, 214, 0, 215, 216, + 0, 217, 218, 219, 0, 221, 0, 222, 0, 0, + 223, 0, 0, 224, 0, 225, 0, 0, 226, 0, + 227, 0, 0, 0, 228, 229, 230, 0, 0, 231, + 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, + 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, + 238, 239, 240, 241, 0, 0, 0, 0, 0, 0, + 0, 243, 244, 245, 0, 0, 0, 246, 0, 0, + 248, 0, 249, 250, 251, 0, 252, 253, 0, 254, + 255, 256, 257, 258, 0, 0, 0, 0, 261, 262, + 263, 264, 0, 0, 265, 266, 925, 267, 268, 269, + 0, 0, 0, 0, 0, 0, 0, 272, 0, 273, + 0, 274, 0, 275, 276, 277, 278, 279, 0, 281, + 0, 282, 0, 0, 0, 284, 285, 0, 0, 0, + 0, 0, 0, 288, 0, 0, 0, 289, 290, 291, + 292, 293, 26, 0, 0, 294, 295, 296, 0, 0, + 297, 0, 0, 0, 0, 298, 0, 0, 0, 0, + 300, 0, 301, 302, 0, 303, 304, 926, 0, 0, + 305, 0, 0, 0, 307, 308, 0, 0, 309, 927, + 0, 310, 311, 0, 0, 0, 0, 0, 312, 313, + 0, 314, 0, 315, 0, 316, 317, 0, 0, 0, + 0, 32, 0, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 0, + 334, 335, 336, 337, 0, 338, 339, 340, 341, 0, + 342, 343, 344, 0, 0, 0, 0, 345, 346, 347, + 348, 349, 350, 0, 0, 351, 352, 0, 353, 0, + 354, 0, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 0, 0, 365, 0, 0, 366, 367, 368, + 369, 0, 0, 0, 0, 371, 0, 0, 0, 372, + 0, 373, 374, 375, 0, 376, 377, 378, 928, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 383, 384, 0, 0, 0, 0, 386, 0, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 0, 0, + 0, 0, 398, 399, 0, 400, 0, 401, 402, 403, + 404, 405, 0, 406, 407, 408, 0, 0, 409, 0, + 0, 0, 410, 411, 412, 413, 414, 0, 0, 415, + 416, 417, 418, 419, 0, 420, 0, 0, 422, 0, + 424, 41, 0, 425, 0, 0, 0, 427, 0, 0, + 429, 430, 0, 431, 929, 432, 0, 0, 433, 0, + 435, 436, 437, 438, 439, 440, 441, 0, 443, 444, + 0, 445, 0, 0, 0, 0, 447, 448, 449, 0, + 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, + 454, 0, 0, 457, 458, 0, 459, 0, 461, 0, + 463, 464, 0, 0, 0, 0, 0, 0, 465, 466, + 0, 467, 0, 0, 468, 0, 0, 0, 469, 0, + 471, 0, 0, 0, 472, 0, 0, 0, 474, 0, + 475, 476, 477, 478, 479, 480, 0, 0, 481, 482, + 483, 484, 0, 485, 486, 0, 0, 487, 488, 489, + 490, 0, 0, 491, 492, 0, 493, 494, 495, 496, + 0, 0, 0, 0, 0, 497, 498, 499, 0, 0, + 0, 0, 501, 502, 503, 0, 504, 505, 0, 506, + 507, 0, 0, 0, 0, 0, 510, 0, 0, 511, + 0, 0, 0, 513, 514, 0, 0, 0, 0, 0, + 0, 515, 0, 0, 516, 0, 0, 0, 517, 518, + 519, 520, 521, 522, 523, 0, 0, 60, 0, 0, + 0, 524, 0, 0, 526, 0, 528, 0, 159, 529, + 160, 161, 162, 163, 164, 165, 0, 0, 166, 0, + 0, 0, 167, 0, 0, 168, 4578, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 0, 178, 0, 0, + 0, 179, 0, 0, 0, 180, 0, 0, 181, 182, + 183, 0, 184, 0, 185, 186, 0, 0, 187, 0, + 0, 188, 189, 0, 190, 191, 0, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 0, 200, 201, 202, + 203, 204, 205, 206, 0, 207, 208, 209, 210, 211, + 212, 213, 214, 0, 215, 216, 0, 217, 218, 219, + 220, 221, 0, 222, 0, 0, 223, 0, 0, 224, + 0, 225, 1122, 0, 226, 0, 227, 0, 0, 0, + 228, 229, 230, 0, 0, 231, 0, 0, 0, 0, + 232, 233, 0, 0, 0, 0, 234, 0, 235, 0, + 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, + 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, + 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, + 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, + 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, + 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, + 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, + 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, + 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, + 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, + 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, + 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, + 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, + 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, + 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, + 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, + 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, + 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, + 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, + 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, + 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, + 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, + 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, + 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, + 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, + 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, + 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, + 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, + 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, + 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 0, 447, 448, 449, 450, 0, 0, 0, 451, + 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, + 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, + 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, + 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, + 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, + 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, + 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, + 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, + 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, + 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, + 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, + 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, + 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, + 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, + 526, 527, 528, 0, 159, 529, 160, 161, 162, 163, + 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, + 1281, 168, 0, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 0, 178, 0, 0, 0, 179, 0, 0, + 0, 180, 0, 0, 181, 182, 183, 0, 184, 0, + 185, 186, 0, 0, 187, 0, 0, 188, 189, 0, + 190, 191, 0, 192, 193, 0, 194, 195, 196, 197, + 198, 199, 0, 200, 201, 202, 203, 204, 205, 206, + 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, + 215, 216, 0, 217, 218, 219, 220, 221, 0, 222, + 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, + 226, 0, 227, 0, 0, 0, 228, 229, 230, 0, + 0, 231, 0, 0, 0, 0, 232, 233, 0, 0, + 0, 0, 234, 0, 235, 0, 0, 0, 0, 236, + 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, + 242, 0, 0, 243, 244, 245, 0, 0, 0, 246, + 0, 247, 248, 0, 249, 250, 251, 0, 252, 253, + 0, 254, 255, 256, 257, 258, 259, 260, 0, 0, + 261, 262, 263, 264, 0, 0, 265, 266, 0, 267, + 268, 269, 0, 0, 270, 0, 0, 0, 271, 272, + 0, 273, 0, 274, 0, 275, 276, 277, 278, 279, + 280, 281, 0, 282, 0, 0, 283, 284, 285, 0, + 286, 0, 0, 0, 287, 288, 0, 0, 0, 289, + 290, 291, 292, 293, 0, 0, 0, 294, 295, 296, + 0, 0, 297, 0, 0, 0, 0, 298, 299, 0, + 0, 0, 300, 0, 301, 302, 0, 303, 304, 0, + 0, 0, 305, 0, 0, 306, 307, 308, 0, 0, + 309, 0, 0, 310, 311, 0, 0, 0, 0, 0, + 312, 313, 0, 314, 0, 315, 0, 316, 317, 0, + 0, 0, 0, 0, 0, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 0, 334, 335, 336, 337, 0, 338, 339, 340, + 341, 0, 342, 343, 344, 0, 0, 0, 0, 345, + 346, 347, 348, 349, 350, 0, 0, 351, 352, 0, + 353, 0, 354, 0, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 0, 0, 365, 0, 0, 366, + 367, 368, 369, 0, 0, 0, 370, 371, 0, 0, + 0, 372, 0, 373, 374, 375, 0, 376, 377, 378, + 379, 0, 380, 381, 0, 0, 0, 0, 0, 0, + 0, 0, 382, 383, 384, 0, 0, 385, 0, 386, + 0, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 0, 397, 398, 399, 0, 400, 0, 401, + 402, 403, 404, 405, 0, 406, 407, 408, 0, 0, + 409, 0, 0, 0, 410, 411, 412, 413, 414, 0, + 0, 415, 416, 417, 418, 419, 0, 420, 421, 0, + 422, 423, 424, 0, 0, 425, 0, 426, 0, 427, + 428, 0, 429, 430, 0, 431, 0, 432, 0, 0, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 0, 447, 448, + 449, 450, 0, 0, 0, 451, 0, 0, 0, 452, + 0, 453, 454, 455, 456, 457, 458, 0, 459, 460, + 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, + 465, 466, 0, 467, 0, 0, 468, 0, 0, 0, + 469, 470, 471, 0, 0, 0, 472, 0, 0, 473, + 474, 0, 475, 476, 477, 478, 479, 480, 0, 0, + 481, 482, 483, 484, 0, 485, 486, 0, 0, 487, + 488, 489, 490, 0, 0, 491, 492, 0, 493, 494, + 495, 496, 0, 0, 0, 0, 0, 497, 498, 499, + 0, 0, 0, 500, 501, 502, 503, 0, 504, 505, + 0, 506, 507, 0, 508, 509, 0, 0, 510, 0, + 0, 511, 0, 512, 0, 513, 514, 0, 0, 0, + 0, 0, 0, 515, 0, 0, 516, 0, 0, 0, + 517, 518, 519, 520, 521, 522, 523, 0, 0, 0, + 0, 0, 0, 524, 525, 0, 526, 527, 528, 0, + 159, 529, 160, 161, 162, 163, 164, 165, 0, 0, + 166, 2345, 0, 0, 167, 0, 0, 168, 0, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 0, 178, + 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, + 181, 182, 183, 0, 184, 0, 185, 186, 0, 0, + 187, 0, 0, 188, 189, 0, 190, 191, 0, 192, + 193, 0, 194, 195, 196, 197, 198, 199, 0, 200, + 201, 202, 203, 204, 205, 206, 0, 207, 208, 209, + 210, 211, 212, 213, 214, 0, 215, 216, 0, 217, + 218, 219, 220, 221, 0, 222, 0, 0, 223, 0, + 0, 224, 0, 225, 0, 0, 226, 0, 227, 0, + 0, 0, 228, 229, 230, 0, 0, 231, 0, 0, + 0, 0, 232, 233, 0, 0, 0, 0, 234, 0, + 235, 0, 0, 0, 0, 236, 0, 237, 238, 239, + 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, + 244, 245, 0, 0, 0, 246, 0, 247, 248, 0, + 249, 250, 251, 0, 252, 253, 0, 254, 255, 256, + 257, 258, 259, 260, 0, 0, 261, 262, 263, 264, + 0, 0, 265, 266, 0, 267, 268, 269, 0, 0, + 270, 0, 0, 0, 271, 272, 0, 273, 0, 274, + 0, 275, 276, 277, 278, 279, 280, 281, 0, 282, + 0, 0, 283, 284, 285, 0, 286, 0, 0, 0, + 287, 288, 0, 0, 0, 289, 290, 291, 292, 293, + 0, 0, 0, 294, 295, 296, 0, 0, 297, 0, + 0, 0, 0, 298, 299, 0, 0, 0, 300, 0, + 301, 302, 0, 303, 304, 0, 0, 0, 305, 0, + 0, 306, 307, 308, 0, 0, 309, 0, 0, 310, + 311, 0, 0, 0, 0, 0, 312, 313, 0, 314, + 0, 315, 0, 316, 317, 0, 0, 0, 0, 0, + 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 0, 334, 335, + 336, 337, 0, 338, 339, 340, 341, 0, 342, 343, + 344, 0, 0, 0, 0, 345, 346, 347, 348, 349, + 350, 0, 0, 351, 352, 0, 353, 0, 354, 0, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 0, 0, 365, 0, 0, 366, 367, 368, 369, 0, + 0, 0, 370, 371, 0, 0, 0, 372, 0, 373, + 374, 375, 0, 376, 377, 378, 379, 0, 380, 381, + 0, 0, 0, 0, 0, 0, 0, 0, 382, 383, + 384, 0, 0, 385, 0, 386, 0, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 0, 0, 397, + 398, 399, 0, 400, 0, 401, 402, 403, 404, 405, + 0, 406, 407, 408, 0, 0, 409, 0, 0, 0, + 410, 411, 412, 413, 414, 0, 0, 415, 416, 417, + 418, 419, 0, 420, 421, 0, 422, 423, 424, 0, + 0, 425, 0, 426, 0, 427, 428, 0, 429, 430, + 0, 431, 0, 432, 0, 0, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 0, 447, 448, 449, 450, 0, 0, + 0, 451, 0, 0, 0, 452, 0, 453, 454, 455, + 456, 457, 458, 0, 459, 460, 461, 462, 463, 464, + 0, 0, 0, 0, 0, 0, 465, 466, 0, 467, + 0, 0, 468, 0, 0, 0, 469, 470, 471, 0, + 0, 0, 472, 0, 0, 473, 474, 0, 475, 476, + 477, 478, 479, 480, 0, 0, 481, 482, 483, 484, + 0, 485, 486, 0, 0, 487, 488, 489, 490, 0, + 0, 491, 492, 0, 493, 494, 495, 496, 0, 0, + 0, 0, 0, 497, 498, 499, 0, 0, 0, 500, + 501, 502, 503, 0, 504, 505, 0, 506, 507, 0, + 508, 509, 0, 0, 510, 0, 0, 511, 0, 512, + 0, 513, 514, 0, 0, 0, 0, 0, 0, 515, + 0, 0, 516, 0, 0, 0, 517, 518, 519, 520, + 521, 522, 523, 0, 0, 0, 0, 0, 0, 524, + 525, 0, 526, 527, 528, 0, 159, 529, 160, 161, + 162, 163, 164, 165, 0, 0, 166, 3119, 0, 0, + 167, 0, 0, 168, 0, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 0, 178, 0, 0, 0, 179, + 0, 0, 0, 180, 0, 0, 181, 182, 183, 0, + 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, + 189, 0, 190, 191, 0, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 0, 200, 201, 202, 203, 204, + 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, + 214, 0, 215, 216, 0, 217, 218, 219, 220, 221, + 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, + 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, + 230, 0, 0, 231, 0, 0, 0, 0, 232, 233, + 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, + 0, 236, 0, 237, 238, 239, 240, 241, 0, 0, + 0, 0, 242, 0, 0, 243, 244, 245, 0, 0, + 0, 246, 0, 247, 248, 0, 249, 250, 251, 0, + 252, 253, 0, 254, 255, 256, 257, 258, 259, 260, + 0, 0, 261, 262, 263, 264, 0, 0, 265, 266, + 0, 267, 268, 269, 0, 0, 270, 0, 0, 0, + 271, 272, 0, 273, 0, 274, 0, 275, 276, 277, + 278, 279, 280, 281, 0, 282, 0, 0, 283, 284, + 285, 0, 286, 0, 0, 0, 287, 288, 0, 0, + 0, 289, 290, 291, 292, 293, 0, 0, 0, 294, + 295, 296, 0, 0, 297, 0, 0, 0, 0, 298, + 299, 0, 0, 0, 300, 0, 301, 302, 0, 303, + 304, 0, 0, 0, 305, 0, 0, 306, 307, 308, + 0, 0, 309, 0, 0, 310, 311, 0, 0, 0, + 0, 0, 312, 313, 0, 314, 0, 315, 0, 316, + 317, 0, 0, 0, 0, 0, 0, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 0, 334, 335, 336, 337, 0, 338, + 339, 340, 341, 0, 342, 343, 344, 0, 0, 0, + 0, 345, 346, 347, 348, 349, 350, 0, 0, 351, + 352, 0, 353, 0, 354, 0, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 0, 0, 365, 0, + 0, 366, 367, 368, 369, 0, 0, 0, 370, 371, + 0, 0, 0, 372, 0, 373, 374, 375, 0, 376, + 377, 378, 379, 0, 380, 381, 0, 0, 0, 0, + 0, 0, 0, 0, 382, 383, 384, 0, 0, 385, + 0, 386, 0, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 0, 397, 398, 399, 0, 400, + 0, 401, 402, 403, 404, 405, 0, 406, 407, 408, + 0, 0, 409, 0, 0, 0, 410, 411, 412, 413, + 414, 0, 0, 415, 416, 417, 418, 419, 0, 420, + 421, 0, 422, 423, 424, 0, 0, 425, 0, 426, + 0, 427, 428, 0, 429, 430, 0, 431, 0, 432, + 0, 0, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 0, + 447, 448, 449, 450, 0, 0, 0, 451, 0, 0, + 0, 452, 0, 453, 454, 455, 456, 457, 458, 0, + 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, + 0, 0, 465, 466, 0, 467, 0, 0, 468, 0, + 0, 0, 469, 470, 471, 0, 0, 0, 472, 0, + 0, 473, 474, 0, 475, 476, 477, 478, 479, 480, + 0, 0, 481, 482, 483, 484, 0, 485, 486, 0, + 0, 487, 488, 489, 490, 0, 0, 491, 492, 0, + 493, 494, 495, 496, 0, 0, 0, 0, 0, 497, + 498, 499, 0, 0, 0, 500, 501, 502, 503, 0, + 504, 505, 0, 506, 507, 0, 508, 509, 0, 0, + 510, 0, 0, 511, 0, 512, 0, 513, 514, 0, + 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, + 0, 0, 517, 518, 519, 520, 521, 522, 523, 0, + 0, 0, 0, 0, 0, 524, 525, 0, 526, 527, + 528, 0, 159, 529, 160, 161, 162, 163, 164, 165, + 0, 0, 166, 3481, 0, 0, 167, 0, 0, 168, + 0, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 0, 178, 0, 0, 0, 179, 0, 0, 0, 180, + 0, 0, 181, 182, 183, 0, 184, 0, 185, 186, + 0, 0, 187, 0, 0, 188, 189, 0, 190, 191, + 0, 192, 193, 0, 194, 195, 196, 197, 198, 199, + 0, 200, 201, 202, 203, 204, 205, 206, 0, 207, + 208, 209, 210, 211, 212, 213, 214, 0, 215, 216, + 0, 217, 218, 219, 220, 221, 0, 222, 0, 0, + 223, 0, 0, 224, 0, 225, 0, 0, 226, 0, + 227, 0, 0, 0, 228, 229, 230, 0, 0, 231, + 0, 0, 0, 0, 232, 233, 0, 0, 0, 0, + 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, + 238, 239, 240, 241, 0, 0, 0, 0, 242, 0, + 0, 243, 244, 245, 0, 0, 0, 246, 0, 247, + 248, 0, 249, 250, 251, 0, 252, 253, 0, 254, + 255, 256, 257, 258, 259, 260, 0, 0, 261, 262, + 263, 264, 0, 0, 265, 266, 0, 267, 268, 269, + 0, 0, 270, 0, 0, 0, 271, 272, 0, 273, + 0, 274, 0, 275, 276, 277, 278, 279, 280, 281, + 0, 282, 0, 0, 283, 284, 285, 0, 286, 0, + 0, 0, 287, 288, 0, 0, 0, 289, 290, 291, + 292, 293, 0, 0, 0, 294, 295, 296, 0, 0, + 297, 0, 0, 0, 0, 298, 299, 0, 0, 0, + 300, 0, 301, 302, 0, 303, 304, 0, 0, 0, + 305, 0, 0, 306, 307, 308, 0, 0, 309, 0, + 0, 310, 311, 0, 0, 0, 0, 0, 312, 313, + 0, 314, 0, 315, 0, 316, 317, 0, 0, 0, + 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 0, + 334, 335, 336, 337, 0, 338, 339, 340, 341, 0, + 342, 343, 344, 0, 0, 0, 0, 345, 346, 347, + 348, 349, 350, 0, 0, 351, 352, 0, 353, 0, + 354, 0, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 0, 0, 365, 0, 0, 366, 367, 368, + 369, 0, 0, 0, 370, 371, 0, 0, 0, 372, + 0, 373, 374, 375, 0, 376, 377, 378, 379, 0, + 380, 381, 0, 0, 0, 0, 0, 0, 0, 0, + 382, 383, 384, 0, 0, 385, 0, 386, 0, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 0, 397, 398, 399, 0, 400, 0, 401, 402, 403, + 404, 405, 0, 406, 407, 408, 0, 0, 409, 0, + 0, 0, 410, 411, 412, 413, 414, 0, 0, 415, + 416, 417, 418, 419, 0, 420, 421, 0, 422, 423, + 424, 0, 0, 425, 0, 426, 0, 427, 428, 0, + 429, 430, 0, 431, 0, 432, 0, 0, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 0, 447, 448, 449, 450, + 0, 0, 0, 451, 0, 0, 0, 452, 0, 453, + 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, + 463, 464, 0, 0, 0, 0, 0, 0, 465, 466, + 0, 467, 0, 0, 468, 0, 0, 0, 469, 470, + 471, 0, 0, 0, 472, 0, 0, 473, 474, 0, + 475, 476, 477, 478, 479, 480, 0, 0, 481, 482, + 483, 484, 0, 485, 486, 0, 0, 487, 488, 489, + 490, 0, 0, 491, 492, 0, 493, 494, 495, 496, + 0, 0, 0, 0, 0, 497, 498, 499, 0, 0, + 0, 500, 501, 502, 503, 0, 504, 505, 0, 506, + 507, 0, 508, 509, 0, 0, 510, 0, 0, 511, + 0, 512, 0, 513, 514, 0, 0, 0, 0, 0, + 0, 515, 0, 0, 516, 0, 0, 0, 517, 518, + 519, 520, 521, 522, 523, 0, 0, 0, 0, 0, + 0, 524, 525, 0, 526, 527, 528, 0, 159, 529, + 160, 161, 162, 163, 164, 165, 0, 0, 166, 3887, + 0, 0, 167, 0, 0, 168, 0, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 0, 178, 0, 0, + 1526, 179, 0, 0, 0, 180, 0, 0, 181, 182, + 183, 0, 184, 0, 185, 186, 0, 0, 187, 0, + 0, 188, 189, 0, 190, 191, 0, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 0, 200, 201, 202, + 203, 204, 205, 206, 0, 207, 208, 209, 210, 211, + 212, 213, 214, 0, 215, 216, 0, 217, 218, 219, + 220, 221, 0, 222, 0, 0, 223, 0, 0, 224, + 0, 225, 0, 0, 226, 0, 227, 0, 0, 0, + 228, 229, 230, 0, 0, 231, 0, 0, 0, 0, + 232, 233, 0, 0, 0, 1527, 234, 0, 235, 0, + 0, 0, 0, 236, 0, 237, 238, 239, 240, 241, + 0, 0, 0, 0, 242, 0, 0, 243, 244, 245, + 0, 0, 0, 246, 0, 247, 248, 0, 249, 250, + 251, 0, 252, 253, 0, 254, 255, 256, 257, 258, + 259, 260, 0, 0, 261, 262, 263, 264, 0, 0, + 265, 266, 0, 267, 268, 269, 0, 0, 270, 0, + 0, 0, 271, 272, 0, 273, 0, 274, 0, 275, + 276, 277, 278, 279, 280, 281, 0, 282, 0, 0, + 283, 284, 285, 0, 286, 0, 0, 0, 287, 288, + 0, 0, 0, 289, 290, 291, 292, 293, 0, 0, + 0, 294, 295, 296, 0, 0, 297, 0, 0, 0, + 0, 298, 299, 0, 0, 0, 300, 0, 301, 302, + 0, 303, 304, 0, 0, 0, 305, 0, 0, 306, + 307, 308, 0, 0, 309, 0, 0, 310, 311, 665, + 0, 0, 0, 0, 312, 313, 0, 314, 0, 315, + 0, 316, 317, 0, 0, 0, 0, 0, 0, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 0, 334, 335, 336, 337, + 0, 338, 339, 340, 341, 0, 342, 343, 344, 0, + 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, + 0, 351, 352, 0, 353, 0, 354, 0, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 0, 0, + 365, 0, 0, 366, 367, 368, 369, 0, 0, 0, + 370, 371, 0, 0, 0, 372, 0, 373, 374, 375, + 0, 376, 377, 378, 379, 0, 380, 381, 0, 0, + 0, 0, 0, 0, 0, 0, 382, 383, 384, 0, + 0, 385, 0, 386, 0, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 0, 397, 398, 399, + 0, 400, 0, 401, 402, 403, 404, 405, 0, 406, + 407, 408, 0, 0, 409, 0, 0, 0, 410, 411, + 412, 413, 414, 0, 0, 415, 416, 417, 418, 419, + 0, 420, 421, 0, 422, 423, 424, 0, 0, 425, + 0, 426, 0, 427, 428, 0, 429, 430, 0, 431, + 0, 432, 0, 0, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 0, 447, 448, 449, 450, 0, 0, 1528, 451, + 0, 0, 0, 452, 0, 453, 454, 455, 456, 457, + 458, 0, 459, 460, 461, 462, 463, 464, 0, 0, + 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, + 468, 0, 0, 0, 469, 470, 471, 0, 0, 0, + 472, 0, 0, 473, 474, 0, 475, 476, 477, 478, + 479, 480, 0, 0, 481, 482, 483, 484, 0, 485, + 486, 0, 0, 487, 488, 489, 490, 0, 156, 491, + 492, 0, 493, 494, 495, 496, 0, 0, 0, 0, + 0, 497, 498, 499, 0, 0, 0, 500, 501, 502, + 503, 0, 504, 505, 0, 506, 507, 0, 508, 509, + 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, + 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, + 516, 0, 0, 0, 517, 518, 519, 520, 521, 522, + 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, + 526, 527, 528, 0, 0, 529, 0, 159, 1529, 160, + 161, 162, 163, 164, 165, 871, 872, 166, 0, 0, + 0, 167, 0, 0, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 873, 0, 224, 0, + 225, 0, 874, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 0, 234, 0, 235, 875, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 876, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 877, 257, 258, 259, + 878, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 879, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 880, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 881, 0, 297, 0, 0, 0, 882, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 665, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 883, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 884, 402, 403, 404, 885, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 886, 0, 415, 416, 417, 418, 419, 0, + 887, 421, 0, 422, 423, 424, 0, 0, 888, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 889, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 890, 891, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 892, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 156, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 893, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 894, 512, 895, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 159, 529, 977, 161, 162, 163, 164, + 165, 978, 872, 166, 0, 0, 0, 167, 0, 0, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 873, 0, 224, 0, 225, 0, 874, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 0, 234, 0, 235, 875, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 876, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 877, 257, 258, 259, 878, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 879, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 880, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 881, + 0, 297, 0, 0, 0, 882, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 883, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 0, 400, 0, 884, 402, + 403, 404, 979, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 886, 0, + 415, 416, 417, 418, 419, 0, 887, 421, 0, 422, + 423, 424, 0, 0, 888, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 889, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 890, 891, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 892, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 893, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 894, 512, 895, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 2594, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 2595, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 2596, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 2597, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 152, 153, + 0, 370, 371, 0, 0, 2598, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 4430, 595, 4431, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 2599, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 1774, + 0, 0, 3705, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 1775, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 3189, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 3190, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 3191, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 156, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 3192, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 1774, 0, 0, 4669, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 1775, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 3189, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 3190, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 3191, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 156, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 3192, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 1774, 0, 0, 4738, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 1775, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 3189, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 3190, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 3191, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 156, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 3192, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 1122, 874, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 1541, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 1542, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 665, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 156, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 1084, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 1085, 1086, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 1087, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 2081, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 2082, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 783, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 2083, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 2084, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 2081, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 2082, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 783, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 2084, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 1526, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 1527, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 2081, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 2082, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 783, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 4263, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 2084, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 1122, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 665, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 156, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 1564, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 665, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 156, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 874, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 665, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 156, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 2654, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 665, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 156, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 1526, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 665, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 156, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 665, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 156, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 3115, 0, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 156, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 3299, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 3300, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 595, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 1181, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 1519, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 1519, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 2135, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 2273, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 3308, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 156, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 3621, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 268, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 3629, + 0, 166, 0, 0, 0, 167, 0, 0, 168, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, + 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 185, 186, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 191, 0, + 192, 193, 0, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 202, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 220, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 233, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 242, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 247, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 259, 260, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 270, 0, 0, 0, 271, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 280, 281, 0, + 282, 0, 0, 283, 284, 285, 0, 286, 0, 0, + 0, 287, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 299, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 306, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 370, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 379, 0, 380, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, + 383, 384, 0, 0, 385, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 0, + 397, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 421, 0, 422, 423, 424, + 0, 0, 425, 0, 426, 0, 427, 428, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 0, 447, 448, 449, 450, 0, + 0, 0, 451, 0, 0, 0, 452, 0, 453, 454, + 455, 456, 457, 458, 0, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 470, 471, + 0, 0, 0, 472, 0, 0, 473, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 500, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, + 512, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 525, 0, 526, 527, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 168, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 0, 178, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, + 188, 189, 0, 190, 191, 0, 192, 193, 0, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 202, 203, + 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 220, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 233, 0, 0, 0, 3653, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 242, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 247, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 259, + 260, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 0, 267, 268, 269, 0, 0, 270, 0, 0, + 0, 271, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 280, 281, 0, 282, 0, 0, 283, + 284, 285, 0, 286, 0, 0, 0, 287, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 0, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 299, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 0, 0, 0, 305, 0, 0, 306, 307, + 308, 0, 0, 309, 0, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 370, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 379, 0, 380, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 382, 383, 384, 0, 0, + 385, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 0, 397, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 421, 0, 422, 423, 424, 0, 0, 425, 0, + 426, 0, 427, 428, 0, 429, 430, 0, 431, 0, + 432, 0, 0, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 0, 447, 448, 449, 450, 0, 0, 0, 451, 0, + 0, 0, 452, 0, 453, 454, 455, 456, 457, 458, + 0, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 470, 471, 0, 0, 0, 472, + 0, 0, 473, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 500, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 508, 509, 0, + 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, + 527, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 168, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 185, + 186, 0, 0, 187, 0, 0, 188, 189, 0, 190, + 191, 0, 192, 193, 0, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 202, 203, 204, 205, 206, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 220, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 233, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 242, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + 247, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 259, 260, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 0, 267, 268, + 269, 0, 0, 270, 0, 0, 0, 271, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 280, + 281, 0, 282, 0, 0, 283, 284, 285, 0, 286, + 0, 0, 0, 287, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 0, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 299, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 0, 0, + 0, 305, 0, 0, 306, 307, 308, 0, 0, 309, + 0, 0, 310, 311, 0, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 370, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 379, + 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, + 0, 382, 383, 384, 0, 0, 385, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 0, 397, 398, 399, 4574, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 421, 0, 422, + 423, 424, 0, 0, 425, 0, 426, 0, 427, 428, + 0, 429, 430, 0, 431, 0, 432, 0, 0, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 0, 445, 446, 0, 0, 0, 447, 448, 449, + 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, + 453, 454, 455, 456, 457, 458, 0, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 470, 471, 0, 0, 0, 472, 0, 0, 473, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 500, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 508, 509, 0, 0, 510, 0, 0, + 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 0, 0, + 0, 0, 524, 525, 0, 526, 527, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 0, 178, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 185, 186, 0, 0, 187, + 0, 0, 188, 189, 0, 190, 191, 0, 192, 193, + 0, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 202, 203, 204, 205, 206, 0, 207, 208, 209, 210, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 220, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 233, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 242, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 247, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 259, 260, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 0, 267, 268, 269, 0, 0, 270, + 0, 0, 0, 271, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 280, 281, 0, 282, 0, + 0, 283, 284, 285, 0, 286, 0, 0, 0, 287, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 0, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 0, 0, 0, 305, 0, 0, + 306, 307, 308, 0, 0, 309, 0, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 370, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 379, 0, 380, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 382, 383, 384, + 0, 0, 385, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 0, 397, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 421, 0, 422, 423, 424, 0, 0, + 425, 0, 426, 0, 427, 428, 0, 429, 430, 0, + 431, 0, 432, 0, 0, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 0, 447, 448, 449, 450, 0, 0, 0, + 451, 0, 0, 0, 452, 0, 453, 454, 455, 456, + 457, 458, 0, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 470, 471, 0, 0, + 0, 472, 0, 0, 473, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 500, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 508, + 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 0, 0, 0, 0, 524, 525, + 0, 526, 527, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 168, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 0, 178, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 185, 186, 0, 0, 187, 0, 0, 188, 189, + 0, 190, 191, 0, 192, 193, 0, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 202, 203, 204, 205, + 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 220, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 242, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 247, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 259, 260, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 0, + 267, 2000, 269, 0, 0, 270, 0, 0, 0, 271, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 280, 281, 0, 282, 0, 0, 283, 284, 285, + 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 0, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 299, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 0, 0, 0, 305, 0, 0, 306, 307, 308, 0, + 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 2001, 368, 369, 0, 0, 0, 370, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 382, 383, 384, 0, 0, 385, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 0, 397, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 421, + 0, 422, 423, 424, 0, 0, 425, 0, 426, 0, + 427, 428, 0, 429, 430, 0, 431, 0, 432, 0, + 0, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 0, 445, 446, 0, 0, 0, 447, + 448, 449, 450, 0, 0, 0, 451, 0, 0, 0, + 452, 0, 453, 454, 455, 456, 457, 458, 0, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 470, 471, 0, 0, 0, 472, 0, 0, + 473, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 500, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 508, 509, 0, 0, 510, + 0, 0, 511, 0, 512, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 0, 0, 0, 0, 524, 525, 0, 526, 527, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 0, 0, + 923, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 0, 0, 0, + 0, 187, 7, 0, 188, 189, 0, 190, 0, 0, + 0, 0, 0, 194, 195, 196, 924, 198, 199, 0, + 200, 201, 0, 0, 0, 0, 0, 0, 207, 0, + 209, 0, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 0, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 0, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 0, 0, 0, + 243, 244, 245, 0, -338, -338, 246, 0, -338, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 0, 0, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 925, 267, 268, 269, 0, + 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 0, 281, 0, + 282, 0, 0, 0, 284, 285, 0, 0, 0, 0, + 0, 0, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 26, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 0, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 926, 0, 0, 305, + 0, 0, 0, 307, 308, 0, 0, 309, 927, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 32, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 0, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 928, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 383, 384, 0, 0, 0, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 0, 0, 0, + 0, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 0, 0, 422, 0, 424, + 41, 0, 425, 0, 0, 0, 427, 0, 0, 429, + 430, 0, 431, 929, 432, 0, 0, 433, 0, 435, + 436, 437, 438, 439, 440, 441, 0, 443, 444, 0, + 445, 0, 0, 0, 0, 447, 448, 449, 0, 0, + 0, 0, 451, 0, 0, 0, 0, 0, 0, 454, + 0, 0, 457, 458, 0, 459, 0, 461, 0, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 0, 471, + 0, 0, 0, 472, 0, 0, 0, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 0, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, + 0, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 60, 0, 0, 0, + 524, 0, 0, 526, 0, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 0, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 0, 0, 923, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 0, 0, 0, 0, 187, 7, 0, + 188, 189, 0, 190, 0, 0, 0, 0, 0, 194, + 195, 196, 924, 198, 199, 0, 200, 201, 0, 0, + 0, 0, 0, 0, 207, 0, 209, 0, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 0, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 0, 0, 0, 243, 244, 245, 0, + -358, 0, 246, 0, -358, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 0, + 0, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 925, 267, 268, 269, 0, 0, 0, 0, 0, + 0, 0, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 0, 281, 0, 282, 0, 0, 0, + 284, 285, 0, 0, 0, 0, 0, 0, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 26, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 0, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 926, 0, 0, 305, 0, 0, 0, 307, + 308, 0, 0, 309, 927, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 32, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 0, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 928, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 383, 384, 0, 0, + 0, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 0, 0, 0, 0, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 0, 0, 422, 0, 424, 41, 0, 425, 0, + 0, 0, 427, 0, 0, 429, 430, 0, 431, 929, + 432, 0, 0, 433, 0, 435, 436, 437, 438, 439, + 440, 441, 0, 443, 444, 0, 445, 0, 0, 0, + 0, 447, 448, 449, 0, 0, 0, 0, 451, 0, + 0, 0, 0, 0, 0, 454, 0, 0, 457, 458, + 0, 459, 0, 461, 0, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 0, 471, 0, 0, 0, 472, + 0, 0, 0, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 0, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 0, 0, 0, + 0, 510, 0, 0, 511, 0, 0, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + -358, 0, 60, 0, 0, 0, 524, 0, 0, 526, + 0, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 0, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 0, 0, 923, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 0, + 0, 0, 0, 187, 7, 0, 188, 189, 0, 190, + 0, 0, 0, 0, 0, 194, 195, 196, 924, 198, + 199, 0, 200, 201, 0, 0, 0, 0, 0, 0, + 207, 0, 209, 0, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 0, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 0, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, + 0, 0, 243, 244, 245, 0, -355, 0, 246, 0, + -355, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 925, 267, 268, + 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, + 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, + 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 26, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 926, 0, + 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, + 927, 0, 310, 311, 0, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 32, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 928, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, + 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, + 0, 424, 41, 0, 425, 0, 0, 0, 427, 0, + 0, 429, 430, 0, 431, 929, 432, 0, 0, 433, + 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, + 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, + 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, + 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, + 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, + 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, -355, 0, 60, 0, + 0, 0, 524, 0, 0, 526, 0, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 0, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 0, 0, 923, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 0, 0, 0, 0, 187, + 7, 0, 188, 189, 0, 190, 0, 0, 0, 0, + 0, 194, 195, 196, 924, 198, 199, 0, 200, 201, + 0, 0, 0, 0, 0, 0, 207, 0, 209, 0, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 0, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 0, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 0, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 1439, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 0, 0, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 925, 267, 268, 269, 0, 0, 0, + 0, 0, 0, 0, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 0, 281, 0, 282, 0, + 0, 0, 284, 285, 0, 0, 0, 0, 0, 0, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 26, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 0, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 926, 0, 0, 305, 0, 0, + 0, 307, 308, 0, 0, 309, 927, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 32, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 0, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 928, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 383, 384, + 0, 0, 0, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 0, 0, 0, 0, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 0, 0, 422, 0, 424, 41, 0, + 425, 0, 0, 0, 427, 0, 0, 429, 430, 0, + 431, 929, 432, 0, 0, 433, 0, 435, 436, 437, + 438, 439, 440, 441, 0, 443, 444, 0, 445, 0, + 0, 0, 0, 447, 448, 449, 0, 0, 0, 0, + 451, 0, 0, 0, 0, 0, 0, 454, 0, 0, + 457, 458, 0, 459, 0, 461, 0, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 0, 471, 0, 0, + 0, 472, 0, 0, 0, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 0, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 0, + 0, 0, 0, 510, 0, 0, 511, 0, 0, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 60, 0, 0, 0, 524, 0, + 0, 526, 0, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 0, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 0, 0, 923, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 0, 0, 0, 0, 187, 7, 0, 188, 189, + 0, 190, 0, 0, 0, 0, 0, 194, 195, 196, + 924, 198, 199, 0, 200, 201, 0, 0, 0, 0, + 0, 0, 207, 0, 209, 0, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 0, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 0, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, -360, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 0, 0, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 925, + 267, 268, 269, 0, 0, 0, 0, 0, 0, 0, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 0, 281, 0, 282, 0, 0, 0, 284, 285, + 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 26, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 0, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 926, 0, 0, 305, 0, 0, 0, 307, 308, 0, + 0, 309, 927, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 32, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 0, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 928, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 383, 384, 0, 0, 0, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 0, 0, 0, 0, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 0, + 0, 422, 0, 424, 41, 0, 425, 0, 0, 0, + 427, 0, 0, 429, 430, 0, 431, 929, 432, 0, + 0, 433, 0, 435, 436, 437, 438, 439, 440, 441, + 0, 443, 444, 0, 445, 0, 0, 0, 0, 447, + 448, 449, 0, 0, 0, 0, 451, 0, 0, 0, + 0, 0, 0, 454, 0, 0, 457, 458, 0, 459, + 0, 461, 0, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 0, 471, 0, 0, 0, 472, 0, 0, + 0, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 0, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 0, 0, 0, 0, 510, + 0, 0, 511, 0, 0, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 60, 0, 0, 0, 524, 0, 0, 526, 0, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 0, 0, + 923, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 0, 0, 0, + 0, 187, 7, 0, 188, 189, 0, 190, 0, 0, + 0, 0, 0, 194, 195, 196, 924, 198, 199, 0, + 200, 201, 0, 0, 0, 0, 0, 0, 207, 0, + 209, 0, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 0, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 0, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 0, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 3157, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 0, 0, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 925, 267, 268, 269, 0, + 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 0, 281, 0, + 282, 0, 0, 0, 284, 285, 0, 0, 0, 0, + 0, 0, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 26, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 0, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 926, 0, 0, 305, + 0, 0, 0, 307, 308, 0, 0, 309, 927, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 32, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 0, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 928, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 383, 384, 0, 0, 0, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 0, 0, 0, + 0, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 0, 0, 422, 0, 424, + 41, 0, 425, 0, 0, 0, 427, 0, 0, 429, + 430, 0, 431, 929, 432, 0, 0, 433, 0, 435, + 436, 437, 438, 439, 440, 441, 0, 443, 444, 0, + 445, 0, 0, 0, 0, 447, 448, 449, 0, 0, + 0, 0, 451, 0, 0, 0, 0, 0, 0, 454, + 0, 0, 457, 458, 0, 459, 0, 461, 0, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 0, 471, + 0, 0, 0, 472, 0, 0, 0, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 0, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, + 0, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 60, 0, 0, 0, + 524, 0, 0, 526, 0, 528, 0, 159, 529, 160, + 161, 162, 163, 164, 165, 0, 0, 166, 0, 0, + 0, 167, 0, 0, 0, 0, 169, 170, 171, 172, + 173, 174, 175, 176, 0, 0, 923, 0, 0, 0, + 179, 0, 0, 0, 180, 0, 0, 181, 182, 183, + 0, 184, 0, 0, 0, 0, 0, 187, 7, 0, + 188, 189, 0, 190, 0, 0, 0, 0, 0, 194, + 195, 196, 924, 198, 199, 0, 200, 201, 0, 0, + 0, 0, 0, 0, 207, 0, 209, 0, 211, 212, + 213, 214, 0, 215, 216, 0, 217, 218, 219, 0, + 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, + 225, 0, 0, 226, 0, 227, 0, 0, 0, 228, + 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, + 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, + 0, 0, 236, 0, 237, 238, 239, 240, 241, 0, + 0, 0, 0, 0, 0, 0, 243, 244, 245, 0, + 0, 0, 246, 0, 3304, 248, 0, 249, 250, 251, + 0, 252, 253, 0, 254, 255, 256, 257, 258, 0, + 0, 0, 0, 261, 262, 263, 264, 0, 0, 265, + 266, 925, 267, 268, 269, 0, 0, 0, 0, 0, + 0, 0, 272, 0, 273, 0, 274, 0, 275, 276, + 277, 278, 279, 0, 281, 0, 282, 0, 0, 0, + 284, 285, 0, 0, 0, 0, 0, 0, 288, 0, + 0, 0, 289, 290, 291, 292, 293, 26, 0, 0, + 294, 295, 296, 0, 0, 297, 0, 0, 0, 0, + 298, 0, 0, 0, 0, 300, 0, 301, 302, 0, + 303, 304, 926, 0, 0, 305, 0, 0, 0, 307, + 308, 0, 0, 309, 927, 0, 310, 311, 0, 0, + 0, 0, 0, 312, 313, 0, 314, 0, 315, 0, + 316, 317, 0, 0, 0, 0, 32, 0, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 0, 334, 335, 336, 337, 0, + 338, 339, 340, 341, 0, 342, 343, 344, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 0, 0, + 351, 352, 0, 353, 0, 354, 0, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 0, 0, 365, + 0, 0, 366, 367, 368, 369, 0, 0, 0, 0, + 371, 0, 0, 0, 372, 0, 373, 374, 375, 0, + 376, 377, 378, 928, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 383, 384, 0, 0, + 0, 0, 386, 0, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 0, 0, 0, 0, 398, 399, 0, + 400, 0, 401, 402, 403, 404, 405, 0, 406, 407, + 408, 0, 0, 409, 0, 0, 0, 410, 411, 412, + 413, 414, 0, 0, 415, 416, 417, 418, 419, 0, + 420, 0, 0, 422, 0, 424, 41, 0, 425, 0, + 0, 0, 427, 0, 0, 429, 430, 0, 431, 929, + 432, 0, 0, 433, 0, 435, 436, 437, 438, 439, + 440, 441, 0, 443, 444, 0, 445, 0, 0, 0, + 0, 447, 448, 449, 0, 0, 0, 0, 451, 0, + 0, 0, 0, 0, 0, 454, 0, 0, 457, 458, + 0, 459, 0, 461, 0, 463, 464, 0, 0, 0, + 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, + 0, 0, 0, 469, 0, 471, 0, 0, 0, 472, + 0, 0, 0, 474, 0, 475, 476, 477, 478, 479, + 480, 0, 0, 481, 482, 483, 484, 0, 485, 486, + 0, 0, 487, 488, 489, 490, 0, 0, 491, 492, + 0, 493, 494, 495, 496, 0, 0, 0, 0, 0, + 497, 498, 499, 0, 0, 0, 0, 501, 502, 503, + 0, 504, 505, 0, 506, 507, 0, 0, 0, 0, + 0, 510, 0, 0, 511, 0, 0, 0, 513, 514, + 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, + 0, 0, 0, 517, 518, 519, 520, 521, 522, 523, + 0, 0, 60, 0, 0, 0, 524, 0, 0, 526, + 0, 528, 0, 159, 529, 160, 161, 162, 163, 164, + 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, + 0, 0, 169, 170, 171, 172, 173, 174, 175, 176, + 0, 0, 923, 0, 0, 0, 179, 0, 0, 0, + 180, 0, 0, 181, 182, 183, 0, 184, 0, 0, + 0, 0, 0, 187, 7, 0, 188, 189, 0, 190, + 0, 0, 0, 0, 0, 194, 195, 196, 924, 198, + 199, 0, 200, 201, 0, 0, 0, 0, 0, 0, + 207, 0, 209, 0, 211, 212, 213, 214, 0, 215, + 216, 0, 217, 218, 219, 0, 221, 0, 222, 0, + 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, + 0, 227, 0, 0, 0, 228, 229, 230, 0, 0, + 231, 0, 0, 0, 0, 232, 0, 0, 0, 0, + 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, + 237, 238, 239, 240, 241, 0, 0, 0, 0, 0, + 0, 0, 243, 244, 245, 0, 0, 0, 246, 0, + -342, 248, 0, 249, 250, 251, 0, 252, 253, 0, + 254, 255, 256, 257, 258, 0, 0, 0, 0, 261, + 262, 263, 264, 0, 0, 265, 266, 925, 267, 268, + 269, 0, 0, 0, 0, 0, 0, 0, 272, 0, + 273, 0, 274, 0, 275, 276, 277, 278, 279, 0, + 281, 0, 282, 0, 0, 0, 284, 285, 0, 0, + 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, + 291, 292, 293, 26, 0, 0, 294, 295, 296, 0, + 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, + 0, 300, 0, 301, 302, 0, 303, 304, 926, 0, + 0, 305, 0, 0, 0, 307, 308, 0, 0, 309, + 927, 0, 310, 311, 0, 0, 0, 0, 0, 312, + 313, 0, 314, 0, 315, 0, 316, 317, 0, 0, + 0, 0, 32, 0, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 0, 334, 335, 336, 337, 0, 338, 339, 340, 341, + 0, 342, 343, 344, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 0, 0, 351, 352, 0, 353, + 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 0, 0, 365, 0, 0, 366, 367, + 368, 369, 0, 0, 0, 0, 371, 0, 0, 0, + 372, 0, 373, 374, 375, 0, 376, 377, 378, 928, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 383, 384, 0, 0, 0, 0, 386, 0, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 0, + 0, 0, 0, 398, 399, 0, 400, 0, 401, 402, + 403, 404, 405, 0, 406, 407, 408, 0, 0, 409, + 0, 0, 0, 410, 411, 412, 413, 414, 0, 0, + 415, 416, 417, 418, 419, 0, 420, 0, 0, 422, + 0, 424, 41, 0, 425, 0, 0, 0, 427, 0, + 0, 429, 430, 0, 431, 929, 432, 0, 0, 433, + 0, 435, 436, 437, 438, 439, 440, 441, 0, 443, + 444, 0, 445, 0, 0, 0, 0, 447, 448, 449, + 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, + 0, 454, 0, 0, 457, 458, 0, 459, 0, 461, + 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, + 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, + 0, 471, 0, 0, 0, 472, 0, 0, 0, 474, + 0, 475, 476, 477, 478, 479, 480, 0, 0, 481, + 482, 483, 484, 0, 485, 486, 0, 0, 487, 488, + 489, 490, 0, 0, 491, 492, 0, 493, 494, 495, + 496, 0, 0, 0, 0, 0, 497, 498, 499, 0, + 0, 0, 0, 501, 502, 503, 0, 504, 505, 0, + 506, 507, 0, 0, 0, 0, 0, 510, 0, 0, + 511, 0, 0, 0, 513, 514, 0, 0, 0, 0, + 0, 0, 515, 0, 0, 516, 0, 0, 0, 517, + 518, 519, 520, 521, 522, 523, 0, 0, 60, 0, + 0, 0, 524, 0, 0, 526, 0, 528, 0, 159, + 529, 160, 161, 162, 163, 164, 165, 0, 0, 166, + 0, 0, 0, 167, 0, 0, 0, 0, 169, 170, + 171, 172, 173, 174, 175, 176, 0, 0, 923, 0, + 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, + 182, 183, 0, 184, 0, 0, 0, 0, 0, 187, + 7, 0, 188, 189, 0, 190, 0, 0, 0, 0, + 0, 194, 195, 196, 924, 198, 199, 0, 200, 201, + 0, 0, 0, 0, 0, 0, 207, 0, 209, 0, + 211, 212, 213, 214, 0, 215, 216, 0, 217, 218, + 219, 0, 221, 0, 222, 0, 0, 223, 0, 0, + 224, 0, 225, 0, 0, 226, 0, 227, 0, 0, + 0, 228, 229, 230, 0, 0, 231, 0, 0, 0, + 0, 232, 0, 0, 0, 0, 0, 234, 0, 235, + 0, 0, 0, 0, 236, 0, 237, 238, 239, 240, + 241, 0, 0, 0, 0, 0, 0, 0, 243, 244, + 245, 0, 0, 0, 246, 0, 0, 248, 0, 249, + 250, 251, 0, 252, 253, 0, 254, 255, 256, 257, + 258, 0, 0, 0, 0, 261, 262, 263, 264, 0, + 0, 265, 266, 925, 267, 268, 269, 0, 0, 0, + 0, 0, 0, 0, 272, 0, 273, 0, 274, 0, + 275, 276, 277, 278, 279, 0, 281, 0, 282, 0, + 0, 0, 284, 285, 0, 0, 0, 0, 0, 0, + 288, 0, 0, 0, 289, 290, 291, 292, 293, 26, + 0, 0, 294, 295, 296, 0, 0, 297, 0, 0, + 0, 0, 298, 0, 0, 0, 0, 300, 0, 301, + 302, 0, 303, 304, 926, 0, 0, 305, 0, 0, + 0, 307, 308, 0, 0, 309, 927, 0, 310, 311, + 0, 0, 0, 0, 0, 312, 313, 0, 314, 0, + 315, 0, 316, 317, 0, 0, 0, 0, 32, 0, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 0, 334, 335, 336, + 337, 0, 338, 339, 340, 341, 0, 342, 343, 344, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 0, 0, 351, 352, 0, 353, 0, 354, 0, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 0, + 0, 365, 0, 0, 366, 367, 368, 369, 0, 0, + 0, 0, 371, 0, 0, 0, 372, 0, 373, 374, + 375, 0, 376, 377, 378, 928, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 383, 384, + 0, 0, 0, 0, 386, 0, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 0, 0, 0, 0, 398, + 399, 0, 400, 0, 401, 402, 403, 404, 405, 0, + 406, 407, 408, 0, 0, 409, 0, 0, 0, 410, + 411, 412, 413, 414, 0, 0, 415, 416, 417, 418, + 419, 0, 420, 0, 0, 422, 0, 424, 41, 0, + 425, 0, 0, 0, 427, 0, 0, 429, 430, 0, + 431, 929, 432, 0, 0, 433, 0, 435, 436, 437, + 438, 439, 440, 441, 0, 443, 444, 0, 445, 0, + 0, 0, 0, 447, 448, 449, 0, 0, 0, 0, + 451, 0, 0, 0, 0, 0, 0, 454, 0, 0, + 457, 458, 0, 459, 0, 461, 0, 463, 464, 0, + 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, + 0, 468, 0, 0, 0, 469, 0, 471, 0, 0, + 0, 472, 0, 0, 0, 474, 0, 475, 476, 477, + 478, 479, 480, 0, 0, 481, 482, 483, 484, 0, + 485, 486, 0, 0, 487, 488, 489, 490, 0, 0, + 491, 492, 0, 493, 494, 495, 496, 0, 0, 0, + 0, 0, 497, 498, 499, 0, 0, 0, 0, 501, + 502, 503, 0, 504, 505, 0, 506, 507, 0, 0, + 0, 0, 0, 510, 0, 0, 511, 0, 0, 0, + 513, 514, 0, 0, 0, 0, 0, 0, 515, 0, + 0, 516, 0, 0, 0, 517, 518, 519, 520, 521, + 522, 523, 0, 0, 60, 0, 0, 0, 524, 0, + 0, 526, 0, 528, 0, 159, 529, 160, 161, 162, + 163, 164, 165, 0, 0, 166, 0, 0, 0, 167, + 0, 0, 0, 0, 169, 170, 171, 172, 173, 174, + 175, 176, 0, 0, 923, 0, 0, 0, 179, 0, + 0, 0, 180, 0, 0, 181, 182, 183, 0, 184, + 0, 0, 0, 0, 0, 187, 7, 0, 188, 189, + 0, 190, 0, 0, 0, 0, 0, 194, 195, 196, + 924, 198, 199, 0, 200, 201, 0, 0, 0, 0, + 0, 0, 207, 0, 209, 0, 211, 212, 213, 214, + 0, 215, 216, 0, 217, 218, 219, 0, 221, 0, + 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, + 0, 226, 0, 227, 0, 0, 0, 228, 229, 230, + 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, + 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, + 236, 0, 237, 238, 239, 240, 241, 0, 0, 0, + 0, 0, 0, 0, 243, 244, 245, 0, 0, 0, + 246, 0, 0, 248, 0, 249, 250, 251, 0, 252, + 253, 0, 254, 255, 256, 257, 258, 0, 0, 0, + 0, 261, 262, 263, 264, 0, 0, 265, 266, 925, + 267, 268, 269, 0, 0, 0, 0, 0, 0, 0, + 272, 0, 273, 0, 274, 0, 275, 276, 277, 278, + 279, 0, 281, 0, 282, 0, 0, 0, 284, 285, + 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, + 289, 290, 291, 292, 293, 26, 0, 0, 294, 295, + 296, 0, 0, 297, 0, 0, 0, 0, 298, 0, + 0, 0, 0, 300, 0, 301, 302, 0, 303, 304, + 926, 0, 0, 305, 0, 0, 0, 307, 308, 0, + 0, 309, 927, 0, 310, 311, 0, 0, 0, 0, + 0, 312, 313, 0, 314, 0, 315, 0, 316, 317, + 0, 0, 0, 0, 32, 0, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 0, 334, 335, 336, 337, 0, 338, 339, + 340, 341, 0, 342, 343, 344, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 0, 0, 351, 352, + 0, 353, 0, 354, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 0, 0, 365, 0, 0, + 366, 367, 368, 369, 0, 0, 0, 0, 371, 0, + 0, 0, 372, 0, 373, 374, 375, 0, 376, 377, + 378, 928, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 383, 384, 0, 0, 0, 0, + 386, 0, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 0, 0, 0, 0, 398, 399, 0, 400, 0, + 401, 402, 403, 404, 405, 0, 406, 407, 408, 0, + 0, 409, 0, 0, 0, 410, 411, 412, 413, 414, + 0, 0, 415, 416, 417, 418, 419, 0, 420, 0, + 0, 422, 0, 424, 41, 0, 425, 0, 0, 0, + 427, 0, 0, 429, 430, 0, 431, 929, 432, 0, + 0, 433, 0, 435, 436, 437, 438, 439, 440, 441, + 0, 443, 444, 0, 445, 0, 0, 0, 0, 447, + 448, 449, 0, 0, 0, 0, 451, 0, 0, 0, + 0, 0, 0, 454, 0, 0, 457, 458, 0, 459, + 0, 461, 0, 463, 464, 0, 0, 0, 0, 0, + 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, + 0, 469, 0, 471, 0, 0, 0, 472, 0, 0, + 0, 474, 0, 475, 476, 477, 478, 479, 480, 0, + 0, 481, 482, 483, 484, 0, 485, 486, 0, 0, + 487, 488, 489, 490, 0, 0, 491, 492, 0, 493, + 494, 495, 496, 0, 0, 0, 0, 0, 497, 498, + 499, 0, 0, 0, 0, 501, 502, 503, 0, 504, + 505, 0, 506, 507, 0, 0, 0, 0, 0, 510, + 0, 0, 1466, 0, 0, 0, 513, 514, 0, 0, + 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, + 0, 517, 518, 519, 520, 521, 522, 523, 0, 0, + 60, 0, 0, 0, 524, 0, 0, 526, 0, 528, + 0, 159, 529, 160, 161, 162, 163, 164, 165, 0, + 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, + 169, 170, 171, 172, 173, 174, 175, 176, 0, 0, + 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, + 0, 181, 182, 183, 0, 184, 0, 0, 0, 0, + 0, 187, 0, 0, 188, 189, 0, 190, 0, 0, + 0, 0, 0, 194, 195, 196, 0, 198, 199, 0, + 200, 201, 0, 0, 0, 0, 0, 0, 207, 0, + 209, 0, 211, 212, 213, 214, 0, 215, 216, 0, + 217, 218, 219, 0, 221, 0, 222, 0, 0, 223, + 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, + 0, 0, 0, 228, 229, 230, 0, 0, 231, 0, + 0, 0, 0, 232, 0, 0, 0, 0, 0, 234, + 0, 235, 0, 0, 0, 0, 236, 0, 237, 238, + 239, 240, 241, 0, 0, 0, 0, 0, 0, 0, + 243, 244, 245, 0, 0, 0, 246, 0, 0, 248, + 0, 249, 250, 251, 0, 252, 253, 0, 254, 255, + 256, 257, 258, 0, 0, 0, 0, 261, 262, 263, + 264, 0, 0, 265, 266, 0, 267, 268, 269, 0, + 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, + 274, 0, 275, 276, 277, 278, 279, 0, 281, 0, + 282, 0, 0, 0, 284, 285, 0, 0, 0, 0, + 0, 0, 288, 0, 0, 0, 289, 290, 291, 292, + 293, 0, 0, 0, 294, 295, 296, 0, 0, 297, + 0, 0, 0, 0, 298, 0, 0, 0, 0, 300, + 0, 301, 302, 0, 303, 304, 0, 0, 0, 305, + 0, 0, 0, 307, 308, 0, 0, 309, 0, 0, + 310, 311, 0, 0, 0, 0, 0, 312, 313, 0, + 314, 0, 315, 0, 316, 317, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 0, 334, + 335, 336, 337, 0, 338, 339, 340, 341, 0, 342, + 343, 344, 0, 0, 0, 0, 345, 346, 347, 348, + 349, 350, 0, 0, 351, 352, 0, 353, 0, 354, + 0, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 0, 0, 365, 0, 0, 366, 367, 368, 369, + 0, 0, 0, 0, 371, 0, 0, 0, 372, 0, + 373, 374, 375, 0, 376, 377, 378, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 383, 384, 0, 0, 0, 0, 386, 0, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 0, 0, 0, + 0, 398, 399, 0, 400, 0, 401, 402, 403, 404, + 405, 0, 406, 407, 408, 0, 0, 409, 0, 0, + 0, 410, 411, 412, 413, 414, 0, 0, 415, 416, + 417, 418, 419, 0, 420, 0, 0, 422, 0, 424, + 0, 0, 425, 0, 0, 0, 427, 0, 0, 429, + 430, 0, 431, 0, 432, 0, 0, 433, 0, 435, + 436, 437, 438, 439, 440, 441, 0, 443, 444, 0, + 445, 0, 0, 0, 0, 447, 448, 449, 0, 0, + 0, 0, 451, 0, 0, 0, 0, 0, 0, 454, + 0, 0, 457, 458, 0, 459, 0, 461, 0, 463, + 464, 0, 0, 0, 0, 0, 0, 465, 466, 0, + 467, 0, 0, 468, 0, 0, 0, 469, 0, 471, + 0, 0, 0, 472, 0, 0, 0, 474, 0, 475, + 476, 477, 478, 479, 480, 0, 0, 481, 482, 483, + 484, 0, 485, 486, 0, 0, 487, 488, 489, 490, + 0, 0, 491, 492, 0, 493, 494, 495, 496, 0, + 0, 0, 0, 0, 497, 498, 499, 0, 0, 0, + 0, 501, 502, 503, 0, 504, 505, 0, 506, 507, + 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, + 0, 0, 513, 514, 0, 0, 0, 0, 0, 0, + 515, 0, 0, 516, 0, 0, 0, 517, 518, 519, + 520, 521, 522, 523, 0, 0, 0, 0, 0, 0, + 524, 0, 0, 526, 0, 528, 0, 0, 529 +}; + +static const yytype_int16 yycheck[] = +{ + 6, 3, 143, 609, 151, 632, 1116, 608, 609, 24, + 930, 986, 21, 641, 20, 1285, 644, 1213, 24, 1506, + 1232, 1035, 608, 1285, 33, 592, 6, 1379, 1013, 1014, + 36, 40, 1738, 140, 4, 547, 0, 661, 44, 1024, + 1507, 47, 962, 1057, 1185, 1256, 52, 2264, 661, 2107, + 2108, 549, 550, 59, 1507, 553, 554, 555, 2264, 863, + 558, 559, 560, 766, 1033, 1379, 1547, 582, 2361, 45, + 1427, 718, 2502, 1307, 566, 926, 927, 592, 3070, 2589, + 2373, 1315, 1120, 1450, 2786, 1709, 3244, 1707, 1120, 1058, + 566, 2854, 1685, 1643, 109, 2003, 959, 1077, 2969, 3084, + 2714, 3576, 1430, 109, 1351, 1316, 1317, 3290, 600, 1320, + 1321, 1322, 1323, 1967, 1325, 1326, 1327, 1328, 1329, 1330, + 1331, 1332, 700, 1620, 600, 703, 3111, 1222, 1675, 135, + 2463, 137, 1576, 139, 140, 141, 2264, 612, 151, 2262, + 615, 1734, 2112, 2374, 3113, 146, 2061, 151, 151, 2752, + 2262, 151, 1596, 2629, 2754, 2720, 3856, 137, 2758, 139, + 1604, 1605, 2638, 3245, 2694, 3443, 13, 2337, 2337, 2769, + 3442, 13, 1152, 2731, 3103, 822, 823, 824, 3909, 3368, + 18, 2781, 17, 18, 20, 2743, 2744, 834, 3715, 3376, + 2895, 2896, 3538, 2743, 2744, 20, 2901, 37, 2903, 50, + 27, 22, 75, 20, 18, 27, 17, 18, 116, 3555, + 17, 18, 21, 164, 2337, 83, 37, 136, 2327, 31, + 13, 1106, 1107, 17, 18, 2337, 67, 39, 84, 13, + 51, 2075, 132, 22, 132, 2459, 2868, 17, 18, 63, + 20, 62, 63, 33, 4140, 17, 18, 1059, 3182, 17, + 18, 111, 201, 17, 18, 198, 2101, 2898, 198, 34, + 204, 22, 27, 49, 164, 1150, 164, 1191, 1192, 1193, + 198, 87, 54, 62, 63, 66, 37, 152, 277, 3657, + 326, 17, 18, 129, 1208, 73, 237, 72, 54, 196, + 51, 4349, 17, 18, 17, 18, 70, 218, 46, 132, + 2254, 62, 63, 2861, 2862, 204, 17, 18, 12, 405, + 371, 2861, 2862, 332, 118, 3661, 67, 1241, 83, 212, + 1244, 73, 379, 17, 18, 59, 164, 3213, 247, 138, + 237, 164, 132, 3943, 17, 18, 471, 3223, 150, 164, + 151, 1265, 1266, 89, 166, 1269, 183, 193, 39, 432, + 381, 387, 9, 17, 18, 17, 18, 486, 237, 437, + 404, 83, 1286, 1287, 170, 24, 20, 495, 237, 867, + 706, 13, 13, 844, 39, 2244, 222, 3852, 408, 17, + 18, 17, 18, 3352, 153, 408, 372, 288, 565, 284, + 13, 284, 17, 18, 22, 13, 446, 556, 565, 597, + 559, 166, 4692, 17, 18, 4695, 197, 201, 609, 37, + 13, 926, 927, 158, 201, 930, 243, 3057, 259, 184, + 172, 243, 530, 51, 4155, 3935, 136, 631, 9, 201, + 586, 136, 144, 219, 62, 63, 37, 241, 1685, 565, + 72, 565, 4139, 584, 17, 18, 292, 962, 160, 241, + 2747, 4148, 33, 609, 11, 659, 564, 658, 659, 566, + 658, 4161, 63, 622, 571, 201, 634, 254, 313, 3109, + 17, 18, 75, 198, 369, 419, 3063, 527, 243, 162, + 657, 1109, 512, 1111, 1112, 1113, 1114, 1734, 389, 512, + 657, 1354, 478, 600, 321, 275, 2635, 17, 18, 321, + 20, 17, 18, 974, 455, 147, 147, 367, 259, 69, + 232, 380, 234, 1623, 592, 4025, 175, 645, 1221, 294, + 419, 565, 363, 859, 147, 371, 4816, 623, 657, 147, + 665, 222, 223, 1236, 191, 1398, 455, 1522, 164, 545, + 664, 263, 247, 1347, 563, 21, 368, 3220, 631, 295, + 556, 386, 495, 3931, 389, 1540, 321, 222, 223, 3227, + 566, 567, 3077, 3078, 3079, 571, 536, 486, 574, 4179, + 370, 590, 679, 3241, 3242, 386, 455, 1052, 389, 636, + 17, 18, 588, 287, 66, 3253, 196, 17, 18, 650, + 511, 428, 386, 1171, 600, 389, 1163, 362, 491, 4657, + 388, 1570, 608, 368, 1573, 575, 386, 355, 1577, 389, + 1579, 657, 618, 589, 386, 559, 3545, 389, 386, 494, + 3549, 389, 386, 659, 2747, 389, 417, 237, 4103, 2110, + 629, 1494, 638, 367, 665, 2747, 388, 1675, 1607, 1608, + 1609, 295, 612, 1675, 3515, 615, 506, 204, 1163, 619, + 386, 2244, 278, 389, 201, 661, 557, 663, 432, 468, + 559, 386, 138, 386, 389, 481, 389, 3177, 3602, 2262, + 3615, 1534, 1319, 679, 689, 386, 1379, 2805, 389, 454, + 462, 75, 3553, 689, 603, 691, 1198, 1199, 529, 1336, + 1937, 631, 386, 479, 700, 389, 462, 703, 2868, 2868, + 706, 608, 645, 386, 1915, 546, 389, 713, 2552, 2061, + 659, 504, 663, 1225, 622, 1926, 3348, 486, 1929, 541, + 504, 1233, 386, 1235, 386, 389, 4622, 389, 540, 3615, + 598, 659, 3290, 589, 2327, 1247, 1248, 1249, 657, 2183, + 1720, 3627, 588, 1255, 2337, 2868, 2970, 2061, 386, 561, + 386, 389, 537, 389, 2863, 862, 2868, 3643, 3644, 576, + 766, 386, 576, 663, 389, 663, 17, 18, 17, 18, + 621, 583, 386, 609, 595, 389, 541, 1355, 432, 1664, + 631, 2689, 1406, 2628, 657, 578, 576, 3974, 4134, 3347, + 1602, 2745, 616, 631, 1714, 546, 637, 3347, 619, 17, + 18, 4532, 624, 4534, 4535, 640, 595, 598, 620, 4336, + 657, 4157, 658, 386, 1909, 657, 389, 657, 4007, 625, + 645, 827, 659, 829, 1748, 663, 3528, 662, 645, 640, + 663, 833, 659, 640, 595, 639, 657, 659, 663, 386, + 2036, 650, 389, 4115, 4122, 609, 640, 2344, 854, 855, + 856, 3933, 858, 859, 860, 630, 862, 1349, 864, 624, + 640, 4133, 419, 2732, 870, 659, 386, 1445, 640, 389, + 386, 1495, 640, 389, 565, 855, 640, 659, 183, 659, + 860, 1685, 1495, 628, 864, 861, 658, 1465, 657, 865, + 658, 659, 661, 603, 659, 659, 1371, 3882, 603, 136, + 565, 907, 17, 18, 640, 537, 1013, 922, 1015, 631, + 1834, 1018, 1019, 3210, 1838, 640, 922, 640, 924, 4650, + 4651, 923, 928, 4654, 61, 3894, 4272, 1034, 1556, 640, + 1734, 2551, 2990, 658, 2640, 658, 659, 3524, 1862, 3612, + 17, 18, 3871, 3872, 504, 960, 640, 658, 659, 386, + 1574, 966, 389, 959, 960, 3641, 386, 640, 440, 389, + 966, 1574, 3101, 3102, 658, 1106, 1107, 595, 1115, 526, + 3535, 2521, 3640, 2881, 4674, 2883, 640, 3922, 640, 35, + 3925, 3926, 636, 953, 377, 91, 3044, 615, 616, 183, + 377, 645, 468, 375, 658, 659, 658, 2244, 608, 202, + 1475, 1007, 640, 629, 640, 277, 402, 1013, 37, 1015, + 247, 3521, 1018, 1019, 4745, 640, 3531, 1645, 1646, 1643, + 658, 659, 658, 659, 581, 261, 640, 421, 1034, 1657, + 17, 18, 1524, 658, 659, 146, 3922, 663, 379, 3925, + 3926, 129, 4742, 3573, 658, 659, 183, 4623, 1524, 377, + 187, 3937, 17, 18, 226, 3760, 54, 869, 17, 18, + 2968, 198, 486, 3280, 3769, 622, 161, 640, 1696, 3545, + 186, 1077, 3637, 3549, 3280, 83, 171, 377, 1679, 4064, + 2327, 466, 1052, 457, 1054, 658, 659, 3210, 3691, 377, + 2337, 4130, 3692, 640, 17, 18, 1102, 278, 3210, 1101, + 377, 280, 1115, 657, 377, 17, 18, 1108, 148, 108, + 1116, 1115, 1115, 4082, 13, 1115, 201, 245, 154, 133, + 640, 3762, 198, 428, 640, 1140, 254, 1103, 1104, 1832, + 17, 18, 258, 2118, 1140, 386, 148, 386, 389, 2732, + 389, 119, 658, 1149, 122, 2769, 1152, 2010, 3379, 961, + 1642, 480, 3280, 164, 2747, 3009, 2703, 2624, 3073, 2626, + 2627, 3131, 556, 27, 2178, 1171, 1181, 258, 386, 1149, + 2208, 389, 4518, 2626, 2627, 1181, 2208, 130, 3348, 3348, + 279, 2044, 2045, 282, 401, 289, 580, 533, 2399, 237, + 2204, 1298, 355, 330, 368, 17, 18, 400, 254, 1714, + 2169, 2568, 559, 640, 292, 2346, 387, 3540, 963, 27, + 640, 287, 4687, 2182, 377, 1221, 2185, 2186, 455, 83, + 331, 277, 659, 4168, 232, 3348, 234, 463, 1335, 659, + 1236, 2559, 449, 657, 428, 295, 3348, 4583, 313, 253, + 2474, 13, 1349, 134, 115, 349, 2690, 295, 147, 486, + 17, 18, 4828, 3958, 370, 263, 3961, 17, 18, 17, + 18, 657, 2840, 3949, 392, 657, 659, 278, 2480, 2481, + 2863, 386, 659, 1380, 389, 2868, 361, 659, 278, 1285, + 665, 1928, 4168, 371, 313, 659, 3991, 3992, 3993, 2269, + 385, 428, 1298, 565, 3999, 636, 475, 2225, 2226, 252, + 503, 4006, 607, 174, 344, 27, 432, 1309, 4050, 386, + 17, 18, 389, 486, 2242, 3956, 3957, 17, 18, 2589, + 184, 427, 3963, 2251, 2252, 3966, 3967, 1082, 204, 1335, + 429, 659, 344, 204, 1340, 17, 18, 17, 18, 17, + 18, 432, 3983, 1349, 17, 18, 1453, 12, 1354, 1355, + 17, 18, 427, 2564, 659, 391, 3997, 629, 2061, 659, + 4001, 4002, 4003, 4004, 4005, 537, 603, 0, 486, 367, + 1948, 659, 432, 1379, 1380, 147, 17, 18, 2473, 243, + 428, 4564, 659, 2880, 90, 441, 659, 387, 2483, 640, + 6, 640, 1398, 565, 2322, 2323, 2324, 2325, 4660, 386, + 1406, 1371, 389, 1418, 295, 1411, 112, 1413, 659, 3029, + 659, 2973, 1418, 607, 17, 18, 597, 1524, 4601, 4602, + 657, 386, 640, 4898, 389, 243, 2696, 386, 1434, 504, + 389, 486, 486, 537, 2696, 17, 18, 17, 18, 1445, + 2244, 659, 659, 3351, 60, 129, 609, 1453, 132, 1419, + 624, 17, 18, 1468, 4493, 164, 4495, 321, 4641, 1465, + 4445, 645, 1468, 386, 462, 133, 389, 583, 133, 564, + 2048, 3021, 3022, 3023, 386, 17, 18, 389, 1134, 1135, + 278, 434, 1957, 599, 657, 2732, 55, 4229, 1494, 1495, + 4232, 3431, 1498, 1377, 2141, 3435, 494, 66, 362, 386, + 588, 1507, 389, 321, 368, 1475, 1647, 17, 18, 193, + 3940, 1517, 17, 18, 17, 18, 17, 18, 1524, 1525, + 545, 243, 659, 2327, 1180, 640, 243, 4290, 1534, 2543, + 658, 556, 3094, 2337, 4526, 1642, 152, 414, 222, 657, + 1546, 1547, 134, 419, 659, 1560, 2132, 1562, 419, 4707, + 174, 1557, 1558, 1559, 1560, 1561, 1562, 4171, 1665, 4173, + 586, 4520, 495, 640, 386, 1571, 1572, 389, 1574, 376, + 2062, 4442, 1578, 4835, 4836, 1682, 636, 1557, 1558, 1559, + 201, 1561, 659, 2211, 1599, 253, 2062, 2215, 2216, 387, + 543, 569, 1572, 1599, 572, 3219, 3220, 404, 1578, 321, + 4363, 4364, 657, 657, 191, 215, 661, 1577, 292, 21, + 650, 651, 652, 653, 654, 655, 2863, 3210, 629, 386, + 46, 2868, 389, 3090, 502, 495, 386, 651, 386, 389, + 251, 389, 224, 2200, 658, 2498, 1642, 1643, 219, 665, + 652, 653, 654, 655, 367, 105, 368, 3225, 17, 18, + 526, 368, 663, 640, 1669, 4165, 17, 18, 133, 1665, + 1666, 1667, 1668, 1669, 2860, 2703, 4368, 3575, 1552, 1553, + 4629, 2703, 659, 3251, 3252, 640, 1682, 541, 586, 386, + 267, 640, 389, 264, 2669, 2200, 386, 371, 559, 389, + 1705, 537, 129, 565, 659, 364, 365, 129, 1704, 1705, + 659, 645, 292, 295, 386, 581, 386, 389, 386, 389, + 581, 389, 645, 386, 1720, 284, 389, 640, 1688, 386, + 651, 3073, 389, 601, 447, 166, 138, 658, 640, 155, + 17, 18, 665, 738, 739, 1741, 659, 1743, 17, 18, + 4354, 2882, 17, 18, 2607, 386, 622, 659, 389, 365, + 3107, 622, 2986, 640, 215, 3348, 4049, 665, 565, 3073, + 624, 193, 17, 18, 2056, 643, 387, 83, 241, 17, + 18, 617, 659, 17, 18, 645, 645, 2697, 17, 18, + 367, 371, 631, 386, 244, 657, 389, 25, 3058, 657, + 2653, 264, 1933, 17, 18, 665, 3058, 665, 17, 18, + 261, 261, 243, 657, 386, 665, 386, 389, 813, 389, + 659, 665, 232, 273, 234, 431, 13, 433, 640, 541, + 386, 17, 18, 389, 541, 2753, 1832, 1833, 2756, 2757, + 2477, 2759, 432, 2818, 2762, 2763, 4346, 659, 2766, 495, + 17, 18, 1949, 2771, 386, 17, 18, 389, 2776, 2777, + 2778, 2779, 2780, 453, 3050, 292, 2784, 2785, 2370, 2787, + 292, 17, 18, 2375, 628, 2793, 2794, 2795, 2796, 874, + 3490, 2799, 2800, 640, 2802, 198, 386, 2389, 201, 389, + 640, 386, 640, 386, 389, 386, 389, 1893, 389, 489, + 2031, 219, 659, 17, 18, 355, 18, 2521, 215, 659, + 2524, 659, 624, 455, 588, 254, 2826, 624, 17, 18, + 235, 2423, 17, 18, 17, 18, 232, 377, 234, 17, + 18, 1936, 136, 17, 18, 274, 387, 368, 2732, 1935, + 1936, 17, 18, 640, 371, 631, 264, 235, 2866, 371, + 640, 186, 1948, 1949, 215, 17, 18, 263, 20, 142, + 147, 381, 659, 17, 18, 2062, 1962, 115, 640, 659, + 640, 1967, 640, 659, 287, 568, 1972, 640, 50, 1975, + 2077, 1986, 1987, 640, 1989, 251, 658, 2544, 2490, 659, + 1986, 1987, 3277, 1989, 2608, 3255, 659, 1957, 3612, 645, + 199, 201, 659, 3255, 2561, 2608, 614, 44, 2013, 640, + 17, 18, 2017, 2495, 2010, 52, 4564, 2013, 2115, 665, + 470, 2017, 3307, 4627, 4628, 17, 18, 386, 659, 2495, + 389, 556, 17, 18, 559, 386, 494, 224, 389, 2544, + 295, 2046, 2047, 247, 505, 17, 18, 640, 2044, 2045, + 2046, 2047, 2048, 4601, 4602, 2560, 2561, 556, 17, 18, + 559, 505, 2067, 2068, 2069, 2061, 2062, 245, 640, 2863, + 640, 2067, 2068, 2069, 2868, 658, 254, 225, 3692, 486, + 495, 2077, 2042, 2674, 640, 284, 235, 659, 663, 659, + 17, 18, 542, 4641, 492, 2100, 2092, 3568, 2674, 17, + 18, 13, 241, 659, 2100, 3070, 658, 659, 640, 386, + 541, 3348, 389, 241, 2110, 616, 3026, 386, 619, 2115, + 389, 386, 241, 622, 389, 559, 658, 1122, 609, 364, + 365, 17, 18, 45, 665, 370, 2132, 17, 18, 3143, + 640, 386, 17, 18, 389, 640, 559, 640, 386, 640, + 604, 389, 386, 3355, 526, 389, 2152, 386, 658, 556, + 389, 588, 559, 658, 174, 658, 588, 658, 17, 18, + 369, 2453, 386, 657, 4746, 389, 6, 386, 659, 2184, + 389, 3156, 3384, 3385, 665, 158, 98, 2147, 2184, 2149, + 3149, 103, 2697, 624, 3541, 3036, 3037, 3038, 3039, 3052, + 386, 576, 2168, 389, 129, 3407, 659, 17, 18, 606, + 105, 17, 18, 129, 392, 17, 18, 2213, 2214, 386, + 657, 2217, 389, 665, 386, 657, 4798, 389, 659, 4801, + 645, 779, 632, 633, 17, 18, 17, 18, 657, 3425, + 386, 17, 18, 389, 2214, 393, 17, 18, 1069, 20, + 665, 455, 657, 801, 1075, 1076, 404, 17, 18, 659, + 34, 4833, 2267, 411, 2361, 3525, 814, 815, 193, 2229, + 657, 2267, 386, 2269, 2831, 389, 2373, 193, 2238, 2239, + 586, 640, 486, 201, 658, 659, 657, 386, 129, 640, + 389, 386, 657, 386, 389, 486, 389, 222, 386, 658, + 657, 389, 386, 609, 657, 389, 222, 658, 657, 486, + 386, 85, 657, 389, 3574, 657, 3234, 494, 609, 62, + 63, 2826, 3574, 657, 386, 81, 2831, 389, 657, 3247, + 73, 12, 386, 520, 521, 389, 523, 1399, 525, 3624, + 1402, 657, 2338, 1405, 256, 2341, 168, 657, 583, 244, + 474, 179, 193, 626, 627, 542, 629, 556, 631, 657, + 559, 657, 510, 640, 599, 2361, 261, 292, 659, 2466, + 657, 640, 657, 3658, 665, 640, 292, 2373, 273, 386, + 3073, 658, 389, 205, 3669, 17, 18, 3672, 162, 658, + 658, 659, 565, 658, 386, 640, 541, 389, 2495, 603, + 2497, 386, 640, 3313, 389, 657, 640, 3021, 3022, 3023, + 657, 640, 179, 658, 386, 4463, 2698, 389, 657, 331, + 658, 657, 613, 614, 658, 657, 640, 386, 244, 658, + 389, 640, 4639, 557, 115, 257, 613, 614, 562, 658, + 659, 197, 4638, 609, 658, 261, 371, 269, 3634, 658, + 657, 292, 133, 657, 640, 371, 2738, 273, 606, 386, + 355, 657, 389, 3077, 3078, 3079, 657, 83, 386, 657, + 2466, 389, 658, 640, 3077, 3078, 3079, 657, 640, 2981, + 657, 657, 606, 395, 568, 241, 658, 659, 658, 659, + 3081, 658, 657, 174, 640, 2491, 658, 657, 622, 2495, + 386, 2497, 2498, 389, 657, 18, 386, 83, 264, 389, + 657, 386, 658, 4339, 389, 658, 659, 4343, 418, 2616, + 657, 3026, 657, 204, 657, 2521, 640, 657, 2524, 474, + 371, 3036, 3037, 3038, 3039, 657, 358, 386, 61, 657, + 389, 640, 657, 3518, 658, 640, 3160, 640, 658, 659, + 166, 657, 640, 3557, 3348, 2837, 640, 3160, 384, 658, + 2842, 568, 556, 658, 640, 658, 3570, 2563, 2850, 2851, + 658, 658, 659, 377, 2856, 470, 386, 657, 640, 389, + 386, 4038, 658, 389, 386, 576, 640, 389, 81, 658, + 659, 3851, 657, 2589, 657, 4038, 3214, 2593, 657, 3851, + 3218, 129, 514, 386, 658, 386, 389, 288, 389, 18, + 386, 2607, 2608, 389, 3745, 386, 13, 657, 389, 657, + 2616, 657, 2719, 2720, 658, 659, 386, 243, 2624, 389, + 2626, 2627, 37, 640, 657, 148, 658, 659, 658, 659, + 414, 553, 3233, 299, 300, 401, 58, 542, 640, 658, + 659, 2647, 129, 2649, 470, 640, 68, 2653, 63, 315, + 183, 417, 436, 588, 187, 193, 658, 243, 640, 657, + 82, 657, 588, 658, 657, 198, 658, 659, 2674, 657, + 3780, 640, 94, 95, 96, 3945, 658, 2647, 4514, 213, + 658, 659, 657, 3945, 222, 4521, 20, 2651, 472, 658, + 2696, 113, 658, 659, 197, 4319, 4320, 658, 659, 657, + 2706, 2716, 2717, 640, 119, 2711, 193, 122, 62, 63, + 2716, 2717, 640, 2719, 2720, 130, 542, 657, 35, 658, + 659, 658, 377, 658, 66, 158, 159, 657, 419, 148, + 4788, 2711, 3038, 3039, 149, 222, 362, 588, 241, 81, + 147, 3239, 368, 657, 640, 232, 657, 234, 532, 657, + 640, 93, 658, 659, 292, 640, 4462, 662, 658, 659, + 66, 264, 658, 657, 2734, 2735, 2736, 2737, 658, 2739, + 2740, 105, 659, 658, 657, 81, 362, 657, 444, 445, + 657, 640, 368, 657, 318, 319, 657, 93, 657, 323, + 324, 325, 2798, 297, 657, 299, 300, 330, 3313, 658, + 148, 492, 4014, 658, 659, 292, 162, 2813, 658, 659, + 657, 315, 438, 645, 646, 647, 657, 224, 657, 2825, + 640, 344, 657, 2829, 640, 237, 4178, 657, 640, 657, + 164, 148, 657, 371, 657, 526, 512, 252, 658, 4326, + 52, 4899, 658, 658, 127, 663, 658, 640, 289, 640, + 52, 2992, 438, 3762, 640, 197, 666, 129, 659, 640, + 132, 203, 196, 384, 198, 658, 557, 658, 2838, 2839, + 640, 2841, 658, 2843, 2844, 2845, 2846, 2847, 2848, 2849, + 377, 215, 2852, 3395, 371, 2855, 220, 201, 658, 2859, + 480, 197, 377, 148, 597, 428, 20, 203, 50, 241, + 658, 659, 278, 237, 28, 1273, 1274, 3531, 201, 3016, + 244, 333, 4748, 4749, 417, 541, 652, 251, 3531, 658, + 659, 193, 264, 658, 659, 344, 494, 261, 665, 351, + 505, 622, 173, 129, 3226, 241, 3228, 254, 3450, 273, + 444, 445, 357, 3235, 278, 658, 659, 230, 657, 73, + 222, 658, 659, 287, 198, 541, 537, 3249, 264, 83, + 277, 658, 659, 556, 3256, 3257, 3567, 593, 658, 659, + 512, 129, 658, 659, 497, 498, 3083, 3269, 3270, 3271, + 518, 3567, 537, 3275, 3276, 289, 3614, 658, 659, 3617, + 3618, 658, 659, 658, 659, 165, 344, 193, 624, 254, + 658, 659, 92, 3009, 198, 3011, 659, 593, 132, 659, + 3016, 658, 659, 3028, 3020, 3021, 3022, 3023, 658, 659, + 292, 355, 3028, 3315, 3316, 3317, 222, 344, 378, 3035, + 658, 659, 552, 659, 658, 193, 658, 659, 624, 658, + 659, 164, 464, 377, 4396, 3051, 3052, 364, 365, 132, + 588, 334, 3058, 387, 3963, 338, 118, 3966, 3967, 401, + 482, 664, 345, 6, 222, 3973, 3974, 3073, 383, 3977, + 117, 3077, 3078, 3079, 3983, 417, 4, 3083, 497, 498, + 658, 659, 485, 207, 3090, 419, 4297, 502, 3996, 344, + 622, 4201, 4001, 254, 4002, 659, 292, 4584, 401, 371, + 59, 588, 658, 659, 658, 659, 4216, 162, 232, 3115, + 234, 417, 83, 520, 521, 522, 523, 524, 525, 447, + 91, 665, 544, 659, 441, 648, 649, 650, 651, 652, + 653, 654, 655, 73, 292, 542, 470, 3244, 63, 561, + 264, 658, 659, 426, 3436, 3115, 1987, 118, 1989, 497, + 498, 4059, 4348, 13, 3160, 3483, 3484, 572, 3173, 3165, + 494, 3176, 658, 3455, 658, 659, 628, 3173, 658, 659, + 3176, 3177, 658, 515, 147, 371, 658, 659, 658, 659, + 497, 498, 658, 659, 4104, 3165, 601, 658, 659, 658, + 659, 4461, 658, 659, 119, 166, 513, 122, 10, 4461, + 659, 484, 658, 659, 39, 130, 658, 3213, 542, 515, + 658, 659, 665, 371, 658, 3224, 3222, 3223, 658, 129, + 665, 3230, 132, 3229, 149, 657, 2067, 2068, 2069, 648, + 649, 650, 651, 652, 653, 654, 655, 277, 3244, 3245, + 364, 365, 497, 498, 3250, 3254, 370, 658, 659, 3255, + 3265, 3260, 665, 377, 3826, 3827, 598, 3266, 3267, 3265, + 377, 3231, 3232, 597, 4278, 3832, 166, 664, 4464, 194, + 241, 3277, 289, 289, 608, 609, 289, 289, 3284, 3285, + 14, 52, 289, 193, 3290, 289, 659, 122, 659, 3259, + 645, 3919, 598, 417, 129, 629, 129, 631, 556, 132, + 4208, 3307, 650, 651, 652, 653, 654, 655, 657, 4217, + 231, 645, 222, 235, 284, 659, 588, 3832, 4226, 201, + 3290, 402, 294, 4231, 658, 659, 663, 252, 662, 663, + 659, 648, 649, 650, 651, 652, 653, 654, 655, 4259, + 3346, 576, 129, 626, 3350, 132, 659, 576, 666, 320, + 401, 186, 576, 645, 659, 198, 629, 659, 193, 642, + 193, 603, 254, 115, 659, 665, 490, 73, 339, 191, + 104, 659, 659, 4483, 4484, 537, 4486, 254, 148, 255, + 554, 652, 292, 205, 188, 198, 537, 222, 223, 222, + 659, 362, 588, 648, 649, 650, 651, 652, 653, 654, + 655, 173, 136, 509, 406, 179, 193, 4603, 204, 174, + 143, 657, 20, 405, 659, 658, 4686, 56, 152, 659, + 86, 628, 88, 83, 4686, 4410, 604, 608, 3535, 354, + 588, 659, 357, 201, 652, 222, 658, 97, 3444, 4549, + 174, 658, 658, 658, 178, 267, 3452, 269, 658, 4202, + 4203, 203, 658, 658, 658, 201, 190, 292, 659, 292, + 651, 371, 4215, 658, 4031, 657, 132, 657, 4664, 4222, + 658, 148, 658, 658, 598, 658, 597, 659, 658, 213, + 4233, 4234, 3452, 659, 495, 658, 658, 655, 657, 241, + 156, 657, 657, 137, 658, 565, 659, 105, 3504, 659, + 659, 4611, 565, 4613, 4614, 292, 4426, 241, 565, 434, + 576, 233, 4432, 247, 233, 242, 4031, 659, 657, 3525, + 3526, 356, 251, 3529, 548, 3531, 192, 12, 657, 3535, + 3637, 366, 4517, 13, 213, 370, 371, 201, 371, 361, + 659, 177, 565, 4471, 4472, 475, 659, 4475, 4476, 4477, + 4478, 4526, 215, 287, 3560, 28, 164, 496, 665, 657, + 198, 3567, 3568, 4774, 198, 657, 275, 658, 3574, 665, + 541, 659, 659, 3579, 344, 201, 665, 254, 3593, 665, + 427, 659, 602, 4511, 371, 494, 557, 3593, 659, 4104, + 198, 198, 659, 377, 416, 377, 353, 526, 485, 3608, + 73, 148, 3572, 526, 4589, 4875, 266, 215, 526, 3615, + 83, 526, 220, 4875, 526, 105, 4886, 3619, 3624, 377, + 4890, 3627, 198, 131, 4886, 4895, 657, 568, 4890, 659, + 645, 3637, 4843, 4895, 288, 3641, 244, 3643, 3644, 645, + 4548, 604, 4550, 251, 645, 645, 105, 572, 645, 645, + 645, 3657, 3658, 261, 645, 645, 645, 645, 645, 132, + 645, 645, 645, 3669, 645, 273, 3672, 344, 3638, 645, + 278, 4599, 4600, 609, 162, 250, 601, 3647, 588, 287, + 4608, 645, 342, 645, 3699, 645, 420, 645, 645, 645, + 3696, 665, 658, 3699, 250, 4301, 665, 658, 3704, 7, + 486, 576, 576, 3709, 658, 115, 440, 367, 658, 658, + 3716, 658, 658, 658, 448, 659, 658, 665, 3724, 471, + 576, 645, 456, 636, 659, 3731, 645, 497, 498, 395, + 565, 665, 83, 659, 569, 284, 3716, 572, 50, 89, + 492, 4033, 645, 4035, 4259, 4037, 97, 355, 583, 657, + 17, 18, 486, 588, 244, 588, 591, 4867, 657, 232, + 657, 234, 576, 515, 174, 499, 500, 657, 384, 377, + 430, 261, 645, 439, 201, 201, 201, 177, 659, 387, + 659, 390, 261, 273, 261, 244, 50, 220, 341, 4081, + 141, 264, 565, 4085, 204, 4422, 565, 344, 258, 3906, + 432, 588, 261, 371, 659, 335, 4726, 559, 7, 657, + 562, 419, 197, 377, 273, 650, 651, 551, 118, 118, + 497, 498, 81, 645, 646, 647, 576, 401, 401, 401, + 143, 241, 262, 557, 262, 3841, 401, 557, 143, 58, + 3846, 401, 50, 401, 403, 3851, 598, 581, 450, 68, + 401, 401, 663, 3823, 606, 401, 123, 124, 125, 126, + 127, 215, 470, 82, 657, 355, 526, 657, 657, 603, + 665, 605, 657, 652, 4480, 94, 95, 96, 288, 649, + 650, 651, 652, 653, 654, 655, 494, 377, 252, 252, + 657, 364, 365, 657, 113, 658, 355, 370, 658, 658, + 3906, 657, 3908, 3909, 377, 658, 657, 3913, 4893, 658, + 39, 4426, 659, 432, 659, 266, 3922, 4432, 658, 3925, + 3926, 665, 658, 658, 652, 3931, 384, 3933, 4848, 377, + 3900, 3937, 657, 237, 542, 658, 279, 401, 659, 3945, + 454, 350, 4049, 3949, 417, 3951, 659, 658, 665, 201, + 497, 498, 261, 4873, 261, 387, 658, 658, 432, 645, + 227, 228, 229, 230, 659, 659, 466, 657, 4109, 630, + 118, 648, 649, 650, 651, 652, 653, 654, 655, 401, + 470, 235, 264, 264, 665, 28, 657, 30, 576, 597, + 217, 342, 659, 122, 663, 4287, 4288, 4289, 50, 658, + 129, 609, 659, 658, 414, 657, 488, 658, 631, 419, + 658, 470, 275, 364, 365, 4021, 367, 490, 468, 62, + 63, 629, 65, 631, 182, 287, 213, 565, 155, 271, + 73, 659, 4038, 658, 658, 486, 261, 645, 659, 261, + 83, 512, 377, 4049, 635, 657, 657, 657, 91, 4019, + 658, 659, 542, 658, 662, 663, 659, 186, 658, 264, + 264, 471, 659, 659, 193, 631, 658, 334, 657, 336, + 337, 338, 20, 415, 377, 118, 377, 83, 345, 430, + 240, 198, 492, 542, 198, 198, 278, 4688, 658, 132, + 568, 658, 135, 222, 223, 658, 658, 658, 371, 63, + 252, 648, 649, 650, 651, 652, 653, 654, 655, 341, + 658, 4258, 266, 658, 333, 658, 658, 427, 658, 386, + 659, 18, 389, 166, 4130, 598, 384, 631, 251, 4135, + 657, 659, 351, 4139, 658, 75, 665, 609, 658, 609, + 657, 419, 4148, 659, 481, 657, 20, 557, 658, 4155, + 179, 132, 562, 609, 132, 559, 657, 413, 657, 426, + 657, 87, 4168, 292, 504, 151, 132, 665, 37, 371, + 4185, 581, 659, 341, 181, 526, 144, 658, 4187, 4185, + 264, 565, 565, 565, 559, 280, 251, 4193, 657, 232, + 613, 234, 609, 609, 4335, 658, 606, 659, 241, 377, + 383, 658, 657, 528, 619, 248, 317, 619, 177, 475, + 465, 4726, 622, 658, 658, 4821, 483, 484, 659, 64, + 263, 4223, 384, 603, 547, 50, 50, 356, 161, 4235, + 50, 4237, 466, 657, 371, 251, 657, 657, 657, 657, + 15, 370, 371, 657, 4250, 377, 603, 132, 4250, 264, + 20, 264, 370, 645, 631, 531, 200, 177, 657, 143, + 143, 567, 166, 482, 28, 50, 30, 50, 50, 198, + 657, 657, 398, 366, 371, 614, 657, 320, 548, 658, + 658, 4296, 658, 657, 657, 657, 657, 4394, 163, 659, + 4296, 658, 657, 4299, 287, 12, 339, 658, 62, 63, + 66, 65, 547, 384, 657, 66, 6, 50, 657, 73, + 50, 657, 12, 657, 14, 141, 198, 658, 151, 83, + 5, 659, 377, 377, 658, 544, 658, 91, 28, 603, + 30, 384, 440, 4848, 4340, 384, 136, 582, 659, 475, + 658, 233, 561, 4635, 658, 157, 264, 592, 50, 477, + 237, 394, 371, 396, 118, 657, 494, 2651, 4873, 626, + 60, 404, 659, 934, 609, 65, 4037, 2504, 132, 2857, + 4033, 135, 1054, 640, 641, 642, 4508, 4035, 623, 3206, + 4153, 1107, 4625, 83, 4506, 4795, 4791, 4333, 4394, 1131, + 4578, 91, 4027, 52, 610, 1972, 2060, 3009, 3833, 695, + 2289, 101, 166, 1179, 4406, 3036, 2560, 1691, 1937, 4524, + 2562, 2561, 4345, 2812, 3667, 2264, 3046, 3845, 118, 3051, + 3504, 1450, 4428, 4429, 4594, 4395, 4297, 4690, 3848, 4843, + 4782, 4821, 132, 476, 2208, 135, 565, 4480, 4162, 2805, + 569, 3284, 3913, 572, 144, 3287, 4668, 4856, 2813, 694, + 3376, 3703, 152, 3974, 583, 4461, 4381, 4007, 4406, 588, + 160, 4688, 591, 4394, 4046, 2719, 166, 2956, 232, 3432, + 234, 3435, 3427, 718, 4797, 84, 84, 241, 723, 4748, + 4621, 4749, 4169, 4521, 248, 4630, 4514, 4493, 4340, 4495, + 4216, 534, 535, 536, 2812, 3280, 196, 4604, 541, 263, + 1081, 1144, 1616, 4191, 2693, 2583, 2269, 4682, 1731, 3932, + 3028, 2046, 1705, 277, 557, 2551, 761, 560, 3491, 2612, + 1098, 650, 651, 991, 2460, 4421, 4532, 4668, 4534, 4535, + 2106, 3452, 232, 778, 234, 4541, 579, 1004, 2369, 4666, + 4510, 241, 2992, 2365, 1236, 2634, 3543, 2639, 248, 4786, + 2974, 4498, 4322, 3731, 597, 4787, 320, 3807, 4564, 1208, + 2484, 3945, 3437, 263, 1636, 3090, 4137, 1636, 3276, 4449, + 4790, 3083, 4578, 4136, 4136, 339, 4578, 822, 823, 824, + 825, 2338, 84, 1468, 1418, 2545, 3851, 287, 4594, 834, + 3520, 2588, 3519, 3574, 4564, 4686, 621, 1741, 4604, 714, + 4707, 609, 2687, 109, 1115, 2179, 609, 2180, 1960, 4624, + 1565, 3951, 4085, 1476, 3494, 4841, 659, 4307, 4624, 4859, + 320, 4895, 811, 4490, 869, 4890, 1517, 4597, 4598, 4396, + 394, 3525, 396, 2672, 608, 4641, 1890, 608, 3567, 339, + 404, 2665, 2135, 343, 4650, 4651, 2664, 2017, 4654, 4790, + 1496, 600, 150, 4794, 978, 4285, 1642, 2607, 2524, 4292, + 1408, 3011, 601, 3292, 1107, 910, 985, 1644, 645, 645, + 645, 4641, 1107, 4780, -1, -1, 4682, -1, 1107, -1, + 4686, 926, 927, -1, -1, 930, -1, 387, -1, -1, + -1, -1, -1, -1, 394, -1, 396, -1, -1, -1, + -1, 4707, -1, -1, 404, 950, -1, -1, -1, -1, + -1, -1, 476, -1, -1, -1, -1, 962, 37, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4698, 4699, + -1, -1, -1, -1, -1, -1, -1, -1, 236, 4745, + 238, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 450, -1, -1, -1, -1, 4896, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 534, 535, 536, -1, 4780, 4882, 476, 541, -1, -1, + 4786, 4787, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 557, -1, -1, 560, -1, 296, -1, + 298, 299, 300, 301, 302, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 579, 314, 315, 316, -1, + -1, 140, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 597, 534, 535, 536, -1, -1, -1, + -1, 541, -1, -1, -1, -1, -1, 166, -1, -1, + 169, -1, -1, -1, -1, -1, -1, 557, -1, -1, + 560, -1, -1, -1, -1, -1, -1, -1, -1, 4875, + -1, -1, -1, -1, -1, -1, 4882, -1, -1, 579, + 4886, -1, -1, 4853, 4890, -1, -1, 206, -1, 4895, + -1, -1, -1, 657, -1, -1, -1, 597, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 226, -1, -1, + -1, -1, -1, 232, 1159, 234, -1, 1162, 1163, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 123, 124, 125, 126, 127, -1, -1, -1, + -1, -1, 1187, 1188, -1, -1, 444, 445, -1, -1, + -1, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, + 1205, 1206, 1207, -1, -1, -1, -1, -1, -1, -1, + 289, 1216, 1217, -1, 1219, 1220, -1, -1, -1, 1224, + 1225, -1, -1, 1228, 1229, 1230, 1231, -1, 1233, 1234, + 1235, -1, -1, -1, 313, -1, -1, 1242, 1243, -1, + 1245, 1246, 1247, 1248, 1249, -1, -1, 1252, 1253, 1254, + 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, -1, 1264, + -1, -1, 1267, 1268, -1, -1, -1, 1272, -1, -1, + -1, 1276, 1277, 1278, -1, -1, 227, 228, 229, 230, + -1, 6, -1, 1288, 1289, 1290, -1, 12, -1, 14, + -1, 16, 1297, -1, -1, -1, -1, -1, -1, 1304, + 1305, 1306, 1307, 28, -1, 30, -1, -1, -1, -1, + 1315, 1316, 1317, -1, 1319, 1320, 1321, 1322, 1323, -1, + 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, -1, -1, + -1, 1336, 1337, -1, -1, 60, -1, -1, -1, 418, + 65, 66, -1, -1, -1, -1, 71, -1, 427, -1, + -1, -1, -1, -1, -1, -1, -1, 37, 83, -1, + -1, -1, -1, 442, -1, -1, 91, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, + -1, 460, -1, 334, -1, 336, 337, 338, -1, -1, + -1, -1, -1, 118, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 132, -1, -1, + 135, -1, -1, -1, -1, -1, -1, 1422, -1, 144, + 145, -1, -1, -1, -1, 504, -1, 152, 507, -1, + -1, -1, -1, 1438, -1, 160, -1, -1, -1, 164, + -1, 166, -1, -1, -1, -1, -1, -1, -1, -1, + 623, 176, -1, -1, -1, -1, -1, -1, 537, -1, + 140, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 426, -1, 556, -1, -1, + 559, -1, -1, -1, -1, -1, 166, -1, -1, 169, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 232, -1, 234, + -1, -1, 1517, -1, 239, -1, 241, -1, -1, -1, + -1, 694, -1, 248, -1, -1, 206, 1532, -1, 36, + 37, -1, 483, 484, -1, 42, -1, 44, 263, 46, + 47, -1, -1, -1, 1549, -1, 226, -1, -1, -1, + 723, -1, 232, -1, 234, -1, 63, -1, -1, -1, + -1, -1, 287, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 761, -1, + -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, + -1, 1606, -1, -1, -1, 778, -1, -1, -1, 289, + -1, -1, 119, -1, 339, 122, -1, -1, 343, -1, + -1, -1, -1, 130, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, + -1, -1, 149, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 825, -1, -1, -1, -1, 382, -1, -1, + 167, -1, 387, -1, -1, -1, -1, -1, -1, 394, + -1, 396, -1, -1, -1, 626, 401, -1, -1, 404, + -1, -1, -1, -1, -1, 192, -1, 194, -1, -1, + 641, 642, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 208, 209, -1, -1, -1, -1, -1, -1, 1714, + 435, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 449, 450, 451, 452, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 910, 418, -1, + -1, -1, -1, -1, -1, 252, -1, 427, -1, 1754, + -1, 476, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 442, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 281, -1, -1, 950, -1, -1, + 460, -1, -1, 290, 291, -1, 293, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 534, + 535, 536, -1, -1, -1, -1, 541, -1, -1, -1, + 327, 328, 329, -1, 504, -1, -1, 507, -1, -1, + -1, -1, 557, -1, -1, 560, -1, -1, -1, 346, + 347, 348, -1, -1, -1, -1, -1, 354, -1, -1, + 357, -1, -1, -1, 579, -1, -1, 537, -1, 584, + -1, -1, -1, 1868, 1869, 1870, 373, 374, -1, -1, + -1, -1, 597, -1, -1, -1, -1, -1, 1883, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 409, 410, 1909, -1, -1, -1, -1, -1, + 1915, -1, -1, 1918, -1, 1920, -1, -1, -1, -1, + -1, 1926, -1, 1928, 1929, -1, -1, 434, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 663, -1, + -1, -1, -1, -1, -1, 28, -1, 30, -1, -1, + -1, -1, -1, -1, -1, 1960, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, + 63, -1, 65, 490, -1, -1, 1159, 494, -1, 1162, + 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 83, 508, -1, -1, -1, -1, -1, -1, 91, -1, + -1, -1, -1, -1, 1187, 1188, -1, -1, -1, -1, + -1, -1, -1, 1196, 1197, -1, -1, 1200, 1201, 1202, + 1203, 1204, 1205, 1206, 1207, 118, 2041, -1, -1, -1, + -1, -1, -1, 1216, 1217, 2050, 1219, 1220, -1, 132, + -1, 1224, 135, -1, -1, 1228, 1229, 1230, 1231, 566, + -1, 1234, 569, -1, -1, 572, 573, 574, 575, 1242, + 1243, -1, 1245, 1246, 2079, -1, -1, -1, -1, 1252, + 1253, 1254, -1, 166, 1257, 1258, 1259, 1260, 1261, 1262, + -1, 1264, -1, -1, 1267, 1268, -1, -1, 13, 1272, + -1, -1, -1, 1276, 1277, 1278, -1, 2112, 615, 616, + -1, 26, -1, -1, -1, 1288, 1289, 1290, -1, -1, + -1, -1, 37, 38, 1297, -1, -1, -1, 2133, -1, + -1, 1304, 1305, 1306, -1, 642, 2141, -1, -1, -1, + -1, -1, -1, -1, -1, 2150, -1, 62, 63, 232, + -1, 234, -1, -1, -1, -1, -1, -1, 241, 74, + -1, -1, -1, -1, 1337, 248, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 263, -1, -1, -1, -1, 100, -1, 102, -1, 104, + -1, -1, -1, -1, -1, 2200, -1, -1, -1, -1, + -1, 116, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 138, 139, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1422, + 165, 166, -1, -1, -1, 170, 339, -1, 173, 2264, + -1, -1, -1, -1, -1, 1438, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2285, -1, -1, -1, -1, -1, -1, 202, -1, 204, + -1, -1, -1, -1, -1, -1, -1, 212, -1, 214, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 394, -1, 396, -1, -1, -1, 232, -1, 234, + -1, 404, -1, -1, -1, 240, 241, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2347, -1, 1517, -1, 2351, 262, -1, -1, + -1, 2356, 2357, -1, -1, -1, -1, -1, -1, 1532, + 2365, -1, 2367, -1, 2369, 2370, 2371, 2372, -1, 284, + 2375, -1, -1, -1, -1, -1, 1549, -1, -1, -1, + 2385, 2386, -1, 2388, 2389, -1, 2391, 2392, 2393, 2394, + -1, 2396, -1, 476, 2399, -1, -1, -1, 313, -1, + -1, -1, -1, 2408, -1, -1, -1, -1, -1, -1, + 2415, -1, 2417, -1, 2419, 2420, -1, 2422, 2423, -1, + -1, -1, 2427, 2428, 2429, -1, -1, -1, 2433, 2434, + 2435, -1, 2437, 1606, 2439, -1, 2441, -1, 2443, -1, + 2445, -1, 28, -1, 30, 2450, -1, -1, -1, -1, + -1, 534, 535, 536, -1, -1, -1, -1, 541, -1, + -1, -1, 2467, -1, -1, -1, 381, -1, -1, 2474, + -1, -1, 2477, -1, 557, -1, -1, 560, 2483, 65, + -1, 2486, -1, -1, -1, 2490, -1, -1, -1, -1, + -1, -1, 407, -1, -1, -1, 579, 83, -1, -1, + -1, -1, -1, 418, 419, 91, -1, 422, 423, -1, + -1, -1, -1, -1, 597, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 443, -1, + -1, -1, 118, -1, -1, -1, -1, -1, -1, 2544, + -1, -1, -1, -1, -1, -1, 132, -1, -1, 135, + -1, -1, -1, -1, -1, 2560, 2561, 2562, -1, 2564, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 491, -1, -1, -1, + 166, 1754, -1, -1, -1, -1, -1, -1, -1, 504, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 537, -1, -1, -1, 541, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2642, -1, -1, + -1, -1, -1, -1, 559, -1, 232, -1, 234, -1, + -1, -1, -1, -1, -1, 241, -1, -1, -1, -1, + -1, -1, 248, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 263, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2697, -1, -1, 1868, 1869, 1870, -1, -1, + -1, -1, 617, -1, -1, -1, -1, -1, -1, -1, + 625, -1, -1, 2718, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2731, -1, -1, -1, + -1, -1, -1, -1, 320, -1, 1909, -1, 2743, 2744, + -1, -1, -1, -1, -1, 1918, -1, 1920, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2805, -1, -1, -1, -1, -1, -1, -1, 394, -1, + 396, -1, -1, -1, -1, -1, -1, -1, 404, -1, + -1, 2826, -1, -1, -1, -1, 2831, 2832, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2861, 2862, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2041, -1, + -1, -1, -1, -1, -1, -1, -1, 2050, -1, -1, + -1, 2886, -1, -1, -1, 2890, -1, -1, -1, -1, + 476, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2079, -1, -1, -1, + -1, -1, 2917, 2918, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2938, -1, -1, -1, -1, -1, 2112, + -1, -1, 2947, -1, 2949, -1, 2951, -1, 534, 535, + 536, -1, -1, -1, -1, 541, -1, -1, -1, -1, + 2133, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 557, -1, -1, 560, -1, 2981, 2150, -1, -1, + -1, 2986, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 579, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 597, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3026, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3036, 3037, 3038, 3039, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3084, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3111, -1, -1, -1, + -1, -1, 2285, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3131, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2347, -1, -1, 3182, 2351, -1, + -1, -1, -1, 2356, 2357, -1, -1, -1, -1, -1, + -1, -1, 2365, -1, 2367, -1, 2369, -1, 2371, 2372, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2385, 2386, -1, 2388, -1, -1, 2391, 2392, + 2393, 2394, -1, 2396, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2408, -1, -1, -1, -1, + -1, -1, 2415, -1, 2417, -1, 2419, 2420, -1, 2422, + -1, -1, -1, -1, 2427, 2428, 2429, -1, -1, -1, + 2433, 2434, 2435, -1, 2437, -1, 2439, -1, 2441, -1, + 2443, -1, 2445, -1, -1, 3280, -1, 2450, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2467, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3313, -1, + 2483, -1, -1, 2486, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3347, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3358, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 14, -1, 16, -1, -1, -1, -1, + -1, -1, -1, 3388, -1, -1, -1, 3392, 3393, 2562, + 3395, -1, -1, 34, -1, -1, -1, 38, -1, 3404, + -1, -1, -1, -1, 3409, -1, -1, 3412, -1, 3414, + 3415, 52, 53, -1, -1, 56, -1, -1, -1, 60, + -1, -1, -1, -1, 65, 66, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 85, 3450, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 104, -1, -1, -1, -1, -1, 2642, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3485, -1, -1, -1, -1, -1, -1, 128, -1, -1, + -1, -1, -1, -1, -1, 136, -1, 138, 139, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 151, 152, -1, -1, 3519, -1, -1, -1, -1, -1, + -1, -1, -1, 164, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 178, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3556, -1, -1, 195, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 211, 3576, 213, -1, -1, -1, 217, -1, -1, -1, + 221, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 235, -1, -1, 3602, -1, -1, + -1, -1, -1, -1, -1, -1, 247, -1, 249, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 265, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 283, -1, -1, -1, 287, -1, -1, -1, + -1, -1, -1, 294, -1, -1, -1, -1, -1, 2832, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3713, 3714, + -1, -1, -1, 2886, -1, -1, -1, 2890, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 382, -1, -1, 2917, 2918, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 399, -1, + 401, -1, -1, -1, -1, 2938, -1, -1, -1, -1, + -1, -1, -1, 414, 2947, -1, 2949, -1, 2951, -1, + -1, -1, -1, -1, 425, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 447, -1, -1, 450, + -1, 452, -1, 454, 455, -1, -1, 458, 459, -1, + -1, -1, -1, -1, -1, -1, -1, 3832, 469, -1, + -1, 472, -1, -1, -1, -1, -1, -1, -1, 480, + -1, -1, -1, -1, -1, 486, -1, 3852, -1, -1, + -1, -1, -1, 494, -1, -1, -1, -1, 499, 500, + 501, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3875, -1, -1, -1, -1, -1, -1, 3882, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 532, -1, -1, -1, -1, -1, -1, -1, 540, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3084, -1, 3918, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 14, -1, 16, -1, -1, 3111, -1, + -1, -1, -1, 584, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 34, -1, 596, -1, 38, 3131, 600, + -1, -1, 603, -1, -1, -1, -1, 608, -1, -1, + -1, 52, 53, -1, -1, 56, -1, -1, -1, 60, + -1, -1, -1, -1, 65, 66, -1, -1, -1, 630, + -1, -1, -1, -1, -1, -1, -1, 638, -1, -1, + -1, -1, -1, 644, 85, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 657, -1, -1, -1, + -1, -1, -1, 104, -1, -1, 4031, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 128, -1, -1, + -1, -1, -1, -1, -1, 136, -1, 138, 139, 4064, + -1, -1, -1, 4068, -1, -1, -1, -1, -1, -1, + 151, 152, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 178, 4103, 4104, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 195, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 211, -1, 213, -1, -1, -1, 217, -1, -1, -1, + 221, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 235, -1, -1, 4162, -1, -1, + -1, -1, -1, -1, -1, -1, 247, -1, 249, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 265, 3358, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 283, -1, -1, -1, 287, -1, -1, -1, + -1, -1, -1, 294, -1, 3388, -1, -1, 4223, 3392, + 3393, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3404, -1, -1, -1, -1, 3409, -1, -1, 3412, + -1, 3414, 3415, -1, -1, -1, -1, 4252, -1, -1, + -1, -1, -1, -1, 4259, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4297, -1, -1, -1, -1, -1, -1, -1, + -1, 382, -1, -1, -1, -1, -1, 4312, -1, 4314, + -1, -1, 3485, -1, -1, -1, -1, -1, 399, -1, + 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 414, 4339, -1, -1, -1, 4343, -1, + -1, -1, -1, -1, 425, -1, 3519, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 447, -1, -1, 450, + -1, 452, -1, 454, 455, -1, -1, 458, 459, -1, + -1, -1, -1, 3556, -1, -1, -1, -1, 469, -1, + -1, 472, -1, -1, -1, -1, -1, -1, -1, 480, + -1, 4406, -1, 3576, -1, 486, -1, -1, -1, -1, + -1, -1, -1, 494, -1, -1, -1, -1, 499, 500, + 501, 4426, -1, -1, -1, -1, -1, 4432, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4445, -1, 14, -1, 16, -1, -1, -1, -1, -1, + -1, 532, -1, -1, -1, -1, -1, -1, -1, 540, + -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 52, 53, -1, -1, -1, -1, -1, -1, 60, -1, + -1, -1, -1, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, 584, 4509, -1, -1, -1, -1, 4514, + -1, -1, -1, 85, -1, 596, 4521, -1, -1, 600, + -1, -1, 603, -1, -1, -1, -1, 608, -1, -1, + -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, + 3713, 3714, -1, -1, -1, -1, -1, -1, -1, 630, + -1, -1, -1, -1, -1, -1, 128, 638, -1, -1, + -1, -1, -1, 644, 136, 4570, 138, 139, -1, -1, + -1, -1, -1, -1, -1, -1, 657, -1, -1, 151, + 152, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 178, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 195, -1, 4630, -1, -1, -1, -1, + -1, 4636, -1, -1, -1, -1, -1, -1, -1, 211, + -1, 213, -1, -1, -1, 217, -1, -1, -1, 221, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4679, 247, -1, 249, -1, 3852, + -1, -1, 4687, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 265, -1, -1, -1, -1, -1, -1, + -1, -1, 3875, -1, -1, -1, -1, -1, -1, 3882, + -1, 283, -1, 4718, -1, 287, -1, -1, -1, -1, + -1, 4726, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4746, -1, 4748, 4749, 3918, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4774, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4798, -1, -1, 4801, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 399, 4833, 401, + -1, -1, -1, -1, -1, -1, -1, -1, 4843, -1, + -1, -1, 414, 4848, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 425, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4873, -1, + -1, -1, -1, -1, -1, 447, -1, -1, 450, -1, + 452, -1, -1, 455, -1, -1, 458, 459, -1, -1, + -1, 4064, -1, 4898, -1, 4068, -1, 469, -1, -1, + 472, -1, -1, -1, -1, -1, -1, -1, 480, -1, + -1, -1, -1, -1, 486, -1, -1, -1, -1, -1, + -1, -1, 494, -1, -1, -1, -1, 499, 500, 501, + 4103, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 532, -1, -1, -1, -1, -1, -1, -1, 540, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 584, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 596, -1, -1, -1, 600, -1, + -1, 603, -1, -1, -1, -1, 608, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 638, -1, -1, -1, + -1, -1, 644, -1, -1, -1, -1, -1, -1, 4252, + -1, -1, -1, -1, -1, 657, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4312, + -1, 4314, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4445, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4570, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4679, -1, -1, -1, + -1, -1, -1, -1, 4687, 5, -1, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, 4718, -1, 37, 38, 39, + 40, 41, 42, 43, -1, 45, 46, 47, 48, 49, + -1, 51, 52, -1, -1, 55, 56, 57, 58, 59, + -1, 61, 62, 63, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, 101, 102, 103, -1, -1, 106, 107, 108, 109, + 110, 111, -1, 113, 114, 115, -1, 117, 118, 119, + 120, 121, 122, -1, -1, -1, -1, 127, 128, 129, + -1, -1, 132, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, 179, + -1, 181, 182, 183, 184, 185, 186, 187, 188, -1, + 190, 191, 192, 193, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, 4898, 216, 217, 218, 219, + -1, 221, 222, 223, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, 235, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, 247, 248, 249, + 250, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + 270, 271, -1, 273, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, 292, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + 340, 341, -1, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, 356, 357, -1, -1, + 360, 361, 362, 363, 364, 365, 366, 367, 368, -1, + 370, 371, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, 397, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, 454, 455, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, 538, 539, + 540, 541, -1, 543, 544, 545, 546, 547, 548, 549, + 550, 551, 552, 553, 554, 555, 556, 557, -1, -1, + 560, 561, 562, 563, -1, 565, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, 577, 578, 579, + 580, -1, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + 610, 611, 612, 613, 614, -1, -1, 617, 618, -1, + 620, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, -1, 642, -1, -1, -1, -1, -1, -1, -1, + 650, 651, -1, -1, -1, -1, 656, 657, -1, -1, + 660, 661, -1, -1, 664, 665, 5, -1, 7, 8, + 9, 10, 11, 12, 13, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, - -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, - 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, - 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, + 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, + 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, + 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, - -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, - -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, - 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, - -1, -1, -1, 132, 133, -1, 135, -1, -1, -1, - 139, -1, 141, 142, 143, 144, 145, -1, -1, -1, - -1, 150, -1, -1, 153, 154, 155, -1, -1, -1, - 159, -1, 161, 162, -1, 164, 165, 166, -1, 168, - 169, -1, 171, 172, 173, 174, 175, 176, 177, -1, - -1, 180, 181, 182, 183, -1, -1, 186, 187, -1, - 189, 190, 191, -1, -1, 194, -1, -1, -1, 198, - 199, -1, 201, -1, 203, -1, 205, 206, 207, 208, - 209, 210, 211, -1, 213, -1, -1, 216, 217, 218, - -1, 220, -1, -1, -1, 224, 225, -1, -1, -1, - 229, 230, 231, 232, 233, -1, -1, -1, 237, 238, - 239, -1, -1, 242, -1, -1, -1, -1, 247, 248, - -1, -1, -1, 252, -1, 254, 255, -1, 257, 258, - -1, -1, -1, 262, -1, -1, 265, 266, 267, -1, - -1, 270, -1, -1, 273, 274, 275, -1, -1, -1, - -1, 280, 281, -1, 283, -1, 285, -1, 287, 288, - -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, + -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, + 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, + 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, + 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, + -1, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, -1, 151, -1, -1, 154, 155, 156, -1, -1, + -1, 160, -1, 162, 163, -1, 165, 166, 167, -1, + 169, 170, -1, 172, 173, 174, 175, 176, 177, 178, + 179, -1, 181, 182, 183, 184, 185, 186, 187, 188, + -1, 190, 191, 192, 193, -1, 195, -1, -1, -1, + 199, 200, -1, 202, -1, 204, -1, 206, 207, 208, + 209, 210, 211, 212, -1, 214, -1, 216, 217, 218, + 219, -1, 221, 222, 223, -1, 225, 226, -1, -1, + -1, 230, 231, 232, 233, 234, 235, -1, -1, 238, + 239, 240, -1, -1, 243, -1, -1, -1, 247, 248, + 249, 250, -1, -1, 253, -1, 255, 256, -1, 258, + 259, -1, -1, -1, 263, -1, -1, 266, 267, 268, + -1, -1, 271, -1, 273, 274, 275, -1, -1, -1, + -1, -1, 281, 282, -1, 284, -1, 286, -1, 288, + 289, -1, -1, 292, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, -1, 312, 313, 314, 315, -1, 317, 318, - 319, 320, -1, 322, 323, 324, -1, -1, -1, -1, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - -1, 340, -1, 342, -1, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, -1, -1, - 359, 360, 361, 362, -1, -1, -1, 366, 367, -1, - -1, -1, 371, -1, 373, 374, 375, -1, 377, 378, - 379, 380, -1, 382, 383, -1, -1, -1, -1, -1, - -1, -1, -1, 392, 393, 394, -1, -1, 397, -1, - 399, -1, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, -1, -1, 413, 414, 415, -1, 417, -1, - 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, -1, -1, -1, 434, 435, 436, 437, 438, - -1, -1, 441, 442, 443, 444, 445, -1, 447, 448, - -1, 450, 451, 452, -1, -1, 455, -1, 457, -1, - 459, 460, -1, 462, 463, -1, 465, -1, 467, -1, + 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, -1, -1, -1, + -1, 330, 331, 332, 333, 334, 335, -1, -1, 338, + 339, 340, 341, -1, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, -1, 356, 357, -1, + -1, 360, 361, 362, 363, 364, 365, 366, 367, 368, + -1, 370, 371, 372, -1, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, -1, -1, -1, -1, + -1, -1, -1, -1, 393, 394, 395, -1, 397, 398, + -1, 400, -1, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, -1, 414, 415, 416, -1, 418, + -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, + -1, -1, 431, -1, -1, -1, 435, 436, 437, 438, + 439, -1, -1, 442, 443, 444, 445, 446, -1, 448, + 449, -1, 451, 452, 453, 454, 455, 456, -1, 458, + -1, 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, -1, 483, 484, -1, -1, -1, 488, - 489, 490, 491, -1, -1, 494, 495, -1, -1, -1, - 499, -1, 501, 502, 503, 504, 505, 506, -1, 508, - 509, 510, 511, 512, 513, -1, -1, -1, -1, -1, - -1, 520, 521, -1, 523, -1, -1, 526, -1, -1, - -1, 530, 531, 532, -1, -1, -1, 536, -1, -1, - 539, 540, -1, 542, 543, 544, 545, 546, 547, -1, - -1, 550, 551, 552, 553, -1, 555, 556, -1, -1, - 559, 560, 561, 562, -1, 564, 565, 566, -1, 568, - 569, 570, 571, -1, -1, -1, -1, -1, 577, 578, - 579, -1, -1, -1, 583, 584, 585, 586, -1, 588, - 589, -1, 591, 592, -1, 594, 595, -1, -1, 598, - -1, -1, 601, -1, 603, -1, 605, 606, -1, -1, - -1, -1, -1, -1, 613, -1, -1, 616, -1, -1, - -1, 620, 621, 622, 623, 624, 625, 626, -1, -1, - -1, -1, -1, -1, 633, 634, -1, 636, 637, 638, - -1, -1, 641, -1, 5, 644, 7, 8, 9, 10, - 11, 12, 13, 14, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, 104, -1, 106, -1, 108, -1, 110, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, 136, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - 151, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, 212, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, 240, - -1, 242, -1, -1, -1, 246, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, 275, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, 286, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, 439, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, 485, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, 498, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, 564, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, 580, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, 602, 603, 604, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, 13, 14, 15, - -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, 104, -1, - 106, -1, 108, -1, 110, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - 136, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, 151, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, 212, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, 240, -1, 242, -1, -1, -1, - 246, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, 275, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - 286, 287, 288, -1, -1, -1, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, 439, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, 485, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, 498, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, 580, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, 602, 603, 604, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, 129, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, 192, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - 221, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - 291, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, 363, 364, -1, 366, 367, -1, -1, 370, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, 516, 517, 518, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, 587, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, 129, -1, -1, 132, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, 192, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, 221, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, 291, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, 370, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, 587, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, 129, -1, - -1, 132, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, 192, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - 221, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - 291, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, 370, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, 564, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, 587, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, 129, -1, -1, 132, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, 192, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, 221, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, 291, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, 370, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, 587, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, 109, 110, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, 275, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, 564, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, 37, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, 132, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, 275, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, 39, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - 221, 222, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, 564, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 479, 480, 481, 482, -1, 484, 485, -1, -1, -1, + 489, 490, 491, 492, -1, -1, -1, 496, -1, -1, + -1, 500, -1, 502, 503, 504, 505, 506, 507, -1, + 509, 510, 511, 512, 513, 514, -1, -1, -1, -1, + -1, -1, 521, 522, -1, 524, -1, -1, 527, -1, + -1, -1, 531, 532, 533, -1, -1, -1, 537, 538, + 539, 540, 541, -1, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, -1, + -1, 560, 561, 562, 563, -1, 565, 566, 567, -1, + 569, 570, 571, 572, -1, -1, -1, -1, -1, 578, + 579, 580, -1, 582, 583, 584, 585, 586, 587, 588, + 589, 590, 591, 592, 593, -1, 595, 596, -1, -1, + 599, -1, -1, 602, -1, 604, -1, 606, 607, -1, + -1, 610, 611, 612, 613, 614, -1, -1, 617, 618, + -1, 620, 621, 622, 623, 624, 625, 626, 627, -1, + -1, -1, -1, -1, -1, 634, 635, -1, 637, 638, + 639, -1, -1, 642, -1, -1, -1, -1, -1, -1, + -1, 650, 651, -1, -1, -1, -1, 656, 657, -1, + -1, 660, 661, -1, -1, 664, 665, 5, -1, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, 37, + 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, 56, 57, + 58, 59, -1, 61, 62, 63, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, 101, 102, 103, -1, -1, 106, 107, + 108, 109, 110, 111, -1, 113, 114, 115, -1, 117, + 118, 119, 120, 121, 122, -1, -1, -1, -1, 127, + 128, 129, -1, -1, 132, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, 179, -1, 181, 182, 183, 184, 185, 186, 187, + 188, -1, 190, 191, 192, 193, -1, 195, -1, -1, + -1, 199, 200, 201, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, 216, 217, + 218, 219, -1, 221, 222, 223, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, 235, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, 247, + 248, 249, 250, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, 273, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, 292, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, 340, 341, -1, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, 356, 357, + -1, -1, 360, 361, 362, 363, 364, 365, 366, 367, + 368, -1, 370, 371, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, 397, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + 538, 539, 540, 541, -1, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + -1, -1, 560, 561, 562, 563, -1, 565, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, 582, 583, 584, 585, 586, 587, + 588, 589, 590, 591, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, 610, 611, 612, 613, 614, -1, -1, 617, + 618, -1, 620, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, -1, 642, -1, -1, -1, -1, -1, + -1, -1, 650, 651, -1, -1, -1, -1, 656, 657, + -1, -1, 660, 661, -1, -1, 664, 665, 5, -1, + 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, + -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + 37, 38, 39, 40, 41, 42, 43, -1, 45, 46, + 47, -1, 49, -1, 51, 52, -1, -1, 55, 56, + 57, 58, 59, -1, 61, 62, 63, 64, 65, -1, + 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, + 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, + 97, 98, -1, 100, 101, 102, 103, -1, -1, 106, + 107, 108, 109, 110, 111, -1, 113, 114, 115, -1, + 117, 118, 119, 120, 121, 122, -1, -1, -1, -1, + 127, 128, 129, -1, -1, 132, 133, -1, 135, -1, + -1, -1, -1, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, -1, 151, -1, -1, 154, 155, 156, + -1, -1, -1, 160, -1, 162, 163, -1, 165, 166, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, 179, -1, 181, 182, 183, 184, 185, 186, + 187, 188, -1, 190, 191, 192, 193, -1, 195, -1, + -1, -1, 199, 200, 201, 202, -1, 204, -1, 206, + 207, 208, 209, 210, 211, 212, -1, 214, -1, 216, + 217, 218, 219, -1, 221, 222, 223, -1, 225, 226, + -1, -1, -1, 230, 231, 232, 233, 234, 235, -1, + -1, 238, 239, 240, -1, -1, 243, -1, -1, -1, + 247, 248, 249, 250, -1, -1, 253, -1, 255, 256, + -1, 258, 259, -1, -1, -1, 263, -1, -1, 266, + 267, 268, -1, -1, 271, -1, 273, 274, 275, -1, + -1, -1, -1, -1, 281, 282, -1, 284, -1, 286, + -1, 288, 289, -1, -1, 292, -1, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, -1, + -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, + -1, 338, 339, 340, 341, -1, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, -1, 356, + 357, -1, -1, 360, 361, 362, 363, 364, 365, 366, + 367, 368, -1, 370, 371, 372, -1, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, -1, -1, + -1, -1, -1, -1, -1, -1, 393, 394, 395, -1, + 397, 398, -1, 400, -1, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, -1, 414, 415, 416, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, -1, -1, -1, 435, 436, + 437, 438, 439, -1, -1, 442, 443, 444, 445, 446, + -1, 448, 449, -1, 451, 452, 453, 454, 455, 456, + -1, 458, -1, 460, 461, -1, 463, 464, -1, 466, + -1, 468, -1, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, -1, 484, 485, -1, + -1, -1, 489, 490, 491, 492, -1, -1, -1, 496, + -1, -1, -1, 500, -1, 502, 503, 504, 505, 506, + 507, -1, 509, 510, 511, 512, 513, 514, -1, -1, + -1, -1, -1, -1, 521, 522, -1, 524, -1, -1, + 527, -1, -1, -1, 531, 532, 533, -1, -1, -1, + 537, 538, 539, 540, 541, -1, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, -1, -1, 560, 561, 562, 563, -1, 565, 566, + 567, -1, 569, 570, 571, 572, -1, -1, -1, -1, + -1, 578, 579, 580, -1, 582, 583, 584, 585, 586, + 587, 588, 589, 590, 591, 592, 593, -1, 595, 596, + -1, -1, 599, -1, -1, 602, -1, 604, -1, 606, + 607, -1, -1, 610, 611, 612, 613, 614, -1, -1, + 617, 618, -1, 620, 621, 622, 623, 624, 625, 626, + 627, -1, -1, -1, -1, -1, -1, 634, 635, -1, + 637, 638, 639, -1, -1, 642, -1, -1, -1, -1, + -1, -1, -1, 650, 651, -1, -1, -1, -1, 656, + 657, -1, -1, 660, 661, -1, -1, 664, 665, 5, + -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, + -1, 37, 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, + 56, 57, 58, 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, 291, -1, -1, -1, 295, + 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, + 106, 107, 108, 109, 110, 111, -1, 113, 114, 115, + -1, 117, 118, 119, 120, 121, 122, -1, -1, -1, + -1, 127, 128, 129, -1, -1, 132, 133, -1, 135, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, 179, -1, 181, 182, 183, 184, 185, + 186, 187, 188, -1, 190, 191, 192, 193, -1, 195, + -1, -1, -1, 199, 200, 201, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + 216, 217, 218, 219, -1, 221, 222, 223, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, 235, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, 247, 248, 249, 250, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, 273, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, 292, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, 370, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - 396, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, 587, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, 340, 341, -1, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + 356, 357, -1, -1, 360, 361, 362, 363, 364, 365, + 366, 367, 368, -1, 370, 371, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, 397, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, 454, 455, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, 538, 539, 540, 541, -1, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, -1, -1, 560, 561, 562, 563, -1, 565, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, 610, 611, 612, 613, 614, -1, + -1, 617, 618, -1, 620, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, -1, 642, -1, -1, -1, + -1, -1, -1, -1, 650, 651, -1, -1, -1, -1, + 656, 657, -1, -1, 660, 661, -1, -1, 664, 665, + 5, -1, 7, 8, 9, 10, 11, 12, -1, -1, + 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, + -1, -1, 37, 38, 39, 40, 41, 42, 43, -1, + 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, + 55, 56, 57, 58, 59, -1, 61, 62, 63, 64, + 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, + 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, + 95, 96, 97, 98, -1, 100, 101, 102, 103, -1, + -1, 106, 107, 108, 109, 110, 111, -1, 113, 114, + 115, -1, 117, 118, 119, 120, 121, 122, -1, -1, + -1, -1, 127, 128, 129, -1, -1, 132, 133, -1, + 135, -1, -1, -1, -1, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, -1, 151, -1, -1, 154, + 155, 156, -1, -1, -1, 160, -1, 162, 163, -1, + 165, 166, 167, -1, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, -1, 181, 182, 183, 184, + 185, 186, 187, 188, -1, 190, 191, 192, 193, -1, + 195, -1, -1, -1, 199, 200, -1, 202, -1, 204, + -1, 206, 207, 208, 209, 210, 211, 212, -1, 214, + -1, 216, 217, 218, 219, -1, 221, 222, 223, -1, + 225, 226, -1, -1, -1, 230, 231, 232, 233, 234, + 235, -1, -1, 238, 239, 240, -1, -1, 243, -1, + -1, -1, 247, 248, 249, 250, -1, -1, 253, -1, + 255, 256, -1, 258, 259, -1, -1, -1, 263, -1, + -1, 266, 267, 268, -1, -1, 271, -1, 273, 274, + 275, -1, -1, -1, -1, -1, 281, 282, -1, 284, + -1, 286, -1, 288, 289, -1, -1, 292, -1, -1, + -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, -1, -1, -1, -1, 330, 331, 332, 333, 334, + 335, -1, -1, 338, 339, 340, 341, -1, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, -1, -1, 360, 361, 362, 363, 364, + 365, 366, 367, 368, -1, 370, 371, 372, -1, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + -1, -1, -1, -1, -1, -1, -1, -1, 393, 394, + 395, -1, 397, 398, -1, 400, -1, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, -1, 414, + 415, 416, -1, 418, -1, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, -1, -1, -1, + 435, 436, 437, 438, 439, -1, -1, 442, 443, 444, + 445, 446, -1, 448, 449, -1, 451, 452, 453, 454, + 455, 456, -1, 458, -1, 460, 461, -1, 463, 464, + -1, 466, -1, 468, -1, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, -1, 484, + 485, -1, -1, -1, 489, 490, 491, 492, -1, -1, + -1, 496, -1, -1, -1, 500, -1, 502, 503, 504, + 505, 506, 507, -1, 509, 510, 511, 512, 513, 514, + -1, -1, -1, -1, -1, -1, 521, 522, -1, 524, + -1, -1, 527, -1, -1, -1, 531, 532, 533, -1, + -1, -1, 537, 538, 539, 540, 541, -1, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, -1, -1, 560, 561, 562, 563, -1, + 565, 566, 567, -1, 569, 570, 571, 572, -1, -1, + -1, -1, -1, 578, 579, 580, -1, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, -1, + 595, 596, -1, -1, 599, -1, -1, 602, -1, 604, + -1, 606, 607, -1, -1, 610, 611, 612, 613, 614, + -1, -1, 617, 618, -1, 620, 621, 622, 623, 624, + 625, 626, 627, -1, -1, -1, -1, -1, -1, 634, + 635, -1, 637, 638, 639, -1, -1, 642, -1, -1, + -1, -1, -1, -1, -1, 650, 651, -1, -1, -1, + -1, 656, 657, -1, -1, 660, 661, -1, -1, 664, + 665, 5, -1, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, 37, 38, 39, 40, 41, 42, 43, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, 56, 57, 58, 59, -1, 61, 62, 63, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, 101, 102, 103, + -1, -1, 106, 107, 108, 109, 110, 111, -1, 113, + 114, 115, -1, 117, 118, 119, 120, 121, 122, -1, + -1, -1, -1, 127, 128, 129, -1, -1, 132, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, 179, -1, 181, 182, 183, + 184, 185, 186, 187, 188, -1, 190, 191, 192, 193, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, 216, 217, 218, 219, -1, 221, 222, 223, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, 235, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, 247, 248, 249, 250, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, 273, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, 292, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, 340, 341, -1, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, 356, 357, -1, -1, 360, 361, 362, 363, + 364, 365, 366, 367, 368, -1, 370, 371, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, 397, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + 454, 455, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, 538, 539, 540, 541, -1, 543, + 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 557, -1, -1, 560, 561, 562, 563, + -1, 565, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, 610, 611, 612, 613, + 614, -1, -1, 617, 618, -1, 620, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, -1, 642, -1, + -1, -1, -1, -1, -1, -1, 650, 651, -1, -1, + -1, -1, 656, 657, -1, -1, 660, 661, -1, -1, + 664, 665, 5, -1, 7, 8, 9, 10, 11, 12, + 13, -1, 15, -1, -1, -1, 19, -1, -1, 22, + -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, 34, -1, -1, 37, 38, 39, 40, 41, 42, + 43, -1, 45, 46, 47, -1, 49, -1, 51, 52, + -1, -1, 55, 56, 57, 58, 59, -1, 61, 62, + 63, 64, 65, -1, 67, 68, 69, 70, 71, 72, + -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + -1, 94, 95, 96, 97, 98, -1, 100, 101, 102, + 103, -1, -1, 106, 107, 108, 109, 110, 111, -1, + 113, 114, 115, -1, 117, 118, 119, 120, 121, 122, + -1, -1, -1, -1, 127, 128, 129, -1, -1, 132, + 133, -1, 135, -1, -1, -1, -1, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, -1, 151, -1, + -1, 154, 155, 156, -1, -1, -1, 160, -1, 162, + 163, -1, 165, 166, 167, -1, 169, 170, -1, 172, + 173, 174, 175, 176, 177, 178, 179, -1, 181, 182, + 183, 184, 185, 186, 187, 188, -1, 190, 191, 192, + 193, -1, 195, -1, -1, -1, 199, 200, -1, 202, + -1, 204, -1, 206, 207, 208, 209, 210, 211, 212, + -1, 214, -1, 216, 217, 218, 219, -1, 221, 222, + 223, -1, 225, 226, -1, -1, -1, 230, 231, 232, + 233, 234, 235, -1, -1, 238, 239, 240, -1, -1, + 243, -1, -1, -1, 247, 248, 249, 250, -1, -1, + 253, -1, 255, 256, -1, 258, 259, -1, -1, -1, + 263, -1, -1, 266, 267, 268, -1, -1, 271, -1, + 273, 274, 275, -1, -1, -1, -1, -1, 281, 282, + -1, 284, -1, 286, -1, 288, 289, -1, -1, 292, + -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, -1, -1, -1, -1, 330, 331, 332, + 333, 334, 335, -1, -1, 338, 339, 340, 341, -1, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, -1, 356, 357, -1, -1, 360, 361, 362, + 363, 364, -1, 366, 367, 368, -1, 370, 371, 372, + -1, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, -1, -1, -1, -1, -1, -1, -1, -1, + 393, 394, 395, -1, 397, 398, -1, 400, -1, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, 416, -1, 418, -1, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, -1, + -1, -1, 435, 436, 437, 438, 439, -1, -1, 442, + 443, 444, 445, 446, -1, 448, 449, -1, 451, 452, + 453, 454, 455, 456, -1, 458, -1, 460, 461, -1, + 463, 464, -1, 466, -1, 468, -1, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + -1, 484, 485, -1, -1, -1, 489, 490, 491, 492, + -1, -1, -1, 496, -1, -1, -1, 500, -1, 502, + 503, 504, 505, 506, 507, -1, 509, 510, 511, 512, + 513, 514, -1, -1, -1, -1, -1, -1, 521, 522, + -1, 524, -1, -1, 527, -1, -1, -1, 531, 532, + 533, -1, -1, -1, 537, 538, 539, 540, 541, -1, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, -1, -1, 560, 561, 562, + 563, -1, 565, 566, 567, -1, 569, 570, 571, 572, + -1, -1, -1, -1, -1, 578, 579, 580, -1, 582, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, -1, 595, 596, -1, -1, 599, -1, -1, 602, + -1, 604, -1, 606, 607, -1, -1, 610, 611, 612, + 613, 614, -1, -1, 617, 618, -1, 620, 621, 622, + 623, 624, 625, 626, 627, -1, -1, -1, -1, -1, + -1, 634, 635, -1, 637, 638, 639, -1, -1, 642, + -1, -1, -1, -1, -1, -1, -1, 650, 651, -1, + -1, -1, -1, 656, 657, -1, -1, 660, 661, -1, + -1, 664, 665, 5, -1, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, 37, 38, 39, 40, 41, + 42, 43, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, 56, 57, 58, 59, -1, 61, + 62, 63, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, 101, + 102, 103, -1, -1, 106, 107, 108, 109, 110, 111, + -1, 113, 114, 115, -1, 117, 118, 119, 120, 121, + 122, -1, -1, -1, -1, 127, 128, 129, -1, -1, + 132, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, 179, -1, 181, + 182, 183, 184, 185, 186, 187, 188, -1, 190, 191, + 192, 193, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, 216, 217, 218, 219, -1, 221, + 222, 223, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, 235, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, 247, 248, 249, 250, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, 273, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + 292, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, 340, 341, + -1, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, 356, 357, -1, -1, 360, 361, + 362, 363, 364, 365, 366, 367, 368, -1, 370, 371, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, 397, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, 454, 455, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, 538, 539, 540, 541, + -1, 543, 544, 545, 546, 547, 548, 549, 550, 551, + 552, 553, 554, 555, 556, 557, -1, -1, 560, 561, + 562, 563, -1, 565, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, 610, 611, + 612, 613, 614, -1, -1, 617, 618, -1, 620, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, -1, + 642, -1, -1, -1, -1, -1, -1, -1, 650, 651, + -1, -1, -1, -1, 656, 657, -1, -1, 660, 661, + -1, -1, 664, 665, 5, -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, + 31, 32, -1, 34, -1, -1, 37, 38, 39, 40, + 41, 42, 43, -1, 45, 46, 47, -1, 49, -1, + 51, 52, -1, -1, 55, 56, 57, 58, 59, -1, + 61, 62, 63, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - 291, -1, -1, -1, 295, 296, 297, 298, 299, 300, + 101, 102, 103, -1, -1, 106, 107, 108, 109, 110, + 111, -1, 113, 114, 115, -1, 117, 118, 119, 120, + 121, 122, -1, -1, -1, -1, 127, 128, 129, -1, + -1, 132, 133, -1, 135, -1, -1, -1, -1, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, -1, + 151, -1, -1, 154, 155, 156, -1, -1, -1, 160, + -1, 162, 163, -1, 165, 166, 167, -1, 169, 170, + -1, 172, 173, 174, 175, 176, 177, 178, 179, -1, + 181, 182, 183, 184, 185, 186, 187, 188, -1, 190, + 191, 192, 193, -1, 195, -1, -1, -1, 199, 200, + -1, 202, -1, 204, -1, 206, 207, 208, 209, 210, + 211, 212, -1, 214, -1, 216, 217, 218, 219, -1, + 221, 222, 223, -1, 225, 226, -1, -1, -1, 230, + 231, 232, 233, 234, 235, -1, -1, 238, 239, 240, + -1, -1, 243, -1, -1, -1, 247, 248, 249, 250, + -1, -1, 253, -1, 255, 256, -1, 258, 259, -1, + -1, -1, 263, -1, -1, 266, 267, 268, -1, -1, + 271, -1, 273, 274, 275, -1, -1, -1, -1, -1, + 281, 282, -1, 284, -1, 286, -1, 288, 289, -1, + -1, 292, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, 370, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, 396, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, + 311, -1, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, -1, -1, -1, -1, 330, + 331, 332, 333, 334, 335, -1, -1, 338, 339, 340, + 341, -1, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, -1, 356, 357, -1, -1, 360, + 361, 362, 363, 364, 365, 366, 367, 368, -1, 370, + 371, 372, -1, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, -1, -1, -1, -1, -1, -1, + -1, -1, 393, 394, 395, -1, 397, 398, -1, 400, + -1, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, -1, 414, 415, 416, -1, 418, -1, 420, + 421, 422, 423, 424, -1, 426, 427, 428, -1, -1, + 431, -1, -1, -1, 435, 436, 437, 438, 439, -1, + -1, 442, 443, 444, 445, 446, -1, 448, 449, -1, + 451, 452, 453, 454, 455, 456, -1, 458, -1, 460, + 461, -1, 463, 464, -1, 466, -1, 468, -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, 587, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 481, 482, -1, 484, 485, -1, -1, -1, 489, 490, + 491, 492, -1, -1, -1, 496, -1, -1, -1, 500, + -1, 502, 503, 504, 505, 506, 507, -1, 509, 510, + 511, 512, 513, 514, -1, -1, -1, -1, -1, -1, + 521, 522, -1, 524, -1, -1, 527, -1, -1, -1, + 531, 532, 533, -1, -1, -1, 537, 538, 539, 540, + 541, -1, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, -1, -1, 560, + 561, 562, 563, -1, 565, 566, 567, -1, 569, 570, + 571, 572, -1, -1, -1, -1, -1, 578, 579, 580, + -1, 582, 583, 584, 585, 586, 587, 588, 589, 590, + 591, 592, 593, -1, 595, 596, -1, -1, 599, -1, + -1, 602, -1, 604, -1, 606, 607, -1, -1, 610, + 611, 612, 613, 614, -1, -1, 617, 618, -1, 620, + 621, 622, 623, 624, 625, 626, 627, -1, -1, -1, + -1, -1, -1, 634, 635, -1, 637, 638, 639, -1, + -1, 642, -1, -1, -1, -1, -1, -1, -1, 650, + 651, -1, -1, -1, -1, 656, 657, -1, -1, 660, + 661, -1, -1, 664, 665, 5, -1, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, 37, 38, 39, + 40, 41, 42, 43, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, 56, 57, 58, 59, + -1, 61, 62, 63, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, 101, 102, 103, -1, -1, 106, 107, 108, 109, + 110, 111, -1, 113, 114, 115, -1, 117, 118, 119, + 120, 121, 122, -1, -1, -1, -1, 127, 128, 129, + -1, -1, 132, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, 179, + -1, 181, 182, 183, 184, 185, 186, 187, 188, -1, + 190, 191, 192, 193, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, 216, 217, 218, 219, + -1, 221, 222, 223, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, 235, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, 247, 248, 249, + 250, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, 273, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, 292, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + 340, 341, -1, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, 356, 357, -1, -1, + 360, 361, 362, 363, 364, 365, 366, 367, 368, -1, + 370, 371, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, 397, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, 454, 455, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, 538, 539, + 540, 541, -1, 543, 544, 545, 546, 547, 548, 549, + 550, 551, 552, 553, 554, 555, 556, 557, -1, -1, + 560, 561, 562, 563, -1, 565, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + 610, 611, 612, 613, 614, -1, -1, 617, 618, -1, + 620, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, -1, 642, -1, -1, -1, -1, -1, -1, -1, + 650, 651, -1, -1, -1, -1, 656, 657, -1, -1, + 660, 661, -1, -1, 664, 665, 5, -1, 7, 8, + 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, + 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, 34, -1, -1, 37, 38, + 39, 40, 41, 42, 43, -1, 45, 46, 47, -1, + 49, -1, 51, 52, -1, -1, 55, 56, 57, 58, + 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, + 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, + 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, + -1, 100, 101, 102, 103, -1, -1, 106, 107, 108, + 109, 110, 111, -1, 113, 114, 115, -1, 117, 118, + 119, 120, 121, 122, -1, -1, -1, -1, 127, 128, + 129, -1, -1, 132, 133, -1, 135, -1, -1, -1, + -1, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, -1, 151, -1, -1, 154, 155, 156, -1, -1, + -1, 160, -1, 162, 163, -1, 165, 166, 167, -1, + 169, 170, -1, 172, 173, 174, 175, 176, 177, 178, + 179, -1, 181, 182, 183, 184, 185, 186, 187, 188, + -1, 190, 191, 192, 193, -1, 195, -1, -1, -1, + 199, 200, -1, 202, -1, 204, -1, 206, 207, 208, + 209, 210, 211, 212, -1, 214, -1, 216, 217, 218, + 219, -1, 221, 222, 223, -1, 225, 226, -1, -1, + -1, 230, 231, 232, 233, 234, 235, -1, -1, 238, + 239, 240, -1, -1, 243, -1, -1, -1, 247, 248, + 249, 250, -1, -1, 253, -1, 255, 256, -1, 258, + 259, -1, -1, -1, 263, -1, -1, 266, 267, 268, + -1, -1, 271, -1, 273, 274, 275, -1, -1, -1, + -1, -1, 281, 282, -1, 284, -1, 286, -1, 288, + 289, -1, -1, 292, -1, -1, -1, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, -1, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, -1, -1, -1, + -1, 330, 331, 332, 333, 334, 335, -1, -1, 338, + 339, 340, 341, -1, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, -1, 356, 357, -1, + -1, 360, 361, 362, 363, 364, 365, 366, 367, 368, + -1, 370, 371, 372, -1, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, -1, -1, -1, -1, + -1, -1, -1, -1, 393, 394, 395, -1, 397, 398, + -1, 400, -1, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, -1, 414, 415, 416, -1, 418, + -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, + -1, -1, 431, -1, -1, -1, 435, 436, 437, 438, + 439, -1, -1, 442, 443, 444, 445, 446, -1, 448, + 449, -1, 451, 452, 453, 454, 455, 456, -1, 458, + -1, 460, 461, -1, 463, 464, -1, 466, -1, 468, + -1, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, -1, 484, 485, -1, -1, -1, + 489, 490, 491, 492, -1, -1, -1, 496, -1, -1, + -1, 500, -1, 502, 503, 504, 505, 506, 507, -1, + 509, 510, 511, 512, 513, 514, -1, -1, -1, -1, + -1, -1, 521, 522, -1, 524, -1, -1, 527, -1, + -1, -1, 531, 532, 533, -1, -1, -1, 537, 538, + 539, 540, 541, -1, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, -1, + -1, 560, 561, 562, 563, -1, 565, 566, 567, -1, + 569, 570, 571, 572, -1, -1, -1, -1, -1, 578, + 579, 580, -1, 582, 583, 584, 585, 586, 587, 588, + 589, 590, 591, 592, 593, -1, 595, 596, -1, -1, + 599, -1, -1, 602, -1, 604, -1, 606, 607, -1, + -1, 610, 611, 612, 613, 614, -1, -1, 617, 618, + -1, 620, 621, 622, 623, 624, 625, 626, 627, -1, + -1, -1, -1, -1, -1, 634, 635, -1, 637, 638, + 639, -1, -1, 642, -1, -1, -1, -1, -1, -1, + -1, 650, 651, -1, -1, -1, -1, 656, 657, -1, + -1, 660, 661, -1, -1, 664, 665, 5, -1, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, 37, + 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, 56, 57, + 58, 59, -1, 61, 62, 63, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, 101, 102, 103, -1, -1, 106, 107, + 108, 109, 110, 111, -1, 113, 114, 115, -1, 117, + 118, 119, 120, 121, 122, -1, -1, -1, -1, 127, + 128, 129, -1, -1, 132, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, 179, -1, 181, 182, 183, 184, 185, 186, 187, + 188, -1, 190, 191, 192, 193, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, 216, 217, + 218, 219, -1, 221, 222, 223, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, 235, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, 247, + 248, 249, 250, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, 273, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, 292, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, 340, 341, -1, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, 356, 357, + -1, -1, 360, 361, 362, 363, 364, -1, 366, 367, + 368, -1, 370, 371, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, 397, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, 454, 455, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + 538, 539, 540, 541, -1, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + -1, -1, 560, 561, 562, 563, -1, 565, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, 582, 583, 584, 585, 586, 587, + 588, 589, 590, 591, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, 610, 611, 612, 613, 614, -1, -1, 617, + 618, -1, 620, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, -1, 642, -1, -1, -1, -1, -1, + -1, -1, 650, 651, -1, -1, -1, -1, 656, 657, + -1, -1, 660, 661, -1, -1, 664, 665, 5, -1, + 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, + -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + 37, 38, 39, 40, 41, 42, 43, -1, 45, 46, + 47, -1, 49, -1, 51, 52, -1, -1, 55, 56, + 57, 58, 59, -1, 61, 62, 63, 64, 65, -1, + 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, + 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, + 97, 98, -1, 100, 101, 102, 103, -1, -1, 106, + 107, 108, 109, 110, 111, -1, 113, 114, 115, -1, + 117, 118, 119, 120, 121, 122, -1, -1, -1, -1, + 127, 128, 129, -1, -1, 132, 133, -1, 135, -1, + -1, -1, -1, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, -1, 151, -1, -1, 154, 155, 156, + -1, -1, -1, 160, -1, 162, 163, -1, 165, 166, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, 179, -1, 181, 182, 183, 184, 185, 186, + 187, 188, -1, 190, 191, 192, 193, -1, 195, -1, + -1, -1, 199, 200, -1, 202, -1, 204, -1, 206, + 207, 208, 209, 210, 211, 212, -1, 214, -1, 216, + 217, 218, 219, -1, 221, 222, 223, -1, 225, 226, + -1, -1, -1, 230, 231, 232, 233, 234, 235, -1, + -1, 238, 239, 240, -1, -1, 243, -1, -1, -1, + 247, 248, 249, 250, -1, -1, 253, -1, 255, 256, + -1, 258, 259, -1, -1, -1, 263, -1, -1, 266, + 267, 268, -1, -1, 271, -1, 273, 274, 275, -1, + -1, -1, -1, -1, 281, 282, -1, 284, -1, 286, + -1, 288, 289, -1, -1, 292, -1, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, -1, + -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, + -1, 338, 339, 340, 341, -1, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, -1, 356, + 357, -1, -1, 360, 361, 362, 363, 364, -1, 366, + 367, 368, -1, 370, 371, 372, -1, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, -1, -1, + -1, -1, -1, -1, -1, -1, 393, 394, 395, -1, + 397, 398, -1, 400, -1, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, -1, 414, 415, 416, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, -1, -1, -1, 435, 436, + 437, 438, 439, -1, -1, 442, 443, 444, 445, 446, + -1, 448, 449, -1, 451, 452, 453, 454, 455, 456, + -1, 458, -1, 460, 461, -1, 463, 464, -1, 466, + -1, 468, -1, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, -1, 484, 485, -1, + -1, -1, 489, 490, 491, 492, -1, -1, -1, 496, + -1, -1, -1, 500, -1, 502, 503, 504, 505, 506, + 507, -1, 509, 510, 511, 512, 513, 514, -1, -1, + -1, -1, -1, -1, 521, 522, -1, 524, -1, -1, + 527, -1, -1, -1, 531, 532, 533, -1, -1, -1, + 537, 538, 539, 540, 541, -1, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, -1, -1, 560, 561, 562, 563, -1, 565, 566, + 567, -1, 569, 570, 571, 572, -1, -1, -1, -1, + -1, 578, 579, 580, -1, 582, 583, 584, 585, 586, + 587, 588, 589, 590, 591, 592, 593, -1, 595, 596, + -1, -1, 599, -1, -1, 602, -1, 604, -1, 606, + 607, -1, -1, 610, 611, 612, 613, 614, -1, -1, + 617, 618, -1, 620, 621, 622, 623, 624, 625, 626, + 627, -1, -1, -1, -1, -1, -1, 634, 635, -1, + 637, 638, 639, -1, -1, 642, -1, -1, -1, -1, + -1, -1, -1, 650, 651, -1, -1, -1, -1, 656, + 657, -1, -1, 660, 661, -1, -1, 664, 665, 5, + -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, 37, 38, -1, -1, -1, 42, -1, -1, 45, + -1, 37, 38, 39, 40, 41, 42, 43, -1, 45, + 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, + 56, 57, 58, 59, -1, 61, 62, 63, 64, 65, + -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, + 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, + 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, + 96, 97, 98, -1, 100, 101, 102, 103, -1, -1, + 106, 107, 108, 109, 110, 111, -1, 113, 114, 115, + -1, 117, 118, 119, 120, 121, 122, -1, -1, -1, + -1, 127, 128, 129, -1, -1, 132, 133, -1, 135, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, 179, -1, 181, 182, 183, 184, 185, + 186, 187, 188, -1, 190, 191, 192, 193, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + 216, 217, 218, 219, -1, 221, 222, 223, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, 235, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, 247, 248, 249, 250, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, 273, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, 292, -1, -1, -1, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, 340, 341, -1, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + 356, 357, -1, -1, 360, 361, 362, 363, 364, -1, + 366, 367, 368, -1, 370, 371, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, 397, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, 454, 455, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, 538, 539, 540, 541, -1, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, -1, -1, 560, 561, 562, 563, -1, 565, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, 610, 611, 612, 613, 614, -1, + -1, 617, 618, -1, 620, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, -1, 642, -1, -1, -1, + -1, -1, -1, -1, 650, 651, -1, -1, -1, -1, + 656, 657, -1, -1, 660, 661, -1, -1, 664, 665, + 5, -1, 7, 8, 9, 10, 11, 12, -1, -1, + 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, + -1, -1, 37, 38, 39, 40, 41, 42, 43, -1, + 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, + 55, 56, 57, 58, 59, -1, 61, 62, 63, 64, + 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, + 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, + 95, 96, 97, 98, -1, 100, 101, 102, 103, -1, + -1, 106, 107, 108, 109, 110, 111, -1, 113, 114, + 115, -1, 117, 118, 119, 120, 121, 122, -1, -1, + -1, -1, 127, 128, 129, -1, -1, 132, 133, -1, + 135, -1, -1, -1, -1, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, -1, 151, -1, -1, 154, + 155, 156, -1, -1, -1, 160, -1, 162, 163, -1, + 165, 166, 167, -1, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, 179, -1, 181, 182, 183, 184, + 185, 186, 187, 188, -1, 190, 191, 192, 193, -1, + 195, -1, -1, -1, 199, 200, -1, 202, -1, 204, + -1, 206, 207, 208, 209, 210, 211, 212, -1, 214, + -1, 216, 217, 218, 219, -1, 221, 222, 223, -1, + 225, 226, -1, -1, -1, 230, 231, 232, 233, 234, + 235, -1, -1, 238, 239, 240, -1, -1, 243, -1, + -1, -1, 247, 248, 249, 250, -1, -1, 253, -1, + 255, 256, -1, 258, 259, -1, -1, -1, 263, -1, + -1, 266, 267, 268, -1, -1, 271, -1, 273, 274, + 275, -1, -1, -1, -1, -1, 281, 282, -1, 284, + -1, 286, -1, 288, 289, -1, -1, 292, -1, -1, + -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, -1, -1, -1, -1, 330, 331, 332, 333, 334, + 335, -1, -1, 338, 339, 340, 341, -1, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, -1, -1, 360, 361, 362, 363, 364, + -1, 366, 367, 368, -1, 370, 371, 372, -1, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + -1, -1, -1, -1, -1, -1, -1, -1, 393, 394, + 395, -1, 397, 398, -1, 400, -1, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, -1, 414, + 415, 416, -1, 418, -1, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, -1, -1, -1, + 435, 436, 437, 438, 439, -1, -1, 442, 443, 444, + 445, 446, -1, 448, 449, -1, 451, 452, 453, 454, + 455, 456, -1, 458, -1, 460, 461, -1, 463, 464, + -1, 466, -1, 468, -1, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, -1, 484, + 485, -1, -1, -1, 489, 490, 491, 492, -1, -1, + -1, 496, -1, -1, -1, 500, -1, 502, 503, 504, + 505, 506, 507, -1, 509, 510, 511, 512, 513, 514, + -1, -1, -1, -1, -1, -1, 521, 522, -1, 524, + -1, -1, 527, -1, -1, -1, 531, 532, 533, -1, + -1, -1, 537, 538, 539, 540, 541, -1, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, -1, -1, 560, 561, 562, 563, -1, + 565, 566, 567, -1, 569, 570, 571, 572, -1, -1, + -1, -1, -1, 578, 579, 580, -1, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, -1, + 595, 596, -1, -1, 599, -1, -1, 602, -1, 604, + -1, 606, 607, -1, -1, 610, 611, 612, 613, 614, + -1, -1, 617, 618, -1, 620, 621, 622, 623, 624, + 625, 626, 627, -1, -1, -1, -1, -1, -1, 634, + 635, -1, 637, 638, 639, -1, -1, 642, -1, -1, + -1, -1, -1, -1, -1, 650, 651, -1, -1, -1, + -1, 656, 657, -1, -1, 660, 661, -1, -1, 664, + 665, 5, -1, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, 39, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, 129, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, 186, 187, 188, -1, 190, 191, 192, 193, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, 222, 223, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, 292, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, 356, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, 370, 371, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, 565, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, -1, 642, -1, + -1, -1, -1, -1, -1, 5, -1, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + 664, 665, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, 93, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, 203, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, 241, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, 264, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, 277, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, 486, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, 515, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, -1, 642, -1, -1, -1, -1, 5, -1, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, 665, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, 203, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, 241, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, 264, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, 515, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, -1, 642, -1, -1, -1, -1, 5, + -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, + -1, -1, -1, 19, -1, -1, 22, 665, 24, 25, + 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, + -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, @@ -17550,123 +13614,189 @@ 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, 132, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, 275, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - 291, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, 370, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, 396, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, 587, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + 486, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, -1, 642, -1, -1, -1, + -1, 5, -1, 7, 8, 9, 10, 11, 12, -1, + -1, 15, 658, -1, -1, 19, -1, -1, 22, 665, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, -1, 642, -1, + -1, -1, -1, -1, -1, 5, -1, 7, 8, 9, + 10, 11, 12, -1, 658, 15, -1, -1, -1, 19, + 664, 665, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, -1, 642, -1, -1, -1, -1, -1, -1, 5, + -1, 7, 8, 9, 10, 11, 12, 657, -1, 15, + -1, -1, -1, 19, -1, 665, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, @@ -17675,125 +13805,127 @@ 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, 109, -1, 111, -1, 113, -1, -1, + 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, 275, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, 251, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, 13, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, 275, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, 564, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, -1, 642, -1, -1, -1, + -1, 5, -1, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, 665, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, -1, 642, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 652, 5, + -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, + -1, 665, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, @@ -17802,127 +13934,193 @@ 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, 110, 111, -1, 113, -1, -1, + 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, 275, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, 132, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, 275, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, 564, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, -1, 642, -1, -1, -1, + -1, -1, -1, 5, -1, 7, 8, 9, 10, 11, + 12, 657, -1, 15, -1, -1, -1, 19, -1, 665, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, -1, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, -1, + 642, -1, -1, -1, -1, -1, -1, 5, -1, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, 664, 665, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, -1, 642, -1, -1, -1, -1, 5, + -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, + -1, -1, -1, 19, -1, -1, 22, 665, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, 37, 38, -1, -1, -1, 42, -1, -1, 45, + -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, @@ -17932,248 +14130,1208 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, 275, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, 275, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, 564, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, 20, -1, 22, -1, 24, 25, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, -1, 642, -1, -1, -1, + -1, 5, -1, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, 665, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, -1, 642, -1, + -1, -1, -1, 5, -1, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, 665, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, -1, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, -1, + 642, -1, -1, -1, -1, 5, -1, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, 665, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, 63, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, 132, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, -1, 642, -1, -1, -1, 5, -1, 7, 8, + 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, + 19, -1, -1, 22, 664, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, + -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, + 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, + 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, + 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, + 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, + -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, + -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, + 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, + -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, + -1, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, -1, 151, -1, -1, 154, 155, 156, -1, -1, + -1, 160, -1, 162, 163, -1, 165, 166, 167, -1, + 169, 170, -1, 172, 173, 174, 175, 176, 177, 178, + -1, -1, 181, 182, 183, 184, -1, -1, 187, 188, + -1, 190, 191, 192, -1, -1, 195, -1, -1, -1, + 199, 200, -1, 202, -1, 204, -1, 206, 207, 208, + 209, 210, 211, 212, -1, 214, -1, -1, 217, 218, + 219, -1, 221, -1, -1, -1, 225, 226, -1, -1, + -1, 230, 231, 232, 233, 234, -1, -1, -1, 238, + 239, 240, -1, -1, 243, -1, -1, -1, -1, 248, + 249, -1, -1, -1, 253, -1, 255, 256, -1, 258, + 259, -1, -1, -1, 263, -1, -1, 266, 267, 268, + -1, -1, 271, -1, -1, 274, 275, 276, -1, -1, + -1, -1, 281, 282, -1, 284, -1, 286, -1, 288, + 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, -1, 313, 314, 315, 316, -1, 318, + 319, 320, 321, -1, 323, 324, 325, -1, -1, -1, + -1, 330, 331, 332, 333, 334, 335, -1, -1, 338, + 339, -1, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, 360, 361, 362, 363, -1, -1, -1, 367, 368, + -1, -1, -1, 372, -1, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, -1, -1, -1, -1, + -1, -1, -1, -1, 393, 394, 395, -1, -1, 398, + -1, 400, -1, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, 416, -1, 418, + -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, + -1, -1, 431, -1, -1, -1, 435, 436, 437, 438, + 439, -1, -1, 442, 443, 444, 445, 446, -1, 448, + 449, -1, 451, 452, 453, -1, -1, 456, -1, 458, + -1, 460, 461, -1, 463, 464, -1, 466, -1, 468, + -1, -1, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, -1, 484, 485, -1, -1, -1, + 489, 490, 491, 492, -1, -1, -1, 496, -1, -1, + -1, 500, -1, 502, 503, 504, 505, 506, 507, -1, + 509, 510, 511, 512, 513, 514, -1, -1, -1, -1, + -1, -1, 521, 522, -1, 524, -1, -1, 527, -1, + -1, -1, 531, 532, 533, -1, -1, -1, 537, -1, + -1, 540, 541, -1, 543, 544, 545, 546, 547, 548, + -1, -1, 551, 552, 553, 554, -1, 556, 557, -1, + -1, 560, 561, 562, 563, -1, 565, 566, 567, -1, + 569, 570, 571, 572, -1, -1, -1, -1, -1, 578, + 579, 580, -1, -1, -1, 584, 585, 586, 587, -1, + 589, 590, -1, 592, 593, -1, 595, 596, -1, -1, + 599, -1, -1, 602, -1, 604, -1, 606, 607, -1, + -1, -1, -1, -1, -1, 614, -1, -1, 617, -1, + -1, -1, 621, 622, 623, 624, 625, 626, 627, -1, + -1, -1, -1, -1, -1, 634, 635, -1, 637, 638, + 639, -1, -1, 642, -1, -1, -1, 5, -1, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, 664, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, 276, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, 565, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, -1, 642, -1, -1, -1, 5, -1, + 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, + -1, -1, 19, -1, -1, 22, 664, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, + 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, + -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, + 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, + 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, + 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, + -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, + 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, + 127, 128, -1, -1, -1, -1, 133, -1, 135, -1, + -1, -1, -1, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, -1, 151, -1, -1, 154, 155, 156, + -1, -1, -1, 160, -1, 162, 163, -1, 165, 166, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, -1, -1, 181, 182, 183, 184, -1, -1, + 187, 188, -1, 190, 191, 192, -1, -1, 195, -1, + -1, -1, 199, 200, -1, 202, -1, 204, -1, 206, + 207, 208, 209, 210, 211, 212, -1, 214, -1, -1, + 217, 218, 219, -1, 221, -1, -1, -1, 225, 226, + -1, -1, -1, 230, 231, 232, 233, 234, -1, -1, + -1, 238, 239, 240, -1, -1, 243, -1, -1, -1, + -1, 248, 249, -1, -1, -1, 253, -1, 255, 256, + -1, 258, 259, -1, -1, -1, 263, -1, -1, 266, + 267, 268, -1, -1, 271, -1, -1, 274, 275, 276, + -1, -1, -1, -1, 281, 282, -1, 284, -1, 286, + -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, + -1, 318, 319, 320, 321, -1, 323, 324, 325, -1, + -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, + -1, 338, 339, -1, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, -1, -1, + 357, -1, -1, 360, 361, 362, 363, -1, -1, -1, + 367, 368, -1, -1, -1, 372, -1, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, -1, -1, + -1, -1, -1, -1, -1, -1, 393, 394, 395, -1, + -1, 398, -1, 400, -1, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, 416, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, -1, -1, -1, 435, 436, + 437, 438, 439, -1, -1, 442, 443, 444, 445, 446, + -1, 448, 449, -1, 451, 452, 453, -1, -1, 456, + -1, 458, -1, 460, 461, -1, 463, 464, -1, 466, + -1, 468, -1, -1, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, -1, 484, 485, -1, + -1, -1, 489, 490, 491, 492, -1, -1, -1, 496, + -1, -1, -1, 500, -1, 502, 503, 504, 505, 506, + 507, -1, 509, 510, 511, 512, 513, 514, -1, -1, + -1, -1, -1, -1, 521, 522, -1, 524, -1, -1, + 527, -1, -1, -1, 531, 532, 533, -1, -1, -1, + 537, -1, -1, 540, 541, -1, 543, 544, 545, 546, + 547, 548, -1, -1, 551, 552, 553, 554, -1, 556, + 557, -1, -1, 560, 561, 562, 563, -1, 565, 566, + 567, -1, 569, 570, 571, 572, -1, -1, -1, -1, + -1, 578, 579, 580, -1, -1, -1, 584, 585, 586, + 587, -1, 589, 590, -1, 592, 593, -1, 595, 596, + -1, -1, 599, -1, -1, 602, -1, 604, -1, 606, + 607, -1, -1, -1, -1, -1, -1, 614, -1, -1, + 617, -1, -1, -1, 621, 622, 623, 624, 625, 626, + 627, -1, -1, -1, -1, -1, -1, 634, 635, -1, + 637, 638, 639, -1, -1, 642, -1, -1, -1, 5, + -1, 7, 8, 9, 10, 11, 12, -1, -1, 15, + -1, -1, -1, 19, -1, -1, 22, 664, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, - -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, + -1, -1, 58, 59, -1, 61, 62, 63, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, 127, 128, -1, -1, -1, 132, 133, -1, 135, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, -1, 642, -1, -1, -1, + 5, -1, 7, 8, 9, 10, 11, 12, -1, -1, + 15, -1, -1, -1, 19, -1, -1, 22, 664, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, + -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, + 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, + 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, + 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, + 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, + 95, 96, 97, 98, -1, 100, -1, -1, 103, -1, + -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, + -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, + -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, + 135, -1, -1, -1, -1, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, -1, 151, -1, -1, 154, + 155, 156, -1, -1, -1, 160, -1, 162, 163, -1, + 165, 166, 167, -1, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, -1, -1, 181, 182, 183, 184, + -1, -1, 187, 188, -1, 190, 191, 192, -1, -1, + 195, -1, -1, -1, 199, 200, -1, 202, -1, 204, + -1, 206, 207, 208, 209, 210, 211, 212, -1, 214, + -1, -1, 217, 218, 219, -1, 221, -1, -1, -1, + 225, 226, -1, -1, -1, 230, 231, 232, 233, 234, + -1, -1, -1, 238, 239, 240, -1, -1, 243, -1, + -1, -1, -1, 248, 249, -1, -1, -1, 253, -1, + 255, 256, -1, 258, 259, -1, -1, -1, 263, -1, + -1, 266, 267, 268, -1, -1, 271, -1, -1, 274, + 275, -1, -1, -1, -1, -1, 281, 282, -1, 284, + -1, 286, -1, 288, 289, -1, -1, -1, -1, -1, + -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, + 315, 316, -1, 318, 319, 320, 321, -1, 323, 324, + 325, -1, -1, -1, -1, 330, 331, 332, 333, 334, + 335, -1, -1, 338, 339, -1, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + -1, -1, 357, -1, -1, 360, 361, 362, 363, -1, + -1, -1, 367, 368, -1, -1, -1, 372, -1, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + -1, -1, -1, -1, -1, -1, -1, -1, 393, 394, + 395, -1, -1, 398, -1, 400, -1, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, + 415, 416, -1, 418, -1, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, -1, -1, -1, + 435, 436, 437, 438, 439, -1, -1, 442, 443, 444, + 445, 446, -1, 448, 449, -1, 451, 452, 453, -1, + -1, 456, -1, 458, -1, 460, 461, -1, 463, 464, + -1, 466, -1, 468, -1, -1, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, -1, 484, + 485, -1, -1, -1, 489, 490, 491, 492, -1, -1, + -1, 496, -1, -1, -1, 500, -1, 502, 503, 504, + 505, 506, 507, -1, 509, 510, 511, 512, 513, 514, + -1, -1, -1, -1, -1, -1, 521, 522, -1, 524, + -1, -1, 527, -1, -1, -1, 531, 532, 533, -1, + -1, -1, 537, -1, -1, 540, 541, -1, 543, 544, + 545, 546, 547, 548, -1, -1, 551, 552, 553, 554, + -1, 556, 557, -1, -1, 560, 561, 562, 563, -1, + -1, 566, 567, -1, 569, 570, 571, 572, -1, -1, + -1, -1, -1, 578, 579, 580, -1, -1, -1, 584, + 585, 586, 587, -1, 589, 590, -1, 592, 593, -1, + 595, 596, -1, -1, 599, -1, -1, 602, -1, 604, + -1, 606, 607, -1, -1, -1, -1, -1, -1, 614, + -1, -1, 617, -1, -1, -1, 621, 622, 623, 624, + 625, 626, 627, -1, -1, -1, -1, -1, -1, 634, + 635, -1, 637, 638, 639, -1, -1, 642, -1, -1, + -1, 5, -1, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, 664, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, -1, 642, -1, + -1, -1, 5, -1, 7, 8, 9, 10, 11, 12, + -1, -1, 15, -1, -1, -1, 19, -1, -1, -1, + 664, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, + -1, -1, 45, 46, 47, -1, 49, -1, -1, -1, + -1, -1, 55, 56, -1, 58, 59, -1, 61, -1, + -1, -1, -1, -1, 67, 68, 69, 70, 71, 72, + -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, + -1, 84, -1, 86, 87, 88, 89, -1, 91, 92, + -1, 94, 95, 96, -1, 98, -1, 100, -1, -1, + 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, + 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, + -1, -1, -1, -1, 127, -1, -1, -1, -1, -1, + 133, -1, 135, -1, -1, -1, -1, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, -1, -1, -1, + -1, 154, 155, 156, -1, -1, -1, 160, -1, -1, + 163, -1, 165, 166, 167, -1, 169, 170, -1, 172, + 173, 174, 175, 176, -1, -1, -1, -1, 181, 182, + 183, 184, -1, -1, 187, 188, 189, 190, 191, 192, + -1, -1, -1, -1, -1, -1, -1, 200, -1, 202, + -1, 204, -1, 206, 207, 208, 209, 210, -1, 212, + -1, 214, -1, -1, -1, 218, 219, -1, -1, -1, + -1, -1, -1, 226, -1, -1, -1, 230, 231, 232, + 233, 234, 235, -1, -1, 238, 239, 240, -1, -1, + 243, -1, -1, -1, -1, 248, -1, -1, -1, -1, + 253, -1, 255, 256, -1, 258, 259, 260, -1, -1, + 263, -1, -1, -1, 267, 268, -1, -1, 271, 272, + -1, 274, 275, -1, -1, -1, -1, -1, 281, 282, + -1, 284, -1, 286, -1, 288, 289, -1, -1, -1, + -1, 294, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, + 313, 314, 315, 316, -1, 318, 319, 320, 321, -1, + 323, 324, 325, -1, -1, -1, -1, 330, 331, 332, + 333, 334, 335, -1, -1, 338, 339, -1, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, -1, -1, 357, -1, -1, 360, 361, 362, + 363, -1, -1, -1, -1, 368, -1, -1, -1, 372, + -1, 374, 375, 376, -1, 378, 379, 380, 381, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 394, 395, -1, -1, -1, -1, 400, -1, 402, + 403, 404, 405, 406, 407, 408, 409, 410, -1, -1, + -1, -1, 415, 416, -1, 418, -1, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, -1, + -1, -1, 435, 436, 437, 438, 439, -1, -1, 442, + 443, 444, 445, 446, -1, 448, -1, -1, 451, -1, + 453, 454, -1, 456, -1, -1, -1, 460, -1, -1, + 463, 464, -1, 466, 467, 468, -1, -1, 471, -1, + 473, 474, 475, 476, 477, 478, 479, -1, 481, 482, + -1, 484, -1, -1, -1, -1, 489, 490, 491, -1, + -1, -1, -1, 496, -1, -1, -1, -1, -1, -1, + 503, -1, -1, 506, 507, -1, 509, -1, 511, -1, + 513, 514, -1, -1, -1, -1, -1, -1, 521, 522, + -1, 524, -1, -1, 527, -1, -1, -1, 531, -1, + 533, -1, -1, -1, 537, -1, -1, -1, 541, -1, + 543, 544, 545, 546, 547, 548, -1, -1, 551, 552, + 553, 554, -1, 556, 557, -1, -1, 560, 561, 562, + 563, -1, -1, 566, 567, -1, 569, 570, 571, 572, + -1, -1, -1, -1, -1, 578, 579, 580, -1, -1, + -1, -1, 585, 586, 587, -1, 589, 590, -1, 592, + 593, -1, -1, -1, -1, -1, 599, -1, -1, 602, + -1, -1, -1, 606, 607, -1, -1, -1, -1, -1, + -1, 614, -1, -1, 617, -1, -1, -1, 621, 622, + 623, 624, 625, 626, 627, -1, -1, 630, -1, -1, + -1, 634, -1, -1, 637, -1, 639, -1, 5, 642, + 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, + -1, -1, 19, -1, -1, 22, 659, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, + 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, + -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, + 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, + 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, + 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, + -1, 108, 109, -1, 111, -1, 113, -1, -1, -1, + 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, + 127, 128, -1, -1, -1, -1, 133, -1, 135, -1, + -1, -1, -1, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, -1, 151, -1, -1, 154, 155, 156, + -1, -1, -1, 160, -1, 162, 163, -1, 165, 166, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, -1, -1, 181, 182, 183, 184, -1, -1, + 187, 188, -1, 190, 191, 192, -1, -1, 195, -1, + -1, -1, 199, 200, -1, 202, -1, 204, -1, 206, + 207, 208, 209, 210, 211, 212, -1, 214, -1, -1, + 217, 218, 219, -1, 221, -1, -1, -1, 225, 226, + -1, -1, -1, 230, 231, 232, 233, 234, -1, -1, + -1, 238, 239, 240, -1, -1, 243, -1, -1, -1, + -1, 248, 249, -1, -1, -1, 253, -1, 255, 256, + -1, 258, 259, -1, -1, -1, 263, -1, -1, 266, + 267, 268, -1, -1, 271, -1, -1, 274, 275, 276, + -1, -1, -1, -1, 281, 282, -1, 284, -1, 286, + -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, + -1, 318, 319, 320, 321, -1, 323, 324, 325, -1, + -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, + -1, 338, 339, -1, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, -1, -1, + 357, -1, -1, 360, 361, 362, 363, -1, -1, -1, + 367, 368, -1, -1, -1, 372, -1, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, -1, -1, + -1, -1, -1, -1, -1, -1, 393, 394, 395, -1, + -1, 398, -1, 400, -1, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, 416, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, -1, -1, -1, 435, 436, + 437, 438, 439, -1, -1, 442, 443, 444, 445, 446, + -1, 448, 449, -1, 451, 452, 453, -1, -1, 456, + -1, 458, -1, 460, 461, -1, 463, 464, -1, 466, + -1, 468, -1, -1, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, -1, 484, 485, -1, + -1, -1, 489, 490, 491, 492, -1, -1, -1, 496, + -1, -1, -1, 500, -1, 502, 503, 504, 505, 506, + 507, -1, 509, 510, 511, 512, 513, 514, -1, -1, + -1, -1, -1, -1, 521, 522, -1, 524, -1, -1, + 527, -1, -1, -1, 531, 532, 533, -1, -1, -1, + 537, -1, -1, 540, 541, -1, 543, 544, 545, 546, + 547, 548, -1, -1, 551, 552, 553, 554, -1, 556, + 557, -1, -1, 560, 561, 562, 563, -1, 565, 566, + 567, -1, 569, 570, 571, 572, -1, -1, -1, -1, + -1, 578, 579, 580, -1, -1, -1, 584, 585, 586, + 587, -1, 589, 590, -1, 592, 593, -1, 595, 596, + -1, -1, 599, -1, -1, 602, -1, 604, -1, 606, + 607, -1, -1, -1, -1, -1, -1, 614, -1, -1, + 617, -1, -1, -1, 621, 622, 623, 624, 625, 626, + 627, -1, -1, -1, -1, -1, -1, 634, 635, -1, + 637, 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, + 657, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, 99, 100, + 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, 179, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, + -1, -1, 133, -1, 135, -1, -1, -1, -1, 140, + -1, 142, 143, 144, 145, 146, -1, -1, -1, -1, + 151, -1, -1, 154, 155, 156, -1, -1, -1, 160, + -1, 162, 163, -1, 165, 166, 167, -1, 169, 170, + -1, 172, 173, 174, 175, 176, 177, 178, -1, -1, + 181, 182, 183, 184, -1, -1, 187, 188, -1, 190, + 191, 192, -1, -1, 195, -1, -1, -1, 199, 200, + -1, 202, -1, 204, -1, 206, 207, 208, 209, 210, + 211, 212, -1, 214, -1, -1, 217, 218, 219, -1, + 221, -1, -1, -1, 225, 226, -1, -1, -1, 230, + 231, 232, 233, 234, -1, -1, -1, 238, 239, 240, + -1, -1, 243, -1, -1, -1, -1, 248, 249, -1, + -1, -1, 253, -1, 255, 256, -1, 258, 259, -1, + -1, -1, 263, -1, -1, 266, 267, 268, -1, -1, + 271, -1, -1, 274, 275, -1, -1, -1, -1, -1, + 281, 282, -1, 284, -1, 286, -1, 288, 289, -1, + -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, + 311, -1, 313, 314, 315, 316, -1, 318, 319, 320, + 321, -1, 323, 324, 325, -1, -1, -1, -1, 330, + 331, 332, 333, 334, 335, -1, -1, 338, 339, -1, + 341, -1, 343, -1, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, -1, -1, 357, -1, -1, 360, + 361, 362, 363, -1, -1, -1, 367, 368, -1, -1, + -1, 372, -1, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, -1, -1, -1, -1, -1, -1, + -1, -1, 393, 394, 395, -1, -1, 398, -1, 400, + -1, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, 414, 415, 416, -1, 418, -1, 420, + 421, 422, 423, 424, -1, 426, 427, 428, -1, -1, + 431, -1, -1, -1, 435, 436, 437, 438, 439, -1, + -1, 442, 443, 444, 445, 446, -1, 448, 449, -1, + 451, 452, 453, -1, -1, 456, -1, 458, -1, 460, + 461, -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 481, 482, -1, 484, 485, -1, -1, -1, 489, 490, + 491, 492, -1, -1, -1, 496, -1, -1, -1, 500, + -1, 502, 503, 504, 505, 506, 507, -1, 509, 510, + 511, 512, 513, 514, -1, -1, -1, -1, -1, -1, + 521, 522, -1, 524, -1, -1, 527, -1, -1, -1, + 531, 532, 533, -1, -1, -1, 537, -1, -1, 540, + 541, -1, 543, 544, 545, 546, 547, 548, -1, -1, + 551, 552, 553, 554, -1, 556, 557, -1, -1, 560, + 561, 562, 563, -1, -1, 566, 567, -1, 569, 570, + 571, 572, -1, -1, -1, -1, -1, 578, 579, 580, + -1, -1, -1, 584, 585, 586, 587, -1, 589, 590, + -1, 592, 593, -1, 595, 596, -1, -1, 599, -1, + -1, 602, -1, 604, -1, 606, 607, -1, -1, -1, + -1, -1, -1, 614, -1, -1, 617, -1, -1, -1, + 621, 622, 623, 624, 625, 626, 627, -1, -1, -1, + -1, -1, -1, 634, 635, -1, 637, 638, 639, -1, + 5, 642, 7, 8, 9, 10, 11, 12, -1, -1, + 15, 652, -1, -1, 19, -1, -1, 22, -1, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, + -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, + 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, + 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, + 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, + 75, 76, 77, 78, 79, 80, -1, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, -1, 94, + 95, 96, 97, 98, -1, 100, -1, -1, 103, -1, + -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, + -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, + -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, + 135, -1, -1, -1, -1, 140, -1, 142, 143, 144, + 145, 146, -1, -1, -1, -1, 151, -1, -1, 154, + 155, 156, -1, -1, -1, 160, -1, 162, 163, -1, + 165, 166, 167, -1, 169, 170, -1, 172, 173, 174, + 175, 176, 177, 178, -1, -1, 181, 182, 183, 184, + -1, -1, 187, 188, -1, 190, 191, 192, -1, -1, + 195, -1, -1, -1, 199, 200, -1, 202, -1, 204, + -1, 206, 207, 208, 209, 210, 211, 212, -1, 214, + -1, -1, 217, 218, 219, -1, 221, -1, -1, -1, + 225, 226, -1, -1, -1, 230, 231, 232, 233, 234, + -1, -1, -1, 238, 239, 240, -1, -1, 243, -1, + -1, -1, -1, 248, 249, -1, -1, -1, 253, -1, + 255, 256, -1, 258, 259, -1, -1, -1, 263, -1, + -1, 266, 267, 268, -1, -1, 271, -1, -1, 274, + 275, -1, -1, -1, -1, -1, 281, 282, -1, 284, + -1, 286, -1, 288, 289, -1, -1, -1, -1, -1, + -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, -1, 313, 314, + 315, 316, -1, 318, 319, 320, 321, -1, 323, 324, + 325, -1, -1, -1, -1, 330, 331, 332, 333, 334, + 335, -1, -1, 338, 339, -1, 341, -1, 343, -1, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + -1, -1, 357, -1, -1, 360, 361, 362, 363, -1, + -1, -1, 367, 368, -1, -1, -1, 372, -1, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + -1, -1, -1, -1, -1, -1, -1, -1, 393, 394, + 395, -1, -1, 398, -1, 400, -1, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, + 415, 416, -1, 418, -1, 420, 421, 422, 423, 424, + -1, 426, 427, 428, -1, -1, 431, -1, -1, -1, + 435, 436, 437, 438, 439, -1, -1, 442, 443, 444, + 445, 446, -1, 448, 449, -1, 451, 452, 453, -1, + -1, 456, -1, 458, -1, 460, 461, -1, 463, 464, + -1, 466, -1, 468, -1, -1, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, -1, 484, + 485, -1, -1, -1, 489, 490, 491, 492, -1, -1, + -1, 496, -1, -1, -1, 500, -1, 502, 503, 504, + 505, 506, 507, -1, 509, 510, 511, 512, 513, 514, + -1, -1, -1, -1, -1, -1, 521, 522, -1, 524, + -1, -1, 527, -1, -1, -1, 531, 532, 533, -1, + -1, -1, 537, -1, -1, 540, 541, -1, 543, 544, + 545, 546, 547, 548, -1, -1, 551, 552, 553, 554, + -1, 556, 557, -1, -1, 560, 561, 562, 563, -1, + -1, 566, 567, -1, 569, 570, 571, 572, -1, -1, + -1, -1, -1, 578, 579, 580, -1, -1, -1, 584, + 585, 586, 587, -1, 589, 590, -1, 592, 593, -1, + 595, 596, -1, -1, 599, -1, -1, 602, -1, 604, + -1, 606, 607, -1, -1, -1, -1, -1, -1, 614, + -1, -1, 617, -1, -1, -1, 621, 622, 623, 624, + 625, 626, 627, -1, -1, -1, -1, -1, -1, 634, + 635, -1, 637, 638, 639, -1, 5, 642, 7, 8, + 9, 10, 11, 12, -1, -1, 15, 652, -1, -1, + 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, + -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, + 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, + 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, + 69, 70, 71, 72, -1, 74, 75, 76, 77, 78, + 79, 80, -1, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, -1, 94, 95, 96, 97, 98, + -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, + -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, + 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, + -1, -1, -1, -1, 133, -1, 135, -1, -1, -1, + -1, 140, -1, 142, 143, 144, 145, 146, -1, -1, + -1, -1, 151, -1, -1, 154, 155, 156, -1, -1, + -1, 160, -1, 162, 163, -1, 165, 166, 167, -1, + 169, 170, -1, 172, 173, 174, 175, 176, 177, 178, + -1, -1, 181, 182, 183, 184, -1, -1, 187, 188, + -1, 190, 191, 192, -1, -1, 195, -1, -1, -1, + 199, 200, -1, 202, -1, 204, -1, 206, 207, 208, + 209, 210, 211, 212, -1, 214, -1, -1, 217, 218, + 219, -1, 221, -1, -1, -1, 225, 226, -1, -1, + -1, 230, 231, 232, 233, 234, -1, -1, -1, 238, + 239, 240, -1, -1, 243, -1, -1, -1, -1, 248, + 249, -1, -1, -1, 253, -1, 255, 256, -1, 258, + 259, -1, -1, -1, 263, -1, -1, 266, 267, 268, + -1, -1, 271, -1, -1, 274, 275, -1, -1, -1, + -1, -1, 281, 282, -1, 284, -1, 286, -1, 288, + 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, -1, 313, 314, 315, 316, -1, 318, + 319, 320, 321, -1, 323, 324, 325, -1, -1, -1, + -1, 330, 331, 332, 333, 334, 335, -1, -1, 338, + 339, -1, 341, -1, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, 360, 361, 362, 363, -1, -1, -1, 367, 368, + -1, -1, -1, 372, -1, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, -1, -1, -1, -1, + -1, -1, -1, -1, 393, 394, 395, -1, -1, 398, + -1, 400, -1, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, 416, -1, 418, + -1, 420, 421, 422, 423, 424, -1, 426, 427, 428, + -1, -1, 431, -1, -1, -1, 435, 436, 437, 438, + 439, -1, -1, 442, 443, 444, 445, 446, -1, 448, + 449, -1, 451, 452, 453, -1, -1, 456, -1, 458, + -1, 460, 461, -1, 463, 464, -1, 466, -1, 468, + -1, -1, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, -1, 484, 485, -1, -1, -1, + 489, 490, 491, 492, -1, -1, -1, 496, -1, -1, + -1, 500, -1, 502, 503, 504, 505, 506, 507, -1, + 509, 510, 511, 512, 513, 514, -1, -1, -1, -1, + -1, -1, 521, 522, -1, 524, -1, -1, 527, -1, + -1, -1, 531, 532, 533, -1, -1, -1, 537, -1, + -1, 540, 541, -1, 543, 544, 545, 546, 547, 548, + -1, -1, 551, 552, 553, 554, -1, 556, 557, -1, + -1, 560, 561, 562, 563, -1, -1, 566, 567, -1, + 569, 570, 571, 572, -1, -1, -1, -1, -1, 578, + 579, 580, -1, -1, -1, 584, 585, 586, 587, -1, + 589, 590, -1, 592, 593, -1, 595, 596, -1, -1, + 599, -1, -1, 602, -1, 604, -1, 606, 607, -1, + -1, -1, -1, -1, -1, 614, -1, -1, 617, -1, + -1, -1, 621, 622, 623, 624, 625, 626, 627, -1, + -1, -1, -1, -1, -1, 634, 635, -1, 637, 638, + 639, -1, 5, 642, 7, 8, 9, 10, 11, 12, + -1, -1, 15, 652, -1, -1, 19, -1, -1, 22, + -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, + -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, + -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, + -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, + -1, 74, 75, 76, 77, 78, 79, 80, -1, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + -1, 94, 95, 96, 97, 98, -1, 100, -1, -1, + 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, + 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, + -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, + 133, -1, 135, -1, -1, -1, -1, 140, -1, 142, + 143, 144, 145, 146, -1, -1, -1, -1, 151, -1, + -1, 154, 155, 156, -1, -1, -1, 160, -1, 162, + 163, -1, 165, 166, 167, -1, 169, 170, -1, 172, + 173, 174, 175, 176, 177, 178, -1, -1, 181, 182, + 183, 184, -1, -1, 187, 188, -1, 190, 191, 192, + -1, -1, 195, -1, -1, -1, 199, 200, -1, 202, + -1, 204, -1, 206, 207, 208, 209, 210, 211, 212, + -1, 214, -1, -1, 217, 218, 219, -1, 221, -1, + -1, -1, 225, 226, -1, -1, -1, 230, 231, 232, + 233, 234, -1, -1, -1, 238, 239, 240, -1, -1, + 243, -1, -1, -1, -1, 248, 249, -1, -1, -1, + 253, -1, 255, 256, -1, 258, 259, -1, -1, -1, + 263, -1, -1, 266, 267, 268, -1, -1, 271, -1, + -1, 274, 275, -1, -1, -1, -1, -1, 281, 282, + -1, 284, -1, 286, -1, 288, 289, -1, -1, -1, + -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, -1, + 313, 314, 315, 316, -1, 318, 319, 320, 321, -1, + 323, 324, 325, -1, -1, -1, -1, 330, 331, 332, + 333, 334, 335, -1, -1, 338, 339, -1, 341, -1, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, -1, -1, 357, -1, -1, 360, 361, 362, + 363, -1, -1, -1, 367, 368, -1, -1, -1, 372, + -1, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, -1, -1, -1, -1, -1, -1, -1, -1, + 393, 394, 395, -1, -1, 398, -1, 400, -1, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, 414, 415, 416, -1, 418, -1, 420, 421, 422, + 423, 424, -1, 426, 427, 428, -1, -1, 431, -1, + -1, -1, 435, 436, 437, 438, 439, -1, -1, 442, + 443, 444, 445, 446, -1, 448, 449, -1, 451, 452, + 453, -1, -1, 456, -1, 458, -1, 460, 461, -1, + 463, 464, -1, 466, -1, 468, -1, -1, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + -1, 484, 485, -1, -1, -1, 489, 490, 491, 492, + -1, -1, -1, 496, -1, -1, -1, 500, -1, 502, + 503, 504, 505, 506, 507, -1, 509, 510, 511, 512, + 513, 514, -1, -1, -1, -1, -1, -1, 521, 522, + -1, 524, -1, -1, 527, -1, -1, -1, 531, 532, + 533, -1, -1, -1, 537, -1, -1, 540, 541, -1, + 543, 544, 545, 546, 547, 548, -1, -1, 551, 552, + 553, 554, -1, 556, 557, -1, -1, 560, 561, 562, + 563, -1, -1, 566, 567, -1, 569, 570, 571, 572, + -1, -1, -1, -1, -1, 578, 579, 580, -1, -1, + -1, 584, 585, 586, 587, -1, 589, 590, -1, 592, + 593, -1, 595, 596, -1, -1, 599, -1, -1, 602, + -1, 604, -1, 606, 607, -1, -1, -1, -1, -1, + -1, 614, -1, -1, 617, -1, -1, -1, 621, 622, + 623, 624, 625, 626, 627, -1, -1, -1, -1, -1, + -1, 634, 635, -1, 637, 638, 639, -1, 5, 642, + 7, 8, 9, 10, 11, 12, -1, -1, 15, 652, + -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + 37, 38, -1, -1, -1, 42, -1, -1, 45, 46, + 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, + -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, + 67, 68, 69, 70, 71, 72, -1, 74, 75, 76, + 77, 78, 79, 80, -1, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, -1, 94, 95, 96, + 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, + -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, + 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, + 127, 128, -1, -1, -1, 132, 133, -1, 135, -1, + -1, -1, -1, 140, -1, 142, 143, 144, 145, 146, + -1, -1, -1, -1, 151, -1, -1, 154, 155, 156, + -1, -1, -1, 160, -1, 162, 163, -1, 165, 166, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, 178, -1, -1, 181, 182, 183, 184, -1, -1, + 187, 188, -1, 190, 191, 192, -1, -1, 195, -1, + -1, -1, 199, 200, -1, 202, -1, 204, -1, 206, + 207, 208, 209, 210, 211, 212, -1, 214, -1, -1, + 217, 218, 219, -1, 221, -1, -1, -1, 225, 226, + -1, -1, -1, 230, 231, 232, 233, 234, -1, -1, + -1, 238, 239, 240, -1, -1, 243, -1, -1, -1, + -1, 248, 249, -1, -1, -1, 253, -1, 255, 256, + -1, 258, 259, -1, -1, -1, 263, -1, -1, 266, + 267, 268, -1, -1, 271, -1, -1, 274, 275, 276, + -1, -1, -1, -1, 281, 282, -1, 284, -1, 286, + -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, -1, 313, 314, 315, 316, + -1, 318, 319, 320, 321, -1, 323, 324, 325, -1, + -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, + -1, 338, 339, -1, 341, -1, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, -1, -1, + 357, -1, -1, 360, 361, 362, 363, -1, -1, -1, + 367, 368, -1, -1, -1, 372, -1, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, -1, -1, + -1, -1, -1, -1, -1, -1, 393, 394, 395, -1, + -1, 398, -1, 400, -1, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, 416, + -1, 418, -1, 420, 421, 422, 423, 424, -1, 426, + 427, 428, -1, -1, 431, -1, -1, -1, 435, 436, + 437, 438, 439, -1, -1, 442, 443, 444, 445, 446, + -1, 448, 449, -1, 451, 452, 453, -1, -1, 456, + -1, 458, -1, 460, 461, -1, 463, 464, -1, 466, + -1, 468, -1, -1, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, -1, 484, 485, -1, + -1, -1, 489, 490, 491, 492, -1, -1, 495, 496, + -1, -1, -1, 500, -1, 502, 503, 504, 505, 506, + 507, -1, 509, 510, 511, 512, 513, 514, -1, -1, + -1, -1, -1, -1, 521, 522, -1, 524, -1, -1, + 527, -1, -1, -1, 531, 532, 533, -1, -1, -1, + 537, -1, -1, 540, 541, -1, 543, 544, 545, 546, + 547, 548, -1, -1, 551, 552, 553, 554, -1, 556, + 557, -1, -1, 560, 561, 562, 563, -1, 565, 566, + 567, -1, 569, 570, 571, 572, -1, -1, -1, -1, + -1, 578, 579, 580, -1, -1, -1, 584, 585, 586, + 587, -1, 589, 590, -1, 592, 593, -1, 595, 596, + -1, -1, 599, -1, -1, 602, -1, 604, -1, 606, + 607, -1, -1, -1, -1, -1, -1, 614, -1, -1, + 617, -1, -1, -1, 621, 622, 623, 624, 625, 626, + 627, -1, -1, -1, -1, -1, -1, 634, 635, -1, + 637, 638, 639, -1, -1, 642, -1, 5, 645, 7, + 8, 9, 10, 11, 12, 13, 14, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, 104, -1, 106, -1, + 108, -1, 110, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, -1, 133, -1, 135, 136, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, 152, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, 213, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, 241, -1, 243, -1, -1, -1, 247, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, 276, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, 287, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, 440, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, 486, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, 499, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, 565, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, 581, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, 603, 604, 605, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, 13, 14, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, 104, -1, 106, -1, 108, -1, 110, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + -1, 133, -1, 135, 136, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + 152, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, 213, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, 241, + -1, 243, -1, -1, -1, 247, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, 276, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, 287, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, 440, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, 486, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, 499, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, 565, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, 581, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, 603, 604, 605, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, @@ -18185,125 +15343,316 @@ 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, 127, 128, 129, -1, -1, -1, 133, -1, 135, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, 193, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, 222, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, 292, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, 517, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, 200, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, 364, 365, + -1, 367, 368, -1, -1, 371, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, 517, 518, 519, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, 588, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, 129, + -1, -1, 132, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, 193, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, 222, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, 292, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, 371, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, 565, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, 588, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, 129, -1, -1, 132, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, 193, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, 222, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, 292, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, 371, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, 565, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, 588, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, 129, -1, -1, 132, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, 193, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, 222, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, 292, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, 371, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, 565, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + 588, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, 109, 110, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, 276, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, 565, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, + -1, 37, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, @@ -18313,121 +15662,312 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, 132, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + 276, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, 132, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, 565, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, 39, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, 222, 223, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, 565, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, 292, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, 371, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, 397, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, 588, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, 292, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, 371, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, 397, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + 588, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, 37, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + 132, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, 276, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, 565, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, @@ -18439,125 +15979,316 @@ 96, 97, 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, 128, -1, -1, -1, 132, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, 292, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, 416, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, 371, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, 397, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, 588, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, 109, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, 276, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, 565, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, 13, + -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, 276, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, 565, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, 110, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, 276, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, 565, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + 132, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, 276, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, 565, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, + -1, 37, 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, @@ -18567,121 +16298,312 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + 276, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, 564, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, 132, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, 13, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, 565, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, 276, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, 565, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, 20, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, 565, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, 99, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, 180, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, 518, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, -1, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, @@ -18694,121 +16616,312 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, 201, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, 132, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, 132, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, 132, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, 132, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, 417, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, -1, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, @@ -18821,121 +16934,312 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - 416, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - 51, 52, -1, -1, 55, -1, -1, 58, 59, -1, - 61, 62, -1, 64, 65, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, 76, 77, 78, 79, 80, - -1, 82, 83, 84, 85, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, 97, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, 150, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, 176, 177, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, 194, -1, -1, -1, 198, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, 210, - 211, -1, 213, -1, -1, 216, 217, 218, -1, 220, - -1, -1, -1, 224, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, 248, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, 265, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, 366, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, 382, 383, -1, -1, -1, -1, -1, -1, -1, - -1, 392, 393, 394, -1, -1, 397, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - -1, -1, 413, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, 448, -1, 450, - 451, 452, -1, -1, 455, -1, 457, -1, 459, 460, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, -1, 483, 484, -1, -1, -1, 488, 489, 490, - 491, -1, -1, -1, 495, -1, -1, -1, 499, -1, - 501, 502, 503, 504, 505, 506, -1, 508, 509, 510, - 511, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - 531, 532, -1, -1, -1, 536, -1, -1, 539, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, 583, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, 594, 595, -1, -1, 598, -1, -1, - 601, -1, 603, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, 634, -1, 636, 637, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, 565, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, 132, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, 13, + -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, 51, 52, -1, + -1, 55, -1, -1, 58, 59, -1, 61, 62, -1, + 64, 65, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, 76, 77, 78, 79, 80, -1, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, 97, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, 151, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, 178, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, 195, -1, -1, -1, 199, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, 211, 212, -1, + 214, -1, -1, 217, 218, 219, -1, 221, -1, -1, + -1, 225, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, 249, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, 266, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, 367, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, 395, -1, -1, 398, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, 449, -1, 451, 452, 453, + -1, -1, 456, -1, 458, -1, 460, 461, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, -1, + 484, 485, -1, -1, -1, 489, 490, 491, 492, -1, + -1, -1, 496, -1, -1, -1, 500, -1, 502, 503, + 504, 505, 506, 507, -1, 509, 510, 511, 512, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, 532, 533, + -1, -1, -1, 537, -1, -1, 540, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + 584, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, 595, 596, -1, -1, 599, -1, -1, 602, -1, + 604, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, 635, -1, 637, 638, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, 51, 52, -1, -1, 55, -1, -1, + 58, 59, -1, 61, 62, -1, 64, 65, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, 76, 77, + 78, 79, 80, -1, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, 97, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + 128, -1, -1, -1, 132, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, 151, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + 178, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, -1, 190, 191, 192, -1, -1, 195, -1, -1, + -1, 199, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, 211, 212, -1, 214, -1, -1, 217, + 218, 219, -1, 221, -1, -1, -1, 225, 226, -1, + -1, -1, 230, 231, 232, 233, 234, -1, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, 249, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, -1, -1, -1, 263, -1, -1, 266, 267, + 268, -1, -1, 271, -1, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 367, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, 383, 384, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, 395, -1, -1, + 398, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, 449, -1, 451, 452, 453, -1, -1, 456, -1, + 458, -1, 460, 461, -1, 463, 464, -1, 466, -1, + 468, -1, -1, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, -1, 484, 485, -1, -1, + -1, 489, 490, 491, 492, -1, -1, -1, 496, -1, + -1, -1, 500, -1, 502, 503, 504, 505, 506, 507, + -1, 509, 510, 511, 512, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, 532, 533, -1, -1, -1, 537, + -1, -1, 540, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, 584, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, 595, 596, -1, + -1, 599, -1, -1, 602, -1, 604, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, -1, -1, -1, -1, 634, 635, -1, 637, + 638, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, 51, + 52, -1, -1, 55, -1, -1, 58, 59, -1, 61, + 62, -1, 64, 65, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, 76, 77, 78, 79, 80, -1, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, 97, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, 151, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, -1, 190, 191, + 192, -1, -1, 195, -1, -1, -1, 199, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, 211, + 212, -1, 214, -1, -1, 217, 218, 219, -1, 221, + -1, -1, -1, 225, 226, -1, -1, -1, 230, 231, + 232, 233, 234, -1, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, 249, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, -1, -1, + -1, 263, -1, -1, 266, 267, 268, -1, -1, 271, + -1, -1, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, 367, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, -1, -1, -1, -1, -1, -1, -1, + -1, 393, 394, 395, -1, -1, 398, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, 416, 417, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, 449, -1, 451, + 452, 453, -1, -1, 456, -1, 458, -1, 460, 461, + -1, 463, 464, -1, 466, -1, 468, -1, -1, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, -1, 484, 485, -1, -1, -1, 489, 490, 491, + 492, -1, -1, -1, 496, -1, -1, -1, 500, -1, + 502, 503, 504, 505, 506, 507, -1, 509, 510, 511, + 512, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + 532, 533, -1, -1, -1, 537, -1, -1, 540, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, -1, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, 584, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, 595, 596, -1, -1, 599, -1, -1, + 602, -1, 604, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, -1, -1, + -1, -1, 634, 635, -1, 637, 638, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, @@ -18948,502 +17252,312 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, 150, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - 176, 177, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, -1, 189, 190, 191, -1, -1, 194, -1, - -1, -1, 198, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, 210, 211, -1, 213, -1, -1, - 216, 217, 218, -1, 220, -1, -1, -1, 224, 225, - -1, -1, -1, 229, 230, 231, 232, 233, -1, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, 248, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, -1, -1, -1, 262, -1, -1, 265, - 266, 267, -1, -1, 270, -1, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, -1, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - 366, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, 382, 383, -1, -1, - -1, -1, -1, -1, -1, -1, 392, 393, 394, -1, - -1, 397, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, -1, -1, 413, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, 448, -1, 450, 451, 452, -1, -1, 455, - -1, 457, -1, 459, 460, -1, 462, 463, -1, 465, - -1, 467, -1, -1, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, -1, 483, 484, -1, - -1, -1, 488, 489, 490, 491, -1, -1, -1, 495, - -1, -1, -1, 499, -1, 501, 502, 503, 504, 505, - 506, -1, 508, 509, 510, 511, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, 531, 532, -1, -1, -1, - 536, -1, -1, 539, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, 583, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, 594, 595, - -1, -1, 598, -1, -1, 601, -1, 603, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, -1, -1, -1, -1, 633, 634, -1, - 636, 637, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, - 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - -1, -1, -1, -1, 55, 56, -1, 58, 59, -1, - 61, -1, -1, -1, -1, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, -1, -1, -1, -1, -1, - -1, 82, -1, 84, -1, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, -1, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, -1, - -1, -1, 153, 154, 155, -1, 157, 158, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, -1, -1, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, 188, 189, 190, - 191, -1, -1, -1, -1, -1, -1, -1, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, -1, - 211, -1, 213, -1, -1, -1, 217, 218, -1, -1, - -1, -1, -1, -1, 225, -1, -1, -1, 229, 230, - 231, 232, 233, 234, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, -1, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, 259, -1, - -1, 262, -1, -1, -1, 266, 267, -1, -1, 270, - 271, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, -1, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, -1, - -1, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, -1, -1, 450, - -1, 452, 453, -1, 455, -1, -1, -1, 459, -1, - -1, 462, 463, -1, 465, 466, 467, -1, -1, 470, - -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, - 481, -1, 483, -1, -1, -1, -1, 488, 489, 490, - -1, -1, -1, -1, 495, -1, -1, -1, -1, -1, - -1, 502, -1, -1, 505, 506, -1, 508, -1, 510, - -1, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - -1, 532, -1, -1, -1, 536, -1, -1, -1, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, -1, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, -1, -1, -1, -1, 598, -1, -1, - 601, -1, -1, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, 629, -1, - -1, -1, 633, -1, -1, 636, -1, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, -1, -1, 24, 25, - 26, 27, 28, 29, 30, 31, -1, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, -1, -1, -1, -1, 55, - 56, -1, 58, 59, -1, 61, -1, -1, -1, -1, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - -1, -1, -1, -1, -1, -1, 82, -1, 84, -1, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, -1, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, -1, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, -1, -1, -1, 153, 154, 155, - -1, 157, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - -1, -1, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, 188, 189, 190, 191, -1, -1, -1, -1, - -1, -1, -1, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, -1, 211, -1, 213, -1, -1, - -1, 217, 218, -1, -1, -1, -1, -1, -1, 225, - -1, -1, -1, 229, 230, 231, 232, 233, 234, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, -1, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, 259, -1, -1, 262, -1, -1, -1, - 266, 267, -1, -1, 270, 271, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - -1, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 393, 394, -1, - -1, -1, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, -1, -1, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, -1, -1, 450, -1, 452, 453, -1, 455, - -1, -1, -1, 459, -1, -1, 462, 463, -1, 465, - 466, 467, -1, -1, 470, -1, 472, 473, 474, 475, - 476, 477, 478, -1, 480, 481, -1, 483, -1, -1, - -1, -1, 488, 489, 490, -1, -1, -1, -1, 495, - -1, -1, -1, -1, -1, -1, 502, -1, -1, 505, - 506, -1, 508, -1, 510, -1, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, -1, 532, -1, -1, -1, - 536, -1, -1, -1, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, -1, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, -1, -1, - -1, -1, 598, -1, -1, 601, -1, -1, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, 627, -1, 629, -1, -1, -1, 633, -1, -1, - 636, -1, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, - 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - -1, -1, -1, -1, 55, 56, -1, 58, 59, -1, - 61, -1, -1, -1, -1, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, -1, -1, -1, -1, -1, - -1, 82, -1, 84, -1, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, -1, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, -1, - -1, -1, 153, 154, 155, -1, 157, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, -1, -1, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, 188, 189, 190, - 191, -1, -1, -1, -1, -1, -1, -1, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, -1, - 211, -1, 213, -1, -1, -1, 217, 218, -1, -1, - -1, -1, -1, -1, 225, -1, -1, -1, 229, 230, - 231, 232, 233, 234, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, -1, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, 259, -1, - -1, 262, -1, -1, -1, 266, 267, -1, -1, 270, - 271, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, -1, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, -1, - -1, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, -1, -1, 450, - -1, 452, 453, -1, 455, -1, -1, -1, 459, -1, - -1, 462, 463, -1, 465, 466, 467, -1, -1, 470, - -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, - 481, -1, 483, -1, -1, -1, -1, 488, 489, 490, - -1, -1, -1, -1, 495, -1, -1, -1, -1, -1, - -1, 502, -1, -1, 505, 506, -1, 508, -1, 510, - -1, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - -1, 532, -1, -1, -1, 536, -1, -1, -1, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, -1, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, -1, -1, -1, -1, 598, -1, -1, - 601, -1, -1, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, 627, -1, 629, -1, - -1, -1, 633, -1, -1, 636, -1, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, -1, -1, 24, 25, - 26, 27, 28, 29, 30, 31, -1, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, -1, -1, -1, -1, 55, - 56, -1, 58, 59, -1, 61, -1, -1, -1, -1, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - -1, -1, -1, -1, -1, -1, 82, -1, 84, -1, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, -1, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, -1, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, -1, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - -1, -1, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, 188, 189, 190, 191, -1, -1, -1, -1, - -1, -1, -1, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, -1, 211, -1, 213, -1, -1, - -1, 217, 218, -1, -1, -1, -1, -1, -1, 225, - -1, -1, -1, 229, 230, 231, 232, 233, 234, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, -1, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, 259, -1, -1, 262, -1, -1, -1, - 266, 267, -1, -1, 270, 271, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - -1, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 393, 394, -1, - -1, -1, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, -1, -1, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, -1, -1, 450, -1, 452, 453, -1, 455, - -1, -1, -1, 459, -1, -1, 462, 463, -1, 465, - 466, 467, -1, -1, 470, -1, 472, 473, 474, 475, - 476, 477, 478, -1, 480, 481, -1, 483, -1, -1, - -1, -1, 488, 489, 490, -1, -1, -1, -1, 495, - -1, -1, -1, -1, -1, -1, 502, -1, -1, 505, - 506, -1, 508, -1, 510, -1, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, -1, 532, -1, -1, -1, - 536, -1, -1, -1, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, -1, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, -1, -1, - -1, -1, 598, -1, -1, 601, -1, -1, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, 629, -1, -1, -1, 633, -1, -1, - 636, -1, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, - 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - -1, -1, -1, -1, 55, 56, -1, 58, 59, -1, - 61, -1, -1, -1, -1, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, -1, -1, -1, -1, -1, - -1, 82, -1, 84, -1, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, -1, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, -1, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, -1, -1, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, 188, 189, 190, - 191, -1, -1, -1, -1, -1, -1, -1, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, -1, - 211, -1, 213, -1, -1, -1, 217, 218, -1, -1, - -1, -1, -1, -1, 225, -1, -1, -1, 229, 230, - 231, 232, 233, 234, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, -1, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, 259, -1, - -1, 262, -1, -1, -1, 266, 267, -1, -1, 270, - 271, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, -1, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, -1, - -1, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, -1, -1, 450, - -1, 452, 453, -1, 455, -1, -1, -1, 459, -1, - -1, 462, 463, -1, 465, 466, 467, -1, -1, 470, - -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, - 481, -1, 483, -1, -1, -1, -1, 488, 489, 490, - -1, -1, -1, -1, 495, -1, -1, -1, -1, -1, - -1, 502, -1, -1, 505, 506, -1, 508, -1, 510, - -1, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - -1, 532, -1, -1, -1, 536, -1, -1, -1, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, -1, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, -1, -1, -1, -1, 598, -1, -1, - 601, -1, -1, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, 629, -1, - -1, -1, 633, -1, -1, 636, -1, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, -1, 19, -1, -1, -1, -1, 24, 25, - 26, 27, 28, 29, 30, 31, -1, -1, 34, -1, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - 46, 47, -1, 49, -1, -1, -1, -1, -1, 55, - 56, -1, 58, 59, -1, 61, -1, -1, -1, -1, - -1, 67, 68, 69, 70, 71, 72, -1, 74, 75, - -1, -1, -1, -1, -1, -1, 82, -1, 84, -1, - 86, 87, 88, 89, -1, 91, 92, -1, 94, 95, - 96, -1, 98, -1, 100, -1, -1, 103, -1, -1, - 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, - -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, - -1, 127, -1, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, -1, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - -1, -1, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, 188, 189, 190, 191, -1, -1, -1, -1, - -1, -1, -1, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, -1, 211, -1, 213, -1, -1, - -1, 217, 218, -1, -1, -1, -1, -1, -1, 225, - -1, -1, -1, 229, 230, 231, 232, 233, 234, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, -1, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, 259, -1, -1, 262, -1, -1, -1, - 266, 267, -1, -1, 270, 271, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, 151, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, 178, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, -1, 190, 191, 192, -1, -1, 195, + -1, -1, -1, 199, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, 211, 212, -1, 214, -1, + -1, 217, 218, 219, -1, 221, -1, -1, -1, 225, + 226, -1, -1, -1, 230, 231, 232, 233, 234, -1, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, 249, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, -1, -1, -1, 263, -1, -1, + 266, 267, 268, -1, -1, 271, -1, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - -1, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 393, 394, -1, - -1, -1, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, -1, -1, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, -1, -1, 450, -1, 452, 453, -1, 455, - -1, -1, -1, 459, -1, -1, 462, 463, -1, 465, - 466, 467, -1, -1, 470, -1, 472, 473, 474, 475, - 476, 477, 478, -1, 480, 481, -1, 483, -1, -1, - -1, -1, 488, 489, 490, -1, -1, -1, -1, 495, - -1, -1, -1, -1, -1, -1, 502, -1, -1, 505, - 506, -1, 508, -1, 510, -1, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, -1, 532, -1, -1, -1, - 536, -1, -1, -1, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, -1, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, -1, -1, - -1, -1, 598, -1, -1, 601, -1, -1, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, 629, -1, -1, -1, 633, -1, -1, - 636, -1, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, - 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - -1, -1, -1, -1, 55, 56, -1, 58, 59, -1, - 61, -1, -1, -1, -1, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, -1, -1, -1, -1, -1, - -1, 82, -1, 84, -1, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, -1, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, -1, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - 161, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, -1, -1, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, 188, 189, 190, - 191, -1, -1, -1, -1, -1, -1, -1, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, -1, - 211, -1, 213, -1, -1, -1, 217, 218, -1, -1, - -1, -1, -1, -1, 225, -1, -1, -1, 229, 230, - 231, 232, 233, 234, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, -1, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, 259, -1, - -1, 262, -1, -1, -1, 266, 267, -1, -1, 270, - 271, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, -1, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, -1, - -1, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, -1, -1, 450, - -1, 452, 453, -1, 455, -1, -1, -1, 459, -1, - -1, 462, 463, -1, 465, 466, 467, -1, -1, 470, - -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, - 481, -1, 483, -1, -1, -1, -1, 488, 489, 490, - -1, -1, -1, -1, 495, -1, -1, -1, -1, -1, - -1, 502, -1, -1, 505, 506, -1, 508, -1, 510, - -1, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - -1, 532, -1, -1, -1, 536, -1, -1, -1, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, -1, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, -1, -1, -1, -1, 598, -1, -1, - 601, -1, -1, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, 629, -1, - -1, -1, 633, -1, -1, 636, -1, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, 395, + -1, -1, 398, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 451, 452, 453, -1, -1, + 456, -1, 458, -1, 460, 461, -1, 463, 464, -1, + 466, -1, 468, -1, -1, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, -1, 484, 485, + -1, -1, -1, 489, 490, 491, 492, -1, -1, -1, + 496, -1, -1, -1, 500, -1, 502, 503, 504, 505, + 506, 507, -1, 509, 510, 511, 512, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, 532, 533, -1, -1, + -1, 537, -1, -1, 540, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, 584, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, 595, + 596, -1, -1, 599, -1, -1, 602, -1, 604, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, -1, -1, -1, -1, 634, 635, + -1, 637, 638, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, 51, 52, -1, -1, 55, -1, -1, 58, 59, + -1, 61, 62, -1, 64, 65, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, 76, 77, 78, 79, + 80, -1, 82, 83, 84, 85, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, 97, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, 128, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, 151, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, 178, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, -1, + 190, 191, 192, -1, -1, 195, -1, -1, -1, 199, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, 211, 212, -1, 214, -1, -1, 217, 218, 219, + -1, 221, -1, -1, -1, 225, 226, -1, -1, -1, + 230, 231, 232, 233, 234, -1, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, 249, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + -1, -1, -1, 263, -1, -1, 266, 267, 268, -1, + -1, 271, -1, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, 383, 384, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, 395, -1, -1, 398, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, 449, + -1, 451, 452, 453, -1, -1, 456, -1, 458, -1, + 460, 461, -1, 463, 464, -1, 466, -1, 468, -1, + -1, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, -1, 484, 485, -1, -1, -1, 489, + 490, 491, 492, -1, -1, -1, 496, -1, -1, -1, + 500, -1, 502, 503, 504, 505, 506, 507, -1, 509, + 510, 511, 512, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, 532, 533, -1, -1, -1, 537, -1, -1, + 540, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, 584, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, 595, 596, -1, -1, 599, + -1, -1, 602, -1, 604, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + -1, -1, -1, -1, 634, 635, -1, 637, 638, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, -1, -1, + 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, + -1, 55, 56, -1, 58, 59, -1, 61, -1, -1, + -1, -1, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, -1, -1, -1, -1, -1, -1, 82, -1, + 84, -1, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, -1, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, -1, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, -1, -1, -1, + 154, 155, 156, -1, 158, 159, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, -1, -1, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, 189, 190, 191, 192, -1, + -1, -1, -1, -1, -1, -1, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, -1, 212, -1, + 214, -1, -1, -1, 218, 219, -1, -1, -1, -1, + -1, -1, 226, -1, -1, -1, 230, 231, 232, 233, + 234, 235, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, -1, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, 260, -1, -1, 263, + -1, -1, -1, 267, 268, -1, -1, 271, 272, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + 294, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 394, 395, -1, -1, -1, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, -1, -1, -1, + -1, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, -1, -1, 451, -1, 453, + 454, -1, 456, -1, -1, -1, 460, -1, -1, 463, + 464, -1, 466, 467, 468, -1, -1, 471, -1, 473, + 474, 475, 476, 477, 478, 479, -1, 481, 482, -1, + 484, -1, -1, -1, -1, 489, 490, 491, -1, -1, + -1, -1, 496, -1, -1, -1, -1, -1, -1, 503, + -1, -1, 506, 507, -1, 509, -1, 511, -1, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, -1, 533, + -1, -1, -1, 537, -1, -1, -1, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + -1, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, -1, -1, -1, -1, 599, -1, -1, 602, -1, + -1, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, 630, -1, -1, -1, + 634, -1, -1, 637, -1, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, -1, -1, 24, 25, 26, 27, + 28, 29, 30, 31, -1, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, -1, -1, -1, -1, 55, 56, -1, + 58, 59, -1, 61, -1, -1, -1, -1, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, -1, -1, + -1, -1, -1, -1, 82, -1, 84, -1, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, -1, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + -1, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, -1, -1, -1, 154, 155, 156, -1, + 158, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, -1, + -1, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, 189, 190, 191, 192, -1, -1, -1, -1, -1, + -1, -1, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, -1, 212, -1, 214, -1, -1, -1, + 218, 219, -1, -1, -1, -1, -1, -1, 226, -1, + -1, -1, 230, 231, 232, 233, 234, 235, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, -1, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, 260, -1, -1, 263, -1, -1, -1, 267, + 268, -1, -1, 271, 272, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, 294, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 394, 395, -1, -1, + -1, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, -1, -1, -1, -1, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, -1, -1, 451, -1, 453, 454, -1, 456, -1, + -1, -1, 460, -1, -1, 463, 464, -1, 466, 467, + 468, -1, -1, 471, -1, 473, 474, 475, 476, 477, + 478, 479, -1, 481, 482, -1, 484, -1, -1, -1, + -1, 489, 490, 491, -1, -1, -1, -1, 496, -1, + -1, -1, -1, -1, -1, 503, -1, -1, 506, 507, + -1, 509, -1, 511, -1, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, -1, 533, -1, -1, -1, 537, + -1, -1, -1, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, -1, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, -1, -1, -1, + -1, 599, -1, -1, 602, -1, -1, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + 628, -1, 630, -1, -1, -1, 634, -1, -1, 637, + -1, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, + -1, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, -1, + -1, -1, -1, 55, 56, -1, 58, 59, -1, 61, + -1, -1, -1, -1, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, -1, -1, -1, -1, -1, -1, + 82, -1, 84, -1, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, -1, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, -1, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, -1, + -1, -1, 154, 155, 156, -1, 158, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, -1, -1, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, 189, 190, 191, + 192, -1, -1, -1, -1, -1, -1, -1, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, -1, + 212, -1, 214, -1, -1, -1, 218, 219, -1, -1, + -1, -1, -1, -1, 226, -1, -1, -1, 230, 231, + 232, 233, 234, 235, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, -1, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, 260, -1, + -1, 263, -1, -1, -1, 267, 268, -1, -1, 271, + 272, -1, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, 294, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, -1, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 394, 395, -1, -1, -1, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, -1, + -1, -1, -1, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, -1, -1, 451, + -1, 453, 454, -1, 456, -1, -1, -1, 460, -1, + -1, 463, 464, -1, 466, 467, 468, -1, -1, 471, + -1, 473, 474, 475, 476, 477, 478, 479, -1, 481, + 482, -1, 484, -1, -1, -1, -1, 489, 490, 491, + -1, -1, -1, -1, 496, -1, -1, -1, -1, -1, + -1, 503, -1, -1, 506, 507, -1, 509, -1, 511, + -1, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + -1, 533, -1, -1, -1, 537, -1, -1, -1, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, -1, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, -1, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, -1, -1, -1, -1, 599, -1, -1, + 602, -1, -1, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, 628, -1, 630, -1, + -1, -1, 634, -1, -1, 637, -1, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, @@ -19456,121 +17570,312 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, -1, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, 161, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - -1, -1, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, 188, 189, 190, 191, -1, -1, -1, -1, - -1, -1, -1, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, -1, 211, -1, 213, -1, -1, - -1, 217, 218, -1, -1, -1, -1, -1, -1, 225, - -1, -1, -1, 229, 230, 231, 232, 233, 234, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, -1, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, 259, -1, -1, 262, -1, -1, -1, - 266, 267, -1, -1, 270, 271, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, -1, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, 162, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, -1, -1, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, 189, 190, 191, 192, -1, -1, -1, + -1, -1, -1, -1, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, -1, 212, -1, 214, -1, + -1, -1, 218, 219, -1, -1, -1, -1, -1, -1, + 226, -1, -1, -1, 230, 231, 232, 233, 234, 235, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, -1, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, 260, -1, -1, 263, -1, -1, + -1, 267, 268, -1, -1, 271, 272, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, 294, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - -1, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 393, 394, -1, - -1, -1, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, -1, -1, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, -1, -1, 450, -1, 452, 453, -1, 455, - -1, -1, -1, 459, -1, -1, 462, 463, -1, 465, - 466, 467, -1, -1, 470, -1, 472, 473, 474, 475, - 476, 477, 478, -1, 480, 481, -1, 483, -1, -1, - -1, -1, 488, 489, 490, -1, -1, -1, -1, 495, - -1, -1, -1, -1, -1, -1, 502, -1, -1, 505, - 506, -1, 508, -1, 510, -1, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, -1, 532, -1, -1, -1, - 536, -1, -1, -1, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, -1, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, -1, -1, - -1, -1, 598, -1, -1, 601, -1, -1, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, 629, -1, -1, -1, 633, -1, -1, - 636, -1, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, - 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - -1, -1, -1, -1, 55, 56, -1, 58, 59, -1, - 61, -1, -1, -1, -1, -1, 67, 68, 69, 70, - 71, 72, -1, 74, 75, -1, -1, -1, -1, -1, - -1, 82, -1, 84, -1, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, -1, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, -1, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - -1, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, -1, -1, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, 188, 189, 190, - 191, -1, -1, -1, -1, -1, -1, -1, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, -1, - 211, -1, 213, -1, -1, -1, 217, 218, -1, -1, - -1, -1, -1, -1, 225, -1, -1, -1, 229, 230, - 231, 232, 233, 234, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, -1, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, 259, -1, - -1, 262, -1, -1, -1, 266, 267, -1, -1, 270, - 271, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, -1, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, -1, - -1, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, -1, -1, 450, - -1, 452, 453, -1, 455, -1, -1, -1, 459, -1, - -1, 462, 463, -1, 465, 466, 467, -1, -1, 470, - -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, - 481, -1, 483, -1, -1, -1, -1, 488, 489, 490, - -1, -1, -1, -1, 495, -1, -1, -1, -1, -1, - -1, 502, -1, -1, 505, 506, -1, 508, -1, 510, - -1, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - -1, 532, -1, -1, -1, 536, -1, -1, -1, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, -1, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, -1, -1, -1, -1, 598, -1, -1, - 601, -1, -1, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, 629, -1, - -1, -1, 633, -1, -1, 636, -1, 638, -1, 5, - 641, 7, 8, 9, 10, 11, 12, -1, -1, 15, + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, -1, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 394, 395, + -1, -1, -1, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, -1, -1, -1, -1, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, -1, -1, 451, -1, 453, 454, -1, + 456, -1, -1, -1, 460, -1, -1, 463, 464, -1, + 466, 467, 468, -1, -1, 471, -1, 473, 474, 475, + 476, 477, 478, 479, -1, 481, 482, -1, 484, -1, + -1, -1, -1, 489, 490, 491, -1, -1, -1, -1, + 496, -1, -1, -1, -1, -1, -1, 503, -1, -1, + 506, 507, -1, 509, -1, 511, -1, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, -1, 533, -1, -1, + -1, 537, -1, -1, -1, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, -1, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, -1, + -1, -1, -1, 599, -1, -1, 602, -1, -1, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, 630, -1, -1, -1, 634, -1, + -1, 637, -1, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, -1, -1, 24, 25, 26, 27, 28, 29, + 30, 31, -1, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, -1, -1, -1, -1, 55, 56, -1, 58, 59, + -1, 61, -1, -1, -1, -1, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, -1, -1, -1, -1, + -1, -1, 82, -1, 84, -1, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, -1, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, -1, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, -1, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, 162, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, -1, -1, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, 189, + 190, 191, 192, -1, -1, -1, -1, -1, -1, -1, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, -1, 212, -1, 214, -1, -1, -1, 218, 219, + -1, -1, -1, -1, -1, -1, 226, -1, -1, -1, + 230, 231, 232, 233, 234, 235, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, -1, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + 260, -1, -1, 263, -1, -1, -1, 267, 268, -1, + -1, 271, 272, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, 294, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 394, 395, -1, -1, -1, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, -1, -1, -1, -1, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, -1, + -1, 451, -1, 453, 454, -1, 456, -1, -1, -1, + 460, -1, -1, 463, 464, -1, 466, 467, 468, -1, + -1, 471, -1, 473, 474, 475, 476, 477, 478, 479, + -1, 481, 482, -1, 484, -1, -1, -1, -1, 489, + 490, 491, -1, -1, -1, -1, 496, -1, -1, -1, + -1, -1, -1, 503, -1, -1, 506, 507, -1, 509, + -1, 511, -1, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, -1, 533, -1, -1, -1, 537, -1, -1, + -1, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, -1, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, -1, -1, -1, -1, 599, + -1, -1, 602, -1, -1, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + 630, -1, -1, -1, 634, -1, -1, 637, -1, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, -1, -1, + 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, + 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, + -1, 55, 56, -1, 58, 59, -1, 61, -1, -1, + -1, -1, -1, 67, 68, 69, 70, 71, 72, -1, + 74, 75, -1, -1, -1, -1, -1, -1, 82, -1, + 84, -1, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, -1, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, -1, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, -1, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, 162, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, -1, -1, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, 189, 190, 191, 192, -1, + -1, -1, -1, -1, -1, -1, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, -1, 212, -1, + 214, -1, -1, -1, 218, 219, -1, -1, -1, -1, + -1, -1, 226, -1, -1, -1, 230, 231, 232, 233, + 234, 235, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, -1, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, 260, -1, -1, 263, + -1, -1, -1, 267, 268, -1, -1, 271, 272, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + 294, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, 381, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 394, 395, -1, -1, -1, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, -1, -1, -1, + -1, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, -1, -1, 451, -1, 453, + 454, -1, 456, -1, -1, -1, 460, -1, -1, 463, + 464, -1, 466, 467, 468, -1, -1, 471, -1, 473, + 474, 475, 476, 477, 478, 479, -1, 481, 482, -1, + 484, -1, -1, -1, -1, 489, 490, 491, -1, -1, + -1, -1, 496, -1, -1, -1, -1, -1, -1, 503, + -1, -1, 506, 507, -1, 509, -1, 511, -1, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, -1, 533, + -1, -1, -1, 537, -1, -1, -1, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + -1, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, -1, -1, -1, -1, 599, -1, -1, 602, -1, + -1, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, 630, -1, -1, -1, + 634, -1, -1, 637, -1, 639, -1, 5, 642, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, -1, -1, -1, 24, 25, 26, 27, + 28, 29, 30, 31, -1, -1, 34, -1, -1, -1, + 38, -1, -1, -1, 42, -1, -1, 45, 46, 47, + -1, 49, -1, -1, -1, -1, -1, 55, 56, -1, + 58, 59, -1, 61, -1, -1, -1, -1, -1, 67, + 68, 69, 70, 71, 72, -1, 74, 75, -1, -1, + -1, -1, -1, -1, 82, -1, 84, -1, 86, 87, + 88, 89, -1, 91, 92, -1, 94, 95, 96, -1, + 98, -1, 100, -1, -1, 103, -1, -1, 106, -1, + 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, + 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, + -1, -1, -1, -1, -1, 133, -1, 135, -1, -1, + -1, -1, 140, -1, 142, 143, 144, 145, 146, -1, + -1, -1, -1, -1, -1, -1, 154, 155, 156, -1, + -1, -1, 160, -1, 162, 163, -1, 165, 166, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, -1, + -1, -1, -1, 181, 182, 183, 184, -1, -1, 187, + 188, 189, 190, 191, 192, -1, -1, -1, -1, -1, + -1, -1, 200, -1, 202, -1, 204, -1, 206, 207, + 208, 209, 210, -1, 212, -1, 214, -1, -1, -1, + 218, 219, -1, -1, -1, -1, -1, -1, 226, -1, + -1, -1, 230, 231, 232, 233, 234, 235, -1, -1, + 238, 239, 240, -1, -1, 243, -1, -1, -1, -1, + 248, -1, -1, -1, -1, 253, -1, 255, 256, -1, + 258, 259, 260, -1, -1, 263, -1, -1, -1, 267, + 268, -1, -1, 271, 272, -1, 274, 275, -1, -1, + -1, -1, -1, 281, 282, -1, 284, -1, 286, -1, + 288, 289, -1, -1, -1, -1, 294, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, -1, + 318, 319, 320, 321, -1, 323, 324, 325, -1, -1, + -1, -1, 330, 331, 332, 333, 334, 335, -1, -1, + 338, 339, -1, 341, -1, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, + 368, -1, -1, -1, 372, -1, 374, 375, 376, -1, + 378, 379, 380, 381, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 394, 395, -1, -1, + -1, -1, 400, -1, 402, 403, 404, 405, 406, 407, + 408, 409, 410, -1, -1, -1, -1, 415, 416, -1, + 418, -1, 420, 421, 422, 423, 424, -1, 426, 427, + 428, -1, -1, 431, -1, -1, -1, 435, 436, 437, + 438, 439, -1, -1, 442, 443, 444, 445, 446, -1, + 448, -1, -1, 451, -1, 453, 454, -1, 456, -1, + -1, -1, 460, -1, -1, 463, 464, -1, 466, 467, + 468, -1, -1, 471, -1, 473, 474, 475, 476, 477, + 478, 479, -1, 481, 482, -1, 484, -1, -1, -1, + -1, 489, 490, 491, -1, -1, -1, -1, 496, -1, + -1, -1, -1, -1, -1, 503, -1, -1, 506, 507, + -1, 509, -1, 511, -1, 513, 514, -1, -1, -1, + -1, -1, -1, 521, 522, -1, 524, -1, -1, 527, + -1, -1, -1, 531, -1, 533, -1, -1, -1, 537, + -1, -1, -1, 541, -1, 543, 544, 545, 546, 547, + 548, -1, -1, 551, 552, 553, 554, -1, 556, 557, + -1, -1, 560, 561, 562, 563, -1, -1, 566, 567, + -1, 569, 570, 571, 572, -1, -1, -1, -1, -1, + 578, 579, 580, -1, -1, -1, -1, 585, 586, 587, + -1, 589, 590, -1, 592, 593, -1, -1, -1, -1, + -1, 599, -1, -1, 602, -1, -1, -1, 606, 607, + -1, -1, -1, -1, -1, -1, 614, -1, -1, 617, + -1, -1, -1, 621, 622, 623, 624, 625, 626, 627, + -1, -1, 630, -1, -1, -1, 634, -1, -1, 637, + -1, 639, -1, 5, 642, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, + -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, + -1, -1, 34, -1, -1, -1, 38, -1, -1, -1, + 42, -1, -1, 45, 46, 47, -1, 49, -1, -1, + -1, -1, -1, 55, 56, -1, 58, 59, -1, 61, + -1, -1, -1, -1, -1, 67, 68, 69, 70, 71, + 72, -1, 74, 75, -1, -1, -1, -1, -1, -1, + 82, -1, 84, -1, 86, 87, 88, 89, -1, 91, + 92, -1, 94, 95, 96, -1, 98, -1, 100, -1, + -1, 103, -1, -1, 106, -1, 108, -1, -1, 111, + -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, + 122, -1, -1, -1, -1, 127, -1, -1, -1, -1, + -1, 133, -1, 135, -1, -1, -1, -1, 140, -1, + 142, 143, 144, 145, 146, -1, -1, -1, -1, -1, + -1, -1, 154, 155, 156, -1, -1, -1, 160, -1, + 162, 163, -1, 165, 166, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, -1, -1, -1, -1, 181, + 182, 183, 184, -1, -1, 187, 188, 189, 190, 191, + 192, -1, -1, -1, -1, -1, -1, -1, 200, -1, + 202, -1, 204, -1, 206, 207, 208, 209, 210, -1, + 212, -1, 214, -1, -1, -1, 218, 219, -1, -1, + -1, -1, -1, -1, 226, -1, -1, -1, 230, 231, + 232, 233, 234, 235, -1, -1, 238, 239, 240, -1, + -1, 243, -1, -1, -1, -1, 248, -1, -1, -1, + -1, 253, -1, 255, 256, -1, 258, 259, 260, -1, + -1, 263, -1, -1, -1, 267, 268, -1, -1, 271, + 272, -1, 274, 275, -1, -1, -1, -1, -1, 281, + 282, -1, 284, -1, 286, -1, 288, 289, -1, -1, + -1, -1, 294, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + -1, 313, 314, 315, 316, -1, 318, 319, 320, 321, + -1, 323, 324, 325, -1, -1, -1, -1, 330, 331, + 332, 333, 334, 335, -1, -1, 338, 339, -1, 341, + -1, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, 360, 361, + 362, 363, -1, -1, -1, -1, 368, -1, -1, -1, + 372, -1, 374, 375, 376, -1, 378, 379, 380, 381, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 394, 395, -1, -1, -1, -1, 400, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 410, -1, + -1, -1, -1, 415, 416, -1, 418, -1, 420, 421, + 422, 423, 424, -1, 426, 427, 428, -1, -1, 431, + -1, -1, -1, 435, 436, 437, 438, 439, -1, -1, + 442, 443, 444, 445, 446, -1, 448, -1, -1, 451, + -1, 453, 454, -1, 456, -1, -1, -1, 460, -1, + -1, 463, 464, -1, 466, 467, 468, -1, -1, 471, + -1, 473, 474, 475, 476, 477, 478, 479, -1, 481, + 482, -1, 484, -1, -1, -1, -1, 489, 490, 491, + -1, -1, -1, -1, 496, -1, -1, -1, -1, -1, + -1, 503, -1, -1, 506, 507, -1, 509, -1, 511, + -1, 513, 514, -1, -1, -1, -1, -1, -1, 521, + 522, -1, 524, -1, -1, 527, -1, -1, -1, 531, + -1, 533, -1, -1, -1, 537, -1, -1, -1, 541, + -1, 543, 544, 545, 546, 547, 548, -1, -1, 551, + 552, 553, 554, -1, 556, 557, -1, -1, 560, 561, + 562, 563, -1, -1, 566, 567, -1, 569, 570, 571, + 572, -1, -1, -1, -1, -1, 578, 579, 580, -1, + -1, -1, -1, 585, 586, 587, -1, 589, 590, -1, + 592, 593, -1, -1, -1, -1, -1, 599, -1, -1, + 602, -1, -1, -1, 606, 607, -1, -1, -1, -1, + -1, -1, 614, -1, -1, 617, -1, -1, -1, 621, + 622, 623, 624, 625, 626, 627, -1, -1, 630, -1, + -1, -1, 634, -1, -1, 637, -1, 639, -1, 5, + 642, 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, 34, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, @@ -19583,143 +17888,206 @@ 106, -1, 108, -1, -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, -1, -1, 133, -1, 135, - -1, -1, -1, 139, -1, 141, 142, 143, 144, 145, - -1, -1, -1, -1, -1, -1, -1, 153, 154, 155, - -1, -1, -1, 159, -1, -1, 162, -1, 164, 165, - 166, -1, 168, 169, -1, 171, 172, 173, 174, 175, - -1, -1, -1, -1, 180, 181, 182, 183, -1, -1, - 186, 187, 188, 189, 190, 191, -1, -1, -1, -1, - -1, -1, -1, 199, -1, 201, -1, 203, -1, 205, - 206, 207, 208, 209, -1, 211, -1, 213, -1, -1, - -1, 217, 218, -1, -1, -1, -1, -1, -1, 225, - -1, -1, -1, 229, 230, 231, 232, 233, 234, -1, - -1, 237, 238, 239, -1, -1, 242, -1, -1, -1, - -1, 247, -1, -1, -1, -1, 252, -1, 254, 255, - -1, 257, 258, 259, -1, -1, 262, -1, -1, -1, - 266, 267, -1, -1, 270, 271, -1, 273, 274, -1, - -1, -1, -1, -1, 280, 281, -1, 283, -1, 285, - -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, + -1, -1, -1, -1, 140, -1, 142, 143, 144, 145, + 146, -1, -1, -1, -1, -1, -1, -1, 154, 155, + 156, -1, -1, -1, 160, -1, -1, 163, -1, 165, + 166, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, -1, -1, -1, -1, 181, 182, 183, 184, -1, + -1, 187, 188, 189, 190, 191, 192, -1, -1, -1, + -1, -1, -1, -1, 200, -1, 202, -1, 204, -1, + 206, 207, 208, 209, 210, -1, 212, -1, 214, -1, + -1, -1, 218, 219, -1, -1, -1, -1, -1, -1, + 226, -1, -1, -1, 230, 231, 232, 233, 234, 235, + -1, -1, 238, 239, 240, -1, -1, 243, -1, -1, + -1, -1, 248, -1, -1, -1, -1, 253, -1, 255, + 256, -1, 258, 259, 260, -1, -1, 263, -1, -1, + -1, 267, 268, -1, -1, 271, 272, -1, 274, 275, + -1, -1, -1, -1, -1, 281, 282, -1, 284, -1, + 286, -1, 288, 289, -1, -1, -1, -1, 294, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, -1, 312, 313, 314, 315, - -1, 317, 318, 319, 320, -1, 322, 323, 324, -1, - -1, -1, -1, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, -1, 340, -1, 342, -1, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, -1, -1, - 356, -1, -1, 359, 360, 361, 362, -1, -1, -1, - -1, 367, -1, -1, -1, 371, -1, 373, 374, 375, - -1, 377, 378, 379, 380, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 393, 394, -1, - -1, -1, -1, 399, -1, 401, 402, 403, 404, 405, - 406, 407, 408, 409, -1, -1, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, -1, -1, -1, 434, 435, - 436, 437, 438, -1, -1, 441, 442, 443, 444, 445, - -1, 447, -1, -1, 450, -1, 452, 453, -1, 455, - -1, -1, -1, 459, -1, -1, 462, 463, -1, 465, - 466, 467, -1, -1, 470, -1, 472, 473, 474, 475, - 476, 477, 478, -1, 480, 481, -1, 483, -1, -1, - -1, -1, 488, 489, 490, -1, -1, -1, -1, 495, - -1, -1, -1, -1, -1, -1, 502, -1, -1, 505, - 506, -1, 508, -1, 510, -1, 512, 513, -1, -1, - -1, -1, -1, -1, 520, 521, -1, 523, -1, -1, - 526, -1, -1, -1, 530, -1, 532, -1, -1, -1, - 536, -1, -1, -1, 540, -1, 542, 543, 544, 545, - 546, 547, -1, -1, 550, 551, 552, 553, -1, 555, - 556, -1, -1, 559, 560, 561, 562, -1, -1, 565, - 566, -1, 568, 569, 570, 571, -1, -1, -1, -1, - -1, 577, 578, 579, -1, -1, -1, -1, 584, 585, - 586, -1, 588, 589, -1, 591, 592, -1, -1, -1, - -1, -1, 598, -1, -1, 601, -1, -1, -1, 605, - 606, -1, -1, -1, -1, -1, -1, 613, -1, -1, - 616, -1, -1, -1, 620, 621, 622, 623, 624, 625, - 626, -1, -1, 629, -1, -1, -1, 633, -1, -1, - 636, -1, 638, -1, 5, 641, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, -1, 19, -1, - -1, -1, -1, 24, 25, 26, 27, 28, 29, 30, - 31, -1, -1, -1, -1, -1, -1, 38, -1, -1, - -1, 42, -1, -1, 45, 46, 47, -1, 49, -1, - -1, -1, -1, -1, 55, -1, -1, 58, 59, -1, - 61, -1, -1, -1, -1, -1, 67, 68, 69, -1, - 71, 72, -1, 74, 75, -1, -1, -1, -1, -1, - -1, 82, -1, 84, -1, 86, 87, 88, 89, -1, - 91, 92, -1, 94, 95, 96, -1, 98, -1, 100, - -1, -1, 103, -1, -1, 106, -1, 108, -1, -1, - 111, -1, 113, -1, -1, -1, 117, 118, 119, -1, - -1, 122, -1, -1, -1, -1, 127, -1, -1, -1, - -1, -1, 133, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, 145, -1, -1, -1, -1, -1, - -1, -1, 153, 154, 155, -1, -1, -1, 159, -1, - -1, 162, -1, 164, 165, 166, -1, 168, 169, -1, - 171, 172, 173, 174, 175, -1, -1, -1, -1, 180, - 181, 182, 183, -1, -1, 186, 187, -1, 189, 190, - 191, -1, -1, -1, -1, -1, -1, -1, 199, -1, - 201, -1, 203, -1, 205, 206, 207, 208, 209, -1, - 211, -1, 213, -1, -1, -1, 217, 218, -1, -1, - -1, -1, -1, -1, 225, -1, -1, -1, 229, 230, - 231, 232, 233, -1, -1, -1, 237, 238, 239, -1, - -1, 242, -1, -1, -1, -1, 247, -1, -1, -1, - -1, 252, -1, 254, 255, -1, 257, 258, -1, -1, - -1, 262, -1, -1, -1, 266, 267, -1, -1, 270, - -1, -1, 273, 274, -1, -1, -1, -1, -1, 280, - 281, -1, 283, -1, 285, -1, 287, 288, -1, -1, - -1, -1, -1, -1, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - -1, 312, 313, 314, 315, -1, 317, 318, 319, 320, - -1, 322, 323, 324, -1, -1, -1, -1, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, -1, 340, - -1, 342, -1, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, -1, -1, 359, 360, - 361, 362, -1, -1, -1, -1, 367, -1, -1, -1, - 371, -1, 373, 374, 375, -1, 377, 378, 379, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 393, 394, -1, -1, -1, -1, 399, -1, - 401, 402, 403, 404, 405, 406, 407, 408, 409, -1, - -1, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - -1, -1, -1, 434, 435, 436, 437, 438, -1, -1, - 441, 442, 443, 444, 445, -1, 447, -1, -1, 450, - -1, 452, -1, -1, 455, -1, -1, -1, 459, -1, - -1, 462, 463, -1, 465, -1, 467, -1, -1, 470, - -1, 472, 473, 474, 475, 476, 477, 478, -1, 480, - 481, -1, 483, -1, -1, -1, -1, 488, 489, 490, - -1, -1, -1, -1, 495, -1, -1, -1, -1, -1, - -1, 502, -1, -1, 505, 506, -1, 508, -1, 510, - -1, 512, 513, -1, -1, -1, -1, -1, -1, 520, - 521, -1, 523, -1, -1, 526, -1, -1, -1, 530, - -1, 532, -1, -1, -1, 536, -1, -1, -1, 540, - -1, 542, 543, 544, 545, 546, 547, -1, -1, 550, - 551, 552, 553, -1, 555, 556, -1, -1, 559, 560, - 561, 562, -1, -1, 565, 566, -1, 568, 569, 570, - 571, -1, -1, -1, -1, -1, 577, 578, 579, -1, - -1, -1, -1, 584, 585, 586, -1, 588, 589, -1, - 591, 592, -1, -1, -1, -1, -1, 598, -1, -1, - 601, -1, -1, -1, 605, 606, -1, -1, -1, -1, - -1, -1, 613, -1, -1, 616, -1, -1, -1, 620, - 621, 622, 623, 624, 625, 626, -1, -1, -1, -1, - -1, -1, 633, -1, -1, 636, -1, 638, -1, -1, - 641 + 306, 307, 308, 309, 310, 311, -1, 313, 314, 315, + 316, -1, 318, 319, 320, 321, -1, 323, 324, 325, + -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, + -1, -1, 338, 339, -1, 341, -1, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, 360, 361, 362, 363, -1, -1, + -1, -1, 368, -1, -1, -1, 372, -1, 374, 375, + 376, -1, 378, 379, 380, 381, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 394, 395, + -1, -1, -1, -1, 400, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, -1, -1, -1, -1, 415, + 416, -1, 418, -1, 420, 421, 422, 423, 424, -1, + 426, 427, 428, -1, -1, 431, -1, -1, -1, 435, + 436, 437, 438, 439, -1, -1, 442, 443, 444, 445, + 446, -1, 448, -1, -1, 451, -1, 453, 454, -1, + 456, -1, -1, -1, 460, -1, -1, 463, 464, -1, + 466, 467, 468, -1, -1, 471, -1, 473, 474, 475, + 476, 477, 478, 479, -1, 481, 482, -1, 484, -1, + -1, -1, -1, 489, 490, 491, -1, -1, -1, -1, + 496, -1, -1, -1, -1, -1, -1, 503, -1, -1, + 506, 507, -1, 509, -1, 511, -1, 513, 514, -1, + -1, -1, -1, -1, -1, 521, 522, -1, 524, -1, + -1, 527, -1, -1, -1, 531, -1, 533, -1, -1, + -1, 537, -1, -1, -1, 541, -1, 543, 544, 545, + 546, 547, 548, -1, -1, 551, 552, 553, 554, -1, + 556, 557, -1, -1, 560, 561, 562, 563, -1, -1, + 566, 567, -1, 569, 570, 571, 572, -1, -1, -1, + -1, -1, 578, 579, 580, -1, -1, -1, -1, 585, + 586, 587, -1, 589, 590, -1, 592, 593, -1, -1, + -1, -1, -1, 599, -1, -1, 602, -1, -1, -1, + 606, 607, -1, -1, -1, -1, -1, -1, 614, -1, + -1, 617, -1, -1, -1, 621, 622, 623, 624, 625, + 626, 627, -1, -1, 630, -1, -1, -1, 634, -1, + -1, 637, -1, 639, -1, 5, 642, 7, 8, 9, + 10, 11, 12, -1, -1, 15, -1, -1, -1, 19, + -1, -1, -1, -1, 24, 25, 26, 27, 28, 29, + 30, 31, -1, -1, 34, -1, -1, -1, 38, -1, + -1, -1, 42, -1, -1, 45, 46, 47, -1, 49, + -1, -1, -1, -1, -1, 55, 56, -1, 58, 59, + -1, 61, -1, -1, -1, -1, -1, 67, 68, 69, + 70, 71, 72, -1, 74, 75, -1, -1, -1, -1, + -1, -1, 82, -1, 84, -1, 86, 87, 88, 89, + -1, 91, 92, -1, 94, 95, 96, -1, 98, -1, + 100, -1, -1, 103, -1, -1, 106, -1, 108, -1, + -1, 111, -1, 113, -1, -1, -1, 117, 118, 119, + -1, -1, 122, -1, -1, -1, -1, 127, -1, -1, + -1, -1, -1, 133, -1, 135, -1, -1, -1, -1, + 140, -1, 142, 143, 144, 145, 146, -1, -1, -1, + -1, -1, -1, -1, 154, 155, 156, -1, -1, -1, + 160, -1, -1, 163, -1, 165, 166, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, -1, -1, -1, + -1, 181, 182, 183, 184, -1, -1, 187, 188, 189, + 190, 191, 192, -1, -1, -1, -1, -1, -1, -1, + 200, -1, 202, -1, 204, -1, 206, 207, 208, 209, + 210, -1, 212, -1, 214, -1, -1, -1, 218, 219, + -1, -1, -1, -1, -1, -1, 226, -1, -1, -1, + 230, 231, 232, 233, 234, 235, -1, -1, 238, 239, + 240, -1, -1, 243, -1, -1, -1, -1, 248, -1, + -1, -1, -1, 253, -1, 255, 256, -1, 258, 259, + 260, -1, -1, 263, -1, -1, -1, 267, 268, -1, + -1, 271, 272, -1, 274, 275, -1, -1, -1, -1, + -1, 281, 282, -1, 284, -1, 286, -1, 288, 289, + -1, -1, -1, -1, 294, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, -1, 313, 314, 315, 316, -1, 318, 319, + 320, 321, -1, 323, 324, 325, -1, -1, -1, -1, + 330, 331, 332, 333, 334, 335, -1, -1, 338, 339, + -1, 341, -1, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, 368, -1, + -1, -1, 372, -1, 374, 375, 376, -1, 378, 379, + 380, 381, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 394, 395, -1, -1, -1, -1, + 400, -1, 402, 403, 404, 405, 406, 407, 408, 409, + 410, -1, -1, -1, -1, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, -1, 426, 427, 428, -1, + -1, 431, -1, -1, -1, 435, 436, 437, 438, 439, + -1, -1, 442, 443, 444, 445, 446, -1, 448, -1, + -1, 451, -1, 453, 454, -1, 456, -1, -1, -1, + 460, -1, -1, 463, 464, -1, 466, 467, 468, -1, + -1, 471, -1, 473, 474, 475, 476, 477, 478, 479, + -1, 481, 482, -1, 484, -1, -1, -1, -1, 489, + 490, 491, -1, -1, -1, -1, 496, -1, -1, -1, + -1, -1, -1, 503, -1, -1, 506, 507, -1, 509, + -1, 511, -1, 513, 514, -1, -1, -1, -1, -1, + -1, 521, 522, -1, 524, -1, -1, 527, -1, -1, + -1, 531, -1, 533, -1, -1, -1, 537, -1, -1, + -1, 541, -1, 543, 544, 545, 546, 547, 548, -1, + -1, 551, 552, 553, 554, -1, 556, 557, -1, -1, + 560, 561, 562, 563, -1, -1, 566, 567, -1, 569, + 570, 571, 572, -1, -1, -1, -1, -1, 578, 579, + 580, -1, -1, -1, -1, 585, 586, 587, -1, 589, + 590, -1, 592, 593, -1, -1, -1, -1, -1, 599, + -1, -1, 602, -1, -1, -1, 606, 607, -1, -1, + -1, -1, -1, -1, 614, -1, -1, 617, -1, -1, + -1, 621, 622, 623, 624, 625, 626, 627, -1, -1, + 630, -1, -1, -1, 634, -1, -1, 637, -1, 639, + -1, 5, 642, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, -1, -1, 19, -1, -1, -1, -1, + 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, + -1, -1, -1, -1, 38, -1, -1, -1, 42, -1, + -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, + -1, 55, -1, -1, 58, 59, -1, 61, -1, -1, + -1, -1, -1, 67, 68, 69, -1, 71, 72, -1, + 74, 75, -1, -1, -1, -1, -1, -1, 82, -1, + 84, -1, 86, 87, 88, 89, -1, 91, 92, -1, + 94, 95, 96, -1, 98, -1, 100, -1, -1, 103, + -1, -1, 106, -1, 108, -1, -1, 111, -1, 113, + -1, -1, -1, 117, 118, 119, -1, -1, 122, -1, + -1, -1, -1, 127, -1, -1, -1, -1, -1, 133, + -1, 135, -1, -1, -1, -1, 140, -1, 142, 143, + 144, 145, 146, -1, -1, -1, -1, -1, -1, -1, + 154, 155, 156, -1, -1, -1, 160, -1, -1, 163, + -1, 165, 166, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, -1, -1, -1, -1, 181, 182, 183, + 184, -1, -1, 187, 188, -1, 190, 191, 192, -1, + -1, -1, -1, -1, -1, -1, 200, -1, 202, -1, + 204, -1, 206, 207, 208, 209, 210, -1, 212, -1, + 214, -1, -1, -1, 218, 219, -1, -1, -1, -1, + -1, -1, 226, -1, -1, -1, 230, 231, 232, 233, + 234, -1, -1, -1, 238, 239, 240, -1, -1, 243, + -1, -1, -1, -1, 248, -1, -1, -1, -1, 253, + -1, 255, 256, -1, 258, 259, -1, -1, -1, 263, + -1, -1, -1, 267, 268, -1, -1, 271, -1, -1, + 274, 275, -1, -1, -1, -1, -1, 281, 282, -1, + 284, -1, 286, -1, 288, 289, -1, -1, -1, -1, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, -1, 313, + 314, 315, 316, -1, 318, 319, 320, 321, -1, 323, + 324, 325, -1, -1, -1, -1, 330, 331, 332, 333, + 334, 335, -1, -1, 338, 339, -1, 341, -1, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, 368, -1, -1, -1, 372, -1, + 374, 375, 376, -1, 378, 379, 380, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 394, 395, -1, -1, -1, -1, 400, -1, 402, 403, + 404, 405, 406, 407, 408, 409, 410, -1, -1, -1, + -1, 415, 416, -1, 418, -1, 420, 421, 422, 423, + 424, -1, 426, 427, 428, -1, -1, 431, -1, -1, + -1, 435, 436, 437, 438, 439, -1, -1, 442, 443, + 444, 445, 446, -1, 448, -1, -1, 451, -1, 453, + -1, -1, 456, -1, -1, -1, 460, -1, -1, 463, + 464, -1, 466, -1, 468, -1, -1, 471, -1, 473, + 474, 475, 476, 477, 478, 479, -1, 481, 482, -1, + 484, -1, -1, -1, -1, 489, 490, 491, -1, -1, + -1, -1, 496, -1, -1, -1, -1, -1, -1, 503, + -1, -1, 506, 507, -1, 509, -1, 511, -1, 513, + 514, -1, -1, -1, -1, -1, -1, 521, 522, -1, + 524, -1, -1, 527, -1, -1, -1, 531, -1, 533, + -1, -1, -1, 537, -1, -1, -1, 541, -1, 543, + 544, 545, 546, 547, 548, -1, -1, 551, 552, 553, + 554, -1, 556, 557, -1, -1, 560, 561, 562, 563, + -1, -1, 566, 567, -1, 569, 570, 571, 572, -1, + -1, -1, -1, -1, 578, 579, 580, -1, -1, -1, + -1, 585, 586, 587, -1, 589, 590, -1, 592, 593, + -1, -1, -1, -1, -1, 599, -1, -1, 602, -1, + -1, -1, 606, 607, -1, -1, -1, -1, -1, -1, + 614, -1, -1, 617, -1, -1, -1, 621, 622, 623, + 624, 625, 626, 627, -1, -1, -1, -1, -1, -1, + 634, -1, -1, 637, -1, 639, -1, -1, 642 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 14, 16, 34, 38, 52, 53, 56, 60, 65, - 66, 85, 104, 128, 136, 137, 138, 150, 151, 163, - 177, 194, 210, 212, 216, 220, 234, 246, 248, 264, - 282, 286, 293, 381, 398, 400, 413, 424, 446, 449, - 451, 453, 454, 457, 458, 468, 471, 479, 485, 493, - 498, 499, 500, 531, 539, 583, 595, 599, 602, 607, - 629, 637, 643, 656, 667, 670, 671, 672, 673, 674, - 676, 681, 683, 696, 727, 755, 762, 763, 777, 778, - 797, 816, 831, 891, 945, 983, 1064, 1109, 1112, 1122, - 1127, 1133, 1146, 1149, 1155, 1158, 1163, 1170, 1182, 1183, - 1359, 1361, 1373, 1376, 1401, 1409, 1422, 1429, 1443, 1447, - 1448, 1452, 1463, 1471, 1475, 1480, 1481, 1482, 1536, 1567, - 1573, 1575, 1582, 1585, 1619, 1621, 1627, 1628, 1629, 1630, - 1683, 1691, 1692, 1693, 12, 115, 133, 203, 287, 418, - 491, 556, 1065, 1652, 1653, 1654, 1655, 198, 283, 368, - 1157, 1450, 363, 364, 1216, 1620, 564, 1525, 240, 5, + 66, 85, 104, 128, 136, 138, 139, 151, 152, 164, + 178, 195, 211, 213, 217, 221, 235, 247, 249, 265, + 283, 287, 294, 382, 399, 401, 414, 425, 447, 450, + 452, 454, 455, 458, 459, 469, 472, 480, 486, 494, + 499, 500, 501, 532, 540, 584, 596, 600, 603, 608, + 630, 638, 644, 657, 668, 671, 672, 673, 674, 675, + 677, 682, 684, 697, 728, 756, 763, 764, 778, 779, + 798, 817, 832, 892, 946, 984, 1065, 1110, 1113, 1123, + 1128, 1134, 1147, 1150, 1156, 1159, 1164, 1171, 1183, 1184, + 1360, 1362, 1374, 1377, 1402, 1410, 1423, 1430, 1444, 1448, + 1449, 1453, 1467, 1475, 1479, 1484, 1485, 1486, 1540, 1571, + 1577, 1579, 1586, 1589, 1623, 1625, 1631, 1632, 1633, 1634, + 1687, 1695, 1696, 1697, 12, 115, 133, 204, 288, 419, + 492, 557, 1066, 1656, 1657, 1658, 1659, 199, 284, 369, + 1158, 1451, 364, 365, 1217, 1624, 565, 1529, 241, 5, 7, 8, 9, 10, 11, 12, 15, 19, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 38, 42, 45, 46, 47, 49, 51, 52, 55, 58, 59, @@ -19727,564 +18095,1095 @@ 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 100, 103, 106, 108, 111, 113, 117, 118, - 119, 122, 127, 128, 133, 135, 139, 141, 142, 143, - 144, 145, 150, 153, 154, 155, 159, 161, 162, 164, - 165, 166, 168, 169, 171, 172, 173, 174, 175, 176, - 177, 180, 181, 182, 183, 186, 187, 189, 190, 191, - 194, 198, 199, 201, 203, 205, 206, 207, 208, 209, - 210, 211, 213, 216, 217, 218, 220, 224, 225, 229, - 230, 231, 232, 233, 237, 238, 239, 242, 247, 248, - 252, 254, 255, 257, 258, 262, 265, 266, 267, 270, - 273, 274, 280, 281, 283, 285, 287, 288, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 312, 313, 314, 315, 317, 318, - 319, 320, 322, 323, 324, 329, 330, 331, 332, 333, - 334, 337, 338, 340, 342, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 356, 359, 360, 361, 362, - 366, 367, 371, 373, 374, 375, 377, 378, 379, 380, - 382, 383, 392, 393, 394, 397, 399, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 413, 414, 415, - 417, 419, 420, 421, 422, 423, 425, 426, 427, 430, - 434, 435, 436, 437, 438, 441, 442, 443, 444, 445, - 447, 448, 450, 451, 452, 455, 457, 459, 460, 462, - 463, 465, 467, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 483, 484, 488, 489, 490, - 491, 495, 499, 501, 502, 503, 504, 505, 506, 508, - 509, 510, 511, 512, 513, 520, 521, 523, 526, 530, - 531, 532, 536, 539, 540, 542, 543, 544, 545, 546, - 547, 550, 551, 552, 553, 555, 556, 559, 560, 561, - 562, 565, 566, 568, 569, 570, 571, 577, 578, 579, - 583, 584, 585, 586, 588, 589, 591, 592, 594, 595, - 598, 601, 603, 605, 606, 613, 616, 620, 621, 622, - 623, 624, 625, 626, 633, 634, 636, 637, 638, 641, - 721, 1524, 1528, 1534, 1535, 798, 312, 555, 558, 1569, - 1150, 633, 1623, 287, 388, 556, 1410, 1360, 115, 173, - 203, 240, 287, 418, 470, 491, 556, 561, 580, 605, - 621, 1372, 1528, 1157, 108, 764, 720, 664, 1521, 1523, - 1528, 682, 779, 1374, 407, 511, 1476, 118, 240, 638, - 1487, 1569, 832, 1157, 656, 892, 1528, 1472, 479, 605, - 1569, 1157, 834, 1377, 1464, 517, 752, 756, 757, 1528, - 720, 1623, 1528, 1188, 1190, 1191, 1192, 532, 1537, 1430, - 756, 13, 503, 577, 13, 503, 558, 1424, 407, 511, - 1574, 1402, 1528, 833, 34, 85, 161, 413, 435, 471, - 531, 1685, 656, 1184, 1185, 0, 163, 668, 413, 115, - 202, 470, 514, 597, 605, 702, 703, 1042, 1043, 1044, - 1372, 182, 198, 401, 1449, 1450, 1521, 1528, 644, 1077, - 1528, 644, 721, 214, 721, 275, 1525, 1528, 1530, 837, - 838, 841, 864, 1528, 1101, 1102, 1071, 1204, 1652, 644, - 1569, 1182, 1373, 1376, 1401, 1409, 1446, 25, 1623, 1164, - 728, 664, 627, 799, 800, 803, 807, 694, 695, 1525, - 1123, 621, 1147, 1569, 18, 1624, 214, 454, 839, 864, - 236, 294, 427, 1420, 1421, 8, 22, 31, 37, 39, + 119, 122, 127, 128, 133, 135, 140, 142, 143, 144, + 145, 146, 151, 154, 155, 156, 160, 162, 163, 165, + 166, 167, 169, 170, 172, 173, 174, 175, 176, 177, + 178, 181, 182, 183, 184, 187, 188, 190, 191, 192, + 195, 199, 200, 202, 204, 206, 207, 208, 209, 210, + 211, 212, 214, 217, 218, 219, 221, 225, 226, 230, + 231, 232, 233, 234, 238, 239, 240, 243, 248, 249, + 253, 255, 256, 258, 259, 263, 266, 267, 268, 271, + 274, 275, 281, 282, 284, 286, 288, 289, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 313, 314, 315, 316, 318, 319, + 320, 321, 323, 324, 325, 330, 331, 332, 333, 334, + 335, 338, 339, 341, 343, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 357, 360, 361, 362, 363, + 367, 368, 372, 374, 375, 376, 378, 379, 380, 381, + 383, 384, 393, 394, 395, 398, 400, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 414, 415, 416, + 418, 420, 421, 422, 423, 424, 426, 427, 428, 431, + 435, 436, 437, 438, 439, 442, 443, 444, 445, 446, + 448, 449, 451, 452, 453, 456, 458, 460, 461, 463, + 464, 466, 468, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 484, 485, 489, 490, 491, + 492, 496, 500, 502, 503, 504, 505, 506, 507, 509, + 510, 511, 512, 513, 514, 521, 522, 524, 527, 531, + 532, 533, 537, 540, 541, 543, 544, 545, 546, 547, + 548, 551, 552, 553, 554, 556, 557, 560, 561, 562, + 563, 566, 567, 569, 570, 571, 572, 578, 579, 580, + 584, 585, 586, 587, 589, 590, 592, 593, 595, 596, + 599, 602, 604, 606, 607, 614, 617, 621, 622, 623, + 624, 625, 626, 627, 634, 635, 637, 638, 639, 642, + 722, 1528, 1532, 1538, 1539, 799, 313, 556, 559, 1573, + 1151, 634, 1627, 288, 389, 557, 1411, 1361, 115, 174, + 204, 241, 288, 419, 471, 492, 557, 562, 581, 606, + 622, 1373, 1532, 1158, 108, 765, 721, 665, 1525, 1527, + 1532, 683, 780, 1375, 408, 512, 1480, 118, 241, 639, + 1491, 1573, 833, 1158, 657, 893, 1532, 1476, 480, 606, + 1573, 1158, 835, 1378, 1468, 518, 753, 757, 758, 1532, + 721, 1627, 1532, 1189, 1191, 1192, 1193, 533, 1541, 1431, + 757, 13, 504, 578, 13, 504, 559, 1425, 408, 512, + 1578, 1403, 1532, 834, 34, 85, 162, 414, 436, 472, + 532, 1689, 657, 1185, 1186, 0, 164, 669, 414, 115, + 203, 471, 515, 598, 606, 703, 704, 1043, 1044, 1045, + 1373, 183, 199, 402, 1450, 1451, 1525, 1532, 645, 1078, + 1532, 645, 722, 215, 722, 276, 1529, 1532, 1534, 838, + 839, 842, 865, 1532, 1102, 1103, 1072, 1205, 1656, 645, + 1573, 1183, 1374, 1377, 1402, 1410, 1447, 25, 1627, 1165, + 729, 665, 628, 800, 801, 804, 808, 695, 696, 1529, + 1124, 622, 1148, 1573, 18, 1628, 215, 455, 840, 865, + 237, 295, 428, 1421, 1422, 8, 22, 31, 37, 39, 40, 41, 43, 56, 57, 62, 63, 71, 74, 76, 77, 78, 79, 80, 97, 101, 102, 107, 109, 110, - 114, 115, 120, 121, 122, 127, 129, 132, 178, 184, - 185, 192, 198, 207, 209, 215, 221, 222, 229, 234, - 246, 249, 267, 272, 280, 291, 316, 321, 333, 337, - 339, 343, 344, 345, 346, 347, 355, 363, 364, 365, - 369, 370, 375, 396, 403, 408, 409, 411, 425, 453, - 454, 467, 469, 476, 477, 483, 537, 538, 544, 548, - 549, 554, 564, 568, 569, 570, 571, 581, 582, 583, - 587, 590, 605, 609, 610, 611, 612, 617, 619, 625, - 626, 641, 649, 650, 655, 656, 659, 660, 663, 664, - 1210, 1211, 1212, 1213, 1217, 1225, 1226, 1227, 1228, 1229, - 1230, 1238, 1242, 1256, 1506, 1509, 1511, 1512, 1513, 1517, - 1519, 1524, 1528, 234, 1371, 1371, 1371, 234, 1370, 214, - 1371, 1371, 1371, 864, 1371, 1371, 1371, 1569, 677, 1453, - 141, 13, 14, 104, 110, 136, 151, 173, 177, 189, - 212, 240, 246, 286, 419, 423, 439, 447, 455, 485, - 498, 499, 550, 580, 602, 604, 1530, 1586, 1590, 1591, - 1593, 1595, 1596, 1528, 380, 70, 431, 664, 1530, 792, - 793, 134, 223, 294, 1379, 1528, 1525, 217, 510, 1477, - 250, 1483, 1568, 34, 70, 188, 259, 271, 380, 466, - 741, 776, 777, 780, 781, 782, 784, 785, 786, 787, - 789, 812, 814, 820, 827, 1524, 1529, 1535, 1569, 984, - 1204, 50, 893, 200, 37, 312, 1435, 1473, 1528, 720, - 1159, 1128, 741, 823, 134, 294, 1380, 1408, 312, 426, - 503, 1465, 1466, 613, 753, 493, 758, 7, 13, 423, - 1583, 1584, 1591, 1593, 575, 1624, 1189, 250, 386, 1323, - 1324, 1353, 1354, 13, 146, 223, 519, 520, 521, 522, - 523, 524, 541, 1197, 1198, 1199, 1648, 1538, 62, 63, - 132, 211, 283, 351, 403, 470, 490, 577, 663, 1007, - 1528, 1541, 1553, 1557, 1558, 13, 26, 38, 62, 74, - 100, 102, 104, 116, 165, 169, 172, 201, 203, 211, - 213, 239, 240, 261, 283, 312, 380, 406, 417, 418, - 421, 422, 442, 490, 503, 540, 558, 624, 1007, 1041, - 1431, 1435, 1436, 1438, 1447, 1524, 1554, 758, 504, 694, - 431, 630, 1113, 1114, 1115, 504, 694, 1423, 1528, 1525, - 1569, 1408, 821, 1210, 39, 221, 222, 564, 1507, 1508, - 1526, 1684, 1684, 1684, 1684, 1684, 1184, 657, 485, 662, - 1528, 234, 944, 944, 944, 1649, 1653, 1654, 1655, 491, - 704, 240, 240, 240, 558, 1445, 1444, 331, 562, 589, - 1067, 603, 109, 1530, 1531, 1532, 1590, 1069, 843, 865, - 1528, 1068, 1073, 6, 60, 151, 364, 430, 432, 866, - 558, 236, 379, 1103, 1104, 1105, 525, 1656, 1657, 173, - 1070, 1530, 1134, 817, 1165, 1166, 1167, 1168, 1521, 656, - 729, 1528, 808, 157, 810, 1210, 807, 575, 1365, 1366, - 1521, 1148, 1365, 59, 366, 366, 446, 1625, 842, 865, - 6, 200, 1411, 1417, 1418, 1528, 1420, 656, 656, 656, - 1225, 656, 656, 656, 1210, 1259, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, - 1209, 1209, 1209, 656, 1208, 656, 656, 656, 564, 656, - 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 1210, 656, 656, 656, 656, 1257, 1258, 1517, - 1528, 656, 656, 656, 656, 656, 656, 656, 656, 656, - 1210, 1208, 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, - 1208, 564, 656, 656, 656, 564, 656, 656, 656, 564, - 1508, 656, 1209, 1208, 1208, 656, 656, 656, 656, 656, - 656, 1225, 1225, 1225, 1210, 1643, 1644, 1528, 1243, 1528, - 17, 18, 385, 388, 639, 1214, 1215, 167, 204, 256, - 268, 357, 644, 645, 646, 1218, 35, 147, 253, 276, - 343, 440, 496, 497, 512, 647, 648, 649, 650, 651, - 652, 653, 654, 1216, 1225, 73, 387, 658, 1526, 656, - 664, 178, 1528, 721, 1528, 178, 1528, 865, 721, 720, - 1530, 875, 1436, 721, 720, 1364, 1371, 608, 678, 37, - 139, 165, 168, 205, 225, 288, 312, 417, 426, 441, - 459, 503, 506, 536, 1454, 1459, 1460, 1524, 1569, 90, - 663, 765, 766, 767, 768, 1528, 417, 1594, 473, 473, - 556, 561, 605, 621, 1209, 383, 1598, 555, 376, 1600, - 69, 503, 1597, 116, 621, 1599, 575, 376, 658, 20, - 644, 1309, 1310, 1576, 1528, 161, 1210, 236, 1100, 511, - 91, 426, 1478, 52, 89, 294, 1489, 1521, 1570, 1571, - 815, 1528, 200, 360, 790, 1529, 1529, 1528, 783, 161, - 776, 662, 671, 826, 665, 1156, 657, 1210, 278, 281, - 428, 894, 896, 663, 675, 1525, 288, 1160, 1531, 1533, - 1161, 1162, 1521, 621, 1125, 1569, 601, 826, 250, 1367, - 1381, 1382, 1521, 1468, 52, 1467, 658, 1526, 58, 68, - 82, 94, 95, 96, 113, 332, 350, 481, 543, 560, - 759, 761, 383, 1594, 376, 200, 376, 479, 1626, 1625, - 596, 1631, 1632, 1355, 50, 277, 1328, 1329, 1330, 200, - 1194, 197, 286, 1200, 651, 1201, 1202, 1204, 1199, 132, - 1540, 1556, 1558, 493, 470, 664, 37, 132, 494, 644, - 1008, 1009, 1392, 1530, 197, 1392, 1564, 1530, 1543, 663, - 1530, 37, 132, 1011, 1012, 1530, 664, 1544, 1542, 1392, - 504, 172, 276, 628, 1442, 656, 115, 173, 203, 418, - 558, 580, 621, 1442, 13, 954, 1530, 1328, 200, 253, - 1437, 1439, 72, 536, 197, 536, 555, 511, 72, 536, - 13, 45, 98, 103, 255, 330, 394, 513, 552, 1425, - 1426, 1427, 694, 225, 536, 695, 536, 1328, 1442, 1439, - 288, 164, 75, 420, 555, 579, 197, 1203, 536, 616, - 1116, 1117, 1116, 378, 635, 92, 658, 1116, 1116, 1366, - 1100, 826, 150, 658, 377, 1687, 551, 1688, 260, 462, - 1686, 657, 1632, 1634, 1635, 1636, 1637, 1190, 163, 669, - 1216, 1528, 720, 720, 11, 203, 418, 580, 708, 1204, - 1651, 1657, 1665, 1670, 1671, 1672, 1678, 203, 708, 1650, - 1657, 1665, 1672, 1678, 1652, 944, 944, 944, 944, 944, - 1446, 1451, 1507, 1528, 132, 941, 942, 951, 952, 1016, - 118, 1209, 663, 722, 6, 844, 722, 382, 117, 861, - 861, 861, 4, 1521, 1105, 484, 621, 721, 1657, 1135, - 1136, 1366, 818, 819, 253, 658, 400, 1176, 1178, 1179, - 730, 731, 1210, 1210, 741, 161, 801, 684, 182, 427, - 658, 1124, 1365, 61, 182, 186, 197, 329, 427, 1151, - 1152, 1153, 59, 446, 844, 861, 1368, 1369, 1521, 1522, - 1528, 658, 1414, 664, 1419, 1210, 1210, 13, 146, 1250, - 1311, 1250, 1250, 1250, 627, 1261, 1210, 1210, 1256, 1256, - 1210, 1210, 1210, 1210, 1223, 1224, 1210, 1210, 1210, 1210, - 146, 1250, 1311, 657, 129, 192, 221, 291, 370, 587, - 657, 1337, 1340, 1341, 657, 1210, 1210, 1210, 1210, 1517, - 1643, 123, 124, 125, 126, 127, 226, 227, 228, 229, - 333, 335, 336, 337, 344, 425, 482, 483, 625, 640, - 641, 1306, 1307, 1210, 1256, 119, 122, 568, 571, 1308, - 146, 1245, 1210, 1210, 1210, 1210, 1306, 1256, 1210, 1256, - 1258, 10, 658, 664, 146, 1250, 1210, 1210, 146, 1250, - 1210, 1210, 1256, 1256, 1256, 1210, 1210, 1210, 1256, 1213, - 1210, 1210, 1210, 1210, 1210, 1210, 657, 1210, 1250, 1250, - 1210, 1210, 146, 1250, 1210, 1307, 1307, 1210, 48, 269, - 576, 1210, 1210, 657, 1518, 1519, 1528, 1250, 1250, 1210, - 1210, 1210, 657, 658, 657, 485, 656, 1640, 1641, 1210, - 663, 1244, 1530, 664, 1210, 1210, 1210, 1212, 185, 369, - 582, 598, 1216, 13, 19, 1212, 1219, 1213, 1213, 656, - 1225, 1213, 1213, 1213, 1213, 276, 1213, 1213, 249, 1213, - 249, 1213, 1213, 1213, 1213, 1213, 35, 253, 276, 440, - 1530, 1225, 1210, 1231, 1528, 664, 376, 875, 1589, 1591, - 367, 623, 876, 877, 165, 1533, 1605, 1365, 1362, 663, - 679, 680, 288, 288, 288, 288, 52, 288, 694, 288, - 658, 1203, 1455, 122, 568, 571, 760, 770, 1242, 1511, - 1517, 1530, 658, 644, 555, 656, 1611, 1533, 1611, 1611, - 1611, 1531, 1532, 1533, 1606, 1610, 203, 418, 558, 1592, - 173, 177, 189, 419, 447, 455, 499, 550, 1596, 1528, - 190, 360, 1528, 1577, 1578, 234, 567, 1381, 1525, 230, - 605, 1210, 1479, 1171, 283, 1488, 1310, 658, 818, 200, - 1528, 1210, 293, 662, 34, 293, 453, 629, 1365, 1205, - 75, 656, 901, 902, 901, 902, 401, 904, 218, 263, - 1530, 33, 575, 1474, 658, 575, 658, 575, 1126, 1365, - 824, 1382, 1378, 400, 1275, 1276, 575, 1470, 694, 1466, - 658, 644, 197, 658, 1533, 1532, 1607, 203, 418, 1592, - 1528, 13, 146, 1639, 153, 390, 1348, 1349, 1356, 1325, - 1200, 291, 370, 474, 587, 1331, 1332, 1509, 1528, 152, - 485, 656, 660, 1196, 1262, 1263, 1264, 1265, 1266, 1277, - 1278, 1290, 628, 1312, 602, 253, 658, 1210, 1515, 1528, - 658, 1539, 1392, 1591, 1528, 73, 1014, 1210, 1533, 375, - 403, 564, 1565, 257, 431, 1559, 1560, 1561, 1562, 211, - 283, 490, 1555, 1392, 1528, 577, 1545, 1556, 658, 1547, - 13, 37, 132, 376, 1210, 1566, 536, 253, 1440, 1203, - 1203, 651, 944, 721, 721, 721, 1521, 721, 1521, 288, - 348, 536, 1434, 1434, 1442, 1528, 721, 1442, 1532, 1437, - 1442, 1525, 721, 1442, 254, 553, 187, 197, 1428, 658, - 172, 536, 1437, 1521, 1439, 1437, 1437, 1210, 1442, 1442, - 1442, 1111, 445, 526, 1118, 1119, 1110, 508, 1115, 1263, - 822, 1507, 405, 1689, 1324, 1330, 1638, 178, 701, 1589, - 1606, 203, 1671, 944, 944, 1204, 173, 944, 1657, 1530, - 1528, 1528, 1528, 1521, 942, 73, 1007, 142, 1530, 83, - 97, 265, 341, 366, 429, 525, 724, 726, 436, 591, - 862, 863, 242, 858, 859, 860, 867, 875, 877, 656, - 1525, 27, 320, 852, 853, 854, 867, 868, 869, 875, - 877, 845, 846, 852, 1066, 133, 252, 944, 1072, 658, - 404, 1137, 742, 132, 1169, 1528, 1167, 1521, 890, 1178, - 240, 263, 1039, 1180, 657, 658, 809, 56, 627, 802, - 804, 149, 235, 237, 295, 297, 298, 299, 300, 301, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, - 314, 315, 443, 444, 685, 686, 693, 1366, 197, 1154, - 603, 1152, 83, 361, 437, 592, 855, 856, 857, 867, - 871, 872, 873, 874, 875, 877, 607, 840, 658, 1415, - 1275, 664, 1419, 1418, 200, 651, 1528, 658, 657, 1250, - 657, 1251, 657, 657, 657, 1210, 157, 627, 1260, 20, - 657, 608, 657, 657, 657, 658, 657, 658, 657, 658, - 658, 658, 658, 608, 658, 1239, 657, 651, 657, 658, - 658, 657, 657, 657, 657, 200, 658, 657, 658, 1241, - 657, 658, 658, 658, 650, 657, 658, 657, 657, 656, - 1517, 1528, 1250, 657, 657, 657, 1250, 657, 658, 657, - 657, 657, 657, 657, 657, 658, 657, 253, 657, 658, - 658, 657, 658, 658, 657, 657, 657, 658, 200, 658, - 1250, 657, 657, 658, 658, 658, 657, 200, 1210, 200, - 1210, 200, 1210, 200, 657, 658, 657, 657, 657, 657, - 658, 20, 274, 658, 1030, 657, 1256, 1281, 1282, 1283, - 656, 1186, 1187, 596, 1645, 661, 1555, 494, 1528, 185, - 369, 582, 598, 656, 18, 1210, 1643, 171, 1316, 1213, - 1210, 1210, 1213, 656, 1225, 1213, 1204, 1235, 1236, 1237, - 656, 664, 1528, 1521, 876, 658, 1392, 1393, 658, 54, - 461, 1106, 1365, 1530, 658, 694, 1460, 1365, 1461, 768, - 771, 772, 767, 371, 477, 769, 1528, 1612, 1613, 575, - 232, 630, 658, 1588, 651, 1521, 1528, 1604, 1604, 1604, - 190, 204, 266, 268, 360, 415, 644, 645, 646, 1579, - 1581, 1312, 794, 1375, 1533, 1172, 1173, 1174, 1175, 1521, - 241, 294, 431, 635, 1572, 1571, 250, 813, 828, 830, - 829, 656, 1204, 1337, 547, 905, 895, 12, 897, 1210, - 1525, 1533, 1533, 1162, 1521, 1365, 182, 427, 606, 1129, - 1130, 1131, 1210, 485, 493, 612, 613, 656, 936, 1383, - 1386, 656, 129, 192, 221, 291, 370, 587, 1336, 13, - 1469, 761, 760, 1591, 212, 200, 658, 1604, 1604, 1604, - 1633, 564, 1527, 1527, 663, 1350, 1351, 1352, 1530, 1210, - 1326, 1516, 176, 474, 374, 658, 1289, 1528, 105, 243, - 260, 272, 354, 469, 541, 1273, 1274, 658, 1521, 1289, - 1313, 214, 1317, 495, 1202, 1205, 1205, 664, 1556, 197, - 1566, 197, 132, 1013, 1015, 1530, 1392, 656, 656, 274, - 378, 635, 658, 658, 664, 664, 664, 1558, 1210, 1559, - 1546, 1548, 1549, 1525, 200, 1441, 1525, 1210, 657, 1528, - 720, 1442, 426, 1328, 1427, 1440, 1442, 1437, 1521, 1442, - 1442, 658, 601, 1120, 493, 741, 658, 197, 1690, 1328, - 940, 941, 630, 1587, 944, 721, 1528, 721, 944, 944, - 705, 585, 608, 1052, 376, 376, 697, 1393, 1393, 352, - 1525, 525, 525, 525, 525, 525, 484, 1525, 1525, 1393, - 658, 860, 115, 224, 392, 403, 410, 509, 605, 706, - 707, 1393, 1393, 658, 854, 847, 848, 867, 868, 869, - 6, 12, 14, 16, 28, 30, 60, 65, 66, 71, - 83, 91, 101, 118, 135, 143, 144, 151, 159, 165, - 175, 195, 238, 240, 247, 262, 286, 319, 338, 342, - 381, 386, 393, 395, 400, 403, 434, 448, 449, 450, - 451, 475, 533, 534, 535, 540, 556, 559, 578, 583, - 596, 888, 947, 949, 951, 952, 1078, 1082, 1084, 1087, - 1093, 1094, 1095, 1097, 1098, 1320, 1524, 1521, 376, 716, - 1074, 1136, 197, 131, 740, 743, 1177, 656, 1210, 567, - 805, 804, 644, 644, 644, 644, 644, 644, 644, 644, - 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, - 644, 644, 644, 644, 644, 658, 603, 1393, 1393, 1393, - 1393, 658, 857, 287, 183, 849, 850, 851, 867, 868, - 869, 870, 873, 874, 875, 877, 1369, 1528, 608, 1412, - 1528, 1263, 664, 1419, 249, 1210, 657, 1210, 567, 1210, - 1210, 161, 37, 63, 119, 122, 130, 148, 251, 356, - 501, 571, 600, 1252, 1008, 1224, 1210, 1223, 1256, 1210, - 1210, 1008, 1252, 1256, 657, 249, 249, 1210, 1210, 1210, - 1256, 1210, 1210, 1210, 1210, 1210, 1213, 657, 657, 1210, - 1210, 1210, 1210, 1210, 1210, 1256, 249, 1210, 1210, 1210, - 657, 1210, 1210, 1210, 1210, 200, 1210, 200, 1210, 200, - 1210, 1210, 1210, 37, 63, 1025, 1026, 1027, 1028, 1029, - 1337, 1336, 657, 657, 1193, 1194, 1195, 1646, 1647, 1648, - 1186, 657, 485, 1639, 1530, 1210, 1643, 1212, 657, 658, - 657, 1225, 1306, 1306, 18, 1210, 1643, 1316, 1210, 657, - 658, 1255, 1256, 1528, 1363, 1591, 953, 1530, 1533, 1106, - 680, 197, 630, 1456, 1457, 644, 658, 657, 658, 1606, - 50, 620, 630, 1608, 7, 1610, 664, 664, 575, 575, - 575, 1580, 1328, 741, 1383, 658, 1176, 1178, 1527, 635, - 283, 89, 788, 818, 820, 823, 821, 898, 899, 900, - 1528, 910, 1213, 50, 656, 912, 902, 644, 656, 575, - 200, 1132, 1130, 161, 937, 1384, 656, 1389, 1394, 1389, - 657, 936, 1385, 1514, 1515, 1518, 1528, 1387, 1305, 1528, - 644, 383, 1605, 1532, 200, 200, 200, 1183, 1357, 1530, - 658, 658, 21, 137, 1327, 1332, 1333, 176, 1332, 1332, - 1279, 1284, 1289, 1262, 260, 260, 389, 1291, 272, 469, - 1273, 1291, 1262, 1264, 1275, 1286, 1287, 1210, 50, 219, - 1314, 340, 20, 1206, 1525, 1528, 651, 1528, 670, 1533, - 564, 564, 431, 452, 488, 1563, 1561, 1560, 1392, 1547, - 658, 1551, 1553, 1557, 129, 192, 291, 370, 587, 1338, - 1432, 169, 624, 370, 1441, 1312, 1437, 1119, 296, 693, - 1121, 1404, 1405, 1518, 161, 1336, 334, 7, 1528, 656, - 465, 1679, 1666, 721, 196, 49, 218, 478, 1058, 1058, - 376, 1521, 1521, 276, 656, 879, 882, 946, 948, 949, - 1015, 1009, 118, 118, 133, 252, 221, 291, 370, 587, - 878, 1339, 1340, 1524, 860, 1525, 1525, 1525, 1525, 1336, - 1525, 1525, 657, 658, 878, 878, 854, 658, 848, 81, - 93, 400, 962, 972, 973, 1039, 1043, 1044, 1099, 1393, - 1099, 400, 1393, 1393, 1099, 1393, 400, 400, 1393, 1393, - 575, 142, 1393, 261, 556, 196, 400, 416, 1039, 1099, - 261, 1393, 400, 556, 142, 1393, 1393, 1393, 1393, 1393, - 1099, 400, 50, 1393, 1393, 890, 1393, 400, 402, 20, - 575, 644, 1108, 400, 400, 1393, 1393, 1393, 1393, 145, - 330, 1528, 1393, 1393, 400, 1393, 947, 658, 887, 888, - 1082, 656, 664, 961, 974, 1520, 1528, 1392, 1658, 87, - 480, 449, 1075, 13, 75, 1138, 99, 179, 748, 774, - 1528, 161, 776, 662, 656, 416, 1302, 1303, 1304, 1528, - 741, 1210, 656, 656, 656, 1336, 1525, 1525, 1338, 1525, - 1336, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1336, 1336, - 1525, 111, 366, 505, 1512, 1525, 1336, 686, 1525, 1337, - 878, 878, 857, 214, 1393, 658, 851, 664, 1263, 1312, - 1419, 1312, 1210, 657, 1210, 567, 656, 999, 1000, 1000, - 1000, 656, 994, 995, 999, 1254, 1000, 251, 1000, 251, - 657, 657, 657, 20, 1220, 657, 20, 657, 657, 657, - 1240, 1210, 1210, 657, 657, 658, 657, 386, 1247, 658, - 658, 657, 658, 657, 253, 1232, 1233, 657, 657, 657, - 657, 658, 657, 657, 1210, 657, 197, 657, 657, 658, - 657, 658, 658, 657, 1210, 657, 1210, 657, 1210, 657, - 657, 657, 656, 1020, 1020, 21, 137, 467, 649, 1022, - 1023, 1024, 658, 658, 1312, 1201, 1648, 657, 1635, 1282, - 1642, 664, 1062, 657, 1256, 1212, 657, 658, 657, 1205, - 1237, 657, 1458, 431, 58, 68, 82, 94, 95, 96, - 113, 332, 350, 463, 481, 543, 560, 773, 772, 1613, - 630, 1616, 403, 564, 1530, 383, 651, 651, 1606, 1606, - 1606, 656, 795, 376, 1399, 1174, 1521, 1178, 236, 1181, - 1484, 791, 1528, 811, 1529, 811, 825, 825, 825, 657, - 658, 1205, 896, 400, 913, 914, 1337, 898, 1533, 349, - 453, 1197, 1390, 1391, 1518, 1395, 658, 656, 1386, 657, - 657, 658, 664, 1631, 657, 658, 760, 200, 1607, 1607, - 1607, 1007, 1010, 1351, 1516, 1333, 596, 657, 1635, 1285, - 661, 260, 1291, 1291, 1277, 260, 376, 608, 1310, 1197, - 1318, 1516, 1315, 1323, 1525, 1528, 664, 657, 657, 84, - 588, 431, 1566, 1550, 1552, 1328, 1433, 1442, 644, 658, - 658, 1403, 1392, 629, 1532, 1673, 130, 251, 433, 542, - 957, 656, 721, 709, 118, 1521, 699, 700, 1521, 276, - 936, 958, 959, 960, 961, 962, 886, 887, 658, 948, - 707, 848, 1061, 1520, 944, 66, 196, 416, 597, 971, - 1038, 944, 1039, 1040, 1040, 234, 943, 132, 1528, 1520, - 1157, 1338, 1336, 1370, 1336, 13, 1083, 1091, 1092, 1528, - 1157, 1525, 1525, 1007, 1393, 1336, 263, 1371, 263, 1370, - 1370, 953, 1092, 1393, 190, 266, 366, 956, 1336, 132, - 1528, 1338, 1338, 1370, 1157, 1321, 1322, 1518, 132, 1336, - 132, 1336, 1342, 889, 1525, 1157, 1521, 1157, 1157, 86, - 88, 132, 155, 191, 394, 438, 955, 132, 1336, 132, - 1336, 132, 1336, 1336, 1342, 1083, 950, 6, 151, 1095, - 958, 1528, 9, 190, 1107, 439, 970, 971, 1032, 975, - 664, 132, 1339, 1525, 1528, 656, 1659, 1216, 1622, 24, - 174, 710, 575, 143, 159, 712, 13, 656, 1139, 216, - 658, 744, 90, 112, 662, 1083, 657, 658, 806, 689, - 690, 1336, 691, 692, 1336, 687, 688, 1336, 1528, 878, - 851, 1528, 1312, 1323, 1306, 1210, 129, 291, 370, 587, - 1253, 370, 656, 995, 1001, 63, 119, 122, 130, 148, - 193, 251, 353, 356, 433, 571, 600, 987, 988, 1221, - 1252, 657, 1306, 1306, 1210, 50, 487, 1246, 1210, 1210, - 1256, 46, 354, 657, 630, 1234, 1210, 1306, 1210, 1210, - 1210, 1210, 657, 657, 657, 1337, 657, 1030, 1025, 1023, - 1025, 1026, 1336, 1317, 1193, 1640, 1528, 657, 1256, 1206, - 181, 286, 212, 564, 20, 608, 1609, 456, 1614, 1614, - 1614, 132, 1210, 1397, 1398, 157, 158, 796, 154, 1181, - 270, 236, 454, 1490, 658, 900, 657, 218, 263, 915, - 657, 658, 657, 1201, 658, 1392, 1396, 1397, 1394, 1388, - 1386, 1514, 1528, 890, 1528, 1607, 1009, 1358, 1327, 1639, - 1310, 1265, 1262, 1277, 260, 260, 1262, 1277, 1267, 1268, - 1300, 1301, 1201, 631, 632, 658, 1319, 1327, 1210, 1328, - 651, 1551, 1556, 1328, 1525, 693, 1405, 1312, 1398, 732, - 733, 734, 1528, 511, 1680, 9, 33, 835, 376, 634, - 698, 656, 656, 1521, 657, 657, 658, 883, 1490, 948, - 1157, 656, 263, 263, 1040, 944, 1061, 1528, 944, 944, - 1216, 151, 493, 1083, 1520, 1080, 658, 1337, 1009, 1525, - 1370, 1091, 1520, 1520, 630, 1525, 974, 1083, 658, 1327, - 893, 1083, 1088, 1083, 656, 657, 1528, 1521, 36, 37, - 42, 44, 46, 47, 119, 122, 130, 148, 166, 191, - 193, 207, 208, 251, 280, 289, 290, 292, 326, 327, - 328, 345, 346, 347, 353, 356, 372, 373, 408, 409, - 433, 489, 493, 507, 565, 568, 571, 572, 573, 574, - 614, 615, 641, 985, 986, 987, 988, 989, 990, 991, - 992, 1528, 1528, 1660, 20, 414, 1210, 1210, 376, 716, - 721, 376, 83, 717, 1140, 239, 197, 1528, 985, 1005, - 197, 197, 657, 1303, 567, 657, 658, 657, 658, 657, - 658, 277, 1334, 657, 657, 657, 657, 657, 22, 37, - 51, 594, 1007, 1017, 1018, 658, 370, 1000, 994, 63, - 1000, 251, 1222, 657, 657, 657, 657, 1248, 1507, 657, - 657, 658, 657, 340, 265, 426, 657, 657, 657, 657, - 657, 657, 1021, 657, 658, 1314, 657, 18, 1462, 383, - 1525, 67, 258, 362, 528, 545, 636, 1602, 1603, 630, - 1615, 1615, 1615, 657, 658, 741, 792, 1400, 250, 1528, - 656, 903, 897, 916, 1528, 914, 938, 1391, 1398, 657, - 1634, 75, 1491, 1280, 376, 1270, 1277, 1277, 376, 1272, - 1210, 656, 1298, 1299, 1288, 1516, 418, 1343, 1323, 657, - 658, 735, 1525, 244, 253, 391, 736, 737, 738, 739, - 136, 246, 602, 836, 480, 1530, 656, 1059, 1060, 1528, - 1059, 657, 881, 880, 960, 20, 939, 1085, 1210, 944, - 1061, 1528, 608, 1051, 585, 1061, 1061, 178, 132, 132, - 974, 1151, 1092, 1014, 1520, 1106, 558, 1107, 1079, 1322, - 1089, 1091, 1081, 1461, 656, 1033, 999, 999, 1000, 1000, - 994, 412, 656, 994, 994, 1018, 63, 614, 987, 989, - 1018, 1018, 63, 615, 615, 618, 994, 656, 1000, 1000, - 1000, 1018, 999, 1000, 976, 994, 618, 999, 1018, 37, - 999, 1019, 999, 999, 1000, 1001, 664, 657, 658, 1661, - 1662, 1306, 503, 1525, 150, 1076, 1143, 1528, 13, 656, - 1141, 745, 1014, 132, 775, 751, 752, 1336, 746, 747, - 741, 690, 692, 688, 474, 1332, 1413, 1017, 1008, 1019, - 370, 1018, 1249, 1516, 1210, 340, 180, 657, 1336, 1323, - 143, 564, 564, 564, 18, 1601, 212, 317, 318, 322, - 323, 324, 1617, 1618, 1398, 263, 558, 1204, 906, 656, - 612, 917, 1193, 160, 170, 384, 563, 1492, 1493, 279, - 1494, 1640, 1269, 608, 1271, 608, 1305, 195, 236, 607, - 1293, 1294, 1297, 1193, 1327, 1528, 1353, 1354, 1334, 1674, - 734, 1005, 657, 658, 734, 376, 710, 382, 1059, 657, - 658, 1327, 656, 657, 1634, 946, 656, 936, 401, 656, - 1086, 657, 1061, 1051, 585, 1058, 963, 1058, 965, 966, - 122, 568, 571, 649, 650, 1510, 1511, 1107, 1521, 1157, - 1090, 1129, 657, 1034, 1528, 316, 1035, 501, 600, 642, - 996, 997, 998, 1063, 1507, 996, 996, 1018, 618, 996, - 1063, 1018, 996, 28, 73, 83, 132, 206, 369, 376, - 416, 489, 597, 977, 978, 1002, 1003, 1004, 1031, 1216, - 1524, 527, 993, 1018, 1019, 1018, 1019, 996, 996, 1528, - 1528, 485, 656, 1663, 711, 718, 719, 657, 658, 1142, - 516, 518, 749, 750, 751, 754, 1216, 1528, 1210, 1182, - 176, 474, 464, 1416, 657, 658, 1327, 657, 657, 1328, - 64, 1602, 383, 1336, 1336, 1336, 1512, 370, 649, 1335, - 1618, 602, 1521, 910, 546, 911, 908, 909, 1528, 253, - 273, 83, 91, 118, 240, 319, 338, 361, 556, 933, - 934, 935, 1436, 50, 50, 160, 50, 1493, 529, 563, - 1495, 1496, 1210, 656, 1210, 656, 657, 1039, 1039, 1294, - 1344, 1200, 465, 1681, 738, 1204, 715, 716, 656, 657, - 83, 262, 630, 1046, 1050, 1054, 1057, 1524, 1060, 370, - 1047, 1049, 1054, 1056, 886, 936, 884, 1337, 913, 969, - 967, 1058, 656, 964, 656, 656, 1512, 1512, 890, 250, - 657, 658, 201, 399, 502, 376, 1036, 998, 657, 658, - 657, 1013, 1525, 365, 1006, 1510, 15, 602, 132, 263, - 20, 1004, 263, 369, 1392, 644, 1188, 1184, 630, 1664, - 530, 713, 776, 1528, 416, 1144, 1145, 1528, 658, 776, - 199, 176, 1201, 1516, 1343, 291, 370, 1406, 1407, 1518, - 1275, 1205, 1337, 657, 658, 919, 566, 1393, 1393, 142, - 142, 1393, 1393, 1393, 1393, 656, 928, 935, 165, 1507, - 1507, 50, 1507, 50, 50, 1496, 1305, 1305, 197, 1292, - 1292, 656, 1675, 723, 1667, 712, 706, 585, 608, 1045, - 1048, 1053, 1054, 1055, 1525, 1393, 397, 1096, 1097, 1098, - 1057, 1392, 1327, 657, 1096, 1056, 883, 657, 1631, 657, - 656, 656, 968, 1059, 656, 1059, 1059, 656, 1528, 136, - 602, 1018, 1507, 1018, 656, 1207, 365, 613, 656, 132, - 1339, 1525, 1528, 370, 657, 55, 66, 283, 1210, 162, - 714, 657, 658, 750, 1327, 1200, 658, 1392, 1485, 657, - 907, 909, 656, 921, 923, 918, 1525, 1525, 1393, 1393, - 1339, 1339, 1337, 1530, 547, 929, 930, 1393, 1507, 1507, - 1507, 657, 657, 214, 260, 386, 1296, 1295, 1204, 1345, - 1346, 1347, 1005, 724, 725, 1622, 1682, 1521, 717, 657, - 1058, 1058, 1096, 1055, 1336, 1524, 1098, 1097, 132, 1339, - 1525, 1528, 885, 1059, 1059, 656, 657, 1059, 657, 657, - 913, 54, 366, 461, 493, 1037, 1037, 657, 1337, 1207, - 984, 1634, 66, 383, 66, 1210, 1145, 1407, 1398, 1010, - 911, 656, 922, 923, 924, 325, 920, 923, 1525, 1525, - 931, 657, 658, 953, 50, 50, 656, 656, 1210, 657, - 658, 1676, 140, 776, 197, 150, 1634, 657, 657, 1059, - 1045, 657, 1046, 1047, 657, 5, 132, 369, 376, 376, - 657, 657, 383, 383, 1486, 657, 658, 325, 926, 927, - 1213, 932, 1530, 930, 1302, 1304, 1205, 1347, 723, 1204, - 718, 1032, 1045, 657, 1045, 602, 136, 404, 622, 979, - 474, 1497, 923, 658, 925, 933, 657, 657, 1677, 1668, - 1045, 1037, 1037, 83, 597, 980, 981, 982, 232, 1491, - 927, 657, 776, 156, 1525, 263, 982, 50, 1494, 476, - 1507, 236, 1498, 1669, 370, 656, 1500, 776, 279, 474, - 1499, 657, 663, 1501, 1502, 1518, 493, 1503, 1530, 657, - 658, 1504, 1505, 1518, 1502, 658, 1392, 1505, 1204, 1398, - 1205 + 114, 115, 120, 121, 122, 127, 129, 132, 179, 185, + 186, 193, 199, 208, 210, 216, 222, 223, 230, 235, + 247, 250, 268, 273, 281, 292, 317, 322, 334, 338, + 340, 344, 345, 346, 347, 348, 356, 364, 365, 366, + 370, 371, 376, 397, 404, 409, 410, 412, 426, 454, + 455, 468, 470, 477, 478, 484, 538, 539, 545, 549, + 550, 555, 565, 569, 570, 571, 572, 582, 583, 584, + 588, 591, 606, 610, 611, 612, 613, 618, 620, 626, + 627, 642, 650, 651, 656, 657, 660, 661, 664, 665, + 1211, 1212, 1213, 1214, 1218, 1226, 1227, 1228, 1229, 1230, + 1231, 1239, 1243, 1257, 1510, 1513, 1515, 1516, 1517, 1521, + 1523, 1528, 1532, 235, 1372, 1372, 1372, 235, 1371, 215, + 1372, 1372, 1372, 865, 1372, 1372, 1372, 1573, 678, 1454, + 142, 13, 14, 104, 110, 136, 152, 174, 178, 190, + 213, 241, 247, 287, 420, 424, 440, 448, 456, 486, + 499, 500, 551, 581, 603, 605, 1534, 1590, 1594, 1595, + 1597, 1599, 1600, 1532, 381, 70, 432, 665, 1534, 793, + 794, 134, 224, 295, 1380, 1532, 1529, 218, 511, 1481, + 251, 1487, 1572, 34, 70, 189, 260, 272, 381, 467, + 742, 777, 778, 781, 782, 783, 785, 786, 787, 788, + 790, 813, 815, 821, 828, 1528, 1533, 1539, 1573, 985, + 1205, 50, 894, 201, 37, 313, 1436, 1477, 1532, 721, + 1160, 1129, 742, 824, 134, 295, 1381, 1409, 313, 427, + 504, 1469, 1470, 614, 754, 494, 759, 7, 13, 424, + 1587, 1588, 1595, 1597, 576, 1628, 1190, 251, 387, 1324, + 1325, 1354, 1355, 13, 147, 224, 520, 521, 522, 523, + 524, 525, 542, 1198, 1199, 1200, 1652, 1542, 62, 63, + 132, 212, 284, 352, 404, 471, 491, 578, 664, 1008, + 1532, 1545, 1557, 1561, 1562, 13, 26, 38, 62, 74, + 100, 102, 104, 116, 166, 170, 173, 202, 204, 212, + 214, 240, 241, 262, 284, 313, 381, 407, 418, 419, + 422, 423, 443, 491, 504, 541, 559, 625, 1008, 1042, + 1432, 1436, 1437, 1439, 1448, 1528, 1558, 759, 505, 695, + 432, 631, 1114, 1115, 1116, 505, 695, 1424, 1532, 1529, + 1573, 1409, 822, 1211, 39, 222, 223, 565, 1511, 1512, + 1530, 1688, 1688, 1688, 1688, 1688, 1185, 658, 486, 663, + 1532, 235, 945, 945, 945, 1653, 1657, 1658, 1659, 492, + 705, 241, 241, 241, 559, 1446, 1445, 332, 563, 590, + 1068, 604, 109, 1534, 1535, 1536, 1594, 1070, 844, 866, + 1532, 1069, 1074, 6, 60, 152, 365, 431, 433, 867, + 559, 237, 380, 1104, 1105, 1106, 526, 1660, 1661, 174, + 1071, 1534, 1135, 818, 1166, 1167, 1168, 1169, 1525, 657, + 730, 1532, 809, 158, 811, 1211, 808, 576, 1366, 1367, + 1525, 1149, 1366, 59, 367, 367, 447, 1629, 843, 866, + 6, 201, 1412, 1418, 1419, 1532, 1421, 657, 657, 657, + 1226, 657, 657, 657, 1211, 1260, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 1210, 1210, 1210, 657, 1209, 657, 657, 657, 565, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 1211, 657, 657, 657, 657, 1258, 1259, 1521, + 1532, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 1211, 1209, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 1209, 565, 657, 657, 657, 565, 657, 657, 657, 565, + 1512, 657, 1210, 1209, 1209, 657, 657, 657, 657, 657, + 657, 1226, 1226, 1226, 1211, 1647, 1648, 1532, 1244, 1532, + 17, 18, 386, 389, 640, 1215, 1216, 168, 205, 257, + 269, 358, 645, 646, 647, 1219, 35, 148, 254, 277, + 344, 441, 497, 498, 513, 648, 649, 650, 651, 652, + 653, 654, 655, 1217, 1226, 73, 388, 659, 1530, 657, + 665, 179, 1532, 722, 1532, 179, 1532, 866, 722, 721, + 1534, 876, 1437, 722, 721, 1365, 1372, 609, 679, 37, + 140, 166, 169, 206, 226, 289, 313, 418, 427, 442, + 460, 504, 507, 537, 1455, 1460, 1461, 1528, 1573, 90, + 664, 766, 767, 768, 769, 1532, 418, 1598, 474, 474, + 557, 562, 606, 622, 1210, 384, 1602, 556, 377, 1604, + 69, 504, 1601, 116, 622, 1603, 576, 377, 659, 20, + 645, 1310, 1311, 1580, 1532, 162, 1211, 237, 1101, 512, + 91, 427, 1482, 52, 89, 295, 1493, 1525, 1574, 1575, + 816, 1532, 201, 361, 791, 1533, 1533, 1532, 784, 162, + 777, 663, 672, 827, 666, 1157, 658, 1211, 279, 282, + 429, 895, 897, 664, 676, 1529, 289, 1161, 1535, 1537, + 1162, 1163, 1525, 622, 1126, 1573, 602, 827, 251, 1368, + 1382, 1383, 1525, 1472, 52, 1471, 659, 1530, 58, 68, + 82, 94, 95, 96, 113, 333, 351, 482, 544, 561, + 760, 762, 384, 1598, 377, 201, 377, 480, 1630, 1629, + 597, 1635, 1636, 1356, 50, 278, 1329, 1330, 1331, 201, + 1195, 198, 287, 1201, 652, 1202, 1203, 1205, 1200, 132, + 1544, 1560, 1562, 494, 471, 665, 37, 132, 495, 645, + 1009, 1010, 1393, 1534, 198, 1393, 1568, 1534, 1547, 664, + 1534, 37, 132, 1012, 1013, 1534, 665, 1548, 1546, 1393, + 505, 173, 277, 629, 1443, 657, 115, 174, 204, 419, + 559, 581, 622, 1443, 13, 955, 1534, 1329, 201, 254, + 1438, 1440, 72, 537, 198, 537, 556, 512, 72, 537, + 13, 45, 98, 103, 256, 331, 395, 514, 553, 1426, + 1427, 1428, 695, 226, 537, 696, 537, 1329, 1443, 1440, + 289, 165, 75, 421, 556, 580, 198, 1204, 537, 617, + 1117, 1118, 1117, 379, 636, 92, 659, 1117, 1117, 1367, + 1101, 827, 151, 659, 378, 1691, 552, 1692, 261, 463, + 1690, 658, 1636, 1638, 1639, 1640, 1641, 1191, 164, 670, + 1217, 1532, 721, 721, 11, 204, 419, 581, 709, 1205, + 1655, 1661, 1669, 1674, 1675, 1676, 1682, 204, 709, 1654, + 1661, 1669, 1676, 1682, 1656, 945, 945, 945, 945, 945, + 1447, 1452, 1511, 1532, 132, 942, 943, 952, 953, 1017, + 118, 1210, 664, 723, 6, 845, 723, 383, 117, 862, + 862, 862, 4, 1525, 1106, 485, 622, 722, 1661, 1136, + 1137, 1367, 819, 820, 254, 659, 401, 1177, 1179, 1180, + 731, 732, 1211, 1211, 742, 162, 802, 685, 183, 428, + 659, 1125, 1366, 61, 183, 187, 198, 330, 428, 1152, + 1153, 1154, 59, 447, 845, 862, 1369, 1370, 1525, 1526, + 1532, 659, 1415, 665, 1420, 1211, 1211, 13, 147, 1251, + 1312, 1251, 1251, 1251, 628, 1262, 1211, 1211, 1257, 1257, + 1211, 1211, 1211, 1211, 1224, 1225, 1211, 1211, 1211, 1211, + 147, 1251, 1312, 658, 129, 193, 222, 292, 371, 588, + 658, 1338, 1341, 1342, 658, 1211, 1211, 1211, 1211, 1521, + 1647, 123, 124, 125, 126, 127, 227, 228, 229, 230, + 334, 336, 337, 338, 345, 426, 483, 484, 626, 641, + 642, 1307, 1308, 1211, 1257, 119, 122, 569, 572, 1309, + 147, 1246, 1211, 1211, 1211, 1211, 1307, 1257, 1211, 1257, + 1259, 10, 659, 665, 147, 1251, 1211, 1211, 147, 1251, + 1211, 1211, 1257, 1257, 1257, 1211, 1211, 1211, 1257, 1214, + 1211, 1211, 1211, 1211, 1211, 1211, 658, 1211, 1251, 1251, + 1211, 1211, 147, 1251, 1211, 1308, 1308, 1211, 48, 270, + 577, 1211, 1211, 658, 1522, 1523, 1532, 1251, 1251, 1211, + 1211, 1211, 658, 659, 658, 486, 657, 1644, 1645, 1211, + 664, 1245, 1534, 665, 1211, 1211, 1211, 1213, 186, 370, + 583, 599, 1217, 13, 19, 1213, 1220, 1214, 1214, 657, + 1226, 1214, 1214, 1214, 1214, 277, 1214, 1214, 250, 1214, + 250, 1214, 1214, 1214, 1214, 1214, 35, 254, 277, 441, + 1534, 1226, 1211, 1232, 1532, 665, 377, 876, 1593, 1595, + 368, 624, 877, 878, 166, 1537, 1609, 1366, 1363, 664, + 680, 681, 289, 289, 289, 289, 52, 289, 695, 289, + 659, 1204, 1456, 122, 569, 572, 761, 771, 1243, 1515, + 1521, 1534, 659, 645, 556, 657, 1615, 1537, 1615, 1615, + 1615, 1535, 1536, 1537, 1610, 1614, 204, 419, 559, 1596, + 174, 178, 190, 420, 448, 456, 500, 551, 1600, 1532, + 191, 361, 1532, 1581, 1582, 235, 568, 1382, 1529, 231, + 606, 1211, 1483, 1172, 284, 1492, 1311, 659, 819, 201, + 1532, 1211, 294, 663, 34, 294, 454, 630, 1366, 1206, + 75, 657, 902, 903, 902, 903, 402, 905, 219, 264, + 1534, 33, 576, 1478, 659, 576, 659, 576, 1127, 1366, + 825, 1383, 1379, 401, 1276, 1277, 576, 1474, 695, 1470, + 659, 645, 198, 659, 1537, 1536, 1611, 204, 419, 1596, + 1532, 13, 147, 1643, 154, 391, 1349, 1350, 1357, 1326, + 1201, 292, 371, 475, 588, 1332, 1333, 1513, 1532, 153, + 486, 657, 661, 1197, 1263, 1264, 1265, 1266, 1267, 1278, + 1279, 1291, 629, 1313, 603, 254, 659, 1211, 1519, 1532, + 659, 1543, 1393, 1595, 1532, 73, 1015, 1211, 1537, 376, + 404, 565, 1569, 258, 432, 1563, 1564, 1565, 1566, 212, + 284, 491, 1559, 1393, 1532, 578, 1549, 1560, 659, 1551, + 13, 37, 132, 377, 1211, 1570, 537, 254, 1441, 1204, + 1204, 652, 945, 722, 722, 722, 1525, 722, 1525, 289, + 349, 537, 1435, 1435, 1443, 1532, 722, 1443, 1536, 1438, + 1443, 1529, 722, 1443, 255, 554, 188, 198, 1429, 659, + 173, 537, 1438, 1525, 1440, 1438, 1438, 1211, 1443, 1443, + 1443, 1112, 446, 527, 1119, 1120, 1111, 509, 1116, 1264, + 823, 1511, 406, 1693, 1325, 1331, 1642, 179, 702, 1593, + 1610, 204, 1675, 945, 945, 1205, 174, 945, 1661, 1534, + 1532, 1532, 1532, 1525, 943, 73, 1008, 143, 1534, 83, + 97, 266, 342, 367, 430, 526, 725, 727, 437, 592, + 863, 864, 243, 859, 860, 861, 868, 876, 878, 657, + 1529, 27, 321, 853, 854, 855, 868, 869, 870, 876, + 878, 846, 847, 853, 1067, 133, 253, 945, 1073, 659, + 405, 1138, 743, 132, 1170, 1532, 1168, 1525, 891, 1179, + 241, 264, 1040, 1181, 658, 659, 810, 56, 628, 803, + 805, 150, 236, 238, 296, 298, 299, 300, 301, 302, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 314, + 315, 316, 444, 445, 686, 687, 694, 1367, 198, 1155, + 604, 1153, 83, 362, 438, 593, 856, 857, 858, 868, + 872, 873, 874, 875, 876, 878, 608, 841, 659, 1416, + 1276, 665, 1420, 1419, 201, 652, 1532, 659, 658, 1251, + 658, 1252, 658, 658, 658, 1211, 158, 628, 1261, 20, + 658, 609, 658, 658, 658, 659, 658, 659, 658, 659, + 659, 659, 659, 609, 659, 1240, 658, 652, 658, 659, + 659, 658, 658, 658, 658, 201, 659, 658, 659, 1242, + 658, 659, 659, 659, 651, 658, 659, 658, 658, 657, + 1521, 1532, 1251, 658, 658, 658, 1251, 658, 659, 658, + 658, 658, 658, 658, 658, 659, 658, 254, 658, 659, + 659, 658, 659, 659, 658, 658, 658, 659, 201, 659, + 1251, 658, 658, 659, 659, 659, 658, 201, 1211, 201, + 1211, 201, 1211, 201, 658, 659, 658, 658, 658, 658, + 659, 20, 275, 659, 1031, 658, 1257, 1282, 1283, 1284, + 657, 1187, 1188, 597, 1649, 662, 1559, 495, 1532, 186, + 370, 583, 599, 657, 18, 1211, 1647, 172, 1317, 1214, + 1211, 1211, 1214, 657, 1226, 1214, 1205, 1236, 1237, 1238, + 657, 665, 1532, 1525, 877, 659, 1393, 1394, 659, 54, + 462, 1107, 1366, 1534, 659, 137, 1463, 695, 1461, 1366, + 1462, 769, 772, 773, 768, 372, 478, 770, 1532, 1616, + 1617, 576, 233, 631, 659, 1592, 652, 1525, 1532, 1608, + 1608, 1608, 191, 205, 267, 269, 361, 416, 645, 646, + 647, 1583, 1585, 1313, 795, 1376, 1537, 1173, 1174, 1175, + 1176, 1525, 242, 295, 432, 636, 1576, 1575, 251, 814, + 829, 831, 830, 657, 1205, 1338, 548, 906, 896, 12, + 898, 1211, 1529, 1537, 1537, 1163, 1525, 1366, 183, 428, + 607, 1130, 1131, 1132, 1211, 486, 494, 613, 614, 657, + 937, 1384, 1387, 657, 129, 193, 222, 292, 371, 588, + 1337, 13, 1473, 762, 761, 1595, 213, 201, 659, 1608, + 1608, 1608, 1637, 565, 1531, 1531, 664, 1351, 1352, 1353, + 1534, 1211, 1327, 1520, 177, 475, 375, 659, 1290, 1532, + 105, 244, 261, 273, 355, 470, 542, 1274, 1275, 659, + 1525, 1290, 1314, 215, 1318, 496, 1203, 1206, 1206, 665, + 1560, 198, 1570, 198, 132, 1014, 1016, 1534, 1393, 657, + 657, 275, 379, 636, 659, 659, 665, 665, 665, 1562, + 1211, 1563, 1550, 1552, 1553, 1529, 201, 1442, 1529, 1211, + 658, 1532, 721, 1443, 427, 1329, 1428, 1441, 1443, 1438, + 1525, 1443, 1443, 659, 602, 1121, 494, 742, 659, 198, + 1694, 1329, 941, 942, 631, 1591, 945, 722, 1532, 722, + 945, 945, 706, 586, 609, 1053, 377, 377, 698, 1394, + 1394, 353, 1529, 526, 526, 526, 526, 526, 485, 1529, + 1529, 1394, 659, 861, 115, 225, 393, 404, 411, 510, + 606, 707, 708, 1394, 1394, 659, 855, 848, 849, 868, + 869, 870, 6, 12, 14, 16, 28, 30, 60, 65, + 66, 71, 83, 91, 101, 118, 135, 144, 145, 152, + 160, 166, 176, 196, 239, 241, 248, 263, 287, 320, + 339, 343, 382, 387, 394, 396, 401, 404, 435, 449, + 450, 451, 452, 476, 534, 535, 536, 541, 557, 560, + 579, 584, 597, 889, 948, 950, 952, 953, 1079, 1083, + 1085, 1088, 1094, 1095, 1096, 1098, 1099, 1321, 1528, 1525, + 377, 717, 1075, 1137, 198, 131, 741, 744, 1178, 657, + 1211, 568, 806, 805, 645, 645, 645, 645, 645, 645, + 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, + 645, 645, 645, 645, 645, 645, 645, 659, 604, 1394, + 1394, 1394, 1394, 659, 858, 288, 184, 850, 851, 852, + 868, 869, 870, 871, 874, 875, 876, 878, 1370, 1532, + 609, 1413, 1532, 1264, 665, 1420, 250, 1211, 658, 1211, + 568, 1211, 1211, 162, 37, 63, 119, 122, 130, 149, + 252, 357, 502, 572, 601, 1253, 1009, 1225, 1211, 1224, + 1257, 1211, 1211, 1009, 1253, 1257, 658, 250, 250, 1211, + 1211, 1211, 1257, 1211, 1211, 1211, 1211, 1211, 1214, 658, + 658, 1211, 1211, 1211, 1211, 1211, 1211, 1257, 250, 1211, + 1211, 1211, 658, 1211, 1211, 1211, 1211, 201, 1211, 201, + 1211, 201, 1211, 1211, 1211, 37, 63, 1026, 1027, 1028, + 1029, 1030, 1338, 1337, 658, 658, 1194, 1195, 1196, 1650, + 1651, 1652, 1187, 658, 486, 1643, 1534, 1211, 1647, 1213, + 658, 659, 658, 1226, 1307, 1307, 18, 1211, 1647, 1317, + 1211, 658, 659, 1256, 1257, 1532, 1364, 1595, 954, 1534, + 1537, 1107, 681, 645, 198, 631, 1457, 1458, 645, 659, + 658, 659, 1610, 50, 621, 631, 1612, 7, 1614, 665, + 665, 576, 576, 576, 1584, 1329, 742, 1384, 659, 1177, + 1179, 1531, 636, 284, 89, 789, 819, 821, 824, 822, + 899, 900, 901, 1532, 911, 1214, 50, 657, 913, 903, + 645, 657, 576, 201, 1133, 1131, 162, 938, 1385, 657, + 1390, 1395, 1390, 658, 937, 1386, 1518, 1519, 1522, 1532, + 1388, 1306, 1532, 645, 384, 1609, 1536, 201, 201, 201, + 1184, 1358, 1534, 659, 659, 21, 138, 1328, 1333, 1334, + 177, 1333, 1333, 1280, 1285, 1290, 1263, 261, 261, 390, + 1292, 273, 470, 1274, 1292, 1263, 1265, 1276, 1287, 1288, + 1211, 50, 220, 1315, 341, 20, 1207, 1529, 1532, 652, + 1532, 671, 1537, 565, 565, 432, 453, 489, 1567, 1565, + 1564, 1393, 1551, 659, 1555, 1557, 1561, 129, 193, 292, + 371, 588, 1339, 1433, 170, 625, 371, 1442, 1313, 1438, + 1120, 297, 694, 1122, 1405, 1406, 1522, 162, 1337, 335, + 7, 1532, 657, 466, 1683, 1670, 722, 197, 49, 219, + 479, 1059, 1059, 377, 1525, 1525, 277, 657, 880, 883, + 947, 949, 950, 1016, 1010, 118, 118, 133, 253, 222, + 292, 371, 588, 879, 1340, 1341, 1528, 861, 1529, 1529, + 1529, 1529, 1337, 1529, 1529, 658, 659, 879, 879, 855, + 659, 849, 81, 93, 401, 963, 973, 974, 1040, 1044, + 1045, 1100, 1394, 1100, 401, 1394, 1394, 1100, 1394, 401, + 401, 1394, 1394, 576, 143, 1394, 262, 557, 197, 401, + 417, 1040, 1100, 262, 1394, 401, 557, 143, 1394, 1394, + 1394, 1394, 1394, 1100, 401, 50, 1394, 1394, 891, 1394, + 401, 403, 20, 576, 645, 1109, 401, 401, 1394, 1394, + 1394, 1394, 146, 331, 1532, 1394, 1394, 401, 1394, 948, + 659, 888, 889, 1083, 657, 665, 962, 975, 1524, 1532, + 1393, 1662, 87, 481, 450, 1076, 13, 75, 1139, 99, + 180, 749, 775, 1532, 162, 777, 663, 657, 417, 1303, + 1304, 1305, 1532, 742, 1211, 657, 657, 657, 1337, 1529, + 1529, 1339, 1529, 1337, 1529, 1529, 1529, 1529, 1529, 1529, + 1529, 1337, 1337, 1529, 111, 367, 506, 1516, 1529, 1337, + 687, 1529, 1338, 879, 879, 858, 215, 1394, 659, 852, + 665, 1264, 1313, 1420, 1313, 1211, 658, 1211, 568, 657, + 1000, 1001, 1001, 1001, 657, 995, 996, 1000, 1255, 1001, + 252, 1001, 252, 658, 658, 658, 20, 1221, 658, 20, + 658, 658, 658, 1241, 1211, 1211, 658, 658, 659, 658, + 387, 1248, 659, 659, 658, 659, 658, 254, 1233, 1234, + 658, 658, 658, 658, 659, 658, 658, 1211, 658, 198, + 658, 658, 659, 658, 659, 659, 658, 1211, 658, 1211, + 658, 1211, 658, 658, 658, 657, 1021, 1021, 21, 138, + 468, 650, 1023, 1024, 1025, 659, 659, 1313, 1202, 1652, + 658, 1639, 1283, 1646, 665, 1063, 658, 1257, 1213, 658, + 659, 658, 1206, 1238, 658, 657, 1459, 432, 58, 68, + 82, 94, 95, 96, 113, 333, 351, 464, 482, 544, + 561, 774, 773, 1617, 631, 1620, 404, 565, 1534, 384, + 652, 652, 1610, 1610, 1610, 657, 796, 377, 1400, 1175, + 1525, 1179, 237, 1182, 1488, 792, 1532, 812, 1533, 812, + 826, 826, 826, 658, 659, 1206, 897, 401, 914, 915, + 1338, 899, 1537, 350, 454, 1198, 1391, 1392, 1522, 1396, + 659, 657, 1387, 658, 658, 659, 665, 1635, 658, 659, + 761, 201, 1611, 1611, 1611, 1008, 1011, 1352, 1520, 1334, + 597, 658, 1639, 1286, 662, 261, 1292, 1292, 1278, 261, + 377, 609, 1311, 1198, 1319, 1520, 1316, 1324, 1529, 1532, + 665, 658, 658, 84, 589, 432, 1570, 1554, 1556, 1329, + 1434, 1443, 645, 659, 659, 1404, 1393, 630, 1536, 1677, + 130, 252, 434, 543, 958, 657, 722, 710, 118, 1525, + 700, 701, 1525, 277, 937, 959, 960, 961, 962, 963, + 887, 888, 659, 949, 708, 849, 1062, 1524, 945, 66, + 197, 417, 598, 972, 1039, 945, 1040, 1041, 1041, 235, + 944, 132, 1532, 1524, 1158, 1339, 1337, 1371, 1337, 13, + 1084, 1092, 1093, 1532, 1158, 1529, 1529, 1008, 1394, 1337, + 264, 1372, 264, 1371, 1371, 954, 1093, 1394, 191, 267, + 367, 957, 1337, 132, 1532, 1339, 1339, 1371, 1158, 1322, + 1323, 1522, 132, 1337, 132, 1337, 1343, 890, 1529, 1158, + 1525, 1158, 1158, 86, 88, 132, 156, 192, 395, 439, + 956, 132, 1337, 132, 1337, 132, 1337, 1337, 1343, 1084, + 951, 6, 152, 1096, 959, 1532, 9, 191, 1108, 440, + 971, 972, 1033, 976, 665, 132, 1340, 1529, 1532, 657, + 1663, 1217, 1626, 24, 175, 711, 576, 144, 160, 713, + 13, 657, 1140, 217, 659, 745, 90, 112, 663, 1084, + 658, 659, 807, 690, 691, 1337, 692, 693, 1337, 688, + 689, 1337, 1532, 879, 852, 1532, 1313, 1324, 1307, 1211, + 129, 292, 371, 588, 1254, 371, 657, 996, 1002, 63, + 119, 122, 130, 149, 194, 252, 354, 357, 434, 572, + 601, 988, 989, 1222, 1253, 658, 1307, 1307, 1211, 50, + 488, 1247, 1211, 1211, 1257, 46, 355, 658, 631, 1235, + 1211, 1307, 1211, 1211, 1211, 1211, 658, 658, 658, 1338, + 658, 1031, 1026, 1024, 1026, 1027, 1337, 1318, 1194, 1644, + 1532, 658, 1257, 1207, 1337, 1464, 1465, 182, 287, 213, + 565, 20, 609, 1613, 457, 1618, 1618, 1618, 132, 1211, + 1398, 1399, 158, 159, 797, 155, 1182, 271, 237, 455, + 1494, 659, 901, 658, 219, 264, 916, 658, 659, 658, + 1202, 659, 1393, 1397, 1398, 1395, 1389, 1387, 1518, 1532, + 891, 1532, 1611, 1010, 1359, 1328, 1643, 1311, 1266, 1263, + 1278, 261, 261, 1263, 1278, 1268, 1269, 1301, 1302, 1202, + 632, 633, 659, 1320, 1328, 1211, 1329, 652, 1555, 1560, + 1329, 1529, 694, 1406, 1313, 1399, 733, 734, 735, 1532, + 512, 1684, 9, 33, 836, 377, 635, 699, 657, 657, + 1525, 658, 658, 659, 884, 1494, 949, 1158, 657, 264, + 264, 1041, 945, 1062, 1532, 945, 945, 1217, 152, 494, + 1084, 1524, 1081, 659, 1338, 1010, 1529, 1371, 1092, 1524, + 1524, 631, 1529, 975, 1084, 659, 1328, 894, 1084, 1089, + 1084, 657, 658, 1532, 1525, 36, 37, 42, 44, 46, + 47, 119, 122, 130, 149, 167, 192, 194, 208, 209, + 252, 281, 290, 291, 293, 327, 328, 329, 346, 347, + 348, 354, 357, 373, 374, 409, 410, 434, 490, 494, + 508, 566, 569, 572, 573, 574, 575, 615, 616, 642, + 986, 987, 988, 989, 990, 991, 992, 993, 1532, 1532, + 1664, 20, 415, 1211, 1211, 377, 717, 722, 377, 83, + 718, 1141, 240, 198, 1532, 986, 1006, 198, 198, 658, + 1304, 568, 658, 659, 658, 659, 658, 659, 278, 1335, + 658, 658, 658, 658, 658, 22, 37, 51, 595, 1008, + 1018, 1019, 659, 371, 1001, 995, 63, 1001, 252, 1223, + 658, 658, 658, 658, 1249, 1511, 658, 658, 659, 658, + 341, 266, 427, 658, 658, 658, 658, 658, 658, 1022, + 658, 659, 1315, 658, 658, 659, 18, 1466, 384, 1529, + 67, 259, 363, 529, 546, 637, 1606, 1607, 631, 1619, + 1619, 1619, 658, 659, 742, 793, 1401, 251, 1532, 657, + 904, 898, 917, 1532, 915, 939, 1392, 1399, 658, 1638, + 75, 1495, 1281, 377, 1271, 1278, 1278, 377, 1273, 1211, + 657, 1299, 1300, 1289, 1520, 419, 1344, 1324, 658, 659, + 736, 1529, 245, 254, 392, 737, 738, 739, 740, 136, + 247, 603, 837, 481, 1534, 657, 1060, 1061, 1532, 1060, + 658, 882, 881, 961, 20, 940, 1086, 1211, 945, 1062, + 1532, 609, 1052, 586, 1062, 1062, 179, 132, 132, 975, + 1152, 1093, 1015, 1524, 1107, 559, 1108, 1080, 1323, 1090, + 1092, 1082, 1462, 657, 1034, 1000, 1000, 1001, 1001, 995, + 413, 657, 995, 995, 1019, 63, 615, 988, 990, 1019, + 1019, 63, 616, 616, 619, 995, 657, 1001, 1001, 1001, + 1019, 1000, 1001, 977, 995, 619, 1000, 1019, 37, 1000, + 1020, 1000, 1000, 1001, 1002, 665, 658, 659, 1665, 1666, + 1307, 504, 1529, 151, 1077, 1144, 1532, 13, 657, 1142, + 746, 1015, 132, 776, 752, 753, 1337, 747, 748, 742, + 691, 693, 689, 475, 1333, 1414, 1018, 1009, 1020, 371, + 1019, 1250, 1520, 1211, 341, 181, 658, 1337, 1324, 1465, + 144, 565, 565, 565, 18, 1605, 213, 318, 319, 323, + 324, 325, 1621, 1622, 1399, 264, 559, 1205, 907, 657, + 613, 918, 1194, 161, 171, 385, 564, 1496, 1497, 280, + 1498, 1644, 1270, 609, 1272, 609, 1306, 196, 237, 608, + 1294, 1295, 1298, 1194, 1328, 1532, 1354, 1355, 1335, 1678, + 735, 1006, 658, 659, 735, 377, 711, 383, 1060, 658, + 659, 1328, 657, 658, 1638, 947, 657, 937, 402, 657, + 1087, 658, 1062, 1052, 586, 1059, 964, 1059, 966, 967, + 122, 569, 572, 650, 651, 1514, 1515, 1108, 1525, 1158, + 1091, 1130, 658, 1035, 1532, 317, 1036, 502, 601, 643, + 997, 998, 999, 1064, 1511, 997, 997, 1019, 619, 997, + 1064, 1019, 997, 28, 73, 83, 132, 207, 370, 377, + 417, 490, 598, 978, 979, 1003, 1004, 1005, 1032, 1217, + 1528, 528, 994, 1019, 1020, 1019, 1020, 997, 997, 1532, + 1532, 486, 657, 1667, 712, 719, 720, 658, 659, 1143, + 517, 519, 750, 751, 752, 755, 1217, 1532, 1211, 1183, + 177, 475, 465, 1417, 658, 659, 1328, 658, 658, 1329, + 64, 1606, 384, 1337, 1337, 1337, 1516, 371, 650, 1336, + 1622, 603, 1525, 911, 547, 912, 909, 910, 1532, 254, + 274, 83, 91, 118, 241, 320, 339, 362, 557, 934, + 935, 936, 1437, 50, 50, 161, 50, 1497, 530, 564, + 1499, 1500, 1211, 657, 1211, 657, 658, 1040, 1040, 1295, + 1345, 1201, 466, 1685, 739, 1205, 716, 717, 657, 658, + 83, 263, 631, 1047, 1051, 1055, 1058, 1528, 1061, 371, + 1048, 1050, 1055, 1057, 887, 937, 885, 1338, 914, 970, + 968, 1059, 657, 965, 657, 657, 1516, 1516, 891, 251, + 658, 659, 202, 400, 503, 377, 1037, 999, 658, 659, + 658, 1014, 1529, 366, 1007, 1514, 15, 603, 132, 264, + 20, 1005, 264, 370, 1393, 645, 1189, 1185, 631, 1668, + 531, 714, 777, 1532, 417, 1145, 1146, 1532, 659, 777, + 200, 177, 1202, 1520, 1344, 292, 371, 1407, 1408, 1522, + 1276, 1206, 1338, 658, 659, 920, 567, 1394, 1394, 143, + 143, 1394, 1394, 1394, 1394, 657, 929, 936, 166, 1511, + 1511, 50, 1511, 50, 50, 1500, 1306, 1306, 198, 1293, + 1293, 657, 1679, 724, 1671, 713, 707, 586, 609, 1046, + 1049, 1054, 1055, 1056, 1529, 1394, 398, 1097, 1098, 1099, + 1058, 1393, 1328, 658, 1097, 1057, 884, 658, 1635, 658, + 657, 657, 969, 1060, 657, 1060, 1060, 657, 1532, 136, + 603, 1019, 1511, 1019, 657, 1208, 366, 614, 657, 132, + 1340, 1529, 1532, 371, 658, 55, 66, 284, 1211, 163, + 715, 658, 659, 751, 1328, 1201, 659, 1393, 1489, 658, + 908, 910, 657, 922, 924, 919, 1529, 1529, 1394, 1394, + 1340, 1340, 1338, 1534, 548, 930, 931, 1394, 1511, 1511, + 1511, 658, 658, 215, 261, 387, 1297, 1296, 1205, 1346, + 1347, 1348, 1006, 725, 726, 1626, 1686, 1525, 718, 658, + 1059, 1059, 1097, 1056, 1337, 1528, 1099, 1098, 132, 1340, + 1529, 1532, 886, 1060, 1060, 657, 658, 1060, 658, 658, + 914, 54, 367, 462, 494, 1038, 1038, 658, 1338, 1208, + 985, 1638, 66, 384, 66, 1211, 1146, 1408, 1399, 1011, + 912, 657, 923, 924, 925, 326, 921, 924, 1529, 1529, + 932, 658, 659, 954, 50, 50, 657, 657, 1211, 658, + 659, 1680, 141, 777, 198, 151, 1638, 658, 658, 1060, + 1046, 658, 1047, 1048, 658, 5, 132, 370, 377, 377, + 658, 658, 384, 384, 1490, 658, 659, 326, 927, 928, + 1214, 933, 1534, 931, 1303, 1305, 1206, 1348, 724, 1205, + 719, 1033, 1046, 658, 1046, 603, 136, 405, 623, 980, + 475, 1501, 924, 659, 926, 934, 658, 658, 1681, 1672, + 1046, 1038, 1038, 83, 598, 981, 982, 983, 233, 1495, + 928, 658, 777, 157, 1529, 264, 983, 50, 1498, 477, + 1511, 237, 1502, 1673, 371, 657, 1504, 777, 280, 475, + 1503, 658, 664, 1505, 1506, 1522, 494, 1507, 1534, 658, + 659, 1508, 1509, 1522, 1506, 659, 1393, 1509, 1205, 1399, + 1206 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint16 yyr1[] = +{ + 0, 667, 668, 669, 668, 668, 670, 670, 671, 671, + 671, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 673, 674, 674, + 675, 676, 676, 678, 677, 679, 679, 680, 680, 681, + 683, 682, 685, 684, 686, 686, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 688, 688, 688, 689, 690, + 690, 690, 691, 692, 692, 692, 693, 694, 694, 694, + 694, 694, 694, 694, 695, 695, 696, 698, 697, 699, + 697, 700, 697, 701, 697, 702, 697, 703, 697, 697, + 697, 697, 697, 704, 697, 706, 705, 707, 707, 708, + 708, 708, 708, 708, 708, 708, 710, 709, 712, 711, + 711, 713, 713, 713, 713, 714, 714, 715, 715, 716, + 716, 717, 718, 718, 720, 719, 721, 722, 722, 723, + 723, 724, 724, 725, 725, 725, 725, 725, 725, 725, + 726, 726, 727, 727, 729, 728, 730, 730, 731, 731, + 732, 732, 733, 733, 734, 734, 736, 735, 737, 737, + 738, 738, 739, 740, 740, 740, 740, 741, 741, 742, + 742, 743, 743, 745, 744, 744, 746, 744, 744, 748, + 747, 749, 749, 750, 750, 751, 752, 752, 753, 754, + 754, 755, 755, 755, 755, 755, 756, 757, 757, 758, + 758, 759, 759, 760, 760, 761, 761, 761, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, + 763, 764, 765, 765, 766, 766, 767, 767, 768, 769, + 769, 770, 770, 771, 772, 772, 773, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, + 775, 775, 776, 776, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 778, 778, 778, 778, 780, + 779, 782, 781, 784, 783, 785, 786, 787, 789, 788, + 790, 791, 791, 791, 792, 792, 794, 795, 796, 793, + 797, 797, 797, 799, 798, 801, 802, 800, 800, 803, + 803, 804, 804, 806, 807, 805, 809, 810, 808, 811, + 811, 812, 812, 814, 813, 816, 815, 818, 817, 820, + 819, 821, 823, 822, 825, 824, 826, 827, 829, 828, + 830, 828, 831, 828, 833, 832, 834, 832, 835, 832, + 836, 836, 837, 837, 837, 838, 839, 840, 841, 841, + 842, 842, 843, 844, 845, 845, 847, 846, 848, 848, + 848, 849, 849, 849, 850, 851, 851, 851, 852, 852, + 852, 852, 852, 852, 852, 852, 853, 854, 854, 854, + 855, 855, 855, 855, 855, 856, 857, 857, 857, 858, + 858, 858, 858, 858, 858, 858, 859, 860, 860, 860, + 861, 861, 861, 862, 863, 864, 865, 866, 867, 867, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, + 877, 877, 878, 878, 879, 879, 881, 880, 880, 882, + 880, 880, 883, 883, 884, 885, 884, 886, 884, 887, + 888, 888, 890, 889, 891, 893, 892, 894, 895, 896, + 895, 895, 895, 895, 895, 897, 897, 898, 898, 899, + 899, 900, 900, 901, 902, 903, 904, 905, 905, 906, + 907, 906, 908, 906, 909, 909, 910, 911, 912, 912, + 913, 913, 914, 914, 916, 915, 917, 918, 919, 918, + 920, 918, 921, 921, 922, 922, 923, 923, 925, 926, + 924, 927, 927, 928, 928, 929, 929, 930, 930, 932, + 931, 933, 934, 934, 935, 935, 936, 936, 936, 936, + 936, 936, 936, 936, 936, 938, 939, 937, 940, 940, + 941, 941, 942, 942, 943, 943, 944, 944, 945, 945, + 946, 946, 947, 947, 948, 948, 949, 949, 949, 950, + 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, + 950, 950, 950, 950, 950, 950, 950, 950, 950, 951, + 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, + 950, 950, 950, 950, 950, 950, 952, 953, 954, 955, + 956, 956, 956, 956, 956, 956, 956, 957, 957, 957, + 958, 958, 958, 958, 959, 960, 960, 961, 961, 962, + 962, 964, 963, 965, 963, 966, 963, 967, 963, 968, + 963, 969, 963, 970, 963, 963, 971, 971, 972, 973, + 973, 974, 976, 977, 975, 978, 978, 979, 979, 980, + 980, 980, 981, 981, 982, 982, 983, 983, 983, 984, + 985, 986, 986, 986, 986, 986, 986, 986, 986, 986, + 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, + 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, + 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, + 987, 987, 987, 987, 987, 987, 987, 987, 988, 989, + 989, 990, 990, 991, 991, 991, 991, 991, 992, 992, + 992, 992, 992, 993, 993, 993, 994, 994, 995, 995, + 995, 996, 997, 997, 998, 998, 999, 999, 999, 1000, + 1000, 1000, 1000, 1001, 1001, 1002, 1002, 1003, 1003, 1004, + 1004, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, + 1005, 1005, 1005, 1005, 1005, 1005, 1006, 1007, 1007, 1008, + 1008, 1009, 1009, 1010, 1010, 1011, 1011, 1012, 1012, 1013, + 1013, 1014, 1015, 1015, 1016, 1016, 1017, 1017, 1018, 1018, + 1018, 1019, 1019, 1019, 1019, 1019, 1020, 1020, 1022, 1021, + 1023, 1023, 1024, 1025, 1025, 1025, 1025, 1026, 1027, 1028, + 1028, 1029, 1030, 1030, 1031, 1031, 1032, 1032, 1033, 1034, + 1034, 1035, 1035, 1036, 1036, 1036, 1036, 1037, 1037, 1037, + 1037, 1037, 1038, 1038, 1038, 1038, 1038, 1039, 1039, 1040, + 1040, 1041, 1041, 1042, 1042, 1042, 1043, 1043, 1044, 1045, + 1046, 1046, 1047, 1047, 1048, 1048, 1049, 1049, 1050, 1050, + 1051, 1051, 1052, 1052, 1053, 1053, 1053, 1054, 1054, 1055, + 1055, 1055, 1055, 1055, 1055, 1056, 1056, 1057, 1058, 1058, + 1059, 1059, 1059, 1060, 1060, 1061, 1061, 1062, 1062, 1063, + 1063, 1064, 1064, 1066, 1067, 1065, 1068, 1065, 1065, 1069, + 1065, 1070, 1065, 1071, 1065, 1072, 1065, 1073, 1065, 1065, + 1065, 1065, 1065, 1074, 1065, 1075, 1075, 1075, 1075, 1076, + 1076, 1077, 1077, 1078, 1078, 1079, 1079, 1079, 1079, 1079, + 1079, 1079, 1079, 1079, 1079, 1080, 1079, 1079, 1081, 1079, + 1082, 1079, 1079, 1079, 1079, 1079, 1083, 1084, 1084, 1086, + 1085, 1087, 1087, 1087, 1089, 1088, 1090, 1091, 1090, 1092, + 1092, 1093, 1094, 1094, 1095, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1097, 1097, 1097, 1097, 1097, + 1098, 1098, 1099, 1099, 1100, 1100, 1101, 1101, 1103, 1102, + 1104, 1104, 1105, 1105, 1106, 1106, 1107, 1107, 1107, 1108, + 1108, 1108, 1109, 1109, 1109, 1109, 1111, 1110, 1112, 1110, + 1110, 1110, 1113, 1114, 1114, 1115, 1115, 1116, 1116, 1116, + 1118, 1117, 1119, 1119, 1120, 1120, 1120, 1121, 1121, 1121, + 1122, 1122, 1124, 1123, 1125, 1125, 1125, 1126, 1127, 1126, + 1129, 1128, 1130, 1130, 1131, 1131, 1132, 1132, 1132, 1133, + 1133, 1135, 1134, 1136, 1136, 1137, 1138, 1138, 1139, 1139, + 1140, 1141, 1140, 1142, 1143, 1142, 1144, 1144, 1144, 1145, + 1145, 1145, 1146, 1146, 1147, 1148, 1149, 1148, 1151, 1150, + 1152, 1152, 1153, 1153, 1154, 1154, 1154, 1154, 1154, 1154, + 1155, 1155, 1157, 1156, 1158, 1158, 1158, 1160, 1159, 1159, + 1161, 1161, 1162, 1162, 1163, 1165, 1164, 1166, 1166, 1167, + 1167, 1168, 1169, 1170, 1170, 1172, 1171, 1173, 1173, 1174, + 1174, 1175, 1176, 1178, 1177, 1180, 1179, 1181, 1181, 1182, + 1182, 1183, 1184, 1184, 1186, 1185, 1185, 1188, 1187, 1187, + 1190, 1189, 1191, 1191, 1191, 1193, 1192, 1194, 1195, 1196, + 1196, 1197, 1197, 1198, 1198, 1199, 1199, 1200, 1200, 1200, + 1201, 1201, 1201, 1202, 1202, 1202, 1203, 1203, 1204, 1205, + 1206, 1207, 1207, 1207, 1207, 1207, 1208, 1208, 1208, 1209, + 1209, 1209, 1210, 1210, 1211, 1211, 1211, 1211, 1211, 1211, + 1211, 1211, 1211, 1211, 1211, 1212, 1212, 1212, 1212, 1212, + 1212, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, + 1213, 1213, 1213, 1213, 1213, 1214, 1214, 1214, 1214, 1214, + 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, + 1215, 1215, 1216, 1216, 1217, 1217, 1218, 1218, 1219, 1219, + 1219, 1219, 1219, 1219, 1220, 1220, 1221, 1221, 1222, 1222, + 1222, 1222, 1222, 1222, 1223, 1222, 1222, 1222, 1222, 1222, + 1224, 1225, 1225, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1227, + 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, + 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, + 1227, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, + 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1229, 1229, + 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, + 1229, 1229, 1229, 1229, 1230, 1230, 1230, 1230, 1230, 1230, + 1230, 1230, 1232, 1231, 1231, 1233, 1233, 1234, 1234, 1235, + 1235, 1236, 1236, 1237, 1237, 1238, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1240, 1241, 1239, 1239, 1239, 1239, 1239, + 1239, 1239, 1239, 1239, 1239, 1239, 1242, 1239, 1244, 1243, + 1245, 1245, 1245, 1246, 1246, 1247, 1247, 1248, 1249, 1248, + 1250, 1250, 1252, 1251, 1253, 1254, 1253, 1253, 1253, 1253, + 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1255, 1253, 1256, + 1256, 1257, 1257, 1258, 1258, 1259, 1259, 1260, 1260, 1261, + 1261, 1262, 1262, 1263, 1263, 1264, 1265, 1265, 1266, 1266, + 1267, 1268, 1267, 1269, 1267, 1267, 1270, 1267, 1271, 1267, + 1267, 1272, 1267, 1273, 1267, 1267, 1274, 1274, 1274, 1275, + 1275, 1276, 1276, 1277, 1279, 1278, 1278, 1278, 1280, 1281, + 1280, 1282, 1284, 1283, 1286, 1285, 1288, 1289, 1287, 1290, + 1291, 1292, 1292, 1293, 1293, 1293, 1293, 1294, 1294, 1296, + 1295, 1297, 1295, 1298, 1298, 1299, 1300, 1299, 1302, 1301, + 1303, 1303, 1304, 1304, 1305, 1305, 1306, 1306, 1307, 1307, + 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, + 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1309, + 1309, 1309, 1309, 1310, 1310, 1310, 1311, 1311, 1312, 1312, + 1313, 1314, 1313, 1315, 1316, 1315, 1317, 1317, 1318, 1318, + 1319, 1319, 1320, 1320, 1320, 1321, 1322, 1322, 1323, 1324, + 1324, 1326, 1325, 1327, 1327, 1328, 1328, 1328, 1329, 1329, + 1330, 1331, 1331, 1331, 1332, 1332, 1332, 1333, 1333, 1333, + 1333, 1333, 1334, 1335, 1335, 1335, 1335, 1336, 1336, 1336, + 1337, 1337, 1337, 1337, 1337, 1337, 1338, 1338, 1338, 1338, + 1338, 1339, 1339, 1339, 1339, 1339, 1340, 1340, 1340, 1340, + 1340, 1341, 1342, 1342, 1343, 1343, 1344, 1345, 1344, 1346, + 1346, 1347, 1347, 1348, 1350, 1349, 1351, 1351, 1352, 1353, + 1353, 1354, 1354, 1356, 1355, 1358, 1359, 1357, 1357, 1357, + 1361, 1360, 1363, 1362, 1364, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1365, 1362, 1362, 1362, 1362, 1362, 1362, 1366, + 1366, 1367, 1368, 1369, 1369, 1370, 1371, 1371, 1372, 1372, + 1373, 1373, 1375, 1376, 1374, 1378, 1379, 1377, 1380, 1380, + 1380, 1380, 1381, 1381, 1382, 1382, 1383, 1384, 1384, 1384, + 1385, 1384, 1386, 1386, 1387, 1387, 1388, 1387, 1389, 1387, + 1390, 1390, 1391, 1391, 1392, 1393, 1393, 1394, 1394, 1396, + 1395, 1397, 1397, 1398, 1398, 1399, 1399, 1400, 1401, 1400, + 1403, 1404, 1402, 1405, 1405, 1406, 1407, 1407, 1408, 1409, + 1409, 1411, 1410, 1413, 1414, 1412, 1415, 1412, 1416, 1412, + 1417, 1417, 1418, 1418, 1419, 1419, 1420, 1420, 1421, 1421, + 1422, 1422, 1422, 1424, 1423, 1425, 1425, 1426, 1426, 1427, + 1427, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, + 1429, 1429, 1431, 1430, 1432, 1432, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1433, 1432, + 1434, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1435, 1435, 1435, + 1436, 1436, 1437, 1437, 1438, 1438, 1439, 1439, 1440, 1440, + 1441, 1441, 1442, 1442, 1443, 1443, 1443, 1445, 1444, 1446, + 1444, 1447, 1447, 1447, 1447, 1447, 1448, 1448, 1449, 1450, + 1450, 1450, 1451, 1451, 1452, 1452, 1452, 1454, 1453, 1456, + 1455, 1455, 1457, 1457, 1458, 1459, 1458, 1460, 1460, 1461, + 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, + 1461, 1461, 1461, 1461, 1461, 1462, 1462, 1463, 1463, 1464, + 1464, 1464, 1465, 1466, 1466, 1468, 1467, 1469, 1469, 1471, + 1470, 1472, 1470, 1470, 1473, 1473, 1474, 1474, 1476, 1475, + 1477, 1478, 1478, 1480, 1479, 1481, 1481, 1481, 1482, 1482, + 1482, 1482, 1483, 1483, 1484, 1485, 1487, 1488, 1489, 1490, + 1486, 1491, 1491, 1492, 1492, 1493, 1493, 1493, 1494, 1494, + 1494, 1495, 1495, 1496, 1496, 1497, 1497, 1497, 1497, 1498, + 1498, 1499, 1499, 1500, 1500, 1501, 1501, 1502, 1502, 1503, + 1503, 1504, 1504, 1504, 1505, 1505, 1506, 1506, 1507, 1507, + 1508, 1508, 1509, 1510, 1510, 1510, 1510, 1511, 1511, 1512, + 1512, 1512, 1513, 1514, 1514, 1514, 1515, 1515, 1515, 1515, + 1515, 1515, 1515, 1515, 1515, 1515, 1516, 1516, 1516, 1516, + 1516, 1517, 1517, 1517, 1518, 1518, 1519, 1519, 1520, 1521, + 1521, 1522, 1522, 1523, 1523, 1523, 1524, 1524, 1524, 1524, + 1525, 1525, 1525, 1526, 1526, 1527, 1528, 1528, 1529, 1530, + 1531, 1532, 1532, 1533, 1533, 1534, 1534, 1534, 1535, 1535, + 1535, 1536, 1536, 1537, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, + 1539, 1539, 1539, 1539, 1541, 1540, 1542, 1543, 1540, 1544, + 1544, 1546, 1545, 1547, 1545, 1548, 1545, 1550, 1549, 1549, + 1551, 1551, 1553, 1552, 1554, 1552, 1556, 1555, 1555, 1557, + 1557, 1557, 1558, 1558, 1558, 1558, 1559, 1559, 1559, 1559, + 1560, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, + 1561, 1562, 1562, 1562, 1563, 1563, 1563, 1563, 1564, 1565, + 1566, 1566, 1567, 1567, 1567, 1567, 1568, 1568, 1569, 1569, + 1569, 1570, 1570, 1570, 1570, 1570, 1572, 1571, 1573, 1573, + 1574, 1574, 1575, 1576, 1576, 1576, 1576, 1576, 1578, 1577, + 1579, 1579, 1580, 1579, 1581, 1581, 1582, 1582, 1583, 1583, + 1583, 1583, 1584, 1583, 1585, 1585, 1585, 1585, 1585, 1586, + 1587, 1587, 1587, 1587, 1587, 1587, 1588, 1588, 1589, 1590, + 1590, 1590, 1590, 1590, 1591, 1591, 1592, 1592, 1593, 1593, + 1594, 1595, 1595, 1596, 1596, 1597, 1597, 1598, 1598, 1599, + 1599, 1601, 1600, 1602, 1600, 1603, 1600, 1604, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, 1605, 1605, 1606, 1606, 1607, + 1607, 1607, 1608, 1608, 1608, 1608, 1609, 1609, 1610, 1610, + 1611, 1611, 1612, 1612, 1613, 1613, 1614, 1614, 1614, 1614, + 1614, 1615, 1615, 1616, 1616, 1617, 1618, 1618, 1618, 1618, + 1618, 1619, 1619, 1620, 1620, 1621, 1621, 1622, 1622, 1622, + 1622, 1622, 1622, 1624, 1623, 1625, 1626, 1626, 1627, 1627, + 1628, 1628, 1628, 1629, 1629, 1629, 1630, 1630, 1631, 1632, + 1632, 1633, 1634, 1635, 1635, 1637, 1636, 1638, 1638, 1639, + 1639, 1641, 1640, 1642, 1642, 1643, 1643, 1643, 1644, 1644, + 1645, 1646, 1645, 1647, 1648, 1649, 1650, 1650, 1651, 1651, + 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1653, 1653, + 1653, 1654, 1654, 1654, 1654, 1654, 1655, 1655, 1655, 1655, + 1655, 1655, 1656, 1656, 1657, 1658, 1659, 1659, 1659, 1660, + 1660, 1660, 1662, 1661, 1663, 1663, 1664, 1664, 1666, 1665, + 1667, 1667, 1668, 1668, 1668, 1668, 1670, 1671, 1672, 1673, + 1669, 1674, 1674, 1675, 1677, 1678, 1679, 1680, 1681, 1676, + 1683, 1684, 1685, 1686, 1682, 1687, 1687, 1687, 1687, 1687, + 1687, 1688, 1688, 1688, 1689, 1689, 1690, 1690, 1690, 1691, + 1691, 1692, 1693, 1692, 1694, 1694, 1695, 1695, 1696, 1696, + 1697 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 0, 4, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, + 4, 1, 2, 0, 4, 0, 2, 3, 1, 2, + 0, 3, 0, 6, 1, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 5, 5, 5, 1, 0, 1, 3, 1, 0, + 1, 3, 1, 0, 1, 3, 1, 3, 3, 3, + 3, 3, 3, 3, 0, 1, 1, 0, 7, 0, + 14, 0, 13, 0, 13, 0, 6, 0, 3, 5, + 6, 4, 3, 0, 3, 0, 12, 1, 3, 2, + 2, 2, 2, 2, 2, 2, 0, 13, 0, 6, + 2, 0, 1, 3, 1, 0, 2, 0, 2, 0, + 1, 4, 0, 2, 0, 2, 0, 3, 1, 0, + 2, 0, 2, 2, 2, 2, 2, 3, 3, 1, + 1, 2, 3, 3, 0, 4, 0, 3, 0, 1, + 3, 1, 0, 1, 3, 1, 0, 3, 0, 1, + 3, 1, 2, 0, 1, 1, 1, 0, 3, 2, + 3, 0, 3, 0, 5, 5, 0, 7, 5, 0, + 2, 1, 1, 1, 3, 1, 1, 1, 3, 0, + 1, 1, 1, 1, 2, 1, 3, 1, 1, 0, + 1, 0, 2, 3, 5, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 4, 0, 1, 1, 3, 1, 3, 3, 1, + 2, 1, 1, 1, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 0, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 5, 0, 2, 0, 3, 2, 2, 2, 0, 6, + 2, 0, 2, 1, 1, 3, 0, 0, 0, 7, + 0, 2, 2, 0, 6, 0, 0, 4, 1, 1, + 2, 1, 2, 0, 0, 6, 0, 0, 6, 0, + 2, 0, 1, 0, 6, 0, 3, 0, 5, 0, + 4, 3, 0, 6, 0, 6, 1, 0, 0, 6, + 0, 6, 0, 6, 0, 4, 0, 4, 0, 4, + 1, 1, 1, 1, 1, 2, 4, 5, 0, 4, + 4, 4, 3, 3, 2, 2, 0, 2, 1, 2, + 3, 1, 1, 1, 1, 1, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, + 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, + 0, 1, 1, 1, 1, 1, 0, 7, 3, 0, + 5, 1, 2, 4, 0, 0, 5, 0, 7, 1, + 0, 1, 0, 4, 0, 0, 3, 5, 6, 0, + 4, 2, 2, 2, 2, 0, 1, 0, 3, 0, + 1, 1, 3, 1, 4, 5, 5, 0, 2, 0, + 0, 7, 0, 10, 1, 3, 1, 1, 0, 2, + 0, 3, 1, 3, 0, 6, 1, 0, 0, 5, + 0, 4, 1, 1, 1, 3, 1, 3, 0, 0, + 5, 1, 3, 1, 1, 0, 3, 1, 3, 0, + 4, 1, 0, 1, 2, 1, 3, 4, 3, 3, + 3, 3, 4, 4, 3, 0, 0, 6, 0, 1, + 0, 1, 1, 2, 1, 1, 0, 3, 0, 3, + 1, 3, 0, 1, 1, 2, 1, 2, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, + 6, 1, 1, 3, 4, 4, 2, 2, 2, 3, + 3, 3, 3, 3, 3, 3, 4, 4, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, + 2, 0, 9, 0, 10, 0, 9, 0, 9, 0, + 10, 0, 11, 0, 10, 2, 0, 1, 4, 0, + 1, 2, 0, 0, 5, 1, 7, 0, 2, 0, + 1, 1, 0, 1, 2, 1, 1, 2, 2, 4, + 3, 3, 3, 3, 1, 2, 1, 1, 3, 2, + 3, 2, 2, 1, 3, 3, 2, 3, 1, 2, + 2, 2, 1, 2, 3, 1, 1, 2, 3, 2, + 3, 2, 2, 3, 3, 3, 5, 5, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 1, 2, 1, 2, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 3, 0, 1, + 1, 5, 0, 1, 2, 1, 1, 1, 1, 3, + 3, 3, 3, 0, 1, 0, 1, 0, 1, 2, + 1, 1, 2, 2, 4, 1, 3, 2, 1, 2, + 2, 2, 3, 3, 3, 3, 2, 2, 1, 2, + 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, + 1, 1, 0, 2, 1, 1, 0, 1, 2, 1, + 1, 0, 1, 2, 1, 2, 0, 1, 0, 4, + 1, 1, 1, 0, 1, 2, 1, 1, 2, 1, + 3, 3, 1, 1, 0, 2, 0, 1, 5, 0, + 3, 3, 1, 0, 2, 2, 2, 0, 3, 3, + 6, 6, 1, 1, 2, 2, 2, 2, 2, 1, + 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, + 0, 1, 0, 1, 0, 1, 1, 2, 1, 2, + 1, 2, 0, 2, 0, 2, 2, 2, 2, 3, + 2, 3, 3, 3, 3, 1, 1, 1, 1, 3, + 1, 1, 1, 4, 2, 1, 4, 0, 1, 0, + 2, 1, 3, 0, 0, 7, 0, 5, 7, 0, + 5, 0, 5, 0, 5, 0, 4, 0, 11, 3, + 4, 3, 3, 0, 8, 0, 3, 1, 4, 0, + 3, 0, 2, 0, 1, 0, 2, 2, 2, 2, + 1, 1, 1, 4, 4, 0, 6, 4, 0, 5, + 0, 6, 4, 3, 1, 7, 2, 1, 1, 0, + 6, 0, 3, 2, 0, 5, 0, 0, 6, 1, + 3, 1, 1, 3, 3, 3, 2, 4, 6, 5, + 5, 5, 3, 4, 2, 2, 6, 5, 3, 5, + 1, 1, 1, 1, 1, 0, 1, 1, 2, 2, + 3, 3, 3, 3, 0, 1, 0, 1, 0, 2, + 0, 1, 2, 1, 1, 1, 0, 1, 1, 0, + 2, 1, 0, 1, 1, 1, 0, 6, 0, 5, + 4, 4, 3, 0, 1, 1, 3, 3, 2, 2, + 0, 2, 1, 3, 0, 1, 1, 0, 2, 4, + 1, 3, 0, 5, 0, 1, 1, 3, 0, 4, + 0, 4, 0, 1, 1, 2, 1, 1, 1, 0, + 2, 0, 5, 1, 3, 2, 0, 3, 1, 4, + 1, 0, 4, 1, 0, 4, 0, 1, 3, 0, + 1, 3, 1, 1, 2, 3, 0, 4, 0, 3, + 0, 1, 1, 2, 1, 1, 1, 1, 1, 2, + 0, 2, 0, 5, 0, 1, 1, 0, 4, 4, + 3, 5, 1, 3, 3, 0, 6, 1, 1, 1, + 3, 2, 3, 1, 1, 0, 6, 1, 1, 1, + 3, 3, 4, 0, 6, 0, 2, 0, 4, 0, + 2, 1, 2, 4, 0, 3, 3, 0, 4, 3, + 0, 3, 4, 3, 11, 0, 3, 8, 2, 0, + 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, + 0, 2, 4, 3, 1, 1, 3, 4, 0, 0, + 0, 0, 2, 2, 1, 1, 0, 2, 3, 0, + 2, 3, 0, 2, 3, 3, 3, 2, 3, 4, + 3, 4, 3, 4, 1, 3, 4, 3, 3, 6, + 1, 5, 6, 5, 7, 6, 8, 5, 6, 4, + 4, 5, 3, 4, 1, 3, 3, 3, 3, 3, + 3, 5, 5, 3, 3, 3, 3, 3, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 2, 1, 2, + 1, 1, 1, 2, 0, 3, 1, 1, 2, 2, + 4, 1, 3, 1, 1, 1, 1, 1, 3, 1, + 1, 1, 1, 3, 2, 2, 2, 2, 3, 3, + 5, 6, 4, 4, 7, 2, 6, 5, 6, 6, + 4, 4, 5, 4, 6, 2, 2, 4, 4, 4, + 10, 6, 8, 6, 4, 4, 6, 4, 4, 4, + 6, 4, 7, 7, 7, 6, 6, 6, 6, 3, + 4, 6, 8, 2, 2, 8, 8, 6, 6, 2, + 6, 6, 8, 8, 6, 8, 6, 2, 8, 8, + 2, 2, 2, 6, 6, 4, 4, 8, 4, 4, + 4, 4, 3, 8, 6, 8, 4, 4, 6, 4, + 4, 4, 6, 8, 4, 3, 6, 4, 6, 5, + 8, 7, 10, 1, 6, 4, 4, 4, 4, 4, + 6, 4, 0, 5, 6, 2, 3, 0, 4, 0, + 3, 0, 1, 1, 3, 4, 4, 5, 4, 4, + 4, 5, 4, 0, 0, 7, 4, 5, 4, 5, + 4, 4, 4, 4, 4, 5, 0, 8, 0, 3, + 3, 1, 4, 0, 1, 0, 2, 0, 0, 4, + 4, 2, 0, 3, 2, 0, 4, 2, 1, 1, + 2, 1, 2, 1, 2, 2, 2, 0, 3, 0, + 1, 1, 3, 1, 3, 1, 3, 0, 1, 0, + 2, 4, 5, 1, 1, 1, 1, 4, 1, 3, + 3, 0, 6, 0, 8, 4, 0, 8, 0, 10, + 6, 0, 8, 0, 10, 6, 1, 2, 1, 1, + 2, 0, 1, 5, 0, 5, 3, 5, 2, 0, + 5, 1, 0, 3, 0, 3, 0, 0, 5, 0, + 1, 0, 1, 0, 2, 3, 3, 1, 1, 0, + 7, 0, 7, 1, 2, 0, 0, 2, 0, 2, + 0, 1, 1, 1, 1, 3, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 0, 2, 0, 1, + 0, 0, 3, 0, 0, 3, 2, 0, 0, 4, + 4, 2, 0, 1, 1, 3, 3, 1, 2, 0, + 1, 0, 4, 4, 2, 0, 1, 1, 0, 1, + 1, 2, 5, 4, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 0, 2, 3, 4, 1, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 6, 0, + 1, 3, 1, 3, 0, 2, 3, 1, 1, 2, + 1, 0, 1, 0, 3, 0, 0, 7, 2, 1, + 0, 3, 0, 7, 0, 7, 4, 6, 4, 4, + 5, 5, 0, 6, 4, 4, 5, 6, 4, 1, + 3, 1, 2, 1, 3, 1, 0, 2, 0, 2, + 0, 1, 0, 0, 8, 0, 0, 6, 0, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 3, 4, + 0, 3, 3, 1, 2, 2, 0, 3, 0, 5, + 3, 1, 3, 1, 3, 1, 1, 0, 1, 0, + 4, 0, 1, 3, 1, 1, 1, 0, 0, 6, + 0, 0, 11, 3, 1, 3, 3, 1, 3, 0, + 1, 0, 4, 0, 0, 9, 0, 5, 0, 6, + 0, 2, 1, 3, 2, 4, 0, 2, 0, 2, + 1, 1, 1, 0, 4, 0, 1, 0, 1, 1, + 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, + 0, 3, 0, 3, 2, 4, 4, 3, 4, 4, + 1, 3, 3, 3, 3, 6, 2, 2, 0, 6, + 0, 7, 5, 2, 1, 1, 1, 5, 5, 2, + 2, 1, 4, 3, 2, 3, 2, 2, 1, 4, + 4, 3, 3, 2, 3, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, + 1, 1, 0, 1, 0, 2, 0, 1, 1, 1, + 0, 2, 0, 2, 0, 3, 3, 0, 4, 0, + 4, 1, 1, 1, 1, 1, 1, 1, 3, 1, + 1, 1, 0, 3, 0, 1, 1, 0, 4, 0, + 4, 1, 0, 1, 4, 0, 3, 3, 1, 2, + 2, 2, 2, 3, 3, 2, 1, 1, 1, 1, + 2, 1, 1, 1, 2, 0, 1, 0, 5, 0, + 1, 3, 1, 0, 3, 0, 3, 3, 1, 0, + 4, 0, 3, 2, 0, 1, 0, 2, 0, 3, + 3, 2, 2, 0, 5, 0, 1, 1, 0, 1, + 1, 2, 1, 2, 1, 2, 0, 0, 0, 0, + 22, 1, 1, 0, 1, 0, 1, 1, 0, 1, + 1, 0, 2, 2, 1, 3, 4, 3, 3, 0, + 2, 2, 1, 3, 3, 0, 4, 0, 3, 1, + 1, 0, 3, 2, 3, 1, 1, 2, 0, 2, + 3, 1, 5, 1, 1, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 2, 2, 2, 1, 1, 3, 5, 1, 1, + 1, 1, 1, 3, 4, 5, 1, 5, 3, 2, + 1, 3, 2, 2, 4, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 3, 0, 0, 7, 1, + 3, 0, 3, 0, 3, 0, 3, 0, 3, 2, + 0, 2, 0, 2, 0, 4, 0, 3, 1, 1, + 1, 1, 0, 1, 1, 1, 0, 2, 2, 2, + 3, 3, 4, 6, 2, 3, 3, 3, 5, 2, + 3, 1, 3, 3, 1, 1, 3, 3, 1, 3, + 2, 2, 2, 2, 2, 1, 1, 3, 1, 4, + 4, 1, 1, 1, 1, 1, 0, 4, 1, 1, + 1, 3, 3, 1, 1, 2, 2, 2, 0, 3, + 4, 3, 0, 7, 1, 2, 1, 1, 1, 1, + 1, 1, 0, 5, 1, 1, 1, 1, 1, 3, + 6, 6, 6, 7, 5, 3, 4, 1, 3, 8, + 8, 8, 6, 4, 0, 3, 0, 3, 1, 3, + 2, 1, 1, 0, 1, 1, 2, 0, 1, 1, + 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 1, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 1, 2, 0, 1, 3, 1, 2, + 2, 2, 1, 3, 3, 1, 1, 3, 1, 3, + 1, 3, 1, 1, 1, 1, 4, 5, 4, 6, + 1, 0, 3, 3, 1, 1, 0, 2, 2, 2, + 2, 0, 2, 0, 3, 2, 1, 2, 2, 2, + 2, 2, 2, 0, 3, 1, 0, 1, 0, 1, + 0, 3, 2, 0, 1, 2, 0, 1, 4, 4, + 5, 2, 3, 0, 1, 0, 4, 1, 1, 0, + 1, 0, 2, 2, 1, 0, 1, 1, 3, 4, + 1, 0, 5, 3, 0, 0, 0, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 3, 3, 3, 3, 0, + 3, 3, 0, 8, 0, 3, 1, 3, 0, 3, + 2, 4, 0, 3, 4, 4, 0, 0, 0, 0, + 18, 2, 1, 7, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 12, 4, 4, 3, 4, 3, + 2, 1, 3, 5, 1, 1, 0, 1, 1, 0, + 2, 0, 0, 3, 0, 2, 5, 3, 3, 3, + 1 }; -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ yyerror (thd, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) - - -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - + YYERROR; \ + } \ +while (0) + +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ -#ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL -# define YY_LOCATION_PRINT(File, Loc) \ - fprintf (File, "%d.%d-%d.%d", \ - (Loc).first_line, (Loc).first_column, \ - (Loc).last_line, (Loc).last_column) -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -#else -# define YYLEX yylex (&yylval, thd) -#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -20294,56 +19193,47 @@ # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value, thd); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, thd); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ + static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, THD *thd) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep, thd) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; - THD *thd; -#endif { + FILE *yyo = yyoutput; + YYUSE (yyo); + YYUSE (thd); if (!yyvaluep) return; - YYUSE (thd); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); # endif - switch (yytype) - { - default: - break; - } + YYUSE (yytype); } @@ -20351,23 +19241,11 @@ | Print this symbol on YYOUTPUT. | `--------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, THD *thd) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep, thd) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; - THD *thd; -#endif { - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, thd); YYFPRINTF (yyoutput, ")"); @@ -20378,16 +19256,8 @@ | TOP (included). | `------------------------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -#else -static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; -#endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -20398,50 +19268,42 @@ YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule, THD *thd) -#else static void -yy_reduce_print (yyvsp, yyrule, thd) - YYSTYPE *yyvsp; - int yyrule; - THD *thd; -#endif +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, THD *thd) { + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - , thd); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , thd); YYFPRINTF (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule, thd); \ -} while (YYID (0)) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule, thd); \ +} while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@ -20455,7 +19317,7 @@ /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -20470,7 +19332,6 @@ # define YYMAXDEPTH 10000 #endif - #if YYERROR_VERBOSE @@ -20479,15 +19340,8 @@ # define yystrlen strlen # else /* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) @@ -20503,16 +19357,8 @@ # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif { char *yyd = yydest; const char *yys = yysrc; @@ -20542,27 +19388,27 @@ char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } @@ -20573,199 +19419,179 @@ } # endif -/* Copy into YYRESULT an error message about the unexpected token - YYCHAR while in state YYSTATE. Return the number of bytes copied, - including the terminating null byte. If YYRESULT is null, do not - copy anything; just return the number of bytes that would be - copied. As a special case, return 0 if an ordinary "syntax error" - message will do. Return YYSIZE_MAXIMUM if overflow occurs during - size calculation. */ -static YYSIZE_T -yysyntax_error (char *yyresult, int yystate, int yychar) +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) { - int yyn = yypact[yystate]; + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } - if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) - return 0; - else + switch (yycount) { - int yytype = YYTRANSLATE (yychar); - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); - YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; - int yysize_overflow = 0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int yyx; - -# if 0 - /* This is so xgettext sees the translatable formats that are - constructed on the fly. */ - YY_("syntax error, unexpected %s"); - YY_("syntax error, unexpected %s, expecting %s"); - YY_("syntax error, unexpected %s, expecting %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s"); - YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); -# endif - char *yyfmt; - char const *yyf; - static char const yyunexpected[] = "syntax error, unexpected %s"; - static char const yyexpecting[] = ", expecting %s"; - static char const yyor[] = " or %s"; - char yyformat[sizeof yyunexpected - + sizeof yyexpecting - 1 - + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) - * (sizeof yyor - 1))]; - char const *yyprefix = yyexpecting; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 1; - - yyarg[0] = yytname[yytype]; - yyfmt = yystpcpy (yyformat, yyunexpected); - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - yyformat[sizeof yyunexpected - 1] = '\0'; - break; - } - yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - yyfmt = yystpcpy (yyfmt, yyprefix); - yyprefix = yyor; - } +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } - yyf = YY_(yyformat); - yysize1 = yysize + yystrlen (yyf); - yysize_overflow |= (yysize1 < yysize); - yysize = yysize1; - - if (yysize_overflow) - return YYSIZE_MAXIMUM; - - if (yyresult) - { - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - char *yyp = yyresult; - int yyi = 0; - while ((*yyp = *yyf) != '\0') - { - if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyf += 2; - } - else - { - yyp++; - yyf++; - } - } - } - return yysize; + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; } #endif /* YYERROR_VERBOSE */ - /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, THD *thd) -#else -static void -yydestruct (yymsg, yytype, yyvaluep, thd) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; - THD *thd; -#endif { YYUSE (yyvaluep); YYUSE (thd); - if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - switch (yytype) - { - - default: - break; - } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (THD *thd); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - -/*-------------------------. -| yyparse or yypush_parse. | -`-------------------------*/ +/*----------. +| yyparse. | +`----------*/ -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) int yyparse (THD *thd) -#else -int -yyparse (thd) - THD *thd; -#endif -#endif { /* The lookahead symbol. */ int yychar; + /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ int yynerrs; @@ -20775,10 +19601,10 @@ int yyerrstatus; /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. + 'yyss': related to states. + 'yyvs': related to semantic values. - Refer to the stacks thru separate pointers, to allow yyoverflow + Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -20796,7 +19622,7 @@ int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken; + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -20814,9 +19640,8 @@ Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -20825,14 +19650,6 @@ yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - yyssp = yyss; - yyvsp = yyvs; - goto yysetstate; /*------------------------------------------------------------. @@ -20853,23 +19670,23 @@ #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); - yyss = yyss1; - yyvs = yyvs1; + yyss = yyss1; + yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE @@ -20877,22 +19694,22 @@ # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ @@ -20901,10 +19718,10 @@ yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@ -20924,7 +19741,7 @@ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ @@ -20933,7 +19750,7 @@ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; + yychar = yylex (&yylval, thd); } if (yychar <= YYEOF) @@ -20955,8 +19772,8 @@ yyn = yytable[yyn]; if (yyn <= 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; + if (yytable_value_is_error (yyn)) + goto yyerrlab; yyn = -yyn; goto yyreduce; } @@ -20973,7 +19790,9 @@ yychar = YYEMPTY; yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -20996,7 +19815,7 @@ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -21010,9 +19829,7 @@ switch (yyn) { case 2: - -/* Line 1455 of yacc.c */ -#line 2024 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2026 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!thd->bootstrap && (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT))) @@ -21021,12 +19838,11 @@ thd->lex->sql_command= SQLCOM_EMPTY_QUERY; YYLIP->found_semicolon= NULL; } +#line 19842 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 3: - -/* Line 1455 of yacc.c */ -#line 2033 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2035 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex_input_stream *lip = YYLIP; @@ -21049,264 +19865,237 @@ lip->found_semicolon= NULL; } } +#line 19869 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 5: - -/* Line 1455 of yacc.c */ -#line 2058 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2060 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Single query, not terminated. */ YYLIP->found_semicolon= NULL; } +#line 19878 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 67: - -/* Line 1455 of yacc.c */ -#line 2137 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2139 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->sql_command= SQLCOM_DEALLOCATE_PREPARE; - lex->prepared_stmt_name= (yyvsp[(3) - (3)].lex_str); + lex->prepared_stmt_name= (yyvsp[0].lex_str); } +#line 19888 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 70: - -/* Line 1455 of yacc.c */ -#line 2151 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2153 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->sql_command= SQLCOM_PREPARE; - lex->prepared_stmt_name= (yyvsp[(2) - (4)].lex_str); + lex->prepared_stmt_name= (yyvsp[-2].lex_str); } +#line 19898 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 71: - -/* Line 1455 of yacc.c */ -#line 2160 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2162 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; - lex->prepared_stmt_code= (yyvsp[(1) - (1)].lex_str); + lex->prepared_stmt_code= (yyvsp[0].lex_str); lex->prepared_stmt_code_is_varref= FALSE; } +#line 19908 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 72: - -/* Line 1455 of yacc.c */ -#line 2166 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2168 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; - lex->prepared_stmt_code= (yyvsp[(2) - (2)].lex_str); + lex->prepared_stmt_code= (yyvsp[0].lex_str); lex->prepared_stmt_code_is_varref= TRUE; } +#line 19918 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 73: - -/* Line 1455 of yacc.c */ -#line 2175 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2177 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->sql_command= SQLCOM_EXECUTE; - lex->prepared_stmt_name= (yyvsp[(2) - (2)].lex_str); + lex->prepared_stmt_name= (yyvsp[0].lex_str); } +#line 19928 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 74: - -/* Line 1455 of yacc.c */ -#line 2181 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2183 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 19934 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 79: - -/* Line 1455 of yacc.c */ -#line 2196 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2198 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - LEX_STRING *lexstr= (LEX_STRING*)thd->memdup(&(yyvsp[(2) - (2)].lex_str), sizeof(LEX_STRING)); + LEX_STRING *lexstr= (LEX_STRING*)thd->memdup(&(yyvsp[0].lex_str), sizeof(LEX_STRING)); if (!lexstr || lex->prepared_stmt_params.push_back(lexstr, thd->mem_root)) MYSQL_YYABORT; } +#line 19946 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 80: - -/* Line 1455 of yacc.c */ -#line 2209 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2211 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Lex->sphead) my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "HELP")); } +#line 19955 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 81: - -/* Line 1455 of yacc.c */ -#line 2214 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2216 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_HELP; - lex->help_arg= (yyvsp[(3) - (3)].lex_str).str; + lex->help_arg= (yyvsp[0].lex_str).str; } +#line 19965 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 82: - -/* Line 1455 of yacc.c */ -#line 2225 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2227 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_CHANGE_MASTER; } +#line 19973 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 83: - -/* Line 1455 of yacc.c */ -#line 2229 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2231 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 19979 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 86: - -/* Line 1455 of yacc.c */ -#line 2239 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2241 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.host = (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.host = (yyvsp[0].lex_str).str; } +#line 19987 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 87: - -/* Line 1455 of yacc.c */ -#line 2243 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2245 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.user = (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.user = (yyvsp[0].lex_str).str; } +#line 19995 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 88: - -/* Line 1455 of yacc.c */ -#line 2247 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2249 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.password = (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.password = (yyvsp[0].lex_str).str; } +#line 20003 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 89: - -/* Line 1455 of yacc.c */ -#line 2251 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2253 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.port = (yyvsp[(3) - (3)].ulong_num); + Lex->mi.port = (yyvsp[0].ulong_num); } +#line 20011 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 90: - -/* Line 1455 of yacc.c */ -#line 2255 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2257 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.connect_retry = (yyvsp[(3) - (3)].ulong_num); + Lex->mi.connect_retry = (yyvsp[0].ulong_num); } +#line 20019 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 91: - -/* Line 1455 of yacc.c */ -#line 2259 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2261 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl= (yyvsp[(3) - (3)].ulong_num) ? + Lex->mi.ssl= (yyvsp[0].ulong_num) ? LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE; } +#line 20028 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 92: - -/* Line 1455 of yacc.c */ -#line 2264 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2266 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_ca= (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.ssl_ca= (yyvsp[0].lex_str).str; } +#line 20036 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 93: - -/* Line 1455 of yacc.c */ -#line 2268 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2270 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_capath= (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.ssl_capath= (yyvsp[0].lex_str).str; } +#line 20044 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 94: - -/* Line 1455 of yacc.c */ -#line 2272 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2274 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_cert= (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.ssl_cert= (yyvsp[0].lex_str).str; } +#line 20052 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 95: - -/* Line 1455 of yacc.c */ -#line 2276 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2278 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_cipher= (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.ssl_cipher= (yyvsp[0].lex_str).str; } +#line 20060 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 96: - -/* Line 1455 of yacc.c */ -#line 2280 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2282 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_key= (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.ssl_key= (yyvsp[0].lex_str).str; } +#line 20068 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 97: - -/* Line 1455 of yacc.c */ -#line 2284 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2286 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_verify_server_cert= (yyvsp[(3) - (3)].ulong_num) ? + Lex->mi.ssl_verify_server_cert= (yyvsp[0].ulong_num) ? LEX_MASTER_INFO::LEX_MI_ENABLE : LEX_MASTER_INFO::LEX_MI_DISABLE; } +#line 20077 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 98: - -/* Line 1455 of yacc.c */ -#line 2289 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2291 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_crl= (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.ssl_crl= (yyvsp[0].lex_str).str; } +#line 20085 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 99: - -/* Line 1455 of yacc.c */ -#line 2293 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2295 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.ssl_crlpath= (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.ssl_crlpath= (yyvsp[0].lex_str).str; } +#line 20093 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 100: - -/* Line 1455 of yacc.c */ -#line 2298 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2300 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.heartbeat_period= (float) (yyvsp[(3) - (3)].item_num)->val_real(); + Lex->mi.heartbeat_period= (float) (yyvsp[0].item_num)->val_real(); if (Lex->mi.heartbeat_period > SLAVE_MAX_HEARTBEAT_PERIOD || Lex->mi.heartbeat_period < 0.0) my_yyabort_error((ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, MYF(0), @@ -21331,75 +20120,67 @@ } Lex->mi.heartbeat_opt= LEX_MASTER_INFO::LEX_MI_ENABLE; } +#line 20124 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 101: - -/* Line 1455 of yacc.c */ -#line 2325 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2327 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->mi.repl_ignore_server_ids_opt= LEX_MASTER_INFO::LEX_MI_ENABLE; } +#line 20132 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 102: - -/* Line 1455 of yacc.c */ -#line 2329 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2331 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->mi.repl_do_domain_ids_opt= LEX_MASTER_INFO::LEX_MI_ENABLE; } +#line 20140 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 103: - -/* Line 1455 of yacc.c */ -#line 2333 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2335 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->mi.repl_ignore_domain_ids_opt= LEX_MASTER_INFO::LEX_MI_ENABLE; } +#line 20148 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 108: - -/* Line 1455 of yacc.c */ -#line 2348 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2350 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - insert_dynamic(&Lex->mi.repl_ignore_server_ids, (uchar*) &((yyvsp[(1) - (1)].ulong_num))); + insert_dynamic(&Lex->mi.repl_ignore_server_ids, (uchar*) &((yyvsp[0].ulong_num))); } +#line 20156 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 112: - -/* Line 1455 of yacc.c */ -#line 2361 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2363 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - insert_dynamic(&Lex->mi.repl_do_domain_ids, (uchar*) &((yyvsp[(1) - (1)].ulong_num))); + insert_dynamic(&Lex->mi.repl_do_domain_ids, (uchar*) &((yyvsp[0].ulong_num))); } +#line 20164 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 116: - -/* Line 1455 of yacc.c */ -#line 2374 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2376 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - insert_dynamic(&Lex->mi.repl_ignore_domain_ids, (uchar*) &((yyvsp[(1) - (1)].ulong_num))); + insert_dynamic(&Lex->mi.repl_ignore_domain_ids, (uchar*) &((yyvsp[0].ulong_num))); } +#line 20172 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 117: - -/* Line 1455 of yacc.c */ -#line 2381 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2383 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.log_file_name = (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.log_file_name = (yyvsp[0].lex_str).str; } +#line 20180 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 118: - -/* Line 1455 of yacc.c */ -#line 2385 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2387 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* If the user specified a value < BIN_LOG_HEADER_SIZE, adjust it @@ -21412,96 +20193,88 @@ from 0" (4 in fact), unspecified means "don't change the position (keep the preceding value)"). */ - Lex->mi.pos= MY_MAX(BIN_LOG_HEADER_SIZE, (yyvsp[(3) - (3)].ulonglong_number)); + Lex->mi.pos= MY_MAX(BIN_LOG_HEADER_SIZE, (yyvsp[0].ulonglong_number)); } +#line 20199 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 119: - -/* Line 1455 of yacc.c */ -#line 2400 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2402 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.relay_log_name = (yyvsp[(3) - (3)].lex_str).str; + Lex->mi.relay_log_name = (yyvsp[0].lex_str).str; } +#line 20207 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 120: - -/* Line 1455 of yacc.c */ -#line 2404 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2406 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.relay_log_pos = (yyvsp[(3) - (3)].ulong_num); + Lex->mi.relay_log_pos = (yyvsp[0].ulong_num); /* Adjust if < BIN_LOG_HEADER_SIZE (same comment as Lex->mi.pos) */ Lex->mi.relay_log_pos= MY_MAX(BIN_LOG_HEADER_SIZE, Lex->mi.relay_log_pos); } +#line 20217 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 121: - -/* Line 1455 of yacc.c */ -#line 2410 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2412 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Lex->mi.use_gtid_opt != LEX_MASTER_INFO::LEX_GTID_UNCHANGED) my_yyabort_error((ER_DUP_ARGUMENT, MYF(0), "MASTER_use_gtid")); Lex->mi.use_gtid_opt= LEX_MASTER_INFO::LEX_GTID_CURRENT_POS; } +#line 20227 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 122: - -/* Line 1455 of yacc.c */ -#line 2416 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2418 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Lex->mi.use_gtid_opt != LEX_MASTER_INFO::LEX_GTID_UNCHANGED) my_yyabort_error((ER_DUP_ARGUMENT, MYF(0), "MASTER_use_gtid")); Lex->mi.use_gtid_opt= LEX_MASTER_INFO::LEX_GTID_SLAVE_POS; } +#line 20237 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 123: - -/* Line 1455 of yacc.c */ -#line 2422 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2424 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Lex->mi.use_gtid_opt != LEX_MASTER_INFO::LEX_GTID_UNCHANGED) my_yyabort_error((ER_DUP_ARGUMENT, MYF(0), "MASTER_use_gtid")); Lex->mi.use_gtid_opt= LEX_MASTER_INFO::LEX_GTID_NO; } +#line 20247 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 124: - -/* Line 1455 of yacc.c */ -#line 2431 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2433 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->mi.connection_name= null_lex_str; } +#line 20256 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 126: - -/* Line 1455 of yacc.c */ -#line 2440 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2442 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.connection_name= (yyvsp[(1) - (1)].lex_str); + Lex->mi.connection_name= (yyvsp[0].lex_str); #ifdef HAVE_REPLICATION - if (check_master_connection_name(&(yyvsp[(1) - (1)].lex_str))) + if (check_master_connection_name(&(yyvsp[0].lex_str))) my_yyabort_error((ER_WRONG_ARGUMENTS, MYF(0), "MASTER_CONNECTION_NAME")); #endif } +#line 20268 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 127: - -/* Line 1455 of yacc.c */ -#line 2453 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2455 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->create_info.init(); - if (lex->set_command_with_check(SQLCOM_CREATE_TABLE, (yyvsp[(2) - (5)].num), (yyvsp[(1) - (5)].object_ddl_options) | (yyvsp[(4) - (5)].object_ddl_options))) + if (lex->set_command_with_check(SQLCOM_CREATE_TABLE, (yyvsp[-3].num), (yyvsp[-4].object_ddl_options) | (yyvsp[-1].object_ddl_options))) MYSQL_YYABORT; - if (!lex->select_lex.add_table_to_list(thd, (yyvsp[(5) - (5)].table), NULL, + if (!lex->select_lex.add_table_to_list(thd, (yyvsp[0].table), NULL, TL_OPTION_UPDATING, TL_WRITE, MDL_EXCLUSIVE)) MYSQL_YYABORT; @@ -21515,12 +20288,11 @@ lex->name= null_lex_str; lex->create_last_non_select_table= lex->last_table(); } +#line 20292 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 128: - -/* Line 1455 of yacc.c */ -#line 2473 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2475 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->current_select= &lex->select_lex; @@ -21532,275 +20304,248 @@ ER_WARN_USING_OTHER_HANDLER, ER_THD(thd, ER_WARN_USING_OTHER_HANDLER), hton_name(lex->create_info.db_type)->str, - (yyvsp[(5) - (7)].table)->table.str); + (yyvsp[-2].table)->table.str); } create_table_set_open_action_and_adjust_tables(lex); } +#line 20312 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 129: - -/* Line 1455 of yacc.c */ -#line 2491 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2493 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_create_index_prepare(Lex, (yyvsp[(8) - (8)].table))) + if (add_create_index_prepare(Lex, (yyvsp[0].table))) MYSQL_YYABORT; - if (Lex->add_create_index((yyvsp[(2) - (8)].key_type), (yyvsp[(5) - (8)].lex_str), (yyvsp[(6) - (8)].key_alg), (yyvsp[(1) - (8)].object_ddl_options) | (yyvsp[(4) - (8)].object_ddl_options))) + if (Lex->add_create_index((yyvsp[-6].key_type), (yyvsp[-3].lex_str), (yyvsp[-2].key_alg), (yyvsp[-7].object_ddl_options) | (yyvsp[-4].object_ddl_options))) MYSQL_YYABORT; } +#line 20323 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 130: - -/* Line 1455 of yacc.c */ -#line 2498 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2500 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 20329 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 131: - -/* Line 1455 of yacc.c */ -#line 2501 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2503 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_create_index_prepare(Lex, (yyvsp[(7) - (7)].table))) + if (add_create_index_prepare(Lex, (yyvsp[0].table))) MYSQL_YYABORT; - if (Lex->add_create_index((yyvsp[(2) - (7)].key_type), (yyvsp[(5) - (7)].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[(1) - (7)].object_ddl_options) | (yyvsp[(4) - (7)].object_ddl_options))) + if (Lex->add_create_index((yyvsp[-5].key_type), (yyvsp[-2].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[-6].object_ddl_options) | (yyvsp[-3].object_ddl_options))) MYSQL_YYABORT; } +#line 20340 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 132: - -/* Line 1455 of yacc.c */ -#line 2508 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2510 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 20346 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 133: - -/* Line 1455 of yacc.c */ -#line 2511 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2513 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_create_index_prepare(Lex, (yyvsp[(7) - (7)].table))) + if (add_create_index_prepare(Lex, (yyvsp[0].table))) MYSQL_YYABORT; - if (Lex->add_create_index((yyvsp[(2) - (7)].key_type), (yyvsp[(5) - (7)].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[(1) - (7)].object_ddl_options) | (yyvsp[(4) - (7)].object_ddl_options))) + if (Lex->add_create_index((yyvsp[-5].key_type), (yyvsp[-2].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[-6].object_ddl_options) | (yyvsp[-3].object_ddl_options))) MYSQL_YYABORT; } +#line 20357 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 134: - -/* Line 1455 of yacc.c */ -#line 2518 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2520 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 20363 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 135: - -/* Line 1455 of yacc.c */ -#line 2520 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2522 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.default_table_charset= NULL; Lex->create_info.used_fields= 0; } +#line 20372 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 136: - -/* Line 1455 of yacc.c */ -#line 2525 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2527 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - if (lex->set_command_with_check(SQLCOM_CREATE_DB, 0, (yyvsp[(1) - (6)].object_ddl_options) | (yyvsp[(3) - (6)].object_ddl_options))) + if (lex->set_command_with_check(SQLCOM_CREATE_DB, 0, (yyvsp[-5].object_ddl_options) | (yyvsp[-3].object_ddl_options))) MYSQL_YYABORT; - lex->name= (yyvsp[(4) - (6)].lex_str); + lex->name= (yyvsp[-2].lex_str); } +#line 20383 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 137: - -/* Line 1455 of yacc.c */ -#line 2532 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2534 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.set((yyvsp[(1) - (1)].object_ddl_options)); - Lex->create_view_mode= ((yyvsp[(1) - (1)].object_ddl_options).or_replace() ? VIEW_CREATE_OR_REPLACE : + Lex->create_info.set((yyvsp[0].object_ddl_options)); + Lex->create_view_mode= ((yyvsp[0].object_ddl_options).or_replace() ? VIEW_CREATE_OR_REPLACE : VIEW_CREATE_NEW); Lex->create_view_algorithm= DTYPE_ALGORITHM_UNDEFINED; Lex->create_view_suid= TRUE; } +#line 20395 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 138: - -/* Line 1455 of yacc.c */ -#line 2539 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2541 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 20401 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 139: - -/* Line 1455 of yacc.c */ -#line 2541 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2543 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->set_command_with_check(SQLCOM_CREATE_USER, (yyvsp[(1) - (5)].object_ddl_options) | (yyvsp[(3) - (5)].object_ddl_options))) + if (Lex->set_command_with_check(SQLCOM_CREATE_USER, (yyvsp[-4].object_ddl_options) | (yyvsp[-2].object_ddl_options))) MYSQL_YYABORT; } +#line 20410 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 140: - -/* Line 1455 of yacc.c */ -#line 2547 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2549 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->set_command_with_check(SQLCOM_CREATE_ROLE, (yyvsp[(1) - (6)].object_ddl_options) | (yyvsp[(3) - (6)].object_ddl_options))) + if (Lex->set_command_with_check(SQLCOM_CREATE_ROLE, (yyvsp[-5].object_ddl_options) | (yyvsp[-3].object_ddl_options))) MYSQL_YYABORT; } +#line 20419 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 141: - -/* Line 1455 of yacc.c */ -#line 2552 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2554 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_tablespace_info->ts_cmd_type= CREATE_LOGFILE_GROUP; } +#line 20427 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 142: - -/* Line 1455 of yacc.c */ -#line 2556 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2558 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_tablespace_info->ts_cmd_type= CREATE_TABLESPACE; } +#line 20435 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 143: - -/* Line 1455 of yacc.c */ -#line 2559 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->set_command(SQLCOM_CREATE_SERVER, (yyvsp[(1) - (1)].object_ddl_options)); } +#line 2561 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->set_command(SQLCOM_CREATE_SERVER, (yyvsp[0].object_ddl_options)); } +#line 20441 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 144: - -/* Line 1455 of yacc.c */ -#line 2561 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2563 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 20447 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 145: - -/* Line 1455 of yacc.c */ -#line 2566 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2568 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->add_create_options_with_check((yyvsp[(2) - (3)].object_ddl_options))) + if (Lex->add_create_options_with_check((yyvsp[-1].object_ddl_options))) MYSQL_YYABORT; - Lex->server_options.reset((yyvsp[(3) - (3)].lex_str)); + Lex->server_options.reset((yyvsp[0].lex_str)); } +#line 20457 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 146: - -/* Line 1455 of yacc.c */ -#line 2573 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->server_options.scheme= (yyvsp[(8) - (12)].lex_str); } +#line 2575 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->server_options.scheme= (yyvsp[-4].lex_str); } +#line 20463 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 149: - -/* Line 1455 of yacc.c */ -#line 2583 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2585 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT_UNLESS(Lex->server_options.username.str == 0); - Lex->server_options.username= (yyvsp[(2) - (2)].lex_str); + Lex->server_options.username= (yyvsp[0].lex_str); } +#line 20472 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 150: - -/* Line 1455 of yacc.c */ -#line 2588 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2590 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT_UNLESS(Lex->server_options.host.str == 0); - Lex->server_options.host= (yyvsp[(2) - (2)].lex_str); + Lex->server_options.host= (yyvsp[0].lex_str); } +#line 20481 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 151: - -/* Line 1455 of yacc.c */ -#line 2593 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2595 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT_UNLESS(Lex->server_options.db.str == 0); - Lex->server_options.db= (yyvsp[(2) - (2)].lex_str); + Lex->server_options.db= (yyvsp[0].lex_str); } +#line 20490 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 152: - -/* Line 1455 of yacc.c */ -#line 2598 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2600 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT_UNLESS(Lex->server_options.owner.str == 0); - Lex->server_options.owner= (yyvsp[(2) - (2)].lex_str); + Lex->server_options.owner= (yyvsp[0].lex_str); } +#line 20499 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 153: - -/* Line 1455 of yacc.c */ -#line 2603 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2605 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT_UNLESS(Lex->server_options.password.str == 0); - Lex->server_options.password= (yyvsp[(2) - (2)].lex_str); + Lex->server_options.password= (yyvsp[0].lex_str); } +#line 20508 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 154: - -/* Line 1455 of yacc.c */ -#line 2608 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2610 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT_UNLESS(Lex->server_options.socket.str == 0); - Lex->server_options.socket= (yyvsp[(2) - (2)].lex_str); + Lex->server_options.socket= (yyvsp[0].lex_str); } +#line 20517 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 155: - -/* Line 1455 of yacc.c */ -#line 2613 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2615 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->server_options.port= (yyvsp[(2) - (2)].ulong_num); + Lex->server_options.port= (yyvsp[0].ulong_num); } +#line 20525 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 156: - -/* Line 1455 of yacc.c */ -#line 2620 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2622 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->stmt_definition_begin= (yyvsp[(1) - (4)].simple_string); - if (lex->add_create_options_with_check((yyvsp[(3) - (4)].object_ddl_options))) + lex->stmt_definition_begin= (yyvsp[-3].simple_string); + if (lex->add_create_options_with_check((yyvsp[-1].object_ddl_options))) MYSQL_YYABORT; if (!(lex->event_parse_data= Event_parse_data::new_instance(thd))) MYSQL_YYABORT; - lex->event_parse_data->identifier= (yyvsp[(4) - (4)].spname); + lex->event_parse_data->identifier= (yyvsp[0].spname); lex->event_parse_data->on_completion= Event_parse_data::ON_COMPLETION_DROP; lex->sql_command= SQLCOM_CREATE_EVENT; /* We need that for disallowing subqueries */ } +#line 20545 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 157: - -/* Line 1455 of yacc.c */ -#line 2640 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2642 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* sql_command is set here because some rules in ev_sql_stmt @@ -21808,137 +20553,123 @@ */ Lex->sql_command= SQLCOM_CREATE_EVENT; } +#line 20557 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 158: - -/* Line 1455 of yacc.c */ -#line 2651 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2653 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->event_parse_data->item_expression= (yyvsp[(2) - (3)].item); - Lex->event_parse_data->interval= (yyvsp[(3) - (3)].interval); + Lex->event_parse_data->item_expression= (yyvsp[-1].item); + Lex->event_parse_data->interval= (yyvsp[0].interval); } +#line 20566 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 160: - -/* Line 1455 of yacc.c */ -#line 2658 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2660 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->event_parse_data->item_execute_at= (yyvsp[(2) - (2)].item); + Lex->event_parse_data->item_execute_at= (yyvsp[0].item); } +#line 20574 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 161: - -/* Line 1455 of yacc.c */ -#line 2664 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2666 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 20580 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 162: - -/* Line 1455 of yacc.c */ -#line 2666 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2668 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->event_parse_data->status= Event_parse_data::ENABLED; Lex->event_parse_data->status_changed= true; (yyval.num)= 1; } +#line 20590 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 163: - -/* Line 1455 of yacc.c */ -#line 2672 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2674 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->event_parse_data->status= Event_parse_data::SLAVESIDE_DISABLED; Lex->event_parse_data->status_changed= true; (yyval.num)= 1; } +#line 20600 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 164: - -/* Line 1455 of yacc.c */ -#line 2678 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2680 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->event_parse_data->status= Event_parse_data::DISABLED; Lex->event_parse_data->status_changed= true; (yyval.num)= 1; } +#line 20610 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 165: - -/* Line 1455 of yacc.c */ -#line 2687 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2689 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item *item= new (thd->mem_root) Item_func_now_local(thd, 0); if (item == NULL) MYSQL_YYABORT; Lex->event_parse_data->item_starts= item; } +#line 20621 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 166: - -/* Line 1455 of yacc.c */ -#line 2694 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2696 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->event_parse_data->item_starts= (yyvsp[(2) - (2)].item); + Lex->event_parse_data->item_starts= (yyvsp[0].item); } +#line 20629 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 168: - -/* Line 1455 of yacc.c */ -#line 2702 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2704 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->event_parse_data->item_ends= (yyvsp[(2) - (2)].item); + Lex->event_parse_data->item_ends= (yyvsp[0].item); } +#line 20637 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 169: - -/* Line 1455 of yacc.c */ -#line 2708 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2710 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 20643 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 171: - -/* Line 1455 of yacc.c */ -#line 2714 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2716 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->event_parse_data->on_completion= (yyvsp[(3) - (4)].num) + Lex->event_parse_data->on_completion= (yyvsp[-1].num) ? Event_parse_data::ON_COMPLETION_DROP : Event_parse_data::ON_COMPLETION_PRESERVE; (yyval.num)= 1; } +#line 20654 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 172: - -/* Line 1455 of yacc.c */ -#line 2723 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2725 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 20660 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 173: - -/* Line 1455 of yacc.c */ -#line 2725 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2727 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->comment= Lex->event_parse_data->comment= (yyvsp[(2) - (2)].lex_str); + Lex->comment= Lex->event_parse_data->comment= (yyvsp[0].lex_str); (yyval.num)= 1; } +#line 20669 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 174: - -/* Line 1455 of yacc.c */ -#line 2732 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2734 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; Lex_input_stream *lip= YYLIP; @@ -21969,12 +20700,11 @@ lex->sp_chistics.suid= SP_IS_SUID; //always the definer! lex->sphead->set_body_start(thd, lip->get_cpp_ptr()); } +#line 20704 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 175: - -/* Line 1455 of yacc.c */ -#line 2763 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2765 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; @@ -21984,12 +20714,11 @@ lex->event_parse_data->body_changed= TRUE; } +#line 20718 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 176: - -/* Line 1455 of yacc.c */ -#line 2776 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2778 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->users_list.empty(); @@ -22001,221 +20730,198 @@ lex->ssl_cipher= lex->x509_subject= lex->x509_issuer= 0; bzero((char *)&(lex->mqh),sizeof(lex->mqh)); } +#line 20734 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 177: - -/* Line 1455 of yacc.c */ -#line 2791 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2793 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!(yyvsp[(1) - (3)].lex_str).str || check_db_name(&(yyvsp[(1) - (3)].lex_str))) - my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); - if (check_routine_name(&(yyvsp[(3) - (3)].lex_str))) + if (!(yyvsp[-2].lex_str).str || check_db_name(&(yyvsp[-2].lex_str))) + my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[-2].lex_str).str)); + if (check_routine_name(&(yyvsp[0].lex_str))) MYSQL_YYABORT; - (yyval.spname)= new (thd->mem_root) sp_name((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), true); + (yyval.spname)= new (thd->mem_root) sp_name((yyvsp[-2].lex_str), (yyvsp[0].lex_str), true); if ((yyval.spname) == NULL) MYSQL_YYABORT; (yyval.spname)->init_qname(thd); } +#line 20749 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 178: - -/* Line 1455 of yacc.c */ -#line 2802 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2804 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; LEX_STRING db; - if (check_routine_name(&(yyvsp[(1) - (1)].lex_str))) + if (check_routine_name(&(yyvsp[0].lex_str))) { MYSQL_YYABORT; } if (lex->copy_db_to(&db.str, &db.length)) MYSQL_YYABORT; - (yyval.spname)= new (thd->mem_root) sp_name(db, (yyvsp[(1) - (1)].lex_str), false); + (yyval.spname)= new (thd->mem_root) sp_name(db, (yyvsp[0].lex_str), false); if ((yyval.spname) == NULL) MYSQL_YYABORT; (yyval.spname)->init_qname(thd); } +#line 20768 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 179: - -/* Line 1455 of yacc.c */ -#line 2819 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2821 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20774 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 180: - -/* Line 1455 of yacc.c */ -#line 2820 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2822 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20780 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 181: - -/* Line 1455 of yacc.c */ -#line 2824 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2826 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20786 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 182: - -/* Line 1455 of yacc.c */ -#line 2825 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2827 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20792 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 183: - -/* Line 1455 of yacc.c */ -#line 2831 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->sp_chistics.comment= (yyvsp[(2) - (2)].lex_str); } +#line 2833 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->sp_chistics.comment= (yyvsp[0].lex_str); } +#line 20798 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 184: - -/* Line 1455 of yacc.c */ -#line 2833 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2835 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Just parse it, we only have one language for now. */ } +#line 20804 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 185: - -/* Line 1455 of yacc.c */ -#line 2835 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2837 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sp_chistics.daccess= SP_NO_SQL; } +#line 20810 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 186: - -/* Line 1455 of yacc.c */ -#line 2837 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2839 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sp_chistics.daccess= SP_CONTAINS_SQL; } +#line 20816 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 187: - -/* Line 1455 of yacc.c */ -#line 2839 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2841 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sp_chistics.daccess= SP_READS_SQL_DATA; } +#line 20822 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 188: - -/* Line 1455 of yacc.c */ -#line 2841 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2843 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sp_chistics.daccess= SP_MODIFIES_SQL_DATA; } +#line 20828 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 189: - -/* Line 1455 of yacc.c */ -#line 2843 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2845 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20834 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 190: - -/* Line 1455 of yacc.c */ -#line 2848 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2850 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 20840 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 191: - -/* Line 1455 of yacc.c */ -#line 2849 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->sp_chistics.detistic= ! (yyvsp[(1) - (2)].num); } +#line 2851 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->sp_chistics.detistic= ! (yyvsp[-1].num); } +#line 20846 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 192: - -/* Line 1455 of yacc.c */ -#line 2854 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2856 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sp_chistics.suid= SP_IS_SUID; } +#line 20854 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 193: - -/* Line 1455 of yacc.c */ -#line 2858 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2860 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sp_chistics.suid= SP_IS_NOT_SUID; } +#line 20862 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 194: - -/* Line 1455 of yacc.c */ -#line 2865 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2867 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex = Lex; lex->sql_command= SQLCOM_CALL; - lex->spname= (yyvsp[(2) - (2)].spname); + lex->spname= (yyvsp[0].spname); lex->value_list.empty(); - sp_add_used_routine(lex, thd, (yyvsp[(2) - (2)].spname), TYPE_ENUM_PROCEDURE); + sp_add_used_routine(lex, thd, (yyvsp[0].spname), TYPE_ENUM_PROCEDURE); } +#line 20875 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 195: - -/* Line 1455 of yacc.c */ -#line 2873 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2875 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20881 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 200: - -/* Line 1455 of yacc.c */ -#line 2889 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2891 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->value_list.push_back((yyvsp[(3) - (3)].item), thd->mem_root); + Lex->value_list.push_back((yyvsp[0].item), thd->mem_root); } +#line 20889 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 201: - -/* Line 1455 of yacc.c */ -#line 2893 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2895 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->value_list.push_back((yyvsp[(1) - (1)].item), thd->mem_root); + Lex->value_list.push_back((yyvsp[0].item), thd->mem_root); } +#line 20897 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 206: - -/* Line 1455 of yacc.c */ -#line 2911 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2913 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_pcontext *spc= lex->spcont; - if (spc->find_variable((yyvsp[(1) - (1)].lex_str), TRUE)) - my_yyabort_error((ER_SP_DUP_PARAM, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + if (spc->find_variable((yyvsp[0].lex_str), TRUE)) + my_yyabort_error((ER_SP_DUP_PARAM, MYF(0), (yyvsp[0].lex_str).str)); - sp_variable *spvar= spc->add_variable(thd, (yyvsp[(1) - (1)].lex_str)); + sp_variable *spvar= spc->add_variable(thd, (yyvsp[0].lex_str)); - lex->init_last_field(&spvar->field_def, (yyvsp[(1) - (1)].lex_str).str, + lex->init_last_field(&spvar->field_def, (yyvsp[0].lex_str).str, thd->variables.collation_database); (yyval.spvar)= spvar; } +#line 20915 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 207: - -/* Line 1455 of yacc.c */ -#line 2925 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2927 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - sp_variable *spvar= (yyvsp[(2) - (3)].spvar); + sp_variable *spvar= (yyvsp[-1].spvar); - spvar->type= (yyvsp[(3) - (3)].field_type); - if (lex->sphead->fill_field_definition(thd, lex, (yyvsp[(3) - (3)].field_type), + spvar->type= (yyvsp[0].field_type); + if (lex->sphead->fill_field_definition(thd, lex, (yyvsp[0].field_type), lex->last_field)) { MYSQL_YYABORT; @@ -22225,90 +20931,80 @@ (yyval.spvar)= spvar; } +#line 20935 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 212: - -/* Line 1455 of yacc.c */ -#line 2954 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyvsp[(2) - (2)].spvar)->mode=(yyvsp[(1) - (2)].spvar_mode); } +#line 2956 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyvsp[0].spvar)->mode=(yyvsp[-1].spvar_mode); } +#line 20941 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 213: - -/* Line 1455 of yacc.c */ -#line 2958 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2960 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spvar_mode)= sp_variable::MODE_IN; } +#line 20947 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 214: - -/* Line 1455 of yacc.c */ -#line 2959 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2961 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spvar_mode)= sp_variable::MODE_IN; } +#line 20953 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 215: - -/* Line 1455 of yacc.c */ -#line 2960 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2962 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spvar_mode)= sp_variable::MODE_OUT; } +#line 20959 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 216: - -/* Line 1455 of yacc.c */ -#line 2961 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2963 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spvar_mode)= sp_variable::MODE_INOUT; } +#line 20965 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 217: - -/* Line 1455 of yacc.c */ -#line 2965 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2967 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20971 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 219: - -/* Line 1455 of yacc.c */ -#line 2970 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2972 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 20977 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 221: - -/* Line 1455 of yacc.c */ -#line 2976 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2978 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spblock).vars= (yyval.spblock).conds= (yyval.spblock).hndlrs= (yyval.spblock).curs= 0; } +#line 20985 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 222: - -/* Line 1455 of yacc.c */ -#line 2980 "/home/buildbot/git/sql/sql_yacc.yy" +#line 2982 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* We check for declarations out of (standard) order this way because letting the grammar rules reflect it caused tricky shift/reduce conflicts with the wrong result. (And we get better error handling this way.) */ - if (((yyvsp[(2) - (3)].spblock).vars || (yyvsp[(2) - (3)].spblock).conds) && ((yyvsp[(1) - (3)].spblock).curs || (yyvsp[(1) - (3)].spblock).hndlrs)) + if (((yyvsp[-1].spblock).vars || (yyvsp[-1].spblock).conds) && ((yyvsp[-2].spblock).curs || (yyvsp[-2].spblock).hndlrs)) my_yyabort_error((ER_SP_VARCOND_AFTER_CURSHNDLR, MYF(0))); - if ((yyvsp[(2) - (3)].spblock).curs && (yyvsp[(1) - (3)].spblock).hndlrs) + if ((yyvsp[-1].spblock).curs && (yyvsp[-2].spblock).hndlrs) my_yyabort_error((ER_SP_CURSOR_AFTER_HANDLER, MYF(0))); - (yyval.spblock).vars= (yyvsp[(1) - (3)].spblock).vars + (yyvsp[(2) - (3)].spblock).vars; - (yyval.spblock).conds= (yyvsp[(1) - (3)].spblock).conds + (yyvsp[(2) - (3)].spblock).conds; - (yyval.spblock).hndlrs= (yyvsp[(1) - (3)].spblock).hndlrs + (yyvsp[(2) - (3)].spblock).hndlrs; - (yyval.spblock).curs= (yyvsp[(1) - (3)].spblock).curs + (yyvsp[(2) - (3)].spblock).curs; + (yyval.spblock).vars= (yyvsp[-2].spblock).vars + (yyvsp[-1].spblock).vars; + (yyval.spblock).conds= (yyvsp[-2].spblock).conds + (yyvsp[-1].spblock).conds; + (yyval.spblock).hndlrs= (yyvsp[-2].spblock).hndlrs + (yyvsp[-1].spblock).hndlrs; + (yyval.spblock).curs= (yyvsp[-2].spblock).curs + (yyvsp[-1].spblock).curs; } +#line 21004 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 223: - -/* Line 1455 of yacc.c */ -#line 2998 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3000 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_pcontext *pctx= lex->spcont; @@ -22319,22 +21015,21 @@ sp_variable *spvar= pctx->find_variable(var_idx); lex->sphead->reset_lex(thd); - pctx->declare_var_boundary((yyvsp[(2) - (2)].num)); + pctx->declare_var_boundary((yyvsp[0].num)); thd->lex->init_last_field(&spvar->field_def, spvar->name.str, thd->variables.collation_database); } +#line 21023 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 224: - -/* Line 1455 of yacc.c */ -#line 3014 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3016 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_pcontext *pctx= lex->spcont; uint num_vars= pctx->context_var_count(); - enum enum_field_types var_type= (yyvsp[(4) - (5)].field_type); - Item *dflt_value_item= (yyvsp[(5) - (5)].item); + enum enum_field_types var_type= (yyvsp[-1].field_type); + Item *dflt_value_item= (yyvsp[0].item); if (!dflt_value_item) { @@ -22344,7 +21039,7 @@ /* QQ Set to the var_type with null_value? */ } - for (uint i = num_vars-(yyvsp[(2) - (5)].num) ; i < num_vars ; i++) + for (uint i = num_vars-(yyvsp[-3].num) ; i < num_vars ; i++) { uint var_idx= pctx->var_context2runtime(i); sp_variable *spvar= pctx->find_variable(var_idx); @@ -22381,38 +21076,36 @@ pctx->declare_var_boundary(0); if (lex->sphead->restore_lex(thd)) MYSQL_YYABORT; - (yyval.spblock).vars= (yyvsp[(2) - (5)].num); + (yyval.spblock).vars= (yyvsp[-3].num); (yyval.spblock).conds= (yyval.spblock).hndlrs= (yyval.spblock).curs= 0; } +#line 21083 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 225: - -/* Line 1455 of yacc.c */ -#line 3070 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3072 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_pcontext *spc= lex->spcont; - if (spc->find_condition((yyvsp[(2) - (5)].lex_str), TRUE)) - my_yyabort_error((ER_SP_DUP_COND, MYF(0), (yyvsp[(2) - (5)].lex_str).str)); - if(spc->add_condition(thd, (yyvsp[(2) - (5)].lex_str), (yyvsp[(5) - (5)].spcondvalue))) + if (spc->find_condition((yyvsp[-3].lex_str), TRUE)) + my_yyabort_error((ER_SP_DUP_COND, MYF(0), (yyvsp[-3].lex_str).str)); + if(spc->add_condition(thd, (yyvsp[-3].lex_str), (yyvsp[0].spcondvalue))) MYSQL_YYABORT; (yyval.spblock).vars= (yyval.spblock).hndlrs= (yyval.spblock).curs= 0; (yyval.spblock).conds= 1; } +#line 21099 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 226: - -/* Line 1455 of yacc.c */ -#line 3082 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3084 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; sp_handler *h= lex->spcont->add_handler(thd, - (sp_handler::enum_type) (yyvsp[(2) - (4)].num)); + (sp_handler::enum_type) (yyvsp[-2].num)); lex->spcont= lex->spcont->push_context(thd, sp_pcontext::HANDLER_SCOPE); @@ -22426,19 +21119,18 @@ MYSQL_YYABORT; /* For continue handlers, mark end of handler scope. */ - if ((yyvsp[(2) - (4)].num) == sp_handler::CONTINUE && + if ((yyvsp[-2].num) == sp_handler::CONTINUE && sp->push_backpatch(i, ctx->last_label())) MYSQL_YYABORT; if (sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0))) MYSQL_YYABORT; } +#line 21130 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 227: - -/* Line 1455 of yacc.c */ -#line 3109 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3111 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -22446,7 +21138,7 @@ sp_label *hlab= lex->spcont->pop_label(); /* After this hdlr */ sp_instr_hreturn *i; - if ((yyvsp[(2) - (7)].num) == sp_handler::CONTINUE) + if ((yyvsp[-5].num) == sp_handler::CONTINUE) { i= new (thd->mem_root) sp_instr_hreturn(sp->instructions(), ctx); @@ -22470,12 +21162,11 @@ (yyval.spblock).vars= (yyval.spblock).conds= (yyval.spblock).curs= 0; (yyval.spblock).hndlrs= 1; } +#line 21166 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 228: - -/* Line 1455 of yacc.c */ -#line 3141 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3143 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -22483,32 +21174,30 @@ uint offp; sp_instr_cpush *i; - if (ctx->find_cursor((yyvsp[(2) - (5)].lex_str), &offp, TRUE)) - my_yyabort_error((ER_SP_DUP_CURS, MYF(0), (yyvsp[(2) - (5)].lex_str).str)); + if (ctx->find_cursor((yyvsp[-3].lex_str), &offp, TRUE)) + my_yyabort_error((ER_SP_DUP_CURS, MYF(0), (yyvsp[-3].lex_str).str)); i= new (thd->mem_root) - sp_instr_cpush(sp->instructions(), ctx, (yyvsp[(5) - (5)].lex), + sp_instr_cpush(sp->instructions(), ctx, (yyvsp[0].lex), ctx->current_cursor_count()); - if (i == NULL || sp->add_instr(i) || ctx->add_cursor((yyvsp[(2) - (5)].lex_str))) + if (i == NULL || sp->add_instr(i) || ctx->add_cursor((yyvsp[-3].lex_str))) MYSQL_YYABORT; (yyval.spblock).vars= (yyval.spblock).conds= (yyval.spblock).hndlrs= 0; (yyval.spblock).curs= 1; } +#line 21189 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 229: - -/* Line 1455 of yacc.c */ -#line 3162 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3164 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->reset_lex(thd); } +#line 21197 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 230: - -/* Line 1455 of yacc.c */ -#line 3166 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3168 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -22521,70 +21210,63 @@ if (lex->sphead->restore_lex(thd)) MYSQL_YYABORT; } +#line 21214 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 231: - -/* Line 1455 of yacc.c */ -#line 3181 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3183 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= sp_handler::EXIT; } +#line 21220 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 232: - -/* Line 1455 of yacc.c */ -#line 3182 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3184 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= sp_handler::CONTINUE; } +#line 21226 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 233: - -/* Line 1455 of yacc.c */ -#line 3188 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3190 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 21232 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 234: - -/* Line 1455 of yacc.c */ -#line 3190 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3192 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)+= 1; } +#line 21238 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 235: - -/* Line 1455 of yacc.c */ -#line 3195 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3197 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; sp_pcontext *ctx= lex->spcont->parent_context(); - if (ctx->check_duplicate_handler((yyvsp[(1) - (1)].spcondvalue))) + if (ctx->check_duplicate_handler((yyvsp[0].spcondvalue))) my_yyabort_error((ER_SP_DUP_HANDLER, MYF(0))); sp_instr_hpush_jump *i= (sp_instr_hpush_jump *)sp->last_instruction(); - i->add_condition((yyvsp[(1) - (1)].spcondvalue)); + i->add_condition((yyvsp[0].spcondvalue)); } +#line 21254 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 236: - -/* Line 1455 of yacc.c */ -#line 3210 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3212 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* mysql errno */ - if ((yyvsp[(1) - (1)].ulong_num) == 0) + if ((yyvsp[0].ulong_num) == 0) my_yyabort_error((ER_WRONG_VALUE, MYF(0), "CONDITION", "0")); - (yyval.spcondvalue)= new (thd->mem_root) sp_condition_value((yyvsp[(1) - (1)].ulong_num)); + (yyval.spcondvalue)= new (thd->mem_root) sp_condition_value((yyvsp[0].ulong_num)); if ((yyval.spcondvalue) == NULL) MYSQL_YYABORT; } +#line 21266 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 238: - -/* Line 1455 of yacc.c */ -#line 3222 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3224 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* SQLSTATE */ /* @@ -22594,190 +21276,173 @@ allowed to SIGNAL, or declare a handler for the completion condition. */ - if (!is_sqlstate_valid(&(yyvsp[(3) - (3)].lex_str)) || is_sqlstate_completion((yyvsp[(3) - (3)].lex_str).str)) - my_yyabort_error((ER_SP_BAD_SQLSTATE, MYF(0), (yyvsp[(3) - (3)].lex_str).str)); - (yyval.spcondvalue)= new (thd->mem_root) sp_condition_value((yyvsp[(3) - (3)].lex_str).str); + if (!is_sqlstate_valid(&(yyvsp[0].lex_str)) || is_sqlstate_completion((yyvsp[0].lex_str).str)) + my_yyabort_error((ER_SP_BAD_SQLSTATE, MYF(0), (yyvsp[0].lex_str).str)); + (yyval.spcondvalue)= new (thd->mem_root) sp_condition_value((yyvsp[0].lex_str).str); if ((yyval.spcondvalue) == NULL) MYSQL_YYABORT; } +#line 21286 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 239: - -/* Line 1455 of yacc.c */ -#line 3240 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3242 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 21292 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 240: - -/* Line 1455 of yacc.c */ -#line 3241 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3243 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 21298 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 241: - -/* Line 1455 of yacc.c */ -#line 3246 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3248 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.spcondvalue)= (yyvsp[(1) - (1)].spcondvalue); + (yyval.spcondvalue)= (yyvsp[0].spcondvalue); } +#line 21306 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 242: - -/* Line 1455 of yacc.c */ -#line 3250 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3252 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.spcondvalue)= Lex->spcont->find_condition((yyvsp[(1) - (1)].lex_str), false); + (yyval.spcondvalue)= Lex->spcont->find_condition((yyvsp[0].lex_str), false); if ((yyval.spcondvalue) == NULL) - my_yyabort_error((ER_SP_COND_MISMATCH, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + my_yyabort_error((ER_SP_COND_MISMATCH, MYF(0), (yyvsp[0].lex_str).str)); } +#line 21316 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 243: - -/* Line 1455 of yacc.c */ -#line 3256 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3258 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spcondvalue)= new (thd->mem_root) sp_condition_value(sp_condition_value::WARNING); if ((yyval.spcondvalue) == NULL) MYSQL_YYABORT; } +#line 21326 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 244: - -/* Line 1455 of yacc.c */ -#line 3262 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3264 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spcondvalue)= new (thd->mem_root) sp_condition_value(sp_condition_value::NOT_FOUND); if ((yyval.spcondvalue) == NULL) MYSQL_YYABORT; } +#line 21336 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 245: - -/* Line 1455 of yacc.c */ -#line 3268 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3270 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spcondvalue)= new (thd->mem_root) sp_condition_value(sp_condition_value::EXCEPTION); if ((yyval.spcondvalue) == NULL) MYSQL_YYABORT; } +#line 21346 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 246: - -/* Line 1455 of yacc.c */ -#line 3277 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3279 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; Yacc_state *state= & thd->m_parser_state->m_yacc; lex->sql_command= SQLCOM_SIGNAL; lex->m_sql_cmd= - new (thd->mem_root) Sql_cmd_signal((yyvsp[(2) - (3)].spcondvalue), state->m_set_signal_info); + new (thd->mem_root) Sql_cmd_signal((yyvsp[-1].spcondvalue), state->m_set_signal_info); if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 21361 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 247: - -/* Line 1455 of yacc.c */ -#line 3291 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3293 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_condition_value *cond; /* SIGNAL foo cannot be used outside of stored programs */ if (lex->spcont == NULL) - my_yyabort_error((ER_SP_COND_MISMATCH, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); - cond= lex->spcont->find_condition((yyvsp[(1) - (1)].lex_str), false); + my_yyabort_error((ER_SP_COND_MISMATCH, MYF(0), (yyvsp[0].lex_str).str)); + cond= lex->spcont->find_condition((yyvsp[0].lex_str), false); if (cond == NULL) - my_yyabort_error((ER_SP_COND_MISMATCH, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + my_yyabort_error((ER_SP_COND_MISMATCH, MYF(0), (yyvsp[0].lex_str).str)); if (cond->type != sp_condition_value::SQLSTATE) my_yyabort_error((ER_SIGNAL_BAD_CONDITION_TYPE, MYF(0))); (yyval.spcondvalue)= cond; } +#line 21380 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 248: - -/* Line 1455 of yacc.c */ -#line 3306 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.spcondvalue)= (yyvsp[(1) - (1)].spcondvalue); } +#line 3308 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.spcondvalue)= (yyvsp[0].spcondvalue); } +#line 21386 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 249: - -/* Line 1455 of yacc.c */ -#line 3311 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3313 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.spcondvalue)= NULL; } +#line 21392 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 250: - -/* Line 1455 of yacc.c */ -#line 3313 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.spcondvalue)= (yyvsp[(1) - (1)].spcondvalue); } +#line 3315 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.spcondvalue)= (yyvsp[0].spcondvalue); } +#line 21398 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 251: - -/* Line 1455 of yacc.c */ -#line 3318 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3320 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { thd->m_parser_state->m_yacc.m_set_signal_info.clear(); } +#line 21406 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 253: - -/* Line 1455 of yacc.c */ -#line 3326 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3328 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Set_signal_information *info; info= &thd->m_parser_state->m_yacc.m_set_signal_info; - int index= (int) (yyvsp[(1) - (3)].diag_condition_item_name); + int index= (int) (yyvsp[-2].diag_condition_item_name); info->clear(); - info->m_item[index]= (yyvsp[(3) - (3)].item); + info->m_item[index]= (yyvsp[0].item); } +#line 21418 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 254: - -/* Line 1455 of yacc.c */ -#line 3335 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3337 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Set_signal_information *info; info= &thd->m_parser_state->m_yacc.m_set_signal_info; - int index= (int) (yyvsp[(3) - (5)].diag_condition_item_name); + int index= (int) (yyvsp[-2].diag_condition_item_name); if (info->m_item[index] != NULL) my_yyabort_error((ER_DUP_SIGNAL_SET, MYF(0), Diag_condition_item_names[index].str)); - info->m_item[index]= (yyvsp[(5) - (5)].item); + info->m_item[index]= (yyvsp[0].item); } +#line 21432 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 255: - -/* Line 1455 of yacc.c */ -#line 3351 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item); } +#line 3353 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 21438 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 256: - -/* Line 1455 of yacc.c */ -#line 3353 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3355 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (1)].item)->type() == Item::FUNC_ITEM) + if ((yyvsp[0].item)->type() == Item::FUNC_ITEM) { - Item_func *item= (Item_func*) (yyvsp[(1) - (1)].item); + Item_func *item= (Item_func*) (yyvsp[0].item); if (item->functype() == Item_func::SUSERVAR_FUNC) { /* @@ -22789,126 +21454,111 @@ MYSQL_YYABORT; } } - (yyval.item)= (yyvsp[(1) - (1)].item); + (yyval.item)= (yyvsp[0].item); } +#line 21460 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 257: - -/* Line 1455 of yacc.c */ -#line 3371 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item); } +#line 3373 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 21466 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 258: - -/* Line 1455 of yacc.c */ -#line 3377 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3379 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_CLASS_ORIGIN; } +#line 21472 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 259: - -/* Line 1455 of yacc.c */ -#line 3379 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3381 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_SUBCLASS_ORIGIN; } +#line 21478 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 260: - -/* Line 1455 of yacc.c */ -#line 3381 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3383 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_CONSTRAINT_CATALOG; } +#line 21484 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 261: - -/* Line 1455 of yacc.c */ -#line 3383 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3385 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_CONSTRAINT_SCHEMA; } +#line 21490 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 262: - -/* Line 1455 of yacc.c */ -#line 3385 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3387 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_CONSTRAINT_NAME; } +#line 21496 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 263: - -/* Line 1455 of yacc.c */ -#line 3387 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3389 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_CATALOG_NAME; } +#line 21502 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 264: - -/* Line 1455 of yacc.c */ -#line 3389 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3391 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_SCHEMA_NAME; } +#line 21508 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 265: - -/* Line 1455 of yacc.c */ -#line 3391 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3393 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_TABLE_NAME; } +#line 21514 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 266: - -/* Line 1455 of yacc.c */ -#line 3393 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3395 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_COLUMN_NAME; } +#line 21520 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 267: - -/* Line 1455 of yacc.c */ -#line 3395 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3397 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_CURSOR_NAME; } +#line 21526 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 268: - -/* Line 1455 of yacc.c */ -#line 3397 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3399 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_MESSAGE_TEXT; } +#line 21532 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 269: - -/* Line 1455 of yacc.c */ -#line 3399 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3401 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_condition_item_name)= DIAG_MYSQL_ERRNO; } +#line 21538 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 270: - -/* Line 1455 of yacc.c */ -#line 3404 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3406 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; Yacc_state *state= & thd->m_parser_state->m_yacc; lex->sql_command= SQLCOM_RESIGNAL; lex->m_sql_cmd= - new (thd->mem_root) Sql_cmd_resignal((yyvsp[(2) - (3)].spcondvalue), + new (thd->mem_root) Sql_cmd_resignal((yyvsp[-1].spcondvalue), state->m_set_signal_info); if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 21554 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 271: - -/* Line 1455 of yacc.c */ -#line 3419 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3421 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Diagnostics_information *info= (yyvsp[(4) - (4)].diag_info); + Diagnostics_information *info= (yyvsp[0].diag_info); - info->set_which_da((yyvsp[(2) - (4)].diag_area)); + info->set_which_da((yyvsp[-2].diag_area)); Lex->sql_command= SQLCOM_GET_DIAGNOSTICS; Lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_get_diagnostics(info); @@ -22916,317 +21566,282 @@ if (Lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 21570 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 272: - -/* Line 1455 of yacc.c */ -#line 3434 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3436 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_area)= Diagnostics_information::CURRENT_AREA; } +#line 21576 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 273: - -/* Line 1455 of yacc.c */ -#line 3436 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3438 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.diag_area)= Diagnostics_information::CURRENT_AREA; } +#line 21582 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 274: - -/* Line 1455 of yacc.c */ -#line 3441 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3443 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.diag_info)= new (thd->mem_root) Statement_information((yyvsp[(1) - (1)].stmt_info_list)); + (yyval.diag_info)= new (thd->mem_root) Statement_information((yyvsp[0].stmt_info_list)); if ((yyval.diag_info) == NULL) MYSQL_YYABORT; } +#line 21592 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 275: - -/* Line 1455 of yacc.c */ -#line 3447 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3449 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.diag_info)= new (thd->mem_root) Condition_information((yyvsp[(2) - (3)].item), (yyvsp[(3) - (3)].cond_info_list)); + (yyval.diag_info)= new (thd->mem_root) Condition_information((yyvsp[-1].item), (yyvsp[0].cond_info_list)); if ((yyval.diag_info) == NULL) MYSQL_YYABORT; } +#line 21602 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 276: - -/* Line 1455 of yacc.c */ -#line 3456 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3458 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.stmt_info_list)= new (thd->mem_root) List; - if ((yyval.stmt_info_list) == NULL || (yyval.stmt_info_list)->push_back((yyvsp[(1) - (1)].stmt_info_item), thd->mem_root)) + if ((yyval.stmt_info_list) == NULL || (yyval.stmt_info_list)->push_back((yyvsp[0].stmt_info_item), thd->mem_root)) MYSQL_YYABORT; } +#line 21612 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 277: - -/* Line 1455 of yacc.c */ -#line 3462 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3464 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (3)].stmt_info_list)->push_back((yyvsp[(3) - (3)].stmt_info_item), thd->mem_root)) + if ((yyvsp[-2].stmt_info_list)->push_back((yyvsp[0].stmt_info_item), thd->mem_root)) MYSQL_YYABORT; - (yyval.stmt_info_list)= (yyvsp[(1) - (3)].stmt_info_list); + (yyval.stmt_info_list)= (yyvsp[-2].stmt_info_list); } +#line 21622 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 278: - -/* Line 1455 of yacc.c */ -#line 3471 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3473 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.stmt_info_item)= new (thd->mem_root) Statement_information_item((yyvsp[(3) - (3)].stmt_info_item_name), (yyvsp[(1) - (3)].item)); + (yyval.stmt_info_item)= new (thd->mem_root) Statement_information_item((yyvsp[0].stmt_info_item_name), (yyvsp[-2].item)); if ((yyval.stmt_info_item) == NULL) MYSQL_YYABORT; } +#line 21632 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 279: - -/* Line 1455 of yacc.c */ -#line 3479 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3481 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex_input_stream *lip= &thd->m_parser_state->m_lip; - (yyval.item)= create_item_for_sp_var(thd, (yyvsp[(1) - (1)].lex_str), NULL, + (yyval.item)= create_item_for_sp_var(thd, (yyvsp[0].lex_str), NULL, lip->get_tok_start(), lip->get_ptr()); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 21645 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 280: - -/* Line 1455 of yacc.c */ -#line 3488 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3490 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_get_user_var(thd, (yyvsp[(2) - (2)].lex_str)); + (yyval.item)= new (thd->mem_root) Item_func_get_user_var(thd, (yyvsp[0].lex_str)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 21655 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 281: - -/* Line 1455 of yacc.c */ -#line 3497 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3499 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.stmt_info_item_name)= Statement_information_item::NUMBER; } +#line 21661 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 282: - -/* Line 1455 of yacc.c */ -#line 3499 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3501 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.stmt_info_item_name)= Statement_information_item::ROW_COUNT; } +#line 21667 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 283: - -/* Line 1455 of yacc.c */ -#line 3508 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item); } +#line 3510 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 21673 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 284: - -/* Line 1455 of yacc.c */ -#line 3513 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3515 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_list)= new (thd->mem_root) List; - if ((yyval.cond_info_list) == NULL || (yyval.cond_info_list)->push_back((yyvsp[(1) - (1)].cond_info_item), thd->mem_root)) + if ((yyval.cond_info_list) == NULL || (yyval.cond_info_list)->push_back((yyvsp[0].cond_info_item), thd->mem_root)) MYSQL_YYABORT; } +#line 21683 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 285: - -/* Line 1455 of yacc.c */ -#line 3519 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3521 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (3)].cond_info_list)->push_back((yyvsp[(3) - (3)].cond_info_item), thd->mem_root)) + if ((yyvsp[-2].cond_info_list)->push_back((yyvsp[0].cond_info_item), thd->mem_root)) MYSQL_YYABORT; - (yyval.cond_info_list)= (yyvsp[(1) - (3)].cond_info_list); + (yyval.cond_info_list)= (yyvsp[-2].cond_info_list); } +#line 21693 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 286: - -/* Line 1455 of yacc.c */ -#line 3528 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3530 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.cond_info_item)= new (thd->mem_root) Condition_information_item((yyvsp[(3) - (3)].cond_info_item_name), (yyvsp[(1) - (3)].item)); + (yyval.cond_info_item)= new (thd->mem_root) Condition_information_item((yyvsp[0].cond_info_item_name), (yyvsp[-2].item)); if ((yyval.cond_info_item) == NULL) MYSQL_YYABORT; } +#line 21703 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 287: - -/* Line 1455 of yacc.c */ -#line 3536 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3538 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::CLASS_ORIGIN; } +#line 21709 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 288: - -/* Line 1455 of yacc.c */ -#line 3538 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3540 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::SUBCLASS_ORIGIN; } +#line 21715 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 289: - -/* Line 1455 of yacc.c */ -#line 3540 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3542 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::CONSTRAINT_CATALOG; } +#line 21721 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 290: - -/* Line 1455 of yacc.c */ -#line 3542 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3544 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::CONSTRAINT_SCHEMA; } +#line 21727 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 291: - -/* Line 1455 of yacc.c */ -#line 3544 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3546 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::CONSTRAINT_NAME; } +#line 21733 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 292: - -/* Line 1455 of yacc.c */ -#line 3546 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3548 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::CATALOG_NAME; } +#line 21739 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 293: - -/* Line 1455 of yacc.c */ -#line 3548 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3550 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::SCHEMA_NAME; } +#line 21745 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 294: - -/* Line 1455 of yacc.c */ -#line 3550 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3552 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::TABLE_NAME; } +#line 21751 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 295: - -/* Line 1455 of yacc.c */ -#line 3552 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3554 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::COLUMN_NAME; } +#line 21757 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 296: - -/* Line 1455 of yacc.c */ -#line 3554 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3556 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::CURSOR_NAME; } +#line 21763 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 297: - -/* Line 1455 of yacc.c */ -#line 3556 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3558 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::MESSAGE_TEXT; } +#line 21769 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 298: - -/* Line 1455 of yacc.c */ -#line 3558 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3560 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::MYSQL_ERRNO; } +#line 21775 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 299: - -/* Line 1455 of yacc.c */ -#line 3560 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3562 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cond_info_item_name)= Condition_information_item::RETURNED_SQLSTATE; } +#line 21781 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 300: - -/* Line 1455 of yacc.c */ -#line 3565 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3567 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* NOTE: field definition is filled in sp_decl section. */ LEX *lex= Lex; sp_pcontext *spc= lex->spcont; - if (spc->find_variable((yyvsp[(1) - (1)].lex_str), TRUE)) - my_yyabort_error((ER_SP_DUP_VAR, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); - spc->add_variable(thd, (yyvsp[(1) - (1)].lex_str)); + if (spc->find_variable((yyvsp[0].lex_str), TRUE)) + my_yyabort_error((ER_SP_DUP_VAR, MYF(0), (yyvsp[0].lex_str).str)); + spc->add_variable(thd, (yyvsp[0].lex_str)); (yyval.num)= 1; } +#line 21797 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 301: - -/* Line 1455 of yacc.c */ -#line 3577 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3579 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* NOTE: field definition is filled in sp_decl section. */ LEX *lex= Lex; sp_pcontext *spc= lex->spcont; - if (spc->find_variable((yyvsp[(3) - (3)].lex_str), TRUE)) - my_yyabort_error((ER_SP_DUP_VAR, MYF(0), (yyvsp[(3) - (3)].lex_str).str)); - spc->add_variable(thd, (yyvsp[(3) - (3)].lex_str)); - (yyval.num)= (yyvsp[(1) - (3)].num) + 1; + if (spc->find_variable((yyvsp[0].lex_str), TRUE)) + my_yyabort_error((ER_SP_DUP_VAR, MYF(0), (yyvsp[0].lex_str).str)); + spc->add_variable(thd, (yyvsp[0].lex_str)); + (yyval.num)= (yyvsp[-2].num) + 1; } +#line 21813 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 302: - -/* Line 1455 of yacc.c */ -#line 3591 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3593 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item) = NULL; } +#line 21819 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 303: - -/* Line 1455 of yacc.c */ -#line 3592 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item) = (yyvsp[(2) - (2)].item); } +#line 3594 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item) = (yyvsp[0].item); } +#line 21825 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 319: - -/* Line 1455 of yacc.c */ -#line 3618 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3620 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (maybe_start_compound_statement(thd)) MYSQL_YYABORT; Lex->sphead->new_cont_backpatch(NULL); } +#line 21835 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 320: - -/* Line 1455 of yacc.c */ -#line 3624 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3626 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->do_cont_backpatch(); } +#line 21841 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 321: - -/* Line 1455 of yacc.c */ -#line 3628 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3630 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; Lex_input_stream *lip= YYLIP; @@ -23234,12 +21849,11 @@ lex->sphead->reset_lex(thd); lex->sphead->m_tmp_query= lip->get_tok_start(); } +#line 21853 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 322: - -/* Line 1455 of yacc.c */ -#line 3636 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3638 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; Lex_input_stream *lip= YYLIP; @@ -23281,19 +21895,17 @@ if (sp->restore_lex(thd)) MYSQL_YYABORT; } +#line 21899 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 323: - -/* Line 1455 of yacc.c */ -#line 3681 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3683 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->reset_lex(thd); } +#line 21905 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 324: - -/* Line 1455 of yacc.c */ -#line 3683 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3685 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -23304,7 +21916,7 @@ sp_instr_freturn *i; i= new (thd->mem_root) - sp_instr_freturn(sp->instructions(), lex->spcont, (yyvsp[(3) - (3)].item), + sp_instr_freturn(sp->instructions(), lex->spcont, (yyvsp[0].item), sp->m_return_field_def.sql_type, lex); if (i == NULL || sp->add_instr(i)) MYSQL_YYABORT; @@ -23313,20 +21925,19 @@ if (sp->restore_lex(thd)) MYSQL_YYABORT; } +#line 21929 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 325: - -/* Line 1455 of yacc.c */ -#line 3706 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3708 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp = lex->sphead; sp_pcontext *ctx= lex->spcont; - sp_label *lab= ctx->find_label((yyvsp[(2) - (2)].lex_str)); + sp_label *lab= ctx->find_label((yyvsp[0].lex_str)); if (! lab) - my_yyabort_error((ER_SP_LILABEL_MISMATCH, MYF(0), "LEAVE", (yyvsp[(2) - (2)].lex_str).str)); + my_yyabort_error((ER_SP_LILABEL_MISMATCH, MYF(0), "LEAVE", (yyvsp[0].lex_str).str)); sp_instr_jump *i; uint ip= sp->instructions(); @@ -23365,20 +21976,19 @@ sp->push_backpatch(i, lab); /* Jumping forward */ sp->add_instr(i); } +#line 21980 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 326: - -/* Line 1455 of yacc.c */ -#line 3756 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3758 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; sp_pcontext *ctx= lex->spcont; - sp_label *lab= ctx->find_label((yyvsp[(2) - (2)].lex_str)); + sp_label *lab= ctx->find_label((yyvsp[0].lex_str)); if (! lab || lab->type != sp_label::ITERATION) - my_yyabort_error((ER_SP_LILABEL_MISMATCH, MYF(0), "ITERATE", (yyvsp[(2) - (2)].lex_str).str)); + my_yyabort_error((ER_SP_LILABEL_MISMATCH, MYF(0), "ITERATE", (yyvsp[0].lex_str).str)); sp_instr_jump *i; uint ip= sp->instructions(); @@ -23408,131 +22018,123 @@ sp->add_instr(i)) MYSQL_YYABORT; } +#line 22022 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 327: - -/* Line 1455 of yacc.c */ -#line 3797 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3799 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; uint offset; sp_instr_copen *i; - if (! lex->spcont->find_cursor((yyvsp[(2) - (2)].lex_str), &offset, false)) - my_yyabort_error((ER_SP_CURSOR_MISMATCH, MYF(0), (yyvsp[(2) - (2)].lex_str).str)); + if (! lex->spcont->find_cursor((yyvsp[0].lex_str), &offset, false)) + my_yyabort_error((ER_SP_CURSOR_MISMATCH, MYF(0), (yyvsp[0].lex_str).str)); i= new (thd->mem_root) sp_instr_copen(sp->instructions(), lex->spcont, offset); if (i == NULL || sp->add_instr(i)) MYSQL_YYABORT; } +#line 22041 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 328: - -/* Line 1455 of yacc.c */ -#line 3815 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3817 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; uint offset; sp_instr_cfetch *i; - if (! lex->spcont->find_cursor((yyvsp[(3) - (4)].lex_str), &offset, false)) - my_yyabort_error((ER_SP_CURSOR_MISMATCH, MYF(0), (yyvsp[(3) - (4)].lex_str).str)); + if (! lex->spcont->find_cursor((yyvsp[-1].lex_str), &offset, false)) + my_yyabort_error((ER_SP_CURSOR_MISMATCH, MYF(0), (yyvsp[-1].lex_str).str)); i= new (thd->mem_root) sp_instr_cfetch(sp->instructions(), lex->spcont, offset); if (i == NULL || sp->add_instr(i)) MYSQL_YYABORT; } +#line 22060 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 329: - -/* Line 1455 of yacc.c */ -#line 3830 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3832 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 22066 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 330: - -/* Line 1455 of yacc.c */ -#line 3835 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3837 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; uint offset; sp_instr_cclose *i; - if (! lex->spcont->find_cursor((yyvsp[(2) - (2)].lex_str), &offset, false)) - my_yyabort_error((ER_SP_CURSOR_MISMATCH, MYF(0), (yyvsp[(2) - (2)].lex_str).str)); + if (! lex->spcont->find_cursor((yyvsp[0].lex_str), &offset, false)) + my_yyabort_error((ER_SP_CURSOR_MISMATCH, MYF(0), (yyvsp[0].lex_str).str)); i= new (thd->mem_root) sp_instr_cclose(sp->instructions(), lex->spcont, offset); if (i == NULL || sp->add_instr(i)) MYSQL_YYABORT; } +#line 22085 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 334: - -/* Line 1455 of yacc.c */ -#line 3859 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3861 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; sp_pcontext *spc= lex->spcont; sp_variable *spv; - if (!spc || !(spv = spc->find_variable((yyvsp[(1) - (1)].lex_str), false))) - my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + if (!spc || !(spv = spc->find_variable((yyvsp[0].lex_str), false))) + my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[0].lex_str).str)); /* An SP local variable */ sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction(); i->add_to_varlist(spv); } +#line 22103 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 335: - -/* Line 1455 of yacc.c */ -#line 3873 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3875 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; sp_pcontext *spc= lex->spcont; sp_variable *spv; - if (!spc || !(spv = spc->find_variable((yyvsp[(3) - (3)].lex_str), false))) - my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[(3) - (3)].lex_str).str)); + if (!spc || !(spv = spc->find_variable((yyvsp[0].lex_str), false))) + my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[0].lex_str).str)); /* An SP local variable */ sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction(); i->add_to_varlist(spv); } +#line 22121 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 336: - -/* Line 1455 of yacc.c */ -#line 3889 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3891 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->reset_lex(thd); } +#line 22127 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 337: - -/* Line 1455 of yacc.c */ -#line 3891 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3893 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; sp_pcontext *ctx= lex->spcont; uint ip= sp->instructions(); sp_instr_jump_if_not *i= new (thd->mem_root) - sp_instr_jump_if_not(ip, ctx, (yyvsp[(2) - (3)].item), lex); + sp_instr_jump_if_not(ip, ctx, (yyvsp[-1].item), lex); if (i == NULL || sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0)) || sp->add_cont_backpatch(i) || @@ -23541,12 +22143,11 @@ if (sp->restore_lex(thd)) MYSQL_YYABORT; } +#line 22147 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 338: - -/* Line 1455 of yacc.c */ -#line 3907 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3909 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { sp_head *sp= Lex->sphead; sp_pcontext *ctx= Lex->spcont; @@ -23558,23 +22159,21 @@ sp->backpatch(ctx->pop_label()); sp->push_backpatch(i, ctx->push_label(thd, empty_lex_str, 0)); } +#line 22163 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 339: - -/* Line 1455 of yacc.c */ -#line 3919 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3921 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sphead->backpatch(lex->spcont->pop_label()); } +#line 22173 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 343: - -/* Line 1455 of yacc.c */ -#line 3934 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3936 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (maybe_start_compound_statement(thd)) MYSQL_YYABORT; @@ -23624,12 +22223,11 @@ */ Lex->spcont->push_label(thd, empty_lex_str, Lex->sphead->instructions()); } +#line 22227 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 344: - -/* Line 1455 of yacc.c */ -#line 3987 "/home/buildbot/git/sql/sql_yacc.yy" +#line 3989 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* BACKPATCH: Resolving forward jump from @@ -23638,121 +22236,110 @@ */ Lex->sphead->backpatch(Lex->spcont->pop_label()); - if ((yyvsp[(3) - (6)].num)) + if ((yyvsp[-3].num)) Lex->spcont->pop_case_expr_id(); Lex->sphead->do_cont_backpatch(); } +#line 22245 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 345: - -/* Line 1455 of yacc.c */ -#line 4003 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4005 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->reset_lex(thd); /* For expr $2 */ } +#line 22251 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 346: - -/* Line 1455 of yacc.c */ -#line 4005 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4007 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (case_stmt_action_expr(Lex, (yyvsp[(2) - (2)].item))) + if (case_stmt_action_expr(Lex, (yyvsp[0].item))) MYSQL_YYABORT; if (Lex->sphead->restore_lex(thd)) MYSQL_YYABORT; } +#line 22263 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 347: - -/* Line 1455 of yacc.c */ -#line 4013 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4015 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 22269 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 348: - -/* Line 1455 of yacc.c */ -#line 4015 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4017 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 22275 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 353: - -/* Line 1455 of yacc.c */ -#line 4030 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4032 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->reset_lex(thd); /* For expr $3 */ } +#line 22283 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 354: - -/* Line 1455 of yacc.c */ -#line 4034 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4036 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Simple case: = */ LEX *lex= Lex; - if (case_stmt_action_when(lex, (yyvsp[(3) - (3)].item), true)) + if (case_stmt_action_when(lex, (yyvsp[0].item), true)) MYSQL_YYABORT; /* For expr $3 */ if (lex->sphead->restore_lex(thd)) MYSQL_YYABORT; } +#line 22298 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 355: - -/* Line 1455 of yacc.c */ -#line 4046 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4048 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (case_stmt_action_then(lex)) MYSQL_YYABORT; } +#line 22308 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 356: - -/* Line 1455 of yacc.c */ -#line 4055 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4057 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->reset_lex(thd); /* For expr $3 */ } +#line 22316 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 357: - -/* Line 1455 of yacc.c */ -#line 4059 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4061 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - if (case_stmt_action_when(lex, (yyvsp[(3) - (3)].item), false)) + if (case_stmt_action_when(lex, (yyvsp[0].item), false)) MYSQL_YYABORT; /* For expr $3 */ if (lex->sphead->restore_lex(thd)) MYSQL_YYABORT; } +#line 22329 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 358: - -/* Line 1455 of yacc.c */ -#line 4069 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4071 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (case_stmt_action_then(lex)) MYSQL_YYABORT; } +#line 22339 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 359: - -/* Line 1455 of yacc.c */ -#line 4078 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4080 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -23763,88 +22350,79 @@ sp->add_instr(i)) MYSQL_YYABORT; } +#line 22354 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 361: - -/* Line 1455 of yacc.c */ -#line 4092 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4094 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str)= null_lex_str; } +#line 22360 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 362: - -/* Line 1455 of yacc.c */ -#line 4093 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } +#line 4095 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)= (yyvsp[0].lex_str); } +#line 22366 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 363: - -/* Line 1455 of yacc.c */ -#line 4098 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4100 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_pcontext *ctx= lex->spcont; - sp_label *lab= ctx->find_label((yyvsp[(1) - (3)].lex_str)); + sp_label *lab= ctx->find_label((yyvsp[-2].lex_str)); if (lab) - my_yyabort_error((ER_SP_LABEL_REDEFINE, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); - lex->name= (yyvsp[(1) - (3)].lex_str); + my_yyabort_error((ER_SP_LABEL_REDEFINE, MYF(0), (yyvsp[-2].lex_str).str)); + lex->name= (yyvsp[-2].lex_str); } +#line 22380 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 364: - -/* Line 1455 of yacc.c */ -#line 4108 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4110 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(6) - (6)].lex_str).str) + if ((yyvsp[0].lex_str).str) { - if (my_strcasecmp(system_charset_info, (yyvsp[(6) - (6)].lex_str).str, (yyvsp[(5) - (6)].splabel)->name.str) != 0) - my_yyabort_error((ER_SP_LABEL_MISMATCH, MYF(0), (yyvsp[(6) - (6)].lex_str).str)); + if (my_strcasecmp(system_charset_info, (yyvsp[0].lex_str).str, (yyvsp[-1].splabel)->name.str) != 0) + my_yyabort_error((ER_SP_LABEL_MISMATCH, MYF(0), (yyvsp[0].lex_str).str)); } } +#line 22392 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 365: - -/* Line 1455 of yacc.c */ -#line 4119 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4121 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->name= empty_lex_str; // Unlabeled blocks get an empty label } +#line 22400 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 366: - -/* Line 1455 of yacc.c */ -#line 4123 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4125 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22406 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 367: - -/* Line 1455 of yacc.c */ -#line 4128 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4130 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (maybe_start_compound_statement(thd)) MYSQL_YYABORT; Lex->name= empty_lex_str; // Unlabeled blocks get an empty label } +#line 22416 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 368: - -/* Line 1455 of yacc.c */ -#line 4134 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4136 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22422 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 369: - -/* Line 1455 of yacc.c */ -#line 4138 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4140 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_label *lab= lex->spcont->push_label(thd, lex->name, @@ -23853,12 +22431,11 @@ lex->spcont= lex->spcont->push_context(thd, sp_pcontext::REGULAR_SCOPE); } +#line 22435 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 370: - -/* Line 1455 of yacc.c */ -#line 4149 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4151 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -23866,18 +22443,18 @@ sp_instr *i; sp->backpatch(ctx->last_label()); /* We always have a label */ - if ((yyvsp[(2) - (4)].spblock).hndlrs) + if ((yyvsp[-2].spblock).hndlrs) { i= new (thd->mem_root) - sp_instr_hpop(sp->instructions(), ctx, (yyvsp[(2) - (4)].spblock).hndlrs); + sp_instr_hpop(sp->instructions(), ctx, (yyvsp[-2].spblock).hndlrs); if (i == NULL || sp->add_instr(i)) MYSQL_YYABORT; } - if ((yyvsp[(2) - (4)].spblock).curs) + if ((yyvsp[-2].spblock).curs) { i= new (thd->mem_root) - sp_instr_cpop(sp->instructions(), ctx, (yyvsp[(2) - (4)].spblock).curs); + sp_instr_cpop(sp->instructions(), ctx, (yyvsp[-2].spblock).curs); if (i == NULL || sp->add_instr(i)) MYSQL_YYABORT; @@ -23885,12 +22462,11 @@ lex->spcont= ctx->pop_context(); (yyval.splabel) = lex->spcont->pop_label(); } +#line 22466 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 371: - -/* Line 1455 of yacc.c */ -#line 4179 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4181 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; uint ip= lex->sphead->instructions(); @@ -23901,18 +22477,17 @@ lex->sphead->add_instr(i)) MYSQL_YYABORT; } +#line 22481 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 372: - -/* Line 1455 of yacc.c */ -#line 4193 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4195 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; uint ip= sp->instructions(); sp_instr_jump_if_not *i= new (thd->mem_root) - sp_instr_jump_if_not(ip, lex->spcont, (yyvsp[(1) - (2)].item), lex); + sp_instr_jump_if_not(ip, lex->spcont, (yyvsp[-1].item), lex); if (i == NULL || /* Jumping forward */ sp->push_backpatch(i, lex->spcont->last_label()) || @@ -23922,12 +22497,11 @@ if (sp->restore_lex(thd)) MYSQL_YYABORT; } +#line 22501 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 373: - -/* Line 1455 of yacc.c */ -#line 4209 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4211 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; uint ip= lex->sphead->instructions(); @@ -23939,25 +22513,23 @@ MYSQL_YYABORT; lex->sphead->do_cont_backpatch(); } +#line 22517 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 374: - -/* Line 1455 of yacc.c */ -#line 4224 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4226 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->reset_lex(thd); } +#line 22523 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 375: - -/* Line 1455 of yacc.c */ -#line 4226 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4228 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; uint ip= lex->sphead->instructions(); sp_label *lab= lex->spcont->last_label(); /* Jumping back */ sp_instr_jump_if_not *i= new (thd->mem_root) - sp_instr_jump_if_not(ip, lex->spcont, (yyvsp[(4) - (6)].item), lab->ip, lex); + sp_instr_jump_if_not(ip, lex->spcont, (yyvsp[-2].item), lab->ip, lex); if (i == NULL || lex->sphead->add_instr(i)) MYSQL_YYABORT; @@ -23966,442 +22538,397 @@ /* We can shortcut the cont_backpatch here */ i->m_cont_dest= ip+1; } +#line 22542 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 376: - -/* Line 1455 of yacc.c */ -#line 4244 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4246 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { sp_label *lab; Lex->sphead->backpatch(lab= Lex->spcont->pop_label()); - if ((yyvsp[(1) - (1)].lex_str).str) + if ((yyvsp[0].lex_str).str) { - if (my_strcasecmp(system_charset_info, (yyvsp[(1) - (1)].lex_str).str, + if (my_strcasecmp(system_charset_info, (yyvsp[0].lex_str).str, lab->name.str) != 0) - my_yyabort_error((ER_SP_LABEL_MISMATCH, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + my_yyabort_error((ER_SP_LABEL_MISMATCH, MYF(0), (yyvsp[0].lex_str).str)); } } +#line 22557 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 377: - -/* Line 1455 of yacc.c */ -#line 4257 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4259 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { sp_label *lab; Lex->sphead->backpatch(lab= Lex->spcont->pop_label()); DBUG_ASSERT(lab->name.length == 0); } +#line 22567 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 378: - -/* Line 1455 of yacc.c */ -#line 4266 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4268 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (push_sp_label(thd, (yyvsp[(1) - (3)].lex_str))) + if (push_sp_label(thd, (yyvsp[-2].lex_str))) MYSQL_YYABORT; } +#line 22576 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 379: - -/* Line 1455 of yacc.c */ -#line 4271 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4273 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22582 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 380: - -/* Line 1455 of yacc.c */ -#line 4273 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4275 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (push_sp_label(thd, (yyvsp[(1) - (3)].lex_str))) + if (push_sp_label(thd, (yyvsp[-2].lex_str))) MYSQL_YYABORT; Lex->sphead->reset_lex(thd); } +#line 22592 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 381: - -/* Line 1455 of yacc.c */ -#line 4279 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4281 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22598 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 382: - -/* Line 1455 of yacc.c */ -#line 4281 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4283 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (push_sp_label(thd, (yyvsp[(1) - (3)].lex_str))) + if (push_sp_label(thd, (yyvsp[-2].lex_str))) MYSQL_YYABORT; } +#line 22607 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 383: - -/* Line 1455 of yacc.c */ -#line 4286 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4288 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22613 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 384: - -/* Line 1455 of yacc.c */ -#line 4291 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4293 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (push_sp_empty_label(thd)) MYSQL_YYABORT; } +#line 22622 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 385: - -/* Line 1455 of yacc.c */ -#line 4297 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4299 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22628 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 386: - -/* Line 1455 of yacc.c */ -#line 4299 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4301 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (push_sp_empty_label(thd)) MYSQL_YYABORT; Lex->sphead->reset_lex(thd); } +#line 22638 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 387: - -/* Line 1455 of yacc.c */ -#line 4306 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4308 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22644 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 388: - -/* Line 1455 of yacc.c */ -#line 4308 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4310 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (push_sp_empty_label(thd)) MYSQL_YYABORT; } +#line 22653 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 389: - -/* Line 1455 of yacc.c */ -#line 4314 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4316 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 22659 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 390: - -/* Line 1455 of yacc.c */ -#line 4319 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4321 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->trg_chistics.action_time= TRG_ACTION_BEFORE; } +#line 22665 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 391: - -/* Line 1455 of yacc.c */ -#line 4321 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4323 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->trg_chistics.action_time= TRG_ACTION_AFTER; } +#line 22671 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 392: - -/* Line 1455 of yacc.c */ -#line 4326 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4328 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->trg_chistics.event= TRG_EVENT_INSERT; } +#line 22677 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 393: - -/* Line 1455 of yacc.c */ -#line 4328 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4330 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->trg_chistics.event= TRG_EVENT_UPDATE; } +#line 22683 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 394: - -/* Line 1455 of yacc.c */ -#line 4330 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4332 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->trg_chistics.event= TRG_EVENT_DELETE; } +#line 22689 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 398: - -/* Line 1455 of yacc.c */ -#line 4364 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4366 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 22695 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 399: - -/* Line 1455 of yacc.c */ -#line 4366 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4368 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->logfile_group_name= (yyvsp[(4) - (4)].lex_str).str; + lex->alter_tablespace_info->logfile_group_name= (yyvsp[0].lex_str).str; } +#line 22704 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 400: - -/* Line 1455 of yacc.c */ -#line 4376 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4378 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_ADD_FILE; } +#line 22712 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 401: - -/* Line 1455 of yacc.c */ -#line 4382 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4384 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_tablespace_info->ts_alter_tablespace_type= ALTER_TABLESPACE_DROP_FILE; } +#line 22720 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 406: - -/* Line 1455 of yacc.c */ -#line 4405 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4407 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 22726 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 453: - -/* Line 1455 of yacc.c */ -#line 4499 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4501 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->data_file_name= (yyvsp[(2) - (2)].lex_str).str; + lex->alter_tablespace_info->data_file_name= (yyvsp[0].lex_str).str; } +#line 22735 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 454: - -/* Line 1455 of yacc.c */ -#line 4507 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4509 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->undo_file_name= (yyvsp[(2) - (2)].lex_str).str; + lex->alter_tablespace_info->undo_file_name= (yyvsp[0].lex_str).str; } +#line 22744 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 455: - -/* Line 1455 of yacc.c */ -#line 4515 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4517 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->redo_file_name= (yyvsp[(2) - (2)].lex_str).str; + lex->alter_tablespace_info->redo_file_name= (yyvsp[0].lex_str).str; } +#line 22753 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 456: - -/* Line 1455 of yacc.c */ -#line 4523 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4525 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info= (new (thd->mem_root) st_alter_tablespace()); if (lex->alter_tablespace_info == NULL) MYSQL_YYABORT; - lex->alter_tablespace_info->tablespace_name= (yyvsp[(1) - (1)].lex_str).str; + lex->alter_tablespace_info->tablespace_name= (yyvsp[0].lex_str).str; lex->sql_command= SQLCOM_ALTER_TABLESPACE; } +#line 22767 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 457: - -/* Line 1455 of yacc.c */ -#line 4536 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4538 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info= (new (thd->mem_root) st_alter_tablespace()); if (lex->alter_tablespace_info == NULL) MYSQL_YYABORT; - lex->alter_tablespace_info->logfile_group_name= (yyvsp[(1) - (1)].lex_str).str; + lex->alter_tablespace_info->logfile_group_name= (yyvsp[0].lex_str).str; lex->sql_command= SQLCOM_ALTER_TABLESPACE; } +#line 22781 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 458: - -/* Line 1455 of yacc.c */ -#line 4549 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4551 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_READ_ONLY; } +#line 22790 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 459: - -/* Line 1455 of yacc.c */ -#line 4554 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4556 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_READ_WRITE; } +#line 22799 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 460: - -/* Line 1455 of yacc.c */ -#line 4559 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4561 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_access_mode= TS_NOT_ACCESSIBLE; } +#line 22808 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 461: - -/* Line 1455 of yacc.c */ -#line 4567 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4569 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->initial_size= (yyvsp[(3) - (3)].ulonglong_number); + lex->alter_tablespace_info->initial_size= (yyvsp[0].ulonglong_number); } +#line 22817 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 462: - -/* Line 1455 of yacc.c */ -#line 4575 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4577 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->autoextend_size= (yyvsp[(3) - (3)].ulonglong_number); + lex->alter_tablespace_info->autoextend_size= (yyvsp[0].ulonglong_number); } +#line 22826 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 463: - -/* Line 1455 of yacc.c */ -#line 4583 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4585 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->max_size= (yyvsp[(3) - (3)].ulonglong_number); + lex->alter_tablespace_info->max_size= (yyvsp[0].ulonglong_number); } +#line 22835 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 464: - -/* Line 1455 of yacc.c */ -#line 4591 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4593 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->extent_size= (yyvsp[(3) - (3)].ulonglong_number); + lex->alter_tablespace_info->extent_size= (yyvsp[0].ulonglong_number); } +#line 22844 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 465: - -/* Line 1455 of yacc.c */ -#line 4599 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4601 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->undo_buffer_size= (yyvsp[(3) - (3)].ulonglong_number); + lex->alter_tablespace_info->undo_buffer_size= (yyvsp[0].ulonglong_number); } +#line 22853 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 466: - -/* Line 1455 of yacc.c */ -#line 4607 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4609 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->alter_tablespace_info->redo_buffer_size= (yyvsp[(3) - (3)].ulonglong_number); + lex->alter_tablespace_info->redo_buffer_size= (yyvsp[0].ulonglong_number); } +#line 22862 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 467: - -/* Line 1455 of yacc.c */ -#line 4615 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4617 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->alter_tablespace_info->nodegroup_id != UNDEF_NODEGROUP) my_yyabort_error((ER_FILEGROUP_OPTION_ONLY_ONCE,MYF(0),"NODEGROUP")); - lex->alter_tablespace_info->nodegroup_id= (yyvsp[(3) - (3)].ulong_num); + lex->alter_tablespace_info->nodegroup_id= (yyvsp[0].ulong_num); } +#line 22873 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 468: - -/* Line 1455 of yacc.c */ -#line 4625 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4627 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->alter_tablespace_info->ts_comment != NULL) my_yyabort_error((ER_FILEGROUP_OPTION_ONLY_ONCE,MYF(0),"COMMENT")); - lex->alter_tablespace_info->ts_comment= (yyvsp[(3) - (3)].lex_str).str; + lex->alter_tablespace_info->ts_comment= (yyvsp[0].lex_str).str; } +#line 22884 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 469: - -/* Line 1455 of yacc.c */ -#line 4635 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4637 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->alter_tablespace_info->storage_engine != NULL) my_yyabort_error((ER_FILEGROUP_OPTION_ONLY_ONCE, MYF(0), "STORAGE ENGINE")); - lex->alter_tablespace_info->storage_engine= (yyvsp[(4) - (4)].db_type); + lex->alter_tablespace_info->storage_engine= (yyvsp[0].db_type); } +#line 22896 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 472: - -/* Line 1455 of yacc.c */ -#line 4651 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4653 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->wait_until_completed= TRUE; } +#line 22905 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 473: - -/* Line 1455 of yacc.c */ -#line 4656 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4658 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (!(lex->alter_tablespace_info->wait_until_completed)) my_yyabort_error((ER_FILEGROUP_OPTION_ONLY_ONCE,MYF(0),"NO_WAIT")); lex->alter_tablespace_info->wait_until_completed= FALSE; } +#line 22916 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 474: - -/* Line 1455 of yacc.c */ -#line 4665 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulonglong_number)= (yyvsp[(1) - (1)].ulonglong_number);} +#line 4667 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulonglong_number)= (yyvsp[0].ulonglong_number);} +#line 22922 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 475: - -/* Line 1455 of yacc.c */ -#line 4667 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4669 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { ulonglong number; uint text_shift_number= 0; longlong prefix_number; - char *start_ptr= (yyvsp[(1) - (1)].lex_str).str; - uint str_len= (yyvsp[(1) - (1)].lex_str).length; + char *start_ptr= (yyvsp[0].lex_str).str; + uint str_len= (yyvsp[0].lex_str).length; char *end_ptr= start_ptr + str_len; int error; prefix_number= my_strtoll10(start_ptr, &end_ptr, &error); @@ -24410,17 +22937,11 @@ switch (end_ptr[0]) { case 'g': - case 'G': - text_shift_number+=10; - /* fall through */ + case 'G': text_shift_number+=30; break; case 'm': - case 'M': - text_shift_number+=10; - /* fall through */ + case 'M': text_shift_number+=20; break; case 'k': - case 'K': - text_shift_number+=10; - break; + case 'K': text_shift_number+=10; break; default: my_yyabort_error((ER_WRONG_SIZE_NUMBER, MYF(0))); } @@ -24432,112 +22953,98 @@ my_yyabort_error((ER_WRONG_SIZE_NUMBER, MYF(0))); (yyval.ulonglong_number)= number; } +#line 22957 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 476: - -/* Line 1455 of yacc.c */ -#line 4711 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4707 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.option_list= NULL; } +#line 22963 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 477: - -/* Line 1455 of yacc.c */ -#line 4712 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4708 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 22969 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 478: - -/* Line 1455 of yacc.c */ -#line 4713 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4709 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 22975 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 479: - -/* Line 1455 of yacc.c */ -#line 4719 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4715 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->set_braces(1);} +#line 22981 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 480: - -/* Line 1455 of yacc.c */ -#line 4719 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4715 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 22987 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 481: - -/* Line 1455 of yacc.c */ -#line 4721 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4717 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.add(DDL_options_st::OPT_LIKE); TABLE_LIST *src_table= Lex->select_lex.add_table_to_list(thd, - (yyvsp[(1) - (1)].table), NULL, 0, TL_READ, MDL_SHARED_READ); + (yyvsp[0].table), NULL, 0, TL_READ, MDL_SHARED_READ); if (! src_table) MYSQL_YYABORT; /* CREATE TABLE ... LIKE is not allowed for views. */ src_table->required_type= FRMTYPE_TABLE; } +#line 23002 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 482: - -/* Line 1455 of yacc.c */ -#line 4734 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.table)= (yyvsp[(2) - (2)].table); } +#line 4730 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.table)= (yyvsp[0].table); } +#line 23008 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 483: - -/* Line 1455 of yacc.c */ -#line 4735 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.table)= (yyvsp[(3) - (4)].table); } +#line 4731 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.table)= (yyvsp[-1].table); } +#line 23014 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 484: - -/* Line 1455 of yacc.c */ -#line 4739 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4735 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23020 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 485: - -/* Line 1455 of yacc.c */ -#line 4741 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4737 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->set_braces(0);} +#line 23026 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 486: - -/* Line 1455 of yacc.c */ -#line 4742 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4738 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23032 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 487: - -/* Line 1455 of yacc.c */ -#line 4744 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4740 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->set_braces(1);} +#line 23038 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 488: - -/* Line 1455 of yacc.c */ -#line 4745 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4741 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23044 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 489: - -/* Line 1455 of yacc.c */ -#line 4750 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4746 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Remove all tables used in PARTITION clause from the global table @@ -24547,19 +23054,17 @@ last_non_sel_table->next_global= 0; Lex->query_tables_last= &last_non_sel_table->next_global; } +#line 23058 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 490: - -/* Line 1455 of yacc.c */ -#line 4786 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4782 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23064 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 492: - -/* Line 1455 of yacc.c */ -#line 4792 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4788 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->part_info= new (thd->mem_root) partition_info(); @@ -24573,12 +23078,11 @@ lex->alter_info.flags|= Alter_info::ALTER_PARTITION; } } +#line 23082 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 494: - -/* Line 1455 of yacc.c */ -#line 4810 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4806 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { #ifdef WITH_PARTITION_STORAGE_ENGINE LEX_STRING partition_name={C_STRING_WITH_LEN("partition")}; @@ -24590,12 +23094,11 @@ "--with-plugin-partition")); #endif } +#line 23098 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 495: - -/* Line 1455 of yacc.c */ -#line 4825 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4821 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (!lex->part_info) @@ -24608,96 +23111,84 @@ partition info string into part_info data structure. */ } +#line 23115 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 496: - -/* Line 1455 of yacc.c */ -#line 4837 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4833 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23121 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 498: - -/* Line 1455 of yacc.c */ -#line 4846 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4842 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; part_info->list_of_part_fields= TRUE; part_info->column_list= FALSE; part_info->part_type= HASH_PARTITION; } +#line 23132 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 499: - -/* Line 1455 of yacc.c */ -#line 4853 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4849 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->part_type= HASH_PARTITION; } +#line 23138 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 500: - -/* Line 1455 of yacc.c */ -#line 4854 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4850 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23144 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 501: - -/* Line 1455 of yacc.c */ -#line 4856 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4852 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->part_type= RANGE_PARTITION; } +#line 23150 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 502: - -/* Line 1455 of yacc.c */ -#line 4858 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4854 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->part_type= RANGE_PARTITION; } +#line 23156 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 503: - -/* Line 1455 of yacc.c */ -#line 4860 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4856 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->part_type= LIST_PARTITION; } +#line 23162 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 504: - -/* Line 1455 of yacc.c */ -#line 4862 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4858 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->part_type= LIST_PARTITION; } +#line 23168 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 505: - -/* Line 1455 of yacc.c */ -#line 4866 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4862 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23174 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 506: - -/* Line 1455 of yacc.c */ -#line 4868 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4864 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->linear_hash_ind= TRUE;} +#line 23180 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 507: - -/* Line 1455 of yacc.c */ -#line 4873 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4869 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->key_algorithm= partition_info::KEY_ALGORITHM_NONE;} +#line 23186 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 508: - -/* Line 1455 of yacc.c */ -#line 4875 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4871 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - switch ((yyvsp[(3) - (3)].ulong_num)) { + switch ((yyvsp[0].ulong_num)) { case 1: Lex->part_info->key_algorithm= partition_info::KEY_ALGORITHM_51; break; @@ -24709,44 +23200,39 @@ MYSQL_YYABORT; } } +#line 23204 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 509: - -/* Line 1455 of yacc.c */ -#line 4891 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4887 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23210 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 510: - -/* Line 1455 of yacc.c */ -#line 4892 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4888 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23216 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 511: - -/* Line 1455 of yacc.c */ -#line 4896 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4892 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23222 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 512: - -/* Line 1455 of yacc.c */ -#line 4897 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4893 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23228 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 513: - -/* Line 1455 of yacc.c */ -#line 4902 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4898 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; part_info->num_columns++; - if (part_info->part_field_list.push_back((yyvsp[(1) - (1)].lex_str).str, thd->mem_root)) + if (part_info->part_field_list.push_back((yyvsp[0].lex_str).str, thd->mem_root)) { mem_alloc_error(1); MYSQL_YYABORT; @@ -24755,55 +23241,50 @@ my_yyabort_error((ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR, MYF(0), "list of partition fields")); } +#line 23245 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 514: - -/* Line 1455 of yacc.c */ -#line 4918 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4914 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; part_info->column_list= TRUE; part_info->list_of_part_fields= TRUE; } +#line 23255 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 515: - -/* Line 1455 of yacc.c */ -#line 4928 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4924 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; - if (part_info->set_part_expr((yyvsp[(2) - (5)].simple_string)+1, (yyvsp[(3) - (5)].item), (yyvsp[(4) - (5)].simple_string), FALSE)) + if (part_info->set_part_expr((yyvsp[-3].simple_string)+1, (yyvsp[-2].item), (yyvsp[-1].simple_string), FALSE)) { MYSQL_YYABORT; } part_info->num_columns= 1; part_info->column_list= FALSE; } +#line 23267 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 516: - -/* Line 1455 of yacc.c */ -#line 4939 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4935 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->part_info->set_part_expr((yyvsp[(2) - (5)].simple_string)+1, (yyvsp[(3) - (5)].item), (yyvsp[(4) - (5)].simple_string), TRUE)) + if (Lex->part_info->set_part_expr((yyvsp[-3].simple_string)+1, (yyvsp[-2].item), (yyvsp[-1].simple_string), TRUE)) { MYSQL_YYABORT; } } +#line 23276 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 517: - -/* Line 1455 of yacc.c */ -#line 4947 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4943 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23282 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 518: - -/* Line 1455 of yacc.c */ -#line 4949 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4945 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - uint num_parts= (yyvsp[(2) - (2)].ulong_num); + uint num_parts= (yyvsp[0].ulong_num); partition_info *part_info= Lex->part_info; if (num_parts == 0) my_yyabort_error((ER_NO_PARTS_ERROR, MYF(0), "partitions")); @@ -24811,68 +23292,60 @@ part_info->num_parts= num_parts; part_info->use_default_num_partitions= FALSE; } +#line 23296 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 519: - -/* Line 1455 of yacc.c */ -#line 4961 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4957 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23302 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 520: - -/* Line 1455 of yacc.c */ -#line 4963 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4959 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->part_info->subpart_type= HASH_PARTITION; } +#line 23308 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 521: - -/* Line 1455 of yacc.c */ -#line 4964 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4960 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23314 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 522: - -/* Line 1455 of yacc.c */ -#line 4967 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4963 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; part_info->subpart_type= HASH_PARTITION; part_info->list_of_subpart_fields= TRUE; } +#line 23324 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 523: - -/* Line 1455 of yacc.c */ -#line 4972 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4968 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23330 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 524: - -/* Line 1455 of yacc.c */ -#line 4976 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4972 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23336 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 525: - -/* Line 1455 of yacc.c */ -#line 4977 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4973 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23342 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 526: - -/* Line 1455 of yacc.c */ -#line 4982 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4978 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; - if (part_info->subpart_field_list.push_back((yyvsp[(1) - (1)].lex_str).str, thd->mem_root)) + if (part_info->subpart_field_list.push_back((yyvsp[0].lex_str).str, thd->mem_root)) { mem_alloc_error(1); MYSQL_YYABORT; @@ -24881,12 +23354,11 @@ my_yyabort_error((ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR, MYF(0), "list of subpartition fields")); } +#line 23358 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 527: - -/* Line 1455 of yacc.c */ -#line 4997 "/home/buildbot/git/sql/sql_yacc.yy" +#line 4993 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; bool not_corr_func; @@ -24897,35 +23369,32 @@ my_parse_error(thd, ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR); MYSQL_YYABORT; } - (yyval.item)=(yyvsp[(1) - (1)].item); + (yyval.item)=(yyvsp[0].item); } +#line 23375 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 528: - -/* Line 1455 of yacc.c */ -#line 5012 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5008 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23381 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 529: - -/* Line 1455 of yacc.c */ -#line 5014 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5010 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - uint num_parts= (yyvsp[(2) - (2)].ulong_num); + uint num_parts= (yyvsp[0].ulong_num); LEX *lex= Lex; if (num_parts == 0) my_yyabort_error((ER_NO_PARTS_ERROR, MYF(0), "subpartitions")); lex->part_info->num_subparts= num_parts; lex->part_info->use_default_num_subpartitions= FALSE; } +#line 23394 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 530: - -/* Line 1455 of yacc.c */ -#line 5026 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5022 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; if (part_info->part_type == RANGE_PARTITION) @@ -24935,12 +23404,11 @@ my_yyabort_error((ER_PARTITIONS_MUST_BE_DEFINED_ERROR, MYF(0), "LIST")); } +#line 23408 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 531: - -/* Line 1455 of yacc.c */ -#line 5036 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5032 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; uint count_curr_parts= part_info->partitions.elements; @@ -24959,26 +23427,23 @@ } part_info->count_curr_subparts= 0; } +#line 23431 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 532: - -/* Line 1455 of yacc.c */ -#line 5057 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5053 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23437 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 533: - -/* Line 1455 of yacc.c */ -#line 5058 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5054 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23443 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 534: - -/* Line 1455 of yacc.c */ -#line 5063 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5059 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; partition_element *p_elem= new (thd->mem_root) partition_element(); @@ -24995,53 +23460,45 @@ part_info->use_default_partitions= FALSE; part_info->use_default_num_partitions= FALSE; } +#line 23464 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 535: - -/* Line 1455 of yacc.c */ -#line 5083 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5079 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23470 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 536: - -/* Line 1455 of yacc.c */ -#line 5088 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5084 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; partition_element *p_elem= part_info->curr_part_elem; - if (check_ident_length(&(yyvsp[(1) - (1)].lex_str))) + if (check_ident_length(&(yyvsp[0].lex_str))) MYSQL_YYABORT; - p_elem->partition_name= (yyvsp[(1) - (1)].lex_str).str; + p_elem->partition_name= (yyvsp[0].lex_str).str; } +#line 23482 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 537: - -/* Line 1455 of yacc.c */ -#line 5099 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5095 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; partition_info *part_info= lex->part_info; if (! lex->is_partition_management()) { - if (part_info->part_type == RANGE_PARTITION) - my_yyabort_error((ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "RANGE", "LESS THAN")); - if (part_info->part_type == LIST_PARTITION) - my_yyabort_error((ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "LIST", "IN")); + if (part_info->error_if_requires_values()) + MYSQL_YYABORT; } else part_info->part_type= HASH_PARTITION; } +#line 23498 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 538: - -/* Line 1455 of yacc.c */ -#line 5115 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5107 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -25054,19 +23511,17 @@ else part_info->part_type= RANGE_PARTITION; } +#line 23515 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 539: - -/* Line 1455 of yacc.c */ -#line 5127 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5119 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23521 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 540: - -/* Line 1455 of yacc.c */ -#line 5129 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5121 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -25079,19 +23534,17 @@ else part_info->part_type= LIST_PARTITION; } +#line 23538 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 541: - -/* Line 1455 of yacc.c */ -#line 5141 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5133 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23544 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 542: - -/* Line 1455 of yacc.c */ -#line 5146 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5138 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; @@ -25113,19 +23566,17 @@ MYSQL_YYABORT; } } +#line 23570 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 543: - -/* Line 1455 of yacc.c */ -#line 5167 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5159 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23576 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 544: - -/* Line 1455 of yacc.c */ -#line 5172 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5164 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; partition_info *part_info= lex->part_info; @@ -25154,12 +23605,11 @@ } } } +#line 23609 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 545: - -/* Line 1455 of yacc.c */ -#line 5201 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5193 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; if (part_info->num_columns < 2U) @@ -25168,26 +23618,23 @@ MYSQL_YYABORT; } } +#line 23622 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 546: - -/* Line 1455 of yacc.c */ -#line 5212 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5204 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23628 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 547: - -/* Line 1455 of yacc.c */ -#line 5213 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5205 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23634 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 548: - -/* Line 1455 of yacc.c */ -#line 5218 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5210 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; part_info->print_debug("( part_value_item", NULL); @@ -25199,19 +23646,17 @@ MYSQL_YYABORT; } } +#line 23650 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 549: - -/* Line 1455 of yacc.c */ -#line 5229 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5221 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23656 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 550: - -/* Line 1455 of yacc.c */ -#line 5231 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5223 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; part_info->print_debug(") part_value_item", NULL); @@ -25232,26 +23677,23 @@ } part_info->curr_list_object= 0; } +#line 23681 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 551: - -/* Line 1455 of yacc.c */ -#line 5254 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5246 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23687 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 552: - -/* Line 1455 of yacc.c */ -#line 5255 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5247 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23693 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 553: - -/* Line 1455 of yacc.c */ -#line 5260 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5252 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; if (part_info->part_type == LIST_PARTITION) @@ -25264,16 +23706,15 @@ MYSQL_YYABORT; } } +#line 23710 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 554: - -/* Line 1455 of yacc.c */ -#line 5273 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5265 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; partition_info *part_info= lex->part_info; - Item *part_expr= (yyvsp[(1) - (1)].item); + Item *part_expr= (yyvsp[0].item); if (!lex->safe_to_cache_query) { @@ -25285,12 +23726,11 @@ MYSQL_YYABORT; } } +#line 23730 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 555: - -/* Line 1455 of yacc.c */ -#line 5293 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5285 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; if (part_info->num_subparts != 0 && @@ -25304,12 +23744,11 @@ MYSQL_YYABORT; } } +#line 23748 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 556: - -/* Line 1455 of yacc.c */ -#line 5307 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5299 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; if (part_info->num_subparts != 0) @@ -25332,26 +23771,23 @@ } part_info->count_curr_subparts= 0; } +#line 23775 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 557: - -/* Line 1455 of yacc.c */ -#line 5332 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5324 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23781 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 558: - -/* Line 1455 of yacc.c */ -#line 5333 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5325 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23787 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 559: - -/* Line 1455 of yacc.c */ -#line 5338 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5330 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; partition_element *curr_part= part_info->current_partition; @@ -25385,129 +23821,113 @@ part_info->use_default_num_subpartitions= FALSE; part_info->count_curr_subparts++; } +#line 23825 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 560: - -/* Line 1455 of yacc.c */ -#line 5371 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5363 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23831 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 561: - -/* Line 1455 of yacc.c */ -#line 5376 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5368 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (check_ident_length(&(yyvsp[(1) - (1)].lex_str))) + if (check_ident_length(&(yyvsp[0].lex_str))) MYSQL_YYABORT; - Lex->part_info->curr_part_elem->partition_name= (yyvsp[(1) - (1)].lex_str).str; + Lex->part_info->curr_part_elem->partition_name= (yyvsp[0].lex_str).str; } +#line 23841 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 562: - -/* Line 1455 of yacc.c */ -#line 5384 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5376 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23847 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 563: - -/* Line 1455 of yacc.c */ -#line 5385 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5377 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23853 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 564: - -/* Line 1455 of yacc.c */ -#line 5389 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5381 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23859 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 565: - -/* Line 1455 of yacc.c */ -#line 5390 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5382 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23865 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 566: - -/* Line 1455 of yacc.c */ -#line 5395 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->part_info->curr_part_elem->tablespace_name= (yyvsp[(3) - (3)].lex_str).str; } +#line 5387 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->part_info->curr_part_elem->tablespace_name= (yyvsp[0].lex_str).str; } +#line 23871 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 567: - -/* Line 1455 of yacc.c */ -#line 5397 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5389 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; - part_info->curr_part_elem->engine_type= (yyvsp[(4) - (4)].db_type); - part_info->default_engine_type= (yyvsp[(4) - (4)].db_type); + part_info->curr_part_elem->engine_type= (yyvsp[0].db_type); + part_info->default_engine_type= (yyvsp[0].db_type); } +#line 23881 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 568: - -/* Line 1455 of yacc.c */ -#line 5403 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5395 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->part_info->curr_part_elem->connect_string.str= (yyvsp[(3) - (3)].lex_str).str; - lex->part_info->curr_part_elem->connect_string.length= (yyvsp[(3) - (3)].lex_str).length; + lex->part_info->curr_part_elem->connect_string.str= (yyvsp[0].lex_str).str; + lex->part_info->curr_part_elem->connect_string.length= (yyvsp[0].lex_str).length; } +#line 23891 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 569: - -/* Line 1455 of yacc.c */ -#line 5409 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->part_info->curr_part_elem->nodegroup_id= (uint16) (yyvsp[(3) - (3)].ulong_num); } +#line 5401 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->part_info->curr_part_elem->nodegroup_id= (uint16) (yyvsp[0].ulong_num); } +#line 23897 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 570: - -/* Line 1455 of yacc.c */ -#line 5411 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->part_info->curr_part_elem->part_max_rows= (ha_rows) (yyvsp[(3) - (3)].ulonglong_number); } +#line 5403 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->part_info->curr_part_elem->part_max_rows= (ha_rows) (yyvsp[0].ulonglong_number); } +#line 23903 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 571: - -/* Line 1455 of yacc.c */ -#line 5413 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->part_info->curr_part_elem->part_min_rows= (ha_rows) (yyvsp[(3) - (3)].ulonglong_number); } +#line 5405 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->part_info->curr_part_elem->part_min_rows= (ha_rows) (yyvsp[0].ulonglong_number); } +#line 23909 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 572: - -/* Line 1455 of yacc.c */ -#line 5415 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->part_info->curr_part_elem->data_file_name= (yyvsp[(4) - (4)].lex_str).str; } +#line 5407 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->part_info->curr_part_elem->data_file_name= (yyvsp[0].lex_str).str; } +#line 23915 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 573: - -/* Line 1455 of yacc.c */ -#line 5417 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->part_info->curr_part_elem->index_file_name= (yyvsp[(4) - (4)].lex_str).str; } +#line 5409 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->part_info->curr_part_elem->index_file_name= (yyvsp[0].lex_str).str; } +#line 23921 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 574: - -/* Line 1455 of yacc.c */ -#line 5419 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->part_info->curr_part_elem->part_comment= (yyvsp[(3) - (3)].lex_str).str; } +#line 5411 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->part_info->curr_part_elem->part_comment= (yyvsp[0].lex_str).str; } +#line 23927 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 575: - -/* Line 1455 of yacc.c */ -#line 5428 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5420 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (lex->sql_command == SQLCOM_INSERT) @@ -25522,21 +23942,19 @@ mysql_init_select(lex); lex->current_select->parsing_place= SELECT_LIST; } +#line 23946 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 576: - -/* Line 1455 of yacc.c */ -#line 5443 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5435 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= NO_MATTER; } +#line 23954 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 577: - -/* Line 1455 of yacc.c */ -#line 5447 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5439 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* The following work only with the local list, the global list @@ -25544,194 +23962,172 @@ */ Lex->current_select->table_list.push_front(&Lex->save_list); } +#line 23966 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 578: - -/* Line 1455 of yacc.c */ -#line 5457 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5449 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23972 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 579: - -/* Line 1455 of yacc.c */ -#line 5458 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5450 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23978 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 580: - -/* Line 1455 of yacc.c */ -#line 5462 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5454 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23984 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 581: - -/* Line 1455 of yacc.c */ -#line 5463 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5455 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23990 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 582: - -/* Line 1455 of yacc.c */ -#line 5467 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5459 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 23996 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 583: - -/* Line 1455 of yacc.c */ -#line 5468 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5460 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24002 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 584: - -/* Line 1455 of yacc.c */ -#line 5472 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5464 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24008 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 585: - -/* Line 1455 of yacc.c */ -#line 5473 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5465 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24014 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 586: - -/* Line 1455 of yacc.c */ -#line 5478 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5470 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_exists= FALSE; } +#line 24022 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 587: - -/* Line 1455 of yacc.c */ -#line 5482 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5474 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_exists= TRUE; } +#line 24030 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 588: - -/* Line 1455 of yacc.c */ -#line 5489 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5481 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.object_ddl_options).init(); } +#line 24038 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 589: - -/* Line 1455 of yacc.c */ -#line 5493 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5485 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.object_ddl_options).set(DDL_options_st::OPT_IF_NOT_EXISTS); } +#line 24046 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 590: - -/* Line 1455 of yacc.c */ -#line 5500 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5492 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.object_ddl_options).init(); } +#line 24054 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 591: - -/* Line 1455 of yacc.c */ -#line 5504 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5496 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.object_ddl_options).set(DDL_options_st::OPT_OR_REPLACE); } +#line 24062 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 599: - -/* Line 1455 of yacc.c */ -#line 5527 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5519 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.db_type= (yyvsp[(3) - (3)].db_type); + Lex->create_info.db_type= (yyvsp[0].db_type); Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE; } +#line 24071 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 600: - -/* Line 1455 of yacc.c */ -#line 5532 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5524 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.max_rows= (yyvsp[(3) - (3)].ulonglong_number); + Lex->create_info.max_rows= (yyvsp[0].ulonglong_number); Lex->create_info.used_fields|= HA_CREATE_USED_MAX_ROWS; } +#line 24080 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 601: - -/* Line 1455 of yacc.c */ -#line 5537 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5529 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.min_rows= (yyvsp[(3) - (3)].ulonglong_number); + Lex->create_info.min_rows= (yyvsp[0].ulonglong_number); Lex->create_info.used_fields|= HA_CREATE_USED_MIN_ROWS; } +#line 24089 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 602: - -/* Line 1455 of yacc.c */ -#line 5542 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5534 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.avg_row_length=(yyvsp[(3) - (3)].ulong_num); + Lex->create_info.avg_row_length=(yyvsp[0].ulong_num); Lex->create_info.used_fields|= HA_CREATE_USED_AVG_ROW_LENGTH; } +#line 24098 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 603: - -/* Line 1455 of yacc.c */ -#line 5547 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5539 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.password=(yyvsp[(3) - (3)].lex_str).str; + Lex->create_info.password=(yyvsp[0].lex_str).str; Lex->create_info.used_fields|= HA_CREATE_USED_PASSWORD; } +#line 24107 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 604: - -/* Line 1455 of yacc.c */ -#line 5552 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5544 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.comment=(yyvsp[(3) - (3)].lex_str); + Lex->create_info.comment=(yyvsp[0].lex_str); Lex->create_info.used_fields|= HA_CREATE_USED_COMMENT; } +#line 24116 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 605: - -/* Line 1455 of yacc.c */ -#line 5557 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5549 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.auto_increment_value=(yyvsp[(3) - (3)].ulonglong_number); + Lex->create_info.auto_increment_value=(yyvsp[0].ulonglong_number); Lex->create_info.used_fields|= HA_CREATE_USED_AUTO; } +#line 24125 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 606: - -/* Line 1455 of yacc.c */ -#line 5562 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5554 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - switch((yyvsp[(3) - (3)].ulong_num)) { + switch((yyvsp[0].ulong_num)) { case 0: Lex->create_info.table_options|= HA_OPTION_NO_PACK_KEYS; break; @@ -25744,25 +24140,23 @@ } Lex->create_info.used_fields|= HA_CREATE_USED_PACK_KEYS; } +#line 24144 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 607: - -/* Line 1455 of yacc.c */ -#line 5577 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5569 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.table_options&= ~(HA_OPTION_PACK_KEYS | HA_OPTION_NO_PACK_KEYS); Lex->create_info.used_fields|= HA_CREATE_USED_PACK_KEYS; } +#line 24154 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 608: - -/* Line 1455 of yacc.c */ -#line 5583 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5575 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - switch((yyvsp[(3) - (3)].ulong_num)) { + switch((yyvsp[0].ulong_num)) { case 0: Lex->create_info.stats_auto_recalc= HA_STATS_AUTO_RECALC_OFF; break; @@ -25775,24 +24169,22 @@ } Lex->create_info.used_fields|= HA_CREATE_USED_STATS_AUTO_RECALC; } +#line 24173 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 609: - -/* Line 1455 of yacc.c */ -#line 5598 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5590 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.stats_auto_recalc= HA_STATS_AUTO_RECALC_DEFAULT; Lex->create_info.used_fields|= HA_CREATE_USED_STATS_AUTO_RECALC; } +#line 24182 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 610: - -/* Line 1455 of yacc.c */ -#line 5603 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5595 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - switch((yyvsp[(3) - (3)].ulong_num)) { + switch((yyvsp[0].ulong_num)) { case 0: Lex->create_info.table_options|= HA_OPTION_NO_STATS_PERSISTENT; break; @@ -25805,23 +24197,21 @@ } Lex->create_info.used_fields|= HA_CREATE_USED_STATS_PERSISTENT; } +#line 24201 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 611: - -/* Line 1455 of yacc.c */ -#line 5618 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5610 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.table_options&= ~(HA_OPTION_STATS_PERSISTENT | HA_OPTION_NO_STATS_PERSISTENT); Lex->create_info.used_fields|= HA_CREATE_USED_STATS_PERSISTENT; } +#line 24211 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 612: - -/* Line 1455 of yacc.c */ -#line 5624 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5616 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* From user point of view STATS_SAMPLE_PAGES can be specified as STATS_SAMPLE_PAGES=N (where 0 0xffff) + if ((yyvsp[0].ulong_num) == 0 || (yyvsp[0].ulong_num) > 0xffff) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } - Lex->create_info.stats_sample_pages=(yyvsp[(3) - (3)].ulong_num); + Lex->create_info.stats_sample_pages=(yyvsp[0].ulong_num); Lex->create_info.used_fields|= HA_CREATE_USED_STATS_SAMPLE_PAGES; } +#line 24233 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 613: - -/* Line 1455 of yacc.c */ -#line 5642 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5634 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.stats_sample_pages=0; Lex->create_info.used_fields|= HA_CREATE_USED_STATS_SAMPLE_PAGES; } +#line 24242 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 614: - -/* Line 1455 of yacc.c */ -#line 5647 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5639 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.table_options|= (yyvsp[(3) - (3)].ulong_num) ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; + Lex->create_info.table_options|= (yyvsp[0].ulong_num) ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; Lex->create_info.used_fields|= HA_CREATE_USED_CHECKSUM; } +#line 24251 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 615: - -/* Line 1455 of yacc.c */ -#line 5652 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5644 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.table_options|= (yyvsp[(3) - (3)].ulong_num) ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; + Lex->create_info.table_options|= (yyvsp[0].ulong_num) ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; Lex->create_info.used_fields|= HA_CREATE_USED_CHECKSUM; } +#line 24260 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 616: - -/* Line 1455 of yacc.c */ -#line 5657 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5649 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.used_fields|= HA_CREATE_USED_PAGE_CHECKSUM; - Lex->create_info.page_checksum= (yyvsp[(3) - (3)].choice); + Lex->create_info.page_checksum= (yyvsp[0].choice); } +#line 24269 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 617: - -/* Line 1455 of yacc.c */ -#line 5662 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5654 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.table_options|= (yyvsp[(3) - (3)].ulong_num) ? HA_OPTION_DELAY_KEY_WRITE : HA_OPTION_NO_DELAY_KEY_WRITE; + Lex->create_info.table_options|= (yyvsp[0].ulong_num) ? HA_OPTION_DELAY_KEY_WRITE : HA_OPTION_NO_DELAY_KEY_WRITE; Lex->create_info.used_fields|= HA_CREATE_USED_DELAY_KEY_WRITE; } +#line 24278 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 618: - -/* Line 1455 of yacc.c */ -#line 5667 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5659 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.row_type= (yyvsp[(3) - (3)].row_type); + Lex->create_info.row_type= (yyvsp[0].row_type); Lex->create_info.used_fields|= HA_CREATE_USED_ROW_FORMAT; } +#line 24287 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 619: - -/* Line 1455 of yacc.c */ -#line 5672 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5664 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->select_lex.table_list.save_and_clear(&Lex->save_list); } +#line 24295 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 620: - -/* Line 1455 of yacc.c */ -#line 5676 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5668 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Move the union list to the merge_list and exclude its tables @@ -25935,173 +24317,157 @@ lex->create_info.used_fields|= HA_CREATE_USED_UNION; } +#line 24321 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 623: - -/* Line 1455 of yacc.c */ -#line 5700 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5692 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.merge_insert_method= (yyvsp[(3) - (3)].ulong_num); + Lex->create_info.merge_insert_method= (yyvsp[0].ulong_num); Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD; } +#line 24330 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 624: - -/* Line 1455 of yacc.c */ -#line 5705 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5697 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.data_file_name= (yyvsp[(4) - (4)].lex_str).str; + Lex->create_info.data_file_name= (yyvsp[0].lex_str).str; Lex->create_info.used_fields|= HA_CREATE_USED_DATADIR; } +#line 24339 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 625: - -/* Line 1455 of yacc.c */ -#line 5710 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5702 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.index_file_name= (yyvsp[(4) - (4)].lex_str).str; + Lex->create_info.index_file_name= (yyvsp[0].lex_str).str; Lex->create_info.used_fields|= HA_CREATE_USED_INDEXDIR; } +#line 24348 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 626: - -/* Line 1455 of yacc.c */ -#line 5715 "/home/buildbot/git/sql/sql_yacc.yy" - {Lex->create_info.tablespace= (yyvsp[(2) - (2)].lex_str).str;} +#line 5707 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {Lex->create_info.tablespace= (yyvsp[0].lex_str).str;} +#line 24354 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 627: - -/* Line 1455 of yacc.c */ -#line 5717 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5709 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {Lex->create_info.storage_media= HA_SM_DISK;} +#line 24360 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 628: - -/* Line 1455 of yacc.c */ -#line 5719 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5711 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {Lex->create_info.storage_media= HA_SM_MEMORY;} +#line 24366 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 629: - -/* Line 1455 of yacc.c */ -#line 5721 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5713 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->create_info.connect_string.str= (yyvsp[(3) - (3)].lex_str).str; - Lex->create_info.connect_string.length= (yyvsp[(3) - (3)].lex_str).length; + Lex->create_info.connect_string.str= (yyvsp[0].lex_str).str; + Lex->create_info.connect_string.length= (yyvsp[0].lex_str).length; Lex->create_info.used_fields|= HA_CREATE_USED_CONNECTION; } +#line 24376 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 630: - -/* Line 1455 of yacc.c */ -#line 5727 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5719 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.used_fields|= HA_CREATE_USED_KEY_BLOCK_SIZE; - Lex->create_info.key_block_size= (yyvsp[(3) - (3)].ulong_num); + Lex->create_info.key_block_size= (yyvsp[0].ulong_num); } +#line 24385 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 631: - -/* Line 1455 of yacc.c */ -#line 5732 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5724 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.used_fields|= HA_CREATE_USED_TRANSACTIONAL; - Lex->create_info.transactional= (yyvsp[(3) - (3)].choice); + Lex->create_info.transactional= (yyvsp[0].choice); } +#line 24394 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 632: - -/* Line 1455 of yacc.c */ -#line 5737 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5729 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(3) - (3)].lex_str).length > ENGINE_OPTION_MAX_LENGTH) - my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); + if ((yyvsp[0].lex_str).length > ENGINE_OPTION_MAX_LENGTH) + my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[-2].lex_str).str)); new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), true, &Lex->create_info.option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].lex_str), true, &Lex->create_info.option_list, &Lex->option_list_last); } +#line 24406 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 633: - -/* Line 1455 of yacc.c */ -#line 5745 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5737 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(3) - (3)].lex_str).length > ENGINE_OPTION_MAX_LENGTH) - my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); + if ((yyvsp[0].lex_str).length > ENGINE_OPTION_MAX_LENGTH) + my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[-2].lex_str).str)); new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), false, &Lex->create_info.option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].lex_str), false, &Lex->create_info.option_list, &Lex->option_list_last); } +#line 24418 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 634: - -/* Line 1455 of yacc.c */ -#line 5753 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5745 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].ulonglong_number), &Lex->create_info.option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].ulonglong_number), &Lex->create_info.option_list, &Lex->option_list_last, thd->mem_root); } +#line 24428 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 635: - -/* Line 1455 of yacc.c */ -#line 5759 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5751 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), &Lex->create_info.option_list, + engine_option_value((yyvsp[-2].lex_str), &Lex->create_info.option_list, &Lex->option_list_last); } +#line 24438 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 636: - -/* Line 1455 of yacc.c */ -#line 5768 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5760 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->create_info.add_table_option_default_charset((yyvsp[(4) - (4)].charset))) + if (Lex->create_info.add_table_option_default_charset((yyvsp[0].charset))) MYSQL_YYABORT; } +#line 24447 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 637: - -/* Line 1455 of yacc.c */ -#line 5776 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5768 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { HA_CREATE_INFO *cinfo= &Lex->create_info; if ((cinfo->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) && - cinfo->default_table_charset && (yyvsp[(4) - (4)].charset) && - !((yyvsp[(4) - (4)].charset)= merge_charset_and_collation(cinfo->default_table_charset, - (yyvsp[(4) - (4)].charset)))) + cinfo->default_table_charset && (yyvsp[0].charset) && + !((yyvsp[0].charset)= merge_charset_and_collation(cinfo->default_table_charset, + (yyvsp[0].charset)))) { MYSQL_YYABORT; } - Lex->create_info.default_table_charset= (yyvsp[(4) - (4)].charset); + Lex->create_info.default_table_charset= (yyvsp[0].charset); Lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET; } +#line 24465 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 638: - -/* Line 1455 of yacc.c */ -#line 5793 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5785 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - plugin_ref plugin= ha_resolve_by_name(thd, &(yyvsp[(1) - (1)].lex_str), + plugin_ref plugin= ha_resolve_by_name(thd, &(yyvsp[0].lex_str), thd->lex->create_info.tmp_table()); if (plugin) @@ -26109,274 +24475,244 @@ else { if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) - my_yyabort_error((ER_UNKNOWN_STORAGE_ENGINE, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + my_yyabort_error((ER_UNKNOWN_STORAGE_ENGINE, MYF(0), (yyvsp[0].lex_str).str)); (yyval.db_type)= 0; push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, ER_UNKNOWN_STORAGE_ENGINE, ER_THD(thd, ER_UNKNOWN_STORAGE_ENGINE), - (yyvsp[(1) - (1)].lex_str).str); + (yyvsp[0].lex_str).str); } } +#line 24487 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 639: - -/* Line 1455 of yacc.c */ -#line 5814 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5806 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { plugin_ref plugin; - if ((plugin= ha_resolve_by_name(thd, &(yyvsp[(1) - (1)].lex_str), false))) + if ((plugin= ha_resolve_by_name(thd, &(yyvsp[0].lex_str), false))) (yyval.db_type)= plugin_hton(plugin); else - my_yyabort_error((ER_UNKNOWN_STORAGE_ENGINE, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + my_yyabort_error((ER_UNKNOWN_STORAGE_ENGINE, MYF(0), (yyvsp[0].lex_str).str)); } +#line 24499 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 640: - -/* Line 1455 of yacc.c */ -#line 5824 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5816 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.row_type)= ROW_TYPE_DEFAULT; } +#line 24505 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 641: - -/* Line 1455 of yacc.c */ -#line 5825 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5817 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.row_type)= ROW_TYPE_FIXED; } +#line 24511 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 642: - -/* Line 1455 of yacc.c */ -#line 5826 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5818 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.row_type)= ROW_TYPE_DYNAMIC; } +#line 24517 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 643: - -/* Line 1455 of yacc.c */ -#line 5827 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5819 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.row_type)= ROW_TYPE_COMPRESSED; } +#line 24523 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 644: - -/* Line 1455 of yacc.c */ -#line 5828 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5820 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.row_type)= ROW_TYPE_REDUNDANT; } +#line 24529 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 645: - -/* Line 1455 of yacc.c */ -#line 5829 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5821 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.row_type)= ROW_TYPE_COMPACT; } +#line 24535 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 646: - -/* Line 1455 of yacc.c */ -#line 5830 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5822 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.row_type)= ROW_TYPE_PAGE; } +#line 24541 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 647: - -/* Line 1455 of yacc.c */ -#line 5834 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5826 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= MERGE_INSERT_DISABLED; } +#line 24547 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 648: - -/* Line 1455 of yacc.c */ -#line 5835 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5827 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= MERGE_INSERT_TO_FIRST; } +#line 24553 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 649: - -/* Line 1455 of yacc.c */ -#line 5836 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5828 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= MERGE_INSERT_TO_LAST; } +#line 24559 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 650: - -/* Line 1455 of yacc.c */ -#line 5840 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5832 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.num) = (int) STRING_RESULT; } +#line 24565 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 651: - -/* Line 1455 of yacc.c */ -#line 5841 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5833 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.num) = (int) REAL_RESULT; } +#line 24571 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 652: - -/* Line 1455 of yacc.c */ -#line 5842 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5834 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.num) = (int) DECIMAL_RESULT; } +#line 24577 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 653: - -/* Line 1455 of yacc.c */ -#line 5843 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5835 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.num) = (int) INT_RESULT; } +#line 24583 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 654: - -/* Line 1455 of yacc.c */ -#line 5849 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5841 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_last_non_select_table= Lex->last_table(); } +#line 24591 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 661: - -/* Line 1455 of yacc.c */ -#line 5871 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5863 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->option_list= NULL; - if (Lex->add_key(Key::MULTIPLE, (yyvsp[(3) - (4)].lex_str), (yyvsp[(4) - (4)].key_alg), (yyvsp[(2) - (4)].object_ddl_options))) + if (Lex->add_key(Key::MULTIPLE, (yyvsp[-1].lex_str), (yyvsp[0].key_alg), (yyvsp[-2].object_ddl_options))) MYSQL_YYABORT; } +#line 24601 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 662: - -/* Line 1455 of yacc.c */ -#line 5876 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5868 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 24607 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 663: - -/* Line 1455 of yacc.c */ -#line 5878 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5870 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->option_list= NULL; - if (Lex->add_key(Key::MULTIPLE, (yyvsp[(3) - (5)].lex_str), (yyvsp[(5) - (5)].key_alg), (yyvsp[(2) - (5)].object_ddl_options))) + if (Lex->add_key(Key::MULTIPLE, (yyvsp[-2].lex_str), (yyvsp[0].key_alg), (yyvsp[-3].object_ddl_options))) MYSQL_YYABORT; } +#line 24617 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 664: - -/* Line 1455 of yacc.c */ -#line 5883 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5875 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 24623 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 665: - -/* Line 1455 of yacc.c */ -#line 5885 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5877 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->option_list= NULL; - if (Lex->add_key((yyvsp[(1) - (4)].key_type), (yyvsp[(4) - (4)].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[(3) - (4)].object_ddl_options))) + if (Lex->add_key((yyvsp[-3].key_type), (yyvsp[0].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[-1].object_ddl_options))) MYSQL_YYABORT; } +#line 24633 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 666: - -/* Line 1455 of yacc.c */ -#line 5890 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5882 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 24639 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 667: - -/* Line 1455 of yacc.c */ -#line 5892 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5884 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->option_list= NULL; - if (Lex->add_key((yyvsp[(1) - (4)].key_type), (yyvsp[(4) - (4)].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[(3) - (4)].object_ddl_options))) + if (Lex->add_key((yyvsp[-3].key_type), (yyvsp[0].lex_str), HA_KEY_ALG_UNDEF, (yyvsp[-1].object_ddl_options))) MYSQL_YYABORT; } +#line 24649 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 668: - -/* Line 1455 of yacc.c */ -#line 5897 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5889 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 24655 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 669: - -/* Line 1455 of yacc.c */ -#line 5901 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5893 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->option_list= NULL; - if (Lex->add_key((yyvsp[(2) - (5)].key_type), (yyvsp[(4) - (5)].lex_str).str ? (yyvsp[(4) - (5)].lex_str) : (yyvsp[(1) - (5)].lex_str), (yyvsp[(5) - (5)].key_alg), (yyvsp[(3) - (5)].object_ddl_options))) + if (Lex->add_key((yyvsp[-3].key_type), (yyvsp[-1].lex_str).str ? (yyvsp[-1].lex_str) : (yyvsp[-4].lex_str), (yyvsp[0].key_alg), (yyvsp[-2].object_ddl_options))) MYSQL_YYABORT; } +#line 24665 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 670: - -/* Line 1455 of yacc.c */ -#line 5906 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5898 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 24671 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 671: - -/* Line 1455 of yacc.c */ -#line 5909 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5901 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->option_list= NULL; - if (Lex->add_key((yyvsp[(2) - (6)].key_type), (yyvsp[(4) - (6)].lex_str).str ? (yyvsp[(4) - (6)].lex_str) : (yyvsp[(1) - (6)].lex_str), (yyvsp[(6) - (6)].key_alg), (yyvsp[(3) - (6)].object_ddl_options))) + if (Lex->add_key((yyvsp[-4].key_type), (yyvsp[-2].lex_str).str ? (yyvsp[-2].lex_str) : (yyvsp[-5].lex_str), (yyvsp[0].key_alg), (yyvsp[-3].object_ddl_options))) MYSQL_YYABORT; } +#line 24681 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 672: - -/* Line 1455 of yacc.c */ -#line 5914 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5906 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 24687 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 673: - -/* Line 1455 of yacc.c */ -#line 5916 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5908 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->check_add_key((yyvsp[(4) - (5)].object_ddl_options)) || + if (Lex->check_add_key((yyvsp[-1].object_ddl_options)) || !(Lex->last_key= (new (thd->mem_root) - Key(Key::MULTIPLE, (yyvsp[(1) - (5)].lex_str).str ? (yyvsp[(1) - (5)].lex_str) : (yyvsp[(5) - (5)].lex_str), - HA_KEY_ALG_UNDEF, true, (yyvsp[(4) - (5)].object_ddl_options))))) + Key(Key::MULTIPLE, (yyvsp[-4].lex_str).str ? (yyvsp[-4].lex_str) : (yyvsp[0].lex_str), + HA_KEY_ALG_UNDEF, true, (yyvsp[-1].object_ddl_options))))) MYSQL_YYABORT; Lex->option_list= NULL; } +#line 24700 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 674: - -/* Line 1455 of yacc.c */ -#line 5925 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5917 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Key *key= (new (thd->mem_root) - Foreign_key((yyvsp[(5) - (10)].lex_str).str ? (yyvsp[(5) - (10)].lex_str) : (yyvsp[(1) - (10)].lex_str), + Foreign_key((yyvsp[-5].lex_str).str ? (yyvsp[-5].lex_str) : (yyvsp[-9].lex_str), lex->last_key->columns, - (yyvsp[(10) - (10)].table)->db, - (yyvsp[(10) - (10)].table)->table, + (yyvsp[0].table)->db, + (yyvsp[0].table)->table, lex->ref_list, lex->fk_delete_opt, lex->fk_update_opt, lex->fk_match_option, - (yyvsp[(4) - (10)].object_ddl_options))); + (yyvsp[-6].object_ddl_options))); if (key == NULL) MYSQL_YYABORT; /* @@ -26390,66 +24726,59 @@ /* Only used for ALTER TABLE. Ignored otherwise. */ lex->alter_info.flags|= Alter_info::ADD_FOREIGN_KEY; } +#line 24730 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 675: - -/* Line 1455 of yacc.c */ -#line 5950 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5942 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 24736 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 679: - -/* Line 1455 of yacc.c */ -#line 5963 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5955 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str)= null_lex_str; } +#line 24742 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 680: - -/* Line 1455 of yacc.c */ -#line 5964 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } +#line 5956 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)= (yyvsp[0].lex_str); } +#line 24748 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 681: - -/* Line 1455 of yacc.c */ -#line 5968 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str); } +#line 5960 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 24754 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 682: - -/* Line 1455 of yacc.c */ -#line 5973 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5965 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Create_field *f= new (thd->mem_root) Create_field(); - if (check_string_char_length(&(yyvsp[(1) - (1)].lex_str), 0, NAME_CHAR_LEN, + if (check_string_char_length(&(yyvsp[0].lex_str), 0, NAME_CHAR_LEN, system_charset_info, 1)) - my_yyabort_error((ER_TOO_LONG_IDENT, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + my_yyabort_error((ER_TOO_LONG_IDENT, MYF(0), (yyvsp[0].lex_str).str)); if (!f) MYSQL_YYABORT; - lex->init_last_field(f, (yyvsp[(1) - (1)].lex_str).str, NULL); + lex->init_last_field(f, (yyvsp[0].lex_str).str, NULL); } +#line 24772 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 683: - -/* Line 1455 of yacc.c */ -#line 5986 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->set_last_field_type((yyvsp[(3) - (3)].field_type)); } +#line 5978 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->set_last_field_type((yyvsp[0].field_type)); } +#line 24778 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 684: - -/* Line 1455 of yacc.c */ -#line 5988 "/home/buildbot/git/sql/sql_yacc.yy" +#line 5980 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Create_field *f= lex->last_field; @@ -26460,107 +24789,95 @@ lex->alter_info.create_list.push_back(f, thd->mem_root); if (f->flags & PRI_KEY_FLAG) - add_key_to_list(lex, &(yyvsp[(1) - (5)].lex_str), Key::PRIMARY, Lex->check_exists); + add_key_to_list(lex, &(yyvsp[-4].lex_str), Key::PRIMARY, Lex->check_exists); else if (f->flags & (UNIQUE_FLAG | UNIQUE_KEY_FLAG)) - add_key_to_list(lex, &(yyvsp[(1) - (5)].lex_str), Key::UNIQUE, Lex->check_exists); + add_key_to_list(lex, &(yyvsp[-4].lex_str), Key::UNIQUE, Lex->check_exists); } +#line 24797 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 687: - -/* Line 1455 of yacc.c */ -#line 6012 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6004 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24803 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 688: - -/* Line 1455 of yacc.c */ -#line 6013 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6005 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24809 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 689: - -/* Line 1455 of yacc.c */ -#line 6018 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6010 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->vcol_info->set_stored_in_db_flag(FALSE); } +#line 24817 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 690: - -/* Line 1455 of yacc.c */ -#line 6022 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6014 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->vcol_info->set_stored_in_db_flag(FALSE); } +#line 24825 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 691: - -/* Line 1455 of yacc.c */ -#line 6026 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6018 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->vcol_info->set_stored_in_db_flag(TRUE); } +#line 24833 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 692: - -/* Line 1455 of yacc.c */ -#line 6032 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6024 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24839 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 693: - -/* Line 1455 of yacc.c */ -#line 6033 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6025 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24845 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 694: - -/* Line 1455 of yacc.c */ -#line 6037 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6029 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 24851 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 696: - -/* Line 1455 of yacc.c */ -#line 6043 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6035 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->last_field->flags|= UNIQUE_FLAG; lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; } +#line 24861 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 697: - -/* Line 1455 of yacc.c */ -#line 6049 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6041 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->last_field->flags|= UNIQUE_FLAG; lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; } +#line 24871 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 698: - -/* Line 1455 of yacc.c */ -#line 6054 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_field->comment= (yyvsp[(2) - (2)].lex_str); } +#line 6046 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_field->comment= (yyvsp[0].lex_str); } +#line 24877 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 699: - -/* Line 1455 of yacc.c */ -#line 6059 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6051 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* "PARSE_VCOL_EXPR" can only be used by the SQL server @@ -26570,12 +24887,11 @@ if (!Lex->parse_vcol_expr) my_yyabort_error((ER_SYNTAX_ERROR, MYF(0))); } +#line 24891 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 700: - -/* Line 1455 of yacc.c */ -#line 6072 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6064 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Virtual_column_info *v= new (thd->mem_root) Virtual_column_info(); if (!v) @@ -26583,32 +24899,29 @@ mem_alloc_error(sizeof(Virtual_column_info)); MYSQL_YYABORT; } - uint expr_len= (uint)((yyvsp[(3) - (3)].simple_string) - (yyvsp[(1) - (3)].simple_string)) - 1; - v->expr_str.str= (char* ) thd->memdup((yyvsp[(1) - (3)].simple_string) + 1, expr_len); + uint expr_len= (uint)((yyvsp[0].simple_string) - (yyvsp[-2].simple_string)) - 1; + v->expr_str.str= (char* ) thd->memdup((yyvsp[-2].simple_string) + 1, expr_len); v->expr_str.length= expr_len; - v->expr_item= (yyvsp[(2) - (3)].item); + v->expr_item= (yyvsp[-1].item); Lex->last_field->vcol_info= v; } +#line 24909 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 701: - -/* Line 1455 of yacc.c */ -#line 6088 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.field_type)=(yyvsp[(1) - (3)].field_type); } +#line 6080 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.field_type)=(yyvsp[-2].field_type); } +#line 24915 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 702: - -/* Line 1455 of yacc.c */ -#line 6089 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.field_type)=(yyvsp[(1) - (3)].field_type); } +#line 6081 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.field_type)=(yyvsp[-2].field_type); } +#line 24921 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 703: - -/* Line 1455 of yacc.c */ -#line 6091 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6083 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_FLOAT; if (Lex->length && !Lex->dec) @@ -26623,141 +24936,127 @@ Lex->length= 0; } } +#line 24940 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 704: - -/* Line 1455 of yacc.c */ -#line 6106 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6098 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length= (char*) "1"; (yyval.field_type)=MYSQL_TYPE_BIT; } +#line 24949 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 705: - -/* Line 1455 of yacc.c */ -#line 6111 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_BIT; } +#line 24957 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 706: - -/* Line 1455 of yacc.c */ -#line 6115 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6107 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length= (char*) "1"; (yyval.field_type)=MYSQL_TYPE_TINY; } +#line 24966 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 707: - -/* Line 1455 of yacc.c */ -#line 6120 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6112 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length= (char*) "1"; (yyval.field_type)=MYSQL_TYPE_TINY; } +#line 24975 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 708: - -/* Line 1455 of yacc.c */ -#line 6125 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6117 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_STRING; } +#line 24983 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 709: - -/* Line 1455 of yacc.c */ -#line 6129 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6121 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length= (char*) "1"; (yyval.field_type)=MYSQL_TYPE_STRING; } +#line 24992 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 710: - -/* Line 1455 of yacc.c */ -#line 6134 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6126 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_STRING; - bincmp_collation(national_charset_info, (yyvsp[(3) - (3)].num)); + bincmp_collation(national_charset_info, (yyvsp[0].num)); } +#line 25001 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 711: - -/* Line 1455 of yacc.c */ -#line 6139 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6131 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length= (char*) "1"; (yyval.field_type)=MYSQL_TYPE_STRING; - bincmp_collation(national_charset_info, (yyvsp[(2) - (2)].num)); + bincmp_collation(national_charset_info, (yyvsp[0].num)); } +#line 25011 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 712: - -/* Line 1455 of yacc.c */ -#line 6145 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6137 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset=&my_charset_bin; (yyval.field_type)=MYSQL_TYPE_STRING; } +#line 25020 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 713: - -/* Line 1455 of yacc.c */ -#line 6150 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6142 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length= (char*) "1"; Lex->charset=&my_charset_bin; (yyval.field_type)=MYSQL_TYPE_STRING; } +#line 25030 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 714: - -/* Line 1455 of yacc.c */ -#line 6156 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6148 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)= MYSQL_TYPE_VARCHAR; } +#line 25038 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 715: - -/* Line 1455 of yacc.c */ -#line 6160 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6152 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)= MYSQL_TYPE_VARCHAR; - bincmp_collation(national_charset_info, (yyvsp[(3) - (3)].num)); + bincmp_collation(national_charset_info, (yyvsp[0].num)); } +#line 25047 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 716: - -/* Line 1455 of yacc.c */ -#line 6165 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6157 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset=&my_charset_bin; (yyval.field_type)= MYSQL_TYPE_VARCHAR; } +#line 25056 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 717: - -/* Line 1455 of yacc.c */ -#line 6170 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6162 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Lex->length) { @@ -26775,27 +25074,24 @@ } (yyval.field_type)=MYSQL_TYPE_YEAR; } +#line 25078 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 718: - -/* Line 1455 of yacc.c */ -#line 6188 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6180 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_DATE; } +#line 25084 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 719: - -/* Line 1455 of yacc.c */ -#line 6190 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6182 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)= opt_mysql56_temporal_format ? MYSQL_TYPE_TIME2 : MYSQL_TYPE_TIME; } +#line 25091 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 720: - -/* Line 1455 of yacc.c */ -#line 6193 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6185 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (thd->variables.sql_mode & MODE_MAXDB) (yyval.field_type)= opt_mysql56_temporal_format ? @@ -26812,1316 +25108,1152 @@ : MYSQL_TYPE_TIMESTAMP; } } +#line 25112 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 721: - -/* Line 1455 of yacc.c */ -#line 6210 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6202 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)= opt_mysql56_temporal_format ? MYSQL_TYPE_DATETIME2 : MYSQL_TYPE_DATETIME; } +#line 25119 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 722: - -/* Line 1455 of yacc.c */ -#line 6213 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6205 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset=&my_charset_bin; (yyval.field_type)=MYSQL_TYPE_TINY_BLOB; } +#line 25128 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 723: - -/* Line 1455 of yacc.c */ -#line 6218 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6210 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset=&my_charset_bin; (yyval.field_type)=MYSQL_TYPE_BLOB; } +#line 25137 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 724: - -/* Line 1455 of yacc.c */ -#line 6223 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6215 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { #ifdef HAVE_SPATIAL Lex->charset=&my_charset_bin; - Lex->last_field->geom_type= (yyvsp[(1) - (3)].geom_type); + Lex->last_field->geom_type= (yyvsp[-2].geom_type); (yyval.field_type)=MYSQL_TYPE_GEOMETRY; #else my_yyabort_error((ER_FEATURE_DISABLED, MYF(0), sym_group_geom.name, sym_group_geom.needed_define)); #endif } +#line 25152 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 725: - -/* Line 1455 of yacc.c */ -#line 6234 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6226 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset=&my_charset_bin; (yyval.field_type)=MYSQL_TYPE_MEDIUM_BLOB; } +#line 25161 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 726: - -/* Line 1455 of yacc.c */ -#line 6239 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6231 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset=&my_charset_bin; (yyval.field_type)=MYSQL_TYPE_LONG_BLOB; } +#line 25170 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 727: - -/* Line 1455 of yacc.c */ -#line 6244 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6236 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset=&my_charset_bin; (yyval.field_type)=MYSQL_TYPE_MEDIUM_BLOB; } +#line 25179 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 728: - -/* Line 1455 of yacc.c */ -#line 6249 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6241 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_MEDIUM_BLOB; } +#line 25185 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 729: - -/* Line 1455 of yacc.c */ -#line 6251 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6243 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_TINY_BLOB; } +#line 25191 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 730: - -/* Line 1455 of yacc.c */ -#line 6253 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6245 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_BLOB; } +#line 25197 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 731: - -/* Line 1455 of yacc.c */ -#line 6255 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6247 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_MEDIUM_BLOB; } +#line 25203 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 732: - -/* Line 1455 of yacc.c */ -#line 6257 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6249 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_LONG_BLOB; } +#line 25209 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 733: - -/* Line 1455 of yacc.c */ -#line 6259 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6251 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_NEWDECIMAL;} +#line 25215 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 734: - -/* Line 1455 of yacc.c */ -#line 6261 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6253 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_NEWDECIMAL;} +#line 25221 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 735: - -/* Line 1455 of yacc.c */ -#line 6263 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6255 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_NEWDECIMAL;} +#line 25227 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 736: - -/* Line 1455 of yacc.c */ -#line 6265 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6257 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_ENUM; } +#line 25233 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 737: - -/* Line 1455 of yacc.c */ -#line 6267 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6259 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_SET; } +#line 25239 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 738: - -/* Line 1455 of yacc.c */ -#line 6269 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6261 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_MEDIUM_BLOB; } +#line 25245 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 739: - -/* Line 1455 of yacc.c */ -#line 6271 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6263 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_LONGLONG; Lex->last_field->flags|= (AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNSIGNED_FLAG | UNIQUE_FLAG); } +#line 25255 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 740: - -/* Line 1455 of yacc.c */ -#line 6279 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6271 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.geom_type)= Field::GEOM_GEOMETRY; } +#line 25261 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 741: - -/* Line 1455 of yacc.c */ -#line 6280 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6272 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.geom_type)= Field::GEOM_GEOMETRYCOLLECTION; } +#line 25267 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 742: - -/* Line 1455 of yacc.c */ -#line 6282 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6274 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length= const_cast(STRINGIFY_ARG (MAX_LEN_GEOM_POINT_FIELD)); (yyval.geom_type)= Field::GEOM_POINT; } +#line 25277 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 743: - -/* Line 1455 of yacc.c */ -#line 6287 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6279 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.geom_type)= Field::GEOM_MULTIPOINT; } +#line 25283 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 744: - -/* Line 1455 of yacc.c */ -#line 6288 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6280 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.geom_type)= Field::GEOM_LINESTRING; } +#line 25289 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 745: - -/* Line 1455 of yacc.c */ -#line 6289 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6281 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.geom_type)= Field::GEOM_MULTILINESTRING; } +#line 25295 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 746: - -/* Line 1455 of yacc.c */ -#line 6290 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6282 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.geom_type)= Field::GEOM_POLYGON; } +#line 25301 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 747: - -/* Line 1455 of yacc.c */ -#line 6291 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6283 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.geom_type)= Field::GEOM_MULTIPOLYGON; } +#line 25307 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 748: - -/* Line 1455 of yacc.c */ -#line 6295 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6287 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25313 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 749: - -/* Line 1455 of yacc.c */ -#line 6299 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6291 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25319 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 750: - -/* Line 1455 of yacc.c */ -#line 6300 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6292 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25325 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 751: - -/* Line 1455 of yacc.c */ -#line 6304 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6296 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25331 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 752: - -/* Line 1455 of yacc.c */ -#line 6305 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6297 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25337 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 753: - -/* Line 1455 of yacc.c */ -#line 6309 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6301 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25343 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 754: - -/* Line 1455 of yacc.c */ -#line 6310 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6302 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25349 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 755: - -/* Line 1455 of yacc.c */ -#line 6311 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6303 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25355 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 756: - -/* Line 1455 of yacc.c */ -#line 6312 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6304 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25361 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 757: - -/* Line 1455 of yacc.c */ -#line 6313 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6305 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25367 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 758: - -/* Line 1455 of yacc.c */ -#line 6317 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6309 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_LONG; } +#line 25373 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 759: - -/* Line 1455 of yacc.c */ -#line 6318 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6310 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_TINY; } +#line 25379 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 760: - -/* Line 1455 of yacc.c */ -#line 6319 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6311 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_SHORT; } +#line 25385 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 761: - -/* Line 1455 of yacc.c */ -#line 6320 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6312 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_INT24; } +#line 25391 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 762: - -/* Line 1455 of yacc.c */ -#line 6321 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6313 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_LONGLONG; } +#line 25397 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 763: - -/* Line 1455 of yacc.c */ -#line 6326 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6318 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)= thd->variables.sql_mode & MODE_REAL_AS_FLOAT ? MYSQL_TYPE_FLOAT : MYSQL_TYPE_DOUBLE; } +#line 25406 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 764: - -/* Line 1455 of yacc.c */ -#line 6331 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6323 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_DOUBLE; } +#line 25412 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 765: - -/* Line 1455 of yacc.c */ -#line 6333 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6325 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.field_type)=MYSQL_TYPE_DOUBLE; } +#line 25418 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 766: - -/* Line 1455 of yacc.c */ -#line 6338 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6330 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->srid= 0; } +#line 25424 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 767: - -/* Line 1455 of yacc.c */ -#line 6341 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6333 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->last_field->srid=atoi((yyvsp[(3) - (3)].lex_str).str); + Lex->last_field->srid=atoi((yyvsp[0].lex_str).str); } +#line 25432 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 768: - -/* Line 1455 of yacc.c */ -#line 6348 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6340 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->dec=Lex->length= (char*)0; } +#line 25438 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 769: - -/* Line 1455 of yacc.c */ -#line 6350 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6342 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->dec= (char*)0; } +#line 25444 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 770: - -/* Line 1455 of yacc.c */ -#line 6352 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6344 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25450 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 771: - -/* Line 1455 of yacc.c */ -#line 6357 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6349 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->length=(yyvsp[(2) - (5)].lex_str).str; - lex->dec=(yyvsp[(4) - (5)].lex_str).str; + lex->length=(yyvsp[-3].lex_str).str; + lex->dec=(yyvsp[-1].lex_str).str; } +#line 25460 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 772: - -/* Line 1455 of yacc.c */ -#line 6365 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6357 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25466 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 773: - -/* Line 1455 of yacc.c */ -#line 6366 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6358 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25472 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 774: - -/* Line 1455 of yacc.c */ -#line 6370 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6362 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25478 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 775: - -/* Line 1455 of yacc.c */ -#line 6371 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6363 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25484 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 776: - -/* Line 1455 of yacc.c */ -#line 6375 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6367 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25490 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 777: - -/* Line 1455 of yacc.c */ -#line 6376 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6368 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->flags|= UNSIGNED_FLAG;} +#line 25496 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 778: - -/* Line 1455 of yacc.c */ -#line 6377 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6369 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->flags|= UNSIGNED_FLAG | ZEROFILL_FLAG; } +#line 25502 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 779: - -/* Line 1455 of yacc.c */ -#line 6381 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } +#line 6373 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->length= (yyvsp[-1].lex_str).str; } +#line 25508 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 780: - -/* Line 1455 of yacc.c */ -#line 6382 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } +#line 6374 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->length= (yyvsp[-1].lex_str).str; } +#line 25514 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 781: - -/* Line 1455 of yacc.c */ -#line 6383 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } +#line 6375 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->length= (yyvsp[-1].lex_str).str; } +#line 25520 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 782: - -/* Line 1455 of yacc.c */ -#line 6384 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->length= (yyvsp[(2) - (3)].lex_str).str; } +#line 6376 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->length= (yyvsp[-1].lex_str).str; } +#line 25526 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 783: - -/* Line 1455 of yacc.c */ -#line 6387 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6379 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->length=(char*) 0; /* use default length */ } +#line 25532 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 784: - -/* Line 1455 of yacc.c */ -#line 6388 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6380 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 25538 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 785: - -/* Line 1455 of yacc.c */ -#line 6392 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6384 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25544 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 786: - -/* Line 1455 of yacc.c */ -#line 6393 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6385 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25550 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 787: - -/* Line 1455 of yacc.c */ -#line 6397 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6389 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25556 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 788: - -/* Line 1455 of yacc.c */ -#line 6398 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6390 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25562 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 789: - -/* Line 1455 of yacc.c */ -#line 6402 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6394 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25568 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 791: - -/* Line 1455 of yacc.c */ -#line 6407 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6399 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->flags&= ~ NOT_NULL_FLAG; } +#line 25574 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 792: - -/* Line 1455 of yacc.c */ -#line 6408 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6400 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->flags|= NOT_NULL_FLAG; } +#line 25580 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 793: - -/* Line 1455 of yacc.c */ -#line 6409 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_field->def= (yyvsp[(2) - (2)].item); } +#line 6401 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_field->def= (yyvsp[0].item); } +#line 25586 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 794: - -/* Line 1455 of yacc.c */ -#line 6411 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6403 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *item= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[(4) - (4)].num)); + Item *item= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[0].num)); if (item == NULL) MYSQL_YYABORT; Lex->last_field->on_update= item; } +#line 25597 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 795: - -/* Line 1455 of yacc.c */ -#line 6417 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6409 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_field->flags|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG; } +#line 25603 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 796: - -/* Line 1455 of yacc.c */ -#line 6419 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6411 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->last_field->flags|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG; lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; } +#line 25613 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 797: - -/* Line 1455 of yacc.c */ -#line 6425 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6417 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->last_field->flags|= PRI_KEY_FLAG | NOT_NULL_FLAG; lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; } +#line 25623 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 798: - -/* Line 1455 of yacc.c */ -#line 6431 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6423 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->last_field->flags|= UNIQUE_FLAG; lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; } +#line 25633 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 799: - -/* Line 1455 of yacc.c */ -#line 6437 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6429 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->last_field->flags|= UNIQUE_KEY_FLAG; lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; } +#line 25643 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 800: - -/* Line 1455 of yacc.c */ -#line 6442 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_field->comment= (yyvsp[(2) - (2)].lex_str); } +#line 6434 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_field->comment= (yyvsp[0].lex_str); } +#line 25649 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 801: - -/* Line 1455 of yacc.c */ -#line 6444 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6436 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->charset && !my_charset_same(Lex->charset,(yyvsp[(2) - (2)].charset))) + if (Lex->charset && !my_charset_same(Lex->charset,(yyvsp[0].charset))) my_yyabort_error((ER_COLLATION_CHARSET_MISMATCH, MYF(0), - (yyvsp[(2) - (2)].charset)->name,Lex->charset->csname)); - Lex->last_field->charset= (yyvsp[(2) - (2)].charset); + (yyvsp[0].charset)->name,Lex->charset->csname)); + Lex->last_field->charset= (yyvsp[0].charset); } +#line 25660 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 802: - -/* Line 1455 of yacc.c */ -#line 6451 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6443 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(3) - (3)].lex_str).length > ENGINE_OPTION_MAX_LENGTH) - my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); + if ((yyvsp[0].lex_str).length > ENGINE_OPTION_MAX_LENGTH) + my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[-2].lex_str).str)); new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), true, &Lex->last_field->option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].lex_str), true, &Lex->last_field->option_list, &Lex->option_list_last); } +#line 25672 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 803: - -/* Line 1455 of yacc.c */ -#line 6459 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6451 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(3) - (3)].lex_str).length > ENGINE_OPTION_MAX_LENGTH) - my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); + if ((yyvsp[0].lex_str).length > ENGINE_OPTION_MAX_LENGTH) + my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[-2].lex_str).str)); new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), false, &Lex->last_field->option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].lex_str), false, &Lex->last_field->option_list, &Lex->option_list_last); } +#line 25684 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 804: - -/* Line 1455 of yacc.c */ -#line 6467 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6459 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].ulonglong_number), &Lex->last_field->option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].ulonglong_number), &Lex->last_field->option_list, &Lex->option_list_last, thd->mem_root); } +#line 25694 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 805: - -/* Line 1455 of yacc.c */ -#line 6473 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6465 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), &Lex->last_field->option_list, &Lex->option_list_last); + engine_option_value((yyvsp[-2].lex_str), &Lex->last_field->option_list, &Lex->option_list_last); } +#line 25703 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 806: - -/* Line 1455 of yacc.c */ -#line 6482 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6474 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.field_type)= (yyvsp[(1) - (2)].field_type); + (yyval.field_type)= (yyvsp[-1].field_type); - if ((yyvsp[(2) - (2)].charset)) + if ((yyvsp[0].charset)) { - if (!(Lex->charset= merge_charset_and_collation(Lex->charset, (yyvsp[(2) - (2)].charset)))) + if (!(Lex->charset= merge_charset_and_collation(Lex->charset, (yyvsp[0].charset)))) MYSQL_YYABORT; } - Lex->set_last_field_type((yyvsp[(1) - (2)].field_type)); + Lex->set_last_field_type((yyvsp[-1].field_type)); } +#line 25718 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 807: - -/* Line 1455 of yacc.c */ -#line 6497 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6489 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[(2) - (2)].num)); + (yyval.item)= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[0].num)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 25728 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 808: - -/* Line 1455 of yacc.c */ -#line 6503 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)=(yyvsp[(1) - (1)].item); } +#line 6495 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)=(yyvsp[0].item); } +#line 25734 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 809: - -/* Line 1455 of yacc.c */ -#line 6507 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6499 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25740 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 810: - -/* Line 1455 of yacc.c */ -#line 6508 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6500 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25746 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 811: - -/* Line 1455 of yacc.c */ -#line 6513 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6505 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyval.charset)=get_charset_by_csname((yyvsp[(1) - (1)].lex_str).str,MY_CS_PRIMARY,MYF(0)))) - my_yyabort_error((ER_UNKNOWN_CHARACTER_SET, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + if (!((yyval.charset)=get_charset_by_csname((yyvsp[0].lex_str).str,MY_CS_PRIMARY,MYF(0)))) + my_yyabort_error((ER_UNKNOWN_CHARACTER_SET, MYF(0), (yyvsp[0].lex_str).str)); } +#line 25755 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 812: - -/* Line 1455 of yacc.c */ -#line 6517 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6509 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)= &my_charset_bin; } +#line 25761 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 813: - -/* Line 1455 of yacc.c */ -#line 6521 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.charset)=(yyvsp[(1) - (1)].charset); } +#line 6513 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.charset)=(yyvsp[0].charset); } +#line 25767 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 814: - -/* Line 1455 of yacc.c */ -#line 6522 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6514 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)=NULL; } +#line 25773 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 815: - -/* Line 1455 of yacc.c */ -#line 6526 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6518 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)= NULL; } +#line 25779 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 816: - -/* Line 1455 of yacc.c */ -#line 6527 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.charset)= (yyvsp[(2) - (2)].charset); } +#line 6519 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.charset)= (yyvsp[0].charset); } +#line 25785 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 817: - -/* Line 1455 of yacc.c */ -#line 6532 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6524 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyval.charset)=get_charset_by_csname((yyvsp[(1) - (1)].lex_str).str,MY_CS_PRIMARY,MYF(0))) && - !((yyval.charset)=get_old_charset_by_name((yyvsp[(1) - (1)].lex_str).str))) - my_yyabort_error((ER_UNKNOWN_CHARACTER_SET, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + if (!((yyval.charset)=get_charset_by_csname((yyvsp[0].lex_str).str,MY_CS_PRIMARY,MYF(0))) && + !((yyval.charset)=get_old_charset_by_name((yyvsp[0].lex_str).str))) + my_yyabort_error((ER_UNKNOWN_CHARACTER_SET, MYF(0), (yyvsp[0].lex_str).str)); } +#line 25795 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 818: - -/* Line 1455 of yacc.c */ -#line 6537 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6529 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)= &my_charset_bin; } +#line 25801 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 819: - -/* Line 1455 of yacc.c */ -#line 6541 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.charset)=(yyvsp[(1) - (1)].charset); } +#line 6533 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.charset)=(yyvsp[0].charset); } +#line 25807 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 820: - -/* Line 1455 of yacc.c */ -#line 6542 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6534 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)=NULL; } +#line 25813 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 821: - -/* Line 1455 of yacc.c */ -#line 6547 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6539 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyval.charset)= mysqld_collation_get_by_name((yyvsp[(1) - (1)].lex_str).str))) + if (!((yyval.charset)= mysqld_collation_get_by_name((yyvsp[0].lex_str).str))) MYSQL_YYABORT; } +#line 25822 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 822: - -/* Line 1455 of yacc.c */ -#line 6554 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6546 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)=NULL; } +#line 25828 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 823: - -/* Line 1455 of yacc.c */ -#line 6555 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.charset)=(yyvsp[(2) - (2)].charset); } +#line 6547 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.charset)=(yyvsp[0].charset); } +#line 25834 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 824: - -/* Line 1455 of yacc.c */ -#line 6559 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.charset)=(yyvsp[(1) - (1)].charset); } +#line 6551 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.charset)=(yyvsp[0].charset); } +#line 25840 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 825: - -/* Line 1455 of yacc.c */ -#line 6560 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6552 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)=NULL; } +#line 25846 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 826: - -/* Line 1455 of yacc.c */ -#line 6564 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6556 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25852 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 827: - -/* Line 1455 of yacc.c */ -#line 6565 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6557 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 25858 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 828: - -/* Line 1455 of yacc.c */ -#line 6569 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.charset)= (yyvsp[(2) - (2)].charset); } +#line 6561 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.charset)= (yyvsp[0].charset); } +#line 25864 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 829: - -/* Line 1455 of yacc.c */ -#line 6570 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6562 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.charset)= &my_charset_latin1; } +#line 25870 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 830: - -/* Line 1455 of yacc.c */ -#line 6572 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6564 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!((yyval.charset)= get_charset_by_csname("ucs2", MY_CS_PRIMARY,MYF(0)))) my_yyabort_error((ER_UNKNOWN_CHARACTER_SET, MYF(0), "ucs2")); } +#line 25879 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 831: - -/* Line 1455 of yacc.c */ -#line 6579 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6571 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { bincmp_collation(NULL, false); } +#line 25885 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 832: - -/* Line 1455 of yacc.c */ -#line 6580 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6572 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { bincmp_collation(&my_charset_bin, false); } +#line 25891 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 833: - -/* Line 1455 of yacc.c */ -#line 6581 "/home/buildbot/git/sql/sql_yacc.yy" - { bincmp_collation((yyvsp[(1) - (2)].charset), (yyvsp[(2) - (2)].num)); } +#line 6573 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { bincmp_collation((yyvsp[-1].charset), (yyvsp[0].num)); } +#line 25897 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 834: - -/* Line 1455 of yacc.c */ -#line 6582 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6574 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { bincmp_collation(NULL, true); } +#line 25903 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 835: - -/* Line 1455 of yacc.c */ -#line 6583 "/home/buildbot/git/sql/sql_yacc.yy" - { bincmp_collation((yyvsp[(2) - (2)].charset), true); } +#line 6575 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { bincmp_collation((yyvsp[0].charset), true); } +#line 25909 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 836: - -/* Line 1455 of yacc.c */ -#line 6587 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6579 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= false; } +#line 25915 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 837: - -/* Line 1455 of yacc.c */ -#line 6588 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6580 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= true; } +#line 25921 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 838: - -/* Line 1455 of yacc.c */ -#line 6593 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6585 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(2) - (2)].ulong_num) == 0) + if ((yyvsp[0].ulong_num) == 0) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } } +#line 25933 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 839: - -/* Line 1455 of yacc.c */ -#line 6601 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(2) - (4)].ulong_num); } +#line 6593 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[-2].ulong_num); } +#line 25939 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 840: - -/* Line 1455 of yacc.c */ -#line 6605 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6597 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= 0; } +#line 25945 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 841: - -/* Line 1455 of yacc.c */ -#line 6606 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6598 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= 1 << MY_STRXFRM_DESC_SHIFT; } +#line 25951 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 842: - -/* Line 1455 of yacc.c */ -#line 6610 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6602 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= 1 << MY_STRXFRM_REVERSE_SHIFT; } +#line 25957 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 843: - -/* Line 1455 of yacc.c */ -#line 6613 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6605 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= 0; } +#line 25963 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 844: - -/* Line 1455 of yacc.c */ -#line 6614 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } +#line 6606 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[0].ulong_num); } +#line 25969 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 845: - -/* Line 1455 of yacc.c */ -#line 6615 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(1) - (2)].ulong_num) | (yyvsp[(2) - (2)].ulong_num); } +#line 6607 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[-1].ulong_num) | (yyvsp[0].ulong_num); } +#line 25975 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 846: - -/* Line 1455 of yacc.c */ -#line 6616 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num) ; } +#line 6608 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[0].ulong_num) ; } +#line 25981 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 847: - -/* Line 1455 of yacc.c */ -#line 6621 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6613 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num) < 1 ? 1 : ((yyvsp[(1) - (1)].ulong_num) > MY_STRXFRM_NLEVELS ? MY_STRXFRM_NLEVELS : (yyvsp[(1) - (1)].ulong_num)); + (yyval.ulong_num)= (yyvsp[0].ulong_num) < 1 ? 1 : ((yyvsp[0].ulong_num) > MY_STRXFRM_NLEVELS ? MY_STRXFRM_NLEVELS : (yyvsp[0].ulong_num)); (yyval.ulong_num)--; } +#line 25990 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 848: - -/* Line 1455 of yacc.c */ -#line 6629 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6621 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.ulong_num)= (1 | (yyvsp[(2) - (2)].ulong_num)) << (yyvsp[(1) - (2)].ulong_num); + (yyval.ulong_num)= (1 | (yyvsp[0].ulong_num)) << (yyvsp[-1].ulong_num); } +#line 25998 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 849: - -/* Line 1455 of yacc.c */ -#line 6635 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } +#line 6627 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[0].ulong_num); } +#line 26004 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 850: - -/* Line 1455 of yacc.c */ -#line 6636 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)|= (yyvsp[(3) - (3)].ulong_num); } +#line 6628 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)|= (yyvsp[0].ulong_num); } +#line 26010 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 851: - -/* Line 1455 of yacc.c */ -#line 6641 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6633 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - uint start= (yyvsp[(1) - (3)].ulong_num); - uint end= (yyvsp[(3) - (3)].ulong_num); + uint start= (yyvsp[-2].ulong_num); + uint end= (yyvsp[0].ulong_num); for ((yyval.ulong_num)= 0; start <= end; start++) (yyval.ulong_num)|= (1 << start); } +#line 26021 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 852: - -/* Line 1455 of yacc.c */ -#line 6650 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } +#line 6642 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[0].ulong_num); } +#line 26027 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 853: - -/* Line 1455 of yacc.c */ -#line 6651 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(1) - (1)].ulong_num); } +#line 6643 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[0].ulong_num); } +#line 26033 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 854: - -/* Line 1455 of yacc.c */ -#line 6655 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6647 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ulong_num)= 0; } +#line 26039 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 855: - -/* Line 1455 of yacc.c */ -#line 6656 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (yyvsp[(2) - (2)].ulong_num); } +#line 6648 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (yyvsp[0].ulong_num); } +#line 26045 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 858: - -/* Line 1455 of yacc.c */ -#line 6670 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6662 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.table)=(yyvsp[(2) - (5)].table); + (yyval.table)=(yyvsp[-3].table); } +#line 26053 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 859: - -/* Line 1455 of yacc.c */ -#line 6677 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6669 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ref_list.empty(); } +#line 26059 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 861: - -/* Line 1455 of yacc.c */ -#line 6683 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6675 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Key_part_spec *key= new (thd->mem_root) Key_part_spec((yyvsp[(3) - (3)].lex_str), 0); + Key_part_spec *key= new (thd->mem_root) Key_part_spec((yyvsp[0].lex_str), 0); if (key == NULL) MYSQL_YYABORT; Lex->ref_list.push_back(key, thd->mem_root); } +#line 26070 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 862: - -/* Line 1455 of yacc.c */ -#line 6690 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6682 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Key_part_spec *key= new (thd->mem_root) Key_part_spec((yyvsp[(1) - (1)].lex_str), 0); + Key_part_spec *key= new (thd->mem_root) Key_part_spec((yyvsp[0].lex_str), 0); if (key == NULL) MYSQL_YYABORT; LEX *lex= Lex; lex->ref_list.empty(); lex->ref_list.push_back(key, thd->mem_root); } +#line 26083 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 863: - -/* Line 1455 of yacc.c */ -#line 6702 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6694 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->fk_match_option= Foreign_key::FK_MATCH_UNDEF; } +#line 26089 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 864: - -/* Line 1455 of yacc.c */ -#line 6704 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6696 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->fk_match_option= Foreign_key::FK_MATCH_FULL; } +#line 26095 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 865: - -/* Line 1455 of yacc.c */ -#line 6706 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6698 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->fk_match_option= Foreign_key::FK_MATCH_PARTIAL; } +#line 26101 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 866: - -/* Line 1455 of yacc.c */ -#line 6708 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6700 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->fk_match_option= Foreign_key::FK_MATCH_SIMPLE; } +#line 26107 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 867: - -/* Line 1455 of yacc.c */ -#line 6713 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6705 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF; lex->fk_delete_opt= Foreign_key::FK_OPTION_UNDEF; } +#line 26117 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 868: - -/* Line 1455 of yacc.c */ -#line 6719 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6711 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->fk_update_opt= (yyvsp[(3) - (3)].m_fk_option); + lex->fk_update_opt= (yyvsp[0].m_fk_option); lex->fk_delete_opt= Foreign_key::FK_OPTION_UNDEF; } +#line 26127 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 869: - -/* Line 1455 of yacc.c */ -#line 6725 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6717 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->fk_update_opt= Foreign_key::FK_OPTION_UNDEF; - lex->fk_delete_opt= (yyvsp[(3) - (3)].m_fk_option); + lex->fk_delete_opt= (yyvsp[0].m_fk_option); } +#line 26137 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 870: - -/* Line 1455 of yacc.c */ -#line 6732 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6724 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->fk_update_opt= (yyvsp[(3) - (6)].m_fk_option); - lex->fk_delete_opt= (yyvsp[(6) - (6)].m_fk_option); + lex->fk_update_opt= (yyvsp[-3].m_fk_option); + lex->fk_delete_opt= (yyvsp[0].m_fk_option); } +#line 26147 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 871: - -/* Line 1455 of yacc.c */ -#line 6739 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6731 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->fk_update_opt= (yyvsp[(6) - (6)].m_fk_option); - lex->fk_delete_opt= (yyvsp[(3) - (6)].m_fk_option); + lex->fk_update_opt= (yyvsp[0].m_fk_option); + lex->fk_delete_opt= (yyvsp[-3].m_fk_option); } +#line 26157 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 872: - -/* Line 1455 of yacc.c */ -#line 6747 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6739 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_fk_option)= Foreign_key::FK_OPTION_RESTRICT; } +#line 26163 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 873: - -/* Line 1455 of yacc.c */ -#line 6748 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6740 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_fk_option)= Foreign_key::FK_OPTION_CASCADE; } +#line 26169 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 874: - -/* Line 1455 of yacc.c */ -#line 6749 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6741 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_fk_option)= Foreign_key::FK_OPTION_SET_NULL; } +#line 26175 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 875: - -/* Line 1455 of yacc.c */ -#line 6750 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6742 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_fk_option)= Foreign_key::FK_OPTION_NO_ACTION; } +#line 26181 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 876: - -/* Line 1455 of yacc.c */ -#line 6751 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6743 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_fk_option)= Foreign_key::FK_OPTION_DEFAULT; } +#line 26187 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 877: - -/* Line 1455 of yacc.c */ -#line 6755 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6747 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_type)= Key::PRIMARY; } +#line 26193 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 878: - -/* Line 1455 of yacc.c */ -#line 6756 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6748 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_type)= Key::UNIQUE; } +#line 26199 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 879: - -/* Line 1455 of yacc.c */ -#line 6760 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6752 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26205 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 880: - -/* Line 1455 of yacc.c */ -#line 6761 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6753 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26211 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 881: - -/* Line 1455 of yacc.c */ -#line 6765 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6757 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26217 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 883: - -/* Line 1455 of yacc.c */ -#line 6770 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6762 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26223 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 884: - -/* Line 1455 of yacc.c */ -#line 6771 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6763 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26229 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 885: - -/* Line 1455 of yacc.c */ -#line 6772 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6764 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26235 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 886: - -/* Line 1455 of yacc.c */ -#line 6776 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6768 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_type)= Key::MULTIPLE; } +#line 26241 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 887: - -/* Line 1455 of yacc.c */ -#line 6777 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6769 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_type)= Key::UNIQUE; } +#line 26247 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 888: - -/* Line 1455 of yacc.c */ -#line 6781 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6773 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_type)= Key::FULLTEXT;} +#line 26253 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 889: - -/* Line 1455 of yacc.c */ -#line 6786 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6778 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { #ifdef HAVE_SPATIAL (yyval.key_type)= Key::SPATIAL; @@ -28130,282 +26262,248 @@ sym_group_geom.needed_define)); #endif } +#line 26266 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 890: - -/* Line 1455 of yacc.c */ -#line 6797 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6789 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26272 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 891: - -/* Line 1455 of yacc.c */ -#line 6798 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6790 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_key->option_list= Lex->option_list; } +#line 26278 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 892: - -/* Line 1455 of yacc.c */ -#line 6802 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6794 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26284 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 893: - -/* Line 1455 of yacc.c */ -#line 6803 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6795 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_key->option_list= Lex->option_list; } +#line 26290 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 894: - -/* Line 1455 of yacc.c */ -#line 6807 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6799 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26296 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 895: - -/* Line 1455 of yacc.c */ -#line 6808 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6800 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->last_key->option_list= Lex->option_list; } +#line 26302 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 902: - -/* Line 1455 of yacc.c */ -#line 6827 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6819 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_alg)= HA_KEY_ALG_UNDEF; } +#line 26308 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 903: - -/* Line 1455 of yacc.c */ -#line 6828 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.key_alg)= (yyvsp[(2) - (2)].key_alg); } +#line 6820 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.key_alg)= (yyvsp[0].key_alg); } +#line 26314 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 904: - -/* Line 1455 of yacc.c */ -#line 6832 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6824 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_alg)= HA_KEY_ALG_UNDEF; } +#line 26320 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 905: - -/* Line 1455 of yacc.c */ -#line 6833 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.key_alg)= (yyvsp[(2) - (2)].key_alg); } +#line 6825 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.key_alg)= (yyvsp[0].key_alg); } +#line 26326 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 906: - -/* Line 1455 of yacc.c */ -#line 6834 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.key_alg)= (yyvsp[(2) - (2)].key_alg); } +#line 6826 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.key_alg)= (yyvsp[0].key_alg); } +#line 26332 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 907: - -/* Line 1455 of yacc.c */ -#line 6838 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_key->key_create_info.algorithm= (yyvsp[(2) - (2)].key_alg); } +#line 6830 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_key->key_create_info.algorithm= (yyvsp[0].key_alg); } +#line 26338 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 908: - -/* Line 1455 of yacc.c */ -#line 6840 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_key->key_create_info.algorithm= (yyvsp[(2) - (2)].key_alg); } +#line 6832 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_key->key_create_info.algorithm= (yyvsp[0].key_alg); } +#line 26344 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 909: - -/* Line 1455 of yacc.c */ -#line 6845 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_key->key_create_info.block_size= (yyvsp[(3) - (3)].ulong_num); } +#line 6837 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_key->key_create_info.block_size= (yyvsp[0].ulong_num); } +#line 26350 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 910: - -/* Line 1455 of yacc.c */ -#line 6847 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_key->key_create_info.comment= (yyvsp[(2) - (2)].lex_str); } +#line 6839 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_key->key_create_info.comment= (yyvsp[0].lex_str); } +#line 26356 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 911: - -/* Line 1455 of yacc.c */ -#line 6849 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6841 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(3) - (3)].lex_str).length > ENGINE_OPTION_MAX_LENGTH) - my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); + if ((yyvsp[0].lex_str).length > ENGINE_OPTION_MAX_LENGTH) + my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[-2].lex_str).str)); new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), true, &Lex->option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].lex_str), true, &Lex->option_list, &Lex->option_list_last); } +#line 26368 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 912: - -/* Line 1455 of yacc.c */ -#line 6857 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6849 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(3) - (3)].lex_str).length > ENGINE_OPTION_MAX_LENGTH) - my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); + if ((yyvsp[0].lex_str).length > ENGINE_OPTION_MAX_LENGTH) + my_yyabort_error((ER_VALUE_TOO_LONG, MYF(0), (yyvsp[-2].lex_str).str)); new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), false, &Lex->option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].lex_str), false, &Lex->option_list, &Lex->option_list_last); } +#line 26380 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 913: - -/* Line 1455 of yacc.c */ -#line 6865 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6857 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].ulonglong_number), &Lex->option_list, + engine_option_value((yyvsp[-2].lex_str), (yyvsp[0].ulonglong_number), &Lex->option_list, &Lex->option_list_last, thd->mem_root); } +#line 26390 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 914: - -/* Line 1455 of yacc.c */ -#line 6871 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6863 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { new (thd->mem_root) - engine_option_value((yyvsp[(1) - (3)].lex_str), &Lex->option_list, &Lex->option_list_last); + engine_option_value((yyvsp[-2].lex_str), &Lex->option_list, &Lex->option_list_last); } +#line 26399 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 919: - -/* Line 1455 of yacc.c */ -#line 6889 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6881 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (plugin_is_ready(&(yyvsp[(3) - (3)].lex_str), MYSQL_FTPARSER_PLUGIN)) - Lex->last_key->key_create_info.parser_name= (yyvsp[(3) - (3)].lex_str); + if (plugin_is_ready(&(yyvsp[0].lex_str), MYSQL_FTPARSER_PLUGIN)) + Lex->last_key->key_create_info.parser_name= (yyvsp[0].lex_str); else - my_yyabort_error((ER_FUNCTION_NOT_DEFINED, MYF(0), (yyvsp[(3) - (3)].lex_str).str)); + my_yyabort_error((ER_FUNCTION_NOT_DEFINED, MYF(0), (yyvsp[0].lex_str).str)); } +#line 26410 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 920: - -/* Line 1455 of yacc.c */ -#line 6898 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6890 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_alg)= HA_KEY_ALG_BTREE; } +#line 26416 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 921: - -/* Line 1455 of yacc.c */ -#line 6899 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6891 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_alg)= HA_KEY_ALG_RTREE; } +#line 26422 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 922: - -/* Line 1455 of yacc.c */ -#line 6900 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6892 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.key_alg)= HA_KEY_ALG_HASH; } +#line 26428 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 923: - -/* Line 1455 of yacc.c */ -#line 6905 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6897 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->last_key->columns.push_back((yyvsp[(3) - (4)].key_part), thd->mem_root); + Lex->last_key->columns.push_back((yyvsp[-1].key_part), thd->mem_root); } +#line 26436 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 924: - -/* Line 1455 of yacc.c */ -#line 6909 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6901 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->last_key->columns.push_back((yyvsp[(1) - (2)].key_part), thd->mem_root); + Lex->last_key->columns.push_back((yyvsp[-1].key_part), thd->mem_root); } +#line 26444 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 925: - -/* Line 1455 of yacc.c */ -#line 6916 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6908 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.key_part)= new (thd->mem_root) Key_part_spec((yyvsp[(1) - (1)].lex_str), 0); + (yyval.key_part)= new (thd->mem_root) Key_part_spec((yyvsp[0].lex_str), 0); if ((yyval.key_part) == NULL) MYSQL_YYABORT; } +#line 26454 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 926: - -/* Line 1455 of yacc.c */ -#line 6922 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6914 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - int key_part_len= atoi((yyvsp[(3) - (4)].lex_str).str); + int key_part_len= atoi((yyvsp[-1].lex_str).str); if (!key_part_len) - my_yyabort_error((ER_KEY_PART_0, MYF(0), (yyvsp[(1) - (4)].lex_str).str)); - (yyval.key_part)= new (thd->mem_root) Key_part_spec((yyvsp[(1) - (4)].lex_str), (uint) key_part_len); + my_yyabort_error((ER_KEY_PART_0, MYF(0), (yyvsp[-3].lex_str).str)); + (yyval.key_part)= new (thd->mem_root) Key_part_spec((yyvsp[-3].lex_str), (uint) key_part_len); if ((yyval.key_part) == NULL) MYSQL_YYABORT; } +#line 26467 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 927: - -/* Line 1455 of yacc.c */ -#line 6933 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6925 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str)= null_lex_str; } +#line 26473 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 928: - -/* Line 1455 of yacc.c */ -#line 6934 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } +#line 6926 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)= (yyvsp[0].lex_str); } +#line 26479 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 929: - -/* Line 1455 of yacc.c */ -#line 6938 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6930 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str)= null_lex_str; } +#line 26485 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 930: - -/* Line 1455 of yacc.c */ -#line 6939 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)= (yyvsp[(2) - (2)].lex_str); } +#line 6931 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)= (yyvsp[0].lex_str); } +#line 26491 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 931: - -/* Line 1455 of yacc.c */ -#line 6944 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_field->interval_list.push_back((yyvsp[(1) - (1)].string), thd->mem_root); } +#line 6936 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_field->interval_list.push_back((yyvsp[0].string), thd->mem_root); } +#line 26497 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 932: - -/* Line 1455 of yacc.c */ -#line 6946 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->last_field->interval_list.push_back((yyvsp[(3) - (3)].string), thd->mem_root); } +#line 6938 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->last_field->interval_list.push_back((yyvsp[0].string), thd->mem_root); } +#line 26503 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 933: - -/* Line 1455 of yacc.c */ -#line 6954 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6946 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->name= null_lex_str; Lex->only_view= FALSE; @@ -28419,14 +26517,13 @@ Lex->create_info.storage_media= HA_SM_DEFAULT; DBUG_ASSERT(!Lex->m_sql_cmd); } +#line 26521 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 934: - -/* Line 1455 of yacc.c */ -#line 6968 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6960 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Lex->select_lex.add_table_to_list(thd, (yyvsp[(5) - (5)].table), NULL, + if (!Lex->select_lex.add_table_to_list(thd, (yyvsp[0].table), NULL, TL_OPTION_UPDATING, TL_READ_NO_INSERT, MDL_SHARED_UPGRADABLE)) @@ -28434,12 +26531,11 @@ Lex->select_lex.db= (Lex->select_lex.table_list.first)->db; Lex->create_last_non_select_table= Lex->last_table(); } +#line 26535 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 935: - -/* Line 1455 of yacc.c */ -#line 6978 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6970 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!Lex->m_sql_cmd) { @@ -28449,49 +26545,45 @@ MYSQL_YYABORT; } } +#line 26549 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 936: - -/* Line 1455 of yacc.c */ -#line 6988 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6980 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.default_table_charset= NULL; Lex->create_info.used_fields= 0; } +#line 26558 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 937: - -/* Line 1455 of yacc.c */ -#line 6993 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6985 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command=SQLCOM_ALTER_DB; - lex->name= (yyvsp[(3) - (5)].lex_str); + lex->name= (yyvsp[-2].lex_str); if (lex->name.str == NULL && lex->copy_db_to(&lex->name.str, &lex->name.length)) MYSQL_YYABORT; } +#line 26571 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 938: - -/* Line 1455 of yacc.c */ -#line 7002 "/home/buildbot/git/sql/sql_yacc.yy" +#line 6994 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->sphead) my_yyabort_error((ER_SP_NO_DROP_SP, MYF(0), "DATABASE")); lex->sql_command= SQLCOM_ALTER_DB_UPGRADE; - lex->name= (yyvsp[(3) - (7)].lex_str); + lex->name= (yyvsp[-4].lex_str); } +#line 26583 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 939: - -/* Line 1455 of yacc.c */ -#line 7010 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7002 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -28499,24 +26591,22 @@ my_yyabort_error((ER_SP_NO_DROP_SP, MYF(0), "PROCEDURE")); bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); } +#line 26595 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 940: - -/* Line 1455 of yacc.c */ -#line 7018 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7010 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_ALTER_PROCEDURE; - lex->spname= (yyvsp[(3) - (5)].spname); + lex->spname= (yyvsp[-2].spname); } +#line 26606 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 941: - -/* Line 1455 of yacc.c */ -#line 7025 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7017 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -28524,24 +26614,22 @@ my_yyabort_error((ER_SP_NO_DROP_SP, MYF(0), "FUNCTION")); bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); } +#line 26618 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 942: - -/* Line 1455 of yacc.c */ -#line 7033 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7025 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_ALTER_FUNCTION; - lex->spname= (yyvsp[(3) - (5)].spname); + lex->spname= (yyvsp[-2].spname); } +#line 26629 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 943: - -/* Line 1455 of yacc.c */ -#line 7040 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7032 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -28549,19 +26637,17 @@ my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "ALTER VIEW")); lex->create_view_mode= VIEW_ALTER; } +#line 26641 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 944: - -/* Line 1455 of yacc.c */ -#line 7048 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7040 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26647 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 945: - -/* Line 1455 of yacc.c */ -#line 7055 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7047 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -28570,19 +26656,17 @@ lex->create_view_algorithm= VIEW_ALGORITHM_INHERIT; lex->create_view_mode= VIEW_ALTER; } +#line 26660 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 946: - -/* Line 1455 of yacc.c */ -#line 7064 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7056 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 26666 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 947: - -/* Line 1455 of yacc.c */ -#line 7066 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7058 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* It is safe to use Lex->spname because @@ -28594,19 +26678,18 @@ if (!(Lex->event_parse_data= Event_parse_data::new_instance(thd))) MYSQL_YYABORT; - Lex->event_parse_data->identifier= (yyvsp[(5) - (5)].spname); + Lex->event_parse_data->identifier= (yyvsp[0].spname); Lex->sql_command= SQLCOM_ALTER_EVENT; - Lex->stmt_definition_begin= (yyvsp[(3) - (5)].simple_string); + Lex->stmt_definition_begin= (yyvsp[-2].simple_string); } +#line 26687 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 948: - -/* Line 1455 of yacc.c */ -#line 7087 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7079 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyvsp[(7) - (11)].num) || (yyvsp[(8) - (11)].num) || (yyvsp[(9) - (11)].num) || (yyvsp[(10) - (11)].num) || (yyvsp[(11) - (11)].num))) + if (!((yyvsp[-4].num) || (yyvsp[-3].num) || (yyvsp[-2].num) || (yyvsp[-1].num) || (yyvsp[0].num))) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; @@ -28618,147 +26701,130 @@ Lex->sql_command= SQLCOM_ALTER_EVENT; Lex->stmt_definition_end= (char*)YYLIP->get_cpp_ptr(); } +#line 26705 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 949: - -/* Line 1455 of yacc.c */ -#line 7101 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7093 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= ALTER_TABLESPACE; } +#line 26714 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 950: - -/* Line 1455 of yacc.c */ -#line 7106 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7098 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= ALTER_LOGFILE_GROUP; } +#line 26723 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 951: - -/* Line 1455 of yacc.c */ -#line 7111 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= CHANGE_FILE_TABLESPACE; } +#line 26732 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 952: - -/* Line 1455 of yacc.c */ -#line 7116 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7108 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= ALTER_ACCESS_MODE_TABLESPACE; } +#line 26741 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 953: - -/* Line 1455 of yacc.c */ -#line 7121 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7113 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_ALTER_SERVER; - lex->server_options.reset((yyvsp[(3) - (3)].lex_str)); + lex->server_options.reset((yyvsp[0].lex_str)); } +#line 26751 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 954: - -/* Line 1455 of yacc.c */ -#line 7125 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7117 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 26757 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 955: - -/* Line 1455 of yacc.c */ -#line 7129 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7121 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0;} +#line 26763 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 956: - -/* Line 1455 of yacc.c */ -#line 7130 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7122 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 26769 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 957: - -/* Line 1455 of yacc.c */ -#line 7131 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7123 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 26775 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 958: - -/* Line 1455 of yacc.c */ -#line 7132 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7124 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 26781 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 959: - -/* Line 1455 of yacc.c */ -#line 7136 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7128 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0;} +#line 26787 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 960: - -/* Line 1455 of yacc.c */ -#line 7138 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7130 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Use lex's spname to hold the new name. The original name is in the Event_parse_data object */ - Lex->spname= (yyvsp[(3) - (3)].spname); + Lex->spname= (yyvsp[0].spname); (yyval.num)= 1; } +#line 26800 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 961: - -/* Line 1455 of yacc.c */ -#line 7149 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7141 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0;} +#line 26806 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 962: - -/* Line 1455 of yacc.c */ -#line 7150 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7142 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 26812 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 963: - -/* Line 1455 of yacc.c */ -#line 7154 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7146 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str)= null_lex_str; } +#line 26818 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 964: - -/* Line 1455 of yacc.c */ -#line 7155 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } +#line 7147 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)= (yyvsp[0].lex_str); } +#line 26824 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 966: - -/* Line 1455 of yacc.c */ -#line 7161 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7153 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_discard_import_tablespace( @@ -28766,12 +26832,11 @@ if (Lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26836 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 967: - -/* Line 1455 of yacc.c */ -#line 7169 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7161 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_discard_import_tablespace( @@ -28779,37 +26844,34 @@ if (Lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26848 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 973: - -/* Line 1455 of yacc.c */ -#line 7191 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7183 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_DROP_PARTITION; DBUG_ASSERT(!Lex->if_exists()); - Lex->create_info.add((yyvsp[(3) - (4)].object_ddl_options)); + Lex->create_info.add((yyvsp[-1].object_ddl_options)); } +#line 26858 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 974: - -/* Line 1455 of yacc.c */ -#line 7198 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7190 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_info.flags|= Alter_info::ALTER_REBUILD_PARTITION; - lex->no_write_to_binlog= (yyvsp[(3) - (4)].num); + lex->no_write_to_binlog= (yyvsp[-1].num); } +#line 26868 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 975: - -/* Line 1455 of yacc.c */ -#line 7205 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7197 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; - lex->no_write_to_binlog= (yyvsp[(3) - (4)].num); + lex->no_write_to_binlog= (yyvsp[-1].num); lex->check_opt.init(); DBUG_ASSERT(!lex->m_sql_cmd); lex->m_sql_cmd= new (thd->mem_root) @@ -28817,15 +26879,14 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26883 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 977: - -/* Line 1455 of yacc.c */ -#line 7218 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7210 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; - lex->no_write_to_binlog= (yyvsp[(3) - (4)].num); + lex->no_write_to_binlog= (yyvsp[-1].num); lex->check_opt.init(); DBUG_ASSERT(!lex->m_sql_cmd); lex->m_sql_cmd= new (thd->mem_root) @@ -28833,12 +26894,11 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26898 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 978: - -/* Line 1455 of yacc.c */ -#line 7229 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7221 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->check_opt.init(); @@ -28848,15 +26908,14 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26912 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 980: - -/* Line 1455 of yacc.c */ -#line 7241 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7233 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; - lex->no_write_to_binlog= (yyvsp[(3) - (4)].num); + lex->no_write_to_binlog= (yyvsp[-1].num); lex->check_opt.init(); DBUG_ASSERT(!lex->m_sql_cmd); lex->m_sql_cmd= new (thd->mem_root) @@ -28864,24 +26923,22 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26927 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 982: - -/* Line 1455 of yacc.c */ -#line 7253 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7245 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_info.flags|= Alter_info::ALTER_COALESCE_PARTITION; - lex->no_write_to_binlog= (yyvsp[(3) - (4)].num); - lex->alter_info.num_parts= (yyvsp[(4) - (4)].ulong_num); + lex->no_write_to_binlog= (yyvsp[-1].num); + lex->alter_info.num_parts= (yyvsp[0].ulong_num); } +#line 26938 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 983: - -/* Line 1455 of yacc.c */ -#line 7260 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7252 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->check_opt.init(); @@ -28891,24 +26948,23 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26952 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 985: - -/* Line 1455 of yacc.c */ -#line 7272 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7264 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; size_t dummy; - lex->select_lex.db=(yyvsp[(6) - (7)].table)->db.str; + lex->select_lex.db=(yyvsp[-1].table)->db.str; if (lex->select_lex.db == NULL && lex->copy_db_to(&lex->select_lex.db, &dummy)) { MYSQL_YYABORT; } - lex->name= (yyvsp[(6) - (7)].table)->table; + lex->name= (yyvsp[-1].table)->table; lex->alter_info.flags|= Alter_info::ALTER_EXCHANGE_PARTITION; - if (!lex->select_lex.add_table_to_list(thd, (yyvsp[(6) - (7)].table), NULL, + if (!lex->select_lex.add_table_to_list(thd, (yyvsp[-1].table), NULL, TL_OPTION_UPDATING, TL_READ_NO_INSERT, MDL_SHARED_NO_WRITE)) @@ -28919,30 +26975,27 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 26979 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 986: - -/* Line 1455 of yacc.c */ -#line 7298 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7290 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_REMOVE_PARTITIONING; } +#line 26987 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 987: - -/* Line 1455 of yacc.c */ -#line 7305 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7297 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_ALL_PARTITION; } +#line 26995 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 989: - -/* Line 1455 of yacc.c */ -#line 7314 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7306 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->part_info= new (thd->mem_root) partition_info(); @@ -28953,41 +27006,37 @@ } lex->alter_info.flags|= Alter_info::ALTER_ADD_PARTITION; DBUG_ASSERT(!Lex->create_info.if_not_exists()); - lex->create_info.set((yyvsp[(3) - (4)].object_ddl_options)); - lex->no_write_to_binlog= (yyvsp[(4) - (4)].num); + lex->create_info.set((yyvsp[-1].object_ddl_options)); + lex->no_write_to_binlog= (yyvsp[0].num); } +#line 27013 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 990: - -/* Line 1455 of yacc.c */ -#line 7328 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7320 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27019 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 992: - -/* Line 1455 of yacc.c */ -#line 7334 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7326 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->part_info->num_parts= lex->part_info->partitions.elements; } +#line 27028 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 993: - -/* Line 1455 of yacc.c */ -#line 7339 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7331 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->part_info->num_parts= (yyvsp[(2) - (2)].ulong_num); + Lex->part_info->num_parts= (yyvsp[0].ulong_num); } +#line 27036 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 994: - -/* Line 1455 of yacc.c */ -#line 7346 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7338 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->part_info= new (thd->mem_root) partition_info(); @@ -28996,161 +27045,146 @@ mem_alloc_error(sizeof(partition_info)); MYSQL_YYABORT; } - lex->no_write_to_binlog= (yyvsp[(3) - (3)].num); + lex->no_write_to_binlog= (yyvsp[0].num); } +#line 27051 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 996: - -/* Line 1455 of yacc.c */ -#line 7361 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7353 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_TABLE_REORG; } +#line 27059 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 997: - -/* Line 1455 of yacc.c */ -#line 7365 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7357 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_REORGANIZE_PARTITION; } +#line 27067 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 998: - -/* Line 1455 of yacc.c */ -#line 7369 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7361 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { partition_info *part_info= Lex->part_info; part_info->num_parts= part_info->partitions.elements; } +#line 27076 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 999: - -/* Line 1455 of yacc.c */ -#line 7376 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7368 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27082 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1000: - -/* Line 1455 of yacc.c */ -#line 7377 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7369 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27088 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1001: - -/* Line 1455 of yacc.c */ -#line 7382 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7374 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->alter_info.partition_names.push_back((yyvsp[(1) - (1)].lex_str).str, + if (Lex->alter_info.partition_names.push_back((yyvsp[0].lex_str).str, thd->mem_root)) { mem_alloc_error(1); MYSQL_YYABORT; } } +#line 27101 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1004: - -/* Line 1455 of yacc.c */ -#line 7403 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7395 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->alter_info.flags|= Alter_info::ALTER_ADD_COLUMN; } +#line 27110 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1005: - -/* Line 1455 of yacc.c */ -#line 7411 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7403 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_last_non_select_table= Lex->last_table(); } +#line 27118 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1006: - -/* Line 1455 of yacc.c */ -#line 7415 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7407 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_last_non_select_table= Lex->last_table(); Lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX; } +#line 27127 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1007: - -/* Line 1455 of yacc.c */ -#line 7420 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7412 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_ADD_COLUMN | Alter_info::ALTER_ADD_INDEX; } +#line 27136 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1008: - -/* Line 1455 of yacc.c */ -#line 7426 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7418 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_CHANGE_COLUMN; Lex->create_last_non_select_table= Lex->last_table(); - Lex->last_field->change= (yyvsp[(4) - (6)].lex_str).str; + Lex->last_field->change= (yyvsp[-2].lex_str).str; } +#line 27146 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1009: - -/* Line 1455 of yacc.c */ -#line 7433 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7425 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_CHANGE_COLUMN; Lex->create_last_non_select_table= Lex->last_table(); Lex->last_field->change= Lex->last_field->field_name; } +#line 27156 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1010: - -/* Line 1455 of yacc.c */ -#line 7439 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7431 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Alter_drop *ad= (new (thd->mem_root) - Alter_drop(Alter_drop::COLUMN, (yyvsp[(4) - (5)].lex_str).str, (yyvsp[(3) - (5)].num))); + Alter_drop(Alter_drop::COLUMN, (yyvsp[-1].lex_str).str, (yyvsp[-2].num))); if (ad == NULL) MYSQL_YYABORT; lex->alter_info.drop_list.push_back(ad, thd->mem_root); lex->alter_info.flags|= Alter_info::ALTER_DROP_COLUMN; } +#line 27170 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1011: - -/* Line 1455 of yacc.c */ -#line 7449 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7441 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Alter_drop *ad= (new (thd->mem_root) - Alter_drop(Alter_drop::FOREIGN_KEY, (yyvsp[(5) - (5)].lex_str).str, (yyvsp[(4) - (5)].num))); + Alter_drop(Alter_drop::FOREIGN_KEY, (yyvsp[0].lex_str).str, (yyvsp[-1].num))); if (ad == NULL) MYSQL_YYABORT; lex->alter_info.drop_list.push_back(ad, thd->mem_root); lex->alter_info.flags|= Alter_info::DROP_FOREIGN_KEY; } +#line 27184 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1012: - -/* Line 1455 of yacc.c */ -#line 7459 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7451 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Alter_drop *ad= (new (thd->mem_root) @@ -29161,118 +27195,110 @@ lex->alter_info.drop_list.push_back(ad, thd->mem_root); lex->alter_info.flags|= Alter_info::ALTER_DROP_INDEX; } +#line 27199 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1013: - -/* Line 1455 of yacc.c */ -#line 7470 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7462 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Alter_drop *ad= (new (thd->mem_root) - Alter_drop(Alter_drop::KEY, (yyvsp[(4) - (4)].lex_str).str, (yyvsp[(3) - (4)].num))); + Alter_drop(Alter_drop::KEY, (yyvsp[0].lex_str).str, (yyvsp[-1].num))); if (ad == NULL) MYSQL_YYABORT; lex->alter_info.drop_list.push_back(ad, thd->mem_root); lex->alter_info.flags|= Alter_info::ALTER_DROP_INDEX; } +#line 27213 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1014: - -/* Line 1455 of yacc.c */ -#line 7480 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7472 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->alter_info.keys_onoff= Alter_info::DISABLE; lex->alter_info.flags|= Alter_info::ALTER_KEYS_ONOFF; } +#line 27223 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1015: - -/* Line 1455 of yacc.c */ -#line 7486 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7478 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->alter_info.keys_onoff= Alter_info::ENABLE; lex->alter_info.flags|= Alter_info::ALTER_KEYS_ONOFF; } +#line 27233 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1016: - -/* Line 1455 of yacc.c */ -#line 7492 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7484 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - Alter_column *ac= new (thd->mem_root) Alter_column((yyvsp[(3) - (6)].lex_str).str,(yyvsp[(6) - (6)].item)); + Alter_column *ac= new (thd->mem_root) Alter_column((yyvsp[-3].lex_str).str,(yyvsp[0].item)); if (ac == NULL) MYSQL_YYABORT; lex->alter_info.alter_list.push_back(ac, thd->mem_root); lex->alter_info.flags|= Alter_info::ALTER_CHANGE_COLUMN_DEFAULT; } +#line 27246 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1017: - -/* Line 1455 of yacc.c */ -#line 7501 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7493 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Alter_column *ac= (new (thd->mem_root) - Alter_column((yyvsp[(3) - (5)].lex_str).str, (Item*) 0)); + Alter_column((yyvsp[-2].lex_str).str, (Item*) 0)); if (ac == NULL) MYSQL_YYABORT; lex->alter_info.alter_list.push_back(ac, thd->mem_root); lex->alter_info.flags|= Alter_info::ALTER_CHANGE_COLUMN_DEFAULT; } +#line 27260 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1018: - -/* Line 1455 of yacc.c */ -#line 7511 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7503 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; size_t dummy; - lex->select_lex.db=(yyvsp[(3) - (3)].table)->db.str; + lex->select_lex.db=(yyvsp[0].table)->db.str; if (lex->select_lex.db == NULL && lex->copy_db_to(&lex->select_lex.db, &dummy)) { MYSQL_YYABORT; } - if (check_table_name((yyvsp[(3) - (3)].table)->table.str,(yyvsp[(3) - (3)].table)->table.length, FALSE) || - ((yyvsp[(3) - (3)].table)->db.str && check_db_name(&(yyvsp[(3) - (3)].table)->db))) - my_yyabort_error((ER_WRONG_TABLE_NAME, MYF(0), (yyvsp[(3) - (3)].table)->table.str)); - lex->name= (yyvsp[(3) - (3)].table)->table; + if (check_table_name((yyvsp[0].table)->table.str,(yyvsp[0].table)->table.length, FALSE) || + ((yyvsp[0].table)->db.str && check_db_name(&(yyvsp[0].table)->db))) + my_yyabort_error((ER_WRONG_TABLE_NAME, MYF(0), (yyvsp[0].table)->table.str)); + lex->name= (yyvsp[0].table)->table; lex->alter_info.flags|= Alter_info::ALTER_RENAME; } +#line 27280 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1019: - -/* Line 1455 of yacc.c */ -#line 7527 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7519 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!(yyvsp[(4) - (5)].charset)) + if (!(yyvsp[-1].charset)) { - (yyvsp[(4) - (5)].charset)= thd->variables.collation_database; + (yyvsp[-1].charset)= thd->variables.collation_database; } - (yyvsp[(5) - (5)].charset)= (yyvsp[(5) - (5)].charset) ? (yyvsp[(5) - (5)].charset) : (yyvsp[(4) - (5)].charset); - if (!my_charset_same((yyvsp[(4) - (5)].charset),(yyvsp[(5) - (5)].charset))) + (yyvsp[0].charset)= (yyvsp[0].charset) ? (yyvsp[0].charset) : (yyvsp[-1].charset); + if (!my_charset_same((yyvsp[-1].charset),(yyvsp[0].charset))) my_yyabort_error((ER_COLLATION_CHARSET_MISMATCH, MYF(0), - (yyvsp[(5) - (5)].charset)->name, (yyvsp[(4) - (5)].charset)->csname)); - if (Lex->create_info.add_alter_list_item_convert_to_charset((yyvsp[(5) - (5)].charset))) + (yyvsp[0].charset)->name, (yyvsp[-1].charset)->csname)); + if (Lex->create_info.add_alter_list_item_convert_to_charset((yyvsp[0].charset))) MYSQL_YYABORT; Lex->alter_info.flags|= Alter_info::ALTER_OPTIONS; } +#line 27298 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1020: - -/* Line 1455 of yacc.c */ -#line 7541 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7533 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->alter_info.flags|= Alter_info::ALTER_OPTIONS; @@ -29282,383 +27308,339 @@ lex->create_info.used_fields&= ~HA_CREATE_USED_ENGINE; } } +#line 27312 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1021: - -/* Line 1455 of yacc.c */ -#line 7551 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7543 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_RECREATE; } +#line 27320 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1022: - -/* Line 1455 of yacc.c */ -#line 7555 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7547 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->alter_info.flags|= Alter_info::ALTER_ORDER; } +#line 27329 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1030: - -/* Line 1455 of yacc.c */ -#line 7572 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7564 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.requested_algorithm= Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT; } +#line 27338 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1031: - -/* Line 1455 of yacc.c */ -#line 7577 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7569 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->alter_info.set_requested_algorithm(&(yyvsp[(3) - (3)].lex_str))) - my_yyabort_error((ER_UNKNOWN_ALTER_ALGORITHM, MYF(0), (yyvsp[(3) - (3)].lex_str).str)); + if (Lex->alter_info.set_requested_algorithm(&(yyvsp[0].lex_str))) + my_yyabort_error((ER_UNKNOWN_ALTER_ALGORITHM, MYF(0), (yyvsp[0].lex_str).str)); } +#line 27347 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1032: - -/* Line 1455 of yacc.c */ -#line 7585 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7577 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.requested_lock= Alter_info::ALTER_TABLE_LOCK_DEFAULT; } +#line 27356 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1033: - -/* Line 1455 of yacc.c */ -#line 7590 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7582 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->alter_info.set_requested_lock(&(yyvsp[(3) - (3)].lex_str))) - my_yyabort_error((ER_UNKNOWN_ALTER_LOCK, MYF(0), (yyvsp[(3) - (3)].lex_str).str)); + if (Lex->alter_info.set_requested_lock(&(yyvsp[0].lex_str))) + my_yyabort_error((ER_UNKNOWN_ALTER_LOCK, MYF(0), (yyvsp[0].lex_str).str)); } +#line 27365 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1034: - -/* Line 1455 of yacc.c */ -#line 7597 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7589 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27371 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1035: - -/* Line 1455 of yacc.c */ -#line 7598 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7590 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27377 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1036: - -/* Line 1455 of yacc.c */ -#line 7602 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7594 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ignore= 0;} +#line 27383 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1037: - -/* Line 1455 of yacc.c */ -#line 7603 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7595 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ignore= 1;} +#line 27389 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1038: - -/* Line 1455 of yacc.c */ -#line 7607 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7599 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ignore= 0;} +#line 27395 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1044: - -/* Line 1455 of yacc.c */ -#line 7621 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7613 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ignore= 1;} +#line 27401 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1045: - -/* Line 1455 of yacc.c */ -#line 7623 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7615 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.requested_lock= Alter_info::ALTER_TABLE_LOCK_NONE; } +#line 27410 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1046: - -/* Line 1455 of yacc.c */ -#line 7630 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7622 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->drop_mode= DROP_DEFAULT; } +#line 27416 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1047: - -/* Line 1455 of yacc.c */ -#line 7631 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7623 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->drop_mode= DROP_RESTRICT; } +#line 27422 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1048: - -/* Line 1455 of yacc.c */ -#line 7632 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7624 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->drop_mode= DROP_CASCADE; } +#line 27428 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1049: - -/* Line 1455 of yacc.c */ -#line 7636 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7628 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27434 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1050: - -/* Line 1455 of yacc.c */ -#line 7638 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7630 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - store_position_for_column((yyvsp[(2) - (2)].lex_str).str); + store_position_for_column((yyvsp[0].lex_str).str); Lex->alter_info.flags |= Alter_info::ALTER_COLUMN_ORDER; } +#line 27443 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1051: - -/* Line 1455 of yacc.c */ -#line 7643 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7635 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { store_position_for_column(first_keyword); Lex->alter_info.flags |= Alter_info::ALTER_COLUMN_ORDER; } +#line 27452 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1052: - -/* Line 1455 of yacc.c */ -#line 7650 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7642 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27458 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1053: - -/* Line 1455 of yacc.c */ -#line 7651 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7643 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27464 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1054: - -/* Line 1455 of yacc.c */ -#line 7652 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7644 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27470 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1055: - -/* Line 1455 of yacc.c */ -#line 7653 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7645 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27476 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1056: - -/* Line 1455 of yacc.c */ -#line 7658 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7650 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_SLAVE_START; lex->type = 0; /* If you change this code don't forget to update SLAVE START too */ } +#line 27487 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1057: - -/* Line 1455 of yacc.c */ -#line 7665 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7657 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27493 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1058: - -/* Line 1455 of yacc.c */ -#line 7667 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7659 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_SLAVE_ALL_START; lex->type = 0; } +#line 27503 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1059: - -/* Line 1455 of yacc.c */ -#line 7672 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7664 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27509 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1060: - -/* Line 1455 of yacc.c */ -#line 7674 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7666 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_SLAVE_STOP; lex->type = 0; /* If you change this code don't forget to update SLAVE STOP too */ } +#line 27520 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1061: - -/* Line 1455 of yacc.c */ -#line 7681 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7673 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_SLAVE_ALL_STOP; lex->type = 0; /* If you change this code don't forget to update SLAVE STOP too */ } +#line 27531 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1062: - -/* Line 1455 of yacc.c */ -#line 7691 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7683 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_BEGIN; /* READ ONLY and READ WRITE are mutually exclusive. */ - if (((yyvsp[(3) - (3)].num) & MYSQL_START_TRANS_OPT_READ_WRITE) && - ((yyvsp[(3) - (3)].num) & MYSQL_START_TRANS_OPT_READ_ONLY)) + if (((yyvsp[0].num) & MYSQL_START_TRANS_OPT_READ_WRITE) && + ((yyvsp[0].num) & MYSQL_START_TRANS_OPT_READ_ONLY)) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } - lex->start_transaction_opt= (yyvsp[(3) - (3)].num); + lex->start_transaction_opt= (yyvsp[0].num); } +#line 27548 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1063: - -/* Line 1455 of yacc.c */ -#line 7707 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7699 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 27556 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1064: - -/* Line 1455 of yacc.c */ -#line 7711 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7703 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.num)= (yyvsp[(1) - (1)].num); + (yyval.num)= (yyvsp[0].num); } +#line 27564 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1065: - -/* Line 1455 of yacc.c */ -#line 7718 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7710 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.num)= (yyvsp[(1) - (1)].num); + (yyval.num)= (yyvsp[0].num); } +#line 27572 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1066: - -/* Line 1455 of yacc.c */ -#line 7722 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7714 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.num)= (yyvsp[(1) - (3)].num) | (yyvsp[(3) - (3)].num); + (yyval.num)= (yyvsp[-2].num) | (yyvsp[0].num); } +#line 27580 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1067: - -/* Line 1455 of yacc.c */ -#line 7729 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7721 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT; } +#line 27588 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1068: - -/* Line 1455 of yacc.c */ -#line 7733 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7725 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= MYSQL_START_TRANS_OPT_READ_ONLY; } +#line 27596 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1069: - -/* Line 1455 of yacc.c */ -#line 7737 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7729 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= MYSQL_START_TRANS_OPT_READ_WRITE; } +#line 27604 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1070: - -/* Line 1455 of yacc.c */ -#line 7743 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7735 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->slave_thd_opt= 0; } +#line 27610 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1071: - -/* Line 1455 of yacc.c */ -#line 7745 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7737 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27616 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1074: - -/* Line 1455 of yacc.c */ -#line 7754 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7746 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27622 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1075: - -/* Line 1455 of yacc.c */ -#line 7755 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7747 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->slave_thd_opt|=SLAVE_SQL; } +#line 27628 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1076: - -/* Line 1455 of yacc.c */ -#line 7756 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7748 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->slave_thd_opt|=SLAVE_IO; } +#line 27634 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1077: - -/* Line 1455 of yacc.c */ -#line 7760 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7752 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27640 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1078: - -/* Line 1455 of yacc.c */ -#line 7762 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7754 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (((lex->mi.log_file_name || lex->mi.pos) && @@ -29667,83 +27649,74 @@ (lex->mi.relay_log_name && lex->mi.relay_log_pos))) my_yyabort_error((ER_BAD_SLAVE_UNTIL_COND, MYF(0))); } +#line 27653 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1079: - -/* Line 1455 of yacc.c */ -#line 7771 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7763 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->mi.gtid_pos_str = (yyvsp[(4) - (4)].lex_str); + Lex->mi.gtid_pos_str = (yyvsp[0].lex_str); } +#line 27661 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1082: - -/* Line 1455 of yacc.c */ -#line 7783 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7775 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_CHECKSUM; /* Will be overriden during execution. */ YYPS->m_lock_type= TL_UNLOCK; } +#line 27672 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1083: - -/* Line 1455 of yacc.c */ -#line 7790 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7782 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27678 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1084: - -/* Line 1455 of yacc.c */ -#line 7794 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7786 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags= 0; } +#line 27684 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1085: - -/* Line 1455 of yacc.c */ -#line 7795 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7787 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags= T_QUICK; } +#line 27690 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1086: - -/* Line 1455 of yacc.c */ -#line 7796 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7788 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags= T_EXTEND; } +#line 27696 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1088: - -/* Line 1455 of yacc.c */ -#line 7801 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7793 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->only_view= TRUE; } +#line 27702 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1090: - -/* Line 1455 of yacc.c */ -#line 7806 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7798 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_REPAIR; - lex->no_write_to_binlog= (yyvsp[(2) - (2)].num); + lex->no_write_to_binlog= (yyvsp[0].num); lex->check_opt.init(); lex->alter_info.reset(); /* Will be overriden during execution. */ YYPS->m_lock_type= TL_UNLOCK; } +#line 27716 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1091: - -/* Line 1455 of yacc.c */ -#line 7816 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7808 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= thd->lex; DBUG_ASSERT(!lex->m_sql_cmd); @@ -29751,90 +27724,79 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 27728 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1092: - -/* Line 1455 of yacc.c */ -#line 7826 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7818 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags = T_MEDIUM; } +#line 27734 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1093: - -/* Line 1455 of yacc.c */ -#line 7827 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7819 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27740 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1094: - -/* Line 1455 of yacc.c */ -#line 7831 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7823 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27746 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1095: - -/* Line 1455 of yacc.c */ -#line 7832 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7824 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27752 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1096: - -/* Line 1455 of yacc.c */ -#line 7836 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7828 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags|= T_QUICK; } +#line 27758 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1097: - -/* Line 1455 of yacc.c */ -#line 7837 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7829 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags|= T_EXTEND; } +#line 27764 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1098: - -/* Line 1455 of yacc.c */ -#line 7838 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7830 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.sql_flags|= TT_USEFRM; } +#line 27770 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1099: - -/* Line 1455 of yacc.c */ -#line 7842 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7834 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 27776 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1100: - -/* Line 1455 of yacc.c */ -#line 7843 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7835 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.sql_flags|= TT_FROM_MYSQL; } +#line 27782 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1101: - -/* Line 1455 of yacc.c */ -#line 7848 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7840 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_ANALYZE; - lex->no_write_to_binlog= (yyvsp[(2) - (3)].num); + lex->no_write_to_binlog= (yyvsp[-1].num); lex->check_opt.init(); lex->alter_info.reset(); /* Will be overriden during execution. */ YYPS->m_lock_type= TL_UNLOCK; } +#line 27796 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1102: - -/* Line 1455 of yacc.c */ -#line 7858 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7850 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= thd->lex; DBUG_ASSERT(!lex->m_sql_cmd); @@ -29842,154 +27804,137 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 27808 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1106: - -/* Line 1455 of yacc.c */ -#line 7878 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7870 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27814 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1107: - -/* Line 1455 of yacc.c */ -#line 7880 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7872 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { thd->lex->with_persistent_for_clause= TRUE; } +#line 27822 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1108: - -/* Line 1455 of yacc.c */ -#line 7887 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7879 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27828 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1109: - -/* Line 1455 of yacc.c */ -#line 7889 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7881 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27834 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1110: - -/* Line 1455 of yacc.c */ -#line 7892 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7884 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27840 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1111: - -/* Line 1455 of yacc.c */ -#line 7894 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7886 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= thd->lex; lex->column_list= new (thd->mem_root) List; if (lex->column_list == NULL) MYSQL_YYABORT; } +#line 27851 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1113: - -/* Line 1455 of yacc.c */ -#line 7905 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7897 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27857 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1114: - -/* Line 1455 of yacc.c */ -#line 7907 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7899 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= thd->lex; lex->index_list= new (thd->mem_root) List; if (lex->index_list == NULL) MYSQL_YYABORT; } +#line 27868 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1116: - -/* Line 1455 of yacc.c */ -#line 7919 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7911 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27874 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1117: - -/* Line 1455 of yacc.c */ -#line 7921 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7913 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->column_list->push_back((LEX_STRING*) - thd->memdup(&(yyvsp[(1) - (1)].lex_str), sizeof(LEX_STRING)), thd->mem_root); + thd->memdup(&(yyvsp[0].lex_str), sizeof(LEX_STRING)), thd->mem_root); } +#line 27883 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1118: - -/* Line 1455 of yacc.c */ -#line 7926 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7918 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->column_list->push_back((LEX_STRING*) - thd->memdup(&(yyvsp[(3) - (3)].lex_str), sizeof(LEX_STRING)), thd->mem_root); + thd->memdup(&(yyvsp[0].lex_str), sizeof(LEX_STRING)), thd->mem_root); } +#line 27892 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1119: - -/* Line 1455 of yacc.c */ -#line 7934 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7926 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27898 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1122: - -/* Line 1455 of yacc.c */ -#line 7941 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7933 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->index_list->push_back((LEX_STRING*) - thd->memdup(&(yyvsp[(1) - (1)].lex_str), sizeof(LEX_STRING)), + thd->memdup(&(yyvsp[0].lex_str), sizeof(LEX_STRING)), thd->mem_root); } +#line 27908 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1123: - -/* Line 1455 of yacc.c */ -#line 7948 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7940 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX_STRING str= {(char*) "PRIMARY", 7}; Lex->index_list->push_back((LEX_STRING*) thd->memdup(&str, sizeof(LEX_STRING)), thd->mem_root); } +#line 27919 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1124: - -/* Line 1455 of yacc.c */ -#line 7958 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7950 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_BINLOG_BASE64_EVENT; - Lex->comment= (yyvsp[(2) - (2)].lex_str); + Lex->comment= (yyvsp[0].lex_str); } +#line 27928 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1126: - -/* Line 1455 of yacc.c */ -#line 7966 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7958 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->only_view= TRUE; } +#line 27934 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1128: - -/* Line 1455 of yacc.c */ -#line 7970 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7962 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; @@ -29999,12 +27944,11 @@ /* Will be overriden during execution. */ YYPS->m_lock_type= TL_UNLOCK; } +#line 27948 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1129: - -/* Line 1455 of yacc.c */ -#line 7980 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7972 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= thd->lex; if (lex->sphead) @@ -30014,111 +27958,97 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 27962 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1130: - -/* Line 1455 of yacc.c */ -#line 7992 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7984 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags = T_MEDIUM; } +#line 27968 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1131: - -/* Line 1455 of yacc.c */ -#line 7993 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7985 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27974 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1132: - -/* Line 1455 of yacc.c */ -#line 7997 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7989 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27980 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1133: - -/* Line 1455 of yacc.c */ -#line 7998 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7990 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 27986 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1134: - -/* Line 1455 of yacc.c */ -#line 8002 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7994 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags|= T_QUICK; } +#line 27992 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1135: - -/* Line 1455 of yacc.c */ -#line 8003 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7995 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags|= T_FAST; } +#line 27998 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1136: - -/* Line 1455 of yacc.c */ -#line 8004 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7996 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags|= T_MEDIUM; } +#line 28004 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1137: - -/* Line 1455 of yacc.c */ -#line 8005 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7997 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags|= T_EXTEND; } +#line 28010 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1138: - -/* Line 1455 of yacc.c */ -#line 8006 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7998 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.flags|= T_CHECK_ONLY_CHANGED; } +#line 28016 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1139: - -/* Line 1455 of yacc.c */ -#line 8007 "/home/buildbot/git/sql/sql_yacc.yy" +#line 7999 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.sql_flags|= TT_FOR_UPGRADE; } +#line 28022 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1140: - -/* Line 1455 of yacc.c */ -#line 8011 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8003 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 28028 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1141: - -/* Line 1455 of yacc.c */ -#line 8012 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8004 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_opt.sql_flags|= TT_FOR_UPGRADE; } +#line 28034 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1142: - -/* Line 1455 of yacc.c */ -#line 8017 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8009 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_OPTIMIZE; - lex->no_write_to_binlog= (yyvsp[(2) - (3)].num); + lex->no_write_to_binlog= (yyvsp[-1].num); lex->check_opt.init(); lex->alter_info.reset(); /* Will be overriden during execution. */ YYPS->m_lock_type= TL_UNLOCK; } +#line 28048 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1143: - -/* Line 1455 of yacc.c */ -#line 8027 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8019 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= thd->lex; DBUG_ASSERT(!lex->m_sql_cmd); @@ -30126,246 +28056,220 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 28060 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1144: - -/* Line 1455 of yacc.c */ -#line 8037 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8029 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 28066 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1145: - -/* Line 1455 of yacc.c */ -#line 8038 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8030 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 28072 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1146: - -/* Line 1455 of yacc.c */ -#line 8039 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8031 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 28078 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1147: - -/* Line 1455 of yacc.c */ -#line 8044 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8036 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_RENAME_TABLE; } +#line 28086 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1148: - -/* Line 1455 of yacc.c */ -#line 8048 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8040 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 28092 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1149: - -/* Line 1455 of yacc.c */ -#line 8050 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8042 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_RENAME_USER; } +#line 28100 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1150: - -/* Line 1455 of yacc.c */ -#line 8057 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8049 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(1) - (3)].lex_user), thd->mem_root) || - Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[-2].lex_user), thd->mem_root) || + Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 28110 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1151: - -/* Line 1455 of yacc.c */ -#line 8063 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8055 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(3) - (5)].lex_user), thd->mem_root) || - Lex->users_list.push_back((yyvsp[(5) - (5)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[-2].lex_user), thd->mem_root) || + Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 28120 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1154: - -/* Line 1455 of yacc.c */ -#line 8077 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8069 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; SELECT_LEX *sl= lex->current_select; - if (!sl->add_table_to_list(thd, (yyvsp[(1) - (3)].table),NULL,TL_OPTION_UPDATING, + if (!sl->add_table_to_list(thd, (yyvsp[-2].table),NULL,TL_OPTION_UPDATING, TL_IGNORE, MDL_EXCLUSIVE) || - !sl->add_table_to_list(thd, (yyvsp[(3) - (3)].table),NULL,TL_OPTION_UPDATING, + !sl->add_table_to_list(thd, (yyvsp[0].table),NULL,TL_OPTION_UPDATING, TL_IGNORE, MDL_EXCLUSIVE)) MYSQL_YYABORT; } +#line 28134 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1155: - -/* Line 1455 of yacc.c */ -#line 8090 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8082 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.reset(); } +#line 28142 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1156: - -/* Line 1455 of yacc.c */ -#line 8094 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8086 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_ASSIGN_TO_KEYCACHE; - lex->ident= (yyvsp[(6) - (6)].lex_str); + lex->ident= (yyvsp[0].lex_str); } +#line 28152 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1161: - -/* Line 1455 of yacc.c */ -#line 8113 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8105 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (2)].table), NULL, 0, TL_READ, + if (!Select->add_table_to_list(thd, (yyvsp[-1].table), NULL, 0, TL_READ, MDL_SHARED_READ, Select->pop_index_hints())) MYSQL_YYABORT; } +#line 28163 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1162: - -/* Line 1455 of yacc.c */ -#line 8123 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8115 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (3)].table), NULL, 0, TL_READ, + if (!Select->add_table_to_list(thd, (yyvsp[-2].table), NULL, 0, TL_READ, MDL_SHARED_READ, Select->pop_index_hints())) MYSQL_YYABORT; } +#line 28174 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1163: - -/* Line 1455 of yacc.c */ -#line 8132 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } +#line 8124 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)= (yyvsp[0].lex_str); } +#line 28180 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1164: - -/* Line 1455 of yacc.c */ -#line 8133 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8125 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str) = default_key_cache_base; } +#line 28186 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1165: - -/* Line 1455 of yacc.c */ -#line 8138 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8130 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command=SQLCOM_PRELOAD_KEYS; lex->alter_info.reset(); } +#line 28196 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1166: - -/* Line 1455 of yacc.c */ -#line 8144 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8136 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 28202 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1171: - -/* Line 1455 of yacc.c */ -#line 8159 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8151 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (3)].table), NULL, (yyvsp[(3) - (3)].num), TL_READ, + if (!Select->add_table_to_list(thd, (yyvsp[-2].table), NULL, (yyvsp[0].num), TL_READ, MDL_SHARED_READ, Select->pop_index_hints())) MYSQL_YYABORT; } +#line 28213 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1172: - -/* Line 1455 of yacc.c */ -#line 8169 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8161 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (4)].table), NULL, (yyvsp[(4) - (4)].num), TL_READ, + if (!Select->add_table_to_list(thd, (yyvsp[-3].table), NULL, (yyvsp[0].num), TL_READ, MDL_SHARED_READ, Select->pop_index_hints())) MYSQL_YYABORT; } +#line 28224 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1173: - -/* Line 1455 of yacc.c */ -#line 8179 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8171 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->alter_info.flags|= Alter_info::ALTER_ADMIN_PARTITION; } +#line 28232 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1175: - -/* Line 1455 of yacc.c */ -#line 8186 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8178 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->select_lex.alloc_index_hints(thd); Select->set_index_hint_type(INDEX_HINT_USE, INDEX_HINT_MASK_ALL); } +#line 28242 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1177: - -/* Line 1455 of yacc.c */ -#line 8195 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8187 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 28248 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1179: - -/* Line 1455 of yacc.c */ -#line 8201 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8193 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 28254 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1180: - -/* Line 1455 of yacc.c */ -#line 8202 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8194 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= TL_OPTION_IGNORE_LEAVES; } +#line 28260 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1181: - -/* Line 1455 of yacc.c */ -#line 8212 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8204 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SELECT; } +#line 28269 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1184: - -/* Line 1455 of yacc.c */ -#line 8225 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8217 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* In order to correctly parse UNION's global ORDER BY we need to @@ -30373,65 +28277,59 @@ */ Lex->current_select->set_braces(true); } +#line 28281 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1185: - -/* Line 1455 of yacc.c */ -#line 8233 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8225 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (setup_select_in_parentheses(Lex)) MYSQL_YYABORT; } +#line 28290 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1187: - -/* Line 1455 of yacc.c */ -#line 8242 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8234 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->current_select->set_braces(true); } +#line 28298 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1188: - -/* Line 1455 of yacc.c */ -#line 8247 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8239 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (setup_select_in_parentheses(Lex)) MYSQL_YYABORT; } +#line 28307 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1190: - -/* Line 1455 of yacc.c */ -#line 8256 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8248 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; /* Parentheses carry no meaning here */ lex->current_select->set_braces(false); } +#line 28317 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1194: - -/* Line 1455 of yacc.c */ -#line 8286 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8278 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(2) - (11)].num) && (yyvsp[(10) - (11)].num)) /* double "INTO" clause */ + if ((yyvsp[-9].num) && (yyvsp[-1].num)) /* double "INTO" clause */ my_yyabort_error((ER_WRONG_USAGE, MYF(0), "INTO", "INTO")); - if ((yyvsp[(9) - (11)].num) && ((yyvsp[(2) - (11)].num) || (yyvsp[(10) - (11)].num))) /* "INTO" with "PROCEDURE ANALYSE" */ + if ((yyvsp[-2].num) && ((yyvsp[-9].num) || (yyvsp[-1].num))) /* "INTO" with "PROCEDURE ANALYSE" */ my_yyabort_error((ER_WRONG_USAGE, MYF(0), "PROCEDURE", "INTO")); } +#line 28329 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1195: - -/* Line 1455 of yacc.c */ -#line 8296 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8288 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -30439,42 +28337,38 @@ mysql_init_select(lex); lex->current_select->parsing_place= SELECT_LIST; } +#line 28341 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1196: - -/* Line 1455 of yacc.c */ -#line 8304 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8296 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= NO_MATTER; } +#line 28349 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1201: - -/* Line 1455 of yacc.c */ -#line 8331 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8323 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->context.table_list= Select->context.first_name_resolution_table= Select->table_list.first; } +#line 28359 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1204: - -/* Line 1455 of yacc.c */ -#line 8346 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8338 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Select->options & SELECT_DISTINCT && Select->options & SELECT_ALL) my_yyabort_error((ER_WRONG_USAGE, MYF(0), "ALL", "DISTINCT")); } +#line 28368 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1208: - -/* Line 1455 of yacc.c */ -#line 8360 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8352 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Allow this flag only on the first top-level SELECT statement, if @@ -30491,12 +28385,11 @@ Lex->select_lex.options&= ~OPTION_TO_QUERY_CACHE; Lex->select_lex.sql_cache= SELECT_LEX::SQL_NO_CACHE; } +#line 28389 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1209: - -/* Line 1455 of yacc.c */ -#line 8377 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8369 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Allow this flag only on the first top-level SELECT statement, if @@ -30513,24 +28406,22 @@ Lex->select_lex.options|= OPTION_TO_QUERY_CACHE; Lex->select_lex.sql_cache= SELECT_LEX::SQL_CACHE; } +#line 28410 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1211: - -/* Line 1455 of yacc.c */ -#line 8398 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8390 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->current_select->lock_type= TL_WRITE; lex->current_select->set_lock_for_tables(TL_WRITE); lex->safe_to_cache_query=0; } +#line 28421 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1212: - -/* Line 1455 of yacc.c */ -#line 8405 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8397 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->current_select->lock_type= TL_READ_WITH_SHARED_LOCKS; @@ -30538,12 +28429,11 @@ set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS); lex->safe_to_cache_query=0; } +#line 28433 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1215: - -/* Line 1455 of yacc.c */ -#line 8418 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8410 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item *item= new (thd->mem_root) Item_field(thd, &thd->lex->current_select->context, @@ -30554,164 +28444,145 @@ MYSQL_YYABORT; (thd->lex->current_select->with_wild)++; } +#line 28448 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1216: - -/* Line 1455 of yacc.c */ -#line 8432 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8424 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_item_to_list(thd, (yyvsp[(2) - (3)].item))) + if (add_item_to_list(thd, (yyvsp[-1].item))) MYSQL_YYABORT; } +#line 28457 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1217: - -/* Line 1455 of yacc.c */ -#line 8437 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8429 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - DBUG_ASSERT((yyvsp[(1) - (4)].simple_string) < (yyvsp[(3) - (4)].simple_string)); + DBUG_ASSERT((yyvsp[-3].simple_string) < (yyvsp[-1].simple_string)); - if (add_item_to_list(thd, (yyvsp[(2) - (4)].item))) + if (add_item_to_list(thd, (yyvsp[-2].item))) MYSQL_YYABORT; - if ((yyvsp[(4) - (4)].lex_str).str) + if ((yyvsp[0].lex_str).str) { if (Lex->sql_command == SQLCOM_CREATE_VIEW && - check_column_name((yyvsp[(4) - (4)].lex_str).str)) - my_yyabort_error((ER_WRONG_COLUMN_NAME, MYF(0), (yyvsp[(4) - (4)].lex_str).str)); - (yyvsp[(2) - (4)].item)->is_autogenerated_name= FALSE; - (yyvsp[(2) - (4)].item)->set_name((yyvsp[(4) - (4)].lex_str).str, (yyvsp[(4) - (4)].lex_str).length, system_charset_info); + check_column_name((yyvsp[0].lex_str).str)) + my_yyabort_error((ER_WRONG_COLUMN_NAME, MYF(0), (yyvsp[0].lex_str).str)); + (yyvsp[-2].item)->is_autogenerated_name= FALSE; + (yyvsp[-2].item)->set_name((yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, system_charset_info); } - else if (!(yyvsp[(2) - (4)].item)->name) + else if (!(yyvsp[-2].item)->name) { - (yyvsp[(2) - (4)].item)->set_name((yyvsp[(1) - (4)].simple_string), (uint) ((yyvsp[(3) - (4)].simple_string) - (yyvsp[(1) - (4)].simple_string)), thd->charset()); + (yyvsp[-2].item)->set_name((yyvsp[-3].simple_string), (uint) ((yyvsp[-1].simple_string) - (yyvsp[-3].simple_string)), thd->charset()); } } +#line 28480 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1218: - -/* Line 1455 of yacc.c */ -#line 8458 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8450 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.simple_string)= (char*) YYLIP->get_tok_start(); } +#line 28488 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1219: - -/* Line 1455 of yacc.c */ -#line 8464 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8456 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.simple_string)= (char*) YYLIP->get_cpp_tok_start(); } +#line 28496 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1220: - -/* Line 1455 of yacc.c */ -#line 8470 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8462 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.simple_string)= (char*) YYLIP->get_cpp_tok_end(); } +#line 28504 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1221: - -/* Line 1455 of yacc.c */ -#line 8476 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8468 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str)=null_lex_str;} +#line 28510 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1222: - -/* Line 1455 of yacc.c */ -#line 8477 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str); } +#line 8469 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 28516 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1223: - -/* Line 1455 of yacc.c */ -#line 8478 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str); } +#line 8470 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 28522 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1224: - -/* Line 1455 of yacc.c */ -#line 8479 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } +#line 8471 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 28528 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1225: - -/* Line 1455 of yacc.c */ -#line 8480 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } +#line 8472 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 28534 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1226: - -/* Line 1455 of yacc.c */ -#line 8484 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8476 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= NOT_FIXED_DEC; } +#line 28540 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1227: - -/* Line 1455 of yacc.c */ -#line 8485 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8477 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= NOT_FIXED_DEC; } +#line 28546 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1228: - -/* Line 1455 of yacc.c */ -#line 8486 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.num)= (yyvsp[(2) - (3)].ulong_num); } +#line 8478 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.num)= (yyvsp[-1].ulong_num); } +#line 28552 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1229: - -/* Line 1455 of yacc.c */ -#line 8490 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8482 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 28558 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1230: - -/* Line 1455 of yacc.c */ -#line 8491 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8483 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 28564 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1231: - -/* Line 1455 of yacc.c */ -#line 8492 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.num)= (yyvsp[(2) - (3)].ulong_num); } +#line 8484 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.num)= (yyvsp[-1].ulong_num); } +#line 28570 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1232: - -/* Line 1455 of yacc.c */ -#line 8496 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8488 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 28576 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1233: - -/* Line 1455 of yacc.c */ -#line 8497 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8489 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 28582 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1234: - -/* Line 1455 of yacc.c */ -#line 8503 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8495 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Design notes: @@ -30724,371 +28595,346 @@ */ Item_cond_or *item1; Item_cond_or *item3; - if (is_cond_or((yyvsp[(1) - (3)].item))) + if (is_cond_or((yyvsp[-2].item))) { - item1= (Item_cond_or*) (yyvsp[(1) - (3)].item); - if (is_cond_or((yyvsp[(3) - (3)].item))) + item1= (Item_cond_or*) (yyvsp[-2].item); + if (is_cond_or((yyvsp[0].item))) { - item3= (Item_cond_or*) (yyvsp[(3) - (3)].item); + item3= (Item_cond_or*) (yyvsp[0].item); /* (X1 OR X2) OR (Y1 OR Y2) ==> OR (X1, X2, Y1, Y2) */ item3->add_at_head(item1->argument_list()); - (yyval.item) = (yyvsp[(3) - (3)].item); + (yyval.item) = (yyvsp[0].item); } else { /* (X1 OR X2) OR Y ==> OR (X1, X2, Y) */ - item1->add((yyvsp[(3) - (3)].item), thd->mem_root); - (yyval.item) = (yyvsp[(1) - (3)].item); + item1->add((yyvsp[0].item), thd->mem_root); + (yyval.item) = (yyvsp[-2].item); } } - else if (is_cond_or((yyvsp[(3) - (3)].item))) + else if (is_cond_or((yyvsp[0].item))) { - item3= (Item_cond_or*) (yyvsp[(3) - (3)].item); + item3= (Item_cond_or*) (yyvsp[0].item); /* X OR (Y1 OR Y2) ==> OR (X, Y1, Y2) */ - item3->add_at_head((yyvsp[(1) - (3)].item), thd->mem_root); - (yyval.item) = (yyvsp[(3) - (3)].item); + item3->add_at_head((yyvsp[-2].item), thd->mem_root); + (yyval.item) = (yyvsp[0].item); } else { /* X OR Y */ - (yyval.item)= new (thd->mem_root) Item_cond_or(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_cond_or(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } } +#line 28637 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1235: - -/* Line 1455 of yacc.c */ -#line 8554 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8546 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* XOR is a proprietary extension */ - (yyval.item)= new (thd->mem_root) Item_func_xor(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_xor(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28648 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1236: - -/* Line 1455 of yacc.c */ -#line 8561 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8553 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* See comments in rule expr: expr or expr */ Item_cond_and *item1; Item_cond_and *item3; - if (is_cond_and((yyvsp[(1) - (3)].item))) + if (is_cond_and((yyvsp[-2].item))) { - item1= (Item_cond_and*) (yyvsp[(1) - (3)].item); - if (is_cond_and((yyvsp[(3) - (3)].item))) + item1= (Item_cond_and*) (yyvsp[-2].item); + if (is_cond_and((yyvsp[0].item))) { - item3= (Item_cond_and*) (yyvsp[(3) - (3)].item); + item3= (Item_cond_and*) (yyvsp[0].item); /* (X1 AND X2) AND (Y1 AND Y2) ==> AND (X1, X2, Y1, Y2) */ item3->add_at_head(item1->argument_list()); - (yyval.item) = (yyvsp[(3) - (3)].item); + (yyval.item) = (yyvsp[0].item); } else { /* (X1 AND X2) AND Y ==> AND (X1, X2, Y) */ - item1->add((yyvsp[(3) - (3)].item), thd->mem_root); - (yyval.item) = (yyvsp[(1) - (3)].item); + item1->add((yyvsp[0].item), thd->mem_root); + (yyval.item) = (yyvsp[-2].item); } } - else if (is_cond_and((yyvsp[(3) - (3)].item))) + else if (is_cond_and((yyvsp[0].item))) { - item3= (Item_cond_and*) (yyvsp[(3) - (3)].item); + item3= (Item_cond_and*) (yyvsp[0].item); /* X AND (Y1 AND Y2) ==> AND (X, Y1, Y2) */ - item3->add_at_head((yyvsp[(1) - (3)].item), thd->mem_root); - (yyval.item) = (yyvsp[(3) - (3)].item); + item3->add_at_head((yyvsp[-2].item), thd->mem_root); + (yyval.item) = (yyvsp[0].item); } else { /* X AND Y */ - (yyval.item)= new (thd->mem_root) Item_cond_and(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_cond_and(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } } +#line 28695 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1237: - -/* Line 1455 of yacc.c */ -#line 8604 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8596 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= negate_expression(thd, (yyvsp[(2) - (2)].item)); + (yyval.item)= negate_expression(thd, (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28705 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1238: - -/* Line 1455 of yacc.c */ -#line 8610 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8602 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_istrue(thd, (yyvsp[(1) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_istrue(thd, (yyvsp[-2].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28715 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1239: - -/* Line 1455 of yacc.c */ -#line 8616 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8608 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_isnottrue(thd, (yyvsp[(1) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_isnottrue(thd, (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28725 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1240: - -/* Line 1455 of yacc.c */ -#line 8622 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8614 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_isfalse(thd, (yyvsp[(1) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_isfalse(thd, (yyvsp[-2].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28735 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1241: - -/* Line 1455 of yacc.c */ -#line 8628 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8620 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_isnotfalse(thd, (yyvsp[(1) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_isnotfalse(thd, (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28745 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1242: - -/* Line 1455 of yacc.c */ -#line 8634 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8626 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_isnull(thd, (yyvsp[(1) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_isnull(thd, (yyvsp[-2].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28755 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1243: - -/* Line 1455 of yacc.c */ -#line 8640 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8632 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_isnotnull(thd, (yyvsp[(1) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_isnotnull(thd, (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28765 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1245: - -/* Line 1455 of yacc.c */ -#line 8650 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8642 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_isnull(thd, (yyvsp[(1) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_isnull(thd, (yyvsp[-2].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28775 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1246: - -/* Line 1455 of yacc.c */ -#line 8656 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8648 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_isnotnull(thd, (yyvsp[(1) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_isnotnull(thd, (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28785 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1247: - -/* Line 1455 of yacc.c */ -#line 8662 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8654 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_equal(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_equal(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28795 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1248: - -/* Line 1455 of yacc.c */ -#line 8668 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8660 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= (*(yyvsp[(2) - (3)].boolfunc2creator))(0)->create(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= (*(yyvsp[-1].boolfunc2creator))(0)->create(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28805 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1249: - -/* Line 1455 of yacc.c */ -#line 8674 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8666 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= all_any_subquery_creator(thd, (yyvsp[(1) - (6)].item), (yyvsp[(2) - (6)].boolfunc2creator), (yyvsp[(3) - (6)].num), (yyvsp[(5) - (6)].select_lex)); + (yyval.item)= all_any_subquery_creator(thd, (yyvsp[-5].item), (yyvsp[-4].boolfunc2creator), (yyvsp[-3].num), (yyvsp[-1].select_lex)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28815 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1251: - -/* Line 1455 of yacc.c */ -#line 8684 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8676 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_in_subselect(thd, (yyvsp[(1) - (5)].item), (yyvsp[(4) - (5)].select_lex)); + (yyval.item)= new (thd->mem_root) Item_in_subselect(thd, (yyvsp[-4].item), (yyvsp[-1].select_lex)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28825 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1252: - -/* Line 1455 of yacc.c */ -#line 8690 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8682 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *item= new (thd->mem_root) Item_in_subselect(thd, (yyvsp[(1) - (6)].item), (yyvsp[(5) - (6)].select_lex)); + Item *item= new (thd->mem_root) Item_in_subselect(thd, (yyvsp[-5].item), (yyvsp[-1].select_lex)); if (item == NULL) MYSQL_YYABORT; (yyval.item)= negate_expression(thd, item); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28838 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1253: - -/* Line 1455 of yacc.c */ -#line 8699 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8691 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= handle_sql2003_note184_exception(thd, (yyvsp[(1) - (5)].item), true, (yyvsp[(4) - (5)].item)); + (yyval.item)= handle_sql2003_note184_exception(thd, (yyvsp[-4].item), true, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28848 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1254: - -/* Line 1455 of yacc.c */ -#line 8705 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8697 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(6) - (7)].item_list)->push_front((yyvsp[(4) - (7)].item), thd->mem_root); - (yyvsp[(6) - (7)].item_list)->push_front((yyvsp[(1) - (7)].item), thd->mem_root); - (yyval.item)= new (thd->mem_root) Item_func_in(thd, *(yyvsp[(6) - (7)].item_list)); + (yyvsp[-1].item_list)->push_front((yyvsp[-3].item), thd->mem_root); + (yyvsp[-1].item_list)->push_front((yyvsp[-6].item), thd->mem_root); + (yyval.item)= new (thd->mem_root) Item_func_in(thd, *(yyvsp[-1].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28860 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1255: - -/* Line 1455 of yacc.c */ -#line 8713 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8705 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= handle_sql2003_note184_exception(thd, (yyvsp[(1) - (6)].item), false, (yyvsp[(5) - (6)].item)); + (yyval.item)= handle_sql2003_note184_exception(thd, (yyvsp[-5].item), false, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28870 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1256: - -/* Line 1455 of yacc.c */ -#line 8719 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8711 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(7) - (8)].item_list)->push_front((yyvsp[(5) - (8)].item), thd->mem_root); - (yyvsp[(7) - (8)].item_list)->push_front((yyvsp[(1) - (8)].item), thd->mem_root); - Item_func_in *item= new (thd->mem_root) Item_func_in(thd, *(yyvsp[(7) - (8)].item_list)); + (yyvsp[-1].item_list)->push_front((yyvsp[-3].item), thd->mem_root); + (yyvsp[-1].item_list)->push_front((yyvsp[-7].item), thd->mem_root); + Item_func_in *item= new (thd->mem_root) Item_func_in(thd, *(yyvsp[-1].item_list)); if (item == NULL) MYSQL_YYABORT; item->negate(); (yyval.item)= item; } +#line 28884 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1257: - -/* Line 1455 of yacc.c */ -#line 8729 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8721 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_between(thd, (yyvsp[(1) - (5)].item), (yyvsp[(3) - (5)].item), (yyvsp[(5) - (5)].item)); + (yyval.item)= new (thd->mem_root) Item_func_between(thd, (yyvsp[-4].item), (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28894 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1258: - -/* Line 1455 of yacc.c */ -#line 8735 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8727 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item_func_between *item; - item= new (thd->mem_root) Item_func_between(thd, (yyvsp[(1) - (6)].item), (yyvsp[(4) - (6)].item), (yyvsp[(6) - (6)].item)); + item= new (thd->mem_root) Item_func_between(thd, (yyvsp[-5].item), (yyvsp[-2].item), (yyvsp[0].item)); if (item == NULL) MYSQL_YYABORT; item->negate(); (yyval.item)= item; } +#line 28907 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1259: - -/* Line 1455 of yacc.c */ -#line 8744 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8736 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *item1= new (thd->mem_root) Item_func_soundex(thd, (yyvsp[(1) - (4)].item)); - Item *item4= new (thd->mem_root) Item_func_soundex(thd, (yyvsp[(4) - (4)].item)); + Item *item1= new (thd->mem_root) Item_func_soundex(thd, (yyvsp[-3].item)); + Item *item4= new (thd->mem_root) Item_func_soundex(thd, (yyvsp[0].item)); if ((item1 == NULL) || (item4 == NULL)) MYSQL_YYABORT; (yyval.item)= new (thd->mem_root) Item_func_eq(thd, item1, item4); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28921 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1260: - -/* Line 1455 of yacc.c */ -#line 8754 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8746 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_like(thd, (yyvsp[(1) - (4)].item), (yyvsp[(3) - (4)].item), (yyvsp[(4) - (4)].item), + (yyval.item)= new (thd->mem_root) Item_func_like(thd, (yyvsp[-3].item), (yyvsp[-1].item), (yyvsp[0].item), Lex->escape_used); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28932 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1261: - -/* Line 1455 of yacc.c */ -#line 8761 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8753 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *item= new (thd->mem_root) Item_func_like(thd, (yyvsp[(1) - (5)].item), (yyvsp[(4) - (5)].item), (yyvsp[(5) - (5)].item), + Item *item= new (thd->mem_root) Item_func_like(thd, (yyvsp[-4].item), (yyvsp[-1].item), (yyvsp[0].item), Lex->escape_used); if (item == NULL) MYSQL_YYABORT; @@ -31096,378 +28942,341 @@ if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28946 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1262: - -/* Line 1455 of yacc.c */ -#line 8771 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8763 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_regex(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_regex(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28956 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1263: - -/* Line 1455 of yacc.c */ -#line 8777 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8769 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *item= new (thd->mem_root) Item_func_regex(thd, (yyvsp[(1) - (4)].item), (yyvsp[(4) - (4)].item)); + Item *item= new (thd->mem_root) Item_func_regex(thd, (yyvsp[-3].item), (yyvsp[0].item)); if (item == NULL) MYSQL_YYABORT; (yyval.item)= negate_expression(thd, item); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28969 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1265: - -/* Line 1455 of yacc.c */ -#line 8790 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8782 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_bit_or(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_bit_or(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28979 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1266: - -/* Line 1455 of yacc.c */ -#line 8796 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8788 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_bit_and(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_bit_and(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28989 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1267: - -/* Line 1455 of yacc.c */ -#line 8802 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8794 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_shift_left(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_shift_left(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 28999 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1268: - -/* Line 1455 of yacc.c */ -#line 8808 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8800 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_shift_right(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_shift_right(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29009 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1269: - -/* Line 1455 of yacc.c */ -#line 8814 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8806 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_plus(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_plus(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29019 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1270: - -/* Line 1455 of yacc.c */ -#line 8820 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8812 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_minus(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_minus(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29029 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1271: - -/* Line 1455 of yacc.c */ -#line 8826 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8818 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(1) - (5)].item), (yyvsp[(4) - (5)].item), (yyvsp[(5) - (5)].interval), 0); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-4].item), (yyvsp[-1].item), (yyvsp[0].interval), 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29039 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1272: - -/* Line 1455 of yacc.c */ -#line 8832 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8824 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(1) - (5)].item), (yyvsp[(4) - (5)].item), (yyvsp[(5) - (5)].interval), 1); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-4].item), (yyvsp[-1].item), (yyvsp[0].interval), 1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29049 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1273: - -/* Line 1455 of yacc.c */ -#line 8838 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8830 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_mul(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_mul(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29059 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1274: - -/* Line 1455 of yacc.c */ -#line 8844 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8836 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_div(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_div(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29069 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1275: - -/* Line 1455 of yacc.c */ -#line 8850 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8842 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_mod(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_mod(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29079 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1276: - -/* Line 1455 of yacc.c */ -#line 8856 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8848 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_int_div(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_int_div(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29089 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1277: - -/* Line 1455 of yacc.c */ -#line 8862 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8854 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_mod(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_mod(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29099 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1278: - -/* Line 1455 of yacc.c */ -#line 8868 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8860 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_bit_xor(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_bit_xor(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29109 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1288: - -/* Line 1455 of yacc.c */ -#line 8897 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8889 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.boolfunc2creator) = &comp_eq_creator; } +#line 29115 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1289: - -/* Line 1455 of yacc.c */ -#line 8898 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8890 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.boolfunc2creator) = &comp_ge_creator; } +#line 29121 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1290: - -/* Line 1455 of yacc.c */ -#line 8899 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8891 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.boolfunc2creator) = &comp_gt_creator; } +#line 29127 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1291: - -/* Line 1455 of yacc.c */ -#line 8900 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8892 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.boolfunc2creator) = &comp_le_creator; } +#line 29133 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1292: - -/* Line 1455 of yacc.c */ -#line 8901 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8893 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.boolfunc2creator) = &comp_lt_creator; } +#line 29139 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1293: - -/* Line 1455 of yacc.c */ -#line 8902 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8894 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.boolfunc2creator) = &comp_ne_creator; } +#line 29145 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1294: - -/* Line 1455 of yacc.c */ -#line 8906 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8898 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 1; } +#line 29151 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1295: - -/* Line 1455 of yacc.c */ -#line 8907 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8899 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 0; } +#line 29157 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1296: - -/* Line 1455 of yacc.c */ -#line 8912 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8904 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_NULL; /* automatic type */ lex->charset= NULL; lex->length= lex->dec= 0; } +#line 29168 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1297: - -/* Line 1455 of yacc.c */ -#line 8918 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.num)= (yyvsp[(2) - (2)].num); } +#line 8910 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.num)= (yyvsp[0].num); } +#line 29174 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1298: - -/* Line 1455 of yacc.c */ -#line 8923 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8915 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_INT; lex->charset= NULL; lex->length= lex->dec= 0; } +#line 29185 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1299: - -/* Line 1455 of yacc.c */ -#line 8930 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8922 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_UINT; lex->charset= NULL; lex->length= lex->dec= 0; } +#line 29196 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1300: - -/* Line 1455 of yacc.c */ -#line 8937 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8929 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_DOUBLE; lex->charset= NULL; lex->length= lex->dec= 0; } +#line 29207 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1301: - -/* Line 1455 of yacc.c */ -#line 8944 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8936 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_DOUBLE; lex->charset= NULL; lex->length= lex->dec= 0; } +#line 29218 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1302: - -/* Line 1455 of yacc.c */ -#line 8951 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8943 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_DOUBLE; lex->charset= NULL; lex->length= lex->dec= 0; } +#line 29229 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1303: - -/* Line 1455 of yacc.c */ -#line 8958 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8950 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= DYN_COL_DECIMAL; Lex->charset= NULL; } +#line 29238 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1304: - -/* Line 1455 of yacc.c */ -#line 8963 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8955 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset= thd->variables.collation_connection; } +#line 29244 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1305: - -/* Line 1455 of yacc.c */ -#line 8965 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8957 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_STRING; lex->length= lex->dec= 0; } +#line 29254 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1306: - -/* Line 1455 of yacc.c */ -#line 8971 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8963 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_STRING; lex->charset= national_charset_info; lex->length= lex->dec= 0; } +#line 29265 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1307: - -/* Line 1455 of yacc.c */ -#line 8978 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8970 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_DATE; lex->charset= NULL; lex->length= lex->dec= 0; } +#line 29276 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1308: - -/* Line 1455 of yacc.c */ -#line 8985 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8977 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_TIME; @@ -31475,12 +29284,11 @@ lex->dec= lex->length; lex->length= 0; } +#line 29288 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1309: - -/* Line 1455 of yacc.c */ -#line 8993 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8985 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.num)= DYN_COL_DATETIME; @@ -31488,21 +29296,20 @@ lex->dec= lex->length; lex->length= 0; } +#line 29300 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1310: - -/* Line 1455 of yacc.c */ -#line 9004 "/home/buildbot/git/sql/sql_yacc.yy" +#line 8996 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; (yyval.dyncol_def)= (DYNCALL_CREATE_DEF *) alloc_root(thd->mem_root, sizeof(DYNCALL_CREATE_DEF)); if ((yyval.dyncol_def) == NULL) MYSQL_YYABORT; - (yyval.dyncol_def)->key= (yyvsp[(1) - (4)].item); - (yyval.dyncol_def)->value= (yyvsp[(3) - (4)].item); - (yyval.dyncol_def)->type= (DYNAMIC_COLUMN_TYPE)(yyvsp[(4) - (4)].num); + (yyval.dyncol_def)->key= (yyvsp[-3].item); + (yyval.dyncol_def)->value= (yyvsp[-1].item); + (yyval.dyncol_def)->type= (DYNAMIC_COLUMN_TYPE)(yyvsp[0].num); (yyval.dyncol_def)->cs= lex->charset; if (lex->length) (yyval.dyncol_def)->len= strtoul(lex->length, NULL, 10); @@ -31513,163 +29320,148 @@ else (yyval.dyncol_def)->len= 0; } +#line 29324 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1311: - -/* Line 1455 of yacc.c */ -#line 9026 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9018 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.dyncol_def_list)= new (thd->mem_root) List; if ((yyval.dyncol_def_list) == NULL) MYSQL_YYABORT; - (yyval.dyncol_def_list)->push_back((yyvsp[(1) - (1)].dyncol_def), thd->mem_root); + (yyval.dyncol_def_list)->push_back((yyvsp[0].dyncol_def), thd->mem_root); } +#line 29335 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1312: - -/* Line 1455 of yacc.c */ -#line 9033 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9025 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(1) - (3)].dyncol_def_list)->push_back((yyvsp[(3) - (3)].dyncol_def), thd->mem_root); - (yyval.dyncol_def_list)= (yyvsp[(1) - (3)].dyncol_def_list); + (yyvsp[-2].dyncol_def_list)->push_back((yyvsp[0].dyncol_def), thd->mem_root); + (yyval.dyncol_def_list)= (yyvsp[-2].dyncol_def_list); } +#line 29344 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1318: - -/* Line 1455 of yacc.c */ -#line 9046 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9038 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *i1= new (thd->mem_root) Item_string(thd, (yyvsp[(3) - (3)].lex_str).str, - (yyvsp[(3) - (3)].lex_str).length, + Item *i1= new (thd->mem_root) Item_string(thd, (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length, thd->charset()); if (i1 == NULL) MYSQL_YYABORT; - (yyval.item)= new (thd->mem_root) Item_func_set_collation(thd, (yyvsp[(1) - (3)].item), i1); + (yyval.item)= new (thd->mem_root) Item_func_set_collation(thd, (yyvsp[-2].item), i1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29359 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1320: - -/* Line 1455 of yacc.c */ -#line 9057 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item_param); } +#line 9049 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item_param); } +#line 29365 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1323: - -/* Line 1455 of yacc.c */ -#line 9061 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9053 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_concat(thd, (yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); + (yyval.item)= new (thd->mem_root) Item_func_concat(thd, (yyvsp[-2].item), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29375 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1324: - -/* Line 1455 of yacc.c */ -#line 9067 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9059 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= (yyvsp[(2) - (2)].item); + (yyval.item)= (yyvsp[0].item); } +#line 29383 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1325: - -/* Line 1455 of yacc.c */ -#line 9071 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9063 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_neg(thd, (yyvsp[(2) - (2)].item)); + (yyval.item)= new (thd->mem_root) Item_func_neg(thd, (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29393 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1326: - -/* Line 1455 of yacc.c */ -#line 9077 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9069 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_bit_neg(thd, (yyvsp[(2) - (2)].item)); + (yyval.item)= new (thd->mem_root) Item_func_bit_neg(thd, (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29403 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1327: - -/* Line 1455 of yacc.c */ -#line 9083 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9075 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= negate_expression(thd, (yyvsp[(2) - (2)].item)); + (yyval.item)= negate_expression(thd, (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29413 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1328: - -/* Line 1455 of yacc.c */ -#line 9089 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9081 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_singlerow_subselect(thd, (yyvsp[(2) - (3)].select_lex)); + (yyval.item)= new (thd->mem_root) Item_singlerow_subselect(thd, (yyvsp[-1].select_lex)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29423 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1329: - -/* Line 1455 of yacc.c */ -#line 9095 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(2) - (3)].item); } +#line 9087 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[-1].item); } +#line 29429 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1330: - -/* Line 1455 of yacc.c */ -#line 9097 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9089 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(4) - (5)].item_list)->push_front((yyvsp[(2) - (5)].item), thd->mem_root); - (yyval.item)= new (thd->mem_root) Item_row(thd, *(yyvsp[(4) - (5)].item_list)); + (yyvsp[-1].item_list)->push_front((yyvsp[-3].item), thd->mem_root); + (yyval.item)= new (thd->mem_root) Item_row(thd, *(yyvsp[-1].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29440 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1331: - -/* Line 1455 of yacc.c */ -#line 9104 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9096 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(5) - (6)].item_list)->push_front((yyvsp[(3) - (6)].item), thd->mem_root); - (yyval.item)= new (thd->mem_root) Item_row(thd, *(yyvsp[(5) - (6)].item_list)); + (yyvsp[-1].item_list)->push_front((yyvsp[-3].item), thd->mem_root); + (yyval.item)= new (thd->mem_root) Item_row(thd, *(yyvsp[-1].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29451 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1332: - -/* Line 1455 of yacc.c */ -#line 9111 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_exists_subselect(thd, (yyvsp[(3) - (4)].select_lex)); + (yyval.item)= new (thd->mem_root) Item_exists_subselect(thd, (yyvsp[-1].select_lex)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29461 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1333: - -/* Line 1455 of yacc.c */ -#line 9117 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9109 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= NULL; /* @@ -31680,10 +29472,10 @@ SELECT {t'10:20:30'}; SELECT {ts'2001-01-01 10:20:30'}; */ - if ((yyvsp[(3) - (4)].item)->type() == Item::STRING_ITEM) + if ((yyvsp[-1].item)->type() == Item::STRING_ITEM) { - Item_string *item= (Item_string *) (yyvsp[(3) - (4)].item); - enum_field_types type= item->odbc_temporal_literal_type(&(yyvsp[(2) - (4)].lex_str)); + Item_string *item= (Item_string *) (yyvsp[-1].item); + enum_field_types type= item->odbc_temporal_literal_type(&(yyvsp[-2].lex_str)); if (type != MYSQL_TYPE_STRING) { (yyval.item)= create_temporal_literal(thd, item->val_str(NULL), @@ -31691,148 +29483,136 @@ } } if ((yyval.item) == NULL) - (yyval.item)= (yyvsp[(3) - (4)].item); + (yyval.item)= (yyvsp[-1].item); } +#line 29489 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1334: - -/* Line 1455 of yacc.c */ -#line 9141 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9133 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(2) - (7)].item_list)->push_front((yyvsp[(5) - (7)].item), thd->mem_root); - Item_func_match *i1= new (thd->mem_root) Item_func_match(thd, *(yyvsp[(2) - (7)].item_list), - (yyvsp[(6) - (7)].num)); + (yyvsp[-5].item_list)->push_front((yyvsp[-2].item), thd->mem_root); + Item_func_match *i1= new (thd->mem_root) Item_func_match(thd, *(yyvsp[-5].item_list), + (yyvsp[-1].num)); if (i1 == NULL) MYSQL_YYABORT; Select->add_ftfunc_to_list(thd, i1); (yyval.item)= i1; } +#line 29503 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1335: - -/* Line 1455 of yacc.c */ -#line 9151 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9143 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= create_func_cast(thd, (yyvsp[(2) - (2)].item), ITEM_CAST_CHAR, NULL, NULL, + (yyval.item)= create_func_cast(thd, (yyvsp[0].item), ITEM_CAST_CHAR, NULL, NULL, &my_charset_bin); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29514 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1336: - -/* Line 1455 of yacc.c */ -#line 9158 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9150 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - (yyval.item)= create_func_cast(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].cast_type), lex->length, lex->dec, + (yyval.item)= create_func_cast(thd, (yyvsp[-3].item), (yyvsp[-1].cast_type), lex->length, lex->dec, lex->charset); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29526 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1337: - -/* Line 1455 of yacc.c */ -#line 9166 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9158 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_case(thd, *(yyvsp[(3) - (5)].item_list), (yyvsp[(2) - (5)].item), (yyvsp[(4) - (5)].item)); + (yyval.item)= new (thd->mem_root) Item_func_case(thd, *(yyvsp[-2].item_list), (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29536 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1338: - -/* Line 1455 of yacc.c */ -#line 9172 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9164 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= create_func_cast(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].cast_type), Lex->length, Lex->dec, + (yyval.item)= create_func_cast(thd, (yyvsp[-3].item), (yyvsp[-1].cast_type), Lex->length, Lex->dec, Lex->charset); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29547 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1339: - -/* Line 1455 of yacc.c */ -#line 9179 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9171 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_conv_charset(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].charset)); + (yyval.item)= new (thd->mem_root) Item_func_conv_charset(thd, (yyvsp[-3].item), (yyvsp[-1].charset)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29557 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1340: - -/* Line 1455 of yacc.c */ -#line 9185 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9177 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item_splocal *il= (yyvsp[(3) - (4)].item)->get_item_splocal(); + Item_splocal *il= (yyvsp[-1].item)->get_item_splocal(); if (il) my_yyabort_error((ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str)); (yyval.item)= new (thd->mem_root) Item_default_value(thd, Lex->current_context(), - (yyvsp[(3) - (4)].item)); + (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29571 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1341: - -/* Line 1455 of yacc.c */ -#line 9195 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9187 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_insert_value(thd, Lex->current_context(), - (yyvsp[(3) - (4)].item)); + (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29582 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1342: - -/* Line 1455 of yacc.c */ -#line 9203 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9195 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(5) - (5)].item), (yyvsp[(2) - (5)].item), (yyvsp[(3) - (5)].interval), 0); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[0].item), (yyvsp[-3].item), (yyvsp[-2].interval), 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29592 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1343: - -/* Line 1455 of yacc.c */ -#line 9218 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9210 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_char(thd, *(yyvsp[(3) - (4)].item_list)); + (yyval.item)= new (thd->mem_root) Item_func_char(thd, *(yyvsp[-1].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29602 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1344: - -/* Line 1455 of yacc.c */ -#line 9224 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9216 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_char(thd, *(yyvsp[(3) - (6)].item_list), (yyvsp[(5) - (6)].charset)); + (yyval.item)= new (thd->mem_root) Item_func_char(thd, *(yyvsp[-3].item_list), (yyvsp[-1].charset)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29612 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1345: - -/* Line 1455 of yacc.c */ -#line 9230 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9222 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_func_current_user(thd, Lex->current_context()); @@ -31841,12 +29621,11 @@ Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); Lex->safe_to_cache_query= 0; } +#line 29625 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1346: - -/* Line 1455 of yacc.c */ -#line 9239 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9231 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_func_current_role(thd, Lex->current_context()); @@ -31855,62 +29634,57 @@ Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); Lex->safe_to_cache_query= 0; } +#line 29638 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1347: - -/* Line 1455 of yacc.c */ -#line 9248 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9240 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_typecast(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_date_typecast(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29648 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1348: - -/* Line 1455 of yacc.c */ -#line 9254 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9246 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_dayofmonth(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_dayofmonth(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29658 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1349: - -/* Line 1455 of yacc.c */ -#line 9260 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9252 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_hour(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_hour(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29668 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1350: - -/* Line 1455 of yacc.c */ -#line 9266 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9258 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_insert(thd, (yyvsp[(3) - (10)].item), (yyvsp[(5) - (10)].item), (yyvsp[(7) - (10)].item), (yyvsp[(9) - (10)].item)); + (yyval.item)= new (thd->mem_root) Item_func_insert(thd, (yyvsp[-7].item), (yyvsp[-5].item), (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29678 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1351: - -/* Line 1455 of yacc.c */ -#line 9272 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9264 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { List *list= new (thd->mem_root) List; if (list == NULL) MYSQL_YYABORT; - list->push_front((yyvsp[(5) - (6)].item), thd->mem_root); - list->push_front((yyvsp[(3) - (6)].item), thd->mem_root); + list->push_front((yyvsp[-1].item), thd->mem_root); + list->push_front((yyvsp[-3].item), thd->mem_root); Item_row *item= new (thd->mem_root) Item_row(thd, *list); if (item == NULL) MYSQL_YYABORT; @@ -31918,206 +29692,188 @@ if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29696 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1352: - -/* Line 1455 of yacc.c */ -#line 9286 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9278 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(7) - (8)].item_list)->push_front((yyvsp[(5) - (8)].item), thd->mem_root); - (yyvsp[(7) - (8)].item_list)->push_front((yyvsp[(3) - (8)].item), thd->mem_root); - Item_row *item= new (thd->mem_root) Item_row(thd, *(yyvsp[(7) - (8)].item_list)); + (yyvsp[-1].item_list)->push_front((yyvsp[-3].item), thd->mem_root); + (yyvsp[-1].item_list)->push_front((yyvsp[-5].item), thd->mem_root); + Item_row *item= new (thd->mem_root) Item_row(thd, *(yyvsp[-1].item_list)); if (item == NULL) MYSQL_YYABORT; (yyval.item)= new (thd->mem_root) Item_func_interval(thd, item); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29711 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1353: - -/* Line 1455 of yacc.c */ -#line 9297 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9289 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_left(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_left(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29721 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1354: - -/* Line 1455 of yacc.c */ -#line 9303 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9295 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_minute(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_minute(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29731 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1355: - -/* Line 1455 of yacc.c */ -#line 9309 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9301 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_month(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_month(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29741 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1356: - -/* Line 1455 of yacc.c */ -#line 9315 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9307 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_right(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_right(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29751 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1357: - -/* Line 1455 of yacc.c */ -#line 9321 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9313 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_second(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_second(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29761 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1358: - -/* Line 1455 of yacc.c */ -#line 9327 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9319 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_time_typecast(thd, (yyvsp[(3) - (4)].item), + (yyval.item)= new (thd->mem_root) Item_time_typecast(thd, (yyvsp[-1].item), AUTO_SEC_PART_DIGITS); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29772 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1359: - -/* Line 1455 of yacc.c */ -#line 9334 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9326 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_datetime_typecast(thd, (yyvsp[(3) - (4)].item), + (yyval.item)= new (thd->mem_root) Item_datetime_typecast(thd, (yyvsp[-1].item), AUTO_SEC_PART_DIGITS); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29783 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1360: - -/* Line 1455 of yacc.c */ -#line 9341 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9333 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_add_time(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), 1, 0); + (yyval.item)= new (thd->mem_root) Item_func_add_time(thd, (yyvsp[-3].item), (yyvsp[-1].item), 1, 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29793 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1361: - -/* Line 1455 of yacc.c */ -#line 9347 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9339 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29803 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1362: - -/* Line 1455 of yacc.c */ -#line 9353 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9345 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_ltrim(thd, (yyvsp[(6) - (7)].item), (yyvsp[(4) - (7)].item)); + (yyval.item)= new (thd->mem_root) Item_func_ltrim(thd, (yyvsp[-1].item), (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29813 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1363: - -/* Line 1455 of yacc.c */ -#line 9359 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9351 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_rtrim(thd, (yyvsp[(6) - (7)].item), (yyvsp[(4) - (7)].item)); + (yyval.item)= new (thd->mem_root) Item_func_rtrim(thd, (yyvsp[-1].item), (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29823 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1364: - -/* Line 1455 of yacc.c */ -#line 9365 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9357 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[(6) - (7)].item), (yyvsp[(4) - (7)].item)); + (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[-1].item), (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29833 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1365: - -/* Line 1455 of yacc.c */ -#line 9371 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9363 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_ltrim(thd, (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_ltrim(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29843 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1366: - -/* Line 1455 of yacc.c */ -#line 9377 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9369 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_rtrim(thd, (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_rtrim(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29853 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1367: - -/* Line 1455 of yacc.c */ -#line 9383 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9375 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29863 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1368: - -/* Line 1455 of yacc.c */ -#line 9389 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9381 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[(5) - (6)].item), (yyvsp[(3) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_trim(thd, (yyvsp[-1].item), (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29873 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1369: - -/* Line 1455 of yacc.c */ -#line 9395 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9387 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_func_user(thd); if ((yyval.item) == NULL) @@ -32125,204 +29881,186 @@ Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); Lex->safe_to_cache_query=0; } +#line 29885 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1370: - -/* Line 1455 of yacc.c */ -#line 9403 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9395 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_year(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_year(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29895 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1371: - -/* Line 1455 of yacc.c */ -#line 9424 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9416 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-3].item), (yyvsp[-1].item), INTERVAL_DAY, 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29906 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1372: - -/* Line 1455 of yacc.c */ -#line 9431 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9423 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(3) - (8)].item), (yyvsp[(6) - (8)].item), (yyvsp[(7) - (8)].interval), 0); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-5].item), (yyvsp[-2].item), (yyvsp[-1].interval), 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29916 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1373: - -/* Line 1455 of yacc.c */ -#line 9437 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9429 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_func_curdate_local(thd); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 29927 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1374: - -/* Line 1455 of yacc.c */ -#line 9444 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9436 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_curtime_local(thd, (yyvsp[(2) - (2)].num)); + (yyval.item)= new (thd->mem_root) Item_func_curtime_local(thd, (yyvsp[0].num)); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 29938 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1375: - -/* Line 1455 of yacc.c */ -#line 9452 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9444 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(3) - (8)].item), (yyvsp[(6) - (8)].item), (yyvsp[(7) - (8)].interval), 0); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-5].item), (yyvsp[-2].item), (yyvsp[-1].interval), 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29948 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1376: - -/* Line 1455 of yacc.c */ -#line 9459 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9451 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(3) - (8)].item), (yyvsp[(6) - (8)].item), (yyvsp[(7) - (8)].interval), 1); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-5].item), (yyvsp[-2].item), (yyvsp[-1].interval), 1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29958 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1377: - -/* Line 1455 of yacc.c */ -#line 9465 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9457 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)=new (thd->mem_root) Item_extract(thd, (yyvsp[(3) - (6)].interval), (yyvsp[(5) - (6)].item)); + (yyval.item)=new (thd->mem_root) Item_extract(thd, (yyvsp[-3].interval), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29968 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1378: - -/* Line 1455 of yacc.c */ -#line 9471 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9463 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_get_format(thd, (yyvsp[(3) - (6)].date_time_type), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_get_format(thd, (yyvsp[-3].date_time_type), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29978 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1379: - -/* Line 1455 of yacc.c */ -#line 9477 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9469 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[(2) - (2)].num)); + (yyval.item)= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[0].num)); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 29989 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1380: - -/* Line 1455 of yacc.c */ -#line 9484 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9476 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_locate(thd, (yyvsp[(5) - (6)].item), (yyvsp[(3) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_locate(thd, (yyvsp[-1].item), (yyvsp[-3].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 29999 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1381: - -/* Line 1455 of yacc.c */ -#line 9490 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9482 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-3].item), (yyvsp[-1].item), INTERVAL_DAY, 1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30010 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1382: - -/* Line 1455 of yacc.c */ -#line 9497 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9489 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(3) - (8)].item), (yyvsp[(6) - (8)].item), (yyvsp[(7) - (8)].interval), 1); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-5].item), (yyvsp[-2].item), (yyvsp[-1].interval), 1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30020 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1383: - -/* Line 1455 of yacc.c */ -#line 9503 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9495 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[(3) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].item)); + (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[-5].item), (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30030 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1384: - -/* Line 1455 of yacc.c */ -#line 9509 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9501 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30040 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1385: - -/* Line 1455 of yacc.c */ -#line 9515 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9507 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[(3) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].item)); + (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[-5].item), (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30050 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1386: - -/* Line 1455 of yacc.c */ -#line 9521 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9513 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_substr(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30060 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1387: - -/* Line 1455 of yacc.c */ -#line 9527 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9519 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Unlike other time-related functions, SYSDATE() is @@ -32333,326 +30071,298 @@ */ Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); if (global_system_variables.sysdate_is_now == 0) - (yyval.item)= new (thd->mem_root) Item_func_sysdate_local(thd, (yyvsp[(2) - (2)].num)); + (yyval.item)= new (thd->mem_root) Item_func_sysdate_local(thd, (yyvsp[0].num)); else - (yyval.item)= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[(2) - (2)].num)); + (yyval.item)= new (thd->mem_root) Item_func_now_local(thd, (yyvsp[0].num)); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 30082 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1388: - -/* Line 1455 of yacc.c */ -#line 9545 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9537 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[(7) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(3) - (8)].interval_time_st), 0); + (yyval.item)= new (thd->mem_root) Item_date_add_interval(thd, (yyvsp[-1].item), (yyvsp[-3].item), (yyvsp[-5].interval_time_st), 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30092 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1389: - -/* Line 1455 of yacc.c */ -#line 9551 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9543 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_timestamp_diff(thd, (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].item), (yyvsp[(3) - (8)].interval_time_st)); + (yyval.item)= new (thd->mem_root) Item_func_timestamp_diff(thd, (yyvsp[-3].item), (yyvsp[-1].item), (yyvsp[-5].interval_time_st)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30102 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1390: - -/* Line 1455 of yacc.c */ -#line 9557 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9549 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_func_curdate_utc(thd); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 30113 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1391: - -/* Line 1455 of yacc.c */ -#line 9564 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9556 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_curtime_utc(thd, (yyvsp[(2) - (2)].num)); + (yyval.item)= new (thd->mem_root) Item_func_curtime_utc(thd, (yyvsp[0].num)); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 30124 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1392: - -/* Line 1455 of yacc.c */ -#line 9571 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9563 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_now_utc(thd, (yyvsp[(2) - (2)].num)); + (yyval.item)= new (thd->mem_root) Item_func_now_utc(thd, (yyvsp[0].num)); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 30135 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1393: - -/* Line 1455 of yacc.c */ -#line 9579 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9571 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= create_func_dyncol_add(thd, (yyvsp[(3) - (6)].item), *(yyvsp[(5) - (6)].dyncol_def_list)); + (yyval.item)= create_func_dyncol_add(thd, (yyvsp[-3].item), *(yyvsp[-1].dyncol_def_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30145 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1394: - -/* Line 1455 of yacc.c */ -#line 9586 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9578 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= create_func_dyncol_delete(thd, (yyvsp[(3) - (6)].item), *(yyvsp[(5) - (6)].item_list)); + (yyval.item)= create_func_dyncol_delete(thd, (yyvsp[-3].item), *(yyvsp[-1].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30155 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1395: - -/* Line 1455 of yacc.c */ -#line 9593 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9585 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_dyncol_check(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_dyncol_check(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30165 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1396: - -/* Line 1455 of yacc.c */ -#line 9600 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9592 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= create_func_dyncol_create(thd, *(yyvsp[(3) - (4)].dyncol_def_list)); + (yyval.item)= create_func_dyncol_create(thd, *(yyvsp[-1].dyncol_def_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30175 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1397: - -/* Line 1455 of yacc.c */ -#line 9607 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9599 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - (yyval.item)= create_func_dyncol_get(thd, (yyvsp[(3) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].cast_type), + (yyval.item)= create_func_dyncol_get(thd, (yyvsp[-5].item), (yyvsp[-3].item), (yyvsp[-1].cast_type), lex->length, lex->dec, lex->charset); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30188 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1398: - -/* Line 1455 of yacc.c */ -#line 9624 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9616 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_ascii(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_ascii(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30198 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1399: - -/* Line 1455 of yacc.c */ -#line 9630 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9622 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_charset(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_charset(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30208 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1400: - -/* Line 1455 of yacc.c */ -#line 9636 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9628 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_coalesce(thd, *(yyvsp[(3) - (4)].item_list)); + (yyval.item)= new (thd->mem_root) Item_func_coalesce(thd, *(yyvsp[-1].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30218 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1401: - -/* Line 1455 of yacc.c */ -#line 9642 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9634 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_collation(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_collation(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30228 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1402: - -/* Line 1455 of yacc.c */ -#line 9648 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9640 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_func_database(thd); if ((yyval.item) == NULL) MYSQL_YYABORT; Lex->safe_to_cache_query=0; } +#line 30239 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1403: - -/* Line 1455 of yacc.c */ -#line 9655 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9647 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_if(thd, (yyvsp[(3) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].item)); + (yyval.item)= new (thd->mem_root) Item_func_if(thd, (yyvsp[-5].item), (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30249 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1404: - -/* Line 1455 of yacc.c */ -#line 9661 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9653 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_format(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_format(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30259 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1405: - -/* Line 1455 of yacc.c */ -#line 9667 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9659 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_format(thd, (yyvsp[(3) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].item)); + (yyval.item)= new (thd->mem_root) Item_func_format(thd, (yyvsp[-5].item), (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30269 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1406: - -/* Line 1455 of yacc.c */ -#line 9673 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9665 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_last_value(thd, *(yyvsp[(3) - (4)].item_list)); + (yyval.item)= new (thd->mem_root) Item_func_last_value(thd, *(yyvsp[-1].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30279 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1407: - -/* Line 1455 of yacc.c */ -#line 9679 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9671 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_microsecond(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_microsecond(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30289 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1408: - -/* Line 1455 of yacc.c */ -#line 9685 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9677 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_mod(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_mod(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30299 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1409: - -/* Line 1455 of yacc.c */ -#line 9691 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9683 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) - Item_func_password(thd, (yyvsp[(3) - (4)].item), Item_func_password::OLD); + Item_func_password(thd, (yyvsp[-1].item), Item_func_password::OLD); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30310 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1410: - -/* Line 1455 of yacc.c */ -#line 9698 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9690 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item* i1; - i1= new (thd->mem_root) Item_func_password(thd, (yyvsp[(3) - (4)].item)); + i1= new (thd->mem_root) Item_func_password(thd, (yyvsp[-1].item)); if (i1 == NULL) MYSQL_YYABORT; (yyval.item)= i1; } +#line 30322 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1411: - -/* Line 1455 of yacc.c */ -#line 9706 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9698 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_quarter(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_quarter(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30332 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1412: - -/* Line 1455 of yacc.c */ -#line 9712 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9704 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_repeat(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_repeat(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30342 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1413: - -/* Line 1455 of yacc.c */ -#line 9718 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9710 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_replace(thd, (yyvsp[(3) - (8)].item), (yyvsp[(5) - (8)].item), (yyvsp[(7) - (8)].item)); + (yyval.item)= new (thd->mem_root) Item_func_replace(thd, (yyvsp[-5].item), (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30352 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1414: - -/* Line 1455 of yacc.c */ -#line 9724 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9716 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_reverse(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_func_reverse(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30362 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1415: - -/* Line 1455 of yacc.c */ -#line 9730 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9722 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_func_row_count(thd); if ((yyval.item) == NULL) @@ -32660,23 +30370,21 @@ Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); Lex->safe_to_cache_query= 0; } +#line 30374 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1416: - -/* Line 1455 of yacc.c */ -#line 9738 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9730 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_round(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), 1); + (yyval.item)= new (thd->mem_root) Item_func_round(thd, (yyvsp[-3].item), (yyvsp[-1].item), 1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30384 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1417: - -/* Line 1455 of yacc.c */ -#line 9744 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9736 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item *i1; LEX_STRING name= {C_STRING_WITH_LEN("default_week_format")}; @@ -32686,83 +30394,77 @@ i1->set_name((const char *) STRING_WITH_LEN("@@default_week_format"), system_charset_info); - (yyval.item)= new (thd->mem_root) Item_func_week(thd, (yyvsp[(3) - (4)].item), i1); + (yyval.item)= new (thd->mem_root) Item_func_week(thd, (yyvsp[-1].item), i1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30402 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1418: - -/* Line 1455 of yacc.c */ -#line 9758 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9750 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_week(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item)); + (yyval.item)= new (thd->mem_root) Item_func_week(thd, (yyvsp[-3].item), (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30412 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1419: - -/* Line 1455 of yacc.c */ -#line 9764 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9756 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_weight_string(thd, (yyvsp[(3) - (5)].item), 0, 0, (yyvsp[(4) - (5)].ulong_num)); + (yyval.item)= new (thd->mem_root) Item_func_weight_string(thd, (yyvsp[-2].item), 0, 0, (yyvsp[-1].ulong_num)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30422 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1420: - -/* Line 1455 of yacc.c */ -#line 9770 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9762 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) - Item_func_weight_string(thd, (yyvsp[(3) - (8)].item), 0, (yyvsp[(6) - (8)].ulong_num), - (yyvsp[(7) - (8)].ulong_num) | MY_STRXFRM_PAD_WITH_SPACE); + Item_func_weight_string(thd, (yyvsp[-5].item), 0, (yyvsp[-2].ulong_num), + (yyvsp[-1].ulong_num) | MY_STRXFRM_PAD_WITH_SPACE); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30434 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1421: - -/* Line 1455 of yacc.c */ -#line 9778 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9770 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *item= new (thd->mem_root) Item_char_typecast(thd, (yyvsp[(3) - (7)].item), (yyvsp[(6) - (7)].ulong_num), + Item *item= new (thd->mem_root) Item_char_typecast(thd, (yyvsp[-4].item), (yyvsp[-1].ulong_num), &my_charset_bin); if (item == NULL) MYSQL_YYABORT; (yyval.item)= new (thd->mem_root) - Item_func_weight_string(thd, item, 0, (yyvsp[(6) - (7)].ulong_num), + Item_func_weight_string(thd, item, 0, (yyvsp[-1].ulong_num), MY_STRXFRM_PAD_WITH_SPACE); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30450 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1422: - -/* Line 1455 of yacc.c */ -#line 9790 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9782 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_weight_string(thd, (yyvsp[(3) - (10)].item), (yyvsp[(5) - (10)].ulong_num), (yyvsp[(7) - (10)].ulong_num), - (yyvsp[(9) - (10)].ulong_num)); + (yyval.item)= new (thd->mem_root) Item_func_weight_string(thd, (yyvsp[-7].item), (yyvsp[-5].ulong_num), (yyvsp[-3].ulong_num), + (yyvsp[-1].ulong_num)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30461 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1423: - -/* Line 1455 of yacc.c */ -#line 9797 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9789 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { #ifdef HAVE_SPATIAL - (yyval.item)= (yyvsp[(1) - (1)].item); + (yyval.item)= (yyvsp[0].item); /* $1 may be NULL, GEOM_NEW not tested for out of memory */ if ((yyval.item) == NULL) MYSQL_YYABORT; @@ -32771,110 +30473,101 @@ sym_group_geom.needed_define)); #endif } +#line 30477 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1424: - -/* Line 1455 of yacc.c */ -#line 9812 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9804 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= GEOM_NEW(thd, - Item_func_spatial_precise_rel(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item), + Item_func_spatial_precise_rel(thd, (yyvsp[-3].item), (yyvsp[-1].item), Item_func::SP_CONTAINS_FUNC)); } +#line 30487 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1425: - -/* Line 1455 of yacc.c */ -#line 9818 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9810 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= GEOM_NEW(thd, - Item_func_spatial_collection(thd, *(yyvsp[(3) - (4)].item_list), + Item_func_spatial_collection(thd, *(yyvsp[-1].item_list), Geometry::wkb_geometrycollection, Geometry::wkb_point)); } +#line 30498 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1426: - -/* Line 1455 of yacc.c */ -#line 9825 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9817 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= GEOM_NEW(thd, - Item_func_spatial_collection(thd, *(yyvsp[(3) - (4)].item_list), + Item_func_spatial_collection(thd, *(yyvsp[-1].item_list), Geometry::wkb_linestring, Geometry::wkb_point)); } +#line 30509 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1427: - -/* Line 1455 of yacc.c */ -#line 9832 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9824 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= GEOM_NEW(thd, - Item_func_spatial_collection(thd, *(yyvsp[(3) - (4)].item_list), + Item_func_spatial_collection(thd, *(yyvsp[-1].item_list), Geometry::wkb_multilinestring, Geometry::wkb_linestring)); } +#line 30520 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1428: - -/* Line 1455 of yacc.c */ -#line 9839 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9831 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= GEOM_NEW(thd, - Item_func_spatial_collection(thd, *(yyvsp[(3) - (4)].item_list), + Item_func_spatial_collection(thd, *(yyvsp[-1].item_list), Geometry::wkb_multipoint, Geometry::wkb_point)); } +#line 30531 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1429: - -/* Line 1455 of yacc.c */ -#line 9846 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9838 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= GEOM_NEW(thd, - Item_func_spatial_collection(thd, *(yyvsp[(3) - (4)].item_list), + Item_func_spatial_collection(thd, *(yyvsp[-1].item_list), Geometry::wkb_multipolygon, Geometry::wkb_polygon)); } +#line 30542 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1430: - -/* Line 1455 of yacc.c */ -#line 9853 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9845 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= GEOM_NEW(thd, Item_func_point(thd, (yyvsp[(3) - (6)].item), (yyvsp[(5) - (6)].item))); + (yyval.item)= GEOM_NEW(thd, Item_func_point(thd, (yyvsp[-3].item), (yyvsp[-1].item))); } +#line 30550 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1431: - -/* Line 1455 of yacc.c */ -#line 9857 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9849 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= GEOM_NEW(thd, - Item_func_spatial_collection(thd, *(yyvsp[(3) - (4)].item_list), + Item_func_spatial_collection(thd, *(yyvsp[-1].item_list), Geometry::wkb_polygon, Geometry::wkb_linestring)); } +#line 30561 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1432: - -/* Line 1455 of yacc.c */ -#line 9876 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9868 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { #ifdef HAVE_DLOPEN udf_func *udf= 0; LEX *lex= Lex; if (using_udf_functions && - (udf= find_udf((yyvsp[(1) - (2)].lex_str).str, (yyvsp[(1) - (2)].lex_str).length)) && + (udf= find_udf((yyvsp[-1].lex_str).str, (yyvsp[-1].lex_str).length)) && udf->type == UDFTYPE_AGGREGATE) { if (lex->current_select->inc_in_sum_expr()) @@ -32887,17 +30580,16 @@ (yyval.udf)= udf; #endif } +#line 30584 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1433: - -/* Line 1455 of yacc.c */ -#line 9895 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9887 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Create_func *builder; Item *item= NULL; - if (check_routine_name(&(yyvsp[(1) - (5)].lex_str))) + if (check_routine_name(&(yyvsp[-4].lex_str))) { MYSQL_YYABORT; } @@ -32911,16 +30603,16 @@ This will be revised with WL#2128 (SQL PATH) */ - builder= find_native_function_builder(thd, (yyvsp[(1) - (5)].lex_str)); + builder= find_native_function_builder(thd, (yyvsp[-4].lex_str)); if (builder) { - item= builder->create_func(thd, (yyvsp[(1) - (5)].lex_str), (yyvsp[(4) - (5)].item_list)); + item= builder->create_func(thd, (yyvsp[-4].lex_str), (yyvsp[-1].item_list)); } else { #ifdef HAVE_DLOPEN /* Retrieving the result of find_udf */ - udf_func *udf= (yyvsp[(3) - (5)].udf); + udf_func *udf= (yyvsp[-2].udf); if (udf) { @@ -32929,14 +30621,14 @@ Select->in_sum_expr--; } - item= Create_udf_func::s_singleton.create(thd, udf, (yyvsp[(4) - (5)].item_list)); + item= Create_udf_func::s_singleton.create(thd, udf, (yyvsp[-1].item_list)); } else #endif { builder= find_qualified_function_builder(thd); DBUG_ASSERT(builder); - item= builder->create_func(thd, (yyvsp[(1) - (5)].lex_str), (yyvsp[(4) - (5)].item_list)); + item= builder->create_func(thd, (yyvsp[-4].lex_str), (yyvsp[-1].item_list)); } } @@ -32945,12 +30637,11 @@ MYSQL_YYABORT; } } +#line 30641 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1434: - -/* Line 1455 of yacc.c */ -#line 9948 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9940 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Create_qfunc *builder; Item *item= NULL; @@ -32969,106 +30660,95 @@ version() (a vendor can specify any schema). */ - if (!(yyvsp[(1) - (6)].lex_str).str || check_db_name(&(yyvsp[(1) - (6)].lex_str))) - my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[(1) - (6)].lex_str).str)); - if (check_routine_name(&(yyvsp[(3) - (6)].lex_str))) + if (!(yyvsp[-5].lex_str).str || check_db_name(&(yyvsp[-5].lex_str))) + my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[-5].lex_str).str)); + if (check_routine_name(&(yyvsp[-3].lex_str))) { MYSQL_YYABORT; } builder= find_qualified_function_builder(thd); DBUG_ASSERT(builder); - item= builder->create_with_db(thd, (yyvsp[(1) - (6)].lex_str), (yyvsp[(3) - (6)].lex_str), true, (yyvsp[(5) - (6)].item_list)); + item= builder->create_with_db(thd, (yyvsp[-5].lex_str), (yyvsp[-3].lex_str), true, (yyvsp[-1].item_list)); if (! ((yyval.item)= item)) { MYSQL_YYABORT; } } +#line 30680 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1435: - -/* Line 1455 of yacc.c */ -#line 9986 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.num)= (yyvsp[(1) - (2)].num) | (yyvsp[(2) - (2)].num); } +#line 9978 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.num)= (yyvsp[-1].num) | (yyvsp[0].num); } +#line 30686 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1436: - -/* Line 1455 of yacc.c */ -#line 9988 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9980 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= FT_BOOL; } +#line 30692 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1437: - -/* Line 1455 of yacc.c */ -#line 9992 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9984 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= FT_NL; } +#line 30698 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1438: - -/* Line 1455 of yacc.c */ -#line 9993 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9985 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= FT_NL; } +#line 30704 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1439: - -/* Line 1455 of yacc.c */ -#line 9997 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9989 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 30710 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1440: - -/* Line 1455 of yacc.c */ -#line 9998 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9990 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= FT_EXPAND; } +#line 30716 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1441: - -/* Line 1455 of yacc.c */ -#line 10002 "/home/buildbot/git/sql/sql_yacc.yy" +#line 9994 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item_list)= NULL; } +#line 30722 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1442: - -/* Line 1455 of yacc.c */ -#line 10003 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item_list)= (yyvsp[(1) - (1)].item_list); } +#line 9995 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item_list)= (yyvsp[0].item_list); } +#line 30728 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1443: - -/* Line 1455 of yacc.c */ -#line 10008 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10000 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item_list)= new (thd->mem_root) List; if ((yyval.item_list) == NULL) MYSQL_YYABORT; - (yyval.item_list)->push_back((yyvsp[(1) - (1)].item), thd->mem_root); + (yyval.item_list)->push_back((yyvsp[0].item), thd->mem_root); } +#line 30739 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1444: - -/* Line 1455 of yacc.c */ -#line 10015 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10007 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(1) - (3)].item_list)->push_back((yyvsp[(3) - (3)].item), thd->mem_root); - (yyval.item_list)= (yyvsp[(1) - (3)].item_list); + (yyvsp[-2].item_list)->push_back((yyvsp[0].item), thd->mem_root); + (yyval.item_list)= (yyvsp[-2].item_list); } +#line 30748 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1445: - -/* Line 1455 of yacc.c */ -#line 10023 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10015 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Use Item::name as a storage for the attribute value of user @@ -33076,10 +30756,10 @@ because the syntax will not allow having an explicit name here. See WL#1017 re. udf attributes. */ - if ((yyvsp[(4) - (4)].lex_str).str) + if ((yyvsp[0].lex_str).str) { - (yyvsp[(2) - (4)].item)->is_autogenerated_name= FALSE; - (yyvsp[(2) - (4)].item)->set_name((yyvsp[(4) - (4)].lex_str).str, (yyvsp[(4) - (4)].lex_str).length, system_charset_info); + (yyvsp[-2].item)->is_autogenerated_name= FALSE; + (yyvsp[-2].item)->set_name((yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, system_charset_info); } /* A field has to have its proper name in order for name @@ -33087,72 +30767,66 @@ parse it out. If we hijack the input stream with remember_name we may get quoted or escaped names. */ - else if ((yyvsp[(2) - (4)].item)->type() != Item::FIELD_ITEM && - (yyvsp[(2) - (4)].item)->type() != Item::REF_ITEM /* For HAVING */ ) - (yyvsp[(2) - (4)].item)->set_name((yyvsp[(1) - (4)].simple_string), (uint) ((yyvsp[(3) - (4)].simple_string) - (yyvsp[(1) - (4)].simple_string)), thd->charset()); - (yyval.item)= (yyvsp[(2) - (4)].item); + else if ((yyvsp[-2].item)->type() != Item::FIELD_ITEM && + (yyvsp[-2].item)->type() != Item::REF_ITEM /* For HAVING */ ) + (yyvsp[-2].item)->set_name((yyvsp[-3].simple_string), (uint) ((yyvsp[-1].simple_string) - (yyvsp[-3].simple_string)), thd->charset()); + (yyval.item)= (yyvsp[-2].item); } +#line 30776 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1446: - -/* Line 1455 of yacc.c */ -#line 10050 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10042 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_avg(thd, (yyvsp[(3) - (4)].item), FALSE); + (yyval.item)= new (thd->mem_root) Item_sum_avg(thd, (yyvsp[-1].item), FALSE); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30786 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1447: - -/* Line 1455 of yacc.c */ -#line 10056 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10048 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_avg(thd, (yyvsp[(4) - (5)].item), TRUE); + (yyval.item)= new (thd->mem_root) Item_sum_avg(thd, (yyvsp[-1].item), TRUE); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30796 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1448: - -/* Line 1455 of yacc.c */ -#line 10062 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10054 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_and(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_and(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30806 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1449: - -/* Line 1455 of yacc.c */ -#line 10068 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10060 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_or(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_or(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30816 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1450: - -/* Line 1455 of yacc.c */ -#line 10074 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10066 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_xor(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_xor(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30826 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1451: - -/* Line 1455 of yacc.c */ -#line 10080 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10072 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item *item= new (thd->mem_root) Item_int(thd, (int32) 0L, 1); if (item == NULL) @@ -33161,279 +30835,253 @@ if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30839 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1452: - -/* Line 1455 of yacc.c */ -#line 10089 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10081 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_count(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_count(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30849 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1453: - -/* Line 1455 of yacc.c */ -#line 10095 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10087 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->in_sum_expr++; } +#line 30855 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1454: - -/* Line 1455 of yacc.c */ -#line 10097 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10089 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->in_sum_expr--; } +#line 30861 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1455: - -/* Line 1455 of yacc.c */ -#line 10099 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10091 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_count(thd, *(yyvsp[(5) - (7)].item_list)); + (yyval.item)= new (thd->mem_root) Item_sum_count(thd, *(yyvsp[-2].item_list)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30871 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1456: - -/* Line 1455 of yacc.c */ -#line 10105 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10097 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_min(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_min(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30881 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1457: - -/* Line 1455 of yacc.c */ -#line 10116 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10108 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_min(thd, (yyvsp[(4) - (5)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_min(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30891 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1458: - -/* Line 1455 of yacc.c */ -#line 10122 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10114 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_max(thd, (yyvsp[(3) - (4)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_max(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30901 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1459: - -/* Line 1455 of yacc.c */ -#line 10128 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10120 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_max(thd, (yyvsp[(4) - (5)].item)); + (yyval.item)= new (thd->mem_root) Item_sum_max(thd, (yyvsp[-1].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30911 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1460: - -/* Line 1455 of yacc.c */ -#line 10134 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10126 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_std(thd, (yyvsp[(3) - (4)].item), 0); + (yyval.item)= new (thd->mem_root) Item_sum_std(thd, (yyvsp[-1].item), 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30921 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1461: - -/* Line 1455 of yacc.c */ -#line 10140 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10132 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_variance(thd, (yyvsp[(3) - (4)].item), 0); + (yyval.item)= new (thd->mem_root) Item_sum_variance(thd, (yyvsp[-1].item), 0); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30931 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1462: - -/* Line 1455 of yacc.c */ -#line 10146 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10138 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_std(thd, (yyvsp[(3) - (4)].item), 1); + (yyval.item)= new (thd->mem_root) Item_sum_std(thd, (yyvsp[-1].item), 1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30941 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1463: - -/* Line 1455 of yacc.c */ -#line 10152 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10144 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_variance(thd, (yyvsp[(3) - (4)].item), 1); + (yyval.item)= new (thd->mem_root) Item_sum_variance(thd, (yyvsp[-1].item), 1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30951 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1464: - -/* Line 1455 of yacc.c */ -#line 10158 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10150 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_sum(thd, (yyvsp[(3) - (4)].item), FALSE); + (yyval.item)= new (thd->mem_root) Item_sum_sum(thd, (yyvsp[-1].item), FALSE); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30961 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1465: - -/* Line 1455 of yacc.c */ -#line 10164 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10156 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_sum_sum(thd, (yyvsp[(4) - (5)].item), TRUE); + (yyval.item)= new (thd->mem_root) Item_sum_sum(thd, (yyvsp[-1].item), TRUE); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 30971 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1466: - -/* Line 1455 of yacc.c */ -#line 10170 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10162 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->in_sum_expr++; } +#line 30977 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1467: - -/* Line 1455 of yacc.c */ -#line 10174 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10166 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; sel->in_sum_expr--; (yyval.item)= new (thd->mem_root) - Item_func_group_concat(thd, Lex->current_context(), (yyvsp[(3) - (8)].num), (yyvsp[(5) - (8)].item_list), - sel->gorder_list, (yyvsp[(7) - (8)].string)); + Item_func_group_concat(thd, Lex->current_context(), (yyvsp[-5].num), (yyvsp[-3].item_list), + sel->gorder_list, (yyvsp[-1].string)); if ((yyval.item) == NULL) MYSQL_YYABORT; - (yyvsp[(5) - (8)].item_list)->empty(); + (yyvsp[-3].item_list)->empty(); sel->gorder_list.empty(); } +#line 30993 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1468: - -/* Line 1455 of yacc.c */ -#line 10189 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10181 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (! Lex->parsing_options.allows_variable) my_yyabort_error((ER_VIEW_SELECT_VARIABLE, MYF(0))); } +#line 31002 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1469: - -/* Line 1455 of yacc.c */ -#line 10194 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10186 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= (yyvsp[(3) - (3)].item); + (yyval.item)= (yyvsp[0].item); } +#line 31010 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1470: - -/* Line 1455 of yacc.c */ -#line 10201 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10193 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item_func_set_user_var *item; - (yyval.item)= item= new (thd->mem_root) Item_func_set_user_var(thd, (yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].item)); + (yyval.item)= item= new (thd->mem_root) Item_func_set_user_var(thd, (yyvsp[-2].lex_str), (yyvsp[0].item)); if ((yyval.item) == NULL) MYSQL_YYABORT; LEX *lex= Lex; lex->uncacheable(UNCACHEABLE_SIDEEFFECT); lex->set_var_list.push_back(item, thd->mem_root); } +#line 31024 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1471: - -/* Line 1455 of yacc.c */ -#line 10211 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10203 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_func_get_user_var(thd, (yyvsp[(1) - (1)].lex_str)); + (yyval.item)= new (thd->mem_root) Item_func_get_user_var(thd, (yyvsp[0].lex_str)); if ((yyval.item) == NULL) MYSQL_YYABORT; LEX *lex= Lex; lex->uncacheable(UNCACHEABLE_SIDEEFFECT); } +#line 31036 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1472: - -/* Line 1455 of yacc.c */ -#line 10219 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10211 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* disallow "SELECT @@global.global.variable" */ - if ((yyvsp[(3) - (4)].lex_str).str && (yyvsp[(4) - (4)].lex_str).str && check_reserved_words(&(yyvsp[(3) - (4)].lex_str))) + if ((yyvsp[-1].lex_str).str && (yyvsp[0].lex_str).str && check_reserved_words(&(yyvsp[-1].lex_str))) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } - if (!((yyval.item)= get_system_var(thd, (yyvsp[(2) - (4)].var_type), (yyvsp[(3) - (4)].lex_str), (yyvsp[(4) - (4)].lex_str)))) + if (!((yyval.item)= get_system_var(thd, (yyvsp[-2].var_type), (yyvsp[-1].lex_str), (yyvsp[0].lex_str)))) MYSQL_YYABORT; if (!((Item_func_get_system_var*) (yyval.item))->is_written_to_binlog()) Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE); } +#line 31053 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1473: - -/* Line 1455 of yacc.c */ -#line 10234 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10226 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 0; } +#line 31059 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1474: - -/* Line 1455 of yacc.c */ -#line 10235 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10227 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 1; } +#line 31065 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1475: - -/* Line 1455 of yacc.c */ -#line 10240 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10232 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.string)= new (thd->mem_root) String(",", 1, &my_charset_latin1); if ((yyval.string) == NULL) MYSQL_YYABORT; } +#line 31075 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1476: - -/* Line 1455 of yacc.c */ -#line 10245 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.string) = (yyvsp[(2) - (2)].string); } +#line 10237 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.string) = (yyvsp[0].string); } +#line 31081 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1478: - -/* Line 1455 of yacc.c */ -#line 10251 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10243 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -33445,26 +31093,23 @@ "CUBE/ROLLUP", "ORDER BY")); } } +#line 31097 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1480: - -/* Line 1455 of yacc.c */ -#line 10267 "/home/buildbot/git/sql/sql_yacc.yy" - { if (add_gorder_to_list(thd, (yyvsp[(3) - (4)].item),(bool) (yyvsp[(4) - (4)].num))) MYSQL_YYABORT; } +#line 10259 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { if (add_gorder_to_list(thd, (yyvsp[-1].item),(bool) (yyvsp[0].num))) MYSQL_YYABORT; } +#line 31103 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1481: - -/* Line 1455 of yacc.c */ -#line 10269 "/home/buildbot/git/sql/sql_yacc.yy" - { if (add_gorder_to_list(thd, (yyvsp[(1) - (2)].item),(bool) (yyvsp[(2) - (2)].num))) MYSQL_YYABORT; } +#line 10261 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { if (add_gorder_to_list(thd, (yyvsp[-1].item),(bool) (yyvsp[0].num))) MYSQL_YYABORT; } +#line 31109 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1482: - -/* Line 1455 of yacc.c */ -#line 10274 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10266 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->current_select->inc_in_sum_expr()) @@ -33473,266 +31118,234 @@ MYSQL_YYABORT; } } +#line 31122 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1483: - -/* Line 1455 of yacc.c */ -#line 10283 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10275 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->in_sum_expr--; - (yyval.item)= (yyvsp[(3) - (3)].item); + (yyval.item)= (yyvsp[0].item); } +#line 31131 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1484: - -/* Line 1455 of yacc.c */ -#line 10291 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10283 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_CHAR; Lex->charset= &my_charset_bin; Lex->dec= 0; } +#line 31137 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1485: - -/* Line 1455 of yacc.c */ -#line 10293 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10285 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset= thd->variables.collation_connection; } +#line 31143 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1486: - -/* Line 1455 of yacc.c */ -#line 10295 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10287 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_CHAR; Lex->dec= 0; } +#line 31149 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1487: - -/* Line 1455 of yacc.c */ -#line 10297 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10289 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_CHAR; Lex->charset= national_charset_info; Lex->dec=0; } +#line 31155 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1488: - -/* Line 1455 of yacc.c */ -#line 10299 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10291 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } +#line 31161 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1489: - -/* Line 1455 of yacc.c */ -#line 10301 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10293 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } +#line 31167 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1490: - -/* Line 1455 of yacc.c */ -#line 10303 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10295 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_SIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } +#line 31173 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1491: - -/* Line 1455 of yacc.c */ -#line 10305 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10297 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } +#line 31179 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1492: - -/* Line 1455 of yacc.c */ -#line 10307 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10299 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_UNSIGNED_INT; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } +#line 31185 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1493: - -/* Line 1455 of yacc.c */ -#line 10309 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10301 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_DATE; Lex->charset= NULL; Lex->dec=Lex->length= (char*)0; } +#line 31191 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1494: - -/* Line 1455 of yacc.c */ -#line 10311 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10303 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_TIME; LEX *lex= Lex; lex->charset= NULL; lex->dec= lex->length; lex->length= (char*)0; } +#line 31201 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1495: - -/* Line 1455 of yacc.c */ -#line 10317 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10309 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_DATETIME; LEX *lex= Lex; lex->charset= NULL; lex->dec= lex->length; lex->length= (char*)0; } +#line 31211 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1496: - -/* Line 1455 of yacc.c */ -#line 10323 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10315 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_DECIMAL; Lex->charset= NULL; } +#line 31217 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1497: - -/* Line 1455 of yacc.c */ -#line 10325 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10317 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->charset= NULL; Lex->length= Lex->dec= 0;} +#line 31223 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1498: - -/* Line 1455 of yacc.c */ -#line 10327 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10319 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.cast_type)=ITEM_CAST_DOUBLE; } +#line 31229 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1499: - -/* Line 1455 of yacc.c */ -#line 10330 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10322 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item_list)= NULL; } +#line 31235 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1500: - -/* Line 1455 of yacc.c */ -#line 10331 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item_list)= (yyvsp[(1) - (1)].item_list);} +#line 10323 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item_list)= (yyvsp[0].item_list);} +#line 31241 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1501: - -/* Line 1455 of yacc.c */ -#line 10336 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10328 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item_list)= new (thd->mem_root) List; if ((yyval.item_list) == NULL) MYSQL_YYABORT; - (yyval.item_list)->push_back((yyvsp[(1) - (1)].item), thd->mem_root); + (yyval.item_list)->push_back((yyvsp[0].item), thd->mem_root); } +#line 31252 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1502: - -/* Line 1455 of yacc.c */ -#line 10343 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10335 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(1) - (3)].item_list)->push_back((yyvsp[(3) - (3)].item), thd->mem_root); - (yyval.item_list)= (yyvsp[(1) - (3)].item_list); + (yyvsp[-2].item_list)->push_back((yyvsp[0].item), thd->mem_root); + (yyval.item_list)= (yyvsp[-2].item_list); } +#line 31261 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1503: - -/* Line 1455 of yacc.c */ -#line 10350 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item_list)= (yyvsp[(1) - (1)].item_list); } +#line 10342 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item_list)= (yyvsp[0].item_list); } +#line 31267 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1504: - -/* Line 1455 of yacc.c */ -#line 10351 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item_list)= (yyvsp[(2) - (3)].item_list); } +#line 10343 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item_list)= (yyvsp[-1].item_list); } +#line 31273 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1505: - -/* Line 1455 of yacc.c */ -#line 10356 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10348 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item_list)= new (thd->mem_root) List; if ((yyval.item_list) == NULL) MYSQL_YYABORT; - (yyval.item_list)->push_back((yyvsp[(1) - (1)].item), thd->mem_root); + (yyval.item_list)->push_back((yyvsp[0].item), thd->mem_root); } +#line 31284 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1506: - -/* Line 1455 of yacc.c */ -#line 10363 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10355 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(1) - (3)].item_list)->push_back((yyvsp[(3) - (3)].item), thd->mem_root); - (yyval.item_list)= (yyvsp[(1) - (3)].item_list); + (yyvsp[-2].item_list)->push_back((yyvsp[0].item), thd->mem_root); + (yyval.item_list)= (yyvsp[-2].item_list); } +#line 31293 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1507: - -/* Line 1455 of yacc.c */ -#line 10370 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10362 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= NULL; } +#line 31299 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1508: - -/* Line 1455 of yacc.c */ -#line 10371 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item); } +#line 10363 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 31305 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1509: - -/* Line 1455 of yacc.c */ -#line 10375 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10367 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= NULL; } +#line 31311 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1510: - -/* Line 1455 of yacc.c */ -#line 10376 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(2) - (2)].item); } +#line 10368 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 31317 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1511: - -/* Line 1455 of yacc.c */ -#line 10381 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10373 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item_list)= new (thd->mem_root) List; if ((yyval.item_list) == NULL) MYSQL_YYABORT; - (yyval.item_list)->push_back((yyvsp[(2) - (4)].item), thd->mem_root); - (yyval.item_list)->push_back((yyvsp[(4) - (4)].item), thd->mem_root); + (yyval.item_list)->push_back((yyvsp[-2].item), thd->mem_root); + (yyval.item_list)->push_back((yyvsp[0].item), thd->mem_root); } +#line 31329 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1512: - -/* Line 1455 of yacc.c */ -#line 10389 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10381 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(1) - (5)].item_list)->push_back((yyvsp[(3) - (5)].item), thd->mem_root); - (yyvsp[(1) - (5)].item_list)->push_back((yyvsp[(5) - (5)].item), thd->mem_root); - (yyval.item_list)= (yyvsp[(1) - (5)].item_list); + (yyvsp[-4].item_list)->push_back((yyvsp[-2].item), thd->mem_root); + (yyvsp[-4].item_list)->push_back((yyvsp[0].item), thd->mem_root); + (yyval.item_list)= (yyvsp[-4].item_list); } +#line 31339 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1513: - -/* Line 1455 of yacc.c */ -#line 10399 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.table_list)=(yyvsp[(1) - (1)].table_list); } +#line 10391 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.table_list)=(yyvsp[0].table_list); } +#line 31345 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1514: - -/* Line 1455 of yacc.c */ -#line 10401 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10393 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (!((yyval.table_list)= lex->current_select->nest_last_join(thd))) @@ -33741,312 +31354,281 @@ MYSQL_YYABORT; } } +#line 31358 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1515: - -/* Line 1455 of yacc.c */ -#line 10412 "/home/buildbot/git/sql/sql_yacc.yy" - { MYSQL_YYABORT_UNLESS((yyval.table_list)=(yyvsp[(1) - (1)].table_list)); } +#line 10404 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { MYSQL_YYABORT_UNLESS((yyval.table_list)=(yyvsp[0].table_list)); } +#line 31364 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1516: - -/* Line 1455 of yacc.c */ -#line 10423 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.table_list)=(yyvsp[(1) - (1)].table_list); } +#line 10415 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.table_list)=(yyvsp[0].table_list); } +#line 31370 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1517: - -/* Line 1455 of yacc.c */ -#line 10424 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.table_list)=(yyvsp[(3) - (4)].table_list); } +#line 10416 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.table_list)=(yyvsp[-1].table_list); } +#line 31376 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1518: - -/* Line 1455 of yacc.c */ -#line 10430 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.table_list)=(yyvsp[(1) - (1)].table_list); } +#line 10422 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.table_list)=(yyvsp[0].table_list); } +#line 31382 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1519: - -/* Line 1455 of yacc.c */ -#line 10432 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10424 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (3)].table_list) && ((yyval.table_list)=(yyvsp[(3) - (3)].table_list))); + MYSQL_YYABORT_UNLESS((yyvsp[-2].table_list) && ((yyval.table_list)=(yyvsp[0].table_list))); } +#line 31390 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1520: - -/* Line 1455 of yacc.c */ -#line 10452 "/home/buildbot/git/sql/sql_yacc.yy" - { MYSQL_YYABORT_UNLESS((yyvsp[(1) - (3)].table_list) && ((yyval.table_list)=(yyvsp[(3) - (3)].table_list))); (yyvsp[(3) - (3)].table_list)->straight=(yyvsp[(2) - (3)].num); } +#line 10444 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { MYSQL_YYABORT_UNLESS((yyvsp[-2].table_list) && ((yyval.table_list)=(yyvsp[0].table_list))); (yyvsp[0].table_list)->straight=(yyvsp[-1].num); } +#line 31396 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1521: - -/* Line 1455 of yacc.c */ -#line 10455 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10447 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (4)].table_list) && (yyvsp[(3) - (4)].table_list)); + MYSQL_YYABORT_UNLESS((yyvsp[-3].table_list) && (yyvsp[-1].table_list)); /* Change the current name resolution context to a local context. */ - if (push_new_name_resolution_context(thd, (yyvsp[(1) - (4)].table_list), (yyvsp[(3) - (4)].table_list))) + if (push_new_name_resolution_context(thd, (yyvsp[-3].table_list), (yyvsp[-1].table_list))) MYSQL_YYABORT; Select->parsing_place= IN_ON; } +#line 31408 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1522: - -/* Line 1455 of yacc.c */ -#line 10463 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10455 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(3) - (6)].table_list)->straight=(yyvsp[(2) - (6)].num); - add_join_on(thd, (yyvsp[(3) - (6)].table_list), (yyvsp[(6) - (6)].item)); + (yyvsp[-3].table_list)->straight=(yyvsp[-4].num); + add_join_on(thd, (yyvsp[-3].table_list), (yyvsp[0].item)); Lex->pop_context(); Select->parsing_place= NO_MATTER; } +#line 31419 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1523: - -/* Line 1455 of yacc.c */ -#line 10471 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10463 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (4)].table_list) && (yyvsp[(3) - (4)].table_list)); + MYSQL_YYABORT_UNLESS((yyvsp[-3].table_list) && (yyvsp[-1].table_list)); } +#line 31427 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1524: - -/* Line 1455 of yacc.c */ -#line 10475 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10467 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(3) - (8)].table_list)->straight=(yyvsp[(2) - (8)].num); - add_join_natural((yyvsp[(1) - (8)].table_list),(yyvsp[(3) - (8)].table_list),(yyvsp[(7) - (8)].string_list),Select); - (yyval.table_list)=(yyvsp[(3) - (8)].table_list); + (yyvsp[-5].table_list)->straight=(yyvsp[-6].num); + add_join_natural((yyvsp[-7].table_list),(yyvsp[-5].table_list),(yyvsp[-1].string_list),Select); + (yyval.table_list)=(yyvsp[-5].table_list); } +#line 31437 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1525: - -/* Line 1455 of yacc.c */ -#line 10481 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10473 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (4)].table_list) && ((yyval.table_list)=(yyvsp[(4) - (4)].table_list))); - (yyvsp[(4) - (4)].table_list)->straight=(yyvsp[(3) - (4)].num); - add_join_natural((yyvsp[(1) - (4)].table_list),(yyvsp[(4) - (4)].table_list),NULL,Select); + MYSQL_YYABORT_UNLESS((yyvsp[-3].table_list) && ((yyval.table_list)=(yyvsp[0].table_list))); + (yyvsp[0].table_list)->straight=(yyvsp[-1].num); + add_join_natural((yyvsp[-3].table_list),(yyvsp[0].table_list),NULL,Select); } +#line 31447 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1526: - -/* Line 1455 of yacc.c */ -#line 10490 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10482 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(5) - (6)].table_list)); + MYSQL_YYABORT_UNLESS((yyvsp[-5].table_list) && (yyvsp[-1].table_list)); /* Change the current name resolution context to a local context. */ - if (push_new_name_resolution_context(thd, (yyvsp[(1) - (6)].table_list), (yyvsp[(5) - (6)].table_list))) + if (push_new_name_resolution_context(thd, (yyvsp[-5].table_list), (yyvsp[-1].table_list))) MYSQL_YYABORT; Select->parsing_place= IN_ON; } +#line 31459 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1527: - -/* Line 1455 of yacc.c */ -#line 10498 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10490 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - add_join_on(thd, (yyvsp[(5) - (8)].table_list), (yyvsp[(8) - (8)].item)); + add_join_on(thd, (yyvsp[-3].table_list), (yyvsp[0].item)); Lex->pop_context(); - (yyvsp[(5) - (8)].table_list)->outer_join|=JOIN_TYPE_LEFT; - (yyval.table_list)=(yyvsp[(5) - (8)].table_list); + (yyvsp[-3].table_list)->outer_join|=JOIN_TYPE_LEFT; + (yyval.table_list)=(yyvsp[-3].table_list); Select->parsing_place= NO_MATTER; } +#line 31471 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1528: - -/* Line 1455 of yacc.c */ -#line 10506 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10498 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (5)].table_list) && (yyvsp[(5) - (5)].table_list)); + MYSQL_YYABORT_UNLESS((yyvsp[-4].table_list) && (yyvsp[0].table_list)); } +#line 31479 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1529: - -/* Line 1455 of yacc.c */ -#line 10510 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10502 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - add_join_natural((yyvsp[(1) - (10)].table_list),(yyvsp[(5) - (10)].table_list),(yyvsp[(9) - (10)].string_list),Select); - (yyvsp[(5) - (10)].table_list)->outer_join|=JOIN_TYPE_LEFT; - (yyval.table_list)=(yyvsp[(5) - (10)].table_list); + add_join_natural((yyvsp[-9].table_list),(yyvsp[-5].table_list),(yyvsp[-1].string_list),Select); + (yyvsp[-5].table_list)->outer_join|=JOIN_TYPE_LEFT; + (yyval.table_list)=(yyvsp[-5].table_list); } +#line 31489 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1530: - -/* Line 1455 of yacc.c */ -#line 10516 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10508 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(6) - (6)].table_list)); - add_join_natural((yyvsp[(1) - (6)].table_list),(yyvsp[(6) - (6)].table_list),NULL,Select); - (yyvsp[(6) - (6)].table_list)->outer_join|=JOIN_TYPE_LEFT; - (yyval.table_list)=(yyvsp[(6) - (6)].table_list); + MYSQL_YYABORT_UNLESS((yyvsp[-5].table_list) && (yyvsp[0].table_list)); + add_join_natural((yyvsp[-5].table_list),(yyvsp[0].table_list),NULL,Select); + (yyvsp[0].table_list)->outer_join|=JOIN_TYPE_LEFT; + (yyval.table_list)=(yyvsp[0].table_list); } +#line 31500 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1531: - -/* Line 1455 of yacc.c */ -#line 10526 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10518 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(5) - (6)].table_list)); + MYSQL_YYABORT_UNLESS((yyvsp[-5].table_list) && (yyvsp[-1].table_list)); /* Change the current name resolution context to a local context. */ - if (push_new_name_resolution_context(thd, (yyvsp[(1) - (6)].table_list), (yyvsp[(5) - (6)].table_list))) + if (push_new_name_resolution_context(thd, (yyvsp[-5].table_list), (yyvsp[-1].table_list))) MYSQL_YYABORT; Select->parsing_place= IN_ON; } +#line 31512 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1532: - -/* Line 1455 of yacc.c */ -#line 10534 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10526 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (!((yyval.table_list)= lex->current_select->convert_right_join())) MYSQL_YYABORT; - add_join_on(thd, (yyval.table_list), (yyvsp[(8) - (8)].item)); + add_join_on(thd, (yyval.table_list), (yyvsp[0].item)); Lex->pop_context(); Select->parsing_place= NO_MATTER; } +#line 31525 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1533: - -/* Line 1455 of yacc.c */ -#line 10543 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10535 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (5)].table_list) && (yyvsp[(5) - (5)].table_list)); + MYSQL_YYABORT_UNLESS((yyvsp[-4].table_list) && (yyvsp[0].table_list)); } +#line 31533 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1534: - -/* Line 1455 of yacc.c */ -#line 10547 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10539 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (!((yyval.table_list)= lex->current_select->convert_right_join())) MYSQL_YYABORT; - add_join_natural((yyval.table_list),(yyvsp[(5) - (10)].table_list),(yyvsp[(9) - (10)].string_list),Select); + add_join_natural((yyval.table_list),(yyvsp[-5].table_list),(yyvsp[-1].string_list),Select); } +#line 31544 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1535: - -/* Line 1455 of yacc.c */ -#line 10554 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10546 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (6)].table_list) && (yyvsp[(6) - (6)].table_list)); - add_join_natural((yyvsp[(6) - (6)].table_list),(yyvsp[(1) - (6)].table_list),NULL,Select); + MYSQL_YYABORT_UNLESS((yyvsp[-5].table_list) && (yyvsp[0].table_list)); + add_join_natural((yyvsp[0].table_list),(yyvsp[-5].table_list),NULL,Select); LEX *lex= Lex; if (!((yyval.table_list)= lex->current_select->convert_right_join())) MYSQL_YYABORT; } +#line 31556 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1536: - -/* Line 1455 of yacc.c */ -#line 10565 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10557 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 0; } +#line 31562 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1537: - -/* Line 1455 of yacc.c */ -#line 10566 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10558 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 0; } +#line 31568 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1538: - -/* Line 1455 of yacc.c */ -#line 10567 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10559 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 1; } +#line 31574 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1539: - -/* Line 1455 of yacc.c */ -#line 10571 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.num) = (yyvsp[(1) - (1)].num); } +#line 10563 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.num) = (yyvsp[0].num); } +#line 31580 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1540: - -/* Line 1455 of yacc.c */ -#line 10572 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10564 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 0; } +#line 31586 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1541: - -/* Line 1455 of yacc.c */ -#line 10580 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10572 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.string_list)= 0;} +#line 31592 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1543: - -/* Line 1455 of yacc.c */ -#line 10586 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10578 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.string_list)= (yyvsp[(3) - (5)].string_list); + (yyval.string_list)= (yyvsp[-2].string_list); } +#line 31600 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1544: - -/* Line 1455 of yacc.c */ -#line 10600 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10592 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; sel->table_join_options= 0; } +#line 31609 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1545: - -/* Line 1455 of yacc.c */ -#line 10605 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10597 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyval.table_list)= Select->add_table_to_list(thd, (yyvsp[(2) - (5)].table), (yyvsp[(4) - (5)].lex_str_ptr), + if (!((yyval.table_list)= Select->add_table_to_list(thd, (yyvsp[-3].table), (yyvsp[-1].lex_str_ptr), Select->get_table_join_options(), YYPS->m_lock_type, YYPS->m_mdl_type, Select->pop_index_hints(), - (yyvsp[(3) - (5)].string_list)))) + (yyvsp[-2].string_list)))) MYSQL_YYABORT; Select->add_joined_table((yyval.table_list)); } +#line 31624 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1546: - -/* Line 1455 of yacc.c */ -#line 10616 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10608 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; - if ((yyvsp[(1) - (3)].num)) + if ((yyvsp[-2].num)) { if (sel->set_braces(1)) { @@ -34054,23 +31636,22 @@ MYSQL_YYABORT; } } - if ((yyvsp[(2) - (3)].select_lex)->init_nested_join(thd)) + if ((yyvsp[-1].select_lex)->init_nested_join(thd)) MYSQL_YYABORT; (yyval.table_list)= 0; /* incomplete derived tables return NULL, we must be nested in select_derived rule to be here. */ } +#line 31646 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1547: - -/* Line 1455 of yacc.c */ -#line 10652 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10644 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Use $2 instead of Lex->current_select as derived table will alter value of Lex->current_select. */ - if (!((yyvsp[(3) - (5)].table_list) || (yyvsp[(5) - (5)].lex_str_ptr)) && (yyvsp[(2) - (5)].select_lex)->embedding && - !(yyvsp[(2) - (5)].select_lex)->embedding->nested_join->join_list.elements) + if (!((yyvsp[-2].table_list) || (yyvsp[0].lex_str_ptr)) && (yyvsp[-3].select_lex)->embedding && + !(yyvsp[-3].select_lex)->embedding->nested_join->join_list.elements) { /* we have a derived table ($3 == NULL) but no alias, Since we are nested in further parentheses so we @@ -34078,7 +31659,7 @@ Permits parsing of "((((select ...))) as xyz)" */ (yyval.table_list)= 0; } - else if (!(yyvsp[(3) - (5)].table_list)) + else if (!(yyvsp[-2].table_list)) { /* Handle case of derived table, alias may be NULL if there are no outer parentheses, add_table_to_list() will throw @@ -34091,7 +31672,7 @@ if (ti == NULL) MYSQL_YYABORT; if (!((yyval.table_list)= sel->add_table_to_list(thd, - ti, (yyvsp[(5) - (5)].lex_str_ptr), 0, + ti, (yyvsp[0].lex_str_ptr), 0, TL_READ, MDL_SHARED_READ))) MYSQL_YYABORT; @@ -34103,7 +31684,7 @@ $3->select_lex->master_unit()->is_union() && ($3->select_lex->master_unit()->first_select() == $3->select_lex || !$3->lifted)) || $5)*/ - else if ((yyvsp[(5) - (5)].lex_str_ptr) != NULL) + else if ((yyvsp[0].lex_str_ptr) != NULL) { /* Tables with or without joins within parentheses cannot @@ -34116,7 +31697,7 @@ { /* nested join: FROM (t1 JOIN t2 ...), nest_level is the same as in the outer query */ - (yyval.table_list)= (yyvsp[(3) - (5)].table_list); + (yyval.table_list)= (yyvsp[-2].table_list); } /* Fields in derived table can be used in upper select in @@ -34128,35 +31709,32 @@ !(yyval.table_list)->derived->first_select()->next_select()) (yyval.table_list)->select_lex->add_where_field((yyval.table_list)->derived->first_select()); } +#line 31713 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1548: - -/* Line 1455 of yacc.c */ -#line 10737 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10729 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (2)].table_list) && (yyvsp[(2) - (2)].num)) + if ((yyvsp[-1].table_list) && (yyvsp[0].num)) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } } +#line 31725 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1549: - -/* Line 1455 of yacc.c */ -#line 10747 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10739 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_select_to_union_list(Lex, (bool)(yyvsp[(3) - (3)].num), FALSE)) + if (add_select_to_union_list(Lex, (bool)(yyvsp[0].num), FALSE)) MYSQL_YYABORT; } +#line 31734 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1550: - -/* Line 1455 of yacc.c */ -#line 10752 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10744 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Remove from the name resolution context stack the context of the @@ -34164,18 +31742,17 @@ */ Lex->pop_context(); - if ((yyvsp[(1) - (5)].table_list) != NULL) + if ((yyvsp[-4].table_list) != NULL) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } } +#line 31752 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1551: - -/* Line 1455 of yacc.c */ -#line 10770 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10762 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->current_select->set_braces(0)) @@ -34184,12 +31761,11 @@ MYSQL_YYABORT; } } +#line 31765 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1552: - -/* Line 1455 of yacc.c */ -#line 10782 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10774 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; SELECT_LEX *sel= lex->current_select; @@ -34197,49 +31773,45 @@ mysql_init_select(lex); lex->current_select->parsing_place= SELECT_LIST; } +#line 31777 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1553: - -/* Line 1455 of yacc.c */ -#line 10790 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10782 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= NO_MATTER; } +#line 31785 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1554: - -/* Line 1455 of yacc.c */ -#line 10798 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10790 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (1)].select_lex)->init_nested_join(thd)) + if ((yyvsp[0].select_lex)->init_nested_join(thd)) MYSQL_YYABORT; } +#line 31794 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1555: - -/* Line 1455 of yacc.c */ -#line 10803 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10795 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* for normal joins, $3 != NULL and end_nested_join() != NULL, for derived tables, both must equal NULL */ - if (!((yyval.table_list)= (yyvsp[(1) - (3)].select_lex)->end_nested_join(thd)) && (yyvsp[(3) - (3)].table_list)) + if (!((yyval.table_list)= (yyvsp[-2].select_lex)->end_nested_join(thd)) && (yyvsp[0].table_list)) MYSQL_YYABORT; - if (!(yyvsp[(3) - (3)].table_list) && (yyval.table_list)) + if (!(yyvsp[0].table_list) && (yyval.table_list)) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } } +#line 31811 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1556: - -/* Line 1455 of yacc.c */ -#line 10818 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10810 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->derived_tables|= DERIVED_SUBQUERY; @@ -34256,28 +31828,25 @@ lex->current_select->linkage= DERIVED_TABLE_TYPE; lex->current_select->parsing_place= SELECT_LIST; } +#line 31832 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1557: - -/* Line 1455 of yacc.c */ -#line 10835 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10827 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= NO_MATTER; } +#line 31840 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1559: - -/* Line 1455 of yacc.c */ -#line 10842 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10834 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.select_lex)= Select; } +#line 31846 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1560: - -/* Line 1455 of yacc.c */ -#line 10847 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10839 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -34297,415 +31866,363 @@ !embedding->nested_join->join_list.elements; /* return true if we are deeply nested */ } +#line 31870 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1561: - -/* Line 1455 of yacc.c */ -#line 10869 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10861 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 31876 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1562: - -/* Line 1455 of yacc.c */ -#line 10870 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10862 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 31882 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1563: - -/* Line 1455 of yacc.c */ -#line 10875 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10867 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= thd->variables.old_mode ? INDEX_HINT_MASK_JOIN : INDEX_HINT_MASK_ALL; } +#line 31890 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1564: - -/* Line 1455 of yacc.c */ -#line 10878 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10870 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= INDEX_HINT_MASK_JOIN; } +#line 31896 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1565: - -/* Line 1455 of yacc.c */ -#line 10879 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10871 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= INDEX_HINT_MASK_ORDER; } +#line 31902 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1566: - -/* Line 1455 of yacc.c */ -#line 10880 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10872 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= INDEX_HINT_MASK_GROUP; } +#line 31908 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1567: - -/* Line 1455 of yacc.c */ -#line 10884 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10876 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.index_hint)= INDEX_HINT_FORCE; } +#line 31914 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1568: - -/* Line 1455 of yacc.c */ -#line 10885 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10877 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.index_hint)= INDEX_HINT_IGNORE; } +#line 31920 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1569: - -/* Line 1455 of yacc.c */ -#line 10890 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10882 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Select->set_index_hint_type((yyvsp[(1) - (3)].index_hint), (yyvsp[(3) - (3)].num)); + Select->set_index_hint_type((yyvsp[-2].index_hint), (yyvsp[0].num)); } +#line 31928 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1571: - -/* Line 1455 of yacc.c */ -#line 10895 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10887 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Select->set_index_hint_type(INDEX_HINT_USE, (yyvsp[(3) - (3)].num)); + Select->set_index_hint_type(INDEX_HINT_USE, (yyvsp[0].num)); } +#line 31936 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1576: - -/* Line 1455 of yacc.c */ -#line 10908 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10900 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->alloc_index_hints(thd); } +#line 31942 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1578: - -/* Line 1455 of yacc.c */ -#line 10912 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10904 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->clear_index_hints(); } +#line 31948 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1580: - -/* Line 1455 of yacc.c */ -#line 10917 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10909 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->add_index_hint(thd, NULL, 0); } +#line 31954 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1581: - -/* Line 1455 of yacc.c */ -#line 10918 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10910 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 31960 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1582: - -/* Line 1455 of yacc.c */ -#line 10923 "/home/buildbot/git/sql/sql_yacc.yy" - { Select->add_index_hint(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); } +#line 10915 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Select->add_index_hint(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); } +#line 31966 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1583: - -/* Line 1455 of yacc.c */ -#line 10925 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10917 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->add_index_hint(thd, (char *)"PRIMARY", 7); } +#line 31972 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1586: - -/* Line 1455 of yacc.c */ -#line 10935 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10927 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!((yyval.string_list)= new (thd->mem_root) List)) MYSQL_YYABORT; - String *s= new (thd->mem_root) String((const char *) (yyvsp[(1) - (1)].lex_str).str, - (yyvsp[(1) - (1)].lex_str).length, + String *s= new (thd->mem_root) String((const char *) (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length, system_charset_info); if (s == NULL) MYSQL_YYABORT; (yyval.string_list)->push_back(s, thd->mem_root); } +#line 31987 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1587: - -/* Line 1455 of yacc.c */ -#line 10946 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10938 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - String *s= new (thd->mem_root) String((const char *) (yyvsp[(3) - (3)].lex_str).str, - (yyvsp[(3) - (3)].lex_str).length, + String *s= new (thd->mem_root) String((const char *) (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length, system_charset_info); if (s == NULL) MYSQL_YYABORT; - (yyvsp[(1) - (3)].string_list)->push_back(s, thd->mem_root); - (yyval.string_list)= (yyvsp[(1) - (3)].string_list); + (yyvsp[-2].string_list)->push_back(s, thd->mem_root); + (yyval.string_list)= (yyvsp[-2].string_list); } +#line 32001 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1588: - -/* Line 1455 of yacc.c */ -#line 10958 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10950 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32007 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1589: - -/* Line 1455 of yacc.c */ -#line 10959 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10951 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_DAY_HOUR; } +#line 32013 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1590: - -/* Line 1455 of yacc.c */ -#line 10960 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10952 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_DAY_MICROSECOND; } +#line 32019 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1591: - -/* Line 1455 of yacc.c */ -#line 10961 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10953 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_DAY_MINUTE; } +#line 32025 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1592: - -/* Line 1455 of yacc.c */ -#line 10962 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10954 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_DAY_SECOND; } +#line 32031 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1593: - -/* Line 1455 of yacc.c */ -#line 10963 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10955 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_HOUR_MICROSECOND; } +#line 32037 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1594: - -/* Line 1455 of yacc.c */ -#line 10964 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10956 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_HOUR_MINUTE; } +#line 32043 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1595: - -/* Line 1455 of yacc.c */ -#line 10965 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10957 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_HOUR_SECOND; } +#line 32049 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1596: - -/* Line 1455 of yacc.c */ -#line 10966 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10958 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_MINUTE_MICROSECOND; } +#line 32055 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1597: - -/* Line 1455 of yacc.c */ -#line 10967 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10959 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_MINUTE_SECOND; } +#line 32061 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1598: - -/* Line 1455 of yacc.c */ -#line 10968 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10960 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_SECOND_MICROSECOND; } +#line 32067 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1599: - -/* Line 1455 of yacc.c */ -#line 10969 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10961 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval)=INTERVAL_YEAR_MONTH; } +#line 32073 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1600: - -/* Line 1455 of yacc.c */ -#line 10973 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10965 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_DAY; } +#line 32079 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1601: - -/* Line 1455 of yacc.c */ -#line 10974 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10966 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_WEEK; } +#line 32085 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1602: - -/* Line 1455 of yacc.c */ -#line 10975 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10967 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_HOUR; } +#line 32091 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1603: - -/* Line 1455 of yacc.c */ -#line 10976 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10968 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_MINUTE; } +#line 32097 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1604: - -/* Line 1455 of yacc.c */ -#line 10977 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10969 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_MONTH; } +#line 32103 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1605: - -/* Line 1455 of yacc.c */ -#line 10978 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10970 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_QUARTER; } +#line 32109 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1606: - -/* Line 1455 of yacc.c */ -#line 10979 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10971 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_SECOND; } +#line 32115 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1607: - -/* Line 1455 of yacc.c */ -#line 10980 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10972 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_MICROSECOND; } +#line 32121 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1608: - -/* Line 1455 of yacc.c */ -#line 10981 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10973 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.interval_time_st)=INTERVAL_YEAR; } +#line 32127 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1609: - -/* Line 1455 of yacc.c */ -#line 10985 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10977 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.date_time_type)=MYSQL_TIMESTAMP_DATE;} +#line 32133 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1610: - -/* Line 1455 of yacc.c */ -#line 10986 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10978 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.date_time_type)=MYSQL_TIMESTAMP_TIME;} +#line 32139 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1611: - -/* Line 1455 of yacc.c */ -#line 10987 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10979 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.date_time_type)=MYSQL_TIMESTAMP_DATETIME;} +#line 32145 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1612: - -/* Line 1455 of yacc.c */ -#line 10988 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10980 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {(yyval.date_time_type)=MYSQL_TIMESTAMP_DATETIME;} +#line 32151 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1616: - -/* Line 1455 of yacc.c */ -#line 10998 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10990 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lex_str_ptr)=0; } +#line 32157 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1617: - -/* Line 1455 of yacc.c */ -#line 11000 "/home/buildbot/git/sql/sql_yacc.yy" +#line 10992 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.lex_str_ptr)= (LEX_STRING*) thd->memdup(&(yyvsp[(2) - (2)].lex_str),sizeof(LEX_STRING)); + (yyval.lex_str_ptr)= (LEX_STRING*) thd->memdup(&(yyvsp[0].lex_str),sizeof(LEX_STRING)); if ((yyval.lex_str_ptr) == NULL) MYSQL_YYABORT; } +#line 32167 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1620: - -/* Line 1455 of yacc.c */ -#line 11013 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11005 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->where= 0; } +#line 32173 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1621: - -/* Line 1455 of yacc.c */ -#line 11015 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11007 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= IN_WHERE; } +#line 32181 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1622: - -/* Line 1455 of yacc.c */ -#line 11019 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11011 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *select= Select; - select->where= normalize_cond(thd, (yyvsp[(3) - (3)].item)); + select->where= normalize_cond(thd, (yyvsp[0].item)); select->parsing_place= NO_MATTER; - if ((yyvsp[(3) - (3)].item)) - (yyvsp[(3) - (3)].item)->top_level_item(); + if ((yyvsp[0].item)) + (yyvsp[0].item)->top_level_item(); } +#line 32193 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1624: - -/* Line 1455 of yacc.c */ -#line 11031 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11023 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= IN_HAVING; } +#line 32201 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1625: - -/* Line 1455 of yacc.c */ -#line 11035 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11027 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; - sel->having= normalize_cond(thd, (yyvsp[(3) - (3)].item)); + sel->having= normalize_cond(thd, (yyvsp[0].item)); sel->parsing_place= NO_MATTER; - if ((yyvsp[(3) - (3)].item)) - (yyvsp[(3) - (3)].item)->top_level_item(); + if ((yyvsp[0].item)) + (yyvsp[0].item)->top_level_item(); } +#line 32213 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1626: - -/* Line 1455 of yacc.c */ -#line 11046 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11038 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->escape_used= TRUE; - (yyval.item)= (yyvsp[(2) - (2)].item); + (yyval.item)= (yyvsp[0].item); } +#line 32222 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1627: - -/* Line 1455 of yacc.c */ -#line 11051 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11043 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->escape_used= FALSE; (yyval.item)= ((thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ? @@ -34714,33 +32231,29 @@ if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 32235 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1630: - -/* Line 1455 of yacc.c */ -#line 11072 "/home/buildbot/git/sql/sql_yacc.yy" - { if (add_group_to_list(thd, (yyvsp[(3) - (4)].item),(bool) (yyvsp[(4) - (4)].num))) MYSQL_YYABORT; } +#line 11064 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { if (add_group_to_list(thd, (yyvsp[-1].item),(bool) (yyvsp[0].num))) MYSQL_YYABORT; } +#line 32241 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1631: - -/* Line 1455 of yacc.c */ -#line 11074 "/home/buildbot/git/sql/sql_yacc.yy" - { if (add_group_to_list(thd, (yyvsp[(1) - (2)].item),(bool) (yyvsp[(2) - (2)].num))) MYSQL_YYABORT; } +#line 11066 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { if (add_group_to_list(thd, (yyvsp[-1].item),(bool) (yyvsp[0].num))) MYSQL_YYABORT; } +#line 32247 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1632: - -/* Line 1455 of yacc.c */ -#line 11078 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11070 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32253 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1633: - -/* Line 1455 of yacc.c */ -#line 11080 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11072 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* 'WITH CUBE' is reserved in the MySQL syntax, but not implemented, @@ -34757,12 +32270,11 @@ my_yyabort_error((ER_NOT_SUPPORTED_YET, MYF(0), "CUBE")); } +#line 32274 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1634: - -/* Line 1455 of yacc.c */ -#line 11097 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11089 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* 'WITH ROLLUP' is needed for backward compatibility, @@ -34777,23 +32289,21 @@ "global union parameters")); lex->current_select->olap= ROLLUP_TYPE; } +#line 32293 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1638: - -/* Line 1455 of yacc.c */ -#line 11128 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11120 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - bool ascending= ((yyvsp[(2) - (2)].num) == 1) ? true : false; - if (add_order_to_list(thd, (yyvsp[(1) - (2)].item), ascending)) + bool ascending= ((yyvsp[0].num) == 1) ? true : false; + if (add_order_to_list(thd, (yyvsp[-1].item), ascending)) MYSQL_YYABORT; } +#line 32303 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1641: - -/* Line 1455 of yacc.c */ -#line 11146 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11138 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; SELECT_LEX *sel= lex->current_select; @@ -34836,70 +32346,61 @@ lex->current_select= sel->master_unit()->fake_select_lex; } } +#line 32350 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1642: - -/* Line 1455 of yacc.c */ -#line 11189 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11181 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 32358 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1643: - -/* Line 1455 of yacc.c */ -#line 11196 "/home/buildbot/git/sql/sql_yacc.yy" - { if (add_order_to_list(thd, (yyvsp[(3) - (4)].item),(bool) (yyvsp[(4) - (4)].num))) MYSQL_YYABORT; } +#line 11188 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { if (add_order_to_list(thd, (yyvsp[-1].item),(bool) (yyvsp[0].num))) MYSQL_YYABORT; } +#line 32364 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1644: - -/* Line 1455 of yacc.c */ -#line 11198 "/home/buildbot/git/sql/sql_yacc.yy" - { if (add_order_to_list(thd, (yyvsp[(1) - (2)].item),(bool) (yyvsp[(2) - (2)].num))) MYSQL_YYABORT; } +#line 11190 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { if (add_order_to_list(thd, (yyvsp[-1].item),(bool) (yyvsp[0].num))) MYSQL_YYABORT; } +#line 32370 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1645: - -/* Line 1455 of yacc.c */ -#line 11202 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11194 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) = 1; } +#line 32376 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1646: - -/* Line 1455 of yacc.c */ -#line 11203 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11195 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) =1; } +#line 32382 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1647: - -/* Line 1455 of yacc.c */ -#line 11204 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11196 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num) =0; } +#line 32388 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1648: - -/* Line 1455 of yacc.c */ -#line 11208 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11200 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32394 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1649: - -/* Line 1455 of yacc.c */ -#line 11209 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11201 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32400 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1650: - -/* Line 1455 of yacc.c */ -#line 11214 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11206 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; if (sel->master_unit()->is_union() && !sel->braces) @@ -34909,88 +32410,81 @@ DBUG_ASSERT(Select); } } +#line 32414 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1651: - -/* Line 1455 of yacc.c */ -#line 11227 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11219 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; if (!sel->select_limit->basic_const_item() || sel->select_limit->val_int() > 0) Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_LIMIT); } +#line 32425 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1652: - -/* Line 1455 of yacc.c */ -#line 11235 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11227 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_LIMIT); } +#line 32433 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1653: - -/* Line 1455 of yacc.c */ -#line 11239 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11231 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_LIMIT); } +#line 32441 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1654: - -/* Line 1455 of yacc.c */ -#line 11246 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11238 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; - sel->select_limit= (yyvsp[(1) - (1)].item); + sel->select_limit= (yyvsp[0].item); sel->offset_limit= 0; sel->explicit_limit= 1; } +#line 32452 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1655: - -/* Line 1455 of yacc.c */ -#line 11253 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11245 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; - sel->select_limit= (yyvsp[(3) - (3)].item); - sel->offset_limit= (yyvsp[(1) - (3)].item); + sel->select_limit= (yyvsp[0].item); + sel->offset_limit= (yyvsp[-2].item); sel->explicit_limit= 1; } +#line 32463 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1656: - -/* Line 1455 of yacc.c */ -#line 11260 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11252 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; - sel->select_limit= (yyvsp[(1) - (3)].item); - sel->offset_limit= (yyvsp[(3) - (3)].item); + sel->select_limit= (yyvsp[-2].item); + sel->offset_limit= (yyvsp[0].item); sel->explicit_limit= 1; } +#line 32474 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1657: - -/* Line 1455 of yacc.c */ -#line 11270 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11262 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item_splocal *splocal; LEX *lex= thd->lex; Lex_input_stream *lip= & thd->m_parser_state->m_lip; sp_variable *spv; sp_pcontext *spc = lex->spcont; - if (spc && (spv = spc->find_variable((yyvsp[(1) - (1)].lex_str), false))) + if (spc && (spv = spc->find_variable((yyvsp[0].lex_str), false))) { splocal= new (thd->mem_root) - Item_splocal(thd, (yyvsp[(1) - (1)].lex_str), spv->offset, spv->type, + Item_splocal(thd, (yyvsp[0].lex_str), spv->offset, spv->type, lip->get_tok_start() - lex->sphead->m_tmp_query, lip->get_ptr() - lip->get_tok_start()); if (splocal == NULL) @@ -35001,302 +32495,264 @@ lex->safe_to_cache_query=0; } else - my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[0].lex_str).str)); if (splocal->type() != Item::INT_ITEM) my_yyabort_error((ER_WRONG_SPVAR_TYPE_IN_LIMIT, MYF(0))); splocal->limit_clause_param= TRUE; (yyval.item)= splocal; } +#line 32505 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1658: - -/* Line 1455 of yacc.c */ -#line 11297 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11289 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(1) - (1)].item_param)->limit_clause_param= TRUE; + (yyvsp[0].item_param)->limit_clause_param= TRUE; } +#line 32513 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1659: - -/* Line 1455 of yacc.c */ -#line 11301 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11293 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_uint(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item)= new (thd->mem_root) Item_uint(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 32523 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1660: - -/* Line 1455 of yacc.c */ -#line 11307 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11299 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_uint(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item)= new (thd->mem_root) Item_uint(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 32533 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1661: - -/* Line 1455 of yacc.c */ -#line 11313 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11305 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_uint(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item)= new (thd->mem_root) Item_uint(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 32543 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1662: - -/* Line 1455 of yacc.c */ -#line 11322 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11314 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->limit_rows_examined= (yyvsp[(1) - (1)].item); + lex->limit_rows_examined= (yyvsp[0].item); } +#line 32552 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1663: - -/* Line 1455 of yacc.c */ -#line 11329 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11321 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->current_select->select_limit= 0; } +#line 32561 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1664: - -/* Line 1455 of yacc.c */ -#line 11334 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11326 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; - sel->select_limit= (yyvsp[(2) - (2)].item); + sel->select_limit= (yyvsp[0].item); Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_LIMIT); sel->explicit_limit= 1; } +#line 32572 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1665: - -/* Line 1455 of yacc.c */ -#line 11340 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11332 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } +#line 32578 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1666: - -/* Line 1455 of yacc.c */ -#line 11341 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11333 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } +#line 32584 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1667: - -/* Line 1455 of yacc.c */ -#line 11345 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.num)= (int) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11337 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.num)= (int) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32590 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1668: - -/* Line 1455 of yacc.c */ -#line 11346 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.num)= -(int) my_strtoll10((yyvsp[(2) - (2)].lex_str).str, (char**) 0, &error); } +#line 11338 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.num)= -(int) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32596 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1669: - -/* Line 1455 of yacc.c */ -#line 11347 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.num)= -(int) my_strtoll10((yyvsp[(2) - (2)].lex_str).str, (char**) 0, &error); } +#line 11339 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.num)= -(int) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32602 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1670: - -/* Line 1455 of yacc.c */ -#line 11351 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11343 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32608 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1671: - -/* Line 1455 of yacc.c */ -#line 11352 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (ulong) strtol((yyvsp[(1) - (1)].lex_str).str, (char**) 0, 16); } +#line 11344 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (ulong) strtol((yyvsp[0].lex_str).str, (char**) 0, 16); } +#line 32614 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1672: - -/* Line 1455 of yacc.c */ -#line 11353 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11345 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32620 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1673: - -/* Line 1455 of yacc.c */ -#line 11354 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11346 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32626 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1674: - -/* Line 1455 of yacc.c */ -#line 11355 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11347 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32632 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1675: - -/* Line 1455 of yacc.c */ -#line 11356 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11348 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32638 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1676: - -/* Line 1455 of yacc.c */ -#line 11360 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11352 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32644 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1677: - -/* Line 1455 of yacc.c */ -#line 11361 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulong_num)= (ulong) strtol((yyvsp[(1) - (1)].lex_str).str, (char**) 0, 16); } +#line 11353 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulong_num)= (ulong) strtol((yyvsp[0].lex_str).str, (char**) 0, 16); } +#line 32650 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1678: - -/* Line 1455 of yacc.c */ -#line 11362 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11354 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32656 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1679: - -/* Line 1455 of yacc.c */ -#line 11363 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11355 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulong_num)= (ulong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32662 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1680: - -/* Line 1455 of yacc.c */ -#line 11364 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11356 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT; } +#line 32668 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1681: - -/* Line 1455 of yacc.c */ -#line 11368 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11360 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32674 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1682: - -/* Line 1455 of yacc.c */ -#line 11369 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11361 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32680 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1683: - -/* Line 1455 of yacc.c */ -#line 11370 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11362 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32686 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1684: - -/* Line 1455 of yacc.c */ -#line 11371 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11363 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32692 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1685: - -/* Line 1455 of yacc.c */ -#line 11372 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11364 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32698 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1686: - -/* Line 1455 of yacc.c */ -#line 11376 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11368 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32704 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1687: - -/* Line 1455 of yacc.c */ -#line 11377 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11369 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32710 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1688: - -/* Line 1455 of yacc.c */ -#line 11378 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.ulonglong_number)= strtoull((yyvsp[(1) - (1)].lex_str).str, (char**) 0, 16); } +#line 11370 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.ulonglong_number)= strtoull((yyvsp[0].lex_str).str, (char**) 0, 16); } +#line 32716 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1689: - -/* Line 1455 of yacc.c */ -#line 11379 "/home/buildbot/git/sql/sql_yacc.yy" - { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, (char**) 0, &error); } +#line 11371 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { int error; (yyval.ulonglong_number)= (ulonglong) my_strtoll10((yyvsp[0].lex_str).str, (char**) 0, &error); } +#line 32722 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1690: - -/* Line 1455 of yacc.c */ -#line 11380 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11372 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { MYSQL_YYABORT; } +#line 32728 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1691: - -/* Line 1455 of yacc.c */ -#line 11385 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11377 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { my_parse_error(thd, ER_ONLY_INTEGERS_ALLOWED); } +#line 32734 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1694: - -/* Line 1455 of yacc.c */ -#line 11394 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.choice)= (yyvsp[(1) - (1)].ulong_num) != 0 ? HA_CHOICE_YES : HA_CHOICE_NO; } +#line 11386 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.choice)= (yyvsp[0].ulong_num) != 0 ? HA_CHOICE_YES : HA_CHOICE_NO; } +#line 32740 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1695: - -/* Line 1455 of yacc.c */ -#line 11395 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11387 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.choice)= HA_CHOICE_UNDEF; } +#line 32746 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1696: - -/* Line 1455 of yacc.c */ -#line 11399 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11391 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= false; } +#line 32752 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1697: - -/* Line 1455 of yacc.c */ -#line 11401 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11393 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; @@ -35310,7 +32766,7 @@ lex->proc_list.next= &lex->proc_list.first; Item_field *item= new (thd->mem_root) Item_field(thd, &lex->current_select->context, - NULL, NULL, (yyvsp[(2) - (2)].lex_str).str); + NULL, NULL, (yyvsp[0].lex_str).str); if (item == NULL) MYSQL_YYABORT; if (add_proc_to_list(thd, item)) @@ -35325,81 +32781,73 @@ */ Lex->expr_allows_subselect= false; } +#line 32785 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1698: - -/* Line 1455 of yacc.c */ -#line 11430 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11422 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Subqueries are allowed from now.*/ Lex->expr_allows_subselect= true; (yyval.num)= true; } +#line 32795 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1699: - -/* Line 1455 of yacc.c */ -#line 11438 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11430 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32801 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1700: - -/* Line 1455 of yacc.c */ -#line 11439 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11431 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32807 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1703: - -/* Line 1455 of yacc.c */ -#line 11449 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11441 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_proc_to_list(thd, (yyvsp[(2) - (3)].item))) + if (add_proc_to_list(thd, (yyvsp[-1].item))) MYSQL_YYABORT; - if (!(yyvsp[(2) - (3)].item)->name) - (yyvsp[(2) - (3)].item)->set_name((yyvsp[(1) - (3)].simple_string), (uint) ((yyvsp[(3) - (3)].simple_string) - (yyvsp[(1) - (3)].simple_string)), thd->charset()); + if (!(yyvsp[-1].item)->name) + (yyvsp[-1].item)->set_name((yyvsp[-2].simple_string), (uint) ((yyvsp[0].simple_string) - (yyvsp[-2].simple_string)), thd->charset()); } +#line 32818 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1704: - -/* Line 1455 of yacc.c */ -#line 11458 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11450 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (!lex->describe && (!(lex->result= new (thd->mem_root) select_dumpvar(thd)))) MYSQL_YYABORT; } +#line 32829 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1705: - -/* Line 1455 of yacc.c */ -#line 11465 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11457 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32835 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1707: - -/* Line 1455 of yacc.c */ -#line 11470 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11462 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32841 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1708: - -/* Line 1455 of yacc.c */ -#line 11474 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11466 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Lex->result) { - if ((yyvsp[(1) - (1)].myvar) == NULL) + if ((yyvsp[0].myvar) == NULL) MYSQL_YYABORT; - ((select_dumpvar *)Lex->result)->var_list.push_back((yyvsp[(1) - (1)].myvar), thd->mem_root); + ((select_dumpvar *)Lex->result)->var_list.push_back((yyvsp[0].myvar), thd->mem_root); } else { @@ -35410,209 +32858,191 @@ DBUG_ASSERT(Lex->describe); } } +#line 32862 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1709: - -/* Line 1455 of yacc.c */ -#line 11494 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11486 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.myvar) = Lex->result ? new (thd->mem_root) my_var_user((yyvsp[(2) - (2)].lex_str)) : NULL; + (yyval.myvar) = Lex->result ? new (thd->mem_root) my_var_user((yyvsp[0].lex_str)) : NULL; } +#line 32870 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1710: - -/* Line 1455 of yacc.c */ -#line 11498 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11490 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { sp_variable *t; - if (!Lex->spcont || !(t= Lex->spcont->find_variable((yyvsp[(1) - (1)].lex_str), false))) - my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[(1) - (1)].lex_str).str)); + if (!Lex->spcont || !(t= Lex->spcont->find_variable((yyvsp[0].lex_str), false))) + my_yyabort_error((ER_SP_UNDECLARED_VAR, MYF(0), (yyvsp[0].lex_str).str)); (yyval.myvar) = Lex->result ? (new (thd->mem_root) - my_var_sp((yyvsp[(1) - (1)].lex_str), t->offset, t->type, + my_var_sp((yyvsp[0].lex_str), t->offset, t->type, Lex->sphead)) : NULL; } +#line 32885 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1711: - -/* Line 1455 of yacc.c */ -#line 11511 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11503 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= false; } +#line 32891 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1712: - -/* Line 1455 of yacc.c */ -#line 11512 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11504 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= true; } +#line 32897 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1713: - -/* Line 1455 of yacc.c */ -#line 11517 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11509 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (! Lex->parsing_options.allows_select_into) my_yyabort_error((ER_VIEW_SELECT_CLAUSE, MYF(0), "INTO")); } +#line 32906 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1715: - -/* Line 1455 of yacc.c */ -#line 11526 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11518 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->uncacheable(UNCACHEABLE_SIDEEFFECT); if (!(lex->exchange= - new (thd->mem_root) sql_exchange((yyvsp[(2) - (2)].lex_str).str, 0)) || + new (thd->mem_root) sql_exchange((yyvsp[0].lex_str).str, 0)) || !(lex->result= new (thd->mem_root) select_export(thd, lex->exchange))) MYSQL_YYABORT; } +#line 32920 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1716: - -/* Line 1455 of yacc.c */ -#line 11536 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->exchange->cs= (yyvsp[(4) - (4)].charset); } +#line 11528 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->exchange->cs= (yyvsp[0].charset); } +#line 32926 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1718: - -/* Line 1455 of yacc.c */ -#line 11539 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11531 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (!lex->describe) { lex->uncacheable(UNCACHEABLE_SIDEEFFECT); - if (!(lex->exchange= new (thd->mem_root) sql_exchange((yyvsp[(2) - (2)].lex_str).str,1))) + if (!(lex->exchange= new (thd->mem_root) sql_exchange((yyvsp[0].lex_str).str,1))) MYSQL_YYABORT; if (!(lex->result= new (thd->mem_root) select_dump(thd, lex->exchange))) MYSQL_YYABORT; } } +#line 32943 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1719: - -/* Line 1455 of yacc.c */ -#line 11552 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11544 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->uncacheable(UNCACHEABLE_SIDEEFFECT); } +#line 32951 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1720: - -/* Line 1455 of yacc.c */ -#line 11563 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11555 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_DO; mysql_init_select(lex); } +#line 32961 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1721: - -/* Line 1455 of yacc.c */ -#line 11569 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11561 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->insert_list= (yyvsp[(3) - (3)].item_list); + Lex->insert_list= (yyvsp[0].item_list); } +#line 32969 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1722: - -/* Line 1455 of yacc.c */ -#line 11580 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11572 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->set_command(SQLCOM_DROP_TABLE, (yyvsp[(2) - (4)].num), (yyvsp[(4) - (4)].object_ddl_options)); + lex->set_command(SQLCOM_DROP_TABLE, (yyvsp[-2].num), (yyvsp[0].object_ddl_options)); YYPS->m_lock_type= TL_UNLOCK; YYPS->m_mdl_type= MDL_EXCLUSIVE; } +#line 32980 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1723: - -/* Line 1455 of yacc.c */ -#line 11587 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11579 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32986 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1724: - -/* Line 1455 of yacc.c */ -#line 11588 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11580 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 32992 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1725: - -/* Line 1455 of yacc.c */ -#line 11589 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11581 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; Alter_drop *ad= (new (thd->mem_root) - Alter_drop(Alter_drop::KEY, (yyvsp[(4) - (7)].lex_str).str, (yyvsp[(3) - (7)].num))); + Alter_drop(Alter_drop::KEY, (yyvsp[-3].lex_str).str, (yyvsp[-4].num))); if (ad == NULL) MYSQL_YYABORT; lex->sql_command= SQLCOM_DROP_INDEX; lex->alter_info.reset(); lex->alter_info.flags= Alter_info::ALTER_DROP_INDEX; lex->alter_info.drop_list.push_back(ad, thd->mem_root); - if (!lex->current_select->add_table_to_list(thd, (yyvsp[(6) - (7)].table), NULL, + if (!lex->current_select->add_table_to_list(thd, (yyvsp[-1].table), NULL, TL_OPTION_UPDATING, TL_READ_NO_INSERT, MDL_SHARED_UPGRADABLE)) MYSQL_YYABORT; } +#line 33013 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1726: - -/* Line 1455 of yacc.c */ -#line 11606 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11598 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->set_command(SQLCOM_DROP_DB, (yyvsp[(3) - (4)].object_ddl_options)); - lex->name= (yyvsp[(4) - (4)].lex_str); + lex->set_command(SQLCOM_DROP_DB, (yyvsp[-1].object_ddl_options)); + lex->name= (yyvsp[0].lex_str); } +#line 33023 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1727: - -/* Line 1455 of yacc.c */ -#line 11612 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11604 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; sp_name *spname; - if ((yyvsp[(4) - (6)].lex_str).str && check_db_name(&(yyvsp[(4) - (6)].lex_str))) - my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[(4) - (6)].lex_str).str)); + if ((yyvsp[-2].lex_str).str && check_db_name(&(yyvsp[-2].lex_str))) + my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[-2].lex_str).str)); if (lex->sphead) my_yyabort_error((ER_SP_NO_DROP_SP, MYF(0), "FUNCTION")); - lex->set_command(SQLCOM_DROP_FUNCTION, (yyvsp[(3) - (6)].object_ddl_options)); - spname= new (thd->mem_root) sp_name((yyvsp[(4) - (6)].lex_str), (yyvsp[(6) - (6)].lex_str), true); + lex->set_command(SQLCOM_DROP_FUNCTION, (yyvsp[-3].object_ddl_options)); + spname= new (thd->mem_root) sp_name((yyvsp[-2].lex_str), (yyvsp[0].lex_str), true); if (spname == NULL) MYSQL_YYABORT; spname->init_qname(thd); lex->spname= spname; } +#line 33042 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1728: - -/* Line 1455 of yacc.c */ -#line 11627 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11619 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; LEX_STRING db= {0, 0}; @@ -35621,271 +33051,245 @@ my_yyabort_error((ER_SP_NO_DROP_SP, MYF(0), "FUNCTION")); if (thd->db && lex->copy_db_to(&db.str, &db.length)) MYSQL_YYABORT; - lex->set_command(SQLCOM_DROP_FUNCTION, (yyvsp[(3) - (4)].object_ddl_options)); - spname= new (thd->mem_root) sp_name(db, (yyvsp[(4) - (4)].lex_str), false); + lex->set_command(SQLCOM_DROP_FUNCTION, (yyvsp[-1].object_ddl_options)); + spname= new (thd->mem_root) sp_name(db, (yyvsp[0].lex_str), false); if (spname == NULL) MYSQL_YYABORT; spname->init_qname(thd); lex->spname= spname; } +#line 33062 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1729: - -/* Line 1455 of yacc.c */ -#line 11643 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11635 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (lex->sphead) my_yyabort_error((ER_SP_NO_DROP_SP, MYF(0), "PROCEDURE")); - lex->set_command(SQLCOM_DROP_PROCEDURE, (yyvsp[(3) - (4)].object_ddl_options)); - lex->spname= (yyvsp[(4) - (4)].spname); + lex->set_command(SQLCOM_DROP_PROCEDURE, (yyvsp[-1].object_ddl_options)); + lex->spname= (yyvsp[0].spname); } +#line 33074 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1730: - -/* Line 1455 of yacc.c */ -#line 11651 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11643 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->set_command(SQLCOM_DROP_USER, (yyvsp[(3) - (5)].object_ddl_options)); + Lex->set_command(SQLCOM_DROP_USER, (yyvsp[-2].object_ddl_options)); } +#line 33082 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1731: - -/* Line 1455 of yacc.c */ -#line 11655 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11647 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->set_command(SQLCOM_DROP_ROLE, (yyvsp[(3) - (5)].object_ddl_options)); + Lex->set_command(SQLCOM_DROP_ROLE, (yyvsp[-2].object_ddl_options)); } +#line 33090 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1732: - -/* Line 1455 of yacc.c */ -#line 11659 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11651 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->set_command(SQLCOM_DROP_VIEW, (yyvsp[(3) - (3)].object_ddl_options)); + lex->set_command(SQLCOM_DROP_VIEW, (yyvsp[0].object_ddl_options)); YYPS->m_lock_type= TL_UNLOCK; YYPS->m_mdl_type= MDL_EXCLUSIVE; } +#line 33101 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1733: - -/* Line 1455 of yacc.c */ -#line 11666 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11658 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33107 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1734: - -/* Line 1455 of yacc.c */ -#line 11668 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11660 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->spname= (yyvsp[(4) - (4)].spname); - Lex->set_command(SQLCOM_DROP_EVENT, (yyvsp[(3) - (4)].object_ddl_options)); + Lex->spname= (yyvsp[0].spname); + Lex->set_command(SQLCOM_DROP_EVENT, (yyvsp[-1].object_ddl_options)); } +#line 33116 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1735: - -/* Line 1455 of yacc.c */ -#line 11673 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11665 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->set_command(SQLCOM_DROP_TRIGGER, (yyvsp[(3) - (4)].object_ddl_options)); - lex->spname= (yyvsp[(4) - (4)].spname); + lex->set_command(SQLCOM_DROP_TRIGGER, (yyvsp[-1].object_ddl_options)); + lex->spname= (yyvsp[0].spname); } +#line 33126 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1736: - -/* Line 1455 of yacc.c */ -#line 11679 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11671 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= DROP_TABLESPACE; } +#line 33135 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1737: - -/* Line 1455 of yacc.c */ -#line 11684 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11676 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->alter_tablespace_info->ts_cmd_type= DROP_LOGFILE_GROUP; } +#line 33144 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1738: - -/* Line 1455 of yacc.c */ -#line 11689 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11681 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->set_command(SQLCOM_DROP_SERVER, (yyvsp[(3) - (4)].object_ddl_options)); - Lex->server_options.reset((yyvsp[(4) - (4)].lex_str)); + Lex->set_command(SQLCOM_DROP_SERVER, (yyvsp[-1].object_ddl_options)); + Lex->server_options.reset((yyvsp[0].lex_str)); } +#line 33153 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1741: - -/* Line 1455 of yacc.c */ -#line 11702 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11694 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (1)].table), NULL, + if (!Select->add_table_to_list(thd, (yyvsp[0].table), NULL, TL_OPTION_UPDATING, YYPS->m_lock_type, YYPS->m_mdl_type)) MYSQL_YYABORT; } +#line 33165 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1742: - -/* Line 1455 of yacc.c */ -#line 11713 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11705 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (2)].table), NULL, + if (!Select->add_table_to_list(thd, (yyvsp[-1].table), NULL, TL_OPTION_UPDATING, YYPS->m_lock_type, YYPS->m_mdl_type, NULL, - (yyvsp[(2) - (2)].string_list))) + (yyvsp[0].string_list))) MYSQL_YYABORT; } +#line 33179 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1745: - -/* Line 1455 of yacc.c */ -#line 11731 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11723 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (1)].table), NULL, + if (!Select->add_table_to_list(thd, (yyvsp[0].table), NULL, TL_OPTION_UPDATING | TL_OPTION_ALIAS, YYPS->m_lock_type, YYPS->m_mdl_type)) MYSQL_YYABORT; } +#line 33191 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1746: - -/* Line 1455 of yacc.c */ -#line 11742 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11734 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_exists= FALSE; (yyval.num)= 0; } +#line 33200 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1747: - -/* Line 1455 of yacc.c */ -#line 11747 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11739 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->check_exists= TRUE; (yyval.num)= 1; } +#line 33209 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1748: - -/* Line 1455 of yacc.c */ -#line 11755 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11747 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.object_ddl_options).set(DDL_options_st::OPT_NONE); } +#line 33217 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1749: - -/* Line 1455 of yacc.c */ -#line 11759 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11751 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.object_ddl_options).set(DDL_options_st::OPT_IF_EXISTS); } +#line 33225 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1750: - -/* Line 1455 of yacc.c */ -#line 11765 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11757 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 33231 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1751: - -/* Line 1455 of yacc.c */ -#line 11766 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11758 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= HA_LEX_CREATE_TMP_TABLE; } +#line 33237 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1752: - -/* Line 1455 of yacc.c */ -#line 11774 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11766 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_INSERT; lex->duplicates= DUP_ERROR; mysql_init_select(lex); } +#line 33248 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1753: - -/* Line 1455 of yacc.c */ -#line 11782 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11774 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Select->set_lock_for_tables((yyvsp[(3) - (5)].lock_type)); + Select->set_lock_for_tables((yyvsp[-2].lock_type)); Lex->current_select= &Lex->select_lex; } +#line 33257 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1754: - -/* Line 1455 of yacc.c */ -#line 11787 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11779 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33263 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1755: - -/* Line 1455 of yacc.c */ -#line 11792 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11784 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_REPLACE; lex->duplicates= DUP_REPLACE; mysql_init_select(lex); } +#line 33274 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1756: - -/* Line 1455 of yacc.c */ -#line 11799 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11791 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Select->set_lock_for_tables((yyvsp[(3) - (4)].lock_type)); + Select->set_lock_for_tables((yyvsp[-1].lock_type)); Lex->current_select= &Lex->select_lex; } +#line 33283 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1757: - -/* Line 1455 of yacc.c */ -#line 11804 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11796 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33289 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1758: - -/* Line 1455 of yacc.c */ -#line 11809 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11801 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* If it is SP we do not allow insert optimisation when result of @@ -35894,19 +33298,17 @@ */ (yyval.lock_type)= (Lex->sphead ? TL_WRITE_DEFAULT : TL_WRITE_CONCURRENT_INSERT); } +#line 33302 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1759: - -/* Line 1455 of yacc.c */ -#line 11817 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11809 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lock_type)= TL_WRITE_LOW_PRIORITY; } +#line 33308 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1760: - -/* Line 1455 of yacc.c */ -#line 11819 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11811 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() - thd->query()); @@ -35914,26 +33316,23 @@ YYLIP->yyLength() + 1; (yyval.lock_type)= TL_WRITE_DELAYED; } +#line 33320 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1761: - -/* Line 1455 of yacc.c */ -#line 11826 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11818 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lock_type)= TL_WRITE; } +#line 33326 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1762: - -/* Line 1455 of yacc.c */ -#line 11830 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lock_type)= (yyvsp[(1) - (1)].lock_type); } +#line 11822 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lock_type)= (yyvsp[0].lock_type); } +#line 33332 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1763: - -/* Line 1455 of yacc.c */ -#line 11832 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11824 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() - thd->query()); @@ -35941,252 +33340,222 @@ YYLIP->yyLength() + 1; (yyval.lock_type)= TL_WRITE_DELAYED; } +#line 33344 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1764: - -/* Line 1455 of yacc.c */ -#line 11842 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11834 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33350 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1765: - -/* Line 1455 of yacc.c */ -#line 11843 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11835 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33356 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1766: - -/* Line 1455 of yacc.c */ -#line 11848 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11840 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->field_list.empty(); lex->many_values.empty(); lex->insert_list=0; } +#line 33367 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1767: - -/* Line 1455 of yacc.c */ -#line 11856 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11848 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33373 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1768: - -/* Line 1455 of yacc.c */ -#line 11857 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11849 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33379 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1769: - -/* Line 1455 of yacc.c */ -#line 11858 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11850 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33385 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1770: - -/* Line 1455 of yacc.c */ -#line 11860 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11852 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (!(lex->insert_list= new (thd->mem_root) List_item) || lex->many_values.push_back(lex->insert_list, thd->mem_root)) MYSQL_YYABORT; } +#line 33396 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1772: - -/* Line 1455 of yacc.c */ -#line 11871 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->field_list.push_back((yyvsp[(3) - (3)].item), thd->mem_root); } +#line 11863 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->field_list.push_back((yyvsp[0].item), thd->mem_root); } +#line 33402 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1773: - -/* Line 1455 of yacc.c */ -#line 11872 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->field_list.push_back((yyvsp[(1) - (1)].item), thd->mem_root); } +#line 11864 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->field_list.push_back((yyvsp[0].item), thd->mem_root); } +#line 33408 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1774: - -/* Line 1455 of yacc.c */ -#line 11876 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11868 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33414 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1775: - -/* Line 1455 of yacc.c */ -#line 11877 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11869 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33420 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1776: - -/* Line 1455 of yacc.c */ -#line 11879 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11871 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->set_braces(0);} +#line 33426 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1777: - -/* Line 1455 of yacc.c */ -#line 11880 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11872 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33432 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1778: - -/* Line 1455 of yacc.c */ -#line 11882 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11874 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->set_braces(1);} +#line 33438 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1779: - -/* Line 1455 of yacc.c */ -#line 11883 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11875 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33444 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1784: - -/* Line 1455 of yacc.c */ -#line 11898 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11890 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - if (lex->field_list.push_back((yyvsp[(1) - (3)].item), thd->mem_root) || - lex->insert_list->push_back((yyvsp[(3) - (3)].item), thd->mem_root)) + if (lex->field_list.push_back((yyvsp[-2].item), thd->mem_root) || + lex->insert_list->push_back((yyvsp[0].item), thd->mem_root)) MYSQL_YYABORT; } +#line 33455 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1785: - -/* Line 1455 of yacc.c */ -#line 11907 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11899 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33461 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1786: - -/* Line 1455 of yacc.c */ -#line 11908 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11900 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33467 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1787: - -/* Line 1455 of yacc.c */ -#line 11912 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11904 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33473 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1788: - -/* Line 1455 of yacc.c */ -#line 11913 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11905 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33479 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1789: - -/* Line 1455 of yacc.c */ -#line 11918 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11910 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!(Lex->insert_list= new (thd->mem_root) List_item)) MYSQL_YYABORT; } +#line 33488 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1790: - -/* Line 1455 of yacc.c */ -#line 11923 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11915 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (lex->many_values.push_back(lex->insert_list, thd->mem_root)) MYSQL_YYABORT; } +#line 33498 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1791: - -/* Line 1455 of yacc.c */ -#line 11931 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11923 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33504 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1793: - -/* Line 1455 of yacc.c */ -#line 11937 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11929 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->insert_list->push_back((yyvsp[(3) - (3)].item), thd->mem_root)) + if (Lex->insert_list->push_back((yyvsp[0].item), thd->mem_root)) MYSQL_YYABORT; } +#line 33513 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1794: - -/* Line 1455 of yacc.c */ -#line 11942 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11934 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->insert_list->push_back((yyvsp[(1) - (1)].item), thd->mem_root)) + if (Lex->insert_list->push_back((yyvsp[0].item), thd->mem_root)) MYSQL_YYABORT; } +#line 33522 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1795: - -/* Line 1455 of yacc.c */ -#line 11949 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item);} +#line 11941 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item);} +#line 33528 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1796: - -/* Line 1455 of yacc.c */ -#line 11951 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11943 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_default_value(thd, Lex->current_context()); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 33538 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1798: - -/* Line 1455 of yacc.c */ -#line 11960 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11952 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->duplicates= DUP_UPDATE; } +#line 33544 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1800: - -/* Line 1455 of yacc.c */ -#line 11968 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11960 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; mysql_init_select(lex); lex->sql_command= SQLCOM_UPDATE; lex->duplicates= DUP_ERROR; } +#line 33555 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1801: - -/* Line 1455 of yacc.c */ -#line 11976 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11968 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->select_lex.table_list.elements > 1) @@ -36203,57 +33572,51 @@ be too pessimistic. We will decrease lock level if possible in mysql_multi_update(). */ - Select->set_lock_for_tables((yyvsp[(3) - (7)].lock_type)); + Select->set_lock_for_tables((yyvsp[-4].lock_type)); } +#line 33578 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1802: - -/* Line 1455 of yacc.c */ -#line 11994 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11986 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33584 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1805: - -/* Line 1455 of yacc.c */ -#line 12004 "/home/buildbot/git/sql/sql_yacc.yy" +#line 11996 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_item_to_list(thd, (yyvsp[(1) - (3)].item)) || add_value_to_list(thd, (yyvsp[(3) - (3)].item))) + if (add_item_to_list(thd, (yyvsp[-2].item)) || add_value_to_list(thd, (yyvsp[0].item))) MYSQL_YYABORT; } +#line 33593 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1808: - -/* Line 1455 of yacc.c */ -#line 12017 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12009 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - if (lex->update_list.push_back((yyvsp[(1) - (3)].item), thd->mem_root) || - lex->value_list.push_back((yyvsp[(3) - (3)].item), thd->mem_root)) + if (lex->update_list.push_back((yyvsp[-2].item), thd->mem_root) || + lex->value_list.push_back((yyvsp[0].item), thd->mem_root)) MYSQL_YYABORT; } +#line 33604 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1809: - -/* Line 1455 of yacc.c */ -#line 12026 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12018 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lock_type)= TL_WRITE_DEFAULT; } +#line 33610 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1810: - -/* Line 1455 of yacc.c */ -#line 12027 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12019 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lock_type)= TL_WRITE_LOW_PRIORITY; } +#line 33616 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1811: - -/* Line 1455 of yacc.c */ -#line 12034 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12026 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_DELETE; @@ -36264,86 +33627,78 @@ lex->ignore= 0; lex->select_lex.init_order(); } +#line 33631 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1813: - -/* Line 1455 of yacc.c */ -#line 12049 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12041 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!Select->add_table_to_list(thd, (yyvsp[(2) - (3)].table), NULL, TL_OPTION_UPDATING, + if (!Select->add_table_to_list(thd, (yyvsp[-1].table), NULL, TL_OPTION_UPDATING, YYPS->m_lock_type, YYPS->m_mdl_type, NULL, - (yyvsp[(3) - (3)].string_list))) + (yyvsp[0].string_list))) MYSQL_YYABORT; YYPS->m_lock_type= TL_READ_DEFAULT; YYPS->m_mdl_type= MDL_SHARED_READ; } +#line 33646 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1814: - -/* Line 1455 of yacc.c */ -#line 12060 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12052 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33652 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1815: - -/* Line 1455 of yacc.c */ -#line 12061 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12053 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33658 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1816: - -/* Line 1455 of yacc.c */ -#line 12063 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12055 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { mysql_init_multi_delete(Lex); YYPS->m_lock_type= TL_READ_DEFAULT; YYPS->m_mdl_type= MDL_SHARED_READ; } +#line 33668 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1817: - -/* Line 1455 of yacc.c */ -#line 12069 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12061 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (multi_delete_set_locks_and_link_aux_tables(Lex)) MYSQL_YYABORT; } +#line 33677 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1818: - -/* Line 1455 of yacc.c */ -#line 12074 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12066 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { mysql_init_multi_delete(Lex); YYPS->m_lock_type= TL_READ_DEFAULT; YYPS->m_mdl_type= MDL_SHARED_READ; } +#line 33687 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1819: - -/* Line 1455 of yacc.c */ -#line 12080 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12072 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (multi_delete_set_locks_and_link_aux_tables(Lex)) MYSQL_YYABORT; } +#line 33696 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1824: - -/* Line 1455 of yacc.c */ -#line 12098 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12090 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Table_ident *ti= new (thd->mem_root) Table_ident((yyvsp[(1) - (2)].lex_str)); + Table_ident *ti= new (thd->mem_root) Table_ident((yyvsp[-1].lex_str)); if (ti == NULL) MYSQL_YYABORT; if (!Select->add_table_to_list(thd, @@ -36354,14 +33709,13 @@ YYPS->m_mdl_type)) MYSQL_YYABORT; } +#line 33713 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1825: - -/* Line 1455 of yacc.c */ -#line 12111 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Table_ident *ti= new (thd->mem_root) Table_ident(thd, (yyvsp[(1) - (4)].lex_str), (yyvsp[(3) - (4)].lex_str), 0); + Table_ident *ti= new (thd->mem_root) Table_ident(thd, (yyvsp[-3].lex_str), (yyvsp[-1].lex_str), 0); if (ti == NULL) MYSQL_YYABORT; if (!Select->add_table_to_list(thd, @@ -36372,61 +33726,53 @@ YYPS->m_mdl_type)) MYSQL_YYABORT; } +#line 33730 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1826: - -/* Line 1455 of yacc.c */ -#line 12126 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12118 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33736 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1827: - -/* Line 1455 of yacc.c */ -#line 12127 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12119 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33742 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1828: - -/* Line 1455 of yacc.c */ -#line 12131 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12123 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33748 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1829: - -/* Line 1455 of yacc.c */ -#line 12132 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12124 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 33754 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1830: - -/* Line 1455 of yacc.c */ -#line 12136 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12128 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->options|= OPTION_QUICK; } +#line 33760 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1831: - -/* Line 1455 of yacc.c */ -#line 12137 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12129 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { YYPS->m_lock_type= TL_WRITE_LOW_PRIORITY; } +#line 33766 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1832: - -/* Line 1455 of yacc.c */ -#line 12138 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12130 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ignore= 1; } +#line 33772 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1833: - -/* Line 1455 of yacc.c */ -#line 12143 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12135 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= Lex; lex->sql_command= SQLCOM_TRUNCATE; @@ -36437,12 +33783,11 @@ YYPS->m_lock_type= TL_WRITE; YYPS->m_mdl_type= MDL_EXCLUSIVE; } +#line 33787 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1834: - -/* Line 1455 of yacc.c */ -#line 12154 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12146 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX* lex= thd->lex; DBUG_ASSERT(!lex->m_sql_cmd); @@ -36450,111 +33795,99 @@ if (lex->m_sql_cmd == NULL) MYSQL_YYABORT; } +#line 33799 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1841: - -/* Line 1455 of yacc.c */ -#line 12178 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12170 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_CPU; } +#line 33807 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1842: - -/* Line 1455 of yacc.c */ -#line 12182 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12174 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_MEMORY; } +#line 33815 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1843: - -/* Line 1455 of yacc.c */ -#line 12186 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12178 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_BLOCK_IO; } +#line 33823 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1844: - -/* Line 1455 of yacc.c */ -#line 12190 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12182 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_CONTEXT; } +#line 33831 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1845: - -/* Line 1455 of yacc.c */ -#line 12194 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12186 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_PAGE_FAULTS; } +#line 33839 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1846: - -/* Line 1455 of yacc.c */ -#line 12198 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12190 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_IPC; } +#line 33847 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1847: - -/* Line 1455 of yacc.c */ -#line 12202 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12194 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_SWAPS; } +#line 33855 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1848: - -/* Line 1455 of yacc.c */ -#line 12206 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12198 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_SOURCE; } +#line 33863 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1849: - -/* Line 1455 of yacc.c */ -#line 12210 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12202 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_options|= PROFILE_ALL; } +#line 33871 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1850: - -/* Line 1455 of yacc.c */ -#line 12217 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12209 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->profile_query_id= 0; } +#line 33879 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1851: - -/* Line 1455 of yacc.c */ -#line 12221 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12213 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->profile_query_id= atoi((yyvsp[(3) - (3)].lex_str).str); + Lex->profile_query_id= atoi((yyvsp[0].lex_str).str); } +#line 33887 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1852: - -/* Line 1455 of yacc.c */ -#line 12230 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12222 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->wild=0; @@ -36563,693 +33896,626 @@ lex->current_select->parsing_place= SELECT_LIST; lex->create_info.init(); } +#line 33900 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1853: - -/* Line 1455 of yacc.c */ -#line 12239 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12231 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= NO_MATTER; } +#line 33908 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1854: - -/* Line 1455 of yacc.c */ -#line 12246 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12238 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_DATABASES; if (prepare_schema_table(thd, lex, 0, SCH_SCHEMATA)) MYSQL_YYABORT; } +#line 33919 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1855: - -/* Line 1455 of yacc.c */ -#line 12253 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12245 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_TABLES; - lex->select_lex.db= (yyvsp[(3) - (4)].simple_string); + lex->select_lex.db= (yyvsp[-1].simple_string); if (prepare_schema_table(thd, lex, 0, SCH_TABLE_NAMES)) MYSQL_YYABORT; } +#line 33931 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1856: - -/* Line 1455 of yacc.c */ -#line 12261 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12253 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_TRIGGERS; - lex->select_lex.db= (yyvsp[(3) - (4)].simple_string); + lex->select_lex.db= (yyvsp[-1].simple_string); if (prepare_schema_table(thd, lex, 0, SCH_TRIGGERS)) MYSQL_YYABORT; } +#line 33943 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1857: - -/* Line 1455 of yacc.c */ -#line 12269 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12261 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_EVENTS; - lex->select_lex.db= (yyvsp[(2) - (3)].simple_string); + lex->select_lex.db= (yyvsp[-1].simple_string); if (prepare_schema_table(thd, lex, 0, SCH_EVENTS)) MYSQL_YYABORT; } +#line 33955 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1858: - -/* Line 1455 of yacc.c */ -#line 12277 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12269 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_TABLE_STATUS; - lex->select_lex.db= (yyvsp[(3) - (4)].simple_string); + lex->select_lex.db= (yyvsp[-1].simple_string); if (prepare_schema_table(thd, lex, 0, SCH_TABLES)) MYSQL_YYABORT; } +#line 33967 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1859: - -/* Line 1455 of yacc.c */ -#line 12285 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12277 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_OPEN_TABLES; - lex->select_lex.db= (yyvsp[(3) - (4)].simple_string); + lex->select_lex.db= (yyvsp[-1].simple_string); if (prepare_schema_table(thd, lex, 0, SCH_OPEN_TABLES)) MYSQL_YYABORT; } +#line 33979 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1860: - -/* Line 1455 of yacc.c */ -#line 12293 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12285 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_PLUGINS; if (prepare_schema_table(thd, lex, 0, SCH_PLUGINS)) MYSQL_YYABORT; } +#line 33990 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1861: - -/* Line 1455 of yacc.c */ -#line 12300 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12292 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->ident= (yyvsp[(3) - (3)].lex_str); + Lex->ident= (yyvsp[0].lex_str); Lex->sql_command= SQLCOM_SHOW_PLUGINS; if (prepare_schema_table(thd, Lex, 0, SCH_ALL_PLUGINS)) MYSQL_YYABORT; } +#line 34001 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1862: - -/* Line 1455 of yacc.c */ -#line 12307 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12299 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_PLUGINS; if (prepare_schema_table(thd, Lex, 0, SCH_ALL_PLUGINS)) MYSQL_YYABORT; } +#line 34011 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1863: - -/* Line 1455 of yacc.c */ -#line 12313 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->create_info.db_type= (yyvsp[(2) - (3)].db_type); } +#line 12305 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->create_info.db_type= (yyvsp[-1].db_type); } +#line 34017 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1864: - -/* Line 1455 of yacc.c */ -#line 12315 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12307 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_info.db_type= NULL; } +#line 34023 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1865: - -/* Line 1455 of yacc.c */ -#line 12317 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12309 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_FIELDS; - if ((yyvsp[(5) - (6)].simple_string)) - (yyvsp[(4) - (6)].table)->change_db((yyvsp[(5) - (6)].simple_string)); - if (prepare_schema_table(thd, lex, (yyvsp[(4) - (6)].table), SCH_COLUMNS)) + if ((yyvsp[-1].simple_string)) + (yyvsp[-2].table)->change_db((yyvsp[-1].simple_string)); + if (prepare_schema_table(thd, lex, (yyvsp[-2].table), SCH_COLUMNS)) MYSQL_YYABORT; } +#line 34036 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1866: - -/* Line 1455 of yacc.c */ -#line 12326 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12318 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_BINLOGS; } +#line 34044 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1867: - -/* Line 1455 of yacc.c */ -#line 12330 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12322 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_SLAVE_HOSTS; } +#line 34052 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1868: - -/* Line 1455 of yacc.c */ -#line 12334 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12326 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_BINLOG_EVENTS; } +#line 34061 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1870: - -/* Line 1455 of yacc.c */ -#line 12340 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12332 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_RELAYLOG_EVENTS; } +#line 34070 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1872: - -/* Line 1455 of yacc.c */ -#line 12345 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12337 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_KEYS; - if ((yyvsp[(4) - (5)].simple_string)) - (yyvsp[(3) - (5)].table)->change_db((yyvsp[(4) - (5)].simple_string)); - if (prepare_schema_table(thd, lex, (yyvsp[(3) - (5)].table), SCH_STATISTICS)) + if ((yyvsp[-1].simple_string)) + (yyvsp[-2].table)->change_db((yyvsp[-1].simple_string)); + if (prepare_schema_table(thd, lex, (yyvsp[-2].table), SCH_STATISTICS)) MYSQL_YYABORT; } +#line 34083 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1873: - -/* Line 1455 of yacc.c */ -#line 12354 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12346 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; if (prepare_schema_table(thd, lex, 0, SCH_ENGINES)) MYSQL_YYABORT; } +#line 34094 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1874: - -/* Line 1455 of yacc.c */ -#line 12361 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12353 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_AUTHORS; } +#line 34103 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1875: - -/* Line 1455 of yacc.c */ -#line 12366 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12358 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_CONTRIBUTORS; } +#line 34112 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1876: - -/* Line 1455 of yacc.c */ -#line 12371 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12363 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_PRIVILEGES; } +#line 34121 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1877: - -/* Line 1455 of yacc.c */ -#line 12376 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12368 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (void) create_select_for_variable("warning_count"); } +#line 34127 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1878: - -/* Line 1455 of yacc.c */ -#line 12378 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12370 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (void) create_select_for_variable("error_count"); } +#line 34133 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1879: - -/* Line 1455 of yacc.c */ -#line 12380 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12372 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_WARNS;} +#line 34139 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1880: - -/* Line 1455 of yacc.c */ -#line 12382 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12374 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_ERRORS;} +#line 34145 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1881: - -/* Line 1455 of yacc.c */ -#line 12384 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12376 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_PROFILES; } +#line 34151 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1882: - -/* Line 1455 of yacc.c */ -#line 12386 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12378 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_PROFILE; if (prepare_schema_table(thd, lex, NULL, SCH_PROFILES) != 0) MYSQL_YYABORT; } +#line 34162 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1883: - -/* Line 1455 of yacc.c */ -#line 12393 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12385 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS; - lex->option_type= (yyvsp[(1) - (3)].var_type); + lex->option_type= (yyvsp[-2].var_type); if (prepare_schema_table(thd, lex, 0, SCH_SESSION_STATUS)) MYSQL_YYABORT; } +#line 34174 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1884: - -/* Line 1455 of yacc.c */ -#line 12401 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12393 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;} +#line 34180 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1885: - -/* Line 1455 of yacc.c */ -#line 12403 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12395 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_VARIABLES; - lex->option_type= (yyvsp[(1) - (3)].var_type); + lex->option_type= (yyvsp[-2].var_type); if (prepare_schema_table(thd, lex, 0, SCH_SESSION_VARIABLES)) MYSQL_YYABORT; } +#line 34192 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1886: - -/* Line 1455 of yacc.c */ -#line 12411 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12403 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_CHARSETS; if (prepare_schema_table(thd, lex, 0, SCH_CHARSETS)) MYSQL_YYABORT; } +#line 34203 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1887: - -/* Line 1455 of yacc.c */ -#line 12418 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12410 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_COLLATIONS; if (prepare_schema_table(thd, lex, 0, SCH_COLLATIONS)) MYSQL_YYABORT; } +#line 34214 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1888: - -/* Line 1455 of yacc.c */ -#line 12425 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12417 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_GRANTS; if (!(Lex->grant_user= (LEX_USER*)thd->alloc(sizeof(LEX_USER)))) MYSQL_YYABORT; Lex->grant_user->user= current_user_and_current_role; } +#line 34225 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1889: - -/* Line 1455 of yacc.c */ -#line 12432 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12424 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_GRANTS; - lex->grant_user=(yyvsp[(3) - (4)].lex_user); + lex->grant_user=(yyvsp[-1].lex_user); } +#line 34235 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1890: - -/* Line 1455 of yacc.c */ -#line 12438 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12430 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->set_command(SQLCOM_SHOW_CREATE_DB, (yyvsp[(3) - (4)].object_ddl_options)); - Lex->name= (yyvsp[(4) - (4)].lex_str); + Lex->set_command(SQLCOM_SHOW_CREATE_DB, (yyvsp[-1].object_ddl_options)); + Lex->name= (yyvsp[0].lex_str); } +#line 34244 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1891: - -/* Line 1455 of yacc.c */ -#line 12443 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12435 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command = SQLCOM_SHOW_CREATE; - if (!lex->select_lex.add_table_to_list(thd, (yyvsp[(3) - (3)].table), NULL,0)) + if (!lex->select_lex.add_table_to_list(thd, (yyvsp[0].table), NULL,0)) MYSQL_YYABORT; lex->create_info.storage_media= HA_SM_DEFAULT; } +#line 34256 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1892: - -/* Line 1455 of yacc.c */ -#line 12451 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12443 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command = SQLCOM_SHOW_CREATE; - if (!lex->select_lex.add_table_to_list(thd, (yyvsp[(3) - (3)].table), NULL, 0)) + if (!lex->select_lex.add_table_to_list(thd, (yyvsp[0].table), NULL, 0)) MYSQL_YYABORT; lex->only_view= 1; } +#line 34268 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1893: - -/* Line 1455 of yacc.c */ -#line 12459 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12451 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_MASTER_STAT; } +#line 34276 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1894: - -/* Line 1455 of yacc.c */ -#line 12463 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12455 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; Lex->verbose= 1; } +#line 34285 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1895: - -/* Line 1455 of yacc.c */ -#line 12468 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12460 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; lex->mi.connection_name= null_lex_str; lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; lex->verbose= 0; } +#line 34296 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1896: - -/* Line 1455 of yacc.c */ -#line 12475 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12467 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; Lex->verbose= 0; } +#line 34305 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1897: - -/* Line 1455 of yacc.c */ -#line 12480 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12472 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command = SQLCOM_SHOW_CREATE_PROC; - lex->spname= (yyvsp[(3) - (3)].spname); + lex->spname= (yyvsp[0].spname); } +#line 34316 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1898: - -/* Line 1455 of yacc.c */ -#line 12487 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12479 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command = SQLCOM_SHOW_CREATE_FUNC; - lex->spname= (yyvsp[(3) - (3)].spname); + lex->spname= (yyvsp[0].spname); } +#line 34327 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1899: - -/* Line 1455 of yacc.c */ -#line 12494 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12486 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_CREATE_TRIGGER; - lex->spname= (yyvsp[(3) - (3)].spname); + lex->spname= (yyvsp[0].spname); } +#line 34337 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1900: - -/* Line 1455 of yacc.c */ -#line 12500 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12492 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS_PROC; if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES)) MYSQL_YYABORT; } +#line 34348 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1901: - -/* Line 1455 of yacc.c */ -#line 12507 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12499 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_SHOW_STATUS_FUNC; if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES)) MYSQL_YYABORT; } +#line 34359 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1902: - -/* Line 1455 of yacc.c */ -#line 12514 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12506 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_PROC_CODE; - Lex->spname= (yyvsp[(3) - (3)].spname); + Lex->spname= (yyvsp[0].spname); } +#line 34368 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1903: - -/* Line 1455 of yacc.c */ -#line 12519 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12511 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_FUNC_CODE; - Lex->spname= (yyvsp[(3) - (3)].spname); + Lex->spname= (yyvsp[0].spname); } +#line 34377 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1904: - -/* Line 1455 of yacc.c */ -#line 12524 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12516 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->spname= (yyvsp[(3) - (3)].spname); + Lex->spname= (yyvsp[0].spname); Lex->sql_command = SQLCOM_SHOW_CREATE_EVENT; } +#line 34386 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1905: - -/* Line 1455 of yacc.c */ -#line 12529 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12521 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_EXPLAIN; if (prepare_schema_table(thd, Lex, 0, SCH_EXPLAIN)) MYSQL_YYABORT; - add_value_to_list(thd, (yyvsp[(3) - (3)].item)); + add_value_to_list(thd, (yyvsp[0].item)); } +#line 34397 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1906: - -/* Line 1455 of yacc.c */ -#line 12536 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12528 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; bool in_plugin; lex->sql_command= SQLCOM_SHOW_GENERIC; - ST_SCHEMA_TABLE *table= find_schema_table(thd, (yyvsp[(1) - (3)].lex_str).str, &in_plugin); + ST_SCHEMA_TABLE *table= find_schema_table(thd, (yyvsp[-2].lex_str).str, &in_plugin); if (!table || !table->old_format || !in_plugin) { - my_parse_error(thd, ER_SYNTAX_ERROR, (yyvsp[(2) - (3)].simple_string)); + my_parse_error(thd, ER_SYNTAX_ERROR, (yyvsp[-1].simple_string)); MYSQL_YYABORT; } if (lex->wild && table->idx_field1 < 0) { - my_parse_error(thd, ER_SYNTAX_ERROR, (yyvsp[(3) - (3)].simple_string)); + my_parse_error(thd, ER_SYNTAX_ERROR, (yyvsp[0].simple_string)); MYSQL_YYABORT; } if (make_schema_select(thd, Lex->current_select, table)) MYSQL_YYABORT; } +#line 34420 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1907: - -/* Line 1455 of yacc.c */ -#line 12558 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12550 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_ENGINE_STATUS; } +#line 34426 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1908: - -/* Line 1455 of yacc.c */ -#line 12560 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12552 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_ENGINE_MUTEX; } +#line 34432 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1909: - -/* Line 1455 of yacc.c */ -#line 12562 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12554 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHOW_ENGINE_LOGS; } +#line 34438 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1914: - -/* Line 1455 of yacc.c */ -#line 12576 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12568 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.simple_string)= 0; } +#line 34444 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1915: - -/* Line 1455 of yacc.c */ -#line 12577 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.simple_string)= (yyvsp[(2) - (2)].lex_str).str; } +#line 12569 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.simple_string)= (yyvsp[0].lex_str).str; } +#line 34450 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1916: - -/* Line 1455 of yacc.c */ -#line 12581 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12573 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->verbose=0; } +#line 34456 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1917: - -/* Line 1455 of yacc.c */ -#line 12582 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12574 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->verbose=1; } +#line 34462 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1920: - -/* Line 1455 of yacc.c */ -#line 12591 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12583 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->mi.log_file_name = 0; } +#line 34468 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1921: - -/* Line 1455 of yacc.c */ -#line 12592 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->mi.log_file_name = (yyvsp[(2) - (2)].lex_str).str; } +#line 12584 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->mi.log_file_name = (yyvsp[0].lex_str).str; } +#line 34474 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1922: - -/* Line 1455 of yacc.c */ -#line 12596 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12588 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->mi.pos = 4; /* skip magic number */ } +#line 34480 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1923: - -/* Line 1455 of yacc.c */ -#line 12597 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->mi.pos = (yyvsp[(2) - (2)].ulonglong_number); } +#line 12589 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->mi.pos = (yyvsp[0].ulonglong_number); } +#line 34486 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1924: - -/* Line 1455 of yacc.c */ -#line 12601 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12593 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.simple_string)= 0; } +#line 34492 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1925: - -/* Line 1455 of yacc.c */ -#line 12603 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12595 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->wild= new (thd->mem_root) String((yyvsp[(3) - (3)].lex_str).str, (yyvsp[(3) - (3)].lex_str).length, + Lex->wild= new (thd->mem_root) String((yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, system_charset_info); if (Lex->wild == NULL) MYSQL_YYABORT; - (yyval.simple_string)= (yyvsp[(2) - (3)].simple_string); + (yyval.simple_string)= (yyvsp[-1].simple_string); } +#line 34504 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1926: - -/* Line 1455 of yacc.c */ -#line 12611 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12603 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Select->where= normalize_cond(thd, (yyvsp[(3) - (3)].item)); - if ((yyvsp[(3) - (3)].item)) - (yyvsp[(3) - (3)].item)->top_level_item(); - (yyval.simple_string)= (yyvsp[(2) - (3)].simple_string); + Select->where= normalize_cond(thd, (yyvsp[0].item)); + if ((yyvsp[0].item)) + (yyvsp[0].item)->top_level_item(); + (yyval.simple_string)= (yyvsp[-1].simple_string); } +#line 34515 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1927: - -/* Line 1455 of yacc.c */ -#line 12622 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12614 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; mysql_init_select(lex); @@ -37257,138 +34523,123 @@ lex->sql_command= SQLCOM_SHOW_FIELDS; lex->select_lex.db= 0; lex->verbose= 0; - if (prepare_schema_table(thd, lex, (yyvsp[(2) - (2)].table), SCH_COLUMNS)) + if (prepare_schema_table(thd, lex, (yyvsp[0].table), SCH_COLUMNS)) MYSQL_YYABORT; } +#line 34530 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1928: - -/* Line 1455 of yacc.c */ -#line 12633 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12625 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->parsing_place= NO_MATTER; } +#line 34538 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1929: - -/* Line 1455 of yacc.c */ -#line 12637 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12629 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->describe|= DESCRIBE_NORMAL; } +#line 34544 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1930: - -/* Line 1455 of yacc.c */ -#line 12639 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12631 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->select_lex.options|= SELECT_DESCRIBE; } +#line 34553 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1938: - -/* Line 1455 of yacc.c */ -#line 12660 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12652 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->analyze_stmt= true; } +#line 34561 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1939: - -/* Line 1455 of yacc.c */ -#line 12666 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12658 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->describe|= DESCRIBE_EXTENDED; } +#line 34567 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1940: - -/* Line 1455 of yacc.c */ -#line 12667 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12659 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->describe|= DESCRIBE_PARTITIONS; } +#line 34573 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1941: - -/* Line 1455 of yacc.c */ -#line 12668 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12660 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34579 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1942: - -/* Line 1455 of yacc.c */ -#line 12672 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12664 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34585 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1943: - -/* Line 1455 of yacc.c */ -#line 12674 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12666 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!my_strcasecmp(system_charset_info, (yyvsp[(3) - (3)].lex_str).str, "JSON")) + if (!my_strcasecmp(system_charset_info, (yyvsp[0].lex_str).str, "JSON")) Lex->explain_json= true; - else if (!my_strcasecmp(system_charset_info, (yyvsp[(3) - (3)].lex_str).str, "TRADITIONAL")) + else if (!my_strcasecmp(system_charset_info, (yyvsp[0].lex_str).str, "TRADITIONAL")) DBUG_ASSERT(Lex->explain_json==false); else - my_yyabort_error((ER_UNKNOWN_EXPLAIN_FORMAT, MYF(0), (yyvsp[(3) - (3)].lex_str).str)); + my_yyabort_error((ER_UNKNOWN_EXPLAIN_FORMAT, MYF(0), (yyvsp[0].lex_str).str)); } +#line 34598 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1944: - -/* Line 1455 of yacc.c */ -#line 12685 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12677 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34604 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1945: - -/* Line 1455 of yacc.c */ -#line 12686 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->wild= (yyvsp[(1) - (1)].string); } +#line 12678 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->wild= (yyvsp[0].string); } +#line 34610 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1946: - -/* Line 1455 of yacc.c */ -#line 12688 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12680 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->wild= new (thd->mem_root) String((const char*) (yyvsp[(1) - (1)].lex_str).str, - (yyvsp[(1) - (1)].lex_str).length, + Lex->wild= new (thd->mem_root) String((const char*) (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length, system_charset_info); if (Lex->wild == NULL) MYSQL_YYABORT; } +#line 34622 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1947: - -/* Line 1455 of yacc.c */ -#line 12702 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12694 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_FLUSH; lex->type= 0; - lex->no_write_to_binlog= (yyvsp[(2) - (2)].num); + lex->no_write_to_binlog= (yyvsp[0].num); } +#line 34633 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1948: - -/* Line 1455 of yacc.c */ -#line 12709 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12701 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34639 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1949: - -/* Line 1455 of yacc.c */ -#line 12714 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12706 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_TABLES; /* @@ -37398,26 +34649,23 @@ YYPS->m_lock_type= TL_READ_NO_INSERT; YYPS->m_mdl_type= MDL_SHARED_HIGH_PRIO; } +#line 34653 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1950: - -/* Line 1455 of yacc.c */ -#line 12724 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12716 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34659 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1952: - -/* Line 1455 of yacc.c */ -#line 12729 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12721 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34665 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1953: - -/* Line 1455 of yacc.c */ -#line 12731 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12723 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { TABLE_LIST *tables= Lex->query_tables; for (; tables; tables= tables->next_global) @@ -37427,19 +34675,17 @@ tables->open_type= OT_BASE_ONLY; /* Ignore temporary tables. */ } } +#line 34679 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1954: - -/* Line 1455 of yacc.c */ -#line 12744 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->type|= REFRESH_READ_LOCK | (yyvsp[(4) - (4)].num); } +#line 12736 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->type|= REFRESH_READ_LOCK | (yyvsp[0].num); } +#line 34685 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1955: - -/* Line 1455 of yacc.c */ -#line 12746 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12738 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (Lex->query_tables == NULL) // Table list can't be empty { @@ -37448,61 +34694,53 @@ } Lex->type|= REFRESH_FOR_EXPORT; } +#line 34698 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1956: - -/* Line 1455 of yacc.c */ -#line 12753 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12745 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34704 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1958: - -/* Line 1455 of yacc.c */ -#line 12759 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12751 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34710 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1959: - -/* Line 1455 of yacc.c */ -#line 12764 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12756 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_ERROR_LOG; } +#line 34716 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1960: - -/* Line 1455 of yacc.c */ -#line 12766 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12758 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_ENGINE_LOG; } +#line 34722 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1961: - -/* Line 1455 of yacc.c */ -#line 12768 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12760 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_GENERAL_LOG; } +#line 34728 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1962: - -/* Line 1455 of yacc.c */ -#line 12770 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12762 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_SLOW_LOG; } +#line 34734 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1963: - -/* Line 1455 of yacc.c */ -#line 12772 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12764 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_BINARY_LOG; } +#line 34740 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1964: - -/* Line 1455 of yacc.c */ -#line 12774 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12766 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->type & REFRESH_RELAY_LOG) @@ -37510,50 +34748,44 @@ lex->type|= REFRESH_RELAY_LOG; lex->relay_log_connection_name= lex->mi.connection_name; } +#line 34752 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1965: - -/* Line 1455 of yacc.c */ -#line 12782 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12774 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_QUERY_CACHE_FREE; } +#line 34758 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1966: - -/* Line 1455 of yacc.c */ -#line 12784 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12776 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_HOSTS; } +#line 34764 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1967: - -/* Line 1455 of yacc.c */ -#line 12786 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12778 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_GRANT; } +#line 34770 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1968: - -/* Line 1455 of yacc.c */ -#line 12788 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12780 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_LOG; Lex->relay_log_connection_name= empty_lex_str; } +#line 34779 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1969: - -/* Line 1455 of yacc.c */ -#line 12793 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12785 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_STATUS; } +#line 34785 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1970: - -/* Line 1455 of yacc.c */ -#line 12795 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12787 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->type & REFRESH_SLAVE) @@ -37561,196 +34793,193 @@ lex->type|= REFRESH_SLAVE; lex->reset_slave_info.all= false; } +#line 34797 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1971: - -/* Line 1455 of yacc.c */ -#line 12803 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12795 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_MASTER; } +#line 34803 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1972: - -/* Line 1455 of yacc.c */ -#line 12805 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12797 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_DES_KEY_FILE; } +#line 34809 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1973: - -/* Line 1455 of yacc.c */ -#line 12807 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12799 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_USER_RESOURCES; } +#line 34815 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1974: - -/* Line 1455 of yacc.c */ -#line 12809 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12801 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_GENERIC; - ST_SCHEMA_TABLE *table= find_schema_table(thd, (yyvsp[(1) - (2)].lex_str).str); + ST_SCHEMA_TABLE *table= find_schema_table(thd, (yyvsp[-1].lex_str).str); if (!table || !table->reset_table) { - my_parse_error(thd, ER_SYNTAX_ERROR, (yyvsp[(2) - (2)].simple_string)); + my_parse_error(thd, ER_SYNTAX_ERROR, (yyvsp[0].simple_string)); MYSQL_YYABORT; } Lex->view_list.push_back((LEX_STRING*) - thd->memdup(&(yyvsp[(1) - (2)].lex_str), sizeof(LEX_STRING)), + thd->memdup(&(yyvsp[-1].lex_str), sizeof(LEX_STRING)), thd->mem_root); } +#line 34832 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1975: - -/* Line 1455 of yacc.c */ -#line 12824 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12816 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34838 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1976: - -/* Line 1455 of yacc.c */ -#line 12825 "/home/buildbot/git/sql/sql_yacc.yy" +#line 12817 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34844 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1977: - -/* Line 1455 of yacc.c */ -#line 12829 "/home/buildbot/git/sql/sql_yacc.yy" - {(yyval.num)= 0;} +#line 12821 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 34850 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 1978: +#line 12823 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 34856 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; -/* Line 1455 of yacc.c */ -#line 12830 "/home/buildbot/git/sql/sql_yacc.yy" - {(yyval.num)= REFRESH_CHECKPOINT; } + case 1982: +#line 12833 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { + insert_dynamic(&Lex->delete_gtid_domain, (uchar*) &((yyvsp[0].ulong_num))); + } +#line 34864 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; + + case 1983: +#line 12839 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {(yyval.num)= 0;} +#line 34870 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1979: + case 1984: +#line 12840 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {(yyval.num)= REFRESH_CHECKPOINT; } +#line 34876 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; -/* Line 1455 of yacc.c */ -#line 12834 "/home/buildbot/git/sql/sql_yacc.yy" + case 1985: +#line 12844 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_RESET; lex->type=0; } +#line 34885 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1980: - -/* Line 1455 of yacc.c */ -#line 12839 "/home/buildbot/git/sql/sql_yacc.yy" + case 1986: +#line 12849 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34891 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1983: - -/* Line 1455 of yacc.c */ -#line 12848 "/home/buildbot/git/sql/sql_yacc.yy" + case 1989: +#line 12858 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_SLAVE; } +#line 34897 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1984: - -/* Line 1455 of yacc.c */ -#line 12850 "/home/buildbot/git/sql/sql_yacc.yy" + case 1990: +#line 12860 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 34903 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1985: - -/* Line 1455 of yacc.c */ -#line 12852 "/home/buildbot/git/sql/sql_yacc.yy" + case 1991: +#line 12862 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_MASTER; Lex->next_binlog_file_number= 0; } +#line 34912 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1987: - -/* Line 1455 of yacc.c */ -#line 12857 "/home/buildbot/git/sql/sql_yacc.yy" + case 1993: +#line 12867 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->type|= REFRESH_QUERY_CACHE;} +#line 34918 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1988: - -/* Line 1455 of yacc.c */ -#line 12861 "/home/buildbot/git/sql/sql_yacc.yy" + case 1994: +#line 12871 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->reset_slave_info.all= false; } +#line 34924 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1989: - -/* Line 1455 of yacc.c */ -#line 12862 "/home/buildbot/git/sql/sql_yacc.yy" + case 1995: +#line 12872 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->reset_slave_info.all= true; } +#line 34930 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1990: - -/* Line 1455 of yacc.c */ -#line 12866 "/home/buildbot/git/sql/sql_yacc.yy" + case 1996: +#line 12876 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34936 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1991: - -/* Line 1455 of yacc.c */ -#line 12868 "/home/buildbot/git/sql/sql_yacc.yy" + case 1997: +#line 12878 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->next_binlog_file_number = (yyvsp[(2) - (2)].ulong_num); + Lex->next_binlog_file_number = (yyvsp[0].ulong_num); } +#line 34944 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1992: - -/* Line 1455 of yacc.c */ -#line 12875 "/home/buildbot/git/sql/sql_yacc.yy" + case 1998: +#line 12885 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->type=0; lex->sql_command = SQLCOM_PURGE; } +#line 34954 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1993: - -/* Line 1455 of yacc.c */ -#line 12881 "/home/buildbot/git/sql/sql_yacc.yy" + case 1999: +#line 12891 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 34960 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1995: - -/* Line 1455 of yacc.c */ -#line 12890 "/home/buildbot/git/sql/sql_yacc.yy" + case 2001: +#line 12900 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->to_log = (yyvsp[(2) - (2)].lex_str).str; + Lex->to_log = (yyvsp[0].lex_str).str; } +#line 34968 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1996: - -/* Line 1455 of yacc.c */ -#line 12894 "/home/buildbot/git/sql/sql_yacc.yy" + case 2002: +#line 12904 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->value_list.empty(); - lex->value_list.push_front((yyvsp[(2) - (2)].item), thd->mem_root); + lex->value_list.push_front((yyvsp[0].item), thd->mem_root); lex->sql_command= SQLCOM_PURGE_BEFORE; } +#line 34979 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1997: - -/* Line 1455 of yacc.c */ -#line 12906 "/home/buildbot/git/sql/sql_yacc.yy" + case 2003: +#line 12916 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->value_list.empty(); @@ -37758,205 +34987,182 @@ lex->sql_command= SQLCOM_KILL; lex->kill_type= KILL_TYPE_ID; } +#line 34991 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1998: - -/* Line 1455 of yacc.c */ -#line 12914 "/home/buildbot/git/sql/sql_yacc.yy" + case 2004: +#line 12924 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->kill_signal= (killed_state) ((yyvsp[(3) - (5)].num) | (yyvsp[(4) - (5)].num)); + Lex->kill_signal= (killed_state) ((yyvsp[-2].num) | (yyvsp[-1].num)); } +#line 34999 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 1999: - -/* Line 1455 of yacc.c */ -#line 12920 "/home/buildbot/git/sql/sql_yacc.yy" + case 2005: +#line 12930 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= (int) KILL_HARD_BIT; } +#line 35005 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2000: - -/* Line 1455 of yacc.c */ -#line 12921 "/home/buildbot/git/sql/sql_yacc.yy" + case 2006: +#line 12931 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= (int) KILL_HARD_BIT; } +#line 35011 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2001: - -/* Line 1455 of yacc.c */ -#line 12922 "/home/buildbot/git/sql/sql_yacc.yy" + case 2007: +#line 12932 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 35017 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2002: - -/* Line 1455 of yacc.c */ -#line 12925 "/home/buildbot/git/sql/sql_yacc.yy" + case 2008: +#line 12935 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= (int) KILL_CONNECTION; } +#line 35023 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2003: - -/* Line 1455 of yacc.c */ -#line 12926 "/home/buildbot/git/sql/sql_yacc.yy" + case 2009: +#line 12936 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= (int) KILL_CONNECTION; } +#line 35029 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2004: - -/* Line 1455 of yacc.c */ -#line 12927 "/home/buildbot/git/sql/sql_yacc.yy" + case 2010: +#line 12937 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= (int) KILL_QUERY; } +#line 35035 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2005: - -/* Line 1455 of yacc.c */ -#line 12929 "/home/buildbot/git/sql/sql_yacc.yy" + case 2011: +#line 12939 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= (int) KILL_QUERY; Lex->kill_type= KILL_TYPE_QUERY; } +#line 35044 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2006: - -/* Line 1455 of yacc.c */ -#line 12937 "/home/buildbot/git/sql/sql_yacc.yy" + case 2012: +#line 12947 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->value_list.push_front((yyval.item), thd->mem_root); } +#line 35052 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2007: - -/* Line 1455 of yacc.c */ -#line 12941 "/home/buildbot/git/sql/sql_yacc.yy" + case 2013: +#line 12951 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->users_list.push_back((yyvsp[(2) - (2)].lex_user), thd->mem_root); + Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root); Lex->kill_type= KILL_TYPE_USER; } +#line 35061 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2008: - -/* Line 1455 of yacc.c */ -#line 12949 "/home/buildbot/git/sql/sql_yacc.yy" + case 2014: +#line 12959 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_SHUTDOWN; } +#line 35067 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2009: - -/* Line 1455 of yacc.c */ -#line 12956 "/home/buildbot/git/sql/sql_yacc.yy" + case 2015: +#line 12966 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command=SQLCOM_CHANGE_DB; - lex->select_lex.db= (yyvsp[(2) - (2)].lex_str).str; + lex->select_lex.db= (yyvsp[0].lex_str).str; } +#line 35077 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2010: - -/* Line 1455 of yacc.c */ -#line 12967 "/home/buildbot/git/sql/sql_yacc.yy" + case 2016: +#line 12977 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; if (lex->sphead) { my_error(ER_SP_BADSTATEMENT, MYF(0), - (yyvsp[(2) - (2)].filetype) == FILETYPE_CSV ? "LOAD DATA" : "LOAD XML"); + (yyvsp[0].filetype) == FILETYPE_CSV ? "LOAD DATA" : "LOAD XML"); MYSQL_YYABORT; } } - break; - - case 2011: +#line 35092 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; -/* Line 1455 of yacc.c */ -#line 12978 "/home/buildbot/git/sql/sql_yacc.yy" + case 2017: +#line 12988 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_LOAD; - lex->local_file= (yyvsp[(5) - (7)].num); + lex->local_file= (yyvsp[-2].num); lex->duplicates= DUP_ERROR; lex->ignore= 0; - if (!(lex->exchange= new (thd->mem_root) sql_exchange((yyvsp[(7) - (7)].lex_str).str, 0, (yyvsp[(2) - (7)].filetype)))) + if (!(lex->exchange= new (thd->mem_root) sql_exchange((yyvsp[0].lex_str).str, 0, (yyvsp[-5].filetype)))) MYSQL_YYABORT; } +#line 35106 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2012: - -/* Line 1455 of yacc.c */ -#line 12988 "/home/buildbot/git/sql/sql_yacc.yy" + case 2018: +#line 12998 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - if (!Select->add_table_to_list(thd, (yyvsp[(12) - (13)].table), NULL, TL_OPTION_UPDATING, - (yyvsp[(4) - (13)].lock_type), MDL_SHARED_WRITE, NULL, (yyvsp[(13) - (13)].string_list))) + if (!Select->add_table_to_list(thd, (yyvsp[-1].table), NULL, TL_OPTION_UPDATING, + (yyvsp[-9].lock_type), MDL_SHARED_WRITE, NULL, (yyvsp[0].string_list))) MYSQL_YYABORT; lex->field_list.empty(); lex->update_list.empty(); lex->value_list.empty(); } +#line 35120 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2013: - -/* Line 1455 of yacc.c */ -#line 12998 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->exchange->cs= (yyvsp[(15) - (15)].charset); } + case 2019: +#line 13008 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->exchange->cs= (yyvsp[0].charset); } +#line 35126 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2014: - -/* Line 1455 of yacc.c */ -#line 13002 "/home/buildbot/git/sql/sql_yacc.yy" + case 2020: +#line 13012 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 35132 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2015: - -/* Line 1455 of yacc.c */ -#line 13006 "/home/buildbot/git/sql/sql_yacc.yy" + case 2021: +#line 13016 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.filetype)= FILETYPE_CSV; } +#line 35138 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2016: - -/* Line 1455 of yacc.c */ -#line 13007 "/home/buildbot/git/sql/sql_yacc.yy" + case 2022: +#line 13017 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.filetype)= FILETYPE_XML; } +#line 35144 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2017: - -/* Line 1455 of yacc.c */ -#line 13011 "/home/buildbot/git/sql/sql_yacc.yy" + case 2023: +#line 13021 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)=0;} +#line 35150 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2018: - -/* Line 1455 of yacc.c */ -#line 13012 "/home/buildbot/git/sql/sql_yacc.yy" + case 2024: +#line 13022 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)=1;} +#line 35156 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2019: - -/* Line 1455 of yacc.c */ -#line 13016 "/home/buildbot/git/sql/sql_yacc.yy" + case 2025: +#line 13026 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lock_type)= TL_WRITE_DEFAULT; } +#line 35162 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2020: - -/* Line 1455 of yacc.c */ -#line 13018 "/home/buildbot/git/sql/sql_yacc.yy" + case 2026: +#line 13028 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Ignore this option in SP to avoid problem with query cache and @@ -37964,220 +35170,194 @@ */ (yyval.lock_type)= (Lex->sphead ? TL_WRITE_DEFAULT : TL_WRITE_CONCURRENT_INSERT); } +#line 35174 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2021: - -/* Line 1455 of yacc.c */ -#line 13025 "/home/buildbot/git/sql/sql_yacc.yy" + case 2027: +#line 13035 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.lock_type)= TL_WRITE_LOW_PRIORITY; } +#line 35180 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2022: - -/* Line 1455 of yacc.c */ -#line 13029 "/home/buildbot/git/sql/sql_yacc.yy" + case 2028: +#line 13039 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->duplicates=DUP_ERROR; } +#line 35186 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2023: - -/* Line 1455 of yacc.c */ -#line 13030 "/home/buildbot/git/sql/sql_yacc.yy" + case 2029: +#line 13040 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->duplicates=DUP_REPLACE; } +#line 35192 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2024: - -/* Line 1455 of yacc.c */ -#line 13031 "/home/buildbot/git/sql/sql_yacc.yy" + case 2030: +#line 13041 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ignore= 1; } +#line 35198 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2029: - -/* Line 1455 of yacc.c */ -#line 13046 "/home/buildbot/git/sql/sql_yacc.yy" + case 2035: +#line 13056 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { DBUG_ASSERT(Lex->exchange != 0); - Lex->exchange->field_term= (yyvsp[(3) - (3)].string); + Lex->exchange->field_term= (yyvsp[0].string); } +#line 35207 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2030: - -/* Line 1455 of yacc.c */ -#line 13051 "/home/buildbot/git/sql/sql_yacc.yy" + case 2036: +#line 13061 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; DBUG_ASSERT(lex->exchange != 0); - lex->exchange->enclosed= (yyvsp[(4) - (4)].string); + lex->exchange->enclosed= (yyvsp[0].string); lex->exchange->opt_enclosed= 1; } +#line 35218 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2031: - -/* Line 1455 of yacc.c */ -#line 13058 "/home/buildbot/git/sql/sql_yacc.yy" + case 2037: +#line 13068 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { DBUG_ASSERT(Lex->exchange != 0); - Lex->exchange->enclosed= (yyvsp[(3) - (3)].string); + Lex->exchange->enclosed= (yyvsp[0].string); } +#line 35227 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2032: - -/* Line 1455 of yacc.c */ -#line 13063 "/home/buildbot/git/sql/sql_yacc.yy" + case 2038: +#line 13073 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { DBUG_ASSERT(Lex->exchange != 0); - Lex->exchange->escaped= (yyvsp[(3) - (3)].string); + Lex->exchange->escaped= (yyvsp[0].string); } +#line 35236 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2037: - -/* Line 1455 of yacc.c */ -#line 13081 "/home/buildbot/git/sql/sql_yacc.yy" + case 2043: +#line 13091 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { DBUG_ASSERT(Lex->exchange != 0); - Lex->exchange->line_term= (yyvsp[(3) - (3)].string); + Lex->exchange->line_term= (yyvsp[0].string); } +#line 35245 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2038: - -/* Line 1455 of yacc.c */ -#line 13086 "/home/buildbot/git/sql/sql_yacc.yy" + case 2044: +#line 13096 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { DBUG_ASSERT(Lex->exchange != 0); - Lex->exchange->line_start= (yyvsp[(3) - (3)].string); + Lex->exchange->line_start= (yyvsp[0].string); } +#line 35254 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2039: - -/* Line 1455 of yacc.c */ -#line 13093 "/home/buildbot/git/sql/sql_yacc.yy" + case 2045: +#line 13103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 35260 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2040: - -/* Line 1455 of yacc.c */ -#line 13095 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->exchange->line_term = (yyvsp[(4) - (4)].string); } + case 2046: +#line 13105 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->exchange->line_term = (yyvsp[0].string); } +#line 35266 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2042: - -/* Line 1455 of yacc.c */ -#line 13100 "/home/buildbot/git/sql/sql_yacc.yy" + case 2048: +#line 13110 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { DBUG_ASSERT(Lex->exchange != 0); - Lex->exchange->skip_lines= atol((yyvsp[(2) - (3)].lex_str).str); + Lex->exchange->skip_lines= atol((yyvsp[-1].lex_str).str); } +#line 35275 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2043: - -/* Line 1455 of yacc.c */ -#line 13107 "/home/buildbot/git/sql/sql_yacc.yy" + case 2049: +#line 13117 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 35281 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2044: - -/* Line 1455 of yacc.c */ -#line 13108 "/home/buildbot/git/sql/sql_yacc.yy" + case 2050: +#line 13118 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 35287 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2045: - -/* Line 1455 of yacc.c */ -#line 13112 "/home/buildbot/git/sql/sql_yacc.yy" + case 2051: +#line 13122 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 35293 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2046: - -/* Line 1455 of yacc.c */ -#line 13113 "/home/buildbot/git/sql/sql_yacc.yy" + case 2052: +#line 13123 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 35299 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2047: - -/* Line 1455 of yacc.c */ -#line 13114 "/home/buildbot/git/sql/sql_yacc.yy" + case 2053: +#line 13124 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 35305 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2048: - -/* Line 1455 of yacc.c */ -#line 13119 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->field_list.push_back((yyvsp[(3) - (3)].item), thd->mem_root); } + case 2054: +#line 13129 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->field_list.push_back((yyvsp[0].item), thd->mem_root); } +#line 35311 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2049: - -/* Line 1455 of yacc.c */ -#line 13121 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->field_list.push_back((yyvsp[(1) - (1)].item), thd->mem_root); } + case 2055: +#line 13131 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->field_list.push_back((yyvsp[0].item), thd->mem_root); } +#line 35317 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2050: - -/* Line 1455 of yacc.c */ -#line 13125 "/home/buildbot/git/sql/sql_yacc.yy" - {(yyval.item)= (yyvsp[(1) - (1)].item);} + case 2056: +#line 13135 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {(yyval.item)= (yyvsp[0].item);} +#line 35323 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2051: - -/* Line 1455 of yacc.c */ -#line 13127 "/home/buildbot/git/sql/sql_yacc.yy" + case 2057: +#line 13137 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_user_var_as_out_param(thd, (yyvsp[(2) - (2)].lex_str)); + (yyval.item)= new (thd->mem_root) Item_user_var_as_out_param(thd, (yyvsp[0].lex_str)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35333 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2052: - -/* Line 1455 of yacc.c */ -#line 13135 "/home/buildbot/git/sql/sql_yacc.yy" + case 2058: +#line 13145 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 35339 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2053: - -/* Line 1455 of yacc.c */ -#line 13136 "/home/buildbot/git/sql/sql_yacc.yy" + case 2059: +#line 13146 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 35345 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2056: - -/* Line 1455 of yacc.c */ -#line 13146 "/home/buildbot/git/sql/sql_yacc.yy" + case 2062: +#line 13156 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - if (lex->update_list.push_back((yyvsp[(1) - (5)].item), thd->mem_root) || - lex->value_list.push_back((yyvsp[(4) - (5)].item), thd->mem_root)) + if (lex->update_list.push_back((yyvsp[-4].item), thd->mem_root) || + lex->value_list.push_back((yyvsp[-1].item), thd->mem_root)) MYSQL_YYABORT; - (yyvsp[(4) - (5)].item)->set_name_no_truncate((yyvsp[(3) - (5)].simple_string), (uint) ((yyvsp[(5) - (5)].simple_string) - (yyvsp[(3) - (5)].simple_string)), thd->charset()); + (yyvsp[-1].item)->set_name_no_truncate((yyvsp[-2].simple_string), (uint) ((yyvsp[0].simple_string) - (yyvsp[-2].simple_string)), thd->charset()); } +#line 35357 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2057: - -/* Line 1455 of yacc.c */ -#line 13159 "/home/buildbot/git/sql/sql_yacc.yy" + case 2063: +#line 13169 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX_STRING tmp; CHARSET_INFO *cs_con= thd->variables.collation_connection; @@ -38188,10 +35368,10 @@ if (thd->charset_is_collation_connection || (repertoire == MY_REPERTOIRE_ASCII && my_charset_is_ascii_based(cs_con))) - tmp= (yyvsp[(1) - (1)].lex_str); + tmp= (yyvsp[0].lex_str); else { - if (thd->convert_string(&tmp, cs_con, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, cs_cli)) + if (thd->convert_string(&tmp, cs_con, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, cs_cli)) MYSQL_YYABORT; } (yyval.item)= new (thd->mem_root) Item_string(thd, tmp.str, tmp.length, @@ -38201,44 +35381,41 @@ if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35385 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2058: - -/* Line 1455 of yacc.c */ -#line 13183 "/home/buildbot/git/sql/sql_yacc.yy" + case 2064: +#line 13193 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { uint repertoire= Lex->text_string_is_7bit ? MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; DBUG_ASSERT(my_charset_is_ascii_based(national_charset_info)); - (yyval.item)= new (thd->mem_root) Item_string(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, + (yyval.item)= new (thd->mem_root) Item_string(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, national_charset_info, DERIVATION_COERCIBLE, repertoire); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35401 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2059: - -/* Line 1455 of yacc.c */ -#line 13195 "/home/buildbot/git/sql/sql_yacc.yy" + case 2065: +#line 13205 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_string_with_introducer(thd, (yyvsp[(2) - (2)].lex_str).str, - (yyvsp[(2) - (2)].lex_str).length, (yyvsp[(1) - (2)].charset)); + (yyval.item)= new (thd->mem_root) Item_string_with_introducer(thd, (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length, (yyvsp[-1].charset)); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35412 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2060: - -/* Line 1455 of yacc.c */ -#line 13202 "/home/buildbot/git/sql/sql_yacc.yy" + case 2066: +#line 13212 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item_string* item= (Item_string*) (yyvsp[(1) - (2)].item); - item->append((yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length); + Item_string* item= (Item_string*) (yyvsp[-1].item); + item->append((yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if (!(item->collation.repertoire & MY_REPERTOIRE_EXTENDED)) { /* @@ -38247,39 +35424,36 @@ */ CHARSET_INFO *cs= thd->variables.collation_connection; item->collation.repertoire|= my_string_repertoire(cs, - (yyvsp[(2) - (2)].lex_str).str, - (yyvsp[(2) - (2)].lex_str).length); + (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length); } } +#line 35432 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2061: - -/* Line 1455 of yacc.c */ -#line 13221 "/home/buildbot/git/sql/sql_yacc.yy" + case 2067: +#line 13231 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.string)= new (thd->mem_root) String((yyvsp[(1) - (1)].lex_str).str, - (yyvsp[(1) - (1)].lex_str).length, + (yyval.string)= new (thd->mem_root) String((yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length, thd->variables.collation_connection); if ((yyval.string) == NULL) MYSQL_YYABORT; } +#line 35444 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2062: - -/* Line 1455 of yacc.c */ -#line 13228 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.string)= (yyvsp[(1) - (1)].string); } + case 2068: +#line 13238 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.string)= (yyvsp[0].string); } +#line 35450 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2063: - -/* Line 1455 of yacc.c */ -#line 13234 "/home/buildbot/git/sql/sql_yacc.yy" + case 2069: +#line 13244 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *tmp= new (thd->mem_root) Item_hex_hybrid(thd, (yyvsp[(1) - (1)].lex_str).str, - (yyvsp[(1) - (1)].lex_str).length); + Item *tmp= new (thd->mem_root) Item_hex_hybrid(thd, (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length); if (tmp == NULL) MYSQL_YYABORT; /* @@ -38289,29 +35463,27 @@ tmp->quick_fix_field(); (yyval.string)= tmp->val_str((String*) 0); } +#line 35467 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2064: - -/* Line 1455 of yacc.c */ -#line 13247 "/home/buildbot/git/sql/sql_yacc.yy" + case 2070: +#line 13257 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *tmp= new (thd->mem_root) Item_hex_string(thd, (yyvsp[(1) - (1)].lex_str).str, - (yyvsp[(1) - (1)].lex_str).length); + Item *tmp= new (thd->mem_root) Item_hex_string(thd, (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length); if (tmp == NULL) MYSQL_YYABORT; tmp->quick_fix_field(); (yyval.string)= tmp->val_str((String*) 0); } +#line 35480 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2065: - -/* Line 1455 of yacc.c */ -#line 13256 "/home/buildbot/git/sql/sql_yacc.yy" + case 2071: +#line 13266 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Item *tmp= new (thd->mem_root) Item_bin_string(thd, (yyvsp[(1) - (1)].lex_str).str, - (yyvsp[(1) - (1)].lex_str).length); + Item *tmp= new (thd->mem_root) Item_bin_string(thd, (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).length); if (tmp == NULL) MYSQL_YYABORT; /* @@ -38321,12 +35493,11 @@ tmp->quick_fix_field(); (yyval.string)= tmp->val_str((String*) 0); } +#line 35497 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2066: - -/* Line 1455 of yacc.c */ -#line 13272 "/home/buildbot/git/sql/sql_yacc.yy" + case 2072: +#line 13282 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; Lex_input_stream *lip= YYLIP; @@ -38340,57 +35511,50 @@ if (!((yyval.item_param)= item) || lex->param_list.push_back(item, thd->mem_root)) my_yyabort_error((ER_OUT_OF_RESOURCES, MYF(0))); } +#line 35515 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2067: - -/* Line 1455 of yacc.c */ -#line 13288 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item) = (yyvsp[(1) - (1)].item); } + case 2073: +#line 13298 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item) = (yyvsp[0].item); } +#line 35521 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2068: - -/* Line 1455 of yacc.c */ -#line 13289 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item) = (yyvsp[(2) - (2)].item_num); } + case 2074: +#line 13299 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item) = (yyvsp[0].item_num); } +#line 35527 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2069: - -/* Line 1455 of yacc.c */ -#line 13291 "/home/buildbot/git/sql/sql_yacc.yy" + case 2075: +#line 13301 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyvsp[(2) - (2)].item_num)->max_length++; - (yyval.item)= (yyvsp[(2) - (2)].item_num)->neg(thd); + (yyvsp[0].item_num)->max_length++; + (yyval.item)= (yyvsp[0].item_num)->neg(thd); } +#line 35536 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2070: - -/* Line 1455 of yacc.c */ -#line 13298 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item) = (yyvsp[(1) - (1)].item); } + case 2076: +#line 13308 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item) = (yyvsp[0].item); } +#line 35542 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2071: - -/* Line 1455 of yacc.c */ -#line 13299 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item) = (yyvsp[(1) - (1)].item_num); } + case 2077: +#line 13309 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item) = (yyvsp[0].item_num); } +#line 35548 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2072: - -/* Line 1455 of yacc.c */ -#line 13300 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item); } + case 2078: +#line 13310 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 35554 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2073: - -/* Line 1455 of yacc.c */ -#line 13302 "/home/buildbot/git/sql/sql_yacc.yy" + case 2079: +#line 13312 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* For the digest computation, in this context only, @@ -38404,67 +35568,61 @@ MYSQL_YYABORT; YYLIP->next_state= MY_LEX_OPERATOR_OR_IDENT; } +#line 35572 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2074: - -/* Line 1455 of yacc.c */ -#line 13316 "/home/buildbot/git/sql/sql_yacc.yy" + case 2080: +#line 13326 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_int(thd, (char*) "FALSE",0,1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35582 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2075: - -/* Line 1455 of yacc.c */ -#line 13322 "/home/buildbot/git/sql/sql_yacc.yy" + case 2081: +#line 13332 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)= new (thd->mem_root) Item_int(thd, (char*) "TRUE",1,1); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35592 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2076: - -/* Line 1455 of yacc.c */ -#line 13328 "/home/buildbot/git/sql/sql_yacc.yy" + case 2082: +#line 13338 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_hex_hybrid(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item)= new (thd->mem_root) Item_hex_hybrid(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35602 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2077: - -/* Line 1455 of yacc.c */ -#line 13334 "/home/buildbot/git/sql/sql_yacc.yy" + case 2083: +#line 13344 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_hex_string(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item)= new (thd->mem_root) Item_hex_string(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35612 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2078: - -/* Line 1455 of yacc.c */ -#line 13340 "/home/buildbot/git/sql/sql_yacc.yy" + case 2084: +#line 13350 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item)= new (thd->mem_root) Item_bin_string(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item)= new (thd->mem_root) Item_bin_string(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35622 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2079: - -/* Line 1455 of yacc.c */ -#line 13346 "/home/buildbot/git/sql/sql_yacc.yy" + case 2085: +#line 13356 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item_string_with_introducer *item_str; /* @@ -38472,178 +35630,164 @@ will include the introducer and the original hex/bin notation. */ item_str= new (thd->mem_root) - Item_string_with_introducer(thd, NULL, (yyvsp[(2) - (2)].string)->ptr(), (yyvsp[(2) - (2)].string)->length(), - (yyvsp[(1) - (2)].charset)); + Item_string_with_introducer(thd, NULL, (yyvsp[0].string)->ptr(), (yyvsp[0].string)->length(), + (yyvsp[-1].charset)); if (!item_str || !item_str->check_well_formed_result(true)) MYSQL_YYABORT; (yyval.item)= item_str; } +#line 35641 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2080: - -/* Line 1455 of yacc.c */ -#line 13364 "/home/buildbot/git/sql/sql_yacc.yy" + case 2086: +#line 13374 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { int error; (yyval.item_num)= new (thd->mem_root) - Item_int(thd, (yyvsp[(1) - (1)].lex_str).str, - (longlong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, NULL, &error), - (yyvsp[(1) - (1)].lex_str).length); + Item_int(thd, (yyvsp[0].lex_str).str, + (longlong) my_strtoll10((yyvsp[0].lex_str).str, NULL, &error), + (yyvsp[0].lex_str).length); if ((yyval.item_num) == NULL) MYSQL_YYABORT; } +#line 35655 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2081: - -/* Line 1455 of yacc.c */ -#line 13374 "/home/buildbot/git/sql/sql_yacc.yy" + case 2087: +#line 13384 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { int error; (yyval.item_num)= new (thd->mem_root) - Item_int(thd, (yyvsp[(1) - (1)].lex_str).str, - (longlong) my_strtoll10((yyvsp[(1) - (1)].lex_str).str, NULL, &error), - (yyvsp[(1) - (1)].lex_str).length); + Item_int(thd, (yyvsp[0].lex_str).str, + (longlong) my_strtoll10((yyvsp[0].lex_str).str, NULL, &error), + (yyvsp[0].lex_str).length); if ((yyval.item_num) == NULL) MYSQL_YYABORT; } +#line 35669 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2082: - -/* Line 1455 of yacc.c */ -#line 13384 "/home/buildbot/git/sql/sql_yacc.yy" + case 2088: +#line 13394 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item_num)= new (thd->mem_root) Item_uint(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item_num)= new (thd->mem_root) Item_uint(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if ((yyval.item_num) == NULL) MYSQL_YYABORT; } +#line 35679 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2083: - -/* Line 1455 of yacc.c */ -#line 13390 "/home/buildbot/git/sql/sql_yacc.yy" + case 2089: +#line 13400 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item_num)= new (thd->mem_root) Item_decimal(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, + (yyval.item_num)= new (thd->mem_root) Item_decimal(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, thd->charset()); if (((yyval.item_num) == NULL) || (thd->is_error())) { MYSQL_YYABORT; } } +#line 35692 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2084: - -/* Line 1455 of yacc.c */ -#line 13399 "/home/buildbot/git/sql/sql_yacc.yy" + case 2090: +#line 13409 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.item_num)= new (thd->mem_root) Item_float(thd, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); + (yyval.item_num)= new (thd->mem_root) Item_float(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if (((yyval.item_num) == NULL) || (thd->is_error())) { MYSQL_YYABORT; } } +#line 35704 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2085: - -/* Line 1455 of yacc.c */ -#line 13411 "/home/buildbot/git/sql/sql_yacc.yy" + case 2091: +#line 13421 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyval.item)= create_temporal_literal(thd, (yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, YYCSCL, + if (!((yyval.item)= create_temporal_literal(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, YYCSCL, MYSQL_TYPE_DATE, true))) MYSQL_YYABORT; } +#line 35714 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2086: - -/* Line 1455 of yacc.c */ -#line 13417 "/home/buildbot/git/sql/sql_yacc.yy" + case 2092: +#line 13427 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyval.item)= create_temporal_literal(thd, (yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, YYCSCL, + if (!((yyval.item)= create_temporal_literal(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, YYCSCL, MYSQL_TYPE_TIME, true))) MYSQL_YYABORT; } +#line 35724 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2087: - -/* Line 1455 of yacc.c */ -#line 13423 "/home/buildbot/git/sql/sql_yacc.yy" + case 2093: +#line 13433 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (!((yyval.item)= create_temporal_literal(thd, (yyvsp[(2) - (2)].lex_str).str, (yyvsp[(2) - (2)].lex_str).length, YYCSCL, + if (!((yyval.item)= create_temporal_literal(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, YYCSCL, MYSQL_TYPE_DATETIME, true))) MYSQL_YYABORT; } +#line 35734 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2088: - -/* Line 1455 of yacc.c */ -#line 13438 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)=(yyvsp[(1) - (1)].item); } + case 2094: +#line 13448 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)=(yyvsp[0].item); } +#line 35740 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2089: - -/* Line 1455 of yacc.c */ -#line 13439 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)=(yyvsp[(1) - (1)].item); } + case 2095: +#line 13449 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)=(yyvsp[0].item); } +#line 35746 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2090: - -/* Line 1455 of yacc.c */ -#line 13444 "/home/buildbot/git/sql/sql_yacc.yy" + case 2096: +#line 13454 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; (yyval.item)= new (thd->mem_root) Item_field(thd, Lex->current_context(), - NullS, (yyvsp[(1) - (3)].lex_str).str, "*"); + NullS, (yyvsp[-2].lex_str).str, "*"); if ((yyval.item) == NULL) MYSQL_YYABORT; sel->with_wild++; } +#line 35759 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2091: - -/* Line 1455 of yacc.c */ -#line 13453 "/home/buildbot/git/sql/sql_yacc.yy" + case 2097: +#line 13463 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel= Select; const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ? - NullS : (yyvsp[(1) - (5)].lex_str).str; + NullS : (yyvsp[-4].lex_str).str; (yyval.item)= new (thd->mem_root) Item_field(thd, Lex->current_context(), schema, - (yyvsp[(3) - (5)].lex_str).str,"*"); + (yyvsp[-2].lex_str).str,"*"); if ((yyval.item) == NULL) MYSQL_YYABORT; sel->with_wild++; } +#line 35775 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2092: - -/* Line 1455 of yacc.c */ -#line 13467 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)=(yyvsp[(1) - (1)].item); } + case 2098: +#line 13477 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)=(yyvsp[0].item); } +#line 35781 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2093: - -/* Line 1455 of yacc.c */ -#line 13472 "/home/buildbot/git/sql/sql_yacc.yy" + case 2099: +#line 13482 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; Lex_input_stream *lip= YYLIP; sp_variable *spv; sp_pcontext *spc = lex->spcont; - if (spc && (spv = spc->find_variable((yyvsp[(1) - (1)].lex_str), false))) + if (spc && (spv = spc->find_variable((yyvsp[0].lex_str), false))) { /* We're compiling a stored procedure and found a variable */ if (! lex->parsing_options.allows_variable) @@ -38651,7 +35795,7 @@ Item_splocal *splocal; splocal= new (thd->mem_root) - Item_splocal(thd, (yyvsp[(1) - (1)].lex_str), spv->offset, spv->type, + Item_splocal(thd, (yyvsp[0].lex_str), spv->offset, spv->type, lip->get_tok_start_prev() - lex->sphead->m_tmp_query, lip->get_tok_end() - lip->get_tok_start_prev()); if (splocal == NULL) @@ -38669,59 +35813,55 @@ (sel->get_in_sum_expr() > 0)) { (yyval.item)= new (thd->mem_root) Item_field(thd, Lex->current_context(), - NullS, NullS, (yyvsp[(1) - (1)].lex_str).str); + NullS, NullS, (yyvsp[0].lex_str).str); } else { (yyval.item)= new (thd->mem_root) Item_ref(thd, Lex->current_context(), - NullS, NullS, (yyvsp[(1) - (1)].lex_str).str); + NullS, NullS, (yyvsp[0].lex_str).str); } if ((yyval.item) == NULL) MYSQL_YYABORT; } } +#line 35828 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2094: - -/* Line 1455 of yacc.c */ -#line 13514 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item); } + case 2100: +#line 13524 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 35834 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2095: - -/* Line 1455 of yacc.c */ -#line 13519 "/home/buildbot/git/sql/sql_yacc.yy" + case 2101: +#line 13529 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { SELECT_LEX *sel=Select; if ((sel->parsing_place != IN_HAVING) || (sel->get_in_sum_expr() > 0)) { (yyval.item)= new (thd->mem_root) Item_field(thd, Lex->current_context(), - NullS, NullS, (yyvsp[(1) - (1)].lex_str).str); + NullS, NullS, (yyvsp[0].lex_str).str); } else { (yyval.item)= new (thd->mem_root) Item_ref(thd, Lex->current_context(), - NullS, NullS, (yyvsp[(1) - (1)].lex_str).str); + NullS, NullS, (yyvsp[0].lex_str).str); } if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35855 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2096: - -/* Line 1455 of yacc.c */ -#line 13535 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)= (yyvsp[(1) - (1)].item); } + case 2102: +#line 13545 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)= (yyvsp[0].item); } +#line 35861 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2097: - -/* Line 1455 of yacc.c */ -#line 13540 "/home/buildbot/git/sql/sql_yacc.yy" + case 2103: +#line 13550 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; @@ -38731,11 +35871,11 @@ should be changed in future. */ if (lex->sphead && lex->sphead->m_type == TYPE_ENUM_TRIGGER && - (!my_strcasecmp(system_charset_info, (yyvsp[(1) - (3)].lex_str).str, "NEW") || - !my_strcasecmp(system_charset_info, (yyvsp[(1) - (3)].lex_str).str, "OLD"))) + (!my_strcasecmp(system_charset_info, (yyvsp[-2].lex_str).str, "NEW") || + !my_strcasecmp(system_charset_info, (yyvsp[-2].lex_str).str, "OLD"))) { Item_trigger_field *trg_fld; - bool new_row= ((yyvsp[(1) - (3)].lex_str).str[0]=='N' || (yyvsp[(1) - (3)].lex_str).str[0]=='n'); + bool new_row= ((yyvsp[-2].lex_str).str[0]=='N' || (yyvsp[-2].lex_str).str[0]=='n'); if (lex->trg_chistics.event == TRG_EVENT_INSERT && !new_row) @@ -38755,7 +35895,7 @@ new_row ? Item_trigger_field::NEW_ROW: Item_trigger_field::OLD_ROW, - (yyvsp[(3) - (3)].lex_str).str, + (yyvsp[0].lex_str).str, SELECT_ACL, tmp_read_only); if (trg_fld == NULL) @@ -38776,348 +35916,323 @@ if (sel->no_table_names_allowed) { my_error(ER_TABLENAME_NOT_ALLOWED_HERE, - MYF(0), (yyvsp[(1) - (3)].lex_str).str, thd->where); + MYF(0), (yyvsp[-2].lex_str).str, thd->where); } if ((sel->parsing_place != IN_HAVING) || (sel->get_in_sum_expr() > 0)) { (yyval.item)= new (thd->mem_root) Item_field(thd, Lex->current_context(), - NullS, (yyvsp[(1) - (3)].lex_str).str, (yyvsp[(3) - (3)].lex_str).str); + NullS, (yyvsp[-2].lex_str).str, (yyvsp[0].lex_str).str); } else { (yyval.item)= new (thd->mem_root) Item_ref(thd, Lex->current_context(), - NullS, (yyvsp[(1) - (3)].lex_str).str, (yyvsp[(3) - (3)].lex_str).str); + NullS, (yyvsp[-2].lex_str).str, (yyvsp[0].lex_str).str); } if ((yyval.item) == NULL) MYSQL_YYABORT; } } +#line 35937 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2098: - -/* Line 1455 of yacc.c */ -#line 13612 "/home/buildbot/git/sql/sql_yacc.yy" + case 2104: +#line 13622 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; SELECT_LEX *sel= lex->current_select; if (sel->no_table_names_allowed) { my_error(ER_TABLENAME_NOT_ALLOWED_HERE, - MYF(0), (yyvsp[(2) - (4)].lex_str).str, thd->where); + MYF(0), (yyvsp[-2].lex_str).str, thd->where); } if ((sel->parsing_place != IN_HAVING) || (sel->get_in_sum_expr() > 0)) { (yyval.item)= new (thd->mem_root) Item_field(thd, Lex->current_context(), - NullS, (yyvsp[(2) - (4)].lex_str).str, (yyvsp[(4) - (4)].lex_str).str); + NullS, (yyvsp[-2].lex_str).str, (yyvsp[0].lex_str).str); } else { (yyval.item)= new (thd->mem_root) Item_ref(thd, Lex->current_context(), - NullS, (yyvsp[(2) - (4)].lex_str).str, (yyvsp[(4) - (4)].lex_str).str); + NullS, (yyvsp[-2].lex_str).str, (yyvsp[0].lex_str).str); } if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35965 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2099: - -/* Line 1455 of yacc.c */ -#line 13636 "/home/buildbot/git/sql/sql_yacc.yy" + case 2105: +#line 13646 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; SELECT_LEX *sel= lex->current_select; const char* schema= (thd->client_capabilities & CLIENT_NO_SCHEMA ? - NullS : (yyvsp[(1) - (5)].lex_str).str); + NullS : (yyvsp[-4].lex_str).str); if (sel->no_table_names_allowed) { my_error(ER_TABLENAME_NOT_ALLOWED_HERE, - MYF(0), (yyvsp[(3) - (5)].lex_str).str, thd->where); + MYF(0), (yyvsp[-2].lex_str).str, thd->where); } if ((sel->parsing_place != IN_HAVING) || (sel->get_in_sum_expr() > 0)) { (yyval.item)= new (thd->mem_root) Item_field(thd, Lex->current_context(), schema, - (yyvsp[(3) - (5)].lex_str).str, (yyvsp[(5) - (5)].lex_str).str); + (yyvsp[-2].lex_str).str, (yyvsp[0].lex_str).str); } else { (yyval.item)= new (thd->mem_root) Item_ref(thd, Lex->current_context(), schema, - (yyvsp[(3) - (5)].lex_str).str, (yyvsp[(5) - (5)].lex_str).str); + (yyvsp[-2].lex_str).str, (yyvsp[0].lex_str).str); } if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 35996 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2100: - -/* Line 1455 of yacc.c */ -#line 13665 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} + case 2106: +#line 13675 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str);} +#line 36002 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2101: - -/* Line 1455 of yacc.c */ -#line 13667 "/home/buildbot/git/sql/sql_yacc.yy" + case 2107: +#line 13677 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { TABLE_LIST *table= Select->table_list.first; - if (my_strcasecmp(table_alias_charset, (yyvsp[(1) - (5)].lex_str).str, table->db)) - my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[(1) - (5)].lex_str).str)); - if (my_strcasecmp(table_alias_charset, (yyvsp[(3) - (5)].lex_str).str, + if (my_strcasecmp(table_alias_charset, (yyvsp[-4].lex_str).str, table->db)) + my_yyabort_error((ER_WRONG_DB_NAME, MYF(0), (yyvsp[-4].lex_str).str)); + if (my_strcasecmp(table_alias_charset, (yyvsp[-2].lex_str).str, table->table_name)) - my_yyabort_error((ER_WRONG_TABLE_NAME, MYF(0), (yyvsp[(3) - (5)].lex_str).str)); - (yyval.lex_str)=(yyvsp[(5) - (5)].lex_str); + my_yyabort_error((ER_WRONG_TABLE_NAME, MYF(0), (yyvsp[-2].lex_str).str)); + (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 36016 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2102: - -/* Line 1455 of yacc.c */ -#line 13677 "/home/buildbot/git/sql/sql_yacc.yy" + case 2108: +#line 13687 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { TABLE_LIST *table= Select->table_list.first; - if (my_strcasecmp(table_alias_charset, (yyvsp[(1) - (3)].lex_str).str, table->alias)) - my_yyabort_error((ER_WRONG_TABLE_NAME, MYF(0), (yyvsp[(1) - (3)].lex_str).str)); - (yyval.lex_str)=(yyvsp[(3) - (3)].lex_str); + if (my_strcasecmp(table_alias_charset, (yyvsp[-2].lex_str).str, table->alias)) + my_yyabort_error((ER_WRONG_TABLE_NAME, MYF(0), (yyvsp[-2].lex_str).str)); + (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 36027 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2103: - -/* Line 1455 of yacc.c */ -#line 13683 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(2) - (2)].lex_str);} + case 2109: +#line 13693 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str);} +#line 36033 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2104: - -/* Line 1455 of yacc.c */ -#line 13688 "/home/buildbot/git/sql/sql_yacc.yy" + case 2110: +#line 13698 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.table)= new (thd->mem_root) Table_ident((yyvsp[(1) - (1)].lex_str)); + (yyval.table)= new (thd->mem_root) Table_ident((yyvsp[0].lex_str)); if ((yyval.table) == NULL) MYSQL_YYABORT; } +#line 36043 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2105: - -/* Line 1455 of yacc.c */ -#line 13694 "/home/buildbot/git/sql/sql_yacc.yy" + case 2111: +#line 13704 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.table)= new (thd->mem_root) Table_ident(thd, (yyvsp[(1) - (3)].lex_str), (yyvsp[(3) - (3)].lex_str), 0); + (yyval.table)= new (thd->mem_root) Table_ident(thd, (yyvsp[-2].lex_str), (yyvsp[0].lex_str), 0); if ((yyval.table) == NULL) MYSQL_YYABORT; } +#line 36053 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2106: - -/* Line 1455 of yacc.c */ -#line 13700 "/home/buildbot/git/sql/sql_yacc.yy" + case 2112: +#line 13710 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* For Delphi */ - (yyval.table)= new (thd->mem_root) Table_ident((yyvsp[(2) - (2)].lex_str)); + (yyval.table)= new (thd->mem_root) Table_ident((yyvsp[0].lex_str)); if ((yyval.table) == NULL) MYSQL_YYABORT; } +#line 36064 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2107: - -/* Line 1455 of yacc.c */ -#line 13710 "/home/buildbot/git/sql/sql_yacc.yy" + case 2113: +#line 13720 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.table)= new (thd->mem_root) Table_ident((yyvsp[(1) - (2)].lex_str)); + (yyval.table)= new (thd->mem_root) Table_ident((yyvsp[-1].lex_str)); if ((yyval.table) == NULL) MYSQL_YYABORT; } +#line 36074 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2108: - -/* Line 1455 of yacc.c */ -#line 13716 "/home/buildbot/git/sql/sql_yacc.yy" + case 2114: +#line 13726 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.table)= new (thd->mem_root) Table_ident(thd, (yyvsp[(1) - (4)].lex_str), (yyvsp[(3) - (4)].lex_str), 0); + (yyval.table)= new (thd->mem_root) Table_ident(thd, (yyvsp[-3].lex_str), (yyvsp[-1].lex_str), 0); if ((yyval.table) == NULL) MYSQL_YYABORT; } +#line 36084 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2109: - -/* Line 1455 of yacc.c */ -#line 13725 "/home/buildbot/git/sql/sql_yacc.yy" + case 2115: +#line 13735 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX_STRING db={(char*) any_db,3}; - (yyval.table)= new (thd->mem_root) Table_ident(thd, db, (yyvsp[(1) - (1)].lex_str), 0); + (yyval.table)= new (thd->mem_root) Table_ident(thd, db, (yyvsp[0].lex_str), 0); if ((yyval.table) == NULL) MYSQL_YYABORT; } +#line 36095 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2110: - -/* Line 1455 of yacc.c */ -#line 13734 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); } + case 2116: +#line 13744 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)= (yyvsp[0].lex_str); } +#line 36101 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2111: - -/* Line 1455 of yacc.c */ -#line 13736 "/home/buildbot/git/sql/sql_yacc.yy" + case 2117: +#line 13746 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (thd->charset_is_system_charset) { CHARSET_INFO *cs= system_charset_info; int dummy_error; - uint wlen= cs->cset->well_formed_len(cs, (yyvsp[(1) - (1)].lex_str).str, - (yyvsp[(1) - (1)].lex_str).str+(yyvsp[(1) - (1)].lex_str).length, - (yyvsp[(1) - (1)].lex_str).length, &dummy_error); - if (wlen < (yyvsp[(1) - (1)].lex_str).length) + uint wlen= cs->cset->well_formed_len(cs, (yyvsp[0].lex_str).str, + (yyvsp[0].lex_str).str+(yyvsp[0].lex_str).length, + (yyvsp[0].lex_str).length, &dummy_error); + if (wlen < (yyvsp[0].lex_str).length) { - ErrConvString err((yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, &my_charset_bin); + ErrConvString err((yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, &my_charset_bin); my_error(ER_INVALID_CHARACTER_STRING, MYF(0), cs->csname, err.ptr()); MYSQL_YYABORT; } - (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); + (yyval.lex_str)= (yyvsp[0].lex_str); } else { if (thd->convert_with_error(system_charset_info, &(yyval.lex_str), - thd->charset(), (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length)) + thd->charset(), (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length)) MYSQL_YYABORT; } } +#line 36130 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2112: - -/* Line 1455 of yacc.c */ -#line 13764 "/home/buildbot/git/sql/sql_yacc.yy" + case 2118: +#line 13774 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (thd->charset_is_system_charset) - (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); + (yyval.lex_str)= (yyvsp[0].lex_str); else { if (thd->convert_string(&(yyval.lex_str), system_charset_info, - (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, thd->charset())) + (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, thd->charset())) MYSQL_YYABORT; } } +#line 36145 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2113: - -/* Line 1455 of yacc.c */ -#line 13778 "/home/buildbot/git/sql/sql_yacc.yy" + case 2119: +#line 13788 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (thd->charset_is_collation_connection) - (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); + (yyval.lex_str)= (yyvsp[0].lex_str); else { if (thd->convert_string(&(yyval.lex_str), thd->variables.collation_connection, - (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, thd->charset())) + (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, thd->charset())) MYSQL_YYABORT; } } +#line 36160 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2114: - -/* Line 1455 of yacc.c */ -#line 13792 "/home/buildbot/git/sql/sql_yacc.yy" + case 2120: +#line 13802 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (thd->charset_is_character_set_filesystem) - (yyval.lex_str)= (yyvsp[(1) - (1)].lex_str); + (yyval.lex_str)= (yyvsp[0].lex_str); else { if (thd->convert_string(&(yyval.lex_str), thd->variables.character_set_filesystem, - (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length, thd->charset())) + (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length, thd->charset())) MYSQL_YYABORT; } } +#line 36176 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2115: - -/* Line 1455 of yacc.c */ -#line 13806 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } + case 2121: +#line 13816 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 36182 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2116: - -/* Line 1455 of yacc.c */ -#line 13808 "/home/buildbot/git/sql/sql_yacc.yy" + case 2122: +#line 13818 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.lex_str).str= thd->strmake((yyvsp[(1) - (1)].symbol).str, (yyvsp[(1) - (1)].symbol).length); + (yyval.lex_str).str= thd->strmake((yyvsp[0].symbol).str, (yyvsp[0].symbol).length); if ((yyval.lex_str).str == NULL) MYSQL_YYABORT; - (yyval.lex_str).length= (yyvsp[(1) - (1)].symbol).length; + (yyval.lex_str).length= (yyvsp[0].symbol).length; } +#line 36193 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2117: - -/* Line 1455 of yacc.c */ -#line 13817 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str); } + case 2123: +#line 13827 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str); } +#line 36199 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2118: - -/* Line 1455 of yacc.c */ -#line 13819 "/home/buildbot/git/sql/sql_yacc.yy" + case 2124: +#line 13829 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.lex_str).str= thd->strmake((yyvsp[(1) - (1)].symbol).str, (yyvsp[(1) - (1)].symbol).length); + (yyval.lex_str).str= thd->strmake((yyvsp[0].symbol).str, (yyvsp[0].symbol).length); if ((yyval.lex_str).str == NULL) MYSQL_YYABORT; - (yyval.lex_str).length= (yyvsp[(1) - (1)].symbol).length; + (yyval.lex_str).length= (yyvsp[0].symbol).length; } +#line 36210 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2119: - -/* Line 1455 of yacc.c */ -#line 13828 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} + case 2125: +#line 13838 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str);} +#line 36216 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2120: - -/* Line 1455 of yacc.c */ -#line 13829 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} + case 2126: +#line 13839 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str);} +#line 36222 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2121: - -/* Line 1455 of yacc.c */ -#line 13830 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_str)=(yyvsp[(1) - (1)].lex_str);} + case 2127: +#line 13840 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_str)=(yyvsp[0].lex_str);} +#line 36228 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2122: - -/* Line 1455 of yacc.c */ -#line 13835 "/home/buildbot/git/sql/sql_yacc.yy" + case 2128: +#line 13845 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!((yyval.lex_user)=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) MYSQL_YYABORT; - (yyval.lex_user)->user = (yyvsp[(1) - (1)].lex_str); + (yyval.lex_user)->user = (yyvsp[0].lex_str); (yyval.lex_user)->host= null_lex_str; // User or Role, see get_current_user() (yyval.lex_user)->reset_auth(); @@ -39126,16 +36241,15 @@ system_charset_info, 0)) MYSQL_YYABORT; } +#line 36245 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2123: - -/* Line 1455 of yacc.c */ -#line 13848 "/home/buildbot/git/sql/sql_yacc.yy" + case 2129: +#line 13858 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!((yyval.lex_user)=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) MYSQL_YYABORT; - (yyval.lex_user)->user = (yyvsp[(1) - (3)].lex_str); (yyval.lex_user)->host=(yyvsp[(3) - (3)].lex_str); + (yyval.lex_user)->user = (yyvsp[-2].lex_str); (yyval.lex_user)->host=(yyvsp[0].lex_str); (yyval.lex_user)->reset_auth(); if (check_string_char_length(&(yyval.lex_user)->user, ER_USERNAME, @@ -39161,12 +36275,11 @@ (yyval.lex_user)->host= host_not_specified; } } +#line 36279 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2124: - -/* Line 1455 of yacc.c */ -#line 13878 "/home/buildbot/git/sql/sql_yacc.yy" + case 2130: +#line 13888 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!((yyval.lex_user)=(LEX_USER*)thd->calloc(sizeof(LEX_USER)))) MYSQL_YYABORT; @@ -39174,2613 +36287,2241 @@ (yyval.lex_user)->plugin= empty_lex_str; (yyval.lex_user)->auth= empty_lex_str; } +#line 36291 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2127: - -/* Line 1455 of yacc.c */ -#line 13890 "/home/buildbot/git/sql/sql_yacc.yy" + case 2133: +#line 13900 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (1)].lex_user)->user.str != current_user.str && (yyvsp[(1) - (1)].lex_user)->host.str == 0) - (yyvsp[(1) - (1)].lex_user)->host= host_not_specified; - (yyval.lex_user)= (yyvsp[(1) - (1)].lex_user); + if ((yyvsp[0].lex_user)->user.str != current_user.str && (yyvsp[0].lex_user)->host.str == 0) + (yyvsp[0].lex_user)->host= host_not_specified; + (yyval.lex_user)= (yyvsp[0].lex_user); } - break; - - case 2128: - -/* Line 1455 of yacc.c */ -#line 13899 "/home/buildbot/git/sql/sql_yacc.yy" - {} - break; - - case 2129: - -/* Line 1455 of yacc.c */ -#line 13900 "/home/buildbot/git/sql/sql_yacc.yy" - {} - break; - - case 2130: - -/* Line 1455 of yacc.c */ -#line 13901 "/home/buildbot/git/sql/sql_yacc.yy" - {} - break; - - case 2131: - -/* Line 1455 of yacc.c */ -#line 13902 "/home/buildbot/git/sql/sql_yacc.yy" - {} - break; - - case 2132: - -/* Line 1455 of yacc.c */ -#line 13903 "/home/buildbot/git/sql/sql_yacc.yy" - {} - break; - - case 2133: - -/* Line 1455 of yacc.c */ -#line 13904 "/home/buildbot/git/sql/sql_yacc.yy" - {} +#line 36301 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2134: - -/* Line 1455 of yacc.c */ -#line 13905 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13909 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36307 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2135: - -/* Line 1455 of yacc.c */ -#line 13906 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13910 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36313 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2136: - -/* Line 1455 of yacc.c */ -#line 13907 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13911 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36319 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2137: - -/* Line 1455 of yacc.c */ -#line 13908 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13912 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36325 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2138: - -/* Line 1455 of yacc.c */ -#line 13909 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13913 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36331 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2139: - -/* Line 1455 of yacc.c */ -#line 13910 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13914 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36337 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2140: - -/* Line 1455 of yacc.c */ -#line 13911 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13915 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36343 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2141: - -/* Line 1455 of yacc.c */ -#line 13912 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13916 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36349 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2142: - -/* Line 1455 of yacc.c */ -#line 13913 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13917 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36355 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2143: - -/* Line 1455 of yacc.c */ -#line 13914 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13918 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36361 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2144: - -/* Line 1455 of yacc.c */ -#line 13915 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13919 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36367 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2145: - -/* Line 1455 of yacc.c */ -#line 13916 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13920 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36373 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2146: - -/* Line 1455 of yacc.c */ -#line 13917 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13921 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36379 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2147: - -/* Line 1455 of yacc.c */ -#line 13918 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13922 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36385 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2148: - -/* Line 1455 of yacc.c */ -#line 13919 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13923 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36391 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2149: - -/* Line 1455 of yacc.c */ -#line 13920 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13924 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36397 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2150: - -/* Line 1455 of yacc.c */ -#line 13921 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13925 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36403 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2151: - -/* Line 1455 of yacc.c */ -#line 13922 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13926 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36409 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2152: - -/* Line 1455 of yacc.c */ -#line 13923 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13927 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36415 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2153: - -/* Line 1455 of yacc.c */ -#line 13924 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13928 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36421 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2154: - -/* Line 1455 of yacc.c */ -#line 13925 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13929 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36427 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2155: - -/* Line 1455 of yacc.c */ -#line 13926 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13930 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36433 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2156: - -/* Line 1455 of yacc.c */ -#line 13927 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13931 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36439 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2157: - -/* Line 1455 of yacc.c */ -#line 13928 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13932 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36445 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2158: - -/* Line 1455 of yacc.c */ -#line 13929 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13933 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36451 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2159: - -/* Line 1455 of yacc.c */ -#line 13930 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13934 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36457 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2160: - -/* Line 1455 of yacc.c */ -#line 13931 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13935 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36463 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2161: - -/* Line 1455 of yacc.c */ -#line 13932 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13936 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36469 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2162: - -/* Line 1455 of yacc.c */ -#line 13933 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13937 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36475 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2163: - -/* Line 1455 of yacc.c */ -#line 13934 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13938 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36481 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2164: - -/* Line 1455 of yacc.c */ -#line 13935 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13939 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36487 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2165: - -/* Line 1455 of yacc.c */ -#line 13936 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13940 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36493 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2166: - -/* Line 1455 of yacc.c */ -#line 13937 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13941 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36499 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2167: - -/* Line 1455 of yacc.c */ -#line 13938 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13942 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36505 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2168: - -/* Line 1455 of yacc.c */ -#line 13939 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13943 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36511 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2169: - -/* Line 1455 of yacc.c */ -#line 13940 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13944 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36517 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2170: - -/* Line 1455 of yacc.c */ -#line 13941 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13945 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36523 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2171: - -/* Line 1455 of yacc.c */ -#line 13942 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13946 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36529 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2172: - -/* Line 1455 of yacc.c */ -#line 13943 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13947 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36535 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2173: - -/* Line 1455 of yacc.c */ -#line 13944 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13948 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36541 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2174: - -/* Line 1455 of yacc.c */ -#line 13945 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13949 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36547 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2175: - -/* Line 1455 of yacc.c */ -#line 13946 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13950 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36553 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2176: - -/* Line 1455 of yacc.c */ -#line 13947 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13951 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36559 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2177: - -/* Line 1455 of yacc.c */ -#line 13948 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13952 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36565 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2178: - -/* Line 1455 of yacc.c */ -#line 13949 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13953 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36571 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2179: - -/* Line 1455 of yacc.c */ -#line 13950 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13954 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36577 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2180: - -/* Line 1455 of yacc.c */ -#line 13951 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13955 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36583 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2181: - -/* Line 1455 of yacc.c */ -#line 13952 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13956 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36589 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2182: - -/* Line 1455 of yacc.c */ -#line 13953 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13957 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36595 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2183: - -/* Line 1455 of yacc.c */ -#line 13954 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13958 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36601 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2184: - -/* Line 1455 of yacc.c */ -#line 13955 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13959 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36607 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2185: - -/* Line 1455 of yacc.c */ -#line 13956 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13960 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36613 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2186: - -/* Line 1455 of yacc.c */ -#line 13957 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13961 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36619 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2187: - -/* Line 1455 of yacc.c */ -#line 13958 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13962 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36625 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2188: - -/* Line 1455 of yacc.c */ -#line 13959 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13963 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36631 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2189: - -/* Line 1455 of yacc.c */ -#line 13969 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13964 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36637 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2190: - -/* Line 1455 of yacc.c */ -#line 13970 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13965 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36643 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2191: - -/* Line 1455 of yacc.c */ -#line 13971 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13966 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36649 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2192: - -/* Line 1455 of yacc.c */ -#line 13972 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13967 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36655 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2193: - -/* Line 1455 of yacc.c */ -#line 13973 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13968 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36661 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2194: - -/* Line 1455 of yacc.c */ -#line 13974 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13969 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36667 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2195: - -/* Line 1455 of yacc.c */ -#line 13975 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13979 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36673 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2196: - -/* Line 1455 of yacc.c */ -#line 13976 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13980 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36679 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2197: - -/* Line 1455 of yacc.c */ -#line 13977 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13981 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36685 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2198: - -/* Line 1455 of yacc.c */ -#line 13978 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13982 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36691 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2199: - -/* Line 1455 of yacc.c */ -#line 13979 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13983 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36697 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2200: - -/* Line 1455 of yacc.c */ -#line 13980 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13984 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36703 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2201: - -/* Line 1455 of yacc.c */ -#line 13981 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13985 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36709 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2202: - -/* Line 1455 of yacc.c */ -#line 13982 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13986 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36715 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2203: - -/* Line 1455 of yacc.c */ -#line 13983 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13987 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36721 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2204: - -/* Line 1455 of yacc.c */ -#line 13984 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13988 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36727 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2205: - -/* Line 1455 of yacc.c */ -#line 13985 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13989 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36733 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2206: - -/* Line 1455 of yacc.c */ -#line 13986 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13990 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36739 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2207: - -/* Line 1455 of yacc.c */ -#line 13987 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13991 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36745 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2208: - -/* Line 1455 of yacc.c */ -#line 13988 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13992 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36751 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2209: - -/* Line 1455 of yacc.c */ -#line 13989 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13993 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36757 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2210: - -/* Line 1455 of yacc.c */ -#line 13990 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13994 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36763 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2211: - -/* Line 1455 of yacc.c */ -#line 13991 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13995 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36769 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2212: - -/* Line 1455 of yacc.c */ -#line 13992 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13996 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36775 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2213: - -/* Line 1455 of yacc.c */ -#line 13993 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13997 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36781 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2214: - -/* Line 1455 of yacc.c */ -#line 13994 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13998 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36787 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2215: - -/* Line 1455 of yacc.c */ -#line 13995 "/home/buildbot/git/sql/sql_yacc.yy" +#line 13999 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36793 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2216: - -/* Line 1455 of yacc.c */ -#line 13996 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14000 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36799 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2217: - -/* Line 1455 of yacc.c */ -#line 13997 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14001 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36805 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2218: - -/* Line 1455 of yacc.c */ -#line 13998 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14002 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36811 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2219: - -/* Line 1455 of yacc.c */ -#line 13999 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14003 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36817 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2220: - -/* Line 1455 of yacc.c */ -#line 14000 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14004 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36823 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2221: - -/* Line 1455 of yacc.c */ -#line 14001 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14005 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36829 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2222: - -/* Line 1455 of yacc.c */ -#line 14002 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14006 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36835 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2223: - -/* Line 1455 of yacc.c */ -#line 14003 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14007 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36841 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2224: - -/* Line 1455 of yacc.c */ -#line 14004 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14008 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36847 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2225: - -/* Line 1455 of yacc.c */ -#line 14005 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14009 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36853 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2226: - -/* Line 1455 of yacc.c */ -#line 14006 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14010 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36859 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2227: - -/* Line 1455 of yacc.c */ -#line 14007 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14011 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36865 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2228: - -/* Line 1455 of yacc.c */ -#line 14008 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14012 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36871 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2229: - -/* Line 1455 of yacc.c */ -#line 14009 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14013 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36877 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2230: - -/* Line 1455 of yacc.c */ -#line 14010 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14014 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36883 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2231: - -/* Line 1455 of yacc.c */ -#line 14011 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14015 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36889 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2232: - -/* Line 1455 of yacc.c */ -#line 14012 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14016 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36895 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2233: - -/* Line 1455 of yacc.c */ -#line 14013 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14017 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36901 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2234: - -/* Line 1455 of yacc.c */ -#line 14014 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14018 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36907 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2235: - -/* Line 1455 of yacc.c */ -#line 14015 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14019 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36913 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2236: - -/* Line 1455 of yacc.c */ -#line 14016 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14020 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36919 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2237: - -/* Line 1455 of yacc.c */ -#line 14017 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14021 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36925 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2238: - -/* Line 1455 of yacc.c */ -#line 14018 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14022 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36931 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2239: - -/* Line 1455 of yacc.c */ -#line 14023 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14023 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36937 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2240: - -/* Line 1455 of yacc.c */ -#line 14024 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14024 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36943 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2241: - -/* Line 1455 of yacc.c */ -#line 14025 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14025 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36949 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2242: - -/* Line 1455 of yacc.c */ -#line 14026 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14026 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36955 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2243: - -/* Line 1455 of yacc.c */ -#line 14027 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14027 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36961 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2244: - -/* Line 1455 of yacc.c */ -#line 14028 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14028 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36967 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2245: - -/* Line 1455 of yacc.c */ -#line 14029 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14033 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36973 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2246: - -/* Line 1455 of yacc.c */ -#line 14030 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14034 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36979 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2247: - -/* Line 1455 of yacc.c */ -#line 14031 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14035 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36985 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2248: - -/* Line 1455 of yacc.c */ -#line 14032 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14036 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36991 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2249: - -/* Line 1455 of yacc.c */ -#line 14033 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14037 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 36997 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2250: - -/* Line 1455 of yacc.c */ -#line 14034 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14038 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37003 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2251: - -/* Line 1455 of yacc.c */ -#line 14035 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14039 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37009 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2252: - -/* Line 1455 of yacc.c */ -#line 14036 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14040 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37015 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2253: - -/* Line 1455 of yacc.c */ -#line 14037 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14041 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37021 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2254: - -/* Line 1455 of yacc.c */ -#line 14038 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14042 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37027 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2255: - -/* Line 1455 of yacc.c */ -#line 14039 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14043 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37033 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2256: - -/* Line 1455 of yacc.c */ -#line 14040 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14044 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37039 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2257: - -/* Line 1455 of yacc.c */ -#line 14041 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14045 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37045 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2258: - -/* Line 1455 of yacc.c */ -#line 14042 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14046 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37051 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2259: - -/* Line 1455 of yacc.c */ -#line 14043 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14047 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37057 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2260: - -/* Line 1455 of yacc.c */ -#line 14044 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14048 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37063 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2261: - -/* Line 1455 of yacc.c */ -#line 14045 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14049 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37069 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2262: - -/* Line 1455 of yacc.c */ -#line 14046 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14050 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37075 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2263: - -/* Line 1455 of yacc.c */ -#line 14047 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14051 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37081 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2264: - -/* Line 1455 of yacc.c */ -#line 14048 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14052 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37087 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2265: - -/* Line 1455 of yacc.c */ -#line 14049 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14053 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37093 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2266: - -/* Line 1455 of yacc.c */ -#line 14050 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14054 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37099 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2267: - -/* Line 1455 of yacc.c */ -#line 14051 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14055 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37105 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2268: - -/* Line 1455 of yacc.c */ -#line 14052 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14056 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37111 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2269: - -/* Line 1455 of yacc.c */ -#line 14053 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14057 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37117 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2270: - -/* Line 1455 of yacc.c */ -#line 14054 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14058 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37123 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2271: - -/* Line 1455 of yacc.c */ -#line 14055 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14059 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37129 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2272: - -/* Line 1455 of yacc.c */ -#line 14056 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14060 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37135 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2273: - -/* Line 1455 of yacc.c */ -#line 14057 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14061 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37141 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2274: - -/* Line 1455 of yacc.c */ -#line 14058 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14062 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37147 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2275: - -/* Line 1455 of yacc.c */ -#line 14059 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14063 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37153 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2276: - -/* Line 1455 of yacc.c */ -#line 14060 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14064 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37159 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2277: - -/* Line 1455 of yacc.c */ -#line 14061 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14065 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37165 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2278: - -/* Line 1455 of yacc.c */ -#line 14062 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14066 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37171 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2279: - -/* Line 1455 of yacc.c */ -#line 14063 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14067 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37177 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2280: - -/* Line 1455 of yacc.c */ -#line 14064 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14068 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37183 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2281: - -/* Line 1455 of yacc.c */ -#line 14065 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14069 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37189 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2282: - -/* Line 1455 of yacc.c */ -#line 14066 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14070 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37195 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2283: - -/* Line 1455 of yacc.c */ -#line 14067 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14071 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37201 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2284: - -/* Line 1455 of yacc.c */ -#line 14068 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14072 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37207 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2285: - -/* Line 1455 of yacc.c */ -#line 14069 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14073 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37213 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2286: - -/* Line 1455 of yacc.c */ -#line 14070 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14074 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37219 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2287: - -/* Line 1455 of yacc.c */ -#line 14071 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14075 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37225 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2288: - -/* Line 1455 of yacc.c */ -#line 14072 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14076 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37231 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2289: - -/* Line 1455 of yacc.c */ -#line 14073 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14077 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37237 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2290: - -/* Line 1455 of yacc.c */ -#line 14074 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14078 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37243 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2291: - -/* Line 1455 of yacc.c */ -#line 14075 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14079 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37249 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2292: - -/* Line 1455 of yacc.c */ -#line 14076 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14080 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37255 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2293: - -/* Line 1455 of yacc.c */ -#line 14077 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14081 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37261 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2294: - -/* Line 1455 of yacc.c */ -#line 14078 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14082 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37267 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2295: - -/* Line 1455 of yacc.c */ -#line 14079 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14083 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37273 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2296: - -/* Line 1455 of yacc.c */ -#line 14080 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14084 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37279 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2297: - -/* Line 1455 of yacc.c */ -#line 14081 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14085 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37285 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2298: - -/* Line 1455 of yacc.c */ -#line 14082 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14086 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37291 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2299: - -/* Line 1455 of yacc.c */ -#line 14083 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14087 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37297 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2300: - -/* Line 1455 of yacc.c */ -#line 14084 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14088 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37303 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2301: - -/* Line 1455 of yacc.c */ -#line 14085 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14089 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37309 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2302: - -/* Line 1455 of yacc.c */ -#line 14086 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14090 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37315 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2303: - -/* Line 1455 of yacc.c */ -#line 14087 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14091 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37321 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2304: - -/* Line 1455 of yacc.c */ -#line 14088 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14092 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37327 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2305: - -/* Line 1455 of yacc.c */ -#line 14089 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14093 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37333 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2306: - -/* Line 1455 of yacc.c */ -#line 14090 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14094 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37339 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2307: - -/* Line 1455 of yacc.c */ -#line 14091 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14095 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37345 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2308: - -/* Line 1455 of yacc.c */ -#line 14092 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14096 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37351 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2309: - -/* Line 1455 of yacc.c */ -#line 14093 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14097 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37357 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2310: - -/* Line 1455 of yacc.c */ -#line 14094 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14098 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37363 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2311: - -/* Line 1455 of yacc.c */ -#line 14095 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14099 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37369 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2312: - -/* Line 1455 of yacc.c */ -#line 14096 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14100 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37375 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2313: - -/* Line 1455 of yacc.c */ -#line 14097 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14101 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37381 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2314: - -/* Line 1455 of yacc.c */ -#line 14098 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14102 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37387 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2315: - -/* Line 1455 of yacc.c */ -#line 14099 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37393 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2316: - -/* Line 1455 of yacc.c */ -#line 14100 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14104 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37399 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2317: - -/* Line 1455 of yacc.c */ -#line 14101 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14105 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37405 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2318: - -/* Line 1455 of yacc.c */ -#line 14102 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14106 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37411 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2319: - -/* Line 1455 of yacc.c */ -#line 14103 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14107 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37417 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2320: - -/* Line 1455 of yacc.c */ -#line 14104 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14108 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37423 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2321: - -/* Line 1455 of yacc.c */ -#line 14105 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14109 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37429 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2322: - -/* Line 1455 of yacc.c */ -#line 14106 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14110 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37435 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2323: - -/* Line 1455 of yacc.c */ -#line 14107 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14111 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37441 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2324: - -/* Line 1455 of yacc.c */ -#line 14108 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14112 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37447 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2325: - -/* Line 1455 of yacc.c */ -#line 14109 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14113 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37453 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2326: - -/* Line 1455 of yacc.c */ -#line 14110 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14114 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37459 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2327: - -/* Line 1455 of yacc.c */ -#line 14111 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14115 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37465 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2328: - -/* Line 1455 of yacc.c */ -#line 14112 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14116 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37471 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2329: - -/* Line 1455 of yacc.c */ -#line 14113 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14117 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37477 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2330: - -/* Line 1455 of yacc.c */ -#line 14114 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14118 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37483 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2331: - -/* Line 1455 of yacc.c */ -#line 14115 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14119 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37489 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2332: - -/* Line 1455 of yacc.c */ -#line 14116 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14120 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37495 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2333: - -/* Line 1455 of yacc.c */ -#line 14117 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14121 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37501 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2334: - -/* Line 1455 of yacc.c */ -#line 14118 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14122 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37507 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2335: - -/* Line 1455 of yacc.c */ -#line 14119 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14123 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37513 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2336: - -/* Line 1455 of yacc.c */ -#line 14120 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14124 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37519 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2337: - -/* Line 1455 of yacc.c */ -#line 14121 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14125 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37525 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2338: - -/* Line 1455 of yacc.c */ -#line 14122 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14126 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37531 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2339: - -/* Line 1455 of yacc.c */ -#line 14123 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14127 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37537 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2340: - -/* Line 1455 of yacc.c */ -#line 14124 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14128 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37543 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2341: - -/* Line 1455 of yacc.c */ -#line 14125 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14129 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37549 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2342: - -/* Line 1455 of yacc.c */ -#line 14126 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14130 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37555 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2343: - -/* Line 1455 of yacc.c */ -#line 14127 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14131 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37561 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2344: - -/* Line 1455 of yacc.c */ -#line 14128 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14132 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37567 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2345: - -/* Line 1455 of yacc.c */ -#line 14129 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14133 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37573 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2346: - -/* Line 1455 of yacc.c */ -#line 14130 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14134 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37579 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2347: - -/* Line 1455 of yacc.c */ -#line 14131 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14135 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37585 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2348: - -/* Line 1455 of yacc.c */ -#line 14132 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14136 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37591 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2349: - -/* Line 1455 of yacc.c */ -#line 14133 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14137 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37597 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2350: - -/* Line 1455 of yacc.c */ -#line 14134 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14138 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37603 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2351: - -/* Line 1455 of yacc.c */ -#line 14135 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14139 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37609 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2352: - -/* Line 1455 of yacc.c */ -#line 14136 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14140 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37615 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2353: - -/* Line 1455 of yacc.c */ -#line 14137 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14141 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37621 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2354: - -/* Line 1455 of yacc.c */ -#line 14138 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14142 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37627 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2355: - -/* Line 1455 of yacc.c */ -#line 14139 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14143 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37633 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2356: - -/* Line 1455 of yacc.c */ -#line 14140 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14144 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37639 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2357: - -/* Line 1455 of yacc.c */ -#line 14141 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14145 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37645 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2358: - -/* Line 1455 of yacc.c */ -#line 14142 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14146 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37651 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2359: - -/* Line 1455 of yacc.c */ -#line 14143 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14147 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37657 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2360: - -/* Line 1455 of yacc.c */ -#line 14144 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14148 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37663 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2361: - -/* Line 1455 of yacc.c */ -#line 14145 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14149 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37669 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2362: - -/* Line 1455 of yacc.c */ -#line 14146 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14150 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37675 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2363: - -/* Line 1455 of yacc.c */ -#line 14147 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14151 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37681 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2364: - -/* Line 1455 of yacc.c */ -#line 14148 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14152 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37687 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2365: - -/* Line 1455 of yacc.c */ -#line 14149 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14153 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37693 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2366: - -/* Line 1455 of yacc.c */ -#line 14150 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14154 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37699 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2367: - -/* Line 1455 of yacc.c */ -#line 14151 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14155 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37705 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2368: - -/* Line 1455 of yacc.c */ -#line 14152 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14156 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37711 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2369: - -/* Line 1455 of yacc.c */ -#line 14153 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14157 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37717 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2370: - -/* Line 1455 of yacc.c */ -#line 14154 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14158 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37723 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2371: - -/* Line 1455 of yacc.c */ -#line 14155 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14159 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37729 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2372: - -/* Line 1455 of yacc.c */ -#line 14156 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14160 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37735 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2373: - -/* Line 1455 of yacc.c */ -#line 14157 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14161 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37741 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2374: - -/* Line 1455 of yacc.c */ -#line 14158 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14162 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37747 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2375: - -/* Line 1455 of yacc.c */ -#line 14159 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14163 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37753 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2376: - -/* Line 1455 of yacc.c */ -#line 14160 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14164 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37759 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2377: - -/* Line 1455 of yacc.c */ -#line 14161 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14165 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37765 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2378: - -/* Line 1455 of yacc.c */ -#line 14162 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14166 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37771 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2379: - -/* Line 1455 of yacc.c */ -#line 14163 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14167 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37777 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2380: - -/* Line 1455 of yacc.c */ -#line 14164 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14168 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37783 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2381: - -/* Line 1455 of yacc.c */ -#line 14165 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14169 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37789 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2382: - -/* Line 1455 of yacc.c */ -#line 14166 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14170 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37795 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2383: - -/* Line 1455 of yacc.c */ -#line 14167 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14171 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37801 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2384: - -/* Line 1455 of yacc.c */ -#line 14168 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14172 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37807 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2385: - -/* Line 1455 of yacc.c */ -#line 14169 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14173 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37813 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2386: - -/* Line 1455 of yacc.c */ -#line 14170 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14174 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37819 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2387: - -/* Line 1455 of yacc.c */ -#line 14171 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14175 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37825 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2388: - -/* Line 1455 of yacc.c */ -#line 14172 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14176 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37831 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2389: - -/* Line 1455 of yacc.c */ -#line 14173 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14177 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37837 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2390: - -/* Line 1455 of yacc.c */ -#line 14174 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14178 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37843 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2391: - -/* Line 1455 of yacc.c */ -#line 14175 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14179 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37849 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2392: - -/* Line 1455 of yacc.c */ -#line 14176 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14180 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37855 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2393: - -/* Line 1455 of yacc.c */ -#line 14177 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14181 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37861 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2394: - -/* Line 1455 of yacc.c */ -#line 14178 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14182 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37867 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2395: - -/* Line 1455 of yacc.c */ -#line 14179 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14183 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37873 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2396: - -/* Line 1455 of yacc.c */ -#line 14180 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14184 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37879 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2397: - -/* Line 1455 of yacc.c */ -#line 14181 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14185 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37885 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2398: - -/* Line 1455 of yacc.c */ -#line 14182 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14186 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37891 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2399: - -/* Line 1455 of yacc.c */ -#line 14183 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14187 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37897 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2400: - -/* Line 1455 of yacc.c */ -#line 14184 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14188 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37903 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2401: - -/* Line 1455 of yacc.c */ -#line 14185 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14189 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37909 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2402: - -/* Line 1455 of yacc.c */ -#line 14186 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14190 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37915 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2403: - -/* Line 1455 of yacc.c */ -#line 14187 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14191 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37921 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2404: - -/* Line 1455 of yacc.c */ -#line 14188 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14192 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37927 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2405: - -/* Line 1455 of yacc.c */ -#line 14189 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14193 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37933 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2406: - -/* Line 1455 of yacc.c */ -#line 14190 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14194 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37939 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2407: - -/* Line 1455 of yacc.c */ -#line 14191 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14195 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37945 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2408: - -/* Line 1455 of yacc.c */ -#line 14192 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14196 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37951 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2409: - -/* Line 1455 of yacc.c */ -#line 14193 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14197 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37957 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2410: - -/* Line 1455 of yacc.c */ -#line 14194 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14198 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37963 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2411: - -/* Line 1455 of yacc.c */ -#line 14195 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14199 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37969 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2412: - -/* Line 1455 of yacc.c */ -#line 14196 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14200 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37975 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2413: - -/* Line 1455 of yacc.c */ -#line 14197 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14201 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37981 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2414: - -/* Line 1455 of yacc.c */ -#line 14198 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14202 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37987 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2415: - -/* Line 1455 of yacc.c */ -#line 14199 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14203 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37993 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2416: - -/* Line 1455 of yacc.c */ -#line 14200 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14204 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 37999 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2417: - -/* Line 1455 of yacc.c */ -#line 14201 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14205 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38005 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2418: - -/* Line 1455 of yacc.c */ -#line 14202 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14206 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38011 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2419: - -/* Line 1455 of yacc.c */ -#line 14203 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14207 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38017 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2420: - -/* Line 1455 of yacc.c */ -#line 14204 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14208 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38023 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2421: - -/* Line 1455 of yacc.c */ -#line 14205 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14209 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38029 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2422: - -/* Line 1455 of yacc.c */ -#line 14206 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14210 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38035 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2423: - -/* Line 1455 of yacc.c */ -#line 14207 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14211 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38041 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2424: - -/* Line 1455 of yacc.c */ -#line 14208 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14212 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38047 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2425: - -/* Line 1455 of yacc.c */ -#line 14209 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14213 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38053 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2426: - -/* Line 1455 of yacc.c */ -#line 14210 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14214 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38059 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2427: - -/* Line 1455 of yacc.c */ -#line 14211 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14215 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38065 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2428: - -/* Line 1455 of yacc.c */ -#line 14212 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14216 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38071 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2429: - -/* Line 1455 of yacc.c */ -#line 14213 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14217 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38077 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2430: - -/* Line 1455 of yacc.c */ -#line 14214 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14218 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38083 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2431: - -/* Line 1455 of yacc.c */ -#line 14215 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14219 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38089 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2432: - -/* Line 1455 of yacc.c */ -#line 14216 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14220 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38095 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2433: - -/* Line 1455 of yacc.c */ -#line 14217 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14221 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38101 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2434: - -/* Line 1455 of yacc.c */ -#line 14218 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14222 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38107 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2435: - -/* Line 1455 of yacc.c */ -#line 14219 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14223 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38113 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2436: - -/* Line 1455 of yacc.c */ -#line 14220 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14224 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38119 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2437: - -/* Line 1455 of yacc.c */ -#line 14221 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14225 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38125 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2438: - -/* Line 1455 of yacc.c */ -#line 14222 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14226 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38131 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2439: - -/* Line 1455 of yacc.c */ -#line 14223 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14227 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38137 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2440: - -/* Line 1455 of yacc.c */ -#line 14224 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14228 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38143 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2441: - -/* Line 1455 of yacc.c */ -#line 14225 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14229 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38149 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2442: - -/* Line 1455 of yacc.c */ -#line 14226 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14230 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38155 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2443: - -/* Line 1455 of yacc.c */ -#line 14227 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14231 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38161 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2444: - -/* Line 1455 of yacc.c */ -#line 14228 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14232 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38167 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2445: - -/* Line 1455 of yacc.c */ -#line 14229 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14233 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38173 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2446: - -/* Line 1455 of yacc.c */ -#line 14230 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14234 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38179 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2447: - -/* Line 1455 of yacc.c */ -#line 14231 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14235 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38185 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2448: - -/* Line 1455 of yacc.c */ -#line 14232 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14236 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38191 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2449: - -/* Line 1455 of yacc.c */ -#line 14233 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14237 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38197 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2450: - -/* Line 1455 of yacc.c */ -#line 14234 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14238 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38203 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2451: - -/* Line 1455 of yacc.c */ -#line 14235 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14239 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38209 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2452: - -/* Line 1455 of yacc.c */ -#line 14236 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14240 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38215 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2453: - -/* Line 1455 of yacc.c */ -#line 14237 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14241 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38221 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2454: - -/* Line 1455 of yacc.c */ -#line 14238 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14242 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38227 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2455: - -/* Line 1455 of yacc.c */ -#line 14239 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14243 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38233 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2456: - -/* Line 1455 of yacc.c */ -#line 14240 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14244 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38239 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2457: - -/* Line 1455 of yacc.c */ -#line 14241 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14245 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38245 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2458: - -/* Line 1455 of yacc.c */ -#line 14242 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14246 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38251 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2459: - -/* Line 1455 of yacc.c */ -#line 14243 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14247 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38257 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2460: - -/* Line 1455 of yacc.c */ -#line 14244 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14248 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38263 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2461: - -/* Line 1455 of yacc.c */ -#line 14245 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14249 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38269 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2462: - -/* Line 1455 of yacc.c */ -#line 14246 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14250 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38275 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2463: - -/* Line 1455 of yacc.c */ -#line 14247 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14251 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38281 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2464: - -/* Line 1455 of yacc.c */ -#line 14248 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14252 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38287 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2465: - -/* Line 1455 of yacc.c */ -#line 14249 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14253 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38293 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2466: - -/* Line 1455 of yacc.c */ -#line 14250 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14254 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38299 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2467: - -/* Line 1455 of yacc.c */ -#line 14251 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14255 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38305 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2468: - -/* Line 1455 of yacc.c */ -#line 14252 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14256 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38311 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2469: - -/* Line 1455 of yacc.c */ -#line 14253 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14257 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38317 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2470: - -/* Line 1455 of yacc.c */ -#line 14254 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14258 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38323 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2471: - -/* Line 1455 of yacc.c */ -#line 14255 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14259 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38329 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2472: - -/* Line 1455 of yacc.c */ -#line 14256 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14260 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38335 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2473: - -/* Line 1455 of yacc.c */ -#line 14257 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14261 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38341 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2474: - -/* Line 1455 of yacc.c */ -#line 14258 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14262 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38347 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2475: - -/* Line 1455 of yacc.c */ -#line 14259 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14263 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38353 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2476: - -/* Line 1455 of yacc.c */ -#line 14260 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14264 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38359 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2477: - -/* Line 1455 of yacc.c */ -#line 14261 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14265 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38365 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2478: - -/* Line 1455 of yacc.c */ -#line 14262 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14266 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38371 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2479: - -/* Line 1455 of yacc.c */ -#line 14263 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14267 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38377 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2480: - -/* Line 1455 of yacc.c */ -#line 14264 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14268 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38383 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2481: - -/* Line 1455 of yacc.c */ -#line 14265 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14269 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38389 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2482: - -/* Line 1455 of yacc.c */ -#line 14266 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14270 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38395 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2483: - -/* Line 1455 of yacc.c */ -#line 14267 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14271 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38401 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2484: - -/* Line 1455 of yacc.c */ -#line 14268 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14272 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38407 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2485: - -/* Line 1455 of yacc.c */ -#line 14269 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14273 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38413 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2486: - -/* Line 1455 of yacc.c */ -#line 14270 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14274 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38419 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2487: - -/* Line 1455 of yacc.c */ -#line 14271 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14275 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38425 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2488: - -/* Line 1455 of yacc.c */ -#line 14272 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14276 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38431 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2489: - -/* Line 1455 of yacc.c */ -#line 14273 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14277 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38437 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2490: - -/* Line 1455 of yacc.c */ -#line 14274 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14278 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38443 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2491: - -/* Line 1455 of yacc.c */ -#line 14275 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14279 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38449 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2492: - -/* Line 1455 of yacc.c */ -#line 14276 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14280 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38455 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2493: - -/* Line 1455 of yacc.c */ -#line 14277 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14281 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38461 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2494: - -/* Line 1455 of yacc.c */ -#line 14278 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14282 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38467 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2495: - -/* Line 1455 of yacc.c */ -#line 14279 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14283 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38473 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2496: - -/* Line 1455 of yacc.c */ -#line 14280 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14284 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38479 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2497: - -/* Line 1455 of yacc.c */ -#line 14281 "/home/buildbot/git/sql/sql_yacc.yy" +#line 14285 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38485 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; case 2498: +#line 14286 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 38491 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; + + case 2499: +#line 14287 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 38497 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; + + case 2500: +#line 14288 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 38503 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; + + case 2501: +#line 14289 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 38509 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; + + case 2502: +#line 14290 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 38515 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; + + case 2503: +#line 14291 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + {} +#line 38521 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; -/* Line 1455 of yacc.c */ -#line 14293 "/home/buildbot/git/sql/sql_yacc.yy" + case 2504: +#line 14303 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_SET_OPTION; @@ -41790,19 +38531,17 @@ lex->autocommit= 0; sp_create_assignment_lex(thd, yychar == YYEMPTY); } +#line 38535 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2499: - -/* Line 1455 of yacc.c */ -#line 14303 "/home/buildbot/git/sql/sql_yacc.yy" + case 2505: +#line 14313 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38541 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2500: - -/* Line 1455 of yacc.c */ -#line 14305 "/home/buildbot/git/sql/sql_yacc.yy" + case 2506: +#line 14315 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; mysql_init_select(lex); @@ -41810,12 +38549,11 @@ lex->sql_command= SQLCOM_SET_OPTION; lex->autocommit= 0; } +#line 38553 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2501: - -/* Line 1455 of yacc.c */ -#line 14313 "/home/buildbot/git/sql/sql_yacc.yy" + case 2507: +#line 14323 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->table_or_sp_used()) @@ -41823,208 +38561,184 @@ lex->stmt_var_list= lex->var_list; lex->var_list.empty(); } +#line 38565 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2502: - -/* Line 1455 of yacc.c */ -#line 14321 "/home/buildbot/git/sql/sql_yacc.yy" + case 2508: +#line 14331 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 38571 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2505: - -/* Line 1455 of yacc.c */ -#line 14336 "/home/buildbot/git/sql/sql_yacc.yy" + case 2511: +#line 14346 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (sp_create_assignment_instr(thd, yychar == YYEMPTY)) MYSQL_YYABORT; } +#line 38580 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2507: - -/* Line 1455 of yacc.c */ -#line 14342 "/home/buildbot/git/sql/sql_yacc.yy" + case 2513: +#line 14352 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->option_type= OPT_DEFAULT; } +#line 38588 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2508: - -/* Line 1455 of yacc.c */ -#line 14346 "/home/buildbot/git/sql/sql_yacc.yy" + case 2514: +#line 14356 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (sp_create_assignment_instr(thd, yychar == YYEMPTY)) MYSQL_YYABORT; } +#line 38597 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2509: - -/* Line 1455 of yacc.c */ -#line 14351 "/home/buildbot/git/sql/sql_yacc.yy" + case 2515: +#line 14361 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->option_type= (yyvsp[(1) - (1)].var_type); + Lex->option_type= (yyvsp[0].var_type); } +#line 38605 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2511: - -/* Line 1455 of yacc.c */ -#line 14361 "/home/buildbot/git/sql/sql_yacc.yy" + case 2517: +#line 14371 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (sp_create_assignment_instr(thd, yychar == YYEMPTY)) MYSQL_YYABORT; } +#line 38614 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2513: - -/* Line 1455 of yacc.c */ -#line 14367 "/home/buildbot/git/sql/sql_yacc.yy" + case 2519: +#line 14377 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (sp_create_assignment_instr(thd, yychar == YYEMPTY)) MYSQL_YYABORT; } +#line 38623 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2516: - -/* Line 1455 of yacc.c */ -#line 14381 "/home/buildbot/git/sql/sql_yacc.yy" + case 2522: +#line 14391 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { sp_create_assignment_lex(thd, yychar == YYEMPTY); } +#line 38631 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2517: - -/* Line 1455 of yacc.c */ -#line 14385 "/home/buildbot/git/sql/sql_yacc.yy" + case 2523: +#line 14395 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (sp_create_assignment_instr(thd, yychar == YYEMPTY)) MYSQL_YYABORT; } +#line 38640 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2518: - -/* Line 1455 of yacc.c */ -#line 14390 "/home/buildbot/git/sql/sql_yacc.yy" + case 2524: +#line 14400 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { sp_create_assignment_lex(thd, yychar == YYEMPTY); } +#line 38648 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2519: - -/* Line 1455 of yacc.c */ -#line 14394 "/home/buildbot/git/sql/sql_yacc.yy" + case 2525: +#line 14404 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (sp_create_assignment_instr(thd, yychar == YYEMPTY)) MYSQL_YYABORT; } +#line 38657 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2520: - -/* Line 1455 of yacc.c */ -#line 14403 "/home/buildbot/git/sql/sql_yacc.yy" + case 2526: +#line 14413 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->option_type= (yyvsp[(1) - (1)].var_type); + Lex->option_type= (yyvsp[0].var_type); } +#line 38665 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2523: - -/* Line 1455 of yacc.c */ -#line 14411 "/home/buildbot/git/sql/sql_yacc.yy" + case 2529: +#line 14421 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_GLOBAL; } +#line 38671 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2524: - -/* Line 1455 of yacc.c */ -#line 14412 "/home/buildbot/git/sql/sql_yacc.yy" + case 2530: +#line 14422 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_SESSION; } +#line 38677 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2525: - -/* Line 1455 of yacc.c */ -#line 14413 "/home/buildbot/git/sql/sql_yacc.yy" + case 2531: +#line 14423 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_SESSION; } +#line 38683 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2526: - -/* Line 1455 of yacc.c */ -#line 14417 "/home/buildbot/git/sql/sql_yacc.yy" + case 2532: +#line 14427 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_SESSION; } +#line 38689 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2527: - -/* Line 1455 of yacc.c */ -#line 14418 "/home/buildbot/git/sql/sql_yacc.yy" + case 2533: +#line 14428 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_GLOBAL; } +#line 38695 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2528: - -/* Line 1455 of yacc.c */ -#line 14419 "/home/buildbot/git/sql/sql_yacc.yy" + case 2534: +#line 14429 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_SESSION; } +#line 38701 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2529: - -/* Line 1455 of yacc.c */ -#line 14420 "/home/buildbot/git/sql/sql_yacc.yy" + case 2535: +#line 14430 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_SESSION; } +#line 38707 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2530: - -/* Line 1455 of yacc.c */ -#line 14424 "/home/buildbot/git/sql/sql_yacc.yy" + case 2536: +#line 14434 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_DEFAULT; } - break; - - case 2531: +#line 38713 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ + break; -/* Line 1455 of yacc.c */ -#line 14425 "/home/buildbot/git/sql/sql_yacc.yy" + case 2537: +#line 14435 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_GLOBAL; } +#line 38719 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2532: - -/* Line 1455 of yacc.c */ -#line 14426 "/home/buildbot/git/sql/sql_yacc.yy" + case 2538: +#line 14436 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_SESSION; } +#line 38725 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2533: - -/* Line 1455 of yacc.c */ -#line 14427 "/home/buildbot/git/sql/sql_yacc.yy" + case 2539: +#line 14437 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.var_type)=OPT_SESSION; } +#line 38731 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2534: - -/* Line 1455 of yacc.c */ -#line 14433 "/home/buildbot/git/sql/sql_yacc.yy" + case 2540: +#line 14443 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - if ((yyvsp[(1) - (3)].variable).var && (yyvsp[(1) - (3)].variable).var != trg_new_row_fake_var) + if ((yyvsp[-2].variable).var && (yyvsp[-2].variable).var != trg_new_row_fake_var) { /* It is a system variable. */ - if (set_system_variable(thd, &(yyvsp[(1) - (3)].variable), lex->option_type, (yyvsp[(3) - (3)].item))) + if (set_system_variable(thd, &(yyvsp[-2].variable), lex->option_type, (yyvsp[0].item))) MYSQL_YYABORT; } else @@ -42037,46 +38751,44 @@ MYSQL_YYABORT; } } +#line 38755 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2535: - -/* Line 1455 of yacc.c */ -#line 14457 "/home/buildbot/git/sql/sql_yacc.yy" + case 2541: +#line 14467 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - if ((yyvsp[(1) - (3)].variable).var == trg_new_row_fake_var) + if ((yyvsp[-2].variable).var == trg_new_row_fake_var) { /* We are in trigger and assigning value to field of new row */ - if (set_trigger_new_row(thd, &(yyvsp[(1) - (3)].variable).base_name, (yyvsp[(3) - (3)].item))) + if (set_trigger_new_row(thd, &(yyvsp[-2].variable).base_name, (yyvsp[0].item))) MYSQL_YYABORT; } - else if ((yyvsp[(1) - (3)].variable).var) + else if ((yyvsp[-2].variable).var) { /* It is a system variable. */ - if (set_system_variable(thd, &(yyvsp[(1) - (3)].variable), lex->option_type, (yyvsp[(3) - (3)].item))) + if (set_system_variable(thd, &(yyvsp[-2].variable), lex->option_type, (yyvsp[0].item))) MYSQL_YYABORT; } else { sp_pcontext *spc= lex->spcont; - sp_variable *spv= spc->find_variable((yyvsp[(1) - (3)].variable).base_name, false); + sp_variable *spv= spc->find_variable((yyvsp[-2].variable).base_name, false); /* It is a local variable. */ - if (set_local_variable(thd, spv, (yyvsp[(3) - (3)].item))) + if (set_local_variable(thd, spv, (yyvsp[0].item))) MYSQL_YYABORT; } } +#line 38785 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2536: - -/* Line 1455 of yacc.c */ -#line 14483 "/home/buildbot/git/sql/sql_yacc.yy" + case 2542: +#line 14493 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Item_func_set_user_var *item; - item= new (thd->mem_root) Item_func_set_user_var(thd, (yyvsp[(2) - (4)].lex_str), (yyvsp[(4) - (4)].item)); + item= new (thd->mem_root) Item_func_set_user_var(thd, (yyvsp[-2].lex_str), (yyvsp[0].item)); if (item == NULL) MYSQL_YYABORT; set_var_user *var= new (thd->mem_root) set_var_user(item); @@ -42084,33 +38796,31 @@ MYSQL_YYABORT; Lex->var_list.push_back(var, thd->mem_root); } +#line 38800 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2537: - -/* Line 1455 of yacc.c */ -#line 14494 "/home/buildbot/git/sql/sql_yacc.yy" + case 2543: +#line 14504 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - struct sys_var_with_base tmp= (yyvsp[(4) - (6)].variable); + struct sys_var_with_base tmp= (yyvsp[-2].variable); /* Lookup if necessary: must be a system variable. */ if (tmp.var == NULL) { if (find_sys_var_null_base(thd, &tmp)) MYSQL_YYABORT; } - if (set_system_variable(thd, &tmp, (yyvsp[(3) - (6)].var_type), (yyvsp[(6) - (6)].item))) + if (set_system_variable(thd, &tmp, (yyvsp[-3].var_type), (yyvsp[0].item))) MYSQL_YYABORT; } +#line 38816 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2538: - -/* Line 1455 of yacc.c */ -#line 14506 "/home/buildbot/git/sql/sql_yacc.yy" + case 2544: +#line 14516 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; CHARSET_INFO *cs2; - cs2= (yyvsp[(2) - (2)].charset) ? (yyvsp[(2) - (2)].charset): global_system_variables.character_set_client; + cs2= (yyvsp[0].charset) ? (yyvsp[0].charset): global_system_variables.character_set_client; set_var_collation_client *var; var= (new (thd->mem_root) set_var_collation_client(cs2, @@ -42120,12 +38830,11 @@ MYSQL_YYABORT; lex->var_list.push_back(var, thd->mem_root); } +#line 38834 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2539: - -/* Line 1455 of yacc.c */ -#line 14520 "/home/buildbot/git/sql/sql_yacc.yy" + case 2545: +#line 14530 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_pcontext *spc= lex->spcont; @@ -42140,18 +38849,17 @@ MYSQL_YYABORT; } +#line 38853 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2540: - -/* Line 1455 of yacc.c */ -#line 14535 "/home/buildbot/git/sql/sql_yacc.yy" + case 2546: +#line 14545 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; CHARSET_INFO *cs2; CHARSET_INFO *cs3; - cs2= (yyvsp[(2) - (3)].charset) ? (yyvsp[(2) - (3)].charset) : global_system_variables.character_set_client; - cs3= (yyvsp[(3) - (3)].charset) ? (yyvsp[(3) - (3)].charset) : cs2; + cs2= (yyvsp[-1].charset) ? (yyvsp[-1].charset) : global_system_variables.character_set_client; + cs3= (yyvsp[0].charset) ? (yyvsp[0].charset) : cs2; if (!my_charset_same(cs2, cs3)) { my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), @@ -42164,12 +38872,11 @@ MYSQL_YYABORT; lex->var_list.push_back(var, thd->mem_root); } +#line 38876 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2541: - -/* Line 1455 of yacc.c */ -#line 14554 "/home/buildbot/git/sql/sql_yacc.yy" + case 2547: +#line 14564 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex = Lex; LEX_USER *user; @@ -42178,7 +38885,7 @@ user->user= current_user; set_var_default_role *var= (new (thd->mem_root) set_var_default_role(user, - (yyvsp[(3) - (3)].lex_user)->user)); + (yyvsp[0].lex_user)->user)); if (var == NULL) MYSQL_YYABORT; lex->var_list.push_back(var, thd->mem_root); @@ -42186,16 +38893,15 @@ if (lex->sphead) lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT; } +#line 38897 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2542: - -/* Line 1455 of yacc.c */ -#line 14571 "/home/buildbot/git/sql/sql_yacc.yy" + case 2548: +#line 14581 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex = Lex; set_var_default_role *var= (new (thd->mem_root) - set_var_default_role((yyvsp[(5) - (5)].lex_user), (yyvsp[(3) - (5)].lex_user)->user)); + set_var_default_role((yyvsp[0].lex_user), (yyvsp[-2].lex_user)->user)); if (var == NULL) MYSQL_YYABORT; lex->var_list.push_back(var, thd->mem_root); @@ -42203,25 +38909,23 @@ if (lex->sphead) lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT; } +#line 38913 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2543: - -/* Line 1455 of yacc.c */ -#line 14583 "/home/buildbot/git/sql/sql_yacc.yy" + case 2549: +#line 14593 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex = Lex; - set_var_role *var= new (thd->mem_root) set_var_role((yyvsp[(2) - (2)].lex_str)); + set_var_role *var= new (thd->mem_root) set_var_role((yyvsp[0].lex_str)); if (var == NULL) MYSQL_YYABORT; lex->var_list.push_back(var, thd->mem_root); } +#line 38925 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2544: - -/* Line 1455 of yacc.c */ -#line 14591 "/home/buildbot/git/sql/sql_yacc.yy" + case 2550: +#line 14601 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex = Lex; set_var_password *var= (new (thd->mem_root) @@ -42233,20 +38937,19 @@ if (lex->sphead) lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT; } +#line 38941 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2545: - -/* Line 1455 of yacc.c */ -#line 14607 "/home/buildbot/git/sql/sql_yacc.yy" + case 2551: +#line 14617 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { sp_pcontext *spc= thd->lex->spcont; sp_variable *spv; /* Best effort lookup for system variable. */ - if (!spc || !(spv = spc->find_variable((yyvsp[(1) - (1)].lex_str), false))) + if (!spc || !(spv = spc->find_variable((yyvsp[0].lex_str), false))) { - struct sys_var_with_base tmp= {NULL, (yyvsp[(1) - (1)].lex_str)}; + struct sys_var_with_base tmp= {NULL, (yyvsp[0].lex_str)}; /* Not an SP local variable */ if (find_sys_var_null_base(thd, &tmp)) @@ -42261,27 +38964,26 @@ Will depend on the context of the SET statement. */ (yyval.variable).var= NULL; - (yyval.variable).base_name= (yyvsp[(1) - (1)].lex_str); + (yyval.variable).base_name= (yyvsp[0].lex_str); } } +#line 38971 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2546: - -/* Line 1455 of yacc.c */ -#line 14633 "/home/buildbot/git/sql/sql_yacc.yy" + case 2552: +#line 14643 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - if (check_reserved_words(&(yyvsp[(1) - (3)].lex_str))) + if (check_reserved_words(&(yyvsp[-2].lex_str))) { my_parse_error(thd, ER_SYNTAX_ERROR); MYSQL_YYABORT; } if (lex->sphead && lex->sphead->m_type == TYPE_ENUM_TRIGGER && - (!my_strcasecmp(system_charset_info, (yyvsp[(1) - (3)].lex_str).str, "NEW") || - !my_strcasecmp(system_charset_info, (yyvsp[(1) - (3)].lex_str).str, "OLD"))) + (!my_strcasecmp(system_charset_info, (yyvsp[-2].lex_str).str, "NEW") || + !my_strcasecmp(system_charset_info, (yyvsp[-2].lex_str).str, "OLD"))) { - if ((yyvsp[(1) - (3)].lex_str).str[0]=='O' || (yyvsp[(1) - (3)].lex_str).str[0]=='o') + if ((yyvsp[-2].lex_str).str[0]=='O' || (yyvsp[-2].lex_str).str[0]=='o') my_yyabort_error((ER_TRG_CANT_CHANGE_ROW, MYF(0), "OLD", "")); if (lex->trg_chistics.event == TRG_EVENT_DELETE) { @@ -42293,44 +38995,42 @@ my_yyabort_error((ER_TRG_CANT_CHANGE_ROW, MYF(0), "NEW", "after ")); /* This special combination will denote field of NEW row */ (yyval.variable).var= trg_new_row_fake_var; - (yyval.variable).base_name= (yyvsp[(3) - (3)].lex_str); + (yyval.variable).base_name= (yyvsp[0].lex_str); } else { - sys_var *tmp=find_sys_var(thd, (yyvsp[(3) - (3)].lex_str).str, (yyvsp[(3) - (3)].lex_str).length); + sys_var *tmp=find_sys_var(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if (!tmp) MYSQL_YYABORT; if (!tmp->is_struct()) - my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), (yyvsp[(3) - (3)].lex_str).str); + my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), (yyvsp[0].lex_str).str); (yyval.variable).var= tmp; - (yyval.variable).base_name= (yyvsp[(1) - (3)].lex_str); + (yyval.variable).base_name= (yyvsp[-2].lex_str); } } +#line 39012 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2547: - -/* Line 1455 of yacc.c */ -#line 14670 "/home/buildbot/git/sql/sql_yacc.yy" + case 2553: +#line 14680 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - sys_var *tmp=find_sys_var(thd, (yyvsp[(3) - (3)].lex_str).str, (yyvsp[(3) - (3)].lex_str).length); + sys_var *tmp=find_sys_var(thd, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); if (!tmp) MYSQL_YYABORT; if (!tmp->is_struct()) - my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), (yyvsp[(3) - (3)].lex_str).str); + my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), (yyvsp[0].lex_str).str); (yyval.variable).var= tmp; (yyval.variable).base_name.str= (char*) "default"; (yyval.variable).base_name.length= 7; } +#line 39027 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2552: - -/* Line 1455 of yacc.c */ -#line 14691 "/home/buildbot/git/sql/sql_yacc.yy" + case 2558: +#line 14701 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - Item *item= new (thd->mem_root) Item_int(thd, (int32) (yyvsp[(1) - (1)].num)); + Item *item= new (thd->mem_root) Item_int(thd, (int32) (yyvsp[0].num)); if (item == NULL) MYSQL_YYABORT; set_var *var= (new (thd->mem_root) @@ -42342,15 +39042,14 @@ MYSQL_YYABORT; lex->var_list.push_back(var, thd->mem_root); } +#line 39046 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2553: - -/* Line 1455 of yacc.c */ -#line 14709 "/home/buildbot/git/sql/sql_yacc.yy" + case 2559: +#line 14719 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - Item *item= new (thd->mem_root) Item_int(thd, (int32) (yyvsp[(3) - (3)].tx_isolation)); + Item *item= new (thd->mem_root) Item_int(thd, (int32) (yyvsp[0].tx_isolation)); if (item == NULL) MYSQL_YYABORT; set_var *var= (new (thd->mem_root) @@ -42362,54 +39061,47 @@ MYSQL_YYABORT; lex->var_list.push_back(var, thd->mem_root); } +#line 39065 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2554: - -/* Line 1455 of yacc.c */ -#line 14726 "/home/buildbot/git/sql/sql_yacc.yy" + case 2560: +#line 14736 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= true; } +#line 39071 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2555: - -/* Line 1455 of yacc.c */ -#line 14727 "/home/buildbot/git/sql/sql_yacc.yy" + case 2561: +#line 14737 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= false; } +#line 39077 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2556: - -/* Line 1455 of yacc.c */ -#line 14731 "/home/buildbot/git/sql/sql_yacc.yy" + case 2562: +#line 14741 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.tx_isolation)= ISO_READ_UNCOMMITTED; } +#line 39083 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2557: - -/* Line 1455 of yacc.c */ -#line 14732 "/home/buildbot/git/sql/sql_yacc.yy" + case 2563: +#line 14742 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.tx_isolation)= ISO_READ_COMMITTED; } +#line 39089 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2558: - -/* Line 1455 of yacc.c */ -#line 14733 "/home/buildbot/git/sql/sql_yacc.yy" + case 2564: +#line 14743 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.tx_isolation)= ISO_REPEATABLE_READ; } +#line 39095 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2559: - -/* Line 1455 of yacc.c */ -#line 14734 "/home/buildbot/git/sql/sql_yacc.yy" + case 2565: +#line 14744 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.tx_isolation)= ISO_SERIALIZABLE; } +#line 39101 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2560: - -/* Line 1455 of yacc.c */ -#line 14739 "/home/buildbot/git/sql/sql_yacc.yy" + case 2566: +#line 14749 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; sp_pcontext *spc= lex->spcont; @@ -42423,92 +39115,82 @@ lex->definer->plugin= empty_lex_str; lex->definer->auth= empty_lex_str; } +#line 39119 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2561: - -/* Line 1455 of yacc.c */ -#line 14752 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->definer= (yyvsp[(2) - (3)].lex_user); } + case 2567: +#line 14762 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->definer= (yyvsp[-1].lex_user); } +#line 39125 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2562: - -/* Line 1455 of yacc.c */ -#line 14756 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->definer->pwhash= (yyvsp[(1) - (1)].lex_str);} + case 2568: +#line 14766 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->definer->pwhash= (yyvsp[0].lex_str);} +#line 39131 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2563: - -/* Line 1455 of yacc.c */ -#line 14757 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->definer->pwtext= (yyvsp[(3) - (4)].lex_str); } + case 2569: +#line 14767 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->definer->pwtext= (yyvsp[-1].lex_str); } +#line 39137 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2564: - -/* Line 1455 of yacc.c */ -#line 14759 "/home/buildbot/git/sql/sql_yacc.yy" + case 2570: +#line 14769 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->definer->pwtext= (yyvsp[(3) - (4)].lex_str); + Lex->definer->pwtext= (yyvsp[-1].lex_str); Lex->definer->pwhash.str= Item_func_password::alloc(thd, - (yyvsp[(3) - (4)].lex_str).str, (yyvsp[(3) - (4)].lex_str).length, Item_func_password::OLD); + (yyvsp[-1].lex_str).str, (yyvsp[-1].lex_str).length, Item_func_password::OLD); Lex->definer->pwhash.length= SCRAMBLED_PASSWORD_CHAR_LENGTH_323; } +#line 39148 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2565: - -/* Line 1455 of yacc.c */ -#line 14768 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.item)=(yyvsp[(1) - (1)].item); } + case 2571: +#line 14778 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.item)=(yyvsp[0].item); } +#line 39154 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2566: - -/* Line 1455 of yacc.c */ -#line 14769 "/home/buildbot/git/sql/sql_yacc.yy" + case 2572: +#line 14779 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)=0; } +#line 39160 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2567: - -/* Line 1455 of yacc.c */ -#line 14771 "/home/buildbot/git/sql/sql_yacc.yy" + case 2573: +#line 14781 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)=new (thd->mem_root) Item_string_sys(thd, "ON", 2); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 39170 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2568: - -/* Line 1455 of yacc.c */ -#line 14777 "/home/buildbot/git/sql/sql_yacc.yy" + case 2574: +#line 14787 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)=new (thd->mem_root) Item_string_sys(thd, "ALL", 3); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 39180 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2569: - -/* Line 1455 of yacc.c */ -#line 14783 "/home/buildbot/git/sql/sql_yacc.yy" + case 2575: +#line 14793 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.item)=new (thd->mem_root) Item_string_sys(thd, "binary", 6); if ((yyval.item) == NULL) MYSQL_YYABORT; } +#line 39190 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2570: - -/* Line 1455 of yacc.c */ -#line 14794 "/home/buildbot/git/sql/sql_yacc.yy" + case 2576: +#line 14804 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -42516,37 +39198,33 @@ my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "LOCK")); lex->sql_command= SQLCOM_LOCK_TABLES; } +#line 39202 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2571: - -/* Line 1455 of yacc.c */ -#line 14802 "/home/buildbot/git/sql/sql_yacc.yy" + case 2577: +#line 14812 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39208 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2572: - -/* Line 1455 of yacc.c */ -#line 14806 "/home/buildbot/git/sql/sql_yacc.yy" + case 2578: +#line 14816 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 39214 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2573: - -/* Line 1455 of yacc.c */ -#line 14807 "/home/buildbot/git/sql/sql_yacc.yy" + case 2579: +#line 14817 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { } +#line 39220 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2576: - -/* Line 1455 of yacc.c */ -#line 14817 "/home/buildbot/git/sql/sql_yacc.yy" + case 2582: +#line 14827 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - thr_lock_type lock_type= (thr_lock_type) (yyvsp[(3) - (3)].num); + thr_lock_type lock_type= (thr_lock_type) (yyvsp[0].num); bool lock_for_write= (lock_type >= TL_WRITE_ALLOW_WRITE); - if (!Select->add_table_to_list(thd, (yyvsp[(1) - (3)].table), (yyvsp[(2) - (3)].lex_str_ptr), 0, lock_type, + if (!Select->add_table_to_list(thd, (yyvsp[-2].table), (yyvsp[-1].lex_str_ptr), 0, lock_type, (lock_for_write ? lock_type == TL_WRITE_CONCURRENT_INSERT ? MDL_SHARED_WRITE : @@ -42554,49 +39232,43 @@ MDL_SHARED_READ))) MYSQL_YYABORT; } +#line 39236 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2577: - -/* Line 1455 of yacc.c */ -#line 14831 "/home/buildbot/git/sql/sql_yacc.yy" + case 2583: +#line 14841 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= TL_READ_NO_INSERT; } +#line 39242 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2578: - -/* Line 1455 of yacc.c */ -#line 14832 "/home/buildbot/git/sql/sql_yacc.yy" + case 2584: +#line 14842 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= TL_WRITE_DEFAULT; } +#line 39248 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2579: - -/* Line 1455 of yacc.c */ -#line 14834 "/home/buildbot/git/sql/sql_yacc.yy" + case 2585: +#line 14844 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= (Lex->sphead ? TL_WRITE_DEFAULT : TL_WRITE_CONCURRENT_INSERT); } +#line 39256 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2580: - -/* Line 1455 of yacc.c */ -#line 14838 "/home/buildbot/git/sql/sql_yacc.yy" + case 2586: +#line 14848 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= TL_WRITE_LOW_PRIORITY; } +#line 39262 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2581: - -/* Line 1455 of yacc.c */ -#line 14839 "/home/buildbot/git/sql/sql_yacc.yy" + case 2587: +#line 14849 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= TL_READ; } +#line 39268 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2582: - -/* Line 1455 of yacc.c */ -#line 14844 "/home/buildbot/git/sql/sql_yacc.yy" + case 2588: +#line 14854 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; @@ -42604,47 +39276,43 @@ my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "UNLOCK")); lex->sql_command= SQLCOM_UNLOCK_TABLES; } +#line 39280 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2583: - -/* Line 1455 of yacc.c */ -#line 14852 "/home/buildbot/git/sql/sql_yacc.yy" + case 2589: +#line 14862 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39286 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2584: - -/* Line 1455 of yacc.c */ -#line 14861 "/home/buildbot/git/sql/sql_yacc.yy" + case 2590: +#line 14871 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->sphead) my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "HANDLER")); lex->sql_command = SQLCOM_HA_OPEN; - if (!lex->current_select->add_table_to_list(thd, (yyvsp[(2) - (4)].table), (yyvsp[(4) - (4)].lex_str_ptr), 0)) + if (!lex->current_select->add_table_to_list(thd, (yyvsp[-2].table), (yyvsp[0].lex_str_ptr), 0)) MYSQL_YYABORT; } +#line 39299 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2585: - -/* Line 1455 of yacc.c */ -#line 14870 "/home/buildbot/git/sql/sql_yacc.yy" + case 2591: +#line 14880 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->sphead) my_yyabort_error((ER_SP_BADSTATEMENT, MYF(0), "HANDLER")); lex->sql_command = SQLCOM_HA_CLOSE; - if (!lex->current_select->add_table_to_list(thd, (yyvsp[(2) - (3)].table), 0, 0)) + if (!lex->current_select->add_table_to_list(thd, (yyvsp[-1].table), 0, 0)) MYSQL_YYABORT; } +#line 39312 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2586: - -/* Line 1455 of yacc.c */ -#line 14879 "/home/buildbot/git/sql/sql_yacc.yy" + case 2592: +#line 14889 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (lex->sphead) @@ -42658,15 +39326,14 @@ lex->current_select->select_limit= one; lex->current_select->offset_limit= 0; lex->limit_rows_examined= 0; - if (!lex->current_select->add_table_to_list(thd, (yyvsp[(2) - (3)].table), 0, 0)) + if (!lex->current_select->add_table_to_list(thd, (yyvsp[-1].table), 0, 0)) MYSQL_YYABORT; } +#line 39333 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2587: - -/* Line 1455 of yacc.c */ -#line 14896 "/home/buildbot/git/sql/sql_yacc.yy" + case 2593: +#line 14906 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->expr_allows_subselect= TRUE; /* Stored functions are not supported for HANDLER READ. */ @@ -42677,141 +39344,123 @@ MYSQL_YYABORT; } } +#line 39348 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2588: - -/* Line 1455 of yacc.c */ -#line 14909 "/home/buildbot/git/sql/sql_yacc.yy" + case 2594: +#line 14919 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ident= null_lex_str; } +#line 39354 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2589: - -/* Line 1455 of yacc.c */ -#line 14910 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->ident= (yyvsp[(1) - (2)].lex_str); } + case 2595: +#line 14920 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->ident= (yyvsp[-1].lex_str); } +#line 39360 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2590: - -/* Line 1455 of yacc.c */ -#line 14914 "/home/buildbot/git/sql/sql_yacc.yy" + case 2596: +#line 14924 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ha_read_mode = RFIRST; } +#line 39366 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2591: - -/* Line 1455 of yacc.c */ -#line 14915 "/home/buildbot/git/sql/sql_yacc.yy" + case 2597: +#line 14925 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ha_read_mode = RNEXT; } +#line 39372 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2592: - -/* Line 1455 of yacc.c */ -#line 14919 "/home/buildbot/git/sql/sql_yacc.yy" + case 2598: +#line 14929 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ha_read_mode = RFIRST; } +#line 39378 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2593: - -/* Line 1455 of yacc.c */ -#line 14920 "/home/buildbot/git/sql/sql_yacc.yy" + case 2599: +#line 14930 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ha_read_mode = RNEXT; } +#line 39384 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2594: - -/* Line 1455 of yacc.c */ -#line 14921 "/home/buildbot/git/sql/sql_yacc.yy" + case 2600: +#line 14931 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ha_read_mode = RPREV; } +#line 39390 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2595: - -/* Line 1455 of yacc.c */ -#line 14922 "/home/buildbot/git/sql/sql_yacc.yy" + case 2601: +#line 14932 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ha_read_mode = RLAST; } +#line 39396 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2596: - -/* Line 1455 of yacc.c */ -#line 14924 "/home/buildbot/git/sql/sql_yacc.yy" + case 2602: +#line 14934 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->ha_read_mode = RKEY; - lex->ha_rkey_mode=(yyvsp[(1) - (1)].ha_rkey_mode); + lex->ha_rkey_mode=(yyvsp[0].ha_rkey_mode); if (!(lex->insert_list= new (thd->mem_root) List_item)) MYSQL_YYABORT; } +#line 39408 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2597: - -/* Line 1455 of yacc.c */ -#line 14932 "/home/buildbot/git/sql/sql_yacc.yy" + case 2603: +#line 14942 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39414 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2598: - -/* Line 1455 of yacc.c */ -#line 14936 "/home/buildbot/git/sql/sql_yacc.yy" + case 2604: +#line 14946 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ha_rkey_mode)=HA_READ_KEY_EXACT; } +#line 39420 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2599: - -/* Line 1455 of yacc.c */ -#line 14937 "/home/buildbot/git/sql/sql_yacc.yy" + case 2605: +#line 14947 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ha_rkey_mode)=HA_READ_KEY_OR_NEXT; } +#line 39426 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2600: - -/* Line 1455 of yacc.c */ -#line 14938 "/home/buildbot/git/sql/sql_yacc.yy" + case 2606: +#line 14948 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ha_rkey_mode)=HA_READ_KEY_OR_PREV; } +#line 39432 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2601: - -/* Line 1455 of yacc.c */ -#line 14939 "/home/buildbot/git/sql/sql_yacc.yy" + case 2607: +#line 14949 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ha_rkey_mode)=HA_READ_AFTER_KEY; } +#line 39438 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2602: - -/* Line 1455 of yacc.c */ -#line 14940 "/home/buildbot/git/sql/sql_yacc.yy" + case 2608: +#line 14950 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.ha_rkey_mode)=HA_READ_BEFORE_KEY; } +#line 39444 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2603: - -/* Line 1455 of yacc.c */ -#line 14947 "/home/buildbot/git/sql/sql_yacc.yy" + case 2609: +#line 14957 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39450 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2604: - -/* Line 1455 of yacc.c */ -#line 14952 "/home/buildbot/git/sql/sql_yacc.yy" + case 2610: +#line 14962 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_REVOKE; lex->type= 0; } +#line 39460 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2605: - -/* Line 1455 of yacc.c */ -#line 14958 "/home/buildbot/git/sql/sql_yacc.yy" + case 2611: +#line 14968 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->columns.elements) @@ -42822,12 +39471,11 @@ lex->sql_command= SQLCOM_REVOKE; lex->type= TYPE_ENUM_FUNCTION; } +#line 39475 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2606: - -/* Line 1455 of yacc.c */ -#line 14969 "/home/buildbot/git/sql/sql_yacc.yy" + case 2612: +#line 14979 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->columns.elements) @@ -42838,76 +39486,68 @@ lex->sql_command= SQLCOM_REVOKE; lex->type= TYPE_ENUM_PROCEDURE; } +#line 39490 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2607: - -/* Line 1455 of yacc.c */ -#line 14980 "/home/buildbot/git/sql/sql_yacc.yy" + case 2613: +#line 14990 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_REVOKE_ALL; } +#line 39498 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2608: - -/* Line 1455 of yacc.c */ -#line 14984 "/home/buildbot/git/sql/sql_yacc.yy" + case 2614: +#line 14994 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->users_list.push_front ((yyvsp[(3) - (5)].lex_user)); + lex->users_list.push_front ((yyvsp[-2].lex_user)); lex->sql_command= SQLCOM_REVOKE; lex->type= TYPE_ENUM_PROXY; } +#line 39509 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2609: - -/* Line 1455 of yacc.c */ -#line 14991 "/home/buildbot/git/sql/sql_yacc.yy" + case 2615: +#line 15001 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_REVOKE_ROLE; - if (Lex->users_list.push_front((yyvsp[(1) - (3)].lex_user), thd->mem_root)) + if (Lex->users_list.push_front((yyvsp[-2].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 39519 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2610: - -/* Line 1455 of yacc.c */ -#line 15000 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->with_admin_option= true; (yyval.lex_user)= (yyvsp[(4) - (4)].lex_user); } + case 2616: +#line 15010 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->with_admin_option= true; (yyval.lex_user)= (yyvsp[0].lex_user); } +#line 39525 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2611: - -/* Line 1455 of yacc.c */ -#line 15002 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->with_admin_option= false; (yyval.lex_user)= (yyvsp[(1) - (1)].lex_user); } + case 2617: +#line 15012 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->with_admin_option= false; (yyval.lex_user)= (yyvsp[0].lex_user); } +#line 39531 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2612: - -/* Line 1455 of yacc.c */ -#line 15007 "/home/buildbot/git/sql/sql_yacc.yy" + case 2618: +#line 15017 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39537 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2613: - -/* Line 1455 of yacc.c */ -#line 15013 "/home/buildbot/git/sql/sql_yacc.yy" + case 2619: +#line 15023 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_GRANT; lex->type= 0; } +#line 39547 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2614: - -/* Line 1455 of yacc.c */ -#line 15020 "/home/buildbot/git/sql/sql_yacc.yy" + case 2620: +#line 15030 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->columns.elements) @@ -42918,12 +39558,11 @@ lex->sql_command= SQLCOM_GRANT; lex->type= TYPE_ENUM_FUNCTION; } +#line 39562 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2615: - -/* Line 1455 of yacc.c */ -#line 15032 "/home/buildbot/git/sql/sql_yacc.yy" + case 2621: +#line 15042 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; if (lex->columns.elements) @@ -42934,107 +39573,97 @@ lex->sql_command= SQLCOM_GRANT; lex->type= TYPE_ENUM_PROCEDURE; } +#line 39577 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2616: - -/* Line 1455 of yacc.c */ -#line 15043 "/home/buildbot/git/sql/sql_yacc.yy" + case 2622: +#line 15053 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->users_list.push_front ((yyvsp[(3) - (6)].lex_user)); + lex->users_list.push_front ((yyvsp[-3].lex_user)); lex->sql_command= SQLCOM_GRANT; lex->type= TYPE_ENUM_PROXY; } +#line 39588 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2617: - -/* Line 1455 of yacc.c */ -#line 15050 "/home/buildbot/git/sql/sql_yacc.yy" + case 2623: +#line 15060 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_GRANT_ROLE; /* The first role is the one that is granted */ - if (Lex->users_list.push_front((yyvsp[(1) - (4)].lex_user), thd->mem_root)) + if (Lex->users_list.push_front((yyvsp[-3].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 39600 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2618: - -/* Line 1455 of yacc.c */ -#line 15061 "/home/buildbot/git/sql/sql_yacc.yy" + case 2624: +#line 15071 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->definer = 0; } +#line 39606 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2619: - -/* Line 1455 of yacc.c */ -#line 15062 "/home/buildbot/git/sql/sql_yacc.yy" - { Lex->definer = (yyvsp[(3) - (3)].lex_user); } + case 2625: +#line 15072 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { Lex->definer = (yyvsp[0].lex_user); } +#line 39612 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2620: - -/* Line 1455 of yacc.c */ -#line 15065 "/home/buildbot/git/sql/sql_yacc.yy" + case 2626: +#line 15075 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->with_admin_option= false; } +#line 39618 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2621: - -/* Line 1455 of yacc.c */ -#line 15066 "/home/buildbot/git/sql/sql_yacc.yy" + case 2627: +#line 15076 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->with_admin_option= true; } +#line 39624 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2622: - -/* Line 1455 of yacc.c */ -#line 15070 "/home/buildbot/git/sql/sql_yacc.yy" + case 2628: +#line 15080 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(1) - (1)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 39633 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2623: - -/* Line 1455 of yacc.c */ -#line 15075 "/home/buildbot/git/sql/sql_yacc.yy" + case 2629: +#line 15085 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 39642 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2624: - -/* Line 1455 of yacc.c */ -#line 15083 "/home/buildbot/git/sql/sql_yacc.yy" + case 2630: +#line 15093 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (!((yyval.lex_user)=(LEX_USER*) thd->calloc(sizeof(LEX_USER)))) MYSQL_YYABORT; (yyval.lex_user)->user= current_role; (yyval.lex_user)->reset_auth(); } +#line 39653 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2625: - -/* Line 1455 of yacc.c */ -#line 15093 "/home/buildbot/git/sql/sql_yacc.yy" + case 2631: +#line 15103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { CHARSET_INFO *cs= system_charset_info; /* trim end spaces (as they'll be lost in mysql.user anyway) */ - (yyvsp[(1) - (1)].lex_str).length= cs->cset->lengthsp(cs, (yyvsp[(1) - (1)].lex_str).str, (yyvsp[(1) - (1)].lex_str).length); - (yyvsp[(1) - (1)].lex_str).str[(yyvsp[(1) - (1)].lex_str).length] = '\0'; - if ((yyvsp[(1) - (1)].lex_str).length == 0) + (yyvsp[0].lex_str).length= cs->cset->lengthsp(cs, (yyvsp[0].lex_str).str, (yyvsp[0].lex_str).length); + (yyvsp[0].lex_str).str[(yyvsp[0].lex_str).length] = '\0'; + if ((yyvsp[0].lex_str).length == 0) my_yyabort_error((ER_INVALID_ROLE, MYF(0), "")); if (!((yyval.lex_user)=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) MYSQL_YYABORT; - (yyval.lex_user)->user = (yyvsp[(1) - (1)].lex_str); + (yyval.lex_user)->user = (yyvsp[0].lex_str); (yyval.lex_user)->host= empty_lex_str; (yyval.lex_user)->reset_auth(); @@ -43043,317 +39672,275 @@ cs, 0)) MYSQL_YYABORT; } +#line 39676 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2629: - -/* Line 1455 of yacc.c */ -#line 15120 "/home/buildbot/git/sql/sql_yacc.yy" + case 2635: +#line 15130 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39682 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2630: - -/* Line 1455 of yacc.c */ -#line 15122 "/home/buildbot/git/sql/sql_yacc.yy" + case 2636: +#line 15132 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->all_privileges= 1; Lex->grant= GLOBAL_ACLS; } +#line 39691 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2635: - -/* Line 1455 of yacc.c */ -#line 15140 "/home/buildbot/git/sql/sql_yacc.yy" + case 2641: +#line 15150 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->which_columns = SELECT_ACL;} +#line 39697 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2636: - -/* Line 1455 of yacc.c */ -#line 15141 "/home/buildbot/git/sql/sql_yacc.yy" + case 2642: +#line 15151 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39703 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2637: - -/* Line 1455 of yacc.c */ -#line 15143 "/home/buildbot/git/sql/sql_yacc.yy" + case 2643: +#line 15153 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->which_columns = INSERT_ACL;} +#line 39709 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2638: - -/* Line 1455 of yacc.c */ -#line 15144 "/home/buildbot/git/sql/sql_yacc.yy" + case 2644: +#line 15154 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39715 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2639: - -/* Line 1455 of yacc.c */ -#line 15146 "/home/buildbot/git/sql/sql_yacc.yy" + case 2645: +#line 15156 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->which_columns = UPDATE_ACL; } +#line 39721 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2640: - -/* Line 1455 of yacc.c */ -#line 15147 "/home/buildbot/git/sql/sql_yacc.yy" + case 2646: +#line 15157 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39727 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2641: - -/* Line 1455 of yacc.c */ -#line 15149 "/home/buildbot/git/sql/sql_yacc.yy" + case 2647: +#line 15159 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->which_columns = REFERENCES_ACL;} +#line 39733 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2642: - -/* Line 1455 of yacc.c */ -#line 15150 "/home/buildbot/git/sql/sql_yacc.yy" + case 2648: +#line 15160 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39739 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2643: - -/* Line 1455 of yacc.c */ -#line 15151 "/home/buildbot/git/sql/sql_yacc.yy" + case 2649: +#line 15161 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= DELETE_ACL;} +#line 39745 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2644: - -/* Line 1455 of yacc.c */ -#line 15152 "/home/buildbot/git/sql/sql_yacc.yy" + case 2650: +#line 15162 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39751 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2645: - -/* Line 1455 of yacc.c */ -#line 15153 "/home/buildbot/git/sql/sql_yacc.yy" + case 2651: +#line 15163 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= INDEX_ACL;} +#line 39757 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2646: - -/* Line 1455 of yacc.c */ -#line 15154 "/home/buildbot/git/sql/sql_yacc.yy" + case 2652: +#line 15164 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= ALTER_ACL;} +#line 39763 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2647: - -/* Line 1455 of yacc.c */ -#line 15155 "/home/buildbot/git/sql/sql_yacc.yy" + case 2653: +#line 15165 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= CREATE_ACL;} +#line 39769 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2648: - -/* Line 1455 of yacc.c */ -#line 15156 "/home/buildbot/git/sql/sql_yacc.yy" + case 2654: +#line 15166 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= DROP_ACL;} +#line 39775 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2649: - -/* Line 1455 of yacc.c */ -#line 15157 "/home/buildbot/git/sql/sql_yacc.yy" + case 2655: +#line 15167 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= EXECUTE_ACL;} +#line 39781 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2650: - -/* Line 1455 of yacc.c */ -#line 15158 "/home/buildbot/git/sql/sql_yacc.yy" + case 2656: +#line 15168 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= RELOAD_ACL;} +#line 39787 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2651: - -/* Line 1455 of yacc.c */ -#line 15159 "/home/buildbot/git/sql/sql_yacc.yy" + case 2657: +#line 15169 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= SHUTDOWN_ACL;} +#line 39793 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2652: - -/* Line 1455 of yacc.c */ -#line 15160 "/home/buildbot/git/sql/sql_yacc.yy" + case 2658: +#line 15170 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= PROCESS_ACL;} +#line 39799 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2653: - -/* Line 1455 of yacc.c */ -#line 15161 "/home/buildbot/git/sql/sql_yacc.yy" + case 2659: +#line 15171 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= FILE_ACL;} +#line 39805 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2654: - -/* Line 1455 of yacc.c */ -#line 15162 "/home/buildbot/git/sql/sql_yacc.yy" + case 2660: +#line 15172 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= GRANT_ACL;} +#line 39811 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2655: - -/* Line 1455 of yacc.c */ -#line 15163 "/home/buildbot/git/sql/sql_yacc.yy" + case 2661: +#line 15173 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= SHOW_DB_ACL;} +#line 39817 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2656: - -/* Line 1455 of yacc.c */ -#line 15164 "/home/buildbot/git/sql/sql_yacc.yy" + case 2662: +#line 15174 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= SUPER_ACL;} +#line 39823 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2657: - -/* Line 1455 of yacc.c */ -#line 15165 "/home/buildbot/git/sql/sql_yacc.yy" + case 2663: +#line 15175 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= CREATE_TMP_ACL;} +#line 39829 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2658: - -/* Line 1455 of yacc.c */ -#line 15166 "/home/buildbot/git/sql/sql_yacc.yy" + case 2664: +#line 15176 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= LOCK_TABLES_ACL; } +#line 39835 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2659: - -/* Line 1455 of yacc.c */ -#line 15167 "/home/buildbot/git/sql/sql_yacc.yy" + case 2665: +#line 15177 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= REPL_SLAVE_ACL; } +#line 39841 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2660: - -/* Line 1455 of yacc.c */ -#line 15168 "/home/buildbot/git/sql/sql_yacc.yy" + case 2666: +#line 15178 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= REPL_CLIENT_ACL; } +#line 39847 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2661: - -/* Line 1455 of yacc.c */ -#line 15169 "/home/buildbot/git/sql/sql_yacc.yy" + case 2667: +#line 15179 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= CREATE_VIEW_ACL; } +#line 39853 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2662: - -/* Line 1455 of yacc.c */ -#line 15170 "/home/buildbot/git/sql/sql_yacc.yy" + case 2668: +#line 15180 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= SHOW_VIEW_ACL; } +#line 39859 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2663: - -/* Line 1455 of yacc.c */ -#line 15171 "/home/buildbot/git/sql/sql_yacc.yy" + case 2669: +#line 15181 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= CREATE_PROC_ACL; } +#line 39865 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2664: - -/* Line 1455 of yacc.c */ -#line 15172 "/home/buildbot/git/sql/sql_yacc.yy" + case 2670: +#line 15182 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= ALTER_PROC_ACL; } +#line 39871 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2665: - -/* Line 1455 of yacc.c */ -#line 15173 "/home/buildbot/git/sql/sql_yacc.yy" + case 2671: +#line 15183 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= CREATE_USER_ACL; } +#line 39877 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2666: - -/* Line 1455 of yacc.c */ -#line 15174 "/home/buildbot/git/sql/sql_yacc.yy" + case 2672: +#line 15184 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= EVENT_ACL;} +#line 39883 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2667: - -/* Line 1455 of yacc.c */ -#line 15175 "/home/buildbot/git/sql/sql_yacc.yy" + case 2673: +#line 15185 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= TRIGGER_ACL; } +#line 39889 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2668: - -/* Line 1455 of yacc.c */ -#line 15176 "/home/buildbot/git/sql/sql_yacc.yy" + case 2674: +#line 15186 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= CREATE_TABLESPACE_ACL; } +#line 39895 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2669: - -/* Line 1455 of yacc.c */ -#line 15180 "/home/buildbot/git/sql/sql_yacc.yy" + case 2675: +#line 15190 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39901 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2670: - -/* Line 1455 of yacc.c */ -#line 15181 "/home/buildbot/git/sql/sql_yacc.yy" + case 2676: +#line 15191 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 39907 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2673: - -/* Line 1455 of yacc.c */ -#line 15191 "/home/buildbot/git/sql/sql_yacc.yy" + case 2679: +#line 15201 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (lex->x509_subject) my_yyabort_error((ER_DUP_ARGUMENT, MYF(0), "SUBJECT")); - lex->x509_subject=(yyvsp[(2) - (2)].lex_str).str; + lex->x509_subject=(yyvsp[0].lex_str).str; } +#line 39918 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2674: - -/* Line 1455 of yacc.c */ -#line 15198 "/home/buildbot/git/sql/sql_yacc.yy" + case 2680: +#line 15208 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (lex->x509_issuer) my_yyabort_error((ER_DUP_ARGUMENT, MYF(0), "ISSUER")); - lex->x509_issuer=(yyvsp[(2) - (2)].lex_str).str; + lex->x509_issuer=(yyvsp[0].lex_str).str; } +#line 39929 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2675: - -/* Line 1455 of yacc.c */ -#line 15205 "/home/buildbot/git/sql/sql_yacc.yy" + case 2681: +#line 15215 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (lex->ssl_cipher) my_yyabort_error((ER_DUP_ARGUMENT, MYF(0), "CIPHER")); - lex->ssl_cipher=(yyvsp[(2) - (2)].lex_str).str; + lex->ssl_cipher=(yyvsp[0].lex_str).str; } +#line 39940 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2676: - -/* Line 1455 of yacc.c */ -#line 15215 "/home/buildbot/git/sql/sql_yacc.yy" + case 2682: +#line 15225 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; size_t dummy; @@ -43364,26 +39951,24 @@ else if (lex->columns.elements) my_yyabort_error((ER_ILLEGAL_GRANT_FOR_TABLE, MYF(0))); } +#line 39955 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2677: - -/* Line 1455 of yacc.c */ -#line 15226 "/home/buildbot/git/sql/sql_yacc.yy" + case 2683: +#line 15236 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; - lex->current_select->db = (yyvsp[(1) - (3)].lex_str).str; + lex->current_select->db = (yyvsp[-2].lex_str).str; if (lex->grant == GLOBAL_ACLS) lex->grant = DB_ACLS & ~GRANT_ACL; else if (lex->columns.elements) my_yyabort_error((ER_ILLEGAL_GRANT_FOR_TABLE, MYF(0))); } +#line 39968 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2678: - -/* Line 1455 of yacc.c */ -#line 15235 "/home/buildbot/git/sql/sql_yacc.yy" + case 2684: +#line 15245 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->current_select->db = NULL; @@ -43392,149 +39977,135 @@ else if (lex->columns.elements) my_yyabort_error((ER_ILLEGAL_GRANT_FOR_TABLE, MYF(0))); } +#line 39981 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2679: - -/* Line 1455 of yacc.c */ -#line 15244 "/home/buildbot/git/sql/sql_yacc.yy" + case 2685: +#line 15254 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - if (!lex->current_select->add_table_to_list(thd, (yyvsp[(1) - (1)].table),NULL, + if (!lex->current_select->add_table_to_list(thd, (yyvsp[0].table),NULL, TL_OPTION_UPDATING)) MYSQL_YYABORT; if (lex->grant == GLOBAL_ACLS) lex->grant = TABLE_ACLS & ~GRANT_ACL; } +#line 39994 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2680: - -/* Line 1455 of yacc.c */ -#line 15256 "/home/buildbot/git/sql/sql_yacc.yy" + case 2686: +#line 15266 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(1) - (1)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 40003 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2681: - -/* Line 1455 of yacc.c */ -#line 15261 "/home/buildbot/git/sql/sql_yacc.yy" + case 2687: +#line 15271 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 40012 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2682: - -/* Line 1455 of yacc.c */ -#line 15269 "/home/buildbot/git/sql/sql_yacc.yy" + case 2688: +#line 15279 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(1) - (1)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 40021 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2683: - -/* Line 1455 of yacc.c */ -#line 15274 "/home/buildbot/git/sql/sql_yacc.yy" + case 2689: +#line 15284 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 40030 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2684: - -/* Line 1455 of yacc.c */ -#line 15282 "/home/buildbot/git/sql/sql_yacc.yy" + case 2690: +#line 15292 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(1) - (1)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 40039 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2685: - -/* Line 1455 of yacc.c */ -#line 15287 "/home/buildbot/git/sql/sql_yacc.yy" + case 2691: +#line 15297 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->users_list.push_back((yyvsp[(3) - (3)].lex_user), thd->mem_root)) + if (Lex->users_list.push_back((yyvsp[0].lex_user), thd->mem_root)) MYSQL_YYABORT; } +#line 40048 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2690: - -/* Line 1455 of yacc.c */ -#line 15298 "/home/buildbot/git/sql/sql_yacc.yy" + case 2696: +#line 15308 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.lex_user)= (yyvsp[(1) - (4)].lex_user); - (yyvsp[(1) - (4)].lex_user)->pwtext= (yyvsp[(4) - (4)].lex_str); + (yyval.lex_user)= (yyvsp[-3].lex_user); + (yyvsp[-3].lex_user)->pwtext= (yyvsp[0].lex_str); if (Lex->sql_command == SQLCOM_REVOKE) MYSQL_YYABORT; } +#line 40059 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2691: - -/* Line 1455 of yacc.c */ -#line 15305 "/home/buildbot/git/sql/sql_yacc.yy" + case 2697: +#line 15315 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.lex_user)= (yyvsp[(1) - (5)].lex_user); - (yyvsp[(1) - (5)].lex_user)->pwhash= (yyvsp[(5) - (5)].lex_str); + (yyval.lex_user)= (yyvsp[-4].lex_user); + (yyvsp[-4].lex_user)->pwhash= (yyvsp[0].lex_str); } +#line 40068 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2692: - -/* Line 1455 of yacc.c */ -#line 15310 "/home/buildbot/git/sql/sql_yacc.yy" + case 2698: +#line 15320 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.lex_user)= (yyvsp[(1) - (4)].lex_user); - (yyvsp[(1) - (4)].lex_user)->plugin= (yyvsp[(4) - (4)].lex_str); - (yyvsp[(1) - (4)].lex_user)->auth= empty_lex_str; + (yyval.lex_user)= (yyvsp[-3].lex_user); + (yyvsp[-3].lex_user)->plugin= (yyvsp[0].lex_str); + (yyvsp[-3].lex_user)->auth= empty_lex_str; } +#line 40078 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2693: - -/* Line 1455 of yacc.c */ -#line 15316 "/home/buildbot/git/sql/sql_yacc.yy" + case 2699: +#line 15326 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.lex_user)= (yyvsp[(1) - (6)].lex_user); - (yyvsp[(1) - (6)].lex_user)->plugin= (yyvsp[(4) - (6)].lex_str); - (yyvsp[(1) - (6)].lex_user)->auth= (yyvsp[(6) - (6)].lex_str); + (yyval.lex_user)= (yyvsp[-5].lex_user); + (yyvsp[-5].lex_user)->plugin= (yyvsp[-2].lex_str); + (yyvsp[-5].lex_user)->auth= (yyvsp[0].lex_str); } +#line 40088 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2694: - -/* Line 1455 of yacc.c */ -#line 15322 "/home/buildbot/git/sql/sql_yacc.yy" - { (yyval.lex_user)= (yyvsp[(1) - (1)].lex_user); } + case 2700: +#line 15332 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ + { (yyval.lex_user)= (yyvsp[0].lex_user); } +#line 40094 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2695: - -/* Line 1455 of yacc.c */ -#line 15327 "/home/buildbot/git/sql/sql_yacc.yy" + case 2701: +#line 15337 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->grant |= lex->which_columns; } +#line 40103 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2699: - -/* Line 1455 of yacc.c */ -#line 15341 "/home/buildbot/git/sql/sql_yacc.yy" + case 2705: +#line 15351 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - String *new_str= new (thd->mem_root) String((const char*) (yyvsp[(1) - (1)].lex_str).str,(yyvsp[(1) - (1)].lex_str).length,system_charset_info); + String *new_str= new (thd->mem_root) String((const char*) (yyvsp[0].lex_str).str,(yyvsp[0].lex_str).length,system_charset_info); if (new_str == NULL) MYSQL_YYABORT; List_iterator iter(Lex->columns); @@ -43558,336 +40129,298 @@ lex->columns.push_back(col, thd->mem_root); } } +#line 40133 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2701: - -/* Line 1455 of yacc.c */ -#line 15371 "/home/buildbot/git/sql/sql_yacc.yy" + case 2707: +#line 15381 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ssl_type=SSL_TYPE_SPECIFIED; } +#line 40141 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2702: - -/* Line 1455 of yacc.c */ -#line 15375 "/home/buildbot/git/sql/sql_yacc.yy" + case 2708: +#line 15385 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ssl_type=SSL_TYPE_ANY; } +#line 40149 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2703: - -/* Line 1455 of yacc.c */ -#line 15379 "/home/buildbot/git/sql/sql_yacc.yy" + case 2709: +#line 15389 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ssl_type=SSL_TYPE_X509; } +#line 40157 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2704: - -/* Line 1455 of yacc.c */ -#line 15383 "/home/buildbot/git/sql/sql_yacc.yy" + case 2710: +#line 15393 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->ssl_type=SSL_TYPE_NONE; } +#line 40165 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2705: - -/* Line 1455 of yacc.c */ -#line 15389 "/home/buildbot/git/sql/sql_yacc.yy" + case 2711: +#line 15399 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40171 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2707: - -/* Line 1455 of yacc.c */ -#line 15394 "/home/buildbot/git/sql/sql_yacc.yy" + case 2713: +#line 15404 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40177 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2708: - -/* Line 1455 of yacc.c */ -#line 15395 "/home/buildbot/git/sql/sql_yacc.yy" + case 2714: +#line 15405 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= GRANT_ACL;} +#line 40183 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2709: - -/* Line 1455 of yacc.c */ -#line 15399 "/home/buildbot/git/sql/sql_yacc.yy" + case 2715: +#line 15409 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40189 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2710: - -/* Line 1455 of yacc.c */ -#line 15400 "/home/buildbot/git/sql/sql_yacc.yy" + case 2716: +#line 15410 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40195 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2711: - -/* Line 1455 of yacc.c */ -#line 15404 "/home/buildbot/git/sql/sql_yacc.yy" + case 2717: +#line 15414 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->grant |= GRANT_ACL;} +#line 40201 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2712: - -/* Line 1455 of yacc.c */ -#line 15406 "/home/buildbot/git/sql/sql_yacc.yy" + case 2718: +#line 15416 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->mqh.questions=(yyvsp[(2) - (2)].ulong_num); + lex->mqh.questions=(yyvsp[0].ulong_num); lex->mqh.specified_limits|= USER_RESOURCES::QUERIES_PER_HOUR; } +#line 40211 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2713: - -/* Line 1455 of yacc.c */ -#line 15412 "/home/buildbot/git/sql/sql_yacc.yy" + case 2719: +#line 15422 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->mqh.updates=(yyvsp[(2) - (2)].ulong_num); + lex->mqh.updates=(yyvsp[0].ulong_num); lex->mqh.specified_limits|= USER_RESOURCES::UPDATES_PER_HOUR; } +#line 40221 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2714: - -/* Line 1455 of yacc.c */ -#line 15418 "/home/buildbot/git/sql/sql_yacc.yy" + case 2720: +#line 15428 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->mqh.conn_per_hour= (yyvsp[(2) - (2)].ulong_num); + lex->mqh.conn_per_hour= (yyvsp[0].ulong_num); lex->mqh.specified_limits|= USER_RESOURCES::CONNECTIONS_PER_HOUR; } +#line 40231 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2715: - -/* Line 1455 of yacc.c */ -#line 15424 "/home/buildbot/git/sql/sql_yacc.yy" + case 2721: +#line 15434 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->mqh.user_conn= (yyvsp[(2) - (2)].num); + lex->mqh.user_conn= (yyvsp[0].num); lex->mqh.specified_limits|= USER_RESOURCES::USER_CONNECTIONS; } +#line 40241 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2716: - -/* Line 1455 of yacc.c */ -#line 15430 "/home/buildbot/git/sql/sql_yacc.yy" + case 2722: +#line 15440 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; - lex->mqh.max_statement_time= (yyvsp[(2) - (2)].item_num)->val_real(); + lex->mqh.max_statement_time= (yyvsp[0].item_num)->val_real(); lex->mqh.specified_limits|= USER_RESOURCES::MAX_STATEMENT_TIME; } +#line 40251 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2717: - -/* Line 1455 of yacc.c */ -#line 15439 "/home/buildbot/git/sql/sql_yacc.yy" + case 2723: +#line 15449 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command = SQLCOM_BEGIN; lex->start_transaction_opt= 0; } +#line 40261 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2718: - -/* Line 1455 of yacc.c */ -#line 15444 "/home/buildbot/git/sql/sql_yacc.yy" + case 2724: +#line 15454 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40267 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2719: - -/* Line 1455 of yacc.c */ -#line 15449 "/home/buildbot/git/sql/sql_yacc.yy" + case 2725: +#line 15459 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command= SQLCOM_COMPOUND; Lex->sphead->set_stmt_end(thd); Lex->sphead->restore_thd_mem_root(thd); } +#line 40277 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2720: - -/* Line 1455 of yacc.c */ -#line 15457 "/home/buildbot/git/sql/sql_yacc.yy" + case 2726: +#line 15467 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 40283 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2721: - -/* Line 1455 of yacc.c */ -#line 15458 "/home/buildbot/git/sql/sql_yacc.yy" + case 2727: +#line 15468 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 40289 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2722: - -/* Line 1455 of yacc.c */ -#line 15462 "/home/buildbot/git/sql/sql_yacc.yy" + case 2728: +#line 15472 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40295 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2723: - -/* Line 1455 of yacc.c */ -#line 15463 "/home/buildbot/git/sql/sql_yacc.yy" + case 2729: +#line 15473 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40301 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2724: - -/* Line 1455 of yacc.c */ -#line 15468 "/home/buildbot/git/sql/sql_yacc.yy" + case 2730: +#line 15478 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_yes_no_unk)= TVL_UNKNOWN; } +#line 40307 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2725: - -/* Line 1455 of yacc.c */ -#line 15469 "/home/buildbot/git/sql/sql_yacc.yy" + case 2731: +#line 15479 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_yes_no_unk)= TVL_NO; } +#line 40313 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2726: - -/* Line 1455 of yacc.c */ -#line 15470 "/home/buildbot/git/sql/sql_yacc.yy" + case 2732: +#line 15480 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_yes_no_unk)= TVL_YES; } +#line 40319 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2727: - -/* Line 1455 of yacc.c */ -#line 15475 "/home/buildbot/git/sql/sql_yacc.yy" + case 2733: +#line 15485 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_yes_no_unk)= TVL_UNKNOWN; } +#line 40325 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2728: - -/* Line 1455 of yacc.c */ -#line 15476 "/home/buildbot/git/sql/sql_yacc.yy" + case 2734: +#line 15486 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_yes_no_unk)= TVL_YES; } +#line 40331 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2729: - -/* Line 1455 of yacc.c */ -#line 15477 "/home/buildbot/git/sql/sql_yacc.yy" + case 2735: +#line 15487 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.m_yes_no_unk)= TVL_NO; } +#line 40337 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2730: - -/* Line 1455 of yacc.c */ -#line 15481 "/home/buildbot/git/sql/sql_yacc.yy" + case 2736: +#line 15491 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40343 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2731: - -/* Line 1455 of yacc.c */ -#line 15482 "/home/buildbot/git/sql/sql_yacc.yy" + case 2737: +#line 15492 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40349 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2732: - -/* Line 1455 of yacc.c */ -#line 15487 "/home/buildbot/git/sql/sql_yacc.yy" + case 2738: +#line 15497 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_COMMIT; /* Don't allow AND CHAIN RELEASE. */ - MYSQL_YYABORT_UNLESS((yyvsp[(3) - (4)].m_yes_no_unk) != TVL_YES || (yyvsp[(4) - (4)].m_yes_no_unk) != TVL_YES); - lex->tx_chain= (yyvsp[(3) - (4)].m_yes_no_unk); - lex->tx_release= (yyvsp[(4) - (4)].m_yes_no_unk); + MYSQL_YYABORT_UNLESS((yyvsp[-1].m_yes_no_unk) != TVL_YES || (yyvsp[0].m_yes_no_unk) != TVL_YES); + lex->tx_chain= (yyvsp[-1].m_yes_no_unk); + lex->tx_release= (yyvsp[0].m_yes_no_unk); } +#line 40362 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2733: - -/* Line 1455 of yacc.c */ -#line 15499 "/home/buildbot/git/sql/sql_yacc.yy" + case 2739: +#line 15509 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_ROLLBACK; /* Don't allow AND CHAIN RELEASE. */ - MYSQL_YYABORT_UNLESS((yyvsp[(3) - (4)].m_yes_no_unk) != TVL_YES || (yyvsp[(4) - (4)].m_yes_no_unk) != TVL_YES); - lex->tx_chain= (yyvsp[(3) - (4)].m_yes_no_unk); - lex->tx_release= (yyvsp[(4) - (4)].m_yes_no_unk); + MYSQL_YYABORT_UNLESS((yyvsp[-1].m_yes_no_unk) != TVL_YES || (yyvsp[0].m_yes_no_unk) != TVL_YES); + lex->tx_chain= (yyvsp[-1].m_yes_no_unk); + lex->tx_release= (yyvsp[0].m_yes_no_unk); } +#line 40375 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2734: - -/* Line 1455 of yacc.c */ -#line 15509 "/home/buildbot/git/sql/sql_yacc.yy" + case 2740: +#line 15519 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_ROLLBACK_TO_SAVEPOINT; - lex->ident= (yyvsp[(5) - (5)].lex_str); + lex->ident= (yyvsp[0].lex_str); } +#line 40385 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2735: - -/* Line 1455 of yacc.c */ -#line 15518 "/home/buildbot/git/sql/sql_yacc.yy" + case 2741: +#line 15528 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_SAVEPOINT; - lex->ident= (yyvsp[(2) - (2)].lex_str); + lex->ident= (yyvsp[0].lex_str); } +#line 40395 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2736: - -/* Line 1455 of yacc.c */ -#line 15527 "/home/buildbot/git/sql/sql_yacc.yy" + case 2742: +#line 15537 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; lex->sql_command= SQLCOM_RELEASE_SAVEPOINT; - lex->ident= (yyvsp[(3) - (3)].lex_str); + lex->ident= (yyvsp[0].lex_str); } +#line 40405 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2737: - -/* Line 1455 of yacc.c */ -#line 15540 "/home/buildbot/git/sql/sql_yacc.yy" + case 2743: +#line 15550 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40411 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2739: - -/* Line 1455 of yacc.c */ -#line 15546 "/home/buildbot/git/sql/sql_yacc.yy" + case 2745: +#line 15556 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_select_to_union_list(Lex, (bool)(yyvsp[(2) - (2)].num), TRUE)) + if (add_select_to_union_list(Lex, (bool)(yyvsp[0].num), TRUE)) MYSQL_YYABORT; } +#line 40420 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2740: - -/* Line 1455 of yacc.c */ -#line 15551 "/home/buildbot/git/sql/sql_yacc.yy" + case 2746: +#line 15561 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* Remove from the name resolution context stack the context of the @@ -43895,33 +40428,29 @@ */ Lex->pop_context(); } +#line 40432 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2742: - -/* Line 1455 of yacc.c */ -#line 15562 "/home/buildbot/git/sql/sql_yacc.yy" + case 2748: +#line 15572 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 40438 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2743: - -/* Line 1455 of yacc.c */ -#line 15566 "/home/buildbot/git/sql/sql_yacc.yy" + case 2749: +#line 15576 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 0; } +#line 40444 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2744: - -/* Line 1455 of yacc.c */ -#line 15567 "/home/buildbot/git/sql/sql_yacc.yy" + case 2750: +#line 15577 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)= 1; } +#line 40450 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2745: - -/* Line 1455 of yacc.c */ -#line 15571 "/home/buildbot/git/sql/sql_yacc.yy" + case 2751: +#line 15581 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); @@ -43935,90 +40464,80 @@ } thd->where= "global ORDER clause"; } +#line 40468 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2746: - -/* Line 1455 of yacc.c */ -#line 15585 "/home/buildbot/git/sql/sql_yacc.yy" + case 2752: +#line 15595 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { thd->lex->current_select->no_table_names_allowed= 0; thd->where= ""; } +#line 40477 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2749: - -/* Line 1455 of yacc.c */ -#line 15597 "/home/buildbot/git/sql/sql_yacc.yy" + case 2755: +#line 15607 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)=1; } +#line 40483 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2750: - -/* Line 1455 of yacc.c */ -#line 15598 "/home/buildbot/git/sql/sql_yacc.yy" + case 2756: +#line 15608 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)=1; } +#line 40489 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2751: - -/* Line 1455 of yacc.c */ -#line 15599 "/home/buildbot/git/sql/sql_yacc.yy" + case 2757: +#line 15609 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.num)=0; } +#line 40495 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2752: - -/* Line 1455 of yacc.c */ -#line 15605 "/home/buildbot/git/sql/sql_yacc.yy" + case 2758: +#line 15615 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.select_lex)= Lex->current_select->master_unit()->first_select(); } +#line 40503 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2753: - -/* Line 1455 of yacc.c */ -#line 15610 "/home/buildbot/git/sql/sql_yacc.yy" + case 2759: +#line 15620 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { (yyval.select_lex)= Lex->current_select->master_unit()->first_select(); } +#line 40511 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2755: - -/* Line 1455 of yacc.c */ -#line 15619 "/home/buildbot/git/sql/sql_yacc.yy" + case 2761: +#line 15629 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (add_select_to_union_list(Lex, (bool)(yyvsp[(3) - (3)].num), FALSE)) + if (add_select_to_union_list(Lex, (bool)(yyvsp[0].num), FALSE)) MYSQL_YYABORT; } +#line 40520 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2756: - -/* Line 1455 of yacc.c */ -#line 15624 "/home/buildbot/git/sql/sql_yacc.yy" + case 2762: +#line 15634 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->pop_context(); - (yyval.select_lex)= (yyvsp[(1) - (5)].select_lex); + (yyval.select_lex)= (yyvsp[-4].select_lex); } +#line 40529 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2757: - -/* Line 1455 of yacc.c */ -#line 15633 "/home/buildbot/git/sql/sql_yacc.yy" + case 2763: +#line 15643 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - (yyval.select_lex)= (yyvsp[(2) - (3)].select_lex); + (yyval.select_lex)= (yyvsp[-1].select_lex); } +#line 40537 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2758: - -/* Line 1455 of yacc.c */ -#line 15639 "/home/buildbot/git/sql/sql_yacc.yy" + case 2764: +#line 15649 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; if (!lex->expr_allows_subselect || @@ -44037,12 +40556,11 @@ if (mysql_new_select(Lex, 1)) MYSQL_YYABORT; } +#line 40560 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2759: - -/* Line 1455 of yacc.c */ -#line 15660 "/home/buildbot/git/sql/sql_yacc.yy" + case 2765: +#line 15670 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex=Lex; @@ -44065,19 +40583,17 @@ lex->current_select->select_n_having_items+= child->select_n_having_items; } +#line 40587 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2764: - -/* Line 1455 of yacc.c */ -#line 15695 "/home/buildbot/git/sql/sql_yacc.yy" + case 2770: +#line 15705 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->options|= SELECT_STRAIGHT_JOIN; } +#line 40593 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2765: - -/* Line 1455 of yacc.c */ -#line 15697 "/home/buildbot/git/sql/sql_yacc.yy" + case 2771: +#line 15707 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (check_simple_select()) MYSQL_YYABORT; @@ -44085,83 +40601,73 @@ YYPS->m_mdl_type= MDL_SHARED_READ; Select->options|= SELECT_HIGH_PRIORITY; } +#line 40605 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2766: - -/* Line 1455 of yacc.c */ -#line 15704 "/home/buildbot/git/sql/sql_yacc.yy" + case 2772: +#line 15714 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->options|= SELECT_DISTINCT; } +#line 40611 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2767: - -/* Line 1455 of yacc.c */ -#line 15705 "/home/buildbot/git/sql/sql_yacc.yy" + case 2773: +#line 15715 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->options|= SELECT_SMALL_RESULT; } +#line 40617 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2768: - -/* Line 1455 of yacc.c */ -#line 15706 "/home/buildbot/git/sql/sql_yacc.yy" + case 2774: +#line 15716 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->options|= SELECT_BIG_RESULT; } +#line 40623 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2769: - -/* Line 1455 of yacc.c */ -#line 15708 "/home/buildbot/git/sql/sql_yacc.yy" + case 2775: +#line 15718 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (check_simple_select()) MYSQL_YYABORT; Select->options|= OPTION_BUFFER_RESULT; } +#line 40633 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2770: - -/* Line 1455 of yacc.c */ -#line 15714 "/home/buildbot/git/sql/sql_yacc.yy" + case 2776: +#line 15724 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { if (check_simple_select()) MYSQL_YYABORT; Select->options|= OPTION_FOUND_ROWS; } +#line 40643 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2771: - -/* Line 1455 of yacc.c */ -#line 15719 "/home/buildbot/git/sql/sql_yacc.yy" + case 2777: +#line 15729 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Select->options|= SELECT_ALL; } +#line 40649 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2772: - -/* Line 1455 of yacc.c */ -#line 15730 "/home/buildbot/git/sql/sql_yacc.yy" + case 2778: +#line 15740 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40655 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2773: - -/* Line 1455 of yacc.c */ -#line 15732 "/home/buildbot/git/sql/sql_yacc.yy" + case 2779: +#line 15742 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40661 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2774: - -/* Line 1455 of yacc.c */ -#line 15734 "/home/buildbot/git/sql/sql_yacc.yy" + case 2780: +#line 15744 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40667 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2788: - -/* Line 1455 of yacc.c */ -#line 15767 "/home/buildbot/git/sql/sql_yacc.yy" + case 2794: +#line 15777 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* We have to distinguish missing DEFINER-clause from case when @@ -44172,114 +40678,102 @@ */ thd->lex->definer= 0; } +#line 40682 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2789: - -/* Line 1455 of yacc.c */ -#line 15781 "/home/buildbot/git/sql/sql_yacc.yy" + case 2795: +#line 15791 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - Lex->definer= (yyvsp[(3) - (3)].lex_user); + Lex->definer= (yyvsp[0].lex_user); Lex->ssl_type= SSL_TYPE_NOT_SPECIFIED; Lex->ssl_cipher= Lex->x509_subject= Lex->x509_issuer= 0; bzero(&(Lex->mqh), sizeof(Lex->mqh)); } +#line 40693 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2790: - -/* Line 1455 of yacc.c */ -#line 15797 "/home/buildbot/git/sql/sql_yacc.yy" + case 2796: +#line 15807 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_algorithm= DTYPE_ALGORITHM_UNDEFINED; } +#line 40699 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2791: - -/* Line 1455 of yacc.c */ -#line 15799 "/home/buildbot/git/sql/sql_yacc.yy" + case 2797: +#line 15809 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_algorithm= VIEW_ALGORITHM_MERGE; } +#line 40705 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2792: - -/* Line 1455 of yacc.c */ -#line 15801 "/home/buildbot/git/sql/sql_yacc.yy" + case 2798: +#line 15811 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_algorithm= VIEW_ALGORITHM_TMPTABLE; } +#line 40711 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2793: - -/* Line 1455 of yacc.c */ -#line 15806 "/home/buildbot/git/sql/sql_yacc.yy" + case 2799: +#line 15816 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_suid= VIEW_SUID_DEFAULT; } +#line 40717 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2794: - -/* Line 1455 of yacc.c */ -#line 15808 "/home/buildbot/git/sql/sql_yacc.yy" + case 2800: +#line 15818 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_suid= VIEW_SUID_DEFINER; } +#line 40723 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2795: - -/* Line 1455 of yacc.c */ -#line 15810 "/home/buildbot/git/sql/sql_yacc.yy" + case 2801: +#line 15820 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_suid= VIEW_SUID_INVOKER; } +#line 40729 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2796: - -/* Line 1455 of yacc.c */ -#line 15815 "/home/buildbot/git/sql/sql_yacc.yy" + case 2802: +#line 15825 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; - if (lex->add_create_options_with_check((yyvsp[(3) - (4)].object_ddl_options))) + if (lex->add_create_options_with_check((yyvsp[-1].object_ddl_options))) MYSQL_YYABORT; lex->sql_command= SQLCOM_CREATE_VIEW; /* first table in list is target VIEW name */ - if (!lex->select_lex.add_table_to_list(thd, (yyvsp[(4) - (4)].table), NULL, + if (!lex->select_lex.add_table_to_list(thd, (yyvsp[0].table), NULL, TL_OPTION_UPDATING, TL_IGNORE, MDL_EXCLUSIVE)) MYSQL_YYABORT; lex->query_tables->open_strategy= TABLE_LIST::OPEN_STUB; } +#line 40747 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2798: - -/* Line 1455 of yacc.c */ -#line 15833 "/home/buildbot/git/sql/sql_yacc.yy" + case 2804: +#line 15843 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 40753 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2800: - -/* Line 1455 of yacc.c */ -#line 15839 "/home/buildbot/git/sql/sql_yacc.yy" + case 2806: +#line 15849 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->view_list.push_back((LEX_STRING*) - thd->memdup(&(yyvsp[(1) - (1)].lex_str), sizeof(LEX_STRING)), + thd->memdup(&(yyvsp[0].lex_str), sizeof(LEX_STRING)), thd->mem_root); } +#line 40763 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2801: - -/* Line 1455 of yacc.c */ -#line 15845 "/home/buildbot/git/sql/sql_yacc.yy" + case 2807: +#line 15855 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->view_list.push_back((LEX_STRING*) - thd->memdup(&(yyvsp[(3) - (3)].lex_str), sizeof(LEX_STRING)), + thd->memdup(&(yyvsp[0].lex_str), sizeof(LEX_STRING)), thd->mem_root); } +#line 40773 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2802: - -/* Line 1455 of yacc.c */ -#line 15853 "/home/buildbot/git/sql/sql_yacc.yy" + case 2808: +#line 15863 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->parsing_options.allows_variable= FALSE; @@ -44288,12 +40782,11 @@ lex->parsing_options.allows_derived= FALSE; lex->create_view_select.str= (char *) YYLIP->get_cpp_ptr(); } +#line 40786 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2803: - -/* Line 1455 of yacc.c */ -#line 15862 "/home/buildbot/git/sql/sql_yacc.yy" + case 2809: +#line 15872 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; uint len= YYLIP->get_cpp_ptr() - lex->create_view_select.str; @@ -44306,68 +40799,60 @@ lex->parsing_options.allows_select_procedure= TRUE; lex->parsing_options.allows_derived= TRUE; } +#line 40803 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2806: - -/* Line 1455 of yacc.c */ -#line 15883 "/home/buildbot/git/sql/sql_yacc.yy" + case 2812: +#line 15893 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_check= VIEW_CHECK_NONE; } +#line 40809 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2807: - -/* Line 1455 of yacc.c */ -#line 15885 "/home/buildbot/git/sql/sql_yacc.yy" + case 2813: +#line 15895 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_check= VIEW_CHECK_CASCADED; } +#line 40815 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2808: - -/* Line 1455 of yacc.c */ -#line 15887 "/home/buildbot/git/sql/sql_yacc.yy" + case 2814: +#line 15897 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_check= VIEW_CHECK_CASCADED; } +#line 40821 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2809: - -/* Line 1455 of yacc.c */ -#line 15889 "/home/buildbot/git/sql/sql_yacc.yy" + case 2815: +#line 15899 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->create_view_check= VIEW_CHECK_LOCAL; } +#line 40827 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2810: - -/* Line 1455 of yacc.c */ -#line 15902 "/home/buildbot/git/sql/sql_yacc.yy" + case 2816: +#line 15912 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->add_create_options_with_check((yyvsp[(3) - (3)].object_ddl_options))) + if (Lex->add_create_options_with_check((yyvsp[0].object_ddl_options))) MYSQL_YYABORT; } +#line 40836 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2811: - -/* Line 1455 of yacc.c */ -#line 15911 "/home/buildbot/git/sql/sql_yacc.yy" + case 2817: +#line 15921 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $10 */ Lex->raw_trg_on_table_name_begin= YYLIP->get_tok_start(); } +#line 40844 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2812: - -/* Line 1455 of yacc.c */ -#line 15917 "/home/buildbot/git/sql/sql_yacc.yy" + case 2818: +#line 15927 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $14 */ Lex->raw_trg_on_table_name_end= YYLIP->get_tok_start(); } +#line 40852 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2813: - -/* Line 1455 of yacc.c */ -#line 15922 "/home/buildbot/git/sql/sql_yacc.yy" + case 2819: +#line 15932 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $17 */ LEX *lex= thd->lex; Lex_input_stream *lip= YYLIP; @@ -44375,22 +40860,21 @@ if (lex->sphead) my_yyabort_error((ER_SP_NO_RECURSIVE_CREATE, MYF(0), "TRIGGER")); - lex->stmt_definition_begin= (yyvsp[(2) - (16)].simple_string); - lex->ident.str= (yyvsp[(9) - (16)].simple_string); - lex->ident.length= (yyvsp[(13) - (16)].simple_string) - (yyvsp[(9) - (16)].simple_string); - lex->spname= (yyvsp[(5) - (16)].spname); + lex->stmt_definition_begin= (yyvsp[-14].simple_string); + lex->ident.str= (yyvsp[-7].simple_string); + lex->ident.length= (yyvsp[-3].simple_string) - (yyvsp[-7].simple_string); + lex->spname= (yyvsp[-11].spname); - if (!make_sp_head(thd, (yyvsp[(5) - (16)].spname), TYPE_ENUM_TRIGGER)) + if (!make_sp_head(thd, (yyvsp[-11].spname), TYPE_ENUM_TRIGGER)) MYSQL_YYABORT; lex->sphead->set_body_start(thd, lip->get_cpp_ptr()); } +#line 40874 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2814: - -/* Line 1455 of yacc.c */ -#line 15940 "/home/buildbot/git/sql/sql_yacc.yy" + case 2820: +#line 15950 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $19 */ LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -44407,118 +40891,109 @@ sp_proc_stmt alternatives are not saving/restoring LEX, so lex->query_tables can be wiped out. */ - if (!lex->select_lex.add_table_to_list(thd, (yyvsp[(11) - (18)].table), + if (!lex->select_lex.add_table_to_list(thd, (yyvsp[-7].table), (LEX_STRING*) 0, TL_OPTION_UPDATING, TL_READ_NO_INSERT, MDL_SHARED_NO_WRITE)) MYSQL_YYABORT; } +#line 40902 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2815: - -/* Line 1455 of yacc.c */ -#line 15972 "/home/buildbot/git/sql/sql_yacc.yy" + case 2821: +#line 15982 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { thd->lex->udf.type= UDFTYPE_AGGREGATE; } +#line 40908 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2816: - -/* Line 1455 of yacc.c */ -#line 15973 "/home/buildbot/git/sql/sql_yacc.yy" + case 2822: +#line 15983 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { thd->lex->udf.type= UDFTYPE_FUNCTION; } +#line 40914 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2817: - -/* Line 1455 of yacc.c */ -#line 15979 "/home/buildbot/git/sql/sql_yacc.yy" + case 2823: +#line 15989 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; - if (lex->add_create_options_with_check((yyvsp[(2) - (7)].object_ddl_options))) + if (lex->add_create_options_with_check((yyvsp[-5].object_ddl_options))) MYSQL_YYABORT; - if (is_native_function(thd, & (yyvsp[(3) - (7)].lex_str))) - my_yyabort_error((ER_NATIVE_FCT_NAME_COLLISION, MYF(0), (yyvsp[(3) - (7)].lex_str).str)); + if (is_native_function(thd, & (yyvsp[-4].lex_str))) + my_yyabort_error((ER_NATIVE_FCT_NAME_COLLISION, MYF(0), (yyvsp[-4].lex_str).str)); lex->sql_command= SQLCOM_CREATE_FUNCTION; - lex->udf.name= (yyvsp[(3) - (7)].lex_str); - lex->udf.returns= (Item_result) (yyvsp[(5) - (7)].num); - lex->udf.dl= (yyvsp[(7) - (7)].lex_str).str; + lex->udf.name= (yyvsp[-4].lex_str); + lex->udf.returns= (Item_result) (yyvsp[-2].num); + lex->udf.dl= (yyvsp[0].lex_str).str; } +#line 40930 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2818: - -/* Line 1455 of yacc.c */ -#line 15997 "/home/buildbot/git/sql/sql_yacc.yy" + case 2824: +#line 16007 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $5 */ LEX *lex= Lex; Lex_input_stream *lip= YYLIP; const char* tmp_param_begin; - if (lex->add_create_options_with_check((yyvsp[(2) - (4)].object_ddl_options))) + if (lex->add_create_options_with_check((yyvsp[-2].object_ddl_options))) MYSQL_YYABORT; - lex->spname= (yyvsp[(3) - (4)].spname); + lex->spname= (yyvsp[-1].spname); if (lex->sphead) my_yyabort_error((ER_SP_NO_RECURSIVE_CREATE, MYF(0), "FUNCTION")); - if (!make_sp_head(thd, (yyvsp[(3) - (4)].spname), TYPE_ENUM_FUNCTION)) + if (!make_sp_head(thd, (yyvsp[-1].spname), TYPE_ENUM_FUNCTION)) MYSQL_YYABORT; tmp_param_begin= lip->get_cpp_tok_start(); tmp_param_begin++; lex->sphead->m_param_begin= tmp_param_begin; } +#line 40954 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2819: - -/* Line 1455 of yacc.c */ -#line 16018 "/home/buildbot/git/sql/sql_yacc.yy" + case 2825: +#line 16028 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $8 */ Lex->sphead->m_param_end= YYLIP->get_cpp_tok_start(); } +#line 40962 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2820: - -/* Line 1455 of yacc.c */ -#line 16022 "/home/buildbot/git/sql/sql_yacc.yy" + case 2826: +#line 16032 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $10 */ LEX *lex= Lex; lex->init_last_field(&lex->sphead->m_return_field_def, NULL, thd->variables.collation_database); } +#line 40972 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2821: - -/* Line 1455 of yacc.c */ -#line 16028 "/home/buildbot/git/sql/sql_yacc.yy" + case 2827: +#line 16038 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $12 */ - if (Lex->sphead->fill_field_definition(thd, Lex, (yyvsp[(11) - (11)].field_type), + if (Lex->sphead->fill_field_definition(thd, Lex, (yyvsp[0].field_type), Lex->last_field)) MYSQL_YYABORT; } +#line 40982 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2822: - -/* Line 1455 of yacc.c */ -#line 16034 "/home/buildbot/git/sql/sql_yacc.yy" + case 2828: +#line 16044 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { /* $14 */ LEX *lex= thd->lex; Lex_input_stream *lip= YYLIP; lex->sphead->set_body_start(thd, lip->get_cpp_tok_start()); } +#line 40993 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2823: - -/* Line 1455 of yacc.c */ -#line 16041 "/home/buildbot/git/sql/sql_yacc.yy" + case 2829: +#line 16051 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= thd->lex; sp_head *sp= lex->sphead; @@ -44567,29 +41042,27 @@ } sp->restore_thd_mem_root(thd); } +#line 41046 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2824: - -/* Line 1455 of yacc.c */ -#line 16093 "/home/buildbot/git/sql/sql_yacc.yy" + case 2830: +#line 16103 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - if (Lex->add_create_options_with_check((yyvsp[(2) - (3)].object_ddl_options))) + if (Lex->add_create_options_with_check((yyvsp[-1].object_ddl_options))) MYSQL_YYABORT; if (Lex->sphead) my_yyabort_error((ER_SP_NO_RECURSIVE_CREATE, MYF(0), "PROCEDURE")); - if (!make_sp_head(thd, (yyvsp[(3) - (3)].spname), TYPE_ENUM_PROCEDURE)) + if (!make_sp_head(thd, (yyvsp[0].spname), TYPE_ENUM_PROCEDURE)) MYSQL_YYABORT; - Lex->spname= (yyvsp[(3) - (3)].spname); + Lex->spname= (yyvsp[0].spname); } +#line 41062 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2825: - -/* Line 1455 of yacc.c */ -#line 16105 "/home/buildbot/git/sql/sql_yacc.yy" + case 2831: +#line 16115 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { const char* tmp_param_begin; @@ -44597,30 +41070,27 @@ tmp_param_begin++; Lex->sphead->m_param_begin= tmp_param_begin; } +#line 41074 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2826: - -/* Line 1455 of yacc.c */ -#line 16114 "/home/buildbot/git/sql/sql_yacc.yy" + case 2832: +#line 16124 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->m_param_end= YYLIP->get_cpp_tok_start(); } +#line 41082 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2827: - -/* Line 1455 of yacc.c */ -#line 16118 "/home/buildbot/git/sql/sql_yacc.yy" + case 2833: +#line 16128 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sphead->set_body_start(thd, YYLIP->get_cpp_tok_start()); } +#line 41090 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2828: - -/* Line 1455 of yacc.c */ -#line 16122 "/home/buildbot/git/sql/sql_yacc.yy" + case 2834: +#line 16132 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; sp_head *sp= lex->sphead; @@ -44629,237 +41099,222 @@ lex->sql_command= SQLCOM_CREATE_PROCEDURE; sp->restore_thd_mem_root(thd); } +#line 41103 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2829: - -/* Line 1455 of yacc.c */ -#line 16136 "/home/buildbot/git/sql/sql_yacc.yy" + case 2835: +#line 16146 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_XA_START; } +#line 41111 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2830: - -/* Line 1455 of yacc.c */ -#line 16140 "/home/buildbot/git/sql/sql_yacc.yy" + case 2836: +#line 16150 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_XA_END; } +#line 41119 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2831: - -/* Line 1455 of yacc.c */ -#line 16144 "/home/buildbot/git/sql/sql_yacc.yy" + case 2837: +#line 16154 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_XA_PREPARE; } +#line 41127 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2832: - -/* Line 1455 of yacc.c */ -#line 16148 "/home/buildbot/git/sql/sql_yacc.yy" + case 2838: +#line 16158 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_XA_COMMIT; } +#line 41135 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2833: - -/* Line 1455 of yacc.c */ -#line 16152 "/home/buildbot/git/sql/sql_yacc.yy" + case 2839: +#line 16162 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_XA_ROLLBACK; } +#line 41143 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2834: - -/* Line 1455 of yacc.c */ -#line 16156 "/home/buildbot/git/sql/sql_yacc.yy" + case 2840: +#line 16166 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->sql_command = SQLCOM_XA_RECOVER; } +#line 41151 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2835: - -/* Line 1455 of yacc.c */ -#line 16163 "/home/buildbot/git/sql/sql_yacc.yy" + case 2841: +#line 16173 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (1)].string)->length() <= MAXGTRIDSIZE); + MYSQL_YYABORT_UNLESS((yyvsp[0].string)->length() <= MAXGTRIDSIZE); if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) MYSQL_YYABORT; - Lex->xid->set(1L, (yyvsp[(1) - (1)].string)->ptr(), (yyvsp[(1) - (1)].string)->length(), 0, 0); + Lex->xid->set(1L, (yyvsp[0].string)->ptr(), (yyvsp[0].string)->length(), 0, 0); } +#line 41162 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2836: - -/* Line 1455 of yacc.c */ -#line 16170 "/home/buildbot/git/sql/sql_yacc.yy" + case 2842: +#line 16180 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (3)].string)->length() <= MAXGTRIDSIZE && (yyvsp[(3) - (3)].string)->length() <= MAXBQUALSIZE); + MYSQL_YYABORT_UNLESS((yyvsp[-2].string)->length() <= MAXGTRIDSIZE && (yyvsp[0].string)->length() <= MAXBQUALSIZE); if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) MYSQL_YYABORT; - Lex->xid->set(1L, (yyvsp[(1) - (3)].string)->ptr(), (yyvsp[(1) - (3)].string)->length(), (yyvsp[(3) - (3)].string)->ptr(), (yyvsp[(3) - (3)].string)->length()); + Lex->xid->set(1L, (yyvsp[-2].string)->ptr(), (yyvsp[-2].string)->length(), (yyvsp[0].string)->ptr(), (yyvsp[0].string)->length()); } +#line 41173 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2837: - -/* Line 1455 of yacc.c */ -#line 16177 "/home/buildbot/git/sql/sql_yacc.yy" + case 2843: +#line 16187 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { - MYSQL_YYABORT_UNLESS((yyvsp[(1) - (5)].string)->length() <= MAXGTRIDSIZE && (yyvsp[(3) - (5)].string)->length() <= MAXBQUALSIZE); + MYSQL_YYABORT_UNLESS((yyvsp[-4].string)->length() <= MAXGTRIDSIZE && (yyvsp[-2].string)->length() <= MAXBQUALSIZE); if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) MYSQL_YYABORT; - Lex->xid->set((yyvsp[(5) - (5)].ulong_num), (yyvsp[(1) - (5)].string)->ptr(), (yyvsp[(1) - (5)].string)->length(), (yyvsp[(3) - (5)].string)->ptr(), (yyvsp[(3) - (5)].string)->length()); + Lex->xid->set((yyvsp[0].ulong_num), (yyvsp[-4].string)->ptr(), (yyvsp[-4].string)->length(), (yyvsp[-2].string)->ptr(), (yyvsp[-2].string)->length()); } +#line 41184 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2838: - -/* Line 1455 of yacc.c */ -#line 16186 "/home/buildbot/git/sql/sql_yacc.yy" + case 2844: +#line 16196 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 41190 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2839: - -/* Line 1455 of yacc.c */ -#line 16187 "/home/buildbot/git/sql/sql_yacc.yy" + case 2845: +#line 16197 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 41196 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2840: - -/* Line 1455 of yacc.c */ -#line 16191 "/home/buildbot/git/sql/sql_yacc.yy" + case 2846: +#line 16201 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_NONE; } +#line 41202 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2841: - -/* Line 1455 of yacc.c */ -#line 16192 "/home/buildbot/git/sql/sql_yacc.yy" + case 2847: +#line 16202 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_JOIN; } +#line 41208 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2842: - -/* Line 1455 of yacc.c */ -#line 16193 "/home/buildbot/git/sql/sql_yacc.yy" + case 2848: +#line 16203 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_RESUME; } +#line 41214 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2843: - -/* Line 1455 of yacc.c */ -#line 16197 "/home/buildbot/git/sql/sql_yacc.yy" + case 2849: +#line 16207 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_NONE; } +#line 41220 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2844: - -/* Line 1455 of yacc.c */ -#line 16198 "/home/buildbot/git/sql/sql_yacc.yy" + case 2850: +#line 16208 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_ONE_PHASE; } +#line 41226 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2845: - -/* Line 1455 of yacc.c */ -#line 16203 "/home/buildbot/git/sql/sql_yacc.yy" + case 2851: +#line 16213 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_NONE; } +#line 41232 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2846: - -/* Line 1455 of yacc.c */ -#line 16205 "/home/buildbot/git/sql/sql_yacc.yy" + case 2852: +#line 16215 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_SUSPEND; } +#line 41238 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2848: - -/* Line 1455 of yacc.c */ -#line 16210 "/home/buildbot/git/sql/sql_yacc.yy" + case 2854: +#line 16220 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ {} +#line 41244 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2849: - -/* Line 1455 of yacc.c */ -#line 16211 "/home/buildbot/git/sql/sql_yacc.yy" + case 2855: +#line 16221 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { Lex->xa_opt=XA_FOR_MIGRATE; } +#line 41250 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2850: - -/* Line 1455 of yacc.c */ -#line 16216 "/home/buildbot/git/sql/sql_yacc.yy" + case 2856: +#line 16226 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_INSTALL_PLUGIN; - lex->comment= (yyvsp[(3) - (5)].lex_str); - lex->ident= (yyvsp[(5) - (5)].lex_str); + lex->comment= (yyvsp[-2].lex_str); + lex->ident= (yyvsp[0].lex_str); } +#line 41261 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2851: - -/* Line 1455 of yacc.c */ -#line 16223 "/home/buildbot/git/sql/sql_yacc.yy" + case 2857: +#line 16233 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_INSTALL_PLUGIN; lex->comment= null_lex_str; - lex->ident= (yyvsp[(3) - (3)].lex_str); + lex->ident= (yyvsp[0].lex_str); } +#line 41272 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2852: - -/* Line 1455 of yacc.c */ -#line 16233 "/home/buildbot/git/sql/sql_yacc.yy" + case 2858: +#line 16243 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_UNINSTALL_PLUGIN; - lex->comment= (yyvsp[(3) - (3)].lex_str); + lex->comment= (yyvsp[0].lex_str); } +#line 41282 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2853: - -/* Line 1455 of yacc.c */ -#line 16239 "/home/buildbot/git/sql/sql_yacc.yy" + case 2859: +#line 16249 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { LEX *lex= Lex; lex->sql_command= SQLCOM_UNINSTALL_PLUGIN; lex->comment= null_lex_str; - lex->ident= (yyvsp[(3) - (3)].lex_str); + lex->ident= (yyvsp[0].lex_str); } +#line 41293 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - case 2854: - -/* Line 1455 of yacc.c */ -#line 16250 "/home/buildbot/git/sql/sql_yacc.yy" + case 2860: +#line 16260 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1646 */ { YYERROR; } +#line 41301 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ break; - -/* Line 1455 of yacc.c */ -#line 44861 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" +#line 41305 "/home/buildbot/git/mkdist/sql/sql_yacc.cc" /* yacc.c:1646 */ default: break; } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); @@ -44868,7 +41323,7 @@ *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state + /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -44883,10 +41338,14 @@ goto yynewstate; -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { @@ -44894,37 +41353,36 @@ #if ! YYERROR_VERBOSE yyerror (thd, YY_("syntax error")); #else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) { - YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); - if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) - { - YYSIZE_T yyalloc = 2 * yysize; - if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) - yyalloc = YYSTACK_ALLOC_MAXIMUM; - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yyalloc); - if (yymsg) - yymsg_alloc = yyalloc; - else - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - } - } - - if (0 < yysize && yysize <= yymsg_alloc) - { - (void) yysyntax_error (yymsg, yystate, yychar); - yyerror (thd, yymsg); - } - else - { - yyerror (thd, YY_("syntax error")); - if (yysize != 0) - goto yyexhaustedlab; - } + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (thd, yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; } +# undef YYSYNTAX_ERROR #endif } @@ -44933,20 +41391,20 @@ if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval, thd); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval, thd); + yychar = YYEMPTY; + } } /* Else will try to reuse lookahead token after shifting the error @@ -44965,7 +41423,7 @@ if (/*CONSTCOND*/ 0) goto yyerrorlab; - /* Do not reclaim the symbols of the rule which action triggered + /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; @@ -44978,35 +41436,37 @@ | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; yydestruct ("Error: popping", - yystos[yystate], yyvsp, thd); + yystos[yystate], yyvsp, thd); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -45030,7 +41490,7 @@ yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -45042,16 +41502,21 @@ yyreturn: if (yychar != YYEMPTY) - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, thd); - /* Do not reclaim the symbols of the rule which action triggered + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, thd); + } + /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, thd); + yystos[*yyssp], yyvsp, thd); YYPOPSTACK (1); } #ifndef yyoverflow @@ -45062,9 +41527,5 @@ if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - /* Make sure YYID is used. */ - return YYID (yyresult); + return yyresult; } - - - diff -Nru mariadb-10.1-10.1.25/sql/sql_yacc.h mariadb-10.1-10.1.30/sql/sql_yacc.h --- mariadb-10.1-10.1.25/sql/sql_yacc.h 2017-07-01 18:20:31.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_yacc.h 2017-12-21 15:48:56.000000000 +0000 @@ -1,21 +1,19 @@ +/* A Bison parser, made by GNU Bison 3.0.2. */ -/* A Bison parser, made by GNU Bison 2.4.1. */ +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. -/* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -28,659 +26,668 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ +#ifndef YY_MYSQL_HOME_BUILDBOT_GIT_MKDIST_SQL_SQL_YACC_H_INCLUDED +# define YY_MYSQL_HOME_BUILDBOT_GIT_MKDIST_SQL_SQL_YACC_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int MYSQLdebug; +#endif -/* Tokens. */ +/* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - ABORT_SYM = 258, - ACCESSIBLE_SYM = 259, - ACTION = 260, - ADD = 261, - ADMIN_SYM = 262, - ADDDATE_SYM = 263, - AFTER_SYM = 264, - AGAINST = 265, - AGGREGATE_SYM = 266, - ALGORITHM_SYM = 267, - ALL = 268, - ALTER = 269, - ALWAYS_SYM = 270, - ANALYZE_SYM = 271, - AND_AND_SYM = 272, - AND_SYM = 273, - ANY_SYM = 274, - AS = 275, - ASC = 276, - ASCII_SYM = 277, - ASENSITIVE_SYM = 278, - AT_SYM = 279, - ATOMIC_SYM = 280, - AUTHORS_SYM = 281, - AUTOEXTEND_SIZE_SYM = 282, - AUTO_INC = 283, - AUTO_SYM = 284, - AVG_ROW_LENGTH = 285, - AVG_SYM = 286, - BACKUP_SYM = 287, - BEFORE_SYM = 288, - BEGIN_SYM = 289, - BETWEEN_SYM = 290, - BIGINT = 291, - BINARY = 292, - BINLOG_SYM = 293, - BIN_NUM = 294, - BIT_AND = 295, - BIT_OR = 296, - BIT_SYM = 297, - BIT_XOR = 298, - BLOB_SYM = 299, - BLOCK_SYM = 300, - BOOLEAN_SYM = 301, - BOOL_SYM = 302, - BOTH = 303, - BTREE_SYM = 304, - BY = 305, - BYTE_SYM = 306, - CACHE_SYM = 307, - CALL_SYM = 308, - CASCADE = 309, - CASCADED = 310, - CASE_SYM = 311, - CAST_SYM = 312, - CATALOG_NAME_SYM = 313, - CHAIN_SYM = 314, - CHANGE = 315, - CHANGED = 316, - CHARSET = 317, - CHAR_SYM = 318, - CHECKPOINT_SYM = 319, - CHECKSUM_SYM = 320, - CHECK_SYM = 321, - CIPHER_SYM = 322, - CLASS_ORIGIN_SYM = 323, - CLIENT_SYM = 324, - CLOSE_SYM = 325, - COALESCE = 326, - CODE_SYM = 327, - COLLATE_SYM = 328, - COLLATION_SYM = 329, - COLUMNS = 330, - COLUMN_ADD_SYM = 331, - COLUMN_CHECK_SYM = 332, - COLUMN_CREATE_SYM = 333, - COLUMN_DELETE_SYM = 334, - COLUMN_GET_SYM = 335, - COLUMN_SYM = 336, - COLUMN_NAME_SYM = 337, - COMMENT_SYM = 338, - COMMITTED_SYM = 339, - COMMIT_SYM = 340, - COMPACT_SYM = 341, - COMPLETION_SYM = 342, - COMPRESSED_SYM = 343, - CONCURRENT = 344, - CONDITION_SYM = 345, - CONNECTION_SYM = 346, - CONSISTENT_SYM = 347, - CONSTRAINT = 348, - CONSTRAINT_CATALOG_SYM = 349, - CONSTRAINT_NAME_SYM = 350, - CONSTRAINT_SCHEMA_SYM = 351, - CONTAINS_SYM = 352, - CONTEXT_SYM = 353, - CONTINUE_SYM = 354, - CONTRIBUTORS_SYM = 355, - CONVERT_SYM = 356, - COUNT_SYM = 357, - CPU_SYM = 358, - CREATE = 359, - CROSS = 360, - CUBE_SYM = 361, - CURDATE = 362, - CURRENT_SYM = 363, - CURRENT_USER = 364, - CURRENT_ROLE = 365, - CURRENT_POS_SYM = 366, - CURSOR_SYM = 367, - CURSOR_NAME_SYM = 368, - CURTIME = 369, - DATABASE = 370, - DATABASES = 371, - DATAFILE_SYM = 372, - DATA_SYM = 373, - DATETIME = 374, - DATE_ADD_INTERVAL = 375, - DATE_SUB_INTERVAL = 376, - DATE_SYM = 377, - DAY_HOUR_SYM = 378, - DAY_MICROSECOND_SYM = 379, - DAY_MINUTE_SYM = 380, - DAY_SECOND_SYM = 381, - DAY_SYM = 382, - DEALLOCATE_SYM = 383, - DECIMAL_NUM = 384, - DECIMAL_SYM = 385, - DECLARE_SYM = 386, - DEFAULT = 387, - DEFINER_SYM = 388, - DELAYED_SYM = 389, - DELAY_KEY_WRITE_SYM = 390, - DELETE_SYM = 391, - DESC = 392, - DESCRIBE = 393, - DES_KEY_FILE = 394, - DETERMINISTIC_SYM = 395, - DIAGNOSTICS_SYM = 396, - DIRECTORY_SYM = 397, - DISABLE_SYM = 398, - DISCARD = 399, - DISK_SYM = 400, - DISTINCT = 401, - DIV_SYM = 402, - DOUBLE_SYM = 403, - DO_DOMAIN_IDS_SYM = 404, - DO_SYM = 405, - DROP = 406, - DUAL_SYM = 407, - DUMPFILE = 408, - DUPLICATE_SYM = 409, - DYNAMIC_SYM = 410, - EACH_SYM = 411, - ELSE = 412, - ELSEIF_SYM = 413, - ENABLE_SYM = 414, - ENCLOSED = 415, - END = 416, - ENDS_SYM = 417, - END_OF_INPUT = 418, - ENGINES_SYM = 419, - ENGINE_SYM = 420, - ENUM = 421, - EQUAL_SYM = 422, - ERROR_SYM = 423, - ERRORS = 424, - ESCAPED = 425, - ESCAPE_SYM = 426, - EVENTS_SYM = 427, - EVENT_SYM = 428, - EVERY_SYM = 429, - EXCHANGE_SYM = 430, - EXAMINED_SYM = 431, - EXECUTE_SYM = 432, - EXISTS = 433, - EXIT_SYM = 434, - EXPANSION_SYM = 435, - EXPORT_SYM = 436, - EXTENDED_SYM = 437, - EXTENT_SIZE_SYM = 438, - EXTRACT_SYM = 439, - FALSE_SYM = 440, - FAST_SYM = 441, - FAULTS_SYM = 442, - FETCH_SYM = 443, - FILE_SYM = 444, - FIRST_SYM = 445, - FIXED_SYM = 446, - FLOAT_NUM = 447, - FLOAT_SYM = 448, - FLUSH_SYM = 449, - FORCE_SYM = 450, - FOREIGN = 451, - FOR_SYM = 452, - FORMAT_SYM = 453, - FOUND_SYM = 454, - FROM = 455, - FULL = 456, - FULLTEXT_SYM = 457, - FUNCTION_SYM = 458, - GE = 459, - GENERAL = 460, - GENERATED_SYM = 461, - GEOMETRYCOLLECTION = 462, - GEOMETRY_SYM = 463, - GET_FORMAT = 464, - GET_SYM = 465, - GLOBAL_SYM = 466, - GRANT = 467, - GRANTS = 468, - GROUP_SYM = 469, - GROUP_CONCAT_SYM = 470, - HANDLER_SYM = 471, - HARD_SYM = 472, - HASH_SYM = 473, - HAVING = 474, - HELP_SYM = 475, - HEX_NUM = 476, - HEX_STRING = 477, - HIGH_PRIORITY = 478, - HOST_SYM = 479, - HOSTS_SYM = 480, - HOUR_MICROSECOND_SYM = 481, - HOUR_MINUTE_SYM = 482, - HOUR_SECOND_SYM = 483, - HOUR_SYM = 484, - ID_SYM = 485, - IDENT = 486, - IDENTIFIED_SYM = 487, - IDENT_QUOTED = 488, - IF_SYM = 489, - IGNORE_DOMAIN_IDS_SYM = 490, - IGNORE_SYM = 491, - IGNORE_SERVER_IDS_SYM = 492, - IMPORT = 493, - INDEXES = 494, - INDEX_SYM = 495, - INFILE = 496, - INITIAL_SIZE_SYM = 497, - INNER_SYM = 498, - INOUT_SYM = 499, - INSENSITIVE_SYM = 500, - INSERT = 501, - INSERT_METHOD = 502, - INSTALL_SYM = 503, - INTERVAL_SYM = 504, - INTO = 505, - INT_SYM = 506, - INVOKER_SYM = 507, - IN_SYM = 508, - IO_SYM = 509, - IPC_SYM = 510, - IS = 511, - ISOLATION = 512, - ISSUER_SYM = 513, - ITERATE_SYM = 514, - JOIN_SYM = 515, - KEYS = 516, - KEY_BLOCK_SIZE = 517, - KEY_SYM = 518, - KILL_SYM = 519, - LANGUAGE_SYM = 520, - LAST_SYM = 521, - LAST_VALUE = 522, - LE = 523, - LEADING = 524, - LEAVES = 525, - LEAVE_SYM = 526, - LEFT = 527, - LESS_SYM = 528, - LEVEL_SYM = 529, - LEX_HOSTNAME = 530, - LIKE = 531, - LIMIT = 532, - LINEAR_SYM = 533, - LINES = 534, - LINESTRING = 535, - LIST_SYM = 536, - LOAD = 537, - LOCAL_SYM = 538, - LOCATOR_SYM = 539, - LOCKS_SYM = 540, - LOCK_SYM = 541, - LOGFILE_SYM = 542, - LOGS_SYM = 543, - LONGBLOB = 544, - LONGTEXT = 545, - LONG_NUM = 546, - LONG_SYM = 547, - LOOP_SYM = 548, - LOW_PRIORITY = 549, - MASTER_CONNECT_RETRY_SYM = 550, - MASTER_GTID_POS_SYM = 551, - MASTER_HOST_SYM = 552, - MASTER_LOG_FILE_SYM = 553, - MASTER_LOG_POS_SYM = 554, - MASTER_PASSWORD_SYM = 555, - MASTER_PORT_SYM = 556, - MASTER_SERVER_ID_SYM = 557, - MASTER_SSL_CAPATH_SYM = 558, - MASTER_SSL_CA_SYM = 559, - MASTER_SSL_CERT_SYM = 560, - MASTER_SSL_CIPHER_SYM = 561, - MASTER_SSL_CRL_SYM = 562, - MASTER_SSL_CRLPATH_SYM = 563, - MASTER_SSL_KEY_SYM = 564, - MASTER_SSL_SYM = 565, - MASTER_SSL_VERIFY_SERVER_CERT_SYM = 566, - MASTER_SYM = 567, - MASTER_USER_SYM = 568, - MASTER_USE_GTID_SYM = 569, - MASTER_HEARTBEAT_PERIOD_SYM = 570, - MATCH = 571, - MAX_CONNECTIONS_PER_HOUR = 572, - MAX_QUERIES_PER_HOUR = 573, - MAX_ROWS = 574, - MAX_SIZE_SYM = 575, - MAX_SYM = 576, - MAX_UPDATES_PER_HOUR = 577, - MAX_STATEMENT_TIME_SYM = 578, - MAX_USER_CONNECTIONS_SYM = 579, - MAX_VALUE_SYM = 580, - MEDIUMBLOB = 581, - MEDIUMINT = 582, - MEDIUMTEXT = 583, - MEDIUM_SYM = 584, - MEMORY_SYM = 585, - MERGE_SYM = 586, - MESSAGE_TEXT_SYM = 587, - MICROSECOND_SYM = 588, - MIGRATE_SYM = 589, - MINUTE_MICROSECOND_SYM = 590, - MINUTE_SECOND_SYM = 591, - MINUTE_SYM = 592, - MIN_ROWS = 593, - MIN_SYM = 594, - MODE_SYM = 595, - MODIFIES_SYM = 596, - MODIFY_SYM = 597, - MOD_SYM = 598, - MONTH_SYM = 599, - MULTILINESTRING = 600, - MULTIPOINT = 601, - MULTIPOLYGON = 602, - MUTEX_SYM = 603, - MYSQL_SYM = 604, - MYSQL_ERRNO_SYM = 605, - NAMES_SYM = 606, - NAME_SYM = 607, - NATIONAL_SYM = 608, - NATURAL = 609, - NCHAR_STRING = 610, - NCHAR_SYM = 611, - NE = 612, - NEG = 613, - NEW_SYM = 614, - NEXT_SYM = 615, - NODEGROUP_SYM = 616, - NONE_SYM = 617, - NOT2_SYM = 618, - NOT_SYM = 619, - NOW_SYM = 620, - NO_SYM = 621, - NO_WAIT_SYM = 622, - NO_WRITE_TO_BINLOG = 623, - NULL_SYM = 624, - NUM = 625, - NUMBER_SYM = 626, - NUMERIC_SYM = 627, - NVARCHAR_SYM = 628, - OFFSET_SYM = 629, - OLD_PASSWORD_SYM = 630, - ON = 631, - ONE_SYM = 632, - ONLY_SYM = 633, - ONLINE_SYM = 634, - OPEN_SYM = 635, - OPTIMIZE = 636, - OPTIONS_SYM = 637, - OPTION = 638, - OPTIONALLY = 639, - OR2_SYM = 640, - ORDER_SYM = 641, - OR_OR_SYM = 642, - OR_SYM = 643, - OUTER = 644, - OUTFILE = 645, - OUT_SYM = 646, - OWNER_SYM = 647, - PACK_KEYS_SYM = 648, - PAGE_SYM = 649, - PAGE_CHECKSUM_SYM = 650, - PARAM_MARKER = 651, - PARSER_SYM = 652, - PARSE_VCOL_EXPR_SYM = 653, - PARTIAL = 654, - PARTITION_SYM = 655, - PARTITIONS_SYM = 656, - PARTITIONING_SYM = 657, - PASSWORD_SYM = 658, - PERSISTENT_SYM = 659, - PHASE_SYM = 660, - PLUGINS_SYM = 661, - PLUGIN_SYM = 662, - POINT_SYM = 663, - POLYGON = 664, - PORT_SYM = 665, - POSITION_SYM = 666, - PRECISION = 667, - PREPARE_SYM = 668, - PRESERVE_SYM = 669, - PREV_SYM = 670, - PRIMARY_SYM = 671, - PRIVILEGES = 672, - PROCEDURE_SYM = 673, - PROCESS = 674, - PROCESSLIST_SYM = 675, - PROFILE_SYM = 676, - PROFILES_SYM = 677, - PROXY_SYM = 678, - PURGE = 679, - QUARTER_SYM = 680, - QUERY_SYM = 681, - QUICK = 682, - RANGE_SYM = 683, - READS_SYM = 684, - READ_ONLY_SYM = 685, - READ_SYM = 686, - READ_WRITE_SYM = 687, - REAL = 688, - REBUILD_SYM = 689, - RECOVER_SYM = 690, - REDOFILE_SYM = 691, - REDO_BUFFER_SIZE_SYM = 692, - REDUNDANT_SYM = 693, - REFERENCES = 694, - REGEXP = 695, - RELAY = 696, - RELAYLOG_SYM = 697, - RELAY_LOG_FILE_SYM = 698, - RELAY_LOG_POS_SYM = 699, - RELAY_THREAD = 700, - RELEASE_SYM = 701, - RELOAD = 702, - REMOVE_SYM = 703, - RENAME = 704, - REORGANIZE_SYM = 705, - REPAIR = 706, - REPEATABLE_SYM = 707, - REPEAT_SYM = 708, - REPLACE = 709, - REPLICATION = 710, - REQUIRE_SYM = 711, - RESET_SYM = 712, - RESIGNAL_SYM = 713, - RESOURCES = 714, - RESTORE_SYM = 715, - RESTRICT = 716, - RESUME_SYM = 717, - RETURNED_SQLSTATE_SYM = 718, - RETURNING_SYM = 719, - RETURNS_SYM = 720, - RETURN_SYM = 721, - REVERSE_SYM = 722, - REVOKE = 723, - RIGHT = 724, - ROLE_SYM = 725, - ROLLBACK_SYM = 726, - ROLLUP_SYM = 727, - ROUTINE_SYM = 728, - ROWS_SYM = 729, - ROW_FORMAT_SYM = 730, - ROW_SYM = 731, - ROW_COUNT_SYM = 732, - RTREE_SYM = 733, - SAVEPOINT_SYM = 734, - SCHEDULE_SYM = 735, - SCHEMA_NAME_SYM = 736, - SECOND_MICROSECOND_SYM = 737, - SECOND_SYM = 738, - SECURITY_SYM = 739, - SELECT_SYM = 740, - SENSITIVE_SYM = 741, - SEPARATOR_SYM = 742, - SERIALIZABLE_SYM = 743, - SERIAL_SYM = 744, - SESSION_SYM = 745, - SERVER_SYM = 746, - SERVER_OPTIONS = 747, - SET = 748, - SET_VAR = 749, - SHARE_SYM = 750, - SHIFT_LEFT = 751, - SHIFT_RIGHT = 752, - SHOW = 753, - SHUTDOWN = 754, - SIGNAL_SYM = 755, - SIGNED_SYM = 756, - SIMPLE_SYM = 757, - SLAVE = 758, - SLAVES = 759, - SLAVE_POS_SYM = 760, - SLOW = 761, - SMALLINT = 762, - SNAPSHOT_SYM = 763, - SOCKET_SYM = 764, - SOFT_SYM = 765, - SONAME_SYM = 766, - SOUNDS_SYM = 767, - SOURCE_SYM = 768, - SPATIAL_SYM = 769, - SPECIFIC_SYM = 770, - SQLEXCEPTION_SYM = 771, - SQLSTATE_SYM = 772, - SQLWARNING_SYM = 773, - SQL_BIG_RESULT = 774, - SQL_BUFFER_RESULT = 775, - SQL_CACHE_SYM = 776, - SQL_CALC_FOUND_ROWS = 777, - SQL_NO_CACHE_SYM = 778, - SQL_SMALL_RESULT = 779, - SQL_SYM = 780, - SQL_THREAD = 781, - REF_SYSTEM_ID_SYM = 782, - SSL_SYM = 783, - STARTING = 784, - STARTS_SYM = 785, - START_SYM = 786, - STATEMENT_SYM = 787, - STATS_AUTO_RECALC_SYM = 788, - STATS_PERSISTENT_SYM = 789, - STATS_SAMPLE_PAGES_SYM = 790, - STATUS_SYM = 791, - STDDEV_SAMP_SYM = 792, - STD_SYM = 793, - STOP_SYM = 794, - STORAGE_SYM = 795, - STRAIGHT_JOIN = 796, - STRING_SYM = 797, - SUBCLASS_ORIGIN_SYM = 798, - SUBDATE_SYM = 799, - SUBJECT_SYM = 800, - SUBPARTITIONS_SYM = 801, - SUBPARTITION_SYM = 802, - SUBSTRING = 803, - SUM_SYM = 804, - SUPER_SYM = 805, - SUSPEND_SYM = 806, - SWAPS_SYM = 807, - SWITCHES_SYM = 808, - SYSDATE = 809, - TABLES = 810, - TABLESPACE = 811, - TABLE_REF_PRIORITY = 812, - TABLE_SYM = 813, - TABLE_CHECKSUM_SYM = 814, - TABLE_NAME_SYM = 815, - TEMPORARY = 816, - TEMPTABLE_SYM = 817, - TERMINATED = 818, - TEXT_STRING = 819, - TEXT_SYM = 820, - THAN_SYM = 821, - THEN_SYM = 822, - TIMESTAMP = 823, - TIMESTAMP_ADD = 824, - TIMESTAMP_DIFF = 825, - TIME_SYM = 826, - TINYBLOB = 827, - TINYINT = 828, - TINYTEXT = 829, - TO_SYM = 830, - TRAILING = 831, - TRANSACTION_SYM = 832, - TRANSACTIONAL_SYM = 833, - TRIGGERS_SYM = 834, - TRIGGER_SYM = 835, - TRIM = 836, - TRUE_SYM = 837, - TRUNCATE_SYM = 838, - TYPES_SYM = 839, - TYPE_SYM = 840, - UDF_RETURNS_SYM = 841, - ULONGLONG_NUM = 842, - UNCOMMITTED_SYM = 843, - UNDEFINED_SYM = 844, - UNDERSCORE_CHARSET = 845, - UNDOFILE_SYM = 846, - UNDO_BUFFER_SIZE_SYM = 847, - UNDO_SYM = 848, - UNICODE_SYM = 849, - UNINSTALL_SYM = 850, - UNION_SYM = 851, - UNIQUE_SYM = 852, - UNKNOWN_SYM = 853, - UNLOCK_SYM = 854, - UNSIGNED = 855, - UNTIL_SYM = 856, - UPDATE_SYM = 857, - UPGRADE_SYM = 858, - USAGE = 859, - USER = 860, - USE_FRM = 861, - USE_SYM = 862, - USING = 863, - UTC_DATE_SYM = 864, - UTC_TIMESTAMP_SYM = 865, - UTC_TIME_SYM = 866, - VALUES = 867, - VALUE_SYM = 868, - VARBINARY = 869, - VARCHAR = 870, - VARIABLES = 871, - VARIANCE_SYM = 872, - VARYING = 873, - VAR_SAMP_SYM = 874, - VIA_SYM = 875, - VIEW_SYM = 876, - VIRTUAL_SYM = 877, - WAIT_SYM = 878, - WARNINGS = 879, - WEEK_SYM = 880, - WEIGHT_STRING_SYM = 881, - WHEN_SYM = 882, - WHERE = 883, - WHILE_SYM = 884, - WITH = 885, - WITH_CUBE_SYM = 886, - WITH_ROLLUP_SYM = 887, - WORK_SYM = 888, - WRAPPER_SYM = 889, - WRITE_SYM = 890, - X509_SYM = 891, - XA_SYM = 892, - XML_SYM = 893, - XOR = 894, - YEAR_MONTH_SYM = 895, - YEAR_SYM = 896, - ZEROFILL = 897, - IMPOSSIBLE_ACTION = 898 - }; + enum yytokentype + { + ABORT_SYM = 258, + ACCESSIBLE_SYM = 259, + ACTION = 260, + ADD = 261, + ADMIN_SYM = 262, + ADDDATE_SYM = 263, + AFTER_SYM = 264, + AGAINST = 265, + AGGREGATE_SYM = 266, + ALGORITHM_SYM = 267, + ALL = 268, + ALTER = 269, + ALWAYS_SYM = 270, + ANALYZE_SYM = 271, + AND_AND_SYM = 272, + AND_SYM = 273, + ANY_SYM = 274, + AS = 275, + ASC = 276, + ASCII_SYM = 277, + ASENSITIVE_SYM = 278, + AT_SYM = 279, + ATOMIC_SYM = 280, + AUTHORS_SYM = 281, + AUTOEXTEND_SIZE_SYM = 282, + AUTO_INC = 283, + AUTO_SYM = 284, + AVG_ROW_LENGTH = 285, + AVG_SYM = 286, + BACKUP_SYM = 287, + BEFORE_SYM = 288, + BEGIN_SYM = 289, + BETWEEN_SYM = 290, + BIGINT = 291, + BINARY = 292, + BINLOG_SYM = 293, + BIN_NUM = 294, + BIT_AND = 295, + BIT_OR = 296, + BIT_SYM = 297, + BIT_XOR = 298, + BLOB_SYM = 299, + BLOCK_SYM = 300, + BOOLEAN_SYM = 301, + BOOL_SYM = 302, + BOTH = 303, + BTREE_SYM = 304, + BY = 305, + BYTE_SYM = 306, + CACHE_SYM = 307, + CALL_SYM = 308, + CASCADE = 309, + CASCADED = 310, + CASE_SYM = 311, + CAST_SYM = 312, + CATALOG_NAME_SYM = 313, + CHAIN_SYM = 314, + CHANGE = 315, + CHANGED = 316, + CHARSET = 317, + CHAR_SYM = 318, + CHECKPOINT_SYM = 319, + CHECKSUM_SYM = 320, + CHECK_SYM = 321, + CIPHER_SYM = 322, + CLASS_ORIGIN_SYM = 323, + CLIENT_SYM = 324, + CLOSE_SYM = 325, + COALESCE = 326, + CODE_SYM = 327, + COLLATE_SYM = 328, + COLLATION_SYM = 329, + COLUMNS = 330, + COLUMN_ADD_SYM = 331, + COLUMN_CHECK_SYM = 332, + COLUMN_CREATE_SYM = 333, + COLUMN_DELETE_SYM = 334, + COLUMN_GET_SYM = 335, + COLUMN_SYM = 336, + COLUMN_NAME_SYM = 337, + COMMENT_SYM = 338, + COMMITTED_SYM = 339, + COMMIT_SYM = 340, + COMPACT_SYM = 341, + COMPLETION_SYM = 342, + COMPRESSED_SYM = 343, + CONCURRENT = 344, + CONDITION_SYM = 345, + CONNECTION_SYM = 346, + CONSISTENT_SYM = 347, + CONSTRAINT = 348, + CONSTRAINT_CATALOG_SYM = 349, + CONSTRAINT_NAME_SYM = 350, + CONSTRAINT_SCHEMA_SYM = 351, + CONTAINS_SYM = 352, + CONTEXT_SYM = 353, + CONTINUE_SYM = 354, + CONTRIBUTORS_SYM = 355, + CONVERT_SYM = 356, + COUNT_SYM = 357, + CPU_SYM = 358, + CREATE = 359, + CROSS = 360, + CUBE_SYM = 361, + CURDATE = 362, + CURRENT_SYM = 363, + CURRENT_USER = 364, + CURRENT_ROLE = 365, + CURRENT_POS_SYM = 366, + CURSOR_SYM = 367, + CURSOR_NAME_SYM = 368, + CURTIME = 369, + DATABASE = 370, + DATABASES = 371, + DATAFILE_SYM = 372, + DATA_SYM = 373, + DATETIME = 374, + DATE_ADD_INTERVAL = 375, + DATE_SUB_INTERVAL = 376, + DATE_SYM = 377, + DAY_HOUR_SYM = 378, + DAY_MICROSECOND_SYM = 379, + DAY_MINUTE_SYM = 380, + DAY_SECOND_SYM = 381, + DAY_SYM = 382, + DEALLOCATE_SYM = 383, + DECIMAL_NUM = 384, + DECIMAL_SYM = 385, + DECLARE_SYM = 386, + DEFAULT = 387, + DEFINER_SYM = 388, + DELAYED_SYM = 389, + DELAY_KEY_WRITE_SYM = 390, + DELETE_SYM = 391, + DELETE_DOMAIN_ID_SYM = 392, + DESC = 393, + DESCRIBE = 394, + DES_KEY_FILE = 395, + DETERMINISTIC_SYM = 396, + DIAGNOSTICS_SYM = 397, + DIRECTORY_SYM = 398, + DISABLE_SYM = 399, + DISCARD = 400, + DISK_SYM = 401, + DISTINCT = 402, + DIV_SYM = 403, + DOUBLE_SYM = 404, + DO_DOMAIN_IDS_SYM = 405, + DO_SYM = 406, + DROP = 407, + DUAL_SYM = 408, + DUMPFILE = 409, + DUPLICATE_SYM = 410, + DYNAMIC_SYM = 411, + EACH_SYM = 412, + ELSE = 413, + ELSEIF_SYM = 414, + ENABLE_SYM = 415, + ENCLOSED = 416, + END = 417, + ENDS_SYM = 418, + END_OF_INPUT = 419, + ENGINES_SYM = 420, + ENGINE_SYM = 421, + ENUM = 422, + EQUAL_SYM = 423, + ERROR_SYM = 424, + ERRORS = 425, + ESCAPED = 426, + ESCAPE_SYM = 427, + EVENTS_SYM = 428, + EVENT_SYM = 429, + EVERY_SYM = 430, + EXCHANGE_SYM = 431, + EXAMINED_SYM = 432, + EXECUTE_SYM = 433, + EXISTS = 434, + EXIT_SYM = 435, + EXPANSION_SYM = 436, + EXPORT_SYM = 437, + EXTENDED_SYM = 438, + EXTENT_SIZE_SYM = 439, + EXTRACT_SYM = 440, + FALSE_SYM = 441, + FAST_SYM = 442, + FAULTS_SYM = 443, + FETCH_SYM = 444, + FILE_SYM = 445, + FIRST_SYM = 446, + FIXED_SYM = 447, + FLOAT_NUM = 448, + FLOAT_SYM = 449, + FLUSH_SYM = 450, + FORCE_SYM = 451, + FOREIGN = 452, + FOR_SYM = 453, + FORMAT_SYM = 454, + FOUND_SYM = 455, + FROM = 456, + FULL = 457, + FULLTEXT_SYM = 458, + FUNCTION_SYM = 459, + GE = 460, + GENERAL = 461, + GENERATED_SYM = 462, + GEOMETRYCOLLECTION = 463, + GEOMETRY_SYM = 464, + GET_FORMAT = 465, + GET_SYM = 466, + GLOBAL_SYM = 467, + GRANT = 468, + GRANTS = 469, + GROUP_SYM = 470, + GROUP_CONCAT_SYM = 471, + HANDLER_SYM = 472, + HARD_SYM = 473, + HASH_SYM = 474, + HAVING = 475, + HELP_SYM = 476, + HEX_NUM = 477, + HEX_STRING = 478, + HIGH_PRIORITY = 479, + HOST_SYM = 480, + HOSTS_SYM = 481, + HOUR_MICROSECOND_SYM = 482, + HOUR_MINUTE_SYM = 483, + HOUR_SECOND_SYM = 484, + HOUR_SYM = 485, + ID_SYM = 486, + IDENT = 487, + IDENTIFIED_SYM = 488, + IDENT_QUOTED = 489, + IF_SYM = 490, + IGNORE_DOMAIN_IDS_SYM = 491, + IGNORE_SYM = 492, + IGNORE_SERVER_IDS_SYM = 493, + IMPORT = 494, + INDEXES = 495, + INDEX_SYM = 496, + INFILE = 497, + INITIAL_SIZE_SYM = 498, + INNER_SYM = 499, + INOUT_SYM = 500, + INSENSITIVE_SYM = 501, + INSERT = 502, + INSERT_METHOD = 503, + INSTALL_SYM = 504, + INTERVAL_SYM = 505, + INTO = 506, + INT_SYM = 507, + INVOKER_SYM = 508, + IN_SYM = 509, + IO_SYM = 510, + IPC_SYM = 511, + IS = 512, + ISOLATION = 513, + ISSUER_SYM = 514, + ITERATE_SYM = 515, + JOIN_SYM = 516, + KEYS = 517, + KEY_BLOCK_SIZE = 518, + KEY_SYM = 519, + KILL_SYM = 520, + LANGUAGE_SYM = 521, + LAST_SYM = 522, + LAST_VALUE = 523, + LE = 524, + LEADING = 525, + LEAVES = 526, + LEAVE_SYM = 527, + LEFT = 528, + LESS_SYM = 529, + LEVEL_SYM = 530, + LEX_HOSTNAME = 531, + LIKE = 532, + LIMIT = 533, + LINEAR_SYM = 534, + LINES = 535, + LINESTRING = 536, + LIST_SYM = 537, + LOAD = 538, + LOCAL_SYM = 539, + LOCATOR_SYM = 540, + LOCKS_SYM = 541, + LOCK_SYM = 542, + LOGFILE_SYM = 543, + LOGS_SYM = 544, + LONGBLOB = 545, + LONGTEXT = 546, + LONG_NUM = 547, + LONG_SYM = 548, + LOOP_SYM = 549, + LOW_PRIORITY = 550, + MASTER_CONNECT_RETRY_SYM = 551, + MASTER_GTID_POS_SYM = 552, + MASTER_HOST_SYM = 553, + MASTER_LOG_FILE_SYM = 554, + MASTER_LOG_POS_SYM = 555, + MASTER_PASSWORD_SYM = 556, + MASTER_PORT_SYM = 557, + MASTER_SERVER_ID_SYM = 558, + MASTER_SSL_CAPATH_SYM = 559, + MASTER_SSL_CA_SYM = 560, + MASTER_SSL_CERT_SYM = 561, + MASTER_SSL_CIPHER_SYM = 562, + MASTER_SSL_CRL_SYM = 563, + MASTER_SSL_CRLPATH_SYM = 564, + MASTER_SSL_KEY_SYM = 565, + MASTER_SSL_SYM = 566, + MASTER_SSL_VERIFY_SERVER_CERT_SYM = 567, + MASTER_SYM = 568, + MASTER_USER_SYM = 569, + MASTER_USE_GTID_SYM = 570, + MASTER_HEARTBEAT_PERIOD_SYM = 571, + MATCH = 572, + MAX_CONNECTIONS_PER_HOUR = 573, + MAX_QUERIES_PER_HOUR = 574, + MAX_ROWS = 575, + MAX_SIZE_SYM = 576, + MAX_SYM = 577, + MAX_UPDATES_PER_HOUR = 578, + MAX_STATEMENT_TIME_SYM = 579, + MAX_USER_CONNECTIONS_SYM = 580, + MAX_VALUE_SYM = 581, + MEDIUMBLOB = 582, + MEDIUMINT = 583, + MEDIUMTEXT = 584, + MEDIUM_SYM = 585, + MEMORY_SYM = 586, + MERGE_SYM = 587, + MESSAGE_TEXT_SYM = 588, + MICROSECOND_SYM = 589, + MIGRATE_SYM = 590, + MINUTE_MICROSECOND_SYM = 591, + MINUTE_SECOND_SYM = 592, + MINUTE_SYM = 593, + MIN_ROWS = 594, + MIN_SYM = 595, + MODE_SYM = 596, + MODIFIES_SYM = 597, + MODIFY_SYM = 598, + MOD_SYM = 599, + MONTH_SYM = 600, + MULTILINESTRING = 601, + MULTIPOINT = 602, + MULTIPOLYGON = 603, + MUTEX_SYM = 604, + MYSQL_SYM = 605, + MYSQL_ERRNO_SYM = 606, + NAMES_SYM = 607, + NAME_SYM = 608, + NATIONAL_SYM = 609, + NATURAL = 610, + NCHAR_STRING = 611, + NCHAR_SYM = 612, + NE = 613, + NEG = 614, + NEW_SYM = 615, + NEXT_SYM = 616, + NODEGROUP_SYM = 617, + NONE_SYM = 618, + NOT2_SYM = 619, + NOT_SYM = 620, + NOW_SYM = 621, + NO_SYM = 622, + NO_WAIT_SYM = 623, + NO_WRITE_TO_BINLOG = 624, + NULL_SYM = 625, + NUM = 626, + NUMBER_SYM = 627, + NUMERIC_SYM = 628, + NVARCHAR_SYM = 629, + OFFSET_SYM = 630, + OLD_PASSWORD_SYM = 631, + ON = 632, + ONE_SYM = 633, + ONLY_SYM = 634, + ONLINE_SYM = 635, + OPEN_SYM = 636, + OPTIMIZE = 637, + OPTIONS_SYM = 638, + OPTION = 639, + OPTIONALLY = 640, + OR2_SYM = 641, + ORDER_SYM = 642, + OR_OR_SYM = 643, + OR_SYM = 644, + OUTER = 645, + OUTFILE = 646, + OUT_SYM = 647, + OWNER_SYM = 648, + PACK_KEYS_SYM = 649, + PAGE_SYM = 650, + PAGE_CHECKSUM_SYM = 651, + PARAM_MARKER = 652, + PARSER_SYM = 653, + PARSE_VCOL_EXPR_SYM = 654, + PARTIAL = 655, + PARTITION_SYM = 656, + PARTITIONS_SYM = 657, + PARTITIONING_SYM = 658, + PASSWORD_SYM = 659, + PERSISTENT_SYM = 660, + PHASE_SYM = 661, + PLUGINS_SYM = 662, + PLUGIN_SYM = 663, + POINT_SYM = 664, + POLYGON = 665, + PORT_SYM = 666, + POSITION_SYM = 667, + PRECISION = 668, + PREPARE_SYM = 669, + PRESERVE_SYM = 670, + PREV_SYM = 671, + PRIMARY_SYM = 672, + PRIVILEGES = 673, + PROCEDURE_SYM = 674, + PROCESS = 675, + PROCESSLIST_SYM = 676, + PROFILE_SYM = 677, + PROFILES_SYM = 678, + PROXY_SYM = 679, + PURGE = 680, + QUARTER_SYM = 681, + QUERY_SYM = 682, + QUICK = 683, + RANGE_SYM = 684, + READS_SYM = 685, + READ_ONLY_SYM = 686, + READ_SYM = 687, + READ_WRITE_SYM = 688, + REAL = 689, + REBUILD_SYM = 690, + RECOVER_SYM = 691, + REDOFILE_SYM = 692, + REDO_BUFFER_SIZE_SYM = 693, + REDUNDANT_SYM = 694, + REFERENCES = 695, + REGEXP = 696, + RELAY = 697, + RELAYLOG_SYM = 698, + RELAY_LOG_FILE_SYM = 699, + RELAY_LOG_POS_SYM = 700, + RELAY_THREAD = 701, + RELEASE_SYM = 702, + RELOAD = 703, + REMOVE_SYM = 704, + RENAME = 705, + REORGANIZE_SYM = 706, + REPAIR = 707, + REPEATABLE_SYM = 708, + REPEAT_SYM = 709, + REPLACE = 710, + REPLICATION = 711, + REQUIRE_SYM = 712, + RESET_SYM = 713, + RESIGNAL_SYM = 714, + RESOURCES = 715, + RESTORE_SYM = 716, + RESTRICT = 717, + RESUME_SYM = 718, + RETURNED_SQLSTATE_SYM = 719, + RETURNING_SYM = 720, + RETURNS_SYM = 721, + RETURN_SYM = 722, + REVERSE_SYM = 723, + REVOKE = 724, + RIGHT = 725, + ROLE_SYM = 726, + ROLLBACK_SYM = 727, + ROLLUP_SYM = 728, + ROUTINE_SYM = 729, + ROWS_SYM = 730, + ROW_FORMAT_SYM = 731, + ROW_SYM = 732, + ROW_COUNT_SYM = 733, + RTREE_SYM = 734, + SAVEPOINT_SYM = 735, + SCHEDULE_SYM = 736, + SCHEMA_NAME_SYM = 737, + SECOND_MICROSECOND_SYM = 738, + SECOND_SYM = 739, + SECURITY_SYM = 740, + SELECT_SYM = 741, + SENSITIVE_SYM = 742, + SEPARATOR_SYM = 743, + SERIALIZABLE_SYM = 744, + SERIAL_SYM = 745, + SESSION_SYM = 746, + SERVER_SYM = 747, + SERVER_OPTIONS = 748, + SET = 749, + SET_VAR = 750, + SHARE_SYM = 751, + SHIFT_LEFT = 752, + SHIFT_RIGHT = 753, + SHOW = 754, + SHUTDOWN = 755, + SIGNAL_SYM = 756, + SIGNED_SYM = 757, + SIMPLE_SYM = 758, + SLAVE = 759, + SLAVES = 760, + SLAVE_POS_SYM = 761, + SLOW = 762, + SMALLINT = 763, + SNAPSHOT_SYM = 764, + SOCKET_SYM = 765, + SOFT_SYM = 766, + SONAME_SYM = 767, + SOUNDS_SYM = 768, + SOURCE_SYM = 769, + SPATIAL_SYM = 770, + SPECIFIC_SYM = 771, + SQLEXCEPTION_SYM = 772, + SQLSTATE_SYM = 773, + SQLWARNING_SYM = 774, + SQL_BIG_RESULT = 775, + SQL_BUFFER_RESULT = 776, + SQL_CACHE_SYM = 777, + SQL_CALC_FOUND_ROWS = 778, + SQL_NO_CACHE_SYM = 779, + SQL_SMALL_RESULT = 780, + SQL_SYM = 781, + SQL_THREAD = 782, + REF_SYSTEM_ID_SYM = 783, + SSL_SYM = 784, + STARTING = 785, + STARTS_SYM = 786, + START_SYM = 787, + STATEMENT_SYM = 788, + STATS_AUTO_RECALC_SYM = 789, + STATS_PERSISTENT_SYM = 790, + STATS_SAMPLE_PAGES_SYM = 791, + STATUS_SYM = 792, + STDDEV_SAMP_SYM = 793, + STD_SYM = 794, + STOP_SYM = 795, + STORAGE_SYM = 796, + STRAIGHT_JOIN = 797, + STRING_SYM = 798, + SUBCLASS_ORIGIN_SYM = 799, + SUBDATE_SYM = 800, + SUBJECT_SYM = 801, + SUBPARTITIONS_SYM = 802, + SUBPARTITION_SYM = 803, + SUBSTRING = 804, + SUM_SYM = 805, + SUPER_SYM = 806, + SUSPEND_SYM = 807, + SWAPS_SYM = 808, + SWITCHES_SYM = 809, + SYSDATE = 810, + TABLES = 811, + TABLESPACE = 812, + TABLE_REF_PRIORITY = 813, + TABLE_SYM = 814, + TABLE_CHECKSUM_SYM = 815, + TABLE_NAME_SYM = 816, + TEMPORARY = 817, + TEMPTABLE_SYM = 818, + TERMINATED = 819, + TEXT_STRING = 820, + TEXT_SYM = 821, + THAN_SYM = 822, + THEN_SYM = 823, + TIMESTAMP = 824, + TIMESTAMP_ADD = 825, + TIMESTAMP_DIFF = 826, + TIME_SYM = 827, + TINYBLOB = 828, + TINYINT = 829, + TINYTEXT = 830, + TO_SYM = 831, + TRAILING = 832, + TRANSACTION_SYM = 833, + TRANSACTIONAL_SYM = 834, + TRIGGERS_SYM = 835, + TRIGGER_SYM = 836, + TRIM = 837, + TRUE_SYM = 838, + TRUNCATE_SYM = 839, + TYPES_SYM = 840, + TYPE_SYM = 841, + UDF_RETURNS_SYM = 842, + ULONGLONG_NUM = 843, + UNCOMMITTED_SYM = 844, + UNDEFINED_SYM = 845, + UNDERSCORE_CHARSET = 846, + UNDOFILE_SYM = 847, + UNDO_BUFFER_SIZE_SYM = 848, + UNDO_SYM = 849, + UNICODE_SYM = 850, + UNINSTALL_SYM = 851, + UNION_SYM = 852, + UNIQUE_SYM = 853, + UNKNOWN_SYM = 854, + UNLOCK_SYM = 855, + UNSIGNED = 856, + UNTIL_SYM = 857, + UPDATE_SYM = 858, + UPGRADE_SYM = 859, + USAGE = 860, + USER = 861, + USE_FRM = 862, + USE_SYM = 863, + USING = 864, + UTC_DATE_SYM = 865, + UTC_TIMESTAMP_SYM = 866, + UTC_TIME_SYM = 867, + VALUES = 868, + VALUE_SYM = 869, + VARBINARY = 870, + VARCHAR = 871, + VARIABLES = 872, + VARIANCE_SYM = 873, + VARYING = 874, + VAR_SAMP_SYM = 875, + VIA_SYM = 876, + VIEW_SYM = 877, + VIRTUAL_SYM = 878, + WAIT_SYM = 879, + WARNINGS = 880, + WEEK_SYM = 881, + WEIGHT_STRING_SYM = 882, + WHEN_SYM = 883, + WHERE = 884, + WHILE_SYM = 885, + WITH = 886, + WITH_CUBE_SYM = 887, + WITH_ROLLUP_SYM = 888, + WORK_SYM = 889, + WRAPPER_SYM = 890, + WRITE_SYM = 891, + X509_SYM = 892, + XA_SYM = 893, + XML_SYM = 894, + XOR = 895, + YEAR_MONTH_SYM = 896, + YEAR_SYM = 897, + ZEROFILL = 898, + IMPOSSIBLE_ACTION = 899 + }; #endif /* Tokens. */ #define ABORT_SYM 258 @@ -817,523 +824,521 @@ #define DELAYED_SYM 389 #define DELAY_KEY_WRITE_SYM 390 #define DELETE_SYM 391 -#define DESC 392 -#define DESCRIBE 393 -#define DES_KEY_FILE 394 -#define DETERMINISTIC_SYM 395 -#define DIAGNOSTICS_SYM 396 -#define DIRECTORY_SYM 397 -#define DISABLE_SYM 398 -#define DISCARD 399 -#define DISK_SYM 400 -#define DISTINCT 401 -#define DIV_SYM 402 -#define DOUBLE_SYM 403 -#define DO_DOMAIN_IDS_SYM 404 -#define DO_SYM 405 -#define DROP 406 -#define DUAL_SYM 407 -#define DUMPFILE 408 -#define DUPLICATE_SYM 409 -#define DYNAMIC_SYM 410 -#define EACH_SYM 411 -#define ELSE 412 -#define ELSEIF_SYM 413 -#define ENABLE_SYM 414 -#define ENCLOSED 415 -#define END 416 -#define ENDS_SYM 417 -#define END_OF_INPUT 418 -#define ENGINES_SYM 419 -#define ENGINE_SYM 420 -#define ENUM 421 -#define EQUAL_SYM 422 -#define ERROR_SYM 423 -#define ERRORS 424 -#define ESCAPED 425 -#define ESCAPE_SYM 426 -#define EVENTS_SYM 427 -#define EVENT_SYM 428 -#define EVERY_SYM 429 -#define EXCHANGE_SYM 430 -#define EXAMINED_SYM 431 -#define EXECUTE_SYM 432 -#define EXISTS 433 -#define EXIT_SYM 434 -#define EXPANSION_SYM 435 -#define EXPORT_SYM 436 -#define EXTENDED_SYM 437 -#define EXTENT_SIZE_SYM 438 -#define EXTRACT_SYM 439 -#define FALSE_SYM 440 -#define FAST_SYM 441 -#define FAULTS_SYM 442 -#define FETCH_SYM 443 -#define FILE_SYM 444 -#define FIRST_SYM 445 -#define FIXED_SYM 446 -#define FLOAT_NUM 447 -#define FLOAT_SYM 448 -#define FLUSH_SYM 449 -#define FORCE_SYM 450 -#define FOREIGN 451 -#define FOR_SYM 452 -#define FORMAT_SYM 453 -#define FOUND_SYM 454 -#define FROM 455 -#define FULL 456 -#define FULLTEXT_SYM 457 -#define FUNCTION_SYM 458 -#define GE 459 -#define GENERAL 460 -#define GENERATED_SYM 461 -#define GEOMETRYCOLLECTION 462 -#define GEOMETRY_SYM 463 -#define GET_FORMAT 464 -#define GET_SYM 465 -#define GLOBAL_SYM 466 -#define GRANT 467 -#define GRANTS 468 -#define GROUP_SYM 469 -#define GROUP_CONCAT_SYM 470 -#define HANDLER_SYM 471 -#define HARD_SYM 472 -#define HASH_SYM 473 -#define HAVING 474 -#define HELP_SYM 475 -#define HEX_NUM 476 -#define HEX_STRING 477 -#define HIGH_PRIORITY 478 -#define HOST_SYM 479 -#define HOSTS_SYM 480 -#define HOUR_MICROSECOND_SYM 481 -#define HOUR_MINUTE_SYM 482 -#define HOUR_SECOND_SYM 483 -#define HOUR_SYM 484 -#define ID_SYM 485 -#define IDENT 486 -#define IDENTIFIED_SYM 487 -#define IDENT_QUOTED 488 -#define IF_SYM 489 -#define IGNORE_DOMAIN_IDS_SYM 490 -#define IGNORE_SYM 491 -#define IGNORE_SERVER_IDS_SYM 492 -#define IMPORT 493 -#define INDEXES 494 -#define INDEX_SYM 495 -#define INFILE 496 -#define INITIAL_SIZE_SYM 497 -#define INNER_SYM 498 -#define INOUT_SYM 499 -#define INSENSITIVE_SYM 500 -#define INSERT 501 -#define INSERT_METHOD 502 -#define INSTALL_SYM 503 -#define INTERVAL_SYM 504 -#define INTO 505 -#define INT_SYM 506 -#define INVOKER_SYM 507 -#define IN_SYM 508 -#define IO_SYM 509 -#define IPC_SYM 510 -#define IS 511 -#define ISOLATION 512 -#define ISSUER_SYM 513 -#define ITERATE_SYM 514 -#define JOIN_SYM 515 -#define KEYS 516 -#define KEY_BLOCK_SIZE 517 -#define KEY_SYM 518 -#define KILL_SYM 519 -#define LANGUAGE_SYM 520 -#define LAST_SYM 521 -#define LAST_VALUE 522 -#define LE 523 -#define LEADING 524 -#define LEAVES 525 -#define LEAVE_SYM 526 -#define LEFT 527 -#define LESS_SYM 528 -#define LEVEL_SYM 529 -#define LEX_HOSTNAME 530 -#define LIKE 531 -#define LIMIT 532 -#define LINEAR_SYM 533 -#define LINES 534 -#define LINESTRING 535 -#define LIST_SYM 536 -#define LOAD 537 -#define LOCAL_SYM 538 -#define LOCATOR_SYM 539 -#define LOCKS_SYM 540 -#define LOCK_SYM 541 -#define LOGFILE_SYM 542 -#define LOGS_SYM 543 -#define LONGBLOB 544 -#define LONGTEXT 545 -#define LONG_NUM 546 -#define LONG_SYM 547 -#define LOOP_SYM 548 -#define LOW_PRIORITY 549 -#define MASTER_CONNECT_RETRY_SYM 550 -#define MASTER_GTID_POS_SYM 551 -#define MASTER_HOST_SYM 552 -#define MASTER_LOG_FILE_SYM 553 -#define MASTER_LOG_POS_SYM 554 -#define MASTER_PASSWORD_SYM 555 -#define MASTER_PORT_SYM 556 -#define MASTER_SERVER_ID_SYM 557 -#define MASTER_SSL_CAPATH_SYM 558 -#define MASTER_SSL_CA_SYM 559 -#define MASTER_SSL_CERT_SYM 560 -#define MASTER_SSL_CIPHER_SYM 561 -#define MASTER_SSL_CRL_SYM 562 -#define MASTER_SSL_CRLPATH_SYM 563 -#define MASTER_SSL_KEY_SYM 564 -#define MASTER_SSL_SYM 565 -#define MASTER_SSL_VERIFY_SERVER_CERT_SYM 566 -#define MASTER_SYM 567 -#define MASTER_USER_SYM 568 -#define MASTER_USE_GTID_SYM 569 -#define MASTER_HEARTBEAT_PERIOD_SYM 570 -#define MATCH 571 -#define MAX_CONNECTIONS_PER_HOUR 572 -#define MAX_QUERIES_PER_HOUR 573 -#define MAX_ROWS 574 -#define MAX_SIZE_SYM 575 -#define MAX_SYM 576 -#define MAX_UPDATES_PER_HOUR 577 -#define MAX_STATEMENT_TIME_SYM 578 -#define MAX_USER_CONNECTIONS_SYM 579 -#define MAX_VALUE_SYM 580 -#define MEDIUMBLOB 581 -#define MEDIUMINT 582 -#define MEDIUMTEXT 583 -#define MEDIUM_SYM 584 -#define MEMORY_SYM 585 -#define MERGE_SYM 586 -#define MESSAGE_TEXT_SYM 587 -#define MICROSECOND_SYM 588 -#define MIGRATE_SYM 589 -#define MINUTE_MICROSECOND_SYM 590 -#define MINUTE_SECOND_SYM 591 -#define MINUTE_SYM 592 -#define MIN_ROWS 593 -#define MIN_SYM 594 -#define MODE_SYM 595 -#define MODIFIES_SYM 596 -#define MODIFY_SYM 597 -#define MOD_SYM 598 -#define MONTH_SYM 599 -#define MULTILINESTRING 600 -#define MULTIPOINT 601 -#define MULTIPOLYGON 602 -#define MUTEX_SYM 603 -#define MYSQL_SYM 604 -#define MYSQL_ERRNO_SYM 605 -#define NAMES_SYM 606 -#define NAME_SYM 607 -#define NATIONAL_SYM 608 -#define NATURAL 609 -#define NCHAR_STRING 610 -#define NCHAR_SYM 611 -#define NE 612 -#define NEG 613 -#define NEW_SYM 614 -#define NEXT_SYM 615 -#define NODEGROUP_SYM 616 -#define NONE_SYM 617 -#define NOT2_SYM 618 -#define NOT_SYM 619 -#define NOW_SYM 620 -#define NO_SYM 621 -#define NO_WAIT_SYM 622 -#define NO_WRITE_TO_BINLOG 623 -#define NULL_SYM 624 -#define NUM 625 -#define NUMBER_SYM 626 -#define NUMERIC_SYM 627 -#define NVARCHAR_SYM 628 -#define OFFSET_SYM 629 -#define OLD_PASSWORD_SYM 630 -#define ON 631 -#define ONE_SYM 632 -#define ONLY_SYM 633 -#define ONLINE_SYM 634 -#define OPEN_SYM 635 -#define OPTIMIZE 636 -#define OPTIONS_SYM 637 -#define OPTION 638 -#define OPTIONALLY 639 -#define OR2_SYM 640 -#define ORDER_SYM 641 -#define OR_OR_SYM 642 -#define OR_SYM 643 -#define OUTER 644 -#define OUTFILE 645 -#define OUT_SYM 646 -#define OWNER_SYM 647 -#define PACK_KEYS_SYM 648 -#define PAGE_SYM 649 -#define PAGE_CHECKSUM_SYM 650 -#define PARAM_MARKER 651 -#define PARSER_SYM 652 -#define PARSE_VCOL_EXPR_SYM 653 -#define PARTIAL 654 -#define PARTITION_SYM 655 -#define PARTITIONS_SYM 656 -#define PARTITIONING_SYM 657 -#define PASSWORD_SYM 658 -#define PERSISTENT_SYM 659 -#define PHASE_SYM 660 -#define PLUGINS_SYM 661 -#define PLUGIN_SYM 662 -#define POINT_SYM 663 -#define POLYGON 664 -#define PORT_SYM 665 -#define POSITION_SYM 666 -#define PRECISION 667 -#define PREPARE_SYM 668 -#define PRESERVE_SYM 669 -#define PREV_SYM 670 -#define PRIMARY_SYM 671 -#define PRIVILEGES 672 -#define PROCEDURE_SYM 673 -#define PROCESS 674 -#define PROCESSLIST_SYM 675 -#define PROFILE_SYM 676 -#define PROFILES_SYM 677 -#define PROXY_SYM 678 -#define PURGE 679 -#define QUARTER_SYM 680 -#define QUERY_SYM 681 -#define QUICK 682 -#define RANGE_SYM 683 -#define READS_SYM 684 -#define READ_ONLY_SYM 685 -#define READ_SYM 686 -#define READ_WRITE_SYM 687 -#define REAL 688 -#define REBUILD_SYM 689 -#define RECOVER_SYM 690 -#define REDOFILE_SYM 691 -#define REDO_BUFFER_SIZE_SYM 692 -#define REDUNDANT_SYM 693 -#define REFERENCES 694 -#define REGEXP 695 -#define RELAY 696 -#define RELAYLOG_SYM 697 -#define RELAY_LOG_FILE_SYM 698 -#define RELAY_LOG_POS_SYM 699 -#define RELAY_THREAD 700 -#define RELEASE_SYM 701 -#define RELOAD 702 -#define REMOVE_SYM 703 -#define RENAME 704 -#define REORGANIZE_SYM 705 -#define REPAIR 706 -#define REPEATABLE_SYM 707 -#define REPEAT_SYM 708 -#define REPLACE 709 -#define REPLICATION 710 -#define REQUIRE_SYM 711 -#define RESET_SYM 712 -#define RESIGNAL_SYM 713 -#define RESOURCES 714 -#define RESTORE_SYM 715 -#define RESTRICT 716 -#define RESUME_SYM 717 -#define RETURNED_SQLSTATE_SYM 718 -#define RETURNING_SYM 719 -#define RETURNS_SYM 720 -#define RETURN_SYM 721 -#define REVERSE_SYM 722 -#define REVOKE 723 -#define RIGHT 724 -#define ROLE_SYM 725 -#define ROLLBACK_SYM 726 -#define ROLLUP_SYM 727 -#define ROUTINE_SYM 728 -#define ROWS_SYM 729 -#define ROW_FORMAT_SYM 730 -#define ROW_SYM 731 -#define ROW_COUNT_SYM 732 -#define RTREE_SYM 733 -#define SAVEPOINT_SYM 734 -#define SCHEDULE_SYM 735 -#define SCHEMA_NAME_SYM 736 -#define SECOND_MICROSECOND_SYM 737 -#define SECOND_SYM 738 -#define SECURITY_SYM 739 -#define SELECT_SYM 740 -#define SENSITIVE_SYM 741 -#define SEPARATOR_SYM 742 -#define SERIALIZABLE_SYM 743 -#define SERIAL_SYM 744 -#define SESSION_SYM 745 -#define SERVER_SYM 746 -#define SERVER_OPTIONS 747 -#define SET 748 -#define SET_VAR 749 -#define SHARE_SYM 750 -#define SHIFT_LEFT 751 -#define SHIFT_RIGHT 752 -#define SHOW 753 -#define SHUTDOWN 754 -#define SIGNAL_SYM 755 -#define SIGNED_SYM 756 -#define SIMPLE_SYM 757 -#define SLAVE 758 -#define SLAVES 759 -#define SLAVE_POS_SYM 760 -#define SLOW 761 -#define SMALLINT 762 -#define SNAPSHOT_SYM 763 -#define SOCKET_SYM 764 -#define SOFT_SYM 765 -#define SONAME_SYM 766 -#define SOUNDS_SYM 767 -#define SOURCE_SYM 768 -#define SPATIAL_SYM 769 -#define SPECIFIC_SYM 770 -#define SQLEXCEPTION_SYM 771 -#define SQLSTATE_SYM 772 -#define SQLWARNING_SYM 773 -#define SQL_BIG_RESULT 774 -#define SQL_BUFFER_RESULT 775 -#define SQL_CACHE_SYM 776 -#define SQL_CALC_FOUND_ROWS 777 -#define SQL_NO_CACHE_SYM 778 -#define SQL_SMALL_RESULT 779 -#define SQL_SYM 780 -#define SQL_THREAD 781 -#define REF_SYSTEM_ID_SYM 782 -#define SSL_SYM 783 -#define STARTING 784 -#define STARTS_SYM 785 -#define START_SYM 786 -#define STATEMENT_SYM 787 -#define STATS_AUTO_RECALC_SYM 788 -#define STATS_PERSISTENT_SYM 789 -#define STATS_SAMPLE_PAGES_SYM 790 -#define STATUS_SYM 791 -#define STDDEV_SAMP_SYM 792 -#define STD_SYM 793 -#define STOP_SYM 794 -#define STORAGE_SYM 795 -#define STRAIGHT_JOIN 796 -#define STRING_SYM 797 -#define SUBCLASS_ORIGIN_SYM 798 -#define SUBDATE_SYM 799 -#define SUBJECT_SYM 800 -#define SUBPARTITIONS_SYM 801 -#define SUBPARTITION_SYM 802 -#define SUBSTRING 803 -#define SUM_SYM 804 -#define SUPER_SYM 805 -#define SUSPEND_SYM 806 -#define SWAPS_SYM 807 -#define SWITCHES_SYM 808 -#define SYSDATE 809 -#define TABLES 810 -#define TABLESPACE 811 -#define TABLE_REF_PRIORITY 812 -#define TABLE_SYM 813 -#define TABLE_CHECKSUM_SYM 814 -#define TABLE_NAME_SYM 815 -#define TEMPORARY 816 -#define TEMPTABLE_SYM 817 -#define TERMINATED 818 -#define TEXT_STRING 819 -#define TEXT_SYM 820 -#define THAN_SYM 821 -#define THEN_SYM 822 -#define TIMESTAMP 823 -#define TIMESTAMP_ADD 824 -#define TIMESTAMP_DIFF 825 -#define TIME_SYM 826 -#define TINYBLOB 827 -#define TINYINT 828 -#define TINYTEXT 829 -#define TO_SYM 830 -#define TRAILING 831 -#define TRANSACTION_SYM 832 -#define TRANSACTIONAL_SYM 833 -#define TRIGGERS_SYM 834 -#define TRIGGER_SYM 835 -#define TRIM 836 -#define TRUE_SYM 837 -#define TRUNCATE_SYM 838 -#define TYPES_SYM 839 -#define TYPE_SYM 840 -#define UDF_RETURNS_SYM 841 -#define ULONGLONG_NUM 842 -#define UNCOMMITTED_SYM 843 -#define UNDEFINED_SYM 844 -#define UNDERSCORE_CHARSET 845 -#define UNDOFILE_SYM 846 -#define UNDO_BUFFER_SIZE_SYM 847 -#define UNDO_SYM 848 -#define UNICODE_SYM 849 -#define UNINSTALL_SYM 850 -#define UNION_SYM 851 -#define UNIQUE_SYM 852 -#define UNKNOWN_SYM 853 -#define UNLOCK_SYM 854 -#define UNSIGNED 855 -#define UNTIL_SYM 856 -#define UPDATE_SYM 857 -#define UPGRADE_SYM 858 -#define USAGE 859 -#define USER 860 -#define USE_FRM 861 -#define USE_SYM 862 -#define USING 863 -#define UTC_DATE_SYM 864 -#define UTC_TIMESTAMP_SYM 865 -#define UTC_TIME_SYM 866 -#define VALUES 867 -#define VALUE_SYM 868 -#define VARBINARY 869 -#define VARCHAR 870 -#define VARIABLES 871 -#define VARIANCE_SYM 872 -#define VARYING 873 -#define VAR_SAMP_SYM 874 -#define VIA_SYM 875 -#define VIEW_SYM 876 -#define VIRTUAL_SYM 877 -#define WAIT_SYM 878 -#define WARNINGS 879 -#define WEEK_SYM 880 -#define WEIGHT_STRING_SYM 881 -#define WHEN_SYM 882 -#define WHERE 883 -#define WHILE_SYM 884 -#define WITH 885 -#define WITH_CUBE_SYM 886 -#define WITH_ROLLUP_SYM 887 -#define WORK_SYM 888 -#define WRAPPER_SYM 889 -#define WRITE_SYM 890 -#define X509_SYM 891 -#define XA_SYM 892 -#define XML_SYM 893 -#define XOR 894 -#define YEAR_MONTH_SYM 895 -#define YEAR_SYM 896 -#define ZEROFILL 897 -#define IMPOSSIBLE_ACTION 898 - - - +#define DELETE_DOMAIN_ID_SYM 392 +#define DESC 393 +#define DESCRIBE 394 +#define DES_KEY_FILE 395 +#define DETERMINISTIC_SYM 396 +#define DIAGNOSTICS_SYM 397 +#define DIRECTORY_SYM 398 +#define DISABLE_SYM 399 +#define DISCARD 400 +#define DISK_SYM 401 +#define DISTINCT 402 +#define DIV_SYM 403 +#define DOUBLE_SYM 404 +#define DO_DOMAIN_IDS_SYM 405 +#define DO_SYM 406 +#define DROP 407 +#define DUAL_SYM 408 +#define DUMPFILE 409 +#define DUPLICATE_SYM 410 +#define DYNAMIC_SYM 411 +#define EACH_SYM 412 +#define ELSE 413 +#define ELSEIF_SYM 414 +#define ENABLE_SYM 415 +#define ENCLOSED 416 +#define END 417 +#define ENDS_SYM 418 +#define END_OF_INPUT 419 +#define ENGINES_SYM 420 +#define ENGINE_SYM 421 +#define ENUM 422 +#define EQUAL_SYM 423 +#define ERROR_SYM 424 +#define ERRORS 425 +#define ESCAPED 426 +#define ESCAPE_SYM 427 +#define EVENTS_SYM 428 +#define EVENT_SYM 429 +#define EVERY_SYM 430 +#define EXCHANGE_SYM 431 +#define EXAMINED_SYM 432 +#define EXECUTE_SYM 433 +#define EXISTS 434 +#define EXIT_SYM 435 +#define EXPANSION_SYM 436 +#define EXPORT_SYM 437 +#define EXTENDED_SYM 438 +#define EXTENT_SIZE_SYM 439 +#define EXTRACT_SYM 440 +#define FALSE_SYM 441 +#define FAST_SYM 442 +#define FAULTS_SYM 443 +#define FETCH_SYM 444 +#define FILE_SYM 445 +#define FIRST_SYM 446 +#define FIXED_SYM 447 +#define FLOAT_NUM 448 +#define FLOAT_SYM 449 +#define FLUSH_SYM 450 +#define FORCE_SYM 451 +#define FOREIGN 452 +#define FOR_SYM 453 +#define FORMAT_SYM 454 +#define FOUND_SYM 455 +#define FROM 456 +#define FULL 457 +#define FULLTEXT_SYM 458 +#define FUNCTION_SYM 459 +#define GE 460 +#define GENERAL 461 +#define GENERATED_SYM 462 +#define GEOMETRYCOLLECTION 463 +#define GEOMETRY_SYM 464 +#define GET_FORMAT 465 +#define GET_SYM 466 +#define GLOBAL_SYM 467 +#define GRANT 468 +#define GRANTS 469 +#define GROUP_SYM 470 +#define GROUP_CONCAT_SYM 471 +#define HANDLER_SYM 472 +#define HARD_SYM 473 +#define HASH_SYM 474 +#define HAVING 475 +#define HELP_SYM 476 +#define HEX_NUM 477 +#define HEX_STRING 478 +#define HIGH_PRIORITY 479 +#define HOST_SYM 480 +#define HOSTS_SYM 481 +#define HOUR_MICROSECOND_SYM 482 +#define HOUR_MINUTE_SYM 483 +#define HOUR_SECOND_SYM 484 +#define HOUR_SYM 485 +#define ID_SYM 486 +#define IDENT 487 +#define IDENTIFIED_SYM 488 +#define IDENT_QUOTED 489 +#define IF_SYM 490 +#define IGNORE_DOMAIN_IDS_SYM 491 +#define IGNORE_SYM 492 +#define IGNORE_SERVER_IDS_SYM 493 +#define IMPORT 494 +#define INDEXES 495 +#define INDEX_SYM 496 +#define INFILE 497 +#define INITIAL_SIZE_SYM 498 +#define INNER_SYM 499 +#define INOUT_SYM 500 +#define INSENSITIVE_SYM 501 +#define INSERT 502 +#define INSERT_METHOD 503 +#define INSTALL_SYM 504 +#define INTERVAL_SYM 505 +#define INTO 506 +#define INT_SYM 507 +#define INVOKER_SYM 508 +#define IN_SYM 509 +#define IO_SYM 510 +#define IPC_SYM 511 +#define IS 512 +#define ISOLATION 513 +#define ISSUER_SYM 514 +#define ITERATE_SYM 515 +#define JOIN_SYM 516 +#define KEYS 517 +#define KEY_BLOCK_SIZE 518 +#define KEY_SYM 519 +#define KILL_SYM 520 +#define LANGUAGE_SYM 521 +#define LAST_SYM 522 +#define LAST_VALUE 523 +#define LE 524 +#define LEADING 525 +#define LEAVES 526 +#define LEAVE_SYM 527 +#define LEFT 528 +#define LESS_SYM 529 +#define LEVEL_SYM 530 +#define LEX_HOSTNAME 531 +#define LIKE 532 +#define LIMIT 533 +#define LINEAR_SYM 534 +#define LINES 535 +#define LINESTRING 536 +#define LIST_SYM 537 +#define LOAD 538 +#define LOCAL_SYM 539 +#define LOCATOR_SYM 540 +#define LOCKS_SYM 541 +#define LOCK_SYM 542 +#define LOGFILE_SYM 543 +#define LOGS_SYM 544 +#define LONGBLOB 545 +#define LONGTEXT 546 +#define LONG_NUM 547 +#define LONG_SYM 548 +#define LOOP_SYM 549 +#define LOW_PRIORITY 550 +#define MASTER_CONNECT_RETRY_SYM 551 +#define MASTER_GTID_POS_SYM 552 +#define MASTER_HOST_SYM 553 +#define MASTER_LOG_FILE_SYM 554 +#define MASTER_LOG_POS_SYM 555 +#define MASTER_PASSWORD_SYM 556 +#define MASTER_PORT_SYM 557 +#define MASTER_SERVER_ID_SYM 558 +#define MASTER_SSL_CAPATH_SYM 559 +#define MASTER_SSL_CA_SYM 560 +#define MASTER_SSL_CERT_SYM 561 +#define MASTER_SSL_CIPHER_SYM 562 +#define MASTER_SSL_CRL_SYM 563 +#define MASTER_SSL_CRLPATH_SYM 564 +#define MASTER_SSL_KEY_SYM 565 +#define MASTER_SSL_SYM 566 +#define MASTER_SSL_VERIFY_SERVER_CERT_SYM 567 +#define MASTER_SYM 568 +#define MASTER_USER_SYM 569 +#define MASTER_USE_GTID_SYM 570 +#define MASTER_HEARTBEAT_PERIOD_SYM 571 +#define MATCH 572 +#define MAX_CONNECTIONS_PER_HOUR 573 +#define MAX_QUERIES_PER_HOUR 574 +#define MAX_ROWS 575 +#define MAX_SIZE_SYM 576 +#define MAX_SYM 577 +#define MAX_UPDATES_PER_HOUR 578 +#define MAX_STATEMENT_TIME_SYM 579 +#define MAX_USER_CONNECTIONS_SYM 580 +#define MAX_VALUE_SYM 581 +#define MEDIUMBLOB 582 +#define MEDIUMINT 583 +#define MEDIUMTEXT 584 +#define MEDIUM_SYM 585 +#define MEMORY_SYM 586 +#define MERGE_SYM 587 +#define MESSAGE_TEXT_SYM 588 +#define MICROSECOND_SYM 589 +#define MIGRATE_SYM 590 +#define MINUTE_MICROSECOND_SYM 591 +#define MINUTE_SECOND_SYM 592 +#define MINUTE_SYM 593 +#define MIN_ROWS 594 +#define MIN_SYM 595 +#define MODE_SYM 596 +#define MODIFIES_SYM 597 +#define MODIFY_SYM 598 +#define MOD_SYM 599 +#define MONTH_SYM 600 +#define MULTILINESTRING 601 +#define MULTIPOINT 602 +#define MULTIPOLYGON 603 +#define MUTEX_SYM 604 +#define MYSQL_SYM 605 +#define MYSQL_ERRNO_SYM 606 +#define NAMES_SYM 607 +#define NAME_SYM 608 +#define NATIONAL_SYM 609 +#define NATURAL 610 +#define NCHAR_STRING 611 +#define NCHAR_SYM 612 +#define NE 613 +#define NEG 614 +#define NEW_SYM 615 +#define NEXT_SYM 616 +#define NODEGROUP_SYM 617 +#define NONE_SYM 618 +#define NOT2_SYM 619 +#define NOT_SYM 620 +#define NOW_SYM 621 +#define NO_SYM 622 +#define NO_WAIT_SYM 623 +#define NO_WRITE_TO_BINLOG 624 +#define NULL_SYM 625 +#define NUM 626 +#define NUMBER_SYM 627 +#define NUMERIC_SYM 628 +#define NVARCHAR_SYM 629 +#define OFFSET_SYM 630 +#define OLD_PASSWORD_SYM 631 +#define ON 632 +#define ONE_SYM 633 +#define ONLY_SYM 634 +#define ONLINE_SYM 635 +#define OPEN_SYM 636 +#define OPTIMIZE 637 +#define OPTIONS_SYM 638 +#define OPTION 639 +#define OPTIONALLY 640 +#define OR2_SYM 641 +#define ORDER_SYM 642 +#define OR_OR_SYM 643 +#define OR_SYM 644 +#define OUTER 645 +#define OUTFILE 646 +#define OUT_SYM 647 +#define OWNER_SYM 648 +#define PACK_KEYS_SYM 649 +#define PAGE_SYM 650 +#define PAGE_CHECKSUM_SYM 651 +#define PARAM_MARKER 652 +#define PARSER_SYM 653 +#define PARSE_VCOL_EXPR_SYM 654 +#define PARTIAL 655 +#define PARTITION_SYM 656 +#define PARTITIONS_SYM 657 +#define PARTITIONING_SYM 658 +#define PASSWORD_SYM 659 +#define PERSISTENT_SYM 660 +#define PHASE_SYM 661 +#define PLUGINS_SYM 662 +#define PLUGIN_SYM 663 +#define POINT_SYM 664 +#define POLYGON 665 +#define PORT_SYM 666 +#define POSITION_SYM 667 +#define PRECISION 668 +#define PREPARE_SYM 669 +#define PRESERVE_SYM 670 +#define PREV_SYM 671 +#define PRIMARY_SYM 672 +#define PRIVILEGES 673 +#define PROCEDURE_SYM 674 +#define PROCESS 675 +#define PROCESSLIST_SYM 676 +#define PROFILE_SYM 677 +#define PROFILES_SYM 678 +#define PROXY_SYM 679 +#define PURGE 680 +#define QUARTER_SYM 681 +#define QUERY_SYM 682 +#define QUICK 683 +#define RANGE_SYM 684 +#define READS_SYM 685 +#define READ_ONLY_SYM 686 +#define READ_SYM 687 +#define READ_WRITE_SYM 688 +#define REAL 689 +#define REBUILD_SYM 690 +#define RECOVER_SYM 691 +#define REDOFILE_SYM 692 +#define REDO_BUFFER_SIZE_SYM 693 +#define REDUNDANT_SYM 694 +#define REFERENCES 695 +#define REGEXP 696 +#define RELAY 697 +#define RELAYLOG_SYM 698 +#define RELAY_LOG_FILE_SYM 699 +#define RELAY_LOG_POS_SYM 700 +#define RELAY_THREAD 701 +#define RELEASE_SYM 702 +#define RELOAD 703 +#define REMOVE_SYM 704 +#define RENAME 705 +#define REORGANIZE_SYM 706 +#define REPAIR 707 +#define REPEATABLE_SYM 708 +#define REPEAT_SYM 709 +#define REPLACE 710 +#define REPLICATION 711 +#define REQUIRE_SYM 712 +#define RESET_SYM 713 +#define RESIGNAL_SYM 714 +#define RESOURCES 715 +#define RESTORE_SYM 716 +#define RESTRICT 717 +#define RESUME_SYM 718 +#define RETURNED_SQLSTATE_SYM 719 +#define RETURNING_SYM 720 +#define RETURNS_SYM 721 +#define RETURN_SYM 722 +#define REVERSE_SYM 723 +#define REVOKE 724 +#define RIGHT 725 +#define ROLE_SYM 726 +#define ROLLBACK_SYM 727 +#define ROLLUP_SYM 728 +#define ROUTINE_SYM 729 +#define ROWS_SYM 730 +#define ROW_FORMAT_SYM 731 +#define ROW_SYM 732 +#define ROW_COUNT_SYM 733 +#define RTREE_SYM 734 +#define SAVEPOINT_SYM 735 +#define SCHEDULE_SYM 736 +#define SCHEMA_NAME_SYM 737 +#define SECOND_MICROSECOND_SYM 738 +#define SECOND_SYM 739 +#define SECURITY_SYM 740 +#define SELECT_SYM 741 +#define SENSITIVE_SYM 742 +#define SEPARATOR_SYM 743 +#define SERIALIZABLE_SYM 744 +#define SERIAL_SYM 745 +#define SESSION_SYM 746 +#define SERVER_SYM 747 +#define SERVER_OPTIONS 748 +#define SET 749 +#define SET_VAR 750 +#define SHARE_SYM 751 +#define SHIFT_LEFT 752 +#define SHIFT_RIGHT 753 +#define SHOW 754 +#define SHUTDOWN 755 +#define SIGNAL_SYM 756 +#define SIGNED_SYM 757 +#define SIMPLE_SYM 758 +#define SLAVE 759 +#define SLAVES 760 +#define SLAVE_POS_SYM 761 +#define SLOW 762 +#define SMALLINT 763 +#define SNAPSHOT_SYM 764 +#define SOCKET_SYM 765 +#define SOFT_SYM 766 +#define SONAME_SYM 767 +#define SOUNDS_SYM 768 +#define SOURCE_SYM 769 +#define SPATIAL_SYM 770 +#define SPECIFIC_SYM 771 +#define SQLEXCEPTION_SYM 772 +#define SQLSTATE_SYM 773 +#define SQLWARNING_SYM 774 +#define SQL_BIG_RESULT 775 +#define SQL_BUFFER_RESULT 776 +#define SQL_CACHE_SYM 777 +#define SQL_CALC_FOUND_ROWS 778 +#define SQL_NO_CACHE_SYM 779 +#define SQL_SMALL_RESULT 780 +#define SQL_SYM 781 +#define SQL_THREAD 782 +#define REF_SYSTEM_ID_SYM 783 +#define SSL_SYM 784 +#define STARTING 785 +#define STARTS_SYM 786 +#define START_SYM 787 +#define STATEMENT_SYM 788 +#define STATS_AUTO_RECALC_SYM 789 +#define STATS_PERSISTENT_SYM 790 +#define STATS_SAMPLE_PAGES_SYM 791 +#define STATUS_SYM 792 +#define STDDEV_SAMP_SYM 793 +#define STD_SYM 794 +#define STOP_SYM 795 +#define STORAGE_SYM 796 +#define STRAIGHT_JOIN 797 +#define STRING_SYM 798 +#define SUBCLASS_ORIGIN_SYM 799 +#define SUBDATE_SYM 800 +#define SUBJECT_SYM 801 +#define SUBPARTITIONS_SYM 802 +#define SUBPARTITION_SYM 803 +#define SUBSTRING 804 +#define SUM_SYM 805 +#define SUPER_SYM 806 +#define SUSPEND_SYM 807 +#define SWAPS_SYM 808 +#define SWITCHES_SYM 809 +#define SYSDATE 810 +#define TABLES 811 +#define TABLESPACE 812 +#define TABLE_REF_PRIORITY 813 +#define TABLE_SYM 814 +#define TABLE_CHECKSUM_SYM 815 +#define TABLE_NAME_SYM 816 +#define TEMPORARY 817 +#define TEMPTABLE_SYM 818 +#define TERMINATED 819 +#define TEXT_STRING 820 +#define TEXT_SYM 821 +#define THAN_SYM 822 +#define THEN_SYM 823 +#define TIMESTAMP 824 +#define TIMESTAMP_ADD 825 +#define TIMESTAMP_DIFF 826 +#define TIME_SYM 827 +#define TINYBLOB 828 +#define TINYINT 829 +#define TINYTEXT 830 +#define TO_SYM 831 +#define TRAILING 832 +#define TRANSACTION_SYM 833 +#define TRANSACTIONAL_SYM 834 +#define TRIGGERS_SYM 835 +#define TRIGGER_SYM 836 +#define TRIM 837 +#define TRUE_SYM 838 +#define TRUNCATE_SYM 839 +#define TYPES_SYM 840 +#define TYPE_SYM 841 +#define UDF_RETURNS_SYM 842 +#define ULONGLONG_NUM 843 +#define UNCOMMITTED_SYM 844 +#define UNDEFINED_SYM 845 +#define UNDERSCORE_CHARSET 846 +#define UNDOFILE_SYM 847 +#define UNDO_BUFFER_SIZE_SYM 848 +#define UNDO_SYM 849 +#define UNICODE_SYM 850 +#define UNINSTALL_SYM 851 +#define UNION_SYM 852 +#define UNIQUE_SYM 853 +#define UNKNOWN_SYM 854 +#define UNLOCK_SYM 855 +#define UNSIGNED 856 +#define UNTIL_SYM 857 +#define UPDATE_SYM 858 +#define UPGRADE_SYM 859 +#define USAGE 860 +#define USER 861 +#define USE_FRM 862 +#define USE_SYM 863 +#define USING 864 +#define UTC_DATE_SYM 865 +#define UTC_TIMESTAMP_SYM 866 +#define UTC_TIME_SYM 867 +#define VALUES 868 +#define VALUE_SYM 869 +#define VARBINARY 870 +#define VARCHAR 871 +#define VARIABLES 872 +#define VARIANCE_SYM 873 +#define VARYING 874 +#define VAR_SAMP_SYM 875 +#define VIA_SYM 876 +#define VIEW_SYM 877 +#define VIRTUAL_SYM 878 +#define WAIT_SYM 879 +#define WARNINGS 880 +#define WEEK_SYM 881 +#define WEIGHT_STRING_SYM 882 +#define WHEN_SYM 883 +#define WHERE 884 +#define WHILE_SYM 885 +#define WITH 886 +#define WITH_CUBE_SYM 887 +#define WITH_ROLLUP_SYM 888 +#define WORK_SYM 889 +#define WRAPPER_SYM 890 +#define WRITE_SYM 891 +#define X509_SYM 892 +#define XA_SYM 893 +#define XML_SYM 894 +#define XOR 895 +#define YEAR_MONTH_SYM 896 +#define YEAR_SYM 897 +#define ZEROFILL 898 +#define IMPOSSIBLE_ACTION 899 +/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE +typedef union YYSTYPE YYSTYPE; +union YYSTYPE { - -/* Line 1676 of yacc.c */ -#line 948 "/home/buildbot/git/sql/sql_yacc.yy" +#line 948 "/home/buildbot/git/sql/sql_yacc.yy" /* yacc.c:1909 */ int num; ulong ulong_num; @@ -1406,16 +1411,14 @@ enum enum_mysql_timestamp_type date_time_type; DDL_options_st object_ddl_options; - - -/* Line 1676 of yacc.c */ -#line 1413 "/home/buildbot/git/mkdist/sql/sql_yacc.h" -} YYSTYPE; +#line 1415 "/home/buildbot/git/mkdist/sql/sql_yacc.h" /* yacc.c:1909 */ +}; # define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif +int MYSQLparse (THD *thd); +#endif /* !YY_MYSQL_HOME_BUILDBOT_GIT_MKDIST_SQL_SQL_YACC_H_INCLUDED */ diff -Nru mariadb-10.1-10.1.25/sql/sql_yacc.yy mariadb-10.1-10.1.30/sql/sql_yacc.yy --- mariadb-10.1-10.1.25/sql/sql_yacc.yy 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sql_yacc.yy 2017-12-21 15:48:49.000000000 +0000 @@ -1182,6 +1182,7 @@ %token DELAYED_SYM %token DELAY_KEY_WRITE_SYM %token DELETE_SYM /* SQL-2003-R */ +%token DELETE_DOMAIN_ID_SYM %token DESC /* SQL-2003-N */ %token DESCRIBE /* SQL-2003-R */ %token DES_KEY_FILE @@ -1951,6 +1952,7 @@ parse_vcol_expr vcol_opt_specifier vcol_opt_attribute vcol_opt_attribute_list vcol_attribute explainable_command + opt_delete_gtid_domain END_OF_INPUT %type call sp_proc_stmts sp_proc_stmts1 sp_proc_stmt @@ -4678,17 +4680,11 @@ switch (end_ptr[0]) { case 'g': - case 'G': - text_shift_number+=10; - /* fall through */ + case 'G': text_shift_number+=30; break; case 'm': - case 'M': - text_shift_number+=10; - /* fall through */ + case 'M': text_shift_number+=20; break; case 'k': - case 'K': - text_shift_number+=10; - break; + case 'K': text_shift_number+=10; break; default: my_yyabort_error((ER_WRONG_SIZE_NUMBER, MYF(0))); } @@ -5101,12 +5097,8 @@ partition_info *part_info= lex->part_info; if (! lex->is_partition_management()) { - if (part_info->part_type == RANGE_PARTITION) - my_yyabort_error((ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "RANGE", "LESS THAN")); - if (part_info->part_type == LIST_PARTITION) - my_yyabort_error((ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), - "LIST", "IN")); + if (part_info->error_if_requires_values()) + MYSQL_YYABORT; } else part_info->part_type= HASH_PARTITION; @@ -12768,7 +12760,7 @@ { Lex->type|= REFRESH_GENERAL_LOG; } | SLOW LOGS_SYM { Lex->type|= REFRESH_SLOW_LOG; } - | BINARY LOGS_SYM + | BINARY LOGS_SYM opt_delete_gtid_domain { Lex->type|= REFRESH_BINARY_LOG; } | RELAY LOGS_SYM optional_connection_name { @@ -12825,6 +12817,24 @@ | table_list {} ; +opt_delete_gtid_domain: + /* empty */ {} + | DELETE_DOMAIN_ID_SYM '=' '(' delete_domain_id_list ')' + {} + ; +delete_domain_id_list: + /* Empty */ + | delete_domain_id + | delete_domain_id_list ',' delete_domain_id + ; + +delete_domain_id: + ulong_num + { + insert_dynamic(&Lex->delete_gtid_domain, (uchar*) &($1)); + } + ; + optional_flush_tables_arguments: /* empty */ {$$= 0;} | AND_SYM DISABLE_SYM CHECKPOINT_SYM {$$= REFRESH_CHECKPOINT; } diff -Nru mariadb-10.1-10.1.25/sql/structs.h mariadb-10.1-10.1.30/sql/structs.h --- mariadb-10.1-10.1.25/sql/structs.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/structs.h 2017-12-21 15:48:49.000000000 +0000 @@ -204,7 +204,7 @@ typedef struct st_lex_user { LEX_STRING user, host, plugin, auth; LEX_STRING pwtext, pwhash; - bool is_role() { return user.str[0] && !host.str[0]; } + bool is_role() const { return user.str[0] && !host.str[0]; } void set_lex_string(LEX_STRING *l, char *buf) { if (is_role()) diff -Nru mariadb-10.1-10.1.25/sql/sys_vars.cc mariadb-10.1-10.1.30/sql/sys_vars.cc --- mariadb-10.1-10.1.25/sql/sys_vars.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/sys_vars.cc 2017-12-21 15:48:49.000000000 +0000 @@ -370,7 +370,7 @@ static Sys_var_ulong Sys_back_log( "back_log", "The number of outstanding connection requests " - "MariaDB can have. This comes into play when the main MySQL thread " + "MariaDB can have. This comes into play when the main MariaDB thread " "gets very many connection requests in a very short time", AUTO_SET READ_ONLY GLOBAL_VAR(back_log), CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 65535), DEFAULT(150), BLOCK_SIZE(1)); @@ -394,7 +394,7 @@ "binlog_stmt_cache_size", "The size of the statement cache for " "updates to non-transactional engines for the binary log. " "If you often use statements updating a great number of rows, " - "you can increase this to get more performance", + "you can increase this to get more performance.", GLOBAL_VAR(binlog_stmt_cache_size), CMD_LINE(REQUIRED_ARG), VALID_RANGE(IO_SIZE, SIZE_T_MAX), DEFAULT(32768), BLOCK_SIZE(IO_SIZE)); @@ -809,7 +809,15 @@ } static const char *delay_key_write_names[]= { "OFF", "ON", "ALL", NullS }; static Sys_var_enum Sys_delay_key_write( - "delay_key_write", "Type of DELAY_KEY_WRITE", + "delay_key_write", "Specifies how MyISAM tables handles CREATE " + "TABLE DELAY_KEY_WRITE. If set to ON, the default, any DELAY KEY " + "WRITEs are honored. The key buffer is then flushed only when the " + "table closes, speeding up writes. MyISAM tables should be " + "automatically checked upon startup in this case, and " + "--external locking should not be used, as it can lead to index " + "corruption. If set to OFF, DELAY KEY WRITEs are ignored, while if " + "set to ALL, all new opened tables are treated as if created with " + "DELAY KEY WRITEs enabled.", GLOBAL_VAR(delay_key_write_options), CMD_LINE(OPT_ARG), delay_key_write_names, DEFAULT(DELAY_KEY_WRITE_ON), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), @@ -819,7 +827,7 @@ "delayed_insert_limit", "After inserting delayed_insert_limit rows, the INSERT DELAYED " "handler will check if there are any SELECT statements pending. " - "If so, it allows these to execute before continuing", + "If so, it allows these to execute before continuing.", GLOBAL_VAR(delayed_insert_limit), CMD_LINE(REQUIRED_ARG), VALID_RANGE(1, UINT_MAX), DEFAULT(DELAYED_LIMIT), BLOCK_SIZE(1)); @@ -2331,7 +2339,7 @@ "optimization, but may produce very bad query plans. If set to 0, " "the system will automatically pick a reasonable value; if set to " "63, the optimizer will switch to the original find_best search. " - "NOTE: The value 63 and its associated behaviour is deprecated", + "NOTE: The value 63 and its associated behaviour is deprecated.", SESSION_VAR(optimizer_search_depth), CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, MAX_TABLES+2), DEFAULT(MAX_TABLES+1), BLOCK_SIZE(1), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), @@ -2413,7 +2421,7 @@ static Sys_var_uint Sys_protocol_version( "protocol_version", - "The version of the client/server protocol used by the MySQL server", + "The version of the client/server protocol used by the MariaDB server", READ_ONLY GLOBAL_VAR(protocol_version), CMD_LINE_HELP_ONLY, VALID_RANGE(0, ~0), DEFAULT(PROTOCOL_VERSION), BLOCK_SIZE(1)); @@ -2864,7 +2872,7 @@ "For example, in row based replication attempts to delete rows that " "doesn't exist will be ignored. " "In STRICT mode, replication will stop on any unexpected difference " - "between the master and the slave", + "between the master and the slave.", GLOBAL_VAR(slave_exec_mode_options), CMD_LINE(REQUIRED_ARG), slave_exec_mode_names, DEFAULT(SLAVE_EXEC_MODE_STRICT)); @@ -3350,14 +3358,17 @@ static Sys_var_tx_read_only Sys_tx_read_only( - "tx_read_only", "Set default transaction access mode to read only.", + "tx_read_only", "Default transaction access mode. If set to OFF, " + "the default, access is read/write. If set to ON, access is read-only. " + "The SET TRANSACTION statement can also change the value of this variable. " + "See SET TRANSACTION and START TRANSACTION.", SESSION_VAR(tx_read_only), NO_CMD_LINE, DEFAULT(0), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_tx_read_only)); static Sys_var_ulonglong Sys_tmp_table_size( "tmp_table_size", - "If an internal in-memory temporary table exceeds this size, MySQL " - "will automatically convert it to an on-disk MyISAM or Aria table", + "If an internal in-memory temporary table exceeds this size, MariaDB " + "will automatically convert it to an on-disk MyISAM or Aria table.", SESSION_VAR(tmp_table_size), CMD_LINE(REQUIRED_ARG), VALID_RANGE(1024, (ulonglong)~(intptr)0), DEFAULT(16*1024*1024), BLOCK_SIZE(1)); @@ -3371,27 +3382,35 @@ static char *server_version_ptr; static Sys_var_charptr Sys_version( - "version", "Server version", + "version", "Server version number. It may also include a suffix " + "with configuration or build information. -debug indicates " + "debugging support was enabled on the server, and -log indicates " + "at least one of the binary log, general log or slow query log are " + "enabled, for example 10.1.1-MariaDB-mariadb1precise-log.", READ_ONLY GLOBAL_VAR(server_version_ptr), CMD_LINE_HELP_ONLY, IN_SYSTEM_CHARSET, DEFAULT(server_version)); static char *server_version_comment_ptr; static Sys_var_charptr Sys_version_comment( - "version_comment", "version_comment", + "version_comment", "Value of the COMPILATION_COMMENT option " + "specified by CMake when building MariaDB, for example " + "mariadb.org binary distribution.", READ_ONLY GLOBAL_VAR(server_version_comment_ptr), CMD_LINE_HELP_ONLY, IN_SYSTEM_CHARSET, DEFAULT(MYSQL_COMPILATION_COMMENT)); static char *server_version_compile_machine_ptr; static Sys_var_charptr Sys_version_compile_machine( - "version_compile_machine", "version_compile_machine", + "version_compile_machine", "The machine type or architecture " + "MariaDB was built on, for example i686.", READ_ONLY GLOBAL_VAR(server_version_compile_machine_ptr), CMD_LINE_HELP_ONLY, IN_SYSTEM_CHARSET, DEFAULT(DEFAULT_MACHINE)); static char *server_version_compile_os_ptr; static Sys_var_charptr Sys_version_compile_os( - "version_compile_os", "version_compile_os", + "version_compile_os", "Operating system that MariaDB was built " + "on, for example debian-linux-gnu.", READ_ONLY GLOBAL_VAR(server_version_compile_os_ptr), CMD_LINE_HELP_ONLY, IN_SYSTEM_CHARSET, DEFAULT(SYSTEM_TYPE)); @@ -3555,24 +3574,34 @@ } static Sys_var_bit Sys_autocommit( - "autocommit", "autocommit", + "autocommit", "If set to 1, the default, all queries are committed " + "immediately. If set to 0, they are only committed upon a COMMIT statement" + ", or rolled back with a ROLLBACK statement. If autocommit is set to 0, " + "and then changed to 1, all open transactions are immediately committed.", NO_SET_STMT SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_AUTOCOMMIT, DEFAULT(TRUE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(fix_autocommit)); export sys_var *Sys_autocommit_ptr= &Sys_autocommit; // for sql_yacc.yy static Sys_var_mybool Sys_big_tables( - "big_tables", "Allow big result sets by saving all " - "temporary sets on file (Solves most 'table full' errors)", + "big_tables", "Old variable, which if set to 1, allows large result sets " + "by saving all temporary sets to disk, avoiding 'table full' errors. No " + "longer needed, as the server now handles this automatically. " + "sql_big_tables is a synonym.", SESSION_VAR(big_tables), CMD_LINE(OPT_ARG), DEFAULT(FALSE)); static Sys_var_bit Sys_big_selects( - "sql_big_selects", "sql_big_selects", + "sql_big_selects", "If set to 0, MariaDB will not perform large SELECTs." + " See max_join_size for details. If max_join_size is set to anything but " + "DEFAULT, sql_big_selects is automatically set to 0. If sql_big_selects " + "is again set, max_join_size will be ignored.", SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_BIG_SELECTS, DEFAULT(FALSE)); static Sys_var_bit Sys_log_off( - "sql_log_off", "sql_log_off", + "sql_log_off", "If set to 1 (0 is the default), no logging to the general " + "query log is done for the client. Only clients with the SUPER privilege " + "can update this variable.", NO_SET_STMT SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_LOG_OFF, DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_has_super)); @@ -3629,50 +3658,80 @@ return FALSE; } -static Sys_var_mybool Sys_log_binlog( - "sql_log_bin", "Controls whether logging to the binary log is done", +static Sys_var_mybool Sys_log_binlog( + "sql_log_bin", "If set to 0 (1 is the default), no logging to the binary " + "log is done for the client. Only clients with the SUPER privilege can " + "update this variable. Can have unintended consequences if set globally, " + "see SET SQL_LOG_BIN. Starting MariaDB 10.1.7, this variable does not " + "affect the replication of events in a Galera cluster.", SESSION_VAR(sql_log_bin), NO_CMD_LINE, DEFAULT(TRUE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sql_log_bin), ON_UPDATE(fix_sql_log_bin_after_update)); static Sys_var_bit Sys_sql_warnings( - "sql_warnings", "sql_warnings", + "sql_warnings", "If set to 1, single-row INSERTs will produce a string " + "containing warning information if a warning occurs.", SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_WARNINGS, DEFAULT(FALSE)); static Sys_var_bit Sys_sql_notes( - "sql_notes", "sql_notes", + "sql_notes", "If set to 1, the default, warning_count is incremented each " + "time a Note warning is encountered. If set to 0, Note warnings are not " + "recorded. mysqldump has outputs to set this variable to 0 so that no " + "unnecessary increments occur when data is reloaded.", SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_SQL_NOTES, DEFAULT(TRUE)); static Sys_var_bit Sys_auto_is_null( - "sql_auto_is_null", "sql_auto_is_null", + "sql_auto_is_null", "If set to 1, the query SELECT * FROM table_name WHERE " + "auto_increment_column IS NULL will return an auto-increment that has just " + "been successfully inserted, the same as the LAST_INSERT_ID() function. Some" + " ODBC programs make use of this IS NULL comparison.", SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_AUTO_IS_NULL, DEFAULT(FALSE), NO_MUTEX_GUARD, IN_BINLOG); static Sys_var_bit Sys_safe_updates( - "sql_safe_updates", "sql_safe_updates", + "sql_safe_updates", "If set to 1, UPDATEs and DELETEs need either a key in " + "the WHERE clause, or a LIMIT clause, or else they will aborted. Prevents " + "the common mistake of accidentally deleting or updating every row in a table.", SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_SAFE_UPDATES, DEFAULT(FALSE)); static Sys_var_bit Sys_buffer_results( - "sql_buffer_result", "sql_buffer_result", + "sql_buffer_result", "If set to 1 (0 is default), results from SELECT " + "statements are always placed into temporary tables. This can help the " + "server when it takes a long time to send the results to the client by " + "allowing the table locks to be freed early.", SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_BUFFER_RESULT, DEFAULT(FALSE)); static Sys_var_bit Sys_quote_show_create( - "sql_quote_show_create", "sql_quote_show_create", + "sql_quote_show_create", "If set to 1, the default, the server will " + "quote identifiers for SHOW CREATE DATABASE, SHOW CREATE TABLE and " + "SHOW CREATE VIEW statements. Quoting is disabled if set to 0. Enable " + "to ensure replications works when identifiers require quoting.", SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_QUOTE_SHOW_CREATE, DEFAULT(TRUE)); static Sys_var_bit Sys_foreign_key_checks( - "foreign_key_checks", "foreign_key_checks", + "foreign_key_checks", "If set to 1 (the default) foreign key constraints" + " (including ON UPDATE and ON DELETE behavior) InnoDB tables are checked," + " while if set to 0, they are not checked. 0 is not recommended for normal " + "use, though it can be useful in situations where you know the data is " + "consistent, but want to reload data in a different order from that that " + "specified by parent/child relationships. Setting this variable to 1 does " + "not retrospectively check for inconsistencies introduced while set to 0.", SESSION_VAR(option_bits), NO_CMD_LINE, REVERSE(OPTION_NO_FOREIGN_KEY_CHECKS), DEFAULT(TRUE), NO_MUTEX_GUARD, IN_BINLOG); static Sys_var_bit Sys_unique_checks( - "unique_checks", "unique_checks", + "unique_checks", "If set to 1, the default, secondary indexes in InnoDB " + "tables are performed. If set to 0, storage engines can (but are not " + "required to) assume that duplicate keys are not present in input data. " + "Set to 0 to speed up imports of large tables to InnoDB. The storage " + "engine will still issue a duplicate key error if it detects one, even " + "if set to 0.", SESSION_VAR(option_bits), NO_CMD_LINE, REVERSE(OPTION_RELAXED_UNIQUE_CHECKS), DEFAULT(TRUE), NO_MUTEX_GUARD, IN_BINLOG); @@ -3686,13 +3745,16 @@ } static Sys_var_bit Sys_profiling( - "profiling", "profiling", + "profiling", "If set to 1 (0 is default), statement profiling will be " + "enabled. See SHOW PROFILES and SHOW PROFILE.", NO_SET_STMT SESSION_VAR(option_bits), NO_CMD_LINE, OPTION_PROFILING, DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(update_profiling)); static Sys_var_ulong Sys_profiling_history_size( - "profiling_history_size", "Limit of query profiling memory", + "profiling_history_size", "Number of statements about which profiling " + "information is maintained. If set to 0, no profiles are stored. " + "See SHOW PROFILES.", NO_SET_STMT SESSION_VAR(profiling_history_size), CMD_LINE(REQUIRED_ARG), VALID_RANGE(0, 100), DEFAULT(15), BLOCK_SIZE(1)); #endif @@ -3726,7 +3788,11 @@ } static Sys_var_bit Sys_skip_replication( - "skip_replication", "skip_replication", + "skip_replication", "Changes are logged into the binary log with the " + "@@skip_replication flag set. Such events will not be replicated by " + "slaves that run with --replicate-events-marked-for-skip set different " + "from its default of REPLICATE. See Selectively skipping replication " + "of binlog events for more information.", NO_SET_STMT SESSION_ONLY(option_bits), NO_CMD_LINE, OPTION_SKIP_REPLICATION, DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, @@ -4069,43 +4135,61 @@ ON_CHECK(check_log_path), ON_UPDATE(fix_slow_log_file)); static Sys_var_have Sys_have_compress( - "have_compress", "have_compress", + "have_compress", "If the zlib compression library is accessible to the " + "server, this will be set to YES, otherwise it will be NO. The COMPRESS() " + "and UNCOMPRESS() functions will only be available if set to YES.", READ_ONLY GLOBAL_VAR(have_compress), NO_CMD_LINE); static Sys_var_have Sys_have_crypt( - "have_crypt", "have_crypt", + "have_crypt", "If the crypt() system call is available this variable will " + "be set to YES, otherwise it will be set to NO. If set to NO, the " + "ENCRYPT() function cannot be used.", READ_ONLY GLOBAL_VAR(have_crypt), NO_CMD_LINE); static Sys_var_have Sys_have_dlopen( - "have_dynamic_loading", "have_dynamic_loading", + "have_dynamic_loading", "If the server supports dynamic loading of plugins, " + "will be set to YES, otherwise will be set to NO.", READ_ONLY GLOBAL_VAR(have_dlopen), NO_CMD_LINE); static Sys_var_have Sys_have_geometry( - "have_geometry", "have_geometry", + "have_geometry", "If the server supports spatial data types, will be set to " + "YES, otherwise will be set to NO.", READ_ONLY GLOBAL_VAR(have_geometry), NO_CMD_LINE); static Sys_var_have Sys_have_openssl( - "have_openssl", "have_openssl", + "have_openssl", "Comparing have_openssl with have_ssl will indicate whether " + "YaSSL or openssl was used. If YaSSL, have_ssl will be YES, but have_openssl " + "will be NO.", READ_ONLY GLOBAL_VAR(have_openssl), NO_CMD_LINE); static Sys_var_have Sys_have_profiling( - "have_profiling", "have_profiling", + "have_profiling", "If statement profiling is available, will be set to YES, " + "otherwise will be set to NO. See SHOW PROFILES and SHOW PROFILE.", READ_ONLY GLOBAL_VAR(have_profiling), NO_CMD_LINE); static Sys_var_have Sys_have_query_cache( - "have_query_cache", "have_query_cache", + "have_query_cache", "If the server supports the query cache, will be set to " + "YES, otherwise will be set to NO.", READ_ONLY GLOBAL_VAR(have_query_cache), NO_CMD_LINE); static Sys_var_have Sys_have_rtree_keys( - "have_rtree_keys", "have_rtree_keys", + "have_rtree_keys", "If RTREE indexes (used for spatial indexes) " + "are available, will be set to YES, otherwise will be set to NO.", READ_ONLY GLOBAL_VAR(have_rtree_keys), NO_CMD_LINE); static Sys_var_have Sys_have_ssl( - "have_ssl", "have_ssl", + "have_ssl", "If the server supports secure connections, will be set to YES, " + "otherwise will be set to NO. If set to DISABLED, the server was compiled with " + "TLS support, but was not started with TLS support (see the mysqld options). " + "See also have_openssl.", READ_ONLY GLOBAL_VAR(have_ssl), NO_CMD_LINE); static Sys_var_have Sys_have_symlink( - "have_symlink", "have_symlink", + "have_symlink", "If symbolic link support is enabled, will be set to YES, " + "otherwise will be set to NO. Required for the INDEX DIRECTORY and DATA " + "DIRECTORY table options (see CREATE TABLE) and Windows symlink support. " + "Will be set to DISABLED if the server is started with the " + "--skip-symbolic-links option.", READ_ONLY GLOBAL_VAR(have_symlink), NO_CMD_LINE); static bool fix_log_state(sys_var *self, THD *thd, enum_var_type type); @@ -4113,7 +4197,7 @@ static Sys_var_mybool Sys_general_log( "general_log", "Log connections and queries to a table or log file. " "Defaults logging to a file 'hostname'.log or a table mysql.general_log" - "if --log-output=TABLE is used", + "if --log-output=TABLE is used.", GLOBAL_VAR(opt_log), CMD_LINE(OPT_ARG), DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(fix_log_state)); @@ -4122,7 +4206,7 @@ "slow_query_log", "Log slow queries to a table or log file. Defaults logging to a file " "'hostname'-slow.log or a table mysql.slow_log if --log-output=TABLE is " - "used. Must be enabled to activate other slow log options", + "used. Must be enabled to activate other slow log options.", SESSION_VAR(sql_log_slow), CMD_LINE(OPT_ARG), DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(fix_log_state)); @@ -4194,12 +4278,12 @@ static Sys_var_mybool Sys_log_slave_updates( "log_slave_updates", "Tells the slave to log the updates from " "the slave thread to the binary log. You will need to turn it on if " - "you plan to daisy-chain the slaves", + "you plan to daisy-chain the slaves.", READ_ONLY GLOBAL_VAR(opt_log_slave_updates), CMD_LINE(OPT_ARG), DEFAULT(0)); static Sys_var_charptr Sys_relay_log( - "relay_log", "The location and name to use for relay logs", + "relay_log", "The location and name to use for relay logs.", READ_ONLY GLOBAL_VAR(opt_relay_logname), CMD_LINE(REQUIRED_ARG), IN_FS_CHARSET, DEFAULT(0)); @@ -4210,7 +4294,7 @@ */ static Sys_var_charptr Sys_relay_log_index( "relay_log_index", "The location and name to use for the file " - "that keeps a list of the last relay logs", + "that keeps a list of the last relay logs.", READ_ONLY GLOBAL_VAR(relay_log_index), NO_CMD_LINE, IN_FS_CHARSET, DEFAULT(0)); @@ -4238,20 +4322,20 @@ static Sys_var_charptr Sys_relay_log_info_file( "relay_log_info_file", "The location and name of the file that " - "remembers where the SQL replication thread is in the relay logs", + "remembers where the SQL replication thread is in the relay logs.", READ_ONLY GLOBAL_VAR(relay_log_info_file), CMD_LINE(REQUIRED_ARG), IN_FS_CHARSET, DEFAULT(0)); static Sys_var_mybool Sys_relay_log_purge( "relay_log_purge", "if disabled - do not purge relay logs. " - "if enabled - purge them as soon as they are no more needed", + "if enabled - purge them as soon as they are no more needed.", GLOBAL_VAR(relay_log_purge), CMD_LINE(OPT_ARG), DEFAULT(TRUE)); static Sys_var_mybool Sys_relay_log_recovery( "relay_log_recovery", "Enables automatic relay log recovery " "right after the database startup, which means that the IO Thread " "starts re-fetching from the master right after the last transaction " - "processed", + "processed.", GLOBAL_VAR(relay_log_recovery), CMD_LINE(OPT_ARG), DEFAULT(FALSE)); @@ -4655,7 +4739,9 @@ NO_MUTEX_GUARD, IN_BINLOG, ON_CHECK(check_locale)); static Sys_var_tz Sys_time_zone( - "time_zone", "time_zone", + "time_zone", "The current time zone, used to initialize the time " + "zone for a client when it connects. Set to SYSTEM by default, in " + "which the client uses the system time zone value.", SESSION_VAR(time_zone), NO_CMD_LINE, DEFAULT(&default_tz), NO_MUTEX_GUARD, IN_BINLOG); @@ -4672,7 +4758,8 @@ ON_CHECK(wsrep_provider_check), ON_UPDATE(wsrep_provider_update)); static Sys_var_charptr Sys_wsrep_provider_options( - "wsrep_provider_options", "provider specific options", + "wsrep_provider_options", "Semicolon (;) separated list of wsrep " + "options (see wsrep_provider_options documentation).", PREALLOCATED GLOBAL_VAR(wsrep_provider_options), CMD_LINE(REQUIRED_ARG), IN_SYSTEM_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG, @@ -4703,13 +4790,17 @@ ON_UPDATE(wsrep_cluster_address_update)); static Sys_var_charptr Sys_wsrep_node_name ( - "wsrep_node_name", "Node name", + "wsrep_node_name", "Name of this node. This name can be used in " + "wsrep_sst_donor as a preferred donor. Note that multiple nodes " + "in a cluster can have the same name.", PREALLOCATED GLOBAL_VAR(wsrep_node_name), CMD_LINE(REQUIRED_ARG), IN_SYSTEM_CHARSET, DEFAULT(glob_hostname), NO_MUTEX_GUARD, NOT_IN_BINLOG, wsrep_node_name_check, wsrep_node_name_update); static Sys_var_charptr Sys_wsrep_node_address ( - "wsrep_node_address", "Node address", + "wsrep_node_address", "Specifies the node's network address, in " + "the format ip address[:port]. Used in situations where autoguessing " + "is not reliable. As of MariaDB 10.1.8, supports IPv6.", PREALLOCATED GLOBAL_VAR(wsrep_node_address), CMD_LINE(REQUIRED_ARG), IN_SYSTEM_CHARSET, DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG, @@ -4726,7 +4817,7 @@ GLOBAL_VAR(wsrep_slave_threads), CMD_LINE(REQUIRED_ARG), VALID_RANGE(1, 512), DEFAULT(1), BLOCK_SIZE(1), &PLock_wsrep_slave_threads, NOT_IN_BINLOG, - ON_CHECK(wsrep_slave_threads_check), + ON_CHECK(NULL), ON_UPDATE(wsrep_slave_threads_update)); static Sys_var_charptr Sys_wsrep_dbug_option( @@ -4804,7 +4895,8 @@ "wsrep_on", "To enable wsrep replication ", SESSION_VAR(wsrep_on), CMD_LINE(OPT_ARG), DEFAULT(FALSE), - NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), + NO_MUTEX_GUARD, NOT_IN_BINLOG, + ON_CHECK(wsrep_on_check), ON_UPDATE(wsrep_on_update)); static Sys_var_charptr Sys_wsrep_start_position ( @@ -4838,21 +4930,13 @@ GLOBAL_VAR(wsrep_certify_nonPK), CMD_LINE(OPT_ARG), DEFAULT(TRUE)); -static bool fix_wsrep_causal_reads(sys_var *self, THD* thd, enum_var_type var_type) -{ - if (var_type == OPT_GLOBAL) - wsrep_causal_reads_update(&global_system_variables); - else - wsrep_causal_reads_update(&thd->variables); - return false; -} static Sys_var_mybool Sys_wsrep_causal_reads( "wsrep_causal_reads", "Setting this variable is equivalent " "to setting wsrep_sync_wait READ flag", SESSION_VAR(wsrep_causal_reads), CMD_LINE(OPT_ARG, OPT_WSREP_CAUSAL_READS), DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), - ON_UPDATE(fix_wsrep_causal_reads), + ON_UPDATE(wsrep_causal_reads_update), DEPRECATED("'@@wsrep_sync_wait=1'")); static Sys_var_uint Sys_wsrep_sync_wait( @@ -4927,7 +5011,7 @@ CMD_LINE(OPT_ARG), DEFAULT(FALSE)); static Sys_var_mybool Sys_wsrep_restart_slave( - "wsrep_restart_slave", "Should MySQL slave be restarted automatically, when node joins back to cluster", + "wsrep_restart_slave", "Should MariaDB slave be restarted automatically, when node joins back to cluster", GLOBAL_VAR(wsrep_restart_slave), CMD_LINE(OPT_ARG), DEFAULT(FALSE)); static Sys_var_mybool Sys_wsrep_dirty_reads( @@ -4954,7 +5038,7 @@ static char *wsrep_patch_version_ptr; static Sys_var_charptr Sys_wsrep_patch_version( - "wsrep_patch_version", "wsrep patch version", + "wsrep_patch_version", "Wsrep patch version, for example wsrep_25.10.", READ_ONLY GLOBAL_VAR(wsrep_patch_version_ptr), CMD_LINE_HELP_ONLY, IN_SYSTEM_CHARSET, DEFAULT(WSREP_PATCH_VERSION)); diff -Nru mariadb-10.1-10.1.25/sql/table.cc mariadb-10.1-10.1.30/sql/table.cc --- mariadb-10.1-10.1.25/sql/table.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/table.cc 2017-12-21 15:48:49.000000000 +0000 @@ -4715,20 +4715,29 @@ int TABLE_LIST::view_check_option(THD *thd, bool ignore_failure) { - if (check_option && check_option->val_int() == 0) + if (check_option) { - TABLE_LIST *main_view= top_table(); - if (ignore_failure) + Counting_error_handler ceh; + thd->push_internal_handler(&ceh); + bool res= check_option->val_int() == 0; + thd->pop_internal_handler(); + if (ceh.errors) + return(VIEW_CHECK_ERROR); + if (res) { - push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, - ER_VIEW_CHECK_FAILED, - ER_THD(thd, ER_VIEW_CHECK_FAILED), - main_view->view_db.str, main_view->view_name.str); - return(VIEW_CHECK_SKIP); + TABLE_LIST *main_view= top_table(); + if (ignore_failure) + { + push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_VIEW_CHECK_FAILED, + ER_THD(thd, ER_VIEW_CHECK_FAILED), + main_view->view_db.str, main_view->view_name.str); + return(VIEW_CHECK_SKIP); + } + my_error(ER_VIEW_CHECK_FAILED, MYF(0), main_view->view_db.str, + main_view->view_name.str); + return(VIEW_CHECK_ERROR); } - my_error(ER_VIEW_CHECK_FAILED, MYF(0), main_view->view_db.str, - main_view->view_name.str); - return(VIEW_CHECK_ERROR); } return(VIEW_CHECK_OK); } @@ -5339,7 +5348,8 @@ Item_field *item= new (thd->mem_root) Item_field(thd, &select->context, *ptr); if (item && thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY && - !thd->lex->in_sum_func && select->cur_pos_in_select_list != UNDEF_POS) + !thd->lex->in_sum_func && select->cur_pos_in_select_list != UNDEF_POS && + select->join) { select->join->non_agg_fields.push_back(item); item->marker= select->cur_pos_in_select_list; @@ -6327,6 +6337,14 @@ might be reused. */ key_part_info->store_length= key_part_info->length; + /* + For BIT fields null_bit is not set to 0 even if the field is defined + as NOT NULL, look at Field_bit::Field_bit + */ + if (!field->real_maybe_null()) + { + key_part_info->null_bit= 0; + } /* The total store length of the key part is the raw length of the field + diff -Nru mariadb-10.1-10.1.25/sql/table.h mariadb-10.1-10.1.30/sql/table.h --- mariadb-10.1-10.1.25/sql/table.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/table.h 2017-12-21 15:48:49.000000000 +0000 @@ -35,6 +35,7 @@ /* Structs that defines the TABLE */ class Item; /* Needed by ORDER */ +typedef Item (*Item_ptr); class Item_subselect; class Item_field; class GRANT_TABLE; @@ -2528,7 +2529,7 @@ table_map sj_depends_on; /* Outer non-trivially correlated tables */ table_map sj_corr_tables; - List sj_outer_expr_list; + List sj_outer_expr_list; /** True if this join nest node is completely covered by the query execution plan. This means two things. diff -Nru mariadb-10.1-10.1.25/sql/threadpool_unix.cc mariadb-10.1-10.1.30/sql/threadpool_unix.cc --- mariadb-10.1-10.1.25/sql/threadpool_unix.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/threadpool_unix.cc 2017-12-21 15:48:49.000000000 +0000 @@ -463,7 +463,7 @@ { /* Wait timeout exceeded, kill connection. */ mysql_mutex_lock(&thd->LOCK_thd_data); - thd->killed = KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); post_kill_notification(thd); mysql_mutex_unlock(&thd->LOCK_thd_data); } @@ -982,24 +982,26 @@ if (pipe(thread_group->shutdown_pipe)) { - DBUG_VOID_RETURN; + goto end; } /* Wake listener */ if (io_poll_associate_fd(thread_group->pollfd, thread_group->shutdown_pipe[0], NULL)) { - DBUG_VOID_RETURN; + goto end; + } + { + char c= 0; + if (write(thread_group->shutdown_pipe[1], &c, 1) < 0) + goto end; } - char c= 0; - if (write(thread_group->shutdown_pipe[1], &c, 1) < 0) - DBUG_VOID_RETURN; - /* Wake all workers. */ while(wake_thread(thread_group) == 0) { } +end: mysql_mutex_unlock(&thread_group->mutex); DBUG_VOID_RETURN; diff -Nru mariadb-10.1-10.1.25/sql/threadpool_win.cc mariadb-10.1-10.1.30/sql/threadpool_win.cc --- mariadb-10.1-10.1.25/sql/threadpool_win.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/threadpool_win.cc 2017-12-21 15:48:49.000000000 +0000 @@ -613,7 +613,7 @@ if (timeout <= now()) { - con->thd->killed = KILL_CONNECTION; + con->thd->set_killed(KILL_CONNECTION); if(con->thd->net.vio) vio_shutdown(con->thd->net.vio, SD_BOTH); } diff -Nru mariadb-10.1-10.1.25/sql/transaction.cc mariadb-10.1-10.1.30/sql/transaction.cc --- mariadb-10.1-10.1.25/sql/transaction.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/transaction.cc 2017-12-21 15:48:49.000000000 +0000 @@ -151,11 +151,10 @@ thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG); /* - The following set should not be needed as the flag should always be 0 - when we come here. We should at some point change this to an assert. + The following set should not be needed as transaction state should + already be reset. We should at some point change this to an assert. */ - thd->transaction.all.modified_non_trans_table= FALSE; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); thd->has_waiter= false; thd->waiting_on_group_commit= false; @@ -251,8 +250,7 @@ else (void) RUN_HOOK(transaction, after_commit, (thd, FALSE)); thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG); - thd->transaction.all.modified_non_trans_table= FALSE; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); thd->lex->start_transaction_opt= 0; DBUG_RETURN(MY_TEST(res)); @@ -299,8 +297,7 @@ } thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG); - thd->transaction.all.modified_non_trans_table= FALSE; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); /* Upon implicit commit, reset the current transaction @@ -345,8 +342,7 @@ thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG); /* Reset the binlog transaction marker */ thd->variables.option_bits&= ~OPTION_GTID_BEGIN; - thd->transaction.all.modified_non_trans_table= FALSE; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); thd->lex->start_transaction_opt= 0; DBUG_RETURN(MY_TEST(res)); @@ -390,8 +386,7 @@ preserve backward compatibility. */ thd->variables.option_bits&= ~(OPTION_KEEP_LOG); - thd->transaction.all.modified_non_trans_table= false; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); /* Rollback should clear transaction_rollback_request flag. */ DBUG_ASSERT(! thd->transaction_rollback_request); @@ -427,6 +422,8 @@ */ DBUG_ASSERT(! thd->in_sub_stmt); + thd->merge_unsafe_rollback_flags(); + if (thd->transaction.stmt.ha_list) { if (WSREP_ON) @@ -481,6 +478,8 @@ */ DBUG_ASSERT(! thd->in_sub_stmt); + thd->merge_unsafe_rollback_flags(); + if (thd->transaction.stmt.ha_list) { if (WSREP_ON) @@ -904,8 +903,7 @@ } thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG); - thd->transaction.all.modified_non_trans_table= FALSE; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); thd->server_status&= ~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY); DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS")); @@ -960,8 +958,7 @@ res= xa_trans_force_rollback(thd); thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG); - thd->transaction.all.modified_non_trans_table= FALSE; - thd->transaction.all.m_unsafe_rollback_flags&= ~THD_TRANS::DID_WAIT; + thd->transaction.all.reset(); thd->server_status&= ~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY); DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS")); diff -Nru mariadb-10.1-10.1.25/sql/uniques.cc mariadb-10.1-10.1.30/sql/uniques.cc --- mariadb-10.1-10.1.25/sql/uniques.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/uniques.cc 2017-12-21 15:48:49.000000000 +0000 @@ -100,6 +100,9 @@ */ max_elements= (ulong) (max_in_memory_size / ALIGN_SIZE(sizeof(TREE_ELEMENT)+size)); + if (!max_elements) + max_elements= 1; + (void) open_cached_file(&file, mysql_tmpdir,TEMP_PREFIX, DISK_BUFFER_SIZE, MYF(MY_WME)); } @@ -483,7 +486,7 @@ <> 0 error */ -static bool merge_walk(uchar *merge_buffer, ulong merge_buffer_size, +static bool merge_walk(uchar *merge_buffer, size_t merge_buffer_size, uint key_length, BUFFPEK *begin, BUFFPEK *end, tree_walk_action walk_action, void *walk_action_arg, qsort_cmp2 compare, void *compare_arg, @@ -492,7 +495,7 @@ BUFFPEK_COMPARE_CONTEXT compare_context = { compare, compare_arg }; QUEUE queue; if (end <= begin || - merge_buffer_size < (ulong) (key_length * (end - begin + 1)) || + merge_buffer_size < (size_t) (key_length * (end - begin + 1)) || init_queue(&queue, (uint) (end - begin), offsetof(BUFFPEK, key), 0, buffpek_compare, &compare_context, 0, 0)) return 1; @@ -642,15 +645,20 @@ return 1; if (flush_io_cache(&file) || reinit_io_cache(&file, READ_CACHE, 0L, 0, 0)) return 1; - size_t buff_sz= (max_in_memory_size / full_size + 1) * full_size; - if (!(merge_buffer = (uchar *)my_malloc(buff_sz, MYF(MY_THREAD_SPECIFIC|MY_WME)))) + /* + merge_buffer must fit at least MERGEBUFF2 + 1 keys, because + merge_index() can merge that many BUFFPEKs at once. The extra space for one key + is needed when a piece of merge buffer is re-read, see merge_walk() + */ + size_t buff_sz= MY_MAX(MERGEBUFF2+1, max_in_memory_size/full_size+1) * full_size; + if (!(merge_buffer = (uchar *)my_malloc(buff_sz, MYF(MY_WME)))) return 1; if (buff_sz < full_size * (file_ptrs.elements + 1UL)) res= merge(table, merge_buffer, buff_sz >= full_size * MERGEBUFF2) ; - + if (!res) - { - res= merge_walk(merge_buffer, (ulong) max_in_memory_size, full_size, + { + res= merge_walk(merge_buffer, buff_sz, full_size, (BUFFPEK *) file_ptrs.buffer, (BUFFPEK *) file_ptrs.buffer + file_ptrs.elements, action, walk_action_arg, @@ -703,8 +711,8 @@ full_size; sort_param.min_dupl_count= min_dupl_count; sort_param.res_length= 0; - sort_param.max_keys_per_buffer= - (uint) (max_in_memory_size / sort_param.sort_length); + sort_param.max_keys_per_buffer= + (uint) MY_MAX((max_in_memory_size / sort_param.sort_length), MERGEBUFF2); sort_param.not_killable= 1; sort_param.unique_buff= buff +(sort_param.max_keys_per_buffer * diff -Nru mariadb-10.1-10.1.25/sql/wsrep_applier.cc mariadb-10.1-10.1.30/sql/wsrep_applier.cc --- mariadb-10.1-10.1.25/sql/wsrep_applier.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_applier.cc 2017-12-21 15:48:49.000000000 +0000 @@ -218,12 +218,15 @@ { THD* const thd((THD*)ctx); + assert(thd->wsrep_apply_toi == false); + // Allow tests to block the applier thread using the DBUG facilities. DBUG_EXECUTE_IF("sync.wsrep_apply_cb", { const char act[]= "now " - "wait_for signal.wsrep_apply_cb"; + "SIGNAL sync.wsrep_apply_cb_reached " + "WAIT_FOR signal.wsrep_apply_cb"; DBUG_ASSERT(!debug_sync_set_action(thd, STRING_WITH_LEN(act))); };); @@ -383,7 +386,7 @@ mysql_mutex_unlock(&LOCK_wsrep_slave_threads); } - if (*exit == false && thd->wsrep_applier) + if (thd->wsrep_applier) { /* From trans_begin() */ thd->variables.option_bits|= OPTION_BEGIN; diff -Nru mariadb-10.1-10.1.25/sql/wsrep_binlog.cc mariadb-10.1-10.1.30/sql/wsrep_binlog.cc --- mariadb-10.1-10.1.25/sql/wsrep_binlog.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_binlog.cc 2017-12-21 15:48:49.000000000 +0000 @@ -452,7 +452,7 @@ File file; IO_CACHE cache; Log_event_writer writer(&cache); - Format_description_log_event *ev; + Format_description_log_event *ev=NULL; int len= my_snprintf(filename, PATH_MAX, "%s/GRA_%ld_%lld_v2.log", wsrep_data_home_dir, thd->thread_id, diff -Nru mariadb-10.1-10.1.25/sql/wsrep_hton.cc mariadb-10.1-10.1.30/sql/wsrep_hton.cc --- mariadb-10.1-10.1.25/sql/wsrep_hton.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_hton.cc 2017-12-21 15:48:49.000000000 +0000 @@ -42,6 +42,7 @@ thd->wsrep_trx_meta.depends_on= WSREP_SEQNO_UNDEFINED; thd->wsrep_exec_mode= LOCAL_STATE; thd->wsrep_affected_rows= 0; + thd->wsrep_skip_wsrep_GTID= false; return; } @@ -504,6 +505,9 @@ } mysql_mutex_lock(&thd->LOCK_wsrep_thd); + + DEBUG_SYNC(thd, "wsrep_after_replication"); + switch(rcode) { case 0: /* @@ -535,6 +539,7 @@ break; case WSREP_BF_ABORT: DBUG_ASSERT(thd->wsrep_trx_meta.gtid.seqno != WSREP_SEQNO_UNDEFINED); + /* fall through */ case WSREP_TRX_FAIL: WSREP_DEBUG("commit failed for reason: %d", rcode); DBUG_PRINT("wsrep", ("replicating commit fail")); diff -Nru mariadb-10.1-10.1.25/sql/wsrep_mysqld.cc mariadb-10.1-10.1.30/sql/wsrep_mysqld.cc --- mariadb-10.1-10.1.25/sql/wsrep_mysqld.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_mysqld.cc 2017-12-21 15:48:49.000000000 +0000 @@ -2,7 +2,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. + the Free Software Foundation; version 2 of the License.x1 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,6 +16,7 @@ #include #include #include +#include /* find_temporary_table() */ #include "slave.h" #include "rpl_mi.h" #include "sql_repl.h" @@ -960,8 +961,6 @@ { return (thd->variables.wsrep_sync_wait & mask) && thd->variables.wsrep_on && - !(thd->variables.wsrep_dirty_reads && - !is_update_query(thd->lex->sql_command)) && !thd->in_active_multi_stmt_transaction() && thd->wsrep_conflict_state != REPLAYING && thd->wsrep_sync_wait_gtid.seqno == WSREP_SEQNO_UNDEFINED; @@ -1090,85 +1089,70 @@ const TABLE_LIST* table_list, wsrep_key_arr_t* ka) { - ka->keys= 0; - ka->keys_len= 0; + ka->keys= 0; + ka->keys_len= 0; - extern TABLE* find_temporary_table(THD*, const TABLE_LIST*); - - if (db || table) + if (db || table) + { + if (!(ka->keys= (wsrep_key_t*)my_malloc(sizeof(wsrep_key_t), MYF(0)))) + { + WSREP_ERROR("Can't allocate memory for key_array"); + goto err; + } + ka->keys_len= 1; + if (!(ka->keys[0].key_parts= (wsrep_buf_t*) + my_malloc(sizeof(wsrep_buf_t)*2, MYF(0)))) + { + WSREP_ERROR("Can't allocate memory for key_parts"); + goto err; + } + ka->keys[0].key_parts_num= 2; + if (!wsrep_prepare_key_for_isolation( + db, table, + (wsrep_buf_t*)ka->keys[0].key_parts, + &ka->keys[0].key_parts_num)) { - TABLE_LIST tmp_table; + WSREP_ERROR("Preparing keys for isolation failed (1)"); + goto err; + } + } - memset(&tmp_table, 0, sizeof(tmp_table)); - tmp_table.table_name= (char*)table; - tmp_table.db= (char*)db; - tmp_table.mdl_request.init(MDL_key::GLOBAL, (db) ? db : "", - (table) ? table : "", - MDL_INTENTION_EXCLUSIVE, MDL_STATEMENT); + for (const TABLE_LIST* table= table_list; table; table= table->next_global) + { + wsrep_key_t* tmp; + if (ka->keys) + tmp= (wsrep_key_t*)my_realloc(ka->keys, + (ka->keys_len + 1) * sizeof(wsrep_key_t), + MYF(0)); + else + tmp= (wsrep_key_t*)my_malloc((ka->keys_len + 1) * sizeof(wsrep_key_t), MYF(0)); - if (!table || !find_temporary_table(thd, &tmp_table)) - { - if (!(ka->keys= (wsrep_key_t*)my_malloc(sizeof(wsrep_key_t), MYF(0)))) - { - WSREP_ERROR("Can't allocate memory for key_array"); - goto err; - } - ka->keys_len= 1; - if (!(ka->keys[0].key_parts= (wsrep_buf_t*) - my_malloc(sizeof(wsrep_buf_t)*2, MYF(0)))) - { - WSREP_ERROR("Can't allocate memory for key_parts"); - goto err; - } - ka->keys[0].key_parts_num= 2; - if (!wsrep_prepare_key_for_isolation( - db, table, - (wsrep_buf_t*)ka->keys[0].key_parts, - &ka->keys[0].key_parts_num)) - { - WSREP_ERROR("Preparing keys for isolation failed"); - goto err; - } - } + if (!tmp) + { + WSREP_ERROR("Can't allocate memory for key_array"); + goto err; } - - for (const TABLE_LIST* table= table_list; table; table= table->next_global) + ka->keys= tmp; + if (!(ka->keys[ka->keys_len].key_parts= (wsrep_buf_t*) + my_malloc(sizeof(wsrep_buf_t)*2, MYF(0)))) { - if (!find_temporary_table(thd, table)) - { - wsrep_key_t* tmp; - tmp= (wsrep_key_t*)my_realloc( - ka->keys, (ka->keys_len + 1) * sizeof(wsrep_key_t), - MYF(MY_ALLOW_ZERO_PTR)); - - if (!tmp) - { - WSREP_ERROR("Can't allocate memory for key_array"); - goto err; - } - ka->keys= tmp; - if (!(ka->keys[ka->keys_len].key_parts= (wsrep_buf_t*) - my_malloc(sizeof(wsrep_buf_t)*2, MYF(0)))) - { - WSREP_ERROR("Can't allocate memory for key_parts"); - goto err; - } - ka->keys[ka->keys_len].key_parts_num= 2; - ++ka->keys_len; - if (!wsrep_prepare_key_for_isolation( - table->db, table->table_name, - (wsrep_buf_t*)ka->keys[ka->keys_len - 1].key_parts, - &ka->keys[ka->keys_len - 1].key_parts_num)) - { - WSREP_ERROR("Preparing keys for isolation failed"); - goto err; - } - } + WSREP_ERROR("Can't allocate memory for key_parts"); + goto err; } - return true; + ka->keys[ka->keys_len].key_parts_num= 2; + ++ka->keys_len; + if (!wsrep_prepare_key_for_isolation(table->db, table->table_name, + (wsrep_buf_t*)ka->keys[ka->keys_len - 1].key_parts, + &ka->keys[ka->keys_len - 1].key_parts_num)) + { + WSREP_ERROR("Preparing keys for isolation failed (2)"); + goto err; + } + } + return 0; err: wsrep_keys_free(ka); - return false; + return 1; } @@ -1379,6 +1363,84 @@ static int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len); /* + Decide if statement should run in TOI. + + Look if table or table_list contain temporary tables. If the + statement affects only temporary tables, statement should not run + in TOI. If the table list contains mix of regular and temporary tables + (DROP TABLE, OPTIMIZE, ANALYZE), statement should be run in TOI but + should be rewritten at later time for replication to contain only + non-temporary tables. + */ +static bool wsrep_can_run_in_toi(THD *thd, const char *db, const char *table, + const TABLE_LIST *table_list) +{ + DBUG_ASSERT(!table || db); + DBUG_ASSERT(table_list || db); + + LEX* lex= thd->lex; + SELECT_LEX* select_lex= &lex->select_lex; + TABLE_LIST* first_table= select_lex->table_list.first; + + switch (lex->sql_command) + { + case SQLCOM_CREATE_TABLE: + DBUG_ASSERT(!table_list); + if (thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) + { + return false; + } + return true; + + case SQLCOM_CREATE_VIEW: + + DBUG_ASSERT(!table_list); + DBUG_ASSERT(first_table); /* First table is view name */ + /* + If any of the remaining tables refer to temporary table error + is returned to client, so TOI can be skipped + */ + for (TABLE_LIST* it= first_table->next_global; it; it= it->next_global) + { + if (find_temporary_table(thd, it)) + { + return false; + } + } + return true; + + case SQLCOM_CREATE_TRIGGER: + + DBUG_ASSERT(!table_list); + DBUG_ASSERT(first_table); + + if (find_temporary_table(thd, first_table)) + { + return false; + } + return true; + + default: + if (table && !find_temporary_table(thd, db, table)) + { + return true; + } + + if (table_list) + { + for (TABLE_LIST* table= first_table; table; table= table->next_global) + { + if (!find_temporary_table(thd, table->db, table->table_name)) + { + return true; + } + } + } + return !(table || table_list); + } +} + +/* returns: 0: statement was replicated as TOI 1: TOI replication was skipped @@ -1393,6 +1455,12 @@ int buf_err; int rc= 0; + if (wsrep_can_run_in_toi(thd, db_, table_, table_list) == false) + { + WSREP_DEBUG("No TOI for %s", WSREP_QUERY(thd)); + return 1; + } + WSREP_DEBUG("TO BEGIN: %lld, %d : %s", (long long)wsrep_thd_trx_seqno(thd), thd->wsrep_exec_mode, thd->query() ); switch (thd->lex->sql_command) @@ -1420,16 +1488,16 @@ } /* fallthrough */ default: - buf_err= wsrep_to_buf_helper(thd, thd->query(), thd->query_length(), &buf, - &buf_len); + buf_err= wsrep_to_buf_helper(thd, thd->query(), thd->query_length(), + &buf, &buf_len); break; } wsrep_key_arr_t key_arr= {0, 0}; struct wsrep_buf buff = { buf, buf_len }; - if (!buf_err && - wsrep_prepare_keys_for_isolation(thd, db_, table_, table_list, &key_arr)&& - key_arr.keys_len > 0 && + if (!buf_err && + !wsrep_prepare_keys_for_isolation(thd, db_, table_, table_list, &key_arr) && + key_arr.keys_len > 0 && WSREP_OK == (ret = wsrep->to_execute_start(wsrep, thd->thread_id, key_arr.keys, key_arr.keys_len, &buff, 1, @@ -1626,9 +1694,12 @@ if (thd->variables.wsrep_on && thd->wsrep_exec_mode==LOCAL_STATE) { switch (thd->variables.wsrep_OSU_method) { - case WSREP_OSU_TOI: ret = wsrep_TOI_begin(thd, db_, table_, - table_list); break; - case WSREP_OSU_RSU: ret = wsrep_RSU_begin(thd, db_, table_); break; + case WSREP_OSU_TOI: + ret = wsrep_TOI_begin(thd, db_, table_, table_list); + break; + case WSREP_OSU_RSU: + ret = wsrep_RSU_begin(thd, db_, table_); + break; default: WSREP_ERROR("Unsupported OSU method: %lu", thd->variables.wsrep_OSU_method); @@ -1905,7 +1976,7 @@ bool ret_code= false; if (thd->wsrep_query_state== QUERY_COMMITTING) { - WSREP_DEBUG("aborting replicated trx: %lu", thd->real_id); + WSREP_DEBUG("aborting replicated trx: %llu", (ulonglong)(thd->real_id)); (void)wsrep_abort_thd(thd, thd, TRUE); ret_code= true; @@ -1965,7 +2036,7 @@ static void wsrep_close_thread(THD *thd) { - thd->killed= KILL_CONNECTION; + thd->set_killed(KILL_CONNECTION); MYSQL_CALLBACK(thread_scheduler, post_kill_notification, (thd)); if (thd->mysys_var) { @@ -2045,7 +2116,7 @@ if (is_replaying_connection(tmp)) { - tmp->killed= KILL_CONNECTION; + tmp->set_killed(KILL_CONNECTION); continue; } diff -Nru mariadb-10.1-10.1.25/sql/wsrep_mysqld.h mariadb-10.1-10.1.30/sql/wsrep_mysqld.h --- mariadb-10.1-10.1.25/sql/wsrep_mysqld.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_mysqld.h 2017-12-21 15:48:49.000000000 +0000 @@ -100,11 +100,12 @@ enum enum_wsrep_sync_wait { WSREP_SYNC_WAIT_NONE = 0x0, - // show, select, begin + // select, begin WSREP_SYNC_WAIT_BEFORE_READ = 0x1, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE = 0x2, WSREP_SYNC_WAIT_BEFORE_INSERT_REPLACE = 0x4, - WSREP_SYNC_WAIT_MAX = 0x7 + WSREP_SYNC_WAIT_BEFORE_SHOW = 0x8, + WSREP_SYNC_WAIT_MAX = 0xF }; // MySQL status variables @@ -224,6 +225,8 @@ #define WSREP_PROVIDER_EXISTS \ (wsrep_provider && strncasecmp(wsrep_provider, WSREP_NONE, FN_REFLEN)) +#define WSREP_QUERY(thd) (thd->query()) + extern void wsrep_ready_wait(); class Ha_trx_info; diff -Nru mariadb-10.1-10.1.25/sql/wsrep_sst.cc mariadb-10.1-10.1.30/sql/wsrep_sst.cc --- mariadb-10.1-10.1.25/sql/wsrep_sst.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_sst.cc 2017-12-21 15:48:49.000000000 +0000 @@ -385,7 +385,7 @@ { assert(opt_bin_logname); *ret= strcmp(opt_bin_logname, "0") ? - my_strdup(opt_bin_logname, MYF(0)) : my_strdup("", MYF(0)); + my_strdup(opt_bin_logname, MYF(0)) : my_strdup("", MYF(0)); } else { @@ -697,7 +697,7 @@ // Attempt 1: wsrep_sst_receive_address if (wsrep_sst_receive_address && - strcmp (wsrep_sst_receive_address, WSREP_SST_ADDRESS_AUTO)) + strcmp (wsrep_sst_receive_address, WSREP_SST_ADDRESS_AUTO)) { addr_in= wsrep_sst_receive_address; } @@ -837,16 +837,13 @@ { char host[256]; wsp::Address address(addr); - if (!address.is_valid()) { WSREP_ERROR("Could not parse SST address : %s", addr); return 0; } - memcpy(host, address.get_address(), address.get_address_len()); int port= address.get_port(); - int const cmd_len= 4096; wsp::string cmd_str(cmd_len); @@ -863,7 +860,7 @@ int ret= snprintf (cmd_str(), cmd_len, "wsrep_sst_mysqldump " - WSREP_SST_OPT_HOST" '%s' " + WSREP_SST_OPT_ADDR" '%s' " WSREP_SST_OPT_PORT" '%d' " WSREP_SST_OPT_LPORT" '%u' " WSREP_SST_OPT_SOCKET" '%s' " @@ -871,7 +868,7 @@ WSREP_SST_OPT_GTID" '%s:%lld' " WSREP_SST_OPT_GTID_DOMAIN_ID" '%d'" "%s", - host, port, mysqld_port, mysqld_unix_port, + addr, port, mysqld_port, mysqld_unix_port, wsrep_defaults_file, uuid_str, (long long)seqno, wsrep_gtid_domain_id, bypass ? " " WSREP_SST_OPT_BYPASS : ""); diff -Nru mariadb-10.1-10.1.25/sql/wsrep_thd.cc mariadb-10.1-10.1.30/sql/wsrep_thd.cc --- mariadb-10.1-10.1.25/sql/wsrep_thd.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_thd.cc 2017-12-21 15:48:49.000000000 +0000 @@ -232,7 +232,7 @@ mysql_mutex_unlock(&thd->LOCK_wsrep_thd); thd->reset_for_next_command(); - thd->killed= NOT_KILLED; + thd->reset_killed(); close_thread_tables(thd); if (thd->locked_tables_mode && thd->lock) { diff -Nru mariadb-10.1-10.1.25/sql/wsrep_utils.cc mariadb-10.1-10.1.30/sql/wsrep_utils.cc --- mariadb-10.1-10.1.25/sql/wsrep_utils.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_utils.cc 2017-12-21 15:48:49.000000000 +0000 @@ -264,7 +264,6 @@ err_ = posix_spawnattr_setflags (&attr, POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK | - /* start a new process group */ POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_USEVFORK); if (err_) { @@ -574,3 +573,17 @@ return ret; } +/* returns the length of the host part of the address string */ +size_t wsrep_host_len(const char* const addr, size_t const addr_len) +{ + // check for IPv6 notation first + const char* const bracket= ('[' == addr[0] ? strchr(addr, ']') : NULL); + + if (bracket) { // IPv6 + return (bracket - addr + 1); + } + else { // host part ends at ':' or end of string + const char* const colon= strchr(addr, ':'); + return (colon ? colon - addr : addr_len); + } +} diff -Nru mariadb-10.1-10.1.25/sql/wsrep_utils.h mariadb-10.1-10.1.30/sql/wsrep_utils.h --- mariadb-10.1-10.1.25/sql/wsrep_utils.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_utils.h 2017-12-21 15:48:49.000000000 +0000 @@ -22,6 +22,9 @@ unsigned int wsrep_check_ip (const char* const addr, bool *is_ipv6); size_t wsrep_guess_ip (char* buf, size_t buf_len); +/* returns the length of the host part of the address string */ +size_t wsrep_host_len(const char* addr, size_t addr_len); + namespace wsp { class Address { diff -Nru mariadb-10.1-10.1.25/sql/wsrep_var.cc mariadb-10.1-10.1.30/sql/wsrep_var.cc --- mariadb-10.1-10.1.25/sql/wsrep_var.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_var.cc 2017-12-21 15:48:49.000000000 +0000 @@ -35,6 +35,8 @@ const char* wsrep_node_incoming_address = 0; const char* wsrep_start_position = 0; +static long wsrep_prev_slave_threads = wsrep_slave_threads; + int wsrep_init_vars() { wsrep_provider = my_strdup(WSREP_NONE, MYF(MY_WME)); @@ -50,21 +52,48 @@ return 0; } +extern ulong innodb_lock_schedule_algorithm; + bool wsrep_on_update (sys_var *self, THD* thd, enum_var_type var_type) { if (var_type == OPT_GLOBAL) { // FIXME: this variable probably should be changed only per session thd->variables.wsrep_on = global_system_variables.wsrep_on; } + + return false; +} + +bool wsrep_on_check(sys_var *self, THD* thd, set_var* var) +{ + bool new_wsrep_on= (bool)var->save_result.ulonglong_value; + + if (new_wsrep_on && innodb_lock_schedule_algorithm != 0) { + my_message(ER_WRONG_ARGUMENTS, " WSREP (galera) can't be enabled " + "if innodb_lock_schedule_algorithm=VATS. Please configure" + " innodb_lock_schedule_algorithm=FCFS and restart.", MYF(0)); + return true; + } return false; } -bool wsrep_causal_reads_update (SV *sv) +bool wsrep_causal_reads_update (sys_var *self, THD* thd, enum_var_type var_type) { - if (sv->wsrep_causal_reads) { - sv->wsrep_sync_wait |= WSREP_SYNC_WAIT_BEFORE_READ; + // global setting should not affect session setting. + // if (var_type == OPT_GLOBAL) { + // thd->variables.wsrep_causal_reads = global_system_variables.wsrep_causal_reads; + // } + if (thd->variables.wsrep_causal_reads) { + thd->variables.wsrep_sync_wait |= WSREP_SYNC_WAIT_BEFORE_READ; } else { - sv->wsrep_sync_wait &= ~WSREP_SYNC_WAIT_BEFORE_READ; + thd->variables.wsrep_sync_wait &= ~WSREP_SYNC_WAIT_BEFORE_READ; + } + + // update global settings too. + if (global_system_variables.wsrep_causal_reads) { + global_system_variables.wsrep_sync_wait |= WSREP_SYNC_WAIT_BEFORE_READ; + } else { + global_system_variables.wsrep_sync_wait &= ~WSREP_SYNC_WAIT_BEFORE_READ; } return false; @@ -72,12 +101,17 @@ bool wsrep_sync_wait_update (sys_var* self, THD* thd, enum_var_type var_type) { - if (var_type == OPT_GLOBAL) - global_system_variables.wsrep_causal_reads = - MY_TEST(global_system_variables.wsrep_sync_wait & WSREP_SYNC_WAIT_BEFORE_READ); - else - thd->variables.wsrep_causal_reads = - MY_TEST(thd->variables.wsrep_sync_wait & WSREP_SYNC_WAIT_BEFORE_READ); + // global setting should not affect session setting. + // if (var_type == OPT_GLOBAL) { + // thd->variables.wsrep_sync_wait = global_system_variables.wsrep_sync_wait; + // } + thd->variables.wsrep_causal_reads = thd->variables.wsrep_sync_wait & + WSREP_SYNC_WAIT_BEFORE_READ; + + // update global settings too + global_system_variables.wsrep_causal_reads = global_system_variables.wsrep_sync_wait & + WSREP_SYNC_WAIT_BEFORE_READ; + return false; } @@ -283,8 +317,9 @@ if (wsrep_inited == 1) wsrep_deinit(false); - char* tmp= strdup(wsrep_provider); // wsrep_init() rewrites provider + char* tmp= strdup(wsrep_provider); // wsrep_init() rewrites provider //when fails + if (wsrep_init()) { my_error(ER_CANT_OPEN_LIBRARY, MYF(0), tmp); @@ -502,18 +537,15 @@ wsrep_node_address = (value) ? my_strdup(value, MYF(0)) : NULL; } -bool wsrep_slave_threads_check (sys_var *self, THD* thd, set_var* var) +static void wsrep_slave_count_change_update () { - mysql_mutex_lock(&LOCK_wsrep_slave_threads); - wsrep_slave_count_change += (var->save_result.ulonglong_value - - wsrep_slave_threads); - mysql_mutex_unlock(&LOCK_wsrep_slave_threads); - - return 0; + wsrep_slave_count_change += (wsrep_slave_threads - wsrep_prev_slave_threads); + wsrep_prev_slave_threads = wsrep_slave_threads; } bool wsrep_slave_threads_update (sys_var *self, THD* thd, enum_var_type type) { + wsrep_slave_count_change_update(); if (wsrep_slave_count_change > 0) { wsrep_create_appliers(wsrep_slave_count_change); diff -Nru mariadb-10.1-10.1.25/sql/wsrep_var.h mariadb-10.1-10.1.30/sql/wsrep_var.h --- mariadb-10.1-10.1.25/sql/wsrep_var.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql/wsrep_var.h 2017-12-21 15:48:49.000000000 +0000 @@ -41,9 +41,8 @@ #define DEFAULT_ARGS (THD* thd, enum_var_type var_type) #define INIT_ARGS (const char* opt) -struct system_variables; -bool wsrep_causal_reads_update(struct system_variables *sv); - +extern bool wsrep_causal_reads_update UPDATE_ARGS; +extern bool wsrep_on_check CHECK_ARGS; extern bool wsrep_on_update UPDATE_ARGS; extern bool wsrep_sync_wait_update UPDATE_ARGS; extern bool wsrep_start_position_check CHECK_ARGS; diff -Nru mariadb-10.1-10.1.25/sql-common/client.c mariadb-10.1-10.1.30/sql-common/client.c --- mariadb-10.1-10.1.25/sql-common/client.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/sql-common/client.c 2017-12-21 15:48:48.000000000 +0000 @@ -1148,6 +1148,7 @@ break; case OPT_pipe: options->protocol = MYSQL_PROTOCOL_PIPE; + break; case OPT_connect_timeout: case OPT_timeout: if (opt_arg) @@ -1231,11 +1232,12 @@ options->max_allowed_packet= atoi(opt_arg); break; case OPT_protocol: - if ((options->protocol= find_type(opt_arg, &sql_protocol_typelib, + if (options->protocol != UINT_MAX32 && + (options->protocol= find_type(opt_arg, &sql_protocol_typelib, FIND_TYPE_BASIC)) <= 0) { fprintf(stderr, "Unknown option to protocol: %s\n", opt_arg); - exit(1); + options->protocol= UINT_MAX32; } break; case OPT_shared_memory_base_name: @@ -3132,6 +3134,8 @@ my_free(mysql->options.my_cnf_file); my_free(mysql->options.my_cnf_group); mysql->options.my_cnf_file=mysql->options.my_cnf_group=0; + if (mysql->options.protocol == UINT_MAX32) + goto error; } /* Some empty-string-tests are done because of ODBC */ diff -Nru mariadb-10.1-10.1.25/storage/archive/ha_archive.cc mariadb-10.1-10.1.30/storage/archive/ha_archive.cc --- mariadb-10.1-10.1.25/storage/archive/ha_archive.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/archive/ha_archive.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1688,7 +1688,6 @@ stats.update_time= (ulong) file_stat.st_mtime; if (flag & HA_STATUS_CONST) { - stats.max_data_file_length= share->rows_recorded * stats.mean_rec_length; stats.max_data_file_length= MAX_FILE_SIZE; stats.create_time= (ulong) file_stat.st_ctime; } diff -Nru mariadb-10.1-10.1.25/storage/connect/array.cpp mariadb-10.1-10.1.30/storage/connect/array.cpp --- mariadb-10.1-10.1.25/storage/connect/array.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/array.cpp 2017-12-21 15:48:49.000000000 +0000 @@ -520,7 +520,7 @@ } else if (opc != OP_EXIST) { sprintf(g->Message, MSG(MISSING_ARG), opc); - throw TYPE_ARRAY; + throw (int)TYPE_ARRAY; } else // OP_EXIST return Nval > 0; @@ -683,14 +683,14 @@ { if (Vblp == NULL) { strcpy(g->Message, MSG(PREC_VBLP_NULL)); - throw TYPE_ARRAY; + throw (int)TYPE_ARRAY; } // endif Vblp bool was = Vblp->IsCi(); if (was && !p) { strcpy(g->Message, MSG(BAD_SET_CASE)); - throw TYPE_ARRAY; + throw (int)TYPE_ARRAY; } // endif Vblp if (was || !p) @@ -701,7 +701,7 @@ if (!was && Type == TYPE_STRING) // Must be resorted to eliminate duplicate strings if (Sort(g)) - throw TYPE_ARRAY; + throw (int)TYPE_ARRAY; } // end of SetPrecision @@ -975,7 +975,7 @@ PSZ ARRAY::MakeArrayList(PGLOBAL g) { char *p, *tp; - int i; + int i; size_t z, len = 2; if (Type == TYPE_LIST) @@ -1035,7 +1035,7 @@ } else fprintf(f, "%sVALLST: numval=%d\n", m, Nval); - } // end of Print + } // end of Printf /***********************************************************************/ /* Make string output of ARRAY contents. */ @@ -1047,7 +1047,7 @@ sprintf(ps, "ARRAY: type=%d\n", Type); // More to be implemented later - } // end of Print + } // end of Prints /* -------------------------- Class MULAR ---------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/blkfil.cpp mariadb-10.1-10.1.30/storage/connect/blkfil.cpp --- mariadb-10.1-10.1.25/storage/connect/blkfil.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/blkfil.cpp 2017-12-21 15:48:49.000000000 +0000 @@ -65,7 +65,7 @@ fprintf(f, "%sBLOCKFILTER: at %p opc=%d opm=%d result=%d\n", m, this, Opc, Opm, Result); - } // end of Print + } // end of Printf /***********************************************************************/ /* Make string output of BLOCKFILTER contents. */ @@ -73,7 +73,7 @@ void BLOCKFILTER::Prints(PGLOBAL, char *ps, uint z) { strncat(ps, "BlockFilter(s)", z); - } // end of Print + } // end of Prints /* ---------------------- Class BLKFILLOG ---------------------------- */ @@ -1006,9 +1006,9 @@ m, this, Next, (Colp) ? Colp->GetName() : "Rowid", Kxp, Result); if (Next) - Next->Print(g, f, n); + Next->Printf(g, f, n); - } // end of Print + } // end of Printf /***********************************************************************/ /* Make string output of BLOCKINDEX contents. */ @@ -1016,7 +1016,7 @@ void BLOCKINDEX::Prints(PGLOBAL g, char *ps, UINT z) { strncat(ps, "BlockIndex(es)", z); - } // end of Print + } // end of Prints /* ------------------------------------------------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/CMakeLists.txt mariadb-10.1-10.1.30/storage/connect/CMakeLists.txt --- mariadb-10.1-10.1.25/storage/connect/CMakeLists.txt 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/CMakeLists.txt 2017-12-21 15:48:49.000000000 +0000 @@ -38,41 +38,24 @@ # Definitions that are shared for all OSes # add_definitions( -DMARIADB -DFORCE_INIT_OF_VARS -Dconnect_EXPORTS) -add_definitions( -DHUGE_SUPPORT -DGZ_SUPPORT -DPIVOT_SUPPORT -DUSE_TRY ) +add_definitions( -DHUGE_SUPPORT -DGZ_SUPPORT ) # # OS specific C flags, definitions and source files. # IF(UNIX) - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - # Bar: -Wfatal-errors removed (does not present in gcc on solaris10) - if(WITH_WARNINGS) - add_definitions(-Wall -Wextra -Wmissing-declarations) - #message(STATUS "CONNECT: GCC: All warnings enabled") - else() - add_definitions(-Wall -Wmissing-declarations) - add_definitions(-Wno-write-strings) - add_definitions(-Wno-unused-variable) - # Bar: -Wno-unused-but-set-variables commented (does not present on sol10) - # add_definitions(-Wno-unused-but-set-variable) - add_definitions(-Wno-unused-value) - add_definitions(-Wno-unused-function) - add_definitions(-Wno-parentheses) - #add_definitions(-Wno-missing-declarations) - # Bar: -Wno-int-to-pointer-cast commended (does not present in gcc on sol10) - # add_definitions(-Wno-int-to-pointer-cast) - # Bar: -Wno-narrowing commented (does not present in gcc on solaris10) - # add_definitions(-Wno-narrowing) - -# This switch is for pure C only: -# add_definitions(-Wno-implicit-function-declaration) -# These switches are for C++ only -# add_definitions(-Wno-reorder) - - #message(STATUS "CONNECT: GCC: Some warnings disabled") - endif(WITH_WARNINGS) - endif() + MY_CHECK_AND_SET_COMPILER_FLAG("-Wall -Wmissing-declarations") + if(NOT WITH_WARNINGS) + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-unused-function") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-unused-variable") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-unused-value") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-parentheses") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-strict-aliasing") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-misleading-indentation") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-format-truncation") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-implicit-fallthrough") + endif(NOT WITH_WARNINGS) add_definitions( -DUNIX -DLINUX -DUBUNTU ) @@ -245,13 +228,10 @@ ENDIF(CONNECT_WITH_ODBC) # -# JDBC +# JDBC with MongoDB Java Driver included but disabled # -IF(APPLE) - OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine without JDBC support" OFF) -ELSE() - OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine with JDBC support" ON) -ENDIF() +# OPTION(CONNECT_WITH_MONGO "Compile CONNECT storage engine with MONGO support" ON) +OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine with JDBC support" ON) IF(CONNECT_WITH_JDBC) FIND_PACKAGE(Java 1.6) @@ -262,18 +242,18 @@ INCLUDE_DIRECTORIES(${JAVA_INCLUDE_PATH2}) # SET(JDBC_LIBRARY ${JAVA_JVM_LIBRARY}) will be dynamically linked SET(CONNECT_SOURCES ${CONNECT_SOURCES} - jdbconn.cpp tabjdbc.cpp jdbconn.h tabjdbc.h jdbccat.h + javaconn.cpp jdbconn.cpp tabjdbc.cpp + jmgfam.cpp jmgoconn.cpp mongo.cpp tabjmg.cpp + jdbccat.h javaconn.h jdbconn.h tabjdbc.h + jmgfam.h jmgoconn.h mongo.h tabjmg.h JdbcInterface.java ApacheInterface.java MariadbInterface.java MysqlInterface.java OracleInterface.java PostgresqlInterface.java + Mongo2Interface.java Mongo3Interface.java JavaWrappers.jar) - # TODO: Find how to compile and install the java wrapper classes - # Find required libraries and include directories - SET (JAVA_SOURCES JdbcInterface.java) - add_jar(JdbcInterface ${JAVA_SOURCES}) - INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/JavaWrappers.jar - ${CMAKE_CURRENT_BINARY_DIR}/JdbcInterface.jar - DESTINATION ${INSTALL_PLUGINDIR} COMPONENT connect-engine) - add_definitions(-DJDBC_SUPPORT) + add_definitions(-DJAVA_SUPPORT) + IF(CONNECT_WITH_MONGO) + add_definitions(-DMONGO_SUPPORT) + ENDIF() ELSE() SET(JDBC_LIBRARY "") ENDIF() @@ -291,6 +271,35 @@ add_definitions(-DZIP_SUPPORT -DNOCRYPT) ENDIF(CONNECT_WITH_ZIP) +# +# MONGO C Driver +# + +IF(CONNECT_WITH_MONGO) + IF(WIN32) + # Adding some typical places to search in + SET(PC_MONGO_INCLUDE_DIRS + C:/mongo-c-driver/include + D:/mongo-c-driver/include) + SET(PC_MONGO_LIBRARY_DIRS + C:/mongo-c-driver/lib + D:/mongo-c-driver/lib) + ENDIF(WIN32) + FIND_PACKAGE(libmongoc-1.0 1.7) + IF (libmongoc-1.0_FOUND) + INCLUDE_DIRECTORIES(${MONGOC_INCLUDE_DIRS}) + SET(MONGOC_LIBRARY ${MONGOC_LIBRARIES}) + SET(CONNECT_SOURCES ${CONNECT_SOURCES} + cmgoconn.cpp cmgfam.cpp tabcmg.cpp + cmgoconn.h cmgfam.h tabcmg.h) + add_definitions(-DCMGO_SUPPORT) + IF (NOT JAVA_FOUND AND JNI_FOUND) + SET(CONNECT_SOURCES ${CONNECT_SOURCES} mongo.cpp mongo.h) + add_definitions(-DMONGO_SUPPORT) + ENDIF (NOT JAVA_FOUND AND JNI_FOUND) + ENDIF(libmongoc-1.0_FOUND) +ENDIF(CONNECT_WITH_MONGO) + # # XMAP @@ -311,5 +320,32 @@ COMPONENT connect-engine RECOMPILE_FOR_EMBEDDED LINK_LIBRARIES ${ZLIB_LIBRARY} ${XML_LIBRARY} ${ICONV_LIBRARY} - ${ODBC_LIBRARY} ${JDBC_LIBRARY} ${IPHLPAPI_LIBRARY}) + ${ODBC_LIBRARY} ${JDBC_LIBRARY} ${MONGOC_LIBRARY} ${IPHLPAPI_LIBRARY}) + +IF(NOT TARGET connect) + RETURN() +ENDIF() + +# Install some extra files that belong to connect engine +IF(WIN32) + # install ha_connect.lib + GET_TARGET_PROPERTY(CONNECT_LOCATION connect LOCATION) + STRING(REPLACE "dll" "lib" CONNECT_LIB ${CONNECT_LOCATION}) + IF(CMAKE_CONFIGURATION_TYPES) + STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" + CONNECT_LIB ${CONNECT_LIB}) + ENDIF() + INSTALL(FILES ${CONNECT_LIB} + DESTINATION ${INSTALL_PLUGINDIR} COMPONENT connect-engine) +ENDIF(WIN32) +IF(CONNECT_WITH_JDBC AND JAVA_FOUND AND JNI_FOUND) + # TODO: Find how to compile and install the java wrapper classes + # Find required libraries and include directories + SET (JAVA_SOURCES JdbcInterface.java) + add_jar(JdbcInterface ${JAVA_SOURCES}) + INSTALL(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/JavaWrappers.jar + ${CMAKE_CURRENT_BINARY_DIR}/JdbcInterface.jar + DESTINATION ${INSTALL_PLUGINDIR} COMPONENT connect-engine) +ENDIF() diff -Nru mariadb-10.1-10.1.25/storage/connect/cmgfam.cpp mariadb-10.1-10.1.30/storage/connect/cmgfam.cpp --- mariadb-10.1-10.1.25/storage/connect/cmgfam.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/cmgfam.cpp 2017-12-21 15:48:49.000000000 +0000 @@ -0,0 +1,271 @@ +/************** CMGFAM C++ Program Source Code File (.CPP) *************/ +/* PROGRAM NAME: cmgfam.cpp */ +/* ------------- */ +/* Version 1.4 */ +/* */ +/* COPYRIGHT: */ +/* ---------- */ +/* (C) Copyright to the author Olivier BERTRAND 20017 */ +/* */ +/* WHAT THIS PROGRAM DOES: */ +/* ----------------------- */ +/* This program are the MongoDB access method classes. */ +/* */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include relevant sections of the System header files. */ +/***********************************************************************/ +#include "my_global.h" + +/***********************************************************************/ +/* Include application header files: */ +/* global.h is header containing all global declarations. */ +/* plgdbsem.h is header containing the DB application declarations. */ +/* filamtxt.h is header containing the file AM classes declarations. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "reldef.h" +#include "filamtxt.h" +#include "tabdos.h" +#include "tabjson.h" +#include "cmgfam.h" + +#if defined(UNIX) || defined(UNIV_LINUX) +#include "osutil.h" +#endif + +/* --------------------------- Class CMGFAM -------------------------- */ + +/***********************************************************************/ +/* Constructors. */ +/***********************************************************************/ +CMGFAM::CMGFAM(PJDEF tdp) : DOSFAM((PDOSDEF)NULL) +{ + Cmgp = NULL; + Pcg.Tdbp = NULL; + + if (tdp) { + Pcg.Uristr = tdp->Uri; + Pcg.Db_name = tdp->Schema; + Pcg.Coll_name = tdp->Collname; + Pcg.Options = tdp->Options; + Pcg.Filter = tdp->Filter; + Pcg.Pipe = tdp->Pipe && tdp->Options != NULL; + } else { + Pcg.Uristr = NULL; + Pcg.Db_name = NULL; + Pcg.Coll_name = NULL; + Pcg.Options = NULL; + Pcg.Filter = NULL; + Pcg.Pipe = false; + } // endif tdp + + To_Fbt = NULL; + Mode = MODE_ANY; + Done = false; + Lrecl = tdp->Lrecl + tdp->Ending; +} // end of CMGFAM standard constructor + + CMGFAM::CMGFAM(PCMGFAM tdfp) : DOSFAM(tdfp) +{ + Pcg = tdfp->Pcg; + To_Fbt = tdfp->To_Fbt; + Mode = tdfp->Mode; + Done = tdfp->Done; + } // end of CMGFAM copy constructor + +/***********************************************************************/ +/* Reset: reset position values at the beginning of file. */ +/***********************************************************************/ +void CMGFAM::Reset(void) +{ + TXTFAM::Reset(); + Fpos = Tpos = Spos = 0; +} // end of Reset + +/***********************************************************************/ +/* MGO GetFileLength: returns file size in number of bytes. */ +/***********************************************************************/ +int CMGFAM::GetFileLength(PGLOBAL g) +{ + return 0; +} // end of GetFileLength + +/***********************************************************************/ +/* Cardinality: returns the number of documents in the collection. */ +/* This function can be called with a null argument to test the */ +/* availability of Cardinality implementation (1 yes, 0 no). */ +/***********************************************************************/ +int CMGFAM::Cardinality(PGLOBAL g) +{ + if (!g) + return 1; + + return (!Init(g)) ? Cmgp->CollSize(g) : 0; +} // end of Cardinality + +/***********************************************************************/ +/* Note: This function is not really implemented yet. */ +/***********************************************************************/ +int CMGFAM::MaxBlkSize(PGLOBAL, int s) +{ + return s; +} // end of MaxBlkSize + +/***********************************************************************/ +/* Init: initialize MongoDB processing. */ +/***********************************************************************/ +bool CMGFAM::Init(PGLOBAL g) +{ + if (Done) + return false; + + /*********************************************************************/ + /* Open an C connection for this table. */ + /*********************************************************************/ + if (!Cmgp) { + Pcg.Tdbp = Tdbp; + Cmgp = new(g) CMgoConn(g, &Pcg); + } else if (Cmgp->IsConnected()) + Cmgp->Close(); + + if (Cmgp->Connect(g)) + return true; + + Done = true; + return false; +} // end of Init + +/***********************************************************************/ +/* OpenTableFile: Open a MongoDB table. */ +/***********************************************************************/ +bool CMGFAM::OpenTableFile(PGLOBAL g) +{ + Mode = Tdbp->GetMode(); + + if (Pcg.Pipe && Mode != MODE_READ) { + strcpy(g->Message, "Pipeline tables are read only"); + return true; + } // endif Pipe + + if (Init(g)) + return true; + + if (Mode == MODE_DELETE && !Tdbp->GetNext()) + // Delete all documents + return Cmgp->DocDelete(g); + else if (Mode == MODE_INSERT) + Cmgp->MakeColumnGroups(g); + + return false; +} // end of OpenTableFile + +/***********************************************************************/ +/* GetRowID: return the RowID of last read record. */ +/***********************************************************************/ +int CMGFAM::GetRowID(void) +{ + return Rows; +} // end of GetRowID + +/***********************************************************************/ +/* GetPos: return the position of last read record. */ +/***********************************************************************/ +int CMGFAM::GetPos(void) +{ + return Fpos; +} // end of GetPos + +/***********************************************************************/ +/* GetNextPos: return the position of next record. */ +/***********************************************************************/ +int CMGFAM::GetNextPos(void) +{ + return Fpos; // TODO +} // end of GetNextPos + +/***********************************************************************/ +/* SetPos: Replace the table at the specified position. */ +/***********************************************************************/ +bool CMGFAM::SetPos(PGLOBAL g, int pos) +{ + Fpos = pos; + Placed = true; + return false; +} // end of SetPos + +/***********************************************************************/ +/* Record file position in case of UPDATE or DELETE. */ +/***********************************************************************/ +bool CMGFAM::RecordPos(PGLOBAL g) +{ + strcpy(g->Message, "CMGFAM::RecordPos NIY"); + return true; +} // end of RecordPos + +/***********************************************************************/ +/* Initialize Fpos and the current position for indexed DELETE. */ +/***********************************************************************/ +int CMGFAM::InitDelete(PGLOBAL g, int fpos, int spos) +{ + strcpy(g->Message, "CMGFAM::InitDelete NIY"); + return RC_FX; +} // end of InitDelete + +/***********************************************************************/ +/* Skip one record in file. */ +/***********************************************************************/ +int CMGFAM::SkipRecord(PGLOBAL g, bool header) +{ + return RC_OK; // Dummy +} // end of SkipRecord + +/***********************************************************************/ +/* ReadBuffer: Get next document from a collection. */ +/***********************************************************************/ +int CMGFAM::ReadBuffer(PGLOBAL g) +{ + int rc = Cmgp->ReadNext(g); + + if (rc != RC_OK) + return rc; + + strncpy(Tdbp->GetLine(), Cmgp->GetDocument(g), Lrecl); + return RC_OK; +} // end of ReadBuffer + +/***********************************************************************/ +/* WriteBuffer: File write routine for MGO access method. */ +/***********************************************************************/ +int CMGFAM::WriteBuffer(PGLOBAL g) +{ + return Cmgp->Write(g); +} // end of WriteBuffer + +/***********************************************************************/ +/* Data Base delete line routine for MGO and BLK access methods. */ +/***********************************************************************/ +int CMGFAM::DeleteRecords(PGLOBAL g, int irc) +{ + return (irc == RC_OK) ? WriteBuffer(g) : RC_OK; +} // end of DeleteRecords + +/***********************************************************************/ +/* Table file close routine for MGO access method. */ +/***********************************************************************/ +void CMGFAM::CloseTableFile(PGLOBAL g, bool) +{ + Cmgp->Close(); + Done = false; +} // end of CloseTableFile + +/***********************************************************************/ +/* Rewind routine for MGO access method. */ +/***********************************************************************/ +void CMGFAM::Rewind(void) +{ + Cmgp->Rewind(); +} // end of Rewind + diff -Nru mariadb-10.1-10.1.25/storage/connect/cmgfam.h mariadb-10.1-10.1.30/storage/connect/cmgfam.h --- mariadb-10.1-10.1.25/storage/connect/cmgfam.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/cmgfam.h 2017-12-21 15:48:49.000000000 +0000 @@ -0,0 +1,65 @@ +/*************** CMGFam H Declares Source Code File (.H) ***************/ +/* Name: cmgfam.h Version 1.5 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the MongoDB access method classes declares. */ +/***********************************************************************/ +#include "cmgoconn.h" + +typedef class TXTFAM *PTXF; +typedef class CMGFAM *PCMGFAM; +typedef class MGODEF *PMGODEF; +typedef class TDBCMG *PTDBCMG; + +/***********************************************************************/ +/* This is the MongoDB Access Method class declaration. */ +/***********************************************************************/ +class DllExport CMGFAM : public DOSFAM { + friend void mongo_init(bool); +public: + // Constructor + CMGFAM(PJDEF tdp); + CMGFAM(PCMGFAM txfp); + + // Implementation + virtual AMT GetAmType(void) { return TYPE_AM_MGO; } + virtual bool GetUseTemp(void) { return false; } + virtual int GetPos(void); + virtual int GetNextPos(void); + void SetTdbp(PTDBDOS tdbp) { Tdbp = tdbp; } + virtual PTXF Duplicate(PGLOBAL g) { return (PTXF)new(g) CMGFAM(this); } + void SetLrecl(int lrecl) { Lrecl = lrecl; } + + // Methods + virtual void Reset(void); + virtual int GetFileLength(PGLOBAL g); + virtual int Cardinality(PGLOBAL g); + virtual int MaxBlkSize(PGLOBAL g, int s); + virtual bool AllocateBuffer(PGLOBAL g) { return false; } + virtual int GetRowID(void); + virtual bool RecordPos(PGLOBAL g); + virtual bool SetPos(PGLOBAL g, int recpos); + virtual int SkipRecord(PGLOBAL g, bool header); + virtual bool OpenTableFile(PGLOBAL g); + virtual int ReadBuffer(PGLOBAL g); + virtual int WriteBuffer(PGLOBAL g); + virtual int DeleteRecords(PGLOBAL g, int irc); + virtual void CloseTableFile(PGLOBAL g, bool abort); + virtual void Rewind(void); + +protected: + virtual bool OpenTempFile(PGLOBAL g) { return false; } + virtual bool MoveIntermediateLines(PGLOBAL g, bool *b) { return false; } + virtual int RenameTempFile(PGLOBAL g) { return RC_OK; } + virtual int InitDelete(PGLOBAL g, int fpos, int spos); + bool Init(PGLOBAL g); + + // Members + CMgoConn *Cmgp; // Points to a C Mongo connection class + CMGOPARM Pcg; // Parms passed to Cmgp + PFBLOCK To_Fbt; // Pointer to temp file block + MODE Mode; + bool Done; // Init done +}; // end of class CMGFAM + diff -Nru mariadb-10.1-10.1.25/storage/connect/cmgoconn.cpp mariadb-10.1-10.1.30/storage/connect/cmgoconn.cpp --- mariadb-10.1-10.1.25/storage/connect/cmgoconn.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/cmgoconn.cpp 2017-12-21 15:48:49.000000000 +0000 @@ -0,0 +1,954 @@ +/************ CMgoConn C++ Functions Source Code File (.CPP) ***********/ +/* Name: CMgoConn.CPP Version 1.0 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the MongoDB C connection classes functions. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include relevant MariaDB header file. */ +/***********************************************************************/ +#include + +/***********************************************************************/ +/* Required objects includes. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "colblk.h" +#include "xobject.h" +#include "xtable.h" +#include "filter.h" +#include "cmgoconn.h" + +bool CMgoConn::IsInit = false; + +bool IsNum(PSZ s); +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s); + +/* --------------------------- Class INCOL --------------------------- */ + +/***********************************************************************/ +/* Add a column in the column list. */ +/***********************************************************************/ +void INCOL::AddCol(PGLOBAL g, PCOL colp, char *jp) +{ + char *p; + PKC kp, kcp; + + if ((p = strchr(jp, '.'))) { + PINCOL icp; + + *p++ = 0; + + for (kp = Klist; kp; kp = kp->Next) + if (kp->Incolp && !strcmp(jp, kp->Key)) + break; + + if (!kp) { + icp = new(g) INCOL(IsNum(p)); + kcp = (PKC)PlugSubAlloc(g, NULL, sizeof(KEYCOL)); + kcp->Next = NULL; + kcp->Incolp = icp; + kcp->Colp = NULL; + kcp->Key = PlugDup(g, jp); + + if (Klist) { + for (kp = Klist; kp->Next; kp = kp->Next); + + kp->Next = kcp; + } else + Klist = kcp; + + } else + icp = kp->Incolp; + + *(p - 1) = '.'; + icp->AddCol(g, colp, p); + } else { + kcp = (PKC)PlugSubAlloc(g, NULL, sizeof(KEYCOL)); + + kcp->Next = NULL; + kcp->Incolp = NULL; + kcp->Colp = colp; + kcp->Key = jp; + + if (Klist) { + for (kp = Klist; kp->Next; kp = kp->Next); + + kp->Next = kcp; + } else + Klist = kcp; + + } // endif jp + +} // end of AddCol + +/***********************************************************************/ +/* Clear. */ +/***********************************************************************/ +void INCOL::Init(void) +{ + bson_init(Child); + + for (PKC kp = Klist; kp; kp = kp->Next) + if (kp->Incolp) + kp->Incolp->Init(); + +} // end of init + +/***********************************************************************/ +/* Destroy. */ +/***********************************************************************/ +void INCOL::Destroy(void) +{ + bson_destroy(Child); + + for (PKC kp = Klist; kp; kp = kp->Next) + if (kp->Incolp) + kp->Incolp->Destroy(); + +} // end of Destroy + +/* -------------------------- Class CMgoConn ------------------------- */ + +/***********************************************************************/ +/* Implementation of the CMgoConn class. */ +/***********************************************************************/ +CMgoConn::CMgoConn(PGLOBAL g, PCPARM pcg) +{ + Pcg = pcg; + Uri = NULL; + Pool = NULL; + Client = NULL; + Database = NULL; + Collection = NULL; + Cursor = NULL; + Query = NULL; + Opts = NULL; + Fpc = NULL; + fp = NULL; + m_Connected = false; +} // end of CMgoConn standard constructor + +/***********************************************************************/ +/* Required to initialize libmongoc's internals. */ +/***********************************************************************/ +void CMgoConn::mongo_init(bool init) +{ + if (init) + mongoc_init(); + else if (IsInit) + mongoc_cleanup(); + + IsInit = init; +} // end of mongo_init + +/***********************************************************************/ +/* Connect to the MongoDB server and get the collection. */ +/***********************************************************************/ +bool CMgoConn::Connect(PGLOBAL g) +{ + if (!IsInit) +#if defined(__WIN__) + __try { + mongo_init(true); + } __except (EXCEPTION_EXECUTE_HANDLER) { + strcpy(g->Message, "Cannot load MongoDB C driver"); + return true; + } // end try/except +#else // !__WIN__ + mongo_init(true); +#endif // !__WIN__ + + Uri = mongoc_uri_new(Pcg->Uristr); + + if (!Uri) { + sprintf(g->Message, "Failed to parse URI: \"%s\"", Pcg->Uristr); + return true; + } // endif Uri + + // Create a new client pool instance + Pool = mongoc_client_pool_new(Uri); + mongoc_client_pool_set_error_api(Pool, 2); + + // Register the application name so we can track it in the profile logs + // on the server. This can also be done from the URI. + mongoc_client_pool_set_appname(Pool, "Connect"); + + // Create a new client instance + Client = mongoc_client_pool_pop(Pool); + + if (!Client) { + sprintf(g->Message, "Failed to get Client"); + return true; + } // endif Client + + // Get a handle on the collection Coll_name + Collection = mongoc_client_get_collection(Client, Pcg->Db_name, Pcg->Coll_name); + + if (!Collection) { + sprintf(g->Message, "Failed to get Collection %s.%s", + Pcg->Db_name, Pcg->Coll_name); + return true; + } // endif Collection + + /*********************************************************************/ + /* Link a Fblock. This make possible to automatically close it */ + /* in case of error (throw). */ + /*********************************************************************/ + PDBUSER dbuserp = (PDBUSER)g->Activityp->Aptr; + + fp = (PFBLOCK)PlugSubAlloc(g, NULL, sizeof(FBLOCK)); + fp->Type = TYPE_FB_MONGO; + fp->Fname = NULL; + fp->Next = dbuserp->Openlist; + dbuserp->Openlist = fp; + fp->Count = 1; + fp->Length = 0; + fp->Memory = NULL; + fp->Mode = MODE_ANY; + fp->File = this; + fp->Handle = 0; + + m_Connected = true; + return false; +} // end of Connect + +/***********************************************************************/ +/* CollSize: returns the number of documents in the collection. */ +/***********************************************************************/ +int CMgoConn::CollSize(PGLOBAL g) +{ + int cnt; + bson_t *query; + const char *jf = NULL; + + if (Pcg->Pipe) + return 10; + else if (Pcg->Filter) + jf = Pcg->Filter; + + if (jf) { + query = bson_new_from_json((const uint8_t *)jf, -1, &Error); + + if (!query) { + htrc("Wrong filter: %s", Error.message); + return 10; + } // endif Query + + } else + query = bson_new(); + + cnt = (int)mongoc_collection_count(Collection, + MONGOC_QUERY_NONE, query, 0, 0, NULL, &Error); + + if (cnt < 0) { + htrc("Collection count: %s", Error.message); + cnt = 2; + } // endif Cardinal + + bson_destroy(query); + return cnt; +} // end of CollSize + +/***********************************************************************/ +/* OpenDB: Data Base open routine for MONGO access method. */ +/***********************************************************************/ +bool CMgoConn::MakeCursor(PGLOBAL g) +{ + const char *p; + bool id, b = false, all = false; + PCSZ options = Pcg->Options; + PTDB tp = Pcg->Tdbp; + PCOL cp; + PSTRG s = NULL; + PFIL filp = tp->GetFilter(); + + id = (tp->GetMode() != MODE_READ); + + if (options && !stricmp(options, "all")) { + options = NULL; + all = true; + } // endif Options + + for (cp = tp->GetColumns(); cp; cp = cp->GetNext()) + if (!strcmp(cp->GetName(), "_id")) + id = true; + else if (cp->GetFmt() && !strcmp(cp->GetFmt(), "*") && !options) + all = true; + + if (Pcg->Pipe) { + if (trace) + htrc("Pipeline: %s\n", options); + + p = strrchr(options, ']'); + + if (!p) { + strcpy(g->Message, "Missing ] in pipeline"); + return true; + } else + *(char*)p = 0; + + s = new(g) STRING(g, 1023, (PSZ)options); + + if (filp) { + s->Append(",{\"$match\":"); + + if (MakeSelector(g, filp, s)) { + strcpy(g->Message, "Failed making selector"); + return true; + } else + s->Append('}'); + + tp->SetFilter(NULL); // Not needed anymore + } // endif To_Filter + + if (!all && tp->GetColumns()) { + // Project list + s->Append(",{\"$project\":{\""); + + if (!id) + s->Append("_id\":0,\""); + + for (cp = tp->GetColumns(); cp; cp = cp->GetNext()) { + if (b) + s->Append(",\""); + else + b = true; + + s->Append(cp->GetJpath(g, true)); + s->Append("\":1"); + } // endfor cp + + s->Append("}}"); + } // endif all + + s->Append("]}"); + s->Resize(s->GetLength() + 1); + *(char*)p = ']'; // Restore Colist for discovery + p = s->GetStr(); + + if (trace) + htrc("New Pipeline: %s\n", p); + + Query = bson_new_from_json((const uint8_t *)p, -1, &Error); + + if (!Query) { + sprintf(g->Message, "Wrong pipeline: %s", Error.message); + return true; + } // endif Query + + Cursor = mongoc_collection_aggregate(Collection, MONGOC_QUERY_NONE, + Query, NULL, NULL); + + if (mongoc_cursor_error(Cursor, &Error)) { + sprintf(g->Message, "Mongo aggregate Failure: %s", Error.message); + return true; + } // endif error + + } else { + if (Pcg->Filter || filp) { + if (trace) { + if (Pcg->Filter) + htrc("Filter: %s\n", Pcg->Filter); + + if (filp) { + char buf[512]; + + filp->Prints(g, buf, 511); + htrc("To_Filter: %s\n", buf); + } // endif To_Filter + + } // endif trace + + s = new(g) STRING(g, 1023, (PSZ)Pcg->Filter); + + if (filp) { + if (Pcg->Filter) + s->Append(','); + + if (MakeSelector(g, filp, s)) { + strcpy(g->Message, "Failed making selector"); + return NULL; + } // endif Selector + + tp->SetFilter(NULL); // Not needed anymore + } // endif To_Filter + + if (trace) + htrc("selector: %s\n", s->GetStr()); + + s->Resize(s->GetLength() + 1); + Query = bson_new_from_json((const uint8_t *)s->GetStr(), -1, &Error); + + if (!Query) { + sprintf(g->Message, "Wrong filter: %s", Error.message); + return NULL; + } // endif Query + + } else + Query = bson_new(); + + if (!all) { + if (options && *options) { + if (trace) + htrc("options=%s\n", options); + + p = options; + } else if (tp->GetColumns()) { + // Projection list + if (s) + s->Set("{\"projection\":{\""); + else + s = new(g) STRING(g, 511, "{\"projection\":{\""); + + if (!id) + s->Append("_id\":0,\""); + + for (cp = tp->GetColumns(); cp; cp = cp->GetNext()) { + if (b) + s->Append(",\""); + else + b = true; + + s->Append(cp->GetJpath(g, true)); + s->Append("\":1"); + } // endfor cp + + s->Append("}}"); + s->Resize(s->GetLength() + 1); + p = s->GetStr(); + } else { + // count(*) ? + p = "{\"projection\":{\"_id\":1}}"; + } // endif Options + + Opts = bson_new_from_json((const uint8_t *)p, -1, &Error); + + if (!Opts) { + sprintf(g->Message, "Wrong options: %s", Error.message); + return NULL; + } // endif Opts + + } // endif all + + Cursor = mongoc_collection_find_with_opts(Collection, Query, Opts, NULL); + } // endif Pipe + + return false; +} // end of MakeCursor + +/***********************************************************************/ +/* Fetch next document. */ +/***********************************************************************/ +int CMgoConn::ReadNext(PGLOBAL g) +{ + int rc = RC_OK; + + if (!Cursor && MakeCursor(g)) { + rc = RC_FX; + } else if (mongoc_cursor_next(Cursor, &Document)) { + if (trace > 1) { + bson_iter_t iter; + ShowDocument(&iter, Document, ""); + } else if (trace == 1) + htrc("%s\n", GetDocument(g)); + + } else if (mongoc_cursor_error(Cursor, &Error)) { + sprintf(g->Message, "Mongo Cursor Failure: %s", Error.message); + rc = RC_FX; + } else + rc = RC_EF; + + return rc; +} // end of Fetch + +/***********************************************************************/ +/* Get the Json string of the current document. */ +/***********************************************************************/ +PSZ CMgoConn::GetDocument(PGLOBAL g) +{ + char *str = bson_as_json(Document, NULL); + PSZ doc = PlugDup(g, str); + + bson_free(str); + return doc; +} // end of GetDocument + +/***********************************************************************/ +/* Use to trace restaurants document contains. */ +/***********************************************************************/ +void CMgoConn::ShowDocument(bson_iter_t *iter, const bson_t *doc, const char *k) +{ + if (!doc || bson_iter_init(iter, doc)) { + const char *key; + + while (bson_iter_next(iter)) { + key = bson_iter_key(iter); + htrc("Found element key: \"%s\"\n", key); + + if (BSON_ITER_HOLDS_UTF8(iter)) + htrc("%s.%s=\"%s\"\n", k, key, bson_iter_utf8(iter, NULL)); + else if (BSON_ITER_HOLDS_INT32(iter)) + htrc("%s.%s=%d\n", k, key, bson_iter_int32(iter)); + else if (BSON_ITER_HOLDS_INT64(iter)) + htrc("%s.%s=%lld\n", k, key, bson_iter_int64(iter)); + else if (BSON_ITER_HOLDS_DOUBLE(iter)) + htrc("%s.%s=%g\n", k, key, bson_iter_double(iter)); + else if (BSON_ITER_HOLDS_DATE_TIME(iter)) + htrc("%s.%s=date(%lld)\n", k, key, bson_iter_date_time(iter)); + else if (BSON_ITER_HOLDS_OID(iter)) { + char str[25]; + + bson_oid_to_string(bson_iter_oid(iter), str); + htrc("%s.%s=%s\n", k, key, str); + } else if (BSON_ITER_HOLDS_DECIMAL128(iter)) { + char *str = NULL; + bson_decimal128_t dec; + + bson_iter_decimal128(iter, &dec); + bson_decimal128_to_string(&dec, str); + htrc("%s.%s=%s\n", k, key, str); + } else if (BSON_ITER_HOLDS_DOCUMENT(iter)) { + bson_iter_t child; + + if (bson_iter_recurse(iter, &child)) + ShowDocument(&child, NULL, key); + + } else if (BSON_ITER_HOLDS_ARRAY(iter)) { + bson_t *arr; + bson_iter_t itar; + const uint8_t *data = NULL; + uint32_t len = 0; + + bson_iter_array(iter, &len, &data); + arr = bson_new_from_data(data, len); + ShowDocument(&itar, arr, key); + } // endif's + + } // endwhile bson_iter_next + + } // endif bson_iter_init + +} // end of ShowDocument + +/***********************************************************************/ +/* Group columns for inserting or updating. */ +/***********************************************************************/ +void CMgoConn::MakeColumnGroups(PGLOBAL g) +{ + Fpc = new(g) INCOL(false); + + for (PCOL colp = Pcg->Tdbp->GetColumns(); colp; colp = colp->GetNext()) + if (!colp->IsSpecial()) + Fpc->AddCol(g, colp, colp->GetJpath(g, false)); + +} // end of MakeColumnGroups + +/***********************************************************************/ +/* DocWrite. */ +/***********************************************************************/ +bool CMgoConn::DocWrite(PGLOBAL g, PINCOL icp) +{ + for (PKC kp = icp->Klist; kp; kp = kp->Next) + if (kp->Incolp) { + bool isdoc = !kp->Incolp->Array; + + if (isdoc) + BSON_APPEND_DOCUMENT_BEGIN(icp->Child, kp->Key, kp->Incolp->Child); + else + BSON_APPEND_ARRAY_BEGIN(icp->Child, kp->Key, kp->Incolp->Child); + + if (DocWrite(g, kp->Incolp)) + return true; + + if (isdoc) + bson_append_document_end(icp->Child, kp->Incolp->Child); + else + bson_append_array_end(icp->Child, kp->Incolp->Child); + + } else if (AddValue(g, kp->Colp, icp->Child, kp->Key, false)) + return true; + + return false; +} // end of DocWrite + +/***********************************************************************/ +/* WriteDB: Data Base write routine for DOS access method. */ +/***********************************************************************/ +int CMgoConn::Write(PGLOBAL g) +{ + int rc = RC_OK; + PTDB tp = Pcg->Tdbp; + + if (tp->GetMode() == MODE_INSERT) { + Fpc->Init(); + + if (DocWrite(g, Fpc)) + return RC_FX; + + if (trace) { + char *str = bson_as_json(Fpc->Child, NULL); + htrc("Inserting: %s\n", str); + bson_free(str); + } // endif trace + + if (!mongoc_collection_insert(Collection, MONGOC_INSERT_NONE, + Fpc->Child, NULL, &Error)) { + sprintf(g->Message, "Mongo insert: %s", Error.message); + rc = RC_FX; + } // endif insert + + } else { + bool b = false; + bson_iter_t iter; + bson_t *query = bson_new(); + + bson_iter_init(&iter, Document); + + if (bson_iter_find(&iter, "_id")) { + if (BSON_ITER_HOLDS_OID(&iter)) + b = BSON_APPEND_OID(query, "_id", bson_iter_oid(&iter)); + else if (BSON_ITER_HOLDS_INT32(&iter)) + b = BSON_APPEND_INT32(query, "_id", bson_iter_int32(&iter)); + else if (BSON_ITER_HOLDS_INT64(&iter)) + b = BSON_APPEND_INT64(query, "_id", bson_iter_int64(&iter)); + else if (BSON_ITER_HOLDS_DOUBLE(&iter)) + b = BSON_APPEND_DOUBLE(query, "_id", bson_iter_double(&iter)); + else if (BSON_ITER_HOLDS_UTF8(&iter)) + b = BSON_APPEND_UTF8(query, "_id", bson_iter_utf8(&iter, NULL)); + + } // endif iter + + if (b) { + if (trace) { + char *str = bson_as_json(query, NULL); + htrc("update query: %s\n", str); + bson_free(str); + } // endif trace + + if (tp->GetMode() == MODE_UPDATE) { + bson_t child; + bson_t *update = bson_new(); + + BSON_APPEND_DOCUMENT_BEGIN(update, "$set", &child); + + for (PCOL colp = tp->GetSetCols(); colp; colp = colp->GetNext()) + if (AddValue(g, colp, &child, colp->GetJpath(g, false), true)) + rc = RC_FX; + + bson_append_document_end(update, &child); + + if (rc == RC_OK) + if (!mongoc_collection_update(Collection, MONGOC_UPDATE_NONE, + query, update, NULL, &Error)) { + sprintf(g->Message, "Mongo update: %s", Error.message); + rc = RC_FX; + } // endif update + + bson_destroy(update); + } else if (!mongoc_collection_remove(Collection, + MONGOC_REMOVE_SINGLE_REMOVE, query, NULL, &Error)) { + sprintf(g->Message, "Mongo delete: %s", Error.message); + rc = RC_FX; + } // endif remove + + } else { + strcpy(g->Message, "Mongo update: cannot find _id"); + rc = RC_FX; + } // endif b + + bson_destroy(query); + } // endif Mode + + return rc; +} // end of Write + +/***********************************************************************/ +/* Remove all documents from the collection. */ +/***********************************************************************/ +bool CMgoConn::DocDelete(PGLOBAL g) +{ + Query = bson_new(); + + if (!mongoc_collection_remove(Collection, MONGOC_REMOVE_NONE, + Query, NULL, &Error)) { + sprintf(g->Message, "Mongo remove all: %s", Error.message); + return true; + } // endif remove + + return false; +} // end of DocDelete + +/***********************************************************************/ +/* Rewind the collection. */ +/***********************************************************************/ +void CMgoConn::Rewind(void) +{ + mongoc_cursor_t *cursor = mongoc_cursor_clone(Cursor); + + mongoc_cursor_destroy(Cursor); + Cursor = cursor; +} // end of Rewind + +/***********************************************************************/ +/* Table close routine for MONGO tables. */ +/***********************************************************************/ +void CMgoConn::Close(void) +{ + if (Query) bson_destroy(Query); + if (Opts) bson_destroy(Opts); + if (Cursor) mongoc_cursor_destroy(Cursor); + if (Collection) mongoc_collection_destroy(Collection); + if (Client) mongoc_client_pool_push(Pool, Client); + if (Pool) mongoc_client_pool_destroy(Pool); + if (Uri) mongoc_uri_destroy(Uri); + if (Fpc) Fpc->Destroy(); + if (fp) fp->Count = 0; +} // end of Close + +/***********************************************************************/ +/* Mini: used to suppress blanks to json strings. */ +/***********************************************************************/ +char *CMgoConn::Mini(PGLOBAL g, PCOL colp, const bson_t *bson, bool b) +{ + char *s, *str = NULL; + char *Mbuf = (char*)PlugSubAlloc(g, NULL, colp->GetLength() + 1); + int i, k = 0; + bool ok = true; + + if (b) + s = str = bson_array_as_json(bson, NULL); + else + s = str = bson_as_json(bson, NULL); + + for (i = 0; i < colp->GetLength() && s[i]; i++) { + switch (s[i]) { + case ' ': + if (ok) continue; + case '"': + ok = !ok; + default: + break; + } // endswitch s[i] + + Mbuf[k++] = s[i]; + } // endfor i + + bson_free(str); + + if (i >= colp->GetLength()) { + sprintf(g->Message, "Value too long for column %s", colp->GetName()); + throw (int)TYPE_AM_MGO; + } // endif i + + Mbuf[k] = 0; + return Mbuf; +} // end of Mini + +/***********************************************************************/ +/* Retrieve the column value from the document. */ +/***********************************************************************/ +void CMgoConn::GetColumnValue(PGLOBAL g, PCOL colp) +{ + char *jpath = colp->GetJpath(g, false); + PVAL value = colp->GetValue(); + + if (!strcmp(jpath, "*")) { + value->SetValue_psz(Mini(g, colp, Document, false)); + } else if (bson_iter_init(&Iter, Document) && + bson_iter_find_descendant(&Iter, jpath, &Desc)) { + if (BSON_ITER_HOLDS_UTF8(&Desc)) + value->SetValue_psz((PSZ)bson_iter_utf8(&Desc, NULL)); + else if (BSON_ITER_HOLDS_INT32(&Desc)) + value->SetValue(bson_iter_int32(&Desc)); + else if (BSON_ITER_HOLDS_INT64(&Desc)) + value->SetValue(bson_iter_int64(&Desc)); + else if (BSON_ITER_HOLDS_DOUBLE(&Desc)) + value->SetValue(bson_iter_double(&Desc)); + else if (BSON_ITER_HOLDS_DATE_TIME(&Desc)) + value->SetValue(bson_iter_date_time(&Desc) / 1000); + else if (BSON_ITER_HOLDS_BOOL(&Desc)) { + bool b = bson_iter_bool(&Desc); + + if (value->IsTypeNum()) + value->SetValue(b ? 1 : 0); + else + value->SetValue_psz(b ? "true" : "false"); + + } else if (BSON_ITER_HOLDS_OID(&Desc)) { + char str[25]; + + bson_oid_to_string(bson_iter_oid(&Desc), str); + value->SetValue_psz(str); + } else if (BSON_ITER_HOLDS_NULL(&Iter)) { + // Apparently this does not work... + value->Reset(); + value->SetNull(true); + } else if (BSON_ITER_HOLDS_DECIMAL128(&Desc)) { + char *str = NULL; + bson_decimal128_t dec; + + bson_iter_decimal128(&Desc, &dec); + bson_decimal128_to_string(&dec, str); + value->SetValue_psz(str); + bson_free(str); + } else if (BSON_ITER_HOLDS_DOCUMENT(&Iter)) { + bson_t *doc; + const uint8_t *data = NULL; + uint32_t len = 0; + + bson_iter_document(&Desc, &len, &data); + + if (data) { + doc = bson_new_from_data(data, len); + value->SetValue_psz(Mini(g, colp, doc, false)); + bson_destroy(doc); + } else { + // ... but we can come here in case of NULL! + value->Reset(); + value->SetNull(true); + } // endif data + + } else if (BSON_ITER_HOLDS_ARRAY(&Iter)) { + bson_t *arr; + const uint8_t *data = NULL; + uint32_t len = 0; + + bson_iter_array(&Desc, &len, &data); + + if (data) { + arr = bson_new_from_data(data, len); + value->SetValue_psz(Mini(g, colp, arr, true)); + bson_destroy(arr); + } else { + // This is a bug in returning the wrong type + // This fix is only for document items + bson_t *doc; + + bson_iter_document(&Desc, &len, &data); + + if (data) { + doc = bson_new_from_data(data, len); + value->SetValue_psz(Mini(g, colp, doc, false)); + bson_destroy(doc); + } else { + // ... or we can also come here in case of NULL! + value->Reset(); + value->SetNull(true); + } // endif data + + } // endif data + + } else + value->Reset(); + + } else { + // Field does not exist + value->Reset(); + value->SetNull(true); + } // endif Iter + +} // end of GetColumnValue + +/***********************************************************************/ +/* AddValue: Add column value to the document to insert or update. */ +/***********************************************************************/ +bool CMgoConn::AddValue(PGLOBAL g, PCOL colp, bson_t *doc, char *key, bool upd) +{ + bool rc = false; + PVAL value = colp->GetValue(); + + if (value->IsNull()) { + if (upd) + rc = BSON_APPEND_NULL(doc, key); + else + return false; + + } else switch (colp->GetResultType()) { + case TYPE_STRING: + rc = BSON_APPEND_UTF8(doc, key, value->GetCharValue()); + break; + case TYPE_INT: + case TYPE_SHORT: + rc = BSON_APPEND_INT32(doc, key, value->GetIntValue()); + break; + case TYPE_TINY: + rc = BSON_APPEND_BOOL(doc, key, value->GetIntValue()); + break; + case TYPE_BIGINT: + rc = BSON_APPEND_INT64(doc, key, value->GetBigintValue()); + break; + case TYPE_DOUBLE: + rc = BSON_APPEND_DOUBLE(doc, key, value->GetFloatValue()); + break; + case TYPE_DECIM: + {bson_decimal128_t dec; + + if (bson_decimal128_from_string(value->GetCharValue(), &dec)) + rc = BSON_APPEND_DECIMAL128(doc, key, &dec); + + } break; + case TYPE_DATE: + rc = BSON_APPEND_DATE_TIME(doc, key, value->GetBigintValue() * 1000); + break; + default: + sprintf(g->Message, "Type %d not supported yet", colp->GetResultType()); + return true; + } // endswitch Buf_Type + + if (!rc) { + strcpy(g->Message, "Adding value failed"); + return true; + } else + return false; + +} // end of AddValue + +#if 0 +void *CMgoConn::mgo_alloc(size_t n) +{ + char *mst = (char*)PlgDBSubAlloc(G, NULL, n + sizeof(size_t)); + + if (mst) { + *(size_t*)mst = n; + return mst + sizeof(size_t); + } // endif mst + + return NULL; +} // end of mgo_alloc + +void *CMgoConn::mgo_calloc(size_t n, size_t sz) +{ + void *m = mgo_alloc(n * sz); + + if (m) + memset(m, 0, n * sz); + + return m; +} // end of mgo_calloc + +void *CMgoConn::mgo_realloc(void *m, size_t n) +{ + if (!m) + return n ? mgo_alloc(n) : NULL; + + size_t *osz = (size_t*)((char*)m - sizeof(size_t)); + + if (n > *osz) { + void *nwm = mgo_alloc(n); + + if (nwm) + memcpy(nwm, m, *osz); + + return nwm; + } else { + *osz = n; + return m; + } // endif n + +} // end of mgo_realloc +#endif // 0 + diff -Nru mariadb-10.1-10.1.25/storage/connect/cmgoconn.h mariadb-10.1-10.1.30/storage/connect/cmgoconn.h --- mariadb-10.1-10.1.25/storage/connect/cmgoconn.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/cmgoconn.h 2017-12-21 15:48:49.000000000 +0000 @@ -0,0 +1,117 @@ +/***********************************************************************/ +/* CMgoConn.h : header file for the MongoDB connection classes. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include MongoDB library header files. */ +/***********************************************************************/ +#include +#include +#include + +// C connection to a MongoDB data source +class TDBCMG; +class MGOCOL; + +/***********************************************************************/ +/* Include MongoDB library header files. */ +/***********************************************************************/ +typedef class INCOL *PINCOL; +typedef class MGODEF *PMGODEF; +typedef class TDBCMG *PTDBCMG; +typedef class MGOCOL *PMGOCOL; + +typedef struct mongo_parms { + PTDB Tdbp; + PCSZ Uristr; // Driver URI + PCSZ Db_name; + PCSZ Coll_name; + PCSZ Options; + PCSZ Filter; + bool Pipe; +//PCSZ User; // User connect info +//PCSZ Pwd; // Password connect info +//int Fsize; // Fetch size +//bool Scrollable; // Scrollable cursor +} CMGOPARM, *PCPARM; + +typedef struct KEYCOL { + KEYCOL *Next; + PINCOL Incolp; + PCOL Colp; + char *Key; +} *PKC; + +/***********************************************************************/ +/* Used when inserting values in a MongoDB collection. */ +/***********************************************************************/ +class INCOL : public BLOCK { +public: + // Constructor + INCOL(bool ar) { Child = bson_new(); Klist = NULL; Array = ar; } + + // Methods + void AddCol(PGLOBAL g, PCOL colp, char *jp); + void Init(void); + void Destroy(void); + + //Members + bson_t *Child; + PKC Klist; + bool Array; +}; // end of INCOL; + +/***********************************************************************/ +/* CMgoConn class. */ +/***********************************************************************/ +class CMgoConn : public BLOCK { + friend class TDBCMG; + friend class CMGDISC; +public: + // Constructor + CMgoConn(PGLOBAL g, PCPARM pcg); + + //static void *mgo_alloc(size_t n); + //static void *mgo_calloc(size_t n, size_t sz); + //static void *mgo_realloc(void *m, size_t n); + //static void mgo_free(void *) {} + + // Implementation + bool IsConnected(void) { return m_Connected; } + bool Connect(PGLOBAL g); + int CollSize(PGLOBAL g); + bool MakeCursor(PGLOBAL g); + int ReadNext(PGLOBAL g); + PSZ GetDocument(PGLOBAL g); + void ShowDocument(bson_iter_t *iter, const bson_t *doc, const char *k); + void MakeColumnGroups(PGLOBAL g); + bool DocWrite(PGLOBAL g, PINCOL icp); + int Write(PGLOBAL g); + bool DocDelete(PGLOBAL g); + void Rewind(void); + void Close(void); + PSZ Mini(PGLOBAL g, PCOL colp, const bson_t *bson, bool b); + void GetColumnValue(PGLOBAL g, PCOL colp); + bool AddValue(PGLOBAL g, PCOL colp, bson_t *doc, char *key, bool upd); + static void mongo_init(bool init); + +protected: + // Members + PCPARM Pcg; + mongoc_uri_t *Uri; + mongoc_client_pool_t *Pool; // Thread safe client pool + mongoc_client_t *Client; // The MongoDB client + mongoc_database_t *Database; // The MongoDB database + mongoc_collection_t *Collection; // The MongoDB collection + mongoc_cursor_t *Cursor; + const bson_t *Document; + bson_t *Query; // MongoDB cursor filter + bson_t *Opts; // MongoDB cursor options + bson_error_t Error; + bson_iter_t Iter; // Used to retrieve column value + bson_iter_t Desc; // Descendant iter + PINCOL Fpc; // To insert INCOL classes + PFBLOCK fp; + bool m_Connected; + static bool IsInit; +}; // end of class CMgoConn diff -Nru mariadb-10.1-10.1.25/storage/connect/colblk.cpp mariadb-10.1-10.1.30/storage/connect/colblk.cpp --- mariadb-10.1-10.1.25/storage/connect/colblk.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/colblk.cpp 2017-12-21 15:48:49.000000000 +0000 @@ -197,7 +197,7 @@ void COLBLK::ReadColumn(PGLOBAL g) { sprintf(g->Message, MSG(UNDEFINED_AM), "ReadColumn"); - throw TYPE_COLBLK; + throw (int)TYPE_COLBLK; } // end of ReadColumn /***********************************************************************/ @@ -208,7 +208,7 @@ void COLBLK::WriteColumn(PGLOBAL g) { sprintf(g->Message, MSG(UNDEFINED_AM), "WriteColumn"); - throw TYPE_COLBLK; + throw (int)TYPE_COLBLK; } // end of WriteColumn /***********************************************************************/ @@ -232,7 +232,7 @@ fprintf(f, " coluse=%04X status=%04X buftyp=%d value=%p name=%s\n", ColUse, Status, Buf_Type, Value, Name); - } // end of Print + } // end of Printf /***********************************************************************/ /* Make string output of a column descriptor block. */ @@ -240,7 +240,7 @@ void COLBLK::Prints(PGLOBAL, char *ps, uint) { sprintf(ps, "R%d.%s", To_Tdb->GetTdb_No(), Name); - } // end of Print + } // end of Prints /***********************************************************************/ @@ -262,7 +262,7 @@ void SPCBLK::WriteColumn(PGLOBAL g) { sprintf(g->Message, MSG(SPCOL_READONLY), Name); - throw TYPE_COLBLK; + throw (int)TYPE_COLBLK; } // end of WriteColumn /***********************************************************************/ diff -Nru mariadb-10.1-10.1.25/storage/connect/colblk.h mariadb-10.1-10.1.30/storage/connect/colblk.h --- mariadb-10.1-10.1.25/storage/connect/colblk.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/colblk.h 2017-12-21 15:48:49.000000000 +0000 @@ -38,7 +38,8 @@ virtual PTDB GetTo_Tdb(void) {return To_Tdb;} virtual int GetClustered(void) {return 0;} virtual int IsClustered(void) {return FALSE;} - PCOL GetNext(void) {return Next;} + virtual PSZ GetJpath(PGLOBAL g, bool proj) {return NULL;} + PCOL GetNext(void) {return Next;} PSZ GetName(void) {return Name;} int GetIndex(void) {return Index;} ushort GetColUse(void) {return ColUse;} diff -Nru mariadb-10.1-10.1.25/storage/connect/connect.cc mariadb-10.1-10.1.30/storage/connect/connect.cc --- mariadb-10.1-10.1.25/storage/connect/connect.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/connect.cc 2017-12-21 15:48:49.000000000 +0000 @@ -1,4 +1,5 @@ /* Copyright (C) Olivier Bertrand 2004 - 2017 + Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -66,8 +67,10 @@ if (g) { CntEndDB(g); - if (g->Activityp) - delete g->Activityp; + if (g->Activityp) { + delete g->Activityp; + g->Activityp = NULL; + } // endif Activityp PlugExit(g); g= NULL; @@ -80,7 +83,7 @@ /* CntEndDB: DB termination semantic routine. */ /***********************************************************************/ void CntEndDB(PGLOBAL g) - { +{ PDBUSER dbuserp= PlgGetUser(g); if (dbuserp) { @@ -88,9 +91,14 @@ delete dbuserp->Catalog; free(dbuserp); - } // endif dbuserp - } // end of CntEndDB + if (trace) + htrc("CntEndDB: Freeing Dup\n"); + + g->Activityp->Aptr = NULL; + } // endif dbuserp + +} // end of CntEndDB /***********************************************************************/ /* CntCheckDB: Initialize a DB application session. */ @@ -185,10 +193,10 @@ /***********************************************************************/ PTDB CntGetTDB(PGLOBAL g, LPCSTR name, MODE mode, PHC h) { - PTDB tdbp; + PTDB tdbp = NULL; PTABLE tabp; PDBUSER dup = PlgGetUser(g); - volatile PCATLG cat = (dup) ? dup->Catalog : NULL; // Safe over longjmp + volatile PCATLG cat = (dup) ? dup->Catalog : NULL; // Safe over throw if (trace) printf("CntGetTDB: name=%s mode=%d cat=%p\n", name, mode, cat); diff -Nru mariadb-10.1-10.1.25/storage/connect/connect.h mariadb-10.1-10.1.30/storage/connect/connect.h --- mariadb-10.1-10.1.25/storage/connect/connect.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/connect.h 2017-12-21 15:48:49.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) Olivier Bertrand 2004 - 2011 +/* Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,6 +15,7 @@ /**************** Cnt H Declares Source Code File (.H) *****************/ /* Name: CONNECT.H Version 2.4 */ +/* Author Olivier BERTRAND bertrandop@gmail.com */ /* This file contains the some based classes declares. */ /***********************************************************************/ #include "filamtxt.h" diff -Nru mariadb-10.1-10.1.25/storage/connect/engmsg.h mariadb-10.1-10.1.30/storage/connect/engmsg.h --- mariadb-10.1-10.1.25/storage/connect/engmsg.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/engmsg.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,3 +1,4 @@ +/* Copyright (C) MariaDB Corporation Ab */ #define MSG_ACCESS_VIOLATN "Access violation" #define MSG_ADD_BAD_TYPE "Array add value type mismatch (%s -> %s)" #define MSG_ALLOC_ERROR "Error allocating %s" diff -Nru mariadb-10.1-10.1.25/storage/connect/filamvct.cpp mariadb-10.1-10.1.30/storage/connect/filamvct.cpp --- mariadb-10.1-10.1.25/storage/connect/filamvct.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/filamvct.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -5,7 +5,7 @@ /* */ /* COPYRIGHT: */ /* ---------- */ -/* (C) Copyright to the author Olivier BERTRAND 2005-2015 */ +/* (C) Copyright to the author Olivier BERTRAND 2005-2017 */ /* */ /* WHAT THIS PROGRAM DOES: */ /* ----------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/filamzip.cpp mariadb-10.1-10.1.30/storage/connect/filamzip.cpp --- mariadb-10.1-10.1.25/storage/connect/filamzip.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/filamzip.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -290,6 +290,9 @@ zipfile = NULL; } // endif zipfile + if (fp) + fp->Count = 0; + } // end of close /***********************************************************************/ @@ -455,7 +458,7 @@ if (!*++pat) return TRUE; goto loopStart; default: - if (mapCaseTable[(uchar)*s] != mapCaseTable[(uchar)*p]) + if (mapCaseTable[(uint)*s] != mapCaseTable[(uint)*p]) goto starCheck; break; } /* endswitch */ @@ -493,6 +496,9 @@ zipfile = NULL; } // endif zipfile + if (fp) + fp->Count = 0; + } // end of close /***********************************************************************/ diff -Nru mariadb-10.1-10.1.25/storage/connect/filter.cpp mariadb-10.1-10.1.30/storage/connect/filter.cpp --- mariadb-10.1-10.1.25/storage/connect/filter.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/filter.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -10,7 +10,7 @@ /* Include relevant MariaDB header file. */ /***********************************************************************/ #include "my_global.h" -#include "sql_class.h" +//#include "sql_class.h" //#include "sql_time.h" #if defined(__WIN__) @@ -33,11 +33,11 @@ #include "tabcol.h" #include "xtable.h" #include "array.h" -//#include "subquery.h" #include "filter.h" -//#include "token.h" -//#include "select.h" #include "xindex.h" +#if defined(MONGO_SUPPORT) || defined(JDBC_SUPPORT) +#include "tabext.h" +#endif // MONGO_SUPPORT || JDBC_SUPPORT /***********************************************************************/ /* Utility routines. */ @@ -87,7 +87,7 @@ case OP_EXIST: bt = 0x00; break; default: sprintf(g->Message, MSG(BAD_FILTER_OP), opc); - throw TYPE_ARRAY; + throw (int)TYPE_ARRAY; } // endswitch opc return bt; @@ -1406,6 +1406,86 @@ } // end of Copy #endif // 0 +#if defined(MONGO_SUPPORT) +/***********************************************************************/ +/* Make selector json representation for Mongo tables. */ +/***********************************************************************/ +bool FILTER::MakeSelector(PGLOBAL g, PSTRG s) +{ + s->Append('{'); + + if (Opc == OP_AND || Opc == OP_OR) { + if (GetArgType(0) != TYPE_FILTER || GetArgType(1) != TYPE_FILTER) + return true; + + s->Append("\"$"); + s->Append(Opc == OP_AND ? "and" : "or"); + s->Append("\":["); + + if (((PFIL)Arg(0))->MakeSelector(g, s)) + return true; + + s->Append(','); + + if (((PFIL)Arg(1))->MakeSelector(g, s)) + return true; + + s->Append(']'); + } else { + if (GetArgType(0) != TYPE_COLBLK) + return true; + + s->Append('"'); + s->Append(((PCOL)Arg(0))->GetJpath(g, false)); + s->Append("\":{\"$"); + + switch (Opc) { + case OP_EQ: + s->Append("eq"); + break; + case OP_NE: + s->Append("ne"); + break; + case OP_GT: + s->Append("gt"); + break; + case OP_GE: + s->Append("gte"); + break; + case OP_LT: + s->Append("lt"); + break; + case OP_LE: + s->Append("lte"); + break; + case OP_NULL: + case OP_LIKE: + case OP_EXIST: + default: + return true; + } // endswitch Opc + + s->Append("\":"); + + if (GetArgType(1) == TYPE_COLBLK) { + s->Append("\"$"); + s->Append(((PEXTCOL)Arg(1))->GetJpath(g, false)); + s->Append('"'); + } else { + char buf[501]; + + Arg(1)->Prints(g, buf, 500); + s->Append(buf); + } // endif Type + + s->Append('}'); + } // endif Opc + + s->Append('}'); + return false; +} // end of MakeSelector +#endif // MONGO_SUPPORT + /*********************************************************************/ /* Make file output of FILTER contents. */ /*********************************************************************/ @@ -1437,7 +1517,7 @@ } // endfor fp - } // end of Print + } // end of Printf /***********************************************************************/ /* Make string output of TABLE contents (z should be checked). */ @@ -1579,7 +1659,7 @@ bcp = bxp; } while (bcp); // enddo - } // end of Print + } // end of Prints /* -------------------- Derived Classes Functions -------------------- */ @@ -1697,8 +1777,6 @@ if (trace) htrc("PrepareFilter: fp=%p having=%d\n", fp, having); -//if (fp) -// fp->Print(g, debug, 0); while (fp) { if (fp->Opc == OP_SEP) @@ -1712,7 +1790,7 @@ break; // Remove eventual ending separator(s) // if (fp->Convert(g, having)) -// throw TYPE_ARRAY; +// (int)throw TYPE_ARRAY; filp = fp; fp = fp->Next; @@ -1721,8 +1799,6 @@ if (trace) htrc(" returning filp=%p\n", filp); -//if (filp) -// filp->Print(g, debug, 0); return filp; } // end of PrepareFilter @@ -1745,7 +1821,7 @@ // return TRUE; if (filp->Eval(g)) - throw TYPE_FILTER; + throw (int)TYPE_FILTER; if (trace > 1) htrc("PlugFilter filp=%p result=%d\n", diff -Nru mariadb-10.1-10.1.25/storage/connect/filter.h mariadb-10.1-10.1.30/storage/connect/filter.h --- mariadb-10.1-10.1.25/storage/connect/filter.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/filter.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,7 +1,7 @@ /*************** Filter H Declares Source Code File (.H) ***************/ -/* Name: FILTER.H Version 1.2 */ +/* Name: FILTER.H Version 1.3 */ /* */ -/* (C) Copyright to the author Olivier BERTRAND 2010-2015 */ +/* (C) Copyright to the author Olivier BERTRAND 2010-2017 */ /* */ /* This file contains the FILTER and derived classes declares. */ /***********************************************************************/ diff -Nru mariadb-10.1-10.1.25/storage/connect/fmdlex.c mariadb-10.1-10.1.30/storage/connect/fmdlex.c --- mariadb-10.1-10.1.25/storage/connect/fmdlex.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/fmdlex.c 2017-12-21 15:48:50.000000000 +0000 @@ -417,10 +417,10 @@ static void MakeParm(int n); static void MakeMMDD(int n); static void MakeAMPM(int n); -static void MakeIn(char *); -static void MakeOut(char *); -static void Quotin(char *); -static void Quotout(char *); +static void MakeIn(const char *); +static void MakeOut(const char *); +static void Quotin(const char *); +static void Quotout(const char *); /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1492,7 +1492,7 @@ } /* end of MakeAMPM */ -void MakeIn(char *text) +void MakeIn(const char *text) { if (!pp->InFmt) return; @@ -1500,14 +1500,14 @@ strncat(pp->InFmt, text, (pp->Outsize - 1) - strlen(pp->InFmt)); } /* end of MakeIn */ -void MakeOut(char *text) +void MakeOut(const char *text) { if (!pp->OutFmt) return; strncat(pp->OutFmt, text, (pp->Outsize - 1) - strlen(pp->OutFmt)); } /* end of MakeOut */ -void Quotin(char *text) +void Quotin(const char *text) { if (!pp->InFmt) return; @@ -1516,7 +1516,7 @@ pp->InFmt[strlen(pp->InFmt)-1] = '\0'; } /* end of Quotin */ -void Quotout(char *text) +void Quotout(const char *text) { if (!pp->OutFmt) return; diff -Nru mariadb-10.1-10.1.25/storage/connect/global.h mariadb-10.1-10.1.30/storage/connect/global.h --- mariadb-10.1-10.1.25/storage/connect/global.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/global.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,6 +1,7 @@ /***********************************************************************/ /* GLOBAL.H: Declaration file used by all CONNECT implementations. */ -/* (C) Copyright Olivier Bertrand 1993-2017 */ +/* (C) Copyright MariaDB Corporation Ab */ +/* Author Olivier Bertrand 1993-2017 */ /***********************************************************************/ /***********************************************************************/ @@ -57,31 +58,10 @@ /* Miscellaneous Constants */ /***********************************************************************/ #define NO_IVAL -95684275 /* Used by GetIntegerOption */ -#define VMLANG 370 /* Size of olf VM lang blocks */ #define MAX_JUMP 24 /* Maximum jump level number */ #define MAX_STR 4160 /* Maximum message length */ -#define STR_SIZE 501 /* Length of char strings. */ -#define STD_INPUT 0 /* Standard language input */ -#define STD_OUTPUT 1 /* Standard language output */ -#define ERROR_OUTPUT 2 /* Error message output */ -#define DEBUG_OUTPUT 3 /* Debug info output */ -#define PROMPT_OUTPUT 4 /* Prompt message output */ -#define COPY_OUTPUT 5 /* Copy of language input */ -#define STD_MSG 6 /* System message file */ -#define DEBUG_MSG 7 /* Debug message file */ -#define DUMMY 0 /* Dummy file index in Ldm block */ -#define STDIN 1 /* stdin file index in Ldm block */ -#define STDOUT 2 /* stdout file index in Ldm block */ -#define STDERR 3 /* stderr file index in Ldm block */ -#define STDEBUG 4 /* debug file index in Ldm block */ -#define STDPRN 5 /* stdprn file index in Ldm block */ -#define STDFREE 6 /* Free file index in Ldm block */ -#define TYPE_SEM -2 /* Returned semantic function */ -#define TYPE_DFONC -2 /* Indirect sem ref in FPARM */ #define TYPE_VOID -1 -#define TYPE_SBPAR -1 /* Phrase reference in FPARM */ -#define TYPE_SEMX 0 /* Initial semantic function type? */ #define TYPE_ERROR 0 #define TYPE_STRING 1 #define TYPE_DOUBLE 2 @@ -90,26 +70,11 @@ #define TYPE_BIGINT 5 #define TYPE_LIST 6 #define TYPE_INT 7 +#define TYPE_DATE 8 #define TYPE_DECIM 9 #define TYPE_BIN 10 #define TYPE_PCHAR 11 -#if defined(OS32) - #define SYS_STAMP "OS32" -#elif defined(UNIX) || defined(LINUX) || defined(UNIV_LINUX) - #define SYS_STAMP "UNIX" -#elif defined(OS16) - #define SYS_STAMP "OS16" -#elif defined(DOSR) - #define SYS_STAMP "DOSR" -#elif defined(WIN) - #define SYS_STAMP "WIN1" -#elif defined(__WIN__) - #define SYS_STAMP "WIN2" -#else - #define SYS_STAMP "XXXX" -#endif - #if defined(__cplusplus) extern "C" { #endif @@ -117,11 +82,6 @@ /***********************************************************************/ /* Static variables */ /***********************************************************************/ -#if defined(STORAGE) - char sys_stamp[5] = SYS_STAMP; -#else - extern char sys_stamp[]; -#endif /***********************************************************************/ /* File-Selection Indicators */ diff -Nru mariadb-10.1-10.1.25/storage/connect/ha_connect.cc mariadb-10.1-10.1.30/storage/connect/ha_connect.cc --- mariadb-10.1-10.1.25/storage/connect/ha_connect.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/ha_connect.cc 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) Olivier Bertrand 2004 - 2017 +/* Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -98,8 +98,7 @@ rnd_next signals that it has reached the end of its data. Calls to ha_connect::extra() are hints as to what will be occuring to the request. - Happy use!
- -Olivier + Author Olivier Bertrand */ #ifdef USE_PRAGMA_IMPLEMENTATION @@ -130,10 +129,13 @@ #if defined(ODBC_SUPPORT) #include "odbccat.h" #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) #include "tabjdbc.h" #include "jdbconn.h" -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT +#if defined(CMGO_SUPPORT) +#include "cmgoconn.h" +#endif // CMGO_SUPPORT #include "tabmysql.h" #include "filamdbf.h" #include "tabxcl.h" @@ -172,15 +174,19 @@ #define JSONMAX 10 // JSON Default max grp size extern "C" { - char version[]= "Version 1.06.0001 April 17, 2017"; + char version[]= "Version 1.06.0005 October 14, 2017"; #if defined(__WIN__) - char compver[]= "Version 1.06.0001 " __DATE__ " " __TIME__; + char compver[]= "Version 1.06.0005 " __DATE__ " " __TIME__; char slash= '\\'; #else // !__WIN__ char slash= '/'; #endif // !__WIN__ } // extern "C" +#if MYSQL_VERSION_ID > 100200 +#define stored_in_db stored_in_db() +#endif // MYSQL_VERSION_ID + #if defined(XMAP) my_bool xmap= false; #endif // XMAP @@ -193,40 +199,46 @@ } // extern "C" #endif // XMSG -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) char *JvmPath; char *ClassPath; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT -#if defined(__WIN__) -CRITICAL_SECTION parsec; // Used calling the Flex parser -#else // !__WIN__ -pthread_mutex_t parmut = PTHREAD_MUTEX_INITIALIZER; -#endif // !__WIN__ +pthread_mutex_t parmut; +pthread_mutex_t usrmut; +pthread_mutex_t tblmut; /***********************************************************************/ /* Utility functions. */ /***********************************************************************/ PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info); PQRYRES VirColumns(PGLOBAL g, bool info); -PQRYRES JSONColumns(PGLOBAL g, char *db, PTOS topt, bool info); +PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info); PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info); +#if defined(MONGO_SUPPORT) +PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ url, PTOS topt, bool info); +#endif // MONGO_SUPPORT int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v); void PushWarning(PGLOBAL g, THD *thd, int level); bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, PCSZ host, PCSZ db, PCSZ tab, PCSZ src, int port); bool ZipLoadFile(PGLOBAL, PCSZ, PCSZ, PCSZ, bool, bool); bool ExactInfo(void); -void mongo_init(bool); +#if defined(CMGO_SUPPORT) +//void mongo_init(bool); +#endif // CMGO_SUPPORT USETEMP UseTemp(void); int GetConvSize(void); TYPCONV GetTypeConv(void); +char *GetJsonNull(void); uint GetJsonGrpSize(void); char *GetJavaWrapper(void); uint GetWorkSize(void); void SetWorkSize(uint); extern "C" const char *msglang(void); +static char *strz(PGLOBAL g, LEX_STRING &ls); + static void PopUser(PCONNECT xp); static PCONNECT GetUser(THD *thd, PCONNECT xp); static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp); @@ -330,20 +342,41 @@ 0, // def (no) &xconv_typelib); // typelib +// Null representation for JSON values +static MYSQL_THDVAR_STR(json_null, + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, + "Representation of Json null values", + // check_json_null, update_json_null, + NULL, NULL, ""); + // Estimate max number of rows for JSON aggregate functions static MYSQL_THDVAR_UINT(json_grp_size, PLUGIN_VAR_RQCMDARG, // opt "max number of rows for JSON aggregate functions.", NULL, NULL, JSONMAX, 1, INT_MAX, 1); -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) // Default java wrapper to use with JDBC tables static MYSQL_THDVAR_STR(java_wrapper, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, "Java wrapper class name", - // check_class_path, update_class_path, + // check_java_wrapper, update_java_wrapper, NULL, NULL, "wrappers/JdbcInterface"); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT + +#if 0 // This is apparently not acceptable for a plugin +// Enabling MONGO table type +static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG, + "Enabling the MongoDB access", + NULL, NULL, MONGO_ENABLED); +#endif // 0 + +#if defined(MONGO_SUPPORT) +// Enabling MONGO table type +static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG, + "Enabling the MongoDB access", + NULL, NULL, MONGO_ENABLED); +#endif // MONGO_SUPPORT #if defined(XMSG) || defined(NEWMSG) const char *language_names[]= @@ -381,6 +414,8 @@ USETEMP UseTemp(void) {return (USETEMP)THDVAR(current_thd, use_tempfile);} int GetConvSize(void) {return THDVAR(current_thd, conv_size);} TYPCONV GetTypeConv(void) {return (TYPCONV)THDVAR(current_thd, type_conv);} +char *GetJsonNull(void) + {return connect_hton ? THDVAR(current_thd, json_null) : NULL;} uint GetJsonGrpSize(void) {return connect_hton ? THDVAR(current_thd, json_grp_size) : 10;} uint GetWorkSize(void) {return THDVAR(current_thd, work_size);} @@ -398,10 +433,18 @@ } // end of msglang #else // !XMSG && !NEWMSG -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) char *GetJavaWrapper(void) {return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";} -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT + +#if defined(JAVA_SUPPORT) +//bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); } +#endif // JAVA_SUPPORT + +#if defined(MONGO_SUPPORT) +bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); } +#endif // MONGO_SUPPORT extern "C" const char *msglang(void) { @@ -505,7 +548,8 @@ HA_TOPTION_STRING("CATFUNC", catfunc), HA_TOPTION_STRING("SRCDEF", srcdef), HA_TOPTION_STRING("COLIST", colist), - HA_TOPTION_STRING("OPTION_LIST", oplist), + HA_TOPTION_STRING("FILTER", filter), + HA_TOPTION_STRING("OPTION_LIST", oplist), HA_TOPTION_STRING("DATA_CHARSET", data_charset), HA_TOPTION_NUMBER("LRECL", lrecl, 0, 0, INT_MAX32, 1), HA_TOPTION_NUMBER("BLOCK_SIZE", elements, 0, 0, INT_MAX32, 1), @@ -666,15 +710,21 @@ #if defined(__WIN__) sql_print_information("CONNECT: %s", compver); - InitializeCriticalSection((LPCRITICAL_SECTION)&parsec); #else // !__WIN__ sql_print_information("CONNECT: %s", version); #endif // !__WIN__ + pthread_mutex_init(&parmut, NULL); + pthread_mutex_init(&usrmut, NULL); + pthread_mutex_init(&tblmut, NULL); #if defined(LIBXML2_SUPPORT) XmlInitParserLib(); #endif // LIBXML2_SUPPORT +#if 0 //defined(CMGO_SUPPORT) + mongo_init(true); +#endif // CMGO_SUPPORT + init_connect_psi_keys(); connect_hton= (handlerton *)p; @@ -692,9 +742,9 @@ DTVAL::SetTimeShift(); // Initialize time zone shift once for all BINCOL::SetEndian(); // Initialize host endian setting -#if defined(JDBC_SUPPORT) - JDBConn::SetJVM(); -#endif // JDBC_SUPPORT +#if defined(JAVA_SUPPORT) + JAVAConn::SetJVM(); +#endif // JAVA_SUPPORT DBUG_RETURN(0); } // end of connect_init_func @@ -713,17 +763,20 @@ XmlCleanupParserLib(); #endif // LIBXML2_SUPPORT -#ifdef JDBC_SUPPORT - JDBConn::ResetJVM(); -#endif // JDBC_SUPPORT +#if defined(CMGO_SUPPORT) + CMgoConn::mongo_init(false); +#endif // CMGO_SUPPORT + +#ifdef JAVA_SUPPORT + JAVAConn::ResetJVM(); +#endif // JAVA_SUPPORT -#if defined(__WIN__) - DeleteCriticalSection((LPCRITICAL_SECTION)&parsec); -#else // !__WIN__ +#if !defined(__WIN__) PROFILE_End(); #endif // !__WIN__ - for (pc= user_connect::to_users; pc; pc= pn) { + pthread_mutex_lock(&usrmut); + for (pc= user_connect::to_users; pc; pc= pn) { if (pc->g) PlugCleanup(pc->g, true); @@ -731,6 +784,11 @@ delete pc; } // endfor pc + pthread_mutex_unlock(&usrmut); + + pthread_mutex_destroy(&usrmut); + pthread_mutex_destroy(&parmut); + pthread_mutex_destroy(&tblmut); connect_hton= NULL; DBUG_RETURN(error); } // end of connect_done_func @@ -843,6 +901,7 @@ static void PopUser(PCONNECT xp) { if (xp) { + pthread_mutex_lock(&usrmut); xp->count--; if (!xp->count) { @@ -867,6 +926,7 @@ delete xp; } // endif count + pthread_mutex_unlock(&usrmut); } // endif xp } // end of PopUser @@ -880,23 +940,36 @@ if (!thd) return NULL; - if (xp && thd == xp->thdp) - return xp; + if (xp) { + if (thd == xp->thdp) + return xp; + + PopUser(xp); // Avoid memory leak + } // endif xp - for (xp= user_connect::to_users; xp; xp= xp->next) + pthread_mutex_lock(&usrmut); + + for (xp= user_connect::to_users; xp; xp= xp->next) if (thd == xp->thdp) break; - if (!xp) { - xp= new user_connect(thd); + if (xp) + xp->count++; - if (xp->user_init()) { - delete xp; - xp= NULL; - } // endif user_init + pthread_mutex_unlock(&usrmut); - } else - xp->count++; + if (!xp) { + xp = new user_connect(thd); + + if (xp->user_init()) { + delete xp; + xp = NULL; + } // endif user_init + + } // endif xp + + //} else + // xp->count++; return xp; } // end of GetUser @@ -1025,26 +1098,43 @@ return (char*)def; char key[16], val[256]; - char *pk, *pv, *pn; + char *pv, *pn, *pk= (char*)oplist; PCSZ opval= def; int n; - for (pk= (char*)oplist; pk; pk= ++pn) { + while (*pk == ' ') + pk++; + + for (; pk; pk= pn) { pn= strchr(pk, ','); pv= strchr(pk, '='); if (pv && (!pn || pv < pn)) { - n= MY_MIN(static_cast(pv - pk), sizeof(key) - 1); - memcpy(key, pk, n); + n = MY_MIN(static_cast(pv - pk), sizeof(key) - 1); + memcpy(key, pk, n); + + while (n && key[n - 1] == ' ') + n--; + key[n]= 0; - pv++; - n= MY_MIN((pn ? pn - pv : strlen(pv)), sizeof(val) - 1); + + while(*(++pv) == ' ') ; + + n= MY_MIN((pn ? pn - pv : strlen(pv)), sizeof(val) - 1); memcpy(val, pv, n); - val[n]= 0; + + while (n && val[n - 1] == ' ') + n--; + + val[n]= 0; } else { - n= MY_MIN((pn ? pn - pk : strlen(pk)), sizeof(key) - 1); + n= MY_MIN((pn ? pn - pk : strlen(pk)), sizeof(key) - 1); memcpy(key, pk, n); - key[n]= 0; + + while (n && key[n - 1] == ' ') + n--; + + key[n]= 0; val[0]= 0; } // endif pv @@ -1054,6 +1144,7 @@ } else if (!pn) break; + while (*(++pn) == ' ') ; } // endfor pk return opval; @@ -1095,7 +1186,9 @@ opval= options->srcdef; else if (!stricmp(opname, "Colist")) opval= options->colist; - else if (!stricmp(opname, "Data_charset")) + else if (!stricmp(opname, "Filter")) + opval = options->filter; + else if (!stricmp(opname, "Data_charset")) opval= options->data_charset; if (!opval && options->oplist) @@ -1219,9 +1312,14 @@ else opval= GetListOption(xp->g, opname, options->oplist); - } else if (!stricmp(opname, "Query_String")) - opval= thd_query_string(table->in_use)->str; - else if (!stricmp(opname, "Partname")) + } else if (!stricmp(opname, "Query_String")) { +// This escapes everything and returns a wrong query +// opval = thd_query_string(table->in_use)->str; + opval = (PCSZ)PlugSubAlloc(xp->g, NULL, + thd_query_string(table->in_use)->length + 1); + strcpy((char*)opval, thd_query_string(table->in_use)->str); +// sprintf((char*)opval, "%s", thd_query_string(table->in_use)->str); + } else if (!stricmp(opname, "Partname")) opval= partname; else if (!stricmp(opname, "Table_charset")) { const CHARSET_INFO *chif= (tshp) ? tshp->table_charset @@ -1367,7 +1465,7 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf) { const char *cp; - char *chset, v; + char *chset, v = 0; ha_field_option_struct *fop; Field* fp; Field* *fldp; @@ -1420,14 +1518,13 @@ } // endif fop chset = (char *)fp->charset()->name; - v = (!strcmp(chset, "binary")) ? 'B' : 0; switch (fp->type()) { case MYSQL_TYPE_BLOB: case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_VAR_STRING: pcf->Flags |= U_VAR; - /* fall through */ + // fall through default: pcf->Type= MYSQLtoPLG(fp->type(), &v); break; @@ -1435,8 +1532,9 @@ switch (pcf->Type) { case TYPE_STRING: - // Do something for case - cp= fp->charset()->name; + case TYPE_BIN: + // Do something for case + cp= chset; // Find if collation name ends by _ci if (!strcmp(cp + strlen(cp) - 3, "_ci")) { @@ -1676,7 +1774,7 @@ } // end of IsPartitioned -const char *ha_connect::GetDBName(const char* name) +PCSZ ha_connect::GetDBName(PCSZ name) { return (name) ? name : table->s->db.str; } // end of GetDBName @@ -1739,7 +1837,7 @@ /***********************************************************************/ /* This function sets the current database path. */ /***********************************************************************/ -bool ha_connect::SetDataPath(PGLOBAL g, const char *path) +bool ha_connect::SetDataPath(PGLOBAL g, PCSZ path) { return (!(datapath= SetPath(g, path))); } // end of SetDataPath @@ -2048,6 +2146,11 @@ charset= tdbp->data_charset(); rc= fp->store(p, strlen(p), charset, CHECK_FIELD_WARN); break; + case TYPE_BIN: + p = value->GetCharValue(); + charset = &my_charset_bin; + rc = fp->store(p, strlen(p), charset, CHECK_FIELD_WARN); + break; case TYPE_DOUBLE: rc= fp->store(value->GetFloatValue()); break; @@ -2094,7 +2197,7 @@ /***********************************************************************/ /* Set row values from a MySQL pseudo record. Specific to MySQL. */ /***********************************************************************/ -int ha_connect::ScanRecord(PGLOBAL g, uchar *) +int ha_connect::ScanRecord(PGLOBAL g, const uchar *) { char attr_buffer[1024]; char data_buffer[1024]; @@ -2237,7 +2340,7 @@ /* Check change in index column. Specific to MySQL. */ /* Should be elaborated to check for real changes. */ /***********************************************************************/ -int ha_connect::CheckRecord(PGLOBAL g, const uchar *, uchar *newbuf) +int ha_connect::CheckRecord(PGLOBAL g, const uchar *, const uchar *newbuf) { return ScanRecord(g, newbuf); } // end of dummy CheckRecord @@ -2430,7 +2533,7 @@ val= (neg) ? " IS NOT NULL" : " IS NULL"; break; case OP_LIKE: - val= " LIKE "; + val= (neg) ? " NOT LIKE " : " LIKE "; break; case OP_XX: val= (neg) ? " NOT BETWEEN " : " BETWEEN "; @@ -2546,7 +2649,7 @@ case Item_func::LE_FUNC: vop= OP_LE; break; case Item_func::GE_FUNC: vop= OP_GE; break; case Item_func::GT_FUNC: vop= OP_GT; break; - case Item_func::IN_FUNC: vop= OP_IN; + case Item_func::IN_FUNC: vop= OP_IN; /* fall through */ case Item_func::BETWEEN: ismul= true; neg= ((Item_func_opt_neg *)condf)->negated; @@ -2799,12 +2902,15 @@ case Item_func::LE_FUNC: vop= OP_LE; break; case Item_func::GE_FUNC: vop= OP_GE; break; case Item_func::GT_FUNC: vop= OP_GT; break; - case Item_func::LIKE_FUNC: vop= OP_LIKE; break; + case Item_func::LIKE_FUNC: + vop= OP_LIKE; + neg = ((Item_func_opt_neg *)condf)->negated; + break; case Item_func::ISNOTNULL_FUNC: - neg = true; - /* fall through */ + neg = true; + // fall through case Item_func::ISNULL_FUNC: vop= OP_NULL; break; - case Item_func::IN_FUNC: vop= OP_IN; + case Item_func::IN_FUNC: vop= OP_IN; /* fall through */ case Item_func::BETWEEN: ismul= true; neg= ((Item_func_opt_neg *)condf)->negated; @@ -2931,6 +3037,7 @@ break; } // endif ODBC + // fall through case MYSQL_TYPE_DATE: if (tty == TYPE_AM_ODBC) { strcat(s, "{d '"); @@ -4052,7 +4159,12 @@ DBUG_ENTER("ha_connect::info"); - if (trace) + if (!g) { + my_message(ER_UNKNOWN_ERROR, "Cannot get g pointer", MYF(0)); + DBUG_RETURN(HA_ERR_INTERNAL_ERROR); + } // endif g + + if (trace) htrc("%p In info: flag=%u valid_info=%d\n", this, flag, valid_info); // tdbp must be available to get updated info @@ -4063,7 +4175,7 @@ if (xmod == MODE_ANY || xmod == MODE_ALTER) { // Pure info, not a query pure= true; - xp->CheckCleanup(); + xp->CheckCleanup(xmod == MODE_ANY && valid_query_id == 0); } // endif xmod // This is necessary for getting file length @@ -4076,8 +4188,10 @@ } else DBUG_RETURN(HA_ERR_INTERNAL_ERROR); // Should never happen - if (!(tdbp= GetTDB(g))) - DBUG_RETURN(HA_ERR_INTERNAL_ERROR); // Should never happen + if (!(tdbp = GetTDB(g))) { + my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); + DBUG_RETURN(HA_ERR_INTERNAL_ERROR); + } // endif tdbp valid_info = false; } // endif tdbp @@ -4247,11 +4361,12 @@ } else return false; - /* check FILE_ACL */ - /* fall through */ + // check FILE_ACL + // fall through case TAB_ODBC: case TAB_JDBC: case TAB_MYSQL: + case TAB_MONGO: case TAB_DIR: case TAB_MAC: case TAB_WMI: @@ -4321,10 +4436,14 @@ return b; } // end of IsSameIndex -MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, - MODE newmode, bool *chk, bool *cras) +MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, + MODE newmode, bool *chk, bool *cras) { +#if defined(DEVELOPMENT) + if (true) { +#else if (trace) { +#endif LEX_STRING *query_string= thd_query_string(thd); htrc("%p check_mode: cmdtype=%d\n", this, thd_sql_command(thd)); htrc("Cmd=%.*s\n", (int) query_string->length, query_string->str); @@ -4336,7 +4455,7 @@ if (newmode == MODE_WRITE) { switch (thd_sql_command(thd)) { case SQLCOM_LOCK_TABLES: - locked= 2; + locked= 2; // fall through case SQLCOM_CREATE_TABLE: case SQLCOM_INSERT: case SQLCOM_LOAD: @@ -4430,9 +4549,9 @@ break; // } // endif partitioned - case SQLCOM_END: - // Met in procedures: IF(EXISTS(SELECT... - newmode= MODE_READ; + case SQLCOM_CHECK: // TODO implement it + case SQLCOM_END: // Met in procedures: IF(EXISTS(SELECT... + newmode= MODE_READ; break; default: htrc("Unsupported sql_command=%d\n", thd_sql_command(thd)); @@ -5084,7 +5203,8 @@ error|= sql->append("` "); error|= sql->append(type); - if (len && typ != TYPE_DATE && (typ != TYPE_DOUBLE || dec >= 0)) { + if (typ == TYPE_STRING || + (len && typ != TYPE_DATE && (typ != TYPE_DOUBLE || dec >= 0))) { error|= sql->append('('); error|= sql->append_ulonglong(len); @@ -5278,19 +5398,18 @@ #endif // __WIN__ //int hdr, mxe; int port = 0, mxr = 0, rc = 0, mul = 0, lrecl = 0; + PCSZ tabtyp = NULL; #if defined(ODBC_SUPPORT) POPARM sop= NULL; PCSZ ucnc= NULL; - bool cnc= false; + bool cnc= false; int cto= -1, qto= -1; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) PJPARM sjp= NULL; PCSZ driver= NULL; char *url= NULL; -//char *prop= NULL; - PCSZ tabtyp= NULL; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL); bool bif, ok= false, dbf= false; TABTYPE ttp= TAB_UNDEF; @@ -5298,6 +5417,10 @@ PCOLRES crp; PCONNECT xp= NULL; PGLOBAL g= GetPlug(thd, xp); + + if (!g) + return HA_ERR_INTERNAL_ERROR; + PDBUSER dup= PlgGetUser(g); PCATLG cat= (dup) ? dup->Catalog : NULL; PTOS topt= table_s->option_struct; @@ -5305,10 +5428,6 @@ String sql(buf, sizeof(buf), system_charset_info); sql.copy(STRING_WITH_LEN("CREATE TABLE whatever ("), system_charset_info); - - if (!g) - return HA_ERR_INTERNAL_ERROR; - user= host= pwd= tbl= src= col= ocl= pic= fcl= skc= rnk= zfn= dsn= NULL; // Get the useful create options @@ -5343,19 +5462,17 @@ #endif // __WIN__ port= atoi(GetListOption(g, "port", topt->oplist, "0")); #if defined(ODBC_SUPPORT) - mxr= atoi(GetListOption(g,"maxres", topt->oplist, "0")); + tabtyp = GetListOption(g, "Tabtype", topt->oplist, NULL); + mxr= atoi(GetListOption(g,"maxres", topt->oplist, "0")); cto= atoi(GetListOption(g,"ConnectTimeout", topt->oplist, "-1")); qto= atoi(GetListOption(g,"QueryTimeout", topt->oplist, "-1")); if ((ucnc= GetListOption(g, "UseDSN", topt->oplist))) cnc= (!*ucnc || *ucnc == 'y' || *ucnc == 'Y' || atoi(ucnc) != 0); #endif -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) driver= GetListOption(g, "Driver", topt->oplist, NULL); -// url= GetListOption(g, "URL", topt->oplist, NULL); -// prop = GetListOption(g, "Properties", topt->oplist, NULL); - tabtyp = GetListOption(g, "Tabtype", topt->oplist, NULL); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #if defined(PROMPT_OK) cop= atoi(GetListOption(g, "checkdsn", topt->oplist, "0")); #endif // PROMPT_OK @@ -5442,7 +5559,7 @@ supfnc |= (FNC_TABLE | FNC_DSN | FNC_DRIVER); break; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) case TAB_JDBC: if (fnc & FNC_DRIVER) { ok = true; @@ -5476,17 +5593,17 @@ supfnc |= (FNC_DRIVER | FNC_TABLE); break; -#endif // JDBC_SUPPORT - case TAB_DBF: - dbf= true; - // fall through - case TAB_CSV: - if (!fn && fnc != FNC_NO) - sprintf(g->Message, "Missing %s file name", topt->type); - else if (sep && strlen(sep) > 1) - sprintf(g->Message, "Invalid separator %s", sep); - else - ok= true; +#endif // JAVA_SUPPORT + case TAB_DBF: + dbf = true; + // Passthru + case TAB_CSV: + if (!fn && fnc != FNC_NO) + sprintf(g->Message, "Missing %s file name", topt->type); + else if (sep && strlen(sep) > 1) + sprintf(g->Message, "Invalid separator %s", sep); + else + ok = true; break; case TAB_MYSQL: @@ -5533,10 +5650,8 @@ ok = true; break; #endif // __WIN__ -#if defined(PIVOT_SUPPORT) case TAB_PIVOT: supfnc = FNC_NO; -#endif // PIVOT_SUPPORT case TAB_PRX: case TAB_TBL: case TAB_XCL: @@ -5559,12 +5674,22 @@ case TAB_XML: #endif // LIBXML2_SUPPORT || DOMDOC_SUPPORT case TAB_JSON: - if (!fn && !zfn && !mul) + dsn = strz(g, create_info->connect_string); + + if (!fn && !zfn && !mul && !dsn) sprintf(g->Message, "Missing %s file name", topt->type); else ok = true; break; +#if defined(JAVA_SUPPORT) + case TAB_MONGO: + if (!topt->tabname) + topt->tabname = tab; + + ok = true; + break; +#endif // JAVA_SUPPORT case TAB_VIR: ok = true; break; @@ -5637,7 +5762,7 @@ break; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) case TAB_JDBC: switch (fnc) { case FNC_NO: @@ -5666,7 +5791,7 @@ } // endswitch info break; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT case TAB_MYSQL: qrp = MyColumns(g, thd, host, db, user, pwd, tab, NULL, port, fnc == FNC_COL); @@ -5696,17 +5821,21 @@ } // endif OcrColumns break; -#if defined(PIVOT_SUPPORT) case TAB_PIVOT: qrp = PivotColumns(g, tab, src, pic, fcl, skc, host, db, user, pwd, port); break; -#endif // PIVOT_SUPPORT case TAB_VIR: qrp = VirColumns(g, fnc == FNC_COL); break; case TAB_JSON: - qrp = JSONColumns(g, (char*)db, topt, fnc == FNC_COL); + qrp = JSONColumns(g, db, dsn, topt, fnc == FNC_COL); break; +#if defined(MONGO_SUPPORT) + case TAB_MONGO: + url = strz(g, create_info->connect_string); + qrp = MGOColumns(g, db, url, topt, fnc == FNC_COL); + break; +#endif // MONGO_SUPPORT #if defined(LIBXML2_SUPPORT) || defined(DOMDOC_SUPPORT) case TAB_XML: qrp = XMLColumns(g, (char*)db, tab, topt, fnc == FNC_COL); @@ -5831,7 +5960,7 @@ break; case FLD_SCHEM: -#if defined(ODBC_SUPPORT) || defined(JDBC_SUPPORT) +#if defined(ODBC_SUPPORT) || defined(JAVA_SUPPORT) if ((ttp == TAB_ODBC || ttp == TAB_JDBC) && crp->Kdata) { if (schem && stricmp(schem, crp->Kdata->GetCharValue(i))) { sprintf(g->Message, @@ -5842,7 +5971,7 @@ schem = crp->Kdata->GetCharValue(i); } // endif ttp -#endif // ODBC_SUPPORT || JDBC_SUPPORT +#endif // ODBC_SUPPORT || JAVA_SUPPORT default: break; // Ignore } // endswitch Fld @@ -5890,7 +6019,7 @@ } else #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) if (ttp == TAB_JDBC) { int plgtyp; @@ -6022,6 +6151,7 @@ TABTYPE type; TABLE *st= table; // Probably unuseful THD *thd= ha_thd(); + LEX_STRING cnc = table_arg->s->connect_string; #if defined(WITH_PARTITION_STORAGE_ENGINE) partition_info *part_info= table_arg->part_info; #endif // WITH_PARTITION_STORAGE_ENGINE @@ -6069,7 +6199,8 @@ if (check_privileges(thd, options, GetDBfromName(name))) DBUG_RETURN(HA_ERR_INTERNAL_ERROR); - inward= IsFileType(type) && !options->filename; + inward= IsFileType(type) && !options->filename && + (type != TAB_JSON || !cnc.length); if (options->data_charset) { const CHARSET_INFO *data_charset; @@ -6122,6 +6253,7 @@ DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } // endif tabname + // fall through case TAB_MYSQL: #if defined(WITH_PARTITION_STORAGE_ENGINE) if (!part_info) @@ -6166,7 +6298,7 @@ DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } // endif CheckSelf - }break; + } break; default: /* do nothing */; break; } // endswitch ttp @@ -6177,7 +6309,7 @@ // Note that if no support is specified, the default is MS-DOM // on Windows and libxml2 otherwise - switch (*xsup) { + switch (toupper(*xsup)) { case '*': #if defined(__WIN__) dom= true; @@ -6290,6 +6422,7 @@ case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_STRING: +#if 0 if (!fp->field_length) { sprintf(g->Message, "Unsupported 0 length for column %s", fp->field_name); @@ -6299,7 +6432,7 @@ MYF(0), fp->field_name); DBUG_RETURN(rc); } // endif fp - +#endif // 0 break; // To be checked case MYSQL_TYPE_BIT: case MYSQL_TYPE_NULL: @@ -6612,7 +6745,7 @@ } // end of FileExists // Called by SameString and NoFieldOptionChange -bool ha_connect::CheckString(const char *str1, const char *str2) +bool ha_connect::CheckString(PCSZ str1, PCSZ str2) { bool b1= (!str1 || !*str1), b2= (!str2 || !*str2); @@ -7029,7 +7162,7 @@ "../../../../storage/connect/"); // for testing #endif // XMSG -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) static MYSQL_SYSVAR_STR(jvm_path, JvmPath, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, "Path to the directory where is the JVM lib", @@ -7041,7 +7174,7 @@ "Java class path", // check_class_path, update_class_path, NULL, NULL, NULL); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT static struct st_mysql_sys_var* connect_system_variables[]= { @@ -7060,13 +7193,17 @@ #if defined(XMSG) MYSQL_SYSVAR(errmsg_dir_path), #endif // XMSG + MYSQL_SYSVAR(json_null), MYSQL_SYSVAR(json_grp_size), -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) MYSQL_SYSVAR(jvm_path), MYSQL_SYSVAR(class_path), MYSQL_SYSVAR(java_wrapper), -#endif // JDBC_SUPPORT - NULL +#endif // JAVA_SUPPORT +#if defined(JAVA_SUPPORT) +//MYSQL_SYSVAR(enable_mongo), +#endif // JAVA_SUPPORT +NULL }; maria_declare_plugin(connect) @@ -7075,14 +7212,14 @@ &connect_storage_engine, "CONNECT", "Olivier Bertrand", - "Management of External Data (SQL/MED), including many file formats", + "Management of External Data (SQL/NOSQL/MED), including many file formats", PLUGIN_LICENSE_GPL, connect_init_func, /* Plugin Init */ connect_done_func, /* Plugin Deinit */ 0x0106, /* version number (1.05) */ NULL, /* status variables */ connect_system_variables, /* system variables */ - "1.06.0001", /* string version */ - MariaDB_PLUGIN_MATURITY_BETA /* maturity */ + "1.06.0005", /* string version */ + MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ } maria_declare_plugin_end; diff -Nru mariadb-10.1-10.1.25/storage/connect/ha_connect.h mariadb-10.1-10.1.30/storage/connect/ha_connect.h --- mariadb-10.1-10.1.25/storage/connect/ha_connect.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/ha_connect.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) Olivier Bertrand 2004 - 2015 +/* Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,6 +14,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ /** @file ha_connect.h + Author Olivier Bertrand @brief The ha_connect engine is a prototype storage engine to access external data. @@ -31,8 +32,6 @@ /****************************************************************************/ #include "mycat.h" -static char *strz(PGLOBAL g, LEX_STRING &ls); - /****************************************************************************/ /* Structures used to pass info between CONNECT and ha_connect. */ /****************************************************************************/ @@ -165,8 +164,8 @@ ~ha_connect(); // CONNECT Implementation - static bool connect_init(void); - static bool connect_end(void); +//static bool connect_init(void); +//static bool connect_end(void); TABTYPE GetRealType(PTOS pos= NULL); char *GetRealString(PCSZ s); PCSZ GetStringOption(PCSZ opname, PCSZ sdef= NULL); @@ -206,13 +205,13 @@ bool IsOpened(void); int CloseTable(PGLOBAL g); int MakeRecord(char *buf); - int ScanRecord(PGLOBAL g, uchar *buf); - int CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf); + int ScanRecord(PGLOBAL g, const uchar *buf); + int CheckRecord(PGLOBAL g, const uchar *oldbuf, const uchar *newbuf); int ReadIndexed(uchar *buf, OPVAL op, const key_range *kr= NULL); bool IsIndexed(Field *fp); bool MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL op, char q, const key_range *kr); - inline char *Strz(LEX_STRING &ls); +//inline char *Strz(LEX_STRING &ls); key_range start_key; @@ -230,7 +229,7 @@ /** @brief The file extensions. */ - const char **bas_ext() const; +//const char **bas_ext() const; /** Check if a storage engine supports a particular alter table in-place @@ -347,6 +346,13 @@ PFIL CondFilter(PGLOBAL g, Item *cond); //PFIL CheckFilter(PGLOBAL g); +/** admin commands - called from mysql_admin_table */ +virtual int check(THD* thd, HA_CHECK_OPT* check_opt) +{ + // TODO: implement it + return HA_ADMIN_OK; // Just to avoid error message with checktables +} // end of check + /** Number of rows in table. It will only be called if (table_flags() & (HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT)) != 0 diff -Nru mariadb-10.1-10.1.25/storage/connect/javaconn.cpp mariadb-10.1-10.1.30/storage/connect/javaconn.cpp --- mariadb-10.1-10.1.25/storage/connect/javaconn.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/javaconn.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,622 @@ +/************ Javaconn C++ Functions Source Code File (.CPP) ***********/ +/* Name: JAVAConn.CPP Version 1.0 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the JAVA connection classes functions. */ +/***********************************************************************/ + +#if defined(__WIN__) +// This is needed for RegGetValue +#define _WINVER 0x0601 +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0601 +#endif // __WIN__ + +/***********************************************************************/ +/* Include relevant MariaDB header file. */ +/***********************************************************************/ +#include +//#include +#if defined(__WIN__) +#include // for getcwd +#if defined(__BORLANDC__) +#define __MFC_COMPAT__ // To define min/max as macro +#endif // __BORLANDC__ +#else // !__WIN__ +#if defined(UNIX) +#include +#else // !UNIX +#endif // !UNIX +#include +#include // for getenv +#define NODW +#endif // !__WIN__ + +/***********************************************************************/ +/* Required objects includes. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "colblk.h" +#include "xobject.h" +#include "xtable.h" +#include "tabext.h" +#include "javaconn.h" +#include "resource.h" +#include "valblk.h" +#include "osutil.h" + +#if defined(__WIN__) +extern "C" HINSTANCE s_hModule; // Saved module handle +#endif // __WIN__ +#define nullptr 0 + +//TYPCONV GetTypeConv(); +//int GetConvSize(); +extern char *JvmPath; // The connect_jvm_path global variable value +extern char *ClassPath; // The connect_class_path global variable value + +char *GetPluginDir(void); +char *GetJavaWrapper(void); // The connect_java_wrapper variable value + +/***********************************************************************/ +/* Static JAVAConn objects. */ +/***********************************************************************/ +void *JAVAConn::LibJvm = NULL; +CRTJVM JAVAConn::CreateJavaVM = NULL; +GETJVM JAVAConn::GetCreatedJavaVMs = NULL; +#if defined(_DEBUG) +GETDEF JAVAConn::GetDefaultJavaVMInitArgs = NULL; +#endif // _DEBUG + +/***********************************************************************/ +/* Some macro's (should be defined elsewhere to be more accessible) */ +/***********************************************************************/ +#if defined(_DEBUG) +#define ASSERT(f) assert(f) +#define DEBUG_ONLY(f) (f) +#else // !_DEBUG +#define ASSERT(f) ((void)0) +#define DEBUG_ONLY(f) ((void)0) +#endif // !_DEBUG + +/***********************************************************************/ +/* Allocate the structure used to refer to the result set. */ +/***********************************************************************/ +static JCATPARM *AllocCatInfo(PGLOBAL g, JCATINFO fid, PCSZ db, + PCSZ tab, PQRYRES qrp) +{ + JCATPARM *cap; + +#if defined(_DEBUG) + assert(qrp); +#endif + + if ((cap = (JCATPARM *)PlgDBSubAlloc(g, NULL, sizeof(JCATPARM)))) { + memset(cap, 0, sizeof(JCATPARM)); + cap->Id = fid; + cap->Qrp = qrp; + cap->DB = db; + cap->Tab = tab; + } // endif cap + + return cap; +} // end of AllocCatInfo + +/***********************************************************************/ +/* JAVAConn construction/destruction. */ +/***********************************************************************/ +JAVAConn::JAVAConn(PGLOBAL g, PCSZ wrapper) +{ + m_G = g; + jvm = nullptr; // Pointer to the JVM (Java Virtual Machine) + env = nullptr; // Pointer to native interface + jdi = nullptr; // Pointer to the java wrapper class + job = nullptr; // The java wrapper class object + errid = nullptr; + DiscFunc = "Disconnect"; + Msg = NULL; + m_Wrap = (wrapper) ? wrapper : GetJavaWrapper(); + + if (!strchr(m_Wrap, '/')) { + // Add the wrapper package name + char *wn = (char*)PlugSubAlloc(g, NULL, strlen(m_Wrap) + 10); + m_Wrap = strcat(strcpy(wn, "wrappers/"), m_Wrap); + } // endif m_Wrap + + fp = NULL; + m_Opened = false; + m_Connected = false; + m_Rows = 0; +//*m_ErrMsg = '\0'; +} // end of JAVAConn + +//JAVAConn::~JAVAConn() +// { +//if (Connected()) +// EndCom(); + +// } // end of ~JAVAConn + +/***********************************************************************/ +/* Screen for errors. */ +/***********************************************************************/ +bool JAVAConn::Check(jint rc) +{ + jstring s; + + if (env->ExceptionCheck()) { + jthrowable exc = env->ExceptionOccurred(); + jmethodID tid = env->GetMethodID(env->FindClass("java/lang/Object"), + "toString", "()Ljava/lang/String;"); + + if (exc != nullptr && tid != nullptr) { + jstring s = (jstring)env->CallObjectMethod(exc, tid); + const char *utf = env->GetStringUTFChars(s, (jboolean)false); + env->DeleteLocalRef(s); + Msg = PlugDup(m_G, utf); + } else + Msg = "Exception occured"; + + env->ExceptionClear(); + } else if (rc < 0) { + s = (jstring)env->CallObjectMethod(job, errid); + Msg = (char*)env->GetStringUTFChars(s, (jboolean)false); + } else + Msg = NULL; + + return (Msg != NULL); +} // end of Check + +/***********************************************************************/ +/* Get MethodID if not exists yet. */ +/***********************************************************************/ +bool JAVAConn::gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig) +{ + if (mid == nullptr) { + mid = env->GetMethodID(jdi, name, sig); + + if (Check()) { + strcpy(g->Message, Msg); + return true; + } else + return false; + + } else + return false; + +} // end of gmID + +#if 0 +/***********************************************************************/ +/* Utility routine. */ +/***********************************************************************/ +int JAVAConn::GetMaxValue(int n) +{ + jint m; + jmethodID maxid = nullptr; + + if (gmID(m_G, maxid, "GetMaxValue", "(I)I")) + return -1; + + // call method + if (Check(m = env->CallIntMethod(job, maxid, n))) + htrc("GetMaxValue: %s", Msg); + + return (int)m; +} // end of GetMaxValue +#endif // 0 + +/***********************************************************************/ +/* Reset the JVM library. */ +/***********************************************************************/ +void JAVAConn::ResetJVM(void) +{ + if (LibJvm) { +#if defined(__WIN__) + FreeLibrary((HMODULE)LibJvm); +#else // !__WIN__ + dlclose(LibJvm); +#endif // !__WIN__ + LibJvm = NULL; + CreateJavaVM = NULL; + GetCreatedJavaVMs = NULL; +#if defined(_DEBUG) + GetDefaultJavaVMInitArgs = NULL; +#endif // _DEBUG + } // endif LibJvm + +} // end of ResetJVM + +/***********************************************************************/ +/* Dynamically link the JVM library. */ +/* The purpose of this function is to allow using the CONNECT plugin */ +/* for other table types when the Java JDK is not installed. */ +/***********************************************************************/ +bool JAVAConn::GetJVM(PGLOBAL g) +{ + int ntry; + + if (!LibJvm) { + char soname[512]; + +#if defined(__WIN__) + for (ntry = 0; !LibJvm && ntry < 3; ntry++) { + if (!ntry && JvmPath) { + strcat(strcpy(soname, JvmPath), "\\jvm.dll"); + ntry = 3; // No other try + } else if (ntry < 2 && getenv("JAVA_HOME")) { + strcpy(soname, getenv("JAVA_HOME")); + + if (ntry == 1) + strcat(soname, "\\jre"); + + strcat(soname, "\\bin\\client\\jvm.dll"); + } else { + // Try to find it through the registry + char version[16]; + char javaKey[64] = "SOFTWARE\\JavaSoft\\Java Runtime Environment"; + LONG rc; + DWORD BufferSize = 16; + + strcpy(soname, "jvm.dll"); // In case it fails + + if ((rc = RegGetValue(HKEY_LOCAL_MACHINE, javaKey, "CurrentVersion", + RRF_RT_ANY, NULL, (PVOID)&version, &BufferSize)) == ERROR_SUCCESS) { + strcat(strcat(javaKey, "\\"), version); + BufferSize = sizeof(soname); + + if ((rc = RegGetValue(HKEY_LOCAL_MACHINE, javaKey, "RuntimeLib", + RRF_RT_ANY, NULL, (PVOID)&soname, &BufferSize)) != ERROR_SUCCESS) + printf("RegGetValue: rc=%ld\n", rc); + + } // endif rc + + ntry = 3; // Try this only once + } // endelse + + // Load the desired shared library + LibJvm = LoadLibrary(soname); + } // endfor ntry + + // Get the needed entries + if (!LibJvm) { + char buf[256]; + DWORD rc = GetLastError(); + + sprintf(g->Message, MSG(DLL_LOAD_ERROR), rc, soname); + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, NULL, rc, 0, + (LPTSTR)buf, sizeof(buf), NULL); + strcat(strcat(g->Message, ": "), buf); + } else if (!(CreateJavaVM = (CRTJVM)GetProcAddress((HINSTANCE)LibJvm, + "JNI_CreateJavaVM"))) { + sprintf(g->Message, MSG(PROCADD_ERROR), GetLastError(), "JNI_CreateJavaVM"); + FreeLibrary((HMODULE)LibJvm); + LibJvm = NULL; + } else if (!(GetCreatedJavaVMs = (GETJVM)GetProcAddress((HINSTANCE)LibJvm, + "JNI_GetCreatedJavaVMs"))) { + sprintf(g->Message, MSG(PROCADD_ERROR), GetLastError(), "JNI_GetCreatedJavaVMs"); + FreeLibrary((HMODULE)LibJvm); + LibJvm = NULL; +#if defined(_DEBUG) + } else if (!(GetDefaultJavaVMInitArgs = (GETDEF)GetProcAddress((HINSTANCE)LibJvm, + "JNI_GetDefaultJavaVMInitArgs"))) { + sprintf(g->Message, MSG(PROCADD_ERROR), GetLastError(), + "JNI_GetDefaultJavaVMInitArgs"); + FreeLibrary((HMODULE)LibJvm); + LibJvm = NULL; +#endif // _DEBUG + } // endif LibJvm +#else // !__WIN__ + const char *error = NULL; + + for (ntry = 0; !LibJvm && ntry < 2; ntry++) { + if (!ntry && JvmPath) { + strcat(strcpy(soname, JvmPath), "/libjvm.so"); + ntry = 2; + } else if (!ntry && getenv("JAVA_HOME")) { + // TODO: Replace i386 by a better guess + strcat(strcpy(soname, getenv("JAVA_HOME")), "/jre/lib/i386/client/libjvm.so"); + } else { // Will need LD_LIBRARY_PATH to be set + strcpy(soname, "libjvm.so"); + ntry = 2; + } // endelse + + LibJvm = dlopen(soname, RTLD_LAZY); + } // endfor ntry + + // Load the desired shared library + if (!LibJvm) { + error = dlerror(); + sprintf(g->Message, MSG(SHARED_LIB_ERR), soname, SVP(error)); + } else if (!(CreateJavaVM = (CRTJVM)dlsym(LibJvm, "JNI_CreateJavaVM"))) { + error = dlerror(); + sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_CreateJavaVM", SVP(error)); + dlclose(LibJvm); + LibJvm = NULL; + } else if (!(GetCreatedJavaVMs = (GETJVM)dlsym(LibJvm, "JNI_GetCreatedJavaVMs"))) { + error = dlerror(); + sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_GetCreatedJavaVMs", SVP(error)); + dlclose(LibJvm); + LibJvm = NULL; +#if defined(_DEBUG) + } else if (!(GetDefaultJavaVMInitArgs = (GETDEF)dlsym(LibJvm, + "JNI_GetDefaultJavaVMInitArgs"))) { + error = dlerror(); + sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_GetDefaultJavaVMInitArgs", SVP(error)); + dlclose(LibJvm); + LibJvm = NULL; +#endif // _DEBUG + } // endif LibJvm +#endif // !__WIN__ + + } // endif LibJvm + + return LibJvm == NULL; +} // end of GetJVM + +/***********************************************************************/ +/* Open: connect to a data source. */ +/***********************************************************************/ +bool JAVAConn::Open(PGLOBAL g) +{ + bool brc = true, err = false; + jboolean jt = (trace > 0); + + // Link or check whether jvm library was linked + if (GetJVM(g)) + return true; + + // Firstly check whether the jvm was already created + JavaVM* jvms[1]; + jsize jsz; + jint rc = GetCreatedJavaVMs(jvms, 1, &jsz); + + if (rc == JNI_OK && jsz == 1) { + // jvm already existing + jvm = jvms[0]; + rc = jvm->AttachCurrentThread((void**)&env, nullptr); + + if (rc != JNI_OK) { + strcpy(g->Message, "Cannot attach jvm to the current thread"); + return true; + } // endif rc + + } else { + /*******************************************************************/ + /* Create a new jvm */ + /*******************************************************************/ + PSTRG jpop = new(g)STRING(g, 512, "-Djava.class.path=."); + char *cp = NULL; + char sep; + +#if defined(__WIN__) + sep = ';'; +#define N 1 + //#define N 2 + //#define N 3 +#else + sep = ':'; +#define N 1 +#endif + + // Add wrappers jar files + AddJars(jpop, sep); + + //================== prepare loading of Java VM ============================ + JavaVMInitArgs vm_args; // Initialization arguments + JavaVMOption* options = new JavaVMOption[N]; // JVM invocation options + + // where to find java .class + if (ClassPath && *ClassPath) { + jpop->Append(sep); + jpop->Append(ClassPath); + } // endif ClassPath + + // Java source will be compiled as a jar file installed in the plugin dir + jpop->Append(sep); + jpop->Append(GetPluginDir()); + jpop->Append("JdbcInterface.jar"); + + // All wrappers are pre-compiled in JavaWrappers.jar in the plugin dir + jpop->Append(sep); + jpop->Append(GetPluginDir()); + jpop->Append("JavaWrappers.jar"); + + if ((cp = getenv("CLASSPATH"))) { + jpop->Append(sep); + jpop->Append(cp); + } // endif cp + + if (trace) { + htrc("ClassPath=%s\n", ClassPath); + htrc("CLASSPATH=%s\n", cp); + htrc("%s\n", jpop->GetStr()); + } // endif trace + + options[0].optionString = jpop->GetStr(); +#if N == 2 + options[1].optionString = "-Xcheck:jni"; +#endif +#if N == 3 + options[1].optionString = "-Xms256M"; + options[2].optionString = "-Xmx512M"; +#endif +#if defined(_DEBUG) + vm_args.version = JNI_VERSION_1_2; // minimum Java version + rc = GetDefaultJavaVMInitArgs(&vm_args); +#else + vm_args.version = JNI_VERSION_1_6; // minimum Java version +#endif // _DEBUG + vm_args.nOptions = N; // number of options + vm_args.options = options; + vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail + + //=============== load and initialize Java VM and JNI interface ============= + rc = CreateJavaVM(&jvm, (void**)&env, &vm_args); // YES !! + delete options; // we then no longer need the initialisation options. + + switch (rc) { + case JNI_OK: + strcpy(g->Message, "VM successfully created"); + brc = false; + break; + case JNI_ERR: + strcpy(g->Message, "Initialising JVM failed: unknown error"); + break; + case JNI_EDETACHED: + strcpy(g->Message, "Thread detached from the VM"); + break; + case JNI_EVERSION: + strcpy(g->Message, "JNI version error"); + break; + case JNI_ENOMEM: + strcpy(g->Message, "Not enough memory"); + break; + case JNI_EEXIST: + strcpy(g->Message, "VM already created"); + break; + case JNI_EINVAL: + strcpy(g->Message, "Invalid arguments"); + break; + default: + sprintf(g->Message, "Unknown return code %d", (int)rc); + break; + } // endswitch rc + + if (trace) + htrc("%s\n", g->Message); + + if (brc) + return true; + + //=============== Display JVM version =============== + jint ver = env->GetVersion(); + printf("JVM Version %d.%d\n", ((ver >> 16) & 0x0f), (ver & 0x0f)); + } // endif rc + + // try to find the java wrapper class + jdi = env->FindClass(m_Wrap); + + if (jdi == nullptr) { + sprintf(g->Message, "ERROR: class %s not found!", m_Wrap); + return true; + } // endif jdi + +#if 0 // Suppressed because it does not make any usable change + if (b && jpath && *jpath) { + // Try to add that path the the jvm class path + jmethodID alp = env->GetStaticMethodID(jdi, "addLibraryPath", + "(Ljava/lang/String;)I"); + + if (alp == nullptr) { + env->ExceptionDescribe(); + env->ExceptionClear(); + } else { + char *msg; + jstring path = env->NewStringUTF(jpath); + rc = env->CallStaticIntMethod(jdi, alp, path); + + if ((msg = Check(rc))) { + strcpy(g->Message, msg); + env->DeleteLocalRef(path); + return RC_FX; + } else switch (rc) { + case JNI_OK: + printf("jpath added\n"); + break; + case JNI_EEXIST: + printf("jpath already exist\n"); + break; + case JNI_ERR: + default: + strcpy(g->Message, "Error adding jpath"); + env->DeleteLocalRef(path); + return RC_FX; + } // endswitch rc + + env->DeleteLocalRef(path); + } // endif alp + + } // endif jpath +#endif // 0 + + // if class found, continue + jmethodID ctor = env->GetMethodID(jdi, "", "(Z)V"); + + if (ctor == nullptr) { + sprintf(g->Message, "ERROR: %s constructor not found!", m_Wrap); + return true; + } else + job = env->NewObject(jdi, ctor, jt); + + if (job == nullptr) { + sprintf(g->Message, "%s class object not constructed!", m_Wrap); + return true; + } // endif job + + // If the object is successfully constructed, + // we can then search for the method we want to call, + // and invoke it for the object: + errid = env->GetMethodID(jdi, "GetErrmsg", "()Ljava/lang/String;"); + + if (env->ExceptionCheck()) { + strcpy(g->Message, "ERROR: method GetErrmsg() not found!"); + env->ExceptionDescribe(); + env->ExceptionClear(); + return true; + } // endif Check + + /*********************************************************************/ + /* Link a Fblock. This make possible to automatically close it */ + /* in case of error (throw). */ + /*********************************************************************/ + PDBUSER dbuserp = (PDBUSER)g->Activityp->Aptr; + + fp = (PFBLOCK)PlugSubAlloc(g, NULL, sizeof(FBLOCK)); + fp->Type = TYPE_FB_JAVA; + fp->Fname = NULL; + fp->Next = dbuserp->Openlist; + dbuserp->Openlist = fp; + fp->Count = 1; + fp->Length = 0; + fp->Memory = NULL; + fp->Mode = MODE_ANY; + fp->File = this; + fp->Handle = 0; + + m_Opened = true; + return false; +} // end of Open + +/***********************************************************************/ +/* Disconnect connection */ +/***********************************************************************/ +void JAVAConn::Close() +{ + jint rc; + + if (m_Connected) { + jmethodID did = nullptr; + + // Could have been detached in case of join + rc = jvm->AttachCurrentThread((void**)&env, nullptr); + + if (gmID(m_G, did, DiscFunc, "()I")) + printf("%s\n", Msg); + else if (Check(env->CallIntMethod(job, did))) + printf("%s: %s\n", DiscFunc, Msg); + + m_Connected = false; + } // endif m_Connected + + if ((rc = jvm->DetachCurrentThread()) != JNI_OK) + printf("DetachCurrentThread: rc=%d\n", (int)rc); + + if (fp) + fp->Count = 0; + + m_Opened = false; +} // end of Close diff -Nru mariadb-10.1-10.1.25/storage/connect/javaconn.h mariadb-10.1-10.1.30/storage/connect/javaconn.h --- mariadb-10.1-10.1.25/storage/connect/javaconn.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/javaconn.h 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,129 @@ +/***********************************************************************/ +/* JavaConn.h : header file for the Java connection classes. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Included C-definition files required by the interface. */ +/***********************************************************************/ +#include "block.h" +#include "jdbccat.h" + +/***********************************************************************/ +/* Java native interface. */ +/***********************************************************************/ +#include + +/***********************************************************************/ +/* Constants and defines. */ +/***********************************************************************/ +// Miscellaneous sizing info +#define MAX_NUM_OF_MSG 10 // Max number of error messages +//efine MAX_CURRENCY 30 // Max size of Currency($) string +#define MAX_TNAME_LEN 32 // Max size of table names +//efine MAX_FNAME_LEN 256 // Max size of field names +//efine MAX_STRING_INFO 256 // Max size of string from SQLGetInfo +//efine MAX_DNAME_LEN 256 // Max size of Recordset names +//efine MAX_CONNECT_LEN 512 // Max size of Connect string +//efine MAX_CURSOR_NAME 18 // Max size of a cursor name +//efine DEFAULT_FIELD_TYPE 0 // TYPE_NULL + +#if !defined(__WIN__) +typedef unsigned char *PUCHAR; +#endif // !__WIN__ + +enum JCATINFO { + JCAT_TAB = 1, // JDBC Tables + JCAT_COL = 2, // JDBC Columns + JCAT_KEY = 3, // JDBC PrimaryKeys +}; + +/***********************************************************************/ +/* This structure is used to control the catalog functions. */ +/***********************************************************************/ +typedef struct tagJCATPARM { + JCATINFO Id; // Id to indicate function + PQRYRES Qrp; // Result set pointer + PCSZ DB; // Database (Schema) + PCSZ Tab; // Table name or pattern + PCSZ Pat; // Table type or column pattern +} JCATPARM; + +typedef jint(JNICALL *CRTJVM) (JavaVM **, void **, void *); +typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *); +#if defined(_DEBUG) +typedef jint(JNICALL *GETDEF) (void *); +#endif // _DEBUG + +//class JAVAConn; + +/***********************************************************************/ +/* JAVAConn class. */ +/***********************************************************************/ +class DllExport JAVAConn : public BLOCK { + friend class TDBJMG; + friend class JMGDISC; +private: + JAVAConn(); // Standard (unused) constructor + +public: + // Constructor + JAVAConn(PGLOBAL g, PCSZ wrapper); + + // Set static variables + static void SetJVM(void) { + LibJvm = NULL; + CreateJavaVM = NULL; + GetCreatedJavaVMs = NULL; +#if defined(_DEBUG) + GetDefaultJavaVMInitArgs = NULL; +#endif // _DEBUG + } // end of SetJVM + + static void ResetJVM(void); + static bool GetJVM(PGLOBAL g); + + // Implementation +public: + //virtual ~JAVAConn(); + bool IsOpen(void) { return m_Opened; } + bool IsConnected(void) { return m_Connected; } + + // Java operations +protected: + bool gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig); + bool Check(jint rc = 0); + +public: + virtual void AddJars(PSTRG jpop, char sep) = 0; + virtual bool Connect(PJPARM sop) = 0; + virtual bool Open(PGLOBAL g); + virtual bool MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, + PCSZ filter, bool pipe) = 0; + virtual void Close(void); + +protected: + // Members +#if defined(__WIN__) + static HANDLE LibJvm; // Handle to the jvm DLL +#else // !__WIN__ + static void *LibJvm; // Handle for the jvm shared library +#endif // !__WIN__ + static CRTJVM CreateJavaVM; + static GETJVM GetCreatedJavaVMs; +#if defined(_DEBUG) + static GETDEF GetDefaultJavaVMInitArgs; +#endif // _DEBUG + PGLOBAL m_G; + JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine) + JNIEnv *env; // Pointer to native interface + jclass jdi; // Pointer to the java wrapper class + jobject job; // The java wrapper class object + jmethodID errid; // The GetErrmsg method ID + PFBLOCK fp; + bool m_Opened; + bool m_Connected; + PCSZ DiscFunc; + PCSZ Msg; + PCSZ m_Wrap; + int m_Rows; +}; // end of JAVAConn class definition Binary files /tmp/tmpvedavx/2LSM_40RBk/mariadb-10.1-10.1.25/storage/connect/JavaWrappers.jar and /tmp/tmpvedavx/JfzXAFx5hF/mariadb-10.1-10.1.30/storage/connect/JavaWrappers.jar differ diff -Nru mariadb-10.1-10.1.25/storage/connect/jdbccat.h mariadb-10.1-10.1.30/storage/connect/jdbccat.h --- mariadb-10.1-10.1.25/storage/connect/jdbccat.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jdbccat.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,16 +1,19 @@ +#ifndef __JDBCCAT_H +#define __JDBCCAT_H + // Timeout and net wait defaults #define DEFAULT_LOGIN_TIMEOUT -1 // means do not set #define DEFAULT_QUERY_TIMEOUT -1 // means do not set typedef struct jdbc_parms { - int CheckSize(int rows); + int CheckSize(int rows); PCSZ Driver; // JDBC driver PCSZ Url; // Driver URL PCSZ User; // User connect info PCSZ Pwd; // Password connect info -//char *Properties; // Connection property list //int Cto; // Connect timeout //int Qto; // Query timeout + int Version; // Driver version int Fsize; // Fetch size bool Scrollable; // Scrollable cursor } JDBCPARM, *PJPARM; @@ -28,3 +31,5 @@ PQRYRES JDBCTables(PGLOBAL g, PCSZ db, PCSZ tabpat, PCSZ tabtyp, int maxres, bool info, PJPARM sop); PQRYRES JDBCDrivers(PGLOBAL g, int maxres, bool info); + +#endif // __JDBCCAT_H diff -Nru mariadb-10.1-10.1.25/storage/connect/jdbconn.cpp mariadb-10.1-10.1.30/storage/connect/jdbconn.cpp --- mariadb-10.1-10.1.25/storage/connect/jdbconn.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jdbconn.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -53,38 +53,28 @@ #include "osutil.h" -#if defined(__WIN__) -extern "C" HINSTANCE s_hModule; // Saved module handle -#endif // __WIN__ +//#if defined(__WIN__) +//extern "C" HINSTANCE s_hModule; // Saved module handle +//#endif // __WIN__ #define nullptr 0 TYPCONV GetTypeConv(); int GetConvSize(); -extern char *JvmPath; // The connect_jvm_path global variable value -extern char *ClassPath; // The connect_class_path global variable value +//extern char *JvmPath; // The connect_jvm_path global variable value +//extern char *ClassPath; // The connect_class_path global variable value -char *GetJavaWrapper(void); // The connect_java_wrapper variable value - -/***********************************************************************/ -/* Static JDBConn objects. */ -/***********************************************************************/ -void *JDBConn::LibJvm = NULL; -CRTJVM JDBConn::CreateJavaVM = NULL; -GETJVM JDBConn::GetCreatedJavaVMs = NULL; -#if defined(_DEBUG) -GETDEF JDBConn::GetDefaultJavaVMInitArgs = NULL; -#endif // _DEBUG +//char *GetJavaWrapper(void); // The connect_java_wrapper variable value /***********************************************************************/ /* Some macro's (should be defined elsewhere to be more accessible) */ /***********************************************************************/ -#if defined(_DEBUG) -#define ASSERT(f) assert(f) -#define DEBUG_ONLY(f) (f) -#else // !_DEBUG -#define ASSERT(f) ((void)0) -#define DEBUG_ONLY(f) ((void)0) -#endif // !_DEBUG +//#if defined(_DEBUG) +//#define ASSERT(f) assert(f) +//#define DEBUG_ONLY(f) (f) +//#else // !_DEBUG +//#define ASSERT(f) ((void)0) +//#define DEBUG_ONLY(f) ((void)0) +//#endif // !_DEBUG // To avoid gcc warning int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v); @@ -120,42 +110,48 @@ int type; switch (stp) { - case -1: // LONGVARCHAR + case -1: // LONGVARCHAR, TEXT + case -16: // LONGNVARCHAR, NTEXT (unicode) if (GetTypeConv() != TPC_YES) return TYPE_ERROR; else len = MY_MIN(abs(len), GetConvSize()); - case 12: // VARCHAR + // Pass through + case 12: // VARCHAR + case -9: // NVARCHAR (unicode) v = 'V'; - case 1: // CHAR + case 1: // CHAR + case -15: // NCHAR (unicode) + case -8: // ROWID type = TYPE_STRING; break; - case 2: // NUMERIC - case 3: // DECIMAL - case -3: // VARBINARY + case 2: // NUMERIC + case 3: // DECIMAL + case -3: // VARBINARY type = TYPE_DECIM; break; - case 4: // INTEGER + case 4: // INTEGER type = TYPE_INT; break; - case 5: // SMALLINT + case 5: // SMALLINT type = TYPE_SHORT; break; - case -6: // TINYINT - case -7: // BIT + case -6: // TINYINT + case -7: // BIT + case 16: // BOOLEAN type = TYPE_TINY; break; - case 6: // FLOAT - case 7: // REAL - case 8: // DOUBLE + case 6: // FLOAT + case 7: // REAL + case 8: // DOUBLE type = TYPE_DOUBLE; break; - case 93: // TIMESTAMP, DATETIME + case 93: // TIMESTAMP, DATETIME type = TYPE_DATE; len = 19 + ((prec) ? (prec+1) : 0); v = (tn && toupper(tn[0]) == 'T') ? 'S' : 'E'; break; - case 91: // DATE, YEAR + case 91: // DATE, YEAR type = TYPE_DATE; if (!tn || toupper(tn[0]) != 'Y') { @@ -167,17 +163,27 @@ } // endif len break; - case 92: // TIME + case 92: // TIME type = TYPE_DATE; len = 8 + ((prec) ? (prec+1) : 0); v = 'T'; break; - case -5: // BIGINT + case -5: // BIGINT type = TYPE_BIGINT; break; - case 0: // NULL - case -2: // BINARY - case -4: // LONGVARBINARY + case 0: // NULL + case -2: // BINARY + case -4: // LONGVARBINARY + case 70: // DATALINK + case 2000: // JAVA_OBJECT + case 2001: // DISTINCT + case 2002: // STRUCT + case 2003: // ARRAY + case 2004: // BLOB + case 2005: // CLOB + case 2006: // REF + case 2009: // SQLXML + case 2011: // NCLOB default: type = TYPE_ERROR; len = 0; @@ -224,11 +230,11 @@ FLD_SCALE, FLD_RADIX, FLD_NULL, FLD_REM}; unsigned int length[] = {0, 0, 0, 0, 6, 0, 10, 10, 6, 6, 6, 0}; bool b[] = {true, true, false, false, false, false, false, false, true, true, false, true}; - int i, n, ncol = 12; - PCOLRES crp; - PQRYRES qrp; + int i, n, ncol = 12; + PCOLRES crp; + PQRYRES qrp; JCATPARM *cap; - JDBConn *jcp = NULL; + JDBConn *jcp = NULL; /************************************************************************/ /* Do an evaluation of the result size. */ @@ -236,7 +242,7 @@ if (!info) { jcp = new(g)JDBConn(g, NULL); - if (jcp->Open(sjp) != RC_OK) // openReadOnly + noJDBCdialog + if (jcp->Connect(sjp)) // openReadOnly + noJDBCdialog return NULL; if (table && !strchr(table, '%')) { @@ -284,7 +290,7 @@ if (trace) htrc("Getting col results ncol=%d\n", qrp->Nbcol); - if (!(cap = AllocCatInfo(g, CAT_COL, db, table, qrp))) + if (!(cap = AllocCatInfo(g, JCAT_COL, db, table, qrp))) return NULL; // Colpat cannot be null or empty for some drivers @@ -322,7 +328,7 @@ PQRYRES qrp; JDBConn *jcp = new(g)JDBConn(g, NULL); - if (jcp->Open(sjp)) + if (jcp->Connect(sjp)) return NULL; if (strstr(src, "%s")) { @@ -364,7 +370,7 @@ /**********************************************************************/ jcp = new(g)JDBConn(g, NULL); - if (jcp->Open(sjp) == RC_FX) + if (jcp->Connect(sjp)) return NULL; if (!maxres) @@ -405,7 +411,7 @@ return qrp; // Tabpat cannot be null or empty for some drivers - if (!(cap = AllocCatInfo(g, CAT_TAB, db, + if (!(cap = AllocCatInfo(g, JCAT_TAB, db, (tabpat && *tabpat) ? tabpat : PlugDup(g, "%"), qrp))) return NULL; @@ -460,7 +466,7 @@ if (!info) { jcp = new(g) JDBConn(g, NULL); - if (jcp->Open(NULL) != RC_OK) + if (jcp->Open(g) != RC_OK) return NULL; if (!maxres) @@ -508,37 +514,16 @@ /***********************************************************************/ /* JDBConn construction/destruction. */ /***********************************************************************/ -JDBConn::JDBConn(PGLOBAL g, TDBJDBC *tdbp) +JDBConn::JDBConn(PGLOBAL g, PCSZ wrapper) : JAVAConn(g, wrapper) { - m_G = g; - m_Tdb = tdbp; - jvm = nullptr; // Pointer to the JVM (Java Virtual Machine) - env= nullptr; // Pointer to native interface - jdi = nullptr; // Pointer to the java wrapper class - job = nullptr; // The java wrapper class object xqid = xuid = xid = grs = readid = fetchid = typid = errid = nullptr; prepid = xpid = pcid = nullptr; chrfldid = intfldid = dblfldid = fltfldid = bigfldid = nullptr; objfldid = datfldid = timfldid = tspfldid = nullptr; - //m_LoginTimeout = DEFAULT_LOGIN_TIMEOUT; -//m_QueryTimeout = DEFAULT_QUERY_TIMEOUT; -//m_UpdateOptions = 0; - Msg = NULL; - m_Wrap = (tdbp && tdbp->WrapName) ? tdbp->WrapName : GetJavaWrapper(); - - if (!strchr(m_Wrap, '/')) { - // Add the wrapper package name - char *wn = (char*)PlugSubAlloc(g, NULL, strlen(m_Wrap) + 10); - m_Wrap = strcat(strcpy(wn, "wrappers/"), m_Wrap); - } // endif m_Wrap - -//m_Driver = NULL; -//m_Url = NULL; -//m_User = NULL; -//m_Pwd = NULL; + DiscFunc = "JdbcDisconnect"; m_Ncol = 0; m_Aff = 0; - m_Rows = 0; + //m_Rows = 0; m_Fetch = 0; m_RowsetSize = 0; m_Updatable = true; @@ -548,7 +533,6 @@ m_Opened = false; m_IDQuoteChar[0] = '"'; m_IDQuoteChar[1] = 0; - //*m_ErrMsg = '\0'; } // end of JDBConn //JDBConn::~JDBConn() @@ -559,55 +543,6 @@ // } // end of ~JDBConn /***********************************************************************/ -/* Screen for errors. */ -/***********************************************************************/ -bool JDBConn::Check(jint rc) -{ - jstring s; - - if (env->ExceptionCheck()) { - jthrowable exc = env->ExceptionOccurred(); - jmethodID tid = env->GetMethodID(env->FindClass("java/lang/Object"), - "toString", "()Ljava/lang/String;"); - - if (exc != nullptr && tid != nullptr) { - jstring s = (jstring)env->CallObjectMethod(exc, tid); - const char *utf = env->GetStringUTFChars(s, (jboolean)false); - env->DeleteLocalRef(s); - Msg = PlugDup(m_G, utf); - } else - Msg = "Exception occured"; - - env->ExceptionClear(); - } else if (rc < 0) { - s = (jstring)env->CallObjectMethod(job, errid); - Msg = (char*)env->GetStringUTFChars(s, (jboolean)false); - } else - Msg = NULL; - - return (Msg != NULL); -} // end of Check - -/***********************************************************************/ -/* Get MethodID if not exists yet. */ -/***********************************************************************/ -bool JDBConn::gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig) -{ - if (mid == nullptr) { - mid = env->GetMethodID(jdi, name, sig); - - if (Check()) { - strcpy(g->Message, Msg); - return true; - } else - return false; - - } else - return false; - -} // end of gmID - -/***********************************************************************/ /* Utility routine. */ /***********************************************************************/ int JDBConn::GetMaxValue(int n) @@ -626,381 +561,52 @@ } // end of GetMaxValue /***********************************************************************/ -/* Reset the JVM library. */ +/* AddJars: add some jar file to the Class path. */ /***********************************************************************/ -void JDBConn::ResetJVM(void) +void JDBConn::AddJars(PSTRG jpop, char sep) { - if (LibJvm) { -#if defined(__WIN__) - FreeLibrary((HMODULE)LibJvm); -#else // !__WIN__ - dlclose(LibJvm); -#endif // !__WIN__ - LibJvm = NULL; - CreateJavaVM = NULL; - GetCreatedJavaVMs = NULL; -#if defined(_DEBUG) - GetDefaultJavaVMInitArgs = NULL; -#endif // _DEBUG - } // endif LibJvm - -} // end of ResetJVM - -/***********************************************************************/ -/* Dynamically link the JVM library. */ -/* The purpose of this function is to allow using the CONNECT plugin */ -/* for other table types when the Java JDK is not installed. */ -/***********************************************************************/ -bool JDBConn::GetJVM(PGLOBAL g) -{ - int ntry; - - if (!LibJvm) { - char soname[512]; - -#if defined(__WIN__) - for (ntry = 0; !LibJvm && ntry < 3; ntry++) { - if (!ntry && JvmPath) { - strcat(strcpy(soname, JvmPath), "\\jvm.dll"); - ntry = 3; // No other try - } else if (ntry < 2 && getenv("JAVA_HOME")) { - strcpy(soname, getenv("JAVA_HOME")); - - if (ntry == 1) - strcat(soname, "\\jre"); - - strcat(soname, "\\bin\\client\\jvm.dll"); - } else { - // Try to find it through the registry - char version[16]; - char javaKey[64] = "SOFTWARE\\JavaSoft\\Java Runtime Environment"; - LONG rc; - DWORD BufferSize = 16; - - strcpy(soname, "jvm.dll"); // In case it fails - - if ((rc = RegGetValue(HKEY_LOCAL_MACHINE, javaKey, "CurrentVersion", - RRF_RT_ANY, NULL, (PVOID)&version, &BufferSize)) == ERROR_SUCCESS) { - strcat(strcat(javaKey, "\\"), version); - BufferSize = sizeof(soname); - - if ((rc = RegGetValue(HKEY_LOCAL_MACHINE, javaKey, "RuntimeLib", - RRF_RT_ANY, NULL, (PVOID)&soname, &BufferSize)) != ERROR_SUCCESS) - printf("RegGetValue: rc=%ld\n", rc); - - } // endif rc - - ntry = 3; // Try this only once - } // endelse - - // Load the desired shared library - LibJvm = LoadLibrary(soname); - } // endfor ntry - - // Get the needed entries - if (!LibJvm) { - char buf[256]; - DWORD rc = GetLastError(); - - sprintf(g->Message, MSG(DLL_LOAD_ERROR), rc, soname); - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, NULL, rc, 0, - (LPTSTR)buf, sizeof(buf), NULL); - strcat(strcat(g->Message, ": "), buf); - } else if (!(CreateJavaVM = (CRTJVM)GetProcAddress((HINSTANCE)LibJvm, - "JNI_CreateJavaVM"))) { - sprintf(g->Message, MSG(PROCADD_ERROR), GetLastError(), "JNI_CreateJavaVM"); - FreeLibrary((HMODULE)LibJvm); - LibJvm = NULL; - } else if (!(GetCreatedJavaVMs = (GETJVM)GetProcAddress((HINSTANCE)LibJvm, - "JNI_GetCreatedJavaVMs"))) { - sprintf(g->Message, MSG(PROCADD_ERROR), GetLastError(), "JNI_GetCreatedJavaVMs"); - FreeLibrary((HMODULE)LibJvm); - LibJvm = NULL; -#if defined(_DEBUG) - } else if (!(GetDefaultJavaVMInitArgs = (GETDEF)GetProcAddress((HINSTANCE)LibJvm, - "JNI_GetDefaultJavaVMInitArgs"))) { - sprintf(g->Message, MSG(PROCADD_ERROR), GetLastError(), - "JNI_GetDefaultJavaVMInitArgs"); - FreeLibrary((HMODULE)LibJvm); - LibJvm = NULL; -#endif // _DEBUG - } // endif LibJvm -#else // !__WIN__ - const char *error = NULL; - - for (ntry = 0; !LibJvm && ntry < 2; ntry++) { - if (!ntry && JvmPath) { - strcat(strcpy(soname, JvmPath), "/libjvm.so"); - ntry = 2; - } else if (!ntry && getenv("JAVA_HOME")) { - // TODO: Replace i386 by a better guess - strcat(strcpy(soname, getenv("JAVA_HOME")), "/jre/lib/i386/client/libjvm.so"); - } else { // Will need LD_LIBRARY_PATH to be set - strcpy(soname, "libjvm.so"); - ntry = 2; - } // endelse - - LibJvm = dlopen(soname, RTLD_LAZY); - } // endfor ntry - - // Load the desired shared library - if (!LibJvm) { - error = dlerror(); - sprintf(g->Message, MSG(SHARED_LIB_ERR), soname, SVP(error)); - } else if (!(CreateJavaVM = (CRTJVM)dlsym(LibJvm, "JNI_CreateJavaVM"))) { - error = dlerror(); - sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_CreateJavaVM", SVP(error)); - dlclose(LibJvm); - LibJvm = NULL; - } else if (!(GetCreatedJavaVMs = (GETJVM)dlsym(LibJvm, "JNI_GetCreatedJavaVMs"))) { - error = dlerror(); - sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_GetCreatedJavaVMs", SVP(error)); - dlclose(LibJvm); - LibJvm = NULL; -#if defined(_DEBUG) - } else if (!(GetDefaultJavaVMInitArgs = (GETDEF)dlsym(LibJvm, - "JNI_GetDefaultJavaVMInitArgs"))) { - error = dlerror(); - sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_GetDefaultJavaVMInitArgs", SVP(error)); - dlclose(LibJvm); - LibJvm = NULL; -#endif // _DEBUG - } // endif LibJvm -#endif // !__WIN__ - - } // endif LibJvm - - return LibJvm == NULL; -} // end of GetJVM +#if defined(DEVELOPMENT) + jpop->Append( + ";C:/Jconnectors/postgresql-9.4.1208.jar" + ";C:/Oracle/ojdbc7.jar" + ";C:/Apache/commons-dbcp2-2.1.1/commons-dbcp2-2.1.1.jar" + ";C:/Apache/commons-pool2-2.4.2/commons-pool2-2.4.2.jar" + ";C:/Apache/commons-logging-1.2/commons-logging-1.2.jar" + ";C:/Jconnectors/mysql-connector-java-6.0.2-bin.jar" + ";C:/Jconnectors/mariadb-java-client-2.0.1.jar" + ";C:/Jconnectors/sqljdbc42.jar"); +#endif // DEVELOPMENT +} // end of AddJars /***********************************************************************/ -/* Open: connect to a data source. */ +/* Connect: connect to a data source. */ /***********************************************************************/ -int JDBConn::Open(PJPARM sop) +bool JDBConn::Connect(PJPARM sop) { int irc = RC_FX; bool err = false; + jint rc; jboolean jt = (trace > 0); PGLOBAL& g = m_G; - // Link or check whether jvm library was linked - if (GetJVM(g)) - return RC_FX; - - // Firstly check whether the jvm was already created - JavaVM* jvms[1]; - jsize jsz; - jint rc = GetCreatedJavaVMs(jvms, 1, &jsz); - - if (rc == JNI_OK && jsz == 1) { - // jvm already existing - jvm = jvms[0]; - rc = jvm->AttachCurrentThread((void**)&env, nullptr); - - if (rc != JNI_OK) { - strcpy(g->Message, "Cannot attach jvm to the current thread"); - return RC_FX; - } // endif rc - - } else { - /*******************************************************************/ - /* Create a new jvm */ - /*******************************************************************/ - PSTRG jpop = new(g)STRING(g, 512, "-Djava.class.path=."); - char *cp = NULL; - char sep; - -#if defined(__WIN__) - sep = ';'; -#define N 1 -//#define N 2 -//#define N 3 -#else - sep = ':'; -#define N 1 -#endif - - // Java source will be compiled as a jar file installed in the plugin dir - jpop->Append(sep); - jpop->Append(GetPluginDir()); - jpop->Append("JdbcInterface.jar"); - - // All wrappers are pre-compiled in JavaWrappers.jar in the plugin dir - jpop->Append(sep); - jpop->Append(GetPluginDir()); - jpop->Append("JavaWrappers.jar"); - - //================== prepare loading of Java VM ============================ - JavaVMInitArgs vm_args; // Initialization arguments - JavaVMOption* options = new JavaVMOption[N]; // JVM invocation options - - // where to find java .class - if (ClassPath && *ClassPath) { - jpop->Append(sep); - jpop->Append(ClassPath); - } // endif ClassPath - - if ((cp = getenv("CLASSPATH"))) { - jpop->Append(sep); - jpop->Append(cp); - } // endif cp - - if (trace) { - htrc("ClassPath=%s\n", ClassPath); - htrc("CLASSPATH=%s\n", cp); - htrc("%s\n", jpop->GetStr()); - } // endif trace - - options[0].optionString = jpop->GetStr(); -#if N == 2 - options[1].optionString = "-Xcheck:jni"; -#endif -#if N == 3 - options[1].optionString = "-Xms256M"; - options[2].optionString = "-Xmx512M"; -#endif -#if defined(_DEBUG) - vm_args.version = JNI_VERSION_1_2; // minimum Java version - rc = GetDefaultJavaVMInitArgs(&vm_args); -#else - vm_args.version = JNI_VERSION_1_6; // minimum Java version -#endif // _DEBUG - vm_args.nOptions = N; // number of options - vm_args.options = options; - vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail - - //=============== load and initialize Java VM and JNI interface ============= - rc = CreateJavaVM(&jvm, (void**)&env, &vm_args); // YES !! - delete options; // we then no longer need the initialisation options. - - switch (rc) { - case JNI_OK: - strcpy(g->Message, "VM successfully created"); - irc = RC_OK; - break; - case JNI_ERR: - strcpy(g->Message, "Initialising JVM failed: unknown error"); - break; - case JNI_EDETACHED: - strcpy(g->Message, "Thread detached from the VM"); - break; - case JNI_EVERSION: - strcpy(g->Message, "JNI version error"); - break; - case JNI_ENOMEM: - strcpy(g->Message, "Not enough memory"); - break; - case JNI_EEXIST: - strcpy(g->Message, "VM already created"); - break; - case JNI_EINVAL: - strcpy(g->Message, "Invalid arguments"); - break; - default: - sprintf(g->Message, "Unknown return code %d", (int)rc); - break; - } // endswitch rc - - if (trace) - htrc("%s\n", g->Message); - - if (irc != RC_OK) - return irc; - - //=============== Display JVM version =============== - jint ver = env->GetVersion(); - printf("JVM Version %d.%d\n", ((ver>>16)&0x0f), (ver&0x0f)); - } // endif rc - - // try to find the java wrapper class - jdi = env->FindClass(m_Wrap); - - if (jdi == nullptr) { - sprintf(g->Message, "ERROR: class %s not found!", m_Wrap); - return RC_FX; - } // endif jdi - -#if 0 // Suppressed because it does not make any usable change - if (b && jpath && *jpath) { - // Try to add that path the the jvm class path - jmethodID alp = env->GetStaticMethodID(jdi, "addLibraryPath", - "(Ljava/lang/String;)I"); - - if (alp == nullptr) { - env->ExceptionDescribe(); - env->ExceptionClear(); - } else { - char *msg; - jstring path = env->NewStringUTF(jpath); - rc = env->CallStaticIntMethod(jdi, alp, path); - - if ((msg = Check(rc))) { - strcpy(g->Message, msg); - env->DeleteLocalRef(path); - return RC_FX; - } else switch (rc) { - case JNI_OK: - printf("jpath added\n"); - break; - case JNI_EEXIST: - printf("jpath already exist\n"); - break; - case JNI_ERR: - default: - strcpy(g->Message, "Error adding jpath"); - env->DeleteLocalRef(path); - return RC_FX; - } // endswitch rc - - env->DeleteLocalRef(path); - } // endif alp - - } // endif jpath -#endif // 0 - - // if class found, continue - jmethodID ctor = env->GetMethodID(jdi, "", "(Z)V"); - - if (ctor == nullptr) { - sprintf(g->Message, "ERROR: %s constructor not found!", m_Wrap); - return RC_FX; - } else - job = env->NewObject(jdi, ctor, jt); - - // If the object is successfully constructed, - // we can then search for the method we want to call, - // and invoke it for the object: - if (job == nullptr) { - sprintf(g->Message, "%s class object not constructed!", m_Wrap); - return RC_FX; - } // endif job - - errid = env->GetMethodID(jdi, "GetErrmsg", "()Ljava/lang/String;"); - - if (env->ExceptionCheck()) { - strcpy(g->Message, "ERROR: method GetErrmsg() not found!"); - env->ExceptionDescribe(); - env->ExceptionClear(); - return RC_FX; - } // endif Check + /*******************************************************************/ + /* Create or attach a JVM. */ + /*******************************************************************/ + if (Open(g)) + return true; if (!sop) // DRIVER catalog table - return RC_OK; + return false; jmethodID cid = nullptr; if (gmID(g, cid, "JdbcConnect", "([Ljava/lang/String;IZ)I")) - return RC_FX; + return true; // Build the java string array jobjectArray parms = env->NewObjectArray(4, // constructs java array of 4 env->FindClass("java/lang/String"), NULL); // Strings -//m_Driver = sop->Driver; -//m_Url = sop->Url; -//m_User = sop->User; -//m_Pwd = sop->Pwd; m_Scrollable = sop->Scrollable; m_RowsetSize = sop->Fsize; //m_LoginTimeout = sop->Cto; @@ -1020,9 +626,6 @@ if (sop->Pwd) env->SetObjectArrayElement(parms, 3, env->NewStringUTF(sop->Pwd)); -//if (sop->Properties) -// env->SetObjectArrayElement(parms, 4, env->NewStringUTF(sop->Properties)); - // call method rc = env->CallIntMethod(job, cid, parms, m_RowsetSize, m_Scrollable); err = Check(rc); @@ -1030,7 +633,7 @@ if (err) { sprintf(g->Message, "Connecting: %s rc=%d", Msg, (int)rc); - return RC_FX; + return true; } // endif Msg jmethodID qcid = nullptr; @@ -1049,17 +652,18 @@ } // endif qcid if (gmID(g, typid, "ColumnType", "(ILjava/lang/String;)I")) - return RC_FX; + return true; else - m_Opened = true; + m_Connected = true; + + return false; +} // end of Connect - return RC_OK; -} // end of Open /***********************************************************************/ /* Execute an SQL command. */ /***********************************************************************/ -int JDBConn::ExecSQLcommand(PCSZ sql) +int JDBConn::ExecuteCommand(PCSZ sql) { int rc; jint n; @@ -1095,7 +699,7 @@ } // endif ncol return rc; -} // end of ExecSQLcommand +} // end of ExecuteCommand /***********************************************************************/ /* Fetch next row. */ @@ -1155,39 +759,13 @@ jboolean b = env->CallBooleanMethod(job, fetchid, 0); rbuf = m_Rows; - } else if (ExecSQLcommand(sql) != RC_FX) + } else if (ExecuteCommand(sql) != RC_FX) rbuf = 0; return rbuf; } // end of Rewind /***********************************************************************/ -/* Disconnect connection */ -/***********************************************************************/ -void JDBConn::Close() -{ - if (m_Opened) { - jint rc; - jmethodID did = nullptr; - - // Could have been detached in case of join - rc = jvm->AttachCurrentThread((void**)&env, nullptr); - - if (gmID(m_G, did, "JdbcDisconnect", "()I")) - printf("%s\n", Msg); - else if (Check(env->CallIntMethod(job, did))) - printf("jdbcDisconnect: %s\n", Msg); - - if ((rc = jvm->DetachCurrentThread()) != JNI_OK) - printf("DetachCurrentThread: rc=%d\n", (int)rc); - - //rc = jvm->DestroyJavaVM(); - m_Opened = false; - } // endif m_Opened - -} // end of Close - -/***********************************************************************/ /* Retrieve and set the column value from the result set. */ /***********************************************************************/ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val) @@ -1200,7 +778,7 @@ if (rank == 0) if (!name || (jn = env->NewStringUTF(name)) == nullptr) { sprintf(g->Message, "Fail to allocate jstring %s", SVP(name)); - throw TYPE_AM_JDBC; + throw (int)TYPE_AM_JDBC; } // endif name // Returns 666 is case of error @@ -1208,7 +786,7 @@ if (Check((ctyp == 666) ? -1 : 1)) { sprintf(g->Message, "Getting ctyp: %s", Msg); - throw TYPE_AM_JDBC; + throw (int)TYPE_AM_JDBC; } // endif Check if (val->GetNullable()) @@ -1225,9 +803,13 @@ switch (ctyp) { case 12: // VARCHAR - case -1: // LONGVARCHAR + case -9: // NVARCHAR + case -1: // LONGVARCHAR, TEXT case 1: // CHAR - case 3: // DECIMAL + case -15: // NCHAR + case -16: // LONGNVARCHAR, NTEXT + case 3: // DECIMAL + case -8: // ROWID if (jb && ctyp != 3) cn = (jstring)jb; else if (!gmID(g, chrfldid, "StringField", "(ILjava/lang/String;)Ljava/lang/String;")) @@ -1245,6 +827,7 @@ case 4: // INTEGER case 5: // SMALLINT case -6: // TINYINT + case 16: // BOOLEAN case -7: // BIT if (!gmID(g, intfldid, "IntField", "(ILjava/lang/String;)I")) val->SetValue((int)env->CallIntMethod(job, intfldid, rank, jn)); @@ -1315,7 +898,7 @@ env->DeleteLocalRef(jn); sprintf(g->Message, "SetColumnValue: %s rank=%d ctyp=%d", Msg, rank, (int)ctyp); - throw TYPE_AM_JDBC; + throw (int)TYPE_AM_JDBC; } // endif Check if (rank == 0) @@ -1405,7 +988,7 @@ /***********************************************************************/ /* Get the number of lines of the result set. */ /***********************************************************************/ -int JDBConn::GetResultSize(PCSZ sql, JDBCCOL *colp) +int JDBConn::GetResultSize(PCSZ sql, PCOL colp) { int rc, n = 0; @@ -1546,53 +1129,6 @@ return rc; } // end of SetParam -#if 0 - /***********************************************************************/ - /* Get the list of Data Sources and set it in qrp. */ - /***********************************************************************/ - bool JDBConn::GetDataSources(PQRYRES qrp) - { - bool rv = false; - UCHAR *dsn, *des; - UWORD dir = SQL_FETCH_FIRST; - SWORD n1, n2, p1, p2; - PCOLRES crp1 = qrp->Colresp, crp2 = qrp->Colresp->Next; - RETCODE rc; - - n1 = crp1->Clen; - n2 = crp2->Clen; - - try { - rc = SQLAllocEnv(&m_henv); - - if (!Check(rc)) - ThrowDJX(rc, "SQLAllocEnv"); // Fatal - - for (int i = 0; i < qrp->Maxres; i++) { - dsn = (UCHAR*)crp1->Kdata->GetValPtr(i); - des = (UCHAR*)crp2->Kdata->GetValPtr(i); - rc = SQLDataSources(m_henv, dir, dsn, n1, &p1, des, n2, &p2); - - if (rc == SQL_NO_DATA_FOUND) - break; - else if (!Check(rc)) - ThrowDJX(rc, "SQLDataSources"); - - qrp->Nblin++; - dir = SQL_FETCH_NEXT; - } // endfor i - - } - catch (DJX *x) { - sprintf(m_G->Message, "%s: %s", x->m_Msg, x->GetErrorMessage(0)); - rv = true; - } // end try/catch - - Close(); - return rv; - } // end of GetDataSources -#endif // 0 - /***********************************************************************/ /* Get the list of Drivers and set it in qrp. */ /***********************************************************************/ @@ -1658,7 +1194,7 @@ jint *n = nullptr; jstring label; jmethodID colid = nullptr; - int rc = ExecSQLcommand(src); + int rc = ExecuteCommand(src); if (rc == RC_NF) { strcpy(g->Message, "Srcdef is not returning a result set"); @@ -1692,7 +1228,7 @@ case 5: crp->Name = "Nullable"; break; } // endswitch i - // Build the java string array + // Build the java int array jintArray val = env->NewIntArray(4); if (val == nullptr) { @@ -1873,28 +1409,19 @@ // Now do call the proper JDBC API switch (cap->Id) { - case CAT_COL: + case JCAT_COL: fnc = "GetColumns"; break; - case CAT_TAB: + case JCAT_TAB: fnc = "GetTables"; break; #if 0 - case CAT_KEY: + case JCAT_KEY: fnc = "SQLPrimaryKeys"; rc = SQLPrimaryKeys(hstmt, name.ptr(2), name.length(2), name.ptr(1), name.length(1), name.ptr(0), name.length(0)); break; - case CAT_STAT: - fnc = "SQLStatistics"; - rc = SQLStatistics(hstmt, name.ptr(2), name.length(2), - name.ptr(1), name.length(1), - name.ptr(0), name.length(0), - cap->Unique, cap->Accuracy); - break; - case CAT_SPC: - ThrowDJX("SQLSpecialColumns not available yet"); #endif // 0 default: sprintf(g->Message, "Invalid SQL function id"); @@ -1943,6 +1470,7 @@ } // endif len pval[n] = AllocateValue(g, crp->Type, len); + pval[n]->SetNullable(true); if (crp->Type == TYPE_STRING) { pbuf[n] = (char*)PlugSubAlloc(g, NULL, len); @@ -1982,10 +1510,10 @@ /***********************************************************************/ /* Allocate a CONNECT result structure from the JDBC result. */ /***********************************************************************/ - PQRYRES JDBConn::AllocateResult(PGLOBAL g) + PQRYRES JDBConn::AllocateResult(PGLOBAL g, PTDB tdbp) { bool uns; - PJDBCCOL colp; + PCOL colp; PCOLRES *pcrp, crp; PQRYRES qrp; @@ -2010,8 +1538,7 @@ qrp->Nblin = 0; qrp->Cursor = 0; - for (colp = (PJDBCCOL)m_Tdb->Columns; colp; - colp = (PJDBCCOL)colp->GetNext()) + for (colp = tdbp->GetColumns(); colp; colp = colp->GetNext()) if (!colp->IsSpecial()) { *pcrp = (PCOLRES)PlugSubAlloc(g, NULL, sizeof(COLRES)); crp = *pcrp; @@ -2039,10 +1566,9 @@ memset(crp->Nulls, ' ', m_Rows); } // endelse Nullable - colp->SetCrp(crp); + ((EXTCOL*)colp)->SetCrp(crp); } // endif colp *pcrp = NULL; - //qrp->Nblin = n; return qrp; } // end of AllocateResult diff -Nru mariadb-10.1-10.1.25/storage/connect/jdbconn.h mariadb-10.1-10.1.30/storage/connect/jdbconn.h --- mariadb-10.1-10.1.25/storage/connect/jdbconn.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jdbconn.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,61 +1,7 @@ /***********************************************************************/ /* JDBConn.h : header file for the JDBC connection classes. */ /***********************************************************************/ -//nclude /* Windows include file */ -//nclude /* Message crackers */ - -/***********************************************************************/ -/* Included C-definition files required by the interface. */ -/***********************************************************************/ -#include "block.h" - -/***********************************************************************/ -/* JDBC interface. */ -/***********************************************************************/ -#include - -/***********************************************************************/ -/* Constants and defines. */ -/***********************************************************************/ -// Miscellaneous sizing info -#define MAX_NUM_OF_MSG 10 // Max number of error messages -//efine MAX_CURRENCY 30 // Max size of Currency($) string -#define MAX_TNAME_LEN 32 // Max size of table names -//efine MAX_FNAME_LEN 256 // Max size of field names -//efine MAX_STRING_INFO 256 // Max size of string from SQLGetInfo -//efine MAX_DNAME_LEN 256 // Max size of Recordset names -//efine MAX_CONNECT_LEN 512 // Max size of Connect string -//efine MAX_CURSOR_NAME 18 // Max size of a cursor name -#define DEFAULT_FIELD_TYPE 0 // TYPE_NULL - -#if !defined(__WIN__) -typedef unsigned char *PUCHAR; -#endif // !__WIN__ - -enum JCATINFO { - CAT_TAB = 1, // JDBC Tables - CAT_COL = 2, // JDBC Columns - CAT_KEY = 3, // JDBC PrimaryKeys -//CAT_STAT = 4, // SQLStatistics -//CAT_SPC = 5 // SQLSpecialColumns -}; - -/***********************************************************************/ -/* This structure is used to control the catalog functions. */ -/***********************************************************************/ -typedef struct tagJCATPARM { - JCATINFO Id; // Id to indicate function - PQRYRES Qrp; // Result set pointer - PCSZ DB; // Database (Schema) - PCSZ Tab; // Table name or pattern - PCSZ Pat; // Table type or column pattern -} JCATPARM; - -typedef jint(JNICALL *CRTJVM) (JavaVM **, void **, void *); -typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *); -#if defined(_DEBUG) -typedef jint(JNICALL *GETDEF) (void *); -#endif // _DEBUG +#include "javaconn.h" // JDBC connection to a data source class TDBJDBC; @@ -66,7 +12,7 @@ /***********************************************************************/ /* JDBConn class. */ /***********************************************************************/ -class JDBConn : public BLOCK { +class JDBConn : public JAVAConn { friend class TDBJDBC; friend class TDBXJDC; //friend PQRYRES GetColumnInfo(PGLOBAL, char*&, char *, int, PVBLK&); @@ -74,118 +20,80 @@ JDBConn(); // Standard (unused) constructor public: - JDBConn(PGLOBAL g, TDBJDBC *tdbp); + // Constructor + JDBConn(PGLOBAL g, PCSZ wrapper); - int Open(PJPARM sop); - int Rewind(PCSZ sql); - void Close(void); - PQRYRES AllocateResult(PGLOBAL g); + virtual void AddJars(PSTRG jpop, char sep); + PQRYRES AllocateResult(PGLOBAL g, PTDB tdbp); // Attributes public: - char *GetQuoteChar(void) { return m_IDQuoteChar; } - // Database successfully opened? - bool IsOpen(void) { return m_Opened; } -//PSZ GetStringInfo(ushort infotype); - int GetMaxValue(int infotype); -//PSZ GetConnect(void) { return m_Connect; } + char *GetQuoteChar(void) { return m_IDQuoteChar; } + virtual int GetMaxValue(int infotype); public: // Operations - //void SetLoginTimeout(DWORD sec) {m_LoginTimeout = sec;} - //void SetQueryTimeout(DWORD sec) {m_QueryTimeout = sec;} - //void SetUserName(PSZ user) {m_User = user;} - //void SetUserPwd(PSZ pwd) {m_Pwd = pwd;} - int GetResultSize(PCSZ sql, JDBCCOL *colp); - int ExecuteQuery(PCSZ sql); - int ExecuteUpdate(PCSZ sql); - int Fetch(int pos = 0); + virtual bool Connect(PJPARM sop); + virtual bool MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, + PCSZ filter, bool pipe) {return true;} + virtual int GetResultSize(PCSZ sql, PCOL colp); + virtual int ExecuteCommand(PCSZ sql); + virtual int ExecuteQuery(PCSZ sql); + virtual int ExecuteUpdate(PCSZ sql); + virtual int Fetch(int pos = 0); + virtual void SetColumnValue(int rank, PSZ name, PVAL val); + + // Jdbc operations bool PrepareSQL(PCSZ sql); - int ExecuteSQL(void); + int ExecuteSQL(void); // Prepared statement bool SetParam(JDBCCOL *colp); - int ExecSQLcommand(PCSZ sql); - void SetColumnValue(int rank, PSZ name, PVAL val); int GetCatInfo(JCATPARM *cap); - //bool GetDataSources(PQRYRES qrp); bool GetDrivers(PQRYRES qrp); PQRYRES GetMetaData(PGLOBAL g, PCSZ src); - -public: - // Set static variables - static void SetJVM(void) { - LibJvm = NULL; - CreateJavaVM = NULL; - GetCreatedJavaVMs = NULL; -#if defined(_DEBUG) - GetDefaultJavaVMInitArgs = NULL; -#endif // _DEBUG - } // end of SetJVM - - static void ResetJVM(void); - static bool GetJVM(PGLOBAL g); + int Rewind(PCSZ sql); // Implementation public: //virtual ~JDBConn(); - // JDBC operations -protected: - bool gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig); - bool Check(jint rc = 0); -//void ThrowDJX(int rc, PSZ msg/*, HSTMT hstmt = SQL_NULL_HSTMT*/); -//void ThrowDJX(PSZ msg); -//void Free(void); - protected: // Members -#if defined(__WIN__) - static HANDLE LibJvm; // Handle to the jvm DLL -#else // !__WIN__ - static void *LibJvm; // Handle for the jvm shared library -#endif // !__WIN__ - static CRTJVM CreateJavaVM; - static GETJVM GetCreatedJavaVMs; -#if defined(_DEBUG) - static GETDEF GetDefaultJavaVMInitArgs; -#endif // _DEBUG - PGLOBAL m_G; - TDBJDBC *m_Tdb; - JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine) - JNIEnv *env; // Pointer to native interface - jclass jdi; // Pointer to the java wrapper class - jobject job; // The java wrapper class object - jmethodID xqid; // The ExecuteQuery method ID - jmethodID xuid; // The ExecuteUpdate method ID - jmethodID xid; // The Execute method ID - jmethodID grs; // The GetResult method ID - jmethodID readid; // The ReadNext method ID - jmethodID fetchid; // The Fetch method ID - jmethodID typid; // The ColumnType method ID - jmethodID prepid; // The CreatePrepStmt method ID - jmethodID xpid; // The ExecutePrep method ID - jmethodID pcid; // The ClosePrepStmt method ID - jmethodID errid; // The GetErrmsg method ID - jmethodID objfldid; // The ObjectField method ID - jmethodID chrfldid; // The StringField method ID - jmethodID intfldid; // The IntField method ID - jmethodID dblfldid; // The DoubleField method ID - jmethodID fltfldid; // The FloatField method ID - jmethodID datfldid; // The DateField method ID - jmethodID timfldid; // The TimeField method ID - jmethodID tspfldid; // The TimestampField method ID - jmethodID bigfldid; // The BigintField method ID - PCSZ Msg; - char *m_Wrap; +#if 0 + JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine) + JNIEnv *env; // Pointer to native interface + jclass jdi; // Pointer to the java wrapper class + jobject job; // The java wrapper class object + jmethodID errid; // The GetErrmsg method ID +#endif // 0 + jmethodID xqid; // The ExecuteQuery method ID + jmethodID xuid; // The ExecuteUpdate method ID + jmethodID xid; // The Execute method ID + jmethodID grs; // The GetResult method ID + jmethodID readid; // The ReadNext method ID + jmethodID fetchid; // The Fetch method ID + jmethodID typid; // The ColumnType method ID + jmethodID prepid; // The CreatePrepStmt method ID + jmethodID xpid; // The ExecutePrep method ID + jmethodID pcid; // The ClosePrepStmt method ID + jmethodID objfldid; // The ObjectField method ID + jmethodID chrfldid; // The StringField method ID + jmethodID intfldid; // The IntField method ID + jmethodID dblfldid; // The DoubleField method ID + jmethodID fltfldid; // The FloatField method ID + jmethodID datfldid; // The DateField method ID + jmethodID timfldid; // The TimeField method ID + jmethodID tspfldid; // The TimestampField method ID + jmethodID bigfldid; // The BigintField method ID +// PCSZ Msg; +// PCSZ m_Wrap; char m_IDQuoteChar[2]; PCSZ m_Pwd; int m_Ncol; int m_Aff; - int m_Rows; int m_Fetch; int m_RowsetSize; jboolean m_Updatable; jboolean m_Transact; jboolean m_Scrollable; - bool m_Opened; bool m_Full; }; // end of JDBConn class definition diff -Nru mariadb-10.1-10.1.25/storage/connect/jmgfam.cpp mariadb-10.1-10.1.30/storage/connect/jmgfam.cpp --- mariadb-10.1-10.1.25/storage/connect/jmgfam.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jmgfam.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,357 @@ +/************ JMONGO FAM C++ Program Source Code File (.CPP) ***********/ +/* PROGRAM NAME: jmgfam.cpp */ +/* ------------- */ +/* Version 1.0 */ +/* */ +/* COPYRIGHT: */ +/* ---------- */ +/* (C) Copyright to the author Olivier BERTRAND 20017 */ +/* */ +/* WHAT THIS PROGRAM DOES: */ +/* ----------------------- */ +/* This program are the Java MongoDB access method classes. */ +/* */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include relevant sections of the System header files. */ +/***********************************************************************/ +#include "my_global.h" +#if defined(__WIN__) +//#include +//#include +//#include +#if defined(__BORLANDC__) +#define __MFC_COMPAT__ // To define min/max as macro +#endif // __BORLANDC__ +//#include +#else // !__WIN__ +#if defined(UNIX) || defined(UNIV_LINUX) +//#include +#include +//#if !defined(sun) // Sun has the ftruncate fnc. +//#define USETEMP // Force copy mode for DELETE +//#endif // !sun +#else // !UNIX +//#include +#endif // !UNIX +//#include +#endif // !__WIN__ + +/***********************************************************************/ +/* Include application header files: */ +/* global.h is header containing all global declarations. */ +/* plgdbsem.h is header containing the DB application declarations. */ +/* filamtxt.h is header containing the file AM classes declarations. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "reldef.h" +#include "filamtxt.h" +#include "tabdos.h" +#include "tabjson.h" +#include "jmgfam.h" + +#if defined(UNIX) || defined(UNIV_LINUX) +#include "osutil.h" +//#define _fileno fileno +//#define _O_RDONLY O_RDONLY +#endif + +/* --------------------------- Class JMGFAM -------------------------- */ + +/***********************************************************************/ +/* Constructors. */ +/***********************************************************************/ +JMGFAM::JMGFAM(PJDEF tdp) : DOSFAM((PDOSDEF)NULL) +{ + Jcp = NULL; + //Client = NULL; + //Database = NULL; + //Collection = NULL; + //Cursor = NULL; + //Query = NULL; + //Opts = NULL; + Ops.Driver = tdp->Schema; + Ops.Url = tdp->Uri; + Ops.User = NULL; + Ops.Pwd = NULL; + Ops.Scrollable = false; + Ops.Fsize = 0; + Ops.Version = tdp->Version; + To_Fbt = NULL; + Mode = MODE_ANY; + Uristr = tdp->Uri; + Db_name = tdp->Schema; + Coll_name = tdp->Collname; + Options = tdp->Options; + Filter = tdp->Filter; + Wrapname = tdp->Wrapname; + Done = false; + Pipe = tdp->Pipe; + Version = tdp->Version; + Lrecl = tdp->Lrecl + tdp->Ending; + Curpos = 0; +} // end of JMGFAM standard constructor + +JMGFAM::JMGFAM(PJMGFAM tdfp) : DOSFAM(tdfp) +{ + //Client = tdfp->Client; + //Database = NULL; + //Collection = tdfp->Collection; + //Cursor = tdfp->Cursor; + //Query = tdfp->Query; + //Opts = tdfp->Opts; + Ops = tdfp->Ops; + To_Fbt = tdfp->To_Fbt; + Mode = tdfp->Mode; + Uristr = tdfp->Uristr; + Db_name = tdfp->Db_name; + Coll_name = tdfp->Coll_name; + Options = tdfp->Options; + Filter = NULL; + Wrapname = tdfp->Wrapname; + Done = tdfp->Done; + Pipe = tdfp->Pipe; + Version = tdfp->Version; +} // end of JMGFAM copy constructor + +/***********************************************************************/ +/* Reset: reset position values at the beginning of file. */ +/***********************************************************************/ +void JMGFAM::Reset(void) +{ + TXTFAM::Reset(); + Fpos = Tpos = Spos = 0; +} // end of Reset + +/***********************************************************************/ +/* MGO GetFileLength: returns file size in number of bytes. */ +/***********************************************************************/ +int JMGFAM::GetFileLength(PGLOBAL g) +{ + return 0; +} // end of GetFileLength + +/***********************************************************************/ +/* Cardinality: returns table cardinality in number of rows. */ +/* This function can be called with a null argument to test the */ +/* availability of Cardinality implementation (1 yes, 0 no). */ +/***********************************************************************/ +int JMGFAM::Cardinality(PGLOBAL g) +{ + if (!g) + return 1; + + return (!Init(g)) ? Jcp->CollSize(g) : 0; +} // end of Cardinality + +/***********************************************************************/ +/* Note: This function is not really implemented yet. */ +/***********************************************************************/ +int JMGFAM::MaxBlkSize(PGLOBAL, int s) +{ + return s; +} // end of MaxBlkSize + +/***********************************************************************/ +/* Init: initialize MongoDB processing. */ +/***********************************************************************/ +bool JMGFAM::Init(PGLOBAL g) +{ + if (Done) + return false; + + /*********************************************************************/ + /* Open an JDBC connection for this table. */ + /* Note: this may not be the proper way to do. Perhaps it is better */ + /* to test whether a connection is already open for this datasource */ + /* and if so to allocate just a new result set. But this only for */ + /* drivers allowing concurency in getting results ??? */ + /*********************************************************************/ + if (!Jcp) + Jcp = new(g) JMgoConn(g, Coll_name, Wrapname); + else if (Jcp->IsOpen()) + Jcp->Close(); + + if (Jcp->Connect(&Ops)) + return true; + + Done = true; + return false; +} // end of Init + +/***********************************************************************/ +/* OpenTableFile: Open a MongoDB table. */ +/***********************************************************************/ +bool JMGFAM::OpenTableFile(PGLOBAL g) +{ + Mode = Tdbp->GetMode(); + + if (Pipe && Mode != MODE_READ) { + strcpy(g->Message, "Pipeline tables are read only"); + return true; + } // endif Pipe + + if (Init(g)) + return true; + + if (Jcp->GetMethodId(g, Mode)) + return true; + + if (Mode == MODE_DELETE && !Tdbp->GetNext()) { + // Delete all documents + if (!Jcp->MakeCursor(g, Tdbp, "all", Filter, false)) + if (Jcp->DocDelete(g, true) == RC_OK) + return false; + + return true; + } // endif Mode + + if (Mode == MODE_INSERT) + Jcp->MakeColumnGroups(g, Tdbp); + + if (Mode != MODE_UPDATE) + return Jcp->MakeCursor(g, Tdbp, Options, Filter, Pipe); + + return false; + } // end of OpenTableFile + +/***********************************************************************/ +/* GetRowID: return the RowID of last read record. */ +/***********************************************************************/ +int JMGFAM::GetRowID(void) +{ + return Rows; +} // end of GetRowID + +/***********************************************************************/ +/* GetPos: return the position of last read record. */ +/***********************************************************************/ +int JMGFAM::GetPos(void) +{ + return Fpos; +} // end of GetPos + +/***********************************************************************/ +/* GetNextPos: return the position of next record. */ +/***********************************************************************/ +int JMGFAM::GetNextPos(void) +{ + return Fpos; // TODO +} // end of GetNextPos + +/***********************************************************************/ +/* SetPos: Replace the table at the specified position. */ +/***********************************************************************/ +bool JMGFAM::SetPos(PGLOBAL g, int pos) +{ + Fpos = pos; + Placed = true; + return false; +} // end of SetPos + +/***********************************************************************/ +/* Record file position in case of UPDATE or DELETE. */ +/***********************************************************************/ +bool JMGFAM::RecordPos(PGLOBAL g) +{ + strcpy(g->Message, "JMGFAM::RecordPos NIY"); + return true; +} // end of RecordPos + +/***********************************************************************/ +/* Initialize Fpos and the current position for indexed DELETE. */ +/***********************************************************************/ +int JMGFAM::InitDelete(PGLOBAL g, int fpos, int spos) +{ + strcpy(g->Message, "JMGFAM::InitDelete NIY"); + return RC_FX; +} // end of InitDelete + +/***********************************************************************/ +/* Skip one record in file. */ +/***********************************************************************/ +int JMGFAM::SkipRecord(PGLOBAL g, bool header) +{ + return RC_OK; // Dummy +} // end of SkipRecord + +/***********************************************************************/ +/* ReadBuffer: Get next document from a collection. */ +/***********************************************************************/ +int JMGFAM::ReadBuffer(PGLOBAL g) +{ + int rc = RC_FX; + + if (!Curpos && Mode == MODE_UPDATE) + if (Jcp->MakeCursor(g, Tdbp, Options, Filter, Pipe)) + return RC_FX; + + if (++CurNum >= Rbuf) { + Rbuf = Jcp->Fetch(); + Curpos++; + CurNum = 0; + } // endif CurNum + + if (Rbuf > 0) { + PSZ str = Jcp->GetDocument(); + + if (str) { + if (trace == 1) + htrc("%s\n", str); + + strncpy(Tdbp->GetLine(), str, Lrecl); + rc = RC_OK; + } else + strcpy(g->Message, "Null document"); + + } else if (!Rbuf) + rc = RC_EF; + + return rc; +} // end of ReadBuffer + +/***********************************************************************/ +/* WriteBuffer: File write routine for MGO access method. */ +/***********************************************************************/ +int JMGFAM::WriteBuffer(PGLOBAL g) +{ + int rc = RC_OK; + + if (Mode == MODE_INSERT) { + rc = Jcp->DocWrite(g); + } else if (Mode == MODE_DELETE) { + rc = Jcp->DocDelete(g, false); + } else if (Mode == MODE_UPDATE) { + rc = Jcp->DocUpdate(g, Tdbp); + } // endif Mode + + return rc; +} // end of WriteBuffer + +/***********************************************************************/ +/* Data Base delete line routine for MGO and BLK access methods. */ +/***********************************************************************/ +int JMGFAM::DeleteRecords(PGLOBAL g, int irc) +{ + return (irc == RC_OK) ? WriteBuffer(g) : RC_OK; +} // end of DeleteRecords + +/***********************************************************************/ +/* Table file close routine for MGO access method. */ +/***********************************************************************/ +void JMGFAM::CloseTableFile(PGLOBAL g, bool) +{ + Jcp->Close(); + Done = false; +} // end of CloseTableFile + +/***********************************************************************/ +/* Rewind routine for MGO access method. */ +/***********************************************************************/ +void JMGFAM::Rewind(void) +{ + Jcp->Rewind(); +} // end of Rewind + diff -Nru mariadb-10.1-10.1.25/storage/connect/jmgfam.h mariadb-10.1-10.1.30/storage/connect/jmgfam.h --- mariadb-10.1-10.1.25/storage/connect/jmgfam.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jmgfam.h 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,79 @@ +/************** MongoFam H Declares Source Code File (.H) **************/ +/* Name: jmgfam.h Version 1.0 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the JAVA MongoDB access method classes declares */ +/***********************************************************************/ +#pragma once + +/***********************************************************************/ +/* Include MongoDB library header files. */ +/***********************************************************************/ +#include "block.h" +//#include "mongo.h" +#include "jmgoconn.h" + +typedef class JMGFAM *PJMGFAM; +typedef class MGODEF *PMGODEF; + +/***********************************************************************/ +/* This is the Java MongoDB Access Method class declaration. */ +/***********************************************************************/ +class DllExport JMGFAM : public DOSFAM { + friend void mongo_init(bool); +public: + // Constructor + JMGFAM(PJDEF tdp); + JMGFAM(PJMGFAM txfp); + + // Implementation + virtual AMT GetAmType(void) { return TYPE_AM_MGO; } + virtual bool GetUseTemp(void) { return false; } + virtual int GetPos(void); + virtual int GetNextPos(void); + virtual PTXF Duplicate(PGLOBAL g) { return (PTXF)new(g) JMGFAM(this); } + void SetLrecl(int lrecl) { Lrecl = lrecl; } + + // Methods + virtual void Reset(void); + virtual int GetFileLength(PGLOBAL g); + virtual int Cardinality(PGLOBAL g); + virtual int MaxBlkSize(PGLOBAL g, int s); + virtual bool AllocateBuffer(PGLOBAL g) { return false; } + virtual int GetRowID(void); + virtual bool RecordPos(PGLOBAL g); + virtual bool SetPos(PGLOBAL g, int recpos); + virtual int SkipRecord(PGLOBAL g, bool header); + virtual bool OpenTableFile(PGLOBAL g); + virtual int ReadBuffer(PGLOBAL g); + virtual int WriteBuffer(PGLOBAL g); + virtual int DeleteRecords(PGLOBAL g, int irc); + virtual void CloseTableFile(PGLOBAL g, bool abort); + virtual void Rewind(void); + +protected: + virtual bool OpenTempFile(PGLOBAL g) { return false; } + virtual bool MoveIntermediateLines(PGLOBAL g, bool *b) { return false; } + virtual int RenameTempFile(PGLOBAL g) { return RC_OK; } + virtual int InitDelete(PGLOBAL g, int fpos, int spos); + bool Init(PGLOBAL g); +//bool MakeCursor(PGLOBAL g); + + // Members + JMgoConn *Jcp; // Points to a Mongo connection class + JDBCPARM Ops; // Additional parameters + PFBLOCK To_Fbt; // Pointer to temp file block + MODE Mode; + PCSZ Uristr; + PCSZ Db_name; + PCSZ Coll_name; + PCSZ Options; + PCSZ Filter; + PSZ Wrapname; + bool Done; // Init done + bool Pipe; + int Version; + int Curpos; // Cursor position of last fetch +}; // end of class JMGFAM + diff -Nru mariadb-10.1-10.1.25/storage/connect/jmgoconn.cpp mariadb-10.1-10.1.30/storage/connect/jmgoconn.cpp --- mariadb-10.1-10.1.25/storage/connect/jmgoconn.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jmgoconn.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,816 @@ +/************ JMgoConn C++ Functions Source Code File (.CPP) ***********/ +/* Name: JMgoConn.CPP Version 1.1 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the MongoDB Java connection classes functions. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include relevant MariaDB header file. */ +/***********************************************************************/ +#include + +/***********************************************************************/ +/* Required objects includes. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "colblk.h" +#include "xobject.h" +#include "xtable.h" +#include "filter.h" +#include "jmgoconn.h" + +#define nullptr 0 + +bool IsNum(PSZ s); +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s); + +/* --------------------------- Class JNCOL --------------------------- */ + +/***********************************************************************/ +/* Add a column in the column list. */ +/***********************************************************************/ +void JNCOL::AddCol(PGLOBAL g, PCOL colp, PSZ jp) +{ + char *p; + PJKC kp, kcp; + + if ((p = strchr(jp, '.'))) { + PJNCOL icp; + + *p++ = 0; + + for (kp = Klist; kp; kp = kp->Next) + if (kp->Jncolp && !strcmp(jp, kp->Key)) + break; + + if (!kp) { + icp = new(g) JNCOL(IsNum(p)); + kcp = (PJKC)PlugSubAlloc(g, NULL, sizeof(JKCOL)); + kcp->Next = NULL; + kcp->Jncolp = icp; + kcp->Colp = NULL; + + if (Array) { + kcp->Key = NULL; + kcp->N = atoi(p); + } else { + kcp->Key = PlugDup(g, jp); + kcp->N = 0; + } // endif Array + + if (Klist) { + for (kp = Klist; kp->Next; kp = kp->Next); + + kp->Next = kcp; + } else + Klist = kcp; + + } else + icp = kp->Jncolp; + + *(p - 1) = '.'; + icp->AddCol(g, colp, p); + } else { + kcp = (PJKC)PlugSubAlloc(g, NULL, sizeof(JKCOL)); + + kcp->Next = NULL; + kcp->Jncolp = NULL; + kcp->Colp = colp; + + if (Array) { + kcp->Key = NULL; + kcp->N = atoi(jp); + } else { + kcp->Key = jp; + kcp->N = 0; + } // endif Array + + if (Klist) { + for (kp = Klist; kp->Next; kp = kp->Next); + + kp->Next = kcp; + } else + Klist = kcp; + + } // endif jp + +} // end of AddCol + +/***********************************************************************/ +/* JMgoConn construction/destruction. */ +/***********************************************************************/ +JMgoConn::JMgoConn(PGLOBAL g, PCSZ collname, PCSZ wrapper) + : JAVAConn(g, wrapper) +{ + CollName = collname; + readid = fetchid = getdocid = objfldid = fcollid = acollid = + mkdocid = docaddid = mkarid = araddid = insertid = updateid = + deleteid = gcollid = countid = rewindid = nullptr; + DiscFunc = "MongoDisconnect"; + Fpc = NULL; + m_Fetch = 0; + m_Ncol = 0; + m_Version = 0; +} // end of JMgoConn + +/***********************************************************************/ +/* AddJars: add some jar file to the Class path. */ +/***********************************************************************/ +void JMgoConn::AddJars(PSTRG jpop, char sep) +{ +#if defined(DEVELOPMENT) + if (m_Version == 2) { + jpop->Append(sep); +// jpop->Append("C:/Eclipse/workspace/MongoWrap2/bin"); + jpop->Append(sep); + jpop->Append("C:/mongo-java-driver/mongo-java-driver-2.13.3.jar"); + } else { + jpop->Append(sep); +// jpop->Append("C:/Eclipse/workspace/MongoWrap3/bin"); +// jpop->Append("C:/Program Files/MariaDB 10.1/lib/plugin/JavaWrappers.jar"); + jpop->Append(sep); + jpop->Append("C:/mongo-java-driver/mongo-java-driver-3.4.2.jar"); + } // endif m_Version +#endif // DEVELOPMENT +} // end of AddJars + +/***********************************************************************/ +/* Connect: connect to a data source. */ +/***********************************************************************/ +bool JMgoConn::Connect(PJPARM sop) +{ + bool err = false; + jint rc; + jboolean brc; + jstring cln; + PGLOBAL& g = m_G; + + m_Version = sop->Version; + + /*******************************************************************/ + /* Create or attach a JVM. */ + /*******************************************************************/ + if (Open(g)) + return true; + + /*******************************************************************/ + /* Connect to MongoDB. */ + /*******************************************************************/ + jmethodID cid = nullptr; + + if (gmID(g, cid, "MongoConnect", "([Ljava/lang/String;)I")) + return true; + + // Build the java string array + jobjectArray parms = env->NewObjectArray(4, // constructs java array of 4 + env->FindClass("java/lang/String"), NULL); // Strings + + //m_Scrollable = sop->Scrollable; + //m_RowsetSize = sop->Fsize; + + // change some elements + if (sop->Driver) + env->SetObjectArrayElement(parms, 0, env->NewStringUTF(sop->Url)); + + if (sop->Url) + env->SetObjectArrayElement(parms, 1, env->NewStringUTF(sop->Driver)); + + if (sop->User) + env->SetObjectArrayElement(parms, 2, env->NewStringUTF(sop->User)); + + if (sop->Pwd) + env->SetObjectArrayElement(parms, 3, env->NewStringUTF(sop->Pwd)); + + // call method + rc = env->CallIntMethod(job, cid, parms); + err = Check(rc); + env->DeleteLocalRef(parms); // Not used anymore + + if (err) { + sprintf(g->Message, "Connecting: %s rc=%d", Msg, (int)rc); + return true; + } // endif Msg + + /*********************************************************************/ + /* Get the collection. */ + /*********************************************************************/ + if (gmID(g, gcollid, "GetCollection", "(Ljava/lang/String;)Z")) + return true; + + cln = env->NewStringUTF(CollName); + brc = env->CallBooleanMethod(job, gcollid, cln); + env->DeleteLocalRef(cln); + + if (Check(brc ? -1 : 0)) { + sprintf(g->Message, "GetCollection: %s", Msg); + return true; + } // endif Msg + + m_Connected = true; + return false; +} // end of Connect + +/***********************************************************************/ +/* CollSize: returns the number of documents in the collection. */ +/***********************************************************************/ +int JMgoConn::CollSize(PGLOBAL g) +{ + if (!gmID(g, countid, "GetCollSize", "()J")) { + jlong card = env->CallLongMethod(job, countid); + + return (int)card; + } else + return 2; // Make MariaDB happy + +} // end of CollSize + +/***********************************************************************/ +/* OpenDB: Data Base open routine for MONGO access method. */ +/***********************************************************************/ +bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, + PCSZ filter, bool pipe) +{ + const char *p; + bool b = false, id = (tdbp->GetMode() != MODE_READ), all = false; + uint len; + PCOL cp; + PSZ jp; + PCSZ op = NULL, sf = NULL, Options = options; + PSTRG s = NULL; + PFIL filp = tdbp->GetFilter(); + + if (Options && !stricmp(Options, "all")) { + Options = NULL; + all = true; + } // endif Options + + for (cp = tdbp->GetColumns(); cp; cp = cp->GetNext()) + if (!strcmp(cp->GetName(), "_id")) + id = true; + else if (cp->GetFmt() && !strcmp(cp->GetFmt(), "*") && (!Options || pipe)) + all = true; + + if (pipe && Options) { + if (trace) + htrc("Pipeline: %s\n", Options); + + p = strrchr(Options, ']'); + + if (!p) { + strcpy(g->Message, "Missing ] in pipeline"); + return true; + } else + *(char*)p = 0; + + s = new(g) STRING(g, 1023, (PSZ)Options); + + if (filp) { + s->Append(",{\"$match\":"); + + if (MakeSelector(g, filp, s)) { + strcpy(g->Message, "Failed making selector"); + return NULL; + } else + s->Append('}'); + + tdbp->SetFilter(NULL); // Not needed anymore + } // endif To_Filter + + if (!all && tdbp->GetColumns()) { + // Project list + len = s->GetLength(); + s->Append(",{\"$project\":{\""); + + if (!id) + s->Append("_id\":0,\""); + + for (PCOL cp = tdbp->GetColumns(); cp; cp = cp->GetNext()) { + if (b) + s->Append(",\""); + else + b = true; + + if ((jp = cp->GetJpath(g, true))) + s->Append(jp); + else { + s->Truncate(len); + goto nop; + } // endif Jpath + + s->Append("\":1"); + } // endfor cp + + s->Append("}}"); + } // endif all + + nop: + s->Append("]}"); + s->Resize(s->GetLength() + 1); + *(char*)p = ']'; // Restore Colist for discovery + p = s->GetStr(); + + if (trace) + htrc("New Pipeline: %s\n", p); + + return AggregateCollection(p); + } else { + if (filter || filp) { + if (trace) { + if (filter) + htrc("Filter: %s\n", filter); + + if (filp) { + char buf[512]; + + filp->Prints(g, buf, 511); + htrc("To_Filter: %s\n", buf); + } // endif To_Filter + + } // endif trace + + s = new(g) STRING(g, 1023, (PSZ)filter); + len = s->GetLength(); + + if (filp) { + if (filter) + s->Append(','); + + if (MakeSelector(g, filp, s)) { + strcpy(g->Message, "Failed making selector"); + return NULL; + } // endif Selector + + tdbp->SetFilter(NULL); // Not needed anymore + } // endif To_Filter + + if (trace) + htrc("selector: %s\n", s->GetStr()); + + s->Resize(s->GetLength() + 1); + sf = PlugDup(g, s->GetStr()); + } // endif Filter + + if (!all) { + if (Options && *Options) { + if (trace) + htrc("options=%s\n", Options); + + op = Options; + } else if (tdbp->GetColumns()) { + // Projection list + if (s) + s->Set("{\""); + else + s = new(g) STRING(g, 511, "{\""); + + if (!id) + s->Append("_id\":0,\""); + + for (PCOL cp = tdbp->GetColumns(); cp; cp = cp->GetNext()) { + if (b) + s->Append(",\""); + else + b = true; + + if ((jp = cp->GetJpath(g, true))) + s->Append(jp); + else { + // Can this happen? + htrc("Fail getting projection path of %s\n", cp->GetName()); + goto nope; + } // endif Jpath + + s->Append("\":1"); + } // endfor cp + + s->Append("}"); + s->Resize(s->GetLength() + 1); + op = s->GetStr(); + } else { + // count(*) ? + op = "{\"_id\":1}"; + } // endif Options + + } // endif all + + nope: + return FindCollection(sf, op); + } // endif Pipe + +} // end of MakeCursor + +/***********************************************************************/ +/* Find a collection and make cursor. */ +/***********************************************************************/ +bool JMgoConn::FindCollection(PCSZ query, PCSZ proj) +{ + bool rc = true; + jboolean brc; + jstring qry = nullptr, prj = nullptr; + PGLOBAL& g = m_G; + + // Get the methods used to execute a query and get the result + if (!gmID(g, fcollid, "FindColl", "(Ljava/lang/String;Ljava/lang/String;)Z")) { + if (query) + qry = env->NewStringUTF(query); + + if (proj) + prj = env->NewStringUTF(proj); + + brc = env->CallBooleanMethod(job, fcollid, qry, prj); + + if (!Check(brc ? -1 : 0)) { + rc = false; + } else + sprintf(g->Message, "FindColl: %s", Msg); + + if (query) + env->DeleteLocalRef(qry); + + if (proj) + env->DeleteLocalRef(prj); + + } // endif xqid + + return rc; +} // end of FindCollection + +/***********************************************************************/ +/* Find a collection and make cursor. */ +/***********************************************************************/ +bool JMgoConn::AggregateCollection(PCSZ pipeline) +{ + bool rc = true; + jboolean brc; + jstring pip = nullptr; + PGLOBAL& g = m_G; + + // Get the methods used to execute a query and get the result + if (!gmID(g, acollid, "AggregateColl", "(Ljava/lang/String;)Z")) { + pip = env->NewStringUTF(pipeline); + + brc = env->CallBooleanMethod(job, acollid, pip); + + if (!Check(brc ? -1 : 0)) { + rc = false; + } else + sprintf(g->Message, "AggregateColl: %s", Msg); + + env->DeleteLocalRef(pip); + } // endif acollid + + return rc; +} // end of AggregateCollection + +/***********************************************************************/ +/* Fetch next row. */ +/***********************************************************************/ +int JMgoConn::Fetch(int pos) +{ + jint rc = JNI_ERR; + PGLOBAL& g = m_G; + + //if (m_Full) // Result set has one row + // return 1; + + //if (pos) { + // if (!m_Scrollable) { + // strcpy(g->Message, "Cannot fetch(pos) if FORWARD ONLY"); + // return rc; + // } else if (gmID(m_G, fetchid, "Fetch", "(I)Z")) + // return rc; + + // if (env->CallBooleanMethod(job, fetchid, pos)) + // rc = m_Rows; + + //} else { + if (gmID(g, readid, "ReadNext", "()I")) + return (int)rc; + + rc = env->CallIntMethod(job, readid); + + if (!Check(rc)) { + //if (rc == 0) + // m_Full = (m_Fetch == 1); + //else + // m_Fetch++; + + m_Ncol = (int)rc; + rc = MY_MIN(rc, 1); + m_Rows += rc; + } else + sprintf(g->Message, "Fetch: %s", Msg); + + //} // endif pos + + return rc; +} // end of Fetch + +/***********************************************************************/ +/* Get the Json string of the current document. */ +/***********************************************************************/ +PSZ JMgoConn::GetDocument(void) +{ + PGLOBAL& g = m_G; + PSZ doc = NULL; + jstring jdc; + + if (!gmID(g, getdocid, "GetDoc", "()Ljava/lang/String;")) { + jdc = (jstring)env->CallObjectMethod(job, getdocid); + + if (jdc) + doc = (PSZ)env->GetStringUTFChars(jdc, (jboolean)false); + + } // endif getdocid + + return doc; + } // end of GetDocument + +/***********************************************************************/ +/* Group columns for inserting or updating. */ +/***********************************************************************/ +void JMgoConn::MakeColumnGroups(PGLOBAL g, PTDB tdbp) +{ + Fpc = new(g) JNCOL(false); + + for (PCOL colp = tdbp->GetColumns(); colp; colp = colp->GetNext()) + if (!colp->IsSpecial()) + Fpc->AddCol(g, colp, colp->GetJpath(g, false)); + +} // end of MakeColumnGroups + +/***********************************************************************/ +/* Get additional method ID. */ +/***********************************************************************/ +bool JMgoConn::GetMethodId(PGLOBAL g, MODE mode) +{ + if (mode == MODE_UPDATE) { + if (gmID(g, mkdocid, "MakeDocument", "()Ljava/lang/Object;")) + return true; + + if (gmID(g, docaddid, "DocAdd", + "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Z")) + return true; + + if (gmID(g, updateid, "CollUpdate", "(Ljava/lang/Object;)J")) + return true; + + } else if (mode == MODE_INSERT) { + if (gmID(g, mkdocid, "MakeDocument", "()Ljava/lang/Object;")) + return true; + + if (gmID(g, docaddid, "DocAdd", + "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Z")) + return true; + + if (gmID(g, mkarid, "MakeArray", "()Ljava/lang/Object;")) + return true; + + if (gmID(g, araddid, "ArrayAdd", "(Ljava/lang/Object;ILjava/lang/Object;)Z")) + return true; + + if (gmID(g, insertid, "CollInsert", "(Ljava/lang/Object;)Z")) + return true; + + } else if (mode == MODE_DELETE) + if (gmID(g, deleteid, "CollDelete", "(Z)J")) + return true; + + return gmID(g, rewindid, "Rewind", "()Z"); +} // end of GetMethodId + +/***********************************************************************/ +/* MakeObject. */ +/***********************************************************************/ +jobject JMgoConn::MakeObject(PGLOBAL g, PCOL colp, bool&error ) +{ + jclass cls; + jmethodID cns = nullptr; // Constructor + jobject val = nullptr; + PVAL valp = colp->GetValue(); + + error = false; + + if (valp->IsNull()) + return NULL; + + try { + switch (valp->GetType()) { + case TYPE_STRING: + val = env->NewStringUTF(valp->GetCharValue()); + break; + case TYPE_INT: + case TYPE_SHORT: + cls = env->FindClass("java/lang/Integer"); + cns = env->GetMethodID(cls, "", "(I)V"); + val = env->NewObject(cls, cns, valp->GetIntValue()); + break; + case TYPE_TINY: + cls = env->FindClass("java/lang/Boolean"); + cns = env->GetMethodID(cls, "", "(Z)V"); + val = env->NewObject(cls, cns, (valp->GetIntValue() != 0)); + break; + case TYPE_BIGINT: + cls = env->FindClass("java/lang/Long"); + cns = env->GetMethodID(cls, "", "(J)V"); + val = env->NewObject(cls, cns, valp->GetBigintValue()); + break; + case TYPE_DOUBLE: + cls = env->FindClass("java/lang/Double"); + cns = env->GetMethodID(cls, "", "(D)V"); + val = env->NewObject(cls, cns, valp->GetFloatValue()); + break; + default: + sprintf(g->Message, "Cannot make object from %d type", valp->GetType()); + error = true; + break; + } // endswitch Type + + } catch (...) { + sprintf(g->Message, "Cannot make object from %s value", colp->GetName()); + error = true; + } // end try/catch + + return val; +} // end of MakeObject + +/***********************************************************************/ +/* MakeDoc. */ +/***********************************************************************/ +jobject JMgoConn::MakeDoc(PGLOBAL g, PJNCOL jcp) +{ + bool error = false; + jobject parent, child, val; + jstring jkey; + + if (jcp->Array) + parent = env->CallObjectMethod(job, mkarid); + else + parent = env->CallObjectMethod(job, mkdocid); + + for (PJKC kp = jcp->Klist; kp; kp = kp->Next) + if (kp->Jncolp) { + if (!(child = MakeDoc(g, kp->Jncolp))) + return NULL; + + if (!jcp->Array) { + jkey = env->NewStringUTF(kp->Key); + + if (env->CallBooleanMethod(job, docaddid, parent, jkey, child)) + return NULL; + + env->DeleteLocalRef(jkey); + } else + if (env->CallBooleanMethod(job, araddid, parent, kp->N, child)) + return NULL; + + } else { + if (!(val = MakeObject(g, kp->Colp, error))) { + if (error) + return NULL; + + } else if (!jcp->Array) { + jkey = env->NewStringUTF(kp->Key); + + if (env->CallBooleanMethod(job, docaddid, parent, jkey, val)) + return NULL; + + env->DeleteLocalRef(jkey); + } else if (env->CallBooleanMethod(job, araddid, parent, kp->N, val)) { + if (Check(-1)) + sprintf(g->Message, "ArrayAdd: %s", Msg); + else + sprintf(g->Message, "ArrayAdd: unknown error"); + + return NULL; + } // endif ArrayAdd + + } // endif Jncolp + + return parent; +} // end of MakeDoc + +/***********************************************************************/ +/* Insert a new document in the collation. */ +/***********************************************************************/ +int JMgoConn::DocWrite(PGLOBAL g) +{ + jobject doc; + + if (!Fpc || !(doc = MakeDoc(g, Fpc))) + return RC_FX; + + if (env->CallBooleanMethod(job, insertid, doc)) { + if (Check(-1)) + sprintf(g->Message, "CollInsert: %s", Msg); + else + sprintf(g->Message, "CollInsert: unknown error"); + + return RC_FX; + } // endif Insert + + return RC_OK; +} // end of DocWrite + +/***********************************************************************/ +/* Update the current document from the collection. */ +/***********************************************************************/ +int JMgoConn::DocUpdate(PGLOBAL g, PTDB tdbp) +{ + int rc = RC_OK; + bool error; + PCOL colp; + jstring jkey; + jobject val, upd, updlist = env->CallObjectMethod(job, mkdocid); + + // Make the list of changes to do + for (colp = tdbp->GetSetCols(); colp; colp = colp->GetNext()) { + jkey = env->NewStringUTF(colp->GetJpath(g, false)); + val = MakeObject(g, colp, error); + + if (error) + return RC_FX; + + if (env->CallBooleanMethod(job, docaddid, updlist, jkey, val)) + return RC_OK; + + env->DeleteLocalRef(jkey); + } // endfor colp + + // Make the update parameter + upd = env->CallObjectMethod(job, mkdocid); + jkey = env->NewStringUTF("$set"); + + if (env->CallBooleanMethod(job, docaddid, upd, jkey, updlist)) + return RC_OK; + + env->DeleteLocalRef(jkey); + + jlong ar = env->CallLongMethod(job, updateid, upd); + + if (trace) + htrc("DocUpdate: ar = %ld\n", ar); + + if (Check((int)ar)) { + sprintf(g->Message, "CollUpdate: %s", Msg); + rc = RC_FX; + } // endif ar + + return rc; +} // end of DocUpdate + +/***********************************************************************/ +/* Remove all or only the current document from the collection. */ +/***********************************************************************/ +int JMgoConn::DocDelete(PGLOBAL g, bool all) +{ + int rc = RC_OK; + jlong ar = env->CallLongMethod(job, deleteid, all); + + if (trace) + htrc("DocDelete: ar = %ld\n", ar); + + if (Check((int)ar)) { + sprintf(g->Message, "CollDelete: %s", Msg); + rc = RC_FX; + } // endif ar + + return rc; +} // end of DocDelete + +/***********************************************************************/ +/* Rewind the collection. */ +/***********************************************************************/ +bool JMgoConn::Rewind(void) +{ + return env->CallBooleanMethod(job, rewindid); +} // end of Rewind + +/***********************************************************************/ +/* Retrieve the column string value from the document. */ +/***********************************************************************/ +PSZ JMgoConn::GetColumnValue(PSZ path) +{ + PGLOBAL& g = m_G; + PSZ fld = NULL; + jstring fn, jn = nullptr; + + if (!path || (jn = env->NewStringUTF(path)) == nullptr) { + sprintf(g->Message, "Fail to allocate jstring %s", SVP(path)); + throw (int)TYPE_AM_MGO; + } // endif name + + if (!gmID(g, objfldid, "GetField", "(Ljava/lang/String;)Ljava/lang/String;")) { + fn = (jstring)env->CallObjectMethod(job, objfldid, jn); + + if (fn) + fld = (PSZ)env->GetStringUTFChars(fn, (jboolean)false); + + } // endif objfldid + + return fld; +} // end of GetColumnValue + diff -Nru mariadb-10.1-10.1.25/storage/connect/jmgoconn.h mariadb-10.1-10.1.30/storage/connect/jmgoconn.h --- mariadb-10.1-10.1.25/storage/connect/jmgoconn.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jmgoconn.h 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,113 @@ +/***********************************************************************/ +/* JMgoConn.h : header file for the MongoDB connection classes. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Java interface. */ +/***********************************************************************/ +#include "javaconn.h" + +// Java connection to a MongoDB data source +class TDBJMG; +class JMGCOL; + +/***********************************************************************/ +/* Include MongoDB library header files. */ +/***********************************************************************/ +typedef class JNCOL *PJNCOL; +typedef class MGODEF *PMGODEF; +typedef class TDBJMG *PTDBJMG; +typedef class JMGCOL *PJMGCOL; + +typedef struct JKCOL { + JKCOL *Next; + PJNCOL Jncolp; + PCOL Colp; + char *Key; + int N; +} *PJKC; + +/***********************************************************************/ +/* Used when inserting values in a MongoDB collection. */ +/***********************************************************************/ +class JNCOL : public BLOCK { +public: + // Constructor + JNCOL(bool ar) { Klist = NULL; Array = ar; } + + // Methods + void AddCol(PGLOBAL g, PCOL colp, PSZ jp); + + //Members + PJKC Klist; + bool Array; +}; // end of JNCOL; + +/***********************************************************************/ +/* JMgoConn class. */ +/***********************************************************************/ +class JMgoConn : public JAVAConn { + friend class TDBJMG; + friend class JMGDISC; + //friend class TDBXJDC; + //friend PQRYRES GetColumnInfo(PGLOBAL, char*&, char *, int, PVBLK&); +private: + JMgoConn(); // Standard (unused) constructor + +public: + // Constructor + JMgoConn(PGLOBAL g, PCSZ collname, PCSZ wrapper); + + // Implementation +public: + virtual void AddJars(PSTRG jpop, char sep); + virtual bool Connect(PJPARM sop); + virtual bool MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, PCSZ filter, bool pipe); +// PQRYRES AllocateResult(PGLOBAL g, TDBEXT *tdbp, int n); + + // Attributes +public: +// virtual int GetMaxValue(int infotype); + +public: + // Operations + virtual int Fetch(int pos = 0); + virtual PSZ GetColumnValue(PSZ name); + + int CollSize(PGLOBAL g); + bool FindCollection(PCSZ query, PCSZ proj); + bool AggregateCollection(PCSZ pipeline); + void MakeColumnGroups(PGLOBAL g, PTDB tdbp); + bool GetMethodId(PGLOBAL g, MODE mode); + jobject MakeObject(PGLOBAL g, PCOL colp, bool& error); + jobject MakeDoc(PGLOBAL g, PJNCOL jcp); + int DocWrite(PGLOBAL g); + int DocUpdate(PGLOBAL g, PTDB tdbp); + int DocDelete(PGLOBAL g, bool all); + bool Rewind(void); + PSZ GetDocument(void); + +protected: + // Members + PCSZ CollName; // The collation name + jmethodID gcollid; // The GetCollection method ID + jmethodID countid; // The GetCollSize method ID + jmethodID fcollid; // The FindColl method ID + jmethodID acollid; // The AggregateColl method ID + jmethodID readid; // The ReadNext method ID + jmethodID fetchid; // The Fetch method ID + jmethodID rewindid; // The Rewind method ID + jmethodID getdocid; // The GetDoc method ID + jmethodID objfldid; // The ObjectField method ID + jmethodID mkdocid; // The MakeDocument method ID + jmethodID docaddid; // The DocAdd method ID + jmethodID mkarid; // The MakeArray method ID + jmethodID araddid; // The ArrayAdd method ID + jmethodID insertid; // The CollInsert method ID + jmethodID updateid; // The CollUpdate method ID + jmethodID deleteid; // The CollDelete method ID + PJNCOL Fpc; // To JNCOL classes + int m_Fetch; + int m_Ncol; + int m_Version; // Java driver version (2 or 3) +}; // end of JMgoConn class definition diff -Nru mariadb-10.1-10.1.25/storage/connect/json.cpp mariadb-10.1-10.1.30/storage/connect/json.cpp --- mariadb-10.1-10.1.25/storage/connect/json.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/json.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,5 @@ /*************** json CPP Declares Source Code File (.H) ***************/ -/* Name: json.cpp Version 1.3 */ +/* Name: json.cpp Version 1.4 */ /* */ /* (C) Copyright to the author Olivier BERTRAND 2014 - 2017 */ /* */ @@ -53,6 +53,38 @@ char *GetExceptionDesc(PGLOBAL g, unsigned int e); #endif // SE_CATCH +char *GetJsonNull(void); + +/***********************************************************************/ +/* IsNum: check whether this string is all digits. */ +/***********************************************************************/ +bool IsNum(PSZ s) +{ + for (char *p = s; *p; p++) + if (*p == ']') + break; + else if (!isdigit(*p) || *p == '-') + return false; + + return true; +} // end of IsNum + +/***********************************************************************/ +/* NextChr: return the first found '[' or Sep pointer. */ +/***********************************************************************/ +char *NextChr(PSZ s, char sep) +{ + char *p1 = strchr(s, '['); + char *p2 = strchr(s, sep); + + if (!p2) + return p1; + else if (p1) + return MY_MIN(p1, p2); + + return p2; +} // end of NextChr + /***********************************************************************/ /* Parse a json string. */ @@ -934,6 +966,25 @@ /* -------------------------- Class JOBJECT -------------------------- */ /***********************************************************************/ +/* Return the number of pairs in this object. */ +/***********************************************************************/ +int JOBJECT::GetSize(bool b) +{ + if (b) { + // Return only non null pairs + int n = 0; + + for (PJPR jpp = First; jpp; jpp = jpp->Next) + if (jpp->Val && !jpp->Val->IsNull()) + n++; + + return n; + } else + return Size; + +} // end of GetSize + +/***********************************************************************/ /* Add a new pair to an Object. */ /***********************************************************************/ PJPR JOBJECT::AddPair(PGLOBAL g, PCSZ key) @@ -992,14 +1043,31 @@ if (!First && n) return NULL; - else for (PJPR jp = First; jp; jp = jp->Next) + else if (n == 1 && Size == 1 && !strcmp(First->GetKey(), "$date")) { + int i; + + First->Val->GetText(g, text); + i = (text[1] == '-' ? 2 : 1); + + if (IsNum(text + i)) { + // Date is in milliseconds + int j = (int)strlen(text); + + if (j >= 4 + i) + text[j - 3] = 0; // Change it to seconds + else + strcpy(text, " 0"); + + } // endif text + + } else for (PJPR jp = First; jp; jp = jp->Next) jp->Val->GetText(g, text); if (n) PlugSubAlloc(g, NULL, strlen(text) + 1); return text + n; -} // end of GetValue; +} // end of GetText; /***********************************************************************/ /* Merge two objects. */ @@ -1040,7 +1108,7 @@ } // end of SetValue /***********************************************************************/ -/* Delete a value corresponding to the given key. */ +/* Delete a value corresponding to the given key. */ /***********************************************************************/ void JOBJECT::DeleteKey(PCSZ key) { @@ -1071,6 +1139,25 @@ /* -------------------------- Class JARRAY --------------------------- */ /***********************************************************************/ +/* Return the number of values in this object. */ +/***********************************************************************/ +int JARRAY::GetSize(bool b) +{ + if (b) { + // Return only non null values + int n = 0; + + for (PJVAL jvp = First; jvp; jvp = jvp->Next) + if (!jvp->IsNull()) + n++; + + return n; + } else + return Size; + +} // end of GetSize + +/***********************************************************************/ /* Make the array of values from the values list. */ /***********************************************************************/ void JARRAY::InitArray(PGLOBAL g) @@ -1179,17 +1266,41 @@ } // end of SetValue /***********************************************************************/ +/* Return the text corresponding to all values. */ +/***********************************************************************/ +PSZ JARRAY::GetText(PGLOBAL g, PSZ text) +{ + int n; + PJVAL jp; + + if (!text) { + text = (char*)PlugSubAlloc(g, NULL, 0); + text[0] = 0; + n = 1; + } else + n = 0; + + for (jp = First; jp; jp = jp->Next) + jp->GetText(g, text); + + if (n) + PlugSubAlloc(g, NULL, strlen(text) + 1); + + return text + n; +} // end of GetText; + +/***********************************************************************/ /* Delete a Value from the Arrays Value list. */ /***********************************************************************/ bool JARRAY::DeleteValue(int n) { - PJVAL jvp = GetValue(n); + PJVAL jvp = GetValue(n); - if (jvp) { - jvp->Del = true; - return false; - } else - return true; + if (jvp) { + jvp->Del = true; + return false; + } else + return true; } // end of DeleteValue @@ -1239,7 +1350,7 @@ else if (Value) return (JTYP)Value->GetType(); else - return (JTYP)TYPE_VOID; + return TYPE_NULL; } // end of GetValType @@ -1292,10 +1403,20 @@ /***********************************************************************/ /* Return the Value's String value. */ /***********************************************************************/ -PSZ JVALUE::GetString(void) +PSZ JVALUE::GetString(PGLOBAL g) { - char buf[32]; - return (Value) ? Value->GetCharString(buf) : NULL; + char *p; + + if (Value) { + char buf[32]; + + if ((p = Value->GetCharString(buf)) == buf) + p = PlugDup(g, buf); + + } else + p = NULL; + + return p; } // end of GetString /***********************************************************************/ @@ -1303,7 +1424,7 @@ /***********************************************************************/ PSZ JVALUE::GetText(PGLOBAL g, PSZ text) { - if (Jsp && Jsp->GetType() == TYPE_JOB) + if (Jsp) return Jsp->GetText(g, text); char buf[32]; @@ -1311,8 +1432,8 @@ if (s) strcat(strcat(text, " "), s); - else - strcat(text, " ???"); + else if (GetJsonNull()) + strcat(strcat(text, " "), GetJsonNull()); return text; } // end of GetText diff -Nru mariadb-10.1-10.1.25/storage/connect/json.h mariadb-10.1-10.1.30/storage/connect/json.h --- mariadb-10.1-10.1.25/storage/connect/json.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/json.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,7 +1,7 @@ /**************** json H Declares Source Code File (.H) ****************/ /* Name: json.h Version 1.2 */ /* */ -/* (C) Copyright to the author Olivier BERTRAND 2014 - 2015 */ +/* (C) Copyright to the author Olivier BERTRAND 2014 - 2017 */ /* */ /* This file contains the JSON classes declares. */ /***********************************************************************/ @@ -13,11 +13,13 @@ #define X #endif -enum JTYP {TYPE_STRG = 1, - TYPE_DBL = 2, - TYPE_BOOL = 4, - TYPE_BINT = 5, - TYPE_INTG = 7, +enum JTYP {TYPE_NULL = TYPE_VOID, + TYPE_STRG = TYPE_STRING, + TYPE_DBL = TYPE_DOUBLE, + TYPE_BOOL = TYPE_TINY, + TYPE_BINT = TYPE_BIGINT, + TYPE_DTM = TYPE_DATE, + TYPE_INTG = TYPE_INT, TYPE_JSON = 12, TYPE_JAR, TYPE_JOB, @@ -51,6 +53,8 @@ bool SerializeArray(JOUT *js, PJAR jarp, bool b); bool SerializeObject(JOUT *js, PJOB jobp); bool SerializeValue(JOUT *js, PJVAL jvp); +char *NextChr(PSZ s, char sep); +DllExport bool IsNum(PSZ s); /***********************************************************************/ /* Class JOUT. Used by Serialize. */ @@ -145,6 +149,7 @@ JSON(void) {Size = 0;} int size(void) {return Size;} + virtual int GetSize(bool b) {return Size;} virtual void Clear(void) {Size = 0;} virtual JTYP GetType(void) {return TYPE_JSON;} virtual JTYP GetValType(void) {X return TYPE_JSON;} @@ -162,7 +167,7 @@ virtual PJPR GetFirst(void) {X return NULL;} virtual int GetInteger(void) {X return 0;} virtual double GetFloat() {X return 0.0;} - virtual PSZ GetString() {X return NULL;} + virtual PSZ GetString(PGLOBAL g) {X return NULL;} virtual PSZ GetText(PGLOBAL g, PSZ text) {X return NULL;} virtual bool Merge(PGLOBAL g, PJSON jsp) { X return true; } virtual bool SetValue(PGLOBAL g, PJVAL jvp, int i) { X return true; } @@ -192,10 +197,11 @@ using JSON::GetValue; using JSON::SetValue; - virtual void Clear(void) {First = Last = NULL; Size = 0;} + virtual void Clear(void) {First = Last = NULL; Size = 0;} virtual JTYP GetType(void) {return TYPE_JOB;} virtual PJPR GetFirst(void) {return First;} - virtual PJPR AddPair(PGLOBAL g, PCSZ key); + virtual int GetSize(bool b); + virtual PJPR AddPair(PGLOBAL g, PCSZ key); virtual PJOB GetObject(void) {return this;} virtual PJVAL GetValue(const char* key); virtual PJAR GetKeyList(PGLOBAL g); @@ -221,11 +227,13 @@ using JSON::GetValue; using JSON::SetValue; virtual void Clear(void) {First = Last = NULL; Size = 0;} - virtual JTYP GetType(void) {return TYPE_JAR;} + virtual JTYP GetType(void) {return TYPE_JAR;} virtual PJAR GetArray(void) {return this;} - PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL); + virtual int GetSize(bool b); + PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL); virtual void InitArray(PGLOBAL g); virtual PJVAL GetValue(int i); + virtual PSZ GetText(PGLOBAL g, PSZ text); virtual bool Merge(PGLOBAL g, PJSON jsp); virtual bool SetValue(PGLOBAL g, PJVAL jvp, int i); virtual bool DeleteValue(int n); @@ -245,20 +253,20 @@ class JVALUE : public JSON { friend class JARRAY; friend class JSNX; + friend class JSONCOL; friend PJVAL ParseValue(PGLOBAL, int&, STRG&, bool*); friend bool SerializeValue(JOUT *, PJVAL); public: - JVALUE(void) : JSON() - {Jsp = NULL; Value = NULL; Next = NULL; Del = false;} + JVALUE(void) : JSON() {Clear();} JVALUE(PJSON jsp) : JSON() - {Jsp = jsp; Value = NULL; Next = NULL; Del = false;} - JVALUE(PGLOBAL g, PVAL valp); + {Jsp = jsp; Value = NULL; Next = NULL; Del = false; Size = 1;} + JVALUE(PGLOBAL g, PVAL valp); JVALUE(PGLOBAL g, PCSZ strp); using JSON::GetValue; using JSON::SetValue; virtual void Clear(void) - {Jsp = NULL; Value = NULL; Next = NULL; Del = false; Size = 0;} + {Jsp = NULL; Value = NULL; Next = NULL; Del = false; Size = 1;} virtual JTYP GetType(void) {return TYPE_JVAL;} virtual JTYP GetValType(void); virtual PJOB GetObject(void); @@ -269,7 +277,7 @@ virtual int GetInteger(void); virtual long long GetBigint(void); virtual double GetFloat(void); - virtual PSZ GetString(void); + virtual PSZ GetString(PGLOBAL g); virtual PSZ GetText(PGLOBAL g, PSZ text); virtual void SetValue(PJSON jsp); virtual void SetValue(PVAL valp) { Value = valp; Jsp = NULL; } diff -Nru mariadb-10.1-10.1.25/storage/connect/jsonudf.cpp mariadb-10.1-10.1.30/storage/connect/jsonudf.cpp --- mariadb-10.1-10.1.25/storage/connect/jsonudf.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jsonudf.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,5 @@ /****************** jsonudf C++ Program Source Code File (.CPP) ******************/ -/* PROGRAM NAME: jsonudf Version 1.5 */ +/* PROGRAM NAME: jsonudf Version 1.6 */ /* (C) Copyright to the author Olivier BERTRAND 2015-2017 */ /* This program are the JSON User Defined Functions . */ /*********************************************************************************/ @@ -27,9 +27,12 @@ #endif #define M 7 -uint GetJsonGrpSize(void); -static int IsJson(UDF_ARGS *args, uint i); -static PSZ MakePSZ(PGLOBAL g, UDF_ARGS *args, int i); +bool IsNum(PSZ s); +char *NextChr(PSZ s, char sep); +char *GetJsonNull(void); +uint GetJsonGrpSize(void); +static int IsJson(UDF_ARGS *args, uint i); +static PSZ MakePSZ(PGLOBAL g, UDF_ARGS *args, int i); static char *handle_item(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *res_length, char *is_null, char *error); static char *bin_handle_item(UDF_INIT *initid, UDF_ARGS *args, char *result, @@ -111,10 +114,9 @@ PJNODE jnp = &Nodes[i]; if (*p) { - if (p[--n] == ']') { - p[n--] = 0; - p++; - } else { + if (p[n - 1] == ']') { + p[--n] = 0; + } else if (!IsNum(p)) { // Wrong array specification sprintf(g->Message, "Invalid array specification %s", p); return true; @@ -124,8 +126,7 @@ b = true; // To check whether a numeric Rank was specified - for (int k = 0; dg && p[k]; k++) - dg = isdigit(p[k]) > 0; + dg = IsNum(p); if (!n) { // Default specifications @@ -142,7 +143,7 @@ jnp->Rank = B; jnp->Op = OP_LE; } else if (!Value->IsTypeNum()) { - jnp->CncVal = AllocateValue(g, (void*)", ", TYPE_STRING); + jnp->CncVal = AllocateValue(g, PlugDup(g, ", "), TYPE_STRING); jnp->Op = OP_CNC; } else jnp->Op = OP_ADD; @@ -160,13 +161,12 @@ // Set the Op value; switch (*p) { case '+': jnp->Op = OP_ADD; break; - case '*': jnp->Op = OP_MULT; break; + case 'x': jnp->Op = OP_MULT; break; case '>': jnp->Op = OP_MAX; break; case '<': jnp->Op = OP_MIN; break; case '!': jnp->Op = OP_SEP; break; // Average case '#': jnp->Op = OP_NUM; break; - case 'x': - case 'X': // Expand this array + case '*': // Expand this array strcpy(g->Message, "Expand not supported by this function"); return true; default: @@ -181,6 +181,10 @@ if (n > 2) { // Set concat intermediate string p[n - 1] = 0; + + if (trace) + htrc("Concat string=%s\n", p + 1); + jnp->CncVal = AllocateValue(g, p + 1, TYPE_STRING); } // endif n @@ -232,9 +236,9 @@ /*********************************************************************************/ my_bool JSNX::ParseJpath(PGLOBAL g) { - char *p, *p2 = NULL, *pbuf = NULL; + char *p, *p1 = NULL, *p2 = NULL, *pbuf = NULL; int i; - my_bool mul = false; + my_bool a, mul = false; if (Parsed) return false; // Already done @@ -242,11 +246,18 @@ // Jpath = Name; return true; + if (trace) + htrc("ParseJpath %s\n", SVP(Jpath)); + if (!(pbuf = PlgDBDup(g, Jpath))) return true; - // The Jpath must be analyzed - for (i = 0, p = pbuf; (p = strchr(p, ':')); i++, p++) + if (*pbuf == '$') pbuf++; + if (*pbuf == '.') pbuf++; + if (*pbuf == '[') p1 = pbuf++; + + // Estimate the required number of nodes + for (i = 0, p = pbuf; (p = NextChr(p, '.')); i++, p++) Nod++; // One path node found if (!(Nodes = (PJNODE)PlgDBSubAlloc(g, NULL, (++Nod) * sizeof(JNODE)))) @@ -255,12 +266,28 @@ memset(Nodes, 0, (Nod)* sizeof(JNODE)); // Analyze the Jpath for this column - for (i = 0, p = pbuf; i < Nod; i++, p = (p2 ? p2 + 1 : p + strlen(p))) { - if ((p2 = strchr(p, ':'))) - *p2 = 0; + for (i = 0, p = pbuf; p && i < Nod; i++, p = (p2 ? p2 : NULL)) { + a = (p1 != NULL); + p1 = strchr(p, '['); + p2 = strchr(p, '.'); + + if (!p2) + p2 = p1; + else if (p1) { + if (p1 < p2) + p2 = p1; + else if (p1 == p2 + 1) + *p2++ = 0; // Old syntax .[ + else + p1 = NULL; + + } // endif p1 + + if (p2) + *p2++ = 0; // Jpath must be explicit - if (*p == 0 || *p == '[') { + if (a || *p == 0 || *p == '[' || IsNum(p)) { // Analyse intermediate array processing if (SetArrayOptions(g, p, i, Nodes[i-1].Key)) return true; @@ -279,7 +306,14 @@ } // endfor i, p + Nod = i; MulVal = AllocateValue(g, Value); + + if (trace) + for (i = 0; i < Nod; i++) + htrc("Node(%d) Key=%s Op=%d Rank=%d\n", + i, SVP(Nodes[i].Key), Nodes[i].Op, Nodes[i].Rank); + Parsed = true; return false; } // end of ParseJpath @@ -307,6 +341,8 @@ void JSNX::SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n) { if (val) { + vp->SetNull(false); + if (Jb) { vp->SetValue_psz(Serialize(g, val->GetJsp(), NULL, 0)); } else switch (val->GetValType()) { @@ -327,11 +363,13 @@ SetJsonValue(g, vp, val->GetArray()->GetValue(0), n); break; case TYPE_JOB: - // if (!vp->IsTypeNum() || !Strict) { +// if (!vp->IsTypeNum() || !Strict) { vp->SetValue_psz(val->GetObject()->GetText(g, NULL)); break; - // } // endif Type +// } // endif Type + case TYPE_NULL: + vp->SetNull(true); default: vp->Reset(); } // endswitch Type @@ -459,64 +497,80 @@ /*********************************************************************************/ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n) { -//int i, ars, nv = 0, nextsame = Tjp->NextSame; - int i, ars, nv = 0, nextsame = 0; - my_bool err; + int i, ars = arp->size(), nv = 0; + bool err; OPVAL op = Nodes[n].Op; PVAL val[2], vp = Nodes[n].Valp; PJVAL jvrp, jvp; JVALUE jval; vp->Reset(); -//ars = MY_MIN(Tjp->Limit, arp->size()); - ars = arp->size(); - for (i = 0; i < ars; i++) { + if (trace) + htrc("CalculateArray size=%d op=%d\n", ars, op); + + for (i = 0; i < arp->size(); i++) { jvrp = arp->GetValue(i); -// do { - if (n < Nod - 1 && jvrp->GetJson()) { -// Tjp->NextSame = nextsame; + if (trace) + htrc("i=%d nv=%d\n", i, nv); + + if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) { + if (jvrp->IsNull()) { + jvrp->Value = AllocateValue(g, GetJsonNull(), TYPE_STRING); + jvp = jvrp; + } else if (n < Nod - 1 && jvrp->GetJson()) { jval.SetValue(GetColumnValue(g, jvrp->GetJson(), n + 1)); jvp = &jval; } else jvp = jvrp; + if (trace) + htrc("jvp=%s null=%d\n", + jvp->GetString(g), jvp->IsNull() ? 1 : 0); + if (!nv++) { SetJsonValue(g, vp, jvp, n); continue; } else SetJsonValue(g, MulVal, jvp, n); - if (!MulVal->IsZero()) { + if (!MulVal->IsNull()) { switch (op) { - case OP_CNC: - if (Nodes[n].CncVal) { - val[0] = Nodes[n].CncVal; - err = vp->Compute(g, val, 1, op); - } // endif CncVal + case OP_CNC: + if (Nodes[n].CncVal) { + val[0] = Nodes[n].CncVal; + err = vp->Compute(g, val, 1, op); + } // endif CncVal - val[0] = MulVal; - err = vp->Compute(g, val, 1, op); - break; - // case OP_NUM: - case OP_SEP: - val[0] = Nodes[n].Valp; - val[1] = MulVal; - err = vp->Compute(g, val, 2, OP_ADD); - break; - default: - val[0] = Nodes[n].Valp; - val[1] = MulVal; - err = vp->Compute(g, val, 2, op); + val[0] = MulVal; + err = vp->Compute(g, val, 1, op); + break; +// case OP_NUM: + case OP_SEP: + val[0] = Nodes[n].Valp; + val[1] = MulVal; + err = vp->Compute(g, val, 2, OP_ADD); + break; + default: + val[0] = Nodes[n].Valp; + val[1] = MulVal; + err = vp->Compute(g, val, 2, op); } // endswitch Op if (err) vp->Reset(); + if (trace) { + char buf(32); + + htrc("vp='%s' err=%d\n", + vp->GetCharString(&buf), err ? 1 : 0); + } // endif trace + } // endif Zero -// } while (Tjp->NextSame > nextsame); + } // endif jvrp } // endfor i @@ -531,7 +585,6 @@ } // endif Op -//Tjp->NextSame = nextsame; return vp; } // end of CalculateArray @@ -711,6 +764,7 @@ // Write to the path string Jp = new(g) JOUTSTR(g); + Jp->WriteChr('$'); Jvalp = jvp; K = k; @@ -769,7 +823,12 @@ /*********************************************************************************/ my_bool JSNX::LocateObject(PJOB jobp) { - size_t m = Jp->N; + size_t m; + + if (Jp->WriteChr('.')) + return true; + + m = Jp->N; for (PJPR pair = jobp->First; pair && !Found; pair = pair->Next) { Jp->N = m; @@ -790,19 +849,12 @@ /*********************************************************************************/ my_bool JSNX::LocateValue(PJVAL jvp) { - if (CompareTree(Jvalp, jvp)) { + if (CompareTree(Jvalp, jvp)) Found = (--K == 0); - } else if (jvp->GetArray()) { - if (Jp->WriteChr(':')) - return true; - + else if (jvp->GetArray()) return LocateArray(jvp->GetArray()); - } else if (jvp->GetObject()) { - if (Jp->WriteChr(':')) - return true; - + else if (jvp->GetObject()) return LocateObject(jvp->GetObject()); - } // endif's return false; } // end of LocateValue @@ -848,6 +900,7 @@ if (!g->Message[0]) strcpy(g->Message, "Invalid json tree"); + return NULL; } else { if (Jp->N > 1) Jp->N--; @@ -858,7 +911,6 @@ return Jp->Strp; } // endif's - return NULL; } // end of LocateAll /*********************************************************************************/ @@ -964,26 +1016,26 @@ /*********************************************************************************/ my_bool JSNX::AddPath(void) { - char s[16]; - my_bool b = false; + char s[16]; - if (Jp->WriteChr('"')) + if (Jp->WriteStr("\"$")) return true; for (int i = 0; i <= I; i++) { - if (b) { - if (Jp->WriteChr(':')) return true; - } else - b = true; - if (Jpnp[i].Type == TYPE_JAR) { sprintf(s, "[%d]", Jpnp[i].N + B); if (Jp->WriteStr(s)) return true; - } else if (Jp->WriteStr(Jpnp[i].Key)) - return true; + } else { + if (Jp->WriteChr('.')) + return true; + + if (Jp->WriteStr(Jpnp[i].Key)) + return true; + + } // endif's } // endfor i @@ -1081,6 +1133,7 @@ /*********************************************************************************/ inline void JsonFreeMem(PGLOBAL g) { + g->Activityp = NULL; PlugExit(g); } /* end of JsonFreeMem */ @@ -1092,7 +1145,7 @@ unsigned long reslen, unsigned long memlen, unsigned long more = 0) { - PGLOBAL g = PlugInit(NULL, memlen + more); + PGLOBAL g = PlugInit(NULL, memlen + more + 500); // +500 to avoid CheckMem if (!g) { strcpy(message, "Allocation error"); @@ -1452,12 +1505,17 @@ ml += g->More; if (ml > g->Sarea_Size) { +#if !defined(DEVELOPMENT) + if (trace) +#endif + htrc("Freeing Sarea at %p size=%d\n", g->Sarea, g->Sarea_Size); + free(g->Sarea); if (!(g->Sarea = PlugAllocMem(g, ml))) { char errmsg[MAX_STR]; - sprintf(errmsg, MSG(WORK_AREA), g->Message); + snprintf(errmsg, sizeof(errmsg)-1, MSG(WORK_AREA), g->Message); strcpy(g->Message, errmsg); g->Sarea_Size = 0; return true; @@ -1757,16 +1815,16 @@ /*********************************************************************************/ /* Make a Json array containing all the parameters. */ /*********************************************************************************/ -my_bool json_array_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +my_bool json_make_array_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { unsigned long reslen, memlen; CalcLen(args, false, reslen, memlen); return JsonInit(initid, args, message, false, reslen, memlen); -} // end of json_array_init +} // end of json_make_array_init -char *json_array(UDF_INIT *initid, UDF_ARGS *args, char *result, - unsigned long *res_length, char *, char *) +char *json_make_array(UDF_INIT *initid, UDF_ARGS *args, char *result, + unsigned long *res_length, char *, char *) { char *str; PGLOBAL g = (PGLOBAL)initid->ptr; @@ -1793,12 +1851,12 @@ *res_length = strlen(str); return str; -} // end of json_array +} // end of json_make_array -void json_array_deinit(UDF_INIT* initid) +void json_make_array_deinit(UDF_INIT* initid) { JsonFreeMem((PGLOBAL)initid->ptr); -} // end of json_array_deinit +} // end of json_make_array_deinit /*********************************************************************************/ /* Add one or several values to a Json array. */ @@ -1845,7 +1903,7 @@ PJAR arp; PJVAL jvp = MakeValue(g, args, 0, &top); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(top = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); return NULL; @@ -2079,18 +2137,218 @@ } // end of json_array_delete_deinit /*********************************************************************************/ +/* Sum big integer values from a Json array. */ +/*********************************************************************************/ +my_bool jsonsum_int_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +{ + unsigned long reslen, memlen, more; + + if (args->arg_count != 1) { + strcpy(message, "This function must have 1 argument"); + return true; + } else if (!IsJson(args, 0) && args->arg_type[0] != STRING_RESULT) { + strcpy(message, "First argument must be a json item"); + return true; + } else + CalcLen(args, false, reslen, memlen); + + // TODO: calculate this + more = (IsJson(args, 0) != 3) ? 1000 : 0; + + return JsonInit(initid, args, message, true, reslen, memlen, more); +} // end of jsonsum_int_init + +long long jsonsum_int(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) +{ + long long n = 0LL; + PGLOBAL g = (PGLOBAL)initid->ptr; + + if (g->N) { + if (!g->Activityp) { + *is_null = 1; + return 0LL; + } else + return *(long long*)g->Activityp; + + } else if (initid->const_item) + g->N = 1; + + if (!CheckMemory(g, initid, args, 1, false, false, true)) { + PJVAL jvp = MakeValue(g, args, 0); + + if (jvp && jvp->GetValType() == TYPE_JAR) { + PJAR arp = jvp->GetArray(); + + for (int i = 0; i < arp->size(); i++) + n += arp->GetValue(i)->GetBigint(); + + } else { + PUSH_WARNING("First argument target is not an array"); + } // endif jvp + + } else { + *error = 1; + n = -1LL; + } // end of CheckMemory + + if (g->N) { + // Keep result of constant function + long long *np = (long long*)PlugSubAlloc(g, NULL, sizeof(long long)); + *np = n; + g->Activityp = (PACTIVITY)np; + } // endif const_item + + return n; +} // end of jsonsum_int + +void jsonsum_int_deinit(UDF_INIT* initid) +{ + JsonFreeMem((PGLOBAL)initid->ptr); +} // end of jsonsum_int_deinit + +/*********************************************************************************/ +/* Sum big integer values from a Json array. */ +/*********************************************************************************/ +my_bool jsonsum_real_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +{ + unsigned long reslen, memlen, more; + + if (args->arg_count != 1) { + strcpy(message, "This function must have 1 argument"); + return true; + } else if (!IsJson(args, 0) && args->arg_type[0] != STRING_RESULT) { + strcpy(message, "First argument must be a json item"); + return true; + } else + CalcLen(args, false, reslen, memlen); + + // TODO: calculate this + more = (IsJson(args, 0) != 3) ? 1000 : 0; + + return JsonInit(initid, args, message, true, reslen, memlen, more); +} // end of jsonsum_real_init + +double jsonsum_real(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) +{ + double n = 0.0; + PGLOBAL g = (PGLOBAL)initid->ptr; + + if (g->N) { + if (!g->Activityp) { + *is_null = 1; + return 0.0; + } else + return *(double*)g->Activityp; + + } else if (initid->const_item) + g->N = 1; + + if (!CheckMemory(g, initid, args, 1, false, false, true)) { + PJVAL jvp = MakeValue(g, args, 0); + + if (jvp && jvp->GetValType() == TYPE_JAR) { + PJAR arp = jvp->GetArray(); + + for (int i = 0; i < arp->size(); i++) + n += arp->GetValue(i)->GetFloat(); + + } else { + PUSH_WARNING("First argument target is not an array"); + } // endif jvp + + } else { + *error = 1; + n = -1.0; + } // end of CheckMemory + + if (g->N) { + // Keep result of constant function + double *np = (double*)PlugSubAlloc(g, NULL, sizeof(double)); + *np = n; + g->Activityp = (PACTIVITY)np; + } // endif const_item + + return n; +} // end of jsonsum_real + +void jsonsum_real_deinit(UDF_INIT* initid) +{ + JsonFreeMem((PGLOBAL)initid->ptr); +} // end of jsonsum_real_deinit + +/*********************************************************************************/ +/* Returns the average of big integer values from a Json array. */ +/*********************************************************************************/ +my_bool jsonavg_real_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +{ + return jsonsum_real_init(initid, args, message); +} // end of jsonavg_real_init + +double jsonavg_real(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) +{ + double n = 0.0; + PGLOBAL g = (PGLOBAL)initid->ptr; + + if (g->N) { + if (!g->Activityp) { + *is_null = 1; + return 0.0; + } else + return *(double*)g->Activityp; + + } else if (initid->const_item) + g->N = 1; + + if (!CheckMemory(g, initid, args, 1, false, false, true)) { + PJVAL jvp = MakeValue(g, args, 0); + + if (jvp && jvp->GetValType() == TYPE_JAR) { + PJAR arp = jvp->GetArray(); + + if (arp->size()) { + for (int i = 0; i < arp->size(); i++) + n += arp->GetValue(i)->GetFloat(); + + n /= arp->size(); + } // endif size + + } else { + PUSH_WARNING("First argument target is not an array"); + } // endif jvp + + } else { + *error = 1; + n = -1.0; + } // end of CheckMemory + + if (g->N) { + // Keep result of constant function + double *np = (double*)PlugSubAlloc(g, NULL, sizeof(double)); + *np = n; + g->Activityp = (PACTIVITY)np; + } // endif const_item + + return n; +} // end of jsonavg_real + +void jsonavg_real_deinit(UDF_INIT* initid) +{ + JsonFreeMem((PGLOBAL)initid->ptr); +} // end of jsonavg_real_deinit + +/*********************************************************************************/ /* Make a Json Object containing all the parameters. */ /*********************************************************************************/ -my_bool json_object_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +my_bool json_make_object_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { unsigned long reslen, memlen; CalcLen(args, true, reslen, memlen); return JsonInit(initid, args, message, false, reslen, memlen); -} // end of json_object_init +} // end of json_make_object_init -char *json_object(UDF_INIT *initid, UDF_ARGS *args, char *result, - unsigned long *res_length, char *, char *) +char *json_make_object(UDF_INIT *initid, UDF_ARGS *args, char *result, + unsigned long *res_length, char *, char *) { char *str = NULL; PGLOBAL g = (PGLOBAL)initid->ptr; @@ -2115,12 +2373,12 @@ *res_length = strlen(str); return str; -} // end of json_object +} // end of json_make_object -void json_object_deinit(UDF_INIT* initid) +void json_make_object_deinit(UDF_INIT* initid) { JsonFreeMem((PGLOBAL)initid->ptr); -} // end of json_object_deinit +} // end of json_make_object_deinit /*********************************************************************************/ /* Make a Json Object containing all not null parameters. */ @@ -2435,7 +2693,7 @@ PJSON jsp; PJVAL jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); return NULL; @@ -2819,7 +3077,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); return NULL; @@ -2934,7 +3192,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); goto err; @@ -2971,6 +3229,7 @@ } catch (int n) { if (trace) htrc("Exception %d: %s\n", n, g->Message); + PUSH_WARNING(g->Message); str = NULL; } catch (const char *msg) { @@ -3020,7 +3279,7 @@ } // end of jsonget_int_init long long jsonget_int(UDF_INIT *initid, UDF_ARGS *args, - char *is_null, char *error) + char *is_null, char *error) { char *p, *path; long long n; @@ -3048,7 +3307,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); if (g->Mrr) *error = 1; @@ -3163,7 +3422,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); *is_null = 1; @@ -3279,7 +3538,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); goto err; @@ -3311,6 +3570,7 @@ } catch (int n) { if (trace) htrc("Exception %d: %s\n", n, g->Message); + PUSH_WARNING(g->Message); *error = 1; path = NULL; @@ -3402,7 +3662,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); goto err; @@ -3435,6 +3695,7 @@ } catch (int n) { if (trace) htrc("Exception %d: %s\n", n, g->Message); + PUSH_WARNING(g->Message); *error = 1; path = NULL; @@ -3573,7 +3834,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); goto err; @@ -3660,7 +3921,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { throw 2; } // endif jsp @@ -3709,6 +3970,7 @@ } catch (int n) { if (trace) htrc("Exception %d: %s\n", n, g->Message); + PUSH_WARNING(g->Message); str = NULL; } catch (const char *msg) { @@ -3995,14 +4257,14 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!strchr("[{ \t\r\n", *p)) { // Is this a file name? if (!(p = GetJsonFile(g, p))) { PUSH_WARNING(g->Message); goto fin; } else - fn = jvp->GetString(); + fn = jvp->GetString(g); } // endif p @@ -4145,7 +4407,7 @@ PJVAL jvp = MakeValue(g, args, 0, &top); PGLOBAL gb = GetMemPtr(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(top = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); return NULL; @@ -4683,7 +4945,7 @@ PJSON jsp; PJVAL jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); return NULL; @@ -4754,7 +5016,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); goto fin; @@ -4928,7 +5190,7 @@ } else jvp = MakeValue(g, args, 0); - if ((p = jvp->GetString())) { + if ((p = jvp->GetString(g))) { if (!(jsp = ParseJson(g, p, strlen(p)))) { PUSH_WARNING(g->Message); goto fin; diff -Nru mariadb-10.1-10.1.25/storage/connect/jsonudf.h mariadb-10.1-10.1.30/storage/connect/jsonudf.h --- mariadb-10.1-10.1.25/storage/connect/jsonudf.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/jsonudf.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,7 +1,7 @@ /******************** tabjson H Declares Source Code File (.H) *******************/ -/* Name: jsonudf.h Version 1.2 */ +/* Name: jsonudf.h Version 1.3 */ /* */ -/* (C) Copyright to the author Olivier BERTRAND 2015 */ +/* (C) Copyright to the author Olivier BERTRAND 2015-2017 */ /* */ /* This file contains the JSON UDF function and class declares. */ /*********************************************************************************/ @@ -37,9 +37,9 @@ DllExport char *jsonvalue(UDF_EXEC_ARGS); DllExport void jsonvalue_deinit(UDF_INIT*); - DllExport my_bool json_array_init(UDF_INIT*, UDF_ARGS*, char*); - DllExport char *json_array(UDF_EXEC_ARGS); - DllExport void json_array_deinit(UDF_INIT*); + DllExport my_bool json_make_array_init(UDF_INIT*, UDF_ARGS*, char*); + DllExport char *json_make_array(UDF_EXEC_ARGS); + DllExport void json_make_array_deinit(UDF_INIT*); DllExport my_bool json_array_add_values_init(UDF_INIT*, UDF_ARGS*, char*); DllExport char *json_array_add_values(UDF_EXEC_ARGS); @@ -53,9 +53,21 @@ DllExport char *json_array_delete(UDF_EXEC_ARGS); DllExport void json_array_delete_deinit(UDF_INIT*); - DllExport my_bool json_object_init(UDF_INIT*, UDF_ARGS*, char*); - DllExport char *json_object(UDF_EXEC_ARGS); - DllExport void json_object_deinit(UDF_INIT*); + DllExport my_bool jsonsum_int_init(UDF_INIT*, UDF_ARGS*, char*); + DllExport long long jsonsum_int(UDF_INIT*, UDF_ARGS*, char*, char*); + DllExport void jsonsum_int_deinit(UDF_INIT*); + + DllExport my_bool jsonsum_real_init(UDF_INIT*, UDF_ARGS*, char*); + DllExport double jsonsum_real(UDF_INIT*, UDF_ARGS*, char*, char*); + DllExport void jsonsum_real_deinit(UDF_INIT*); + + DllExport my_bool jsonavg_real_init(UDF_INIT*, UDF_ARGS*, char*); + DllExport double jsonavg_real(UDF_INIT*, UDF_ARGS*, char*, char*); + DllExport void jsonavg_real_deinit(UDF_INIT*); + + DllExport my_bool json_make_object_init(UDF_INIT*, UDF_ARGS*, char*); + DllExport char *json_make_object(UDF_EXEC_ARGS); + DllExport void json_make_object_deinit(UDF_INIT*); DllExport my_bool json_object_nonull_init(UDF_INIT*, UDF_ARGS*, char*); DllExport char *json_object_nonull(UDF_EXEC_ARGS); diff -Nru mariadb-10.1-10.1.25/storage/connect/Mongo2Interface.java mariadb-10.1-10.1.30/storage/connect/Mongo2Interface.java --- mariadb-10.1-10.1.25/storage/connect/Mongo2Interface.java 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/Mongo2Interface.java 2017-12-21 15:48:49.000000000 +0000 @@ -0,0 +1,437 @@ +package wrappers; + +import java.util.Date; +import java.util.List; +import java.util.Set; + +import com.mongodb.AggregationOptions; +import com.mongodb.BasicDBList; +import com.mongodb.BasicDBObject; +import com.mongodb.Cursor; +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; +import com.mongodb.MongoException; +import com.mongodb.WriteConcernException; +import com.mongodb.WriteResult; +import com.mongodb.util.JSON; + +public class Mongo2Interface { + boolean DEBUG = false; + String Errmsg = "No error"; + Set Colnames = null; + Cursor cursor = null; + MongoClient client = null; + DB db = null; + DBCollection coll = null; + BasicDBObject doc = null; + BasicDBObject dbq = null; + BasicDBObject dbf = null; + List pip = null; + AggregationOptions aop = null; + + // === Constructors/finalize ========================================= + public Mongo2Interface() { + this(false); + } // end of default constructor + + public Mongo2Interface(boolean b) { + DEBUG = b; + } // end of constructor + + protected void SetErrmsg(String str) { + if (DEBUG) + System.out.println(str); + + Errmsg = str; + } // end of SetErrmsg + + protected void SetErrmsg(Exception e) { + if (DEBUG) + System.out.println(e.getMessage()); + + Errmsg = e.toString(); + } // end of SetErrmsg + + public String GetErrmsg() { + String err = Errmsg; + + Errmsg = "No error"; + return err; + } // end of GetErrmsg + + public int MongoConnect(String[] parms) { + int rc = 0; + + if (DEBUG) + System.out.println("Mongo2: URI=" + parms[0] + " DB=" + parms[1]); + + try { + MongoClientURI uri = new MongoClientURI(parms[0]); + + client = new MongoClient(uri); + + if (DEBUG) + System.out.println("Connection " + client.toString() + " established"); + + // Now connect to your databases + db = client.getDB(parms[1]); + + if (parms[2] != null && !parms[2].isEmpty()) { + if (DEBUG) + System.out.println("user=" + parms[2] + " pwd=" + parms[3]); + + @SuppressWarnings("deprecation") + boolean auth = db.authenticate(parms[2], parms[3].toCharArray()); + + if (DEBUG) + System.out.println("Authentication: " + auth); + + } // endif user + + } catch (MongoException me) { + SetErrmsg(me); + rc = -1; + } catch (Exception e) { + SetErrmsg(e); + rc = -3; + } // end try/catch + + return rc; + } // end of MongoConnect + + public int MongoDisconnect() { + int rc = 0; + + try { + if (cursor != null) { + if (DEBUG) + System.out.println("Closing cursor"); + + cursor.close(); + cursor = null; + } // endif client + + if (client != null) { + if (DEBUG) + System.out.println("Closing connection"); + + client.close(); + client = null; + } // endif client + + } catch (MongoException se) { + SetErrmsg(se); + rc += 8; + } // end try/catch + + return rc; + } // end of MongoDisconnect + + public boolean GetCollection(String name) { + if (DEBUG) + System.out.println("GetCollection: name=" + name); + + try { + coll = db.getCollection(name); + } catch (Exception e) { + SetErrmsg(e); + return true; + } // end try/catch + + return false; + } // end of GetCollection + + public long GetCollSize() { + return (coll != null) ? coll.count() : 0; + } // end of GetCollSize + + public boolean FindColl(String query, String fields) { + if (DEBUG) + System.out.println("FindColl: query=" + query + " fields=" + fields); + + try { + if (query != null || fields != null) { + dbq = (BasicDBObject) JSON.parse((query != null) ? query : "{}"); + + if (fields != null) { + dbf = (BasicDBObject) JSON.parse(fields); + cursor = coll.find(dbq, dbf); + } else + cursor = coll.find(dbq); + + } else + cursor = coll.find(); + + } catch (Exception e) { + SetErrmsg(e); + return true; + } // end try/catch + + return false; + } // end of FindColl + + @SuppressWarnings("unchecked") + public boolean AggregateColl(String pipeline) { + if (DEBUG) + System.out.println("AggregateColl: pipeline=" + pipeline); + + try { + DBObject pipe = (DBObject) JSON.parse(pipeline); + + pip = (List) pipe.get("pipeline"); + aop = AggregationOptions.builder().batchSize(0).allowDiskUse(true) + .outputMode(AggregationOptions.OutputMode.CURSOR).build(); + cursor = coll.aggregate(pip, aop); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } // end try/catch + + return false; + } // end of AggregateColl + + public boolean Rewind() { + if (cursor != null) + cursor.close(); + + if (pip == null) { + if (dbf != null) + cursor = coll.find(dbq, dbf); + else if (dbq != null) + cursor = coll.find(dbq); + else + cursor = coll.find(); + + } else + cursor = coll.aggregate(pip, aop); + + return (cursor == null); + } // end of Rewind + + public int ReadNext() { + try { + if (cursor.hasNext()) { + doc = (BasicDBObject) cursor.next(); + + if (DEBUG) + System.out.println("Class doc = " + doc.getClass()); + + Colnames = doc.keySet(); + return 1; + } else + return 0; + + } catch (MongoException me) { + SetErrmsg(me); + return -1; + } // end try/catch + + } // end of ReadNext + + public boolean Fetch(int row) { + if (cursor.hasNext()) { + doc = (BasicDBObject) cursor.next(); + Colnames = doc.keySet(); + return true; + } else + return false; + + } // end of Fetch + + public String GetDoc() { + return (doc != null) ? doc.toString() : null; + } // end of GetDoc + + public Set GetColumns() { + if (doc != null) + return doc.keySet(); + else + return null; + + } // end of GetColumns + + public String ColumnDesc(int n, int[] val) { + // if (rsmd == null) { + // System.out.println("No result metadata"); + // return null; + // } else try { + // val[0] = rsmd.getColumnType(n); + // val[1] = rsmd.getPrecision(n); + // val[2] = rsmd.getScale(n); + // val[3] = rsmd.isNullable(n); + // return rsmd.getColumnLabel(n); + // } catch (SQLException se) { + // SetErrmsg(se); + // } //end try/catch + + return null; + } // end of ColumnDesc + + protected Object GetFieldObject(String path) { + Object o = null; + BasicDBObject dob = null; + BasicDBList lst = null; + String[] names = null; + + if (path == null || path.equals("*")) + return doc; + else if (doc instanceof BasicDBObject) + dob = doc; + // else if (o instanceof BasicDBList) + // lst = (BasicDBList) doc; + else + return doc; + + try { + names = path.split("\\."); + + for (String name : names) { + if (lst != null) { + o = lst.get(Integer.parseInt(name)); + } else + o = dob.get(name); + + if (o == null) + break; + + if (DEBUG) + System.out.println("Class o = " + o.getClass()); + + if (o instanceof BasicDBObject) { + dob = (BasicDBObject) o; + lst = null; + } else if (o instanceof BasicDBList) { + lst = (BasicDBList) o; + } else + break; + + } // endfor name + + } catch (IndexOutOfBoundsException x) { + o = null; + } catch (MongoException se) { + SetErrmsg(se); + o = null; + } // end try/catch + + return o; + } // end of GetFieldObject + + public String GetField(String path) { + Object o = GetFieldObject(path); + + if (o != null) { + if (o instanceof Date) { + Integer TS = (int) (((Date) o).getTime() / 1000); + return TS.toString(); + } // endif Date + + return o.toString(); + } else + return null; + + } // end of GetField + + public Object MakeDocument() { + return new BasicDBObject(); + } // end of MakeDocument + + public boolean DocAdd(Object bdc, String key, Object val) { + try { + ((BasicDBObject) bdc).append(key, val); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } // end try/catch + + return false; + } // end of DocAdd + + public Object MakeArray() { + return new BasicDBList(); + } // end of MakeArray + + public boolean ArrayAdd(Object bar, int n, Object val) { + try { + ((BasicDBList) bar).put(n, val); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } catch (Exception ex) { + SetErrmsg(ex); + return true; + } // end try/catch + + return false; + } // end of ArrayAdd + + public boolean CollInsert(Object dob) { + try { + coll.insert((BasicDBObject) dob); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } catch (Exception ex) { + SetErrmsg(ex); + return true; + } // end try/catch + + return false; + } // end of CollInsert + + public long CollUpdate(Object upd) { + long n = -1; + + if (DEBUG) + System.out.println("upd: " + upd.toString()); + + try { + DBObject qry = new BasicDBObject("_id", doc.get("_id")); + + WriteResult res = coll.update(qry, (DBObject) upd); + + if (DEBUG) + System.out.println("CollUpdate: " + res.toString()); + + n = res.getN(); + } catch (MongoException me) { + SetErrmsg(me); + } catch (Exception ex) { + SetErrmsg(ex); + } // end try/catch + + return n; + } // end of CollUpdate + + public long CollDelete(boolean all) { + long n = -1; + + try { + WriteResult res; + BasicDBObject qry = new BasicDBObject(); + + if (!all) + qry.append("_id", doc.get("_id")); + + res = coll.remove(qry); + + if (DEBUG) + System.out.println("CollDelete: " + res.toString()); + + n = res.getN(); + } catch (WriteConcernException wx) { + SetErrmsg(wx); + } catch (MongoException me) { + SetErrmsg(me); + } catch (UnsupportedOperationException ux) { + SetErrmsg(ux); + n = 0; + } // end try/catch + + return n; + } // end of CollDelete + +} // end of class MongoInterface diff -Nru mariadb-10.1-10.1.25/storage/connect/Mongo3Interface.java mariadb-10.1-10.1.30/storage/connect/Mongo3Interface.java --- mariadb-10.1-10.1.25/storage/connect/Mongo3Interface.java 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/Mongo3Interface.java 2017-12-21 15:48:49.000000000 +0000 @@ -0,0 +1,504 @@ +package wrappers; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; + +import org.bson.BsonArray; +import org.bson.BsonBoolean; +import org.bson.BsonDateTime; +import org.bson.BsonDocument; +import org.bson.BsonDouble; +import org.bson.BsonInt32; +import org.bson.BsonInt64; +import org.bson.BsonNull; +import org.bson.BsonString; +import org.bson.BsonValue; +import org.bson.Document; +import org.bson.conversions.Bson; + +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; +import com.mongodb.MongoException; +import com.mongodb.client.AggregateIterable; +import com.mongodb.client.FindIterable; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.Filters; +import com.mongodb.client.result.DeleteResult; +import com.mongodb.client.result.UpdateResult; + +public class Mongo3Interface { + boolean DEBUG = false; + String Errmsg = "No error"; + Set Colnames = null; + MongoClient client = null; + MongoDatabase db = null; + MongoCollection coll = null; + FindIterable finditer = null; + AggregateIterable aggiter = null; + MongoCursor cursor = null; + BsonDocument doc = null; + BsonDocument util = null; + BsonNull bsonull = new BsonNull(); + + // === Constructors/finalize ========================================= + public Mongo3Interface() { + this(false); + } // end of default constructor + + public Mongo3Interface(boolean b) { + DEBUG = b; + } // end of constructor + + protected void SetErrmsg(String str) { + if (DEBUG) + System.out.println(str); + + Errmsg = str; + } // end of SetErrmsg + + protected void SetErrmsg(Exception e) { + if (DEBUG) + System.out.println(e.getMessage()); + + Errmsg = e.toString(); + } // end of SetErrmsg + + public String GetErrmsg() { + String err = Errmsg; + + Errmsg = "No error"; + return err; + } // end of GetErrmsg + + public int MongoConnect(String[] parms) { + int rc = 0; + + if (DEBUG) + System.out.println("Mongo3: URI=" + parms[0] + " DB=" + parms[1]); + + try { + MongoClientURI uri = new MongoClientURI(parms[0]); + + client = new MongoClient(uri); + + if (DEBUG) + System.out.println("Connection " + client.toString() + " established"); + + // Now connect to your databases + db = client.getDatabase(parms[1]); + + // if (parms[2] != null && !parms[2].isEmpty()) { + // if (DEBUG) + // System.out.println("user=" + parms[2] + " pwd=" + parms[3]); + + // @SuppressWarnings("deprecation") + // boolean auth = db.authenticate(parms[2], parms[3].toCharArray()); + + // if (DEBUG) + // System.out.println("Authentication: " + auth); + + // } // endif user + + } catch (MongoException me) { + SetErrmsg(me); + rc = -1; + } catch (Exception e) { + SetErrmsg(e); + rc = -3; + } // end try/catch + + return rc; + } // end of MongoConnect + + public int MongoDisconnect() { + int rc = 0; + + try { + if (cursor != null) { + if (DEBUG) + System.out.println("Closing cursor"); + + cursor.close(); + cursor = null; + } // endif client + + if (client != null) { + if (DEBUG) + System.out.println("Closing connection"); + + client.close(); + client = null; + } // endif client + + } catch (MongoException se) { + SetErrmsg(se); + rc += 8; + } // end try/catch + + return rc; + } // end of MongoDisconnect + + public boolean GetCollection(String name) { + if (DEBUG) + System.out.println("GetCollection: name=" + name); + + try { + coll = db.getCollection(name).withDocumentClass(BsonDocument.class); + } catch (Exception e) { + SetErrmsg(e); + return true; + } // end try/catch + + return false; + } // end of GetCollection + + public long GetCollSize() { + return (coll != null) ? coll.count() : 0; + } // end of GetCollSize + + public boolean FindColl(String query, String fields) { + if (DEBUG) + System.out.println("FindColl: query=" + query + " fields=" + fields); + + try { + if (query != null) { + Bson dbq = Document.parse((query != null) ? query : "{}"); + finditer = coll.find(dbq); + } else + finditer = coll.find(); + + if (fields != null) { + Bson dbf = BsonDocument.parse(fields); + finditer = finditer.projection(dbf); + } // endif fields + + cursor = finditer.iterator(); + } catch (Exception e) { + SetErrmsg(e); + return true; + } // end try/catch + + return false; + } // end of FindColl + + @SuppressWarnings("unchecked") + public boolean AggregateColl(String pipeline) { + if (DEBUG) + System.out.println("AggregateColl: pipeline=" + pipeline); + + try { + Document pipe = Document.parse(pipeline); + ArrayList pip = (ArrayList) pipe.get("pipeline"); + + aggiter = coll.aggregate((List) pip); + cursor = aggiter.iterator(); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } // end try/catch + + return false; + } // end of AggregateColl + + public boolean Rewind() { + if (cursor != null) + cursor.close(); + + if (finditer != null) + cursor = finditer.iterator(); + else if (aggiter != null) + cursor = aggiter.iterator(); + + return (cursor == null); + } // end of Rewind + + public int ReadNext() { + if (cursor.hasNext()) { + doc = cursor.next(); + + if (DEBUG) + System.out.println("Class doc = " + doc.getClass()); + + Colnames = doc.keySet(); + return 1; + } else + return 0; + + } // end of ReadNext + + public boolean Fetch(int row) { + if (cursor.hasNext()) { + doc = cursor.next(); + Colnames = doc.keySet(); + return true; + } else + return false; + + } // end of Fetch + + public String GetDoc() { + return (doc != null) ? doc.toJson() : null; + } // end of GetDoc + + public Set GetColumns() { + if (doc != null) + return doc.keySet(); + else + return null; + + } // end of GetColumns + + public String ColumnName(int n) { + int i = 1; + + for (String name : Colnames) + if (i++ == n) + return name; + + return null; + } // end of ColumnName + + public int ColumnType(int n, String name) { + // if (rsmd == null) { + // System.out.println("No result metadata"); + // } else try { + // if (n == 0) + // n = rs.findColumn(name); + + // return rsmd.getColumnType(n); + // } catch (SQLException se) { + // SetErrmsg(se); + // } //end try/catch + + return 666; // Not a type + } // end of ColumnType + + public String ColumnDesc(int n, int[] val) { + // if (rsmd == null) { + // System.out.println("No result metadata"); + // return null; + // } else try { + // val[0] = rsmd.getColumnType(n); + // val[1] = rsmd.getPrecision(n); + // val[2] = rsmd.getScale(n); + // val[3] = rsmd.isNullable(n); + // return rsmd.getColumnLabel(n); + // } catch (SQLException se) { + // SetErrmsg(se); + // } //end try/catch + + return null; + } // end of ColumnDesc + + protected BsonValue GetFieldObject(String path) { + BsonValue o = doc; + BsonDocument dob = null; + BsonArray ary = null; + String[] names = null; + + if (path == null || path.equals("*")) + return doc; + else if (o instanceof BsonDocument) + dob = doc; + else if (o instanceof BsonArray) + ary = (BsonArray) o; + else + return doc; + + try { + names = path.split("\\."); + + for (String name : names) { + if (ary != null) { + o = ary.get(Integer.parseInt(name)); + } else + o = dob.get(name); + + if (o == null) + break; + + if (DEBUG) + System.out.println("Class o = " + o.getClass()); + + if (o instanceof BsonDocument) { + dob = (BsonDocument) o; + ary = null; + } else if (o instanceof BsonArray) { + ary = (BsonArray) o; + } else + break; + + } // endfor name + + } catch (IndexOutOfBoundsException x) { + o = null; + } catch (MongoException me) { + SetErrmsg(me); + o = null; + } // end try/catch + + return o; + } // end of GetFieldObject + + public String GetField(String path) { + BsonValue o = GetFieldObject(path); + + if (o != null) { + if (o.isString()) { + return o.asString().getValue(); + } else if (o.isInt32()) { + return Integer.toString(o.asInt32().getValue()); + } else if (o.isInt64()) { + return Long.toString(o.asInt64().getValue()); + } else if (o.isObjectId()) { + return o.asObjectId().getValue().toString(); + } else if (o.isDateTime()) { + Integer TS = (int) (o.asDateTime().getValue() / 1000); + return TS.toString(); + } else if (o.isDouble()) { + return Double.toString(o.asDouble().getValue()); + } else if (o.isDocument()) { + return o.asDocument().toJson(); + } else if (o.isArray()) { + util = new BsonDocument("arr", o.asArray()); + String s = util.toJson(); + int i1 = s.indexOf('['); + int i2 = s.lastIndexOf(']'); + return s.substring(i1, i2 + 1); + } else if (o.isNull()) { + return null; + } else + return o.toString(); + + } else + return null; + + } // end of GetField + + protected BsonValue ObjToBson(Object val) { + BsonValue bval = null; + + if (val == null) + bval = bsonull; + else if (val.getClass() == String.class) + bval = new BsonString((String) val); + else if (val.getClass() == Integer.class) + bval = new BsonInt32((int) val); + else if (val.getClass() == Double.class) + bval = new BsonDouble((double) val); + else if (val.getClass() == BigInteger.class) + bval = new BsonInt64((long) val); + else if (val.getClass() == Boolean.class) + bval = new BsonBoolean((Boolean) val); + else if (val.getClass() == Date.class) + bval = new BsonDateTime(((Date) val).getTime() * 1000); + else if (val.getClass() == BsonDocument.class) + bval = (BsonDocument) val; + else if (val.getClass() == BsonArray.class) + bval = (BsonArray) val; + + return bval; + } // end of ObjToBson + + public Object MakeDocument() { + return new BsonDocument(); + } // end of MakeDocument + + public boolean DocAdd(Object bdc, String key, Object val) { + try { + ((BsonDocument) bdc).append(key, ObjToBson(val)); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } // end try/catch + + return false; + } // end of DocAdd + + public Object MakeArray() { + return new BsonArray(); + } // end of MakeArray + + public boolean ArrayAdd(Object bar, int n, Object val) { + try { + for (int i = ((BsonArray) bar).size(); i < n; i++) + ((BsonArray) bar).add(bsonull); + + ((BsonArray) bar).add(ObjToBson(val)); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } catch (Exception ex) { + SetErrmsg(ex); + return true; + } // end try/catch + + return false; + } // end of ArrayAdd + + public boolean CollInsert(Object dob) { + try { + coll.insertOne((BsonDocument) dob); + } catch (MongoException me) { + SetErrmsg(me); + return true; + } catch (Exception ex) { + SetErrmsg(ex); + return true; + } // end try/catch + + return false; + } // end of CollInsert + + public long CollUpdate(Object upd) { + long n = -1; + + if (DEBUG) + System.out.println("upd: " + upd.toString()); + + try { + UpdateResult res = coll.updateOne(Filters.eq("_id", doc.get("_id")), (Bson) upd); + + if (DEBUG) + System.out.println("CollUpdate: " + res.toString()); + + n = res.getModifiedCount(); + } catch (MongoException me) { + SetErrmsg(me); + } catch (Exception ex) { + SetErrmsg(ex); + } // end try/catch + + return n; + } // end of CollUpdate + + public long CollDelete(boolean all) { + long n = -1; + + try { + DeleteResult res; + + if (all) + res = coll.deleteMany(new Document()); + else + res = coll.deleteOne(Filters.eq("_id", doc.get("_id"))); + + if (DEBUG) + System.out.println("CollDelete: " + res.toString()); + + n = res.getDeletedCount(); + } catch (MongoException me) { + SetErrmsg(me); + } catch (Exception ex) { + SetErrmsg(ex); + } // end try/catch + + return n; + } // end of CollDelete + +} // end of class MongoInterface diff -Nru mariadb-10.1-10.1.25/storage/connect/mongo.cpp mariadb-10.1-10.1.30/storage/connect/mongo.cpp --- mariadb-10.1-10.1.25/storage/connect/mongo.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mongo.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,454 @@ +/************** mongo C++ Program Source Code File (.CPP) **************/ +/* PROGRAM NAME: mongo Version 1.0 */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* These programs are the MGODEF class execution routines. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include relevant sections of the MariaDB header file. */ +/***********************************************************************/ +#include + +/***********************************************************************/ +/* Include application header files: */ +/* global.h is header containing all global declarations. */ +/* plgdbsem.h is header containing the DB application declarations. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "xtable.h" +#include "tabext.h" +#include "filter.h" +#if defined(CMGO_SUPPORT) +#include "tabcmg.h" +#endif // CMGO_SUPPORT +#if defined(JAVA_SUPPORT) +#include "tabjmg.h" +#endif // JAVA_SUPPORT +#include "resource.h" + +/***********************************************************************/ +/* This should be an option. */ +/***********************************************************************/ +#define MAXCOL 200 /* Default max column nb in result */ +#define TYPE_UNKNOWN 12 /* Must be greater than other types */ + +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s); +bool IsNum(PSZ s); + +/***********************************************************************/ +/* Make selector json representation for Mongo tables. */ +/***********************************************************************/ +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s) +{ + OPVAL opc = fp->GetOpc(); + + s->Append('{'); + + if (opc == OP_AND || opc == OP_OR) { + if (fp->GetArgType(0) != TYPE_FILTER || fp->GetArgType(1) != TYPE_FILTER) + return true; + + s->Append("\"$"); + s->Append(opc == OP_AND ? "and" : "or"); + s->Append("\":["); + + if (MakeSelector(g, (PFIL)fp->Arg(0), s)) + return true; + + s->Append(','); + + if (MakeSelector(g, (PFIL)fp->Arg(1), s)) + return true; + + s->Append(']'); + } else { + if (fp->GetArgType(0) != TYPE_COLBLK) + return true; + + s->Append('"'); + s->Append(((PCOL)fp->Arg(0))->GetJpath(g, false)); + s->Append("\":{\"$"); + + switch (opc) { + case OP_EQ: + s->Append("eq"); + break; + case OP_NE: + s->Append("ne"); + break; + case OP_GT: + s->Append("gt"); + break; + case OP_GE: + s->Append("gte"); + break; + case OP_LT: + s->Append("lt"); + break; + case OP_LE: + s->Append("lte"); + break; + case OP_NULL: + case OP_LIKE: + case OP_EXIST: + default: + return true; + } // endswitch Opc + + s->Append("\":"); + + if (fp->GetArgType(1) == TYPE_COLBLK) { + s->Append("\"$"); + s->Append(((PEXTCOL)fp->Arg(1))->GetJpath(g, false)); + s->Append('"'); + } else { + char buf[501]; + + fp->Arg(1)->Prints(g, buf, 500); + s->Append(buf); + } // endif Type + + s->Append('}'); + } // endif opc + + s->Append('}'); + return false; +} // end of MakeSelector + +/***********************************************************************/ +/* MGOColumns: construct the result blocks containing the description */ +/* of all the columns of a document contained inside MongoDB. */ +/***********************************************************************/ +PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info) +{ + static int buftyp[] = {TYPE_STRING, TYPE_SHORT, TYPE_STRING, TYPE_INT, + TYPE_INT, TYPE_SHORT, TYPE_SHORT, TYPE_STRING}; + static XFLD fldtyp[] = {FLD_NAME, FLD_TYPE, FLD_TYPENAME, FLD_PREC, + FLD_LENGTH, FLD_SCALE, FLD_NULL, FLD_FORMAT}; + unsigned int length[] = {0, 6, 8, 10, 10, 6, 6, 0}; + int ncol = sizeof(buftyp) / sizeof(int); + int i, n = 0; + PCSZ drv; + PBCOL bcp; + MGODISC *cmgd = NULL; + PQRYRES qrp; + PCOLRES crp; + + if (info) { + length[0] = 128; + length[7] = 256; + goto skipit; + } // endif info + + /*********************************************************************/ + /* Open MongoDB. */ + /*********************************************************************/ + drv = GetStringTableOption(g, topt, "Driver", NULL); + + if (drv && toupper(*drv) == 'C') { +#if defined(CMGO_SUPPORT) + cmgd = new(g) CMGDISC(g, (int*)length); +#else + sprintf(g->Message, "Mongo %s Driver not available", "C"); + goto err; +#endif + } else if (drv && toupper(*drv) == 'J') { +#if defined(JAVA_SUPPORT) + cmgd = new(g) JMGDISC(g, (int*)length); +#else + sprintf(g->Message, "Mongo %s Driver not available", "Java"); + goto err; +#endif + } else { // Driver not specified +#if defined(CMGO_SUPPORT) + cmgd = new(g) CMGDISC(g, (int*)length); +#else + cmgd = new(g) JMGDISC(g, (int*)length); +#endif + } // endif drv + + if ((n = cmgd->GetColumns(g, db, uri, topt)) < 0) + goto err; + +skipit: + if (trace) + htrc("MGOColumns: n=%d len=%d\n", n, length[0]); + + /*********************************************************************/ + /* Allocate the structures used to refer to the result set. */ + /*********************************************************************/ + qrp = PlgAllocResult(g, ncol, n, IDS_COLUMNS + 3, + buftyp, fldtyp, length, false, false); + + crp = qrp->Colresp->Next->Next->Next->Next->Next->Next; + crp->Name = "Nullable"; + crp->Next->Name = "Bpath"; + + if (info || !qrp) + return qrp; + + qrp->Nblin = n; + + /*********************************************************************/ + /* Now get the results into blocks. */ + /*********************************************************************/ + for (i = 0, bcp = cmgd->fbcp; bcp; i++, bcp = bcp->Next) { + if (bcp->Type == TYPE_UNKNOWN) // Void column + bcp->Type = TYPE_STRING; + + crp = qrp->Colresp; // Column Name + crp->Kdata->SetValue(bcp->Name, i); + crp = crp->Next; // Data Type + crp->Kdata->SetValue(bcp->Type, i); + crp = crp->Next; // Type Name + crp->Kdata->SetValue(GetTypeName(bcp->Type), i); + crp = crp->Next; // Precision + crp->Kdata->SetValue(bcp->Len, i); + crp = crp->Next; // Length + crp->Kdata->SetValue(bcp->Len, i); + crp = crp->Next; // Scale (precision) + crp->Kdata->SetValue(bcp->Scale, i); + crp = crp->Next; // Nullable + crp->Kdata->SetValue(bcp->Cbn ? 1 : 0, i); + crp = crp->Next; // Field format + + if (crp->Kdata) + crp->Kdata->SetValue(bcp->Fmt, i); + + } // endfor i + + /*********************************************************************/ + /* Return the result pointer. */ + /*********************************************************************/ + return qrp; + +err: + if (cmgd && cmgd->tmgp) + cmgd->tmgp->CloseDB(g); + + return NULL; +} // end of MGOColumns + +/***********************************************************************/ +/* Class used to get the columns of a mongo collection. */ +/***********************************************************************/ +MGODISC::MGODISC(PGLOBAL g, int *lg) { + length = lg; + fbcp = NULL; + pbcp = NULL; + tmgp = NULL; + drv = NULL; + i = ncol = lvl = 0; + all = false; +} // end of MGODISC constructor + +/***********************************************************************/ +/* Class used to get the columns of a mongo collection. */ +/***********************************************************************/ +int MGODISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt) +{ + PCSZ level = GetStringTableOption(g, topt, "Level", NULL); + PMGODEF tdp; + + if (level) { + lvl = atoi(level); + lvl = (lvl > 16) ? 16 : lvl; + } else + lvl = 0; + + all = GetBooleanTableOption(g, topt, "Fullarray", false); + + /*********************************************************************/ + /* Open the MongoDB collection. */ + /*********************************************************************/ + tdp = new(g) MGODEF; + tdp->Uri = (uri && *uri) ? uri : "mongodb://localhost:27017"; + tdp->Driver = drv; + tdp->Tabname = GetStringTableOption(g, topt, "Name", NULL); + tdp->Tabname = GetStringTableOption(g, topt, "Tabname", tdp->Tabname); + tdp->Tabschema = GetStringTableOption(g, topt, "Dbname", db); + tdp->Base = GetIntegerTableOption(g, topt, "Base", 0) ? 1 : 0; + tdp->Colist = GetStringTableOption(g, topt, "Colist", "all"); + tdp->Filter = GetStringTableOption(g, topt, "Filter", NULL); + tdp->Pipe = GetBooleanTableOption(g, topt, "Pipeline", false); + tdp->Version = GetIntegerTableOption(g, topt, "Version", 3); + tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper", + (tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface"); + + if (trace) + htrc("Uri %s coll=%s db=%s colist=%s filter=%s lvl=%d\n", + tdp->Uri, tdp->Tabname, tdp->Tabschema, tdp->Colist, tdp->Filter, lvl); + + tmgp = tdp->GetTable(g, MODE_READ); + tmgp->SetMode(MODE_READ); + + if (tmgp->OpenDB(g)) + return -1; + + bcol.Next = NULL; + bcol.Name = bcol.Fmt = NULL; + bcol.Type = TYPE_UNKNOWN; + bcol.Len = bcol.Scale = 0; + bcol.Found = true; + bcol.Cbn = false; + + if (Init(g)) + return -1; + + /*********************************************************************/ + /* Analyse the BSON tree and define columns. */ + /*********************************************************************/ + for (i = 1; ; i++) { + switch (tmgp->ReadDB(g)) { + case RC_EF: + return ncol; + case RC_FX: + return -1; + default: + GetDoc(); + } // endswitch ReadDB + + if (Find(g)) + return -1; + + // Missing columns can be null + for (bcp = fbcp; bcp; bcp = bcp->Next) { + bcp->Cbn |= !bcp->Found; + bcp->Found = false; + } // endfor bcp + + } // endfor i + + return ncol; +} // end of GetColumns + +/***********************************************************************/ +/* Add a new column in the column list. */ +/***********************************************************************/ +void MGODISC::AddColumn(PGLOBAL g, PCSZ colname, PCSZ fmt, int k) +{ + // Check whether this column was already found + for (bcp = fbcp; bcp; bcp = bcp->Next) + if (!strcmp(colname, bcp->Name)) + break; + + if (bcp) { + if (bcp->Type != bcol.Type) + bcp->Type = TYPE_STRING; + + if (k && *fmt && (!bcp->Fmt || strlen(bcp->Fmt) < strlen(fmt))) { + bcp->Fmt = PlugDup(g, fmt); + length[7] = MY_MAX(length[7], (signed)strlen(fmt)); + } // endif *fmt + + bcp->Len = MY_MAX(bcp->Len, bcol.Len); + bcp->Scale = MY_MAX(bcp->Scale, bcol.Scale); + bcp->Cbn |= bcol.Cbn; + bcp->Found = true; + } else { + // New column + bcp = (PBCOL)PlugSubAlloc(g, NULL, sizeof(BCOL)); + *bcp = bcol; + bcp->Cbn |= (i > 1); + bcp->Name = PlugDup(g, colname); + length[0] = MY_MAX(length[0], (signed)strlen(colname)); + + if (k) { + bcp->Fmt = PlugDup(g, fmt); + length[7] = MY_MAX(length[7], (signed)strlen(fmt)); + } else + bcp->Fmt = NULL; + + if (pbcp) { + bcp->Next = pbcp->Next; + pbcp->Next = bcp; + } else + fbcp = bcp; + + ncol++; + } // endif jcp + + pbcp = bcp; +} // end of AddColumn + +/* -------------------------- Class MGODEF --------------------------- */ + +MGODEF::MGODEF(void) +{ + Driver = NULL; + Uri = NULL; + Colist = NULL; + Filter = NULL; + Level = 0; + Base = 0; + Version = 0; + Pipe = false; +} // end of MGODEF constructor + +/***********************************************************************/ +/* DefineAM: define specific AM block values. */ +/***********************************************************************/ +bool MGODEF::DefineAM(PGLOBAL g, LPCSTR, int poff) +{ + if (EXTDEF::DefineAM(g, "MGO", poff)) + return true; + else if (!Tabschema) + Tabschema = GetStringCatInfo(g, "Dbname", "*"); + + Driver = GetStringCatInfo(g, "Driver", NULL); + Uri = GetStringCatInfo(g, "Connect", "mongodb://localhost:27017"); + Colist = GetStringCatInfo(g, "Colist", NULL); + Filter = GetStringCatInfo(g, "Filter", NULL); + Base = GetIntCatInfo("Base", 0) ? 1 : 0; + Version = GetIntCatInfo("Version", 3); + + if (Version == 2) + Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo2Interface"); + else + Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo3Interface"); + + Pipe = GetBoolCatInfo("Pipeline", false); + return false; +} // end of DefineAM + +/***********************************************************************/ +/* GetTable: makes a new Table Description Block. */ +/***********************************************************************/ +PTDB MGODEF::GetTable(PGLOBAL g, MODE m) +{ + if (Driver && toupper(*Driver) == 'C') { +#if defined(CMGO_SUPPORT) + if (Catfunc == FNC_COL) + return new(g) TDBGOL(this); + else + return new(g) TDBCMG(this); +#else + sprintf(g->Message, "Mongo %s Driver not available", "C"); + return NULL; +#endif + } else if (Driver && toupper(*Driver) == 'J') { +#if defined(JAVA_SUPPORT) + if (Catfunc == FNC_COL) + return new(g) TDBJGL(this); + else + return new(g) TDBJMG(this); +#else + sprintf(g->Message, "Mongo %s Driver not available", "Java"); + return NULL; +#endif + } else { // Driver not specified +#if defined(CMGO_SUPPORT) + if (Catfunc == FNC_COL) + return new(g) TDBGOL(this); + else + return new(g) TDBCMG(this); +#else + if (Catfunc == FNC_COL) + return new(g) TDBJGL(this); + else + return new(g) TDBJMG(this); +#endif + } // endif Driver + +} // end of GetTable diff -Nru mariadb-10.1-10.1.25/storage/connect/mongo.h mariadb-10.1-10.1.30/storage/connect/mongo.h --- mariadb-10.1-10.1.25/storage/connect/mongo.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mongo.h 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,91 @@ +/**************** mongo H Declares Source Code File (.H) ***************/ +/* Name: mongo.h Version 1.0 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the common MongoDB classes declares. */ +/***********************************************************************/ +#ifndef __MONGO_H +#define __MONGO_H + +#include "osutil.h" +#include "block.h" +#include "colblk.h" + +typedef class MGODEF *PMGODEF; + +typedef struct _bncol { + struct _bncol *Next; + char *Name; + char *Fmt; + int Type; + int Len; + int Scale; + bool Cbn; + bool Found; +} BCOL, *PBCOL; + +/***********************************************************************/ +/* Class used to get the columns of a mongo collection. */ +/***********************************************************************/ +class MGODISC : public BLOCK { +public: + // Constructor + MGODISC(PGLOBAL g, int *lg); + + // Methods + virtual bool Init(PGLOBAL g) { return false; } + virtual void GetDoc(void) {} + virtual bool Find(PGLOBAL g) = 0; + + // Functions + int GetColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt); + void AddColumn(PGLOBAL g, PCSZ colname, PCSZ fmt, int k); + + // Members + BCOL bcol; + PBCOL bcp, fbcp, pbcp; + PMGODEF tdp; + PTDB tmgp; + PCSZ drv; + int *length; + int i, ncol, lvl; + bool all; +}; // end of MGODISC + +/***********************************************************************/ +/* MongoDB table. */ +/***********************************************************************/ +class DllExport MGODEF : public EXTDEF { /* Table description */ + friend class TDBCMG; + friend class TDBJMG; + friend class TDBGOL; + friend class TDBJGL; + friend class CMGFAM; + friend class MGODISC; + friend DllExport PQRYRES MGOColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); +public: + // Constructor + MGODEF(void); + + // Implementation + virtual const char *GetType(void) { return "MONGO"; } + + // Methods + virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff); + virtual PTDB GetTable(PGLOBAL g, MODE m); + +protected: + // Members + PCSZ Driver; /* MongoDB Driver (C or JAVA) */ + PCSZ Uri; /* MongoDB connection URI */ + PSZ Wrapname; /* Java wrapper name */ + PCSZ Colist; /* Options list */ + PCSZ Filter; /* Filtering query */ + int Level; /* Used for catalog table */ + int Base; /* The array index base */ + int Version; /* The Java driver version */ + bool Pipe; /* True is Colist is a pipeline */ +}; // end of MGODEF + +#endif // __MONGO_H diff -Nru mariadb-10.1-10.1.25/storage/connect/msgid.h mariadb-10.1-10.1.30/storage/connect/msgid.h --- mariadb-10.1-10.1.25/storage/connect/msgid.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/msgid.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,3 +1,4 @@ +/* Copyright (C) MariaDB Corporation Ab */ #define MSG_ACCESS_VIOLATN 200 #define MSG_ADD_BAD_TYPE 201 #define MSG_ALLOC_ERROR 202 diff -Nru mariadb-10.1-10.1.25/storage/connect/mycat.cc mariadb-10.1-10.1.30/storage/connect/mycat.cc --- mariadb-10.1-10.1.25/storage/connect/mycat.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mycat.cc 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) Olivier Bertrand 2004 - 2017 +/* Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -83,19 +83,20 @@ #define NODBC #include "tabodbc.h" #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) #define NJDBC #include "tabjdbc.h" -#endif // ODBC_SUPPORT -#if defined(PIVOT_SUPPORT) +#endif // JAVA_SUPPORT #include "tabpivot.h" -#endif // PIVOT_SUPPORT #include "tabvir.h" #include "tabjson.h" #include "ha_connect.h" #if defined(XML_SUPPORT) #include "tabxml.h" #endif // XML_SUPPORT +#if defined(JAVA_SUPPORT) +#include "mongo.h" +#endif // JAVA_SUPPORT #if defined(ZIP_SUPPORT) #include "tabzip.h" #endif // ZIP_SUPPORT @@ -108,6 +109,9 @@ extern "C" HINSTANCE s_hModule; // Saved module handle #endif // !__WIN__ +#if defined(JAVA_SUPPORT) +//bool MongoEnabled(void); +#endif // JAVA_SUPPORT PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info); /***********************************************************************/ @@ -130,21 +134,22 @@ : (!stricmp(type, "CSV")) ? TAB_CSV : (!stricmp(type, "FMT")) ? TAB_FMT : (!stricmp(type, "DBF")) ? TAB_DBF -#ifdef XML_SUPPORT +#if defined(XML_SUPPORT) : (!stricmp(type, "XML")) ? TAB_XML #endif : (!stricmp(type, "INI")) ? TAB_INI : (!stricmp(type, "VEC")) ? TAB_VEC -#ifdef ODBC_SUPPORT +#if defined(ODBC_SUPPORT) : (!stricmp(type, "ODBC")) ? TAB_ODBC #endif -#ifdef JDBC_SUPPORT +#if defined(JAVA_SUPPORT) : (!stricmp(type, "JDBC")) ? TAB_JDBC + : (!stricmp(type, "MONGO")) ? TAB_MONGO #endif : (!stricmp(type, "MYSQL")) ? TAB_MYSQL : (!stricmp(type, "MYPRX")) ? TAB_MYSQL : (!stricmp(type, "DIR")) ? TAB_DIR -#ifdef __WIN__ +#if defined(__WIN__) : (!stricmp(type, "MAC")) ? TAB_MAC : (!stricmp(type, "WMI")) ? TAB_WMI #endif @@ -153,12 +158,10 @@ : (!stricmp(type, "OCCUR")) ? TAB_OCCUR : (!stricmp(type, "CATLG")) ? TAB_PRX // Legacy : (!stricmp(type, "PROXY")) ? TAB_PRX -#ifdef PIVOT_SUPPORT : (!stricmp(type, "PIVOT")) ? TAB_PIVOT -#endif : (!stricmp(type, "VIR")) ? TAB_VIR : (!stricmp(type, "JSON")) ? TAB_JSON -#ifdef ZIP_SUPPORT +#if defined(ZIP_SUPPORT) : (!stricmp(type, "ZIP")) ? TAB_ZIP #endif : (!stricmp(type, "OEM")) ? TAB_OEM : TAB_NIY; @@ -307,6 +310,7 @@ case TAB_MYSQL: case TAB_ODBC: case TAB_JDBC: + case TAB_MONGO: xtyp= 2; break; case TAB_VIR: @@ -532,9 +536,9 @@ #if defined(ODBC_SUPPORT) case TAB_ODBC: tdp= new(g) ODBCDEF; break; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) case TAB_JDBC: tdp= new(g) JDBCDEF; break; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #if defined(__WIN__) case TAB_MAC: tdp= new(g) MACDEF; break; case TAB_WMI: tdp= new(g) WMIDEF; break; @@ -545,11 +549,18 @@ case TAB_PRX: tdp= new(g) PRXDEF; break; case TAB_OCCUR: tdp= new(g) OCCURDEF; break; case TAB_MYSQL: tdp= new(g) MYSQLDEF; break; -#if defined(PIVOT_SUPPORT) case TAB_PIVOT: tdp= new(g) PIVOTDEF; break; -#endif // PIVOT_SUPPORT case TAB_VIR: tdp= new(g) VIRDEF; break; case TAB_JSON: tdp= new(g) JSONDEF; break; +#if defined(MONGO_SUPPORT) + case TAB_MONGO: +// if (MongoEnabled()) + tdp = new(g) MGODEF; +// else +// strcpy(g->Message, "MONGO type not enabled"); + + break; +#endif // MONGO_SUPPORT #if defined(ZIP_SUPPORT) case TAB_ZIP: tdp= new(g) ZIPDEF; break; #endif // ZIP_SUPPORT diff -Nru mariadb-10.1-10.1.25/storage/connect/mycat.h mariadb-10.1-10.1.30/storage/connect/mycat.h --- mariadb-10.1-10.1.25/storage/connect/mycat.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mycat.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) Olivier Bertrand 2004 - 2015 +/* Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ /**************** MYCAT H Declares Source Code File (.H) ***************/ /* Name: MYCAT.H Version 2.3 */ -/* */ +/* Author: Olivier Bertrand */ /* This file contains the CONNECT plugin MYCAT class definitions. */ /***********************************************************************/ #ifndef __MYCAT__H @@ -47,6 +47,7 @@ const char *catfunc; const char *srcdef; const char *colist; + const char *filter; const char *oplist; const char *data_charset; ulonglong lrecl; diff -Nru mariadb-10.1-10.1.25/storage/connect/myconn.cpp mariadb-10.1-10.1.30/storage/connect/myconn.cpp --- mariadb-10.1-10.1.25/storage/connect/myconn.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/myconn.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -139,7 +139,7 @@ unsigned int length[] = {0, 4, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0}; PCSZ fmt; char *fld, *colname, *chset, v, buf[128], uns[16], zero[16]; - int i, n, nf, ncol = sizeof(buftyp) / sizeof(int); + int i, n, nf = 0, ncol = sizeof(buftyp) / sizeof(int); int len, type, prec, rc, k = 0; bool b; PQRYRES qrp; @@ -160,7 +160,9 @@ /* Do an evaluation of the result size. */ /********************************************************************/ STRING cmd(g, 64, "SHOW FULL COLUMNS FROM "); - b = cmd.Append((PSZ)table); + b = cmd.Append('`'); + b |= cmd.Append((PSZ)table); + b |= cmd.Append('`'); b |= cmd.Append(" FROM "); b |= cmd.Append((PSZ)(db ? db : PlgGetUser(g)->DBName)); @@ -470,7 +472,7 @@ int pt, const char *csname) { const char *pipe = NULL; - uint cto = 6000, nrt = 12000; + uint cto = 10, nrt = 20; my_bool my_true= 1; m_DB = mysql_init(NULL); @@ -523,7 +525,8 @@ mysql_options(m_DB, MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY, (char*)&my_true); - if (!mysql_real_connect(m_DB, host, user, pwd, db, pt, pipe, CLIENT_MULTI_RESULTS)) { + if (!mysql_real_connect(m_DB, host, user, pwd, db, pt, pipe, + CLIENT_MULTI_RESULTS | CLIENT_REMEMBER_OPTIONS)) { #if defined(_DEBUG) sprintf(g->Message, "mysql_real_connect failed: (%d) %s", mysql_errno(m_DB), mysql_error(m_DB)); diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/disabled.def mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/disabled.def --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/disabled.def 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/disabled.def 2017-12-21 15:48:50.000000000 +0000 @@ -13,3 +13,9 @@ jdbc_new : Variable settings depend on machine configuration jdbc_oracle : Variable settings depend on machine configuration jdbc_postgresql : Variable settings depend on machine configuration +json_mongo_c : Need MongoDB running and its C Driver installed +json_java_2 : Need MongoDB running and its Java Driver installed +json_java_3 : Need MongoDB running and its Java Driver installed +mongo_c : Need MongoDB running and its C Driver installed +mongo_java_2 : Need MongoDB running and its Java Driver installed +mongo_java_3 : Need MongoDB running and its Java Driver installed diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/alter_xml2.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/alter_xml2.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/alter_xml2.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/alter_xml2.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,86 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +# +# Testing changing table type (not in-place) +# +CREATE TABLE t1 (c INT NOT NULL, d CHAR(10) NOT NULL) ENGINE=CONNECT TABLE_TYPE=CSV HEADER=1 QUOTED=1; +Warnings: +Warning 1105 No file name. Table will use t1.csv +INSERT INTO t1 VALUES (1,'One'), (2,'Two'), (3,'Three'); +SELECT * FROM t1; +c d +1 One +2 Two +3 Three +# This would fail if the top node name is not specified. +# This is because the XML top node name defaults to the table name. +# Sure enough the temporary table name begins with '#' and is rejected by XML. +# Therefore the top node name must be specified (along with the row nodes name). +ALTER TABLE t1 TABLE_TYPE=XML TABNAME=t1 OPTION_LIST='xmlsup=libxml2,rownode=row'; +SELECT * FROM t1; +c d +1 One +2 Two +3 Three +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` int(11) NOT NULL, + `d` char(10) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `HEADER`=1 `QUOTED`=1 `TABLE_TYPE`=XML `TABNAME`=t1 `OPTION_LIST`='xmlsup=libxml2,rownode=row' +# Let us see the XML file +CREATE TABLE t2 (line VARCHAR(100) NOT NULL) ENGINE=CONNECT FILE_NAME='t1.xml'; +Warnings: +Warning 1105 No table_type. Will be set to DOS +SELECT * FROM t2; +line + + + + + c + d + + + 1 + One + + + 2 + Two + + + 3 + Three + + +# NOTE: The first (ignored) row is due to the remaining HEADER=1 option. +# Testing field option modification +ALTER TABLE t1 MODIFY d CHAR(10) NOT NULL FIELD_FORMAT='@', HEADER=0; +SELECT * FROM t1; +c d +1 One +2 Two +3 Three +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` int(11) NOT NULL, + `d` char(10) NOT NULL `FIELD_FORMAT`='@' +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `QUOTED`=1 `TABLE_TYPE`=XML `TABNAME`=t1 `OPTION_LIST`='xmlsup=libxml2,rownode=row' `HEADER`=0 +SELECT * FROM t2; +line + + + + + 1 + + + 2 + + + 3 + + +DROP TABLE t1, t2; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/alter_xml.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/alter_xml.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/alter_xml.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/alter_xml.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,3 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml # # Testing changing table type (not in-place) # @@ -16,7 +14,7 @@ # This is because the XML top node name defaults to the table name. # Sure enough the temporary table name begins with '#' and is rejected by XML. # Therefore the top node name must be specified (along with the row nodes name). -ALTER TABLE t1 TABLE_TYPE=XML TABNAME=t1 OPTION_LIST='rownode=row'; +ALTER TABLE t1 TABLE_TYPE=XML TABNAME=t1 OPTION_LIST='xmlsup=domdoc,rownode=row'; SELECT * FROM t1; c d 1 One @@ -27,7 +25,7 @@ t1 CREATE TABLE `t1` ( `c` int(11) NOT NULL, `d` char(10) NOT NULL -) ENGINE=CONNECT DEFAULT CHARSET=latin1 `HEADER`=1 `QUOTED`=1 `TABLE_TYPE`=XML `TABNAME`=t1 `OPTION_LIST`='rownode=row' +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `HEADER`=1 `QUOTED`=1 `TABLE_TYPE`=XML `TABNAME`=t1 `OPTION_LIST`='xmlsup=domdoc,rownode=row' # Let us see the XML file CREATE TABLE t2 (line VARCHAR(100) NOT NULL) ENGINE=CONNECT FILE_NAME='t1.xml'; Warnings: @@ -67,7 +65,7 @@ t1 CREATE TABLE `t1` ( `c` int(11) NOT NULL, `d` char(10) NOT NULL `FIELD_FORMAT`='@' -) ENGINE=CONNECT DEFAULT CHARSET=latin1 `QUOTED`=1 `TABLE_TYPE`=XML `TABNAME`=t1 `OPTION_LIST`='rownode=row' `HEADER`=0 +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `QUOTED`=1 `TABLE_TYPE`=XML `TABNAME`=t1 `OPTION_LIST`='xmlsup=domdoc,rownode=row' `HEADER`=0 SELECT * FROM t2; line diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/infoschema2-9739.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/infoschema2-9739.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/infoschema2-9739.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/infoschema2-9739.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,12 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +create table t1 (i int) engine=Connect table_type=XML option_list='xmlsup=libxml2'; +Warnings: +Warning 1105 No file name. Table will use t1.xml +select * from information_schema.tables where create_options like '%table_type=XML%'; +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT +Warnings: +Warning 1286 Unknown storage engine 'InnoDB' +Warning 1286 Unknown storage engine 'InnoDB' +Warning 1296 Got error 174 'File t1.xml not found' from CONNECT +drop table t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/infoschema-9739.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/infoschema-9739.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/infoschema-9739.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/infoschema-9739.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,6 +1,4 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml -create table t1 (i int) engine=Connect table_type=XML; +create table t1 (i int) engine=Connect table_type=XML option_list='xmlsup=domdoc'; Warnings: Warning 1105 No file name. Table will use t1.xml select * from information_schema.tables where create_options like '%table_type=XML%'; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/jdbc_new.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/jdbc_new.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/jdbc_new.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/jdbc_new.result 2017-12-21 15:48:50.000000000 +0000 @@ -185,7 +185,7 @@ `d` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `e` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 -INSERT INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); +INSERT IGNORE INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); Warnings: Note 1265 Data truncated for column 'a' at row 1 Note 1265 Data truncated for column 'c' at row 1 diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_java_2.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_java_2.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_java_2.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_java_2.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,383 @@ +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; +# +# Test the MONGO table type +# +CREATE TABLE t1 (Document varchar(1024) field_format='*') +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants CONNECTION='mongodb://localhost:27017' LRECL=4096 +OPTION_LIST='Driver=Java,Version=2' DATA_CHARSET=utf8; +SELECT * from t1 limit 3; +Document +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51c"},"address":{"building":"1007","coord":[-73.856077,40.848447],"street":"Morris Park Ave","zipcode":"10462"},"borough":"Bronx","cuisine":"Bakery","grades":[{"date":{"$date":"2014-03-03T00:00:00.000Z"},"grade":"A","score":2},{"date":{"$date":"2013-09-11T00:00:00.000Z"},"grade":"A","score":6},{"date":{"$date":"2013-01-24T00:00:00.000Z"},"grade":"A","score":10},{"date":{"$date":"2011-11-23T00:00:00.000Z"},"grade":"A","score":9},{"date":{"$date":"2011-03-10T00:00:00.000Z"},"grade":"B","score":14}],"name":"Morris Park Bake Shop","restaurant_id":"30075445"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51d"},"address":{"building":"469","coord":[-73.961704,40.662942],"street":"Flatbush Avenue","zipcode":"11225"},"borough":"Brooklyn","cuisine":"Hamburgers","grades":[{"date":{"$date":"2014-12-30T00:00:00.000Z"},"grade":"A","score":8},{"date":{"$date":"2014-07-01T00:00:00.000Z"},"grade":"B","score":23},{"date":{"$date":"2013-04-30T00:00:00.000Z"},"grade":"A","score":12},{"date":{"$date":"2012-05-08T00:00:00.000Z"},"grade":"A","score":12}],"name":"Wendy'S","restaurant_id":"30112340"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51e"},"address":{"building":"351","coord":[-73.98513559999999,40.7676919],"street":"West 57 Street","zipcode":"10019"},"borough":"Manhattan","cuisine":"Irish","grades":[{"date":{"$date":"2014-09-06T00:00:00.000Z"},"grade":"A","score":2},{"date":{"$date":"2013-07-22T00:00:00.000Z"},"grade":"A","score":11},{"date":{"$date":"2012-07-31T00:00:00.000Z"},"grade":"A","score":12},{"date":{"$date":"2011-12-29T00:00:00.000Z"},"grade":"A","score":12}],"name":"Dj Reynolds Pub And Restaurant","restaurant_id":"30191841"} +DROP TABLE t1; +# +# Test catfunc +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants CATFUNC=columns +OPTION_LIST='Level=1,Driver=Java,Version=2' DATA_CHARSET=utf8 CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * from t1; +Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Nullable Jpath +_id 1 CHAR 24 24 0 0 _id +address_building 1 CHAR 10 10 0 0 address.building +address_coord 1 CHAR 256 256 0 1 address.coord +address_street 1 CHAR 38 38 0 0 address.street +address_zipcode 1 CHAR 5 5 0 0 address.zipcode +borough 1 CHAR 13 13 0 0 +cuisine 1 CHAR 64 64 0 0 +grades_date 1 CHAR 256 256 0 1 grades.0.date +grades_grade 1 CHAR 14 14 0 1 grades.0.grade +grades_score 5 BIGINT 2 2 0 1 grades.0.score +name 1 CHAR 98 98 0 0 +restaurant_id 1 CHAR 8 8 0 0 +DROP TABLE t1; +# +# Explicit columns +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(255) NOT NULL, +cuisine VARCHAR(255) NOT NULL, +borough VARCHAR(255) NOT NULL, +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=2'; +SELECT * FROM t1 LIMIT 10; +_id name cuisine borough restaurant_id +58ada47de5a51ddfcd5ed51c Morris Park Bake Shop Bakery Bronx 30075445 +58ada47de5a51ddfcd5ed51d Wendy'S Hamburgers Brooklyn 30112340 +58ada47de5a51ddfcd5ed51e Dj Reynolds Pub And Restaurant Irish Manhattan 30191841 +58ada47de5a51ddfcd5ed51f Riviera Caterer American Brooklyn 40356018 +58ada47de5a51ddfcd5ed520 Tov Kosher Kitchen Jewish/Kosher Queens 40356068 +58ada47de5a51ddfcd5ed521 Brunos On The Boulevard American Queens 40356151 +58ada47de5a51ddfcd5ed522 Kosher Island Jewish/Kosher Staten Island 40356442 +58ada47de5a51ddfcd5ed523 Wilken'S Fine Food Delicatessen Brooklyn 40356483 +58ada47de5a51ddfcd5ed524 Regina Caterers American Brooklyn 40356649 +58ada47de5a51ddfcd5ed525 Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn 40356731 +DROP TABLE t1; +# +# Test discovery +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +OPTION_LIST='Level=1,Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL `FIELD_FORMAT`='_id', + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` varchar(256) DEFAULT NULL `FIELD_FORMAT`='address.coord', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `cuisine` char(64) NOT NULL, + `grades_date` varchar(256) DEFAULT NULL `FIELD_FORMAT`='grades.0.date', + `grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mongodb://localhost:27017' `TABLE_TYPE`='JSON' `TABNAME`='restaurants' `OPTION_LIST`='Level=1,Driver=Java,Version=2' `DATA_CHARSET`='utf8' `LRECL`=4096 +SELECT * FROM t1 LIMIT 5; +_id address_building address_coord address_street address_zipcode borough cuisine grades_date grades_grade grades_score name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 -73.856077 Morris Park Ave 10462 Bronx Bakery 2014-03-03T00:00:00.000Z A 2 Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 -73.961704 Flatbush Avenue 11225 Brooklyn Hamburgers 2014-12-30T00:00:00.000Z A 8 Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 -73.98513559999999 West 57 Street 10019 Manhattan Irish 2014-09-06T00:00:00.000Z A 2 Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 -73.98241999999999 Stillwell Avenue 11224 Brooklyn American 2014-06-10T00:00:00.000Z A 5 Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 -73.8601152 63 Road 11374 Queens Jewish/Kosher 2014-11-24T00:00:00.000Z Z 20 Tov Kosher Kitchen 40356068 +DROP TABLE t1; +# +# Dropping a column +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants DATA_CHARSET=utf8 +COLIST='{"grades":0}' OPTION_LIST='Driver=Java,Version=2,level=0' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1 LIMIT 10; +_id address borough cuisine name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 -73.856077 40.848447 Morris Park Ave 10462 Bronx Bakery Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 -73.961704 40.662942 Flatbush Avenue 11225 Brooklyn Hamburgers Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 -73.98513559999999 40.7676919 West 57 Street 10019 Manhattan Irish Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 -73.98241999999999 40.579505 Stillwell Avenue 11224 Brooklyn American Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 -73.8601152 40.7311739 63 Road 11374 Queens Jewish/Kosher Tov Kosher Kitchen 40356068 +58ada47de5a51ddfcd5ed521 8825 -73.8803827 40.7643124 Astoria Boulevard 11369 Queens American Brunos On The Boulevard 40356151 +58ada47de5a51ddfcd5ed522 2206 -74.1377286 40.6119572 Victory Boulevard 10314 Staten Island Jewish/Kosher Kosher Island 40356442 +58ada47de5a51ddfcd5ed523 7114 -73.9068506 40.6199034 Avenue U 11234 Brooklyn Delicatessen Wilken'S Fine Food 40356483 +58ada47de5a51ddfcd5ed524 6409 -74.00528899999999 40.628886 11 Avenue 11219 Brooklyn American Regina Caterers 40356649 +58ada47de5a51ddfcd5ed525 1839 -73.9482609 40.6408271 Nostrand Avenue 11226 Brooklyn Ice Cream, Gelato, Yogurt, Ices Taste The Tropics Ice Cream 40356731 +DROP TABLE t1; +# +# Specifying Jpath +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(64) NOT NULL, +cuisine CHAR(200) NOT NULL, +borough CHAR(16) NOT NULL, +street VARCHAR(65) FIELD_FORMAT='address.street', +building CHAR(16) FIELD_FORMAT='address.building', +zipcode CHAR(5) FIELD_FORMAT='address.zipcode', +grade CHAR(1) FIELD_FORMAT='grades.0.grade', +score INT(4) NOT NULL FIELD_FORMAT='grades.0.score', +`date` DATE FIELD_FORMAT='grades.0.date', +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='restaurants' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1 LIMIT 1; +_id 58ada47de5a51ddfcd5ed51c +name Morris Park Bake Shop +cuisine Bakery +borough Bronx +street Morris Park Ave +building 1007 +zipcode 10462 +grade A +score 2 +date 1970-01-01 +restaurant_id 30075445 +SELECT name, street, score, date FROM t1 LIMIT 5; +name street score date +Morris Park Bake Shop Morris Park Ave 2 1970-01-01 +Wendy'S Flatbush Avenue 8 1970-01-01 +Dj Reynolds Pub And Restaurant West 57 Street 2 1970-01-01 +Riviera Caterer Stillwell Avenue 5 1970-01-01 +Tov Kosher Kitchen 63 Road 20 1970-01-01 +SELECT name, cuisine, borough FROM t1 WHERE grade = 'A' LIMIT 10; +name cuisine borough +Morris Park Bake Shop Bakery Bronx +Wendy'S Hamburgers Brooklyn +Dj Reynolds Pub And Restaurant Irish Manhattan +Riviera Caterer American Brooklyn +Kosher Island Jewish/Kosher Staten Island +Wilken'S Fine Food Delicatessen Brooklyn +Regina Caterers American Brooklyn +Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn +Wild Asia American Bronx +C & C Catering Service American Brooklyn +SELECT COUNT(*) FROM t1 WHERE grade = 'A'; +COUNT(*) +20687 +SELECT * FROM t1 WHERE cuisine = 'English'; +_id name cuisine borough street building zipcode grade score date restaurant_id +58ada47de5a51ddfcd5ed83d Tea And Sympathy English Manhattan Greenwich Avenue 108 10011 A 8 1970-01-01 40391531 +58ada47de5a51ddfcd5ed85c Tartine English Manhattan West 11 Street 253 10014 A 11 1970-01-01 40392496 +58ada47de5a51ddfcd5ee1f3 The Park Slope Chipshop English Brooklyn 5 Avenue 383 11215 B 17 1970-01-01 40816202 +58ada47de5a51ddfcd5ee7e4 Pound And Pence English Manhattan Liberty Street 55 10005 A 7 1970-01-01 41022701 +58ada47de5a51ddfcd5ee999 Chip Shop English Brooklyn Atlantic Avenue 129 11201 A 9 1970-01-01 41076583 +58ada47ee5a51ddfcd5efe3f The Breslin Bar & Dining Room English Manhattan West 29 Street 16 10001 A 13 1970-01-01 41443706 +58ada47ee5a51ddfcd5efe99 Highlands Restaurant English Manhattan West 10 Street 150 10014 A 12 1970-01-01 41448559 +58ada47ee5a51ddfcd5f0413 The Fat Radish English Manhattan Orchard Street 17 10002 A 12 1970-01-01 41513545 +58ada47ee5a51ddfcd5f0777 Jones Wood Foundry English Manhattan East 76 Street 401 10021 A 12 1970-01-01 41557377 +58ada47ee5a51ddfcd5f0ea2 Whitehall English Manhattan Greenwich Avenue 19 10014 Z 15 1970-01-01 41625263 +58ada47ee5a51ddfcd5f1004 The Churchill Tavern English Manhattan East 28 Street 45 10016 A 13 1970-01-01 41633327 +58ada47ee5a51ddfcd5f13d5 The Monro English Brooklyn 5 Avenue 481 11215 A 7 1970-01-01 41660253 +58ada47ee5a51ddfcd5f1454 The Cock & Bull English Manhattan West 45 Street 23 10036 A 7 1970-01-01 41664704 +58ada47ee5a51ddfcd5f176e Dear Bushwick English Brooklyn Wilson Avenue 41 11237 A 12 1970-01-01 41690534 +58ada47ee5a51ddfcd5f1e91 Snowdonia Pub English Queens 32 Street 34-55 11106 A 12 1970-01-01 50000290 +58ada47ee5a51ddfcd5f2ddc Oscar'S Place English Manhattan Hudson Street 466 10014 A 10 1970-01-01 50011097 +SELECT * FROM t1 WHERE score = building; +_id name cuisine borough street building zipcode grade score date restaurant_id +DROP TABLE t1; +# +# Specifying Filter +# +CREATE TABLE t1 ( +_id CHAR(24) NOT NULL, +name CHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +restaurant_id CHAR(8) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants DATA_CHARSET=utf8 +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT name FROM t1 WHERE borough = 'Queens'; +name +La Baraka Restaurant +Air France Lounge +Tournesol +Winegasm +Cafe Henri +Bistro 33 +Domaine Wine Bar +Cafe Triskell +Cannelle Patisserie +La Vie +Dirty Pierres Bistro +Fresca La Crepe +Bliss 46 Bistro +Bear +Cuisine By Claudette +Paris Baguette +The Baroness Bar +Francis Cafe +Madame Sou Sou +Crepe 'N' Tearia +Aperitif Bayside Llc +DROP TABLE t1; +# +# Testing pipeline +# +CREATE TABLE t1 ( +name VARCHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +date DATETIME NOT NULL, +grade CHAR(1) NOT NULL, +score INT(4) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='restaurants' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$match":{"cuisine":"French"}},{"$unwind":"$grades"},{"$project":{"_id":0,"name":1,"borough":1,"date":"$grades.date","grade":"$grades.grade","score":"$grades.score"}}]}' +OPTION_LIST='Driver=Java,Version=2,Pipeline=1' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1 LIMIT 10; +name borough date grade score +Tout Va Bien Manhattan 1970-01-01 01:33:34 B 15 +Tout Va Bien Manhattan 1970-01-01 01:33:34 A 13 +Tout Va Bien Manhattan 1970-01-01 01:33:33 C 36 +Tout Va Bien Manhattan 1970-01-01 01:33:33 B 22 +Tout Va Bien Manhattan 1970-01-01 01:33:32 C 36 +Tout Va Bien Manhattan 1970-01-01 01:33:32 C 7 +La Grenouille Manhattan 1970-01-01 01:33:34 A 10 +La Grenouille Manhattan 1970-01-01 01:33:33 A 9 +La Grenouille Manhattan 1970-01-01 01:33:32 A 13 +Le Perigord Manhattan 1970-01-01 01:33:34 B 14 +SELECT name, grade, score, date FROM t1 WHERE borough = 'Bronx'; +name grade score date +Bistro Sk A 10 1970-01-01 01:33:34 +Bistro Sk A 12 1970-01-01 01:33:34 +Bistro Sk B 18 1970-01-01 01:33:33 +DROP TABLE t1; +# +# try level 2 discovery +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +COLIST='{"cuisine":0}' CONNECTION='mongodb://localhost:27017' LRECL=4096 +OPTION_LIST='Driver=Java,level=2,version=2'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL `FIELD_FORMAT`='_id', + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` double(18,16) DEFAULT NULL `FIELD_FORMAT`='address.coord.0', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `grades_date` char(24) DEFAULT NULL `FIELD_FORMAT`='grades.0.date', + `grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mongodb://localhost:27017' `TABLE_TYPE`='JSON' `TABNAME`='restaurants' `COLIST`='{"cuisine":0}' `FILTER`='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' `OPTION_LIST`='Driver=Java,level=2,version=2' `LRECL`=4096 +SELECT name, borough, address_street, grades_score AS score FROM t1 WHERE grades_grade = 'B'; +name borough address_street score +Le Gamin Brooklyn Vanderbilt Avenue 24 +Bistro 33 Queens Ditmars Boulevard 15 +Dirty Pierres Bistro Queens Station Square 22 +Santos Anne Brooklyn Union Avenue 26 +Le Paddock Brooklyn Prospect Avenue 17 +La Crepe Et La Vie Brooklyn Foster Avenue 24 +Francis Cafe Queens Ditmars Boulevard 19 +DROP TABLE t1; +# +# try CRUD operations +# +false +CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' +OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096; +DELETE FROM t1; +INSERT INTO t1 VALUES(0,NULL),(1,'One'),(2,'Two'),(3,'Three'); +SELECT * FROM t1; +_id msg +0 NULL +1 One +2 Two +3 Three +UPDATE t1 SET msg = 'Deux' WHERE _id = 2; +DELETE FROM t1 WHERE msg IS NULL; +SELECT * FROM t1; +_id msg +1 One +2 Deux +3 Three +DELETE FROM t1; +DROP TABLE t1; +true +# +# List states whose population is equal or more than 10 millions +# +false +CREATE TABLE t1 ( +_id char(5) NOT NULL, +city char(16) NOT NULL, +loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', +loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', +pop int(11) NOT NULL, +state char(2) NOT NULL) +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities' +OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8'; +# Using SQL for grouping +SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; +state totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +# Using a pipeline for grouping +CREATE TABLE t1 (_id CHAR(2) NOT NULL, totalPop INT(11) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='cities' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$group":{"_id":"$state","totalPop":{"$sum":"$pop"}}},{"$match":{"totalPop":{"$gte":10000000}}},{"$sort":{"totalPop":-1}}]}' +OPTION_LIST='Driver=Java,Version=2,Pipeline=1' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1; +_id totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +true +# +# Test making array +# +CREATE TABLE t1 ( +_id int(4) NOT NULL, +item CHAR(8) NOT NULL, +prices_0 INT(6) FIELD_FORMAT='prices.0', +prices_1 INT(6) FIELD_FORMAT='prices.1', +prices_2 INT(6) FIELD_FORMAT='prices.2', +prices_3 INT(6) FIELD_FORMAT='prices.3', +prices_4 INT(6) FIELD_FORMAT='prices.4') +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096; +INSERT INTO t1 VALUES +(1,'journal',87,45,63,12,78), +(2,'notebook',123,456,789,NULL,NULL), +(3,'paper',5,7,3,8,NULL), +(4,'planner',25,71,NULL,44,27), +(5,'postcard',5,7,3,8,NULL); +SELECT * FROM t1; +_id item prices_0 prices_1 prices_2 prices_3 prices_4 +1 journal 87 45 63 12 78 +2 notebook 123 456 789 NULL NULL +3 paper 5 7 3 8 NULL +4 planner 25 71 NULL 44 27 +5 postcard 5 7 3 8 NULL +DROP TABLE t1; +# +# Test array aggregation +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' +COLIST='{"pipeline":[{"$project":{"_id":0,"item":1,"total":{"$sum":"$prices"},"average":{"$avg":"$prices"}}}]}' +OPTION_LIST='Driver=Java,Version=2,Pipeline=YES' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1; +item total average +journal 285 57.00 +notebook 1368 456.00 +paper 23 5.75 +planner 167 41.75 +postcard 23 5.75 +DROP TABLE t1; +true diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_java_3.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_java_3.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_java_3.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_java_3.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,383 @@ +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; +# +# Test the MONGO table type +# +CREATE TABLE t1 (Document varchar(1024) field_format='*') +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants CONNECTION='mongodb://localhost:27017' LRECL=4096 +OPTION_LIST='Driver=Java,Version=3' DATA_CHARSET=utf8; +SELECT * from t1 limit 3; +Document +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51c"},"address":{"building":"1007","coord":[-73.856077,40.848447],"street":"Morris Park Ave","zipcode":"10462"},"borough":"Bronx","cuisine":"Bakery","grades":[{"date":{"$date":1393804800000},"grade":"A","score":2},{"date":{"$date":1378857600000},"grade":"A","score":6},{"date":{"$date":1358985600000},"grade":"A","score":10},{"date":{"$date":1322006400000},"grade":"A","score":9},{"date":{"$date":1299715200000},"grade":"B","score":14}],"name":"Morris Park Bake Shop","restaurant_id":"30075445"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51d"},"address":{"building":"469","coord":[-73.961704,40.662942],"street":"Flatbush Avenue","zipcode":"11225"},"borough":"Brooklyn","cuisine":"Hamburgers","grades":[{"date":{"$date":1419897600000},"grade":"A","score":8},{"date":{"$date":1404172800000},"grade":"B","score":23},{"date":{"$date":1367280000000},"grade":"A","score":12},{"date":{"$date":1336435200000},"grade":"A","score":12}],"name":"Wendy'S","restaurant_id":"30112340"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51e"},"address":{"building":"351","coord":[-73.98513559999999,40.7676919],"street":"West 57 Street","zipcode":"10019"},"borough":"Manhattan","cuisine":"Irish","grades":[{"date":{"$date":1409961600000},"grade":"A","score":2},{"date":{"$date":1374451200000},"grade":"A","score":11},{"date":{"$date":1343692800000},"grade":"A","score":12},{"date":{"$date":1325116800000},"grade":"A","score":12}],"name":"Dj Reynolds Pub And Restaurant","restaurant_id":"30191841"} +DROP TABLE t1; +# +# Test catfunc +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants CATFUNC=columns +OPTION_LIST='Level=1,Driver=Java,Version=3' DATA_CHARSET=utf8 CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * from t1; +Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Nullable Jpath +_id 1 CHAR 24 24 0 0 _id +address_building 1 CHAR 10 10 0 0 address.building +address_coord 1 CHAR 256 256 0 1 address.coord +address_street 1 CHAR 38 38 0 0 address.street +address_zipcode 1 CHAR 5 5 0 0 address.zipcode +borough 1 CHAR 13 13 0 0 +cuisine 1 CHAR 64 64 0 0 +grades_date 1 CHAR 256 256 0 1 grades.0.date +grades_grade 1 CHAR 14 14 0 1 grades.0.grade +grades_score 5 BIGINT 2 2 0 1 grades.0.score +name 1 CHAR 98 98 0 0 +restaurant_id 1 CHAR 8 8 0 0 +DROP TABLE t1; +# +# Explicit columns +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(255) NOT NULL, +cuisine VARCHAR(255) NOT NULL, +borough VARCHAR(255) NOT NULL, +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=3'; +SELECT * FROM t1 LIMIT 10; +_id name cuisine borough restaurant_id +58ada47de5a51ddfcd5ed51c Morris Park Bake Shop Bakery Bronx 30075445 +58ada47de5a51ddfcd5ed51d Wendy'S Hamburgers Brooklyn 30112340 +58ada47de5a51ddfcd5ed51e Dj Reynolds Pub And Restaurant Irish Manhattan 30191841 +58ada47de5a51ddfcd5ed51f Riviera Caterer American Brooklyn 40356018 +58ada47de5a51ddfcd5ed520 Tov Kosher Kitchen Jewish/Kosher Queens 40356068 +58ada47de5a51ddfcd5ed521 Brunos On The Boulevard American Queens 40356151 +58ada47de5a51ddfcd5ed522 Kosher Island Jewish/Kosher Staten Island 40356442 +58ada47de5a51ddfcd5ed523 Wilken'S Fine Food Delicatessen Brooklyn 40356483 +58ada47de5a51ddfcd5ed524 Regina Caterers American Brooklyn 40356649 +58ada47de5a51ddfcd5ed525 Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn 40356731 +DROP TABLE t1; +# +# Test discovery +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +OPTION_LIST='Level=1,Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL `FIELD_FORMAT`='_id', + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` varchar(256) DEFAULT NULL `FIELD_FORMAT`='address.coord', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `cuisine` char(64) NOT NULL, + `grades_date` varchar(256) DEFAULT NULL `FIELD_FORMAT`='grades.0.date', + `grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mongodb://localhost:27017' `TABLE_TYPE`='JSON' `TABNAME`='restaurants' `OPTION_LIST`='Level=1,Driver=Java,Version=3' `DATA_CHARSET`='utf8' `LRECL`=4096 +SELECT * FROM t1 LIMIT 5; +_id address_building address_coord address_street address_zipcode borough cuisine grades_date grades_grade grades_score name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 -73.856077 Morris Park Ave 10462 Bronx Bakery 1393804800 A 2 Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 -73.961704 Flatbush Avenue 11225 Brooklyn Hamburgers 1419897600 A 8 Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 -73.98513559999999 West 57 Street 10019 Manhattan Irish 1409961600 A 2 Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 -73.98241999999999 Stillwell Avenue 11224 Brooklyn American 1402358400 A 5 Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 -73.8601152 63 Road 11374 Queens Jewish/Kosher 1416787200 Z 20 Tov Kosher Kitchen 40356068 +DROP TABLE t1; +# +# Dropping a column +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants DATA_CHARSET=utf8 +COLIST='{"grades":0}' OPTION_LIST='Driver=Java,Version=3,level=0' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1 LIMIT 10; +_id address borough cuisine name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 -73.856077 40.848447 Morris Park Ave 10462 Bronx Bakery Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 -73.961704 40.662942 Flatbush Avenue 11225 Brooklyn Hamburgers Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 -73.98513559999999 40.7676919 West 57 Street 10019 Manhattan Irish Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 -73.98241999999999 40.579505 Stillwell Avenue 11224 Brooklyn American Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 -73.8601152 40.7311739 63 Road 11374 Queens Jewish/Kosher Tov Kosher Kitchen 40356068 +58ada47de5a51ddfcd5ed521 8825 -73.8803827 40.7643124 Astoria Boulevard 11369 Queens American Brunos On The Boulevard 40356151 +58ada47de5a51ddfcd5ed522 2206 -74.1377286 40.6119572 Victory Boulevard 10314 Staten Island Jewish/Kosher Kosher Island 40356442 +58ada47de5a51ddfcd5ed523 7114 -73.9068506 40.6199034 Avenue U 11234 Brooklyn Delicatessen Wilken'S Fine Food 40356483 +58ada47de5a51ddfcd5ed524 6409 -74.00528899999999 40.628886 11 Avenue 11219 Brooklyn American Regina Caterers 40356649 +58ada47de5a51ddfcd5ed525 1839 -73.9482609 40.6408271 Nostrand Avenue 11226 Brooklyn Ice Cream, Gelato, Yogurt, Ices Taste The Tropics Ice Cream 40356731 +DROP TABLE t1; +# +# Specifying Jpath +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(64) NOT NULL, +cuisine CHAR(200) NOT NULL, +borough CHAR(16) NOT NULL, +street VARCHAR(65) FIELD_FORMAT='address.street', +building CHAR(16) FIELD_FORMAT='address.building', +zipcode CHAR(5) FIELD_FORMAT='address.zipcode', +grade CHAR(1) FIELD_FORMAT='grades.0.grade', +score INT(4) NOT NULL FIELD_FORMAT='grades.0.score', +`date` DATE FIELD_FORMAT='grades.0.date', +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='restaurants' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1 LIMIT 1; +_id 58ada47de5a51ddfcd5ed51c +name Morris Park Bake Shop +cuisine Bakery +borough Bronx +street Morris Park Ave +building 1007 +zipcode 10462 +grade A +score 2 +date 2014-03-03 +restaurant_id 30075445 +SELECT name, street, score, date FROM t1 LIMIT 5; +name street score date +Morris Park Bake Shop Morris Park Ave 2 2014-03-03 +Wendy'S Flatbush Avenue 8 2014-12-30 +Dj Reynolds Pub And Restaurant West 57 Street 2 2014-09-06 +Riviera Caterer Stillwell Avenue 5 2014-06-10 +Tov Kosher Kitchen 63 Road 20 2014-11-24 +SELECT name, cuisine, borough FROM t1 WHERE grade = 'A' LIMIT 10; +name cuisine borough +Morris Park Bake Shop Bakery Bronx +Wendy'S Hamburgers Brooklyn +Dj Reynolds Pub And Restaurant Irish Manhattan +Riviera Caterer American Brooklyn +Kosher Island Jewish/Kosher Staten Island +Wilken'S Fine Food Delicatessen Brooklyn +Regina Caterers American Brooklyn +Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn +Wild Asia American Bronx +C & C Catering Service American Brooklyn +SELECT COUNT(*) FROM t1 WHERE grade = 'A'; +COUNT(*) +20687 +SELECT * FROM t1 WHERE cuisine = 'English'; +_id name cuisine borough street building zipcode grade score date restaurant_id +58ada47de5a51ddfcd5ed83d Tea And Sympathy English Manhattan Greenwich Avenue 108 10011 A 8 2014-10-23 40391531 +58ada47de5a51ddfcd5ed85c Tartine English Manhattan West 11 Street 253 10014 A 11 2014-08-14 40392496 +58ada47de5a51ddfcd5ee1f3 The Park Slope Chipshop English Brooklyn 5 Avenue 383 11215 B 17 2014-09-29 40816202 +58ada47de5a51ddfcd5ee7e4 Pound And Pence English Manhattan Liberty Street 55 10005 A 7 2014-02-11 41022701 +58ada47de5a51ddfcd5ee999 Chip Shop English Brooklyn Atlantic Avenue 129 11201 A 9 2014-10-08 41076583 +58ada47ee5a51ddfcd5efe3f The Breslin Bar & Dining Room English Manhattan West 29 Street 16 10001 A 13 2014-06-09 41443706 +58ada47ee5a51ddfcd5efe99 Highlands Restaurant English Manhattan West 10 Street 150 10014 A 12 2014-10-22 41448559 +58ada47ee5a51ddfcd5f0413 The Fat Radish English Manhattan Orchard Street 17 10002 A 12 2014-07-26 41513545 +58ada47ee5a51ddfcd5f0777 Jones Wood Foundry English Manhattan East 76 Street 401 10021 A 12 2014-12-03 41557377 +58ada47ee5a51ddfcd5f0ea2 Whitehall English Manhattan Greenwich Avenue 19 10014 Z 15 2015-01-16 41625263 +58ada47ee5a51ddfcd5f1004 The Churchill Tavern English Manhattan East 28 Street 45 10016 A 13 2014-08-27 41633327 +58ada47ee5a51ddfcd5f13d5 The Monro English Brooklyn 5 Avenue 481 11215 A 7 2014-06-03 41660253 +58ada47ee5a51ddfcd5f1454 The Cock & Bull English Manhattan West 45 Street 23 10036 A 7 2014-08-07 41664704 +58ada47ee5a51ddfcd5f176e Dear Bushwick English Brooklyn Wilson Avenue 41 11237 A 12 2014-12-27 41690534 +58ada47ee5a51ddfcd5f1e91 Snowdonia Pub English Queens 32 Street 34-55 11106 A 12 2014-10-28 50000290 +58ada47ee5a51ddfcd5f2ddc Oscar'S Place English Manhattan Hudson Street 466 10014 A 10 2014-08-18 50011097 +SELECT * FROM t1 WHERE score = building; +_id name cuisine borough street building zipcode grade score date restaurant_id +DROP TABLE t1; +# +# Specifying Filter +# +CREATE TABLE t1 ( +_id CHAR(24) NOT NULL, +name CHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +restaurant_id CHAR(8) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants DATA_CHARSET=utf8 +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT name FROM t1 WHERE borough = 'Queens'; +name +La Baraka Restaurant +Air France Lounge +Tournesol +Winegasm +Cafe Henri +Bistro 33 +Domaine Wine Bar +Cafe Triskell +Cannelle Patisserie +La Vie +Dirty Pierres Bistro +Fresca La Crepe +Bliss 46 Bistro +Bear +Cuisine By Claudette +Paris Baguette +The Baroness Bar +Francis Cafe +Madame Sou Sou +Crepe 'N' Tearia +Aperitif Bayside Llc +DROP TABLE t1; +# +# Testing pipeline +# +CREATE TABLE t1 ( +name VARCHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +date DATETIME NOT NULL, +grade CHAR(1) NOT NULL, +score INT(4) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='restaurants' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$match":{"cuisine":"French"}},{"$unwind":"$grades"},{"$project":{"_id":0,"name":1,"borough":1,"date":"$grades.date","grade":"$grades.grade","score":"$grades.score"}}]}' +OPTION_LIST='Driver=Java,Version=3,Pipeline=1' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1 LIMIT 10; +name borough date grade score +Tout Va Bien Manhattan 2014-11-10 01:00:00 B 15 +Tout Va Bien Manhattan 2014-04-03 02:00:00 A 13 +Tout Va Bien Manhattan 2013-07-17 02:00:00 C 36 +Tout Va Bien Manhattan 2013-02-06 01:00:00 B 22 +Tout Va Bien Manhattan 2012-07-16 02:00:00 C 36 +Tout Va Bien Manhattan 2012-03-08 01:00:00 C 7 +La Grenouille Manhattan 2014-04-09 02:00:00 A 10 +La Grenouille Manhattan 2013-03-05 01:00:00 A 9 +La Grenouille Manhattan 2012-02-02 01:00:00 A 13 +Le Perigord Manhattan 2014-07-14 02:00:00 B 14 +SELECT name, grade, score, date FROM t1 WHERE borough = 'Bronx'; +name grade score date +Bistro Sk A 10 2014-11-21 01:00:00 +Bistro Sk A 12 2014-02-19 01:00:00 +Bistro Sk B 18 2013-06-12 02:00:00 +DROP TABLE t1; +# +# try level 2 discovery +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +COLIST='{"cuisine":0}' CONNECTION='mongodb://localhost:27017' LRECL=4096 +OPTION_LIST='Driver=Java,level=2,version=3'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL `FIELD_FORMAT`='_id', + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` double(18,16) DEFAULT NULL `FIELD_FORMAT`='address.coord.0', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `grades_date` bigint(13) DEFAULT NULL `FIELD_FORMAT`='grades.0.date', + `grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mongodb://localhost:27017' `TABLE_TYPE`='JSON' `TABNAME`='restaurants' `COLIST`='{"cuisine":0}' `FILTER`='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' `OPTION_LIST`='Driver=Java,level=2,version=3' `LRECL`=4096 +SELECT name, borough, address_street, grades_score AS score FROM t1 WHERE grades_grade = 'B'; +name borough address_street score +Le Gamin Brooklyn Vanderbilt Avenue 24 +Bistro 33 Queens Ditmars Boulevard 15 +Dirty Pierres Bistro Queens Station Square 22 +Santos Anne Brooklyn Union Avenue 26 +Le Paddock Brooklyn Prospect Avenue 17 +La Crepe Et La Vie Brooklyn Foster Avenue 24 +Francis Cafe Queens Ditmars Boulevard 19 +DROP TABLE t1; +# +# try CRUD operations +# +false +CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' +OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096; +DELETE FROM t1; +INSERT INTO t1 VALUES(0,NULL),(1,'One'),(2,'Two'),(3,'Three'); +SELECT * FROM t1; +_id msg +0 NULL +1 One +2 Two +3 Three +UPDATE t1 SET msg = 'Deux' WHERE _id = 2; +DELETE FROM t1 WHERE msg IS NULL; +SELECT * FROM t1; +_id msg +1 One +2 Deux +3 Three +DELETE FROM t1; +DROP TABLE t1; +true +# +# List states whose population is equal or more than 10 millions +# +false +CREATE TABLE t1 ( +_id char(5) NOT NULL, +city char(16) NOT NULL, +loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', +loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', +pop int(11) NOT NULL, +state char(2) NOT NULL) +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities' +OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8'; +# Using SQL for grouping +SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; +state totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +# Using a pipeline for grouping +CREATE TABLE t1 (_id CHAR(2) NOT NULL, totalPop INT(11) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='cities' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$group":{"_id":"$state","totalPop":{"$sum":"$pop"}}},{"$match":{"totalPop":{"$gte":10000000}}},{"$sort":{"totalPop":-1}}]}' +OPTION_LIST='Driver=Java,Version=3,Pipeline=1' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1; +_id totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +true +# +# Test making array +# +CREATE TABLE t1 ( +_id int(4) NOT NULL, +item CHAR(8) NOT NULL, +prices_0 INT(6) FIELD_FORMAT='prices.0', +prices_1 INT(6) FIELD_FORMAT='prices.1', +prices_2 INT(6) FIELD_FORMAT='prices.2', +prices_3 INT(6) FIELD_FORMAT='prices.3', +prices_4 INT(6) FIELD_FORMAT='prices.4') +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096; +INSERT INTO t1 VALUES +(1,'journal',87,45,63,12,78), +(2,'notebook',123,456,789,NULL,NULL), +(3,'paper',5,7,3,8,NULL), +(4,'planner',25,71,NULL,44,27), +(5,'postcard',5,7,3,8,NULL); +SELECT * FROM t1; +_id item prices_0 prices_1 prices_2 prices_3 prices_4 +1 journal 87 45 63 12 78 +2 notebook 123 456 789 NULL NULL +3 paper 5 7 3 8 NULL +4 planner 25 71 NULL 44 27 +5 postcard 5 7 3 8 NULL +DROP TABLE t1; +# +# Test array aggregation +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' +COLIST='{"pipeline":[{"$project":{"_id":0,"item":1,"total":{"$sum":"$prices"},"average":{"$avg":"$prices"}}}]}' +OPTION_LIST='Driver=Java,Version=3,Pipeline=YES' CONNECTION='mongodb://localhost:27017' LRECL=4096; +SELECT * FROM t1; +item total average +journal 285 57.00 +notebook 1368 456.00 +paper 23 5.75 +planner 167 41.75 +postcard 23 5.75 +DROP TABLE t1; +true diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_mongo_c.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_mongo_c.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_mongo_c.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_mongo_c.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,382 @@ +# +# Test the MONGO table type +# +CREATE TABLE t1 (Document varchar(1024) field_format='*') +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants CONNECTION='mongodb://localhost:27017' LRECL=1024 +OPTION_LIST='Driver=C,Version=0' DATA_CHARSET=utf8; +SELECT * from t1 limit 3; +Document +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51c"},"address":{"building":"1007","coord":[-73.856076999999999089,40.848447000000000173],"street":"Morris Park Ave","zipcode":"10462"},"borough":"Bronx","cuisine":"Bakery","grades":[{"date":{"$date":1393804800000},"grade":"A","score":2},{"date":{"$date":1378857600000},"grade":"A","score":6},{"date":{"$date":1358985600000},"grade":"A","score":10},{"date":{"$date":1322006400000},"grade":"A","score":9},{"date":{"$date":1299715200000},"grade":"B","score":14}],"name":"Morris Park Bake Shop","restaurant_id":"30075445"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51d"},"address":{"building":"469","coord":[-73.96170399999999745,40.66294200000000103],"street":"Flatbush Avenue","zipcode":"11225"},"borough":"Brooklyn","cuisine":"Hamburgers","grades":[{"date":{"$date":1419897600000},"grade":"A","score":8},{"date":{"$date":1404172800000},"grade":"B","score":23},{"date":{"$date":1367280000000},"grade":"A","score":12},{"date":{"$date":1336435200000},"grade":"A","score":12}],"name":"Wendy'S","restaurant_id":"30112340"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51e"},"address":{"building":"351","coord":[-73.985135599999992451,40.767691900000002647],"street":"West 57 Street","zipcode":"10019"},"borough":"Manhattan","cuisine":"Irish","grades":[{"date":{"$date":1409961600000},"grade":"A","score":2},{"date":{"$date":1374451200000},"grade":"A","score":11},{"date":{"$date":1343692800000},"grade":"A","score":12},{"date":{"$date":1325116800000},"grade":"A","score":12}],"name":"Dj Reynolds Pub And Restaurant","restaurant_id":"30191841"} +DROP TABLE t1; +# +# Test catfunc +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants CATFUNC=columns +OPTION_LIST='Level=1,Driver=C,Version=0' DATA_CHARSET=utf8 CONNECTION='mongodb://localhost:27017' LRECL=1024; +SELECT * from t1; +Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Nullable Jpath +_id 1 CHAR 24 24 0 0 _id +address_building 1 CHAR 10 10 0 0 address.building +address_coord 1 CHAR 256 256 0 1 address.coord +address_street 1 CHAR 38 38 0 0 address.street +address_zipcode 1 CHAR 5 5 0 0 address.zipcode +borough 1 CHAR 13 13 0 0 +cuisine 1 CHAR 64 64 0 0 +grades_date 1 CHAR 256 256 0 1 grades.0.date +grades_grade 1 CHAR 14 14 0 1 grades.0.grade +grades_score 5 BIGINT 2 2 0 1 grades.0.score +name 1 CHAR 98 98 0 0 +restaurant_id 1 CHAR 8 8 0 0 +DROP TABLE t1; +# +# Explicit columns +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(255) NOT NULL, +cuisine VARCHAR(255) NOT NULL, +borough VARCHAR(255) NOT NULL, +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8 +OPTION_LIST='Driver=C,Version=0'; +SELECT * FROM t1 LIMIT 10; +_id name cuisine borough restaurant_id +58ada47de5a51ddfcd5ed51c Morris Park Bake Shop Bakery Bronx 30075445 +58ada47de5a51ddfcd5ed51d Wendy'S Hamburgers Brooklyn 30112340 +58ada47de5a51ddfcd5ed51e Dj Reynolds Pub And Restaurant Irish Manhattan 30191841 +58ada47de5a51ddfcd5ed51f Riviera Caterer American Brooklyn 40356018 +58ada47de5a51ddfcd5ed520 Tov Kosher Kitchen Jewish/Kosher Queens 40356068 +58ada47de5a51ddfcd5ed521 Brunos On The Boulevard American Queens 40356151 +58ada47de5a51ddfcd5ed522 Kosher Island Jewish/Kosher Staten Island 40356442 +58ada47de5a51ddfcd5ed523 Wilken'S Fine Food Delicatessen Brooklyn 40356483 +58ada47de5a51ddfcd5ed524 Regina Caterers American Brooklyn 40356649 +58ada47de5a51ddfcd5ed525 Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn 40356731 +DROP TABLE t1; +# +# Test discovery +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +OPTION_LIST='Level=1,Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL `FIELD_FORMAT`='_id', + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` varchar(256) DEFAULT NULL `FIELD_FORMAT`='address.coord', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `cuisine` char(64) NOT NULL, + `grades_date` varchar(256) DEFAULT NULL `FIELD_FORMAT`='grades.0.date', + `grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mongodb://localhost:27017' `TABLE_TYPE`='JSON' `TABNAME`='restaurants' `OPTION_LIST`='Level=1,Driver=C,Version=0' `DATA_CHARSET`='utf8' `LRECL`=1024 +SELECT * FROM t1 LIMIT 5; +_id address_building address_coord address_street address_zipcode borough cuisine grades_date grades_grade grades_score name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 -73.856076999999999089 Morris Park Ave 10462 Bronx Bakery 1393804800 A 2 Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 -73.96170399999999745 Flatbush Avenue 11225 Brooklyn Hamburgers 1419897600 A 8 Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 -73.985135599999992451 West 57 Street 10019 Manhattan Irish 1409961600 A 2 Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 -73.982419999999990523 Stillwell Avenue 11224 Brooklyn American 1402358400 A 5 Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 -73.860115199999995639 63 Road 11374 Queens Jewish/Kosher 1416787200 Z 20 Tov Kosher Kitchen 40356068 +DROP TABLE t1; +# +# Dropping a column +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants DATA_CHARSET=utf8 +COLIST='{"projection":{"grades":0}}' OPTION_LIST='Driver=C,Version=0,level=0' CONNECTION='mongodb://localhost:27017' LRECL=1024; +SELECT * FROM t1 LIMIT 10; +_id address borough cuisine name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 -73.856076999999999089 40.848447000000000173 Morris Park Ave 10462 Bronx Bakery Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 -73.96170399999999745 40.66294200000000103 Flatbush Avenue 11225 Brooklyn Hamburgers Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 -73.985135599999992451 40.767691900000002647 West 57 Street 10019 Manhattan Irish Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 -73.982419999999990523 40.579504999999997494 Stillwell Avenue 11224 Brooklyn American Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 -73.860115199999995639 40.731173900000001709 63 Road 11374 Queens Jewish/Kosher Tov Kosher Kitchen 40356068 +58ada47de5a51ddfcd5ed521 8825 -73.880382699999998408 40.764312400000001446 Astoria Boulevard 11369 Queens American Brunos On The Boulevard 40356151 +58ada47de5a51ddfcd5ed522 2206 -74.137728600000002643 40.611957199999999091 Victory Boulevard 10314 Staten Island Jewish/Kosher Kosher Island 40356442 +58ada47de5a51ddfcd5ed523 7114 -73.906850599999998508 40.619903399999998328 Avenue U 11234 Brooklyn Delicatessen Wilken'S Fine Food 40356483 +58ada47de5a51ddfcd5ed524 6409 -74.005288999999990551 40.628886000000001388 11 Avenue 11219 Brooklyn American Regina Caterers 40356649 +58ada47de5a51ddfcd5ed525 1839 -73.948260899999993967 40.640827100000002758 Nostrand Avenue 11226 Brooklyn Ice Cream, Gelato, Yogurt, Ices Taste The Tropics Ice Cream 40356731 +DROP TABLE t1; +# +# Specifying Jpath +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(64) NOT NULL, +cuisine CHAR(200) NOT NULL, +borough CHAR(16) NOT NULL, +street VARCHAR(65) FIELD_FORMAT='address.street', +building CHAR(16) FIELD_FORMAT='address.building', +zipcode CHAR(5) FIELD_FORMAT='address.zipcode', +grade CHAR(1) FIELD_FORMAT='grades.0.grade', +score INT(4) NOT NULL FIELD_FORMAT='grades.0.score', +`date` DATE FIELD_FORMAT='grades.0.date', +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='restaurants' DATA_CHARSET=utf8 +OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024; +SELECT * FROM t1 LIMIT 1; +_id 58ada47de5a51ddfcd5ed51c +name Morris Park Bake Shop +cuisine Bakery +borough Bronx +street Morris Park Ave +building 1007 +zipcode 10462 +grade A +score 2 +date 2014-03-03 +restaurant_id 30075445 +SELECT name, street, score, date FROM t1 LIMIT 5; +name street score date +Morris Park Bake Shop Morris Park Ave 2 2014-03-03 +Wendy'S Flatbush Avenue 8 2014-12-30 +Dj Reynolds Pub And Restaurant West 57 Street 2 2014-09-06 +Riviera Caterer Stillwell Avenue 5 2014-06-10 +Tov Kosher Kitchen 63 Road 20 2014-11-24 +SELECT name, cuisine, borough FROM t1 WHERE grade = 'A' LIMIT 10; +name cuisine borough +Morris Park Bake Shop Bakery Bronx +Wendy'S Hamburgers Brooklyn +Dj Reynolds Pub And Restaurant Irish Manhattan +Riviera Caterer American Brooklyn +Kosher Island Jewish/Kosher Staten Island +Wilken'S Fine Food Delicatessen Brooklyn +Regina Caterers American Brooklyn +Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn +Wild Asia American Bronx +C & C Catering Service American Brooklyn +SELECT COUNT(*) FROM t1 WHERE grade = 'A'; +COUNT(*) +20687 +SELECT * FROM t1 WHERE cuisine = 'English'; +_id name cuisine borough street building zipcode grade score date restaurant_id +58ada47de5a51ddfcd5ed83d Tea And Sympathy English Manhattan Greenwich Avenue 108 10011 A 8 2014-10-23 40391531 +58ada47de5a51ddfcd5ed85c Tartine English Manhattan West 11 Street 253 10014 A 11 2014-08-14 40392496 +58ada47de5a51ddfcd5ee1f3 The Park Slope Chipshop English Brooklyn 5 Avenue 383 11215 B 17 2014-09-29 40816202 +58ada47de5a51ddfcd5ee7e4 Pound And Pence English Manhattan Liberty Street 55 10005 A 7 2014-02-11 41022701 +58ada47de5a51ddfcd5ee999 Chip Shop English Brooklyn Atlantic Avenue 129 11201 A 9 2014-10-08 41076583 +58ada47ee5a51ddfcd5efe3f The Breslin Bar & Dining Room English Manhattan West 29 Street 16 10001 A 13 2014-06-09 41443706 +58ada47ee5a51ddfcd5efe99 Highlands Restaurant English Manhattan West 10 Street 150 10014 A 12 2014-10-22 41448559 +58ada47ee5a51ddfcd5f0413 The Fat Radish English Manhattan Orchard Street 17 10002 A 12 2014-07-26 41513545 +58ada47ee5a51ddfcd5f0777 Jones Wood Foundry English Manhattan East 76 Street 401 10021 A 12 2014-12-03 41557377 +58ada47ee5a51ddfcd5f0ea2 Whitehall English Manhattan Greenwich Avenue 19 10014 Z 15 2015-01-16 41625263 +58ada47ee5a51ddfcd5f1004 The Churchill Tavern English Manhattan East 28 Street 45 10016 A 13 2014-08-27 41633327 +58ada47ee5a51ddfcd5f13d5 The Monro English Brooklyn 5 Avenue 481 11215 A 7 2014-06-03 41660253 +58ada47ee5a51ddfcd5f1454 The Cock & Bull English Manhattan West 45 Street 23 10036 A 7 2014-08-07 41664704 +58ada47ee5a51ddfcd5f176e Dear Bushwick English Brooklyn Wilson Avenue 41 11237 A 12 2014-12-27 41690534 +58ada47ee5a51ddfcd5f1e91 Snowdonia Pub English Queens 32 Street 34-55 11106 A 12 2014-10-28 50000290 +58ada47ee5a51ddfcd5f2ddc Oscar'S Place English Manhattan Hudson Street 466 10014 A 10 2014-08-18 50011097 +SELECT * FROM t1 WHERE score = building; +_id name cuisine borough street building zipcode grade score date restaurant_id +DROP TABLE t1; +# +# Specifying Filter +# +CREATE TABLE t1 ( +_id CHAR(24) NOT NULL, +name CHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +restaurant_id CHAR(8) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants DATA_CHARSET=utf8 +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024; +SELECT name FROM t1 WHERE borough = 'Queens'; +name +La Baraka Restaurant +Air France Lounge +Tournesol +Winegasm +Cafe Henri +Bistro 33 +Domaine Wine Bar +Cafe Triskell +Cannelle Patisserie +La Vie +Dirty Pierres Bistro +Fresca La Crepe +Bliss 46 Bistro +Bear +Cuisine By Claudette +Paris Baguette +The Baroness Bar +Francis Cafe +Madame Sou Sou +Crepe 'N' Tearia +Aperitif Bayside Llc +DROP TABLE t1; +# +# Testing pipeline +# +CREATE TABLE t1 ( +name VARCHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +date DATETIME NOT NULL, +grade CHAR(1) NOT NULL, +score INT(4) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='restaurants' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$match":{"cuisine":"French"}},{"$unwind":"$grades"},{"$project":{"_id":0,"name":1,"borough":1,"date":"$grades.date","grade":"$grades.grade","score":"$grades.score"}}]}' +OPTION_LIST='Driver=C,Version=0,Pipeline=1' CONNECTION='mongodb://localhost:27017' LRECL=1024; +SELECT * FROM t1 LIMIT 10; +name borough date grade score +Tout Va Bien Manhattan 2014-11-10 01:00:00 B 15 +Tout Va Bien Manhattan 2014-04-03 02:00:00 A 13 +Tout Va Bien Manhattan 2013-07-17 02:00:00 C 36 +Tout Va Bien Manhattan 2013-02-06 01:00:00 B 22 +Tout Va Bien Manhattan 2012-07-16 02:00:00 C 36 +Tout Va Bien Manhattan 2012-03-08 01:00:00 C 7 +La Grenouille Manhattan 2014-04-09 02:00:00 A 10 +La Grenouille Manhattan 2013-03-05 01:00:00 A 9 +La Grenouille Manhattan 2012-02-02 01:00:00 A 13 +Le Perigord Manhattan 2014-07-14 02:00:00 B 14 +SELECT name, grade, score, date FROM t1 WHERE borough = 'Bronx'; +name grade score date +Bistro Sk A 10 2014-11-21 01:00:00 +Bistro Sk A 12 2014-02-19 01:00:00 +Bistro Sk B 18 2013-06-12 02:00:00 +DROP TABLE t1; +# +# try level 2 discovery +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME=restaurants +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +COLIST='{"projection":{"cuisine":0}}' CONNECTION='mongodb://localhost:27017' LRECL=1024 +OPTION_LIST='Driver=C,level=2,version=0'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL `FIELD_FORMAT`='_id', + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` double(23,20) DEFAULT NULL `FIELD_FORMAT`='address.coord.0', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `grades_date` bigint(13) DEFAULT NULL `FIELD_FORMAT`='grades.0.date', + `grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mongodb://localhost:27017' `TABLE_TYPE`='JSON' `TABNAME`='restaurants' `COLIST`='{"projection":{"cuisine":0}}' `FILTER`='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' `OPTION_LIST`='Driver=C,level=2,version=0' `LRECL`=1024 +SELECT name, borough, address_street, grades_score AS score FROM t1 WHERE grades_grade = 'B'; +name borough address_street score +Le Gamin Brooklyn Vanderbilt Avenue 24 +Bistro 33 Queens Ditmars Boulevard 15 +Dirty Pierres Bistro Queens Station Square 22 +Santos Anne Brooklyn Union Avenue 26 +Le Paddock Brooklyn Prospect Avenue 17 +La Crepe Et La Vie Brooklyn Foster Avenue 24 +Francis Cafe Queens Ditmars Boulevard 19 +DROP TABLE t1; +# +# try CRUD operations +# +false +CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' +OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024; +DELETE FROM t1; +INSERT INTO t1 VALUES(0,NULL),(1,'One'),(2,'Two'),(3,'Three'); +SELECT * FROM t1; +_id msg +0 NULL +1 One +2 Two +3 Three +UPDATE t1 SET msg = 'Deux' WHERE _id = 2; +DELETE FROM t1 WHERE msg IS NULL; +SELECT * FROM t1; +_id msg +1 One +2 Deux +3 Three +DELETE FROM t1; +DROP TABLE t1; +true +# +# List states whose population is equal or more than 10 millions +# +false +CREATE TABLE t1 ( +_id char(5) NOT NULL, +city char(16) NOT NULL, +loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', +loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', +pop int(11) NOT NULL, +state char(2) NOT NULL) +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities' +OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET='utf8'; +# Using SQL for grouping +SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; +state totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +# Using a pipeline for grouping +CREATE TABLE t1 (_id CHAR(2) NOT NULL, totalPop INT(11) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='cities' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$group":{"_id":"$state","totalPop":{"$sum":"$pop"}}},{"$match":{"totalPop":{"$gte":10000000}}},{"$sort":{"totalPop":-1}}]}' +OPTION_LIST='Driver=C,Version=0,Pipeline=1' CONNECTION='mongodb://localhost:27017' LRECL=1024; +SELECT * FROM t1; +_id totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +true +# +# Test making array +# +CREATE TABLE t1 ( +_id int(4) NOT NULL, +item CHAR(8) NOT NULL, +prices_0 INT(6) FIELD_FORMAT='prices.0', +prices_1 INT(6) FIELD_FORMAT='prices.1', +prices_2 INT(6) FIELD_FORMAT='prices.2', +prices_3 INT(6) FIELD_FORMAT='prices.3', +prices_4 INT(6) FIELD_FORMAT='prices.4') +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' DATA_CHARSET=utf8 +OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024; +INSERT INTO t1 VALUES +(1,'journal',87,45,63,12,78), +(2,'notebook',123,456,789,NULL,NULL), +(3,'paper',5,7,3,8,NULL), +(4,'planner',25,71,NULL,44,27), +(5,'postcard',5,7,3,8,NULL); +SELECT * FROM t1; +_id item prices_0 prices_1 prices_2 prices_3 prices_4 +1 journal 87 45 63 12 78 +2 notebook 123 456 789 NULL NULL +3 paper 5 7 3 8 NULL +4 planner 25 71 44 27 NULL +5 postcard 5 7 3 8 NULL +DROP TABLE t1; +# +# Test array aggregation +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=JSON TABNAME='testcoll' +COLIST='{"pipeline":[{"$project":{"_id":0,"item":1,"total":{"$sum":"$prices"},"average":{"$avg":"$prices"}}}]}' +OPTION_LIST='Driver=C,Version=0,Pipeline=YES' CONNECTION='mongodb://localhost:27017' LRECL=1024; +SELECT * FROM t1; +item total average +journal 285 57.00 +notebook 1368 456.00 +paper 23 5.75 +planner 167 41.75 +postcard 23 5.75 +DROP TABLE t1; +true diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json.result 2017-12-21 15:48:50.000000000 +0000 @@ -24,15 +24,15 @@ CREATE TABLE t1 ( ISBN CHAR(15), -Language CHAR(2) FIELD_FORMAT='LANG', -Subject CHAR(32) FIELD_FORMAT='SUBJECT', -Authors INT(2) FIELD_FORMAT='AUTHOR:[#]', -Title CHAR(32) FIELD_FORMAT='TITLE', -Translation CHAR(32) FIELD_FORMAT='TRANSLATION', -Translator CHAR(80) FIELD_FORMAT='TRANSLATOR', -Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', -Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', -Year int(4) FIELD_FORMAT='DATEPUB' +Language CHAR(2) FIELD_FORMAT='$.LANG', +Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', +Authors INT(2) FIELD_FORMAT='$.AUTHOR[#]', +Title CHAR(32) FIELD_FORMAT='$.TITLE', +Translation CHAR(32) FIELD_FORMAT='$.TRANSLATION', +Translator CHAR(80) FIELD_FORMAT='$.TRANSLATOR', +Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', +Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', +Year int(4) FIELD_FORMAT='$.DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; SELECT * FROM t1; @@ -46,16 +46,16 @@ CREATE TABLE t1 ( ISBN CHAR(15), -Language CHAR(2) FIELD_FORMAT='LANG', -Subject CHAR(32) FIELD_FORMAT='SUBJECT', -AuthorFN CHAR(128) FIELD_FORMAT='AUTHOR:[" and "]:FIRSTNAME', -AuthorLN CHAR(128) FIELD_FORMAT='AUTHOR:[" and "]:LASTNAME', -Title CHAR(32) FIELD_FORMAT='TITLE', -Translation CHAR(32) FIELD_FORMAT='TRANSLATION', -Translator CHAR(80) FIELD_FORMAT='TRANSLATOR', -Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', -Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', -Year int(4) FIELD_FORMAT='DATEPUB' +Language CHAR(2) FIELD_FORMAT='$.LANG', +Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', +AuthorFN CHAR(128) FIELD_FORMAT='$.AUTHOR[" and "].FIRSTNAME', +AuthorLN CHAR(128) FIELD_FORMAT='$.AUTHOR[" and "].LASTNAME', +Title CHAR(32) FIELD_FORMAT='$.TITLE', +Translation CHAR(32) FIELD_FORMAT='$.TRANSLATION', +Translator CHAR(80) FIELD_FORMAT='$.TRANSLATOR', +Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', +Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', +Year int(4) FIELD_FORMAT='$.DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; SELECT * FROM t1; @@ -69,16 +69,16 @@ CREATE TABLE t1 ( ISBN CHAR(15), -Language CHAR(2) FIELD_FORMAT='LANG', -Subject CHAR(32) FIELD_FORMAT='SUBJECT', -AuthorFN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:FIRSTNAME', -AuthorLN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:LASTNAME', -Title CHAR(32) FIELD_FORMAT='TITLE', -Translation CHAR(32) FIELD_FORMAT='TRANSLATION', -Translator CHAR(80) FIELD_FORMAT='TRANSLATOR', -Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', -Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', -Year int(4) FIELD_FORMAT='DATEPUB' +Language CHAR(2) FIELD_FORMAT='$.LANG', +Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', +AuthorFN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].FIRSTNAME', +AuthorLN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].LASTNAME', +Title CHAR(32) FIELD_FORMAT='$.TITLE', +Translation CHAR(32) FIELD_FORMAT='$.TRANSLATION', +Translator CHAR(80) FIELD_FORMAT='$.TRANSLATOR', +Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', +Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', +Year int(4) FIELD_FORMAT='$.DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; SELECT * FROM t1; @@ -97,7 +97,7 @@ CREATE TABLE t2 ( FIRSTNAME CHAR(32), LASTNAME CHAR(32)) -ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json' OPTION_LIST='Object=[1]:AUTHOR'; +ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json' OPTION_LIST='Object=$[1].AUTHOR'; SELECT * FROM t2; FIRSTNAME LASTNAME William J. Pardi @@ -176,17 +176,17 @@ CREATE TABLE t1 ( ISBN CHAR(15) NOT NULL, -Language CHAR(2) FIELD_FORMAT='LANG', -Subject CHAR(32) FIELD_FORMAT='SUBJECT', -AuthorFN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:FIRSTNAME', -AuthorLN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:LASTNAME', -Title CHAR(32) FIELD_FORMAT='TITLE', -Translation CHAR(32) FIELD_FORMAT='TRANSLATED:PREFIX', -TranslatorFN CHAR(80) FIELD_FORMAT='TRANSLATED:TRANSLATOR:FIRSTNAME', -TranslatorLN CHAR(80) FIELD_FORMAT='TRANSLATED:TRANSLATOR:LASTNAME', -Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', -Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', -Year int(4) FIELD_FORMAT='DATEPUB', +Language CHAR(2) FIELD_FORMAT='$.LANG', +Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', +AuthorFN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].FIRSTNAME', +AuthorLN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].LASTNAME', +Title CHAR(32) FIELD_FORMAT='$.TITLE', +Translation CHAR(32) FIELD_FORMAT='$.TRANSLATED.PREFIX', +TranslatorFN CHAR(80) FIELD_FORMAT='$.TRANSLATED.TRANSLATOR.FIRSTNAME', +TranslatorLN CHAR(80) FIELD_FORMAT='$.TRANSLATED.TRANSLATOR.LASTNAME', +Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', +Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', +Year int(4) FIELD_FORMAT='$.DATEPUB', INDEX IX(ISBN) ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bib0.json' LRECL=320 OPTION_LIST='Pretty=0'; @@ -209,9 +209,9 @@ # CREATE TABLE t1 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK::EXPENSE:["+"]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK::EXPENSE:[+]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[*].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[].EXPENSE["+"].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[].EXPENSE[+].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t1; WHO WEEK WHAT AMOUNT @@ -230,9 +230,9 @@ # CREATE TABLE t1 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[*].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[*].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[*].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t1; WHO WEEK WHAT AMOUNT @@ -266,14 +266,14 @@ # CREATE TABLE t1 ( WHO CHAR(12) NOT NULL, -WEEKS CHAR(12) NOT NULL FIELD_FORMAT='WEEK:[", "]:NUMBER', -SUMS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[+]:AMOUNT', -SUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[+]:AMOUNT', -AVGS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[!]:AMOUNT', -SUMAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[!]:AMOUNT', -AVGSUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[+]:AMOUNT', -AVGAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[!]:AMOUNT', -AVERAGE DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[X]:AMOUNT') +WEEKS CHAR(12) NOT NULL FIELD_FORMAT='$.WEEK[", "].NUMBER', +SUMS CHAR(64) NOT NULL FIELD_FORMAT='$.WEEK["+"].EXPENSE[+].AMOUNT', +SUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[+].EXPENSE[+].AMOUNT', +AVGS CHAR(64) NOT NULL FIELD_FORMAT='$.WEEK["+"].EXPENSE[!].AMOUNT', +SUMAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[+].EXPENSE[!].AMOUNT', +AVGSUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[!].EXPENSE[+].AMOUNT', +AVGAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[!].EXPENSE[!].AMOUNT', +AVERAGE DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[!].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t1; WHO WEEKS SUMS SUM AVGS SUMAVG AVGSUM AVGAVG AVERAGE @@ -286,9 +286,9 @@ # CREATE TABLE t2 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[0]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[0]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[0]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[0].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[0].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[0].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t2; WHO WEEK WHAT AMOUNT @@ -302,9 +302,9 @@ Janet 3 Beer 18.00 CREATE TABLE t3 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[1]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[1].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[1].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[1].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t3; WHO WEEK WHAT AMOUNT @@ -318,9 +318,9 @@ Janet 4 Car 17.00 CREATE TABLE t4 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[2]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[2].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[2].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[2].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t4; WHO WEEK WHAT AMOUNT @@ -374,8 +374,8 @@ CREATE TABLE t2 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp3.json'; SELECT * FROM t2; WHO WEEK WHAT AMOUNT @@ -390,8 +390,8 @@ CREATE TABLE t3 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp4.json'; SELECT * FROM t3; WHO WEEK WHAT AMOUNT @@ -406,8 +406,8 @@ CREATE TABLE t4 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp5.json'; SELECT * FROM t4; WHO WEEK WHAT AMOUNT @@ -425,8 +425,8 @@ CREATE TABLE t1 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp*.json' MULTIPLE=1; SELECT * FROM t1 ORDER BY WHO, WEEK, WHAT, AMOUNT; WHO WEEK WHAT AMOUNT @@ -461,8 +461,8 @@ CREATE TABLE t1 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp%s.json'; ALTER TABLE t1 PARTITION BY LIST COLUMNS(WEEK) ( diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_udf_bin.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_udf_bin.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_udf_bin.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_udf_bin.result 2017-12-21 15:48:50.000000000 +0000 @@ -29,8 +29,8 @@ SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]'); Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]') [56,[3.141600],true] -SELECT Json_Array(1, TRUE, 0, FALSE); -Json_Array(1, TRUE, 0, FALSE) +SELECT Json_Make_Array(1, TRUE, 0, FALSE); +Json_Make_Array(1, TRUE, 0, FALSE) [1,true,0,false] SELECT Json_Serialize(Jbin_Array(TRUE, FALSE)); Json_Serialize(Jbin_Array(TRUE, FALSE)) @@ -63,94 +63,94 @@ {"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}} SELECT JsonLocate(Jbin_File('gloss.json'),'XML'); JsonLocate(Jbin_File('gloss.json'),'XML') -glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso:[1] +$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso[1] SELECT Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33)); Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33)) {"first":"foo","second":["a",33]} -SELECT Json_Get_Item(Json_Array('a','b','c'), '[1]'); -Json_Get_Item(Json_Array('a','b','c'), '[1]') +SELECT Json_Get_Item(Json_Make_Array('a','b','c'), '$[1]'); +Json_Get_Item(Json_Make_Array('a','b','c'), '$[1]') NULL -SELECT Json_Get_Item(Json_Object('foo' AS "first", Json_Array('a', 33) AS "json_second"), 'second') AS "item"; +SELECT Json_Get_Item(Json_Make_Object('foo' AS "first", Json_Make_Array('a', 33) AS "json_second"), '$.second') AS "item"; item ["a",33] -SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), 'second:*') item; +SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), '$.second') item; item ["a",33] -SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'); -Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv') +SELECT Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv'); +Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv') {"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}} -SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv')); -Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv')) +SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv')); +Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv')) {"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}} -SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*'); -Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*') +SELECT Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv'); +Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv') {"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}} -SELECT JsonGet_String(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') lang; +SELECT JsonGet_String(Json_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso') lang; lang GML -SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') "See also"; +SELECT Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso') "See also"; See also ["GML","XML"] -SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso')) "See also"; +SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso')) "See also"; See also ["GML","XML"] -SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso'),'[0]') lang; +SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso'),'$[0]') lang; lang GML # # Test Item Get/Set/Insert/Update UDF's # -SELECT Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]'); -Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]') +SELECT Json_Get_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '$[]'); +Json_Get_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '$[]') [1,2,{"trois":3,"quatre":4}] -SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]'); -Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]') +SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '$[1]'); +Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '$[1]') NULL -SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]'); -Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]') +SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '$[1]'); +Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '$[1]') NULL -SELECT Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4))); -Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4))) +SELECT Json_Set_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4))); +Json_Set_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4))) [1,2,{"trois":3,"quatre":4}] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 'foo'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '$.foo'); ERROR HY000: Can't initialize function 'json_set_item'; This function must have an odd number of arguments -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq') [1,2,{"trois":3,"quatre":4,"cinq":5}] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '$[1]'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '$[1]') [1,7,{"trois":3,"quatre":4}] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 7, '$[1]'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 7, '$[1]') [1,7,{"trois":3,"quatre":4,"cinq":5}] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Make_Array(7, 8, 9), '$[1]'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Make_Array(7, 8, 9), '$[1]') [1,[7,8,9],{"trois":3,"quatre":4}] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[2]'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[2]') [1,2,[7,8,9]] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[2].*'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[2].*') [1,2,{"trois":3,"quatre":4}] Warnings: Warning 1105 Invalid specification * in a write path -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, '$.foo'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, '$.foo') [1,2,{"trois":3,"quatre":4}] -SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]'); -Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]') +SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '$[1][2]'); +Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '$[1][2]') [1,[7,8,"toto"],{"trois":3,"quatre":4}] -SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]'); -Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]') +SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '$[2].nxt.total[]'); +Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '$[2].nxt.total[]') [1,[7,8,9],{"trois":3,"quatre":4,"nxt":{"total":[300]}}] -SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]'); -Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]') +SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 300, '$[2].nxt.total[]'); +Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 300, '$[2].nxt.total[]') [1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5,"nxt":{"total":[300]}}] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[1]', 5, '$[2].cinq', 10, '$[1][]'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[1]', 5, '$[2].cinq', 10, '$[1][]') [1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5}] -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre'); -Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre') +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '$[2].quatre'); +Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '$[2].quatre') [1,2,{"trois":3,"quatre":44}] SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc'); Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc') @@ -163,32 +163,32 @@ [1,2,{"trois":3,"quatre":4}] Warnings: Warning 1105 Invalid specification * in a write path -SELECT Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')); -Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')) +SELECT Json_Serialize(Jbin_Set_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq')); +Json_Serialize(Jbin_Set_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq')) [1,2,{"trois":3,"quatre":4,"cinq":5}] -SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'); -Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq') +SELECT Json_Insert_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq'); +Json_Insert_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq') [1,2,{"trois":3,"quatre":4,"cinq":5}] -SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'); -Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq') +SELECT Json_Update_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq'); +Json_Update_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq') [1,2,{"trois":3,"quatre":4}] -SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre'); -Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre') +SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 44, '$[2].quatre'); +Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 44, '$[2].quatre') [1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5}] -SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre'); -Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre') +SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 44, '$[2].quatre'); +Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 44, '$[2].quatre') [1,[7,8,9],{"trois":3,"quatre":44}] -SELECT Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]'); -Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]') +SELECT Json_Insert_Item(Json_Make_Array(1, Json_Make_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][1]', 300, '$[2].nxt.total[]'); +Json_Insert_Item(Json_Make_Array(1, Json_Make_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][1]', 300, '$[2].nxt.total[]') [1,[7,8,9],{"trois":3,"quatre":4,"cinq":5,"nxt":{"total":[300]}}] -SELECT Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]'); -Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]') +SELECT Json_Update_Item(Json_Make_Array(1, Json_Make_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][1]', 300, '$[2].nxt.total[]'); +Json_Update_Item(Json_Make_Array(1, Json_Make_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][1]', 300, '$[2].nxt.total[]') [1,[7,10,9],{"trois":3,"quatre":4}] -SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]'); -Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]') +SELECT Json_Insert_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[]'); +Json_Insert_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[]') [1,2,{"trois":3,"quatre":4},5] -SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]'); -Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]') +SELECT Json_Update_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[]'); +Json_Update_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[]') [1,2,{"trois":3,"quatre":4}] # # Test merging items UDF's @@ -196,7 +196,7 @@ SELECT Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')); Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')) ["a","b","c","d","e","f"] -SELECT Json_Item_Merge(Json_Array('a','b','c'), Json_Array('d','e','f')) AS "Result"; +SELECT Json_Item_Merge(Json_Make_Array('a','b','c'), Json_Make_Array('d','e','f')) AS "Result"; Result ["a","b","c","d","e","f"] SELECT Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3); @@ -216,7 +216,7 @@ SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f")); Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f")) {"a":4,"b":2,"c":3,"e":5,"f":6} -SELECT Json_Item_Merge('foo', Json_Array('d','e','f')); +SELECT Json_Item_Merge('foo', Json_Make_Array('d','e','f')); ERROR HY000: Can't initialize function 'json_item_merge'; First argument must be a json item # # Test making file UDF's @@ -294,17 +294,17 @@ SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json'); Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json') bt1.json -SELECT Json_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result"; Result {"foo":["a","b","c","d"]} -SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result"; Result {"Array_Add(Jbin_File('bt1.json'), 'd')":["a","b","c","d"]} -SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result"; Result {"bt1":["a","b","c","d"]} # This does modify the file -SELECT Json_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result"; +SELECT Json_Make_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result"; Result {"bt1":["a","b","c","d"]} SELECT Json_File('bt1.json'); @@ -319,7 +319,7 @@ SELECT Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2); Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2) ["a","b","c"] -SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1; Result {"bt1":["a","b","c","d"],"t1":1} {"bt1":["a","b","c","d"],"t1":2} @@ -432,23 +432,23 @@ Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json') bt1.json # Test DELETE from file -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result"; Result {"Array_Delete(Jbin_File('bt1.json'), 1)":["a","c"]} -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result"; Result {"bt1":["a","b"]} -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1; Result {"bt1":["b","c"],"t1":1} {"bt1":["b","c"],"t1":2} {"bt1":["b","c"],"t1":3} -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; Result {"bt1":["a","b"]} {"bt1":["a"]} {"bt1":[]} -SELECT Json_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; +SELECT Json_Make_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; Result {"bt1":["a","b"]} {"bt1":["a"]} @@ -475,17 +475,17 @@ Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d")) {"a":1,"b":2,"c":3,"d":4} # First query (file not modified) -SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result"; +SELECT Json_Make_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result"; Result {"new":{"a":1,"b":2,"c":3,"d":4}} # First query (file modified) -SELECT Json_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result"; +SELECT Json_Make_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result"; Result {"new":{"a":1,"b":2,"c":3,"d":4}} SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0); Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0) bt2.json -SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1; Result {"new":{"a":1,"b":2,"c":3,"d":4},"t1":1} {"new":{"a":1,"b":2,"c":3,"d":4},"t1":2} @@ -526,22 +526,22 @@ Result {"a":1,"b":2,"c":3,"d":4,"e":5,"f":6} -SELECT Json_Item_Merge(Json_Object(1 "a", 2 "b", 3 "c"), Json_Object(4 "d",5 "b",6 "f")) AS "Result"; +SELECT Json_Item_Merge(Json_Make_Object(1 "a", 2 "b", 3 "c"), Json_Make_Object(4 "d",5 "b",6 "f")) AS "Result"; Result {"a":1,"b":5,"c":3,"d":4,"f":6} -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result"; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result"; Result {"Object_Delete(Jbin_File('bt2.json'), 'b')":{"a":1,"c":3,"d":4,"e":5,"f":6}} -SELECT Json_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; Result {"bt1":{"a":1,"d":4,"e":5,"f":6}} -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; Result {"bt1":{"a":1,"d":4,"e":5,"f":6}} -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result"; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result"; Result {"bt1":{"a":1,"d":4,"e":5,"f":6}} -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1; Result {"bt1":{"d":4,"e":5,"f":6},"t1":1} {"bt1":{"d":4,"e":5,"f":6},"t1":2} @@ -552,14 +552,14 @@ SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0); Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0) bt3.json -SELECT Json_Array_Add(Json_File('bt3.json', 'b'), 66); -Json_Array_Add(Json_File('bt3.json', 'b'), 66) +SELECT Json_Array_Add(Json_File('bt3.json', '$.b'), 66); +Json_Array_Add(Json_File('bt3.json', '$.b'), 66) [44,55,66] -SELECT Json_Array_Add(Json_File('bt3.json'), 66, 'b'); -Json_Array_Add(Json_File('bt3.json'), 66, 'b') +SELECT Json_Array_Add(Json_File('bt3.json'), 66, '$.b'); +Json_Array_Add(Json_File('bt3.json'), 66, '$.b') {"a":1,"b":[44,55,66]} -SELECT Json_Array_Add(Jbin_File('bt3.json', 'b'), 66); -Json_Array_Add(Jbin_File('bt3.json', 'b'), 66) +SELECT Json_Array_Add(Jbin_File('bt3.json', '$.b'), 66); +Json_Array_Add(Jbin_File('bt3.json', '$.b'), 66) bt3.json SELECT Json_File('bt3.json', 3); Json_File('bt3.json', 3) @@ -573,15 +573,15 @@ ENGINE= MYISAM; INSERT INTO t2 VALUES(1,'bt3.json'); # In this table, the jfile_cols column just contains a file name -UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', 'b'), 66) WHERE n = 1; +UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', '$.b'), 66) WHERE n = 1; SELECT JsonGet_String(jfile_cols, '*') FROM t2; JsonGet_String(jfile_cols, '*') {"a":1,"b":[44,55,66]} -UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, 'b:[]') WHERE n = 1; -SELECT JsonGet_String(jfile_cols, 'b:*') FROM t2; -JsonGet_String(jfile_cols, 'b:*') +UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, '$.b[]') WHERE n = 1; +SELECT JsonGet_String(jfile_cols, '$.b.*') FROM t2; +JsonGet_String(jfile_cols, '$.b.*') [44,55,66,77] -UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, 'b:') , 99, 'b:') WHERE n = 1; +UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, '$.b[]') , 99, '$.b[]') WHERE n = 1; SELECT JsonGet_String(jfile_cols, '*') FROM t2; JsonGet_String(jfile_cols, '*') {"a":1,"b":[44,55,66,77,88,99]} diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_udf.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_udf.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/json_udf.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/json_udf.result 2017-12-21 15:48:50.000000000 +0000 @@ -35,18 +35,18 @@ [11,22,33] [11,22,33] [11,22,33] -SELECT Json_Array(); -Json_Array() +SELECT Json_Make_Array(); +Json_Make_Array() [] -SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL); -Json_Array(56, 3.1416, 'My name is "Foo"', NULL) +SELECT Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL); +Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL) [56,3.141600,"My name is \"Foo\"",null] -SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE); -Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE) +SELECT Json_Make_Array(Json_Make_Array(56, 3.1416, 'foo'), TRUE); +Json_Make_Array(Json_Make_Array(56, 3.1416, 'foo'), TRUE) [[56,3.141600,"foo"],true] -SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL)) Array; +SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL)) Array; ERROR HY000: Can't initialize function 'json_array_add'; This function must have at least 2 arguments -SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL), 'One more') Array; +SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL), 'One more') Array; Array [56,3.141600,"foo",null,"One more"] SELECT Json_Array_Add(JsonValue('one value'), 'One more'); @@ -70,33 +70,33 @@ SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9); Json_Array_Add('[5,3,8,7,9]' json_, 4, 9) [5,3,8,7,9,4] -SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1); -Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1) +SELECT Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), '[2]', 33, 1); +Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), '[2]', 33, 1) [1,2,[11,22],"[2]"] -SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1); -Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1) +SELECT Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), 33, '[2]', 1); +Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), 33, '[2]', 1) [1,2,[11,33,22]] -SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]'); -Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]') +SELECT Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), 33, 1, '[2]'); +Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), 33, 1, '[2]') [1,2,[11,33,22]] -SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array; +SELECT Json_Array_Add_Values(Json_Make_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array; Array [56,3.141600,"machin",null,"One more","Two more"] -SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), 'One more', 'Two more') Array FROM t1; +SELECT Json_Array_Add_Values(Json_Make_Array(56, 3.1416, 'machin'), 'One more', 'Two more') Array FROM t1; Array [56,3.141600,"machin","One more","Two more"] [56,3.141600,"machin","One more","Two more"] [56,3.141600,"machin","One more","Two more"] [56,3.141600,"machin","One more","Two more"] [56,3.141600,"machin","One more","Two more"] -SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), n) Array FROM t1; +SELECT Json_Array_Add_Values(Json_Make_Array(56, 3.1416, 'machin'), n) Array FROM t1; Array [56,3.141600,"machin",1] [56,3.141600,"machin",2] [56,3.141600,"machin",3] [56,3.141600,"machin",4] [56,3.141600,"machin",5] -SELECT Json_Array_Add_Values(Json_Array(n, 3.1416, 'machin'), n) Array FROM t1; +SELECT Json_Array_Add_Values(Json_Make_Array(n, 3.1416, 'machin'), n) Array FROM t1; Array [1,3.141600,"machin",1] [2,3.141600,"machin",2] @@ -106,49 +106,49 @@ SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array; Array [56,3.141600,"machin"] -SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0); -Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0) +SELECT Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), 0); +Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), 0) [3.141600,"My name is \"Foo\"",null] -SELECT Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2); -Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2) +SELECT Json_Array_Delete(Json_Make_Object(56, 3.1416, 'My name is Foo', NULL), 2); +Json_Array_Delete(Json_Make_Object(56, 3.1416, 'My name is Foo', NULL), 2) {"56":56,"3.1416":3.141600,"My name is Foo":"My name is Foo","NULL":null} Warnings: Warning 1105 First argument target is not an array -SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2'); -Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2') +SELECT Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), '2'); +Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), '2') [56,3.141600,"My name is \"Foo\"",null] Warnings: Warning 1105 Missing or null array index -SELECT Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2); -Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2) +SELECT Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2); +Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2) [56,3.141600,"My name is \"Foo\"",null] Warnings: -Warning 1105 No sub-item at '2' -SELECT Json_Object(56, 3.1416, 'foo', NULL); -Json_Object(56, 3.1416, 'foo', NULL) +Warning 1105 First argument target is not an array +SELECT Json_Make_Object(56, 3.1416, 'foo', NULL); +Json_Make_Object(56, 3.1416, 'foo', NULL) {"56":56,"3.1416":3.141600,"foo":"foo","NULL":null} -SELECT Json_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty); -Json_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty) +SELECT Json_Make_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty); +Json_Make_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty) {"qty":56,"price":3.141600,"truc":"foo","garanty":null} -SELECT Json_Object(); -Json_Object() +SELECT Json_Make_Object(); +Json_Make_Object() {} -SELECT Json_Object(Json_Array(56, 3.1416, 'foo'), NULL); -Json_Object(Json_Array(56, 3.1416, 'foo'), NULL) -{"Array(56, 3.1416, 'foo')":[56,3.141600,"foo"],"NULL":null} -SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL); -Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL) +SELECT Json_Make_Object(Json_Make_Array(56, 3.1416, 'foo'), NULL); +Json_Make_Object(Json_Make_Array(56, 3.1416, 'foo'), NULL) +{"Make_Array(56, 3.1416, 'foo')":[56,3.141600,"foo"],"NULL":null} +SELECT Json_Make_Array(Json_Make_Object(56 "qty", 3.1416 "price", 'foo') ,NULL); +Json_Make_Array(Json_Make_Object(56 "qty", 3.1416 "price", 'foo') ,NULL) [{"qty":56,"price":3.141600,"foo":"foo"},null] SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL); Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL) {"qty":56,"price":3.141600,"truc":"machin","garanty":null} SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty'); ERROR HY000: Can't initialize function 'json_object_key'; This function must have an even number of arguments -SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color); -Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color) +SELECT Json_Object_Add(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color); +Json_Object_Add(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color) {"qty":56,"price":3.141600,"truc":"machin","garanty":null,"color":"blue"} -SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price); -Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price) +SELECT Json_Object_Add(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price); +Json_Object_Add(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price) {"qty":56,"price":45.990000,"truc":"machin","garanty":null} SELECT Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1); Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1) @@ -156,13 +156,13 @@ Warnings: Warning 1105 Error 2 opening notexist.json Warning 1105 First argument target is not an object -SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc'); -Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc') +SELECT Json_Object_Delete(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc'); +Json_Object_Delete(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc') {"qty":56,"price":3.141600,"garanty":null} -SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose'); -Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose') +SELECT Json_Object_Delete(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose'); +Json_Object_Delete(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose') {"qty":56,"price":3.141600,"truc":"machin","garanty":null} -SELECT Json_Object_List(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List"; +SELECT Json_Object_List(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List"; Key List ["qty","price","truc","garanty"] SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List"; @@ -183,12 +183,12 @@ PUBLISHER CHAR(32), DATEPUB int(4) ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; -SELECT Json_Array(AUTHOR, TITLE, DATEPUB) FROM t2; -Json_Array(AUTHOR, TITLE, DATEPUB) +SELECT Json_Make_Array(AUTHOR, TITLE, DATEPUB) FROM t2; +Json_Make_Array(AUTHOR, TITLE, DATEPUB) ["Jean-Christophe Bernadac","Construire une application XML",1999] ["William J. Pardi","XML en Action",1999] -SELECT Json_Object(AUTHOR, TITLE, DATEPUB) FROM t2; -Json_Object(AUTHOR, TITLE, DATEPUB) +SELECT Json_Make_Object(AUTHOR, TITLE, DATEPUB) FROM t2; +Json_Make_Object(AUTHOR, TITLE, DATEPUB) {"AUTHOR":"Jean-Christophe Bernadac","TITLE":"Construire une application XML","DATEPUB":1999} {"AUTHOR":"William J. Pardi","TITLE":"XML en Action","DATEPUB":1999} SELECT Json_Array_Grp(TITLE, DATEPUB) FROM t2; @@ -206,8 +206,8 @@ SECRETARY CHAR(5) DEFAULT NULL FLAG=46, SALARY DOUBLE(8,2) NOT NULL FLAG=52 ) ENGINE=CONNECT TABLE_TYPE=FIX BLOCK_SIZE=8 FILE_NAME='employee.dat' ENDING=1; -SELECT Json_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT'; -Json_Object(SERIALNO, NAME, TITLE, SALARY) +SELECT Json_Make_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT'; +Json_Make_Object(SERIALNO, NAME, TITLE, SALARY) {"SERIALNO":"78943","NAME":"MERCHANT","TITLE":"SALESMAN","SALARY":8700.000000} SELECT DEPARTMENT, Json_Array_Grp(NAME) FROM t3 GROUP BY DEPARTMENT; DEPARTMENT Json_Array_Grp(NAME) @@ -220,8 +220,8 @@ SELECT JsonSet_Grp_Size(30); JsonSet_Grp_Size(30) 30 -SELECT Json_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title; -Json_Object(title, Json_Array_Grp(name) `json_names`) +SELECT Json_Make_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title; +Json_Make_Object(title, Json_Array_Grp(name) `json_names`) {"title":"ADMINISTRATOR","names":["GOOSEPEN","FUNNIGUY","SHRINKY"]} {"title":"DIRECTOR","names":["QUINN","WERTHER","STRONG"]} {"title":"ENGINEER","names":["BROWNY","ORELLY","MARTIN","TONGHO","WALTER","SMITH"]} @@ -230,26 +230,26 @@ {"title":"SCIENTIST","names":["BIGHEAD","BIGHORN"]} {"title":"SECRETARY","names":["MESSIFUL","HONEY","SHORTSIGHT","CHERRY","MONAPENNY"]} {"title":"TYPIST","names":["KITTY","PLUMHEAD"]} -SELECT Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT; -Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) +SELECT Json_Make_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT; +Json_Make_Array(DEPARTMENT, Json_Array_Grp(NAME)) ["0021",["STRONG","SHORTSIGHT"]] ["0318",["BANCROFT","PLUMHEAD","HONEY","TONGHO","WALTER","SHRINKY","WERTHER","MERCHANT","WHEELFOR"]] ["0319",["BULLOZER","QUINN","BROWNY","KITTY","MONAPENNY","MARTIN","FUNNIGUY","BUGHAPPY","FODDERMAN","MESSIFUL","GOOSEPEN"]] ["2452",["BIGHEAD","ORELLY","BIGHORN","SMITH","CHERRY"]] -SELECT Json_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) FROM t3 GROUP BY DEPARTMENT; -Json_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) +SELECT Json_Make_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) FROM t3 GROUP BY DEPARTMENT; +Json_Make_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) {"DEPARTMENT":"0021","NAMES":["STRONG","SHORTSIGHT"]} {"DEPARTMENT":"0318","NAMES":["BANCROFT","PLUMHEAD","HONEY","TONGHO","WALTER","SHRINKY","WERTHER","MERCHANT","WHEELFOR"]} {"DEPARTMENT":"0319","NAMES":["BULLOZER","QUINN","BROWNY","KITTY","MONAPENNY","MARTIN","FUNNIGUY","BUGHAPPY","FODDERMAN","MESSIFUL","GOOSEPEN"]} {"DEPARTMENT":"2452","NAMES":["BIGHEAD","ORELLY","BIGHORN","SMITH","CHERRY"]} -SELECT Json_Object(DEPARTMENT, Json_Array_Grp(Json_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT; -Json_Object(DEPARTMENT, Json_Array_Grp(Json_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) +SELECT Json_Make_Object(DEPARTMENT, Json_Array_Grp(Json_Make_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT; +Json_Make_Object(DEPARTMENT, Json_Array_Grp(Json_Make_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) {"DEPARTMENT":"0021","EMPLOYES":[{"SERIALNO":"87777","NAME":"STRONG","TITLE":"DIRECTOR","SALARY":23000.000000},{"SERIALNO":"22222","NAME":"SHORTSIGHT","TITLE":"SECRETARY","SALARY":5500.000000}]} {"DEPARTMENT":"0318","EMPLOYES":[{"SERIALNO":"74200","NAME":"BANCROFT","TITLE":"SALESMAN","SALARY":9600.000000},{"SERIALNO":"24888","NAME":"PLUMHEAD","TITLE":"TYPIST","SALARY":2800.000000},{"SERIALNO":"27845","NAME":"HONEY","TITLE":"SECRETARY","SALARY":4900.000000},{"SERIALNO":"73452","NAME":"TONGHO","TITLE":"ENGINEER","SALARY":6800.000000},{"SERIALNO":"74234","NAME":"WALTER","TITLE":"ENGINEER","SALARY":7400.000000},{"SERIALNO":"77777","NAME":"SHRINKY","TITLE":"ADMINISTRATOR","SALARY":7500.000000},{"SERIALNO":"70012","NAME":"WERTHER","TITLE":"DIRECTOR","SALARY":14500.000000},{"SERIALNO":"78943","NAME":"MERCHANT","TITLE":"SALESMAN","SALARY":8700.000000},{"SERIALNO":"73111","NAME":"WHEELFOR","TITLE":"SALESMAN","SALARY":10030.000000}]} {"DEPARTMENT":"0319","EMPLOYES":[{"SERIALNO":"76543","NAME":"BULLOZER","TITLE":"SALESMAN","SALARY":14800.000000},{"SERIALNO":"40567","NAME":"QUINN","TITLE":"DIRECTOR","SALARY":14000.000000},{"SERIALNO":"00137","NAME":"BROWNY","TITLE":"ENGINEER","SALARY":10500.000000},{"SERIALNO":"12345","NAME":"KITTY","TITLE":"TYPIST","SALARY":3000.450000},{"SERIALNO":"33333","NAME":"MONAPENNY","TITLE":"SECRETARY","SALARY":3800.000000},{"SERIALNO":"00023","NAME":"MARTIN","TITLE":"ENGINEER","SALARY":10000.000000},{"SERIALNO":"07654","NAME":"FUNNIGUY","TITLE":"ADMINISTRATOR","SALARY":8500.000000},{"SERIALNO":"45678","NAME":"BUGHAPPY","TITLE":"PROGRAMMER","SALARY":8500.000000},{"SERIALNO":"56789","NAME":"FODDERMAN","TITLE":"SALESMAN","SALARY":7000.000000},{"SERIALNO":"55555","NAME":"MESSIFUL","TITLE":"SECRETARY","SALARY":5000.500000},{"SERIALNO":"98765","NAME":"GOOSEPEN","TITLE":"ADMINISTRATOR","SALARY":4700.000000}]} {"DEPARTMENT":"2452","EMPLOYES":[{"SERIALNO":"34567","NAME":"BIGHEAD","TITLE":"SCIENTIST","SALARY":8000.000000},{"SERIALNO":"31416","NAME":"ORELLY","TITLE":"ENGINEER","SALARY":13400.000000},{"SERIALNO":"36666","NAME":"BIGHORN","TITLE":"SCIENTIST","SALARY":11000.000000},{"SERIALNO":"02345","NAME":"SMITH","TITLE":"ENGINEER","SALARY":9000.000000},{"SERIALNO":"11111","NAME":"CHERRY","TITLE":"SECRETARY","SALARY":4500.000000}]} -SELECT Json_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT, TITLE; -Json_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) +SELECT Json_Make_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Make_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT, TITLE; +Json_Make_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Make_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) {"DEPARTMENT":"0021","TITLE":"DIRECTOR","EMPLOYES":[{"SERIALNO":"87777","NAME":"STRONG","SALARY":23000.000000}]} {"DEPARTMENT":"0021","TITLE":"SECRETARY","EMPLOYES":[{"SERIALNO":"22222","NAME":"SHORTSIGHT","SALARY":5500.000000}]} {"DEPARTMENT":"0318","TITLE":"ADMINISTRATOR","EMPLOYES":[{"SERIALNO":"77777","NAME":"SHRINKY","SALARY":7500.000000}]} @@ -273,8 +273,8 @@ SELECT Json_Object_Grp(NAME, SALARY) FROM t3; Json_Object_Grp(NAME, SALARY) {"BANCROFT":9600.000000,"SMITH":9000.000000,"MERCHANT":8700.000000,"FUNNIGUY":8500.000000,"BUGHAPPY":8500.000000,"BIGHEAD":8000.000000,"SHRINKY":7500.000000,"WALTER":7400.000000,"FODDERMAN":7000.000000,"TONGHO":6800.000000,"SHORTSIGHT":5500.000000,"MESSIFUL":5000.500000,"HONEY":4900.000000,"GOOSEPEN":4700.000000,"CHERRY":4500.000000,"MONAPENNY":3800.000000,"KITTY":3000.450000,"PLUMHEAD":2800.000000,"STRONG":23000.000000,"BULLOZER":14800.000000,"WERTHER":14500.000000,"QUINN":14000.000000,"ORELLY":13400.000000,"BIGHORN":11000.000000,"BROWNY":10500.000000,"WHEELFOR":10030.000000,"MARTIN":10000.000000} -SELECT Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT; -Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") +SELECT Json_Make_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT; +Json_Make_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") {"DEPARTMENT":"0021","SALARIES":{"STRONG":23000.000000,"SHORTSIGHT":5500.000000}} {"DEPARTMENT":"0318","SALARIES":{"BANCROFT":9600.000000,"PLUMHEAD":2800.000000,"HONEY":4900.000000,"TONGHO":6800.000000,"WALTER":7400.000000,"SHRINKY":7500.000000,"WERTHER":14500.000000,"MERCHANT":8700.000000,"WHEELFOR":10030.000000}} {"DEPARTMENT":"0319","SALARIES":{"BULLOZER":14800.000000,"QUINN":14000.000000,"BROWNY":10500.000000,"KITTY":3000.450000,"MONAPENNY":3800.000000,"MARTIN":10000.000000,"FUNNIGUY":8500.000000,"BUGHAPPY":8500.000000,"FODDERMAN":7000.000000,"MESSIFUL":5000.500000,"GOOSEPEN":4700.000000}} @@ -309,26 +309,26 @@ JsonGet_String(Json_Array_Grp(name),'[>]') WHEELFOR SET @j1 = '[45,28,36,45,89]'; -SELECT JsonGet_String(@j1,'[1]'); -JsonGet_String(@j1,'[1]') +SELECT JsonGet_String(@j1,'1'); +JsonGet_String(@j1,'1') 28 -SELECT JsonGet_String(@j1 json_,'[3]'); -JsonGet_String(@j1 json_,'[3]') +SELECT JsonGet_String(@j1 json_,'3'); +JsonGet_String(@j1 json_,'3') 45 -SELECT JsonGet_String(Json_Array(45,28,36,45,89),'[3]'); -JsonGet_String(Json_Array(45,28,36,45,89),'[3]') +SELECT JsonGet_String(Json_Make_Array(45,28,36,45,89),'3'); +JsonGet_String(Json_Make_Array(45,28,36,45,89),'3') 45 -SELECT JsonGet_String(Json_Array(45,28,36,45,89),'["+"]') "list",'=' as "egal",JsonGet_String(Json_Array(45,28,36,45,89),'[+]') "sum"; +SELECT JsonGet_String(Json_Make_Array(45,28,36,45,89),'["+"]') "list",'=' as "egal",JsonGet_String(Json_Make_Array(45,28,36,45,89),'[+]') "sum"; list egal sum 45+28+36+45+89 = 243.00 -SELECT JsonGet_String(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]'); -JsonGet_String(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]') +SELECT JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)),'1.0'); +JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)),'1.0') 36 -SELECT JsonGet_String(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:*'); -JsonGet_String(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:*') +SELECT JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)),'1.*'); +JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)),'1.*') [36,45,89] -SELECT JsonGet_String(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'truc'); -JsonGet_String(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'truc') +SELECT JsonGet_String(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'truc'); +JsonGet_String(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'truc') machin SET @j2 = '{"qty":56,"price":3.141600,"truc":"machin","garanty":null}'; SELECT JsonGet_String(@j2 json_,'truc'); @@ -345,14 +345,14 @@ NULL Warnings: Warning 1105 -SELECT department, JsonGet_String(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department; +SELECT department, JsonGet_String(Json_Make_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries.[+]') Sumsal FROM t3 GROUP BY department; department Sumsal 0021 28500.00 0318 72230.00 0319 89800.95 2452 45900.00 -SELECT JsonGet_Int(@j1, '[4]'); -JsonGet_Int(@j1, '[4]') +SELECT JsonGet_Int(@j1, '4'); +JsonGet_Int(@j1, '4') 89 SELECT JsonGet_Int(@j1, '[#]'); JsonGet_Int(@j1, '[#]') @@ -360,26 +360,26 @@ SELECT JsonGet_Int(@j1, '[+]'); JsonGet_Int(@j1, '[+]') 243 -SELECT JsonGet_Int(@j1 json_, '[3]'); -JsonGet_Int(@j1 json_, '[3]') +SELECT JsonGet_Int(@j1 json_, '3'); +JsonGet_Int(@j1 json_, '3') 45 -SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[3]'); -JsonGet_Int(Json_Array(45,28,36,45,89), '[3]') +SELECT JsonGet_Int(Json_Make_Array(45,28,36,45,89), '3'); +JsonGet_Int(Json_Make_Array(45,28,36,45,89), '3') 45 -SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]'); -JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]') +SELECT JsonGet_Int(Json_Make_Array(45,28,36,45,89), '["+"]'); +JsonGet_Int(Json_Make_Array(45,28,36,45,89), '["+"]') 45 -SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[+]'); -JsonGet_Int(Json_Array(45,28,36,45,89), '[+]') +SELECT JsonGet_Int(Json_Make_Array(45,28,36,45,89), '[+]'); +JsonGet_Int(Json_Make_Array(45,28,36,45,89), '[+]') 243 -SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]'); -JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]') +SELECT JsonGet_Int(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '1.0'); +JsonGet_Int(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '1.0') 36 -SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]'); -JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]') +SELECT JsonGet_Int(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '0.1'); +JsonGet_Int(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '0.1') 28 -SELECT JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty'); -JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty') +SELECT JsonGet_Int(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty'); +JsonGet_Int(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty') 56 SELECT JsonGet_Int(@j2 json_, 'price'); JsonGet_Int(@j2 json_, 'price') @@ -390,38 +390,38 @@ SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose'); JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose') NULL -SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)), '[1]:*'), '[+]') sum; +SELECT JsonGet_Int(JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)), '1.*'), '[+]') sum; sum 170 -SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries:[+]') Sumsal FROM t3 GROUP BY department; +SELECT department, JsonGet_Int(Json_Make_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries.[+]') Sumsal FROM t3 GROUP BY department; department Sumsal 0021 28500 0318 72230 0319 89800 2452 45900 -SELECT JsonGet_Real(@j1, '[2]'); -JsonGet_Real(@j1, '[2]') +SELECT JsonGet_Real(@j1, '2'); +JsonGet_Real(@j1, '2') 36.000000000000000 -SELECT JsonGet_Real(@j1 json_, '[3]', 2); -JsonGet_Real(@j1 json_, '[3]', 2) +SELECT JsonGet_Real(@j1 json_, '3', 2); +JsonGet_Real(@j1 json_, '3', 2) 45.00 -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[3]'); -JsonGet_Real(Json_Array(45,28,36,45,89), '[3]') +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '3'); +JsonGet_Real(Json_Make_Array(45,28,36,45,89), '3') 45.000000000000000 -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]'); -JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]') +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '["+"]'); +JsonGet_Real(Json_Make_Array(45,28,36,45,89), '["+"]') 45.000000000000000 -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[+]'); -JsonGet_Real(Json_Array(45,28,36,45,89), '[+]') +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[+]'); +JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[+]') 243.000000000000000 -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[!]'); -JsonGet_Real(Json_Array(45,28,36,45,89), '[!]') +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[!]'); +JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[!]') 48.600000000000000 -SELECT JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]'); -JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]') +SELECT JsonGet_Real(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '1.0'); +JsonGet_Real(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '1.0') 36.000000000000000 -SELECT JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price'); -JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price') +SELECT JsonGet_Real(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price'); +JsonGet_Real(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price') 3.141600000000000 SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty'); JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty') @@ -435,7 +435,7 @@ SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose'); JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose') NULL -SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department; +SELECT department, JsonGet_Real(Json_Make_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries.[+]') Sumsal FROM t3 GROUP BY department; department Sumsal 0021 28500.000000000000000 0318 72230.000000000000000 @@ -445,11 +445,11 @@ # Documentation examples # SELECT -JsonGet_Int(Json_Array(45,28,36,45,89), '[4]') "Rank", -JsonGet_Int(Json_Array(45,28,36,45,89), '[#]') "Number", -JsonGet_String(Json_Array(45,28,36,45,89), '[","]') "Concat", -JsonGet_Int(Json_Array(45,28,36,45,89), '[+]') "Sum", -JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg"; +JsonGet_Int(Json_Make_Array(45,28,36,45,89), '4') "Rank", +JsonGet_Int(Json_Make_Array(45,28,36,45,89), '[#]') "Number", +JsonGet_String(Json_Make_Array(45,28,36,45,89), '[","]') "Concat", +JsonGet_Int(Json_Make_Array(45,28,36,45,89), '[+]') "Sum", +JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[!]', 2) "Avg"; Rank Number Concat Sum Avg 89 5 45,28,36,45,89 243 48.60 SELECT @@ -464,33 +464,33 @@ # # Testing Locate # -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'machin'); -JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'machin') -truc -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),56); -JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),56) -qty -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),3.1416); -JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),3.1416) -price -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'chose'); -JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'chose') +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'machin'); +JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'machin') +$.truc +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),56); +JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),56) +$.qty +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),3.1416); +JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),3.1416) +$.price +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'chose'); +JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'chose') NULL SELECT JsonLocate('{"AUTHORS":[{"FN":"Jules", "LN":"Verne"}, {"FN":"Jack", "LN":"London"}]}' json_, 'Jack') Path; Path -AUTHORS:[1]:FN +$.AUTHORS[1].FN SELECT JsonLocate('{"AUTHORS":[{"FN":"Jules", "LN":"Verne"}, {"FN":"Jack", "LN":"London"}]}' json_, 'jack' ci) Path; Path -AUTHORS:[1]:FN +$.AUTHORS[1].FN SELECT JsonLocate('{"AUTHORS":[{"FN":"Jules", "LN":"Verne"}, {"FN":"Jack", "LN":"London"}]}' json_, '{"FN":"Jack", "LN":"London"}' json_) Path; Path -AUTHORS:[1] +$.AUTHORS[1] SELECT JsonLocate('{"AUTHORS":[{"FN":"Jules", "LN":"Verne"}, {"FN":"Jack", "LN":"London"}]}' json_, '{"FN":"jack", "LN":"London"}' json_) Path; Path NULL SELECT JsonLocate('[45,28,36,45,89]',36); JsonLocate('[45,28,36,45,89]',36) -[2] +$[2] SELECT JsonLocate('[45,28,36,45,89]' json_,28.0); JsonLocate('[45,28,36,45,89]' json_,28.0) NULL @@ -499,71 +499,71 @@ [] SELECT Json_Locate_All('[45,28,36,45,89]',45); Json_Locate_All('[45,28,36,45,89]',45) -["[0]","[3]"] +["$[0]","$[3]"] SELECT Json_Locate_All('[[45,28],36,45,89]',45); Json_Locate_All('[[45,28],36,45,89]',45) -["[0]:[0]","[2]"] +["$[0][0]","$[2]"] SELECT Json_Locate_All('[[45,28,45],36,45,89]',45); Json_Locate_All('[[45,28,45],36,45,89]',45) -["[0]:[0]","[0]:[2]","[2]"] +["$[0][0]","$[0][2]","$[2]"] SELECT Json_Locate_All('[[45,28,45],36,45,89]',JsonGet_Int('[3,45]','[1]')); Json_Locate_All('[[45,28,45],36,45,89]',JsonGet_Int('[3,45]','[1]')) -["[0]:[0]","[0]:[2]","[2]"] +["$[0][0]","$[0][2]","$[2]"] SELECT JsonLocate('[[45,28,45],36,45,89]',45,n) from t1; JsonLocate('[[45,28,45],36,45,89]',45,n) -[0]:[0] -[0]:[2] -[2] +$[0][0] +$[0][2] +$[2] NULL NULL SELECT JsonGet_String(Json_Locate_All('[[45,28,45],36,45,89]',45),concat('[',n-1,']')) FROM t1; JsonGet_String(Json_Locate_All('[[45,28,45],36,45,89]',45),concat('[',n-1,']')) -[0]:[0] -[0]:[2] -[2] +$[0][0] +$[0][2] +$[2] NULL NULL SELECT JsonGet_String(Json_Locate_All('[[45,28,45],36,45,89]',45),concat('[',n-1,']')) AS `Path` FROM t1 GROUP BY n HAVING `Path` IS NOT NULL; Path -[0]:[0] -[0]:[2] -[2] +$[0][0] +$[0][2] +$[2] SELECT Json_Locate_All('[45,28,[36,45,89]]',45); Json_Locate_All('[45,28,[36,45,89]]',45) -["[0]","[2]:[1]"] +["$[0]","$[2][1]"] SELECT Json_Locate_All('[[45,28],[36,45.0,89]]',JsonValue(45.0)); Json_Locate_All('[[45,28],[36,45.0,89]]',JsonValue(45.0)) [] SELECT Json_Locate_All('[[45,28],[36,45.0,89]]',45.0); Json_Locate_All('[[45,28],[36,45.0,89]]',45.0) -["[1]:[1]"] +["$[1][1]"] SELECT JsonLocate('[[45,28],[36,45,89]]','[36,45,89]' json_); JsonLocate('[[45,28],[36,45,89]]','[36,45,89]' json_) -[1] +$[1] SELECT JsonLocate('[[45,28],[36,45,89]]','[45,28]' json_); JsonLocate('[[45,28],[36,45,89]]','[45,28]' json_) -[0] +$[0] SELECT Json_Locate_All('[[45,28],[[36,45],89]]','45') "All paths"; All paths [] SELECT Json_Locate_All('[[45,28],[[36,45],89]]','[36,45]' json_); Json_Locate_All('[[45,28],[[36,45],89]]','[36,45]' json_) -["[1]:[0]"] +["$[1][0]"] SELECT JsonGet_Int(Json_Locate_All('[[45,28],[[36,45],89]]',45), '[#]') "Nb of occurs"; Nb of occurs 2 SELECT Json_Locate_All('[[45,28],[[36,45],89]]',45,2); Json_Locate_All('[[45,28],[[36,45],89]]',45,2) -["[0]:[0]"] -SELECT JsonGet_String(Json_Locate_All('[45,28,36,45,89]',45),'[0]'); -JsonGet_String(Json_Locate_All('[45,28,36,45,89]',45),'[0]') -[0] +["$[0][0]"] +SELECT JsonGet_String(Json_Locate_All('[45,28,36,45,89]',45),'0'); +JsonGet_String(Json_Locate_All('[45,28,36,45,89]',45),'0') +$[0] SELECT JsonLocate(Json_File('test/biblio.json'), 'Knab'); JsonLocate(Json_File('test/biblio.json'), 'Knab') -[0]:AUTHOR:[1]:LASTNAME +$[0].AUTHOR[1].LASTNAME SELECT Json_Locate_All('test/biblio.json' jfile_, 'Knab'); Json_Locate_All('test/biblio.json' jfile_, 'Knab') -["[0]:AUTHOR:[1]:LASTNAME"] +["$[0].AUTHOR[1].LASTNAME"] # # Testing json files # @@ -595,54 +595,54 @@ SELECT Json_File('test/fx.json', 0); Json_File('test/fx.json', 0) [{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},{"_id":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]},{"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]},{"_id":8,"type":"furniture","item":"table","size":{"W":60,"L":80,"H":40},"ratings":[5,8,7]}] -SELECT Json_File('test/fx.json', '[0]'); -Json_File('test/fx.json', '[0]') +SELECT Json_File('test/fx.json', '0'); +Json_File('test/fx.json', '0') {"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]} SELECT Json_File('test/fx.json', '[?]'); Json_File('test/fx.json', '[?]') NULL Warnings: Warning 1105 Invalid function specification ? -SELECT JsonGet_String(Json_File('test/fx.json'), '[1]:*'); -JsonGet_String(Json_File('test/fx.json'), '[1]:*') +SELECT JsonGet_String(Json_File('test/fx.json'), '1.*'); +JsonGet_String(Json_File('test/fx.json'), '1.*') {"_id":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]} -SELECT JsonGet_String(Json_File('test/fx.json'), '[1]'); -JsonGet_String(Json_File('test/fx.json'), '[1]') -6 car roadster 56000 ??? -SELECT JsonGet_Int(Json_File('test/fx.json'), '[1]:mileage') AS Mileage; +SELECT JsonGet_String(Json_File('test/fx.json'), '1'); +JsonGet_String(Json_File('test/fx.json'), '1') +6 car roadster 56000 6 9 +SELECT JsonGet_Int(Json_File('test/fx.json'), '1.mileage') AS Mileage; Mileage 56000 -SELECT JsonGet_Real(Json_File('test/fx.json'), '[0]:price', 2) AS Price; +SELECT JsonGet_Real(Json_File('test/fx.json'), '0.price', 2) AS Price; Price 5.65 -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 'ratings'); -Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 'ratings') +SELECT Json_Array_Add(Json_File('test/fx.json', '2'), 6, 'ratings'); +Json_Array_Add(Json_File('test/fx.json', '2'), 6, 'ratings') {"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4,6]} -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 1, 'ratings'); -Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 1, 'ratings') +SELECT Json_Array_Add(Json_File('test/fx.json', '2'), 6, 1, 'ratings'); +Json_Array_Add(Json_File('test/fx.json', '2'), 6, 1, 'ratings') {"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,6,4]} -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 'ratings', 1); -Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 'ratings', 1) +SELECT Json_Array_Add(Json_File('test/fx.json', '2'), 6, 'ratings', 1); +Json_Array_Add(Json_File('test/fx.json', '2'), 6, 'ratings', 1) {"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,6,4]} -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]:ratings'), 6, 0); -Json_Array_Add(Json_File('test/fx.json', '[2]:ratings'), 6, 0) +SELECT Json_Array_Add(Json_File('test/fx.json', '2.ratings'), 6, 0); +Json_Array_Add(Json_File('test/fx.json', '2.ratings'), 6, 0) [6,2,4] -SELECT Json_Array_Delete(Json_File('test/fx.json', '[2]'), 'ratings', 1); -Json_Array_Delete(Json_File('test/fx.json', '[2]'), 'ratings', 1) +SELECT Json_Array_Delete(Json_File('test/fx.json', '2'), 'ratings', 1); +Json_Array_Delete(Json_File('test/fx.json', '2'), 'ratings', 1) {"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2]} -SELECT Json_Object_Add(Json_File('test/fx.json', '[2]'), 'france' origin); -Json_Object_Add(Json_File('test/fx.json', '[2]'), 'france' origin) +SELECT Json_Object_Add(Json_File('test/fx.json', '2'), 'france' origin); +Json_Object_Add(Json_File('test/fx.json', '2'), 'france' origin) {"_id":7,"type":"food","item":"meat","origin":"france","ratings":[2,4]} -SELECT Json_Object_Add(Json_File('test/fx.json', '[2]'), 70 H, 'size'); -Json_Object_Add(Json_File('test/fx.json', '[2]'), 70 H, 'size') +SELECT Json_Object_Add(Json_File('test/fx.json', '2'), 70 H, 'size'); +Json_Object_Add(Json_File('test/fx.json', '2'), 70 H, 'size') {"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]} Warnings: Warning 1105 No sub-item at 'size' -SELECT Json_Object_Add(Json_File('test/fx.json', '[3]'), 70 H, 'size'); -Json_Object_Add(Json_File('test/fx.json', '[3]'), 70 H, 'size') +SELECT Json_Object_Add(Json_File('test/fx.json', '3'), 70 H, 'size'); +Json_Object_Add(Json_File('test/fx.json', '3'), 70 H, 'size') {"_id":8,"type":"furniture","item":"table","size":{"W":60,"L":80,"H":70},"ratings":[5,8,7]} -SELECT Json_Object_List(Json_File('test/fx.json', '[3]:size')); -Json_Object_List(Json_File('test/fx.json', '[3]:size')) +SELECT Json_Object_List(Json_File('test/fx.json', '3.size')); +Json_Object_List(Json_File('test/fx.json', '3.size')) ["W","L","H"] DROP TABLE t1; DROP TABLE t2; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mongo_c.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mongo_c.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mongo_c.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mongo_c.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,378 @@ +# +# Test the MONGO table type +# +CREATE TABLE t1 (Document varchar(1024) field_format='*') +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +OPTION_LIST='Driver=C,Version=0' DATA_CHARSET=utf8; +SELECT * from t1 limit 3; +Document +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51c"},"address":{"building":"1007","coord":[-73.856076999999999089,40.848447000000000173],"street":"Morris ParkAve", "zipcode":"10462"},"borough":"Bronx","cuisine":"Bakery","grades":[{"date":{"$date":1393804800000},"grade":"A","score":2},{"date":{"$date":1378857600000},"grade":"A","score":6},{"date":{"$date":1358985600000},"grade":"A","score":10},{"date":{"$date":1322006400000},"grade":"A","score":9},{"date":{"$date":1299715200000},"grade":"B","score":14}],"name":"Morris ParkBakeShop", "restaurant_id":"30075445"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51d"},"address":{"building":"469","coord":[-73.96170399999999745,40.66294200000000103],"street":"Flatbush Avenue", "zipcode":"11225"},"borough":"Brooklyn","cuisine":"Hamburgers","grades":[{"date":{"$date":1419897600000},"grade":"A","score":8},{"date":{"$date":1404172800000},"grade":"B","score":23},{"date":{"$date":1367280000000},"grade":"A","score":12},{"date":{"$date":1336435200000},"grade":"A","score":12}],"name":"Wendy'S","restaurant_id":"30112340"} +{"_id":{"$oid":"58ada47de5a51ddfcd5ed51e"},"address":{"building":"351","coord":[-73.985135599999992451,40.767691900000002647],"street":"West 57Street", "zipcode":"10019"},"borough":"Manhattan","cuisine":"Irish","grades":[{"date":{"$date":1409961600000},"grade":"A","score":2},{"date":{"$date":1374451200000},"grade":"A","score":11},{"date":{"$date":1343692800000},"grade":"A","score":12},{"date":{"$date":1325116800000},"grade":"A","score":12}],"name":"Dj ReynoldsPubAndRestaurant", "restaurant_id":"30191841"} +DROP TABLE t1; +# +# Test catfunc +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants CATFUNC=columns +OPTION_LIST='Level=1,Driver=C,Version=0' DATA_CHARSET=utf8 ; +SELECT * from t1; +Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Nullable Bpath +_id 1 CHAR 24 24 0 0 +address_building 1 CHAR 10 10 0 0 address.building +address_coord 1 CHAR 512 512 0 0 address.coord +address_street 1 CHAR 38 38 0 0 address.street +address_zipcode 1 CHAR 5 5 0 0 address.zipcode +borough 1 CHAR 13 13 0 0 +cuisine 1 CHAR 64 64 0 0 +grades_0 1 CHAR 512 512 0 1 grades.0 +name 1 CHAR 98 98 0 0 +restaurant_id 1 CHAR 8 8 0 0 +DROP TABLE t1; +# +# Explicit columns +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(255) NOT NULL, +cuisine VARCHAR(255) NOT NULL, +borough VARCHAR(255) NOT NULL, +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8 +OPTION_LIST='Driver=C,Version=0'; +SELECT * FROM t1 LIMIT 10; +_id name cuisine borough restaurant_id +58ada47de5a51ddfcd5ed51c Morris Park Bake Shop Bakery Bronx 30075445 +58ada47de5a51ddfcd5ed51d Wendy'S Hamburgers Brooklyn 30112340 +58ada47de5a51ddfcd5ed51e Dj Reynolds Pub And Restaurant Irish Manhattan 30191841 +58ada47de5a51ddfcd5ed51f Riviera Caterer American Brooklyn 40356018 +58ada47de5a51ddfcd5ed520 Tov Kosher Kitchen Jewish/Kosher Queens 40356068 +58ada47de5a51ddfcd5ed521 Brunos On The Boulevard American Queens 40356151 +58ada47de5a51ddfcd5ed522 Kosher Island Jewish/Kosher Staten Island 40356442 +58ada47de5a51ddfcd5ed523 Wilken'S Fine Food Delicatessen Brooklyn 40356483 +58ada47de5a51ddfcd5ed524 Regina Caterers American Brooklyn 40356649 +58ada47de5a51ddfcd5ed525 Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn 40356731 +DROP TABLE t1; +# +# Test discovery +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +OPTION_LIST='Level=1,Driver=C,Version=0' DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL, + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` varchar(512) NOT NULL `FIELD_FORMAT`='address.coord', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `cuisine` char(64) NOT NULL, + `grades_0` varchar(512) DEFAULT NULL `FIELD_FORMAT`='grades.0', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='MONGO' `TABNAME`='restaurants' `OPTION_LIST`='Level=1,Driver=C,Version=0' `DATA_CHARSET`='utf8' +SELECT * FROM t1 LIMIT 5; +_id address_building address_coord address_street address_zipcode borough cuisine grades_0 name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 Morris Park Ave 10462 Bronx Bakery {"date":{"$date":1393804800000},"grade":"A","score":2} Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 Flatbush Avenue 11225 Brooklyn Hamburgers {"date":{"$date":1419897600000},"grade":"A","score":8} Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 West 57 Street 10019 Manhattan Irish {"date":{"$date":1409961600000},"grade":"A","score":2} Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 Stillwell Avenue 11224 Brooklyn American {"date":{"$date":1402358400000},"grade":"A","score":5} Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 63 Road 11374 Queens Jewish/Kosher {"date":{"$date":1416787200000},"grade":"Z","score":20} Tov Kosher Kitchen 40356068 +DROP TABLE t1; +# +# Dropping a column +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants DATA_CHARSET=utf8 +COLIST='{"projection":{"grades":0}}' OPTION_LIST='Driver=C,Version=0,level=0' ; +SELECT * FROM t1 LIMIT 10; +_id address borough cuisine name restaurant_id +58ada47de5a51ddfcd5ed51c {"building":"1007","coord":[-73.856076999999999089,40.848447000000000173],"street":"Morris ParkAve", "zipcode":"10462"} Bronx Bakery Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d {"building":"469","coord":[-73.96170399999999745,40.66294200000000103],"street":"Flatbush Avenue", "zipcode":"11225"} Brooklyn Hamburgers Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e {"building":"351","coord":[-73.985135599999992451,40.767691900000002647],"street":"West 57Street", "zipcode":"10019"} Manhattan Irish Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f {"building":"2780","coord":[-73.982419999999990523,40.579504999999997494],"street":"Stillwell Avenue", "zipcode":"11224"} Brooklyn American Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 {"building":"97-22","coord":[-73.860115199999995639,40.731173900000001709],"street":"63 Road", "zipcode":"11374"} Queens Jewish/Kosher Tov Kosher Kitchen 40356068 +58ada47de5a51ddfcd5ed521 {"building":"8825","coord":[-73.880382699999998408,40.764312400000001446],"street":"Astoria Boulevard", "zipcode":"11369"} Queens American Brunos On The Boulevard 40356151 +58ada47de5a51ddfcd5ed522 {"building":"2206","coord":[-74.137728600000002643,40.611957199999999091],"street":"Victory Boulevard", "zipcode":"10314"} Staten Island Jewish/Kosher Kosher Island 40356442 +58ada47de5a51ddfcd5ed523 {"building":"7114","coord":[-73.906850599999998508,40.619903399999998328],"street":"Avenue U", "zipcode":"11234"} Brooklyn Delicatessen Wilken'S Fine Food 40356483 +58ada47de5a51ddfcd5ed524 {"building":"6409","coord":[-74.005288999999990551,40.628886000000001388],"street":"11 Avenue", "zipcode":"11219"} Brooklyn American Regina Caterers 40356649 +58ada47de5a51ddfcd5ed525 {"building":"1839","coord":[-73.948260899999993967,40.640827100000002758],"street":"Nostrand Avenue", "zipcode":"11226"} Brooklyn Ice Cream, Gelato, Yogurt, Ices Taste The Tropics Ice Cream 40356731 +DROP TABLE t1; +# +# Specifying Jpath +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(64) NOT NULL, +cuisine CHAR(200) NOT NULL, +borough CHAR(16) NOT NULL, +street VARCHAR(65) FIELD_FORMAT='address.street', +building CHAR(16) FIELD_FORMAT='address.building', +zipcode CHAR(5) FIELD_FORMAT='address.zipcode', +grade CHAR(1) FIELD_FORMAT='grades.0.grade', +score INT(4) NOT NULL FIELD_FORMAT='grades.0.score', +`date` DATE FIELD_FORMAT='grades.0.date', +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='restaurants' DATA_CHARSET=utf8 +OPTION_LIST='Driver=C,Version=0' ; +SELECT * FROM t1 LIMIT 1; +_id 58ada47de5a51ddfcd5ed51c +name Morris Park Bake Shop +cuisine Bakery +borough Bronx +street Morris Park Ave +building 1007 +zipcode 10462 +grade A +score 2 +date 2014-03-03 +restaurant_id 30075445 +SELECT name, street, score, date FROM t1 LIMIT 5; +name street score date +Morris Park Bake Shop Morris Park Ave 2 2014-03-03 +Wendy'S Flatbush Avenue 8 2014-12-30 +Dj Reynolds Pub And Restaurant West 57 Street 2 2014-09-06 +Riviera Caterer Stillwell Avenue 5 2014-06-10 +Tov Kosher Kitchen 63 Road 20 2014-11-24 +SELECT name, cuisine, borough FROM t1 WHERE grade = 'A' LIMIT 10; +name cuisine borough +Morris Park Bake Shop Bakery Bronx +Wendy'S Hamburgers Brooklyn +Dj Reynolds Pub And Restaurant Irish Manhattan +Riviera Caterer American Brooklyn +Kosher Island Jewish/Kosher Staten Island +Wilken'S Fine Food Delicatessen Brooklyn +Regina Caterers American Brooklyn +Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn +Wild Asia American Bronx +C & C Catering Service American Brooklyn +SELECT COUNT(*) FROM t1 WHERE grade = 'A'; +COUNT(*) +20687 +SELECT * FROM t1 WHERE cuisine = 'English'; +_id name cuisine borough street building zipcode grade score date restaurant_id +58ada47de5a51ddfcd5ed83d Tea And Sympathy English Manhattan Greenwich Avenue 108 10011 A 8 2014-10-23 40391531 +58ada47de5a51ddfcd5ed85c Tartine English Manhattan West 11 Street 253 10014 A 11 2014-08-14 40392496 +58ada47de5a51ddfcd5ee1f3 The Park Slope Chipshop English Brooklyn 5 Avenue 383 11215 B 17 2014-09-29 40816202 +58ada47de5a51ddfcd5ee7e4 Pound And Pence English Manhattan Liberty Street 55 10005 A 7 2014-02-11 41022701 +58ada47de5a51ddfcd5ee999 Chip Shop English Brooklyn Atlantic Avenue 129 11201 A 9 2014-10-08 41076583 +58ada47ee5a51ddfcd5efe3f The Breslin Bar & Dining Room English Manhattan West 29 Street 16 10001 A 13 2014-06-09 41443706 +58ada47ee5a51ddfcd5efe99 Highlands Restaurant English Manhattan West 10 Street 150 10014 A 12 2014-10-22 41448559 +58ada47ee5a51ddfcd5f0413 The Fat Radish English Manhattan Orchard Street 17 10002 A 12 2014-07-26 41513545 +58ada47ee5a51ddfcd5f0777 Jones Wood Foundry English Manhattan East 76 Street 401 10021 A 12 2014-12-03 41557377 +58ada47ee5a51ddfcd5f0ea2 Whitehall English Manhattan Greenwich Avenue 19 10014 Z 15 2015-01-16 41625263 +58ada47ee5a51ddfcd5f1004 The Churchill Tavern English Manhattan East 28 Street 45 10016 A 13 2014-08-27 41633327 +58ada47ee5a51ddfcd5f13d5 The Monro English Brooklyn 5 Avenue 481 11215 A 7 2014-06-03 41660253 +58ada47ee5a51ddfcd5f1454 The Cock & Bull English Manhattan West 45 Street 23 10036 A 7 2014-08-07 41664704 +58ada47ee5a51ddfcd5f176e Dear Bushwick English Brooklyn Wilson Avenue 41 11237 A 12 2014-12-27 41690534 +58ada47ee5a51ddfcd5f1e91 Snowdonia Pub English Queens 32 Street 34-55 11106 A 12 2014-10-28 50000290 +58ada47ee5a51ddfcd5f2ddc Oscar'S Place English Manhattan Hudson Street 466 10014 A 10 2014-08-18 50011097 +SELECT * FROM t1 WHERE score = building; +_id name cuisine borough street building zipcode grade score date restaurant_id +DROP TABLE t1; +# +# Specifying Filter +# +CREATE TABLE t1 ( +_id CHAR(24) NOT NULL, +name CHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +restaurant_id CHAR(8) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants DATA_CHARSET=utf8 +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +OPTION_LIST='Driver=C,Version=0' ; +SELECT name FROM t1 WHERE borough = 'Queens'; +name +La Baraka Restaurant +Air France Lounge +Tournesol +Winegasm +Cafe Henri +Bistro 33 +Domaine Wine Bar +Cafe Triskell +Cannelle Patisserie +La Vie +Dirty Pierres Bistro +Fresca La Crepe +Bliss 46 Bistro +Bear +Cuisine By Claudette +Paris Baguette +The Baroness Bar +Francis Cafe +Madame Sou Sou +Crepe 'N' Tearia +Aperitif Bayside Llc +DROP TABLE t1; +# +# Testing pipeline +# +CREATE TABLE t1 ( +name VARCHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +date DATETIME NOT NULL, +grade CHAR(1) NOT NULL, +score INT(4) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='restaurants' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$match":{"cuisine":"French"}},{"$unwind":"$grades"},{"$project":{"_id":0,"name":1,"borough":1,"date":"$grades.date","grade":"$grades.grade","score":"$grades.score"}}]}' +OPTION_LIST='Driver=C,Version=0,Pipeline=1' ; +SELECT * FROM t1 LIMIT 10; +name borough date grade score +Tout Va Bien Manhattan 2014-11-10 01:00:00 B 15 +Tout Va Bien Manhattan 2014-04-03 02:00:00 A 13 +Tout Va Bien Manhattan 2013-07-17 02:00:00 C 36 +Tout Va Bien Manhattan 2013-02-06 01:00:00 B 22 +Tout Va Bien Manhattan 2012-07-16 02:00:00 C 36 +Tout Va Bien Manhattan 2012-03-08 01:00:00 C 7 +La Grenouille Manhattan 2014-04-09 02:00:00 A 10 +La Grenouille Manhattan 2013-03-05 01:00:00 A 9 +La Grenouille Manhattan 2012-02-02 01:00:00 A 13 +Le Perigord Manhattan 2014-07-14 02:00:00 B 14 +SELECT name, grade, score, date FROM t1 WHERE borough = 'Bronx'; +name grade score date +Bistro Sk A 10 2014-11-21 01:00:00 +Bistro Sk A 12 2014-02-19 01:00:00 +Bistro Sk B 18 2013-06-12 02:00:00 +DROP TABLE t1; +# +# try level 2 discovery +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +COLIST='{"projection":{"cuisine":0}}' +OPTION_LIST='Driver=C,level=2,version=0'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL, + `address_building` char(6) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord_0` double(12,6) NOT NULL `FIELD_FORMAT`='address.coord.0', + `address_street` char(25) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `grades_0_date` datetime NOT NULL `FIELD_FORMAT`='grades.0.date', + `grades_0_grade` char(14) NOT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_0_score` int(11) NOT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(32) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='MONGO' `TABNAME`='restaurants' `COLIST`='{"projection":{"cuisine":0}}' `FILTER`='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' `OPTION_LIST`='Driver=C,level=2,version=0' +SELECT name, borough, address_street, grades_0_score AS score FROM t1 WHERE grades_0_grade = 'B'; +name borough address_street score +Le Gamin Brooklyn Vanderbilt Avenue 24 +Bistro 33 Queens Ditmars Boulevard 15 +Dirty Pierres Bistro Queens Station Square 22 +Santos Anne Brooklyn Union Avenue 26 +Le Paddock Brooklyn Prospect Avenue 17 +La Crepe Et La Vie Brooklyn Foster Avenue 24 +Francis Cafe Queens Ditmars Boulevard 19 +DROP TABLE t1; +# +# try CRUD operations +# +false +CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' +OPTION_LIST='Driver=C,Version=0' ; +DELETE FROM t1; +INSERT INTO t1 VALUES(0,NULL),(1,'One'),(2,'Two'),(3,'Three'); +SELECT * FROM t1; +_id msg +0 NULL +1 One +2 Two +3 Three +UPDATE t1 SET msg = 'Deux' WHERE _id = 2; +DELETE FROM t1 WHERE msg IS NULL; +SELECT * FROM t1; +_id msg +1 One +2 Deux +3 Three +DELETE FROM t1; +DROP TABLE t1; +true +# +# List states whose population is equal or more than 10 millions +# +false +CREATE TABLE t1 ( +_id char(5) NOT NULL, +city char(16) NOT NULL, +loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', +loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', +pop int(11) NOT NULL, +state char(2) NOT NULL) +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities' +OPTION_LIST='Driver=C,Version=0' DATA_CHARSET='utf8'; +# Using SQL for grouping +SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; +state totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +# Using a pipeline for grouping +CREATE TABLE t1 (_id CHAR(2) NOT NULL, totalPop INT(11) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='cities' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$group":{"_id":"$state","totalPop":{"$sum":"$pop"}}},{"$match":{"totalPop":{"$gte":10000000}}},{"$sort":{"totalPop":-1}}]}' +OPTION_LIST='Driver=C,Version=0,Pipeline=1' ; +SELECT * FROM t1; +_id totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +true +# +# Test making array +# +CREATE TABLE t1 ( +_id int(4) NOT NULL, +item CHAR(8) NOT NULL, +prices_0 INT(6) FIELD_FORMAT='prices.0', +prices_1 INT(6) FIELD_FORMAT='prices.1', +prices_2 INT(6) FIELD_FORMAT='prices.2', +prices_3 INT(6) FIELD_FORMAT='prices.3', +prices_4 INT(6) FIELD_FORMAT='prices.4') +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' DATA_CHARSET=utf8 +OPTION_LIST='Driver=C,Version=0' ; +INSERT INTO t1 VALUES +(1,'journal',87,45,63,12,78), +(2,'notebook',123,456,789,NULL,NULL), +(3,'paper',5,7,3,8,NULL), +(4,'planner',25,71,NULL,44,27), +(5,'postcard',5,7,3,8,NULL); +SELECT * FROM t1; +_id item prices_0 prices_1 prices_2 prices_3 prices_4 +1 journal 87 45 63 12 78 +2 notebook 123 456 789 NULL NULL +3 paper 5 7 3 8 NULL +4 planner 25 71 NULL 44 27 +5 postcard 5 7 3 8 NULL +DROP TABLE t1; +# +# Test array aggregation +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' +COLIST='{"pipeline":[{"$project":{"_id":0,"item":1,"total":{"$sum":"$prices"},"average":{"$avg":"$prices"}}}]}' +OPTION_LIST='Driver=C,Version=0,Pipeline=YES' ; +SELECT * FROM t1; +item total average +journal 285 57.000000 +notebook 1368 456.000000 +paper 23 5.750000 +planner 167 41.750000 +postcard 23 5.750000 +DROP TABLE t1; +true diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mongo_java_2.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mongo_java_2.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mongo_java_2.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mongo_java_2.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,379 @@ +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; +# +# Test the MONGO table type +# +CREATE TABLE t1 (Document varchar(1024) field_format='*') +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +OPTION_LIST='Driver=Java,Version=2' DATA_CHARSET=utf8; +SELECT * from t1 limit 3; +Document +{ "_id" : { "$oid" : "58ada47de5a51ddfcd5ed51c"} , "address" : { "building" : "1007" , "coord" : [ -73.856077 , 40.848447] , "street" : "Morris Park Ave" , "zipcode" : "10462"} , "borough" : "Bronx" , "cuisine" : "Bakery" , "grades" : [ { "date" : { "$date" : "2014-03-03T00:00:00.000Z"} , "grade" : "A" , "score" : 2} , { "date" : { "$date" : "2013-09-11T00:00:00.000Z"} , "grade" : "A" , "score" : 6} , { "date" : { "$date" : "2013-01-24T00:00:00.000Z"} , "grade" : "A" , "score" : 10} , { "date" : { "$date" : "2011-11-23T00:00:00.000Z"} , "grade" : "A" , "score" : 9} , { "date" : { "$date" : "2011-03-10T00:00:00.000Z"} , "grade" : "B" , "score" : 14}] , "name" : "Morris Park Bake Shop" , "restaurant_id" : "30075445"} +{ "_id" : { "$oid" : "58ada47de5a51ddfcd5ed51d"} , "address" : { "building" : "469" , "coord" : [ -73.961704 , 40.662942] , "street" : "Flatbush Avenue" , "zipcode" : "11225"} , "borough" : "Brooklyn" , "cuisine" : "Hamburgers" , "grades" : [ { "date" : { "$date" : "2014-12-30T00:00:00.000Z"} , "grade" : "A" , "score" : 8} , { "date" : { "$date" : "2014-07-01T00:00:00.000Z"} , "grade" : "B" , "score" : 23} , { "date" : { "$date" : "2013-04-30T00:00:00.000Z"} , "grade" : "A" , "score" : 12} , { "date" : { "$date" : "2012-05-08T00:00:00.000Z"} , "grade" : "A" , "score" : 12}] , "name" : "Wendy'S" , "restaurant_id" : "30112340"} +{ "_id" : { "$oid" : "58ada47de5a51ddfcd5ed51e"} , "address" : { "building" : "351" , "coord" : [ -73.98513559999999 , 40.7676919] , "street" : "West 57 Street" , "zipcode" : "10019"} , "borough" : "Manhattan" , "cuisine" : "Irish" , "grades" : [ { "date" : { "$date" : "2014-09-06T00:00:00.000Z"} , "grade" : "A" , "score" : 2} , { "date" : { "$date" : "2013-07-22T00:00:00.000Z"} , "grade" : "A" , "score" : 11} , { "date" : { "$date" : "2012-07-31T00:00:00.000Z"} , "grade" : "A" , "score" : 12} , { "date" : { "$date" : "2011-12-29T00:00:00.000Z"} , "grade" : "A" , "score" : 12}] , "name" : "Dj Reynolds Pub And Restaurant" , "restaurant_id" : "30191841"} +DROP TABLE t1; +# +# Test catfunc +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants CATFUNC=columns +OPTION_LIST='Level=1,Driver=Java,Version=2' DATA_CHARSET=utf8 ; +SELECT * from t1; +Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Nullable Bpath +_id 1 CHAR 24 24 0 0 +address_building 1 CHAR 10 10 0 0 address.building +address_coord 1 CHAR 41 41 0 0 address.coord +address_street 1 CHAR 38 38 0 0 address.street +address_zipcode 1 CHAR 5 5 0 0 address.zipcode +borough 1 CHAR 13 13 0 0 +cuisine 1 CHAR 64 64 0 0 +grades_0 1 CHAR 99 99 0 1 grades.0 +name 1 CHAR 98 98 0 0 +restaurant_id 1 CHAR 8 8 0 0 +DROP TABLE t1; +# +# Explicit columns +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(255) NOT NULL, +cuisine VARCHAR(255) NOT NULL, +borough VARCHAR(255) NOT NULL, +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=2'; +SELECT * FROM t1 LIMIT 10; +_id name cuisine borough restaurant_id +58ada47de5a51ddfcd5ed51c Morris Park Bake Shop Bakery Bronx 30075445 +58ada47de5a51ddfcd5ed51d Wendy'S Hamburgers Brooklyn 30112340 +58ada47de5a51ddfcd5ed51e Dj Reynolds Pub And Restaurant Irish Manhattan 30191841 +58ada47de5a51ddfcd5ed51f Riviera Caterer American Brooklyn 40356018 +58ada47de5a51ddfcd5ed520 Tov Kosher Kitchen Jewish/Kosher Queens 40356068 +58ada47de5a51ddfcd5ed521 Brunos On The Boulevard American Queens 40356151 +58ada47de5a51ddfcd5ed522 Kosher Island Jewish/Kosher Staten Island 40356442 +58ada47de5a51ddfcd5ed523 Wilken'S Fine Food Delicatessen Brooklyn 40356483 +58ada47de5a51ddfcd5ed524 Regina Caterers American Brooklyn 40356649 +58ada47de5a51ddfcd5ed525 Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn 40356731 +DROP TABLE t1; +# +# Test discovery +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +OPTION_LIST='Level=1,Driver=Java,Version=2' DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL, + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` char(41) NOT NULL `FIELD_FORMAT`='address.coord', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `cuisine` char(64) NOT NULL, + `grades_0` char(99) DEFAULT NULL `FIELD_FORMAT`='grades.0', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='MONGO' `TABNAME`='restaurants' `OPTION_LIST`='Level=1,Driver=Java,Version=2' `DATA_CHARSET`='utf8' +SELECT * FROM t1 LIMIT 5; +_id address_building address_coord address_street address_zipcode borough cuisine grades_0 name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 [ -73.856077 , 40.848447] Morris Park Ave 10462 Bronx Bakery { "date" : { "$date" : "2014-03-03T00:00:00.000Z"} , "grade" : "A" , "score" : 2} Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 [ -73.961704 , 40.662942] Flatbush Avenue 11225 Brooklyn Hamburgers { "date" : { "$date" : "2014-12-30T00:00:00.000Z"} , "grade" : "A" , "score" : 8} Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 [ -73.98513559999999 , 40.7676919] West 57 Street 10019 Manhattan Irish { "date" : { "$date" : "2014-09-06T00:00:00.000Z"} , "grade" : "A" , "score" : 2} Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 [ -73.98241999999999 , 40.579505] Stillwell Avenue 11224 Brooklyn American { "date" : { "$date" : "2014-06-10T00:00:00.000Z"} , "grade" : "A" , "score" : 5} Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 [ -73.8601152 , 40.7311739] 63 Road 11374 Queens Jewish/Kosher { "date" : { "$date" : "2014-11-24T00:00:00.000Z"} , "grade" : "Z" , "score" : 20} Tov Kosher Kitchen 40356068 +DROP TABLE t1; +# +# Dropping a column +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants DATA_CHARSET=utf8 +COLIST='{"grades":0}' OPTION_LIST='Driver=Java,Version=2,level=0' ; +SELECT * FROM t1 LIMIT 10; +_id address borough cuisine name restaurant_id +58ada47de5a51ddfcd5ed51c { "building" : "1007" , "coord" : [ -73.856077 , 40.848447] , "street" : "Morris Park Ave" , "zipcode" : "10462"} Bronx Bakery Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d { "building" : "469" , "coord" : [ -73.961704 , 40.662942] , "street" : "Flatbush Avenue" , "zipcode" : "11225"} Brooklyn Hamburgers Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e { "building" : "351" , "coord" : [ -73.98513559999999 , 40.7676919] , "street" : "West 57 Street" , "zipcode" : "10019"} Manhattan Irish Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f { "building" : "2780" , "coord" : [ -73.98241999999999 , 40.579505] , "street" : "Stillwell Avenue" , "zipcode" : "11224"} Brooklyn American Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 { "building" : "97-22" , "coord" : [ -73.8601152 , 40.7311739] , "street" : "63 Road" , "zipcode" : "11374"} Queens Jewish/Kosher Tov Kosher Kitchen 40356068 +58ada47de5a51ddfcd5ed521 { "building" : "8825" , "coord" : [ -73.8803827 , 40.7643124] , "street" : "Astoria Boulevard" , "zipcode" : "11369"} Queens American Brunos On The Boulevard 40356151 +58ada47de5a51ddfcd5ed522 { "building" : "2206" , "coord" : [ -74.1377286 , 40.6119572] , "street" : "Victory Boulevard" , "zipcode" : "10314"} Staten Island Jewish/Kosher Kosher Island 40356442 +58ada47de5a51ddfcd5ed523 { "building" : "7114" , "coord" : [ -73.9068506 , 40.6199034] , "street" : "Avenue U" , "zipcode" : "11234"} Brooklyn Delicatessen Wilken'S Fine Food 40356483 +58ada47de5a51ddfcd5ed524 { "building" : "6409" , "coord" : [ -74.00528899999999 , 40.628886] , "street" : "11 Avenue" , "zipcode" : "11219"} Brooklyn American Regina Caterers 40356649 +58ada47de5a51ddfcd5ed525 { "building" : "1839" , "coord" : [ -73.9482609 , 40.6408271] , "street" : "Nostrand Avenue" , "zipcode" : "11226"} Brooklyn Ice Cream, Gelato, Yogurt, Ices Taste The Tropics Ice Cream 40356731 +DROP TABLE t1; +# +# Specifying Jpath +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(64) NOT NULL, +cuisine CHAR(200) NOT NULL, +borough CHAR(16) NOT NULL, +street VARCHAR(65) FIELD_FORMAT='address.street', +building CHAR(16) FIELD_FORMAT='address.building', +zipcode CHAR(5) FIELD_FORMAT='address.zipcode', +grade CHAR(1) FIELD_FORMAT='grades.0.grade', +score INT(4) NOT NULL FIELD_FORMAT='grades.0.score', +`date` DATE FIELD_FORMAT='grades.0.date', +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='restaurants' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=2' ; +SELECT * FROM t1 LIMIT 1; +_id 58ada47de5a51ddfcd5ed51c +name Morris Park Bake Shop +cuisine Bakery +borough Bronx +street Morris Park Ave +building 1007 +zipcode 10462 +grade A +score 2 +date 2014-03-03 +restaurant_id 30075445 +SELECT name, street, score, date FROM t1 LIMIT 5; +name street score date +Morris Park Bake Shop Morris Park Ave 2 2014-03-03 +Wendy'S Flatbush Avenue 8 2014-12-30 +Dj Reynolds Pub And Restaurant West 57 Street 2 2014-09-06 +Riviera Caterer Stillwell Avenue 5 2014-06-10 +Tov Kosher Kitchen 63 Road 20 2014-11-24 +SELECT name, cuisine, borough FROM t1 WHERE grade = 'A' LIMIT 10; +name cuisine borough +Morris Park Bake Shop Bakery Bronx +Wendy'S Hamburgers Brooklyn +Dj Reynolds Pub And Restaurant Irish Manhattan +Riviera Caterer American Brooklyn +Kosher Island Jewish/Kosher Staten Island +Wilken'S Fine Food Delicatessen Brooklyn +Regina Caterers American Brooklyn +Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn +Wild Asia American Bronx +C & C Catering Service American Brooklyn +SELECT COUNT(*) FROM t1 WHERE grade = 'A'; +COUNT(*) +20687 +SELECT * FROM t1 WHERE cuisine = 'English'; +_id name cuisine borough street building zipcode grade score date restaurant_id +58ada47de5a51ddfcd5ed83d Tea And Sympathy English Manhattan Greenwich Avenue 108 10011 A 8 2014-10-23 40391531 +58ada47de5a51ddfcd5ed85c Tartine English Manhattan West 11 Street 253 10014 A 11 2014-08-14 40392496 +58ada47de5a51ddfcd5ee1f3 The Park Slope Chipshop English Brooklyn 5 Avenue 383 11215 B 17 2014-09-29 40816202 +58ada47de5a51ddfcd5ee7e4 Pound And Pence English Manhattan Liberty Street 55 10005 A 7 2014-02-11 41022701 +58ada47de5a51ddfcd5ee999 Chip Shop English Brooklyn Atlantic Avenue 129 11201 A 9 2014-10-08 41076583 +58ada47ee5a51ddfcd5efe3f The Breslin Bar & Dining Room English Manhattan West 29 Street 16 10001 A 13 2014-06-09 41443706 +58ada47ee5a51ddfcd5efe99 Highlands Restaurant English Manhattan West 10 Street 150 10014 A 12 2014-10-22 41448559 +58ada47ee5a51ddfcd5f0413 The Fat Radish English Manhattan Orchard Street 17 10002 A 12 2014-07-26 41513545 +58ada47ee5a51ddfcd5f0777 Jones Wood Foundry English Manhattan East 76 Street 401 10021 A 12 2014-12-03 41557377 +58ada47ee5a51ddfcd5f0ea2 Whitehall English Manhattan Greenwich Avenue 19 10014 Z 15 2015-01-16 41625263 +58ada47ee5a51ddfcd5f1004 The Churchill Tavern English Manhattan East 28 Street 45 10016 A 13 2014-08-27 41633327 +58ada47ee5a51ddfcd5f13d5 The Monro English Brooklyn 5 Avenue 481 11215 A 7 2014-06-03 41660253 +58ada47ee5a51ddfcd5f1454 The Cock & Bull English Manhattan West 45 Street 23 10036 A 7 2014-08-07 41664704 +58ada47ee5a51ddfcd5f176e Dear Bushwick English Brooklyn Wilson Avenue 41 11237 A 12 2014-12-27 41690534 +58ada47ee5a51ddfcd5f1e91 Snowdonia Pub English Queens 32 Street 34-55 11106 A 12 2014-10-28 50000290 +58ada47ee5a51ddfcd5f2ddc Oscar'S Place English Manhattan Hudson Street 466 10014 A 10 2014-08-18 50011097 +SELECT * FROM t1 WHERE score = building; +_id name cuisine borough street building zipcode grade score date restaurant_id +DROP TABLE t1; +# +# Specifying Filter +# +CREATE TABLE t1 ( +_id CHAR(24) NOT NULL, +name CHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +restaurant_id CHAR(8) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants DATA_CHARSET=utf8 +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +OPTION_LIST='Driver=Java,Version=2' ; +SELECT name FROM t1 WHERE borough = 'Queens'; +name +La Baraka Restaurant +Air France Lounge +Tournesol +Winegasm +Cafe Henri +Bistro 33 +Domaine Wine Bar +Cafe Triskell +Cannelle Patisserie +La Vie +Dirty Pierres Bistro +Fresca La Crepe +Bliss 46 Bistro +Bear +Cuisine By Claudette +Paris Baguette +The Baroness Bar +Francis Cafe +Madame Sou Sou +Crepe 'N' Tearia +Aperitif Bayside Llc +DROP TABLE t1; +# +# Testing pipeline +# +CREATE TABLE t1 ( +name VARCHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +date DATETIME NOT NULL, +grade CHAR(1) NOT NULL, +score INT(4) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='restaurants' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$match":{"cuisine":"French"}},{"$unwind":"$grades"},{"$project":{"_id":0,"name":1,"borough":1,"date":"$grades.date","grade":"$grades.grade","score":"$grades.score"}}]}' +OPTION_LIST='Driver=Java,Version=2,Pipeline=1' ; +SELECT * FROM t1 LIMIT 10; +name borough date grade score +Tout Va Bien Manhattan 2014-11-10 01:00:00 B 15 +Tout Va Bien Manhattan 2014-04-03 02:00:00 A 13 +Tout Va Bien Manhattan 2013-07-17 02:00:00 C 36 +Tout Va Bien Manhattan 2013-02-06 01:00:00 B 22 +Tout Va Bien Manhattan 2012-07-16 02:00:00 C 36 +Tout Va Bien Manhattan 2012-03-08 01:00:00 C 7 +La Grenouille Manhattan 2014-04-09 02:00:00 A 10 +La Grenouille Manhattan 2013-03-05 01:00:00 A 9 +La Grenouille Manhattan 2012-02-02 01:00:00 A 13 +Le Perigord Manhattan 2014-07-14 02:00:00 B 14 +SELECT name, grade, score, date FROM t1 WHERE borough = 'Bronx'; +name grade score date +Bistro Sk A 10 2014-11-21 01:00:00 +Bistro Sk A 12 2014-02-19 01:00:00 +Bistro Sk B 18 2013-06-12 02:00:00 +DROP TABLE t1; +# +# try level 2 discovery +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +COLIST='{"cuisine":0}' +OPTION_LIST='Driver=Java,level=2,version=2'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL, + `address_building` char(6) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord_0` double(18,14) NOT NULL `FIELD_FORMAT`='address.coord.0', + `address_street` char(25) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `grades_0_date` datetime NOT NULL `FIELD_FORMAT`='grades.0.date', + `grades_0_grade` char(14) NOT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_0_score` int(2) NOT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(32) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='MONGO' `TABNAME`='restaurants' `COLIST`='{"cuisine":0}' `FILTER`='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' `OPTION_LIST`='Driver=Java,level=2,version=2' +SELECT name, borough, address_street, grades_0_score AS score FROM t1 WHERE grades_0_grade = 'B'; +name borough address_street score +Le Gamin Brooklyn Vanderbilt Avenue 24 +Bistro 33 Queens Ditmars Boulevard 15 +Dirty Pierres Bistro Queens Station Square 22 +Santos Anne Brooklyn Union Avenue 26 +Le Paddock Brooklyn Prospect Avenue 17 +La Crepe Et La Vie Brooklyn Foster Avenue 24 +Francis Cafe Queens Ditmars Boulevard 19 +DROP TABLE t1; +# +# try CRUD operations +# +false +CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' +OPTION_LIST='Driver=Java,Version=2' ; +DELETE FROM t1; +INSERT INTO t1 VALUES(0,NULL),(1,'One'),(2,'Two'),(3,'Three'); +SELECT * FROM t1; +_id msg +0 NULL +1 One +2 Two +3 Three +UPDATE t1 SET msg = 'Deux' WHERE _id = 2; +DELETE FROM t1 WHERE msg IS NULL; +SELECT * FROM t1; +_id msg +1 One +2 Deux +3 Three +DELETE FROM t1; +DROP TABLE t1; +true +# +# List states whose population is equal or more than 10 millions +# +false +CREATE TABLE t1 ( +_id char(5) NOT NULL, +city char(16) NOT NULL, +loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', +loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', +pop int(11) NOT NULL, +state char(2) NOT NULL) +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities' +OPTION_LIST='Driver=Java,Version=2' DATA_CHARSET='utf8'; +# Using SQL for grouping +SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; +state totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +# Using a pipeline for grouping +CREATE TABLE t1 (_id CHAR(2) NOT NULL, totalPop INT(11) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='cities' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$group":{"_id":"$state","totalPop":{"$sum":"$pop"}}},{"$match":{"totalPop":{"$gte":10000000}}},{"$sort":{"totalPop":-1}}]}' +OPTION_LIST='Driver=Java,Version=2,Pipeline=1' ; +SELECT * FROM t1; +_id totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +true +# +# Test making array +# +CREATE TABLE t1 ( +_id int(4) NOT NULL, +item CHAR(8) NOT NULL, +prices_0 INT(6) FIELD_FORMAT='prices.0', +prices_1 INT(6) FIELD_FORMAT='prices.1', +prices_2 INT(6) FIELD_FORMAT='prices.2', +prices_3 INT(6) FIELD_FORMAT='prices.3', +prices_4 INT(6) FIELD_FORMAT='prices.4') +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=2' ; +INSERT INTO t1 VALUES +(1,'journal',87,45,63,12,78), +(2,'notebook',123,456,789,NULL,NULL), +(3,'paper',5,7,3,8,NULL), +(4,'planner',25,71,NULL,44,27), +(5,'postcard',5,7,3,8,NULL); +SELECT * FROM t1; +_id item prices_0 prices_1 prices_2 prices_3 prices_4 +1 journal 87 45 63 12 78 +2 notebook 123 456 789 NULL NULL +3 paper 5 7 3 8 NULL +4 planner 25 71 NULL 44 27 +5 postcard 5 7 3 8 NULL +DROP TABLE t1; +# +# Test array aggregation +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' +COLIST='{"pipeline":[{"$project":{"_id":0,"item":1,"total":{"$sum":"$prices"},"average":{"$avg":"$prices"}}}]}' +OPTION_LIST='Driver=Java,Version=2,Pipeline=YES' ; +SELECT * FROM t1; +item total average +journal 285 57.00 +notebook 1368 456.00 +paper 23 5.75 +planner 167 41.75 +postcard 23 5.75 +DROP TABLE t1; +true diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mongo_java_3.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mongo_java_3.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mongo_java_3.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mongo_java_3.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,379 @@ +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; +# +# Test the MONGO table type +# +CREATE TABLE t1 (Document varchar(1024) field_format='*') +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +OPTION_LIST='Driver=Java,Version=3' DATA_CHARSET=utf8; +SELECT * from t1 limit 3; +Document +{ "_id" : { "$oid" : "58ada47de5a51ddfcd5ed51c" }, "address" : { "building" : "1007", "coord" : [-73.856077, 40.848447], "street" : "Morris Park Ave", "zipcode" : "10462" }, "borough" : "Bronx", "cuisine" : "Bakery", "grades" : [{ "date" : { "$date" : 1393804800000 }, "grade" : "A", "score" : 2 }, { "date" : { "$date" : 1378857600000 }, "grade" : "A", "score" : 6 }, { "date" : { "$date" : 1358985600000 }, "grade" : "A", "score" : 10 }, { "date" : { "$date" : 1322006400000 }, "grade" : "A", "score" : 9 }, { "date" : { "$date" : 1299715200000 }, "grade" : "B", "score" : 14 }], "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" } +{ "_id" : { "$oid" : "58ada47de5a51ddfcd5ed51d" }, "address" : { "building" : "469", "coord" : [-73.961704, 40.662942], "street" : "Flatbush Avenue", "zipcode" : "11225" }, "borough" : "Brooklyn", "cuisine" : "Hamburgers", "grades" : [{ "date" : { "$date" : 1419897600000 }, "grade" : "A", "score" : 8 }, { "date" : { "$date" : 1404172800000 }, "grade" : "B", "score" : 23 }, { "date" : { "$date" : 1367280000000 }, "grade" : "A", "score" : 12 }, { "date" : { "$date" : 1336435200000 }, "grade" : "A", "score" : 12 }], "name" : "Wendy'S", "restaurant_id" : "30112340" } +{ "_id" : { "$oid" : "58ada47de5a51ddfcd5ed51e" }, "address" : { "building" : "351", "coord" : [-73.98513559999999, 40.7676919], "street" : "West 57 Street", "zipcode" : "10019" }, "borough" : "Manhattan", "cuisine" : "Irish", "grades" : [{ "date" : { "$date" : 1409961600000 }, "grade" : "A", "score" : 2 }, { "date" : { "$date" : 1374451200000 }, "grade" : "A", "score" : 11 }, { "date" : { "$date" : 1343692800000 }, "grade" : "A", "score" : 12 }, { "date" : { "$date" : 1325116800000 }, "grade" : "A", "score" : 12 }], "name" : "Dj Reynolds Pub And Restaurant", "restaurant_id" : "30191841" } +DROP TABLE t1; +# +# Test catfunc +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants CATFUNC=columns +OPTION_LIST='Level=1,Driver=Java,Version=3' DATA_CHARSET=utf8 ; +SELECT * from t1; +Column_Name Data_Type Type_Name Column_Size Buffer_Length Decimal_Digits Nullable Bpath +_id 1 CHAR 24 24 0 0 +address_building 1 CHAR 10 10 0 0 address.building +address_coord 1 CHAR 39 39 0 0 address.coord +address_street 1 CHAR 38 38 0 0 address.street +address_zipcode 1 CHAR 5 5 0 0 address.zipcode +borough 1 CHAR 13 13 0 0 +cuisine 1 CHAR 64 64 0 0 +grades_0 1 CHAR 84 84 0 1 grades.0 +name 1 CHAR 98 98 0 0 +restaurant_id 1 CHAR 8 8 0 0 +DROP TABLE t1; +# +# Explicit columns +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(255) NOT NULL, +cuisine VARCHAR(255) NOT NULL, +borough VARCHAR(255) NOT NULL, +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=3'; +SELECT * FROM t1 LIMIT 10; +_id name cuisine borough restaurant_id +58ada47de5a51ddfcd5ed51c Morris Park Bake Shop Bakery Bronx 30075445 +58ada47de5a51ddfcd5ed51d Wendy'S Hamburgers Brooklyn 30112340 +58ada47de5a51ddfcd5ed51e Dj Reynolds Pub And Restaurant Irish Manhattan 30191841 +58ada47de5a51ddfcd5ed51f Riviera Caterer American Brooklyn 40356018 +58ada47de5a51ddfcd5ed520 Tov Kosher Kitchen Jewish/Kosher Queens 40356068 +58ada47de5a51ddfcd5ed521 Brunos On The Boulevard American Queens 40356151 +58ada47de5a51ddfcd5ed522 Kosher Island Jewish/Kosher Staten Island 40356442 +58ada47de5a51ddfcd5ed523 Wilken'S Fine Food Delicatessen Brooklyn 40356483 +58ada47de5a51ddfcd5ed524 Regina Caterers American Brooklyn 40356649 +58ada47de5a51ddfcd5ed525 Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn 40356731 +DROP TABLE t1; +# +# Test discovery +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +OPTION_LIST='Level=1,Driver=Java,Version=3' DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL, + `address_building` char(10) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord` char(39) NOT NULL `FIELD_FORMAT`='address.coord', + `address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `cuisine` char(64) NOT NULL, + `grades_0` char(84) DEFAULT NULL `FIELD_FORMAT`='grades.0', + `name` char(98) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='MONGO' `TABNAME`='restaurants' `OPTION_LIST`='Level=1,Driver=Java,Version=3' `DATA_CHARSET`='utf8' +SELECT * FROM t1 LIMIT 5; +_id address_building address_coord address_street address_zipcode borough cuisine grades_0 name restaurant_id +58ada47de5a51ddfcd5ed51c 1007 [-73.856077, 40.848447] Morris Park Ave 10462 Bronx Bakery { "date" : { "$date" : 1393804800000 }, "grade" : "A", "score" : 2 } Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d 469 [-73.961704, 40.662942] Flatbush Avenue 11225 Brooklyn Hamburgers { "date" : { "$date" : 1419897600000 }, "grade" : "A", "score" : 8 } Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e 351 [-73.98513559999999, 40.7676919] West 57 Street 10019 Manhattan Irish { "date" : { "$date" : 1409961600000 }, "grade" : "A", "score" : 2 } Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f 2780 [-73.98241999999999, 40.579505] Stillwell Avenue 11224 Brooklyn American { "date" : { "$date" : 1402358400000 }, "grade" : "A", "score" : 5 } Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 97-22 [-73.8601152, 40.7311739] 63 Road 11374 Queens Jewish/Kosher { "date" : { "$date" : 1416787200000 }, "grade" : "Z", "score" : 20 } Tov Kosher Kitchen 40356068 +DROP TABLE t1; +# +# Dropping a column +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants DATA_CHARSET=utf8 +COLIST='{"grades":0}' OPTION_LIST='Driver=Java,Version=3,level=0' ; +SELECT * FROM t1 LIMIT 10; +_id address borough cuisine name restaurant_id +58ada47de5a51ddfcd5ed51c { "building" : "1007", "coord" : [-73.856077, 40.848447], "street" : "Morris Park Ave", "zipcode" : "10462" } Bronx Bakery Morris Park Bake Shop 30075445 +58ada47de5a51ddfcd5ed51d { "building" : "469", "coord" : [-73.961704, 40.662942], "street" : "Flatbush Avenue", "zipcode" : "11225" } Brooklyn Hamburgers Wendy'S 30112340 +58ada47de5a51ddfcd5ed51e { "building" : "351", "coord" : [-73.98513559999999, 40.7676919], "street" : "West 57 Street", "zipcode" : "10019" } Manhattan Irish Dj Reynolds Pub And Restaurant 30191841 +58ada47de5a51ddfcd5ed51f { "building" : "2780", "coord" : [-73.98241999999999, 40.579505], "street" : "Stillwell Avenue", "zipcode" : "11224" } Brooklyn American Riviera Caterer 40356018 +58ada47de5a51ddfcd5ed520 { "building" : "97-22", "coord" : [-73.8601152, 40.7311739], "street" : "63 Road", "zipcode" : "11374" } Queens Jewish/Kosher Tov Kosher Kitchen 40356068 +58ada47de5a51ddfcd5ed521 { "building" : "8825", "coord" : [-73.8803827, 40.7643124], "street" : "Astoria Boulevard", "zipcode" : "11369" } Queens American Brunos On The Boulevard 40356151 +58ada47de5a51ddfcd5ed522 { "building" : "2206", "coord" : [-74.1377286, 40.6119572], "street" : "Victory Boulevard", "zipcode" : "10314" } Staten Island Jewish/Kosher Kosher Island 40356442 +58ada47de5a51ddfcd5ed523 { "building" : "7114", "coord" : [-73.9068506, 40.6199034], "street" : "Avenue U", "zipcode" : "11234" } Brooklyn Delicatessen Wilken'S Fine Food 40356483 +58ada47de5a51ddfcd5ed524 { "building" : "6409", "coord" : [-74.00528899999999, 40.628886], "street" : "11 Avenue", "zipcode" : "11219" } Brooklyn American Regina Caterers 40356649 +58ada47de5a51ddfcd5ed525 { "building" : "1839", "coord" : [-73.9482609, 40.6408271], "street" : "Nostrand Avenue", "zipcode" : "11226" } Brooklyn Ice Cream, Gelato, Yogurt, Ices Taste The Tropics Ice Cream 40356731 +DROP TABLE t1; +# +# Specifying Jpath +# +CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(64) NOT NULL, +cuisine CHAR(200) NOT NULL, +borough CHAR(16) NOT NULL, +street VARCHAR(65) FIELD_FORMAT='address.street', +building CHAR(16) FIELD_FORMAT='address.building', +zipcode CHAR(5) FIELD_FORMAT='address.zipcode', +grade CHAR(1) FIELD_FORMAT='grades.0.grade', +score INT(4) NOT NULL FIELD_FORMAT='grades.0.score', +`date` DATE FIELD_FORMAT='grades.0.date', +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='restaurants' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=3' ; +SELECT * FROM t1 LIMIT 1; +_id 58ada47de5a51ddfcd5ed51c +name Morris Park Bake Shop +cuisine Bakery +borough Bronx +street Morris Park Ave +building 1007 +zipcode 10462 +grade A +score 2 +date 2014-03-03 +restaurant_id 30075445 +SELECT name, street, score, date FROM t1 LIMIT 5; +name street score date +Morris Park Bake Shop Morris Park Ave 2 2014-03-03 +Wendy'S Flatbush Avenue 8 2014-12-30 +Dj Reynolds Pub And Restaurant West 57 Street 2 2014-09-06 +Riviera Caterer Stillwell Avenue 5 2014-06-10 +Tov Kosher Kitchen 63 Road 20 2014-11-24 +SELECT name, cuisine, borough FROM t1 WHERE grade = 'A' LIMIT 10; +name cuisine borough +Morris Park Bake Shop Bakery Bronx +Wendy'S Hamburgers Brooklyn +Dj Reynolds Pub And Restaurant Irish Manhattan +Riviera Caterer American Brooklyn +Kosher Island Jewish/Kosher Staten Island +Wilken'S Fine Food Delicatessen Brooklyn +Regina Caterers American Brooklyn +Taste The Tropics Ice Cream Ice Cream, Gelato, Yogurt, Ices Brooklyn +Wild Asia American Bronx +C & C Catering Service American Brooklyn +SELECT COUNT(*) FROM t1 WHERE grade = 'A'; +COUNT(*) +20687 +SELECT * FROM t1 WHERE cuisine = 'English'; +_id name cuisine borough street building zipcode grade score date restaurant_id +58ada47de5a51ddfcd5ed83d Tea And Sympathy English Manhattan Greenwich Avenue 108 10011 A 8 2014-10-23 40391531 +58ada47de5a51ddfcd5ed85c Tartine English Manhattan West 11 Street 253 10014 A 11 2014-08-14 40392496 +58ada47de5a51ddfcd5ee1f3 The Park Slope Chipshop English Brooklyn 5 Avenue 383 11215 B 17 2014-09-29 40816202 +58ada47de5a51ddfcd5ee7e4 Pound And Pence English Manhattan Liberty Street 55 10005 A 7 2014-02-11 41022701 +58ada47de5a51ddfcd5ee999 Chip Shop English Brooklyn Atlantic Avenue 129 11201 A 9 2014-10-08 41076583 +58ada47ee5a51ddfcd5efe3f The Breslin Bar & Dining Room English Manhattan West 29 Street 16 10001 A 13 2014-06-09 41443706 +58ada47ee5a51ddfcd5efe99 Highlands Restaurant English Manhattan West 10 Street 150 10014 A 12 2014-10-22 41448559 +58ada47ee5a51ddfcd5f0413 The Fat Radish English Manhattan Orchard Street 17 10002 A 12 2014-07-26 41513545 +58ada47ee5a51ddfcd5f0777 Jones Wood Foundry English Manhattan East 76 Street 401 10021 A 12 2014-12-03 41557377 +58ada47ee5a51ddfcd5f0ea2 Whitehall English Manhattan Greenwich Avenue 19 10014 Z 15 2015-01-16 41625263 +58ada47ee5a51ddfcd5f1004 The Churchill Tavern English Manhattan East 28 Street 45 10016 A 13 2014-08-27 41633327 +58ada47ee5a51ddfcd5f13d5 The Monro English Brooklyn 5 Avenue 481 11215 A 7 2014-06-03 41660253 +58ada47ee5a51ddfcd5f1454 The Cock & Bull English Manhattan West 45 Street 23 10036 A 7 2014-08-07 41664704 +58ada47ee5a51ddfcd5f176e Dear Bushwick English Brooklyn Wilson Avenue 41 11237 A 12 2014-12-27 41690534 +58ada47ee5a51ddfcd5f1e91 Snowdonia Pub English Queens 32 Street 34-55 11106 A 12 2014-10-28 50000290 +58ada47ee5a51ddfcd5f2ddc Oscar'S Place English Manhattan Hudson Street 466 10014 A 10 2014-08-18 50011097 +SELECT * FROM t1 WHERE score = building; +_id name cuisine borough street building zipcode grade score date restaurant_id +DROP TABLE t1; +# +# Specifying Filter +# +CREATE TABLE t1 ( +_id CHAR(24) NOT NULL, +name CHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +restaurant_id CHAR(8) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants DATA_CHARSET=utf8 +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +OPTION_LIST='Driver=Java,Version=3' ; +SELECT name FROM t1 WHERE borough = 'Queens'; +name +La Baraka Restaurant +Air France Lounge +Tournesol +Winegasm +Cafe Henri +Bistro 33 +Domaine Wine Bar +Cafe Triskell +Cannelle Patisserie +La Vie +Dirty Pierres Bistro +Fresca La Crepe +Bliss 46 Bistro +Bear +Cuisine By Claudette +Paris Baguette +The Baroness Bar +Francis Cafe +Madame Sou Sou +Crepe 'N' Tearia +Aperitif Bayside Llc +DROP TABLE t1; +# +# Testing pipeline +# +CREATE TABLE t1 ( +name VARCHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +date DATETIME NOT NULL, +grade CHAR(1) NOT NULL, +score INT(4) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='restaurants' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$match":{"cuisine":"French"}},{"$unwind":"$grades"},{"$project":{"_id":0,"name":1,"borough":1,"date":"$grades.date","grade":"$grades.grade","score":"$grades.score"}}]}' +OPTION_LIST='Driver=Java,Version=3,Pipeline=1' ; +SELECT * FROM t1 LIMIT 10; +name borough date grade score +Tout Va Bien Manhattan 2014-11-10 01:00:00 B 15 +Tout Va Bien Manhattan 2014-04-03 02:00:00 A 13 +Tout Va Bien Manhattan 2013-07-17 02:00:00 C 36 +Tout Va Bien Manhattan 2013-02-06 01:00:00 B 22 +Tout Va Bien Manhattan 2012-07-16 02:00:00 C 36 +Tout Va Bien Manhattan 2012-03-08 01:00:00 C 7 +La Grenouille Manhattan 2014-04-09 02:00:00 A 10 +La Grenouille Manhattan 2013-03-05 01:00:00 A 9 +La Grenouille Manhattan 2012-02-02 01:00:00 A 13 +Le Perigord Manhattan 2014-07-14 02:00:00 B 14 +SELECT name, grade, score, date FROM t1 WHERE borough = 'Bronx'; +name grade score date +Bistro Sk A 10 2014-11-21 01:00:00 +Bistro Sk A 12 2014-02-19 01:00:00 +Bistro Sk B 18 2013-06-12 02:00:00 +DROP TABLE t1; +# +# try level 2 discovery +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME=restaurants +FILTER='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' +COLIST='{"cuisine":0}' +OPTION_LIST='Driver=Java,level=2,version=3'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `_id` char(24) NOT NULL, + `address_building` char(6) NOT NULL `FIELD_FORMAT`='address.building', + `address_coord_0` double(18,14) NOT NULL `FIELD_FORMAT`='address.coord.0', + `address_street` char(25) NOT NULL `FIELD_FORMAT`='address.street', + `address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode', + `borough` char(13) NOT NULL, + `grades_0_date` datetime NOT NULL `FIELD_FORMAT`='grades.0.date', + `grades_0_grade` char(14) NOT NULL `FIELD_FORMAT`='grades.0.grade', + `grades_0_score` int(2) NOT NULL `FIELD_FORMAT`='grades.0.score', + `name` char(32) NOT NULL, + `restaurant_id` char(8) NOT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='MONGO' `TABNAME`='restaurants' `COLIST`='{"cuisine":0}' `FILTER`='{"cuisine":"French","borough":{"$ne":"Manhattan"}}' `OPTION_LIST`='Driver=Java,level=2,version=3' +SELECT name, borough, address_street, grades_0_score AS score FROM t1 WHERE grades_0_grade = 'B'; +name borough address_street score +Le Gamin Brooklyn Vanderbilt Avenue 24 +Bistro 33 Queens Ditmars Boulevard 15 +Dirty Pierres Bistro Queens Station Square 22 +Santos Anne Brooklyn Union Avenue 26 +Le Paddock Brooklyn Prospect Avenue 17 +La Crepe Et La Vie Brooklyn Foster Avenue 24 +Francis Cafe Queens Ditmars Boulevard 19 +DROP TABLE t1; +# +# try CRUD operations +# +false +CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' +OPTION_LIST='Driver=Java,Version=3' ; +DELETE FROM t1; +INSERT INTO t1 VALUES(0,NULL),(1,'One'),(2,'Two'),(3,'Three'); +SELECT * FROM t1; +_id msg +0 NULL +1 One +2 Two +3 Three +UPDATE t1 SET msg = 'Deux' WHERE _id = 2; +DELETE FROM t1 WHERE msg IS NULL; +SELECT * FROM t1; +_id msg +1 One +2 Deux +3 Three +DELETE FROM t1; +DROP TABLE t1; +true +# +# List states whose population is equal or more than 10 millions +# +false +CREATE TABLE t1 ( +_id char(5) NOT NULL, +city char(16) NOT NULL, +loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', +loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', +pop int(11) NOT NULL, +state char(2) NOT NULL) +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities' +OPTION_LIST='Driver=Java,Version=3' DATA_CHARSET='utf8'; +# Using SQL for grouping +SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; +state totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +# Using a pipeline for grouping +CREATE TABLE t1 (_id CHAR(2) NOT NULL, totalPop INT(11) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='cities' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"$group":{"_id":"$state","totalPop":{"$sum":"$pop"}}},{"$match":{"totalPop":{"$gte":10000000}}},{"$sort":{"totalPop":-1}}]}' +OPTION_LIST='Driver=Java,Version=3,Pipeline=1' ; +SELECT * FROM t1; +_id totalPop +CA 29754890 +NY 17990402 +TX 16984601 +FL 12686644 +PA 11881643 +IL 11427576 +OH 10846517 +DROP TABLE t1; +true +# +# Test making array +# +CREATE TABLE t1 ( +_id int(4) NOT NULL, +item CHAR(8) NOT NULL, +prices_0 INT(6) FIELD_FORMAT='prices.0', +prices_1 INT(6) FIELD_FORMAT='prices.1', +prices_2 INT(6) FIELD_FORMAT='prices.2', +prices_3 INT(6) FIELD_FORMAT='prices.3', +prices_4 INT(6) FIELD_FORMAT='prices.4') +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' DATA_CHARSET=utf8 +OPTION_LIST='Driver=Java,Version=3' ; +INSERT INTO t1 VALUES +(1,'journal',87,45,63,12,78), +(2,'notebook',123,456,789,NULL,NULL), +(3,'paper',5,7,3,8,NULL), +(4,'planner',25,71,NULL,44,27), +(5,'postcard',5,7,3,8,NULL); +SELECT * FROM t1; +_id item prices_0 prices_1 prices_2 prices_3 prices_4 +1 journal 87 45 63 12 78 +2 notebook 123 456 789 NULL NULL +3 paper 5 7 3 8 NULL +4 planner 25 71 NULL 44 27 +5 postcard 5 7 3 8 NULL +DROP TABLE t1; +# +# Test array aggregation +# +CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=MONGO TABNAME='testcoll' +COLIST='{"pipeline":[{"$project":{"_id":0,"item":1,"total":{"$sum":"$prices"},"average":{"$avg":"$prices"}}}]}' +OPTION_LIST='Driver=Java,Version=3,Pipeline=YES' ; +SELECT * FROM t1; +item total average +journal 285 57.00 +notebook 1368 456.00 +paper 23 5.75 +planner 167 41.75 +postcard 23 5.75 +DROP TABLE t1; +true diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mul_new.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mul_new.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mul_new.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mul_new.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,136 @@ +# +# Testing multiple 1 +# +CREATE TABLE t1 ( +Chiffre int(3) NOT NULL, +Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='num1.csv' LRECL=20 HEADER=1; +INSERT INTO t1 VALUES(1,'One'),(2,'Two'),(3,'Three'),(4,'Four'),(5,'Five'),(6,'Six'); +SELECT * FROM t1; +Chiffre Lettre +1 One +2 Two +3 Three +4 Four +5 Five +6 Six +CREATE TABLE t2 ( +Chiffre int(3) NOT NULL, +Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='subdir/num2.csv' LRECL=20 HEADER=1; +INSERT INTO t2 VALUES(7,'Seven'),(8,'Eight'),(9,'Nine'),(10,'Ten'),(11,'Eleven'),(12,'Twelve'); +SELECT * FROM t2; +Chiffre Lettre +7 Seven +8 Eight +9 Nine +10 Ten +11 Eleven +12 Twelve +CREATE TABLE t3 ( +Chiffre int(3) NOT NULL, +Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='num3.csv' LRECL=20 HEADER=1; +INSERT INTO t3 VALUES(13,'Thirteen'),(14,'Fourteen'),(15,'Fifteen'),(16,'Sixteen'),(17,'Seventeen'),(18,'Eighteen'); +SELECT * FROM t3; +Chiffre Lettre +13 Thirteen +14 Fourteen +15 Fifteen +16 Sixteen +17 Seventeen +18 Eighteen +CREATE TABLE t4 ( +Chiffre int(3) NOT NULL, +Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='subdir/num4.csv' LRECL=20 HEADER=1; +INSERT INTO t4 VALUES(19,'Nineteen'),(20,'Twenty'),(21,'Twenty one'),(22,'Twenty two'),(23,'Tenty three'),(24,'Twenty four'); +SELECT * FROM t4; +Chiffre Lettre +19 Nineteen +20 Twenty +21 Twenty one +22 Twenty two +23 Tenty three +24 Twenty four +CREATE TABLE t5 ( +Chiffre int(3) NOT NULL, +Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='num5.csv' LRECL=20 HEADER=1; +INSERT INTO t5 VALUES(25,'Twenty five'),(26,'Twenty six'),(27,'Twenty seven'),(28,'Twenty eight'),(29,'Tenty eight'),(30,'Thirty'); +SELECT * FROM t5; +Chiffre Lettre +25 Twenty five +26 Twenty six +27 Twenty seven +28 Twenty eight +29 Tenty eight +30 Thirty +CREATE TABLE t_all ( +Chiffre int(3) not null, +Lettre char(16) not null) +ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='num?.csv' HEADER=1 LRECL=20 MULTIPLE=1; +SELECT * FROM t_all ORDER BY Chiffre; +Chiffre Lettre +1 One +2 Two +3 Three +4 Four +5 Five +6 Six +13 Thirteen +14 Fourteen +15 Fifteen +16 Sixteen +17 Seventeen +18 Eighteen +25 Twenty five +26 Twenty six +27 Twenty seven +28 Twenty eight +29 Tenty eight +30 Thirty +# +# Testing multiple 3 +# +ALTER TABLE t_all MULTIPLE=3; +Warnings: +Warning 1105 This is an outward table, table data were not modified. +SELECT * FROM t_all ORDER BY Chiffre; +Chiffre Lettre +1 One +2 Two +3 Three +4 Four +5 Five +6 Six +7 Seven +8 Eight +9 Nine +10 Ten +11 Eleven +12 Twelve +13 Thirteen +14 Fourteen +15 Fifteen +16 Sixteen +17 Seventeen +18 Eighteen +19 Nineteen +20 Twenty +21 Twenty one +22 Twenty two +23 Tenty three +24 Twenty four +25 Twenty five +26 Twenty six +27 Twenty seven +28 Twenty eight +29 Tenty eight +30 Thirty +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP TABLE t5; +DROP TABLE t_all; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mysql_exec.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mysql_exec.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mysql_exec.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mysql_exec.result 2017-12-21 15:48:50.000000000 +0000 @@ -15,7 +15,7 @@ "insert into t1(msg) values('One'),(NULL),('Three')", "insert into t1 values(2,'Deux') on duplicate key update msg = 'Two'", "insert into t1(message) values('Four'),('Five'),('Six')", -'insert into t1(id) values(NULL)', +'insert ignore into t1(id) values(NULL)', "update t1 set msg = 'Four' where id = 4", 'select * from t1'); command warnings number message @@ -26,7 +26,7 @@ Warning 0 1048 Column 'msg' cannot be null insert into t1 values(2,'Deux') on duplicate key update msg = 'Two' 0 2 Affected rows insert into t1(message) values('Four'),('Five'),('Six') 0 1054 Remote: Unknown column 'message' in 'field list' -insert into t1(id) values(NULL) 1 1 Affected rows +insert ignore into t1(id) values(NULL) 1 1 Affected rows Warning 0 1364 Field 'msg' doesn't have a default value update t1 set msg = 'Four' where id = 4 0 1 Affected rows select * from t1 0 2 Result set columns @@ -39,9 +39,9 @@ CREATE PROCEDURE p1(cmd varchar(512)) READS SQL DATA SELECT * FROM t1 WHERE command IN ('Warning','Note',cmd); -CALL p1('insert into t1(id) values(NULL)'); +CALL p1('insert ignore into t1(id) values(NULL)'); command warnings number message -insert into t1(id) values(NULL) 1 1 Affected rows +insert ignore into t1(id) values(NULL) 1 1 Affected rows Warning 0 1364 Field 'msg' doesn't have a default value CALL p1('update t1 set msg = "Five" where id = 5'); command warnings number message diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mysql_new.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mysql_new.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mysql_new.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mysql_new.result 2017-12-21 15:48:50.000000000 +0000 @@ -23,7 +23,7 @@ ERROR HY000: (1049) Unknown database 'unknown' CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/unknown'; -ERROR HY000: (1146) Table 'test.unknown' doesn't exist [SHOW FULL COLUMNS FROM unknown FROM test] +ERROR HY000: (1146) Table 'test.unknown' doesn't exist [SHOW FULL COLUMNS FROM `unknown` FROM test] SHOW CREATE TABLE t1; ERROR 42S02: Table 'test.t1' doesn't exist CREATE TABLE t1 (x int, y char(10)) ENGINE=CONNECT TABLE_TYPE=MYSQL @@ -188,7 +188,7 @@ `d` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `e` year(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 -INSERT INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); +INSERT IGNORE INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); Warnings: Note 1265 Data truncated for column 'a' at row 1 Note 1265 Data truncated for column 'c' at row 1 diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mysql.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mysql.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/mysql.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/mysql.result 2017-12-21 15:48:50.000000000 +0000 @@ -17,7 +17,7 @@ CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL OPTION_LIST='host=localhost,user=root,port=PORT' DBNAME='unknown' TABNAME='t1'; ERROR HY000: (1049) Unknown database 'unknown' CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL TABNAME='unknown' OPTION_LIST='host=localhost,user=root,port=PORT'; -ERROR HY000: (1146) Table 'test.unknown' doesn't exist [SHOW FULL COLUMNS FROM unknown FROM test] +ERROR HY000: (1146) Table 'test.unknown' doesn't exist [SHOW FULL COLUMNS FROM `unknown` FROM test] SHOW CREATE TABLE t2; ERROR 42S02: Table 'test.t2' doesn't exist CREATE TABLE t2 (x int, y char(10)) ENGINE=CONNECT TABLE_TYPE=MYSQL TABNAME='t1' OPTION_LIST='host=localhost,user=root,port=PORT'; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/odbc_firebird.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/odbc_firebird.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/odbc_firebird.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/odbc_firebird.result 2017-12-21 15:48:50.000000000 +0000 @@ -9,29 +9,13 @@ ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources' SELECT * FROM t1; Name Description -dBASE Files Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) -PLUGDB_DEBUG PLUGODBC_Driver -PLUGDB_ODBC PLUGODBC_Driver -SafeDB_ODBC SDB_ODBC_Driver -Firebird Firebird/InterBase(r) driver -ConnectEngineXLS Microsoft Excel Driver (*.xls) Excel Files Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) -MariaODBC MySQL ODBC 5.2a Driver -MariaODBCbeta MariaDB ODBC 1.0 Driver -MyODBC MySQL ODBC 5.2a Driver MS Access Database Microsoft Access Driver (*.mdb, *.accdb) -MS Access Db1 Microsoft Access Driver (*.mdb) -MySQL-ANSI MySQL ODBC 5.3 ANSI Driver -MySQL-Unicode MySQL ODBC 5.3 Unicode Driver -Xtreme Sample Database 2008 Microsoft Access Driver (*.mdb) -PlugDB test PLUGODBC_Driver -SQLite3 Datasource SQLite3 ODBC Driver -SQLite Datasource SQLite ODBC Driver -SQLite UTF-8 Datasource SQLite ODBC (UTF-8) Driver ORACLE_TEST Oracle in XE -ConnectEnginePostgresql PostgreSQL ODBC Driver(ANSI) +SQLServer_Test SQL Server Native Client 11.0 +Firebird Firebird/InterBase(r) driver ConnectEngineOracle Oracle in XE -ConnectEngineSQLServer SQL Server +ConnectEngineSQLServer SQL Server Native Client 11.0 DROP TABLE t1; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Drivers; SHOW CREATE TABLE t1; @@ -42,51 +26,12 @@ ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Drivers' SELECT * FROM t1; Description Attributes -SQL Server UsageCount=1;SQLLevel=1;FileUsage=0;DriverODBCVer=03.50;ConnectFunctions=YYY;APILevel=2;CPTimeout=60; -Microsoft ODBC for Oracle UsageCount=1;SQLLevel=1;FileUsage=0;DriverODBCVer=02.50;ConnectFunctions=YYY;APILevel=1;CPTimeout=120; -Microsoft Access Driver (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0; -Microsoft Access-Treiber (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0; -Driver do Microsoft Access (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0; -Microsoft dBase Driver (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0; -Microsoft dBase-Treiber (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0; -Driver do Microsoft dBase (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0; -Microsoft Excel Driver (*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0; -Microsoft Excel-Treiber (*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0; -Driver do Microsoft Excel(*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0; -Microsoft Paradox Driver (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0; -Microsoft Paradox-Treiber (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0; -Driver do Microsoft Paradox (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0; -Microsoft Text Driver (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0; -Microsoft Text-Treiber (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0; -Driver da Microsoft para arquivos texto (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0; -Microsoft Visual FoxPro Driver UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Microsoft FoxPro VFP Driver (*.dbf) UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Microsoft dBase VFP Driver (*.dbf) UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Microsoft Visual FoxPro-Treiber UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Driver para o Microsoft Visual FoxPro UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -SQL Native Client UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=09.00;FileUsage=0;SQLLevel=1; -CR Sybase Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=0;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -CR SQL Server Native Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=1;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -CR SQL Server Classic Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=1;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -CR TextFile ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=1;FileExtns=*.*;SQLLevel=0;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -PLUGODBC_Driver UsageCount=1; -SDB_ODBC_Driver UsageCount=2; -Microsoft Access Text Driver (*.txt, *.csv) SQLLevel=0;FileExtns=*.txt, *.csv;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) SQLLevel=0;FileExtns=*.dbf, *.ndx, *.mdx;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) SQLLevel=0;FileExtns=*.xls,*.xlsx, *.xlsb;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -Microsoft Access Driver (*.mdb, *.accdb) SQLLevel=0;FileExtns=*.mdb,*.accdb;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -SQLite3 ODBC Driver UsageCount=1; -SQLite ODBC Driver UsageCount=1; -SQLite ODBC (UTF-8) Driver UsageCount=1; +SQL Server APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.50;FileUsage=0;SQLLevel=1;UsageCount=1; Oracle in XE ConnectionFunctions=YYY;DriverODBCVer=03.51;CPTimeout=60;FileUsage=0;APILevel=1;SQLLevel=1; -Oracle in instantclient_12_1 APILevel=1;ConnectionFunctions=YYY;CPTimeout=60;DriverODBCVer=03.51;FileUsage=0;SQLLevel=1; -PostgreSQL ODBC Driver(ANSI) APILevel=1;ConnectFunctions=YYN;DriverODBCVer=09.02.0100;FileUsage=0;SQLLevel=1; -PostgreSQL ODBC Driver(UNICODE) APILevel=1;ConnectFunctions=YYN;DriverODBCVer=09.02.0100;FileUsage=0;SQLLevel=1; SQL Server Native Client 11.0 UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1; -MariaDB ODBC 1.0 Driver UsageCount=1; +ODBC Driver 13 for SQL Server UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1; +SQL Server Native Client RDA 11.0 UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1; Firebird/InterBase(r) driver UsageCount=1;FileExtns=*.fdb,*.gdb;APILevel=1;ConnectFunctions=YYY;FileUsage=0;DriverODBCVer=03.51;SQLLevel=1; -MySQL ODBC 5.3 ANSI Driver UsageCount=1; -MySQL ODBC 5.3 Unicode Driver UsageCount=1; DROP TABLE t1; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Tables CONNECTION='Not important'; SHOW CREATE TABLE t1; @@ -154,9 +99,9 @@ 113 Mary Page 845 1993-04-12 00:00:00 671 Eng 4 USA 48000.00 Page, Mary 114 Bill Parker 247 1993-06-01 00:00:00 623 Eng 5 USA 35000.00 Parker, Bill 118 Takashi Yamamoto 23 1993-07-01 00:00:00 115 SRep 4 Japan 7480000.00 Yamamoto, Takashi -121 Roberto Ferrari 1 1993-07-12 00:00:00 125 SRep 4 Italy 99000000.00 Ferrari, Roberto +121 Roberto Ferrari 1 1993-07-12 00:00:00 125 SRep 4 Italy 33000.00 Ferrari, Roberto 127 Michael Yanowski 492 1993-08-09 00:00:00 100 SRep 4 USA 44000.00 Yanowski, Michael -134 Jacques Glon NULL 1993-08-23 00:00:00 123 SRep 4 France 390500.00 Glon, Jacques +134 Jacques Glon NULL 1993-08-23 00:00:00 123 SRep 4 France 38500.00 Glon, Jacques 136 Scott Johnson 265 1993-09-13 00:00:00 623 Doc 3 USA 60000.00 Johnson, Scott 138 T.J. Green 218 1993-11-01 00:00:00 621 Eng 4 USA 36000.00 Green, T.J. 141 Pierre Osborne NULL 1994-01-03 00:00:00 121 SRep 4 Switzerland 110000.00 Osborne, Pierre diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/tbl.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/tbl.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/tbl.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/tbl.result 2017-12-21 15:48:50.000000000 +0000 @@ -141,22 +141,3 @@ DROP TABLE t2; DROP TABLE t3; DROP TABLE t4; -# -# Checking thread TBL tables -# -CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v'; -SELECT * FROM t1; -v -11 -CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v'; -SELECT * FROM t2; -v -22 -CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';; -SELECT * FROM total order by v desc; -v -22 -11 -DROP TABLE total; -DROP TABLE t1; -DROP TABLE t2; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/tbl_thread.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/tbl_thread.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/tbl_thread.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/tbl_thread.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,152 @@ +CREATE DATABASE connect; +CREATE DATABASE connect; +# +# Checking thread TBL tables +# +CREATE TABLE t1 (a int, b char(10)); +INSERT INTO t1 VALUES (0,'test00'),(1,'test01'),(2,'test02'),(3,'test03'); +SELECT * FROM t1; +a b +0 test00 +1 test01 +2 test02 +3 test03 +CREATE TABLE rt2 (a int, b char(10)); +INSERT INTO rt2 VALUES (4,'test04'),(5,'test05'),(6,'test06'),(7,'test07'); +SELECT * FROM rt2; +a b +4 test04 +5 test05 +6 test06 +7 test07 +USE test; +CREATE TABLE rt3 (a int, b char(10)); +INSERT INTO rt3 VALUES (8,'test08'),(9,'test09'),(10,'test10'),(11,'test11'); +SELECT * FROM rt3; +a b +8 test08 +9 test09 +10 test10 +11 test11 +CREATE TABLE rt4 (a int, b char(10)); +INSERT INTO rt4 VALUES (12,'test12'),(13,'test13'),(14,'test14'),(15,'test15'); +SELECT * FROM rt4; +a b +12 test12 +13 test13 +14 test14 +15 test15 +CREATE TABLE rt5 (a int, b char(10)); +INSERT INTO rt5 VALUES (16,'test16'),(17,'test17'),(18,'test18'),(19,'test19'); +SELECT * FROM rt5; +a b +16 test16 +17 test17 +18 test18 +19 test19 +CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:MASTER_PORT/test/rt2'; +SELECT * FROM t2; +a b +4 test04 +5 test05 +6 test06 +7 test07 +CREATE TABLE t3 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/rt3'; +SELECT * FROM t3; +a b +8 test08 +9 test09 +10 test10 +11 test11 +CREATE TABLE t4 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/rt4'; +SELECT * FROM t4; +a b +12 test12 +13 test13 +14 test14 +15 test15 +CREATE TABLE t5 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/rt5'; +SELECT * FROM t5; +a b +16 test16 +17 test17 +18 test18 +19 test19 +CREATE TABLE total (a int, b char(10)) +ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2,t3,t4,t5' +OPTION_LIST='thread=yes,port=PORT'; +set connect_xtrace=1; +SELECT * FROM total order by a desc; +a b +19 test19 +18 test18 +17 test17 +16 test16 +15 test15 +14 test14 +13 test13 +12 test12 +11 test11 +10 test10 +9 test09 +8 test08 +7 test07 +6 test06 +5 test05 +4 test04 +3 test03 +2 test02 +1 test01 +0 test00 +set connect_xtrace=0; +DROP TABLE rt2; +DROP TABLE rt3,rt4,rt5; +DROP TABLE t1,t2,t3,t4,t5,total; +# +# Old thread TBL tables test modified +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v' OPTION_LIST='port=MASTER_PORT'; +SELECT * FROM t1; +v +11 +CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v' OPTION_LIST='port=SLAVE_PORT'; +SELECT * FROM t2; +v +22 +CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';; +set connect_xtrace=1; +SELECT * FROM total order by v desc; +v +22 +11 +set connect_xtrace=0; +DROP TABLE t1,t2,total; +# +# Old thread TBL tables test not modified (suppressed until MDEV-10179 is fixed) +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v'; +SELECT * FROM t1; +v +11 +CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v'; +SELECT * FROM t2; +v +22 +CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';; +set connect_xtrace=1; +SELECT * FROM total order by v desc; +v +22 +11 +set connect_xtrace=0; +DROP TABLE total; +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE IF EXISTS connect.t1; +DROP DATABASE IF EXISTS connect; +DROP TABLE IF EXISTS connect.t1; +DROP DATABASE IF EXISTS connect; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/unsigned.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/unsigned.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/unsigned.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/unsigned.result 2017-12-21 15:48:50.000000000 +0000 @@ -27,13 +27,13 @@ SELECT * FROM t1; a b c d e 255 65535 4294967295 18446744073709551615 18446744073709551615 -UPDATE t1 SET c = d; +UPDATE IGNORE t1 SET c = d; Warnings: Warning 1264 Out of range value for column 'c' at row 1 SELECT * FROM t1; a b c d e 255 65535 4294967295 18446744073709551615 18446744073709551615 -UPDATE t1 SET c = e; +UPDATE IGNORE t1 SET c = e; Warnings: Warning 1264 Out of range value for column 'c' at row 1 SELECT * FROM t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/upd.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/upd.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/upd.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/upd.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,3 +1,4 @@ +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; CREATE TABLE employee ( serialno CHAR(5) NOT NULL, @@ -1625,3 +1626,4 @@ # DROP PROCEDURE test.tst_up; DROP TABLE employee; +SET sql_mode = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_grant.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_grant.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_grant.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_grant.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,97 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +# +# Beginning of grant.inc +# +CREATE USER user@localhost; +GRANT ALL PRIVILEGES ON *.* TO user@localhost; +REVOKE FILE ON *.* FROM user@localhost; +SELECT user(); +user() +user@localhost +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row'; +Warnings: +Warning 1105 No file name. Table will use t1.xml +INSERT INTO t1 VALUES (10); +SELECT * FROM t1; +a +10 +UPDATE t1 SET a=20; +SELECT * FROM t1; +a +20 +DELETE FROM t1; +SELECT * FROM t1; +a +INSERT INTO t1 VALUES(10); +TRUNCATE TABLE t1; +SELECT * FROM t1; +a +CREATE VIEW v1 AS SELECT * FROM t1; +SELECT * FROM v1; +a +DROP VIEW v1; +DROP TABLE t1; +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row' FILE_NAME='t1.EXT'; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +SELECT user(); +user() +root@localhost +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row' FILE_NAME='t1.EXT'; +INSERT INTO t1 VALUES (10); +SELECT user(); +user() +user@localhost +INSERT INTO t1 VALUES (10); +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +SELECT * FROM t1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +UPDATE t1 SET a=20; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +DELETE FROM t1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +TRUNCATE TABLE t1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +ALTER TABLE t1 READONLY=1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +ALTER TABLE t1 FILE_NAME='t2.EXT'; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +DROP TABLE t1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +CREATE VIEW v1 AS SELECT * FROM t1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +# Testing a VIEW created with FILE privileges but accessed with no FILE +SELECT user(); +user() +root@localhost +CREATE SQL SECURITY INVOKER VIEW v1 AS SELECT * FROM t1; +SELECT user(); +user() +user@localhost +SELECT * FROM v1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +INSERT INTO v1 VALUES (2); +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +UPDATE v1 SET a=123; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +DELETE FROM v1; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +SELECT user(); +user() +root@localhost +DROP VIEW v1; +DROP TABLE t1; +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row'; +Warnings: +Warning 1105 No file name. Table will use t1.xml +INSERT INTO t1 VALUES (10); +SELECT user(); +user() +user@localhost +ALTER TABLE t1 FILE_NAME='t1.EXT'; +ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) +DROP TABLE t1; +DROP USER user@localhost; +# +# End of grant.inc +# diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_html.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_html.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_html.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_html.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,32 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +SET NAMES utf8; +# +# Testing HTML like XML file +# +CREATE TABLE beers ( +`Name` CHAR(16) FIELD_FORMAT='brandName', +`Origin` CHAR(16) FIELD_FORMAT='origin', +`Description` CHAR(32) FIELD_FORMAT='details') +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='beers.xml' +TABNAME='table' OPTION_LIST='xmlsup=libxml2,rownode=tr,colnode=td'; +SELECT * FROM beers; +Name Origin Description +Huntsman Bath, UK Wonderful hop, light alcohol +Tuborg Danmark In small bottles +DROP TABLE beers; +# +# Testing HTML file +# +CREATE TABLE coffee ( +`Name` CHAR(16), +`Cups` INT(8), +`Type` CHAR(16), +`Sugar` CHAR(4)) +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='coffee.htm' +TABNAME='TABLE' HEADER=1 OPTION_LIST='xmlsup=libxml2,Coltype=HTML'; +SELECT * FROM coffee; +Name Cups Type Sugar +T. Sexton 10 Espresso No +J. Dinnen 5 Decaf Yes +DROP TABLE coffee; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_mdev5261.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_mdev5261.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_mdev5261.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_mdev5261.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,25 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +SET NAMES utf8; +CREATE TABLE t1 (i INT UNIQUE NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=libxml2,Rownode=N'; +ERROR HY000: Table type XML is not indexable +CREATE TABLE t1 (i INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=libxml2,Rownode=N'; +DESCRIBE t1; +Field Type Null Key Default Extra +i int(11) NO NULL +ALTER TABLE t1 ADD UNIQUE(i); +ERROR HY000: Table type XML is not indexable +CREATE UNIQUE INDEX i ON t1(i); +ERROR HY000: Table type XML is not indexable +DESCRIBE t1; +Field Type Null Key Default Extra +i int(11) NO NULL +INSERT INTO t1 VALUES(2),(5),(7); +SELECT * FROM t1 WHERE i = 5; +i +5 +ALTER TABLE t1 DROP INDEX i; +ERROR 42000: Can't DROP 'i'; check that column/key exists +DROP INDEX i ON t1; +ERROR 42000: Can't DROP 'i'; check that column/key exists +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_mult.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_mult.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_mult.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_mult.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,102 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +SET NAMES utf8; +# +# Testing expanded values +# +CREATE TABLE `bookstore` ( +`category` CHAR(16) NOT NULL FIELD_FORMAT='@', +`title` VARCHAR(50) NOT NULL, +`lang` char(2) NOT NULL FIELD_FORMAT='title/@', +`author` VARCHAR(24) NOT NULL, +`year` INT(4) NOT NULL, +`price` DOUBLE(8,2) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='bookstore.xml' OPTION_LIST='expand=1,mulnode=author,limit=6,xmlsup=libxml2'; +SELECT * FROM bookstore; +category title lang author year price +COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 +CHILDREN Harry Potter en J K. Rowling 2005 29.99 +WEB XQuery Kick Start en James McGovern 2003 49.99 +WEB XQuery Kick Start en Per Bothner 2003 49.99 +WEB XQuery Kick Start en Kurt Cagle 2003 49.99 +WEB XQuery Kick Start en James Linn 2003 49.99 +WEB XQuery Kick Start en Vaidyanathan Nagarajan 2003 49.99 +WEB Learning XML en Erik T. Ray 2003 39.95 +SELECT category, title, price FROM bookstore; +category title price +COOKING Everyday Italian 30.00 +CHILDREN Harry Potter 29.99 +WEB XQuery Kick Start 49.99 +WEB Learning XML 39.95 +SELECT category, title, author, price FROM bookstore WHERE author LIKE '%K%'; +category title author price +CHILDREN Harry Potter J K. Rowling 29.99 +WEB XQuery Kick Start Kurt Cagle 49.99 +WEB Learning XML Erik T. Ray 39.95 +SELECT category, title, price FROM bookstore WHERE author LIKE 'J%'; +category title price +CHILDREN Harry Potter 29.99 +WEB XQuery Kick Start 49.99 +WEB XQuery Kick Start 49.99 +# +# Limiting expanded values +# +ALTER TABLE bookstore OPTION_LIST='expand=1,mulnode=author,limit=3,xmlsup=libxml2'; +SELECT * FROM bookstore; +category title lang author year price +COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 +CHILDREN Harry Potter en J K. Rowling 2005 29.99 +WEB XQuery Kick Start en James McGovern 2003 49.99 +WEB XQuery Kick Start en Per Bothner 2003 49.99 +WEB XQuery Kick Start en Kurt Cagle 2003 49.99 +WEB Learning XML en Erik T. Ray 2003 39.95 +Warnings: +Warning 1105 Mutiple values limited to 3 +# One line lost because the where clause is applied only on the first 3 rows +SELECT category, title, author, price FROM bookstore WHERE author LIKE 'J%'; +category title author price +CHILDREN Harry Potter J K. Rowling 29.99 +WEB XQuery Kick Start James McGovern 49.99 +Warnings: +Warning 1105 Mutiple values limited to 3 +# +# Testing concatenated values +# +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=6,xmlsup=libxml2'; +# truncated +SELECT * FROM bookstore; +category title lang author year price +COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 +CHILDREN Harry Potter en J K. Rowling 2005 29.99 +WEB XQuery Kick Start en James McGovern, Per Both 2003 49.99 +WEB Learning XML en Erik T. Ray 2003 39.95 +Warnings: +Warning 1105 Truncated author content +# increase author size +ALTER TABLE bookstore MODIFY `author` VARCHAR(128) NOT NULL; +SELECT * FROM bookstore; +category title lang author year price +COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 +CHILDREN Harry Potter en J K. Rowling 2005 29.99 +WEB XQuery Kick Start en James McGovern, Per Bothner, Kurt Cagle, James Linn, Vaidyanathan Nagarajan 2003 49.99 +WEB Learning XML en Erik T. Ray 2003 39.95 +# +# Limiting concatenated values +# +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=4,xmlsup=libxml2'; +SELECT * FROM bookstore; +category title lang author year price +COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 +CHILDREN Harry Potter en J K. Rowling 2005 29.99 +WEB XQuery Kick Start en James McGovern, Per Bothner, Kurt Cagle, James Linn 2003 49.99 +WEB Learning XML en Erik T. Ray 2003 39.95 +Warnings: +Warning 1105 Mutiple values limited to 4 +# The where clause is applied on the concatenated column result +SELECT category, title, author, price FROM bookstore WHERE author LIKE 'J%'; +category title author price +CHILDREN Harry Potter J K. Rowling 29.99 +WEB XQuery Kick Start James McGovern, Per Bothner, Kurt Cagle, James Linn 49.99 +Warnings: +Warning 1105 Mutiple values limited to 4 +DROP TABLE bookstore; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,431 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +SET NAMES utf8; +# +# Testing tag values +# +CREATE TABLE t1 +( +AUTHOR CHAR(50), +TITLE CHAR(32), +TRANSLATOR CHAR(40), +PUBLISHER CHAR(40), +DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t1; +AUTHOR Jean-Christophe Bernadac +TITLE Construire une application XML +TRANSLATOR NULL +PUBLISHER Eyrolles Paris +DATEPUB 1999 +AUTHOR William J. Pardi +TITLE XML en Action +TRANSLATOR James Guerin +PUBLISHER Microsoft Press Paris +DATEPUB 1999 +DROP TABLE t1; +# +# Testing that tag names are case sensitive +# +CREATE TABLE t1 +( +author CHAR(50), +TITLE CHAR(32), +TRANSLATOR CHAR(40), +PUBLISHER CHAR(40), +DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t1; +author NULL +TITLE Construire une application XML +TRANSLATOR NULL +PUBLISHER Eyrolles Paris +DATEPUB 1999 +author NULL +TITLE XML en Action +TRANSLATOR James Guerin +PUBLISHER Microsoft Press Paris +DATEPUB 1999 +DROP TABLE t1; +# +# Testing attribute values +# +CREATE TABLE t1 ( +ISBN CHAR(15), +LANG CHAR(2), +SUBJECT CHAR(32) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='Coltype=@,xmlsup=libxml2'; +SELECT * FROM t1; +ISBN 9782212090819 +LANG fr +SUBJECT applications +ISBN 9782840825685 +LANG fr +SUBJECT applications +DROP TABLE t1; +# +# Testing that attribute names are case sensitive +# +CREATE TABLE t1 ( +isbn CHAR(15), +LANG CHAR(2), +SUBJECT CHAR(32) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='Coltype=@,xmlsup=libxml2'; +SELECT * FROM t1; +isbn NULL +LANG fr +SUBJECT applications +isbn NULL +LANG fr +SUBJECT applications +DROP TABLE t1; +# +# Testing mixed tag and attribute values +# +CREATE TABLE t1 ( +ISBN CHAR(15) FIELD_FORMAT='@', +LANG CHAR(2) FIELD_FORMAT='@', +SUBJECT CHAR(32) FIELD_FORMAT='@', +AUTHOR CHAR(50), +TITLE CHAR(32), +TRANSLATOR CHAR(40), +PUBLISHER CHAR(40), +DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK' + OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t1; +ISBN 9782212090819 +LANG fr +SUBJECT applications +AUTHOR Jean-Christophe Bernadac +TITLE Construire une application XML +TRANSLATOR NULL +PUBLISHER Eyrolles Paris +DATEPUB 1999 +ISBN 9782840825685 +LANG fr +SUBJECT applications +AUTHOR William J. Pardi +TITLE XML en Action +TRANSLATOR James Guerin +PUBLISHER Microsoft Press Paris +DATEPUB 1999 +DROP TABLE t1; +# +# Testing INSERT on mixed tag and attribute values +# +CREATE TABLE t1 ( +ISBN CHAR(15) FIELD_FORMAT='@', +LANG CHAR(2) FIELD_FORMAT='@', +SUBJECT CHAR(32) FIELD_FORMAT='@', +AUTHOR CHAR(50), +TITLE CHAR(32), +TRANSLATOR CHAR(40), +PUBLISHER CHAR(40), +DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.xml' + TABNAME='BIBLIO' + OPTION_LIST='rownode=BOOK,xmlsup=libxml2'; +INSERT INTO t1 (ISBN, LANG, SUBJECT, AUTHOR, TITLE, PUBLISHEr, DATEPUB) +VALUES('9782212090529','fr','général','Alain Michard', +'XML, Langage et Applications','Eyrolles Paris',1998); +SELECT * FROM t1; +ISBN 9782212090819 +LANG fr +SUBJECT applications +AUTHOR Jean-Christophe Bernadac +TITLE Construire une application XML +TRANSLATOR NULL +PUBLISHER Eyrolles Paris +DATEPUB 1999 +ISBN 9782840825685 +LANG fr +SUBJECT applications +AUTHOR William J. Pardi +TITLE XML en Action +TRANSLATOR James Guerin +PUBLISHER Microsoft Press Paris +DATEPUB 1999 +ISBN 9782212090529 +LANG fr +SUBJECT général +AUTHOR Alain Michard +TITLE XML, Langage et Applications +TRANSLATOR NULL +PUBLISHER Eyrolles Paris +DATEPUB 1998 +SELECT LOAD_FILE('MYSQLD_DATADIR/test/xsample2.xml') AS xml; +xml + + + + Jean-Christophe + Bernadac + + + François + Knab + + Construire une application XML + + Eyrolles + Paris + + 1999 + + + + William J. + Pardi + + + James + Guerin + + XML en Action + + Microsoft Press + Paris + + 1999 + + + Alain Michard + XML, Langage et Applications + Eyrolles Paris + 1998 + + + +DROP TABLE t1; +# +# Testing XPath +# +CREATE TABLE t1 ( +isbn CHAR(15) FIELD_FORMAT='@ISBN', +language CHAR(2) FIELD_FORMAT='@LANG', +subject CHAR(32) FIELD_FORMAT='@SUBJECT', +authorfn CHAR(20) FIELD_FORMAT='AUTHOR/FIRSTNAME', +authorln CHAR(20) FIELD_FORMAT='AUTHOR/LASTNAME', +title CHAR(32) FIELD_FORMAT='TITLE', +translated CHAR(32) FIELD_FORMAT='TRANSLATOR/@PREFIX', +tranfn CHAR(20) FIELD_FORMAT='TRANSLATOR/FIRSTNAME', +tranln CHAR(20) FIELD_FORMAT='TRANSLATOR/LASTNAME', +publisher CHAR(20) FIELD_FORMAT='PUBLISHER/NAME', +location CHAR(20) FIELD_FORMAT='PUBLISHER/PLACE', +year INT(4) FIELD_FORMAT='DATEPUB' +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; +SELECT * FROM t1; +isbn 9782212090819 +language fr +subject applications +authorfn Jean-Christophe +authorln Bernadac +title Construire une application XML +translated NULL +tranfn NULL +tranln NULL +publisher Eyrolles +location Paris +year 1999 +isbn 9782840825685 +language fr +subject applications +authorfn William J. +authorln Pardi +title XML en Action +translated adapté de l'anglais par +tranfn James +tranln Guerin +publisher Microsoft Press +location Paris +year 1999 +SELECT isbn, title, translated, tranfn, tranln, location FROM t1 +WHERE translated <> ''; +isbn 9782840825685 +title XML en Action +translated adapté de l'anglais par +tranfn James +tranln Guerin +location Paris +DROP TABLE t1; +# +# Testing that XPath is case sensitive +# +CREATE TABLE t1 +( +isbn CHAR(15) FIELD_FORMAT='@isbn' +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; +SELECT * FROM t1; +isbn NULL +isbn NULL +DROP TABLE t1; +# +# Testing character sets +# +CREATE TABLE t1 +( +c CHAR(16) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2' + DATA_CHARSET=latin1; +ERROR HY000: DATA_CHARSET='latin1' is not supported for TABLE_TYPE=XML +CREATE TABLE t1 +( +c CHAR(16) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2' + DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +Table t1 +Create Table CREATE TABLE `t1` ( + `c` char(16) DEFAULT NULL +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=XML `FILE_NAME`='latin1.xml' `OPTION_LIST`='xmlsup=libxml2' `DATA_CHARSET`=utf8 +SELECT c, HEX(c) FROM t1; +c ÁÂÃÄÅÆÇ +HEX(c) C1C2C3C4C5C6C7 +DROP TABLE t1; +CREATE TABLE t1 +( +c CHAR(16) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT c, HEX(c) FROM t1; +c ÁÂÃÄÅÆÇ +HEX(c) C1C2C3C4C5C6C7 +DROP TABLE t1; +CREATE TABLE t1 +( +c CHAR(16) CHARACTER SET utf8 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT c, HEX(c) FROM t1; +c ÁÂÃÄÅÆÇ +HEX(c) C381C382C383C384C385C386C387 +DROP TABLE t1; +# +# Conversion from latin1 to cp1251 produces a warning. +# Question marks are returned. +# +CREATE TABLE t1 +( +c CHAR(16) CHARACTER SET cp1251 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT c, HEX(c) FROM t1; +c ??????? +HEX(c) 3F3F3F3F3F3F3F +Warnings: +Level Warning +Code 1366 +Message Incorrect string value: '\xC3\x81\xC3\x82\xC3\x83...' for column 'c' at row 1 +Level Warning +Code 1105 +Message Out of range value ÁÂÃÄÅÆÇ for column 'c' at row 1 +DROP TABLE t1; +# +# Testing Cyrillic +# +CREATE TABLE t1 +( +c CHAR(16) CHARACTER SET utf8 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' + OPTION_LIST='xmlsup=libxml2,rownode=b'; +SELECT * FROM t1; +c БВГДЕЖЗ +INSERT INTO t1 VALUES ('ИКЛМН'); +SELECT c, HEX(c) FROM t1; +c БВГДЕЖЗ +HEX(c) D091D092D093D094D095D096D097 +c ИКЛМН +HEX(c) D098D09AD09BD09CD09D +DROP TABLE t1; +CREATE TABLE t1 +( +c CHAR(16) CHARACTER SET cp1251 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' + OPTION_LIST='xmlsup=libxml2,rownode=b'; +SELECT * FROM t1; +c БВГДЕЖЗ +c ИКЛМН +INSERT INTO t1 VALUES ('ОПРСТ'); +SELECT c, HEX(c) FROM t1; +c БВГДЕЖЗ +HEX(c) C1C2C3C4C5C6C7 +c ИКЛМН +HEX(c) C8CACBCCCD +c ОПРСТ +HEX(c) CECFD0D1D2 +DROP TABLE t1; +# +# Testing that the underlying file is created with a proper Encoding +# +CREATE TABLE t1 (node VARCHAR(50)) +CHARACTER SET latin1 +ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' + OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=utf-8'; +INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); +SELECT node, hex(node) FROM t1; +node ÀÁÂÃ +hex(node) C0C1C2C3 +DROP TABLE t1; +SET @a=LOAD_FILE('MYSQLD_DATADIR/test/t1.xml'); +SELECT LEFT(@a,38); +LEFT(@a,38) +SELECT HEX(EXTRACTVALUE(@a,'/t1/line/node')); +HEX(EXTRACTVALUE(@a,'/t1/line/node')) C380C381C382C383 +CREATE TABLE t1 (node VARCHAR(50)) +CHARACTER SET latin1 +ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' + OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; +INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); +SELECT node, hex(node) FROM t1; +node ÀÁÂÃ +hex(node) C0C1C2C3 +DROP TABLE t1; +SET @a=LOAD_FILE('MYSQLD_DATADIR/test/t1.xml'); +SELECT LEFT(@a,43); +LEFT(@a,43) +SELECT HEX(EXTRACTVALUE(@a,'/t1/line/node')); +HEX(EXTRACTVALUE(@a,'/t1/line/node')) C0C1C2C3 +# +# Testing XML entities +# +CREATE TABLE t1 (node VARCHAR(50)) +CHARACTER SET utf8 +ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' + OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; +INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); +INSERT INTO t1 VALUES (_cp1251 0xC0C1C2C3); +INSERT INTO t1 VALUES ('&<>"\''); +SELECT node, hex(node) FROM t1; +node ÀÁÂÃ +hex(node) C380C381C382C383 +node АБВГ +hex(node) D090D091D092D093 +node &<>"' +hex(node) 263C3E2227 +DROP TABLE t1; +SET @a=LOAD_FILE('MYSQLD_DATADIR/test/t1.xml'); +SELECT CAST(@a AS CHAR CHARACTER SET latin1); +CAST(@a AS CHAR CHARACTER SET latin1) + + + + ÀÁÂÃ + + + АБВГ + + + &<>"' + + + diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_zip.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_zip.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml2_zip.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml2_zip.result 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,98 @@ +Warnings: +Warning 1105 No file name. Table will use t1.xml +# +# Testing zipped XML tables +# +CREATE TABLE t1 ( +ISBN CHAR(13) NOT NULL FIELD_FORMAT='@', +LANG CHAR(2) NOT NULL FIELD_FORMAT='@', +SUBJECT CHAR(12) NOT NULL FIELD_FORMAT='@', +AUTHOR_FIRSTNAME CHAR(15) NOT NULL FIELD_FORMAT='AUTHOR/FIRSTNAME', +AUTHOR_LASTNAME CHAR(8) NOT NULL FIELD_FORMAT='AUTHOR/LASTNAME', +TRANSLATOR_PREFIX CHAR(24) DEFAULT NULL FIELD_FORMAT='TRANSLATOR/@PREFIX', +TRANSLATOR_FIRSTNAME CHAR(6) DEFAULT NULL FIELD_FORMAT='TRANSLATOR/FIRSTNAME', +TRANSLATOR_LASTNAME CHAR(6) DEFAULT NULL FIELD_FORMAT='TRANSLATOR/LASTNAME', +TITLE CHAR(30) NOT NULL, +PUBLISHER_NAME CHAR(15) NOT NULL FIELD_FORMAT='PUBLISHER/NAME', +PUBLISHER_PLACE CHAR(5) NOT NULL FIELD_FORMAT='PUBLISHER/PLACE', +DATEPUB CHAR(4) NOT NULL +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES +OPTION_LIST='entry=xsample2.xml,load=xsample2.xml,rownode=BOOK,xmlsup=libxml2,expand=1,mulnode=AUTHOR'; +SELECT * FROM t1; +ISBN 9782212090819 +LANG fr +SUBJECT applications +AUTHOR_FIRSTNAME Jean-Christophe +AUTHOR_LASTNAME Bernadac +TRANSLATOR_PREFIX NULL +TRANSLATOR_FIRSTNAME NULL +TRANSLATOR_LASTNAME NULL +TITLE Construire une application XML +PUBLISHER_NAME Eyrolles +PUBLISHER_PLACE Paris +DATEPUB 1999 +ISBN 9782212090819 +LANG fr +SUBJECT applications +AUTHOR_FIRSTNAME Franois +AUTHOR_LASTNAME Knab +TRANSLATOR_PREFIX NULL +TRANSLATOR_FIRSTNAME NULL +TRANSLATOR_LASTNAME NULL +TITLE Construire une application XML +PUBLISHER_NAME Eyrolles +PUBLISHER_PLACE Paris +DATEPUB 1999 +ISBN 9782840825685 +LANG fr +SUBJECT applications +AUTHOR_FIRSTNAME William J. +AUTHOR_LASTNAME Pardi +TRANSLATOR_PREFIX adapt de l'anglais par +TRANSLATOR_FIRSTNAME James +TRANSLATOR_LASTNAME Guerin +TITLE XML en Action +PUBLISHER_NAME Microsoft Press +PUBLISHER_PLACE Paris +DATEPUB 1999 +ISBN 9782212090529 +LANG fr +SUBJECT gnral +AUTHOR_FIRSTNAME Alain +AUTHOR_LASTNAME Michard +TRANSLATOR_PREFIX NULL +TRANSLATOR_FIRSTNAME NULL +TRANSLATOR_LASTNAME NULL +TITLE XML, Langage et Applications +PUBLISHER_NAME Eyrolles +PUBLISHER_PLACE Paris +DATEPUB 2003 +CREATE TABLE t2 +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES +OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t2; +ISBN 9782212090819 +LANG fr +SUBJECT applications +AUTHOR Jean-Christophe Bernadac +TRANSLATOR NULL +TITLE Construire une application XML +PUBLISHER Eyrolles Paris +DATEPUB 1999 +ISBN 9782840825685 +LANG fr +SUBJECT applications +AUTHOR William J. Pardi +TRANSLATOR James Guerin +TITLE XML en Action +PUBLISHER Microsoft Press Paris +DATEPUB 1999 +ISBN 9782212090529 +LANG fr +SUBJECT gnral +AUTHOR Alain Michard +TRANSLATOR NULL +TITLE XML, Langage et Applications +PUBLISHER Eyrolles Paris +DATEPUB 2003 +DROP TABLE t1,t2; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_grant.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_grant.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_grant.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_grant.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,3 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml # # Beginning of grant.inc # @@ -9,7 +7,7 @@ SELECT user(); user() user@localhost -CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row'; +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=domdoc,rownode=row'; Warnings: Warning 1105 No file name. Table will use t1.xml INSERT INTO t1 VALUES (10); @@ -32,12 +30,12 @@ a DROP VIEW v1; DROP TABLE t1; -CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row' FILE_NAME='t1.EXT'; +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=domdoc,rownode=row' FILE_NAME='t1.EXT'; ERROR 28000: Access denied for user 'user'@'localhost' (using password: NO) SELECT user(); user() root@localhost -CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row' FILE_NAME='t1.EXT'; +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=domdoc,rownode=row' FILE_NAME='t1.EXT'; INSERT INTO t1 VALUES (10); SELECT user(); user() @@ -81,7 +79,7 @@ root@localhost DROP VIEW v1; DROP TABLE t1; -CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row'; +CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML OPTION_LIST='xmlsup=domdoc,rownode=row'; Warnings: Warning 1105 No file name. Table will use t1.xml INSERT INTO t1 VALUES (10); diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_html.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_html.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_html.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_html.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,3 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml SET NAMES utf8; # # Testing HTML like XML file @@ -9,7 +7,7 @@ `Origin` CHAR(16) FIELD_FORMAT='origin', `Description` CHAR(32) FIELD_FORMAT='details') ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='beers.xml' -TABNAME='table' OPTION_LIST='xmlsup=libxml2,rownode=tr,colnode=td'; +TABNAME='table' OPTION_LIST='xmlsup=domdoc,rownode=tr,colnode=td'; SELECT * FROM beers; Name Origin Description Huntsman Bath, UK Wonderful hop, light alcohol @@ -24,7 +22,7 @@ `Type` CHAR(16), `Sugar` CHAR(4)) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='coffee.htm' -TABNAME='TABLE' HEADER=1 OPTION_LIST='xmlsup=libxml2,Coltype=HTML'; +TABNAME='TABLE' HEADER=1 OPTION_LIST='xmlsup=domdoc,Coltype=HTML'; SELECT * FROM coffee; Name Cups Type Sugar T. Sexton 10 Espresso No diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_mdev5261.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_mdev5261.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_mdev5261.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_mdev5261.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,9 +1,7 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml SET NAMES utf8; -CREATE TABLE t1 (i INT UNIQUE NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='Rownode=N'; +CREATE TABLE t1 (i INT UNIQUE NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=domdoc,Rownode=N'; ERROR HY000: Table type XML is not indexable -CREATE TABLE t1 (i INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='Rownode=N'; +CREATE TABLE t1 (i INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=domdoc,Rownode=N'; DESCRIBE t1; Field Type Null Key Default Extra i int(11) NO NULL diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_mult.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_mult.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_mult.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_mult.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,3 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml SET NAMES utf8; # # Testing expanded values @@ -11,7 +9,7 @@ `author` VARCHAR(24) NOT NULL, `year` INT(4) NOT NULL, `price` DOUBLE(8,2) NOT NULL) -ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='bookstore.xml' OPTION_LIST='expand=1,mulnode=author,limit=6,xmlsup=libxml2'; +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='bookstore.xml' OPTION_LIST='expand=1,mulnode=author,limit=6,xmlsup=domdoc'; SELECT * FROM bookstore; category title lang author year price COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 @@ -41,7 +39,7 @@ # # Limiting expanded values # -ALTER TABLE bookstore OPTION_LIST='expand=1,mulnode=author,limit=3,xmlsup=libxml2'; +ALTER TABLE bookstore OPTION_LIST='expand=1,mulnode=author,limit=3,xmlsup=domdoc'; SELECT * FROM bookstore; category title lang author year price COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 @@ -62,7 +60,7 @@ # # Testing concatenated values # -ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=6,xmlsup=libxml2'; +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=6,xmlsup=domdoc'; # truncated SELECT * FROM bookstore; category title lang author year price @@ -83,7 +81,7 @@ # # Limiting concatenated values # -ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=4,xmlsup=libxml2'; +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=4,xmlsup=domdoc'; SELECT * FROM bookstore; category title lang author year price COOKING Everyday Italian en Giada De Laurentiis 2005 30.00 diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,3 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml SET NAMES utf8; # # Testing tag values @@ -12,7 +10,7 @@ PUBLISHER CHAR(40), DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t1; AUTHOR Jean-Christophe Bernadac TITLE Construire une application XML @@ -36,7 +34,7 @@ PUBLISHER CHAR(40), DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t1; author NULL TITLE Construire une application XML @@ -57,7 +55,7 @@ LANG CHAR(2), SUBJECT CHAR(32) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='Coltype=@,xmlsup=libxml2'; + OPTION_LIST='Coltype=@,xmlsup=domdoc'; SELECT * FROM t1; ISBN 9782212090819 LANG fr @@ -74,7 +72,7 @@ LANG CHAR(2), SUBJECT CHAR(32) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='Coltype=@,xmlsup=libxml2'; + OPTION_LIST='Coltype=@,xmlsup=domdoc'; SELECT * FROM t1; isbn NULL LANG fr @@ -97,7 +95,7 @@ DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t1; ISBN 9782212090819 LANG fr @@ -130,7 +128,7 @@ DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.xml' TABNAME='BIBLIO' - OPTION_LIST='rownode=BOOK,xmlsup=libxml2'; + OPTION_LIST='rownode=BOOK,xmlsup=domdoc'; INSERT INTO t1 (ISBN, LANG, SUBJECT, AUTHOR, TITLE, PUBLISHEr, DATEPUB) VALUES('9782212090529','fr','général','Alain Michard', 'XML, Langage et Applications','Eyrolles Paris',1998); @@ -160,47 +158,47 @@ PUBLISHER Eyrolles Paris DATEPUB 1998 SELECT LOAD_FILE('MYSQLD_DATADIR/test/xsample2.xml') AS xml; -xml - - - - Jean-Christophe - Bernadac - - - François - Knab - - Construire une application XML - - Eyrolles - Paris - - 1999 - - - - William J. - Pardi - - - James - Guerin - - XML en Action - - Microsoft Press - Paris - - 1999 - - - Alain Michard - XML, Langage et Applications - Eyrolles Paris - 1998 - - +xml + + + + Jean-Christophe + Bernadac + + + François + Knab + + Construire une application XML + + Eyrolles + Paris + + 1999 + + + + William J. + Pardi + + + James + Guerin + + XML en Action + + Microsoft Press + Paris + + 1999 + + + Alain Michard + XML, Langage et Applications + Eyrolles Paris + 1998 + + DROP TABLE t1; # @@ -220,7 +218,7 @@ location CHAR(20) FIELD_FORMAT='PUBLISHER/PLACE', year INT(4) FIELD_FORMAT='DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=domdoc'; SELECT * FROM t1; isbn 9782212090819 language fr @@ -262,7 +260,7 @@ ( isbn CHAR(15) FIELD_FORMAT='@isbn' ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=domdoc'; SELECT * FROM t1; isbn NULL isbn NULL @@ -274,20 +272,20 @@ ( c CHAR(16) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2' + OPTION_LIST='xmlsup=domdoc' DATA_CHARSET=latin1; ERROR HY000: DATA_CHARSET='latin1' is not supported for TABLE_TYPE=XML CREATE TABLE t1 ( c CHAR(16) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2' + OPTION_LIST='xmlsup=domdoc' DATA_CHARSET=utf8; SHOW CREATE TABLE t1; Table t1 Create Table CREATE TABLE `t1` ( `c` char(16) DEFAULT NULL -) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=XML `FILE_NAME`='latin1.xml' `OPTION_LIST`='xmlsup=libxml2' `DATA_CHARSET`=utf8 +) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=XML `FILE_NAME`='latin1.xml' `OPTION_LIST`='xmlsup=domdoc' `DATA_CHARSET`=utf8 SELECT c, HEX(c) FROM t1; c ÁÂÃÄÅÆÇ HEX(c) C1C2C3C4C5C6C7 @@ -296,7 +294,7 @@ ( c CHAR(16) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT c, HEX(c) FROM t1; c ÁÂÃÄÅÆÇ HEX(c) C1C2C3C4C5C6C7 @@ -305,7 +303,7 @@ ( c CHAR(16) CHARACTER SET utf8 ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT c, HEX(c) FROM t1; c ÁÂÃÄÅÆÇ HEX(c) C381C382C383C384C385C386C387 @@ -318,7 +316,7 @@ ( c CHAR(16) CHARACTER SET cp1251 ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT c, HEX(c) FROM t1; c ??????? HEX(c) 3F3F3F3F3F3F3F @@ -333,44 +331,13 @@ # # Testing Cyrillic # -CREATE TABLE t1 -( -c CHAR(16) CHARACTER SET utf8 -) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' - OPTION_LIST='xmlsup=libxml2,rownode=b'; -SELECT * FROM t1; -c БВГДЕЖЗ -INSERT INTO t1 VALUES ('ИКЛМН'); -SELECT c, HEX(c) FROM t1; -c БВГДЕЖЗ -HEX(c) D091D092D093D094D095D096D097 -c ИКЛМН -HEX(c) D098D09AD09BD09CD09D -DROP TABLE t1; -CREATE TABLE t1 -( -c CHAR(16) CHARACTER SET cp1251 -) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' - OPTION_LIST='xmlsup=libxml2,rownode=b'; -SELECT * FROM t1; -c БВГДЕЖЗ -c ИКЛМН -INSERT INTO t1 VALUES ('ОПРСТ'); -SELECT c, HEX(c) FROM t1; -c БВГДЕЖЗ -HEX(c) C1C2C3C4C5C6C7 -c ИКЛМН -HEX(c) C8CACBCCCD -c ОПРСТ -HEX(c) CECFD0D1D2 -DROP TABLE t1; # # Testing that the underlying file is created with a proper Encoding # CREATE TABLE t1 (node VARCHAR(50)) CHARACTER SET latin1 ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' - OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=utf-8'; + OPTION_LIST='xmlsup=domdoc,rownode=line,encoding=utf-8'; INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); SELECT node, hex(node) FROM t1; node ÀÁÂÃ @@ -384,7 +351,7 @@ CREATE TABLE t1 (node VARCHAR(50)) CHARACTER SET latin1 ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' - OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; + OPTION_LIST='xmlsup=domdoc,rownode=line,encoding=iso-8859-1'; INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); SELECT node, hex(node) FROM t1; node ÀÁÂÃ @@ -401,31 +368,26 @@ CREATE TABLE t1 (node VARCHAR(50)) CHARACTER SET utf8 ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' - OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; + OPTION_LIST='xmlsup=domdoc,rownode=line,encoding=iso-8859-1'; INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); INSERT INTO t1 VALUES (_cp1251 0xC0C1C2C3); +Warnings: +Level Warning +Code 1105 +Message Com error: Unable to save character to 'iso-8859-1' encoding. + INSERT INTO t1 VALUES ('&<>"\''); SELECT node, hex(node) FROM t1; -node ÀÁÂÃ -hex(node) C380C381C382C383 -node АБВГ -hex(node) D090D091D092D093 node &<>"' hex(node) 263C3E2227 DROP TABLE t1; SET @a=LOAD_FILE('MYSQLD_DATADIR/test/t1.xml'); SELECT CAST(@a AS CHAR CHARACTER SET latin1); -CAST(@a AS CHAR CHARACTER SET latin1) - - - - ÀÁÂÃ - - - АБВГ - - - &<>"' - - +CAST(@a AS CHAR CHARACTER SET latin1) + + + + &<>"' + + diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_zip.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_zip.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/xml_zip.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/xml_zip.result 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,3 @@ -Warnings: -Warning 1105 No file name. Table will use t1.xml # # Testing zipped XML tables # @@ -17,7 +15,7 @@ PUBLISHER_PLACE CHAR(5) NOT NULL FIELD_FORMAT='PUBLISHER/PLACE', DATEPUB CHAR(4) NOT NULL ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES -OPTION_LIST='entry=xsample2.xml,load=xsample2.xml,rownode=BOOK,xmlsup=libxml2,expand=1,mulnode=AUTHOR'; +OPTION_LIST='entry=xsample2.xml,load=xsample2.xml,rownode=BOOK,xmlsup=domdoc,expand=1,mulnode=AUTHOR'; SELECT * FROM t1; ISBN 9782212090819 LANG fr @@ -69,7 +67,7 @@ DATEPUB 2003 CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES -OPTION_LIST='xmlsup=libxml2'; +OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t2; ISBN 9782212090819 LANG fr diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/zip.result mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/zip.result --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/r/zip.result 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/r/zip.result 2017-12-21 15:48:50.000000000 +0000 @@ -171,16 +171,16 @@ # CREATE TABLE t1 ( _id INT(2) NOT NULL, -name_first CHAR(9) NOT NULL FIELD_FORMAT='name:first', -name_aka CHAR(4) DEFAULT NULL FIELD_FORMAT='name:aka', -name_last CHAR(10) NOT NULL FIELD_FORMAT='name:last', +name_first CHAR(9) NOT NULL FIELD_FORMAT='$.name.first', +name_aka CHAR(4) DEFAULT NULL FIELD_FORMAT='$.name.aka', +name_last CHAR(10) NOT NULL FIELD_FORMAT='$.name.last', title CHAR(12) DEFAULT NULL, birth CHAR(20) DEFAULT NULL, death CHAR(20) DEFAULT NULL, -contribs CHAR(7) NOT NULL FIELD_FORMAT='contribs:', -awards_award CHAR(42) DEFAULT NULL FIELD_FORMAT='awards::award', -awards_year CHAR(4) DEFAULT NULL FIELD_FORMAT='awards::year', -awards_by CHAR(38) DEFAULT NULL FIELD_FORMAT='awards::by' +contribs CHAR(7) NOT NULL FIELD_FORMAT='$.contribs', +awards_award CHAR(42) DEFAULT NULL FIELD_FORMAT='$.awards.award', +awards_year CHAR(4) DEFAULT NULL FIELD_FORMAT='$.awards.year', +awards_by CHAR(38) DEFAULT NULL FIELD_FORMAT='$.awards.by' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bios.zip' OPTION_LIST='ENTRY=bios.json,LOAD=bios.json' ZIPPED=YES; SELECT * FROM t1; _id name_first name_aka name_last title birth death contribs awards_award awards_year awards_by @@ -211,16 +211,16 @@ 10 Martin NULL Odersky NULL NULL NULL Scala NULL NULL NULL CREATE TABLE t3 ( _id INT(2) NOT NULL, -firstname CHAR(9) NOT NULL FIELD_FORMAT='name:first', -aka CHAR(4) DEFAULT NULL FIELD_FORMAT='name:aka', -lastname CHAR(10) NOT NULL FIELD_FORMAT='name:last', +firstname CHAR(9) NOT NULL FIELD_FORMAT='$.name.first', +aka CHAR(4) DEFAULT NULL FIELD_FORMAT='$.name.aka', +lastname CHAR(10) NOT NULL FIELD_FORMAT='$.name.last', title CHAR(12) DEFAULT NULL, birth date DEFAULT NULL date_format="YYYY-DD-MM'T'hh:mm:ss'Z'", death date DEFAULT NULL date_format="YYYY-DD-MM'T'hh:mm:ss'Z'", -contribs CHAR(64) NOT NULL FIELD_FORMAT='contribs:[", "]', -award CHAR(42) DEFAULT NULL FIELD_FORMAT='awards:[x]:award', -year CHAR(4) DEFAULT NULL FIELD_FORMAT='awards:[x]:year', -`by` CHAR(38) DEFAULT NULL FIELD_FORMAT='awards:[x]:by' +contribs CHAR(64) NOT NULL FIELD_FORMAT='$.contribs.[", "]', +award CHAR(42) DEFAULT NULL FIELD_FORMAT='$.awards[*].award', +year CHAR(4) DEFAULT NULL FIELD_FORMAT='$.awards[*].year', +`by` CHAR(38) DEFAULT NULL FIELD_FORMAT='$.awards[*].by' ) ENGINE=CONNECT TABLE_TYPE='json' FILE_NAME='bios.zip' ZIPPED=YES; SELECT * FROM t3 WHERE _id = 1; _id firstname aka lastname title birth death contribs award year by diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/std_data/cities.json mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/std_data/cities.json --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/std_data/cities.json 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/std_data/cities.json 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,29353 @@ +{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" } +{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51564999999999, 42.377017 ], "pop" : 36963, "state" : "MA" } +{ "_id" : "01005", "city" : "BARRE", "loc" : [ -72.10835400000001, 42.409698 ], "pop" : 4546, "state" : "MA" } +{ "_id" : "01007", "city" : "BELCHERTOWN", "loc" : [ -72.41095300000001, 42.275103 ], "pop" : 10579, "state" : "MA" } +{ "_id" : "01008", "city" : "BLANDFORD", "loc" : [ -72.936114, 42.182949 ], "pop" : 1240, "state" : "MA" } +{ "_id" : "01010", "city" : "BRIMFIELD", "loc" : [ -72.188455, 42.116543 ], "pop" : 3706, "state" : "MA" } +{ "_id" : "01011", "city" : "CHESTER", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" } +{ "_id" : "01012", "city" : "CHESTERFIELD", "loc" : [ -72.833309, 42.38167 ], "pop" : 177, "state" : "MA" } +{ "_id" : "01013", "city" : "CHICOPEE", "loc" : [ -72.607962, 42.162046 ], "pop" : 23396, "state" : "MA" } +{ "_id" : "01020", "city" : "CHICOPEE", "loc" : [ -72.576142, 42.176443 ], "pop" : 31495, "state" : "MA" } +{ "_id" : "01022", "city" : "WESTOVER AFB", "loc" : [ -72.558657, 42.196672 ], "pop" : 1764, "state" : "MA" } +{ "_id" : "01026", "city" : "CUMMINGTON", "loc" : [ -72.905767, 42.435296 ], "pop" : 1484, "state" : "MA" } +{ "_id" : "01027", "city" : "MOUNT TOM", "loc" : [ -72.67992099999999, 42.264319 ], "pop" : 16864, "state" : "MA" } +{ "_id" : "01028", "city" : "EAST LONGMEADOW", "loc" : [ -72.505565, 42.067203 ], "pop" : 13367, "state" : "MA" } +{ "_id" : "01030", "city" : "FEEDING HILLS", "loc" : [ -72.675077, 42.07182 ], "pop" : 11985, "state" : "MA" } +{ "_id" : "01031", "city" : "GILBERTVILLE", "loc" : [ -72.19858499999999, 42.332194 ], "pop" : 2385, "state" : "MA" } +{ "_id" : "01032", "city" : "GOSHEN", "loc" : [ -72.844092, 42.466234 ], "pop" : 122, "state" : "MA" } +{ "_id" : "01033", "city" : "GRANBY", "loc" : [ -72.52000099999999, 42.255704 ], "pop" : 5526, "state" : "MA" } +{ "_id" : "01034", "city" : "TOLLAND", "loc" : [ -72.908793, 42.070234 ], "pop" : 1652, "state" : "MA" } +{ "_id" : "01035", "city" : "HADLEY", "loc" : [ -72.571499, 42.36062 ], "pop" : 4231, "state" : "MA" } +{ "_id" : "01036", "city" : "HAMPDEN", "loc" : [ -72.43182299999999, 42.064756 ], "pop" : 4709, "state" : "MA" } +{ "_id" : "01038", "city" : "HATFIELD", "loc" : [ -72.61673500000001, 42.38439 ], "pop" : 3184, "state" : "MA" } +{ "_id" : "01039", "city" : "HAYDENVILLE", "loc" : [ -72.70317799999999, 42.381799 ], "pop" : 1387, "state" : "MA" } +{ "_id" : "01040", "city" : "HOLYOKE", "loc" : [ -72.626193, 42.202007 ], "pop" : 43704, "state" : "MA" } +{ "_id" : "01050", "city" : "HUNTINGTON", "loc" : [ -72.873341, 42.265301 ], "pop" : 2084, "state" : "MA" } +{ "_id" : "01053", "city" : "LEEDS", "loc" : [ -72.70340299999999, 42.354292 ], "pop" : 1350, "state" : "MA" } +{ "_id" : "01054", "city" : "LEVERETT", "loc" : [ -72.499334, 42.46823 ], "pop" : 1748, "state" : "MA" } +{ "_id" : "01056", "city" : "LUDLOW", "loc" : [ -72.471012, 42.172823 ], "pop" : 18820, "state" : "MA" } +{ "_id" : "01057", "city" : "MONSON", "loc" : [ -72.31963399999999, 42.101017 ], "pop" : 8194, "state" : "MA" } +{ "_id" : "01060", "city" : "FLORENCE", "loc" : [ -72.654245, 42.324662 ], "pop" : 27939, "state" : "MA" } +{ "_id" : "01068", "city" : "OAKHAM", "loc" : [ -72.051265, 42.348033 ], "pop" : 1503, "state" : "MA" } +{ "_id" : "01069", "city" : "PALMER", "loc" : [ -72.328785, 42.176233 ], "pop" : 9778, "state" : "MA" } +{ "_id" : "01070", "city" : "PLAINFIELD", "loc" : [ -72.918289, 42.514393 ], "pop" : 571, "state" : "MA" } +{ "_id" : "01071", "city" : "RUSSELL", "loc" : [ -72.840343, 42.147063 ], "pop" : 608, "state" : "MA" } +{ "_id" : "01072", "city" : "SHUTESBURY", "loc" : [ -72.421342, 42.481968 ], "pop" : 1533, "state" : "MA" } +{ "_id" : "01073", "city" : "SOUTHAMPTON", "loc" : [ -72.719381, 42.224697 ], "pop" : 4478, "state" : "MA" } +{ "_id" : "01075", "city" : "SOUTH HADLEY", "loc" : [ -72.581137, 42.237537 ], "pop" : 16699, "state" : "MA" } +{ "_id" : "01077", "city" : "SOUTHWICK", "loc" : [ -72.770588, 42.051099 ], "pop" : 7667, "state" : "MA" } +{ "_id" : "01080", "city" : "THREE RIVERS", "loc" : [ -72.362352, 42.181894 ], "pop" : 2425, "state" : "MA" } +{ "_id" : "01081", "city" : "WALES", "loc" : [ -72.20459200000001, 42.062734 ], "pop" : 1732, "state" : "MA" } +{ "_id" : "01082", "city" : "WARE", "loc" : [ -72.258285, 42.261831 ], "pop" : 9808, "state" : "MA" } +{ "_id" : "01085", "city" : "MONTGOMERY", "loc" : [ -72.754318, 42.129484 ], "pop" : 40117, "state" : "MA" } +{ "_id" : "01089", "city" : "WEST SPRINGFIELD", "loc" : [ -72.641109, 42.115066 ], "pop" : 27537, "state" : "MA" } +{ "_id" : "01092", "city" : "WEST WARREN", "loc" : [ -72.203639, 42.20734 ], "pop" : 4441, "state" : "MA" } +{ "_id" : "01095", "city" : "WILBRAHAM", "loc" : [ -72.446415, 42.124506 ], "pop" : 12635, "state" : "MA" } +{ "_id" : "01096", "city" : "WILLIAMSBURG", "loc" : [ -72.77798900000001, 42.408522 ], "pop" : 2295, "state" : "MA" } +{ "_id" : "01098", "city" : "WORTHINGTON", "loc" : [ -72.931427, 42.384293 ], "pop" : 877, "state" : "MA" } +{ "_id" : "01103", "city" : "SPRINGFIELD", "loc" : [ -72.588735, 42.1029 ], "pop" : 2323, "state" : "MA" } +{ "_id" : "01104", "city" : "SPRINGFIELD", "loc" : [ -72.577769, 42.128848 ], "pop" : 22115, "state" : "MA" } +{ "_id" : "01105", "city" : "SPRINGFIELD", "loc" : [ -72.578312, 42.099931 ], "pop" : 14970, "state" : "MA" } +{ "_id" : "01106", "city" : "LONGMEADOW", "loc" : [ -72.5676, 42.050658 ], "pop" : 15688, "state" : "MA" } +{ "_id" : "01107", "city" : "SPRINGFIELD", "loc" : [ -72.606544, 42.117907 ], "pop" : 12739, "state" : "MA" } +{ "_id" : "01108", "city" : "SPRINGFIELD", "loc" : [ -72.558432, 42.085314 ], "pop" : 25519, "state" : "MA" } +{ "_id" : "01109", "city" : "SPRINGFIELD", "loc" : [ -72.554349, 42.114455 ], "pop" : 32635, "state" : "MA" } +{ "_id" : "01118", "city" : "SPRINGFIELD", "loc" : [ -72.527445, 42.092937 ], "pop" : 14618, "state" : "MA" } +{ "_id" : "01119", "city" : "SPRINGFIELD", "loc" : [ -72.51211000000001, 42.12473 ], "pop" : 13040, "state" : "MA" } +{ "_id" : "01128", "city" : "SPRINGFIELD", "loc" : [ -72.48890299999999, 42.094397 ], "pop" : 3272, "state" : "MA" } +{ "_id" : "01129", "city" : "SPRINGFIELD", "loc" : [ -72.487622, 42.122263 ], "pop" : 6831, "state" : "MA" } +{ "_id" : "01151", "city" : "INDIAN ORCHARD", "loc" : [ -72.505048, 42.153225 ], "pop" : 8702, "state" : "MA" } +{ "_id" : "01201", "city" : "PITTSFIELD", "loc" : [ -73.24708800000001, 42.453086 ], "pop" : 50655, "state" : "MA" } +{ "_id" : "01220", "city" : "ADAMS", "loc" : [ -73.117225, 42.622319 ], "pop" : 9901, "state" : "MA" } +{ "_id" : "01222", "city" : "ASHLEY FALLS", "loc" : [ -73.320195, 42.059552 ], "pop" : 561, "state" : "MA" } +{ "_id" : "01223", "city" : "BECKET", "loc" : [ -73.12032499999999, 42.359363 ], "pop" : 1070, "state" : "MA" } +{ "_id" : "01225", "city" : "CHESHIRE", "loc" : [ -73.15796400000001, 42.561059 ], "pop" : 3094, "state" : "MA" } +{ "_id" : "01226", "city" : "DALTON", "loc" : [ -73.160259, 42.475046 ], "pop" : 7357, "state" : "MA" } +{ "_id" : "01230", "city" : "GREAT BARRINGTON", "loc" : [ -73.36065000000001, 42.195922 ], "pop" : 10603, "state" : "MA" } +{ "_id" : "01235", "city" : "PERU", "loc" : [ -73.092433, 42.434604 ], "pop" : 2559, "state" : "MA" } +{ "_id" : "01236", "city" : "HOUSATONIC", "loc" : [ -73.374544, 42.265296 ], "pop" : 802, "state" : "MA" } +{ "_id" : "01237", "city" : "HANCOCK", "loc" : [ -73.24873700000001, 42.541961 ], "pop" : 2328, "state" : "MA" } +{ "_id" : "01238", "city" : "LEE", "loc" : [ -73.231696, 42.298994 ], "pop" : 6916, "state" : "MA" } +{ "_id" : "01240", "city" : "LENOX", "loc" : [ -73.271322, 42.364241 ], "pop" : 5001, "state" : "MA" } +{ "_id" : "01243", "city" : "MIDDLEFIELD", "loc" : [ -73.006226, 42.34795 ], "pop" : 384, "state" : "MA" } +{ "_id" : "01245", "city" : "WEST OTIS", "loc" : [ -73.213452, 42.187847 ], "pop" : 329, "state" : "MA" } +{ "_id" : "01247", "city" : "CLARKSBURG", "loc" : [ -73.10999, 42.69865 ], "pop" : 19054, "state" : "MA" } +{ "_id" : "01253", "city" : "OTIS", "loc" : [ -73.082093, 42.18988 ], "pop" : 1060, "state" : "MA" } +{ "_id" : "01254", "city" : "RICHMOND", "loc" : [ -73.364457, 42.378398 ], "pop" : 1134, "state" : "MA" } +{ "_id" : "01255", "city" : "SANDISFIELD", "loc" : [ -73.116285, 42.109429 ], "pop" : 651, "state" : "MA" } +{ "_id" : "01256", "city" : "SAVOY", "loc" : [ -73.023281, 42.576964 ], "pop" : 632, "state" : "MA" } +{ "_id" : "01257", "city" : "SHEFFIELD", "loc" : [ -73.361091, 42.100102 ], "pop" : 1839, "state" : "MA" } +{ "_id" : "01258", "city" : "SOUTH EGREMONT", "loc" : [ -73.456575, 42.101153 ], "pop" : 135, "state" : "MA" } +{ "_id" : "01259", "city" : "SOUTHFIELD", "loc" : [ -73.26093299999999, 42.078014 ], "pop" : 622, "state" : "MA" } +{ "_id" : "01262", "city" : "STOCKBRIDGE", "loc" : [ -73.32226300000001, 42.30104 ], "pop" : 2200, "state" : "MA" } +{ "_id" : "01266", "city" : "WEST STOCKBRIDGE", "loc" : [ -73.38251, 42.334752 ], "pop" : 1173, "state" : "MA" } +{ "_id" : "01267", "city" : "WILLIAMSTOWN", "loc" : [ -73.20363999999999, 42.708883 ], "pop" : 8220, "state" : "MA" } +{ "_id" : "01270", "city" : "WINDSOR", "loc" : [ -73.04661, 42.509494 ], "pop" : 770, "state" : "MA" } +{ "_id" : "01301", "city" : "LEYDEN", "loc" : [ -72.60184700000001, 42.601222 ], "pop" : 18968, "state" : "MA" } +{ "_id" : "01330", "city" : "ASHFIELD", "loc" : [ -72.810998, 42.523207 ], "pop" : 1535, "state" : "MA" } +{ "_id" : "01331", "city" : "NEW SALEM", "loc" : [ -72.21464400000001, 42.592065 ], "pop" : 14077, "state" : "MA" } +{ "_id" : "01337", "city" : "LEYDEN", "loc" : [ -72.563439, 42.683784 ], "pop" : 2426, "state" : "MA" } +{ "_id" : "01338", "city" : "BUCKLAND", "loc" : [ -72.764124, 42.615174 ], "pop" : 16, "state" : "MA" } +{ "_id" : "01339", "city" : "HAWLEY", "loc" : [ -72.880162, 42.621802 ], "pop" : 1325, "state" : "MA" } +{ "_id" : "01340", "city" : "COLRAIN", "loc" : [ -72.726508, 42.67905 ], "pop" : 2050, "state" : "MA" } +{ "_id" : "01341", "city" : "CONWAY", "loc" : [ -72.702473, 42.513832 ], "pop" : 1524, "state" : "MA" } +{ "_id" : "01342", "city" : "DEERFIELD", "loc" : [ -72.60723400000001, 42.540636 ], "pop" : 1281, "state" : "MA" } +{ "_id" : "01344", "city" : "ERVING", "loc" : [ -72.41663800000001, 42.604957 ], "pop" : 635, "state" : "MA" } +{ "_id" : "01346", "city" : "HEATH", "loc" : [ -72.839101, 42.685347 ], "pop" : 174, "state" : "MA" } +{ "_id" : "01349", "city" : "MILLERS FALLS", "loc" : [ -72.494626, 42.576206 ], "pop" : 1893, "state" : "MA" } +{ "_id" : "01350", "city" : "MONROE", "loc" : [ -72.960156, 42.723885 ], "pop" : 97, "state" : "MA" } +{ "_id" : "01351", "city" : "MONTAGUE", "loc" : [ -72.532837, 42.542864 ], "pop" : 1699, "state" : "MA" } +{ "_id" : "01355", "city" : "NEW SALEM", "loc" : [ -72.306241, 42.514643 ], "pop" : 456, "state" : "MA" } +{ "_id" : "01360", "city" : "NORTHFIELD", "loc" : [ -72.45099500000001, 42.688705 ], "pop" : 2829, "state" : "MA" } +{ "_id" : "01364", "city" : "NEW SALEM", "loc" : [ -72.30586700000001, 42.591231 ], "pop" : 8544, "state" : "MA" } +{ "_id" : "01366", "city" : "PETERSHAM", "loc" : [ -72.18934900000001, 42.489761 ], "pop" : 1131, "state" : "MA" } +{ "_id" : "01367", "city" : "ROWE", "loc" : [ -72.925776, 42.695289 ], "pop" : 630, "state" : "MA" } +{ "_id" : "01370", "city" : "SHELBURNE FALLS", "loc" : [ -72.739059, 42.602203 ], "pop" : 4525, "state" : "MA" } +{ "_id" : "01373", "city" : "SOUTH DEERFIELD", "loc" : [ -72.615268, 42.475616 ], "pop" : 5118, "state" : "MA" } +{ "_id" : "01375", "city" : "SUNDERLAND", "loc" : [ -72.56756900000001, 42.453947 ], "pop" : 3399, "state" : "MA" } +{ "_id" : "01376", "city" : "TURNERS FALLS", "loc" : [ -72.54701, 42.606521 ], "pop" : 7100, "state" : "MA" } +{ "_id" : "01379", "city" : "WENDELL", "loc" : [ -72.400851, 42.565644 ], "pop" : 393, "state" : "MA" } +{ "_id" : "01420", "city" : "FITCHBURG", "loc" : [ -71.803133, 42.579563 ], "pop" : 41194, "state" : "MA" } +{ "_id" : "01430", "city" : "ASHBURNHAM", "loc" : [ -71.92666, 42.649614 ], "pop" : 5433, "state" : "MA" } +{ "_id" : "01431", "city" : "ASHBY", "loc" : [ -71.817369, 42.674462 ], "pop" : 2649, "state" : "MA" } +{ "_id" : "01432", "city" : "AYER", "loc" : [ -71.578763, 42.55914 ], "pop" : 6871, "state" : "MA" } +{ "_id" : "01433", "city" : "FT DEVENS", "loc" : [ -71.621819, 42.532416 ], "pop" : 8480, "state" : "MA" } +{ "_id" : "01436", "city" : "BALDWINVILLE", "loc" : [ -72.06464699999999, 42.593568 ], "pop" : 4386, "state" : "MA" } +{ "_id" : "01440", "city" : "GARDNER", "loc" : [ -71.9898, 42.57405 ], "pop" : 20125, "state" : "MA" } +{ "_id" : "01450", "city" : "GROTON", "loc" : [ -71.55837099999999, 42.612351 ], "pop" : 7504, "state" : "MA" } +{ "_id" : "01451", "city" : "HARVARD", "loc" : [ -71.575293, 42.498565 ], "pop" : 4445, "state" : "MA" } +{ "_id" : "01452", "city" : "HUBBARDSTON", "loc" : [ -72.001159, 42.486538 ], "pop" : 2797, "state" : "MA" } +{ "_id" : "01453", "city" : "LEOMINSTER", "loc" : [ -71.756308, 42.52744 ], "pop" : 38145, "state" : "MA" } +{ "_id" : "01460", "city" : "LITTLETON", "loc" : [ -71.487667, 42.540132 ], "pop" : 7066, "state" : "MA" } +{ "_id" : "01462", "city" : "LUNENBURG", "loc" : [ -71.726642, 42.58843 ], "pop" : 9117, "state" : "MA" } +{ "_id" : "01463", "city" : "PEPPERELL", "loc" : [ -71.59339199999999, 42.668888 ], "pop" : 10178, "state" : "MA" } +{ "_id" : "01464", "city" : "SHIRLEY CENTER", "loc" : [ -71.646444, 42.558653 ], "pop" : 6118, "state" : "MA" } +{ "_id" : "01468", "city" : "TEMPLETON", "loc" : [ -72.064971, 42.545976 ], "pop" : 2058, "state" : "MA" } +{ "_id" : "01469", "city" : "TOWNSEND", "loc" : [ -71.689646, 42.652511 ], "pop" : 6112, "state" : "MA" } +{ "_id" : "01473", "city" : "WESTMINSTER", "loc" : [ -71.909599, 42.548319 ], "pop" : 6191, "state" : "MA" } +{ "_id" : "01474", "city" : "W TOWNSEND", "loc" : [ -71.74057000000001, 42.670404 ], "pop" : 2452, "state" : "MA" } +{ "_id" : "01475", "city" : "WINCHENDON", "loc" : [ -72.047524, 42.678943 ], "pop" : 8805, "state" : "MA" } +{ "_id" : "01501", "city" : "AUBURN", "loc" : [ -71.839144, 42.205502 ], "pop" : 15007, "state" : "MA" } +{ "_id" : "01503", "city" : "BERLIN", "loc" : [ -71.635634, 42.384438 ], "pop" : 2293, "state" : "MA" } +{ "_id" : "01504", "city" : "BLACKSTONE", "loc" : [ -71.52691, 42.028708 ], "pop" : 8023, "state" : "MA" } +{ "_id" : "01505", "city" : "BOYLSTON", "loc" : [ -71.731042, 42.337727 ], "pop" : 3517, "state" : "MA" } +{ "_id" : "01506", "city" : "BROOKFIELD", "loc" : [ -72.098887, 42.199141 ], "pop" : 2968, "state" : "MA" } +{ "_id" : "01507", "city" : "CHARLTON", "loc" : [ -71.96638400000001, 42.137902 ], "pop" : 9576, "state" : "MA" } +{ "_id" : "01510", "city" : "CLINTON", "loc" : [ -71.682847, 42.418147 ], "pop" : 13269, "state" : "MA" } +{ "_id" : "01515", "city" : "EAST BROOKFIELD", "loc" : [ -72.048078, 42.219308 ], "pop" : 2033, "state" : "MA" } +{ "_id" : "01516", "city" : "EAST DOUGLAS", "loc" : [ -71.72661100000001, 42.060566 ], "pop" : 5594, "state" : "MA" } +{ "_id" : "01518", "city" : "FISKDALE", "loc" : [ -72.11776399999999, 42.122762 ], "pop" : 774, "state" : "MA" } +{ "_id" : "01519", "city" : "GRAFTON", "loc" : [ -71.686848, 42.200371 ], "pop" : 4910, "state" : "MA" } +{ "_id" : "01520", "city" : "HOLDEN", "loc" : [ -71.84142, 42.341983 ], "pop" : 12051, "state" : "MA" } +{ "_id" : "01521", "city" : "HOLLAND", "loc" : [ -72.15437300000001, 42.040264 ], "pop" : 747, "state" : "MA" } +{ "_id" : "01522", "city" : "JEFFERSON", "loc" : [ -71.87058, 42.375519 ], "pop" : 2478, "state" : "MA" } +{ "_id" : "01523", "city" : "LANCASTER", "loc" : [ -71.686831, 42.450984 ], "pop" : 6018, "state" : "MA" } +{ "_id" : "01524", "city" : "LEICESTER", "loc" : [ -71.918829, 42.237047 ], "pop" : 6527, "state" : "MA" } +{ "_id" : "01527", "city" : "MILLBURY", "loc" : [ -71.764438, 42.196779 ], "pop" : 12228, "state" : "MA" } +{ "_id" : "01529", "city" : "MILLVILLE", "loc" : [ -71.579813, 42.033102 ], "pop" : 2236, "state" : "MA" } +{ "_id" : "01531", "city" : "NEW BRAINTREE", "loc" : [ -72.13064199999999, 42.31977 ], "pop" : 881, "state" : "MA" } +{ "_id" : "01532", "city" : "NORTHBOROUGH", "loc" : [ -71.646372, 42.318242 ], "pop" : 11930, "state" : "MA" } +{ "_id" : "01534", "city" : "NORTHBRIDGE", "loc" : [ -71.65636600000001, 42.1494 ], "pop" : 4564, "state" : "MA" } +{ "_id" : "01535", "city" : "NORTH BROOKFIELD", "loc" : [ -72.08212899999999, 42.266455 ], "pop" : 4755, "state" : "MA" } +{ "_id" : "01536", "city" : "NORTH GRAFTON", "loc" : [ -71.70369100000001, 42.229726 ], "pop" : 5401, "state" : "MA" } +{ "_id" : "01537", "city" : "NORTH OXFORD", "loc" : [ -71.885953, 42.16549 ], "pop" : 3031, "state" : "MA" } +{ "_id" : "01540", "city" : "OXFORD", "loc" : [ -71.86867700000001, 42.11285 ], "pop" : 9557, "state" : "MA" } +{ "_id" : "01541", "city" : "PRINCETON", "loc" : [ -71.876245, 42.450812 ], "pop" : 3189, "state" : "MA" } +{ "_id" : "01542", "city" : "ROCHDALE", "loc" : [ -71.906882, 42.199685 ], "pop" : 1154, "state" : "MA" } +{ "_id" : "01543", "city" : "RUTLAND", "loc" : [ -71.94895099999999, 42.376199 ], "pop" : 4936, "state" : "MA" } +{ "_id" : "01545", "city" : "SHREWSBURY", "loc" : [ -71.72050299999999, 42.284801 ], "pop" : 24146, "state" : "MA" } +{ "_id" : "01550", "city" : "SOUTHBRIDGE", "loc" : [ -72.035347, 42.075024 ], "pop" : 17816, "state" : "MA" } +{ "_id" : "01560", "city" : "SOUTH GRAFTON", "loc" : [ -71.692725, 42.176042 ], "pop" : 2719, "state" : "MA" } +{ "_id" : "01562", "city" : "SPENCER", "loc" : [ -71.990617, 42.244103 ], "pop" : 11598, "state" : "MA" } +{ "_id" : "01564", "city" : "STERLING", "loc" : [ -71.775192, 42.435351 ], "pop" : 6481, "state" : "MA" } +{ "_id" : "01566", "city" : "STURBRIDGE", "loc" : [ -72.084233, 42.112619 ], "pop" : 7001, "state" : "MA" } +{ "_id" : "01568", "city" : "WEST UPTON", "loc" : [ -71.608014, 42.173275 ], "pop" : 4682, "state" : "MA" } +{ "_id" : "01569", "city" : "UXBRIDGE", "loc" : [ -71.632869, 42.074426 ], "pop" : 10364, "state" : "MA" } +{ "_id" : "01570", "city" : "DUDLEY HILL", "loc" : [ -71.839467, 42.047574 ], "pop" : 3735, "state" : "MA" } +{ "_id" : "01571", "city" : "DUDLEY", "loc" : [ -71.89322799999999, 42.048894 ], "pop" : 22001, "state" : "MA" } +{ "_id" : "01581", "city" : "WESTBOROUGH", "loc" : [ -71.617604, 42.267891 ], "pop" : 14132, "state" : "MA" } +{ "_id" : "01583", "city" : "WEST BOYLSTON", "loc" : [ -71.783822, 42.35836 ], "pop" : 6611, "state" : "MA" } +{ "_id" : "01585", "city" : "WEST BROOKFIELD", "loc" : [ -72.15113700000001, 42.244137 ], "pop" : 3528, "state" : "MA" } +{ "_id" : "01588", "city" : "WHITINSVILLE", "loc" : [ -71.664357, 42.115319 ], "pop" : 8807, "state" : "MA" } +{ "_id" : "01590", "city" : "WILKINSONVILLE", "loc" : [ -71.74841600000001, 42.140586 ], "pop" : 6719, "state" : "MA" } +{ "_id" : "01602", "city" : "WORCESTER", "loc" : [ -71.841678, 42.270251 ], "pop" : 19988, "state" : "MA" } +{ "_id" : "01603", "city" : "WORCESTER", "loc" : [ -71.83799500000001, 42.245033 ], "pop" : 18605, "state" : "MA" } +{ "_id" : "01604", "city" : "WORCESTER", "loc" : [ -71.774626, 42.254084 ], "pop" : 29036, "state" : "MA" } +{ "_id" : "01605", "city" : "WORCESTER", "loc" : [ -71.78879499999999, 42.289391 ], "pop" : 25695, "state" : "MA" } +{ "_id" : "01606", "city" : "WORCESTER", "loc" : [ -71.79577399999999, 42.311029 ], "pop" : 18213, "state" : "MA" } +{ "_id" : "01607", "city" : "WORCESTER", "loc" : [ -71.793837, 42.230294 ], "pop" : 9048, "state" : "MA" } +{ "_id" : "01608", "city" : "WORCESTER", "loc" : [ -71.800262, 42.262425 ], "pop" : 3646, "state" : "MA" } +{ "_id" : "01609", "city" : "WORCESTER", "loc" : [ -71.81745600000001, 42.275387 ], "pop" : 21905, "state" : "MA" } +{ "_id" : "01610", "city" : "WORCESTER", "loc" : [ -71.81079800000001, 42.249186 ], "pop" : 23720, "state" : "MA" } +{ "_id" : "01611", "city" : "CHERRY VALLEY", "loc" : [ -71.874971, 42.237287 ], "pop" : 2510, "state" : "MA" } +{ "_id" : "01612", "city" : "PAXTON", "loc" : [ -71.92023399999999, 42.306646 ], "pop" : 4047, "state" : "MA" } +{ "_id" : "01701", "city" : "FRAMINGHAM", "loc" : [ -71.42548600000001, 42.300665 ], "pop" : 65046, "state" : "MA" } +{ "_id" : "01718", "city" : "VILLAGE OF NAGOG", "loc" : [ -71.422354, 42.514941 ], "pop" : 2330, "state" : "MA" } +{ "_id" : "01719", "city" : "BOXBORO", "loc" : [ -71.51822900000001, 42.486876 ], "pop" : 3343, "state" : "MA" } +{ "_id" : "01720", "city" : "ACTON", "loc" : [ -71.448255, 42.475076 ], "pop" : 15514, "state" : "MA" } +{ "_id" : "01721", "city" : "ASHLAND", "loc" : [ -71.458347, 42.253909 ], "pop" : 12066, "state" : "MA" } +{ "_id" : "01730", "city" : "BEDFORD", "loc" : [ -71.276796, 42.484287 ], "pop" : 16147, "state" : "MA" } +{ "_id" : "01740", "city" : "BOLTON", "loc" : [ -71.60759299999999, 42.436523 ], "pop" : 3134, "state" : "MA" } +{ "_id" : "01741", "city" : "CARLISLE", "loc" : [ -71.35189200000001, 42.528562 ], "pop" : 4333, "state" : "MA" } +{ "_id" : "01742", "city" : "CONCORD", "loc" : [ -71.374741, 42.456701 ], "pop" : 17076, "state" : "MA" } +{ "_id" : "01745", "city" : "SOUTHBOROUGH", "loc" : [ -71.502256, 42.293221 ], "pop" : 506, "state" : "MA" } +{ "_id" : "01746", "city" : "HOLLISTON", "loc" : [ -71.436059, 42.202641 ], "pop" : 12917, "state" : "MA" } +{ "_id" : "01747", "city" : "HOPEDALE", "loc" : [ -71.537601, 42.126796 ], "pop" : 5649, "state" : "MA" } +{ "_id" : "01748", "city" : "HOPKINTON", "loc" : [ -71.53017800000001, 42.219046 ], "pop" : 9191, "state" : "MA" } +{ "_id" : "01749", "city" : "HUDSON", "loc" : [ -71.560896, 42.391796 ], "pop" : 17233, "state" : "MA" } +{ "_id" : "01752", "city" : "MARLBOROUGH", "loc" : [ -71.54335500000001, 42.350861 ], "pop" : 31813, "state" : "MA" } +{ "_id" : "01754", "city" : "MAYNARD", "loc" : [ -71.454975, 42.432118 ], "pop" : 10325, "state" : "MA" } +{ "_id" : "01756", "city" : "MENDON", "loc" : [ -71.549882, 42.096744 ], "pop" : 4010, "state" : "MA" } +{ "_id" : "01757", "city" : "MILFORD", "loc" : [ -71.527402, 42.151142 ], "pop" : 25372, "state" : "MA" } +{ "_id" : "01760", "city" : "NATICK", "loc" : [ -71.35741, 42.287476 ], "pop" : 30432, "state" : "MA" } +{ "_id" : "01770", "city" : "SHERBORN", "loc" : [ -71.37871699999999, 42.233088 ], "pop" : 3998, "state" : "MA" } +{ "_id" : "01772", "city" : "SOUTHBOROUGH", "loc" : [ -71.531997, 42.293919 ], "pop" : 6122, "state" : "MA" } +{ "_id" : "01773", "city" : "LINCOLN", "loc" : [ -71.313723, 42.421723 ], "pop" : 4515, "state" : "MA" } +{ "_id" : "01775", "city" : "STOW", "loc" : [ -71.515019, 42.430785 ], "pop" : 5328, "state" : "MA" } +{ "_id" : "01776", "city" : "SUDBURY", "loc" : [ -71.42815899999999, 42.383655 ], "pop" : 14358, "state" : "MA" } +{ "_id" : "01778", "city" : "WAYLAND", "loc" : [ -71.35878099999999, 42.348629 ], "pop" : 11874, "state" : "MA" } +{ "_id" : "01801", "city" : "WOBURN", "loc" : [ -71.157404, 42.482894 ], "pop" : 36152, "state" : "MA" } +{ "_id" : "01803", "city" : "BURLINGTON", "loc" : [ -71.20043699999999, 42.508942 ], "pop" : 23093, "state" : "MA" } +{ "_id" : "01810", "city" : "ANDOVER", "loc" : [ -71.156481, 42.64956 ], "pop" : 29161, "state" : "MA" } +{ "_id" : "01821", "city" : "BILLERICA", "loc" : [ -71.25175400000001, 42.551874 ], "pop" : 28899, "state" : "MA" } +{ "_id" : "01824", "city" : "SOUTH CHELMSFORD", "loc" : [ -71.35752100000001, 42.59356 ], "pop" : 24457, "state" : "MA" } +{ "_id" : "01826", "city" : "DRACUT", "loc" : [ -71.318592, 42.676422 ], "pop" : 25594, "state" : "MA" } +{ "_id" : "01827", "city" : "DUNSTABLE", "loc" : [ -71.49520099999999, 42.673917 ], "pop" : 2166, "state" : "MA" } +{ "_id" : "01830", "city" : "HAVERHILL", "loc" : [ -71.072057, 42.785605 ], "pop" : 22445, "state" : "MA" } +{ "_id" : "01832", "city" : "HAVERHILL", "loc" : [ -71.10951900000001, 42.779154 ], "pop" : 16860, "state" : "MA" } +{ "_id" : "01833", "city" : "GEORGETOWN", "loc" : [ -70.98223900000001, 42.728067 ], "pop" : 6384, "state" : "MA" } +{ "_id" : "01834", "city" : "GROVELAND", "loc" : [ -71.027018, 42.753027 ], "pop" : 5214, "state" : "MA" } +{ "_id" : "01835", "city" : "BRADFORD", "loc" : [ -71.08548999999999, 42.758597 ], "pop" : 12078, "state" : "MA" } +{ "_id" : "01840", "city" : "LAWRENCE", "loc" : [ -71.16381, 42.707958 ], "pop" : 2728, "state" : "MA" } +{ "_id" : "01841", "city" : "LAWRENCE", "loc" : [ -71.16699699999999, 42.711545 ], "pop" : 45555, "state" : "MA" } +{ "_id" : "01843", "city" : "LAWRENCE", "loc" : [ -71.160506, 42.691053 ], "pop" : 22285, "state" : "MA" } +{ "_id" : "01844", "city" : "METHUEN", "loc" : [ -71.181031, 42.728019 ], "pop" : 39664, "state" : "MA" } +{ "_id" : "01845", "city" : "NORTH ANDOVER", "loc" : [ -71.109004, 42.682583 ], "pop" : 22792, "state" : "MA" } +{ "_id" : "01850", "city" : "LOWELL", "loc" : [ -71.30507799999999, 42.656035 ], "pop" : 15434, "state" : "MA" } +{ "_id" : "01851", "city" : "LOWELL", "loc" : [ -71.332882, 42.631548 ], "pop" : 28154, "state" : "MA" } +{ "_id" : "01852", "city" : "LOWELL", "loc" : [ -71.298331, 42.634413 ], "pop" : 33379, "state" : "MA" } +{ "_id" : "01854", "city" : "LOWELL", "loc" : [ -71.335464, 42.649254 ], "pop" : 26472, "state" : "MA" } +{ "_id" : "01860", "city" : "MERRIMAC", "loc" : [ -71.00465800000001, 42.834629 ], "pop" : 5196, "state" : "MA" } +{ "_id" : "01862", "city" : "NORTH BILLERICA", "loc" : [ -71.290217, 42.575694 ], "pop" : 8720, "state" : "MA" } +{ "_id" : "01863", "city" : "NORTH CHELMSFORD", "loc" : [ -71.390834, 42.634737 ], "pop" : 7878, "state" : "MA" } +{ "_id" : "01864", "city" : "NORTH READING", "loc" : [ -71.094711, 42.581898 ], "pop" : 12002, "state" : "MA" } +{ "_id" : "01867", "city" : "READING", "loc" : [ -71.109021, 42.527986 ], "pop" : 22539, "state" : "MA" } +{ "_id" : "01876", "city" : "TEWKSBURY", "loc" : [ -71.223224, 42.60283 ], "pop" : 27269, "state" : "MA" } +{ "_id" : "01879", "city" : "TYNGSBORO", "loc" : [ -71.415766, 42.672383 ], "pop" : 8643, "state" : "MA" } +{ "_id" : "01880", "city" : "WAKEFIELD", "loc" : [ -71.068471, 42.500886 ], "pop" : 24830, "state" : "MA" } +{ "_id" : "01886", "city" : "GRANITEVILLE", "loc" : [ -71.438143, 42.589959 ], "pop" : 16430, "state" : "MA" } +{ "_id" : "01887", "city" : "WILMINGTON", "loc" : [ -71.17230600000001, 42.558143 ], "pop" : 17647, "state" : "MA" } +{ "_id" : "01890", "city" : "WINCHESTER", "loc" : [ -71.14407, 42.453028 ], "pop" : 20232, "state" : "MA" } +{ "_id" : "01901", "city" : "LYNN", "loc" : [ -70.945516, 42.463378 ], "pop" : 1187, "state" : "MA" } +{ "_id" : "01902", "city" : "LYNN", "loc" : [ -70.94198900000001, 42.469814 ], "pop" : 41625, "state" : "MA" } +{ "_id" : "01904", "city" : "EAST LYNN", "loc" : [ -70.96279800000001, 42.487453 ], "pop" : 17073, "state" : "MA" } +{ "_id" : "01905", "city" : "WEST LYNN", "loc" : [ -70.97382500000001, 42.46453 ], "pop" : 21360, "state" : "MA" } +{ "_id" : "01906", "city" : "SAUGUS", "loc" : [ -71.011093, 42.463344 ], "pop" : 25487, "state" : "MA" } +{ "_id" : "01907", "city" : "SWAMPSCOTT", "loc" : [ -70.909774, 42.474611 ], "pop" : 13650, "state" : "MA" } +{ "_id" : "01908", "city" : "NAHANT", "loc" : [ -70.927739, 42.426098 ], "pop" : 3828, "state" : "MA" } +{ "_id" : "01913", "city" : "AMESBURY", "loc" : [ -70.93668099999999, 42.855879 ], "pop" : 14970, "state" : "MA" } +{ "_id" : "01915", "city" : "BEVERLY", "loc" : [ -70.875939, 42.560825 ], "pop" : 38259, "state" : "MA" } +{ "_id" : "01921", "city" : "BOXFORD", "loc" : [ -71.01137199999999, 42.679719 ], "pop" : 6249, "state" : "MA" } +{ "_id" : "01922", "city" : "BYFIELD", "loc" : [ -70.935053, 42.756792 ], "pop" : 2006, "state" : "MA" } +{ "_id" : "01923", "city" : "DANVERS", "loc" : [ -70.94246099999999, 42.569402 ], "pop" : 23977, "state" : "MA" } +{ "_id" : "01929", "city" : "ESSEX", "loc" : [ -70.782794, 42.628629 ], "pop" : 3260, "state" : "MA" } +{ "_id" : "01930", "city" : "GLOUCESTER", "loc" : [ -70.672149, 42.620836 ], "pop" : 28716, "state" : "MA" } +{ "_id" : "01938", "city" : "IPSWICH", "loc" : [ -70.84935299999999, 42.680877 ], "pop" : 11864, "state" : "MA" } +{ "_id" : "01940", "city" : "LYNNFIELD", "loc" : [ -71.033873, 42.532711 ], "pop" : 11274, "state" : "MA" } +{ "_id" : "01944", "city" : "MANCHESTER", "loc" : [ -70.76743399999999, 42.57963 ], "pop" : 5286, "state" : "MA" } +{ "_id" : "01945", "city" : "MARBLEHEAD", "loc" : [ -70.865291, 42.498431 ], "pop" : 19971, "state" : "MA" } +{ "_id" : "01949", "city" : "MIDDLETON", "loc" : [ -71.013004, 42.594184 ], "pop" : 4921, "state" : "MA" } +{ "_id" : "01950", "city" : "NEWBURYPORT", "loc" : [ -70.884668, 42.812964 ], "pop" : 16317, "state" : "MA" } +{ "_id" : "01951", "city" : "NEWBURY", "loc" : [ -70.84737699999999, 42.783475 ], "pop" : 3710, "state" : "MA" } +{ "_id" : "01952", "city" : "SALISBURY", "loc" : [ -70.858822, 42.850678 ], "pop" : 6879, "state" : "MA" } +{ "_id" : "01960", "city" : "PEABODY", "loc" : [ -70.96119400000001, 42.532579 ], "pop" : 47685, "state" : "MA" } +{ "_id" : "01966", "city" : "ROCKPORT", "loc" : [ -70.619424, 42.657973 ], "pop" : 7482, "state" : "MA" } +{ "_id" : "01969", "city" : "ROWLEY", "loc" : [ -70.90696, 42.713753 ], "pop" : 4368, "state" : "MA" } +{ "_id" : "01970", "city" : "SALEM", "loc" : [ -70.90034300000001, 42.515114 ], "pop" : 37642, "state" : "MA" } +{ "_id" : "01982", "city" : "SOUTH HAMILTON", "loc" : [ -70.856132, 42.618478 ], "pop" : 7288, "state" : "MA" } +{ "_id" : "01983", "city" : "TOPSFIELD", "loc" : [ -70.948843, 42.641546 ], "pop" : 5763, "state" : "MA" } +{ "_id" : "01984", "city" : "WENHAM", "loc" : [ -70.87862199999999, 42.60166 ], "pop" : 4148, "state" : "MA" } +{ "_id" : "01985", "city" : "WEST NEWBURY", "loc" : [ -70.977811, 42.794865 ], "pop" : 3421, "state" : "MA" } +{ "_id" : "02019", "city" : "BELLINGHAM", "loc" : [ -71.476829, 42.074573 ], "pop" : 14873, "state" : "MA" } +{ "_id" : "02021", "city" : "CANTON", "loc" : [ -71.135536, 42.164454 ], "pop" : 18530, "state" : "MA" } +{ "_id" : "02025", "city" : "COHASSET", "loc" : [ -70.812788, 42.239484 ], "pop" : 7075, "state" : "MA" } +{ "_id" : "02026", "city" : "DEDHAM", "loc" : [ -71.163741, 42.243685 ], "pop" : 23782, "state" : "MA" } +{ "_id" : "02030", "city" : "DOVER", "loc" : [ -71.285363, 42.236233 ], "pop" : 4915, "state" : "MA" } +{ "_id" : "02032", "city" : "EAST WALPOLE", "loc" : [ -71.2179, 42.15324 ], "pop" : 3844, "state" : "MA" } +{ "_id" : "02035", "city" : "FOXBORO", "loc" : [ -71.24412700000001, 42.064938 ], "pop" : 14293, "state" : "MA" } +{ "_id" : "02038", "city" : "FRANKLIN", "loc" : [ -71.40578600000001, 42.09347 ], "pop" : 22128, "state" : "MA" } +{ "_id" : "02043", "city" : "HINGHAM", "loc" : [ -70.891051, 42.224485 ], "pop" : 19821, "state" : "MA" } +{ "_id" : "02045", "city" : "HULL", "loc" : [ -70.87544200000001, 42.285346 ], "pop" : 10466, "state" : "MA" } +{ "_id" : "02048", "city" : "MANSFIELD", "loc" : [ -71.217775, 42.021238 ], "pop" : 16676, "state" : "MA" } +{ "_id" : "02050", "city" : "MARSHFIELD", "loc" : [ -70.69931, 42.106177 ], "pop" : 21782, "state" : "MA" } +{ "_id" : "02052", "city" : "MEDFIELD", "loc" : [ -71.304813, 42.184525 ], "pop" : 10531, "state" : "MA" } +{ "_id" : "02053", "city" : "MEDWAY", "loc" : [ -71.42171500000001, 42.151363 ], "pop" : 9902, "state" : "MA" } +{ "_id" : "02054", "city" : "MILLIS", "loc" : [ -71.360693, 42.166938 ], "pop" : 7613, "state" : "MA" } +{ "_id" : "02056", "city" : "NORFOLK", "loc" : [ -71.32693399999999, 42.117746 ], "pop" : 9259, "state" : "MA" } +{ "_id" : "02061", "city" : "NORWELL", "loc" : [ -70.82172, 42.159574 ], "pop" : 9279, "state" : "MA" } +{ "_id" : "02062", "city" : "NORWOOD", "loc" : [ -71.20331299999999, 42.186843 ], "pop" : 28700, "state" : "MA" } +{ "_id" : "02066", "city" : "SCITUATE", "loc" : [ -70.752476, 42.203235 ], "pop" : 16535, "state" : "MA" } +{ "_id" : "02067", "city" : "SHARON", "loc" : [ -71.175872, 42.109388 ], "pop" : 15873, "state" : "MA" } +{ "_id" : "02071", "city" : "SOUTH WALPOLE", "loc" : [ -71.275235, 42.099203 ], "pop" : 752, "state" : "MA" } +{ "_id" : "02072", "city" : "STOUGHTON", "loc" : [ -71.10735699999999, 42.125279 ], "pop" : 26777, "state" : "MA" } +{ "_id" : "02081", "city" : "WALPOLE", "loc" : [ -71.254391, 42.144413 ], "pop" : 15615, "state" : "MA" } +{ "_id" : "02090", "city" : "WESTWOOD", "loc" : [ -71.210426, 42.214824 ], "pop" : 12557, "state" : "MA" } +{ "_id" : "02093", "city" : "WRENTHAM", "loc" : [ -71.339568, 42.061746 ], "pop" : 9006, "state" : "MA" } +{ "_id" : "02108", "city" : "BOSTON", "loc" : [ -71.068432, 42.357603 ], "pop" : 3697, "state" : "MA" } +{ "_id" : "02109", "city" : "BOSTON", "loc" : [ -71.053386, 42.362963 ], "pop" : 3926, "state" : "MA" } +{ "_id" : "02110", "city" : "BOSTON", "loc" : [ -71.051417, 42.357636 ], "pop" : 957, "state" : "MA" } +{ "_id" : "02111", "city" : "BOSTON", "loc" : [ -71.0629, 42.350348 ], "pop" : 3759, "state" : "MA" } +{ "_id" : "02113", "city" : "BOSTON", "loc" : [ -71.055958, 42.365656 ], "pop" : 6698, "state" : "MA" } +{ "_id" : "02114", "city" : "BOSTON", "loc" : [ -71.06823, 42.361111 ], "pop" : 10246, "state" : "MA" } +{ "_id" : "02115", "city" : "BOSTON", "loc" : [ -71.092215, 42.342706 ], "pop" : 25597, "state" : "MA" } +{ "_id" : "02116", "city" : "BOSTON", "loc" : [ -71.076798, 42.349201 ], "pop" : 17459, "state" : "MA" } +{ "_id" : "02118", "city" : "ROXBURY", "loc" : [ -71.075627, 42.340154 ], "pop" : 21914, "state" : "MA" } +{ "_id" : "02119", "city" : "ROXBURY", "loc" : [ -71.086923, 42.322414 ], "pop" : 25207, "state" : "MA" } +{ "_id" : "02120", "city" : "ROXBURY", "loc" : [ -71.097978, 42.332844 ], "pop" : 14212, "state" : "MA" } +{ "_id" : "02121", "city" : "DORCHESTER", "loc" : [ -71.08305, 42.307503 ], "pop" : 25602, "state" : "MA" } +{ "_id" : "02122", "city" : "DORCHESTER", "loc" : [ -71.05830400000001, 42.297278 ], "pop" : 21266, "state" : "MA" } +{ "_id" : "02124", "city" : "DORCHESTER", "loc" : [ -71.072898, 42.287984 ], "pop" : 48560, "state" : "MA" } +{ "_id" : "02125", "city" : "DORCHESTER", "loc" : [ -71.061924, 42.315305 ], "pop" : 31393, "state" : "MA" } +{ "_id" : "02126", "city" : "MATTAPAN", "loc" : [ -71.09387099999999, 42.273889 ], "pop" : 27808, "state" : "MA" } +{ "_id" : "02127", "city" : "SOUTH BOSTON", "loc" : [ -71.043792, 42.333454 ], "pop" : 29170, "state" : "MA" } +{ "_id" : "02128", "city" : "EAST BOSTON", "loc" : [ -71.028682, 42.378137 ], "pop" : 32941, "state" : "MA" } +{ "_id" : "02129", "city" : "CHARLESTOWN", "loc" : [ -71.062715, 42.377815 ], "pop" : 14775, "state" : "MA" } +{ "_id" : "02130", "city" : "JAMAICA PLAIN", "loc" : [ -71.11149500000001, 42.312596 ], "pop" : 36571, "state" : "MA" } +{ "_id" : "02131", "city" : "ROSLINDALE", "loc" : [ -71.129543, 42.283615 ], "pop" : 32677, "state" : "MA" } +{ "_id" : "02132", "city" : "WEST ROXBURY", "loc" : [ -71.158868, 42.27868 ], "pop" : 26366, "state" : "MA" } +{ "_id" : "02134", "city" : "ALLSTON", "loc" : [ -71.13286600000001, 42.353519 ], "pop" : 23775, "state" : "MA" } +{ "_id" : "02135", "city" : "BRIGHTON", "loc" : [ -71.156599, 42.34779 ], "pop" : 35011, "state" : "MA" } +{ "_id" : "02136", "city" : "HYDE PARK", "loc" : [ -71.126052, 42.253989 ], "pop" : 24260, "state" : "MA" } +{ "_id" : "02138", "city" : "CAMBRIDGE", "loc" : [ -71.12561100000001, 42.377045 ], "pop" : 33841, "state" : "MA" } +{ "_id" : "02139", "city" : "CAMBRIDGE", "loc" : [ -71.10415500000001, 42.364688 ], "pop" : 33149, "state" : "MA" } +{ "_id" : "02140", "city" : "NORTH CAMBRIDGE", "loc" : [ -71.129379, 42.391366 ], "pop" : 16313, "state" : "MA" } +{ "_id" : "02141", "city" : "EAST CAMBRIDGE", "loc" : [ -71.08827700000001, 42.370701 ], "pop" : 10392, "state" : "MA" } +{ "_id" : "02142", "city" : "CAMBRIDGE", "loc" : [ -71.083011, 42.362025 ], "pop" : 1336, "state" : "MA" } +{ "_id" : "02143", "city" : "SOMERVILLE", "loc" : [ -71.102814, 42.382945 ], "pop" : 25597, "state" : "MA" } +{ "_id" : "02144", "city" : "SOMERVILLE", "loc" : [ -71.12205899999999, 42.40032 ], "pop" : 26374, "state" : "MA" } +{ "_id" : "02145", "city" : "SOMERVILLE", "loc" : [ -71.092944, 42.390678 ], "pop" : 24422, "state" : "MA" } +{ "_id" : "02146", "city" : "BROOKLINE", "loc" : [ -71.128917, 42.339158 ], "pop" : 56614, "state" : "MA" } +{ "_id" : "02148", "city" : "MALDEN", "loc" : [ -71.060507, 42.42911 ], "pop" : 54114, "state" : "MA" } +{ "_id" : "02149", "city" : "EVERETT", "loc" : [ -71.05144799999999, 42.411199 ], "pop" : 35493, "state" : "MA" } +{ "_id" : "02150", "city" : "CHELSEA", "loc" : [ -71.032521, 42.396252 ], "pop" : 28790, "state" : "MA" } +{ "_id" : "02151", "city" : "REVERE", "loc" : [ -71.00516500000001, 42.413767 ], "pop" : 42766, "state" : "MA" } +{ "_id" : "02152", "city" : "WINTHROP", "loc" : [ -70.98004299999999, 42.376294 ], "pop" : 18907, "state" : "MA" } +{ "_id" : "02154", "city" : "NORTH WALTHAM", "loc" : [ -71.236497, 42.382492 ], "pop" : 57871, "state" : "MA" } +{ "_id" : "02155", "city" : "MEDFORD", "loc" : [ -71.10868600000001, 42.417335 ], "pop" : 57338, "state" : "MA" } +{ "_id" : "02158", "city" : "NEWTONVILLE", "loc" : [ -71.1902, 42.353835 ], "pop" : 13271, "state" : "MA" } +{ "_id" : "02159", "city" : "NEWTON CENTER", "loc" : [ -71.191839, 42.318889 ], "pop" : 18726, "state" : "MA" } +{ "_id" : "02160", "city" : "NEWTONVILLE", "loc" : [ -71.208771, 42.351961 ], "pop" : 8872, "state" : "MA" } +{ "_id" : "02161", "city" : "NEWTON HIGHLANDS", "loc" : [ -71.20934699999999, 42.318512 ], "pop" : 6657, "state" : "MA" } +{ "_id" : "02162", "city" : "NEWTONVILLE", "loc" : [ -71.258025, 42.330296 ], "pop" : 1427, "state" : "MA" } +{ "_id" : "02163", "city" : "CAMBRIDGE", "loc" : [ -71.141879, 42.364005 ], "pop" : 0, "state" : "MA" } +{ "_id" : "02164", "city" : "NEWTON UPPER FAL", "loc" : [ -71.221615, 42.312562 ], "pop" : 2597, "state" : "MA" } +{ "_id" : "02165", "city" : "NEWTONVILLE", "loc" : [ -71.22795000000001, 42.352366 ], "pop" : 12027, "state" : "MA" } +{ "_id" : "02166", "city" : "AUBURNDALE", "loc" : [ -71.247598, 42.345928 ], "pop" : 6123, "state" : "MA" } +{ "_id" : "02167", "city" : "BOSTON COLLEGE", "loc" : [ -71.16271999999999, 42.31903 ], "pop" : 15619, "state" : "MA" } +{ "_id" : "02168", "city" : "WABAN", "loc" : [ -71.23070300000001, 42.327049 ], "pop" : 5759, "state" : "MA" } +{ "_id" : "02169", "city" : "QUINCY", "loc" : [ -70.997816, 42.249133 ], "pop" : 48920, "state" : "MA" } +{ "_id" : "02170", "city" : "QUINCY", "loc" : [ -71.01864399999999, 42.26713 ], "pop" : 18330, "state" : "MA" } +{ "_id" : "02171", "city" : "QUINCY", "loc" : [ -71.024141, 42.282519 ], "pop" : 18251, "state" : "MA" } +{ "_id" : "02172", "city" : "EAST WATERTOWN", "loc" : [ -71.180266, 42.371497 ], "pop" : 33930, "state" : "MA" } +{ "_id" : "02173", "city" : "LEXINGTON", "loc" : [ -71.225916, 42.445384 ], "pop" : 28994, "state" : "MA" } +{ "_id" : "02174", "city" : "ARLINGTON", "loc" : [ -71.16251699999999, 42.417098 ], "pop" : 44539, "state" : "MA" } +{ "_id" : "02176", "city" : "MELROSE", "loc" : [ -71.063191, 42.458066 ], "pop" : 28228, "state" : "MA" } +{ "_id" : "02178", "city" : "BELMONT", "loc" : [ -71.17464699999999, 42.389656 ], "pop" : 24733, "state" : "MA" } +{ "_id" : "02180", "city" : "STONEHAM", "loc" : [ -71.09780000000001, 42.482778 ], "pop" : 22147, "state" : "MA" } +{ "_id" : "02181", "city" : "WELLESLEY", "loc" : [ -71.287966, 42.305593 ], "pop" : 26615, "state" : "MA" } +{ "_id" : "02184", "city" : "BRAINTREE", "loc" : [ -70.99630399999999, 42.209284 ], "pop" : 33836, "state" : "MA" } +{ "_id" : "02186", "city" : "MILTON", "loc" : [ -71.077051, 42.253663 ], "pop" : 25558, "state" : "MA" } +{ "_id" : "02188", "city" : "WEYMOUTH", "loc" : [ -70.958248, 42.211327 ], "pop" : 13187, "state" : "MA" } +{ "_id" : "02189", "city" : "WEYMOUTH", "loc" : [ -70.93167099999999, 42.211606 ], "pop" : 14055, "state" : "MA" } +{ "_id" : "02190", "city" : "WEYMOUTH", "loc" : [ -70.94869, 42.172817 ], "pop" : 17668, "state" : "MA" } +{ "_id" : "02191", "city" : "WEYMOUTH", "loc" : [ -70.944318, 42.243564 ], "pop" : 9153, "state" : "MA" } +{ "_id" : "02192", "city" : "NEEDHAM", "loc" : [ -71.23517200000001, 42.278908 ], "pop" : 19570, "state" : "MA" } +{ "_id" : "02193", "city" : "WESTON", "loc" : [ -71.300291, 42.359422 ], "pop" : 10221, "state" : "MA" } +{ "_id" : "02194", "city" : "NEEDHAM", "loc" : [ -71.234363, 42.297702 ], "pop" : 8006, "state" : "MA" } +{ "_id" : "02199", "city" : "BOSTON", "loc" : [ -71.082543, 42.347873 ], "pop" : 886, "state" : "MA" } +{ "_id" : "02210", "city" : "BOSTON", "loc" : [ -71.046511, 42.348921 ], "pop" : 308, "state" : "MA" } +{ "_id" : "02215", "city" : "BOSTON", "loc" : [ -71.102689, 42.347088 ], "pop" : 17769, "state" : "MA" } +{ "_id" : "02322", "city" : "AVON", "loc" : [ -71.043738, 42.125825 ], "pop" : 4594, "state" : "MA" } +{ "_id" : "02324", "city" : "BRIDGEWATER", "loc" : [ -70.97234, 41.977341 ], "pop" : 21198, "state" : "MA" } +{ "_id" : "02330", "city" : "CARVER", "loc" : [ -70.767754, 41.888265 ], "pop" : 10573, "state" : "MA" } +{ "_id" : "02332", "city" : "DUXBURY", "loc" : [ -70.716257, 42.039936 ], "pop" : 13913, "state" : "MA" } +{ "_id" : "02333", "city" : "EAST BRIDGEWATER", "loc" : [ -70.944964, 42.031478 ], "pop" : 11104, "state" : "MA" } +{ "_id" : "02338", "city" : "HALIFAX", "loc" : [ -70.84479399999999, 42.000159 ], "pop" : 6526, "state" : "MA" } +{ "_id" : "02339", "city" : "HANOVER", "loc" : [ -70.857006, 42.121406 ], "pop" : 11912, "state" : "MA" } +{ "_id" : "02341", "city" : "HANSON", "loc" : [ -70.865053, 42.061627 ], "pop" : 9037, "state" : "MA" } +{ "_id" : "02343", "city" : "HOLBROOK", "loc" : [ -71.008273, 42.14641 ], "pop" : 11041, "state" : "MA" } +{ "_id" : "02346", "city" : "MIDDLEBORO", "loc" : [ -70.892965, 41.888396 ], "pop" : 17867, "state" : "MA" } +{ "_id" : "02347", "city" : "LAKEVILLE", "loc" : [ -70.958195, 41.837377 ], "pop" : 7785, "state" : "MA" } +{ "_id" : "02351", "city" : "ABINGTON", "loc" : [ -70.95429300000001, 42.116715 ], "pop" : 13849, "state" : "MA" } +{ "_id" : "02356", "city" : "NORTH EASTON", "loc" : [ -71.112337, 42.058956 ], "pop" : 10397, "state" : "MA" } +{ "_id" : "02359", "city" : "PEMBROKE", "loc" : [ -70.80440400000001, 42.062072 ], "pop" : 14535, "state" : "MA" } +{ "_id" : "02360", "city" : "PLYMOUTH", "loc" : [ -70.642004, 41.910404 ], "pop" : 45629, "state" : "MA" } +{ "_id" : "02364", "city" : "KINGSTON", "loc" : [ -70.740993, 41.995022 ], "pop" : 9045, "state" : "MA" } +{ "_id" : "02367", "city" : "PLYMPTON", "loc" : [ -70.804582, 41.96549 ], "pop" : 2384, "state" : "MA" } +{ "_id" : "02368", "city" : "RANDOLPH", "loc" : [ -71.05139200000001, 42.173587 ], "pop" : 30057, "state" : "MA" } +{ "_id" : "02370", "city" : "ROCKLAND", "loc" : [ -70.913263, 42.129286 ], "pop" : 16123, "state" : "MA" } +{ "_id" : "02375", "city" : "SOUTH EASTON", "loc" : [ -71.098814, 42.025704 ], "pop" : 9247, "state" : "MA" } +{ "_id" : "02379", "city" : "WEST BRIDGEWATER", "loc" : [ -71.016054, 42.025511 ], "pop" : 6440, "state" : "MA" } +{ "_id" : "02382", "city" : "WHITMAN", "loc" : [ -70.93812699999999, 42.081603 ], "pop" : 13208, "state" : "MA" } +{ "_id" : "02401", "city" : "BROCKTON", "loc" : [ -71.03434799999999, 42.081571 ], "pop" : 59498, "state" : "MA" } +{ "_id" : "02402", "city" : "BROCKTON", "loc" : [ -71.001947, 42.088396 ], "pop" : 33290, "state" : "MA" } +{ "_id" : "02532", "city" : "ONSET", "loc" : [ -70.59316800000001, 41.752918 ], "pop" : 12047, "state" : "MA" } +{ "_id" : "02535", "city" : "CHILMARK", "loc" : [ -70.741613, 41.357523 ], "pop" : 952, "state" : "MA" } +{ "_id" : "02536", "city" : "TEATICKET", "loc" : [ -70.565174, 41.58504 ], "pop" : 15976, "state" : "MA" } +{ "_id" : "02537", "city" : "EAST SANDWICH", "loc" : [ -70.46822, 41.684603 ], "pop" : 7254, "state" : "MA" } +{ "_id" : "02538", "city" : "EAST WAREHAM", "loc" : [ -70.653237, 41.768247 ], "pop" : 4778, "state" : "MA" } +{ "_id" : "02539", "city" : "EDGARTOWN", "loc" : [ -70.53389300000001, 41.388856 ], "pop" : 3062, "state" : "MA" } +{ "_id" : "02540", "city" : "FALMOUTH", "loc" : [ -70.621663, 41.564754 ], "pop" : 8588, "state" : "MA" } +{ "_id" : "02542", "city" : "OTIS A F B", "loc" : [ -70.57383, 41.660927 ], "pop" : 2078, "state" : "MA" } +{ "_id" : "02543", "city" : "WOODS HOLE", "loc" : [ -70.66431, 41.526272 ], "pop" : 833, "state" : "MA" } +{ "_id" : "02554", "city" : "NANTUCKET", "loc" : [ -70.093216, 41.272529 ], "pop" : 6012, "state" : "MA" } +{ "_id" : "02556", "city" : "NORTH FALMOUTH", "loc" : [ -70.623043, 41.641677 ], "pop" : 2651, "state" : "MA" } +{ "_id" : "02559", "city" : "POCASSET", "loc" : [ -70.610512, 41.688115 ], "pop" : 3907, "state" : "MA" } +{ "_id" : "02563", "city" : "SANDWICH", "loc" : [ -70.469325, 41.698304 ], "pop" : 9007, "state" : "MA" } +{ "_id" : "02568", "city" : "VINEYARD HAVEN", "loc" : [ -70.593737, 41.449955 ], "pop" : 5924, "state" : "MA" } +{ "_id" : "02571", "city" : "WAREHAM", "loc" : [ -70.71159400000001, 41.754084 ], "pop" : 9304, "state" : "MA" } +{ "_id" : "02575", "city" : "WEST TISBURY", "loc" : [ -70.65580199999999, 41.413717 ], "pop" : 1603, "state" : "MA" } +{ "_id" : "02576", "city" : "WEST WAREHAM", "loc" : [ -70.764179, 41.779617 ], "pop" : 3919, "state" : "MA" } +{ "_id" : "02601", "city" : "WEST YARMOUTH", "loc" : [ -70.298176, 41.653682 ], "pop" : 14543, "state" : "MA" } +{ "_id" : "02630", "city" : "BARNSTABLE", "loc" : [ -70.300067, 41.698289 ], "pop" : 1776, "state" : "MA" } +{ "_id" : "02631", "city" : "BREWSTER", "loc" : [ -70.069868, 41.749179 ], "pop" : 8535, "state" : "MA" } +{ "_id" : "02632", "city" : "CENTERVILLE", "loc" : [ -70.353196, 41.660585 ], "pop" : 10636, "state" : "MA" } +{ "_id" : "02633", "city" : "SOUTH CHATHAM", "loc" : [ -69.98075799999999, 41.687634 ], "pop" : 4744, "state" : "MA" } +{ "_id" : "02635", "city" : "COTUIT", "loc" : [ -70.433431, 41.696025 ], "pop" : 3266, "state" : "MA" } +{ "_id" : "02638", "city" : "DENNIS", "loc" : [ -70.19105399999999, 41.732166 ], "pop" : 3216, "state" : "MA" } +{ "_id" : "02639", "city" : "DENNIS PORT", "loc" : [ -70.132711, 41.664873 ], "pop" : 2510, "state" : "MA" } +{ "_id" : "02642", "city" : "EASTHAM", "loc" : [ -69.984865, 41.840781 ], "pop" : 4582, "state" : "MA" } +{ "_id" : "02644", "city" : "FORESTDALE", "loc" : [ -70.51431700000001, 41.682695 ], "pop" : 2712, "state" : "MA" } +{ "_id" : "02645", "city" : "HARWICH", "loc" : [ -70.057929, 41.70082 ], "pop" : 7363, "state" : "MA" } +{ "_id" : "02646", "city" : "HARWICH PORT", "loc" : [ -70.07675500000001, 41.67128 ], "pop" : 1843, "state" : "MA" } +{ "_id" : "02648", "city" : "MARSTONS MILLS", "loc" : [ -70.416321, 41.670274 ], "pop" : 5777, "state" : "MA" } +{ "_id" : "02649", "city" : "MASHPEE", "loc" : [ -70.485361, 41.618116 ], "pop" : 4469, "state" : "MA" } +{ "_id" : "02650", "city" : "NORTH CHATHAM", "loc" : [ -69.966607, 41.70298 ], "pop" : 995, "state" : "MA" } +{ "_id" : "02652", "city" : "NORTH TRURO", "loc" : [ -70.08750999999999, 42.033779 ], "pop" : 834, "state" : "MA" } +{ "_id" : "02653", "city" : "ORLEANS", "loc" : [ -69.982198, 41.779161 ], "pop" : 5860, "state" : "MA" } +{ "_id" : "02655", "city" : "OSTERVILLE", "loc" : [ -70.383726, 41.63005 ], "pop" : 2330, "state" : "MA" } +{ "_id" : "02657", "city" : "PROVINCETOWN", "loc" : [ -70.186504, 42.053364 ], "pop" : 3561, "state" : "MA" } +{ "_id" : "02659", "city" : "SOUTH CHATHAM", "loc" : [ -70.024106, 41.680126 ], "pop" : 840, "state" : "MA" } +{ "_id" : "02660", "city" : "SOUTH DENNIS", "loc" : [ -70.15851000000001, 41.709711 ], "pop" : 6680, "state" : "MA" } +{ "_id" : "02664", "city" : "BASS RIVER", "loc" : [ -70.19731, 41.672805 ], "pop" : 8514, "state" : "MA" } +{ "_id" : "02666", "city" : "TRURO", "loc" : [ -70.05636199999999, 41.998792 ], "pop" : 739, "state" : "MA" } +{ "_id" : "02667", "city" : "WELLFLEET", "loc" : [ -70.018587, 41.928934 ], "pop" : 2373, "state" : "MA" } +{ "_id" : "02668", "city" : "WEST BARNSTABLE", "loc" : [ -70.371985, 41.700212 ], "pop" : 2311, "state" : "MA" } +{ "_id" : "02670", "city" : "WEST DENNIS", "loc" : [ -70.168092, 41.662557 ], "pop" : 1347, "state" : "MA" } +{ "_id" : "02671", "city" : "WEST HARWICH", "loc" : [ -70.113501, 41.669367 ], "pop" : 1061, "state" : "MA" } +{ "_id" : "02673", "city" : "WEST YARMOUTH", "loc" : [ -70.23629699999999, 41.661367 ], "pop" : 6972, "state" : "MA" } +{ "_id" : "02675", "city" : "YARMOUTH PORT", "loc" : [ -70.227014, 41.705149 ], "pop" : 5735, "state" : "MA" } +{ "_id" : "02702", "city" : "ASSONET", "loc" : [ -71.06073600000001, 41.797458 ], "pop" : 3614, "state" : "MA" } +{ "_id" : "02703", "city" : "ATTLEBORO", "loc" : [ -71.30092, 41.929599 ], "pop" : 38528, "state" : "MA" } +{ "_id" : "02713", "city" : "CUTTYHUNK", "loc" : [ -70.87854, 41.443601 ], "pop" : 98, "state" : "MA" } +{ "_id" : "02715", "city" : "DIGHTON", "loc" : [ -71.142723, 41.812505 ], "pop" : 1828, "state" : "MA" } +{ "_id" : "02717", "city" : "EAST FREETOWN", "loc" : [ -70.967709, 41.763455 ], "pop" : 4883, "state" : "MA" } +{ "_id" : "02718", "city" : "EAST TAUNTON", "loc" : [ -71.01922500000001, 41.873585 ], "pop" : 4800, "state" : "MA" } +{ "_id" : "02719", "city" : "FAIRHAVEN", "loc" : [ -70.889608, 41.640924 ], "pop" : 16141, "state" : "MA" } +{ "_id" : "02720", "city" : "FALL RIVER", "loc" : [ -71.13999099999999, 41.718221 ], "pop" : 30600, "state" : "MA" } +{ "_id" : "02721", "city" : "FALL RIVER", "loc" : [ -71.15742400000001, 41.688305 ], "pop" : 26884, "state" : "MA" } +{ "_id" : "02723", "city" : "FALL RIVER", "loc" : [ -71.133214, 41.692612 ], "pop" : 16801, "state" : "MA" } +{ "_id" : "02724", "city" : "FALL RIVER", "loc" : [ -71.17482200000001, 41.684975 ], "pop" : 18141, "state" : "MA" } +{ "_id" : "02725", "city" : "SOMERSET", "loc" : [ -71.177971, 41.722299 ], "pop" : 2528, "state" : "MA" } +{ "_id" : "02726", "city" : "SOMERSET", "loc" : [ -71.14920600000001, 41.756012 ], "pop" : 15117, "state" : "MA" } +{ "_id" : "02738", "city" : "MARION", "loc" : [ -70.761261, 41.709526 ], "pop" : 4496, "state" : "MA" } +{ "_id" : "02739", "city" : "MATTAPOISETT", "loc" : [ -70.816357, 41.661845 ], "pop" : 5850, "state" : "MA" } +{ "_id" : "02740", "city" : "NEW BEDFORD", "loc" : [ -70.9372, 41.634749 ], "pop" : 46426, "state" : "MA" } +{ "_id" : "02743", "city" : "ACUSHNET", "loc" : [ -70.908652, 41.6997 ], "pop" : 9601, "state" : "MA" } +{ "_id" : "02744", "city" : "NEW BEDFORD", "loc" : [ -70.916746, 41.612716 ], "pop" : 13424, "state" : "MA" } +{ "_id" : "02745", "city" : "NEW BEDFORD", "loc" : [ -70.935545, 41.691337 ], "pop" : 23661, "state" : "MA" } +{ "_id" : "02746", "city" : "NEW BEDFORD", "loc" : [ -70.93243, 41.659972 ], "pop" : 16236, "state" : "MA" } +{ "_id" : "02747", "city" : "NORTH DARTMOUTH", "loc" : [ -70.995769, 41.633789 ], "pop" : 16383, "state" : "MA" } +{ "_id" : "02748", "city" : "PADANARAM VILLAG", "loc" : [ -70.956521, 41.591728 ], "pop" : 10980, "state" : "MA" } +{ "_id" : "02760", "city" : "NORTH ATTLEBORO", "loc" : [ -71.329757, 41.977542 ], "pop" : 22289, "state" : "MA" } +{ "_id" : "02762", "city" : "PLAINVILLE", "loc" : [ -71.327454, 42.012403 ], "pop" : 6874, "state" : "MA" } +{ "_id" : "02763", "city" : "NORTH ATTLEBORO", "loc" : [ -71.31035300000001, 41.970979 ], "pop" : 2737, "state" : "MA" } +{ "_id" : "02764", "city" : "NORTH DIGHTON", "loc" : [ -71.148523, 41.852874 ], "pop" : 3779, "state" : "MA" } +{ "_id" : "02766", "city" : "NORTON", "loc" : [ -71.189441, 41.971801 ], "pop" : 14329, "state" : "MA" } +{ "_id" : "02767", "city" : "RAYNHAM", "loc" : [ -71.04685600000001, 41.932361 ], "pop" : 9804, "state" : "MA" } +{ "_id" : "02769", "city" : "REHOBOTH", "loc" : [ -71.254453, 41.85152 ], "pop" : 7762, "state" : "MA" } +{ "_id" : "02770", "city" : "ROCHESTER", "loc" : [ -70.85225699999999, 41.759082 ], "pop" : 3270, "state" : "MA" } +{ "_id" : "02771", "city" : "SEEKONK", "loc" : [ -71.322406, 41.837835 ], "pop" : 13375, "state" : "MA" } +{ "_id" : "02777", "city" : "SWANSEA", "loc" : [ -71.21216699999999, 41.74734 ], "pop" : 15865, "state" : "MA" } +{ "_id" : "02779", "city" : "BERKLEY", "loc" : [ -71.076534, 41.835325 ], "pop" : 4438, "state" : "MA" } +{ "_id" : "02780", "city" : "TAUNTON", "loc" : [ -71.10261, 41.905007 ], "pop" : 44894, "state" : "MA" } +{ "_id" : "02790", "city" : "WESTPORT", "loc" : [ -71.08900300000001, 41.621127 ], "pop" : 14154, "state" : "MA" } +{ "_id" : "02804", "city" : "ASHAWAY", "loc" : [ -71.783745, 41.423054 ], "pop" : 2472, "state" : "RI" } +{ "_id" : "02806", "city" : "BARRINGTON", "loc" : [ -71.317497, 41.744334 ], "pop" : 15849, "state" : "RI" } +{ "_id" : "02807", "city" : "BLOCK ISLAND", "loc" : [ -71.574825, 41.171546 ], "pop" : 836, "state" : "RI" } +{ "_id" : "02808", "city" : "BRADFORD", "loc" : [ -71.746453, 41.411448 ], "pop" : 2184, "state" : "RI" } +{ "_id" : "02809", "city" : "BRISTOL", "loc" : [ -71.26755799999999, 41.68247 ], "pop" : 21625, "state" : "RI" } +{ "_id" : "02812", "city" : "RICHMOND", "loc" : [ -71.650279, 41.46941 ], "pop" : 1011, "state" : "RI" } +{ "_id" : "02813", "city" : "CHARLESTOWN", "loc" : [ -71.661455, 41.400749 ], "pop" : 6663, "state" : "RI" } +{ "_id" : "02814", "city" : "CHEPACHET", "loc" : [ -71.679483, 41.91549 ], "pop" : 8191, "state" : "RI" } +{ "_id" : "02815", "city" : "CLAYVILLE", "loc" : [ -71.67058900000001, 41.777762 ], "pop" : 45, "state" : "RI" } +{ "_id" : "02816", "city" : "COVENTRY", "loc" : [ -71.57679400000001, 41.69143 ], "pop" : 29842, "state" : "RI" } +{ "_id" : "02817", "city" : "WEST GREENWICH", "loc" : [ -71.64354899999999, 41.639977 ], "pop" : 3246, "state" : "RI" } +{ "_id" : "02818", "city" : "EAST GREENWICH", "loc" : [ -71.474009, 41.649777 ], "pop" : 16180, "state" : "RI" } +{ "_id" : "02822", "city" : "EXETER", "loc" : [ -71.607626, 41.574031 ], "pop" : 3774, "state" : "RI" } +{ "_id" : "02825", "city" : "FOSTER", "loc" : [ -71.71874800000001, 41.781455 ], "pop" : 5175, "state" : "RI" } +{ "_id" : "02827", "city" : "GREENE", "loc" : [ -71.735607, 41.706151 ], "pop" : 1241, "state" : "RI" } +{ "_id" : "02828", "city" : "GREENVILLE", "loc" : [ -71.556923, 41.873409 ], "pop" : 6945, "state" : "RI" } +{ "_id" : "02830", "city" : "HARRISVILLE", "loc" : [ -71.65340500000001, 41.976379 ], "pop" : 6384, "state" : "RI" } +{ "_id" : "02831", "city" : "HOPE", "loc" : [ -71.56122499999999, 41.751603 ], "pop" : 3653, "state" : "RI" } +{ "_id" : "02832", "city" : "RICHMOND", "loc" : [ -71.73486200000001, 41.506974 ], "pop" : 3466, "state" : "RI" } +{ "_id" : "02835", "city" : "JAMESTOWN", "loc" : [ -71.376108, 41.516405 ], "pop" : 4999, "state" : "RI" } +{ "_id" : "02836", "city" : "RICHMOND", "loc" : [ -71.683992, 41.477694 ], "pop" : 183, "state" : "RI" } +{ "_id" : "02837", "city" : "LITTLE COMPTON", "loc" : [ -71.161215, 41.52204 ], "pop" : 3341, "state" : "RI" } +{ "_id" : "02838", "city" : "MANVILLE", "loc" : [ -71.474113, 41.96888 ], "pop" : 3259, "state" : "RI" } +{ "_id" : "02840", "city" : "MIDDLETOWN", "loc" : [ -71.30347999999999, 41.504502 ], "pop" : 47687, "state" : "RI" } +{ "_id" : "02852", "city" : "NORTH KINGSTOWN", "loc" : [ -71.46249400000001, 41.589426 ], "pop" : 22325, "state" : "RI" } +{ "_id" : "02857", "city" : "NORTH SCITUATE", "loc" : [ -71.62418700000001, 41.8439 ], "pop" : 9563, "state" : "RI" } +{ "_id" : "02858", "city" : "OAKLAND", "loc" : [ -71.64292500000001, 41.963637 ], "pop" : 462, "state" : "RI" } +{ "_id" : "02859", "city" : "PASCOAG", "loc" : [ -71.70986600000001, 41.962728 ], "pop" : 7156, "state" : "RI" } +{ "_id" : "02860", "city" : "PAWTUCKET", "loc" : [ -71.39071300000001, 41.872873 ], "pop" : 45442, "state" : "RI" } +{ "_id" : "02861", "city" : "PAWTUCKET", "loc" : [ -71.35600100000001, 41.881384 ], "pop" : 27013, "state" : "RI" } +{ "_id" : "02863", "city" : "CENTRAL FALLS", "loc" : [ -71.394527, 41.888263 ], "pop" : 17380, "state" : "RI" } +{ "_id" : "02864", "city" : "CUMBERLAND", "loc" : [ -71.415419, 41.948352 ], "pop" : 29327, "state" : "RI" } +{ "_id" : "02865", "city" : "LINCOLN", "loc" : [ -71.434777, 41.908906 ], "pop" : 14765, "state" : "RI" } +{ "_id" : "02871", "city" : "PORTSMOUTH", "loc" : [ -71.25201800000001, 41.594397 ], "pop" : 16707, "state" : "RI" } +{ "_id" : "02872", "city" : "PRUDENCE ISLAND", "loc" : [ -71.31182699999999, 41.613606 ], "pop" : 150, "state" : "RI" } +{ "_id" : "02874", "city" : "SAUNDERSTOWN", "loc" : [ -71.44269300000001, 41.510528 ], "pop" : 3196, "state" : "RI" } +{ "_id" : "02876", "city" : "SLATERSVILLE", "loc" : [ -71.5682, 42.001478 ], "pop" : 639, "state" : "RI" } +{ "_id" : "02877", "city" : "SLOCUM", "loc" : [ -71.53716900000001, 41.521237 ], "pop" : 1114, "state" : "RI" } +{ "_id" : "02878", "city" : "TIVERTON", "loc" : [ -71.180823, 41.633839 ], "pop" : 14310, "state" : "RI" } +{ "_id" : "02879", "city" : "NARRAGANSETT", "loc" : [ -71.525138, 41.430195 ], "pop" : 13422, "state" : "RI" } +{ "_id" : "02881", "city" : "KINGSTON", "loc" : [ -71.529239, 41.480295 ], "pop" : 7683, "state" : "RI" } +{ "_id" : "02882", "city" : "NARRAGANSETT", "loc" : [ -71.46164, 41.435313 ], "pop" : 13596, "state" : "RI" } +{ "_id" : "02883", "city" : "PEACE DALE", "loc" : [ -71.500057, 41.45157 ], "pop" : 1652, "state" : "RI" } +{ "_id" : "02885", "city" : "WARREN", "loc" : [ -71.27016500000001, 41.725618 ], "pop" : 11385, "state" : "RI" } +{ "_id" : "02886", "city" : "WARWICK", "loc" : [ -71.447591, 41.702601 ], "pop" : 40845, "state" : "RI" } +{ "_id" : "02888", "city" : "WARWICK", "loc" : [ -71.40836, 41.74936 ], "pop" : 20869, "state" : "RI" } +{ "_id" : "02889", "city" : "WARWICK", "loc" : [ -71.390146, 41.714069 ], "pop" : 20849, "state" : "RI" } +{ "_id" : "02891", "city" : "WESTERLY", "loc" : [ -71.81264299999999, 41.369128 ], "pop" : 20290, "state" : "RI" } +{ "_id" : "02892", "city" : "RICHMOND", "loc" : [ -71.599076, 41.506716 ], "pop" : 3943, "state" : "RI" } +{ "_id" : "02893", "city" : "WEST WARWICK", "loc" : [ -71.518349, 41.700433 ], "pop" : 27821, "state" : "RI" } +{ "_id" : "02894", "city" : "WOOD RIVER JUNCT", "loc" : [ -71.709512, 41.453771 ], "pop" : 684, "state" : "RI" } +{ "_id" : "02895", "city" : "NORTH SMITHFIELD", "loc" : [ -71.513683, 41.99948 ], "pop" : 53733, "state" : "RI" } +{ "_id" : "02898", "city" : "RICHMOND", "loc" : [ -71.68397299999999, 41.523362 ], "pop" : 1508, "state" : "RI" } +{ "_id" : "02903", "city" : "PROVIDENCE", "loc" : [ -71.415801, 41.820002 ], "pop" : 9093, "state" : "RI" } +{ "_id" : "02904", "city" : "CENTREDALE", "loc" : [ -71.438102, 41.860461 ], "pop" : 28119, "state" : "RI" } +{ "_id" : "02905", "city" : "CRANSTON", "loc" : [ -71.40314600000001, 41.786568 ], "pop" : 24885, "state" : "RI" } +{ "_id" : "02906", "city" : "PROVIDENCE", "loc" : [ -71.397065, 41.835104 ], "pop" : 31069, "state" : "RI" } +{ "_id" : "02907", "city" : "CRANSTON", "loc" : [ -71.42403899999999, 41.800842 ], "pop" : 25668, "state" : "RI" } +{ "_id" : "02908", "city" : "PROVIDENCE", "loc" : [ -71.437684, 41.838294 ], "pop" : 35933, "state" : "RI" } +{ "_id" : "02909", "city" : "CRANSTON", "loc" : [ -71.448165, 41.816777 ], "pop" : 34261, "state" : "RI" } +{ "_id" : "02910", "city" : "CRANSTON", "loc" : [ -71.43833100000001, 41.776572 ], "pop" : 21128, "state" : "RI" } +{ "_id" : "02911", "city" : "CENTREDALE", "loc" : [ -71.474058, 41.853412 ], "pop" : 13858, "state" : "RI" } +{ "_id" : "02914", "city" : "EAST PROVIDENCE", "loc" : [ -71.368785, 41.813777 ], "pop" : 22965, "state" : "RI" } +{ "_id" : "02915", "city" : "RIVERSIDE", "loc" : [ -71.35424399999999, 41.772313 ], "pop" : 18934, "state" : "RI" } +{ "_id" : "02916", "city" : "RUMFORD", "loc" : [ -71.35593799999999, 41.842472 ], "pop" : 8550, "state" : "RI" } +{ "_id" : "02917", "city" : "SMITHFIELD", "loc" : [ -71.52066600000001, 41.896382 ], "pop" : 12213, "state" : "RI" } +{ "_id" : "02919", "city" : "CRANSTON", "loc" : [ -71.497646, 41.826431 ], "pop" : 26575, "state" : "RI" } +{ "_id" : "02920", "city" : "CRANSTON", "loc" : [ -71.465889, 41.77157 ], "pop" : 37385, "state" : "RI" } +{ "_id" : "02921", "city" : "CRANSTON", "loc" : [ -71.506102, 41.761357 ], "pop" : 6502, "state" : "RI" } +{ "_id" : "03031", "city" : "AMHERST", "loc" : [ -71.607536, 42.856944 ], "pop" : 8998, "state" : "NH" } +{ "_id" : "03032", "city" : "AUBURN", "loc" : [ -71.344892, 42.992529 ], "pop" : 4085, "state" : "NH" } +{ "_id" : "03033", "city" : "BROOKLINE", "loc" : [ -71.666254, 42.738442 ], "pop" : 2410, "state" : "NH" } +{ "_id" : "03034", "city" : "CANDIA", "loc" : [ -71.304857, 43.058514 ], "pop" : 3557, "state" : "NH" } +{ "_id" : "03036", "city" : "CHESTER", "loc" : [ -71.244962, 42.967756 ], "pop" : 2691, "state" : "NH" } +{ "_id" : "03037", "city" : "DEERFIELD", "loc" : [ -71.25126400000001, 43.137756 ], "pop" : 3124, "state" : "NH" } +{ "_id" : "03038", "city" : "DERRY", "loc" : [ -71.30197099999999, 42.887404 ], "pop" : 29556, "state" : "NH" } +{ "_id" : "03042", "city" : "EPPING", "loc" : [ -71.076367, 43.041052 ], "pop" : 6797, "state" : "NH" } +{ "_id" : "03043", "city" : "FRANCESTOWN", "loc" : [ -71.81131000000001, 42.991952 ], "pop" : 1219, "state" : "NH" } +{ "_id" : "03044", "city" : "FREMONT", "loc" : [ -71.121836, 42.984016 ], "pop" : 2677, "state" : "NH" } +{ "_id" : "03045", "city" : "DUNBARTON", "loc" : [ -71.56264, 43.018224 ], "pop" : 9428, "state" : "NH" } +{ "_id" : "03047", "city" : "GREENFIELD", "loc" : [ -71.872755, 42.949277 ], "pop" : 1422, "state" : "NH" } +{ "_id" : "03048", "city" : "MASON", "loc" : [ -71.784487, 42.7489 ], "pop" : 3443, "state" : "NH" } +{ "_id" : "03049", "city" : "HOLLIS", "loc" : [ -71.577206, 42.748513 ], "pop" : 5705, "state" : "NH" } +{ "_id" : "03051", "city" : "HUDSON", "loc" : [ -71.412144, 42.769038 ], "pop" : 26489, "state" : "NH" } +{ "_id" : "03053", "city" : "LONDONDERRY", "loc" : [ -71.37719, 42.865555 ], "pop" : 19687, "state" : "NH" } +{ "_id" : "03054", "city" : "MERRIMACK", "loc" : [ -71.51278000000001, 42.866689 ], "pop" : 21632, "state" : "NH" } +{ "_id" : "03055", "city" : "MILFORD", "loc" : [ -71.660569, 42.828497 ], "pop" : 11795, "state" : "NH" } +{ "_id" : "03057", "city" : "MONT VERNON", "loc" : [ -71.676243, 42.897597 ], "pop" : 1812, "state" : "NH" } +{ "_id" : "03060", "city" : "NASHUA", "loc" : [ -71.466684, 42.756395 ], "pop" : 41438, "state" : "NH" } +{ "_id" : "03062", "city" : "NASHUA", "loc" : [ -71.489282, 42.723472 ], "pop" : 23927, "state" : "NH" } +{ "_id" : "03063", "city" : "NASHUA", "loc" : [ -71.513156, 42.771686 ], "pop" : 14891, "state" : "NH" } +{ "_id" : "03070", "city" : "NEW BOSTON", "loc" : [ -71.686402, 42.97217 ], "pop" : 2701, "state" : "NH" } +{ "_id" : "03071", "city" : "NEW IPSWICH", "loc" : [ -71.870318, 42.751142 ], "pop" : 4014, "state" : "NH" } +{ "_id" : "03076", "city" : "PELHAM", "loc" : [ -71.304551, 42.72881 ], "pop" : 6012, "state" : "NH" } +{ "_id" : "03077", "city" : "RAYMOND", "loc" : [ -71.191159, 43.032512 ], "pop" : 9005, "state" : "NH" } +{ "_id" : "03079", "city" : "SALEM", "loc" : [ -71.21760999999999, 42.78465 ], "pop" : 25746, "state" : "NH" } +{ "_id" : "03082", "city" : "LYNDEBOROUGH", "loc" : [ -71.774373, 42.895449 ], "pop" : 1294, "state" : "NH" } +{ "_id" : "03084", "city" : "TEMPLE", "loc" : [ -71.85234699999999, 42.820035 ], "pop" : 1194, "state" : "NH" } +{ "_id" : "03086", "city" : "WILTON", "loc" : [ -71.75406599999999, 42.836761 ], "pop" : 3122, "state" : "NH" } +{ "_id" : "03087", "city" : "WINDHAM", "loc" : [ -71.306735, 42.805106 ], "pop" : 9000, "state" : "NH" } +{ "_id" : "03101", "city" : "MANCHESTER", "loc" : [ -71.463255, 42.992858 ], "pop" : 2697, "state" : "NH" } +{ "_id" : "03102", "city" : "MANCHESTER", "loc" : [ -71.488433, 42.99442 ], "pop" : 29308, "state" : "NH" } +{ "_id" : "03103", "city" : "MANCHESTER", "loc" : [ -71.449325, 42.965563 ], "pop" : 36613, "state" : "NH" } +{ "_id" : "03104", "city" : "MANCHESTER", "loc" : [ -71.448233, 43.007307 ], "pop" : 29950, "state" : "NH" } +{ "_id" : "03106", "city" : "HOOKSETT", "loc" : [ -71.444446, 43.061708 ], "pop" : 8668, "state" : "NH" } +{ "_id" : "03109", "city" : "MANCHESTER", "loc" : [ -71.41347399999999, 42.971349 ], "pop" : 7884, "state" : "NH" } +{ "_id" : "03110", "city" : "BEDFORD", "loc" : [ -71.52127, 42.940307 ], "pop" : 12468, "state" : "NH" } +{ "_id" : "03216", "city" : "ANDOVER", "loc" : [ -71.78295199999999, 43.428668 ], "pop" : 1638, "state" : "NH" } +{ "_id" : "03217", "city" : "ASHLAND", "loc" : [ -71.61208499999999, 43.703428 ], "pop" : 2056, "state" : "NH" } +{ "_id" : "03218", "city" : "BARNSTEAD", "loc" : [ -71.286946, 43.36513 ], "pop" : 793, "state" : "NH" } +{ "_id" : "03220", "city" : "BELMONT", "loc" : [ -71.488991, 43.451189 ], "pop" : 2997, "state" : "NH" } +{ "_id" : "03221", "city" : "BRADFORD", "loc" : [ -71.98504800000001, 43.294343 ], "pop" : 3273, "state" : "NH" } +{ "_id" : "03222", "city" : "BRISTOL", "loc" : [ -71.750664, 43.611994 ], "pop" : 4288, "state" : "NH" } +{ "_id" : "03223", "city" : "BEEBE RIVER", "loc" : [ -71.63614200000001, 43.888507 ], "pop" : 2802, "state" : "NH" } +{ "_id" : "03224", "city" : "CANTERBURY", "loc" : [ -71.557008, 43.357041 ], "pop" : 2085, "state" : "NH" } +{ "_id" : "03225", "city" : "CENTER BARNSTEAD", "loc" : [ -71.24244, 43.356563 ], "pop" : 2307, "state" : "NH" } +{ "_id" : "03226", "city" : "CENTER HARBOR", "loc" : [ -71.47973, 43.710688 ], "pop" : 470, "state" : "NH" } +{ "_id" : "03227", "city" : "CENTER SANDWICH", "loc" : [ -71.450614, 43.816169 ], "pop" : 615, "state" : "NH" } +{ "_id" : "03229", "city" : "HOPKINTON", "loc" : [ -71.696299, 43.218898 ], "pop" : 6071, "state" : "NH" } +{ "_id" : "03230", "city" : "DANBURY", "loc" : [ -71.869074, 43.5115 ], "pop" : 1098, "state" : "NH" } +{ "_id" : "03231", "city" : "EAST ANDOVER", "loc" : [ -71.75960600000001, 43.47766 ], "pop" : 177, "state" : "NH" } +{ "_id" : "03232", "city" : "EAST HEBRON", "loc" : [ -71.76790699999999, 43.696969 ], "pop" : 47, "state" : "NH" } +{ "_id" : "03234", "city" : "EPSOM", "loc" : [ -71.35457599999999, 43.217398 ], "pop" : 2931, "state" : "NH" } +{ "_id" : "03235", "city" : "FRANKLIN", "loc" : [ -71.64912200000001, 43.442569 ], "pop" : 9780, "state" : "NH" } +{ "_id" : "03237", "city" : "GILMANTON", "loc" : [ -71.412063, 43.417476 ], "pop" : 1308, "state" : "NH" } +{ "_id" : "03240", "city" : "GRAFTON", "loc" : [ -71.96338900000001, 43.572743 ], "pop" : 890, "state" : "NH" } +{ "_id" : "03241", "city" : "HEBRON", "loc" : [ -71.82696, 43.718571 ], "pop" : 657, "state" : "NH" } +{ "_id" : "03242", "city" : "HENNIKER", "loc" : [ -71.815921, 43.179091 ], "pop" : 4151, "state" : "NH" } +{ "_id" : "03243", "city" : "HILL", "loc" : [ -71.729168, 43.527422 ], "pop" : 778, "state" : "NH" } +{ "_id" : "03244", "city" : "HILLSBORO", "loc" : [ -71.902818, 43.120709 ], "pop" : 5246, "state" : "NH" } +{ "_id" : "03246", "city" : "GILFORD", "loc" : [ -71.452907, 43.538713 ], "pop" : 24409, "state" : "NH" } +{ "_id" : "03251", "city" : "LINCOLN", "loc" : [ -71.672707, 44.058159 ], "pop" : 1229, "state" : "NH" } +{ "_id" : "03253", "city" : "MEREDITH", "loc" : [ -71.51132699999999, 43.650208 ], "pop" : 5959, "state" : "NH" } +{ "_id" : "03254", "city" : "MOULTONBOROUGH", "loc" : [ -71.392245, 43.728133 ], "pop" : 3208, "state" : "NH" } +{ "_id" : "03256", "city" : "NEW HAMPTON", "loc" : [ -71.643513, 43.618393 ], "pop" : 1214, "state" : "NH" } +{ "_id" : "03257", "city" : "NEW LONDON", "loc" : [ -71.985674, 43.414501 ], "pop" : 3280, "state" : "NH" } +{ "_id" : "03259", "city" : "NORTH SANDWICH", "loc" : [ -71.385025, 43.845182 ], "pop" : 338, "state" : "NH" } +{ "_id" : "03261", "city" : "NORTHWOOD", "loc" : [ -71.200423, 43.206965 ], "pop" : 3013, "state" : "NH" } +{ "_id" : "03262", "city" : "NORTH WOODSTOCK", "loc" : [ -71.697684, 44.019831 ], "pop" : 1091, "state" : "NH" } +{ "_id" : "03263", "city" : "PITTSFIELD", "loc" : [ -71.33302999999999, 43.287384 ], "pop" : 5806, "state" : "NH" } +{ "_id" : "03264", "city" : "PLYMOUTH", "loc" : [ -71.684714, 43.763524 ], "pop" : 8980, "state" : "NH" } +{ "_id" : "03266", "city" : "RUMNEY", "loc" : [ -71.84801899999999, 43.804389 ], "pop" : 1912, "state" : "NH" } +{ "_id" : "03268", "city" : "SALISBURY", "loc" : [ -71.70446800000001, 43.406652 ], "pop" : 140, "state" : "NH" } +{ "_id" : "03269", "city" : "SANBORNTON", "loc" : [ -71.600348, 43.549552 ], "pop" : 699, "state" : "NH" } +{ "_id" : "03275", "city" : "ALLENSTOWN", "loc" : [ -71.439663, 43.147554 ], "pop" : 11565, "state" : "NH" } +{ "_id" : "03276", "city" : "TILTON", "loc" : [ -71.57741300000001, 43.46033 ], "pop" : 7356, "state" : "NH" } +{ "_id" : "03278", "city" : "WARNER", "loc" : [ -71.83534899999999, 43.303512 ], "pop" : 3265, "state" : "NH" } +{ "_id" : "03279", "city" : "WARREN", "loc" : [ -71.89013, 43.944667 ], "pop" : 886, "state" : "NH" } +{ "_id" : "03280", "city" : "WASHINGTON", "loc" : [ -72.082407, 43.174705 ], "pop" : 628, "state" : "NH" } +{ "_id" : "03281", "city" : "WEARE", "loc" : [ -71.70376, 43.071422 ], "pop" : 7481, "state" : "NH" } +{ "_id" : "03282", "city" : "WENTWORTH", "loc" : [ -71.909651, 43.868456 ], "pop" : 556, "state" : "NH" } +{ "_id" : "03284", "city" : "WEST SPRINGFIELD", "loc" : [ -72.057855, 43.491615 ], "pop" : 788, "state" : "NH" } +{ "_id" : "03287", "city" : "WILMOT FLAT", "loc" : [ -71.900983, 43.432177 ], "pop" : 931, "state" : "NH" } +{ "_id" : "03290", "city" : "NOTTINGHAM", "loc" : [ -71.110983, 43.119632 ], "pop" : 598, "state" : "NH" } +{ "_id" : "03291", "city" : "WEST NOTTINGHAM", "loc" : [ -71.111006, 43.133971 ], "pop" : 27, "state" : "NH" } +{ "_id" : "03301", "city" : "CONCORD", "loc" : [ -71.527734, 43.218525 ], "pop" : 34035, "state" : "NH" } +{ "_id" : "03303", "city" : "BOSCAWEN", "loc" : [ -71.612723, 43.285285 ], "pop" : 12046, "state" : "NH" } +{ "_id" : "03304", "city" : "BOW", "loc" : [ -71.544814, 43.138788 ], "pop" : 5500, "state" : "NH" } +{ "_id" : "03431", "city" : "SURRY", "loc" : [ -72.28954, 42.943127 ], "pop" : 23882, "state" : "NH" } +{ "_id" : "03440", "city" : "ANTRIM", "loc" : [ -71.938698, 43.059547 ], "pop" : 3379, "state" : "NH" } +{ "_id" : "03441", "city" : "ASHUELOT", "loc" : [ -72.434899, 42.785057 ], "pop" : 285, "state" : "NH" } +{ "_id" : "03442", "city" : "BENNINGTON", "loc" : [ -71.91534, 43.010309 ], "pop" : 1236, "state" : "NH" } +{ "_id" : "03443", "city" : "CHESTERFIELD", "loc" : [ -72.487219, 42.900785 ], "pop" : 1455, "state" : "NH" } +{ "_id" : "03444", "city" : "DUBLIN", "loc" : [ -72.050538, 42.897198 ], "pop" : 1474, "state" : "NH" } +{ "_id" : "03445", "city" : "EAST SULLIVAN", "loc" : [ -72.191778, 42.994005 ], "pop" : 169, "state" : "NH" } +{ "_id" : "03446", "city" : "EAST SWANZEY", "loc" : [ -72.249298, 42.884137 ], "pop" : 796, "state" : "NH" } +{ "_id" : "03447", "city" : "FITZWILLIAM", "loc" : [ -72.145014, 42.7611 ], "pop" : 2016, "state" : "NH" } +{ "_id" : "03448", "city" : "GILSUM", "loc" : [ -72.263272, 43.043105 ], "pop" : 745, "state" : "NH" } +{ "_id" : "03449", "city" : "HANCOCK", "loc" : [ -71.981858, 42.976817 ], "pop" : 1526, "state" : "NH" } +{ "_id" : "03450", "city" : "HARRISVILLE", "loc" : [ -72.09724300000001, 42.939874 ], "pop" : 981, "state" : "NH" } +{ "_id" : "03451", "city" : "HINSDALE", "loc" : [ -72.501474, 42.802714 ], "pop" : 3936, "state" : "NH" } +{ "_id" : "03452", "city" : "JAFFREY", "loc" : [ -72.027514, 42.81779 ], "pop" : 5334, "state" : "NH" } +{ "_id" : "03455", "city" : "MARLBOROUGH", "loc" : [ -72.201292, 42.898804 ], "pop" : 1927, "state" : "NH" } +{ "_id" : "03456", "city" : "MARLOW", "loc" : [ -72.21087900000001, 43.132585 ], "pop" : 650, "state" : "NH" } +{ "_id" : "03457", "city" : "MUNSONVILLE", "loc" : [ -72.133702, 42.998646 ], "pop" : 535, "state" : "NH" } +{ "_id" : "03458", "city" : "PETERBOROUGH", "loc" : [ -71.94696399999999, 42.88559 ], "pop" : 5713, "state" : "NH" } +{ "_id" : "03461", "city" : "RINDGE", "loc" : [ -72.01903799999999, 42.754391 ], "pop" : 4968, "state" : "NH" } +{ "_id" : "03462", "city" : "SPOFFORD", "loc" : [ -72.41027699999999, 42.911973 ], "pop" : 1266, "state" : "NH" } +{ "_id" : "03464", "city" : "STODDARD", "loc" : [ -72.108811, 43.073944 ], "pop" : 622, "state" : "NH" } +{ "_id" : "03465", "city" : "TROY", "loc" : [ -72.184753, 42.82697 ], "pop" : 2097, "state" : "NH" } +{ "_id" : "03466", "city" : "WEST CHESTERFIEL", "loc" : [ -72.511216, 42.873152 ], "pop" : 391, "state" : "NH" } +{ "_id" : "03467", "city" : "WESTMORELAND", "loc" : [ -72.435784, 42.968999 ], "pop" : 1596, "state" : "NH" } +{ "_id" : "03469", "city" : "WEST SWANZEY", "loc" : [ -72.29768799999999, 42.870313 ], "pop" : 5440, "state" : "NH" } +{ "_id" : "03470", "city" : "RICHMOND", "loc" : [ -72.36367199999999, 42.773922 ], "pop" : 4625, "state" : "NH" } +{ "_id" : "03561", "city" : "LITTLETON", "loc" : [ -71.776816, 44.311187 ], "pop" : 6663, "state" : "NH" } +{ "_id" : "03570", "city" : "BERLIN", "loc" : [ -71.18923599999999, 44.48107 ], "pop" : 12892, "state" : "NH" } +{ "_id" : "03574", "city" : "BETHLEHEM", "loc" : [ -71.682929, 44.280846 ], "pop" : 1885, "state" : "NH" } +{ "_id" : "03576", "city" : "COLEBROOK", "loc" : [ -71.47934100000001, 44.907776 ], "pop" : 4232, "state" : "NH" } +{ "_id" : "03579", "city" : "ERROL", "loc" : [ -71.143612, 44.800273 ], "pop" : 366, "state" : "NH" } +{ "_id" : "03580", "city" : "FRANCONIA", "loc" : [ -71.751822, 44.205273 ], "pop" : 1090, "state" : "NH" } +{ "_id" : "03581", "city" : "GORHAM", "loc" : [ -71.17998299999999, 44.399601 ], "pop" : 3610, "state" : "NH" } +{ "_id" : "03582", "city" : "GROVETON", "loc" : [ -71.506421, 44.598367 ], "pop" : 2527, "state" : "NH" } +{ "_id" : "03583", "city" : "JEFFERSON", "loc" : [ -71.45183400000001, 44.399907 ], "pop" : 986, "state" : "NH" } +{ "_id" : "03584", "city" : "LANCASTER", "loc" : [ -71.55911500000001, 44.492074 ], "pop" : 3825, "state" : "NH" } +{ "_id" : "03585", "city" : "LISBON", "loc" : [ -71.896565, 44.214837 ], "pop" : 2295, "state" : "NH" } +{ "_id" : "03588", "city" : "MILAN", "loc" : [ -71.181031, 44.586968 ], "pop" : 987, "state" : "NH" } +{ "_id" : "03590", "city" : "NORTH STRATFORD", "loc" : [ -71.564368, 44.714915 ], "pop" : 927, "state" : "NH" } +{ "_id" : "03592", "city" : "PITTSBURG", "loc" : [ -71.36359299999999, 45.086564 ], "pop" : 1104, "state" : "NH" } +{ "_id" : "03598", "city" : "WHITEFIELD", "loc" : [ -71.603453, 44.36811 ], "pop" : 3139, "state" : "NH" } +{ "_id" : "03602", "city" : "ALSTEAD", "loc" : [ -72.328052, 43.126484 ], "pop" : 1721, "state" : "NH" } +{ "_id" : "03603", "city" : "CHARLESTOWN", "loc" : [ -72.40638, 43.257339 ], "pop" : 4678, "state" : "NH" } +{ "_id" : "03605", "city" : "EAST LEMPSTER", "loc" : [ -72.16620500000001, 43.21863 ], "pop" : 323, "state" : "NH" } +{ "_id" : "03607", "city" : "SOUTH ACWORTH", "loc" : [ -72.341053, 43.176942 ], "pop" : 1008, "state" : "NH" } +{ "_id" : "03608", "city" : "WALPOLE", "loc" : [ -72.41548899999999, 43.076533 ], "pop" : 2466, "state" : "NH" } +{ "_id" : "03609", "city" : "NORTH WALPOLE", "loc" : [ -72.44825299999999, 43.142759 ], "pop" : 744, "state" : "NH" } +{ "_id" : "03740", "city" : "BATH", "loc" : [ -71.95674099999999, 44.173419 ], "pop" : 155, "state" : "NH" } +{ "_id" : "03741", "city" : "CANAAN", "loc" : [ -72.029724, 43.660092 ], "pop" : 3065, "state" : "NH" } +{ "_id" : "03743", "city" : "CLAREMONT", "loc" : [ -72.342186, 43.367942 ], "pop" : 14820, "state" : "NH" } +{ "_id" : "03745", "city" : "CORNISH", "loc" : [ -72.339426, 43.496339 ], "pop" : 2275, "state" : "NH" } +{ "_id" : "03748", "city" : "ENFIELD", "loc" : [ -72.127014, 43.625584 ], "pop" : 4118, "state" : "NH" } +{ "_id" : "03750", "city" : "ETNA", "loc" : [ -72.212479, 43.711333 ], "pop" : 944, "state" : "NH" } +{ "_id" : "03752", "city" : "GOSHEN", "loc" : [ -72.124117, 43.302623 ], "pop" : 742, "state" : "NH" } +{ "_id" : "03753", "city" : "GRANTHAM", "loc" : [ -72.133437, 43.510324 ], "pop" : 1247, "state" : "NH" } +{ "_id" : "03755", "city" : "HANOVER", "loc" : [ -72.28496, 43.704532 ], "pop" : 7070, "state" : "NH" } +{ "_id" : "03765", "city" : "HAVERHILL", "loc" : [ -72.057276, 44.039438 ], "pop" : 498, "state" : "NH" } +{ "_id" : "03766", "city" : "LEBANON", "loc" : [ -72.242818, 43.644688 ], "pop" : 9032, "state" : "NH" } +{ "_id" : "03768", "city" : "LYME", "loc" : [ -72.161993, 43.791327 ], "pop" : 2172, "state" : "NH" } +{ "_id" : "03770", "city" : "MERIDEN", "loc" : [ -72.275644, 43.529873 ], "pop" : 126, "state" : "NH" } +{ "_id" : "03771", "city" : "MONROE", "loc" : [ -72.02502800000001, 44.273358 ], "pop" : 760, "state" : "NH" } +{ "_id" : "03773", "city" : "NEWPORT", "loc" : [ -72.183789, 43.353228 ], "pop" : 8073, "state" : "NH" } +{ "_id" : "03774", "city" : "NORTH HAVERHILL", "loc" : [ -72.01911200000001, 44.097841 ], "pop" : 1744, "state" : "NH" } +{ "_id" : "03777", "city" : "ORFORD", "loc" : [ -72.097846, 43.894101 ], "pop" : 1008, "state" : "NH" } +{ "_id" : "03779", "city" : "PIERMONT", "loc" : [ -72.081299, 43.990572 ], "pop" : 431, "state" : "NH" } +{ "_id" : "03780", "city" : "PIKE", "loc" : [ -72.009587, 44.025511 ], "pop" : 751, "state" : "NH" } +{ "_id" : "03781", "city" : "PLAINFIELD", "loc" : [ -72.270398, 43.551919 ], "pop" : 1314, "state" : "NH" } +{ "_id" : "03782", "city" : "SUNAPEE", "loc" : [ -72.095044, 43.386816 ], "pop" : 2570, "state" : "NH" } +{ "_id" : "03784", "city" : "WEST LEBANON", "loc" : [ -72.300735, 43.64401 ], "pop" : 3784, "state" : "NH" } +{ "_id" : "03785", "city" : "WOODSVILLE", "loc" : [ -71.989215, 44.138549 ], "pop" : 2292, "state" : "NH" } +{ "_id" : "03801", "city" : "NEWINGTON", "loc" : [ -70.780412, 43.066524 ], "pop" : 27430, "state" : "NH" } +{ "_id" : "03809", "city" : "ALTON", "loc" : [ -71.229709, 43.46302 ], "pop" : 2939, "state" : "NH" } +{ "_id" : "03810", "city" : "ALTON BAY", "loc" : [ -71.24888, 43.484468 ], "pop" : 157, "state" : "NH" } +{ "_id" : "03811", "city" : "ATKINSON", "loc" : [ -71.16030000000001, 42.836981 ], "pop" : 5145, "state" : "NH" } +{ "_id" : "03812", "city" : "BARTLETT", "loc" : [ -71.2491, 44.08656 ], "pop" : 1379, "state" : "NH" } +{ "_id" : "03813", "city" : "CENTER CONWAY", "loc" : [ -71.060677, 43.98776 ], "pop" : 2394, "state" : "NH" } +{ "_id" : "03814", "city" : "CENTER OSSIPEE", "loc" : [ -71.134882, 43.768189 ], "pop" : 2492, "state" : "NH" } +{ "_id" : "03815", "city" : "CENTER STRAFFORD", "loc" : [ -71.107122, 43.262888 ], "pop" : 436, "state" : "NH" } +{ "_id" : "03816", "city" : "CENTER TUFTONBOR", "loc" : [ -71.26505899999999, 43.690205 ], "pop" : 885, "state" : "NH" } +{ "_id" : "03817", "city" : "CHOCORUA", "loc" : [ -71.24071600000001, 43.890851 ], "pop" : 70, "state" : "NH" } +{ "_id" : "03818", "city" : "CONWAY", "loc" : [ -71.15028, 43.974161 ], "pop" : 1875, "state" : "NH" } +{ "_id" : "03819", "city" : "DANVILLE", "loc" : [ -71.120985, 42.923432 ], "pop" : 2471, "state" : "NH" } +{ "_id" : "03820", "city" : "MADBURY", "loc" : [ -70.88488099999999, 43.190006 ], "pop" : 27182, "state" : "NH" } +{ "_id" : "03824", "city" : "LEE", "loc" : [ -70.952333, 43.133821 ], "pop" : 15487, "state" : "NH" } +{ "_id" : "03825", "city" : "BARRINGTON", "loc" : [ -71.03767499999999, 43.2027 ], "pop" : 5842, "state" : "NH" } +{ "_id" : "03826", "city" : "EAST HAMPSTEAD", "loc" : [ -71.127978, 42.887656 ], "pop" : 1880, "state" : "NH" } +{ "_id" : "03827", "city" : "SOUTH HAMPTON", "loc" : [ -70.976904, 42.911289 ], "pop" : 3197, "state" : "NH" } +{ "_id" : "03830", "city" : "EAST WAKEFIELD", "loc" : [ -71.007712, 43.641022 ], "pop" : 675, "state" : "NH" } +{ "_id" : "03833", "city" : "BRENTWOOD", "loc" : [ -70.96430599999999, 42.977169 ], "pop" : 14374, "state" : "NH" } +{ "_id" : "03835", "city" : "FARMINGTON", "loc" : [ -71.06469300000001, 43.388373 ], "pop" : 4676, "state" : "NH" } +{ "_id" : "03836", "city" : "FREEDOM", "loc" : [ -71.062815, 43.817242 ], "pop" : 935, "state" : "NH" } +{ "_id" : "03837", "city" : "GILMANTON IRON W", "loc" : [ -71.330315, 43.425281 ], "pop" : 1301, "state" : "NH" } +{ "_id" : "03838", "city" : "GLEN", "loc" : [ -71.192457, 44.101777 ], "pop" : 84, "state" : "NH" } +{ "_id" : "03839", "city" : "GONIC", "loc" : [ -70.976642, 43.268374 ], "pop" : 4474, "state" : "NH" } +{ "_id" : "03840", "city" : "GREENLAND", "loc" : [ -70.847476, 43.035294 ], "pop" : 2450, "state" : "NH" } +{ "_id" : "03841", "city" : "HAMPSTEAD", "loc" : [ -71.175802, 42.881957 ], "pop" : 5291, "state" : "NH" } +{ "_id" : "03842", "city" : "HAMPTON", "loc" : [ -70.824336, 42.935883 ], "pop" : 12278, "state" : "NH" } +{ "_id" : "03844", "city" : "HAMPTON FALLS", "loc" : [ -70.887608, 42.926323 ], "pop" : 1503, "state" : "NH" } +{ "_id" : "03845", "city" : "INTERVALE", "loc" : [ -71.119415, 44.095479 ], "pop" : 1811, "state" : "NH" } +{ "_id" : "03846", "city" : "JACKSON", "loc" : [ -71.187808, 44.166989 ], "pop" : 689, "state" : "NH" } +{ "_id" : "03848", "city" : "KINGSTON", "loc" : [ -71.063914, 42.913258 ], "pop" : 6111, "state" : "NH" } +{ "_id" : "03849", "city" : "MADISON", "loc" : [ -71.125412, 43.915206 ], "pop" : 1669, "state" : "NH" } +{ "_id" : "03852", "city" : "MILTON MILLS", "loc" : [ -70.969729, 43.502494 ], "pop" : 514, "state" : "NH" } +{ "_id" : "03853", "city" : "MIRROR LAKE", "loc" : [ -71.272858, 43.636552 ], "pop" : 696, "state" : "NH" } +{ "_id" : "03854", "city" : "NEW CASTLE", "loc" : [ -70.719922, 43.068114 ], "pop" : 840, "state" : "NH" } +{ "_id" : "03855", "city" : "NEW DURHAM", "loc" : [ -71.140828, 43.443045 ], "pop" : 2148, "state" : "NH" } +{ "_id" : "03857", "city" : "NEWMARKET", "loc" : [ -70.95531699999999, 43.072628 ], "pop" : 9049, "state" : "NH" } +{ "_id" : "03858", "city" : "NEWTON", "loc" : [ -71.04202100000001, 42.867805 ], "pop" : 2944, "state" : "NH" } +{ "_id" : "03860", "city" : "NORTH CONWAY", "loc" : [ -71.123811, 44.033613 ], "pop" : 3458, "state" : "NH" } +{ "_id" : "03862", "city" : "NORTH HAMPTON", "loc" : [ -70.82673800000001, 42.977625 ], "pop" : 3637, "state" : "NH" } +{ "_id" : "03864", "city" : "OSSIPEE", "loc" : [ -71.11287299999999, 43.694506 ], "pop" : 1490, "state" : "NH" } +{ "_id" : "03865", "city" : "PLAISTOW", "loc" : [ -71.093397, 42.835551 ], "pop" : 7124, "state" : "NH" } +{ "_id" : "03867", "city" : "ROCHESTER", "loc" : [ -71.055753, 43.309203 ], "pop" : 3793, "state" : "NH" } +{ "_id" : "03868", "city" : "EAST ROCHESTER", "loc" : [ -70.968581, 43.31256 ], "pop" : 20616, "state" : "NH" } +{ "_id" : "03869", "city" : "ROLLINSFORD", "loc" : [ -70.833207, 43.226936 ], "pop" : 2395, "state" : "NH" } +{ "_id" : "03870", "city" : "RYE", "loc" : [ -70.765153, 43.009468 ], "pop" : 4415, "state" : "NH" } +{ "_id" : "03872", "city" : "SANBORNVILLE", "loc" : [ -71.020005, 43.551278 ], "pop" : 2382, "state" : "NH" } +{ "_id" : "03873", "city" : "SANDOWN", "loc" : [ -71.18606, 42.930819 ], "pop" : 4060, "state" : "NH" } +{ "_id" : "03874", "city" : "SEABROOK", "loc" : [ -70.86463999999999, 42.88536 ], "pop" : 6503, "state" : "NH" } +{ "_id" : "03875", "city" : "SILVER LAKE", "loc" : [ -71.190501, 43.878974 ], "pop" : 640, "state" : "NH" } +{ "_id" : "03878", "city" : "SOMERSWORTH", "loc" : [ -70.87558900000001, 43.252546 ], "pop" : 11170, "state" : "NH" } +{ "_id" : "03882", "city" : "SOUTH EFFINGHAM", "loc" : [ -71.002109, 43.721216 ], "pop" : 201, "state" : "NH" } +{ "_id" : "03883", "city" : "SOUTH TAMWORTH", "loc" : [ -71.311654, 43.833613 ], "pop" : 188, "state" : "NH" } +{ "_id" : "03884", "city" : "STRAFFORD", "loc" : [ -71.162475, 43.250575 ], "pop" : 1618, "state" : "NH" } +{ "_id" : "03885", "city" : "STRATHAM", "loc" : [ -70.899714, 43.019432 ], "pop" : 4967, "state" : "NH" } +{ "_id" : "03886", "city" : "TAMWORTH", "loc" : [ -71.264454, 43.862049 ], "pop" : 1285, "state" : "NH" } +{ "_id" : "03887", "city" : "UNION", "loc" : [ -71.02085700000001, 43.4382 ], "pop" : 4229, "state" : "NH" } +{ "_id" : "03890", "city" : "WEST OSSIPEE", "loc" : [ -71.205141, 43.835956 ], "pop" : 362, "state" : "NH" } +{ "_id" : "03894", "city" : "WOLFEBORO", "loc" : [ -71.190843, 43.594996 ], "pop" : 5586, "state" : "NH" } +{ "_id" : "03901", "city" : "BERWICK", "loc" : [ -70.85503799999999, 43.28992 ], "pop" : 5942, "state" : "ME" } +{ "_id" : "03902", "city" : "CAPE NEDDICK", "loc" : [ -70.639685, 43.213318 ], "pop" : 953, "state" : "ME" } +{ "_id" : "03903", "city" : "ELIOT", "loc" : [ -70.78221600000001, 43.130943 ], "pop" : 6506, "state" : "ME" } +{ "_id" : "03904", "city" : "KITTERY", "loc" : [ -70.742876, 43.092128 ], "pop" : 3537, "state" : "ME" } +{ "_id" : "03905", "city" : "KITTERY POINT", "loc" : [ -70.712108, 43.097571 ], "pop" : 4589, "state" : "ME" } +{ "_id" : "03906", "city" : "NORTH BERWICK", "loc" : [ -70.72117299999999, 43.325401 ], "pop" : 6465, "state" : "ME" } +{ "_id" : "03907", "city" : "OGUNQUIT", "loc" : [ -70.597176, 43.228457 ], "pop" : 852, "state" : "ME" } +{ "_id" : "03908", "city" : "SOUTH BERWICK", "loc" : [ -70.785949, 43.229201 ], "pop" : 5982, "state" : "ME" } +{ "_id" : "03909", "city" : "YORK", "loc" : [ -70.657826, 43.154447 ], "pop" : 8477, "state" : "ME" } +{ "_id" : "04001", "city" : "ACTON", "loc" : [ -70.93068700000001, 43.549405 ], "pop" : 767, "state" : "ME" } +{ "_id" : "04002", "city" : "ALFRED", "loc" : [ -70.69608700000001, 43.487503 ], "pop" : 4730, "state" : "ME" } +{ "_id" : "04003", "city" : "BAILEY ISLAND", "loc" : [ -69.995175, 43.734147 ], "pop" : 464, "state" : "ME" } +{ "_id" : "04005", "city" : "ARUNDEL", "loc" : [ -70.47192800000001, 43.483647 ], "pop" : 23646, "state" : "ME" } +{ "_id" : "04006", "city" : "BIDDEFORD POOL", "loc" : [ -70.352024, 43.442722 ], "pop" : 269, "state" : "ME" } +{ "_id" : "04008", "city" : "BOWDOINHAM", "loc" : [ -69.91884899999999, 44.036806 ], "pop" : 4328, "state" : "ME" } +{ "_id" : "04009", "city" : "BRIDGTON", "loc" : [ -70.724081, 44.052049 ], "pop" : 3980, "state" : "ME" } +{ "_id" : "04010", "city" : "BROWNFIELD", "loc" : [ -70.90322500000001, 43.971316 ], "pop" : 1148, "state" : "ME" } +{ "_id" : "04011", "city" : "BIRCH ISLAND", "loc" : [ -69.95546899999999, 43.897591 ], "pop" : 22557, "state" : "ME" } +{ "_id" : "04013", "city" : "BUSTINS ISLAND", "loc" : [ -70.042247, 43.79602 ], "pop" : 0, "state" : "ME" } +{ "_id" : "04015", "city" : "CASCO", "loc" : [ -70.52601300000001, 43.959623 ], "pop" : 3010, "state" : "ME" } +{ "_id" : "04016", "city" : "CENTER LOVELL", "loc" : [ -70.883618, 44.168139 ], "pop" : 148, "state" : "ME" } +{ "_id" : "04017", "city" : "CHEBEAGUE ISLAND", "loc" : [ -70.116878, 43.735363 ], "pop" : 337, "state" : "ME" } +{ "_id" : "04019", "city" : "CLIFF ISLAND", "loc" : [ -70.107097, 43.695547 ], "pop" : 87, "state" : "ME" } +{ "_id" : "04020", "city" : "CORNISH", "loc" : [ -70.77843300000001, 43.779612 ], "pop" : 1736, "state" : "ME" } +{ "_id" : "04021", "city" : "CUMBERLAND CENTE", "loc" : [ -70.2484, 43.809818 ], "pop" : 8544, "state" : "ME" } +{ "_id" : "04022", "city" : "DENMARK", "loc" : [ -70.79240900000001, 43.975499 ], "pop" : 679, "state" : "ME" } +{ "_id" : "04024", "city" : "EAST BALDWIN", "loc" : [ -70.692159, 43.864604 ], "pop" : 976, "state" : "ME" } +{ "_id" : "04027", "city" : "WEST LEBANON", "loc" : [ -70.91098599999999, 43.410304 ], "pop" : 5224, "state" : "ME" } +{ "_id" : "04029", "city" : "NORTH SEBAGO", "loc" : [ -70.633865, 43.882247 ], "pop" : 597, "state" : "ME" } +{ "_id" : "04030", "city" : "EAST WATERBORO", "loc" : [ -70.69062599999999, 43.599537 ], "pop" : 1153, "state" : "ME" } +{ "_id" : "04032", "city" : "FREEPORT", "loc" : [ -70.113854, 43.851093 ], "pop" : 8081, "state" : "ME" } +{ "_id" : "04037", "city" : "FRYEBURG", "loc" : [ -70.966841, 44.031278 ], "pop" : 2551, "state" : "ME" } +{ "_id" : "04038", "city" : "GORHAM", "loc" : [ -70.467968, 43.684329 ], "pop" : 13642, "state" : "ME" } +{ "_id" : "04039", "city" : "GRAY", "loc" : [ -70.342939, 43.894202 ], "pop" : 5383, "state" : "ME" } +{ "_id" : "04040", "city" : "HARRISON", "loc" : [ -70.65385499999999, 44.107099 ], "pop" : 2274, "state" : "ME" } +{ "_id" : "04041", "city" : "HIRAM", "loc" : [ -70.853076, 43.862217 ], "pop" : 1905, "state" : "ME" } +{ "_id" : "04042", "city" : "HOLLIS CENTER", "loc" : [ -70.605074, 43.594578 ], "pop" : 2243, "state" : "ME" } +{ "_id" : "04043", "city" : "KENNEBUNK", "loc" : [ -70.547802, 43.388055 ], "pop" : 7826, "state" : "ME" } +{ "_id" : "04046", "city" : "KENNEBUNKPORT", "loc" : [ -70.47286699999999, 43.392288 ], "pop" : 5220, "state" : "ME" } +{ "_id" : "04047", "city" : "KEZAR FALLS", "loc" : [ -70.892717, 43.785361 ], "pop" : 852, "state" : "ME" } +{ "_id" : "04048", "city" : "LIMERICK", "loc" : [ -70.786556, 43.696265 ], "pop" : 2982, "state" : "ME" } +{ "_id" : "04049", "city" : "LIMINGTON", "loc" : [ -70.675178, 43.726031 ], "pop" : 776, "state" : "ME" } +{ "_id" : "04050", "city" : "LONG ISLAND", "loc" : [ -70.15509, 43.692014 ], "pop" : 201, "state" : "ME" } +{ "_id" : "04051", "city" : "LOVELL", "loc" : [ -70.929951, 44.161404 ], "pop" : 763, "state" : "ME" } +{ "_id" : "04053", "city" : "MEREPOINT", "loc" : [ -70.00346999999999, 43.843496 ], "pop" : 269, "state" : "ME" } +{ "_id" : "04055", "city" : "NAPLES", "loc" : [ -70.598754, 43.968121 ], "pop" : 2868, "state" : "ME" } +{ "_id" : "04058", "city" : "NORTH FRYEBURG", "loc" : [ -70.981286, 44.132936 ], "pop" : 185, "state" : "ME" } +{ "_id" : "04060", "city" : "NORTH SHAPLEIGH", "loc" : [ -70.874392, 43.583458 ], "pop" : 302, "state" : "ME" } +{ "_id" : "04061", "city" : "NORTH WATERBORO", "loc" : [ -70.729799, 43.639976 ], "pop" : 1516, "state" : "ME" } +{ "_id" : "04062", "city" : "WINDHAM", "loc" : [ -70.414281, 43.795771 ], "pop" : 13482, "state" : "ME" } +{ "_id" : "04064", "city" : "OLD ORCHARD BEAC", "loc" : [ -70.392053, 43.517449 ], "pop" : 8451, "state" : "ME" } +{ "_id" : "04066", "city" : "ORRS ISLAND", "loc" : [ -69.966793, 43.77267 ], "pop" : 861, "state" : "ME" } +{ "_id" : "04068", "city" : "PORTER", "loc" : [ -70.924266, 43.826216 ], "pop" : 985, "state" : "ME" } +{ "_id" : "04069", "city" : "POWNAL", "loc" : [ -70.195497, 43.890042 ], "pop" : 1690, "state" : "ME" } +{ "_id" : "04071", "city" : "RAYMOND", "loc" : [ -70.449834, 43.921917 ], "pop" : 3516, "state" : "ME" } +{ "_id" : "04072", "city" : "SACO", "loc" : [ -70.454632, 43.520946 ], "pop" : 16192, "state" : "ME" } +{ "_id" : "04073", "city" : "SANFORD", "loc" : [ -70.75847899999999, 43.428541 ], "pop" : 15723, "state" : "ME" } +{ "_id" : "04074", "city" : "SCARBOROUGH", "loc" : [ -70.345668, 43.583476 ], "pop" : 12550, "state" : "ME" } +{ "_id" : "04075", "city" : "SEBAGO LAKE", "loc" : [ -70.573454, 43.758355 ], "pop" : 4141, "state" : "ME" } +{ "_id" : "04076", "city" : "SHAPLEIGH", "loc" : [ -70.828619, 43.567353 ], "pop" : 314, "state" : "ME" } +{ "_id" : "04077", "city" : "SOUTH CASCO", "loc" : [ -70.51293800000001, 43.876736 ], "pop" : 250, "state" : "ME" } +{ "_id" : "04079", "city" : "SOUTH HARPSWELL", "loc" : [ -69.993709, 43.781932 ], "pop" : 1767, "state" : "ME" } +{ "_id" : "04081", "city" : "SOUTH WATERFORD", "loc" : [ -70.792061, 44.151256 ], "pop" : 439, "state" : "ME" } +{ "_id" : "04083", "city" : "SPRINGVALE", "loc" : [ -70.806445, 43.471499 ], "pop" : 5472, "state" : "ME" } +{ "_id" : "04084", "city" : "STANDISH", "loc" : [ -70.48065699999999, 43.814211 ], "pop" : 1592, "state" : "ME" } +{ "_id" : "04085", "city" : "STEEP FALLS", "loc" : [ -70.645627, 43.757137 ], "pop" : 2060, "state" : "ME" } +{ "_id" : "04086", "city" : "PEJEPSCOT", "loc" : [ -69.964479, 43.941286 ], "pop" : 8535, "state" : "ME" } +{ "_id" : "04087", "city" : "WATERBORO", "loc" : [ -70.743115, 43.566097 ], "pop" : 1797, "state" : "ME" } +{ "_id" : "04090", "city" : "WELLS", "loc" : [ -70.59688300000001, 43.314352 ], "pop" : 5590, "state" : "ME" } +{ "_id" : "04091", "city" : "WEST BALDWIN", "loc" : [ -70.749015, 43.829873 ], "pop" : 770, "state" : "ME" } +{ "_id" : "04092", "city" : "WESTBROOK", "loc" : [ -70.35803300000001, 43.684268 ], "pop" : 16121, "state" : "ME" } +{ "_id" : "04093", "city" : "WEST BUXTON", "loc" : [ -70.601546, 43.661586 ], "pop" : 4910, "state" : "ME" } +{ "_id" : "04095", "city" : "MAPLEWOOD", "loc" : [ -70.913476, 43.643417 ], "pop" : 1126, "state" : "ME" } +{ "_id" : "04096", "city" : "YARMOUTH", "loc" : [ -70.174958, 43.800933 ], "pop" : 3068, "state" : "ME" } +{ "_id" : "04101", "city" : "PORTLAND", "loc" : [ -70.258864, 43.660564 ], "pop" : 17147, "state" : "ME" } +{ "_id" : "04102", "city" : "PORTLAND", "loc" : [ -70.28981, 43.660168 ], "pop" : 17660, "state" : "ME" } +{ "_id" : "04103", "city" : "PORTLAND", "loc" : [ -70.2876, 43.687568 ], "pop" : 28461, "state" : "ME" } +{ "_id" : "04105", "city" : "FALMOUTH", "loc" : [ -70.26253, 43.734038 ], "pop" : 7609, "state" : "ME" } +{ "_id" : "04106", "city" : "SOUTH PORTLAND", "loc" : [ -70.270878, 43.631847 ], "pop" : 23131, "state" : "ME" } +{ "_id" : "04107", "city" : "CAPE ELIZABETH", "loc" : [ -70.230099, 43.601735 ], "pop" : 8854, "state" : "ME" } +{ "_id" : "04108", "city" : "PEAKS ISLAND", "loc" : [ -70.194017, 43.658921 ], "pop" : 775, "state" : "ME" } +{ "_id" : "04109", "city" : "CUSHING ISLAND", "loc" : [ -70.202201, 43.674971 ], "pop" : 28, "state" : "ME" } +{ "_id" : "04110", "city" : "CUMBERLAND FORES", "loc" : [ -70.188333, 43.774485 ], "pop" : 2879, "state" : "ME" } +{ "_id" : "04210", "city" : "AUBURN", "loc" : [ -70.238978, 44.094785 ], "pop" : 24160, "state" : "ME" } +{ "_id" : "04216", "city" : "ANDOVER", "loc" : [ -70.79666, 44.663703 ], "pop" : 878, "state" : "ME" } +{ "_id" : "04217", "city" : "BETHEL", "loc" : [ -70.803685, 44.416176 ], "pop" : 2775, "state" : "ME" } +{ "_id" : "04219", "city" : "BRYANT POND", "loc" : [ -70.643468, 44.395714 ], "pop" : 1563, "state" : "ME" } +{ "_id" : "04220", "city" : "BUCKFIELD", "loc" : [ -70.36829299999999, 44.287676 ], "pop" : 1551, "state" : "ME" } +{ "_id" : "04221", "city" : "CANTON", "loc" : [ -70.321719, 44.418894 ], "pop" : 1673, "state" : "ME" } +{ "_id" : "04223", "city" : "DANVILLE", "loc" : [ -70.27205499999999, 44.036528 ], "pop" : 1086, "state" : "ME" } +{ "_id" : "04224", "city" : "DIXFIELD", "loc" : [ -70.424099, 44.554799 ], "pop" : 3032, "state" : "ME" } +{ "_id" : "04225", "city" : "DRYDEN", "loc" : [ -70.223962, 44.600218 ], "pop" : 4520, "state" : "ME" } +{ "_id" : "04226", "city" : "EAST ANDOVER", "loc" : [ -70.729555, 44.603011 ], "pop" : 154, "state" : "ME" } +{ "_id" : "04228", "city" : "EAST LIVERMORE", "loc" : [ -70.130334, 44.399402 ], "pop" : 560, "state" : "ME" } +{ "_id" : "04231", "city" : "EAST STONEHAM", "loc" : [ -70.852936, 44.238201 ], "pop" : 429, "state" : "ME" } +{ "_id" : "04235", "city" : "FRYE", "loc" : [ -70.565319, 44.599482 ], "pop" : 28, "state" : "ME" } +{ "_id" : "04236", "city" : "GREENE", "loc" : [ -70.145532, 44.189059 ], "pop" : 3661, "state" : "ME" } +{ "_id" : "04237", "city" : "HANOVER", "loc" : [ -70.716735, 44.495875 ], "pop" : 272, "state" : "ME" } +{ "_id" : "04238", "city" : "HEBRON", "loc" : [ -70.37536900000001, 44.202136 ], "pop" : 826, "state" : "ME" } +{ "_id" : "04239", "city" : "JAY", "loc" : [ -70.209883, 44.515994 ], "pop" : 4631, "state" : "ME" } +{ "_id" : "04240", "city" : "LEWISTON", "loc" : [ -70.191619, 44.098538 ], "pop" : 40173, "state" : "ME" } +{ "_id" : "04250", "city" : "LISBON", "loc" : [ -70.113933, 44.025511 ], "pop" : 3633, "state" : "ME" } +{ "_id" : "04252", "city" : "LISBON FALLS", "loc" : [ -70.073375, 43.997759 ], "pop" : 8095, "state" : "ME" } +{ "_id" : "04254", "city" : "LIVERMORE FALLS", "loc" : [ -70.193614, 44.445756 ], "pop" : 4845, "state" : "ME" } +{ "_id" : "04256", "city" : "MECHANIC FALLS", "loc" : [ -70.368206, 44.099957 ], "pop" : 6247, "state" : "ME" } +{ "_id" : "04257", "city" : "MEXICO", "loc" : [ -70.535797, 44.562776 ], "pop" : 3316, "state" : "ME" } +{ "_id" : "04259", "city" : "MONMOUTH", "loc" : [ -70.02627, 44.22083 ], "pop" : 1838, "state" : "ME" } +{ "_id" : "04260", "city" : "NEW GLOUCESTER", "loc" : [ -70.297381, 43.960835 ], "pop" : 3916, "state" : "ME" } +{ "_id" : "04261", "city" : "NEWRY", "loc" : [ -70.79261099999999, 44.407937 ], "pop" : 300, "state" : "ME" } +{ "_id" : "04263", "city" : "LEEDS", "loc" : [ -70.125277, 44.28343 ], "pop" : 1669, "state" : "ME" } +{ "_id" : "04265", "city" : "NORTH MONMOUTH", "loc" : [ -70.036686, 44.275328 ], "pop" : 616, "state" : "ME" } +{ "_id" : "04266", "city" : "NORTH TURNER", "loc" : [ -70.256147, 44.335031 ], "pop" : 953, "state" : "ME" } +{ "_id" : "04267", "city" : "NORTH WATERFORD", "loc" : [ -70.717393, 44.206511 ], "pop" : 1168, "state" : "ME" } +{ "_id" : "04268", "city" : "NORWAY", "loc" : [ -70.560135, 44.212654 ], "pop" : 5258, "state" : "ME" } +{ "_id" : "04270", "city" : "OXFORD", "loc" : [ -70.509799, 44.11183 ], "pop" : 2822, "state" : "ME" } +{ "_id" : "04273", "city" : "POLAND", "loc" : [ -70.41181899999999, 44.059187 ], "pop" : 179, "state" : "ME" } +{ "_id" : "04274", "city" : "POLAND SPRING", "loc" : [ -70.37966400000001, 44.021162 ], "pop" : 1375, "state" : "ME" } +{ "_id" : "04275", "city" : "ROXBURY", "loc" : [ -70.609188, 44.65657 ], "pop" : 548, "state" : "ME" } +{ "_id" : "04276", "city" : "RUMFORD", "loc" : [ -70.564475, 44.543446 ], "pop" : 7035, "state" : "ME" } +{ "_id" : "04278", "city" : "RUMFORD CENTER", "loc" : [ -70.700058, 44.592334 ], "pop" : 92, "state" : "ME" } +{ "_id" : "04279", "city" : "RUMFORD POINT", "loc" : [ -70.700276, 44.557104 ], "pop" : 36, "state" : "ME" } +{ "_id" : "04280", "city" : "SABATTUS", "loc" : [ -70.074792, 44.113269 ], "pop" : 4809, "state" : "ME" } +{ "_id" : "04281", "city" : "SOUTH PARIS", "loc" : [ -70.50117899999999, 44.216674 ], "pop" : 6054, "state" : "ME" } +{ "_id" : "04282", "city" : "TURNER", "loc" : [ -70.249444, 44.255669 ], "pop" : 3365, "state" : "ME" } +{ "_id" : "04284", "city" : "WAYNE", "loc" : [ -70.0712, 44.349283 ], "pop" : 546, "state" : "ME" } +{ "_id" : "04285", "city" : "WELD", "loc" : [ -70.42489999999999, 44.701624 ], "pop" : 430, "state" : "ME" } +{ "_id" : "04289", "city" : "WEST PARIS", "loc" : [ -70.573167, 44.32527 ], "pop" : 2149, "state" : "ME" } +{ "_id" : "04290", "city" : "PERU", "loc" : [ -70.443459, 44.494408 ], "pop" : 1541, "state" : "ME" } +{ "_id" : "04291", "city" : "WEST POLAND", "loc" : [ -70.450166, 44.047167 ], "pop" : 733, "state" : "ME" } +{ "_id" : "04292", "city" : "WEST SUMNER", "loc" : [ -70.43231400000001, 44.372804 ], "pop" : 761, "state" : "ME" } +{ "_id" : "04294", "city" : "WILTON", "loc" : [ -70.296064, 44.59107 ], "pop" : 227, "state" : "ME" } +{ "_id" : "04330", "city" : "AUGUSTA", "loc" : [ -69.766548, 44.323228 ], "pop" : 25195, "state" : "ME" } +{ "_id" : "04341", "city" : "COOPERS MILLS", "loc" : [ -69.507672, 44.258823 ], "pop" : 1082, "state" : "ME" } +{ "_id" : "04342", "city" : "DRESDEN", "loc" : [ -69.745726, 44.078507 ], "pop" : 1336, "state" : "ME" } +{ "_id" : "04344", "city" : "FARMINGDALE", "loc" : [ -69.791313, 44.25233 ], "pop" : 2917, "state" : "ME" } +{ "_id" : "04345", "city" : "GARDINER", "loc" : [ -69.785774, 44.207029 ], "pop" : 8387, "state" : "ME" } +{ "_id" : "04346", "city" : "RANDOLPH", "loc" : [ -69.774918, 44.228704 ], "pop" : 6619, "state" : "ME" } +{ "_id" : "04347", "city" : "HALLOWELL", "loc" : [ -69.80573800000001, 44.286414 ], "pop" : 2613, "state" : "ME" } +{ "_id" : "04348", "city" : "JEFFERSON", "loc" : [ -69.483895, 44.189419 ], "pop" : 1488, "state" : "ME" } +{ "_id" : "04349", "city" : "KENTS HILL", "loc" : [ -70.074822, 44.438259 ], "pop" : 755, "state" : "ME" } +{ "_id" : "04350", "city" : "LITCHFIELD", "loc" : [ -69.958071, 44.163437 ], "pop" : 2354, "state" : "ME" } +{ "_id" : "04351", "city" : "MANCHESTER", "loc" : [ -69.884657, 44.308375 ], "pop" : 603, "state" : "ME" } +{ "_id" : "04352", "city" : "MOUNT VERNON", "loc" : [ -69.990336, 44.499342 ], "pop" : 1396, "state" : "ME" } +{ "_id" : "04353", "city" : "NORTH WHITEFIELD", "loc" : [ -69.602164, 44.217844 ], "pop" : 1931, "state" : "ME" } +{ "_id" : "04354", "city" : "PALERMO", "loc" : [ -69.43337, 44.384282 ], "pop" : 752, "state" : "ME" } +{ "_id" : "04355", "city" : "READFIELD", "loc" : [ -69.95063399999999, 44.403221 ], "pop" : 1725, "state" : "ME" } +{ "_id" : "04357", "city" : "RICHMOND", "loc" : [ -69.821077, 44.104213 ], "pop" : 3072, "state" : "ME" } +{ "_id" : "04358", "city" : "SOUTH CHINA", "loc" : [ -69.58036, 44.395334 ], "pop" : 182, "state" : "ME" } +{ "_id" : "04361", "city" : "WEEKS MILLS", "loc" : [ -69.541738, 44.407543 ], "pop" : 2942, "state" : "ME" } +{ "_id" : "04363", "city" : "WINDSOR", "loc" : [ -69.58058699999999, 44.300878 ], "pop" : 1618, "state" : "ME" } +{ "_id" : "04364", "city" : "WINTHROP", "loc" : [ -69.973128, 44.314031 ], "pop" : 7929, "state" : "ME" } +{ "_id" : "04401", "city" : "BANGOR", "loc" : [ -68.791839, 44.824199 ], "pop" : 40434, "state" : "ME" } +{ "_id" : "04406", "city" : "ABBOT VILLAGE", "loc" : [ -69.52513999999999, 45.279838 ], "pop" : 1193, "state" : "ME" } +{ "_id" : "04408", "city" : "AURORA", "loc" : [ -68.295929, 44.886113 ], "pop" : 141, "state" : "ME" } +{ "_id" : "04410", "city" : "BRADFORD", "loc" : [ -68.923491, 45.08552 ], "pop" : 1103, "state" : "ME" } +{ "_id" : "04411", "city" : "BRADLEY", "loc" : [ -68.626328, 44.901454 ], "pop" : 1136, "state" : "ME" } +{ "_id" : "04412", "city" : "BREWER", "loc" : [ -68.753896, 44.787433 ], "pop" : 9021, "state" : "ME" } +{ "_id" : "04413", "city" : "BROOKTON", "loc" : [ -67.70782800000001, 45.5686 ], "pop" : 236, "state" : "ME" } +{ "_id" : "04414", "city" : "BROWNVILLE", "loc" : [ -69.042331, 45.341229 ], "pop" : 1426, "state" : "ME" } +{ "_id" : "04416", "city" : "BUCKSPORT", "loc" : [ -68.77682299999999, 44.601546 ], "pop" : 5340, "state" : "ME" } +{ "_id" : "04417", "city" : "BURLINGTON", "loc" : [ -68.442701, 45.218438 ], "pop" : 643, "state" : "ME" } +{ "_id" : "04418", "city" : "CARDVILLE", "loc" : [ -68.60327700000001, 45.077599 ], "pop" : 1309, "state" : "ME" } +{ "_id" : "04419", "city" : "CARMEL", "loc" : [ -68.99415, 44.805315 ], "pop" : 3328, "state" : "ME" } +{ "_id" : "04422", "city" : "CHARLESTON", "loc" : [ -69.086856, 45.067017 ], "pop" : 1819, "state" : "ME" } +{ "_id" : "04423", "city" : "COSTIGAN", "loc" : [ -68.61296900000001, 44.975336 ], "pop" : 1895, "state" : "ME" } +{ "_id" : "04424", "city" : "DANFORTH", "loc" : [ -67.86877800000001, 45.668654 ], "pop" : 965, "state" : "ME" } +{ "_id" : "04426", "city" : "DOVER FOXCROFT", "loc" : [ -69.204472, 45.18774 ], "pop" : 5924, "state" : "ME" } +{ "_id" : "04427", "city" : "EAST CORINTH", "loc" : [ -69.008532, 44.983655 ], "pop" : 2177, "state" : "ME" } +{ "_id" : "04428", "city" : "EAST EDDINGTON", "loc" : [ -68.61883, 44.820642 ], "pop" : 2263, "state" : "ME" } +{ "_id" : "04429", "city" : "EAST HOLDEN", "loc" : [ -68.648307, 44.742209 ], "pop" : 4472, "state" : "ME" } +{ "_id" : "04430", "city" : "EAST MILLINOCKET", "loc" : [ -68.572822, 45.629967 ], "pop" : 2198, "state" : "ME" } +{ "_id" : "04431", "city" : "EAST ORLAND", "loc" : [ -68.70174, 44.57249 ], "pop" : 1281, "state" : "ME" } +{ "_id" : "04433", "city" : "ENFIELD", "loc" : [ -68.605802, 45.266477 ], "pop" : 1483, "state" : "ME" } +{ "_id" : "04434", "city" : "ETNA", "loc" : [ -69.13222500000001, 44.793232 ], "pop" : 966, "state" : "ME" } +{ "_id" : "04435", "city" : "EXETER", "loc" : [ -69.107934, 44.967927 ], "pop" : 561, "state" : "ME" } +{ "_id" : "04438", "city" : "FRANKFORT", "loc" : [ -68.933981, 44.59794 ], "pop" : 1141, "state" : "ME" } +{ "_id" : "04441", "city" : "GREENVILLE", "loc" : [ -69.58437600000001, 45.471566 ], "pop" : 2054, "state" : "ME" } +{ "_id" : "04442", "city" : "GREENVILLE JUNCT", "loc" : [ -69.63752599999999, 45.488394 ], "pop" : 99, "state" : "ME" } +{ "_id" : "04443", "city" : "GUILFORD", "loc" : [ -69.397491, 45.173455 ], "pop" : 2833, "state" : "ME" } +{ "_id" : "04444", "city" : "HAMPDEN", "loc" : [ -68.87305000000001, 44.741073 ], "pop" : 6756, "state" : "ME" } +{ "_id" : "04446", "city" : "HAYNESVILLE", "loc" : [ -67.98858, 45.837991 ], "pop" : 244, "state" : "ME" } +{ "_id" : "04448", "city" : "SEBOEIS", "loc" : [ -68.669252, 45.247813 ], "pop" : 1628, "state" : "ME" } +{ "_id" : "04449", "city" : "HUDSON", "loc" : [ -68.88783100000001, 44.991415 ], "pop" : 1048, "state" : "ME" } +{ "_id" : "04450", "city" : "KENDUSKEAG", "loc" : [ -68.934179, 44.918251 ], "pop" : 1234, "state" : "ME" } +{ "_id" : "04451", "city" : "KINGMAN", "loc" : [ -68.23662, 45.598433 ], "pop" : 378, "state" : "ME" } +{ "_id" : "04453", "city" : "LAGRANGE", "loc" : [ -68.83448, 45.178918 ], "pop" : 707, "state" : "ME" } +{ "_id" : "04455", "city" : "LEE", "loc" : [ -68.290885, 45.363504 ], "pop" : 832, "state" : "ME" } +{ "_id" : "04456", "city" : "LEVANT", "loc" : [ -68.98367, 44.884279 ], "pop" : 1627, "state" : "ME" } +{ "_id" : "04457", "city" : "LINCOLN", "loc" : [ -68.507693, 45.350832 ], "pop" : 4715, "state" : "ME" } +{ "_id" : "04458", "city" : "LINCOLN CENTER", "loc" : [ -68.457065, 45.431731 ], "pop" : 1556, "state" : "ME" } +{ "_id" : "04459", "city" : "MATTAWAMKEAG", "loc" : [ -68.35195, 45.526387 ], "pop" : 841, "state" : "ME" } +{ "_id" : "04460", "city" : "MEDWAY", "loc" : [ -68.52270900000001, 45.60704 ], "pop" : 1986, "state" : "ME" } +{ "_id" : "04461", "city" : "MILFORD", "loc" : [ -68.629597, 44.939263 ], "pop" : 1732, "state" : "ME" } +{ "_id" : "04462", "city" : "MILLINOCKET", "loc" : [ -68.710117, 45.659563 ], "pop" : 7265, "state" : "ME" } +{ "_id" : "04463", "city" : "DERBY", "loc" : [ -68.977098, 45.250697 ], "pop" : 3091, "state" : "ME" } +{ "_id" : "04464", "city" : "MONSON", "loc" : [ -69.48798600000001, 45.298088 ], "pop" : 263, "state" : "ME" } +{ "_id" : "04468", "city" : "OLD TOWN", "loc" : [ -68.67496, 44.943044 ], "pop" : 9290, "state" : "ME" } +{ "_id" : "04471", "city" : "NORTH AMITY", "loc" : [ -67.83774099999999, 45.805639 ], "pop" : 138, "state" : "ME" } +{ "_id" : "04472", "city" : "ORLAND", "loc" : [ -68.731312, 44.545818 ], "pop" : 524, "state" : "ME" } +{ "_id" : "04473", "city" : "ORONO", "loc" : [ -68.675466, 44.892472 ], "pop" : 10484, "state" : "ME" } +{ "_id" : "04474", "city" : "ORRINGTON", "loc" : [ -68.78759700000001, 44.726347 ], "pop" : 3309, "state" : "ME" } +{ "_id" : "04475", "city" : "PASSADUMKEAG", "loc" : [ -68.604328, 45.183687 ], "pop" : 428, "state" : "ME" } +{ "_id" : "04476", "city" : "PENOBSCOT", "loc" : [ -68.757409, 44.434371 ], "pop" : 2290, "state" : "ME" } +{ "_id" : "04478", "city" : "ROCKWOOD", "loc" : [ -69.822442, 45.659329 ], "pop" : 367, "state" : "ME" } +{ "_id" : "04479", "city" : "SANGERVILLE", "loc" : [ -69.321772, 45.140571 ], "pop" : 984, "state" : "ME" } +{ "_id" : "04487", "city" : "SPRINGFIELD", "loc" : [ -68.11075599999999, 45.42638 ], "pop" : 985, "state" : "ME" } +{ "_id" : "04488", "city" : "STETSON", "loc" : [ -69.106877, 44.884337 ], "pop" : 738, "state" : "ME" } +{ "_id" : "04490", "city" : "TOPSFIELD", "loc" : [ -67.747253, 45.430403 ], "pop" : 274, "state" : "ME" } +{ "_id" : "04491", "city" : "VANCEBORO", "loc" : [ -67.463419, 45.558761 ], "pop" : 217, "state" : "ME" } +{ "_id" : "04492", "city" : "WAITE", "loc" : [ -67.64281200000001, 45.357741 ], "pop" : 233, "state" : "ME" } +{ "_id" : "04495", "city" : "WINN", "loc" : [ -68.357465, 45.456786 ], "pop" : 479, "state" : "ME" } +{ "_id" : "04496", "city" : "WINTERPORT", "loc" : [ -68.886174, 44.655247 ], "pop" : 3175, "state" : "ME" } +{ "_id" : "04497", "city" : "WYTOPITLOCK", "loc" : [ -68.105541, 45.664476 ], "pop" : 384, "state" : "ME" } +{ "_id" : "04530", "city" : "BATH", "loc" : [ -69.826565, 43.906155 ], "pop" : 12628, "state" : "ME" } +{ "_id" : "04537", "city" : "BOOTHBAY", "loc" : [ -69.62732200000001, 43.894497 ], "pop" : 1701, "state" : "ME" } +{ "_id" : "04538", "city" : "CAPITOL ISLAND", "loc" : [ -69.61844000000001, 43.854559 ], "pop" : 2800, "state" : "ME" } +{ "_id" : "04539", "city" : "BRISTOL", "loc" : [ -69.495367, 43.951864 ], "pop" : 1220, "state" : "ME" } +{ "_id" : "04541", "city" : "CHAMBERLAIN", "loc" : [ -69.49861799999999, 43.884154 ], "pop" : 482, "state" : "ME" } +{ "_id" : "04543", "city" : "DAMARISCOTTA", "loc" : [ -69.504237, 44.029313 ], "pop" : 1217, "state" : "ME" } +{ "_id" : "04544", "city" : "EAST BOOTHBAY", "loc" : [ -69.593903, 43.826241 ], "pop" : 156, "state" : "ME" } +{ "_id" : "04547", "city" : "FRIENDSHIP", "loc" : [ -69.29160400000001, 44.006741 ], "pop" : 2085, "state" : "ME" } +{ "_id" : "04548", "city" : "MAC MAHAN", "loc" : [ -69.747424, 43.819649 ], "pop" : 936, "state" : "ME" } +{ "_id" : "04551", "city" : "MEDOMAK", "loc" : [ -69.43066399999999, 44.006292 ], "pop" : 540, "state" : "ME" } +{ "_id" : "04553", "city" : "NEWCASTLE", "loc" : [ -69.533113, 44.049866 ], "pop" : 1551, "state" : "ME" } +{ "_id" : "04554", "city" : "NEW HARBOR", "loc" : [ -69.50793400000001, 43.860541 ], "pop" : 362, "state" : "ME" } +{ "_id" : "04555", "city" : "NOBLEBORO", "loc" : [ -69.482786, 44.094301 ], "pop" : 1455, "state" : "ME" } +{ "_id" : "04556", "city" : "EDGECOMB", "loc" : [ -69.619742, 43.979179 ], "pop" : 1238, "state" : "ME" } +{ "_id" : "04558", "city" : "PEMAQUID", "loc" : [ -69.528919, 43.892389 ], "pop" : 103, "state" : "ME" } +{ "_id" : "04562", "city" : "PHIPPSBURG", "loc" : [ -69.814982, 43.768816 ], "pop" : 426, "state" : "ME" } +{ "_id" : "04563", "city" : "CUSHING", "loc" : [ -69.27206099999999, 43.986741 ], "pop" : 12, "state" : "ME" } +{ "_id" : "04564", "city" : "ROUND POND", "loc" : [ -69.46617000000001, 43.924983 ], "pop" : 159, "state" : "ME" } +{ "_id" : "04565", "city" : "SEBASCO ESTATES", "loc" : [ -69.857557, 43.769342 ], "pop" : 479, "state" : "ME" } +{ "_id" : "04567", "city" : "SMALL POINT", "loc" : [ -69.84116299999999, 43.731724 ], "pop" : 66, "state" : "ME" } +{ "_id" : "04568", "city" : "SOUTH BRISTOL", "loc" : [ -69.561367, 43.867714 ], "pop" : 476, "state" : "ME" } +{ "_id" : "04570", "city" : "SQUIRREL ISLAND", "loc" : [ -69.63097399999999, 43.809031 ], "pop" : 3, "state" : "ME" } +{ "_id" : "04571", "city" : "TREVETT", "loc" : [ -69.674601, 43.893508 ], "pop" : 338, "state" : "ME" } +{ "_id" : "04572", "city" : "WALDOBORO", "loc" : [ -69.374537, 44.104601 ], "pop" : 4702, "state" : "ME" } +{ "_id" : "04573", "city" : "WALPOLE", "loc" : [ -69.55165, 43.946235 ], "pop" : 349, "state" : "ME" } +{ "_id" : "04574", "city" : "WASHINGTON", "loc" : [ -69.384237, 44.269281 ], "pop" : 1261, "state" : "ME" } +{ "_id" : "04576", "city" : "WEST SOUTHPORT", "loc" : [ -69.667343, 43.823775 ], "pop" : 642, "state" : "ME" } +{ "_id" : "04578", "city" : "WISCASSET", "loc" : [ -69.682576, 44.007444 ], "pop" : 5928, "state" : "ME" } +{ "_id" : "04579", "city" : "WOOLWICH", "loc" : [ -69.789098, 43.950317 ], "pop" : 1781, "state" : "ME" } +{ "_id" : "04605", "city" : "ELLSWORTH", "loc" : [ -68.412093, 44.554824 ], "pop" : 10671, "state" : "ME" } +{ "_id" : "04606", "city" : "ADDISON", "loc" : [ -67.714573, 44.583038 ], "pop" : 1114, "state" : "ME" } +{ "_id" : "04607", "city" : "GOULDSBORO", "loc" : [ -68.08985699999999, 44.473054 ], "pop" : 1064, "state" : "ME" } +{ "_id" : "04609", "city" : "BAR HARBOR", "loc" : [ -68.24479100000001, 44.373799 ], "pop" : 5513, "state" : "ME" } +{ "_id" : "04611", "city" : "BEALS", "loc" : [ -67.605554, 44.512967 ], "pop" : 667, "state" : "ME" } +{ "_id" : "04612", "city" : "BERNARD", "loc" : [ -68.35803, 44.241543 ], "pop" : 186, "state" : "ME" } +{ "_id" : "04613", "city" : "BIRCH HARBOR", "loc" : [ -68.03168599999999, 44.384195 ], "pop" : 229, "state" : "ME" } +{ "_id" : "04614", "city" : "BLUE HILL", "loc" : [ -68.58851300000001, 44.434265 ], "pop" : 1417, "state" : "ME" } +{ "_id" : "04615", "city" : "BLUE HILL FALLS", "loc" : [ -68.590282, 44.390244 ], "pop" : 375, "state" : "ME" } +{ "_id" : "04616", "city" : "BROOKLIN", "loc" : [ -68.556518, 44.254134 ], "pop" : 260, "state" : "ME" } +{ "_id" : "04617", "city" : "BROOKSVILLE", "loc" : [ -68.731279, 44.375635 ], "pop" : 594, "state" : "ME" } +{ "_id" : "04618", "city" : "BUCKS HARBOR", "loc" : [ -67.396382, 44.624762 ], "pop" : 402, "state" : "ME" } +{ "_id" : "04619", "city" : "CALAIS", "loc" : [ -67.26408000000001, 45.171478 ], "pop" : 3963, "state" : "ME" } +{ "_id" : "04622", "city" : "CHERRYFIELD", "loc" : [ -67.943617, 44.622791 ], "pop" : 1341, "state" : "ME" } +{ "_id" : "04623", "city" : "COLUMBIA FALLS", "loc" : [ -67.75341, 44.66988 ], "pop" : 960, "state" : "ME" } +{ "_id" : "04624", "city" : "COREA", "loc" : [ -67.985032, 44.405281 ], "pop" : 507, "state" : "ME" } +{ "_id" : "04626", "city" : "CUTLER", "loc" : [ -67.249869, 44.67531 ], "pop" : 779, "state" : "ME" } +{ "_id" : "04627", "city" : "DEER ISLE", "loc" : [ -68.644839, 44.233951 ], "pop" : 949, "state" : "ME" } +{ "_id" : "04628", "city" : "DENNYSVILLE", "loc" : [ -67.224431, 44.896105 ], "pop" : 684, "state" : "ME" } +{ "_id" : "04630", "city" : "EAST MACHIAS", "loc" : [ -67.38206599999999, 44.742362 ], "pop" : 1574, "state" : "ME" } +{ "_id" : "04631", "city" : "EASTPORT", "loc" : [ -67.00739, 44.919966 ], "pop" : 2514, "state" : "ME" } +{ "_id" : "04634", "city" : "FRANKLIN", "loc" : [ -68.241653, 44.608734 ], "pop" : 1433, "state" : "ME" } +{ "_id" : "04640", "city" : "HANCOCK", "loc" : [ -68.2402, 44.50459 ], "pop" : 769, "state" : "ME" } +{ "_id" : "04642", "city" : "HARBORSIDE", "loc" : [ -68.800901, 44.338584 ], "pop" : 122, "state" : "ME" } +{ "_id" : "04643", "city" : "HARRINGTON", "loc" : [ -67.814722, 44.612218 ], "pop" : 986, "state" : "ME" } +{ "_id" : "04645", "city" : "ISLE AU HAUT", "loc" : [ -68.620598, 44.056057 ], "pop" : 46, "state" : "ME" } +{ "_id" : "04648", "city" : "JONESBORO", "loc" : [ -67.577692, 44.658153 ], "pop" : 585, "state" : "ME" } +{ "_id" : "04649", "city" : "JONESPORT", "loc" : [ -67.604403, 44.550936 ], "pop" : 1520, "state" : "ME" } +{ "_id" : "04650", "city" : "LITTLE DEER ISLE", "loc" : [ -68.70666300000001, 44.285213 ], "pop" : 235, "state" : "ME" } +{ "_id" : "04652", "city" : "LUBEC", "loc" : [ -67.04601599999999, 44.834772 ], "pop" : 2349, "state" : "ME" } +{ "_id" : "04653", "city" : "BASS HARBOR", "loc" : [ -68.380387, 44.1993 ], "pop" : 827, "state" : "ME" } +{ "_id" : "04654", "city" : "MACHIAS", "loc" : [ -67.481996, 44.72154 ], "pop" : 3766, "state" : "ME" } +{ "_id" : "04655", "city" : "MACHIASPORT", "loc" : [ -67.40727699999999, 44.682039 ], "pop" : 602, "state" : "ME" } +{ "_id" : "04656", "city" : "MANSET", "loc" : [ -68.314408, 44.262573 ], "pop" : 445, "state" : "ME" } +{ "_id" : "04657", "city" : "MEDDYBEMPS", "loc" : [ -67.382852, 45.019306 ], "pop" : 242, "state" : "ME" } +{ "_id" : "04658", "city" : "MILBRIDGE", "loc" : [ -67.884433, 44.536601 ], "pop" : 1587, "state" : "ME" } +{ "_id" : "04660", "city" : "MOUNT DESERT", "loc" : [ -68.352253, 44.311547 ], "pop" : 2184, "state" : "ME" } +{ "_id" : "04661", "city" : "NORTH BROOKLIN", "loc" : [ -68.577326, 44.308469 ], "pop" : 674, "state" : "ME" } +{ "_id" : "04666", "city" : "PEMBROKE", "loc" : [ -67.200204, 44.965396 ], "pop" : 1151, "state" : "ME" } +{ "_id" : "04667", "city" : "PERRY", "loc" : [ -67.092882, 44.988824 ], "pop" : 781, "state" : "ME" } +{ "_id" : "04668", "city" : "PRINCETON", "loc" : [ -67.600826, 45.213091 ], "pop" : 1918, "state" : "ME" } +{ "_id" : "04669", "city" : "PROSPECT HARBOR", "loc" : [ -68.02794299999999, 44.419489 ], "pop" : 385, "state" : "ME" } +{ "_id" : "04671", "city" : "ROBBINSTON", "loc" : [ -67.14330099999999, 45.067007 ], "pop" : 495, "state" : "ME" } +{ "_id" : "04673", "city" : "SARGENTVILLE", "loc" : [ -68.70522099999999, 44.3345 ], "pop" : 43, "state" : "ME" } +{ "_id" : "04676", "city" : "SEDGWICK", "loc" : [ -68.637659, 44.33552 ], "pop" : 908, "state" : "ME" } +{ "_id" : "04677", "city" : "SORRENTO", "loc" : [ -68.178665, 44.490696 ], "pop" : 295, "state" : "ME" } +{ "_id" : "04678", "city" : "SOUTH GOULDSBORO", "loc" : [ -68.030406, 44.47163 ], "pop" : 58, "state" : "ME" } +{ "_id" : "04679", "city" : "SOUTHWEST HARBOR", "loc" : [ -68.326471, 44.2823 ], "pop" : 927, "state" : "ME" } +{ "_id" : "04680", "city" : "STEUBEN", "loc" : [ -67.95031899999999, 44.497082 ], "pop" : 773, "state" : "ME" } +{ "_id" : "04681", "city" : "STONINGTON", "loc" : [ -68.674617, 44.175197 ], "pop" : 1746, "state" : "ME" } +{ "_id" : "04683", "city" : "SUNSET", "loc" : [ -68.707002, 44.217404 ], "pop" : 149, "state" : "ME" } +{ "_id" : "04684", "city" : "SURRY", "loc" : [ -68.506272, 44.488272 ], "pop" : 1004, "state" : "ME" } +{ "_id" : "04690", "city" : "WEST TREMONT", "loc" : [ -68.380365, 44.252778 ], "pop" : 119, "state" : "ME" } +{ "_id" : "04693", "city" : "WINTER HARBOR", "loc" : [ -68.084316, 44.390038 ], "pop" : 1157, "state" : "ME" } +{ "_id" : "04694", "city" : "WOODLAND", "loc" : [ -67.417519, 45.133234 ], "pop" : 2909, "state" : "ME" } +{ "_id" : "04730", "city" : "HOULTON", "loc" : [ -67.86301400000001, 46.11885 ], "pop" : 10382, "state" : "ME" } +{ "_id" : "04732", "city" : "ASHLAND", "loc" : [ -68.387608, 46.618438 ], "pop" : 2022, "state" : "ME" } +{ "_id" : "04733", "city" : "BENEDICTA", "loc" : [ -68.408855, 45.812484 ], "pop" : 192, "state" : "ME" } +{ "_id" : "04735", "city" : "BRIDGEWATER", "loc" : [ -67.841469, 46.422154 ], "pop" : 652, "state" : "ME" } +{ "_id" : "04736", "city" : "CARIBOU", "loc" : [ -68.020352, 46.870569 ], "pop" : 10928, "state" : "ME" } +{ "_id" : "04737", "city" : "CLAYTON LAKE", "loc" : [ -69.626445, 46.629805 ], "pop" : 54, "state" : "ME" } +{ "_id" : "04740", "city" : "EASTON", "loc" : [ -67.901777, 46.635697 ], "pop" : 1056, "state" : "ME" } +{ "_id" : "04742", "city" : "FORT FAIRFIELD", "loc" : [ -67.840204, 46.762272 ], "pop" : 4474, "state" : "ME" } +{ "_id" : "04743", "city" : "FORT KENT", "loc" : [ -68.590855, 47.196857 ], "pop" : 6076, "state" : "ME" } +{ "_id" : "04746", "city" : "GRAND ISLE", "loc" : [ -68.15423800000001, 47.304428 ], "pop" : 318, "state" : "ME" } +{ "_id" : "04747", "city" : "ISLAND FALLS", "loc" : [ -68.266722, 46.016866 ], "pop" : 1444, "state" : "ME" } +{ "_id" : "04749", "city" : "LILLE", "loc" : [ -68.110393, 47.263623 ], "pop" : 253, "state" : "ME" } +{ "_id" : "04750", "city" : "LIMESTONE", "loc" : [ -67.84508599999999, 46.924786 ], "pop" : 2693, "state" : "ME" } +{ "_id" : "04751", "city" : "LORING AFB", "loc" : [ -67.89858, 46.9416 ], "pop" : 7844, "state" : "ME" } +{ "_id" : "04756", "city" : "MADAWASKA", "loc" : [ -68.33280999999999, 47.329447 ], "pop" : 5860, "state" : "ME" } +{ "_id" : "04757", "city" : "MAPLETON", "loc" : [ -68.153584, 46.674634 ], "pop" : 1982, "state" : "ME" } +{ "_id" : "04758", "city" : "MARS HILL", "loc" : [ -67.862973, 46.522268 ], "pop" : 2010, "state" : "ME" } +{ "_id" : "04760", "city" : "MONTICELLO", "loc" : [ -67.84143899999999, 46.300658 ], "pop" : 1174, "state" : "ME" } +{ "_id" : "04762", "city" : "NEW SWEDEN", "loc" : [ -68.11545, 46.955916 ], "pop" : 935, "state" : "ME" } +{ "_id" : "04763", "city" : "OAKFIELD", "loc" : [ -68.129805, 46.108753 ], "pop" : 1113, "state" : "ME" } +{ "_id" : "04764", "city" : "OXBOW", "loc" : [ -68.521792, 46.401955 ], "pop" : 76, "state" : "ME" } +{ "_id" : "04765", "city" : "PATTEN", "loc" : [ -68.464669, 46.01316 ], "pop" : 1595, "state" : "ME" } +{ "_id" : "04768", "city" : "PORTAGE", "loc" : [ -68.487675, 46.775303 ], "pop" : 445, "state" : "ME" } +{ "_id" : "04769", "city" : "PRESQUE ISLE", "loc" : [ -68.01179, 46.684151 ], "pop" : 11058, "state" : "ME" } +{ "_id" : "04772", "city" : "SAINT AGATHA", "loc" : [ -68.32323700000001, 47.238655 ], "pop" : 919, "state" : "ME" } +{ "_id" : "04773", "city" : "SAINT DAVID", "loc" : [ -68.231368, 47.334328 ], "pop" : 285, "state" : "ME" } +{ "_id" : "04774", "city" : "SAINT FRANCIS", "loc" : [ -68.950309, 47.14071 ], "pop" : 1048, "state" : "ME" } +{ "_id" : "04776", "city" : "SHERMAN MILLS", "loc" : [ -68.369587, 45.877727 ], "pop" : 1139, "state" : "ME" } +{ "_id" : "04777", "city" : "SHERMAN STATION", "loc" : [ -68.461844, 45.885892 ], "pop" : 527, "state" : "ME" } +{ "_id" : "04779", "city" : "SINCLAIR", "loc" : [ -68.267922, 47.174384 ], "pop" : 216, "state" : "ME" } +{ "_id" : "04780", "city" : "SMYRNA MILLS", "loc" : [ -68.206363, 46.146412 ], "pop" : 453, "state" : "ME" } +{ "_id" : "04781", "city" : "SOLDIER POND", "loc" : [ -68.59808099999999, 47.151529 ], "pop" : 484, "state" : "ME" } +{ "_id" : "04783", "city" : "STOCKHOLM", "loc" : [ -68.208614, 47.064299 ], "pop" : 665, "state" : "ME" } +{ "_id" : "04785", "city" : "VAN BUREN", "loc" : [ -67.94589000000001, 47.158857 ], "pop" : 3391, "state" : "ME" } +{ "_id" : "04786", "city" : "WASHBURN", "loc" : [ -68.133836, 46.788271 ], "pop" : 2783, "state" : "ME" } +{ "_id" : "04787", "city" : "WESTFIELD", "loc" : [ -67.89736499999999, 46.508687 ], "pop" : 854, "state" : "ME" } +{ "_id" : "04841", "city" : "ROCKLAND", "loc" : [ -69.113938, 44.112326 ], "pop" : 8975, "state" : "ME" } +{ "_id" : "04843", "city" : "CAMDEN", "loc" : [ -69.07668200000001, 44.213718 ], "pop" : 5060, "state" : "ME" } +{ "_id" : "04847", "city" : "HOPE", "loc" : [ -69.146743, 44.258902 ], "pop" : 143, "state" : "ME" } +{ "_id" : "04848", "city" : "ISLESBORO", "loc" : [ -68.907346, 44.30823 ], "pop" : 580, "state" : "ME" } +{ "_id" : "04849", "city" : "LINCOLNVILLE", "loc" : [ -69.082446, 44.304825 ], "pop" : 2458, "state" : "ME" } +{ "_id" : "04852", "city" : "MONHEGAN", "loc" : [ -69.316429, 43.764222 ], "pop" : 88, "state" : "ME" } +{ "_id" : "04853", "city" : "NORTH HAVEN", "loc" : [ -68.866744, 44.143598 ], "pop" : 333, "state" : "ME" } +{ "_id" : "04854", "city" : "OWLS HEAD", "loc" : [ -69.089416, 44.073186 ], "pop" : 1624, "state" : "ME" } +{ "_id" : "04856", "city" : "ROCKPORT", "loc" : [ -69.090114, 44.188787 ], "pop" : 1421, "state" : "ME" } +{ "_id" : "04857", "city" : "SAINT GEORGE", "loc" : [ -69.201984, 43.998687 ], "pop" : 225, "state" : "ME" } +{ "_id" : "04858", "city" : "SOUTH THOMASTON", "loc" : [ -69.135937, 44.037785 ], "pop" : 1172, "state" : "ME" } +{ "_id" : "04859", "city" : "SPRUCE HEAD", "loc" : [ -69.17071, 44.010405 ], "pop" : 719, "state" : "ME" } +{ "_id" : "04860", "city" : "TENANTS HARBOR", "loc" : [ -69.23150099999999, 43.955473 ], "pop" : 1322, "state" : "ME" } +{ "_id" : "04861", "city" : "THOMASTON", "loc" : [ -69.18880299999999, 44.084568 ], "pop" : 3560, "state" : "ME" } +{ "_id" : "04862", "city" : "UNION", "loc" : [ -69.25243500000001, 44.242404 ], "pop" : 3853, "state" : "ME" } +{ "_id" : "04863", "city" : "VINALHAVEN", "loc" : [ -68.836816, 44.03968 ], "pop" : 1139, "state" : "ME" } +{ "_id" : "04864", "city" : "WARREN", "loc" : [ -69.247894, 44.127066 ], "pop" : 2816, "state" : "ME" } +{ "_id" : "04865", "city" : "WEST ROCKPORT", "loc" : [ -69.151049, 44.181966 ], "pop" : 555, "state" : "ME" } +{ "_id" : "04901", "city" : "WINSLOW", "loc" : [ -69.63591700000001, 44.547967 ], "pop" : 24915, "state" : "ME" } +{ "_id" : "04910", "city" : "ALBION", "loc" : [ -69.46828600000001, 44.535527 ], "pop" : 2616, "state" : "ME" } +{ "_id" : "04911", "city" : "ANSON", "loc" : [ -69.93085600000001, 44.783107 ], "pop" : 1698, "state" : "ME" } +{ "_id" : "04912", "city" : "ATHENS", "loc" : [ -69.669482, 44.938844 ], "pop" : 897, "state" : "ME" } +{ "_id" : "04915", "city" : "BELFAST", "loc" : [ -69.014753, 44.435436 ], "pop" : 9637, "state" : "ME" } +{ "_id" : "04917", "city" : "BELGRADE", "loc" : [ -69.860636, 44.46875 ], "pop" : 1513, "state" : "ME" } +{ "_id" : "04918", "city" : "BELGRADE LAKES", "loc" : [ -69.863681, 44.511103 ], "pop" : 316, "state" : "ME" } +{ "_id" : "04920", "city" : "BINGHAM", "loc" : [ -69.885721, 45.068241 ], "pop" : 1712, "state" : "ME" } +{ "_id" : "04921", "city" : "BROOKS", "loc" : [ -69.140393, 44.567807 ], "pop" : 1846, "state" : "ME" } +{ "_id" : "04922", "city" : "BURNHAM", "loc" : [ -69.380049, 44.684766 ], "pop" : 961, "state" : "ME" } +{ "_id" : "04923", "city" : "CAMBRIDGE", "loc" : [ -69.44193, 45.051281 ], "pop" : 863, "state" : "ME" } +{ "_id" : "04924", "city" : "CANAAN", "loc" : [ -69.54977700000001, 44.744976 ], "pop" : 1083, "state" : "ME" } +{ "_id" : "04925", "city" : "CARATUNK", "loc" : [ -69.93861699999999, 45.240999 ], "pop" : 124, "state" : "ME" } +{ "_id" : "04927", "city" : "CLINTON", "loc" : [ -69.52840500000001, 44.643995 ], "pop" : 4598, "state" : "ME" } +{ "_id" : "04928", "city" : "CORINNA", "loc" : [ -69.23234100000001, 44.926045 ], "pop" : 2363, "state" : "ME" } +{ "_id" : "04929", "city" : "DETROIT", "loc" : [ -69.316081, 44.777526 ], "pop" : 751, "state" : "ME" } +{ "_id" : "04930", "city" : "DEXTER", "loc" : [ -69.27965399999999, 45.020347 ], "pop" : 5875, "state" : "ME" } +{ "_id" : "04932", "city" : "DIXMONT", "loc" : [ -69.102532, 44.699078 ], "pop" : 1660, "state" : "ME" } +{ "_id" : "04936", "city" : "EUSTIS", "loc" : [ -70.457067, 45.162559 ], "pop" : 539, "state" : "ME" } +{ "_id" : "04937", "city" : "BENTON STATION", "loc" : [ -69.63321000000001, 44.609639 ], "pop" : 6718, "state" : "ME" } +{ "_id" : "04938", "city" : "FARMINGTON", "loc" : [ -70.13287800000001, 44.665339 ], "pop" : 9133, "state" : "ME" } +{ "_id" : "04941", "city" : "FREEDOM", "loc" : [ -69.319045, 44.463311 ], "pop" : 1775, "state" : "ME" } +{ "_id" : "04942", "city" : "WELLINGTON", "loc" : [ -69.56871, 45.003926 ], "pop" : 1217, "state" : "ME" } +{ "_id" : "04943", "city" : "HARTLAND", "loc" : [ -69.471754, 44.878155 ], "pop" : 1821, "state" : "ME" } +{ "_id" : "04945", "city" : "JACKMAN", "loc" : [ -70.249227, 45.635081 ], "pop" : 1207, "state" : "ME" } +{ "_id" : "04947", "city" : "KINGFIELD", "loc" : [ -70.183177, 44.985403 ], "pop" : 1501, "state" : "ME" } +{ "_id" : "04949", "city" : "LIBERTY", "loc" : [ -69.33058, 44.374085 ], "pop" : 790, "state" : "ME" } +{ "_id" : "04950", "city" : "MADISON", "loc" : [ -69.8449, 44.809623 ], "pop" : 4725, "state" : "ME" } +{ "_id" : "04951", "city" : "MONROE", "loc" : [ -69.03169, 44.592674 ], "pop" : 616, "state" : "ME" } +{ "_id" : "04952", "city" : "MORRILL", "loc" : [ -69.147105, 44.410693 ], "pop" : 1433, "state" : "ME" } +{ "_id" : "04953", "city" : "NEWPORT", "loc" : [ -69.267498, 44.839264 ], "pop" : 3272, "state" : "ME" } +{ "_id" : "04954", "city" : "NEW PORTLAND", "loc" : [ -70.092857, 44.885571 ], "pop" : 312, "state" : "ME" } +{ "_id" : "04955", "city" : "NEW SHARON", "loc" : [ -70.013927, 44.645803 ], "pop" : 1175, "state" : "ME" } +{ "_id" : "04956", "city" : "NEW VINEYARD", "loc" : [ -70.121953, 44.796658 ], "pop" : 661, "state" : "ME" } +{ "_id" : "04957", "city" : "NORRIDGEWOCK", "loc" : [ -69.830583, 44.68994 ], "pop" : 4520, "state" : "ME" } +{ "_id" : "04958", "city" : "NORTH ANSON", "loc" : [ -69.911946, 44.879662 ], "pop" : 1967, "state" : "ME" } +{ "_id" : "04961", "city" : "NORTH NEW PORTLA", "loc" : [ -70.043268, 44.95524 ], "pop" : 537, "state" : "ME" } +{ "_id" : "04962", "city" : "NORTH VASSALBORO", "loc" : [ -69.57808, 44.477748 ], "pop" : 2457, "state" : "ME" } +{ "_id" : "04963", "city" : "OAKLAND", "loc" : [ -69.740082, 44.51729 ], "pop" : 8695, "state" : "ME" } +{ "_id" : "04965", "city" : "PALMYRA", "loc" : [ -69.381084, 44.857578 ], "pop" : 1093, "state" : "ME" } +{ "_id" : "04966", "city" : "PHILLIPS", "loc" : [ -70.360079, 44.837486 ], "pop" : 1930, "state" : "ME" } +{ "_id" : "04967", "city" : "PITTSFIELD", "loc" : [ -69.40223, 44.787109 ], "pop" : 4719, "state" : "ME" } +{ "_id" : "04969", "city" : "PLYMOUTH", "loc" : [ -69.226562, 44.769938 ], "pop" : 974, "state" : "ME" } +{ "_id" : "04970", "city" : "RANGELEY", "loc" : [ -70.66584400000001, 44.96306 ], "pop" : 1391, "state" : "ME" } +{ "_id" : "04971", "city" : "SAINT ALBANS", "loc" : [ -69.399179, 44.929264 ], "pop" : 1575, "state" : "ME" } +{ "_id" : "04973", "city" : "SEARSMONT", "loc" : [ -69.219579, 44.377035 ], "pop" : 422, "state" : "ME" } +{ "_id" : "04974", "city" : "SEARSPORT", "loc" : [ -68.93112499999999, 44.487672 ], "pop" : 1927, "state" : "ME" } +{ "_id" : "04976", "city" : "SKOWHEGAN", "loc" : [ -69.697571, 44.777212 ], "pop" : 10166, "state" : "ME" } +{ "_id" : "04978", "city" : "SMITHFIELD", "loc" : [ -69.807496, 44.630107 ], "pop" : 715, "state" : "ME" } +{ "_id" : "04979", "city" : "SOLON", "loc" : [ -69.833018, 44.967605 ], "pop" : 1236, "state" : "ME" } +{ "_id" : "04981", "city" : "STOCKTON SPRINGS", "loc" : [ -68.855974, 44.514056 ], "pop" : 1925, "state" : "ME" } +{ "_id" : "04982", "city" : "STRATTON", "loc" : [ -70.431928, 45.123197 ], "pop" : 262, "state" : "ME" } +{ "_id" : "04983", "city" : "STRONG", "loc" : [ -70.222054, 44.82236 ], "pop" : 1631, "state" : "ME" } +{ "_id" : "04984", "city" : "TEMPLE", "loc" : [ -70.24263500000001, 44.695417 ], "pop" : 560, "state" : "ME" } +{ "_id" : "04985", "city" : "WEST FORKS", "loc" : [ -69.98405700000001, 45.383905 ], "pop" : 86, "state" : "ME" } +{ "_id" : "04986", "city" : "THORNDIKE", "loc" : [ -69.24865800000001, 44.574406 ], "pop" : 962, "state" : "ME" } +{ "_id" : "04987", "city" : "TROY", "loc" : [ -69.25488, 44.675657 ], "pop" : 802, "state" : "ME" } +{ "_id" : "04988", "city" : "UNITY", "loc" : [ -69.332778, 44.600676 ], "pop" : 1817, "state" : "ME" } +{ "_id" : "04989", "city" : "VASSALBORO", "loc" : [ -69.651904, 44.440455 ], "pop" : 1929, "state" : "ME" } +{ "_id" : "05001", "city" : "WHITE RIVER JUNC", "loc" : [ -72.350351, 43.663431 ], "pop" : 9500, "state" : "VT" } +{ "_id" : "05032", "city" : "BETHEL", "loc" : [ -72.652807, 43.819464 ], "pop" : 2725, "state" : "VT" } +{ "_id" : "05033", "city" : "BRADFORD", "loc" : [ -72.140638, 44.0006 ], "pop" : 2480, "state" : "VT" } +{ "_id" : "05034", "city" : "BRIDGEWATER", "loc" : [ -72.646704, 43.580428 ], "pop" : 130, "state" : "VT" } +{ "_id" : "05035", "city" : "BRIDGEWATER CORN", "loc" : [ -72.68221200000001, 43.602147 ], "pop" : 662, "state" : "VT" } +{ "_id" : "05036", "city" : "BROOKFIELD", "loc" : [ -72.595259, 44.032083 ], "pop" : 453, "state" : "VT" } +{ "_id" : "05037", "city" : "BROWNSVILLE", "loc" : [ -72.494405, 43.464584 ], "pop" : 415, "state" : "VT" } +{ "_id" : "05038", "city" : "CHELSEA", "loc" : [ -72.479303, 44.003931 ], "pop" : 1022, "state" : "VT" } +{ "_id" : "05039", "city" : "CORINTH", "loc" : [ -72.282241, 44.032533 ], "pop" : 1035, "state" : "VT" } +{ "_id" : "05040", "city" : "EAST CORINTH", "loc" : [ -72.215144, 44.061851 ], "pop" : 279, "state" : "VT" } +{ "_id" : "05041", "city" : "EAST RANDOLPH", "loc" : [ -72.54874599999999, 43.955297 ], "pop" : 322, "state" : "VT" } +{ "_id" : "05042", "city" : "RYEGATE", "loc" : [ -72.072669, 44.193453 ], "pop" : 328, "state" : "VT" } +{ "_id" : "05043", "city" : "EAST THETFORD", "loc" : [ -72.19668, 43.825757 ], "pop" : 657, "state" : "VT" } +{ "_id" : "05045", "city" : "FAIRLEE", "loc" : [ -72.190214, 43.90105 ], "pop" : 1631, "state" : "VT" } +{ "_id" : "05046", "city" : "GROTON", "loc" : [ -72.21754799999999, 44.220435 ], "pop" : 862, "state" : "VT" } +{ "_id" : "05048", "city" : "HARTLAND", "loc" : [ -72.41310300000001, 43.570764 ], "pop" : 1730, "state" : "VT" } +{ "_id" : "05051", "city" : "NEWBURY", "loc" : [ -72.107231, 44.096555 ], "pop" : 1488, "state" : "VT" } +{ "_id" : "05052", "city" : "NORTH HARTLAND", "loc" : [ -72.352591, 43.596721 ], "pop" : 429, "state" : "VT" } +{ "_id" : "05053", "city" : "NORTH POMFRET", "loc" : [ -72.494287, 43.720401 ], "pop" : 254, "state" : "VT" } +{ "_id" : "05055", "city" : "NORWICH", "loc" : [ -72.30162, 43.740373 ], "pop" : 2969, "state" : "VT" } +{ "_id" : "05056", "city" : "PLYMOUTH", "loc" : [ -72.710655, 43.498653 ], "pop" : 319, "state" : "VT" } +{ "_id" : "05058", "city" : "POST MILLS", "loc" : [ -72.26203099999999, 43.893288 ], "pop" : 511, "state" : "VT" } +{ "_id" : "05060", "city" : "RANDOLPH", "loc" : [ -72.67258, 43.944399 ], "pop" : 4421, "state" : "VT" } +{ "_id" : "05061", "city" : "RANDOLPH CENTER", "loc" : [ -72.596975, 43.9379 ], "pop" : 1567, "state" : "VT" } +{ "_id" : "05062", "city" : "READING", "loc" : [ -72.570446, 43.47935 ], "pop" : 614, "state" : "VT" } +{ "_id" : "05065", "city" : "SHARON", "loc" : [ -72.424283, 43.774843 ], "pop" : 599, "state" : "VT" } +{ "_id" : "05067", "city" : "SOUTH POMFRET", "loc" : [ -72.534907, 43.679665 ], "pop" : 281, "state" : "VT" } +{ "_id" : "05068", "city" : "SOUTH ROYALTON", "loc" : [ -72.523228, 43.808931 ], "pop" : 3169, "state" : "VT" } +{ "_id" : "05069", "city" : "SOUTH RYEGATE", "loc" : [ -72.129558, 44.211075 ], "pop" : 730, "state" : "VT" } +{ "_id" : "05070", "city" : "SOUTH STRAFFORD", "loc" : [ -72.36995899999999, 43.828238 ], "pop" : 331, "state" : "VT" } +{ "_id" : "05071", "city" : "SOUTH WOODSTOCK", "loc" : [ -72.538383, 43.560137 ], "pop" : 406, "state" : "VT" } +{ "_id" : "05072", "city" : "STRAFFORD", "loc" : [ -72.36363, 43.872306 ], "pop" : 554, "state" : "VT" } +{ "_id" : "05073", "city" : "TAFTSVILLE", "loc" : [ -72.467331, 43.629819 ], "pop" : 35, "state" : "VT" } +{ "_id" : "05075", "city" : "THETFORD CENTER", "loc" : [ -72.266204, 43.814883 ], "pop" : 1014, "state" : "VT" } +{ "_id" : "05077", "city" : "TUNBRIDGE", "loc" : [ -72.478578, 43.9169 ], "pop" : 1352, "state" : "VT" } +{ "_id" : "05079", "city" : "VERSHIRE", "loc" : [ -72.31901499999999, 43.961811 ], "pop" : 565, "state" : "VT" } +{ "_id" : "05081", "city" : "WELLS RIVER", "loc" : [ -72.052958, 44.152438 ], "pop" : 473, "state" : "VT" } +{ "_id" : "05083", "city" : "WEST FAIRLEE", "loc" : [ -72.26163, 43.92232 ], "pop" : 153, "state" : "VT" } +{ "_id" : "05084", "city" : "WEST HARTFORD", "loc" : [ -72.44461800000001, 43.716068 ], "pop" : 135, "state" : "VT" } +{ "_id" : "05086", "city" : "WEST TOPSHAM", "loc" : [ -72.270051, 44.119925 ], "pop" : 1050, "state" : "VT" } +{ "_id" : "05089", "city" : "WINDSOR", "loc" : [ -72.41099800000001, 43.476032 ], "pop" : 5406, "state" : "VT" } +{ "_id" : "05091", "city" : "WOODSTOCK", "loc" : [ -72.538455, 43.62482 ], "pop" : 3742, "state" : "VT" } +{ "_id" : "05101", "city" : "BELLOWS FALLS", "loc" : [ -72.466373, 43.148198 ], "pop" : 5433, "state" : "VT" } +{ "_id" : "05141", "city" : "CAMBRIDGEPORT", "loc" : [ -72.565511, 43.153363 ], "pop" : 118, "state" : "VT" } +{ "_id" : "05142", "city" : "CAVENDISH", "loc" : [ -72.609247, 43.376621 ], "pop" : 258, "state" : "VT" } +{ "_id" : "05143", "city" : "CHESTER", "loc" : [ -72.60312500000001, 43.283124 ], "pop" : 3449, "state" : "VT" } +{ "_id" : "05146", "city" : "GRAFTON", "loc" : [ -72.597229, 43.160095 ], "pop" : 823, "state" : "VT" } +{ "_id" : "05148", "city" : "BROMLEY MTN", "loc" : [ -72.801756, 43.223961 ], "pop" : 986, "state" : "VT" } +{ "_id" : "05149", "city" : "LUDLOW", "loc" : [ -72.70018399999999, 43.392909 ], "pop" : 2420, "state" : "VT" } +{ "_id" : "05150", "city" : "NORTH SPRINGFIEL", "loc" : [ -72.529096, 43.335452 ], "pop" : 824, "state" : "VT" } +{ "_id" : "05151", "city" : "PERKINSVILLE", "loc" : [ -72.50381299999999, 43.387885 ], "pop" : 1181, "state" : "VT" } +{ "_id" : "05152", "city" : "PERU", "loc" : [ -72.886797, 43.256532 ], "pop" : 458, "state" : "VT" } +{ "_id" : "05153", "city" : "PROCTORSVILLE", "loc" : [ -72.61962, 43.4005 ], "pop" : 1065, "state" : "VT" } +{ "_id" : "05154", "city" : "SAXTONS RIVER", "loc" : [ -72.508107, 43.137861 ], "pop" : 681, "state" : "VT" } +{ "_id" : "05155", "city" : "SOUTH LONDONDERR", "loc" : [ -72.811787, 43.183082 ], "pop" : 546, "state" : "VT" } +{ "_id" : "05156", "city" : "SPRINGFIELD", "loc" : [ -72.477769, 43.303433 ], "pop" : 9231, "state" : "VT" } +{ "_id" : "05161", "city" : "WESTON", "loc" : [ -72.79352299999999, 43.29409 ], "pop" : 488, "state" : "VT" } +{ "_id" : "05201", "city" : "BENNINGTON", "loc" : [ -73.19232100000001, 42.882658 ], "pop" : 14757, "state" : "VT" } +{ "_id" : "05250", "city" : "ARLINGTON", "loc" : [ -73.159364, 43.085681 ], "pop" : 3006, "state" : "VT" } +{ "_id" : "05251", "city" : "DORSET", "loc" : [ -73.07660300000001, 43.263561 ], "pop" : 1402, "state" : "VT" } +{ "_id" : "05252", "city" : "EAST ARLINGTON", "loc" : [ -73.138904, 43.063801 ], "pop" : 443, "state" : "VT" } +{ "_id" : "05253", "city" : "EAST DORSET", "loc" : [ -73.008146, 43.236982 ], "pop" : 516, "state" : "VT" } +{ "_id" : "05255", "city" : "MANCHESTER CENTE", "loc" : [ -73.052313, 43.175223 ], "pop" : 3622, "state" : "VT" } +{ "_id" : "05257", "city" : "NORTH BENNINGTON", "loc" : [ -73.237531, 42.92385 ], "pop" : 2037, "state" : "VT" } +{ "_id" : "05260", "city" : "NORTH POWNAL", "loc" : [ -73.25342999999999, 42.809775 ], "pop" : 523, "state" : "VT" } +{ "_id" : "05261", "city" : "POWNAL", "loc" : [ -73.21624, 42.787955 ], "pop" : 2962, "state" : "VT" } +{ "_id" : "05262", "city" : "SHAFTSBURY", "loc" : [ -73.21659099999999, 42.96144 ], "pop" : 3363, "state" : "VT" } +{ "_id" : "05301", "city" : "BRATTLEBORO", "loc" : [ -72.593322, 42.857353 ], "pop" : 17522, "state" : "VT" } +{ "_id" : "05340", "city" : "BONDVILLE", "loc" : [ -72.912768, 43.161831 ], "pop" : 482, "state" : "VT" } +{ "_id" : "05341", "city" : "EAST DOVER", "loc" : [ -72.78303200000001, 42.950508 ], "pop" : 253, "state" : "VT" } +{ "_id" : "05342", "city" : "JACKSONVILLE", "loc" : [ -72.807121, 42.777752 ], "pop" : 406, "state" : "VT" } +{ "_id" : "05343", "city" : "JAMAICA", "loc" : [ -72.794409, 43.104235 ], "pop" : 603, "state" : "VT" } +{ "_id" : "05345", "city" : "NEWFANE", "loc" : [ -72.678078, 42.97043 ], "pop" : 1389, "state" : "VT" } +{ "_id" : "05346", "city" : "PUTNEY", "loc" : [ -72.512272, 43.035561 ], "pop" : 4971, "state" : "VT" } +{ "_id" : "05350", "city" : "READSBORO", "loc" : [ -72.960886, 42.78367 ], "pop" : 762, "state" : "VT" } +{ "_id" : "05352", "city" : "STAMFORD", "loc" : [ -73.069068, 42.76962 ], "pop" : 773, "state" : "VT" } +{ "_id" : "05353", "city" : "TOWNSHEND", "loc" : [ -72.668676, 43.062174 ], "pop" : 920, "state" : "VT" } +{ "_id" : "05354", "city" : "VERNON", "loc" : [ -72.51154699999999, 42.756468 ], "pop" : 1850, "state" : "VT" } +{ "_id" : "05355", "city" : "WARDSBORO", "loc" : [ -72.807687, 43.032649 ], "pop" : 573, "state" : "VT" } +{ "_id" : "05356", "city" : "MOUNT SNOW", "loc" : [ -72.854235, 42.956029 ], "pop" : 743, "state" : "VT" } +{ "_id" : "05358", "city" : "WEST HALIFAX", "loc" : [ -72.750142, 42.776103 ], "pop" : 202, "state" : "VT" } +{ "_id" : "05359", "city" : "WEST TOWNSHEND", "loc" : [ -72.720985, 43.130044 ], "pop" : 402, "state" : "VT" } +{ "_id" : "05360", "city" : "WEST WARDSBORO", "loc" : [ -72.880537, 43.047221 ], "pop" : 228, "state" : "VT" } +{ "_id" : "05361", "city" : "WHITINGHAM", "loc" : [ -72.85600100000001, 42.790071 ], "pop" : 921, "state" : "VT" } +{ "_id" : "05362", "city" : "WILLIAMSVILLE", "loc" : [ -72.658406, 42.948151 ], "pop" : 166, "state" : "VT" } +{ "_id" : "05363", "city" : "WILMINGTON", "loc" : [ -72.861316, 42.881216 ], "pop" : 2053, "state" : "VT" } +{ "_id" : "05401", "city" : "BURLINGTON", "loc" : [ -73.219875, 44.484023 ], "pop" : 39127, "state" : "VT" } +{ "_id" : "05403", "city" : "SOUTH BURLINGTON", "loc" : [ -73.17961699999999, 44.451324 ], "pop" : 12809, "state" : "VT" } +{ "_id" : "05404", "city" : "WINOOSKI", "loc" : [ -73.18741300000001, 44.494898 ], "pop" : 6649, "state" : "VT" } +{ "_id" : "05405", "city" : "UNIV OF VERMONT", "loc" : [ -73.2002, 44.477733 ], "pop" : 0, "state" : "VT" } +{ "_id" : "05440", "city" : "ALBURG", "loc" : [ -73.280963, 44.968454 ], "pop" : 1362, "state" : "VT" } +{ "_id" : "05441", "city" : "BAKERSFIELD", "loc" : [ -72.796834, 44.790518 ], "pop" : 973, "state" : "VT" } +{ "_id" : "05443", "city" : "BRISTOL", "loc" : [ -73.071742, 44.146031 ], "pop" : 6685, "state" : "VT" } +{ "_id" : "05444", "city" : "CAMBRIDGE", "loc" : [ -72.865728, 44.651013 ], "pop" : 3491, "state" : "VT" } +{ "_id" : "05445", "city" : "CHARLOTTE", "loc" : [ -73.227969, 44.311277 ], "pop" : 3009, "state" : "VT" } +{ "_id" : "05446", "city" : "COLCHESTER", "loc" : [ -73.20221600000001, 44.535956 ], "pop" : 14731, "state" : "VT" } +{ "_id" : "05447", "city" : "EAST BERKSHIRE", "loc" : [ -72.706564, 44.929798 ], "pop" : 94, "state" : "VT" } +{ "_id" : "05448", "city" : "EAST FAIRFIELD", "loc" : [ -72.910995, 44.801805 ], "pop" : 1076, "state" : "VT" } +{ "_id" : "05450", "city" : "ENOSBURG FALLS", "loc" : [ -72.791037, 44.898491 ], "pop" : 2268, "state" : "VT" } +{ "_id" : "05452", "city" : "ESSEX JUNCTION", "loc" : [ -73.090644, 44.503466 ], "pop" : 17050, "state" : "VT" } +{ "_id" : "05454", "city" : "FAIRFAX", "loc" : [ -73.024078, 44.692387 ], "pop" : 2990, "state" : "VT" } +{ "_id" : "05455", "city" : "FAIRFIELD", "loc" : [ -73.022187, 44.784087 ], "pop" : 359, "state" : "VT" } +{ "_id" : "05456", "city" : "FERRISBURG", "loc" : [ -73.25857499999999, 44.212822 ], "pop" : 951, "state" : "VT" } +{ "_id" : "05457", "city" : "FRANKLIN", "loc" : [ -72.903694, 44.961408 ], "pop" : 1475, "state" : "VT" } +{ "_id" : "05458", "city" : "GRAND ISLE", "loc" : [ -73.30561, 44.719711 ], "pop" : 1590, "state" : "VT" } +{ "_id" : "05459", "city" : "HIGHGATE CENTER", "loc" : [ -73.015468, 44.940395 ], "pop" : 1567, "state" : "VT" } +{ "_id" : "05461", "city" : "HINESBURG", "loc" : [ -73.097955, 44.334621 ], "pop" : 3187, "state" : "VT" } +{ "_id" : "05462", "city" : "HUNTINGTON", "loc" : [ -72.996432, 44.322655 ], "pop" : 2223, "state" : "VT" } +{ "_id" : "05463", "city" : "ISLE LA MOTTE", "loc" : [ -73.339095, 44.874829 ], "pop" : 408, "state" : "VT" } +{ "_id" : "05464", "city" : "SMUGGLERS NOTCH", "loc" : [ -72.78057699999999, 44.662499 ], "pop" : 300, "state" : "VT" } +{ "_id" : "05465", "city" : "JERICHO CENTER", "loc" : [ -72.979398, 44.484318 ], "pop" : 3449, "state" : "VT" } +{ "_id" : "05468", "city" : "MILTON", "loc" : [ -73.131692, 44.648275 ], "pop" : 10627, "state" : "VT" } +{ "_id" : "05471", "city" : "MONTGOMERY CENTE", "loc" : [ -72.599352, 44.874606 ], "pop" : 603, "state" : "VT" } +{ "_id" : "05472", "city" : "NEW HAVEN", "loc" : [ -73.17346999999999, 44.112575 ], "pop" : 858, "state" : "VT" } +{ "_id" : "05473", "city" : "NORTH FERRISBURG", "loc" : [ -73.203254, 44.251461 ], "pop" : 1126, "state" : "VT" } +{ "_id" : "05474", "city" : "NORTH HERO", "loc" : [ -73.28416900000001, 44.829392 ], "pop" : 502, "state" : "VT" } +{ "_id" : "05476", "city" : "RICHFORD", "loc" : [ -72.690472, 44.971453 ], "pop" : 3794, "state" : "VT" } +{ "_id" : "05477", "city" : "BOLTON VALLEY", "loc" : [ -72.993256, 44.399846 ], "pop" : 3758, "state" : "VT" } +{ "_id" : "05478", "city" : "SAINT ALBANS", "loc" : [ -73.08902500000001, 44.811138 ], "pop" : 13555, "state" : "VT" } +{ "_id" : "05482", "city" : "SHELBURNE", "loc" : [ -73.217124, 44.389967 ], "pop" : 5871, "state" : "VT" } +{ "_id" : "05483", "city" : "SHELDON", "loc" : [ -72.952989, 44.887167 ], "pop" : 1556, "state" : "VT" } +{ "_id" : "05486", "city" : "SOUTH HERO", "loc" : [ -73.31134400000001, 44.640044 ], "pop" : 1456, "state" : "VT" } +{ "_id" : "05487", "city" : "STARKSBORO", "loc" : [ -73.0157, 44.2261 ], "pop" : 1020, "state" : "VT" } +{ "_id" : "05488", "city" : "SWANTON", "loc" : [ -73.12112399999999, 44.916754 ], "pop" : 6570, "state" : "VT" } +{ "_id" : "05489", "city" : "UNDERHILL", "loc" : [ -72.925845, 44.539069 ], "pop" : 3637, "state" : "VT" } +{ "_id" : "05491", "city" : "VERGENNES", "loc" : [ -73.279293, 44.132569 ], "pop" : 6041, "state" : "VT" } +{ "_id" : "05492", "city" : "WATERVILLE", "loc" : [ -72.759557, 44.712375 ], "pop" : 532, "state" : "VT" } +{ "_id" : "05494", "city" : "WESTFORD", "loc" : [ -73.006021, 44.618191 ], "pop" : 1102, "state" : "VT" } +{ "_id" : "05495", "city" : "WILLISTON", "loc" : [ -73.095704, 44.436745 ], "pop" : 5592, "state" : "VT" } +{ "_id" : "05602", "city" : "MONTPELIER", "loc" : [ -72.576992, 44.264082 ], "pop" : 12475, "state" : "VT" } +{ "_id" : "05640", "city" : "ADAMANT", "loc" : [ -72.504649, 44.35747 ], "pop" : 456, "state" : "VT" } +{ "_id" : "05641", "city" : "BARRE", "loc" : [ -72.493619, 44.194522 ], "pop" : 14994, "state" : "VT" } +{ "_id" : "05647", "city" : "CABOT", "loc" : [ -72.306443, 44.404215 ], "pop" : 1043, "state" : "VT" } +{ "_id" : "05648", "city" : "CALAIS", "loc" : [ -72.474113, 44.393438 ], "pop" : 319, "state" : "VT" } +{ "_id" : "05649", "city" : "EAST BARRE", "loc" : [ -72.446003, 44.158277 ], "pop" : 381, "state" : "VT" } +{ "_id" : "05650", "city" : "EAST CALAIS", "loc" : [ -72.439829, 44.355599 ], "pop" : 746, "state" : "VT" } +{ "_id" : "05651", "city" : "EAST MONTPELIER", "loc" : [ -72.492636, 44.282844 ], "pop" : 1018, "state" : "VT" } +{ "_id" : "05652", "city" : "EDEN", "loc" : [ -72.58629999999999, 44.734267 ], "pop" : 913, "state" : "VT" } +{ "_id" : "05653", "city" : "EDEN MILLS", "loc" : [ -72.513447, 44.693123 ], "pop" : 155, "state" : "VT" } +{ "_id" : "05654", "city" : "GRANITEVILLE", "loc" : [ -72.48452899999999, 44.157326 ], "pop" : 2321, "state" : "VT" } +{ "_id" : "05655", "city" : "HYDE PARK", "loc" : [ -72.594971, 44.622453 ], "pop" : 2094, "state" : "VT" } +{ "_id" : "05656", "city" : "JOHNSON", "loc" : [ -72.671154, 44.64204 ], "pop" : 3156, "state" : "VT" } +{ "_id" : "05658", "city" : "MARSHFIELD", "loc" : [ -72.374994, 44.321841 ], "pop" : 1331, "state" : "VT" } +{ "_id" : "05660", "city" : "MORETOWN", "loc" : [ -72.74939500000001, 44.259602 ], "pop" : 1896, "state" : "VT" } +{ "_id" : "05661", "city" : "MORRISVILLE", "loc" : [ -72.602625, 44.554335 ], "pop" : 4935, "state" : "VT" } +{ "_id" : "05663", "city" : "RIVERTON", "loc" : [ -72.659795, 44.149961 ], "pop" : 6245, "state" : "VT" } +{ "_id" : "05666", "city" : "NORTH MONTPELIER", "loc" : [ -72.482119, 44.256612 ], "pop" : 469, "state" : "VT" } +{ "_id" : "05667", "city" : "PLAINFIELD", "loc" : [ -72.42243000000001, 44.262164 ], "pop" : 1304, "state" : "VT" } +{ "_id" : "05669", "city" : "ROXBURY", "loc" : [ -72.720151, 44.084571 ], "pop" : 575, "state" : "VT" } +{ "_id" : "05672", "city" : "STOWE", "loc" : [ -72.69228200000001, 44.469512 ], "pop" : 3433, "state" : "VT" } +{ "_id" : "05673", "city" : "WAITSFIELD", "loc" : [ -72.828321, 44.188917 ], "pop" : 1751, "state" : "VT" } +{ "_id" : "05674", "city" : "SUGARBUSH VALLEY", "loc" : [ -72.848179, 44.114222 ], "pop" : 1172, "state" : "VT" } +{ "_id" : "05675", "city" : "WASHGTIN", "loc" : [ -72.430002, 44.086448 ], "pop" : 1022, "state" : "VT" } +{ "_id" : "05676", "city" : "WATERBURY", "loc" : [ -72.779768, 44.345103 ], "pop" : 4751, "state" : "VT" } +{ "_id" : "05677", "city" : "WATERBURY CENTER", "loc" : [ -72.708006, 44.382797 ], "pop" : 1645, "state" : "VT" } +{ "_id" : "05679", "city" : "WILLIAMSTOWN", "loc" : [ -72.53811, 44.118191 ], "pop" : 2964, "state" : "VT" } +{ "_id" : "05680", "city" : "WOLCOTT", "loc" : [ -72.484416, 44.555753 ], "pop" : 1850, "state" : "VT" } +{ "_id" : "05681", "city" : "WOODBURY", "loc" : [ -72.417766, 44.432507 ], "pop" : 766, "state" : "VT" } +{ "_id" : "05682", "city" : "WORCESTER", "loc" : [ -72.560925, 44.394389 ], "pop" : 906, "state" : "VT" } +{ "_id" : "05701", "city" : "RUTLAND", "loc" : [ -72.97077299999999, 43.614131 ], "pop" : 22576, "state" : "VT" } +{ "_id" : "05730", "city" : "BELMONT", "loc" : [ -72.825701, 43.428441 ], "pop" : 223, "state" : "VT" } +{ "_id" : "05732", "city" : "HUBBARDTON", "loc" : [ -73.206424, 43.622413 ], "pop" : 914, "state" : "VT" } +{ "_id" : "05733", "city" : "BRANDON", "loc" : [ -73.088182, 43.806467 ], "pop" : 5027, "state" : "VT" } +{ "_id" : "05734", "city" : "BRIDPORT", "loc" : [ -73.34755699999999, 43.95383 ], "pop" : 641, "state" : "VT" } +{ "_id" : "05735", "city" : "CASTLETON", "loc" : [ -73.17079699999999, 43.622312 ], "pop" : 2897, "state" : "VT" } +{ "_id" : "05736", "city" : "CENTER RUTLAND", "loc" : [ -73.016986, 43.602345 ], "pop" : 299, "state" : "VT" } +{ "_id" : "05737", "city" : "CHITTENDEN", "loc" : [ -72.936001, 43.703382 ], "pop" : 526, "state" : "VT" } +{ "_id" : "05738", "city" : "CUTTINGSVILLE", "loc" : [ -72.869089, 43.522084 ], "pop" : 1101, "state" : "VT" } +{ "_id" : "05739", "city" : "DANBY", "loc" : [ -73.01285, 43.358341 ], "pop" : 1170, "state" : "VT" } +{ "_id" : "05742", "city" : "EAST WALLINGFORD", "loc" : [ -72.88437500000001, 43.446063 ], "pop" : 588, "state" : "VT" } +{ "_id" : "05743", "city" : "FAIR HAVEN", "loc" : [ -73.27006799999999, 43.62345 ], "pop" : 4283, "state" : "VT" } +{ "_id" : "05744", "city" : "FLORENCE", "loc" : [ -73.078988, 43.709294 ], "pop" : 257, "state" : "VT" } +{ "_id" : "05746", "city" : "GAYSVILLE", "loc" : [ -72.731149, 43.752912 ], "pop" : 198, "state" : "VT" } +{ "_id" : "05747", "city" : "GRANVILLE", "loc" : [ -72.8245, 43.984912 ], "pop" : 309, "state" : "VT" } +{ "_id" : "05748", "city" : "HANCOCK", "loc" : [ -72.913285, 43.912525 ], "pop" : 98, "state" : "VT" } +{ "_id" : "05751", "city" : "KILLINGTON", "loc" : [ -72.79631000000001, 43.663364 ], "pop" : 738, "state" : "VT" } +{ "_id" : "05753", "city" : "BREAD LOAF", "loc" : [ -73.16613, 44.007042 ], "pop" : 9990, "state" : "VT" } +{ "_id" : "05757", "city" : "MIDDLETOWN SPRIN", "loc" : [ -73.11452, 43.484864 ], "pop" : 966, "state" : "VT" } +{ "_id" : "05758", "city" : "MOUNT HOLLY", "loc" : [ -72.795562, 43.44865 ], "pop" : 693, "state" : "VT" } +{ "_id" : "05759", "city" : "NORTH CLARENDON", "loc" : [ -72.956096, 43.552208 ], "pop" : 2517, "state" : "VT" } +{ "_id" : "05760", "city" : "ORWELL", "loc" : [ -73.294855, 43.783722 ], "pop" : 1315, "state" : "VT" } +{ "_id" : "05761", "city" : "PAWLET", "loc" : [ -73.14440399999999, 43.358679 ], "pop" : 935, "state" : "VT" } +{ "_id" : "05762", "city" : "PITTSFIELD", "loc" : [ -72.853376, 43.753823 ], "pop" : 450, "state" : "VT" } +{ "_id" : "05763", "city" : "PITTSFORD", "loc" : [ -73.013492, 43.71524 ], "pop" : 2864, "state" : "VT" } +{ "_id" : "05764", "city" : "POULTNEY", "loc" : [ -73.225281, 43.53321 ], "pop" : 4012, "state" : "VT" } +{ "_id" : "05765", "city" : "PROCTOR", "loc" : [ -73.03481600000001, 43.657951 ], "pop" : 1868, "state" : "VT" } +{ "_id" : "05766", "city" : "RIPTON", "loc" : [ -73.01873999999999, 43.992862 ], "pop" : 433, "state" : "VT" } +{ "_id" : "05767", "city" : "ROCHESTER", "loc" : [ -72.815917, 43.880382 ], "pop" : 1551, "state" : "VT" } +{ "_id" : "05769", "city" : "SALISBURY", "loc" : [ -73.100793, 43.90172 ], "pop" : 1885, "state" : "VT" } +{ "_id" : "05770", "city" : "SHOREHAM", "loc" : [ -73.305385, 43.886214 ], "pop" : 946, "state" : "VT" } +{ "_id" : "05772", "city" : "STOCKBRIDGE", "loc" : [ -72.78139400000001, 43.773808 ], "pop" : 124, "state" : "VT" } +{ "_id" : "05773", "city" : "WALLINGFORD", "loc" : [ -72.98772200000001, 43.4573 ], "pop" : 2172, "state" : "VT" } +{ "_id" : "05774", "city" : "WELLS", "loc" : [ -73.202684, 43.430456 ], "pop" : 837, "state" : "VT" } +{ "_id" : "05775", "city" : "WEST PAWLET", "loc" : [ -73.23132699999999, 43.36673 ], "pop" : 604, "state" : "VT" } +{ "_id" : "05776", "city" : "WEST RUPERT", "loc" : [ -73.20284700000001, 43.261792 ], "pop" : 654, "state" : "VT" } +{ "_id" : "05777", "city" : "WEST RUTLAND", "loc" : [ -73.04242000000001, 43.578072 ], "pop" : 3415, "state" : "VT" } +{ "_id" : "05778", "city" : "LEICESTER JUNCTI", "loc" : [ -73.213312, 43.874972 ], "pop" : 615, "state" : "VT" } +{ "_id" : "05819", "city" : "SAINT JOHNSBURY", "loc" : [ -72.005062, 44.427195 ], "pop" : 8797, "state" : "VT" } +{ "_id" : "05820", "city" : "ALBANY", "loc" : [ -72.34181, 44.734427 ], "pop" : 782, "state" : "VT" } +{ "_id" : "05821", "city" : "BARNET", "loc" : [ -72.078326, 44.317923 ], "pop" : 1415, "state" : "VT" } +{ "_id" : "05822", "city" : "BARTON", "loc" : [ -72.160005, 44.739465 ], "pop" : 1270, "state" : "VT" } +{ "_id" : "05824", "city" : "CONCORD", "loc" : [ -71.867554, 44.446055 ], "pop" : 1242, "state" : "VT" } +{ "_id" : "05825", "city" : "COVENTRY", "loc" : [ -72.254471, 44.880853 ], "pop" : 722, "state" : "VT" } +{ "_id" : "05826", "city" : "CRAFTSBURY", "loc" : [ -72.366007, 44.64341 ], "pop" : 623, "state" : "VT" } +{ "_id" : "05827", "city" : "CRAFTSBURY COMMO", "loc" : [ -72.41457800000001, 44.652917 ], "pop" : 399, "state" : "VT" } +{ "_id" : "05828", "city" : "DANVILLE", "loc" : [ -72.113319, 44.433241 ], "pop" : 1482, "state" : "VT" } +{ "_id" : "05829", "city" : "DERBY", "loc" : [ -72.13755500000001, 44.950182 ], "pop" : 2607, "state" : "VT" } +{ "_id" : "05830", "city" : "DERBY LINE", "loc" : [ -72.082367, 44.990183 ], "pop" : 2040, "state" : "VT" } +{ "_id" : "05832", "city" : "EAST BURKE", "loc" : [ -71.93567400000001, 44.607849 ], "pop" : 875, "state" : "VT" } +{ "_id" : "05833", "city" : "EAST CHARLESTON", "loc" : [ -71.97627, 44.829896 ], "pop" : 246, "state" : "VT" } +{ "_id" : "05836", "city" : "EAST HARDWICK", "loc" : [ -72.30335100000001, 44.528833 ], "pop" : 493, "state" : "VT" } +{ "_id" : "05837", "city" : "EAST HAVEN", "loc" : [ -71.867491, 44.651724 ], "pop" : 269, "state" : "VT" } +{ "_id" : "05839", "city" : "GLOVER", "loc" : [ -72.203819, 44.719979 ], "pop" : 795, "state" : "VT" } +{ "_id" : "05841", "city" : "GREENSBORO", "loc" : [ -72.285017, 44.595069 ], "pop" : 461, "state" : "VT" } +{ "_id" : "05842", "city" : "GREENSBORO BEND", "loc" : [ -72.252478, 44.548488 ], "pop" : 405, "state" : "VT" } +{ "_id" : "05843", "city" : "HARDWICK", "loc" : [ -72.36381799999999, 44.507026 ], "pop" : 2450, "state" : "VT" } +{ "_id" : "05845", "city" : "IRASBURG", "loc" : [ -72.276269, 44.808056 ], "pop" : 907, "state" : "VT" } +{ "_id" : "05846", "city" : "ISLAND POND", "loc" : [ -71.88396400000001, 44.809452 ], "pop" : 1585, "state" : "VT" } +{ "_id" : "05847", "city" : "LOWELL", "loc" : [ -72.450132, 44.796107 ], "pop" : 594, "state" : "VT" } +{ "_id" : "05850", "city" : "LYNDON CENTER", "loc" : [ -72.03106200000001, 44.54719 ], "pop" : 519, "state" : "VT" } +{ "_id" : "05851", "city" : "LYNDONVILLE", "loc" : [ -72.009168, 44.540766 ], "pop" : 5417, "state" : "VT" } +{ "_id" : "05853", "city" : "MORGAN CTR", "loc" : [ -71.994052, 44.90659 ], "pop" : 497, "state" : "VT" } +{ "_id" : "05855", "city" : "NEWPORT", "loc" : [ -72.20650500000001, 44.939344 ], "pop" : 4773, "state" : "VT" } +{ "_id" : "05857", "city" : "NEWPORT CENTER", "loc" : [ -72.29741199999999, 44.944175 ], "pop" : 1367, "state" : "VT" } +{ "_id" : "05858", "city" : "NORTH CONCORD", "loc" : [ -71.78666200000001, 44.550099 ], "pop" : 191, "state" : "VT" } +{ "_id" : "05859", "city" : "JAY PEAK", "loc" : [ -72.45723099999999, 44.961861 ], "pop" : 370, "state" : "VT" } +{ "_id" : "05860", "city" : "ORLEANS", "loc" : [ -72.165328, 44.80544 ], "pop" : 2467, "state" : "VT" } +{ "_id" : "05862", "city" : "PEACHAM", "loc" : [ -72.17703899999999, 44.335563 ], "pop" : 627, "state" : "VT" } +{ "_id" : "05866", "city" : "SHEFFIELD", "loc" : [ -72.12392699999999, 44.61784 ], "pop" : 600, "state" : "VT" } +{ "_id" : "05867", "city" : "SUTTON", "loc" : [ -72.02113300000001, 44.646543 ], "pop" : 854, "state" : "VT" } +{ "_id" : "05868", "city" : "TROY", "loc" : [ -72.39380800000001, 44.959381 ], "pop" : 1609, "state" : "VT" } +{ "_id" : "05871", "city" : "WEST BURKE", "loc" : [ -71.95717999999999, 44.663647 ], "pop" : 885, "state" : "VT" } +{ "_id" : "05872", "city" : "WEST CHARLESTON", "loc" : [ -72.05209000000001, 44.872894 ], "pop" : 598, "state" : "VT" } +{ "_id" : "05873", "city" : "WEST DANVILLE", "loc" : [ -72.21977099999999, 44.446509 ], "pop" : 1130, "state" : "VT" } +{ "_id" : "05874", "city" : "WESTFIELD", "loc" : [ -72.439628, 44.882457 ], "pop" : 398, "state" : "VT" } +{ "_id" : "05875", "city" : "WEST GLOVER", "loc" : [ -72.259936, 44.703145 ], "pop" : 265, "state" : "VT" } +{ "_id" : "05901", "city" : "AVERILL", "loc" : [ -71.70026799999999, 44.992304 ], "pop" : 7, "state" : "VT" } +{ "_id" : "05902", "city" : "BEECHER FALLS", "loc" : [ -71.519901, 45.006103 ], "pop" : 579, "state" : "VT" } +{ "_id" : "05903", "city" : "CANAAN", "loc" : [ -71.560214, 44.976439 ], "pop" : 542, "state" : "VT" } +{ "_id" : "05904", "city" : "GILMAN", "loc" : [ -71.71786, 44.413985 ], "pop" : 322, "state" : "VT" } +{ "_id" : "05905", "city" : "GUILDHALL", "loc" : [ -71.599057, 44.690218 ], "pop" : 848, "state" : "VT" } +{ "_id" : "05906", "city" : "LUNENBURG", "loc" : [ -71.69304, 44.466262 ], "pop" : 854, "state" : "VT" } +{ "_id" : "05907", "city" : "NORTON", "loc" : [ -71.78843999999999, 44.988781 ], "pop" : 171, "state" : "VT" } +{ "_id" : "06001", "city" : "AVON", "loc" : [ -72.865323, 41.790498 ], "pop" : 13988, "state" : "CT" } +{ "_id" : "06002", "city" : "BLOOMFIELD", "loc" : [ -72.72493, 41.831647 ], "pop" : 19524, "state" : "CT" } +{ "_id" : "06010", "city" : "BRISTOL", "loc" : [ -72.930193, 41.682293 ], "pop" : 60670, "state" : "CT" } +{ "_id" : "06013", "city" : "BURLINGTON", "loc" : [ -72.94438599999999, 41.757296 ], "pop" : 7017, "state" : "CT" } +{ "_id" : "06016", "city" : "WINDSORVILLE", "loc" : [ -72.543667, 41.911405 ], "pop" : 5067, "state" : "CT" } +{ "_id" : "06018", "city" : "CANAAN", "loc" : [ -73.323177, 42.024821 ], "pop" : 2948, "state" : "CT" } +{ "_id" : "06019", "city" : "CANTON", "loc" : [ -72.898731, 41.838401 ], "pop" : 4125, "state" : "CT" } +{ "_id" : "06020", "city" : "CANTON CENTER", "loc" : [ -72.90584699999999, 41.871586 ], "pop" : 192, "state" : "CT" } +{ "_id" : "06021", "city" : "COLEBROOK", "loc" : [ -73.104069, 42.028217 ], "pop" : 203, "state" : "CT" } +{ "_id" : "06022", "city" : "COLLINSVILLE", "loc" : [ -72.92827, 41.851319 ], "pop" : 4630, "state" : "CT" } +{ "_id" : "06023", "city" : "EAST BERLIN", "loc" : [ -72.719007, 41.61277 ], "pop" : 1021, "state" : "CT" } +{ "_id" : "06024", "city" : "EAST CANAAN", "loc" : [ -73.278462, 42.011686 ], "pop" : 519, "state" : "CT" } +{ "_id" : "06026", "city" : "EAST GRANBY", "loc" : [ -72.74588900000001, 41.932215 ], "pop" : 4301, "state" : "CT" } +{ "_id" : "06027", "city" : "EAST HARTLAND", "loc" : [ -72.92421299999999, 42.001617 ], "pop" : 1833, "state" : "CT" } +{ "_id" : "06029", "city" : "ELLINGTON", "loc" : [ -72.462599, 41.911417 ], "pop" : 9070, "state" : "CT" } +{ "_id" : "06031", "city" : "FALLS VILLAGE", "loc" : [ -73.351659, 41.95784 ], "pop" : 1192, "state" : "CT" } +{ "_id" : "06032", "city" : "FARMINGTON", "loc" : [ -72.841476, 41.72839 ], "pop" : 14953, "state" : "CT" } +{ "_id" : "06033", "city" : "GLASTONBURY", "loc" : [ -72.572705, 41.707329 ], "pop" : 24287, "state" : "CT" } +{ "_id" : "06035", "city" : "GRANBY", "loc" : [ -72.79937700000001, 41.960227 ], "pop" : 6939, "state" : "CT" } +{ "_id" : "06037", "city" : "BERLIN", "loc" : [ -72.770482, 41.620826 ], "pop" : 15755, "state" : "CT" } +{ "_id" : "06039", "city" : "LAKEVILLE", "loc" : [ -73.43765999999999, 41.951631 ], "pop" : 2086, "state" : "CT" } +{ "_id" : "06040", "city" : "MANCHESTER", "loc" : [ -72.52444, 41.777732 ], "pop" : 51618, "state" : "CT" } +{ "_id" : "06043", "city" : "BOLTON", "loc" : [ -72.43958000000001, 41.768888 ], "pop" : 4569, "state" : "CT" } +{ "_id" : "06051", "city" : "NEW BRITAIN", "loc" : [ -72.77220800000001, 41.666683 ], "pop" : 28705, "state" : "CT" } +{ "_id" : "06052", "city" : "NEW BRITAIN", "loc" : [ -72.798858, 41.658792 ], "pop" : 8798, "state" : "CT" } +{ "_id" : "06053", "city" : "NEW BRITAIN", "loc" : [ -72.790835, 41.686667 ], "pop" : 37995, "state" : "CT" } +{ "_id" : "06057", "city" : "NEW HARTFORD", "loc" : [ -73.010369, 41.846797 ], "pop" : 4521, "state" : "CT" } +{ "_id" : "06058", "city" : "NORFOLK", "loc" : [ -73.199197, 41.985386 ], "pop" : 2060, "state" : "CT" } +{ "_id" : "06059", "city" : "NORTH CANTON", "loc" : [ -72.90414, 41.923516 ], "pop" : 783, "state" : "CT" } +{ "_id" : "06060", "city" : "NORTH GRANBY", "loc" : [ -72.84093799999999, 42.021925 ], "pop" : 1455, "state" : "CT" } +{ "_id" : "06062", "city" : "PLAINVILLE", "loc" : [ -72.864373, 41.672653 ], "pop" : 17320, "state" : "CT" } +{ "_id" : "06063", "city" : "PLEASANT VALLEY", "loc" : [ -72.982675, 41.924873 ], "pop" : 838, "state" : "CT" } +{ "_id" : "06065", "city" : "RIVERTON", "loc" : [ -73.025469, 41.961395 ], "pop" : 155, "state" : "CT" } +{ "_id" : "06066", "city" : "VERNON ROCKVILLE", "loc" : [ -72.464855, 41.850073 ], "pop" : 31966, "state" : "CT" } +{ "_id" : "06067", "city" : "ROCKY HILL", "loc" : [ -72.663197, 41.658295 ], "pop" : 16638, "state" : "CT" } +{ "_id" : "06068", "city" : "SALISBURY", "loc" : [ -73.421492, 42.001452 ], "pop" : 1686, "state" : "CT" } +{ "_id" : "06069", "city" : "SHARON", "loc" : [ -73.457758, 41.871446 ], "pop" : 2794, "state" : "CT" } +{ "_id" : "06070", "city" : "SIMSBURY", "loc" : [ -72.82126700000001, 41.873712 ], "pop" : 14589, "state" : "CT" } +{ "_id" : "06071", "city" : "SOMERS", "loc" : [ -72.45826599999999, 41.997813 ], "pop" : 9685, "state" : "CT" } +{ "_id" : "06073", "city" : "SOUTH GLASTONBUR", "loc" : [ -72.55430800000001, 41.660682 ], "pop" : 3614, "state" : "CT" } +{ "_id" : "06074", "city" : "SOUTH WINDSOR", "loc" : [ -72.557585, 41.834081 ], "pop" : 22090, "state" : "CT" } +{ "_id" : "06076", "city" : "STAFFORD SPRINGS", "loc" : [ -72.289857, 41.966127 ], "pop" : 12392, "state" : "CT" } +{ "_id" : "06078", "city" : "SUFFIELD", "loc" : [ -72.641997, 41.990029 ], "pop" : 8518, "state" : "CT" } +{ "_id" : "06081", "city" : "TARIFFVILLE", "loc" : [ -72.767786, 41.907715 ], "pop" : 1477, "state" : "CT" } +{ "_id" : "06082", "city" : "ENFIELD", "loc" : [ -72.565218, 41.989016 ], "pop" : 45558, "state" : "CT" } +{ "_id" : "06084", "city" : "TOLLAND", "loc" : [ -72.37178900000001, 41.869647 ], "pop" : 10973, "state" : "CT" } +{ "_id" : "06085", "city" : "UNIONVILLE", "loc" : [ -72.887406, 41.747711 ], "pop" : 5604, "state" : "CT" } +{ "_id" : "06088", "city" : "EAST WINDSOR", "loc" : [ -72.60294500000001, 41.9099 ], "pop" : 4988, "state" : "CT" } +{ "_id" : "06089", "city" : "WEATOGUE", "loc" : [ -72.825254, 41.837152 ], "pop" : 2308, "state" : "CT" } +{ "_id" : "06090", "city" : "WEST GRANBY", "loc" : [ -72.855496, 41.965509 ], "pop" : 948, "state" : "CT" } +{ "_id" : "06092", "city" : "WEST SIMSBURY", "loc" : [ -72.857749, 41.871797 ], "pop" : 3691, "state" : "CT" } +{ "_id" : "06093", "city" : "WEST SUFFIELD", "loc" : [ -72.736232, 42.011464 ], "pop" : 2912, "state" : "CT" } +{ "_id" : "06095", "city" : "WINDSOR", "loc" : [ -72.663893, 41.856122 ], "pop" : 27815, "state" : "CT" } +{ "_id" : "06096", "city" : "WINDSOR LOCKS", "loc" : [ -72.645762, 41.926078 ], "pop" : 12358, "state" : "CT" } +{ "_id" : "06098", "city" : "WINSTED", "loc" : [ -73.06634099999999, 41.925214 ], "pop" : 14584, "state" : "CT" } +{ "_id" : "06103", "city" : "HARTFORD", "loc" : [ -72.675966, 41.767196 ], "pop" : 1202, "state" : "CT" } +{ "_id" : "06105", "city" : "HARTFORD", "loc" : [ -72.70100600000001, 41.769116 ], "pop" : 20887, "state" : "CT" } +{ "_id" : "06106", "city" : "HARTFORD", "loc" : [ -72.694734, 41.749841 ], "pop" : 47841, "state" : "CT" } +{ "_id" : "06107", "city" : "W HARTFORD", "loc" : [ -72.75322, 41.755553 ], "pop" : 18466, "state" : "CT" } +{ "_id" : "06108", "city" : "EAST HARTFORD", "loc" : [ -72.618014, 41.780291 ], "pop" : 23698, "state" : "CT" } +{ "_id" : "06109", "city" : "WETHERSFIELD", "loc" : [ -72.67630800000001, 41.701332 ], "pop" : 25583, "state" : "CT" } +{ "_id" : "06110", "city" : "W HARTFORD", "loc" : [ -72.73369099999999, 41.732566 ], "pop" : 11817, "state" : "CT" } +{ "_id" : "06111", "city" : "MAPLE HILL", "loc" : [ -72.729747, 41.686402 ], "pop" : 29192, "state" : "CT" } +{ "_id" : "06112", "city" : "HARTFORD", "loc" : [ -72.69641, 41.79053 ], "pop" : 29714, "state" : "CT" } +{ "_id" : "06114", "city" : "HARTFORD", "loc" : [ -72.68072600000001, 41.740293 ], "pop" : 23302, "state" : "CT" } +{ "_id" : "06117", "city" : "W HARTFORD", "loc" : [ -72.745689, 41.790021 ], "pop" : 14774, "state" : "CT" } +{ "_id" : "06118", "city" : "EAST HARTFORD", "loc" : [ -72.610265, 41.747211 ], "pop" : 26754, "state" : "CT" } +{ "_id" : "06119", "city" : "W HARTFORD", "loc" : [ -72.726799, 41.762765 ], "pop" : 15066, "state" : "CT" } +{ "_id" : "06120", "city" : "HARTFORD", "loc" : [ -72.67580700000001, 41.78596 ], "pop" : 16739, "state" : "CT" } +{ "_id" : "06226", "city" : "WILLIMANTIC", "loc" : [ -72.213396, 41.714918 ], "pop" : 16023, "state" : "CT" } +{ "_id" : "06231", "city" : "AMSTON", "loc" : [ -72.36460099999999, 41.628969 ], "pop" : 2887, "state" : "CT" } +{ "_id" : "06232", "city" : "ANDOVER", "loc" : [ -72.37671899999999, 41.733215 ], "pop" : 2546, "state" : "CT" } +{ "_id" : "06234", "city" : "BROOKLYN", "loc" : [ -71.95412899999999, 41.780747 ], "pop" : 4835, "state" : "CT" } +{ "_id" : "06235", "city" : "CHAPLIN", "loc" : [ -72.137197, 41.802584 ], "pop" : 902, "state" : "CT" } +{ "_id" : "06237", "city" : "COLUMBIA", "loc" : [ -72.30717, 41.697274 ], "pop" : 4510, "state" : "CT" } +{ "_id" : "06238", "city" : "COVENTRY", "loc" : [ -72.333249, 41.782195 ], "pop" : 10776, "state" : "CT" } +{ "_id" : "06239", "city" : "DANIELSON", "loc" : [ -71.880703, 41.798246 ], "pop" : 12754, "state" : "CT" } +{ "_id" : "06241", "city" : "DAYVILLE", "loc" : [ -71.868342, 41.854045 ], "pop" : 5860, "state" : "CT" } +{ "_id" : "06242", "city" : "EASTFORD", "loc" : [ -72.089451, 41.877104 ], "pop" : 76, "state" : "CT" } +{ "_id" : "06243", "city" : "EAST KILLINGLY", "loc" : [ -71.798534, 41.848756 ], "pop" : 25, "state" : "CT" } +{ "_id" : "06247", "city" : "HAMPTON", "loc" : [ -72.06797899999999, 41.761668 ], "pop" : 2139, "state" : "CT" } +{ "_id" : "06248", "city" : "HEBRON", "loc" : [ -72.39855300000001, 41.684161 ], "pop" : 4192, "state" : "CT" } +{ "_id" : "06249", "city" : "LEBANON", "loc" : [ -72.244035, 41.632988 ], "pop" : 6043, "state" : "CT" } +{ "_id" : "06250", "city" : "MANSFIELD CENTER", "loc" : [ -72.20111199999999, 41.769814 ], "pop" : 4306, "state" : "CT" } +{ "_id" : "06254", "city" : "NORTH FRANKLIN", "loc" : [ -72.142544, 41.616141 ], "pop" : 1654, "state" : "CT" } +{ "_id" : "06255", "city" : "NORTH GROSVENORD", "loc" : [ -71.902734, 41.987878 ], "pop" : 5641, "state" : "CT" } +{ "_id" : "06256", "city" : "NORTH WINDHAM", "loc" : [ -72.160106, 41.745144 ], "pop" : 3825, "state" : "CT" } +{ "_id" : "06259", "city" : "POMFRET CENTER", "loc" : [ -71.98201, 41.869683 ], "pop" : 3325, "state" : "CT" } +{ "_id" : "06260", "city" : "PUTNAM", "loc" : [ -71.896804, 41.91853 ], "pop" : 9031, "state" : "CT" } +{ "_id" : "06262", "city" : "QUINEBAUG", "loc" : [ -71.939137, 42.021747 ], "pop" : 72, "state" : "CT" } +{ "_id" : "06264", "city" : "SCOTLAND", "loc" : [ -72.07826300000001, 41.689849 ], "pop" : 102, "state" : "CT" } +{ "_id" : "06266", "city" : "SOUTH WINDHAM", "loc" : [ -72.16811199999999, 41.667724 ], "pop" : 372, "state" : "CT" } +{ "_id" : "06268", "city" : "STORRS MANSFIELD", "loc" : [ -72.257172, 41.805364 ], "pop" : 16117, "state" : "CT" } +{ "_id" : "06277", "city" : "THOMPSON", "loc" : [ -71.837587, 41.980285 ], "pop" : 2960, "state" : "CT" } +{ "_id" : "06278", "city" : "WARRENVILLE", "loc" : [ -72.15873000000001, 41.86434 ], "pop" : 2720, "state" : "CT" } +{ "_id" : "06279", "city" : "WEST WILLINGTON", "loc" : [ -72.272774, 41.873996 ], "pop" : 5981, "state" : "CT" } +{ "_id" : "06280", "city" : "WINDHAM", "loc" : [ -72.15261, 41.702652 ], "pop" : 3337, "state" : "CT" } +{ "_id" : "06281", "city" : "WOODSTOCK", "loc" : [ -72.00402699999999, 41.960218 ], "pop" : 5698, "state" : "CT" } +{ "_id" : "06282", "city" : "WOODSTOCK VALLEY", "loc" : [ -72.09366, 41.915296 ], "pop" : 1099, "state" : "CT" } +{ "_id" : "06320", "city" : "NEW LONDON", "loc" : [ -72.106245, 41.350718 ], "pop" : 28367, "state" : "CT" } +{ "_id" : "06330", "city" : "BALTIC", "loc" : [ -72.077499, 41.62629 ], "pop" : 3188, "state" : "CT" } +{ "_id" : "06331", "city" : "CANTERBURY", "loc" : [ -72.000985, 41.684403 ], "pop" : 4345, "state" : "CT" } +{ "_id" : "06333", "city" : "EAST LYME", "loc" : [ -72.23298699999999, 41.366806 ], "pop" : 6095, "state" : "CT" } +{ "_id" : "06334", "city" : "BOZRAH", "loc" : [ -72.17107799999999, 41.546515 ], "pop" : 2297, "state" : "CT" } +{ "_id" : "06335", "city" : "GALES FERRY", "loc" : [ -72.06719, 41.42852 ], "pop" : 6994, "state" : "CT" } +{ "_id" : "06336", "city" : "GILMAN", "loc" : [ -72.126623, 41.58117 ], "pop" : 156, "state" : "CT" } +{ "_id" : "06339", "city" : "LEDYARD", "loc" : [ -71.995626, 41.44014 ], "pop" : 7602, "state" : "CT" } +{ "_id" : "06340", "city" : "GROTON", "loc" : [ -72.057947, 41.357171 ], "pop" : 32435, "state" : "CT" } +{ "_id" : "06349", "city" : "GROTON", "loc" : [ -72.090058, 41.397648 ], "pop" : 5398, "state" : "CT" } +{ "_id" : "06351", "city" : "JEWETT CITY", "loc" : [ -71.98075900000001, 41.605182 ], "pop" : 11674, "state" : "CT" } +{ "_id" : "06353", "city" : "MONTVILLE", "loc" : [ -72.126476, 41.445331 ], "pop" : 258, "state" : "CT" } +{ "_id" : "06354", "city" : "MOOSUP", "loc" : [ -71.884962, 41.721031 ], "pop" : 7048, "state" : "CT" } +{ "_id" : "06355", "city" : "MYSTIC", "loc" : [ -71.97736399999999, 41.361626 ], "pop" : 11183, "state" : "CT" } +{ "_id" : "06357", "city" : "NIANTIC", "loc" : [ -72.210819, 41.3253 ], "pop" : 9245, "state" : "CT" } +{ "_id" : "06359", "city" : "NORTH STONINGTON", "loc" : [ -71.87270100000001, 41.453113 ], "pop" : 4882, "state" : "CT" } +{ "_id" : "06360", "city" : "NORWICH", "loc" : [ -72.08494, 41.537055 ], "pop" : 30145, "state" : "CT" } +{ "_id" : "06365", "city" : "PRESTON", "loc" : [ -72.021079, 41.522061 ], "pop" : 11191, "state" : "CT" } +{ "_id" : "06370", "city" : "OAKDALE", "loc" : [ -72.190358, 41.470573 ], "pop" : 6505, "state" : "CT" } +{ "_id" : "06371", "city" : "OLD LYME", "loc" : [ -72.30856199999999, 41.334745 ], "pop" : 8484, "state" : "CT" } +{ "_id" : "06374", "city" : "PLAINFIELD", "loc" : [ -71.92196800000001, 41.67753 ], "pop" : 6533, "state" : "CT" } +{ "_id" : "06375", "city" : "QUAKER HILL", "loc" : [ -72.11722, 41.40324 ], "pop" : 2886, "state" : "CT" } +{ "_id" : "06377", "city" : "STERLING", "loc" : [ -71.819588, 41.715629 ], "pop" : 2324, "state" : "CT" } +{ "_id" : "06378", "city" : "STONINGTON", "loc" : [ -71.915544, 41.366437 ], "pop" : 5282, "state" : "CT" } +{ "_id" : "06379", "city" : "PAWCATUCK", "loc" : [ -71.84776100000001, 41.373475 ], "pop" : 8082, "state" : "CT" } +{ "_id" : "06380", "city" : "TAFTVILLE", "loc" : [ -72.052877, 41.565263 ], "pop" : 2538, "state" : "CT" } +{ "_id" : "06382", "city" : "UNCASVILLE", "loc" : [ -72.112556, 41.462168 ], "pop" : 9909, "state" : "CT" } +{ "_id" : "06384", "city" : "VOLUNTOWN", "loc" : [ -71.855002, 41.583053 ], "pop" : 3167, "state" : "CT" } +{ "_id" : "06385", "city" : "WATERFORD", "loc" : [ -72.145816, 41.346853 ], "pop" : 15217, "state" : "CT" } +{ "_id" : "06390", "city" : "FISHERS ISLAND", "loc" : [ -72.01783399999999, 41.263934 ], "pop" : 329, "state" : "NY" } +{ "_id" : "06401", "city" : "ANSONIA", "loc" : [ -73.07421100000001, 41.342712 ], "pop" : 18430, "state" : "CT" } +{ "_id" : "06403", "city" : "BEACON FALLS", "loc" : [ -73.059656, 41.436917 ], "pop" : 5083, "state" : "CT" } +{ "_id" : "06405", "city" : "BRANFORD", "loc" : [ -72.810643, 41.279991 ], "pop" : 27726, "state" : "CT" } +{ "_id" : "06409", "city" : "CENTERBROOK", "loc" : [ -72.41731, 41.34743 ], "pop" : 483, "state" : "CT" } +{ "_id" : "06410", "city" : "CHESHIRE", "loc" : [ -72.90812699999999, 41.505473 ], "pop" : 25684, "state" : "CT" } +{ "_id" : "06412", "city" : "CHESTER", "loc" : [ -72.464293, 41.404903 ], "pop" : 3417, "state" : "CT" } +{ "_id" : "06413", "city" : "CLINTON", "loc" : [ -72.527973, 41.29117 ], "pop" : 12772, "state" : "CT" } +{ "_id" : "06415", "city" : "COLCHESTER", "loc" : [ -72.344123, 41.566198 ], "pop" : 10978, "state" : "CT" } +{ "_id" : "06416", "city" : "CROMWELL", "loc" : [ -72.66631700000001, 41.61049 ], "pop" : 12286, "state" : "CT" } +{ "_id" : "06417", "city" : "DEEP RIVER", "loc" : [ -72.44856799999999, 41.376478 ], "pop" : 4332, "state" : "CT" } +{ "_id" : "06418", "city" : "DERBY", "loc" : [ -73.080035, 41.322858 ], "pop" : 12199, "state" : "CT" } +{ "_id" : "06419", "city" : "KILLINGWORTH", "loc" : [ -72.571192, 41.369622 ], "pop" : 4809, "state" : "CT" } +{ "_id" : "06420", "city" : "SALEM", "loc" : [ -72.272454, 41.496627 ], "pop" : 4041, "state" : "CT" } +{ "_id" : "06422", "city" : "DURHAM", "loc" : [ -72.68752000000001, 41.464951 ], "pop" : 5737, "state" : "CT" } +{ "_id" : "06423", "city" : "EAST HADDAM", "loc" : [ -72.40587600000001, 41.469575 ], "pop" : 3451, "state" : "CT" } +{ "_id" : "06424", "city" : "EAST HAMPTON", "loc" : [ -72.509345, 41.576058 ], "pop" : 10309, "state" : "CT" } +{ "_id" : "06426", "city" : "ESSEX", "loc" : [ -72.39650399999999, 41.354944 ], "pop" : 2710, "state" : "CT" } +{ "_id" : "06430", "city" : "FAIRFIELD", "loc" : [ -73.257109, 41.166442 ], "pop" : 40889, "state" : "CT" } +{ "_id" : "06432", "city" : "FAIRFIELD", "loc" : [ -73.23540800000001, 41.201651 ], "pop" : 8634, "state" : "CT" } +{ "_id" : "06437", "city" : "GUILFORD", "loc" : [ -72.69678999999999, 41.31537 ], "pop" : 19717, "state" : "CT" } +{ "_id" : "06438", "city" : "HADDAM", "loc" : [ -72.504988, 41.462718 ], "pop" : 2245, "state" : "CT" } +{ "_id" : "06441", "city" : "HIGGANUM", "loc" : [ -72.575143, 41.468246 ], "pop" : 4248, "state" : "CT" } +{ "_id" : "06442", "city" : "IVORYTON", "loc" : [ -72.440387, 41.342101 ], "pop" : 2748, "state" : "CT" } +{ "_id" : "06443", "city" : "MADISON", "loc" : [ -72.61525399999999, 41.309019 ], "pop" : 15488, "state" : "CT" } +{ "_id" : "06447", "city" : "MARLBOROUGH", "loc" : [ -72.460871, 41.641226 ], "pop" : 5535, "state" : "CT" } +{ "_id" : "06450", "city" : "MERIDEN", "loc" : [ -72.799734, 41.533396 ], "pop" : 59441, "state" : "CT" } +{ "_id" : "06455", "city" : "MIDDLEFIELD", "loc" : [ -72.71862400000001, 41.516789 ], "pop" : 2515, "state" : "CT" } +{ "_id" : "06457", "city" : "MIDDLETOWN", "loc" : [ -72.66522500000001, 41.556895 ], "pop" : 42846, "state" : "CT" } +{ "_id" : "06460", "city" : "MILFORD", "loc" : [ -73.054948, 41.217466 ], "pop" : 49940, "state" : "CT" } +{ "_id" : "06468", "city" : "MONROE", "loc" : [ -73.224333, 41.331171 ], "pop" : 16845, "state" : "CT" } +{ "_id" : "06469", "city" : "MOODUS", "loc" : [ -72.441879, 41.507807 ], "pop" : 2634, "state" : "CT" } +{ "_id" : "06470", "city" : "NEWTOWN", "loc" : [ -73.316744, 41.393095 ], "pop" : 12787, "state" : "CT" } +{ "_id" : "06471", "city" : "NORTH BRANFORD", "loc" : [ -72.776034, 41.327985 ], "pop" : 6767, "state" : "CT" } +{ "_id" : "06472", "city" : "NORTHFORD", "loc" : [ -72.78090899999999, 41.396219 ], "pop" : 6229, "state" : "CT" } +{ "_id" : "06473", "city" : "NORTH HAVEN", "loc" : [ -72.85852, 41.382156 ], "pop" : 22481, "state" : "CT" } +{ "_id" : "06475", "city" : "OLD SAYBROOK", "loc" : [ -72.38502200000001, 41.291297 ], "pop" : 9552, "state" : "CT" } +{ "_id" : "06477", "city" : "ORANGE", "loc" : [ -73.02872499999999, 41.281527 ], "pop" : 12828, "state" : "CT" } +{ "_id" : "06478", "city" : "OXFORD", "loc" : [ -73.12961, 41.420237 ], "pop" : 9286, "state" : "CT" } +{ "_id" : "06479", "city" : "PLANTSVILLE", "loc" : [ -72.89903099999999, 41.579747 ], "pop" : 10024, "state" : "CT" } +{ "_id" : "06480", "city" : "PORTLAND", "loc" : [ -72.612797, 41.585223 ], "pop" : 8673, "state" : "CT" } +{ "_id" : "06481", "city" : "ROCKFALL", "loc" : [ -72.699674, 41.534094 ], "pop" : 1330, "state" : "CT" } +{ "_id" : "06482", "city" : "SANDY HOOK", "loc" : [ -73.24852199999999, 41.408706 ], "pop" : 8046, "state" : "CT" } +{ "_id" : "06483", "city" : "SEYMOUR", "loc" : [ -73.081745, 41.386209 ], "pop" : 13660, "state" : "CT" } +{ "_id" : "06484", "city" : "SHELTON", "loc" : [ -73.129439, 41.304689 ], "pop" : 35447, "state" : "CT" } +{ "_id" : "06488", "city" : "SOUTHBURY", "loc" : [ -73.22407699999999, 41.476695 ], "pop" : 15818, "state" : "CT" } +{ "_id" : "06489", "city" : "SOUTHINGTON", "loc" : [ -72.872681, 41.605221 ], "pop" : 28567, "state" : "CT" } +{ "_id" : "06490", "city" : "SOUTHPORT", "loc" : [ -73.290205, 41.14527 ], "pop" : 3701, "state" : "CT" } +{ "_id" : "06492", "city" : "WALLINGFORD", "loc" : [ -72.82217900000001, 41.459997 ], "pop" : 40838, "state" : "CT" } +{ "_id" : "06497", "city" : "STRATFORD", "loc" : [ -73.135594, 41.2044 ], "pop" : 49495, "state" : "CT" } +{ "_id" : "06498", "city" : "WESTBROOK", "loc" : [ -72.45631299999999, 41.292662 ], "pop" : 5377, "state" : "CT" } +{ "_id" : "06510", "city" : "NEW HAVEN", "loc" : [ -72.92706, 41.308701 ], "pop" : 4448, "state" : "CT" } +{ "_id" : "06511", "city" : "NEW HAVEN", "loc" : [ -72.931771, 41.318364 ], "pop" : 54142, "state" : "CT" } +{ "_id" : "06512", "city" : "EAST HAVEN", "loc" : [ -72.874144, 41.280522 ], "pop" : 28963, "state" : "CT" } +{ "_id" : "06513", "city" : "EAST HAVEN", "loc" : [ -72.882554, 41.314215 ], "pop" : 31342, "state" : "CT" } +{ "_id" : "06514", "city" : "HAMDEN", "loc" : [ -72.93613000000001, 41.361987 ], "pop" : 23883, "state" : "CT" } +{ "_id" : "06515", "city" : "NEW HAVEN", "loc" : [ -72.96644499999999, 41.329301 ], "pop" : 18603, "state" : "CT" } +{ "_id" : "06516", "city" : "WEST HAVEN", "loc" : [ -72.963842, 41.270079 ], "pop" : 53642, "state" : "CT" } +{ "_id" : "06517", "city" : "HAMDEN", "loc" : [ -72.91167799999999, 41.348393 ], "pop" : 14604, "state" : "CT" } +{ "_id" : "06518", "city" : "HAMDEN", "loc" : [ -72.911001, 41.409664 ], "pop" : 13802, "state" : "CT" } +{ "_id" : "06519", "city" : "NEW HAVEN", "loc" : [ -72.937307, 41.296284 ], "pop" : 19410, "state" : "CT" } +{ "_id" : "06524", "city" : "BETHANY", "loc" : [ -73.000704, 41.426194 ], "pop" : 4730, "state" : "CT" } +{ "_id" : "06525", "city" : "WOODBRIDGE", "loc" : [ -73.013902, 41.351668 ], "pop" : 7802, "state" : "CT" } +{ "_id" : "06604", "city" : "BRIDGEPORT", "loc" : [ -73.201859, 41.179574 ], "pop" : 28219, "state" : "CT" } +{ "_id" : "06605", "city" : "BRIDGEPORT", "loc" : [ -73.216251, 41.166796 ], "pop" : 23800, "state" : "CT" } +{ "_id" : "06606", "city" : "BRIDGEPORT", "loc" : [ -73.208619, 41.20907 ], "pop" : 41879, "state" : "CT" } +{ "_id" : "06607", "city" : "BRIDGEPORT", "loc" : [ -73.165048, 41.178382 ], "pop" : 9292, "state" : "CT" } +{ "_id" : "06608", "city" : "BRIDGEPORT", "loc" : [ -73.181141, 41.189466 ], "pop" : 17721, "state" : "CT" } +{ "_id" : "06610", "city" : "BRIDGEPORT", "loc" : [ -73.16877100000001, 41.200508 ], "pop" : 20727, "state" : "CT" } +{ "_id" : "06611", "city" : "TRUMBULL", "loc" : [ -73.211063, 41.25641 ], "pop" : 32213, "state" : "CT" } +{ "_id" : "06612", "city" : "EASTON", "loc" : [ -73.287108, 41.252328 ], "pop" : 6213, "state" : "CT" } +{ "_id" : "06702", "city" : "WATERBURY", "loc" : [ -73.038545, 41.556568 ], "pop" : 4522, "state" : "CT" } +{ "_id" : "06704", "city" : "WATERBURY", "loc" : [ -73.03180500000001, 41.575435 ], "pop" : 26018, "state" : "CT" } +{ "_id" : "06705", "city" : "WATERBURY", "loc" : [ -72.996268, 41.550328 ], "pop" : 25128, "state" : "CT" } +{ "_id" : "06706", "city" : "WATERBURY", "loc" : [ -73.03064000000001, 41.536261 ], "pop" : 15431, "state" : "CT" } +{ "_id" : "06708", "city" : "WATERBURY", "loc" : [ -73.06449499999999, 41.551102 ], "pop" : 27661, "state" : "CT" } +{ "_id" : "06710", "city" : "WATERBURY", "loc" : [ -73.04682099999999, 41.567503 ], "pop" : 9921, "state" : "CT" } +{ "_id" : "06712", "city" : "PROSPECT", "loc" : [ -72.978803, 41.502198 ], "pop" : 7775, "state" : "CT" } +{ "_id" : "06716", "city" : "WOLCOTT", "loc" : [ -72.982799, 41.596995 ], "pop" : 13787, "state" : "CT" } +{ "_id" : "06750", "city" : "BANTAM", "loc" : [ -73.252028, 41.721483 ], "pop" : 1418, "state" : "CT" } +{ "_id" : "06751", "city" : "BETHLEHEM", "loc" : [ -73.209098, 41.638683 ], "pop" : 3071, "state" : "CT" } +{ "_id" : "06752", "city" : "BRIDGEWATER", "loc" : [ -73.360936, 41.528684 ], "pop" : 1654, "state" : "CT" } +{ "_id" : "06754", "city" : "WARREN", "loc" : [ -73.36747200000001, 41.770084 ], "pop" : 1278, "state" : "CT" } +{ "_id" : "06755", "city" : "GAYLORDSVILLE", "loc" : [ -73.483524, 41.648635 ], "pop" : 890, "state" : "CT" } +{ "_id" : "06756", "city" : "GOSHEN", "loc" : [ -73.242876, 41.833452 ], "pop" : 2314, "state" : "CT" } +{ "_id" : "06757", "city" : "KENT", "loc" : [ -73.45834499999999, 41.731619 ], "pop" : 2035, "state" : "CT" } +{ "_id" : "06758", "city" : "LAKESIDE", "loc" : [ -73.238235, 41.69001 ], "pop" : 997, "state" : "CT" } +{ "_id" : "06759", "city" : "LITCHFIELD", "loc" : [ -73.200011, 41.754069 ], "pop" : 5573, "state" : "CT" } +{ "_id" : "06762", "city" : "MIDDLEBURY", "loc" : [ -73.11306999999999, 41.534277 ], "pop" : 6338, "state" : "CT" } +{ "_id" : "06763", "city" : "MORRIS", "loc" : [ -73.176509, 41.688121 ], "pop" : 849, "state" : "CT" } +{ "_id" : "06770", "city" : "NAUGATUCK", "loc" : [ -73.049342, 41.492039 ], "pop" : 30625, "state" : "CT" } +{ "_id" : "06776", "city" : "NEW MILFORD", "loc" : [ -73.412752, 41.581745 ], "pop" : 22750, "state" : "CT" } +{ "_id" : "06777", "city" : "NEW PRESTON MARB", "loc" : [ -73.349296, 41.689373 ], "pop" : 1697, "state" : "CT" } +{ "_id" : "06778", "city" : "NORTHFIELD", "loc" : [ -73.132079, 41.707382 ], "pop" : 442, "state" : "CT" } +{ "_id" : "06779", "city" : "OAKVILLE", "loc" : [ -73.087311, 41.590932 ], "pop" : 8455, "state" : "CT" } +{ "_id" : "06782", "city" : "PLYMOUTH", "loc" : [ -73.044887, 41.661121 ], "pop" : 2910, "state" : "CT" } +{ "_id" : "06783", "city" : "ROXBURY", "loc" : [ -73.299346, 41.5509 ], "pop" : 1825, "state" : "CT" } +{ "_id" : "06784", "city" : "SHERMAN", "loc" : [ -73.494694, 41.571366 ], "pop" : 2808, "state" : "CT" } +{ "_id" : "06785", "city" : "SOUTH KENT", "loc" : [ -73.46902300000001, 41.695051 ], "pop" : 719, "state" : "CT" } +{ "_id" : "06786", "city" : "TERRYVILLE", "loc" : [ -73.009214, 41.676197 ], "pop" : 8912, "state" : "CT" } +{ "_id" : "06787", "city" : "THOMASTON", "loc" : [ -73.08855699999999, 41.678643 ], "pop" : 8179, "state" : "CT" } +{ "_id" : "06790", "city" : "TORRINGTON", "loc" : [ -73.115579, 41.813065 ], "pop" : 33969, "state" : "CT" } +{ "_id" : "06791", "city" : "HARWINTON", "loc" : [ -73.072819, 41.770145 ], "pop" : 5228, "state" : "CT" } +{ "_id" : "06793", "city" : "WASHINGTON DEPOT", "loc" : [ -73.29351800000001, 41.634595 ], "pop" : 1381, "state" : "CT" } +{ "_id" : "06794", "city" : "WASHINGTON DEPOT", "loc" : [ -73.327352, 41.655924 ], "pop" : 1323, "state" : "CT" } +{ "_id" : "06795", "city" : "WATERTOWN", "loc" : [ -73.122122, 41.605654 ], "pop" : 12021, "state" : "CT" } +{ "_id" : "06796", "city" : "WEST CORNWALL", "loc" : [ -73.331271, 41.868888 ], "pop" : 1042, "state" : "CT" } +{ "_id" : "06798", "city" : "WOODBURY", "loc" : [ -73.208264, 41.552061 ], "pop" : 8131, "state" : "CT" } +{ "_id" : "06801", "city" : "BETHEL", "loc" : [ -73.40082700000001, 41.381298 ], "pop" : 17538, "state" : "CT" } +{ "_id" : "06804", "city" : "BROOKFIELD", "loc" : [ -73.397986, 41.46504 ], "pop" : 14223, "state" : "CT" } +{ "_id" : "06807", "city" : "COS COB", "loc" : [ -73.593498, 41.052952 ], "pop" : 7000, "state" : "CT" } +{ "_id" : "06810", "city" : "DANBURY", "loc" : [ -73.453165, 41.391663 ], "pop" : 37764, "state" : "CT" } +{ "_id" : "06811", "city" : "DANBURY", "loc" : [ -73.471587, 41.423983 ], "pop" : 27609, "state" : "CT" } +{ "_id" : "06812", "city" : "NEW FAIRFIELD", "loc" : [ -73.497784, 41.472999 ], "pop" : 13013, "state" : "CT" } +{ "_id" : "06820", "city" : "DARIEN", "loc" : [ -73.485254, 41.076759 ], "pop" : 18062, "state" : "CT" } +{ "_id" : "06830", "city" : "BYRAM", "loc" : [ -73.630047, 41.030238 ], "pop" : 22685, "state" : "CT" } +{ "_id" : "06831", "city" : "GREENWICH", "loc" : [ -73.65940500000001, 41.054885 ], "pop" : 14545, "state" : "CT" } +{ "_id" : "06840", "city" : "NEW CANAAN", "loc" : [ -73.494356, 41.151024 ], "pop" : 17937, "state" : "CT" } +{ "_id" : "06850", "city" : "NORWALK", "loc" : [ -73.435827, 41.12222 ], "pop" : 17332, "state" : "CT" } +{ "_id" : "06851", "city" : "NORWALK", "loc" : [ -73.40580199999999, 41.132346 ], "pop" : 24412, "state" : "CT" } +{ "_id" : "06853", "city" : "NORWALK", "loc" : [ -73.439667, 41.070243 ], "pop" : 3979, "state" : "CT" } +{ "_id" : "06854", "city" : "NORWALK", "loc" : [ -73.42848499999999, 41.095722 ], "pop" : 25358, "state" : "CT" } +{ "_id" : "06855", "city" : "NORWALK", "loc" : [ -73.40111899999999, 41.101382 ], "pop" : 7311, "state" : "CT" } +{ "_id" : "06870", "city" : "OLD GREENWICH", "loc" : [ -73.56725299999999, 41.035437 ], "pop" : 6511, "state" : "CT" } +{ "_id" : "06877", "city" : "RIDGEFIELD", "loc" : [ -73.49726800000001, 41.297683 ], "pop" : 21691, "state" : "CT" } +{ "_id" : "06878", "city" : "RIVERSIDE", "loc" : [ -73.581136, 41.037998 ], "pop" : 7765, "state" : "CT" } +{ "_id" : "06880", "city" : "WESTPORT", "loc" : [ -73.34957900000001, 41.143433 ], "pop" : 24705, "state" : "CT" } +{ "_id" : "06883", "city" : "WESTON", "loc" : [ -73.37147400000001, 41.219499 ], "pop" : 8517, "state" : "CT" } +{ "_id" : "06896", "city" : "WEST REDDING", "loc" : [ -73.3935, 41.306915 ], "pop" : 7183, "state" : "CT" } +{ "_id" : "06897", "city" : "WILTON", "loc" : [ -73.438323, 41.201761 ], "pop" : 15795, "state" : "CT" } +{ "_id" : "06901", "city" : "STAMFORD", "loc" : [ -73.539039, 41.053083 ], "pop" : 5860, "state" : "CT" } +{ "_id" : "06902", "city" : "STAMFORD", "loc" : [ -73.53742800000001, 41.052552 ], "pop" : 54605, "state" : "CT" } +{ "_id" : "06903", "city" : "STAMFORD", "loc" : [ -73.56835599999999, 41.135235 ], "pop" : 14172, "state" : "CT" } +{ "_id" : "06905", "city" : "RIDGEWAY", "loc" : [ -73.543757, 41.082576 ], "pop" : 17839, "state" : "CT" } +{ "_id" : "06906", "city" : "STAMFORD", "loc" : [ -73.523563, 41.069218 ], "pop" : 7019, "state" : "CT" } +{ "_id" : "06907", "city" : "STAMFORD", "loc" : [ -73.520297, 41.094206 ], "pop" : 8498, "state" : "CT" } +{ "_id" : "07001", "city" : "AVENEL", "loc" : [ -74.278522, 40.582568 ], "pop" : 14953, "state" : "NJ" } +{ "_id" : "07002", "city" : "BAYONNE", "loc" : [ -74.119169, 40.666399 ], "pop" : 61444, "state" : "NJ" } +{ "_id" : "07003", "city" : "BLOOMFIELD", "loc" : [ -74.18907400000001, 40.803456 ], "pop" : 46131, "state" : "NJ" } +{ "_id" : "07004", "city" : "FAIRFIELD", "loc" : [ -74.296027, 40.882178 ], "pop" : 7567, "state" : "NJ" } +{ "_id" : "07005", "city" : "BOONTON", "loc" : [ -74.414035, 40.911528 ], "pop" : 13961, "state" : "NJ" } +{ "_id" : "07006", "city" : "WEST CALDWELL", "loc" : [ -74.276771, 40.849059 ], "pop" : 24946, "state" : "NJ" } +{ "_id" : "07008", "city" : "CARTERET", "loc" : [ -74.231345, 40.582278 ], "pop" : 19025, "state" : "NJ" } +{ "_id" : "07009", "city" : "CEDAR GROVE", "loc" : [ -74.22967199999999, 40.85344 ], "pop" : 11787, "state" : "NJ" } +{ "_id" : "07010", "city" : "CLIFFSIDE PARK", "loc" : [ -73.987982, 40.822168 ], "pop" : 20687, "state" : "NJ" } +{ "_id" : "07011", "city" : "CLIFTON", "loc" : [ -74.142459, 40.878876 ], "pop" : 31569, "state" : "NJ" } +{ "_id" : "07012", "city" : "CLIFTON", "loc" : [ -74.16117199999999, 40.848835 ], "pop" : 10107, "state" : "NJ" } +{ "_id" : "07013", "city" : "CLIFTON", "loc" : [ -74.171144, 40.869334 ], "pop" : 25503, "state" : "NJ" } +{ "_id" : "07014", "city" : "CLIFTON", "loc" : [ -74.137682, 40.834375 ], "pop" : 4288, "state" : "NJ" } +{ "_id" : "07016", "city" : "CRANFORD", "loc" : [ -74.305685, 40.655357 ], "pop" : 22866, "state" : "NJ" } +{ "_id" : "07017", "city" : "EAST ORANGE", "loc" : [ -74.207723, 40.769614 ], "pop" : 41737, "state" : "NJ" } +{ "_id" : "07018", "city" : "EAST ORANGE", "loc" : [ -74.21982199999999, 40.755799 ], "pop" : 32618, "state" : "NJ" } +{ "_id" : "07020", "city" : "EDGEWATER", "loc" : [ -73.973821, 40.831654 ], "pop" : 5001, "state" : "NJ" } +{ "_id" : "07021", "city" : "ESSEX FELLS", "loc" : [ -74.27970500000001, 40.827924 ], "pop" : 2102, "state" : "NJ" } +{ "_id" : "07022", "city" : "FAIRVIEW", "loc" : [ -73.999967, 40.816985 ], "pop" : 10682, "state" : "NJ" } +{ "_id" : "07023", "city" : "FANWOOD", "loc" : [ -74.386762, 40.641856 ], "pop" : 6528, "state" : "NJ" } +{ "_id" : "07024", "city" : "FORT LEE", "loc" : [ -73.97445500000001, 40.850312 ], "pop" : 32030, "state" : "NJ" } +{ "_id" : "07026", "city" : "GARFIELD", "loc" : [ -74.108141, 40.878886 ], "pop" : 26727, "state" : "NJ" } +{ "_id" : "07027", "city" : "GARWOOD", "loc" : [ -74.323864, 40.65121 ], "pop" : 4277, "state" : "NJ" } +{ "_id" : "07028", "city" : "GLEN RIDGE", "loc" : [ -74.205477, 40.804015 ], "pop" : 7751, "state" : "NJ" } +{ "_id" : "07029", "city" : "KEARNY", "loc" : [ -74.155871, 40.74754 ], "pop" : 15587, "state" : "NJ" } +{ "_id" : "07030", "city" : "HOBOKEN", "loc" : [ -74.03286300000001, 40.7445 ], "pop" : 33397, "state" : "NJ" } +{ "_id" : "07031", "city" : "NORTH ARLINGTON", "loc" : [ -74.134288, 40.78977 ], "pop" : 13629, "state" : "NJ" } +{ "_id" : "07032", "city" : "KEARNY", "loc" : [ -74.147108, 40.76466 ], "pop" : 34869, "state" : "NJ" } +{ "_id" : "07033", "city" : "KENILWORTH", "loc" : [ -74.294419, 40.675869 ], "pop" : 7516, "state" : "NJ" } +{ "_id" : "07034", "city" : "LAKE HIAWATHA", "loc" : [ -74.38301300000001, 40.88252 ], "pop" : 9361, "state" : "NJ" } +{ "_id" : "07035", "city" : "LINCOLN PARK", "loc" : [ -74.29951199999999, 40.920769 ], "pop" : 10814, "state" : "NJ" } +{ "_id" : "07036", "city" : "LINDEN", "loc" : [ -74.255567, 40.635366 ], "pop" : 37859, "state" : "NJ" } +{ "_id" : "07039", "city" : "LIVINGSTON", "loc" : [ -74.3202, 40.789633 ], "pop" : 26677, "state" : "NJ" } +{ "_id" : "07040", "city" : "MAPLEWOOD", "loc" : [ -74.265573, 40.727906 ], "pop" : 21588, "state" : "NJ" } +{ "_id" : "07041", "city" : "MILLBURN", "loc" : [ -74.301469, 40.722798 ], "pop" : 6501, "state" : "NJ" } +{ "_id" : "07042", "city" : "MONTCLAIR", "loc" : [ -74.21646699999999, 40.81307 ], "pop" : 24938, "state" : "NJ" } +{ "_id" : "07043", "city" : "MONTCLAIR", "loc" : [ -74.201104, 40.843023 ], "pop" : 11891, "state" : "NJ" } +{ "_id" : "07044", "city" : "VERONA", "loc" : [ -74.242847, 40.831928 ], "pop" : 13583, "state" : "NJ" } +{ "_id" : "07045", "city" : "MONTVILLE", "loc" : [ -74.36456, 40.904914 ], "pop" : 6571, "state" : "NJ" } +{ "_id" : "07046", "city" : "MOUNTAIN LAKES", "loc" : [ -74.441487, 40.890447 ], "pop" : 4250, "state" : "NJ" } +{ "_id" : "07047", "city" : "NORTH BERGEN", "loc" : [ -74.017715, 40.793019 ], "pop" : 50823, "state" : "NJ" } +{ "_id" : "07050", "city" : "ORANGE", "loc" : [ -74.2355, 40.769223 ], "pop" : 28789, "state" : "NJ" } +{ "_id" : "07052", "city" : "WEST ORANGE", "loc" : [ -74.256765, 40.785926 ], "pop" : 38639, "state" : "NJ" } +{ "_id" : "07054", "city" : "PARSIPPANY", "loc" : [ -74.411663, 40.862106 ], "pop" : 27179, "state" : "NJ" } +{ "_id" : "07055", "city" : "PASSAIC", "loc" : [ -74.128348, 40.860132 ], "pop" : 58325, "state" : "NJ" } +{ "_id" : "07057", "city" : "WALLINGTON", "loc" : [ -74.10793700000001, 40.85356 ], "pop" : 10816, "state" : "NJ" } +{ "_id" : "07058", "city" : "PINE BROOK", "loc" : [ -74.350009, 40.874207 ], "pop" : 4345, "state" : "NJ" } +{ "_id" : "07059", "city" : "WARREN", "loc" : [ -74.510456, 40.631787 ], "pop" : 10867, "state" : "NJ" } +{ "_id" : "07060", "city" : "NORTH PLAINFIELD", "loc" : [ -74.425298, 40.61978 ], "pop" : 43471, "state" : "NJ" } +{ "_id" : "07062", "city" : "NORTH PLAINFIELD", "loc" : [ -74.406042, 40.631992 ], "pop" : 12756, "state" : "NJ" } +{ "_id" : "07063", "city" : "NORTH PLAINFIELD", "loc" : [ -74.445325, 40.604838 ], "pop" : 14285, "state" : "NJ" } +{ "_id" : "07064", "city" : "PORT READING", "loc" : [ -74.24664300000001, 40.570935 ], "pop" : 4083, "state" : "NJ" } +{ "_id" : "07065", "city" : "RAHWAY", "loc" : [ -74.281881, 40.608668 ], "pop" : 25296, "state" : "NJ" } +{ "_id" : "07066", "city" : "CLARK", "loc" : [ -74.310581, 40.620256 ], "pop" : 14973, "state" : "NJ" } +{ "_id" : "07067", "city" : "COLONIA", "loc" : [ -74.316368, 40.593743 ], "pop" : 18488, "state" : "NJ" } +{ "_id" : "07068", "city" : "ROSELAND", "loc" : [ -74.304688, 40.82034 ], "pop" : 4820, "state" : "NJ" } +{ "_id" : "07070", "city" : "RUTHERFORD", "loc" : [ -74.112146, 40.829245 ], "pop" : 17790, "state" : "NJ" } +{ "_id" : "07071", "city" : "LYNDHURST", "loc" : [ -74.12452999999999, 40.809433 ], "pop" : 18423, "state" : "NJ" } +{ "_id" : "07072", "city" : "CARLSTADT", "loc" : [ -74.09249800000001, 40.840298 ], "pop" : 5541, "state" : "NJ" } +{ "_id" : "07073", "city" : "EAST RUTHERFORD", "loc" : [ -74.104069, 40.838527 ], "pop" : 7874, "state" : "NJ" } +{ "_id" : "07074", "city" : "MOONACHIE", "loc" : [ -74.056646, 40.839352 ], "pop" : 2817, "state" : "NJ" } +{ "_id" : "07075", "city" : "WOOD RIDGE", "loc" : [ -74.087845, 40.849348 ], "pop" : 7548, "state" : "NJ" } +{ "_id" : "07076", "city" : "SCOTCH PLAINS", "loc" : [ -74.381663, 40.642162 ], "pop" : 18514, "state" : "NJ" } +{ "_id" : "07077", "city" : "SEWAREN", "loc" : [ -74.26073599999999, 40.554181 ], "pop" : 2463, "state" : "NJ" } +{ "_id" : "07078", "city" : "SHORT HILLS", "loc" : [ -74.327085, 40.73678 ], "pop" : 12129, "state" : "NJ" } +{ "_id" : "07079", "city" : "SOUTH ORANGE", "loc" : [ -74.257532, 40.746453 ], "pop" : 16115, "state" : "NJ" } +{ "_id" : "07080", "city" : "SOUTH PLAINFIELD", "loc" : [ -74.41469499999999, 40.583884 ], "pop" : 20540, "state" : "NJ" } +{ "_id" : "07081", "city" : "SPRINGFIELD", "loc" : [ -74.322705, 40.701461 ], "pop" : 13452, "state" : "NJ" } +{ "_id" : "07082", "city" : "TOWACO", "loc" : [ -74.34280699999999, 40.927691 ], "pop" : 4355, "state" : "NJ" } +{ "_id" : "07083", "city" : "UNION", "loc" : [ -74.267653, 40.695184 ], "pop" : 46608, "state" : "NJ" } +{ "_id" : "07087", "city" : "WEEHAWKEN", "loc" : [ -74.030558, 40.768153 ], "pop" : 69646, "state" : "NJ" } +{ "_id" : "07088", "city" : "VAUXHALL", "loc" : [ -74.28287400000001, 40.717927 ], "pop" : 3481, "state" : "NJ" } +{ "_id" : "07090", "city" : "WESTFIELD", "loc" : [ -74.345056, 40.647851 ], "pop" : 31885, "state" : "NJ" } +{ "_id" : "07092", "city" : "MOUNTAINSIDE", "loc" : [ -74.358785, 40.678461 ], "pop" : 6660, "state" : "NJ" } +{ "_id" : "07093", "city" : "GUTTENBERG", "loc" : [ -74.01285900000001, 40.788192 ], "pop" : 44735, "state" : "NJ" } +{ "_id" : "07094", "city" : "SECAUCUS", "loc" : [ -74.063416, 40.79101 ], "pop" : 14061, "state" : "NJ" } +{ "_id" : "07095", "city" : "WOODBRIDGE", "loc" : [ -74.284542, 40.555973 ], "pop" : 15827, "state" : "NJ" } +{ "_id" : "07102", "city" : "NEWARK", "loc" : [ -74.17650500000001, 40.73201 ], "pop" : 10328, "state" : "NJ" } +{ "_id" : "07103", "city" : "NEWARK", "loc" : [ -74.196364, 40.736975 ], "pop" : 36949, "state" : "NJ" } +{ "_id" : "07104", "city" : "NEWARK", "loc" : [ -74.1695, 40.766446 ], "pop" : 47183, "state" : "NJ" } +{ "_id" : "07105", "city" : "NEWARK", "loc" : [ -74.156346, 40.727086 ], "pop" : 38104, "state" : "NJ" } +{ "_id" : "07106", "city" : "NEWARK", "loc" : [ -74.233023, 40.741485 ], "pop" : 35013, "state" : "NJ" } +{ "_id" : "07107", "city" : "NEWARK", "loc" : [ -74.18816, 40.760656 ], "pop" : 36649, "state" : "NJ" } +{ "_id" : "07108", "city" : "NEWARK", "loc" : [ -74.201538, 40.723647 ], "pop" : 29730, "state" : "NJ" } +{ "_id" : "07109", "city" : "BELLEVILLE", "loc" : [ -74.16311899999999, 40.79458 ], "pop" : 34924, "state" : "NJ" } +{ "_id" : "07110", "city" : "NUTLEY", "loc" : [ -74.158934, 40.818548 ], "pop" : 26441, "state" : "NJ" } +{ "_id" : "07111", "city" : "IRVINGTON", "loc" : [ -74.23127100000001, 40.7261 ], "pop" : 60986, "state" : "NJ" } +{ "_id" : "07112", "city" : "NEWARK", "loc" : [ -74.21307299999999, 40.71071 ], "pop" : 30356, "state" : "NJ" } +{ "_id" : "07114", "city" : "NEWARK", "loc" : [ -74.189105, 40.708246 ], "pop" : 11260, "state" : "NJ" } +{ "_id" : "07201", "city" : "ELIZABETH", "loc" : [ -74.204335, 40.67169 ], "pop" : 25826, "state" : "NJ" } +{ "_id" : "07202", "city" : "ELIZABETH", "loc" : [ -74.22154399999999, 40.65652 ], "pop" : 33981, "state" : "NJ" } +{ "_id" : "07203", "city" : "ROSELLE", "loc" : [ -74.261044, 40.652972 ], "pop" : 20159, "state" : "NJ" } +{ "_id" : "07204", "city" : "ROSELLE PARK", "loc" : [ -74.267003, 40.665134 ], "pop" : 12784, "state" : "NJ" } +{ "_id" : "07205", "city" : "HILLSIDE", "loc" : [ -74.228065, 40.696811 ], "pop" : 20860, "state" : "NJ" } +{ "_id" : "07206", "city" : "ELIZABETH", "loc" : [ -74.192487, 40.653207 ], "pop" : 23830, "state" : "NJ" } +{ "_id" : "07208", "city" : "ELIZABETH", "loc" : [ -74.22392000000001, 40.674659 ], "pop" : 26609, "state" : "NJ" } +{ "_id" : "07302", "city" : "JERSEY CITY", "loc" : [ -74.04687800000001, 40.722126 ], "pop" : 32876, "state" : "NJ" } +{ "_id" : "07304", "city" : "JERSEY CITY", "loc" : [ -74.07535799999999, 40.717973 ], "pop" : 42101, "state" : "NJ" } +{ "_id" : "07305", "city" : "JERSEY CITY", "loc" : [ -74.088998, 40.702007 ], "pop" : 58655, "state" : "NJ" } +{ "_id" : "07306", "city" : "JERSEY CITY", "loc" : [ -74.06603800000001, 40.732125 ], "pop" : 53257, "state" : "NJ" } +{ "_id" : "07307", "city" : "JERSEY CITY", "loc" : [ -74.049752, 40.748167 ], "pop" : 40704, "state" : "NJ" } +{ "_id" : "07310", "city" : "JERSEY CITY", "loc" : [ -74.043149, 40.732354 ], "pop" : 944, "state" : "NJ" } +{ "_id" : "07401", "city" : "ALLENDALE", "loc" : [ -74.134185, 41.032654 ], "pop" : 5907, "state" : "NJ" } +{ "_id" : "07403", "city" : "BLOOMINGDALE", "loc" : [ -74.33375599999999, 41.012845 ], "pop" : 7520, "state" : "NJ" } +{ "_id" : "07405", "city" : "KINNELON", "loc" : [ -74.364065, 40.992118 ], "pop" : 15325, "state" : "NJ" } +{ "_id" : "07407", "city" : "ELMWOOD PARK", "loc" : [ -74.120896, 40.906896 ], "pop" : 17649, "state" : "NJ" } +{ "_id" : "07410", "city" : "FAIR LAWN", "loc" : [ -74.11660000000001, 40.934297 ], "pop" : 30522, "state" : "NJ" } +{ "_id" : "07416", "city" : "FRANKLIN", "loc" : [ -74.58649, 41.116355 ], "pop" : 5380, "state" : "NJ" } +{ "_id" : "07417", "city" : "FRANKLIN LAKES", "loc" : [ -74.211347, 41.008095 ], "pop" : 9873, "state" : "NJ" } +{ "_id" : "07418", "city" : "GLENWOOD", "loc" : [ -74.48848099999999, 41.235618 ], "pop" : 2446, "state" : "NJ" } +{ "_id" : "07419", "city" : "HAMBURG", "loc" : [ -74.587379, 41.146714 ], "pop" : 4198, "state" : "NJ" } +{ "_id" : "07420", "city" : "HASKELL", "loc" : [ -74.296542, 41.030111 ], "pop" : 4813, "state" : "NJ" } +{ "_id" : "07421", "city" : "HEWITT", "loc" : [ -74.368566, 41.170867 ], "pop" : 6907, "state" : "NJ" } +{ "_id" : "07422", "city" : "HIGHLAND LAKES", "loc" : [ -74.456442, 41.182622 ], "pop" : 7615, "state" : "NJ" } +{ "_id" : "07423", "city" : "HO HO KUS", "loc" : [ -74.102532, 41.000412 ], "pop" : 3967, "state" : "NJ" } +{ "_id" : "07424", "city" : "WEST PATERSON", "loc" : [ -74.21145, 40.885353 ], "pop" : 22626, "state" : "NJ" } +{ "_id" : "07430", "city" : "MAHWAH", "loc" : [ -74.155974, 41.074473 ], "pop" : 17991, "state" : "NJ" } +{ "_id" : "07432", "city" : "MIDLAND PARK", "loc" : [ -74.14090400000001, 40.995668 ], "pop" : 6693, "state" : "NJ" } +{ "_id" : "07435", "city" : "NEWFOUNDLAND", "loc" : [ -74.435857, 41.064691 ], "pop" : 1624, "state" : "NJ" } +{ "_id" : "07436", "city" : "OAKLAND", "loc" : [ -74.233754, 41.029436 ], "pop" : 11997, "state" : "NJ" } +{ "_id" : "07438", "city" : "MILTON", "loc" : [ -74.50880100000001, 41.028401 ], "pop" : 10453, "state" : "NJ" } +{ "_id" : "07439", "city" : "OGDENSBURG", "loc" : [ -74.59818799999999, 41.076707 ], "pop" : 2722, "state" : "NJ" } +{ "_id" : "07440", "city" : "PEQUANNOCK", "loc" : [ -74.29601, 40.947308 ], "pop" : 4932, "state" : "NJ" } +{ "_id" : "07442", "city" : "POMPTON LAKES", "loc" : [ -74.287566, 40.999284 ], "pop" : 10539, "state" : "NJ" } +{ "_id" : "07444", "city" : "POMPTON PLAINS", "loc" : [ -74.301602, 40.965515 ], "pop" : 8028, "state" : "NJ" } +{ "_id" : "07446", "city" : "RAMSEY", "loc" : [ -74.14446700000001, 41.057743 ], "pop" : 13135, "state" : "NJ" } +{ "_id" : "07450", "city" : "RIDGEWOOD", "loc" : [ -74.113134, 40.982023 ], "pop" : 24452, "state" : "NJ" } +{ "_id" : "07452", "city" : "GLEN ROCK", "loc" : [ -74.125367, 40.960183 ], "pop" : 10942, "state" : "NJ" } +{ "_id" : "07456", "city" : "RINGWOOD", "loc" : [ -74.265872, 41.092816 ], "pop" : 12645, "state" : "NJ" } +{ "_id" : "07457", "city" : "RIVERDALE", "loc" : [ -74.308756, 40.993109 ], "pop" : 2365, "state" : "NJ" } +{ "_id" : "07458", "city" : "UPPER SADDLE RIV", "loc" : [ -74.09677499999999, 41.053083 ], "pop" : 10148, "state" : "NJ" } +{ "_id" : "07460", "city" : "STOCKHOLM", "loc" : [ -74.528256, 41.099204 ], "pop" : 3375, "state" : "NJ" } +{ "_id" : "07461", "city" : "SUSSEX", "loc" : [ -74.59915599999999, 41.229211 ], "pop" : 15969, "state" : "NJ" } +{ "_id" : "07462", "city" : "VERNON", "loc" : [ -74.533196, 41.184981 ], "pop" : 6460, "state" : "NJ" } +{ "_id" : "07463", "city" : "WALDWICK", "loc" : [ -74.124259, 41.012968 ], "pop" : 9720, "state" : "NJ" } +{ "_id" : "07465", "city" : "WANAQUE", "loc" : [ -74.27896800000001, 41.054447 ], "pop" : 4941, "state" : "NJ" } +{ "_id" : "07470", "city" : "WAYNE", "loc" : [ -74.246565, 40.947112 ], "pop" : 46815, "state" : "NJ" } +{ "_id" : "07480", "city" : "WEST MILFORD", "loc" : [ -74.374996, 41.091513 ], "pop" : 15417, "state" : "NJ" } +{ "_id" : "07481", "city" : "WYCKOFF", "loc" : [ -74.166009, 40.997834 ], "pop" : 15372, "state" : "NJ" } +{ "_id" : "07501", "city" : "PATERSON", "loc" : [ -74.167141, 40.914273 ], "pop" : 33364, "state" : "NJ" } +{ "_id" : "07502", "city" : "PATERSON", "loc" : [ -74.19323799999999, 40.919926 ], "pop" : 12698, "state" : "NJ" } +{ "_id" : "07503", "city" : "PATERSON", "loc" : [ -74.15727200000001, 40.897046 ], "pop" : 18683, "state" : "NJ" } +{ "_id" : "07504", "city" : "PATERSON", "loc" : [ -74.145247, 40.912179 ], "pop" : 12152, "state" : "NJ" } +{ "_id" : "07505", "city" : "PATERSON", "loc" : [ -74.171947, 40.915581 ], "pop" : 1837, "state" : "NJ" } +{ "_id" : "07506", "city" : "HAWTHORNE", "loc" : [ -74.156897, 40.956355 ], "pop" : 16920, "state" : "NJ" } +{ "_id" : "07508", "city" : "HALEDON", "loc" : [ -74.182599, 40.945689 ], "pop" : 19757, "state" : "NJ" } +{ "_id" : "07512", "city" : "TOTOWA", "loc" : [ -74.21675, 40.904811 ], "pop" : 10147, "state" : "NJ" } +{ "_id" : "07513", "city" : "PATERSON", "loc" : [ -74.152862, 40.906994 ], "pop" : 10088, "state" : "NJ" } +{ "_id" : "07514", "city" : "PATERSON", "loc" : [ -74.146717, 40.924764 ], "pop" : 18860, "state" : "NJ" } +{ "_id" : "07522", "city" : "PATERSON", "loc" : [ -74.178078, 40.925168 ], "pop" : 21813, "state" : "NJ" } +{ "_id" : "07524", "city" : "PATERSON", "loc" : [ -74.155457, 40.930916 ], "pop" : 11887, "state" : "NJ" } +{ "_id" : "07601", "city" : "HACKENSACK", "loc" : [ -74.050301, 40.888191 ], "pop" : 36963, "state" : "NJ" } +{ "_id" : "07603", "city" : "BOGOTA", "loc" : [ -74.028122, 40.874441 ], "pop" : 7824, "state" : "NJ" } +{ "_id" : "07604", "city" : "HASBROUCK HEIGHT", "loc" : [ -74.075971, 40.862241 ], "pop" : 11499, "state" : "NJ" } +{ "_id" : "07605", "city" : "LEONIA", "loc" : [ -73.98787299999999, 40.862929 ], "pop" : 8326, "state" : "NJ" } +{ "_id" : "07606", "city" : "SOUTH HACKENSACK", "loc" : [ -74.045601, 40.863391 ], "pop" : 2150, "state" : "NJ" } +{ "_id" : "07607", "city" : "MAYWOOD", "loc" : [ -74.062916, 40.902412 ], "pop" : 9473, "state" : "NJ" } +{ "_id" : "07608", "city" : "TETERBORO", "loc" : [ -74.054204, 40.86175 ], "pop" : 22, "state" : "NJ" } +{ "_id" : "07620", "city" : "ALPINE", "loc" : [ -73.930842, 40.951097 ], "pop" : 1716, "state" : "NJ" } +{ "_id" : "07621", "city" : "BERGENFIELD", "loc" : [ -73.998918, 40.923837 ], "pop" : 24613, "state" : "NJ" } +{ "_id" : "07624", "city" : "CLOSTER", "loc" : [ -73.958985, 40.972051 ], "pop" : 8101, "state" : "NJ" } +{ "_id" : "07626", "city" : "CRESSKILL", "loc" : [ -73.96520599999999, 40.941847 ], "pop" : 7633, "state" : "NJ" } +{ "_id" : "07627", "city" : "DEMAREST", "loc" : [ -73.960221, 40.954775 ], "pop" : 4718, "state" : "NJ" } +{ "_id" : "07628", "city" : "DUMONT", "loc" : [ -73.99213899999999, 40.944692 ], "pop" : 17187, "state" : "NJ" } +{ "_id" : "07630", "city" : "EMERSON", "loc" : [ -74.028515, 40.975459 ], "pop" : 6519, "state" : "NJ" } +{ "_id" : "07631", "city" : "ENGLEWOOD", "loc" : [ -73.977182, 40.894251 ], "pop" : 24869, "state" : "NJ" } +{ "_id" : "07632", "city" : "ENGLEWOOD CLIFFS", "loc" : [ -73.954449, 40.882043 ], "pop" : 5644, "state" : "NJ" } +{ "_id" : "07640", "city" : "HARRINGTON PARK", "loc" : [ -73.980017, 40.991791 ], "pop" : 4628, "state" : "NJ" } +{ "_id" : "07641", "city" : "HAWORTH", "loc" : [ -73.987376, 40.960808 ], "pop" : 3384, "state" : "NJ" } +{ "_id" : "07642", "city" : "HILLSDALE", "loc" : [ -74.042625, 41.006945 ], "pop" : 9771, "state" : "NJ" } +{ "_id" : "07643", "city" : "LITTLE FERRY", "loc" : [ -74.040502, 40.849319 ], "pop" : 9970, "state" : "NJ" } +{ "_id" : "07644", "city" : "LODI", "loc" : [ -74.083827, 40.876363 ], "pop" : 22345, "state" : "NJ" } +{ "_id" : "07645", "city" : "MONTVALE", "loc" : [ -74.03836200000001, 41.049458 ], "pop" : 6935, "state" : "NJ" } +{ "_id" : "07646", "city" : "NEW MILFORD", "loc" : [ -74.01951699999999, 40.933115 ], "pop" : 15799, "state" : "NJ" } +{ "_id" : "07647", "city" : "ROCKLEIGH", "loc" : [ -73.952375, 41.011196 ], "pop" : 4833, "state" : "NJ" } +{ "_id" : "07648", "city" : "NORWOOD", "loc" : [ -73.95817, 40.995231 ], "pop" : 4858, "state" : "NJ" } +{ "_id" : "07649", "city" : "ORADELL", "loc" : [ -74.033525, 40.953456 ], "pop" : 8069, "state" : "NJ" } +{ "_id" : "07650", "city" : "PALISADES PARK", "loc" : [ -73.995436, 40.846238 ], "pop" : 14536, "state" : "NJ" } +{ "_id" : "07652", "city" : "PARAMUS", "loc" : [ -74.06724, 40.947683 ], "pop" : 25085, "state" : "NJ" } +{ "_id" : "07656", "city" : "PARK RIDGE", "loc" : [ -74.039574, 41.034349 ], "pop" : 8120, "state" : "NJ" } +{ "_id" : "07657", "city" : "RIDGEFIELD", "loc" : [ -74.001531, 40.832568 ], "pop" : 9753, "state" : "NJ" } +{ "_id" : "07660", "city" : "RIDGEFIELD PARK", "loc" : [ -74.02296200000001, 40.856218 ], "pop" : 12454, "state" : "NJ" } +{ "_id" : "07661", "city" : "RIVER EDGE", "loc" : [ -74.03924000000001, 40.926476 ], "pop" : 10603, "state" : "NJ" } +{ "_id" : "07662", "city" : "SADDLE BROOK", "loc" : [ -74.091296, 40.904928 ], "pop" : 18883, "state" : "NJ" } +{ "_id" : "07666", "city" : "TEANECK", "loc" : [ -74.011928, 40.89148 ], "pop" : 37822, "state" : "NJ" } +{ "_id" : "07670", "city" : "TENAFLY", "loc" : [ -73.965906, 40.921596 ], "pop" : 13297, "state" : "NJ" } +{ "_id" : "07675", "city" : "OLD TAPPAN", "loc" : [ -74.03258599999999, 41.001696 ], "pop" : 39036, "state" : "NJ" } +{ "_id" : "07701", "city" : "SUBURBAN", "loc" : [ -74.080003, 40.354083 ], "pop" : 22320, "state" : "NJ" } +{ "_id" : "07702", "city" : "SHREWSBURY", "loc" : [ -74.058892, 40.328198 ], "pop" : 3096, "state" : "NJ" } +{ "_id" : "07703", "city" : "FORT MONMOUTH", "loc" : [ -74.039001, 40.317667 ], "pop" : 919, "state" : "NJ" } +{ "_id" : "07704", "city" : "FAIR HAVEN", "loc" : [ -74.03889100000001, 40.359873 ], "pop" : 5176, "state" : "NJ" } +{ "_id" : "07711", "city" : "ALLENHURST", "loc" : [ -74.00670599999999, 40.236675 ], "pop" : 2030, "state" : "NJ" } +{ "_id" : "07712", "city" : "OCEAN", "loc" : [ -74.02948600000001, 40.235571 ], "pop" : 35939, "state" : "NJ" } +{ "_id" : "07716", "city" : "ATLANTIC HIGHLAN", "loc" : [ -74.032411, 40.40772 ], "pop" : 8440, "state" : "NJ" } +{ "_id" : "07717", "city" : "AVON BY THE SEA", "loc" : [ -74.01673700000001, 40.191796 ], "pop" : 2165, "state" : "NJ" } +{ "_id" : "07718", "city" : "BELFORD", "loc" : [ -74.088887, 40.417281 ], "pop" : 6601, "state" : "NJ" } +{ "_id" : "07719", "city" : "WALL", "loc" : [ -74.047247, 40.17434 ], "pop" : 19146, "state" : "NJ" } +{ "_id" : "07720", "city" : "BRADLEY BEACH", "loc" : [ -74.013166, 40.202308 ], "pop" : 4475, "state" : "NJ" } +{ "_id" : "07721", "city" : "CLIFFWOOD", "loc" : [ -74.235759, 40.435281 ], "pop" : 2332, "state" : "NJ" } +{ "_id" : "07722", "city" : "COLTS NECK", "loc" : [ -74.177988, 40.301225 ], "pop" : 8623, "state" : "NJ" } +{ "_id" : "07723", "city" : "DEAL", "loc" : [ -74.001998, 40.250568 ], "pop" : 1722, "state" : "NJ" } +{ "_id" : "07724", "city" : "EATONTOWN", "loc" : [ -74.06977999999999, 40.302815 ], "pop" : 23682, "state" : "NJ" } +{ "_id" : "07726", "city" : "MANALAPAN", "loc" : [ -74.330613, 40.306274 ], "pop" : 28928, "state" : "NJ" } +{ "_id" : "07727", "city" : "FARMINGDALE", "loc" : [ -74.177864, 40.204312 ], "pop" : 4794, "state" : "NJ" } +{ "_id" : "07728", "city" : "FREEHOLD", "loc" : [ -74.276822, 40.245776 ], "pop" : 42567, "state" : "NJ" } +{ "_id" : "07730", "city" : "HAZLET", "loc" : [ -74.179896, 40.422554 ], "pop" : 17181, "state" : "NJ" } +{ "_id" : "07731", "city" : "HOWELL", "loc" : [ -74.213683, 40.148096 ], "pop" : 31114, "state" : "NJ" } +{ "_id" : "07732", "city" : "FORT HANCOCK", "loc" : [ -73.99091199999999, 40.402377 ], "pop" : 4962, "state" : "NJ" } +{ "_id" : "07733", "city" : "HOLMDEL", "loc" : [ -74.17397099999999, 40.385853 ], "pop" : 11165, "state" : "NJ" } +{ "_id" : "07734", "city" : "KEANSBURG", "loc" : [ -74.130633, 40.441363 ], "pop" : 21931, "state" : "NJ" } +{ "_id" : "07735", "city" : "KEYPORT", "loc" : [ -74.199563, 40.439862 ], "pop" : 21082, "state" : "NJ" } +{ "_id" : "07737", "city" : "LEONARDO", "loc" : [ -74.062265, 40.417704 ], "pop" : 5027, "state" : "NJ" } +{ "_id" : "07738", "city" : "LINCROFT", "loc" : [ -74.120469, 40.33689 ], "pop" : 6214, "state" : "NJ" } +{ "_id" : "07739", "city" : "LITTLE SILVER", "loc" : [ -74.041319, 40.335393 ], "pop" : 5683, "state" : "NJ" } +{ "_id" : "07740", "city" : "LONG BRANCH", "loc" : [ -73.991176, 40.299204 ], "pop" : 29053, "state" : "NJ" } +{ "_id" : "07746", "city" : "MARLBORO", "loc" : [ -74.26387099999999, 40.31825 ], "pop" : 14956, "state" : "NJ" } +{ "_id" : "07747", "city" : "MATAWAN", "loc" : [ -74.237955, 40.410876 ], "pop" : 26130, "state" : "NJ" } +{ "_id" : "07748", "city" : "NEW MONMOUTH", "loc" : [ -74.113908, 40.396018 ], "pop" : 22727, "state" : "NJ" } +{ "_id" : "07750", "city" : "MONMOUTH BEACH", "loc" : [ -73.98089, 40.333032 ], "pop" : 3329, "state" : "NJ" } +{ "_id" : "07751", "city" : "MORGANVILLE", "loc" : [ -74.277863, 40.352917 ], "pop" : 11680, "state" : "NJ" } +{ "_id" : "07753", "city" : "NEPTUNE CITY", "loc" : [ -74.054045, 40.211153 ], "pop" : 32147, "state" : "NJ" } +{ "_id" : "07755", "city" : "OAKHURST", "loc" : [ -74.018413, 40.26479 ], "pop" : 5637, "state" : "NJ" } +{ "_id" : "07756", "city" : "OCEAN GROVE", "loc" : [ -74.009306, 40.211606 ], "pop" : 4723, "state" : "NJ" } +{ "_id" : "07757", "city" : "OCEANPORT", "loc" : [ -74.016372, 40.31573 ], "pop" : 5227, "state" : "NJ" } +{ "_id" : "07758", "city" : "PORT MONMOUTH", "loc" : [ -74.108259, 40.428886 ], "pop" : 4698, "state" : "NJ" } +{ "_id" : "07760", "city" : "SEA BRIGHT", "loc" : [ -74.000618, 40.371829 ], "pop" : 9700, "state" : "NJ" } +{ "_id" : "07762", "city" : "SPRING LAKE", "loc" : [ -74.037885, 40.154198 ], "pop" : 9384, "state" : "NJ" } +{ "_id" : "07764", "city" : "WEST LONG BRANCH", "loc" : [ -74.016221, 40.287811 ], "pop" : 7666, "state" : "NJ" } +{ "_id" : "07801", "city" : "MINE HILL", "loc" : [ -74.559702, 40.887218 ], "pop" : 25588, "state" : "NJ" } +{ "_id" : "07821", "city" : "ANDOVER", "loc" : [ -74.75241800000001, 40.961386 ], "pop" : 8931, "state" : "NJ" } +{ "_id" : "07822", "city" : "AUGUSTA", "loc" : [ -74.684753, 41.145086 ], "pop" : 1555, "state" : "NJ" } +{ "_id" : "07823", "city" : "BELVIDERE", "loc" : [ -75.05026100000001, 40.830819 ], "pop" : 5790, "state" : "NJ" } +{ "_id" : "07825", "city" : "BLAIRSTOWN", "loc" : [ -74.965097, 40.967386 ], "pop" : 8815, "state" : "NJ" } +{ "_id" : "07826", "city" : "BRANCHVILLE", "loc" : [ -74.75002499999999, 41.170512 ], "pop" : 5009, "state" : "NJ" } +{ "_id" : "07827", "city" : "MONTAGUE", "loc" : [ -74.753956, 41.302259 ], "pop" : 3228, "state" : "NJ" } +{ "_id" : "07828", "city" : "BUDD LAKE", "loc" : [ -74.742552, 40.873108 ], "pop" : 11588, "state" : "NJ" } +{ "_id" : "07830", "city" : "CALIFON", "loc" : [ -74.815218, 40.716209 ], "pop" : 5526, "state" : "NJ" } +{ "_id" : "07832", "city" : "COLUMBIA", "loc" : [ -75.05498299999999, 40.938805 ], "pop" : 3185, "state" : "NJ" } +{ "_id" : "07834", "city" : "DENVILLE", "loc" : [ -74.484379, 40.889735 ], "pop" : 14075, "state" : "NJ" } +{ "_id" : "07836", "city" : "FLANDERS", "loc" : [ -74.70188, 40.845316 ], "pop" : 10548, "state" : "NJ" } +{ "_id" : "07838", "city" : "GREAT MEADOWS", "loc" : [ -74.941806, 40.85196 ], "pop" : 2303, "state" : "NJ" } +{ "_id" : "07840", "city" : "HACKETTSTOWN", "loc" : [ -74.834315, 40.852891 ], "pop" : 23440, "state" : "NJ" } +{ "_id" : "07843", "city" : "HOPATCONG", "loc" : [ -74.66163, 40.938983 ], "pop" : 11920, "state" : "NJ" } +{ "_id" : "07847", "city" : "KENVIL", "loc" : [ -74.62098400000001, 40.881901 ], "pop" : 1356, "state" : "NJ" } +{ "_id" : "07848", "city" : "LAFAYETTE", "loc" : [ -74.69122299999999, 41.076099 ], "pop" : 2992, "state" : "NJ" } +{ "_id" : "07849", "city" : "LAKE HOPATCONG", "loc" : [ -74.61443800000001, 40.965882 ], "pop" : 7241, "state" : "NJ" } +{ "_id" : "07850", "city" : "LANDING", "loc" : [ -74.65542499999999, 40.908684 ], "pop" : 6482, "state" : "NJ" } +{ "_id" : "07851", "city" : "LAYTON", "loc" : [ -74.81721899999999, 41.205913 ], "pop" : 807, "state" : "NJ" } +{ "_id" : "07852", "city" : "LEDGEWOOD", "loc" : [ -74.655405, 40.878028 ], "pop" : 997, "state" : "NJ" } +{ "_id" : "07853", "city" : "LONG VALLEY", "loc" : [ -74.78698, 40.787817 ], "pop" : 12345, "state" : "NJ" } +{ "_id" : "07856", "city" : "MOUNT ARLINGTON", "loc" : [ -74.636331, 40.928267 ], "pop" : 2240, "state" : "NJ" } +{ "_id" : "07857", "city" : "NETCONG", "loc" : [ -74.698454, 40.898497 ], "pop" : 3330, "state" : "NJ" } +{ "_id" : "07860", "city" : "FREDON TOWNSHIP", "loc" : [ -74.780191, 41.058275 ], "pop" : 25022, "state" : "NJ" } +{ "_id" : "07863", "city" : "OXFORD", "loc" : [ -75.00194, 40.810537 ], "pop" : 2610, "state" : "NJ" } +{ "_id" : "07865", "city" : "PORT MURRAY", "loc" : [ -74.91674999999999, 40.790615 ], "pop" : 2124, "state" : "NJ" } +{ "_id" : "07866", "city" : "ROCKAWAY", "loc" : [ -74.50937, 40.922916 ], "pop" : 20388, "state" : "NJ" } +{ "_id" : "07869", "city" : "RANDOLPH", "loc" : [ -74.572519, 40.845557 ], "pop" : 20870, "state" : "NJ" } +{ "_id" : "07871", "city" : "SPARTA", "loc" : [ -74.64070100000001, 41.027697 ], "pop" : 15324, "state" : "NJ" } +{ "_id" : "07874", "city" : "STANHOPE", "loc" : [ -74.70044, 40.921743 ], "pop" : 9375, "state" : "NJ" } +{ "_id" : "07876", "city" : "SUCCASUNNA", "loc" : [ -74.65360099999999, 40.85385 ], "pop" : 10640, "state" : "NJ" } +{ "_id" : "07881", "city" : "WALLPACK CENTER", "loc" : [ -74.91759500000001, 41.134332 ], "pop" : 67, "state" : "NJ" } +{ "_id" : "07882", "city" : "WASHINGTON", "loc" : [ -74.991361, 40.75818 ], "pop" : 13409, "state" : "NJ" } +{ "_id" : "07885", "city" : "WHARTON", "loc" : [ -74.58634000000001, 40.913883 ], "pop" : 7842, "state" : "NJ" } +{ "_id" : "07901", "city" : "SUMMIT", "loc" : [ -74.364159, 40.71494 ], "pop" : 20151, "state" : "NJ" } +{ "_id" : "07920", "city" : "BASKING RIDGE", "loc" : [ -74.560463, 40.678937 ], "pop" : 17810, "state" : "NJ" } +{ "_id" : "07921", "city" : "BEDMINSTER", "loc" : [ -74.643236, 40.657109 ], "pop" : 6515, "state" : "NJ" } +{ "_id" : "07922", "city" : "BERKELEY HEIGHTS", "loc" : [ -74.43459900000001, 40.67522 ], "pop" : 11155, "state" : "NJ" } +{ "_id" : "07924", "city" : "BERNARDSVILLE", "loc" : [ -74.57781199999999, 40.72251 ], "pop" : 6454, "state" : "NJ" } +{ "_id" : "07927", "city" : "CEDAR KNOLLS", "loc" : [ -74.456861, 40.822335 ], "pop" : 3449, "state" : "NJ" } +{ "_id" : "07928", "city" : "CHATHAM", "loc" : [ -74.401701, 40.730526 ], "pop" : 16708, "state" : "NJ" } +{ "_id" : "07930", "city" : "CHESTER", "loc" : [ -74.677649, 40.789193 ], "pop" : 6635, "state" : "NJ" } +{ "_id" : "07931", "city" : "FAR HILLS", "loc" : [ -74.653959, 40.704035 ], "pop" : 2728, "state" : "NJ" } +{ "_id" : "07932", "city" : "FLORHAM PARK", "loc" : [ -74.392819, 40.775701 ], "pop" : 8473, "state" : "NJ" } +{ "_id" : "07933", "city" : "GILLETTE", "loc" : [ -74.46813400000001, 40.687678 ], "pop" : 3296, "state" : "NJ" } +{ "_id" : "07934", "city" : "GLADSTONE", "loc" : [ -74.67065599999999, 40.721948 ], "pop" : 887, "state" : "NJ" } +{ "_id" : "07935", "city" : "GREEN VILLAGE", "loc" : [ -74.451685, 40.741618 ], "pop" : 893, "state" : "NJ" } +{ "_id" : "07936", "city" : "EAST HANOVER", "loc" : [ -74.36357, 40.819165 ], "pop" : 9904, "state" : "NJ" } +{ "_id" : "07940", "city" : "MADISON", "loc" : [ -74.417868, 40.759939 ], "pop" : 15960, "state" : "NJ" } +{ "_id" : "07945", "city" : "MENDHAM", "loc" : [ -74.60003500000001, 40.778919 ], "pop" : 7756, "state" : "NJ" } +{ "_id" : "07946", "city" : "MILLINGTON", "loc" : [ -74.518292, 40.672716 ], "pop" : 2506, "state" : "NJ" } +{ "_id" : "07950", "city" : "GREYSTONE PARK", "loc" : [ -74.479645, 40.843982 ], "pop" : 16528, "state" : "NJ" } +{ "_id" : "07960", "city" : "MORRISTOWN", "loc" : [ -74.48728800000001, 40.795236 ], "pop" : 38516, "state" : "NJ" } +{ "_id" : "07974", "city" : "NEW PROVIDENCE", "loc" : [ -74.40229100000001, 40.700403 ], "pop" : 11838, "state" : "NJ" } +{ "_id" : "07976", "city" : "NEW VERNON", "loc" : [ -74.484471, 40.734685 ], "pop" : 682, "state" : "NJ" } +{ "_id" : "07980", "city" : "STIRLING", "loc" : [ -74.49683, 40.677366 ], "pop" : 2355, "state" : "NJ" } +{ "_id" : "07981", "city" : "WHIPPANY", "loc" : [ -74.419971, 40.821862 ], "pop" : 7233, "state" : "NJ" } +{ "_id" : "08002", "city" : "CHERRY HILL", "loc" : [ -75.017538, 39.930808 ], "pop" : 21271, "state" : "NJ" } +{ "_id" : "08003", "city" : "CHERRY HILL", "loc" : [ -74.970568, 39.880453 ], "pop" : 29058, "state" : "NJ" } +{ "_id" : "08004", "city" : "WINSLOW", "loc" : [ -74.879368, 39.770909 ], "pop" : 14312, "state" : "NJ" } +{ "_id" : "08005", "city" : "BARNEGAT", "loc" : [ -74.246988, 39.755248 ], "pop" : 13036, "state" : "NJ" } +{ "_id" : "08007", "city" : "BARRINGTON", "loc" : [ -75.056361, 39.865062 ], "pop" : 5185, "state" : "NJ" } +{ "_id" : "08008", "city" : "HARVEY CEDARS", "loc" : [ -74.18903299999999, 39.636347 ], "pop" : 8647, "state" : "NJ" } +{ "_id" : "08009", "city" : "BERLIN", "loc" : [ -74.930808, 39.778839 ], "pop" : 14034, "state" : "NJ" } +{ "_id" : "08010", "city" : "BEVERLY", "loc" : [ -74.91136299999999, 40.056452 ], "pop" : 11361, "state" : "NJ" } +{ "_id" : "08012", "city" : "WASHINGTON", "loc" : [ -75.058747, 39.774104 ], "pop" : 35874, "state" : "NJ" } +{ "_id" : "08014", "city" : "BRIDGEPORT", "loc" : [ -75.34782, 39.801616 ], "pop" : 702, "state" : "NJ" } +{ "_id" : "08015", "city" : "BROWNS MILLS", "loc" : [ -74.565549, 39.95974 ], "pop" : 21735, "state" : "NJ" } +{ "_id" : "08016", "city" : "BURLINGTON", "loc" : [ -74.845353, 40.068015 ], "pop" : 25065, "state" : "NJ" } +{ "_id" : "08019", "city" : "CHATSWORTH", "loc" : [ -74.52561900000001, 39.801945 ], "pop" : 215, "state" : "NJ" } +{ "_id" : "08020", "city" : "CLARKSBORO", "loc" : [ -75.22365499999999, 39.799228 ], "pop" : 3169, "state" : "NJ" } +{ "_id" : "08021", "city" : "LAUREL SPRINGS", "loc" : [ -75.003997, 39.80703 ], "pop" : 48953, "state" : "NJ" } +{ "_id" : "08022", "city" : "COLUMBUS", "loc" : [ -74.68988, 40.064238 ], "pop" : 5709, "state" : "NJ" } +{ "_id" : "08026", "city" : "GIBBSBORO", "loc" : [ -74.970996, 39.836532 ], "pop" : 2383, "state" : "NJ" } +{ "_id" : "08027", "city" : "GIBBSTOWN", "loc" : [ -75.275128, 39.82314 ], "pop" : 5102, "state" : "NJ" } +{ "_id" : "08028", "city" : "GLASSBORO", "loc" : [ -75.11724700000001, 39.706823 ], "pop" : 15492, "state" : "NJ" } +{ "_id" : "08029", "city" : "GLENDORA", "loc" : [ -75.069744, 39.840376 ], "pop" : 5205, "state" : "NJ" } +{ "_id" : "08030", "city" : "GLOUCESTER CITY", "loc" : [ -75.116962, 39.891105 ], "pop" : 14454, "state" : "NJ" } +{ "_id" : "08031", "city" : "BELLMAWR", "loc" : [ -75.094368, 39.868878 ], "pop" : 12568, "state" : "NJ" } +{ "_id" : "08033", "city" : "HADDONFIELD", "loc" : [ -75.041726, 39.895449 ], "pop" : 17496, "state" : "NJ" } +{ "_id" : "08034", "city" : "CHERRY HILL", "loc" : [ -75.00076199999999, 39.9074 ], "pop" : 18836, "state" : "NJ" } +{ "_id" : "08035", "city" : "HADDON HEIGHTS", "loc" : [ -75.06639, 39.878832 ], "pop" : 8034, "state" : "NJ" } +{ "_id" : "08037", "city" : "BATSTO", "loc" : [ -74.790735, 39.638878 ], "pop" : 22484, "state" : "NJ" } +{ "_id" : "08041", "city" : "JOBSTOWN", "loc" : [ -74.68730499999999, 40.038698 ], "pop" : 115, "state" : "NJ" } +{ "_id" : "08043", "city" : "VOORHEES", "loc" : [ -74.964614, 39.850422 ], "pop" : 21308, "state" : "NJ" } +{ "_id" : "08045", "city" : "LAWNSIDE", "loc" : [ -75.03168100000001, 39.867601 ], "pop" : 2840, "state" : "NJ" } +{ "_id" : "08046", "city" : "WILLINGBORO", "loc" : [ -74.883482, 40.028959 ], "pop" : 36471, "state" : "NJ" } +{ "_id" : "08048", "city" : "LUMBERTON", "loc" : [ -74.806736, 39.96512 ], "pop" : 170, "state" : "NJ" } +{ "_id" : "08049", "city" : "MAGNOLIA", "loc" : [ -75.039254, 39.853807 ], "pop" : 5931, "state" : "NJ" } +{ "_id" : "08050", "city" : "MANAHAWKIN", "loc" : [ -74.260391, 39.705017 ], "pop" : 12188, "state" : "NJ" } +{ "_id" : "08051", "city" : "MANTUA", "loc" : [ -75.17853100000001, 39.786983 ], "pop" : 8080, "state" : "NJ" } +{ "_id" : "08052", "city" : "MAPLE SHADE", "loc" : [ -74.99464399999999, 39.951085 ], "pop" : 19365, "state" : "NJ" } +{ "_id" : "08053", "city" : "MARLTON", "loc" : [ -74.90674, 39.884517 ], "pop" : 33299, "state" : "NJ" } +{ "_id" : "08054", "city" : "MOUNT LAUREL", "loc" : [ -74.903588, 39.947808 ], "pop" : 29805, "state" : "NJ" } +{ "_id" : "08055", "city" : "MEDFORD LAKES", "loc" : [ -74.823384, 39.868099 ], "pop" : 25033, "state" : "NJ" } +{ "_id" : "08056", "city" : "MICKLETON", "loc" : [ -75.24977699999999, 39.785653 ], "pop" : 1850, "state" : "NJ" } +{ "_id" : "08057", "city" : "MOORESTOWN", "loc" : [ -74.953323, 39.9683 ], "pop" : 16092, "state" : "NJ" } +{ "_id" : "08059", "city" : "MOUNT EPHRAIM", "loc" : [ -75.09289, 39.882749 ], "pop" : 5267, "state" : "NJ" } +{ "_id" : "08060", "city" : "EASTAMPTON TWP", "loc" : [ -74.79552200000001, 39.993028 ], "pop" : 31606, "state" : "NJ" } +{ "_id" : "08061", "city" : "MOUNT ROYAL", "loc" : [ -75.208153, 39.809741 ], "pop" : 239, "state" : "NJ" } +{ "_id" : "08062", "city" : "MULLICA HILL", "loc" : [ -75.20654, 39.725228 ], "pop" : 8720, "state" : "NJ" } +{ "_id" : "08063", "city" : "NATIONAL PARK", "loc" : [ -75.17939699999999, 39.866412 ], "pop" : 3398, "state" : "NJ" } +{ "_id" : "08065", "city" : "PALMYRA", "loc" : [ -75.025685, 40.003654 ], "pop" : 6916, "state" : "NJ" } +{ "_id" : "08066", "city" : "PAULSBORO", "loc" : [ -75.224233, 39.831157 ], "pop" : 10269, "state" : "NJ" } +{ "_id" : "08067", "city" : "PEDRICKTOWN", "loc" : [ -75.412046, 39.743451 ], "pop" : 1565, "state" : "NJ" } +{ "_id" : "08068", "city" : "PEMBERTON", "loc" : [ -74.66762900000001, 39.971206 ], "pop" : 11000, "state" : "NJ" } +{ "_id" : "08069", "city" : "CARNEYS POINT", "loc" : [ -75.46562299999999, 39.717938 ], "pop" : 14138, "state" : "NJ" } +{ "_id" : "08070", "city" : "PENNSVILLE", "loc" : [ -75.51553, 39.649107 ], "pop" : 12717, "state" : "NJ" } +{ "_id" : "08071", "city" : "PITMAN", "loc" : [ -75.129679, 39.731162 ], "pop" : 9697, "state" : "NJ" } +{ "_id" : "08075", "city" : "DELANCO", "loc" : [ -74.95612800000001, 40.024684 ], "pop" : 24468, "state" : "NJ" } +{ "_id" : "08077", "city" : "CINNAMINSON", "loc" : [ -74.995141, 39.996393 ], "pop" : 17498, "state" : "NJ" } +{ "_id" : "08078", "city" : "RUNNEMEDE", "loc" : [ -75.074224, 39.850825 ], "pop" : 8589, "state" : "NJ" } +{ "_id" : "08079", "city" : "SALEM", "loc" : [ -75.452096, 39.559124 ], "pop" : 14129, "state" : "NJ" } +{ "_id" : "08080", "city" : "SEWELL", "loc" : [ -75.08985199999999, 39.747345 ], "pop" : 23121, "state" : "NJ" } +{ "_id" : "08081", "city" : "SICKLERVILLE", "loc" : [ -74.986385, 39.735385 ], "pop" : 29949, "state" : "NJ" } +{ "_id" : "08083", "city" : "SOMERDALE", "loc" : [ -75.030913, 39.839988 ], "pop" : 11913, "state" : "NJ" } +{ "_id" : "08084", "city" : "STRATFORD", "loc" : [ -75.014707, 39.828798 ], "pop" : 7217, "state" : "NJ" } +{ "_id" : "08085", "city" : "SWEDESBORO", "loc" : [ -75.336202, 39.752853 ], "pop" : 7968, "state" : "NJ" } +{ "_id" : "08086", "city" : "THOROFARE", "loc" : [ -75.176698, 39.859178 ], "pop" : 3395, "state" : "NJ" } +{ "_id" : "08087", "city" : "TUCKERTON", "loc" : [ -74.364586, 39.588149 ], "pop" : 17728, "state" : "NJ" } +{ "_id" : "08088", "city" : "SOUTHAMPTON", "loc" : [ -74.71102500000001, 39.867631 ], "pop" : 25480, "state" : "NJ" } +{ "_id" : "08089", "city" : "WATERFORD WORKS", "loc" : [ -74.860933, 39.721512 ], "pop" : 4344, "state" : "NJ" } +{ "_id" : "08090", "city" : "WENONAH", "loc" : [ -75.153644, 39.799283 ], "pop" : 9129, "state" : "NJ" } +{ "_id" : "08091", "city" : "WEST BERLIN", "loc" : [ -74.941678, 39.81959 ], "pop" : 5244, "state" : "NJ" } +{ "_id" : "08092", "city" : "WEST CREEK", "loc" : [ -74.28850799999999, 39.662665 ], "pop" : 2502, "state" : "NJ" } +{ "_id" : "08093", "city" : "WESTVILLE", "loc" : [ -75.132278, 39.860494 ], "pop" : 9696, "state" : "NJ" } +{ "_id" : "08094", "city" : "WILLIAMSTOWN", "loc" : [ -74.97102700000001, 39.665006 ], "pop" : 30978, "state" : "NJ" } +{ "_id" : "08096", "city" : "DEPTFORD", "loc" : [ -75.13796600000001, 39.829477 ], "pop" : 34147, "state" : "NJ" } +{ "_id" : "08097", "city" : "WOODBURY HEIGHTS", "loc" : [ -75.15297200000001, 39.814162 ], "pop" : 3625, "state" : "NJ" } +{ "_id" : "08098", "city" : "WOODSTOWN", "loc" : [ -75.324806, 39.645663 ], "pop" : 8013, "state" : "NJ" } +{ "_id" : "08102", "city" : "CAMDEN", "loc" : [ -75.118644, 39.951244 ], "pop" : 10107, "state" : "NJ" } +{ "_id" : "08103", "city" : "CAMDEN", "loc" : [ -75.11170799999999, 39.935099 ], "pop" : 17818, "state" : "NJ" } +{ "_id" : "08104", "city" : "CAMDEN", "loc" : [ -75.10783499999999, 39.918575 ], "pop" : 26375, "state" : "NJ" } +{ "_id" : "08105", "city" : "CAMDEN", "loc" : [ -75.086382, 39.948417 ], "pop" : 34450, "state" : "NJ" } +{ "_id" : "08106", "city" : "AUDUBON", "loc" : [ -75.072425, 39.891035 ], "pop" : 10355, "state" : "NJ" } +{ "_id" : "08107", "city" : "OAKLYN", "loc" : [ -75.08489, 39.90799 ], "pop" : 14161, "state" : "NJ" } +{ "_id" : "08108", "city" : "COLLINGSWOOD", "loc" : [ -75.063383, 39.915682 ], "pop" : 18125, "state" : "NJ" } +{ "_id" : "08109", "city" : "MERCHANTVILLE", "loc" : [ -75.048204, 39.95193 ], "pop" : 22294, "state" : "NJ" } +{ "_id" : "08110", "city" : "DELAIR", "loc" : [ -75.063446, 39.962742 ], "pop" : 15447, "state" : "NJ" } +{ "_id" : "08201", "city" : "SMITHVILLE", "loc" : [ -74.503106, 39.462368 ], "pop" : 26645, "state" : "NJ" } +{ "_id" : "08202", "city" : "AVALON", "loc" : [ -74.72617700000001, 39.095095 ], "pop" : 1813, "state" : "NJ" } +{ "_id" : "08203", "city" : "BRIGANTINE", "loc" : [ -74.377644, 39.403709 ], "pop" : 9388, "state" : "NJ" } +{ "_id" : "08204", "city" : "NORTH CAPE MAY", "loc" : [ -74.92624000000001, 38.969208 ], "pop" : 18084, "state" : "NJ" } +{ "_id" : "08210", "city" : "CAPE MAY COURT H", "loc" : [ -74.826846, 39.101434 ], "pop" : 13521, "state" : "NJ" } +{ "_id" : "08215", "city" : "EGG HARBOR CITY", "loc" : [ -74.617709, 39.533123 ], "pop" : 10362, "state" : "NJ" } +{ "_id" : "08221", "city" : "LINWOOD", "loc" : [ -74.580744, 39.346883 ], "pop" : 9353, "state" : "NJ" } +{ "_id" : "08223", "city" : "MARMORA", "loc" : [ -74.659297, 39.258562 ], "pop" : 4420, "state" : "NJ" } +{ "_id" : "08225", "city" : "NORTHFIELD", "loc" : [ -74.55523700000001, 39.370256 ], "pop" : 7503, "state" : "NJ" } +{ "_id" : "08226", "city" : "OCEAN CITY", "loc" : [ -74.587514, 39.270894 ], "pop" : 15512, "state" : "NJ" } +{ "_id" : "08230", "city" : "OCEAN VIEW", "loc" : [ -74.707548, 39.215425 ], "pop" : 4443, "state" : "NJ" } +{ "_id" : "08232", "city" : "PLEASANTVILLE", "loc" : [ -74.55236499999999, 39.401518 ], "pop" : 30292, "state" : "NJ" } +{ "_id" : "08241", "city" : "PORT REPUBLIC", "loc" : [ -74.490263, 39.527196 ], "pop" : 992, "state" : "NJ" } +{ "_id" : "08242", "city" : "RIO GRANDE", "loc" : [ -74.875642, 39.019583 ], "pop" : 2943, "state" : "NJ" } +{ "_id" : "08243", "city" : "TOWNSENDS INLET", "loc" : [ -74.701432, 39.144929 ], "pop" : 2675, "state" : "NJ" } +{ "_id" : "08244", "city" : "SOMERS POINT", "loc" : [ -74.600796, 39.322308 ], "pop" : 11227, "state" : "NJ" } +{ "_id" : "08247", "city" : "STONE HARBOR", "loc" : [ -74.762049, 39.053338 ], "pop" : 1076, "state" : "NJ" } +{ "_id" : "08248", "city" : "STRATHMERE", "loc" : [ -74.655446, 39.199246 ], "pop" : 163, "state" : "NJ" } +{ "_id" : "08251", "city" : "VILLAS", "loc" : [ -74.935396, 39.021943 ], "pop" : 9308, "state" : "NJ" } +{ "_id" : "08260", "city" : "NORTH WILDWOOD", "loc" : [ -74.819096, 38.989901 ], "pop" : 14194, "state" : "NJ" } +{ "_id" : "08270", "city" : "CORBIN CITY", "loc" : [ -74.802628, 39.248915 ], "pop" : 7370, "state" : "NJ" } +{ "_id" : "08302", "city" : "SEABROOK", "loc" : [ -75.22672799999999, 39.445294 ], "pop" : 45485, "state" : "NJ" } +{ "_id" : "08310", "city" : "BUENA", "loc" : [ -74.889495, 39.536988 ], "pop" : 1501, "state" : "NJ" } +{ "_id" : "08311", "city" : "CEDARVILLE", "loc" : [ -75.19936199999999, 39.337028 ], "pop" : 1521, "state" : "NJ" } +{ "_id" : "08312", "city" : "CLAYTON", "loc" : [ -75.094188, 39.658969 ], "pop" : 6584, "state" : "NJ" } +{ "_id" : "08314", "city" : "DELMONT", "loc" : [ -74.970505, 39.202258 ], "pop" : 135, "state" : "NJ" } +{ "_id" : "08317", "city" : "DOROTHY", "loc" : [ -74.831577, 39.40313 ], "pop" : 1018, "state" : "NJ" } +{ "_id" : "08318", "city" : "ELMER", "loc" : [ -75.163023, 39.569146 ], "pop" : 8050, "state" : "NJ" } +{ "_id" : "08319", "city" : "ESTELL MANOR", "loc" : [ -74.816512, 39.37825 ], "pop" : 1130, "state" : "NJ" } +{ "_id" : "08322", "city" : "FRANKLINVILLE", "loc" : [ -75.04088, 39.615557 ], "pop" : 10484, "state" : "NJ" } +{ "_id" : "08324", "city" : "HEISLERVILLE", "loc" : [ -74.993942, 39.245013 ], "pop" : 264, "state" : "NJ" } +{ "_id" : "08326", "city" : "LANDISVILLE", "loc" : [ -74.93768799999999, 39.523942 ], "pop" : 1915, "state" : "NJ" } +{ "_id" : "08327", "city" : "LEESBURG", "loc" : [ -75.001211, 39.238724 ], "pop" : 49, "state" : "NJ" } +{ "_id" : "08328", "city" : "MALAGA", "loc" : [ -75.058155, 39.575495 ], "pop" : 1348, "state" : "NJ" } +{ "_id" : "08330", "city" : "MAYS LANDING", "loc" : [ -74.69619, 39.432011 ], "pop" : 24487, "state" : "NJ" } +{ "_id" : "08332", "city" : "MILLVILLE", "loc" : [ -75.02931100000001, 39.367313 ], "pop" : 36591, "state" : "NJ" } +{ "_id" : "08340", "city" : "MILMAY", "loc" : [ -74.866671, 39.445078 ], "pop" : 463, "state" : "NJ" } +{ "_id" : "08341", "city" : "MINOTOLA", "loc" : [ -74.946685, 39.515512 ], "pop" : 1548, "state" : "NJ" } +{ "_id" : "08343", "city" : "MONROEVILLE", "loc" : [ -75.156848, 39.644224 ], "pop" : 5068, "state" : "NJ" } +{ "_id" : "08344", "city" : "NEWFIELD", "loc" : [ -75.027558, 39.555257 ], "pop" : 5363, "state" : "NJ" } +{ "_id" : "08345", "city" : "NEWPORT", "loc" : [ -75.17164699999999, 39.283205 ], "pop" : 1190, "state" : "NJ" } +{ "_id" : "08346", "city" : "NEWTONVILLE", "loc" : [ -74.859049, 39.564477 ], "pop" : 682, "state" : "NJ" } +{ "_id" : "08349", "city" : "PORT NORRIS", "loc" : [ -75.050608, 39.256263 ], "pop" : 2726, "state" : "NJ" } +{ "_id" : "08350", "city" : "RICHLAND", "loc" : [ -74.87761500000001, 39.485048 ], "pop" : 1046, "state" : "NJ" } +{ "_id" : "08360", "city" : "VINELAND", "loc" : [ -75.00908699999999, 39.48177 ], "pop" : 56319, "state" : "NJ" } +{ "_id" : "08401", "city" : "ATLANTIC CITY", "loc" : [ -74.431727, 39.366411 ], "pop" : 31907, "state" : "NJ" } +{ "_id" : "08402", "city" : "MARGATE CITY", "loc" : [ -74.509038, 39.328621 ], "pop" : 9484, "state" : "NJ" } +{ "_id" : "08403", "city" : "LONGPORT", "loc" : [ -74.542143, 39.309712 ], "pop" : 318, "state" : "NJ" } +{ "_id" : "08406", "city" : "VENTNOR CITY", "loc" : [ -74.472343, 39.345992 ], "pop" : 19050, "state" : "NJ" } +{ "_id" : "08501", "city" : "ALLENTOWN", "loc" : [ -74.59093, 40.158922 ], "pop" : 4041, "state" : "NJ" } +{ "_id" : "08502", "city" : "BELLE MEAD", "loc" : [ -74.62899299999999, 40.467732 ], "pop" : 12677, "state" : "NJ" } +{ "_id" : "08505", "city" : "BORDENTOWN", "loc" : [ -74.703249, 40.143141 ], "pop" : 12835, "state" : "NJ" } +{ "_id" : "08510", "city" : "CLARKSBURG", "loc" : [ -74.434387, 40.199751 ], "pop" : 3364, "state" : "NJ" } +{ "_id" : "08511", "city" : "COOKSTOWN", "loc" : [ -74.559524, 40.048109 ], "pop" : 262, "state" : "NJ" } +{ "_id" : "08512", "city" : "CRANBURY", "loc" : [ -74.506531, 40.303868 ], "pop" : 13743, "state" : "NJ" } +{ "_id" : "08514", "city" : "CREAMRIDGE", "loc" : [ -74.499425, 40.127907 ], "pop" : 3522, "state" : "NJ" } +{ "_id" : "08515", "city" : "CROSSWICKS", "loc" : [ -74.666838, 40.158353 ], "pop" : 1700, "state" : "NJ" } +{ "_id" : "08518", "city" : "FLORENCE", "loc" : [ -74.805515, 40.118025 ], "pop" : 5091, "state" : "NJ" } +{ "_id" : "08520", "city" : "HIGHTSTOWN", "loc" : [ -74.52499299999999, 40.266885 ], "pop" : 25674, "state" : "NJ" } +{ "_id" : "08525", "city" : "HOPEWELL", "loc" : [ -74.77096299999999, 40.390224 ], "pop" : 3858, "state" : "NJ" } +{ "_id" : "08526", "city" : "IMLAYSTOWN", "loc" : [ -74.51093899999999, 40.166215 ], "pop" : 17, "state" : "NJ" } +{ "_id" : "08527", "city" : "JACKSON", "loc" : [ -74.301709, 40.120964 ], "pop" : 33075, "state" : "NJ" } +{ "_id" : "08528", "city" : "KINGSTON", "loc" : [ -74.61607100000001, 40.380465 ], "pop" : 160, "state" : "NJ" } +{ "_id" : "08530", "city" : "LAMBERTVILLE", "loc" : [ -74.926605, 40.373122 ], "pop" : 6466, "state" : "NJ" } +{ "_id" : "08533", "city" : "NEW EGYPT", "loc" : [ -74.506721, 40.071343 ], "pop" : 4601, "state" : "NJ" } +{ "_id" : "08534", "city" : "PENNINGTON", "loc" : [ -74.794352, 40.333858 ], "pop" : 7690, "state" : "NJ" } +{ "_id" : "08535", "city" : "PERRINEVILLE", "loc" : [ -74.440381, 40.214971 ], "pop" : 329, "state" : "NJ" } +{ "_id" : "08536", "city" : "PLAINSBORO", "loc" : [ -74.568836, 40.332432 ], "pop" : 13008, "state" : "NJ" } +{ "_id" : "08540", "city" : "PRINCETON", "loc" : [ -74.640832, 40.366633 ], "pop" : 33831, "state" : "NJ" } +{ "_id" : "08542", "city" : "PRINCETON", "loc" : [ -74.659378, 40.353545 ], "pop" : 2675, "state" : "NJ" } +{ "_id" : "08544", "city" : "PRINCETON UNIVER", "loc" : [ -74.65754, 40.346029 ], "pop" : 4227, "state" : "NJ" } +{ "_id" : "08550", "city" : "PRINCETON JUNCTI", "loc" : [ -74.61459600000001, 40.297684 ], "pop" : 5807, "state" : "NJ" } +{ "_id" : "08551", "city" : "RINGOES", "loc" : [ -74.828839, 40.44587 ], "pop" : 5106, "state" : "NJ" } +{ "_id" : "08553", "city" : "ROCKY HILL", "loc" : [ -74.64004199999999, 40.400985 ], "pop" : 693, "state" : "NJ" } +{ "_id" : "08554", "city" : "ROEBLING", "loc" : [ -74.777224, 40.115352 ], "pop" : 3826, "state" : "NJ" } +{ "_id" : "08556", "city" : "ROSEMONT", "loc" : [ -74.991928, 40.422005 ], "pop" : 42, "state" : "NJ" } +{ "_id" : "08558", "city" : "SKILLMAN", "loc" : [ -74.693828, 40.417312 ], "pop" : 3935, "state" : "NJ" } +{ "_id" : "08559", "city" : "STOCKTON", "loc" : [ -74.95541900000001, 40.43974 ], "pop" : 6090, "state" : "NJ" } +{ "_id" : "08560", "city" : "TITUSVILLE", "loc" : [ -74.865469, 40.307728 ], "pop" : 3354, "state" : "NJ" } +{ "_id" : "08562", "city" : "WRIGHTSTOWN", "loc" : [ -74.573098, 40.071953 ], "pop" : 3116, "state" : "NJ" } +{ "_id" : "08608", "city" : "TRENTON", "loc" : [ -74.762237, 40.220437 ], "pop" : 827, "state" : "NJ" } +{ "_id" : "08609", "city" : "HAMILTON", "loc" : [ -74.742598, 40.223338 ], "pop" : 15904, "state" : "NJ" } +{ "_id" : "08610", "city" : "HAMILTON", "loc" : [ -74.71720500000001, 40.19894 ], "pop" : 29852, "state" : "NJ" } +{ "_id" : "08611", "city" : "HAMILTON", "loc" : [ -74.751997, 40.207297 ], "pop" : 25084, "state" : "NJ" } +{ "_id" : "08618", "city" : "TRENTON", "loc" : [ -74.782062, 40.237687 ], "pop" : 40280, "state" : "NJ" } +{ "_id" : "08619", "city" : "MERCERVILLE", "loc" : [ -74.690377, 40.241977 ], "pop" : 23627, "state" : "NJ" } +{ "_id" : "08620", "city" : "YARDVILLE", "loc" : [ -74.671699, 40.178477 ], "pop" : 12373, "state" : "NJ" } +{ "_id" : "08628", "city" : "WEST TRENTON", "loc" : [ -74.82618600000001, 40.267232 ], "pop" : 8335, "state" : "NJ" } +{ "_id" : "08629", "city" : "HAMILTON", "loc" : [ -74.732764, 40.219843 ], "pop" : 10670, "state" : "NJ" } +{ "_id" : "08638", "city" : "TRENTON", "loc" : [ -74.762699, 40.251006 ], "pop" : 26982, "state" : "NJ" } +{ "_id" : "08640", "city" : "FORT DIX", "loc" : [ -74.618296, 40.009946 ], "pop" : 10101, "state" : "NJ" } +{ "_id" : "08641", "city" : "MC GUIRE AFB", "loc" : [ -74.588195, 40.044026 ], "pop" : 9971, "state" : "NJ" } +{ "_id" : "08648", "city" : "LAWRENCEVILLE", "loc" : [ -74.723956, 40.277646 ], "pop" : 25497, "state" : "NJ" } +{ "_id" : "08690", "city" : "HAMILTON", "loc" : [ -74.659138, 40.223852 ], "pop" : 21547, "state" : "NJ" } +{ "_id" : "08691", "city" : "HAMILTON", "loc" : [ -74.606262, 40.231785 ], "pop" : 6524, "state" : "NJ" } +{ "_id" : "08701", "city" : "LAKEWOOD", "loc" : [ -74.204199, 40.085043 ], "pop" : 47458, "state" : "NJ" } +{ "_id" : "08721", "city" : "BAYVILLE", "loc" : [ -74.190529, 39.914708 ], "pop" : 18991, "state" : "NJ" } +{ "_id" : "08722", "city" : "BEACHWOOD", "loc" : [ -74.196145, 39.930246 ], "pop" : 9324, "state" : "NJ" } +{ "_id" : "08723", "city" : "OSBORNSVILLE", "loc" : [ -74.12685999999999, 40.040817 ], "pop" : 28128, "state" : "NJ" } +{ "_id" : "08724", "city" : "BRICK", "loc" : [ -74.11523699999999, 40.087432 ], "pop" : 34507, "state" : "NJ" } +{ "_id" : "08730", "city" : "BRIELLE", "loc" : [ -74.06351100000001, 40.107727 ], "pop" : 4290, "state" : "NJ" } +{ "_id" : "08731", "city" : "FORKED RIVER", "loc" : [ -74.197301, 39.844425 ], "pop" : 16664, "state" : "NJ" } +{ "_id" : "08732", "city" : "ISLAND HEIGHTS", "loc" : [ -74.146787, 39.943197 ], "pop" : 1470, "state" : "NJ" } +{ "_id" : "08733", "city" : "LAKEHURST NAEC", "loc" : [ -74.29090100000001, 40.020054 ], "pop" : 14205, "state" : "NJ" } +{ "_id" : "08734", "city" : "LANOKA HARBOR", "loc" : [ -74.166765, 39.861993 ], "pop" : 5473, "state" : "NJ" } +{ "_id" : "08735", "city" : "LAVALLETTE", "loc" : [ -74.070424, 39.977486 ], "pop" : 3985, "state" : "NJ" } +{ "_id" : "08736", "city" : "MANASQUAN", "loc" : [ -74.061055, 40.121693 ], "pop" : 10341, "state" : "NJ" } +{ "_id" : "08738", "city" : "MANTOLOKING", "loc" : [ -74.05618800000001, 40.026125 ], "pop" : 1186, "state" : "NJ" } +{ "_id" : "08740", "city" : "OCEAN GATE", "loc" : [ -74.13512799999999, 39.925975 ], "pop" : 2028, "state" : "NJ" } +{ "_id" : "08741", "city" : "PINE BEACH", "loc" : [ -74.167992, 39.934746 ], "pop" : 2354, "state" : "NJ" } +{ "_id" : "08742", "city" : "BAY HEAD", "loc" : [ -74.065719, 40.080226 ], "pop" : 25071, "state" : "NJ" } +{ "_id" : "08750", "city" : "SEA GIRT", "loc" : [ -74.043604, 40.134522 ], "pop" : 3624, "state" : "NJ" } +{ "_id" : "08751", "city" : "SEASIDE HEIGHTS", "loc" : [ -74.07647900000001, 39.946639 ], "pop" : 4044, "state" : "NJ" } +{ "_id" : "08752", "city" : "SEASIDE PARK", "loc" : [ -74.079521, 39.922175 ], "pop" : 2369, "state" : "NJ" } +{ "_id" : "08753", "city" : "TOMS RIVER", "loc" : [ -74.156508, 39.977083 ], "pop" : 58001, "state" : "NJ" } +{ "_id" : "08755", "city" : "TOMS RIVER", "loc" : [ -74.222819, 39.999946 ], "pop" : 14892, "state" : "NJ" } +{ "_id" : "08757", "city" : "TOMS RIVER", "loc" : [ -74.25116800000001, 39.971471 ], "pop" : 29794, "state" : "NJ" } +{ "_id" : "08758", "city" : "WARETOWN", "loc" : [ -74.195376, 39.789646 ], "pop" : 4774, "state" : "NJ" } +{ "_id" : "08759", "city" : "WHITING", "loc" : [ -74.360713, 39.950983 ], "pop" : 16321, "state" : "NJ" } +{ "_id" : "08801", "city" : "ANNANDALE", "loc" : [ -74.88551200000001, 40.628731 ], "pop" : 6465, "state" : "NJ" } +{ "_id" : "08802", "city" : "PATTENBURG", "loc" : [ -75.01585, 40.650175 ], "pop" : 2176, "state" : "NJ" } +{ "_id" : "08804", "city" : "BLOOMSBURY", "loc" : [ -75.09663999999999, 40.64366 ], "pop" : 2111, "state" : "NJ" } +{ "_id" : "08805", "city" : "BOUND BROOK", "loc" : [ -74.53973499999999, 40.568115 ], "pop" : 11275, "state" : "NJ" } +{ "_id" : "08807", "city" : "BRIDGEWATER", "loc" : [ -74.626741, 40.590388 ], "pop" : 26496, "state" : "NJ" } +{ "_id" : "08809", "city" : "CLINTON", "loc" : [ -74.908846, 40.641194 ], "pop" : 2994, "state" : "NJ" } +{ "_id" : "08810", "city" : "DAYTON", "loc" : [ -74.51110199999999, 40.38249 ], "pop" : 6198, "state" : "NJ" } +{ "_id" : "08812", "city" : "GREEN BROOK", "loc" : [ -74.47187, 40.594237 ], "pop" : 10892, "state" : "NJ" } +{ "_id" : "08816", "city" : "EAST BRUNSWICK", "loc" : [ -74.406381, 40.428395 ], "pop" : 42319, "state" : "NJ" } +{ "_id" : "08817", "city" : "EDISON", "loc" : [ -74.39728599999999, 40.517079 ], "pop" : 41245, "state" : "NJ" } +{ "_id" : "08820", "city" : "EDISON", "loc" : [ -74.358863, 40.57804 ], "pop" : 33581, "state" : "NJ" } +{ "_id" : "08822", "city" : "FLEMINGTON", "loc" : [ -74.845316, 40.517976 ], "pop" : 23579, "state" : "NJ" } +{ "_id" : "08823", "city" : "FRANKLIN PARK", "loc" : [ -74.536908, 40.442097 ], "pop" : 154, "state" : "NJ" } +{ "_id" : "08824", "city" : "KENDALL PARK", "loc" : [ -74.552921, 40.4208 ], "pop" : 10272, "state" : "NJ" } +{ "_id" : "08825", "city" : "FRENCHTOWN", "loc" : [ -75.03246799999999, 40.520795 ], "pop" : 4383, "state" : "NJ" } +{ "_id" : "08826", "city" : "GLEN GARDNER", "loc" : [ -74.916207, 40.713437 ], "pop" : 5525, "state" : "NJ" } +{ "_id" : "08827", "city" : "HAMPTON", "loc" : [ -74.962221, 40.677351 ], "pop" : 4441, "state" : "NJ" } +{ "_id" : "08828", "city" : "HELMETTA", "loc" : [ -74.420393, 40.377742 ], "pop" : 1211, "state" : "NJ" } +{ "_id" : "08829", "city" : "HIGH BRIDGE", "loc" : [ -74.89366699999999, 40.668438 ], "pop" : 3886, "state" : "NJ" } +{ "_id" : "08830", "city" : "ISELIN", "loc" : [ -74.316677, 40.571593 ], "pop" : 16313, "state" : "NJ" } +{ "_id" : "08831", "city" : "JAMESBURG", "loc" : [ -74.43356799999999, 40.342475 ], "pop" : 15743, "state" : "NJ" } +{ "_id" : "08832", "city" : "KEASBEY", "loc" : [ -74.302119, 40.519171 ], "pop" : 2746, "state" : "NJ" } +{ "_id" : "08833", "city" : "LEBANON", "loc" : [ -74.829035, 40.646623 ], "pop" : 7270, "state" : "NJ" } +{ "_id" : "08835", "city" : "MANVILLE", "loc" : [ -74.593377, 40.539871 ], "pop" : 10419, "state" : "NJ" } +{ "_id" : "08836", "city" : "MARTINSVILLE", "loc" : [ -74.557191, 40.599962 ], "pop" : 3024, "state" : "NJ" } +{ "_id" : "08837", "city" : "EDISON", "loc" : [ -74.337503, 40.532476 ], "pop" : 9447, "state" : "NJ" } +{ "_id" : "08840", "city" : "METUCHEN", "loc" : [ -74.351721, 40.54493 ], "pop" : 20017, "state" : "NJ" } +{ "_id" : "08846", "city" : "MIDDLESEX", "loc" : [ -74.500835, 40.575882 ], "pop" : 13055, "state" : "NJ" } +{ "_id" : "08848", "city" : "MILFORD", "loc" : [ -75.102519, 40.592942 ], "pop" : 7586, "state" : "NJ" } +{ "_id" : "08850", "city" : "MILLTOWN", "loc" : [ -74.439046, 40.449346 ], "pop" : 8362, "state" : "NJ" } +{ "_id" : "08852", "city" : "MONMOUTH JUNCTIO", "loc" : [ -74.547021, 40.394391 ], "pop" : 6881, "state" : "NJ" } +{ "_id" : "08853", "city" : "NESHANIC STATION", "loc" : [ -74.71434000000001, 40.509551 ], "pop" : 9526, "state" : "NJ" } +{ "_id" : "08854", "city" : "PISCATAWAY", "loc" : [ -74.458996, 40.55152 ], "pop" : 47038, "state" : "NJ" } +{ "_id" : "08857", "city" : "OLD BRIDGE", "loc" : [ -74.323553, 40.398045 ], "pop" : 33884, "state" : "NJ" } +{ "_id" : "08859", "city" : "PARLIN", "loc" : [ -74.304981, 40.458701 ], "pop" : 20773, "state" : "NJ" } +{ "_id" : "08861", "city" : "PERTH AMBOY", "loc" : [ -74.27542699999999, 40.517551 ], "pop" : 43920, "state" : "NJ" } +{ "_id" : "08863", "city" : "FORDS", "loc" : [ -74.311707, 40.53925 ], "pop" : 13568, "state" : "NJ" } +{ "_id" : "08865", "city" : "ALPHA", "loc" : [ -75.1741, 40.692819 ], "pop" : 28782, "state" : "NJ" } +{ "_id" : "08867", "city" : "PITTSTOWN", "loc" : [ -74.957587, 40.599169 ], "pop" : 5635, "state" : "NJ" } +{ "_id" : "08869", "city" : "RARITAN", "loc" : [ -74.637691, 40.57109 ], "pop" : 6306, "state" : "NJ" } +{ "_id" : "08872", "city" : "SAYREVILLE", "loc" : [ -74.347808, 40.459958 ], "pop" : 14405, "state" : "NJ" } +{ "_id" : "08873", "city" : "SOMERSET", "loc" : [ -74.50126, 40.500743 ], "pop" : 36850, "state" : "NJ" } +{ "_id" : "08876", "city" : "NORTH BRANCH", "loc" : [ -74.645926, 40.549393 ], "pop" : 34212, "state" : "NJ" } +{ "_id" : "08879", "city" : "LAURENCE HARBOR", "loc" : [ -74.27863499999999, 40.464733 ], "pop" : 20993, "state" : "NJ" } +{ "_id" : "08880", "city" : "SOUTH BOUND BROO", "loc" : [ -74.529078, 40.552804 ], "pop" : 4330, "state" : "NJ" } +{ "_id" : "08882", "city" : "SOUTH RIVER", "loc" : [ -74.380099, 40.444363 ], "pop" : 13692, "state" : "NJ" } +{ "_id" : "08884", "city" : "SPOTSWOOD", "loc" : [ -74.389377, 40.384679 ], "pop" : 13444, "state" : "NJ" } +{ "_id" : "08886", "city" : "STEWARTSVILLE", "loc" : [ -75.082517, 40.695703 ], "pop" : 3582, "state" : "NJ" } +{ "_id" : "08887", "city" : "THREE BRIDGES", "loc" : [ -74.79980500000001, 40.52156 ], "pop" : 378, "state" : "NJ" } +{ "_id" : "08889", "city" : "WHITEHOUSE STATI", "loc" : [ -74.764129, 40.599872 ], "pop" : 8303, "state" : "NJ" } +{ "_id" : "08901", "city" : "NEW BRUNSWICK", "loc" : [ -74.448193, 40.489073 ], "pop" : 41710, "state" : "NJ" } +{ "_id" : "08902", "city" : "NORTH BRUNSWICK", "loc" : [ -74.482285, 40.453767 ], "pop" : 31071, "state" : "NJ" } +{ "_id" : "08904", "city" : "HIGHLAND PARK", "loc" : [ -74.426602, 40.499141 ], "pop" : 13165, "state" : "NJ" } +{ "_id" : "10001", "city" : "NEW YORK", "loc" : [ -73.99670500000001, 40.74838 ], "pop" : 18913, "state" : "NY" } +{ "_id" : "10002", "city" : "NEW YORK", "loc" : [ -73.98768099999999, 40.715231 ], "pop" : 84143, "state" : "NY" } +{ "_id" : "10003", "city" : "NEW YORK", "loc" : [ -73.989223, 40.731253 ], "pop" : 51224, "state" : "NY" } +{ "_id" : "10004", "city" : "GOVERNORS ISLAND", "loc" : [ -74.019025, 40.693604 ], "pop" : 3593, "state" : "NY" } +{ "_id" : "10005", "city" : "NEW YORK", "loc" : [ -74.00834399999999, 40.705649 ], "pop" : 202, "state" : "NY" } +{ "_id" : "10006", "city" : "NEW YORK", "loc" : [ -74.013474, 40.708451 ], "pop" : 119, "state" : "NY" } +{ "_id" : "10007", "city" : "NEW YORK", "loc" : [ -74.00702200000001, 40.713905 ], "pop" : 3374, "state" : "NY" } +{ "_id" : "10009", "city" : "NEW YORK", "loc" : [ -73.979591, 40.726188 ], "pop" : 57426, "state" : "NY" } +{ "_id" : "10010", "city" : "NEW YORK", "loc" : [ -73.981328, 40.737476 ], "pop" : 24907, "state" : "NY" } +{ "_id" : "10011", "city" : "NEW YORK", "loc" : [ -73.99963, 40.740225 ], "pop" : 46560, "state" : "NY" } +{ "_id" : "10012", "city" : "NEW YORK", "loc" : [ -73.998284, 40.72553 ], "pop" : 26365, "state" : "NY" } +{ "_id" : "10013", "city" : "NEW YORK", "loc" : [ -74.002529, 40.718511 ], "pop" : 21860, "state" : "NY" } +{ "_id" : "10014", "city" : "NEW YORK", "loc" : [ -74.005421, 40.73393 ], "pop" : 31147, "state" : "NY" } +{ "_id" : "10016", "city" : "NEW YORK", "loc" : [ -73.978134, 40.744281 ], "pop" : 51561, "state" : "NY" } +{ "_id" : "10017", "city" : "NEW YORK", "loc" : [ -73.97066100000001, 40.75172 ], "pop" : 12465, "state" : "NY" } +{ "_id" : "10018", "city" : "NEW YORK", "loc" : [ -73.992503, 40.754713 ], "pop" : 4834, "state" : "NY" } +{ "_id" : "10019", "city" : "NEW YORK", "loc" : [ -73.985834, 40.765069 ], "pop" : 36602, "state" : "NY" } +{ "_id" : "10020", "city" : "NEW YORK", "loc" : [ -73.982347, 40.759729 ], "pop" : 393, "state" : "NY" } +{ "_id" : "10021", "city" : "NEW YORK", "loc" : [ -73.958805, 40.768476 ], "pop" : 106564, "state" : "NY" } +{ "_id" : "10022", "city" : "NEW YORK", "loc" : [ -73.965703, 40.757091 ], "pop" : 31870, "state" : "NY" } +{ "_id" : "10023", "city" : "NEW YORK", "loc" : [ -73.982652, 40.77638 ], "pop" : 57385, "state" : "NY" } +{ "_id" : "10024", "city" : "NEW YORK", "loc" : [ -73.97638499999999, 40.786446 ], "pop" : 65141, "state" : "NY" } +{ "_id" : "10025", "city" : "NEW YORK", "loc" : [ -73.968312, 40.797466 ], "pop" : 100027, "state" : "NY" } +{ "_id" : "10026", "city" : "NEW YORK", "loc" : [ -73.953069, 40.801942 ], "pop" : 28453, "state" : "NY" } +{ "_id" : "10027", "city" : "NEW YORK", "loc" : [ -73.954978, 40.811556 ], "pop" : 54631, "state" : "NY" } +{ "_id" : "10028", "city" : "NEW YORK", "loc" : [ -73.952866, 40.776267 ], "pop" : 42757, "state" : "NY" } +{ "_id" : "10029", "city" : "NEW YORK", "loc" : [ -73.94475, 40.791817 ], "pop" : 74643, "state" : "NY" } +{ "_id" : "10030", "city" : "NEW YORK", "loc" : [ -73.94259700000001, 40.818333 ], "pop" : 21132, "state" : "NY" } +{ "_id" : "10031", "city" : "NEW YORK", "loc" : [ -73.950712, 40.82455 ], "pop" : 55989, "state" : "NY" } +{ "_id" : "10032", "city" : "NEW YORK", "loc" : [ -73.94197800000001, 40.83819 ], "pop" : 61332, "state" : "NY" } +{ "_id" : "10033", "city" : "NEW YORK", "loc" : [ -73.935649, 40.84955 ], "pop" : 58648, "state" : "NY" } +{ "_id" : "10034", "city" : "NEW YORK", "loc" : [ -73.922077, 40.866222 ], "pop" : 41131, "state" : "NY" } +{ "_id" : "10035", "city" : "NEW YORK", "loc" : [ -73.93709800000001, 40.801116 ], "pop" : 28099, "state" : "NY" } +{ "_id" : "10036", "city" : "NEW YORK", "loc" : [ -73.991826, 40.759724 ], "pop" : 16748, "state" : "NY" } +{ "_id" : "10037", "city" : "NEW YORK", "loc" : [ -73.93810000000001, 40.813491 ], "pop" : 14982, "state" : "NY" } +{ "_id" : "10038", "city" : "NEW YORK", "loc" : [ -74.00129800000001, 40.710092 ], "pop" : 14015, "state" : "NY" } +{ "_id" : "10039", "city" : "NEW YORK", "loc" : [ -73.938266, 40.826458 ], "pop" : 25293, "state" : "NY" } +{ "_id" : "10040", "city" : "NEW YORK", "loc" : [ -73.92960100000001, 40.858308 ], "pop" : 39780, "state" : "NY" } +{ "_id" : "10044", "city" : "NEW YORK", "loc" : [ -73.949136, 40.762998 ], "pop" : 8190, "state" : "NY" } +{ "_id" : "10128", "city" : "NEW YORK", "loc" : [ -73.95111199999999, 40.781618 ], "pop" : 52311, "state" : "NY" } +{ "_id" : "10280", "city" : "NEW YORK", "loc" : [ -74.016323, 40.710537 ], "pop" : 5574, "state" : "NY" } +{ "_id" : "10301", "city" : "STATEN ISLAND", "loc" : [ -74.092663, 40.631602 ], "pop" : 35314, "state" : "NY" } +{ "_id" : "10302", "city" : "STATEN ISLAND", "loc" : [ -74.137918, 40.630597 ], "pop" : 13369, "state" : "NY" } +{ "_id" : "10303", "city" : "STATEN ISLAND", "loc" : [ -74.160679, 40.630062 ], "pop" : 17695, "state" : "NY" } +{ "_id" : "10304", "city" : "STATEN ISLAND", "loc" : [ -74.087836, 40.610249 ], "pop" : 33028, "state" : "NY" } +{ "_id" : "10305", "city" : "STATEN ISLAND", "loc" : [ -74.076795, 40.597296 ], "pop" : 30513, "state" : "NY" } +{ "_id" : "10306", "city" : "STATEN ISLAND", "loc" : [ -74.118386, 40.568183 ], "pop" : 49849, "state" : "NY" } +{ "_id" : "10307", "city" : "STATEN ISLAND", "loc" : [ -74.244482, 40.508452 ], "pop" : 7627, "state" : "NY" } +{ "_id" : "10308", "city" : "STATEN ISLAND", "loc" : [ -74.152649, 40.55181 ], "pop" : 24947, "state" : "NY" } +{ "_id" : "10309", "city" : "STATEN ISLAND", "loc" : [ -74.211572, 40.535179 ], "pop" : 18651, "state" : "NY" } +{ "_id" : "10310", "city" : "STATEN ISLAND", "loc" : [ -74.11715, 40.632427 ], "pop" : 20282, "state" : "NY" } +{ "_id" : "10312", "city" : "STATEN ISLAND", "loc" : [ -74.179165, 40.545745 ], "pop" : 49584, "state" : "NY" } +{ "_id" : "10314", "city" : "STATEN ISLAND", "loc" : [ -74.147218, 40.603915 ], "pop" : 78118, "state" : "NY" } +{ "_id" : "10451", "city" : "BRONX", "loc" : [ -73.921735, 40.8222 ], "pop" : 42854, "state" : "NY" } +{ "_id" : "10452", "city" : "BRONX", "loc" : [ -73.921555, 40.837594 ], "pop" : 55890, "state" : "NY" } +{ "_id" : "10453", "city" : "BRONX", "loc" : [ -73.912937, 40.852047 ], "pop" : 70544, "state" : "NY" } +{ "_id" : "10454", "city" : "BRONX", "loc" : [ -73.919821, 40.808549 ], "pop" : 35994, "state" : "NY" } +{ "_id" : "10455", "city" : "BRONX", "loc" : [ -73.907172, 40.815309 ], "pop" : 31882, "state" : "NY" } +{ "_id" : "10456", "city" : "BRONX", "loc" : [ -73.909893, 40.831557 ], "pop" : 70157, "state" : "NY" } +{ "_id" : "10457", "city" : "BRONX", "loc" : [ -73.899907, 40.848635 ], "pop" : 62133, "state" : "NY" } +{ "_id" : "10458", "city" : "BRONX", "loc" : [ -73.889464, 40.863307 ], "pop" : 70612, "state" : "NY" } +{ "_id" : "10459", "city" : "BRONX", "loc" : [ -73.894047, 40.824699 ], "pop" : 30983, "state" : "NY" } +{ "_id" : "10460", "city" : "BRONX", "loc" : [ -73.879409, 40.840949 ], "pop" : 47250, "state" : "NY" } +{ "_id" : "10461", "city" : "BRONX", "loc" : [ -73.840953, 40.846506 ], "pop" : 45273, "state" : "NY" } +{ "_id" : "10462", "city" : "BRONX", "loc" : [ -73.860185, 40.843369 ], "pop" : 61478, "state" : "NY" } +{ "_id" : "10463", "city" : "BRONX", "loc" : [ -73.90673700000001, 40.879812 ], "pop" : 67435, "state" : "NY" } +{ "_id" : "10464", "city" : "BRONX", "loc" : [ -73.787436, 40.846941 ], "pop" : 4113, "state" : "NY" } +{ "_id" : "10465", "city" : "BRONX", "loc" : [ -73.819581, 40.826065 ], "pop" : 37457, "state" : "NY" } +{ "_id" : "10466", "city" : "BRONX", "loc" : [ -73.85033300000001, 40.890375 ], "pop" : 58394, "state" : "NY" } +{ "_id" : "10467", "city" : "BRONX", "loc" : [ -73.871242, 40.873671 ], "pop" : 85710, "state" : "NY" } +{ "_id" : "10468", "city" : "BRONX", "loc" : [ -73.90025900000001, 40.866231 ], "pop" : 65854, "state" : "NY" } +{ "_id" : "10469", "city" : "BRONX", "loc" : [ -73.849465, 40.870193 ], "pop" : 53962, "state" : "NY" } +{ "_id" : "10470", "city" : "BRONX", "loc" : [ -73.862194, 40.900029 ], "pop" : 13254, "state" : "NY" } +{ "_id" : "10471", "city" : "BRONX", "loc" : [ -73.905283, 40.901084 ], "pop" : 23348, "state" : "NY" } +{ "_id" : "10472", "city" : "BRONX", "loc" : [ -73.871557, 40.829464 ], "pop" : 61122, "state" : "NY" } +{ "_id" : "10473", "city" : "BRONX", "loc" : [ -73.860626, 40.819364 ], "pop" : 53981, "state" : "NY" } +{ "_id" : "10474", "city" : "BRONX", "loc" : [ -73.886376, 40.801518 ], "pop" : 22823, "state" : "NY" } +{ "_id" : "10475", "city" : "BRONX", "loc" : [ -73.827817, 40.872903 ], "pop" : 37045, "state" : "NY" } +{ "_id" : "10501", "city" : "AMAWALK", "loc" : [ -73.761079, 41.294618 ], "pop" : 745, "state" : "NY" } +{ "_id" : "10502", "city" : "ARDSLEY", "loc" : [ -73.841311, 41.011332 ], "pop" : 5529, "state" : "NY" } +{ "_id" : "10504", "city" : "ARMONK", "loc" : [ -73.700942, 41.136002 ], "pop" : 7077, "state" : "NY" } +{ "_id" : "10506", "city" : "BEDFORD", "loc" : [ -73.635548, 41.190913 ], "pop" : 4332, "state" : "NY" } +{ "_id" : "10507", "city" : "BEDFORD HILLS", "loc" : [ -73.691517, 41.234439 ], "pop" : 6161, "state" : "NY" } +{ "_id" : "10509", "city" : "BREWSTER", "loc" : [ -73.59917900000001, 41.409704 ], "pop" : 15852, "state" : "NY" } +{ "_id" : "10510", "city" : "BRIARCLIFF MANOR", "loc" : [ -73.83495600000001, 41.144364 ], "pop" : 8509, "state" : "NY" } +{ "_id" : "10511", "city" : "BUCHANAN", "loc" : [ -73.941238, 41.258285 ], "pop" : 2008, "state" : "NY" } +{ "_id" : "10512", "city" : "CARMEL", "loc" : [ -73.68152600000001, 41.443216 ], "pop" : 20716, "state" : "NY" } +{ "_id" : "10514", "city" : "CHAPPAQUA", "loc" : [ -73.771458, 41.170497 ], "pop" : 11097, "state" : "NY" } +{ "_id" : "10516", "city" : "COLD SPRING", "loc" : [ -73.933485, 41.44142 ], "pop" : 4904, "state" : "NY" } +{ "_id" : "10518", "city" : "CROSS RIVER", "loc" : [ -73.60202700000001, 41.27218 ], "pop" : 691, "state" : "NY" } +{ "_id" : "10520", "city" : "CROTON ON HUDSON", "loc" : [ -73.892408, 41.218037 ], "pop" : 12527, "state" : "NY" } +{ "_id" : "10522", "city" : "DOBBS FERRY", "loc" : [ -73.866494, 41.011835 ], "pop" : 9896, "state" : "NY" } +{ "_id" : "10523", "city" : "ELMSFORD", "loc" : [ -73.813597, 41.057171 ], "pop" : 6266, "state" : "NY" } +{ "_id" : "10524", "city" : "GARRISON", "loc" : [ -73.92000299999999, 41.362065 ], "pop" : 3572, "state" : "NY" } +{ "_id" : "10527", "city" : "GRANITE SPRINGS", "loc" : [ -73.75300799999999, 41.309791 ], "pop" : 963, "state" : "NY" } +{ "_id" : "10528", "city" : "HARRISON", "loc" : [ -73.718068, 40.971876 ], "pop" : 11601, "state" : "NY" } +{ "_id" : "10530", "city" : "HARTSDALE", "loc" : [ -73.80740400000001, 41.019658 ], "pop" : 13995, "state" : "NY" } +{ "_id" : "10532", "city" : "HAWTHORNE", "loc" : [ -73.80168500000001, 41.095316 ], "pop" : 7258, "state" : "NY" } +{ "_id" : "10533", "city" : "IRVINGTON", "loc" : [ -73.859666, 41.038113 ], "pop" : 7498, "state" : "NY" } +{ "_id" : "10535", "city" : "JEFFERSON VALLEY", "loc" : [ -73.794697, 41.338522 ], "pop" : 213, "state" : "NY" } +{ "_id" : "10536", "city" : "KATONAH", "loc" : [ -73.68411500000001, 41.270884 ], "pop" : 12263, "state" : "NY" } +{ "_id" : "10537", "city" : "LAKE PEEKSKILL", "loc" : [ -73.883787, 41.337437 ], "pop" : 1604, "state" : "NY" } +{ "_id" : "10538", "city" : "LARCHMONT", "loc" : [ -73.75715, 40.935055 ], "pop" : 16840, "state" : "NY" } +{ "_id" : "10541", "city" : "MAHOPAC", "loc" : [ -73.750755, 41.371708 ], "pop" : 23687, "state" : "NY" } +{ "_id" : "10543", "city" : "MAMARONECK", "loc" : [ -73.73503700000001, 40.952481 ], "pop" : 18193, "state" : "NY" } +{ "_id" : "10546", "city" : "MILLWOOD", "loc" : [ -73.792626, 41.201519 ], "pop" : 681, "state" : "NY" } +{ "_id" : "10547", "city" : "MOHEGAN LAKE", "loc" : [ -73.850836, 41.314348 ], "pop" : 5753, "state" : "NY" } +{ "_id" : "10548", "city" : "MONTROSE", "loc" : [ -73.944593, 41.249585 ], "pop" : 4350, "state" : "NY" } +{ "_id" : "10549", "city" : "MOUNT KISCO", "loc" : [ -73.729921, 41.204966 ], "pop" : 14361, "state" : "NY" } +{ "_id" : "10550", "city" : "MOUNT VERNON", "loc" : [ -73.83796100000001, 40.907863 ], "pop" : 37889, "state" : "NY" } +{ "_id" : "10552", "city" : "MOUNT VERNON", "loc" : [ -73.829919, 40.923056 ], "pop" : 18167, "state" : "NY" } +{ "_id" : "10553", "city" : "MOUNT VERNON", "loc" : [ -73.82211100000001, 40.908645 ], "pop" : 12452, "state" : "NY" } +{ "_id" : "10560", "city" : "NORTH SALEM", "loc" : [ -73.592947, 41.341388 ], "pop" : 2601, "state" : "NY" } +{ "_id" : "10562", "city" : "OSSINING", "loc" : [ -73.853791, 41.167344 ], "pop" : 29926, "state" : "NY" } +{ "_id" : "10566", "city" : "CORTLANDT MANOR", "loc" : [ -73.902562, 41.293722 ], "pop" : 37431, "state" : "NY" } +{ "_id" : "10570", "city" : "PLEASANTVILLE", "loc" : [ -73.78448400000001, 41.134977 ], "pop" : 11812, "state" : "NY" } +{ "_id" : "10573", "city" : "RYE BROOK", "loc" : [ -73.672045, 41.007755 ], "pop" : 32552, "state" : "NY" } +{ "_id" : "10576", "city" : "POUND RIDGE", "loc" : [ -73.573215, 41.204196 ], "pop" : 4720, "state" : "NY" } +{ "_id" : "10577", "city" : "PURCHASE", "loc" : [ -73.71562900000001, 41.038396 ], "pop" : 4453, "state" : "NY" } +{ "_id" : "10578", "city" : "PURDYS", "loc" : [ -73.654313, 41.322427 ], "pop" : 2534, "state" : "NY" } +{ "_id" : "10579", "city" : "PUTNAM VALLEY", "loc" : [ -73.85024, 41.372815 ], "pop" : 7453, "state" : "NY" } +{ "_id" : "10580", "city" : "RYE", "loc" : [ -73.690721, 40.973403 ], "pop" : 16479, "state" : "NY" } +{ "_id" : "10583", "city" : "HEATHCOTE", "loc" : [ -73.797566, 40.988365 ], "pop" : 35302, "state" : "NY" } +{ "_id" : "10588", "city" : "SHRUB OAK", "loc" : [ -73.82732, 41.328608 ], "pop" : 2103, "state" : "NY" } +{ "_id" : "10589", "city" : "SOMERS", "loc" : [ -73.695145, 41.334568 ], "pop" : 6618, "state" : "NY" } +{ "_id" : "10590", "city" : "SOUTH SALEM", "loc" : [ -73.54022399999999, 41.255261 ], "pop" : 6936, "state" : "NY" } +{ "_id" : "10591", "city" : "NORTH TARRYTOWN", "loc" : [ -73.859335, 41.078108 ], "pop" : 20080, "state" : "NY" } +{ "_id" : "10594", "city" : "THORNWOOD", "loc" : [ -73.773329, 41.118163 ], "pop" : 5455, "state" : "NY" } +{ "_id" : "10595", "city" : "VALHALLA", "loc" : [ -73.777596, 41.085559 ], "pop" : 5255, "state" : "NY" } +{ "_id" : "10597", "city" : "WACCABUC", "loc" : [ -73.603207, 41.303208 ], "pop" : 415, "state" : "NY" } +{ "_id" : "10598", "city" : "YORKTOWN HEIGHTS", "loc" : [ -73.79239800000001, 41.299947 ], "pop" : 28501, "state" : "NY" } +{ "_id" : "10601", "city" : "WHITE PLAINS", "loc" : [ -73.765231, 41.032955 ], "pop" : 8397, "state" : "NY" } +{ "_id" : "10603", "city" : "WHITE PLAINS", "loc" : [ -73.77758, 41.049913 ], "pop" : 14342, "state" : "NY" } +{ "_id" : "10604", "city" : "EAST WHITE PLAIN", "loc" : [ -73.750727, 41.043295 ], "pop" : 8899, "state" : "NY" } +{ "_id" : "10605", "city" : "WHITE PLAINS", "loc" : [ -73.755247, 41.014053 ], "pop" : 17843, "state" : "NY" } +{ "_id" : "10606", "city" : "WHITE PLAINS", "loc" : [ -73.778097, 41.024714 ], "pop" : 13436, "state" : "NY" } +{ "_id" : "10607", "city" : "WHITE PLAINS", "loc" : [ -73.81169199999999, 41.039813 ], "pop" : 7148, "state" : "NY" } +{ "_id" : "10701", "city" : "YONKERS", "loc" : [ -73.888317, 40.940716 ], "pop" : 59476, "state" : "NY" } +{ "_id" : "10703", "city" : "YONKERS", "loc" : [ -73.88516300000001, 40.951763 ], "pop" : 19958, "state" : "NY" } +{ "_id" : "10704", "city" : "YONKERS", "loc" : [ -73.859347, 40.917633 ], "pop" : 31604, "state" : "NY" } +{ "_id" : "10705", "city" : "YONKERS", "loc" : [ -73.89504100000001, 40.917665 ], "pop" : 36141, "state" : "NY" } +{ "_id" : "10706", "city" : "HASTINGS ON HUDS", "loc" : [ -73.875912, 40.99071 ], "pop" : 8546, "state" : "NY" } +{ "_id" : "10707", "city" : "TUCKAHOE", "loc" : [ -73.819771, 40.95691 ], "pop" : 15275, "state" : "NY" } +{ "_id" : "10708", "city" : "BRONXVILLE", "loc" : [ -73.83533199999999, 40.939133 ], "pop" : 20406, "state" : "NY" } +{ "_id" : "10709", "city" : "EASTCHESTER", "loc" : [ -73.80858000000001, 40.954966 ], "pop" : 2515, "state" : "NY" } +{ "_id" : "10710", "city" : "YONKERS", "loc" : [ -73.843435, 40.965574 ], "pop" : 24952, "state" : "NY" } +{ "_id" : "10801", "city" : "NEW ROCHELLE", "loc" : [ -73.787729, 40.916628 ], "pop" : 30929, "state" : "NY" } +{ "_id" : "10803", "city" : "PELHAM", "loc" : [ -73.807304, 40.904455 ], "pop" : 11997, "state" : "NY" } +{ "_id" : "10804", "city" : "NEW ROCHELLE", "loc" : [ -73.786018, 40.948335 ], "pop" : 14359, "state" : "NY" } +{ "_id" : "10805", "city" : "NEW ROCHELLE", "loc" : [ -73.781043, 40.900236 ], "pop" : 18471, "state" : "NY" } +{ "_id" : "10901", "city" : "SUFFERN", "loc" : [ -74.124098, 41.117654 ], "pop" : 21296, "state" : "NY" } +{ "_id" : "10911", "city" : "BEAR MOUNTAIN", "loc" : [ -73.99610800000001, 41.306734 ], "pop" : 14, "state" : "NY" } +{ "_id" : "10913", "city" : "BLAUVELT", "loc" : [ -73.962924, 41.062597 ], "pop" : 4770, "state" : "NY" } +{ "_id" : "10916", "city" : "CAMPBELL HALL", "loc" : [ -74.250466, 41.442993 ], "pop" : 3065, "state" : "NY" } +{ "_id" : "10917", "city" : "CENTRAL VALLEY", "loc" : [ -74.12203599999999, 41.326836 ], "pop" : 1407, "state" : "NY" } +{ "_id" : "10918", "city" : "CHESTER", "loc" : [ -74.26511600000001, 41.355381 ], "pop" : 9196, "state" : "NY" } +{ "_id" : "10919", "city" : "CIRCLEVILLE", "loc" : [ -74.38504399999999, 41.524387 ], "pop" : 79, "state" : "NY" } +{ "_id" : "10920", "city" : "CONGERS", "loc" : [ -73.94131, 41.148689 ], "pop" : 8088, "state" : "NY" } +{ "_id" : "10921", "city" : "FLORIDA", "loc" : [ -74.352805, 41.329507 ], "pop" : 2698, "state" : "NY" } +{ "_id" : "10923", "city" : "GARNERVILLE", "loc" : [ -74.000501, 41.202057 ], "pop" : 9650, "state" : "NY" } +{ "_id" : "10924", "city" : "GOSHEN", "loc" : [ -74.330162, 41.394586 ], "pop" : 11019, "state" : "NY" } +{ "_id" : "10925", "city" : "GREENWOOD LAKE", "loc" : [ -74.30000699999999, 41.212718 ], "pop" : 4723, "state" : "NY" } +{ "_id" : "10926", "city" : "HARRIMAN", "loc" : [ -74.155805, 41.299681 ], "pop" : 3249, "state" : "NY" } +{ "_id" : "10927", "city" : "HAVERSTRAW", "loc" : [ -73.968959, 41.197095 ], "pop" : 9438, "state" : "NY" } +{ "_id" : "10928", "city" : "HIGHLAND FALLS", "loc" : [ -73.97461800000001, 41.358177 ], "pop" : 5704, "state" : "NY" } +{ "_id" : "10930", "city" : "HIGHLAND MILLS", "loc" : [ -74.11967799999999, 41.353592 ], "pop" : 5629, "state" : "NY" } +{ "_id" : "10931", "city" : "HILLBURN", "loc" : [ -74.17019500000001, 41.123981 ], "pop" : 892, "state" : "NY" } +{ "_id" : "10940", "city" : "SCOTCHTOWN", "loc" : [ -74.412023, 41.457222 ], "pop" : 51211, "state" : "NY" } +{ "_id" : "10950", "city" : "MONROE", "loc" : [ -74.18852099999999, 41.328578 ], "pop" : 30829, "state" : "NY" } +{ "_id" : "10952", "city" : "MONSEY", "loc" : [ -74.0736, 41.116255 ], "pop" : 25251, "state" : "NY" } +{ "_id" : "10954", "city" : "BARDONIA", "loc" : [ -74.00958900000001, 41.099176 ], "pop" : 16390, "state" : "NY" } +{ "_id" : "10956", "city" : "NEW CITY", "loc" : [ -73.996206, 41.147247 ], "pop" : 33340, "state" : "NY" } +{ "_id" : "10958", "city" : "NEW HAMPTON", "loc" : [ -74.443483, 41.362714 ], "pop" : 3918, "state" : "NY" } +{ "_id" : "10960", "city" : "NYACK", "loc" : [ -73.92522599999999, 41.091351 ], "pop" : 14542, "state" : "NY" } +{ "_id" : "10962", "city" : "ORANGEBURG", "loc" : [ -73.96087300000001, 41.044183 ], "pop" : 6324, "state" : "NY" } +{ "_id" : "10963", "city" : "OTISVILLE", "loc" : [ -74.52941300000001, 41.481806 ], "pop" : 4748, "state" : "NY" } +{ "_id" : "10964", "city" : "PALISADES", "loc" : [ -73.92498500000001, 41.010263 ], "pop" : 996, "state" : "NY" } +{ "_id" : "10965", "city" : "PEARL RIVER", "loc" : [ -74.01587000000001, 41.062939 ], "pop" : 14791, "state" : "NY" } +{ "_id" : "10968", "city" : "PIERMONT", "loc" : [ -73.91918699999999, 41.03955 ], "pop" : 2104, "state" : "NY" } +{ "_id" : "10969", "city" : "PINE ISLAND", "loc" : [ -74.379457, 41.323796 ], "pop" : 589, "state" : "NY" } +{ "_id" : "10970", "city" : "POMONA", "loc" : [ -74.043564, 41.190105 ], "pop" : 7356, "state" : "NY" } +{ "_id" : "10973", "city" : "SLATE HILL", "loc" : [ -74.484658, 41.376004 ], "pop" : 2127, "state" : "NY" } +{ "_id" : "10974", "city" : "STERLINGTON", "loc" : [ -74.188107, 41.16047 ], "pop" : 3322, "state" : "NY" } +{ "_id" : "10975", "city" : "SOUTHFIELDS", "loc" : [ -74.176182, 41.247959 ], "pop" : 5, "state" : "NY" } +{ "_id" : "10976", "city" : "SPARKILL", "loc" : [ -73.92288000000001, 41.025573 ], "pop" : 894, "state" : "NY" } +{ "_id" : "10977", "city" : "CHESTNUT RIDGE", "loc" : [ -74.04625299999999, 41.117977 ], "pop" : 43435, "state" : "NY" } +{ "_id" : "10980", "city" : "STONY POINT", "loc" : [ -73.99616399999999, 41.229174 ], "pop" : 11437, "state" : "NY" } +{ "_id" : "10983", "city" : "TAPPAN", "loc" : [ -73.949065, 41.027751 ], "pop" : 6181, "state" : "NY" } +{ "_id" : "10984", "city" : "THIELLS", "loc" : [ -74.015441, 41.207826 ], "pop" : 3971, "state" : "NY" } +{ "_id" : "10985", "city" : "THOMPSON RIDGE", "loc" : [ -74.37744499999999, 41.580957 ], "pop" : 82, "state" : "NY" } +{ "_id" : "10986", "city" : "TOMKINS COVE", "loc" : [ -73.98916, 41.259763 ], "pop" : 1615, "state" : "NY" } +{ "_id" : "10987", "city" : "TUXEDO PARK", "loc" : [ -74.215912, 41.192486 ], "pop" : 2481, "state" : "NY" } +{ "_id" : "10989", "city" : "VALLEY COTTAGE", "loc" : [ -73.943006, 41.118338 ], "pop" : 9132, "state" : "NY" } +{ "_id" : "10990", "city" : "WARWICK", "loc" : [ -74.36037, 41.265563 ], "pop" : 16960, "state" : "NY" } +{ "_id" : "10992", "city" : "WASHINGTONVILLE", "loc" : [ -74.1601, 41.423701 ], "pop" : 8842, "state" : "NY" } +{ "_id" : "10993", "city" : "WEST HAVERSTRAW", "loc" : [ -73.982123, 41.209016 ], "pop" : 3591, "state" : "NY" } +{ "_id" : "10994", "city" : "WEST NYACK", "loc" : [ -73.97684599999999, 41.097324 ], "pop" : 6655, "state" : "NY" } +{ "_id" : "10996", "city" : "WEST POINT", "loc" : [ -73.97366599999999, 41.394545 ], "pop" : 7979, "state" : "NY" } +{ "_id" : "10998", "city" : "WESTTOWN", "loc" : [ -74.55294600000001, 41.321414 ], "pop" : 2097, "state" : "NY" } +{ "_id" : "11001", "city" : "FLORAL PARK", "loc" : [ -73.70576, 40.723586 ], "pop" : 26498, "state" : "NY" } +{ "_id" : "11003", "city" : "ALDEN MANOR", "loc" : [ -73.70575100000001, 40.699615 ], "pop" : 34741, "state" : "NY" } +{ "_id" : "11004", "city" : "GLEN OAKS", "loc" : [ -73.71143600000001, 40.7481 ], "pop" : 19058, "state" : "NY" } +{ "_id" : "11010", "city" : "FRANKLIN SQUARE", "loc" : [ -73.67580700000001, 40.701049 ], "pop" : 24595, "state" : "NY" } +{ "_id" : "11020", "city" : "GREAT NECK", "loc" : [ -73.718918, 40.774235 ], "pop" : 6144, "state" : "NY" } +{ "_id" : "11021", "city" : "GREAT NECK", "loc" : [ -73.726984, 40.786674 ], "pop" : 17198, "state" : "NY" } +{ "_id" : "11023", "city" : "GREAT NECK", "loc" : [ -73.734257, 40.799307 ], "pop" : 7981, "state" : "NY" } +{ "_id" : "11024", "city" : "KINGS POINT CONT", "loc" : [ -73.74139099999999, 40.813307 ], "pop" : 7298, "state" : "NY" } +{ "_id" : "11030", "city" : "PLANDOME", "loc" : [ -73.68836899999999, 40.798641 ], "pop" : 15271, "state" : "NY" } +{ "_id" : "11040", "city" : "HILLSIDE MANOR", "loc" : [ -73.68042, 40.743926 ], "pop" : 37695, "state" : "NY" } +{ "_id" : "11042", "city" : "NEW HYDE PARK", "loc" : [ -73.69497800000001, 40.7602 ], "pop" : 1, "state" : "NY" } +{ "_id" : "11050", "city" : "PORT WASHINGTON", "loc" : [ -73.69635599999999, 40.834995 ], "pop" : 28264, "state" : "NY" } +{ "_id" : "11101", "city" : "ASTORIA", "loc" : [ -73.939393, 40.750316 ], "pop" : 23142, "state" : "NY" } +{ "_id" : "11102", "city" : "ASTORIA", "loc" : [ -73.926462, 40.77063 ], "pop" : 30078, "state" : "NY" } +{ "_id" : "11103", "city" : "ASTORIA", "loc" : [ -73.914886, 40.762651 ], "pop" : 38597, "state" : "NY" } +{ "_id" : "11104", "city" : "SUNNYSIDE", "loc" : [ -73.921556, 40.743641 ], "pop" : 25898, "state" : "NY" } +{ "_id" : "11105", "city" : "ASTORIA", "loc" : [ -73.910965, 40.77627 ], "pop" : 37297, "state" : "NY" } +{ "_id" : "11106", "city" : "ASTORIA", "loc" : [ -73.92952699999999, 40.760813 ], "pop" : 36515, "state" : "NY" } +{ "_id" : "11201", "city" : "BROOKLYN", "loc" : [ -73.99034, 40.694021 ], "pop" : 46980, "state" : "NY" } +{ "_id" : "11203", "city" : "BROOKLYN", "loc" : [ -73.934888, 40.650496 ], "pop" : 80566, "state" : "NY" } +{ "_id" : "11204", "city" : "BROOKLYN", "loc" : [ -73.985623, 40.617871 ], "pop" : 64780, "state" : "NY" } +{ "_id" : "11205", "city" : "BROOKLYN", "loc" : [ -73.96662000000001, 40.692433 ], "pop" : 36852, "state" : "NY" } +{ "_id" : "11206", "city" : "BROOKLYN", "loc" : [ -73.943617, 40.701195 ], "pop" : 74825, "state" : "NY" } +{ "_id" : "11207", "city" : "BROOKLYN", "loc" : [ -73.893957, 40.670486 ], "pop" : 83158, "state" : "NY" } +{ "_id" : "11208", "city" : "BROOKLYN", "loc" : [ -73.873649, 40.676191 ], "pop" : 78322, "state" : "NY" } +{ "_id" : "11209", "city" : "BROOKLYN", "loc" : [ -74.030304, 40.625106 ], "pop" : 62346, "state" : "NY" } +{ "_id" : "11210", "city" : "BROOKLYN", "loc" : [ -73.946682, 40.628064 ], "pop" : 62445, "state" : "NY" } +{ "_id" : "11211", "city" : "BROOKLYN", "loc" : [ -73.956283, 40.709476 ], "pop" : 78338, "state" : "NY" } +{ "_id" : "11212", "city" : "BROOKLYN", "loc" : [ -73.914483, 40.662474 ], "pop" : 87079, "state" : "NY" } +{ "_id" : "11213", "city" : "BROOKLYN", "loc" : [ -73.93665, 40.669961 ], "pop" : 62607, "state" : "NY" } +{ "_id" : "11214", "city" : "BROOKLYN", "loc" : [ -73.99681, 40.601563 ], "pop" : 73076, "state" : "NY" } +{ "_id" : "11215", "city" : "BROOKLYN", "loc" : [ -73.982783, 40.666863 ], "pop" : 63338, "state" : "NY" } +{ "_id" : "11216", "city" : "BROOKLYN", "loc" : [ -73.949639, 40.67943 ], "pop" : 58862, "state" : "NY" } +{ "_id" : "11217", "city" : "BROOKLYN", "loc" : [ -73.979797, 40.68165 ], "pop" : 36232, "state" : "NY" } +{ "_id" : "11218", "city" : "BROOKLYN", "loc" : [ -73.97580600000001, 40.642373 ], "pop" : 66569, "state" : "NY" } +{ "_id" : "11219", "city" : "BROOKLYN", "loc" : [ -73.996011, 40.633568 ], "pop" : 73527, "state" : "NY" } +{ "_id" : "11220", "city" : "BROOKLYN", "loc" : [ -74.01328700000001, 40.641165 ], "pop" : 76923, "state" : "NY" } +{ "_id" : "11221", "city" : "BROOKLYN", "loc" : [ -73.927373, 40.690695 ], "pop" : 70583, "state" : "NY" } +{ "_id" : "11222", "city" : "BROOKLYN", "loc" : [ -73.94984599999999, 40.727164 ], "pop" : 38158, "state" : "NY" } +{ "_id" : "11223", "city" : "BROOKLYN", "loc" : [ -73.97429099999999, 40.597874 ], "pop" : 70904, "state" : "NY" } +{ "_id" : "11224", "city" : "BROOKLYN", "loc" : [ -73.988395, 40.576729 ], "pop" : 52480, "state" : "NY" } +{ "_id" : "11225", "city" : "BROOKLYN", "loc" : [ -73.954588, 40.662776 ], "pop" : 66752, "state" : "NY" } +{ "_id" : "11226", "city" : "BROOKLYN", "loc" : [ -73.956985, 40.646694 ], "pop" : 111396, "state" : "NY" } +{ "_id" : "11228", "city" : "BROOKLYN", "loc" : [ -74.012067, 40.617441 ], "pop" : 39220, "state" : "NY" } +{ "_id" : "11229", "city" : "BROOKLYN", "loc" : [ -73.94749, 40.601094 ], "pop" : 72660, "state" : "NY" } +{ "_id" : "11230", "city" : "BROOKLYN", "loc" : [ -73.965007, 40.622493 ], "pop" : 72733, "state" : "NY" } +{ "_id" : "11231", "city" : "BROOKLYN", "loc" : [ -74.00141000000001, 40.679437 ], "pop" : 32101, "state" : "NY" } +{ "_id" : "11232", "city" : "BROOKLYN", "loc" : [ -74.001797, 40.652113 ], "pop" : 22777, "state" : "NY" } +{ "_id" : "11233", "city" : "BROOKLYN", "loc" : [ -73.921104, 40.678415 ], "pop" : 58827, "state" : "NY" } +{ "_id" : "11234", "city" : "BROOKLYN", "loc" : [ -73.92391499999999, 40.620475 ], "pop" : 74953, "state" : "NY" } +{ "_id" : "11235", "city" : "BROOKLYN", "loc" : [ -73.953599, 40.583898 ], "pop" : 67088, "state" : "NY" } +{ "_id" : "11236", "city" : "BROOKLYN", "loc" : [ -73.902764, 40.640685 ], "pop" : 77253, "state" : "NY" } +{ "_id" : "11237", "city" : "BROOKLYN", "loc" : [ -73.917979, 40.700616 ], "pop" : 48339, "state" : "NY" } +{ "_id" : "11238", "city" : "BROOKLYN", "loc" : [ -73.964387, 40.679015 ], "pop" : 42507, "state" : "NY" } +{ "_id" : "11239", "city" : "BROOKLYN", "loc" : [ -73.882375, 40.649748 ], "pop" : 14948, "state" : "NY" } +{ "_id" : "11251", "city" : "BROOKLYN NAVY YA", "loc" : [ -73.966511, 40.703578 ], "pop" : 18, "state" : "NY" } +{ "_id" : "11354", "city" : "FLUSHING", "loc" : [ -73.82414199999999, 40.766722 ], "pop" : 51947, "state" : "NY" } +{ "_id" : "11355", "city" : "FLUSHING", "loc" : [ -73.822609, 40.753573 ], "pop" : 69164, "state" : "NY" } +{ "_id" : "11356", "city" : "COLLEGE POINT", "loc" : [ -73.844955, 40.785511 ], "pop" : 17723, "state" : "NY" } +{ "_id" : "11357", "city" : "WHITESTONE", "loc" : [ -73.809594, 40.785147 ], "pop" : 39093, "state" : "NY" } +{ "_id" : "11358", "city" : "FLUSHING", "loc" : [ -73.79678800000001, 40.760636 ], "pop" : 34045, "state" : "NY" } +{ "_id" : "11359", "city" : "FORT TOTTEN", "loc" : [ -73.777244, 40.789967 ], "pop" : 734, "state" : "NY" } +{ "_id" : "11360", "city" : "BAYSIDE", "loc" : [ -73.781216, 40.780684 ], "pop" : 20337, "state" : "NY" } +{ "_id" : "11361", "city" : "BAYSIDE", "loc" : [ -73.774457, 40.76268 ], "pop" : 25529, "state" : "NY" } +{ "_id" : "11362", "city" : "LITTLE NECK", "loc" : [ -73.73262200000001, 40.759131 ], "pop" : 16226, "state" : "NY" } +{ "_id" : "11363", "city" : "LITTLE NECK", "loc" : [ -73.745401, 40.772166 ], "pop" : 6909, "state" : "NY" } +{ "_id" : "11364", "city" : "FLUSHING", "loc" : [ -73.758646, 40.745847 ], "pop" : 32080, "state" : "NY" } +{ "_id" : "11365", "city" : "FRESH MEADOWS", "loc" : [ -73.79506000000001, 40.737424 ], "pop" : 34087, "state" : "NY" } +{ "_id" : "11366", "city" : "FRESH MEADOWS", "loc" : [ -73.794922, 40.727231 ], "pop" : 12089, "state" : "NY" } +{ "_id" : "11367", "city" : "FLUSHING", "loc" : [ -73.81953, 40.727966 ], "pop" : 36877, "state" : "NY" } +{ "_id" : "11368", "city" : "CORONA", "loc" : [ -73.861069, 40.745288 ], "pop" : 75746, "state" : "NY" } +{ "_id" : "11369", "city" : "EAST ELMHURST", "loc" : [ -73.873902, 40.761254 ], "pop" : 28106, "state" : "NY" } +{ "_id" : "11370", "city" : "EAST ELMHURST", "loc" : [ -73.891586, 40.761111 ], "pop" : 23910, "state" : "NY" } +{ "_id" : "11371", "city" : "FLUSHING", "loc" : [ -73.873535, 40.772117 ], "pop" : 49, "state" : "NY" } +{ "_id" : "11372", "city" : "JACKSON HEIGHTS", "loc" : [ -73.882975, 40.751329 ], "pop" : 57726, "state" : "NY" } +{ "_id" : "11373", "city" : "JACKSON HEIGHTS", "loc" : [ -73.878551, 40.740388 ], "pop" : 88241, "state" : "NY" } +{ "_id" : "11374", "city" : "REGO PARK", "loc" : [ -73.860191, 40.72775 ], "pop" : 40024, "state" : "NY" } +{ "_id" : "11375", "city" : "FOREST HILLS", "loc" : [ -73.847306, 40.722854 ], "pop" : 65180, "state" : "NY" } +{ "_id" : "11377", "city" : "WOODSIDE", "loc" : [ -73.90691099999999, 40.744972 ], "pop" : 75894, "state" : "NY" } +{ "_id" : "11378", "city" : "MASPETH", "loc" : [ -73.899682, 40.723865 ], "pop" : 31292, "state" : "NY" } +{ "_id" : "11379", "city" : "MIDDLE VILLAGE", "loc" : [ -73.879228, 40.717286 ], "pop" : 28981, "state" : "NY" } +{ "_id" : "11385", "city" : "RIDGEWOOD", "loc" : [ -73.89612200000001, 40.703613 ], "pop" : 85732, "state" : "NY" } +{ "_id" : "11411", "city" : "CAMBRIA HEIGHTS", "loc" : [ -73.73744499999999, 40.694741 ], "pop" : 20094, "state" : "NY" } +{ "_id" : "11412", "city" : "KEW GARDENS", "loc" : [ -73.758641, 40.698097 ], "pop" : 32003, "state" : "NY" } +{ "_id" : "11413", "city" : "SPRINGFIELD GARD", "loc" : [ -73.75071, 40.67295 ], "pop" : 36679, "state" : "NY" } +{ "_id" : "11414", "city" : "KEW GARDENS", "loc" : [ -73.84504099999999, 40.660603 ], "pop" : 27256, "state" : "NY" } +{ "_id" : "11415", "city" : "KEW GARDENS", "loc" : [ -73.82971499999999, 40.706865 ], "pop" : 16703, "state" : "NY" } +{ "_id" : "11416", "city" : "OZONE PARK", "loc" : [ -73.85139700000001, 40.683753 ], "pop" : 17876, "state" : "NY" } +{ "_id" : "11417", "city" : "OZONE PARK", "loc" : [ -73.84477800000001, 40.676854 ], "pop" : 22768, "state" : "NY" } +{ "_id" : "11418", "city" : "RICHMOND HILL", "loc" : [ -73.834484, 40.698171 ], "pop" : 29382, "state" : "NY" } +{ "_id" : "11419", "city" : "S RICHMOND HILL", "loc" : [ -73.823871, 40.688113 ], "pop" : 37530, "state" : "NY" } +{ "_id" : "11420", "city" : "S OZONE PARK", "loc" : [ -73.81577299999999, 40.675379 ], "pop" : 38096, "state" : "NY" } +{ "_id" : "11421", "city" : "WOODHAVEN", "loc" : [ -73.858514, 40.691345 ], "pop" : 29442, "state" : "NY" } +{ "_id" : "11422", "city" : "ROSEDALE", "loc" : [ -73.735265, 40.662141 ], "pop" : 26674, "state" : "NY" } +{ "_id" : "11423", "city" : "HOLLIS", "loc" : [ -73.767685, 40.714156 ], "pop" : 29102, "state" : "NY" } +{ "_id" : "11426", "city" : "BELLEROSE", "loc" : [ -73.723018, 40.734735 ], "pop" : 18145, "state" : "NY" } +{ "_id" : "11427", "city" : "QUEENS VILLAGE", "loc" : [ -73.748908, 40.727707 ], "pop" : 21004, "state" : "NY" } +{ "_id" : "11428", "city" : "QUEENS VILLAGE", "loc" : [ -73.743312, 40.720756 ], "pop" : 16793, "state" : "NY" } +{ "_id" : "11429", "city" : "QUEENS VILLAGE", "loc" : [ -73.740064, 40.70902 ], "pop" : 24311, "state" : "NY" } +{ "_id" : "11430", "city" : "JAMAICA", "loc" : [ -73.782663, 40.647221 ], "pop" : 398, "state" : "NY" } +{ "_id" : "11432", "city" : "JAMAICA", "loc" : [ -73.79442, 40.711867 ], "pop" : 53011, "state" : "NY" } +{ "_id" : "11433", "city" : "JAMAICA", "loc" : [ -73.78766899999999, 40.69691 ], "pop" : 26325, "state" : "NY" } +{ "_id" : "11434", "city" : "JAMAICA", "loc" : [ -73.77584, 40.677483 ], "pop" : 50464, "state" : "NY" } +{ "_id" : "11435", "city" : "JAMAICA", "loc" : [ -73.811121, 40.702934 ], "pop" : 47987, "state" : "NY" } +{ "_id" : "11436", "city" : "JAMAICA", "loc" : [ -73.79659599999999, 40.676347 ], "pop" : 17020, "state" : "NY" } +{ "_id" : "11501", "city" : "MINEOLA", "loc" : [ -73.63976099999999, 40.746927 ], "pop" : 19087, "state" : "NY" } +{ "_id" : "11507", "city" : "ALBERTSON", "loc" : [ -73.651419, 40.77032 ], "pop" : 7091, "state" : "NY" } +{ "_id" : "11509", "city" : "ATLANTIC BEACH", "loc" : [ -73.725545, 40.588652 ], "pop" : 2831, "state" : "NY" } +{ "_id" : "11510", "city" : "BALDWIN", "loc" : [ -73.60968800000001, 40.654755 ], "pop" : 30959, "state" : "NY" } +{ "_id" : "11514", "city" : "CARLE PLACE", "loc" : [ -73.611941, 40.75115 ], "pop" : 4863, "state" : "NY" } +{ "_id" : "11516", "city" : "CEDARHURST", "loc" : [ -73.726404, 40.623619 ], "pop" : 7113, "state" : "NY" } +{ "_id" : "11518", "city" : "EAST ROCKAWAY", "loc" : [ -73.667376, 40.640445 ], "pop" : 11027, "state" : "NY" } +{ "_id" : "11520", "city" : "FREEPORT", "loc" : [ -73.58661499999999, 40.65359 ], "pop" : 40662, "state" : "NY" } +{ "_id" : "11530", "city" : "GARDEN CITY", "loc" : [ -73.648718, 40.72452 ], "pop" : 27951, "state" : "NY" } +{ "_id" : "11542", "city" : "GLEN COVE", "loc" : [ -73.62772, 40.864958 ], "pop" : 24997, "state" : "NY" } +{ "_id" : "11545", "city" : "GLEN HEAD", "loc" : [ -73.60763, 40.828098 ], "pop" : 13565, "state" : "NY" } +{ "_id" : "11548", "city" : "GREENVALE", "loc" : [ -73.626124, 40.812503 ], "pop" : 1021, "state" : "NY" } +{ "_id" : "11550", "city" : "HEMPSTEAD", "loc" : [ -73.61764100000001, 40.70492 ], "pop" : 50933, "state" : "NY" } +{ "_id" : "11552", "city" : "WEST HEMPSTEAD", "loc" : [ -73.653859, 40.692915 ], "pop" : 22972, "state" : "NY" } +{ "_id" : "11553", "city" : "UNIONDALE", "loc" : [ -73.591995, 40.702029 ], "pop" : 20397, "state" : "NY" } +{ "_id" : "11554", "city" : "EAST MEADOW", "loc" : [ -73.556088, 40.714915 ], "pop" : 36692, "state" : "NY" } +{ "_id" : "11557", "city" : "HEWLETT", "loc" : [ -73.695667, 40.640392 ], "pop" : 8023, "state" : "NY" } +{ "_id" : "11558", "city" : "ISLAND PARK", "loc" : [ -73.655411, 40.604044 ], "pop" : 8857, "state" : "NY" } +{ "_id" : "11559", "city" : "LAWRENCE", "loc" : [ -73.732969, 40.61396 ], "pop" : 6703, "state" : "NY" } +{ "_id" : "11560", "city" : "LOCUST VALLEY", "loc" : [ -73.59271, 40.881728 ], "pop" : 6771, "state" : "NY" } +{ "_id" : "11561", "city" : "LONG BEACH", "loc" : [ -73.65946700000001, 40.587697 ], "pop" : 39066, "state" : "NY" } +{ "_id" : "11563", "city" : "LYNBROOK", "loc" : [ -73.674143, 40.657107 ], "pop" : 22659, "state" : "NY" } +{ "_id" : "11565", "city" : "MALVERNE", "loc" : [ -73.673073, 40.674982 ], "pop" : 8660, "state" : "NY" } +{ "_id" : "11566", "city" : "NORTH MERRICK", "loc" : [ -73.555001, 40.668312 ], "pop" : 36427, "state" : "NY" } +{ "_id" : "11568", "city" : "OLD WESTBURY", "loc" : [ -73.587515, 40.78821 ], "pop" : 5524, "state" : "NY" } +{ "_id" : "11570", "city" : "ROCKVILLE CENTRE", "loc" : [ -73.63800000000001, 40.663745 ], "pop" : 27127, "state" : "NY" } +{ "_id" : "11572", "city" : "OCEANSIDE", "loc" : [ -73.637533, 40.636199 ], "pop" : 31406, "state" : "NY" } +{ "_id" : "11575", "city" : "ROOSEVELT", "loc" : [ -73.586697, 40.680171 ], "pop" : 14595, "state" : "NY" } +{ "_id" : "11576", "city" : "ROSLYN", "loc" : [ -73.653362, 40.790668 ], "pop" : 13114, "state" : "NY" } +{ "_id" : "11577", "city" : "ROSLYN HEIGHTS", "loc" : [ -73.640292, 40.784497 ], "pop" : 10665, "state" : "NY" } +{ "_id" : "11579", "city" : "SEA CLIFF", "loc" : [ -73.643598, 40.845984 ], "pop" : 5068, "state" : "NY" } +{ "_id" : "11580", "city" : "VALLEY STREAM", "loc" : [ -73.705738, 40.674184 ], "pop" : 34327, "state" : "NY" } +{ "_id" : "11581", "city" : "NORTH WOODMERE", "loc" : [ -73.710705, 40.651838 ], "pop" : 19582, "state" : "NY" } +{ "_id" : "11590", "city" : "WESTBURY", "loc" : [ -73.57226, 40.755749 ], "pop" : 38026, "state" : "NY" } +{ "_id" : "11596", "city" : "WILLISTON PARK", "loc" : [ -73.644892, 40.759198 ], "pop" : 11057, "state" : "NY" } +{ "_id" : "11598", "city" : "WOODMERE", "loc" : [ -73.714146, 40.63262 ], "pop" : 13084, "state" : "NY" } +{ "_id" : "11691", "city" : "FAR ROCKAWAY", "loc" : [ -73.757971, 40.600645 ], "pop" : 52162, "state" : "NY" } +{ "_id" : "11692", "city" : "FAR ROCKAWAY", "loc" : [ -73.79744599999999, 40.59257 ], "pop" : 21192, "state" : "NY" } +{ "_id" : "11693", "city" : "FAR ROCKAWAY", "loc" : [ -73.819804, 40.607644 ], "pop" : 1630, "state" : "NY" } +{ "_id" : "11694", "city" : "FAR ROCKAWAY", "loc" : [ -73.839192, 40.579471 ], "pop" : 21972, "state" : "NY" } +{ "_id" : "11696", "city" : "INWOOD", "loc" : [ -73.746988, 40.617784 ], "pop" : 6660, "state" : "NY" } +{ "_id" : "11697", "city" : "FAR ROCKAWAY", "loc" : [ -73.914873, 40.560032 ], "pop" : 3690, "state" : "NY" } +{ "_id" : "11701", "city" : "AMITYVILLE", "loc" : [ -73.417106, 40.684197 ], "pop" : 29047, "state" : "NY" } +{ "_id" : "11702", "city" : "OAK BEACH", "loc" : [ -73.324583, 40.634183 ], "pop" : 456, "state" : "NY" } +{ "_id" : "11703", "city" : "NORTH BABYLON", "loc" : [ -73.323581, 40.732102 ], "pop" : 17916, "state" : "NY" } +{ "_id" : "11704", "city" : "WEST BABYLON", "loc" : [ -73.354591, 40.713476 ], "pop" : 45519, "state" : "NY" } +{ "_id" : "11705", "city" : "BAYPORT", "loc" : [ -73.05420700000001, 40.744408 ], "pop" : 7616, "state" : "NY" } +{ "_id" : "11706", "city" : "KISMET", "loc" : [ -73.252708, 40.733744 ], "pop" : 5507, "state" : "NY" } +{ "_id" : "11709", "city" : "BAYVILLE", "loc" : [ -73.560141, 40.907382 ], "pop" : 7185, "state" : "NY" } +{ "_id" : "11710", "city" : "NORTH BELLMORE", "loc" : [ -73.53451699999999, 40.677028 ], "pop" : 34237, "state" : "NY" } +{ "_id" : "11713", "city" : "BELLPORT", "loc" : [ -72.94689099999999, 40.77327 ], "pop" : 7927, "state" : "NY" } +{ "_id" : "11714", "city" : "BETHPAGE", "loc" : [ -73.485727, 40.740014 ], "pop" : 21957, "state" : "NY" } +{ "_id" : "11715", "city" : "BLUE POINT", "loc" : [ -73.035213, 40.750089 ], "pop" : 4189, "state" : "NY" } +{ "_id" : "11716", "city" : "BOHEMIA", "loc" : [ -73.116339, 40.767788 ], "pop" : 10448, "state" : "NY" } +{ "_id" : "11717", "city" : "WEST BRENTWOOD", "loc" : [ -73.248189, 40.777918 ], "pop" : 60425, "state" : "NY" } +{ "_id" : "11718", "city" : "BRIGHTWATERS", "loc" : [ -73.264639, 40.727957 ], "pop" : 20866, "state" : "NY" } +{ "_id" : "11719", "city" : "BROOKHAVEN", "loc" : [ -72.89212499999999, 40.78428 ], "pop" : 7493, "state" : "NY" } +{ "_id" : "11720", "city" : "CENTEREACH", "loc" : [ -73.08216299999999, 40.870508 ], "pop" : 27519, "state" : "NY" } +{ "_id" : "11721", "city" : "CENTERPORT", "loc" : [ -73.3754, 40.892899 ], "pop" : 5770, "state" : "NY" } +{ "_id" : "11722", "city" : "CENTRAL ISLIP", "loc" : [ -73.196145, 40.786618 ], "pop" : 29418, "state" : "NY" } +{ "_id" : "11724", "city" : "COLD SPRING HARB", "loc" : [ -73.45003199999999, 40.863056 ], "pop" : 2860, "state" : "NY" } +{ "_id" : "11725", "city" : "COMMACK", "loc" : [ -73.27992399999999, 40.843032 ], "pop" : 29847, "state" : "NY" } +{ "_id" : "11726", "city" : "COPIAGUE", "loc" : [ -73.396271, 40.677833 ], "pop" : 15640, "state" : "NY" } +{ "_id" : "11727", "city" : "CORAM", "loc" : [ -73.00688100000001, 40.884988 ], "pop" : 25002, "state" : "NY" } +{ "_id" : "11729", "city" : "DEER PARK", "loc" : [ -73.32572, 40.759083 ], "pop" : 32146, "state" : "NY" } +{ "_id" : "11730", "city" : "EAST ISLIP", "loc" : [ -73.180471, 40.72816 ], "pop" : 15777, "state" : "NY" } +{ "_id" : "11731", "city" : "ELWOOD", "loc" : [ -73.319506, 40.867066 ], "pop" : 30333, "state" : "NY" } +{ "_id" : "11732", "city" : "EAST NORWICH", "loc" : [ -73.534876, 40.847162 ], "pop" : 3276, "state" : "NY" } +{ "_id" : "11733", "city" : "SETAUKET", "loc" : [ -73.101467, 40.930004 ], "pop" : 16470, "state" : "NY" } +{ "_id" : "11735", "city" : "SOUTH FARMINGDAL", "loc" : [ -73.445055, 40.725061 ], "pop" : 31358, "state" : "NY" } +{ "_id" : "11738", "city" : "FARMINGVILLE", "loc" : [ -73.04125000000001, 40.836602 ], "pop" : 14967, "state" : "NY" } +{ "_id" : "11740", "city" : "GREENLAWN", "loc" : [ -73.36464100000001, 40.862121 ], "pop" : 9967, "state" : "NY" } +{ "_id" : "11741", "city" : "HOLBROOK", "loc" : [ -73.071789, 40.796426 ], "pop" : 25964, "state" : "NY" } +{ "_id" : "11742", "city" : "HOLTSVILLE", "loc" : [ -73.04161000000001, 40.810478 ], "pop" : 10141, "state" : "NY" } +{ "_id" : "11743", "city" : "HALESITE", "loc" : [ -73.41092399999999, 40.866945 ], "pop" : 41511, "state" : "NY" } +{ "_id" : "11746", "city" : "DIX HILLS", "loc" : [ -73.375472, 40.821754 ], "pop" : 62162, "state" : "NY" } +{ "_id" : "11747", "city" : "MELVILLE", "loc" : [ -73.402963, 40.794606 ], "pop" : 14534, "state" : "NY" } +{ "_id" : "11751", "city" : "ISLIP", "loc" : [ -73.22211, 40.734821 ], "pop" : 21721, "state" : "NY" } +{ "_id" : "11752", "city" : "ISLIP TERRACE", "loc" : [ -73.18274599999999, 40.75482 ], "pop" : 9514, "state" : "NY" } +{ "_id" : "11753", "city" : "JERICHO", "loc" : [ -73.533067, 40.788118 ], "pop" : 9837, "state" : "NY" } +{ "_id" : "11754", "city" : "KINGS PARK", "loc" : [ -73.243763, 40.886121 ], "pop" : 19036, "state" : "NY" } +{ "_id" : "11755", "city" : "LAKE GROVE", "loc" : [ -73.11675099999999, 40.856681 ], "pop" : 8245, "state" : "NY" } +{ "_id" : "11756", "city" : "LEVITTOWN", "loc" : [ -73.516578, 40.725428 ], "pop" : 44967, "state" : "NY" } +{ "_id" : "11757", "city" : "LINDENHURST", "loc" : [ -73.374493, 40.688373 ], "pop" : 44726, "state" : "NY" } +{ "_id" : "11758", "city" : "NORTH MASSAPEQUA", "loc" : [ -73.46972700000001, 40.685738 ], "pop" : 42863, "state" : "NY" } +{ "_id" : "11762", "city" : "MASSAPEQUA PARK", "loc" : [ -73.444447, 40.680673 ], "pop" : 31693, "state" : "NY" } +{ "_id" : "11763", "city" : "MEDFORD", "loc" : [ -72.985214, 40.817416 ], "pop" : 20669, "state" : "NY" } +{ "_id" : "11764", "city" : "MILLER PLACE", "loc" : [ -72.991349, 40.943572 ], "pop" : 9601, "state" : "NY" } +{ "_id" : "11765", "city" : "MILL NECK", "loc" : [ -73.55260199999999, 40.88574 ], "pop" : 877, "state" : "NY" } +{ "_id" : "11766", "city" : "MOUNT SINAI", "loc" : [ -73.012732, 40.927092 ], "pop" : 8759, "state" : "NY" } +{ "_id" : "11767", "city" : "NESCONSET", "loc" : [ -73.1482, 40.846206 ], "pop" : 9681, "state" : "NY" } +{ "_id" : "11768", "city" : "NORTHPORT", "loc" : [ -73.330889, 40.905062 ], "pop" : 21714, "state" : "NY" } +{ "_id" : "11769", "city" : "OAKDALE", "loc" : [ -73.12969, 40.738224 ], "pop" : 9366, "state" : "NY" } +{ "_id" : "11771", "city" : "OYSTER BAY", "loc" : [ -73.52721200000001, 40.866012 ], "pop" : 9806, "state" : "NY" } +{ "_id" : "11772", "city" : "DAVIS PARK", "loc" : [ -72.998108, 40.773501 ], "pop" : 40962, "state" : "NY" } +{ "_id" : "11776", "city" : "PORT JEFFERSON S", "loc" : [ -73.052136, 40.911722 ], "pop" : 19800, "state" : "NY" } +{ "_id" : "11777", "city" : "PORT JEFFERSON", "loc" : [ -73.061093, 40.945687 ], "pop" : 8512, "state" : "NY" } +{ "_id" : "11778", "city" : "ROCKY POINT", "loc" : [ -72.935681, 40.949206 ], "pop" : 11913, "state" : "NY" } +{ "_id" : "11779", "city" : "LAKE RONKONKOMA", "loc" : [ -73.1208, 40.820763 ], "pop" : 43424, "state" : "NY" } +{ "_id" : "11780", "city" : "SAINT JAMES", "loc" : [ -73.159121, 40.881299 ], "pop" : 14211, "state" : "NY" } +{ "_id" : "11782", "city" : "CHERRY GROVE", "loc" : [ -73.082297, 40.74606 ], "pop" : 15718, "state" : "NY" } +{ "_id" : "11783", "city" : "SEAFORD", "loc" : [ -73.491015, 40.679513 ], "pop" : 21644, "state" : "NY" } +{ "_id" : "11784", "city" : "SELDEN", "loc" : [ -73.044848, 40.869883 ], "pop" : 23753, "state" : "NY" } +{ "_id" : "11786", "city" : "SHOREHAM", "loc" : [ -72.892685, 40.948493 ], "pop" : 5114, "state" : "NY" } +{ "_id" : "11787", "city" : "SMITHTOWN", "loc" : [ -73.21381599999999, 40.854186 ], "pop" : 29932, "state" : "NY" } +{ "_id" : "11788", "city" : "HAUPPAUGE", "loc" : [ -73.195762, 40.823069 ], "pop" : 19713, "state" : "NY" } +{ "_id" : "11789", "city" : "SOUND BEACH", "loc" : [ -72.974172, 40.956707 ], "pop" : 6497, "state" : "NY" } +{ "_id" : "11790", "city" : "STONY BROOK", "loc" : [ -73.125085, 40.900257 ], "pop" : 13767, "state" : "NY" } +{ "_id" : "11791", "city" : "SYOSSET", "loc" : [ -73.502397, 40.81462 ], "pop" : 24949, "state" : "NY" } +{ "_id" : "11792", "city" : "WADING RIVER", "loc" : [ -72.834774, 40.952049 ], "pop" : 6186, "state" : "NY" } +{ "_id" : "11793", "city" : "WANTAGH", "loc" : [ -73.51033, 40.684998 ], "pop" : 31972, "state" : "NY" } +{ "_id" : "11794", "city" : "SUNY STONY BROOK", "loc" : [ -73.125456, 40.914127 ], "pop" : 5504, "state" : "NY" } +{ "_id" : "11795", "city" : "WEST ISLIP", "loc" : [ -73.30072, 40.711734 ], "pop" : 39344, "state" : "NY" } +{ "_id" : "11796", "city" : "WEST SAYVILLE", "loc" : [ -73.100019, 40.731971 ], "pop" : 3575, "state" : "NY" } +{ "_id" : "11797", "city" : "WOODBURY", "loc" : [ -73.47161199999999, 40.815441 ], "pop" : 8104, "state" : "NY" } +{ "_id" : "11798", "city" : "WHEATLEY HEIGHTS", "loc" : [ -73.36596, 40.753258 ], "pop" : 13312, "state" : "NY" } +{ "_id" : "11801", "city" : "HICKSVILLE", "loc" : [ -73.52297, 40.762305 ], "pop" : 38307, "state" : "NY" } +{ "_id" : "11803", "city" : "PLAINVIEW", "loc" : [ -73.481638, 40.778099 ], "pop" : 28207, "state" : "NY" } +{ "_id" : "11804", "city" : "OLD BETHPAGE", "loc" : [ -73.457481, 40.764991 ], "pop" : 5233, "state" : "NY" } +{ "_id" : "11901", "city" : "RIVERHEAD", "loc" : [ -72.651966, 40.926202 ], "pop" : 20705, "state" : "NY" } +{ "_id" : "11933", "city" : "CALVERTON", "loc" : [ -72.74229, 40.929662 ], "pop" : 3954, "state" : "NY" } +{ "_id" : "11934", "city" : "CENTER MORICHES", "loc" : [ -72.797048, 40.799657 ], "pop" : 6265, "state" : "NY" } +{ "_id" : "11935", "city" : "CUTCHOGUE", "loc" : [ -72.480255, 41.013918 ], "pop" : 3678, "state" : "NY" } +{ "_id" : "11937", "city" : "EAST HAMPTON", "loc" : [ -72.17895799999999, 40.992964 ], "pop" : 12205, "state" : "NY" } +{ "_id" : "11939", "city" : "EAST MARION", "loc" : [ -72.34186, 41.126425 ], "pop" : 717, "state" : "NY" } +{ "_id" : "11940", "city" : "EAST MORICHES", "loc" : [ -72.753778, 40.808975 ], "pop" : 3822, "state" : "NY" } +{ "_id" : "11941", "city" : "EASTPORT", "loc" : [ -72.705388, 40.809947 ], "pop" : 1331, "state" : "NY" } +{ "_id" : "11942", "city" : "EAST QUOGUE", "loc" : [ -72.58129700000001, 40.84277 ], "pop" : 4181, "state" : "NY" } +{ "_id" : "11944", "city" : "GREENPORT", "loc" : [ -72.36741499999999, 41.103905 ], "pop" : 3657, "state" : "NY" } +{ "_id" : "11946", "city" : "HAMPTON BAYS", "loc" : [ -72.52020899999999, 40.872596 ], "pop" : 9586, "state" : "NY" } +{ "_id" : "11948", "city" : "LAUREL", "loc" : [ -72.55404, 40.9674 ], "pop" : 954, "state" : "NY" } +{ "_id" : "11949", "city" : "MANORVILLE", "loc" : [ -72.800208, 40.842102 ], "pop" : 9660, "state" : "NY" } +{ "_id" : "11950", "city" : "MASTIC", "loc" : [ -72.85660799999999, 40.80644 ], "pop" : 20374, "state" : "NY" } +{ "_id" : "11951", "city" : "MASTIC BEACH", "loc" : [ -72.853701, 40.765653 ], "pop" : 18812, "state" : "NY" } +{ "_id" : "11952", "city" : "MATTITUCK", "loc" : [ -72.53629599999999, 40.994336 ], "pop" : 3896, "state" : "NY" } +{ "_id" : "11953", "city" : "MIDDLE ISLAND", "loc" : [ -72.952539, 40.878212 ], "pop" : 9411, "state" : "NY" } +{ "_id" : "11954", "city" : "MONTAUK", "loc" : [ -71.943963, 41.045853 ], "pop" : 3008, "state" : "NY" } +{ "_id" : "11955", "city" : "MORICHES", "loc" : [ -72.822918, 40.809502 ], "pop" : 2045, "state" : "NY" } +{ "_id" : "11957", "city" : "ORIENT", "loc" : [ -72.28789399999999, 41.143741 ], "pop" : 817, "state" : "NY" } +{ "_id" : "11961", "city" : "RIDGE", "loc" : [ -72.88813500000001, 40.901846 ], "pop" : 12817, "state" : "NY" } +{ "_id" : "11963", "city" : "SAG HARBOR", "loc" : [ -72.30674, 40.981996 ], "pop" : 7384, "state" : "NY" } +{ "_id" : "11964", "city" : "SHELTER ISLAND", "loc" : [ -72.33661600000001, 41.064046 ], "pop" : 1144, "state" : "NY" } +{ "_id" : "11965", "city" : "SHELTER ISLAND H", "loc" : [ -72.34808200000001, 41.074205 ], "pop" : 1119, "state" : "NY" } +{ "_id" : "11967", "city" : "SHIRLEY", "loc" : [ -72.876043, 40.743932 ], "pop" : 97, "state" : "NY" } +{ "_id" : "11968", "city" : "SOUTHAMPTON", "loc" : [ -72.41027099999999, 40.904341 ], "pop" : 10810, "state" : "NY" } +{ "_id" : "11971", "city" : "SOUTHOLD", "loc" : [ -72.429039, 41.05555 ], "pop" : 5788, "state" : "NY" } +{ "_id" : "11976", "city" : "WATER MILL", "loc" : [ -72.349069, 40.920929 ], "pop" : 1410, "state" : "NY" } +{ "_id" : "11977", "city" : "WESTHAMPTON", "loc" : [ -72.66993100000001, 40.818031 ], "pop" : 1306, "state" : "NY" } +{ "_id" : "11978", "city" : "WESTHAMPTON BEAC", "loc" : [ -72.644757, 40.822783 ], "pop" : 2863, "state" : "NY" } +{ "_id" : "11980", "city" : "YAPHANK", "loc" : [ -72.917435, 40.837037 ], "pop" : 5366, "state" : "NY" } +{ "_id" : "12007", "city" : "ALCOVE", "loc" : [ -74.034721, 42.453818 ], "pop" : 233, "state" : "NY" } +{ "_id" : "12008", "city" : "ALPLAUS", "loc" : [ -73.900188, 42.857329 ], "pop" : 340, "state" : "NY" } +{ "_id" : "12009", "city" : "ALTAMONT", "loc" : [ -74.019339, 42.70627 ], "pop" : 5683, "state" : "NY" } +{ "_id" : "12010", "city" : "WEST CHARLTON", "loc" : [ -74.18393, 42.948822 ], "pop" : 32028, "state" : "NY" } +{ "_id" : "12015", "city" : "ATHENS", "loc" : [ -73.815175, 42.2736 ], "pop" : 2538, "state" : "NY" } +{ "_id" : "12017", "city" : "AUSTERLITZ", "loc" : [ -73.454965, 42.322272 ], "pop" : 355, "state" : "NY" } +{ "_id" : "12018", "city" : "AVERILL PARK", "loc" : [ -73.550437, 42.636511 ], "pop" : 6528, "state" : "NY" } +{ "_id" : "12019", "city" : "BALLSTON LAKE", "loc" : [ -73.855171, 42.919176 ], "pop" : 16331, "state" : "NY" } +{ "_id" : "12020", "city" : "BALLSTON SPA", "loc" : [ -73.84858, 43.004956 ], "pop" : 25126, "state" : "NY" } +{ "_id" : "12022", "city" : "BERLIN", "loc" : [ -73.370186, 42.691893 ], "pop" : 275, "state" : "NY" } +{ "_id" : "12023", "city" : "BERNE", "loc" : [ -74.14657699999999, 42.610848 ], "pop" : 2293, "state" : "NY" } +{ "_id" : "12024", "city" : "BRAINARD", "loc" : [ -73.61587400000001, 42.405101 ], "pop" : 285, "state" : "NY" } +{ "_id" : "12025", "city" : "BROADALBIN", "loc" : [ -74.168367, 43.072687 ], "pop" : 4055, "state" : "NY" } +{ "_id" : "12027", "city" : "BURNT HILLS", "loc" : [ -73.89604300000001, 42.932902 ], "pop" : 945, "state" : "NY" } +{ "_id" : "12028", "city" : "BUSKIRK", "loc" : [ -73.44967699999999, 42.960134 ], "pop" : 1272, "state" : "NY" } +{ "_id" : "12029", "city" : "CANAAN", "loc" : [ -73.41588900000001, 42.413168 ], "pop" : 1298, "state" : "NY" } +{ "_id" : "12031", "city" : "CARLISLE", "loc" : [ -74.456284, 42.749754 ], "pop" : 420, "state" : "NY" } +{ "_id" : "12032", "city" : "CAROGA LAKE", "loc" : [ -74.516915, 43.192159 ], "pop" : 545, "state" : "NY" } +{ "_id" : "12033", "city" : "CASTLETON ON HUD", "loc" : [ -73.709529, 42.538243 ], "pop" : 7029, "state" : "NY" } +{ "_id" : "12035", "city" : "CENTRAL BRIDGE", "loc" : [ -74.345107, 42.73696 ], "pop" : 315, "state" : "NY" } +{ "_id" : "12036", "city" : "CHARLOTTEVILLE", "loc" : [ -74.68186300000001, 42.533034 ], "pop" : 166, "state" : "NY" } +{ "_id" : "12037", "city" : "CHATHAM", "loc" : [ -73.587281, 42.349578 ], "pop" : 4616, "state" : "NY" } +{ "_id" : "12041", "city" : "CLARKSVILLE", "loc" : [ -73.96877499999999, 42.566974 ], "pop" : 388, "state" : "NY" } +{ "_id" : "12042", "city" : "CLIMAX", "loc" : [ -73.862459, 42.370808 ], "pop" : 316, "state" : "NY" } +{ "_id" : "12043", "city" : "COBLESKILL", "loc" : [ -74.493866, 42.684047 ], "pop" : 7419, "state" : "NY" } +{ "_id" : "12046", "city" : "COEYMANS HOLLOW", "loc" : [ -73.920588, 42.486537 ], "pop" : 979, "state" : "NY" } +{ "_id" : "12047", "city" : "COHOES", "loc" : [ -73.712356, 42.775362 ], "pop" : 19033, "state" : "NY" } +{ "_id" : "12051", "city" : "COXSACKIE", "loc" : [ -73.819881, 42.350142 ], "pop" : 5615, "state" : "NY" } +{ "_id" : "12052", "city" : "CROPSEYVILLE", "loc" : [ -73.471869, 42.766718 ], "pop" : 1339, "state" : "NY" } +{ "_id" : "12053", "city" : "DELANSON", "loc" : [ -74.18680999999999, 42.74802 ], "pop" : 4476, "state" : "NY" } +{ "_id" : "12054", "city" : "DELMAR", "loc" : [ -73.837329, 42.61579 ], "pop" : 15502, "state" : "NY" } +{ "_id" : "12055", "city" : "DORMANSVILLE", "loc" : [ -74.198966, 42.437859 ], "pop" : 465, "state" : "NY" } +{ "_id" : "12056", "city" : "DUANESBURG", "loc" : [ -74.083911, 42.770839 ], "pop" : 2675, "state" : "NY" } +{ "_id" : "12057", "city" : "WHITE CREEK", "loc" : [ -73.351974, 42.961527 ], "pop" : 2252, "state" : "NY" } +{ "_id" : "12058", "city" : "EARLTON", "loc" : [ -73.906222, 42.352689 ], "pop" : 1015, "state" : "NY" } +{ "_id" : "12059", "city" : "EAST BERNE", "loc" : [ -74.055488, 42.61913 ], "pop" : 2224, "state" : "NY" } +{ "_id" : "12060", "city" : "EAST CHATHAM", "loc" : [ -73.49026000000001, 42.433028 ], "pop" : 1695, "state" : "NY" } +{ "_id" : "12061", "city" : "EAST GREENBUSH", "loc" : [ -73.682644, 42.595096 ], "pop" : 7282, "state" : "NY" } +{ "_id" : "12062", "city" : "EAST NASSAU", "loc" : [ -73.498407, 42.535215 ], "pop" : 2088, "state" : "NY" } +{ "_id" : "12064", "city" : "EAST WORCESTER", "loc" : [ -74.676348, 42.621423 ], "pop" : 322, "state" : "NY" } +{ "_id" : "12065", "city" : "CLIFTON PARK", "loc" : [ -73.785094, 42.849865 ], "pop" : 31352, "state" : "NY" } +{ "_id" : "12066", "city" : "ESPERANCE", "loc" : [ -74.288246, 42.771677 ], "pop" : 1254, "state" : "NY" } +{ "_id" : "12067", "city" : "FEURA BUSH", "loc" : [ -73.923743, 42.554998 ], "pop" : 1142, "state" : "NY" } +{ "_id" : "12068", "city" : "FONDA", "loc" : [ -74.402129, 42.957078 ], "pop" : 2307, "state" : "NY" } +{ "_id" : "12070", "city" : "FORT JOHNSON", "loc" : [ -74.248436, 42.976535 ], "pop" : 1811, "state" : "NY" } +{ "_id" : "12071", "city" : "FULTONHAM", "loc" : [ -74.38759, 42.585914 ], "pop" : 379, "state" : "NY" } +{ "_id" : "12072", "city" : "FULTONVILLE", "loc" : [ -74.359765, 42.903601 ], "pop" : 2356, "state" : "NY" } +{ "_id" : "12074", "city" : "GALWAY", "loc" : [ -74.029043, 43.021693 ], "pop" : 3988, "state" : "NY" } +{ "_id" : "12075", "city" : "GHENT", "loc" : [ -73.64864, 42.303637 ], "pop" : 2381, "state" : "NY" } +{ "_id" : "12076", "city" : "GILBOA", "loc" : [ -74.40027499999999, 42.410835 ], "pop" : 1400, "state" : "NY" } +{ "_id" : "12077", "city" : "GLENMONT", "loc" : [ -73.795884, 42.597147 ], "pop" : 4298, "state" : "NY" } +{ "_id" : "12078", "city" : "GLOVERSVILLE", "loc" : [ -74.337526, 43.061603 ], "pop" : 25292, "state" : "NY" } +{ "_id" : "12083", "city" : "GREENVILLE", "loc" : [ -74.022222, 42.411342 ], "pop" : 3645, "state" : "NY" } +{ "_id" : "12084", "city" : "GUILDERLAND", "loc" : [ -73.897454, 42.697273 ], "pop" : 4112, "state" : "NY" } +{ "_id" : "12086", "city" : "HAGAMAN", "loc" : [ -74.166764, 42.959715 ], "pop" : 114, "state" : "NY" } +{ "_id" : "12087", "city" : "HANNACROIX", "loc" : [ -73.86802900000001, 42.428533 ], "pop" : 1665, "state" : "NY" } +{ "_id" : "12090", "city" : "HOOSICK FALLS", "loc" : [ -73.35810499999999, 42.893712 ], "pop" : 5910, "state" : "NY" } +{ "_id" : "12092", "city" : "HOWES CAVE", "loc" : [ -74.364825, 42.704526 ], "pop" : 2351, "state" : "NY" } +{ "_id" : "12093", "city" : "JEFFERSON", "loc" : [ -74.611744, 42.499869 ], "pop" : 1353, "state" : "NY" } +{ "_id" : "12094", "city" : "JOHNSONVILLE", "loc" : [ -73.49889899999999, 42.876875 ], "pop" : 2010, "state" : "NY" } +{ "_id" : "12095", "city" : "JOHNSTOWN", "loc" : [ -74.37148999999999, 43.006923 ], "pop" : 13170, "state" : "NY" } +{ "_id" : "12106", "city" : "KINDERHOOK", "loc" : [ -73.718259, 42.376675 ], "pop" : 2795, "state" : "NY" } +{ "_id" : "12108", "city" : "LAKE PLEASANT", "loc" : [ -74.422563, 43.472543 ], "pop" : 487, "state" : "NY" } +{ "_id" : "12110", "city" : "LATHAM", "loc" : [ -73.762985, 42.74616 ], "pop" : 20091, "state" : "NY" } +{ "_id" : "12113", "city" : "LAWYERSVILLE", "loc" : [ -74.506969, 42.692682 ], "pop" : 91, "state" : "NY" } +{ "_id" : "12115", "city" : "MALDEN BRIDGE", "loc" : [ -73.587958, 42.460201 ], "pop" : 56, "state" : "NY" } +{ "_id" : "12116", "city" : "MARYLAND", "loc" : [ -74.90303299999999, 42.537075 ], "pop" : 871, "state" : "NY" } +{ "_id" : "12117", "city" : "MAYFIELD", "loc" : [ -74.24439700000001, 43.141133 ], "pop" : 3046, "state" : "NY" } +{ "_id" : "12118", "city" : "MECHANICVILLE", "loc" : [ -73.67317300000001, 42.967613 ], "pop" : 5890, "state" : "NY" } +{ "_id" : "12120", "city" : "MEDUSA", "loc" : [ -74.131524, 42.451504 ], "pop" : 617, "state" : "NY" } +{ "_id" : "12121", "city" : "MELROSE", "loc" : [ -73.60766700000001, 42.841163 ], "pop" : 1968, "state" : "NY" } +{ "_id" : "12122", "city" : "MIDDLEBURGH", "loc" : [ -74.329168, 42.563734 ], "pop" : 4005, "state" : "NY" } +{ "_id" : "12123", "city" : "NASSAU", "loc" : [ -73.61175299999999, 42.527141 ], "pop" : 5560, "state" : "NY" } +{ "_id" : "12125", "city" : "NEW LEBANON", "loc" : [ -73.377295, 42.475865 ], "pop" : 557, "state" : "NY" } +{ "_id" : "12130", "city" : "NIVERVILLE", "loc" : [ -73.485614, 42.927575 ], "pop" : 300, "state" : "NY" } +{ "_id" : "12131", "city" : "NORTH BLENHEIM", "loc" : [ -74.428174, 42.489938 ], "pop" : 50, "state" : "NY" } +{ "_id" : "12134", "city" : "EDINBURG", "loc" : [ -74.168361, 43.237126 ], "pop" : 3216, "state" : "NY" } +{ "_id" : "12135", "city" : "NORTON HILL", "loc" : [ -74.078945, 42.420014 ], "pop" : 163, "state" : "NY" } +{ "_id" : "12136", "city" : "OLD CHATHAM", "loc" : [ -73.55446999999999, 42.435692 ], "pop" : 1037, "state" : "NY" } +{ "_id" : "12137", "city" : "PATTERSONVILLE", "loc" : [ -74.123126, 42.84995 ], "pop" : 1423, "state" : "NY" } +{ "_id" : "12138", "city" : "TACONIC LAKE", "loc" : [ -73.371033, 42.736367 ], "pop" : 3891, "state" : "NY" } +{ "_id" : "12139", "city" : "PISECO", "loc" : [ -74.52628199999999, 43.448125 ], "pop" : 223, "state" : "NY" } +{ "_id" : "12140", "city" : "POESTENKILL", "loc" : [ -73.588846, 42.679548 ], "pop" : 1904, "state" : "NY" } +{ "_id" : "12143", "city" : "RAVENA", "loc" : [ -73.821991, 42.475371 ], "pop" : 5976, "state" : "NY" } +{ "_id" : "12144", "city" : "RENSSELAER", "loc" : [ -73.721895, 42.635855 ], "pop" : 19146, "state" : "NY" } +{ "_id" : "12147", "city" : "RENSSELAERVILLE", "loc" : [ -74.147431, 42.513288 ], "pop" : 547, "state" : "NY" } +{ "_id" : "12148", "city" : "REXFORD", "loc" : [ -73.87009999999999, 42.852411 ], "pop" : 2306, "state" : "NY" } +{ "_id" : "12149", "city" : "RICHMONDVILLE", "loc" : [ -74.571001, 42.642445 ], "pop" : 1502, "state" : "NY" } +{ "_id" : "12150", "city" : "ROTTERDAM JUNCTI", "loc" : [ -74.046857, 42.87296 ], "pop" : 1128, "state" : "NY" } +{ "_id" : "12151", "city" : "ROUND LAKE", "loc" : [ -73.770127, 42.925994 ], "pop" : 451, "state" : "NY" } +{ "_id" : "12153", "city" : "SAND LAKE", "loc" : [ -73.498949, 42.637912 ], "pop" : 851, "state" : "NY" } +{ "_id" : "12154", "city" : "SCHAGHTICOKE", "loc" : [ -73.61542799999999, 42.914356 ], "pop" : 3035, "state" : "NY" } +{ "_id" : "12155", "city" : "SCHENEVUS", "loc" : [ -74.814863, 42.59004 ], "pop" : 1895, "state" : "NY" } +{ "_id" : "12156", "city" : "SCHODACK LANDING", "loc" : [ -73.747996, 42.481644 ], "pop" : 902, "state" : "NY" } +{ "_id" : "12157", "city" : "SCHOHARIE", "loc" : [ -74.30473000000001, 42.661503 ], "pop" : 4095, "state" : "NY" } +{ "_id" : "12158", "city" : "SELKIRK", "loc" : [ -73.81286299999999, 42.54861 ], "pop" : 6062, "state" : "NY" } +{ "_id" : "12159", "city" : "SLINGERLANDS", "loc" : [ -73.871065, 42.648461 ], "pop" : 5431, "state" : "NY" } +{ "_id" : "12160", "city" : "SLOANSVILLE", "loc" : [ -74.36417400000001, 42.759852 ], "pop" : 1152, "state" : "NY" } +{ "_id" : "12164", "city" : "SPECULATOR", "loc" : [ -74.36667, 43.504159 ], "pop" : 400, "state" : "NY" } +{ "_id" : "12165", "city" : "SPENCERTOWN", "loc" : [ -73.500754, 42.30908 ], "pop" : 127, "state" : "NY" } +{ "_id" : "12166", "city" : "SPRAKERS", "loc" : [ -74.453558, 42.848446 ], "pop" : 1608, "state" : "NY" } +{ "_id" : "12167", "city" : "STAMFORD", "loc" : [ -74.609831, 42.417409 ], "pop" : 2734, "state" : "NY" } +{ "_id" : "12168", "city" : "STEPHENTOWN", "loc" : [ -73.42244700000001, 42.523323 ], "pop" : 1036, "state" : "NY" } +{ "_id" : "12169", "city" : "STEPHENTOWN", "loc" : [ -73.37496400000001, 42.556224 ], "pop" : 1566, "state" : "NY" } +{ "_id" : "12170", "city" : "STILLWATER", "loc" : [ -73.697163, 42.905652 ], "pop" : 9226, "state" : "NY" } +{ "_id" : "12173", "city" : "STUYVESANT", "loc" : [ -73.761329, 42.359572 ], "pop" : 1806, "state" : "NY" } +{ "_id" : "12175", "city" : "SUMMIT", "loc" : [ -74.574952, 42.587122 ], "pop" : 1247, "state" : "NY" } +{ "_id" : "12176", "city" : "SURPRISE", "loc" : [ -73.95154100000001, 42.361171 ], "pop" : 162, "state" : "NY" } +{ "_id" : "12180", "city" : "TROY", "loc" : [ -73.668263, 42.728748 ], "pop" : 56849, "state" : "NY" } +{ "_id" : "12182", "city" : "TROY", "loc" : [ -73.664806, 42.782921 ], "pop" : 14688, "state" : "NY" } +{ "_id" : "12183", "city" : "GREEN ISLAND", "loc" : [ -73.693707, 42.743812 ], "pop" : 2432, "state" : "NY" } +{ "_id" : "12184", "city" : "VALATIE", "loc" : [ -73.668322, 42.432051 ], "pop" : 8072, "state" : "NY" } +{ "_id" : "12185", "city" : "VALLEY FALLS", "loc" : [ -73.543674, 42.885458 ], "pop" : 1835, "state" : "NY" } +{ "_id" : "12186", "city" : "VOORHEESVILLE", "loc" : [ -73.944773, 42.643108 ], "pop" : 7069, "state" : "NY" } +{ "_id" : "12187", "city" : "WARNERVILLE", "loc" : [ -74.48704600000001, 42.638826 ], "pop" : 782, "state" : "NY" } +{ "_id" : "12188", "city" : "WATERFORD", "loc" : [ -73.69948100000001, 42.809957 ], "pop" : 11576, "state" : "NY" } +{ "_id" : "12189", "city" : "WATERVLIET", "loc" : [ -73.71234200000001, 42.729843 ], "pop" : 16509, "state" : "NY" } +{ "_id" : "12190", "city" : "WELLS", "loc" : [ -74.288583, 43.401219 ], "pop" : 706, "state" : "NY" } +{ "_id" : "12192", "city" : "WEST COXSACKIE", "loc" : [ -73.817033, 42.415055 ], "pop" : 1982, "state" : "NY" } +{ "_id" : "12193", "city" : "WESTERLO", "loc" : [ -74.039383, 42.515621 ], "pop" : 1880, "state" : "NY" } +{ "_id" : "12194", "city" : "WEST FULTON", "loc" : [ -74.463105, 42.550615 ], "pop" : 72, "state" : "NY" } +{ "_id" : "12196", "city" : "WEST SAND LAKE", "loc" : [ -73.610896, 42.637969 ], "pop" : 2511, "state" : "NY" } +{ "_id" : "12197", "city" : "WORCESTER", "loc" : [ -74.72992000000001, 42.604889 ], "pop" : 2239, "state" : "NY" } +{ "_id" : "12198", "city" : "WYNANTSKILL", "loc" : [ -73.63826, 42.687785 ], "pop" : 6192, "state" : "NY" } +{ "_id" : "12202", "city" : "ALBANY", "loc" : [ -73.764071, 42.641314 ], "pop" : 11097, "state" : "NY" } +{ "_id" : "12203", "city" : "MC KOWNVILLE", "loc" : [ -73.821988, 42.676757 ], "pop" : 33356, "state" : "NY" } +{ "_id" : "12204", "city" : "ALBANY", "loc" : [ -73.735364, 42.684667 ], "pop" : 6927, "state" : "NY" } +{ "_id" : "12205", "city" : "ROESSLEVILLE", "loc" : [ -73.82017399999999, 42.713116 ], "pop" : 26008, "state" : "NY" } +{ "_id" : "12206", "city" : "ALBANY", "loc" : [ -73.774406, 42.668326 ], "pop" : 17230, "state" : "NY" } +{ "_id" : "12207", "city" : "ALBANY", "loc" : [ -73.75232699999999, 42.658133 ], "pop" : 2709, "state" : "NY" } +{ "_id" : "12208", "city" : "ALBANY", "loc" : [ -73.796357, 42.655989 ], "pop" : 22041, "state" : "NY" } +{ "_id" : "12209", "city" : "ALBANY", "loc" : [ -73.78538500000001, 42.641665 ], "pop" : 10008, "state" : "NY" } +{ "_id" : "12210", "city" : "ALBANY", "loc" : [ -73.76052, 42.65677 ], "pop" : 9374, "state" : "NY" } +{ "_id" : "12211", "city" : "LOUDONVILLE", "loc" : [ -73.769982, 42.704693 ], "pop" : 12283, "state" : "NY" } +{ "_id" : "12302", "city" : "MAYFAIR", "loc" : [ -73.955051, 42.858839 ], "pop" : 27516, "state" : "NY" } +{ "_id" : "12303", "city" : "ROTTERDAM", "loc" : [ -73.938776, 42.769645 ], "pop" : 28448, "state" : "NY" } +{ "_id" : "12304", "city" : "SCHENECTADY", "loc" : [ -73.909432, 42.784083 ], "pop" : 20431, "state" : "NY" } +{ "_id" : "12305", "city" : "SCHENECTADY", "loc" : [ -73.939786, 42.816131 ], "pop" : 6253, "state" : "NY" } +{ "_id" : "12306", "city" : "SCHENECTADY", "loc" : [ -73.98087599999999, 42.790384 ], "pop" : 23182, "state" : "NY" } +{ "_id" : "12307", "city" : "SCHENECTADY", "loc" : [ -73.93634900000001, 42.804653 ], "pop" : 8534, "state" : "NY" } +{ "_id" : "12308", "city" : "SCHENECTADY", "loc" : [ -73.920591, 42.817928 ], "pop" : 14055, "state" : "NY" } +{ "_id" : "12309", "city" : "NISKAYUNA", "loc" : [ -73.87826800000001, 42.796168 ], "pop" : 27928, "state" : "NY" } +{ "_id" : "12401", "city" : "EDDYVILLE", "loc" : [ -74.02357499999999, 41.930126 ], "pop" : 32883, "state" : "NY" } +{ "_id" : "12404", "city" : "ACCORD", "loc" : [ -74.235336, 41.808308 ], "pop" : 2695, "state" : "NY" } +{ "_id" : "12405", "city" : "ACRA", "loc" : [ -74.085723, 42.330367 ], "pop" : 525, "state" : "NY" } +{ "_id" : "12406", "city" : "ARKVILLE", "loc" : [ -74.554453, 42.082262 ], "pop" : 141, "state" : "NY" } +{ "_id" : "12407", "city" : "ASHLAND", "loc" : [ -74.307925, 42.237174 ], "pop" : 28, "state" : "NY" } +{ "_id" : "12409", "city" : "SHADY", "loc" : [ -74.17129799999999, 42.041991 ], "pop" : 960, "state" : "NY" } +{ "_id" : "12410", "city" : "OLIVEREA", "loc" : [ -74.44665500000001, 42.143884 ], "pop" : 69, "state" : "NY" } +{ "_id" : "12411", "city" : "BLOOMINGTON", "loc" : [ -74.066889, 41.856165 ], "pop" : 148, "state" : "NY" } +{ "_id" : "12412", "city" : "BOICEVILLE", "loc" : [ -74.26580800000001, 42.004761 ], "pop" : 556, "state" : "NY" } +{ "_id" : "12413", "city" : "CAIRO", "loc" : [ -74.01154, 42.30965 ], "pop" : 3057, "state" : "NY" } +{ "_id" : "12414", "city" : "CATSKILL", "loc" : [ -73.89853599999999, 42.227598 ], "pop" : 12128, "state" : "NY" } +{ "_id" : "12416", "city" : "CHICHESTER", "loc" : [ -74.281565, 42.087965 ], "pop" : 642, "state" : "NY" } +{ "_id" : "12418", "city" : "CORNWALLVILLE", "loc" : [ -74.16309200000001, 42.362874 ], "pop" : 380, "state" : "NY" } +{ "_id" : "12419", "city" : "COTTEKILL", "loc" : [ -74.103774, 41.846706 ], "pop" : 399, "state" : "NY" } +{ "_id" : "12421", "city" : "DENVER", "loc" : [ -74.540654, 42.252204 ], "pop" : 62, "state" : "NY" } +{ "_id" : "12422", "city" : "DURHAM", "loc" : [ -74.184926, 42.402037 ], "pop" : 216, "state" : "NY" } +{ "_id" : "12423", "city" : "EAST DURHAM", "loc" : [ -74.11169, 42.385978 ], "pop" : 1097, "state" : "NY" } +{ "_id" : "12424", "city" : "EAST JEWETT", "loc" : [ -74.207981, 42.280567 ], "pop" : 241, "state" : "NY" } +{ "_id" : "12427", "city" : "ELKA PARK", "loc" : [ -74.124539, 42.164309 ], "pop" : 389, "state" : "NY" } +{ "_id" : "12428", "city" : "ELLENVILLE", "loc" : [ -74.414125, 41.721805 ], "pop" : 6902, "state" : "NY" } +{ "_id" : "12430", "city" : "HALCOTT CENTER", "loc" : [ -74.531908, 42.178765 ], "pop" : 1151, "state" : "NY" } +{ "_id" : "12431", "city" : "FREEHOLD", "loc" : [ -74.06226599999999, 42.3815 ], "pop" : 255, "state" : "NY" } +{ "_id" : "12433", "city" : "GLENFORD", "loc" : [ -74.153154, 42.005342 ], "pop" : 354, "state" : "NY" } +{ "_id" : "12434", "city" : "GRAND GORGE", "loc" : [ -74.531173, 42.387358 ], "pop" : 13, "state" : "NY" } +{ "_id" : "12435", "city" : "GREENFIELD PARK", "loc" : [ -74.52007399999999, 41.728133 ], "pop" : 241, "state" : "NY" } +{ "_id" : "12439", "city" : "EAST WINDHAM", "loc" : [ -74.21306300000001, 42.259032 ], "pop" : 57, "state" : "NY" } +{ "_id" : "12440", "city" : "HIGH FALLS", "loc" : [ -74.131122, 41.816749 ], "pop" : 2168, "state" : "NY" } +{ "_id" : "12442", "city" : "HUNTER", "loc" : [ -74.20375300000001, 42.237316 ], "pop" : 616, "state" : "NY" } +{ "_id" : "12443", "city" : "HURLEY", "loc" : [ -74.06873, 41.932743 ], "pop" : 1229, "state" : "NY" } +{ "_id" : "12444", "city" : "JEWETT", "loc" : [ -74.279274, 42.269383 ], "pop" : 231, "state" : "NY" } +{ "_id" : "12446", "city" : "KERHONKSON", "loc" : [ -74.30345699999999, 41.793866 ], "pop" : 4220, "state" : "NY" } +{ "_id" : "12448", "city" : "LAKE HILL", "loc" : [ -74.212338, 42.073271 ], "pop" : 73, "state" : "NY" } +{ "_id" : "12449", "city" : "LAKE KATRINE", "loc" : [ -73.992379, 41.991787 ], "pop" : 3763, "state" : "NY" } +{ "_id" : "12450", "city" : "LANESVILLE", "loc" : [ -74.19714999999999, 42.189149 ], "pop" : 1131, "state" : "NY" } +{ "_id" : "12451", "city" : "LEEDS", "loc" : [ -73.94572599999999, 42.304506 ], "pop" : 779, "state" : "NY" } +{ "_id" : "12454", "city" : "MAPLECREST", "loc" : [ -74.165522, 42.299485 ], "pop" : 342, "state" : "NY" } +{ "_id" : "12455", "city" : "KELLY CORNERS", "loc" : [ -74.648853, 42.163702 ], "pop" : 2756, "state" : "NY" } +{ "_id" : "12456", "city" : "MOUNT MARION", "loc" : [ -74.00021099999999, 42.035704 ], "pop" : 753, "state" : "NY" } +{ "_id" : "12457", "city" : "MOUNT TREMPER", "loc" : [ -74.248481, 42.043545 ], "pop" : 941, "state" : "NY" } +{ "_id" : "12458", "city" : "NAPANOCH", "loc" : [ -74.380354, 41.758965 ], "pop" : 3502, "state" : "NY" } +{ "_id" : "12460", "city" : "OAK HILL", "loc" : [ -74.152832, 42.406902 ], "pop" : 294, "state" : "NY" } +{ "_id" : "12461", "city" : "KRUMVILLE", "loc" : [ -74.246954, 41.895906 ], "pop" : 1423, "state" : "NY" } +{ "_id" : "12463", "city" : "PALENVILLE", "loc" : [ -74.01667399999999, 42.17294 ], "pop" : 1195, "state" : "NY" } +{ "_id" : "12464", "city" : "PHOENICIA", "loc" : [ -74.33932799999999, 42.054426 ], "pop" : 966, "state" : "NY" } +{ "_id" : "12465", "city" : "PINE HILL", "loc" : [ -74.487562, 42.133974 ], "pop" : 392, "state" : "NY" } +{ "_id" : "12466", "city" : "PORT EWEN", "loc" : [ -73.987161, 41.913113 ], "pop" : 7283, "state" : "NY" } +{ "_id" : "12468", "city" : "PRATTSVILLE", "loc" : [ -74.38950199999999, 42.297904 ], "pop" : 1669, "state" : "NY" } +{ "_id" : "12469", "city" : "PRESTON HOLLOW", "loc" : [ -74.24199, 42.456348 ], "pop" : 421, "state" : "NY" } +{ "_id" : "12470", "city" : "PURLING", "loc" : [ -74.01138, 42.275497 ], "pop" : 516, "state" : "NY" } +{ "_id" : "12472", "city" : "ROSENDALE", "loc" : [ -74.072999, 41.840248 ], "pop" : 2939, "state" : "NY" } +{ "_id" : "12473", "city" : "ROUND TOP", "loc" : [ -74.052279, 42.267782 ], "pop" : 454, "state" : "NY" } +{ "_id" : "12474", "city" : "ROXBURY", "loc" : [ -74.540519, 42.311688 ], "pop" : 2178, "state" : "NY" } +{ "_id" : "12477", "city" : "SAUGERTIES", "loc" : [ -73.97968400000001, 42.07376 ], "pop" : 18932, "state" : "NY" } +{ "_id" : "12480", "city" : "SHANDAKEN", "loc" : [ -74.40908399999999, 42.108353 ], "pop" : 593, "state" : "NY" } +{ "_id" : "12481", "city" : "SHOKAN", "loc" : [ -74.21194300000001, 41.976678 ], "pop" : 1494, "state" : "NY" } +{ "_id" : "12482", "city" : "SOUTH CAIRO", "loc" : [ -73.963982, 42.27338 ], "pop" : 360, "state" : "NY" } +{ "_id" : "12484", "city" : "STONE RIDGE", "loc" : [ -74.169748, 41.861562 ], "pop" : 2389, "state" : "NY" } +{ "_id" : "12485", "city" : "TANNERSVILLE", "loc" : [ -74.10144099999999, 42.203179 ], "pop" : 492, "state" : "NY" } +{ "_id" : "12486", "city" : "TILLSON", "loc" : [ -74.072219, 41.816279 ], "pop" : 377, "state" : "NY" } +{ "_id" : "12487", "city" : "ULSTER PARK", "loc" : [ -73.994843, 41.865109 ], "pop" : 3625, "state" : "NY" } +{ "_id" : "12491", "city" : "WEST HURLEY", "loc" : [ -74.11523200000001, 41.990816 ], "pop" : 2365, "state" : "NY" } +{ "_id" : "12492", "city" : "WEST KILL", "loc" : [ -74.361994, 42.204584 ], "pop" : 413, "state" : "NY" } +{ "_id" : "12494", "city" : "WEST SHOKAN", "loc" : [ -74.285117, 41.955478 ], "pop" : 809, "state" : "NY" } +{ "_id" : "12495", "city" : "WILLOW", "loc" : [ -74.20253700000001, 42.092318 ], "pop" : 145, "state" : "NY" } +{ "_id" : "12496", "city" : "WINDHAM", "loc" : [ -74.262017, 42.317465 ], "pop" : 1559, "state" : "NY" } +{ "_id" : "12498", "city" : "WOODSTOCK", "loc" : [ -74.111974, 42.034793 ], "pop" : 4827, "state" : "NY" } +{ "_id" : "12501", "city" : "AMENIA", "loc" : [ -73.554158, 41.844695 ], "pop" : 2325, "state" : "NY" } +{ "_id" : "12502", "city" : "ANCRAM", "loc" : [ -73.642368, 42.085093 ], "pop" : 600, "state" : "NY" } +{ "_id" : "12503", "city" : "ANCRAMDALE", "loc" : [ -73.58187, 42.038103 ], "pop" : 918, "state" : "NY" } +{ "_id" : "12507", "city" : "BARRYTOWN", "loc" : [ -73.92148400000001, 42.0006 ], "pop" : 388, "state" : "NY" } +{ "_id" : "12508", "city" : "BEACON", "loc" : [ -73.963384, 41.509681 ], "pop" : 20022, "state" : "NY" } +{ "_id" : "12513", "city" : "CLAVERACK", "loc" : [ -73.72284399999999, 42.2183 ], "pop" : 447, "state" : "NY" } +{ "_id" : "12514", "city" : "CLINTON CORNERS", "loc" : [ -73.765867, 41.869262 ], "pop" : 2667, "state" : "NY" } +{ "_id" : "12515", "city" : "CLINTONDALE", "loc" : [ -74.055713, 41.674939 ], "pop" : 1171, "state" : "NY" } +{ "_id" : "12516", "city" : "COPAKE", "loc" : [ -73.552588, 42.111329 ], "pop" : 1511, "state" : "NY" } +{ "_id" : "12517", "city" : "COPAKE FALLS", "loc" : [ -73.510773, 42.136737 ], "pop" : 163, "state" : "NY" } +{ "_id" : "12518", "city" : "CORNWALL", "loc" : [ -74.053877, 41.430944 ], "pop" : 8120, "state" : "NY" } +{ "_id" : "12520", "city" : "CORNWALL ON HUDS", "loc" : [ -74.01641100000001, 41.443031 ], "pop" : 2980, "state" : "NY" } +{ "_id" : "12521", "city" : "CRARYVILLE", "loc" : [ -73.657128, 42.175961 ], "pop" : 1377, "state" : "NY" } +{ "_id" : "12522", "city" : "DOVER PLAINS", "loc" : [ -73.587024, 41.735054 ], "pop" : 4775, "state" : "NY" } +{ "_id" : "12523", "city" : "ELIZAVILLE", "loc" : [ -73.781814, 42.090173 ], "pop" : 2158, "state" : "NY" } +{ "_id" : "12524", "city" : "FISHKILL", "loc" : [ -73.89791, 41.540352 ], "pop" : 11165, "state" : "NY" } +{ "_id" : "12525", "city" : "GARDINER", "loc" : [ -74.16715499999999, 41.657615 ], "pop" : 3900, "state" : "NY" } +{ "_id" : "12526", "city" : "GERMANTOWN", "loc" : [ -73.86245099999999, 42.1219 ], "pop" : 4061, "state" : "NY" } +{ "_id" : "12528", "city" : "HIGHLAND", "loc" : [ -73.992825, 41.716691 ], "pop" : 11011, "state" : "NY" } +{ "_id" : "12529", "city" : "HILLSDALE", "loc" : [ -73.548306, 42.186816 ], "pop" : 3084, "state" : "NY" } +{ "_id" : "12531", "city" : "HOLMES", "loc" : [ -73.662751, 41.532461 ], "pop" : 3248, "state" : "NY" } +{ "_id" : "12533", "city" : "HOPEWELL JUNCTIO", "loc" : [ -73.79758099999999, 41.576639 ], "pop" : 18770, "state" : "NY" } +{ "_id" : "12534", "city" : "HUDSON", "loc" : [ -73.75524799999999, 42.246978 ], "pop" : 21205, "state" : "NY" } +{ "_id" : "12538", "city" : "HYDE PARK", "loc" : [ -73.906347, 41.788724 ], "pop" : 15184, "state" : "NY" } +{ "_id" : "12540", "city" : "LAGRANGEVILLE", "loc" : [ -73.744955, 41.661471 ], "pop" : 5539, "state" : "NY" } +{ "_id" : "12542", "city" : "MARLBORO", "loc" : [ -73.988017, 41.605612 ], "pop" : 4489, "state" : "NY" } +{ "_id" : "12543", "city" : "MAYBROOK", "loc" : [ -74.216312, 41.48865 ], "pop" : 2860, "state" : "NY" } +{ "_id" : "12545", "city" : "MILLBROOK", "loc" : [ -73.688491, 41.780334 ], "pop" : 4503, "state" : "NY" } +{ "_id" : "12546", "city" : "MILLERTON", "loc" : [ -73.52870900000001, 41.953623 ], "pop" : 3131, "state" : "NY" } +{ "_id" : "12547", "city" : "MILTON", "loc" : [ -73.977194, 41.653487 ], "pop" : 2834, "state" : "NY" } +{ "_id" : "12548", "city" : "MODENA", "loc" : [ -74.103578, 41.650347 ], "pop" : 810, "state" : "NY" } +{ "_id" : "12549", "city" : "MONTGOMERY", "loc" : [ -74.253417, 41.53332 ], "pop" : 7421, "state" : "NY" } +{ "_id" : "12550", "city" : "MIDDLE HOPE", "loc" : [ -74.03598, 41.517833 ], "pop" : 47939, "state" : "NY" } +{ "_id" : "12553", "city" : "NEW WINDSOR", "loc" : [ -74.056596, 41.472374 ], "pop" : 20576, "state" : "NY" } +{ "_id" : "12561", "city" : "MOHONK LAKE", "loc" : [ -74.08387500000001, 41.743346 ], "pop" : 16394, "state" : "NY" } +{ "_id" : "12563", "city" : "PATTERSON", "loc" : [ -73.58149, 41.488761 ], "pop" : 6107, "state" : "NY" } +{ "_id" : "12564", "city" : "PAWLING", "loc" : [ -73.594847, 41.574893 ], "pop" : 4511, "state" : "NY" } +{ "_id" : "12566", "city" : "PINE BUSH", "loc" : [ -74.326311, 41.617758 ], "pop" : 7589, "state" : "NY" } +{ "_id" : "12567", "city" : "PINE PLAINS", "loc" : [ -73.66022700000001, 41.989569 ], "pop" : 2771, "state" : "NY" } +{ "_id" : "12569", "city" : "PLEASANT VALLEY", "loc" : [ -73.81427600000001, 41.747032 ], "pop" : 7978, "state" : "NY" } +{ "_id" : "12570", "city" : "POUGHQUAG", "loc" : [ -73.67832799999999, 41.61936 ], "pop" : 3867, "state" : "NY" } +{ "_id" : "12571", "city" : "RED HOOK", "loc" : [ -73.85457700000001, 42.006439 ], "pop" : 8890, "state" : "NY" } +{ "_id" : "12572", "city" : "RHINEBECK", "loc" : [ -73.88875400000001, 41.927206 ], "pop" : 9458, "state" : "NY" } +{ "_id" : "12575", "city" : "ROCK TAVERN", "loc" : [ -74.16588, 41.457523 ], "pop" : 2202, "state" : "NY" } +{ "_id" : "12577", "city" : "SALISBURY MILLS", "loc" : [ -74.12137800000001, 41.449714 ], "pop" : 573, "state" : "NY" } +{ "_id" : "12578", "city" : "SALT POINT", "loc" : [ -73.801329, 41.805041 ], "pop" : 1521, "state" : "NY" } +{ "_id" : "12580", "city" : "STAATSBURG", "loc" : [ -73.898838, 41.850193 ], "pop" : 2957, "state" : "NY" } +{ "_id" : "12581", "city" : "STANFORDVILLE", "loc" : [ -73.694467, 41.887726 ], "pop" : 2356, "state" : "NY" } +{ "_id" : "12582", "city" : "STORMVILLE", "loc" : [ -73.725548, 41.551193 ], "pop" : 6735, "state" : "NY" } +{ "_id" : "12583", "city" : "TIVOLI", "loc" : [ -73.902514, 42.057945 ], "pop" : 1614, "state" : "NY" } +{ "_id" : "12585", "city" : "VERBANK", "loc" : [ -73.71841000000001, 41.722664 ], "pop" : 989, "state" : "NY" } +{ "_id" : "12586", "city" : "WALDEN", "loc" : [ -74.176395, 41.559631 ], "pop" : 10479, "state" : "NY" } +{ "_id" : "12589", "city" : "WALLKILL", "loc" : [ -74.14385299999999, 41.615952 ], "pop" : 11209, "state" : "NY" } +{ "_id" : "12590", "city" : "NEW HAMBURG", "loc" : [ -73.89058799999999, 41.592199 ], "pop" : 31950, "state" : "NY" } +{ "_id" : "12592", "city" : "WASSAIC", "loc" : [ -73.554382, 41.775884 ], "pop" : 2064, "state" : "NY" } +{ "_id" : "12594", "city" : "WINGDALE", "loc" : [ -73.555621, 41.653824 ], "pop" : 3716, "state" : "NY" } +{ "_id" : "12601", "city" : "SOUTH ROAD", "loc" : [ -73.9218, 41.702082 ], "pop" : 38212, "state" : "NY" } +{ "_id" : "12603", "city" : "ARLINGTON", "loc" : [ -73.885217, 41.676775 ], "pop" : 40724, "state" : "NY" } +{ "_id" : "12701", "city" : "MONTICELLO", "loc" : [ -74.700748, 41.65158 ], "pop" : 12122, "state" : "NY" } +{ "_id" : "12719", "city" : "BARRYVILLE", "loc" : [ -74.915234, 41.491162 ], "pop" : 772, "state" : "NY" } +{ "_id" : "12720", "city" : "BETHEL", "loc" : [ -74.893984, 41.669326 ], "pop" : 139, "state" : "NY" } +{ "_id" : "12721", "city" : "BLOOMINGBURG", "loc" : [ -74.430351, 41.564427 ], "pop" : 6139, "state" : "NY" } +{ "_id" : "12723", "city" : "CALLICOON", "loc" : [ -75.025688, 41.7754 ], "pop" : 2492, "state" : "NY" } +{ "_id" : "12725", "city" : "CLARYVILLE", "loc" : [ -74.529287, 41.965666 ], "pop" : 137, "state" : "NY" } +{ "_id" : "12726", "city" : "FOSTERDALE", "loc" : [ -74.980687, 41.698208 ], "pop" : 1120, "state" : "NY" } +{ "_id" : "12727", "city" : "COCHECTON CENTER", "loc" : [ -74.977116, 41.645776 ], "pop" : 131, "state" : "NY" } +{ "_id" : "12729", "city" : "CUDDEBACKVILLE", "loc" : [ -74.59756400000001, 41.477601 ], "pop" : 1191, "state" : "NY" } +{ "_id" : "12732", "city" : "ELDRED", "loc" : [ -74.89676900000001, 41.532793 ], "pop" : 899, "state" : "NY" } +{ "_id" : "12733", "city" : "FALLSBURG", "loc" : [ -74.615409, 41.7273 ], "pop" : 866, "state" : "NY" } +{ "_id" : "12734", "city" : "GROSSINGER", "loc" : [ -74.754873, 41.730029 ], "pop" : 851, "state" : "NY" } +{ "_id" : "12736", "city" : "FREMONT CENTER", "loc" : [ -75.029635, 41.847134 ], "pop" : 349, "state" : "NY" } +{ "_id" : "12737", "city" : "GLEN SPEY", "loc" : [ -74.799493, 41.48576 ], "pop" : 840, "state" : "NY" } +{ "_id" : "12738", "city" : "GLEN WILD", "loc" : [ -74.58328899999999, 41.654536 ], "pop" : 158, "state" : "NY" } +{ "_id" : "12739", "city" : "GODEFFROY", "loc" : [ -74.605716, 41.442347 ], "pop" : 615, "state" : "NY" } +{ "_id" : "12740", "city" : "GRAHAMSVILLE", "loc" : [ -74.512697, 41.880659 ], "pop" : 1305, "state" : "NY" } +{ "_id" : "12741", "city" : "MILESES", "loc" : [ -75.09980899999999, 41.831288 ], "pop" : 73, "state" : "NY" } +{ "_id" : "12742", "city" : "HARRIS", "loc" : [ -74.7218, 41.714055 ], "pop" : 272, "state" : "NY" } +{ "_id" : "12743", "city" : "HIGHLAND LAKE", "loc" : [ -74.851615, 41.530925 ], "pop" : 292, "state" : "NY" } +{ "_id" : "12745", "city" : "HORTONVILLE", "loc" : [ -75.026329, 41.78568 ], "pop" : 59, "state" : "NY" } +{ "_id" : "12746", "city" : "HUGUENOT", "loc" : [ -74.64261, 41.437162 ], "pop" : 885, "state" : "NY" } +{ "_id" : "12747", "city" : "HURLEYVILLE", "loc" : [ -74.65344, 41.760882 ], "pop" : 3303, "state" : "NY" } +{ "_id" : "12748", "city" : "JEFFERSONVILLE", "loc" : [ -74.919574, 41.778394 ], "pop" : 1698, "state" : "NY" } +{ "_id" : "12750", "city" : "KENOZA LAKE", "loc" : [ -74.935384, 41.777802 ], "pop" : 443, "state" : "NY" } +{ "_id" : "12751", "city" : "KIAMESHA LAKE", "loc" : [ -74.67240200000001, 41.683825 ], "pop" : 320, "state" : "NY" } +{ "_id" : "12752", "city" : "LAKE HUNTINGTON", "loc" : [ -74.994933, 41.678158 ], "pop" : 111, "state" : "NY" } +{ "_id" : "12753", "city" : "LEW BEACH", "loc" : [ -74.728835, 42.015762 ], "pop" : 126, "state" : "NY" } +{ "_id" : "12754", "city" : "LIBERTY", "loc" : [ -74.748397, 41.79618 ], "pop" : 7361, "state" : "NY" } +{ "_id" : "12758", "city" : "LIVINGSTON MANOR", "loc" : [ -74.827028, 41.87779 ], "pop" : 4510, "state" : "NY" } +{ "_id" : "12759", "city" : "LOCH SHELDRAKE", "loc" : [ -74.661406, 41.778899 ], "pop" : 466, "state" : "NY" } +{ "_id" : "12760", "city" : "LONG EDDY", "loc" : [ -75.094157, 41.864359 ], "pop" : 279, "state" : "NY" } +{ "_id" : "12762", "city" : "MONGAUP VALLEY", "loc" : [ -74.802772, 41.681017 ], "pop" : 228, "state" : "NY" } +{ "_id" : "12763", "city" : "MOUNTAIN DALE", "loc" : [ -74.53576200000001, 41.691763 ], "pop" : 841, "state" : "NY" } +{ "_id" : "12764", "city" : "NARROWSBURG", "loc" : [ -75.010687, 41.592108 ], "pop" : 1576, "state" : "NY" } +{ "_id" : "12765", "city" : "NEVERSINK", "loc" : [ -74.61272599999999, 41.849205 ], "pop" : 868, "state" : "NY" } +{ "_id" : "12766", "city" : "NORTH BRANCH", "loc" : [ -74.982388, 41.814184 ], "pop" : 409, "state" : "NY" } +{ "_id" : "12768", "city" : "PARKSVILLE", "loc" : [ -74.735933, 41.851686 ], "pop" : 1199, "state" : "NY" } +{ "_id" : "12770", "city" : "POND EDDY", "loc" : [ -74.84102900000001, 41.451068 ], "pop" : 448, "state" : "NY" } +{ "_id" : "12771", "city" : "PORT JERVIS", "loc" : [ -74.66909699999999, 41.378557 ], "pop" : 14959, "state" : "NY" } +{ "_id" : "12775", "city" : "ROCK HILL", "loc" : [ -74.58722299999999, 41.613351 ], "pop" : 1027, "state" : "NY" } +{ "_id" : "12776", "city" : "COOK FALLS", "loc" : [ -74.923704, 41.945774 ], "pop" : 2737, "state" : "NY" } +{ "_id" : "12777", "city" : "FORESTBURGH", "loc" : [ -74.724087, 41.569093 ], "pop" : 581, "state" : "NY" } +{ "_id" : "12779", "city" : "SOUTH FALLSBURG", "loc" : [ -74.644401, 41.704192 ], "pop" : 1838, "state" : "NY" } +{ "_id" : "12780", "city" : "SPARROWBUSH", "loc" : [ -74.723647, 41.435886 ], "pop" : 1527, "state" : "NY" } +{ "_id" : "12782", "city" : "SUNDOWN", "loc" : [ -74.550838, 41.823822 ], "pop" : 635, "state" : "NY" } +{ "_id" : "12783", "city" : "SWAN LAKE", "loc" : [ -74.834092, 41.728479 ], "pop" : 1707, "state" : "NY" } +{ "_id" : "12786", "city" : "WHITE LAKE", "loc" : [ -74.865437, 41.648498 ], "pop" : 178, "state" : "NY" } +{ "_id" : "12787", "city" : "WHITE SULPHUR SP", "loc" : [ -74.828065, 41.790042 ], "pop" : 161, "state" : "NY" } +{ "_id" : "12788", "city" : "WOODBOURNE", "loc" : [ -74.592828, 41.770807 ], "pop" : 2561, "state" : "NY" } +{ "_id" : "12789", "city" : "WOODRIDGE", "loc" : [ -74.581518, 41.716955 ], "pop" : 2047, "state" : "NY" } +{ "_id" : "12790", "city" : "WURTSBORO", "loc" : [ -74.503891, 41.587667 ], "pop" : 4589, "state" : "NY" } +{ "_id" : "12791", "city" : "YOUNGSVILLE", "loc" : [ -74.88877599999999, 41.803238 ], "pop" : 115, "state" : "NY" } +{ "_id" : "12792", "city" : "YULAN", "loc" : [ -74.926224, 41.538378 ], "pop" : 107, "state" : "NY" } +{ "_id" : "12801", "city" : "QUEENSBURY", "loc" : [ -73.648816, 43.312539 ], "pop" : 15023, "state" : "NY" } +{ "_id" : "12803", "city" : "SOUTH GLENS FALL", "loc" : [ -73.637947, 43.283911 ], "pop" : 8758, "state" : "NY" } +{ "_id" : "12804", "city" : "QUEENSBURY", "loc" : [ -73.68184599999999, 43.328983 ], "pop" : 20993, "state" : "NY" } +{ "_id" : "12808", "city" : "ADIRONDACK", "loc" : [ -73.78248600000001, 43.716479 ], "pop" : 105, "state" : "NY" } +{ "_id" : "12809", "city" : "ARGYLE", "loc" : [ -73.46407600000001, 43.238084 ], "pop" : 2930, "state" : "NY" } +{ "_id" : "12810", "city" : "ATHOL", "loc" : [ -73.88169499999999, 43.483872 ], "pop" : 588, "state" : "NY" } +{ "_id" : "12812", "city" : "BLUE MOUNTAIN LA", "loc" : [ -74.42983099999999, 43.837499 ], "pop" : 234, "state" : "NY" } +{ "_id" : "12814", "city" : "BOLTON LANDING", "loc" : [ -73.671392, 43.576641 ], "pop" : 1298, "state" : "NY" } +{ "_id" : "12815", "city" : "BRANT LAKE", "loc" : [ -73.72045799999999, 43.698875 ], "pop" : 807, "state" : "NY" } +{ "_id" : "12816", "city" : "CAMBRIDGE", "loc" : [ -73.38137500000001, 43.046585 ], "pop" : 4243, "state" : "NY" } +{ "_id" : "12817", "city" : "CHESTERTOWN", "loc" : [ -73.806641, 43.645053 ], "pop" : 2141, "state" : "NY" } +{ "_id" : "12819", "city" : "CLEMONS", "loc" : [ -73.432613, 43.643544 ], "pop" : 169, "state" : "NY" } +{ "_id" : "12821", "city" : "COMSTOCK", "loc" : [ -73.360607, 43.456706 ], "pop" : 1226, "state" : "NY" } +{ "_id" : "12822", "city" : "CORINTH", "loc" : [ -73.836901, 43.242569 ], "pop" : 6492, "state" : "NY" } +{ "_id" : "12823", "city" : "COSSAYUNA", "loc" : [ -73.41237, 43.175059 ], "pop" : 241, "state" : "NY" } +{ "_id" : "12824", "city" : "DIAMOND POINT", "loc" : [ -73.700123, 43.515553 ], "pop" : 770, "state" : "NY" } +{ "_id" : "12826", "city" : "EAST GREENWICH", "loc" : [ -73.392425, 43.157918 ], "pop" : 116, "state" : "NY" } +{ "_id" : "12827", "city" : "FORT ANN", "loc" : [ -73.478381, 43.428457 ], "pop" : 6818, "state" : "NY" } +{ "_id" : "12828", "city" : "FORT EDWARD", "loc" : [ -73.58216899999999, 43.265321 ], "pop" : 5507, "state" : "NY" } +{ "_id" : "12831", "city" : "GANSEVOORT", "loc" : [ -73.70526700000001, 43.180343 ], "pop" : 14485, "state" : "NY" } +{ "_id" : "12832", "city" : "GRANVILLE", "loc" : [ -73.297825, 43.377562 ], "pop" : 6201, "state" : "NY" } +{ "_id" : "12833", "city" : "GREENFIELD CENTE", "loc" : [ -73.860193, 43.122488 ], "pop" : 4753, "state" : "NY" } +{ "_id" : "12834", "city" : "THOMSON", "loc" : [ -73.506658, 43.096183 ], "pop" : 6028, "state" : "NY" } +{ "_id" : "12835", "city" : "HADLEY", "loc" : [ -73.949905, 43.301268 ], "pop" : 1840, "state" : "NY" } +{ "_id" : "12836", "city" : "HAGUE", "loc" : [ -73.528172, 43.74631 ], "pop" : 692, "state" : "NY" } +{ "_id" : "12837", "city" : "HAMPTON", "loc" : [ -73.273072, 43.462135 ], "pop" : 419, "state" : "NY" } +{ "_id" : "12838", "city" : "HARTFORD", "loc" : [ -73.404946, 43.349281 ], "pop" : 679, "state" : "NY" } +{ "_id" : "12839", "city" : "HUDSON FALLS", "loc" : [ -73.574607, 43.314863 ], "pop" : 12866, "state" : "NY" } +{ "_id" : "12842", "city" : "INDIAN LAKE", "loc" : [ -74.27663800000001, 43.760594 ], "pop" : 1247, "state" : "NY" } +{ "_id" : "12843", "city" : "JOHNSBURG", "loc" : [ -74.021254, 43.634081 ], "pop" : 1437, "state" : "NY" } +{ "_id" : "12844", "city" : "PILOT KNOB", "loc" : [ -73.62988300000001, 43.515561 ], "pop" : 23, "state" : "NY" } +{ "_id" : "12845", "city" : "LAKE GEORGE", "loc" : [ -73.697547, 43.416725 ], "pop" : 4677, "state" : "NY" } +{ "_id" : "12846", "city" : "LAKE LUZERNE", "loc" : [ -73.822821, 43.316487 ], "pop" : 2816, "state" : "NY" } +{ "_id" : "12847", "city" : "LONG LAKE", "loc" : [ -74.46624300000001, 43.947653 ], "pop" : 930, "state" : "NY" } +{ "_id" : "12849", "city" : "MIDDLE GRANVILLE", "loc" : [ -73.303077, 43.450773 ], "pop" : 249, "state" : "NY" } +{ "_id" : "12850", "city" : "MIDDLE GROVE", "loc" : [ -74.016687, 43.097548 ], "pop" : 1760, "state" : "NY" } +{ "_id" : "12851", "city" : "MINERVA", "loc" : [ -73.983542, 43.781058 ], "pop" : 308, "state" : "NY" } +{ "_id" : "12852", "city" : "NEWCOMB", "loc" : [ -74.12991100000001, 43.945991 ], "pop" : 544, "state" : "NY" } +{ "_id" : "12853", "city" : "NORTH CREEK", "loc" : [ -73.892802, 43.713802 ], "pop" : 2447, "state" : "NY" } +{ "_id" : "12854", "city" : "NORTH GRANVILLE", "loc" : [ -73.33011399999999, 43.506212 ], "pop" : 185, "state" : "NY" } +{ "_id" : "12855", "city" : "NORTH HUDSON", "loc" : [ -73.712065, 43.986872 ], "pop" : 266, "state" : "NY" } +{ "_id" : "12857", "city" : "OLMSTEDVILLE", "loc" : [ -73.93347900000001, 43.779931 ], "pop" : 450, "state" : "NY" } +{ "_id" : "12858", "city" : "PARADOX", "loc" : [ -73.64495599999999, 43.891382 ], "pop" : 29, "state" : "NY" } +{ "_id" : "12859", "city" : "PORTER CORNERS", "loc" : [ -73.88391799999999, 43.172358 ], "pop" : 1028, "state" : "NY" } +{ "_id" : "12860", "city" : "POTTERSVILLE", "loc" : [ -73.756438, 43.692956 ], "pop" : 252, "state" : "NY" } +{ "_id" : "12861", "city" : "PUTNAM STATION", "loc" : [ -73.412299, 43.755976 ], "pop" : 477, "state" : "NY" } +{ "_id" : "12863", "city" : "ROCK CITY FALLS", "loc" : [ -73.92152299999999, 43.066248 ], "pop" : 553, "state" : "NY" } +{ "_id" : "12865", "city" : "SALEM", "loc" : [ -73.332703, 43.182785 ], "pop" : 1965, "state" : "NY" } +{ "_id" : "12866", "city" : "WILTON", "loc" : [ -73.780644, 43.080094 ], "pop" : 30086, "state" : "NY" } +{ "_id" : "12870", "city" : "SCHROON LAKE", "loc" : [ -73.767382, 43.841159 ], "pop" : 1656, "state" : "NY" } +{ "_id" : "12871", "city" : "SCHUYLERVILLE", "loc" : [ -73.60068, 43.087778 ], "pop" : 3929, "state" : "NY" } +{ "_id" : "12872", "city" : "SEVERANCE", "loc" : [ -73.730127, 43.876903 ], "pop" : 36, "state" : "NY" } +{ "_id" : "12873", "city" : "SHUSHAN", "loc" : [ -73.323148, 43.110575 ], "pop" : 755, "state" : "NY" } +{ "_id" : "12874", "city" : "SILVER BAY", "loc" : [ -73.507062, 43.697804 ], "pop" : 7, "state" : "NY" } +{ "_id" : "12878", "city" : "STONY CREEK", "loc" : [ -73.949467, 43.421389 ], "pop" : 625, "state" : "NY" } +{ "_id" : "12883", "city" : "TICONDEROGA", "loc" : [ -73.442592, 43.846302 ], "pop" : 5149, "state" : "NY" } +{ "_id" : "12885", "city" : "WARRENSBURG", "loc" : [ -73.79202100000001, 43.500253 ], "pop" : 4399, "state" : "NY" } +{ "_id" : "12886", "city" : "WEVERTOWN", "loc" : [ -73.930909, 43.64129 ], "pop" : 137, "state" : "NY" } +{ "_id" : "12887", "city" : "WHITEHALL", "loc" : [ -73.38641200000001, 43.5531 ], "pop" : 5372, "state" : "NY" } +{ "_id" : "12901", "city" : "PLATTSBURGH", "loc" : [ -73.465969, 44.692715 ], "pop" : 40905, "state" : "NY" } +{ "_id" : "12910", "city" : "ALTONA", "loc" : [ -73.640767, 44.881584 ], "pop" : 2456, "state" : "NY" } +{ "_id" : "12911", "city" : "AU SABLE CHASM", "loc" : [ -73.508976, 44.521594 ], "pop" : 514, "state" : "NY" } +{ "_id" : "12912", "city" : "AU SABLE FORKS", "loc" : [ -73.685672, 44.44994 ], "pop" : 2143, "state" : "NY" } +{ "_id" : "12913", "city" : "BLOOMINGDALE", "loc" : [ -74.08293, 44.398477 ], "pop" : 1016, "state" : "NY" } +{ "_id" : "12914", "city" : "BOMBAY", "loc" : [ -74.59473699999999, 44.947861 ], "pop" : 1042, "state" : "NY" } +{ "_id" : "12916", "city" : "BRUSHTON", "loc" : [ -74.522274, 44.828212 ], "pop" : 1936, "state" : "NY" } +{ "_id" : "12917", "city" : "BURKE", "loc" : [ -74.17311599999999, 44.917722 ], "pop" : 1279, "state" : "NY" } +{ "_id" : "12918", "city" : "CADYVILLE", "loc" : [ -73.670242, 44.686473 ], "pop" : 2122, "state" : "NY" } +{ "_id" : "12919", "city" : "CHAMPLAIN", "loc" : [ -73.446603, 44.977292 ], "pop" : 2827, "state" : "NY" } +{ "_id" : "12920", "city" : "CHATEAUGAY", "loc" : [ -74.07409800000001, 44.908768 ], "pop" : 2088, "state" : "NY" } +{ "_id" : "12921", "city" : "CHAZY", "loc" : [ -73.450076, 44.888379 ], "pop" : 2664, "state" : "NY" } +{ "_id" : "12922", "city" : "CHILDWOLD", "loc" : [ -74.675878, 44.286715 ], "pop" : 0, "state" : "NY" } +{ "_id" : "12923", "city" : "CHURUBUSCO", "loc" : [ -73.935484, 44.943232 ], "pop" : 663, "state" : "NY" } +{ "_id" : "12924", "city" : "KEESEVILLE", "loc" : [ -73.567971, 44.504814 ], "pop" : 377, "state" : "NY" } +{ "_id" : "12926", "city" : "CONSTABLE", "loc" : [ -74.329713, 44.941688 ], "pop" : 1949, "state" : "NY" } +{ "_id" : "12928", "city" : "CROWN POINT", "loc" : [ -73.466486, 43.952633 ], "pop" : 1963, "state" : "NY" } +{ "_id" : "12930", "city" : "DICKINSON CENTER", "loc" : [ -74.552346, 44.723328 ], "pop" : 549, "state" : "NY" } +{ "_id" : "12932", "city" : "ELIZABETHTOWN", "loc" : [ -73.601131, 44.224518 ], "pop" : 1274, "state" : "NY" } +{ "_id" : "12934", "city" : "ELLENBURG CENTER", "loc" : [ -73.86854599999999, 44.844353 ], "pop" : 1494, "state" : "NY" } +{ "_id" : "12935", "city" : "ELLENBURG DEPOT", "loc" : [ -73.787572, 44.916266 ], "pop" : 981, "state" : "NY" } +{ "_id" : "12936", "city" : "ESSEX", "loc" : [ -73.373147, 44.280695 ], "pop" : 406, "state" : "NY" } +{ "_id" : "12937", "city" : "FORT COVINGTON", "loc" : [ -74.492879, 44.973096 ], "pop" : 1568, "state" : "NY" } +{ "_id" : "12938", "city" : "NICHOLVILLE", "loc" : [ -74.53647100000001, 44.638703 ], "pop" : 1229, "state" : "NY" } +{ "_id" : "12941", "city" : "JAY", "loc" : [ -73.72470199999999, 44.373351 ], "pop" : 1245, "state" : "NY" } +{ "_id" : "12942", "city" : "KEENE", "loc" : [ -73.79145699999999, 44.25548 ], "pop" : 520, "state" : "NY" } +{ "_id" : "12943", "city" : "SAINT HUBERTS", "loc" : [ -73.795923, 44.177978 ], "pop" : 392, "state" : "NY" } +{ "_id" : "12944", "city" : "KEESEVILLE", "loc" : [ -73.474538, 44.499933 ], "pop" : 4129, "state" : "NY" } +{ "_id" : "12945", "city" : "UPPER SAINT REGI", "loc" : [ -74.243336, 44.359392 ], "pop" : 412, "state" : "NY" } +{ "_id" : "12946", "city" : "NORTH POLE", "loc" : [ -73.98635400000001, 44.274986 ], "pop" : 4656, "state" : "NY" } +{ "_id" : "12949", "city" : "LAWRENCEVILLE", "loc" : [ -74.662927, 44.758988 ], "pop" : 41, "state" : "NY" } +{ "_id" : "12950", "city" : "LEWIS", "loc" : [ -73.54912899999999, 44.307507 ], "pop" : 432, "state" : "NY" } +{ "_id" : "12952", "city" : "LYON MOUNTAIN", "loc" : [ -73.91945200000001, 44.725491 ], "pop" : 623, "state" : "NY" } +{ "_id" : "12953", "city" : "MALONE", "loc" : [ -74.29280799999999, 44.848164 ], "pop" : 13798, "state" : "NY" } +{ "_id" : "12955", "city" : "MERRILL", "loc" : [ -73.97783200000001, 44.799364 ], "pop" : 452, "state" : "NY" } +{ "_id" : "12956", "city" : "MINEVILLE", "loc" : [ -73.523588, 44.087631 ], "pop" : 1868, "state" : "NY" } +{ "_id" : "12957", "city" : "MOIRA", "loc" : [ -74.560273, 44.850412 ], "pop" : 1511, "state" : "NY" } +{ "_id" : "12958", "city" : "MOOERS", "loc" : [ -73.58341299999999, 44.959244 ], "pop" : 1569, "state" : "NY" } +{ "_id" : "12959", "city" : "MOOERS FORKS", "loc" : [ -73.672967, 44.960232 ], "pop" : 963, "state" : "NY" } +{ "_id" : "12960", "city" : "MORIAH", "loc" : [ -73.507862, 44.043755 ], "pop" : 889, "state" : "NY" } +{ "_id" : "12961", "city" : "MORIAH CENTER", "loc" : [ -73.511071, 44.066197 ], "pop" : 209, "state" : "NY" } +{ "_id" : "12962", "city" : "MORRISONVILLE", "loc" : [ -73.577168, 44.68936 ], "pop" : 4665, "state" : "NY" } +{ "_id" : "12964", "city" : "NEW RUSSIA", "loc" : [ -73.605881, 44.159532 ], "pop" : 216, "state" : "NY" } +{ "_id" : "12965", "city" : "NICHOLVILLE", "loc" : [ -74.653379, 44.708182 ], "pop" : 153, "state" : "NY" } +{ "_id" : "12966", "city" : "BANGOR", "loc" : [ -74.413369, 44.829997 ], "pop" : 2867, "state" : "NY" } +{ "_id" : "12967", "city" : "NORTH LAWRENCE", "loc" : [ -74.665307, 44.774982 ], "pop" : 943, "state" : "NY" } +{ "_id" : "12968", "city" : "ONCHIOTA", "loc" : [ -74.170991, 44.458163 ], "pop" : 1407, "state" : "NY" } +{ "_id" : "12969", "city" : "OWLS HEAD", "loc" : [ -74.134173, 44.730791 ], "pop" : 329, "state" : "NY" } +{ "_id" : "12970", "city" : "PAUL SMITHS", "loc" : [ -74.26643199999999, 44.444967 ], "pop" : 245, "state" : "NY" } +{ "_id" : "12972", "city" : "PERU", "loc" : [ -73.52932199999999, 44.585109 ], "pop" : 5640, "state" : "NY" } +{ "_id" : "12973", "city" : "PIERCEFIELD", "loc" : [ -74.573228, 44.234037 ], "pop" : 112, "state" : "NY" } +{ "_id" : "12974", "city" : "PORT HENRY", "loc" : [ -73.47054199999999, 44.04645 ], "pop" : 1841, "state" : "NY" } +{ "_id" : "12978", "city" : "REDFORD", "loc" : [ -73.801948, 44.606926 ], "pop" : 495, "state" : "NY" } +{ "_id" : "12979", "city" : "ROUSES POINT", "loc" : [ -73.369083, 44.988413 ], "pop" : 2508, "state" : "NY" } +{ "_id" : "12980", "city" : "SAINT REGIS FALL", "loc" : [ -74.66032, 44.677298 ], "pop" : 321, "state" : "NY" } +{ "_id" : "12981", "city" : "SARANAC", "loc" : [ -73.748135, 44.703168 ], "pop" : 6545, "state" : "NY" } +{ "_id" : "12983", "city" : "SARANAC LAKE", "loc" : [ -74.13295100000001, 44.324331 ], "pop" : 9125, "state" : "NY" } +{ "_id" : "12985", "city" : "SCHUYLER FALLS", "loc" : [ -73.689481, 44.588224 ], "pop" : 652, "state" : "NY" } +{ "_id" : "12986", "city" : "SUNMOUNT", "loc" : [ -74.463172, 44.228461 ], "pop" : 6379, "state" : "NY" } +{ "_id" : "12987", "city" : "UPPER JAY", "loc" : [ -73.807864, 44.325586 ], "pop" : 159, "state" : "NY" } +{ "_id" : "12989", "city" : "VERMONTVILLE", "loc" : [ -74.057278, 44.460134 ], "pop" : 623, "state" : "NY" } +{ "_id" : "12992", "city" : "WEST CHAZY", "loc" : [ -73.511188, 44.796967 ], "pop" : 3944, "state" : "NY" } +{ "_id" : "12993", "city" : "WESTPORT", "loc" : [ -73.470223, 44.204983 ], "pop" : 2007, "state" : "NY" } +{ "_id" : "12994", "city" : "WHALLONSBURG", "loc" : [ -73.432205, 44.292637 ], "pop" : 169, "state" : "NY" } +{ "_id" : "12996", "city" : "WILLSBORO", "loc" : [ -73.396292, 44.360396 ], "pop" : 1729, "state" : "NY" } +{ "_id" : "12997", "city" : "WILMINGTON", "loc" : [ -73.816553, 44.387976 ], "pop" : 958, "state" : "NY" } +{ "_id" : "13021", "city" : "AUBURN", "loc" : [ -76.562605, 42.929958 ], "pop" : 43447, "state" : "NY" } +{ "_id" : "13026", "city" : "AURORA", "loc" : [ -76.67749000000001, 42.747231 ], "pop" : 1557, "state" : "NY" } +{ "_id" : "13027", "city" : "BALDWINSVILLE", "loc" : [ -76.323718, 43.162039 ], "pop" : 28132, "state" : "NY" } +{ "_id" : "13028", "city" : "BERNHARDS BAY", "loc" : [ -75.937299, 43.271722 ], "pop" : 1228, "state" : "NY" } +{ "_id" : "13029", "city" : "BREWERTON", "loc" : [ -76.135132, 43.225194 ], "pop" : 4823, "state" : "NY" } +{ "_id" : "13030", "city" : "BRIDGEPORT", "loc" : [ -75.970009, 43.159015 ], "pop" : 4507, "state" : "NY" } +{ "_id" : "13031", "city" : "CAMILLUS", "loc" : [ -76.280728, 43.041651 ], "pop" : 15236, "state" : "NY" } +{ "_id" : "13032", "city" : "CANASTOTA", "loc" : [ -75.76019700000001, 43.087764 ], "pop" : 12909, "state" : "NY" } +{ "_id" : "13033", "city" : "CATO", "loc" : [ -76.564791, 43.179443 ], "pop" : 3873, "state" : "NY" } +{ "_id" : "13034", "city" : "CAYUGA", "loc" : [ -76.70240200000001, 42.914198 ], "pop" : 2357, "state" : "NY" } +{ "_id" : "13035", "city" : "CAZENOVIA", "loc" : [ -75.839229, 42.937955 ], "pop" : 7748, "state" : "NY" } +{ "_id" : "13036", "city" : "CENTRAL SQUARE", "loc" : [ -76.18485200000001, 43.308986 ], "pop" : 7720, "state" : "NY" } +{ "_id" : "13037", "city" : "CHITTENANGO", "loc" : [ -75.87684, 43.05524 ], "pop" : 8756, "state" : "NY" } +{ "_id" : "13039", "city" : "CICERO", "loc" : [ -76.09618500000001, 43.170693 ], "pop" : 12600, "state" : "NY" } +{ "_id" : "13040", "city" : "CINCINNATUS", "loc" : [ -75.903029, 42.538539 ], "pop" : 2416, "state" : "NY" } +{ "_id" : "13041", "city" : "CLAY", "loc" : [ -76.170748, 43.173734 ], "pop" : 8609, "state" : "NY" } +{ "_id" : "13042", "city" : "CLEVELAND", "loc" : [ -75.853691, 43.243199 ], "pop" : 2428, "state" : "NY" } +{ "_id" : "13044", "city" : "CONSTANTIA", "loc" : [ -76.004155, 43.272751 ], "pop" : 2603, "state" : "NY" } +{ "_id" : "13045", "city" : "CORTLAND", "loc" : [ -76.185675, 42.595175 ], "pop" : 29180, "state" : "NY" } +{ "_id" : "13050", "city" : "CUYLER", "loc" : [ -75.938367, 42.740571 ], "pop" : 920, "state" : "NY" } +{ "_id" : "13052", "city" : "DE RUYTER", "loc" : [ -75.858226, 42.749444 ], "pop" : 1914, "state" : "NY" } +{ "_id" : "13053", "city" : "DRYDEN", "loc" : [ -76.28722399999999, 42.486118 ], "pop" : 4659, "state" : "NY" } +{ "_id" : "13054", "city" : "DURHAMVILLE", "loc" : [ -75.671409, 43.157912 ], "pop" : 1470, "state" : "NY" } +{ "_id" : "13055", "city" : "EAST FREETOWN", "loc" : [ -75.998924, 42.579845 ], "pop" : 833, "state" : "NY" } +{ "_id" : "13057", "city" : "EAST SYRACUSE", "loc" : [ -76.05578, 43.073359 ], "pop" : 14722, "state" : "NY" } +{ "_id" : "13060", "city" : "ELBRIDGE", "loc" : [ -76.435164, 43.025246 ], "pop" : 1770, "state" : "NY" } +{ "_id" : "13061", "city" : "ERIEVILLE", "loc" : [ -75.754255, 42.856166 ], "pop" : 1100, "state" : "NY" } +{ "_id" : "13063", "city" : "FABIUS", "loc" : [ -75.983645, 42.853117 ], "pop" : 1785, "state" : "NY" } +{ "_id" : "13066", "city" : "FAYETTEVILLE", "loc" : [ -76.014503, 43.026774 ], "pop" : 11793, "state" : "NY" } +{ "_id" : "13068", "city" : "FREEVILLE", "loc" : [ -76.36362200000001, 42.499768 ], "pop" : 5181, "state" : "NY" } +{ "_id" : "13069", "city" : "FULTON", "loc" : [ -76.40342, 43.321108 ], "pop" : 23858, "state" : "NY" } +{ "_id" : "13071", "city" : "GENOA", "loc" : [ -76.54175499999999, 42.674624 ], "pop" : 1160, "state" : "NY" } +{ "_id" : "13072", "city" : "GEORGETOWN", "loc" : [ -75.74427900000001, 42.763059 ], "pop" : 611, "state" : "NY" } +{ "_id" : "13073", "city" : "GROTON", "loc" : [ -76.363286, 42.58549 ], "pop" : 5940, "state" : "NY" } +{ "_id" : "13074", "city" : "HANNIBAL", "loc" : [ -76.54603400000001, 43.311115 ], "pop" : 5248, "state" : "NY" } +{ "_id" : "13076", "city" : "HASTINGS", "loc" : [ -76.14770799999999, 43.35268 ], "pop" : 2259, "state" : "NY" } +{ "_id" : "13077", "city" : "HOMER", "loc" : [ -76.18783000000001, 42.672586 ], "pop" : 7192, "state" : "NY" } +{ "_id" : "13078", "city" : "JAMESVILLE", "loc" : [ -76.076571, 42.982973 ], "pop" : 8230, "state" : "NY" } +{ "_id" : "13080", "city" : "JORDAN", "loc" : [ -76.45977999999999, 43.065141 ], "pop" : 4766, "state" : "NY" } +{ "_id" : "13081", "city" : "KING FERRY", "loc" : [ -76.62160299999999, 42.66351 ], "pop" : 979, "state" : "NY" } +{ "_id" : "13082", "city" : "KIRKVILLE", "loc" : [ -75.955003, 43.098095 ], "pop" : 4798, "state" : "NY" } +{ "_id" : "13083", "city" : "LACONA", "loc" : [ -76.050335, 43.642883 ], "pop" : 2199, "state" : "NY" } +{ "_id" : "13084", "city" : "LA FAYETTE", "loc" : [ -76.106116, 42.890959 ], "pop" : 4450, "state" : "NY" } +{ "_id" : "13085", "city" : "LEBANON", "loc" : [ -75.67758499999999, 42.77451 ], "pop" : 164, "state" : "NY" } +{ "_id" : "13088", "city" : "LIVERPOOL", "loc" : [ -76.186999, 43.109925 ], "pop" : 23093, "state" : "NY" } +{ "_id" : "13090", "city" : "BAYBERRY", "loc" : [ -76.223269, 43.148048 ], "pop" : 31387, "state" : "NY" } +{ "_id" : "13092", "city" : "LOCKE", "loc" : [ -76.415436, 42.655789 ], "pop" : 2746, "state" : "NY" } +{ "_id" : "13101", "city" : "MC GRAW", "loc" : [ -76.081958, 42.594758 ], "pop" : 2511, "state" : "NY" } +{ "_id" : "13103", "city" : "MALLORY", "loc" : [ -76.089208, 43.33782 ], "pop" : 1267, "state" : "NY" } +{ "_id" : "13104", "city" : "MANLIUS", "loc" : [ -75.97034499999999, 42.990441 ], "pop" : 12754, "state" : "NY" } +{ "_id" : "13108", "city" : "MARCELLUS", "loc" : [ -76.33228, 42.982056 ], "pop" : 6077, "state" : "NY" } +{ "_id" : "13110", "city" : "MARIETTA", "loc" : [ -76.28055000000001, 42.897441 ], "pop" : 1778, "state" : "NY" } +{ "_id" : "13111", "city" : "MARTVILLE", "loc" : [ -76.628936, 43.26608 ], "pop" : 1342, "state" : "NY" } +{ "_id" : "13112", "city" : "MEMPHIS", "loc" : [ -76.40300999999999, 43.093438 ], "pop" : 1888, "state" : "NY" } +{ "_id" : "13114", "city" : "MEXICO", "loc" : [ -76.24458799999999, 43.460533 ], "pop" : 6641, "state" : "NY" } +{ "_id" : "13116", "city" : "MINOA", "loc" : [ -76.009812, 43.077212 ], "pop" : 3790, "state" : "NY" } +{ "_id" : "13118", "city" : "MORAVIA", "loc" : [ -76.39897999999999, 42.735456 ], "pop" : 6267, "state" : "NY" } +{ "_id" : "13120", "city" : "NEDROW", "loc" : [ -76.15293200000001, 42.955855 ], "pop" : 2349, "state" : "NY" } +{ "_id" : "13122", "city" : "NEW WOODSTOCK", "loc" : [ -75.86352599999999, 42.844135 ], "pop" : 842, "state" : "NY" } +{ "_id" : "13124", "city" : "NORTH PITCHER", "loc" : [ -75.81635900000001, 42.637243 ], "pop" : 160, "state" : "NY" } +{ "_id" : "13126", "city" : "OSWEGO", "loc" : [ -76.497489, 43.443836 ], "pop" : 38426, "state" : "NY" } +{ "_id" : "13131", "city" : "PARISH", "loc" : [ -76.10002299999999, 43.415295 ], "pop" : 3039, "state" : "NY" } +{ "_id" : "13132", "city" : "PENNELLVILLE", "loc" : [ -76.23946599999999, 43.260946 ], "pop" : 4566, "state" : "NY" } +{ "_id" : "13135", "city" : "PHOENIX", "loc" : [ -76.306449, 43.24679 ], "pop" : 5342, "state" : "NY" } +{ "_id" : "13136", "city" : "PITCHER", "loc" : [ -75.846464, 42.596941 ], "pop" : 678, "state" : "NY" } +{ "_id" : "13140", "city" : "PORT BYRON", "loc" : [ -76.644919, 43.042653 ], "pop" : 4391, "state" : "NY" } +{ "_id" : "13141", "city" : "PREBLE", "loc" : [ -76.214105, 42.79501 ], "pop" : 502, "state" : "NY" } +{ "_id" : "13142", "city" : "PULASKI", "loc" : [ -76.125231, 43.55617 ], "pop" : 7355, "state" : "NY" } +{ "_id" : "13143", "city" : "RED CREEK", "loc" : [ -76.714556, 43.229068 ], "pop" : 3289, "state" : "NY" } +{ "_id" : "13144", "city" : "RICHLAND", "loc" : [ -76.00291799999999, 43.577578 ], "pop" : 1267, "state" : "NY" } +{ "_id" : "13145", "city" : "SANDY CREEK", "loc" : [ -76.126439, 43.651681 ], "pop" : 801, "state" : "NY" } +{ "_id" : "13146", "city" : "SAVANNAH", "loc" : [ -76.75646999999999, 43.093439 ], "pop" : 2141, "state" : "NY" } +{ "_id" : "13147", "city" : "VENICE CENTER", "loc" : [ -76.574175, 42.778472 ], "pop" : 1520, "state" : "NY" } +{ "_id" : "13148", "city" : "SENECA FALLS", "loc" : [ -76.79253799999999, 42.909377 ], "pop" : 10987, "state" : "NY" } +{ "_id" : "13152", "city" : "SKANEATELES", "loc" : [ -76.405174, 42.925751 ], "pop" : 9182, "state" : "NY" } +{ "_id" : "13155", "city" : "SOUTH OTSELIC", "loc" : [ -75.766919, 42.66256 ], "pop" : 789, "state" : "NY" } +{ "_id" : "13156", "city" : "STERLING", "loc" : [ -76.67473099999999, 43.329578 ], "pop" : 2252, "state" : "NY" } +{ "_id" : "13158", "city" : "TRUXTON", "loc" : [ -76.018946, 42.708547 ], "pop" : 593, "state" : "NY" } +{ "_id" : "13159", "city" : "TULLY", "loc" : [ -76.13936, 42.806977 ], "pop" : 4777, "state" : "NY" } +{ "_id" : "13160", "city" : "UNION SPRINGS", "loc" : [ -76.673959, 42.833546 ], "pop" : 1984, "state" : "NY" } +{ "_id" : "13164", "city" : "WARNERS", "loc" : [ -76.290413, 43.09317 ], "pop" : 816, "state" : "NY" } +{ "_id" : "13165", "city" : "WATERLOO", "loc" : [ -76.87549799999999, 42.904515 ], "pop" : 10845, "state" : "NY" } +{ "_id" : "13166", "city" : "WEEDSPORT", "loc" : [ -76.542502, 43.048882 ], "pop" : 5847, "state" : "NY" } +{ "_id" : "13167", "city" : "WEST MONROE", "loc" : [ -76.079747, 43.288235 ], "pop" : 3369, "state" : "NY" } +{ "_id" : "13202", "city" : "SYRACUSE", "loc" : [ -76.14885599999999, 43.040988 ], "pop" : 5442, "state" : "NY" } +{ "_id" : "13203", "city" : "SYRACUSE", "loc" : [ -76.136931, 43.060703 ], "pop" : 17585, "state" : "NY" } +{ "_id" : "13204", "city" : "SYRACUSE", "loc" : [ -76.17576699999999, 43.044398 ], "pop" : 25414, "state" : "NY" } +{ "_id" : "13205", "city" : "SYRACUSE", "loc" : [ -76.14518, 43.012314 ], "pop" : 23048, "state" : "NY" } +{ "_id" : "13206", "city" : "SYRACUSE", "loc" : [ -76.110226, 43.06773 ], "pop" : 17644, "state" : "NY" } +{ "_id" : "13207", "city" : "SYRACUSE", "loc" : [ -76.16501, 43.019482 ], "pop" : 16380, "state" : "NY" } +{ "_id" : "13208", "city" : "SYRACUSE", "loc" : [ -76.148616, 43.073007 ], "pop" : 22242, "state" : "NY" } +{ "_id" : "13209", "city" : "SOLVAY", "loc" : [ -76.23844800000001, 43.078204 ], "pop" : 13467, "state" : "NY" } +{ "_id" : "13210", "city" : "SYRACUSE", "loc" : [ -76.12816599999999, 43.035414 ], "pop" : 31197, "state" : "NY" } +{ "_id" : "13211", "city" : "MATTYDALE", "loc" : [ -76.14218099999999, 43.09951 ], "pop" : 6940, "state" : "NY" } +{ "_id" : "13212", "city" : "NORTH SYRACUSE", "loc" : [ -76.13729499999999, 43.130623 ], "pop" : 22829, "state" : "NY" } +{ "_id" : "13214", "city" : "DE WITT", "loc" : [ -76.07844, 43.042529 ], "pop" : 9501, "state" : "NY" } +{ "_id" : "13215", "city" : "ONONDAGA", "loc" : [ -76.211851, 42.997544 ], "pop" : 12557, "state" : "NY" } +{ "_id" : "13219", "city" : "SYRACUSE", "loc" : [ -76.226159, 43.040943 ], "pop" : 16166, "state" : "NY" } +{ "_id" : "13224", "city" : "SYRACUSE", "loc" : [ -76.104609, 43.042134 ], "pop" : 9845, "state" : "NY" } +{ "_id" : "13301", "city" : "ALDER CREEK", "loc" : [ -75.213748, 43.415659 ], "pop" : 74, "state" : "NY" } +{ "_id" : "13302", "city" : "ALTMAR", "loc" : [ -75.971934, 43.497022 ], "pop" : 1761, "state" : "NY" } +{ "_id" : "13303", "city" : "AVA", "loc" : [ -75.450919, 43.344519 ], "pop" : 1708, "state" : "NY" } +{ "_id" : "13304", "city" : "BARNEVELD", "loc" : [ -75.16115600000001, 43.223697 ], "pop" : 1383, "state" : "NY" } +{ "_id" : "13308", "city" : "BLOSSVALE", "loc" : [ -75.687313, 43.230293 ], "pop" : 4489, "state" : "NY" } +{ "_id" : "13309", "city" : "BOONVILLE", "loc" : [ -75.34397300000001, 43.478615 ], "pop" : 5768, "state" : "NY" } +{ "_id" : "13310", "city" : "BOUCKVILLE", "loc" : [ -75.567841, 42.894024 ], "pop" : 650, "state" : "NY" } +{ "_id" : "13314", "city" : "BROOKFIELD", "loc" : [ -75.34385899999999, 42.807538 ], "pop" : 5, "state" : "NY" } +{ "_id" : "13315", "city" : "BURLINGTON FLATS", "loc" : [ -75.169044, 42.75162 ], "pop" : 1145, "state" : "NY" } +{ "_id" : "13316", "city" : "CAMDEN", "loc" : [ -75.75425799999999, 43.339197 ], "pop" : 6987, "state" : "NY" } +{ "_id" : "13317", "city" : "AMES", "loc" : [ -74.583522, 42.88239 ], "pop" : 3986, "state" : "NY" } +{ "_id" : "13318", "city" : "CASSVILLE", "loc" : [ -75.260704, 42.906931 ], "pop" : 1566, "state" : "NY" } +{ "_id" : "13319", "city" : "CHADWICKS", "loc" : [ -75.26564500000001, 43.022563 ], "pop" : 274, "state" : "NY" } +{ "_id" : "13320", "city" : "CHERRY VALLEY", "loc" : [ -74.744439, 42.782315 ], "pop" : 1642, "state" : "NY" } +{ "_id" : "13322", "city" : "CLAYVILLE", "loc" : [ -75.206126, 42.97119 ], "pop" : 641, "state" : "NY" } +{ "_id" : "13323", "city" : "CLINTON", "loc" : [ -75.38079, 43.05856 ], "pop" : 12483, "state" : "NY" } +{ "_id" : "13324", "city" : "COLD BROOK", "loc" : [ -74.997651, 43.302391 ], "pop" : 1853, "state" : "NY" } +{ "_id" : "13325", "city" : "CONSTABLEVILLE", "loc" : [ -75.458406, 43.562982 ], "pop" : 931, "state" : "NY" } +{ "_id" : "13326", "city" : "COOPERSTOWN", "loc" : [ -74.918148, 42.70319 ], "pop" : 5402, "state" : "NY" } +{ "_id" : "13327", "city" : "CROGHAN", "loc" : [ -75.354192, 43.909461 ], "pop" : 1841, "state" : "NY" } +{ "_id" : "13328", "city" : "DEANSBORO", "loc" : [ -75.438309, 42.981788 ], "pop" : 639, "state" : "NY" } +{ "_id" : "13329", "city" : "DOLGEVILLE", "loc" : [ -74.76430499999999, 43.104161 ], "pop" : 4205, "state" : "NY" } +{ "_id" : "13331", "city" : "EAGLE BAY", "loc" : [ -74.96538099999999, 43.723659 ], "pop" : 1416, "state" : "NY" } +{ "_id" : "13332", "city" : "EARLVILLE", "loc" : [ -75.541653, 42.752218 ], "pop" : 2413, "state" : "NY" } +{ "_id" : "13333", "city" : "EAST SPRINGFIELD", "loc" : [ -74.75974100000001, 42.832947 ], "pop" : 0, "state" : "NY" } +{ "_id" : "13334", "city" : "EATON", "loc" : [ -75.631359, 42.848417 ], "pop" : 1583, "state" : "NY" } +{ "_id" : "13335", "city" : "EDMESTON", "loc" : [ -75.252522, 42.730281 ], "pop" : 788, "state" : "NY" } +{ "_id" : "13337", "city" : "FLY CREEK", "loc" : [ -74.986921, 42.725177 ], "pop" : 1033, "state" : "NY" } +{ "_id" : "13338", "city" : "FORESTPORT", "loc" : [ -75.178742, 43.473651 ], "pop" : 1013, "state" : "NY" } +{ "_id" : "13339", "city" : "FORT PLAIN", "loc" : [ -74.643298, 42.937158 ], "pop" : 6144, "state" : "NY" } +{ "_id" : "13340", "city" : "FRANKFORT", "loc" : [ -75.10715500000001, 43.044041 ], "pop" : 8546, "state" : "NY" } +{ "_id" : "13342", "city" : "GARRATTSVILLE", "loc" : [ -75.23270100000001, 42.635634 ], "pop" : 293, "state" : "NY" } +{ "_id" : "13343", "city" : "GLENFIELD", "loc" : [ -75.366902, 43.732306 ], "pop" : 1909, "state" : "NY" } +{ "_id" : "13345", "city" : "GREIG", "loc" : [ -75.312393, 43.689184 ], "pop" : 456, "state" : "NY" } +{ "_id" : "13346", "city" : "HAMILTON", "loc" : [ -75.54338199999999, 42.82306 ], "pop" : 5821, "state" : "NY" } +{ "_id" : "13348", "city" : "HARTWICK", "loc" : [ -75.055009, 42.695033 ], "pop" : 1424, "state" : "NY" } +{ "_id" : "13350", "city" : "HERKIMER", "loc" : [ -74.98757000000001, 43.030696 ], "pop" : 10090, "state" : "NY" } +{ "_id" : "13353", "city" : "HOFFMEISTER", "loc" : [ -74.739974, 43.391545 ], "pop" : 106, "state" : "NY" } +{ "_id" : "13354", "city" : "HOLLAND PATENT", "loc" : [ -75.253506, 43.248406 ], "pop" : 3970, "state" : "NY" } +{ "_id" : "13355", "city" : "HUBBARDSVILLE", "loc" : [ -75.436707, 42.823663 ], "pop" : 810, "state" : "NY" } +{ "_id" : "13357", "city" : "ILION", "loc" : [ -75.04836, 43.006391 ], "pop" : 11603, "state" : "NY" } +{ "_id" : "13360", "city" : "INLET", "loc" : [ -74.784631, 43.748024 ], "pop" : 343, "state" : "NY" } +{ "_id" : "13361", "city" : "JORDANVILLE", "loc" : [ -74.820919, 42.89478 ], "pop" : 395, "state" : "NY" } +{ "_id" : "13363", "city" : "LEE CENTER", "loc" : [ -75.505532, 43.314804 ], "pop" : 2076, "state" : "NY" } +{ "_id" : "13365", "city" : "LITTLE FALLS", "loc" : [ -74.860598, 43.047371 ], "pop" : 10379, "state" : "NY" } +{ "_id" : "13367", "city" : "BEAVER RIVER", "loc" : [ -75.47537800000001, 43.801055 ], "pop" : 8238, "state" : "NY" } +{ "_id" : "13368", "city" : "LYONS FALLS", "loc" : [ -75.355312, 43.626165 ], "pop" : 1210, "state" : "NY" } +{ "_id" : "13401", "city" : "MC CONNELLSVILLE", "loc" : [ -75.652477, 43.289552 ], "pop" : 412, "state" : "NY" } +{ "_id" : "13402", "city" : "MADISON", "loc" : [ -75.50756199999999, 42.896854 ], "pop" : 1472, "state" : "NY" } +{ "_id" : "13403", "city" : "MARCY", "loc" : [ -75.278335, 43.163926 ], "pop" : 7937, "state" : "NY" } +{ "_id" : "13406", "city" : "MIDDLEVILLE", "loc" : [ -74.92397800000001, 43.136933 ], "pop" : 180, "state" : "NY" } +{ "_id" : "13407", "city" : "MOHAWK", "loc" : [ -74.985298, 42.989986 ], "pop" : 5907, "state" : "NY" } +{ "_id" : "13408", "city" : "MORRISVILLE", "loc" : [ -75.648656, 42.910805 ], "pop" : 4491, "state" : "NY" } +{ "_id" : "13409", "city" : "MUNNSVILLE", "loc" : [ -75.594032, 42.986326 ], "pop" : 2116, "state" : "NY" } +{ "_id" : "13411", "city" : "NEW BERLIN", "loc" : [ -75.34740600000001, 42.622414 ], "pop" : 2569, "state" : "NY" } +{ "_id" : "13413", "city" : "NEW HARTFORD", "loc" : [ -75.29055099999999, 43.065412 ], "pop" : 14035, "state" : "NY" } +{ "_id" : "13415", "city" : "NEW LISBON", "loc" : [ -75.32743600000001, 42.578968 ], "pop" : 19, "state" : "NY" } +{ "_id" : "13416", "city" : "NEWPORT", "loc" : [ -74.986133, 43.180002 ], "pop" : 2554, "state" : "NY" } +{ "_id" : "13417", "city" : "NEW YORK MILLS", "loc" : [ -75.29369, 43.100038 ], "pop" : 3646, "state" : "NY" } +{ "_id" : "13418", "city" : "NORTH BROOKFIELD", "loc" : [ -75.381489, 42.850088 ], "pop" : 258, "state" : "NY" } +{ "_id" : "13420", "city" : "OLD FORGE", "loc" : [ -74.893511, 43.74347 ], "pop" : 221, "state" : "NY" } +{ "_id" : "13421", "city" : "ONEIDA", "loc" : [ -75.650814, 43.086248 ], "pop" : 11876, "state" : "NY" } +{ "_id" : "13424", "city" : "ORISKANY", "loc" : [ -75.34343699999999, 43.152427 ], "pop" : 3566, "state" : "NY" } +{ "_id" : "13425", "city" : "ORISKANY FALLS", "loc" : [ -75.483807, 42.957585 ], "pop" : 2192, "state" : "NY" } +{ "_id" : "13428", "city" : "PALATINE BRIDGE", "loc" : [ -74.570825, 42.922119 ], "pop" : 1738, "state" : "NY" } +{ "_id" : "13431", "city" : "POLAND", "loc" : [ -75.07313000000001, 43.211458 ], "pop" : 1789, "state" : "NY" } +{ "_id" : "13433", "city" : "PORT LEYDEN", "loc" : [ -75.326257, 43.580245 ], "pop" : 1951, "state" : "NY" } +{ "_id" : "13436", "city" : "RAQUETTE LAKE", "loc" : [ -74.537959, 43.866224 ], "pop" : 0, "state" : "NY" } +{ "_id" : "13437", "city" : "REDFIELD", "loc" : [ -75.82423, 43.565794 ], "pop" : 482, "state" : "NY" } +{ "_id" : "13438", "city" : "REMSEN", "loc" : [ -75.161618, 43.338456 ], "pop" : 4400, "state" : "NY" } +{ "_id" : "13439", "city" : "RICHFIELD SPRING", "loc" : [ -74.992214, 42.850298 ], "pop" : 3825, "state" : "NY" } +{ "_id" : "13440", "city" : "ROME", "loc" : [ -75.449758, 43.219349 ], "pop" : 56424, "state" : "NY" } +{ "_id" : "13450", "city" : "ROSEBOOM", "loc" : [ -74.74160999999999, 42.788246 ], "pop" : 8, "state" : "NY" } +{ "_id" : "13452", "city" : "SAINT JOHNSVILLE", "loc" : [ -74.64604, 43.016995 ], "pop" : 4992, "state" : "NY" } +{ "_id" : "13454", "city" : "SALISBURY CENTER", "loc" : [ -74.78093200000001, 43.162509 ], "pop" : 896, "state" : "NY" } +{ "_id" : "13456", "city" : "SAUQUOIT", "loc" : [ -75.26259, 43.007291 ], "pop" : 5652, "state" : "NY" } +{ "_id" : "13459", "city" : "SHARON SPRINGS", "loc" : [ -74.591911, 42.763357 ], "pop" : 2919, "state" : "NY" } +{ "_id" : "13460", "city" : "SHERBURNE", "loc" : [ -75.48302700000001, 42.685885 ], "pop" : 4013, "state" : "NY" } +{ "_id" : "13461", "city" : "SHERRILL", "loc" : [ -75.598975, 43.070397 ], "pop" : 2864, "state" : "NY" } +{ "_id" : "13464", "city" : "SMYRNA", "loc" : [ -75.61212399999999, 42.689565 ], "pop" : 1209, "state" : "NY" } +{ "_id" : "13466", "city" : "SOUTH EDMESTON", "loc" : [ -75.262919, 42.676754 ], "pop" : 1224, "state" : "NY" } +{ "_id" : "13468", "city" : "SPRINGFIELD CENT", "loc" : [ -74.938051, 42.850106 ], "pop" : 1402, "state" : "NY" } +{ "_id" : "13469", "city" : "STITTVILLE", "loc" : [ -75.28985400000001, 43.222889 ], "pop" : 567, "state" : "NY" } +{ "_id" : "13470", "city" : "STRATFORD", "loc" : [ -74.67678600000001, 43.179101 ], "pop" : 773, "state" : "NY" } +{ "_id" : "13471", "city" : "TABERG", "loc" : [ -75.602706, 43.336571 ], "pop" : 2393, "state" : "NY" } +{ "_id" : "13473", "city" : "TURIN", "loc" : [ -75.41319900000001, 43.644074 ], "pop" : 1004, "state" : "NY" } +{ "_id" : "13475", "city" : "VAN HORNESVILLE", "loc" : [ -74.83466199999999, 42.894812 ], "pop" : 40, "state" : "NY" } +{ "_id" : "13476", "city" : "VERNON", "loc" : [ -75.56272, 43.094509 ], "pop" : 4118, "state" : "NY" } +{ "_id" : "13477", "city" : "VERNON CENTER", "loc" : [ -75.521028, 43.044309 ], "pop" : 1440, "state" : "NY" } +{ "_id" : "13478", "city" : "VERONA", "loc" : [ -75.572399, 43.147311 ], "pop" : 2325, "state" : "NY" } +{ "_id" : "13480", "city" : "WATERVILLE", "loc" : [ -75.381466, 42.933244 ], "pop" : 4059, "state" : "NY" } +{ "_id" : "13482", "city" : "WEST BURLINGTON", "loc" : [ -75.190603, 42.706229 ], "pop" : 22, "state" : "NY" } +{ "_id" : "13483", "city" : "WESTDALE", "loc" : [ -75.822587, 43.411671 ], "pop" : 161, "state" : "NY" } +{ "_id" : "13485", "city" : "WEST EDMESTON", "loc" : [ -75.30372300000001, 42.794543 ], "pop" : 1337, "state" : "NY" } +{ "_id" : "13486", "city" : "WESTERNVILLE", "loc" : [ -75.315118, 43.329413 ], "pop" : 657, "state" : "NY" } +{ "_id" : "13488", "city" : "WESTFORD", "loc" : [ -75.10037800000001, 42.503512 ], "pop" : 253, "state" : "NY" } +{ "_id" : "13489", "city" : "WEST LEYDEN", "loc" : [ -75.51270700000001, 43.459713 ], "pop" : 500, "state" : "NY" } +{ "_id" : "13490", "city" : "WESTMORELAND", "loc" : [ -75.453259, 43.101686 ], "pop" : 904, "state" : "NY" } +{ "_id" : "13491", "city" : "WEST WINFIELD", "loc" : [ -75.183491, 42.882566 ], "pop" : 3825, "state" : "NY" } +{ "_id" : "13492", "city" : "WHITESBORO", "loc" : [ -75.309479, 43.115805 ], "pop" : 10411, "state" : "NY" } +{ "_id" : "13493", "city" : "WILLIAMSTOWN", "loc" : [ -75.904411, 43.410559 ], "pop" : 1798, "state" : "NY" } +{ "_id" : "13494", "city" : "WOODGATE", "loc" : [ -75.119111, 43.54881 ], "pop" : 169, "state" : "NY" } +{ "_id" : "13495", "city" : "YORKVILLE", "loc" : [ -75.275565, 43.111582 ], "pop" : 2482, "state" : "NY" } +{ "_id" : "13501", "city" : "UTICA", "loc" : [ -75.23146300000001, 43.087112 ], "pop" : 40223, "state" : "NY" } +{ "_id" : "13502", "city" : "UTICA", "loc" : [ -75.23138299999999, 43.106723 ], "pop" : 36632, "state" : "NY" } +{ "_id" : "13601", "city" : "WATERTOWN", "loc" : [ -75.912212, 43.974258 ], "pop" : 39515, "state" : "NY" } +{ "_id" : "13602", "city" : "FORT DRUM", "loc" : [ -75.753972, 44.035434 ], "pop" : 11895, "state" : "NY" } +{ "_id" : "13603", "city" : "FORT DRUM", "loc" : [ -75.791884, 44.072122 ], "pop" : 30, "state" : "NY" } +{ "_id" : "13605", "city" : "SMITHVILLE", "loc" : [ -76.05430200000001, 43.81614 ], "pop" : 4489, "state" : "NY" } +{ "_id" : "13606", "city" : "ADAMS CENTER", "loc" : [ -76.00415, 43.863106 ], "pop" : 2649, "state" : "NY" } +{ "_id" : "13607", "city" : "POINT VIVIAN", "loc" : [ -75.93061899999999, 44.326982 ], "pop" : 2024, "state" : "NY" } +{ "_id" : "13608", "city" : "ANTWERP", "loc" : [ -75.60048399999999, 44.235775 ], "pop" : 1830, "state" : "NY" } +{ "_id" : "13611", "city" : "BELLEVILLE", "loc" : [ -76.115053, 43.785373 ], "pop" : 72, "state" : "NY" } +{ "_id" : "13612", "city" : "BLACK RIVER", "loc" : [ -75.795777, 44.004156 ], "pop" : 3651, "state" : "NY" } +{ "_id" : "13613", "city" : "BRASHER FALLS", "loc" : [ -74.747303, 44.846718 ], "pop" : 1950, "state" : "NY" } +{ "_id" : "13614", "city" : "BRIER HILL", "loc" : [ -75.672203, 44.552542 ], "pop" : 481, "state" : "NY" } +{ "_id" : "13616", "city" : "CALCIUM", "loc" : [ -75.849884, 44.026484 ], "pop" : 1839, "state" : "NY" } +{ "_id" : "13617", "city" : "CANTON", "loc" : [ -75.162792, 44.592442 ], "pop" : 11781, "state" : "NY" } +{ "_id" : "13618", "city" : "CAPE VINCENT", "loc" : [ -76.31644300000001, 44.124419 ], "pop" : 1207, "state" : "NY" } +{ "_id" : "13619", "city" : "CARTHAGE", "loc" : [ -75.61600799999999, 43.981039 ], "pop" : 11741, "state" : "NY" } +{ "_id" : "13620", "city" : "CASTORLAND", "loc" : [ -75.460432, 43.88432 ], "pop" : 2335, "state" : "NY" } +{ "_id" : "13621", "city" : "CHASE MILLS", "loc" : [ -75.073002, 44.867246 ], "pop" : 431, "state" : "NY" } +{ "_id" : "13622", "city" : "CHAUMONT", "loc" : [ -76.12316300000001, 44.08481 ], "pop" : 2329, "state" : "NY" } +{ "_id" : "13624", "city" : "FRONTENAC", "loc" : [ -76.107056, 44.217016 ], "pop" : 5480, "state" : "NY" } +{ "_id" : "13625", "city" : "COLTON", "loc" : [ -74.932672, 44.50156 ], "pop" : 2382, "state" : "NY" } +{ "_id" : "13626", "city" : "COPENHAGEN", "loc" : [ -75.683913, 43.880136 ], "pop" : 1891, "state" : "NY" } +{ "_id" : "13630", "city" : "DE KALB JUNCTION", "loc" : [ -75.287088, 44.489551 ], "pop" : 1320, "state" : "NY" } +{ "_id" : "13633", "city" : "DE PEYSTER", "loc" : [ -75.43281399999999, 44.541341 ], "pop" : 95, "state" : "NY" } +{ "_id" : "13634", "city" : "DEXTER", "loc" : [ -76.06498999999999, 44.006923 ], "pop" : 3753, "state" : "NY" } +{ "_id" : "13635", "city" : "EDWARDS", "loc" : [ -75.25222599999999, 44.311048 ], "pop" : 1069, "state" : "NY" } +{ "_id" : "13636", "city" : "ELLISBURG", "loc" : [ -76.125871, 43.737202 ], "pop" : 372, "state" : "NY" } +{ "_id" : "13637", "city" : "EVANS MILLS", "loc" : [ -75.830516, 44.081668 ], "pop" : 3041, "state" : "NY" } +{ "_id" : "13638", "city" : "FELTS MILLS", "loc" : [ -75.752443, 44.020374 ], "pop" : 384, "state" : "NY" } +{ "_id" : "13642", "city" : "GOUVERNEUR", "loc" : [ -75.46506100000001, 44.328302 ], "pop" : 8425, "state" : "NY" } +{ "_id" : "13646", "city" : "HAMMOND", "loc" : [ -75.672749, 44.450155 ], "pop" : 2287, "state" : "NY" } +{ "_id" : "13648", "city" : "HARRISVILLE", "loc" : [ -75.32515100000001, 44.161294 ], "pop" : 2395, "state" : "NY" } +{ "_id" : "13650", "city" : "HENDERSON", "loc" : [ -76.235212, 43.846742 ], "pop" : 300, "state" : "NY" } +{ "_id" : "13652", "city" : "HERMON", "loc" : [ -75.19866399999999, 44.444845 ], "pop" : 1636, "state" : "NY" } +{ "_id" : "13654", "city" : "HEUVELTON", "loc" : [ -75.420345, 44.593034 ], "pop" : 2487, "state" : "NY" } +{ "_id" : "13655", "city" : "HOGANSBURG", "loc" : [ -74.662649, 44.982511 ], "pop" : 1774, "state" : "NY" } +{ "_id" : "13656", "city" : "LA FARGEVILLE", "loc" : [ -75.956902, 44.198709 ], "pop" : 2443, "state" : "NY" } +{ "_id" : "13658", "city" : "LISBON", "loc" : [ -75.269364, 44.718424 ], "pop" : 1265, "state" : "NY" } +{ "_id" : "13659", "city" : "LORRAINE", "loc" : [ -75.905339, 43.756845 ], "pop" : 462, "state" : "NY" } +{ "_id" : "13660", "city" : "MADRID", "loc" : [ -75.14134, 44.768978 ], "pop" : 1840, "state" : "NY" } +{ "_id" : "13661", "city" : "MANNSVILLE", "loc" : [ -76.08203, 43.717905 ], "pop" : 1750, "state" : "NY" } +{ "_id" : "13662", "city" : "MASSENA", "loc" : [ -74.886205, 44.932411 ], "pop" : 16145, "state" : "NY" } +{ "_id" : "13665", "city" : "NATURAL BRIDGE", "loc" : [ -75.503883, 44.062982 ], "pop" : 954, "state" : "NY" } +{ "_id" : "13666", "city" : "NEWTON FALLS", "loc" : [ -74.98456, 44.198584 ], "pop" : 351, "state" : "NY" } +{ "_id" : "13667", "city" : "NORFOLK", "loc" : [ -74.957736, 44.84235 ], "pop" : 4313, "state" : "NY" } +{ "_id" : "13668", "city" : "NORWOOD", "loc" : [ -74.999188, 44.747193 ], "pop" : 4305, "state" : "NY" } +{ "_id" : "13669", "city" : "OGDENSBURG", "loc" : [ -75.477403, 44.690203 ], "pop" : 19659, "state" : "NY" } +{ "_id" : "13670", "city" : "OSWEGATCHIE", "loc" : [ -75.06594699999999, 44.193328 ], "pop" : 287, "state" : "NY" } +{ "_id" : "13672", "city" : "PARISHVILLE", "loc" : [ -74.794062, 44.592655 ], "pop" : 300, "state" : "NY" } +{ "_id" : "13673", "city" : "PHILADELPHIA", "loc" : [ -75.709917, 44.158896 ], "pop" : 2393, "state" : "NY" } +{ "_id" : "13675", "city" : "PLESSIS", "loc" : [ -75.849577, 44.277364 ], "pop" : 111, "state" : "NY" } +{ "_id" : "13676", "city" : "POTSDAM", "loc" : [ -74.968076, 44.659246 ], "pop" : 16342, "state" : "NY" } +{ "_id" : "13679", "city" : "REDWOOD", "loc" : [ -75.814975, 44.321077 ], "pop" : 1735, "state" : "NY" } +{ "_id" : "13680", "city" : "RENSSELAER FALLS", "loc" : [ -75.32261, 44.590635 ], "pop" : 1027, "state" : "NY" } +{ "_id" : "13681", "city" : "RICHVILLE", "loc" : [ -75.402455, 44.40454 ], "pop" : 1502, "state" : "NY" } +{ "_id" : "13682", "city" : "RODMAN", "loc" : [ -75.87187900000001, 43.862217 ], "pop" : 1097, "state" : "NY" } +{ "_id" : "13684", "city" : "DEGRASSE", "loc" : [ -75.113778, 44.380668 ], "pop" : 717, "state" : "NY" } +{ "_id" : "13685", "city" : "SACKETS HARBOR", "loc" : [ -76.105039, 43.93983 ], "pop" : 1943, "state" : "NY" } +{ "_id" : "13687", "city" : "SOUTH COLTON", "loc" : [ -74.860726, 44.504097 ], "pop" : 169, "state" : "NY" } +{ "_id" : "13690", "city" : "STAR LAKE", "loc" : [ -75.03301500000001, 44.157762 ], "pop" : 1108, "state" : "NY" } +{ "_id" : "13691", "city" : "THERESA", "loc" : [ -75.801419, 44.211288 ], "pop" : 2558, "state" : "NY" } +{ "_id" : "13693", "city" : "THREE MILE BAY", "loc" : [ -76.26893, 44.055102 ], "pop" : 250, "state" : "NY" } +{ "_id" : "13694", "city" : "WADDINGTON", "loc" : [ -75.204887, 44.856373 ], "pop" : 1380, "state" : "NY" } +{ "_id" : "13695", "city" : "WANAKENA", "loc" : [ -75.090765, 44.2184 ], "pop" : 705, "state" : "NY" } +{ "_id" : "13696", "city" : "WEST STOCKHOLM", "loc" : [ -74.891932, 44.728951 ], "pop" : 301, "state" : "NY" } +{ "_id" : "13697", "city" : "WINTHROP", "loc" : [ -74.806586, 44.758289 ], "pop" : 2805, "state" : "NY" } +{ "_id" : "13698", "city" : "WOODVILLE", "loc" : [ -76.17200200000001, 43.781245 ], "pop" : 847, "state" : "NY" } +{ "_id" : "13730", "city" : "AFTON", "loc" : [ -75.536604, 42.241737 ], "pop" : 2801, "state" : "NY" } +{ "_id" : "13731", "city" : "ANDES", "loc" : [ -74.788726, 42.156925 ], "pop" : 985, "state" : "NY" } +{ "_id" : "13732", "city" : "APALACHIN", "loc" : [ -76.15194, 42.055579 ], "pop" : 8712, "state" : "NY" } +{ "_id" : "13733", "city" : "BAINBRIDGE", "loc" : [ -75.489411, 42.311975 ], "pop" : 5073, "state" : "NY" } +{ "_id" : "13734", "city" : "BARTON", "loc" : [ -76.398349, 42.069534 ], "pop" : 2081, "state" : "NY" } +{ "_id" : "13736", "city" : "BERKSHIRE", "loc" : [ -76.192008, 42.307435 ], "pop" : 2652, "state" : "NY" } +{ "_id" : "13739", "city" : "BLOOMVILLE", "loc" : [ -74.807118, 42.352236 ], "pop" : 1022, "state" : "NY" } +{ "_id" : "13740", "city" : "BOVINA CENTER", "loc" : [ -74.76611200000001, 42.27094 ], "pop" : 492, "state" : "NY" } +{ "_id" : "13743", "city" : "CANDOR", "loc" : [ -76.332196, 42.206274 ], "pop" : 4850, "state" : "NY" } +{ "_id" : "13744", "city" : "CASTLE CREEK", "loc" : [ -75.90874599999999, 42.256805 ], "pop" : 581, "state" : "NY" } +{ "_id" : "13746", "city" : "CHENANGO FORKS", "loc" : [ -75.824236, 42.263659 ], "pop" : 3833, "state" : "NY" } +{ "_id" : "13748", "city" : "CONKLIN", "loc" : [ -75.807624, 42.045429 ], "pop" : 4058, "state" : "NY" } +{ "_id" : "13750", "city" : "DAVENPORT", "loc" : [ -74.83570899999999, 42.471081 ], "pop" : 777, "state" : "NY" } +{ "_id" : "13751", "city" : "DAVENPORT CENTER", "loc" : [ -74.906975, 42.452303 ], "pop" : 62, "state" : "NY" } +{ "_id" : "13752", "city" : "DE LANCEY", "loc" : [ -74.922899, 42.188984 ], "pop" : 785, "state" : "NY" } +{ "_id" : "13753", "city" : "MEREDITH", "loc" : [ -74.92282299999999, 42.287851 ], "pop" : 5399, "state" : "NY" } +{ "_id" : "13754", "city" : "DEPOSIT", "loc" : [ -75.42874500000001, 42.066581 ], "pop" : 3047, "state" : "NY" } +{ "_id" : "13755", "city" : "DOWNSVILLE", "loc" : [ -75.015216, 42.071634 ], "pop" : 615, "state" : "NY" } +{ "_id" : "13756", "city" : "EAST BRANCH", "loc" : [ -75.12518900000001, 41.984366 ], "pop" : 839, "state" : "NY" } +{ "_id" : "13757", "city" : "EAST MEREDITH", "loc" : [ -74.89869899999999, 42.410098 ], "pop" : 1478, "state" : "NY" } +{ "_id" : "13760", "city" : "ENDWELL", "loc" : [ -76.056927, 42.114089 ], "pop" : 46236, "state" : "NY" } +{ "_id" : "13775", "city" : "FRANKLIN", "loc" : [ -75.148475, 42.342117 ], "pop" : 1807, "state" : "NY" } +{ "_id" : "13776", "city" : "GILBERTSVILLE", "loc" : [ -75.360929, 42.432951 ], "pop" : 10, "state" : "NY" } +{ "_id" : "13777", "city" : "GLEN AUBREY", "loc" : [ -75.98054399999999, 42.257289 ], "pop" : 1380, "state" : "NY" } +{ "_id" : "13778", "city" : "GREENE", "loc" : [ -75.75954, 42.337301 ], "pop" : 5025, "state" : "NY" } +{ "_id" : "13780", "city" : "GUILFORD", "loc" : [ -75.48231800000001, 42.426901 ], "pop" : 738, "state" : "NY" } +{ "_id" : "13782", "city" : "HAMDEN", "loc" : [ -74.998391, 42.17873 ], "pop" : 928, "state" : "NY" } +{ "_id" : "13783", "city" : "CADOSIA", "loc" : [ -75.265306, 41.959667 ], "pop" : 2766, "state" : "NY" } +{ "_id" : "13786", "city" : "HARPERSFIELD", "loc" : [ -74.687059, 42.449901 ], "pop" : 309, "state" : "NY" } +{ "_id" : "13787", "city" : "HARPURSVILLE", "loc" : [ -75.654538, 42.18232 ], "pop" : 4349, "state" : "NY" } +{ "_id" : "13788", "city" : "HOBART", "loc" : [ -74.675889, 42.359409 ], "pop" : 975, "state" : "NY" } +{ "_id" : "13790", "city" : "JOHNSON CITY", "loc" : [ -75.968492, 42.126683 ], "pop" : 20788, "state" : "NY" } +{ "_id" : "13795", "city" : "KIRKWOOD", "loc" : [ -75.796711, 42.069463 ], "pop" : 4133, "state" : "NY" } +{ "_id" : "13796", "city" : "LAURENS", "loc" : [ -75.12794700000001, 42.538261 ], "pop" : 1703, "state" : "NY" } +{ "_id" : "13797", "city" : "LISLE", "loc" : [ -76.030237, 42.340923 ], "pop" : 2331, "state" : "NY" } +{ "_id" : "13801", "city" : "MC DONOUGH", "loc" : [ -75.762305, 42.506807 ], "pop" : 881, "state" : "NY" } +{ "_id" : "13802", "city" : "MAINE", "loc" : [ -76.05952600000001, 42.196204 ], "pop" : 254, "state" : "NY" } +{ "_id" : "13803", "city" : "MARATHON", "loc" : [ -76.039526, 42.452725 ], "pop" : 3586, "state" : "NY" } +{ "_id" : "13804", "city" : "MASONVILLE", "loc" : [ -75.215485, 42.262346 ], "pop" : 15, "state" : "NY" } +{ "_id" : "13806", "city" : "MERIDALE", "loc" : [ -74.98025800000001, 42.377987 ], "pop" : 16, "state" : "NY" } +{ "_id" : "13807", "city" : "MILFORD", "loc" : [ -74.968498, 42.614801 ], "pop" : 1409, "state" : "NY" } +{ "_id" : "13808", "city" : "MORRIS", "loc" : [ -75.244764, 42.547807 ], "pop" : 1359, "state" : "NY" } +{ "_id" : "13809", "city" : "MOUNT UPTON", "loc" : [ -75.400268, 42.408064 ], "pop" : 1462, "state" : "NY" } +{ "_id" : "13810", "city" : "MOUNT VISION", "loc" : [ -75.126366, 42.606763 ], "pop" : 1261, "state" : "NY" } +{ "_id" : "13811", "city" : "NEWARK VALLEY", "loc" : [ -76.16248, 42.228136 ], "pop" : 4968, "state" : "NY" } +{ "_id" : "13812", "city" : "NICHOLS", "loc" : [ -76.36103900000001, 42.031961 ], "pop" : 2888, "state" : "NY" } +{ "_id" : "13813", "city" : "NINEVEH", "loc" : [ -75.54840900000001, 42.162481 ], "pop" : 975, "state" : "NY" } +{ "_id" : "13815", "city" : "NORWICH", "loc" : [ -75.52743100000001, 42.54145 ], "pop" : 15380, "state" : "NY" } +{ "_id" : "13820", "city" : "ONEONTA", "loc" : [ -75.049072, 42.462453 ], "pop" : 18196, "state" : "NY" } +{ "_id" : "13825", "city" : "OTEGO", "loc" : [ -75.207883, 42.41333 ], "pop" : 5075, "state" : "NY" } +{ "_id" : "13826", "city" : "OUAQUAGA", "loc" : [ -75.647351, 42.119293 ], "pop" : 75, "state" : "NY" } +{ "_id" : "13827", "city" : "OWEGO", "loc" : [ -76.252797, 42.113809 ], "pop" : 11378, "state" : "NY" } +{ "_id" : "13830", "city" : "BRISBEN", "loc" : [ -75.606256, 42.443375 ], "pop" : 5086, "state" : "NY" } +{ "_id" : "13832", "city" : "PLYMOUTH", "loc" : [ -75.61716300000001, 42.633592 ], "pop" : 445, "state" : "NY" } +{ "_id" : "13833", "city" : "SANITARIA SPRING", "loc" : [ -75.790978, 42.195735 ], "pop" : 4777, "state" : "NY" } +{ "_id" : "13834", "city" : "PORTLANDVILLE", "loc" : [ -74.97605900000001, 42.510303 ], "pop" : 916, "state" : "NY" } +{ "_id" : "13835", "city" : "RICHFORD", "loc" : [ -76.18650100000001, 42.394521 ], "pop" : 1383, "state" : "NY" } +{ "_id" : "13838", "city" : "SIDNEY", "loc" : [ -75.3908, 42.307368 ], "pop" : 4946, "state" : "NY" } +{ "_id" : "13839", "city" : "SIDNEY CENTER", "loc" : [ -75.287057, 42.244085 ], "pop" : 2020, "state" : "NY" } +{ "_id" : "13841", "city" : "SMITHVILLE FLATS", "loc" : [ -75.823719, 42.398894 ], "pop" : 484, "state" : "NY" } +{ "_id" : "13842", "city" : "SOUTH KORTRIGHT", "loc" : [ -74.72590099999999, 42.376994 ], "pop" : 253, "state" : "NY" } +{ "_id" : "13843", "city" : "SOUTH NEW BERLIN", "loc" : [ -75.35249, 42.530569 ], "pop" : 2702, "state" : "NY" } +{ "_id" : "13844", "city" : "SOUTH PLYMOUTH", "loc" : [ -75.633, 42.605254 ], "pop" : 510, "state" : "NY" } +{ "_id" : "13846", "city" : "TREADWELL", "loc" : [ -75.05875399999999, 42.362963 ], "pop" : 60, "state" : "NY" } +{ "_id" : "13849", "city" : "UNADILLA", "loc" : [ -75.336589, 42.325199 ], "pop" : 4027, "state" : "NY" } +{ "_id" : "13850", "city" : "VESTAL", "loc" : [ -76.011757, 42.077106 ], "pop" : 27686, "state" : "NY" } +{ "_id" : "13856", "city" : "WALTON", "loc" : [ -75.153177, 42.175647 ], "pop" : 7282, "state" : "NY" } +{ "_id" : "13859", "city" : "WELLS BRIDGE", "loc" : [ -75.25656499999999, 42.357973 ], "pop" : 232, "state" : "NY" } +{ "_id" : "13861", "city" : "WEST ONEONTA", "loc" : [ -75.09568899999999, 42.453854 ], "pop" : 3471, "state" : "NY" } +{ "_id" : "13862", "city" : "WHITNEY POINT", "loc" : [ -75.952231, 42.338449 ], "pop" : 4105, "state" : "NY" } +{ "_id" : "13863", "city" : "WILLET", "loc" : [ -75.90143399999999, 42.452044 ], "pop" : 188, "state" : "NY" } +{ "_id" : "13864", "city" : "WILLSEYVILLE", "loc" : [ -76.38972099999999, 42.302915 ], "pop" : 697, "state" : "NY" } +{ "_id" : "13865", "city" : "WINDSOR", "loc" : [ -75.672828, 42.074482 ], "pop" : 6820, "state" : "NY" } +{ "_id" : "13901", "city" : "BINGHAMTON", "loc" : [ -75.886517, 42.146307 ], "pop" : 21666, "state" : "NY" } +{ "_id" : "13903", "city" : "BINGHAMTON", "loc" : [ -75.897676, 42.081102 ], "pop" : 20353, "state" : "NY" } +{ "_id" : "13904", "city" : "BINGHAMTON", "loc" : [ -75.865269, 42.11714 ], "pop" : 10257, "state" : "NY" } +{ "_id" : "13905", "city" : "BINGHAMTON", "loc" : [ -75.930865, 42.115051 ], "pop" : 30741, "state" : "NY" } +{ "_id" : "14001", "city" : "AKRON", "loc" : [ -78.508365, 43.024944 ], "pop" : 7924, "state" : "NY" } +{ "_id" : "14003", "city" : "ALABAMA", "loc" : [ -78.385231, 43.071888 ], "pop" : 68, "state" : "NY" } +{ "_id" : "14004", "city" : "ALDEN", "loc" : [ -78.525707, 42.89839 ], "pop" : 12711, "state" : "NY" } +{ "_id" : "14005", "city" : "ALEXANDER", "loc" : [ -78.25888999999999, 42.915851 ], "pop" : 1692, "state" : "NY" } +{ "_id" : "14006", "city" : "ANGOLA", "loc" : [ -79.049651, 42.636581 ], "pop" : 11509, "state" : "NY" } +{ "_id" : "14008", "city" : "APPLETON", "loc" : [ -78.63721700000001, 43.310535 ], "pop" : 940, "state" : "NY" } +{ "_id" : "14009", "city" : "ARCADE", "loc" : [ -78.41341799999999, 42.562995 ], "pop" : 4898, "state" : "NY" } +{ "_id" : "14011", "city" : "ATTICA", "loc" : [ -78.279826, 42.849918 ], "pop" : 9372, "state" : "NY" } +{ "_id" : "14012", "city" : "BARKER", "loc" : [ -78.54200400000001, 43.336779 ], "pop" : 2441, "state" : "NY" } +{ "_id" : "14013", "city" : "BASOM", "loc" : [ -78.395143, 43.080724 ], "pop" : 2062, "state" : "NY" } +{ "_id" : "14020", "city" : "BATAVIA", "loc" : [ -78.192869, 43.000316 ], "pop" : 22835, "state" : "NY" } +{ "_id" : "14024", "city" : "BLISS", "loc" : [ -78.258084, 42.579936 ], "pop" : 1498, "state" : "NY" } +{ "_id" : "14025", "city" : "BOSTON", "loc" : [ -78.73909, 42.631384 ], "pop" : 2617, "state" : "NY" } +{ "_id" : "14026", "city" : "BOWMANSVILLE", "loc" : [ -78.68296100000001, 42.947826 ], "pop" : 285, "state" : "NY" } +{ "_id" : "14028", "city" : "BURT", "loc" : [ -78.714097, 43.322089 ], "pop" : 2363, "state" : "NY" } +{ "_id" : "14030", "city" : "CHAFFEE", "loc" : [ -78.502543, 42.560492 ], "pop" : 1481, "state" : "NY" } +{ "_id" : "14031", "city" : "CLARENCE", "loc" : [ -78.61622800000001, 42.980965 ], "pop" : 7712, "state" : "NY" } +{ "_id" : "14032", "city" : "CLARENCE CENTER", "loc" : [ -78.63903000000001, 43.0362 ], "pop" : 3996, "state" : "NY" } +{ "_id" : "14033", "city" : "COLDEN", "loc" : [ -78.692078, 42.655052 ], "pop" : 2380, "state" : "NY" } +{ "_id" : "14034", "city" : "COLLINS", "loc" : [ -78.892974, 42.500082 ], "pop" : 2194, "state" : "NY" } +{ "_id" : "14036", "city" : "CORFU", "loc" : [ -78.392906, 42.977734 ], "pop" : 4841, "state" : "NY" } +{ "_id" : "14037", "city" : "COWLESVILLE", "loc" : [ -78.44813600000001, 42.811245 ], "pop" : 1017, "state" : "NY" } +{ "_id" : "14039", "city" : "DALE", "loc" : [ -78.174865, 42.826284 ], "pop" : 72, "state" : "NY" } +{ "_id" : "14040", "city" : "DARIEN CENTER", "loc" : [ -78.387782, 42.894806 ], "pop" : 1817, "state" : "NY" } +{ "_id" : "14041", "city" : "DAYTON", "loc" : [ -78.981842, 42.423075 ], "pop" : 246, "state" : "NY" } +{ "_id" : "14042", "city" : "DELEVAN", "loc" : [ -78.479326, 42.492598 ], "pop" : 4516, "state" : "NY" } +{ "_id" : "14043", "city" : "DEPEW", "loc" : [ -78.704052, 42.904973 ], "pop" : 26460, "state" : "NY" } +{ "_id" : "14047", "city" : "DERBY", "loc" : [ -78.98336500000001, 42.697445 ], "pop" : 6436, "state" : "NY" } +{ "_id" : "14048", "city" : "VAN BUREN BAY", "loc" : [ -79.32936599999999, 42.475907 ], "pop" : 20303, "state" : "NY" } +{ "_id" : "14051", "city" : "SWORMVILLE", "loc" : [ -78.705035, 43.029168 ], "pop" : 12714, "state" : "NY" } +{ "_id" : "14052", "city" : "EAST AURORA", "loc" : [ -78.601992, 42.770138 ], "pop" : 17244, "state" : "NY" } +{ "_id" : "14054", "city" : "EAST BETHANY", "loc" : [ -78.13420600000001, 42.916619 ], "pop" : 1569, "state" : "NY" } +{ "_id" : "14055", "city" : "EAST CONCORD", "loc" : [ -78.610972, 42.546585 ], "pop" : 1216, "state" : "NY" } +{ "_id" : "14057", "city" : "EDEN", "loc" : [ -78.878077, 42.650552 ], "pop" : 7427, "state" : "NY" } +{ "_id" : "14058", "city" : "ELBA", "loc" : [ -78.170383, 43.089739 ], "pop" : 2331, "state" : "NY" } +{ "_id" : "14059", "city" : "ELMA", "loc" : [ -78.63425700000001, 42.834002 ], "pop" : 8130, "state" : "NY" } +{ "_id" : "14060", "city" : "FARMERSVILLE STA", "loc" : [ -78.291533, 42.44827 ], "pop" : 395, "state" : "NY" } +{ "_id" : "14062", "city" : "FORESTVILLE", "loc" : [ -79.160743, 42.448229 ], "pop" : 2858, "state" : "NY" } +{ "_id" : "14063", "city" : "FREDONIA", "loc" : [ -79.33391399999999, 42.433345 ], "pop" : 10738, "state" : "NY" } +{ "_id" : "14065", "city" : "FREEDOM", "loc" : [ -78.35012999999999, 42.489693 ], "pop" : 2001, "state" : "NY" } +{ "_id" : "14066", "city" : "GAINESVILLE", "loc" : [ -78.17951600000001, 42.61897 ], "pop" : 1536, "state" : "NY" } +{ "_id" : "14067", "city" : "GASPORT", "loc" : [ -78.57453599999999, 43.210587 ], "pop" : 6010, "state" : "NY" } +{ "_id" : "14068", "city" : "GETZVILLE", "loc" : [ -78.753184, 43.023989 ], "pop" : 5685, "state" : "NY" } +{ "_id" : "14069", "city" : "GLENWOOD", "loc" : [ -78.638634, 42.600094 ], "pop" : 632, "state" : "NY" } +{ "_id" : "14070", "city" : "GOWANDA", "loc" : [ -78.933902, 42.471202 ], "pop" : 6665, "state" : "NY" } +{ "_id" : "14072", "city" : "GRAND ISLAND", "loc" : [ -78.959059, 43.018266 ], "pop" : 17561, "state" : "NY" } +{ "_id" : "14075", "city" : "HAMBURG", "loc" : [ -78.838853, 42.733404 ], "pop" : 38851, "state" : "NY" } +{ "_id" : "14080", "city" : "HOLLAND", "loc" : [ -78.54388899999999, 42.639582 ], "pop" : 4004, "state" : "NY" } +{ "_id" : "14081", "city" : "IRVING", "loc" : [ -79.059634, 42.573866 ], "pop" : 2993, "state" : "NY" } +{ "_id" : "14082", "city" : "JAVA CENTER", "loc" : [ -78.392527, 42.66342 ], "pop" : 613, "state" : "NY" } +{ "_id" : "14083", "city" : "JAVA VILLAGE", "loc" : [ -78.44101000000001, 42.676852 ], "pop" : 35, "state" : "NY" } +{ "_id" : "14085", "city" : "LAKE VIEW", "loc" : [ -78.932693, 42.721535 ], "pop" : 4936, "state" : "NY" } +{ "_id" : "14086", "city" : "LANCASTER", "loc" : [ -78.663085, 42.901681 ], "pop" : 24540, "state" : "NY" } +{ "_id" : "14091", "city" : "LAWTONS", "loc" : [ -78.921222, 42.540364 ], "pop" : 1510, "state" : "NY" } +{ "_id" : "14092", "city" : "LEWISTON", "loc" : [ -79.021547, 43.172165 ], "pop" : 10540, "state" : "NY" } +{ "_id" : "14094", "city" : "LOCKPORT", "loc" : [ -78.69234400000001, 43.159987 ], "pop" : 48398, "state" : "NY" } +{ "_id" : "14098", "city" : "LYNDONVILLE", "loc" : [ -78.381057, 43.323312 ], "pop" : 3109, "state" : "NY" } +{ "_id" : "14101", "city" : "MACHIAS", "loc" : [ -78.50586, 42.408271 ], "pop" : 1860, "state" : "NY" } +{ "_id" : "14102", "city" : "MARILLA", "loc" : [ -78.558656, 42.833216 ], "pop" : 1063, "state" : "NY" } +{ "_id" : "14103", "city" : "MEDINA", "loc" : [ -78.387422, 43.218428 ], "pop" : 12042, "state" : "NY" } +{ "_id" : "14105", "city" : "MIDDLEPORT", "loc" : [ -78.484055, 43.218257 ], "pop" : 3929, "state" : "NY" } +{ "_id" : "14108", "city" : "NEWFANE", "loc" : [ -78.70697199999999, 43.272443 ], "pop" : 5261, "state" : "NY" } +{ "_id" : "14111", "city" : "NORTH COLLINS", "loc" : [ -78.91073, 42.589648 ], "pop" : 2429, "state" : "NY" } +{ "_id" : "14113", "city" : "NORTH JAVA", "loc" : [ -78.337958, 42.677631 ], "pop" : 606, "state" : "NY" } +{ "_id" : "14120", "city" : "NORTH TONAWANDA", "loc" : [ -78.85099700000001, 43.049828 ], "pop" : 51399, "state" : "NY" } +{ "_id" : "14125", "city" : "OAKFIELD", "loc" : [ -78.270179, 43.071726 ], "pop" : 3760, "state" : "NY" } +{ "_id" : "14127", "city" : "ORCHARD PARK", "loc" : [ -78.751834, 42.763891 ], "pop" : 26554, "state" : "NY" } +{ "_id" : "14129", "city" : "PERRYSBURG", "loc" : [ -78.998108, 42.472289 ], "pop" : 2198, "state" : "NY" } +{ "_id" : "14131", "city" : "RANSOMVILLE", "loc" : [ -78.89815900000001, 43.228602 ], "pop" : 5836, "state" : "NY" } +{ "_id" : "14132", "city" : "SANBORN", "loc" : [ -78.878522, 43.141879 ], "pop" : 5167, "state" : "NY" } +{ "_id" : "14134", "city" : "SARDINIA", "loc" : [ -78.506415, 42.532976 ], "pop" : 133, "state" : "NY" } +{ "_id" : "14136", "city" : "SILVER CREEK", "loc" : [ -79.16280500000001, 42.535675 ], "pop" : 5768, "state" : "NY" } +{ "_id" : "14138", "city" : "SOUTH DAYTON", "loc" : [ -79.050132, 42.371803 ], "pop" : 1600, "state" : "NY" } +{ "_id" : "14139", "city" : "SOUTH WALES", "loc" : [ -78.545219, 42.706271 ], "pop" : 2269, "state" : "NY" } +{ "_id" : "14141", "city" : "SPRINGVILLE", "loc" : [ -78.68471700000001, 42.519982 ], "pop" : 7146, "state" : "NY" } +{ "_id" : "14143", "city" : "STAFFORD", "loc" : [ -78.089783, 42.982894 ], "pop" : 2076, "state" : "NY" } +{ "_id" : "14145", "city" : "STRYKERSVILLE", "loc" : [ -78.434714, 42.724892 ], "pop" : 1374, "state" : "NY" } +{ "_id" : "14150", "city" : "TONAWANDA", "loc" : [ -78.85472, 43.002837 ], "pop" : 53410, "state" : "NY" } +{ "_id" : "14167", "city" : "VARYSBURG", "loc" : [ -78.316749, 42.745935 ], "pop" : 1782, "state" : "NY" } +{ "_id" : "14170", "city" : "WEST FALLS", "loc" : [ -78.677937, 42.70532 ], "pop" : 2217, "state" : "NY" } +{ "_id" : "14171", "city" : "WEST VALLEY", "loc" : [ -78.627978, 42.43153 ], "pop" : 2600, "state" : "NY" } +{ "_id" : "14172", "city" : "WILSON", "loc" : [ -78.82439599999999, 43.29681 ], "pop" : 3441, "state" : "NY" } +{ "_id" : "14174", "city" : "YOUNGSTOWN", "loc" : [ -79.024545, 43.246075 ], "pop" : 5728, "state" : "NY" } +{ "_id" : "14201", "city" : "BUFFALO", "loc" : [ -78.884575, 42.896659 ], "pop" : 16682, "state" : "NY" } +{ "_id" : "14202", "city" : "BUFFALO", "loc" : [ -78.877948, 42.887038 ], "pop" : 2828, "state" : "NY" } +{ "_id" : "14203", "city" : "BUFFALO", "loc" : [ -78.868143, 42.893938 ], "pop" : 1211, "state" : "NY" } +{ "_id" : "14204", "city" : "BUFFALO", "loc" : [ -78.859736, 42.883978 ], "pop" : 10962, "state" : "NY" } +{ "_id" : "14206", "city" : "BUFFALO", "loc" : [ -78.81037499999999, 42.881132 ], "pop" : 25496, "state" : "NY" } +{ "_id" : "14207", "city" : "BUFFALO", "loc" : [ -78.89781499999999, 42.949062 ], "pop" : 23890, "state" : "NY" } +{ "_id" : "14208", "city" : "BUFFALO", "loc" : [ -78.850487, 42.915416 ], "pop" : 14705, "state" : "NY" } +{ "_id" : "14209", "city" : "BUFFALO", "loc" : [ -78.865629, 42.913 ], "pop" : 8865, "state" : "NY" } +{ "_id" : "14210", "city" : "BUFFALO", "loc" : [ -78.82055, 42.861432 ], "pop" : 18506, "state" : "NY" } +{ "_id" : "14211", "city" : "BUFFALO", "loc" : [ -78.82247700000001, 42.908153 ], "pop" : 38411, "state" : "NY" } +{ "_id" : "14212", "city" : "BUFFALO", "loc" : [ -78.82445800000001, 42.894553 ], "pop" : 19935, "state" : "NY" } +{ "_id" : "14213", "city" : "BUFFALO", "loc" : [ -78.889461, 42.916675 ], "pop" : 32876, "state" : "NY" } +{ "_id" : "14214", "city" : "BUFFALO", "loc" : [ -78.83740299999999, 42.941429 ], "pop" : 21770, "state" : "NY" } +{ "_id" : "14215", "city" : "BUFFALO", "loc" : [ -78.811504, 42.933536 ], "pop" : 46789, "state" : "NY" } +{ "_id" : "14216", "city" : "BUFFALO", "loc" : [ -78.859865, 42.949914 ], "pop" : 24852, "state" : "NY" } +{ "_id" : "14217", "city" : "KENMORE", "loc" : [ -78.87294799999999, 42.968618 ], "pop" : 25547, "state" : "NY" } +{ "_id" : "14218", "city" : "LACKAWANNA", "loc" : [ -78.817263, 42.818301 ], "pop" : 22309, "state" : "NY" } +{ "_id" : "14219", "city" : "BLASDELL", "loc" : [ -78.822228, 42.790039 ], "pop" : 13376, "state" : "NY" } +{ "_id" : "14220", "city" : "BUFFALO", "loc" : [ -78.81820500000001, 42.844138 ], "pop" : 28994, "state" : "NY" } +{ "_id" : "14221", "city" : "WILLIAMSVILLE", "loc" : [ -78.738044, 42.985621 ], "pop" : 54703, "state" : "NY" } +{ "_id" : "14222", "city" : "BUFFALO", "loc" : [ -78.876333, 42.916401 ], "pop" : 12712, "state" : "NY" } +{ "_id" : "14223", "city" : "BUFFALO", "loc" : [ -78.845, 42.973088 ], "pop" : 25995, "state" : "NY" } +{ "_id" : "14224", "city" : "WEST SENECA", "loc" : [ -78.75109, 42.836162 ], "pop" : 41539, "state" : "NY" } +{ "_id" : "14225", "city" : "CHEEKTOWAGA", "loc" : [ -78.76085500000001, 42.928642 ], "pop" : 37707, "state" : "NY" } +{ "_id" : "14226", "city" : "AMHERST", "loc" : [ -78.79984899999999, 42.967232 ], "pop" : 31912, "state" : "NY" } +{ "_id" : "14227", "city" : "CHEEKTOWAGA", "loc" : [ -78.741936, 42.877467 ], "pop" : 25240, "state" : "NY" } +{ "_id" : "14228", "city" : "AMHERST", "loc" : [ -78.774604, 43.018414 ], "pop" : 1813, "state" : "NY" } +{ "_id" : "14301", "city" : "NIAGARA FALLS", "loc" : [ -79.041443, 43.095467 ], "pop" : 15756, "state" : "NY" } +{ "_id" : "14303", "city" : "NIAGARA FALLS", "loc" : [ -79.036958, 43.087777 ], "pop" : 8616, "state" : "NY" } +{ "_id" : "14304", "city" : "NIAGARA FALLS", "loc" : [ -78.964375, 43.090844 ], "pop" : 30527, "state" : "NY" } +{ "_id" : "14305", "city" : "NIAGARA FALLS", "loc" : [ -79.03780399999999, 43.114648 ], "pop" : 22726, "state" : "NY" } +{ "_id" : "14410", "city" : "ADAMS BASIN", "loc" : [ -77.853905, 43.190644 ], "pop" : 989, "state" : "NY" } +{ "_id" : "14411", "city" : "ALBION", "loc" : [ -78.206846, 43.239827 ], "pop" : 12743, "state" : "NY" } +{ "_id" : "14414", "city" : "AVON", "loc" : [ -77.72739799999999, 42.903034 ], "pop" : 6187, "state" : "NY" } +{ "_id" : "14415", "city" : "BELLONA", "loc" : [ -77.021737, 42.755442 ], "pop" : 182, "state" : "NY" } +{ "_id" : "14416", "city" : "BERGEN", "loc" : [ -77.96033, 43.086937 ], "pop" : 3092, "state" : "NY" } +{ "_id" : "14418", "city" : "BRANCHPORT", "loc" : [ -77.20516499999999, 42.606537 ], "pop" : 1126, "state" : "NY" } +{ "_id" : "14420", "city" : "BROCKPORT", "loc" : [ -77.936797, 43.21284 ], "pop" : 17492, "state" : "NY" } +{ "_id" : "14422", "city" : "BYRON", "loc" : [ -78.062912, 43.073794 ], "pop" : 2499, "state" : "NY" } +{ "_id" : "14423", "city" : "CALEDONIA", "loc" : [ -77.849295, 42.956661 ], "pop" : 4942, "state" : "NY" } +{ "_id" : "14424", "city" : "CANANDAIGUA", "loc" : [ -77.284561, 42.868866 ], "pop" : 20748, "state" : "NY" } +{ "_id" : "14425", "city" : "CANANDAIGUA", "loc" : [ -77.341139, 42.959591 ], "pop" : 10082, "state" : "NY" } +{ "_id" : "14427", "city" : "CASTILE", "loc" : [ -78.054728, 42.635883 ], "pop" : 2169, "state" : "NY" } +{ "_id" : "14428", "city" : "CLIFTON", "loc" : [ -77.860339, 43.089617 ], "pop" : 6481, "state" : "NY" } +{ "_id" : "14432", "city" : "CLIFTON SPRINGS", "loc" : [ -77.143975, 42.963175 ], "pop" : 5060, "state" : "NY" } +{ "_id" : "14433", "city" : "CLYDE", "loc" : [ -76.87246399999999, 43.085549 ], "pop" : 4565, "state" : "NY" } +{ "_id" : "14435", "city" : "CONESUS", "loc" : [ -77.67469, 42.721643 ], "pop" : 2364, "state" : "NY" } +{ "_id" : "14437", "city" : "DANSVILLE", "loc" : [ -77.71090700000001, 42.569975 ], "pop" : 8804, "state" : "NY" } +{ "_id" : "14441", "city" : "DRESDEN", "loc" : [ -76.956389, 42.684565 ], "pop" : 381, "state" : "NY" } +{ "_id" : "14445", "city" : "EAST ROCHESTER", "loc" : [ -77.490596, 43.112808 ], "pop" : 8868, "state" : "NY" } +{ "_id" : "14450", "city" : "FAIRPORT", "loc" : [ -77.435956, 43.089198 ], "pop" : 37337, "state" : "NY" } +{ "_id" : "14454", "city" : "GENESEO", "loc" : [ -77.79955200000001, 42.793783 ], "pop" : 9551, "state" : "NY" } +{ "_id" : "14456", "city" : "GENEVA", "loc" : [ -76.991349, 42.86372 ], "pop" : 20112, "state" : "NY" } +{ "_id" : "14462", "city" : "GROVELAND", "loc" : [ -77.757334, 42.676046 ], "pop" : 483, "state" : "NY" } +{ "_id" : "14464", "city" : "HAMLIN", "loc" : [ -77.926996, 43.307577 ], "pop" : 7355, "state" : "NY" } +{ "_id" : "14466", "city" : "HEMLOCK", "loc" : [ -77.58199, 42.779957 ], "pop" : 1160, "state" : "NY" } +{ "_id" : "14467", "city" : "HENRIETTA", "loc" : [ -77.612224, 43.048264 ], "pop" : 8450, "state" : "NY" } +{ "_id" : "14468", "city" : "HILTON", "loc" : [ -77.790511, 43.292344 ], "pop" : 15837, "state" : "NY" } +{ "_id" : "14469", "city" : "BLOOMFIELD", "loc" : [ -77.45998299999999, 42.885101 ], "pop" : 6129, "state" : "NY" } +{ "_id" : "14470", "city" : "HULBERTON", "loc" : [ -78.040392, 43.225494 ], "pop" : 8375, "state" : "NY" } +{ "_id" : "14471", "city" : "HONEOYE", "loc" : [ -77.50543399999999, 42.768637 ], "pop" : 2704, "state" : "NY" } +{ "_id" : "14472", "city" : "HONEOYE FALLS", "loc" : [ -77.57812, 42.969499 ], "pop" : 6768, "state" : "NY" } +{ "_id" : "14475", "city" : "IONIA", "loc" : [ -77.50086, 42.938002 ], "pop" : 232, "state" : "NY" } +{ "_id" : "14476", "city" : "KENDALL", "loc" : [ -78.030359, 43.328415 ], "pop" : 2186, "state" : "NY" } +{ "_id" : "14477", "city" : "KENT", "loc" : [ -78.135533, 43.334064 ], "pop" : 2040, "state" : "NY" } +{ "_id" : "14478", "city" : "BLUFF POINT", "loc" : [ -77.105197, 42.601032 ], "pop" : 1555, "state" : "NY" } +{ "_id" : "14480", "city" : "LAKEVILLE", "loc" : [ -77.714865, 42.82957 ], "pop" : 724, "state" : "NY" } +{ "_id" : "14481", "city" : "LEICESTER", "loc" : [ -77.898976, 42.773903 ], "pop" : 1881, "state" : "NY" } +{ "_id" : "14482", "city" : "LE ROY", "loc" : [ -77.985097, 42.977377 ], "pop" : 9037, "state" : "NY" } +{ "_id" : "14485", "city" : "LIMA", "loc" : [ -77.608305, 42.901234 ], "pop" : 4666, "state" : "NY" } +{ "_id" : "14486", "city" : "LINWOOD", "loc" : [ -77.910422, 42.884721 ], "pop" : 860, "state" : "NY" } +{ "_id" : "14487", "city" : "LIVONIA", "loc" : [ -77.663472, 42.813514 ], "pop" : 6108, "state" : "NY" } +{ "_id" : "14489", "city" : "LYONS", "loc" : [ -76.989575, 43.07768 ], "pop" : 8168, "state" : "NY" } +{ "_id" : "14502", "city" : "MACEDON", "loc" : [ -77.337199, 43.078366 ], "pop" : 8486, "state" : "NY" } +{ "_id" : "14504", "city" : "MANCHESTER", "loc" : [ -77.229733, 42.969874 ], "pop" : 1522, "state" : "NY" } +{ "_id" : "14505", "city" : "MARION", "loc" : [ -77.186277, 43.154612 ], "pop" : 4663, "state" : "NY" } +{ "_id" : "14506", "city" : "MENDON", "loc" : [ -77.50013, 42.995307 ], "pop" : 864, "state" : "NY" } +{ "_id" : "14507", "city" : "MIDDLESEX", "loc" : [ -77.280509, 42.697624 ], "pop" : 1256, "state" : "NY" } +{ "_id" : "14510", "city" : "TUSCARORA", "loc" : [ -77.86108299999999, 42.705431 ], "pop" : 7145, "state" : "NY" } +{ "_id" : "14512", "city" : "NAPLES", "loc" : [ -77.390106, 42.640425 ], "pop" : 4616, "state" : "NY" } +{ "_id" : "14513", "city" : "NEWARK", "loc" : [ -77.09460199999999, 43.051909 ], "pop" : 14670, "state" : "NY" } +{ "_id" : "14514", "city" : "NORTH CHILI", "loc" : [ -77.800518, 43.118601 ], "pop" : 4014, "state" : "NY" } +{ "_id" : "14516", "city" : "NORTH ROSE", "loc" : [ -76.91515200000001, 43.196439 ], "pop" : 2428, "state" : "NY" } +{ "_id" : "14517", "city" : "NUNDA", "loc" : [ -77.91800600000001, 42.586708 ], "pop" : 2439, "state" : "NY" } +{ "_id" : "14519", "city" : "ONTARIO", "loc" : [ -77.308781, 43.229092 ], "pop" : 10016, "state" : "NY" } +{ "_id" : "14521", "city" : "HAYT CORNERS", "loc" : [ -76.821575, 42.676979 ], "pop" : 3225, "state" : "NY" } +{ "_id" : "14522", "city" : "PALMYRA", "loc" : [ -77.22179800000001, 43.062192 ], "pop" : 9486, "state" : "NY" } +{ "_id" : "14525", "city" : "LINWOOD", "loc" : [ -78.014698, 42.880088 ], "pop" : 2628, "state" : "NY" } +{ "_id" : "14526", "city" : "PENFIELD", "loc" : [ -77.45604299999999, 43.139638 ], "pop" : 16675, "state" : "NY" } +{ "_id" : "14527", "city" : "PENN YAN", "loc" : [ -77.05687, 42.664548 ], "pop" : 11609, "state" : "NY" } +{ "_id" : "14530", "city" : "PERRY", "loc" : [ -78.005882, 42.722852 ], "pop" : 6218, "state" : "NY" } +{ "_id" : "14532", "city" : "PHELPS", "loc" : [ -77.047264, 42.958178 ], "pop" : 4366, "state" : "NY" } +{ "_id" : "14533", "city" : "WADSWORTH", "loc" : [ -77.88254499999999, 42.84269 ], "pop" : 2094, "state" : "NY" } +{ "_id" : "14534", "city" : "PITTSFORD", "loc" : [ -77.514067, 43.069511 ], "pop" : 27413, "state" : "NY" } +{ "_id" : "14536", "city" : "PORTAGEVILLE", "loc" : [ -78.085635, 42.556957 ], "pop" : 980, "state" : "NY" } +{ "_id" : "14541", "city" : "MAC DOUGALL", "loc" : [ -76.853582, 42.761378 ], "pop" : 3150, "state" : "NY" } +{ "_id" : "14543", "city" : "WEST RUSH", "loc" : [ -77.665381, 42.998934 ], "pop" : 2481, "state" : "NY" } +{ "_id" : "14544", "city" : "RUSHVILLE", "loc" : [ -77.239538, 42.75973 ], "pop" : 1948, "state" : "NY" } +{ "_id" : "14545", "city" : "SCOTTSBURG", "loc" : [ -77.682633, 42.658907 ], "pop" : 612, "state" : "NY" } +{ "_id" : "14546", "city" : "SCOTTSVILLE", "loc" : [ -77.77425599999999, 43.02462 ], "pop" : 5604, "state" : "NY" } +{ "_id" : "14548", "city" : "SHORTSVILLE", "loc" : [ -77.227312, 42.969034 ], "pop" : 4524, "state" : "NY" } +{ "_id" : "14550", "city" : "ROCK GLEN", "loc" : [ -78.092994, 42.669446 ], "pop" : 1824, "state" : "NY" } +{ "_id" : "14551", "city" : "SODUS", "loc" : [ -77.05141, 43.221681 ], "pop" : 5831, "state" : "NY" } +{ "_id" : "14555", "city" : "SODUS POINT", "loc" : [ -76.98833, 43.265058 ], "pop" : 1058, "state" : "NY" } +{ "_id" : "14559", "city" : "SPENCERPORT", "loc" : [ -77.804333, 43.189502 ], "pop" : 14137, "state" : "NY" } +{ "_id" : "14560", "city" : "SPRINGWATER", "loc" : [ -77.57750299999999, 42.677598 ], "pop" : 2319, "state" : "NY" } +{ "_id" : "14561", "city" : "STANLEY", "loc" : [ -77.12070199999999, 42.830277 ], "pop" : 3102, "state" : "NY" } +{ "_id" : "14564", "city" : "VICTOR", "loc" : [ -77.41798199999999, 42.986597 ], "pop" : 7322, "state" : "NY" } +{ "_id" : "14568", "city" : "WALWORTH", "loc" : [ -77.28582, 43.140161 ], "pop" : 5461, "state" : "NY" } +{ "_id" : "14569", "city" : "WARSAW", "loc" : [ -78.142899, 42.741035 ], "pop" : 5811, "state" : "NY" } +{ "_id" : "14571", "city" : "WATERPORT", "loc" : [ -78.242958, 43.332563 ], "pop" : 1669, "state" : "NY" } +{ "_id" : "14572", "city" : "WAYLAND", "loc" : [ -77.590613, 42.559274 ], "pop" : 5626, "state" : "NY" } +{ "_id" : "14580", "city" : "WEBSTER", "loc" : [ -77.46158699999999, 43.219563 ], "pop" : 35072, "state" : "NY" } +{ "_id" : "14586", "city" : "WEST HENRIETTA", "loc" : [ -77.68713099999999, 43.039667 ], "pop" : 5397, "state" : "NY" } +{ "_id" : "14589", "city" : "WILLIAMSON", "loc" : [ -77.170011, 43.242071 ], "pop" : 7947, "state" : "NY" } +{ "_id" : "14590", "city" : "WOLCOTT", "loc" : [ -76.821748, 43.234129 ], "pop" : 5356, "state" : "NY" } +{ "_id" : "14591", "city" : "WYOMING", "loc" : [ -78.083292, 42.83175 ], "pop" : 2074, "state" : "NY" } +{ "_id" : "14604", "city" : "ROCHESTER", "loc" : [ -77.607978, 43.157729 ], "pop" : 1434, "state" : "NY" } +{ "_id" : "14605", "city" : "ROCHESTER", "loc" : [ -77.600711, 43.169758 ], "pop" : 15196, "state" : "NY" } +{ "_id" : "14606", "city" : "ROCHESTER", "loc" : [ -77.684488, 43.168455 ], "pop" : 29822, "state" : "NY" } +{ "_id" : "14607", "city" : "ROCHESTER", "loc" : [ -77.588976, 43.150086 ], "pop" : 16479, "state" : "NY" } +{ "_id" : "14608", "city" : "ROCHESTER", "loc" : [ -77.625803, 43.152144 ], "pop" : 14631, "state" : "NY" } +{ "_id" : "14609", "city" : "ROCHESTER", "loc" : [ -77.56370099999999, 43.174001 ], "pop" : 45805, "state" : "NY" } +{ "_id" : "14610", "city" : "ROCHESTER", "loc" : [ -77.54950100000001, 43.14524 ], "pop" : 15167, "state" : "NY" } +{ "_id" : "14611", "city" : "ROCHESTER", "loc" : [ -77.639353, 43.148375 ], "pop" : 15951, "state" : "NY" } +{ "_id" : "14612", "city" : "ROCHESTER", "loc" : [ -77.665228, 43.256576 ], "pop" : 35820, "state" : "NY" } +{ "_id" : "14613", "city" : "ROCHESTER", "loc" : [ -77.639276, 43.18308 ], "pop" : 15525, "state" : "NY" } +{ "_id" : "14614", "city" : "ROCHESTER", "loc" : [ -77.61418999999999, 43.155823 ], "pop" : 1430, "state" : "NY" } +{ "_id" : "14615", "city" : "ROCHESTER", "loc" : [ -77.652118, 43.20575 ], "pop" : 16000, "state" : "NY" } +{ "_id" : "14616", "city" : "GREECE", "loc" : [ -77.65123800000001, 43.232359 ], "pop" : 26500, "state" : "NY" } +{ "_id" : "14617", "city" : "ROCHESTER", "loc" : [ -77.599442, 43.220258 ], "pop" : 24296, "state" : "NY" } +{ "_id" : "14618", "city" : "TWELVE CORNERS", "loc" : [ -77.558801, 43.115416 ], "pop" : 21912, "state" : "NY" } +{ "_id" : "14619", "city" : "ROCHESTER", "loc" : [ -77.6481, 43.136685 ], "pop" : 19393, "state" : "NY" } +{ "_id" : "14620", "city" : "ROCHESTER", "loc" : [ -77.606239, 43.131711 ], "pop" : 29819, "state" : "NY" } +{ "_id" : "14621", "city" : "ROCHESTER", "loc" : [ -77.60428400000001, 43.183362 ], "pop" : 36055, "state" : "NY" } +{ "_id" : "14622", "city" : "ROCHESTER", "loc" : [ -77.55549000000001, 43.213959 ], "pop" : 12489, "state" : "NY" } +{ "_id" : "14623", "city" : "ROCHESTER", "loc" : [ -77.634412, 43.083371 ], "pop" : 25127, "state" : "NY" } +{ "_id" : "14624", "city" : "WESTGATE", "loc" : [ -77.733552, 43.12589 ], "pop" : 35748, "state" : "NY" } +{ "_id" : "14625", "city" : "PANORAMA", "loc" : [ -77.50318799999999, 43.14949 ], "pop" : 12009, "state" : "NY" } +{ "_id" : "14626", "city" : "ROCHESTER", "loc" : [ -77.703996, 43.21257 ], "pop" : 25574, "state" : "NY" } +{ "_id" : "14701", "city" : "JAMESTOWN", "loc" : [ -79.243989, 42.092845 ], "pop" : 45344, "state" : "NY" } +{ "_id" : "14706", "city" : "ALLEGANY", "loc" : [ -78.499883, 42.091827 ], "pop" : 7885, "state" : "NY" } +{ "_id" : "14708", "city" : "ALMA", "loc" : [ -78.040012, 42.016859 ], "pop" : 200, "state" : "NY" } +{ "_id" : "14709", "city" : "ANGELICA", "loc" : [ -77.994671, 42.326339 ], "pop" : 1046, "state" : "NY" } +{ "_id" : "14710", "city" : "ASHVILLE", "loc" : [ -79.405624, 42.108376 ], "pop" : 2450, "state" : "NY" } +{ "_id" : "14711", "city" : "BELFAST", "loc" : [ -78.094281, 42.320013 ], "pop" : 2210, "state" : "NY" } +{ "_id" : "14712", "city" : "BEMUS POINT", "loc" : [ -79.35808, 42.151346 ], "pop" : 3591, "state" : "NY" } +{ "_id" : "14714", "city" : "BLACK CREEK", "loc" : [ -78.23124900000001, 42.285528 ], "pop" : 757, "state" : "NY" } +{ "_id" : "14715", "city" : "BOLIVAR", "loc" : [ -78.144834, 42.070442 ], "pop" : 3173, "state" : "NY" } +{ "_id" : "14716", "city" : "BROCTON", "loc" : [ -79.43443000000001, 42.393973 ], "pop" : 1863, "state" : "NY" } +{ "_id" : "14717", "city" : "CANEADEA", "loc" : [ -78.197321, 42.370304 ], "pop" : 798, "state" : "NY" } +{ "_id" : "14718", "city" : "CASSADAGA", "loc" : [ -79.29928200000001, 42.350356 ], "pop" : 1977, "state" : "NY" } +{ "_id" : "14719", "city" : "CATTARAUGUS", "loc" : [ -78.88852799999999, 42.333291 ], "pop" : 3853, "state" : "NY" } +{ "_id" : "14721", "city" : "CERES", "loc" : [ -78.27268599999999, 41.99939 ], "pop" : 33, "state" : "NY" } +{ "_id" : "14723", "city" : "CHERRY CREEK", "loc" : [ -79.12027500000001, 42.312725 ], "pop" : 1408, "state" : "NY" } +{ "_id" : "14724", "city" : "CLYMER", "loc" : [ -79.668532, 42.055699 ], "pop" : 2810, "state" : "NY" } +{ "_id" : "14726", "city" : "CONEWANGO VALLEY", "loc" : [ -79.021956, 42.262467 ], "pop" : 1562, "state" : "NY" } +{ "_id" : "14727", "city" : "CUBA", "loc" : [ -78.275074, 42.18819 ], "pop" : 5306, "state" : "NY" } +{ "_id" : "14728", "city" : "DEWITTVILLE", "loc" : [ -79.419303, 42.239413 ], "pop" : 1159, "state" : "NY" } +{ "_id" : "14729", "city" : "EAST OTTO", "loc" : [ -78.743167, 42.3971 ], "pop" : 1050, "state" : "NY" } +{ "_id" : "14731", "city" : "ELLICOTTVILLE", "loc" : [ -78.66064, 42.295873 ], "pop" : 1767, "state" : "NY" } +{ "_id" : "14733", "city" : "FALCONER", "loc" : [ -79.189499, 42.123915 ], "pop" : 3812, "state" : "NY" } +{ "_id" : "14735", "city" : "FILLMORE", "loc" : [ -78.10623200000001, 42.463605 ], "pop" : 2463, "state" : "NY" } +{ "_id" : "14736", "city" : "FINDLEY LAKE", "loc" : [ -79.734908, 42.120401 ], "pop" : 77, "state" : "NY" } +{ "_id" : "14737", "city" : "FRANKLINVILLE", "loc" : [ -78.440043, 42.338823 ], "pop" : 3965, "state" : "NY" } +{ "_id" : "14738", "city" : "FREWSBURG", "loc" : [ -79.13179700000001, 42.052753 ], "pop" : 3919, "state" : "NY" } +{ "_id" : "14739", "city" : "FRIENDSHIP", "loc" : [ -78.13588, 42.190666 ], "pop" : 3214, "state" : "NY" } +{ "_id" : "14740", "city" : "GERRY", "loc" : [ -79.16486500000001, 42.214728 ], "pop" : 1836, "state" : "NY" } +{ "_id" : "14741", "city" : "GREAT VALLEY", "loc" : [ -78.620811, 42.208292 ], "pop" : 2217, "state" : "NY" } +{ "_id" : "14743", "city" : "ISCHUA", "loc" : [ -78.400611, 42.179747 ], "pop" : 2635, "state" : "NY" } +{ "_id" : "14744", "city" : "HOUGHTON", "loc" : [ -78.109506, 42.411567 ], "pop" : 173, "state" : "NY" } +{ "_id" : "14747", "city" : "KENNEDY", "loc" : [ -79.096416, 42.150776 ], "pop" : 2719, "state" : "NY" } +{ "_id" : "14748", "city" : "KILL BUCK", "loc" : [ -78.64260400000001, 42.141005 ], "pop" : 47, "state" : "NY" } +{ "_id" : "14750", "city" : "LAKEWOOD", "loc" : [ -79.32912399999999, 42.097256 ], "pop" : 5113, "state" : "NY" } +{ "_id" : "14753", "city" : "LIMESTONE", "loc" : [ -78.631979, 42.063945 ], "pop" : 1981, "state" : "NY" } +{ "_id" : "14754", "city" : "LITTLE GENESEE", "loc" : [ -78.235056, 42.023964 ], "pop" : 1240, "state" : "NY" } +{ "_id" : "14755", "city" : "LITTLE VALLEY", "loc" : [ -78.809286, 42.254121 ], "pop" : 2311, "state" : "NY" } +{ "_id" : "14757", "city" : "MAYVILLE", "loc" : [ -79.496325, 42.240906 ], "pop" : 3378, "state" : "NY" } +{ "_id" : "14760", "city" : "OLEAN", "loc" : [ -78.423265, 42.0787 ], "pop" : 22055, "state" : "NY" } +{ "_id" : "14767", "city" : "PANAMA", "loc" : [ -79.48153600000001, 42.056965 ], "pop" : 2437, "state" : "NY" } +{ "_id" : "14769", "city" : "PORTLAND", "loc" : [ -79.458894, 42.385792 ], "pop" : 2001, "state" : "NY" } +{ "_id" : "14770", "city" : "PORTVILLE", "loc" : [ -78.33135299999999, 42.027253 ], "pop" : 1743, "state" : "NY" } +{ "_id" : "14772", "city" : "RANDOLPH", "loc" : [ -78.96003399999999, 42.163143 ], "pop" : 4253, "state" : "NY" } +{ "_id" : "14775", "city" : "RIPLEY", "loc" : [ -79.712103, 42.248175 ], "pop" : 2876, "state" : "NY" } +{ "_id" : "14777", "city" : "RUSHFORD", "loc" : [ -78.18670400000001, 42.417216 ], "pop" : 2701, "state" : "NY" } +{ "_id" : "14779", "city" : "SALAMANCA", "loc" : [ -78.73042, 42.16035 ], "pop" : 8632, "state" : "NY" } +{ "_id" : "14781", "city" : "SHERMAN", "loc" : [ -79.585742, 42.163124 ], "pop" : 2184, "state" : "NY" } +{ "_id" : "14782", "city" : "SINCLAIRVILLE", "loc" : [ -79.267297, 42.24548 ], "pop" : 3065, "state" : "NY" } +{ "_id" : "14784", "city" : "STOCKTON", "loc" : [ -79.375792, 42.318195 ], "pop" : 1894, "state" : "NY" } +{ "_id" : "14787", "city" : "WESTFIELD", "loc" : [ -79.57264600000001, 42.321977 ], "pop" : 5872, "state" : "NY" } +{ "_id" : "14801", "city" : "ADDISON", "loc" : [ -77.26602699999999, 42.09825 ], "pop" : 4967, "state" : "NY" } +{ "_id" : "14802", "city" : "ALFRED", "loc" : [ -77.79295, 42.255165 ], "pop" : 4559, "state" : "NY" } +{ "_id" : "14803", "city" : "ALFRED STATION", "loc" : [ -77.77808400000001, 42.255799 ], "pop" : 1071, "state" : "NY" } +{ "_id" : "14804", "city" : "ALMOND", "loc" : [ -77.77796499999999, 42.316036 ], "pop" : 1642, "state" : "NY" } +{ "_id" : "14805", "city" : "ALPINE", "loc" : [ -76.734775, 42.351014 ], "pop" : 1098, "state" : "NY" } +{ "_id" : "14806", "city" : "ANDOVER", "loc" : [ -77.792008, 42.157454 ], "pop" : 2489, "state" : "NY" } +{ "_id" : "14807", "city" : "ARKPORT", "loc" : [ -77.691778, 42.422466 ], "pop" : 2937, "state" : "NY" } +{ "_id" : "14808", "city" : "ATLANTA", "loc" : [ -77.480091, 42.556269 ], "pop" : 472, "state" : "NY" } +{ "_id" : "14809", "city" : "WALLACE", "loc" : [ -77.434254, 42.41513 ], "pop" : 2448, "state" : "NY" } +{ "_id" : "14810", "city" : "VETERANS ADMINIS", "loc" : [ -77.323255, 42.345451 ], "pop" : 12982, "state" : "NY" } +{ "_id" : "14812", "city" : "BEAVER DAMS", "loc" : [ -76.971953, 42.279763 ], "pop" : 3765, "state" : "NY" } +{ "_id" : "14813", "city" : "BELMONT", "loc" : [ -78.01103000000001, 42.233409 ], "pop" : 1773, "state" : "NY" } +{ "_id" : "14814", "city" : "BIG FLATS", "loc" : [ -76.952721, 42.145509 ], "pop" : 1892, "state" : "NY" } +{ "_id" : "14815", "city" : "BRADFORD", "loc" : [ -77.09134, 42.382517 ], "pop" : 944, "state" : "NY" } +{ "_id" : "14816", "city" : "BREESPORT", "loc" : [ -76.73612, 42.19392 ], "pop" : 160, "state" : "NY" } +{ "_id" : "14817", "city" : "BROOKTONDALE", "loc" : [ -76.366844, 42.37653 ], "pop" : 2665, "state" : "NY" } +{ "_id" : "14818", "city" : "BURDETT", "loc" : [ -76.82921899999999, 42.439442 ], "pop" : 1714, "state" : "NY" } +{ "_id" : "14819", "city" : "CAMERON", "loc" : [ -77.440341, 42.21284 ], "pop" : 698, "state" : "NY" } +{ "_id" : "14820", "city" : "CAMERON MILLS", "loc" : [ -77.364976, 42.192547 ], "pop" : 723, "state" : "NY" } +{ "_id" : "14821", "city" : "CAMPBELL", "loc" : [ -77.206619, 42.238569 ], "pop" : 2966, "state" : "NY" } +{ "_id" : "14822", "city" : "CANASERAGA", "loc" : [ -77.795374, 42.458504 ], "pop" : 1458, "state" : "NY" } +{ "_id" : "14823", "city" : "CANISTEO", "loc" : [ -77.58970600000001, 42.263503 ], "pop" : 3945, "state" : "NY" } +{ "_id" : "14824", "city" : "CAYUTA", "loc" : [ -76.697367, 42.277445 ], "pop" : 599, "state" : "NY" } +{ "_id" : "14825", "city" : "CHEMUNG", "loc" : [ -76.62022399999999, 42.039243 ], "pop" : 615, "state" : "NY" } +{ "_id" : "14826", "city" : "COHOCTON", "loc" : [ -77.499763, 42.500315 ], "pop" : 2286, "state" : "NY" } +{ "_id" : "14830", "city" : "CORNING", "loc" : [ -77.047546, 42.138331 ], "pop" : 19957, "state" : "NY" } +{ "_id" : "14836", "city" : "DALTON", "loc" : [ -77.928889, 42.544895 ], "pop" : 875, "state" : "NY" } +{ "_id" : "14837", "city" : "DUNDEE", "loc" : [ -77.002773, 42.505261 ], "pop" : 5125, "state" : "NY" } +{ "_id" : "14838", "city" : "ERIN", "loc" : [ -76.68194200000001, 42.185898 ], "pop" : 2053, "state" : "NY" } +{ "_id" : "14839", "city" : "GREENWOOD", "loc" : [ -77.63604100000001, 42.139809 ], "pop" : 927, "state" : "NY" } +{ "_id" : "14840", "city" : "HAMMONDSPORT", "loc" : [ -77.19770200000001, 42.431217 ], "pop" : 3068, "state" : "NY" } +{ "_id" : "14841", "city" : "HECTOR", "loc" : [ -76.878597, 42.49658 ], "pop" : 147, "state" : "NY" } +{ "_id" : "14842", "city" : "HIMROD", "loc" : [ -76.950774, 42.594455 ], "pop" : 726, "state" : "NY" } +{ "_id" : "14843", "city" : "HORNELL", "loc" : [ -77.656907, 42.327393 ], "pop" : 14311, "state" : "NY" } +{ "_id" : "14845", "city" : "HORSEHEADS", "loc" : [ -76.83453900000001, 42.180493 ], "pop" : 20799, "state" : "NY" } +{ "_id" : "14846", "city" : "HUNT", "loc" : [ -77.98183899999999, 42.538821 ], "pop" : 1236, "state" : "NY" } +{ "_id" : "14847", "city" : "INTERLAKEN", "loc" : [ -76.726798, 42.616524 ], "pop" : 2148, "state" : "NY" } +{ "_id" : "14850", "city" : "ITHACA COLLEGE", "loc" : [ -76.49291100000001, 42.448497 ], "pop" : 40760, "state" : "NY" } +{ "_id" : "14853", "city" : "ITHACA", "loc" : [ -76.48870700000001, 42.443087 ], "pop" : 20379, "state" : "NY" } +{ "_id" : "14855", "city" : "JASPER", "loc" : [ -77.499909, 42.128962 ], "pop" : 870, "state" : "NY" } +{ "_id" : "14858", "city" : "LINDLEY", "loc" : [ -77.154132, 42.042483 ], "pop" : 1765, "state" : "NY" } +{ "_id" : "14859", "city" : "LOCKWOOD", "loc" : [ -76.536618, 42.114943 ], "pop" : 951, "state" : "NY" } +{ "_id" : "14860", "city" : "LODI", "loc" : [ -76.833904, 42.596555 ], "pop" : 1209, "state" : "NY" } +{ "_id" : "14861", "city" : "LOWMAN", "loc" : [ -76.693005, 42.06938 ], "pop" : 2338, "state" : "NY" } +{ "_id" : "14864", "city" : "MILLPORT", "loc" : [ -76.83923299999999, 42.258084 ], "pop" : 1432, "state" : "NY" } +{ "_id" : "14865", "city" : "MONTOUR FALLS", "loc" : [ -76.839581, 42.343678 ], "pop" : 2851, "state" : "NY" } +{ "_id" : "14867", "city" : "NEWFIELD", "loc" : [ -76.591978, 42.362137 ], "pop" : 5311, "state" : "NY" } +{ "_id" : "14869", "city" : "ODESSA", "loc" : [ -76.771698, 42.360947 ], "pop" : 1471, "state" : "NY" } +{ "_id" : "14870", "city" : "PAINTED POST", "loc" : [ -77.11937500000001, 42.170967 ], "pop" : 9269, "state" : "NY" } +{ "_id" : "14871", "city" : "PINE CITY", "loc" : [ -76.881519, 42.041938 ], "pop" : 4911, "state" : "NY" } +{ "_id" : "14872", "city" : "PINE VALLEY", "loc" : [ -76.865206, 42.234795 ], "pop" : 252, "state" : "NY" } +{ "_id" : "14873", "city" : "PRATTSBURG", "loc" : [ -77.282455, 42.526918 ], "pop" : 2534, "state" : "NY" } +{ "_id" : "14874", "city" : "PULTENEY", "loc" : [ -77.16910799999999, 42.523275 ], "pop" : 504, "state" : "NY" } +{ "_id" : "14877", "city" : "REXVILLE", "loc" : [ -77.676663, 42.072645 ], "pop" : 539, "state" : "NY" } +{ "_id" : "14878", "city" : "ROCK STREAM", "loc" : [ -76.936436, 42.448511 ], "pop" : 703, "state" : "NY" } +{ "_id" : "14879", "city" : "SAVONA", "loc" : [ -77.20834499999999, 42.30407 ], "pop" : 1982, "state" : "NY" } +{ "_id" : "14880", "city" : "SCIO", "loc" : [ -77.990026, 42.169703 ], "pop" : 2491, "state" : "NY" } +{ "_id" : "14881", "city" : "SLATERVILLE SPRI", "loc" : [ -76.31567699999999, 42.401119 ], "pop" : 107, "state" : "NY" } +{ "_id" : "14882", "city" : "LANSING", "loc" : [ -76.53745499999999, 42.564494 ], "pop" : 4043, "state" : "NY" } +{ "_id" : "14883", "city" : "SPENCER", "loc" : [ -76.489853, 42.246736 ], "pop" : 3829, "state" : "NY" } +{ "_id" : "14884", "city" : "SWAIN", "loc" : [ -77.88899000000001, 42.477314 ], "pop" : 267, "state" : "NY" } +{ "_id" : "14885", "city" : "TROUPSBURG", "loc" : [ -77.550208, 42.050083 ], "pop" : 831, "state" : "NY" } +{ "_id" : "14886", "city" : "TRUMANSBURG", "loc" : [ -76.668145, 42.520987 ], "pop" : 6379, "state" : "NY" } +{ "_id" : "14888", "city" : "VALOIS", "loc" : [ -76.860879, 42.524304 ], "pop" : 547, "state" : "NY" } +{ "_id" : "14889", "city" : "VAN ETTEN", "loc" : [ -76.571663, 42.208455 ], "pop" : 1477, "state" : "NY" } +{ "_id" : "14891", "city" : "WATKINS GLEN", "loc" : [ -76.90215000000001, 42.377121 ], "pop" : 4584, "state" : "NY" } +{ "_id" : "14892", "city" : "WAVERLY", "loc" : [ -76.53330800000001, 42.017228 ], "pop" : 8262, "state" : "NY" } +{ "_id" : "14894", "city" : "WELLSBURG", "loc" : [ -76.77231500000001, 42.027317 ], "pop" : 2829, "state" : "NY" } +{ "_id" : "14895", "city" : "WELLSVILLE", "loc" : [ -77.94190999999999, 42.110757 ], "pop" : 9645, "state" : "NY" } +{ "_id" : "14897", "city" : "WHITESVILLE", "loc" : [ -77.810615, 42.045586 ], "pop" : 1178, "state" : "NY" } +{ "_id" : "14898", "city" : "WOODHULL", "loc" : [ -77.420333, 42.073638 ], "pop" : 1318, "state" : "NY" } +{ "_id" : "14901", "city" : "ELMIRA", "loc" : [ -76.811977, 42.100769 ], "pop" : 19037, "state" : "NY" } +{ "_id" : "14903", "city" : "ELMIRA HEIGHTS", "loc" : [ -76.84357199999999, 42.130203 ], "pop" : 7918, "state" : "NY" } +{ "_id" : "14904", "city" : "ELMIRA", "loc" : [ -76.803735, 42.072866 ], "pop" : 18103, "state" : "NY" } +{ "_id" : "14905", "city" : "ELMIRA", "loc" : [ -76.839686, 42.086919 ], "pop" : 10018, "state" : "NY" } +{ "_id" : "15001", "city" : "MACARTHUR", "loc" : [ -80.281567, 40.604424 ], "pop" : 36849, "state" : "PA" } +{ "_id" : "15003", "city" : "FAIROAKS", "loc" : [ -80.21977800000001, 40.595368 ], "pop" : 13449, "state" : "PA" } +{ "_id" : "15005", "city" : "BADEN", "loc" : [ -80.198471, 40.641595 ], "pop" : 10068, "state" : "PA" } +{ "_id" : "15007", "city" : "BAKERSTOWN", "loc" : [ -79.93095599999999, 40.647826 ], "pop" : 782, "state" : "PA" } +{ "_id" : "15009", "city" : "BEAVER", "loc" : [ -80.336528, 40.697184 ], "pop" : 14968, "state" : "PA" } +{ "_id" : "15010", "city" : "RACINE", "loc" : [ -80.33987999999999, 40.766234 ], "pop" : 30623, "state" : "PA" } +{ "_id" : "15012", "city" : "ROSTRAVER", "loc" : [ -79.83454, 40.14368 ], "pop" : 18967, "state" : "PA" } +{ "_id" : "15014", "city" : "BRACKENRIDGE", "loc" : [ -79.74137500000001, 40.608223 ], "pop" : 3674, "state" : "PA" } +{ "_id" : "15015", "city" : "BRADFORDWOODS", "loc" : [ -80.08230500000001, 40.634175 ], "pop" : 2319, "state" : "PA" } +{ "_id" : "15017", "city" : "BRIDGEVILLE", "loc" : [ -80.11529299999999, 40.347195 ], "pop" : 12705, "state" : "PA" } +{ "_id" : "15018", "city" : "BUENA VISTA", "loc" : [ -79.79187400000001, 40.278635 ], "pop" : 1186, "state" : "PA" } +{ "_id" : "15019", "city" : "BULGER", "loc" : [ -80.36219199999999, 40.405119 ], "pop" : 1118, "state" : "PA" } +{ "_id" : "15021", "city" : "PARIS", "loc" : [ -80.444485, 40.390114 ], "pop" : 5527, "state" : "PA" } +{ "_id" : "15022", "city" : "CHARLEROI", "loc" : [ -79.92001999999999, 40.140402 ], "pop" : 11800, "state" : "PA" } +{ "_id" : "15024", "city" : "CHESWICK", "loc" : [ -79.841002, 40.568117 ], "pop" : 9823, "state" : "PA" } +{ "_id" : "15025", "city" : "LARGE", "loc" : [ -79.910096, 40.298917 ], "pop" : 17031, "state" : "PA" } +{ "_id" : "15026", "city" : "CLINTON", "loc" : [ -80.342282, 40.513148 ], "pop" : 2543, "state" : "PA" } +{ "_id" : "15027", "city" : "CONWAY", "loc" : [ -80.234899, 40.664917 ], "pop" : 2438, "state" : "PA" } +{ "_id" : "15030", "city" : "CREIGHTON", "loc" : [ -79.78176999999999, 40.582051 ], "pop" : 1761, "state" : "PA" } +{ "_id" : "15031", "city" : "CUDDY", "loc" : [ -80.16443200000001, 40.360069 ], "pop" : 1037, "state" : "PA" } +{ "_id" : "15033", "city" : "DONORA", "loc" : [ -79.861858, 40.176821 ], "pop" : 5928, "state" : "PA" } +{ "_id" : "15034", "city" : "DRAVOSBURG", "loc" : [ -79.889461, 40.352676 ], "pop" : 2377, "state" : "PA" } +{ "_id" : "15035", "city" : "EAST MC KEESPORT", "loc" : [ -79.80788099999999, 40.383944 ], "pop" : 2698, "state" : "PA" } +{ "_id" : "15037", "city" : "ELIZABETH", "loc" : [ -79.856842, 40.265575 ], "pop" : 12937, "state" : "PA" } +{ "_id" : "15042", "city" : "FREEDOM", "loc" : [ -80.214663, 40.683023 ], "pop" : 9416, "state" : "PA" } +{ "_id" : "15043", "city" : "GEORGETOWN", "loc" : [ -80.49002299999999, 40.574275 ], "pop" : 2810, "state" : "PA" } +{ "_id" : "15044", "city" : "GIBSONIA", "loc" : [ -79.94430699999999, 40.625233 ], "pop" : 18318, "state" : "PA" } +{ "_id" : "15045", "city" : "GLASSPORT", "loc" : [ -79.888324, 40.325952 ], "pop" : 5582, "state" : "PA" } +{ "_id" : "15049", "city" : "HARWICK", "loc" : [ -79.805115, 40.557433 ], "pop" : 1111, "state" : "PA" } +{ "_id" : "15050", "city" : "HOOKSTOWN", "loc" : [ -80.436268, 40.542929 ], "pop" : 2933, "state" : "PA" } +{ "_id" : "15051", "city" : "INDIANOLA", "loc" : [ -79.881765, 40.576605 ], "pop" : 1539, "state" : "PA" } +{ "_id" : "15052", "city" : "INDUSTRY", "loc" : [ -80.415085, 40.667101 ], "pop" : 2908, "state" : "PA" } +{ "_id" : "15053", "city" : "JOFFRE", "loc" : [ -80.391542, 40.381027 ], "pop" : 1634, "state" : "PA" } +{ "_id" : "15055", "city" : "LAWRENCE", "loc" : [ -80.144029, 40.311615 ], "pop" : 1933, "state" : "PA" } +{ "_id" : "15056", "city" : "LEETSDALE", "loc" : [ -80.209874, 40.566165 ], "pop" : 1387, "state" : "PA" } +{ "_id" : "15057", "city" : "MC DONALD", "loc" : [ -80.256204, 40.369664 ], "pop" : 9077, "state" : "PA" } +{ "_id" : "15059", "city" : "MIDLAND", "loc" : [ -80.468952, 40.658962 ], "pop" : 6476, "state" : "PA" } +{ "_id" : "15060", "city" : "MIDWAY", "loc" : [ -80.29209, 40.367974 ], "pop" : 1043, "state" : "PA" } +{ "_id" : "15061", "city" : "MONACA", "loc" : [ -80.291743, 40.671847 ], "pop" : 13344, "state" : "PA" } +{ "_id" : "15062", "city" : "MONESSEN", "loc" : [ -79.883526, 40.152379 ], "pop" : 9906, "state" : "PA" } +{ "_id" : "15063", "city" : "MONONGAHELA", "loc" : [ -79.924127, 40.193728 ], "pop" : 13183, "state" : "PA" } +{ "_id" : "15064", "city" : "MORGAN", "loc" : [ -80.15406400000001, 40.360433 ], "pop" : 1751, "state" : "PA" } +{ "_id" : "15065", "city" : "NATRONA", "loc" : [ -79.725621, 40.628862 ], "pop" : 13305, "state" : "PA" } +{ "_id" : "15066", "city" : "NEW BRIGHTON", "loc" : [ -80.29722, 40.739333 ], "pop" : 12222, "state" : "PA" } +{ "_id" : "15067", "city" : "NEW EAGLE", "loc" : [ -79.953408, 40.206573 ], "pop" : 2222, "state" : "PA" } +{ "_id" : "15068", "city" : "ARNOLD", "loc" : [ -79.741547, 40.571179 ], "pop" : 41922, "state" : "PA" } +{ "_id" : "15071", "city" : "NOBLESTOWN", "loc" : [ -80.20261499999999, 40.428734 ], "pop" : 11012, "state" : "PA" } +{ "_id" : "15074", "city" : "ROCHESTER", "loc" : [ -80.26031500000001, 40.715745 ], "pop" : 10784, "state" : "PA" } +{ "_id" : "15076", "city" : "RUSSELLTON", "loc" : [ -79.837102, 40.614344 ], "pop" : 1437, "state" : "PA" } +{ "_id" : "15077", "city" : "SHIPPINGPORT", "loc" : [ -80.419866, 40.626012 ], "pop" : 227, "state" : "PA" } +{ "_id" : "15078", "city" : "SLOVAN", "loc" : [ -80.39923899999999, 40.363086 ], "pop" : 1620, "state" : "PA" } +{ "_id" : "15083", "city" : "SUTERSVILLE", "loc" : [ -79.79222300000001, 40.238207 ], "pop" : 1467, "state" : "PA" } +{ "_id" : "15084", "city" : "TARENTUM", "loc" : [ -79.78520399999999, 40.618651 ], "pop" : 10752, "state" : "PA" } +{ "_id" : "15085", "city" : "LEVEL GREEN", "loc" : [ -79.755157, 40.385155 ], "pop" : 3345, "state" : "PA" } +{ "_id" : "15086", "city" : "WARRENDALE", "loc" : [ -80.08070499999999, 40.664149 ], "pop" : 379, "state" : "PA" } +{ "_id" : "15089", "city" : "WEST NEWTON", "loc" : [ -79.757976, 40.207549 ], "pop" : 7641, "state" : "PA" } +{ "_id" : "15090", "city" : "WEXFORD", "loc" : [ -80.064879, 40.612044 ], "pop" : 14960, "state" : "PA" } +{ "_id" : "15101", "city" : "ALLISON PARK", "loc" : [ -79.96651199999999, 40.569975 ], "pop" : 22474, "state" : "PA" } +{ "_id" : "15102", "city" : "BETHEL PARK", "loc" : [ -80.039793, 40.320984 ], "pop" : 31160, "state" : "PA" } +{ "_id" : "15104", "city" : "RANKIN", "loc" : [ -79.864352, 40.406304 ], "pop" : 13915, "state" : "PA" } +{ "_id" : "15106", "city" : "CARNEGIE", "loc" : [ -80.091532, 40.402941 ], "pop" : 19539, "state" : "PA" } +{ "_id" : "15108", "city" : "MOON TWP", "loc" : [ -80.18969, 40.513245 ], "pop" : 35285, "state" : "PA" } +{ "_id" : "15110", "city" : "DUQUESNE", "loc" : [ -79.852244, 40.370449 ], "pop" : 8525, "state" : "PA" } +{ "_id" : "15112", "city" : "EAST PITTSBURGH", "loc" : [ -79.83889000000001, 40.403577 ], "pop" : 4145, "state" : "PA" } +{ "_id" : "15116", "city" : "GLENSHAW", "loc" : [ -79.96435099999999, 40.537492 ], "pop" : 16588, "state" : "PA" } +{ "_id" : "15120", "city" : "MUNHALL", "loc" : [ -79.90419900000001, 40.394171 ], "pop" : 21866, "state" : "PA" } +{ "_id" : "15122", "city" : "W MIFFLIN FIN", "loc" : [ -79.89429, 40.366535 ], "pop" : 22805, "state" : "PA" } +{ "_id" : "15126", "city" : "IMPERIAL", "loc" : [ -80.264861, 40.458384 ], "pop" : 3626, "state" : "PA" } +{ "_id" : "15129", "city" : "LIBRARY", "loc" : [ -80.001144, 40.292199 ], "pop" : 11353, "state" : "PA" } +{ "_id" : "15131", "city" : "WHITE OAK", "loc" : [ -79.810519, 40.341147 ], "pop" : 9410, "state" : "PA" } +{ "_id" : "15132", "city" : "MC KEESPORT", "loc" : [ -79.84520000000001, 40.341713 ], "pop" : 27694, "state" : "PA" } +{ "_id" : "15133", "city" : "MC KEESPORT", "loc" : [ -79.866759, 40.332835 ], "pop" : 7385, "state" : "PA" } +{ "_id" : "15135", "city" : "BOSTON", "loc" : [ -79.812844, 40.304412 ], "pop" : 5385, "state" : "PA" } +{ "_id" : "15136", "city" : "MC KEES ROCKS", "loc" : [ -80.08756700000001, 40.471742 ], "pop" : 25092, "state" : "PA" } +{ "_id" : "15137", "city" : "NORTH VERSAILLES", "loc" : [ -79.812427, 40.376248 ], "pop" : 12237, "state" : "PA" } +{ "_id" : "15139", "city" : "OAKMONT", "loc" : [ -79.836865, 40.519647 ], "pop" : 6961, "state" : "PA" } +{ "_id" : "15140", "city" : "PITCAIRN", "loc" : [ -79.776951, 40.404787 ], "pop" : 4083, "state" : "PA" } +{ "_id" : "15142", "city" : "PRESTO", "loc" : [ -80.12092199999999, 40.384664 ], "pop" : 864, "state" : "PA" } +{ "_id" : "15143", "city" : "SEWICKLEY", "loc" : [ -80.157848, 40.557031 ], "pop" : 15849, "state" : "PA" } +{ "_id" : "15144", "city" : "SPRINGDALE", "loc" : [ -79.784447, 40.543999 ], "pop" : 4858, "state" : "PA" } +{ "_id" : "15145", "city" : "TURTLE CREEK", "loc" : [ -79.822046, 40.41135 ], "pop" : 8157, "state" : "PA" } +{ "_id" : "15146", "city" : "MONROEVILLE", "loc" : [ -79.76227900000001, 40.429026 ], "pop" : 29228, "state" : "PA" } +{ "_id" : "15147", "city" : "VERONA", "loc" : [ -79.834535, 40.492727 ], "pop" : 20843, "state" : "PA" } +{ "_id" : "15148", "city" : "WALL", "loc" : [ -79.803033, 40.393416 ], "pop" : 3074, "state" : "PA" } +{ "_id" : "15201", "city" : "ARSENAL", "loc" : [ -79.952524, 40.474536 ], "pop" : 15278, "state" : "PA" } +{ "_id" : "15202", "city" : "BELLEVUE", "loc" : [ -80.06696599999999, 40.501321 ], "pop" : 22168, "state" : "PA" } +{ "_id" : "15203", "city" : "CARSON", "loc" : [ -79.97755600000001, 40.425439 ], "pop" : 11012, "state" : "PA" } +{ "_id" : "15204", "city" : "CORLISS", "loc" : [ -80.06105599999999, 40.455569 ], "pop" : 10266, "state" : "PA" } +{ "_id" : "15205", "city" : "CRAFTON", "loc" : [ -80.073393, 40.438045 ], "pop" : 24562, "state" : "PA" } +{ "_id" : "15206", "city" : "EAST LIBERTY", "loc" : [ -79.919267, 40.468885 ], "pop" : 37220, "state" : "PA" } +{ "_id" : "15207", "city" : "HAZELWOOD", "loc" : [ -79.93393500000001, 40.401206 ], "pop" : 15095, "state" : "PA" } +{ "_id" : "15208", "city" : "HOMEWOOD", "loc" : [ -79.89847399999999, 40.454955 ], "pop" : 16136, "state" : "PA" } +{ "_id" : "15209", "city" : "MILLVALE", "loc" : [ -79.97401000000001, 40.49718 ], "pop" : 15034, "state" : "PA" } +{ "_id" : "15210", "city" : "MOUNT OLIVER", "loc" : [ -79.987405, 40.408541 ], "pop" : 35727, "state" : "PA" } +{ "_id" : "15211", "city" : "MOUNT WASHINGTON", "loc" : [ -80.012156, 40.42908 ], "pop" : 13333, "state" : "PA" } +{ "_id" : "15212", "city" : "ALLEGHENY", "loc" : [ -80.01312799999999, 40.468873 ], "pop" : 35280, "state" : "PA" } +{ "_id" : "15213", "city" : "OAKLAND", "loc" : [ -79.95442799999999, 40.44372 ], "pop" : 31142, "state" : "PA" } +{ "_id" : "15214", "city" : "OBSERVATORY", "loc" : [ -80.01393, 40.481309 ], "pop" : 19981, "state" : "PA" } +{ "_id" : "15215", "city" : "ASPINWALL", "loc" : [ -79.917513, 40.499225 ], "pop" : 12801, "state" : "PA" } +{ "_id" : "15216", "city" : "SOUTH HILLS", "loc" : [ -80.03572699999999, 40.399584 ], "pop" : 26700, "state" : "PA" } +{ "_id" : "15217", "city" : "SQUIRREL HILL", "loc" : [ -79.92497299999999, 40.431852 ], "pop" : 27450, "state" : "PA" } +{ "_id" : "15218", "city" : "SWISSVALE", "loc" : [ -79.887591, 40.424468 ], "pop" : 16501, "state" : "PA" } +{ "_id" : "15219", "city" : "UPTOWN", "loc" : [ -79.97722899999999, 40.44539 ], "pop" : 18924, "state" : "PA" } +{ "_id" : "15220", "city" : "PARKWAY CENTER", "loc" : [ -80.051202, 40.417405 ], "pop" : 19228, "state" : "PA" } +{ "_id" : "15221", "city" : "WILKINSBURG", "loc" : [ -79.870243, 40.438352 ], "pop" : 39410, "state" : "PA" } +{ "_id" : "15222", "city" : "DOWNTOWN", "loc" : [ -80.000556, 40.442111 ], "pop" : 1763, "state" : "PA" } +{ "_id" : "15223", "city" : "ETNA", "loc" : [ -79.95144999999999, 40.50428 ], "pop" : 7261, "state" : "PA" } +{ "_id" : "15224", "city" : "BLOOMFIELD", "loc" : [ -79.94544500000001, 40.464215 ], "pop" : 14742, "state" : "PA" } +{ "_id" : "15225", "city" : "NEVILLE ISLAND", "loc" : [ -80.137027, 40.513819 ], "pop" : 1273, "state" : "PA" } +{ "_id" : "15226", "city" : "BROOKLINE", "loc" : [ -80.015759, 40.394628 ], "pop" : 15607, "state" : "PA" } +{ "_id" : "15227", "city" : "BRENTWOOD", "loc" : [ -79.97581599999999, 40.37619 ], "pop" : 27563, "state" : "PA" } +{ "_id" : "15228", "city" : "MOUNT LEBANON", "loc" : [ -80.04318600000001, 40.371326 ], "pop" : 18660, "state" : "PA" } +{ "_id" : "15229", "city" : "WEST VIEW", "loc" : [ -80.035685, 40.519321 ], "pop" : 15127, "state" : "PA" } +{ "_id" : "15232", "city" : "SHADYSIDE", "loc" : [ -79.932557, 40.453598 ], "pop" : 10936, "state" : "PA" } +{ "_id" : "15233", "city" : "KILBUCK", "loc" : [ -80.029965, 40.460425 ], "pop" : 5918, "state" : "PA" } +{ "_id" : "15234", "city" : "CASTLE SHANNON", "loc" : [ -80.01790699999999, 40.369424 ], "pop" : 14952, "state" : "PA" } +{ "_id" : "15235", "city" : "PENN HILLS", "loc" : [ -79.826892, 40.4605 ], "pop" : 41997, "state" : "PA" } +{ "_id" : "15236", "city" : "CASTE VILLAGE", "loc" : [ -79.976894, 40.345244 ], "pop" : 36047, "state" : "PA" } +{ "_id" : "15237", "city" : "MC KNIGHT", "loc" : [ -80.03493899999999, 40.552238 ], "pop" : 39733, "state" : "PA" } +{ "_id" : "15238", "city" : "BLAWNOX", "loc" : [ -79.87742299999999, 40.515077 ], "pop" : 10776, "state" : "PA" } +{ "_id" : "15239", "city" : "PLUM", "loc" : [ -79.734505, 40.477693 ], "pop" : 20793, "state" : "PA" } +{ "_id" : "15241", "city" : "UPPER SAINT CLAI", "loc" : [ -80.07921, 40.332174 ], "pop" : 20276, "state" : "PA" } +{ "_id" : "15243", "city" : "CEDARHURST", "loc" : [ -80.072425, 40.373797 ], "pop" : 14242, "state" : "PA" } +{ "_id" : "15301", "city" : "WASHINGTON", "loc" : [ -80.255957, 40.171687 ], "pop" : 48612, "state" : "PA" } +{ "_id" : "15310", "city" : "ALEPPO", "loc" : [ -80.45791800000001, 39.824647 ], "pop" : 656, "state" : "PA" } +{ "_id" : "15311", "city" : "AMITY", "loc" : [ -80.19486499999999, 40.061786 ], "pop" : 1458, "state" : "PA" } +{ "_id" : "15312", "city" : "AVELLA", "loc" : [ -80.456503, 40.273386 ], "pop" : 3681, "state" : "PA" } +{ "_id" : "15313", "city" : "BEALLSVILLE", "loc" : [ -80.02505600000001, 40.064503 ], "pop" : 530, "state" : "PA" } +{ "_id" : "15314", "city" : "BENTLEYVILLE", "loc" : [ -80.006987, 40.118702 ], "pop" : 2673, "state" : "PA" } +{ "_id" : "15317", "city" : "MC MURRAY", "loc" : [ -80.153153, 40.270743 ], "pop" : 29555, "state" : "PA" } +{ "_id" : "15320", "city" : "CARMICHAELS", "loc" : [ -79.971007, 39.882548 ], "pop" : 6702, "state" : "PA" } +{ "_id" : "15321", "city" : "CECIL", "loc" : [ -80.20437, 40.322813 ], "pop" : 3257, "state" : "PA" } +{ "_id" : "15322", "city" : "CLARKSVILLE", "loc" : [ -80.01238600000001, 39.994064 ], "pop" : 3186, "state" : "PA" } +{ "_id" : "15323", "city" : "CLAYSVILLE", "loc" : [ -80.385904, 40.137557 ], "pop" : 6836, "state" : "PA" } +{ "_id" : "15324", "city" : "COKEBURG", "loc" : [ -80.065152, 40.100801 ], "pop" : 854, "state" : "PA" } +{ "_id" : "15327", "city" : "DILLINER", "loc" : [ -79.977135, 39.755536 ], "pop" : 2407, "state" : "PA" } +{ "_id" : "15329", "city" : "PROSPERITY", "loc" : [ -80.261257, 40.0224 ], "pop" : 1633, "state" : "PA" } +{ "_id" : "15330", "city" : "EIGHTY FOUR", "loc" : [ -80.06269500000001, 40.186821 ], "pop" : 5021, "state" : "PA" } +{ "_id" : "15331", "city" : "ELLSWORTH", "loc" : [ -80.020364, 40.107321 ], "pop" : 1040, "state" : "PA" } +{ "_id" : "15332", "city" : "FINLEYVILLE", "loc" : [ -79.97530999999999, 40.259301 ], "pop" : 8838, "state" : "PA" } +{ "_id" : "15333", "city" : "FREDERICKTOWN", "loc" : [ -80.03093699999999, 40.023749 ], "pop" : 770, "state" : "PA" } +{ "_id" : "15337", "city" : "GRAYSVILLE", "loc" : [ -80.395223, 39.909165 ], "pop" : 468, "state" : "PA" } +{ "_id" : "15338", "city" : "GREENSBORO", "loc" : [ -79.93992, 39.804482 ], "pop" : 2164, "state" : "PA" } +{ "_id" : "15340", "city" : "HICKORY", "loc" : [ -80.302508, 40.292511 ], "pop" : 2064, "state" : "PA" } +{ "_id" : "15341", "city" : "HOLBROOK", "loc" : [ -80.338455, 39.848878 ], "pop" : 1247, "state" : "PA" } +{ "_id" : "15342", "city" : "HOUSTON", "loc" : [ -80.22093700000001, 40.242492 ], "pop" : 6060, "state" : "PA" } +{ "_id" : "15344", "city" : "JEFFERSON", "loc" : [ -80.050286, 39.933391 ], "pop" : 2154, "state" : "PA" } +{ "_id" : "15345", "city" : "MARIANNA", "loc" : [ -80.11450600000001, 40.033067 ], "pop" : 2695, "state" : "PA" } +{ "_id" : "15346", "city" : "MATHER", "loc" : [ -80.085353, 39.945226 ], "pop" : 2856, "state" : "PA" } +{ "_id" : "15349", "city" : "DAVISTOWN", "loc" : [ -80.096763, 39.744289 ], "pop" : 1719, "state" : "PA" } +{ "_id" : "15352", "city" : "NEW FREEPORT", "loc" : [ -80.454228, 39.750728 ], "pop" : 833, "state" : "PA" } +{ "_id" : "15353", "city" : "NINEVEH", "loc" : [ -80.312809, 39.974328 ], "pop" : 884, "state" : "PA" } +{ "_id" : "15357", "city" : "RICES LANDING", "loc" : [ -79.98570100000001, 39.943993 ], "pop" : 2095, "state" : "PA" } +{ "_id" : "15359", "city" : "ROGERSVILLE", "loc" : [ -80.283665, 39.900515 ], "pop" : 313, "state" : "PA" } +{ "_id" : "15360", "city" : "SCENERY HILL", "loc" : [ -80.091414, 40.099378 ], "pop" : 2027, "state" : "PA" } +{ "_id" : "15362", "city" : "SPRAGGS", "loc" : [ -80.262186, 39.761038 ], "pop" : 1682, "state" : "PA" } +{ "_id" : "15363", "city" : "STRABANE", "loc" : [ -80.146156, 40.216914 ], "pop" : 2386, "state" : "PA" } +{ "_id" : "15364", "city" : "SYCAMORE", "loc" : [ -80.228199, 39.95273 ], "pop" : 395, "state" : "PA" } +{ "_id" : "15367", "city" : "VENETIA", "loc" : [ -80.059849, 40.275451 ], "pop" : 3568, "state" : "PA" } +{ "_id" : "15370", "city" : "WAYNESBURG", "loc" : [ -80.179524, 39.891691 ], "pop" : 11246, "state" : "PA" } +{ "_id" : "15376", "city" : "WEST ALEXANDER", "loc" : [ -80.49776900000001, 40.106514 ], "pop" : 1642, "state" : "PA" } +{ "_id" : "15377", "city" : "WEST FINLEY", "loc" : [ -80.44080599999999, 39.991397 ], "pop" : 1313, "state" : "PA" } +{ "_id" : "15380", "city" : "WIND RIDGE", "loc" : [ -80.464665, 39.897106 ], "pop" : 554, "state" : "PA" } +{ "_id" : "15401", "city" : "UNIONTOWN", "loc" : [ -79.728216, 39.889733 ], "pop" : 34582, "state" : "PA" } +{ "_id" : "15410", "city" : "ADAH", "loc" : [ -79.890827, 39.883101 ], "pop" : 596, "state" : "PA" } +{ "_id" : "15411", "city" : "ADDISON", "loc" : [ -79.319334, 39.761195 ], "pop" : 1158, "state" : "PA" } +{ "_id" : "15412", "city" : "ALLENPORT", "loc" : [ -79.85419400000001, 40.089845 ], "pop" : 665, "state" : "PA" } +{ "_id" : "15413", "city" : "ALLISON", "loc" : [ -79.875675, 39.982566 ], "pop" : 326, "state" : "PA" } +{ "_id" : "15417", "city" : "WEST BROWNSVILLE", "loc" : [ -79.920609, 40.02671 ], "pop" : 9133, "state" : "PA" } +{ "_id" : "15419", "city" : "CALIFORNIA", "loc" : [ -79.895319, 40.062529 ], "pop" : 5778, "state" : "PA" } +{ "_id" : "15423", "city" : "COAL CENTER", "loc" : [ -79.8839, 40.097272 ], "pop" : 482, "state" : "PA" } +{ "_id" : "15424", "city" : "LISTONBURG", "loc" : [ -79.351304, 39.821247 ], "pop" : 1998, "state" : "PA" } +{ "_id" : "15425", "city" : "SOUTH CONNELLSVI", "loc" : [ -79.587838, 40.025037 ], "pop" : 25516, "state" : "PA" } +{ "_id" : "15427", "city" : "DAISYTOWN", "loc" : [ -79.96703599999999, 40.074349 ], "pop" : 1858, "state" : "PA" } +{ "_id" : "15428", "city" : "DAWSON", "loc" : [ -79.660224, 40.063767 ], "pop" : 1673, "state" : "PA" } +{ "_id" : "15431", "city" : "DUNBAR", "loc" : [ -79.64305, 39.972171 ], "pop" : 2947, "state" : "PA" } +{ "_id" : "15432", "city" : "DUNLEVY", "loc" : [ -79.862703, 40.115077 ], "pop" : 417, "state" : "PA" } +{ "_id" : "15433", "city" : "EAST MILLSBORO", "loc" : [ -79.966442, 39.982214 ], "pop" : 104, "state" : "PA" } +{ "_id" : "15434", "city" : "ELCO", "loc" : [ -79.87583600000001, 40.079671 ], "pop" : 373, "state" : "PA" } +{ "_id" : "15436", "city" : "FAIRCHANCE", "loc" : [ -79.75505099999999, 39.822876 ], "pop" : 1918, "state" : "PA" } +{ "_id" : "15437", "city" : "FARMINGTON", "loc" : [ -79.583185, 39.806995 ], "pop" : 3296, "state" : "PA" } +{ "_id" : "15438", "city" : "FAYETTE CITY", "loc" : [ -79.836584, 40.098799 ], "pop" : 921, "state" : "PA" } +{ "_id" : "15440", "city" : "GIBBON GLADE", "loc" : [ -79.57360300000001, 39.736357 ], "pop" : 94, "state" : "PA" } +{ "_id" : "15442", "city" : "GRINDSTONE", "loc" : [ -79.840447, 40.008415 ], "pop" : 6843, "state" : "PA" } +{ "_id" : "15444", "city" : "HILLER", "loc" : [ -79.899936, 40.004496 ], "pop" : 2028, "state" : "PA" } +{ "_id" : "15445", "city" : "HOPWOOD", "loc" : [ -79.705945, 39.868868 ], "pop" : 3367, "state" : "PA" } +{ "_id" : "15446", "city" : "INDIAN HEAD", "loc" : [ -79.393387, 40.020195 ], "pop" : 181, "state" : "PA" } +{ "_id" : "15450", "city" : "LA BELLE", "loc" : [ -79.93702399999999, 39.973829 ], "pop" : 2169, "state" : "PA" } +{ "_id" : "15451", "city" : "LAKE LYNN", "loc" : [ -79.86184, 39.750065 ], "pop" : 2217, "state" : "PA" } +{ "_id" : "15456", "city" : "LEMONT FURNACE", "loc" : [ -79.647684, 39.931057 ], "pop" : 1638, "state" : "PA" } +{ "_id" : "15458", "city" : "LAMBERTON", "loc" : [ -79.859022, 39.890185 ], "pop" : 4703, "state" : "PA" } +{ "_id" : "15459", "city" : "MARKLEYSBURG", "loc" : [ -79.46003, 39.759723 ], "pop" : 2052, "state" : "PA" } +{ "_id" : "15461", "city" : "GRAYS LANDING", "loc" : [ -79.89381299999999, 39.83495 ], "pop" : 6033, "state" : "PA" } +{ "_id" : "15462", "city" : "MELCROFT", "loc" : [ -79.3587, 40.064789 ], "pop" : 77, "state" : "PA" } +{ "_id" : "15463", "city" : "MERRITTSTOWN", "loc" : [ -79.874447, 39.964854 ], "pop" : 1830, "state" : "PA" } +{ "_id" : "15464", "city" : "MILL RUN", "loc" : [ -79.462219, 39.967985 ], "pop" : 1972, "state" : "PA" } +{ "_id" : "15468", "city" : "NEW SALEM", "loc" : [ -79.80407, 39.940747 ], "pop" : 4509, "state" : "PA" } +{ "_id" : "15469", "city" : "NORMALVILLE", "loc" : [ -79.41506099999999, 40.041793 ], "pop" : 3814, "state" : "PA" } +{ "_id" : "15470", "city" : "OHIOPYLE", "loc" : [ -79.48846, 39.873202 ], "pop" : 815, "state" : "PA" } +{ "_id" : "15472", "city" : "OLIVER", "loc" : [ -79.71560100000001, 39.911659 ], "pop" : 2395, "state" : "PA" } +{ "_id" : "15473", "city" : "LAYTON", "loc" : [ -79.754384, 40.085724 ], "pop" : 1833, "state" : "PA" } +{ "_id" : "15474", "city" : "POINT MARION", "loc" : [ -79.89898599999999, 39.735124 ], "pop" : 1474, "state" : "PA" } +{ "_id" : "15475", "city" : "REPUBLIC", "loc" : [ -79.902914, 39.961427 ], "pop" : 641, "state" : "PA" } +{ "_id" : "15477", "city" : "ROSCOE", "loc" : [ -79.865617, 40.078686 ], "pop" : 802, "state" : "PA" } +{ "_id" : "15478", "city" : "SMITHFIELD", "loc" : [ -79.81268, 39.792306 ], "pop" : 2163, "state" : "PA" } +{ "_id" : "15479", "city" : "VAN METER", "loc" : [ -79.73127700000001, 40.144267 ], "pop" : 1009, "state" : "PA" } +{ "_id" : "15480", "city" : "SMOCK", "loc" : [ -79.76782799999999, 39.996096 ], "pop" : 986, "state" : "PA" } +{ "_id" : "15482", "city" : "STAR JUNCTION", "loc" : [ -79.755461, 40.083198 ], "pop" : 2803, "state" : "PA" } +{ "_id" : "15483", "city" : "STOCKDALE", "loc" : [ -79.850103, 40.082567 ], "pop" : 630, "state" : "PA" } +{ "_id" : "15486", "city" : "VANDERBILT", "loc" : [ -79.69551800000001, 40.024581 ], "pop" : 2706, "state" : "PA" } +{ "_id" : "15488", "city" : "WALTERSBURG", "loc" : [ -79.78033600000001, 39.990465 ], "pop" : 237, "state" : "PA" } +{ "_id" : "15490", "city" : "WHITE", "loc" : [ -79.425117, 40.072596 ], "pop" : 138, "state" : "PA" } +{ "_id" : "15501", "city" : "SOMERSET", "loc" : [ -79.080814, 40.024813 ], "pop" : 18303, "state" : "PA" } +{ "_id" : "15521", "city" : "ALUM BANK", "loc" : [ -78.620591, 40.185833 ], "pop" : 2175, "state" : "PA" } +{ "_id" : "15522", "city" : "BEDFORD", "loc" : [ -78.526071, 39.990838 ], "pop" : 10788, "state" : "PA" } +{ "_id" : "15530", "city" : "BERLIN", "loc" : [ -78.96369199999999, 39.918847 ], "pop" : 4459, "state" : "PA" } +{ "_id" : "15531", "city" : "BOSWELL", "loc" : [ -79.036179, 40.191807 ], "pop" : 1681, "state" : "PA" } +{ "_id" : "15533", "city" : "BREEZEWOOD", "loc" : [ -78.245271, 39.990521 ], "pop" : 999, "state" : "PA" } +{ "_id" : "15534", "city" : "BUFFALO MILLS", "loc" : [ -78.69962, 39.922025 ], "pop" : 445, "state" : "PA" } +{ "_id" : "15535", "city" : "CLEARVILLE", "loc" : [ -78.43917999999999, 39.853284 ], "pop" : 2304, "state" : "PA" } +{ "_id" : "15536", "city" : "CRYSTAL SPRING", "loc" : [ -78.225836, 39.919973 ], "pop" : 643, "state" : "PA" } +{ "_id" : "15537", "city" : "EVERETT", "loc" : [ -78.371315, 40.009808 ], "pop" : 7289, "state" : "PA" } +{ "_id" : "15538", "city" : "GLENCOE", "loc" : [ -78.827522, 39.909046 ], "pop" : 1350, "state" : "PA" } +{ "_id" : "15540", "city" : "FORT HILL", "loc" : [ -79.23535, 39.877282 ], "pop" : 305, "state" : "PA" } +{ "_id" : "15541", "city" : "FRIEDENS", "loc" : [ -78.90329800000001, 40.010997 ], "pop" : 2065, "state" : "PA" } +{ "_id" : "15542", "city" : "GARRETT", "loc" : [ -79.061561, 39.864581 ], "pop" : 520, "state" : "PA" } +{ "_id" : "15545", "city" : "HYNDMAN", "loc" : [ -78.733512, 39.804857 ], "pop" : 2732, "state" : "PA" } +{ "_id" : "15546", "city" : "JENNERS", "loc" : [ -79.054571, 40.147321 ], "pop" : 4586, "state" : "PA" } +{ "_id" : "15550", "city" : "MANNS CHOICE", "loc" : [ -78.642259, 39.980787 ], "pop" : 1579, "state" : "PA" } +{ "_id" : "15551", "city" : "MARKLETON", "loc" : [ -79.287851, 39.869096 ], "pop" : 288, "state" : "PA" } +{ "_id" : "15552", "city" : "MEYERSDALE", "loc" : [ -79.026141, 39.790489 ], "pop" : 9276, "state" : "PA" } +{ "_id" : "15554", "city" : "NEW PARIS", "loc" : [ -78.58856900000001, 40.118876 ], "pop" : 3982, "state" : "PA" } +{ "_id" : "15557", "city" : "ROCKWOOD", "loc" : [ -79.18654600000001, 39.937296 ], "pop" : 5125, "state" : "PA" } +{ "_id" : "15558", "city" : "SALISBURY", "loc" : [ -79.083516, 39.753052 ], "pop" : 716, "state" : "PA" } +{ "_id" : "15559", "city" : "SCHELLSBURG", "loc" : [ -78.648194, 40.04869 ], "pop" : 1523, "state" : "PA" } +{ "_id" : "15562", "city" : "SPRINGS", "loc" : [ -79.08895, 39.748895 ], "pop" : 82, "state" : "PA" } +{ "_id" : "15563", "city" : "STOYSTOWN", "loc" : [ -78.955978, 40.109886 ], "pop" : 2690, "state" : "PA" } +{ "_id" : "15601", "city" : "GREENSBURG", "loc" : [ -79.542439, 40.307359 ], "pop" : 52186, "state" : "PA" } +{ "_id" : "15610", "city" : "ACME", "loc" : [ -79.482747, 40.104891 ], "pop" : 3862, "state" : "PA" } +{ "_id" : "15611", "city" : "ADAMSBURG", "loc" : [ -79.656469, 40.312577 ], "pop" : 255, "state" : "PA" } +{ "_id" : "15612", "city" : "ALVERTON", "loc" : [ -79.55860800000001, 40.127866 ], "pop" : 2166, "state" : "PA" } +{ "_id" : "15613", "city" : "APOLLO", "loc" : [ -79.577158, 40.556481 ], "pop" : 18588, "state" : "PA" } +{ "_id" : "15615", "city" : "ARDARA", "loc" : [ -79.73353299999999, 40.362993 ], "pop" : 450, "state" : "PA" } +{ "_id" : "15616", "city" : "ARMBRUST", "loc" : [ -79.553884, 40.236097 ], "pop" : 500, "state" : "PA" } +{ "_id" : "15617", "city" : "ARONA", "loc" : [ -79.659104, 40.26799 ], "pop" : 397, "state" : "PA" } +{ "_id" : "15618", "city" : "AVONMORE", "loc" : [ -79.485264, 40.522125 ], "pop" : 3306, "state" : "PA" } +{ "_id" : "15620", "city" : "BRADENVILLE", "loc" : [ -79.309679, 40.296094 ], "pop" : 139, "state" : "PA" } +{ "_id" : "15622", "city" : "CHAMPION", "loc" : [ -79.324719, 40.043976 ], "pop" : 109, "state" : "PA" } +{ "_id" : "15625", "city" : "DARRAGH", "loc" : [ -79.67803600000001, 40.260377 ], "pop" : 159, "state" : "PA" } +{ "_id" : "15626", "city" : "DELMONT", "loc" : [ -79.57638, 40.413901 ], "pop" : 2852, "state" : "PA" } +{ "_id" : "15627", "city" : "DERRY", "loc" : [ -79.33258499999999, 40.334931 ], "pop" : 10610, "state" : "PA" } +{ "_id" : "15628", "city" : "DONEGAL", "loc" : [ -79.38104300000001, 40.099613 ], "pop" : 584, "state" : "PA" } +{ "_id" : "15631", "city" : "EVERSON", "loc" : [ -79.587277, 40.091144 ], "pop" : 868, "state" : "PA" } +{ "_id" : "15632", "city" : "EXPORT", "loc" : [ -79.61102099999999, 40.425185 ], "pop" : 8364, "state" : "PA" } +{ "_id" : "15634", "city" : "GRAPEVILLE", "loc" : [ -79.603189, 40.303804 ], "pop" : 683, "state" : "PA" } +{ "_id" : "15636", "city" : "HARRISON CITY", "loc" : [ -79.679754, 40.372455 ], "pop" : 12018, "state" : "PA" } +{ "_id" : "15637", "city" : "HERMINIE", "loc" : [ -79.717164, 40.245485 ], "pop" : 3820, "state" : "PA" } +{ "_id" : "15639", "city" : "HUNKER", "loc" : [ -79.582364, 40.214947 ], "pop" : 1592, "state" : "PA" } +{ "_id" : "15641", "city" : "HYDE PARK", "loc" : [ -79.589884, 40.631102 ], "pop" : 542, "state" : "PA" } +{ "_id" : "15642", "city" : "NORTH HUNTINGDON", "loc" : [ -79.723855, 40.319227 ], "pop" : 36415, "state" : "PA" } +{ "_id" : "15644", "city" : "JEANNETTE", "loc" : [ -79.614412, 40.32947 ], "pop" : 20989, "state" : "PA" } +{ "_id" : "15646", "city" : "JONES MILLS", "loc" : [ -79.339933, 40.07977 ], "pop" : 226, "state" : "PA" } +{ "_id" : "15647", "city" : "LARIMER", "loc" : [ -79.736627, 40.351842 ], "pop" : 1731, "state" : "PA" } +{ "_id" : "15650", "city" : "LATROBE", "loc" : [ -79.41027800000001, 40.292625 ], "pop" : 29529, "state" : "PA" } +{ "_id" : "15655", "city" : "LAUGHLINTOWN", "loc" : [ -79.18058000000001, 40.208025 ], "pop" : 436, "state" : "PA" } +{ "_id" : "15656", "city" : "LEECHBURG", "loc" : [ -79.62010100000001, 40.634398 ], "pop" : 11552, "state" : "PA" } +{ "_id" : "15658", "city" : "WILPEN", "loc" : [ -79.236666, 40.245133 ], "pop" : 9229, "state" : "PA" } +{ "_id" : "15661", "city" : "LOYALHANNA", "loc" : [ -79.344157, 40.30199 ], "pop" : 564, "state" : "PA" } +{ "_id" : "15663", "city" : "MADISON", "loc" : [ -79.675978, 40.246669 ], "pop" : 539, "state" : "PA" } +{ "_id" : "15665", "city" : "MANOR", "loc" : [ -79.671221, 40.33822 ], "pop" : 3848, "state" : "PA" } +{ "_id" : "15666", "city" : "MOUNT PLEASANT", "loc" : [ -79.513383, 40.174179 ], "pop" : 15336, "state" : "PA" } +{ "_id" : "15668", "city" : "MURRYSVILLE", "loc" : [ -79.68415400000001, 40.446674 ], "pop" : 10965, "state" : "PA" } +{ "_id" : "15670", "city" : "NEW ALEXANDRIA", "loc" : [ -79.39659399999999, 40.398112 ], "pop" : 2658, "state" : "PA" } +{ "_id" : "15671", "city" : "NEW DERRY", "loc" : [ -79.30086300000001, 40.333334 ], "pop" : 2950, "state" : "PA" } +{ "_id" : "15672", "city" : "NEW STANTON", "loc" : [ -79.61818700000001, 40.223345 ], "pop" : 3237, "state" : "PA" } +{ "_id" : "15675", "city" : "PENN", "loc" : [ -79.641336, 40.330081 ], "pop" : 619, "state" : "PA" } +{ "_id" : "15677", "city" : "RECTOR", "loc" : [ -79.247331, 40.186444 ], "pop" : 376, "state" : "PA" } +{ "_id" : "15678", "city" : "RILLTON", "loc" : [ -79.728211, 40.282454 ], "pop" : 1050, "state" : "PA" } +{ "_id" : "15679", "city" : "RUFFS DALE", "loc" : [ -79.627743, 40.158458 ], "pop" : 6385, "state" : "PA" } +{ "_id" : "15681", "city" : "SALTSBURG", "loc" : [ -79.44284399999999, 40.479239 ], "pop" : 3922, "state" : "PA" } +{ "_id" : "15683", "city" : "SCOTTDALE", "loc" : [ -79.593017, 40.102948 ], "pop" : 6132, "state" : "PA" } +{ "_id" : "15684", "city" : "SLICKVILLE", "loc" : [ -79.506654, 40.465347 ], "pop" : 318, "state" : "PA" } +{ "_id" : "15686", "city" : "SPRING CHURCH", "loc" : [ -79.454487, 40.615329 ], "pop" : 1291, "state" : "PA" } +{ "_id" : "15687", "city" : "STAHLSTOWN", "loc" : [ -79.34447299999999, 40.138593 ], "pop" : 2555, "state" : "PA" } +{ "_id" : "15688", "city" : "TARRS", "loc" : [ -79.566101, 40.161915 ], "pop" : 385, "state" : "PA" } +{ "_id" : "15690", "city" : "PARK", "loc" : [ -79.56553099999999, 40.605883 ], "pop" : 9409, "state" : "PA" } +{ "_id" : "15692", "city" : "WESTMORELAND CIT", "loc" : [ -79.547696, 40.276802 ], "pop" : 2293, "state" : "PA" } +{ "_id" : "15697", "city" : "YOUNGWOOD", "loc" : [ -79.582291, 40.239482 ], "pop" : 3319, "state" : "PA" } +{ "_id" : "15698", "city" : "YUKON", "loc" : [ -79.68494099999999, 40.215529 ], "pop" : 726, "state" : "PA" } +{ "_id" : "15701", "city" : "INDIANA", "loc" : [ -79.15959599999999, 40.619628 ], "pop" : 28962, "state" : "PA" } +{ "_id" : "15711", "city" : "ANITA", "loc" : [ -78.96663700000001, 41.001806 ], "pop" : 586, "state" : "PA" } +{ "_id" : "15713", "city" : "AULTMAN", "loc" : [ -79.219791, 40.540083 ], "pop" : 162, "state" : "PA" } +{ "_id" : "15714", "city" : "BARNESBORO", "loc" : [ -78.777058, 40.673307 ], "pop" : 3878, "state" : "PA" } +{ "_id" : "15716", "city" : "BLACK LICK", "loc" : [ -79.193231, 40.466905 ], "pop" : 1100, "state" : "PA" } +{ "_id" : "15717", "city" : "BLAIRSVILLE", "loc" : [ -79.25332899999999, 40.441262 ], "pop" : 9738, "state" : "PA" } +{ "_id" : "15720", "city" : "BRUSH VALLEY", "loc" : [ -79.05876499999999, 40.528565 ], "pop" : 1811, "state" : "PA" } +{ "_id" : "15721", "city" : "BURNSIDE", "loc" : [ -78.78648800000001, 40.813431 ], "pop" : 350, "state" : "PA" } +{ "_id" : "15722", "city" : "CARROLLTOWN", "loc" : [ -78.703676, 40.589054 ], "pop" : 2644, "state" : "PA" } +{ "_id" : "15724", "city" : "CHERRY TREE", "loc" : [ -78.847357, 40.755387 ], "pop" : 2220, "state" : "PA" } +{ "_id" : "15725", "city" : "CLARKSBURG", "loc" : [ -79.367676, 40.503933 ], "pop" : 1369, "state" : "PA" } +{ "_id" : "15728", "city" : "CLYMER", "loc" : [ -79.01186300000001, 40.668811 ], "pop" : 1499, "state" : "PA" } +{ "_id" : "15729", "city" : "COMMODORE", "loc" : [ -78.913371, 40.701588 ], "pop" : 3259, "state" : "PA" } +{ "_id" : "15730", "city" : "COOLSPRING", "loc" : [ -78.922015, 40.951816 ], "pop" : 44, "state" : "PA" } +{ "_id" : "15732", "city" : "CREEKSIDE", "loc" : [ -79.201396, 40.719892 ], "pop" : 2198, "state" : "PA" } +{ "_id" : "15739", "city" : "ERNEST", "loc" : [ -79.096937, 40.704255 ], "pop" : 3841, "state" : "PA" } +{ "_id" : "15742", "city" : "GLEN CAMPBELL", "loc" : [ -78.855538, 40.850766 ], "pop" : 1308, "state" : "PA" } +{ "_id" : "15744", "city" : "HAMILTON", "loc" : [ -79.093987, 40.921432 ], "pop" : 0, "state" : "PA" } +{ "_id" : "15747", "city" : "HOME", "loc" : [ -79.16408199999999, 40.783441 ], "pop" : 926, "state" : "PA" } +{ "_id" : "15748", "city" : "GRACETON", "loc" : [ -79.183942, 40.538375 ], "pop" : 3677, "state" : "PA" } +{ "_id" : "15753", "city" : "LA JOSE", "loc" : [ -78.62336999999999, 40.830118 ], "pop" : 1119, "state" : "PA" } +{ "_id" : "15754", "city" : "LUCERNEMINES", "loc" : [ -79.157349, 40.545313 ], "pop" : 3227, "state" : "PA" } +{ "_id" : "15757", "city" : "MC GEES MILLS", "loc" : [ -78.72038999999999, 40.889251 ], "pop" : 1792, "state" : "PA" } +{ "_id" : "15758", "city" : "MARCHAND", "loc" : [ -79.045151, 40.875411 ], "pop" : 1302, "state" : "PA" } +{ "_id" : "15759", "city" : "MARION CENTER", "loc" : [ -79.02524, 40.78135 ], "pop" : 2085, "state" : "PA" } +{ "_id" : "15760", "city" : "MARSTELLER", "loc" : [ -78.813356, 40.65004 ], "pop" : 959, "state" : "PA" } +{ "_id" : "15762", "city" : "NICKTOWN", "loc" : [ -78.81139400000001, 40.601623 ], "pop" : 1395, "state" : "PA" } +{ "_id" : "15763", "city" : "NORTHPOINT", "loc" : [ -79.125657, 40.903703 ], "pop" : 49, "state" : "PA" } +{ "_id" : "15764", "city" : "OLIVEBURG", "loc" : [ -79.038197, 40.996379 ], "pop" : 8, "state" : "PA" } +{ "_id" : "15765", "city" : "PENN RUN", "loc" : [ -78.971597, 40.626825 ], "pop" : 4258, "state" : "PA" } +{ "_id" : "15767", "city" : "PUNXSUTAWNEY", "loc" : [ -78.968056, 40.947937 ], "pop" : 12377, "state" : "PA" } +{ "_id" : "15770", "city" : "RINGGOLD", "loc" : [ -79.176581, 40.999731 ], "pop" : 692, "state" : "PA" } +{ "_id" : "15771", "city" : "ROCHESTER MILLS", "loc" : [ -78.997985, 40.819482 ], "pop" : 253, "state" : "PA" } +{ "_id" : "15772", "city" : "ROSSITER", "loc" : [ -78.94135300000001, 40.884553 ], "pop" : 1858, "state" : "PA" } +{ "_id" : "15773", "city" : "SAINT BENEDICT", "loc" : [ -78.738332, 40.611845 ], "pop" : 1544, "state" : "PA" } +{ "_id" : "15774", "city" : "SHELOCTA", "loc" : [ -79.31907, 40.638787 ], "pop" : 7854, "state" : "PA" } +{ "_id" : "15775", "city" : "SPANGLER", "loc" : [ -78.76906099999999, 40.648082 ], "pop" : 2851, "state" : "PA" } +{ "_id" : "15776", "city" : "SPRANKLE MILLS", "loc" : [ -79.077809, 41.01846 ], "pop" : 980, "state" : "PA" } +{ "_id" : "15777", "city" : "STARFORD", "loc" : [ -78.980317, 40.700971 ], "pop" : 850, "state" : "PA" } +{ "_id" : "15778", "city" : "TIMBLIN", "loc" : [ -79.20135000000001, 40.968387 ], "pop" : 178, "state" : "PA" } +{ "_id" : "15780", "city" : "VALIER", "loc" : [ -79.083263, 40.922851 ], "pop" : 44, "state" : "PA" } +{ "_id" : "15784", "city" : "WORTHVILLE", "loc" : [ -79.138685, 41.023767 ], "pop" : 65, "state" : "PA" } +{ "_id" : "15801", "city" : "DU BOIS", "loc" : [ -78.752698, 41.126039 ], "pop" : 17345, "state" : "PA" } +{ "_id" : "15821", "city" : "BENEZETT", "loc" : [ -78.35762099999999, 41.325318 ], "pop" : 243, "state" : "PA" } +{ "_id" : "15823", "city" : "BROCKPORT", "loc" : [ -78.712829, 41.28217 ], "pop" : 1646, "state" : "PA" } +{ "_id" : "15824", "city" : "BROCKWAY", "loc" : [ -78.81156799999999, 41.240564 ], "pop" : 6361, "state" : "PA" } +{ "_id" : "15825", "city" : "HAZEN", "loc" : [ -79.06410099999999, 41.159986 ], "pop" : 9303, "state" : "PA" } +{ "_id" : "15827", "city" : "BYRNEDALE", "loc" : [ -78.505126, 41.286459 ], "pop" : 1892, "state" : "PA" } +{ "_id" : "15828", "city" : "CLARINGTON", "loc" : [ -79.146557, 41.323272 ], "pop" : 311, "state" : "PA" } +{ "_id" : "15829", "city" : "CORSICA", "loc" : [ -79.175567, 41.182983 ], "pop" : 1070, "state" : "PA" } +{ "_id" : "15832", "city" : "DRIFTWOOD", "loc" : [ -78.163194, 41.376396 ], "pop" : 526, "state" : "PA" } +{ "_id" : "15834", "city" : "EMPORIUM", "loc" : [ -78.25360999999999, 41.517689 ], "pop" : 5219, "state" : "PA" } +{ "_id" : "15840", "city" : "FALLS CREEK", "loc" : [ -78.812791, 41.145505 ], "pop" : 1422, "state" : "PA" } +{ "_id" : "15845", "city" : "JOHNSONBURG", "loc" : [ -78.67825999999999, 41.492823 ], "pop" : 3350, "state" : "PA" } +{ "_id" : "15846", "city" : "KERSEY", "loc" : [ -78.60151999999999, 41.356271 ], "pop" : 3392, "state" : "PA" } +{ "_id" : "15848", "city" : "LUTHERSBURG", "loc" : [ -78.74275799999999, 41.05321 ], "pop" : 2249, "state" : "PA" } +{ "_id" : "15849", "city" : "PENFIELD", "loc" : [ -78.579111, 41.208519 ], "pop" : 1395, "state" : "PA" } +{ "_id" : "15851", "city" : "REYNOLDSVILLE", "loc" : [ -78.896147, 41.062935 ], "pop" : 8758, "state" : "PA" } +{ "_id" : "15853", "city" : "PORTLAND MILLS", "loc" : [ -78.729715, 41.431566 ], "pop" : 7419, "state" : "PA" } +{ "_id" : "15856", "city" : "ROCKTON", "loc" : [ -78.657662, 41.080571 ], "pop" : 833, "state" : "PA" } +{ "_id" : "15857", "city" : "SAINT MARYS", "loc" : [ -78.550533, 41.428949 ], "pop" : 14020, "state" : "PA" } +{ "_id" : "15860", "city" : "SIGEL", "loc" : [ -79.053957, 41.309921 ], "pop" : 1103, "state" : "PA" } +{ "_id" : "15861", "city" : "SINNAMAHONING", "loc" : [ -78.06607, 41.376197 ], "pop" : 168, "state" : "PA" } +{ "_id" : "15864", "city" : "SUMMERVILLE", "loc" : [ -79.172583, 41.105822 ], "pop" : 1749, "state" : "PA" } +{ "_id" : "15865", "city" : "SYKESVILLE", "loc" : [ -78.819508, 41.05137 ], "pop" : 1387, "state" : "PA" } +{ "_id" : "15868", "city" : "WEEDVILLE", "loc" : [ -78.495165, 41.268502 ], "pop" : 195, "state" : "PA" } +{ "_id" : "15870", "city" : "WILCOX", "loc" : [ -78.682295, 41.573471 ], "pop" : 1870, "state" : "PA" } +{ "_id" : "15901", "city" : "JOHNSTOWN", "loc" : [ -78.91408, 40.325957 ], "pop" : 6649, "state" : "PA" } +{ "_id" : "15902", "city" : "JOHNSTOWN", "loc" : [ -78.896905, 40.307787 ], "pop" : 16012, "state" : "PA" } +{ "_id" : "15904", "city" : "JOHNSTOWN", "loc" : [ -78.86538299999999, 40.285026 ], "pop" : 16858, "state" : "PA" } +{ "_id" : "15905", "city" : "JOHNSTOWN", "loc" : [ -78.943006, 40.307188 ], "pop" : 22509, "state" : "PA" } +{ "_id" : "15906", "city" : "JOHNSTOWN", "loc" : [ -78.938317, 40.352193 ], "pop" : 13249, "state" : "PA" } +{ "_id" : "15909", "city" : "JOHNSTOWN", "loc" : [ -78.862284, 40.387965 ], "pop" : 7944, "state" : "PA" } +{ "_id" : "15920", "city" : "ARMAGH", "loc" : [ -79.01305499999999, 40.442452 ], "pop" : 2839, "state" : "PA" } +{ "_id" : "15923", "city" : "BOLIVAR", "loc" : [ -79.160546, 40.367289 ], "pop" : 2043, "state" : "PA" } +{ "_id" : "15924", "city" : "CAIRNBROOK", "loc" : [ -78.81008199999999, 40.114472 ], "pop" : 2178, "state" : "PA" } +{ "_id" : "15926", "city" : "CENTRAL CITY", "loc" : [ -78.844753, 40.091257 ], "pop" : 2886, "state" : "PA" } +{ "_id" : "15927", "city" : "COLVER", "loc" : [ -78.778432, 40.541086 ], "pop" : 1531, "state" : "PA" } +{ "_id" : "15928", "city" : "DAVIDSVILLE", "loc" : [ -78.936333, 40.224451 ], "pop" : 244, "state" : "PA" } +{ "_id" : "15931", "city" : "EBENSBURG", "loc" : [ -78.726294, 40.480105 ], "pop" : 9386, "state" : "PA" } +{ "_id" : "15935", "city" : "HOLLSOPPLE", "loc" : [ -78.951471, 40.234301 ], "pop" : 7012, "state" : "PA" } +{ "_id" : "15936", "city" : "HOOVERSVILLE", "loc" : [ -78.91407100000001, 40.148776 ], "pop" : 731, "state" : "PA" } +{ "_id" : "15938", "city" : "LILLY", "loc" : [ -78.62306, 40.423844 ], "pop" : 2252, "state" : "PA" } +{ "_id" : "15940", "city" : "LORETTO", "loc" : [ -78.629357, 40.510484 ], "pop" : 2771, "state" : "PA" } +{ "_id" : "15942", "city" : "MINERAL POINT", "loc" : [ -78.835201, 40.379253 ], "pop" : 420, "state" : "PA" } +{ "_id" : "15943", "city" : "NANTY GLO", "loc" : [ -78.837504, 40.470435 ], "pop" : 4680, "state" : "PA" } +{ "_id" : "15944", "city" : "NEW FLORENCE", "loc" : [ -79.09680299999999, 40.382266 ], "pop" : 3949, "state" : "PA" } +{ "_id" : "15945", "city" : "PARKHILL", "loc" : [ -78.869432, 40.359385 ], "pop" : 120, "state" : "PA" } +{ "_id" : "15946", "city" : "PURITAN", "loc" : [ -78.671753, 40.384201 ], "pop" : 8160, "state" : "PA" } +{ "_id" : "15949", "city" : "ROBINSON", "loc" : [ -79.137928, 40.407655 ], "pop" : 829, "state" : "PA" } +{ "_id" : "15951", "city" : "SAINT MICHAEL", "loc" : [ -78.782999, 40.336248 ], "pop" : 1425, "state" : "PA" } +{ "_id" : "15952", "city" : "SALIX", "loc" : [ -78.74370399999999, 40.300627 ], "pop" : 6215, "state" : "PA" } +{ "_id" : "15953", "city" : "SEANOR", "loc" : [ -78.890897, 40.231191 ], "pop" : 18, "state" : "PA" } +{ "_id" : "15954", "city" : "SEWARD", "loc" : [ -79.023224, 40.409907 ], "pop" : 1348, "state" : "PA" } +{ "_id" : "15955", "city" : "SIDMAN", "loc" : [ -78.745966, 40.329873 ], "pop" : 1235, "state" : "PA" } +{ "_id" : "15956", "city" : "SOUTH FORK", "loc" : [ -78.78867099999999, 40.362877 ], "pop" : 2497, "state" : "PA" } +{ "_id" : "15957", "city" : "STRONGSTOWN", "loc" : [ -78.912961, 40.56279 ], "pop" : 678, "state" : "PA" } +{ "_id" : "15958", "city" : "SUMMERHILL", "loc" : [ -78.755979, 40.388959 ], "pop" : 2215, "state" : "PA" } +{ "_id" : "15960", "city" : "TWIN ROCKS", "loc" : [ -78.860488, 40.518254 ], "pop" : 1535, "state" : "PA" } +{ "_id" : "15961", "city" : "VINTONDALE", "loc" : [ -78.94267000000001, 40.493949 ], "pop" : 2141, "state" : "PA" } +{ "_id" : "15963", "city" : "WINDBER", "loc" : [ -78.83028899999999, 40.228695 ], "pop" : 11421, "state" : "PA" } +{ "_id" : "16001", "city" : "BON AIRE", "loc" : [ -79.902717, 40.862096 ], "pop" : 55158, "state" : "PA" } +{ "_id" : "16020", "city" : "BOYERS", "loc" : [ -79.904692, 41.109205 ], "pop" : 974, "state" : "PA" } +{ "_id" : "16022", "city" : "BRUIN", "loc" : [ -79.729051, 41.057078 ], "pop" : 637, "state" : "PA" } +{ "_id" : "16023", "city" : "MARWOOD", "loc" : [ -79.77085099999999, 40.779723 ], "pop" : 3483, "state" : "PA" } +{ "_id" : "16025", "city" : "CHICORA", "loc" : [ -79.74623699999999, 40.945768 ], "pop" : 4673, "state" : "PA" } +{ "_id" : "16028", "city" : "EAST BRADY", "loc" : [ -79.63018700000001, 40.974373 ], "pop" : 2069, "state" : "PA" } +{ "_id" : "16030", "city" : "EAU CLAIRE", "loc" : [ -79.79809299999999, 41.13478 ], "pop" : 371, "state" : "PA" } +{ "_id" : "16033", "city" : "EVANS CITY", "loc" : [ -80.059195, 40.780795 ], "pop" : 6859, "state" : "PA" } +{ "_id" : "16034", "city" : "FENELTON", "loc" : [ -79.73715199999999, 40.855464 ], "pop" : 1753, "state" : "PA" } +{ "_id" : "16036", "city" : "FOXBURG", "loc" : [ -79.653443, 41.160239 ], "pop" : 988, "state" : "PA" } +{ "_id" : "16037", "city" : "HARMONY", "loc" : [ -80.13811699999999, 40.849646 ], "pop" : 2049, "state" : "PA" } +{ "_id" : "16038", "city" : "HARRISVILLE", "loc" : [ -79.97963900000001, 41.163087 ], "pop" : 3617, "state" : "PA" } +{ "_id" : "16040", "city" : "HILLIARDS", "loc" : [ -79.821456, 41.100894 ], "pop" : 1092, "state" : "PA" } +{ "_id" : "16041", "city" : "KARNS CITY", "loc" : [ -79.71601699999999, 41.002193 ], "pop" : 3032, "state" : "PA" } +{ "_id" : "16045", "city" : "LYNDORA", "loc" : [ -79.921401, 40.855071 ], "pop" : 2232, "state" : "PA" } +{ "_id" : "16046", "city" : "MARS", "loc" : [ -80.035769, 40.700514 ], "pop" : 10192, "state" : "PA" } +{ "_id" : "16049", "city" : "PARKER", "loc" : [ -79.68888800000001, 41.100891 ], "pop" : 3131, "state" : "PA" } +{ "_id" : "16050", "city" : "PETROLIA", "loc" : [ -79.771069, 41.044208 ], "pop" : 491, "state" : "PA" } +{ "_id" : "16051", "city" : "PORTERSVILLE", "loc" : [ -80.172965, 40.948651 ], "pop" : 3642, "state" : "PA" } +{ "_id" : "16052", "city" : "PROSPECT", "loc" : [ -80.067903, 40.904941 ], "pop" : 2224, "state" : "PA" } +{ "_id" : "16053", "city" : "RENFREW", "loc" : [ -79.97700399999999, 40.810003 ], "pop" : 3180, "state" : "PA" } +{ "_id" : "16055", "city" : "SARVER", "loc" : [ -79.74243, 40.714285 ], "pop" : 8370, "state" : "PA" } +{ "_id" : "16056", "city" : "SAXONBURG", "loc" : [ -79.835222, 40.736099 ], "pop" : 4693, "state" : "PA" } +{ "_id" : "16057", "city" : "SLIPPERY ROCK", "loc" : [ -80.046847, 41.045412 ], "pop" : 12443, "state" : "PA" } +{ "_id" : "16059", "city" : "VALENCIA", "loc" : [ -79.92352700000001, 40.701831 ], "pop" : 6437, "state" : "PA" } +{ "_id" : "16061", "city" : "WEST SUNBURY", "loc" : [ -79.875134, 41.002601 ], "pop" : 1999, "state" : "PA" } +{ "_id" : "16063", "city" : "ZELIENOPLE", "loc" : [ -80.128564, 40.73136 ], "pop" : 18300, "state" : "PA" } +{ "_id" : "16101", "city" : "NEW CASTLE", "loc" : [ -80.32844900000001, 40.99222 ], "pop" : 36694, "state" : "PA" } +{ "_id" : "16102", "city" : "NEW CASTLE", "loc" : [ -80.390704, 40.967745 ], "pop" : 7186, "state" : "PA" } +{ "_id" : "16105", "city" : "NESHANNOCK", "loc" : [ -80.342191, 41.033502 ], "pop" : 14292, "state" : "PA" } +{ "_id" : "16110", "city" : "ADAMSVILLE", "loc" : [ -80.376544, 41.506677 ], "pop" : 287, "state" : "PA" } +{ "_id" : "16111", "city" : "ATLANTIC", "loc" : [ -80.28625099999999, 41.533313 ], "pop" : 2390, "state" : "PA" } +{ "_id" : "16112", "city" : "BESSEMER", "loc" : [ -80.493689, 40.975493 ], "pop" : 1611, "state" : "PA" } +{ "_id" : "16114", "city" : "CLARKS MILLS", "loc" : [ -80.175223, 41.385141 ], "pop" : 1351, "state" : "PA" } +{ "_id" : "16115", "city" : "DARLINGTON", "loc" : [ -80.455611, 40.796839 ], "pop" : 3397, "state" : "PA" } +{ "_id" : "16116", "city" : "EDINBURG", "loc" : [ -80.463178, 41.027614 ], "pop" : 3240, "state" : "PA" } +{ "_id" : "16117", "city" : "ELLPORT", "loc" : [ -80.27460600000001, 40.859024 ], "pop" : 19193, "state" : "PA" } +{ "_id" : "16120", "city" : "ENON VALLEY", "loc" : [ -80.46118199999999, 40.8721 ], "pop" : 2421, "state" : "PA" } +{ "_id" : "16121", "city" : "FARRELL", "loc" : [ -80.49444200000001, 41.210995 ], "pop" : 7619, "state" : "PA" } +{ "_id" : "16123", "city" : "FOMBELL", "loc" : [ -80.207312, 40.812527 ], "pop" : 2611, "state" : "PA" } +{ "_id" : "16124", "city" : "FREDONIA", "loc" : [ -80.26987099999999, 41.324141 ], "pop" : 1772, "state" : "PA" } +{ "_id" : "16125", "city" : "SHENANGO", "loc" : [ -80.38034399999999, 41.399403 ], "pop" : 19982, "state" : "PA" } +{ "_id" : "16127", "city" : "GROVE CITY", "loc" : [ -80.084138, 41.160704 ], "pop" : 14568, "state" : "PA" } +{ "_id" : "16130", "city" : "HADLEY", "loc" : [ -80.153544, 41.43302 ], "pop" : 3623, "state" : "PA" } +{ "_id" : "16131", "city" : "HARTSTOWN", "loc" : [ -80.381321, 41.550875 ], "pop" : 406, "state" : "PA" } +{ "_id" : "16133", "city" : "JACKSON CENTER", "loc" : [ -80.10372599999999, 41.280134 ], "pop" : 1959, "state" : "PA" } +{ "_id" : "16134", "city" : "WESTFORD", "loc" : [ -80.456459, 41.506031 ], "pop" : 3328, "state" : "PA" } +{ "_id" : "16137", "city" : "MERCER", "loc" : [ -80.23401800000001, 41.23254 ], "pop" : 11036, "state" : "PA" } +{ "_id" : "16141", "city" : "NEW GALILEE", "loc" : [ -80.39390400000001, 40.856891 ], "pop" : 1852, "state" : "PA" } +{ "_id" : "16142", "city" : "NEW WILMINGTON", "loc" : [ -80.324541, 41.138155 ], "pop" : 9268, "state" : "PA" } +{ "_id" : "16143", "city" : "PULASKI", "loc" : [ -80.468515, 41.094215 ], "pop" : 3898, "state" : "PA" } +{ "_id" : "16145", "city" : "SANDY LAKE", "loc" : [ -80.04974, 41.338337 ], "pop" : 843, "state" : "PA" } +{ "_id" : "16146", "city" : "SHARON", "loc" : [ -80.499342, 41.231552 ], "pop" : 17457, "state" : "PA" } +{ "_id" : "16148", "city" : "HERMITAGE", "loc" : [ -80.45303, 41.232601 ], "pop" : 14573, "state" : "PA" } +{ "_id" : "16150", "city" : "SHARPSVILLE", "loc" : [ -80.465642, 41.267648 ], "pop" : 8962, "state" : "PA" } +{ "_id" : "16153", "city" : "STONEBORO", "loc" : [ -80.097613, 41.34385 ], "pop" : 2249, "state" : "PA" } +{ "_id" : "16154", "city" : "TRANSFER", "loc" : [ -80.419742, 41.324401 ], "pop" : 2662, "state" : "PA" } +{ "_id" : "16156", "city" : "VOLANT", "loc" : [ -80.244129, 41.093767 ], "pop" : 2114, "state" : "PA" } +{ "_id" : "16157", "city" : "WAMPUM", "loc" : [ -80.339184, 40.881879 ], "pop" : 5466, "state" : "PA" } +{ "_id" : "16159", "city" : "WEST MIDDLESEX", "loc" : [ -80.452759, 41.174054 ], "pop" : 5604, "state" : "PA" } +{ "_id" : "16201", "city" : "KITTANNING", "loc" : [ -79.51067500000001, 40.815516 ], "pop" : 19140, "state" : "PA" } +{ "_id" : "16210", "city" : "ADRIAN", "loc" : [ -79.50744400000001, 40.904902 ], "pop" : 726, "state" : "PA" } +{ "_id" : "16212", "city" : "CADOGAN", "loc" : [ -79.57982699999999, 40.75392 ], "pop" : 427, "state" : "PA" } +{ "_id" : "16213", "city" : "CALLENSBURG", "loc" : [ -79.55695, 41.132379 ], "pop" : 688, "state" : "PA" } +{ "_id" : "16214", "city" : "CLARION", "loc" : [ -79.377268, 41.212272 ], "pop" : 8740, "state" : "PA" } +{ "_id" : "16217", "city" : "COOKSBURG", "loc" : [ -79.19708, 41.338366 ], "pop" : 36, "state" : "PA" } +{ "_id" : "16218", "city" : "COWANSVILLE", "loc" : [ -79.594607, 40.922985 ], "pop" : 1089, "state" : "PA" } +{ "_id" : "16222", "city" : "DAYTON", "loc" : [ -79.268551, 40.874101 ], "pop" : 1974, "state" : "PA" } +{ "_id" : "16224", "city" : "FAIRMOUNT CITY", "loc" : [ -79.27840500000001, 41.042861 ], "pop" : 2104, "state" : "PA" } +{ "_id" : "16225", "city" : "FISHER", "loc" : [ -79.247033, 41.266737 ], "pop" : 407, "state" : "PA" } +{ "_id" : "16226", "city" : "FORD CITY", "loc" : [ -79.51222, 40.738407 ], "pop" : 6576, "state" : "PA" } +{ "_id" : "16229", "city" : "FREEPORT", "loc" : [ -79.66299100000001, 40.703277 ], "pop" : 4517, "state" : "PA" } +{ "_id" : "16232", "city" : "KNOX", "loc" : [ -79.51940399999999, 41.224518 ], "pop" : 7489, "state" : "PA" } +{ "_id" : "16233", "city" : "LEEPER", "loc" : [ -79.302179, 41.367074 ], "pop" : 487, "state" : "PA" } +{ "_id" : "16234", "city" : "LIMESTONE", "loc" : [ -79.29929199999999, 41.133396 ], "pop" : 1686, "state" : "PA" } +{ "_id" : "16235", "city" : "LUCINDA", "loc" : [ -79.375372, 41.312377 ], "pop" : 1281, "state" : "PA" } +{ "_id" : "16236", "city" : "MC GRANN", "loc" : [ -79.53086, 40.76929 ], "pop" : 3844, "state" : "PA" } +{ "_id" : "16238", "city" : "MANORVILLE", "loc" : [ -79.521333, 40.786256 ], "pop" : 418, "state" : "PA" } +{ "_id" : "16239", "city" : "MARIENVILLE", "loc" : [ -79.13058100000001, 41.462237 ], "pop" : 1374, "state" : "PA" } +{ "_id" : "16240", "city" : "MAYPORT", "loc" : [ -79.261701, 40.99059 ], "pop" : 1058, "state" : "PA" } +{ "_id" : "16242", "city" : "NEW BETHLEHEM", "loc" : [ -79.352654, 40.9999 ], "pop" : 4698, "state" : "PA" } +{ "_id" : "16248", "city" : "HUEY", "loc" : [ -79.510677, 41.039434 ], "pop" : 3629, "state" : "PA" } +{ "_id" : "16249", "city" : "RURAL VALLEY", "loc" : [ -79.299102, 40.788488 ], "pop" : 3499, "state" : "PA" } +{ "_id" : "16254", "city" : "SHIPPENVILLE", "loc" : [ -79.433199, 41.247491 ], "pop" : 2448, "state" : "PA" } +{ "_id" : "16255", "city" : "SLIGO", "loc" : [ -79.480485, 41.11394 ], "pop" : 1213, "state" : "PA" } +{ "_id" : "16256", "city" : "SMICKSBURG", "loc" : [ -79.161432, 40.837193 ], "pop" : 2236, "state" : "PA" } +{ "_id" : "16258", "city" : "STRATTANVILLE", "loc" : [ -79.308188, 41.195498 ], "pop" : 2086, "state" : "PA" } +{ "_id" : "16259", "city" : "TEMPLETON", "loc" : [ -79.449884, 40.941884 ], "pop" : 1654, "state" : "PA" } +{ "_id" : "16260", "city" : "VOWINCKEL", "loc" : [ -79.274553, 41.378642 ], "pop" : 1615, "state" : "PA" } +{ "_id" : "16262", "city" : "CRAIGSVILLE", "loc" : [ -79.638525, 40.834442 ], "pop" : 3065, "state" : "PA" } +{ "_id" : "16301", "city" : "OIL CITY", "loc" : [ -79.691648, 41.431936 ], "pop" : 19792, "state" : "PA" } +{ "_id" : "16311", "city" : "CARLTON", "loc" : [ -80.020302, 41.481541 ], "pop" : 282, "state" : "PA" } +{ "_id" : "16313", "city" : "CLARENDON", "loc" : [ -79.171949, 41.730224 ], "pop" : 422, "state" : "PA" } +{ "_id" : "16314", "city" : "COCHRANTON", "loc" : [ -80.05726900000001, 41.520487 ], "pop" : 3010, "state" : "PA" } +{ "_id" : "16316", "city" : "CONNEAUT LAKE", "loc" : [ -80.308567, 41.6189 ], "pop" : 3849, "state" : "PA" } +{ "_id" : "16317", "city" : "COOPERSTOWN", "loc" : [ -79.875676, 41.497998 ], "pop" : 506, "state" : "PA" } +{ "_id" : "16319", "city" : "CRANBERRY", "loc" : [ -79.719121, 41.337184 ], "pop" : 353, "state" : "PA" } +{ "_id" : "16321", "city" : "EAST HICKORY", "loc" : [ -79.38548299999999, 41.5691 ], "pop" : 282, "state" : "PA" } +{ "_id" : "16323", "city" : "FRANKLIN", "loc" : [ -79.83089, 41.404775 ], "pop" : 18357, "state" : "PA" } +{ "_id" : "16326", "city" : "FRYBURG", "loc" : [ -79.41340099999999, 41.371736 ], "pop" : 1880, "state" : "PA" } +{ "_id" : "16327", "city" : "GUYS MILLS", "loc" : [ -79.97143699999999, 41.633265 ], "pop" : 2825, "state" : "PA" } +{ "_id" : "16329", "city" : "IRVINE", "loc" : [ -79.286303, 41.843283 ], "pop" : 479, "state" : "PA" } +{ "_id" : "16331", "city" : "KOSSUTH", "loc" : [ -79.588249, 41.290215 ], "pop" : 43, "state" : "PA" } +{ "_id" : "16332", "city" : "LICKINGVILLE", "loc" : [ -79.371516, 41.3789 ], "pop" : 22, "state" : "PA" } +{ "_id" : "16333", "city" : "LUDLOW", "loc" : [ -78.924345, 41.728409 ], "pop" : 612, "state" : "PA" } +{ "_id" : "16334", "city" : "MARBLE", "loc" : [ -79.44592900000001, 41.326077 ], "pop" : 27, "state" : "PA" } +{ "_id" : "16335", "city" : "MEADVILLE", "loc" : [ -80.148787, 41.633847 ], "pop" : 31290, "state" : "PA" } +{ "_id" : "16340", "city" : "PITTSFIELD", "loc" : [ -79.419619, 41.836629 ], "pop" : 3172, "state" : "PA" } +{ "_id" : "16341", "city" : "PLEASANTVILLE", "loc" : [ -79.5685, 41.586696 ], "pop" : 2211, "state" : "PA" } +{ "_id" : "16342", "city" : "POLK", "loc" : [ -79.93461000000001, 41.358315 ], "pop" : 3159, "state" : "PA" } +{ "_id" : "16345", "city" : "RUSSELL", "loc" : [ -79.12707899999999, 41.946106 ], "pop" : 3833, "state" : "PA" } +{ "_id" : "16346", "city" : "SENECA", "loc" : [ -79.67590199999999, 41.374436 ], "pop" : 3723, "state" : "PA" } +{ "_id" : "16347", "city" : "SHEFFIELD", "loc" : [ -79.034814, 41.70053 ], "pop" : 2382, "state" : "PA" } +{ "_id" : "16350", "city" : "SUGAR GROVE", "loc" : [ -79.318609, 41.947542 ], "pop" : 3592, "state" : "PA" } +{ "_id" : "16351", "city" : "TIDIOUTE", "loc" : [ -79.375224, 41.703008 ], "pop" : 2458, "state" : "PA" } +{ "_id" : "16353", "city" : "TIONESTA", "loc" : [ -79.366332, 41.511616 ], "pop" : 2293, "state" : "PA" } +{ "_id" : "16354", "city" : "TITUSVILLE", "loc" : [ -79.68549400000001, 41.638163 ], "pop" : 14509, "state" : "PA" } +{ "_id" : "16360", "city" : "TOWNVILLE", "loc" : [ -79.876679, 41.685581 ], "pop" : 1047, "state" : "PA" } +{ "_id" : "16362", "city" : "UTICA", "loc" : [ -79.940292, 41.479848 ], "pop" : 1863, "state" : "PA" } +{ "_id" : "16364", "city" : "VENUS", "loc" : [ -79.50476500000001, 41.376113 ], "pop" : 534, "state" : "PA" } +{ "_id" : "16365", "city" : "NORTH WARREN", "loc" : [ -79.14286, 41.845265 ], "pop" : 22507, "state" : "PA" } +{ "_id" : "16371", "city" : "YOUNGSVILLE", "loc" : [ -79.318708, 41.853654 ], "pop" : 1853, "state" : "PA" } +{ "_id" : "16372", "city" : "CLINTONVILLE", "loc" : [ -79.87338, 41.20022 ], "pop" : 525, "state" : "PA" } +{ "_id" : "16373", "city" : "EMLENTON", "loc" : [ -79.746996, 41.202769 ], "pop" : 3119, "state" : "PA" } +{ "_id" : "16374", "city" : "KENNERDELL", "loc" : [ -79.739313, 41.284762 ], "pop" : 1318, "state" : "PA" } +{ "_id" : "16401", "city" : "LUNDYS LANE", "loc" : [ -80.37527300000001, 41.885882 ], "pop" : 4286, "state" : "PA" } +{ "_id" : "16402", "city" : "BEAR LAKE", "loc" : [ -79.461365, 41.97006 ], "pop" : 1042, "state" : "PA" } +{ "_id" : "16403", "city" : "CAMBRIDGE SPRING", "loc" : [ -80.028003, 41.794611 ], "pop" : 5770, "state" : "PA" } +{ "_id" : "16404", "city" : "CENTERVILLE", "loc" : [ -79.79004, 41.724316 ], "pop" : 2119, "state" : "PA" } +{ "_id" : "16405", "city" : "COLUMBUS", "loc" : [ -79.57307299999999, 41.938152 ], "pop" : 1751, "state" : "PA" } +{ "_id" : "16406", "city" : "CONNEAUTVILLE", "loc" : [ -80.344516, 41.745455 ], "pop" : 2542, "state" : "PA" } +{ "_id" : "16407", "city" : "CORRY", "loc" : [ -79.65674199999999, 41.922593 ], "pop" : 10654, "state" : "PA" } +{ "_id" : "16410", "city" : "CRANESVILLE", "loc" : [ -80.308528, 41.916222 ], "pop" : 1783, "state" : "PA" } +{ "_id" : "16411", "city" : "EAST SPRINGFIELD", "loc" : [ -80.430336, 41.979363 ], "pop" : 1318, "state" : "PA" } +{ "_id" : "16412", "city" : "EDINBORO", "loc" : [ -80.135604, 41.875629 ], "pop" : 12914, "state" : "PA" } +{ "_id" : "16415", "city" : "FAIRVIEW", "loc" : [ -80.239508, 42.040741 ], "pop" : 7876, "state" : "PA" } +{ "_id" : "16417", "city" : "GIRARD", "loc" : [ -80.317756, 41.989573 ], "pop" : 8190, "state" : "PA" } +{ "_id" : "16420", "city" : "GRAND VALLEY", "loc" : [ -79.546944, 41.77315 ], "pop" : 59, "state" : "PA" } +{ "_id" : "16421", "city" : "HARBORCREEK", "loc" : [ -79.941648, 42.176719 ], "pop" : 3533, "state" : "PA" } +{ "_id" : "16423", "city" : "LAKE CITY", "loc" : [ -80.33883400000001, 42.020361 ], "pop" : 3674, "state" : "PA" } +{ "_id" : "16424", "city" : "ESPYVILLE", "loc" : [ -80.426911, 41.663535 ], "pop" : 5520, "state" : "PA" } +{ "_id" : "16426", "city" : "MC KEAN", "loc" : [ -80.147336, 41.999035 ], "pop" : 4099, "state" : "PA" } +{ "_id" : "16428", "city" : "NORTH EAST", "loc" : [ -79.833179, 42.200793 ], "pop" : 12531, "state" : "PA" } +{ "_id" : "16433", "city" : "SAEGERTOWN", "loc" : [ -80.147857, 41.726753 ], "pop" : 5094, "state" : "PA" } +{ "_id" : "16434", "city" : "SPARTANSBURG", "loc" : [ -79.684916, 41.793648 ], "pop" : 2785, "state" : "PA" } +{ "_id" : "16435", "city" : "SPRINGBORO", "loc" : [ -80.375276, 41.811348 ], "pop" : 2131, "state" : "PA" } +{ "_id" : "16436", "city" : "SPRING CREEK", "loc" : [ -79.56554, 41.846832 ], "pop" : 191, "state" : "PA" } +{ "_id" : "16438", "city" : "UNION CITY", "loc" : [ -79.84546400000001, 41.893851 ], "pop" : 8890, "state" : "PA" } +{ "_id" : "16440", "city" : "VENANGO", "loc" : [ -80.125353, 41.791968 ], "pop" : 918, "state" : "PA" } +{ "_id" : "16441", "city" : "WATERFORD", "loc" : [ -79.99963, 41.960266 ], "pop" : 9247, "state" : "PA" } +{ "_id" : "16442", "city" : "WATTSBURG", "loc" : [ -79.836282, 42.039114 ], "pop" : 2463, "state" : "PA" } +{ "_id" : "16443", "city" : "WEST SPRINGFIELD", "loc" : [ -80.46501000000001, 41.94646 ], "pop" : 1375, "state" : "PA" } +{ "_id" : "16501", "city" : "ERIE", "loc" : [ -80.08601, 42.125962 ], "pop" : 1956, "state" : "PA" } +{ "_id" : "16502", "city" : "ERIE", "loc" : [ -80.097607, 42.113332 ], "pop" : 18640, "state" : "PA" } +{ "_id" : "16503", "city" : "ERIE", "loc" : [ -80.063976, 42.126506 ], "pop" : 19019, "state" : "PA" } +{ "_id" : "16504", "city" : "ERIE", "loc" : [ -80.05208, 42.1108 ], "pop" : 17680, "state" : "PA" } +{ "_id" : "16505", "city" : "PRESQUE ISLE", "loc" : [ -80.161902, 42.097526 ], "pop" : 17753, "state" : "PA" } +{ "_id" : "16506", "city" : "ERIE", "loc" : [ -80.14843999999999, 42.073801 ], "pop" : 19269, "state" : "PA" } +{ "_id" : "16507", "city" : "ERIE", "loc" : [ -80.08642399999999, 42.131579 ], "pop" : 10936, "state" : "PA" } +{ "_id" : "16508", "city" : "ERIE", "loc" : [ -80.09354399999999, 42.097577 ], "pop" : 17645, "state" : "PA" } +{ "_id" : "16509", "city" : "ERIE", "loc" : [ -80.066827, 42.076326 ], "pop" : 24232, "state" : "PA" } +{ "_id" : "16510", "city" : "WESLEYVILLE", "loc" : [ -80.00375200000001, 42.123673 ], "pop" : 26455, "state" : "PA" } +{ "_id" : "16511", "city" : "ERIE", "loc" : [ -80.01766499999999, 42.15529 ], "pop" : 11355, "state" : "PA" } +{ "_id" : "16565", "city" : "ERIE", "loc" : [ -80.10011, 42.0687 ], "pop" : 97, "state" : "PA" } +{ "_id" : "16601", "city" : "ALTOONA", "loc" : [ -78.408901, 40.520945 ], "pop" : 31560, "state" : "PA" } +{ "_id" : "16602", "city" : "ALTOONA", "loc" : [ -78.390533, 40.50524 ], "pop" : 32649, "state" : "PA" } +{ "_id" : "16611", "city" : "BARREE", "loc" : [ -78.107066, 40.549901 ], "pop" : 2765, "state" : "PA" } +{ "_id" : "16613", "city" : "ASHVILLE", "loc" : [ -78.534639, 40.551266 ], "pop" : 1275, "state" : "PA" } +{ "_id" : "16616", "city" : "BECCARIA", "loc" : [ -78.508036, 40.757938 ], "pop" : 1571, "state" : "PA" } +{ "_id" : "16617", "city" : "BELLWOOD", "loc" : [ -78.337234, 40.60394 ], "pop" : 8152, "state" : "PA" } +{ "_id" : "16620", "city" : "BRISBIN", "loc" : [ -78.35263399999999, 40.838711 ], "pop" : 369, "state" : "PA" } +{ "_id" : "16621", "city" : "BROAD TOP", "loc" : [ -78.14060000000001, 40.201891 ], "pop" : 331, "state" : "PA" } +{ "_id" : "16622", "city" : "CALVIN", "loc" : [ -78.023697, 40.298667 ], "pop" : 1190, "state" : "PA" } +{ "_id" : "16623", "city" : "CASSVILLE", "loc" : [ -78.02717800000001, 40.293977 ], "pop" : 183, "state" : "PA" } +{ "_id" : "16625", "city" : "CLAYSBURG", "loc" : [ -78.479658, 40.329243 ], "pop" : 3890, "state" : "PA" } +{ "_id" : "16627", "city" : "COALPORT", "loc" : [ -78.53523800000001, 40.750323 ], "pop" : 940, "state" : "PA" } +{ "_id" : "16630", "city" : "CRESSON", "loc" : [ -78.586068, 40.460779 ], "pop" : 5829, "state" : "PA" } +{ "_id" : "16634", "city" : "DUDLEY", "loc" : [ -78.183823, 40.219453 ], "pop" : 616, "state" : "PA" } +{ "_id" : "16635", "city" : "DUNCANSVILLE", "loc" : [ -78.43832999999999, 40.426228 ], "pop" : 13889, "state" : "PA" } +{ "_id" : "16636", "city" : "DYSART", "loc" : [ -78.527072, 40.60885 ], "pop" : 769, "state" : "PA" } +{ "_id" : "16637", "city" : "EAST FREEDOM", "loc" : [ -78.447519, 40.328197 ], "pop" : 2871, "state" : "PA" } +{ "_id" : "16639", "city" : "FALLENTIMBER", "loc" : [ -78.465912, 40.671924 ], "pop" : 684, "state" : "PA" } +{ "_id" : "16640", "city" : "FLINTON", "loc" : [ -78.48148999999999, 40.701615 ], "pop" : 1589, "state" : "PA" } +{ "_id" : "16641", "city" : "GALLITZIN", "loc" : [ -78.555435, 40.48772 ], "pop" : 2852, "state" : "PA" } +{ "_id" : "16645", "city" : "GLEN HOPE", "loc" : [ -78.499869, 40.798405 ], "pop" : 187, "state" : "PA" } +{ "_id" : "16646", "city" : "HASTINGS", "loc" : [ -78.702924, 40.665874 ], "pop" : 2616, "state" : "PA" } +{ "_id" : "16647", "city" : "HESSTON", "loc" : [ -78.12810899999999, 40.412139 ], "pop" : 956, "state" : "PA" } +{ "_id" : "16648", "city" : "HOLLIDAYSBURG", "loc" : [ -78.368627, 40.438727 ], "pop" : 12867, "state" : "PA" } +{ "_id" : "16650", "city" : "HOPEWELL", "loc" : [ -78.31289700000001, 40.119225 ], "pop" : 2440, "state" : "PA" } +{ "_id" : "16651", "city" : "HOUTZDALE", "loc" : [ -78.3618, 40.830538 ], "pop" : 2825, "state" : "PA" } +{ "_id" : "16652", "city" : "HUNTINGDON", "loc" : [ -78.005028, 40.502274 ], "pop" : 16288, "state" : "PA" } +{ "_id" : "16655", "city" : "IMLER", "loc" : [ -78.51671899999999, 40.23186 ], "pop" : 3037, "state" : "PA" } +{ "_id" : "16656", "city" : "IRVONA", "loc" : [ -78.560243, 40.801744 ], "pop" : 1183, "state" : "PA" } +{ "_id" : "16657", "city" : "JAMES CREEK", "loc" : [ -78.188678, 40.356672 ], "pop" : 485, "state" : "PA" } +{ "_id" : "16659", "city" : "LOYSBURG", "loc" : [ -78.38643500000001, 40.174577 ], "pop" : 656, "state" : "PA" } +{ "_id" : "16661", "city" : "MADERA", "loc" : [ -78.427475, 40.827086 ], "pop" : 1389, "state" : "PA" } +{ "_id" : "16662", "city" : "MARTINSBURG", "loc" : [ -78.324367, 40.295082 ], "pop" : 5016, "state" : "PA" } +{ "_id" : "16664", "city" : "NEW ENTERPRISE", "loc" : [ -78.425916, 40.200013 ], "pop" : 1898, "state" : "PA" } +{ "_id" : "16666", "city" : "OSCEOLA MILLS", "loc" : [ -78.275705, 40.872208 ], "pop" : 4346, "state" : "PA" } +{ "_id" : "16667", "city" : "ST CLAIRSVILLE", "loc" : [ -78.509928, 40.158583 ], "pop" : 174, "state" : "PA" } +{ "_id" : "16668", "city" : "PATTON", "loc" : [ -78.63502800000001, 40.623045 ], "pop" : 4737, "state" : "PA" } +{ "_id" : "16669", "city" : "PETERSBURG", "loc" : [ -77.998402, 40.602968 ], "pop" : 2175, "state" : "PA" } +{ "_id" : "16671", "city" : "RAMEY", "loc" : [ -78.399821, 40.801511 ], "pop" : 538, "state" : "PA" } +{ "_id" : "16673", "city" : "ROARING SPRING", "loc" : [ -78.39284000000001, 40.327747 ], "pop" : 4942, "state" : "PA" } +{ "_id" : "16674", "city" : "ROBERTSDALE", "loc" : [ -78.11169599999999, 40.178674 ], "pop" : 727, "state" : "PA" } +{ "_id" : "16678", "city" : "SAXTON", "loc" : [ -78.247137, 40.223301 ], "pop" : 3031, "state" : "PA" } +{ "_id" : "16679", "city" : "SIX MILE RUN", "loc" : [ -78.210814, 40.157583 ], "pop" : 1670, "state" : "PA" } +{ "_id" : "16680", "city" : "SMITHMILL", "loc" : [ -78.39944199999999, 40.767808 ], "pop" : 1192, "state" : "PA" } +{ "_id" : "16683", "city" : "SPRUCE CREEK", "loc" : [ -78.136083, 40.621767 ], "pop" : 281, "state" : "PA" } +{ "_id" : "16685", "city" : "TODD", "loc" : [ -78.100354, 40.25775 ], "pop" : 889, "state" : "PA" } +{ "_id" : "16686", "city" : "TYRONE", "loc" : [ -78.241905, 40.661905 ], "pop" : 11290, "state" : "PA" } +{ "_id" : "16689", "city" : "WATERFALL", "loc" : [ -78.047708, 40.073871 ], "pop" : 1168, "state" : "PA" } +{ "_id" : "16691", "city" : "WELLS TANNERY", "loc" : [ -78.140269, 40.100996 ], "pop" : 563, "state" : "PA" } +{ "_id" : "16692", "city" : "WESTOVER", "loc" : [ -78.73548099999999, 40.76152 ], "pop" : 1550, "state" : "PA" } +{ "_id" : "16693", "city" : "GANISTER", "loc" : [ -78.22555, 40.437356 ], "pop" : 4799, "state" : "PA" } +{ "_id" : "16695", "city" : "WOODBURY", "loc" : [ -78.366573, 40.21847 ], "pop" : 741, "state" : "PA" } +{ "_id" : "16701", "city" : "BRADFORD", "loc" : [ -78.65396699999999, 41.954678 ], "pop" : 18738, "state" : "PA" } +{ "_id" : "16720", "city" : "AUSTIN", "loc" : [ -78.090812, 41.629649 ], "pop" : 1123, "state" : "PA" } +{ "_id" : "16724", "city" : "CROSBY", "loc" : [ -78.37463700000001, 41.713356 ], "pop" : 593, "state" : "PA" } +{ "_id" : "16726", "city" : "ORMSBY", "loc" : [ -78.566743, 41.826327 ], "pop" : 369, "state" : "PA" } +{ "_id" : "16727", "city" : "DERRICK CITY", "loc" : [ -78.56256399999999, 41.972577 ], "pop" : 623, "state" : "PA" } +{ "_id" : "16729", "city" : "DUKE CENTER", "loc" : [ -78.49226899999999, 41.954017 ], "pop" : 1122, "state" : "PA" } +{ "_id" : "16731", "city" : "ELDRED", "loc" : [ -78.38843900000001, 41.948925 ], "pop" : 2616, "state" : "PA" } +{ "_id" : "16732", "city" : "GIFFORD", "loc" : [ -78.584604, 41.860715 ], "pop" : 586, "state" : "PA" } +{ "_id" : "16734", "city" : "JAMES CITY", "loc" : [ -78.85052, 41.593116 ], "pop" : 551, "state" : "PA" } +{ "_id" : "16735", "city" : "KANE", "loc" : [ -78.79777799999999, 41.661861 ], "pop" : 6600, "state" : "PA" } +{ "_id" : "16738", "city" : "LEWIS RUN", "loc" : [ -78.680498, 41.821123 ], "pop" : 2617, "state" : "PA" } +{ "_id" : "16740", "city" : "MOUNT JEWETT", "loc" : [ -78.64461300000001, 41.724737 ], "pop" : 1039, "state" : "PA" } +{ "_id" : "16743", "city" : "PORT ALLEGANY", "loc" : [ -78.279909, 41.816919 ], "pop" : 4468, "state" : "PA" } +{ "_id" : "16744", "city" : "REW", "loc" : [ -78.53540599999999, 41.912222 ], "pop" : 614, "state" : "PA" } +{ "_id" : "16745", "city" : "RIXFORD", "loc" : [ -78.458647, 41.934606 ], "pop" : 514, "state" : "PA" } +{ "_id" : "16746", "city" : "ROULETTE", "loc" : [ -78.15384299999999, 41.773795 ], "pop" : 1354, "state" : "PA" } +{ "_id" : "16748", "city" : "SHINGLEHOUSE", "loc" : [ -78.19062, 41.957176 ], "pop" : 3390, "state" : "PA" } +{ "_id" : "16749", "city" : "SMETHPORT", "loc" : [ -78.470229, 41.802063 ], "pop" : 4375, "state" : "PA" } +{ "_id" : "16750", "city" : "TURTLEPOINT", "loc" : [ -78.330793, 41.884665 ], "pop" : 720, "state" : "PA" } +{ "_id" : "16801", "city" : "STATE COLLEGE", "loc" : [ -77.852279, 40.792522 ], "pop" : 42278, "state" : "PA" } +{ "_id" : "16803", "city" : "STATE COLLEGE", "loc" : [ -77.892578, 40.808162 ], "pop" : 20669, "state" : "PA" } +{ "_id" : "16820", "city" : "AARONSBURG", "loc" : [ -77.38797700000001, 40.876944 ], "pop" : 100, "state" : "PA" } +{ "_id" : "16821", "city" : "ALLPORT", "loc" : [ -78.21038, 40.975039 ], "pop" : 275, "state" : "PA" } +{ "_id" : "16822", "city" : "BEECH CREEK", "loc" : [ -77.58511799999999, 41.084507 ], "pop" : 1723, "state" : "PA" } +{ "_id" : "16823", "city" : "PLEASANT GAP", "loc" : [ -77.7642, 40.909377 ], "pop" : 23418, "state" : "PA" } +{ "_id" : "16827", "city" : "BOALSBURG", "loc" : [ -77.782236, 40.779344 ], "pop" : 3787, "state" : "PA" } +{ "_id" : "16828", "city" : "CENTRE HALL", "loc" : [ -77.67422500000001, 40.825429 ], "pop" : 4223, "state" : "PA" } +{ "_id" : "16829", "city" : "CLARENCE", "loc" : [ -77.931213, 41.058482 ], "pop" : 123, "state" : "PA" } +{ "_id" : "16830", "city" : "CLEARFIELD", "loc" : [ -78.443488, 41.02103 ], "pop" : 14648, "state" : "PA" } +{ "_id" : "16832", "city" : "COBURN", "loc" : [ -77.49217299999999, 40.867818 ], "pop" : 836, "state" : "PA" } +{ "_id" : "16833", "city" : "CURWENSVILLE", "loc" : [ -78.527247, 40.965972 ], "pop" : 4085, "state" : "PA" } +{ "_id" : "16836", "city" : "FRENCHVILLE", "loc" : [ -78.234465, 41.103794 ], "pop" : 1278, "state" : "PA" } +{ "_id" : "16837", "city" : "GLEN RICHEY", "loc" : [ -78.47521500000001, 40.938209 ], "pop" : 331, "state" : "PA" } +{ "_id" : "16838", "city" : "GRAMPIAN", "loc" : [ -78.59491300000001, 40.981768 ], "pop" : 3187, "state" : "PA" } +{ "_id" : "16839", "city" : "GRASSFLAT", "loc" : [ -78.128354, 40.995881 ], "pop" : 2208, "state" : "PA" } +{ "_id" : "16840", "city" : "HAWK RUN", "loc" : [ -78.213787, 40.941215 ], "pop" : 2224, "state" : "PA" } +{ "_id" : "16841", "city" : "HOWARD", "loc" : [ -77.67017800000001, 41.020315 ], "pop" : 3723, "state" : "PA" } +{ "_id" : "16844", "city" : "JULIAN", "loc" : [ -77.933243, 40.891709 ], "pop" : 2461, "state" : "PA" } +{ "_id" : "16845", "city" : "KARTHAUS", "loc" : [ -78.087509, 41.113635 ], "pop" : 932, "state" : "PA" } +{ "_id" : "16852", "city" : "MADISONBURG", "loc" : [ -77.49495899999999, 40.933407 ], "pop" : 678, "state" : "PA" } +{ "_id" : "16854", "city" : "MILLHEIM", "loc" : [ -77.450531, 40.896314 ], "pop" : 1978, "state" : "PA" } +{ "_id" : "16858", "city" : "MORRISDALE", "loc" : [ -78.23571699999999, 41.000128 ], "pop" : 1235, "state" : "PA" } +{ "_id" : "16859", "city" : "MOSHANNON", "loc" : [ -78.009469, 41.03419 ], "pop" : 516, "state" : "PA" } +{ "_id" : "16860", "city" : "MUNSON", "loc" : [ -78.18621, 40.966704 ], "pop" : 110, "state" : "PA" } +{ "_id" : "16861", "city" : "NEW MILLPORT", "loc" : [ -78.49454299999999, 40.885302 ], "pop" : 657, "state" : "PA" } +{ "_id" : "16863", "city" : "OLANTA", "loc" : [ -78.500079, 40.905621 ], "pop" : 47, "state" : "PA" } +{ "_id" : "16864", "city" : "ORVISTON", "loc" : [ -77.620306, 41.075386 ], "pop" : 1023, "state" : "PA" } +{ "_id" : "16865", "city" : "PENNSYLVANIA FUR", "loc" : [ -77.95406800000001, 40.728194 ], "pop" : 2558, "state" : "PA" } +{ "_id" : "16866", "city" : "PHILIPSBURG", "loc" : [ -78.219008, 40.886252 ], "pop" : 7810, "state" : "PA" } +{ "_id" : "16870", "city" : "PORT MATILDA", "loc" : [ -78.078795, 40.801819 ], "pop" : 1890, "state" : "PA" } +{ "_id" : "16871", "city" : "POTTERSDALE", "loc" : [ -78.03405600000001, 41.186798 ], "pop" : 34, "state" : "PA" } +{ "_id" : "16872", "city" : "REBERSBURG", "loc" : [ -77.405322, 40.954906 ], "pop" : 816, "state" : "PA" } +{ "_id" : "16874", "city" : "SNOW SHOE", "loc" : [ -77.95228, 41.037581 ], "pop" : 1917, "state" : "PA" } +{ "_id" : "16875", "city" : "SPRING MILLS", "loc" : [ -77.57403100000001, 40.857753 ], "pop" : 1805, "state" : "PA" } +{ "_id" : "16877", "city" : "WARRIORS MARK", "loc" : [ -78.077478, 40.741414 ], "pop" : 2760, "state" : "PA" } +{ "_id" : "16878", "city" : "WEST DECATUR", "loc" : [ -78.31293599999999, 40.949305 ], "pop" : 2226, "state" : "PA" } +{ "_id" : "16879", "city" : "WINBURNE", "loc" : [ -78.156235, 40.967779 ], "pop" : 387, "state" : "PA" } +{ "_id" : "16881", "city" : "WOODLAND", "loc" : [ -78.321445, 41.009833 ], "pop" : 2571, "state" : "PA" } +{ "_id" : "16882", "city" : "WOODWARD", "loc" : [ -77.348269, 40.911574 ], "pop" : 183, "state" : "PA" } +{ "_id" : "16901", "city" : "WELLSBORO", "loc" : [ -77.30802, 41.737343 ], "pop" : 9906, "state" : "PA" } +{ "_id" : "16912", "city" : "BLOSSBURG", "loc" : [ -77.079711, 41.669771 ], "pop" : 2123, "state" : "PA" } +{ "_id" : "16914", "city" : "COLUMBIA CROSS R", "loc" : [ -76.79324200000001, 41.846282 ], "pop" : 2398, "state" : "PA" } +{ "_id" : "16915", "city" : "OSWAYO", "loc" : [ -78.003861, 41.781529 ], "pop" : 5171, "state" : "PA" } +{ "_id" : "16917", "city" : "COVINGTON", "loc" : [ -77.108795, 41.739297 ], "pop" : 1417, "state" : "PA" } +{ "_id" : "16920", "city" : "ELKLAND", "loc" : [ -77.31339199999999, 41.988165 ], "pop" : 1910, "state" : "PA" } +{ "_id" : "16921", "city" : "GAINES", "loc" : [ -77.568001, 41.747134 ], "pop" : 544, "state" : "PA" } +{ "_id" : "16922", "city" : "GALETON", "loc" : [ -77.65475600000001, 41.723006 ], "pop" : 2050, "state" : "PA" } +{ "_id" : "16923", "city" : "NORTH BINGHAM", "loc" : [ -77.87358500000001, 41.935312 ], "pop" : 1585, "state" : "PA" } +{ "_id" : "16925", "city" : "GILLETT", "loc" : [ -76.77132899999999, 41.956826 ], "pop" : 4273, "state" : "PA" } +{ "_id" : "16926", "city" : "GRANVILLE SUMMIT", "loc" : [ -76.721829, 41.697299 ], "pop" : 1447, "state" : "PA" } +{ "_id" : "16927", "city" : "HARRISON VALLEY", "loc" : [ -77.687665, 41.949824 ], "pop" : 1476, "state" : "PA" } +{ "_id" : "16928", "city" : "KNOXVILLE", "loc" : [ -77.435678, 41.959557 ], "pop" : 893, "state" : "PA" } +{ "_id" : "16929", "city" : "LAWRENCEVILLE", "loc" : [ -77.11355, 41.978266 ], "pop" : 1915, "state" : "PA" } +{ "_id" : "16930", "city" : "LIBERTY", "loc" : [ -77.119505, 41.565571 ], "pop" : 893, "state" : "PA" } +{ "_id" : "16932", "city" : "MAINESBURG", "loc" : [ -76.96815599999999, 41.790029 ], "pop" : 1140, "state" : "PA" } +{ "_id" : "16933", "city" : "MANSFIELD", "loc" : [ -77.07163, 41.812288 ], "pop" : 7111, "state" : "PA" } +{ "_id" : "16935", "city" : "MIDDLEBURY CENTE", "loc" : [ -77.314764, 41.891706 ], "pop" : 2549, "state" : "PA" } +{ "_id" : "16936", "city" : "MILLERTON", "loc" : [ -76.974766, 41.962467 ], "pop" : 2072, "state" : "PA" } +{ "_id" : "16937", "city" : "MILLS", "loc" : [ -77.762051, 41.902482 ], "pop" : 653, "state" : "PA" } +{ "_id" : "16938", "city" : "MORRIS", "loc" : [ -77.29197499999999, 41.54752 ], "pop" : 959, "state" : "PA" } +{ "_id" : "16939", "city" : "MORRIS RUN", "loc" : [ -77.02776900000001, 41.672943 ], "pop" : 496, "state" : "PA" } +{ "_id" : "16940", "city" : "NELSON", "loc" : [ -77.24190900000001, 41.978719 ], "pop" : 599, "state" : "PA" } +{ "_id" : "16941", "city" : "GENESEE", "loc" : [ -77.773995, 41.981963 ], "pop" : 47, "state" : "PA" } +{ "_id" : "16942", "city" : "OSCEOLA", "loc" : [ -77.353983, 41.984765 ], "pop" : 609, "state" : "PA" } +{ "_id" : "16943", "city" : "SABINSVILLE", "loc" : [ -77.537825, 41.856414 ], "pop" : 576, "state" : "PA" } +{ "_id" : "16946", "city" : "TIOGA", "loc" : [ -77.13929400000001, 41.912454 ], "pop" : 1796, "state" : "PA" } +{ "_id" : "16947", "city" : "TROY", "loc" : [ -76.771143, 41.77815 ], "pop" : 3476, "state" : "PA" } +{ "_id" : "16948", "city" : "ULYSSES", "loc" : [ -77.712557, 41.845903 ], "pop" : 727, "state" : "PA" } +{ "_id" : "16950", "city" : "LITTLE MARSH", "loc" : [ -77.530975, 41.919063 ], "pop" : 2844, "state" : "PA" } +{ "_id" : "17002", "city" : "ALLENSVILLE", "loc" : [ -77.829396, 40.524921 ], "pop" : 1135, "state" : "PA" } +{ "_id" : "17003", "city" : "ANNVILLE", "loc" : [ -76.544676, 40.345608 ], "pop" : 12173, "state" : "PA" } +{ "_id" : "17004", "city" : "BELLEVILLE", "loc" : [ -77.735823, 40.601571 ], "pop" : 4203, "state" : "PA" } +{ "_id" : "17005", "city" : "BERRYSBURG", "loc" : [ -76.811207, 40.60199 ], "pop" : 376, "state" : "PA" } +{ "_id" : "17006", "city" : "BLAIN", "loc" : [ -77.511736, 40.329314 ], "pop" : 755, "state" : "PA" } +{ "_id" : "17007", "city" : "BOILING SPRINGS", "loc" : [ -77.119489, 40.144873 ], "pop" : 4331, "state" : "PA" } +{ "_id" : "17009", "city" : "BURNHAM", "loc" : [ -77.562459, 40.636119 ], "pop" : 2005, "state" : "PA" } +{ "_id" : "17011", "city" : "SHIREMANSTOWN", "loc" : [ -76.92911100000001, 40.238071 ], "pop" : 33023, "state" : "PA" } +{ "_id" : "17013", "city" : "CARLISLE BARRACK", "loc" : [ -77.19952600000001, 40.203877 ], "pop" : 50939, "state" : "PA" } +{ "_id" : "17014", "city" : "COCOLAMUS", "loc" : [ -77.10674899999999, 40.656706 ], "pop" : 887, "state" : "PA" } +{ "_id" : "17017", "city" : "DALMATIA", "loc" : [ -76.879713, 40.648315 ], "pop" : 1694, "state" : "PA" } +{ "_id" : "17018", "city" : "DAUPHIN", "loc" : [ -76.928304, 40.384581 ], "pop" : 4523, "state" : "PA" } +{ "_id" : "17019", "city" : "DILLSBURG", "loc" : [ -77.03386999999999, 40.096373 ], "pop" : 11814, "state" : "PA" } +{ "_id" : "17020", "city" : "DUNCANNON", "loc" : [ -77.047254, 40.408678 ], "pop" : 10021, "state" : "PA" } +{ "_id" : "17021", "city" : "EAST WATERFORD", "loc" : [ -77.652789, 40.354191 ], "pop" : 929, "state" : "PA" } +{ "_id" : "17022", "city" : "ELIZABETHTOWN", "loc" : [ -76.60254500000001, 40.155331 ], "pop" : 21808, "state" : "PA" } +{ "_id" : "17023", "city" : "ELIZABETHVILLE", "loc" : [ -76.83548399999999, 40.55497 ], "pop" : 4564, "state" : "PA" } +{ "_id" : "17024", "city" : "ELLIOTTSBURG", "loc" : [ -77.270348, 40.362428 ], "pop" : 1125, "state" : "PA" } +{ "_id" : "17025", "city" : "ENOLA", "loc" : [ -76.943208, 40.292178 ], "pop" : 13103, "state" : "PA" } +{ "_id" : "17026", "city" : "FREDERICKSBURG", "loc" : [ -76.42674, 40.452392 ], "pop" : 2382, "state" : "PA" } +{ "_id" : "17028", "city" : "GRANTVILLE", "loc" : [ -76.671331, 40.360629 ], "pop" : 4569, "state" : "PA" } +{ "_id" : "17029", "city" : "GRANVILLE", "loc" : [ -77.61335800000001, 40.547868 ], "pop" : 1293, "state" : "PA" } +{ "_id" : "17030", "city" : "GRATZ", "loc" : [ -76.718851, 40.610424 ], "pop" : 696, "state" : "PA" } +{ "_id" : "17031", "city" : "GREEN PARK", "loc" : [ -77.32009600000001, 40.375143 ], "pop" : 347, "state" : "PA" } +{ "_id" : "17032", "city" : "HALIFAX", "loc" : [ -76.89404, 40.47603 ], "pop" : 7648, "state" : "PA" } +{ "_id" : "17033", "city" : "HERSHEY", "loc" : [ -76.654518, 40.263767 ], "pop" : 20514, "state" : "PA" } +{ "_id" : "17034", "city" : "HIGHSPIRE", "loc" : [ -76.785303, 40.208348 ], "pop" : 2670, "state" : "PA" } +{ "_id" : "17035", "city" : "HONEY GROVE", "loc" : [ -77.57607, 40.430903 ], "pop" : 884, "state" : "PA" } +{ "_id" : "17036", "city" : "HUMMELSTOWN", "loc" : [ -76.70937499999999, 40.278199 ], "pop" : 8178, "state" : "PA" } +{ "_id" : "17037", "city" : "ICKESBURG", "loc" : [ -77.34291, 40.434154 ], "pop" : 1828, "state" : "PA" } +{ "_id" : "17038", "city" : "JONESTOWN", "loc" : [ -76.50384200000001, 40.43607 ], "pop" : 5098, "state" : "PA" } +{ "_id" : "17040", "city" : "LANDISBURG", "loc" : [ -77.319146, 40.332644 ], "pop" : 1140, "state" : "PA" } +{ "_id" : "17042", "city" : "CLEONA", "loc" : [ -76.425895, 40.335912 ], "pop" : 61993, "state" : "PA" } +{ "_id" : "17043", "city" : "WORMLEYSBURG", "loc" : [ -76.89757, 40.247158 ], "pop" : 5340, "state" : "PA" } +{ "_id" : "17044", "city" : "LEWISTOWN", "loc" : [ -77.57558, 40.599439 ], "pop" : 19311, "state" : "PA" } +{ "_id" : "17045", "city" : "LIVERPOOL", "loc" : [ -77.00832699999999, 40.575272 ], "pop" : 3951, "state" : "PA" } +{ "_id" : "17047", "city" : "LOYSVILLE", "loc" : [ -77.41382299999999, 40.36576 ], "pop" : 1850, "state" : "PA" } +{ "_id" : "17048", "city" : "LYKENS", "loc" : [ -76.70735999999999, 40.590919 ], "pop" : 2904, "state" : "PA" } +{ "_id" : "17049", "city" : "MC ALISTERVILLE", "loc" : [ -77.2602, 40.646916 ], "pop" : 3073, "state" : "PA" } +{ "_id" : "17051", "city" : "MC VEYTOWN", "loc" : [ -77.718625, 40.504593 ], "pop" : 3685, "state" : "PA" } +{ "_id" : "17052", "city" : "MAPLETON DEPOT", "loc" : [ -77.960444, 40.386414 ], "pop" : 1329, "state" : "PA" } +{ "_id" : "17053", "city" : "MARYSVILLE", "loc" : [ -76.972204, 40.335062 ], "pop" : 4561, "state" : "PA" } +{ "_id" : "17055", "city" : "HAMPDEN", "loc" : [ -76.99493, 40.212669 ], "pop" : 51902, "state" : "PA" } +{ "_id" : "17057", "city" : "MIDDLETOWN", "loc" : [ -76.733127, 40.204086 ], "pop" : 21545, "state" : "PA" } +{ "_id" : "17058", "city" : "MIFFLIN", "loc" : [ -77.41314, 40.570842 ], "pop" : 1189, "state" : "PA" } +{ "_id" : "17059", "city" : "MIFFLINTOWN", "loc" : [ -77.376119, 40.572666 ], "pop" : 5646, "state" : "PA" } +{ "_id" : "17060", "city" : "MILL CREEK", "loc" : [ -77.917689, 40.447102 ], "pop" : 1002, "state" : "PA" } +{ "_id" : "17061", "city" : "MILLERSBURG", "loc" : [ -76.930483, 40.558743 ], "pop" : 6135, "state" : "PA" } +{ "_id" : "17062", "city" : "MILLERSTOWN", "loc" : [ -77.12977600000001, 40.550548 ], "pop" : 1589, "state" : "PA" } +{ "_id" : "17063", "city" : "MILROY", "loc" : [ -77.55673899999999, 40.72033 ], "pop" : 3627, "state" : "PA" } +{ "_id" : "17065", "city" : "MOUNT HOLLY SPRI", "loc" : [ -77.19080700000001, 40.118356 ], "pop" : 2857, "state" : "PA" } +{ "_id" : "17066", "city" : "MOUNT UNION", "loc" : [ -77.863704, 40.390106 ], "pop" : 7218, "state" : "PA" } +{ "_id" : "17067", "city" : "MYERSTOWN", "loc" : [ -76.314328, 40.378949 ], "pop" : 12843, "state" : "PA" } +{ "_id" : "17068", "city" : "NEW BLOOMFIELD", "loc" : [ -77.193836, 40.419325 ], "pop" : 3066, "state" : "PA" } +{ "_id" : "17070", "city" : "NEW CUMBERLAND", "loc" : [ -76.868909, 40.215105 ], "pop" : 15037, "state" : "PA" } +{ "_id" : "17071", "city" : "NEW GERMANTOWN", "loc" : [ -77.579701, 40.305749 ], "pop" : 455, "state" : "PA" } +{ "_id" : "17073", "city" : "NEWMANSTOWN", "loc" : [ -76.2426, 40.317938 ], "pop" : 3560, "state" : "PA" } +{ "_id" : "17074", "city" : "NEWPORT", "loc" : [ -77.16586599999999, 40.482662 ], "pop" : 6378, "state" : "PA" } +{ "_id" : "17076", "city" : "OAKLAND MILLS", "loc" : [ -77.319244, 40.614748 ], "pop" : 457, "state" : "PA" } +{ "_id" : "17078", "city" : "PALMYRA", "loc" : [ -76.58861, 40.301055 ], "pop" : 14239, "state" : "PA" } +{ "_id" : "17082", "city" : "PORT ROYAL", "loc" : [ -77.430958, 40.51068 ], "pop" : 3319, "state" : "PA" } +{ "_id" : "17084", "city" : "REEDSVILLE", "loc" : [ -77.611589, 40.672189 ], "pop" : 3320, "state" : "PA" } +{ "_id" : "17086", "city" : "RICHFIELD", "loc" : [ -77.12229600000001, 40.688424 ], "pop" : 1673, "state" : "PA" } +{ "_id" : "17087", "city" : "RICHLAND", "loc" : [ -76.26544699999999, 40.380595 ], "pop" : 3367, "state" : "PA" } +{ "_id" : "17090", "city" : "SHERMANS DALE", "loc" : [ -77.18085600000001, 40.329898 ], "pop" : 5128, "state" : "PA" } +{ "_id" : "17094", "city" : "THOMPSONTOWN", "loc" : [ -77.207551, 40.590782 ], "pop" : 2515, "state" : "PA" } +{ "_id" : "17097", "city" : "WICONISCO", "loc" : [ -76.709084, 40.567511 ], "pop" : 1702, "state" : "PA" } +{ "_id" : "17098", "city" : "WILLIAMSTOWN", "loc" : [ -76.622259, 40.580761 ], "pop" : 2655, "state" : "PA" } +{ "_id" : "17099", "city" : "YEAGERTOWN", "loc" : [ -77.56882299999999, 40.643558 ], "pop" : 2197, "state" : "PA" } +{ "_id" : "17101", "city" : "HARRISBURG", "loc" : [ -76.883079, 40.261767 ], "pop" : 2151, "state" : "PA" } +{ "_id" : "17102", "city" : "HARRISBURG", "loc" : [ -76.89104399999999, 40.27278 ], "pop" : 8862, "state" : "PA" } +{ "_id" : "17103", "city" : "PENBROOK", "loc" : [ -76.863812, 40.273852 ], "pop" : 12335, "state" : "PA" } +{ "_id" : "17104", "city" : "HARRISBURG", "loc" : [ -76.859397, 40.259683 ], "pop" : 21882, "state" : "PA" } +{ "_id" : "17109", "city" : "COLONIAL PARK", "loc" : [ -76.82261200000001, 40.29122 ], "pop" : 22952, "state" : "PA" } +{ "_id" : "17110", "city" : "HARRISBURG", "loc" : [ -76.886246, 40.302957 ], "pop" : 19314, "state" : "PA" } +{ "_id" : "17111", "city" : "SWATARA", "loc" : [ -76.79391800000001, 40.266058 ], "pop" : 22558, "state" : "PA" } +{ "_id" : "17112", "city" : "HARRISBURG", "loc" : [ -76.791438, 40.335208 ], "pop" : 27559, "state" : "PA" } +{ "_id" : "17113", "city" : "STEELTON", "loc" : [ -76.827568, 40.234007 ], "pop" : 9841, "state" : "PA" } +{ "_id" : "17201", "city" : "CHAMBERSBURG", "loc" : [ -77.657928, 39.931318 ], "pop" : 41893, "state" : "PA" } +{ "_id" : "17211", "city" : "ARTEMAS", "loc" : [ -78.40313999999999, 39.757465 ], "pop" : 481, "state" : "PA" } +{ "_id" : "17212", "city" : "BIG COVE TANNERY", "loc" : [ -78.012366, 39.889704 ], "pop" : 2178, "state" : "PA" } +{ "_id" : "17213", "city" : "BLAIRS MILLS", "loc" : [ -77.769473, 40.254804 ], "pop" : 551, "state" : "PA" } +{ "_id" : "17214", "city" : "BLUE RIDGE SUMMI", "loc" : [ -77.469836, 39.726951 ], "pop" : 1090, "state" : "PA" } +{ "_id" : "17215", "city" : "BURNT CABINS", "loc" : [ -77.901718, 40.075278 ], "pop" : 155, "state" : "PA" } +{ "_id" : "17217", "city" : "CONCORD", "loc" : [ -77.70313299999999, 40.245842 ], "pop" : 109, "state" : "PA" } +{ "_id" : "17219", "city" : "DOYLESBURG", "loc" : [ -77.68620300000001, 40.217195 ], "pop" : 905, "state" : "PA" } +{ "_id" : "17220", "city" : "DRY RUN", "loc" : [ -77.76457000000001, 40.174744 ], "pop" : 499, "state" : "PA" } +{ "_id" : "17221", "city" : "FANNETTSBURG", "loc" : [ -77.82101, 40.071692 ], "pop" : 628, "state" : "PA" } +{ "_id" : "17222", "city" : "FAYETTEVILLE", "loc" : [ -77.53095999999999, 39.906543 ], "pop" : 9459, "state" : "PA" } +{ "_id" : "17223", "city" : "FORT LITTLETON", "loc" : [ -77.975678, 40.054372 ], "pop" : 750, "state" : "PA" } +{ "_id" : "17224", "city" : "FORT LOUDON", "loc" : [ -77.898365, 39.954692 ], "pop" : 1412, "state" : "PA" } +{ "_id" : "17225", "city" : "GREENCASTLE", "loc" : [ -77.746956, 39.781827 ], "pop" : 14553, "state" : "PA" } +{ "_id" : "17228", "city" : "HARRISONVILLE", "loc" : [ -78.08407699999999, 39.976137 ], "pop" : 1410, "state" : "PA" } +{ "_id" : "17229", "city" : "HUSTONTOWN", "loc" : [ -78.01483500000001, 40.044111 ], "pop" : 245, "state" : "PA" } +{ "_id" : "17232", "city" : "LURGAN", "loc" : [ -77.635063, 40.127422 ], "pop" : 845, "state" : "PA" } +{ "_id" : "17233", "city" : "MC CONNELLSBURG", "loc" : [ -77.990117, 39.944251 ], "pop" : 2529, "state" : "PA" } +{ "_id" : "17236", "city" : "MERCERSBURG", "loc" : [ -77.907259, 39.819519 ], "pop" : 7735, "state" : "PA" } +{ "_id" : "17237", "city" : "MONT ALTO", "loc" : [ -77.553676, 39.841689 ], "pop" : 1601, "state" : "PA" } +{ "_id" : "17238", "city" : "NEEDMORE", "loc" : [ -78.143935, 39.871279 ], "pop" : 1208, "state" : "PA" } +{ "_id" : "17239", "city" : "NEELYTON", "loc" : [ -77.85801499999999, 40.137051 ], "pop" : 816, "state" : "PA" } +{ "_id" : "17240", "city" : "NEWBURG", "loc" : [ -77.56691499999999, 40.13333 ], "pop" : 2350, "state" : "PA" } +{ "_id" : "17241", "city" : "NEWVILLE", "loc" : [ -77.411401, 40.185468 ], "pop" : 9740, "state" : "PA" } +{ "_id" : "17243", "city" : "ORBISONIA", "loc" : [ -77.906924, 40.238872 ], "pop" : 2368, "state" : "PA" } +{ "_id" : "17244", "city" : "ORRSTOWN", "loc" : [ -77.639762, 40.07305 ], "pop" : 2281, "state" : "PA" } +{ "_id" : "17246", "city" : "PLEASANT HALL", "loc" : [ -77.703148, 40.04135 ], "pop" : 366, "state" : "PA" } +{ "_id" : "17252", "city" : "SAINT THOMAS", "loc" : [ -77.7908, 39.924052 ], "pop" : 4109, "state" : "PA" } +{ "_id" : "17255", "city" : "SHADE GAP", "loc" : [ -77.868045, 40.172976 ], "pop" : 416, "state" : "PA" } +{ "_id" : "17257", "city" : "SHIPPENSBURG", "loc" : [ -77.51947699999999, 40.051359 ], "pop" : 19302, "state" : "PA" } +{ "_id" : "17260", "city" : "SHIRLEYSBURG", "loc" : [ -77.870062, 40.316768 ], "pop" : 1416, "state" : "PA" } +{ "_id" : "17262", "city" : "SPRING RUN", "loc" : [ -77.74052500000001, 40.14663 ], "pop" : 796, "state" : "PA" } +{ "_id" : "17264", "city" : "THREE SPRINGS", "loc" : [ -77.99412, 40.183437 ], "pop" : 2197, "state" : "PA" } +{ "_id" : "17265", "city" : "UPPERSTRASBURG", "loc" : [ -77.736791, 40.05799 ], "pop" : 499, "state" : "PA" } +{ "_id" : "17266", "city" : "WALNUT BOTTOM", "loc" : [ -77.408984, 40.086042 ], "pop" : 1157, "state" : "PA" } +{ "_id" : "17267", "city" : "WARFORDSBURG", "loc" : [ -78.198627, 39.769765 ], "pop" : 2988, "state" : "PA" } +{ "_id" : "17268", "city" : "WAYNESBORO", "loc" : [ -77.567363, 39.763504 ], "pop" : 25878, "state" : "PA" } +{ "_id" : "17271", "city" : "WILLOW HILL", "loc" : [ -77.796947, 40.113694 ], "pop" : 409, "state" : "PA" } +{ "_id" : "17301", "city" : "ABBOTTSTOWN", "loc" : [ -76.993077, 39.888099 ], "pop" : 1777, "state" : "PA" } +{ "_id" : "17302", "city" : "AIRVILLE", "loc" : [ -76.401179, 39.821012 ], "pop" : 1685, "state" : "PA" } +{ "_id" : "17304", "city" : "ASPERS", "loc" : [ -77.228657, 39.976533 ], "pop" : 2894, "state" : "PA" } +{ "_id" : "17307", "city" : "BIGLERVILLE", "loc" : [ -77.288549, 39.928119 ], "pop" : 5280, "state" : "PA" } +{ "_id" : "17309", "city" : "BROGUE", "loc" : [ -76.488236, 39.883044 ], "pop" : 5123, "state" : "PA" } +{ "_id" : "17313", "city" : "YOE", "loc" : [ -76.644794, 39.900127 ], "pop" : 8691, "state" : "PA" } +{ "_id" : "17314", "city" : "DELTA", "loc" : [ -76.34410099999999, 39.751754 ], "pop" : 4910, "state" : "PA" } +{ "_id" : "17315", "city" : "DOVER", "loc" : [ -76.855485, 40.006158 ], "pop" : 20094, "state" : "PA" } +{ "_id" : "17316", "city" : "EAST BERLIN", "loc" : [ -77.00725199999999, 39.964546 ], "pop" : 5538, "state" : "PA" } +{ "_id" : "17319", "city" : "ETTERS", "loc" : [ -76.801861, 40.154506 ], "pop" : 6135, "state" : "PA" } +{ "_id" : "17320", "city" : "GREENSTONE", "loc" : [ -77.376824, 39.762694 ], "pop" : 4709, "state" : "PA" } +{ "_id" : "17321", "city" : "FAWN GROVE", "loc" : [ -76.43923700000001, 39.751024 ], "pop" : 1938, "state" : "PA" } +{ "_id" : "17322", "city" : "FELTON", "loc" : [ -76.593721, 39.836006 ], "pop" : 3128, "state" : "PA" } +{ "_id" : "17324", "city" : "GARDNERS", "loc" : [ -77.187725, 40.042759 ], "pop" : 4246, "state" : "PA" } +{ "_id" : "17325", "city" : "GETTYSBURG", "loc" : [ -77.222313, 39.832044 ], "pop" : 23574, "state" : "PA" } +{ "_id" : "17327", "city" : "GLEN ROCK", "loc" : [ -76.747713, 39.781326 ], "pop" : 7217, "state" : "PA" } +{ "_id" : "17329", "city" : "BRODBECKS", "loc" : [ -76.86204600000001, 39.759907 ], "pop" : 2230, "state" : "PA" } +{ "_id" : "17331", "city" : "HANOVER", "loc" : [ -76.981196, 39.794286 ], "pop" : 37367, "state" : "PA" } +{ "_id" : "17339", "city" : "LEWISBERRY", "loc" : [ -76.87000399999999, 40.146295 ], "pop" : 5338, "state" : "PA" } +{ "_id" : "17340", "city" : "LITTLESTOWN", "loc" : [ -77.100326, 39.749549 ], "pop" : 7758, "state" : "PA" } +{ "_id" : "17344", "city" : "MC SHERRYSTOWN", "loc" : [ -77.01496, 39.804832 ], "pop" : 3838, "state" : "PA" } +{ "_id" : "17345", "city" : "MANCHESTER", "loc" : [ -76.733245, 40.069461 ], "pop" : 8095, "state" : "PA" } +{ "_id" : "17347", "city" : "MOUNT WOLF", "loc" : [ -76.69657599999999, 40.071126 ], "pop" : 3083, "state" : "PA" } +{ "_id" : "17349", "city" : "NEW FREEDOM", "loc" : [ -76.68406400000001, 39.742266 ], "pop" : 6346, "state" : "PA" } +{ "_id" : "17350", "city" : "NEW OXFORD", "loc" : [ -77.06433, 39.877459 ], "pop" : 9674, "state" : "PA" } +{ "_id" : "17352", "city" : "NEW PARK", "loc" : [ -76.504167, 39.760027 ], "pop" : 1190, "state" : "PA" } +{ "_id" : "17353", "city" : "ORRTANNA", "loc" : [ -77.38059199999999, 39.881032 ], "pop" : 2066, "state" : "PA" } +{ "_id" : "17356", "city" : "RED LION", "loc" : [ -76.608075, 39.902572 ], "pop" : 12737, "state" : "PA" } +{ "_id" : "17360", "city" : "SEVEN VALLEYS", "loc" : [ -76.738336, 39.855613 ], "pop" : 5219, "state" : "PA" } +{ "_id" : "17361", "city" : "SHREWSBURY", "loc" : [ -76.67482699999999, 39.760133 ], "pop" : 3749, "state" : "PA" } +{ "_id" : "17362", "city" : "SPRING GROVE", "loc" : [ -76.87735600000001, 39.857208 ], "pop" : 13901, "state" : "PA" } +{ "_id" : "17363", "city" : "STEWARTSTOWN", "loc" : [ -76.597037, 39.771962 ], "pop" : 5865, "state" : "PA" } +{ "_id" : "17364", "city" : "THOMASVILLE", "loc" : [ -76.882159, 39.934619 ], "pop" : 3435, "state" : "PA" } +{ "_id" : "17365", "city" : "WELLSVILLE", "loc" : [ -76.944315, 40.055721 ], "pop" : 2456, "state" : "PA" } +{ "_id" : "17366", "city" : "WINDSOR", "loc" : [ -76.55912600000001, 39.923271 ], "pop" : 5489, "state" : "PA" } +{ "_id" : "17368", "city" : "WRIGHTSVILLE", "loc" : [ -76.526971, 39.996559 ], "pop" : 7677, "state" : "PA" } +{ "_id" : "17370", "city" : "YORK HAVEN", "loc" : [ -76.773725, 40.122154 ], "pop" : 4948, "state" : "PA" } +{ "_id" : "17372", "city" : "YORK SPRINGS", "loc" : [ -77.10613600000001, 40.00839 ], "pop" : 3042, "state" : "PA" } +{ "_id" : "17401", "city" : "YORK", "loc" : [ -76.726887, 39.963539 ], "pop" : 2439, "state" : "PA" } +{ "_id" : "17402", "city" : "EAST YORK", "loc" : [ -76.674578, 39.971508 ], "pop" : 35648, "state" : "PA" } +{ "_id" : "17403", "city" : "YORK", "loc" : [ -76.712998, 39.94943 ], "pop" : 40210, "state" : "PA" } +{ "_id" : "17404", "city" : "WEST YORK", "loc" : [ -76.768987, 39.961988 ], "pop" : 49524, "state" : "PA" } +{ "_id" : "17406", "city" : "HELLAM", "loc" : [ -76.592646, 39.998249 ], "pop" : 6095, "state" : "PA" } +{ "_id" : "17407", "city" : "JACOBUS", "loc" : [ -76.714634, 39.880203 ], "pop" : 1872, "state" : "PA" } +{ "_id" : "17501", "city" : "AKRON", "loc" : [ -76.20529500000001, 40.157086 ], "pop" : 4286, "state" : "PA" } +{ "_id" : "17502", "city" : "BAINBRIDGE", "loc" : [ -76.672589, 40.1086 ], "pop" : 2688, "state" : "PA" } +{ "_id" : "17505", "city" : "BIRD IN HAND", "loc" : [ -76.183036, 40.056109 ], "pop" : 862, "state" : "PA" } +{ "_id" : "17509", "city" : "NINEPOINTS", "loc" : [ -76.025983, 39.935632 ], "pop" : 4517, "state" : "PA" } +{ "_id" : "17512", "city" : "COLUMBIA", "loc" : [ -76.48622, 40.039079 ], "pop" : 17454, "state" : "PA" } +{ "_id" : "17516", "city" : "CONESTOGA", "loc" : [ -76.35747499999999, 39.940303 ], "pop" : 4493, "state" : "PA" } +{ "_id" : "17517", "city" : "DENVER", "loc" : [ -76.11568800000001, 40.229671 ], "pop" : 10737, "state" : "PA" } +{ "_id" : "17518", "city" : "DRUMORE", "loc" : [ -76.245684, 39.838399 ], "pop" : 1191, "state" : "PA" } +{ "_id" : "17519", "city" : "EAST EARL", "loc" : [ -76.02763400000001, 40.139475 ], "pop" : 4249, "state" : "PA" } +{ "_id" : "17520", "city" : "EAST PETERSBURG", "loc" : [ -76.351169, 40.100781 ], "pop" : 4387, "state" : "PA" } +{ "_id" : "17522", "city" : "EPHRATA", "loc" : [ -76.18209299999999, 40.175641 ], "pop" : 25859, "state" : "PA" } +{ "_id" : "17527", "city" : "GAP", "loc" : [ -75.997801, 40.002018 ], "pop" : 4318, "state" : "PA" } +{ "_id" : "17529", "city" : "GORDONVILLE", "loc" : [ -76.11063, 40.035304 ], "pop" : 4429, "state" : "PA" } +{ "_id" : "17532", "city" : "HOLTWOOD", "loc" : [ -76.300822, 39.863146 ], "pop" : 2526, "state" : "PA" } +{ "_id" : "17535", "city" : "KINZERS", "loc" : [ -76.04932599999999, 40.005326 ], "pop" : 2524, "state" : "PA" } +{ "_id" : "17536", "city" : "KIRKWOOD", "loc" : [ -76.093315, 39.82571 ], "pop" : 2384, "state" : "PA" } +{ "_id" : "17538", "city" : "SALUNGA", "loc" : [ -76.414975, 40.08825 ], "pop" : 5489, "state" : "PA" } +{ "_id" : "17540", "city" : "LEOLA", "loc" : [ -76.192109, 40.096448 ], "pop" : 9624, "state" : "PA" } +{ "_id" : "17543", "city" : "BRUNNERVILLE", "loc" : [ -76.29926, 40.162573 ], "pop" : 29376, "state" : "PA" } +{ "_id" : "17545", "city" : "MANHEIM", "loc" : [ -76.416794, 40.170229 ], "pop" : 16992, "state" : "PA" } +{ "_id" : "17547", "city" : "MARIETTA", "loc" : [ -76.564527, 40.066442 ], "pop" : 5751, "state" : "PA" } +{ "_id" : "17551", "city" : "MILLERSVILLE", "loc" : [ -76.356568, 39.998213 ], "pop" : 8021, "state" : "PA" } +{ "_id" : "17552", "city" : "FLORIN", "loc" : [ -76.50755100000001, 40.106828 ], "pop" : 12282, "state" : "PA" } +{ "_id" : "17554", "city" : "MOUNTVILLE", "loc" : [ -76.427694, 40.042742 ], "pop" : 4192, "state" : "PA" } +{ "_id" : "17555", "city" : "NARVON", "loc" : [ -75.975584, 40.125165 ], "pop" : 7239, "state" : "PA" } +{ "_id" : "17557", "city" : "NEW HOLLAND", "loc" : [ -76.080136, 40.100511 ], "pop" : 11604, "state" : "PA" } +{ "_id" : "17560", "city" : "NEW PROVIDENCE", "loc" : [ -76.22431899999999, 39.909776 ], "pop" : 5330, "state" : "PA" } +{ "_id" : "17562", "city" : "PARADISE", "loc" : [ -76.108074, 39.985249 ], "pop" : 2757, "state" : "PA" } +{ "_id" : "17563", "city" : "PEACH BOTTOM", "loc" : [ -76.17908300000001, 39.770511 ], "pop" : 4352, "state" : "PA" } +{ "_id" : "17565", "city" : "PEQUEA", "loc" : [ -76.320866, 39.905765 ], "pop" : 1800, "state" : "PA" } +{ "_id" : "17566", "city" : "QUARRYVILLE", "loc" : [ -76.146462, 39.894932 ], "pop" : 9361, "state" : "PA" } +{ "_id" : "17569", "city" : "REINHOLDS", "loc" : [ -76.101332, 40.268758 ], "pop" : 4665, "state" : "PA" } +{ "_id" : "17572", "city" : "RONKS", "loc" : [ -76.166132, 40.020754 ], "pop" : 2964, "state" : "PA" } +{ "_id" : "17576", "city" : "SMOKETOWN", "loc" : [ -76.22007000000001, 40.040651 ], "pop" : 2141, "state" : "PA" } +{ "_id" : "17578", "city" : "STEVENS", "loc" : [ -76.162604, 40.219397 ], "pop" : 6511, "state" : "PA" } +{ "_id" : "17579", "city" : "STRASBURG", "loc" : [ -76.18482400000001, 39.970075 ], "pop" : 5694, "state" : "PA" } +{ "_id" : "17581", "city" : "TERRE HILL", "loc" : [ -76.05108300000001, 40.158539 ], "pop" : 1282, "state" : "PA" } +{ "_id" : "17582", "city" : "WASHINGTON BORO", "loc" : [ -76.4402, 39.988118 ], "pop" : 2214, "state" : "PA" } +{ "_id" : "17584", "city" : "WILLOW STREET", "loc" : [ -76.27524, 39.967003 ], "pop" : 7176, "state" : "PA" } +{ "_id" : "17601", "city" : "NEFFSVILLE", "loc" : [ -76.31988800000001, 40.075381 ], "pop" : 41062, "state" : "PA" } +{ "_id" : "17602", "city" : "LANCASTER", "loc" : [ -76.284364, 40.033514 ], "pop" : 40850, "state" : "PA" } +{ "_id" : "17603", "city" : "ROHRERSTOWN", "loc" : [ -76.33158299999999, 40.030475 ], "pop" : 55173, "state" : "PA" } +{ "_id" : "17701", "city" : "SOUTH WILLIAMSPO", "loc" : [ -77.020571, 41.247217 ], "pop" : 58844, "state" : "PA" } +{ "_id" : "17723", "city" : "CAMMAL", "loc" : [ -77.46202099999999, 41.380901 ], "pop" : 246, "state" : "PA" } +{ "_id" : "17724", "city" : "CANTON", "loc" : [ -76.858188, 41.653784 ], "pop" : 5189, "state" : "PA" } +{ "_id" : "17727", "city" : "CEDAR RUN", "loc" : [ -77.48891, 41.498972 ], "pop" : 102, "state" : "PA" } +{ "_id" : "17728", "city" : "COGAN STATION", "loc" : [ -77.068996, 41.31517 ], "pop" : 4582, "state" : "PA" } +{ "_id" : "17729", "city" : "CROSS FORK", "loc" : [ -77.80953, 41.473672 ], "pop" : 184, "state" : "PA" } +{ "_id" : "17737", "city" : "HUGHESVILLE", "loc" : [ -76.71411000000001, 41.255952 ], "pop" : 6489, "state" : "PA" } +{ "_id" : "17740", "city" : "SALLADASBURG", "loc" : [ -77.242704, 41.200733 ], "pop" : 11484, "state" : "PA" } +{ "_id" : "17742", "city" : "LAIRDSVILLE", "loc" : [ -76.58893, 41.233549 ], "pop" : 914, "state" : "PA" } +{ "_id" : "17744", "city" : "LINDEN", "loc" : [ -77.152652, 41.247216 ], "pop" : 2994, "state" : "PA" } +{ "_id" : "17745", "city" : "LOCK HAVEN", "loc" : [ -77.44358800000001, 41.142497 ], "pop" : 16448, "state" : "PA" } +{ "_id" : "17747", "city" : "LOGANTON", "loc" : [ -77.320397, 41.028317 ], "pop" : 2326, "state" : "PA" } +{ "_id" : "17751", "city" : "MILL HALL", "loc" : [ -77.483609, 41.086688 ], "pop" : 7510, "state" : "PA" } +{ "_id" : "17752", "city" : "MONTGOMERY", "loc" : [ -76.883933, 41.178778 ], "pop" : 5539, "state" : "PA" } +{ "_id" : "17754", "city" : "MONTOURSVILLE", "loc" : [ -76.903035, 41.266252 ], "pop" : 11266, "state" : "PA" } +{ "_id" : "17756", "city" : "MUNCY", "loc" : [ -76.76325799999999, 41.213715 ], "pop" : 8627, "state" : "PA" } +{ "_id" : "17758", "city" : "MUNCY VALLEY", "loc" : [ -76.541518, 41.381206 ], "pop" : 1548, "state" : "PA" } +{ "_id" : "17763", "city" : "RALSTON", "loc" : [ -76.95835, 41.503817 ], "pop" : 588, "state" : "PA" } +{ "_id" : "17764", "city" : "RENOVO", "loc" : [ -77.74478999999999, 41.333376 ], "pop" : 3639, "state" : "PA" } +{ "_id" : "17765", "city" : "ROARING BRANCH", "loc" : [ -76.942053, 41.569234 ], "pop" : 448, "state" : "PA" } +{ "_id" : "17768", "city" : "SHUNK", "loc" : [ -76.745521, 41.553574 ], "pop" : 300, "state" : "PA" } +{ "_id" : "17771", "city" : "TROUT RUN", "loc" : [ -77.009776, 41.412481 ], "pop" : 4449, "state" : "PA" } +{ "_id" : "17772", "city" : "TURBOTVILLE", "loc" : [ -76.742493, 41.111867 ], "pop" : 3902, "state" : "PA" } +{ "_id" : "17774", "city" : "UNITYVILLE", "loc" : [ -76.51831799999999, 41.243552 ], "pop" : 871, "state" : "PA" } +{ "_id" : "17776", "city" : "WATERVILLE", "loc" : [ -77.36036799999999, 41.31136 ], "pop" : 334, "state" : "PA" } +{ "_id" : "17777", "city" : "WATSONTOWN", "loc" : [ -76.85319200000001, 41.102006 ], "pop" : 6601, "state" : "PA" } +{ "_id" : "17778", "city" : "WESTPORT", "loc" : [ -77.931496, 41.27445 ], "pop" : 25, "state" : "PA" } +{ "_id" : "17779", "city" : "WOOLRICH", "loc" : [ -77.331307, 41.188734 ], "pop" : 4694, "state" : "PA" } +{ "_id" : "17801", "city" : "SUNBURY", "loc" : [ -76.77761099999999, 40.855122 ], "pop" : 17335, "state" : "PA" } +{ "_id" : "17810", "city" : "ALLENWOOD", "loc" : [ -76.972362, 41.126424 ], "pop" : 2666, "state" : "PA" } +{ "_id" : "17812", "city" : "BEAVER SPRINGS", "loc" : [ -77.231801, 40.752766 ], "pop" : 1575, "state" : "PA" } +{ "_id" : "17813", "city" : "BEAVERTOWN", "loc" : [ -77.169112, 40.777378 ], "pop" : 2226, "state" : "PA" } +{ "_id" : "17814", "city" : "BENTON", "loc" : [ -76.340632, 41.223142 ], "pop" : 5292, "state" : "PA" } +{ "_id" : "17815", "city" : "BLOOMSBURG", "loc" : [ -76.438379, 41.011528 ], "pop" : 25338, "state" : "PA" } +{ "_id" : "17820", "city" : "CATAWISSA", "loc" : [ -76.441586, 40.918031 ], "pop" : 6334, "state" : "PA" } +{ "_id" : "17821", "city" : "DANVILLE", "loc" : [ -76.62289699999999, 40.979895 ], "pop" : 17269, "state" : "PA" } +{ "_id" : "17823", "city" : "DORNSIFE", "loc" : [ -76.76260000000001, 40.757092 ], "pop" : 432, "state" : "PA" } +{ "_id" : "17824", "city" : "ELYSBURG", "loc" : [ -76.556924, 40.863871 ], "pop" : 2165, "state" : "PA" } +{ "_id" : "17827", "city" : "FREEBURG", "loc" : [ -76.94296300000001, 40.767498 ], "pop" : 1080, "state" : "PA" } +{ "_id" : "17828", "city" : "GOWEN CITY", "loc" : [ -76.528149, 40.751141 ], "pop" : 646, "state" : "PA" } +{ "_id" : "17830", "city" : "HERNDON", "loc" : [ -76.80076099999999, 40.691789 ], "pop" : 2089, "state" : "PA" } +{ "_id" : "17832", "city" : "MARION HEIGHTS", "loc" : [ -76.465137, 40.804576 ], "pop" : 837, "state" : "PA" } +{ "_id" : "17834", "city" : "KULPMONT", "loc" : [ -76.474384, 40.793278 ], "pop" : 3183, "state" : "PA" } +{ "_id" : "17835", "city" : "LAURELTON", "loc" : [ -77.20521100000001, 40.91268 ], "pop" : 448, "state" : "PA" } +{ "_id" : "17836", "city" : "LECK KILL", "loc" : [ -76.62710800000001, 40.710135 ], "pop" : 626, "state" : "PA" } +{ "_id" : "17837", "city" : "LEWISBURG", "loc" : [ -76.90987800000001, 40.970205 ], "pop" : 18821, "state" : "PA" } +{ "_id" : "17841", "city" : "MC CLURE", "loc" : [ -77.37579100000001, 40.699084 ], "pop" : 4901, "state" : "PA" } +{ "_id" : "17842", "city" : "MIDDLEBURG", "loc" : [ -77.046798, 40.797656 ], "pop" : 6546, "state" : "PA" } +{ "_id" : "17843", "city" : "BEAVER SPRINGS", "loc" : [ -76.970366, 40.810917 ], "pop" : 1791, "state" : "PA" } +{ "_id" : "17844", "city" : "MIFFLINBURG", "loc" : [ -77.050515, 40.921826 ], "pop" : 8379, "state" : "PA" } +{ "_id" : "17845", "city" : "MILLMONT", "loc" : [ -77.194142, 40.880324 ], "pop" : 2111, "state" : "PA" } +{ "_id" : "17846", "city" : "MILLVILLE", "loc" : [ -76.52076700000001, 41.126051 ], "pop" : 5496, "state" : "PA" } +{ "_id" : "17847", "city" : "MILTON", "loc" : [ -76.839817, 41.01681 ], "pop" : 9223, "state" : "PA" } +{ "_id" : "17850", "city" : "MONTANDON", "loc" : [ -76.851024, 40.975936 ], "pop" : 3167, "state" : "PA" } +{ "_id" : "17851", "city" : "MOUNT CARMEL", "loc" : [ -76.419466, 40.795535 ], "pop" : 9925, "state" : "PA" } +{ "_id" : "17853", "city" : "MOUNT PLEASANT M", "loc" : [ -77.005241, 40.700185 ], "pop" : 1876, "state" : "PA" } +{ "_id" : "17855", "city" : "NEW BERLIN", "loc" : [ -76.986124, 40.880212 ], "pop" : 904, "state" : "PA" } +{ "_id" : "17856", "city" : "NEW COLUMBIA", "loc" : [ -76.90185099999999, 41.054108 ], "pop" : 3072, "state" : "PA" } +{ "_id" : "17857", "city" : "NORTHUMBERLAND", "loc" : [ -76.79079400000001, 40.904355 ], "pop" : 7326, "state" : "PA" } +{ "_id" : "17859", "city" : "ORANGEVILLE", "loc" : [ -76.38097, 41.10156 ], "pop" : 2625, "state" : "PA" } +{ "_id" : "17860", "city" : "PAXINOS", "loc" : [ -76.635041, 40.844809 ], "pop" : 1684, "state" : "PA" } +{ "_id" : "17864", "city" : "PORT TREVORTON", "loc" : [ -76.908215, 40.699593 ], "pop" : 2911, "state" : "PA" } +{ "_id" : "17866", "city" : "RANSHAW", "loc" : [ -76.498242, 40.803039 ], "pop" : 124, "state" : "PA" } +{ "_id" : "17867", "city" : "REBUCK", "loc" : [ -76.740605, 40.712544 ], "pop" : 620, "state" : "PA" } +{ "_id" : "17868", "city" : "RIVERSIDE", "loc" : [ -76.637458, 40.951269 ], "pop" : 1991, "state" : "PA" } +{ "_id" : "17870", "city" : "SELINSGROVE", "loc" : [ -76.86825, 40.822372 ], "pop" : 14796, "state" : "PA" } +{ "_id" : "17872", "city" : "EXCELSIOR", "loc" : [ -76.56111799999999, 40.790336 ], "pop" : 20982, "state" : "PA" } +{ "_id" : "17877", "city" : "SNYDERTOWN", "loc" : [ -76.67494499999999, 40.874097 ], "pop" : 416, "state" : "PA" } +{ "_id" : "17878", "city" : "STILLWATER", "loc" : [ -76.369624, 41.151517 ], "pop" : 523, "state" : "PA" } +{ "_id" : "17881", "city" : "TREVORTON", "loc" : [ -76.67023399999999, 40.781867 ], "pop" : 2067, "state" : "PA" } +{ "_id" : "17888", "city" : "WILBURTON", "loc" : [ -76.392922, 40.812087 ], "pop" : 98, "state" : "PA" } +{ "_id" : "17889", "city" : "WINFIELD", "loc" : [ -76.871833, 40.890805 ], "pop" : 2071, "state" : "PA" } +{ "_id" : "17901", "city" : "POTTSVILLE", "loc" : [ -76.212318, 40.683978 ], "pop" : 27703, "state" : "PA" } +{ "_id" : "17921", "city" : "ASHLAND", "loc" : [ -76.342972, 40.773231 ], "pop" : 8328, "state" : "PA" } +{ "_id" : "17922", "city" : "AUBURN", "loc" : [ -76.13439, 40.596157 ], "pop" : 2444, "state" : "PA" } +{ "_id" : "17923", "city" : "BRANCHDALE", "loc" : [ -76.33278799999999, 40.664328 ], "pop" : 835, "state" : "PA" } +{ "_id" : "17925", "city" : "BROCKTON", "loc" : [ -76.049874, 40.763162 ], "pop" : 1230, "state" : "PA" } +{ "_id" : "17927", "city" : "CENTRALIA", "loc" : [ -76.357325, 40.81375 ], "pop" : 1006, "state" : "PA" } +{ "_id" : "17929", "city" : "CRESSONA", "loc" : [ -76.19502799999999, 40.628361 ], "pop" : 2240, "state" : "PA" } +{ "_id" : "17931", "city" : "FRACKVILLE", "loc" : [ -76.231137, 40.782537 ], "pop" : 7039, "state" : "PA" } +{ "_id" : "17935", "city" : "GIRARDVILLE", "loc" : [ -76.28581, 40.792162 ], "pop" : 1892, "state" : "PA" } +{ "_id" : "17938", "city" : "HEGINS", "loc" : [ -76.473168, 40.666898 ], "pop" : 2499, "state" : "PA" } +{ "_id" : "17941", "city" : "KLINGERSTOWN", "loc" : [ -76.65070900000001, 40.667571 ], "pop" : 508, "state" : "PA" } +{ "_id" : "17948", "city" : "MAHANOY CITY", "loc" : [ -76.139601, 40.812302 ], "pop" : 5209, "state" : "PA" } +{ "_id" : "17954", "city" : "MINERSVILLE", "loc" : [ -76.261533, 40.690637 ], "pop" : 4998, "state" : "PA" } +{ "_id" : "17957", "city" : "MUIR", "loc" : [ -76.468205, 40.613614 ], "pop" : 374, "state" : "PA" } +{ "_id" : "17959", "city" : "KASKA", "loc" : [ -76.11348, 40.722728 ], "pop" : 2826, "state" : "PA" } +{ "_id" : "17960", "city" : "NEW RINGGOLD", "loc" : [ -75.948409, 40.714851 ], "pop" : 4284, "state" : "PA" } +{ "_id" : "17961", "city" : "ORWIGSBURG", "loc" : [ -76.08399900000001, 40.643071 ], "pop" : 6928, "state" : "PA" } +{ "_id" : "17963", "city" : "PINE GROVE", "loc" : [ -76.326913, 40.567093 ], "pop" : 12239, "state" : "PA" } +{ "_id" : "17964", "city" : "PITMAN", "loc" : [ -76.523297, 40.704868 ], "pop" : 992, "state" : "PA" } +{ "_id" : "17965", "city" : "PORT CARBON", "loc" : [ -76.16604599999999, 40.697731 ], "pop" : 2260, "state" : "PA" } +{ "_id" : "17967", "city" : "RINGTOWN", "loc" : [ -76.23493000000001, 40.855854 ], "pop" : 2311, "state" : "PA" } +{ "_id" : "17968", "city" : "SACRAMENTO", "loc" : [ -76.61283299999999, 40.635238 ], "pop" : 347, "state" : "PA" } +{ "_id" : "17970", "city" : "SAINT CLAIR", "loc" : [ -76.192381, 40.719273 ], "pop" : 4091, "state" : "PA" } +{ "_id" : "17972", "city" : "SCHUYLKILL HAVEN", "loc" : [ -76.169973, 40.630571 ], "pop" : 6199, "state" : "PA" } +{ "_id" : "17976", "city" : "SHENANDOAH", "loc" : [ -76.203502, 40.816744 ], "pop" : 11159, "state" : "PA" } +{ "_id" : "17978", "city" : "SPRING GLEN", "loc" : [ -76.635018, 40.633447 ], "pop" : 288, "state" : "PA" } +{ "_id" : "17980", "city" : "TOWER CITY", "loc" : [ -76.550022, 40.584475 ], "pop" : 3905, "state" : "PA" } +{ "_id" : "17981", "city" : "DONALDSON", "loc" : [ -76.398796, 40.626842 ], "pop" : 2629, "state" : "PA" } +{ "_id" : "17983", "city" : "VALLEY VIEW", "loc" : [ -76.544843, 40.644467 ], "pop" : 2007, "state" : "PA" } +{ "_id" : "17985", "city" : "ZION GROVE", "loc" : [ -76.231032, 40.937152 ], "pop" : 2070, "state" : "PA" } +{ "_id" : "18011", "city" : "ALBURTIS", "loc" : [ -75.62112999999999, 40.486201 ], "pop" : 4844, "state" : "PA" } +{ "_id" : "18013", "city" : "ROSETO", "loc" : [ -75.195644, 40.854907 ], "pop" : 16916, "state" : "PA" } +{ "_id" : "18014", "city" : "BATH", "loc" : [ -75.40855999999999, 40.755144 ], "pop" : 11601, "state" : "PA" } +{ "_id" : "18015", "city" : "BETHLEHEM", "loc" : [ -75.38050699999999, 40.600167 ], "pop" : 29778, "state" : "PA" } +{ "_id" : "18017", "city" : "BUTZTOWN", "loc" : [ -75.35823000000001, 40.65168 ], "pop" : 46369, "state" : "PA" } +{ "_id" : "18018", "city" : "BETHLEHEM", "loc" : [ -75.392827, 40.627849 ], "pop" : 32072, "state" : "PA" } +{ "_id" : "18031", "city" : "BREINIGSVILLE", "loc" : [ -75.655269, 40.552621 ], "pop" : 3437, "state" : "PA" } +{ "_id" : "18032", "city" : "CATASAUQUA", "loc" : [ -75.46926999999999, 40.655696 ], "pop" : 9663, "state" : "PA" } +{ "_id" : "18034", "city" : "CENTER VALLEY", "loc" : [ -75.42420799999999, 40.539594 ], "pop" : 5250, "state" : "PA" } +{ "_id" : "18035", "city" : "CHERRYVILLE", "loc" : [ -75.552133, 40.738476 ], "pop" : 905, "state" : "PA" } +{ "_id" : "18036", "city" : "COOPERSBURG", "loc" : [ -75.388778, 40.507553 ], "pop" : 10656, "state" : "PA" } +{ "_id" : "18037", "city" : "COPLAY", "loc" : [ -75.51882500000001, 40.684865 ], "pop" : 6015, "state" : "PA" } +{ "_id" : "18038", "city" : "DANIELSVILLE", "loc" : [ -75.518604, 40.786636 ], "pop" : 2004, "state" : "PA" } +{ "_id" : "18041", "city" : "EAST GREENVILLE", "loc" : [ -75.505618, 40.411876 ], "pop" : 6266, "state" : "PA" } +{ "_id" : "18042", "city" : "FORKS TOWNSHIP", "loc" : [ -75.23582, 40.6867 ], "pop" : 65784, "state" : "PA" } +{ "_id" : "18049", "city" : "EMMAUS", "loc" : [ -75.500991, 40.529295 ], "pop" : 16204, "state" : "PA" } +{ "_id" : "18051", "city" : "FOGELSVILLE", "loc" : [ -75.656794, 40.59304 ], "pop" : 2175, "state" : "PA" } +{ "_id" : "18052", "city" : "HOKENDAUQUA", "loc" : [ -75.495383, 40.647479 ], "pop" : 23666, "state" : "PA" } +{ "_id" : "18053", "city" : "GERMANSVILLE", "loc" : [ -75.714687, 40.711826 ], "pop" : 975, "state" : "PA" } +{ "_id" : "18054", "city" : "GREEN LANE", "loc" : [ -75.435148, 40.353377 ], "pop" : 6020, "state" : "PA" } +{ "_id" : "18055", "city" : "HELLERTOWN", "loc" : [ -75.325513, 40.581715 ], "pop" : 11759, "state" : "PA" } +{ "_id" : "18056", "city" : "HEREFORD", "loc" : [ -75.579983, 40.448659 ], "pop" : 3026, "state" : "PA" } +{ "_id" : "18058", "city" : "KUNKLETOWN", "loc" : [ -75.47597399999999, 40.899891 ], "pop" : 4924, "state" : "PA" } +{ "_id" : "18062", "city" : "MACUNGIE", "loc" : [ -75.56661800000001, 40.528543 ], "pop" : 10376, "state" : "PA" } +{ "_id" : "18064", "city" : "NAZARETH", "loc" : [ -75.31993199999999, 40.744962 ], "pop" : 19236, "state" : "PA" } +{ "_id" : "18066", "city" : "NEW TRIPOLI", "loc" : [ -75.741739, 40.654544 ], "pop" : 4684, "state" : "PA" } +{ "_id" : "18067", "city" : "NORTHAMPTON", "loc" : [ -75.48742, 40.699765 ], "pop" : 13792, "state" : "PA" } +{ "_id" : "18069", "city" : "OREFIELD", "loc" : [ -75.59739500000001, 40.624826 ], "pop" : 6397, "state" : "PA" } +{ "_id" : "18070", "city" : "PALM", "loc" : [ -75.533124, 40.43167 ], "pop" : 512, "state" : "PA" } +{ "_id" : "18071", "city" : "PALMERTON", "loc" : [ -75.601119, 40.816976 ], "pop" : 11535, "state" : "PA" } +{ "_id" : "18072", "city" : "PEN ARGYL", "loc" : [ -75.270115, 40.85182 ], "pop" : 9736, "state" : "PA" } +{ "_id" : "18073", "city" : "PENNSBURG", "loc" : [ -75.486608, 40.391138 ], "pop" : 5126, "state" : "PA" } +{ "_id" : "18074", "city" : "PERKIOMENVILLE", "loc" : [ -75.50218, 40.31566 ], "pop" : 4053, "state" : "PA" } +{ "_id" : "18076", "city" : "RED HILL", "loc" : [ -75.484613, 40.375807 ], "pop" : 1807, "state" : "PA" } +{ "_id" : "18077", "city" : "RIEGELSVILLE", "loc" : [ -75.219064, 40.57824 ], "pop" : 1924, "state" : "PA" } +{ "_id" : "18078", "city" : "SCHNECKSVILLE", "loc" : [ -75.623924, 40.681949 ], "pop" : 6843, "state" : "PA" } +{ "_id" : "18080", "city" : "EMERALD", "loc" : [ -75.621612, 40.740695 ], "pop" : 11316, "state" : "PA" } +{ "_id" : "18087", "city" : "TREXLERTOWN", "loc" : [ -75.602293, 40.554418 ], "pop" : 690, "state" : "PA" } +{ "_id" : "18088", "city" : "WALNUTPORT", "loc" : [ -75.565749, 40.76147 ], "pop" : 7180, "state" : "PA" } +{ "_id" : "18091", "city" : "WIND GAP", "loc" : [ -75.32637800000001, 40.816922 ], "pop" : 1740, "state" : "PA" } +{ "_id" : "18092", "city" : "ZIONSVILLE", "loc" : [ -75.526146, 40.473425 ], "pop" : 2312, "state" : "PA" } +{ "_id" : "18101", "city" : "ALLENTOWN", "loc" : [ -75.470955, 40.602729 ], "pop" : 3638, "state" : "PA" } +{ "_id" : "18102", "city" : "ALLENTOWN", "loc" : [ -75.478139, 40.606818 ], "pop" : 41873, "state" : "PA" } +{ "_id" : "18103", "city" : "ALLENTOWN", "loc" : [ -75.464521, 40.589145 ], "pop" : 59074, "state" : "PA" } +{ "_id" : "18104", "city" : "ALLENTOWN", "loc" : [ -75.522499, 40.601849 ], "pop" : 33989, "state" : "PA" } +{ "_id" : "18106", "city" : "WESCOSVILLE", "loc" : [ -75.566424, 40.561451 ], "pop" : 6260, "state" : "PA" } +{ "_id" : "18201", "city" : "WEST HAZLETON", "loc" : [ -75.978193, 40.962107 ], "pop" : 38788, "state" : "PA" } +{ "_id" : "18210", "city" : "ALBRIGHTSVILLE", "loc" : [ -75.58420599999999, 40.974786 ], "pop" : 3862, "state" : "PA" } +{ "_id" : "18211", "city" : "ANDREAS", "loc" : [ -75.834247, 40.746457 ], "pop" : 1235, "state" : "PA" } +{ "_id" : "18214", "city" : "BARNESVILLE", "loc" : [ -76.06108999999999, 40.813811 ], "pop" : 1949, "state" : "PA" } +{ "_id" : "18216", "city" : "BEAVER MEADOWS", "loc" : [ -75.940648, 40.922672 ], "pop" : 2470, "state" : "PA" } +{ "_id" : "18218", "city" : "COALDALE", "loc" : [ -75.91038500000001, 40.821942 ], "pop" : 2531, "state" : "PA" } +{ "_id" : "18220", "city" : "DELANO", "loc" : [ -76.069462, 40.841048 ], "pop" : 605, "state" : "PA" } +{ "_id" : "18222", "city" : "DRUMS", "loc" : [ -75.97676, 41.025525 ], "pop" : 6008, "state" : "PA" } +{ "_id" : "18224", "city" : "FREELAND", "loc" : [ -75.888001, 41.019557 ], "pop" : 6311, "state" : "PA" } +{ "_id" : "18229", "city" : "JIM THORPE", "loc" : [ -75.739665, 40.870002 ], "pop" : 5048, "state" : "PA" } +{ "_id" : "18232", "city" : "LANSFORD", "loc" : [ -75.882834, 40.831444 ], "pop" : 4583, "state" : "PA" } +{ "_id" : "18235", "city" : "WEISSPORT", "loc" : [ -75.70608799999999, 40.830024 ], "pop" : 17675, "state" : "PA" } +{ "_id" : "18237", "city" : "MCADOO", "loc" : [ -75.997117, 40.89791 ], "pop" : 4184, "state" : "PA" } +{ "_id" : "18240", "city" : "NESQUEHONING", "loc" : [ -75.82389000000001, 40.862608 ], "pop" : 3364, "state" : "PA" } +{ "_id" : "18245", "city" : "QUAKAKE", "loc" : [ -75.982477, 40.849337 ], "pop" : 1292, "state" : "PA" } +{ "_id" : "18246", "city" : "ROCK GLEN", "loc" : [ -76.16376099999999, 40.964628 ], "pop" : 1938, "state" : "PA" } +{ "_id" : "18248", "city" : "SHEPPTON", "loc" : [ -76.137952, 40.888073 ], "pop" : 1374, "state" : "PA" } +{ "_id" : "18249", "city" : "SUGARLOAF", "loc" : [ -76.07165500000001, 40.997126 ], "pop" : 5007, "state" : "PA" } +{ "_id" : "18250", "city" : "SUMMIT HILL", "loc" : [ -75.869275, 40.825524 ], "pop" : 3332, "state" : "PA" } +{ "_id" : "18252", "city" : "TAMAQUA", "loc" : [ -75.97353, 40.798319 ], "pop" : 10446, "state" : "PA" } +{ "_id" : "18255", "city" : "WEATHERLY", "loc" : [ -75.830635, 40.941085 ], "pop" : 4295, "state" : "PA" } +{ "_id" : "18301", "city" : "EAST STROUDSBURG", "loc" : [ -75.173463, 41.036714 ], "pop" : 26726, "state" : "PA" } +{ "_id" : "18321", "city" : "BARTONSVILLE", "loc" : [ -75.29672600000001, 41.008007 ], "pop" : 553, "state" : "PA" } +{ "_id" : "18322", "city" : "BRODHEADSVILLE", "loc" : [ -75.410415, 40.930862 ], "pop" : 1834, "state" : "PA" } +{ "_id" : "18324", "city" : "BUSHKILL", "loc" : [ -75.01320699999999, 41.128476 ], "pop" : 2483, "state" : "PA" } +{ "_id" : "18325", "city" : "CANADENSIS", "loc" : [ -75.257288, 41.233791 ], "pop" : 2194, "state" : "PA" } +{ "_id" : "18326", "city" : "CRESCO", "loc" : [ -75.26822799999999, 41.160605 ], "pop" : 3074, "state" : "PA" } +{ "_id" : "18327", "city" : "DELAWARE WATER G", "loc" : [ -75.149987, 40.982863 ], "pop" : 1052, "state" : "PA" } +{ "_id" : "18328", "city" : "DINGMANS FERRY", "loc" : [ -74.938018, 41.239966 ], "pop" : 3705, "state" : "PA" } +{ "_id" : "18330", "city" : "EFFORT", "loc" : [ -75.452286, 40.966946 ], "pop" : 3817, "state" : "PA" } +{ "_id" : "18331", "city" : "GILBERT", "loc" : [ -75.43137299999999, 40.908866 ], "pop" : 405, "state" : "PA" } +{ "_id" : "18332", "city" : "HENRYVILLE", "loc" : [ -75.279753, 41.088912 ], "pop" : 1927, "state" : "PA" } +{ "_id" : "18333", "city" : "KRESGEVILLE", "loc" : [ -75.507437, 40.898156 ], "pop" : 1125, "state" : "PA" } +{ "_id" : "18334", "city" : "LONG POND", "loc" : [ -75.448245, 41.067732 ], "pop" : 667, "state" : "PA" } +{ "_id" : "18336", "city" : "MATAMORAS", "loc" : [ -74.71535799999999, 41.367437 ], "pop" : 3391, "state" : "PA" } +{ "_id" : "18337", "city" : "MILFORD", "loc" : [ -74.88236000000001, 41.322816 ], "pop" : 6668, "state" : "PA" } +{ "_id" : "18340", "city" : "MILLRIFT", "loc" : [ -74.773876, 41.358265 ], "pop" : 649, "state" : "PA" } +{ "_id" : "18343", "city" : "MOUNT BETHEL", "loc" : [ -75.11154500000001, 40.900839 ], "pop" : 3966, "state" : "PA" } +{ "_id" : "18344", "city" : "MOUNT POCONO", "loc" : [ -75.352868, 41.121558 ], "pop" : 2465, "state" : "PA" } +{ "_id" : "18346", "city" : "POCONO SUMMIT", "loc" : [ -75.413554, 41.103989 ], "pop" : 1509, "state" : "PA" } +{ "_id" : "18347", "city" : "POCONO LAKE", "loc" : [ -75.555863, 41.118661 ], "pop" : 1943, "state" : "PA" } +{ "_id" : "18350", "city" : "POCONO PINES", "loc" : [ -75.476038, 41.105387 ], "pop" : 866, "state" : "PA" } +{ "_id" : "18352", "city" : "REEDERS", "loc" : [ -75.278113, 40.989533 ], "pop" : 481, "state" : "PA" } +{ "_id" : "18353", "city" : "SAYLORSBURG", "loc" : [ -75.37476100000001, 40.917179 ], "pop" : 6970, "state" : "PA" } +{ "_id" : "18354", "city" : "SCIOTA", "loc" : [ -75.293779, 40.928282 ], "pop" : 4155, "state" : "PA" } +{ "_id" : "18355", "city" : "SCOTRUN", "loc" : [ -75.32646, 41.075147 ], "pop" : 966, "state" : "PA" } +{ "_id" : "18360", "city" : "STROUDSBURG", "loc" : [ -75.24852, 40.987697 ], "pop" : 17668, "state" : "PA" } +{ "_id" : "18370", "city" : "SWIFTWATER", "loc" : [ -75.34827799999999, 41.087936 ], "pop" : 838, "state" : "PA" } +{ "_id" : "18371", "city" : "TAMIMENT", "loc" : [ -74.952614, 41.168112 ], "pop" : 557, "state" : "PA" } +{ "_id" : "18372", "city" : "TANNERSVILLE", "loc" : [ -75.309984, 41.048202 ], "pop" : 2353, "state" : "PA" } +{ "_id" : "18401", "city" : "ALDENVILLE", "loc" : [ -75.36749, 41.642679 ], "pop" : 422, "state" : "PA" } +{ "_id" : "18403", "city" : "EYNON", "loc" : [ -75.555232, 41.495633 ], "pop" : 6489, "state" : "PA" } +{ "_id" : "18405", "city" : "BEACH LAKE", "loc" : [ -75.11649, 41.603403 ], "pop" : 918, "state" : "PA" } +{ "_id" : "18407", "city" : "SIMPSON", "loc" : [ -75.507363, 41.583481 ], "pop" : 16409, "state" : "PA" } +{ "_id" : "18411", "city" : "CLARKS SUMMIT", "loc" : [ -75.705713, 41.487795 ], "pop" : 23088, "state" : "PA" } +{ "_id" : "18414", "city" : "DALTON", "loc" : [ -75.703737, 41.539496 ], "pop" : 7621, "state" : "PA" } +{ "_id" : "18415", "city" : "DAMASCUS", "loc" : [ -75.131151, 41.736623 ], "pop" : 1206, "state" : "PA" } +{ "_id" : "18417", "city" : "EQUINUNK", "loc" : [ -75.189081, 41.811712 ], "pop" : 663, "state" : "PA" } +{ "_id" : "18419", "city" : "FACTORYVILLE", "loc" : [ -75.765182, 41.576168 ], "pop" : 4402, "state" : "PA" } +{ "_id" : "18421", "city" : "BROWNDALE", "loc" : [ -75.48725, 41.654587 ], "pop" : 3728, "state" : "PA" } +{ "_id" : "18424", "city" : "GOULDSBORO", "loc" : [ -75.503653, 41.2448 ], "pop" : 2805, "state" : "PA" } +{ "_id" : "18425", "city" : "GREELEY", "loc" : [ -75.012491, 41.437238 ], "pop" : 1121, "state" : "PA" } +{ "_id" : "18426", "city" : "GREENTOWN", "loc" : [ -75.28191099999999, 41.332145 ], "pop" : 1592, "state" : "PA" } +{ "_id" : "18427", "city" : "HAMLIN", "loc" : [ -75.354232, 41.401477 ], "pop" : 1575, "state" : "PA" } +{ "_id" : "18428", "city" : "HAWLEY", "loc" : [ -75.197822, 41.478685 ], "pop" : 2817, "state" : "PA" } +{ "_id" : "18430", "city" : "HERRICK CENTER", "loc" : [ -75.50438699999999, 41.76434 ], "pop" : 218, "state" : "PA" } +{ "_id" : "18431", "city" : "HONESDALE", "loc" : [ -75.25279, 41.579227 ], "pop" : 12655, "state" : "PA" } +{ "_id" : "18433", "city" : "MAYFIELD", "loc" : [ -75.542948, 41.532723 ], "pop" : 4274, "state" : "PA" } +{ "_id" : "18434", "city" : "JESSUP", "loc" : [ -75.56889099999999, 41.472443 ], "pop" : 4349, "state" : "PA" } +{ "_id" : "18435", "city" : "LACKAWAXEN", "loc" : [ -75.074859, 41.504272 ], "pop" : 1711, "state" : "PA" } +{ "_id" : "18436", "city" : "LAKE ARIEL", "loc" : [ -75.431257, 41.439476 ], "pop" : 7939, "state" : "PA" } +{ "_id" : "18437", "city" : "LAKE COMO", "loc" : [ -75.32308, 41.866553 ], "pop" : 415, "state" : "PA" } +{ "_id" : "18438", "city" : "LAKEVILLE", "loc" : [ -75.260717, 41.422278 ], "pop" : 1028, "state" : "PA" } +{ "_id" : "18439", "city" : "LAKEWOOD", "loc" : [ -75.383824, 41.817138 ], "pop" : 653, "state" : "PA" } +{ "_id" : "18441", "city" : "LENOXVILLE", "loc" : [ -75.631934, 41.667713 ], "pop" : 587, "state" : "PA" } +{ "_id" : "18443", "city" : "MILANVILLE", "loc" : [ -75.08817999999999, 41.649208 ], "pop" : 922, "state" : "PA" } +{ "_id" : "18444", "city" : "MOSCOW", "loc" : [ -75.530137, 41.343194 ], "pop" : 10881, "state" : "PA" } +{ "_id" : "18445", "city" : "NEWFOUNDLAND", "loc" : [ -75.33840499999999, 41.304125 ], "pop" : 659, "state" : "PA" } +{ "_id" : "18446", "city" : "NICHOLSON", "loc" : [ -75.764073, 41.641198 ], "pop" : 3513, "state" : "PA" } +{ "_id" : "18447", "city" : "OLYPHANT", "loc" : [ -75.601502, 41.467709 ], "pop" : 7421, "state" : "PA" } +{ "_id" : "18451", "city" : "PAUPACK", "loc" : [ -75.23032000000001, 41.381197 ], "pop" : 887, "state" : "PA" } +{ "_id" : "18452", "city" : "PECKVILLE", "loc" : [ -75.589884, 41.482124 ], "pop" : 6252, "state" : "PA" } +{ "_id" : "18453", "city" : "PLEASANT MOUNT", "loc" : [ -75.398944, 41.732204 ], "pop" : 1232, "state" : "PA" } +{ "_id" : "18455", "city" : "PRESTON PARK", "loc" : [ -75.38314699999999, 41.867264 ], "pop" : 224, "state" : "PA" } +{ "_id" : "18456", "city" : "PROMPTON", "loc" : [ -75.32074900000001, 41.582031 ], "pop" : 552, "state" : "PA" } +{ "_id" : "18458", "city" : "SHOHOLA", "loc" : [ -74.917962, 41.418193 ], "pop" : 1586, "state" : "PA" } +{ "_id" : "18460", "city" : "SOUTH STERLING", "loc" : [ -75.381443, 41.271222 ], "pop" : 922, "state" : "PA" } +{ "_id" : "18461", "city" : "STARLIGHT", "loc" : [ -75.32123799999999, 41.925087 ], "pop" : 431, "state" : "PA" } +{ "_id" : "18462", "city" : "STARRUCCA", "loc" : [ -75.449001, 41.890739 ], "pop" : 333, "state" : "PA" } +{ "_id" : "18463", "city" : "STERLING", "loc" : [ -75.39446700000001, 41.341912 ], "pop" : 689, "state" : "PA" } +{ "_id" : "18464", "city" : "TAFTON", "loc" : [ -75.101598, 41.369445 ], "pop" : 2752, "state" : "PA" } +{ "_id" : "18465", "city" : "THOMPSON", "loc" : [ -75.534215, 41.83395 ], "pop" : 1277, "state" : "PA" } +{ "_id" : "18466", "city" : "TOBYHANNA", "loc" : [ -75.39178099999999, 41.183638 ], "pop" : 6668, "state" : "PA" } +{ "_id" : "18469", "city" : "TYLER HILL", "loc" : [ -75.154246, 41.670873 ], "pop" : 592, "state" : "PA" } +{ "_id" : "18470", "city" : "UNION DALE", "loc" : [ -75.546476, 41.707941 ], "pop" : 1325, "state" : "PA" } +{ "_id" : "18472", "city" : "WAYMART", "loc" : [ -75.40647800000001, 41.570276 ], "pop" : 3922, "state" : "PA" } +{ "_id" : "18503", "city" : "SCRANTON", "loc" : [ -75.664205, 41.409517 ], "pop" : 720, "state" : "PA" } +{ "_id" : "18504", "city" : "SCRANTON", "loc" : [ -75.686081, 41.412777 ], "pop" : 22279, "state" : "PA" } +{ "_id" : "18505", "city" : "SCRANTON", "loc" : [ -75.665738, 41.39145 ], "pop" : 21733, "state" : "PA" } +{ "_id" : "18507", "city" : "MOOSIC", "loc" : [ -75.71709300000001, 41.361492 ], "pop" : 5339, "state" : "PA" } +{ "_id" : "18508", "city" : "SCRANTON", "loc" : [ -75.66252900000001, 41.438917 ], "pop" : 13555, "state" : "PA" } +{ "_id" : "18509", "city" : "SCRANTON", "loc" : [ -75.64645400000001, 41.427353 ], "pop" : 15432, "state" : "PA" } +{ "_id" : "18510", "city" : "SCRANTON", "loc" : [ -75.648397, 41.408039 ], "pop" : 14306, "state" : "PA" } +{ "_id" : "18512", "city" : "DUNMORE", "loc" : [ -75.62294, 41.426184 ], "pop" : 14428, "state" : "PA" } +{ "_id" : "18517", "city" : "TAYLOR", "loc" : [ -75.71584799999999, 41.390442 ], "pop" : 5738, "state" : "PA" } +{ "_id" : "18518", "city" : "OLD FORGE", "loc" : [ -75.739075, 41.370076 ], "pop" : 8834, "state" : "PA" } +{ "_id" : "18519", "city" : "DICKSON CITY", "loc" : [ -75.624343, 41.462306 ], "pop" : 5012, "state" : "PA" } +{ "_id" : "18603", "city" : "BERWICK", "loc" : [ -76.244269, 41.066477 ], "pop" : 19977, "state" : "PA" } +{ "_id" : "18610", "city" : "BLAKESLEE", "loc" : [ -75.53430899999999, 41.048502 ], "pop" : 426, "state" : "PA" } +{ "_id" : "18612", "city" : "COLLEGE MISERICO", "loc" : [ -75.958911, 41.363762 ], "pop" : 13726, "state" : "PA" } +{ "_id" : "18614", "city" : "DUSHORE", "loc" : [ -76.402145, 41.523213 ], "pop" : 1739, "state" : "PA" } +{ "_id" : "18615", "city" : "FALLS", "loc" : [ -75.856004, 41.466677 ], "pop" : 2349, "state" : "PA" } +{ "_id" : "18616", "city" : "FORKSVILLE", "loc" : [ -76.60079, 41.526925 ], "pop" : 1080, "state" : "PA" } +{ "_id" : "18617", "city" : "GLEN LYON", "loc" : [ -76.074578, 41.174635 ], "pop" : 2082, "state" : "PA" } +{ "_id" : "18618", "city" : "HARVEYS LAKE", "loc" : [ -76.04506000000001, 41.359181 ], "pop" : 3404, "state" : "PA" } +{ "_id" : "18619", "city" : "HILLSGROVE", "loc" : [ -76.697914, 41.448159 ], "pop" : 337, "state" : "PA" } +{ "_id" : "18621", "city" : "HUNLOCK CREEK", "loc" : [ -76.087915, 41.245923 ], "pop" : 4207, "state" : "PA" } +{ "_id" : "18622", "city" : "HUNTINGTON MILLS", "loc" : [ -76.19734200000001, 41.200905 ], "pop" : 345, "state" : "PA" } +{ "_id" : "18623", "city" : "LACEYVILLE", "loc" : [ -76.142566, 41.66621 ], "pop" : 3195, "state" : "PA" } +{ "_id" : "18624", "city" : "LAKE HARMONY", "loc" : [ -75.633129, 41.05424 ], "pop" : 1203, "state" : "PA" } +{ "_id" : "18628", "city" : "LOPEZ", "loc" : [ -76.300206, 41.418002 ], "pop" : 600, "state" : "PA" } +{ "_id" : "18629", "city" : "MEHOOPANY", "loc" : [ -76.10346199999999, 41.558695 ], "pop" : 1630, "state" : "PA" } +{ "_id" : "18630", "city" : "MESHOPPEN", "loc" : [ -76.01546399999999, 41.639163 ], "pop" : 3307, "state" : "PA" } +{ "_id" : "18631", "city" : "MIFFLINVILLE", "loc" : [ -76.292396, 41.023473 ], "pop" : 2297, "state" : "PA" } +{ "_id" : "18632", "city" : "MILDRED", "loc" : [ -76.38312999999999, 41.479236 ], "pop" : 500, "state" : "PA" } +{ "_id" : "18634", "city" : "NANTICOKE", "loc" : [ -76.004419, 41.19634 ], "pop" : 14778, "state" : "PA" } +{ "_id" : "18635", "city" : "NESCOPECK", "loc" : [ -76.19808999999999, 41.046887 ], "pop" : 2723, "state" : "PA" } +{ "_id" : "18636", "city" : "NOXEN", "loc" : [ -76.045952, 41.418131 ], "pop" : 1653, "state" : "PA" } +{ "_id" : "18640", "city" : "PITTSTON", "loc" : [ -75.78849200000001, 41.317501 ], "pop" : 18888, "state" : "PA" } +{ "_id" : "18641", "city" : "AVOCA", "loc" : [ -75.74465499999999, 41.330857 ], "pop" : 6485, "state" : "PA" } +{ "_id" : "18642", "city" : "DURYEA", "loc" : [ -75.761104, 41.348557 ], "pop" : 4262, "state" : "PA" } +{ "_id" : "18643", "city" : "WEST PITTSTON", "loc" : [ -75.81665099999999, 41.337964 ], "pop" : 13853, "state" : "PA" } +{ "_id" : "18644", "city" : "WYOMING", "loc" : [ -75.854071, 41.319713 ], "pop" : 8126, "state" : "PA" } +{ "_id" : "18651", "city" : "PLYMOUTH", "loc" : [ -75.948064, 41.245798 ], "pop" : 11895, "state" : "PA" } +{ "_id" : "18655", "city" : "MOCANAQUA", "loc" : [ -76.167096, 41.176674 ], "pop" : 6324, "state" : "PA" } +{ "_id" : "18656", "city" : "SWEET VALLEY", "loc" : [ -76.13390699999999, 41.30663 ], "pop" : 3237, "state" : "PA" } +{ "_id" : "18657", "city" : "CENTER MORELAND", "loc" : [ -75.94104299999999, 41.550687 ], "pop" : 9921, "state" : "PA" } +{ "_id" : "18660", "city" : "WAPWALLOPEN", "loc" : [ -76.085729, 41.06797 ], "pop" : 1198, "state" : "PA" } +{ "_id" : "18661", "city" : "WHITE HAVEN", "loc" : [ -75.77149199999999, 41.079049 ], "pop" : 4435, "state" : "PA" } +{ "_id" : "18701", "city" : "WILKES BARRE", "loc" : [ -75.884063, 41.244892 ], "pop" : 4320, "state" : "PA" } +{ "_id" : "18702", "city" : "HANOVER TOWNSHIP", "loc" : [ -75.88255700000001, 41.236512 ], "pop" : 54119, "state" : "PA" } +{ "_id" : "18704", "city" : "KINGSTON", "loc" : [ -75.890338, 41.274223 ], "pop" : 33661, "state" : "PA" } +{ "_id" : "18705", "city" : "WILKES BARRE", "loc" : [ -75.845309, 41.268921 ], "pop" : 17504, "state" : "PA" } +{ "_id" : "18706", "city" : "ASHLEY", "loc" : [ -75.91815699999999, 41.206709 ], "pop" : 7980, "state" : "PA" } +{ "_id" : "18707", "city" : "MOUNTAIN TOP", "loc" : [ -75.937642, 41.134975 ], "pop" : 13244, "state" : "PA" } +{ "_id" : "18708", "city" : "SHAVERTOWN", "loc" : [ -75.97108, 41.299802 ], "pop" : 12656, "state" : "PA" } +{ "_id" : "18709", "city" : "LUZERNE", "loc" : [ -75.893475, 41.284257 ], "pop" : 3157, "state" : "PA" } +{ "_id" : "18801", "city" : "MONTROSE", "loc" : [ -75.88205499999999, 41.839584 ], "pop" : 6624, "state" : "PA" } +{ "_id" : "18810", "city" : "ATHENS", "loc" : [ -76.488855, 41.949002 ], "pop" : 7602, "state" : "PA" } +{ "_id" : "18812", "city" : "BRACKNEY", "loc" : [ -75.937527, 41.966614 ], "pop" : 1645, "state" : "PA" } +{ "_id" : "18817", "city" : "EAST SMITHFIELD", "loc" : [ -76.61720699999999, 41.863115 ], "pop" : 1520, "state" : "PA" } +{ "_id" : "18818", "city" : "FRIENDSVILLE", "loc" : [ -76.02569, 41.916445 ], "pop" : 1844, "state" : "PA" } +{ "_id" : "18821", "city" : "GREAT BEND", "loc" : [ -75.732742, 41.977513 ], "pop" : 1654, "state" : "PA" } +{ "_id" : "18822", "city" : "HALLSTEAD", "loc" : [ -75.782595, 41.959798 ], "pop" : 2970, "state" : "PA" } +{ "_id" : "18823", "city" : "HARFORD", "loc" : [ -75.67863199999999, 41.779891 ], "pop" : 1155, "state" : "PA" } +{ "_id" : "18824", "city" : "HOP BOTTOM", "loc" : [ -75.78965599999999, 41.693196 ], "pop" : 1088, "state" : "PA" } +{ "_id" : "18825", "city" : "JACKSON", "loc" : [ -75.60913600000001, 41.864881 ], "pop" : 668, "state" : "PA" } +{ "_id" : "18826", "city" : "KINGSLEY", "loc" : [ -75.783101, 41.765856 ], "pop" : 1159, "state" : "PA" } +{ "_id" : "18828", "city" : "LAWTON", "loc" : [ -76.09121399999999, 41.757294 ], "pop" : 15, "state" : "PA" } +{ "_id" : "18829", "city" : "LE RAYSVILLE", "loc" : [ -76.179604, 41.843415 ], "pop" : 1020, "state" : "PA" } +{ "_id" : "18830", "city" : "LITTLE MEADOWS", "loc" : [ -76.118472, 41.976593 ], "pop" : 750, "state" : "PA" } +{ "_id" : "18831", "city" : "MILAN", "loc" : [ -76.532777, 41.896555 ], "pop" : 328, "state" : "PA" } +{ "_id" : "18832", "city" : "MONROETON", "loc" : [ -76.500995, 41.699387 ], "pop" : 2332, "state" : "PA" } +{ "_id" : "18833", "city" : "NEW ALBANY", "loc" : [ -76.43983, 41.59867 ], "pop" : 1390, "state" : "PA" } +{ "_id" : "18834", "city" : "NEW MILFORD", "loc" : [ -75.717113, 41.866409 ], "pop" : 2684, "state" : "PA" } +{ "_id" : "18837", "city" : "ROME", "loc" : [ -76.301498, 41.863403 ], "pop" : 2053, "state" : "PA" } +{ "_id" : "18839", "city" : "RUSHVILLE", "loc" : [ -76.050955, 41.776893 ], "pop" : 1228, "state" : "PA" } +{ "_id" : "18840", "city" : "SAYRE", "loc" : [ -76.52175699999999, 41.984222 ], "pop" : 10320, "state" : "PA" } +{ "_id" : "18842", "city" : "SOUTH GIBSON", "loc" : [ -75.606723, 41.754373 ], "pop" : 402, "state" : "PA" } +{ "_id" : "18844", "city" : "SPRINGVILLE", "loc" : [ -75.902472, 41.714684 ], "pop" : 2003, "state" : "PA" } +{ "_id" : "18845", "city" : "STEVENSVILLE", "loc" : [ -76.171696, 41.771782 ], "pop" : 401, "state" : "PA" } +{ "_id" : "18846", "city" : "SUGAR RUN", "loc" : [ -76.25978499999999, 41.604057 ], "pop" : 1057, "state" : "PA" } +{ "_id" : "18847", "city" : "SUSQUEHANNA", "loc" : [ -75.586249, 41.948669 ], "pop" : 5137, "state" : "PA" } +{ "_id" : "18848", "city" : "TOWANDA", "loc" : [ -76.464527, 41.763758 ], "pop" : 7449, "state" : "PA" } +{ "_id" : "18850", "city" : "ULSTER", "loc" : [ -76.487574, 41.840809 ], "pop" : 2049, "state" : "PA" } +{ "_id" : "18851", "city" : "WARREN CENTER", "loc" : [ -76.196445, 41.939389 ], "pop" : 927, "state" : "PA" } +{ "_id" : "18853", "city" : "WYALUSING", "loc" : [ -76.27543300000001, 41.701499 ], "pop" : 3439, "state" : "PA" } +{ "_id" : "18854", "city" : "WYSOX", "loc" : [ -76.383397, 41.782621 ], "pop" : 2121, "state" : "PA" } +{ "_id" : "18901", "city" : "NEW BRITAIN", "loc" : [ -75.129987, 40.320391 ], "pop" : 33133, "state" : "PA" } +{ "_id" : "18913", "city" : "CARVERSVILLE", "loc" : [ -75.06312699999999, 40.39079 ], "pop" : 579, "state" : "PA" } +{ "_id" : "18914", "city" : "CHALFONT", "loc" : [ -75.214938, 40.289175 ], "pop" : 12838, "state" : "PA" } +{ "_id" : "18915", "city" : "COLMAR", "loc" : [ -75.26686100000001, 40.271814 ], "pop" : 2168, "state" : "PA" } +{ "_id" : "18917", "city" : "DUBLIN", "loc" : [ -75.204453, 40.371996 ], "pop" : 1985, "state" : "PA" } +{ "_id" : "18920", "city" : "ERWINNA", "loc" : [ -75.080372, 40.508689 ], "pop" : 573, "state" : "PA" } +{ "_id" : "18923", "city" : "FOUNTAINVILLE", "loc" : [ -75.153627, 40.336815 ], "pop" : 261, "state" : "PA" } +{ "_id" : "18925", "city" : "FURLONG", "loc" : [ -75.06494600000001, 40.294518 ], "pop" : 3789, "state" : "PA" } +{ "_id" : "18927", "city" : "HILLTOWN", "loc" : [ -75.27118, 40.34762 ], "pop" : 881, "state" : "PA" } +{ "_id" : "18929", "city" : "JAMISON", "loc" : [ -75.096093, 40.256599 ], "pop" : 3797, "state" : "PA" } +{ "_id" : "18930", "city" : "KINTNERSVILLE", "loc" : [ -75.211708, 40.531009 ], "pop" : 2997, "state" : "PA" } +{ "_id" : "18932", "city" : "LINE LEXINGTON", "loc" : [ -75.25553499999999, 40.288781 ], "pop" : 301, "state" : "PA" } +{ "_id" : "18933", "city" : "LUMBERVILLE", "loc" : [ -75.055166, 40.407103 ], "pop" : 382, "state" : "PA" } +{ "_id" : "18934", "city" : "MECHANICSVILLE", "loc" : [ -75.062962, 40.343821 ], "pop" : 429, "state" : "PA" } +{ "_id" : "18936", "city" : "MONTGOMERYVILLE", "loc" : [ -75.23464300000001, 40.251353 ], "pop" : 5520, "state" : "PA" } +{ "_id" : "18938", "city" : "NEW HOPE", "loc" : [ -74.983889, 40.355613 ], "pop" : 7111, "state" : "PA" } +{ "_id" : "18940", "city" : "GEORGE SCHOOL", "loc" : [ -74.94313, 40.245817 ], "pop" : 21946, "state" : "PA" } +{ "_id" : "18942", "city" : "OTTSVILLE", "loc" : [ -75.157009, 40.459239 ], "pop" : 2976, "state" : "PA" } +{ "_id" : "18944", "city" : "PERKASIE", "loc" : [ -75.264803, 40.376526 ], "pop" : 18235, "state" : "PA" } +{ "_id" : "18947", "city" : "PIPERSVILLE", "loc" : [ -75.107398, 40.4262 ], "pop" : 3856, "state" : "PA" } +{ "_id" : "18951", "city" : "QUAKERTOWN", "loc" : [ -75.350667, 40.4411 ], "pop" : 28546, "state" : "PA" } +{ "_id" : "18954", "city" : "RICHBORO", "loc" : [ -75.00293600000001, 40.216672 ], "pop" : 8006, "state" : "PA" } +{ "_id" : "18955", "city" : "RICHLANDTOWN", "loc" : [ -75.32192999999999, 40.472166 ], "pop" : 1199, "state" : "PA" } +{ "_id" : "18960", "city" : "SELLERSVILLE", "loc" : [ -75.31895299999999, 40.362024 ], "pop" : 8387, "state" : "PA" } +{ "_id" : "18964", "city" : "BETHTON", "loc" : [ -75.32133899999999, 40.312796 ], "pop" : 9350, "state" : "PA" } +{ "_id" : "18966", "city" : "HOLLAND", "loc" : [ -75.005994, 40.190212 ], "pop" : 38866, "state" : "PA" } +{ "_id" : "18969", "city" : "TELFORD", "loc" : [ -75.352001, 40.320478 ], "pop" : 10929, "state" : "PA" } +{ "_id" : "18972", "city" : "UPPER BLACK EDDY", "loc" : [ -75.12585799999999, 40.541093 ], "pop" : 3443, "state" : "PA" } +{ "_id" : "18974", "city" : "WARMINSTER", "loc" : [ -75.090513, 40.206676 ], "pop" : 37759, "state" : "PA" } +{ "_id" : "18976", "city" : "WARRINGTON", "loc" : [ -75.135392, 40.246438 ], "pop" : 13862, "state" : "PA" } +{ "_id" : "18977", "city" : "WASHINGTON CROSS", "loc" : [ -74.882859, 40.291906 ], "pop" : 2824, "state" : "PA" } +{ "_id" : "19001", "city" : "OGONTZ CAMPUS", "loc" : [ -75.128918, 40.128141 ], "pop" : 17302, "state" : "PA" } +{ "_id" : "19002", "city" : "MAPLE GLEN", "loc" : [ -75.207234, 40.166318 ], "pop" : 24133, "state" : "PA" } +{ "_id" : "19003", "city" : "ARDMORE", "loc" : [ -75.29665, 40.001971 ], "pop" : 12443, "state" : "PA" } +{ "_id" : "19004", "city" : "BALA CYNWYD", "loc" : [ -75.23421, 40.01179 ], "pop" : 9239, "state" : "PA" } +{ "_id" : "19006", "city" : "HUNTINGDON VALLE", "loc" : [ -75.05897899999999, 40.129686 ], "pop" : 19866, "state" : "PA" } +{ "_id" : "19007", "city" : "TULLYTOWN", "loc" : [ -74.86071800000001, 40.109174 ], "pop" : 22334, "state" : "PA" } +{ "_id" : "19008", "city" : "BROOMALL", "loc" : [ -75.360214, 39.974666 ], "pop" : 20432, "state" : "PA" } +{ "_id" : "19010", "city" : "BRYN MAWR", "loc" : [ -75.329487, 40.023618 ], "pop" : 21826, "state" : "PA" } +{ "_id" : "19012", "city" : "CHELTENHAM", "loc" : [ -75.10477400000001, 40.060327 ], "pop" : 6912, "state" : "PA" } +{ "_id" : "19013", "city" : "CHESTER", "loc" : [ -75.37468699999999, 39.849817 ], "pop" : 49144, "state" : "PA" } +{ "_id" : "19014", "city" : "ASTON", "loc" : [ -75.43321, 39.864282 ], "pop" : 18171, "state" : "PA" } +{ "_id" : "19015", "city" : "BROOKHAVEN", "loc" : [ -75.38848299999999, 39.865355 ], "pop" : 17321, "state" : "PA" } +{ "_id" : "19018", "city" : "PRIMOS SECANE", "loc" : [ -75.299592, 39.923579 ], "pop" : 23885, "state" : "PA" } +{ "_id" : "19020", "city" : "BENSALEM", "loc" : [ -74.937753, 40.110881 ], "pop" : 51884, "state" : "PA" } +{ "_id" : "19021", "city" : "CROYDON", "loc" : [ -74.89907700000001, 40.093322 ], "pop" : 10198, "state" : "PA" } +{ "_id" : "19022", "city" : "CRUM LYNNE", "loc" : [ -75.337397, 39.868457 ], "pop" : 769, "state" : "PA" } +{ "_id" : "19023", "city" : "COLLINGDALE", "loc" : [ -75.266226, 39.916732 ], "pop" : 23274, "state" : "PA" } +{ "_id" : "19025", "city" : "DRESHER", "loc" : [ -75.162379, 40.143141 ], "pop" : 4089, "state" : "PA" } +{ "_id" : "19026", "city" : "PILGRIM GARDENS", "loc" : [ -75.303479, 39.949197 ], "pop" : 32559, "state" : "PA" } +{ "_id" : "19029", "city" : "LESTER", "loc" : [ -75.293521, 39.866864 ], "pop" : 4440, "state" : "PA" } +{ "_id" : "19030", "city" : "FAIRLESS HILLS", "loc" : [ -74.851923, 40.174822 ], "pop" : 13433, "state" : "PA" } +{ "_id" : "19031", "city" : "FLOURTOWN", "loc" : [ -75.21147999999999, 40.106774 ], "pop" : 4284, "state" : "PA" } +{ "_id" : "19032", "city" : "FOLCROFT", "loc" : [ -75.282117, 39.890508 ], "pop" : 7399, "state" : "PA" } +{ "_id" : "19033", "city" : "FOLSOM", "loc" : [ -75.329567, 39.890129 ], "pop" : 7677, "state" : "PA" } +{ "_id" : "19034", "city" : "FORT WASHINGTON", "loc" : [ -75.202175, 40.138592 ], "pop" : 6787, "state" : "PA" } +{ "_id" : "19035", "city" : "GLADWYNE", "loc" : [ -75.282082, 40.045118 ], "pop" : 3742, "state" : "PA" } +{ "_id" : "19036", "city" : "GLENOLDEN", "loc" : [ -75.29455900000001, 39.904848 ], "pop" : 14390, "state" : "PA" } +{ "_id" : "19038", "city" : "GLENSIDE", "loc" : [ -75.15496400000001, 40.10959 ], "pop" : 23067, "state" : "PA" } +{ "_id" : "19040", "city" : "HATBORO", "loc" : [ -75.10718199999999, 40.178547 ], "pop" : 21765, "state" : "PA" } +{ "_id" : "19041", "city" : "HAVERFORD", "loc" : [ -75.312116, 40.009739 ], "pop" : 6560, "state" : "PA" } +{ "_id" : "19043", "city" : "HOLMES", "loc" : [ -75.308674, 39.900284 ], "pop" : 2747, "state" : "PA" } +{ "_id" : "19044", "city" : "HORSHAM", "loc" : [ -75.147932, 40.182057 ], "pop" : 15131, "state" : "PA" } +{ "_id" : "19046", "city" : "MEADOWBROOK", "loc" : [ -75.117273, 40.100477 ], "pop" : 14402, "state" : "PA" } +{ "_id" : "19047", "city" : "PENNDEL", "loc" : [ -74.91510100000001, 40.175055 ], "pop" : 34108, "state" : "PA" } +{ "_id" : "19050", "city" : "YEADON", "loc" : [ -75.264872, 39.93779 ], "pop" : 30411, "state" : "PA" } +{ "_id" : "19053", "city" : "FEASTERVILLE TRE", "loc" : [ -74.98375799999999, 40.151188 ], "pop" : 24877, "state" : "PA" } +{ "_id" : "19054", "city" : "LEVITTOWN", "loc" : [ -74.823138, 40.168142 ], "pop" : 16390, "state" : "PA" } +{ "_id" : "19055", "city" : "LEVITTOWN", "loc" : [ -74.83714000000001, 40.148329 ], "pop" : 14924, "state" : "PA" } +{ "_id" : "19056", "city" : "LEVITTOWN", "loc" : [ -74.882632, 40.151861 ], "pop" : 15227, "state" : "PA" } +{ "_id" : "19057", "city" : "LEVITTOWN", "loc" : [ -74.861366, 40.143359 ], "pop" : 17014, "state" : "PA" } +{ "_id" : "19061", "city" : "BOOTHWYN", "loc" : [ -75.44830899999999, 39.833934 ], "pop" : 21328, "state" : "PA" } +{ "_id" : "19063", "city" : "GLEN RIDDLE LIMA", "loc" : [ -75.40722599999999, 39.915562 ], "pop" : 36385, "state" : "PA" } +{ "_id" : "19064", "city" : "SPRINGFIELD", "loc" : [ -75.333786, 39.929599 ], "pop" : 25179, "state" : "PA" } +{ "_id" : "19066", "city" : "MERION STATION", "loc" : [ -75.250302, 40.003043 ], "pop" : 5633, "state" : "PA" } +{ "_id" : "19067", "city" : "YARDLEY", "loc" : [ -74.822153, 40.212064 ], "pop" : 47492, "state" : "PA" } +{ "_id" : "19070", "city" : "MORTON", "loc" : [ -75.323785, 39.906292 ], "pop" : 6517, "state" : "PA" } +{ "_id" : "19072", "city" : "NARBERTH", "loc" : [ -75.2594, 40.01768 ], "pop" : 9846, "state" : "PA" } +{ "_id" : "19073", "city" : "NEWTOWN SQUARE", "loc" : [ -75.406997, 39.986292 ], "pop" : 15024, "state" : "PA" } +{ "_id" : "19074", "city" : "NORWOOD", "loc" : [ -75.297247, 39.887026 ], "pop" : 6189, "state" : "PA" } +{ "_id" : "19075", "city" : "ORELAND", "loc" : [ -75.18685000000001, 40.113197 ], "pop" : 7397, "state" : "PA" } +{ "_id" : "19076", "city" : "PROSPECT PARK", "loc" : [ -75.308165, 39.885737 ], "pop" : 6769, "state" : "PA" } +{ "_id" : "19078", "city" : "RIDLEY PARK", "loc" : [ -75.321517, 39.878411 ], "pop" : 12624, "state" : "PA" } +{ "_id" : "19079", "city" : "SHARON HILL", "loc" : [ -75.269524, 39.903511 ], "pop" : 9893, "state" : "PA" } +{ "_id" : "19081", "city" : "SWARTHMORE", "loc" : [ -75.34742799999999, 39.896724 ], "pop" : 9885, "state" : "PA" } +{ "_id" : "19082", "city" : "UPPER DARBY", "loc" : [ -75.268128, 39.95785 ], "pop" : 36400, "state" : "PA" } +{ "_id" : "19083", "city" : "HAVERTOWN", "loc" : [ -75.310613, 39.97736 ], "pop" : 36702, "state" : "PA" } +{ "_id" : "19085", "city" : "VILLANOVA", "loc" : [ -75.345866, 40.039875 ], "pop" : 7034, "state" : "PA" } +{ "_id" : "19086", "city" : "WALLINGFORD", "loc" : [ -75.372131, 39.887054 ], "pop" : 11005, "state" : "PA" } +{ "_id" : "19087", "city" : "RADNOR", "loc" : [ -75.40416, 40.059554 ], "pop" : 30671, "state" : "PA" } +{ "_id" : "19090", "city" : "WILLOW GROVE NAS", "loc" : [ -75.121297, 40.146725 ], "pop" : 19558, "state" : "PA" } +{ "_id" : "19094", "city" : "WOODLYN", "loc" : [ -75.34630900000001, 39.875993 ], "pop" : 5186, "state" : "PA" } +{ "_id" : "19095", "city" : "WYNCOTE", "loc" : [ -75.152417, 40.086673 ], "pop" : 6164, "state" : "PA" } +{ "_id" : "19096", "city" : "WYNNEWOOD", "loc" : [ -75.27598399999999, 40 ], "pop" : 8285, "state" : "PA" } +{ "_id" : "19102", "city" : "PHILADELPHIA", "loc" : [ -75.16610900000001, 39.948908 ], "pop" : 3623, "state" : "PA" } +{ "_id" : "19103", "city" : "PHILADELPHIA", "loc" : [ -75.174136, 39.951285 ], "pop" : 17665, "state" : "PA" } +{ "_id" : "19104", "city" : "PHILADELPHIA", "loc" : [ -75.202445, 39.959732 ], "pop" : 51295, "state" : "PA" } +{ "_id" : "19106", "city" : "PHILADELPHIA", "loc" : [ -75.147271, 39.94742 ], "pop" : 7043, "state" : "PA" } +{ "_id" : "19107", "city" : "PHILADELPHIA", "loc" : [ -75.159339, 39.94867 ], "pop" : 9634, "state" : "PA" } +{ "_id" : "19111", "city" : "PHILADELPHIA", "loc" : [ -75.08179199999999, 40.059635 ], "pop" : 61416, "state" : "PA" } +{ "_id" : "19112", "city" : "PHILADELPHIA", "loc" : [ -75.178207, 39.889252 ], "pop" : 4516, "state" : "PA" } +{ "_id" : "19113", "city" : "PHILADELPHIA", "loc" : [ -75.27519599999999, 39.864998 ], "pop" : 0, "state" : "PA" } +{ "_id" : "19114", "city" : "PHILADELPHIA", "loc" : [ -74.999032, 40.063356 ], "pop" : 31199, "state" : "PA" } +{ "_id" : "19115", "city" : "PHILADELPHIA", "loc" : [ -75.04103600000001, 40.090286 ], "pop" : 31339, "state" : "PA" } +{ "_id" : "19116", "city" : "PHILADELPHIA", "loc" : [ -75.019803, 40.116599 ], "pop" : 32898, "state" : "PA" } +{ "_id" : "19117", "city" : "ELKINS PARK", "loc" : [ -75.127669, 40.075798 ], "pop" : 12813, "state" : "PA" } +{ "_id" : "19118", "city" : "PHILADELPHIA", "loc" : [ -75.20059999999999, 40.081247 ], "pop" : 19549, "state" : "PA" } +{ "_id" : "19119", "city" : "PHILADELPHIA", "loc" : [ -75.186564, 40.054681 ], "pop" : 29935, "state" : "PA" } +{ "_id" : "19120", "city" : "PHILADELPHIA", "loc" : [ -75.121256, 40.034254 ], "pop" : 63223, "state" : "PA" } +{ "_id" : "19121", "city" : "PHILADELPHIA", "loc" : [ -75.17400499999999, 39.981085 ], "pop" : 46705, "state" : "PA" } +{ "_id" : "19122", "city" : "PHILADELPHIA", "loc" : [ -75.145882, 39.978014 ], "pop" : 21177, "state" : "PA" } +{ "_id" : "19123", "city" : "PHILADELPHIA", "loc" : [ -75.15096800000001, 39.965975 ], "pop" : 12270, "state" : "PA" } +{ "_id" : "19124", "city" : "PHILADELPHIA", "loc" : [ -75.08952600000001, 40.017798 ], "pop" : 60009, "state" : "PA" } +{ "_id" : "19125", "city" : "PHILADELPHIA", "loc" : [ -75.12615599999999, 39.978751 ], "pop" : 24521, "state" : "PA" } +{ "_id" : "19126", "city" : "PHILADELPHIA", "loc" : [ -75.137854, 40.056839 ], "pop" : 22000, "state" : "PA" } +{ "_id" : "19127", "city" : "PHILADELPHIA", "loc" : [ -75.22416699999999, 40.027512 ], "pop" : 6028, "state" : "PA" } +{ "_id" : "19128", "city" : "PHILADELPHIA", "loc" : [ -75.223084, 40.040247 ], "pop" : 36845, "state" : "PA" } +{ "_id" : "19129", "city" : "PHILADELPHIA", "loc" : [ -75.186149, 40.011816 ], "pop" : 13430, "state" : "PA" } +{ "_id" : "19130", "city" : "PHILADELPHIA", "loc" : [ -75.173467, 39.967677 ], "pop" : 21544, "state" : "PA" } +{ "_id" : "19131", "city" : "PHILADELPHIA", "loc" : [ -75.22822600000001, 39.98447 ], "pop" : 48270, "state" : "PA" } +{ "_id" : "19132", "city" : "PHILADELPHIA", "loc" : [ -75.16982, 39.995393 ], "pop" : 49011, "state" : "PA" } +{ "_id" : "19133", "city" : "PHILADELPHIA", "loc" : [ -75.141505, 39.992467 ], "pop" : 32608, "state" : "PA" } +{ "_id" : "19134", "city" : "PHILADELPHIA", "loc" : [ -75.11328399999999, 39.99252 ], "pop" : 58607, "state" : "PA" } +{ "_id" : "19135", "city" : "PHILADELPHIA", "loc" : [ -75.051827, 40.024694 ], "pop" : 32188, "state" : "PA" } +{ "_id" : "19136", "city" : "PHILADELPHIA", "loc" : [ -75.024388, 40.042159 ], "pop" : 40682, "state" : "PA" } +{ "_id" : "19137", "city" : "PHILADELPHIA", "loc" : [ -75.072654, 40.000849 ], "pop" : 8395, "state" : "PA" } +{ "_id" : "19138", "city" : "PHILADELPHIA", "loc" : [ -75.156898, 40.05683 ], "pop" : 37458, "state" : "PA" } +{ "_id" : "19139", "city" : "PHILADELPHIA", "loc" : [ -75.230301, 39.961166 ], "pop" : 48467, "state" : "PA" } +{ "_id" : "19140", "city" : "PHILADELPHIA", "loc" : [ -75.14562599999999, 40.011771 ], "pop" : 62864, "state" : "PA" } +{ "_id" : "19141", "city" : "PHILADELPHIA", "loc" : [ -75.14510900000001, 40.036473 ], "pop" : 38546, "state" : "PA" } +{ "_id" : "19142", "city" : "PHILADELPHIA", "loc" : [ -75.233796, 39.922332 ], "pop" : 29171, "state" : "PA" } +{ "_id" : "19143", "city" : "PHILADELPHIA", "loc" : [ -75.228819, 39.944815 ], "pop" : 80454, "state" : "PA" } +{ "_id" : "19144", "city" : "PHILADELPHIA", "loc" : [ -75.17309899999999, 40.033773 ], "pop" : 46612, "state" : "PA" } +{ "_id" : "19145", "city" : "PHILADELPHIA", "loc" : [ -75.181194, 39.922724 ], "pop" : 52538, "state" : "PA" } +{ "_id" : "19146", "city" : "PHILADELPHIA", "loc" : [ -75.17936400000001, 39.937949 ], "pop" : 38870, "state" : "PA" } +{ "_id" : "19147", "city" : "PHILADELPHIA", "loc" : [ -75.156324, 39.936175 ], "pop" : 34634, "state" : "PA" } +{ "_id" : "19148", "city" : "PHILADELPHIA", "loc" : [ -75.159538, 39.92068 ], "pop" : 49685, "state" : "PA" } +{ "_id" : "19149", "city" : "PHILADELPHIA", "loc" : [ -75.066374, 40.036915 ], "pop" : 47535, "state" : "PA" } +{ "_id" : "19150", "city" : "PHILADELPHIA", "loc" : [ -75.170621, 40.07262 ], "pop" : 27609, "state" : "PA" } +{ "_id" : "19151", "city" : "PHILADELPHIA", "loc" : [ -75.254492, 39.977199 ], "pop" : 36265, "state" : "PA" } +{ "_id" : "19152", "city" : "PHILADELPHIA", "loc" : [ -75.047079, 40.060571 ], "pop" : 31225, "state" : "PA" } +{ "_id" : "19153", "city" : "PHILADELPHIA", "loc" : [ -75.24443100000001, 39.905512 ], "pop" : 13375, "state" : "PA" } +{ "_id" : "19154", "city" : "PHILADELPHIA", "loc" : [ -74.97805200000001, 40.089738 ], "pop" : 38023, "state" : "PA" } +{ "_id" : "19301", "city" : "PAOLI", "loc" : [ -75.482702, 40.04259 ], "pop" : 6969, "state" : "PA" } +{ "_id" : "19310", "city" : "ATGLEN", "loc" : [ -75.970343, 39.945782 ], "pop" : 2318, "state" : "PA" } +{ "_id" : "19311", "city" : "AVONDALE", "loc" : [ -75.768694, 39.821904 ], "pop" : 4161, "state" : "PA" } +{ "_id" : "19312", "city" : "BERWYN", "loc" : [ -75.447457, 40.041184 ], "pop" : 9482, "state" : "PA" } +{ "_id" : "19317", "city" : "CHADDS FORD", "loc" : [ -75.588515, 39.864769 ], "pop" : 4522, "state" : "PA" } +{ "_id" : "19319", "city" : "CHEYNEY", "loc" : [ -75.548738, 39.917496 ], "pop" : 198, "state" : "PA" } +{ "_id" : "19320", "city" : "COATESVILLE", "loc" : [ -75.825299, 39.984313 ], "pop" : 39595, "state" : "PA" } +{ "_id" : "19330", "city" : "COCHRANVILLE", "loc" : [ -75.921381, 39.875686 ], "pop" : 3425, "state" : "PA" } +{ "_id" : "19333", "city" : "DEVON", "loc" : [ -75.422691, 40.045181 ], "pop" : 6290, "state" : "PA" } +{ "_id" : "19335", "city" : "DOWNINGTOWN", "loc" : [ -75.718261, 40.016078 ], "pop" : 35056, "state" : "PA" } +{ "_id" : "19341", "city" : "EXTON", "loc" : [ -75.643196, 40.046817 ], "pop" : 12495, "state" : "PA" } +{ "_id" : "19342", "city" : "GLEN MILLS", "loc" : [ -75.50487200000001, 39.901515 ], "pop" : 11632, "state" : "PA" } +{ "_id" : "19343", "city" : "GLENMOORE", "loc" : [ -75.771103, 40.084602 ], "pop" : 6959, "state" : "PA" } +{ "_id" : "19344", "city" : "HONEY BROOK", "loc" : [ -75.88432, 40.083227 ], "pop" : 8615, "state" : "PA" } +{ "_id" : "19346", "city" : "KELTON", "loc" : [ -75.875827, 39.795501 ], "pop" : 816, "state" : "PA" } +{ "_id" : "19348", "city" : "KENNETT SQUARE", "loc" : [ -75.70001999999999, 39.855033 ], "pop" : 16663, "state" : "PA" } +{ "_id" : "19350", "city" : "LANDENBERG", "loc" : [ -75.78070700000001, 39.769558 ], "pop" : 4787, "state" : "PA" } +{ "_id" : "19352", "city" : "LINCOLN UNIVERSI", "loc" : [ -75.881784, 39.780905 ], "pop" : 6834, "state" : "PA" } +{ "_id" : "19355", "city" : "FRAZER", "loc" : [ -75.53302100000001, 40.037123 ], "pop" : 21709, "state" : "PA" } +{ "_id" : "19362", "city" : "NOTTINGHAM", "loc" : [ -76.035551, 39.74411 ], "pop" : 2814, "state" : "PA" } +{ "_id" : "19363", "city" : "OXFORD", "loc" : [ -75.981522, 39.782704 ], "pop" : 11545, "state" : "PA" } +{ "_id" : "19365", "city" : "PARKESBURG", "loc" : [ -75.926041, 39.965388 ], "pop" : 5420, "state" : "PA" } +{ "_id" : "19372", "city" : "THORNDALE", "loc" : [ -75.76285900000001, 40.000127 ], "pop" : 1712, "state" : "PA" } +{ "_id" : "19373", "city" : "THORNTON", "loc" : [ -75.531344, 39.904127 ], "pop" : 2305, "state" : "PA" } +{ "_id" : "19374", "city" : "TOUGHKENAMON", "loc" : [ -75.782533, 39.825117 ], "pop" : 1045, "state" : "PA" } +{ "_id" : "19380", "city" : "WEST CHESTER", "loc" : [ -75.596231, 39.984458 ], "pop" : 40656, "state" : "PA" } +{ "_id" : "19382", "city" : "WEST CHESTER", "loc" : [ -75.58819699999999, 39.944081 ], "pop" : 44164, "state" : "PA" } +{ "_id" : "19390", "city" : "WEST GROVE", "loc" : [ -75.837374, 39.825314 ], "pop" : 7248, "state" : "PA" } +{ "_id" : "19401", "city" : "NORRISTOWN", "loc" : [ -75.33044599999999, 40.124464 ], "pop" : 46735, "state" : "PA" } +{ "_id" : "19403", "city" : "EAGLEVILLE", "loc" : [ -75.38467199999999, 40.14335 ], "pop" : 39184, "state" : "PA" } +{ "_id" : "19405", "city" : "BRIDGEPORT", "loc" : [ -75.340234, 40.103042 ], "pop" : 5163, "state" : "PA" } +{ "_id" : "19406", "city" : "KING OF PRUSSIA", "loc" : [ -75.373706, 40.095581 ], "pop" : 21049, "state" : "PA" } +{ "_id" : "19422", "city" : "PENLLYN", "loc" : [ -75.279656, 40.15939 ], "pop" : 16645, "state" : "PA" } +{ "_id" : "19425", "city" : "CHESTER SPRINGS", "loc" : [ -75.639769, 40.097781 ], "pop" : 4413, "state" : "PA" } +{ "_id" : "19426", "city" : "COLLEGEVILLE", "loc" : [ -75.448762, 40.189277 ], "pop" : 16453, "state" : "PA" } +{ "_id" : "19428", "city" : "WEST CONSHOHOCKE", "loc" : [ -75.301332, 40.079848 ], "pop" : 15924, "state" : "PA" } +{ "_id" : "19435", "city" : "FREDERICK", "loc" : [ -75.531975, 40.299924 ], "pop" : 728, "state" : "PA" } +{ "_id" : "19436", "city" : "GWYNEDD", "loc" : [ -75.25074600000001, 40.202089 ], "pop" : 540, "state" : "PA" } +{ "_id" : "19438", "city" : "HARLEYSVILLE", "loc" : [ -75.388335, 40.265922 ], "pop" : 16027, "state" : "PA" } +{ "_id" : "19440", "city" : "HATFIELD", "loc" : [ -75.297507, 40.277826 ], "pop" : 16686, "state" : "PA" } +{ "_id" : "19444", "city" : "LAFAYETTE HILL", "loc" : [ -75.260052, 40.089597 ], "pop" : 8312, "state" : "PA" } +{ "_id" : "19446", "city" : "LANSDALE", "loc" : [ -75.295512, 40.237776 ], "pop" : 41034, "state" : "PA" } +{ "_id" : "19453", "city" : "MONT CLARE", "loc" : [ -75.499931, 40.13642 ], "pop" : 1749, "state" : "PA" } +{ "_id" : "19454", "city" : "NORTH WALES", "loc" : [ -75.256483, 40.216593 ], "pop" : 14886, "state" : "PA" } +{ "_id" : "19460", "city" : "PHOENIXVILLE", "loc" : [ -75.527192, 40.126704 ], "pop" : 30460, "state" : "PA" } +{ "_id" : "19462", "city" : "PLYMOUTH MEETING", "loc" : [ -75.27955900000001, 40.107735 ], "pop" : 5206, "state" : "PA" } +{ "_id" : "19464", "city" : "SANATOGA", "loc" : [ -75.639256, 40.242989 ], "pop" : 53017, "state" : "PA" } +{ "_id" : "19468", "city" : "LIMERICK", "loc" : [ -75.530548, 40.19286 ], "pop" : 13825, "state" : "PA" } +{ "_id" : "19473", "city" : "SCHWENKSVILLE", "loc" : [ -75.460155, 40.247087 ], "pop" : 13139, "state" : "PA" } +{ "_id" : "19475", "city" : "SPRING CITY", "loc" : [ -75.56968999999999, 40.176477 ], "pop" : 7988, "state" : "PA" } +{ "_id" : "19477", "city" : "SPRING HOUSE", "loc" : [ -75.23750099999999, 40.186954 ], "pop" : 2129, "state" : "PA" } +{ "_id" : "19492", "city" : "ZIEGLERSVILLE", "loc" : [ -75.485462, 40.281673 ], "pop" : 290, "state" : "PA" } +{ "_id" : "19501", "city" : "ADAMSTOWN", "loc" : [ -76.05654199999999, 40.242992 ], "pop" : 1108, "state" : "PA" } +{ "_id" : "19503", "city" : "BALLY", "loc" : [ -75.58748300000001, 40.400557 ], "pop" : 973, "state" : "PA" } +{ "_id" : "19504", "city" : "BARTO", "loc" : [ -75.574889, 40.381501 ], "pop" : 2509, "state" : "PA" } +{ "_id" : "19505", "city" : "BECHTELSVILLE", "loc" : [ -75.62570100000001, 40.379454 ], "pop" : 3640, "state" : "PA" } +{ "_id" : "19506", "city" : "BERNVILLE", "loc" : [ -76.12473199999999, 40.455061 ], "pop" : 6245, "state" : "PA" } +{ "_id" : "19507", "city" : "BETHEL", "loc" : [ -76.274209, 40.480834 ], "pop" : 3523, "state" : "PA" } +{ "_id" : "19508", "city" : "BIRDSBORO", "loc" : [ -75.834373, 40.256304 ], "pop" : 15266, "state" : "PA" } +{ "_id" : "19510", "city" : "BLANDON", "loc" : [ -75.883681, 40.443492 ], "pop" : 2663, "state" : "PA" } +{ "_id" : "19512", "city" : "BOYERTOWN", "loc" : [ -75.66036800000001, 40.333905 ], "pop" : 17139, "state" : "PA" } +{ "_id" : "19518", "city" : "DOUGLASSVILLE", "loc" : [ -75.739673, 40.270876 ], "pop" : 7852, "state" : "PA" } +{ "_id" : "19520", "city" : "ELVERSON", "loc" : [ -75.786563, 40.156781 ], "pop" : 4592, "state" : "PA" } +{ "_id" : "19522", "city" : "EVANSVILLE", "loc" : [ -75.81440000000001, 40.446766 ], "pop" : 11505, "state" : "PA" } +{ "_id" : "19525", "city" : "GILBERTSVILLE", "loc" : [ -75.595296, 40.305941 ], "pop" : 7250, "state" : "PA" } +{ "_id" : "19526", "city" : "HAMBURG", "loc" : [ -75.98736100000001, 40.548799 ], "pop" : 9959, "state" : "PA" } +{ "_id" : "19529", "city" : "KEMPTON", "loc" : [ -75.85127, 40.632794 ], "pop" : 2387, "state" : "PA" } +{ "_id" : "19530", "city" : "KUTZTOWN", "loc" : [ -75.777395, 40.521354 ], "pop" : 13345, "state" : "PA" } +{ "_id" : "19533", "city" : "LEESPORT", "loc" : [ -75.994421, 40.415216 ], "pop" : 6199, "state" : "PA" } +{ "_id" : "19534", "city" : "LENHARTSVILLE", "loc" : [ -75.850002, 40.575284 ], "pop" : 1840, "state" : "PA" } +{ "_id" : "19539", "city" : "MERTZTOWN", "loc" : [ -75.687202, 40.499183 ], "pop" : 4058, "state" : "PA" } +{ "_id" : "19540", "city" : "MOHNTON", "loc" : [ -75.98332000000001, 40.258442 ], "pop" : 8402, "state" : "PA" } +{ "_id" : "19541", "city" : "MOHRSVILLE", "loc" : [ -76.012491, 40.478307 ], "pop" : 3473, "state" : "PA" } +{ "_id" : "19543", "city" : "MORGANTOWN", "loc" : [ -75.89980199999999, 40.155248 ], "pop" : 2121, "state" : "PA" } +{ "_id" : "19547", "city" : "OLEY", "loc" : [ -75.77057499999999, 40.383312 ], "pop" : 3949, "state" : "PA" } +{ "_id" : "19549", "city" : "PORT CLINTON", "loc" : [ -76.026652, 40.581787 ], "pop" : 328, "state" : "PA" } +{ "_id" : "19551", "city" : "ROBESONIA", "loc" : [ -76.13659, 40.355281 ], "pop" : 5310, "state" : "PA" } +{ "_id" : "19555", "city" : "SHOEMAKERSVILLE", "loc" : [ -75.960313, 40.495495 ], "pop" : 3947, "state" : "PA" } +{ "_id" : "19560", "city" : "TEMPLE", "loc" : [ -75.904582, 40.402504 ], "pop" : 7503, "state" : "PA" } +{ "_id" : "19562", "city" : "TOPTON", "loc" : [ -75.701528, 40.502941 ], "pop" : 1987, "state" : "PA" } +{ "_id" : "19565", "city" : "WERNERSVILLE", "loc" : [ -76.09014000000001, 40.329289 ], "pop" : 5056, "state" : "PA" } +{ "_id" : "19567", "city" : "WOMELSDORF", "loc" : [ -76.198511, 40.374333 ], "pop" : 4034, "state" : "PA" } +{ "_id" : "19601", "city" : "READING", "loc" : [ -75.935132, 40.346621 ], "pop" : 29968, "state" : "PA" } +{ "_id" : "19602", "city" : "READING", "loc" : [ -75.919229, 40.330604 ], "pop" : 16303, "state" : "PA" } +{ "_id" : "19604", "city" : "READING", "loc" : [ -75.91426199999999, 40.350721 ], "pop" : 22987, "state" : "PA" } +{ "_id" : "19605", "city" : "READING", "loc" : [ -75.93276899999999, 40.38859 ], "pop" : 13878, "state" : "PA" } +{ "_id" : "19606", "city" : "MOUNT PENN", "loc" : [ -75.868178, 40.325109 ], "pop" : 27732, "state" : "PA" } +{ "_id" : "19607", "city" : "SHILLINGTON", "loc" : [ -75.953103, 40.299696 ], "pop" : 19281, "state" : "PA" } +{ "_id" : "19608", "city" : "SINKING SPRING", "loc" : [ -76.024086, 40.31449 ], "pop" : 13037, "state" : "PA" } +{ "_id" : "19609", "city" : "WEST LAWN", "loc" : [ -75.995347, 40.325778 ], "pop" : 9845, "state" : "PA" } +{ "_id" : "19610", "city" : "WYOMISSING", "loc" : [ -75.976382, 40.333478 ], "pop" : 12394, "state" : "PA" } +{ "_id" : "19611", "city" : "READING", "loc" : [ -75.944188, 40.324989 ], "pop" : 10763, "state" : "PA" } +{ "_id" : "19701", "city" : "BEAR", "loc" : [ -75.674729, 39.610187 ], "pop" : 21384, "state" : "DE" } +{ "_id" : "19702", "city" : "NEWARK", "loc" : [ -75.69933899999999, 39.634869 ], "pop" : 30402, "state" : "DE" } +{ "_id" : "19703", "city" : "CLAYMONT", "loc" : [ -75.46494, 39.804432 ], "pop" : 16699, "state" : "DE" } +{ "_id" : "19707", "city" : "HOCKESSIN", "loc" : [ -75.688873, 39.77604 ], "pop" : 13149, "state" : "DE" } +{ "_id" : "19709", "city" : "MIDDLETOWN", "loc" : [ -75.683183, 39.481535 ], "pop" : 10243, "state" : "DE" } +{ "_id" : "19711", "city" : "NEWARK", "loc" : [ -75.737534, 39.701129 ], "pop" : 50573, "state" : "DE" } +{ "_id" : "19713", "city" : "NEWARK", "loc" : [ -75.715101, 39.669881 ], "pop" : 30699, "state" : "DE" } +{ "_id" : "19720", "city" : "MANOR", "loc" : [ -75.589938, 39.67703 ], "pop" : 46906, "state" : "DE" } +{ "_id" : "19734", "city" : "TOWNSEND", "loc" : [ -75.683368, 39.381882 ], "pop" : 4512, "state" : "DE" } +{ "_id" : "19801", "city" : "WILMINGTON", "loc" : [ -75.54965799999999, 39.737752 ], "pop" : 15151, "state" : "DE" } +{ "_id" : "19802", "city" : "WILMINGTON", "loc" : [ -75.534041, 39.75638 ], "pop" : 27411, "state" : "DE" } +{ "_id" : "19803", "city" : "TALLEYVILLE", "loc" : [ -75.531076, 39.793236 ], "pop" : 20901, "state" : "DE" } +{ "_id" : "19804", "city" : "NEWPORT", "loc" : [ -75.612815, 39.720854 ], "pop" : 18306, "state" : "DE" } +{ "_id" : "19805", "city" : "WILMINGTON", "loc" : [ -75.582724, 39.743375 ], "pop" : 40087, "state" : "DE" } +{ "_id" : "19806", "city" : "WILMINGTON", "loc" : [ -75.563503, 39.757076 ], "pop" : 9645, "state" : "DE" } +{ "_id" : "19807", "city" : "GREENVILLE", "loc" : [ -75.60720499999999, 39.782206 ], "pop" : 7176, "state" : "DE" } +{ "_id" : "19808", "city" : "MARSHALLTON", "loc" : [ -75.66389100000001, 39.734737 ], "pop" : 34260, "state" : "DE" } +{ "_id" : "19809", "city" : "EDGEMOOR", "loc" : [ -75.494592, 39.771913 ], "pop" : 14285, "state" : "DE" } +{ "_id" : "19810", "city" : "EDGEMOOR", "loc" : [ -75.505999, 39.819377 ], "pop" : 26334, "state" : "DE" } +{ "_id" : "19901", "city" : "DOVER", "loc" : [ -75.535983, 39.156639 ], "pop" : 46005, "state" : "DE" } +{ "_id" : "19902", "city" : "DOVER AFB", "loc" : [ -75.478966, 39.120246 ], "pop" : 5500, "state" : "DE" } +{ "_id" : "19930", "city" : "BETHANY BEACH", "loc" : [ -75.067396, 38.531009 ], "pop" : 769, "state" : "DE" } +{ "_id" : "19931", "city" : "BETHEL", "loc" : [ -75.624298, 38.568517 ], "pop" : 108, "state" : "DE" } +{ "_id" : "19933", "city" : "BRIDGEVILLE", "loc" : [ -75.608768, 38.736628 ], "pop" : 4353, "state" : "DE" } +{ "_id" : "19934", "city" : "CAMDEN WYOMING", "loc" : [ -75.596559, 39.099099 ], "pop" : 8877, "state" : "DE" } +{ "_id" : "19938", "city" : "CLAYTON", "loc" : [ -75.690361, 39.256395 ], "pop" : 4906, "state" : "DE" } +{ "_id" : "19939", "city" : "DAGSBORO", "loc" : [ -75.21133, 38.559559 ], "pop" : 2593, "state" : "DE" } +{ "_id" : "19940", "city" : "DELMAR", "loc" : [ -75.57588699999999, 38.476955 ], "pop" : 4257, "state" : "DE" } +{ "_id" : "19941", "city" : "ELLENDALE", "loc" : [ -75.40558799999999, 38.805737 ], "pop" : 2445, "state" : "DE" } +{ "_id" : "19943", "city" : "FELTON", "loc" : [ -75.58290599999999, 39.022538 ], "pop" : 7282, "state" : "DE" } +{ "_id" : "19945", "city" : "FRANKFORD", "loc" : [ -75.200633, 38.51767 ], "pop" : 5500, "state" : "DE" } +{ "_id" : "19946", "city" : "FREDERICA", "loc" : [ -75.454458, 39.034188 ], "pop" : 2725, "state" : "DE" } +{ "_id" : "19947", "city" : "GEORGETOWN", "loc" : [ -75.393198, 38.679006 ], "pop" : 11371, "state" : "DE" } +{ "_id" : "19950", "city" : "GREENWOOD", "loc" : [ -75.593547, 38.817519 ], "pop" : 4279, "state" : "DE" } +{ "_id" : "19951", "city" : "HARBESON", "loc" : [ -75.22362099999999, 38.672294 ], "pop" : 598, "state" : "DE" } +{ "_id" : "19952", "city" : "HARRINGTON", "loc" : [ -75.58426799999999, 38.924031 ], "pop" : 7972, "state" : "DE" } +{ "_id" : "19953", "city" : "HARTLY", "loc" : [ -75.693476, 39.15421 ], "pop" : 3558, "state" : "DE" } +{ "_id" : "19954", "city" : "HOUSTON", "loc" : [ -75.506354, 38.91143 ], "pop" : 1776, "state" : "DE" } +{ "_id" : "19956", "city" : "LAUREL", "loc" : [ -75.563052, 38.553695 ], "pop" : 9283, "state" : "DE" } +{ "_id" : "19958", "city" : "LEWES", "loc" : [ -75.174702, 38.738149 ], "pop" : 9503, "state" : "DE" } +{ "_id" : "19960", "city" : "LINCOLN", "loc" : [ -75.399961, 38.86128 ], "pop" : 4435, "state" : "DE" } +{ "_id" : "19962", "city" : "MAGNOLIA", "loc" : [ -75.508321, 39.07353 ], "pop" : 4567, "state" : "DE" } +{ "_id" : "19963", "city" : "MILFORD", "loc" : [ -75.429877, 38.921801 ], "pop" : 12187, "state" : "DE" } +{ "_id" : "19964", "city" : "MARYDEL", "loc" : [ -75.728661, 39.099794 ], "pop" : 975, "state" : "DE" } +{ "_id" : "19966", "city" : "LONG NECK", "loc" : [ -75.25554700000001, 38.593436 ], "pop" : 11962, "state" : "DE" } +{ "_id" : "19967", "city" : "MILLVILLE", "loc" : [ -75.10776199999999, 38.558946 ], "pop" : 623, "state" : "DE" } +{ "_id" : "19968", "city" : "MILTON", "loc" : [ -75.295298, 38.768687 ], "pop" : 4656, "state" : "DE" } +{ "_id" : "19970", "city" : "MILLVILLE", "loc" : [ -75.096518, 38.555528 ], "pop" : 1532, "state" : "DE" } +{ "_id" : "19971", "city" : "DEWEY BEACH", "loc" : [ -75.10734600000001, 38.714715 ], "pop" : 6249, "state" : "DE" } +{ "_id" : "19973", "city" : "SEAFORD", "loc" : [ -75.604122, 38.640358 ], "pop" : 18404, "state" : "DE" } +{ "_id" : "19975", "city" : "SELBYVILLE", "loc" : [ -75.157325, 38.465357 ], "pop" : 4478, "state" : "DE" } +{ "_id" : "19977", "city" : "SMYRNA", "loc" : [ -75.600832, 39.293379 ], "pop" : 14164, "state" : "DE" } +{ "_id" : "19979", "city" : "VIOLA", "loc" : [ -75.572605, 39.041872 ], "pop" : 153, "state" : "DE" } +{ "_id" : "20001", "city" : "WASHINGTON", "loc" : [ -77.017691, 38.912217 ], "pop" : 34745, "state" : "DC" } +{ "_id" : "20002", "city" : "WASHINGTON", "loc" : [ -76.990055, 38.902365 ], "pop" : 56756, "state" : "DC" } +{ "_id" : "20003", "city" : "WASHINGTON", "loc" : [ -76.98953899999999, 38.882941 ], "pop" : 24818, "state" : "DC" } +{ "_id" : "20004", "city" : "WASHINGTON", "loc" : [ -77.026303, 38.892955 ], "pop" : 11, "state" : "DC" } +{ "_id" : "20005", "city" : "WASHINGTON", "loc" : [ -77.03123600000001, 38.906731 ], "pop" : 9862, "state" : "DC" } +{ "_id" : "20006", "city" : "WASHINGTON", "loc" : [ -77.044701, 38.896444 ], "pop" : 2317, "state" : "DC" } +{ "_id" : "20007", "city" : "WASHINGTON", "loc" : [ -77.07404200000001, 38.914365 ], "pop" : 27076, "state" : "DC" } +{ "_id" : "20008", "city" : "WASHINGTON", "loc" : [ -77.05993599999999, 38.936282 ], "pop" : 26736, "state" : "DC" } +{ "_id" : "20009", "city" : "WASHINGTON", "loc" : [ -77.037504, 38.920202 ], "pop" : 47086, "state" : "DC" } +{ "_id" : "20010", "city" : "WASHINGTON", "loc" : [ -77.032183, 38.93272 ], "pop" : 28849, "state" : "DC" } +{ "_id" : "20011", "city" : "WASHINGTON", "loc" : [ -77.020251, 38.951786 ], "pop" : 62924, "state" : "DC" } +{ "_id" : "20012", "city" : "WASHINGTON", "loc" : [ -77.028248, 38.975712 ], "pop" : 15081, "state" : "DC" } +{ "_id" : "20015", "city" : "WASHINGTON", "loc" : [ -77.067961, 38.965768 ], "pop" : 14569, "state" : "DC" } +{ "_id" : "20016", "city" : "WASHINGTON", "loc" : [ -77.086037, 38.938117 ], "pop" : 31042, "state" : "DC" } +{ "_id" : "20017", "city" : "WASHINGTON", "loc" : [ -76.994038, 38.936723 ], "pop" : 19548, "state" : "DC" } +{ "_id" : "20018", "city" : "WASHINGTON", "loc" : [ -76.976159, 38.927724 ], "pop" : 18298, "state" : "DC" } +{ "_id" : "20019", "city" : "WASHINGTON", "loc" : [ -76.93758800000001, 38.890237 ], "pop" : 59492, "state" : "DC" } +{ "_id" : "20020", "city" : "WASHINGTON", "loc" : [ -76.974187, 38.860039 ], "pop" : 54339, "state" : "DC" } +{ "_id" : "20024", "city" : "WASHINGTON", "loc" : [ -77.01602800000001, 38.875939 ], "pop" : 11562, "state" : "DC" } +{ "_id" : "20032", "city" : "WASHINGTON", "loc" : [ -76.999549, 38.833843 ], "pop" : 40265, "state" : "DC" } +{ "_id" : "20036", "city" : "WASHINGTON", "loc" : [ -77.041434, 38.908704 ], "pop" : 4146, "state" : "DC" } +{ "_id" : "20037", "city" : "WASHINGTON", "loc" : [ -77.050448, 38.901446 ], "pop" : 11046, "state" : "DC" } +{ "_id" : "20301", "city" : "PENTAGON", "loc" : [ -77.038196, 38.891019 ], "pop" : 21, "state" : "DC" } +{ "_id" : "20331", "city" : "ANDREWS AFB", "loc" : [ -76.886695, 38.800324 ], "pop" : 10228, "state" : "MD" } +{ "_id" : "20336", "city" : "WASHINGTON", "loc" : [ -77.014827, 38.839473 ], "pop" : 6311, "state" : "DC" } +{ "_id" : "20601", "city" : "WALDORF", "loc" : [ -76.877787, 38.637065 ], "pop" : 18548, "state" : "MD" } +{ "_id" : "20602", "city" : "SAINT CHARLES", "loc" : [ -76.903414, 38.601545 ], "pop" : 20663, "state" : "MD" } +{ "_id" : "20603", "city" : "SAINT CHARLES", "loc" : [ -76.96115399999999, 38.624929 ], "pop" : 11184, "state" : "MD" } +{ "_id" : "20606", "city" : "ABELL", "loc" : [ -76.74410399999999, 38.249554 ], "pop" : 601, "state" : "MD" } +{ "_id" : "20607", "city" : "ACCOKEEK", "loc" : [ -77.016217, 38.671992 ], "pop" : 4043, "state" : "MD" } +{ "_id" : "20608", "city" : "AQUASCO", "loc" : [ -76.714947, 38.582496 ], "pop" : 939, "state" : "MD" } +{ "_id" : "20609", "city" : "AVENUE", "loc" : [ -76.74655300000001, 38.282624 ], "pop" : 699, "state" : "MD" } +{ "_id" : "20611", "city" : "BEL ALTON", "loc" : [ -76.97887299999999, 38.473141 ], "pop" : 582, "state" : "MD" } +{ "_id" : "20613", "city" : "BRANDYWINE", "loc" : [ -76.832033, 38.692203 ], "pop" : 7627, "state" : "MD" } +{ "_id" : "20615", "city" : "BROOMES ISLAND", "loc" : [ -76.547763, 38.417963 ], "pop" : 404, "state" : "MD" } +{ "_id" : "20616", "city" : "BRYANS ROAD", "loc" : [ -77.076589, 38.641468 ], "pop" : 3792, "state" : "MD" } +{ "_id" : "20617", "city" : "BRYANTOWN", "loc" : [ -76.84653900000001, 38.542638 ], "pop" : 722, "state" : "MD" } +{ "_id" : "20618", "city" : "BUSHWOOD", "loc" : [ -76.792863, 38.284439 ], "pop" : 934, "state" : "MD" } +{ "_id" : "20619", "city" : "CALIFORNIA", "loc" : [ -76.531228, 38.300648 ], "pop" : 5485, "state" : "MD" } +{ "_id" : "20620", "city" : "CALLAWAY", "loc" : [ -76.52096299999999, 38.227521 ], "pop" : 1394, "state" : "MD" } +{ "_id" : "20621", "city" : "MADDOX", "loc" : [ -76.782343, 38.333197 ], "pop" : 1240, "state" : "MD" } +{ "_id" : "20622", "city" : "CHARLOTTE HALL", "loc" : [ -76.803792, 38.474977 ], "pop" : 3454, "state" : "MD" } +{ "_id" : "20623", "city" : "CHELTENHAM", "loc" : [ -76.83685199999999, 38.753094 ], "pop" : 712, "state" : "MD" } +{ "_id" : "20624", "city" : "CLEMENTS", "loc" : [ -76.72641900000001, 38.340716 ], "pop" : 303, "state" : "MD" } +{ "_id" : "20626", "city" : "COLTONS POINT", "loc" : [ -76.76464900000001, 38.236963 ], "pop" : 694, "state" : "MD" } +{ "_id" : "20628", "city" : "DAMERON", "loc" : [ -76.357474, 38.153271 ], "pop" : 330, "state" : "MD" } +{ "_id" : "20630", "city" : "DRAYDEN", "loc" : [ -76.473095, 38.171875 ], "pop" : 413, "state" : "MD" } +{ "_id" : "20632", "city" : "FAULKNER", "loc" : [ -76.972937, 38.438221 ], "pop" : 459, "state" : "MD" } +{ "_id" : "20634", "city" : "GREAT MILLS", "loc" : [ -76.49536500000001, 38.267431 ], "pop" : 4203, "state" : "MD" } +{ "_id" : "20636", "city" : "HOLLYWOOD", "loc" : [ -76.56264400000001, 38.352356 ], "pop" : 6785, "state" : "MD" } +{ "_id" : "20637", "city" : "HUGHESVILLE", "loc" : [ -76.781677, 38.520712 ], "pop" : 4078, "state" : "MD" } +{ "_id" : "20639", "city" : "HUNTINGTOWN", "loc" : [ -76.600268, 38.609453 ], "pop" : 8290, "state" : "MD" } +{ "_id" : "20640", "city" : "PISGAH", "loc" : [ -77.148357, 38.588855 ], "pop" : 8227, "state" : "MD" } +{ "_id" : "20645", "city" : "ISSUE", "loc" : [ -76.867527, 38.304327 ], "pop" : 87, "state" : "MD" } +{ "_id" : "20646", "city" : "LA PLATA", "loc" : [ -76.986498, 38.525673 ], "pop" : 16900, "state" : "MD" } +{ "_id" : "20650", "city" : "LEONARDTOWN", "loc" : [ -76.638037, 38.277425 ], "pop" : 8922, "state" : "MD" } +{ "_id" : "20653", "city" : "LEXINGTON PARK", "loc" : [ -76.45292999999999, 38.249452 ], "pop" : 17082, "state" : "MD" } +{ "_id" : "20656", "city" : "LOVEVILLE", "loc" : [ -76.67708, 38.347438 ], "pop" : 248, "state" : "MD" } +{ "_id" : "20657", "city" : "LUSBY", "loc" : [ -76.43464, 38.366128 ], "pop" : 8990, "state" : "MD" } +{ "_id" : "20658", "city" : "RISON", "loc" : [ -77.156329, 38.557335 ], "pop" : 1826, "state" : "MD" } +{ "_id" : "20659", "city" : "MECHANICSVILLE", "loc" : [ -76.725399, 38.429319 ], "pop" : 17326, "state" : "MD" } +{ "_id" : "20662", "city" : "NANJEMOY", "loc" : [ -77.198296, 38.446161 ], "pop" : 2793, "state" : "MD" } +{ "_id" : "20664", "city" : "NEWBURG", "loc" : [ -76.91749900000001, 38.329782 ], "pop" : 3612, "state" : "MD" } +{ "_id" : "20667", "city" : "PARK HALL", "loc" : [ -76.44152200000001, 38.224364 ], "pop" : 224, "state" : "MD" } +{ "_id" : "20670", "city" : "PATUXENT RIVER", "loc" : [ -76.438061, 38.279089 ], "pop" : 3015, "state" : "MD" } +{ "_id" : "20674", "city" : "PINEY POINT", "loc" : [ -76.504716, 38.139667 ], "pop" : 1114, "state" : "MD" } +{ "_id" : "20675", "city" : "POMFRET", "loc" : [ -77.009314, 38.585541 ], "pop" : 1410, "state" : "MD" } +{ "_id" : "20676", "city" : "PORT REPUBLIC", "loc" : [ -76.534865, 38.495237 ], "pop" : 2647, "state" : "MD" } +{ "_id" : "20677", "city" : "PORT TOBACCO", "loc" : [ -77.041856, 38.499353 ], "pop" : 1149, "state" : "MD" } +{ "_id" : "20678", "city" : "PRINCE FREDERICK", "loc" : [ -76.595495, 38.533629 ], "pop" : 6802, "state" : "MD" } +{ "_id" : "20680", "city" : "RIDGE", "loc" : [ -76.371071, 38.116883 ], "pop" : 1245, "state" : "MD" } +{ "_id" : "20684", "city" : "SAINT INIGOES", "loc" : [ -76.408328, 38.14406 ], "pop" : 583, "state" : "MD" } +{ "_id" : "20685", "city" : "SAINT LEONARD", "loc" : [ -76.511017, 38.45013 ], "pop" : 3895, "state" : "MD" } +{ "_id" : "20687", "city" : "SCOTLAND", "loc" : [ -76.347684, 38.082772 ], "pop" : 356, "state" : "MD" } +{ "_id" : "20688", "city" : "SOLOMONS", "loc" : [ -76.45888600000001, 38.334067 ], "pop" : 661, "state" : "MD" } +{ "_id" : "20689", "city" : "SUNDERLAND", "loc" : [ -76.576697, 38.648968 ], "pop" : 1664, "state" : "MD" } +{ "_id" : "20690", "city" : "TALL TIMBERS", "loc" : [ -76.539897, 38.165318 ], "pop" : 255, "state" : "MD" } +{ "_id" : "20692", "city" : "VALLEY LEE", "loc" : [ -76.508689, 38.189937 ], "pop" : 667, "state" : "MD" } +{ "_id" : "20693", "city" : "WELCOME", "loc" : [ -77.095006, 38.467206 ], "pop" : 334, "state" : "MD" } +{ "_id" : "20695", "city" : "WHITE PLAINS", "loc" : [ -76.980233, 38.594848 ], "pop" : 3721, "state" : "MD" } +{ "_id" : "20701", "city" : "ANNAPOLIS JUNCTI", "loc" : [ -76.798068, 39.130983 ], "pop" : 32, "state" : "MD" } +{ "_id" : "20705", "city" : "BELTSVILLE", "loc" : [ -76.92416799999999, 39.045524 ], "pop" : 18146, "state" : "MD" } +{ "_id" : "20706", "city" : "LANHAM", "loc" : [ -76.85509999999999, 38.967537 ], "pop" : 33471, "state" : "MD" } +{ "_id" : "20707", "city" : "LAUREL", "loc" : [ -76.87204300000001, 39.107687 ], "pop" : 31065, "state" : "MD" } +{ "_id" : "20708", "city" : "MONTPELIER", "loc" : [ -76.847725, 39.068376 ], "pop" : 23523, "state" : "MD" } +{ "_id" : "20710", "city" : "BLADENSBURG", "loc" : [ -76.920327, 38.945215 ], "pop" : 7716, "state" : "MD" } +{ "_id" : "20711", "city" : "LOTHIAN", "loc" : [ -76.66280999999999, 38.802933 ], "pop" : 5081, "state" : "MD" } +{ "_id" : "20712", "city" : "MOUNT RAINIER", "loc" : [ -76.965152, 38.943072 ], "pop" : 8422, "state" : "MD" } +{ "_id" : "20714", "city" : "NORTH BEACH", "loc" : [ -76.53670099999999, 38.711884 ], "pop" : 2292, "state" : "MD" } +{ "_id" : "20715", "city" : "BOWIE", "loc" : [ -76.743497, 38.979696 ], "pop" : 25296, "state" : "MD" } +{ "_id" : "20716", "city" : "MITCHELLVILLE", "loc" : [ -76.731979, 38.927482 ], "pop" : 13580, "state" : "MD" } +{ "_id" : "20720", "city" : "BOWIE", "loc" : [ -76.789526, 38.973733 ], "pop" : 8239, "state" : "MD" } +{ "_id" : "20721", "city" : "MITCHELLVILLE", "loc" : [ -76.80526999999999, 38.919588 ], "pop" : 10551, "state" : "MD" } +{ "_id" : "20722", "city" : "BRENTWOOD", "loc" : [ -76.953062, 38.940701 ], "pop" : 5769, "state" : "MD" } +{ "_id" : "20723", "city" : "LAUREL", "loc" : [ -76.84345, 39.120806 ], "pop" : 10457, "state" : "MD" } +{ "_id" : "20724", "city" : "LAUREL", "loc" : [ -76.815485, 39.095801 ], "pop" : 7656, "state" : "MD" } +{ "_id" : "20732", "city" : "CHESAPEAKE BEACH", "loc" : [ -76.537629, 38.669798 ], "pop" : 4856, "state" : "MD" } +{ "_id" : "20733", "city" : "CHURCHTON", "loc" : [ -76.524773, 38.801791 ], "pop" : 2539, "state" : "MD" } +{ "_id" : "20735", "city" : "CLINTON", "loc" : [ -76.90257699999999, 38.754892 ], "pop" : 26417, "state" : "MD" } +{ "_id" : "20736", "city" : "OWINGS", "loc" : [ -76.606093, 38.695507 ], "pop" : 6876, "state" : "MD" } +{ "_id" : "20737", "city" : "RIVERDALE", "loc" : [ -76.914658, 38.960067 ], "pop" : 16328, "state" : "MD" } +{ "_id" : "20740", "city" : "COLLEGE PARK", "loc" : [ -76.929891, 38.996303 ], "pop" : 29336, "state" : "MD" } +{ "_id" : "20743", "city" : "CAPITAL HEIGHTS", "loc" : [ -76.906665, 38.88385 ], "pop" : 40459, "state" : "MD" } +{ "_id" : "20744", "city" : "FORT WASHINGTON", "loc" : [ -76.983531, 38.758656 ], "pop" : 44735, "state" : "MD" } +{ "_id" : "20745", "city" : "OXON HILL", "loc" : [ -76.98977600000001, 38.810764 ], "pop" : 29487, "state" : "MD" } +{ "_id" : "20746", "city" : "SUITLAND", "loc" : [ -76.922156, 38.842453 ], "pop" : 30601, "state" : "MD" } +{ "_id" : "20747", "city" : "DISTRICT HEIGHTS", "loc" : [ -76.889132, 38.853887 ], "pop" : 35872, "state" : "MD" } +{ "_id" : "20748", "city" : "TEMPLE HILLS", "loc" : [ -76.94778599999999, 38.822159 ], "pop" : 40471, "state" : "MD" } +{ "_id" : "20751", "city" : "DEALE", "loc" : [ -76.551498, 38.782909 ], "pop" : 1909, "state" : "MD" } +{ "_id" : "20754", "city" : "DUNKIRK", "loc" : [ -76.642658, 38.740763 ], "pop" : 5919, "state" : "MD" } +{ "_id" : "20755", "city" : "FORT GEORGE G ME", "loc" : [ -76.745013, 39.112923 ], "pop" : 11110, "state" : "MD" } +{ "_id" : "20758", "city" : "FRIENDSHIP", "loc" : [ -76.600093, 38.739077 ], "pop" : 853, "state" : "MD" } +{ "_id" : "20759", "city" : "FULTON", "loc" : [ -76.92999, 39.150179 ], "pop" : 1640, "state" : "MD" } +{ "_id" : "20763", "city" : "SAVAGE", "loc" : [ -76.82181799999999, 39.137962 ], "pop" : 2227, "state" : "MD" } +{ "_id" : "20764", "city" : "SHADY SIDE", "loc" : [ -76.510884, 38.836794 ], "pop" : 2957, "state" : "MD" } +{ "_id" : "20769", "city" : "GLENN DALE", "loc" : [ -76.805336, 38.976632 ], "pop" : 3242, "state" : "MD" } +{ "_id" : "20770", "city" : "GREENBELT", "loc" : [ -76.88396400000001, 38.999559 ], "pop" : 21125, "state" : "MD" } +{ "_id" : "20772", "city" : "UPPER MARLBORO", "loc" : [ -76.798028, 38.837717 ], "pop" : 49684, "state" : "MD" } +{ "_id" : "20776", "city" : "HARWOOD", "loc" : [ -76.614458, 38.858152 ], "pop" : 3765, "state" : "MD" } +{ "_id" : "20777", "city" : "HIGHLAND", "loc" : [ -76.968643, 39.184252 ], "pop" : 2596, "state" : "MD" } +{ "_id" : "20778", "city" : "WEST RIVER", "loc" : [ -76.539113, 38.825194 ], "pop" : 1026, "state" : "MD" } +{ "_id" : "20779", "city" : "TRACYS LANDING", "loc" : [ -76.57523999999999, 38.767101 ], "pop" : 413, "state" : "MD" } +{ "_id" : "20781", "city" : "HYATTSVILLE", "loc" : [ -76.934652, 38.95063 ], "pop" : 11716, "state" : "MD" } +{ "_id" : "20782", "city" : "WEST HYATTSVILLE", "loc" : [ -76.966632, 38.963575 ], "pop" : 28026, "state" : "MD" } +{ "_id" : "20783", "city" : "ADELPHI", "loc" : [ -76.97472, 38.993751 ], "pop" : 40007, "state" : "MD" } +{ "_id" : "20784", "city" : "LANDOVER HILLS", "loc" : [ -76.888829, 38.951541 ], "pop" : 27339, "state" : "MD" } +{ "_id" : "20785", "city" : "LANDOVER", "loc" : [ -76.882243, 38.91992 ], "pop" : 38732, "state" : "MD" } +{ "_id" : "20794", "city" : "JESSUP", "loc" : [ -76.792239, 39.148399 ], "pop" : 11789, "state" : "MD" } +{ "_id" : "20812", "city" : "GLEN ECHO", "loc" : [ -77.143457, 38.969333 ], "pop" : 234, "state" : "MD" } +{ "_id" : "20814", "city" : "BETHESDA", "loc" : [ -77.102165, 39.000343 ], "pop" : 21704, "state" : "MD" } +{ "_id" : "20815", "city" : "CHEVY CHASE", "loc" : [ -77.08198400000001, 38.977955 ], "pop" : 25264, "state" : "MD" } +{ "_id" : "20816", "city" : "BETHESDA", "loc" : [ -77.11528, 38.958485 ], "pop" : 14700, "state" : "MD" } +{ "_id" : "20817", "city" : "WEST BETHESDA", "loc" : [ -77.13723899999999, 38.999659 ], "pop" : 33484, "state" : "MD" } +{ "_id" : "20818", "city" : "CABIN JOHN", "loc" : [ -77.15911, 38.974302 ], "pop" : 1120, "state" : "MD" } +{ "_id" : "20832", "city" : "OLNEY", "loc" : [ -77.074949, 39.152591 ], "pop" : 20376, "state" : "MD" } +{ "_id" : "20833", "city" : "BROOKEVILLE", "loc" : [ -77.06026, 39.187082 ], "pop" : 3612, "state" : "MD" } +{ "_id" : "20837", "city" : "POOLESVILLE", "loc" : [ -77.406717, 39.138597 ], "pop" : 4692, "state" : "MD" } +{ "_id" : "20838", "city" : "BARNESVILLE", "loc" : [ -77.376426, 39.223321 ], "pop" : 130, "state" : "MD" } +{ "_id" : "20839", "city" : "BEALLSVILLE", "loc" : [ -77.41440299999999, 39.167095 ], "pop" : 72, "state" : "MD" } +{ "_id" : "20841", "city" : "BOYDS", "loc" : [ -77.316731, 39.210042 ], "pop" : 2402, "state" : "MD" } +{ "_id" : "20842", "city" : "DICKERSON", "loc" : [ -77.419853, 39.212615 ], "pop" : 1726, "state" : "MD" } +{ "_id" : "20850", "city" : "ROCKVILLE", "loc" : [ -77.167973, 39.087037 ], "pop" : 24215, "state" : "MD" } +{ "_id" : "20851", "city" : "ROCKVILLE", "loc" : [ -77.12344899999999, 39.076265 ], "pop" : 11494, "state" : "MD" } +{ "_id" : "20852", "city" : "ROCKVILLE", "loc" : [ -77.12041600000001, 39.049628 ], "pop" : 32913, "state" : "MD" } +{ "_id" : "20853", "city" : "ROCKVILLE", "loc" : [ -77.095037, 39.088738 ], "pop" : 27339, "state" : "MD" } +{ "_id" : "20854", "city" : "POTOMAC", "loc" : [ -77.192151, 39.03877 ], "pop" : 44211, "state" : "MD" } +{ "_id" : "20855", "city" : "DERWOOD", "loc" : [ -77.147707, 39.134539 ], "pop" : 17235, "state" : "MD" } +{ "_id" : "20860", "city" : "SANDY SPRING", "loc" : [ -77.029071, 39.150319 ], "pop" : 1890, "state" : "MD" } +{ "_id" : "20861", "city" : "ASHTON", "loc" : [ -76.99242, 39.151027 ], "pop" : 1318, "state" : "MD" } +{ "_id" : "20862", "city" : "BRINKLOW", "loc" : [ -77.016338, 39.183777 ], "pop" : 286, "state" : "MD" } +{ "_id" : "20866", "city" : "BURTONSVILLE", "loc" : [ -76.933851, 39.092151 ], "pop" : 14497, "state" : "MD" } +{ "_id" : "20868", "city" : "SPENCERVILLE", "loc" : [ -76.959802, 39.121343 ], "pop" : 278, "state" : "MD" } +{ "_id" : "20871", "city" : "CLARKSBURG", "loc" : [ -77.273579, 39.263719 ], "pop" : 2674, "state" : "MD" } +{ "_id" : "20872", "city" : "DAMASCUS", "loc" : [ -77.213088, 39.27606 ], "pop" : 10446, "state" : "MD" } +{ "_id" : "20874", "city" : "DARNESTOWN", "loc" : [ -77.269935, 39.17039 ], "pop" : 33549, "state" : "MD" } +{ "_id" : "20876", "city" : "GERMANTOWN", "loc" : [ -77.235829, 39.188001 ], "pop" : 11734, "state" : "MD" } +{ "_id" : "20877", "city" : "GAITHERSBURG", "loc" : [ -77.188993, 39.14187 ], "pop" : 25136, "state" : "MD" } +{ "_id" : "20878", "city" : "DARNESTOWN", "loc" : [ -77.236434, 39.115534 ], "pop" : 45367, "state" : "MD" } +{ "_id" : "20879", "city" : "LAYTONSVILLE", "loc" : [ -77.194599, 39.172597 ], "pop" : 46879, "state" : "MD" } +{ "_id" : "20882", "city" : "LAYTONSVILLE", "loc" : [ -77.174718, 39.238345 ], "pop" : 9795, "state" : "MD" } +{ "_id" : "20895", "city" : "KENSINGTON", "loc" : [ -77.07928099999999, 39.029803 ], "pop" : 21848, "state" : "MD" } +{ "_id" : "20901", "city" : "SILVER SPRING", "loc" : [ -77.00761300000001, 39.019106 ], "pop" : 33858, "state" : "MD" } +{ "_id" : "20902", "city" : "WHEATON", "loc" : [ -77.04634799999999, 39.04158 ], "pop" : 40299, "state" : "MD" } +{ "_id" : "20903", "city" : "SILVER SPRING", "loc" : [ -76.98464800000001, 39.009513 ], "pop" : 16724, "state" : "MD" } +{ "_id" : "20904", "city" : "COLESVILLE", "loc" : [ -76.976399, 39.06524 ], "pop" : 39991, "state" : "MD" } +{ "_id" : "20905", "city" : "COLESVILLE", "loc" : [ -76.98992800000001, 39.102438 ], "pop" : 16800, "state" : "MD" } +{ "_id" : "20906", "city" : "ASPEN HILL", "loc" : [ -77.063233, 39.081041 ], "pop" : 52694, "state" : "MD" } +{ "_id" : "20910", "city" : "SILVER SPRING", "loc" : [ -77.033776, 38.998198 ], "pop" : 31954, "state" : "MD" } +{ "_id" : "20912", "city" : "TAKOMA PARK", "loc" : [ -77.000715, 38.983214 ], "pop" : 24356, "state" : "MD" } +{ "_id" : "21001", "city" : "ABERDEEN", "loc" : [ -76.18053999999999, 39.510886 ], "pop" : 19229, "state" : "MD" } +{ "_id" : "21005", "city" : "ABERDEEN PROVING", "loc" : [ -76.130295, 39.472434 ], "pop" : 5294, "state" : "MD" } +{ "_id" : "21009", "city" : "ABINGDON", "loc" : [ -76.29972600000001, 39.47444 ], "pop" : 12664, "state" : "MD" } +{ "_id" : "21010", "city" : "GUNPOWDER", "loc" : [ -76.274261, 39.398249 ], "pop" : 1082, "state" : "MD" } +{ "_id" : "21012", "city" : "ARNOLD", "loc" : [ -76.49406, 39.047587 ], "pop" : 19404, "state" : "MD" } +{ "_id" : "21013", "city" : "BALDWIN", "loc" : [ -76.492711, 39.519395 ], "pop" : 4945, "state" : "MD" } +{ "_id" : "21014", "city" : "BEL AIR", "loc" : [ -76.356431, 39.539367 ], "pop" : 18477, "state" : "MD" } +{ "_id" : "21015", "city" : "BEL AIR", "loc" : [ -76.31532900000001, 39.530252 ], "pop" : 23254, "state" : "MD" } +{ "_id" : "21017", "city" : "BELCAMP", "loc" : [ -76.24201100000001, 39.475626 ], "pop" : 2957, "state" : "MD" } +{ "_id" : "21021", "city" : "BRADSHAW", "loc" : [ -76.38939999999999, 39.428113 ], "pop" : 699, "state" : "MD" } +{ "_id" : "21028", "city" : "CHURCHVILLE", "loc" : [ -76.24896200000001, 39.564845 ], "pop" : 3038, "state" : "MD" } +{ "_id" : "21029", "city" : "CLARKSVILLE", "loc" : [ -76.94227100000001, 39.194362 ], "pop" : 3147, "state" : "MD" } +{ "_id" : "21030", "city" : "COCKEYSVILLE HUN", "loc" : [ -76.62865499999999, 39.473554 ], "pop" : 20331, "state" : "MD" } +{ "_id" : "21031", "city" : "COCKEYSVILLE HUN", "loc" : [ -76.65984400000001, 39.502623 ], "pop" : 159, "state" : "MD" } +{ "_id" : "21032", "city" : "CROWNSVILLE", "loc" : [ -76.59347699999999, 39.048889 ], "pop" : 7269, "state" : "MD" } +{ "_id" : "21034", "city" : "DARLINGTON", "loc" : [ -76.227795, 39.654032 ], "pop" : 3298, "state" : "MD" } +{ "_id" : "21035", "city" : "DAVIDSONVILLE", "loc" : [ -76.637542, 38.937364 ], "pop" : 6070, "state" : "MD" } +{ "_id" : "21036", "city" : "DAYTON", "loc" : [ -76.99675499999999, 39.233882 ], "pop" : 1707, "state" : "MD" } +{ "_id" : "21037", "city" : "EDGEWATER BEACH", "loc" : [ -76.540374, 38.922511 ], "pop" : 14576, "state" : "MD" } +{ "_id" : "21040", "city" : "EDGEWOOD", "loc" : [ -76.30555, 39.427725 ], "pop" : 22058, "state" : "MD" } +{ "_id" : "21042", "city" : "ELLICOTT CITY", "loc" : [ -76.861362, 39.272632 ], "pop" : 29589, "state" : "MD" } +{ "_id" : "21043", "city" : "DANIELS", "loc" : [ -76.803929, 39.258216 ], "pop" : 19217, "state" : "MD" } +{ "_id" : "21044", "city" : "COLUMBIA", "loc" : [ -76.87880699999999, 39.214103 ], "pop" : 32695, "state" : "MD" } +{ "_id" : "21045", "city" : "COLUMBIA", "loc" : [ -76.83223, 39.205052 ], "pop" : 32658, "state" : "MD" } +{ "_id" : "21046", "city" : "COLUMBIA", "loc" : [ -76.853796, 39.170236 ], "pop" : 13591, "state" : "MD" } +{ "_id" : "21047", "city" : "FALLSTON", "loc" : [ -76.43277, 39.527048 ], "pop" : 10230, "state" : "MD" } +{ "_id" : "21048", "city" : "PATAPSCO", "loc" : [ -76.909862, 39.508645 ], "pop" : 7680, "state" : "MD" } +{ "_id" : "21050", "city" : "FOREST HILL", "loc" : [ -76.400767, 39.57549 ], "pop" : 9029, "state" : "MD" } +{ "_id" : "21051", "city" : "FORK", "loc" : [ -76.450361, 39.472937 ], "pop" : 136, "state" : "MD" } +{ "_id" : "21053", "city" : "FREELAND", "loc" : [ -76.72234899999999, 39.693957 ], "pop" : 2482, "state" : "MD" } +{ "_id" : "21054", "city" : "GAMBRILLS", "loc" : [ -76.681877, 39.04069 ], "pop" : 7441, "state" : "MD" } +{ "_id" : "21056", "city" : "GIBSON ISLAND", "loc" : [ -76.432418, 39.07511 ], "pop" : 335, "state" : "MD" } +{ "_id" : "21057", "city" : "GLEN ARM", "loc" : [ -76.515331, 39.457484 ], "pop" : 3679, "state" : "MD" } +{ "_id" : "21061", "city" : "GLEN BURNIE", "loc" : [ -76.61886199999999, 39.158968 ], "pop" : 75692, "state" : "MD" } +{ "_id" : "21071", "city" : "GLYNDON", "loc" : [ -76.78756799999999, 39.492782 ], "pop" : 1761, "state" : "MD" } +{ "_id" : "21074", "city" : "GREENMOUNT", "loc" : [ -76.849397, 39.61352 ], "pop" : 10443, "state" : "MD" } +{ "_id" : "21076", "city" : "HANOVER", "loc" : [ -76.721535, 39.155069 ], "pop" : 6265, "state" : "MD" } +{ "_id" : "21078", "city" : "HAVRE DE GRACE", "loc" : [ -76.117144, 39.552312 ], "pop" : 13536, "state" : "MD" } +{ "_id" : "21082", "city" : "HYDES", "loc" : [ -76.469538, 39.474049 ], "pop" : 883, "state" : "MD" } +{ "_id" : "21084", "city" : "JARRETTSVILLE", "loc" : [ -76.46842700000001, 39.616241 ], "pop" : 6667, "state" : "MD" } +{ "_id" : "21085", "city" : "JOPPA", "loc" : [ -76.354102, 39.424208 ], "pop" : 15006, "state" : "MD" } +{ "_id" : "21087", "city" : "KINGSVILLE", "loc" : [ -76.41473000000001, 39.455775 ], "pop" : 4283, "state" : "MD" } +{ "_id" : "21088", "city" : "LINEBORO", "loc" : [ -76.839476, 39.718498 ], "pop" : 94, "state" : "MD" } +{ "_id" : "21090", "city" : "LINTHICUM HEIGHT", "loc" : [ -76.657477, 39.208331 ], "pop" : 9777, "state" : "MD" } +{ "_id" : "21093", "city" : "LUTHERVILLE", "loc" : [ -76.633791, 39.438636 ], "pop" : 31560, "state" : "MD" } +{ "_id" : "21102", "city" : "MANCHESTER", "loc" : [ -76.89407300000001, 39.674746 ], "pop" : 5476, "state" : "MD" } +{ "_id" : "21104", "city" : "MARRIOTTSVILLE", "loc" : [ -76.913241, 39.334154 ], "pop" : 1482, "state" : "MD" } +{ "_id" : "21107", "city" : "MILLERS", "loc" : [ -76.82388400000001, 39.683224 ], "pop" : 3218, "state" : "MD" } +{ "_id" : "21108", "city" : "MILLERSVILLE", "loc" : [ -76.61902000000001, 39.104102 ], "pop" : 16436, "state" : "MD" } +{ "_id" : "21111", "city" : "HEREFORD", "loc" : [ -76.592957, 39.576611 ], "pop" : 4615, "state" : "MD" } +{ "_id" : "21113", "city" : "ODENTON", "loc" : [ -76.699583, 39.076197 ], "pop" : 8201, "state" : "MD" } +{ "_id" : "21114", "city" : "CROFTON", "loc" : [ -76.680166, 39.011163 ], "pop" : 15590, "state" : "MD" } +{ "_id" : "21117", "city" : "OWINGS MILLS", "loc" : [ -76.776934, 39.42688 ], "pop" : 24913, "state" : "MD" } +{ "_id" : "21120", "city" : "BENTLEY SPRINGS", "loc" : [ -76.67759100000001, 39.649937 ], "pop" : 5320, "state" : "MD" } +{ "_id" : "21122", "city" : "RIVIERA BEACH", "loc" : [ -76.516248, 39.129284 ], "pop" : 51386, "state" : "MD" } +{ "_id" : "21128", "city" : "PERRY HALL", "loc" : [ -76.450987, 39.401013 ], "pop" : 6075, "state" : "MD" } +{ "_id" : "21131", "city" : "JACKSONVILLE", "loc" : [ -76.564623, 39.506978 ], "pop" : 6703, "state" : "MD" } +{ "_id" : "21132", "city" : "PYLESVILLE", "loc" : [ -76.41125599999999, 39.695905 ], "pop" : 2782, "state" : "MD" } +{ "_id" : "21133", "city" : "RANDALLSTOWN", "loc" : [ -76.800245, 39.374571 ], "pop" : 23994, "state" : "MD" } +{ "_id" : "21136", "city" : "REISTERSTOWN", "loc" : [ -76.813452, 39.45996 ], "pop" : 24812, "state" : "MD" } +{ "_id" : "21140", "city" : "RIVA", "loc" : [ -76.585437, 38.950391 ], "pop" : 3165, "state" : "MD" } +{ "_id" : "21144", "city" : "SEVERN", "loc" : [ -76.697953, 39.127543 ], "pop" : 25272, "state" : "MD" } +{ "_id" : "21146", "city" : "SEVERNA PARK", "loc" : [ -76.55774599999999, 39.081078 ], "pop" : 23392, "state" : "MD" } +{ "_id" : "21152", "city" : "GLENCOE", "loc" : [ -76.66910900000001, 39.543086 ], "pop" : 4450, "state" : "MD" } +{ "_id" : "21154", "city" : "ROCKS", "loc" : [ -76.330174, 39.649928 ], "pop" : 5018, "state" : "MD" } +{ "_id" : "21155", "city" : "FOWBELSBURG", "loc" : [ -76.81623, 39.56394 ], "pop" : 2487, "state" : "MD" } +{ "_id" : "21156", "city" : "UPPER FALLS", "loc" : [ -76.400604, 39.43967 ], "pop" : 464, "state" : "MD" } +{ "_id" : "21157", "city" : "CARROLLTON", "loc" : [ -76.99404, 39.555654 ], "pop" : 37148, "state" : "MD" } +{ "_id" : "21158", "city" : "UNIONTOWN", "loc" : [ -77.036946, 39.655464 ], "pop" : 8491, "state" : "MD" } +{ "_id" : "21160", "city" : "WHITEFORD", "loc" : [ -76.31601499999999, 39.707709 ], "pop" : 1766, "state" : "MD" } +{ "_id" : "21161", "city" : "WHITE HALL", "loc" : [ -76.566639, 39.66176 ], "pop" : 4970, "state" : "MD" } +{ "_id" : "21162", "city" : "WHITE MARSH", "loc" : [ -76.413189, 39.392315 ], "pop" : 2521, "state" : "MD" } +{ "_id" : "21163", "city" : "GRANITE", "loc" : [ -76.85757, 39.339151 ], "pop" : 2115, "state" : "MD" } +{ "_id" : "21201", "city" : "BALTIMORE", "loc" : [ -76.625203, 39.29463 ], "pop" : 16256, "state" : "MD" } +{ "_id" : "21202", "city" : "BALTIMORE", "loc" : [ -76.607499, 39.299844 ], "pop" : 28656, "state" : "MD" } +{ "_id" : "21204", "city" : "EUDOWOOD", "loc" : [ -76.603224, 39.402517 ], "pop" : 37257, "state" : "MD" } +{ "_id" : "21205", "city" : "BALTIMORE", "loc" : [ -76.579915, 39.300871 ], "pop" : 23763, "state" : "MD" } +{ "_id" : "21206", "city" : "BALTIMORE", "loc" : [ -76.541135, 39.336494 ], "pop" : 52114, "state" : "MD" } +{ "_id" : "21207", "city" : "GWYNN OAK", "loc" : [ -76.734064, 39.329628 ], "pop" : 76002, "state" : "MD" } +{ "_id" : "21208", "city" : "PIKESVILLE", "loc" : [ -76.72901299999999, 39.376359 ], "pop" : 27723, "state" : "MD" } +{ "_id" : "21209", "city" : "BALTIMORE", "loc" : [ -76.674431, 39.371622 ], "pop" : 20673, "state" : "MD" } +{ "_id" : "21210", "city" : "BALTIMORE", "loc" : [ -76.632099, 39.350727 ], "pop" : 12581, "state" : "MD" } +{ "_id" : "21211", "city" : "BALTIMORE", "loc" : [ -76.63362499999999, 39.331642 ], "pop" : 19797, "state" : "MD" } +{ "_id" : "21212", "city" : "BALTIMORE", "loc" : [ -76.609989, 39.362571 ], "pop" : 35680, "state" : "MD" } +{ "_id" : "21213", "city" : "BALTIMORE", "loc" : [ -76.581012, 39.312667 ], "pop" : 47171, "state" : "MD" } +{ "_id" : "21214", "city" : "BALTIMORE", "loc" : [ -76.564375, 39.35206 ], "pop" : 20949, "state" : "MD" } +{ "_id" : "21215", "city" : "BALTIMORE", "loc" : [ -76.67939699999999, 39.344572 ], "pop" : 74402, "state" : "MD" } +{ "_id" : "21216", "city" : "BALTIMORE", "loc" : [ -76.66989100000001, 39.309349 ], "pop" : 42501, "state" : "MD" } +{ "_id" : "21217", "city" : "BALTIMORE", "loc" : [ -76.639267, 39.306416 ], "pop" : 52502, "state" : "MD" } +{ "_id" : "21218", "city" : "BALTIMORE", "loc" : [ -76.6048, 39.3265 ], "pop" : 56677, "state" : "MD" } +{ "_id" : "21219", "city" : "DUNDALK SPARROWS", "loc" : [ -76.44693700000001, 39.229068 ], "pop" : 9467, "state" : "MD" } +{ "_id" : "21220", "city" : "MIDDLE RIVER", "loc" : [ -76.415255, 39.340098 ], "pop" : 37336, "state" : "MD" } +{ "_id" : "21221", "city" : "ESSEX", "loc" : [ -76.453259, 39.308553 ], "pop" : 44117, "state" : "MD" } +{ "_id" : "21222", "city" : "DUNDALK SPARROWS", "loc" : [ -76.502484, 39.26486 ], "pop" : 58181, "state" : "MD" } +{ "_id" : "21223", "city" : "BALTIMORE", "loc" : [ -76.647586, 39.287 ], "pop" : 39003, "state" : "MD" } +{ "_id" : "21224", "city" : "BALTIMORE", "loc" : [ -76.556831, 39.287558 ], "pop" : 53629, "state" : "MD" } +{ "_id" : "21225", "city" : "BROOKLYN CURTIS", "loc" : [ -76.615026, 39.233343 ], "pop" : 35032, "state" : "MD" } +{ "_id" : "21226", "city" : "BROOKLYN CURTIS", "loc" : [ -76.569147, 39.209315 ], "pop" : 5478, "state" : "MD" } +{ "_id" : "21227", "city" : "HALETHORPE", "loc" : [ -76.696872, 39.230893 ], "pop" : 45430, "state" : "MD" } +{ "_id" : "21228", "city" : "CATONSVILLE", "loc" : [ -76.74012399999999, 39.27825 ], "pop" : 43630, "state" : "MD" } +{ "_id" : "21229", "city" : "BALTIMORE", "loc" : [ -76.689885, 39.285645 ], "pop" : 53962, "state" : "MD" } +{ "_id" : "21230", "city" : "BALTIMORE", "loc" : [ -76.626193, 39.269943 ], "pop" : 34901, "state" : "MD" } +{ "_id" : "21231", "city" : "BALTIMORE", "loc" : [ -76.589956, 39.289193 ], "pop" : 15928, "state" : "MD" } +{ "_id" : "21234", "city" : "PARKVILLE", "loc" : [ -76.54176699999999, 39.387581 ], "pop" : 66477, "state" : "MD" } +{ "_id" : "21236", "city" : "NOTTINGHAM", "loc" : [ -76.487106, 39.391412 ], "pop" : 33099, "state" : "MD" } +{ "_id" : "21237", "city" : "ROSEDALE", "loc" : [ -76.50138699999999, 39.336054 ], "pop" : 24835, "state" : "MD" } +{ "_id" : "21239", "city" : "BALTIMORE", "loc" : [ -76.589082, 39.360977 ], "pop" : 31935, "state" : "MD" } +{ "_id" : "21240", "city" : "BALTIMORE", "loc" : [ -76.648287, 39.17185 ], "pop" : 1, "state" : "MD" } +{ "_id" : "21401", "city" : "CAPE SAINT CLAIR", "loc" : [ -76.503139, 38.999645 ], "pop" : 44757, "state" : "MD" } +{ "_id" : "21402", "city" : "NAVAL ACADEMY", "loc" : [ -76.48079, 38.982436 ], "pop" : 5780, "state" : "MD" } +{ "_id" : "21403", "city" : "ANNAPOLIS", "loc" : [ -76.49102999999999, 38.952394 ], "pop" : 26587, "state" : "MD" } +{ "_id" : "21502", "city" : "CRESAPTOWN", "loc" : [ -78.77744199999999, 39.644796 ], "pop" : 44371, "state" : "MD" } +{ "_id" : "21520", "city" : "ACCIDENT", "loc" : [ -79.30846699999999, 39.635504 ], "pop" : 1968, "state" : "MD" } +{ "_id" : "21521", "city" : "BARTON", "loc" : [ -79.02813, 39.533135 ], "pop" : 1305, "state" : "MD" } +{ "_id" : "21522", "city" : "BITTINGER", "loc" : [ -79.214247, 39.597786 ], "pop" : 479, "state" : "MD" } +{ "_id" : "21523", "city" : "BLOOMINGTON", "loc" : [ -79.11370700000001, 39.487764 ], "pop" : 898, "state" : "MD" } +{ "_id" : "21530", "city" : "FLINTSTONE", "loc" : [ -78.573949, 39.699288 ], "pop" : 1102, "state" : "MD" } +{ "_id" : "21531", "city" : "FRIENDSVILLE", "loc" : [ -79.42191200000001, 39.666502 ], "pop" : 2021, "state" : "MD" } +{ "_id" : "21532", "city" : "FROSTBURG", "loc" : [ -78.930559, 39.649359 ], "pop" : 15702, "state" : "MD" } +{ "_id" : "21536", "city" : "JENNINGS", "loc" : [ -79.15166499999999, 39.684436 ], "pop" : 3138, "state" : "MD" } +{ "_id" : "21538", "city" : "SHALLMAR", "loc" : [ -79.202528, 39.396275 ], "pop" : 759, "state" : "MD" } +{ "_id" : "21539", "city" : "LONACONING", "loc" : [ -78.991477, 39.575703 ], "pop" : 3494, "state" : "MD" } +{ "_id" : "21540", "city" : "LUKE", "loc" : [ -79.059365, 39.477392 ], "pop" : 184, "state" : "MD" } +{ "_id" : "21541", "city" : "SANG RUN", "loc" : [ -79.36413400000001, 39.559709 ], "pop" : 1673, "state" : "MD" } +{ "_id" : "21545", "city" : "MOUNT SAVAGE", "loc" : [ -78.873892, 39.699128 ], "pop" : 2067, "state" : "MD" } +{ "_id" : "21550", "city" : "DEER PARK", "loc" : [ -79.38966000000001, 39.399993 ], "pop" : 13531, "state" : "MD" } +{ "_id" : "21555", "city" : "OLDTOWN", "loc" : [ -78.604373, 39.584598 ], "pop" : 2079, "state" : "MD" } +{ "_id" : "21557", "city" : "RAWLINGS", "loc" : [ -78.90623100000001, 39.521363 ], "pop" : 1919, "state" : "MD" } +{ "_id" : "21561", "city" : "SWANTON", "loc" : [ -79.240165, 39.476361 ], "pop" : 1719, "state" : "MD" } +{ "_id" : "21562", "city" : "MCCOOLE", "loc" : [ -79.030726, 39.482625 ], "pop" : 3976, "state" : "MD" } +{ "_id" : "21601", "city" : "EASTON", "loc" : [ -76.07577499999999, 38.77682 ], "pop" : 16439, "state" : "MD" } +{ "_id" : "21607", "city" : "BARCLAY", "loc" : [ -75.860079, 39.129871 ], "pop" : 592, "state" : "MD" } +{ "_id" : "21610", "city" : "BETTERTON", "loc" : [ -76.06393799999999, 39.365509 ], "pop" : 485, "state" : "MD" } +{ "_id" : "21612", "city" : "BOZMAN", "loc" : [ -76.27641, 38.751493 ], "pop" : 847, "state" : "MD" } +{ "_id" : "21613", "city" : "CAMBRIDGE", "loc" : [ -76.08735799999999, 38.564282 ], "pop" : 16908, "state" : "MD" } +{ "_id" : "21617", "city" : "CENTREVILLE", "loc" : [ -76.04497499999999, 39.056423 ], "pop" : 5834, "state" : "MD" } +{ "_id" : "21619", "city" : "CHESTER", "loc" : [ -76.284183, 38.958296 ], "pop" : 4199, "state" : "MD" } +{ "_id" : "21620", "city" : "CHESTERTOWN", "loc" : [ -76.080214, 39.212517 ], "pop" : 10618, "state" : "MD" } +{ "_id" : "21622", "city" : "CHURCH CREEK", "loc" : [ -76.169569, 38.427815 ], "pop" : 593, "state" : "MD" } +{ "_id" : "21623", "city" : "CHURCH HILL", "loc" : [ -75.988028, 39.145958 ], "pop" : 813, "state" : "MD" } +{ "_id" : "21625", "city" : "CORDOVA", "loc" : [ -76.00287899999999, 38.870426 ], "pop" : 2346, "state" : "MD" } +{ "_id" : "21626", "city" : "CRAPO", "loc" : [ -76.11420699999999, 38.329541 ], "pop" : 173, "state" : "MD" } +{ "_id" : "21628", "city" : "CRUMPTON", "loc" : [ -75.919522, 39.233019 ], "pop" : 689, "state" : "MD" } +{ "_id" : "21629", "city" : "DENTON", "loc" : [ -75.836071, 38.877928 ], "pop" : 7126, "state" : "MD" } +{ "_id" : "21631", "city" : "EAST NEW MARKET", "loc" : [ -75.956766, 38.592095 ], "pop" : 2156, "state" : "MD" } +{ "_id" : "21632", "city" : "FEDERALSBURG", "loc" : [ -75.77537599999999, 38.714681 ], "pop" : 5535, "state" : "MD" } +{ "_id" : "21634", "city" : "FISHING CREEK", "loc" : [ -76.21678300000001, 38.316292 ], "pop" : 580, "state" : "MD" } +{ "_id" : "21635", "city" : "GALENA", "loc" : [ -75.871673, 39.337417 ], "pop" : 1087, "state" : "MD" } +{ "_id" : "21636", "city" : "GOLDSBORO", "loc" : [ -75.792604, 39.022957 ], "pop" : 1179, "state" : "MD" } +{ "_id" : "21637", "city" : "GOLTS", "loc" : [ -75.805521, 39.355598 ], "pop" : 533, "state" : "MD" } +{ "_id" : "21638", "city" : "GRASONVILLE", "loc" : [ -76.199701, 38.945602 ], "pop" : 3225, "state" : "MD" } +{ "_id" : "21639", "city" : "GREENSBORO", "loc" : [ -75.80591099999999, 38.961632 ], "pop" : 3516, "state" : "MD" } +{ "_id" : "21640", "city" : "HENDERSON", "loc" : [ -75.794787, 39.067197 ], "pop" : 1391, "state" : "MD" } +{ "_id" : "21643", "city" : "WILLIAMSBURG", "loc" : [ -75.866254, 38.642826 ], "pop" : 4625, "state" : "MD" } +{ "_id" : "21644", "city" : "INGLESIDE", "loc" : [ -75.89174800000001, 39.124654 ], "pop" : 159, "state" : "MD" } +{ "_id" : "21645", "city" : "KENNEDYVILLE", "loc" : [ -75.981797, 39.297835 ], "pop" : 1807, "state" : "MD" } +{ "_id" : "21647", "city" : "MCDANIEL", "loc" : [ -76.280593, 38.819213 ], "pop" : 610, "state" : "MD" } +{ "_id" : "21649", "city" : "MARYDEL", "loc" : [ -75.762247, 39.108169 ], "pop" : 1195, "state" : "MD" } +{ "_id" : "21650", "city" : "MASSEY", "loc" : [ -75.821483, 39.312569 ], "pop" : 112, "state" : "MD" } +{ "_id" : "21651", "city" : "MILLINGTON", "loc" : [ -75.84996599999999, 39.257989 ], "pop" : 2003, "state" : "MD" } +{ "_id" : "21654", "city" : "OXFORD", "loc" : [ -76.153783, 38.686358 ], "pop" : 1350, "state" : "MD" } +{ "_id" : "21655", "city" : "PRESTON", "loc" : [ -75.916284, 38.746456 ], "pop" : 4425, "state" : "MD" } +{ "_id" : "21657", "city" : "QUEEN ANNE", "loc" : [ -75.977655, 38.945583 ], "pop" : 1092, "state" : "MD" } +{ "_id" : "21658", "city" : "QUEENSTOWN", "loc" : [ -76.152646, 38.956235 ], "pop" : 3330, "state" : "MD" } +{ "_id" : "21659", "city" : "RHODESDALE", "loc" : [ -75.774945, 38.602985 ], "pop" : 2276, "state" : "MD" } +{ "_id" : "21660", "city" : "RIDGELY", "loc" : [ -75.88482500000001, 38.956787 ], "pop" : 2754, "state" : "MD" } +{ "_id" : "21661", "city" : "ROCK HALL", "loc" : [ -76.230467, 39.134371 ], "pop" : 2770, "state" : "MD" } +{ "_id" : "21662", "city" : "ROYAL OAK", "loc" : [ -76.187788, 38.72883 ], "pop" : 889, "state" : "MD" } +{ "_id" : "21663", "city" : "SAINT MICHAELS", "loc" : [ -76.221547, 38.782965 ], "pop" : 3247, "state" : "MD" } +{ "_id" : "21665", "city" : "SHERWOOD", "loc" : [ -76.327822, 38.73741 ], "pop" : 262, "state" : "MD" } +{ "_id" : "21666", "city" : "STEVENSVILLE", "loc" : [ -76.337087, 38.939399 ], "pop" : 8630, "state" : "MD" } +{ "_id" : "21667", "city" : "STILL POND", "loc" : [ -76.052156, 39.327624 ], "pop" : 289, "state" : "MD" } +{ "_id" : "21668", "city" : "SUDLERSVILLE", "loc" : [ -75.849968, 39.182339 ], "pop" : 2014, "state" : "MD" } +{ "_id" : "21669", "city" : "TAYLORS ISLAND", "loc" : [ -76.296406, 38.463095 ], "pop" : 246, "state" : "MD" } +{ "_id" : "21671", "city" : "TILGHMAN", "loc" : [ -76.337653, 38.706309 ], "pop" : 745, "state" : "MD" } +{ "_id" : "21672", "city" : "TODDVILLE", "loc" : [ -76.059634, 38.272592 ], "pop" : 361, "state" : "MD" } +{ "_id" : "21673", "city" : "TRAPPE", "loc" : [ -76.05067, 38.66466 ], "pop" : 2958, "state" : "MD" } +{ "_id" : "21675", "city" : "WINGATE", "loc" : [ -76.086303, 38.289898 ], "pop" : 160, "state" : "MD" } +{ "_id" : "21676", "city" : "WITTMAN", "loc" : [ -76.29931000000001, 38.789187 ], "pop" : 338, "state" : "MD" } +{ "_id" : "21677", "city" : "WOOLFORD", "loc" : [ -76.20405700000001, 38.5066 ], "pop" : 459, "state" : "MD" } +{ "_id" : "21678", "city" : "WORTON", "loc" : [ -76.10078, 39.296346 ], "pop" : 1680, "state" : "MD" } +{ "_id" : "21679", "city" : "WYE MILLS", "loc" : [ -76.081366, 38.928114 ], "pop" : 270, "state" : "MD" } +{ "_id" : "21701", "city" : "LEWISTOWN", "loc" : [ -77.400875, 39.408235 ], "pop" : 35492, "state" : "MD" } +{ "_id" : "21702", "city" : "FORT DETRICK", "loc" : [ -77.44736899999999, 39.436532 ], "pop" : 33704, "state" : "MD" } +{ "_id" : "21710", "city" : "DOUBS", "loc" : [ -77.447693, 39.306452 ], "pop" : 2085, "state" : "MD" } +{ "_id" : "21711", "city" : "BIG POOL", "loc" : [ -78.01044899999999, 39.645685 ], "pop" : 1083, "state" : "MD" } +{ "_id" : "21713", "city" : "FAHRNEY KEEDY ME", "loc" : [ -77.683522, 39.532244 ], "pop" : 10501, "state" : "MD" } +{ "_id" : "21716", "city" : "BRUNSWICK", "loc" : [ -77.623002, 39.316356 ], "pop" : 5160, "state" : "MD" } +{ "_id" : "21718", "city" : "BURKITTSVILLE", "loc" : [ -77.626508, 39.397066 ], "pop" : 285, "state" : "MD" } +{ "_id" : "21719", "city" : "FORT RITCHIE", "loc" : [ -77.495609, 39.707341 ], "pop" : 2672, "state" : "MD" } +{ "_id" : "21722", "city" : "BIG SPRING", "loc" : [ -77.912592, 39.661693 ], "pop" : 3661, "state" : "MD" } +{ "_id" : "21723", "city" : "COOKSVILLE", "loc" : [ -77.005076, 39.321109 ], "pop" : 353, "state" : "MD" } +{ "_id" : "21725", "city" : "DETOUR", "loc" : [ -77.248272, 39.614661 ], "pop" : 970, "state" : "MD" } +{ "_id" : "21727", "city" : "EMMITSBURG", "loc" : [ -77.335658, 39.694044 ], "pop" : 5095, "state" : "MD" } +{ "_id" : "21733", "city" : "FAIR PLAY", "loc" : [ -77.76146799999999, 39.542279 ], "pop" : 153, "state" : "MD" } +{ "_id" : "21737", "city" : "GLENELG", "loc" : [ -77.005703, 39.262064 ], "pop" : 681, "state" : "MD" } +{ "_id" : "21738", "city" : "GLENWOOD", "loc" : [ -77.014821, 39.279519 ], "pop" : 1632, "state" : "MD" } +{ "_id" : "21740", "city" : "HAGERSTOWN", "loc" : [ -77.73721500000001, 39.632022 ], "pop" : 47679, "state" : "MD" } +{ "_id" : "21742", "city" : "HAGERSTOWN", "loc" : [ -77.69210200000001, 39.657291 ], "pop" : 28398, "state" : "MD" } +{ "_id" : "21750", "city" : "HANCOCK", "loc" : [ -78.17624600000001, 39.699083 ], "pop" : 4275, "state" : "MD" } +{ "_id" : "21754", "city" : "IJAMSVILLE", "loc" : [ -77.296363, 39.326737 ], "pop" : 4078, "state" : "MD" } +{ "_id" : "21755", "city" : "JEFFERSON", "loc" : [ -77.544061, 39.365291 ], "pop" : 4132, "state" : "MD" } +{ "_id" : "21756", "city" : "KEEDYSVILLE", "loc" : [ -77.694427, 39.456323 ], "pop" : 2546, "state" : "MD" } +{ "_id" : "21757", "city" : "KEYMAR", "loc" : [ -77.281661, 39.565619 ], "pop" : 1691, "state" : "MD" } +{ "_id" : "21758", "city" : "KNOXVILLE", "loc" : [ -77.651286, 39.347891 ], "pop" : 3534, "state" : "MD" } +{ "_id" : "21764", "city" : "LINWOOD", "loc" : [ -77.118443, 39.577654 ], "pop" : 591, "state" : "MD" } +{ "_id" : "21766", "city" : "LITTLE ORLEANS", "loc" : [ -78.378139, 39.687593 ], "pop" : 699, "state" : "MD" } +{ "_id" : "21767", "city" : "MAUGANSVILLE", "loc" : [ -77.749915, 39.6996 ], "pop" : 598, "state" : "MD" } +{ "_id" : "21769", "city" : "MIDDLETOWN", "loc" : [ -77.550241, 39.441586 ], "pop" : 8732, "state" : "MD" } +{ "_id" : "21770", "city" : "MONROVIA", "loc" : [ -77.249442, 39.351248 ], "pop" : 5033, "state" : "MD" } +{ "_id" : "21771", "city" : "MOUNT AIRY", "loc" : [ -77.172347, 39.388131 ], "pop" : 21912, "state" : "MD" } +{ "_id" : "21773", "city" : "MYERSVILLE", "loc" : [ -77.551322, 39.528194 ], "pop" : 3363, "state" : "MD" } +{ "_id" : "21776", "city" : "NEW WINDSOR", "loc" : [ -77.103397, 39.516233 ], "pop" : 4576, "state" : "MD" } +{ "_id" : "21777", "city" : "POINT OF ROCKS", "loc" : [ -77.53276200000001, 39.279089 ], "pop" : 812, "state" : "MD" } +{ "_id" : "21778", "city" : "ROCKY RIDGE", "loc" : [ -77.329635, 39.605696 ], "pop" : 988, "state" : "MD" } +{ "_id" : "21779", "city" : "ROHRERSVILLE", "loc" : [ -77.657977, 39.443052 ], "pop" : 200, "state" : "MD" } +{ "_id" : "21780", "city" : "SABILLASVILLE", "loc" : [ -77.469323, 39.682772 ], "pop" : 1605, "state" : "MD" } +{ "_id" : "21782", "city" : "SHARPSBURG", "loc" : [ -77.75107199999999, 39.442394 ], "pop" : 3624, "state" : "MD" } +{ "_id" : "21783", "city" : "SMITHSBURG", "loc" : [ -77.57056300000001, 39.647036 ], "pop" : 6857, "state" : "MD" } +{ "_id" : "21784", "city" : "CARROLLTOWNE", "loc" : [ -76.961439, 39.39887 ], "pop" : 28493, "state" : "MD" } +{ "_id" : "21787", "city" : "TANEYTOWN", "loc" : [ -77.16905800000001, 39.665798 ], "pop" : 7612, "state" : "MD" } +{ "_id" : "21788", "city" : "GRACEHAM", "loc" : [ -77.405114, 39.606576 ], "pop" : 8929, "state" : "MD" } +{ "_id" : "21790", "city" : "TUSCARORA", "loc" : [ -77.51011, 39.266689 ], "pop" : 134, "state" : "MD" } +{ "_id" : "21791", "city" : "UNIONVILLE", "loc" : [ -77.194346, 39.541484 ], "pop" : 3942, "state" : "MD" } +{ "_id" : "21793", "city" : "WALKERSVILLE", "loc" : [ -77.34838999999999, 39.47875 ], "pop" : 8957, "state" : "MD" } +{ "_id" : "21794", "city" : "WEST FRIENDSHIP", "loc" : [ -76.966031, 39.293447 ], "pop" : 937, "state" : "MD" } +{ "_id" : "21795", "city" : "WILLIAMSPORT", "loc" : [ -77.808705, 39.593023 ], "pop" : 8739, "state" : "MD" } +{ "_id" : "21797", "city" : "WOODBINE", "loc" : [ -77.06469800000001, 39.346438 ], "pop" : 6224, "state" : "MD" } +{ "_id" : "21798", "city" : "WOODSBORO", "loc" : [ -77.29718699999999, 39.531121 ], "pop" : 1771, "state" : "MD" } +{ "_id" : "21801", "city" : "SALISBURY", "loc" : [ -75.59223799999999, 38.362996 ], "pop" : 52905, "state" : "MD" } +{ "_id" : "21811", "city" : "BERLIN", "loc" : [ -75.18655699999999, 38.347514 ], "pop" : 11613, "state" : "MD" } +{ "_id" : "21813", "city" : "BISHOPVILLE", "loc" : [ -75.18554399999999, 38.429609 ], "pop" : 1902, "state" : "MD" } +{ "_id" : "21814", "city" : "BIVALVE", "loc" : [ -75.89140999999999, 38.295337 ], "pop" : 307, "state" : "MD" } +{ "_id" : "21816", "city" : "CHANCE", "loc" : [ -75.93919200000001, 38.178504 ], "pop" : 415, "state" : "MD" } +{ "_id" : "21817", "city" : "CRISFIELD", "loc" : [ -75.842882, 37.984496 ], "pop" : 5342, "state" : "MD" } +{ "_id" : "21820", "city" : "DAMES QUARTER", "loc" : [ -75.900082, 38.190568 ], "pop" : 192, "state" : "MD" } +{ "_id" : "21821", "city" : "DEAL ISLAND", "loc" : [ -75.94955899999999, 38.153326 ], "pop" : 259, "state" : "MD" } +{ "_id" : "21822", "city" : "EDEN", "loc" : [ -75.648167, 38.276155 ], "pop" : 1042, "state" : "MD" } +{ "_id" : "21824", "city" : "EWELL", "loc" : [ -76.03506, 37.99379 ], "pop" : 252, "state" : "MD" } +{ "_id" : "21826", "city" : "FRUITLAND", "loc" : [ -75.622782, 38.322523 ], "pop" : 3771, "state" : "MD" } +{ "_id" : "21829", "city" : "GIRDLETREE", "loc" : [ -75.390232, 38.095815 ], "pop" : 495, "state" : "MD" } +{ "_id" : "21830", "city" : "HEBRON", "loc" : [ -75.69626700000001, 38.402597 ], "pop" : 2415, "state" : "MD" } +{ "_id" : "21835", "city" : "LINKWOOD", "loc" : [ -75.963015, 38.540317 ], "pop" : 576, "state" : "MD" } +{ "_id" : "21837", "city" : "MARDELA SPRINGS", "loc" : [ -75.74144200000001, 38.486386 ], "pop" : 3039, "state" : "MD" } +{ "_id" : "21838", "city" : "MARION STATION", "loc" : [ -75.757903, 38.026637 ], "pop" : 2323, "state" : "MD" } +{ "_id" : "21840", "city" : "NANTICOKE", "loc" : [ -75.90212699999999, 38.267211 ], "pop" : 358, "state" : "MD" } +{ "_id" : "21841", "city" : "NEWARK", "loc" : [ -75.289316, 38.248875 ], "pop" : 765, "state" : "MD" } +{ "_id" : "21842", "city" : "OCEAN CITY", "loc" : [ -75.081011, 38.379248 ], "pop" : 6914, "state" : "MD" } +{ "_id" : "21849", "city" : "PARSONSBURG", "loc" : [ -75.473658, 38.391392 ], "pop" : 2407, "state" : "MD" } +{ "_id" : "21850", "city" : "PITTSVILLE", "loc" : [ -75.407589, 38.375465 ], "pop" : 1997, "state" : "MD" } +{ "_id" : "21851", "city" : "POCOMOKE CITY", "loc" : [ -75.555038, 38.071369 ], "pop" : 7527, "state" : "MD" } +{ "_id" : "21853", "city" : "PRINCESS ANNE", "loc" : [ -75.70723700000001, 38.191929 ], "pop" : 10343, "state" : "MD" } +{ "_id" : "21856", "city" : "QUANTICO", "loc" : [ -75.78510199999999, 38.333888 ], "pop" : 1029, "state" : "MD" } +{ "_id" : "21863", "city" : "SNOW HILL", "loc" : [ -75.40498700000001, 38.186794 ], "pop" : 5195, "state" : "MD" } +{ "_id" : "21864", "city" : "STOCKTON", "loc" : [ -75.41076200000001, 38.045155 ], "pop" : 691, "state" : "MD" } +{ "_id" : "21865", "city" : "TYASKIN", "loc" : [ -75.869032, 38.30706 ], "pop" : 504, "state" : "MD" } +{ "_id" : "21866", "city" : "TYLERTON", "loc" : [ -76.023036, 37.967436 ], "pop" : 112, "state" : "MD" } +{ "_id" : "21869", "city" : "VIENNA", "loc" : [ -75.87292600000001, 38.477376 ], "pop" : 1119, "state" : "MD" } +{ "_id" : "21870", "city" : "WENONA", "loc" : [ -75.94402100000001, 38.133222 ], "pop" : 358, "state" : "MD" } +{ "_id" : "21871", "city" : "WESTOVER", "loc" : [ -75.74056299999999, 38.10099 ], "pop" : 1881, "state" : "MD" } +{ "_id" : "21872", "city" : "WHALEYSVILLE", "loc" : [ -75.28886799999999, 38.404169 ], "pop" : 758, "state" : "MD" } +{ "_id" : "21874", "city" : "WILLARDS", "loc" : [ -75.355161, 38.393853 ], "pop" : 1895, "state" : "MD" } +{ "_id" : "21875", "city" : "DELMAR", "loc" : [ -75.55828, 38.44451 ], "pop" : 3712, "state" : "MD" } +{ "_id" : "21901", "city" : "NORTH EAST", "loc" : [ -75.953805, 39.604535 ], "pop" : 10560, "state" : "MD" } +{ "_id" : "21903", "city" : "PERRYVILLE", "loc" : [ -76.05922700000001, 39.564894 ], "pop" : 4678, "state" : "MD" } +{ "_id" : "21904", "city" : "BAINBRIDGE", "loc" : [ -76.08370600000001, 39.622264 ], "pop" : 5507, "state" : "MD" } +{ "_id" : "21911", "city" : "RISING SUN", "loc" : [ -76.049164, 39.688176 ], "pop" : 7798, "state" : "MD" } +{ "_id" : "21912", "city" : "WARWICK", "loc" : [ -75.799592, 39.428261 ], "pop" : 745, "state" : "MD" } +{ "_id" : "21913", "city" : "CECILTON", "loc" : [ -75.86539500000001, 39.40151 ], "pop" : 611, "state" : "MD" } +{ "_id" : "21914", "city" : "CHARLESTOWN", "loc" : [ -75.97953699999999, 39.57287 ], "pop" : 638, "state" : "MD" } +{ "_id" : "21915", "city" : "CHESAPEAKE CITY", "loc" : [ -75.840581, 39.513308 ], "pop" : 2823, "state" : "MD" } +{ "_id" : "21917", "city" : "COLORA", "loc" : [ -76.09336399999999, 39.669515 ], "pop" : 1868, "state" : "MD" } +{ "_id" : "21918", "city" : "CONOWINGO", "loc" : [ -76.15719799999999, 39.67775 ], "pop" : 3025, "state" : "MD" } +{ "_id" : "21919", "city" : "EARLEVILLE", "loc" : [ -75.94031, 39.427105 ], "pop" : 2196, "state" : "MD" } +{ "_id" : "21921", "city" : "ELKTON", "loc" : [ -75.84584, 39.626434 ], "pop" : 30901, "state" : "MD" } +{ "_id" : "22001", "city" : "ALDIE", "loc" : [ -77.602281, 38.957878 ], "pop" : 1574, "state" : "VA" } +{ "_id" : "22002", "city" : "AMISSVILLE", "loc" : [ -78.038053, 38.710055 ], "pop" : 1581, "state" : "VA" } +{ "_id" : "22003", "city" : "ANNANDALE", "loc" : [ -77.21424500000001, 38.830699 ], "pop" : 50054, "state" : "VA" } +{ "_id" : "22010", "city" : "ARCOLA", "loc" : [ -77.538721, 38.973626 ], "pop" : 61, "state" : "VA" } +{ "_id" : "22011", "city" : "ASHBURN", "loc" : [ -77.48061199999999, 39.039918 ], "pop" : 3979, "state" : "VA" } +{ "_id" : "22012", "city" : "BLUEMONT", "loc" : [ -77.831416, 39.097732 ], "pop" : 557, "state" : "VA" } +{ "_id" : "22013", "city" : "BRISTOW", "loc" : [ -77.57884300000001, 38.74644 ], "pop" : 1568, "state" : "VA" } +{ "_id" : "22014", "city" : "BROAD RUN", "loc" : [ -77.68611, 38.828653 ], "pop" : 344, "state" : "VA" } +{ "_id" : "22015", "city" : "BURKE", "loc" : [ -77.28175, 38.789408 ], "pop" : 41783, "state" : "VA" } +{ "_id" : "22018", "city" : "CATHARPIN", "loc" : [ -77.561155, 38.853007 ], "pop" : 647, "state" : "VA" } +{ "_id" : "22019", "city" : "CATLETT", "loc" : [ -77.653548, 38.635067 ], "pop" : 4180, "state" : "VA" } +{ "_id" : "22020", "city" : "CENTREVILLE", "loc" : [ -77.45117500000001, 38.841805 ], "pop" : 33039, "state" : "VA" } +{ "_id" : "22021", "city" : "CHANTILLY", "loc" : [ -77.435436, 38.884131 ], "pop" : 14835, "state" : "VA" } +{ "_id" : "22024", "city" : "CLIFTON", "loc" : [ -77.406955, 38.800662 ], "pop" : 9554, "state" : "VA" } +{ "_id" : "22025", "city" : "DELAPLANE", "loc" : [ -77.930176, 38.911293 ], "pop" : 916, "state" : "VA" } +{ "_id" : "22026", "city" : "DUMFRIES", "loc" : [ -77.33870400000001, 38.602344 ], "pop" : 17563, "state" : "VA" } +{ "_id" : "22027", "city" : "DUNN LORING", "loc" : [ -77.221351, 38.895368 ], "pop" : 1084, "state" : "VA" } +{ "_id" : "22030", "city" : "FAIRFAX", "loc" : [ -77.324151, 38.845826 ], "pop" : 32754, "state" : "VA" } +{ "_id" : "22031", "city" : "FAIRFAX", "loc" : [ -77.264937, 38.860353 ], "pop" : 22035, "state" : "VA" } +{ "_id" : "22032", "city" : "FAIRFAX", "loc" : [ -77.29252700000001, 38.817729 ], "pop" : 29971, "state" : "VA" } +{ "_id" : "22033", "city" : "FAIRFAX", "loc" : [ -77.388451, 38.877627 ], "pop" : 20873, "state" : "VA" } +{ "_id" : "22039", "city" : "FAIRFAX STATION", "loc" : [ -77.306388, 38.760205 ], "pop" : 14491, "state" : "VA" } +{ "_id" : "22041", "city" : "BAILEYS CROSSROA", "loc" : [ -77.136928, 38.848506 ], "pop" : 21801, "state" : "VA" } +{ "_id" : "22042", "city" : "MOSBY", "loc" : [ -77.19227100000001, 38.866272 ], "pop" : 28441, "state" : "VA" } +{ "_id" : "22043", "city" : "PIMMIT", "loc" : [ -77.20005, 38.901226 ], "pop" : 20928, "state" : "VA" } +{ "_id" : "22044", "city" : "SEVEN CORNERS", "loc" : [ -77.150819, 38.863544 ], "pop" : 10100, "state" : "VA" } +{ "_id" : "22046", "city" : "FALLS CHURCH", "loc" : [ -77.18023100000001, 38.88559 ], "pop" : 14864, "state" : "VA" } +{ "_id" : "22060", "city" : "FORT BELVOIR", "loc" : [ -77.143315, 38.694699 ], "pop" : 6013, "state" : "VA" } +{ "_id" : "22065", "city" : "GAINESVILLE", "loc" : [ -77.618673, 38.823192 ], "pop" : 3929, "state" : "VA" } +{ "_id" : "22066", "city" : "GREAT FALLS", "loc" : [ -77.30828700000001, 39.003893 ], "pop" : 13542, "state" : "VA" } +{ "_id" : "22068", "city" : "HAMILTON", "loc" : [ -77.663538, 39.135741 ], "pop" : 2821, "state" : "VA" } +{ "_id" : "22069", "city" : "HAYMARKET", "loc" : [ -77.647485, 38.876234 ], "pop" : 5103, "state" : "VA" } +{ "_id" : "22070", "city" : "HERNDON", "loc" : [ -77.386573, 38.977833 ], "pop" : 30669, "state" : "VA" } +{ "_id" : "22071", "city" : "HERNDON", "loc" : [ -77.395155, 38.919537 ], "pop" : 21490, "state" : "VA" } +{ "_id" : "22075", "city" : "LEESBURG", "loc" : [ -77.565918, 39.116517 ], "pop" : 21011, "state" : "VA" } +{ "_id" : "22079", "city" : "MASON NECK", "loc" : [ -77.21800399999999, 38.704716 ], "pop" : 17438, "state" : "VA" } +{ "_id" : "22080", "city" : "LOVETTSVILLE", "loc" : [ -77.639144, 39.265367 ], "pop" : 3631, "state" : "VA" } +{ "_id" : "22090", "city" : "LAKE ANNE", "loc" : [ -77.33760700000001, 38.964439 ], "pop" : 12710, "state" : "VA" } +{ "_id" : "22091", "city" : "RESTON", "loc" : [ -77.35144, 38.935007 ], "pop" : 28381, "state" : "VA" } +{ "_id" : "22094", "city" : "RESTON", "loc" : [ -77.350757, 38.975627 ], "pop" : 5491, "state" : "VA" } +{ "_id" : "22101", "city" : "MC LEAN", "loc" : [ -77.17062799999999, 38.932624 ], "pop" : 27236, "state" : "VA" } +{ "_id" : "22102", "city" : "WEST MCLEAN", "loc" : [ -77.221934, 38.936318 ], "pop" : 15809, "state" : "VA" } +{ "_id" : "22110", "city" : "MANASSAS", "loc" : [ -77.489474, 38.768922 ], "pop" : 50680, "state" : "VA" } +{ "_id" : "22111", "city" : "MANASSAS PARK", "loc" : [ -77.44568, 38.736143 ], "pop" : 32739, "state" : "VA" } +{ "_id" : "22115", "city" : "MARSHALL", "loc" : [ -77.887567, 38.831584 ], "pop" : 5195, "state" : "VA" } +{ "_id" : "22117", "city" : "MIDDLEBURG", "loc" : [ -77.735511, 38.996438 ], "pop" : 2908, "state" : "VA" } +{ "_id" : "22123", "city" : "NOKESVILLE", "loc" : [ -77.534249, 38.685015 ], "pop" : 6729, "state" : "VA" } +{ "_id" : "22124", "city" : "OAKTON", "loc" : [ -77.323345, 38.885187 ], "pop" : 13019, "state" : "VA" } +{ "_id" : "22129", "city" : "PAEONIAN SPRINGS", "loc" : [ -77.619845, 39.159792 ], "pop" : 488, "state" : "VA" } +{ "_id" : "22130", "city" : "PARIS", "loc" : [ -77.893855, 38.989926 ], "pop" : 317, "state" : "VA" } +{ "_id" : "22132", "city" : "HILLSBORO", "loc" : [ -77.721305, 39.150484 ], "pop" : 5373, "state" : "VA" } +{ "_id" : "22134", "city" : "QUANTICO", "loc" : [ -77.335819, 38.531039 ], "pop" : 9039, "state" : "VA" } +{ "_id" : "22141", "city" : "ROUND HILL", "loc" : [ -77.783305, 39.113378 ], "pop" : 1926, "state" : "VA" } +{ "_id" : "22150", "city" : "SPRINGFIELD", "loc" : [ -77.186582, 38.779718 ], "pop" : 16811, "state" : "VA" } +{ "_id" : "22151", "city" : "NORTH SPRINGFIEL", "loc" : [ -77.213908, 38.803323 ], "pop" : 15979, "state" : "VA" } +{ "_id" : "22152", "city" : "WEST SPRINGFIELD", "loc" : [ -77.233243, 38.776488 ], "pop" : 26803, "state" : "VA" } +{ "_id" : "22153", "city" : "SPRINGFIELD", "loc" : [ -77.237026, 38.744859 ], "pop" : 32161, "state" : "VA" } +{ "_id" : "22170", "city" : "STERLING", "loc" : [ -77.398624, 39.02147 ], "pop" : 38891, "state" : "VA" } +{ "_id" : "22171", "city" : "THE PLAINS", "loc" : [ -77.772092, 38.87393 ], "pop" : 2071, "state" : "VA" } +{ "_id" : "22172", "city" : "TRIANGLE", "loc" : [ -77.32287700000001, 38.550894 ], "pop" : 5181, "state" : "VA" } +{ "_id" : "22176", "city" : "UPPERVILLE", "loc" : [ -77.848438, 39.008747 ], "pop" : 755, "state" : "VA" } +{ "_id" : "22180", "city" : "VIENNA", "loc" : [ -77.253219, 38.893527 ], "pop" : 20795, "state" : "VA" } +{ "_id" : "22181", "city" : "VIENNA", "loc" : [ -77.288048, 38.897695 ], "pop" : 12462, "state" : "VA" } +{ "_id" : "22182", "city" : "VIENNA", "loc" : [ -77.264876, 38.928005 ], "pop" : 19121, "state" : "VA" } +{ "_id" : "22186", "city" : "AIRLIE", "loc" : [ -77.764809, 38.72593 ], "pop" : 24248, "state" : "VA" } +{ "_id" : "22190", "city" : "WATERFORD", "loc" : [ -77.642134, 39.208102 ], "pop" : 264, "state" : "VA" } +{ "_id" : "22191", "city" : "WOODBRIDGE", "loc" : [ -77.268264, 38.635573 ], "pop" : 30657, "state" : "VA" } +{ "_id" : "22192", "city" : "LAKERIDGE", "loc" : [ -77.305221, 38.68328 ], "pop" : 38960, "state" : "VA" } +{ "_id" : "22193", "city" : "DALE CITY", "loc" : [ -77.343238, 38.647188 ], "pop" : 47213, "state" : "VA" } +{ "_id" : "22201", "city" : "ARLINGTON", "loc" : [ -77.093197, 38.887103 ], "pop" : 22034, "state" : "VA" } +{ "_id" : "22202", "city" : "ARLINGTON", "loc" : [ -77.059228, 38.856547 ], "pop" : 17453, "state" : "VA" } +{ "_id" : "22203", "city" : "ARLINGTON", "loc" : [ -77.11419100000001, 38.873799 ], "pop" : 14553, "state" : "VA" } +{ "_id" : "22204", "city" : "ARLINGTON", "loc" : [ -77.099688, 38.858962 ], "pop" : 41844, "state" : "VA" } +{ "_id" : "22205", "city" : "ARLINGTON", "loc" : [ -77.139488, 38.883557 ], "pop" : 15285, "state" : "VA" } +{ "_id" : "22206", "city" : "ARLINGTON", "loc" : [ -77.09045999999999, 38.841508 ], "pop" : 17628, "state" : "VA" } +{ "_id" : "22207", "city" : "ARLINGTON", "loc" : [ -77.126287, 38.903321 ], "pop" : 27999, "state" : "VA" } +{ "_id" : "22209", "city" : "ARLINGTON", "loc" : [ -77.07531, 38.8926 ], "pop" : 10118, "state" : "VA" } +{ "_id" : "22211", "city" : "ARLINGTON", "loc" : [ -77.080258, 38.8795 ], "pop" : 2432, "state" : "VA" } +{ "_id" : "22213", "city" : "ARLINGTON", "loc" : [ -77.16329500000001, 38.895375 ], "pop" : 2095, "state" : "VA" } +{ "_id" : "22301", "city" : "ALEXANDRIA", "loc" : [ -77.05890100000001, 38.820042 ], "pop" : 12109, "state" : "VA" } +{ "_id" : "22302", "city" : "ALEXANDRIA", "loc" : [ -77.092412, 38.83354 ], "pop" : 17021, "state" : "VA" } +{ "_id" : "22303", "city" : "JEFFERSON MANOR", "loc" : [ -77.07660799999999, 38.791143 ], "pop" : 12662, "state" : "VA" } +{ "_id" : "22304", "city" : "ALEXANDRIA", "loc" : [ -77.12098899999999, 38.814871 ], "pop" : 33747, "state" : "VA" } +{ "_id" : "22305", "city" : "ALEXANDRIA", "loc" : [ -77.06403899999999, 38.837184 ], "pop" : 13514, "state" : "VA" } +{ "_id" : "22306", "city" : "COMMUNITY", "loc" : [ -77.08538900000001, 38.755769 ], "pop" : 24374, "state" : "VA" } +{ "_id" : "22307", "city" : "BELLE VIEW", "loc" : [ -77.062511, 38.77056 ], "pop" : 9821, "state" : "VA" } +{ "_id" : "22308", "city" : "WELLINGTON", "loc" : [ -77.06063899999999, 38.729122 ], "pop" : 12023, "state" : "VA" } +{ "_id" : "22309", "city" : "ENGLESIDE", "loc" : [ -77.10813899999999, 38.727855 ], "pop" : 27479, "state" : "VA" } +{ "_id" : "22310", "city" : "FRANCONIA", "loc" : [ -77.13170700000001, 38.769132 ], "pop" : 39438, "state" : "VA" } +{ "_id" : "22311", "city" : "ALEXANDRIA", "loc" : [ -77.119962, 38.832039 ], "pop" : 11388, "state" : "VA" } +{ "_id" : "22312", "city" : "ALEXANDRIA", "loc" : [ -77.148438, 38.819099 ], "pop" : 23848, "state" : "VA" } +{ "_id" : "22314", "city" : "ALEXANDRIA", "loc" : [ -77.05286700000001, 38.806018 ], "pop" : 20606, "state" : "VA" } +{ "_id" : "22401", "city" : "FREDERICKSBURG", "loc" : [ -77.477152, 38.299538 ], "pop" : 19027, "state" : "VA" } +{ "_id" : "22405", "city" : "FALMOUTH", "loc" : [ -77.404537, 38.314557 ], "pop" : 20039, "state" : "VA" } +{ "_id" : "22406", "city" : "FREDERICKSBURG", "loc" : [ -77.534892, 38.379627 ], "pop" : 7583, "state" : "VA" } +{ "_id" : "22407", "city" : "FREDERICKSBURG", "loc" : [ -77.547584, 38.268803 ], "pop" : 27852, "state" : "VA" } +{ "_id" : "22408", "city" : "FREDERICKSBURG", "loc" : [ -77.468068, 38.248141 ], "pop" : 9433, "state" : "VA" } +{ "_id" : "22427", "city" : "BOWLING GREEN", "loc" : [ -77.18024200000001, 38.013651 ], "pop" : 559, "state" : "VA" } +{ "_id" : "22432", "city" : "BURGESS", "loc" : [ -76.354164, 37.868682 ], "pop" : 478, "state" : "VA" } +{ "_id" : "22433", "city" : "BURR HILL", "loc" : [ -77.876166, 38.365841 ], "pop" : 121, "state" : "VA" } +{ "_id" : "22435", "city" : "CALLAO", "loc" : [ -76.573245, 37.977268 ], "pop" : 1808, "state" : "VA" } +{ "_id" : "22436", "city" : "CARET", "loc" : [ -76.915254, 37.971255 ], "pop" : 675, "state" : "VA" } +{ "_id" : "22437", "city" : "CENTER CROSS", "loc" : [ -76.75483699999999, 37.792875 ], "pop" : 408, "state" : "VA" } +{ "_id" : "22438", "city" : "CHAMPLAIN", "loc" : [ -76.971942, 38.021422 ], "pop" : 187, "state" : "VA" } +{ "_id" : "22439", "city" : "CHANCE", "loc" : [ -77.021051, 38.084061 ], "pop" : 45, "state" : "VA" } +{ "_id" : "22443", "city" : "OAK GROVE", "loc" : [ -76.98115799999999, 38.229076 ], "pop" : 6864, "state" : "VA" } +{ "_id" : "22448", "city" : "DAHLGREN", "loc" : [ -77.042905, 38.337485 ], "pop" : 1509, "state" : "VA" } +{ "_id" : "22454", "city" : "HOWERTONS", "loc" : [ -76.837022, 37.840429 ], "pop" : 1795, "state" : "VA" } +{ "_id" : "22460", "city" : "FARNHAM", "loc" : [ -76.605011, 37.873972 ], "pop" : 1356, "state" : "VA" } +{ "_id" : "22469", "city" : "HAGUE", "loc" : [ -76.661574, 38.057289 ], "pop" : 2243, "state" : "VA" } +{ "_id" : "22473", "city" : "HEATHSVILLE", "loc" : [ -76.41783, 37.907187 ], "pop" : 2670, "state" : "VA" } +{ "_id" : "22476", "city" : "HUSTLE", "loc" : [ -77.03642600000001, 38.022219 ], "pop" : 782, "state" : "VA" } +{ "_id" : "22480", "city" : "IRVINGTON", "loc" : [ -76.416016, 37.664516 ], "pop" : 717, "state" : "VA" } +{ "_id" : "22482", "city" : "KILMARNOCK", "loc" : [ -76.381986, 37.716222 ], "pop" : 1436, "state" : "VA" } +{ "_id" : "22485", "city" : "KING GEORGE", "loc" : [ -77.126023, 38.281142 ], "pop" : 9088, "state" : "VA" } +{ "_id" : "22488", "city" : "KINSALE", "loc" : [ -76.585525, 38.050472 ], "pop" : 1537, "state" : "VA" } +{ "_id" : "22503", "city" : "LANCASTER", "loc" : [ -76.5102, 37.750091 ], "pop" : 4140, "state" : "VA" } +{ "_id" : "22504", "city" : "LANEVIEW", "loc" : [ -76.711732, 37.768138 ], "pop" : 179, "state" : "VA" } +{ "_id" : "22508", "city" : "LOCUST GROVE", "loc" : [ -77.77087400000001, 38.335202 ], "pop" : 4357, "state" : "VA" } +{ "_id" : "22509", "city" : "LORETTO", "loc" : [ -76.966888, 38.062055 ], "pop" : 38, "state" : "VA" } +{ "_id" : "22511", "city" : "LOTTSBURG", "loc" : [ -76.501763, 37.979228 ], "pop" : 1250, "state" : "VA" } +{ "_id" : "22514", "city" : "MILFORD", "loc" : [ -77.31849800000001, 38.005834 ], "pop" : 3385, "state" : "VA" } +{ "_id" : "22520", "city" : "MONTROSS", "loc" : [ -76.78280599999999, 38.110483 ], "pop" : 4836, "state" : "VA" } +{ "_id" : "22534", "city" : "PARTLOW", "loc" : [ -77.658574, 38.064146 ], "pop" : 2057, "state" : "VA" } +{ "_id" : "22535", "city" : "PORT ROYAL", "loc" : [ -77.183657, 38.162088 ], "pop" : 421, "state" : "VA" } +{ "_id" : "22538", "city" : "RAPPAHANNOCK ACA", "loc" : [ -77.287437, 38.201817 ], "pop" : 637, "state" : "VA" } +{ "_id" : "22539", "city" : "REEDVILLE", "loc" : [ -76.282864, 37.856964 ], "pop" : 2037, "state" : "VA" } +{ "_id" : "22542", "city" : "RHOADESVILLE", "loc" : [ -77.923044, 38.286324 ], "pop" : 1072, "state" : "VA" } +{ "_id" : "22546", "city" : "RUTHER GLEN", "loc" : [ -77.47135, 37.945059 ], "pop" : 7242, "state" : "VA" } +{ "_id" : "22553", "city" : "SNELL", "loc" : [ -77.64868800000001, 38.19953 ], "pop" : 17034, "state" : "VA" } +{ "_id" : "22554", "city" : "STAFFORD", "loc" : [ -77.430618, 38.458629 ], "pop" : 36544, "state" : "VA" } +{ "_id" : "22559", "city" : "SUPPLY", "loc" : [ -77.109689, 38.082544 ], "pop" : 387, "state" : "VA" } +{ "_id" : "22560", "city" : "TAPPAHANNOCK", "loc" : [ -76.91245499999999, 37.914551 ], "pop" : 4270, "state" : "VA" } +{ "_id" : "22567", "city" : "UNIONVILLE", "loc" : [ -77.919299, 38.238302 ], "pop" : 1754, "state" : "VA" } +{ "_id" : "22568", "city" : "MINE RUN", "loc" : [ -77.81949299999999, 38.266106 ], "pop" : 314, "state" : "VA" } +{ "_id" : "22572", "city" : "NOMINI GROVE", "loc" : [ -76.73651700000001, 37.949992 ], "pop" : 5917, "state" : "VA" } +{ "_id" : "22576", "city" : "WEEMS", "loc" : [ -76.43132300000001, 37.684678 ], "pop" : 2125, "state" : "VA" } +{ "_id" : "22578", "city" : "WINDMILL POINT", "loc" : [ -76.36862600000001, 37.647458 ], "pop" : 2474, "state" : "VA" } +{ "_id" : "22579", "city" : "WICOMICO CHURCH", "loc" : [ -76.356522, 37.779027 ], "pop" : 2285, "state" : "VA" } +{ "_id" : "22580", "city" : "WOODFORD", "loc" : [ -77.439879, 38.084664 ], "pop" : 6047, "state" : "VA" } +{ "_id" : "22601", "city" : "WINCHESTER", "loc" : [ -78.182697, 39.185803 ], "pop" : 45537, "state" : "VA" } +{ "_id" : "22610", "city" : "BROWNTOWN", "loc" : [ -78.279111, 38.827272 ], "pop" : 1522, "state" : "VA" } +{ "_id" : "22611", "city" : "BERRYVILLE", "loc" : [ -77.96875900000001, 39.153178 ], "pop" : 8339, "state" : "VA" } +{ "_id" : "22620", "city" : "BOYCE", "loc" : [ -78.020302, 39.069797 ], "pop" : 2984, "state" : "VA" } +{ "_id" : "22624", "city" : "CLEAR BROOK", "loc" : [ -78.098788, 39.265461 ], "pop" : 2656, "state" : "VA" } +{ "_id" : "22625", "city" : "WHITACRE", "loc" : [ -78.299724, 39.3762 ], "pop" : 1229, "state" : "VA" } +{ "_id" : "22627", "city" : "FLINT HILL", "loc" : [ -78.075558, 38.733653 ], "pop" : 276, "state" : "VA" } +{ "_id" : "22630", "city" : "FRONT ROYAL", "loc" : [ -78.17961699999999, 38.926783 ], "pop" : 22951, "state" : "VA" } +{ "_id" : "22637", "city" : "GORE", "loc" : [ -78.34168699999999, 39.288685 ], "pop" : 2000, "state" : "VA" } +{ "_id" : "22639", "city" : "HUME", "loc" : [ -77.99489199999999, 38.827318 ], "pop" : 517, "state" : "VA" } +{ "_id" : "22640", "city" : "HUNTLY", "loc" : [ -78.130104, 38.813333 ], "pop" : 782, "state" : "VA" } +{ "_id" : "22641", "city" : "LEBANON CHURCH", "loc" : [ -78.359511, 39.056242 ], "pop" : 1075, "state" : "VA" } +{ "_id" : "22642", "city" : "LINDEN", "loc" : [ -78.047847, 38.881181 ], "pop" : 352, "state" : "VA" } +{ "_id" : "22643", "city" : "MARKHAM", "loc" : [ -77.994252, 38.930001 ], "pop" : 429, "state" : "VA" } +{ "_id" : "22644", "city" : "MAURERTOWN", "loc" : [ -78.46581500000001, 38.944052 ], "pop" : 1483, "state" : "VA" } +{ "_id" : "22645", "city" : "MIDDLETOWN", "loc" : [ -78.28145499999999, 39.036676 ], "pop" : 2239, "state" : "VA" } +{ "_id" : "22649", "city" : "RELIANCE", "loc" : [ -78.249152, 39.000946 ], "pop" : 145, "state" : "VA" } +{ "_id" : "22650", "city" : "RILEYVILLE", "loc" : [ -78.387326, 38.756374 ], "pop" : 997, "state" : "VA" } +{ "_id" : "22652", "city" : "SAINT DAVIDS CHU", "loc" : [ -78.439989, 38.827683 ], "pop" : 1004, "state" : "VA" } +{ "_id" : "22654", "city" : "STAR TANNERY", "loc" : [ -78.43430600000001, 39.090803 ], "pop" : 332, "state" : "VA" } +{ "_id" : "22655", "city" : "STEPHENS CITY", "loc" : [ -78.19067699999999, 39.083415 ], "pop" : 10954, "state" : "VA" } +{ "_id" : "22656", "city" : "STEPHENSON", "loc" : [ -78.094105, 39.197285 ], "pop" : 2721, "state" : "VA" } +{ "_id" : "22657", "city" : "STRASBURG", "loc" : [ -78.33862000000001, 38.988417 ], "pop" : 5756, "state" : "VA" } +{ "_id" : "22660", "city" : "TOMS BROOK", "loc" : [ -78.403757, 38.97016 ], "pop" : 2796, "state" : "VA" } +{ "_id" : "22663", "city" : "WHITE POST", "loc" : [ -78.11046, 39.057956 ], "pop" : 778, "state" : "VA" } +{ "_id" : "22664", "city" : "WOODSTOCK", "loc" : [ -78.521704, 38.887024 ], "pop" : 6899, "state" : "VA" } +{ "_id" : "22701", "city" : "RACCOON FORD", "loc" : [ -78.00406, 38.48115 ], "pop" : 21359, "state" : "VA" } +{ "_id" : "22709", "city" : "ARODA", "loc" : [ -78.236615, 38.325626 ], "pop" : 1509, "state" : "VA" } +{ "_id" : "22712", "city" : "MORRISVILLE", "loc" : [ -77.800436, 38.569667 ], "pop" : 3863, "state" : "VA" } +{ "_id" : "22713", "city" : "BOSTON", "loc" : [ -78.142285, 38.538241 ], "pop" : 557, "state" : "VA" } +{ "_id" : "22714", "city" : "BRANDY STATION", "loc" : [ -77.903745, 38.511003 ], "pop" : 721, "state" : "VA" } +{ "_id" : "22715", "city" : "BRIGHTWOOD", "loc" : [ -78.16980100000001, 38.411365 ], "pop" : 1048, "state" : "VA" } +{ "_id" : "22716", "city" : "CASTLETON", "loc" : [ -78.120801, 38.603235 ], "pop" : 536, "state" : "VA" } +{ "_id" : "22718", "city" : "ELKWOOD", "loc" : [ -77.817031, 38.465229 ], "pop" : 414, "state" : "VA" } +{ "_id" : "22719", "city" : "ETLAN", "loc" : [ -78.26379300000001, 38.509458 ], "pop" : 167, "state" : "VA" } +{ "_id" : "22720", "city" : "GOLDVEIN", "loc" : [ -77.639488, 38.488641 ], "pop" : 1154, "state" : "VA" } +{ "_id" : "22722", "city" : "HAYWOOD", "loc" : [ -78.179759, 38.46861 ], "pop" : 139, "state" : "VA" } +{ "_id" : "22724", "city" : "JEFFERSONTON", "loc" : [ -77.906943, 38.625578 ], "pop" : 1000, "state" : "VA" } +{ "_id" : "22725", "city" : "LEON", "loc" : [ -78.154579, 38.45724 ], "pop" : 109, "state" : "VA" } +{ "_id" : "22726", "city" : "LIGNUM", "loc" : [ -77.82995699999999, 38.395625 ], "pop" : 176, "state" : "VA" } +{ "_id" : "22727", "city" : "AYLOR", "loc" : [ -78.296458, 38.384495 ], "pop" : 4344, "state" : "VA" } +{ "_id" : "22728", "city" : "MIDLAND", "loc" : [ -77.712709, 38.567061 ], "pop" : 1847, "state" : "VA" } +{ "_id" : "22729", "city" : "MITCHELLS", "loc" : [ -78.01054600000001, 38.374429 ], "pop" : 39, "state" : "VA" } +{ "_id" : "22731", "city" : "PRATTS", "loc" : [ -78.272212, 38.349207 ], "pop" : 88, "state" : "VA" } +{ "_id" : "22732", "city" : "RADIANT", "loc" : [ -78.179799, 38.322706 ], "pop" : 756, "state" : "VA" } +{ "_id" : "22733", "city" : "RAPIDAN", "loc" : [ -78.047607, 38.339217 ], "pop" : 1216, "state" : "VA" } +{ "_id" : "22734", "city" : "REMINGTON", "loc" : [ -77.761365, 38.535091 ], "pop" : 2377, "state" : "VA" } +{ "_id" : "22735", "city" : "REVA", "loc" : [ -78.157195, 38.460446 ], "pop" : 2134, "state" : "VA" } +{ "_id" : "22736", "city" : "RICHARDSVILLE", "loc" : [ -77.71951900000001, 38.392388 ], "pop" : 238, "state" : "VA" } +{ "_id" : "22737", "city" : "RIXEYVILLE", "loc" : [ -78.028229, 38.585168 ], "pop" : 2540, "state" : "VA" } +{ "_id" : "22738", "city" : "UNO", "loc" : [ -78.26535800000001, 38.274342 ], "pop" : 477, "state" : "VA" } +{ "_id" : "22740", "city" : "SPERRYVILLE", "loc" : [ -78.246571, 38.620252 ], "pop" : 1553, "state" : "VA" } +{ "_id" : "22741", "city" : "STEVENSBURG", "loc" : [ -77.88423, 38.444135 ], "pop" : 220, "state" : "VA" } +{ "_id" : "22742", "city" : "SUMERDUCK", "loc" : [ -77.70435999999999, 38.467355 ], "pop" : 1146, "state" : "VA" } +{ "_id" : "22743", "city" : "SYRIA", "loc" : [ -78.32293900000001, 38.497229 ], "pop" : 526, "state" : "VA" } +{ "_id" : "22746", "city" : "VIEWTOWN", "loc" : [ -78.025769, 38.645704 ], "pop" : 172, "state" : "VA" } +{ "_id" : "22747", "city" : "WASHINGTON", "loc" : [ -78.1566, 38.707838 ], "pop" : 1448, "state" : "VA" } +{ "_id" : "22749", "city" : "WOODVILLE", "loc" : [ -78.173855, 38.648176 ], "pop" : 371, "state" : "VA" } +{ "_id" : "22801", "city" : "HARRISONBURG", "loc" : [ -78.871438, 38.448864 ], "pop" : 42027, "state" : "VA" } +{ "_id" : "22810", "city" : "BASYE", "loc" : [ -78.767363, 38.795806 ], "pop" : 43, "state" : "VA" } +{ "_id" : "22811", "city" : "BERGTON", "loc" : [ -78.966752, 38.792509 ], "pop" : 341, "state" : "VA" } +{ "_id" : "22812", "city" : "BRIDGEWATER", "loc" : [ -78.993684, 38.385866 ], "pop" : 7160, "state" : "VA" } +{ "_id" : "22815", "city" : "BROADWAY", "loc" : [ -78.787494, 38.608336 ], "pop" : 7106, "state" : "VA" } +{ "_id" : "22820", "city" : "CRIDERS", "loc" : [ -78.99735699999999, 38.749656 ], "pop" : 445, "state" : "VA" } +{ "_id" : "22821", "city" : "MONTEZUMA", "loc" : [ -78.993731, 38.433864 ], "pop" : 4777, "state" : "VA" } +{ "_id" : "22824", "city" : "EDINBURG", "loc" : [ -78.60033, 38.843206 ], "pop" : 5079, "state" : "VA" } +{ "_id" : "22827", "city" : "ELKTON", "loc" : [ -78.632143, 38.40252 ], "pop" : 10331, "state" : "VA" } +{ "_id" : "22830", "city" : "FULKS RUN", "loc" : [ -78.935799, 38.633871 ], "pop" : 1255, "state" : "VA" } +{ "_id" : "22831", "city" : "HINTON", "loc" : [ -79.01008400000001, 38.483378 ], "pop" : 798, "state" : "VA" } +{ "_id" : "22832", "city" : "KEEZLETOWN", "loc" : [ -78.77699800000001, 38.439588 ], "pop" : 1204, "state" : "VA" } +{ "_id" : "22834", "city" : "LINVILLE", "loc" : [ -78.896102, 38.555733 ], "pop" : 1866, "state" : "VA" } +{ "_id" : "22835", "city" : "LURAY", "loc" : [ -78.459559, 38.654839 ], "pop" : 10559, "state" : "VA" } +{ "_id" : "22840", "city" : "MC GAHEYSVILLE", "loc" : [ -78.741128, 38.371228 ], "pop" : 2100, "state" : "VA" } +{ "_id" : "22841", "city" : "MOUNT CRAWFORD", "loc" : [ -78.895679, 38.345656 ], "pop" : 2070, "state" : "VA" } +{ "_id" : "22842", "city" : "CONICVILLE", "loc" : [ -78.676655, 38.768819 ], "pop" : 4601, "state" : "VA" } +{ "_id" : "22843", "city" : "MOUNT SOLON", "loc" : [ -79.10283200000001, 38.332755 ], "pop" : 1995, "state" : "VA" } +{ "_id" : "22844", "city" : "NEW MARKET", "loc" : [ -78.67143299999999, 38.660555 ], "pop" : 3502, "state" : "VA" } +{ "_id" : "22845", "city" : "ORKNEY SPRINGS", "loc" : [ -78.811106, 38.793708 ], "pop" : 266, "state" : "VA" } +{ "_id" : "22846", "city" : "MONTEVIDEO", "loc" : [ -78.79790300000001, 38.369729 ], "pop" : 704, "state" : "VA" } +{ "_id" : "22847", "city" : "SHENANDOAH CAVER", "loc" : [ -78.698866, 38.714443 ], "pop" : 352, "state" : "VA" } +{ "_id" : "22849", "city" : "SHENANDOAH", "loc" : [ -78.608975, 38.501034 ], "pop" : 5174, "state" : "VA" } +{ "_id" : "22851", "city" : "STANLEY", "loc" : [ -78.509263, 38.566036 ], "pop" : 4604, "state" : "VA" } +{ "_id" : "22853", "city" : "TIMBERVILLE", "loc" : [ -78.771702, 38.647606 ], "pop" : 3494, "state" : "VA" } +{ "_id" : "22901", "city" : "CHARLOTTESVILLE", "loc" : [ -78.490869, 38.054752 ], "pop" : 62708, "state" : "VA" } +{ "_id" : "22903", "city" : "UNIVERSITY", "loc" : [ -78.505758, 38.032728 ], "pop" : 25301, "state" : "VA" } +{ "_id" : "22920", "city" : "AFTON", "loc" : [ -78.84104600000001, 37.962624 ], "pop" : 2783, "state" : "VA" } +{ "_id" : "22922", "city" : "TYE RIVER", "loc" : [ -78.91847300000001, 37.687713 ], "pop" : 1439, "state" : "VA" } +{ "_id" : "22923", "city" : "BURNLEYS", "loc" : [ -78.31271599999999, 38.199648 ], "pop" : 1389, "state" : "VA" } +{ "_id" : "22929", "city" : "COBHAM", "loc" : [ -78.37849, 38.037835 ], "pop" : 45, "state" : "VA" } +{ "_id" : "22931", "city" : "COVESVILLE", "loc" : [ -78.71274099999999, 37.907974 ], "pop" : 304, "state" : "VA" } +{ "_id" : "22932", "city" : "YANCEY MILLS", "loc" : [ -78.70440499999999, 38.081288 ], "pop" : 4292, "state" : "VA" } +{ "_id" : "22935", "city" : "BOONESVILLE", "loc" : [ -78.55461200000001, 38.253276 ], "pop" : 566, "state" : "VA" } +{ "_id" : "22936", "city" : "EARLYSVILLE", "loc" : [ -78.491945, 38.157761 ], "pop" : 4294, "state" : "VA" } +{ "_id" : "22937", "city" : "ESMONT", "loc" : [ -78.610646, 37.812543 ], "pop" : 1157, "state" : "VA" } +{ "_id" : "22938", "city" : "FABER", "loc" : [ -78.756495, 37.847545 ], "pop" : 958, "state" : "VA" } +{ "_id" : "22939", "city" : "WOODROW WILSON", "loc" : [ -78.969579, 38.097361 ], "pop" : 1374, "state" : "VA" } +{ "_id" : "22940", "city" : "MISSION HOME", "loc" : [ -78.595906, 38.206217 ], "pop" : 1023, "state" : "VA" } +{ "_id" : "22942", "city" : "CASHS CORNER", "loc" : [ -78.195195, 38.107261 ], "pop" : 5852, "state" : "VA" } +{ "_id" : "22943", "city" : "GREENWOOD", "loc" : [ -78.783282, 38.041545 ], "pop" : 516, "state" : "VA" } +{ "_id" : "22946", "city" : "KEENE", "loc" : [ -78.561386, 37.931273 ], "pop" : 26, "state" : "VA" } +{ "_id" : "22947", "city" : "BOYD TAVERN", "loc" : [ -78.340429, 38.001265 ], "pop" : 2081, "state" : "VA" } +{ "_id" : "22948", "city" : "LOCUST DALE", "loc" : [ -78.10157599999999, 38.334043 ], "pop" : 155, "state" : "VA" } +{ "_id" : "22949", "city" : "LOVINGSTON", "loc" : [ -78.868433, 37.792405 ], "pop" : 1459, "state" : "VA" } +{ "_id" : "22951", "city" : "LOWESVILLE", "loc" : [ -79.08334600000001, 37.749797 ], "pop" : 175, "state" : "VA" } +{ "_id" : "22952", "city" : "SHERANDO", "loc" : [ -78.95150599999999, 37.997903 ], "pop" : 2267, "state" : "VA" } +{ "_id" : "22958", "city" : "WINTERGREEN", "loc" : [ -78.89397200000001, 37.860398 ], "pop" : 53, "state" : "VA" } +{ "_id" : "22959", "city" : "ALBERENE", "loc" : [ -78.695414, 37.961992 ], "pop" : 3134, "state" : "VA" } +{ "_id" : "22960", "city" : "MONTFORD", "loc" : [ -78.091224, 38.233937 ], "pop" : 8781, "state" : "VA" } +{ "_id" : "22963", "city" : "BYBEE", "loc" : [ -78.297983, 37.881807 ], "pop" : 5689, "state" : "VA" } +{ "_id" : "22964", "city" : "PINEY RIVER", "loc" : [ -79.020571, 37.715785 ], "pop" : 257, "state" : "VA" } +{ "_id" : "22967", "city" : "ROSELAND", "loc" : [ -78.97117299999999, 37.807697 ], "pop" : 2333, "state" : "VA" } +{ "_id" : "22968", "city" : "ADVANCE MILLS", "loc" : [ -78.39103299999999, 38.233871 ], "pop" : 5764, "state" : "VA" } +{ "_id" : "22969", "city" : "SCHUYLER", "loc" : [ -78.692475, 37.797584 ], "pop" : 1128, "state" : "VA" } +{ "_id" : "22971", "city" : "ROCKFISH", "loc" : [ -78.824608, 37.747974 ], "pop" : 1100, "state" : "VA" } +{ "_id" : "22972", "city" : "SOMERSET", "loc" : [ -78.25042000000001, 38.204657 ], "pop" : 720, "state" : "VA" } +{ "_id" : "22973", "city" : "GEER", "loc" : [ -78.470755, 38.302556 ], "pop" : 4114, "state" : "VA" } +{ "_id" : "22974", "city" : "TROY", "loc" : [ -78.253494, 37.9636 ], "pop" : 1868, "state" : "VA" } +{ "_id" : "22980", "city" : "WAYNESBORO", "loc" : [ -78.90346099999999, 38.077412 ], "pop" : 26450, "state" : "VA" } +{ "_id" : "23002", "city" : "AMELIA COURT HOU", "loc" : [ -77.95517700000001, 37.35017 ], "pop" : 6923, "state" : "VA" } +{ "_id" : "23004", "city" : "ARVONIA", "loc" : [ -78.38888, 37.671355 ], "pop" : 1114, "state" : "VA" } +{ "_id" : "23005", "city" : "ASHLAND", "loc" : [ -77.478373, 37.73948 ], "pop" : 14800, "state" : "VA" } +{ "_id" : "23009", "city" : "AYLETT", "loc" : [ -77.188473, 37.822113 ], "pop" : 1374, "state" : "VA" } +{ "_id" : "23011", "city" : "BARHAMSVILLE", "loc" : [ -76.832097, 37.461662 ], "pop" : 698, "state" : "VA" } +{ "_id" : "23015", "city" : "BEAVERDAM", "loc" : [ -77.63082900000001, 37.903767 ], "pop" : 2328, "state" : "VA" } +{ "_id" : "23016", "city" : "BEAVERLETT", "loc" : [ -76.322425, 37.41587 ], "pop" : 262, "state" : "VA" } +{ "_id" : "23021", "city" : "BOHANNON", "loc" : [ -76.36136, 37.390457 ], "pop" : 143, "state" : "VA" } +{ "_id" : "23022", "city" : "BREMO BLUFF", "loc" : [ -78.26715799999999, 37.745256 ], "pop" : 1058, "state" : "VA" } +{ "_id" : "23023", "city" : "BRUINGTON", "loc" : [ -76.94019900000001, 37.780112 ], "pop" : 172, "state" : "VA" } +{ "_id" : "23024", "city" : "BUMPASS", "loc" : [ -77.79661400000001, 37.898381 ], "pop" : 4399, "state" : "VA" } +{ "_id" : "23025", "city" : "MILES", "loc" : [ -76.393959, 37.427339 ], "pop" : 39, "state" : "VA" } +{ "_id" : "23027", "city" : "TAMWORTH", "loc" : [ -78.128699, 37.641314 ], "pop" : 1143, "state" : "VA" } +{ "_id" : "23029", "city" : "CAUTHORNVILLE", "loc" : [ -77.039625, 37.858957 ], "pop" : 380, "state" : "VA" } +{ "_id" : "23030", "city" : "CHARLES CITY", "loc" : [ -77.108183, 37.366271 ], "pop" : 4216, "state" : "VA" } +{ "_id" : "23032", "city" : "CHURCH VIEW", "loc" : [ -76.66287, 37.674956 ], "pop" : 493, "state" : "VA" } +{ "_id" : "23037", "city" : "COLOGNE", "loc" : [ -76.683356, 37.555866 ], "pop" : 95, "state" : "VA" } +{ "_id" : "23038", "city" : "COLUMBIA", "loc" : [ -78.17940299999999, 37.714707 ], "pop" : 641, "state" : "VA" } +{ "_id" : "23039", "city" : "CROZIER", "loc" : [ -77.793958, 37.671764 ], "pop" : 937, "state" : "VA" } +{ "_id" : "23040", "city" : "CUMBERLAND", "loc" : [ -78.258149, 37.501861 ], "pop" : 3429, "state" : "VA" } +{ "_id" : "23043", "city" : "DELTAVILLE", "loc" : [ -76.34678099999999, 37.554852 ], "pop" : 1565, "state" : "VA" } +{ "_id" : "23045", "city" : "DIGGS", "loc" : [ -76.287172, 37.436273 ], "pop" : 491, "state" : "VA" } +{ "_id" : "23047", "city" : "DOSWELL", "loc" : [ -77.51252100000001, 37.841682 ], "pop" : 2111, "state" : "VA" } +{ "_id" : "23050", "city" : "DUTTON", "loc" : [ -76.435782, 37.486897 ], "pop" : 416, "state" : "VA" } +{ "_id" : "23055", "city" : "FORK UNION", "loc" : [ -78.23549800000001, 37.771526 ], "pop" : 620, "state" : "VA" } +{ "_id" : "23060", "city" : "GLEN ALLEN", "loc" : [ -77.53401599999999, 37.662848 ], "pop" : 19953, "state" : "VA" } +{ "_id" : "23061", "city" : "PINERO", "loc" : [ -76.55331200000001, 37.41922 ], "pop" : 14924, "state" : "VA" } +{ "_id" : "23062", "city" : "GLOUCESTER POINT", "loc" : [ -76.49585999999999, 37.258534 ], "pop" : 2558, "state" : "VA" } +{ "_id" : "23063", "city" : "GOOCHLAND", "loc" : [ -78.011216, 37.768789 ], "pop" : 4772, "state" : "VA" } +{ "_id" : "23065", "city" : "GUM SPRING", "loc" : [ -77.907049, 37.818374 ], "pop" : 480, "state" : "VA" } +{ "_id" : "23066", "city" : "GWYNN", "loc" : [ -76.29042, 37.500594 ], "pop" : 681, "state" : "VA" } +{ "_id" : "23069", "city" : "HANOVER", "loc" : [ -77.321572, 37.770116 ], "pop" : 3796, "state" : "VA" } +{ "_id" : "23070", "city" : "HARDYVILLE", "loc" : [ -76.418937, 37.547821 ], "pop" : 546, "state" : "VA" } +{ "_id" : "23071", "city" : "HARTFIELD", "loc" : [ -76.476949, 37.559437 ], "pop" : 797, "state" : "VA" } +{ "_id" : "23072", "city" : "HAYES", "loc" : [ -76.49045700000001, 37.291577 ], "pop" : 11051, "state" : "VA" } +{ "_id" : "23075", "city" : "HIGHLAND SPRINGS", "loc" : [ -77.32261, 37.543723 ], "pop" : 9373, "state" : "VA" } +{ "_id" : "23079", "city" : "JAMAICA", "loc" : [ -76.688962, 37.729997 ], "pop" : 383, "state" : "VA" } +{ "_id" : "23080", "city" : "JAMES STORE", "loc" : [ -76.464972, 37.480594 ], "pop" : 795, "state" : "VA" } +{ "_id" : "23083", "city" : "JETERSVILLE", "loc" : [ -78.104011, 37.31757 ], "pop" : 1396, "state" : "VA" } +{ "_id" : "23084", "city" : "KENTS STORE", "loc" : [ -78.12077600000001, 37.89425 ], "pop" : 882, "state" : "VA" } +{ "_id" : "23085", "city" : "KING AND QUEEN C", "loc" : [ -76.86305900000001, 37.717644 ], "pop" : 548, "state" : "VA" } +{ "_id" : "23086", "city" : "KING WILLIAM", "loc" : [ -77.09983699999999, 37.720194 ], "pop" : 3887, "state" : "VA" } +{ "_id" : "23089", "city" : "LANEXA", "loc" : [ -76.90268399999999, 37.419391 ], "pop" : 3609, "state" : "VA" } +{ "_id" : "23091", "city" : "LITTLE PLYMOUTH", "loc" : [ -76.825456, 37.664218 ], "pop" : 103, "state" : "VA" } +{ "_id" : "23092", "city" : "LOCUST HILL", "loc" : [ -76.501857, 37.598328 ], "pop" : 375, "state" : "VA" } +{ "_id" : "23093", "city" : "LOUISA", "loc" : [ -78.034666, 38.01317 ], "pop" : 7503, "state" : "VA" } +{ "_id" : "23102", "city" : "DABNEYS", "loc" : [ -77.871032, 37.703193 ], "pop" : 2927, "state" : "VA" } +{ "_id" : "23103", "city" : "MANAKIN SABOT", "loc" : [ -77.70769900000001, 37.638036 ], "pop" : 5177, "state" : "VA" } +{ "_id" : "23106", "city" : "MANQUIN", "loc" : [ -77.186016, 37.718441 ], "pop" : 628, "state" : "VA" } +{ "_id" : "23108", "city" : "MASCOT", "loc" : [ -76.73832400000001, 37.60683 ], "pop" : 104, "state" : "VA" } +{ "_id" : "23109", "city" : "MATHEWS", "loc" : [ -76.354416, 37.438349 ], "pop" : 760, "state" : "VA" } +{ "_id" : "23110", "city" : "SHANGHAI", "loc" : [ -76.78398, 37.641698 ], "pop" : 331, "state" : "VA" } +{ "_id" : "23111", "city" : "MECHANICSVILLE", "loc" : [ -77.33946400000001, 37.628146 ], "pop" : 35675, "state" : "VA" } +{ "_id" : "23112", "city" : "MIDLOTHIAN", "loc" : [ -77.65445800000001, 37.431027 ], "pop" : 24114, "state" : "VA" } +{ "_id" : "23113", "city" : "MIDLOTHIAN", "loc" : [ -77.642864, 37.510893 ], "pop" : 21858, "state" : "VA" } +{ "_id" : "23117", "city" : "MINERAL", "loc" : [ -77.878069, 37.998609 ], "pop" : 5080, "state" : "VA" } +{ "_id" : "23118", "city" : "MOBJACK", "loc" : [ -76.355244, 37.377579 ], "pop" : 204, "state" : "VA" } +{ "_id" : "23119", "city" : "MOON", "loc" : [ -76.306472, 37.449276 ], "pop" : 629, "state" : "VA" } +{ "_id" : "23120", "city" : "MOSELEY", "loc" : [ -77.758458, 37.426026 ], "pop" : 1852, "state" : "VA" } +{ "_id" : "23123", "city" : "NEW CANTON", "loc" : [ -78.31123100000001, 37.664499 ], "pop" : 1546, "state" : "VA" } +{ "_id" : "23124", "city" : "NEW KENT", "loc" : [ -77.074242, 37.553013 ], "pop" : 1376, "state" : "VA" } +{ "_id" : "23125", "city" : "NEW POINT", "loc" : [ -76.28346500000001, 37.349291 ], "pop" : 153, "state" : "VA" } +{ "_id" : "23126", "city" : "NEWTOWN", "loc" : [ -77.11382500000001, 37.878236 ], "pop" : 926, "state" : "VA" } +{ "_id" : "23128", "city" : "NORTH", "loc" : [ -76.370661, 37.477066 ], "pop" : 1621, "state" : "VA" } +{ "_id" : "23129", "city" : "OILVILLE", "loc" : [ -77.769955, 37.708879 ], "pop" : 198, "state" : "VA" } +{ "_id" : "23130", "city" : "ONEMO", "loc" : [ -76.294056, 37.398517 ], "pop" : 582, "state" : "VA" } +{ "_id" : "23138", "city" : "BAVON", "loc" : [ -76.304463, 37.374252 ], "pop" : 475, "state" : "VA" } +{ "_id" : "23139", "city" : "POWHATAN", "loc" : [ -77.879761, 37.556442 ], "pop" : 14488, "state" : "VA" } +{ "_id" : "23140", "city" : "PROVIDENCE FORGE", "loc" : [ -77.071117, 37.425907 ], "pop" : 3211, "state" : "VA" } +{ "_id" : "23141", "city" : "QUINTON", "loc" : [ -77.148607, 37.518466 ], "pop" : 4589, "state" : "VA" } +{ "_id" : "23146", "city" : "ROCKVILLE", "loc" : [ -77.699994, 37.733729 ], "pop" : 1872, "state" : "VA" } +{ "_id" : "23148", "city" : "INDIAN NECK", "loc" : [ -77.08420599999999, 37.905052 ], "pop" : 191, "state" : "VA" } +{ "_id" : "23149", "city" : "SALUDA", "loc" : [ -76.592082, 37.594944 ], "pop" : 3215, "state" : "VA" } +{ "_id" : "23150", "city" : "SANDSTON", "loc" : [ -77.27578, 37.515658 ], "pop" : 9402, "state" : "VA" } +{ "_id" : "23153", "city" : "SANDY HOOK", "loc" : [ -77.90455300000001, 37.751892 ], "pop" : 152, "state" : "VA" } +{ "_id" : "23156", "city" : "PLAIN VIEW", "loc" : [ -76.726901, 37.569811 ], "pop" : 696, "state" : "VA" } +{ "_id" : "23161", "city" : "STEVENSVILLE", "loc" : [ -76.935228, 37.714577 ], "pop" : 59, "state" : "VA" } +{ "_id" : "23163", "city" : "SHADOW", "loc" : [ -76.318617, 37.361945 ], "pop" : 309, "state" : "VA" } +{ "_id" : "23168", "city" : "TOANO", "loc" : [ -76.82526300000001, 37.39013 ], "pop" : 2784, "state" : "VA" } +{ "_id" : "23169", "city" : "SYRINGA", "loc" : [ -76.454876, 37.597824 ], "pop" : 706, "state" : "VA" } +{ "_id" : "23175", "city" : "REMLIK", "loc" : [ -76.612611, 37.655003 ], "pop" : 698, "state" : "VA" } +{ "_id" : "23176", "city" : "WAKE", "loc" : [ -76.432327, 37.568077 ], "pop" : 368, "state" : "VA" } +{ "_id" : "23177", "city" : "WALKERTON", "loc" : [ -77.018475, 37.755437 ], "pop" : 1152, "state" : "VA" } +{ "_id" : "23179", "city" : "WARNER", "loc" : [ -76.64616700000001, 37.651127 ], "pop" : 37, "state" : "VA" } +{ "_id" : "23180", "city" : "WATER VIEW", "loc" : [ -76.62268, 37.710486 ], "pop" : 273, "state" : "VA" } +{ "_id" : "23181", "city" : "WEST POINT", "loc" : [ -76.82373, 37.555604 ], "pop" : 4365, "state" : "VA" } +{ "_id" : "23185", "city" : "MERRIMAC", "loc" : [ -76.701686, 37.262698 ], "pop" : 34777, "state" : "VA" } +{ "_id" : "23188", "city" : "WILLIAMSBURG", "loc" : [ -76.763424, 37.317768 ], "pop" : 14957, "state" : "VA" } +{ "_id" : "23192", "city" : "MONTPELIER", "loc" : [ -77.692441, 37.817729 ], "pop" : 4472, "state" : "VA" } +{ "_id" : "23219", "city" : "RICHMOND", "loc" : [ -77.437798, 37.546265 ], "pop" : 2780, "state" : "VA" } +{ "_id" : "23220", "city" : "RICHMOND", "loc" : [ -77.458798, 37.549808 ], "pop" : 29776, "state" : "VA" } +{ "_id" : "23221", "city" : "RICHMOND", "loc" : [ -77.4845, 37.558301 ], "pop" : 14452, "state" : "VA" } +{ "_id" : "23222", "city" : "RICHMOND", "loc" : [ -77.426725, 37.574802 ], "pop" : 30214, "state" : "VA" } +{ "_id" : "23223", "city" : "RICHMOND", "loc" : [ -77.394772, 37.547721 ], "pop" : 42379, "state" : "VA" } +{ "_id" : "23224", "city" : "RICHMOND", "loc" : [ -77.471014, 37.495512 ], "pop" : 32681, "state" : "VA" } +{ "_id" : "23225", "city" : "RICHMOND", "loc" : [ -77.50470900000001, 37.515842 ], "pop" : 37289, "state" : "VA" } +{ "_id" : "23226", "city" : "RICHMOND", "loc" : [ -77.519657, 37.582473 ], "pop" : 18085, "state" : "VA" } +{ "_id" : "23227", "city" : "BELLEVUE", "loc" : [ -77.446309, 37.604181 ], "pop" : 21661, "state" : "VA" } +{ "_id" : "23228", "city" : "LAKESIDE", "loc" : [ -77.493308, 37.623503 ], "pop" : 30611, "state" : "VA" } +{ "_id" : "23229", "city" : "REGENCY", "loc" : [ -77.566202, 37.596351 ], "pop" : 32028, "state" : "VA" } +{ "_id" : "23230", "city" : "WEST END", "loc" : [ -77.49682799999999, 37.588376 ], "pop" : 6447, "state" : "VA" } +{ "_id" : "23231", "city" : "RICHMOND", "loc" : [ -77.368002, 37.491529 ], "pop" : 23773, "state" : "VA" } +{ "_id" : "23233", "city" : "RIDGE", "loc" : [ -77.61493299999999, 37.619354 ], "pop" : 32811, "state" : "VA" } +{ "_id" : "23234", "city" : "AMPTHILL", "loc" : [ -77.469798, 37.453158 ], "pop" : 36331, "state" : "VA" } +{ "_id" : "23235", "city" : "BON AIR", "loc" : [ -77.56510299999999, 37.512034 ], "pop" : 30860, "state" : "VA" } +{ "_id" : "23236", "city" : "RICHMOND", "loc" : [ -77.585413, 37.478165 ], "pop" : 24305, "state" : "VA" } +{ "_id" : "23237", "city" : "RICHMOND", "loc" : [ -77.461471, 37.401145 ], "pop" : 19154, "state" : "VA" } +{ "_id" : "23294", "city" : "RICHMOND", "loc" : [ -77.545125, 37.632923 ], "pop" : 14713, "state" : "VA" } +{ "_id" : "23301", "city" : "ACCOMAC", "loc" : [ -75.680272, 37.71588 ], "pop" : 2562, "state" : "VA" } +{ "_id" : "23302", "city" : "ASSAWOMAN", "loc" : [ -75.52966000000001, 37.86629 ], "pop" : 82, "state" : "VA" } +{ "_id" : "23306", "city" : "BELLE HAVEN", "loc" : [ -75.869443, 37.56448 ], "pop" : 344, "state" : "VA" } +{ "_id" : "23307", "city" : "BIRDSNEST", "loc" : [ -75.904347, 37.432077 ], "pop" : 1057, "state" : "VA" } +{ "_id" : "23308", "city" : "BLOXOM", "loc" : [ -75.615568, 37.827264 ], "pop" : 1581, "state" : "VA" } +{ "_id" : "23310", "city" : "CAPE CHARLES", "loc" : [ -75.972129, 37.279874 ], "pop" : 6259, "state" : "VA" } +{ "_id" : "23314", "city" : "CARROLLTON", "loc" : [ -76.542963, 36.954994 ], "pop" : 3990, "state" : "VA" } +{ "_id" : "23315", "city" : "CARRSVILLE", "loc" : [ -76.83647999999999, 36.74544 ], "pop" : 1273, "state" : "VA" } +{ "_id" : "23320", "city" : "CHESAPEAKE", "loc" : [ -76.23842999999999, 36.735246 ], "pop" : 55836, "state" : "VA" } +{ "_id" : "23321", "city" : "BOWERS HILL", "loc" : [ -76.411012, 36.827964 ], "pop" : 23561, "state" : "VA" } +{ "_id" : "23322", "city" : "FENTRESS", "loc" : [ -76.213064, 36.634008 ], "pop" : 10023, "state" : "VA" } +{ "_id" : "23323", "city" : "CHESAPEAKE", "loc" : [ -76.339743, 36.763424 ], "pop" : 24412, "state" : "VA" } +{ "_id" : "23324", "city" : "CHESAPEAKE", "loc" : [ -76.26655700000001, 36.805568 ], "pop" : 21531, "state" : "VA" } +{ "_id" : "23325", "city" : "CHESAPEAKE", "loc" : [ -76.240555, 36.813963 ], "pop" : 16543, "state" : "VA" } +{ "_id" : "23336", "city" : "CHINCOTEAGUE", "loc" : [ -75.371369, 37.927682 ], "pop" : 3581, "state" : "VA" } +{ "_id" : "23337", "city" : "WALLOPS ISLAND", "loc" : [ -75.506503, 37.827338 ], "pop" : 0, "state" : "VA" } +{ "_id" : "23350", "city" : "EXMORE", "loc" : [ -75.85262400000001, 37.511689 ], "pop" : 4678, "state" : "VA" } +{ "_id" : "23354", "city" : "FRANKTOWN", "loc" : [ -75.888971, 37.462009 ], "pop" : 474, "state" : "VA" } +{ "_id" : "23356", "city" : "GREENBACKVILLE", "loc" : [ -75.40289900000001, 38.006404 ], "pop" : 400, "state" : "VA" } +{ "_id" : "23357", "city" : "GREENBUSH", "loc" : [ -75.6664, 37.768121 ], "pop" : 821, "state" : "VA" } +{ "_id" : "23359", "city" : "HALLWOOD", "loc" : [ -75.561334, 37.853644 ], "pop" : 322, "state" : "VA" } +{ "_id" : "23395", "city" : "HORNTOWN", "loc" : [ -75.471608, 37.969916 ], "pop" : 132, "state" : "VA" } +{ "_id" : "23396", "city" : "HORSEY", "loc" : [ -75.56236, 37.933232 ], "pop" : 200, "state" : "VA" } +{ "_id" : "23399", "city" : "JENKINS BRIDGE", "loc" : [ -75.63194300000001, 37.919219 ], "pop" : 301, "state" : "VA" } +{ "_id" : "23404", "city" : "LOCUSTVILLE", "loc" : [ -75.673508, 37.6534 ], "pop" : 92, "state" : "VA" } +{ "_id" : "23405", "city" : "MACHIPONGO", "loc" : [ -75.908241, 37.401429 ], "pop" : 593, "state" : "VA" } +{ "_id" : "23407", "city" : "MAPPSVILLE", "loc" : [ -75.569886, 37.835419 ], "pop" : 835, "state" : "VA" } +{ "_id" : "23409", "city" : "MEARS", "loc" : [ -75.635443, 37.869189 ], "pop" : 110, "state" : "VA" } +{ "_id" : "23410", "city" : "MELFA", "loc" : [ -75.745355, 37.6407 ], "pop" : 2987, "state" : "VA" } +{ "_id" : "23415", "city" : "NEW CHURCH", "loc" : [ -75.511188, 37.952527 ], "pop" : 2915, "state" : "VA" } +{ "_id" : "23416", "city" : "OAK HALL", "loc" : [ -75.606483, 37.953686 ], "pop" : 130, "state" : "VA" } +{ "_id" : "23417", "city" : "ONANCOCK", "loc" : [ -75.752798, 37.710237 ], "pop" : 3914, "state" : "VA" } +{ "_id" : "23418", "city" : "ONLEY", "loc" : [ -75.6992, 37.670422 ], "pop" : 97, "state" : "VA" } +{ "_id" : "23420", "city" : "PAINTER", "loc" : [ -75.806612, 37.582821 ], "pop" : 3782, "state" : "VA" } +{ "_id" : "23421", "city" : "PARKSLEY", "loc" : [ -75.638634, 37.774404 ], "pop" : 3466, "state" : "VA" } +{ "_id" : "23426", "city" : "SANFORD", "loc" : [ -75.69570400000001, 37.92433 ], "pop" : 679, "state" : "VA" } +{ "_id" : "23430", "city" : "SMITHFIELD", "loc" : [ -76.63682, 36.981057 ], "pop" : 11389, "state" : "VA" } +{ "_id" : "23432", "city" : "SUFFOLK", "loc" : [ -76.559811, 36.866823 ], "pop" : 1396, "state" : "VA" } +{ "_id" : "23433", "city" : "SUFFOLK", "loc" : [ -76.49285999999999, 36.909027 ], "pop" : 1219, "state" : "VA" } +{ "_id" : "23434", "city" : "SUFFOLK", "loc" : [ -76.593147, 36.730433 ], "pop" : 33717, "state" : "VA" } +{ "_id" : "23435", "city" : "SUFFOLK", "loc" : [ -76.466397, 36.854427 ], "pop" : 8556, "state" : "VA" } +{ "_id" : "23436", "city" : "SUFFOLK", "loc" : [ -76.514157, 36.892625 ], "pop" : 766, "state" : "VA" } +{ "_id" : "23437", "city" : "SUFFOLK", "loc" : [ -76.79204300000001, 36.652611 ], "pop" : 4414, "state" : "VA" } +{ "_id" : "23438", "city" : "SUFFOLK", "loc" : [ -76.68709699999999, 36.591311 ], "pop" : 2073, "state" : "VA" } +{ "_id" : "23440", "city" : "TANGIER", "loc" : [ -75.993003, 37.824485 ], "pop" : 700, "state" : "VA" } +{ "_id" : "23442", "city" : "TEMPERANCEVILLE", "loc" : [ -75.55283, 37.895421 ], "pop" : 1670, "state" : "VA" } +{ "_id" : "23451", "city" : "VIRGINIA BEACH", "loc" : [ -76.00192800000001, 36.858451 ], "pop" : 37212, "state" : "VA" } +{ "_id" : "23452", "city" : "VIRGINIA BEACH", "loc" : [ -76.096142, 36.83481 ], "pop" : 61895, "state" : "VA" } +{ "_id" : "23454", "city" : "VIRGINIA BEACH", "loc" : [ -76.023723, 36.828187 ], "pop" : 59937, "state" : "VA" } +{ "_id" : "23455", "city" : "VIRGINIA BEACH", "loc" : [ -76.144552, 36.888121 ], "pop" : 43055, "state" : "VA" } +{ "_id" : "23456", "city" : "VIRGINIA BEACH", "loc" : [ -76.089162, 36.779851 ], "pop" : 55909, "state" : "VA" } +{ "_id" : "23457", "city" : "BLACKWATER BRIDG", "loc" : [ -76.03781600000001, 36.624793 ], "pop" : 3448, "state" : "VA" } +{ "_id" : "23459", "city" : "VIRGINIA BEACH", "loc" : [ -76.017122, 36.9216 ], "pop" : 1164, "state" : "VA" } +{ "_id" : "23462", "city" : "VIRGINIA BEACH", "loc" : [ -76.15218400000001, 36.839193 ], "pop" : 58632, "state" : "VA" } +{ "_id" : "23464", "city" : "VIRGINIA BEACH", "loc" : [ -76.175909, 36.797772 ], "pop" : 67276, "state" : "VA" } +{ "_id" : "23481", "city" : "WALTERS", "loc" : [ -76.87015599999999, 36.708974 ], "pop" : 698, "state" : "VA" } +{ "_id" : "23487", "city" : "WINDSOR", "loc" : [ -76.732372, 36.836881 ], "pop" : 4773, "state" : "VA" } +{ "_id" : "23502", "city" : "NORFOLK", "loc" : [ -76.214253, 36.854648 ], "pop" : 21227, "state" : "VA" } +{ "_id" : "23503", "city" : "NORFOLK", "loc" : [ -76.252008, 36.944196 ], "pop" : 32435, "state" : "VA" } +{ "_id" : "23504", "city" : "NORFOLK", "loc" : [ -76.26862800000001, 36.858554 ], "pop" : 25706, "state" : "VA" } +{ "_id" : "23505", "city" : "NORFOLK", "loc" : [ -76.28748, 36.91675 ], "pop" : 30687, "state" : "VA" } +{ "_id" : "23507", "city" : "NORFOLK", "loc" : [ -76.30038500000001, 36.864506 ], "pop" : 6514, "state" : "VA" } +{ "_id" : "23508", "city" : "NORFOLK", "loc" : [ -76.30035599999999, 36.885922 ], "pop" : 19729, "state" : "VA" } +{ "_id" : "23509", "city" : "NORFOLK", "loc" : [ -76.260361, 36.878743 ], "pop" : 12539, "state" : "VA" } +{ "_id" : "23510", "city" : "NORFOLK", "loc" : [ -76.287784, 36.852929 ], "pop" : 4731, "state" : "VA" } +{ "_id" : "23511", "city" : "FLEET", "loc" : [ -76.309206, 36.951164 ], "pop" : 28108, "state" : "VA" } +{ "_id" : "23513", "city" : "NORFOLK", "loc" : [ -76.23957799999999, 36.891395 ], "pop" : 31348, "state" : "VA" } +{ "_id" : "23517", "city" : "NORFOLK", "loc" : [ -76.29451899999999, 36.869547 ], "pop" : 4433, "state" : "VA" } +{ "_id" : "23518", "city" : "NORFOLK", "loc" : [ -76.216027, 36.920246 ], "pop" : 35119, "state" : "VA" } +{ "_id" : "23521", "city" : "NAVAL AMPHIBIOUS", "loc" : [ -76.163715, 36.916923 ], "pop" : 4541, "state" : "VA" } +{ "_id" : "23523", "city" : "NORFOLK", "loc" : [ -76.27012499999999, 36.82942 ], "pop" : 8682, "state" : "VA" } +{ "_id" : "23601", "city" : "NEWPORT NEWS", "loc" : [ -76.460722, 37.057951 ], "pop" : 24325, "state" : "VA" } +{ "_id" : "23602", "city" : "NEWPORT NEWS", "loc" : [ -76.53212499999999, 37.131684 ], "pop" : 68525, "state" : "VA" } +{ "_id" : "23603", "city" : "NEWPORT NEWS", "loc" : [ -76.582059, 37.198887 ], "pop" : 3368, "state" : "VA" } +{ "_id" : "23604", "city" : "NEWPORT NEWS", "loc" : [ -76.589727, 37.122112 ], "pop" : 9967, "state" : "VA" } +{ "_id" : "23605", "city" : "NEWPORT NEWS", "loc" : [ -76.43315800000001, 37.015583 ], "pop" : 12649, "state" : "VA" } +{ "_id" : "23606", "city" : "NEWPORT NEWS", "loc" : [ -76.496724, 37.076777 ], "pop" : 22429, "state" : "VA" } +{ "_id" : "23607", "city" : "NEWPORT NEWS", "loc" : [ -76.41646900000001, 36.986352 ], "pop" : 28785, "state" : "VA" } +{ "_id" : "23651", "city" : "HAMPTON", "loc" : [ -76.296896, 37.029671 ], "pop" : 3325, "state" : "VA" } +{ "_id" : "23661", "city" : "HAMPTON", "loc" : [ -76.38008499999999, 37.007432 ], "pop" : 15313, "state" : "VA" } +{ "_id" : "23662", "city" : "POQUOSON", "loc" : [ -76.380702, 37.131252 ], "pop" : 11005, "state" : "VA" } +{ "_id" : "23663", "city" : "HAMPTON", "loc" : [ -76.319875, 37.03181 ], "pop" : 16889, "state" : "VA" } +{ "_id" : "23664", "city" : "HAMPTON", "loc" : [ -76.296639, 37.056611 ], "pop" : 7832, "state" : "VA" } +{ "_id" : "23665", "city" : "HAMPTON", "loc" : [ -76.40993899999999, 37.100565 ], "pop" : 15146, "state" : "VA" } +{ "_id" : "23666", "city" : "HAMPTON", "loc" : [ -76.409617, 37.046241 ], "pop" : 44985, "state" : "VA" } +{ "_id" : "23669", "city" : "HAMPTON", "loc" : [ -76.342573, 37.043559 ], "pop" : 41855, "state" : "VA" } +{ "_id" : "23690", "city" : "YORKTOWN", "loc" : [ -76.54234599999999, 37.228657 ], "pop" : 3216, "state" : "VA" } +{ "_id" : "23692", "city" : "GRAFTON", "loc" : [ -76.459648, 37.170859 ], "pop" : 14188, "state" : "VA" } +{ "_id" : "23693", "city" : "TABB", "loc" : [ -76.450743, 37.122586 ], "pop" : 2807, "state" : "VA" } +{ "_id" : "23696", "city" : "SEAFORD", "loc" : [ -76.42899199999999, 37.188468 ], "pop" : 3009, "state" : "VA" } +{ "_id" : "23701", "city" : "PORTSMOUTH", "loc" : [ -76.36714000000001, 36.808902 ], "pop" : 29788, "state" : "VA" } +{ "_id" : "23702", "city" : "PORTSMOUTH", "loc" : [ -76.32697899999999, 36.803534 ], "pop" : 12599, "state" : "VA" } +{ "_id" : "23703", "city" : "PORTSMOUTH", "loc" : [ -76.386872, 36.869501 ], "pop" : 22512, "state" : "VA" } +{ "_id" : "23704", "city" : "PORTSMOUTH", "loc" : [ -76.314604, 36.829821 ], "pop" : 23634, "state" : "VA" } +{ "_id" : "23707", "city" : "PORTSMOUTH", "loc" : [ -76.34401099999999, 36.836234 ], "pop" : 15199, "state" : "VA" } +{ "_id" : "23709", "city" : "PORTSMOUTH", "loc" : [ -76.305188, 36.813883 ], "pop" : 216, "state" : "VA" } +{ "_id" : "23801", "city" : "FORT LEE", "loc" : [ -77.33405, 37.244738 ], "pop" : 8817, "state" : "VA" } +{ "_id" : "23803", "city" : "ETTRICK", "loc" : [ -77.43259399999999, 37.220001 ], "pop" : 41772, "state" : "VA" } +{ "_id" : "23805", "city" : "PETERSBURG", "loc" : [ -77.385385, 37.181937 ], "pop" : 16432, "state" : "VA" } +{ "_id" : "23821", "city" : "ALBERTA", "loc" : [ -77.905518, 36.880609 ], "pop" : 1553, "state" : "VA" } +{ "_id" : "23824", "city" : "BLACKSTONE", "loc" : [ -77.985063, 37.091578 ], "pop" : 6351, "state" : "VA" } +{ "_id" : "23827", "city" : "BOYKINS", "loc" : [ -77.197519, 36.595061 ], "pop" : 1595, "state" : "VA" } +{ "_id" : "23828", "city" : "BRANCHVILLE", "loc" : [ -77.27044100000001, 36.578701 ], "pop" : 619, "state" : "VA" } +{ "_id" : "23829", "city" : "CAPRON", "loc" : [ -77.239363, 36.724332 ], "pop" : 2364, "state" : "VA" } +{ "_id" : "23830", "city" : "CARSON", "loc" : [ -77.43509299999999, 37.039311 ], "pop" : 1343, "state" : "VA" } +{ "_id" : "23831", "city" : "CHESTER", "loc" : [ -77.41557, 37.342934 ], "pop" : 24788, "state" : "VA" } +{ "_id" : "23832", "city" : "CHESTERFIELD", "loc" : [ -77.566799, 37.392327 ], "pop" : 25716, "state" : "VA" } +{ "_id" : "23833", "city" : "CHURCH ROAD", "loc" : [ -77.66458799999999, 37.194964 ], "pop" : 1515, "state" : "VA" } +{ "_id" : "23834", "city" : "COLONIAL HEIGHTS", "loc" : [ -77.403829, 37.269968 ], "pop" : 21056, "state" : "VA" } +{ "_id" : "23837", "city" : "COURTLAND", "loc" : [ -77.078272, 36.722516 ], "pop" : 3570, "state" : "VA" } +{ "_id" : "23839", "city" : "DENDRON", "loc" : [ -76.896642, 37.098076 ], "pop" : 805, "state" : "VA" } +{ "_id" : "23840", "city" : "DEWITT", "loc" : [ -77.64255799999999, 37.053522 ], "pop" : 1385, "state" : "VA" } +{ "_id" : "23841", "city" : "DINWIDDIE", "loc" : [ -77.558539, 37.083283 ], "pop" : 2781, "state" : "VA" } +{ "_id" : "23842", "city" : "DISPUTANTA", "loc" : [ -77.273172, 37.148268 ], "pop" : 4938, "state" : "VA" } +{ "_id" : "23843", "city" : "DOLPHIN", "loc" : [ -77.788719, 36.831774 ], "pop" : 982, "state" : "VA" } +{ "_id" : "23844", "city" : "DREWRYVILLE", "loc" : [ -77.359098, 36.685433 ], "pop" : 743, "state" : "VA" } +{ "_id" : "23845", "city" : "EBONY", "loc" : [ -77.999431, 36.584993 ], "pop" : 568, "state" : "VA" } +{ "_id" : "23846", "city" : "ELBERON", "loc" : [ -76.83372300000001, 37.070133 ], "pop" : 715, "state" : "VA" } +{ "_id" : "23847", "city" : "EMPORIA", "loc" : [ -77.56295299999999, 36.685689 ], "pop" : 13950, "state" : "VA" } +{ "_id" : "23850", "city" : "AMMON", "loc" : [ -77.737189, 37.139672 ], "pop" : 1315, "state" : "VA" } +{ "_id" : "23851", "city" : "FRANKLIN", "loc" : [ -76.939108, 36.678625 ], "pop" : 12786, "state" : "VA" } +{ "_id" : "23856", "city" : "FREEMAN", "loc" : [ -77.720772, 36.789342 ], "pop" : 920, "state" : "VA" } +{ "_id" : "23857", "city" : "GASBURG", "loc" : [ -77.90292700000001, 36.576552 ], "pop" : 771, "state" : "VA" } +{ "_id" : "23859", "city" : "HANDSOM", "loc" : [ -77.023797, 36.609854 ], "pop" : 371, "state" : "VA" } +{ "_id" : "23860", "city" : "HOPEWELL", "loc" : [ -77.295013, 37.287576 ], "pop" : 25764, "state" : "VA" } +{ "_id" : "23866", "city" : "IVOR", "loc" : [ -76.886146, 36.907099 ], "pop" : 2205, "state" : "VA" } +{ "_id" : "23867", "city" : "JARRATT", "loc" : [ -77.48316199999999, 36.819129 ], "pop" : 2055, "state" : "VA" } +{ "_id" : "23868", "city" : "TRIPLET", "loc" : [ -77.838437, 36.744874 ], "pop" : 6357, "state" : "VA" } +{ "_id" : "23872", "city" : "MC KENNEY", "loc" : [ -77.73955599999999, 36.998609 ], "pop" : 1866, "state" : "VA" } +{ "_id" : "23874", "city" : "NEWSOMS", "loc" : [ -77.106949, 36.614814 ], "pop" : 1193, "state" : "VA" } +{ "_id" : "23875", "city" : "PRINCE GEORGE", "loc" : [ -77.27470599999999, 37.233339 ], "pop" : 7713, "state" : "VA" } +{ "_id" : "23876", "city" : "RAWLINGS", "loc" : [ -77.82371999999999, 36.953043 ], "pop" : 527, "state" : "VA" } +{ "_id" : "23878", "city" : "SEDLEY", "loc" : [ -77.012531, 36.790752 ], "pop" : 491, "state" : "VA" } +{ "_id" : "23879", "city" : "SKIPPERS", "loc" : [ -77.543663, 36.579685 ], "pop" : 196, "state" : "VA" } +{ "_id" : "23881", "city" : "SPRING GROVE", "loc" : [ -76.99233700000001, 37.190098 ], "pop" : 1746, "state" : "VA" } +{ "_id" : "23882", "city" : "STONY CREEK", "loc" : [ -77.444276, 36.936132 ], "pop" : 2889, "state" : "VA" } +{ "_id" : "23883", "city" : "SURRY", "loc" : [ -76.76514, 37.126024 ], "pop" : 2271, "state" : "VA" } +{ "_id" : "23885", "city" : "SUTHERLAND", "loc" : [ -77.56546299999999, 37.190149 ], "pop" : 2470, "state" : "VA" } +{ "_id" : "23887", "city" : "VALENTINES", "loc" : [ -77.83840499999999, 36.565024 ], "pop" : 188, "state" : "VA" } +{ "_id" : "23888", "city" : "WAKEFIELD", "loc" : [ -76.97898000000001, 36.975734 ], "pop" : 2790, "state" : "VA" } +{ "_id" : "23889", "city" : "WARFIELD", "loc" : [ -77.76731700000001, 36.901122 ], "pop" : 580, "state" : "VA" } +{ "_id" : "23890", "city" : "WAVERLY", "loc" : [ -77.105453, 37.025032 ], "pop" : 4581, "state" : "VA" } +{ "_id" : "23893", "city" : "WHITE PLAINS", "loc" : [ -77.959245, 36.633549 ], "pop" : 522, "state" : "VA" } +{ "_id" : "23894", "city" : "WILSONS", "loc" : [ -77.835193, 37.115678 ], "pop" : 592, "state" : "VA" } +{ "_id" : "23897", "city" : "YALE", "loc" : [ -77.286986, 36.837279 ], "pop" : 626, "state" : "VA" } +{ "_id" : "23898", "city" : "ZUNI", "loc" : [ -76.81096700000001, 36.843666 ], "pop" : 2162, "state" : "VA" } +{ "_id" : "23901", "city" : "FARMVILLE", "loc" : [ -78.40759199999999, 37.302692 ], "pop" : 14084, "state" : "VA" } +{ "_id" : "23915", "city" : "BASKERVILLE", "loc" : [ -78.27904700000001, 36.723595 ], "pop" : 1114, "state" : "VA" } +{ "_id" : "23917", "city" : "BOYDTON", "loc" : [ -78.375174, 36.654422 ], "pop" : 2613, "state" : "VA" } +{ "_id" : "23919", "city" : "BRACEY", "loc" : [ -78.105862, 36.576295 ], "pop" : 1127, "state" : "VA" } +{ "_id" : "23920", "city" : "BRODNAX", "loc" : [ -77.98984299999999, 36.731879 ], "pop" : 2571, "state" : "VA" } +{ "_id" : "23921", "city" : "BUCKINGHAM", "loc" : [ -78.59853699999999, 37.583335 ], "pop" : 2056, "state" : "VA" } +{ "_id" : "23922", "city" : "BURKEVILLE", "loc" : [ -78.196084, 37.195203 ], "pop" : 3751, "state" : "VA" } +{ "_id" : "23923", "city" : "CHARLOTTE COURT", "loc" : [ -78.660622, 37.086379 ], "pop" : 2061, "state" : "VA" } +{ "_id" : "23924", "city" : "CHASE CITY", "loc" : [ -78.455268, 36.805305 ], "pop" : 5715, "state" : "VA" } +{ "_id" : "23927", "city" : "CLARKSVILLE", "loc" : [ -78.53529399999999, 36.631437 ], "pop" : 2736, "state" : "VA" } +{ "_id" : "23930", "city" : "CREWE", "loc" : [ -78.10586600000001, 37.165676 ], "pop" : 5565, "state" : "VA" } +{ "_id" : "23934", "city" : "CULLEN", "loc" : [ -78.645912, 37.155211 ], "pop" : 596, "state" : "VA" } +{ "_id" : "23936", "city" : "SPROUSES CORNER", "loc" : [ -78.46092899999999, 37.545804 ], "pop" : 5330, "state" : "VA" } +{ "_id" : "23937", "city" : "DRAKES BRANCH", "loc" : [ -78.561542, 36.968767 ], "pop" : 1509, "state" : "VA" } +{ "_id" : "23938", "city" : "DUNDAS", "loc" : [ -78.01001599999999, 36.90532 ], "pop" : 407, "state" : "VA" } +{ "_id" : "23942", "city" : "GREEN BAY", "loc" : [ -78.30719499999999, 37.123417 ], "pop" : 838, "state" : "VA" } +{ "_id" : "23944", "city" : "KENBRIDGE", "loc" : [ -78.12423800000001, 36.932965 ], "pop" : 4269, "state" : "VA" } +{ "_id" : "23947", "city" : "KEYSVILLE", "loc" : [ -78.46991199999999, 37.041086 ], "pop" : 3670, "state" : "VA" } +{ "_id" : "23950", "city" : "BLACKRIDGE", "loc" : [ -78.095251, 36.68609 ], "pop" : 3036, "state" : "VA" } +{ "_id" : "23952", "city" : "LUNENBURG", "loc" : [ -78.290644, 36.922624 ], "pop" : 156, "state" : "VA" } +{ "_id" : "23954", "city" : "MEHERRIN", "loc" : [ -78.38735699999999, 37.101283 ], "pop" : 1429, "state" : "VA" } +{ "_id" : "23958", "city" : "PAMPLIN", "loc" : [ -78.65166000000001, 37.265333 ], "pop" : 2298, "state" : "VA" } +{ "_id" : "23959", "city" : "PHENIX", "loc" : [ -78.791195, 37.092506 ], "pop" : 900, "state" : "VA" } +{ "_id" : "23960", "city" : "PROSPECT", "loc" : [ -78.546162, 37.305838 ], "pop" : 1661, "state" : "VA" } +{ "_id" : "23962", "city" : "RANDOLPH", "loc" : [ -78.69924899999999, 36.963079 ], "pop" : 600, "state" : "VA" } +{ "_id" : "23963", "city" : "RED HOUSE", "loc" : [ -78.81446699999999, 37.191431 ], "pop" : 616, "state" : "VA" } +{ "_id" : "23964", "city" : "RED OAK", "loc" : [ -78.632057, 36.772403 ], "pop" : 667, "state" : "VA" } +{ "_id" : "23966", "city" : "RICE", "loc" : [ -78.279262, 37.272132 ], "pop" : 1973, "state" : "VA" } +{ "_id" : "23967", "city" : "SAXE", "loc" : [ -78.605699, 36.90569 ], "pop" : 1095, "state" : "VA" } +{ "_id" : "23968", "city" : "SKIPWITH", "loc" : [ -78.530552, 36.731704 ], "pop" : 1177, "state" : "VA" } +{ "_id" : "23970", "city" : "SOUTH HILL", "loc" : [ -78.15338800000001, 36.712388 ], "pop" : 7056, "state" : "VA" } +{ "_id" : "23974", "city" : "VICTORIA", "loc" : [ -78.23724300000001, 36.983543 ], "pop" : 4027, "state" : "VA" } +{ "_id" : "23976", "city" : "WYLLIESBURG", "loc" : [ -78.612655, 36.838968 ], "pop" : 945, "state" : "VA" } +{ "_id" : "24011", "city" : "ROANOKE", "loc" : [ -79.942019, 37.268997 ], "pop" : 150, "state" : "VA" } +{ "_id" : "24012", "city" : "ROANOKE", "loc" : [ -79.932179, 37.302912 ], "pop" : 22982, "state" : "VA" } +{ "_id" : "24013", "city" : "ROANOKE", "loc" : [ -79.924747, 37.267685 ], "pop" : 8347, "state" : "VA" } +{ "_id" : "24014", "city" : "ROANOKE", "loc" : [ -79.946332, 37.23268 ], "pop" : 21753, "state" : "VA" } +{ "_id" : "24015", "city" : "ROANOKE", "loc" : [ -79.980694, 37.258363 ], "pop" : 15358, "state" : "VA" } +{ "_id" : "24016", "city" : "ROANOKE", "loc" : [ -79.953495, 37.270407 ], "pop" : 9782, "state" : "VA" } +{ "_id" : "24017", "city" : "ROANOKE", "loc" : [ -79.99024799999999, 37.293655 ], "pop" : 24776, "state" : "VA" } +{ "_id" : "24018", "city" : "CAVE SPRING", "loc" : [ -80.021749, 37.231554 ], "pop" : 24993, "state" : "VA" } +{ "_id" : "24019", "city" : "HOLLINS", "loc" : [ -79.956328, 37.33585 ], "pop" : 23189, "state" : "VA" } +{ "_id" : "24053", "city" : "ARARAT", "loc" : [ -80.50933999999999, 36.613946 ], "pop" : 960, "state" : "VA" } +{ "_id" : "24054", "city" : "AXTON", "loc" : [ -79.73963999999999, 36.654839 ], "pop" : 4428, "state" : "VA" } +{ "_id" : "24055", "city" : "BASSETT", "loc" : [ -80.005506, 36.753425 ], "pop" : 14101, "state" : "VA" } +{ "_id" : "24059", "city" : "BENT MOUNTAIN", "loc" : [ -80.145501, 37.206793 ], "pop" : 2388, "state" : "VA" } +{ "_id" : "24060", "city" : "WHITETHORNE", "loc" : [ -80.427313, 37.228804 ], "pop" : 42796, "state" : "VA" } +{ "_id" : "24064", "city" : "BLUE RIDGE", "loc" : [ -79.817178, 37.388542 ], "pop" : 1669, "state" : "VA" } +{ "_id" : "24065", "city" : "BOONES MILL", "loc" : [ -79.95555400000001, 37.13313 ], "pop" : 6767, "state" : "VA" } +{ "_id" : "24066", "city" : "LITHIA", "loc" : [ -79.705287, 37.52844 ], "pop" : 4145, "state" : "VA" } +{ "_id" : "24067", "city" : "CALLAWAY", "loc" : [ -80.049592, 37.028495 ], "pop" : 2012, "state" : "VA" } +{ "_id" : "24069", "city" : "CASCADE", "loc" : [ -79.657438, 36.592697 ], "pop" : 1435, "state" : "VA" } +{ "_id" : "24070", "city" : "CATAWBA", "loc" : [ -80.128384, 37.369649 ], "pop" : 3747, "state" : "VA" } +{ "_id" : "24072", "city" : "SIMPSONS", "loc" : [ -80.23674699999999, 37.032642 ], "pop" : 1048, "state" : "VA" } +{ "_id" : "24073", "city" : "CHRISTIANSBURG", "loc" : [ -80.418774, 37.135286 ], "pop" : 20714, "state" : "VA" } +{ "_id" : "24076", "city" : "CLAUDVILLE", "loc" : [ -80.44417900000001, 36.583899 ], "pop" : 1576, "state" : "VA" } +{ "_id" : "24077", "city" : "CLOVERDALE", "loc" : [ -79.91276499999999, 37.366293 ], "pop" : 582, "state" : "VA" } +{ "_id" : "24078", "city" : "COLLINSVILLE", "loc" : [ -79.914192, 36.72379 ], "pop" : 7668, "state" : "VA" } +{ "_id" : "24079", "city" : "COPPER HILL", "loc" : [ -80.152469, 37.055568 ], "pop" : 1765, "state" : "VA" } +{ "_id" : "24082", "city" : "CRITZ", "loc" : [ -80.12976500000001, 36.621059 ], "pop" : 260, "state" : "VA" } +{ "_id" : "24083", "city" : "DALEVILLE", "loc" : [ -79.92109499999999, 37.41253 ], "pop" : 1408, "state" : "VA" } +{ "_id" : "24084", "city" : "DUBLIN", "loc" : [ -80.669696, 37.098879 ], "pop" : 9521, "state" : "VA" } +{ "_id" : "24085", "city" : "EAGLE ROCK", "loc" : [ -79.817215, 37.666727 ], "pop" : 2939, "state" : "VA" } +{ "_id" : "24086", "city" : "EGGLESTON", "loc" : [ -80.65275800000001, 37.290576 ], "pop" : 374, "state" : "VA" } +{ "_id" : "24087", "city" : "IRONTO", "loc" : [ -80.249658, 37.212651 ], "pop" : 4216, "state" : "VA" } +{ "_id" : "24088", "city" : "FERRUM", "loc" : [ -80.03492300000001, 36.916834 ], "pop" : 4389, "state" : "VA" } +{ "_id" : "24089", "city" : "FIELDALE", "loc" : [ -79.965245, 36.706414 ], "pop" : 2594, "state" : "VA" } +{ "_id" : "24090", "city" : "FINCASTLE", "loc" : [ -79.851116, 37.491099 ], "pop" : 2843, "state" : "VA" } +{ "_id" : "24091", "city" : "ALUM RIDGE", "loc" : [ -80.31905399999999, 36.919523 ], "pop" : 4833, "state" : "VA" } +{ "_id" : "24092", "city" : "GLADEHILL", "loc" : [ -79.77627099999999, 37.016866 ], "pop" : 2047, "state" : "VA" } +{ "_id" : "24093", "city" : "GLEN LYN", "loc" : [ -80.86335800000001, 37.366853 ], "pop" : 126, "state" : "VA" } +{ "_id" : "24094", "city" : "GOLDBOND", "loc" : [ -80.66315, 37.387221 ], "pop" : 53, "state" : "VA" } +{ "_id" : "24095", "city" : "GOODVIEW", "loc" : [ -79.72628400000001, 37.347167 ], "pop" : 1686, "state" : "VA" } +{ "_id" : "24101", "city" : "HARDY", "loc" : [ -79.81266100000001, 37.214473 ], "pop" : 5955, "state" : "VA" } +{ "_id" : "24102", "city" : "HENRY", "loc" : [ -79.99036, 36.839322 ], "pop" : 1393, "state" : "VA" } +{ "_id" : "24104", "city" : "HUDDLESTON", "loc" : [ -79.491017, 37.144155 ], "pop" : 2299, "state" : "VA" } +{ "_id" : "24105", "city" : "INDIAN VALLEY", "loc" : [ -80.57571, 36.898993 ], "pop" : 502, "state" : "VA" } +{ "_id" : "24112", "city" : "MARTINSVILLE", "loc" : [ -79.869136, 36.687067 ], "pop" : 35994, "state" : "VA" } +{ "_id" : "24120", "city" : "MEADOWS OF DAN", "loc" : [ -80.402227, 36.72504 ], "pop" : 1532, "state" : "VA" } +{ "_id" : "24121", "city" : "MONETA", "loc" : [ -79.652111, 37.178383 ], "pop" : 4586, "state" : "VA" } +{ "_id" : "24122", "city" : "MONTVALE", "loc" : [ -79.717462, 37.40696 ], "pop" : 1747, "state" : "VA" } +{ "_id" : "24124", "city" : "NARROWS", "loc" : [ -80.85485, 37.319846 ], "pop" : 5250, "state" : "VA" } +{ "_id" : "24127", "city" : "NEW CASTLE", "loc" : [ -80.17041999999999, 37.487132 ], "pop" : 3400, "state" : "VA" } +{ "_id" : "24128", "city" : "NEWPORT", "loc" : [ -80.50991999999999, 37.306852 ], "pop" : 1578, "state" : "VA" } +{ "_id" : "24131", "city" : "PAINT BANK", "loc" : [ -80.254436, 37.574482 ], "pop" : 153, "state" : "VA" } +{ "_id" : "24133", "city" : "PATRICK SPRINGS", "loc" : [ -80.138769, 36.674435 ], "pop" : 2789, "state" : "VA" } +{ "_id" : "24134", "city" : "PEARISBURG", "loc" : [ -80.726703, 37.304121 ], "pop" : 5279, "state" : "VA" } +{ "_id" : "24136", "city" : "MOUNTAIN LAKE", "loc" : [ -80.61550699999999, 37.33027 ], "pop" : 3087, "state" : "VA" } +{ "_id" : "24137", "city" : "PENHOOK", "loc" : [ -79.66449299999999, 36.920125 ], "pop" : 1768, "state" : "VA" } +{ "_id" : "24138", "city" : "PILOT", "loc" : [ -80.322901, 37.056476 ], "pop" : 882, "state" : "VA" } +{ "_id" : "24139", "city" : "PITTSVILLE", "loc" : [ -79.47941299999999, 36.971578 ], "pop" : 415, "state" : "VA" } +{ "_id" : "24141", "city" : "FAIRLAWN", "loc" : [ -80.571721, 37.135816 ], "pop" : 22335, "state" : "VA" } +{ "_id" : "24147", "city" : "RICH CREEK", "loc" : [ -80.82271799999999, 37.385048 ], "pop" : 947, "state" : "VA" } +{ "_id" : "24148", "city" : "RIDGEWAY", "loc" : [ -79.86859, 36.5874 ], "pop" : 7953, "state" : "VA" } +{ "_id" : "24149", "city" : "RINER", "loc" : [ -80.435309, 37.032209 ], "pop" : 2947, "state" : "VA" } +{ "_id" : "24150", "city" : "RIPPLEMEAD", "loc" : [ -80.671728, 37.366455 ], "pop" : 37, "state" : "VA" } +{ "_id" : "24151", "city" : "ROCKY MOUNT", "loc" : [ -79.883959, 36.989101 ], "pop" : 15579, "state" : "VA" } +{ "_id" : "24153", "city" : "SALEM", "loc" : [ -80.069185, 37.2853 ], "pop" : 30570, "state" : "VA" } +{ "_id" : "24161", "city" : "SANDY LEVEL", "loc" : [ -79.561404, 36.991042 ], "pop" : 512, "state" : "VA" } +{ "_id" : "24162", "city" : "SHAWSVILLE", "loc" : [ -80.27153, 37.146619 ], "pop" : 2571, "state" : "VA" } +{ "_id" : "24165", "city" : "SPENCER", "loc" : [ -80.037345, 36.59676 ], "pop" : 1537, "state" : "VA" } +{ "_id" : "24167", "city" : "STAFFORDSVILLE", "loc" : [ -80.740334, 37.245378 ], "pop" : 464, "state" : "VA" } +{ "_id" : "24168", "city" : "STANLEYTOWN", "loc" : [ -79.93548199999999, 36.734759 ], "pop" : 153, "state" : "VA" } +{ "_id" : "24171", "city" : "STUART", "loc" : [ -80.23923000000001, 36.651744 ], "pop" : 7990, "state" : "VA" } +{ "_id" : "24174", "city" : "THAXTON", "loc" : [ -79.652187, 37.360008 ], "pop" : 1136, "state" : "VA" } +{ "_id" : "24175", "city" : "TROUTVILLE", "loc" : [ -79.878636, 37.401855 ], "pop" : 9211, "state" : "VA" } +{ "_id" : "24176", "city" : "UNION HALL", "loc" : [ -79.686447, 37.013111 ], "pop" : 804, "state" : "VA" } +{ "_id" : "24179", "city" : "STEWARTSVILLE", "loc" : [ -79.835466, 37.271139 ], "pop" : 18205, "state" : "VA" } +{ "_id" : "24184", "city" : "WIRTZ", "loc" : [ -79.757254, 37.081794 ], "pop" : 1675, "state" : "VA" } +{ "_id" : "24185", "city" : "WOOLWINE", "loc" : [ -80.27742600000001, 36.792076 ], "pop" : 898, "state" : "VA" } +{ "_id" : "24201", "city" : "BRISTOL", "loc" : [ -82.18229700000001, 36.618093 ], "pop" : 23166, "state" : "VA" } +{ "_id" : "24210", "city" : "ABINGDON", "loc" : [ -82.019989, 36.691644 ], "pop" : 25429, "state" : "VA" } +{ "_id" : "24216", "city" : "EXETER", "loc" : [ -82.791394, 36.906001 ], "pop" : 2916, "state" : "VA" } +{ "_id" : "24217", "city" : "BEE", "loc" : [ -82.185632, 37.101358 ], "pop" : 495, "state" : "VA" } +{ "_id" : "24219", "city" : "BIG STONE GAP", "loc" : [ -82.762727, 36.858073 ], "pop" : 10858, "state" : "VA" } +{ "_id" : "24220", "city" : "BIRCHLEAF", "loc" : [ -82.248346, 37.169481 ], "pop" : 997, "state" : "VA" } +{ "_id" : "24221", "city" : "BLACKWATER", "loc" : [ -82.98658, 36.639011 ], "pop" : 1008, "state" : "VA" } +{ "_id" : "24224", "city" : "CASTLEWOOD", "loc" : [ -82.28757400000001, 36.876409 ], "pop" : 7166, "state" : "VA" } +{ "_id" : "24225", "city" : "CLEVELAND", "loc" : [ -82.131758, 36.950215 ], "pop" : 1966, "state" : "VA" } +{ "_id" : "24226", "city" : "CLINCHCO", "loc" : [ -82.342476, 37.140581 ], "pop" : 2059, "state" : "VA" } +{ "_id" : "24228", "city" : "CLINTWOOD", "loc" : [ -82.445339, 37.159206 ], "pop" : 7866, "state" : "VA" } +{ "_id" : "24230", "city" : "COEBURN", "loc" : [ -82.47349699999999, 36.960489 ], "pop" : 11745, "state" : "VA" } +{ "_id" : "24236", "city" : "DAMASCUS", "loc" : [ -81.77763299999999, 36.640264 ], "pop" : 3312, "state" : "VA" } +{ "_id" : "24237", "city" : "DANTE", "loc" : [ -82.281519, 37.005419 ], "pop" : 1168, "state" : "VA" } +{ "_id" : "24239", "city" : "DAVENPORT", "loc" : [ -82.122946, 37.068044 ], "pop" : 49, "state" : "VA" } +{ "_id" : "24243", "city" : "DRYDEN", "loc" : [ -82.93047799999999, 36.781825 ], "pop" : 2185, "state" : "VA" } +{ "_id" : "24244", "city" : "CLINCHPORT", "loc" : [ -82.80651, 36.704402 ], "pop" : 5688, "state" : "VA" } +{ "_id" : "24245", "city" : "DUNGANNON", "loc" : [ -82.496025, 36.82416 ], "pop" : 1231, "state" : "VA" } +{ "_id" : "24248", "city" : "EWING", "loc" : [ -83.50473700000001, 36.623694 ], "pop" : 2599, "state" : "VA" } +{ "_id" : "24250", "city" : "FORT BLACKMORE", "loc" : [ -82.610178, 36.743828 ], "pop" : 1085, "state" : "VA" } +{ "_id" : "24251", "city" : "GATE CITY", "loc" : [ -82.61117900000001, 36.646026 ], "pop" : 7641, "state" : "VA" } +{ "_id" : "24256", "city" : "HAYSI", "loc" : [ -82.28530600000001, 37.220552 ], "pop" : 3813, "state" : "VA" } +{ "_id" : "24258", "city" : "HILTONS", "loc" : [ -82.429929, 36.649778 ], "pop" : 1937, "state" : "VA" } +{ "_id" : "24260", "city" : "COUNCIL", "loc" : [ -81.996883, 37.027292 ], "pop" : 6162, "state" : "VA" } +{ "_id" : "24263", "city" : "JONESVILLE", "loc" : [ -83.13615, 36.689647 ], "pop" : 6275, "state" : "VA" } +{ "_id" : "24265", "city" : "KEOKEE", "loc" : [ -82.977161, 36.823931 ], "pop" : 1807, "state" : "VA" } +{ "_id" : "24266", "city" : "LEBANON", "loc" : [ -82.09563, 36.880895 ], "pop" : 7818, "state" : "VA" } +{ "_id" : "24269", "city" : "MC CLURE", "loc" : [ -82.38055300000001, 37.081412 ], "pop" : 124, "state" : "VA" } +{ "_id" : "24270", "city" : "MENDOTA", "loc" : [ -82.264888, 36.722302 ], "pop" : 675, "state" : "VA" } +{ "_id" : "24271", "city" : "NICKELSVILLE", "loc" : [ -82.42017199999999, 36.750221 ], "pop" : 2749, "state" : "VA" } +{ "_id" : "24272", "city" : "NORA", "loc" : [ -82.35002299999999, 37.018229 ], "pop" : 514, "state" : "VA" } +{ "_id" : "24273", "city" : "NORTON", "loc" : [ -82.624923, 36.937797 ], "pop" : 4145, "state" : "VA" } +{ "_id" : "24277", "city" : "PENNINGTON GAP", "loc" : [ -83.022299, 36.750752 ], "pop" : 5859, "state" : "VA" } +{ "_id" : "24279", "city" : "POUND", "loc" : [ -82.601555, 37.092734 ], "pop" : 5330, "state" : "VA" } +{ "_id" : "24280", "city" : "ROSEDALE", "loc" : [ -81.88879300000001, 36.973981 ], "pop" : 2492, "state" : "VA" } +{ "_id" : "24281", "city" : "ROSE HILL", "loc" : [ -83.34856499999999, 36.658257 ], "pop" : 2404, "state" : "VA" } +{ "_id" : "24282", "city" : "SAINT CHARLES", "loc" : [ -83.051838, 36.831515 ], "pop" : 485, "state" : "VA" } +{ "_id" : "24283", "city" : "SAINT PAUL", "loc" : [ -82.34184399999999, 36.932295 ], "pop" : 2680, "state" : "VA" } +{ "_id" : "24285", "city" : "STONEGA", "loc" : [ -82.819194, 36.950176 ], "pop" : 670, "state" : "VA" } +{ "_id" : "24289", "city" : "TRAMMEL", "loc" : [ -82.217563, 37.022959 ], "pop" : 51, "state" : "VA" } +{ "_id" : "24290", "city" : "WEBER CITY", "loc" : [ -82.545227, 36.620213 ], "pop" : 2981, "state" : "VA" } +{ "_id" : "24292", "city" : "WHITETOP", "loc" : [ -81.583938, 36.610559 ], "pop" : 642, "state" : "VA" } +{ "_id" : "24293", "city" : "WISE", "loc" : [ -82.594679, 36.975 ], "pop" : 8957, "state" : "VA" } +{ "_id" : "24301", "city" : "PULASKI", "loc" : [ -80.770961, 37.056708 ], "pop" : 16576, "state" : "VA" } +{ "_id" : "24311", "city" : "ATKINS", "loc" : [ -81.404791, 36.866532 ], "pop" : 1108, "state" : "VA" } +{ "_id" : "24312", "city" : "AUSTINVILLE", "loc" : [ -80.858322, 36.819461 ], "pop" : 2488, "state" : "VA" } +{ "_id" : "24313", "city" : "BARREN SPRINGS", "loc" : [ -80.809006, 36.907787 ], "pop" : 575, "state" : "VA" } +{ "_id" : "24314", "city" : "BASTIAN", "loc" : [ -81.19885499999999, 37.15742 ], "pop" : 1656, "state" : "VA" } +{ "_id" : "24315", "city" : "BLAND", "loc" : [ -81.020064, 37.137644 ], "pop" : 3261, "state" : "VA" } +{ "_id" : "24316", "city" : "BROADFORD", "loc" : [ -81.65938800000001, 36.93299 ], "pop" : 132, "state" : "VA" } +{ "_id" : "24317", "city" : "CANA", "loc" : [ -80.670452, 36.59574 ], "pop" : 3363, "state" : "VA" } +{ "_id" : "24318", "city" : "CERES", "loc" : [ -81.364272, 37.00456 ], "pop" : 833, "state" : "VA" } +{ "_id" : "24319", "city" : "CHILHOWIE", "loc" : [ -81.665103, 36.771912 ], "pop" : 6087, "state" : "VA" } +{ "_id" : "24322", "city" : "CRIPPLE CREEK", "loc" : [ -81.103928, 36.808612 ], "pop" : 157, "state" : "VA" } +{ "_id" : "24323", "city" : "CROCKETT", "loc" : [ -81.208883, 36.876755 ], "pop" : 347, "state" : "VA" } +{ "_id" : "24324", "city" : "DRAPER", "loc" : [ -80.818752, 36.969743 ], "pop" : 1161, "state" : "VA" } +{ "_id" : "24325", "city" : "DUGSPUR", "loc" : [ -80.612348, 36.814546 ], "pop" : 1241, "state" : "VA" } +{ "_id" : "24326", "city" : "ELK CREEK", "loc" : [ -81.19148800000001, 36.730579 ], "pop" : 1161, "state" : "VA" } +{ "_id" : "24328", "city" : "FANCY GAP", "loc" : [ -80.69074999999999, 36.663972 ], "pop" : 1929, "state" : "VA" } +{ "_id" : "24330", "city" : "FRIES", "loc" : [ -81.00415700000001, 36.724683 ], "pop" : 4077, "state" : "VA" } +{ "_id" : "24333", "city" : "GALAX", "loc" : [ -80.911744, 36.656503 ], "pop" : 17442, "state" : "VA" } +{ "_id" : "24340", "city" : "GLADE SPRING", "loc" : [ -81.767639, 36.7779 ], "pop" : 4384, "state" : "VA" } +{ "_id" : "24343", "city" : "HILLSVILLE", "loc" : [ -80.71973, 36.744225 ], "pop" : 10578, "state" : "VA" } +{ "_id" : "24347", "city" : "ALLISONIA", "loc" : [ -80.63817299999999, 36.997815 ], "pop" : 2062, "state" : "VA" } +{ "_id" : "24348", "city" : "INDEPENDENCE", "loc" : [ -81.158202, 36.629444 ], "pop" : 3760, "state" : "VA" } +{ "_id" : "24350", "city" : "IVANHOE", "loc" : [ -80.97791100000001, 36.827225 ], "pop" : 1006, "state" : "VA" } +{ "_id" : "24351", "city" : "LAMBSBURG", "loc" : [ -80.760133, 36.577483 ], "pop" : 528, "state" : "VA" } +{ "_id" : "24352", "city" : "LAUREL FORK", "loc" : [ -80.514776, 36.707347 ], "pop" : 714, "state" : "VA" } +{ "_id" : "24354", "city" : "MARION", "loc" : [ -81.534914, 36.827316 ], "pop" : 16672, "state" : "VA" } +{ "_id" : "24360", "city" : "FOSTER FALLS", "loc" : [ -80.921391, 36.91708 ], "pop" : 4621, "state" : "VA" } +{ "_id" : "24361", "city" : "MEADOWVIEW", "loc" : [ -81.85120499999999, 36.761175 ], "pop" : 6288, "state" : "VA" } +{ "_id" : "24363", "city" : "MOUTH OF WILSON", "loc" : [ -81.39545200000001, 36.610379 ], "pop" : 1735, "state" : "VA" } +{ "_id" : "24366", "city" : "ROCKY GAP", "loc" : [ -81.155236, 37.244242 ], "pop" : 510, "state" : "VA" } +{ "_id" : "24368", "city" : "RURAL RETREAT", "loc" : [ -81.28787199999999, 36.883616 ], "pop" : 4350, "state" : "VA" } +{ "_id" : "24370", "city" : "SALTVILLE", "loc" : [ -81.740201, 36.892699 ], "pop" : 6739, "state" : "VA" } +{ "_id" : "24373", "city" : "SEVEN MILE FORD", "loc" : [ -81.645672, 36.815329 ], "pop" : 155, "state" : "VA" } +{ "_id" : "24374", "city" : "SPEEDWELL", "loc" : [ -81.183404, 36.799843 ], "pop" : 633, "state" : "VA" } +{ "_id" : "24375", "city" : "SUGAR GROVE", "loc" : [ -81.40844300000001, 36.773633 ], "pop" : 1237, "state" : "VA" } +{ "_id" : "24377", "city" : "TANNERSVILLE", "loc" : [ -81.628017, 36.976331 ], "pop" : 271, "state" : "VA" } +{ "_id" : "24378", "city" : "TROUT DALE", "loc" : [ -81.43500400000001, 36.68546 ], "pop" : 1261, "state" : "VA" } +{ "_id" : "24380", "city" : "WILLIS", "loc" : [ -80.490861, 36.874927 ], "pop" : 2769, "state" : "VA" } +{ "_id" : "24381", "city" : "WOODLAWN", "loc" : [ -80.882437, 36.787948 ], "pop" : 218, "state" : "VA" } +{ "_id" : "24382", "city" : "WYTHEVILLE", "loc" : [ -81.094082, 36.940669 ], "pop" : 13788, "state" : "VA" } +{ "_id" : "24401", "city" : "WOODRUM", "loc" : [ -79.07519000000001, 38.145104 ], "pop" : 34323, "state" : "VA" } +{ "_id" : "24413", "city" : "BLUE GRASS", "loc" : [ -79.561272, 38.515231 ], "pop" : 201, "state" : "VA" } +{ "_id" : "24416", "city" : "BUENA VISTA", "loc" : [ -79.352311, 37.739585 ], "pop" : 8464, "state" : "VA" } +{ "_id" : "24421", "city" : "CHURCHVILLE", "loc" : [ -79.179126, 38.234605 ], "pop" : 3411, "state" : "VA" } +{ "_id" : "24422", "city" : "CLIFTON FORGE", "loc" : [ -79.805423, 37.820342 ], "pop" : 7486, "state" : "VA" } +{ "_id" : "24426", "city" : "ALLEGHANY", "loc" : [ -80.003176, 37.784203 ], "pop" : 16958, "state" : "VA" } +{ "_id" : "24430", "city" : "CRAIGSVILLE", "loc" : [ -79.36188300000001, 38.076826 ], "pop" : 3008, "state" : "VA" } +{ "_id" : "24431", "city" : "CRIMORA", "loc" : [ -78.841275, 38.168422 ], "pop" : 2153, "state" : "VA" } +{ "_id" : "24432", "city" : "DEERFIELD", "loc" : [ -79.41518600000001, 38.184231 ], "pop" : 389, "state" : "VA" } +{ "_id" : "24433", "city" : "DOE HILL", "loc" : [ -79.482176, 38.390248 ], "pop" : 265, "state" : "VA" } +{ "_id" : "24435", "city" : "FAIRFIELD", "loc" : [ -79.297922, 37.877825 ], "pop" : 1314, "state" : "VA" } +{ "_id" : "24437", "city" : "FORT DEFIANCE", "loc" : [ -78.93258299999999, 38.210928 ], "pop" : 824, "state" : "VA" } +{ "_id" : "24439", "city" : "GOSHEN", "loc" : [ -79.47732499999999, 37.987813 ], "pop" : 1173, "state" : "VA" } +{ "_id" : "24440", "city" : "GREENVILLE", "loc" : [ -79.135876, 38.001804 ], "pop" : 1975, "state" : "VA" } +{ "_id" : "24441", "city" : "GROTTOES", "loc" : [ -78.82552800000001, 38.248371 ], "pop" : 3879, "state" : "VA" } +{ "_id" : "24442", "city" : "HEAD WATERS", "loc" : [ -79.435272, 38.294611 ], "pop" : 87, "state" : "VA" } +{ "_id" : "24444", "city" : "HIGHTOWN", "loc" : [ -79.592927, 38.464597 ], "pop" : 192, "state" : "VA" } +{ "_id" : "24445", "city" : "HOT SPRINGS", "loc" : [ -79.871662, 37.963784 ], "pop" : 2506, "state" : "VA" } +{ "_id" : "24450", "city" : "LEXINGTON", "loc" : [ -79.458111, 37.788463 ], "pop" : 14306, "state" : "VA" } +{ "_id" : "24458", "city" : "MC DOWELL", "loc" : [ -79.49879799999999, 38.326588 ], "pop" : 353, "state" : "VA" } +{ "_id" : "24459", "city" : "MIDDLEBROOK", "loc" : [ -79.281165, 38.024158 ], "pop" : 527, "state" : "VA" } +{ "_id" : "24460", "city" : "MILLBORO SPRING", "loc" : [ -79.640649, 38.005795 ], "pop" : 1586, "state" : "VA" } +{ "_id" : "24464", "city" : "MONTEBELLO", "loc" : [ -79.06107900000001, 37.839931 ], "pop" : 579, "state" : "VA" } +{ "_id" : "24465", "city" : "MONTEREY", "loc" : [ -79.59407, 38.405821 ], "pop" : 1335, "state" : "VA" } +{ "_id" : "24467", "city" : "MOUNT SIDNEY", "loc" : [ -78.97296, 38.261185 ], "pop" : 1787, "state" : "VA" } +{ "_id" : "24468", "city" : "MUSTOE", "loc" : [ -79.659137, 38.286216 ], "pop" : 202, "state" : "VA" } +{ "_id" : "24471", "city" : "PORT REPUBLIC", "loc" : [ -78.810388, 38.317167 ], "pop" : 1196, "state" : "VA" } +{ "_id" : "24472", "city" : "RAPHINE", "loc" : [ -79.221903, 37.937353 ], "pop" : 2238, "state" : "VA" } +{ "_id" : "24473", "city" : "ROCKBRIDGE BATHS", "loc" : [ -79.387421, 37.896458 ], "pop" : 677, "state" : "VA" } +{ "_id" : "24475", "city" : "SPOTTSWOOD", "loc" : [ -79.221141, 37.968418 ], "pop" : 393, "state" : "VA" } +{ "_id" : "24477", "city" : "STUARTS DRAFT", "loc" : [ -79.029821, 38.014423 ], "pop" : 5317, "state" : "VA" } +{ "_id" : "24479", "city" : "SWOOPE", "loc" : [ -79.187281, 38.159117 ], "pop" : 1477, "state" : "VA" } +{ "_id" : "24482", "city" : "VERONA", "loc" : [ -79.005872, 38.203726 ], "pop" : 4491, "state" : "VA" } +{ "_id" : "24483", "city" : "VESUVIUS", "loc" : [ -79.21348500000001, 37.83777 ], "pop" : 548, "state" : "VA" } +{ "_id" : "24484", "city" : "BOLAR", "loc" : [ -79.80779200000001, 38.085119 ], "pop" : 940, "state" : "VA" } +{ "_id" : "24485", "city" : "WEST AUGUSTA", "loc" : [ -79.320139, 38.274397 ], "pop" : 350, "state" : "VA" } +{ "_id" : "24486", "city" : "WEYERS CAVE", "loc" : [ -78.92345400000001, 38.293145 ], "pop" : 2190, "state" : "VA" } +{ "_id" : "24487", "city" : "BURNSVILLE", "loc" : [ -79.65060699999999, 38.177907 ], "pop" : 170, "state" : "VA" } +{ "_id" : "24501", "city" : "LYNCHBURG", "loc" : [ -79.171464, 37.386228 ], "pop" : 27264, "state" : "VA" } +{ "_id" : "24502", "city" : "TIMBERLAKE", "loc" : [ -79.211783, 37.359635 ], "pop" : 28755, "state" : "VA" } +{ "_id" : "24503", "city" : "LYNCHBURG", "loc" : [ -79.204982, 37.437646 ], "pop" : 17816, "state" : "VA" } +{ "_id" : "24504", "city" : "LYNCHBURG", "loc" : [ -79.12142, 37.390422 ], "pop" : 10889, "state" : "VA" } +{ "_id" : "24517", "city" : "ALTAVISTA", "loc" : [ -79.291145, 37.122162 ], "pop" : 4043, "state" : "VA" } +{ "_id" : "24520", "city" : "ALTON", "loc" : [ -79.02023699999999, 36.589352 ], "pop" : 2557, "state" : "VA" } +{ "_id" : "24521", "city" : "AMHERST", "loc" : [ -79.050572, 37.602677 ], "pop" : 7343, "state" : "VA" } +{ "_id" : "24522", "city" : "APPOMATTOX", "loc" : [ -78.822445, 37.352951 ], "pop" : 8904, "state" : "VA" } +{ "_id" : "24523", "city" : "BEDFORD", "loc" : [ -79.53310999999999, 37.315345 ], "pop" : 16245, "state" : "VA" } +{ "_id" : "24526", "city" : "BIG ISLAND", "loc" : [ -79.382706, 37.530556 ], "pop" : 1313, "state" : "VA" } +{ "_id" : "24527", "city" : "BLAIRS", "loc" : [ -79.37886899999999, 36.667408 ], "pop" : 5007, "state" : "VA" } +{ "_id" : "24528", "city" : "BROOKNEAL", "loc" : [ -78.922679, 37.082663 ], "pop" : 4364, "state" : "VA" } +{ "_id" : "24529", "city" : "BUFFALO JUNCTION", "loc" : [ -78.60926600000001, 36.61676 ], "pop" : 3300, "state" : "VA" } +{ "_id" : "24530", "city" : "CALLANDS", "loc" : [ -79.62877899999999, 36.764748 ], "pop" : 2143, "state" : "VA" } +{ "_id" : "24531", "city" : "CHATHAM", "loc" : [ -79.429659, 36.83099 ], "pop" : 7825, "state" : "VA" } +{ "_id" : "24534", "city" : "CLOVER", "loc" : [ -78.78618, 36.863695 ], "pop" : 1516, "state" : "VA" } +{ "_id" : "24536", "city" : "COLEMAN FALLS", "loc" : [ -79.315757, 37.488659 ], "pop" : 286, "state" : "VA" } +{ "_id" : "24538", "city" : "CONCORD", "loc" : [ -78.98035299999999, 37.336953 ], "pop" : 3845, "state" : "VA" } +{ "_id" : "24539", "city" : "CRYSTAL HILL", "loc" : [ -78.970634, 36.873217 ], "pop" : 280, "state" : "VA" } +{ "_id" : "24540", "city" : "DANVILLE", "loc" : [ -79.412441, 36.621789 ], "pop" : 32061, "state" : "VA" } +{ "_id" : "24541", "city" : "DANVILLE", "loc" : [ -79.441112, 36.577937 ], "pop" : 33751, "state" : "VA" } +{ "_id" : "24549", "city" : "DRY FORK", "loc" : [ -79.457966, 36.743008 ], "pop" : 1989, "state" : "VA" } +{ "_id" : "24550", "city" : "EVINGTON", "loc" : [ -79.231723, 37.261049 ], "pop" : 4961, "state" : "VA" } +{ "_id" : "24551", "city" : "FOREST", "loc" : [ -79.279116, 37.337878 ], "pop" : 12905, "state" : "VA" } +{ "_id" : "24553", "city" : "GLADSTONE", "loc" : [ -78.850838, 37.547252 ], "pop" : 2025, "state" : "VA" } +{ "_id" : "24554", "city" : "GLADYS", "loc" : [ -79.104794, 37.138581 ], "pop" : 3511, "state" : "VA" } +{ "_id" : "24555", "city" : "GLASGOW", "loc" : [ -79.45898, 37.643 ], "pop" : 1604, "state" : "VA" } +{ "_id" : "24556", "city" : "GOODE", "loc" : [ -79.381277, 37.348098 ], "pop" : 2516, "state" : "VA" } +{ "_id" : "24557", "city" : "GRETNA", "loc" : [ -79.338874, 36.969515 ], "pop" : 8304, "state" : "VA" } +{ "_id" : "24558", "city" : "HALIFAX", "loc" : [ -78.94149400000001, 36.762571 ], "pop" : 7127, "state" : "VA" } +{ "_id" : "24562", "city" : "HOWARDSVILLE", "loc" : [ -78.58235500000001, 37.765891 ], "pop" : 21, "state" : "VA" } +{ "_id" : "24563", "city" : "HURT", "loc" : [ -79.299995, 37.079787 ], "pop" : 5283, "state" : "VA" } +{ "_id" : "24565", "city" : "JAVA", "loc" : [ -79.187034, 36.858582 ], "pop" : 1111, "state" : "VA" } +{ "_id" : "24566", "city" : "KEELING", "loc" : [ -79.278284, 36.715577 ], "pop" : 2651, "state" : "VA" } +{ "_id" : "24569", "city" : "LONG ISLAND", "loc" : [ -79.121933, 37.064374 ], "pop" : 1308, "state" : "VA" } +{ "_id" : "24570", "city" : "LOWRY", "loc" : [ -79.45559900000001, 37.33361 ], "pop" : 1342, "state" : "VA" } +{ "_id" : "24571", "city" : "LYNCH STATION", "loc" : [ -79.329716, 37.152826 ], "pop" : 2819, "state" : "VA" } +{ "_id" : "24572", "city" : "MADISON HEIGHTS", "loc" : [ -79.11408900000001, 37.453102 ], "pop" : 15389, "state" : "VA" } +{ "_id" : "24574", "city" : "MONROE", "loc" : [ -79.17034, 37.541366 ], "pop" : 5050, "state" : "VA" } +{ "_id" : "24577", "city" : "LENNIG", "loc" : [ -78.989766, 36.944179 ], "pop" : 5018, "state" : "VA" } +{ "_id" : "24578", "city" : "NATURAL BRIDGE", "loc" : [ -79.533045, 37.660625 ], "pop" : 1236, "state" : "VA" } +{ "_id" : "24579", "city" : "NATURAL BRIDGE S", "loc" : [ -79.503905, 37.595667 ], "pop" : 1419, "state" : "VA" } +{ "_id" : "24580", "city" : "NELSON", "loc" : [ -78.670959, 36.558558 ], "pop" : 131, "state" : "VA" } +{ "_id" : "24586", "city" : "RINGGOLD", "loc" : [ -79.298835, 36.603483 ], "pop" : 4728, "state" : "VA" } +{ "_id" : "24588", "city" : "RUSTBURG", "loc" : [ -79.12150699999999, 37.25454 ], "pop" : 4723, "state" : "VA" } +{ "_id" : "24589", "city" : "SCOTTSBURG", "loc" : [ -78.786601, 36.786194 ], "pop" : 2965, "state" : "VA" } +{ "_id" : "24590", "city" : "SCOTTSVILLE", "loc" : [ -78.47398099999999, 37.804937 ], "pop" : 5769, "state" : "VA" } +{ "_id" : "24592", "city" : "SOUTH BOSTON", "loc" : [ -78.918829, 36.696335 ], "pop" : 12624, "state" : "VA" } +{ "_id" : "24593", "city" : "SPOUT SPRING", "loc" : [ -78.90588700000001, 37.364345 ], "pop" : 872, "state" : "VA" } +{ "_id" : "24594", "city" : "SUTHERLIN", "loc" : [ -79.19495000000001, 36.625831 ], "pop" : 1018, "state" : "VA" } +{ "_id" : "24597", "city" : "INGRAM", "loc" : [ -79.110874, 36.786684 ], "pop" : 1648, "state" : "VA" } +{ "_id" : "24598", "city" : "VIRGILINA", "loc" : [ -78.760516, 36.606231 ], "pop" : 2435, "state" : "VA" } +{ "_id" : "24599", "city" : "WINGINA", "loc" : [ -78.755709, 37.641473 ], "pop" : 833, "state" : "VA" } +{ "_id" : "24602", "city" : "BANDY", "loc" : [ -81.6508, 37.166112 ], "pop" : 2348, "state" : "VA" } +{ "_id" : "24603", "city" : "CONAWAY", "loc" : [ -82.22459600000001, 37.318638 ], "pop" : 1151, "state" : "VA" } +{ "_id" : "24605", "city" : "BLUEFIELD", "loc" : [ -81.325114, 37.249512 ], "pop" : 10931, "state" : "VA" } +{ "_id" : "24609", "city" : "CEDAR BLUFF", "loc" : [ -81.76678800000001, 37.079076 ], "pop" : 3486, "state" : "VA" } +{ "_id" : "24613", "city" : "FALLS MILLS", "loc" : [ -81.318234, 37.271023 ], "pop" : 960, "state" : "VA" } +{ "_id" : "24614", "city" : "GRUNDY", "loc" : [ -82.106077, 37.296678 ], "pop" : 10245, "state" : "VA" } +{ "_id" : "24620", "city" : "HURLEY", "loc" : [ -82.02616399999999, 37.401741 ], "pop" : 5296, "state" : "VA" } +{ "_id" : "24622", "city" : "JEWELL VALLEY", "loc" : [ -81.810654, 37.222372 ], "pop" : 1213, "state" : "VA" } +{ "_id" : "24627", "city" : "MAVISDALE", "loc" : [ -82.221599, 37.200817 ], "pop" : 141, "state" : "VA" } +{ "_id" : "24630", "city" : "TIPTOP", "loc" : [ -81.525256, 37.152447 ], "pop" : 6771, "state" : "VA" } +{ "_id" : "24631", "city" : "PATTERSON", "loc" : [ -81.99157700000001, 37.184074 ], "pop" : 1356, "state" : "VA" } +{ "_id" : "24634", "city" : "PILGRIMS KNOB", "loc" : [ -81.911896, 37.298944 ], "pop" : 766, "state" : "VA" } +{ "_id" : "24637", "city" : "POUNDING MILL", "loc" : [ -81.730052, 37.059584 ], "pop" : 3942, "state" : "VA" } +{ "_id" : "24639", "city" : "RAVEN", "loc" : [ -81.889557, 37.148056 ], "pop" : 3441, "state" : "VA" } +{ "_id" : "24641", "city" : "RICHLANDS", "loc" : [ -81.812286, 37.094051 ], "pop" : 8026, "state" : "VA" } +{ "_id" : "24646", "city" : "ROWE", "loc" : [ -82.02738100000001, 37.127593 ], "pop" : 1531, "state" : "VA" } +{ "_id" : "24649", "city" : "SWORDS CREEK", "loc" : [ -81.908385, 37.073792 ], "pop" : 2756, "state" : "VA" } +{ "_id" : "24651", "city" : "TAZEWELL", "loc" : [ -81.50997599999999, 37.107773 ], "pop" : 7023, "state" : "VA" } +{ "_id" : "24656", "city" : "VANSANT", "loc" : [ -82.12771499999999, 37.173811 ], "pop" : 4724, "state" : "VA" } +{ "_id" : "24657", "city" : "WHITEWOOD", "loc" : [ -81.890361, 37.264409 ], "pop" : 731, "state" : "VA" } +{ "_id" : "24701", "city" : "BLUEWELL", "loc" : [ -81.229023, 37.279788 ], "pop" : 22561, "state" : "WV" } +{ "_id" : "24712", "city" : "ATHENS", "loc" : [ -80.997362, 37.432298 ], "pop" : 2863, "state" : "WV" } +{ "_id" : "24714", "city" : "BEESON", "loc" : [ -81.206215, 37.490894 ], "pop" : 140, "state" : "WV" } +{ "_id" : "24715", "city" : "BRAMWELL", "loc" : [ -81.32556, 37.332114 ], "pop" : 762, "state" : "WV" } +{ "_id" : "24726", "city" : "HERNDON", "loc" : [ -81.346777, 37.526431 ], "pop" : 2220, "state" : "WV" } +{ "_id" : "24731", "city" : "KEGLEY", "loc" : [ -81.140117, 37.408384 ], "pop" : 259, "state" : "WV" } +{ "_id" : "24733", "city" : "LASHMEET", "loc" : [ -81.21384500000001, 37.441997 ], "pop" : 730, "state" : "WV" } +{ "_id" : "24736", "city" : "DOTT", "loc" : [ -81.268017, 37.441778 ], "pop" : 1365, "state" : "WV" } +{ "_id" : "24740", "city" : "ELGOOD", "loc" : [ -81.086386, 37.366817 ], "pop" : 29167, "state" : "WV" } +{ "_id" : "24747", "city" : "DUHRING", "loc" : [ -81.218766, 37.38889 ], "pop" : 5336, "state" : "WV" } +{ "_id" : "24801", "city" : "WELCH", "loc" : [ -81.534412, 37.400032 ], "pop" : 11143, "state" : "WV" } +{ "_id" : "24810", "city" : "MC DOWELL", "loc" : [ -81.387601, 37.414348 ], "pop" : 1968, "state" : "WV" } +{ "_id" : "24818", "city" : "BRENTON", "loc" : [ -81.649502, 37.584362 ], "pop" : 1908, "state" : "WV" } +{ "_id" : "24819", "city" : "VALLSCREEK", "loc" : [ -81.69552, 37.295548 ], "pop" : 4476, "state" : "WV" } +{ "_id" : "24822", "city" : "CLEAR FORK", "loc" : [ -81.689268, 37.646301 ], "pop" : 1173, "state" : "WV" } +{ "_id" : "24823", "city" : "COAL MOUNTAIN", "loc" : [ -81.70786200000001, 37.688486 ], "pop" : 850, "state" : "WV" } +{ "_id" : "24827", "city" : "CYCLONE", "loc" : [ -81.650458, 37.74466 ], "pop" : 1328, "state" : "WV" } +{ "_id" : "24828", "city" : "ASCO", "loc" : [ -81.667889, 37.468339 ], "pop" : 2765, "state" : "WV" } +{ "_id" : "24834", "city" : "FANROCK", "loc" : [ -81.623631, 37.562721 ], "pop" : 120, "state" : "WV" } +{ "_id" : "24839", "city" : "HANOVER", "loc" : [ -81.81361699999999, 37.563029 ], "pop" : 1523, "state" : "WV" } +{ "_id" : "24844", "city" : "IAEGER", "loc" : [ -81.811992, 37.449878 ], "pop" : 5720, "state" : "WV" } +{ "_id" : "24849", "city" : "JESSE", "loc" : [ -81.562831, 37.660844 ], "pop" : 585, "state" : "WV" } +{ "_id" : "24850", "city" : "JOLO", "loc" : [ -81.831602, 37.332431 ], "pop" : 3086, "state" : "WV" } +{ "_id" : "24859", "city" : "MARIANNA", "loc" : [ -81.576052, 37.611425 ], "pop" : 1008, "state" : "WV" } +{ "_id" : "24860", "city" : "MATHENY", "loc" : [ -81.59571099999999, 37.661956 ], "pop" : 1139, "state" : "WV" } +{ "_id" : "24862", "city" : "MOHAWK", "loc" : [ -81.914174, 37.487926 ], "pop" : 1705, "state" : "WV" } +{ "_id" : "24868", "city" : "ALGOMA", "loc" : [ -81.41583900000001, 37.395262 ], "pop" : 2158, "state" : "WV" } +{ "_id" : "24869", "city" : "NORTH SPRING", "loc" : [ -81.797276, 37.517954 ], "pop" : 226, "state" : "WV" } +{ "_id" : "24870", "city" : "OCEANA", "loc" : [ -81.62156400000001, 37.703874 ], "pop" : 4243, "state" : "WV" } +{ "_id" : "24873", "city" : "PAYNESVILLE", "loc" : [ -81.68449, 37.365273 ], "pop" : 1895, "state" : "WV" } +{ "_id" : "24874", "city" : "PINEVILLE", "loc" : [ -81.533642, 37.584022 ], "pop" : 4142, "state" : "WV" } +{ "_id" : "24882", "city" : "SIMON", "loc" : [ -81.758566, 37.619708 ], "pop" : 782, "state" : "WV" } +{ "_id" : "24884", "city" : "SQUIRE", "loc" : [ -81.580478, 37.237019 ], "pop" : 995, "state" : "WV" } +{ "_id" : "24901", "city" : "LEWISBURG", "loc" : [ -80.440669, 37.808253 ], "pop" : 8645, "state" : "WV" } +{ "_id" : "24910", "city" : "DAWSON", "loc" : [ -80.671306, 37.730148 ], "pop" : 4475, "state" : "WV" } +{ "_id" : "24915", "city" : "ARBOVALE", "loc" : [ -79.793403, 38.454575 ], "pop" : 528, "state" : "WV" } +{ "_id" : "24916", "city" : "ASBURY", "loc" : [ -80.565319, 37.848766 ], "pop" : 598, "state" : "WV" } +{ "_id" : "24917", "city" : "AUTO", "loc" : [ -80.117105, 37.981697 ], "pop" : 379, "state" : "WV" } +{ "_id" : "24918", "city" : "BALLARD", "loc" : [ -80.76139000000001, 37.49803 ], "pop" : 1194, "state" : "WV" } +{ "_id" : "24919", "city" : "BALLENGEE", "loc" : [ -80.74033900000001, 37.616931 ], "pop" : 184, "state" : "WV" } +{ "_id" : "24920", "city" : "BARTOW", "loc" : [ -79.795242, 38.551266 ], "pop" : 748, "state" : "WV" } +{ "_id" : "24923", "city" : "BOZOO", "loc" : [ -80.814954, 37.457015 ], "pop" : 651, "state" : "WV" } +{ "_id" : "24924", "city" : "BUCKEYE", "loc" : [ -80.139342, 38.181506 ], "pop" : 550, "state" : "WV" } +{ "_id" : "24925", "city" : "CALDWELL", "loc" : [ -80.377298, 37.773488 ], "pop" : 312, "state" : "WV" } +{ "_id" : "24927", "city" : "STONY BOTTOM", "loc" : [ -79.885278, 38.433659 ], "pop" : 844, "state" : "WV" } +{ "_id" : "24928", "city" : "CLINTONVILLE", "loc" : [ -80.626192, 37.906141 ], "pop" : 373, "state" : "WV" } +{ "_id" : "24931", "city" : "CRAWLEY", "loc" : [ -80.6309, 37.939676 ], "pop" : 286, "state" : "WV" } +{ "_id" : "24934", "city" : "DUNMORE", "loc" : [ -79.855557, 38.363605 ], "pop" : 265, "state" : "WV" } +{ "_id" : "24935", "city" : "INDIAN MILLS", "loc" : [ -80.81492299999999, 37.56005 ], "pop" : 368, "state" : "WV" } +{ "_id" : "24936", "city" : "FORT SPRING", "loc" : [ -80.566723, 37.745661 ], "pop" : 397, "state" : "WV" } +{ "_id" : "24938", "city" : "ANTHONY", "loc" : [ -80.36469200000001, 37.90361 ], "pop" : 814, "state" : "WV" } +{ "_id" : "24941", "city" : "GAP MILLS", "loc" : [ -80.390497, 37.527978 ], "pop" : 289, "state" : "WV" } +{ "_id" : "24942", "city" : "GLACE", "loc" : [ -80.37471600000001, 37.609381 ], "pop" : 399, "state" : "WV" } +{ "_id" : "24943", "city" : "GRASSY MEADOWS", "loc" : [ -80.73023999999999, 37.842757 ], "pop" : 185, "state" : "WV" } +{ "_id" : "24944", "city" : "GREEN BANK", "loc" : [ -79.801535, 38.409664 ], "pop" : 365, "state" : "WV" } +{ "_id" : "24945", "city" : "GREENVILLE", "loc" : [ -80.67612800000001, 37.521184 ], "pop" : 1139, "state" : "WV" } +{ "_id" : "24946", "city" : "DROOP", "loc" : [ -80.244578, 38.125942 ], "pop" : 1393, "state" : "WV" } +{ "_id" : "24950", "city" : "KIEFFER", "loc" : [ -80.59022, 37.942998 ], "pop" : 2, "state" : "WV" } +{ "_id" : "24951", "city" : "LINDSIDE", "loc" : [ -80.62027999999999, 37.481651 ], "pop" : 810, "state" : "WV" } +{ "_id" : "24954", "city" : "MINNEHAHA SPRING", "loc" : [ -80.060884, 38.229303 ], "pop" : 3713, "state" : "WV" } +{ "_id" : "24957", "city" : "MAXWELTON", "loc" : [ -80.427492, 37.900465 ], "pop" : 139, "state" : "WV" } +{ "_id" : "24958", "city" : "MEADOW BLUFF", "loc" : [ -80.728162, 37.89587 ], "pop" : 233, "state" : "WV" } +{ "_id" : "24962", "city" : "PENCE SPRINGS", "loc" : [ -80.709234, 37.676694 ], "pop" : 310, "state" : "WV" } +{ "_id" : "24963", "city" : "PETERSTOWN", "loc" : [ -80.76860499999999, 37.414709 ], "pop" : 3117, "state" : "WV" } +{ "_id" : "24966", "city" : "RENICK", "loc" : [ -80.36529400000001, 37.992168 ], "pop" : 1530, "state" : "WV" } +{ "_id" : "24970", "city" : "RONCEVERTE", "loc" : [ -80.462583, 37.741758 ], "pop" : 4167, "state" : "WV" } +{ "_id" : "24974", "city" : "SECONDCREEK", "loc" : [ -80.41807900000001, 37.660246 ], "pop" : 452, "state" : "WV" } +{ "_id" : "24976", "city" : "PICKAWAY", "loc" : [ -80.51690499999999, 37.662078 ], "pop" : 971, "state" : "WV" } +{ "_id" : "24977", "city" : "SMOOT", "loc" : [ -80.668038, 37.877166 ], "pop" : 634, "state" : "WV" } +{ "_id" : "24980", "city" : "SWEET SPRINGS", "loc" : [ -80.298959, 37.611159 ], "pop" : 571, "state" : "WV" } +{ "_id" : "24981", "city" : "TALCOTT", "loc" : [ -80.746143, 37.649079 ], "pop" : 511, "state" : "WV" } +{ "_id" : "24983", "city" : "UNION", "loc" : [ -80.524767, 37.580175 ], "pop" : 1737, "state" : "WV" } +{ "_id" : "24984", "city" : "WAITEVILLE", "loc" : [ -80.463447, 37.464514 ], "pop" : 62, "state" : "WV" } +{ "_id" : "24985", "city" : "WAYSIDE", "loc" : [ -80.745806, 37.593657 ], "pop" : 421, "state" : "WV" } +{ "_id" : "24986", "city" : "NEOLA", "loc" : [ -80.27464000000001, 37.814618 ], "pop" : 5096, "state" : "WV" } +{ "_id" : "24991", "city" : "TROUT", "loc" : [ -80.517321, 37.94421 ], "pop" : 998, "state" : "WV" } +{ "_id" : "24993", "city" : "WOLFCREEK", "loc" : [ -80.611254, 37.618788 ], "pop" : 249, "state" : "WV" } +{ "_id" : "25003", "city" : "ALUM CREEK", "loc" : [ -81.786258, 38.285814 ], "pop" : 1450, "state" : "WV" } +{ "_id" : "25004", "city" : "AMEAGLE", "loc" : [ -81.406507, 37.964068 ], "pop" : 623, "state" : "WV" } +{ "_id" : "25005", "city" : "AMMA", "loc" : [ -81.253182, 38.545518 ], "pop" : 414, "state" : "WV" } +{ "_id" : "25007", "city" : "ARNETT", "loc" : [ -81.435484, 37.850214 ], "pop" : 2073, "state" : "WV" } +{ "_id" : "25008", "city" : "ARTIE", "loc" : [ -81.378772, 37.918139 ], "pop" : 407, "state" : "WV" } +{ "_id" : "25009", "city" : "ASHFORD", "loc" : [ -81.711324, 38.182291 ], "pop" : 1329, "state" : "WV" } +{ "_id" : "25010", "city" : "BALD KNOB", "loc" : [ -81.62294300000001, 37.844023 ], "pop" : 666, "state" : "WV" } +{ "_id" : "25013", "city" : "BARRETT", "loc" : [ -81.64831, 37.880201 ], "pop" : 50, "state" : "WV" } +{ "_id" : "25015", "city" : "DIAMOND", "loc" : [ -81.50581200000001, 38.225381 ], "pop" : 7120, "state" : "WV" } +{ "_id" : "25018", "city" : "BENTREE", "loc" : [ -81.21565, 38.297088 ], "pop" : 377, "state" : "WV" } +{ "_id" : "25019", "city" : "FOLA", "loc" : [ -81.106838, 38.365947 ], "pop" : 793, "state" : "WV" } +{ "_id" : "25021", "city" : "BIM", "loc" : [ -81.688047, 37.893437 ], "pop" : 1061, "state" : "WV" } +{ "_id" : "25024", "city" : "BLOOMINGROSE", "loc" : [ -81.636737, 38.141189 ], "pop" : 191, "state" : "WV" } +{ "_id" : "25025", "city" : "BLOUNT", "loc" : [ -81.40519399999999, 38.312116 ], "pop" : 583, "state" : "WV" } +{ "_id" : "25028", "city" : "BOB WHITE", "loc" : [ -81.720884, 37.958711 ], "pop" : 570, "state" : "WV" } +{ "_id" : "25030", "city" : "BOMONT", "loc" : [ -81.21999, 38.407295 ], "pop" : 129, "state" : "WV" } +{ "_id" : "25033", "city" : "BUFFALO", "loc" : [ -81.94997100000001, 38.60924 ], "pop" : 1898, "state" : "WV" } +{ "_id" : "25034", "city" : "BURNWELL", "loc" : [ -81.37647, 38.053014 ], "pop" : 23, "state" : "WV" } +{ "_id" : "25035", "city" : "CABIN CREEK", "loc" : [ -81.515258, 38.185795 ], "pop" : 1289, "state" : "WV" } +{ "_id" : "25039", "city" : "CEDAR GROVE", "loc" : [ -81.406711, 38.213286 ], "pop" : 3463, "state" : "WV" } +{ "_id" : "25043", "city" : "CLAY", "loc" : [ -81.069588, 38.476354 ], "pop" : 2881, "state" : "WV" } +{ "_id" : "25044", "city" : "CLEAR CREEK", "loc" : [ -81.320866, 37.89158 ], "pop" : 262, "state" : "WV" } +{ "_id" : "25045", "city" : "QUICK", "loc" : [ -81.356039, 38.477687 ], "pop" : 5864, "state" : "WV" } +{ "_id" : "25046", "city" : "CLIO", "loc" : [ -81.307188, 38.572686 ], "pop" : 458, "state" : "WV" } +{ "_id" : "25047", "city" : "CLOTHIER", "loc" : [ -81.988142, 37.79333 ], "pop" : 1379, "state" : "WV" } +{ "_id" : "25048", "city" : "COLCORD", "loc" : [ -81.443699, 37.949166 ], "pop" : 405, "state" : "WV" } +{ "_id" : "25049", "city" : "COMFORT", "loc" : [ -81.596177, 38.137191 ], "pop" : 889, "state" : "WV" } +{ "_id" : "25051", "city" : "COSTA", "loc" : [ -81.708015, 38.164693 ], "pop" : 134, "state" : "WV" } +{ "_id" : "25053", "city" : "DANVILLE", "loc" : [ -81.85422699999999, 38.03356 ], "pop" : 4129, "state" : "WV" } +{ "_id" : "25059", "city" : "DIXIE", "loc" : [ -81.186249, 38.26631 ], "pop" : 795, "state" : "WV" } +{ "_id" : "25060", "city" : "DOROTHY", "loc" : [ -81.496842, 37.96219 ], "pop" : 524, "state" : "WV" } +{ "_id" : "25062", "city" : "DRY CREEK", "loc" : [ -81.481398, 37.860686 ], "pop" : 209, "state" : "WV" } +{ "_id" : "25063", "city" : "DUCK", "loc" : [ -80.976416, 38.564652 ], "pop" : 679, "state" : "WV" } +{ "_id" : "25064", "city" : "DUNBAR", "loc" : [ -81.742467, 38.368271 ], "pop" : 11543, "state" : "WV" } +{ "_id" : "25071", "city" : "FRAME", "loc" : [ -81.481739, 38.432317 ], "pop" : 10333, "state" : "WV" } +{ "_id" : "25079", "city" : "FALLING ROCK", "loc" : [ -81.38087400000001, 38.475579 ], "pop" : 353, "state" : "WV" } +{ "_id" : "25081", "city" : "FOSTER", "loc" : [ -81.76587600000001, 38.090819 ], "pop" : 1584, "state" : "WV" } +{ "_id" : "25082", "city" : "FRAZIERS BOTTOM", "loc" : [ -82.01106799999999, 38.551678 ], "pop" : 911, "state" : "WV" } +{ "_id" : "25083", "city" : "WHITTAKER", "loc" : [ -81.386231, 38.189406 ], "pop" : 2542, "state" : "WV" } +{ "_id" : "25085", "city" : "GAULEY BRIDGE", "loc" : [ -81.19596, 38.168899 ], "pop" : 826, "state" : "WV" } +{ "_id" : "25088", "city" : "GLEN", "loc" : [ -81.223401, 38.368989 ], "pop" : 74, "state" : "WV" } +{ "_id" : "25093", "city" : "GORDON", "loc" : [ -81.67131999999999, 37.978191 ], "pop" : 251, "state" : "WV" } +{ "_id" : "25103", "city" : "HANSFORD", "loc" : [ -81.395026, 38.127158 ], "pop" : 165, "state" : "WV" } +{ "_id" : "25105", "city" : "HARRISON", "loc" : [ -80.916068, 38.498979 ], "pop" : 163, "state" : "WV" } +{ "_id" : "25106", "city" : "HENDERSON", "loc" : [ -82.136381, 38.826512 ], "pop" : 747, "state" : "WV" } +{ "_id" : "25107", "city" : "HERNSHAW", "loc" : [ -81.61298600000001, 38.194212 ], "pop" : 745, "state" : "WV" } +{ "_id" : "25108", "city" : "HEWETT", "loc" : [ -81.850919, 37.958097 ], "pop" : 625, "state" : "WV" } +{ "_id" : "25111", "city" : "INDORE", "loc" : [ -81.157495, 38.339672 ], "pop" : 1173, "state" : "WV" } +{ "_id" : "25113", "city" : "BIG OTTER", "loc" : [ -81.033506, 38.530476 ], "pop" : 145, "state" : "WV" } +{ "_id" : "25114", "city" : "RAMAGE", "loc" : [ -81.80030499999999, 37.957023 ], "pop" : 593, "state" : "WV" } +{ "_id" : "25115", "city" : "KANAWHA FALLS", "loc" : [ -81.162753, 38.107932 ], "pop" : 98, "state" : "WV" } +{ "_id" : "25118", "city" : "KIMBERLY", "loc" : [ -81.321721, 38.124928 ], "pop" : 108, "state" : "WV" } +{ "_id" : "25119", "city" : "KINCAID", "loc" : [ -81.26897, 38.032065 ], "pop" : 94, "state" : "WV" } +{ "_id" : "25121", "city" : "LAKE", "loc" : [ -81.95115199999999, 37.946191 ], "pop" : 3384, "state" : "WV" } +{ "_id" : "25122", "city" : "CARBON", "loc" : [ -81.451228, 38.098249 ], "pop" : 2581, "state" : "WV" } +{ "_id" : "25123", "city" : "ARBUCKLE", "loc" : [ -81.909244, 38.753046 ], "pop" : 2325, "state" : "WV" } +{ "_id" : "25124", "city" : "LIBERTY", "loc" : [ -81.767813, 38.619978 ], "pop" : 1050, "state" : "WV" } +{ "_id" : "25125", "city" : "LIZEMORES", "loc" : [ -81.16325500000001, 38.336609 ], "pop" : 84, "state" : "WV" } +{ "_id" : "25130", "city" : "MADISON", "loc" : [ -81.793757, 38.044426 ], "pop" : 4476, "state" : "WV" } +{ "_id" : "25132", "city" : "MAMMOTH", "loc" : [ -81.350893, 38.258319 ], "pop" : 486, "state" : "WV" } +{ "_id" : "25133", "city" : "MAYSEL", "loc" : [ -81.122653, 38.493924 ], "pop" : 223, "state" : "WV" } +{ "_id" : "25136", "city" : "MONTGOMERY", "loc" : [ -81.28135399999999, 38.141232 ], "pop" : 10392, "state" : "WV" } +{ "_id" : "25139", "city" : "MOUNT CARBON", "loc" : [ -81.33337299999999, 38.160097 ], "pop" : 0, "state" : "WV" } +{ "_id" : "25140", "city" : "NAOMA", "loc" : [ -81.521372, 37.915381 ], "pop" : 864, "state" : "WV" } +{ "_id" : "25141", "city" : "NEBO", "loc" : [ -81.025657, 38.627069 ], "pop" : 222, "state" : "WV" } +{ "_id" : "25142", "city" : "NELLIS", "loc" : [ -81.73990499999999, 38.152066 ], "pop" : 104, "state" : "WV" } +{ "_id" : "25143", "city" : "NITRO", "loc" : [ -81.829311, 38.419323 ], "pop" : 9525, "state" : "WV" } +{ "_id" : "25148", "city" : "ORGAS", "loc" : [ -81.57383, 38.073646 ], "pop" : 840, "state" : "WV" } +{ "_id" : "25150", "city" : "OVAPA", "loc" : [ -81.14846, 38.523398 ], "pop" : 525, "state" : "WV" } +{ "_id" : "25154", "city" : "PEYTONA", "loc" : [ -81.701836, 38.124952 ], "pop" : 754, "state" : "WV" } +{ "_id" : "25158", "city" : "PLINY", "loc" : [ -82.015494, 38.614206 ], "pop" : 352, "state" : "WV" } +{ "_id" : "25159", "city" : "LANHAM", "loc" : [ -81.80511, 38.488297 ], "pop" : 5813, "state" : "WV" } +{ "_id" : "25160", "city" : "POND GAP", "loc" : [ -81.28658, 38.290434 ], "pop" : 394, "state" : "WV" } +{ "_id" : "25161", "city" : "POWELLTON", "loc" : [ -81.31792299999999, 38.099172 ], "pop" : 1148, "state" : "WV" } +{ "_id" : "25163", "city" : "WILLIAMS MOUNTAI", "loc" : [ -81.623901, 38.008351 ], "pop" : 684, "state" : "WV" } +{ "_id" : "25164", "city" : "PIGEON", "loc" : [ -81.226286, 38.472167 ], "pop" : 1064, "state" : "WV" } +{ "_id" : "25165", "city" : "RACINE", "loc" : [ -81.655742, 38.149524 ], "pop" : 539, "state" : "WV" } +{ "_id" : "25168", "city" : "RED HOUSE", "loc" : [ -81.90447399999999, 38.546298 ], "pop" : 3472, "state" : "WV" } +{ "_id" : "25169", "city" : "RIDGEVIEW", "loc" : [ -81.772548, 38.148576 ], "pop" : 793, "state" : "WV" } +{ "_id" : "25172", "city" : "ROBERTSBURG", "loc" : [ -81.9109, 38.644143 ], "pop" : 590, "state" : "WV" } +{ "_id" : "25173", "city" : "ROBSON", "loc" : [ -81.248758, 38.097263 ], "pop" : 39, "state" : "WV" } +{ "_id" : "25174", "city" : "ROCK CREEK", "loc" : [ -81.48367399999999, 37.836673 ], "pop" : 533, "state" : "WV" } +{ "_id" : "25177", "city" : "SAINT ALBANS", "loc" : [ -81.83046299999999, 38.37743 ], "pop" : 24409, "state" : "WV" } +{ "_id" : "25180", "city" : "SAXON", "loc" : [ -81.43227899999999, 37.786108 ], "pop" : 154, "state" : "WV" } +{ "_id" : "25181", "city" : "SETH", "loc" : [ -81.639258, 38.097057 ], "pop" : 1095, "state" : "WV" } +{ "_id" : "25187", "city" : "SOUTHSIDE", "loc" : [ -81.996596, 38.711994 ], "pop" : 446, "state" : "WV" } +{ "_id" : "25189", "city" : "STICKNEY", "loc" : [ -81.497001, 37.876844 ], "pop" : 18, "state" : "WV" } +{ "_id" : "25193", "city" : "SYLVESTER", "loc" : [ -81.54915099999999, 38.009075 ], "pop" : 1020, "state" : "WV" } +{ "_id" : "25202", "city" : "TORNADO", "loc" : [ -81.847555, 38.335697 ], "pop" : 1500, "state" : "WV" } +{ "_id" : "25203", "city" : "TURTLE CREEK", "loc" : [ -81.853499, 38.042715 ], "pop" : 669, "state" : "WV" } +{ "_id" : "25204", "city" : "BANDYTOWN", "loc" : [ -81.635204, 37.921015 ], "pop" : 500, "state" : "WV" } +{ "_id" : "25206", "city" : "VAN", "loc" : [ -81.702175, 37.971152 ], "pop" : 9, "state" : "WV" } +{ "_id" : "25209", "city" : "GARRISON", "loc" : [ -81.534013, 37.978677 ], "pop" : 681, "state" : "WV" } +{ "_id" : "25213", "city" : "WINFIELD", "loc" : [ -81.889965, 38.507178 ], "pop" : 3958, "state" : "WV" } +{ "_id" : "25214", "city" : "WINIFREDE", "loc" : [ -81.558747, 38.185245 ], "pop" : 126, "state" : "WV" } +{ "_id" : "25231", "city" : "ADVENT", "loc" : [ -81.572063, 38.623595 ], "pop" : 189, "state" : "WV" } +{ "_id" : "25234", "city" : "ARNOLDSBURG", "loc" : [ -81.155135, 38.822704 ], "pop" : 1683, "state" : "WV" } +{ "_id" : "25235", "city" : "FLOE", "loc" : [ -81.090126, 38.671201 ], "pop" : 886, "state" : "WV" } +{ "_id" : "25239", "city" : "COTTAGEVILLE", "loc" : [ -81.818609, 38.863285 ], "pop" : 1183, "state" : "WV" } +{ "_id" : "25241", "city" : "EVANS", "loc" : [ -81.790858, 38.811281 ], "pop" : 1296, "state" : "WV" } +{ "_id" : "25243", "city" : "GANDEEVILLE", "loc" : [ -81.424329, 38.703382 ], "pop" : 715, "state" : "WV" } +{ "_id" : "25244", "city" : "GAY", "loc" : [ -81.570301, 38.797842 ], "pop" : 1037, "state" : "WV" } +{ "_id" : "25245", "city" : "GIVEN", "loc" : [ -81.682542, 38.713046 ], "pop" : 994, "state" : "WV" } +{ "_id" : "25246", "city" : "HARMONY", "loc" : [ -81.50763600000001, 38.692086 ], "pop" : 372, "state" : "WV" } +{ "_id" : "25248", "city" : "ROMANCE", "loc" : [ -81.651717, 38.623894 ], "pop" : 1880, "state" : "WV" } +{ "_id" : "25249", "city" : "KENTUCK", "loc" : [ -81.596018, 38.663886 ], "pop" : 718, "state" : "WV" } +{ "_id" : "25251", "city" : "LEFT HAND", "loc" : [ -81.246675, 38.606288 ], "pop" : 397, "state" : "WV" } +{ "_id" : "25252", "city" : "DUNCAN", "loc" : [ -81.57245, 38.957552 ], "pop" : 743, "state" : "WV" } +{ "_id" : "25253", "city" : "LETART", "loc" : [ -81.975129, 38.931079 ], "pop" : 4478, "state" : "WV" } +{ "_id" : "25255", "city" : "LETTER GAP", "loc" : [ -80.883768, 38.897074 ], "pop" : 217, "state" : "WV" } +{ "_id" : "25256", "city" : "LINDEN", "loc" : [ -81.229061, 38.698938 ], "pop" : 270, "state" : "WV" } +{ "_id" : "25258", "city" : "LOCKNEY", "loc" : [ -80.945075, 38.852919 ], "pop" : 89, "state" : "WV" } +{ "_id" : "25259", "city" : "LOONEYVILLE", "loc" : [ -81.28219, 38.664113 ], "pop" : 600, "state" : "WV" } +{ "_id" : "25260", "city" : "MASON", "loc" : [ -82.028215, 39.006442 ], "pop" : 2598, "state" : "WV" } +{ "_id" : "25261", "city" : "MILLSTONE", "loc" : [ -81.08635200000001, 38.86029 ], "pop" : 748, "state" : "WV" } +{ "_id" : "25262", "city" : "MILLWOOD", "loc" : [ -81.824832, 38.896206 ], "pop" : 1379, "state" : "WV" } +{ "_id" : "25264", "city" : "MOUNT ALTO", "loc" : [ -81.87837399999999, 38.863937 ], "pop" : 275, "state" : "WV" } +{ "_id" : "25266", "city" : "ULER", "loc" : [ -81.167579, 38.605219 ], "pop" : 724, "state" : "WV" } +{ "_id" : "25267", "city" : "NORMANTOWN", "loc" : [ -80.941936, 38.880173 ], "pop" : 183, "state" : "WV" } +{ "_id" : "25268", "city" : "MINNORA", "loc" : [ -81.09614000000001, 38.735979 ], "pop" : 641, "state" : "WV" } +{ "_id" : "25270", "city" : "REEDY", "loc" : [ -81.419785, 38.837119 ], "pop" : 3014, "state" : "WV" } +{ "_id" : "25271", "city" : "RIPLEY", "loc" : [ -81.701987, 38.809042 ], "pop" : 6580, "state" : "WV" } +{ "_id" : "25272", "city" : "ROCK CASTLE", "loc" : [ -81.767414, 38.708357 ], "pop" : 82, "state" : "WV" } +{ "_id" : "25274", "city" : "SAND RIDGE", "loc" : [ -81.032372, 38.850721 ], "pop" : 163, "state" : "WV" } +{ "_id" : "25275", "city" : "SANDYVILLE", "loc" : [ -81.654315, 38.909282 ], "pop" : 1611, "state" : "WV" } +{ "_id" : "25276", "city" : "SPENCER", "loc" : [ -81.33026, 38.789696 ], "pop" : 6007, "state" : "WV" } +{ "_id" : "25279", "city" : "STATTS MILLS", "loc" : [ -81.615579, 38.74076 ], "pop" : 368, "state" : "WV" } +{ "_id" : "25280", "city" : "STUMPTOWN", "loc" : [ -80.970026, 38.831619 ], "pop" : 275, "state" : "WV" } +{ "_id" : "25281", "city" : "TARIFF", "loc" : [ -81.212361, 38.652707 ], "pop" : 191, "state" : "WV" } +{ "_id" : "25283", "city" : "VALLEY FORK", "loc" : [ -81.15217699999999, 38.486906 ], "pop" : 530, "state" : "WV" } +{ "_id" : "25285", "city" : "WALLBACK", "loc" : [ -81.093535, 38.57254 ], "pop" : 181, "state" : "WV" } +{ "_id" : "25286", "city" : "WALTON", "loc" : [ -81.395757, 38.602264 ], "pop" : 1961, "state" : "WV" } +{ "_id" : "25287", "city" : "WEST COLUMBIA", "loc" : [ -82.090529, 38.926169 ], "pop" : 1009, "state" : "WV" } +{ "_id" : "25301", "city" : "CHARLESTON", "loc" : [ -81.630606, 38.349 ], "pop" : 4139, "state" : "WV" } +{ "_id" : "25302", "city" : "BIG CHIMNEY", "loc" : [ -81.623876, 38.383178 ], "pop" : 20267, "state" : "WV" } +{ "_id" : "25303", "city" : "SOUTH CHARLESTON", "loc" : [ -81.684079, 38.359226 ], "pop" : 8198, "state" : "WV" } +{ "_id" : "25304", "city" : "CHARLESTON", "loc" : [ -81.590272, 38.317289 ], "pop" : 9368, "state" : "WV" } +{ "_id" : "25306", "city" : "MALDEN", "loc" : [ -81.536813, 38.30028 ], "pop" : 7992, "state" : "WV" } +{ "_id" : "25309", "city" : "SOUTH CHARLESTON", "loc" : [ -81.73446199999999, 38.344903 ], "pop" : 10179, "state" : "WV" } +{ "_id" : "25311", "city" : "CHARLESTON", "loc" : [ -81.599282, 38.349032 ], "pop" : 10091, "state" : "WV" } +{ "_id" : "25312", "city" : "CHARLESTON", "loc" : [ -81.674688, 38.409563 ], "pop" : 13224, "state" : "WV" } +{ "_id" : "25313", "city" : "CROSS LANES", "loc" : [ -81.764877, 38.424982 ], "pop" : 13061, "state" : "WV" } +{ "_id" : "25314", "city" : "CHARLESTON", "loc" : [ -81.668988, 38.327442 ], "pop" : 17108, "state" : "WV" } +{ "_id" : "25315", "city" : "MARMET", "loc" : [ -81.554361, 38.233309 ], "pop" : 4317, "state" : "WV" } +{ "_id" : "25320", "city" : "SISSONVILLE", "loc" : [ -81.62958500000001, 38.509586 ], "pop" : 7220, "state" : "WV" } +{ "_id" : "25401", "city" : "MARTINSBURG", "loc" : [ -77.958915, 39.459959 ], "pop" : 36800, "state" : "WV" } +{ "_id" : "25411", "city" : "HANCOCK", "loc" : [ -78.219217, 39.58736 ], "pop" : 9219, "state" : "WV" } +{ "_id" : "25413", "city" : "BUNKER HILL", "loc" : [ -78.04871799999999, 39.327554 ], "pop" : 5419, "state" : "WV" } +{ "_id" : "25414", "city" : "CHARLES TOWN", "loc" : [ -77.85625400000001, 39.277085 ], "pop" : 14351, "state" : "WV" } +{ "_id" : "25419", "city" : "FALLING WATERS", "loc" : [ -77.88515200000001, 39.586473 ], "pop" : 4428, "state" : "WV" } +{ "_id" : "25420", "city" : "GERRARDSTOWN", "loc" : [ -78.114119, 39.378039 ], "pop" : 2481, "state" : "WV" } +{ "_id" : "25422", "city" : "GREAT CACAPON", "loc" : [ -78.33311999999999, 39.583557 ], "pop" : 1108, "state" : "WV" } +{ "_id" : "25425", "city" : "HARPERS FERRY", "loc" : [ -77.76944899999999, 39.315283 ], "pop" : 7126, "state" : "WV" } +{ "_id" : "25427", "city" : "CHERRY RUN", "loc" : [ -78.056016, 39.547034 ], "pop" : 7415, "state" : "WV" } +{ "_id" : "25428", "city" : "INWOOD", "loc" : [ -78.02418900000001, 39.370093 ], "pop" : 3646, "state" : "WV" } +{ "_id" : "25430", "city" : "KEARNEYSVILLE", "loc" : [ -77.95876199999999, 39.321994 ], "pop" : 3468, "state" : "WV" } +{ "_id" : "25431", "city" : "LEVELS", "loc" : [ -78.55078, 39.497637 ], "pop" : 28, "state" : "WV" } +{ "_id" : "25434", "city" : "PAW PAW", "loc" : [ -78.458573, 39.492297 ], "pop" : 1696, "state" : "WV" } +{ "_id" : "25437", "city" : "POINTS", "loc" : [ -78.564148, 39.457208 ], "pop" : 106, "state" : "WV" } +{ "_id" : "25438", "city" : "RANSON", "loc" : [ -77.860572, 39.299531 ], "pop" : 3010, "state" : "WV" } +{ "_id" : "25442", "city" : "SHENANDOAH JUNCT", "loc" : [ -77.88924, 39.371084 ], "pop" : 1907, "state" : "WV" } +{ "_id" : "25443", "city" : "SHEPHERDSTOWN", "loc" : [ -77.815819, 39.431124 ], "pop" : 5388, "state" : "WV" } +{ "_id" : "25444", "city" : "SLANESVILLE", "loc" : [ -78.505971, 39.402631 ], "pop" : 468, "state" : "WV" } +{ "_id" : "25446", "city" : "SUMMIT POINT", "loc" : [ -77.958552, 39.233753 ], "pop" : 676, "state" : "WV" } +{ "_id" : "25501", "city" : "ALKOL", "loc" : [ -81.98397199999999, 38.160884 ], "pop" : 1161, "state" : "WV" } +{ "_id" : "25502", "city" : "APPLE GROVE", "loc" : [ -82.172556, 38.713066 ], "pop" : 115, "state" : "WV" } +{ "_id" : "25503", "city" : "ASHTON", "loc" : [ -82.108907, 38.657102 ], "pop" : 1494, "state" : "WV" } +{ "_id" : "25504", "city" : "BARBOURSVILLE", "loc" : [ -82.295973, 38.389272 ], "pop" : 10205, "state" : "WV" } +{ "_id" : "25505", "city" : "BIG CREEK", "loc" : [ -82.01605600000001, 38.004555 ], "pop" : 712, "state" : "WV" } +{ "_id" : "25506", "city" : "BRANCHLAND", "loc" : [ -82.268367, 38.269444 ], "pop" : 642, "state" : "WV" } +{ "_id" : "25508", "city" : "CHAPMANVILLE", "loc" : [ -82.051241, 37.938535 ], "pop" : 8874, "state" : "WV" } +{ "_id" : "25510", "city" : "CULLODEN", "loc" : [ -82.068963, 38.419831 ], "pop" : 2569, "state" : "WV" } +{ "_id" : "25511", "city" : "DUNLOW", "loc" : [ -82.38266, 38.02829 ], "pop" : 835, "state" : "WV" } +{ "_id" : "25512", "city" : "EAST LYNN", "loc" : [ -82.32793100000001, 38.199474 ], "pop" : 1722, "state" : "WV" } +{ "_id" : "25514", "city" : "FORT GAY", "loc" : [ -82.554124, 38.133496 ], "pop" : 3499, "state" : "WV" } +{ "_id" : "25515", "city" : "GALLIPOLIS FERRY", "loc" : [ -82.153496, 38.765028 ], "pop" : 2121, "state" : "WV" } +{ "_id" : "25517", "city" : "RADNOR", "loc" : [ -82.46692, 38.088908 ], "pop" : 2111, "state" : "WV" } +{ "_id" : "25520", "city" : "GLENWOOD", "loc" : [ -82.14343100000001, 38.544936 ], "pop" : 3201, "state" : "WV" } +{ "_id" : "25521", "city" : "GRIFFITHSVILLE", "loc" : [ -81.982028, 38.246985 ], "pop" : 521, "state" : "WV" } +{ "_id" : "25523", "city" : "HAMLIN", "loc" : [ -82.10469500000001, 38.289556 ], "pop" : 2993, "state" : "WV" } +{ "_id" : "25524", "city" : "FERRELLSBURG", "loc" : [ -82.15535800000001, 38.008878 ], "pop" : 1611, "state" : "WV" } +{ "_id" : "25526", "city" : "HURRICANE", "loc" : [ -81.99432899999999, 38.425741 ], "pop" : 16250, "state" : "WV" } +{ "_id" : "25529", "city" : "JULIAN", "loc" : [ -81.86418500000001, 38.126437 ], "pop" : 670, "state" : "WV" } +{ "_id" : "25530", "city" : "KENOVA", "loc" : [ -82.573649, 38.386031 ], "pop" : 7491, "state" : "WV" } +{ "_id" : "25534", "city" : "COVE GAP", "loc" : [ -82.25620600000001, 38.077744 ], "pop" : 326, "state" : "WV" } +{ "_id" : "25535", "city" : "LAVALETTE", "loc" : [ -82.428707, 38.33046 ], "pop" : 5928, "state" : "WV" } +{ "_id" : "25537", "city" : "LESAGE", "loc" : [ -82.29566699999999, 38.477028 ], "pop" : 2972, "state" : "WV" } +{ "_id" : "25540", "city" : "MIDKIFF", "loc" : [ -82.15422700000001, 38.143908 ], "pop" : 470, "state" : "WV" } +{ "_id" : "25541", "city" : "MILTON", "loc" : [ -82.14578400000001, 38.413981 ], "pop" : 7168, "state" : "WV" } +{ "_id" : "25544", "city" : "MYRA", "loc" : [ -82.135097, 38.21978 ], "pop" : 146, "state" : "WV" } +{ "_id" : "25545", "city" : "ONA", "loc" : [ -82.218093, 38.452851 ], "pop" : 5959, "state" : "WV" } +{ "_id" : "25546", "city" : "PALERMO", "loc" : [ -82.046018, 38.12817 ], "pop" : 115, "state" : "WV" } +{ "_id" : "25547", "city" : "PECKS MILL", "loc" : [ -81.96538200000001, 37.929784 ], "pop" : 117, "state" : "WV" } +{ "_id" : "25550", "city" : "POINT PLEASANT", "loc" : [ -82.113247, 38.863249 ], "pop" : 7981, "state" : "WV" } +{ "_id" : "25555", "city" : "PRICHARD", "loc" : [ -82.57529700000001, 38.230009 ], "pop" : 1215, "state" : "WV" } +{ "_id" : "25557", "city" : "RANGER", "loc" : [ -82.19078, 38.155608 ], "pop" : 5703, "state" : "WV" } +{ "_id" : "25559", "city" : "SALT ROCK", "loc" : [ -82.247041, 38.326542 ], "pop" : 1482, "state" : "WV" } +{ "_id" : "25560", "city" : "SCOTT DEPOT", "loc" : [ -81.900481, 38.450063 ], "pop" : 5893, "state" : "WV" } +{ "_id" : "25563", "city" : "SIAS", "loc" : [ -82.085779, 38.189434 ], "pop" : 384, "state" : "WV" } +{ "_id" : "25564", "city" : "SOD", "loc" : [ -81.86814, 38.262967 ], "pop" : 3529, "state" : "WV" } +{ "_id" : "25565", "city" : "MORRISVALE", "loc" : [ -81.991778, 38.077015 ], "pop" : 1449, "state" : "WV" } +{ "_id" : "25567", "city" : "SUMERCO", "loc" : [ -81.894317, 38.205292 ], "pop" : 638, "state" : "WV" } +{ "_id" : "25568", "city" : "SWEETLAND", "loc" : [ -82.034464, 38.262874 ], "pop" : 378, "state" : "WV" } +{ "_id" : "25570", "city" : "WAYNE", "loc" : [ -82.433926, 38.225814 ], "pop" : 4992, "state" : "WV" } +{ "_id" : "25571", "city" : "WEST HAMLIN", "loc" : [ -82.184348, 38.288571 ], "pop" : 1612, "state" : "WV" } +{ "_id" : "25572", "city" : "WOODVILLE", "loc" : [ -81.911281, 38.157027 ], "pop" : 262, "state" : "WV" } +{ "_id" : "25573", "city" : "YAWKEY", "loc" : [ -81.956828, 38.219252 ], "pop" : 690, "state" : "WV" } +{ "_id" : "25601", "city" : "WEST LOGAN", "loc" : [ -82.002092, 37.847488 ], "pop" : 14143, "state" : "WV" } +{ "_id" : "25607", "city" : "ROBINETTE", "loc" : [ -81.758912, 37.795586 ], "pop" : 2986, "state" : "WV" } +{ "_id" : "25608", "city" : "BAISDEN", "loc" : [ -81.93275800000001, 37.571492 ], "pop" : 1183, "state" : "WV" } +{ "_id" : "25617", "city" : "DAVIN", "loc" : [ -81.805706, 37.726499 ], "pop" : 2388, "state" : "WV" } +{ "_id" : "25621", "city" : "GILBERT", "loc" : [ -81.866468, 37.594153 ], "pop" : 2027, "state" : "WV" } +{ "_id" : "25623", "city" : "HAMPDEN", "loc" : [ -81.947014, 37.639691 ], "pop" : 1352, "state" : "WV" } +{ "_id" : "25632", "city" : "EARLING", "loc" : [ -81.92929100000001, 37.774266 ], "pop" : 847, "state" : "WV" } +{ "_id" : "25635", "city" : "HUNT", "loc" : [ -81.865228, 37.729525 ], "pop" : 3932, "state" : "WV" } +{ "_id" : "25638", "city" : "BARNABUS", "loc" : [ -82.004931, 37.722368 ], "pop" : 2369, "state" : "WV" } +{ "_id" : "25650", "city" : "VERNER", "loc" : [ -81.864801, 37.64554 ], "pop" : 1487, "state" : "WV" } +{ "_id" : "25651", "city" : "WHARNCLIFFE", "loc" : [ -81.956604, 37.545161 ], "pop" : 428, "state" : "WV" } +{ "_id" : "25654", "city" : "DEHUE", "loc" : [ -81.872699, 37.866513 ], "pop" : 2524, "state" : "WV" } +{ "_id" : "25661", "city" : "WILLIAMSON", "loc" : [ -82.264163, 37.690248 ], "pop" : 8866, "state" : "WV" } +{ "_id" : "25666", "city" : "BREEDEN", "loc" : [ -82.25474800000001, 37.919751 ], "pop" : 773, "state" : "WV" } +{ "_id" : "25669", "city" : "CRUM", "loc" : [ -82.46235900000001, 37.938879 ], "pop" : 763, "state" : "WV" } +{ "_id" : "25670", "city" : "MYRTLE", "loc" : [ -82.131922, 37.703833 ], "pop" : 4639, "state" : "WV" } +{ "_id" : "25671", "city" : "DINGESS", "loc" : [ -82.195108, 37.870336 ], "pop" : 2012, "state" : "WV" } +{ "_id" : "25674", "city" : "KERMIT", "loc" : [ -82.374065, 37.864246 ], "pop" : 3549, "state" : "WV" } +{ "_id" : "25676", "city" : "LENORE", "loc" : [ -82.269336, 37.799436 ], "pop" : 2521, "state" : "WV" } +{ "_id" : "25678", "city" : "LOBATA", "loc" : [ -82.14569400000001, 37.649539 ], "pop" : 3232, "state" : "WV" } +{ "_id" : "25682", "city" : "MEADOR", "loc" : [ -82.065904, 37.592373 ], "pop" : 1640, "state" : "WV" } +{ "_id" : "25694", "city" : "THACKER", "loc" : [ -82.12733299999999, 37.608293 ], "pop" : 1064, "state" : "WV" } +{ "_id" : "25699", "city" : "WILSONDALE", "loc" : [ -82.38135800000001, 37.951598 ], "pop" : 897, "state" : "WV" } +{ "_id" : "25701", "city" : "HUNTINGTON", "loc" : [ -82.442348, 38.409726 ], "pop" : 20896, "state" : "WV" } +{ "_id" : "25702", "city" : "HUNTINGTON", "loc" : [ -82.39108299999999, 38.42862 ], "pop" : 7290, "state" : "WV" } +{ "_id" : "25703", "city" : "HUNTINGTON", "loc" : [ -82.42266600000001, 38.421116 ], "pop" : 6570, "state" : "WV" } +{ "_id" : "25704", "city" : "HUNTINGTON", "loc" : [ -82.503646, 38.384943 ], "pop" : 18311, "state" : "WV" } +{ "_id" : "25705", "city" : "HUNTINGTON", "loc" : [ -82.36901, 38.409588 ], "pop" : 22276, "state" : "WV" } +{ "_id" : "25801", "city" : "BECKLEY", "loc" : [ -81.206084, 37.793214 ], "pop" : 45196, "state" : "WV" } +{ "_id" : "25811", "city" : "AMIGO", "loc" : [ -81.34914499999999, 37.59211 ], "pop" : 684, "state" : "WV" } +{ "_id" : "25812", "city" : "ANSTED", "loc" : [ -81.09548700000001, 38.13686 ], "pop" : 1451, "state" : "WV" } +{ "_id" : "25813", "city" : "BEAVER", "loc" : [ -81.073104, 37.751581 ], "pop" : 4868, "state" : "WV" } +{ "_id" : "25817", "city" : "BOLT", "loc" : [ -81.415612, 37.767303 ], "pop" : 524, "state" : "WV" } +{ "_id" : "25820", "city" : "CAMP CREEK", "loc" : [ -81.111073, 37.484053 ], "pop" : 65, "state" : "WV" } +{ "_id" : "25825", "city" : "COOL RIDGE", "loc" : [ -81.10527999999999, 37.65735 ], "pop" : 1731, "state" : "WV" } +{ "_id" : "25827", "city" : "CRAB ORCHARD", "loc" : [ -81.249098, 37.720515 ], "pop" : 5209, "state" : "WV" } +{ "_id" : "25831", "city" : "CLIFFTOP", "loc" : [ -80.947114, 37.903615 ], "pop" : 1432, "state" : "WV" } +{ "_id" : "25832", "city" : "DANIELS", "loc" : [ -81.13910799999999, 37.732247 ], "pop" : 2533, "state" : "WV" } +{ "_id" : "25837", "city" : "EDMOND", "loc" : [ -81.032634, 38.054441 ], "pop" : 69, "state" : "WV" } +{ "_id" : "25839", "city" : "FAIRDALE", "loc" : [ -81.401758, 37.786578 ], "pop" : 175, "state" : "WV" } +{ "_id" : "25840", "city" : "CUNARD", "loc" : [ -81.080969, 38.062774 ], "pop" : 8013, "state" : "WV" } +{ "_id" : "25841", "city" : "FLAT TOP", "loc" : [ -81.127976, 37.550028 ], "pop" : 623, "state" : "WV" } +{ "_id" : "25843", "city" : "GHENT", "loc" : [ -81.101921, 37.62079 ], "pop" : 749, "state" : "WV" } +{ "_id" : "25844", "city" : "GLEN DANIEL", "loc" : [ -81.403294, 37.754698 ], "pop" : 123, "state" : "WV" } +{ "_id" : "25845", "city" : "GLEN FORK", "loc" : [ -81.540209, 37.644691 ], "pop" : 189, "state" : "WV" } +{ "_id" : "25847", "city" : "SULLIVAN", "loc" : [ -81.13048000000001, 37.790384 ], "pop" : 99, "state" : "WV" } +{ "_id" : "25848", "city" : "GLEN ROGERS", "loc" : [ -81.428989, 37.721685 ], "pop" : 367, "state" : "WV" } +{ "_id" : "25854", "city" : "HICO", "loc" : [ -80.963763, 38.109373 ], "pop" : 721, "state" : "WV" } +{ "_id" : "25857", "city" : "JOSEPHINE", "loc" : [ -81.217584, 37.622135 ], "pop" : 476, "state" : "WV" } +{ "_id" : "25862", "city" : "LANSING", "loc" : [ -81.02772, 38.110793 ], "pop" : 89, "state" : "WV" } +{ "_id" : "25864", "city" : "LAWTON", "loc" : [ -80.99244899999999, 37.865779 ], "pop" : 17, "state" : "WV" } +{ "_id" : "25865", "city" : "LESTER", "loc" : [ -81.30954199999999, 37.726522 ], "pop" : 1157, "state" : "WV" } +{ "_id" : "25868", "city" : "LOOKOUT", "loc" : [ -80.92006000000001, 38.052822 ], "pop" : 338, "state" : "WV" } +{ "_id" : "25870", "city" : "MABEN", "loc" : [ -81.39137100000001, 37.654294 ], "pop" : 415, "state" : "WV" } +{ "_id" : "25876", "city" : "SAULSVILLE", "loc" : [ -81.457706, 37.655573 ], "pop" : 624, "state" : "WV" } +{ "_id" : "25880", "city" : "MOUNT HOPE", "loc" : [ -81.170419, 37.911048 ], "pop" : 4348, "state" : "WV" } +{ "_id" : "25882", "city" : "MULLENS", "loc" : [ -81.389015, 37.584172 ], "pop" : 2590, "state" : "WV" } +{ "_id" : "25901", "city" : "HARVEY", "loc" : [ -81.13442499999999, 37.984874 ], "pop" : 14805, "state" : "WV" } +{ "_id" : "25902", "city" : "ODD", "loc" : [ -81.187183, 37.592997 ], "pop" : 577, "state" : "WV" } +{ "_id" : "25908", "city" : "WINDING GULF", "loc" : [ -81.231022, 37.643456 ], "pop" : 13, "state" : "WV" } +{ "_id" : "25912", "city" : "RAMSEY", "loc" : [ -81.015047, 38.178142 ], "pop" : 460, "state" : "WV" } +{ "_id" : "25913", "city" : "RAVENCLIFF", "loc" : [ -81.496736, 37.697961 ], "pop" : 1457, "state" : "WV" } +{ "_id" : "25915", "city" : "EAST GULF", "loc" : [ -81.294753, 37.628587 ], "pop" : 1183, "state" : "WV" } +{ "_id" : "25917", "city" : "SCARBRO", "loc" : [ -81.24573100000001, 37.947073 ], "pop" : 1074, "state" : "WV" } +{ "_id" : "25918", "city" : "ABRAHAM", "loc" : [ -81.1023, 37.697802 ], "pop" : 2548, "state" : "WV" } +{ "_id" : "25920", "city" : "SLAB FORK", "loc" : [ -81.22792800000001, 37.679605 ], "pop" : 2872, "state" : "WV" } +{ "_id" : "25922", "city" : "SPANISHBURG", "loc" : [ -81.10694100000001, 37.46314 ], "pop" : 883, "state" : "WV" } +{ "_id" : "25928", "city" : "STEPHENSON", "loc" : [ -81.33391399999999, 37.579847 ], "pop" : 441, "state" : "WV" } +{ "_id" : "25932", "city" : "SURVEYOR", "loc" : [ -81.33919, 37.748 ], "pop" : 416, "state" : "WV" } +{ "_id" : "25936", "city" : "THURMOND", "loc" : [ -81.071428, 37.955437 ], "pop" : 62, "state" : "WV" } +{ "_id" : "25938", "city" : "VICTOR", "loc" : [ -81.032223, 38.140194 ], "pop" : 516, "state" : "WV" } +{ "_id" : "25951", "city" : "HINTON", "loc" : [ -80.867779, 37.663983 ], "pop" : 6150, "state" : "WV" } +{ "_id" : "25958", "city" : "CHARMCO", "loc" : [ -80.707745, 37.98948 ], "pop" : 1643, "state" : "WV" } +{ "_id" : "25962", "city" : "RAINELLE", "loc" : [ -80.78206400000001, 37.966112 ], "pop" : 3320, "state" : "WV" } +{ "_id" : "25965", "city" : "ELTON", "loc" : [ -80.82520700000001, 37.846825 ], "pop" : 208, "state" : "WV" } +{ "_id" : "25966", "city" : "GREEN SULPHUR SP", "loc" : [ -80.839922, 37.808553 ], "pop" : 742, "state" : "WV" } +{ "_id" : "25969", "city" : "STREETER", "loc" : [ -80.995717, 37.639732 ], "pop" : 1270, "state" : "WV" } +{ "_id" : "25971", "city" : "LERONA", "loc" : [ -80.979574, 37.492498 ], "pop" : 507, "state" : "WV" } +{ "_id" : "25976", "city" : "MEADOW BRIDGE", "loc" : [ -80.852144, 37.878048 ], "pop" : 1446, "state" : "WV" } +{ "_id" : "25977", "city" : "MEADOW CREEK", "loc" : [ -80.91742000000001, 37.804824 ], "pop" : 157, "state" : "WV" } +{ "_id" : "25978", "city" : "NIMITZ", "loc" : [ -80.94462, 37.628584 ], "pop" : 577, "state" : "WV" } +{ "_id" : "25979", "city" : "PIPESTEM", "loc" : [ -80.94634499999999, 37.530345 ], "pop" : 677, "state" : "WV" } +{ "_id" : "25981", "city" : "MARFRANCE", "loc" : [ -80.717286, 38.051937 ], "pop" : 1936, "state" : "WV" } +{ "_id" : "25984", "city" : "KESSLER", "loc" : [ -80.689971, 37.963882 ], "pop" : 1464, "state" : "WV" } +{ "_id" : "25985", "city" : "SANDSTONE", "loc" : [ -80.87156400000001, 37.759879 ], "pop" : 435, "state" : "WV" } +{ "_id" : "25986", "city" : "SPRING DALE", "loc" : [ -80.81499599999999, 37.86947 ], "pop" : 79, "state" : "WV" } +{ "_id" : "25988", "city" : "TRUE", "loc" : [ -80.930837, 37.580031 ], "pop" : 340, "state" : "WV" } +{ "_id" : "25989", "city" : "WHITE OAK", "loc" : [ -81.058875, 37.68008 ], "pop" : 284, "state" : "WV" } +{ "_id" : "26003", "city" : "ELM GROVE", "loc" : [ -80.685126, 40.072736 ], "pop" : 49136, "state" : "WV" } +{ "_id" : "26031", "city" : "BENWOOD", "loc" : [ -80.71603, 40.013299 ], "pop" : 4032, "state" : "WV" } +{ "_id" : "26032", "city" : "BETHANY", "loc" : [ -80.55463, 40.202 ], "pop" : 487, "state" : "WV" } +{ "_id" : "26033", "city" : "CAMERON", "loc" : [ -80.56687599999999, 39.82272 ], "pop" : 2743, "state" : "WV" } +{ "_id" : "26034", "city" : "CHESTER", "loc" : [ -80.55843900000001, 40.598109 ], "pop" : 5966, "state" : "WV" } +{ "_id" : "26035", "city" : "COLLIERS", "loc" : [ -80.549341, 40.348391 ], "pop" : 2602, "state" : "WV" } +{ "_id" : "26036", "city" : "DALLAS", "loc" : [ -80.550804, 39.978343 ], "pop" : 822, "state" : "WV" } +{ "_id" : "26037", "city" : "FOLLANSBEE", "loc" : [ -80.584954, 40.329552 ], "pop" : 7676, "state" : "WV" } +{ "_id" : "26038", "city" : "GLEN DALE", "loc" : [ -80.732263, 39.959732 ], "pop" : 3418, "state" : "WV" } +{ "_id" : "26039", "city" : "GLEN EASTON", "loc" : [ -80.66606899999999, 39.853121 ], "pop" : 2477, "state" : "WV" } +{ "_id" : "26040", "city" : "MC MECHEN", "loc" : [ -80.73081999999999, 39.987793 ], "pop" : 2130, "state" : "WV" } +{ "_id" : "26041", "city" : "MOUNDSVILLE", "loc" : [ -80.730971, 39.914819 ], "pop" : 18627, "state" : "WV" } +{ "_id" : "26047", "city" : "NEW CUMBERLAND", "loc" : [ -80.590108, 40.522777 ], "pop" : 5779, "state" : "WV" } +{ "_id" : "26050", "city" : "NEWELL", "loc" : [ -80.60112599999999, 40.613971 ], "pop" : 2316, "state" : "WV" } +{ "_id" : "26055", "city" : "PROCTOR", "loc" : [ -80.761779, 39.720683 ], "pop" : 1785, "state" : "WV" } +{ "_id" : "26059", "city" : "TRIADELPHIA", "loc" : [ -80.59529000000001, 40.069945 ], "pop" : 2320, "state" : "WV" } +{ "_id" : "26060", "city" : "VALLEY GROVE", "loc" : [ -80.555059, 40.094649 ], "pop" : 1705, "state" : "WV" } +{ "_id" : "26062", "city" : "WEIRTON", "loc" : [ -80.568307, 40.413673 ], "pop" : 25107, "state" : "WV" } +{ "_id" : "26070", "city" : "WELLSBURG", "loc" : [ -80.59606100000001, 40.254792 ], "pop" : 12292, "state" : "WV" } +{ "_id" : "26101", "city" : "PARKERSBURG", "loc" : [ -81.53541199999999, 39.264433 ], "pop" : 35886, "state" : "WV" } +{ "_id" : "26104", "city" : "NORTH PARKERSBUR", "loc" : [ -81.52610900000001, 39.285316 ], "pop" : 9260, "state" : "WV" } +{ "_id" : "26105", "city" : "VIENNA", "loc" : [ -81.54114300000001, 39.325089 ], "pop" : 11696, "state" : "WV" } +{ "_id" : "26133", "city" : "BELLEVILLE", "loc" : [ -81.69231600000001, 39.131417 ], "pop" : 1240, "state" : "WV" } +{ "_id" : "26134", "city" : "WILLOW ISLAND", "loc" : [ -81.27880999999999, 39.367927 ], "pop" : 1562, "state" : "WV" } +{ "_id" : "26135", "city" : "BENS RUN", "loc" : [ -81.066534, 39.44641 ], "pop" : 282, "state" : "WV" } +{ "_id" : "26136", "city" : "BIG BEND", "loc" : [ -81.13603000000001, 38.971941 ], "pop" : 844, "state" : "WV" } +{ "_id" : "26137", "city" : "NOBE", "loc" : [ -81.069813, 38.996306 ], "pop" : 371, "state" : "WV" } +{ "_id" : "26138", "city" : "BROHARD", "loc" : [ -81.177528, 39.033756 ], "pop" : 23, "state" : "WV" } +{ "_id" : "26141", "city" : "CRESTON", "loc" : [ -81.23690499999999, 38.937805 ], "pop" : 340, "state" : "WV" } +{ "_id" : "26142", "city" : "DAVISVILLE", "loc" : [ -81.47986299999999, 39.212635 ], "pop" : 3667, "state" : "WV" } +{ "_id" : "26143", "city" : "ELIZABETH", "loc" : [ -81.398889, 39.056618 ], "pop" : 3052, "state" : "WV" } +{ "_id" : "26145", "city" : "FIVE FORKS", "loc" : [ -81.086623, 38.975331 ], "pop" : 78, "state" : "WV" } +{ "_id" : "26146", "city" : "FRIENDLY", "loc" : [ -81.034544, 39.502444 ], "pop" : 1073, "state" : "WV" } +{ "_id" : "26147", "city" : "GRANTSVILLE", "loc" : [ -81.076294, 38.932436 ], "pop" : 1873, "state" : "WV" } +{ "_id" : "26148", "city" : "MACFARLAN", "loc" : [ -81.177627, 39.08058 ], "pop" : 437, "state" : "WV" } +{ "_id" : "26149", "city" : "MIDDLEBOURNE", "loc" : [ -80.886067, 39.50537 ], "pop" : 2527, "state" : "WV" } +{ "_id" : "26150", "city" : "MINERALWELLS", "loc" : [ -81.519096, 39.179846 ], "pop" : 5463, "state" : "WV" } +{ "_id" : "26151", "city" : "MOUNT ZION", "loc" : [ -81.119473, 38.877455 ], "pop" : 227, "state" : "WV" } +{ "_id" : "26152", "city" : "MUNDAY", "loc" : [ -81.204048, 39.021423 ], "pop" : 117, "state" : "WV" } +{ "_id" : "26153", "city" : "MURRAYSVILLE", "loc" : [ -81.771368, 39.059143 ], "pop" : 452, "state" : "WV" } +{ "_id" : "26155", "city" : "NEW MARTINSVILLE", "loc" : [ -80.85654100000001, 39.658798 ], "pop" : 7617, "state" : "WV" } +{ "_id" : "26159", "city" : "PADEN CITY", "loc" : [ -80.92648199999999, 39.604408 ], "pop" : 3513, "state" : "WV" } +{ "_id" : "26160", "city" : "PALESTINE", "loc" : [ -81.42803000000001, 38.974141 ], "pop" : 935, "state" : "WV" } +{ "_id" : "26161", "city" : "PETROLEUM", "loc" : [ -81.240607, 39.174139 ], "pop" : 419, "state" : "WV" } +{ "_id" : "26164", "city" : "RAVENSWOOD", "loc" : [ -81.752377, 38.94675 ], "pop" : 6428, "state" : "WV" } +{ "_id" : "26167", "city" : "READER", "loc" : [ -80.751583, 39.583595 ], "pop" : 2289, "state" : "WV" } +{ "_id" : "26169", "city" : "ROCKPORT", "loc" : [ -81.571333, 39.079774 ], "pop" : 1068, "state" : "WV" } +{ "_id" : "26170", "city" : "SAINT MARYS", "loc" : [ -81.172499, 39.38597 ], "pop" : 5523, "state" : "WV" } +{ "_id" : "26173", "city" : "SHERMAN", "loc" : [ -81.70091600000001, 39.013094 ], "pop" : 749, "state" : "WV" } +{ "_id" : "26175", "city" : "SISTERSVILLE", "loc" : [ -80.98182799999999, 39.558365 ], "pop" : 3113, "state" : "WV" } +{ "_id" : "26178", "city" : "SMITHVILLE", "loc" : [ -81.061953, 39.067078 ], "pop" : 590, "state" : "WV" } +{ "_id" : "26179", "city" : "TANNER", "loc" : [ -80.95971900000001, 38.966435 ], "pop" : 389, "state" : "WV" } +{ "_id" : "26180", "city" : "WALKER", "loc" : [ -81.386577, 39.182082 ], "pop" : 3218, "state" : "WV" } +{ "_id" : "26181", "city" : "NEW ENGLAND", "loc" : [ -81.640719, 39.233911 ], "pop" : 8532, "state" : "WV" } +{ "_id" : "26184", "city" : "WAVERLY", "loc" : [ -81.38193800000001, 39.315681 ], "pop" : 2836, "state" : "WV" } +{ "_id" : "26185", "city" : "WICK", "loc" : [ -80.96804400000001, 39.421653 ], "pop" : 479, "state" : "WV" } +{ "_id" : "26186", "city" : "WILEYVILLE", "loc" : [ -80.647251, 39.662593 ], "pop" : 343, "state" : "WV" } +{ "_id" : "26187", "city" : "WILLIAMSTOWN", "loc" : [ -81.456608, 39.38243 ], "pop" : 5207, "state" : "WV" } +{ "_id" : "26201", "city" : "TENNERTON", "loc" : [ -80.21782399999999, 38.98407 ], "pop" : 16829, "state" : "WV" } +{ "_id" : "26202", "city" : "FENWICK", "loc" : [ -80.634972, 38.244657 ], "pop" : 393, "state" : "WV" } +{ "_id" : "26203", "city" : "ERBACON", "loc" : [ -80.57423199999999, 38.541864 ], "pop" : 318, "state" : "WV" } +{ "_id" : "26205", "city" : "CRAIGSVILLE", "loc" : [ -80.64438, 38.325389 ], "pop" : 3070, "state" : "WV" } +{ "_id" : "26206", "city" : "COWEN", "loc" : [ -80.53580700000001, 38.413273 ], "pop" : 2469, "state" : "WV" } +{ "_id" : "26208", "city" : "GAULEY MILLS", "loc" : [ -80.591408, 38.379246 ], "pop" : 1191, "state" : "WV" } +{ "_id" : "26210", "city" : "ADRIAN", "loc" : [ -80.288663, 38.913422 ], "pop" : 794, "state" : "WV" } +{ "_id" : "26214", "city" : "CENTURY", "loc" : [ -80.17568799999999, 39.093287 ], "pop" : 235, "state" : "WV" } +{ "_id" : "26215", "city" : "CLEVELAND", "loc" : [ -80.342849, 38.839225 ], "pop" : 456, "state" : "WV" } +{ "_id" : "26217", "city" : "DIANA", "loc" : [ -80.431962, 38.575471 ], "pop" : 1172, "state" : "WV" } +{ "_id" : "26218", "city" : "ALEXANDER", "loc" : [ -80.274339, 38.851145 ], "pop" : 2398, "state" : "WV" } +{ "_id" : "26222", "city" : "REPLETE", "loc" : [ -80.402345, 38.679583 ], "pop" : 730, "state" : "WV" } +{ "_id" : "26224", "city" : "HELVETIA", "loc" : [ -80.138167, 38.771258 ], "pop" : 27, "state" : "WV" } +{ "_id" : "26228", "city" : "KANAWHA HEAD", "loc" : [ -80.37273399999999, 38.76183 ], "pop" : 171, "state" : "WV" } +{ "_id" : "26230", "city" : "PICKENS", "loc" : [ -80.209784, 38.684242 ], "pop" : 382, "state" : "WV" } +{ "_id" : "26234", "city" : "ROCK CAVE", "loc" : [ -80.316276, 38.781128 ], "pop" : 649, "state" : "WV" } +{ "_id" : "26236", "city" : "SELBYVILLE", "loc" : [ -80.312955, 38.719393 ], "pop" : 40, "state" : "WV" } +{ "_id" : "26237", "city" : "TALLMANSVILLE", "loc" : [ -80.15799, 38.856405 ], "pop" : 507, "state" : "WV" } +{ "_id" : "26238", "city" : "VOLGA", "loc" : [ -80.143209, 39.068445 ], "pop" : 969, "state" : "WV" } +{ "_id" : "26241", "city" : "ELKINS", "loc" : [ -79.847115, 38.925304 ], "pop" : 14027, "state" : "WV" } +{ "_id" : "26250", "city" : "BELINGTON", "loc" : [ -79.94950799999999, 39.024439 ], "pop" : 5189, "state" : "WV" } +{ "_id" : "26253", "city" : "BEVERLY", "loc" : [ -79.865121, 38.828021 ], "pop" : 3206, "state" : "WV" } +{ "_id" : "26254", "city" : "WYMER", "loc" : [ -79.619347, 38.934863 ], "pop" : 128, "state" : "WV" } +{ "_id" : "26257", "city" : "COALTON", "loc" : [ -79.976724, 38.91438 ], "pop" : 1422, "state" : "WV" } +{ "_id" : "26260", "city" : "DAVIS", "loc" : [ -79.456278, 39.088227 ], "pop" : 1459, "state" : "WV" } +{ "_id" : "26261", "city" : "RICHWOOD", "loc" : [ -80.544481, 38.222988 ], "pop" : 4129, "state" : "WV" } +{ "_id" : "26263", "city" : "DRYFORK", "loc" : [ -79.45340299999999, 38.957616 ], "pop" : 116, "state" : "WV" } +{ "_id" : "26264", "city" : "DURBIN", "loc" : [ -79.793464, 38.616313 ], "pop" : 75, "state" : "WV" } +{ "_id" : "26266", "city" : "UPPERGLADE", "loc" : [ -80.496464, 38.418528 ], "pop" : 383, "state" : "WV" } +{ "_id" : "26267", "city" : "ELLAMORE", "loc" : [ -80.09261100000001, 38.933966 ], "pop" : 482, "state" : "WV" } +{ "_id" : "26268", "city" : "GLADY", "loc" : [ -79.734202, 38.866925 ], "pop" : 615, "state" : "WV" } +{ "_id" : "26269", "city" : "HAMBLETON", "loc" : [ -79.641565, 39.116836 ], "pop" : 930, "state" : "WV" } +{ "_id" : "26270", "city" : "HARMAN", "loc" : [ -79.52459899999999, 38.923369 ], "pop" : 700, "state" : "WV" } +{ "_id" : "26271", "city" : "HENDRICKS", "loc" : [ -79.630302, 39.074814 ], "pop" : 318, "state" : "WV" } +{ "_id" : "26273", "city" : "HUTTONSVILLE", "loc" : [ -79.97754399999999, 38.678433 ], "pop" : 1072, "state" : "WV" } +{ "_id" : "26276", "city" : "KERENS", "loc" : [ -79.77542699999999, 39.029854 ], "pop" : 569, "state" : "WV" } +{ "_id" : "26278", "city" : "MABIE", "loc" : [ -80.01306099999999, 38.822158 ], "pop" : 427, "state" : "WV" } +{ "_id" : "26280", "city" : "MILL CREEK", "loc" : [ -79.97856899999999, 38.732493 ], "pop" : 2219, "state" : "WV" } +{ "_id" : "26282", "city" : "MONTERVILLE", "loc" : [ -80.12239099999999, 38.551707 ], "pop" : 79, "state" : "WV" } +{ "_id" : "26283", "city" : "MONTROSE", "loc" : [ -79.78957699999999, 39.096357 ], "pop" : 1513, "state" : "WV" } +{ "_id" : "26287", "city" : "PARSONS", "loc" : [ -79.67344799999999, 39.105857 ], "pop" : 2432, "state" : "WV" } +{ "_id" : "26288", "city" : "BOLAIR", "loc" : [ -80.399798, 38.476362 ], "pop" : 3914, "state" : "WV" } +{ "_id" : "26289", "city" : "RED CREEK", "loc" : [ -79.53009, 39.019628 ], "pop" : 318, "state" : "WV" } +{ "_id" : "26291", "city" : "SLATYFORK", "loc" : [ -80.040353, 38.381207 ], "pop" : 448, "state" : "WV" } +{ "_id" : "26292", "city" : "THOMAS", "loc" : [ -79.503, 39.150517 ], "pop" : 966, "state" : "WV" } +{ "_id" : "26293", "city" : "VALLEY BEND", "loc" : [ -79.916037, 38.784903 ], "pop" : 804, "state" : "WV" } +{ "_id" : "26294", "city" : "MINGO", "loc" : [ -80.044911, 38.536637 ], "pop" : 1013, "state" : "WV" } +{ "_id" : "26296", "city" : "JOB", "loc" : [ -79.55775199999999, 38.808289 ], "pop" : 384, "state" : "WV" } +{ "_id" : "26299", "city" : "BOGGS", "loc" : [ -80.607389, 38.482119 ], "pop" : 544, "state" : "WV" } +{ "_id" : "26301", "city" : "NUTTER FORT STON", "loc" : [ -80.34868299999999, 39.278422 ], "pop" : 33089, "state" : "WV" } +{ "_id" : "26320", "city" : "WILBUR", "loc" : [ -80.81715699999999, 39.429757 ], "pop" : 1201, "state" : "WV" } +{ "_id" : "26321", "city" : "ALUM BRIDGE", "loc" : [ -80.688196, 39.042474 ], "pop" : 1015, "state" : "WV" } +{ "_id" : "26322", "city" : "ALVY", "loc" : [ -80.668921, 39.451106 ], "pop" : 143, "state" : "WV" } +{ "_id" : "26325", "city" : "AUBURN", "loc" : [ -80.883656, 39.086382 ], "pop" : 326, "state" : "WV" } +{ "_id" : "26327", "city" : "BEREA", "loc" : [ -80.92232199999999, 39.130452 ], "pop" : 106, "state" : "WV" } +{ "_id" : "26328", "city" : "BLANDVILLE", "loc" : [ -80.735856, 39.265169 ], "pop" : 35, "state" : "WV" } +{ "_id" : "26330", "city" : "BRIDGEPORT", "loc" : [ -80.24269200000001, 39.29537 ], "pop" : 11747, "state" : "WV" } +{ "_id" : "26332", "city" : "BRISTOL", "loc" : [ -80.510541, 39.290425 ], "pop" : 1424, "state" : "WV" } +{ "_id" : "26335", "city" : "GEM", "loc" : [ -80.65898900000001, 38.850391 ], "pop" : 1513, "state" : "WV" } +{ "_id" : "26337", "city" : "CAIRO", "loc" : [ -81.155427, 39.23249 ], "pop" : 1379, "state" : "WV" } +{ "_id" : "26338", "city" : "CAMDEN", "loc" : [ -80.591531, 39.089268 ], "pop" : 584, "state" : "WV" } +{ "_id" : "26339", "city" : "CENTER POINT", "loc" : [ -80.635227, 39.412472 ], "pop" : 121, "state" : "WV" } +{ "_id" : "26342", "city" : "COXS MILLS", "loc" : [ -80.87459200000001, 39.002102 ], "pop" : 796, "state" : "WV" } +{ "_id" : "26343", "city" : "CRAWFORD", "loc" : [ -80.400749, 38.840065 ], "pop" : 517, "state" : "WV" } +{ "_id" : "26346", "city" : "HIGHLAND", "loc" : [ -81.060382, 39.282364 ], "pop" : 880, "state" : "WV" } +{ "_id" : "26347", "city" : "WENDEL", "loc" : [ -80.128179, 39.271069 ], "pop" : 2620, "state" : "WV" } +{ "_id" : "26348", "city" : "FOLSOM", "loc" : [ -80.525806, 39.469345 ], "pop" : 359, "state" : "WV" } +{ "_id" : "26351", "city" : "BALDWIN", "loc" : [ -80.82783000000001, 38.933619 ], "pop" : 2768, "state" : "WV" } +{ "_id" : "26354", "city" : "GRAFTON", "loc" : [ -80.028509, 39.341386 ], "pop" : 10102, "state" : "WV" } +{ "_id" : "26360", "city" : "GREENWOOD", "loc" : [ -80.878899, 39.290761 ], "pop" : 454, "state" : "WV" } +{ "_id" : "26362", "city" : "MAHONE", "loc" : [ -81.045967, 39.199608 ], "pop" : 2962, "state" : "WV" } +{ "_id" : "26367", "city" : "HAZELGREEN", "loc" : [ -80.98057799999999, 39.063075 ], "pop" : 203, "state" : "WV" } +{ "_id" : "26372", "city" : "HORNER", "loc" : [ -80.365576, 38.972628 ], "pop" : 365, "state" : "WV" } +{ "_id" : "26374", "city" : "INDEPENDENCE", "loc" : [ -79.882161, 39.446372 ], "pop" : 1227, "state" : "WV" } +{ "_id" : "26376", "city" : "WILDCAT", "loc" : [ -80.477002, 38.767689 ], "pop" : 589, "state" : "WV" } +{ "_id" : "26377", "city" : "JACKSONBURG", "loc" : [ -80.643697, 39.541553 ], "pop" : 406, "state" : "WV" } +{ "_id" : "26378", "city" : "JANE LEW", "loc" : [ -80.431059, 39.109989 ], "pop" : 4529, "state" : "WV" } +{ "_id" : "26383", "city" : "LIMA", "loc" : [ -80.72470300000001, 39.438973 ], "pop" : 153, "state" : "WV" } +{ "_id" : "26384", "city" : "LINN", "loc" : [ -80.730046, 38.957294 ], "pop" : 759, "state" : "WV" } +{ "_id" : "26385", "city" : "LOST CREEK", "loc" : [ -80.377674, 39.172528 ], "pop" : 3740, "state" : "WV" } +{ "_id" : "26386", "city" : "LUMBERPORT", "loc" : [ -80.36763500000001, 39.378108 ], "pop" : 2300, "state" : "WV" } +{ "_id" : "26404", "city" : "MEADOWBROOK", "loc" : [ -80.32566799999999, 39.335367 ], "pop" : 1373, "state" : "WV" } +{ "_id" : "26405", "city" : "KASSON", "loc" : [ -79.92157400000001, 39.212271 ], "pop" : 1382, "state" : "WV" } +{ "_id" : "26408", "city" : "MOUNT CLARE", "loc" : [ -80.289948, 39.210708 ], "pop" : 1558, "state" : "WV" } +{ "_id" : "26409", "city" : "NEWBERNE", "loc" : [ -80.902838, 39.040743 ], "pop" : 86, "state" : "WV" } +{ "_id" : "26410", "city" : "NEWBURG", "loc" : [ -79.828036, 39.402722 ], "pop" : 1206, "state" : "WV" } +{ "_id" : "26411", "city" : "NEW MILTON", "loc" : [ -80.707617, 39.189917 ], "pop" : 783, "state" : "WV" } +{ "_id" : "26412", "city" : "ORLANDO", "loc" : [ -80.56012200000001, 38.885349 ], "pop" : 209, "state" : "WV" } +{ "_id" : "26415", "city" : "TOLL GATE", "loc" : [ -80.958482, 39.292064 ], "pop" : 2597, "state" : "WV" } +{ "_id" : "26416", "city" : "BROADDUS", "loc" : [ -80.03853100000001, 39.150789 ], "pop" : 7934, "state" : "WV" } +{ "_id" : "26419", "city" : "HASTINGS", "loc" : [ -80.67721299999999, 39.565069 ], "pop" : 881, "state" : "WV" } +{ "_id" : "26421", "city" : "PULLMAN", "loc" : [ -80.934685, 39.190013 ], "pop" : 247, "state" : "WV" } +{ "_id" : "26423", "city" : "ROANOKE", "loc" : [ -80.498537, 38.930494 ], "pop" : 576, "state" : "WV" } +{ "_id" : "26425", "city" : "MANHEIM", "loc" : [ -79.642977, 39.221575 ], "pop" : 404, "state" : "WV" } +{ "_id" : "26426", "city" : "SALEM", "loc" : [ -80.589792, 39.294761 ], "pop" : 5874, "state" : "WV" } +{ "_id" : "26431", "city" : "SHINNSTON", "loc" : [ -80.283399, 39.388809 ], "pop" : 6044, "state" : "WV" } +{ "_id" : "26437", "city" : "SMITHFIELD", "loc" : [ -80.558245, 39.5134 ], "pop" : 775, "state" : "WV" } +{ "_id" : "26439", "city" : "STOUTS MILLS", "loc" : [ -80.741131, 38.893335 ], "pop" : 717, "state" : "WV" } +{ "_id" : "26440", "city" : "THORNTON", "loc" : [ -79.909645, 39.332879 ], "pop" : 1144, "state" : "WV" } +{ "_id" : "26443", "city" : "TROY", "loc" : [ -80.754921, 39.083881 ], "pop" : 115, "state" : "WV" } +{ "_id" : "26444", "city" : "TUNNELTON", "loc" : [ -79.747818, 39.362502 ], "pop" : 4076, "state" : "WV" } +{ "_id" : "26447", "city" : "WALKERSVILLE", "loc" : [ -80.480221, 38.850738 ], "pop" : 737, "state" : "WV" } +{ "_id" : "26448", "city" : "WALLACE", "loc" : [ -80.486468, 39.411667 ], "pop" : 1372, "state" : "WV" } +{ "_id" : "26451", "city" : "WEST MILFORD", "loc" : [ -80.363049, 39.203906 ], "pop" : 1365, "state" : "WV" } +{ "_id" : "26452", "city" : "WESTON", "loc" : [ -80.47365600000001, 39.041104 ], "pop" : 9912, "state" : "WV" } +{ "_id" : "26456", "city" : "WEST UNION", "loc" : [ -80.791057, 39.276185 ], "pop" : 3133, "state" : "WV" } +{ "_id" : "26462", "city" : "WOLF SUMMIT", "loc" : [ -80.438704, 39.232985 ], "pop" : 1116, "state" : "WV" } +{ "_id" : "26505", "city" : "STAR CITY", "loc" : [ -79.95422499999999, 39.633858 ], "pop" : 70185, "state" : "WV" } +{ "_id" : "26519", "city" : "ALBRIGHT", "loc" : [ -79.635811, 39.570116 ], "pop" : 858, "state" : "WV" } +{ "_id" : "26521", "city" : "BLACKSVILLE", "loc" : [ -80.232646, 39.695821 ], "pop" : 13, "state" : "WV" } +{ "_id" : "26525", "city" : "BRUCETON MILLS", "loc" : [ -79.61594100000001, 39.645394 ], "pop" : 3857, "state" : "WV" } +{ "_id" : "26529", "city" : "CORE", "loc" : [ -80.23068000000001, 39.654037 ], "pop" : 453, "state" : "WV" } +{ "_id" : "26537", "city" : "KINGWOOD", "loc" : [ -79.70629, 39.481912 ], "pop" : 6716, "state" : "WV" } +{ "_id" : "26541", "city" : "MAIDSVILLE", "loc" : [ -80.08319299999999, 39.709308 ], "pop" : 2047, "state" : "WV" } +{ "_id" : "26542", "city" : "CASCADE", "loc" : [ -79.80099300000001, 39.576413 ], "pop" : 658, "state" : "WV" } +{ "_id" : "26546", "city" : "PURSGLOVE", "loc" : [ -80.061798, 39.699543 ], "pop" : 322, "state" : "WV" } +{ "_id" : "26547", "city" : "REEDSVILLE", "loc" : [ -79.810061, 39.51823 ], "pop" : 3551, "state" : "WV" } +{ "_id" : "26554", "city" : "MONONGAH", "loc" : [ -80.146041, 39.472677 ], "pop" : 41565, "state" : "WV" } +{ "_id" : "26560", "city" : "BAXTER", "loc" : [ -80.14169099999999, 39.536056 ], "pop" : 748, "state" : "WV" } +{ "_id" : "26561", "city" : "BIG RUN", "loc" : [ -80.58371699999999, 39.59414 ], "pop" : 647, "state" : "WV" } +{ "_id" : "26562", "city" : "COBURN", "loc" : [ -80.405931, 39.667984 ], "pop" : 697, "state" : "WV" } +{ "_id" : "26568", "city" : "ENTERPRISE", "loc" : [ -80.316704, 39.425998 ], "pop" : 1800, "state" : "WV" } +{ "_id" : "26570", "city" : "FAIRVIEW", "loc" : [ -80.25291799999999, 39.610335 ], "pop" : 2406, "state" : "WV" } +{ "_id" : "26571", "city" : "FARMINGTON", "loc" : [ -80.256643, 39.50287 ], "pop" : 3622, "state" : "WV" } +{ "_id" : "26575", "city" : "HUNDRED", "loc" : [ -80.474552, 39.691744 ], "pop" : 1214, "state" : "WV" } +{ "_id" : "26581", "city" : "LITTLETON", "loc" : [ -80.569478, 39.659205 ], "pop" : 458, "state" : "WV" } +{ "_id" : "26582", "city" : "MANNINGTON", "loc" : [ -80.355243, 39.522031 ], "pop" : 5323, "state" : "WV" } +{ "_id" : "26585", "city" : "METZ", "loc" : [ -80.416815, 39.607762 ], "pop" : 924, "state" : "WV" } +{ "_id" : "26587", "city" : "RACHEL", "loc" : [ -80.295694, 39.52254 ], "pop" : 274, "state" : "WV" } +{ "_id" : "26588", "city" : "RIVESVILLE", "loc" : [ -80.141744, 39.556839 ], "pop" : 2938, "state" : "WV" } +{ "_id" : "26589", "city" : "WADESTOWN", "loc" : [ -80.327462, 39.636926 ], "pop" : 329, "state" : "WV" } +{ "_id" : "26590", "city" : "WANA", "loc" : [ -80.30510599999999, 39.702072 ], "pop" : 272, "state" : "WV" } +{ "_id" : "26591", "city" : "WORTHINGTON", "loc" : [ -80.290468, 39.452213 ], "pop" : 1506, "state" : "WV" } +{ "_id" : "26601", "city" : "HEROLD", "loc" : [ -80.681072, 38.673855 ], "pop" : 3517, "state" : "WV" } +{ "_id" : "26610", "city" : "BIRCH RIVER", "loc" : [ -80.745873, 38.491424 ], "pop" : 1440, "state" : "WV" } +{ "_id" : "26611", "city" : "FLOWER", "loc" : [ -80.84034200000001, 38.839711 ], "pop" : 308, "state" : "WV" } +{ "_id" : "26615", "city" : "COPEN", "loc" : [ -80.728481, 38.830556 ], "pop" : 161, "state" : "WV" } +{ "_id" : "26617", "city" : "DILLE", "loc" : [ -80.853784, 38.474704 ], "pop" : 410, "state" : "WV" } +{ "_id" : "26618", "city" : "ELMIRA", "loc" : [ -80.984972, 38.658907 ], "pop" : 276, "state" : "WV" } +{ "_id" : "26619", "city" : "RIFFLE", "loc" : [ -80.768123, 38.806866 ], "pop" : 230, "state" : "WV" } +{ "_id" : "26620", "city" : "FALLS MILL", "loc" : [ -80.550618, 38.77566 ], "pop" : 25, "state" : "WV" } +{ "_id" : "26621", "city" : "CORLEY", "loc" : [ -80.63847800000001, 38.724475 ], "pop" : 658, "state" : "WV" } +{ "_id" : "26623", "city" : "CLEM", "loc" : [ -80.877416, 38.636828 ], "pop" : 1276, "state" : "WV" } +{ "_id" : "26624", "city" : "GASSAWAY", "loc" : [ -80.786339, 38.686193 ], "pop" : 2665, "state" : "WV" } +{ "_id" : "26626", "city" : "GLENDON", "loc" : [ -80.939459, 38.610857 ], "pop" : 223, "state" : "WV" } +{ "_id" : "26627", "city" : "HEATERS", "loc" : [ -80.642884, 38.755807 ], "pop" : 368, "state" : "WV" } +{ "_id" : "26629", "city" : "TESLA", "loc" : [ -80.706293, 38.581046 ], "pop" : 1325, "state" : "WV" } +{ "_id" : "26631", "city" : "NAPIER", "loc" : [ -80.584104, 38.77462 ], "pop" : 107, "state" : "WV" } +{ "_id" : "26633", "city" : "NICUT", "loc" : [ -81.011, 38.715133 ], "pop" : 151, "state" : "WV" } +{ "_id" : "26634", "city" : "PERKINS", "loc" : [ -80.919336, 38.809049 ], "pop" : 242, "state" : "WV" } +{ "_id" : "26636", "city" : "ROSEDALE", "loc" : [ -80.906127, 38.770103 ], "pop" : 88, "state" : "WV" } +{ "_id" : "26638", "city" : "SHOCK", "loc" : [ -80.96866300000001, 38.757527 ], "pop" : 250, "state" : "WV" } +{ "_id" : "26639", "city" : "STRANGE CREEK", "loc" : [ -80.903077, 38.573823 ], "pop" : 206, "state" : "WV" } +{ "_id" : "26641", "city" : "WILSIE", "loc" : [ -80.86805099999999, 38.672723 ], "pop" : 150, "state" : "WV" } +{ "_id" : "26651", "city" : "SUMMERSVILLE", "loc" : [ -80.835278, 38.30089 ], "pop" : 6520, "state" : "WV" } +{ "_id" : "26656", "city" : "BELVA", "loc" : [ -81.156572, 38.249105 ], "pop" : 415, "state" : "WV" } +{ "_id" : "26660", "city" : "CALVIN", "loc" : [ -80.70162999999999, 38.327679 ], "pop" : 603, "state" : "WV" } +{ "_id" : "26662", "city" : "CANVAS", "loc" : [ -80.744637, 38.262445 ], "pop" : 1163, "state" : "WV" } +{ "_id" : "26667", "city" : "DRENNEN", "loc" : [ -81.00886800000001, 38.258729 ], "pop" : 263, "state" : "WV" } +{ "_id" : "26671", "city" : "GILBOA", "loc" : [ -80.952232, 38.298304 ], "pop" : 422, "state" : "WV" } +{ "_id" : "26674", "city" : "JODIE", "loc" : [ -81.134657, 38.208319 ], "pop" : 510, "state" : "WV" } +{ "_id" : "26675", "city" : "KESLERS CROSS LA", "loc" : [ -80.93336499999999, 38.225762 ], "pop" : 188, "state" : "WV" } +{ "_id" : "26676", "city" : "LEIVASY", "loc" : [ -80.717213, 38.135019 ], "pop" : 1107, "state" : "WV" } +{ "_id" : "26678", "city" : "MOUNT LOOKOUT", "loc" : [ -80.91077, 38.182109 ], "pop" : 1029, "state" : "WV" } +{ "_id" : "26679", "city" : "RUNA", "loc" : [ -80.820204, 38.197064 ], "pop" : 1698, "state" : "WV" } +{ "_id" : "26680", "city" : "RUSSELVILLE", "loc" : [ -80.885777, 38.10829 ], "pop" : 99, "state" : "WV" } +{ "_id" : "26681", "city" : "NETTIE", "loc" : [ -80.69527100000001, 38.209042 ], "pop" : 1196, "state" : "WV" } +{ "_id" : "26683", "city" : "POE", "loc" : [ -80.952167, 38.256458 ], "pop" : 818, "state" : "WV" } +{ "_id" : "26684", "city" : "POOL", "loc" : [ -80.885907, 38.146004 ], "pop" : 112, "state" : "WV" } +{ "_id" : "26690", "city" : "SWISS", "loc" : [ -81.080703, 38.279058 ], "pop" : 684, "state" : "WV" } +{ "_id" : "26691", "city" : "TIOGA", "loc" : [ -80.661663, 38.375989 ], "pop" : 808, "state" : "WV" } +{ "_id" : "26704", "city" : "AUGUSTA", "loc" : [ -78.59308900000001, 39.299821 ], "pop" : 2769, "state" : "WV" } +{ "_id" : "26705", "city" : "AMBOY", "loc" : [ -79.571088, 39.304719 ], "pop" : 1143, "state" : "WV" } +{ "_id" : "26710", "city" : "BURLINGTON", "loc" : [ -78.912278, 39.388709 ], "pop" : 3883, "state" : "WV" } +{ "_id" : "26711", "city" : "CAPON BRIDGE", "loc" : [ -78.46441299999999, 39.280198 ], "pop" : 997, "state" : "WV" } +{ "_id" : "26713", "city" : "CORINTH", "loc" : [ -79.50396499999999, 39.43183 ], "pop" : 503, "state" : "WV" } +{ "_id" : "26714", "city" : "DELRAY", "loc" : [ -78.639427, 39.179564 ], "pop" : 467, "state" : "WV" } +{ "_id" : "26716", "city" : "EGLON", "loc" : [ -79.510919, 39.292514 ], "pop" : 249, "state" : "WV" } +{ "_id" : "26717", "city" : "ELK GARDEN", "loc" : [ -79.153871, 39.363088 ], "pop" : 1168, "state" : "WV" } +{ "_id" : "26719", "city" : "FORT ASHBY", "loc" : [ -78.77429600000001, 39.497045 ], "pop" : 2212, "state" : "WV" } +{ "_id" : "26720", "city" : "GORMANIA", "loc" : [ -79.340136, 39.271499 ], "pop" : 823, "state" : "WV" } +{ "_id" : "26722", "city" : "GREEN SPRING", "loc" : [ -78.627191, 39.502931 ], "pop" : 739, "state" : "WV" } +{ "_id" : "26726", "city" : "SCHERR", "loc" : [ -78.98866700000001, 39.430406 ], "pop" : 9579, "state" : "WV" } +{ "_id" : "26729", "city" : "KIRBY", "loc" : [ -78.73146800000001, 39.195588 ], "pop" : 303, "state" : "WV" } +{ "_id" : "26731", "city" : "LAHMANSVILLE", "loc" : [ -79.043319, 39.164225 ], "pop" : 32, "state" : "WV" } +{ "_id" : "26734", "city" : "MEDLEY", "loc" : [ -79.0984, 39.236079 ], "pop" : 430, "state" : "WV" } +{ "_id" : "26739", "city" : "MOUNT STORM", "loc" : [ -79.225454, 39.265224 ], "pop" : 861, "state" : "WV" } +{ "_id" : "26743", "city" : "NEW CREEK", "loc" : [ -79.04521200000001, 39.361155 ], "pop" : 1417, "state" : "WV" } +{ "_id" : "26750", "city" : "PIEDMONT", "loc" : [ -79.048862, 39.479901 ], "pop" : 1094, "state" : "WV" } +{ "_id" : "26753", "city" : "PATTERSON CREEK", "loc" : [ -78.792006, 39.581796 ], "pop" : 5929, "state" : "WV" } +{ "_id" : "26755", "city" : "RIO", "loc" : [ -78.69354800000001, 39.180663 ], "pop" : 47, "state" : "WV" } +{ "_id" : "26757", "city" : "ROMNEY", "loc" : [ -78.748075, 39.342369 ], "pop" : 4007, "state" : "WV" } +{ "_id" : "26761", "city" : "SHANKS", "loc" : [ -78.69953099999999, 39.284859 ], "pop" : 779, "state" : "WV" } +{ "_id" : "26763", "city" : "SPRINGFIELD", "loc" : [ -78.695019, 39.462996 ], "pop" : 1321, "state" : "WV" } +{ "_id" : "26764", "city" : "HOPEMONT", "loc" : [ -79.55723399999999, 39.441575 ], "pop" : 4487, "state" : "WV" } +{ "_id" : "26765", "city" : "THREE CHURCHES", "loc" : [ -78.661061, 39.351578 ], "pop" : 1253, "state" : "WV" } +{ "_id" : "26767", "city" : "WILEY FORD", "loc" : [ -78.774992, 39.613308 ], "pop" : 1139, "state" : "WV" } +{ "_id" : "26769", "city" : "HORSE SHOE RUN", "loc" : [ -79.51231199999999, 39.252842 ], "pop" : 367, "state" : "WV" } +{ "_id" : "26801", "city" : "BAKER", "loc" : [ -78.774826, 39.065588 ], "pop" : 1321, "state" : "WV" } +{ "_id" : "26802", "city" : "BRANDYWINE", "loc" : [ -79.20962900000001, 38.635701 ], "pop" : 941, "state" : "WV" } +{ "_id" : "26804", "city" : "CIRCLEVILLE", "loc" : [ -79.53672, 38.623039 ], "pop" : 658, "state" : "WV" } +{ "_id" : "26806", "city" : "FORT SEYBERT", "loc" : [ -79.140781, 38.739489 ], "pop" : 167, "state" : "WV" } +{ "_id" : "26807", "city" : "FRANKLIN", "loc" : [ -79.353776, 38.639985 ], "pop" : 2733, "state" : "WV" } +{ "_id" : "26808", "city" : "HIGH VIEW", "loc" : [ -78.442548, 39.222497 ], "pop" : 922, "state" : "WV" } +{ "_id" : "26810", "city" : "LOST CITY", "loc" : [ -78.822684, 38.895361 ], "pop" : 190, "state" : "WV" } +{ "_id" : "26811", "city" : "LOST RIVER", "loc" : [ -78.79317, 38.93448 ], "pop" : 167, "state" : "WV" } +{ "_id" : "26812", "city" : "MATHIAS", "loc" : [ -78.88141299999999, 38.874443 ], "pop" : 1228, "state" : "WV" } +{ "_id" : "26813", "city" : "MOYERS", "loc" : [ -79.383011, 38.500561 ], "pop" : 461, "state" : "WV" } +{ "_id" : "26814", "city" : "RIVERTON", "loc" : [ -79.465531, 38.697871 ], "pop" : 348, "state" : "WV" } +{ "_id" : "26815", "city" : "SUGAR GROVE", "loc" : [ -79.290329, 38.52011 ], "pop" : 512, "state" : "WV" } +{ "_id" : "26816", "city" : "ARTHUR", "loc" : [ -79.099576, 39.101237 ], "pop" : 581, "state" : "WV" } +{ "_id" : "26817", "city" : "BLOOMERY", "loc" : [ -78.381561, 39.328606 ], "pop" : 675, "state" : "WV" } +{ "_id" : "26818", "city" : "FISHER", "loc" : [ -78.988756, 39.04796 ], "pop" : 1, "state" : "WV" } +{ "_id" : "26824", "city" : "JUNCTION", "loc" : [ -78.832785, 39.330441 ], "pop" : 200, "state" : "WV" } +{ "_id" : "26833", "city" : "MAYSVILLE", "loc" : [ -79.19370000000001, 39.071174 ], "pop" : 2615, "state" : "WV" } +{ "_id" : "26836", "city" : "RIG", "loc" : [ -78.97793, 39.056812 ], "pop" : 6314, "state" : "WV" } +{ "_id" : "26838", "city" : "MILAM", "loc" : [ -79.072936, 38.812526 ], "pop" : 30, "state" : "WV" } +{ "_id" : "26845", "city" : "OLD FIELDS", "loc" : [ -78.95094400000001, 39.150245 ], "pop" : 120, "state" : "WV" } +{ "_id" : "26847", "city" : "DORCAS", "loc" : [ -79.130701, 38.976602 ], "pop" : 4991, "state" : "WV" } +{ "_id" : "26851", "city" : "WARDENSVILLE", "loc" : [ -78.617457, 39.056238 ], "pop" : 1606, "state" : "WV" } +{ "_id" : "26852", "city" : "PURGITSVILLE", "loc" : [ -78.905951, 39.268065 ], "pop" : 672, "state" : "WV" } +{ "_id" : "26855", "city" : "CABINS", "loc" : [ -79.27833200000001, 38.951199 ], "pop" : 95, "state" : "WV" } +{ "_id" : "26865", "city" : "LEHEW", "loc" : [ -78.494998, 39.183038 ], "pop" : 190, "state" : "WV" } +{ "_id" : "26866", "city" : "UPPER TRACT", "loc" : [ -79.258589, 38.794952 ], "pop" : 1161, "state" : "WV" } +{ "_id" : "26884", "city" : "SENECA ROCKS", "loc" : [ -79.386577, 38.829615 ], "pop" : 840, "state" : "WV" } +{ "_id" : "26886", "city" : "ONEGO", "loc" : [ -79.45070200000001, 38.801718 ], "pop" : 233, "state" : "WV" } +{ "_id" : "27006", "city" : "ADVANCE", "loc" : [ -80.44630100000001, 36.006496 ], "pop" : 3325, "state" : "NC" } +{ "_id" : "27007", "city" : "ARARAT", "loc" : [ -80.608887, 36.386932 ], "pop" : 3101, "state" : "NC" } +{ "_id" : "27009", "city" : "BELEWS CREEK", "loc" : [ -80.09298800000001, 36.226874 ], "pop" : 1556, "state" : "NC" } +{ "_id" : "27011", "city" : "BOONVILLE", "loc" : [ -80.63569, 36.234012 ], "pop" : 262, "state" : "NC" } +{ "_id" : "27012", "city" : "CLEMMONS", "loc" : [ -80.39623, 36.034112 ], "pop" : 12694, "state" : "NC" } +{ "_id" : "27013", "city" : "CLEVELAND", "loc" : [ -80.711254, 35.737397 ], "pop" : 4070, "state" : "NC" } +{ "_id" : "27016", "city" : "DANBURY", "loc" : [ -80.219354, 36.455857 ], "pop" : 1560, "state" : "NC" } +{ "_id" : "27017", "city" : "DOBSON", "loc" : [ -80.710065, 36.369826 ], "pop" : 6092, "state" : "NC" } +{ "_id" : "27018", "city" : "EAST BEND", "loc" : [ -80.52840500000001, 36.203152 ], "pop" : 6140, "state" : "NC" } +{ "_id" : "27019", "city" : "GERMANTON", "loc" : [ -80.225432, 36.272513 ], "pop" : 4428, "state" : "NC" } +{ "_id" : "27020", "city" : "HAMPTONVILLE", "loc" : [ -80.813687, 36.124248 ], "pop" : 4691, "state" : "NC" } +{ "_id" : "27021", "city" : "KING", "loc" : [ -80.355957, 36.295033 ], "pop" : 12631, "state" : "NC" } +{ "_id" : "27022", "city" : "LAWSONVILLE", "loc" : [ -80.210291, 36.513228 ], "pop" : 1550, "state" : "NC" } +{ "_id" : "27023", "city" : "LEWISVILLE", "loc" : [ -80.420638, 36.0967 ], "pop" : 7165, "state" : "NC" } +{ "_id" : "27024", "city" : "LOWGAP", "loc" : [ -80.78886199999999, 36.503041 ], "pop" : 5065, "state" : "NC" } +{ "_id" : "27025", "city" : "MADISON", "loc" : [ -79.96543800000001, 36.369507 ], "pop" : 10393, "state" : "NC" } +{ "_id" : "27027", "city" : "MAYODAN", "loc" : [ -79.95674200000001, 36.427677 ], "pop" : 6545, "state" : "NC" } +{ "_id" : "27028", "city" : "MOCKSVILLE", "loc" : [ -80.536965, 35.922007 ], "pop" : 24999, "state" : "NC" } +{ "_id" : "27030", "city" : "MOUNT AIRY", "loc" : [ -80.61187099999999, 36.500739 ], "pop" : 29155, "state" : "NC" } +{ "_id" : "27040", "city" : "PFAFFTOWN", "loc" : [ -80.37982599999999, 36.166914 ], "pop" : 8160, "state" : "NC" } +{ "_id" : "27041", "city" : "PILOT MOUNTAIN", "loc" : [ -80.492065, 36.41094 ], "pop" : 7058, "state" : "NC" } +{ "_id" : "27042", "city" : "PINE HALL", "loc" : [ -80.049533, 36.348178 ], "pop" : 377, "state" : "NC" } +{ "_id" : "27043", "city" : "PINNACLE", "loc" : [ -80.439111, 36.333905 ], "pop" : 4275, "state" : "NC" } +{ "_id" : "27045", "city" : "RURAL HALL", "loc" : [ -80.293643, 36.229251 ], "pop" : 6635, "state" : "NC" } +{ "_id" : "27046", "city" : "SANDY RIDGE", "loc" : [ -80.085857, 36.489973 ], "pop" : 1580, "state" : "NC" } +{ "_id" : "27047", "city" : "SILOAM", "loc" : [ -80.577162, 36.300208 ], "pop" : 524, "state" : "NC" } +{ "_id" : "27048", "city" : "STONEVILLE", "loc" : [ -79.901297, 36.470483 ], "pop" : 4166, "state" : "NC" } +{ "_id" : "27050", "city" : "TOBACCOVILLE", "loc" : [ -80.391549, 36.233627 ], "pop" : 2697, "state" : "NC" } +{ "_id" : "27051", "city" : "WALKERTOWN", "loc" : [ -80.162865, 36.179999 ], "pop" : 6199, "state" : "NC" } +{ "_id" : "27052", "city" : "WALNUT COVE", "loc" : [ -80.148414, 36.318872 ], "pop" : 9048, "state" : "NC" } +{ "_id" : "27053", "city" : "WESTFIELD", "loc" : [ -80.367739, 36.467405 ], "pop" : 3500, "state" : "NC" } +{ "_id" : "27054", "city" : "WOODLEAF", "loc" : [ -80.60394100000001, 35.787564 ], "pop" : 2735, "state" : "NC" } +{ "_id" : "27055", "city" : "YADKINVILLE", "loc" : [ -80.65302, 36.127694 ], "pop" : 11978, "state" : "NC" } +{ "_id" : "27101", "city" : "WINSTON SALEM", "loc" : [ -80.222798, 36.10237 ], "pop" : 19333, "state" : "NC" } +{ "_id" : "27103", "city" : "WINSTON SALEM", "loc" : [ -80.302509, 36.067127 ], "pop" : 24299, "state" : "NC" } +{ "_id" : "27104", "city" : "WINSTON SALEM", "loc" : [ -80.322423, 36.091985 ], "pop" : 23677, "state" : "NC" } +{ "_id" : "27105", "city" : "WINSTON SALEM", "loc" : [ -80.237646, 36.144039 ], "pop" : 40194, "state" : "NC" } +{ "_id" : "27106", "city" : "WINSTON SALEM", "loc" : [ -80.306866, 36.142762 ], "pop" : 35209, "state" : "NC" } +{ "_id" : "27107", "city" : "WINSTON SALEM", "loc" : [ -80.193265, 36.040324 ], "pop" : 33085, "state" : "NC" } +{ "_id" : "27127", "city" : "WINSTON SALEM", "loc" : [ -80.260946, 36.042534 ], "pop" : 20784, "state" : "NC" } +{ "_id" : "27203", "city" : "FARMER", "loc" : [ -79.819678, 35.693496 ], "pop" : 41541, "state" : "NC" } +{ "_id" : "27207", "city" : "BEAR CREEK", "loc" : [ -79.372606, 35.612882 ], "pop" : 3894, "state" : "NC" } +{ "_id" : "27208", "city" : "BENNETT", "loc" : [ -79.522524, 35.567269 ], "pop" : 1218, "state" : "NC" } +{ "_id" : "27209", "city" : "BISCOE", "loc" : [ -79.75955500000001, 35.325654 ], "pop" : 3528, "state" : "NC" } +{ "_id" : "27212", "city" : "BLANCH", "loc" : [ -79.304185, 36.533839 ], "pop" : 94, "state" : "NC" } +{ "_id" : "27214", "city" : "BROWNS SUMMIT", "loc" : [ -79.71008, 36.201868 ], "pop" : 5688, "state" : "NC" } +{ "_id" : "27215", "city" : "GLEN RAVEN", "loc" : [ -79.462152, 36.072011 ], "pop" : 29107, "state" : "NC" } +{ "_id" : "27217", "city" : "BURLINGTON", "loc" : [ -79.411447, 36.1288 ], "pop" : 30651, "state" : "NC" } +{ "_id" : "27229", "city" : "CANDOR", "loc" : [ -79.787623, 35.22335 ], "pop" : 967, "state" : "NC" } +{ "_id" : "27231", "city" : "CEDAR GROVE", "loc" : [ -79.166588, 36.201986 ], "pop" : 1594, "state" : "NC" } +{ "_id" : "27233", "city" : "CLIMAX", "loc" : [ -79.701858, 35.934512 ], "pop" : 1085, "state" : "NC" } +{ "_id" : "27235", "city" : "COLFAX", "loc" : [ -80.010276, 36.100272 ], "pop" : 1983, "state" : "NC" } +{ "_id" : "27239", "city" : "DENTON", "loc" : [ -80.09592600000001, 35.619567 ], "pop" : 7102, "state" : "NC" } +{ "_id" : "27242", "city" : "EAGLE SPRINGS", "loc" : [ -79.630983, 35.335957 ], "pop" : 1742, "state" : "NC" } +{ "_id" : "27243", "city" : "EFLAND", "loc" : [ -79.18841500000001, 36.091166 ], "pop" : 2661, "state" : "NC" } +{ "_id" : "27244", "city" : "ELON COLLEGE", "loc" : [ -79.502334, 36.146638 ], "pop" : 10269, "state" : "NC" } +{ "_id" : "27248", "city" : "FRANKLINVILLE", "loc" : [ -79.713178, 35.791739 ], "pop" : 4613, "state" : "NC" } +{ "_id" : "27249", "city" : "GIBSONVILLE", "loc" : [ -79.568454, 36.118304 ], "pop" : 8409, "state" : "NC" } +{ "_id" : "27252", "city" : "GOLDSTON", "loc" : [ -79.33852, 35.56428 ], "pop" : 1814, "state" : "NC" } +{ "_id" : "27253", "city" : "GRAHAM", "loc" : [ -79.381384, 36.030967 ], "pop" : 19723, "state" : "NC" } +{ "_id" : "27258", "city" : "HAW RIVER", "loc" : [ -79.334557, 36.055085 ], "pop" : 4964, "state" : "NC" } +{ "_id" : "27260", "city" : "HIGH POINT", "loc" : [ -80.011673, 35.959313 ], "pop" : 36887, "state" : "NC" } +{ "_id" : "27262", "city" : "HIGH POINT", "loc" : [ -80.010677, 35.973406 ], "pop" : 11401, "state" : "NC" } +{ "_id" : "27263", "city" : "ARCHDALE", "loc" : [ -79.961764, 35.910757 ], "pop" : 17140, "state" : "NC" } +{ "_id" : "27265", "city" : "HIGH POINT", "loc" : [ -80.00357099999999, 36.003584 ], "pop" : 22310, "state" : "NC" } +{ "_id" : "27278", "city" : "HILLSBOROUGH", "loc" : [ -79.091416, 36.07558 ], "pop" : 15811, "state" : "NC" } +{ "_id" : "27281", "city" : "JACKSON SPRINGS", "loc" : [ -79.66853500000001, 35.225941 ], "pop" : 2167, "state" : "NC" } +{ "_id" : "27282", "city" : "JAMESTOWN", "loc" : [ -79.929286, 35.998993 ], "pop" : 9812, "state" : "NC" } +{ "_id" : "27283", "city" : "JULIAN", "loc" : [ -79.63862899999999, 35.95429 ], "pop" : 2894, "state" : "NC" } +{ "_id" : "27284", "city" : "KERNERSVILLE", "loc" : [ -80.08311500000001, 36.116534 ], "pop" : 34795, "state" : "NC" } +{ "_id" : "27288", "city" : "EDEN", "loc" : [ -79.75899800000001, 36.500003 ], "pop" : 26675, "state" : "NC" } +{ "_id" : "27291", "city" : "LEASBURG", "loc" : [ -79.194188, 36.415113 ], "pop" : 2700, "state" : "NC" } +{ "_id" : "27292", "city" : "LEXINGTON", "loc" : [ -80.262049, 35.82306 ], "pop" : 69179, "state" : "NC" } +{ "_id" : "27298", "city" : "LIBERTY", "loc" : [ -79.582144, 35.872878 ], "pop" : 7303, "state" : "NC" } +{ "_id" : "27299", "city" : "LINWOOD", "loc" : [ -80.374895, 35.75623 ], "pop" : 2823, "state" : "NC" } +{ "_id" : "27301", "city" : "MC LEANSVILLE", "loc" : [ -79.66838799999999, 36.116291 ], "pop" : 5200, "state" : "NC" } +{ "_id" : "27302", "city" : "MEBANE", "loc" : [ -79.271895, 36.097862 ], "pop" : 14650, "state" : "NC" } +{ "_id" : "27305", "city" : "MILTON", "loc" : [ -79.208699, 36.515784 ], "pop" : 1383, "state" : "NC" } +{ "_id" : "27306", "city" : "MOUNT GILEAD", "loc" : [ -79.98708999999999, 35.227447 ], "pop" : 5829, "state" : "NC" } +{ "_id" : "27310", "city" : "OAK RIDGE", "loc" : [ -79.980366, 36.167315 ], "pop" : 2231, "state" : "NC" } +{ "_id" : "27311", "city" : "PELHAM", "loc" : [ -79.47360500000001, 36.489912 ], "pop" : 3964, "state" : "NC" } +{ "_id" : "27312", "city" : "PITTSBORO", "loc" : [ -79.17550900000001, 35.769436 ], "pop" : 10601, "state" : "NC" } +{ "_id" : "27313", "city" : "PLEASANT GARDEN", "loc" : [ -79.754943, 35.952243 ], "pop" : 4064, "state" : "NC" } +{ "_id" : "27314", "city" : "PROSPECT HILL", "loc" : [ -79.215644, 36.293195 ], "pop" : 1116, "state" : "NC" } +{ "_id" : "27315", "city" : "PROVIDENCE", "loc" : [ -79.36306, 36.48314 ], "pop" : 3462, "state" : "NC" } +{ "_id" : "27316", "city" : "COLERIDGE", "loc" : [ -79.63510100000001, 35.708349 ], "pop" : 5238, "state" : "NC" } +{ "_id" : "27317", "city" : "RANDLEMAN", "loc" : [ -79.801794, 35.848805 ], "pop" : 14220, "state" : "NC" } +{ "_id" : "27320", "city" : "REIDSVILLE", "loc" : [ -79.66421200000001, 36.343209 ], "pop" : 34283, "state" : "NC" } +{ "_id" : "27325", "city" : "ROBBINS", "loc" : [ -79.58203399999999, 35.452839 ], "pop" : 6383, "state" : "NC" } +{ "_id" : "27326", "city" : "RUFFIN", "loc" : [ -79.560551, 36.442763 ], "pop" : 4138, "state" : "NC" } +{ "_id" : "27330", "city" : "COLON", "loc" : [ -79.176446, 35.464148 ], "pop" : 39537, "state" : "NC" } +{ "_id" : "27341", "city" : "SEAGROVE", "loc" : [ -79.69786999999999, 35.528309 ], "pop" : 4656, "state" : "NC" } +{ "_id" : "27343", "city" : "SEMORA", "loc" : [ -79.094168, 36.511414 ], "pop" : 1214, "state" : "NC" } +{ "_id" : "27344", "city" : "SILER CITY", "loc" : [ -79.45662400000001, 35.735392 ], "pop" : 12298, "state" : "NC" } +{ "_id" : "27349", "city" : "SNOW CAMP", "loc" : [ -79.427893, 35.906583 ], "pop" : 3424, "state" : "NC" } +{ "_id" : "27350", "city" : "SOPHIA", "loc" : [ -79.898634, 35.829845 ], "pop" : 4165, "state" : "NC" } +{ "_id" : "27355", "city" : "STALEY", "loc" : [ -79.584391, 35.801485 ], "pop" : 1747, "state" : "NC" } +{ "_id" : "27356", "city" : "STAR", "loc" : [ -79.782607, 35.421113 ], "pop" : 3077, "state" : "NC" } +{ "_id" : "27357", "city" : "STOKESDALE", "loc" : [ -79.970528, 36.255217 ], "pop" : 3807, "state" : "NC" } +{ "_id" : "27358", "city" : "SUMMERFIELD", "loc" : [ -79.890136, 36.224454 ], "pop" : 5937, "state" : "NC" } +{ "_id" : "27360", "city" : "THOMASVILLE", "loc" : [ -80.09128, 35.87128 ], "pop" : 32777, "state" : "NC" } +{ "_id" : "27370", "city" : "TRINITY", "loc" : [ -79.990206, 35.842949 ], "pop" : 14290, "state" : "NC" } +{ "_id" : "27371", "city" : "TROY", "loc" : [ -79.909252, 35.377702 ], "pop" : 9536, "state" : "NC" } +{ "_id" : "27376", "city" : "WEST END", "loc" : [ -79.53598, 35.251239 ], "pop" : 5480, "state" : "NC" } +{ "_id" : "27377", "city" : "WHITSETT", "loc" : [ -79.597151, 36.032981 ], "pop" : 2345, "state" : "NC" } +{ "_id" : "27379", "city" : "YANCEYVILLE", "loc" : [ -79.346485, 36.390695 ], "pop" : 3011, "state" : "NC" } +{ "_id" : "27401", "city" : "GREENSBORO", "loc" : [ -79.768151, 36.069741 ], "pop" : 19389, "state" : "NC" } +{ "_id" : "27403", "city" : "GREENSBORO", "loc" : [ -79.82018100000001, 36.064147 ], "pop" : 21666, "state" : "NC" } +{ "_id" : "27405", "city" : "GREENSBORO", "loc" : [ -79.77330000000001, 36.121408 ], "pop" : 46387, "state" : "NC" } +{ "_id" : "27406", "city" : "GREENSBORO", "loc" : [ -79.78205800000001, 36.021969 ], "pop" : 45221, "state" : "NC" } +{ "_id" : "27407", "city" : "GREENSBORO", "loc" : [ -79.862647, 36.033442 ], "pop" : 29591, "state" : "NC" } +{ "_id" : "27408", "city" : "GREENSBORO", "loc" : [ -79.816531, 36.1064 ], "pop" : 19970, "state" : "NC" } +{ "_id" : "27409", "city" : "GREENSBORO", "loc" : [ -79.908602, 36.077683 ], "pop" : 8734, "state" : "NC" } +{ "_id" : "27410", "city" : "GREENSBORO", "loc" : [ -79.87936500000001, 36.103164 ], "pop" : 33819, "state" : "NC" } +{ "_id" : "27501", "city" : "ANGIER", "loc" : [ -78.724931, 35.489725 ], "pop" : 6349, "state" : "NC" } +{ "_id" : "27502", "city" : "APEX", "loc" : [ -78.840816, 35.722504 ], "pop" : 19391, "state" : "NC" } +{ "_id" : "27503", "city" : "BAHAMA", "loc" : [ -78.89028399999999, 36.156581 ], "pop" : 3276, "state" : "NC" } +{ "_id" : "27504", "city" : "BENSON", "loc" : [ -78.54213, 35.403661 ], "pop" : 9995, "state" : "NC" } +{ "_id" : "27505", "city" : "BROADWAY", "loc" : [ -79.043547, 35.418088 ], "pop" : 5551, "state" : "NC" } +{ "_id" : "27507", "city" : "BULLOCK", "loc" : [ -78.56458000000001, 36.507642 ], "pop" : 1423, "state" : "NC" } +{ "_id" : "27509", "city" : "BUTNER", "loc" : [ -78.7636, 36.135939 ], "pop" : 6310, "state" : "NC" } +{ "_id" : "27510", "city" : "CARRBORO", "loc" : [ -79.08183200000001, 35.912409 ], "pop" : 10049, "state" : "NC" } +{ "_id" : "27511", "city" : "CARY", "loc" : [ -78.77856800000001, 35.764119 ], "pop" : 31040, "state" : "NC" } +{ "_id" : "27513", "city" : "CARY", "loc" : [ -78.794061, 35.795642 ], "pop" : 15082, "state" : "NC" } +{ "_id" : "27514", "city" : "CHAPEL HILL", "loc" : [ -79.037189, 35.920322 ], "pop" : 39733, "state" : "NC" } +{ "_id" : "27516", "city" : "CHAPEL HILL", "loc" : [ -79.099867, 35.916175 ], "pop" : 21377, "state" : "NC" } +{ "_id" : "27520", "city" : "CLAYTON", "loc" : [ -78.451013, 35.63484 ], "pop" : 15067, "state" : "NC" } +{ "_id" : "27521", "city" : "COATS", "loc" : [ -78.66270400000001, 35.40822 ], "pop" : 4437, "state" : "NC" } +{ "_id" : "27522", "city" : "CREEDMOOR", "loc" : [ -78.647587, 36.112433 ], "pop" : 7620, "state" : "NC" } +{ "_id" : "27524", "city" : "FOUR OAKS", "loc" : [ -78.415282, 35.404017 ], "pop" : 9270, "state" : "NC" } +{ "_id" : "27525", "city" : "FRANKLINTON", "loc" : [ -78.448618, 36.095505 ], "pop" : 8242, "state" : "NC" } +{ "_id" : "27526", "city" : "FUQUAY VARINA", "loc" : [ -78.790807, 35.579952 ], "pop" : 16537, "state" : "NC" } +{ "_id" : "27529", "city" : "GARNER", "loc" : [ -78.597527, 35.681254 ], "pop" : 21063, "state" : "NC" } +{ "_id" : "27530", "city" : "GRANTHAM", "loc" : [ -78.01581299999999, 35.382585 ], "pop" : 37791, "state" : "NC" } +{ "_id" : "27531", "city" : "SEYMOUR JOHNSON", "loc" : [ -77.96431200000001, 35.352611 ], "pop" : 4747, "state" : "NC" } +{ "_id" : "27534", "city" : "GOLDSBORO", "loc" : [ -77.92206899999999, 35.36643 ], "pop" : 31892, "state" : "NC" } +{ "_id" : "27536", "city" : "HENDERSON", "loc" : [ -78.39808600000001, 36.330068 ], "pop" : 36983, "state" : "NC" } +{ "_id" : "27540", "city" : "HOLLY SPRINGS", "loc" : [ -78.845816, 35.626263 ], "pop" : 2282, "state" : "NC" } +{ "_id" : "27541", "city" : "HURDLE MILLS", "loc" : [ -79.08266, 36.251788 ], "pop" : 2773, "state" : "NC" } +{ "_id" : "27542", "city" : "KENLY", "loc" : [ -78.138227, 35.607742 ], "pop" : 6729, "state" : "NC" } +{ "_id" : "27544", "city" : "KITTRELL", "loc" : [ -78.42407300000001, 36.204175 ], "pop" : 2967, "state" : "NC" } +{ "_id" : "27545", "city" : "KNIGHTDALE", "loc" : [ -78.489814, 35.778926 ], "pop" : 11525, "state" : "NC" } +{ "_id" : "27546", "city" : "LILLINGTON", "loc" : [ -78.921223, 35.331954 ], "pop" : 23302, "state" : "NC" } +{ "_id" : "27549", "city" : "LOUISBURG", "loc" : [ -78.25862499999999, 36.05781 ], "pop" : 20285, "state" : "NC" } +{ "_id" : "27551", "city" : "MACON", "loc" : [ -77.99870900000001, 36.444697 ], "pop" : 4044, "state" : "NC" } +{ "_id" : "27553", "city" : "MANSON", "loc" : [ -78.29525, 36.460264 ], "pop" : 1976, "state" : "NC" } +{ "_id" : "27557", "city" : "MIDDLESEX", "loc" : [ -78.20616200000001, 35.766499 ], "pop" : 4318, "state" : "NC" } +{ "_id" : "27559", "city" : "MONCURE", "loc" : [ -79.083915, 35.630615 ], "pop" : 2695, "state" : "NC" } +{ "_id" : "27560", "city" : "MORRISVILLE", "loc" : [ -78.846594, 35.834371 ], "pop" : 3922, "state" : "NC" } +{ "_id" : "27562", "city" : "NEW HILL", "loc" : [ -78.93653399999999, 35.680877 ], "pop" : 991, "state" : "NC" } +{ "_id" : "27563", "city" : "NORLINA", "loc" : [ -78.189455, 36.475364 ], "pop" : 3605, "state" : "NC" } +{ "_id" : "27565", "city" : "OXFORD", "loc" : [ -78.613433, 36.331269 ], "pop" : 20568, "state" : "NC" } +{ "_id" : "27569", "city" : "PRINCETON", "loc" : [ -78.167368, 35.455833 ], "pop" : 5378, "state" : "NC" } +{ "_id" : "27571", "city" : "ROLESVILLE", "loc" : [ -78.46584300000001, 35.915575 ], "pop" : 3975, "state" : "NC" } +{ "_id" : "27572", "city" : "ROUGEMONT", "loc" : [ -78.901867, 36.239251 ], "pop" : 4253, "state" : "NC" } +{ "_id" : "27573", "city" : "ROXBORO", "loc" : [ -78.973698, 36.405902 ], "pop" : 22321, "state" : "NC" } +{ "_id" : "27576", "city" : "SELMA", "loc" : [ -78.264025, 35.556531 ], "pop" : 13335, "state" : "NC" } +{ "_id" : "27577", "city" : "SMITHFIELD", "loc" : [ -78.347866, 35.50684 ], "pop" : 15031, "state" : "NC" } +{ "_id" : "27581", "city" : "STEM", "loc" : [ -78.70012, 36.21004 ], "pop" : 2421, "state" : "NC" } +{ "_id" : "27583", "city" : "TIMBERLAKE", "loc" : [ -78.935287, 36.291763 ], "pop" : 3424, "state" : "NC" } +{ "_id" : "27587", "city" : "WAKE FOREST", "loc" : [ -78.539213, 35.981544 ], "pop" : 11878, "state" : "NC" } +{ "_id" : "27589", "city" : "WARRENTON", "loc" : [ -78.159389, 36.353944 ], "pop" : 8240, "state" : "NC" } +{ "_id" : "27591", "city" : "WENDELL", "loc" : [ -78.392601, 35.797964 ], "pop" : 12418, "state" : "NC" } +{ "_id" : "27592", "city" : "WILLOW SPRING", "loc" : [ -78.671738, 35.547031 ], "pop" : 4672, "state" : "NC" } +{ "_id" : "27596", "city" : "YOUNGSVILLE", "loc" : [ -78.441198, 36.007782 ], "pop" : 4549, "state" : "NC" } +{ "_id" : "27597", "city" : "ZEBULON", "loc" : [ -78.317368, 35.832078 ], "pop" : 10153, "state" : "NC" } +{ "_id" : "27601", "city" : "RALEIGH", "loc" : [ -78.63243900000001, 35.772701 ], "pop" : 9810, "state" : "NC" } +{ "_id" : "27603", "city" : "RALEIGH", "loc" : [ -78.656265, 35.707569 ], "pop" : 25366, "state" : "NC" } +{ "_id" : "27604", "city" : "RALEIGH", "loc" : [ -78.579949, 35.833407 ], "pop" : 35217, "state" : "NC" } +{ "_id" : "27605", "city" : "RALEIGH", "loc" : [ -78.653025, 35.790795 ], "pop" : 4169, "state" : "NC" } +{ "_id" : "27606", "city" : "RALEIGH", "loc" : [ -78.711189, 35.764499 ], "pop" : 29446, "state" : "NC" } +{ "_id" : "27607", "city" : "RALEIGH", "loc" : [ -78.687747, 35.801385 ], "pop" : 19515, "state" : "NC" } +{ "_id" : "27608", "city" : "RALEIGH", "loc" : [ -78.646277, 35.807746 ], "pop" : 10130, "state" : "NC" } +{ "_id" : "27609", "city" : "RALEIGH", "loc" : [ -78.631654, 35.847989 ], "pop" : 29872, "state" : "NC" } +{ "_id" : "27610", "city" : "RALEIGH", "loc" : [ -78.60075999999999, 35.766674 ], "pop" : 32494, "state" : "NC" } +{ "_id" : "27612", "city" : "RALEIGH", "loc" : [ -78.684119, 35.851997 ], "pop" : 20962, "state" : "NC" } +{ "_id" : "27613", "city" : "RALEIGH", "loc" : [ -78.70505900000001, 35.894932 ], "pop" : 19518, "state" : "NC" } +{ "_id" : "27614", "city" : "RALEIGH", "loc" : [ -78.643339, 35.945711 ], "pop" : 7200, "state" : "NC" } +{ "_id" : "27615", "city" : "RALEIGH", "loc" : [ -78.63927700000001, 35.888744 ], "pop" : 29771, "state" : "NC" } +{ "_id" : "27701", "city" : "DURHAM", "loc" : [ -78.896613, 35.996725 ], "pop" : 20284, "state" : "NC" } +{ "_id" : "27703", "city" : "DURHAM", "loc" : [ -78.843874, 35.978122 ], "pop" : 24362, "state" : "NC" } +{ "_id" : "27704", "city" : "DURHAM", "loc" : [ -78.876437, 36.038297 ], "pop" : 23460, "state" : "NC" } +{ "_id" : "27705", "city" : "DURHAM", "loc" : [ -78.947776, 36.021846 ], "pop" : 32916, "state" : "NC" } +{ "_id" : "27706", "city" : "DURHAM", "loc" : [ -78.937524, 36.002427 ], "pop" : 4790, "state" : "NC" } +{ "_id" : "27707", "city" : "DURHAM", "loc" : [ -78.931484, 35.963076 ], "pop" : 36264, "state" : "NC" } +{ "_id" : "27712", "city" : "DURHAM", "loc" : [ -78.929919, 36.091779 ], "pop" : 15138, "state" : "NC" } +{ "_id" : "27713", "city" : "RESEARCH TRIANGL", "loc" : [ -78.916641, 35.916105 ], "pop" : 19493, "state" : "NC" } +{ "_id" : "27801", "city" : "ROCKY MOUNT", "loc" : [ -77.76081600000001, 35.94265 ], "pop" : 25072, "state" : "NC" } +{ "_id" : "27803", "city" : "ROCKY MOUNT", "loc" : [ -77.835022, 35.923784 ], "pop" : 20416, "state" : "NC" } +{ "_id" : "27804", "city" : "WESLEYAN COLLEGE", "loc" : [ -77.82754300000001, 35.979634 ], "pop" : 24367, "state" : "NC" } +{ "_id" : "27805", "city" : "AULANDER", "loc" : [ -77.114086, 36.147452 ], "pop" : 4880, "state" : "NC" } +{ "_id" : "27806", "city" : "AURORA", "loc" : [ -76.799448, 35.302282 ], "pop" : 2957, "state" : "NC" } +{ "_id" : "27807", "city" : "BAILEY", "loc" : [ -78.089226, 35.807167 ], "pop" : 4399, "state" : "NC" } +{ "_id" : "27808", "city" : "BATH", "loc" : [ -76.771531, 35.470161 ], "pop" : 1915, "state" : "NC" } +{ "_id" : "27809", "city" : "BATTLEBORO", "loc" : [ -77.431107, 35.84387 ], "pop" : 808, "state" : "NC" } +{ "_id" : "27810", "city" : "BELHAVEN", "loc" : [ -76.623574, 35.520493 ], "pop" : 4130, "state" : "NC" } +{ "_id" : "27812", "city" : "BETHEL", "loc" : [ -77.374765, 35.790885 ], "pop" : 3116, "state" : "NC" } +{ "_id" : "27814", "city" : "BLOUNTS CREEK", "loc" : [ -76.925004, 35.382029 ], "pop" : 1272, "state" : "NC" } +{ "_id" : "27816", "city" : "CASTALIA", "loc" : [ -78.070452, 36.090124 ], "pop" : 2623, "state" : "NC" } +{ "_id" : "27817", "city" : "CHOCOWINITY", "loc" : [ -77.08680099999999, 35.481409 ], "pop" : 5553, "state" : "NC" } +{ "_id" : "27818", "city" : "COMO", "loc" : [ -77.051526, 36.497818 ], "pop" : 1484, "state" : "NC" } +{ "_id" : "27820", "city" : "CONWAY", "loc" : [ -77.250243, 36.416382 ], "pop" : 3474, "state" : "NC" } +{ "_id" : "27821", "city" : "EDWARD", "loc" : [ -76.87938800000001, 35.323588 ], "pop" : 122, "state" : "NC" } +{ "_id" : "27822", "city" : "ELM CITY", "loc" : [ -77.856032, 35.810954 ], "pop" : 8507, "state" : "NC" } +{ "_id" : "27823", "city" : "ENFIELD", "loc" : [ -77.712907, 36.197331 ], "pop" : 8876, "state" : "NC" } +{ "_id" : "27824", "city" : "MIDDLETOWN", "loc" : [ -76.037434, 35.49806 ], "pop" : 1822, "state" : "NC" } +{ "_id" : "27826", "city" : "FAIRFIELD", "loc" : [ -76.231768, 35.565873 ], "pop" : 585, "state" : "NC" } +{ "_id" : "27828", "city" : "FARMVILLE", "loc" : [ -77.579303, 35.580606 ], "pop" : 8260, "state" : "NC" } +{ "_id" : "27829", "city" : "FOUNTAIN", "loc" : [ -77.621448, 35.669436 ], "pop" : 1419, "state" : "NC" } +{ "_id" : "27830", "city" : "EUREKA", "loc" : [ -77.996302, 35.518558 ], "pop" : 6803, "state" : "NC" } +{ "_id" : "27831", "city" : "GARYSBURG", "loc" : [ -77.571905, 36.476147 ], "pop" : 2824, "state" : "NC" } +{ "_id" : "27832", "city" : "GASTON", "loc" : [ -77.682379, 36.51153 ], "pop" : 2560, "state" : "NC" } +{ "_id" : "27834", "city" : "GREENVILLE", "loc" : [ -77.397542, 35.619221 ], "pop" : 35377, "state" : "NC" } +{ "_id" : "27837", "city" : "GRIMESLAND", "loc" : [ -77.256612, 35.558005 ], "pop" : 6998, "state" : "NC" } +{ "_id" : "27839", "city" : "HALIFAX", "loc" : [ -77.56072500000001, 36.30492 ], "pop" : 4264, "state" : "NC" } +{ "_id" : "27840", "city" : "HAMILTON", "loc" : [ -77.21762, 35.944119 ], "pop" : 1060, "state" : "NC" } +{ "_id" : "27842", "city" : "HENRICO", "loc" : [ -77.854625, 36.527409 ], "pop" : 800, "state" : "NC" } +{ "_id" : "27843", "city" : "HOBGOOD", "loc" : [ -77.436959, 36.004281 ], "pop" : 2408, "state" : "NC" } +{ "_id" : "27844", "city" : "HOLLISTER", "loc" : [ -77.931916, 36.25898 ], "pop" : 2691, "state" : "NC" } +{ "_id" : "27845", "city" : "JACKSON", "loc" : [ -77.468144, 36.386984 ], "pop" : 2703, "state" : "NC" } +{ "_id" : "27846", "city" : "JAMESVILLE", "loc" : [ -76.898332, 35.78385 ], "pop" : 3141, "state" : "NC" } +{ "_id" : "27847", "city" : "KELFORD", "loc" : [ -77.259214, 36.199173 ], "pop" : 150, "state" : "NC" } +{ "_id" : "27848", "city" : "LASKER", "loc" : [ -77.348266, 36.376664 ], "pop" : 80, "state" : "NC" } +{ "_id" : "27849", "city" : "LEWISTON WOODVIL", "loc" : [ -77.206631, 36.134416 ], "pop" : 634, "state" : "NC" } +{ "_id" : "27850", "city" : "LITTLETON", "loc" : [ -77.85281500000001, 36.416877 ], "pop" : 4388, "state" : "NC" } +{ "_id" : "27851", "city" : "LUCAMA", "loc" : [ -78.019687, 35.641504 ], "pop" : 4537, "state" : "NC" } +{ "_id" : "27852", "city" : "CRISP", "loc" : [ -77.596442, 35.773741 ], "pop" : 4145, "state" : "NC" } +{ "_id" : "27853", "city" : "MARGARETTSVILLE", "loc" : [ -77.325997, 36.524494 ], "pop" : 289, "state" : "NC" } +{ "_id" : "27855", "city" : "MURFREESBORO", "loc" : [ -77.10269599999999, 36.43192 ], "pop" : 6186, "state" : "NC" } +{ "_id" : "27856", "city" : "NASHVILLE", "loc" : [ -77.959485, 35.98428 ], "pop" : 12069, "state" : "NC" } +{ "_id" : "27857", "city" : "OAK CITY", "loc" : [ -77.30036200000001, 35.959736 ], "pop" : 2268, "state" : "NC" } +{ "_id" : "27858", "city" : "GREENVILLE", "loc" : [ -77.348505, 35.586567 ], "pop" : 31246, "state" : "NC" } +{ "_id" : "27859", "city" : "PALMYRA", "loc" : [ -77.364288, 36.106268 ], "pop" : 344, "state" : "NC" } +{ "_id" : "27860", "city" : "PANTEGO", "loc" : [ -76.698848, 35.620058 ], "pop" : 1915, "state" : "NC" } +{ "_id" : "27862", "city" : "PENDLETON", "loc" : [ -77.191112, 36.493676 ], "pop" : 1127, "state" : "NC" } +{ "_id" : "27863", "city" : "PIKEVILLE", "loc" : [ -77.957787, 35.49289 ], "pop" : 1968, "state" : "NC" } +{ "_id" : "27864", "city" : "PINETOPS", "loc" : [ -77.691952, 35.819611 ], "pop" : 5935, "state" : "NC" } +{ "_id" : "27865", "city" : "PINETOWN", "loc" : [ -76.807565, 35.57576 ], "pop" : 1829, "state" : "NC" } +{ "_id" : "27866", "city" : "PLEASANT HILL", "loc" : [ -77.519217, 36.521246 ], "pop" : 639, "state" : "NC" } +{ "_id" : "27869", "city" : "RICH SQUARE", "loc" : [ -77.296947, 36.277256 ], "pop" : 2621, "state" : "NC" } +{ "_id" : "27870", "city" : "ROANOKE RAPIDS", "loc" : [ -77.67306000000001, 36.446146 ], "pop" : 25628, "state" : "NC" } +{ "_id" : "27871", "city" : "ROBERSONVILLE", "loc" : [ -77.26004, 35.821797 ], "pop" : 4941, "state" : "NC" } +{ "_id" : "27872", "city" : "ROXOBEL", "loc" : [ -77.22706100000001, 36.194464 ], "pop" : 623, "state" : "NC" } +{ "_id" : "27873", "city" : "SARATOGA", "loc" : [ -77.767613, 35.662778 ], "pop" : 1870, "state" : "NC" } +{ "_id" : "27874", "city" : "SCOTLAND NECK", "loc" : [ -77.427274, 36.130141 ], "pop" : 5219, "state" : "NC" } +{ "_id" : "27875", "city" : "SCRANTON", "loc" : [ -76.49170599999999, 35.525039 ], "pop" : 1184, "state" : "NC" } +{ "_id" : "27876", "city" : "SEABOARD", "loc" : [ -77.411306, 36.488552 ], "pop" : 1767, "state" : "NC" } +{ "_id" : "27880", "city" : "SIMS", "loc" : [ -78.085854, 35.74351 ], "pop" : 2214, "state" : "NC" } +{ "_id" : "27882", "city" : "SPRING HOPE", "loc" : [ -78.10850000000001, 35.930193 ], "pop" : 6180, "state" : "NC" } +{ "_id" : "27883", "city" : "STANTONSBURG", "loc" : [ -77.837773, 35.593998 ], "pop" : 2117, "state" : "NC" } +{ "_id" : "27884", "city" : "STOKES", "loc" : [ -77.272178, 35.710402 ], "pop" : 922, "state" : "NC" } +{ "_id" : "27885", "city" : "SWANQUARTER", "loc" : [ -76.287521, 35.422207 ], "pop" : 1203, "state" : "NC" } +{ "_id" : "27886", "city" : "TARBORO", "loc" : [ -77.542067, 35.898257 ], "pop" : 16144, "state" : "NC" } +{ "_id" : "27888", "city" : "WALSTONBURG", "loc" : [ -77.698336, 35.588204 ], "pop" : 2649, "state" : "NC" } +{ "_id" : "27889", "city" : "WASHINGTON", "loc" : [ -77.140356, 35.588392 ], "pop" : 865, "state" : "NC" } +{ "_id" : "27890", "city" : "WELDON", "loc" : [ -77.60346, 36.420643 ], "pop" : 2819, "state" : "NC" } +{ "_id" : "27891", "city" : "WHITAKERS", "loc" : [ -77.71674299999999, 36.075797 ], "pop" : 6281, "state" : "NC" } +{ "_id" : "27892", "city" : "WILLIAMSTON", "loc" : [ -77.048344, 35.660154 ], "pop" : 36648, "state" : "NC" } +{ "_id" : "27893", "city" : "WILSON", "loc" : [ -77.92273299999999, 35.727022 ], "pop" : 47823, "state" : "NC" } +{ "_id" : "27897", "city" : "GEORGE", "loc" : [ -77.197782, 36.320465 ], "pop" : 2164, "state" : "NC" } +{ "_id" : "27909", "city" : "ELIZABETH CITY", "loc" : [ -76.24454799999999, 36.295051 ], "pop" : 31298, "state" : "NC" } +{ "_id" : "27910", "city" : "AHOSKIE", "loc" : [ -76.99663200000001, 36.295737 ], "pop" : 11451, "state" : "NC" } +{ "_id" : "27916", "city" : "AYDLETT", "loc" : [ -75.902914, 36.304469 ], "pop" : 356, "state" : "NC" } +{ "_id" : "27917", "city" : "BARCO", "loc" : [ -75.97928400000001, 36.358778 ], "pop" : 1031, "state" : "NC" } +{ "_id" : "27919", "city" : "BELVIDERE", "loc" : [ -76.543586, 36.309644 ], "pop" : 1614, "state" : "NC" } +{ "_id" : "27921", "city" : "CAMDEN", "loc" : [ -76.150002, 36.324985 ], "pop" : 2439, "state" : "NC" } +{ "_id" : "27922", "city" : "COFIELD", "loc" : [ -76.874568, 36.333316 ], "pop" : 661, "state" : "NC" } +{ "_id" : "27923", "city" : "COINJOCK", "loc" : [ -75.934012, 36.375064 ], "pop" : 434, "state" : "NC" } +{ "_id" : "27924", "city" : "COLERAIN", "loc" : [ -76.854799, 36.190083 ], "pop" : 3709, "state" : "NC" } +{ "_id" : "27925", "city" : "COLUMBIA", "loc" : [ -76.234481, 35.905664 ], "pop" : 3650, "state" : "NC" } +{ "_id" : "27926", "city" : "CORAPEAKE", "loc" : [ -76.597852, 36.517946 ], "pop" : 1377, "state" : "NC" } +{ "_id" : "27927", "city" : "COROLLA", "loc" : [ -75.81321699999999, 36.320646 ], "pop" : 288, "state" : "NC" } +{ "_id" : "27928", "city" : "CRESWELL", "loc" : [ -76.419555, 35.865303 ], "pop" : 2287, "state" : "NC" } +{ "_id" : "27929", "city" : "CURRITUCK", "loc" : [ -75.988399, 36.429691 ], "pop" : 498, "state" : "NC" } +{ "_id" : "27932", "city" : "EDENTON", "loc" : [ -76.622384, 36.090777 ], "pop" : 11572, "state" : "NC" } +{ "_id" : "27935", "city" : "EURE", "loc" : [ -76.846341, 36.434117 ], "pop" : 1346, "state" : "NC" } +{ "_id" : "27937", "city" : "GATES", "loc" : [ -76.764563, 36.503618 ], "pop" : 2598, "state" : "NC" } +{ "_id" : "27938", "city" : "GATESVILLE", "loc" : [ -76.732462, 36.407171 ], "pop" : 1398, "state" : "NC" } +{ "_id" : "27939", "city" : "GRANDY", "loc" : [ -75.876808, 36.233889 ], "pop" : 908, "state" : "NC" } +{ "_id" : "27941", "city" : "HARBINGER", "loc" : [ -75.81214300000001, 36.086392 ], "pop" : 189, "state" : "NC" } +{ "_id" : "27942", "city" : "HARRELLSVILLE", "loc" : [ -76.77667700000001, 36.286586 ], "pop" : 1046, "state" : "NC" } +{ "_id" : "27944", "city" : "DURANTS NECK", "loc" : [ -76.424299, 36.177058 ], "pop" : 9357, "state" : "NC" } +{ "_id" : "27946", "city" : "HOBBSVILLE", "loc" : [ -76.617813, 36.354303 ], "pop" : 722, "state" : "NC" } +{ "_id" : "27947", "city" : "JARVISBURG", "loc" : [ -75.859469, 36.173963 ], "pop" : 653, "state" : "NC" } +{ "_id" : "27948", "city" : "KILL DEVIL HILLS", "loc" : [ -75.67565399999999, 36.008793 ], "pop" : 7870, "state" : "NC" } +{ "_id" : "27949", "city" : "SOUTHERN SHORES", "loc" : [ -75.725373, 36.100694 ], "pop" : 4046, "state" : "NC" } +{ "_id" : "27950", "city" : "KNOTTS ISLAND", "loc" : [ -75.970247, 36.523167 ], "pop" : 1493, "state" : "NC" } +{ "_id" : "27953", "city" : "EAST LAKE", "loc" : [ -75.94440400000001, 35.887191 ], "pop" : 139, "state" : "NC" } +{ "_id" : "27954", "city" : "MANTEO", "loc" : [ -75.671418, 35.894774 ], "pop" : 5726, "state" : "NC" } +{ "_id" : "27956", "city" : "MAPLE", "loc" : [ -76.003874, 36.398686 ], "pop" : 321, "state" : "NC" } +{ "_id" : "27957", "city" : "MERRY HILL", "loc" : [ -76.77755999999999, 36.087121 ], "pop" : 1187, "state" : "NC" } +{ "_id" : "27958", "city" : "MOYOCK", "loc" : [ -76.114575, 36.487094 ], "pop" : 5475, "state" : "NC" } +{ "_id" : "27959", "city" : "NAGS HEAD", "loc" : [ -75.567592, 35.347209 ], "pop" : 4085, "state" : "NC" } +{ "_id" : "27962", "city" : "PLYMOUTH", "loc" : [ -76.74314800000001, 35.850826 ], "pop" : 7951, "state" : "NC" } +{ "_id" : "27964", "city" : "POINT HARBOR", "loc" : [ -75.79828500000001, 36.078114 ], "pop" : 65, "state" : "NC" } +{ "_id" : "27965", "city" : "POPLAR BRANCH", "loc" : [ -75.88301800000001, 36.257028 ], "pop" : 733, "state" : "NC" } +{ "_id" : "27966", "city" : "POWELLS POINT", "loc" : [ -75.827314, 36.120674 ], "pop" : 959, "state" : "NC" } +{ "_id" : "27970", "city" : "ROPER", "loc" : [ -76.580918, 35.899413 ], "pop" : 3869, "state" : "NC" } +{ "_id" : "27973", "city" : "SHAWBORO", "loc" : [ -76.09445100000001, 36.377875 ], "pop" : 333, "state" : "NC" } +{ "_id" : "27974", "city" : "SHILOH", "loc" : [ -76.04316799999999, 36.258449 ], "pop" : 1378, "state" : "NC" } +{ "_id" : "27976", "city" : "SOUTH MILLS", "loc" : [ -76.303284, 36.453576 ], "pop" : 2087, "state" : "NC" } +{ "_id" : "27978", "city" : "STUMPY POINT", "loc" : [ -75.77909, 35.863007 ], "pop" : 880, "state" : "NC" } +{ "_id" : "27979", "city" : "SUNBURY", "loc" : [ -76.609568, 36.431605 ], "pop" : 1711, "state" : "NC" } +{ "_id" : "27980", "city" : "TYNER", "loc" : [ -76.642796, 36.250239 ], "pop" : 1563, "state" : "NC" } +{ "_id" : "27983", "city" : "WINDSOR", "loc" : [ -76.933612, 36.015881 ], "pop" : 9205, "state" : "NC" } +{ "_id" : "27986", "city" : "WINTON", "loc" : [ -76.936007, 36.382616 ], "pop" : 1443, "state" : "NC" } +{ "_id" : "28001", "city" : "ALBEMARLE", "loc" : [ -80.204363, 35.357276 ], "pop" : 26329, "state" : "NC" } +{ "_id" : "28006", "city" : "ALEXIS", "loc" : [ -81.102204, 35.383613 ], "pop" : 4724, "state" : "NC" } +{ "_id" : "28012", "city" : "BELMONT", "loc" : [ -81.044016, 35.244029 ], "pop" : 19504, "state" : "NC" } +{ "_id" : "28016", "city" : "BESSEMER CITY", "loc" : [ -81.28635, 35.284904 ], "pop" : 8858, "state" : "NC" } +{ "_id" : "28018", "city" : "BOSTIC", "loc" : [ -81.81183, 35.453259 ], "pop" : 3094, "state" : "NC" } +{ "_id" : "28020", "city" : "CASAR", "loc" : [ -81.63574199999999, 35.514496 ], "pop" : 1646, "state" : "NC" } +{ "_id" : "28021", "city" : "CHERRYVILLE", "loc" : [ -81.350893, 35.374742 ], "pop" : 16445, "state" : "NC" } +{ "_id" : "28023", "city" : "CHINA GROVE", "loc" : [ -80.59004, 35.5669 ], "pop" : 13040, "state" : "NC" } +{ "_id" : "28025", "city" : "CONCORD", "loc" : [ -80.530027, 35.371614 ], "pop" : 15094, "state" : "NC" } +{ "_id" : "28027", "city" : "CONCORD", "loc" : [ -80.61622699999999, 35.414115 ], "pop" : 39900, "state" : "NC" } +{ "_id" : "28032", "city" : "CRAMERTON", "loc" : [ -81.083061, 35.23965 ], "pop" : 2835, "state" : "NC" } +{ "_id" : "28033", "city" : "CROUSE", "loc" : [ -81.34185100000001, 35.483722 ], "pop" : 5431, "state" : "NC" } +{ "_id" : "28034", "city" : "DALLAS", "loc" : [ -81.1862, 35.334853 ], "pop" : 13328, "state" : "NC" } +{ "_id" : "28036", "city" : "CORNELIUS", "loc" : [ -80.857229, 35.495692 ], "pop" : 7301, "state" : "NC" } +{ "_id" : "28037", "city" : "DENVER", "loc" : [ -80.989785, 35.483677 ], "pop" : 6776, "state" : "NC" } +{ "_id" : "28040", "city" : "ELLENBORO", "loc" : [ -81.770652, 35.334426 ], "pop" : 8287, "state" : "NC" } +{ "_id" : "28043", "city" : "ALEXANDER MILLS", "loc" : [ -81.86424700000001, 35.301753 ], "pop" : 25940, "state" : "NC" } +{ "_id" : "28052", "city" : "GASTONIA", "loc" : [ -81.219449, 35.244917 ], "pop" : 37403, "state" : "NC" } +{ "_id" : "28054", "city" : "GASTONIA", "loc" : [ -81.145409, 35.200537 ], "pop" : 15997, "state" : "NC" } +{ "_id" : "28056", "city" : "GASTONIA", "loc" : [ -81.14962199999999, 35.258331 ], "pop" : 33472, "state" : "NC" } +{ "_id" : "28071", "city" : "GOLD HILL", "loc" : [ -80.334558, 35.549784 ], "pop" : 977, "state" : "NC" } +{ "_id" : "28073", "city" : "GROVER", "loc" : [ -81.45518199999999, 35.183639 ], "pop" : 2011, "state" : "NC" } +{ "_id" : "28075", "city" : "HARRISBURG", "loc" : [ -80.659401, 35.324731 ], "pop" : 8810, "state" : "NC" } +{ "_id" : "28078", "city" : "CORNELIUS", "loc" : [ -80.864664, 35.421992 ], "pop" : 15259, "state" : "NC" } +{ "_id" : "28079", "city" : "INDIAN TRAIL", "loc" : [ -80.65974300000001, 35.08307 ], "pop" : 13274, "state" : "NC" } +{ "_id" : "28080", "city" : "IRON STATION", "loc" : [ -81.10700900000001, 35.465654 ], "pop" : 9616, "state" : "NC" } +{ "_id" : "28081", "city" : "KANNAPOLIS", "loc" : [ -80.635875, 35.502016 ], "pop" : 25583, "state" : "NC" } +{ "_id" : "28083", "city" : "KANNAPOLIS", "loc" : [ -80.601536, 35.484807 ], "pop" : 14113, "state" : "NC" } +{ "_id" : "28086", "city" : "KINGS MOUNTAIN", "loc" : [ -81.380567, 35.251578 ], "pop" : 21012, "state" : "NC" } +{ "_id" : "28088", "city" : "LANDIS", "loc" : [ -80.612926, 35.5435 ], "pop" : 2651, "state" : "NC" } +{ "_id" : "28090", "city" : "LAWNDALE", "loc" : [ -81.533625, 35.444932 ], "pop" : 6842, "state" : "NC" } +{ "_id" : "28091", "city" : "LILESVILLE", "loc" : [ -79.97208000000001, 34.968914 ], "pop" : 2923, "state" : "NC" } +{ "_id" : "28092", "city" : "BOGER CITY", "loc" : [ -81.228039, 35.482138 ], "pop" : 24325, "state" : "NC" } +{ "_id" : "28097", "city" : "LOCUST", "loc" : [ -80.42106099999999, 35.270416 ], "pop" : 3077, "state" : "NC" } +{ "_id" : "28098", "city" : "LOWELL", "loc" : [ -81.096037, 35.265481 ], "pop" : 3424, "state" : "NC" } +{ "_id" : "28103", "city" : "MARSHVILLE", "loc" : [ -80.378113, 35.016684 ], "pop" : 7900, "state" : "NC" } +{ "_id" : "28105", "city" : "STALLINGS", "loc" : [ -80.713568, 35.121879 ], "pop" : 18586, "state" : "NC" } +{ "_id" : "28107", "city" : "MIDLAND", "loc" : [ -80.531853, 35.247724 ], "pop" : 4012, "state" : "NC" } +{ "_id" : "28110", "city" : "MONROE", "loc" : [ -80.53722999999999, 35.017775 ], "pop" : 34880, "state" : "NC" } +{ "_id" : "28112", "city" : "MONROE", "loc" : [ -80.553952, 34.894621 ], "pop" : 9986, "state" : "NC" } +{ "_id" : "28114", "city" : "MOORESBORO", "loc" : [ -81.67217100000001, 35.248389 ], "pop" : 7554, "state" : "NC" } +{ "_id" : "28115", "city" : "MOORESVILLE", "loc" : [ -80.82262900000001, 35.577358 ], "pop" : 28805, "state" : "NC" } +{ "_id" : "28119", "city" : "MORVEN", "loc" : [ -80.002529, 34.85106 ], "pop" : 1808, "state" : "NC" } +{ "_id" : "28120", "city" : "MOUNT HOLLY", "loc" : [ -81.030567, 35.311872 ], "pop" : 14505, "state" : "NC" } +{ "_id" : "28124", "city" : "MOUNT PLEASANT", "loc" : [ -80.417081, 35.414576 ], "pop" : 4640, "state" : "NC" } +{ "_id" : "28125", "city" : "MOUNT ULLA", "loc" : [ -80.72386, 35.638934 ], "pop" : 683, "state" : "NC" } +{ "_id" : "28127", "city" : "NEW LONDON", "loc" : [ -80.205737, 35.428518 ], "pop" : 5156, "state" : "NC" } +{ "_id" : "28128", "city" : "NORWOOD", "loc" : [ -80.14326, 35.227493 ], "pop" : 7069, "state" : "NC" } +{ "_id" : "28129", "city" : "OAKBORO", "loc" : [ -80.341272, 35.245997 ], "pop" : 6336, "state" : "NC" } +{ "_id" : "28133", "city" : "PEACHLAND", "loc" : [ -80.282943, 35.005434 ], "pop" : 3310, "state" : "NC" } +{ "_id" : "28134", "city" : "PINEVILLE", "loc" : [ -80.885852, 35.070942 ], "pop" : 4457, "state" : "NC" } +{ "_id" : "28135", "city" : "POLKTON", "loc" : [ -80.153812, 34.982288 ], "pop" : 6679, "state" : "NC" } +{ "_id" : "28137", "city" : "RICHFIELD", "loc" : [ -80.267135, 35.511035 ], "pop" : 2307, "state" : "NC" } +{ "_id" : "28138", "city" : "ROCKWELL", "loc" : [ -80.422568, 35.549437 ], "pop" : 8739, "state" : "NC" } +{ "_id" : "28139", "city" : "RUTHERFORDTON", "loc" : [ -81.97810699999999, 35.37058 ], "pop" : 10091, "state" : "NC" } +{ "_id" : "28144", "city" : "SALISBURY", "loc" : [ -80.488945, 35.651498 ], "pop" : 34563, "state" : "NC" } +{ "_id" : "28146", "city" : "SALISBURY", "loc" : [ -80.46569, 35.667564 ], "pop" : 23261, "state" : "NC" } +{ "_id" : "28150", "city" : "KINGSTOWN", "loc" : [ -81.58157300000001, 35.347075 ], "pop" : 13326, "state" : "NC" } +{ "_id" : "28152", "city" : "SHELBY", "loc" : [ -81.53367299999999, 35.268889 ], "pop" : 31162, "state" : "NC" } +{ "_id" : "28159", "city" : "SPENCER", "loc" : [ -80.431049, 35.695312 ], "pop" : 4083, "state" : "NC" } +{ "_id" : "28160", "city" : "SPINDALE", "loc" : [ -81.92514199999999, 35.360131 ], "pop" : 4017, "state" : "NC" } +{ "_id" : "28163", "city" : "STANFIELD", "loc" : [ -80.44067200000001, 35.21061 ], "pop" : 2436, "state" : "NC" } +{ "_id" : "28164", "city" : "STANLEY", "loc" : [ -81.095921, 35.351565 ], "pop" : 6510, "state" : "NC" } +{ "_id" : "28166", "city" : "TROUTMAN", "loc" : [ -80.882229, 35.686271 ], "pop" : 5013, "state" : "NC" } +{ "_id" : "28167", "city" : "UNION MILLS", "loc" : [ -81.96845999999999, 35.47324 ], "pop" : 3731, "state" : "NC" } +{ "_id" : "28168", "city" : "VALE", "loc" : [ -81.458887, 35.518796 ], "pop" : 3422, "state" : "NC" } +{ "_id" : "28170", "city" : "WADESBORO", "loc" : [ -80.069586, 34.980938 ], "pop" : 9765, "state" : "NC" } +{ "_id" : "28173", "city" : "WEDDINGTON", "loc" : [ -80.727901, 34.955334 ], "pop" : 14423, "state" : "NC" } +{ "_id" : "28174", "city" : "WINGATE", "loc" : [ -80.44759500000001, 34.984666 ], "pop" : 2747, "state" : "NC" } +{ "_id" : "28202", "city" : "CHARLOTTE", "loc" : [ -80.841864, 35.229002 ], "pop" : 5143, "state" : "NC" } +{ "_id" : "28203", "city" : "CHARLOTTE", "loc" : [ -80.858279, 35.208139 ], "pop" : 10274, "state" : "NC" } +{ "_id" : "28204", "city" : "CHARLOTTE", "loc" : [ -80.823149, 35.213178 ], "pop" : 6114, "state" : "NC" } +{ "_id" : "28205", "city" : "CHARLOTTE", "loc" : [ -80.788129, 35.219951 ], "pop" : 44092, "state" : "NC" } +{ "_id" : "28206", "city" : "CHARLOTTE", "loc" : [ -80.826505, 35.252173 ], "pop" : 13051, "state" : "NC" } +{ "_id" : "28207", "city" : "CHARLOTTE", "loc" : [ -80.827248, 35.193474 ], "pop" : 7921, "state" : "NC" } +{ "_id" : "28208", "city" : "CHARLOTTE", "loc" : [ -80.89635199999999, 35.235795 ], "pop" : 38236, "state" : "NC" } +{ "_id" : "28209", "city" : "CHARLOTTE", "loc" : [ -80.855926, 35.179629 ], "pop" : 18190, "state" : "NC" } +{ "_id" : "28210", "city" : "CHARLOTTE", "loc" : [ -80.857749, 35.131586 ], "pop" : 35211, "state" : "NC" } +{ "_id" : "28211", "city" : "CHARLOTTE", "loc" : [ -80.793244, 35.167653 ], "pop" : 25478, "state" : "NC" } +{ "_id" : "28212", "city" : "CHARLOTTE", "loc" : [ -80.744777, 35.190797 ], "pop" : 30347, "state" : "NC" } +{ "_id" : "28213", "city" : "CHARLOTTE", "loc" : [ -80.750079, 35.317868 ], "pop" : 20336, "state" : "NC" } +{ "_id" : "28214", "city" : "CHARLOTTE", "loc" : [ -80.95708999999999, 35.273095 ], "pop" : 16852, "state" : "NC" } +{ "_id" : "28215", "city" : "CHARLOTTE", "loc" : [ -80.738669, 35.243962 ], "pop" : 27936, "state" : "NC" } +{ "_id" : "28216", "city" : "CHARLOTTE", "loc" : [ -80.870216, 35.283377 ], "pop" : 22464, "state" : "NC" } +{ "_id" : "28217", "city" : "CHARLOTTE", "loc" : [ -81.007848, 35.0972 ], "pop" : 2795, "state" : "NC" } +{ "_id" : "28226", "city" : "CHARLOTTE", "loc" : [ -80.816675, 35.086856 ], "pop" : 41260, "state" : "NC" } +{ "_id" : "28227", "city" : "CHARLOTTE", "loc" : [ -80.684634, 35.193612 ], "pop" : 33273, "state" : "NC" } +{ "_id" : "28262", "city" : "CHARLOTTE", "loc" : [ -80.775958, 35.272506 ], "pop" : 15114, "state" : "NC" } +{ "_id" : "28269", "city" : "CHARLOTTE", "loc" : [ -80.820941, 35.288635 ], "pop" : 6659, "state" : "NC" } +{ "_id" : "28270", "city" : "CHARLOTTE", "loc" : [ -80.76687200000001, 35.135473 ], "pop" : 13791, "state" : "NC" } +{ "_id" : "28273", "city" : "CHARLOTTE", "loc" : [ -80.89667300000001, 35.159646 ], "pop" : 19148, "state" : "NC" } +{ "_id" : "28277", "city" : "CHARLOTTE", "loc" : [ -80.800174, 35.134486 ], "pop" : 6737, "state" : "NC" } +{ "_id" : "28278", "city" : "CHARLOTTE", "loc" : [ -80.960421, 35.146685 ], "pop" : 5411, "state" : "NC" } +{ "_id" : "28301", "city" : "EAST FAYETTEVILL", "loc" : [ -78.84225499999999, 35.05099 ], "pop" : 35253, "state" : "NC" } +{ "_id" : "28303", "city" : "BONNIE DOONE", "loc" : [ -78.96013499999999, 35.084046 ], "pop" : 35745, "state" : "NC" } +{ "_id" : "28304", "city" : "FAYETTEVILLE", "loc" : [ -78.970494, 35.025683 ], "pop" : 33868, "state" : "NC" } +{ "_id" : "28305", "city" : "FAYETTEVILLE", "loc" : [ -78.904658, 35.056022 ], "pop" : 6670, "state" : "NC" } +{ "_id" : "28306", "city" : "FAYETTEVILLE", "loc" : [ -78.936408, 35.001874 ], "pop" : 20122, "state" : "NC" } +{ "_id" : "28307", "city" : "FORT BRAGG", "loc" : [ -79.00245700000001, 35.141649 ], "pop" : 37688, "state" : "NC" } +{ "_id" : "28311", "city" : "FAYETTEVILLE", "loc" : [ -78.898217, 35.129416 ], "pop" : 29497, "state" : "NC" } +{ "_id" : "28314", "city" : "FAYETTEVILLE", "loc" : [ -79.00798500000001, 35.058322 ], "pop" : 34856, "state" : "NC" } +{ "_id" : "28315", "city" : "ABERDEEN", "loc" : [ -79.44503899999999, 35.121641 ], "pop" : 7767, "state" : "NC" } +{ "_id" : "28318", "city" : "AUTRYVILLE", "loc" : [ -78.60211099999999, 35.099673 ], "pop" : 4129, "state" : "NC" } +{ "_id" : "28320", "city" : "BLADENBORO", "loc" : [ -78.779295, 34.565832 ], "pop" : 7957, "state" : "NC" } +{ "_id" : "28323", "city" : "BUNNLEVEL", "loc" : [ -78.855189, 35.281057 ], "pop" : 4749, "state" : "NC" } +{ "_id" : "28326", "city" : "JOHNSONVILLE", "loc" : [ -79.268826, 35.313581 ], "pop" : 1851, "state" : "NC" } +{ "_id" : "28327", "city" : "CARTHAGE", "loc" : [ -79.396939, 35.306066 ], "pop" : 11774, "state" : "NC" } +{ "_id" : "28328", "city" : "CLINTON", "loc" : [ -78.326007, 35.015143 ], "pop" : 17737, "state" : "NC" } +{ "_id" : "28333", "city" : "DUDLEY", "loc" : [ -78.02727400000001, 35.292564 ], "pop" : 8450, "state" : "NC" } +{ "_id" : "28334", "city" : "DUNN", "loc" : [ -78.61507899999999, 35.316511 ], "pop" : 15795, "state" : "NC" } +{ "_id" : "28337", "city" : "ELIZABETHTOWN", "loc" : [ -78.574693, 34.64714 ], "pop" : 10444, "state" : "NC" } +{ "_id" : "28338", "city" : "ELLERBE", "loc" : [ -79.75236099999999, 35.091422 ], "pop" : 4245, "state" : "NC" } +{ "_id" : "28339", "city" : "ERWIN", "loc" : [ -78.685935, 35.328651 ], "pop" : 5574, "state" : "NC" } +{ "_id" : "28340", "city" : "MCDONALD", "loc" : [ -79.128596, 34.481402 ], "pop" : 10978, "state" : "NC" } +{ "_id" : "28341", "city" : "FAISON", "loc" : [ -78.117983, 35.119884 ], "pop" : 2658, "state" : "NC" } +{ "_id" : "28343", "city" : "GIBSON", "loc" : [ -79.583854, 34.754857 ], "pop" : 1638, "state" : "NC" } +{ "_id" : "28344", "city" : "GODWIN", "loc" : [ -78.66247199999999, 35.196919 ], "pop" : 1886, "state" : "NC" } +{ "_id" : "28345", "city" : "HAMLET", "loc" : [ -79.702217, 34.889375 ], "pop" : 13443, "state" : "NC" } +{ "_id" : "28347", "city" : "HOFFMAN", "loc" : [ -79.56002700000001, 35.032607 ], "pop" : 1073, "state" : "NC" } +{ "_id" : "28348", "city" : "HOPE MILLS", "loc" : [ -78.93536400000001, 34.953564 ], "pop" : 18396, "state" : "NC" } +{ "_id" : "28349", "city" : "KENANSVILLE", "loc" : [ -77.967743, 35.039621 ], "pop" : 4998, "state" : "NC" } +{ "_id" : "28351", "city" : "LAUREL HILL", "loc" : [ -79.54913500000001, 34.823831 ], "pop" : 5726, "state" : "NC" } +{ "_id" : "28352", "city" : "LAURINBURG", "loc" : [ -79.467316, 34.759869 ], "pop" : 23387, "state" : "NC" } +{ "_id" : "28356", "city" : "LINDEN", "loc" : [ -78.800361, 35.227645 ], "pop" : 2903, "state" : "NC" } +{ "_id" : "28357", "city" : "LUMBER BRIDGE", "loc" : [ -79.066417, 34.876192 ], "pop" : 1343, "state" : "NC" } +{ "_id" : "28358", "city" : "LUMBERTON", "loc" : [ -79.008309, 34.629301 ], "pop" : 42871, "state" : "NC" } +{ "_id" : "28363", "city" : "MARSTON", "loc" : [ -79.659554, 34.989628 ], "pop" : 963, "state" : "NC" } +{ "_id" : "28364", "city" : "MAXTON", "loc" : [ -79.309725, 34.733435 ], "pop" : 11494, "state" : "NC" } +{ "_id" : "28365", "city" : "MOUNT OLIVE", "loc" : [ -78.09833999999999, 35.210923 ], "pop" : 8636, "state" : "NC" } +{ "_id" : "28366", "city" : "NEWTON GROVE", "loc" : [ -78.42603699999999, 35.221258 ], "pop" : 6775, "state" : "NC" } +{ "_id" : "28369", "city" : "ORRUM", "loc" : [ -79.031037, 34.447347 ], "pop" : 1915, "state" : "NC" } +{ "_id" : "28371", "city" : "PARKTON", "loc" : [ -78.996943, 34.900569 ], "pop" : 2195, "state" : "NC" } +{ "_id" : "28372", "city" : "PEMBROKE", "loc" : [ -79.18337, 34.690198 ], "pop" : 10673, "state" : "NC" } +{ "_id" : "28374", "city" : "PINEHURST", "loc" : [ -79.47319400000001, 35.188408 ], "pop" : 5803, "state" : "NC" } +{ "_id" : "28376", "city" : "RAEFORD", "loc" : [ -79.22275999999999, 34.989009 ], "pop" : 20742, "state" : "NC" } +{ "_id" : "28377", "city" : "RED SPRINGS", "loc" : [ -79.163619, 34.808315 ], "pop" : 8683, "state" : "NC" } +{ "_id" : "28379", "city" : "ROCKINGHAM", "loc" : [ -79.766566, 34.933613 ], "pop" : 24282, "state" : "NC" } +{ "_id" : "28382", "city" : "ROSEBORO", "loc" : [ -78.504109, 34.994081 ], "pop" : 6495, "state" : "NC" } +{ "_id" : "28383", "city" : "ROWLAND", "loc" : [ -79.261843, 34.588664 ], "pop" : 7047, "state" : "NC" } +{ "_id" : "28384", "city" : "SAINT PAULS", "loc" : [ -78.973077, 34.800962 ], "pop" : 7976, "state" : "NC" } +{ "_id" : "28385", "city" : "SALEMBURG", "loc" : [ -78.471385, 35.051459 ], "pop" : 2821, "state" : "NC" } +{ "_id" : "28386", "city" : "SHANNON", "loc" : [ -79.180617, 34.898762 ], "pop" : 2120, "state" : "NC" } +{ "_id" : "28387", "city" : "SOUTHERN PINES", "loc" : [ -79.39568199999999, 35.169747 ], "pop" : 11523, "state" : "NC" } +{ "_id" : "28390", "city" : "SPRING LAKE", "loc" : [ -78.978555, 35.182981 ], "pop" : 11537, "state" : "NC" } +{ "_id" : "28391", "city" : "STEDMAN", "loc" : [ -78.69493199999999, 35.034749 ], "pop" : 4776, "state" : "NC" } +{ "_id" : "28392", "city" : "TAR HEEL", "loc" : [ -78.81341, 34.746541 ], "pop" : 1989, "state" : "NC" } +{ "_id" : "28393", "city" : "TURKEY", "loc" : [ -78.212086, 34.985673 ], "pop" : 3224, "state" : "NC" } +{ "_id" : "28394", "city" : "VASS", "loc" : [ -79.25618900000001, 35.217133 ], "pop" : 3932, "state" : "NC" } +{ "_id" : "28395", "city" : "WADE", "loc" : [ -78.724929, 35.160559 ], "pop" : 1369, "state" : "NC" } +{ "_id" : "28396", "city" : "WAGRAM", "loc" : [ -79.39594, 34.904432 ], "pop" : 3007, "state" : "NC" } +{ "_id" : "28398", "city" : "BOWDENS", "loc" : [ -78.08673899999999, 34.99818 ], "pop" : 5817, "state" : "NC" } +{ "_id" : "28399", "city" : "WHITE OAK", "loc" : [ -78.73014000000001, 34.766206 ], "pop" : 1292, "state" : "NC" } +{ "_id" : "28401", "city" : "CAPE FEAR", "loc" : [ -77.937856, 34.225304 ], "pop" : 21522, "state" : "NC" } +{ "_id" : "28403", "city" : "WILMINGTON", "loc" : [ -77.886213, 34.223653 ], "pop" : 25319, "state" : "NC" } +{ "_id" : "28405", "city" : "OGDEN", "loc" : [ -77.852937, 34.264065 ], "pop" : 26744, "state" : "NC" } +{ "_id" : "28409", "city" : "WILMINGTON", "loc" : [ -77.87227, 34.166256 ], "pop" : 17418, "state" : "NC" } +{ "_id" : "28412", "city" : "WILMINGTON", "loc" : [ -77.914137, 34.157173 ], "pop" : 13932, "state" : "NC" } +{ "_id" : "28420", "city" : "ASH", "loc" : [ -78.50563699999999, 34.065871 ], "pop" : 2212, "state" : "NC" } +{ "_id" : "28421", "city" : "ATKINSON", "loc" : [ -78.167108, 34.530445 ], "pop" : 1418, "state" : "NC" } +{ "_id" : "28422", "city" : "BOLIVIA", "loc" : [ -78.16813999999999, 34.025962 ], "pop" : 3392, "state" : "NC" } +{ "_id" : "28423", "city" : "BOLTON", "loc" : [ -78.337177, 34.309085 ], "pop" : 3071, "state" : "NC" } +{ "_id" : "28425", "city" : "BURGAW", "loc" : [ -77.94031699999999, 34.548679 ], "pop" : 6405, "state" : "NC" } +{ "_id" : "28428", "city" : "CAROLINA BEACH", "loc" : [ -77.896289, 34.036599 ], "pop" : 4524, "state" : "NC" } +{ "_id" : "28429", "city" : "CASTLE HAYNE", "loc" : [ -77.91085, 34.323596 ], "pop" : 7329, "state" : "NC" } +{ "_id" : "28430", "city" : "CERRO GORDO", "loc" : [ -78.921571, 34.302483 ], "pop" : 1742, "state" : "NC" } +{ "_id" : "28431", "city" : "CHADBOURN", "loc" : [ -78.826683, 34.322303 ], "pop" : 2015, "state" : "NC" } +{ "_id" : "28432", "city" : "CLARENDON", "loc" : [ -78.788844, 34.199517 ], "pop" : 3940, "state" : "NC" } +{ "_id" : "28433", "city" : "CLARKTON", "loc" : [ -78.631271, 34.503011 ], "pop" : 3493, "state" : "NC" } +{ "_id" : "28434", "city" : "COUNCIL", "loc" : [ -78.411511, 34.429042 ], "pop" : 2768, "state" : "NC" } +{ "_id" : "28435", "city" : "CURRIE", "loc" : [ -78.092516, 34.449668 ], "pop" : 2094, "state" : "NC" } +{ "_id" : "28436", "city" : "DELCO", "loc" : [ -78.19168999999999, 34.327419 ], "pop" : 229, "state" : "NC" } +{ "_id" : "28438", "city" : "EVERGREEN", "loc" : [ -78.884638, 34.375234 ], "pop" : 3906, "state" : "NC" } +{ "_id" : "28439", "city" : "FAIR BLUFF", "loc" : [ -79.01750199999999, 34.302275 ], "pop" : 1931, "state" : "NC" } +{ "_id" : "28441", "city" : "GARLAND", "loc" : [ -78.34142, 34.822906 ], "pop" : 4133, "state" : "NC" } +{ "_id" : "28442", "city" : "HALLSBORO", "loc" : [ -78.60427199999999, 34.318087 ], "pop" : 2551, "state" : "NC" } +{ "_id" : "28443", "city" : "HAMPSTEAD", "loc" : [ -77.662808, 34.3879 ], "pop" : 8159, "state" : "NC" } +{ "_id" : "28444", "city" : "HARRELLS", "loc" : [ -78.24297300000001, 34.676918 ], "pop" : 1635, "state" : "NC" } +{ "_id" : "28445", "city" : "SURF CITY", "loc" : [ -77.51005000000001, 34.4644 ], "pop" : 1279, "state" : "NC" } +{ "_id" : "28447", "city" : "IVANHOE", "loc" : [ -78.162333, 34.697169 ], "pop" : 352, "state" : "NC" } +{ "_id" : "28448", "city" : "KELLY", "loc" : [ -78.294161, 34.459064 ], "pop" : 723, "state" : "NC" } +{ "_id" : "28449", "city" : "KURE BEACH", "loc" : [ -77.909875, 33.992707 ], "pop" : 568, "state" : "NC" } +{ "_id" : "28450", "city" : "LAKE WACCAMAW", "loc" : [ -78.51020800000001, 34.339359 ], "pop" : 1941, "state" : "NC" } +{ "_id" : "28451", "city" : "LELAND", "loc" : [ -78.05781500000001, 34.267952 ], "pop" : 7803, "state" : "NC" } +{ "_id" : "28452", "city" : "LONGWOOD", "loc" : [ -78.531531, 33.950059 ], "pop" : 1913, "state" : "NC" } +{ "_id" : "28453", "city" : "MAGNOLIA", "loc" : [ -78.04321299999999, 34.895702 ], "pop" : 2056, "state" : "NC" } +{ "_id" : "28454", "city" : "MAPLE HILL", "loc" : [ -77.736588, 34.617753 ], "pop" : 2095, "state" : "NC" } +{ "_id" : "28455", "city" : "NAKINA", "loc" : [ -78.657005, 34.115293 ], "pop" : 1581, "state" : "NC" } +{ "_id" : "28456", "city" : "RIEGELWOOD", "loc" : [ -78.257473, 34.34706 ], "pop" : 2038, "state" : "NC" } +{ "_id" : "28457", "city" : "ROCKY POINT", "loc" : [ -77.92344799999999, 34.434418 ], "pop" : 4657, "state" : "NC" } +{ "_id" : "28458", "city" : "ROSE HILL", "loc" : [ -78.01662399999999, 34.823462 ], "pop" : 4421, "state" : "NC" } +{ "_id" : "28459", "city" : "SHALLOTTE", "loc" : [ -78.41068, 33.943011 ], "pop" : 6537, "state" : "NC" } +{ "_id" : "28460", "city" : "SNEADS FERRY", "loc" : [ -77.403801, 34.542589 ], "pop" : 4586, "state" : "NC" } +{ "_id" : "28461", "city" : "BOILING SPRING L", "loc" : [ -78.045551, 34.012137 ], "pop" : 8878, "state" : "NC" } +{ "_id" : "28462", "city" : "HOLDEN BEACH", "loc" : [ -78.29608899999999, 33.962504 ], "pop" : 7513, "state" : "NC" } +{ "_id" : "28463", "city" : "TABOR CITY", "loc" : [ -78.823178, 34.123314 ], "pop" : 6573, "state" : "NC" } +{ "_id" : "28464", "city" : "TEACHEY", "loc" : [ -78.022091, 34.770036 ], "pop" : 1461, "state" : "NC" } +{ "_id" : "28465", "city" : "OAK ISLAND", "loc" : [ -78.125455, 33.916122 ], "pop" : 4752, "state" : "NC" } +{ "_id" : "28466", "city" : "WALLACE", "loc" : [ -77.942922, 34.754166 ], "pop" : 7328, "state" : "NC" } +{ "_id" : "28467", "city" : "CALABASH", "loc" : [ -78.574406, 33.904668 ], "pop" : 3061, "state" : "NC" } +{ "_id" : "28468", "city" : "SUNSET BEACH", "loc" : [ -78.519955, 33.883569 ], "pop" : 1347, "state" : "NC" } +{ "_id" : "28469", "city" : "OCEAN ISLE BEACH", "loc" : [ -78.429849, 33.891271 ], "pop" : 493, "state" : "NC" } +{ "_id" : "28471", "city" : "WATHA", "loc" : [ -78.007351, 34.620725 ], "pop" : 1327, "state" : "NC" } +{ "_id" : "28472", "city" : "WHITEVILLE", "loc" : [ -78.716048, 34.324142 ], "pop" : 18066, "state" : "NC" } +{ "_id" : "28478", "city" : "WILLARD", "loc" : [ -78.023445, 34.684451 ], "pop" : 2456, "state" : "NC" } +{ "_id" : "28479", "city" : "WINNABOW", "loc" : [ -78.056211, 34.214511 ], "pop" : 3084, "state" : "NC" } +{ "_id" : "28480", "city" : "WRIGHTSVILLE BEA", "loc" : [ -77.79816599999999, 34.212228 ], "pop" : 2928, "state" : "NC" } +{ "_id" : "28501", "city" : "KINSTON", "loc" : [ -77.58596900000001, 35.278333 ], "pop" : 44135, "state" : "NC" } +{ "_id" : "28508", "city" : "ALBERTSON", "loc" : [ -77.851517, 35.117647 ], "pop" : 2644, "state" : "NC" } +{ "_id" : "28510", "city" : "ARAPAHOE", "loc" : [ -76.814909, 35.0055 ], "pop" : 1378, "state" : "NC" } +{ "_id" : "28511", "city" : "ATLANTIC", "loc" : [ -76.352097, 34.888827 ], "pop" : 808, "state" : "NC" } +{ "_id" : "28512", "city" : "PINE KNOLL SHORE", "loc" : [ -76.815163, 34.697295 ], "pop" : 1441, "state" : "NC" } +{ "_id" : "28513", "city" : "AYDEN", "loc" : [ -77.40512699999999, 35.456471 ], "pop" : 8831, "state" : "NC" } +{ "_id" : "28515", "city" : "BAYBORO", "loc" : [ -76.75179300000001, 35.152598 ], "pop" : 1853, "state" : "NC" } +{ "_id" : "28516", "city" : "BEAUFORT", "loc" : [ -76.622834, 34.758037 ], "pop" : 10606, "state" : "NC" } +{ "_id" : "28518", "city" : "BEULAVILLE", "loc" : [ -77.769655, 34.933962 ], "pop" : 7278, "state" : "NC" } +{ "_id" : "28520", "city" : "CEDAR ISLAND", "loc" : [ -76.08049, 35.074881 ], "pop" : 1029, "state" : "NC" } +{ "_id" : "28521", "city" : "CHINQUAPIN", "loc" : [ -77.76357299999999, 34.827609 ], "pop" : 1334, "state" : "NC" } +{ "_id" : "28523", "city" : "COVE CITY", "loc" : [ -77.296306, 35.202274 ], "pop" : 2007, "state" : "NC" } +{ "_id" : "28525", "city" : "DEEP RUN", "loc" : [ -77.69275, 35.162991 ], "pop" : 4252, "state" : "NC" } +{ "_id" : "28526", "city" : "DOVER", "loc" : [ -77.372688, 35.262652 ], "pop" : 2198, "state" : "NC" } +{ "_id" : "28527", "city" : "ERNUL", "loc" : [ -77.050164, 35.254693 ], "pop" : 303, "state" : "NC" } +{ "_id" : "28528", "city" : "GLOUCESTER", "loc" : [ -76.527627, 34.685645 ], "pop" : 0, "state" : "NC" } +{ "_id" : "28529", "city" : "GRANTSBORO", "loc" : [ -76.884387, 35.122186 ], "pop" : 3485, "state" : "NC" } +{ "_id" : "28530", "city" : "GRIFTON", "loc" : [ -77.41930000000001, 35.375681 ], "pop" : 3029, "state" : "NC" } +{ "_id" : "28531", "city" : "HARKERS ISLAND", "loc" : [ -76.558301, 34.69663 ], "pop" : 1761, "state" : "NC" } +{ "_id" : "28532", "city" : "HAVELOCK", "loc" : [ -76.89004199999999, 34.896753 ], "pop" : 25957, "state" : "NC" } +{ "_id" : "28537", "city" : "HOBUCKEN", "loc" : [ -76.569602, 35.251838 ], "pop" : 323, "state" : "NC" } +{ "_id" : "28538", "city" : "HOOKERTON", "loc" : [ -77.565555, 35.437976 ], "pop" : 2112, "state" : "NC" } +{ "_id" : "28539", "city" : "HUBERT", "loc" : [ -77.207928, 34.69929 ], "pop" : 8527, "state" : "NC" } +{ "_id" : "28540", "city" : "JACKSONVILLE", "loc" : [ -77.46281500000001, 34.737456 ], "pop" : 52792, "state" : "NC" } +{ "_id" : "28542", "city" : "CAMP LEJEUNE", "loc" : [ -77.3373, 34.665806 ], "pop" : 23717, "state" : "NC" } +{ "_id" : "28543", "city" : "TARAWA TERRACE", "loc" : [ -77.38311400000001, 34.73542 ], "pop" : 11054, "state" : "NC" } +{ "_id" : "28544", "city" : "MIDWAY PARK", "loc" : [ -77.320001, 34.726994 ], "pop" : 6799, "state" : "NC" } +{ "_id" : "28546", "city" : "JACKSONVILLE", "loc" : [ -77.378097, 34.77401 ], "pop" : 27976, "state" : "NC" } +{ "_id" : "28551", "city" : "LA GRANGE", "loc" : [ -77.76862, 35.305381 ], "pop" : 6686, "state" : "NC" } +{ "_id" : "28552", "city" : "LOWLAND", "loc" : [ -76.57769999999999, 35.305955 ], "pop" : 367, "state" : "NC" } +{ "_id" : "28553", "city" : "MARSHALLBERG", "loc" : [ -76.517323, 34.726472 ], "pop" : 565, "state" : "NC" } +{ "_id" : "28555", "city" : "MAYSVILLE", "loc" : [ -77.23145599999999, 34.869077 ], "pop" : 3899, "state" : "NC" } +{ "_id" : "28556", "city" : "MERRITT", "loc" : [ -76.69940099999999, 35.1228 ], "pop" : 1146, "state" : "NC" } +{ "_id" : "28557", "city" : "MOREHEAD CITY", "loc" : [ -76.753069, 34.72532 ], "pop" : 13985, "state" : "NC" } +{ "_id" : "28560", "city" : "NEW BERN", "loc" : [ -77.03194499999999, 35.101941 ], "pop" : 24585, "state" : "NC" } +{ "_id" : "28562", "city" : "NEW BERN", "loc" : [ -77.102874, 35.100434 ], "pop" : 20936, "state" : "NC" } +{ "_id" : "28570", "city" : "NEWPORT", "loc" : [ -76.90694499999999, 34.755076 ], "pop" : 18841, "state" : "NC" } +{ "_id" : "28571", "city" : "ORIENTAL", "loc" : [ -76.701521, 35.036406 ], "pop" : 1985, "state" : "NC" } +{ "_id" : "28572", "city" : "PINK HILL", "loc" : [ -77.712148, 35.066351 ], "pop" : 2201, "state" : "NC" } +{ "_id" : "28573", "city" : "POLLOCKSVILLE", "loc" : [ -77.22872700000001, 35.015105 ], "pop" : 2406, "state" : "NC" } +{ "_id" : "28574", "city" : "RICHLANDS", "loc" : [ -77.586305, 34.862426 ], "pop" : 8868, "state" : "NC" } +{ "_id" : "28577", "city" : "SEALEVEL", "loc" : [ -76.38977800000001, 34.876949 ], "pop" : 521, "state" : "NC" } +{ "_id" : "28578", "city" : "SEVEN SPRINGS", "loc" : [ -77.914621, 35.210466 ], "pop" : 2228, "state" : "NC" } +{ "_id" : "28579", "city" : "SMYRNA", "loc" : [ -76.51531300000001, 34.773384 ], "pop" : 651, "state" : "NC" } +{ "_id" : "28580", "city" : "SNOW HILL", "loc" : [ -77.695565, 35.443848 ], "pop" : 9637, "state" : "NC" } +{ "_id" : "28581", "city" : "STACY", "loc" : [ -76.428877, 34.84124 ], "pop" : 264, "state" : "NC" } +{ "_id" : "28582", "city" : "STELLA", "loc" : [ -77.130807, 34.777672 ], "pop" : 365, "state" : "NC" } +{ "_id" : "28584", "city" : "SWANSBORO", "loc" : [ -77.135013, 34.699066 ], "pop" : 2535, "state" : "NC" } +{ "_id" : "28585", "city" : "TRENTON", "loc" : [ -77.459473, 35.074481 ], "pop" : 5058, "state" : "NC" } +{ "_id" : "28586", "city" : "VANCEBORO", "loc" : [ -77.171618, 35.306255 ], "pop" : 5627, "state" : "NC" } +{ "_id" : "28587", "city" : "VANDEMERE", "loc" : [ -76.657088, 35.195298 ], "pop" : 835, "state" : "NC" } +{ "_id" : "28590", "city" : "WINTERVILLE", "loc" : [ -77.39097, 35.533582 ], "pop" : 8382, "state" : "NC" } +{ "_id" : "28594", "city" : "EMERALD ISLE", "loc" : [ -77.025961, 34.666195 ], "pop" : 2432, "state" : "NC" } +{ "_id" : "28601", "city" : "HICKORY", "loc" : [ -81.328858, 35.75757 ], "pop" : 44977, "state" : "NC" } +{ "_id" : "28602", "city" : "HICKORY", "loc" : [ -81.36122899999999, 35.68837 ], "pop" : 21020, "state" : "NC" } +{ "_id" : "28604", "city" : "BANNER ELK", "loc" : [ -81.841194, 36.170461 ], "pop" : 4570, "state" : "NC" } +{ "_id" : "28605", "city" : "BLOWING ROCK", "loc" : [ -81.750968, 36.094594 ], "pop" : 2372, "state" : "NC" } +{ "_id" : "28606", "city" : "BOOMER", "loc" : [ -81.313704, 36.055192 ], "pop" : 2146, "state" : "NC" } +{ "_id" : "28607", "city" : "BOONE", "loc" : [ -81.666025, 36.214237 ], "pop" : 24897, "state" : "NC" } +{ "_id" : "28609", "city" : "CATAWBA", "loc" : [ -81.050307, 35.675708 ], "pop" : 1767, "state" : "NC" } +{ "_id" : "28610", "city" : "CLAREMONT", "loc" : [ -81.129672, 35.721053 ], "pop" : 8902, "state" : "NC" } +{ "_id" : "28611", "city" : "COLLETTSVILLE", "loc" : [ -81.674188, 35.951946 ], "pop" : 2121, "state" : "NC" } +{ "_id" : "28612", "city" : "CONNELLYS SPRING", "loc" : [ -81.492958, 35.706972 ], "pop" : 15391, "state" : "NC" } +{ "_id" : "28613", "city" : "CONOVER", "loc" : [ -81.216455, 35.731343 ], "pop" : 15222, "state" : "NC" } +{ "_id" : "28615", "city" : "CRESTON", "loc" : [ -81.65062399999999, 36.449959 ], "pop" : 2527, "state" : "NC" } +{ "_id" : "28617", "city" : "CRUMPLER", "loc" : [ -81.403886, 36.464057 ], "pop" : 2532, "state" : "NC" } +{ "_id" : "28618", "city" : "DEEP GAP", "loc" : [ -81.516265, 36.213573 ], "pop" : 1176, "state" : "NC" } +{ "_id" : "28621", "city" : "ELKIN", "loc" : [ -80.85536500000001, 36.28723 ], "pop" : 10672, "state" : "NC" } +{ "_id" : "28622", "city" : "ELK PARK", "loc" : [ -81.963882, 36.164623 ], "pop" : 3223, "state" : "NC" } +{ "_id" : "28623", "city" : "ENNICE", "loc" : [ -80.977141, 36.525278 ], "pop" : 1509, "state" : "NC" } +{ "_id" : "28624", "city" : "FERGUSON", "loc" : [ -81.38640700000001, 36.128316 ], "pop" : 1551, "state" : "NC" } +{ "_id" : "28626", "city" : "FLEETWOOD", "loc" : [ -81.514008, 36.281382 ], "pop" : 1693, "state" : "NC" } +{ "_id" : "28627", "city" : "GLADE VALLEY", "loc" : [ -81.01678200000001, 36.442889 ], "pop" : 1115, "state" : "NC" } +{ "_id" : "28630", "city" : "GRANITE FALLS", "loc" : [ -81.457145, 35.819663 ], "pop" : 17749, "state" : "NC" } +{ "_id" : "28631", "city" : "GRASSY CREEK", "loc" : [ -81.44675100000001, 36.541524 ], "pop" : 837, "state" : "NC" } +{ "_id" : "28634", "city" : "HARMONY", "loc" : [ -80.75846199999999, 35.957975 ], "pop" : 3881, "state" : "NC" } +{ "_id" : "28635", "city" : "HAYS", "loc" : [ -81.11611600000001, 36.310015 ], "pop" : 1085, "state" : "NC" } +{ "_id" : "28636", "city" : "HIDDENITE", "loc" : [ -81.048663, 35.95045 ], "pop" : 1703, "state" : "NC" } +{ "_id" : "28638", "city" : "HUDSON", "loc" : [ -81.48974699999999, 35.840295 ], "pop" : 9771, "state" : "NC" } +{ "_id" : "28640", "city" : "JEFFERSON", "loc" : [ -81.439626, 36.408987 ], "pop" : 3080, "state" : "NC" } +{ "_id" : "28642", "city" : "JONESVILLE", "loc" : [ -80.787029, 36.228571 ], "pop" : 7105, "state" : "NC" } +{ "_id" : "28643", "city" : "LANSING", "loc" : [ -81.52692500000001, 36.517641 ], "pop" : 3211, "state" : "NC" } +{ "_id" : "28644", "city" : "LAUREL SPRINGS", "loc" : [ -81.26061, 36.444897 ], "pop" : 1837, "state" : "NC" } +{ "_id" : "28645", "city" : "LENOIR", "loc" : [ -81.539793, 35.914935 ], "pop" : 39525, "state" : "NC" } +{ "_id" : "28648", "city" : "LONGISLAND", "loc" : [ -80.990403, 35.665814 ], "pop" : 279, "state" : "NC" } +{ "_id" : "28649", "city" : "MC GRADY", "loc" : [ -81.19120700000001, 36.310345 ], "pop" : 1261, "state" : "NC" } +{ "_id" : "28650", "city" : "MAIDEN", "loc" : [ -81.174492, 35.575884 ], "pop" : 7388, "state" : "NC" } +{ "_id" : "28651", "city" : "MILLERS CREEK", "loc" : [ -81.24853299999999, 36.211949 ], "pop" : 7018, "state" : "NC" } +{ "_id" : "28654", "city" : "MORAVIAN FALLS", "loc" : [ -81.178073, 36.078762 ], "pop" : 3071, "state" : "NC" } +{ "_id" : "28655", "city" : "MORGANTON", "loc" : [ -81.704216, 35.73458 ], "pop" : 50932, "state" : "NC" } +{ "_id" : "28657", "city" : "FRANK", "loc" : [ -81.952276, 36.040203 ], "pop" : 8906, "state" : "NC" } +{ "_id" : "28658", "city" : "NEWTON", "loc" : [ -81.242546, 35.649766 ], "pop" : 20759, "state" : "NC" } +{ "_id" : "28659", "city" : "NORTH WILKESBORO", "loc" : [ -81.128603, 36.20174 ], "pop" : 20167, "state" : "NC" } +{ "_id" : "28660", "city" : "OLIN", "loc" : [ -80.851084, 35.959333 ], "pop" : 723, "state" : "NC" } +{ "_id" : "28665", "city" : "PURLEAR", "loc" : [ -81.352773, 36.196391 ], "pop" : 1102, "state" : "NC" } +{ "_id" : "28668", "city" : "ROARING GAP", "loc" : [ -81.018781, 36.383553 ], "pop" : 21, "state" : "NC" } +{ "_id" : "28669", "city" : "ROARING RIVER", "loc" : [ -81.000373, 36.191561 ], "pop" : 978, "state" : "NC" } +{ "_id" : "28670", "city" : "RONDA", "loc" : [ -80.926964, 36.20594 ], "pop" : 2739, "state" : "NC" } +{ "_id" : "28673", "city" : "SHERRILLS FORD", "loc" : [ -81.03385900000001, 35.596244 ], "pop" : 5567, "state" : "NC" } +{ "_id" : "28675", "city" : "SPARTA", "loc" : [ -81.138442, 36.508851 ], "pop" : 5746, "state" : "NC" } +{ "_id" : "28676", "city" : "STATE ROAD", "loc" : [ -80.86529400000001, 36.34218 ], "pop" : 3080, "state" : "NC" } +{ "_id" : "28677", "city" : "STATESVILLE", "loc" : [ -80.894009, 35.799022 ], "pop" : 52895, "state" : "NC" } +{ "_id" : "28678", "city" : "STONY POINT", "loc" : [ -81.06413499999999, 35.866109 ], "pop" : 5212, "state" : "NC" } +{ "_id" : "28679", "city" : "SUGAR GROVE", "loc" : [ -81.844094, 36.262672 ], "pop" : 1631, "state" : "NC" } +{ "_id" : "28681", "city" : "TAYLORSVILLE", "loc" : [ -81.212429, 35.901046 ], "pop" : 19679, "state" : "NC" } +{ "_id" : "28682", "city" : "TERRELL", "loc" : [ -80.963064, 35.583587 ], "pop" : 440, "state" : "NC" } +{ "_id" : "28683", "city" : "THURMOND", "loc" : [ -80.931674, 36.356188 ], "pop" : 556, "state" : "NC" } +{ "_id" : "28684", "city" : "TODD", "loc" : [ -81.58740299999999, 36.324527 ], "pop" : 1039, "state" : "NC" } +{ "_id" : "28685", "city" : "TRAPHILL", "loc" : [ -81.015126, 36.330097 ], "pop" : 1781, "state" : "NC" } +{ "_id" : "28686", "city" : "TRIPLETT", "loc" : [ -81.489649, 36.181685 ], "pop" : 64, "state" : "NC" } +{ "_id" : "28689", "city" : "UNION GROVE", "loc" : [ -80.89669499999999, 36.036947 ], "pop" : 2264, "state" : "NC" } +{ "_id" : "28690", "city" : "VALDESE", "loc" : [ -81.56695999999999, 35.744739 ], "pop" : 4227, "state" : "NC" } +{ "_id" : "28691", "city" : "VALLE CRUCIS", "loc" : [ -81.880563, 36.207041 ], "pop" : 238, "state" : "NC" } +{ "_id" : "28692", "city" : "VILAS", "loc" : [ -81.765203, 36.257375 ], "pop" : 3022, "state" : "NC" } +{ "_id" : "28693", "city" : "WARRENSVILLE", "loc" : [ -81.546522, 36.45723 ], "pop" : 994, "state" : "NC" } +{ "_id" : "28694", "city" : "WEST JEFFERSON", "loc" : [ -81.487218, 36.377648 ], "pop" : 6348, "state" : "NC" } +{ "_id" : "28697", "city" : "WILKESBORO", "loc" : [ -81.157292, 36.135857 ], "pop" : 11889, "state" : "NC" } +{ "_id" : "28698", "city" : "ZIONVILLE", "loc" : [ -81.747567, 36.319437 ], "pop" : 1633, "state" : "NC" } +{ "_id" : "28701", "city" : "ALEXANDER", "loc" : [ -82.631134, 35.706394 ], "pop" : 2960, "state" : "NC" } +{ "_id" : "28702", "city" : "ALMOND", "loc" : [ -83.578406, 35.3295 ], "pop" : 678, "state" : "NC" } +{ "_id" : "28703", "city" : "AQUONE", "loc" : [ -83.56621800000001, 35.240254 ], "pop" : 1423, "state" : "NC" } +{ "_id" : "28704", "city" : "ARDEN", "loc" : [ -82.535372, 35.463666 ], "pop" : 11386, "state" : "NC" } +{ "_id" : "28705", "city" : "BAKERSVILLE", "loc" : [ -82.171133, 36.028588 ], "pop" : 6862, "state" : "NC" } +{ "_id" : "28708", "city" : "BALSAM GROVE", "loc" : [ -82.87795, 35.229751 ], "pop" : 342, "state" : "NC" } +{ "_id" : "28709", "city" : "BARNARDSVILLE", "loc" : [ -82.456682, 35.77483 ], "pop" : 2757, "state" : "NC" } +{ "_id" : "28711", "city" : "BLACK MOUNTAIN S", "loc" : [ -82.325087, 35.612494 ], "pop" : 11914, "state" : "NC" } +{ "_id" : "28712", "city" : "BREVARD", "loc" : [ -82.740444, 35.22076 ], "pop" : 14212, "state" : "NC" } +{ "_id" : "28713", "city" : "BRYSON CITY", "loc" : [ -83.439246, 35.424128 ], "pop" : 7248, "state" : "NC" } +{ "_id" : "28714", "city" : "BURNSVILLE", "loc" : [ -82.287623, 35.902974 ], "pop" : 13735, "state" : "NC" } +{ "_id" : "28715", "city" : "CANDLER", "loc" : [ -82.700081, 35.537626 ], "pop" : 15823, "state" : "NC" } +{ "_id" : "28716", "city" : "CANTON", "loc" : [ -82.841291, 35.512651 ], "pop" : 14331, "state" : "NC" } +{ "_id" : "28717", "city" : "CASHIERS", "loc" : [ -83.087074, 35.097117 ], "pop" : 1099, "state" : "NC" } +{ "_id" : "28719", "city" : "CHEROKEE", "loc" : [ -83.31444, 35.50937 ], "pop" : 3339, "state" : "NC" } +{ "_id" : "28721", "city" : "CLYDE", "loc" : [ -82.921582, 35.559654 ], "pop" : 7400, "state" : "NC" } +{ "_id" : "28722", "city" : "COLUMBUS", "loc" : [ -82.120631, 35.241031 ], "pop" : 5976, "state" : "NC" } +{ "_id" : "28723", "city" : "CULLOWHEE", "loc" : [ -83.147522, 35.240876 ], "pop" : 2886, "state" : "NC" } +{ "_id" : "28726", "city" : "EAST FLAT ROCK", "loc" : [ -82.420423, 35.279868 ], "pop" : 3770, "state" : "NC" } +{ "_id" : "28729", "city" : "ETOWAH", "loc" : [ -82.597705, 35.317192 ], "pop" : 2461, "state" : "NC" } +{ "_id" : "28730", "city" : "FAIRVIEW", "loc" : [ -82.398534, 35.525759 ], "pop" : 5156, "state" : "NC" } +{ "_id" : "28731", "city" : "FLAT ROCK", "loc" : [ -82.39156800000001, 35.288993 ], "pop" : 4240, "state" : "NC" } +{ "_id" : "28732", "city" : "FLETCHER", "loc" : [ -82.496559, 35.44989 ], "pop" : 7201, "state" : "NC" } +{ "_id" : "28733", "city" : "FONTANA DAM", "loc" : [ -83.81763100000001, 35.428187 ], "pop" : 187, "state" : "NC" } +{ "_id" : "28734", "city" : "FRANKLIN", "loc" : [ -83.388479, 35.180984 ], "pop" : 16689, "state" : "NC" } +{ "_id" : "28735", "city" : "GERTON", "loc" : [ -82.30620399999999, 35.468723 ], "pop" : 280, "state" : "NC" } +{ "_id" : "28736", "city" : "GLENVILLE", "loc" : [ -83.09003300000001, 35.188164 ], "pop" : 125, "state" : "NC" } +{ "_id" : "28738", "city" : "HAZELWOOD", "loc" : [ -83.004284, 35.476877 ], "pop" : 1759, "state" : "NC" } +{ "_id" : "28739", "city" : "HENDERSONVILLE", "loc" : [ -82.499995, 35.319213 ], "pop" : 26125, "state" : "NC" } +{ "_id" : "28740", "city" : "GREENMOUNTAIN", "loc" : [ -82.28786700000001, 35.995619 ], "pop" : 1471, "state" : "NC" } +{ "_id" : "28741", "city" : "HIGHLANDS", "loc" : [ -83.216044, 35.070546 ], "pop" : 2685, "state" : "NC" } +{ "_id" : "28742", "city" : "HORSE SHOE", "loc" : [ -82.598128, 35.370267 ], "pop" : 4069, "state" : "NC" } +{ "_id" : "28743", "city" : "HOT SPRINGS", "loc" : [ -82.812011, 35.816175 ], "pop" : 3595, "state" : "NC" } +{ "_id" : "28745", "city" : "LAKE JUNALUSKA", "loc" : [ -82.970235, 35.525916 ], "pop" : 539, "state" : "NC" } +{ "_id" : "28746", "city" : "LAKE LURE", "loc" : [ -82.175203, 35.446447 ], "pop" : 1843, "state" : "NC" } +{ "_id" : "28747", "city" : "LAKE TOXAWAY", "loc" : [ -82.91908100000001, 35.145052 ], "pop" : 1849, "state" : "NC" } +{ "_id" : "28748", "city" : "LEICESTER", "loc" : [ -82.710622, 35.649781 ], "pop" : 7709, "state" : "NC" } +{ "_id" : "28751", "city" : "MAGGIE VALLEY", "loc" : [ -83.092928, 35.52006 ], "pop" : 1989, "state" : "NC" } +{ "_id" : "28752", "city" : "MARION", "loc" : [ -82.017993, 35.681916 ], "pop" : 24988, "state" : "NC" } +{ "_id" : "28753", "city" : "WALNUT", "loc" : [ -82.656577, 35.856074 ], "pop" : 7623, "state" : "NC" } +{ "_id" : "28754", "city" : "MARS HILL", "loc" : [ -82.525352, 35.852825 ], "pop" : 5949, "state" : "NC" } +{ "_id" : "28756", "city" : "MILL SPRING", "loc" : [ -82.155733, 35.333792 ], "pop" : 3075, "state" : "NC" } +{ "_id" : "28761", "city" : "NEBO", "loc" : [ -81.905581, 35.673158 ], "pop" : 5018, "state" : "NC" } +{ "_id" : "28762", "city" : "OLD FORT", "loc" : [ -82.168621, 35.616948 ], "pop" : 5594, "state" : "NC" } +{ "_id" : "28763", "city" : "OTTO", "loc" : [ -83.384755, 35.062668 ], "pop" : 2297, "state" : "NC" } +{ "_id" : "28766", "city" : "PENROSE", "loc" : [ -82.62223899999999, 35.252407 ], "pop" : 653, "state" : "NC" } +{ "_id" : "28768", "city" : "PISGAH FOREST", "loc" : [ -82.669516, 35.259931 ], "pop" : 5623, "state" : "NC" } +{ "_id" : "28771", "city" : "ROBBINSVILLE", "loc" : [ -83.788775, 35.325932 ], "pop" : 6879, "state" : "NC" } +{ "_id" : "28772", "city" : "ROSMAN", "loc" : [ -82.818916, 35.119695 ], "pop" : 2779, "state" : "NC" } +{ "_id" : "28773", "city" : "SALUDA", "loc" : [ -82.330595, 35.238341 ], "pop" : 1451, "state" : "NC" } +{ "_id" : "28774", "city" : "SAPPHIRE", "loc" : [ -83.001924, 35.066578 ], "pop" : 62, "state" : "NC" } +{ "_id" : "28775", "city" : "SCALY MOUNTAIN", "loc" : [ -83.31133800000001, 35.024036 ], "pop" : 405, "state" : "NC" } +{ "_id" : "28777", "city" : "SPRUCE PINE", "loc" : [ -82.070492, 35.905971 ], "pop" : 7570, "state" : "NC" } +{ "_id" : "28778", "city" : "WARREN WILSON CO", "loc" : [ -82.40649000000001, 35.604843 ], "pop" : 5911, "state" : "NC" } +{ "_id" : "28779", "city" : "SYLVA", "loc" : [ -83.20305399999999, 35.348055 ], "pop" : 16275, "state" : "NC" } +{ "_id" : "28780", "city" : "TAPOCO", "loc" : [ -83.905415, 35.442023 ], "pop" : 130, "state" : "NC" } +{ "_id" : "28781", "city" : "TOPTON", "loc" : [ -83.74511699999999, 35.230604 ], "pop" : 481, "state" : "NC" } +{ "_id" : "28782", "city" : "TRYON", "loc" : [ -82.23942, 35.215703 ], "pop" : 3914, "state" : "NC" } +{ "_id" : "28783", "city" : "TUCKASEGEE", "loc" : [ -83.07486400000001, 35.259934 ], "pop" : 1096, "state" : "NC" } +{ "_id" : "28786", "city" : "WAYNESVILLE", "loc" : [ -82.99134599999999, 35.501767 ], "pop" : 20924, "state" : "NC" } +{ "_id" : "28787", "city" : "WEAVERVILLE", "loc" : [ -82.549109, 35.712642 ], "pop" : 11884, "state" : "NC" } +{ "_id" : "28789", "city" : "WHITTIER", "loc" : [ -83.287239, 35.446934 ], "pop" : 5368, "state" : "NC" } +{ "_id" : "28790", "city" : "ZIRCONIA", "loc" : [ -82.457368, 35.215291 ], "pop" : 2350, "state" : "NC" } +{ "_id" : "28792", "city" : "HENDERSONVILLE", "loc" : [ -82.42644300000001, 35.361342 ], "pop" : 21037, "state" : "NC" } +{ "_id" : "28801", "city" : "ASHEVILLE", "loc" : [ -82.556533, 35.597075 ], "pop" : 13316, "state" : "NC" } +{ "_id" : "28803", "city" : "ASHEVILLE", "loc" : [ -82.518021, 35.539291 ], "pop" : 20904, "state" : "NC" } +{ "_id" : "28804", "city" : "ASHEVILLE", "loc" : [ -82.56462500000001, 35.63743 ], "pop" : 16709, "state" : "NC" } +{ "_id" : "28805", "city" : "ASHEVILLE", "loc" : [ -82.491781, 35.600363 ], "pop" : 15335, "state" : "NC" } +{ "_id" : "28806", "city" : "ASHEVILLE", "loc" : [ -82.607787, 35.580814 ], "pop" : 30809, "state" : "NC" } +{ "_id" : "28901", "city" : "ANDREWS", "loc" : [ -83.822836, 35.195948 ], "pop" : 4469, "state" : "NC" } +{ "_id" : "28902", "city" : "BRASSTOWN", "loc" : [ -83.966773, 35.031392 ], "pop" : 1390, "state" : "NC" } +{ "_id" : "28904", "city" : "HAYESVILLE", "loc" : [ -83.78668, 35.04172 ], "pop" : 5965, "state" : "NC" } +{ "_id" : "28905", "city" : "MARBLE", "loc" : [ -83.93806499999999, 35.14748 ], "pop" : 3230, "state" : "NC" } +{ "_id" : "28906", "city" : "UNAKA", "loc" : [ -84.101454, 35.079228 ], "pop" : 11333, "state" : "NC" } +{ "_id" : "28909", "city" : "WARNE", "loc" : [ -83.90454099999999, 35.002437 ], "pop" : 457, "state" : "NC" } +{ "_id" : "29001", "city" : "ALCOLU", "loc" : [ -80.178782, 33.768402 ], "pop" : 2319, "state" : "SC" } +{ "_id" : "29003", "city" : "BAMBERG", "loc" : [ -81.01774399999999, 33.277915 ], "pop" : 7096, "state" : "SC" } +{ "_id" : "29006", "city" : "BATESBURG", "loc" : [ -81.54898799999999, 33.938595 ], "pop" : 9300, "state" : "SC" } +{ "_id" : "29009", "city" : "BETHUNE", "loc" : [ -80.36620600000001, 34.42012 ], "pop" : 2172, "state" : "SC" } +{ "_id" : "29010", "city" : "BISHOPVILLE", "loc" : [ -80.27498799999999, 34.224101 ], "pop" : 11965, "state" : "SC" } +{ "_id" : "29014", "city" : "BLACKSTOCK", "loc" : [ -81.12485700000001, 34.577876 ], "pop" : 249, "state" : "SC" } +{ "_id" : "29015", "city" : "BLAIR", "loc" : [ -81.345945, 34.496668 ], "pop" : 895, "state" : "SC" } +{ "_id" : "29016", "city" : "BLYTHEWOOD", "loc" : [ -80.975756, 34.191112 ], "pop" : 7321, "state" : "SC" } +{ "_id" : "29018", "city" : "BOWMAN", "loc" : [ -80.670868, 33.347466 ], "pop" : 3993, "state" : "SC" } +{ "_id" : "29020", "city" : "CAMDEN", "loc" : [ -80.590997, 34.269636 ], "pop" : 20667, "state" : "SC" } +{ "_id" : "29030", "city" : "CAMERON", "loc" : [ -80.64660499999999, 33.557789 ], "pop" : 2356, "state" : "SC" } +{ "_id" : "29031", "city" : "CARLISLE", "loc" : [ -81.50910500000001, 34.614332 ], "pop" : 2021, "state" : "SC" } +{ "_id" : "29032", "city" : "CASSATT", "loc" : [ -80.499993, 34.342414 ], "pop" : 2164, "state" : "SC" } +{ "_id" : "29033", "city" : "CAYCE", "loc" : [ -81.06708399999999, 33.962567 ], "pop" : 12191, "state" : "SC" } +{ "_id" : "29036", "city" : "CHAPIN", "loc" : [ -81.33181999999999, 34.131158 ], "pop" : 8744, "state" : "SC" } +{ "_id" : "29037", "city" : "CHAPPELLS", "loc" : [ -81.83525299999999, 34.235834 ], "pop" : 940, "state" : "SC" } +{ "_id" : "29038", "city" : "COPE", "loc" : [ -80.963111, 33.372555 ], "pop" : 1962, "state" : "SC" } +{ "_id" : "29039", "city" : "CORDOVA", "loc" : [ -80.88571899999999, 33.42753 ], "pop" : 2808, "state" : "SC" } +{ "_id" : "29040", "city" : "DALZELL", "loc" : [ -80.466533, 34.014412 ], "pop" : 7540, "state" : "SC" } +{ "_id" : "29042", "city" : "DENMARK", "loc" : [ -81.14072, 33.320925 ], "pop" : 6602, "state" : "SC" } +{ "_id" : "29044", "city" : "EASTOVER", "loc" : [ -80.699647, 33.915274 ], "pop" : 4666, "state" : "SC" } +{ "_id" : "29045", "city" : "ELGIN", "loc" : [ -80.81129199999999, 34.161963 ], "pop" : 9447, "state" : "SC" } +{ "_id" : "29046", "city" : "ELLIOTT", "loc" : [ -80.17544100000001, 34.117149 ], "pop" : 1235, "state" : "SC" } +{ "_id" : "29047", "city" : "ELLOREE", "loc" : [ -80.56784, 33.490608 ], "pop" : 4202, "state" : "SC" } +{ "_id" : "29048", "city" : "EUTAWVILLE", "loc" : [ -80.31998299999999, 33.392189 ], "pop" : 4298, "state" : "SC" } +{ "_id" : "29051", "city" : "GABLE", "loc" : [ -80.081377, 33.840989 ], "pop" : 790, "state" : "SC" } +{ "_id" : "29052", "city" : "GADSDEN", "loc" : [ -80.753199, 33.845461 ], "pop" : 2235, "state" : "SC" } +{ "_id" : "29053", "city" : "GASTON", "loc" : [ -81.117395, 33.833712 ], "pop" : 7863, "state" : "SC" } +{ "_id" : "29054", "city" : "GILBERT", "loc" : [ -81.39136000000001, 33.95805 ], "pop" : 4018, "state" : "SC" } +{ "_id" : "29055", "city" : "GREAT FALLS", "loc" : [ -80.913263, 34.57053 ], "pop" : 3562, "state" : "SC" } +{ "_id" : "29056", "city" : "GREELEYVILLE", "loc" : [ -79.98022, 33.59664 ], "pop" : 2773, "state" : "SC" } +{ "_id" : "29058", "city" : "HEATH SPRINGS", "loc" : [ -80.71031000000001, 34.602422 ], "pop" : 5101, "state" : "SC" } +{ "_id" : "29059", "city" : "HOLLY HILL", "loc" : [ -80.402393, 33.327586 ], "pop" : 4959, "state" : "SC" } +{ "_id" : "29061", "city" : "HOPKINS", "loc" : [ -80.84490599999999, 33.934868 ], "pop" : 12297, "state" : "SC" } +{ "_id" : "29063", "city" : "IRMO", "loc" : [ -81.19655299999999, 34.110254 ], "pop" : 15479, "state" : "SC" } +{ "_id" : "29065", "city" : "JENKINSVILLE", "loc" : [ -81.271153, 34.271693 ], "pop" : 809, "state" : "SC" } +{ "_id" : "29067", "city" : "KERSHAW", "loc" : [ -80.554633, 34.557809 ], "pop" : 8189, "state" : "SC" } +{ "_id" : "29069", "city" : "LAMAR", "loc" : [ -80.030134, 34.189044 ], "pop" : 6964, "state" : "SC" } +{ "_id" : "29070", "city" : "LEESVILLE", "loc" : [ -81.45975300000001, 33.913169 ], "pop" : 8605, "state" : "SC" } +{ "_id" : "29072", "city" : "LEXINGTON", "loc" : [ -81.23586, 33.972383 ], "pop" : 33576, "state" : "SC" } +{ "_id" : "29073", "city" : "LEXINGTON", "loc" : [ -81.235102, 33.863206 ], "pop" : 4683, "state" : "SC" } +{ "_id" : "29075", "city" : "LITTLE MOUNTAIN", "loc" : [ -81.418375, 34.167569 ], "pop" : 3322, "state" : "SC" } +{ "_id" : "29077", "city" : "LONE STAR", "loc" : [ -80.645025, 33.673574 ], "pop" : 1030, "state" : "SC" } +{ "_id" : "29078", "city" : "LUGOFF", "loc" : [ -80.71471200000001, 34.22961 ], "pop" : 8991, "state" : "SC" } +{ "_id" : "29080", "city" : "LYNCHBURG", "loc" : [ -80.098821, 34.052603 ], "pop" : 2091, "state" : "SC" } +{ "_id" : "29081", "city" : "EHRHARDT", "loc" : [ -81.022137, 33.104436 ], "pop" : 1525, "state" : "SC" } +{ "_id" : "29082", "city" : "LODGE", "loc" : [ -80.934641, 32.982263 ], "pop" : 1877, "state" : "SC" } +{ "_id" : "29101", "city" : "MC BEE", "loc" : [ -80.254434, 34.46056 ], "pop" : 2331, "state" : "SC" } +{ "_id" : "29102", "city" : "PAXVILLE", "loc" : [ -80.222078, 33.667716 ], "pop" : 14407, "state" : "SC" } +{ "_id" : "29104", "city" : "SAINT CHARLES", "loc" : [ -80.234927, 34.046463 ], "pop" : 2403, "state" : "SC" } +{ "_id" : "29105", "city" : "MONETTA", "loc" : [ -81.536299, 33.774729 ], "pop" : 2068, "state" : "SC" } +{ "_id" : "29107", "city" : "NEESES", "loc" : [ -81.083433, 33.534282 ], "pop" : 3416, "state" : "SC" } +{ "_id" : "29108", "city" : "NEWBERRY", "loc" : [ -81.615741, 34.284661 ], "pop" : 15468, "state" : "SC" } +{ "_id" : "29111", "city" : "NEW ZION", "loc" : [ -80.014753, 33.795736 ], "pop" : 1072, "state" : "SC" } +{ "_id" : "29112", "city" : "NORTH", "loc" : [ -81.060096, 33.621121 ], "pop" : 3410, "state" : "SC" } +{ "_id" : "29113", "city" : "NORWAY", "loc" : [ -81.10974400000001, 33.453402 ], "pop" : 2487, "state" : "SC" } +{ "_id" : "29114", "city" : "OLANTA", "loc" : [ -79.91534900000001, 33.928545 ], "pop" : 2415, "state" : "SC" } +{ "_id" : "29115", "city" : "ORANGEBURG", "loc" : [ -80.85928199999999, 33.502545 ], "pop" : 43095, "state" : "SC" } +{ "_id" : "29123", "city" : "PELION", "loc" : [ -81.25016100000001, 33.776628 ], "pop" : 3139, "state" : "SC" } +{ "_id" : "29125", "city" : "PINEWOOD", "loc" : [ -80.497761, 33.764216 ], "pop" : 937, "state" : "SC" } +{ "_id" : "29126", "city" : "POMARIA", "loc" : [ -81.449973, 34.306281 ], "pop" : 3278, "state" : "SC" } +{ "_id" : "29127", "city" : "PROSPERITY", "loc" : [ -81.532353, 34.183243 ], "pop" : 4782, "state" : "SC" } +{ "_id" : "29128", "city" : "REMBERT", "loc" : [ -80.494544, 34.108467 ], "pop" : 5577, "state" : "SC" } +{ "_id" : "29129", "city" : "RIDGE SPRING", "loc" : [ -81.65594900000001, 33.871403 ], "pop" : 2172, "state" : "SC" } +{ "_id" : "29130", "city" : "RIDGEWAY", "loc" : [ -80.92881300000001, 34.316651 ], "pop" : 4405, "state" : "SC" } +{ "_id" : "29131", "city" : "RIMINI", "loc" : [ -80.47267100000001, 33.672155 ], "pop" : 778, "state" : "SC" } +{ "_id" : "29133", "city" : "ROWESVILLE", "loc" : [ -80.83311500000001, 33.370257 ], "pop" : 488, "state" : "SC" } +{ "_id" : "29135", "city" : "FORT MOTTE", "loc" : [ -80.856286, 33.694212 ], "pop" : 9367, "state" : "SC" } +{ "_id" : "29137", "city" : "SALLEY", "loc" : [ -81.31841799999999, 33.597233 ], "pop" : 2537, "state" : "SC" } +{ "_id" : "29138", "city" : "SALUDA", "loc" : [ -81.775398, 34.017451 ], "pop" : 9586, "state" : "SC" } +{ "_id" : "29142", "city" : "SANTEE", "loc" : [ -80.480498, 33.483533 ], "pop" : 1891, "state" : "SC" } +{ "_id" : "29145", "city" : "SILVERSTREET", "loc" : [ -81.703684, 34.235553 ], "pop" : 1851, "state" : "SC" } +{ "_id" : "29146", "city" : "SPRINGFIELD", "loc" : [ -81.249858, 33.534265 ], "pop" : 2184, "state" : "SC" } +{ "_id" : "29148", "city" : "SUMMERTON", "loc" : [ -80.36056600000001, 33.594578 ], "pop" : 5946, "state" : "SC" } +{ "_id" : "29150", "city" : "OSWEGO", "loc" : [ -80.32100800000001, 33.928199 ], "pop" : 46394, "state" : "SC" } +{ "_id" : "29152", "city" : "SHAW A F B", "loc" : [ -80.481093, 33.980262 ], "pop" : 13353, "state" : "SC" } +{ "_id" : "29154", "city" : "SUMTER", "loc" : [ -80.402761, 33.882067 ], "pop" : 24816, "state" : "SC" } +{ "_id" : "29160", "city" : "SWANSEA", "loc" : [ -81.093309, 33.733917 ], "pop" : 3822, "state" : "SC" } +{ "_id" : "29161", "city" : "TIMMONSVILLE", "loc" : [ -79.937845, 34.101241 ], "pop" : 6644, "state" : "SC" } +{ "_id" : "29162", "city" : "TURBEVILLE", "loc" : [ -79.985174, 33.87857 ], "pop" : 3138, "state" : "SC" } +{ "_id" : "29163", "city" : "VANCE", "loc" : [ -80.461716, 33.413882 ], "pop" : 3445, "state" : "SC" } +{ "_id" : "29164", "city" : "WAGENER", "loc" : [ -81.39952, 33.649417 ], "pop" : 3278, "state" : "SC" } +{ "_id" : "29166", "city" : "WARD", "loc" : [ -81.728341, 33.884856 ], "pop" : 823, "state" : "SC" } +{ "_id" : "29168", "city" : "WEDGEFIELD", "loc" : [ -80.49871899999999, 33.943002 ], "pop" : 5490, "state" : "SC" } +{ "_id" : "29169", "city" : "WEST COLUMBIA", "loc" : [ -81.088836, 33.995024 ], "pop" : 18309, "state" : "SC" } +{ "_id" : "29170", "city" : "WEST COLUMBIA", "loc" : [ -81.140474, 33.956751 ], "pop" : 17399, "state" : "SC" } +{ "_id" : "29172", "city" : "WEST COLUMBIA", "loc" : [ -81.091008, 33.900022 ], "pop" : 9939, "state" : "SC" } +{ "_id" : "29175", "city" : "WESTVILLE", "loc" : [ -80.579554, 34.449177 ], "pop" : 867, "state" : "SC" } +{ "_id" : "29178", "city" : "WHITMIRE", "loc" : [ -81.605981, 34.495485 ], "pop" : 3677, "state" : "SC" } +{ "_id" : "29180", "city" : "WINNSBORO", "loc" : [ -81.10899000000001, 34.381008 ], "pop" : 16188, "state" : "SC" } +{ "_id" : "29201", "city" : "COLUMBIA", "loc" : [ -81.033418, 34.0004 ], "pop" : 18758, "state" : "SC" } +{ "_id" : "29203", "city" : "COLUMBIA", "loc" : [ -81.026462, 34.063452 ], "pop" : 45907, "state" : "SC" } +{ "_id" : "29204", "city" : "COLUMBIA", "loc" : [ -81.00464700000001, 34.026037 ], "pop" : 23682, "state" : "SC" } +{ "_id" : "29205", "city" : "COLUMBIA", "loc" : [ -80.999731, 33.990309 ], "pop" : 27239, "state" : "SC" } +{ "_id" : "29206", "city" : "COLUMBIA", "loc" : [ -80.953152, 34.024655 ], "pop" : 25605, "state" : "SC" } +{ "_id" : "29209", "city" : "COLUMBIA", "loc" : [ -80.935525, 33.965863 ], "pop" : 26378, "state" : "SC" } +{ "_id" : "29210", "city" : "COLUMBIA", "loc" : [ -81.11006, 34.047863 ], "pop" : 37526, "state" : "SC" } +{ "_id" : "29212", "city" : "COLUMBIA", "loc" : [ -81.17961699999999, 34.072613 ], "pop" : 22080, "state" : "SC" } +{ "_id" : "29223", "city" : "COLUMBIA", "loc" : [ -80.91667, 34.085267 ], "pop" : 42346, "state" : "SC" } +{ "_id" : "29301", "city" : "SPARTANBURG", "loc" : [ -81.965377, 34.935211 ], "pop" : 45811, "state" : "SC" } +{ "_id" : "29302", "city" : "SPARTANBURG", "loc" : [ -81.873625, 34.956283 ], "pop" : 36446, "state" : "SC" } +{ "_id" : "29303", "city" : "VALLEY FALLS", "loc" : [ -81.957566, 34.993728 ], "pop" : 29166, "state" : "SC" } +{ "_id" : "29321", "city" : "BUFFALO", "loc" : [ -81.682576, 34.724703 ], "pop" : 1810, "state" : "SC" } +{ "_id" : "29322", "city" : "CAMPOBELLO", "loc" : [ -82.140343, 35.108003 ], "pop" : 7479, "state" : "SC" } +{ "_id" : "29323", "city" : "CHESNEE", "loc" : [ -81.86782700000001, 35.115398 ], "pop" : 14714, "state" : "SC" } +{ "_id" : "29325", "city" : "CLINTON", "loc" : [ -81.87717000000001, 34.470692 ], "pop" : 16265, "state" : "SC" } +{ "_id" : "29330", "city" : "COWPENS", "loc" : [ -81.822019, 35.038979 ], "pop" : 5279, "state" : "SC" } +{ "_id" : "29332", "city" : "CROSS HILL", "loc" : [ -81.984278, 34.269274 ], "pop" : 1089, "state" : "SC" } +{ "_id" : "29334", "city" : "DUNCAN", "loc" : [ -82.125821, 34.917645 ], "pop" : 5512, "state" : "SC" } +{ "_id" : "29335", "city" : "ENOREE", "loc" : [ -81.92373000000001, 34.670952 ], "pop" : 3310, "state" : "SC" } +{ "_id" : "29340", "city" : "GAFFNEY", "loc" : [ -81.649061, 35.061508 ], "pop" : 32761, "state" : "SC" } +{ "_id" : "29349", "city" : "INMAN", "loc" : [ -82.054013, 35.052795 ], "pop" : 23348, "state" : "SC" } +{ "_id" : "29351", "city" : "JOANNA", "loc" : [ -81.81907, 34.406795 ], "pop" : 2592, "state" : "SC" } +{ "_id" : "29353", "city" : "KELTON", "loc" : [ -81.684218, 34.837368 ], "pop" : 3504, "state" : "SC" } +{ "_id" : "29355", "city" : "KINARDS", "loc" : [ -81.71975, 34.355219 ], "pop" : 678, "state" : "SC" } +{ "_id" : "29356", "city" : "LANDRUM", "loc" : [ -82.211473, 35.156486 ], "pop" : 6521, "state" : "SC" } +{ "_id" : "29360", "city" : "ORA", "loc" : [ -82.026774, 34.500714 ], "pop" : 21437, "state" : "SC" } +{ "_id" : "29365", "city" : "LYMAN", "loc" : [ -82.143479, 34.968443 ], "pop" : 4515, "state" : "SC" } +{ "_id" : "29369", "city" : "MOORE", "loc" : [ -82.017893, 34.883453 ], "pop" : 6791, "state" : "SC" } +{ "_id" : "29370", "city" : "MOUNTVILLE", "loc" : [ -81.958429, 34.340791 ], "pop" : 1139, "state" : "SC" } +{ "_id" : "29372", "city" : "PACOLET", "loc" : [ -81.758703, 34.901708 ], "pop" : 4129, "state" : "SC" } +{ "_id" : "29374", "city" : "GLENN SPRINGS", "loc" : [ -81.85785300000001, 34.774808 ], "pop" : 4588, "state" : "SC" } +{ "_id" : "29376", "city" : "ROEBUCK", "loc" : [ -81.95255, 34.8688 ], "pop" : 5009, "state" : "SC" } +{ "_id" : "29379", "city" : "UNION", "loc" : [ -81.62023499999999, 34.726855 ], "pop" : 22553, "state" : "SC" } +{ "_id" : "29384", "city" : "WATERLOO", "loc" : [ -82.087968, 34.33673 ], "pop" : 2992, "state" : "SC" } +{ "_id" : "29385", "city" : "WELLFORD", "loc" : [ -82.09270600000001, 34.951394 ], "pop" : 6637, "state" : "SC" } +{ "_id" : "29388", "city" : "WOODRUFF", "loc" : [ -82.044658, 34.757864 ], "pop" : 10206, "state" : "SC" } +{ "_id" : "29401", "city" : "CHARLESTON", "loc" : [ -79.93706899999999, 32.779506 ], "pop" : 12475, "state" : "SC" } +{ "_id" : "29403", "city" : "CHARLESTON", "loc" : [ -79.94928299999999, 32.797575 ], "pop" : 24620, "state" : "SC" } +{ "_id" : "29404", "city" : "CHARLESTON", "loc" : [ -80.06768700000001, 32.895816 ], "pop" : 5420, "state" : "SC" } +{ "_id" : "29405", "city" : "CHARLESTON", "loc" : [ -79.97644200000001, 32.851206 ], "pop" : 30621, "state" : "SC" } +{ "_id" : "29406", "city" : "NORTH CHARLESTON", "loc" : [ -80.001053, 32.903035 ], "pop" : 27726, "state" : "SC" } +{ "_id" : "29407", "city" : "CHARLESTON", "loc" : [ -80.00595300000001, 32.799322 ], "pop" : 38597, "state" : "SC" } +{ "_id" : "29412", "city" : "CHARLESTON", "loc" : [ -79.95472700000001, 32.732319 ], "pop" : 29969, "state" : "SC" } +{ "_id" : "29414", "city" : "CHARLESTON", "loc" : [ -80.05675599999999, 32.821538 ], "pop" : 19404, "state" : "SC" } +{ "_id" : "29418", "city" : "CHARLESTON", "loc" : [ -80.055126, 32.907135 ], "pop" : 39784, "state" : "SC" } +{ "_id" : "29420", "city" : "CHARLESTON", "loc" : [ -80.08646299999999, 32.933096 ], "pop" : 11598, "state" : "SC" } +{ "_id" : "29426", "city" : "JERICHO", "loc" : [ -80.368197, 32.749318 ], "pop" : 1723, "state" : "SC" } +{ "_id" : "29429", "city" : "AWENDAW", "loc" : [ -79.686075, 32.951475 ], "pop" : 1831, "state" : "SC" } +{ "_id" : "29431", "city" : "BONNEAU", "loc" : [ -79.92164, 33.297332 ], "pop" : 7431, "state" : "SC" } +{ "_id" : "29432", "city" : "BRANCHVILLE", "loc" : [ -80.805931, 33.262802 ], "pop" : 2165, "state" : "SC" } +{ "_id" : "29434", "city" : "CORDESVILLE", "loc" : [ -79.920492, 33.162127 ], "pop" : 1382, "state" : "SC" } +{ "_id" : "29435", "city" : "COTTAGEVILLE", "loc" : [ -80.47941400000001, 32.961171 ], "pop" : 4105, "state" : "SC" } +{ "_id" : "29436", "city" : "CROSS", "loc" : [ -80.185901, 33.336373 ], "pop" : 3016, "state" : "SC" } +{ "_id" : "29437", "city" : "DORCHESTER", "loc" : [ -80.403398, 33.124688 ], "pop" : 928, "state" : "SC" } +{ "_id" : "29438", "city" : "EDISTO ISLAND", "loc" : [ -80.30701000000001, 32.548572 ], "pop" : 1669, "state" : "SC" } +{ "_id" : "29440", "city" : "GEORGETOWN", "loc" : [ -79.323459, 33.430776 ], "pop" : 29148, "state" : "SC" } +{ "_id" : "29445", "city" : "MOUNT HOLLY", "loc" : [ -80.019948, 32.988699 ], "pop" : 44954, "state" : "SC" } +{ "_id" : "29446", "city" : "GREEN POND", "loc" : [ -80.528035, 32.662827 ], "pop" : 2068, "state" : "SC" } +{ "_id" : "29448", "city" : "HARLEYVILLE", "loc" : [ -80.45009400000001, 33.220511 ], "pop" : 3289, "state" : "SC" } +{ "_id" : "29449", "city" : "MEGGETT", "loc" : [ -80.25956600000001, 32.722306 ], "pop" : 6397, "state" : "SC" } +{ "_id" : "29450", "city" : "HUGER", "loc" : [ -79.807254, 33.018436 ], "pop" : 1964, "state" : "SC" } +{ "_id" : "29451", "city" : "ISLE OF PALMS", "loc" : [ -79.772949, 32.794252 ], "pop" : 3680, "state" : "SC" } +{ "_id" : "29453", "city" : "SHULERVILLE", "loc" : [ -79.715551, 33.228797 ], "pop" : 1852, "state" : "SC" } +{ "_id" : "29455", "city" : "JOHNS ISLAND", "loc" : [ -80.094294, 32.709697 ], "pop" : 11756, "state" : "SC" } +{ "_id" : "29456", "city" : "LADSON", "loc" : [ -80.12570100000001, 32.993019 ], "pop" : 16216, "state" : "SC" } +{ "_id" : "29458", "city" : "MC CLELLANVILLE", "loc" : [ -79.47998200000001, 33.10472 ], "pop" : 3020, "state" : "SC" } +{ "_id" : "29461", "city" : "OAKLEY", "loc" : [ -80.036576, 33.163071 ], "pop" : 17822, "state" : "SC" } +{ "_id" : "29464", "city" : "MOUNT PLEASANT", "loc" : [ -79.852031, 32.816211 ], "pop" : 35432, "state" : "SC" } +{ "_id" : "29468", "city" : "PINEVILLE", "loc" : [ -80.093181, 33.419926 ], "pop" : 1411, "state" : "SC" } +{ "_id" : "29469", "city" : "PINOPOLIS", "loc" : [ -80.039761, 33.224125 ], "pop" : 958, "state" : "SC" } +{ "_id" : "29470", "city" : "RAVENEL", "loc" : [ -80.222346, 32.788088 ], "pop" : 3248, "state" : "SC" } +{ "_id" : "29471", "city" : "REEVESVILLE", "loc" : [ -80.66725, 33.187213 ], "pop" : 1342, "state" : "SC" } +{ "_id" : "29472", "city" : "RIDGEVILLE", "loc" : [ -80.308611, 33.108017 ], "pop" : 7494, "state" : "SC" } +{ "_id" : "29474", "city" : "ROUND O", "loc" : [ -80.573882, 32.940516 ], "pop" : 64, "state" : "SC" } +{ "_id" : "29475", "city" : "RUFFIN", "loc" : [ -80.813653, 33.010319 ], "pop" : 269, "state" : "SC" } +{ "_id" : "29477", "city" : "SAINT GEORGE", "loc" : [ -80.573246, 33.184532 ], "pop" : 6940, "state" : "SC" } +{ "_id" : "29479", "city" : "ALVIN", "loc" : [ -79.937635, 33.405953 ], "pop" : 5483, "state" : "SC" } +{ "_id" : "29481", "city" : "SMOAKS", "loc" : [ -80.81302100000001, 33.096319 ], "pop" : 2074, "state" : "SC" } +{ "_id" : "29482", "city" : "SULLIVANS ISLAND", "loc" : [ -79.839905, 32.763652 ], "pop" : 1623, "state" : "SC" } +{ "_id" : "29483", "city" : "SUMMERVILLE", "loc" : [ -80.173852, 33.028045 ], "pop" : 45292, "state" : "SC" } +{ "_id" : "29485", "city" : "SUMMERVILLE", "loc" : [ -80.183082, 32.975556 ], "pop" : 24856, "state" : "SC" } +{ "_id" : "29487", "city" : "WADMALAW ISLAND", "loc" : [ -80.182867, 32.652854 ], "pop" : 2570, "state" : "SC" } +{ "_id" : "29488", "city" : "RITTER", "loc" : [ -80.679225, 32.897367 ], "pop" : 24002, "state" : "SC" } +{ "_id" : "29492", "city" : "WANDO", "loc" : [ -79.86533, 32.962223 ], "pop" : 1433, "state" : "SC" } +{ "_id" : "29501", "city" : "FLORENCE", "loc" : [ -79.772786, 34.18375 ], "pop" : 66990, "state" : "SC" } +{ "_id" : "29505", "city" : "FLORENCE", "loc" : [ -79.775983, 34.256368 ], "pop" : 1440, "state" : "SC" } +{ "_id" : "29506", "city" : "QUINBY", "loc" : [ -79.79454699999999, 34.245178 ], "pop" : 0, "state" : "SC" } +{ "_id" : "29510", "city" : "ANDREWS", "loc" : [ -79.560438, 33.452525 ], "pop" : 9845, "state" : "SC" } +{ "_id" : "29511", "city" : "AYNOR", "loc" : [ -79.17773, 33.982271 ], "pop" : 6786, "state" : "SC" } +{ "_id" : "29512", "city" : "BENNETTSVILLE", "loc" : [ -79.689826, 34.625501 ], "pop" : 15751, "state" : "SC" } +{ "_id" : "29516", "city" : "BLENHEIM", "loc" : [ -79.65942200000001, 34.502033 ], "pop" : 2123, "state" : "SC" } +{ "_id" : "29518", "city" : "CADES", "loc" : [ -79.817567, 33.812017 ], "pop" : 2748, "state" : "SC" } +{ "_id" : "29520", "city" : "CHERAW", "loc" : [ -79.91741399999999, 34.686275 ], "pop" : 13063, "state" : "SC" } +{ "_id" : "29525", "city" : "CLIO", "loc" : [ -79.545255, 34.58052 ], "pop" : 2870, "state" : "SC" } +{ "_id" : "29526", "city" : "CONWAY", "loc" : [ -79.055712, 33.873066 ], "pop" : 17560, "state" : "SC" } +{ "_id" : "29527", "city" : "BUCKSPORT", "loc" : [ -79.050836, 33.77922 ], "pop" : 19781, "state" : "SC" } +{ "_id" : "29530", "city" : "COWARD", "loc" : [ -79.75152300000001, 33.990514 ], "pop" : 2098, "state" : "SC" } +{ "_id" : "29532", "city" : "DARLINGTON", "loc" : [ -79.873221, 34.300294 ], "pop" : 22271, "state" : "SC" } +{ "_id" : "29536", "city" : "DILLON", "loc" : [ -79.377015, 34.414553 ], "pop" : 9113, "state" : "SC" } +{ "_id" : "29541", "city" : "EFFINGHAM", "loc" : [ -79.791822, 34.094571 ], "pop" : 8031, "state" : "SC" } +{ "_id" : "29543", "city" : "FORK", "loc" : [ -79.250063, 34.28733 ], "pop" : 916, "state" : "SC" } +{ "_id" : "29544", "city" : "GALIVANTS FERRY", "loc" : [ -79.105915, 34.123801 ], "pop" : 1129, "state" : "SC" } +{ "_id" : "29545", "city" : "GREEN SEA", "loc" : [ -79.051613, 34.205105 ], "pop" : 1814, "state" : "SC" } +{ "_id" : "29546", "city" : "GRESHAM", "loc" : [ -79.356426, 33.906941 ], "pop" : 2262, "state" : "SC" } +{ "_id" : "29547", "city" : "SOUTH OF THE BOR", "loc" : [ -79.377871, 34.484556 ], "pop" : 4643, "state" : "SC" } +{ "_id" : "29550", "city" : "HARTSVILLE", "loc" : [ -80.084237, 34.375616 ], "pop" : 27888, "state" : "SC" } +{ "_id" : "29554", "city" : "HEMINGWAY", "loc" : [ -79.44889499999999, 33.741887 ], "pop" : 5578, "state" : "SC" } +{ "_id" : "29555", "city" : "JOHNSONVILLE", "loc" : [ -79.478256, 33.829873 ], "pop" : 6115, "state" : "SC" } +{ "_id" : "29556", "city" : "KINGSTREE", "loc" : [ -79.783221, 33.687841 ], "pop" : 16365, "state" : "SC" } +{ "_id" : "29560", "city" : "LAKE CITY", "loc" : [ -79.741794, 33.865473 ], "pop" : 11664, "state" : "SC" } +{ "_id" : "29563", "city" : "LAKE VIEW", "loc" : [ -79.192869, 34.34449 ], "pop" : 3513, "state" : "SC" } +{ "_id" : "29564", "city" : "LANE", "loc" : [ -79.871545, 33.50827 ], "pop" : 1730, "state" : "SC" } +{ "_id" : "29565", "city" : "LATTA", "loc" : [ -79.441704, 34.339829 ], "pop" : 6435, "state" : "SC" } +{ "_id" : "29566", "city" : "LITTLE RIVER", "loc" : [ -78.650829, 33.876806 ], "pop" : 6473, "state" : "SC" } +{ "_id" : "29567", "city" : "LITTLE ROCK", "loc" : [ -79.326948, 34.404803 ], "pop" : 4489, "state" : "SC" } +{ "_id" : "29568", "city" : "LONGS", "loc" : [ -78.793359, 33.906408 ], "pop" : 5936, "state" : "SC" } +{ "_id" : "29569", "city" : "LORIS", "loc" : [ -78.916096, 34.055756 ], "pop" : 11189, "state" : "SC" } +{ "_id" : "29570", "city" : "MC COLL", "loc" : [ -79.559741, 34.670406 ], "pop" : 5224, "state" : "SC" } +{ "_id" : "29571", "city" : "MARION", "loc" : [ -79.389822, 34.156195 ], "pop" : 16285, "state" : "SC" } +{ "_id" : "29572", "city" : "MYRTLE BEACH", "loc" : [ -78.80444799999999, 33.758701 ], "pop" : 7039, "state" : "SC" } +{ "_id" : "29574", "city" : "MULLINS", "loc" : [ -79.254155, 34.204441 ], "pop" : 12118, "state" : "SC" } +{ "_id" : "29575", "city" : "SURFSIDE BEACH", "loc" : [ -78.995228, 33.625245 ], "pop" : 24545, "state" : "SC" } +{ "_id" : "29576", "city" : "MURRELLS INLET", "loc" : [ -79.05275, 33.550717 ], "pop" : 4209, "state" : "SC" } +{ "_id" : "29577", "city" : "MYRTLE BEACH", "loc" : [ -78.913697, 33.699363 ], "pop" : 31917, "state" : "SC" } +{ "_id" : "29580", "city" : "NESMITH", "loc" : [ -79.551301, 33.591652 ], "pop" : 3297, "state" : "SC" } +{ "_id" : "29581", "city" : "NICHOLS", "loc" : [ -79.162493, 34.242629 ], "pop" : 1258, "state" : "SC" } +{ "_id" : "29582", "city" : "CHERRY GROVE BEA", "loc" : [ -78.67792, 33.822801 ], "pop" : 9910, "state" : "SC" } +{ "_id" : "29583", "city" : "PAMPLICO", "loc" : [ -79.592917, 33.992166 ], "pop" : 6291, "state" : "SC" } +{ "_id" : "29584", "city" : "PATRICK", "loc" : [ -80.064984, 34.559823 ], "pop" : 3800, "state" : "SC" } +{ "_id" : "29585", "city" : "PAWLEYS ISLAND", "loc" : [ -79.134128, 33.450825 ], "pop" : 5445, "state" : "SC" } +{ "_id" : "29590", "city" : "SALTERS", "loc" : [ -79.83002399999999, 33.561138 ], "pop" : 1932, "state" : "SC" } +{ "_id" : "29591", "city" : "SCRANTON", "loc" : [ -79.773101, 33.92813 ], "pop" : 4122, "state" : "SC" } +{ "_id" : "29592", "city" : "SELLERS", "loc" : [ -79.436948, 34.269522 ], "pop" : 1976, "state" : "SC" } +{ "_id" : "29593", "city" : "SOCIETY HILL", "loc" : [ -79.886494, 34.451161 ], "pop" : 3278, "state" : "SC" } +{ "_id" : "29596", "city" : "WALLACE", "loc" : [ -79.801142, 34.730704 ], "pop" : 3398, "state" : "SC" } +{ "_id" : "29601", "city" : "GREENVILLE", "loc" : [ -82.406049, 34.847165 ], "pop" : 11198, "state" : "SC" } +{ "_id" : "29605", "city" : "GREENVILLE", "loc" : [ -82.393218, 34.800117 ], "pop" : 32092, "state" : "SC" } +{ "_id" : "29607", "city" : "GREENVILLE", "loc" : [ -82.35155, 34.828507 ], "pop" : 26926, "state" : "SC" } +{ "_id" : "29609", "city" : "GREENVILLE", "loc" : [ -82.400195, 34.892101 ], "pop" : 35346, "state" : "SC" } +{ "_id" : "29611", "city" : "GREENVILLE", "loc" : [ -82.449296, 34.85331 ], "pop" : 43522, "state" : "SC" } +{ "_id" : "29615", "city" : "GREENVILLE", "loc" : [ -82.31981500000001, 34.866095 ], "pop" : 25818, "state" : "SC" } +{ "_id" : "29620", "city" : "ABBEVILLE", "loc" : [ -82.378452, 34.18186 ], "pop" : 11344, "state" : "SC" } +{ "_id" : "29621", "city" : "ANDERSON", "loc" : [ -82.630436, 34.526051 ], "pop" : 24256, "state" : "SC" } +{ "_id" : "29624", "city" : "ANDERSON", "loc" : [ -82.677052, 34.474807 ], "pop" : 26962, "state" : "SC" } +{ "_id" : "29625", "city" : "ANDERSON", "loc" : [ -82.70868, 34.527134 ], "pop" : 20105, "state" : "SC" } +{ "_id" : "29627", "city" : "BELTON", "loc" : [ -82.51010599999999, 34.508715 ], "pop" : 11371, "state" : "SC" } +{ "_id" : "29628", "city" : "CALHOUN FALLS", "loc" : [ -82.580544, 34.099912 ], "pop" : 3289, "state" : "SC" } +{ "_id" : "29630", "city" : "CENTRAL", "loc" : [ -82.79472699999999, 34.74007 ], "pop" : 8226, "state" : "SC" } +{ "_id" : "29631", "city" : "CLEMSON", "loc" : [ -82.825003, 34.683061 ], "pop" : 17987, "state" : "SC" } +{ "_id" : "29635", "city" : "CLEVELAND", "loc" : [ -82.609256, 35.06537 ], "pop" : 960, "state" : "SC" } +{ "_id" : "29638", "city" : "SHOALS JUNCTION", "loc" : [ -82.36661599999999, 34.399772 ], "pop" : 1347, "state" : "SC" } +{ "_id" : "29639", "city" : "DUE WEST", "loc" : [ -82.400164, 34.334425 ], "pop" : 3499, "state" : "SC" } +{ "_id" : "29640", "city" : "EASLEY", "loc" : [ -82.57955200000001, 34.829031 ], "pop" : 37862, "state" : "SC" } +{ "_id" : "29642", "city" : "EASLEY", "loc" : [ -82.561716, 34.960694 ], "pop" : 830, "state" : "SC" } +{ "_id" : "29643", "city" : "FAIR PLAY", "loc" : [ -82.99987400000001, 34.577548 ], "pop" : 6110, "state" : "SC" } +{ "_id" : "29644", "city" : "FOUNTAIN INN", "loc" : [ -82.264593, 34.653334 ], "pop" : 15233, "state" : "SC" } +{ "_id" : "29645", "city" : "ORA", "loc" : [ -82.15703499999999, 34.580984 ], "pop" : 9987, "state" : "SC" } +{ "_id" : "29646", "city" : "GREENWOOD", "loc" : [ -82.156211, 34.175802 ], "pop" : 23138, "state" : "SC" } +{ "_id" : "29649", "city" : "GREENWOOD", "loc" : [ -82.15818899999999, 34.222988 ], "pop" : 18588, "state" : "SC" } +{ "_id" : "29650", "city" : "GREER", "loc" : [ -82.267442, 34.8968 ], "pop" : 16460, "state" : "SC" } +{ "_id" : "29651", "city" : "GREER", "loc" : [ -82.220857, 34.94532 ], "pop" : 26573, "state" : "SC" } +{ "_id" : "29653", "city" : "HODGES", "loc" : [ -82.214225, 34.288167 ], "pop" : 5262, "state" : "SC" } +{ "_id" : "29654", "city" : "HONEA PATH", "loc" : [ -82.425471, 34.441723 ], "pop" : 7621, "state" : "SC" } +{ "_id" : "29655", "city" : "IVA", "loc" : [ -82.657437, 34.319847 ], "pop" : 5342, "state" : "SC" } +{ "_id" : "29657", "city" : "LIBERTY", "loc" : [ -82.697429, 34.787189 ], "pop" : 9519, "state" : "SC" } +{ "_id" : "29658", "city" : "LONG CREEK", "loc" : [ -83.18472800000001, 34.754954 ], "pop" : 1972, "state" : "SC" } +{ "_id" : "29659", "city" : "LOWNDESVILLE", "loc" : [ -82.571021, 34.26624 ], "pop" : 2565, "state" : "SC" } +{ "_id" : "29661", "city" : "MARIETTA", "loc" : [ -82.513622, 35.029644 ], "pop" : 6321, "state" : "SC" } +{ "_id" : "29662", "city" : "MAULDIN", "loc" : [ -82.303507, 34.780675 ], "pop" : 8871, "state" : "SC" } +{ "_id" : "29664", "city" : "MOUNTAIN REST", "loc" : [ -83.11340199999999, 34.854119 ], "pop" : 1717, "state" : "SC" } +{ "_id" : "29666", "city" : "NINETY SIX", "loc" : [ -82.029185, 34.165198 ], "pop" : 8668, "state" : "SC" } +{ "_id" : "29667", "city" : "CATEECHEE", "loc" : [ -82.755492, 34.765472 ], "pop" : 738, "state" : "SC" } +{ "_id" : "29669", "city" : "PELZER", "loc" : [ -82.46733399999999, 34.646063 ], "pop" : 3224, "state" : "SC" } +{ "_id" : "29670", "city" : "PENDLETON", "loc" : [ -82.740623, 34.63694 ], "pop" : 12288, "state" : "SC" } +{ "_id" : "29671", "city" : "PICKENS", "loc" : [ -82.70578399999999, 34.902403 ], "pop" : 16227, "state" : "SC" } +{ "_id" : "29673", "city" : "PIEDMONT", "loc" : [ -82.47021599999999, 34.724433 ], "pop" : 24083, "state" : "SC" } +{ "_id" : "29676", "city" : "SALEM", "loc" : [ -82.96068699999999, 34.872836 ], "pop" : 4091, "state" : "SC" } +{ "_id" : "29678", "city" : "SENECA", "loc" : [ -82.936162, 34.682797 ], "pop" : 20361, "state" : "SC" } +{ "_id" : "29681", "city" : "SIMPSONVILLE", "loc" : [ -82.255009, 34.751228 ], "pop" : 28438, "state" : "SC" } +{ "_id" : "29682", "city" : "SIX MILE", "loc" : [ -82.82779499999999, 34.828287 ], "pop" : 2757, "state" : "SC" } +{ "_id" : "29684", "city" : "STARR", "loc" : [ -82.68971000000001, 34.396196 ], "pop" : 2995, "state" : "SC" } +{ "_id" : "29685", "city" : "SUNSET", "loc" : [ -82.80763899999999, 34.970617 ], "pop" : 850, "state" : "SC" } +{ "_id" : "29686", "city" : "TAMASSEE", "loc" : [ -82.986138, 34.898229 ], "pop" : 156, "state" : "SC" } +{ "_id" : "29687", "city" : "TAYLORS", "loc" : [ -82.31968000000001, 34.924517 ], "pop" : 32831, "state" : "SC" } +{ "_id" : "29688", "city" : "TIGERVILLE", "loc" : [ -82.35823600000001, 35.094443 ], "pop" : 231, "state" : "SC" } +{ "_id" : "29689", "city" : "TOWNVILLE", "loc" : [ -82.89633000000001, 34.522638 ], "pop" : 1784, "state" : "SC" } +{ "_id" : "29690", "city" : "TRAVELERS REST", "loc" : [ -82.427179, 35.003929 ], "pop" : 14029, "state" : "SC" } +{ "_id" : "29691", "city" : "WALHALLA", "loc" : [ -83.03877799999999, 34.768902 ], "pop" : 14047, "state" : "SC" } +{ "_id" : "29692", "city" : "WARE SHOALS", "loc" : [ -82.26779000000001, 34.402491 ], "pop" : 4442, "state" : "SC" } +{ "_id" : "29693", "city" : "MADISON", "loc" : [ -83.110782, 34.658857 ], "pop" : 8933, "state" : "SC" } +{ "_id" : "29696", "city" : "WEST UNION", "loc" : [ -83.03988699999999, 34.751572 ], "pop" : 170, "state" : "SC" } +{ "_id" : "29697", "city" : "WILLIAMSTON", "loc" : [ -82.51100599999999, 34.620572 ], "pop" : 13511, "state" : "SC" } +{ "_id" : "29702", "city" : "CHEROKEE FALLS", "loc" : [ -81.508004, 35.115047 ], "pop" : 7481, "state" : "SC" } +{ "_id" : "29704", "city" : "CATAWBA", "loc" : [ -80.93415400000001, 34.850712 ], "pop" : 2451, "state" : "SC" } +{ "_id" : "29706", "city" : "CHESTER", "loc" : [ -81.21856, 34.714897 ], "pop" : 21920, "state" : "SC" } +{ "_id" : "29709", "city" : "CHESTERFIELD", "loc" : [ -80.09577, 34.727834 ], "pop" : 6286, "state" : "SC" } +{ "_id" : "29710", "city" : "LAKE WYLIE", "loc" : [ -81.186358, 35.110728 ], "pop" : 17905, "state" : "SC" } +{ "_id" : "29712", "city" : "EDGEMOOR", "loc" : [ -80.98909500000001, 34.797006 ], "pop" : 1725, "state" : "SC" } +{ "_id" : "29714", "city" : "FORT LAWN", "loc" : [ -80.909175, 34.70064 ], "pop" : 2106, "state" : "SC" } +{ "_id" : "29715", "city" : "TEGA CAY", "loc" : [ -80.95855899999999, 35.026001 ], "pop" : 17343, "state" : "SC" } +{ "_id" : "29717", "city" : "HICKORY GROVE", "loc" : [ -81.430599, 34.970833 ], "pop" : 932, "state" : "SC" } +{ "_id" : "29718", "city" : "JEFFERSON", "loc" : [ -80.363934, 34.654581 ], "pop" : 3257, "state" : "SC" } +{ "_id" : "29720", "city" : "LANCASTER", "loc" : [ -80.76157600000001, 34.749006 ], "pop" : 43745, "state" : "SC" } +{ "_id" : "29726", "city" : "MC CONNELLS", "loc" : [ -81.23680299999999, 34.867667 ], "pop" : 1431, "state" : "SC" } +{ "_id" : "29727", "city" : "MOUNT CROGHAN", "loc" : [ -80.242791, 34.743895 ], "pop" : 1584, "state" : "SC" } +{ "_id" : "29728", "city" : "PAGELAND", "loc" : [ -80.396615, 34.772193 ], "pop" : 7778, "state" : "SC" } +{ "_id" : "29729", "city" : "RICHBURG", "loc" : [ -80.98906100000001, 34.682185 ], "pop" : 2393, "state" : "SC" } +{ "_id" : "29730", "city" : "ROCK HILL", "loc" : [ -81.01290400000001, 34.915068 ], "pop" : 41461, "state" : "SC" } +{ "_id" : "29732", "city" : "ROCK HILL", "loc" : [ -81.04888099999999, 34.968066 ], "pop" : 30532, "state" : "SC" } +{ "_id" : "29741", "city" : "RUBY", "loc" : [ -80.190966, 34.737928 ], "pop" : 478, "state" : "SC" } +{ "_id" : "29742", "city" : "SHARON", "loc" : [ -81.372907, 34.908396 ], "pop" : 1175, "state" : "SC" } +{ "_id" : "29743", "city" : "SMYRNA", "loc" : [ -81.389606, 35.030784 ], "pop" : 877, "state" : "SC" } +{ "_id" : "29745", "city" : "YORK", "loc" : [ -81.224462, 34.994669 ], "pop" : 17279, "state" : "SC" } +{ "_id" : "29801", "city" : "AIKEN", "loc" : [ -81.71942900000001, 33.553024 ], "pop" : 51233, "state" : "SC" } +{ "_id" : "29803", "city" : "AIKEN", "loc" : [ -81.594702, 33.531868 ], "pop" : 743, "state" : "SC" } +{ "_id" : "29809", "city" : "NEW ELLENTON", "loc" : [ -81.687376, 33.417242 ], "pop" : 2586, "state" : "SC" } +{ "_id" : "29810", "city" : "ALLENDALE", "loc" : [ -81.32025400000001, 33.007676 ], "pop" : 5704, "state" : "SC" } +{ "_id" : "29812", "city" : "BARNWELL", "loc" : [ -81.35231, 33.233492 ], "pop" : 11016, "state" : "SC" } +{ "_id" : "29817", "city" : "BLACKVILLE", "loc" : [ -81.271844, 33.364476 ], "pop" : 4254, "state" : "SC" } +{ "_id" : "29819", "city" : "BRADLEY", "loc" : [ -82.20272300000001, 34.032587 ], "pop" : 1287, "state" : "SC" } +{ "_id" : "29821", "city" : "CLARKS HILL", "loc" : [ -82.14875000000001, 33.65052 ], "pop" : 439, "state" : "SC" } +{ "_id" : "29824", "city" : "EDGEFIELD", "loc" : [ -81.96602, 33.805553 ], "pop" : 6884, "state" : "SC" } +{ "_id" : "29827", "city" : "FAIRFAX", "loc" : [ -81.25864, 32.951455 ], "pop" : 4017, "state" : "SC" } +{ "_id" : "29829", "city" : "GRANITEVILLE", "loc" : [ -81.81468599999999, 33.563016 ], "pop" : 2858, "state" : "SC" } +{ "_id" : "29831", "city" : "JACKSON", "loc" : [ -81.797628, 33.338886 ], "pop" : 2810, "state" : "SC" } +{ "_id" : "29832", "city" : "JOHNSTON", "loc" : [ -81.797242, 33.823075 ], "pop" : 4616, "state" : "SC" } +{ "_id" : "29835", "city" : "MC CORMICK", "loc" : [ -82.271862, 33.914646 ], "pop" : 5426, "state" : "SC" } +{ "_id" : "29836", "city" : "MARTIN", "loc" : [ -81.500304, 33.109286 ], "pop" : 566, "state" : "SC" } +{ "_id" : "29838", "city" : "MODOC", "loc" : [ -82.203469, 33.724894 ], "pop" : 380, "state" : "SC" } +{ "_id" : "29840", "city" : "MOUNT CARMEL", "loc" : [ -82.43607, 33.970323 ], "pop" : 1354, "state" : "SC" } +{ "_id" : "29841", "city" : "BEECH ISLAND", "loc" : [ -81.934794, 33.517766 ], "pop" : 45886, "state" : "SC" } +{ "_id" : "29843", "city" : "OLAR", "loc" : [ -81.16404199999999, 33.18364 ], "pop" : 1503, "state" : "SC" } +{ "_id" : "29845", "city" : "PLUM BRANCH", "loc" : [ -82.248041, 33.832893 ], "pop" : 1144, "state" : "SC" } +{ "_id" : "29847", "city" : "TRENTON", "loc" : [ -81.853392, 33.693757 ], "pop" : 2825, "state" : "SC" } +{ "_id" : "29848", "city" : "TROY", "loc" : [ -82.294077, 33.955654 ], "pop" : 125, "state" : "SC" } +{ "_id" : "29849", "city" : "ULMER", "loc" : [ -81.22129200000001, 33.057597 ], "pop" : 1241, "state" : "SC" } +{ "_id" : "29851", "city" : "WARRENVILLE", "loc" : [ -81.829397, 33.519917 ], "pop" : 8739, "state" : "SC" } +{ "_id" : "29853", "city" : "WILLISTON", "loc" : [ -81.416146, 33.392608 ], "pop" : 5011, "state" : "SC" } +{ "_id" : "29856", "city" : "WINDSOR", "loc" : [ -81.513626, 33.467446 ], "pop" : 2264, "state" : "SC" } +{ "_id" : "29902", "city" : "BURTON", "loc" : [ -80.70902599999999, 32.418035 ], "pop" : 43849, "state" : "SC" } +{ "_id" : "29910", "city" : "BLUFFTON", "loc" : [ -80.872079, 32.251275 ], "pop" : 6912, "state" : "SC" } +{ "_id" : "29911", "city" : "BRUNSON", "loc" : [ -81.180719, 32.941297 ], "pop" : 1422, "state" : "SC" } +{ "_id" : "29916", "city" : "EARLY BRANCH", "loc" : [ -81.030011, 32.628893 ], "pop" : 1494, "state" : "SC" } +{ "_id" : "29918", "city" : "ESTILL", "loc" : [ -81.21776800000001, 32.737514 ], "pop" : 6210, "state" : "SC" } +{ "_id" : "29920", "city" : "ST HELENA ISLAND", "loc" : [ -80.533863, 32.380213 ], "pop" : 4669, "state" : "SC" } +{ "_id" : "29922", "city" : "GARNETT", "loc" : [ -81.23962899999999, 32.600666 ], "pop" : 61, "state" : "SC" } +{ "_id" : "29924", "city" : "HAMPTON", "loc" : [ -81.09733300000001, 32.87288 ], "pop" : 5987, "state" : "SC" } +{ "_id" : "29926", "city" : "HILTON HEAD ISLA", "loc" : [ -80.728088, 32.229426 ], "pop" : 9480, "state" : "SC" } +{ "_id" : "29927", "city" : "HARDEEVILLE", "loc" : [ -81.06686500000001, 32.263512 ], "pop" : 4948, "state" : "SC" } +{ "_id" : "29928", "city" : "HILTON HEAD ISLA", "loc" : [ -80.75657699999999, 32.158718 ], "pop" : 14504, "state" : "SC" } +{ "_id" : "29929", "city" : "ISLANDTON", "loc" : [ -80.891589, 32.950324 ], "pop" : 119, "state" : "SC" } +{ "_id" : "29932", "city" : "LURAY", "loc" : [ -81.223506, 32.86177 ], "pop" : 687, "state" : "SC" } +{ "_id" : "29934", "city" : "PINELAND", "loc" : [ -81.17611599999999, 32.602065 ], "pop" : 925, "state" : "SC" } +{ "_id" : "29935", "city" : "PORT ROYAL", "loc" : [ -80.69278, 32.384205 ], "pop" : 2526, "state" : "SC" } +{ "_id" : "29936", "city" : "COOSAWATCHIE", "loc" : [ -80.94943499999999, 32.491938 ], "pop" : 6342, "state" : "SC" } +{ "_id" : "29940", "city" : "SEABROOK", "loc" : [ -80.740793, 32.526884 ], "pop" : 915, "state" : "SC" } +{ "_id" : "29943", "city" : "TILLMAN", "loc" : [ -81.077567, 32.492719 ], "pop" : 1679, "state" : "SC" } +{ "_id" : "29944", "city" : "VARNVILLE", "loc" : [ -81.028839, 32.834893 ], "pop" : 1890, "state" : "SC" } +{ "_id" : "29945", "city" : "YEMASSEE", "loc" : [ -80.812932, 32.642983 ], "pop" : 5421, "state" : "SC" } +{ "_id" : "30001", "city" : "AUSTELL", "loc" : [ -84.605026, 33.807226 ], "pop" : 25021, "state" : "GA" } +{ "_id" : "30002", "city" : "AVONDALE ESTATES", "loc" : [ -84.26069099999999, 33.771727 ], "pop" : 4459, "state" : "GA" } +{ "_id" : "30021", "city" : "CLARKSTON", "loc" : [ -84.23882500000001, 33.810107 ], "pop" : 17325, "state" : "GA" } +{ "_id" : "30027", "city" : "CONLEY", "loc" : [ -84.32757100000001, 33.645104 ], "pop" : 6815, "state" : "GA" } +{ "_id" : "30030", "city" : "DECATUR", "loc" : [ -84.295044, 33.769883 ], "pop" : 23185, "state" : "GA" } +{ "_id" : "30032", "city" : "DECATUR", "loc" : [ -84.263165, 33.740825 ], "pop" : 56056, "state" : "GA" } +{ "_id" : "30033", "city" : "DECATUR", "loc" : [ -84.281918, 33.812305 ], "pop" : 22071, "state" : "GA" } +{ "_id" : "30034", "city" : "DECATUR", "loc" : [ -84.24893899999999, 33.695385 ], "pop" : 32312, "state" : "GA" } +{ "_id" : "30035", "city" : "DECATUR", "loc" : [ -84.21429999999999, 33.72784 ], "pop" : 15062, "state" : "GA" } +{ "_id" : "30038", "city" : "LITHONIA", "loc" : [ -84.16099699999999, 33.682311 ], "pop" : 15583, "state" : "GA" } +{ "_id" : "30049", "city" : "ELLENWOOD", "loc" : [ -84.26433299999999, 33.635376 ], "pop" : 16742, "state" : "GA" } +{ "_id" : "30050", "city" : "FOREST PARK", "loc" : [ -84.367075, 33.609737 ], "pop" : 26825, "state" : "GA" } +{ "_id" : "30057", "city" : "LITHIA SPRINGS", "loc" : [ -84.66081, 33.772999 ], "pop" : 14533, "state" : "GA" } +{ "_id" : "30058", "city" : "CENTERVILLE GWIN", "loc" : [ -84.09929099999999, 33.746412 ], "pop" : 37322, "state" : "GA" } +{ "_id" : "30059", "city" : "MABLETON", "loc" : [ -84.565062, 33.816572 ], "pop" : 22519, "state" : "GA" } +{ "_id" : "30060", "city" : "MARIETTA", "loc" : [ -84.564881, 33.909199 ], "pop" : 52530, "state" : "GA" } +{ "_id" : "30062", "city" : "MARIETTA", "loc" : [ -84.463291, 34.002521 ], "pop" : 52642, "state" : "GA" } +{ "_id" : "30064", "city" : "MARIETTA", "loc" : [ -84.607584, 33.934285 ], "pop" : 30260, "state" : "GA" } +{ "_id" : "30066", "city" : "MARIETTA", "loc" : [ -84.503817, 34.037807 ], "pop" : 41948, "state" : "GA" } +{ "_id" : "30067", "city" : "MARIETTA", "loc" : [ -84.473251, 33.928198 ], "pop" : 40460, "state" : "GA" } +{ "_id" : "30068", "city" : "MARIETTA", "loc" : [ -84.43854899999999, 33.967861 ], "pop" : 29488, "state" : "GA" } +{ "_id" : "30071", "city" : "NORCROSS", "loc" : [ -84.197158, 33.938145 ], "pop" : 16266, "state" : "GA" } +{ "_id" : "30073", "city" : "POWDER SPRINGS", "loc" : [ -84.68564499999999, 33.875377 ], "pop" : 27767, "state" : "GA" } +{ "_id" : "30075", "city" : "ROSWELL", "loc" : [ -84.385901, 34.040832 ], "pop" : 32144, "state" : "GA" } +{ "_id" : "30076", "city" : "ROSWELL", "loc" : [ -84.310408, 34.021324 ], "pop" : 34027, "state" : "GA" } +{ "_id" : "30079", "city" : "SCOTTDALE", "loc" : [ -84.258521, 33.793396 ], "pop" : 3288, "state" : "GA" } +{ "_id" : "30080", "city" : "SMYRNA", "loc" : [ -84.502284, 33.879602 ], "pop" : 36899, "state" : "GA" } +{ "_id" : "30082", "city" : "SMYRNA", "loc" : [ -84.538234, 33.863051 ], "pop" : 17917, "state" : "GA" } +{ "_id" : "30083", "city" : "STONE MOUNTAIN", "loc" : [ -84.20175399999999, 33.794233 ], "pop" : 48785, "state" : "GA" } +{ "_id" : "30084", "city" : "TUCKER", "loc" : [ -84.21602, 33.856986 ], "pop" : 29307, "state" : "GA" } +{ "_id" : "30087", "city" : "STONE MOUNTAIN", "loc" : [ -84.128829, 33.811511 ], "pop" : 27251, "state" : "GA" } +{ "_id" : "30088", "city" : "STONE MOUNTAIN", "loc" : [ -84.18022000000001, 33.75798 ], "pop" : 24029, "state" : "GA" } +{ "_id" : "30092", "city" : "NORCROSS", "loc" : [ -84.243787, 33.967688 ], "pop" : 19901, "state" : "GA" } +{ "_id" : "30093", "city" : "NORCROSS", "loc" : [ -84.183953, 33.905964 ], "pop" : 32345, "state" : "GA" } +{ "_id" : "30101", "city" : "ACWORTH", "loc" : [ -84.647741, 34.075627 ], "pop" : 37976, "state" : "GA" } +{ "_id" : "30103", "city" : "ADAIRSVILLE", "loc" : [ -84.91763400000001, 34.359527 ], "pop" : 7273, "state" : "GA" } +{ "_id" : "30104", "city" : "ARAGON", "loc" : [ -85.069559, 34.066556 ], "pop" : 4692, "state" : "GA" } +{ "_id" : "30105", "city" : "ARMUCHEE", "loc" : [ -85.184298, 34.441082 ], "pop" : 2131, "state" : "GA" } +{ "_id" : "30107", "city" : "BALL GROUND", "loc" : [ -84.375756, 34.339262 ], "pop" : 4064, "state" : "GA" } +{ "_id" : "30108", "city" : "BOWDON", "loc" : [ -85.25329000000001, 33.537259 ], "pop" : 7318, "state" : "GA" } +{ "_id" : "30110", "city" : "BREMEN", "loc" : [ -85.128638, 33.730872 ], "pop" : 8495, "state" : "GA" } +{ "_id" : "30113", "city" : "BUCHANAN", "loc" : [ -85.15055099999999, 33.82828 ], "pop" : 5931, "state" : "GA" } +{ "_id" : "30114", "city" : "CANTON", "loc" : [ -84.457756, 34.205874 ], "pop" : 35773, "state" : "GA" } +{ "_id" : "30117", "city" : "CARROLLTON", "loc" : [ -85.081211, 33.579751 ], "pop" : 40344, "state" : "GA" } +{ "_id" : "30120", "city" : "CARTERSVILLE", "loc" : [ -84.820401, 34.186975 ], "pop" : 33846, "state" : "GA" } +{ "_id" : "30124", "city" : "CAVE SPRING", "loc" : [ -85.337906, 34.116683 ], "pop" : 2650, "state" : "GA" } +{ "_id" : "30125", "city" : "CEDARTOWN", "loc" : [ -85.24590000000001, 34.011196 ], "pop" : 20720, "state" : "GA" } +{ "_id" : "30130", "city" : "CUMMING", "loc" : [ -84.146762, 34.220197 ], "pop" : 35496, "state" : "GA" } +{ "_id" : "30132", "city" : "DALLAS", "loc" : [ -84.827791, 33.916315 ], "pop" : 28118, "state" : "GA" } +{ "_id" : "30134", "city" : "DOUGLASVILLE", "loc" : [ -84.747719, 33.760645 ], "pop" : 17182, "state" : "GA" } +{ "_id" : "30135", "city" : "DOUGLASVILLE", "loc" : [ -84.745441, 33.698936 ], "pop" : 32887, "state" : "GA" } +{ "_id" : "30136", "city" : "DULUTH", "loc" : [ -84.15793600000001, 33.98619 ], "pop" : 30932, "state" : "GA" } +{ "_id" : "30137", "city" : "EMERSON", "loc" : [ -84.75704500000001, 34.119969 ], "pop" : 1353, "state" : "GA" } +{ "_id" : "30139", "city" : "FAIRMOUNT", "loc" : [ -84.76687800000001, 34.465241 ], "pop" : 3405, "state" : "GA" } +{ "_id" : "30140", "city" : "FELTON", "loc" : [ -85.220781, 33.887066 ], "pop" : 489, "state" : "GA" } +{ "_id" : "30141", "city" : "HIRAM", "loc" : [ -84.769875, 33.867286 ], "pop" : 6613, "state" : "GA" } +{ "_id" : "30143", "city" : "JASPER", "loc" : [ -84.475881, 34.461965 ], "pop" : 8256, "state" : "GA" } +{ "_id" : "30144", "city" : "KENNESAW", "loc" : [ -84.60466, 34.028656 ], "pop" : 37120, "state" : "GA" } +{ "_id" : "30145", "city" : "KINGSTON", "loc" : [ -84.997299, 34.250053 ], "pop" : 2534, "state" : "GA" } +{ "_id" : "30147", "city" : "LINDALE", "loc" : [ -85.182491, 34.170741 ], "pop" : 3502, "state" : "GA" } +{ "_id" : "30148", "city" : "MARBLE HILL", "loc" : [ -84.33715100000001, 34.415353 ], "pop" : 98, "state" : "GA" } +{ "_id" : "30153", "city" : "ROCKMART", "loc" : [ -85.05937, 33.997912 ], "pop" : 8946, "state" : "GA" } +{ "_id" : "30161", "city" : "ROME", "loc" : [ -85.146501, 34.250726 ], "pop" : 33058, "state" : "GA" } +{ "_id" : "30165", "city" : "ROME", "loc" : [ -85.223122, 34.283679 ], "pop" : 32739, "state" : "GA" } +{ "_id" : "30170", "city" : "ROOPVILLE", "loc" : [ -85.167148, 33.432226 ], "pop" : 2952, "state" : "GA" } +{ "_id" : "30171", "city" : "PINE LOG", "loc" : [ -84.780315, 34.392732 ], "pop" : 2257, "state" : "GA" } +{ "_id" : "30173", "city" : "SILVER CREEK", "loc" : [ -85.142933, 34.159272 ], "pop" : 5968, "state" : "GA" } +{ "_id" : "30174", "city" : "SUWANEE", "loc" : [ -84.082391, 34.057245 ], "pop" : 5965, "state" : "GA" } +{ "_id" : "30175", "city" : "TALKING ROCK", "loc" : [ -84.49115399999999, 34.539356 ], "pop" : 3037, "state" : "GA" } +{ "_id" : "30176", "city" : "TALLAPOOSA", "loc" : [ -85.30004700000001, 33.760174 ], "pop" : 6172, "state" : "GA" } +{ "_id" : "30177", "city" : "TATE", "loc" : [ -84.36529899999999, 34.42387 ], "pop" : 4286, "state" : "GA" } +{ "_id" : "30178", "city" : "TAYLORSVILLE", "loc" : [ -84.973859, 34.122941 ], "pop" : 2360, "state" : "GA" } +{ "_id" : "30179", "city" : "TEMPLE", "loc" : [ -85.01331500000001, 33.767687 ], "pop" : 7111, "state" : "GA" } +{ "_id" : "30180", "city" : "VILLA RICA", "loc" : [ -84.929697, 33.71729 ], "pop" : 12063, "state" : "GA" } +{ "_id" : "30182", "city" : "WACO", "loc" : [ -85.219674, 33.683986 ], "pop" : 2297, "state" : "GA" } +{ "_id" : "30183", "city" : "WALESKA", "loc" : [ -84.561981, 34.321662 ], "pop" : 3576, "state" : "GA" } +{ "_id" : "30184", "city" : "WHITE", "loc" : [ -84.738327, 34.271683 ], "pop" : 3231, "state" : "GA" } +{ "_id" : "30185", "city" : "WHITESBURG", "loc" : [ -84.925426, 33.511093 ], "pop" : 3115, "state" : "GA" } +{ "_id" : "30187", "city" : "WINSTON", "loc" : [ -84.86391500000001, 33.663419 ], "pop" : 6850, "state" : "GA" } +{ "_id" : "30188", "city" : "WOODSTOCK", "loc" : [ -84.511683, 34.106005 ], "pop" : 33172, "state" : "GA" } +{ "_id" : "30201", "city" : "ALPHARETTA", "loc" : [ -84.29516700000001, 34.107677 ], "pop" : 19393, "state" : "GA" } +{ "_id" : "30202", "city" : "ALPHARETTA", "loc" : [ -84.238972, 34.035487 ], "pop" : 24814, "state" : "GA" } +{ "_id" : "30203", "city" : "AUBURN", "loc" : [ -83.824128, 34.007758 ], "pop" : 6457, "state" : "GA" } +{ "_id" : "30204", "city" : "BARNESVILLE", "loc" : [ -84.15147, 33.045713 ], "pop" : 9595, "state" : "GA" } +{ "_id" : "30205", "city" : "BROOKS", "loc" : [ -84.476941, 33.298433 ], "pop" : 1662, "state" : "GA" } +{ "_id" : "30206", "city" : "CONCORD", "loc" : [ -84.447025, 33.099836 ], "pop" : 1591, "state" : "GA" } +{ "_id" : "30207", "city" : "CONYERS", "loc" : [ -84.019818, 33.682932 ], "pop" : 24526, "state" : "GA" } +{ "_id" : "30208", "city" : "CONYERS", "loc" : [ -84.01268899999999, 33.607711 ], "pop" : 24236, "state" : "GA" } +{ "_id" : "30209", "city" : "STARRSVILLE", "loc" : [ -83.89075200000001, 33.570328 ], "pop" : 35231, "state" : "GA" } +{ "_id" : "30211", "city" : "DACULA", "loc" : [ -83.883849, 33.988234 ], "pop" : 7320, "state" : "GA" } +{ "_id" : "30213", "city" : "FAIRBURN", "loc" : [ -84.58085699999999, 33.56482 ], "pop" : 14110, "state" : "GA" } +{ "_id" : "30214", "city" : "WOOLSEY", "loc" : [ -84.46358600000001, 33.448054 ], "pop" : 35007, "state" : "GA" } +{ "_id" : "30216", "city" : "FLOVILLA", "loc" : [ -83.907938, 33.250012 ], "pop" : 2238, "state" : "GA" } +{ "_id" : "30217", "city" : "GLENN", "loc" : [ -85.105459, 33.291073 ], "pop" : 7230, "state" : "GA" } +{ "_id" : "30218", "city" : "ALVATON", "loc" : [ -84.58057599999999, 33.149902 ], "pop" : 2327, "state" : "GA" } +{ "_id" : "30220", "city" : "GRANTVILLE", "loc" : [ -84.83497699999999, 33.247253 ], "pop" : 1825, "state" : "GA" } +{ "_id" : "30221", "city" : "GRAYSON", "loc" : [ -83.97984599999999, 33.898344 ], "pop" : 5528, "state" : "GA" } +{ "_id" : "30222", "city" : "STOVALL", "loc" : [ -84.74217299999999, 33.037169 ], "pop" : 4507, "state" : "GA" } +{ "_id" : "30223", "city" : "GRIFFIN", "loc" : [ -84.27275899999999, 33.2549 ], "pop" : 53247, "state" : "GA" } +{ "_id" : "30228", "city" : "HAMPTON", "loc" : [ -84.29474399999999, 33.412398 ], "pop" : 10969, "state" : "GA" } +{ "_id" : "30230", "city" : "HOGANSVILLE", "loc" : [ -84.93085600000001, 33.164382 ], "pop" : 6378, "state" : "GA" } +{ "_id" : "30233", "city" : "JACKSON", "loc" : [ -83.978391, 33.282006 ], "pop" : 13206, "state" : "GA" } +{ "_id" : "30234", "city" : "JENKINSBURG", "loc" : [ -84.026122, 33.318619 ], "pop" : 1242, "state" : "GA" } +{ "_id" : "30236", "city" : "JONESBORO", "loc" : [ -84.358968, 33.524236 ], "pop" : 55409, "state" : "GA" } +{ "_id" : "30240", "city" : "LA GRANGE", "loc" : [ -85.039511, 33.034025 ], "pop" : 43081, "state" : "GA" } +{ "_id" : "30243", "city" : "LAWRENCEVILLE", "loc" : [ -84.014944, 34.005049 ], "pop" : 24119, "state" : "GA" } +{ "_id" : "30244", "city" : "LAWRENCEVILLE", "loc" : [ -84.08165200000001, 33.923781 ], "pop" : 37778, "state" : "GA" } +{ "_id" : "30245", "city" : "LAWRENCEVILLE", "loc" : [ -83.996413, 33.944293 ], "pop" : 30171, "state" : "GA" } +{ "_id" : "30247", "city" : "LILBURN", "loc" : [ -84.119595, 33.873182 ], "pop" : 46637, "state" : "GA" } +{ "_id" : "30248", "city" : "LOCUST GROVE", "loc" : [ -84.09824999999999, 33.344936 ], "pop" : 5812, "state" : "GA" } +{ "_id" : "30249", "city" : "LOGANVILLE", "loc" : [ -83.903631, 33.83366 ], "pop" : 14843, "state" : "GA" } +{ "_id" : "30251", "city" : "LUTHERSVILLE", "loc" : [ -84.757707, 33.179817 ], "pop" : 3389, "state" : "GA" } +{ "_id" : "30253", "city" : "MC DONOUGH", "loc" : [ -84.135751, 33.46466 ], "pop" : 18550, "state" : "GA" } +{ "_id" : "30255", "city" : "MANSFIELD", "loc" : [ -83.727638, 33.540373 ], "pop" : 1438, "state" : "GA" } +{ "_id" : "30256", "city" : "MEANSVILLE", "loc" : [ -84.31693799999999, 33.013387 ], "pop" : 1668, "state" : "GA" } +{ "_id" : "30257", "city" : "MILNER", "loc" : [ -84.175909, 33.141023 ], "pop" : 3789, "state" : "GA" } +{ "_id" : "30258", "city" : "MOLENA", "loc" : [ -84.45578, 32.997845 ], "pop" : 2055, "state" : "GA" } +{ "_id" : "30259", "city" : "MORELAND", "loc" : [ -84.75655999999999, 33.273437 ], "pop" : 2056, "state" : "GA" } +{ "_id" : "30260", "city" : "MORROW", "loc" : [ -84.32469500000001, 33.584934 ], "pop" : 20584, "state" : "GA" } +{ "_id" : "30262", "city" : "NEWBORN", "loc" : [ -83.668396, 33.494923 ], "pop" : 1491, "state" : "GA" } +{ "_id" : "30263", "city" : "RAYMOND", "loc" : [ -84.816952, 33.389404 ], "pop" : 32379, "state" : "GA" } +{ "_id" : "30265", "city" : "NEWNAN", "loc" : [ -84.712062, 33.39576 ], "pop" : 5345, "state" : "GA" } +{ "_id" : "30267", "city" : "OXFORD", "loc" : [ -83.863517, 33.686474 ], "pop" : 10601, "state" : "GA" } +{ "_id" : "30268", "city" : "PALMETTO", "loc" : [ -84.678999, 33.524195 ], "pop" : 5838, "state" : "GA" } +{ "_id" : "30269", "city" : "PEACHTREE CITY", "loc" : [ -84.563478, 33.391467 ], "pop" : 18724, "state" : "GA" } +{ "_id" : "30273", "city" : "REX", "loc" : [ -84.278228, 33.580805 ], "pop" : 7218, "state" : "GA" } +{ "_id" : "30274", "city" : "RIVERDALE", "loc" : [ -84.40034799999999, 33.553126 ], "pop" : 23621, "state" : "GA" } +{ "_id" : "30276", "city" : "SENOIA", "loc" : [ -84.591779, 33.284459 ], "pop" : 4653, "state" : "GA" } +{ "_id" : "30277", "city" : "SHARPSBURG", "loc" : [ -84.654027, 33.401287 ], "pop" : 5956, "state" : "GA" } +{ "_id" : "30278", "city" : "SNELLVILLE", "loc" : [ -84.02801100000001, 33.848607 ], "pop" : 34314, "state" : "GA" } +{ "_id" : "30279", "city" : "SOCIAL CIRCLE", "loc" : [ -83.706149, 33.656386 ], "pop" : 4598, "state" : "GA" } +{ "_id" : "30281", "city" : "STOCKBRIDGE", "loc" : [ -84.21648999999999, 33.563343 ], "pop" : 25401, "state" : "GA" } +{ "_id" : "30285", "city" : "THE ROCK", "loc" : [ -84.24235899999999, 32.971734 ], "pop" : 333, "state" : "GA" } +{ "_id" : "30286", "city" : "THOMASTON", "loc" : [ -84.33240000000001, 32.901534 ], "pop" : 22925, "state" : "GA" } +{ "_id" : "30290", "city" : "TYRONE", "loc" : [ -84.591357, 33.471948 ], "pop" : 3555, "state" : "GA" } +{ "_id" : "30291", "city" : "UNION CITY", "loc" : [ -84.549853, 33.583155 ], "pop" : 7411, "state" : "GA" } +{ "_id" : "30292", "city" : "WILLIAMSON", "loc" : [ -84.379493, 33.159838 ], "pop" : 2940, "state" : "GA" } +{ "_id" : "30293", "city" : "WOODBURY", "loc" : [ -84.59863199999999, 32.981318 ], "pop" : 3648, "state" : "GA" } +{ "_id" : "30295", "city" : "ZEBULON", "loc" : [ -84.310827, 33.100235 ], "pop" : 2470, "state" : "GA" } +{ "_id" : "30296", "city" : "RIVERDALE", "loc" : [ -84.43644999999999, 33.566716 ], "pop" : 18577, "state" : "GA" } +{ "_id" : "30303", "city" : "ATLANTA", "loc" : [ -84.388846, 33.752504 ], "pop" : 1845, "state" : "GA" } +{ "_id" : "30305", "city" : "ATLANTA", "loc" : [ -84.38514499999999, 33.831963 ], "pop" : 19122, "state" : "GA" } +{ "_id" : "30306", "city" : "ATLANTA", "loc" : [ -84.351418, 33.786027 ], "pop" : 20081, "state" : "GA" } +{ "_id" : "30307", "city" : "ATLANTA", "loc" : [ -84.33595699999999, 33.769138 ], "pop" : 16330, "state" : "GA" } +{ "_id" : "30308", "city" : "ATLANTA", "loc" : [ -84.375744, 33.771839 ], "pop" : 8549, "state" : "GA" } +{ "_id" : "30309", "city" : "ATLANTA", "loc" : [ -84.388338, 33.798407 ], "pop" : 14766, "state" : "GA" } +{ "_id" : "30310", "city" : "ATLANTA", "loc" : [ -84.42317300000001, 33.727849 ], "pop" : 34017, "state" : "GA" } +{ "_id" : "30311", "city" : "ATLANTA", "loc" : [ -84.470219, 33.722957 ], "pop" : 34880, "state" : "GA" } +{ "_id" : "30312", "city" : "ATLANTA", "loc" : [ -84.378125, 33.746749 ], "pop" : 17683, "state" : "GA" } +{ "_id" : "30313", "city" : "ATLANTA", "loc" : [ -84.39352, 33.76825 ], "pop" : 8038, "state" : "GA" } +{ "_id" : "30314", "city" : "ATLANTA", "loc" : [ -84.425546, 33.756103 ], "pop" : 26649, "state" : "GA" } +{ "_id" : "30315", "city" : "ATLANTA", "loc" : [ -84.380771, 33.705062 ], "pop" : 41061, "state" : "GA" } +{ "_id" : "30316", "city" : "ATLANTA", "loc" : [ -84.333913, 33.721686 ], "pop" : 34668, "state" : "GA" } +{ "_id" : "30317", "city" : "ATLANTA", "loc" : [ -84.31685, 33.749788 ], "pop" : 16395, "state" : "GA" } +{ "_id" : "30318", "city" : "ATLANTA", "loc" : [ -84.445432, 33.786454 ], "pop" : 53894, "state" : "GA" } +{ "_id" : "30319", "city" : "ATLANTA", "loc" : [ -84.33509100000001, 33.868728 ], "pop" : 32138, "state" : "GA" } +{ "_id" : "30324", "city" : "ATLANTA", "loc" : [ -84.354867, 33.820609 ], "pop" : 15044, "state" : "GA" } +{ "_id" : "30326", "city" : "ATLANTA", "loc" : [ -84.358232, 33.848168 ], "pop" : 125, "state" : "GA" } +{ "_id" : "30327", "city" : "ATLANTA", "loc" : [ -84.419966, 33.862723 ], "pop" : 18467, "state" : "GA" } +{ "_id" : "30328", "city" : "SANDY SPRINGS", "loc" : [ -84.38114299999999, 33.936295 ], "pop" : 24238, "state" : "GA" } +{ "_id" : "30329", "city" : "ATLANTA", "loc" : [ -84.32140200000001, 33.823555 ], "pop" : 17013, "state" : "GA" } +{ "_id" : "30330", "city" : "ATLANTA", "loc" : [ -84.434735, 33.70645 ], "pop" : 643, "state" : "GA" } +{ "_id" : "30331", "city" : "ATLANTA", "loc" : [ -84.52046799999999, 33.72241 ], "pop" : 38185, "state" : "GA" } +{ "_id" : "30334", "city" : "ATLANTA", "loc" : [ -84.388188, 33.74715 ], "pop" : 0, "state" : "GA" } +{ "_id" : "30336", "city" : "ATLANTA", "loc" : [ -84.51002800000001, 33.78534 ], "pop" : 1228, "state" : "GA" } +{ "_id" : "30337", "city" : "COLLEGE PARK", "loc" : [ -84.460849, 33.644227 ], "pop" : 18106, "state" : "GA" } +{ "_id" : "30338", "city" : "DUNWOODY", "loc" : [ -84.316529, 33.944313 ], "pop" : 23565, "state" : "GA" } +{ "_id" : "30339", "city" : "ATLANTA", "loc" : [ -84.462879, 33.87125 ], "pop" : 11158, "state" : "GA" } +{ "_id" : "30340", "city" : "DORAVILLE", "loc" : [ -84.248265, 33.896377 ], "pop" : 22862, "state" : "GA" } +{ "_id" : "30341", "city" : "CHAMBLEE", "loc" : [ -84.286969, 33.886727 ], "pop" : 26846, "state" : "GA" } +{ "_id" : "30342", "city" : "ATLANTA", "loc" : [ -84.376091, 33.884245 ], "pop" : 19057, "state" : "GA" } +{ "_id" : "30344", "city" : "EAST POINT", "loc" : [ -84.457292, 33.676214 ], "pop" : 33489, "state" : "GA" } +{ "_id" : "30345", "city" : "ATLANTA", "loc" : [ -84.28696100000001, 33.851347 ], "pop" : 19825, "state" : "GA" } +{ "_id" : "30346", "city" : "ATLANTA", "loc" : [ -84.333354, 33.926717 ], "pop" : 18, "state" : "GA" } +{ "_id" : "30349", "city" : "ATLANTA", "loc" : [ -84.481258, 33.605331 ], "pop" : 48116, "state" : "GA" } +{ "_id" : "30350", "city" : "ATLANTA", "loc" : [ -84.34114599999999, 33.979471 ], "pop" : 24573, "state" : "GA" } +{ "_id" : "30354", "city" : "HAPEVILLE", "loc" : [ -84.38702499999999, 33.66546 ], "pop" : 16349, "state" : "GA" } +{ "_id" : "30360", "city" : "ATLANTA", "loc" : [ -84.27164500000001, 33.937772 ], "pop" : 16023, "state" : "GA" } +{ "_id" : "30401", "city" : "OAK PARK", "loc" : [ -82.338668, 32.581938 ], "pop" : 12918, "state" : "GA" } +{ "_id" : "30410", "city" : "AILEY", "loc" : [ -82.47619, 32.214262 ], "pop" : 1004, "state" : "GA" } +{ "_id" : "30411", "city" : "ALAMO", "loc" : [ -82.794445, 32.13298 ], "pop" : 2584, "state" : "GA" } +{ "_id" : "30413", "city" : "BARTOW", "loc" : [ -82.470788, 32.863186 ], "pop" : 945, "state" : "GA" } +{ "_id" : "30415", "city" : "BROOKLET", "loc" : [ -81.62800300000001, 32.294046 ], "pop" : 4850, "state" : "GA" } +{ "_id" : "30417", "city" : "CLAXTON", "loc" : [ -81.90803200000001, 32.165009 ], "pop" : 8724, "state" : "GA" } +{ "_id" : "30420", "city" : "COBBTOWN", "loc" : [ -82.133274, 32.264237 ], "pop" : 1482, "state" : "GA" } +{ "_id" : "30421", "city" : "COLLINS", "loc" : [ -82.10948, 32.185228 ], "pop" : 1298, "state" : "GA" } +{ "_id" : "30425", "city" : "GARFIELD", "loc" : [ -82.085599, 32.600776 ], "pop" : 593, "state" : "GA" } +{ "_id" : "30426", "city" : "GIRARD", "loc" : [ -81.710581, 33.043689 ], "pop" : 1074, "state" : "GA" } +{ "_id" : "30427", "city" : "GLENNVILLE", "loc" : [ -81.948313, 31.946708 ], "pop" : 7702, "state" : "GA" } +{ "_id" : "30428", "city" : "GLENWOOD", "loc" : [ -82.675881, 32.157243 ], "pop" : 2319, "state" : "GA" } +{ "_id" : "30434", "city" : "LOUISVILLE", "loc" : [ -82.383616, 33.016342 ], "pop" : 7089, "state" : "GA" } +{ "_id" : "30436", "city" : "LYONS", "loc" : [ -82.307783, 32.171148 ], "pop" : 8675, "state" : "GA" } +{ "_id" : "30438", "city" : "MANASSAS", "loc" : [ -82.052925, 32.096551 ], "pop" : 955, "state" : "GA" } +{ "_id" : "30439", "city" : "METTER", "loc" : [ -82.060722, 32.401034 ], "pop" : 7744, "state" : "GA" } +{ "_id" : "30441", "city" : "MIDVILLE", "loc" : [ -82.20418100000001, 32.863794 ], "pop" : 1533, "state" : "GA" } +{ "_id" : "30442", "city" : "MILLEN", "loc" : [ -81.96180699999999, 32.787739 ], "pop" : 7700, "state" : "GA" } +{ "_id" : "30445", "city" : "MOUNT VERNON", "loc" : [ -82.58672, 32.18398 ], "pop" : 3097, "state" : "GA" } +{ "_id" : "30446", "city" : "NEWINGTON", "loc" : [ -81.532686, 32.588385 ], "pop" : 2296, "state" : "GA" } +{ "_id" : "30450", "city" : "PORTAL", "loc" : [ -81.912257, 32.55504 ], "pop" : 3160, "state" : "GA" } +{ "_id" : "30452", "city" : "REGISTER", "loc" : [ -81.872828, 32.338235 ], "pop" : 1655, "state" : "GA" } +{ "_id" : "30453", "city" : "REIDSVILLE", "loc" : [ -82.147809, 32.054759 ], "pop" : 6286, "state" : "GA" } +{ "_id" : "30454", "city" : "ROCKLEDGE", "loc" : [ -82.747939, 32.391507 ], "pop" : 160, "state" : "GA" } +{ "_id" : "30455", "city" : "ROCKY FORD", "loc" : [ -81.741749, 32.656863 ], "pop" : 1554, "state" : "GA" } +{ "_id" : "30456", "city" : "SARDIS", "loc" : [ -81.773039, 32.980946 ], "pop" : 1901, "state" : "GA" } +{ "_id" : "30457", "city" : "SOPERTON", "loc" : [ -82.587098, 32.386861 ], "pop" : 5996, "state" : "GA" } +{ "_id" : "30458", "city" : "STATESBORO", "loc" : [ -81.773956, 32.440841 ], "pop" : 33469, "state" : "GA" } +{ "_id" : "30467", "city" : "HILTONIA", "loc" : [ -81.633394, 32.77627 ], "pop" : 9991, "state" : "GA" } +{ "_id" : "30470", "city" : "TARRYTOWN", "loc" : [ -82.51693299999999, 32.290623 ], "pop" : 1181, "state" : "GA" } +{ "_id" : "30471", "city" : "TWIN CITY", "loc" : [ -82.197856, 32.612926 ], "pop" : 5531, "state" : "GA" } +{ "_id" : "30473", "city" : "UVALDA", "loc" : [ -82.50887899999999, 32.048271 ], "pop" : 1881, "state" : "GA" } +{ "_id" : "30474", "city" : "VIDALIA", "loc" : [ -82.406724, 32.193408 ], "pop" : 15396, "state" : "GA" } +{ "_id" : "30477", "city" : "WADLEY", "loc" : [ -82.40245899999999, 32.874742 ], "pop" : 3376, "state" : "GA" } +{ "_id" : "30501", "city" : "GAINESVILLE", "loc" : [ -83.825596, 34.307269 ], "pop" : 22334, "state" : "GA" } +{ "_id" : "30504", "city" : "GAINESVILLE", "loc" : [ -83.879311, 34.272281 ], "pop" : 10061, "state" : "GA" } +{ "_id" : "30506", "city" : "GAINESVILLE", "loc" : [ -83.888211, 34.356227 ], "pop" : 22232, "state" : "GA" } +{ "_id" : "30507", "city" : "GAINESVILLE", "loc" : [ -83.771625, 34.25915 ], "pop" : 13327, "state" : "GA" } +{ "_id" : "30510", "city" : "ALTO", "loc" : [ -83.601996, 34.459079 ], "pop" : 4701, "state" : "GA" } +{ "_id" : "30511", "city" : "BALDWIN", "loc" : [ -83.529781, 34.456411 ], "pop" : 3969, "state" : "GA" } +{ "_id" : "30512", "city" : "BLAIRSVILLE", "loc" : [ -83.99202699999999, 34.876253 ], "pop" : 11360, "state" : "GA" } +{ "_id" : "30513", "city" : "BLUE RIDGE", "loc" : [ -84.328087, 34.855523 ], "pop" : 4844, "state" : "GA" } +{ "_id" : "30516", "city" : "BOWERSVILLE", "loc" : [ -83.04836400000001, 34.399592 ], "pop" : 2082, "state" : "GA" } +{ "_id" : "30517", "city" : "BRASELTON", "loc" : [ -83.78116199999999, 34.138941 ], "pop" : 3142, "state" : "GA" } +{ "_id" : "30518", "city" : "BUFORD", "loc" : [ -83.996459, 34.112373 ], "pop" : 24810, "state" : "GA" } +{ "_id" : "30520", "city" : "CANON", "loc" : [ -83.126693, 34.347766 ], "pop" : 1393, "state" : "GA" } +{ "_id" : "30521", "city" : "CARNESVILLE", "loc" : [ -83.27920899999999, 34.394723 ], "pop" : 4135, "state" : "GA" } +{ "_id" : "30522", "city" : "CHERRYLOG", "loc" : [ -84.443136, 34.773711 ], "pop" : 2150, "state" : "GA" } +{ "_id" : "30523", "city" : "CLARKESVILLE", "loc" : [ -83.524304, 34.644993 ], "pop" : 8931, "state" : "GA" } +{ "_id" : "30525", "city" : "CLAYTON", "loc" : [ -83.40655, 34.882569 ], "pop" : 6700, "state" : "GA" } +{ "_id" : "30527", "city" : "CLERMONT", "loc" : [ -83.78531099999999, 34.476091 ], "pop" : 2336, "state" : "GA" } +{ "_id" : "30528", "city" : "CLEVELAND", "loc" : [ -83.749985, 34.583949 ], "pop" : 11036, "state" : "GA" } +{ "_id" : "30529", "city" : "COMMERCE", "loc" : [ -83.44801099999999, 34.213413 ], "pop" : 8792, "state" : "GA" } +{ "_id" : "30531", "city" : "CORNELIA", "loc" : [ -83.54527, 34.520882 ], "pop" : 7597, "state" : "GA" } +{ "_id" : "30533", "city" : "DAHLONEGA", "loc" : [ -83.979838, 34.529949 ], "pop" : 15003, "state" : "GA" } +{ "_id" : "30534", "city" : "JUNO", "loc" : [ -84.10370500000001, 34.394331 ], "pop" : 10196, "state" : "GA" } +{ "_id" : "30535", "city" : "DEMOREST", "loc" : [ -83.569625, 34.575564 ], "pop" : 3521, "state" : "GA" } +{ "_id" : "30537", "city" : "SKY VALLEY", "loc" : [ -83.38011299999999, 34.979659 ], "pop" : 328, "state" : "GA" } +{ "_id" : "30538", "city" : "EASTANOLLEE", "loc" : [ -83.258685, 34.50366 ], "pop" : 1478, "state" : "GA" } +{ "_id" : "30539", "city" : "EAST ELLIJAY", "loc" : [ -84.473062, 34.682636 ], "pop" : 314, "state" : "GA" } +{ "_id" : "30540", "city" : "ELLIJAY", "loc" : [ -84.48122600000001, 34.677514 ], "pop" : 9672, "state" : "GA" } +{ "_id" : "30541", "city" : "EPWORTH", "loc" : [ -84.441593, 34.944249 ], "pop" : 1523, "state" : "GA" } +{ "_id" : "30542", "city" : "FLOWERY BRANCH", "loc" : [ -83.902407, 34.181893 ], "pop" : 9361, "state" : "GA" } +{ "_id" : "30543", "city" : "GILLSVILLE", "loc" : [ -83.675681, 34.300148 ], "pop" : 1585, "state" : "GA" } +{ "_id" : "30545", "city" : "HELEN", "loc" : [ -83.739936, 34.686601 ], "pop" : 469, "state" : "GA" } +{ "_id" : "30546", "city" : "HIAWASSEE", "loc" : [ -83.7478, 34.937667 ], "pop" : 5067, "state" : "GA" } +{ "_id" : "30547", "city" : "HOMER", "loc" : [ -83.497432, 34.356312 ], "pop" : 2949, "state" : "GA" } +{ "_id" : "30548", "city" : "HOSCHTON", "loc" : [ -83.780253, 34.086578 ], "pop" : 3444, "state" : "GA" } +{ "_id" : "30549", "city" : "JEFFERSON", "loc" : [ -83.570813, 34.106197 ], "pop" : 8795, "state" : "GA" } +{ "_id" : "30552", "city" : "LAKEMONT", "loc" : [ -83.403763, 34.761697 ], "pop" : 338, "state" : "GA" } +{ "_id" : "30553", "city" : "LAVONIA", "loc" : [ -83.11299200000001, 34.452758 ], "pop" : 5797, "state" : "GA" } +{ "_id" : "30554", "city" : "LULA", "loc" : [ -83.69445899999999, 34.398513 ], "pop" : 3365, "state" : "GA" } +{ "_id" : "30555", "city" : "MC CAYSVILLE", "loc" : [ -84.36829400000001, 34.952212 ], "pop" : 4720, "state" : "GA" } +{ "_id" : "30557", "city" : "MARTIN", "loc" : [ -83.168553, 34.515482 ], "pop" : 1601, "state" : "GA" } +{ "_id" : "30558", "city" : "MAYSVILLE", "loc" : [ -83.584019, 34.273627 ], "pop" : 4456, "state" : "GA" } +{ "_id" : "30559", "city" : "MINERAL BLUFF", "loc" : [ -84.25406599999999, 34.934112 ], "pop" : 2180, "state" : "GA" } +{ "_id" : "30560", "city" : "MORGANTON", "loc" : [ -84.211479, 34.871382 ], "pop" : 2558, "state" : "GA" } +{ "_id" : "30563", "city" : "MOUNT AIRY", "loc" : [ -83.471272, 34.567825 ], "pop" : 2813, "state" : "GA" } +{ "_id" : "30564", "city" : "MURRAYVILLE", "loc" : [ -83.894919, 34.434167 ], "pop" : 2126, "state" : "GA" } +{ "_id" : "30565", "city" : "NICHOLSON", "loc" : [ -83.421031, 34.097016 ], "pop" : 3352, "state" : "GA" } +{ "_id" : "30566", "city" : "OAKWOOD", "loc" : [ -83.894013, 34.237196 ], "pop" : 6584, "state" : "GA" } +{ "_id" : "30567", "city" : "PENDERGRASS", "loc" : [ -83.66335599999999, 34.179634 ], "pop" : 1956, "state" : "GA" } +{ "_id" : "30568", "city" : "RABUN GAP", "loc" : [ -83.39012200000001, 34.957552 ], "pop" : 1828, "state" : "GA" } +{ "_id" : "30571", "city" : "SAUTEE NACOOCHEE", "loc" : [ -83.693116, 34.716245 ], "pop" : 1504, "state" : "GA" } +{ "_id" : "30572", "city" : "SUCHES", "loc" : [ -84.049582, 34.72529 ], "pop" : 800, "state" : "GA" } +{ "_id" : "30575", "city" : "TALMO", "loc" : [ -83.71872, 34.19506 ], "pop" : 1153, "state" : "GA" } +{ "_id" : "30576", "city" : "TIGER", "loc" : [ -83.433317, 34.81741 ], "pop" : 2454, "state" : "GA" } +{ "_id" : "30577", "city" : "TOCCOA", "loc" : [ -83.31144, 34.566474 ], "pop" : 20324, "state" : "GA" } +{ "_id" : "30582", "city" : "YOUNG HARRIS", "loc" : [ -83.86882, 34.958791 ], "pop" : 1687, "state" : "GA" } +{ "_id" : "30601", "city" : "ATHENS", "loc" : [ -83.363174, 33.976097 ], "pop" : 15661, "state" : "GA" } +{ "_id" : "30605", "city" : "ATHENS", "loc" : [ -83.352508, 33.932097 ], "pop" : 33299, "state" : "GA" } +{ "_id" : "30606", "city" : "ATHENS", "loc" : [ -83.418019, 33.946085 ], "pop" : 29839, "state" : "GA" } +{ "_id" : "30607", "city" : "ATHENS", "loc" : [ -83.427761, 34.006978 ], "pop" : 7056, "state" : "GA" } +{ "_id" : "30619", "city" : "ARNOLDSVILLE", "loc" : [ -83.234137, 33.880338 ], "pop" : 648, "state" : "GA" } +{ "_id" : "30620", "city" : "BETHLEHEM", "loc" : [ -83.728227, 33.926116 ], "pop" : 2181, "state" : "GA" } +{ "_id" : "30621", "city" : "BISHOP", "loc" : [ -83.477655, 33.808091 ], "pop" : 3620, "state" : "GA" } +{ "_id" : "30622", "city" : "BOGART", "loc" : [ -83.50546, 33.934038 ], "pop" : 7245, "state" : "GA" } +{ "_id" : "30624", "city" : "BOWMAN", "loc" : [ -83.028437, 34.19193 ], "pop" : 2315, "state" : "GA" } +{ "_id" : "30625", "city" : "BUCKHEAD", "loc" : [ -83.343484, 33.536842 ], "pop" : 1222, "state" : "GA" } +{ "_id" : "30627", "city" : "CARLTON", "loc" : [ -83.003827, 33.985217 ], "pop" : 2046, "state" : "GA" } +{ "_id" : "30628", "city" : "COLBERT", "loc" : [ -83.21906, 34.038246 ], "pop" : 5943, "state" : "GA" } +{ "_id" : "30629", "city" : "COMER", "loc" : [ -83.121978, 34.088776 ], "pop" : 3134, "state" : "GA" } +{ "_id" : "30630", "city" : "CRAWFORD", "loc" : [ -83.189319, 33.909533 ], "pop" : 2883, "state" : "GA" } +{ "_id" : "30631", "city" : "CRAWFORDVILLE", "loc" : [ -82.88723400000001, 33.570801 ], "pop" : 1915, "state" : "GA" } +{ "_id" : "30633", "city" : "DANIELSVILLE", "loc" : [ -83.275841, 34.170799 ], "pop" : 7119, "state" : "GA" } +{ "_id" : "30634", "city" : "DEWY ROSE", "loc" : [ -82.940894, 34.172052 ], "pop" : 1138, "state" : "GA" } +{ "_id" : "30635", "city" : "ELBERTON", "loc" : [ -82.844765, 34.108202 ], "pop" : 15503, "state" : "GA" } +{ "_id" : "30641", "city" : "GOOD HOPE", "loc" : [ -83.59495200000001, 33.761346 ], "pop" : 1031, "state" : "GA" } +{ "_id" : "30642", "city" : "GREENSBORO", "loc" : [ -83.170192, 33.563682 ], "pop" : 6206, "state" : "GA" } +{ "_id" : "30643", "city" : "HARTWELL", "loc" : [ -82.929576, 34.357124 ], "pop" : 14886, "state" : "GA" } +{ "_id" : "30646", "city" : "HULL", "loc" : [ -83.311029, 34.04781 ], "pop" : 5142, "state" : "GA" } +{ "_id" : "30648", "city" : "LEXINGTON", "loc" : [ -83.085809, 33.879913 ], "pop" : 1712, "state" : "GA" } +{ "_id" : "30650", "city" : "MADISON", "loc" : [ -83.461781, 33.594681 ], "pop" : 8855, "state" : "GA" } +{ "_id" : "30655", "city" : "MONROE", "loc" : [ -83.707221, 33.808141 ], "pop" : 18405, "state" : "GA" } +{ "_id" : "30660", "city" : "PHILOMATH", "loc" : [ -82.909975, 33.783593 ], "pop" : 1137, "state" : "GA" } +{ "_id" : "30662", "city" : "ROYSTON", "loc" : [ -83.140614, 34.277793 ], "pop" : 8836, "state" : "GA" } +{ "_id" : "30663", "city" : "RUTLEDGE", "loc" : [ -83.60230199999999, 33.616316 ], "pop" : 2161, "state" : "GA" } +{ "_id" : "30666", "city" : "STATHAM", "loc" : [ -83.58929999999999, 33.960233 ], "pop" : 3758, "state" : "GA" } +{ "_id" : "30667", "city" : "STEPHENS", "loc" : [ -83.11590200000001, 33.771471 ], "pop" : 1069, "state" : "GA" } +{ "_id" : "30668", "city" : "DANBURG", "loc" : [ -82.69555800000001, 33.883294 ], "pop" : 2293, "state" : "GA" } +{ "_id" : "30669", "city" : "UNION POINT", "loc" : [ -83.087913, 33.634544 ], "pop" : 3561, "state" : "GA" } +{ "_id" : "30673", "city" : "WASHINGTON", "loc" : [ -82.742912, 33.726541 ], "pop" : 7699, "state" : "GA" } +{ "_id" : "30677", "city" : "WATKINSVILLE", "loc" : [ -83.40804300000001, 33.854247 ], "pop" : 7723, "state" : "GA" } +{ "_id" : "30678", "city" : "WHITE PLAINS", "loc" : [ -83.090845, 33.484338 ], "pop" : 1596, "state" : "GA" } +{ "_id" : "30680", "city" : "WINDER", "loc" : [ -83.711473, 33.998544 ], "pop" : 16981, "state" : "GA" } +{ "_id" : "30683", "city" : "WINTERVILLE", "loc" : [ -83.290645, 33.954253 ], "pop" : 3056, "state" : "GA" } +{ "_id" : "30701", "city" : "CALHOUN", "loc" : [ -84.934545, 34.496456 ], "pop" : 22017, "state" : "GA" } +{ "_id" : "30705", "city" : "CHATSWORTH", "loc" : [ -84.794293, 34.758929 ], "pop" : 22271, "state" : "GA" } +{ "_id" : "30707", "city" : "CHICKAMAUGA", "loc" : [ -85.322136, 34.857963 ], "pop" : 13545, "state" : "GA" } +{ "_id" : "30708", "city" : "CISCO", "loc" : [ -84.717382, 34.847405 ], "pop" : 978, "state" : "GA" } +{ "_id" : "30710", "city" : "COHUTTA", "loc" : [ -84.945801, 34.932635 ], "pop" : 5052, "state" : "GA" } +{ "_id" : "30711", "city" : "CRANDALL", "loc" : [ -84.764533, 34.941225 ], "pop" : 2901, "state" : "GA" } +{ "_id" : "30720", "city" : "DALTON", "loc" : [ -84.987477, 34.76352 ], "pop" : 20680, "state" : "GA" } +{ "_id" : "30721", "city" : "DALTON", "loc" : [ -84.933871, 34.77922 ], "pop" : 36051, "state" : "GA" } +{ "_id" : "30725", "city" : "FLINTSTONE", "loc" : [ -85.35244299999999, 34.925162 ], "pop" : 2775, "state" : "GA" } +{ "_id" : "30728", "city" : "LA FAYETTE", "loc" : [ -85.260212, 34.692008 ], "pop" : 16287, "state" : "GA" } +{ "_id" : "30730", "city" : "LYERLY", "loc" : [ -85.403826, 34.402958 ], "pop" : 2585, "state" : "GA" } +{ "_id" : "30731", "city" : "CLOUDLAND", "loc" : [ -85.459723, 34.570909 ], "pop" : 3222, "state" : "GA" } +{ "_id" : "30733", "city" : "PLAINVILLE", "loc" : [ -85.031204, 34.41447 ], "pop" : 1589, "state" : "GA" } +{ "_id" : "30734", "city" : "RANGER", "loc" : [ -84.727018, 34.540361 ], "pop" : 2015, "state" : "GA" } +{ "_id" : "30735", "city" : "HILL CITY", "loc" : [ -84.916251, 34.591996 ], "pop" : 2926, "state" : "GA" } +{ "_id" : "30736", "city" : "RINGGOLD", "loc" : [ -85.15490800000001, 34.92052 ], "pop" : 25360, "state" : "GA" } +{ "_id" : "30738", "city" : "RISING FAWN", "loc" : [ -85.47107800000001, 34.853491 ], "pop" : 4036, "state" : "GA" } +{ "_id" : "30739", "city" : "ROCK SPRING", "loc" : [ -85.24148099999999, 34.806534 ], "pop" : 4181, "state" : "GA" } +{ "_id" : "30740", "city" : "ROCKY FACE", "loc" : [ -85.05614300000001, 34.774456 ], "pop" : 6029, "state" : "GA" } +{ "_id" : "30741", "city" : "ROSSVILLE", "loc" : [ -85.296785, 34.953481 ], "pop" : 18436, "state" : "GA" } +{ "_id" : "30742", "city" : "FORT OGLETHORPE", "loc" : [ -85.242812, 34.964082 ], "pop" : 14807, "state" : "GA" } +{ "_id" : "30746", "city" : "SUGAR VALLEY", "loc" : [ -85.026048, 34.551929 ], "pop" : 1340, "state" : "GA" } +{ "_id" : "30747", "city" : "SUMMERVILLE", "loc" : [ -85.336224, 34.485899 ], "pop" : 10748, "state" : "GA" } +{ "_id" : "30750", "city" : "LOOKOUT MOUNTAIN", "loc" : [ -85.379384, 34.933512 ], "pop" : 2818, "state" : "GA" } +{ "_id" : "30752", "city" : "TRENTON", "loc" : [ -85.517118, 34.901681 ], "pop" : 7930, "state" : "GA" } +{ "_id" : "30753", "city" : "TRION", "loc" : [ -85.311156, 34.54679 ], "pop" : 5963, "state" : "GA" } +{ "_id" : "30755", "city" : "TUNNEL HILL", "loc" : [ -85.046815, 34.854129 ], "pop" : 6947, "state" : "GA" } +{ "_id" : "30757", "city" : "WILDWOOD", "loc" : [ -85.43045600000001, 34.977911 ], "pop" : 586, "state" : "GA" } +{ "_id" : "30802", "city" : "APPLING", "loc" : [ -82.285631, 33.627088 ], "pop" : 2255, "state" : "GA" } +{ "_id" : "30803", "city" : "AVERA", "loc" : [ -82.514965, 33.140997 ], "pop" : 836, "state" : "GA" } +{ "_id" : "30805", "city" : "BLYTHE", "loc" : [ -82.20304400000001, 33.294088 ], "pop" : 297, "state" : "GA" } +{ "_id" : "30808", "city" : "DEARING", "loc" : [ -82.395512, 33.40702 ], "pop" : 4632, "state" : "GA" } +{ "_id" : "30809", "city" : "EVANS", "loc" : [ -82.139775, 33.541194 ], "pop" : 12788, "state" : "GA" } +{ "_id" : "30810", "city" : "GIBSON", "loc" : [ -82.57659099999999, 33.247097 ], "pop" : 1649, "state" : "GA" } +{ "_id" : "30813", "city" : "GROVETOWN", "loc" : [ -82.240937, 33.476622 ], "pop" : 13283, "state" : "GA" } +{ "_id" : "30814", "city" : "HARLEM", "loc" : [ -82.309659, 33.417007 ], "pop" : 4318, "state" : "GA" } +{ "_id" : "30815", "city" : "HEPHZIBAH", "loc" : [ -82.088689, 33.343328 ], "pop" : 27838, "state" : "GA" } +{ "_id" : "30816", "city" : "KEYSVILLE", "loc" : [ -82.183368, 33.17191 ], "pop" : 135, "state" : "GA" } +{ "_id" : "30817", "city" : "LINCOLNTON", "loc" : [ -82.44348100000001, 33.777335 ], "pop" : 7028, "state" : "GA" } +{ "_id" : "30818", "city" : "MATTHEWS", "loc" : [ -82.28674700000001, 33.217582 ], "pop" : 607, "state" : "GA" } +{ "_id" : "30820", "city" : "MITCHELL", "loc" : [ -82.68165399999999, 33.20515 ], "pop" : 708, "state" : "GA" } +{ "_id" : "30821", "city" : "NORWOOD", "loc" : [ -82.735575, 33.478921 ], "pop" : 882, "state" : "GA" } +{ "_id" : "30822", "city" : "PERKINS", "loc" : [ -81.869573, 32.905747 ], "pop" : 549, "state" : "GA" } +{ "_id" : "30823", "city" : "STAPLETON", "loc" : [ -82.459704, 33.189423 ], "pop" : 884, "state" : "GA" } +{ "_id" : "30824", "city" : "THOMSON", "loc" : [ -82.494204, 33.477363 ], "pop" : 15487, "state" : "GA" } +{ "_id" : "30828", "city" : "WARRENTON", "loc" : [ -82.63567999999999, 33.40914 ], "pop" : 4091, "state" : "GA" } +{ "_id" : "30830", "city" : "WAYNESBORO", "loc" : [ -81.990797, 33.101254 ], "pop" : 12213, "state" : "GA" } +{ "_id" : "30833", "city" : "WRENS", "loc" : [ -82.380962, 33.210397 ], "pop" : 4782, "state" : "GA" } +{ "_id" : "30901", "city" : "AUGUSTA", "loc" : [ -81.972959, 33.460084 ], "pop" : 24496, "state" : "GA" } +{ "_id" : "30904", "city" : "AUGUSTA", "loc" : [ -82.01307799999999, 33.47374 ], "pop" : 30408, "state" : "GA" } +{ "_id" : "30905", "city" : "FORT GORDON", "loc" : [ -82.139179, 33.419032 ], "pop" : 9260, "state" : "GA" } +{ "_id" : "30906", "city" : "PEACH ORCHARD", "loc" : [ -82.038358, 33.402024 ], "pop" : 58646, "state" : "GA" } +{ "_id" : "30907", "city" : "MARTINEZ", "loc" : [ -82.09950499999999, 33.511692 ], "pop" : 42573, "state" : "GA" } +{ "_id" : "30909", "city" : "FOREST HILLS", "loc" : [ -82.060439, 33.480932 ], "pop" : 32202, "state" : "GA" } +{ "_id" : "31001", "city" : "ABBEVILLE", "loc" : [ -83.306845, 31.96484 ], "pop" : 1991, "state" : "GA" } +{ "_id" : "31002", "city" : "ADRIAN", "loc" : [ -82.569508, 32.563505 ], "pop" : 2880, "state" : "GA" } +{ "_id" : "31003", "city" : "ALLENTOWN", "loc" : [ -83.189796, 32.653829 ], "pop" : 1099, "state" : "GA" } +{ "_id" : "31005", "city" : "BONAIRE", "loc" : [ -83.604736, 32.546037 ], "pop" : 5095, "state" : "GA" } +{ "_id" : "31006", "city" : "BUTLER", "loc" : [ -84.234308, 32.572597 ], "pop" : 4731, "state" : "GA" } +{ "_id" : "31007", "city" : "BYROMVILLE", "loc" : [ -83.899128, 32.185192 ], "pop" : 1672, "state" : "GA" } +{ "_id" : "31008", "city" : "POWERSVILLE", "loc" : [ -83.762244, 32.647384 ], "pop" : 8205, "state" : "GA" } +{ "_id" : "31009", "city" : "CADWELL", "loc" : [ -83.02676700000001, 32.317395 ], "pop" : 1501, "state" : "GA" } +{ "_id" : "31011", "city" : "CHAUNCEY", "loc" : [ -83.050804, 32.083532 ], "pop" : 1954, "state" : "GA" } +{ "_id" : "31012", "city" : "CHESTER", "loc" : [ -83.174029, 32.398152 ], "pop" : 1517, "state" : "GA" } +{ "_id" : "31014", "city" : "COCHRAN", "loc" : [ -83.322886, 32.398066 ], "pop" : 11373, "state" : "GA" } +{ "_id" : "31015", "city" : "CORDELE", "loc" : [ -83.783507, 31.956625 ], "pop" : 18662, "state" : "GA" } +{ "_id" : "31016", "city" : "CULLODEN", "loc" : [ -84.04562799999999, 32.830078 ], "pop" : 2501, "state" : "GA" } +{ "_id" : "31017", "city" : "DANVILLE", "loc" : [ -83.303298, 32.593017 ], "pop" : 2221, "state" : "GA" } +{ "_id" : "31018", "city" : "DAVISBORO", "loc" : [ -82.622738, 32.944296 ], "pop" : 2032, "state" : "GA" } +{ "_id" : "31019", "city" : "DEXTER", "loc" : [ -83.05277100000001, 32.435639 ], "pop" : 1705, "state" : "GA" } +{ "_id" : "31020", "city" : "DRY BRANCH", "loc" : [ -83.495105, 32.70499 ], "pop" : 3702, "state" : "GA" } +{ "_id" : "31021", "city" : "EAST DUBLIN", "loc" : [ -82.90367999999999, 32.547794 ], "pop" : 32030, "state" : "GA" } +{ "_id" : "31022", "city" : "DUDLEY", "loc" : [ -83.089918, 32.525879 ], "pop" : 966, "state" : "GA" } +{ "_id" : "31023", "city" : "EASTMAN", "loc" : [ -83.185959, 32.208425 ], "pop" : 11744, "state" : "GA" } +{ "_id" : "31024", "city" : "EATONTON", "loc" : [ -83.36277, 33.312723 ], "pop" : 13086, "state" : "GA" } +{ "_id" : "31025", "city" : "ELKO", "loc" : [ -83.730388, 32.333648 ], "pop" : 934, "state" : "GA" } +{ "_id" : "31028", "city" : "CENTERVILLE", "loc" : [ -83.676773, 32.634375 ], "pop" : 2764, "state" : "GA" } +{ "_id" : "31029", "city" : "FORSYTH", "loc" : [ -83.93620900000001, 33.050764 ], "pop" : 8959, "state" : "GA" } +{ "_id" : "31030", "city" : "FORT VALLEY", "loc" : [ -83.888727, 32.54956 ], "pop" : 14027, "state" : "GA" } +{ "_id" : "31031", "city" : "STEVENS POTTERY", "loc" : [ -83.32041599999999, 32.909212 ], "pop" : 5415, "state" : "GA" } +{ "_id" : "31032", "city" : "GRAY", "loc" : [ -83.539951, 33.017177 ], "pop" : 8781, "state" : "GA" } +{ "_id" : "31033", "city" : "HADDOCK", "loc" : [ -83.431219, 33.051888 ], "pop" : 1193, "state" : "GA" } +{ "_id" : "31035", "city" : "HARRISON", "loc" : [ -82.71593, 32.842007 ], "pop" : 1737, "state" : "GA" } +{ "_id" : "31036", "city" : "HAWKINSVILLE", "loc" : [ -83.49476300000001, 32.277834 ], "pop" : 9154, "state" : "GA" } +{ "_id" : "31037", "city" : "HELENA", "loc" : [ -82.91782000000001, 32.078093 ], "pop" : 1526, "state" : "GA" } +{ "_id" : "31038", "city" : "ROUND OAK", "loc" : [ -83.68709200000001, 33.179994 ], "pop" : 811, "state" : "GA" } +{ "_id" : "31041", "city" : "IDEAL", "loc" : [ -84.148149, 32.393022 ], "pop" : 1924, "state" : "GA" } +{ "_id" : "31042", "city" : "IRWINTON", "loc" : [ -83.173963, 32.808849 ], "pop" : 447, "state" : "GA" } +{ "_id" : "31044", "city" : "JEFFERSONVILLE", "loc" : [ -83.385896, 32.741096 ], "pop" : 3953, "state" : "GA" } +{ "_id" : "31045", "city" : "JEWELL", "loc" : [ -82.732803, 33.328754 ], "pop" : 1105, "state" : "GA" } +{ "_id" : "31046", "city" : "JULIETTE", "loc" : [ -83.82352899999999, 33.119412 ], "pop" : 687, "state" : "GA" } +{ "_id" : "31047", "city" : "KATHLEEN", "loc" : [ -83.61284000000001, 32.467218 ], "pop" : 563, "state" : "GA" } +{ "_id" : "31049", "city" : "KITE", "loc" : [ -82.527361, 32.707833 ], "pop" : 1196, "state" : "GA" } +{ "_id" : "31050", "city" : "KNOXVILLE", "loc" : [ -83.943011, 32.64724 ], "pop" : 2134, "state" : "GA" } +{ "_id" : "31052", "city" : "LIZELLA", "loc" : [ -83.82500899999999, 32.777316 ], "pop" : 6992, "state" : "GA" } +{ "_id" : "31054", "city" : "MC INTYRE", "loc" : [ -83.203953, 32.84679 ], "pop" : 3295, "state" : "GA" } +{ "_id" : "31055", "city" : "MC RAE", "loc" : [ -82.887665, 32.043529 ], "pop" : 4906, "state" : "GA" } +{ "_id" : "31057", "city" : "MARSHALLVILLE", "loc" : [ -83.943478, 32.452003 ], "pop" : 2008, "state" : "GA" } +{ "_id" : "31058", "city" : "MAUK", "loc" : [ -84.399906, 32.509016 ], "pop" : 319, "state" : "GA" } +{ "_id" : "31060", "city" : "MILAN", "loc" : [ -83.05884500000001, 31.961797 ], "pop" : 1627, "state" : "GA" } +{ "_id" : "31061", "city" : "MILLEDGEVILLE", "loc" : [ -83.237943, 33.079958 ], "pop" : 39173, "state" : "GA" } +{ "_id" : "31063", "city" : "MONTEZUMA", "loc" : [ -84.004139, 32.302615 ], "pop" : 6160, "state" : "GA" } +{ "_id" : "31064", "city" : "MONTICELLO", "loc" : [ -83.714049, 33.311797 ], "pop" : 5328, "state" : "GA" } +{ "_id" : "31065", "city" : "MONTROSE", "loc" : [ -83.16011899999999, 32.561867 ], "pop" : 587, "state" : "GA" } +{ "_id" : "31066", "city" : "MUSELLA", "loc" : [ -84.045591, 32.820228 ], "pop" : 121, "state" : "GA" } +{ "_id" : "31068", "city" : "OGLETHORPE", "loc" : [ -84.08299100000001, 32.284186 ], "pop" : 2951, "state" : "GA" } +{ "_id" : "31069", "city" : "PERRY", "loc" : [ -83.728258, 32.46051 ], "pop" : 13945, "state" : "GA" } +{ "_id" : "31070", "city" : "PINEHURST", "loc" : [ -83.72085300000001, 32.196692 ], "pop" : 917, "state" : "GA" } +{ "_id" : "31071", "city" : "PINEVIEW", "loc" : [ -83.515835, 32.090728 ], "pop" : 1154, "state" : "GA" } +{ "_id" : "31072", "city" : "PITTS", "loc" : [ -83.55788, 31.942533 ], "pop" : 1278, "state" : "GA" } +{ "_id" : "31075", "city" : "RENTZ", "loc" : [ -82.91398700000001, 32.363834 ], "pop" : 3037, "state" : "GA" } +{ "_id" : "31076", "city" : "REYNOLDS", "loc" : [ -84.101134, 32.55411 ], "pop" : 2455, "state" : "GA" } +{ "_id" : "31077", "city" : "RHINE", "loc" : [ -83.19831000000001, 32.011303 ], "pop" : 1449, "state" : "GA" } +{ "_id" : "31078", "city" : "ROBERTA", "loc" : [ -84.045114, 32.722152 ], "pop" : 2803, "state" : "GA" } +{ "_id" : "31079", "city" : "ROCHELLE", "loc" : [ -83.44497800000001, 31.949119 ], "pop" : 2585, "state" : "GA" } +{ "_id" : "31081", "city" : "RUPERT", "loc" : [ -84.273753, 32.432524 ], "pop" : 208, "state" : "GA" } +{ "_id" : "31082", "city" : "DEEPSTEP", "loc" : [ -82.816934, 32.986972 ], "pop" : 10459, "state" : "GA" } +{ "_id" : "31085", "city" : "SHADY DALE", "loc" : [ -83.704031, 33.401353 ], "pop" : 1606, "state" : "GA" } +{ "_id" : "31087", "city" : "DEVEREUX", "loc" : [ -82.98594799999999, 33.265516 ], "pop" : 8908, "state" : "GA" } +{ "_id" : "31088", "city" : "WARNER ROBINS", "loc" : [ -83.641578, 32.593365 ], "pop" : 34526, "state" : "GA" } +{ "_id" : "31089", "city" : "TENNILLE", "loc" : [ -82.840024, 32.9063 ], "pop" : 3696, "state" : "GA" } +{ "_id" : "31090", "city" : "TOOMSBORO", "loc" : [ -83.08442700000001, 32.821895 ], "pop" : 1129, "state" : "GA" } +{ "_id" : "31091", "city" : "UNADILLA", "loc" : [ -83.74467, 32.255766 ], "pop" : 2623, "state" : "GA" } +{ "_id" : "31092", "city" : "VIENNA", "loc" : [ -83.792198, 32.091291 ], "pop" : 4689, "state" : "GA" } +{ "_id" : "31093", "city" : "WARNER ROBINS", "loc" : [ -83.639466, 32.636839 ], "pop" : 27107, "state" : "GA" } +{ "_id" : "31094", "city" : "WARTHEN", "loc" : [ -82.803899, 33.125455 ], "pop" : 1188, "state" : "GA" } +{ "_id" : "31096", "city" : "WRIGHTSVILLE", "loc" : [ -82.726206, 32.721866 ], "pop" : 5755, "state" : "GA" } +{ "_id" : "31097", "city" : "YATESVILLE", "loc" : [ -84.15925300000001, 32.915592 ], "pop" : 1188, "state" : "GA" } +{ "_id" : "31098", "city" : "ROBINS A F B", "loc" : [ -83.58775, 32.60958 ], "pop" : 3228, "state" : "GA" } +{ "_id" : "31201", "city" : "HUBER", "loc" : [ -83.598686, 32.84386 ], "pop" : 31882, "state" : "GA" } +{ "_id" : "31204", "city" : "MACON", "loc" : [ -83.67663400000001, 32.842393 ], "pop" : 38186, "state" : "GA" } +{ "_id" : "31206", "city" : "WILSON AIRPORT", "loc" : [ -83.682303, 32.780758 ], "pop" : 42528, "state" : "GA" } +{ "_id" : "31210", "city" : "MACON", "loc" : [ -83.745537, 32.892565 ], "pop" : 31255, "state" : "GA" } +{ "_id" : "31211", "city" : "MACON", "loc" : [ -83.602062, 32.886905 ], "pop" : 16668, "state" : "GA" } +{ "_id" : "31301", "city" : "ALLENHURST", "loc" : [ -81.618577, 31.774059 ], "pop" : 3075, "state" : "GA" } +{ "_id" : "31302", "city" : "BLOOMINGDALE", "loc" : [ -81.308465, 32.117654 ], "pop" : 3297, "state" : "GA" } +{ "_id" : "31303", "city" : "CLYO", "loc" : [ -81.30857, 32.512646 ], "pop" : 400, "state" : "GA" } +{ "_id" : "31304", "city" : "CRESCENT", "loc" : [ -81.389219, 31.49675 ], "pop" : 2362, "state" : "GA" } +{ "_id" : "31305", "city" : "DARIEN", "loc" : [ -81.431175, 31.382574 ], "pop" : 3067, "state" : "GA" } +{ "_id" : "31308", "city" : "ELLABELL", "loc" : [ -81.498302, 32.127304 ], "pop" : 1309, "state" : "GA" } +{ "_id" : "31309", "city" : "FLEMING", "loc" : [ -81.423165, 31.864477 ], "pop" : 548, "state" : "GA" } +{ "_id" : "31312", "city" : "GUYTON", "loc" : [ -81.389593, 32.31399 ], "pop" : 4025, "state" : "GA" } +{ "_id" : "31313", "city" : "HINESVILLE", "loc" : [ -81.607214, 31.851296 ], "pop" : 42962, "state" : "GA" } +{ "_id" : "31314", "city" : "FORT STEWART", "loc" : [ -81.440489, 31.979085 ], "pop" : 0, "state" : "GA" } +{ "_id" : "31316", "city" : "LUDOWICI", "loc" : [ -81.74531500000001, 31.770477 ], "pop" : 6139, "state" : "GA" } +{ "_id" : "31319", "city" : "MERIDIAN", "loc" : [ -81.42391499999999, 31.411068 ], "pop" : 672, "state" : "GA" } +{ "_id" : "31320", "city" : "MIDWAY", "loc" : [ -81.390897, 31.801803 ], "pop" : 4486, "state" : "GA" } +{ "_id" : "31321", "city" : "PEMBROKE", "loc" : [ -81.553341, 32.157088 ], "pop" : 6571, "state" : "GA" } +{ "_id" : "31322", "city" : "POOLER", "loc" : [ -81.251958, 32.114931 ], "pop" : 4036, "state" : "GA" } +{ "_id" : "31323", "city" : "RICEBORO", "loc" : [ -81.467134, 31.735696 ], "pop" : 1737, "state" : "GA" } +{ "_id" : "31324", "city" : "RICHMOND HILL", "loc" : [ -81.294026, 31.896152 ], "pop" : 7455, "state" : "GA" } +{ "_id" : "31326", "city" : "RINCON", "loc" : [ -81.28777700000001, 32.235632 ], "pop" : 14502, "state" : "GA" } +{ "_id" : "31327", "city" : "SAPELO ISLAND", "loc" : [ -81.267933, 31.421948 ], "pop" : 120, "state" : "GA" } +{ "_id" : "31328", "city" : "TYBEE ISLAND", "loc" : [ -80.850938, 32.006797 ], "pop" : 3106, "state" : "GA" } +{ "_id" : "31329", "city" : "STILLWELL", "loc" : [ -81.326435, 32.4121 ], "pop" : 6761, "state" : "GA" } +{ "_id" : "31331", "city" : "TOWNSEND", "loc" : [ -81.418204, 31.567339 ], "pop" : 2413, "state" : "GA" } +{ "_id" : "31401", "city" : "SAVANNAH", "loc" : [ -81.102394, 32.067631 ], "pop" : 37544, "state" : "GA" } +{ "_id" : "31404", "city" : "STATE COLLEGE", "loc" : [ -81.068704, 32.044178 ], "pop" : 33927, "state" : "GA" } +{ "_id" : "31405", "city" : "SAVANNAH", "loc" : [ -81.12419199999999, 32.039119 ], "pop" : 28739, "state" : "GA" } +{ "_id" : "31406", "city" : "SAVANNAH", "loc" : [ -81.097893, 31.988993 ], "pop" : 34024, "state" : "GA" } +{ "_id" : "31407", "city" : "PORT WENTWORTH", "loc" : [ -81.162891, 32.148075 ], "pop" : 2883, "state" : "GA" } +{ "_id" : "31408", "city" : "GARDEN CITY", "loc" : [ -81.168181, 32.109245 ], "pop" : 12548, "state" : "GA" } +{ "_id" : "31409", "city" : "SAVANNAH", "loc" : [ -81.158371, 32.002104 ], "pop" : 3509, "state" : "GA" } +{ "_id" : "31410", "city" : "SAVANNAH", "loc" : [ -80.983859, 32.016188 ], "pop" : 15808, "state" : "GA" } +{ "_id" : "31411", "city" : "SAVANNAH", "loc" : [ -81.03807399999999, 31.926801 ], "pop" : 4707, "state" : "GA" } +{ "_id" : "31419", "city" : "M M", "loc" : [ -81.177387, 31.985149 ], "pop" : 32901, "state" : "GA" } +{ "_id" : "31501", "city" : "OKEFENOKEE", "loc" : [ -82.364512, 31.219686 ], "pop" : 33068, "state" : "GA" } +{ "_id" : "31510", "city" : "ALMA", "loc" : [ -82.4633, 31.546525 ], "pop" : 9566, "state" : "GA" } +{ "_id" : "31512", "city" : "AMBROSE", "loc" : [ -82.997637, 31.536712 ], "pop" : 2853, "state" : "GA" } +{ "_id" : "31513", "city" : "BAXLEY", "loc" : [ -82.348643, 31.783663 ], "pop" : 14099, "state" : "GA" } +{ "_id" : "31516", "city" : "BLACKSHEAR", "loc" : [ -82.261708, 31.293063 ], "pop" : 9612, "state" : "GA" } +{ "_id" : "31518", "city" : "BRISTOL", "loc" : [ -82.249594, 31.40278 ], "pop" : 996, "state" : "GA" } +{ "_id" : "31519", "city" : "BROXTON", "loc" : [ -82.904954, 31.648426 ], "pop" : 2915, "state" : "GA" } +{ "_id" : "31520", "city" : "GLYNCO", "loc" : [ -81.493045, 31.169652 ], "pop" : 21343, "state" : "GA" } +{ "_id" : "31522", "city" : "SAINT SIMONS ISL", "loc" : [ -81.38242099999999, 31.16916 ], "pop" : 12924, "state" : "GA" } +{ "_id" : "31525", "city" : "BRUNSWICK", "loc" : [ -81.511365, 31.230411 ], "pop" : 27079, "state" : "GA" } +{ "_id" : "31527", "city" : "JEKYLL ISLAND", "loc" : [ -81.41280999999999, 31.074049 ], "pop" : 1150, "state" : "GA" } +{ "_id" : "31532", "city" : "DENTON", "loc" : [ -82.720146, 31.745842 ], "pop" : 1457, "state" : "GA" } +{ "_id" : "31533", "city" : "DOUGLAS", "loc" : [ -82.846468, 31.497287 ], "pop" : 19607, "state" : "GA" } +{ "_id" : "31537", "city" : "FOLKSTON", "loc" : [ -82.011617, 30.850838 ], "pop" : 6486, "state" : "GA" } +{ "_id" : "31539", "city" : "HAZLEHURST", "loc" : [ -82.590947, 31.860569 ], "pop" : 10577, "state" : "GA" } +{ "_id" : "31542", "city" : "HOBOKEN", "loc" : [ -82.183847, 31.183777 ], "pop" : 3481, "state" : "GA" } +{ "_id" : "31543", "city" : "HORTENSE", "loc" : [ -81.95956099999999, 31.319949 ], "pop" : 968, "state" : "GA" } +{ "_id" : "31544", "city" : "JACKSONVILLE", "loc" : [ -82.975003, 31.848079 ], "pop" : 905, "state" : "GA" } +{ "_id" : "31545", "city" : "JESUP", "loc" : [ -81.88706000000001, 31.604326 ], "pop" : 17180, "state" : "GA" } +{ "_id" : "31548", "city" : "KINGSLAND", "loc" : [ -81.707483, 30.797681 ], "pop" : 8781, "state" : "GA" } +{ "_id" : "31549", "city" : "LUMBER CITY", "loc" : [ -82.707312, 31.925124 ], "pop" : 2036, "state" : "GA" } +{ "_id" : "31550", "city" : "MANOR", "loc" : [ -82.574173, 31.108829 ], "pop" : 794, "state" : "GA" } +{ "_id" : "31551", "city" : "MERSHON", "loc" : [ -82.216995, 31.478279 ], "pop" : 365, "state" : "GA" } +{ "_id" : "31552", "city" : "MILLWOOD", "loc" : [ -82.644148, 31.250566 ], "pop" : 500, "state" : "GA" } +{ "_id" : "31553", "city" : "NAHUNTA", "loc" : [ -81.972212, 31.182652 ], "pop" : 3158, "state" : "GA" } +{ "_id" : "31554", "city" : "NICHOLLS", "loc" : [ -82.603207, 31.449812 ], "pop" : 3615, "state" : "GA" } +{ "_id" : "31555", "city" : "ODUM", "loc" : [ -81.99430099999999, 31.699916 ], "pop" : 2851, "state" : "GA" } +{ "_id" : "31557", "city" : "PATTERSON", "loc" : [ -82.127444, 31.390338 ], "pop" : 2355, "state" : "GA" } +{ "_id" : "31558", "city" : "SAINT MARYS", "loc" : [ -81.56521100000001, 30.773467 ], "pop" : 15655, "state" : "GA" } +{ "_id" : "31560", "city" : "SCREVEN", "loc" : [ -82.039742, 31.516846 ], "pop" : 2325, "state" : "GA" } +{ "_id" : "31563", "city" : "SURRENCY", "loc" : [ -82.198218, 31.648931 ], "pop" : 1643, "state" : "GA" } +{ "_id" : "31565", "city" : "WAVERLY", "loc" : [ -81.56967, 31.042672 ], "pop" : 331, "state" : "GA" } +{ "_id" : "31566", "city" : "WAYNESVILLE", "loc" : [ -81.803928, 31.244792 ], "pop" : 3248, "state" : "GA" } +{ "_id" : "31567", "city" : "WEST GREEN", "loc" : [ -82.756417, 31.592271 ], "pop" : 1940, "state" : "GA" } +{ "_id" : "31568", "city" : "WHITE OAK", "loc" : [ -81.80823700000001, 31.034037 ], "pop" : 892, "state" : "GA" } +{ "_id" : "31569", "city" : "WOODBINE", "loc" : [ -81.678313, 30.943692 ], "pop" : 4508, "state" : "GA" } +{ "_id" : "31601", "city" : "CLYATTVILLE", "loc" : [ -83.27716599999999, 30.810578 ], "pop" : 32232, "state" : "GA" } +{ "_id" : "31602", "city" : "BEMISS", "loc" : [ -83.27329899999999, 30.890268 ], "pop" : 32292, "state" : "GA" } +{ "_id" : "31620", "city" : "ADEL", "loc" : [ -83.421346, 31.125143 ], "pop" : 9661, "state" : "GA" } +{ "_id" : "31622", "city" : "ALAPAHA", "loc" : [ -83.21321, 31.394027 ], "pop" : 1675, "state" : "GA" } +{ "_id" : "31624", "city" : "AXSON", "loc" : [ -82.731945, 31.303455 ], "pop" : 912, "state" : "GA" } +{ "_id" : "31625", "city" : "BARNEY", "loc" : [ -83.521934, 31.007424 ], "pop" : 895, "state" : "GA" } +{ "_id" : "31626", "city" : "BOSTON", "loc" : [ -83.797085, 30.785547 ], "pop" : 2808, "state" : "GA" } +{ "_id" : "31629", "city" : "DIXIE", "loc" : [ -83.67918, 30.772213 ], "pop" : 1462, "state" : "GA" } +{ "_id" : "31630", "city" : "DU PONT", "loc" : [ -82.855518, 30.999996 ], "pop" : 502, "state" : "GA" } +{ "_id" : "31631", "city" : "FARGO", "loc" : [ -82.580056, 30.716587 ], "pop" : 560, "state" : "GA" } +{ "_id" : "31632", "city" : "HAHIRA", "loc" : [ -83.357366, 30.941593 ], "pop" : 6921, "state" : "GA" } +{ "_id" : "31634", "city" : "COGDELL", "loc" : [ -82.743103, 31.044991 ], "pop" : 5098, "state" : "GA" } +{ "_id" : "31635", "city" : "LAKELAND", "loc" : [ -83.088859, 31.038107 ], "pop" : 4289, "state" : "GA" } +{ "_id" : "31636", "city" : "LAKE PARK", "loc" : [ -83.175293, 30.690615 ], "pop" : 4491, "state" : "GA" } +{ "_id" : "31637", "city" : "LENOX", "loc" : [ -83.44813499999999, 31.266405 ], "pop" : 1993, "state" : "GA" } +{ "_id" : "31638", "city" : "MORVEN", "loc" : [ -83.44979600000001, 30.893733 ], "pop" : 3416, "state" : "GA" } +{ "_id" : "31639", "city" : "NASHVILLE", "loc" : [ -83.23194599999999, 31.207379 ], "pop" : 8396, "state" : "GA" } +{ "_id" : "31641", "city" : "NAYLOR", "loc" : [ -83.12236799999999, 30.89846 ], "pop" : 1110, "state" : "GA" } +{ "_id" : "31642", "city" : "PEARSON", "loc" : [ -82.85909599999999, 31.310583 ], "pop" : 3590, "state" : "GA" } +{ "_id" : "31643", "city" : "QUITMAN", "loc" : [ -83.556748, 30.779699 ], "pop" : 8028, "state" : "GA" } +{ "_id" : "31645", "city" : "RAY CITY", "loc" : [ -83.21428299999999, 31.08247 ], "pop" : 1859, "state" : "GA" } +{ "_id" : "31646", "city" : "SAINT GEORGE", "loc" : [ -82.083367, 30.559161 ], "pop" : 2010, "state" : "GA" } +{ "_id" : "31647", "city" : "SPARKS", "loc" : [ -83.447586, 31.178984 ], "pop" : 1772, "state" : "GA" } +{ "_id" : "31648", "city" : "STATENVILLE", "loc" : [ -82.97986299999999, 30.725503 ], "pop" : 1269, "state" : "GA" } +{ "_id" : "31649", "city" : "STOCKTON", "loc" : [ -83.013944, 31.022865 ], "pop" : 1242, "state" : "GA" } +{ "_id" : "31650", "city" : "WILLACOOCHEE", "loc" : [ -83.04493100000001, 31.345481 ], "pop" : 1704, "state" : "GA" } +{ "_id" : "31701", "city" : "ALBANY", "loc" : [ -84.161923, 31.567783 ], "pop" : 25698, "state" : "GA" } +{ "_id" : "31704", "city" : "MARINE CORPS LOG", "loc" : [ -84.05081199999999, 31.550099 ], "pop" : 1306, "state" : "GA" } +{ "_id" : "31705", "city" : "BRIDGEBORO", "loc" : [ -84.09008900000001, 31.550851 ], "pop" : 35997, "state" : "GA" } +{ "_id" : "31707", "city" : "ALBANY", "loc" : [ -84.211834, 31.578908 ], "pop" : 36439, "state" : "GA" } +{ "_id" : "31709", "city" : "GEORGIA SOUTHWES", "loc" : [ -84.224729, 32.07077 ], "pop" : 23590, "state" : "GA" } +{ "_id" : "31711", "city" : "ANDERSONVILLE", "loc" : [ -84.10101, 32.129907 ], "pop" : 984, "state" : "GA" } +{ "_id" : "31712", "city" : "ARABI", "loc" : [ -83.72856, 31.862923 ], "pop" : 1349, "state" : "GA" } +{ "_id" : "31713", "city" : "ARLINGTON", "loc" : [ -84.72572, 31.445597 ], "pop" : 1402, "state" : "GA" } +{ "_id" : "31714", "city" : "ASHBURN", "loc" : [ -83.660775, 31.705877 ], "pop" : 6047, "state" : "GA" } +{ "_id" : "31715", "city" : "ATTAPULGUS", "loc" : [ -84.486008, 30.750639 ], "pop" : 3131, "state" : "GA" } +{ "_id" : "31716", "city" : "BACONTON", "loc" : [ -84.11345, 31.387804 ], "pop" : 2566, "state" : "GA" } +{ "_id" : "31717", "city" : "BAINBRIDGE", "loc" : [ -84.573975, 30.897865 ], "pop" : 17739, "state" : "GA" } +{ "_id" : "31723", "city" : "BLAKELY", "loc" : [ -84.93528499999999, 31.371854 ], "pop" : 8405, "state" : "GA" } +{ "_id" : "31724", "city" : "BLUFFTON", "loc" : [ -84.87717499999999, 31.556189 ], "pop" : 799, "state" : "GA" } +{ "_id" : "31725", "city" : "BRINSON", "loc" : [ -84.667112, 30.960957 ], "pop" : 2877, "state" : "GA" } +{ "_id" : "31726", "city" : "BRONWOOD", "loc" : [ -84.35938899999999, 31.821591 ], "pop" : 1075, "state" : "GA" } +{ "_id" : "31728", "city" : "CAIRO", "loc" : [ -84.196246, 30.892462 ], "pop" : 15393, "state" : "GA" } +{ "_id" : "31729", "city" : "CALVARY", "loc" : [ -84.32267, 30.747036 ], "pop" : 1442, "state" : "GA" } +{ "_id" : "31730", "city" : "CAMILLA", "loc" : [ -84.22968299999999, 31.219915 ], "pop" : 9207, "state" : "GA" } +{ "_id" : "31733", "city" : "CHULA", "loc" : [ -83.550864, 31.543855 ], "pop" : 2425, "state" : "GA" } +{ "_id" : "31734", "city" : "CLIMAX", "loc" : [ -84.443217, 30.85731 ], "pop" : 1764, "state" : "GA" } +{ "_id" : "31735", "city" : "COBB", "loc" : [ -83.95808700000001, 31.961708 ], "pop" : 881, "state" : "GA" } +{ "_id" : "31736", "city" : "COLEMAN", "loc" : [ -84.874471, 31.656831 ], "pop" : 359, "state" : "GA" } +{ "_id" : "31737", "city" : "COLQUITT", "loc" : [ -84.730896, 31.161871 ], "pop" : 6277, "state" : "GA" } +{ "_id" : "31738", "city" : "COOLIDGE", "loc" : [ -83.87524500000001, 30.985908 ], "pop" : 1970, "state" : "GA" } +{ "_id" : "31740", "city" : "CUTHBERT", "loc" : [ -84.78887400000001, 31.769073 ], "pop" : 5708, "state" : "GA" } +{ "_id" : "31741", "city" : "DAMASCUS", "loc" : [ -84.72004699999999, 31.341528 ], "pop" : 1534, "state" : "GA" } +{ "_id" : "31742", "city" : "GRAVES", "loc" : [ -84.43078199999999, 31.759846 ], "pop" : 8731, "state" : "GA" } +{ "_id" : "31743", "city" : "DE SOTO", "loc" : [ -84.027101, 31.950186 ], "pop" : 112, "state" : "GA" } +{ "_id" : "31744", "city" : "DOERUN", "loc" : [ -83.925316, 31.313647 ], "pop" : 1738, "state" : "GA" } +{ "_id" : "31745", "city" : "DONALSONVILLE", "loc" : [ -84.887024, 30.981801 ], "pop" : 7468, "state" : "GA" } +{ "_id" : "31746", "city" : "EDISON", "loc" : [ -84.745626, 31.564979 ], "pop" : 1711, "state" : "GA" } +{ "_id" : "31749", "city" : "ENIGMA", "loc" : [ -83.35515700000001, 31.373599 ], "pop" : 2223, "state" : "GA" } +{ "_id" : "31750", "city" : "FITZGERALD", "loc" : [ -83.249534, 31.724769 ], "pop" : 16245, "state" : "GA" } +{ "_id" : "31751", "city" : "FORT GAINES", "loc" : [ -85.03937500000001, 31.646353 ], "pop" : 2565, "state" : "GA" } +{ "_id" : "31754", "city" : "GEORGETOWN", "loc" : [ -85.07113699999999, 31.884763 ], "pop" : 1415, "state" : "GA" } +{ "_id" : "31756", "city" : "HARTSFIELD", "loc" : [ -83.970364, 31.217316 ], "pop" : 285, "state" : "GA" } +{ "_id" : "31759", "city" : "IRON CITY", "loc" : [ -84.796632, 30.994728 ], "pop" : 1542, "state" : "GA" } +{ "_id" : "31760", "city" : "IRWINVILLE", "loc" : [ -83.401708, 31.654238 ], "pop" : 1887, "state" : "GA" } +{ "_id" : "31761", "city" : "JAKIN", "loc" : [ -84.994845, 31.175064 ], "pop" : 1918, "state" : "GA" } +{ "_id" : "31762", "city" : "LEARY", "loc" : [ -84.509486, 31.505924 ], "pop" : 1017, "state" : "GA" } +{ "_id" : "31763", "city" : "LEESBURG", "loc" : [ -84.159263, 31.681161 ], "pop" : 14641, "state" : "GA" } +{ "_id" : "31764", "city" : "LESLIE", "loc" : [ -84.07834, 31.953952 ], "pop" : 1273, "state" : "GA" } +{ "_id" : "31765", "city" : "MEIGS", "loc" : [ -84.082375, 31.062536 ], "pop" : 1705, "state" : "GA" } +{ "_id" : "31766", "city" : "MORGAN", "loc" : [ -84.61779799999999, 31.556557 ], "pop" : 883, "state" : "GA" } +{ "_id" : "31767", "city" : "SPRINGVALE", "loc" : [ -85.05725099999999, 31.823432 ], "pop" : 850, "state" : "GA" } +{ "_id" : "31768", "city" : "MOULTRIE", "loc" : [ -83.764089, 31.179244 ], "pop" : 34351, "state" : "GA" } +{ "_id" : "31770", "city" : "NEWTON", "loc" : [ -84.441107, 31.313426 ], "pop" : 3615, "state" : "GA" } +{ "_id" : "31771", "city" : "NORMAN PARK", "loc" : [ -83.94044, 31.069128 ], "pop" : 301, "state" : "GA" } +{ "_id" : "31772", "city" : "OAKFIELD", "loc" : [ -83.97059, 31.779768 ], "pop" : 149, "state" : "GA" } +{ "_id" : "31773", "city" : "OCHLOCKNEE", "loc" : [ -84.0326, 30.959407 ], "pop" : 2665, "state" : "GA" } +{ "_id" : "31774", "city" : "OCILLA", "loc" : [ -83.256542, 31.592944 ], "pop" : 5784, "state" : "GA" } +{ "_id" : "31775", "city" : "OMEGA", "loc" : [ -83.593936, 31.360432 ], "pop" : 2154, "state" : "GA" } +{ "_id" : "31777", "city" : "PARROTT", "loc" : [ -84.501152, 31.872016 ], "pop" : 886, "state" : "GA" } +{ "_id" : "31778", "city" : "PAVO", "loc" : [ -83.74085599999999, 30.940142 ], "pop" : 3573, "state" : "GA" } +{ "_id" : "31779", "city" : "PELHAM", "loc" : [ -84.156367, 31.127233 ], "pop" : 7123, "state" : "GA" } +{ "_id" : "31780", "city" : "PLAINS", "loc" : [ -84.358638, 32.033908 ], "pop" : 3377, "state" : "GA" } +{ "_id" : "31781", "city" : "POULAN", "loc" : [ -83.761554, 31.467206 ], "pop" : 3119, "state" : "GA" } +{ "_id" : "31783", "city" : "REBECCA", "loc" : [ -83.523478, 31.797921 ], "pop" : 630, "state" : "GA" } +{ "_id" : "31784", "city" : "SALE CITY", "loc" : [ -84.04219500000001, 31.260004 ], "pop" : 1379, "state" : "GA" } +{ "_id" : "31786", "city" : "SHELLMAN", "loc" : [ -84.61661599999999, 31.743407 ], "pop" : 1900, "state" : "GA" } +{ "_id" : "31787", "city" : "SMITHVILLE", "loc" : [ -84.22706599999999, 31.884692 ], "pop" : 1570, "state" : "GA" } +{ "_id" : "31789", "city" : "SUMNER", "loc" : [ -83.724463, 31.53925 ], "pop" : 1125, "state" : "GA" } +{ "_id" : "31790", "city" : "SYCAMORE", "loc" : [ -83.606363, 31.655329 ], "pop" : 2026, "state" : "GA" } +{ "_id" : "31791", "city" : "SYLVESTER", "loc" : [ -83.860731, 31.539268 ], "pop" : 9573, "state" : "GA" } +{ "_id" : "31792", "city" : "THOMASVILLE", "loc" : [ -83.969616, 30.838543 ], "pop" : 28319, "state" : "GA" } +{ "_id" : "31794", "city" : "ABAC", "loc" : [ -83.498867, 31.451722 ], "pop" : 27906, "state" : "GA" } +{ "_id" : "31795", "city" : "TY TY", "loc" : [ -83.621989, 31.45595 ], "pop" : 2513, "state" : "GA" } +{ "_id" : "31796", "city" : "WARWICK", "loc" : [ -83.920092, 31.734495 ], "pop" : 2650, "state" : "GA" } +{ "_id" : "31797", "city" : "WHIGHAM", "loc" : [ -84.315771, 30.90701 ], "pop" : 2987, "state" : "GA" } +{ "_id" : "31798", "city" : "WRAY", "loc" : [ -83.107484, 31.595229 ], "pop" : 978, "state" : "GA" } +{ "_id" : "31801", "city" : "JUNIPER", "loc" : [ -84.612951, 32.565562 ], "pop" : 1407, "state" : "GA" } +{ "_id" : "31803", "city" : "TAZEWELL", "loc" : [ -84.52734700000001, 32.354198 ], "pop" : 5590, "state" : "GA" } +{ "_id" : "31804", "city" : "CATAULA", "loc" : [ -84.92069100000001, 32.624246 ], "pop" : 1108, "state" : "GA" } +{ "_id" : "31805", "city" : "CUSSETA", "loc" : [ -84.764537, 32.299026 ], "pop" : 2290, "state" : "GA" } +{ "_id" : "31806", "city" : "ELLAVILLE", "loc" : [ -84.30386799999999, 32.23901 ], "pop" : 3599, "state" : "GA" } +{ "_id" : "31807", "city" : "ELLERSLIE", "loc" : [ -84.877197, 32.661718 ], "pop" : 2153, "state" : "GA" } +{ "_id" : "31808", "city" : "FORTSON", "loc" : [ -85.001654, 32.628841 ], "pop" : 1780, "state" : "GA" } +{ "_id" : "31811", "city" : "HAMILTON", "loc" : [ -84.884753, 32.741795 ], "pop" : 1587, "state" : "GA" } +{ "_id" : "31812", "city" : "JUNCTION CITY", "loc" : [ -84.45741, 32.608046 ], "pop" : 472, "state" : "GA" } +{ "_id" : "31815", "city" : "LUMPKIN", "loc" : [ -84.802227, 32.043465 ], "pop" : 2144, "state" : "GA" } +{ "_id" : "31816", "city" : "MANCHESTER", "loc" : [ -84.63116599999999, 32.8721 ], "pop" : 7721, "state" : "GA" } +{ "_id" : "31820", "city" : "MIDLAND", "loc" : [ -84.855851, 32.561587 ], "pop" : 4725, "state" : "GA" } +{ "_id" : "31821", "city" : "OMAHA", "loc" : [ -84.900792, 32.165234 ], "pop" : 884, "state" : "GA" } +{ "_id" : "31822", "city" : "PINE MOUNTAIN", "loc" : [ -84.89595300000001, 32.873488 ], "pop" : 3548, "state" : "GA" } +{ "_id" : "31823", "city" : "PINE MOUNTAIN VA", "loc" : [ -84.823874, 32.791849 ], "pop" : 887, "state" : "GA" } +{ "_id" : "31824", "city" : "PRESTON", "loc" : [ -84.548918, 32.074031 ], "pop" : 1690, "state" : "GA" } +{ "_id" : "31825", "city" : "RICHLAND", "loc" : [ -84.666724, 32.084578 ], "pop" : 2626, "state" : "GA" } +{ "_id" : "31826", "city" : "SHILOH", "loc" : [ -84.74117099999999, 32.806678 ], "pop" : 1478, "state" : "GA" } +{ "_id" : "31827", "city" : "TALBOTTON", "loc" : [ -84.546206, 32.679702 ], "pop" : 2324, "state" : "GA" } +{ "_id" : "31829", "city" : "UPATOI", "loc" : [ -84.74481900000001, 32.560057 ], "pop" : 725, "state" : "GA" } +{ "_id" : "31830", "city" : "WARM SPRINGS", "loc" : [ -84.82172799999999, 32.895558 ], "pop" : 819, "state" : "GA" } +{ "_id" : "31831", "city" : "WAVERLY HALL", "loc" : [ -84.742463, 32.679326 ], "pop" : 2323, "state" : "GA" } +{ "_id" : "31832", "city" : "WESTON", "loc" : [ -84.575579, 31.963665 ], "pop" : 573, "state" : "GA" } +{ "_id" : "31833", "city" : "WEST POINT", "loc" : [ -85.119714, 32.833683 ], "pop" : 8499, "state" : "GA" } +{ "_id" : "31836", "city" : "WOODLAND", "loc" : [ -84.595187, 32.806066 ], "pop" : 2377, "state" : "GA" } +{ "_id" : "31901", "city" : "COLUMBUS", "loc" : [ -84.979456, 32.473035 ], "pop" : 9694, "state" : "GA" } +{ "_id" : "31903", "city" : "COLUMBUS", "loc" : [ -84.948127, 32.424513 ], "pop" : 25362, "state" : "GA" } +{ "_id" : "31904", "city" : "COLUMBUS", "loc" : [ -84.978475, 32.516091 ], "pop" : 29254, "state" : "GA" } +{ "_id" : "31905", "city" : "CUSTER TERRACE", "loc" : [ -84.94526399999999, 32.369728 ], "pop" : 22869, "state" : "GA" } +{ "_id" : "31906", "city" : "COLUMBUS", "loc" : [ -84.94842199999999, 32.463819 ], "pop" : 26061, "state" : "GA" } +{ "_id" : "31907", "city" : "COLUMBUS", "loc" : [ -84.89798999999999, 32.477909 ], "pop" : 54915, "state" : "GA" } +{ "_id" : "31909", "city" : "COLUMBUS", "loc" : [ -84.927404, 32.536913 ], "pop" : 20880, "state" : "GA" } +{ "_id" : "32008", "city" : "BRANFORD", "loc" : [ -82.899288, 29.939472 ], "pop" : 2439, "state" : "FL" } +{ "_id" : "32009", "city" : "BRYCEVILLE", "loc" : [ -81.972397, 30.419274 ], "pop" : 1875, "state" : "FL" } +{ "_id" : "32011", "city" : "CALLAHAN", "loc" : [ -81.814465, 30.551958 ], "pop" : 9111, "state" : "FL" } +{ "_id" : "32013", "city" : "DAY", "loc" : [ -83.28505199999999, 30.149666 ], "pop" : 1567, "state" : "FL" } +{ "_id" : "32033", "city" : "ELKTON", "loc" : [ -81.46199, 29.788243 ], "pop" : 1557, "state" : "FL" } +{ "_id" : "32034", "city" : "AMELIA ISLAND", "loc" : [ -81.468829, 30.635388 ], "pop" : 19016, "state" : "FL" } +{ "_id" : "32038", "city" : "FORT WHITE", "loc" : [ -82.687938, 29.92073 ], "pop" : 3439, "state" : "FL" } +{ "_id" : "32040", "city" : "GLEN SAINT MARY", "loc" : [ -82.20405599999999, 30.286058 ], "pop" : 6467, "state" : "FL" } +{ "_id" : "32043", "city" : "GREEN COVE SPRIN", "loc" : [ -81.72618199999999, 30.00425 ], "pop" : 16033, "state" : "FL" } +{ "_id" : "32044", "city" : "HAMPTON", "loc" : [ -82.148347, 29.857511 ], "pop" : 1274, "state" : "FL" } +{ "_id" : "32046", "city" : "HILLIARD", "loc" : [ -81.93453, 30.688367 ], "pop" : 6486, "state" : "FL" } +{ "_id" : "32052", "city" : "JASPER", "loc" : [ -82.932186, 30.502914 ], "pop" : 6588, "state" : "FL" } +{ "_id" : "32053", "city" : "JENNINGS", "loc" : [ -83.13497099999999, 30.548243 ], "pop" : 2977, "state" : "FL" } +{ "_id" : "32054", "city" : "LAKE BUTLER", "loc" : [ -82.382796, 30.003485 ], "pop" : 8658, "state" : "FL" } +{ "_id" : "32055", "city" : "LAKE CITY", "loc" : [ -82.659888, 30.165239 ], "pop" : 38018, "state" : "FL" } +{ "_id" : "32058", "city" : "LAWTEY", "loc" : [ -82.10554399999999, 30.047164 ], "pop" : 4108, "state" : "FL" } +{ "_id" : "32059", "city" : "LEE", "loc" : [ -83.284392, 30.397863 ], "pop" : 1260, "state" : "FL" } +{ "_id" : "32060", "city" : "BOYS RANCH", "loc" : [ -83.02499400000001, 30.286622 ], "pop" : 19075, "state" : "FL" } +{ "_id" : "32061", "city" : "LULU", "loc" : [ -82.538481, 30.07544 ], "pop" : 295, "state" : "FL" } +{ "_id" : "32062", "city" : "MC ALPIN", "loc" : [ -82.966182, 30.150899 ], "pop" : 2062, "state" : "FL" } +{ "_id" : "32063", "city" : "MACCLENNY", "loc" : [ -82.132475, 30.273671 ], "pop" : 9749, "state" : "FL" } +{ "_id" : "32065", "city" : "ORANGE PARK", "loc" : [ -81.774199, 30.138233 ], "pop" : 19248, "state" : "FL" } +{ "_id" : "32066", "city" : "MAYO", "loc" : [ -83.146208, 30.039979 ], "pop" : 3475, "state" : "FL" } +{ "_id" : "32068", "city" : "MIDDLEBURG", "loc" : [ -81.864476, 30.083984 ], "pop" : 23245, "state" : "FL" } +{ "_id" : "32071", "city" : "O BRIEN", "loc" : [ -82.93004999999999, 30.038114 ], "pop" : 1305, "state" : "FL" } +{ "_id" : "32073", "city" : "ORANGE PARK", "loc" : [ -81.72906999999999, 30.16369 ], "pop" : 37281, "state" : "FL" } +{ "_id" : "32082", "city" : "PONTE VEDRA BEAC", "loc" : [ -81.386383, 30.215326 ], "pop" : 14727, "state" : "FL" } +{ "_id" : "32083", "city" : "RAIFORD", "loc" : [ -82.20012, 30.070379 ], "pop" : 1594, "state" : "FL" } +{ "_id" : "32084", "city" : "SAINT AUGUSTINE", "loc" : [ -81.298367, 29.880457 ], "pop" : 24906, "state" : "FL" } +{ "_id" : "32086", "city" : "SAINT AUGUSTINE", "loc" : [ -81.323734, 29.828514 ], "pop" : 16939, "state" : "FL" } +{ "_id" : "32087", "city" : "SANDERSON", "loc" : [ -82.33774099999999, 30.302536 ], "pop" : 2270, "state" : "FL" } +{ "_id" : "32091", "city" : "STARKE", "loc" : [ -82.11851799999999, 29.958299 ], "pop" : 15058, "state" : "FL" } +{ "_id" : "32092", "city" : "SAINT AUGUSTINE", "loc" : [ -81.52637900000001, 29.947511 ], "pop" : 4702, "state" : "FL" } +{ "_id" : "32094", "city" : "WELLBORN", "loc" : [ -82.850532, 30.179624 ], "pop" : 1621, "state" : "FL" } +{ "_id" : "32095", "city" : "SAINT AUGUSTINE", "loc" : [ -81.34762600000001, 29.905726 ], "pop" : 12132, "state" : "FL" } +{ "_id" : "32096", "city" : "WHITE SPRINGS", "loc" : [ -82.776453, 30.338749 ], "pop" : 1671, "state" : "FL" } +{ "_id" : "32097", "city" : "YULEE", "loc" : [ -81.590603, 30.622225 ], "pop" : 7453, "state" : "FL" } +{ "_id" : "32102", "city" : "ASTOR", "loc" : [ -81.539929, 29.165031 ], "pop" : 2092, "state" : "FL" } +{ "_id" : "32110", "city" : "BUNNELL", "loc" : [ -81.324431, 29.45616 ], "pop" : 4925, "state" : "FL" } +{ "_id" : "32112", "city" : "CRESCENT CITY", "loc" : [ -81.557909, 29.445438 ], "pop" : 7481, "state" : "FL" } +{ "_id" : "32113", "city" : "CITRA", "loc" : [ -82.106222, 29.39182 ], "pop" : 3340, "state" : "FL" } +{ "_id" : "32114", "city" : "DAYTONA BEACH", "loc" : [ -81.037071, 29.201168 ], "pop" : 34235, "state" : "FL" } +{ "_id" : "32117", "city" : "HOLLY HILL", "loc" : [ -81.054698, 29.236006 ], "pop" : 22599, "state" : "FL" } +{ "_id" : "32118", "city" : "DAYTONA BEACH", "loc" : [ -81.009469, 29.221874 ], "pop" : 17009, "state" : "FL" } +{ "_id" : "32119", "city" : "DUNLAWTON", "loc" : [ -81.022142, 29.152526 ], "pop" : 36500, "state" : "FL" } +{ "_id" : "32124", "city" : "PORT ORANGE", "loc" : [ -81.106746, 29.122456 ], "pop" : 7360, "state" : "FL" } +{ "_id" : "32127", "city" : "PORT ORANGE", "loc" : [ -80.98835099999999, 29.1124 ], "pop" : 25925, "state" : "FL" } +{ "_id" : "32130", "city" : "DE LEON SPRINGS", "loc" : [ -81.34876199999999, 29.116592 ], "pop" : 2267, "state" : "FL" } +{ "_id" : "32131", "city" : "EAST PALATKA", "loc" : [ -81.587879, 29.660861 ], "pop" : 5851, "state" : "FL" } +{ "_id" : "32132", "city" : "EDGEWATER", "loc" : [ -80.91034399999999, 28.981801 ], "pop" : 6690, "state" : "FL" } +{ "_id" : "32134", "city" : "SALT SPRINGS", "loc" : [ -81.88775699999999, 29.279554 ], "pop" : 14324, "state" : "FL" } +{ "_id" : "32136", "city" : "FLAGLER BEACH", "loc" : [ -81.13028799999999, 29.474978 ], "pop" : 4608, "state" : "FL" } +{ "_id" : "32137", "city" : "PALM COAST", "loc" : [ -81.21899000000001, 29.556515 ], "pop" : 18194, "state" : "FL" } +{ "_id" : "32139", "city" : "GEORGETOWN", "loc" : [ -81.629783, 29.403315 ], "pop" : 1839, "state" : "FL" } +{ "_id" : "32140", "city" : "FLORAHOME", "loc" : [ -81.862224, 29.758105 ], "pop" : 1475, "state" : "FL" } +{ "_id" : "32141", "city" : "EDGEWATER", "loc" : [ -80.896869, 28.945481 ], "pop" : 11379, "state" : "FL" } +{ "_id" : "32145", "city" : "HASTINGS", "loc" : [ -81.490908, 29.705147 ], "pop" : 2189, "state" : "FL" } +{ "_id" : "32148", "city" : "INTERLACHEN", "loc" : [ -81.889432, 29.627001 ], "pop" : 15416, "state" : "FL" } +{ "_id" : "32159", "city" : "LADY LAKE", "loc" : [ -81.92559799999999, 28.929939 ], "pop" : 11493, "state" : "FL" } +{ "_id" : "32168", "city" : "NEW SMYRNA BEACH", "loc" : [ -80.95843600000001, 29.024672 ], "pop" : 17624, "state" : "FL" } +{ "_id" : "32169", "city" : "NEW SMYRNA BEACH", "loc" : [ -80.888463, 29.017196 ], "pop" : 9169, "state" : "FL" } +{ "_id" : "32174", "city" : "ORMOND BEACH", "loc" : [ -81.088216, 29.283305 ], "pop" : 34477, "state" : "FL" } +{ "_id" : "32176", "city" : "ORMOND BEACH", "loc" : [ -81.058432, 29.322192 ], "pop" : 15383, "state" : "FL" } +{ "_id" : "32177", "city" : "PALATKA", "loc" : [ -81.659452, 29.657748 ], "pop" : 24263, "state" : "FL" } +{ "_id" : "32179", "city" : "OCKLAWAHA", "loc" : [ -81.88569, 29.064308 ], "pop" : 4385, "state" : "FL" } +{ "_id" : "32180", "city" : "PIERSON", "loc" : [ -81.43532999999999, 29.222596 ], "pop" : 7341, "state" : "FL" } +{ "_id" : "32181", "city" : "POMONA PARK", "loc" : [ -81.63073900000001, 29.502106 ], "pop" : 1006, "state" : "FL" } +{ "_id" : "32187", "city" : "SAN MATEO", "loc" : [ -81.5921, 29.588827 ], "pop" : 1864, "state" : "FL" } +{ "_id" : "32189", "city" : "SATSUMA", "loc" : [ -81.640596, 29.559354 ], "pop" : 3490, "state" : "FL" } +{ "_id" : "32190", "city" : "SEVILLE", "loc" : [ -81.527894, 29.320084 ], "pop" : 436, "state" : "FL" } +{ "_id" : "32195", "city" : "WEIRSDALE", "loc" : [ -81.893168, 28.978182 ], "pop" : 3034, "state" : "FL" } +{ "_id" : "32202", "city" : "JACKSONVILLE", "loc" : [ -81.651672, 30.329882 ], "pop" : 4724, "state" : "FL" } +{ "_id" : "32204", "city" : "JACKSONVILLE", "loc" : [ -81.685445, 30.318899 ], "pop" : 8839, "state" : "FL" } +{ "_id" : "32205", "city" : "JACKSONVILLE", "loc" : [ -81.72203399999999, 30.317236 ], "pop" : 46463, "state" : "FL" } +{ "_id" : "32206", "city" : "JACKSONVILLE", "loc" : [ -81.648769, 30.351073 ], "pop" : 23301, "state" : "FL" } +{ "_id" : "32207", "city" : "JACKSONVILLE", "loc" : [ -81.63205000000001, 30.290766 ], "pop" : 35661, "state" : "FL" } +{ "_id" : "32208", "city" : "JACKSONVILLE", "loc" : [ -81.688939, 30.393664 ], "pop" : 35615, "state" : "FL" } +{ "_id" : "32209", "city" : "JACKSONVILLE", "loc" : [ -81.691974, 30.35841 ], "pop" : 42856, "state" : "FL" } +{ "_id" : "32210", "city" : "JACKSONVILLE", "loc" : [ -81.74731199999999, 30.268743 ], "pop" : 54548, "state" : "FL" } +{ "_id" : "32211", "city" : "JACKSONVILLE", "loc" : [ -81.58824799999999, 30.348034 ], "pop" : 54199, "state" : "FL" } +{ "_id" : "32212", "city" : "JACKSONVILLE N A", "loc" : [ -81.68848, 30.220905 ], "pop" : 2517, "state" : "FL" } +{ "_id" : "32215", "city" : "CECIL FIELD NAS", "loc" : [ -81.66314199999999, 30.23295 ], "pop" : 0, "state" : "FL" } +{ "_id" : "32216", "city" : "JACKSONVILLE", "loc" : [ -81.547387, 30.293907 ], "pop" : 58867, "state" : "FL" } +{ "_id" : "32217", "city" : "JACKSONVILLE", "loc" : [ -81.616956, 30.240678 ], "pop" : 19356, "state" : "FL" } +{ "_id" : "32218", "city" : "JACKSONVILLE", "loc" : [ -81.662631, 30.45067 ], "pop" : 30493, "state" : "FL" } +{ "_id" : "32219", "city" : "JACKSONVILLE", "loc" : [ -81.763451, 30.403365 ], "pop" : 9570, "state" : "FL" } +{ "_id" : "32220", "city" : "JACKSONVILLE", "loc" : [ -81.817572, 30.329003 ], "pop" : 9389, "state" : "FL" } +{ "_id" : "32221", "city" : "JACKSONVILLE", "loc" : [ -81.82023100000001, 30.283707 ], "pop" : 18244, "state" : "FL" } +{ "_id" : "32222", "city" : "JACKSONVILLE", "loc" : [ -81.813081, 30.229176 ], "pop" : 4093, "state" : "FL" } +{ "_id" : "32223", "city" : "JACKSONVILLE", "loc" : [ -81.62996099999999, 30.154817 ], "pop" : 19120, "state" : "FL" } +{ "_id" : "32224", "city" : "JACKSONVILLE", "loc" : [ -81.440427, 30.303076 ], "pop" : 2535, "state" : "FL" } +{ "_id" : "32225", "city" : "JACKSONVILLE", "loc" : [ -81.506092, 30.350968 ], "pop" : 26551, "state" : "FL" } +{ "_id" : "32226", "city" : "JACKSONVILLE", "loc" : [ -81.544808, 30.473485 ], "pop" : 6880, "state" : "FL" } +{ "_id" : "32227", "city" : "JACKSONVILLE BEA", "loc" : [ -81.405424, 30.388275 ], "pop" : 9055, "state" : "FL" } +{ "_id" : "32233", "city" : "ATLANTIC BEACH", "loc" : [ -81.41586599999999, 30.348258 ], "pop" : 23412, "state" : "FL" } +{ "_id" : "32234", "city" : "BALDWIN", "loc" : [ -81.978345, 30.229562 ], "pop" : 5830, "state" : "FL" } +{ "_id" : "32244", "city" : "JACKSONVILLE", "loc" : [ -81.75557999999999, 30.223137 ], "pop" : 37603, "state" : "FL" } +{ "_id" : "32250", "city" : "JACKSONVILLE BEA", "loc" : [ -81.406243, 30.28319 ], "pop" : 22392, "state" : "FL" } +{ "_id" : "32256", "city" : "JACKSONVILLE", "loc" : [ -81.55713900000001, 30.221356 ], "pop" : 17293, "state" : "FL" } +{ "_id" : "32257", "city" : "JACKSONVILLE", "loc" : [ -81.605042, 30.192703 ], "pop" : 30022, "state" : "FL" } +{ "_id" : "32258", "city" : "JACKSONVILLE", "loc" : [ -81.573864, 30.145944 ], "pop" : 7261, "state" : "FL" } +{ "_id" : "32259", "city" : "JACKSONVILLE", "loc" : [ -81.621701, 30.095578 ], "pop" : 6677, "state" : "FL" } +{ "_id" : "32266", "city" : "NEPTUNE BEACH", "loc" : [ -81.405123, 30.31548 ], "pop" : 6816, "state" : "FL" } +{ "_id" : "32301", "city" : "TALLAHASSEE", "loc" : [ -84.259337, 30.428563 ], "pop" : 21329, "state" : "FL" } +{ "_id" : "32303", "city" : "TALLAHASSEE", "loc" : [ -84.318946, 30.487433 ], "pop" : 36053, "state" : "FL" } +{ "_id" : "32304", "city" : "TALLAHASSEE", "loc" : [ -84.32113200000001, 30.447752 ], "pop" : 33437, "state" : "FL" } +{ "_id" : "32306", "city" : "TALLAHASSEE", "loc" : [ -84.29559399999999, 30.442152 ], "pop" : 1690, "state" : "FL" } +{ "_id" : "32308", "city" : "TALLAHASSEE", "loc" : [ -84.206903, 30.507725 ], "pop" : 34857, "state" : "FL" } +{ "_id" : "32310", "city" : "TALLAHASSEE", "loc" : [ -84.32980000000001, 30.399125 ], "pop" : 30379, "state" : "FL" } +{ "_id" : "32311", "city" : "TALLAHASSEE", "loc" : [ -84.186995, 30.415625 ], "pop" : 17005, "state" : "FL" } +{ "_id" : "32312", "city" : "TALLAHASSEE", "loc" : [ -84.262708, 30.518474 ], "pop" : 17743, "state" : "FL" } +{ "_id" : "32320", "city" : "APALACHICOLA", "loc" : [ -85.006264, 29.725465 ], "pop" : 3859, "state" : "FL" } +{ "_id" : "32321", "city" : "BRISTOL", "loc" : [ -84.946558, 30.422279 ], "pop" : 4078, "state" : "FL" } +{ "_id" : "32322", "city" : "CARRABELLE", "loc" : [ -84.635845, 29.869205 ], "pop" : 2138, "state" : "FL" } +{ "_id" : "32324", "city" : "CHATTAHOOCHEE", "loc" : [ -84.82804400000001, 30.683394 ], "pop" : 6325, "state" : "FL" } +{ "_id" : "32327", "city" : "CRAWFORDVILLE", "loc" : [ -84.32047900000001, 30.210831 ], "pop" : 10004, "state" : "FL" } +{ "_id" : "32328", "city" : "SAINT GEORGE ISL", "loc" : [ -84.87009999999999, 29.733906 ], "pop" : 2541, "state" : "FL" } +{ "_id" : "32331", "city" : "GREENVILLE", "loc" : [ -83.647397, 30.451199 ], "pop" : 4107, "state" : "FL" } +{ "_id" : "32333", "city" : "HAVANA", "loc" : [ -84.41434, 30.609242 ], "pop" : 9767, "state" : "FL" } +{ "_id" : "32334", "city" : "HOSFORD", "loc" : [ -84.80543299999999, 30.363875 ], "pop" : 1491, "state" : "FL" } +{ "_id" : "32336", "city" : "LAMONT", "loc" : [ -83.900266, 30.365341 ], "pop" : 1409, "state" : "FL" } +{ "_id" : "32340", "city" : "MADISON", "loc" : [ -83.406678, 30.480209 ], "pop" : 11339, "state" : "FL" } +{ "_id" : "32344", "city" : "MONTICELLO", "loc" : [ -83.892454, 30.519681 ], "pop" : 9578, "state" : "FL" } +{ "_id" : "32346", "city" : "PANACEA", "loc" : [ -84.391212, 30.015322 ], "pop" : 1292, "state" : "FL" } +{ "_id" : "32347", "city" : "PERRY", "loc" : [ -83.585021, 30.097489 ], "pop" : 15401, "state" : "FL" } +{ "_id" : "32350", "city" : "PINETTA", "loc" : [ -83.340463, 30.599703 ], "pop" : 642, "state" : "FL" } +{ "_id" : "32351", "city" : "QUINCY", "loc" : [ -84.60945, 30.586675 ], "pop" : 25013, "state" : "FL" } +{ "_id" : "32356", "city" : "SALEM", "loc" : [ -83.385828, 29.823815 ], "pop" : 264, "state" : "FL" } +{ "_id" : "32358", "city" : "SOPCHOPPY", "loc" : [ -84.454877, 30.071353 ], "pop" : 3335, "state" : "FL" } +{ "_id" : "32359", "city" : "STEINHATCHEE", "loc" : [ -83.372332, 29.673871 ], "pop" : 1415, "state" : "FL" } +{ "_id" : "32401", "city" : "PANAMA CITY", "loc" : [ -85.64940300000001, 30.160624 ], "pop" : 24968, "state" : "FL" } +{ "_id" : "32403", "city" : "PANAMA CITY", "loc" : [ -85.57622499999999, 30.058252 ], "pop" : 5333, "state" : "FL" } +{ "_id" : "32404", "city" : "PANAMA CITY", "loc" : [ -85.57626399999999, 30.165291 ], "pop" : 30101, "state" : "FL" } +{ "_id" : "32405", "city" : "PANAMA CITY", "loc" : [ -85.672686, 30.194949 ], "pop" : 25701, "state" : "FL" } +{ "_id" : "32407", "city" : "PANAMA CITY BEAC", "loc" : [ -85.791984, 30.194623 ], "pop" : 3115, "state" : "FL" } +{ "_id" : "32408", "city" : "PANAMA CITY BEAC", "loc" : [ -85.763628, 30.160859 ], "pop" : 9702, "state" : "FL" } +{ "_id" : "32409", "city" : "SOUTHPORT", "loc" : [ -85.644536, 30.310679 ], "pop" : 5001, "state" : "FL" } +{ "_id" : "32413", "city" : "PANAMA CITY BEAC", "loc" : [ -85.904946, 30.245835 ], "pop" : 5646, "state" : "FL" } +{ "_id" : "32420", "city" : "ALFORD", "loc" : [ -85.34838000000001, 30.714106 ], "pop" : 576, "state" : "FL" } +{ "_id" : "32421", "city" : "ALTHA", "loc" : [ -85.17043, 30.531882 ], "pop" : 3280, "state" : "FL" } +{ "_id" : "32423", "city" : "BASCOM", "loc" : [ -85.09721999999999, 30.951365 ], "pop" : 1011, "state" : "FL" } +{ "_id" : "32424", "city" : "BLOUNTSTOWN", "loc" : [ -85.062022, 30.4394 ], "pop" : 6984, "state" : "FL" } +{ "_id" : "32425", "city" : "BONIFAY", "loc" : [ -85.68996199999999, 30.846369 ], "pop" : 9342, "state" : "FL" } +{ "_id" : "32426", "city" : "CAMPBELLTON", "loc" : [ -85.37659600000001, 30.95629 ], "pop" : 741, "state" : "FL" } +{ "_id" : "32427", "city" : "CARYVILLE", "loc" : [ -85.79978699999999, 30.796878 ], "pop" : 2517, "state" : "FL" } +{ "_id" : "32428", "city" : "CHIPLEY", "loc" : [ -85.54864600000001, 30.710658 ], "pop" : 11248, "state" : "FL" } +{ "_id" : "32430", "city" : "CLARKSVILLE", "loc" : [ -85.189806, 30.356834 ], "pop" : 129, "state" : "FL" } +{ "_id" : "32431", "city" : "COTTONDALE", "loc" : [ -85.38467199999999, 30.800359 ], "pop" : 3333, "state" : "FL" } +{ "_id" : "32433", "city" : "DE FUNIAK SPRING", "loc" : [ -86.138006, 30.751783 ], "pop" : 15496, "state" : "FL" } +{ "_id" : "32437", "city" : "EBRO", "loc" : [ -85.88806599999999, 30.435181 ], "pop" : 361, "state" : "FL" } +{ "_id" : "32438", "city" : "FOUNTAIN", "loc" : [ -85.429272, 30.475327 ], "pop" : 1869, "state" : "FL" } +{ "_id" : "32439", "city" : "FREEPORT", "loc" : [ -86.168441, 30.489596 ], "pop" : 744, "state" : "FL" } +{ "_id" : "32440", "city" : "GRACEVILLE", "loc" : [ -85.513622, 30.942601 ], "pop" : 5353, "state" : "FL" } +{ "_id" : "32442", "city" : "GRAND RIDGE", "loc" : [ -85.020954, 30.714831 ], "pop" : 1708, "state" : "FL" } +{ "_id" : "32443", "city" : "GREENWOOD", "loc" : [ -85.15549, 30.852506 ], "pop" : 4058, "state" : "FL" } +{ "_id" : "32444", "city" : "LYNN HAVEN", "loc" : [ -85.646658, 30.236165 ], "pop" : 12205, "state" : "FL" } +{ "_id" : "32445", "city" : "MALONE", "loc" : [ -85.16387400000001, 30.960245 ], "pop" : 1046, "state" : "FL" } +{ "_id" : "32446", "city" : "MARIANNA", "loc" : [ -85.229367, 30.758587 ], "pop" : 17908, "state" : "FL" } +{ "_id" : "32449", "city" : "KINARD", "loc" : [ -85.206467, 30.263241 ], "pop" : 297, "state" : "FL" } +{ "_id" : "32455", "city" : "PONCE DE LEON", "loc" : [ -85.954633, 30.704146 ], "pop" : 2200, "state" : "FL" } +{ "_id" : "32456", "city" : "PORT SAINT JOE", "loc" : [ -85.298787, 29.83539 ], "pop" : 7490, "state" : "FL" } +{ "_id" : "32459", "city" : "SANTA ROSA BEACH", "loc" : [ -86.24580899999999, 30.365883 ], "pop" : 5039, "state" : "FL" } +{ "_id" : "32460", "city" : "SNEADS", "loc" : [ -84.933655, 30.727619 ], "pop" : 6334, "state" : "FL" } +{ "_id" : "32462", "city" : "VERNON", "loc" : [ -85.755286, 30.62668 ], "pop" : 4111, "state" : "FL" } +{ "_id" : "32464", "city" : "WESTVILLE", "loc" : [ -85.91297299999999, 30.874689 ], "pop" : 3081, "state" : "FL" } +{ "_id" : "32465", "city" : "WEWAHITCHKA", "loc" : [ -85.20483, 30.093255 ], "pop" : 4014, "state" : "FL" } +{ "_id" : "32466", "city" : "YOUNGSTOWN", "loc" : [ -85.516881, 30.326913 ], "pop" : 3634, "state" : "FL" } +{ "_id" : "32501", "city" : "PENSACOLA", "loc" : [ -87.224763, 30.422282 ], "pop" : 16485, "state" : "FL" } +{ "_id" : "32503", "city" : "PENSACOLA", "loc" : [ -87.210432, 30.456406 ], "pop" : 34491, "state" : "FL" } +{ "_id" : "32504", "city" : "PENSACOLA", "loc" : [ -87.187242, 30.487299 ], "pop" : 23077, "state" : "FL" } +{ "_id" : "32505", "city" : "PENSACOLA", "loc" : [ -87.258937, 30.448069 ], "pop" : 29026, "state" : "FL" } +{ "_id" : "32506", "city" : "PENSACOLA", "loc" : [ -87.309185, 30.412912 ], "pop" : 29834, "state" : "FL" } +{ "_id" : "32507", "city" : "PENSACOLA", "loc" : [ -87.312558, 30.373707 ], "pop" : 23525, "state" : "FL" } +{ "_id" : "32508", "city" : "PENSACOLA", "loc" : [ -87.274945, 30.351063 ], "pop" : 3688, "state" : "FL" } +{ "_id" : "32514", "city" : "PENSACOLA", "loc" : [ -87.216723, 30.524148 ], "pop" : 30185, "state" : "FL" } +{ "_id" : "32526", "city" : "PENSACOLA", "loc" : [ -87.317925, 30.475593 ], "pop" : 28674, "state" : "FL" } +{ "_id" : "32531", "city" : "BAKER", "loc" : [ -86.677015, 30.831569 ], "pop" : 3389, "state" : "FL" } +{ "_id" : "32533", "city" : "CANTONMENT", "loc" : [ -87.325052, 30.614253 ], "pop" : 19829, "state" : "FL" } +{ "_id" : "32534", "city" : "PENSACOLA", "loc" : [ -87.279324, 30.530065 ], "pop" : 12046, "state" : "FL" } +{ "_id" : "32535", "city" : "CENTURY", "loc" : [ -87.32158200000001, 30.968742 ], "pop" : 5422, "state" : "FL" } +{ "_id" : "32536", "city" : "CRESTVIEW", "loc" : [ -86.553678, 30.77061 ], "pop" : 21799, "state" : "FL" } +{ "_id" : "32541", "city" : "SANDESTIN", "loc" : [ -86.484903, 30.397198 ], "pop" : 8080, "state" : "FL" } +{ "_id" : "32542", "city" : "EGLIN A F B", "loc" : [ -86.61595800000001, 30.479409 ], "pop" : 13431, "state" : "FL" } +{ "_id" : "32547", "city" : "FORT WALTON BEAC", "loc" : [ -86.627487, 30.447297 ], "pop" : 27344, "state" : "FL" } +{ "_id" : "32548", "city" : "FORT WALTON BEAC", "loc" : [ -86.62147899999999, 30.415262 ], "pop" : 21791, "state" : "FL" } +{ "_id" : "32561", "city" : "GULF BREEZE", "loc" : [ -87.043875, 30.3847 ], "pop" : 27875, "state" : "FL" } +{ "_id" : "32564", "city" : "HOLT", "loc" : [ -86.704638, 30.72522 ], "pop" : 1821, "state" : "FL" } +{ "_id" : "32565", "city" : "JAY", "loc" : [ -87.13323699999999, 30.898488 ], "pop" : 5952, "state" : "FL" } +{ "_id" : "32566", "city" : "NAVARRE", "loc" : [ -86.937102, 30.590261 ], "pop" : 5537, "state" : "FL" } +{ "_id" : "32567", "city" : "LAUREL HILL", "loc" : [ -86.400323, 30.95236 ], "pop" : 2967, "state" : "FL" } +{ "_id" : "32568", "city" : "WALNUT HILL", "loc" : [ -87.449628, 30.870043 ], "pop" : 3604, "state" : "FL" } +{ "_id" : "32569", "city" : "MARY ESTHER", "loc" : [ -86.71271900000001, 30.412186 ], "pop" : 9382, "state" : "FL" } +{ "_id" : "32570", "city" : "MILTON", "loc" : [ -87.04727800000001, 30.660413 ], "pop" : 20038, "state" : "FL" } +{ "_id" : "32571", "city" : "PACE", "loc" : [ -87.15033, 30.616173 ], "pop" : 15661, "state" : "FL" } +{ "_id" : "32578", "city" : "NICEVILLE", "loc" : [ -86.41446000000001, 30.495771 ], "pop" : 25146, "state" : "FL" } +{ "_id" : "32579", "city" : "SHALIMAR", "loc" : [ -86.571724, 30.445565 ], "pop" : 9327, "state" : "FL" } +{ "_id" : "32580", "city" : "VALPARAISO", "loc" : [ -86.50091399999999, 30.509197 ], "pop" : 4964, "state" : "FL" } +{ "_id" : "32583", "city" : "MILTON", "loc" : [ -87.066273, 30.576058 ], "pop" : 9457, "state" : "FL" } +{ "_id" : "32601", "city" : "GAINESVILLE", "loc" : [ -82.310046, 29.645029 ], "pop" : 31328, "state" : "FL" } +{ "_id" : "32603", "city" : "GAINESVILLE", "loc" : [ -82.34928600000001, 29.651484 ], "pop" : 5271, "state" : "FL" } +{ "_id" : "32605", "city" : "GAINESVILLE", "loc" : [ -82.36794, 29.678458 ], "pop" : 21349, "state" : "FL" } +{ "_id" : "32606", "city" : "GAINESVILLE", "loc" : [ -82.40232399999999, 29.695393 ], "pop" : 18408, "state" : "FL" } +{ "_id" : "32607", "city" : "GAINESVILLE", "loc" : [ -82.40325199999999, 29.645618 ], "pop" : 21103, "state" : "FL" } +{ "_id" : "32608", "city" : "GAINESVILLE", "loc" : [ -82.387282, 29.613204 ], "pop" : 22945, "state" : "FL" } +{ "_id" : "32609", "city" : "GAINESVILLE", "loc" : [ -82.308032, 29.70053 ], "pop" : 17668, "state" : "FL" } +{ "_id" : "32611", "city" : "GAINESVILLE", "loc" : [ -82.35092, 29.644148 ], "pop" : 8023, "state" : "FL" } +{ "_id" : "32615", "city" : "SANTA FE", "loc" : [ -82.480531, 29.796996 ], "pop" : 9414, "state" : "FL" } +{ "_id" : "32617", "city" : "ANTHONY", "loc" : [ -82.12615700000001, 29.304785 ], "pop" : 6296, "state" : "FL" } +{ "_id" : "32618", "city" : "ARCHER", "loc" : [ -82.51084, 29.559738 ], "pop" : 6188, "state" : "FL" } +{ "_id" : "32619", "city" : "BELL", "loc" : [ -82.871106, 29.78373 ], "pop" : 2446, "state" : "FL" } +{ "_id" : "32621", "city" : "BRONSON", "loc" : [ -82.635644, 29.460952 ], "pop" : 2111, "state" : "FL" } +{ "_id" : "32622", "city" : "BROOKER", "loc" : [ -82.29563400000001, 29.919028 ], "pop" : 1194, "state" : "FL" } +{ "_id" : "32625", "city" : "CEDAR KEY", "loc" : [ -83.01679300000001, 29.171006 ], "pop" : 1173, "state" : "FL" } +{ "_id" : "32626", "city" : "CHIEFLAND", "loc" : [ -82.88089600000001, 29.483243 ], "pop" : 7498, "state" : "FL" } +{ "_id" : "32631", "city" : "EARLETON", "loc" : [ -82.11376199999999, 29.722159 ], "pop" : 1014, "state" : "FL" } +{ "_id" : "32640", "city" : "HAWTHORNE", "loc" : [ -82.105625, 29.573998 ], "pop" : 4151, "state" : "FL" } +{ "_id" : "32643", "city" : "HIGH SPRINGS", "loc" : [ -82.615628, 29.841022 ], "pop" : 7557, "state" : "FL" } +{ "_id" : "32648", "city" : "HORSESHOE BEACH", "loc" : [ -83.26158700000001, 29.48689 ], "pop" : 652, "state" : "FL" } +{ "_id" : "32656", "city" : "KEYSTONE HEIGHTS", "loc" : [ -81.989885, 29.797579 ], "pop" : 8011, "state" : "FL" } +{ "_id" : "32666", "city" : "MELROSE", "loc" : [ -82.027863, 29.732456 ], "pop" : 5507, "state" : "FL" } +{ "_id" : "32667", "city" : "MICANOPY", "loc" : [ -82.279698, 29.526029 ], "pop" : 2409, "state" : "FL" } +{ "_id" : "32668", "city" : "MORRISTON", "loc" : [ -82.491668, 29.28126 ], "pop" : 2054, "state" : "FL" } +{ "_id" : "32669", "city" : "NEWBERRY", "loc" : [ -82.585188, 29.660906 ], "pop" : 5491, "state" : "FL" } +{ "_id" : "32680", "city" : "OLD TOWN", "loc" : [ -83.057393, 29.624558 ], "pop" : 9494, "state" : "FL" } +{ "_id" : "32686", "city" : "REDDICK", "loc" : [ -82.243995, 29.375352 ], "pop" : 10006, "state" : "FL" } +{ "_id" : "32693", "city" : "TRENTON", "loc" : [ -82.80934499999999, 29.626375 ], "pop" : 6925, "state" : "FL" } +{ "_id" : "32694", "city" : "WALDO", "loc" : [ -82.160791, 29.787096 ], "pop" : 1676, "state" : "FL" } +{ "_id" : "32696", "city" : "WILLISTON", "loc" : [ -82.485601, 29.397737 ], "pop" : 7664, "state" : "FL" } +{ "_id" : "32701", "city" : "ALTAMONTE SPRING", "loc" : [ -81.371908, 28.662728 ], "pop" : 21392, "state" : "FL" } +{ "_id" : "32702", "city" : "ALTOONA", "loc" : [ -81.632322, 29.021935 ], "pop" : 1743, "state" : "FL" } +{ "_id" : "32703", "city" : "HUNT CLUB", "loc" : [ -81.48514900000001, 28.661865 ], "pop" : 34100, "state" : "FL" } +{ "_id" : "32707", "city" : "CASSELBERRY", "loc" : [ -81.31221499999999, 28.661671 ], "pop" : 30933, "state" : "FL" } +{ "_id" : "32708", "city" : "WINTER SPRINGS", "loc" : [ -81.281367, 28.683097 ], "pop" : 27311, "state" : "FL" } +{ "_id" : "32709", "city" : "CHRISTMAS", "loc" : [ -81.01157000000001, 28.546244 ], "pop" : 2331, "state" : "FL" } +{ "_id" : "32712", "city" : "APOPKA", "loc" : [ -81.513615, 28.711976 ], "pop" : 20208, "state" : "FL" } +{ "_id" : "32713", "city" : "DEBARY", "loc" : [ -81.306506, 28.884573 ], "pop" : 9491, "state" : "FL" } +{ "_id" : "32714", "city" : "FOREST CITY", "loc" : [ -81.40853300000001, 28.664983 ], "pop" : 29133, "state" : "FL" } +{ "_id" : "32720", "city" : "DELAND", "loc" : [ -81.334853, 29.02659 ], "pop" : 23152, "state" : "FL" } +{ "_id" : "32724", "city" : "DELAND", "loc" : [ -81.28634099999999, 29.04225 ], "pop" : 21715, "state" : "FL" } +{ "_id" : "32725", "city" : "DELTONA", "loc" : [ -81.24730700000001, 28.898897 ], "pop" : 27678, "state" : "FL" } +{ "_id" : "32726", "city" : "EUSTIS", "loc" : [ -81.64512999999999, 28.857686 ], "pop" : 19585, "state" : "FL" } +{ "_id" : "32730", "city" : "FERN PARK", "loc" : [ -81.341837, 28.651161 ], "pop" : 4815, "state" : "FL" } +{ "_id" : "32732", "city" : "GENEVA", "loc" : [ -81.11136999999999, 28.750299 ], "pop" : 3827, "state" : "FL" } +{ "_id" : "32735", "city" : "GRAND ISLAND", "loc" : [ -81.739093, 28.886552 ], "pop" : 1416, "state" : "FL" } +{ "_id" : "32738", "city" : "DELTONA", "loc" : [ -81.192171, 28.909311 ], "pop" : 22426, "state" : "FL" } +{ "_id" : "32744", "city" : "LAKE HELEN", "loc" : [ -81.233367, 28.980567 ], "pop" : 3229, "state" : "FL" } +{ "_id" : "32746", "city" : "HEATHROW", "loc" : [ -81.338075, 28.752352 ], "pop" : 9959, "state" : "FL" } +{ "_id" : "32750", "city" : "LONGWOOD", "loc" : [ -81.355238, 28.711994 ], "pop" : 27633, "state" : "FL" } +{ "_id" : "32751", "city" : "EATONVILLE", "loc" : [ -81.354598, 28.631284 ], "pop" : 19834, "state" : "FL" } +{ "_id" : "32754", "city" : "MIMS", "loc" : [ -80.86627799999999, 28.697383 ], "pop" : 8943, "state" : "FL" } +{ "_id" : "32757", "city" : "MOUNT DORA", "loc" : [ -81.64559300000001, 28.792787 ], "pop" : 15757, "state" : "FL" } +{ "_id" : "32759", "city" : "OAK HILL", "loc" : [ -80.855063, 28.869985 ], "pop" : 2261, "state" : "FL" } +{ "_id" : "32763", "city" : "ORANGE CITY", "loc" : [ -81.29952400000001, 28.945291 ], "pop" : 12946, "state" : "FL" } +{ "_id" : "32764", "city" : "OSTEEN", "loc" : [ -81.15622399999999, 28.842617 ], "pop" : 2215, "state" : "FL" } +{ "_id" : "32765", "city" : "OVIEDO", "loc" : [ -81.206593, 28.651256 ], "pop" : 19519, "state" : "FL" } +{ "_id" : "32766", "city" : "CHULUOTA", "loc" : [ -81.11823699999999, 28.640634 ], "pop" : 3280, "state" : "FL" } +{ "_id" : "32767", "city" : "PAISLEY", "loc" : [ -81.50300900000001, 28.999323 ], "pop" : 1963, "state" : "FL" } +{ "_id" : "32771", "city" : "SANFORD", "loc" : [ -81.285044, 28.801307 ], "pop" : 27016, "state" : "FL" } +{ "_id" : "32773", "city" : "SANFORD", "loc" : [ -81.282042, 28.764385 ], "pop" : 19707, "state" : "FL" } +{ "_id" : "32776", "city" : "SORRENTO", "loc" : [ -81.53231700000001, 28.803519 ], "pop" : 5382, "state" : "FL" } +{ "_id" : "32778", "city" : "TAVARES", "loc" : [ -81.73405, 28.801027 ], "pop" : 12131, "state" : "FL" } +{ "_id" : "32779", "city" : "SPRINGS PLAZA", "loc" : [ -81.42276699999999, 28.703978 ], "pop" : 27075, "state" : "FL" } +{ "_id" : "32780", "city" : "TITUSVILLE", "loc" : [ -80.819141, 28.569712 ], "pop" : 28649, "state" : "FL" } +{ "_id" : "32784", "city" : "DONA VISTA", "loc" : [ -81.67165300000001, 28.931443 ], "pop" : 7866, "state" : "FL" } +{ "_id" : "32789", "city" : "WINTER PARK", "loc" : [ -81.353436, 28.597824 ], "pop" : 24236, "state" : "FL" } +{ "_id" : "32792", "city" : "ALOMA", "loc" : [ -81.30211199999999, 28.60779 ], "pop" : 44973, "state" : "FL" } +{ "_id" : "32796", "city" : "TITUSVILLE", "loc" : [ -80.842915, 28.627078 ], "pop" : 19916, "state" : "FL" } +{ "_id" : "32798", "city" : "ZELLWOOD", "loc" : [ -81.57617399999999, 28.71944 ], "pop" : 1930, "state" : "FL" } +{ "_id" : "32801", "city" : "ORLANDO", "loc" : [ -81.372668, 28.539882 ], "pop" : 9275, "state" : "FL" } +{ "_id" : "32803", "city" : "ORLANDO", "loc" : [ -81.35346199999999, 28.555897 ], "pop" : 19992, "state" : "FL" } +{ "_id" : "32804", "city" : "FAIRVILLA", "loc" : [ -81.391955, 28.576547 ], "pop" : 18087, "state" : "FL" } +{ "_id" : "32805", "city" : "ORLANDO", "loc" : [ -81.404516, 28.5302 ], "pop" : 29117, "state" : "FL" } +{ "_id" : "32806", "city" : "ORLANDO", "loc" : [ -81.35696799999999, 28.513958 ], "pop" : 25996, "state" : "FL" } +{ "_id" : "32807", "city" : "AZALEA PARK", "loc" : [ -81.305274, 28.544924 ], "pop" : 28087, "state" : "FL" } +{ "_id" : "32808", "city" : "PINE HILLS", "loc" : [ -81.44758, 28.580463 ], "pop" : 42278, "state" : "FL" } +{ "_id" : "32809", "city" : "PINE CASTLE", "loc" : [ -81.38175099999999, 28.461916 ], "pop" : 17602, "state" : "FL" } +{ "_id" : "32810", "city" : "LOCKHART", "loc" : [ -81.42585200000001, 28.622183 ], "pop" : 23781, "state" : "FL" } +{ "_id" : "32811", "city" : "ORLO VISTA", "loc" : [ -81.442014, 28.516082 ], "pop" : 21545, "state" : "FL" } +{ "_id" : "32812", "city" : "ORLANDO", "loc" : [ -81.328816, 28.49981 ], "pop" : 26888, "state" : "FL" } +{ "_id" : "32813", "city" : "NAVAL TRAINING C", "loc" : [ -81.32896599999999, 28.570467 ], "pop" : 9216, "state" : "FL" } +{ "_id" : "32815", "city" : "KENNEDY SPACE CE", "loc" : [ -80.58248, 28.498821 ], "pop" : 1, "state" : "FL" } +{ "_id" : "32817", "city" : "UNION PARK", "loc" : [ -81.25353699999999, 28.590251 ], "pop" : 20723, "state" : "FL" } +{ "_id" : "32818", "city" : "ORLANDO", "loc" : [ -81.484618, 28.580147 ], "pop" : 26887, "state" : "FL" } +{ "_id" : "32819", "city" : "SAND LAKE", "loc" : [ -81.452484, 28.467258 ], "pop" : 4434, "state" : "FL" } +{ "_id" : "32820", "city" : "UNION PARK", "loc" : [ -81.11062800000001, 28.578256 ], "pop" : 2587, "state" : "FL" } +{ "_id" : "32821", "city" : "ORLANDO", "loc" : [ -81.46660199999999, 28.395724 ], "pop" : 9982, "state" : "FL" } +{ "_id" : "32822", "city" : "VENTURA", "loc" : [ -81.293874, 28.504765 ], "pop" : 33986, "state" : "FL" } +{ "_id" : "32824", "city" : "ORLANDO", "loc" : [ -81.36218700000001, 28.393157 ], "pop" : 8225, "state" : "FL" } +{ "_id" : "32825", "city" : "ORLANDO", "loc" : [ -81.257081, 28.546865 ], "pop" : 26373, "state" : "FL" } +{ "_id" : "32826", "city" : "ORLANDO", "loc" : [ -81.19070499999999, 28.582601 ], "pop" : 12369, "state" : "FL" } +{ "_id" : "32827", "city" : "ORLANDO", "loc" : [ -81.342979, 28.43168 ], "pop" : 3831, "state" : "FL" } +{ "_id" : "32828", "city" : "ORLANDO", "loc" : [ -81.179489, 28.552297 ], "pop" : 3249, "state" : "FL" } +{ "_id" : "32829", "city" : "ORLANDO", "loc" : [ -81.260778, 28.484877 ], "pop" : 3848, "state" : "FL" } +{ "_id" : "32830", "city" : "LAKE BUENA VISTA", "loc" : [ -81.519034, 28.369378 ], "pop" : 6, "state" : "FL" } +{ "_id" : "32831", "city" : "ORLANDO", "loc" : [ -81.191768, 28.488229 ], "pop" : 1123, "state" : "FL" } +{ "_id" : "32832", "city" : "ORLANDO", "loc" : [ -81.188807, 28.377428 ], "pop" : 1863, "state" : "FL" } +{ "_id" : "32833", "city" : "UNION PARK", "loc" : [ -81.098129, 28.531797 ], "pop" : 3748, "state" : "FL" } +{ "_id" : "32835", "city" : "ORLANDO", "loc" : [ -81.478663, 28.528885 ], "pop" : 20343, "state" : "FL" } +{ "_id" : "32836", "city" : "ORLANDO", "loc" : [ -81.49563999999999, 28.460842 ], "pop" : 21329, "state" : "FL" } +{ "_id" : "32837", "city" : "ORLANDO", "loc" : [ -81.41788200000001, 28.394861 ], "pop" : 13075, "state" : "FL" } +{ "_id" : "32839", "city" : "ORLANDO", "loc" : [ -81.408162, 28.487102 ], "pop" : 33946, "state" : "FL" } +{ "_id" : "32901", "city" : "MELBOURNE", "loc" : [ -80.620015, 28.069132 ], "pop" : 21138, "state" : "FL" } +{ "_id" : "32903", "city" : "INDIALANTIC", "loc" : [ -80.57871799999999, 28.109059 ], "pop" : 11020, "state" : "FL" } +{ "_id" : "32904", "city" : "MELBOURNE VILLAG", "loc" : [ -80.668577, 28.073177 ], "pop" : 15441, "state" : "FL" } +{ "_id" : "32905", "city" : "PALM BAY", "loc" : [ -80.599087, 28.014605 ], "pop" : 26367, "state" : "FL" } +{ "_id" : "32907", "city" : "PALM BAY", "loc" : [ -80.673889, 28.016849 ], "pop" : 25674, "state" : "FL" } +{ "_id" : "32908", "city" : "PALM BAY", "loc" : [ -80.689426, 27.981636 ], "pop" : 3272, "state" : "FL" } +{ "_id" : "32909", "city" : "PALM BAY", "loc" : [ -80.647327, 27.96936 ], "pop" : 12028, "state" : "FL" } +{ "_id" : "32920", "city" : "CAPE CANAVERAL", "loc" : [ -80.60426699999999, 28.39034 ], "pop" : 7655, "state" : "FL" } +{ "_id" : "32922", "city" : "COCOA", "loc" : [ -80.746455, 28.367183 ], "pop" : 17316, "state" : "FL" } +{ "_id" : "32925", "city" : "PATRICK A F B", "loc" : [ -80.60712599999999, 28.259896 ], "pop" : 597, "state" : "FL" } +{ "_id" : "32926", "city" : "COCOA", "loc" : [ -80.786969, 28.390987 ], "pop" : 17930, "state" : "FL" } +{ "_id" : "32927", "city" : "PORT SAINT JOHN", "loc" : [ -80.79111399999999, 28.46844 ], "pop" : 17351, "state" : "FL" } +{ "_id" : "32931", "city" : "COCOA BEACH", "loc" : [ -80.612066, 28.332451 ], "pop" : 14989, "state" : "FL" } +{ "_id" : "32934", "city" : "EAU GALLIE", "loc" : [ -80.691683, 28.136822 ], "pop" : 9539, "state" : "FL" } +{ "_id" : "32935", "city" : "MELBOURNE", "loc" : [ -80.65235300000001, 28.138385 ], "pop" : 34153, "state" : "FL" } +{ "_id" : "32937", "city" : "INDIAN HARBOR BE", "loc" : [ -80.598671, 28.178571 ], "pop" : 28921, "state" : "FL" } +{ "_id" : "32940", "city" : "MELBOURNE", "loc" : [ -80.68495900000001, 28.206136 ], "pop" : 5360, "state" : "FL" } +{ "_id" : "32948", "city" : "FELLSMERE", "loc" : [ -80.601947, 27.764273 ], "pop" : 2936, "state" : "FL" } +{ "_id" : "32951", "city" : "MELBOURNE BEACH", "loc" : [ -80.53893600000001, 28.021923 ], "pop" : 8060, "state" : "FL" } +{ "_id" : "32952", "city" : "MERRITT ISLAND", "loc" : [ -80.67818, 28.328607 ], "pop" : 12919, "state" : "FL" } +{ "_id" : "32953", "city" : "MERRITT ISLAND", "loc" : [ -80.695865, 28.391234 ], "pop" : 23338, "state" : "FL" } +{ "_id" : "32955", "city" : "ROCKLEDGE", "loc" : [ -80.73193000000001, 28.313441 ], "pop" : 20576, "state" : "FL" } +{ "_id" : "32958", "city" : "SEBASTIAN", "loc" : [ -80.478432, 27.790082 ], "pop" : 14084, "state" : "FL" } +{ "_id" : "32960", "city" : "VERO BEACH", "loc" : [ -80.403075, 27.632985 ], "pop" : 19207, "state" : "FL" } +{ "_id" : "32962", "city" : "VERO BEACH", "loc" : [ -80.392251, 27.588486 ], "pop" : 17462, "state" : "FL" } +{ "_id" : "32963", "city" : "INDIAN RIVER SHO", "loc" : [ -80.360916, 27.653623 ], "pop" : 10980, "state" : "FL" } +{ "_id" : "32966", "city" : "VERO BEACH", "loc" : [ -80.47939, 27.637214 ], "pop" : 10687, "state" : "FL" } +{ "_id" : "32967", "city" : "VERO BEACH", "loc" : [ -80.44161699999999, 27.697223 ], "pop" : 9607, "state" : "FL" } +{ "_id" : "32968", "city" : "VERO BEACH", "loc" : [ -80.43822299999999, 27.59993 ], "pop" : 5238, "state" : "FL" } +{ "_id" : "32976", "city" : "BAREFOOT BAY", "loc" : [ -80.516051, 27.878146 ], "pop" : 7870, "state" : "FL" } +{ "_id" : "33004", "city" : "DANIA", "loc" : [ -80.144728, 26.047557 ], "pop" : 12552, "state" : "FL" } +{ "_id" : "33009", "city" : "HALLANDALE", "loc" : [ -80.140737, 25.985019 ], "pop" : 33743, "state" : "FL" } +{ "_id" : "33010", "city" : "HIALEAH", "loc" : [ -80.280801, 25.832536 ], "pop" : 40437, "state" : "FL" } +{ "_id" : "33012", "city" : "HIALEAH", "loc" : [ -80.30589999999999, 25.865395 ], "pop" : 73194, "state" : "FL" } +{ "_id" : "33013", "city" : "HIALEAH", "loc" : [ -80.272533, 25.859351 ], "pop" : 30108, "state" : "FL" } +{ "_id" : "33014", "city" : "HIALEAH", "loc" : [ -80.30625499999999, 25.896349 ], "pop" : 35873, "state" : "FL" } +{ "_id" : "33015", "city" : "HIALEAH", "loc" : [ -80.316545, 25.938841 ], "pop" : 31171, "state" : "FL" } +{ "_id" : "33016", "city" : "HIALEAH", "loc" : [ -80.33681, 25.880262 ], "pop" : 32053, "state" : "FL" } +{ "_id" : "33019", "city" : "HOLLYWOOD", "loc" : [ -80.121931, 26.007011 ], "pop" : 12115, "state" : "FL" } +{ "_id" : "33020", "city" : "HOLLYWOOD", "loc" : [ -80.15166000000001, 26.016091 ], "pop" : 35468, "state" : "FL" } +{ "_id" : "33021", "city" : "HOLLYWOOD", "loc" : [ -80.18908500000001, 26.021836 ], "pop" : 39987, "state" : "FL" } +{ "_id" : "33023", "city" : "MIRAMAR", "loc" : [ -80.21603500000001, 25.987516 ], "pop" : 54274, "state" : "FL" } +{ "_id" : "33024", "city" : "PEMBROKE PINES", "loc" : [ -80.240183, 26.024273 ], "pop" : 54411, "state" : "FL" } +{ "_id" : "33025", "city" : "HOLLYWOOD", "loc" : [ -80.271236, 25.992061 ], "pop" : 24778, "state" : "FL" } +{ "_id" : "33026", "city" : "HOLLYWOOD", "loc" : [ -80.29744100000001, 26.022927 ], "pop" : 21473, "state" : "FL" } +{ "_id" : "33027", "city" : "HOLLYWOOD", "loc" : [ -80.32483999999999, 25.997449 ], "pop" : 6955, "state" : "FL" } +{ "_id" : "33028", "city" : "HOLLYWOOD", "loc" : [ -80.330797, 26.024804 ], "pop" : 186, "state" : "FL" } +{ "_id" : "33029", "city" : "PEMBROKE PINES", "loc" : [ -80.42840700000001, 26.01375 ], "pop" : 2882, "state" : "FL" } +{ "_id" : "33030", "city" : "HOMESTEAD", "loc" : [ -80.483853, 25.476639 ], "pop" : 26721, "state" : "FL" } +{ "_id" : "33031", "city" : "HOMESTEAD", "loc" : [ -80.507463, 25.532314 ], "pop" : 5880, "state" : "FL" } +{ "_id" : "33032", "city" : "PRINCETON", "loc" : [ -80.40918000000001, 25.521191 ], "pop" : 18070, "state" : "FL" } +{ "_id" : "33033", "city" : "HOMESTEAD", "loc" : [ -80.438014, 25.490576 ], "pop" : 25439, "state" : "FL" } +{ "_id" : "33034", "city" : "FLORIDA CITY", "loc" : [ -80.548438, 25.396332 ], "pop" : 12115, "state" : "FL" } +{ "_id" : "33035", "city" : "HOMESTEAD", "loc" : [ -80.45715300000001, 25.457338 ], "pop" : 1727, "state" : "FL" } +{ "_id" : "33036", "city" : "ISLAMORADA", "loc" : [ -80.629953, 24.923331 ], "pop" : 3810, "state" : "FL" } +{ "_id" : "33037", "city" : "OCEAN REEF", "loc" : [ -80.40608400000001, 25.140214 ], "pop" : 12076, "state" : "FL" } +{ "_id" : "33039", "city" : "HOMESTEAD AIR FO", "loc" : [ -80.390513, 25.499088 ], "pop" : 6538, "state" : "FL" } +{ "_id" : "33040", "city" : "NAVAL AIR STATIO", "loc" : [ -81.762179, 24.565313 ], "pop" : 32986, "state" : "FL" } +{ "_id" : "33042", "city" : "SUMMERLAND KEY", "loc" : [ -81.49356400000001, 24.655322 ], "pop" : 3952, "state" : "FL" } +{ "_id" : "33043", "city" : "BIG PINE KEY", "loc" : [ -81.36202900000001, 24.679996 ], "pop" : 5956, "state" : "FL" } +{ "_id" : "33050", "city" : "MARATHON", "loc" : [ -81.03858099999999, 24.727919 ], "pop" : 12792, "state" : "FL" } +{ "_id" : "33054", "city" : "OPA LOCKA", "loc" : [ -80.247004, 25.909662 ], "pop" : 30405, "state" : "FL" } +{ "_id" : "33055", "city" : "CAROL CITY", "loc" : [ -80.27729100000001, 25.944076 ], "pop" : 40586, "state" : "FL" } +{ "_id" : "33056", "city" : "CAROL CITY", "loc" : [ -80.248059, 25.946906 ], "pop" : 31968, "state" : "FL" } +{ "_id" : "33060", "city" : "POMPANO BEACH", "loc" : [ -80.12345999999999, 26.231529 ], "pop" : 32292, "state" : "FL" } +{ "_id" : "33062", "city" : "POMPANO BEACH", "loc" : [ -80.094133, 26.234314 ], "pop" : 20836, "state" : "FL" } +{ "_id" : "33063", "city" : "MARGATE", "loc" : [ -80.211483, 26.249221 ], "pop" : 37607, "state" : "FL" } +{ "_id" : "33064", "city" : "LIGHTHOUSE POINT", "loc" : [ -80.11243899999999, 26.278698 ], "pop" : 50084, "state" : "FL" } +{ "_id" : "33065", "city" : "CORAL SPRINGS", "loc" : [ -80.255578, 26.271403 ], "pop" : 43659, "state" : "FL" } +{ "_id" : "33066", "city" : "MARGATE", "loc" : [ -80.17787800000001, 26.254237 ], "pop" : 16494, "state" : "FL" } +{ "_id" : "33067", "city" : "NORTH CORAL SPRI", "loc" : [ -80.22188, 26.305134 ], "pop" : 7227, "state" : "FL" } +{ "_id" : "33068", "city" : "POMPANO BEACH", "loc" : [ -80.22054, 26.216021 ], "pop" : 41835, "state" : "FL" } +{ "_id" : "33069", "city" : "POMPANO BEACH", "loc" : [ -80.16348600000001, 26.228817 ], "pop" : 20158, "state" : "FL" } +{ "_id" : "33070", "city" : "TAVERNIER", "loc" : [ -80.521816, 25.010788 ], "pop" : 6196, "state" : "FL" } +{ "_id" : "33071", "city" : "POMPANO BEACH", "loc" : [ -80.260085, 26.243515 ], "pop" : 28251, "state" : "FL" } +{ "_id" : "33073", "city" : "POMPANO BEACH", "loc" : [ -80.180966, 26.299693 ], "pop" : 7091, "state" : "FL" } +{ "_id" : "33076", "city" : "POMPANO BEACH", "loc" : [ -80.248086, 26.291902 ], "pop" : 4728, "state" : "FL" } +{ "_id" : "33122", "city" : "MIAMI", "loc" : [ -80.320733, 25.7911 ], "pop" : 8, "state" : "FL" } +{ "_id" : "33125", "city" : "MIAMI", "loc" : [ -80.234118, 25.782547 ], "pop" : 47761, "state" : "FL" } +{ "_id" : "33126", "city" : "MIAMI", "loc" : [ -80.291932, 25.776255 ], "pop" : 39861, "state" : "FL" } +{ "_id" : "33127", "city" : "MIAMI", "loc" : [ -80.20512100000001, 25.814344 ], "pop" : 29900, "state" : "FL" } +{ "_id" : "33128", "city" : "MIAMI", "loc" : [ -80.20885800000001, 25.775612 ], "pop" : 6965, "state" : "FL" } +{ "_id" : "33129", "city" : "MIAMI", "loc" : [ -80.201301, 25.755926 ], "pop" : 10225, "state" : "FL" } +{ "_id" : "33130", "city" : "MIAMI", "loc" : [ -80.205888, 25.767197 ], "pop" : 21777, "state" : "FL" } +{ "_id" : "33131", "city" : "MIAMI", "loc" : [ -80.18950599999999, 25.762852 ], "pop" : 2614, "state" : "FL" } +{ "_id" : "33132", "city" : "MIAMI", "loc" : [ -80.179996, 25.786712 ], "pop" : 5198, "state" : "FL" } +{ "_id" : "33133", "city" : "CORAL GABLES", "loc" : [ -80.243639, 25.732251 ], "pop" : 28672, "state" : "FL" } +{ "_id" : "33134", "city" : "CORAL GABLES", "loc" : [ -80.269576, 25.755582 ], "pop" : 33492, "state" : "FL" } +{ "_id" : "33135", "city" : "MIAMI", "loc" : [ -80.231746, 25.766391 ], "pop" : 35425, "state" : "FL" } +{ "_id" : "33136", "city" : "MIAMI", "loc" : [ -80.204232, 25.786385 ], "pop" : 14040, "state" : "FL" } +{ "_id" : "33137", "city" : "MIAMI", "loc" : [ -80.189663, 25.815648 ], "pop" : 19862, "state" : "FL" } +{ "_id" : "33138", "city" : "MIAMI SHORES", "loc" : [ -80.18526, 25.850208 ], "pop" : 30108, "state" : "FL" } +{ "_id" : "33139", "city" : "CARL FISHER", "loc" : [ -80.13637799999999, 25.785179 ], "pop" : 48971, "state" : "FL" } +{ "_id" : "33140", "city" : "MIAMI", "loc" : [ -80.127921, 25.819505 ], "pop" : 13057, "state" : "FL" } +{ "_id" : "33141", "city" : "NORTH BAY VILLAG", "loc" : [ -80.133578, 25.852384 ], "pop" : 29489, "state" : "FL" } +{ "_id" : "33142", "city" : "MIAMI", "loc" : [ -80.232023, 25.812966 ], "pop" : 52262, "state" : "FL" } +{ "_id" : "33143", "city" : "SOUTH MIAMI", "loc" : [ -80.301408, 25.700252 ], "pop" : 28410, "state" : "FL" } +{ "_id" : "33144", "city" : "MIAMI", "loc" : [ -80.309631, 25.762563 ], "pop" : 22968, "state" : "FL" } +{ "_id" : "33145", "city" : "CORAL GABLES", "loc" : [ -80.235134, 25.752648 ], "pop" : 28170, "state" : "FL" } +{ "_id" : "33146", "city" : "CORAL GABLES", "loc" : [ -80.274649, 25.720089 ], "pop" : 13791, "state" : "FL" } +{ "_id" : "33147", "city" : "MIAMI", "loc" : [ -80.236558, 25.850675 ], "pop" : 49395, "state" : "FL" } +{ "_id" : "33149", "city" : "KEY BISCAYNE", "loc" : [ -80.162475, 25.692104 ], "pop" : 8854, "state" : "FL" } +{ "_id" : "33150", "city" : "MIAMI", "loc" : [ -80.206968, 25.851214 ], "pop" : 28408, "state" : "FL" } +{ "_id" : "33154", "city" : "BAL HARBOUR", "loc" : [ -80.127055, 25.879094 ], "pop" : 17312, "state" : "FL" } +{ "_id" : "33155", "city" : "MIAMI", "loc" : [ -80.31032, 25.7392 ], "pop" : 42864, "state" : "FL" } +{ "_id" : "33156", "city" : "KENDALL", "loc" : [ -80.30853500000001, 25.66767 ], "pop" : 27901, "state" : "FL" } +{ "_id" : "33157", "city" : "PERRINE", "loc" : [ -80.352473, 25.604384 ], "pop" : 57749, "state" : "FL" } +{ "_id" : "33158", "city" : "MIAMI", "loc" : [ -80.318703, 25.636433 ], "pop" : 6037, "state" : "FL" } +{ "_id" : "33160", "city" : "NORTH MIAMI BEAC", "loc" : [ -80.135141, 25.936086 ], "pop" : 26987, "state" : "FL" } +{ "_id" : "33161", "city" : "NORTH MIAMI", "loc" : [ -80.182034, 25.893806 ], "pop" : 44800, "state" : "FL" } +{ "_id" : "33162", "city" : "NORTH MIAMI BEAC", "loc" : [ -80.177238, 25.92807 ], "pop" : 37052, "state" : "FL" } +{ "_id" : "33165", "city" : "OLYMPIA HEIGHTS", "loc" : [ -80.359084, 25.735353 ], "pop" : 56064, "state" : "FL" } +{ "_id" : "33166", "city" : "MIAMI SPRINGS", "loc" : [ -80.29902, 25.817473 ], "pop" : 21066, "state" : "FL" } +{ "_id" : "33167", "city" : "MIAMI", "loc" : [ -80.229168, 25.885605 ], "pop" : 18840, "state" : "FL" } +{ "_id" : "33168", "city" : "MIAMI", "loc" : [ -80.210106, 25.890232 ], "pop" : 21629, "state" : "FL" } +{ "_id" : "33169", "city" : "MIAMI", "loc" : [ -80.21436, 25.944083 ], "pop" : 30294, "state" : "FL" } +{ "_id" : "33170", "city" : "QUAIL HEIGHTS", "loc" : [ -80.3981, 25.558847 ], "pop" : 6842, "state" : "FL" } +{ "_id" : "33172", "city" : "MIAMI", "loc" : [ -80.357232, 25.773523 ], "pop" : 29823, "state" : "FL" } +{ "_id" : "33173", "city" : "MIAMI", "loc" : [ -80.361824, 25.699242 ], "pop" : 33787, "state" : "FL" } +{ "_id" : "33174", "city" : "MIAMI", "loc" : [ -80.36112799999999, 25.762779 ], "pop" : 27442, "state" : "FL" } +{ "_id" : "33175", "city" : "OLYMPIA HEIGHTS", "loc" : [ -80.408226, 25.733677 ], "pop" : 41712, "state" : "FL" } +{ "_id" : "33176", "city" : "MIAMI", "loc" : [ -80.362667, 25.657449 ], "pop" : 47435, "state" : "FL" } +{ "_id" : "33177", "city" : "QUAIL HEIGHTS", "loc" : [ -80.39377, 25.593255 ], "pop" : 25043, "state" : "FL" } +{ "_id" : "33178", "city" : "MIAMI", "loc" : [ -80.35492499999999, 25.814079 ], "pop" : 3146, "state" : "FL" } +{ "_id" : "33179", "city" : "MIAMI", "loc" : [ -80.181382, 25.957095 ], "pop" : 31877, "state" : "FL" } +{ "_id" : "33180", "city" : "OJUS", "loc" : [ -80.139447, 25.961902 ], "pop" : 14167, "state" : "FL" } +{ "_id" : "33181", "city" : "NORTH MIAMI BEAC", "loc" : [ -80.160329, 25.896548 ], "pop" : 14089, "state" : "FL" } +{ "_id" : "33182", "city" : "MIAMI", "loc" : [ -80.41664299999999, 25.787678 ], "pop" : 4983, "state" : "FL" } +{ "_id" : "33183", "city" : "MIAMI", "loc" : [ -80.412969, 25.699977 ], "pop" : 32077, "state" : "FL" } +{ "_id" : "33184", "city" : "MIAMI", "loc" : [ -80.402997, 25.757382 ], "pop" : 19617, "state" : "FL" } +{ "_id" : "33185", "city" : "OLYMPIA HEIGHTS", "loc" : [ -80.437366, 25.718082 ], "pop" : 3606, "state" : "FL" } +{ "_id" : "33186", "city" : "MIAMI", "loc" : [ -80.408501, 25.669437 ], "pop" : 43611, "state" : "FL" } +{ "_id" : "33187", "city" : "QUAIL HEIGHTS", "loc" : [ -80.47136999999999, 25.597112 ], "pop" : 6882, "state" : "FL" } +{ "_id" : "33189", "city" : "QUAIL HEIGHTS", "loc" : [ -80.35085100000001, 25.57431 ], "pop" : 15680, "state" : "FL" } +{ "_id" : "33190", "city" : "QUAIL HEIGHTS", "loc" : [ -80.35381, 25.560935 ], "pop" : 2807, "state" : "FL" } +{ "_id" : "33193", "city" : "MIAMI", "loc" : [ -80.44008700000001, 25.696365 ], "pop" : 17432, "state" : "FL" } +{ "_id" : "33196", "city" : "MIAMI", "loc" : [ -80.441031, 25.661502 ], "pop" : 14612, "state" : "FL" } +{ "_id" : "33301", "city" : "FORT LAUDERDALE", "loc" : [ -80.128778, 26.121561 ], "pop" : 12040, "state" : "FL" } +{ "_id" : "33304", "city" : "OAKLAND PARK", "loc" : [ -80.125283, 26.137908 ], "pop" : 18976, "state" : "FL" } +{ "_id" : "33305", "city" : "OAKLAND PARK", "loc" : [ -80.127768, 26.153115 ], "pop" : 11018, "state" : "FL" } +{ "_id" : "33306", "city" : "OAKLAND PARK", "loc" : [ -80.112572, 26.165091 ], "pop" : 3424, "state" : "FL" } +{ "_id" : "33308", "city" : "OAKLAND PARK", "loc" : [ -80.107674, 26.187883 ], "pop" : 28624, "state" : "FL" } +{ "_id" : "33309", "city" : "FORT LAUDERDALE", "loc" : [ -80.17462399999999, 26.181698 ], "pop" : 28226, "state" : "FL" } +{ "_id" : "33311", "city" : "FORT LAUDERDALE", "loc" : [ -80.172786, 26.142104 ], "pop" : 65378, "state" : "FL" } +{ "_id" : "33312", "city" : "FORT LAUDERDALE", "loc" : [ -80.181038, 26.096819 ], "pop" : 44230, "state" : "FL" } +{ "_id" : "33313", "city" : "CITY OF SUNRISE", "loc" : [ -80.223142, 26.151145 ], "pop" : 46804, "state" : "FL" } +{ "_id" : "33314", "city" : "DAVIE", "loc" : [ -80.22503399999999, 26.068199 ], "pop" : 19621, "state" : "FL" } +{ "_id" : "33315", "city" : "FORT LAUDERDALE", "loc" : [ -80.15407999999999, 26.098885 ], "pop" : 12849, "state" : "FL" } +{ "_id" : "33316", "city" : "FORT LAUDERDALE", "loc" : [ -80.125951, 26.104193 ], "pop" : 11206, "state" : "FL" } +{ "_id" : "33317", "city" : "PLANTATION", "loc" : [ -80.224272, 26.113536 ], "pop" : 31518, "state" : "FL" } +{ "_id" : "33319", "city" : "TAMARAC", "loc" : [ -80.225413, 26.181153 ], "pop" : 36178, "state" : "FL" } +{ "_id" : "33321", "city" : "TAMARAC", "loc" : [ -80.26435600000001, 26.212072 ], "pop" : 29504, "state" : "FL" } +{ "_id" : "33322", "city" : "SUNRISE", "loc" : [ -80.27195399999999, 26.151923 ], "pop" : 37348, "state" : "FL" } +{ "_id" : "33323", "city" : "SUNRISE", "loc" : [ -80.30758299999999, 26.164641 ], "pop" : 10658, "state" : "FL" } +{ "_id" : "33324", "city" : "PLANTATION", "loc" : [ -80.271019, 26.113639 ], "pop" : 29427, "state" : "FL" } +{ "_id" : "33325", "city" : "DAVIE", "loc" : [ -80.321952, 26.10862 ], "pop" : 19539, "state" : "FL" } +{ "_id" : "33326", "city" : "DAVIE", "loc" : [ -80.369941, 26.114338 ], "pop" : 8393, "state" : "FL" } +{ "_id" : "33327", "city" : "FORT LAUDERDALE", "loc" : [ -80.40645000000001, 26.097291 ], "pop" : 4605, "state" : "FL" } +{ "_id" : "33328", "city" : "DAVIE", "loc" : [ -80.27202200000001, 26.060708 ], "pop" : 17233, "state" : "FL" } +{ "_id" : "33330", "city" : "DAVIE", "loc" : [ -80.312907, 26.055479 ], "pop" : 9371, "state" : "FL" } +{ "_id" : "33331", "city" : "DAVIE", "loc" : [ -80.36453299999999, 26.044366 ], "pop" : 6928, "state" : "FL" } +{ "_id" : "33332", "city" : "DAVIE", "loc" : [ -80.41298999999999, 26.054436 ], "pop" : 1511, "state" : "FL" } +{ "_id" : "33334", "city" : "OAKLAND PARK", "loc" : [ -80.13551099999999, 26.181514 ], "pop" : 29072, "state" : "FL" } +{ "_id" : "33351", "city" : "TAMARAC", "loc" : [ -80.273376, 26.177148 ], "pop" : 26228, "state" : "FL" } +{ "_id" : "33388", "city" : "FORT LAUDERDALE", "loc" : [ -80.250587, 26.117586 ], "pop" : 435, "state" : "FL" } +{ "_id" : "33401", "city" : "WEST PALM BEACH", "loc" : [ -80.06587399999999, 26.713956 ], "pop" : 19833, "state" : "FL" } +{ "_id" : "33403", "city" : "LAKE PARK", "loc" : [ -80.073078, 26.803187 ], "pop" : 8743, "state" : "FL" } +{ "_id" : "33404", "city" : "RIVIERA BEACH", "loc" : [ -80.06852000000001, 26.781343 ], "pop" : 27997, "state" : "FL" } +{ "_id" : "33405", "city" : "WEST PALM BEACH", "loc" : [ -80.058234, 26.669968 ], "pop" : 18164, "state" : "FL" } +{ "_id" : "33406", "city" : "GLEN RIDGE", "loc" : [ -80.09302599999999, 26.655582 ], "pop" : 23595, "state" : "FL" } +{ "_id" : "33407", "city" : "WEST PALM BEACH", "loc" : [ -80.072492, 26.749154 ], "pop" : 25017, "state" : "FL" } +{ "_id" : "33408", "city" : "NORTH PALM BEACH", "loc" : [ -80.060334, 26.828854 ], "pop" : 17968, "state" : "FL" } +{ "_id" : "33409", "city" : "HAVERHILL", "loc" : [ -80.09634699999999, 26.713218 ], "pop" : 16142, "state" : "FL" } +{ "_id" : "33410", "city" : "PALM BEACH GARDE", "loc" : [ -80.087304, 26.844373 ], "pop" : 23249, "state" : "FL" } +{ "_id" : "33411", "city" : "ROYAL PALM BEACH", "loc" : [ -80.209898, 26.700539 ], "pop" : 21027, "state" : "FL" } +{ "_id" : "33412", "city" : "WEST PALM BEACH", "loc" : [ -80.248203, 26.805526 ], "pop" : 312, "state" : "FL" } +{ "_id" : "33413", "city" : "WEST PALM BEACH", "loc" : [ -80.140474, 26.67616 ], "pop" : 4864, "state" : "FL" } +{ "_id" : "33414", "city" : "WEST PALM BEACH", "loc" : [ -80.25299, 26.662707 ], "pop" : 22046, "state" : "FL" } +{ "_id" : "33415", "city" : "HAVERHILL", "loc" : [ -80.127966, 26.655722 ], "pop" : 35663, "state" : "FL" } +{ "_id" : "33417", "city" : "HAVERHILL", "loc" : [ -80.124764, 26.713006 ], "pop" : 25892, "state" : "FL" } +{ "_id" : "33418", "city" : "PALM BEACH GARDE", "loc" : [ -80.132533, 26.838977 ], "pop" : 15974, "state" : "FL" } +{ "_id" : "33426", "city" : "BOYNTON BEACH", "loc" : [ -80.083427, 26.51747 ], "pop" : 9390, "state" : "FL" } +{ "_id" : "33428", "city" : "BOCA RATON", "loc" : [ -80.210942, 26.344605 ], "pop" : 24103, "state" : "FL" } +{ "_id" : "33430", "city" : "BELLE GLADE", "loc" : [ -80.672392, 26.684289 ], "pop" : 22652, "state" : "FL" } +{ "_id" : "33431", "city" : "BOCA RATON", "loc" : [ -80.097488, 26.379929 ], "pop" : 13075, "state" : "FL" } +{ "_id" : "33432", "city" : "BOCA RATON", "loc" : [ -80.08442100000001, 26.34619 ], "pop" : 17141, "state" : "FL" } +{ "_id" : "33433", "city" : "BOCA RATON", "loc" : [ -80.15639899999999, 26.346409 ], "pop" : 35495, "state" : "FL" } +{ "_id" : "33434", "city" : "BOCA RATON", "loc" : [ -80.174858, 26.383909 ], "pop" : 19075, "state" : "FL" } +{ "_id" : "33435", "city" : "BRINY BREEZES", "loc" : [ -80.06424, 26.529161 ], "pop" : 28536, "state" : "FL" } +{ "_id" : "33436", "city" : "VILLAGE OF GOLF", "loc" : [ -80.10642300000001, 26.526862 ], "pop" : 19263, "state" : "FL" } +{ "_id" : "33437", "city" : "BOYNTON BEACH", "loc" : [ -80.141812, 26.531187 ], "pop" : 14809, "state" : "FL" } +{ "_id" : "33438", "city" : "CANAL POINT", "loc" : [ -80.629931, 26.859279 ], "pop" : 1494, "state" : "FL" } +{ "_id" : "33440", "city" : "CLEWISTON", "loc" : [ -80.94924899999999, 26.717171 ], "pop" : 14427, "state" : "FL" } +{ "_id" : "33441", "city" : "DEERFIELD BEACH", "loc" : [ -80.09917299999999, 26.309556 ], "pop" : 24529, "state" : "FL" } +{ "_id" : "33442", "city" : "DEERFIELD BEACH", "loc" : [ -80.14124200000001, 26.312365 ], "pop" : 21532, "state" : "FL" } +{ "_id" : "33444", "city" : "DELRAY BEACH", "loc" : [ -80.07932099999999, 26.456445 ], "pop" : 18450, "state" : "FL" } +{ "_id" : "33445", "city" : "DELRAY BEACH", "loc" : [ -80.105397, 26.456359 ], "pop" : 20740, "state" : "FL" } +{ "_id" : "33446", "city" : "DELRAY BEACH", "loc" : [ -80.158016, 26.451717 ], "pop" : 13016, "state" : "FL" } +{ "_id" : "33455", "city" : "HOBE SOUND", "loc" : [ -80.150851, 27.081306 ], "pop" : 15209, "state" : "FL" } +{ "_id" : "33458", "city" : "JUPITER", "loc" : [ -80.120091, 26.933938 ], "pop" : 23869, "state" : "FL" } +{ "_id" : "33460", "city" : "LAKE WORTH", "loc" : [ -80.05599599999999, 26.618207 ], "pop" : 28653, "state" : "FL" } +{ "_id" : "33461", "city" : "LAKE WORTH", "loc" : [ -80.094573, 26.62316 ], "pop" : 30905, "state" : "FL" } +{ "_id" : "33462", "city" : "LANTANA", "loc" : [ -80.077264, 26.576766 ], "pop" : 30704, "state" : "FL" } +{ "_id" : "33463", "city" : "GREENACRES", "loc" : [ -80.130503, 26.609609 ], "pop" : 28841, "state" : "FL" } +{ "_id" : "33467", "city" : "LAKE WORTH", "loc" : [ -80.168299, 26.610366 ], "pop" : 21547, "state" : "FL" } +{ "_id" : "33469", "city" : "TEQUESTA", "loc" : [ -80.100161, 26.966066 ], "pop" : 11781, "state" : "FL" } +{ "_id" : "33470", "city" : "LOXAHATCHEE", "loc" : [ -80.27600700000001, 26.738295 ], "pop" : 14094, "state" : "FL" } +{ "_id" : "33471", "city" : "MOORE HAVEN", "loc" : [ -81.21877600000001, 26.832749 ], "pop" : 4724, "state" : "FL" } +{ "_id" : "33476", "city" : "PAHOKEE", "loc" : [ -80.662897, 26.814199 ], "pop" : 8354, "state" : "FL" } +{ "_id" : "33477", "city" : "JUPITER", "loc" : [ -80.077034, 26.921701 ], "pop" : 7748, "state" : "FL" } +{ "_id" : "33478", "city" : "JUPITER", "loc" : [ -80.214388, 26.921242 ], "pop" : 10534, "state" : "FL" } +{ "_id" : "33480", "city" : "PALM BEACH", "loc" : [ -80.038825, 26.72065 ], "pop" : 6588, "state" : "FL" } +{ "_id" : "33483", "city" : "DELRAY BEACH", "loc" : [ -80.065637, 26.45457 ], "pop" : 10326, "state" : "FL" } +{ "_id" : "33484", "city" : "DELRAY BEACH", "loc" : [ -80.13459, 26.454272 ], "pop" : 19141, "state" : "FL" } +{ "_id" : "33486", "city" : "BOCA RATON", "loc" : [ -80.110418, 26.348099 ], "pop" : 19601, "state" : "FL" } +{ "_id" : "33487", "city" : "HIGHLAND BEACH", "loc" : [ -80.089072, 26.409142 ], "pop" : 14606, "state" : "FL" } +{ "_id" : "33493", "city" : "SOUTH BAY", "loc" : [ -80.73121399999999, 26.670126 ], "pop" : 3723, "state" : "FL" } +{ "_id" : "33496", "city" : "BOCA RATON", "loc" : [ -80.181287, 26.402975 ], "pop" : 7116, "state" : "FL" } +{ "_id" : "33498", "city" : "BOCA RATON", "loc" : [ -80.216087, 26.390693 ], "pop" : 5871, "state" : "FL" } +{ "_id" : "33510", "city" : "BRANDON", "loc" : [ -82.296554, 27.955112 ], "pop" : 20184, "state" : "FL" } +{ "_id" : "33511", "city" : "BRANDON", "loc" : [ -82.288116, 27.905649 ], "pop" : 29861, "state" : "FL" } +{ "_id" : "33513", "city" : "BUSHNELL", "loc" : [ -82.155297, 28.661062 ], "pop" : 8728, "state" : "FL" } +{ "_id" : "33514", "city" : "CENTER HILL", "loc" : [ -81.996289, 28.663484 ], "pop" : 1202, "state" : "FL" } +{ "_id" : "33525", "city" : "RIDGE MANOR", "loc" : [ -82.207936, 28.386912 ], "pop" : 29328, "state" : "FL" } +{ "_id" : "33527", "city" : "DOVER", "loc" : [ -82.21384500000001, 27.991975 ], "pop" : 13171, "state" : "FL" } +{ "_id" : "33534", "city" : "GIBSONTON", "loc" : [ -82.369831, 27.841059 ], "pop" : 7010, "state" : "FL" } +{ "_id" : "33538", "city" : "LAKE PANASOFFKEE", "loc" : [ -82.136279, 28.795261 ], "pop" : 3617, "state" : "FL" } +{ "_id" : "33540", "city" : "ZEPHYRHILLS", "loc" : [ -82.168347, 28.24096 ], "pop" : 15608, "state" : "FL" } +{ "_id" : "33541", "city" : "ZEPHYRHILLS", "loc" : [ -82.20565999999999, 28.231063 ], "pop" : 17575, "state" : "FL" } +{ "_id" : "33543", "city" : "WESLEY CHAPEL", "loc" : [ -82.288956, 28.210365 ], "pop" : 4073, "state" : "FL" } +{ "_id" : "33544", "city" : "ZEPHYRHILLS", "loc" : [ -82.34932999999999, 28.263664 ], "pop" : 5989, "state" : "FL" } +{ "_id" : "33547", "city" : "LITHIA", "loc" : [ -82.135679, 27.829349 ], "pop" : 6780, "state" : "FL" } +{ "_id" : "33549", "city" : "LUTZ", "loc" : [ -82.461045, 28.136688 ], "pop" : 30905, "state" : "FL" } +{ "_id" : "33556", "city" : "ODESSA", "loc" : [ -82.590506, 28.142072 ], "pop" : 7046, "state" : "FL" } +{ "_id" : "33565", "city" : "PLANT CITY", "loc" : [ -82.157554, 28.069855 ], "pop" : 13299, "state" : "FL" } +{ "_id" : "33566", "city" : "PLANT CITY", "loc" : [ -82.113816, 28.009448 ], "pop" : 19533, "state" : "FL" } +{ "_id" : "33567", "city" : "PLANT CITY", "loc" : [ -82.14626800000001, 27.976167 ], "pop" : 18937, "state" : "FL" } +{ "_id" : "33569", "city" : "RIVERVIEW", "loc" : [ -82.312473, 27.844952 ], "pop" : 21930, "state" : "FL" } +{ "_id" : "33570", "city" : "RUSKIN", "loc" : [ -82.435501, 27.701501 ], "pop" : 14654, "state" : "FL" } +{ "_id" : "33572", "city" : "APOLLO BEACH", "loc" : [ -82.41019900000001, 27.771553 ], "pop" : 6074, "state" : "FL" } +{ "_id" : "33573", "city" : "SUN CITY CENTER", "loc" : [ -82.353832, 27.714711 ], "pop" : 9070, "state" : "FL" } +{ "_id" : "33576", "city" : "SAN ANTONIO", "loc" : [ -82.288237, 28.337139 ], "pop" : 1396, "state" : "FL" } +{ "_id" : "33584", "city" : "SEFFNER", "loc" : [ -82.28629599999999, 27.992199 ], "pop" : 20956, "state" : "FL" } +{ "_id" : "33592", "city" : "THONOTOSASSA", "loc" : [ -82.308212, 28.061747 ], "pop" : 9009, "state" : "FL" } +{ "_id" : "33594", "city" : "VALRICO", "loc" : [ -82.246557, 27.912435 ], "pop" : 27594, "state" : "FL" } +{ "_id" : "33597", "city" : "RIDGE MANOR ESTA", "loc" : [ -82.092975, 28.577492 ], "pop" : 5880, "state" : "FL" } +{ "_id" : "33598", "city" : "WIMAUMA", "loc" : [ -82.315136, 27.701497 ], "pop" : 7538, "state" : "FL" } +{ "_id" : "33602", "city" : "TAMPA", "loc" : [ -82.45972, 27.961381 ], "pop" : 8473, "state" : "FL" } +{ "_id" : "33603", "city" : "TAMPA", "loc" : [ -82.462997, 27.984534 ], "pop" : 19614, "state" : "FL" } +{ "_id" : "33604", "city" : "TAMPA", "loc" : [ -82.457848, 28.017312 ], "pop" : 34243, "state" : "FL" } +{ "_id" : "33605", "city" : "TAMPA", "loc" : [ -82.433368, 27.967078 ], "pop" : 19813, "state" : "FL" } +{ "_id" : "33606", "city" : "TAMPA", "loc" : [ -82.467035, 27.933828 ], "pop" : 14191, "state" : "FL" } +{ "_id" : "33607", "city" : "TAMPA", "loc" : [ -82.489535, 27.962538 ], "pop" : 22386, "state" : "FL" } +{ "_id" : "33608", "city" : "TAMPA", "loc" : [ -82.507097, 27.865916 ], "pop" : 3578, "state" : "FL" } +{ "_id" : "33609", "city" : "TAMPA", "loc" : [ -82.50572, 27.942456 ], "pop" : 15797, "state" : "FL" } +{ "_id" : "33610", "city" : "TAMPA", "loc" : [ -82.404584, 27.995125 ], "pop" : 34244, "state" : "FL" } +{ "_id" : "33611", "city" : "TAMPA", "loc" : [ -82.506714, 27.891422 ], "pop" : 30070, "state" : "FL" } +{ "_id" : "33612", "city" : "TAMPA", "loc" : [ -82.450018, 28.050187 ], "pop" : 36784, "state" : "FL" } +{ "_id" : "33613", "city" : "TAMPA", "loc" : [ -82.445519, 28.077184 ], "pop" : 24849, "state" : "FL" } +{ "_id" : "33614", "city" : "TAMPA", "loc" : [ -82.503393, 28.00914 ], "pop" : 39021, "state" : "FL" } +{ "_id" : "33615", "city" : "TAMPA", "loc" : [ -82.580495, 28.008057 ], "pop" : 36532, "state" : "FL" } +{ "_id" : "33616", "city" : "TAMPA", "loc" : [ -82.52029, 27.87418 ], "pop" : 11318, "state" : "FL" } +{ "_id" : "33617", "city" : "TAMPA", "loc" : [ -82.394876, 28.038358 ], "pop" : 38114, "state" : "FL" } +{ "_id" : "33618", "city" : "CARROLLWOOD", "loc" : [ -82.493291, 28.075875 ], "pop" : 20229, "state" : "FL" } +{ "_id" : "33619", "city" : "TAMPA", "loc" : [ -82.375558, 27.93824 ], "pop" : 27185, "state" : "FL" } +{ "_id" : "33620", "city" : "TAMPA", "loc" : [ -82.409188, 28.069465 ], "pop" : 3757, "state" : "FL" } +{ "_id" : "33624", "city" : "CARROLLWOOD", "loc" : [ -82.524944, 28.077194 ], "pop" : 39616, "state" : "FL" } +{ "_id" : "33625", "city" : "TAMPA", "loc" : [ -82.558987, 28.072551 ], "pop" : 14778, "state" : "FL" } +{ "_id" : "33626", "city" : "TAMPA", "loc" : [ -82.616378, 28.050932 ], "pop" : 2213, "state" : "FL" } +{ "_id" : "33629", "city" : "TAMPA", "loc" : [ -82.507897, 27.92102 ], "pop" : 21545, "state" : "FL" } +{ "_id" : "33634", "city" : "TAMPA", "loc" : [ -82.556006, 28.006783 ], "pop" : 18712, "state" : "FL" } +{ "_id" : "33635", "city" : "TAMPA", "loc" : [ -82.604822, 28.03013 ], "pop" : 6241, "state" : "FL" } +{ "_id" : "33637", "city" : "TAMPA", "loc" : [ -82.365876, 28.03377 ], "pop" : 9673, "state" : "FL" } +{ "_id" : "33647", "city" : "TAMPA", "loc" : [ -82.367751, 28.114698 ], "pop" : 5866, "state" : "FL" } +{ "_id" : "33701", "city" : "SAINT PETERSBURG", "loc" : [ -82.638609, 27.772318 ], "pop" : 15737, "state" : "FL" } +{ "_id" : "33702", "city" : "SAINT PETERSBURG", "loc" : [ -82.644795, 27.842712 ], "pop" : 28888, "state" : "FL" } +{ "_id" : "33703", "city" : "SAINT PETERSBURG", "loc" : [ -82.62639299999999, 27.816957 ], "pop" : 23348, "state" : "FL" } +{ "_id" : "33704", "city" : "SAINT PETERSBURG", "loc" : [ -82.637289, 27.795435 ], "pop" : 17112, "state" : "FL" } +{ "_id" : "33705", "city" : "SAINT PETERSBURG", "loc" : [ -82.64349, 27.739113 ], "pop" : 28261, "state" : "FL" } +{ "_id" : "33706", "city" : "SAINT PETERSBURG", "loc" : [ -82.75164599999999, 27.745606 ], "pop" : 18974, "state" : "FL" } +{ "_id" : "33707", "city" : "SAINT PETERSBURG", "loc" : [ -82.72079100000001, 27.75487 ], "pop" : 23630, "state" : "FL" } +{ "_id" : "33708", "city" : "MADEIRA BEACH", "loc" : [ -82.80077900000001, 27.816529 ], "pop" : 18018, "state" : "FL" } +{ "_id" : "33709", "city" : "KENNETH CITY", "loc" : [ -82.729845, 27.817427 ], "pop" : 26024, "state" : "FL" } +{ "_id" : "33710", "city" : "SAINT PETERSBURG", "loc" : [ -82.72428499999999, 27.789798 ], "pop" : 32402, "state" : "FL" } +{ "_id" : "33711", "city" : "SAINT PETERSBURG", "loc" : [ -82.689708, 27.74649 ], "pop" : 18084, "state" : "FL" } +{ "_id" : "33712", "city" : "SAINT PETERSBURG", "loc" : [ -82.666298, 27.735336 ], "pop" : 27715, "state" : "FL" } +{ "_id" : "33713", "city" : "SAINT PETERSBURG", "loc" : [ -82.67793899999999, 27.789015 ], "pop" : 29160, "state" : "FL" } +{ "_id" : "33714", "city" : "SAINT PETERSBURG", "loc" : [ -82.677612, 27.817621 ], "pop" : 18227, "state" : "FL" } +{ "_id" : "33715", "city" : "TIERRA VERDE", "loc" : [ -82.71564600000001, 27.694792 ], "pop" : 3877, "state" : "FL" } +{ "_id" : "33716", "city" : "SAINT PETERSBURG", "loc" : [ -82.640039, 27.873764 ], "pop" : 9328, "state" : "FL" } +{ "_id" : "33801", "city" : "LAKELAND", "loc" : [ -81.939153, 28.038134 ], "pop" : 45005, "state" : "FL" } +{ "_id" : "33803", "city" : "LAKELAND", "loc" : [ -81.95228299999999, 28.014045 ], "pop" : 23761, "state" : "FL" } +{ "_id" : "33805", "city" : "LAKELAND", "loc" : [ -81.96091, 28.072006 ], "pop" : 19676, "state" : "FL" } +{ "_id" : "33809", "city" : "LAKELAND", "loc" : [ -81.984219, 28.123356 ], "pop" : 39958, "state" : "FL" } +{ "_id" : "33811", "city" : "SOUTHSIDE", "loc" : [ -82.00723600000001, 27.966284 ], "pop" : 11456, "state" : "FL" } +{ "_id" : "33813", "city" : "SOUTHSIDE", "loc" : [ -81.933187, 27.969534 ], "pop" : 28497, "state" : "FL" } +{ "_id" : "33821", "city" : "ARCADIA", "loc" : [ -81.86575499999999, 27.18996 ], "pop" : 23865, "state" : "FL" } +{ "_id" : "33823", "city" : "AUBURNDALE", "loc" : [ -81.812234, 28.072443 ], "pop" : 24489, "state" : "FL" } +{ "_id" : "33825", "city" : "AVON PARK", "loc" : [ -81.501486, 27.600085 ], "pop" : 16945, "state" : "FL" } +{ "_id" : "33827", "city" : "BABSON PARK", "loc" : [ -81.534221, 27.831698 ], "pop" : 1901, "state" : "FL" } +{ "_id" : "33830", "city" : "BARTOW", "loc" : [ -81.812684, 27.895664 ], "pop" : 25968, "state" : "FL" } +{ "_id" : "33834", "city" : "DUETTE", "loc" : [ -81.84505799999999, 27.627738 ], "pop" : 3700, "state" : "FL" } +{ "_id" : "33837", "city" : "DAVENPORT", "loc" : [ -81.607912, 28.196265 ], "pop" : 8268, "state" : "FL" } +{ "_id" : "33838", "city" : "DUNDEE", "loc" : [ -81.621207, 28.019412 ], "pop" : 2335, "state" : "FL" } +{ "_id" : "33839", "city" : "EAGLE LAKE", "loc" : [ -81.75635699999999, 27.978661 ], "pop" : 1456, "state" : "FL" } +{ "_id" : "33841", "city" : "FORT MEADE", "loc" : [ -81.782346, 27.746356 ], "pop" : 8169, "state" : "FL" } +{ "_id" : "33843", "city" : "FROSTPROOF", "loc" : [ -81.51477800000001, 27.721058 ], "pop" : 8747, "state" : "FL" } +{ "_id" : "33844", "city" : "GRENELEFE", "loc" : [ -81.614712, 28.095073 ], "pop" : 23835, "state" : "FL" } +{ "_id" : "33849", "city" : "KATHLEEN", "loc" : [ -82.043499, 28.205224 ], "pop" : 1096, "state" : "FL" } +{ "_id" : "33850", "city" : "LAKE ALFRED", "loc" : [ -81.727138, 28.089483 ], "pop" : 3916, "state" : "FL" } +{ "_id" : "33852", "city" : "LAKE PLACID", "loc" : [ -81.364918, 27.294474 ], "pop" : 13767, "state" : "FL" } +{ "_id" : "33853", "city" : "LAKE WALES", "loc" : [ -81.548805, 27.903734 ], "pop" : 32570, "state" : "FL" } +{ "_id" : "33857", "city" : "LORIDA", "loc" : [ -81.196533, 27.414952 ], "pop" : 1186, "state" : "FL" } +{ "_id" : "33860", "city" : "MULBERRY", "loc" : [ -82.00148900000001, 27.90202 ], "pop" : 13338, "state" : "FL" } +{ "_id" : "33865", "city" : "ONA", "loc" : [ -81.92805, 27.412657 ], "pop" : 885, "state" : "FL" } +{ "_id" : "33868", "city" : "POLK CITY", "loc" : [ -81.80828200000001, 28.19867 ], "pop" : 7604, "state" : "FL" } +{ "_id" : "33870", "city" : "SEBRING", "loc" : [ -81.435712, 27.492391 ], "pop" : 19922, "state" : "FL" } +{ "_id" : "33872", "city" : "SEBRING", "loc" : [ -81.48724199999999, 27.470289 ], "pop" : 15390, "state" : "FL" } +{ "_id" : "33873", "city" : "WAUCHULA", "loc" : [ -81.807388, 27.551742 ], "pop" : 11513, "state" : "FL" } +{ "_id" : "33880", "city" : "ELOISE", "loc" : [ -81.751507, 27.999296 ], "pop" : 30803, "state" : "FL" } +{ "_id" : "33881", "city" : "WINTER HAVEN", "loc" : [ -81.732485, 28.045219 ], "pop" : 25957, "state" : "FL" } +{ "_id" : "33884", "city" : "CYPRESS GARDENS", "loc" : [ -81.678905, 27.994901 ], "pop" : 14771, "state" : "FL" } +{ "_id" : "33890", "city" : "ZOLFO SPRINGS", "loc" : [ -81.742328, 27.480042 ], "pop" : 3515, "state" : "FL" } +{ "_id" : "33901", "city" : "FORT MYERS", "loc" : [ -81.8725, 26.620403 ], "pop" : 22150, "state" : "FL" } +{ "_id" : "33903", "city" : "FORT MYERS", "loc" : [ -81.909632, 26.678138 ], "pop" : 20015, "state" : "FL" } +{ "_id" : "33904", "city" : "CAPE CORAL CENTR", "loc" : [ -81.952243, 26.57746 ], "pop" : 29483, "state" : "FL" } +{ "_id" : "33905", "city" : "TICE", "loc" : [ -81.785341, 26.676472 ], "pop" : 25029, "state" : "FL" } +{ "_id" : "33907", "city" : "FORT MYERS", "loc" : [ -81.873558, 26.568057 ], "pop" : 19015, "state" : "FL" } +{ "_id" : "33908", "city" : "FORT MYERS", "loc" : [ -81.927589, 26.502518 ], "pop" : 17050, "state" : "FL" } +{ "_id" : "33909", "city" : "CAPE CORAL CENTR", "loc" : [ -81.95890900000001, 26.680276 ], "pop" : 8622, "state" : "FL" } +{ "_id" : "33912", "city" : "FORT MYERS", "loc" : [ -81.82455400000001, 26.49722 ], "pop" : 20141, "state" : "FL" } +{ "_id" : "33913", "city" : "FORT MYERS", "loc" : [ -81.706469, 26.522808 ], "pop" : 473, "state" : "FL" } +{ "_id" : "33914", "city" : "CAPE CORAL CENTR", "loc" : [ -81.990915, 26.56971 ], "pop" : 15782, "state" : "FL" } +{ "_id" : "33916", "city" : "FORT MYERS", "loc" : [ -81.842946, 26.646595 ], "pop" : 17673, "state" : "FL" } +{ "_id" : "33917", "city" : "FORT MYERS", "loc" : [ -81.859447, 26.707947 ], "pop" : 24751, "state" : "FL" } +{ "_id" : "33919", "city" : "COLLEGE PARKWAY", "loc" : [ -81.900587, 26.554159 ], "pop" : 22641, "state" : "FL" } +{ "_id" : "33920", "city" : "ALVA", "loc" : [ -81.63505499999999, 26.714657 ], "pop" : 3044, "state" : "FL" } +{ "_id" : "33922", "city" : "BOKEELIA", "loc" : [ -82.140064, 26.662726 ], "pop" : 2979, "state" : "FL" } +{ "_id" : "33923", "city" : "BONITA SPRINGS", "loc" : [ -81.789963, 26.348035 ], "pop" : 19697, "state" : "FL" } +{ "_id" : "33924", "city" : "CAPTIVA", "loc" : [ -82.261017, 26.750541 ], "pop" : 831, "state" : "FL" } +{ "_id" : "33927", "city" : "EL JOBEAN", "loc" : [ -82.19956999999999, 26.97608 ], "pop" : 91, "state" : "FL" } +{ "_id" : "33928", "city" : "ESTERO", "loc" : [ -81.810244, 26.435052 ], "pop" : 1846, "state" : "FL" } +{ "_id" : "33931", "city" : "FORT MYERS BEACH", "loc" : [ -81.924543, 26.451952 ], "pop" : 10612, "state" : "FL" } +{ "_id" : "33934", "city" : "IMMOKALEE", "loc" : [ -81.445365, 26.409794 ], "pop" : 18066, "state" : "FL" } +{ "_id" : "33935", "city" : "LABELLE", "loc" : [ -81.434027, 26.732093 ], "pop" : 11346, "state" : "FL" } +{ "_id" : "33936", "city" : "LEHIGH ACRES", "loc" : [ -81.61046, 26.615302 ], "pop" : 10851, "state" : "FL" } +{ "_id" : "33937", "city" : "MARCO ISLAND", "loc" : [ -81.720394, 25.939568 ], "pop" : 9495, "state" : "FL" } +{ "_id" : "33940", "city" : "NAPLES", "loc" : [ -81.802196, 26.171391 ], "pop" : 20934, "state" : "FL" } +{ "_id" : "33942", "city" : "NAPLES", "loc" : [ -81.766125, 26.201578 ], "pop" : 23719, "state" : "FL" } +{ "_id" : "33943", "city" : "OCHOPEE", "loc" : [ -81.311228, 25.87998 ], "pop" : 1257, "state" : "FL" } +{ "_id" : "33946", "city" : "PLACIDA", "loc" : [ -82.261638, 26.819301 ], "pop" : 126, "state" : "FL" } +{ "_id" : "33947", "city" : "PLACIDA", "loc" : [ -82.293778, 26.90039 ], "pop" : 7811, "state" : "FL" } +{ "_id" : "33948", "city" : "PORT CHARLOTTE", "loc" : [ -82.14117299999999, 26.98268 ], "pop" : 12212, "state" : "FL" } +{ "_id" : "33950", "city" : "PUNTA GORDA", "loc" : [ -82.053166, 26.915163 ], "pop" : 15495, "state" : "FL" } +{ "_id" : "33952", "city" : "PORT CHARLOTTE", "loc" : [ -82.096372, 26.990475 ], "pop" : 27923, "state" : "FL" } +{ "_id" : "33953", "city" : "PORT CHARLOTTE", "loc" : [ -82.211743, 27.004008 ], "pop" : 1982, "state" : "FL" } +{ "_id" : "33954", "city" : "PORT CHARLOTTE", "loc" : [ -82.110782, 27.022815 ], "pop" : 3993, "state" : "FL" } +{ "_id" : "33955", "city" : "PUNTA GORDA", "loc" : [ -81.954712, 26.823981 ], "pop" : 5206, "state" : "FL" } +{ "_id" : "33956", "city" : "SAINT JAMES CITY", "loc" : [ -82.09159099999999, 26.529012 ], "pop" : 3653, "state" : "FL" } +{ "_id" : "33957", "city" : "SANIBEL", "loc" : [ -82.086825, 26.4514 ], "pop" : 5999, "state" : "FL" } +{ "_id" : "33960", "city" : "VENUS", "loc" : [ -81.35941200000001, 27.13463 ], "pop" : 925, "state" : "FL" } +{ "_id" : "33961", "city" : "NAPLES", "loc" : [ -81.658635, 26.027721 ], "pop" : 7121, "state" : "FL" } +{ "_id" : "33962", "city" : "NAPLES", "loc" : [ -81.749661, 26.113096 ], "pop" : 28714, "state" : "FL" } +{ "_id" : "33963", "city" : "NAPLES", "loc" : [ -81.808092, 26.263499 ], "pop" : 14863, "state" : "FL" } +{ "_id" : "33964", "city" : "NAPLES", "loc" : [ -81.64043599999999, 26.211253 ], "pop" : 5869, "state" : "FL" } +{ "_id" : "33971", "city" : "LEHIGH ACRES", "loc" : [ -81.66582200000001, 26.602252 ], "pop" : 11401, "state" : "FL" } +{ "_id" : "33980", "city" : "PORT CHARLOTTE", "loc" : [ -82.058886, 26.983969 ], "pop" : 7753, "state" : "FL" } +{ "_id" : "33981", "city" : "PORT CHARLOTTE", "loc" : [ -82.23877400000001, 26.937925 ], "pop" : 5758, "state" : "FL" } +{ "_id" : "33982", "city" : "PUNTA GORDA", "loc" : [ -81.95448399999999, 26.966751 ], "pop" : 6235, "state" : "FL" } +{ "_id" : "33983", "city" : "PUNTA GORDA", "loc" : [ -82.016268, 27.007398 ], "pop" : 7319, "state" : "FL" } +{ "_id" : "33990", "city" : "CAPE CORAL CENTR", "loc" : [ -81.945967, 26.630893 ], "pop" : 16975, "state" : "FL" } +{ "_id" : "33991", "city" : "CAPE CORAL CENTR", "loc" : [ -82.006703, 26.628881 ], "pop" : 5352, "state" : "FL" } +{ "_id" : "33999", "city" : "NAPLES", "loc" : [ -81.70927, 26.191612 ], "pop" : 21226, "state" : "FL" } +{ "_id" : "34202", "city" : "BRADEN RIVER", "loc" : [ -82.431487, 27.46521 ], "pop" : 6618, "state" : "FL" } +{ "_id" : "34203", "city" : "BRADEN RIVER", "loc" : [ -82.54040000000001, 27.444871 ], "pop" : 22408, "state" : "FL" } +{ "_id" : "34205", "city" : "WESTGATE", "loc" : [ -82.584733, 27.480896 ], "pop" : 31114, "state" : "FL" } +{ "_id" : "34207", "city" : "COLLEGE PLAZA", "loc" : [ -82.58062700000001, 27.439663 ], "pop" : 27775, "state" : "FL" } +{ "_id" : "34208", "city" : "BRADEN RIVER", "loc" : [ -82.53696100000001, 27.485881 ], "pop" : 20668, "state" : "FL" } +{ "_id" : "34209", "city" : "PALMA SOLA", "loc" : [ -82.62763099999999, 27.487909 ], "pop" : 30012, "state" : "FL" } +{ "_id" : "34210", "city" : "BRADENTON", "loc" : [ -82.635752, 27.454393 ], "pop" : 11345, "state" : "FL" } +{ "_id" : "34215", "city" : "CORTEZ", "loc" : [ -82.700642, 27.472686 ], "pop" : 1657, "state" : "FL" } +{ "_id" : "34217", "city" : "BRADENTON BEACH", "loc" : [ -82.72102700000001, 27.515149 ], "pop" : 6554, "state" : "FL" } +{ "_id" : "34219", "city" : "PARRISH", "loc" : [ -82.39600900000001, 27.557162 ], "pop" : 3811, "state" : "FL" } +{ "_id" : "34221", "city" : "PALMETTO", "loc" : [ -82.562957, 27.542946 ], "pop" : 23994, "state" : "FL" } +{ "_id" : "34222", "city" : "ELLENTON", "loc" : [ -82.50060000000001, 27.53818 ], "pop" : 8252, "state" : "FL" } +{ "_id" : "34223", "city" : "ENGLEWOOD", "loc" : [ -82.359886, 26.966743 ], "pop" : 15705, "state" : "FL" } +{ "_id" : "34224", "city" : "GROVE CITY", "loc" : [ -82.31173099999999, 26.92504 ], "pop" : 5110, "state" : "FL" } +{ "_id" : "34228", "city" : "WHITNEY BEACH", "loc" : [ -82.638403, 27.38669 ], "pop" : 5937, "state" : "FL" } +{ "_id" : "34229", "city" : "OSPREY", "loc" : [ -82.485339, 27.18384 ], "pop" : 3612, "state" : "FL" } +{ "_id" : "34231", "city" : "SOUTH TRAIL", "loc" : [ -82.51379300000001, 27.26757 ], "pop" : 32813, "state" : "FL" } +{ "_id" : "34232", "city" : "FOREST LAKES", "loc" : [ -82.47570899999999, 27.320056 ], "pop" : 29847, "state" : "FL" } +{ "_id" : "34233", "city" : "SARASOTA", "loc" : [ -82.47698, 27.286614 ], "pop" : 11476, "state" : "FL" } +{ "_id" : "34234", "city" : "MEADOWS VILLAGE", "loc" : [ -82.53518200000001, 27.365355 ], "pop" : 20243, "state" : "FL" } +{ "_id" : "34235", "city" : "SARASOTA", "loc" : [ -82.484759, 27.367162 ], "pop" : 11275, "state" : "FL" } +{ "_id" : "34236", "city" : "SARASOTA", "loc" : [ -82.548624, 27.331588 ], "pop" : 10942, "state" : "FL" } +{ "_id" : "34237", "city" : "SARASOTA", "loc" : [ -82.512778, 27.336915 ], "pop" : 15902, "state" : "FL" } +{ "_id" : "34238", "city" : "SARASOTA SQUARE", "loc" : [ -82.48289800000001, 27.243834 ], "pop" : 5493, "state" : "FL" } +{ "_id" : "34239", "city" : "SARASOTA", "loc" : [ -82.51954499999999, 27.311137 ], "pop" : 15949, "state" : "FL" } +{ "_id" : "34240", "city" : "SARASOTA", "loc" : [ -82.385594, 27.32765 ], "pop" : 4943, "state" : "FL" } +{ "_id" : "34241", "city" : "SARASOTA", "loc" : [ -82.41811199999999, 27.282179 ], "pop" : 8902, "state" : "FL" } +{ "_id" : "34242", "city" : "CRESCENT BEACH", "loc" : [ -82.546932, 27.266025 ], "pop" : 10594, "state" : "FL" } +{ "_id" : "34243", "city" : "SARASOTA", "loc" : [ -82.530299, 27.407235 ], "pop" : 14096, "state" : "FL" } +{ "_id" : "34251", "city" : "MYAKKA CITY", "loc" : [ -82.18489700000001, 27.364764 ], "pop" : 1636, "state" : "FL" } +{ "_id" : "34275", "city" : "NOKOMIS", "loc" : [ -82.451779, 27.138398 ], "pop" : 13638, "state" : "FL" } +{ "_id" : "34285", "city" : "VENICE", "loc" : [ -82.44983000000001, 27.093312 ], "pop" : 9069, "state" : "FL" } +{ "_id" : "34287", "city" : "NORTH PORT", "loc" : [ -82.24161599999999, 27.047839 ], "pop" : 16491, "state" : "FL" } +{ "_id" : "34292", "city" : "MID VENICE", "loc" : [ -82.41511199999999, 27.103245 ], "pop" : 13901, "state" : "FL" } +{ "_id" : "34293", "city" : "SOUTH VENICE", "loc" : [ -82.404096, 27.053022 ], "pop" : 26720, "state" : "FL" } +{ "_id" : "34601", "city" : "BROOKSVILLE", "loc" : [ -82.37367399999999, 28.565805 ], "pop" : 20190, "state" : "FL" } +{ "_id" : "34602", "city" : "RIDGE MANOR WEST", "loc" : [ -82.29054499999999, 28.511167 ], "pop" : 4940, "state" : "FL" } +{ "_id" : "34606", "city" : "SPRING HILL", "loc" : [ -82.598084, 28.46551 ], "pop" : 18190, "state" : "FL" } +{ "_id" : "34607", "city" : "SPRING HILL", "loc" : [ -82.626671, 28.506546 ], "pop" : 5420, "state" : "FL" } +{ "_id" : "34608", "city" : "SPRING HILL", "loc" : [ -82.556206, 28.479696 ], "pop" : 16755, "state" : "FL" } +{ "_id" : "34609", "city" : "SPRING HILL", "loc" : [ -82.49989600000001, 28.477611 ], "pop" : 19824, "state" : "FL" } +{ "_id" : "34610", "city" : "SHADY HILLS", "loc" : [ -82.530148, 28.405084 ], "pop" : 9958, "state" : "FL" } +{ "_id" : "34613", "city" : "BROOKSVILLE", "loc" : [ -82.521286, 28.546558 ], "pop" : 9899, "state" : "FL" } +{ "_id" : "34614", "city" : "BROOKSVILLE", "loc" : [ -82.523613, 28.662244 ], "pop" : 3687, "state" : "FL" } +{ "_id" : "34615", "city" : "CLEARWATER", "loc" : [ -82.780807, 27.986241 ], "pop" : 30847, "state" : "FL" } +{ "_id" : "34616", "city" : "CLEARWATER", "loc" : [ -82.786711, 27.945624 ], "pop" : 28460, "state" : "FL" } +{ "_id" : "34619", "city" : "CLEARWATER", "loc" : [ -82.717248, 27.976503 ], "pop" : 15886, "state" : "FL" } +{ "_id" : "34620", "city" : "CLEARWATER", "loc" : [ -82.715885, 27.913981 ], "pop" : 15769, "state" : "FL" } +{ "_id" : "34621", "city" : "CLEARWATER", "loc" : [ -82.72371800000001, 28.02961 ], "pop" : 16102, "state" : "FL" } +{ "_id" : "34622", "city" : "AIRPORT", "loc" : [ -82.67687599999999, 27.896713 ], "pop" : 3190, "state" : "FL" } +{ "_id" : "34623", "city" : "CLEARWATER", "loc" : [ -82.747405, 28.002734 ], "pop" : 20280, "state" : "FL" } +{ "_id" : "34624", "city" : "CLEARWATER", "loc" : [ -82.74348500000001, 27.93595 ], "pop" : 27315, "state" : "FL" } +{ "_id" : "34625", "city" : "CLEARWATER", "loc" : [ -82.745504, 27.973063 ], "pop" : 10394, "state" : "FL" } +{ "_id" : "34630", "city" : "CLEARWATER", "loc" : [ -82.822281, 27.984526 ], "pop" : 6231, "state" : "FL" } +{ "_id" : "34635", "city" : "BELLEAIR BEACH", "loc" : [ -82.840486, 27.917605 ], "pop" : 7736, "state" : "FL" } +{ "_id" : "34639", "city" : "LAND O LAKES", "loc" : [ -82.45471999999999, 28.225849 ], "pop" : 11815, "state" : "FL" } +{ "_id" : "34640", "city" : "BELLEAIR BLUFFS", "loc" : [ -82.80197800000001, 27.915835 ], "pop" : 22793, "state" : "FL" } +{ "_id" : "34641", "city" : "LARGO", "loc" : [ -82.75937, 27.907547 ], "pop" : 24087, "state" : "FL" } +{ "_id" : "34642", "city" : "SEMINOLE", "loc" : [ -82.796896, 27.844571 ], "pop" : 24078, "state" : "FL" } +{ "_id" : "34643", "city" : "LARGO", "loc" : [ -82.762806, 27.880334 ], "pop" : 17707, "state" : "FL" } +{ "_id" : "34644", "city" : "LARGO", "loc" : [ -82.82628699999999, 27.883597 ], "pop" : 20162, "state" : "FL" } +{ "_id" : "34646", "city" : "LARGO", "loc" : [ -82.826978, 27.852906 ], "pop" : 11284, "state" : "FL" } +{ "_id" : "34647", "city" : "LARGO", "loc" : [ -82.758701, 27.851549 ], "pop" : 15130, "state" : "FL" } +{ "_id" : "34648", "city" : "LARGO", "loc" : [ -82.795946, 27.884391 ], "pop" : 13347, "state" : "FL" } +{ "_id" : "34652", "city" : "NEW PORT RICHEY", "loc" : [ -82.732721, 28.232574 ], "pop" : 22422, "state" : "FL" } +{ "_id" : "34653", "city" : "NEW PORT RICHEY", "loc" : [ -82.6986, 28.244398 ], "pop" : 26729, "state" : "FL" } +{ "_id" : "34654", "city" : "NEW PORT RICHEY", "loc" : [ -82.626423, 28.302201 ], "pop" : 13750, "state" : "FL" } +{ "_id" : "34655", "city" : "NEW PORT RICHEY", "loc" : [ -82.680729, 28.212898 ], "pop" : 13849, "state" : "FL" } +{ "_id" : "34665", "city" : "PINELLAS PARK", "loc" : [ -82.71335000000001, 27.840313 ], "pop" : 24459, "state" : "FL" } +{ "_id" : "34666", "city" : "PINELLAS PARK", "loc" : [ -82.70935299999999, 27.860742 ], "pop" : 19840, "state" : "FL" } +{ "_id" : "34667", "city" : "HUDSON", "loc" : [ -82.675669, 28.364763 ], "pop" : 26410, "state" : "FL" } +{ "_id" : "34668", "city" : "PORT RICHEY", "loc" : [ -82.692714, 28.301148 ], "pop" : 39471, "state" : "FL" } +{ "_id" : "34669", "city" : "HUDSON", "loc" : [ -82.628793, 28.350634 ], "pop" : 8577, "state" : "FL" } +{ "_id" : "34677", "city" : "OLDSMAR", "loc" : [ -82.68477799999999, 28.046035 ], "pop" : 12858, "state" : "FL" } +{ "_id" : "34683", "city" : "PALM HARBOR", "loc" : [ -82.758488, 28.066248 ], "pop" : 42350, "state" : "FL" } +{ "_id" : "34684", "city" : "LAKE TARPON", "loc" : [ -82.726573, 28.073963 ], "pop" : 21753, "state" : "FL" } +{ "_id" : "34685", "city" : "PALM HARBOR", "loc" : [ -82.69635700000001, 28.096725 ], "pop" : 2278, "state" : "FL" } +{ "_id" : "34689", "city" : "TARPON SPRINGS", "loc" : [ -82.74302299999999, 28.138465 ], "pop" : 26381, "state" : "FL" } +{ "_id" : "34690", "city" : "HOLIDAY", "loc" : [ -82.727935, 28.191273 ], "pop" : 11980, "state" : "FL" } +{ "_id" : "34691", "city" : "HOLIDAY", "loc" : [ -82.755965, 28.191336 ], "pop" : 16548, "state" : "FL" } +{ "_id" : "34695", "city" : "SAFETY HARBOR", "loc" : [ -82.696658, 28.009608 ], "pop" : 16853, "state" : "FL" } +{ "_id" : "34698", "city" : "DUNEDIN", "loc" : [ -82.77943399999999, 28.028382 ], "pop" : 15304, "state" : "FL" } +{ "_id" : "34705", "city" : "ASTATULA", "loc" : [ -81.71947299999999, 28.708754 ], "pop" : 1831, "state" : "FL" } +{ "_id" : "34711", "city" : "CLERMONT", "loc" : [ -81.757407, 28.552541 ], "pop" : 15109, "state" : "FL" } +{ "_id" : "34731", "city" : "FRUITLAND PARK", "loc" : [ -81.899755, 28.863949 ], "pop" : 8513, "state" : "FL" } +{ "_id" : "34736", "city" : "GROVELAND", "loc" : [ -81.874526, 28.564445 ], "pop" : 8692, "state" : "FL" } +{ "_id" : "34737", "city" : "HOWEY IN THE HIL", "loc" : [ -81.78998300000001, 28.709818 ], "pop" : 1370, "state" : "FL" } +{ "_id" : "34739", "city" : "KENANSVILLE", "loc" : [ -81.050049, 27.876698 ], "pop" : 736, "state" : "FL" } +{ "_id" : "34741", "city" : "KISSIMMEE", "loc" : [ -81.42420799999999, 28.305056 ], "pop" : 23576, "state" : "FL" } +{ "_id" : "34743", "city" : "BUENA VENTURA LA", "loc" : [ -81.356044, 28.329656 ], "pop" : 14287, "state" : "FL" } +{ "_id" : "34744", "city" : "KISSIMMEE", "loc" : [ -81.368122, 28.307807 ], "pop" : 21101, "state" : "FL" } +{ "_id" : "34746", "city" : "KISSIMMEE", "loc" : [ -81.467478, 28.26796 ], "pop" : 12922, "state" : "FL" } +{ "_id" : "34748", "city" : "LEESBURG", "loc" : [ -81.885772, 28.807965 ], "pop" : 21309, "state" : "FL" } +{ "_id" : "34756", "city" : "MONTVERDE", "loc" : [ -81.679368, 28.597153 ], "pop" : 2216, "state" : "FL" } +{ "_id" : "34758", "city" : "KISSIMMEE", "loc" : [ -81.487014, 28.198436 ], "pop" : 6306, "state" : "FL" } +{ "_id" : "34759", "city" : "POINCIANA", "loc" : [ -81.458984, 28.124786 ], "pop" : 2430, "state" : "FL" } +{ "_id" : "34761", "city" : "OCOEE", "loc" : [ -81.532618, 28.583685 ], "pop" : 14171, "state" : "FL" } +{ "_id" : "34762", "city" : "OKAHUMPKA", "loc" : [ -81.883949, 28.737257 ], "pop" : 1779, "state" : "FL" } +{ "_id" : "34769", "city" : "SAINT CLOUD", "loc" : [ -81.287626, 28.247992 ], "pop" : 15024, "state" : "FL" } +{ "_id" : "34771", "city" : "SAINT CLOUD", "loc" : [ -81.200311, 28.27301 ], "pop" : 5870, "state" : "FL" } +{ "_id" : "34772", "city" : "SAINT CLOUD", "loc" : [ -81.264493, 28.190518 ], "pop" : 6041, "state" : "FL" } +{ "_id" : "34773", "city" : "SAINT CLOUD", "loc" : [ -81.01755199999999, 28.129295 ], "pop" : 1000, "state" : "FL" } +{ "_id" : "34785", "city" : "WILDWOOD", "loc" : [ -82.03473, 28.845353 ], "pop" : 10604, "state" : "FL" } +{ "_id" : "34786", "city" : "WINDERMERE", "loc" : [ -81.535411, 28.50061 ], "pop" : 5725, "state" : "FL" } +{ "_id" : "34787", "city" : "WINTER GARDEN", "loc" : [ -81.591127, 28.542321 ], "pop" : 18939, "state" : "FL" } +{ "_id" : "34788", "city" : "HAINES CREEK", "loc" : [ -81.781159, 28.85744 ], "pop" : 12883, "state" : "FL" } +{ "_id" : "34797", "city" : "YALAHA", "loc" : [ -81.826324, 28.744443 ], "pop" : 1061, "state" : "FL" } +{ "_id" : "34945", "city" : "FORT PIERCE", "loc" : [ -80.443963, 27.438233 ], "pop" : 3711, "state" : "FL" } +{ "_id" : "34946", "city" : "FORT PIERCE", "loc" : [ -80.35996, 27.50077 ], "pop" : 10873, "state" : "FL" } +{ "_id" : "34947", "city" : "FORT PIERCE", "loc" : [ -80.359185, 27.449281 ], "pop" : 10882, "state" : "FL" } +{ "_id" : "34949", "city" : "FORT PIERCE", "loc" : [ -80.26146799999999, 27.389594 ], "pop" : 8853, "state" : "FL" } +{ "_id" : "34950", "city" : "FORT PIERCE", "loc" : [ -80.3385, 27.448567 ], "pop" : 19708, "state" : "FL" } +{ "_id" : "34951", "city" : "FORT PIERCE", "loc" : [ -80.40519500000001, 27.539097 ], "pop" : 6821, "state" : "FL" } +{ "_id" : "34952", "city" : "PORT SAINT LUCIE", "loc" : [ -80.297971, 27.288895 ], "pop" : 23437, "state" : "FL" } +{ "_id" : "34953", "city" : "PORT SAINT LUCIE", "loc" : [ -80.379323, 27.262506 ], "pop" : 11796, "state" : "FL" } +{ "_id" : "34956", "city" : "INDIANTOWN", "loc" : [ -80.480277, 27.061461 ], "pop" : 7823, "state" : "FL" } +{ "_id" : "34957", "city" : "JENSEN BEACH", "loc" : [ -80.227656, 27.235568 ], "pop" : 13656, "state" : "FL" } +{ "_id" : "34972", "city" : "BASINGER", "loc" : [ -80.847853, 27.311532 ], "pop" : 14955, "state" : "FL" } +{ "_id" : "34974", "city" : "OKEECHOBEE", "loc" : [ -80.84103, 27.200224 ], "pop" : 18122, "state" : "FL" } +{ "_id" : "34981", "city" : "FORT PIERCE", "loc" : [ -80.362257, 27.404882 ], "pop" : 3243, "state" : "FL" } +{ "_id" : "34982", "city" : "FORT PIERCE", "loc" : [ -80.32463300000001, 27.390764 ], "pop" : 20061, "state" : "FL" } +{ "_id" : "34983", "city" : "PORT SAINT LUCIE", "loc" : [ -80.345029, 27.309444 ], "pop" : 22031, "state" : "FL" } +{ "_id" : "34984", "city" : "PORT SAINT LUCIE", "loc" : [ -80.338936, 27.265476 ], "pop" : 7091, "state" : "FL" } +{ "_id" : "34986", "city" : "PORT SAINT LUCIE", "loc" : [ -80.40304500000001, 27.32148 ], "pop" : 610, "state" : "FL" } +{ "_id" : "34987", "city" : "PORT SAINT LUCIE", "loc" : [ -80.477052, 27.260595 ], "pop" : 67, "state" : "FL" } +{ "_id" : "34988", "city" : "PORT SAINT LUCIE", "loc" : [ -80.51725999999999, 27.323233 ], "pop" : 416, "state" : "FL" } +{ "_id" : "34990", "city" : "PALM CITY", "loc" : [ -80.291646, 27.165646 ], "pop" : 13225, "state" : "FL" } +{ "_id" : "34994", "city" : "STUART", "loc" : [ -80.25378600000001, 27.196834 ], "pop" : 14524, "state" : "FL" } +{ "_id" : "34996", "city" : "STUART", "loc" : [ -80.21637800000001, 27.192857 ], "pop" : 7410, "state" : "FL" } +{ "_id" : "34997", "city" : "STUART", "loc" : [ -80.212937, 27.139817 ], "pop" : 25374, "state" : "FL" } +{ "_id" : "35004", "city" : "ACMAR", "loc" : [ -86.51557, 33.584132 ], "pop" : 6055, "state" : "AL" } +{ "_id" : "35005", "city" : "ADAMSVILLE", "loc" : [ -86.959727, 33.588437 ], "pop" : 10616, "state" : "AL" } +{ "_id" : "35006", "city" : "ADGER", "loc" : [ -87.167455, 33.434277 ], "pop" : 3205, "state" : "AL" } +{ "_id" : "35007", "city" : "KEYSTONE", "loc" : [ -86.812861, 33.236868 ], "pop" : 14218, "state" : "AL" } +{ "_id" : "35010", "city" : "NEW SITE", "loc" : [ -85.951086, 32.941445 ], "pop" : 19942, "state" : "AL" } +{ "_id" : "35014", "city" : "ALPINE", "loc" : [ -86.208934, 33.331165 ], "pop" : 3062, "state" : "AL" } +{ "_id" : "35016", "city" : "ARAB", "loc" : [ -86.489638, 34.328339 ], "pop" : 13650, "state" : "AL" } +{ "_id" : "35019", "city" : "BAILEYTON", "loc" : [ -86.62129899999999, 34.268298 ], "pop" : 1781, "state" : "AL" } +{ "_id" : "35020", "city" : "BESSEMER", "loc" : [ -86.947547, 33.409002 ], "pop" : 40549, "state" : "AL" } +{ "_id" : "35023", "city" : "HUEYTOWN", "loc" : [ -86.999607, 33.414625 ], "pop" : 39677, "state" : "AL" } +{ "_id" : "35031", "city" : "BLOUNTSVILLE", "loc" : [ -86.568628, 34.092937 ], "pop" : 9058, "state" : "AL" } +{ "_id" : "35033", "city" : "BREMEN", "loc" : [ -87.00428100000001, 33.973664 ], "pop" : 3448, "state" : "AL" } +{ "_id" : "35034", "city" : "BRENT", "loc" : [ -87.211387, 32.93567 ], "pop" : 3791, "state" : "AL" } +{ "_id" : "35035", "city" : "BRIERFIELD", "loc" : [ -86.951672, 33.042747 ], "pop" : 1282, "state" : "AL" } +{ "_id" : "35040", "city" : "CALERA", "loc" : [ -86.755987, 33.1098 ], "pop" : 4675, "state" : "AL" } +{ "_id" : "35042", "city" : "CENTREVILLE", "loc" : [ -87.11924, 32.950324 ], "pop" : 4902, "state" : "AL" } +{ "_id" : "35043", "city" : "CHELSEA", "loc" : [ -86.614132, 33.371582 ], "pop" : 4781, "state" : "AL" } +{ "_id" : "35044", "city" : "COOSA PINES", "loc" : [ -86.337622, 33.266928 ], "pop" : 7985, "state" : "AL" } +{ "_id" : "35045", "city" : "CLANTON", "loc" : [ -86.642472, 32.835532 ], "pop" : 13990, "state" : "AL" } +{ "_id" : "35049", "city" : "CLEVELAND", "loc" : [ -86.559355, 33.992106 ], "pop" : 2369, "state" : "AL" } +{ "_id" : "35051", "city" : "COLUMBIANA", "loc" : [ -86.616145, 33.176964 ], "pop" : 4486, "state" : "AL" } +{ "_id" : "35053", "city" : "CRANE HILL", "loc" : [ -87.048395, 34.082117 ], "pop" : 2270, "state" : "AL" } +{ "_id" : "35054", "city" : "CROPWELL", "loc" : [ -86.28002600000001, 33.506448 ], "pop" : 4171, "state" : "AL" } +{ "_id" : "35055", "city" : "CULLMAN", "loc" : [ -86.82977700000001, 34.176146 ], "pop" : 31708, "state" : "AL" } +{ "_id" : "35061", "city" : "DOLOMITE", "loc" : [ -86.956435, 33.465424 ], "pop" : 1476, "state" : "AL" } +{ "_id" : "35062", "city" : "DORA", "loc" : [ -87.040148, 33.734947 ], "pop" : 11017, "state" : "AL" } +{ "_id" : "35063", "city" : "EMPIRE", "loc" : [ -87.016139, 33.825589 ], "pop" : 2429, "state" : "AL" } +{ "_id" : "35064", "city" : "FAIRFIELD", "loc" : [ -86.918262, 33.473494 ], "pop" : 12106, "state" : "AL" } +{ "_id" : "35068", "city" : "COALBURG", "loc" : [ -86.813614, 33.611283 ], "pop" : 5909, "state" : "AL" } +{ "_id" : "35071", "city" : "GARDENDALE", "loc" : [ -86.822481, 33.71891 ], "pop" : 17968, "state" : "AL" } +{ "_id" : "35072", "city" : "GOODWATER", "loc" : [ -86.078149, 33.074642 ], "pop" : 3813, "state" : "AL" } +{ "_id" : "35073", "city" : "ALDEN", "loc" : [ -86.948221, 33.63356 ], "pop" : 4429, "state" : "AL" } +{ "_id" : "35077", "city" : "HANCEVILLE", "loc" : [ -86.78484400000001, 34.051569 ], "pop" : 10186, "state" : "AL" } +{ "_id" : "35078", "city" : "HARPERSVILLE", "loc" : [ -86.429441, 33.36746 ], "pop" : 4905, "state" : "AL" } +{ "_id" : "35079", "city" : "HAYDEN", "loc" : [ -86.81767000000001, 33.885806 ], "pop" : 6533, "state" : "AL" } +{ "_id" : "35080", "city" : "HELENA", "loc" : [ -86.81378599999999, 33.316978 ], "pop" : 9938, "state" : "AL" } +{ "_id" : "35083", "city" : "HOLLY POND", "loc" : [ -86.617441, 34.190085 ], "pop" : 3838, "state" : "AL" } +{ "_id" : "35085", "city" : "JEMISON", "loc" : [ -86.718052, 32.980539 ], "pop" : 7202, "state" : "AL" } +{ "_id" : "35087", "city" : "JOPPA", "loc" : [ -86.551939, 34.283739 ], "pop" : 987, "state" : "AL" } +{ "_id" : "35089", "city" : "KELLYTON", "loc" : [ -86.04839699999999, 32.979068 ], "pop" : 1584, "state" : "AL" } +{ "_id" : "35091", "city" : "KIMBERLY", "loc" : [ -86.80841700000001, 33.768355 ], "pop" : 1045, "state" : "AL" } +{ "_id" : "35094", "city" : "LEEDS", "loc" : [ -86.57482400000001, 33.528333 ], "pop" : 10421, "state" : "AL" } +{ "_id" : "35096", "city" : "LINCOLN", "loc" : [ -86.111152, 33.605913 ], "pop" : 5033, "state" : "AL" } +{ "_id" : "35098", "city" : "LOGAN", "loc" : [ -87.038115, 34.184079 ], "pop" : 2379, "state" : "AL" } +{ "_id" : "35111", "city" : "MC CALLA", "loc" : [ -87.102379, 33.284546 ], "pop" : 8147, "state" : "AL" } +{ "_id" : "35114", "city" : "MAYLENE", "loc" : [ -86.87274499999999, 33.231694 ], "pop" : 3727, "state" : "AL" } +{ "_id" : "35115", "city" : "MONTEVALLO", "loc" : [ -86.862228, 33.124765 ], "pop" : 11638, "state" : "AL" } +{ "_id" : "35116", "city" : "MORRIS", "loc" : [ -86.77255100000001, 33.739172 ], "pop" : 3622, "state" : "AL" } +{ "_id" : "35117", "city" : "MOUNT OLIVE", "loc" : [ -86.87170999999999, 33.67678 ], "pop" : 3841, "state" : "AL" } +{ "_id" : "35118", "city" : "SYLVAN SPRINGS", "loc" : [ -87.043998, 33.540696 ], "pop" : 3948, "state" : "AL" } +{ "_id" : "35120", "city" : "ODENVILLE", "loc" : [ -86.408952, 33.675611 ], "pop" : 1123, "state" : "AL" } +{ "_id" : "35121", "city" : "ONEONTA", "loc" : [ -86.474118, 33.925858 ], "pop" : 8956, "state" : "AL" } +{ "_id" : "35124", "city" : "INDIAN SPRINGS", "loc" : [ -86.80617599999999, 33.31046 ], "pop" : 7412, "state" : "AL" } +{ "_id" : "35125", "city" : "PELL CITY", "loc" : [ -86.34315100000001, 33.597889 ], "pop" : 17981, "state" : "AL" } +{ "_id" : "35126", "city" : "DIXIANA", "loc" : [ -86.656542, 33.708131 ], "pop" : 17068, "state" : "AL" } +{ "_id" : "35127", "city" : "PLEASANT GROVE", "loc" : [ -86.976586, 33.488336 ], "pop" : 8458, "state" : "AL" } +{ "_id" : "35130", "city" : "QUINTON", "loc" : [ -87.10066, 33.656065 ], "pop" : 2198, "state" : "AL" } +{ "_id" : "35131", "city" : "RAGLAND", "loc" : [ -86.1619, 33.736677 ], "pop" : 2797, "state" : "AL" } +{ "_id" : "35133", "city" : "REMLAP", "loc" : [ -86.641662, 33.846204 ], "pop" : 6013, "state" : "AL" } +{ "_id" : "35135", "city" : "RIVERSIDE", "loc" : [ -86.198341, 33.608832 ], "pop" : 1004, "state" : "AL" } +{ "_id" : "35136", "city" : "ROCKFORD", "loc" : [ -86.24000599999999, 32.877957 ], "pop" : 1819, "state" : "AL" } +{ "_id" : "35143", "city" : "SHELBY", "loc" : [ -86.553606, 33.078483 ], "pop" : 1846, "state" : "AL" } +{ "_id" : "35146", "city" : "SPRINGVILLE", "loc" : [ -86.439407, 33.738647 ], "pop" : 8723, "state" : "AL" } +{ "_id" : "35147", "city" : "STERRETT", "loc" : [ -86.491732, 33.446103 ], "pop" : 617, "state" : "AL" } +{ "_id" : "35148", "city" : "SUMITON", "loc" : [ -87.044545, 33.768005 ], "pop" : 3066, "state" : "AL" } +{ "_id" : "35150", "city" : "SYLACAUGA", "loc" : [ -86.27125700000001, 33.171675 ], "pop" : 24424, "state" : "AL" } +{ "_id" : "35160", "city" : "TALLADEGA", "loc" : [ -86.11335200000001, 33.435445 ], "pop" : 29778, "state" : "AL" } +{ "_id" : "35171", "city" : "THORSBY", "loc" : [ -86.746724, 32.923755 ], "pop" : 4131, "state" : "AL" } +{ "_id" : "35172", "city" : "TRAFFORD", "loc" : [ -86.743414, 33.819038 ], "pop" : 909, "state" : "AL" } +{ "_id" : "35173", "city" : "TRUSSVILLE", "loc" : [ -86.598068, 33.633932 ], "pop" : 13367, "state" : "AL" } +{ "_id" : "35175", "city" : "UNION GROVE", "loc" : [ -86.462793, 34.409345 ], "pop" : 4921, "state" : "AL" } +{ "_id" : "35176", "city" : "VANDIVER", "loc" : [ -86.501278, 33.480704 ], "pop" : 1066, "state" : "AL" } +{ "_id" : "35178", "city" : "VINCENT", "loc" : [ -86.39942499999999, 33.401049 ], "pop" : 295, "state" : "AL" } +{ "_id" : "35179", "city" : "VINEMONT", "loc" : [ -86.91251200000001, 34.262121 ], "pop" : 8852, "state" : "AL" } +{ "_id" : "35180", "city" : "WARRIOR", "loc" : [ -86.819849, 33.852862 ], "pop" : 530, "state" : "AL" } +{ "_id" : "35183", "city" : "WEOGUFKA", "loc" : [ -86.304203, 33.02381 ], "pop" : 1249, "state" : "AL" } +{ "_id" : "35184", "city" : "WEST BLOCTON", "loc" : [ -87.13694, 33.142431 ], "pop" : 5276, "state" : "AL" } +{ "_id" : "35186", "city" : "WILSONVILLE", "loc" : [ -86.529894, 33.229255 ], "pop" : 5224, "state" : "AL" } +{ "_id" : "35188", "city" : "WOODSTOCK", "loc" : [ -87.16346900000001, 33.169808 ], "pop" : 691, "state" : "AL" } +{ "_id" : "35203", "city" : "BIRMINGHAM", "loc" : [ -86.80662599999999, 33.520994 ], "pop" : 4064, "state" : "AL" } +{ "_id" : "35204", "city" : "BIRMINGHAM", "loc" : [ -86.837198, 33.51795 ], "pop" : 18193, "state" : "AL" } +{ "_id" : "35205", "city" : "BIRMINGHAM", "loc" : [ -86.805937, 33.495144 ], "pop" : 23024, "state" : "AL" } +{ "_id" : "35206", "city" : "BIRMINGHAM", "loc" : [ -86.719854, 33.567797 ], "pop" : 22050, "state" : "AL" } +{ "_id" : "35207", "city" : "BIRMINGHAM", "loc" : [ -86.815344, 33.559383 ], "pop" : 13901, "state" : "AL" } +{ "_id" : "35208", "city" : "BIRMINGHAM", "loc" : [ -86.879884, 33.497658 ], "pop" : 19328, "state" : "AL" } +{ "_id" : "35209", "city" : "HOMEWOOD", "loc" : [ -86.806738, 33.469624 ], "pop" : 24973, "state" : "AL" } +{ "_id" : "35210", "city" : "IRONDALE", "loc" : [ -86.685697, 33.532797 ], "pop" : 15047, "state" : "AL" } +{ "_id" : "35211", "city" : "BIRMINGHAM", "loc" : [ -86.85903999999999, 33.481565 ], "pop" : 35836, "state" : "AL" } +{ "_id" : "35212", "city" : "BIRMINGHAM", "loc" : [ -86.74952399999999, 33.540883 ], "pop" : 17865, "state" : "AL" } +{ "_id" : "35213", "city" : "CRESTLINE HEIGHT", "loc" : [ -86.742108, 33.508195 ], "pop" : 13191, "state" : "AL" } +{ "_id" : "35214", "city" : "BIRMINGHAM", "loc" : [ -86.886989, 33.555445 ], "pop" : 23293, "state" : "AL" } +{ "_id" : "35215", "city" : "CENTER POINT", "loc" : [ -86.693197, 33.635447 ], "pop" : 43862, "state" : "AL" } +{ "_id" : "35216", "city" : "VESTAVIA HILLS", "loc" : [ -86.790425, 33.41531 ], "pop" : 29224, "state" : "AL" } +{ "_id" : "35217", "city" : "BIRMINGHAM", "loc" : [ -86.764995, 33.5887 ], "pop" : 17366, "state" : "AL" } +{ "_id" : "35218", "city" : "BIRMINGHAM", "loc" : [ -86.892993, 33.505972 ], "pop" : 12137, "state" : "AL" } +{ "_id" : "35221", "city" : "BIRMINGHAM", "loc" : [ -86.89349300000001, 33.452316 ], "pop" : 5850, "state" : "AL" } +{ "_id" : "35222", "city" : "BIRMINGHAM", "loc" : [ -86.76657899999999, 33.521859 ], "pop" : 10035, "state" : "AL" } +{ "_id" : "35223", "city" : "MOUNTAIN BROOK", "loc" : [ -86.73658399999999, 33.488726 ], "pop" : 11117, "state" : "AL" } +{ "_id" : "35224", "city" : "BIRMINGHAM", "loc" : [ -86.93419299999999, 33.519126 ], "pop" : 7894, "state" : "AL" } +{ "_id" : "35226", "city" : "BLUFF PARK", "loc" : [ -86.83125699999999, 33.403675 ], "pop" : 23992, "state" : "AL" } +{ "_id" : "35228", "city" : "MIDFIELD", "loc" : [ -86.914703, 33.462446 ], "pop" : 9294, "state" : "AL" } +{ "_id" : "35233", "city" : "BIRMINGHAM", "loc" : [ -86.800257, 33.506161 ], "pop" : 842, "state" : "AL" } +{ "_id" : "35234", "city" : "BIRMINGHAM", "loc" : [ -86.80685, 33.53775 ], "pop" : 10928, "state" : "AL" } +{ "_id" : "35235", "city" : "CENTER POINT", "loc" : [ -86.661051, 33.618045 ], "pop" : 15873, "state" : "AL" } +{ "_id" : "35242", "city" : "SHOAL CREEK", "loc" : [ -86.705511, 33.401559 ], "pop" : 16228, "state" : "AL" } +{ "_id" : "35243", "city" : "CAHABA HEIGHTS", "loc" : [ -86.74367599999999, 33.446053 ], "pop" : 13091, "state" : "AL" } +{ "_id" : "35244", "city" : "HOOVER", "loc" : [ -86.776381, 33.371776 ], "pop" : 9758, "state" : "AL" } +{ "_id" : "35401", "city" : "TUSCALOOSA", "loc" : [ -87.56266599999999, 33.196891 ], "pop" : 42124, "state" : "AL" } +{ "_id" : "35404", "city" : "HOLT", "loc" : [ -87.488079, 33.210914 ], "pop" : 21997, "state" : "AL" } +{ "_id" : "35405", "city" : "TUSCALOOSA", "loc" : [ -87.51443500000001, 33.161704 ], "pop" : 23663, "state" : "AL" } +{ "_id" : "35406", "city" : "TUSCALOOSA", "loc" : [ -87.536035, 33.272174 ], "pop" : 12578, "state" : "AL" } +{ "_id" : "35441", "city" : "STEWART", "loc" : [ -87.708558, 32.872354 ], "pop" : 1745, "state" : "AL" } +{ "_id" : "35442", "city" : "ALICEVILLE", "loc" : [ -88.16668900000001, 33.122813 ], "pop" : 5196, "state" : "AL" } +{ "_id" : "35443", "city" : "BOLIGEE", "loc" : [ -88.026652, 32.774646 ], "pop" : 1073, "state" : "AL" } +{ "_id" : "35444", "city" : "BROOKWOOD", "loc" : [ -87.30902500000001, 33.277523 ], "pop" : 2319, "state" : "AL" } +{ "_id" : "35446", "city" : "BUHL", "loc" : [ -87.718886, 33.249448 ], "pop" : 1662, "state" : "AL" } +{ "_id" : "35447", "city" : "CARROLLTON", "loc" : [ -88.132122, 33.248506 ], "pop" : 5007, "state" : "AL" } +{ "_id" : "35452", "city" : "COKER", "loc" : [ -87.636528, 33.252612 ], "pop" : 5747, "state" : "AL" } +{ "_id" : "35453", "city" : "COTTONDALE", "loc" : [ -87.387051, 33.176667 ], "pop" : 4727, "state" : "AL" } +{ "_id" : "35456", "city" : "DUNCANVILLE", "loc" : [ -87.49497700000001, 33.082815 ], "pop" : 5514, "state" : "AL" } +{ "_id" : "35457", "city" : "ECHOLA", "loc" : [ -87.807202, 33.316559 ], "pop" : 223, "state" : "AL" } +{ "_id" : "35458", "city" : "ELROD", "loc" : [ -87.801429, 33.343678 ], "pop" : 809, "state" : "AL" } +{ "_id" : "35459", "city" : "EMELLE", "loc" : [ -88.305747, 32.754963 ], "pop" : 491, "state" : "AL" } +{ "_id" : "35460", "city" : "EPES", "loc" : [ -88.16144300000001, 32.763371 ], "pop" : 1391, "state" : "AL" } +{ "_id" : "35461", "city" : "ETHELSVILLE", "loc" : [ -88.221987, 33.386816 ], "pop" : 719, "state" : "AL" } +{ "_id" : "35462", "city" : "EUTAW", "loc" : [ -87.930297, 32.888871 ], "pop" : 6586, "state" : "AL" } +{ "_id" : "35463", "city" : "FOSTERS", "loc" : [ -87.735688, 33.135859 ], "pop" : 2100, "state" : "AL" } +{ "_id" : "35464", "city" : "GAINESVILLE", "loc" : [ -88.271558, 32.908364 ], "pop" : 1051, "state" : "AL" } +{ "_id" : "35466", "city" : "GORDO", "loc" : [ -87.900504, 33.346917 ], "pop" : 4333, "state" : "AL" } +{ "_id" : "35469", "city" : "KNOXVILLE", "loc" : [ -87.791855, 32.982423 ], "pop" : 373, "state" : "AL" } +{ "_id" : "35470", "city" : "COATOPA", "loc" : [ -88.173592, 32.588509 ], "pop" : 6055, "state" : "AL" } +{ "_id" : "35474", "city" : "CYPRESS", "loc" : [ -87.615134, 32.978853 ], "pop" : 2659, "state" : "AL" } +{ "_id" : "35476", "city" : "NORTHPORT", "loc" : [ -87.591441, 33.283425 ], "pop" : 20114, "state" : "AL" } +{ "_id" : "35480", "city" : "RALPH", "loc" : [ -87.744984, 33.062868 ], "pop" : 927, "state" : "AL" } +{ "_id" : "35481", "city" : "REFORM", "loc" : [ -88.02027699999999, 33.395945 ], "pop" : 4062, "state" : "AL" } +{ "_id" : "35490", "city" : "VANCE", "loc" : [ -87.257362, 33.17498 ], "pop" : 1234, "state" : "AL" } +{ "_id" : "35501", "city" : "JASPER", "loc" : [ -87.249144, 33.871672 ], "pop" : 30600, "state" : "AL" } +{ "_id" : "35540", "city" : "ADDISON", "loc" : [ -87.194766, 34.205571 ], "pop" : 3263, "state" : "AL" } +{ "_id" : "35541", "city" : "ARLEY", "loc" : [ -87.182761, 34.063234 ], "pop" : 2645, "state" : "AL" } +{ "_id" : "35542", "city" : "BANKSTON", "loc" : [ -87.68965, 33.70083 ], "pop" : 651, "state" : "AL" } +{ "_id" : "35543", "city" : "BEAR CREEK", "loc" : [ -87.686083, 34.213469 ], "pop" : 3748, "state" : "AL" } +{ "_id" : "35544", "city" : "BEAVERTON", "loc" : [ -88.01567, 33.942877 ], "pop" : 1014, "state" : "AL" } +{ "_id" : "35546", "city" : "BERRY", "loc" : [ -87.622563, 33.694485 ], "pop" : 4887, "state" : "AL" } +{ "_id" : "35548", "city" : "BRILLIANT", "loc" : [ -87.756315, 34.037702 ], "pop" : 2515, "state" : "AL" } +{ "_id" : "35549", "city" : "CARBON HILL", "loc" : [ -87.540328, 33.909252 ], "pop" : 3597, "state" : "AL" } +{ "_id" : "35550", "city" : "CORDOVA", "loc" : [ -87.18406, 33.768033 ], "pop" : 5273, "state" : "AL" } +{ "_id" : "35552", "city" : "DETROIT", "loc" : [ -88.16063, 34.010874 ], "pop" : 938, "state" : "AL" } +{ "_id" : "35553", "city" : "DOUBLE SPRINGS", "loc" : [ -87.397431, 34.138682 ], "pop" : 4797, "state" : "AL" } +{ "_id" : "35554", "city" : "ELDRIDGE", "loc" : [ -87.61939700000001, 33.931546 ], "pop" : 421, "state" : "AL" } +{ "_id" : "35555", "city" : "FAYETTE", "loc" : [ -87.834647, 33.697397 ], "pop" : 10776, "state" : "AL" } +{ "_id" : "35563", "city" : "GUIN", "loc" : [ -87.90237999999999, 33.967624 ], "pop" : 3948, "state" : "AL" } +{ "_id" : "35564", "city" : "HACKLEBURG", "loc" : [ -87.86076199999999, 34.267803 ], "pop" : 2828, "state" : "AL" } +{ "_id" : "35565", "city" : "HALEYVILLE", "loc" : [ -87.593811, 34.231423 ], "pop" : 9141, "state" : "AL" } +{ "_id" : "35570", "city" : "HAMILTON", "loc" : [ -88.008521, 34.153413 ], "pop" : 11184, "state" : "AL" } +{ "_id" : "35571", "city" : "HODGES", "loc" : [ -87.959023, 34.341664 ], "pop" : 798, "state" : "AL" } +{ "_id" : "35572", "city" : "HOUSTON", "loc" : [ -87.26183, 34.118042 ], "pop" : 429, "state" : "AL" } +{ "_id" : "35574", "city" : "KENNEDY", "loc" : [ -88.05172, 33.574964 ], "pop" : 3618, "state" : "AL" } +{ "_id" : "35575", "city" : "LYNN", "loc" : [ -87.53981400000001, 34.052984 ], "pop" : 1778, "state" : "AL" } +{ "_id" : "35576", "city" : "MILLPORT", "loc" : [ -88.200003, 33.54013 ], "pop" : 2286, "state" : "AL" } +{ "_id" : "35578", "city" : "NAUVOO", "loc" : [ -87.43244900000001, 33.929859 ], "pop" : 5004, "state" : "AL" } +{ "_id" : "35579", "city" : "OAKMAN", "loc" : [ -87.368574, 33.700174 ], "pop" : 3700, "state" : "AL" } +{ "_id" : "35580", "city" : "PARRISH", "loc" : [ -87.265773, 33.721307 ], "pop" : 4775, "state" : "AL" } +{ "_id" : "35581", "city" : "PHIL CAMPBELL", "loc" : [ -87.715431, 34.347018 ], "pop" : 5345, "state" : "AL" } +{ "_id" : "35582", "city" : "RED BAY", "loc" : [ -88.112914, 34.451259 ], "pop" : 5159, "state" : "AL" } +{ "_id" : "35585", "city" : "SPRUCE PINE", "loc" : [ -87.712149, 34.384796 ], "pop" : 465, "state" : "AL" } +{ "_id" : "35586", "city" : "SULLIGENT", "loc" : [ -88.150774, 33.8549 ], "pop" : 4489, "state" : "AL" } +{ "_id" : "35587", "city" : "TOWNLEY", "loc" : [ -87.437248, 33.84702 ], "pop" : 1819, "state" : "AL" } +{ "_id" : "35592", "city" : "VERNON", "loc" : [ -88.097919, 33.761285 ], "pop" : 4752, "state" : "AL" } +{ "_id" : "35593", "city" : "VINA", "loc" : [ -88.077422, 34.37116 ], "pop" : 888, "state" : "AL" } +{ "_id" : "35594", "city" : "WINFIELD", "loc" : [ -87.79716000000001, 33.930256 ], "pop" : 6750, "state" : "AL" } +{ "_id" : "35601", "city" : "DECATUR", "loc" : [ -86.98868, 34.589599 ], "pop" : 36696, "state" : "AL" } +{ "_id" : "35603", "city" : "DECATUR", "loc" : [ -87.000389, 34.548417 ], "pop" : 17861, "state" : "AL" } +{ "_id" : "35610", "city" : "ANDERSON", "loc" : [ -87.272327, 34.951777 ], "pop" : 2039, "state" : "AL" } +{ "_id" : "35611", "city" : "ATHENS", "loc" : [ -86.970733, 34.803604 ], "pop" : 35441, "state" : "AL" } +{ "_id" : "35616", "city" : "CHEROKEE", "loc" : [ -87.97244499999999, 34.744188 ], "pop" : 4811, "state" : "AL" } +{ "_id" : "35618", "city" : "COURTLAND", "loc" : [ -87.314255, 34.671866 ], "pop" : 2733, "state" : "AL" } +{ "_id" : "35619", "city" : "DANVILLE", "loc" : [ -87.05318699999999, 34.452189 ], "pop" : 4614, "state" : "AL" } +{ "_id" : "35620", "city" : "ELKMONT", "loc" : [ -86.91045200000001, 34.915241 ], "pop" : 8013, "state" : "AL" } +{ "_id" : "35621", "city" : "EVA", "loc" : [ -86.704427, 34.347778 ], "pop" : 3977, "state" : "AL" } +{ "_id" : "35622", "city" : "FALKVILLE", "loc" : [ -86.91308600000001, 34.347653 ], "pop" : 5392, "state" : "AL" } +{ "_id" : "35630", "city" : "FLORENCE", "loc" : [ -87.655985, 34.830547 ], "pop" : 38725, "state" : "AL" } +{ "_id" : "35633", "city" : "FLORENCE", "loc" : [ -87.739778, 34.882471 ], "pop" : 16478, "state" : "AL" } +{ "_id" : "35640", "city" : "HARTSELLE", "loc" : [ -86.924235, 34.448206 ], "pop" : 17963, "state" : "AL" } +{ "_id" : "35643", "city" : "HILLSBORO", "loc" : [ -87.180379, 34.64763 ], "pop" : 1967, "state" : "AL" } +{ "_id" : "35645", "city" : "KILLEN", "loc" : [ -87.508185, 34.901632 ], "pop" : 11758, "state" : "AL" } +{ "_id" : "35646", "city" : "LEIGHTON", "loc" : [ -87.522133, 34.710982 ], "pop" : 3046, "state" : "AL" } +{ "_id" : "35647", "city" : "LESTER", "loc" : [ -87.143396, 34.918364 ], "pop" : 3108, "state" : "AL" } +{ "_id" : "35648", "city" : "LEXINGTON", "loc" : [ -87.393519, 34.955924 ], "pop" : 2241, "state" : "AL" } +{ "_id" : "35650", "city" : "MOULTON", "loc" : [ -87.222385, 34.505836 ], "pop" : 17288, "state" : "AL" } +{ "_id" : "35651", "city" : "MOUNT HOPE", "loc" : [ -87.451453, 34.462969 ], "pop" : 1821, "state" : "AL" } +{ "_id" : "35652", "city" : "ROGERSVILLE", "loc" : [ -87.323671, 34.849544 ], "pop" : 6521, "state" : "AL" } +{ "_id" : "35653", "city" : "RUSSELLVILLE", "loc" : [ -87.72572599999999, 34.506568 ], "pop" : 17767, "state" : "AL" } +{ "_id" : "35660", "city" : "SHEFFIELD", "loc" : [ -87.697057, 34.757829 ], "pop" : 10685, "state" : "AL" } +{ "_id" : "35661", "city" : "MUSCLE SHOALS", "loc" : [ -87.630443, 34.756136 ], "pop" : 11777, "state" : "AL" } +{ "_id" : "35670", "city" : "SOMERVILLE", "loc" : [ -86.80093100000001, 34.499548 ], "pop" : 5184, "state" : "AL" } +{ "_id" : "35671", "city" : "TANNER", "loc" : [ -86.989152, 34.713037 ], "pop" : 2578, "state" : "AL" } +{ "_id" : "35672", "city" : "TOWN CREEK", "loc" : [ -87.42619500000001, 34.649138 ], "pop" : 9049, "state" : "AL" } +{ "_id" : "35673", "city" : "TRINITY", "loc" : [ -87.09126999999999, 34.591771 ], "pop" : 1758, "state" : "AL" } +{ "_id" : "35674", "city" : "TUSCUMBIA", "loc" : [ -87.68325900000001, 34.687432 ], "pop" : 17880, "state" : "AL" } +{ "_id" : "35677", "city" : "WATERLOO", "loc" : [ -87.962412, 34.93568 ], "pop" : 1899, "state" : "AL" } +{ "_id" : "35739", "city" : "ARDMORE", "loc" : [ -86.83461200000001, 34.980447 ], "pop" : 1898, "state" : "AL" } +{ "_id" : "35740", "city" : "BRIDGEPORT", "loc" : [ -85.727681, 34.944638 ], "pop" : 3988, "state" : "AL" } +{ "_id" : "35741", "city" : "BROWNSBORO", "loc" : [ -86.468703, 34.716733 ], "pop" : 1793, "state" : "AL" } +{ "_id" : "35744", "city" : "DUTTON", "loc" : [ -85.906729, 34.604558 ], "pop" : 2948, "state" : "AL" } +{ "_id" : "35745", "city" : "ESTILLFORK", "loc" : [ -86.171571, 34.913017 ], "pop" : 718, "state" : "AL" } +{ "_id" : "35746", "city" : "FACKLER", "loc" : [ -85.98464800000001, 34.82589 ], "pop" : 396, "state" : "AL" } +{ "_id" : "35747", "city" : "GRANT", "loc" : [ -86.259041, 34.495902 ], "pop" : 8345, "state" : "AL" } +{ "_id" : "35748", "city" : "GURLEY", "loc" : [ -86.39402800000001, 34.713964 ], "pop" : 4642, "state" : "AL" } +{ "_id" : "35749", "city" : "HARVEST", "loc" : [ -86.74992899999999, 34.82732 ], "pop" : 5701, "state" : "AL" } +{ "_id" : "35750", "city" : "HAZEL GREEN", "loc" : [ -86.593484, 34.949627 ], "pop" : 7751, "state" : "AL" } +{ "_id" : "35751", "city" : "HOLLYTREE", "loc" : [ -86.233627, 34.798979 ], "pop" : 260, "state" : "AL" } +{ "_id" : "35752", "city" : "HOLLYWOOD", "loc" : [ -85.95317300000001, 34.730428 ], "pop" : 2038, "state" : "AL" } +{ "_id" : "35754", "city" : "LACEYS SPRING", "loc" : [ -86.612869, 34.499647 ], "pop" : 7040, "state" : "AL" } +{ "_id" : "35755", "city" : "LANGSTON", "loc" : [ -86.10563, 34.497831 ], "pop" : 1041, "state" : "AL" } +{ "_id" : "35758", "city" : "TRIANA", "loc" : [ -86.750951, 34.713409 ], "pop" : 24398, "state" : "AL" } +{ "_id" : "35759", "city" : "MERIDIANVILLE", "loc" : [ -86.578879, 34.861779 ], "pop" : 2597, "state" : "AL" } +{ "_id" : "35760", "city" : "NEW HOPE", "loc" : [ -86.3961, 34.549445 ], "pop" : 4075, "state" : "AL" } +{ "_id" : "35761", "city" : "NEW MARKET", "loc" : [ -86.448742, 34.899991 ], "pop" : 5825, "state" : "AL" } +{ "_id" : "35763", "city" : "BIG COVE", "loc" : [ -86.466577, 34.612859 ], "pop" : 3156, "state" : "AL" } +{ "_id" : "35764", "city" : "PAINT ROCK", "loc" : [ -86.332562, 34.667122 ], "pop" : 553, "state" : "AL" } +{ "_id" : "35765", "city" : "PISGAH", "loc" : [ -85.803044, 34.688601 ], "pop" : 3717, "state" : "AL" } +{ "_id" : "35766", "city" : "PRINCETON", "loc" : [ -86.250068, 34.840217 ], "pop" : 273, "state" : "AL" } +{ "_id" : "35768", "city" : "HYTOP", "loc" : [ -86.05133600000001, 34.67227 ], "pop" : 16934, "state" : "AL" } +{ "_id" : "35771", "city" : "SECTION", "loc" : [ -85.99400199999999, 34.543275 ], "pop" : 2590, "state" : "AL" } +{ "_id" : "35772", "city" : "STEVENSON", "loc" : [ -85.850803, 34.876885 ], "pop" : 5210, "state" : "AL" } +{ "_id" : "35773", "city" : "TONEY", "loc" : [ -86.699951, 34.911644 ], "pop" : 5953, "state" : "AL" } +{ "_id" : "35774", "city" : "TRENTON", "loc" : [ -86.291264, 34.740065 ], "pop" : 381, "state" : "AL" } +{ "_id" : "35775", "city" : "VALHERMOSO SPRIN", "loc" : [ -86.678, 34.538145 ], "pop" : 667, "state" : "AL" } +{ "_id" : "35776", "city" : "WOODVILLE", "loc" : [ -86.22960999999999, 34.668927 ], "pop" : 2222, "state" : "AL" } +{ "_id" : "35801", "city" : "HUNTSVILLE", "loc" : [ -86.567318, 34.726866 ], "pop" : 25513, "state" : "AL" } +{ "_id" : "35802", "city" : "HUNTSVILLE", "loc" : [ -86.56034699999999, 34.667922 ], "pop" : 21069, "state" : "AL" } +{ "_id" : "35803", "city" : "HUNTSVILLE", "loc" : [ -86.55096, 34.620506 ], "pop" : 23380, "state" : "AL" } +{ "_id" : "35805", "city" : "HUNTSVILLE", "loc" : [ -86.61649300000001, 34.705943 ], "pop" : 24637, "state" : "AL" } +{ "_id" : "35806", "city" : "HUNTSVILLE", "loc" : [ -86.670411, 34.744765 ], "pop" : 10121, "state" : "AL" } +{ "_id" : "35808", "city" : "HUNTSVILLE", "loc" : [ -86.65382099999999, 34.684525 ], "pop" : 4988, "state" : "AL" } +{ "_id" : "35810", "city" : "HUNTSVILLE", "loc" : [ -86.60906300000001, 34.778378 ], "pop" : 32896, "state" : "AL" } +{ "_id" : "35811", "city" : "HUNTSVILLE", "loc" : [ -86.543786, 34.778949 ], "pop" : 19008, "state" : "AL" } +{ "_id" : "35816", "city" : "HUNTSVILLE", "loc" : [ -86.624948, 34.738864 ], "pop" : 13736, "state" : "AL" } +{ "_id" : "35824", "city" : "HUNTSVILLE", "loc" : [ -86.72948599999999, 34.658321 ], "pop" : 770, "state" : "AL" } +{ "_id" : "35901", "city" : "SOUTHSIDE", "loc" : [ -86.010279, 33.997248 ], "pop" : 44165, "state" : "AL" } +{ "_id" : "35903", "city" : "HOKES BLUFF", "loc" : [ -85.928724, 33.997057 ], "pop" : 20057, "state" : "AL" } +{ "_id" : "35904", "city" : "GADSDEN", "loc" : [ -86.04947900000001, 34.021694 ], "pop" : 7002, "state" : "AL" } +{ "_id" : "35905", "city" : "GLENCOE", "loc" : [ -85.92758600000001, 33.956787 ], "pop" : 4256, "state" : "AL" } +{ "_id" : "35950", "city" : "ALBERTVILLE", "loc" : [ -86.206447, 34.273859 ], "pop" : 21033, "state" : "AL" } +{ "_id" : "35952", "city" : "SNEAD", "loc" : [ -86.35087900000001, 34.042916 ], "pop" : 9472, "state" : "AL" } +{ "_id" : "35953", "city" : "ASHVILLE", "loc" : [ -86.255167, 33.837366 ], "pop" : 5988, "state" : "AL" } +{ "_id" : "35954", "city" : "ATTALLA", "loc" : [ -86.096717, 34.029597 ], "pop" : 11904, "state" : "AL" } +{ "_id" : "35957", "city" : "BOAZ", "loc" : [ -86.148003, 34.173686 ], "pop" : 16955, "state" : "AL" } +{ "_id" : "35958", "city" : "BRYANT", "loc" : [ -85.632445, 34.945026 ], "pop" : 1700, "state" : "AL" } +{ "_id" : "35959", "city" : "CEDAR BLUFF", "loc" : [ -85.60256699999999, 34.241662 ], "pop" : 3574, "state" : "AL" } +{ "_id" : "35960", "city" : "CENTRE", "loc" : [ -85.609229, 34.111592 ], "pop" : 10294, "state" : "AL" } +{ "_id" : "35961", "city" : "COLLINSVILLE", "loc" : [ -85.861969, 34.267957 ], "pop" : 3245, "state" : "AL" } +{ "_id" : "35962", "city" : "CROSSVILLE", "loc" : [ -86.030575, 34.258784 ], "pop" : 4874, "state" : "AL" } +{ "_id" : "35963", "city" : "DAWSON", "loc" : [ -85.92916099999999, 34.356838 ], "pop" : 1531, "state" : "AL" } +{ "_id" : "35966", "city" : "FLAT ROCK", "loc" : [ -85.708372, 34.807598 ], "pop" : 2141, "state" : "AL" } +{ "_id" : "35967", "city" : "FORT PAYNE", "loc" : [ -85.712394, 34.436792 ], "pop" : 15893, "state" : "AL" } +{ "_id" : "35971", "city" : "FYFFE", "loc" : [ -85.928849, 34.437284 ], "pop" : 3453, "state" : "AL" } +{ "_id" : "35972", "city" : "GALLANT", "loc" : [ -86.234606, 33.997586 ], "pop" : 337, "state" : "AL" } +{ "_id" : "35973", "city" : "GAYLESVILLE", "loc" : [ -85.558893, 34.357324 ], "pop" : 2291, "state" : "AL" } +{ "_id" : "35974", "city" : "GERALDINE", "loc" : [ -86.04039299999999, 34.343864 ], "pop" : 3291, "state" : "AL" } +{ "_id" : "35975", "city" : "GROVEOAK", "loc" : [ -86.04002300000001, 34.435874 ], "pop" : 1098, "state" : "AL" } +{ "_id" : "35976", "city" : "GUNTERSVILLE", "loc" : [ -86.305463, 34.32193 ], "pop" : 11234, "state" : "AL" } +{ "_id" : "35978", "city" : "HENAGAR", "loc" : [ -85.72738099999999, 34.618604 ], "pop" : 2973, "state" : "AL" } +{ "_id" : "35979", "city" : "HIGDON", "loc" : [ -85.622507, 34.873247 ], "pop" : 1324, "state" : "AL" } +{ "_id" : "35980", "city" : "HORTON", "loc" : [ -86.317318, 34.190033 ], "pop" : 4195, "state" : "AL" } +{ "_id" : "35981", "city" : "IDER", "loc" : [ -85.641577, 34.735059 ], "pop" : 5161, "state" : "AL" } +{ "_id" : "35983", "city" : "LEESBURG", "loc" : [ -85.77051, 34.191083 ], "pop" : 3189, "state" : "AL" } +{ "_id" : "35984", "city" : "MENTONE", "loc" : [ -85.57772799999999, 34.587236 ], "pop" : 2099, "state" : "AL" } +{ "_id" : "35986", "city" : "RAINSVILLE", "loc" : [ -85.844605, 34.498884 ], "pop" : 7498, "state" : "AL" } +{ "_id" : "35987", "city" : "STEELE", "loc" : [ -86.22892899999999, 33.941679 ], "pop" : 1830, "state" : "AL" } +{ "_id" : "35988", "city" : "SYLVANIA", "loc" : [ -85.79212800000001, 34.558962 ], "pop" : 2318, "state" : "AL" } +{ "_id" : "35989", "city" : "VALLEY HEAD", "loc" : [ -85.627208, 34.5697 ], "pop" : 1211, "state" : "AL" } +{ "_id" : "36003", "city" : "AUTAUGAVILLE", "loc" : [ -86.714938, 32.462462 ], "pop" : 2641, "state" : "AL" } +{ "_id" : "36004", "city" : "EUFAULA", "loc" : [ -85.23965699999999, 31.786701 ], "pop" : 2669, "state" : "AL" } +{ "_id" : "36005", "city" : "BANKS", "loc" : [ -85.79984399999999, 31.836792 ], "pop" : 1857, "state" : "AL" } +{ "_id" : "36006", "city" : "BILLINGSLEY", "loc" : [ -86.716301, 32.610578 ], "pop" : 1869, "state" : "AL" } +{ "_id" : "36009", "city" : "BRANTLEY", "loc" : [ -86.274343, 31.570963 ], "pop" : 2623, "state" : "AL" } +{ "_id" : "36010", "city" : "BRUNDIDGE", "loc" : [ -85.817668, 31.701324 ], "pop" : 4320, "state" : "AL" } +{ "_id" : "36013", "city" : "CECIL", "loc" : [ -86.011241, 32.300891 ], "pop" : 407, "state" : "AL" } +{ "_id" : "36016", "city" : "CLAYTON", "loc" : [ -85.45093199999999, 31.887413 ], "pop" : 3106, "state" : "AL" } +{ "_id" : "36017", "city" : "CLIO", "loc" : [ -85.590419, 31.68521 ], "pop" : 3178, "state" : "AL" } +{ "_id" : "36022", "city" : "DEATSVILLE", "loc" : [ -86.338211, 32.613405 ], "pop" : 5913, "state" : "AL" } +{ "_id" : "36024", "city" : "ECLECTIC", "loc" : [ -86.031614, 32.65419 ], "pop" : 6105, "state" : "AL" } +{ "_id" : "36025", "city" : "ELMORE", "loc" : [ -86.31613400000001, 32.545378 ], "pop" : 3114, "state" : "AL" } +{ "_id" : "36026", "city" : "EQUALITY", "loc" : [ -86.105064, 32.813908 ], "pop" : 1121, "state" : "AL" } +{ "_id" : "36027", "city" : "EUFAULA", "loc" : [ -85.165605, 31.905063 ], "pop" : 14189, "state" : "AL" } +{ "_id" : "36028", "city" : "DOZIER", "loc" : [ -86.366315, 31.506614 ], "pop" : 741, "state" : "AL" } +{ "_id" : "36029", "city" : "FITZPATRICK", "loc" : [ -85.888329, 32.151607 ], "pop" : 736, "state" : "AL" } +{ "_id" : "36030", "city" : "FOREST HOME", "loc" : [ -86.786377, 31.85318 ], "pop" : 1528, "state" : "AL" } +{ "_id" : "36031", "city" : "FORT DAVIS", "loc" : [ -85.700688, 32.28945 ], "pop" : 891, "state" : "AL" } +{ "_id" : "36032", "city" : "FORT DEPOSIT", "loc" : [ -86.576142, 31.995979 ], "pop" : 2435, "state" : "AL" } +{ "_id" : "36033", "city" : "GEORGIANA", "loc" : [ -86.733965, 31.628662 ], "pop" : 3672, "state" : "AL" } +{ "_id" : "36034", "city" : "GLENWOOD", "loc" : [ -86.17097200000001, 31.664143 ], "pop" : 109, "state" : "AL" } +{ "_id" : "36035", "city" : "GOSHEN", "loc" : [ -86.104851, 31.82497 ], "pop" : 2056, "state" : "AL" } +{ "_id" : "36036", "city" : "GRADY", "loc" : [ -86.12924599999999, 32.019397 ], "pop" : 1811, "state" : "AL" } +{ "_id" : "36037", "city" : "GREENVILLE", "loc" : [ -86.622919, 31.810036 ], "pop" : 15476, "state" : "AL" } +{ "_id" : "36038", "city" : "GANTT", "loc" : [ -86.419836, 31.416909 ], "pop" : 3298, "state" : "AL" } +{ "_id" : "36039", "city" : "HARDAWAY", "loc" : [ -85.883837, 32.312939 ], "pop" : 354, "state" : "AL" } +{ "_id" : "36040", "city" : "HAYNEVILLE", "loc" : [ -86.654994, 32.195707 ], "pop" : 5010, "state" : "AL" } +{ "_id" : "36041", "city" : "HIGHLAND HOME", "loc" : [ -86.297111, 31.928292 ], "pop" : 3068, "state" : "AL" } +{ "_id" : "36042", "city" : "HONORAVILLE", "loc" : [ -86.39806400000001, 31.878397 ], "pop" : 838, "state" : "AL" } +{ "_id" : "36043", "city" : "HOPE HULL", "loc" : [ -86.39318900000001, 32.224256 ], "pop" : 2961, "state" : "AL" } +{ "_id" : "36046", "city" : "LAPINE", "loc" : [ -86.27853399999999, 31.985423 ], "pop" : 338, "state" : "AL" } +{ "_id" : "36047", "city" : "LETOHATCHEE", "loc" : [ -86.488013, 32.086199 ], "pop" : 2348, "state" : "AL" } +{ "_id" : "36048", "city" : "LOUISVILLE", "loc" : [ -85.55806200000001, 31.794262 ], "pop" : 2279, "state" : "AL" } +{ "_id" : "36049", "city" : "LUVERNE", "loc" : [ -86.256601, 31.70739 ], "pop" : 4274, "state" : "AL" } +{ "_id" : "36051", "city" : "MARBURY", "loc" : [ -86.510138, 32.639373 ], "pop" : 3573, "state" : "AL" } +{ "_id" : "36052", "city" : "MATHEWS", "loc" : [ -86.041262, 32.128288 ], "pop" : 836, "state" : "AL" } +{ "_id" : "36053", "city" : "MIDWAY", "loc" : [ -85.53152300000001, 32.09552 ], "pop" : 1873, "state" : "AL" } +{ "_id" : "36054", "city" : "MILLBROOK", "loc" : [ -86.364125, 32.499485 ], "pop" : 9049, "state" : "AL" } +{ "_id" : "36061", "city" : "PEROTE", "loc" : [ -85.74773, 32.003459 ], "pop" : 1792, "state" : "AL" } +{ "_id" : "36064", "city" : "PIKE ROAD", "loc" : [ -86.09589, 32.335705 ], "pop" : 3398, "state" : "AL" } +{ "_id" : "36066", "city" : "PRATTVILLE", "loc" : [ -86.42997, 32.478695 ], "pop" : 11059, "state" : "AL" } +{ "_id" : "36067", "city" : "PRATTVILLE", "loc" : [ -86.48307200000001, 32.471501 ], "pop" : 16536, "state" : "AL" } +{ "_id" : "36069", "city" : "RAMER", "loc" : [ -86.246329, 32.067745 ], "pop" : 1712, "state" : "AL" } +{ "_id" : "36071", "city" : "RUTLEDGE", "loc" : [ -86.34846400000001, 31.755867 ], "pop" : 1976, "state" : "AL" } +{ "_id" : "36075", "city" : "SHORTER", "loc" : [ -85.91616, 32.383585 ], "pop" : 1876, "state" : "AL" } +{ "_id" : "36078", "city" : "TALLASSEE", "loc" : [ -85.89781000000001, 32.550997 ], "pop" : 12046, "state" : "AL" } +{ "_id" : "36080", "city" : "TITUS", "loc" : [ -86.239334, 32.690019 ], "pop" : 2683, "state" : "AL" } +{ "_id" : "36081", "city" : "TROY", "loc" : [ -85.965493, 31.794471 ], "pop" : 19358, "state" : "AL" } +{ "_id" : "36083", "city" : "TUSKEGEE", "loc" : [ -85.68606, 32.431623 ], "pop" : 10687, "state" : "AL" } +{ "_id" : "36088", "city" : "TUSKEGEE INSTITU", "loc" : [ -85.714848, 32.417699 ], "pop" : 6915, "state" : "AL" } +{ "_id" : "36089", "city" : "UNION SPRINGS", "loc" : [ -85.678746, 32.166252 ], "pop" : 7555, "state" : "AL" } +{ "_id" : "36091", "city" : "VERBENA", "loc" : [ -86.543753, 32.759565 ], "pop" : 3702, "state" : "AL" } +{ "_id" : "36092", "city" : "WETUMPKA", "loc" : [ -86.188039, 32.54509 ], "pop" : 13725, "state" : "AL" } +{ "_id" : "36104", "city" : "MONTGOMERY", "loc" : [ -86.30812899999999, 32.373037 ], "pop" : 17086, "state" : "AL" } +{ "_id" : "36105", "city" : "MONTGOMERY", "loc" : [ -86.31044900000001, 32.32573 ], "pop" : 16486, "state" : "AL" } +{ "_id" : "36106", "city" : "MONTGOMERY", "loc" : [ -86.267278, 32.354268 ], "pop" : 15744, "state" : "AL" } +{ "_id" : "36107", "city" : "MONTGOMERY", "loc" : [ -86.27988499999999, 32.380405 ], "pop" : 10345, "state" : "AL" } +{ "_id" : "36108", "city" : "MONTGOMERY", "loc" : [ -86.352904, 32.341682 ], "pop" : 30780, "state" : "AL" } +{ "_id" : "36109", "city" : "MONTGOMERY", "loc" : [ -86.243394, 32.383443 ], "pop" : 25282, "state" : "AL" } +{ "_id" : "36110", "city" : "MONTGOMERY", "loc" : [ -86.274997, 32.421686 ], "pop" : 12551, "state" : "AL" } +{ "_id" : "36111", "city" : "MONTGOMERY", "loc" : [ -86.27154299999999, 32.337363 ], "pop" : 11600, "state" : "AL" } +{ "_id" : "36113", "city" : "MAXWELL A F B", "loc" : [ -86.35584799999999, 32.388133 ], "pop" : 2788, "state" : "AL" } +{ "_id" : "36115", "city" : "GUNTER AFS", "loc" : [ -86.247327, 32.406814 ], "pop" : 1348, "state" : "AL" } +{ "_id" : "36116", "city" : "MONTGOMERY", "loc" : [ -86.24205600000001, 32.312943 ], "pop" : 32314, "state" : "AL" } +{ "_id" : "36117", "city" : "MONTGOMERY", "loc" : [ -86.18329900000001, 32.373568 ], "pop" : 21623, "state" : "AL" } +{ "_id" : "36201", "city" : "ANNISTON", "loc" : [ -85.83815199999999, 33.653896 ], "pop" : 38370, "state" : "AL" } +{ "_id" : "36203", "city" : "OXFORD", "loc" : [ -85.83347000000001, 33.596829 ], "pop" : 12407, "state" : "AL" } +{ "_id" : "36205", "city" : "FORT MC CLELLAN", "loc" : [ -85.801467, 33.710168 ], "pop" : 4128, "state" : "AL" } +{ "_id" : "36206", "city" : "ANNISTON", "loc" : [ -85.838904, 33.719124 ], "pop" : 10915, "state" : "AL" } +{ "_id" : "36250", "city" : "ALEXANDRIA", "loc" : [ -85.892447, 33.780785 ], "pop" : 5776, "state" : "AL" } +{ "_id" : "36251", "city" : "ASHLAND", "loc" : [ -85.828976, 33.247363 ], "pop" : 4518, "state" : "AL" } +{ "_id" : "36255", "city" : "CRAGFORD", "loc" : [ -85.710797, 33.217148 ], "pop" : 796, "state" : "AL" } +{ "_id" : "36256", "city" : "DAVISTON", "loc" : [ -85.75383100000001, 33.033471 ], "pop" : 2334, "state" : "AL" } +{ "_id" : "36258", "city" : "DELTA", "loc" : [ -85.67927899999999, 33.457303 ], "pop" : 1405, "state" : "AL" } +{ "_id" : "36260", "city" : "EASTABOGA", "loc" : [ -85.96075, 33.603132 ], "pop" : 3999, "state" : "AL" } +{ "_id" : "36262", "city" : "FRUITHURST", "loc" : [ -85.43814, 33.771732 ], "pop" : 1473, "state" : "AL" } +{ "_id" : "36263", "city" : "GRAHAM", "loc" : [ -85.334034, 33.462976 ], "pop" : 374, "state" : "AL" } +{ "_id" : "36264", "city" : "HEFLIN", "loc" : [ -85.588471, 33.611515 ], "pop" : 6577, "state" : "AL" } +{ "_id" : "36265", "city" : "JACKSONVILLE", "loc" : [ -85.77518000000001, 33.830966 ], "pop" : 16438, "state" : "AL" } +{ "_id" : "36266", "city" : "LINEVILLE", "loc" : [ -85.73460900000001, 33.328613 ], "pop" : 4345, "state" : "AL" } +{ "_id" : "36267", "city" : "MILLERVILLE", "loc" : [ -85.96900100000001, 33.158959 ], "pop" : 863, "state" : "AL" } +{ "_id" : "36268", "city" : "MUNFORD", "loc" : [ -85.936322, 33.540987 ], "pop" : 4998, "state" : "AL" } +{ "_id" : "36269", "city" : "MUSCADINE", "loc" : [ -85.378907, 33.752913 ], "pop" : 265, "state" : "AL" } +{ "_id" : "36270", "city" : "NEWELL", "loc" : [ -85.505925, 33.440172 ], "pop" : 2407, "state" : "AL" } +{ "_id" : "36271", "city" : "OHATCHEE", "loc" : [ -86.025357, 33.778779 ], "pop" : 3369, "state" : "AL" } +{ "_id" : "36272", "city" : "PIEDMONT", "loc" : [ -85.64599699999999, 33.838946 ], "pop" : 12921, "state" : "AL" } +{ "_id" : "36273", "city" : "RANBURNE", "loc" : [ -85.378604, 33.561627 ], "pop" : 3696, "state" : "AL" } +{ "_id" : "36274", "city" : "ROCK MILLS", "loc" : [ -85.357854, 33.156443 ], "pop" : 9430, "state" : "AL" } +{ "_id" : "36276", "city" : "WADLEY", "loc" : [ -85.551344, 33.149192 ], "pop" : 1949, "state" : "AL" } +{ "_id" : "36277", "city" : "WEAVER", "loc" : [ -85.810666, 33.756286 ], "pop" : 7453, "state" : "AL" } +{ "_id" : "36278", "city" : "WEDOWEE", "loc" : [ -85.473737, 33.301854 ], "pop" : 3101, "state" : "AL" } +{ "_id" : "36279", "city" : "WELLINGTON", "loc" : [ -85.915325, 33.863843 ], "pop" : 2137, "state" : "AL" } +{ "_id" : "36280", "city" : "WOODLAND", "loc" : [ -85.353768, 33.355453 ], "pop" : 2291, "state" : "AL" } +{ "_id" : "36301", "city" : "TAYLOR", "loc" : [ -85.418036, 31.202888 ], "pop" : 32689, "state" : "AL" } +{ "_id" : "36303", "city" : "NAPIER FIELD", "loc" : [ -85.412462, 31.255239 ], "pop" : 32407, "state" : "AL" } +{ "_id" : "36310", "city" : "ABBEVILLE", "loc" : [ -85.279044, 31.575479 ], "pop" : 5416, "state" : "AL" } +{ "_id" : "36311", "city" : "ARITON", "loc" : [ -85.707716, 31.582996 ], "pop" : 1434, "state" : "AL" } +{ "_id" : "36312", "city" : "ASHFORD", "loc" : [ -85.253488, 31.1888 ], "pop" : 5115, "state" : "AL" } +{ "_id" : "36314", "city" : "BLACK", "loc" : [ -85.745634, 31.01318 ], "pop" : 183, "state" : "AL" } +{ "_id" : "36316", "city" : "CHANCELLOR", "loc" : [ -85.91089700000001, 31.173379 ], "pop" : 620, "state" : "AL" } +{ "_id" : "36317", "city" : "CLOPTON", "loc" : [ -85.482308, 31.602843 ], "pop" : 157, "state" : "AL" } +{ "_id" : "36318", "city" : "COFFEE SPRINGS", "loc" : [ -85.918224, 31.138758 ], "pop" : 750, "state" : "AL" } +{ "_id" : "36319", "city" : "COLUMBIA", "loc" : [ -85.145488, 31.335235 ], "pop" : 2934, "state" : "AL" } +{ "_id" : "36320", "city" : "COTTONWOOD", "loc" : [ -85.375665, 31.098934 ], "pop" : 8517, "state" : "AL" } +{ "_id" : "36322", "city" : "DALEVILLE", "loc" : [ -85.730473, 31.281091 ], "pop" : 8885, "state" : "AL" } +{ "_id" : "36323", "city" : "ELBA", "loc" : [ -86.07772799999999, 31.41373 ], "pop" : 6662, "state" : "AL" } +{ "_id" : "36330", "city" : "ENTERPRISE", "loc" : [ -85.842111, 31.340789 ], "pop" : 29102, "state" : "AL" } +{ "_id" : "36340", "city" : "GENEVA", "loc" : [ -85.884748, 31.041445 ], "pop" : 5471, "state" : "AL" } +{ "_id" : "36343", "city" : "GORDON", "loc" : [ -85.123412, 31.10019 ], "pop" : 2017, "state" : "AL" } +{ "_id" : "36344", "city" : "HARTFORD", "loc" : [ -85.719204, 31.08598 ], "pop" : 4819, "state" : "AL" } +{ "_id" : "36345", "city" : "HEADLAND", "loc" : [ -85.332277, 31.353406 ], "pop" : 4595, "state" : "AL" } +{ "_id" : "36346", "city" : "JACK", "loc" : [ -86.043083, 31.552392 ], "pop" : 1517, "state" : "AL" } +{ "_id" : "36349", "city" : "MALVERN", "loc" : [ -85.522327, 31.157528 ], "pop" : 1686, "state" : "AL" } +{ "_id" : "36350", "city" : "MIDLAND CITY", "loc" : [ -85.51303299999999, 31.36716 ], "pop" : 4854, "state" : "AL" } +{ "_id" : "36351", "city" : "NEW BROCKTON", "loc" : [ -85.940386, 31.36898 ], "pop" : 1809, "state" : "AL" } +{ "_id" : "36352", "city" : "NEWTON", "loc" : [ -85.59922899999999, 31.331064 ], "pop" : 1660, "state" : "AL" } +{ "_id" : "36353", "city" : "NEWVILLE", "loc" : [ -85.32874099999999, 31.440295 ], "pop" : 1525, "state" : "AL" } +{ "_id" : "36360", "city" : "OZARK", "loc" : [ -85.643629, 31.439069 ], "pop" : 19017, "state" : "AL" } +{ "_id" : "36362", "city" : "FORT RUCKER", "loc" : [ -85.721374, 31.348011 ], "pop" : 7607, "state" : "AL" } +{ "_id" : "36370", "city" : "PANSEY", "loc" : [ -85.23854900000001, 31.131778 ], "pop" : 595, "state" : "AL" } +{ "_id" : "36373", "city" : "SHORTERVILLE", "loc" : [ -85.14584000000001, 31.625627 ], "pop" : 2503, "state" : "AL" } +{ "_id" : "36374", "city" : "SKIPPERVILLE", "loc" : [ -85.549578, 31.551588 ], "pop" : 1048, "state" : "AL" } +{ "_id" : "36375", "city" : "SLOCOMB", "loc" : [ -85.582954, 31.095558 ], "pop" : 4504, "state" : "AL" } +{ "_id" : "36376", "city" : "WEBB", "loc" : [ -85.254385, 31.265618 ], "pop" : 1810, "state" : "AL" } +{ "_id" : "36401", "city" : "EVERGREEN", "loc" : [ -86.925771, 31.458009 ], "pop" : 8556, "state" : "AL" } +{ "_id" : "36419", "city" : "ALLEN", "loc" : [ -87.66746000000001, 31.624266 ], "pop" : 0, "state" : "AL" } +{ "_id" : "36420", "city" : "ANDALUSIA", "loc" : [ -86.49046800000001, 31.297142 ], "pop" : 16920, "state" : "AL" } +{ "_id" : "36425", "city" : "BEATRICE", "loc" : [ -87.17191200000001, 31.727324 ], "pop" : 1620, "state" : "AL" } +{ "_id" : "36426", "city" : "EAST BREWTON", "loc" : [ -87.067325, 31.118926 ], "pop" : 15479, "state" : "AL" } +{ "_id" : "36432", "city" : "CASTLEBERRY", "loc" : [ -87.026754, 31.326113 ], "pop" : 2881, "state" : "AL" } +{ "_id" : "36435", "city" : "COY", "loc" : [ -87.39255799999999, 31.888851 ], "pop" : 1109, "state" : "AL" } +{ "_id" : "36436", "city" : "DICKINSON", "loc" : [ -87.65692900000001, 31.717167 ], "pop" : 272, "state" : "AL" } +{ "_id" : "36441", "city" : "FLOMATON", "loc" : [ -87.26636499999999, 31.040233 ], "pop" : 3585, "state" : "AL" } +{ "_id" : "36442", "city" : "FLORALA", "loc" : [ -86.338528, 31.017194 ], "pop" : 3421, "state" : "AL" } +{ "_id" : "36444", "city" : "FRANKLIN", "loc" : [ -87.441237, 31.723815 ], "pop" : 154, "state" : "AL" } +{ "_id" : "36445", "city" : "FRISCO CITY", "loc" : [ -87.381744, 31.423478 ], "pop" : 6179, "state" : "AL" } +{ "_id" : "36446", "city" : "FULTON", "loc" : [ -87.708065, 31.790947 ], "pop" : 2163, "state" : "AL" } +{ "_id" : "36451", "city" : "GROVE HILL", "loc" : [ -87.763571, 31.675502 ], "pop" : 4089, "state" : "AL" } +{ "_id" : "36453", "city" : "KINSTON", "loc" : [ -86.069532, 31.262118 ], "pop" : 3523, "state" : "AL" } +{ "_id" : "36454", "city" : "LENOX", "loc" : [ -87.19671, 31.327261 ], "pop" : 515, "state" : "AL" } +{ "_id" : "36456", "city" : "MC KENZIE", "loc" : [ -86.735615, 31.54495 ], "pop" : 1222, "state" : "AL" } +{ "_id" : "36460", "city" : "MONROEVILLE", "loc" : [ -87.340993, 31.51533 ], "pop" : 10492, "state" : "AL" } +{ "_id" : "36467", "city" : "OPP", "loc" : [ -86.257105, 31.279861 ], "pop" : 9901, "state" : "AL" } +{ "_id" : "36471", "city" : "PETERMAN", "loc" : [ -87.259984, 31.589953 ], "pop" : 1826, "state" : "AL" } +{ "_id" : "36473", "city" : "RANGE", "loc" : [ -87.319739, 31.30169 ], "pop" : 208, "state" : "AL" } +{ "_id" : "36474", "city" : "RED LEVEL", "loc" : [ -86.61208999999999, 31.439931 ], "pop" : 2005, "state" : "AL" } +{ "_id" : "36475", "city" : "REPTON", "loc" : [ -87.172039, 31.425569 ], "pop" : 1750, "state" : "AL" } +{ "_id" : "36477", "city" : "SAMSON", "loc" : [ -86.06741599999999, 31.104918 ], "pop" : 4790, "state" : "AL" } +{ "_id" : "36480", "city" : "URIAH", "loc" : [ -87.57051800000001, 31.313467 ], "pop" : 1648, "state" : "AL" } +{ "_id" : "36481", "city" : "VREDENBURGH", "loc" : [ -87.416184, 31.73443 ], "pop" : 2040, "state" : "AL" } +{ "_id" : "36482", "city" : "WHATLEY", "loc" : [ -87.656502, 31.639453 ], "pop" : 790, "state" : "AL" } +{ "_id" : "36483", "city" : "WING", "loc" : [ -86.56119, 31.148127 ], "pop" : 1583, "state" : "AL" } +{ "_id" : "36502", "city" : "ATMORE", "loc" : [ -87.487347, 31.057245 ], "pop" : 15948, "state" : "AL" } +{ "_id" : "36505", "city" : "AXIS", "loc" : [ -88.04273999999999, 31.006817 ], "pop" : 140, "state" : "AL" } +{ "_id" : "36507", "city" : "BAY MINETTE", "loc" : [ -87.76443999999999, 30.86354 ], "pop" : 17816, "state" : "AL" } +{ "_id" : "36509", "city" : "BAYOU LA BATRE", "loc" : [ -88.250697, 30.407983 ], "pop" : 4901, "state" : "AL" } +{ "_id" : "36510", "city" : "BIGBEE", "loc" : [ -88.165294, 31.589072 ], "pop" : 264, "state" : "AL" } +{ "_id" : "36511", "city" : "BON SECOUR", "loc" : [ -87.721355, 30.328883 ], "pop" : 2001, "state" : "AL" } +{ "_id" : "36515", "city" : "CARLTON", "loc" : [ -87.837793, 31.322449 ], "pop" : 30, "state" : "AL" } +{ "_id" : "36518", "city" : "CHATOM", "loc" : [ -88.269887, 31.487638 ], "pop" : 3094, "state" : "AL" } +{ "_id" : "36521", "city" : "CHUNCHULA", "loc" : [ -88.13112599999999, 30.991178 ], "pop" : 1322, "state" : "AL" } +{ "_id" : "36522", "city" : "CITRONELLE", "loc" : [ -88.254949, 31.042533 ], "pop" : 7233, "state" : "AL" } +{ "_id" : "36523", "city" : "CODEN", "loc" : [ -88.16827600000001, 30.418834 ], "pop" : 3897, "state" : "AL" } +{ "_id" : "36524", "city" : "COFFEEVILLE", "loc" : [ -88.07154199999999, 31.78428 ], "pop" : 1374, "state" : "AL" } +{ "_id" : "36525", "city" : "CREOLA", "loc" : [ -88.017414, 30.901267 ], "pop" : 2569, "state" : "AL" } +{ "_id" : "36526", "city" : "DAPHNE", "loc" : [ -87.889522, 30.61972 ], "pop" : 14607, "state" : "AL" } +{ "_id" : "36527", "city" : "SPANISH FORT", "loc" : [ -87.88668, 30.695852 ], "pop" : 5486, "state" : "AL" } +{ "_id" : "36528", "city" : "DAUPHIN ISLAND", "loc" : [ -88.109644, 30.252057 ], "pop" : 824, "state" : "AL" } +{ "_id" : "36529", "city" : "DEER PARK", "loc" : [ -88.32731, 31.184892 ], "pop" : 723, "state" : "AL" } +{ "_id" : "36530", "city" : "ELBERTA", "loc" : [ -87.58896, 30.394239 ], "pop" : 2551, "state" : "AL" } +{ "_id" : "36532", "city" : "FAIRHOPE", "loc" : [ -87.883546, 30.50116 ], "pop" : 16331, "state" : "AL" } +{ "_id" : "36535", "city" : "FOLEY", "loc" : [ -87.685737, 30.400664 ], "pop" : 8520, "state" : "AL" } +{ "_id" : "36538", "city" : "FRANKVILLE", "loc" : [ -88.133185, 31.64684 ], "pop" : 472, "state" : "AL" } +{ "_id" : "36539", "city" : "FRUITDALE", "loc" : [ -88.376597, 31.348843 ], "pop" : 848, "state" : "AL" } +{ "_id" : "36540", "city" : "GAINESTOWN", "loc" : [ -87.682176, 31.425822 ], "pop" : 301, "state" : "AL" } +{ "_id" : "36541", "city" : "GRAND BAY", "loc" : [ -88.32825, 30.498288 ], "pop" : 10344, "state" : "AL" } +{ "_id" : "36542", "city" : "FORT MORGAN", "loc" : [ -87.712795, 30.268954 ], "pop" : 4930, "state" : "AL" } +{ "_id" : "36544", "city" : "IRVINGTON", "loc" : [ -88.239563, 30.480241 ], "pop" : 6181, "state" : "AL" } +{ "_id" : "36545", "city" : "JACKSON", "loc" : [ -87.867192, 31.513098 ], "pop" : 9679, "state" : "AL" } +{ "_id" : "36548", "city" : "LEROY", "loc" : [ -87.968672, 31.491021 ], "pop" : 1086, "state" : "AL" } +{ "_id" : "36549", "city" : "LILLIAN", "loc" : [ -87.474452, 30.39724 ], "pop" : 3833, "state" : "AL" } +{ "_id" : "36550", "city" : "LITTLE RIVER", "loc" : [ -87.754796, 31.22459 ], "pop" : 649, "state" : "AL" } +{ "_id" : "36551", "city" : "LOXLEY", "loc" : [ -87.75624000000001, 30.617964 ], "pop" : 2712, "state" : "AL" } +{ "_id" : "36553", "city" : "MC INTOSH", "loc" : [ -88.051102, 31.236108 ], "pop" : 4211, "state" : "AL" } +{ "_id" : "36555", "city" : "MAGNOLIA SPRINGS", "loc" : [ -87.785781, 30.394497 ], "pop" : 1088, "state" : "AL" } +{ "_id" : "36558", "city" : "MILLRY", "loc" : [ -88.35587200000001, 31.626871 ], "pop" : 2825, "state" : "AL" } +{ "_id" : "36560", "city" : "MOUNT VERNON", "loc" : [ -88.035044, 31.097375 ], "pop" : 5053, "state" : "AL" } +{ "_id" : "36561", "city" : "ORANGE BEACH", "loc" : [ -87.555888, 30.290596 ], "pop" : 2549, "state" : "AL" } +{ "_id" : "36562", "city" : "PERDIDO", "loc" : [ -87.62837399999999, 30.98058 ], "pop" : 986, "state" : "AL" } +{ "_id" : "36567", "city" : "ROBERTSDALE", "loc" : [ -87.63726800000001, 30.561608 ], "pop" : 3519, "state" : "AL" } +{ "_id" : "36569", "city" : "SAINT STEPHENS", "loc" : [ -88.052094, 31.533028 ], "pop" : 688, "state" : "AL" } +{ "_id" : "36570", "city" : "SALITPA", "loc" : [ -87.95961800000001, 31.654667 ], "pop" : 896, "state" : "AL" } +{ "_id" : "36571", "city" : "SARALAND", "loc" : [ -88.09338700000001, 30.833197 ], "pop" : 13151, "state" : "AL" } +{ "_id" : "36572", "city" : "SATSUMA", "loc" : [ -88.05331200000001, 30.851628 ], "pop" : 6197, "state" : "AL" } +{ "_id" : "36574", "city" : "SEMINOLE", "loc" : [ -87.46593799999999, 30.504806 ], "pop" : 606, "state" : "AL" } +{ "_id" : "36575", "city" : "SEMMES", "loc" : [ -88.266705, 30.754408 ], "pop" : 9329, "state" : "AL" } +{ "_id" : "36576", "city" : "SILVERHILL", "loc" : [ -87.745676, 30.522237 ], "pop" : 8001, "state" : "AL" } +{ "_id" : "36579", "city" : "STOCKTON", "loc" : [ -87.86332299999999, 31.01293 ], "pop" : 1214, "state" : "AL" } +{ "_id" : "36580", "city" : "SUMMERDALE", "loc" : [ -87.699183, 30.475225 ], "pop" : 881, "state" : "AL" } +{ "_id" : "36582", "city" : "THEODORE", "loc" : [ -88.18074799999999, 30.544374 ], "pop" : 20185, "state" : "AL" } +{ "_id" : "36583", "city" : "TIBBIE", "loc" : [ -88.266828, 31.373742 ], "pop" : 327, "state" : "AL" } +{ "_id" : "36584", "city" : "VINEGAR BEND", "loc" : [ -88.386466, 31.25841 ], "pop" : 475, "state" : "AL" } +{ "_id" : "36585", "city" : "WAGARVILLE", "loc" : [ -88.070519, 31.410205 ], "pop" : 1681, "state" : "AL" } +{ "_id" : "36586", "city" : "WALKER SPRINGS", "loc" : [ -87.83535500000001, 31.626166 ], "pop" : 1001, "state" : "AL" } +{ "_id" : "36587", "city" : "WILMER", "loc" : [ -88.333196, 30.813745 ], "pop" : 5905, "state" : "AL" } +{ "_id" : "36602", "city" : "MOBILE", "loc" : [ -88.04530800000001, 30.688828 ], "pop" : 1263, "state" : "AL" } +{ "_id" : "36603", "city" : "MOBILE", "loc" : [ -88.05622, 30.692141 ], "pop" : 12162, "state" : "AL" } +{ "_id" : "36604", "city" : "MOBILE", "loc" : [ -88.067804, 30.681963 ], "pop" : 11498, "state" : "AL" } +{ "_id" : "36605", "city" : "MOBILE", "loc" : [ -88.08464600000001, 30.634117 ], "pop" : 31621, "state" : "AL" } +{ "_id" : "36606", "city" : "MOBILE", "loc" : [ -88.100909, 30.672899 ], "pop" : 18247, "state" : "AL" } +{ "_id" : "36607", "city" : "MOBILE", "loc" : [ -88.10290000000001, 30.697486 ], "pop" : 8610, "state" : "AL" } +{ "_id" : "36608", "city" : "MOBILE", "loc" : [ -88.18778399999999, 30.69636 ], "pop" : 37600, "state" : "AL" } +{ "_id" : "36609", "city" : "MOBILE", "loc" : [ -88.161806, 30.660527 ], "pop" : 23687, "state" : "AL" } +{ "_id" : "36610", "city" : "PRICHARD", "loc" : [ -88.083761, 30.737846 ], "pop" : 24919, "state" : "AL" } +{ "_id" : "36611", "city" : "CHICKASAW", "loc" : [ -88.08497300000001, 30.766821 ], "pop" : 6660, "state" : "AL" } +{ "_id" : "36612", "city" : "MOBILE", "loc" : [ -88.11311000000001, 30.751844 ], "pop" : 6096, "state" : "AL" } +{ "_id" : "36613", "city" : "EIGHT MILE", "loc" : [ -88.182311, 30.795074 ], "pop" : 13517, "state" : "AL" } +{ "_id" : "36615", "city" : "BROOKLEY FIELD", "loc" : [ -88.068871, 30.631199 ], "pop" : 864, "state" : "AL" } +{ "_id" : "36617", "city" : "MOBILE", "loc" : [ -88.091796, 30.714522 ], "pop" : 17882, "state" : "AL" } +{ "_id" : "36618", "city" : "MOBILE", "loc" : [ -88.175753, 30.732178 ], "pop" : 14887, "state" : "AL" } +{ "_id" : "36619", "city" : "MOBILE", "loc" : [ -88.19464499999999, 30.592803 ], "pop" : 12728, "state" : "AL" } +{ "_id" : "36693", "city" : "MOBILE", "loc" : [ -88.158843, 30.631076 ], "pop" : 17704, "state" : "AL" } +{ "_id" : "36695", "city" : "MOBILE", "loc" : [ -88.22924500000001, 30.647431 ], "pop" : 21467, "state" : "AL" } +{ "_id" : "36701", "city" : "SELMA", "loc" : [ -87.02452700000001, 32.419719 ], "pop" : 26569, "state" : "AL" } +{ "_id" : "36703", "city" : "SELMA", "loc" : [ -87.01354600000001, 32.415553 ], "pop" : 12931, "state" : "AL" } +{ "_id" : "36720", "city" : "ALBERTA", "loc" : [ -87.34250299999999, 32.144889 ], "pop" : 1340, "state" : "AL" } +{ "_id" : "36722", "city" : "ARLINGTON", "loc" : [ -87.559691, 32.066784 ], "pop" : 1098, "state" : "AL" } +{ "_id" : "36726", "city" : "CAMDEN", "loc" : [ -87.29504900000001, 32.004732 ], "pop" : 4948, "state" : "AL" } +{ "_id" : "36727", "city" : "CAMPBELL", "loc" : [ -88.006072, 31.963512 ], "pop" : 392, "state" : "AL" } +{ "_id" : "36728", "city" : "CATHERINE", "loc" : [ -87.48362299999999, 32.182 ], "pop" : 366, "state" : "AL" } +{ "_id" : "36732", "city" : "DEMOPOLIS", "loc" : [ -87.839669, 32.490792 ], "pop" : 9992, "state" : "AL" } +{ "_id" : "36736", "city" : "DIXONS MILLS", "loc" : [ -87.745356, 32.067209 ], "pop" : 2635, "state" : "AL" } +{ "_id" : "36738", "city" : "FAUNSDALE", "loc" : [ -87.61807899999999, 32.423259 ], "pop" : 831, "state" : "AL" } +{ "_id" : "36740", "city" : "FORKLAND", "loc" : [ -87.881676, 32.644661 ], "pop" : 2121, "state" : "AL" } +{ "_id" : "36742", "city" : "GALLION", "loc" : [ -87.698542, 32.529771 ], "pop" : 599, "state" : "AL" } +{ "_id" : "36744", "city" : "GREENSBORO", "loc" : [ -87.59049400000001, 32.716721 ], "pop" : 7680, "state" : "AL" } +{ "_id" : "36748", "city" : "LINDEN", "loc" : [ -87.79535799999999, 32.305343 ], "pop" : 5438, "state" : "AL" } +{ "_id" : "36749", "city" : "JONES", "loc" : [ -86.88926600000001, 32.608515 ], "pop" : 428, "state" : "AL" } +{ "_id" : "36750", "city" : "MAPLESVILLE", "loc" : [ -86.87170399999999, 32.804507 ], "pop" : 1995, "state" : "AL" } +{ "_id" : "36751", "city" : "LOWER PEACH TREE", "loc" : [ -87.568224, 31.850365 ], "pop" : 323, "state" : "AL" } +{ "_id" : "36752", "city" : "BURKVILLE", "loc" : [ -86.60986800000001, 32.300292 ], "pop" : 1478, "state" : "AL" } +{ "_id" : "36754", "city" : "MAGNOLIA", "loc" : [ -87.699815, 32.141931 ], "pop" : 222, "state" : "AL" } +{ "_id" : "36756", "city" : "MARION", "loc" : [ -87.33143699999999, 32.646301 ], "pop" : 7284, "state" : "AL" } +{ "_id" : "36758", "city" : "PLANTERSVILLE", "loc" : [ -86.947531, 32.617608 ], "pop" : 946, "state" : "AL" } +{ "_id" : "36759", "city" : "MARION JUNCTION", "loc" : [ -87.27018099999999, 32.426589 ], "pop" : 796, "state" : "AL" } +{ "_id" : "36761", "city" : "BOYS RANCH", "loc" : [ -86.92497, 32.095387 ], "pop" : 1714, "state" : "AL" } +{ "_id" : "36762", "city" : "MORVIN", "loc" : [ -87.972897, 31.967305 ], "pop" : 24, "state" : "AL" } +{ "_id" : "36765", "city" : "NEWBERN", "loc" : [ -87.56147199999999, 32.551465 ], "pop" : 1131, "state" : "AL" } +{ "_id" : "36767", "city" : "ORRVILLE", "loc" : [ -87.221368, 32.294859 ], "pop" : 2680, "state" : "AL" } +{ "_id" : "36768", "city" : "PINE APPLE", "loc" : [ -87.004667, 31.926522 ], "pop" : 1658, "state" : "AL" } +{ "_id" : "36769", "city" : "PINE HILL", "loc" : [ -87.57708599999999, 31.973546 ], "pop" : 2623, "state" : "AL" } +{ "_id" : "36771", "city" : "PRAIRIE", "loc" : [ -87.448723, 32.084762 ], "pop" : 112, "state" : "AL" } +{ "_id" : "36773", "city" : "SAFFORD", "loc" : [ -87.369345, 32.300242 ], "pop" : 715, "state" : "AL" } +{ "_id" : "36775", "city" : "SARDIS", "loc" : [ -86.99195899999999, 32.284358 ], "pop" : 1683, "state" : "AL" } +{ "_id" : "36776", "city" : "SAWYERVILLE", "loc" : [ -87.740201, 32.757796 ], "pop" : 1684, "state" : "AL" } +{ "_id" : "36779", "city" : "SPROTT", "loc" : [ -87.141599, 32.654376 ], "pop" : 1191, "state" : "AL" } +{ "_id" : "36782", "city" : "SWEET WATER", "loc" : [ -87.922755, 32.077272 ], "pop" : 2444, "state" : "AL" } +{ "_id" : "36783", "city" : "THOMASTON", "loc" : [ -87.597438, 32.253776 ], "pop" : 1527, "state" : "AL" } +{ "_id" : "36784", "city" : "THOMASVILLE", "loc" : [ -87.75984200000001, 31.906728 ], "pop" : 6229, "state" : "AL" } +{ "_id" : "36785", "city" : "BENTON", "loc" : [ -86.85986699999999, 32.281924 ], "pop" : 1396, "state" : "AL" } +{ "_id" : "36786", "city" : "UNIONTOWN", "loc" : [ -87.493398, 32.446966 ], "pop" : 4173, "state" : "AL" } +{ "_id" : "36790", "city" : "STANTON", "loc" : [ -86.886848, 32.709631 ], "pop" : 916, "state" : "AL" } +{ "_id" : "36792", "city" : "RANDOLPH", "loc" : [ -86.90701, 32.888834 ], "pop" : 434, "state" : "AL" } +{ "_id" : "36793", "city" : "LAWLEY", "loc" : [ -86.95670800000001, 32.864558 ], "pop" : 337, "state" : "AL" } +{ "_id" : "36801", "city" : "OPELIKA", "loc" : [ -85.35862899999999, 32.627771 ], "pop" : 32808, "state" : "AL" } +{ "_id" : "36830", "city" : "AUBURN", "loc" : [ -85.489001, 32.602043 ], "pop" : 38908, "state" : "AL" } +{ "_id" : "36850", "city" : "CAMP HILL", "loc" : [ -85.64738, 32.782749 ], "pop" : 2422, "state" : "AL" } +{ "_id" : "36852", "city" : "CUSSETA", "loc" : [ -85.215791, 32.803194 ], "pop" : 4597, "state" : "AL" } +{ "_id" : "36853", "city" : "DADEVILLE", "loc" : [ -85.77039499999999, 32.82239 ], "pop" : 7620, "state" : "AL" } +{ "_id" : "36854", "city" : "VALLEY", "loc" : [ -85.17491099999999, 32.811349 ], "pop" : 9504, "state" : "AL" } +{ "_id" : "36855", "city" : "FIVE POINTS", "loc" : [ -85.324264, 33.042408 ], "pop" : 2400, "state" : "AL" } +{ "_id" : "36858", "city" : "HATCHECHUBBEE", "loc" : [ -85.302882, 32.284531 ], "pop" : 772, "state" : "AL" } +{ "_id" : "36860", "city" : "HURTSBORO", "loc" : [ -85.395903, 32.245429 ], "pop" : 1727, "state" : "AL" } +{ "_id" : "36861", "city" : "JACKSONS GAP", "loc" : [ -85.848662, 32.879698 ], "pop" : 2236, "state" : "AL" } +{ "_id" : "36862", "city" : "LAFAYETTE", "loc" : [ -85.44256300000001, 32.925237 ], "pop" : 7045, "state" : "AL" } +{ "_id" : "36863", "city" : "LANETT", "loc" : [ -85.21608000000001, 32.861609 ], "pop" : 12083, "state" : "AL" } +{ "_id" : "36866", "city" : "NOTASULGA", "loc" : [ -85.68707000000001, 32.543727 ], "pop" : 3361, "state" : "AL" } +{ "_id" : "36867", "city" : "PHENIX CITY", "loc" : [ -85.095082, 32.407816 ], "pop" : 13632, "state" : "AL" } +{ "_id" : "36869", "city" : "PHENIX CITY", "loc" : [ -85.018118, 32.470647 ], "pop" : 28320, "state" : "AL" } +{ "_id" : "36871", "city" : "PITTSVIEW", "loc" : [ -85.131248, 32.173346 ], "pop" : 1525, "state" : "AL" } +{ "_id" : "36874", "city" : "SALEM", "loc" : [ -85.183966, 32.621157 ], "pop" : 2773, "state" : "AL" } +{ "_id" : "36875", "city" : "SEALE", "loc" : [ -85.167733, 32.305339 ], "pop" : 1949, "state" : "AL" } +{ "_id" : "36877", "city" : "SMITHS", "loc" : [ -85.100027, 32.520072 ], "pop" : 10605, "state" : "AL" } +{ "_id" : "36879", "city" : "WAVERLY", "loc" : [ -85.51437199999999, 32.763167 ], "pop" : 1689, "state" : "AL" } +{ "_id" : "36904", "city" : "BUTLER", "loc" : [ -88.206391, 32.082906 ], "pop" : 4957, "state" : "AL" } +{ "_id" : "36907", "city" : "CUBA", "loc" : [ -88.36108299999999, 32.410973 ], "pop" : 1184, "state" : "AL" } +{ "_id" : "36908", "city" : "GILBERTOWN", "loc" : [ -88.326514, 31.866602 ], "pop" : 1606, "state" : "AL" } +{ "_id" : "36910", "city" : "JACHIN", "loc" : [ -88.233356, 32.244174 ], "pop" : 480, "state" : "AL" } +{ "_id" : "36912", "city" : "LISMAN", "loc" : [ -88.323419, 32.217722 ], "pop" : 2313, "state" : "AL" } +{ "_id" : "36915", "city" : "NEEDHAM", "loc" : [ -88.345798, 32.012165 ], "pop" : 618, "state" : "AL" } +{ "_id" : "36916", "city" : "PENNINGTON", "loc" : [ -88.09310000000001, 32.226245 ], "pop" : 1459, "state" : "AL" } +{ "_id" : "36919", "city" : "SILAS", "loc" : [ -88.30914900000001, 31.766754 ], "pop" : 2600, "state" : "AL" } +{ "_id" : "36921", "city" : "TOXEY", "loc" : [ -88.31793999999999, 31.93153 ], "pop" : 1980, "state" : "AL" } +{ "_id" : "36922", "city" : "WARD", "loc" : [ -88.29711399999999, 32.334063 ], "pop" : 274, "state" : "AL" } +{ "_id" : "36925", "city" : "YORK", "loc" : [ -88.268304, 32.472765 ], "pop" : 5728, "state" : "AL" } +{ "_id" : "37010", "city" : "ADAMS", "loc" : [ -87.122626, 36.558174 ], "pop" : 2660, "state" : "TN" } +{ "_id" : "37012", "city" : "ALEXANDRIA", "loc" : [ -86.037171, 36.071147 ], "pop" : 993, "state" : "TN" } +{ "_id" : "37013", "city" : "ANTIOCH", "loc" : [ -86.65915099999999, 36.059517 ], "pop" : 36988, "state" : "TN" } +{ "_id" : "37014", "city" : "ARRINGTON", "loc" : [ -86.564515, 35.904876 ], "pop" : 12171, "state" : "TN" } +{ "_id" : "37015", "city" : "ASHLAND CITY", "loc" : [ -87.044719, 36.273132 ], "pop" : 10940, "state" : "TN" } +{ "_id" : "37016", "city" : "AUBURNTOWN", "loc" : [ -86.10753200000001, 35.974392 ], "pop" : 933, "state" : "TN" } +{ "_id" : "37018", "city" : "BEECHGROVE", "loc" : [ -86.204644, 35.644733 ], "pop" : 650, "state" : "TN" } +{ "_id" : "37019", "city" : "BELFAST", "loc" : [ -86.70948199999999, 35.406905 ], "pop" : 425, "state" : "TN" } +{ "_id" : "37020", "city" : "BELL BUCKLE", "loc" : [ -86.394908, 35.638105 ], "pop" : 2899, "state" : "TN" } +{ "_id" : "37022", "city" : "BETHPAGE", "loc" : [ -86.314572, 36.518575 ], "pop" : 4132, "state" : "TN" } +{ "_id" : "37023", "city" : "BIG ROCK", "loc" : [ -87.737838, 36.571606 ], "pop" : 258, "state" : "TN" } +{ "_id" : "37025", "city" : "BON AQUA", "loc" : [ -87.299564, 35.947073 ], "pop" : 3984, "state" : "TN" } +{ "_id" : "37026", "city" : "BRADYVILLE", "loc" : [ -86.09119, 35.705278 ], "pop" : 1570, "state" : "TN" } +{ "_id" : "37027", "city" : "BRENTWOOD", "loc" : [ -86.790947, 36.006272 ], "pop" : 24280, "state" : "TN" } +{ "_id" : "37028", "city" : "BUMPUS MILLS", "loc" : [ -87.861434, 36.622618 ], "pop" : 411, "state" : "TN" } +{ "_id" : "37029", "city" : "BURNS", "loc" : [ -87.306061, 36.047066 ], "pop" : 4449, "state" : "TN" } +{ "_id" : "37030", "city" : "DEFEATED", "loc" : [ -85.96969, 36.255617 ], "pop" : 5318, "state" : "TN" } +{ "_id" : "37031", "city" : "CASTALIAN SPRING", "loc" : [ -86.315545, 36.382108 ], "pop" : 1544, "state" : "TN" } +{ "_id" : "37032", "city" : "CEDAR HILL", "loc" : [ -87.027523, 36.506163 ], "pop" : 2527, "state" : "TN" } +{ "_id" : "37033", "city" : "CENTERVILLE", "loc" : [ -87.477473, 35.779685 ], "pop" : 5955, "state" : "TN" } +{ "_id" : "37034", "city" : "CHAPEL HILL", "loc" : [ -86.683584, 35.63542 ], "pop" : 2912, "state" : "TN" } +{ "_id" : "37035", "city" : "CHAPMANSBORO", "loc" : [ -87.111288, 36.378078 ], "pop" : 3248, "state" : "TN" } +{ "_id" : "37036", "city" : "CHARLOTTE", "loc" : [ -87.281554, 36.232612 ], "pop" : 4205, "state" : "TN" } +{ "_id" : "37037", "city" : "CHRISTIANA", "loc" : [ -86.407932, 35.740877 ], "pop" : 3173, "state" : "TN" } +{ "_id" : "37040", "city" : "CLARKSVILLE", "loc" : [ -87.348997, 36.522014 ], "pop" : 24920, "state" : "TN" } +{ "_id" : "37042", "city" : "CLARKSVILLE", "loc" : [ -87.418621, 36.585315 ], "pop" : 43296, "state" : "TN" } +{ "_id" : "37043", "city" : "CLARKSVILLE", "loc" : [ -87.27565300000001, 36.5107 ], "pop" : 23166, "state" : "TN" } +{ "_id" : "37046", "city" : "COLLEGE GROVE", "loc" : [ -86.749516, 35.783166 ], "pop" : 4321, "state" : "TN" } +{ "_id" : "37047", "city" : "CORNERSVILLE", "loc" : [ -86.82862, 35.34088 ], "pop" : 1631, "state" : "TN" } +{ "_id" : "37048", "city" : "COTTONTOWN", "loc" : [ -86.60333799999999, 36.491231 ], "pop" : 4724, "state" : "TN" } +{ "_id" : "37049", "city" : "CROSS PLAINS", "loc" : [ -86.67608799999999, 36.553068 ], "pop" : 2269, "state" : "TN" } +{ "_id" : "37050", "city" : "CUMBERLAND CITY", "loc" : [ -87.63494, 36.366924 ], "pop" : 1208, "state" : "TN" } +{ "_id" : "37051", "city" : "CUMBERLAND FURNA", "loc" : [ -87.40658500000001, 36.316146 ], "pop" : 2288, "state" : "TN" } +{ "_id" : "37052", "city" : "CUNNINGHAM", "loc" : [ -87.42454600000001, 36.378926 ], "pop" : 2163, "state" : "TN" } +{ "_id" : "37055", "city" : "DICKSON", "loc" : [ -87.39953199999999, 36.076014 ], "pop" : 17724, "state" : "TN" } +{ "_id" : "37057", "city" : "DIXON SPRINGS", "loc" : [ -86.05334999999999, 36.445538 ], "pop" : 1269, "state" : "TN" } +{ "_id" : "37058", "city" : "DOVER", "loc" : [ -87.83833300000001, 36.507521 ], "pop" : 5972, "state" : "TN" } +{ "_id" : "37059", "city" : "DOWELLTOWN", "loc" : [ -85.90553300000001, 35.972485 ], "pop" : 1416, "state" : "TN" } +{ "_id" : "37060", "city" : "EAGLEVILLE", "loc" : [ -86.63265199999999, 35.749243 ], "pop" : 1562, "state" : "TN" } +{ "_id" : "37061", "city" : "ERIN", "loc" : [ -87.67896399999999, 36.306684 ], "pop" : 4804, "state" : "TN" } +{ "_id" : "37062", "city" : "FAIRVIEW", "loc" : [ -87.132065, 35.975528 ], "pop" : 7203, "state" : "TN" } +{ "_id" : "37064", "city" : "FRANKLIN", "loc" : [ -86.878833, 35.932782 ], "pop" : 40509, "state" : "TN" } +{ "_id" : "37066", "city" : "GALLATIN", "loc" : [ -86.45116, 36.383438 ], "pop" : 27321, "state" : "TN" } +{ "_id" : "37072", "city" : "GOODLETTSVILLE", "loc" : [ -86.721215, 36.341677 ], "pop" : 20825, "state" : "TN" } +{ "_id" : "37073", "city" : "GREENBRIER", "loc" : [ -86.79135599999999, 36.422914 ], "pop" : 8597, "state" : "TN" } +{ "_id" : "37074", "city" : "HARTSVILLE", "loc" : [ -86.17040799999999, 36.394728 ], "pop" : 5511, "state" : "TN" } +{ "_id" : "37075", "city" : "HENDERSONVILLE", "loc" : [ -86.607157, 36.305425 ], "pop" : 38730, "state" : "TN" } +{ "_id" : "37076", "city" : "HERMITAGE", "loc" : [ -86.600162, 36.184814 ], "pop" : 23765, "state" : "TN" } +{ "_id" : "37078", "city" : "HURRICANE MILLS", "loc" : [ -87.767129, 35.974859 ], "pop" : 2200, "state" : "TN" } +{ "_id" : "37079", "city" : "INDIAN MOUND", "loc" : [ -87.680368, 36.494593 ], "pop" : 1615, "state" : "TN" } +{ "_id" : "37080", "city" : "JOELTON", "loc" : [ -86.91630600000001, 36.328974 ], "pop" : 6749, "state" : "TN" } +{ "_id" : "37082", "city" : "KINGSTON SPRINGS", "loc" : [ -87.115646, 36.095324 ], "pop" : 4037, "state" : "TN" } +{ "_id" : "37083", "city" : "LAFAYETTE", "loc" : [ -86.02421699999999, 36.538955 ], "pop" : 8686, "state" : "TN" } +{ "_id" : "37085", "city" : "LASCASSAS", "loc" : [ -86.31119200000001, 35.949535 ], "pop" : 2463, "state" : "TN" } +{ "_id" : "37086", "city" : "LA VERGNE", "loc" : [ -86.559969, 36.012714 ], "pop" : 6115, "state" : "TN" } +{ "_id" : "37087", "city" : "LEBANON", "loc" : [ -86.302367, 36.209792 ], "pop" : 33656, "state" : "TN" } +{ "_id" : "37091", "city" : "LEWISBURG", "loc" : [ -86.781204, 35.459615 ], "pop" : 16217, "state" : "TN" } +{ "_id" : "37095", "city" : "GASSAWAY", "loc" : [ -85.98544800000001, 35.974593 ], "pop" : 2236, "state" : "TN" } +{ "_id" : "37096", "city" : "FLATWOODS", "loc" : [ -87.865582, 35.599784 ], "pop" : 4172, "state" : "TN" } +{ "_id" : "37097", "city" : "LOBELVILLE", "loc" : [ -87.82510600000001, 35.746659 ], "pop" : 2357, "state" : "TN" } +{ "_id" : "37098", "city" : "WRIGLEY", "loc" : [ -87.317199, 35.892216 ], "pop" : 3257, "state" : "TN" } +{ "_id" : "37101", "city" : "MC EWEN", "loc" : [ -87.64221000000001, 36.118477 ], "pop" : 3963, "state" : "TN" } +{ "_id" : "37110", "city" : "PLAZA", "loc" : [ -85.79160899999999, 35.697358 ], "pop" : 25113, "state" : "TN" } +{ "_id" : "37115", "city" : "MADISON", "loc" : [ -86.70455699999999, 36.260386 ], "pop" : 31511, "state" : "TN" } +{ "_id" : "37118", "city" : "MILTON", "loc" : [ -86.182377, 35.922085 ], "pop" : 894, "state" : "TN" } +{ "_id" : "37122", "city" : "MOUNT JULIET", "loc" : [ -86.50234399999999, 36.189684 ], "pop" : 24498, "state" : "TN" } +{ "_id" : "37129", "city" : "MURFREESBORO", "loc" : [ -86.41809000000001, 35.871019 ], "pop" : 26477, "state" : "TN" } +{ "_id" : "37130", "city" : "MURFREESBORO", "loc" : [ -86.36467500000001, 35.847792 ], "pop" : 35559, "state" : "TN" } +{ "_id" : "37134", "city" : "NEW JOHNSONVILLE", "loc" : [ -87.95469300000001, 36.008775 ], "pop" : 2812, "state" : "TN" } +{ "_id" : "37135", "city" : "NOLENSVILLE", "loc" : [ -86.682868, 35.930723 ], "pop" : 3813, "state" : "TN" } +{ "_id" : "37137", "city" : "NUNNELLY", "loc" : [ -87.50666099999999, 35.87627 ], "pop" : 2176, "state" : "TN" } +{ "_id" : "37138", "city" : "OLD HICKORY", "loc" : [ -86.611704, 36.241564 ], "pop" : 17329, "state" : "TN" } +{ "_id" : "37140", "city" : "ONLY", "loc" : [ -87.665451, 35.867888 ], "pop" : 199, "state" : "TN" } +{ "_id" : "37141", "city" : "ORLINDA", "loc" : [ -86.69900199999999, 36.611045 ], "pop" : 614, "state" : "TN" } +{ "_id" : "37142", "city" : "PALMYRA", "loc" : [ -87.491359, 36.417568 ], "pop" : 1118, "state" : "TN" } +{ "_id" : "37143", "city" : "PEGRAM", "loc" : [ -87.03161299999999, 36.11291 ], "pop" : 2742, "state" : "TN" } +{ "_id" : "37144", "city" : "PETERSBURG", "loc" : [ -86.644728, 35.292416 ], "pop" : 3214, "state" : "TN" } +{ "_id" : "37145", "city" : "PLEASANT SHADE", "loc" : [ -85.908057, 36.348924 ], "pop" : 1901, "state" : "TN" } +{ "_id" : "37146", "city" : "PLEASANT VIEW", "loc" : [ -87.03948, 36.378281 ], "pop" : 2424, "state" : "TN" } +{ "_id" : "37147", "city" : "PLEASANTVILLE", "loc" : [ -87.65366400000001, 35.668373 ], "pop" : 534, "state" : "TN" } +{ "_id" : "37148", "city" : "PORTLAND", "loc" : [ -86.505923, 36.567306 ], "pop" : 12790, "state" : "TN" } +{ "_id" : "37149", "city" : "READYVILLE", "loc" : [ -86.241483, 35.798878 ], "pop" : 4572, "state" : "TN" } +{ "_id" : "37150", "city" : "RED BOILING SPRI", "loc" : [ -85.846333, 36.531283 ], "pop" : 4862, "state" : "TN" } +{ "_id" : "37151", "city" : "RIDDLETON", "loc" : [ -86.03348200000001, 36.350581 ], "pop" : 572, "state" : "TN" } +{ "_id" : "37153", "city" : "ROCKVALE", "loc" : [ -86.535196, 35.74503 ], "pop" : 1776, "state" : "TN" } +{ "_id" : "37160", "city" : "ROYAL", "loc" : [ -86.463425, 35.488313 ], "pop" : 22781, "state" : "TN" } +{ "_id" : "37166", "city" : "SMITHVILLE", "loc" : [ -85.804562, 35.929907 ], "pop" : 10587, "state" : "TN" } +{ "_id" : "37167", "city" : "SMYRNA", "loc" : [ -86.504818, 35.965611 ], "pop" : 23049, "state" : "TN" } +{ "_id" : "37171", "city" : "SOUTHSIDE", "loc" : [ -87.30608700000001, 36.362588 ], "pop" : 951, "state" : "TN" } +{ "_id" : "37172", "city" : "SPRINGFIELD", "loc" : [ -86.876901, 36.50182 ], "pop" : 21214, "state" : "TN" } +{ "_id" : "37174", "city" : "SPRING HILL", "loc" : [ -86.90480700000001, 35.717294 ], "pop" : 2891, "state" : "TN" } +{ "_id" : "37175", "city" : "STEWART", "loc" : [ -87.872495, 36.324055 ], "pop" : 897, "state" : "TN" } +{ "_id" : "37178", "city" : "TENNESSEE RIDGE", "loc" : [ -87.780761, 36.329712 ], "pop" : 1558, "state" : "TN" } +{ "_id" : "37179", "city" : "THOMPSONS STATIO", "loc" : [ -87.004875, 35.831006 ], "pop" : 3945, "state" : "TN" } +{ "_id" : "37180", "city" : "UNIONVILLE", "loc" : [ -86.563852, 35.622416 ], "pop" : 1772, "state" : "TN" } +{ "_id" : "37181", "city" : "VANLEER", "loc" : [ -87.45653, 36.223738 ], "pop" : 1531, "state" : "TN" } +{ "_id" : "37183", "city" : "WARTRACE", "loc" : [ -86.327736, 35.512299 ], "pop" : 2119, "state" : "TN" } +{ "_id" : "37184", "city" : "WATERTOWN", "loc" : [ -86.143411, 36.095268 ], "pop" : 3640, "state" : "TN" } +{ "_id" : "37185", "city" : "WAVERLY", "loc" : [ -87.799108, 36.099664 ], "pop" : 6820, "state" : "TN" } +{ "_id" : "37186", "city" : "WESTMORELAND", "loc" : [ -86.23529600000001, 36.575554 ], "pop" : 6695, "state" : "TN" } +{ "_id" : "37187", "city" : "WHITE BLUFF", "loc" : [ -87.21901, 36.12531 ], "pop" : 5230, "state" : "TN" } +{ "_id" : "37188", "city" : "WHITE HOUSE", "loc" : [ -86.670524, 36.460048 ], "pop" : 6240, "state" : "TN" } +{ "_id" : "37189", "city" : "WHITES CREEK", "loc" : [ -86.82922000000001, 36.274377 ], "pop" : 4189, "state" : "TN" } +{ "_id" : "37190", "city" : "WOODBURY", "loc" : [ -86.050044, 35.814254 ], "pop" : 6141, "state" : "TN" } +{ "_id" : "37191", "city" : "WOODLAWN", "loc" : [ -87.539331, 36.514695 ], "pop" : 2568, "state" : "TN" } +{ "_id" : "37201", "city" : "NASHVILLE", "loc" : [ -86.778441, 36.167028 ], "pop" : 1579, "state" : "TN" } +{ "_id" : "37203", "city" : "NASHVILLE", "loc" : [ -86.79392199999999, 36.146802 ], "pop" : 13524, "state" : "TN" } +{ "_id" : "37204", "city" : "MELROSE", "loc" : [ -86.781808, 36.114628 ], "pop" : 12448, "state" : "TN" } +{ "_id" : "37205", "city" : "NASHVILLE", "loc" : [ -86.868954, 36.111432 ], "pop" : 23323, "state" : "TN" } +{ "_id" : "37206", "city" : "NASHVILLE", "loc" : [ -86.741106, 36.179813 ], "pop" : 28446, "state" : "TN" } +{ "_id" : "37207", "city" : "NASHVILLE", "loc" : [ -86.77400799999999, 36.2195 ], "pop" : 35260, "state" : "TN" } +{ "_id" : "37208", "city" : "NASHVILLE", "loc" : [ -86.807563, 36.176196 ], "pop" : 15535, "state" : "TN" } +{ "_id" : "37209", "city" : "NASHVILLE", "loc" : [ -86.860212, 36.154592 ], "pop" : 33560, "state" : "TN" } +{ "_id" : "37210", "city" : "NASHVILLE", "loc" : [ -86.74104199999999, 36.137904 ], "pop" : 17173, "state" : "TN" } +{ "_id" : "37211", "city" : "NASHVILLE", "loc" : [ -86.72403799999999, 36.072486 ], "pop" : 51478, "state" : "TN" } +{ "_id" : "37212", "city" : "NASHVILLE", "loc" : [ -86.800555, 36.133681 ], "pop" : 16492, "state" : "TN" } +{ "_id" : "37213", "city" : "NASHVILLE", "loc" : [ -86.76055599999999, 36.165512 ], "pop" : 356, "state" : "TN" } +{ "_id" : "37214", "city" : "NASHVILLE", "loc" : [ -86.660854, 36.163339 ], "pop" : 24935, "state" : "TN" } +{ "_id" : "37215", "city" : "NASHVILLE", "loc" : [ -86.821917, 36.098584 ], "pop" : 20452, "state" : "TN" } +{ "_id" : "37216", "city" : "NASHVILLE", "loc" : [ -86.72568699999999, 36.212491 ], "pop" : 20045, "state" : "TN" } +{ "_id" : "37217", "city" : "NASHVILLE", "loc" : [ -86.666585, 36.10585 ], "pop" : 26242, "state" : "TN" } +{ "_id" : "37218", "city" : "NASHVILLE", "loc" : [ -86.845583, 36.207062 ], "pop" : 14312, "state" : "TN" } +{ "_id" : "37219", "city" : "NASHVILLE", "loc" : [ -86.783676, 36.167768 ], "pop" : 268, "state" : "TN" } +{ "_id" : "37220", "city" : "NASHVILLE", "loc" : [ -86.769654, 36.064139 ], "pop" : 6230, "state" : "TN" } +{ "_id" : "37221", "city" : "BELLEVUE", "loc" : [ -86.943674, 36.071512 ], "pop" : 21880, "state" : "TN" } +{ "_id" : "37228", "city" : "NASHVILLE", "loc" : [ -86.80526399999999, 36.190145 ], "pop" : 612, "state" : "TN" } +{ "_id" : "37301", "city" : "ALTAMONT", "loc" : [ -85.763508, 35.425776 ], "pop" : 988, "state" : "TN" } +{ "_id" : "37302", "city" : "APISON", "loc" : [ -85.01640399999999, 35.014926 ], "pop" : 1614, "state" : "TN" } +{ "_id" : "37303", "city" : "ATHENS", "loc" : [ -84.60426099999999, 35.457389 ], "pop" : 21571, "state" : "TN" } +{ "_id" : "37305", "city" : "BEERSHEBA SPRING", "loc" : [ -85.68212800000001, 35.470371 ], "pop" : 1067, "state" : "TN" } +{ "_id" : "37306", "city" : "BELVIDERE", "loc" : [ -86.172827, 35.141499 ], "pop" : 4670, "state" : "TN" } +{ "_id" : "37307", "city" : "BENTON", "loc" : [ -84.654433, 35.172953 ], "pop" : 3164, "state" : "TN" } +{ "_id" : "37308", "city" : "BIRCHWOOD", "loc" : [ -84.96183499999999, 35.351968 ], "pop" : 2732, "state" : "TN" } +{ "_id" : "37309", "city" : "CALHOUN", "loc" : [ -84.738105, 35.374614 ], "pop" : 3597, "state" : "TN" } +{ "_id" : "37310", "city" : "CHARLESTON", "loc" : [ -84.766639, 35.255644 ], "pop" : 1921, "state" : "TN" } +{ "_id" : "37311", "city" : "CLEVELAND", "loc" : [ -84.875006, 35.131257 ], "pop" : 40633, "state" : "TN" } +{ "_id" : "37312", "city" : "CLEVELAND", "loc" : [ -84.84755699999999, 35.202309 ], "pop" : 28081, "state" : "TN" } +{ "_id" : "37313", "city" : "COALMONT", "loc" : [ -85.655097, 35.386197 ], "pop" : 786, "state" : "TN" } +{ "_id" : "37317", "city" : "POSTELLE", "loc" : [ -84.38396400000001, 35.024987 ], "pop" : 3155, "state" : "TN" } +{ "_id" : "37318", "city" : "COWAN", "loc" : [ -86.019007, 35.170121 ], "pop" : 2713, "state" : "TN" } +{ "_id" : "37321", "city" : "DAYTON", "loc" : [ -85.01345499999999, 35.500186 ], "pop" : 15965, "state" : "TN" } +{ "_id" : "37322", "city" : "DECATUR", "loc" : [ -84.80805100000001, 35.507166 ], "pop" : 3718, "state" : "TN" } +{ "_id" : "37324", "city" : "DECHERD", "loc" : [ -86.058859, 35.232598 ], "pop" : 6576, "state" : "TN" } +{ "_id" : "37325", "city" : "DELANO", "loc" : [ -84.602366, 35.261234 ], "pop" : 1830, "state" : "TN" } +{ "_id" : "37327", "city" : "DUNLAP", "loc" : [ -85.39251299999999, 35.384175 ], "pop" : 6883, "state" : "TN" } +{ "_id" : "37328", "city" : "ELORA", "loc" : [ -86.34811000000001, 35.029496 ], "pop" : 1257, "state" : "TN" } +{ "_id" : "37329", "city" : "ENGLEWOOD", "loc" : [ -84.483265, 35.427245 ], "pop" : 3419, "state" : "TN" } +{ "_id" : "37330", "city" : "ESTILL SPRINGS", "loc" : [ -86.139561, 35.270508 ], "pop" : 5778, "state" : "TN" } +{ "_id" : "37331", "city" : "ETOWAH", "loc" : [ -84.528305, 35.331443 ], "pop" : 8246, "state" : "TN" } +{ "_id" : "37332", "city" : "EVENSVILLE", "loc" : [ -85.022773, 35.615346 ], "pop" : 99, "state" : "TN" } +{ "_id" : "37333", "city" : "FARNER", "loc" : [ -84.320904, 35.144894 ], "pop" : 672, "state" : "TN" } +{ "_id" : "37334", "city" : "FAYETTEVILLE", "loc" : [ -86.56644799999999, 35.152678 ], "pop" : 11009, "state" : "TN" } +{ "_id" : "37335", "city" : "FLINTVILLE", "loc" : [ -86.497974, 35.042782 ], "pop" : 6020, "state" : "TN" } +{ "_id" : "37336", "city" : "GEORGETOWN", "loc" : [ -84.912684, 35.293241 ], "pop" : 3768, "state" : "TN" } +{ "_id" : "37337", "city" : "GRANDVIEW", "loc" : [ -84.861464, 35.760843 ], "pop" : 626, "state" : "TN" } +{ "_id" : "37338", "city" : "GRAYSVILLE", "loc" : [ -85.17904, 35.44842 ], "pop" : 1067, "state" : "TN" } +{ "_id" : "37339", "city" : "GRUETLI LAAGER", "loc" : [ -85.66977300000001, 35.363464 ], "pop" : 1929, "state" : "TN" } +{ "_id" : "37340", "city" : "GUILD", "loc" : [ -85.511568, 35.017834 ], "pop" : 1183, "state" : "TN" } +{ "_id" : "37341", "city" : "HARRISON", "loc" : [ -85.094532, 35.167898 ], "pop" : 10247, "state" : "TN" } +{ "_id" : "37342", "city" : "HILLSBORO", "loc" : [ -85.97242199999999, 35.369933 ], "pop" : 2075, "state" : "TN" } +{ "_id" : "37343", "city" : "HIXSON", "loc" : [ -85.218215, 35.159112 ], "pop" : 35100, "state" : "TN" } +{ "_id" : "37345", "city" : "HUNTLAND", "loc" : [ -86.269435, 35.051198 ], "pop" : 2016, "state" : "TN" } +{ "_id" : "37347", "city" : "KIMBALL", "loc" : [ -85.61473700000001, 35.066603 ], "pop" : 7076, "state" : "TN" } +{ "_id" : "37348", "city" : "KELSO", "loc" : [ -86.468343, 35.102356 ], "pop" : 759, "state" : "TN" } +{ "_id" : "37350", "city" : "LOOKOUT MOUNTAIN", "loc" : [ -85.35056400000001, 34.994825 ], "pop" : 1899, "state" : "TN" } +{ "_id" : "37352", "city" : "LYNCHBURG", "loc" : [ -86.37201899999999, 35.270642 ], "pop" : 2888, "state" : "TN" } +{ "_id" : "37353", "city" : "MC DONALD", "loc" : [ -84.989198, 35.086902 ], "pop" : 819, "state" : "TN" } +{ "_id" : "37354", "city" : "HIWASSEE COLLEGE", "loc" : [ -84.351899, 35.500917 ], "pop" : 10509, "state" : "TN" } +{ "_id" : "37355", "city" : "MANCHESTER", "loc" : [ -86.081568, 35.495846 ], "pop" : 19173, "state" : "TN" } +{ "_id" : "37356", "city" : "MONTEAGLE", "loc" : [ -85.822795, 35.240172 ], "pop" : 2206, "state" : "TN" } +{ "_id" : "37357", "city" : "MORRISON", "loc" : [ -85.889895, 35.60002 ], "pop" : 5654, "state" : "TN" } +{ "_id" : "37359", "city" : "MULBERRY", "loc" : [ -86.421685, 35.19413 ], "pop" : 495, "state" : "TN" } +{ "_id" : "37360", "city" : "NORMANDY", "loc" : [ -86.255712, 35.429628 ], "pop" : 1308, "state" : "TN" } +{ "_id" : "37361", "city" : "OCOEE", "loc" : [ -84.713565, 35.102473 ], "pop" : 1206, "state" : "TN" } +{ "_id" : "37362", "city" : "OLDFORT", "loc" : [ -84.72187700000001, 35.03654 ], "pop" : 1522, "state" : "TN" } +{ "_id" : "37363", "city" : "OOLTEWAH", "loc" : [ -85.063495, 35.078104 ], "pop" : 17419, "state" : "TN" } +{ "_id" : "37365", "city" : "PALMER", "loc" : [ -85.564272, 35.374062 ], "pop" : 1685, "state" : "TN" } +{ "_id" : "37366", "city" : "PELHAM", "loc" : [ -85.84408000000001, 35.314045 ], "pop" : 671, "state" : "TN" } +{ "_id" : "37367", "city" : "PIKEVILLE", "loc" : [ -85.20765299999999, 35.640769 ], "pop" : 7869, "state" : "TN" } +{ "_id" : "37369", "city" : "RELIANCE", "loc" : [ -84.54103000000001, 35.180664 ], "pop" : 1777, "state" : "TN" } +{ "_id" : "37370", "city" : "RICEVILLE", "loc" : [ -84.646247, 35.344615 ], "pop" : 2785, "state" : "TN" } +{ "_id" : "37373", "city" : "SALE CREEK", "loc" : [ -85.102323, 35.385806 ], "pop" : 2464, "state" : "TN" } +{ "_id" : "37374", "city" : "SEQUATCHIE", "loc" : [ -85.637084, 35.163396 ], "pop" : 1463, "state" : "TN" } +{ "_id" : "37375", "city" : "SEWANEE", "loc" : [ -85.91258999999999, 35.201101 ], "pop" : 2785, "state" : "TN" } +{ "_id" : "37376", "city" : "SHERWOOD", "loc" : [ -85.923841, 35.099164 ], "pop" : 885, "state" : "TN" } +{ "_id" : "37377", "city" : "SIGNAL MOUNTAIN", "loc" : [ -85.336243, 35.149424 ], "pop" : 14032, "state" : "TN" } +{ "_id" : "37379", "city" : "SODDY DAISY", "loc" : [ -85.163009, 35.252686 ], "pop" : 19646, "state" : "TN" } +{ "_id" : "37380", "city" : "SOUTH PITTSBURG", "loc" : [ -85.722498, 35.028046 ], "pop" : 6151, "state" : "TN" } +{ "_id" : "37381", "city" : "SPRING CITY", "loc" : [ -84.84196799999999, 35.682072 ], "pop" : 7787, "state" : "TN" } +{ "_id" : "37385", "city" : "TELLICO PLAINS", "loc" : [ -84.306785, 35.356237 ], "pop" : 6459, "state" : "TN" } +{ "_id" : "37387", "city" : "TRACY CITY", "loc" : [ -85.736187, 35.272081 ], "pop" : 3980, "state" : "TN" } +{ "_id" : "37388", "city" : "DICKEL", "loc" : [ -86.22069, 35.35841 ], "pop" : 22193, "state" : "TN" } +{ "_id" : "37391", "city" : "TURTLETOWN", "loc" : [ -84.354381, 35.108089 ], "pop" : 910, "state" : "TN" } +{ "_id" : "37396", "city" : "WHITESIDE", "loc" : [ -85.398499, 35.066289 ], "pop" : 192, "state" : "TN" } +{ "_id" : "37397", "city" : "WHITWELL", "loc" : [ -85.50111200000001, 35.197228 ], "pop" : 9051, "state" : "TN" } +{ "_id" : "37398", "city" : "WINCHESTER", "loc" : [ -86.113038, 35.186398 ], "pop" : 5753, "state" : "TN" } +{ "_id" : "37402", "city" : "CHATTANOOGA", "loc" : [ -85.316126, 35.046288 ], "pop" : 3455, "state" : "TN" } +{ "_id" : "37403", "city" : "CHATTANOOGA", "loc" : [ -85.296516, 35.045045 ], "pop" : 3700, "state" : "TN" } +{ "_id" : "37404", "city" : "CHATTANOOGA", "loc" : [ -85.272229, 35.030634 ], "pop" : 15345, "state" : "TN" } +{ "_id" : "37405", "city" : "CHATTANOOGA", "loc" : [ -85.308224, 35.076801 ], "pop" : 12005, "state" : "TN" } +{ "_id" : "37406", "city" : "CHATTANOOGA", "loc" : [ -85.247839, 35.061446 ], "pop" : 15684, "state" : "TN" } +{ "_id" : "37407", "city" : "CHATTANOOGA", "loc" : [ -85.284913, 35.002361 ], "pop" : 8138, "state" : "TN" } +{ "_id" : "37408", "city" : "CHATTANOOGA", "loc" : [ -85.306809, 35.029236 ], "pop" : 2131, "state" : "TN" } +{ "_id" : "37409", "city" : "CHATTANOOGA", "loc" : [ -85.33101600000001, 34.99809 ], "pop" : 2848, "state" : "TN" } +{ "_id" : "37410", "city" : "CHATTANOOGA", "loc" : [ -85.313762, 35.001787 ], "pop" : 6068, "state" : "TN" } +{ "_id" : "37411", "city" : "CHATTANOOGA", "loc" : [ -85.23558300000001, 35.02706 ], "pop" : 18421, "state" : "TN" } +{ "_id" : "37412", "city" : "EAST RIDGE", "loc" : [ -85.23795699999999, 34.996726 ], "pop" : 20711, "state" : "TN" } +{ "_id" : "37415", "city" : "RED BANK", "loc" : [ -85.28633000000001, 35.117668 ], "pop" : 21549, "state" : "TN" } +{ "_id" : "37416", "city" : "CHATTANOOGA", "loc" : [ -85.175656, 35.094246 ], "pop" : 14197, "state" : "TN" } +{ "_id" : "37419", "city" : "CHATTANOOGA", "loc" : [ -85.36869799999999, 35.033092 ], "pop" : 5253, "state" : "TN" } +{ "_id" : "37421", "city" : "CHATTANOOGA", "loc" : [ -85.14594, 35.024986 ], "pop" : 32802, "state" : "TN" } +{ "_id" : "37601", "city" : "JOHNSON CITY", "loc" : [ -82.34077499999999, 36.333872 ], "pop" : 27978, "state" : "TN" } +{ "_id" : "37604", "city" : "JOHNSON CITY", "loc" : [ -82.38104199999999, 36.310744 ], "pop" : 31353, "state" : "TN" } +{ "_id" : "37615", "city" : "GRAY", "loc" : [ -82.44712800000001, 36.41006 ], "pop" : 12119, "state" : "TN" } +{ "_id" : "37616", "city" : "AFTON", "loc" : [ -82.746667, 36.204166 ], "pop" : 3469, "state" : "TN" } +{ "_id" : "37617", "city" : "BLOUNTVILLE", "loc" : [ -82.36555799999999, 36.53562 ], "pop" : 14517, "state" : "TN" } +{ "_id" : "37618", "city" : "BLUFF CITY", "loc" : [ -82.236181, 36.477391 ], "pop" : 11146, "state" : "TN" } +{ "_id" : "37620", "city" : "BRISTOL", "loc" : [ -82.181864, 36.568643 ], "pop" : 36852, "state" : "TN" } +{ "_id" : "37640", "city" : "BUTLER", "loc" : [ -81.985614, 36.328158 ], "pop" : 3479, "state" : "TN" } +{ "_id" : "37641", "city" : "CHUCKEY", "loc" : [ -82.66744799999999, 36.221142 ], "pop" : 6362, "state" : "TN" } +{ "_id" : "37642", "city" : "CHURCH HILL", "loc" : [ -82.725184, 36.539926 ], "pop" : 9106, "state" : "TN" } +{ "_id" : "37643", "city" : "ELIZABETHTON", "loc" : [ -82.201481, 36.344548 ], "pop" : 32046, "state" : "TN" } +{ "_id" : "37645", "city" : "MOUNT CARMEL", "loc" : [ -82.653217, 36.562913 ], "pop" : 6249, "state" : "TN" } +{ "_id" : "37650", "city" : "ERWIN", "loc" : [ -82.41631, 36.134193 ], "pop" : 11635, "state" : "TN" } +{ "_id" : "37656", "city" : "FALL BRANCH", "loc" : [ -82.62560499999999, 36.415839 ], "pop" : 1964, "state" : "TN" } +{ "_id" : "37657", "city" : "FLAG POND", "loc" : [ -82.56230100000001, 36.008507 ], "pop" : 1066, "state" : "TN" } +{ "_id" : "37658", "city" : "HAMPTON", "loc" : [ -82.189144, 36.257743 ], "pop" : 4828, "state" : "TN" } +{ "_id" : "37659", "city" : "JONESBOROUGH", "loc" : [ -82.490225, 36.295426 ], "pop" : 18736, "state" : "TN" } +{ "_id" : "37660", "city" : "BLOOMINGDALE", "loc" : [ -82.554034, 36.552766 ], "pop" : 37726, "state" : "TN" } +{ "_id" : "37663", "city" : "COLONIAL HEIGHTS", "loc" : [ -82.4948, 36.4693 ], "pop" : 12097, "state" : "TN" } +{ "_id" : "37664", "city" : "KINGSPORT", "loc" : [ -82.516835, 36.520834 ], "pop" : 22289, "state" : "TN" } +{ "_id" : "37665", "city" : "LYNN GARDEN", "loc" : [ -82.569906, 36.578305 ], "pop" : 6024, "state" : "TN" } +{ "_id" : "37680", "city" : "LAUREL BLOOMERY", "loc" : [ -81.725537, 36.574946 ], "pop" : 670, "state" : "TN" } +{ "_id" : "37681", "city" : "WASHINGTON COLLE", "loc" : [ -82.61709, 36.236968 ], "pop" : 4354, "state" : "TN" } +{ "_id" : "37683", "city" : "MOUNTAIN CITY", "loc" : [ -81.813999, 36.465724 ], "pop" : 9205, "state" : "TN" } +{ "_id" : "37686", "city" : "PINEY FLATS", "loc" : [ -82.333957, 36.446122 ], "pop" : 5130, "state" : "TN" } +{ "_id" : "37687", "city" : "ROAN MOUNTAIN", "loc" : [ -82.081041, 36.177333 ], "pop" : 4234, "state" : "TN" } +{ "_id" : "37688", "city" : "SHADY VALLEY", "loc" : [ -81.906797, 36.527218 ], "pop" : 1053, "state" : "TN" } +{ "_id" : "37690", "city" : "TELFORD", "loc" : [ -82.536935, 36.245053 ], "pop" : 2662, "state" : "TN" } +{ "_id" : "37691", "city" : "TRADE", "loc" : [ -81.757234, 36.368328 ], "pop" : 763, "state" : "TN" } +{ "_id" : "37692", "city" : "UNICOI", "loc" : [ -82.321957, 36.206585 ], "pop" : 3838, "state" : "TN" } +{ "_id" : "37694", "city" : "WATAUGA", "loc" : [ -82.26826199999999, 36.370157 ], "pop" : 2033, "state" : "TN" } +{ "_id" : "37701", "city" : "ALCOA", "loc" : [ -83.980895, 35.78522 ], "pop" : 5891, "state" : "TN" } +{ "_id" : "37705", "city" : "ANDERSONVILLE", "loc" : [ -84.054399, 36.191514 ], "pop" : 5761, "state" : "TN" } +{ "_id" : "37708", "city" : "BEAN STATION", "loc" : [ -83.31424800000001, 36.32493 ], "pop" : 5255, "state" : "TN" } +{ "_id" : "37709", "city" : "BLAINE", "loc" : [ -83.67827200000001, 36.15832 ], "pop" : 2556, "state" : "TN" } +{ "_id" : "37710", "city" : "DEVONIA", "loc" : [ -84.215968, 36.185426 ], "pop" : 2225, "state" : "TN" } +{ "_id" : "37711", "city" : "BULLS GAP", "loc" : [ -83.03149000000001, 36.325707 ], "pop" : 5876, "state" : "TN" } +{ "_id" : "37713", "city" : "BYBEE", "loc" : [ -83.163071, 36.073957 ], "pop" : 2911, "state" : "TN" } +{ "_id" : "37714", "city" : "CARYVILLE", "loc" : [ -84.18979400000001, 36.285422 ], "pop" : 3811, "state" : "TN" } +{ "_id" : "37715", "city" : "CLAIRFIELD", "loc" : [ -83.93969300000001, 36.565026 ], "pop" : 1239, "state" : "TN" } +{ "_id" : "37716", "city" : "CLINTON", "loc" : [ -84.189735, 36.08688 ], "pop" : 21075, "state" : "TN" } +{ "_id" : "37721", "city" : "CORRYTON", "loc" : [ -83.813, 36.120011 ], "pop" : 7557, "state" : "TN" } +{ "_id" : "37722", "city" : "COSBY", "loc" : [ -83.218743, 35.834693 ], "pop" : 3800, "state" : "TN" } +{ "_id" : "37723", "city" : "CRAB ORCHARD", "loc" : [ -84.858577, 35.889763 ], "pop" : 2307, "state" : "TN" } +{ "_id" : "37724", "city" : "CUMBERLAND GAP", "loc" : [ -83.681049, 36.550381 ], "pop" : 3142, "state" : "TN" } +{ "_id" : "37725", "city" : "DANDRIDGE", "loc" : [ -83.40443500000001, 36.001798 ], "pop" : 8707, "state" : "TN" } +{ "_id" : "37726", "city" : "DEER LODGE", "loc" : [ -84.819074, 36.217584 ], "pop" : 538, "state" : "TN" } +{ "_id" : "37727", "city" : "DEL RIO", "loc" : [ -83.01500799999999, 35.882967 ], "pop" : 1616, "state" : "TN" } +{ "_id" : "37729", "city" : "DUFF", "loc" : [ -84.01246999999999, 36.411035 ], "pop" : 4265, "state" : "TN" } +{ "_id" : "37731", "city" : "EIDSON", "loc" : [ -83.08271999999999, 36.499522 ], "pop" : 901, "state" : "TN" } +{ "_id" : "37737", "city" : "FRIENDSVILLE", "loc" : [ -84.10606900000001, 35.752302 ], "pop" : 4186, "state" : "TN" } +{ "_id" : "37738", "city" : "GATLINBURG", "loc" : [ -83.48740599999999, 35.728976 ], "pop" : 4352, "state" : "TN" } +{ "_id" : "37742", "city" : "GREENBACK", "loc" : [ -84.170959, 35.656738 ], "pop" : 3272, "state" : "TN" } +{ "_id" : "37743", "city" : "BAILEYTON", "loc" : [ -82.833136, 36.160807 ], "pop" : 39225, "state" : "TN" } +{ "_id" : "37748", "city" : "HARRIMAN", "loc" : [ -84.51552599999999, 35.934785 ], "pop" : 18558, "state" : "TN" } +{ "_id" : "37752", "city" : "HARROGATE", "loc" : [ -83.60726200000001, 36.576718 ], "pop" : 4683, "state" : "TN" } +{ "_id" : "37753", "city" : "HARTFORD", "loc" : [ -83.099642, 35.825597 ], "pop" : 733, "state" : "TN" } +{ "_id" : "37754", "city" : "HEISKELL", "loc" : [ -84.043826, 36.115027 ], "pop" : 2945, "state" : "TN" } +{ "_id" : "37755", "city" : "HELENWOOD", "loc" : [ -84.538088, 36.43294 ], "pop" : 2583, "state" : "TN" } +{ "_id" : "37756", "city" : "HUNTSVILLE", "loc" : [ -84.428832, 36.398329 ], "pop" : 4760, "state" : "TN" } +{ "_id" : "37757", "city" : "JACKSBORO", "loc" : [ -84.192835, 36.326615 ], "pop" : 4967, "state" : "TN" } +{ "_id" : "37760", "city" : "JEFFERSON CITY", "loc" : [ -83.480982, 36.11633 ], "pop" : 9438, "state" : "TN" } +{ "_id" : "37762", "city" : "JELLICO", "loc" : [ -84.118067, 36.554407 ], "pop" : 6317, "state" : "TN" } +{ "_id" : "37763", "city" : "KINGSTON", "loc" : [ -84.49705400000001, 35.852807 ], "pop" : 11002, "state" : "TN" } +{ "_id" : "37764", "city" : "KODAK", "loc" : [ -83.61711099999999, 35.972215 ], "pop" : 4104, "state" : "TN" } +{ "_id" : "37765", "city" : "KYLES FORD", "loc" : [ -83.050712, 36.572072 ], "pop" : 931, "state" : "TN" } +{ "_id" : "37766", "city" : "MORLEY", "loc" : [ -84.11156800000001, 36.368967 ], "pop" : 14939, "state" : "TN" } +{ "_id" : "37769", "city" : "LAKE CITY", "loc" : [ -84.13856699999999, 36.203223 ], "pop" : 6099, "state" : "TN" } +{ "_id" : "37770", "city" : "LANCING", "loc" : [ -84.71351900000001, 36.145644 ], "pop" : 2345, "state" : "TN" } +{ "_id" : "37771", "city" : "LENOIR CITY", "loc" : [ -84.26650100000001, 35.810391 ], "pop" : 18523, "state" : "TN" } +{ "_id" : "37774", "city" : "LOUDON", "loc" : [ -84.34362, 35.729211 ], "pop" : 11116, "state" : "TN" } +{ "_id" : "37777", "city" : "LOUISVILLE", "loc" : [ -84.008895, 35.837465 ], "pop" : 9618, "state" : "TN" } +{ "_id" : "37778", "city" : "LOWLAND", "loc" : [ -83.244592, 36.164016 ], "pop" : 166, "state" : "TN" } +{ "_id" : "37779", "city" : "LUTTRELL", "loc" : [ -83.75997599999999, 36.200136 ], "pop" : 3554, "state" : "TN" } +{ "_id" : "37801", "city" : "MARYVILLE", "loc" : [ -83.914541, 35.782449 ], "pop" : 24011, "state" : "TN" } +{ "_id" : "37804", "city" : "MARYVILLE", "loc" : [ -84.004491, 35.715659 ], "pop" : 31758, "state" : "TN" } +{ "_id" : "37806", "city" : "MASCOT", "loc" : [ -83.741101, 36.084421 ], "pop" : 2781, "state" : "TN" } +{ "_id" : "37807", "city" : "MAYNARDVILLE", "loc" : [ -83.840261, 36.234274 ], "pop" : 8998, "state" : "TN" } +{ "_id" : "37809", "city" : "MIDWAY", "loc" : [ -83.02814100000001, 36.150995 ], "pop" : 824, "state" : "TN" } +{ "_id" : "37810", "city" : "MOHAWK", "loc" : [ -83.09018500000001, 36.186919 ], "pop" : 1765, "state" : "TN" } +{ "_id" : "37811", "city" : "MOORESBURG", "loc" : [ -83.20949899999999, 36.362082 ], "pop" : 2628, "state" : "TN" } +{ "_id" : "37813", "city" : "MORRISTOWN", "loc" : [ -83.275519, 36.195672 ], "pop" : 15333, "state" : "TN" } +{ "_id" : "37814", "city" : "MORRISTOWN", "loc" : [ -83.31185000000001, 36.224782 ], "pop" : 26285, "state" : "TN" } +{ "_id" : "37818", "city" : "MOSHEIM", "loc" : [ -82.967399, 36.183883 ], "pop" : 4337, "state" : "TN" } +{ "_id" : "37819", "city" : "NEWCOMB", "loc" : [ -84.17984800000001, 36.542768 ], "pop" : 52, "state" : "TN" } +{ "_id" : "37820", "city" : "NEW MARKET", "loc" : [ -83.56725299999999, 36.081037 ], "pop" : 5751, "state" : "TN" } +{ "_id" : "37821", "city" : "NEWPORT", "loc" : [ -83.202749, 35.954431 ], "pop" : 16780, "state" : "TN" } +{ "_id" : "37825", "city" : "NEW TAZEWELL", "loc" : [ -83.64694900000001, 36.424475 ], "pop" : 5602, "state" : "TN" } +{ "_id" : "37826", "city" : "NIOTA", "loc" : [ -84.57214999999999, 35.581924 ], "pop" : 2182, "state" : "TN" } +{ "_id" : "37829", "city" : "OAKDALE", "loc" : [ -84.575295, 36.009962 ], "pop" : 3901, "state" : "TN" } +{ "_id" : "37830", "city" : "OAK RIDGE", "loc" : [ -84.262297, 36.01588 ], "pop" : 27605, "state" : "TN" } +{ "_id" : "37840", "city" : "OLIVER SPRINGS", "loc" : [ -84.34863199999999, 36.036616 ], "pop" : 1324, "state" : "TN" } +{ "_id" : "37841", "city" : "ONEIDA", "loc" : [ -84.529319, 36.505259 ], "pop" : 7010, "state" : "TN" } +{ "_id" : "37843", "city" : "PARROTTSVILLE", "loc" : [ -83.073627, 35.998297 ], "pop" : 3301, "state" : "TN" } +{ "_id" : "37845", "city" : "PETROS", "loc" : [ -84.439914, 36.055903 ], "pop" : 4330, "state" : "TN" } +{ "_id" : "37846", "city" : "PHILADELPHIA", "loc" : [ -84.450221, 35.664214 ], "pop" : 1523, "state" : "TN" } +{ "_id" : "37847", "city" : "PIONEER", "loc" : [ -84.290672, 36.469465 ], "pop" : 476, "state" : "TN" } +{ "_id" : "37848", "city" : "POWDER SPRINGS", "loc" : [ -83.672921, 36.254899 ], "pop" : 381, "state" : "TN" } +{ "_id" : "37849", "city" : "POWELL", "loc" : [ -84.039987, 36.043454 ], "pop" : 14646, "state" : "TN" } +{ "_id" : "37852", "city" : "ROBBINS", "loc" : [ -84.590417, 36.352693 ], "pop" : 2639, "state" : "TN" } +{ "_id" : "37853", "city" : "ROCKFORD", "loc" : [ -83.941202, 35.830519 ], "pop" : 3347, "state" : "TN" } +{ "_id" : "37854", "city" : "ROCKWOOD", "loc" : [ -84.68418800000001, 35.858677 ], "pop" : 10384, "state" : "TN" } +{ "_id" : "37857", "city" : "ROGERSVILLE", "loc" : [ -83.010786, 36.416196 ], "pop" : 10374, "state" : "TN" } +{ "_id" : "37860", "city" : "RUSSELLVILLE", "loc" : [ -83.19138, 36.256684 ], "pop" : 2329, "state" : "TN" } +{ "_id" : "37861", "city" : "RUTLEDGE", "loc" : [ -83.512468, 36.250078 ], "pop" : 6019, "state" : "TN" } +{ "_id" : "37862", "city" : "SEVIERVILLE", "loc" : [ -83.53862100000001, 35.845192 ], "pop" : 30351, "state" : "TN" } +{ "_id" : "37863", "city" : "PIGEON FORGE", "loc" : [ -83.563821, 35.792222 ], "pop" : 3063, "state" : "TN" } +{ "_id" : "37865", "city" : "SEYMOUR", "loc" : [ -83.749511, 35.869984 ], "pop" : 8527, "state" : "TN" } +{ "_id" : "37866", "city" : "SHARPS CHAPEL", "loc" : [ -83.81268, 36.368498 ], "pop" : 1405, "state" : "TN" } +{ "_id" : "37869", "city" : "SNEEDVILLE", "loc" : [ -83.252892, 36.527515 ], "pop" : 5203, "state" : "TN" } +{ "_id" : "37870", "city" : "SPEEDWELL", "loc" : [ -83.813495, 36.479723 ], "pop" : 2895, "state" : "TN" } +{ "_id" : "37871", "city" : "STRAWBERRY PLAIN", "loc" : [ -83.677724, 36.041462 ], "pop" : 5600, "state" : "TN" } +{ "_id" : "37872", "city" : "SUNBRIGHT", "loc" : [ -84.69842, 36.262234 ], "pop" : 2210, "state" : "TN" } +{ "_id" : "37873", "city" : "SURGOINSVILLE", "loc" : [ -82.830597, 36.474066 ], "pop" : 7229, "state" : "TN" } +{ "_id" : "37874", "city" : "SWEETWATER", "loc" : [ -84.430424, 35.595703 ], "pop" : 11415, "state" : "TN" } +{ "_id" : "37877", "city" : "TALBOTT", "loc" : [ -83.412864, 36.159958 ], "pop" : 6279, "state" : "TN" } +{ "_id" : "37878", "city" : "TALLASSEE", "loc" : [ -84.003338, 35.583663 ], "pop" : 376, "state" : "TN" } +{ "_id" : "37879", "city" : "TAZEWELL", "loc" : [ -83.55521899999999, 36.471012 ], "pop" : 8567, "state" : "TN" } +{ "_id" : "37880", "city" : "TEN MILE", "loc" : [ -84.654848, 35.686175 ], "pop" : 4355, "state" : "TN" } +{ "_id" : "37881", "city" : "THORN HILL", "loc" : [ -83.365973, 36.391687 ], "pop" : 1676, "state" : "TN" } +{ "_id" : "37882", "city" : "TOWNSEND", "loc" : [ -83.75715700000001, 35.678385 ], "pop" : 1951, "state" : "TN" } +{ "_id" : "37883", "city" : "TREADWAY", "loc" : [ -83.219138, 36.428202 ], "pop" : 78, "state" : "TN" } +{ "_id" : "37885", "city" : "VONORE", "loc" : [ -84.177829, 35.535364 ], "pop" : 1541, "state" : "TN" } +{ "_id" : "37886", "city" : "WALLAND", "loc" : [ -83.824307, 35.753311 ], "pop" : 3972, "state" : "TN" } +{ "_id" : "37887", "city" : "WARTBURG", "loc" : [ -84.56518800000001, 36.101609 ], "pop" : 3976, "state" : "TN" } +{ "_id" : "37888", "city" : "WASHBURN", "loc" : [ -83.59368499999999, 36.310649 ], "pop" : 1737, "state" : "TN" } +{ "_id" : "37890", "city" : "BANEBERRY", "loc" : [ -83.287921, 36.090299 ], "pop" : 4639, "state" : "TN" } +{ "_id" : "37891", "city" : "WHITESBURG", "loc" : [ -83.145844, 36.262125 ], "pop" : 2265, "state" : "TN" } +{ "_id" : "37892", "city" : "WINFIELD", "loc" : [ -84.434026, 36.559825 ], "pop" : 1375, "state" : "TN" } +{ "_id" : "37902", "city" : "KNOXVILLE", "loc" : [ -83.92091499999999, 35.962516 ], "pop" : 1457, "state" : "TN" } +{ "_id" : "37909", "city" : "KNOXVILLE", "loc" : [ -84.023501, 35.945978 ], "pop" : 13265, "state" : "TN" } +{ "_id" : "37912", "city" : "KNOXVILLE", "loc" : [ -83.977317, 36.005492 ], "pop" : 16919, "state" : "TN" } +{ "_id" : "37914", "city" : "KNOXVILLE", "loc" : [ -83.84962400000001, 35.991755 ], "pop" : 19867, "state" : "TN" } +{ "_id" : "37915", "city" : "KNOXVILLE", "loc" : [ -83.901005, 35.972074 ], "pop" : 6546, "state" : "TN" } +{ "_id" : "37916", "city" : "KNOXVILLE", "loc" : [ -83.933576, 35.955584 ], "pop" : 11449, "state" : "TN" } +{ "_id" : "37917", "city" : "KNOXVILLE", "loc" : [ -83.915216, 35.99803 ], "pop" : 25362, "state" : "TN" } +{ "_id" : "37918", "city" : "KNOXVILLE", "loc" : [ -83.922558, 36.050054 ], "pop" : 32073, "state" : "TN" } +{ "_id" : "37919", "city" : "KNOXVILLE", "loc" : [ -84.001468, 35.924385 ], "pop" : 25653, "state" : "TN" } +{ "_id" : "37920", "city" : "KIMBERLIN HEIGHT", "loc" : [ -83.87979300000001, 35.922976 ], "pop" : 35762, "state" : "TN" } +{ "_id" : "37921", "city" : "KARNS", "loc" : [ -83.982894, 35.976297 ], "pop" : 26904, "state" : "TN" } +{ "_id" : "37922", "city" : "CONCORD", "loc" : [ -84.127332, 35.877697 ], "pop" : 31414, "state" : "TN" } +{ "_id" : "37923", "city" : "KNOXVILLE", "loc" : [ -84.076116, 35.933127 ], "pop" : 22830, "state" : "TN" } +{ "_id" : "37924", "city" : "KNOXVILLE", "loc" : [ -83.80207, 36.032044 ], "pop" : 8103, "state" : "TN" } +{ "_id" : "37931", "city" : "KNOXVILLE", "loc" : [ -84.12007199999999, 35.992363 ], "pop" : 17247, "state" : "TN" } +{ "_id" : "37932", "city" : "CONCORD FARRAGUT", "loc" : [ -84.169591, 35.923619 ], "pop" : 7975, "state" : "TN" } +{ "_id" : "37938", "city" : "KNOXVILLE", "loc" : [ -83.94596799999999, 36.105473 ], "pop" : 10705, "state" : "TN" } +{ "_id" : "38001", "city" : "ALAMO", "loc" : [ -89.17646499999999, 35.801697 ], "pop" : 6528, "state" : "TN" } +{ "_id" : "38002", "city" : "ARLINGTON", "loc" : [ -89.729502, 35.275171 ], "pop" : 6781, "state" : "TN" } +{ "_id" : "38004", "city" : "ATOKA", "loc" : [ -89.8216, 35.421337 ], "pop" : 4848, "state" : "TN" } +{ "_id" : "38006", "city" : "BELLS", "loc" : [ -89.072857, 35.71976 ], "pop" : 3092, "state" : "TN" } +{ "_id" : "38008", "city" : "BOLIVAR", "loc" : [ -89.00072299999999, 35.246082 ], "pop" : 10327, "state" : "TN" } +{ "_id" : "38011", "city" : "BRIGHTON", "loc" : [ -89.752477, 35.470328 ], "pop" : 9668, "state" : "TN" } +{ "_id" : "38012", "city" : "BROWNSVILLE", "loc" : [ -89.26235200000001, 35.609957 ], "pop" : 16497, "state" : "TN" } +{ "_id" : "38015", "city" : "BURLISON", "loc" : [ -89.817729, 35.53995 ], "pop" : 2314, "state" : "TN" } +{ "_id" : "38017", "city" : "COLLIERVILLE", "loc" : [ -89.67672399999999, 35.055077 ], "pop" : 16164, "state" : "TN" } +{ "_id" : "38018", "city" : "CORDOVA", "loc" : [ -89.77893400000001, 35.156349 ], "pop" : 21777, "state" : "TN" } +{ "_id" : "38019", "city" : "COVINGTON", "loc" : [ -89.650144, 35.559838 ], "pop" : 13631, "state" : "TN" } +{ "_id" : "38023", "city" : "DRUMMONDS", "loc" : [ -89.923649, 35.445203 ], "pop" : 4891, "state" : "TN" } +{ "_id" : "38024", "city" : "DYERSBURG", "loc" : [ -89.383644, 36.044447 ], "pop" : 27839, "state" : "TN" } +{ "_id" : "38028", "city" : "EADS", "loc" : [ -89.67600400000001, 35.15512 ], "pop" : 1715, "state" : "TN" } +{ "_id" : "38030", "city" : "FINLEY", "loc" : [ -89.513403, 36.016938 ], "pop" : 830, "state" : "TN" } +{ "_id" : "38034", "city" : "FRIENDSHIP", "loc" : [ -89.20413600000001, 35.897642 ], "pop" : 1626, "state" : "TN" } +{ "_id" : "38037", "city" : "GATES", "loc" : [ -89.459182, 35.843942 ], "pop" : 2508, "state" : "TN" } +{ "_id" : "38039", "city" : "GRAND JUNCTION", "loc" : [ -89.153415, 35.065885 ], "pop" : 1827, "state" : "TN" } +{ "_id" : "38040", "city" : "HALLS", "loc" : [ -89.414671, 35.886232 ], "pop" : 3755, "state" : "TN" } +{ "_id" : "38041", "city" : "FORT PILLOW", "loc" : [ -89.637542, 35.682868 ], "pop" : 4298, "state" : "TN" } +{ "_id" : "38042", "city" : "HICKORY VALLEY", "loc" : [ -89.130905, 35.157959 ], "pop" : 269, "state" : "TN" } +{ "_id" : "38044", "city" : "HORNSBY", "loc" : [ -88.82631499999999, 35.219706 ], "pop" : 946, "state" : "TN" } +{ "_id" : "38049", "city" : "MASON", "loc" : [ -89.551805, 35.438012 ], "pop" : 2275, "state" : "TN" } +{ "_id" : "38052", "city" : "MIDDLETON", "loc" : [ -88.904625, 35.0818 ], "pop" : 3147, "state" : "TN" } +{ "_id" : "38053", "city" : "MILLINGTON", "loc" : [ -89.905422, 35.318463 ], "pop" : 38216, "state" : "TN" } +{ "_id" : "38057", "city" : "MOSCOW", "loc" : [ -89.35950800000001, 35.058796 ], "pop" : 3436, "state" : "TN" } +{ "_id" : "38059", "city" : "NEWBERN", "loc" : [ -89.251364, 36.100875 ], "pop" : 5426, "state" : "TN" } +{ "_id" : "38060", "city" : "OAKLAND", "loc" : [ -89.55176400000001, 35.222929 ], "pop" : 5935, "state" : "TN" } +{ "_id" : "38061", "city" : "POCAHONTAS", "loc" : [ -88.811559, 35.031476 ], "pop" : 570, "state" : "TN" } +{ "_id" : "38063", "city" : "RIPLEY", "loc" : [ -89.534975, 35.752651 ], "pop" : 12930, "state" : "TN" } +{ "_id" : "38066", "city" : "ROSSVILLE", "loc" : [ -89.567848, 35.076758 ], "pop" : 3730, "state" : "TN" } +{ "_id" : "38067", "city" : "SAULSBURY", "loc" : [ -89.076868, 35.049786 ], "pop" : 914, "state" : "TN" } +{ "_id" : "38068", "city" : "SOMERVILLE", "loc" : [ -89.391813, 35.277218 ], "pop" : 11757, "state" : "TN" } +{ "_id" : "38069", "city" : "STANTON", "loc" : [ -89.33262999999999, 35.448171 ], "pop" : 2940, "state" : "TN" } +{ "_id" : "38075", "city" : "WHITEVILLE", "loc" : [ -89.133692, 35.319104 ], "pop" : 3044, "state" : "TN" } +{ "_id" : "38076", "city" : "WILLISTON", "loc" : [ -89.390584, 35.166595 ], "pop" : 701, "state" : "TN" } +{ "_id" : "38079", "city" : "TIPTONVILLE", "loc" : [ -89.464922, 36.384583 ], "pop" : 4762, "state" : "TN" } +{ "_id" : "38080", "city" : "RIDGELY", "loc" : [ -89.485765, 36.263849 ], "pop" : 1819, "state" : "TN" } +{ "_id" : "38103", "city" : "MEMPHIS", "loc" : [ -90.047995, 35.144001 ], "pop" : 4144, "state" : "TN" } +{ "_id" : "38104", "city" : "MEMPHIS", "loc" : [ -90.004625, 35.133393 ], "pop" : 29496, "state" : "TN" } +{ "_id" : "38105", "city" : "MEMPHIS", "loc" : [ -90.03304199999999, 35.149748 ], "pop" : 11143, "state" : "TN" } +{ "_id" : "38106", "city" : "MEMPHIS", "loc" : [ -90.03299699999999, 35.102124 ], "pop" : 40444, "state" : "TN" } +{ "_id" : "38107", "city" : "MEMPHIS", "loc" : [ -90.020077, 35.183136 ], "pop" : 43502, "state" : "TN" } +{ "_id" : "38108", "city" : "MEMPHIS", "loc" : [ -89.968238, 35.178655 ], "pop" : 31902, "state" : "TN" } +{ "_id" : "38109", "city" : "MEMPHIS", "loc" : [ -90.073238, 35.042538 ], "pop" : 60508, "state" : "TN" } +{ "_id" : "38111", "city" : "MEMPHIS", "loc" : [ -89.945745, 35.107573 ], "pop" : 43484, "state" : "TN" } +{ "_id" : "38112", "city" : "MEMPHIS", "loc" : [ -89.97289499999999, 35.148277 ], "pop" : 21266, "state" : "TN" } +{ "_id" : "38113", "city" : "MEMPHIS", "loc" : [ -90.079426, 35.111201 ], "pop" : 68, "state" : "TN" } +{ "_id" : "38114", "city" : "MEMPHIS", "loc" : [ -89.98254, 35.098094 ], "pop" : 38708, "state" : "TN" } +{ "_id" : "38115", "city" : "HICKORY HILL", "loc" : [ -89.86082, 35.054405 ], "pop" : 34144, "state" : "TN" } +{ "_id" : "38116", "city" : "MEMPHIS", "loc" : [ -90.012314, 35.030298 ], "pop" : 46906, "state" : "TN" } +{ "_id" : "38117", "city" : "MEMPHIS", "loc" : [ -89.903367, 35.112357 ], "pop" : 27149, "state" : "TN" } +{ "_id" : "38118", "city" : "MEMPHIS", "loc" : [ -89.92653799999999, 35.051421 ], "pop" : 45507, "state" : "TN" } +{ "_id" : "38119", "city" : "MEMPHIS", "loc" : [ -89.85014200000001, 35.082101 ], "pop" : 20234, "state" : "TN" } +{ "_id" : "38120", "city" : "MEMPHIS", "loc" : [ -89.86511900000001, 35.120654 ], "pop" : 12552, "state" : "TN" } +{ "_id" : "38122", "city" : "MEMPHIS", "loc" : [ -89.926844, 35.157166 ], "pop" : 23692, "state" : "TN" } +{ "_id" : "38125", "city" : "MEMPHIS", "loc" : [ -89.81235700000001, 35.031249 ], "pop" : 10280, "state" : "TN" } +{ "_id" : "38126", "city" : "MEMPHIS", "loc" : [ -90.042444, 35.125518 ], "pop" : 16391, "state" : "TN" } +{ "_id" : "38127", "city" : "MEMPHIS", "loc" : [ -90.029623, 35.250982 ], "pop" : 8047, "state" : "TN" } +{ "_id" : "38128", "city" : "MEMPHIS", "loc" : [ -89.94131400000001, 35.221273 ], "pop" : 54198, "state" : "TN" } +{ "_id" : "38131", "city" : "MEMPHIS", "loc" : [ -90.003699, 35.0655 ], "pop" : 312, "state" : "TN" } +{ "_id" : "38132", "city" : "MEMPHIS", "loc" : [ -89.98862699999999, 35.071967 ], "pop" : 2, "state" : "TN" } +{ "_id" : "38133", "city" : "MEMPHIS", "loc" : [ -89.80356399999999, 35.205362 ], "pop" : 13227, "state" : "TN" } +{ "_id" : "38134", "city" : "BARTLETT", "loc" : [ -89.86409, 35.188639 ], "pop" : 40805, "state" : "TN" } +{ "_id" : "38135", "city" : "MEMPHIS", "loc" : [ -89.85087799999999, 35.232301 ], "pop" : 13428, "state" : "TN" } +{ "_id" : "38138", "city" : "GERMANTOWN", "loc" : [ -89.80526, 35.088344 ], "pop" : 22061, "state" : "TN" } +{ "_id" : "38139", "city" : "GERMANTOWN", "loc" : [ -89.770281, 35.087414 ], "pop" : 11771, "state" : "TN" } +{ "_id" : "38141", "city" : "MEMPHIS", "loc" : [ -89.84916, 35.023091 ], "pop" : 16247, "state" : "TN" } +{ "_id" : "38201", "city" : "MC KENZIE", "loc" : [ -88.51341600000001, 36.127195 ], "pop" : 6780, "state" : "TN" } +{ "_id" : "38220", "city" : "ATWOOD", "loc" : [ -88.624656, 35.966345 ], "pop" : 2599, "state" : "TN" } +{ "_id" : "38221", "city" : "BIG SANDY", "loc" : [ -88.062732, 36.228515 ], "pop" : 2647, "state" : "TN" } +{ "_id" : "38222", "city" : "BUCHANAN", "loc" : [ -88.151464, 36.414624 ], "pop" : 3352, "state" : "TN" } +{ "_id" : "38224", "city" : "COTTAGE GROVE", "loc" : [ -88.461421, 36.34789 ], "pop" : 1645, "state" : "TN" } +{ "_id" : "38225", "city" : "DRESDEN", "loc" : [ -88.696291, 36.295042 ], "pop" : 5475, "state" : "TN" } +{ "_id" : "38226", "city" : "DUKEDOM", "loc" : [ -88.692553, 36.479645 ], "pop" : 933, "state" : "TN" } +{ "_id" : "38229", "city" : "GLEASON", "loc" : [ -88.618441, 36.211737 ], "pop" : 3307, "state" : "TN" } +{ "_id" : "38230", "city" : "GREENFIELD", "loc" : [ -88.74532000000001, 36.148502 ], "pop" : 4682, "state" : "TN" } +{ "_id" : "38231", "city" : "HENRY", "loc" : [ -88.453609, 36.201343 ], "pop" : 1520, "state" : "TN" } +{ "_id" : "38232", "city" : "HORNBEAK", "loc" : [ -89.305617, 36.359594 ], "pop" : 3042, "state" : "TN" } +{ "_id" : "38233", "city" : "KENTON", "loc" : [ -89.022879, 36.190583 ], "pop" : 1446, "state" : "TN" } +{ "_id" : "38236", "city" : "MANSFIELD", "loc" : [ -88.285934, 36.184744 ], "pop" : 1091, "state" : "TN" } +{ "_id" : "38237", "city" : "MARTIN", "loc" : [ -88.855395, 36.342467 ], "pop" : 13540, "state" : "TN" } +{ "_id" : "38240", "city" : "OBION", "loc" : [ -89.28052, 36.265679 ], "pop" : 3419, "state" : "TN" } +{ "_id" : "38241", "city" : "PALMERSVILLE", "loc" : [ -88.614178, 36.394772 ], "pop" : 1471, "state" : "TN" } +{ "_id" : "38242", "city" : "PARIS", "loc" : [ -88.30932799999999, 36.300519 ], "pop" : 16597, "state" : "TN" } +{ "_id" : "38251", "city" : "PURYEAR", "loc" : [ -88.347193, 36.445632 ], "pop" : 2292, "state" : "TN" } +{ "_id" : "38253", "city" : "RIVES", "loc" : [ -89.037632, 36.263665 ], "pop" : 2424, "state" : "TN" } +{ "_id" : "38255", "city" : "SHARON", "loc" : [ -88.847661, 36.239454 ], "pop" : 2564, "state" : "TN" } +{ "_id" : "38256", "city" : "SPRINGVILLE", "loc" : [ -88.14594099999999, 36.265033 ], "pop" : 1391, "state" : "TN" } +{ "_id" : "38257", "city" : "SOUTH FULTON", "loc" : [ -88.880781, 36.481386 ], "pop" : 4676, "state" : "TN" } +{ "_id" : "38258", "city" : "TREZEVANT", "loc" : [ -88.61003599999999, 36.017213 ], "pop" : 2052, "state" : "TN" } +{ "_id" : "38259", "city" : "TRIMBLE", "loc" : [ -89.18626500000001, 36.201113 ], "pop" : 792, "state" : "TN" } +{ "_id" : "38260", "city" : "TROY", "loc" : [ -89.161058, 36.341644 ], "pop" : 1588, "state" : "TN" } +{ "_id" : "38261", "city" : "UNION CITY", "loc" : [ -89.06666199999999, 36.426311 ], "pop" : 17007, "state" : "TN" } +{ "_id" : "38301", "city" : "JACKSON", "loc" : [ -88.81401099999999, 35.610222 ], "pop" : 39275, "state" : "TN" } +{ "_id" : "38305", "city" : "JACKSON", "loc" : [ -88.82812699999999, 35.682875 ], "pop" : 28992, "state" : "TN" } +{ "_id" : "38310", "city" : "ADAMSVILLE", "loc" : [ -88.41336699999999, 35.25561 ], "pop" : 3042, "state" : "TN" } +{ "_id" : "38311", "city" : "BATH SPRINGS", "loc" : [ -88.12863, 35.452111 ], "pop" : 920, "state" : "TN" } +{ "_id" : "38313", "city" : "BEECH BLUFF", "loc" : [ -88.639634, 35.592156 ], "pop" : 2682, "state" : "TN" } +{ "_id" : "38315", "city" : "BETHEL SPRINGS", "loc" : [ -88.64397200000001, 35.228893 ], "pop" : 2457, "state" : "TN" } +{ "_id" : "38316", "city" : "BRADFORD", "loc" : [ -88.804593, 36.064474 ], "pop" : 2884, "state" : "TN" } +{ "_id" : "38317", "city" : "BRUCETON", "loc" : [ -88.25180400000001, 36.026792 ], "pop" : 2035, "state" : "TN" } +{ "_id" : "38318", "city" : "BUENA VISTA", "loc" : [ -88.292576, 35.943119 ], "pop" : 165, "state" : "TN" } +{ "_id" : "38320", "city" : "CAMDEN", "loc" : [ -88.111853, 36.055578 ], "pop" : 8922, "state" : "TN" } +{ "_id" : "38321", "city" : "CEDAR GROVE", "loc" : [ -88.55170200000001, 35.861261 ], "pop" : 1150, "state" : "TN" } +{ "_id" : "38326", "city" : "COUNCE", "loc" : [ -88.293567, 35.039415 ], "pop" : 2015, "state" : "TN" } +{ "_id" : "38327", "city" : "CRUMP", "loc" : [ -88.335641, 35.221641 ], "pop" : 1507, "state" : "TN" } +{ "_id" : "38328", "city" : "DARDEN", "loc" : [ -88.217688, 35.662962 ], "pop" : 533, "state" : "TN" } +{ "_id" : "38329", "city" : "DECATURVILLE", "loc" : [ -88.133413, 35.558455 ], "pop" : 2806, "state" : "TN" } +{ "_id" : "38330", "city" : "DYER", "loc" : [ -89.019226, 36.071578 ], "pop" : 4695, "state" : "TN" } +{ "_id" : "38332", "city" : "ENVILLE", "loc" : [ -88.420613, 35.439321 ], "pop" : 1041, "state" : "TN" } +{ "_id" : "38333", "city" : "EVA", "loc" : [ -88.028036, 36.078814 ], "pop" : 1536, "state" : "TN" } +{ "_id" : "38334", "city" : "FINGER", "loc" : [ -88.606709, 35.325208 ], "pop" : 1840, "state" : "TN" } +{ "_id" : "38337", "city" : "GADSDEN", "loc" : [ -88.992947, 35.779867 ], "pop" : 2132, "state" : "TN" } +{ "_id" : "38339", "city" : "GUYS", "loc" : [ -88.52076099999999, 35.014211 ], "pop" : 689, "state" : "TN" } +{ "_id" : "38340", "city" : "HENDERSON", "loc" : [ -88.639774, 35.426929 ], "pop" : 10311, "state" : "TN" } +{ "_id" : "38341", "city" : "HOLLADAY", "loc" : [ -88.091183, 35.895143 ], "pop" : 1419, "state" : "TN" } +{ "_id" : "38342", "city" : "HOLLOW ROCK", "loc" : [ -88.29013500000001, 36.056524 ], "pop" : 2547, "state" : "TN" } +{ "_id" : "38343", "city" : "HUMBOLDT", "loc" : [ -88.905652, 35.836993 ], "pop" : 13410, "state" : "TN" } +{ "_id" : "38344", "city" : "HUNTINGDON", "loc" : [ -88.42021099999999, 36.006228 ], "pop" : 7034, "state" : "TN" } +{ "_id" : "38345", "city" : "HURON", "loc" : [ -88.519549, 35.614377 ], "pop" : 1665, "state" : "TN" } +{ "_id" : "38347", "city" : "JACKS CREEK", "loc" : [ -88.501865, 35.478206 ], "pop" : 288, "state" : "TN" } +{ "_id" : "38348", "city" : "LAVINIA", "loc" : [ -88.632442, 35.85834 ], "pop" : 1183, "state" : "TN" } +{ "_id" : "38351", "city" : "LEXINGTON", "loc" : [ -88.392743, 35.651195 ], "pop" : 13554, "state" : "TN" } +{ "_id" : "38352", "city" : "LURAY", "loc" : [ -88.578422, 35.598846 ], "pop" : 94, "state" : "TN" } +{ "_id" : "38355", "city" : "MEDINA", "loc" : [ -88.762655, 35.808088 ], "pop" : 1303, "state" : "TN" } +{ "_id" : "38356", "city" : "MEDON", "loc" : [ -88.871656, 35.471804 ], "pop" : 1486, "state" : "TN" } +{ "_id" : "38357", "city" : "MICHIE", "loc" : [ -88.44046299999999, 35.060306 ], "pop" : 2297, "state" : "TN" } +{ "_id" : "38358", "city" : "MILAN", "loc" : [ -88.768844, 35.925089 ], "pop" : 11377, "state" : "TN" } +{ "_id" : "38359", "city" : "MILLEDGEVILLE", "loc" : [ -88.399125, 35.345175 ], "pop" : 449, "state" : "TN" } +{ "_id" : "38361", "city" : "MORRIS CHAPEL", "loc" : [ -88.317599, 35.302562 ], "pop" : 1272, "state" : "TN" } +{ "_id" : "38362", "city" : "OAKFIELD", "loc" : [ -88.802145, 35.754756 ], "pop" : 2239, "state" : "TN" } +{ "_id" : "38363", "city" : "PARSONS", "loc" : [ -88.11953200000001, 35.66635 ], "pop" : 5906, "state" : "TN" } +{ "_id" : "38366", "city" : "PINSON", "loc" : [ -88.730396, 35.478059 ], "pop" : 2598, "state" : "TN" } +{ "_id" : "38367", "city" : "RAMER", "loc" : [ -88.601733, 35.064181 ], "pop" : 2804, "state" : "TN" } +{ "_id" : "38368", "city" : "REAGAN", "loc" : [ -88.35077800000001, 35.50957 ], "pop" : 804, "state" : "TN" } +{ "_id" : "38369", "city" : "RUTHERFORD", "loc" : [ -88.984863, 36.130027 ], "pop" : 2265, "state" : "TN" } +{ "_id" : "38370", "city" : "SALTILLO", "loc" : [ -88.247225, 35.381467 ], "pop" : 1007, "state" : "TN" } +{ "_id" : "38371", "city" : "SARDIS", "loc" : [ -88.3058, 35.438598 ], "pop" : 1068, "state" : "TN" } +{ "_id" : "38372", "city" : "SAVANNAH", "loc" : [ -88.200541, 35.202272 ], "pop" : 15773, "state" : "TN" } +{ "_id" : "38374", "city" : "SCOTTS HILL", "loc" : [ -88.240476, 35.504992 ], "pop" : 1657, "state" : "TN" } +{ "_id" : "38375", "city" : "SELMER", "loc" : [ -88.595832, 35.169124 ], "pop" : 7264, "state" : "TN" } +{ "_id" : "38376", "city" : "SHILOH", "loc" : [ -88.350717, 35.119545 ], "pop" : 438, "state" : "TN" } +{ "_id" : "38379", "city" : "STANTONVILLE", "loc" : [ -88.436432, 35.180946 ], "pop" : 1580, "state" : "TN" } +{ "_id" : "38380", "city" : "SUGAR TREE", "loc" : [ -88.03224899999999, 35.791993 ], "pop" : 179, "state" : "TN" } +{ "_id" : "38381", "city" : "TOONE", "loc" : [ -88.935286, 35.357421 ], "pop" : 2333, "state" : "TN" } +{ "_id" : "38382", "city" : "TRENTON", "loc" : [ -88.950655, 35.971246 ], "pop" : 9011, "state" : "TN" } +{ "_id" : "38387", "city" : "WESTPORT", "loc" : [ -88.336364, 35.916918 ], "pop" : 906, "state" : "TN" } +{ "_id" : "38388", "city" : "WILDERSVILLE", "loc" : [ -88.438794, 35.769772 ], "pop" : 2828, "state" : "TN" } +{ "_id" : "38390", "city" : "YUMA", "loc" : [ -88.381878, 35.867964 ], "pop" : 1063, "state" : "TN" } +{ "_id" : "38391", "city" : "DENMARK", "loc" : [ -88.975892, 35.557059 ], "pop" : 1760, "state" : "TN" } +{ "_id" : "38392", "city" : "MERCER", "loc" : [ -89.03728, 35.481828 ], "pop" : 609, "state" : "TN" } +{ "_id" : "38401", "city" : "COLUMBIA", "loc" : [ -87.038032, 35.615577 ], "pop" : 38459, "state" : "TN" } +{ "_id" : "38425", "city" : "CLIFTON", "loc" : [ -87.94996999999999, 35.381948 ], "pop" : 1775, "state" : "TN" } +{ "_id" : "38449", "city" : "ARDMORE", "loc" : [ -86.879555, 35.057445 ], "pop" : 3560, "state" : "TN" } +{ "_id" : "38450", "city" : "COLLINWOOD", "loc" : [ -87.71848799999999, 35.163525 ], "pop" : 2558, "state" : "TN" } +{ "_id" : "38451", "city" : "CULLEOKA", "loc" : [ -87.00050299999999, 35.474914 ], "pop" : 2476, "state" : "TN" } +{ "_id" : "38452", "city" : "CYPRESS INN", "loc" : [ -87.78833, 35.057945 ], "pop" : 764, "state" : "TN" } +{ "_id" : "38453", "city" : "ARDMORE", "loc" : [ -86.91002400000001, 35.003654 ], "pop" : 204, "state" : "TN" } +{ "_id" : "38454", "city" : "DUCK RIVER", "loc" : [ -87.342336, 35.738599 ], "pop" : 1027, "state" : "TN" } +{ "_id" : "38456", "city" : "ETHRIDGE", "loc" : [ -87.303912, 35.332648 ], "pop" : 3854, "state" : "TN" } +{ "_id" : "38457", "city" : "FIVE POINTS", "loc" : [ -87.296128, 35.031046 ], "pop" : 798, "state" : "TN" } +{ "_id" : "38459", "city" : "FRANKEWING", "loc" : [ -86.781818, 35.177854 ], "pop" : 1670, "state" : "TN" } +{ "_id" : "38460", "city" : "GOODSPRING", "loc" : [ -87.127788, 35.116709 ], "pop" : 889, "state" : "TN" } +{ "_id" : "38461", "city" : "HAMPSHIRE", "loc" : [ -87.325135, 35.591482 ], "pop" : 1059, "state" : "TN" } +{ "_id" : "38462", "city" : "KIMMINS", "loc" : [ -87.55461, 35.540837 ], "pop" : 8004, "state" : "TN" } +{ "_id" : "38463", "city" : "IRON CITY", "loc" : [ -87.64732100000001, 35.056283 ], "pop" : 2249, "state" : "TN" } +{ "_id" : "38464", "city" : "LAWRENCEBURG", "loc" : [ -87.352582, 35.250668 ], "pop" : 18681, "state" : "TN" } +{ "_id" : "38468", "city" : "LEOMA", "loc" : [ -87.316773, 35.138177 ], "pop" : 3568, "state" : "TN" } +{ "_id" : "38469", "city" : "LORETTO", "loc" : [ -87.42697800000001, 35.072797 ], "pop" : 3369, "state" : "TN" } +{ "_id" : "38471", "city" : "LUTTS", "loc" : [ -87.892291, 35.113842 ], "pop" : 1070, "state" : "TN" } +{ "_id" : "38472", "city" : "LYNNVILLE", "loc" : [ -87.062877, 35.379235 ], "pop" : 2712, "state" : "TN" } +{ "_id" : "38473", "city" : "MINOR HILL", "loc" : [ -87.15219399999999, 35.050034 ], "pop" : 1482, "state" : "TN" } +{ "_id" : "38474", "city" : "MOUNT PLEASANT", "loc" : [ -87.203678, 35.530084 ], "pop" : 7952, "state" : "TN" } +{ "_id" : "38475", "city" : "OLIVEHILL", "loc" : [ -88.03903800000001, 35.266711 ], "pop" : 443, "state" : "TN" } +{ "_id" : "38476", "city" : "PRIMM SPRINGS", "loc" : [ -87.25304300000001, 35.810364 ], "pop" : 346, "state" : "TN" } +{ "_id" : "38477", "city" : "PROSPECT", "loc" : [ -87.01738400000001, 35.066626 ], "pop" : 1843, "state" : "TN" } +{ "_id" : "38478", "city" : "PULASKI", "loc" : [ -87.03926300000001, 35.209274 ], "pop" : 15310, "state" : "TN" } +{ "_id" : "38481", "city" : "SAINT JOSEPH", "loc" : [ -87.501807, 35.037556 ], "pop" : 881, "state" : "TN" } +{ "_id" : "38482", "city" : "SANTA FE", "loc" : [ -87.151543, 35.75877 ], "pop" : 2001, "state" : "TN" } +{ "_id" : "38483", "city" : "SUMMERTOWN", "loc" : [ -87.31983, 35.430673 ], "pop" : 3302, "state" : "TN" } +{ "_id" : "38485", "city" : "WAYNESBORO", "loc" : [ -87.739498, 35.322019 ], "pop" : 6381, "state" : "TN" } +{ "_id" : "38486", "city" : "WESTPOINT", "loc" : [ -87.538025, 35.139302 ], "pop" : 717, "state" : "TN" } +{ "_id" : "38487", "city" : "WILLIAMSPORT", "loc" : [ -87.225692, 35.64937 ], "pop" : 1199, "state" : "TN" } +{ "_id" : "38488", "city" : "TAFT", "loc" : [ -86.644672, 35.051731 ], "pop" : 4681, "state" : "TN" } +{ "_id" : "38501", "city" : "ALGOOD", "loc" : [ -85.49531, 36.174261 ], "pop" : 41805, "state" : "TN" } +{ "_id" : "38504", "city" : "ALLARDT", "loc" : [ -84.850784, 36.374889 ], "pop" : 3284, "state" : "TN" } +{ "_id" : "38541", "city" : "ALLONS", "loc" : [ -85.319744, 36.497002 ], "pop" : 1641, "state" : "TN" } +{ "_id" : "38542", "city" : "ALLRED", "loc" : [ -85.176084, 36.366838 ], "pop" : 2, "state" : "TN" } +{ "_id" : "38543", "city" : "ALPINE", "loc" : [ -85.152153, 36.380324 ], "pop" : 441, "state" : "TN" } +{ "_id" : "38544", "city" : "BAXTER", "loc" : [ -85.637766, 36.124917 ], "pop" : 5871, "state" : "TN" } +{ "_id" : "38545", "city" : "BLOOMINGTON SPRI", "loc" : [ -85.64785999999999, 36.219454 ], "pop" : 1089, "state" : "TN" } +{ "_id" : "38547", "city" : "BRUSH CREEK", "loc" : [ -86.02034399999999, 36.110673 ], "pop" : 656, "state" : "TN" } +{ "_id" : "38548", "city" : "BUFFALO VALLEY", "loc" : [ -85.75887899999999, 36.183311 ], "pop" : 704, "state" : "TN" } +{ "_id" : "38549", "city" : "BYRDSTOWN", "loc" : [ -85.145647, 36.570869 ], "pop" : 2898, "state" : "TN" } +{ "_id" : "38551", "city" : "CELINA", "loc" : [ -85.496551, 36.547491 ], "pop" : 4102, "state" : "TN" } +{ "_id" : "38552", "city" : "CHESTNUT MOUND", "loc" : [ -85.837402, 36.192877 ], "pop" : 784, "state" : "TN" } +{ "_id" : "38553", "city" : "CLARKRANGE", "loc" : [ -84.977737, 36.211188 ], "pop" : 1843, "state" : "TN" } +{ "_id" : "38554", "city" : "CRAWFORD", "loc" : [ -85.16876499999999, 36.23611 ], "pop" : 1213, "state" : "TN" } +{ "_id" : "38555", "city" : "FAIRFIELD GLADE", "loc" : [ -85.017171, 35.944041 ], "pop" : 26993, "state" : "TN" } +{ "_id" : "38556", "city" : "JAMESTOWN", "loc" : [ -84.935721, 36.424471 ], "pop" : 7728, "state" : "TN" } +{ "_id" : "38559", "city" : "DOYLE", "loc" : [ -85.498997, 35.872206 ], "pop" : 1802, "state" : "TN" } +{ "_id" : "38560", "city" : "ELMWOOD", "loc" : [ -85.880843, 36.235468 ], "pop" : 937, "state" : "TN" } +{ "_id" : "38562", "city" : "GAINESBORO", "loc" : [ -85.635509, 36.343767 ], "pop" : 6883, "state" : "TN" } +{ "_id" : "38563", "city" : "GORDONSVILLE", "loc" : [ -86.000818, 36.184317 ], "pop" : 2630, "state" : "TN" } +{ "_id" : "38564", "city" : "GRANVILLE", "loc" : [ -85.747533, 36.276847 ], "pop" : 381, "state" : "TN" } +{ "_id" : "38565", "city" : "GRIMSLEY", "loc" : [ -85.01549, 36.243353 ], "pop" : 1092, "state" : "TN" } +{ "_id" : "38567", "city" : "HICKMAN", "loc" : [ -85.902297, 36.119653 ], "pop" : 836, "state" : "TN" } +{ "_id" : "38568", "city" : "HILHAM", "loc" : [ -85.43691800000001, 36.391492 ], "pop" : 1976, "state" : "TN" } +{ "_id" : "38569", "city" : "LANCASTER", "loc" : [ -85.85509500000001, 36.09542 ], "pop" : 261, "state" : "TN" } +{ "_id" : "38570", "city" : "LIVINGSTON", "loc" : [ -85.32052299999999, 36.389012 ], "pop" : 7274, "state" : "TN" } +{ "_id" : "38573", "city" : "MONROE", "loc" : [ -85.216385, 36.464201 ], "pop" : 1951, "state" : "TN" } +{ "_id" : "38574", "city" : "MONTEREY", "loc" : [ -85.254198, 36.150862 ], "pop" : 5030, "state" : "TN" } +{ "_id" : "38575", "city" : "MOSS", "loc" : [ -85.677235, 36.596623 ], "pop" : 980, "state" : "TN" } +{ "_id" : "38577", "city" : "PALL MALL", "loc" : [ -85.03838500000001, 36.578066 ], "pop" : 1537, "state" : "TN" } +{ "_id" : "38578", "city" : "PLEASANT HILL", "loc" : [ -85.16694, 36.01121 ], "pop" : 4954, "state" : "TN" } +{ "_id" : "38579", "city" : "QUEBECK", "loc" : [ -85.538189, 35.825379 ], "pop" : 1250, "state" : "TN" } +{ "_id" : "38580", "city" : "RICKMAN", "loc" : [ -85.380572, 36.301933 ], "pop" : 2109, "state" : "TN" } +{ "_id" : "38581", "city" : "BONE CAVE", "loc" : [ -85.63515599999999, 35.743813 ], "pop" : 3954, "state" : "TN" } +{ "_id" : "38582", "city" : "SILVER POINT", "loc" : [ -85.733801, 36.100562 ], "pop" : 954, "state" : "TN" } +{ "_id" : "38583", "city" : "RAVENSCROFT", "loc" : [ -85.478582, 35.954664 ], "pop" : 16814, "state" : "TN" } +{ "_id" : "38585", "city" : "SPENCER", "loc" : [ -85.42866100000001, 35.727871 ], "pop" : 3954, "state" : "TN" } +{ "_id" : "38587", "city" : "WALLING", "loc" : [ -85.618509, 35.869543 ], "pop" : 641, "state" : "TN" } +{ "_id" : "38588", "city" : "WHITLEYVILLE", "loc" : [ -85.68987300000001, 36.515839 ], "pop" : 1272, "state" : "TN" } +{ "_id" : "38589", "city" : "WILDER", "loc" : [ -85.07471700000001, 36.230526 ], "pop" : 178, "state" : "TN" } +{ "_id" : "38601", "city" : "ABBEVILLE", "loc" : [ -89.56883500000001, 34.455553 ], "pop" : 4649, "state" : "MS" } +{ "_id" : "38603", "city" : "CANNON", "loc" : [ -89.205428, 34.79456 ], "pop" : 3226, "state" : "MS" } +{ "_id" : "38606", "city" : "BATESVILLE", "loc" : [ -89.91418, 34.331651 ], "pop" : 9879, "state" : "MS" } +{ "_id" : "38610", "city" : "BLUE MOUNTAIN", "loc" : [ -89.008775, 34.670986 ], "pop" : 3857, "state" : "MS" } +{ "_id" : "38611", "city" : "BYHALIA", "loc" : [ -89.676332, 34.885351 ], "pop" : 11054, "state" : "MS" } +{ "_id" : "38614", "city" : "STOVALL", "loc" : [ -90.577755, 34.204984 ], "pop" : 26774, "state" : "MS" } +{ "_id" : "38617", "city" : "COAHOMA", "loc" : [ -90.472748, 34.36247 ], "pop" : 3055, "state" : "MS" } +{ "_id" : "38618", "city" : "COLDWATER", "loc" : [ -89.98688199999999, 34.692362 ], "pop" : 7247, "state" : "MS" } +{ "_id" : "38619", "city" : "COMO", "loc" : [ -89.915508, 34.513728 ], "pop" : 3568, "state" : "MS" } +{ "_id" : "38620", "city" : "COURTLAND", "loc" : [ -89.93959099999999, 34.25958 ], "pop" : 6765, "state" : "MS" } +{ "_id" : "38621", "city" : "ASKEW", "loc" : [ -90.185524, 34.453966 ], "pop" : 4693, "state" : "MS" } +{ "_id" : "38625", "city" : "DUMAS", "loc" : [ -88.80722900000001, 34.64915 ], "pop" : 2219, "state" : "MS" } +{ "_id" : "38626", "city" : "DUNDEE", "loc" : [ -90.38907, 34.528181 ], "pop" : 1443, "state" : "MS" } +{ "_id" : "38627", "city" : "ETTA", "loc" : [ -89.176706, 34.435231 ], "pop" : 1560, "state" : "MS" } +{ "_id" : "38629", "city" : "FALKNER", "loc" : [ -88.952493, 34.841682 ], "pop" : 1408, "state" : "MS" } +{ "_id" : "38632", "city" : "HERNANDO", "loc" : [ -90.00948699999999, 34.809588 ], "pop" : 10894, "state" : "MS" } +{ "_id" : "38633", "city" : "HICKORY FLAT", "loc" : [ -89.186229, 34.624362 ], "pop" : 1692, "state" : "MS" } +{ "_id" : "38635", "city" : "HOLLY SPRINGS", "loc" : [ -89.48971400000001, 34.747061 ], "pop" : 12519, "state" : "MS" } +{ "_id" : "38637", "city" : "HORN LAKE", "loc" : [ -90.050719, 34.9519 ], "pop" : 14436, "state" : "MS" } +{ "_id" : "38641", "city" : "LAKE CORMORANT", "loc" : [ -90.16079499999999, 34.893733 ], "pop" : 1587, "state" : "MS" } +{ "_id" : "38642", "city" : "LAMAR", "loc" : [ -89.31632999999999, 34.927072 ], "pop" : 2761, "state" : "MS" } +{ "_id" : "38643", "city" : "LAMBERT", "loc" : [ -90.262991, 34.183719 ], "pop" : 3378, "state" : "MS" } +{ "_id" : "38645", "city" : "LYON", "loc" : [ -90.498147, 34.247369 ], "pop" : 1132, "state" : "MS" } +{ "_id" : "38646", "city" : "MARKS", "loc" : [ -90.28160200000001, 34.260735 ], "pop" : 4715, "state" : "MS" } +{ "_id" : "38647", "city" : "MICHIGAN CITY", "loc" : [ -89.136173, 34.931849 ], "pop" : 1574, "state" : "MS" } +{ "_id" : "38650", "city" : "MYRTLE", "loc" : [ -89.115701, 34.540209 ], "pop" : 2613, "state" : "MS" } +{ "_id" : "38651", "city" : "NESBIT", "loc" : [ -90.012199, 34.899189 ], "pop" : 4098, "state" : "MS" } +{ "_id" : "38652", "city" : "NEW ALBANY", "loc" : [ -89.003058, 34.485051 ], "pop" : 14109, "state" : "MS" } +{ "_id" : "38654", "city" : "OLIVE BRANCH", "loc" : [ -89.854427, 34.94414 ], "pop" : 14069, "state" : "MS" } +{ "_id" : "38655", "city" : "LAFAYETTE", "loc" : [ -89.49692, 34.354354 ], "pop" : 22599, "state" : "MS" } +{ "_id" : "38657", "city" : "PLEASANT GROVE", "loc" : [ -90.10249399999999, 34.469951 ], "pop" : 80, "state" : "MS" } +{ "_id" : "38658", "city" : "POPE", "loc" : [ -90.002735, 34.190559 ], "pop" : 1860, "state" : "MS" } +{ "_id" : "38659", "city" : "POTTS CAMP", "loc" : [ -89.315073, 34.604742 ], "pop" : 1580, "state" : "MS" } +{ "_id" : "38661", "city" : "RED BANKS", "loc" : [ -89.519839, 34.875039 ], "pop" : 4860, "state" : "MS" } +{ "_id" : "38663", "city" : "RIPLEY", "loc" : [ -88.923973, 34.750912 ], "pop" : 8895, "state" : "MS" } +{ "_id" : "38664", "city" : "ROBINSONVILLE", "loc" : [ -90.30517399999999, 34.809329 ], "pop" : 547, "state" : "MS" } +{ "_id" : "38665", "city" : "SAVAGE", "loc" : [ -90.138193, 34.611981 ], "pop" : 1936, "state" : "MS" } +{ "_id" : "38666", "city" : "SARDIS", "loc" : [ -89.922083, 34.427573 ], "pop" : 5023, "state" : "MS" } +{ "_id" : "38668", "city" : "SENATOBIA", "loc" : [ -89.885501, 34.632306 ], "pop" : 12249, "state" : "MS" } +{ "_id" : "38670", "city" : "SLEDGE", "loc" : [ -90.20904, 34.382347 ], "pop" : 201, "state" : "MS" } +{ "_id" : "38671", "city" : "SOUTHAVEN", "loc" : [ -89.999173, 34.977074 ], "pop" : 19174, "state" : "MS" } +{ "_id" : "38673", "city" : "TAYLOR", "loc" : [ -89.627278, 34.284878 ], "pop" : 2374, "state" : "MS" } +{ "_id" : "38674", "city" : "TIPLERSVILLE", "loc" : [ -88.915684, 34.90294 ], "pop" : 909, "state" : "MS" } +{ "_id" : "38676", "city" : "TUNICA", "loc" : [ -90.368515, 34.688355 ], "pop" : 6174, "state" : "MS" } +{ "_id" : "38677", "city" : "UNIVERSITY", "loc" : [ -89.582742, 34.364513 ], "pop" : 1902, "state" : "MS" } +{ "_id" : "38680", "city" : "WALLS", "loc" : [ -90.120789, 34.964051 ], "pop" : 2181, "state" : "MS" } +{ "_id" : "38683", "city" : "WALNUT", "loc" : [ -88.905337, 34.952732 ], "pop" : 2553, "state" : "MS" } +{ "_id" : "38685", "city" : "WATERFORD", "loc" : [ -89.468298, 34.640248 ], "pop" : 892, "state" : "MS" } +{ "_id" : "38701", "city" : "GREENVILLE", "loc" : [ -91.04679299999999, 33.378737 ], "pop" : 35884, "state" : "MS" } +{ "_id" : "38703", "city" : "GREENVILLE", "loc" : [ -91.022795, 33.408494 ], "pop" : 18560, "state" : "MS" } +{ "_id" : "38720", "city" : "ALLIGATOR", "loc" : [ -90.738214, 34.129425 ], "pop" : 969, "state" : "MS" } +{ "_id" : "38721", "city" : "ANGUILLA", "loc" : [ -90.809535, 33.01213 ], "pop" : 2557, "state" : "MS" } +{ "_id" : "38725", "city" : "BENOIT", "loc" : [ -91.033765, 33.644795 ], "pop" : 1554, "state" : "MS" } +{ "_id" : "38726", "city" : "BEULAH", "loc" : [ -90.979545, 33.787954 ], "pop" : 467, "state" : "MS" } +{ "_id" : "38730", "city" : "BOYLE", "loc" : [ -90.733503, 33.685369 ], "pop" : 1934, "state" : "MS" } +{ "_id" : "38732", "city" : "CLEVELAND", "loc" : [ -90.73087099999999, 33.743002 ], "pop" : 20953, "state" : "MS" } +{ "_id" : "38736", "city" : "DODDSVILLE", "loc" : [ -90.52637, 33.630045 ], "pop" : 309, "state" : "MS" } +{ "_id" : "38737", "city" : "DREW", "loc" : [ -90.540606, 33.867031 ], "pop" : 7680, "state" : "MS" } +{ "_id" : "38740", "city" : "DUNCAN", "loc" : [ -90.765191, 34.046966 ], "pop" : 885, "state" : "MS" } +{ "_id" : "38744", "city" : "GLEN ALLAN", "loc" : [ -91.009193, 33.025361 ], "pop" : 734, "state" : "MS" } +{ "_id" : "38746", "city" : "GUNNISON", "loc" : [ -90.931899, 33.943886 ], "pop" : 1248, "state" : "MS" } +{ "_id" : "38748", "city" : "PERCY", "loc" : [ -90.84857, 33.177917 ], "pop" : 4499, "state" : "MS" } +{ "_id" : "38751", "city" : "BAIRD", "loc" : [ -90.654144, 33.449075 ], "pop" : 13001, "state" : "MS" } +{ "_id" : "38753", "city" : "INVERNESS", "loc" : [ -90.605065, 33.348964 ], "pop" : 2140, "state" : "MS" } +{ "_id" : "38754", "city" : "ISOLA", "loc" : [ -90.604027, 33.247112 ], "pop" : 1674, "state" : "MS" } +{ "_id" : "38756", "city" : "ELIZABETH", "loc" : [ -90.89280100000001, 33.410025 ], "pop" : 8047, "state" : "MS" } +{ "_id" : "38759", "city" : "MERIGOLD", "loc" : [ -90.725571, 33.837252 ], "pop" : 738, "state" : "MS" } +{ "_id" : "38761", "city" : "MOORHEAD", "loc" : [ -90.51425, 33.478325 ], "pop" : 4623, "state" : "MS" } +{ "_id" : "38762", "city" : "MOUND BAYOU", "loc" : [ -90.73024700000001, 33.886023 ], "pop" : 3485, "state" : "MS" } +{ "_id" : "38769", "city" : "ROSEDALE", "loc" : [ -90.992289, 33.843166 ], "pop" : 3726, "state" : "MS" } +{ "_id" : "38771", "city" : "RULEVILLE", "loc" : [ -90.552657, 33.724052 ], "pop" : 4153, "state" : "MS" } +{ "_id" : "38773", "city" : "SHAW", "loc" : [ -90.81427499999999, 33.587388 ], "pop" : 3596, "state" : "MS" } +{ "_id" : "38774", "city" : "SHELBY", "loc" : [ -90.762461, 33.949058 ], "pop" : 3037, "state" : "MS" } +{ "_id" : "38778", "city" : "SUNFLOWER", "loc" : [ -90.638732, 33.584696 ], "pop" : 961, "state" : "MS" } +{ "_id" : "38780", "city" : "WAYSIDE", "loc" : [ -91.024801, 33.261023 ], "pop" : 198, "state" : "MS" } +{ "_id" : "38801", "city" : "TUPELO", "loc" : [ -88.72085300000001, 34.253834 ], "pop" : 40381, "state" : "MS" } +{ "_id" : "38821", "city" : "AMORY", "loc" : [ -88.470917, 33.9844 ], "pop" : 11765, "state" : "MS" } +{ "_id" : "38824", "city" : "BALDWYN", "loc" : [ -88.63748, 34.527959 ], "pop" : 6965, "state" : "MS" } +{ "_id" : "38826", "city" : "BELDEN", "loc" : [ -88.816011, 34.278663 ], "pop" : 4441, "state" : "MS" } +{ "_id" : "38827", "city" : "BELMONT", "loc" : [ -88.230912, 34.51025 ], "pop" : 2511, "state" : "MS" } +{ "_id" : "38828", "city" : "BLUE SPRINGS", "loc" : [ -88.859004, 34.427286 ], "pop" : 2808, "state" : "MS" } +{ "_id" : "38829", "city" : "BOONEVILLE", "loc" : [ -88.544299, 34.669431 ], "pop" : 16363, "state" : "MS" } +{ "_id" : "38833", "city" : "BURNSVILLE", "loc" : [ -88.306962, 34.857885 ], "pop" : 3574, "state" : "MS" } +{ "_id" : "38834", "city" : "KOSSUTH", "loc" : [ -88.54388400000001, 34.93236 ], "pop" : 22984, "state" : "MS" } +{ "_id" : "38838", "city" : "DENNIS", "loc" : [ -88.21167, 34.549735 ], "pop" : 1315, "state" : "MS" } +{ "_id" : "38841", "city" : "ECRU", "loc" : [ -88.955956, 34.337106 ], "pop" : 3862, "state" : "MS" } +{ "_id" : "38843", "city" : "FULTON", "loc" : [ -88.379262, 34.274543 ], "pop" : 14877, "state" : "MS" } +{ "_id" : "38844", "city" : "GATTMAN", "loc" : [ -88.258779, 33.87417 ], "pop" : 408, "state" : "MS" } +{ "_id" : "38846", "city" : "GLEN", "loc" : [ -88.43585899999999, 34.877981 ], "pop" : 5578, "state" : "MS" } +{ "_id" : "38847", "city" : "GOLDEN", "loc" : [ -88.18415899999999, 34.481214 ], "pop" : 639, "state" : "MS" } +{ "_id" : "38848", "city" : "GREENWOOD SPRING", "loc" : [ -88.312333, 33.99344 ], "pop" : 1934, "state" : "MS" } +{ "_id" : "38849", "city" : "GUNTOWN", "loc" : [ -88.701059, 34.429882 ], "pop" : 4504, "state" : "MS" } +{ "_id" : "38850", "city" : "HOULKA", "loc" : [ -89.05311399999999, 34.056145 ], "pop" : 2571, "state" : "MS" } +{ "_id" : "38851", "city" : "HOUSTON", "loc" : [ -88.967005, 33.902554 ], "pop" : 8781, "state" : "MS" } +{ "_id" : "38852", "city" : "IUKA", "loc" : [ -88.198289, 34.808891 ], "pop" : 7497, "state" : "MS" } +{ "_id" : "38855", "city" : "MANTACHIE", "loc" : [ -88.49603399999999, 34.358677 ], "pop" : 4273, "state" : "MS" } +{ "_id" : "38856", "city" : "MARIETTA", "loc" : [ -88.449764, 34.501089 ], "pop" : 1054, "state" : "MS" } +{ "_id" : "38857", "city" : "MOOREVILLE", "loc" : [ -88.59504, 34.280792 ], "pop" : 3880, "state" : "MS" } +{ "_id" : "38858", "city" : "NETTLETON", "loc" : [ -88.60520099999999, 34.082065 ], "pop" : 6781, "state" : "MS" } +{ "_id" : "38859", "city" : "NEW SITE", "loc" : [ -88.43502100000001, 34.561693 ], "pop" : 1187, "state" : "MS" } +{ "_id" : "38860", "city" : "EGYPT", "loc" : [ -88.759843, 33.989015 ], "pop" : 5258, "state" : "MS" } +{ "_id" : "38862", "city" : "PLANTERSVILLE", "loc" : [ -88.633456, 34.201073 ], "pop" : 2913, "state" : "MS" } +{ "_id" : "38863", "city" : "PONTOTOC", "loc" : [ -88.986829, 34.217004 ], "pop" : 10723, "state" : "MS" } +{ "_id" : "38864", "city" : "SAREPTA", "loc" : [ -89.163625, 34.178943 ], "pop" : 2365, "state" : "MS" } +{ "_id" : "38865", "city" : "RIENZI", "loc" : [ -88.579454, 34.796789 ], "pop" : 3162, "state" : "MS" } +{ "_id" : "38866", "city" : "SALTILLO", "loc" : [ -88.66736, 34.383128 ], "pop" : 2324, "state" : "MS" } +{ "_id" : "38868", "city" : "SHANNON", "loc" : [ -88.734206, 34.121035 ], "pop" : 4454, "state" : "MS" } +{ "_id" : "38870", "city" : "SMITHVILLE", "loc" : [ -88.390027, 34.064813 ], "pop" : 1375, "state" : "MS" } +{ "_id" : "38871", "city" : "THAXTON", "loc" : [ -89.15146799999999, 34.313563 ], "pop" : 3171, "state" : "MS" } +{ "_id" : "38873", "city" : "TISHOMINGO", "loc" : [ -88.21939500000001, 34.647753 ], "pop" : 2143, "state" : "MS" } +{ "_id" : "38876", "city" : "TREMONT", "loc" : [ -88.23921199999999, 34.233516 ], "pop" : 871, "state" : "MS" } +{ "_id" : "38878", "city" : "VARDAMAN", "loc" : [ -89.192117, 33.919042 ], "pop" : 2866, "state" : "MS" } +{ "_id" : "38901", "city" : "GRENADA", "loc" : [ -89.80873800000001, 33.775094 ], "pop" : 12322, "state" : "MS" } +{ "_id" : "38912", "city" : "AVALON", "loc" : [ -90.022077, 33.633683 ], "pop" : 782, "state" : "MS" } +{ "_id" : "38913", "city" : "BANNER", "loc" : [ -89.41538300000001, 34.094911 ], "pop" : 819, "state" : "MS" } +{ "_id" : "38914", "city" : "BIG CREEK", "loc" : [ -89.437833, 33.851359 ], "pop" : 461, "state" : "MS" } +{ "_id" : "38915", "city" : "BRUCE", "loc" : [ -89.348387, 34.006628 ], "pop" : 4085, "state" : "MS" } +{ "_id" : "38916", "city" : "CALHOUN CITY", "loc" : [ -89.317809, 33.840776 ], "pop" : 5416, "state" : "MS" } +{ "_id" : "38917", "city" : "CARROLLTON", "loc" : [ -89.950633, 33.520765 ], "pop" : 2683, "state" : "MS" } +{ "_id" : "38920", "city" : "CASCILLA", "loc" : [ -90.036163, 33.907905 ], "pop" : 2101, "state" : "MS" } +{ "_id" : "38921", "city" : "CHARLESTON", "loc" : [ -90.111559, 33.972621 ], "pop" : 7077, "state" : "MS" } +{ "_id" : "38922", "city" : "COFFEEVILLE", "loc" : [ -89.67817700000001, 33.921468 ], "pop" : 6937, "state" : "MS" } +{ "_id" : "38923", "city" : "COILA", "loc" : [ -89.991516, 33.373111 ], "pop" : 1529, "state" : "MS" } +{ "_id" : "38924", "city" : "CRUGER", "loc" : [ -90.231577, 33.310977 ], "pop" : 897, "state" : "MS" } +{ "_id" : "38925", "city" : "DUCK HILL", "loc" : [ -89.733425, 33.686475 ], "pop" : 4223, "state" : "MS" } +{ "_id" : "38927", "city" : "ENID", "loc" : [ -90.004392, 34.126345 ], "pop" : 916, "state" : "MS" } +{ "_id" : "38929", "city" : "GORE SPRINGS", "loc" : [ -89.57544900000001, 33.724529 ], "pop" : 261, "state" : "MS" } +{ "_id" : "38930", "city" : "GREENWOOD", "loc" : [ -90.172589, 33.515884 ], "pop" : 27931, "state" : "MS" } +{ "_id" : "38940", "city" : "HOLCOMB", "loc" : [ -89.90195799999999, 33.760385 ], "pop" : 3690, "state" : "MS" } +{ "_id" : "38941", "city" : "ITTA BENA", "loc" : [ -90.339421, 33.479838 ], "pop" : 6178, "state" : "MS" } +{ "_id" : "38943", "city" : "MC CARLEY", "loc" : [ -89.851281, 33.586383 ], "pop" : 941, "state" : "MS" } +{ "_id" : "38944", "city" : "MINTER CITY", "loc" : [ -90.31327, 33.751525 ], "pop" : 1064, "state" : "MS" } +{ "_id" : "38948", "city" : "OAKLAND", "loc" : [ -89.887748, 34.075552 ], "pop" : 1276, "state" : "MS" } +{ "_id" : "38949", "city" : "WATER VALLEY", "loc" : [ -89.421408, 34.176817 ], "pop" : 302, "state" : "MS" } +{ "_id" : "38950", "city" : "PHILIPP", "loc" : [ -90.209086, 33.757391 ], "pop" : 520, "state" : "MS" } +{ "_id" : "38951", "city" : "PITTSBORO", "loc" : [ -89.337622, 33.944326 ], "pop" : 1053, "state" : "MS" } +{ "_id" : "38952", "city" : "SCHLATER", "loc" : [ -90.361976, 33.624439 ], "pop" : 915, "state" : "MS" } +{ "_id" : "38953", "city" : "SCOBEY", "loc" : [ -89.891019, 33.92526 ], "pop" : 228, "state" : "MS" } +{ "_id" : "38954", "city" : "SIDON", "loc" : [ -90.177937, 33.40946 ], "pop" : 2212, "state" : "MS" } +{ "_id" : "38961", "city" : "TILLATOBA", "loc" : [ -89.89446100000001, 33.985229 ], "pop" : 621, "state" : "MS" } +{ "_id" : "38963", "city" : "TUTWILER", "loc" : [ -90.37534100000001, 33.98195 ], "pop" : 4627, "state" : "MS" } +{ "_id" : "38964", "city" : "VANCE", "loc" : [ -90.375246, 34.093639 ], "pop" : 299, "state" : "MS" } +{ "_id" : "38965", "city" : "WATER VALLEY", "loc" : [ -89.637986, 34.152466 ], "pop" : 5850, "state" : "MS" } +{ "_id" : "38967", "city" : "WINONA", "loc" : [ -89.727655, 33.485753 ], "pop" : 7877, "state" : "MS" } +{ "_id" : "39038", "city" : "BELZONI", "loc" : [ -90.492435, 33.18421 ], "pop" : 7600, "state" : "MS" } +{ "_id" : "39039", "city" : "BENTON", "loc" : [ -90.281516, 32.815772 ], "pop" : 1114, "state" : "MS" } +{ "_id" : "39040", "city" : "BENTONIA", "loc" : [ -90.372156, 32.700015 ], "pop" : 4325, "state" : "MS" } +{ "_id" : "39041", "city" : "BOLTON", "loc" : [ -90.447436, 32.377751 ], "pop" : 3484, "state" : "MS" } +{ "_id" : "39042", "city" : "BRANDON", "loc" : [ -89.964029, 32.303803 ], "pop" : 41141, "state" : "MS" } +{ "_id" : "39044", "city" : "BRAXTON", "loc" : [ -89.967225, 32.001581 ], "pop" : 1704, "state" : "MS" } +{ "_id" : "39045", "city" : "CAMDEN", "loc" : [ -89.892838, 32.794832 ], "pop" : 1835, "state" : "MS" } +{ "_id" : "39046", "city" : "CANTON", "loc" : [ -90.006079, 32.620543 ], "pop" : 21725, "state" : "MS" } +{ "_id" : "39049", "city" : "CARLISLE", "loc" : [ -90.779904, 32.101322 ], "pop" : 334, "state" : "MS" } +{ "_id" : "39051", "city" : "EDINBURG", "loc" : [ -89.535274, 32.788635 ], "pop" : 11122, "state" : "MS" } +{ "_id" : "39055", "city" : "CHURCH HILL", "loc" : [ -91.21490300000001, 31.67864 ], "pop" : 1079, "state" : "MS" } +{ "_id" : "39056", "city" : "CLINTON", "loc" : [ -90.32289299999999, 32.341079 ], "pop" : 25262, "state" : "MS" } +{ "_id" : "39057", "city" : "CONEHATTA", "loc" : [ -89.268956, 32.466974 ], "pop" : 2117, "state" : "MS" } +{ "_id" : "39059", "city" : "CRYSTAL SPRINGS", "loc" : [ -90.374439, 31.993329 ], "pop" : 10787, "state" : "MS" } +{ "_id" : "39063", "city" : "DURANT", "loc" : [ -89.86116, 33.082756 ], "pop" : 3459, "state" : "MS" } +{ "_id" : "39066", "city" : "EDWARDS", "loc" : [ -90.598392, 32.316008 ], "pop" : 4144, "state" : "MS" } +{ "_id" : "39067", "city" : "ETHEL", "loc" : [ -89.49470700000001, 33.152587 ], "pop" : 2047, "state" : "MS" } +{ "_id" : "39069", "city" : "FAYETTE", "loc" : [ -91.058226, 31.712058 ], "pop" : 6319, "state" : "MS" } +{ "_id" : "39071", "city" : "FLORA", "loc" : [ -90.32350599999999, 32.557832 ], "pop" : 3973, "state" : "MS" } +{ "_id" : "39073", "city" : "FLORENCE", "loc" : [ -90.121672, 32.153002 ], "pop" : 14251, "state" : "MS" } +{ "_id" : "39074", "city" : "FOREST", "loc" : [ -89.467201, 32.346999 ], "pop" : 6588, "state" : "MS" } +{ "_id" : "39078", "city" : "GEORGETOWN", "loc" : [ -90.21273600000001, 31.855198 ], "pop" : 2065, "state" : "MS" } +{ "_id" : "39079", "city" : "GOODMAN", "loc" : [ -89.982145, 32.972133 ], "pop" : 3487, "state" : "MS" } +{ "_id" : "39082", "city" : "HARRISVILLE", "loc" : [ -90.10535900000001, 31.967552 ], "pop" : 2885, "state" : "MS" } +{ "_id" : "39083", "city" : "HAZLEHURST", "loc" : [ -90.405078, 31.856188 ], "pop" : 12269, "state" : "MS" } +{ "_id" : "39086", "city" : "HERMANVILLE", "loc" : [ -90.844588, 31.956374 ], "pop" : 1683, "state" : "MS" } +{ "_id" : "39088", "city" : "HOLLY BLUFF", "loc" : [ -90.704486, 32.824216 ], "pop" : 218, "state" : "MS" } +{ "_id" : "39090", "city" : "KOSCIUSKO", "loc" : [ -89.572351, 33.0446 ], "pop" : 11597, "state" : "MS" } +{ "_id" : "39092", "city" : "LAKE", "loc" : [ -89.341354, 32.345909 ], "pop" : 704, "state" : "MS" } +{ "_id" : "39094", "city" : "LENA", "loc" : [ -89.549435, 32.644588 ], "pop" : 3622, "state" : "MS" } +{ "_id" : "39095", "city" : "LEXINGTON", "loc" : [ -90.055674, 33.125043 ], "pop" : 7252, "state" : "MS" } +{ "_id" : "39096", "city" : "LORMAN", "loc" : [ -91.095691, 31.838257 ], "pop" : 668, "state" : "MS" } +{ "_id" : "39097", "city" : "LOUISE", "loc" : [ -90.589321, 32.991945 ], "pop" : 1670, "state" : "MS" } +{ "_id" : "39108", "city" : "MC COOL", "loc" : [ -89.326806, 33.163206 ], "pop" : 1438, "state" : "MS" } +{ "_id" : "39109", "city" : "MADDEN", "loc" : [ -89.38170100000001, 32.708665 ], "pop" : 1586, "state" : "MS" } +{ "_id" : "39110", "city" : "MADISON", "loc" : [ -90.108744, 32.467065 ], "pop" : 12100, "state" : "MS" } +{ "_id" : "39111", "city" : "MAGEE", "loc" : [ -89.750325, 31.849513 ], "pop" : 7590, "state" : "MS" } +{ "_id" : "39113", "city" : "MAYERSVILLE", "loc" : [ -91.028628, 32.901276 ], "pop" : 1657, "state" : "MS" } +{ "_id" : "39114", "city" : "MENDENHALL", "loc" : [ -89.809494, 31.949425 ], "pop" : 10110, "state" : "MS" } +{ "_id" : "39116", "city" : "MIZE", "loc" : [ -89.574135, 31.847285 ], "pop" : 2858, "state" : "MS" } +{ "_id" : "39117", "city" : "MORTON", "loc" : [ -89.551222, 32.436105 ], "pop" : 15400, "state" : "MS" } +{ "_id" : "39119", "city" : "MOUNT OLIVE", "loc" : [ -89.672387, 31.734582 ], "pop" : 3060, "state" : "MS" } +{ "_id" : "39120", "city" : "NATCHEZ", "loc" : [ -91.364214, 31.54924 ], "pop" : 34738, "state" : "MS" } +{ "_id" : "39140", "city" : "NEWHEBRON", "loc" : [ -90.01526, 31.73004 ], "pop" : 1184, "state" : "MS" } +{ "_id" : "39144", "city" : "PATTISON", "loc" : [ -90.828306, 31.851025 ], "pop" : 855, "state" : "MS" } +{ "_id" : "39145", "city" : "PELAHATCHIE", "loc" : [ -89.79134999999999, 32.317994 ], "pop" : 1661, "state" : "MS" } +{ "_id" : "39146", "city" : "PICKENS", "loc" : [ -89.973707, 32.890519 ], "pop" : 1574, "state" : "MS" } +{ "_id" : "39149", "city" : "PINOLA", "loc" : [ -90.008775, 31.827732 ], "pop" : 1664, "state" : "MS" } +{ "_id" : "39150", "city" : "PORT GIBSON", "loc" : [ -91.02303000000001, 31.926604 ], "pop" : 8498, "state" : "MS" } +{ "_id" : "39152", "city" : "PULASKI", "loc" : [ -89.650521, 32.270845 ], "pop" : 1447, "state" : "MS" } +{ "_id" : "39153", "city" : "RALEIGH", "loc" : [ -89.50881800000001, 32.05084 ], "pop" : 8944, "state" : "MS" } +{ "_id" : "39154", "city" : "LEARNED", "loc" : [ -90.424088, 32.23922 ], "pop" : 7530, "state" : "MS" } +{ "_id" : "39156", "city" : "REDWOOD", "loc" : [ -90.785899, 32.486699 ], "pop" : 912, "state" : "MS" } +{ "_id" : "39157", "city" : "RIDGELAND", "loc" : [ -90.12069700000001, 32.412165 ], "pop" : 13226, "state" : "MS" } +{ "_id" : "39159", "city" : "ROLLING FORK", "loc" : [ -90.883274, 32.873317 ], "pop" : 4509, "state" : "MS" } +{ "_id" : "39160", "city" : "SALLIS", "loc" : [ -89.755182, 33.000981 ], "pop" : 3093, "state" : "MS" } +{ "_id" : "39162", "city" : "SATARTIA", "loc" : [ -90.596458, 32.612515 ], "pop" : 496, "state" : "MS" } +{ "_id" : "39166", "city" : "SILVER CITY", "loc" : [ -90.49279799999999, 33.05071 ], "pop" : 1190, "state" : "MS" } +{ "_id" : "39168", "city" : "TAYLORSVILLE", "loc" : [ -89.404875, 31.839388 ], "pop" : 2996, "state" : "MS" } +{ "_id" : "39169", "city" : "TCHULA", "loc" : [ -90.250012, 33.162388 ], "pop" : 3976, "state" : "MS" } +{ "_id" : "39170", "city" : "TERRY", "loc" : [ -90.32414300000001, 32.114683 ], "pop" : 5538, "state" : "MS" } +{ "_id" : "39175", "city" : "UTICA", "loc" : [ -90.604724, 32.122897 ], "pop" : 4630, "state" : "MS" } +{ "_id" : "39176", "city" : "VAIDEN", "loc" : [ -89.757023, 33.33433 ], "pop" : 1987, "state" : "MS" } +{ "_id" : "39177", "city" : "VALLEY PARK", "loc" : [ -90.854209, 32.632258 ], "pop" : 252, "state" : "MS" } +{ "_id" : "39179", "city" : "PICKENS", "loc" : [ -90.085477, 32.817424 ], "pop" : 1417, "state" : "MS" } +{ "_id" : "39180", "city" : "VICKSBURG", "loc" : [ -90.85065, 32.325824 ], "pop" : 46968, "state" : "MS" } +{ "_id" : "39189", "city" : "WALNUT GROVE", "loc" : [ -89.410538, 32.613418 ], "pop" : 2098, "state" : "MS" } +{ "_id" : "39191", "city" : "WESSON", "loc" : [ -90.413106, 31.690055 ], "pop" : 4187, "state" : "MS" } +{ "_id" : "39192", "city" : "WEST", "loc" : [ -89.769526, 33.1883 ], "pop" : 2069, "state" : "MS" } +{ "_id" : "39194", "city" : "YAZOO CITY", "loc" : [ -90.40314499999999, 32.85937 ], "pop" : 17936, "state" : "MS" } +{ "_id" : "39201", "city" : "JACKSON", "loc" : [ -90.186655, 32.293502 ], "pop" : 771, "state" : "MS" } +{ "_id" : "39202", "city" : "JACKSON", "loc" : [ -90.178194, 32.314883 ], "pop" : 10979, "state" : "MS" } +{ "_id" : "39203", "city" : "JACKSON", "loc" : [ -90.20206399999999, 32.308145 ], "pop" : 15641, "state" : "MS" } +{ "_id" : "39204", "city" : "JACKSON", "loc" : [ -90.23057900000001, 32.283162 ], "pop" : 19655, "state" : "MS" } +{ "_id" : "39206", "city" : "JACKSON", "loc" : [ -90.173787, 32.369956 ], "pop" : 25312, "state" : "MS" } +{ "_id" : "39208", "city" : "PEARL", "loc" : [ -90.10271400000001, 32.276837 ], "pop" : 25545, "state" : "MS" } +{ "_id" : "39209", "city" : "JACKSON", "loc" : [ -90.244626, 32.318422 ], "pop" : 34407, "state" : "MS" } +{ "_id" : "39211", "city" : "JACKSON", "loc" : [ -90.12929699999999, 32.373924 ], "pop" : 25567, "state" : "MS" } +{ "_id" : "39212", "city" : "JACKSON", "loc" : [ -90.261201, 32.24347 ], "pop" : 35321, "state" : "MS" } +{ "_id" : "39213", "city" : "JACKSON", "loc" : [ -90.217099, 32.355288 ], "pop" : 33311, "state" : "MS" } +{ "_id" : "39216", "city" : "JACKSON", "loc" : [ -90.17081399999999, 32.338574 ], "pop" : 3824, "state" : "MS" } +{ "_id" : "39218", "city" : "RICHLAND", "loc" : [ -90.15623100000001, 32.215224 ], "pop" : 4563, "state" : "MS" } +{ "_id" : "39269", "city" : "JACKSON", "loc" : [ -90.188503, 32.30085 ], "pop" : 0, "state" : "MS" } +{ "_id" : "39301", "city" : "MERIDIAN", "loc" : [ -88.655973, 32.357441 ], "pop" : 28014, "state" : "MS" } +{ "_id" : "39305", "city" : "MERIDIAN", "loc" : [ -88.67832199999999, 32.440129 ], "pop" : 16175, "state" : "MS" } +{ "_id" : "39307", "city" : "MERIDIAN", "loc" : [ -88.74359800000001, 32.373591 ], "pop" : 20402, "state" : "MS" } +{ "_id" : "39320", "city" : "BAILEY", "loc" : [ -88.69908599999999, 32.475417 ], "pop" : 2495, "state" : "MS" } +{ "_id" : "39322", "city" : "BUCKATUNNA", "loc" : [ -88.52573, 31.507976 ], "pop" : 2477, "state" : "MS" } +{ "_id" : "39323", "city" : "CHUNKY", "loc" : [ -88.946968, 32.247156 ], "pop" : 79, "state" : "MS" } +{ "_id" : "39325", "city" : "COLLINSVILLE", "loc" : [ -88.815532, 32.518278 ], "pop" : 4385, "state" : "MS" } +{ "_id" : "39326", "city" : "DALEVILLE", "loc" : [ -88.66094200000001, 32.551124 ], "pop" : 549, "state" : "MS" } +{ "_id" : "39327", "city" : "DECATUR", "loc" : [ -89.116832, 32.435798 ], "pop" : 3595, "state" : "MS" } +{ "_id" : "39328", "city" : "DE KALB", "loc" : [ -88.733158, 32.716235 ], "pop" : 5219, "state" : "MS" } +{ "_id" : "39330", "city" : "ENTERPRISE", "loc" : [ -88.84735000000001, 32.156266 ], "pop" : 1444, "state" : "MS" } +{ "_id" : "39332", "city" : "HICKORY", "loc" : [ -89.009254, 32.320012 ], "pop" : 2504, "state" : "MS" } +{ "_id" : "39335", "city" : "LAUDERDALE", "loc" : [ -88.495569, 32.502186 ], "pop" : 2190, "state" : "MS" } +{ "_id" : "39336", "city" : "LAWRENCE", "loc" : [ -89.27243199999999, 32.287614 ], "pop" : 86, "state" : "MS" } +{ "_id" : "39337", "city" : "LITTLE ROCK", "loc" : [ -89.181382, 32.540288 ], "pop" : 896, "state" : "MS" } +{ "_id" : "39338", "city" : "LOUIN", "loc" : [ -89.21993500000001, 32.099713 ], "pop" : 1991, "state" : "MS" } +{ "_id" : "39339", "city" : "LOUISVILLE", "loc" : [ -89.02865300000001, 33.105824 ], "pop" : 16290, "state" : "MS" } +{ "_id" : "39341", "city" : "MACON", "loc" : [ -88.578093, 33.102674 ], "pop" : 6634, "state" : "MS" } +{ "_id" : "39345", "city" : "NEWTON", "loc" : [ -89.18395099999999, 32.324448 ], "pop" : 6779, "state" : "MS" } +{ "_id" : "39346", "city" : "NOXAPATER", "loc" : [ -89.12207600000001, 32.97895 ], "pop" : 2870, "state" : "MS" } +{ "_id" : "39347", "city" : "PACHUTA", "loc" : [ -88.86529299999999, 32.008105 ], "pop" : 916, "state" : "MS" } +{ "_id" : "39348", "city" : "PAULDING", "loc" : [ -89.058441, 32.016744 ], "pop" : 485, "state" : "MS" } +{ "_id" : "39350", "city" : "PHILADELPHIA", "loc" : [ -89.115371, 32.757224 ], "pop" : 24316, "state" : "MS" } +{ "_id" : "39352", "city" : "PORTERVILLE", "loc" : [ -88.498425, 32.636833 ], "pop" : 1202, "state" : "MS" } +{ "_id" : "39354", "city" : "PRESTON", "loc" : [ -88.813013, 32.853659 ], "pop" : 1937, "state" : "MS" } +{ "_id" : "39355", "city" : "QUITMAN", "loc" : [ -88.678803, 32.066845 ], "pop" : 8822, "state" : "MS" } +{ "_id" : "39356", "city" : "ROSE HILL", "loc" : [ -89.001053, 32.148931 ], "pop" : 1725, "state" : "MS" } +{ "_id" : "39358", "city" : "SCOOBA", "loc" : [ -88.48827199999999, 32.840197 ], "pop" : 2087, "state" : "MS" } +{ "_id" : "39360", "city" : "MATHERVILLE", "loc" : [ -88.725866, 31.903082 ], "pop" : 3442, "state" : "MS" } +{ "_id" : "39361", "city" : "SHUQUALAK", "loc" : [ -88.559393, 32.976933 ], "pop" : 1323, "state" : "MS" } +{ "_id" : "39362", "city" : "STATE LINE", "loc" : [ -88.51711, 31.391619 ], "pop" : 1382, "state" : "MS" } +{ "_id" : "39363", "city" : "STONEWALL", "loc" : [ -88.774827, 32.156396 ], "pop" : 2690, "state" : "MS" } +{ "_id" : "39364", "city" : "TOOMSUBA", "loc" : [ -88.489225, 32.429583 ], "pop" : 1346, "state" : "MS" } +{ "_id" : "39365", "city" : "UNION", "loc" : [ -89.049522, 32.537329 ], "pop" : 4684, "state" : "MS" } +{ "_id" : "39366", "city" : "VOSSBURG", "loc" : [ -88.969598, 31.972301 ], "pop" : 1357, "state" : "MS" } +{ "_id" : "39367", "city" : "WAYNESBORO", "loc" : [ -88.67822099999999, 31.675447 ], "pop" : 17046, "state" : "MS" } +{ "_id" : "39401", "city" : "HATTIESBURG", "loc" : [ -89.306471, 31.314553 ], "pop" : 41866, "state" : "MS" } +{ "_id" : "39402", "city" : "HATTIESBURG", "loc" : [ -89.37751, 31.309753 ], "pop" : 25479, "state" : "MS" } +{ "_id" : "39421", "city" : "BASSFIELD", "loc" : [ -89.702735, 31.503695 ], "pop" : 3605, "state" : "MS" } +{ "_id" : "39422", "city" : "BAY SPRINGS", "loc" : [ -89.233768, 31.944939 ], "pop" : 6778, "state" : "MS" } +{ "_id" : "39423", "city" : "BEAUMONT", "loc" : [ -88.905492, 31.136763 ], "pop" : 1883, "state" : "MS" } +{ "_id" : "39425", "city" : "BROOKLYN", "loc" : [ -89.23372000000001, 30.998852 ], "pop" : 2080, "state" : "MS" } +{ "_id" : "39426", "city" : "CARRIERE", "loc" : [ -89.57792999999999, 30.617772 ], "pop" : 12978, "state" : "MS" } +{ "_id" : "39427", "city" : "CARSON", "loc" : [ -89.77582099999999, 31.558501 ], "pop" : 1381, "state" : "MS" } +{ "_id" : "39428", "city" : "COLLINS", "loc" : [ -89.543809, 31.670712 ], "pop" : 9457, "state" : "MS" } +{ "_id" : "39429", "city" : "COLUMBIA", "loc" : [ -89.799785, 31.255877 ], "pop" : 19891, "state" : "MS" } +{ "_id" : "39437", "city" : "ELLISVILLE", "loc" : [ -89.223073, 31.579663 ], "pop" : 10632, "state" : "MS" } +{ "_id" : "39439", "city" : "HEIDELBERG", "loc" : [ -88.998052, 31.882031 ], "pop" : 3416, "state" : "MS" } +{ "_id" : "39440", "city" : "LAUREL", "loc" : [ -89.13115500000001, 31.705444 ], "pop" : 45040, "state" : "MS" } +{ "_id" : "39451", "city" : "LEAKESVILLE", "loc" : [ -88.559546, 31.123825 ], "pop" : 4858, "state" : "MS" } +{ "_id" : "39452", "city" : "AGRICOLA", "loc" : [ -88.593391, 30.866722 ], "pop" : 17844, "state" : "MS" } +{ "_id" : "39455", "city" : "LUMBERTON", "loc" : [ -89.45425400000001, 31.053356 ], "pop" : 6096, "state" : "MS" } +{ "_id" : "39456", "city" : "LEAF", "loc" : [ -88.81947, 31.078449 ], "pop" : 1061, "state" : "MS" } +{ "_id" : "39459", "city" : "MOSELLE", "loc" : [ -89.320633, 31.483626 ], "pop" : 2350, "state" : "MS" } +{ "_id" : "39461", "city" : "NEELY", "loc" : [ -88.71983, 31.179325 ], "pop" : 1059, "state" : "MS" } +{ "_id" : "39462", "city" : "NEW AUGUSTA", "loc" : [ -89.028611, 31.130907 ], "pop" : 2152, "state" : "MS" } +{ "_id" : "39464", "city" : "OVETT", "loc" : [ -89.039613, 31.47377 ], "pop" : 1113, "state" : "MS" } +{ "_id" : "39465", "city" : "PETAL", "loc" : [ -89.222239, 31.347181 ], "pop" : 15799, "state" : "MS" } +{ "_id" : "39466", "city" : "PICAYUNE", "loc" : [ -89.69102100000001, 30.541796 ], "pop" : 20116, "state" : "MS" } +{ "_id" : "39470", "city" : "POPLARVILLE", "loc" : [ -89.564751, 30.852362 ], "pop" : 7682, "state" : "MS" } +{ "_id" : "39474", "city" : "PRENTISS", "loc" : [ -89.873497, 31.605655 ], "pop" : 9065, "state" : "MS" } +{ "_id" : "39475", "city" : "PURVIS", "loc" : [ -89.462301, 31.149562 ], "pop" : 4493, "state" : "MS" } +{ "_id" : "39476", "city" : "RICHTON", "loc" : [ -88.910079, 31.343364 ], "pop" : 7378, "state" : "MS" } +{ "_id" : "39478", "city" : "SANDY HOOK", "loc" : [ -89.818343, 31.047904 ], "pop" : 448, "state" : "MS" } +{ "_id" : "39479", "city" : "SEMINARY", "loc" : [ -89.481585, 31.528485 ], "pop" : 4010, "state" : "MS" } +{ "_id" : "39480", "city" : "SOSO", "loc" : [ -89.308223, 31.75941 ], "pop" : 2890, "state" : "MS" } +{ "_id" : "39481", "city" : "STRINGER", "loc" : [ -89.26214400000001, 31.844721 ], "pop" : 1367, "state" : "MS" } +{ "_id" : "39482", "city" : "SUMRALL", "loc" : [ -89.57772300000001, 31.359972 ], "pop" : 4741, "state" : "MS" } +{ "_id" : "39483", "city" : "FOXWORTH", "loc" : [ -89.93107500000001, 31.247325 ], "pop" : 4317, "state" : "MS" } +{ "_id" : "39501", "city" : "GULFPORT", "loc" : [ -89.097618, 30.382556 ], "pop" : 25894, "state" : "MS" } +{ "_id" : "39503", "city" : "GULFPORT", "loc" : [ -89.08855200000001, 30.460105 ], "pop" : 26830, "state" : "MS" } +{ "_id" : "39507", "city" : "GULFPORT", "loc" : [ -89.035347, 30.396248 ], "pop" : 18144, "state" : "MS" } +{ "_id" : "39520", "city" : "DIAMONDHEAD", "loc" : [ -89.397356, 30.324275 ], "pop" : 20156, "state" : "MS" } +{ "_id" : "39530", "city" : "BILOXI", "loc" : [ -88.897143, 30.403478 ], "pop" : 22245, "state" : "MS" } +{ "_id" : "39531", "city" : "BILOXI", "loc" : [ -88.960499, 30.40334 ], "pop" : 18541, "state" : "MS" } +{ "_id" : "39532", "city" : "NORTH BAY", "loc" : [ -88.918846, 30.452031 ], "pop" : 25296, "state" : "MS" } +{ "_id" : "39553", "city" : "GAUTIER", "loc" : [ -88.64117299999999, 30.398032 ], "pop" : 13240, "state" : "MS" } +{ "_id" : "39560", "city" : "LONG BEACH", "loc" : [ -89.16457699999999, 30.359756 ], "pop" : 17826, "state" : "MS" } +{ "_id" : "39561", "city" : "MC HENRY", "loc" : [ -89.153631, 30.697463 ], "pop" : 375, "state" : "MS" } +{ "_id" : "39563", "city" : "KREOLE", "loc" : [ -88.526015, 30.402773 ], "pop" : 15657, "state" : "MS" } +{ "_id" : "39564", "city" : "OCEAN SPRINGS", "loc" : [ -88.78009900000001, 30.440433 ], "pop" : 34238, "state" : "MS" } +{ "_id" : "39567", "city" : "PASCAGOULA", "loc" : [ -88.51647199999999, 30.530301 ], "pop" : 16025, "state" : "MS" } +{ "_id" : "39571", "city" : "PASS CHRISTIAN", "loc" : [ -89.28426899999999, 30.398918 ], "pop" : 14427, "state" : "MS" } +{ "_id" : "39573", "city" : "PERKINSTON", "loc" : [ -89.139985, 30.76686 ], "pop" : 3743, "state" : "MS" } +{ "_id" : "39574", "city" : "SAUCIER", "loc" : [ -89.147729, 30.596082 ], "pop" : 6520, "state" : "MS" } +{ "_id" : "39576", "city" : "WAVELAND", "loc" : [ -89.383679, 30.29138 ], "pop" : 5967, "state" : "MS" } +{ "_id" : "39577", "city" : "WIGGINS", "loc" : [ -89.132369, 30.86095 ], "pop" : 6632, "state" : "MS" } +{ "_id" : "39581", "city" : "PASCAGOULA", "loc" : [ -88.52885999999999, 30.366377 ], "pop" : 27619, "state" : "MS" } +{ "_id" : "39601", "city" : "BROOKHAVEN", "loc" : [ -90.451995, 31.58581 ], "pop" : 20910, "state" : "MS" } +{ "_id" : "39629", "city" : "BOGUE CHITTO", "loc" : [ -90.47318300000001, 31.456344 ], "pop" : 7068, "state" : "MS" } +{ "_id" : "39631", "city" : "CENTREVILLE", "loc" : [ -91.095985, 31.089329 ], "pop" : 4055, "state" : "MS" } +{ "_id" : "39633", "city" : "CROSBY", "loc" : [ -91.023712, 31.299406 ], "pop" : 574, "state" : "MS" } +{ "_id" : "39638", "city" : "GLOSTER", "loc" : [ -90.92404500000001, 31.19033 ], "pop" : 6389, "state" : "MS" } +{ "_id" : "39641", "city" : "JAYESS", "loc" : [ -90.186386, 31.403577 ], "pop" : 1621, "state" : "MS" } +{ "_id" : "39643", "city" : "KOKOMO", "loc" : [ -89.98241899999999, 31.177688 ], "pop" : 888, "state" : "MS" } +{ "_id" : "39645", "city" : "LIBERTY", "loc" : [ -90.71334899999999, 31.138427 ], "pop" : 2950, "state" : "MS" } +{ "_id" : "39647", "city" : "MC CALL CREEK", "loc" : [ -90.783581, 31.490772 ], "pop" : 3017, "state" : "MS" } +{ "_id" : "39648", "city" : "MC COMB", "loc" : [ -90.43244900000001, 31.221594 ], "pop" : 23551, "state" : "MS" } +{ "_id" : "39652", "city" : "MAGNOLIA", "loc" : [ -90.48311, 31.121745 ], "pop" : 7831, "state" : "MS" } +{ "_id" : "39653", "city" : "MEADVILLE", "loc" : [ -90.85783499999999, 31.428489 ], "pop" : 1673, "state" : "MS" } +{ "_id" : "39654", "city" : "MONTICELLO", "loc" : [ -90.12796, 31.523776 ], "pop" : 4517, "state" : "MS" } +{ "_id" : "39656", "city" : "OAK VALE", "loc" : [ -89.98273, 31.441953 ], "pop" : 321, "state" : "MS" } +{ "_id" : "39657", "city" : "OSYKA", "loc" : [ -90.478977, 31.021747 ], "pop" : 1143, "state" : "MS" } +{ "_id" : "39661", "city" : "ROXIE", "loc" : [ -91.06247500000001, 31.504043 ], "pop" : 3526, "state" : "MS" } +{ "_id" : "39662", "city" : "RUTH", "loc" : [ -90.28667299999999, 31.379495 ], "pop" : 415, "state" : "MS" } +{ "_id" : "39663", "city" : "SILVER CREEK", "loc" : [ -90.017332, 31.575535 ], "pop" : 2862, "state" : "MS" } +{ "_id" : "39664", "city" : "SMITHDALE", "loc" : [ -90.675236, 31.367203 ], "pop" : 1247, "state" : "MS" } +{ "_id" : "39665", "city" : "SONTAG", "loc" : [ -90.180125, 31.645313 ], "pop" : 1953, "state" : "MS" } +{ "_id" : "39666", "city" : "SUMMIT", "loc" : [ -90.46542700000001, 31.29752 ], "pop" : 6696, "state" : "MS" } +{ "_id" : "39667", "city" : "TYLERTOWN", "loc" : [ -90.116918, 31.146552 ], "pop" : 14352, "state" : "MS" } +{ "_id" : "39668", "city" : "UNION CHURCH", "loc" : [ -90.82592200000001, 31.710474 ], "pop" : 587, "state" : "MS" } +{ "_id" : "39669", "city" : "WOODVILLE", "loc" : [ -91.307596, 31.145913 ], "pop" : 6400, "state" : "MS" } +{ "_id" : "39701", "city" : "COLUMBUS", "loc" : [ -88.426194, 33.537699 ], "pop" : 32609, "state" : "MS" } +{ "_id" : "39702", "city" : "COLUMBUS", "loc" : [ -88.35538699999999, 33.481175 ], "pop" : 21004, "state" : "MS" } +{ "_id" : "39730", "city" : "ABERDEEN", "loc" : [ -88.538033, 33.828439 ], "pop" : 15769, "state" : "MS" } +{ "_id" : "39735", "city" : "ACKERMAN", "loc" : [ -89.20139, 33.351684 ], "pop" : 5027, "state" : "MS" } +{ "_id" : "39739", "city" : "BROOKSVILLE", "loc" : [ -88.501351, 33.213961 ], "pop" : 4598, "state" : "MS" } +{ "_id" : "39740", "city" : "CALEDONIA", "loc" : [ -88.314537, 33.686461 ], "pop" : 2008, "state" : "MS" } +{ "_id" : "39741", "city" : "CEDARBLUFF", "loc" : [ -88.826712, 33.61616 ], "pop" : 1063, "state" : "MS" } +{ "_id" : "39743", "city" : "CRAWFORD", "loc" : [ -88.56711900000001, 33.321922 ], "pop" : 2310, "state" : "MS" } +{ "_id" : "39744", "city" : "TOMNOLEN", "loc" : [ -89.304542, 33.568908 ], "pop" : 5686, "state" : "MS" } +{ "_id" : "39745", "city" : "FRENCH CAMP", "loc" : [ -89.39458500000001, 33.338319 ], "pop" : 1426, "state" : "MS" } +{ "_id" : "39746", "city" : "HAMILTON", "loc" : [ -88.44784, 33.801141 ], "pop" : 726, "state" : "MS" } +{ "_id" : "39747", "city" : "KILMICHAEL", "loc" : [ -89.569577, 33.416476 ], "pop" : 2351, "state" : "MS" } +{ "_id" : "39750", "city" : "MABEN", "loc" : [ -89.065887, 33.526179 ], "pop" : 1286, "state" : "MS" } +{ "_id" : "39751", "city" : "MANTEE", "loc" : [ -89.122906, 33.665493 ], "pop" : 1813, "state" : "MS" } +{ "_id" : "39752", "city" : "MATHISTON", "loc" : [ -89.12747899999999, 33.541493 ], "pop" : 3213, "state" : "MS" } +{ "_id" : "39755", "city" : "PHEBA", "loc" : [ -88.951842, 33.596056 ], "pop" : 740, "state" : "MS" } +{ "_id" : "39756", "city" : "PRAIRIE", "loc" : [ -88.63346300000001, 33.795113 ], "pop" : 135, "state" : "MS" } +{ "_id" : "39759", "city" : "SESSUMS", "loc" : [ -88.817637, 33.450125 ], "pop" : 36268, "state" : "MS" } +{ "_id" : "39766", "city" : "STEENS", "loc" : [ -88.327755, 33.56708 ], "pop" : 1377, "state" : "MS" } +{ "_id" : "39767", "city" : "STEWART", "loc" : [ -89.479, 33.510097 ], "pop" : 892, "state" : "MS" } +{ "_id" : "39769", "city" : "STURGIS", "loc" : [ -89.04727, 33.35702 ], "pop" : 814, "state" : "MS" } +{ "_id" : "39772", "city" : "WEIR", "loc" : [ -89.28041899999999, 33.264464 ], "pop" : 1402, "state" : "MS" } +{ "_id" : "39773", "city" : "WEST POINT", "loc" : [ -88.68226, 33.626496 ], "pop" : 19317, "state" : "MS" } +{ "_id" : "39776", "city" : "WOODLAND", "loc" : [ -89.02555700000001, 33.80661 ], "pop" : 2276, "state" : "MS" } +{ "_id" : "40003", "city" : "BAGDAD", "loc" : [ -85.06514199999999, 38.260811 ], "pop" : 1272, "state" : "KY" } +{ "_id" : "40004", "city" : "BARDSTOWN", "loc" : [ -85.461343, 37.80835 ], "pop" : 16176, "state" : "KY" } +{ "_id" : "40006", "city" : "BEDFORD", "loc" : [ -85.31333100000001, 38.586363 ], "pop" : 3359, "state" : "KY" } +{ "_id" : "40007", "city" : "BETHLEHEM", "loc" : [ -85.064874, 38.402433 ], "pop" : 353, "state" : "KY" } +{ "_id" : "40008", "city" : "BLOOMFIELD", "loc" : [ -85.286209, 37.907979 ], "pop" : 2461, "state" : "KY" } +{ "_id" : "40009", "city" : "BRADFORDSVILLE", "loc" : [ -85.14359899999999, 37.46622 ], "pop" : 1136, "state" : "KY" } +{ "_id" : "40010", "city" : "BUCKNER", "loc" : [ -85.47405999999999, 38.363008 ], "pop" : 34, "state" : "KY" } +{ "_id" : "40011", "city" : "CAMPBELLSBURG", "loc" : [ -85.16109400000001, 38.523083 ], "pop" : 1960, "state" : "KY" } +{ "_id" : "40012", "city" : "CHAPLIN", "loc" : [ -85.201472, 37.902541 ], "pop" : 443, "state" : "KY" } +{ "_id" : "40013", "city" : "DEATSVILLE", "loc" : [ -85.48415900000001, 37.896386 ], "pop" : 4763, "state" : "KY" } +{ "_id" : "40014", "city" : "CRESTWOOD", "loc" : [ -85.461038, 38.332637 ], "pop" : 10779, "state" : "KY" } +{ "_id" : "40019", "city" : "EMINENCE", "loc" : [ -85.17816000000001, 38.369606 ], "pop" : 2493, "state" : "KY" } +{ "_id" : "40022", "city" : "FINCHVILLE", "loc" : [ -85.347573, 38.156064 ], "pop" : 1040, "state" : "KY" } +{ "_id" : "40023", "city" : "FISHERVILLE", "loc" : [ -85.42822200000001, 38.165154 ], "pop" : 937, "state" : "KY" } +{ "_id" : "40026", "city" : "GOSHEN", "loc" : [ -85.57081599999999, 38.411294 ], "pop" : 3626, "state" : "KY" } +{ "_id" : "40028", "city" : "HOWARDSTOWN", "loc" : [ -85.55476899999999, 37.566393 ], "pop" : 218, "state" : "KY" } +{ "_id" : "40031", "city" : "LA GRANGE", "loc" : [ -85.392819, 38.402897 ], "pop" : 13280, "state" : "KY" } +{ "_id" : "40033", "city" : "LEBANON", "loc" : [ -85.266811, 37.565834 ], "pop" : 10672, "state" : "KY" } +{ "_id" : "40036", "city" : "LOCKPORT", "loc" : [ -84.958635, 38.421874 ], "pop" : 742, "state" : "KY" } +{ "_id" : "40037", "city" : "LORETTO", "loc" : [ -85.411297, 37.642112 ], "pop" : 2586, "state" : "KY" } +{ "_id" : "40040", "city" : "MACKVILLE", "loc" : [ -85.085201, 37.724703 ], "pop" : 1753, "state" : "KY" } +{ "_id" : "40045", "city" : "MILTON", "loc" : [ -85.36593000000001, 38.692489 ], "pop" : 2535, "state" : "KY" } +{ "_id" : "40046", "city" : "MOUNT EDEN", "loc" : [ -85.164114, 38.035238 ], "pop" : 597, "state" : "KY" } +{ "_id" : "40047", "city" : "MOUNT WASHINGTON", "loc" : [ -85.55863100000001, 38.045206 ], "pop" : 8785, "state" : "KY" } +{ "_id" : "40050", "city" : "NEW CASTLE", "loc" : [ -85.175567, 38.437368 ], "pop" : 2017, "state" : "KY" } +{ "_id" : "40051", "city" : "TRAPPIST", "loc" : [ -85.557694, 37.666327 ], "pop" : 3698, "state" : "KY" } +{ "_id" : "40055", "city" : "PENDLETON", "loc" : [ -85.317019, 38.480918 ], "pop" : 975, "state" : "KY" } +{ "_id" : "40056", "city" : "PEWEE VALLEY", "loc" : [ -85.483377, 38.303945 ], "pop" : 2622, "state" : "KY" } +{ "_id" : "40057", "city" : "CROPPER", "loc" : [ -85.087198, 38.358718 ], "pop" : 2669, "state" : "KY" } +{ "_id" : "40059", "city" : "PROSPECT", "loc" : [ -85.608287, 38.355987 ], "pop" : 7454, "state" : "KY" } +{ "_id" : "40060", "city" : "RAYWICK", "loc" : [ -85.43003, 37.537959 ], "pop" : 981, "state" : "KY" } +{ "_id" : "40061", "city" : "SAINT CATHARINE", "loc" : [ -85.27106000000001, 37.699126 ], "pop" : 39, "state" : "KY" } +{ "_id" : "40062", "city" : "SAINT FRANCIS", "loc" : [ -85.464208, 37.628644 ], "pop" : 39, "state" : "KY" } +{ "_id" : "40065", "city" : "SHELBYVILLE", "loc" : [ -85.224271, 38.216222 ], "pop" : 14843, "state" : "KY" } +{ "_id" : "40067", "city" : "SIMPSONVILLE", "loc" : [ -85.354797, 38.231186 ], "pop" : 2443, "state" : "KY" } +{ "_id" : "40068", "city" : "SMITHFIELD", "loc" : [ -85.265579, 38.393308 ], "pop" : 1250, "state" : "KY" } +{ "_id" : "40069", "city" : "MAUD", "loc" : [ -85.24047299999999, 37.701352 ], "pop" : 6314, "state" : "KY" } +{ "_id" : "40070", "city" : "SULPHUR", "loc" : [ -85.252021, 38.492062 ], "pop" : 466, "state" : "KY" } +{ "_id" : "40071", "city" : "TAYLORSVILLE", "loc" : [ -85.38286100000001, 38.047054 ], "pop" : 7048, "state" : "KY" } +{ "_id" : "40075", "city" : "TURNERS STATION", "loc" : [ -85.13251200000001, 38.550361 ], "pop" : 611, "state" : "KY" } +{ "_id" : "40076", "city" : "WADDY", "loc" : [ -85.12882999999999, 38.105445 ], "pop" : 1510, "state" : "KY" } +{ "_id" : "40077", "city" : "WESTPORT", "loc" : [ -85.45242, 38.492068 ], "pop" : 500, "state" : "KY" } +{ "_id" : "40078", "city" : "WILLISBURG", "loc" : [ -85.13618700000001, 37.837333 ], "pop" : 2245, "state" : "KY" } +{ "_id" : "40104", "city" : "BATTLETOWN", "loc" : [ -86.299104, 38.039295 ], "pop" : 2532, "state" : "KY" } +{ "_id" : "40106", "city" : "BIG SPRING", "loc" : [ -86.19179099999999, 37.798795 ], "pop" : 315, "state" : "KY" } +{ "_id" : "40107", "city" : "BOSTON", "loc" : [ -85.619927, 37.763991 ], "pop" : 2589, "state" : "KY" } +{ "_id" : "40108", "city" : "BRANDENBURG", "loc" : [ -86.10835899999999, 37.96624 ], "pop" : 6480, "state" : "KY" } +{ "_id" : "40109", "city" : "BROOKS", "loc" : [ -85.771344, 38.054576 ], "pop" : 4447, "state" : "KY" } +{ "_id" : "40111", "city" : "CLOVERPORT", "loc" : [ -86.595401, 37.822125 ], "pop" : 2852, "state" : "KY" } +{ "_id" : "40114", "city" : "CONSTANTINE", "loc" : [ -86.24009, 37.679412 ], "pop" : 67, "state" : "KY" } +{ "_id" : "40115", "city" : "CUSTER", "loc" : [ -86.271006, 37.742593 ], "pop" : 47, "state" : "KY" } +{ "_id" : "40117", "city" : "EKRON", "loc" : [ -86.154212, 37.91129 ], "pop" : 2565, "state" : "KY" } +{ "_id" : "40118", "city" : "FAIRDALE", "loc" : [ -85.754924, 38.108668 ], "pop" : 8297, "state" : "KY" } +{ "_id" : "40119", "city" : "GLEN DEAN", "loc" : [ -86.51074699999999, 37.569353 ], "pop" : 770, "state" : "KY" } +{ "_id" : "40121", "city" : "FORT KNOX", "loc" : [ -85.948909, 37.892798 ], "pop" : 15407, "state" : "KY" } +{ "_id" : "40140", "city" : "GARFIELD", "loc" : [ -86.316868, 37.814508 ], "pop" : 613, "state" : "KY" } +{ "_id" : "40142", "city" : "GUSTON", "loc" : [ -86.215515, 37.89511 ], "pop" : 1525, "state" : "KY" } +{ "_id" : "40143", "city" : "MOOLEYVILLE", "loc" : [ -86.416856, 37.772548 ], "pop" : 3995, "state" : "KY" } +{ "_id" : "40144", "city" : "LOCUST HILL", "loc" : [ -86.37779, 37.742925 ], "pop" : 1648, "state" : "KY" } +{ "_id" : "40145", "city" : "HUDSON", "loc" : [ -86.301238, 37.650613 ], "pop" : 55, "state" : "KY" } +{ "_id" : "40146", "city" : "IRVINGTON", "loc" : [ -86.29653399999999, 37.876239 ], "pop" : 2335, "state" : "KY" } +{ "_id" : "40150", "city" : "LEBANON JUNCTION", "loc" : [ -85.72464100000001, 37.851054 ], "pop" : 5051, "state" : "KY" } +{ "_id" : "40152", "city" : "MC DANIELS", "loc" : [ -86.397278, 37.595251 ], "pop" : 44, "state" : "KY" } +{ "_id" : "40157", "city" : "PAYNEVILLE", "loc" : [ -86.408164, 38.030128 ], "pop" : 504, "state" : "KY" } +{ "_id" : "40160", "city" : "RADCLIFF", "loc" : [ -85.94040800000001, 37.826652 ], "pop" : 21490, "state" : "KY" } +{ "_id" : "40161", "city" : "RHODELIA", "loc" : [ -86.304079, 37.968538 ], "pop" : 1322, "state" : "KY" } +{ "_id" : "40162", "city" : "RINEYVILLE", "loc" : [ -85.995395, 37.75249 ], "pop" : 4542, "state" : "KY" } +{ "_id" : "40164", "city" : "SE REE", "loc" : [ -86.399176, 37.676018 ], "pop" : 299, "state" : "KY" } +{ "_id" : "40165", "city" : "SHEPHERDSVILLE", "loc" : [ -85.688767, 38.004515 ], "pop" : 18649, "state" : "KY" } +{ "_id" : "40170", "city" : "STEPHENSPORT", "loc" : [ -86.523961, 37.904781 ], "pop" : 134, "state" : "KY" } +{ "_id" : "40171", "city" : "UNION STAR", "loc" : [ -86.461519, 37.961589 ], "pop" : 606, "state" : "KY" } +{ "_id" : "40175", "city" : "VINE GROVE", "loc" : [ -86.006888, 37.858937 ], "pop" : 13294, "state" : "KY" } +{ "_id" : "40176", "city" : "WEBSTER", "loc" : [ -86.403204, 37.923936 ], "pop" : 258, "state" : "KY" } +{ "_id" : "40177", "city" : "WEST POINT", "loc" : [ -85.95450200000001, 37.995408 ], "pop" : 1235, "state" : "KY" } +{ "_id" : "40178", "city" : "WESTVIEW", "loc" : [ -86.427286, 37.679196 ], "pop" : 223, "state" : "KY" } +{ "_id" : "40202", "city" : "LOUISVILLE", "loc" : [ -85.747646, 38.250734 ], "pop" : 5221, "state" : "KY" } +{ "_id" : "40203", "city" : "LOUISVILLE", "loc" : [ -85.762595, 38.245332 ], "pop" : 19432, "state" : "KY" } +{ "_id" : "40204", "city" : "LOUISVILLE", "loc" : [ -85.72493799999999, 38.236936 ], "pop" : 16467, "state" : "KY" } +{ "_id" : "40205", "city" : "LOUISVILLE", "loc" : [ -85.688542, 38.22217 ], "pop" : 24979, "state" : "KY" } +{ "_id" : "40206", "city" : "SAINT MATTHEWS", "loc" : [ -85.697581, 38.256495 ], "pop" : 20604, "state" : "KY" } +{ "_id" : "40207", "city" : "SAINT MATTHEWS", "loc" : [ -85.649689, 38.257908 ], "pop" : 30193, "state" : "KY" } +{ "_id" : "40208", "city" : "LOUISVILLE", "loc" : [ -85.76482300000001, 38.219988 ], "pop" : 13523, "state" : "KY" } +{ "_id" : "40209", "city" : "LOUISVILLE", "loc" : [ -85.751904, 38.190125 ], "pop" : 2752, "state" : "KY" } +{ "_id" : "40210", "city" : "LOUISVILLE", "loc" : [ -85.790548, 38.230585 ], "pop" : 18623, "state" : "KY" } +{ "_id" : "40211", "city" : "LOUISVILLE", "loc" : [ -85.81265, 38.241958 ], "pop" : 26422, "state" : "KY" } +{ "_id" : "40212", "city" : "LOUISVILLE", "loc" : [ -85.804479, 38.265116 ], "pop" : 21605, "state" : "KY" } +{ "_id" : "40213", "city" : "LOUISVILLE", "loc" : [ -85.71064200000001, 38.183929 ], "pop" : 21288, "state" : "KY" } +{ "_id" : "40214", "city" : "LOUISVILLE", "loc" : [ -85.77802699999999, 38.159318 ], "pop" : 42198, "state" : "KY" } +{ "_id" : "40215", "city" : "LOUISVILLE", "loc" : [ -85.784707, 38.191319 ], "pop" : 24661, "state" : "KY" } +{ "_id" : "40216", "city" : "SHIVELY", "loc" : [ -85.831771, 38.186138 ], "pop" : 41719, "state" : "KY" } +{ "_id" : "40217", "city" : "LOUISVILLE", "loc" : [ -85.740371, 38.21736 ], "pop" : 13213, "state" : "KY" } +{ "_id" : "40218", "city" : "BUECHEL", "loc" : [ -85.65483399999999, 38.191084 ], "pop" : 31434, "state" : "KY" } +{ "_id" : "40219", "city" : "OKOLONA", "loc" : [ -85.680548, 38.141291 ], "pop" : 38009, "state" : "KY" } +{ "_id" : "40220", "city" : "LOUISVILLE", "loc" : [ -85.624489, 38.21494 ], "pop" : 29012, "state" : "KY" } +{ "_id" : "40222", "city" : "LYNDON", "loc" : [ -85.611183, 38.263825 ], "pop" : 19924, "state" : "KY" } +{ "_id" : "40223", "city" : "ANCHORAGE", "loc" : [ -85.561151, 38.253688 ], "pop" : 19766, "state" : "KY" } +{ "_id" : "40228", "city" : "BUECHEL", "loc" : [ -85.630967, 38.1392 ], "pop" : 9192, "state" : "KY" } +{ "_id" : "40229", "city" : "OKOLONA", "loc" : [ -85.67188899999999, 38.090655 ], "pop" : 26878, "state" : "KY" } +{ "_id" : "40241", "city" : "LYNDON", "loc" : [ -85.582421, 38.301509 ], "pop" : 14137, "state" : "KY" } +{ "_id" : "40242", "city" : "LYNDON", "loc" : [ -85.59022400000001, 38.276858 ], "pop" : 9742, "state" : "KY" } +{ "_id" : "40243", "city" : "MIDDLETOWN", "loc" : [ -85.537381, 38.240115 ], "pop" : 9317, "state" : "KY" } +{ "_id" : "40245", "city" : "LOUISVILLE", "loc" : [ -85.484461, 38.268273 ], "pop" : 8662, "state" : "KY" } +{ "_id" : "40258", "city" : "PLEASURE RIDGE P", "loc" : [ -85.862505, 38.142369 ], "pop" : 24515, "state" : "KY" } +{ "_id" : "40272", "city" : "VALLEY STATION", "loc" : [ -85.858701, 38.097063 ], "pop" : 32843, "state" : "KY" } +{ "_id" : "40291", "city" : "FERN CREEK", "loc" : [ -85.59451300000001, 38.15205 ], "pop" : 22429, "state" : "KY" } +{ "_id" : "40299", "city" : "JEFFERSONTOWN", "loc" : [ -85.56894699999999, 38.188491 ], "pop" : 23882, "state" : "KY" } +{ "_id" : "40311", "city" : "CARLISLE", "loc" : [ -84.027902, 38.321233 ], "pop" : 6825, "state" : "KY" } +{ "_id" : "40312", "city" : "WESTBEND", "loc" : [ -83.934693, 37.860571 ], "pop" : 5408, "state" : "KY" } +{ "_id" : "40313", "city" : "CLEARFIELD", "loc" : [ -83.32728899999999, 38.143992 ], "pop" : 1942, "state" : "KY" } +{ "_id" : "40316", "city" : "DENNISTON", "loc" : [ -83.513136, 37.919068 ], "pop" : 238, "state" : "KY" } +{ "_id" : "40322", "city" : "SCRANTON", "loc" : [ -83.642405, 37.946031 ], "pop" : 3175, "state" : "KY" } +{ "_id" : "40324", "city" : "GEORGETOWN", "loc" : [ -84.556179, 38.211712 ], "pop" : 18666, "state" : "KY" } +{ "_id" : "40327", "city" : "GRATZ", "loc" : [ -84.942882, 38.478104 ], "pop" : 216, "state" : "KY" } +{ "_id" : "40328", "city" : "GRAVEL SWITCH", "loc" : [ -85.082403, 37.575802 ], "pop" : 962, "state" : "KY" } +{ "_id" : "40330", "city" : "CORNISHVILLE", "loc" : [ -84.84675, 37.769989 ], "pop" : 17727, "state" : "KY" } +{ "_id" : "40336", "city" : "JINKS", "loc" : [ -83.996172, 37.705051 ], "pop" : 13349, "state" : "KY" } +{ "_id" : "40337", "city" : "JEFFERSONVILLE", "loc" : [ -83.855778, 37.964004 ], "pop" : 4303, "state" : "KY" } +{ "_id" : "40339", "city" : "KEENE", "loc" : [ -84.65192399999999, 37.941057 ], "pop" : 253, "state" : "KY" } +{ "_id" : "40341", "city" : "LAMERO", "loc" : [ -84.162353, 37.319166 ], "pop" : 25, "state" : "KY" } +{ "_id" : "40342", "city" : "LAWRENCEBURG", "loc" : [ -84.92993800000001, 38.018853 ], "pop" : 13485, "state" : "KY" } +{ "_id" : "40345", "city" : "MARIBA", "loc" : [ -83.553692, 37.913527 ], "pop" : 374, "state" : "KY" } +{ "_id" : "40346", "city" : "MEANS", "loc" : [ -83.725343, 37.928382 ], "pop" : 324, "state" : "KY" } +{ "_id" : "40347", "city" : "MIDWAY", "loc" : [ -84.69284500000001, 38.148741 ], "pop" : 2079, "state" : "KY" } +{ "_id" : "40350", "city" : "MOOREFIELD", "loc" : [ -83.892889, 38.292627 ], "pop" : 383, "state" : "KY" } +{ "_id" : "40351", "city" : "MOREHEAD", "loc" : [ -83.443645, 38.199047 ], "pop" : 18413, "state" : "KY" } +{ "_id" : "40353", "city" : "MOUNT STERLING", "loc" : [ -83.938774, 38.054822 ], "pop" : 15242, "state" : "KY" } +{ "_id" : "40355", "city" : "NEW LIBERTY", "loc" : [ -84.90106400000001, 38.624556 ], "pop" : 2262, "state" : "KY" } +{ "_id" : "40356", "city" : "NICHOLASVILLE", "loc" : [ -84.56459, 37.880794 ], "pop" : 22920, "state" : "KY" } +{ "_id" : "40358", "city" : "OLYMPIA", "loc" : [ -83.758456, 38.061089 ], "pop" : 640, "state" : "KY" } +{ "_id" : "40359", "city" : "OWENTON", "loc" : [ -84.808632, 38.4986 ], "pop" : 6326, "state" : "KY" } +{ "_id" : "40360", "city" : "OWINGSVILLE", "loc" : [ -83.756439, 38.153196 ], "pop" : 4583, "state" : "KY" } +{ "_id" : "40361", "city" : "PARIS", "loc" : [ -84.24498699999999, 38.208293 ], "pop" : 18722, "state" : "KY" } +{ "_id" : "40365", "city" : "POMEROYTON", "loc" : [ -83.526315, 37.874352 ], "pop" : 480, "state" : "KY" } +{ "_id" : "40370", "city" : "SADIEVILLE", "loc" : [ -84.53842400000001, 38.390816 ], "pop" : 2694, "state" : "KY" } +{ "_id" : "40371", "city" : "SALT LICK", "loc" : [ -83.631619, 38.104031 ], "pop" : 2687, "state" : "KY" } +{ "_id" : "40372", "city" : "BONDVILLE", "loc" : [ -84.884546, 37.915078 ], "pop" : 1684, "state" : "KY" } +{ "_id" : "40374", "city" : "SHARPSBURG", "loc" : [ -83.893199, 38.214742 ], "pop" : 1685, "state" : "KY" } +{ "_id" : "40376", "city" : "SLADE", "loc" : [ -83.68485200000001, 37.788958 ], "pop" : 318, "state" : "KY" } +{ "_id" : "40379", "city" : "STAMPING GROUND", "loc" : [ -84.68182400000001, 38.288802 ], "pop" : 3757, "state" : "KY" } +{ "_id" : "40380", "city" : "PATSEY", "loc" : [ -83.829947, 37.842703 ], "pop" : 5966, "state" : "KY" } +{ "_id" : "40383", "city" : "VERSAILLES", "loc" : [ -84.728683, 38.041301 ], "pop" : 18204, "state" : "KY" } +{ "_id" : "40385", "city" : "BYBEE", "loc" : [ -84.11706100000001, 37.766833 ], "pop" : 1433, "state" : "KY" } +{ "_id" : "40387", "city" : "KOREA", "loc" : [ -83.47305, 37.965353 ], "pop" : 501, "state" : "KY" } +{ "_id" : "40390", "city" : "HIGH BRIDGE", "loc" : [ -84.66207900000001, 37.862141 ], "pop" : 5600, "state" : "KY" } +{ "_id" : "40391", "city" : "WINCHESTER", "loc" : [ -84.178894, 37.987161 ], "pop" : 29149, "state" : "KY" } +{ "_id" : "40402", "city" : "MOORES CREEK", "loc" : [ -83.959737, 37.306965 ], "pop" : 1941, "state" : "KY" } +{ "_id" : "40403", "city" : "BEREA", "loc" : [ -84.274919, 37.579942 ], "pop" : 16561, "state" : "KY" } +{ "_id" : "40409", "city" : "BRODHEAD", "loc" : [ -84.43358000000001, 37.381524 ], "pop" : 2596, "state" : "KY" } +{ "_id" : "40415", "city" : "COBHILL", "loc" : [ -83.840053, 37.743428 ], "pop" : 284, "state" : "KY" } +{ "_id" : "40417", "city" : "CONWAY", "loc" : [ -84.308072, 37.479933 ], "pop" : 2806, "state" : "KY" } +{ "_id" : "40419", "city" : "CRAB ORCHARD", "loc" : [ -84.49391199999999, 37.446523 ], "pop" : 5197, "state" : "KY" } +{ "_id" : "40422", "city" : "DANVILLE", "loc" : [ -84.77469600000001, 37.646524 ], "pop" : 19483, "state" : "KY" } +{ "_id" : "40426", "city" : "DREYFUS", "loc" : [ -84.154495, 37.650696 ], "pop" : 562, "state" : "KY" } +{ "_id" : "40437", "city" : "HUSTONVILLE", "loc" : [ -84.85277499999999, 37.459503 ], "pop" : 2965, "state" : "KY" } +{ "_id" : "40440", "city" : "JUNCTION CITY", "loc" : [ -84.80278199999999, 37.582157 ], "pop" : 3582, "state" : "KY" } +{ "_id" : "40442", "city" : "KINGS MOUNTAIN", "loc" : [ -84.714764, 37.381795 ], "pop" : 2385, "state" : "KY" } +{ "_id" : "40444", "city" : "LANCASTER", "loc" : [ -84.596912, 37.658391 ], "pop" : 8664, "state" : "KY" } +{ "_id" : "40445", "city" : "LIVINGSTON", "loc" : [ -84.231776, 37.307391 ], "pop" : 1320, "state" : "KY" } +{ "_id" : "40447", "city" : "CLOVER BOTTOM", "loc" : [ -84.00896, 37.431678 ], "pop" : 8071, "state" : "KY" } +{ "_id" : "40456", "city" : "CLIMAX", "loc" : [ -84.354882, 37.336609 ], "pop" : 5636, "state" : "KY" } +{ "_id" : "40460", "city" : "ORLANDO", "loc" : [ -84.25280100000001, 37.373405 ], "pop" : 1429, "state" : "KY" } +{ "_id" : "40461", "city" : "PAINT LICK", "loc" : [ -84.426869, 37.609231 ], "pop" : 3361, "state" : "KY" } +{ "_id" : "40464", "city" : "PARKSVILLE", "loc" : [ -84.92813200000001, 37.577768 ], "pop" : 893, "state" : "KY" } +{ "_id" : "40468", "city" : "PERRYVILLE", "loc" : [ -84.966508, 37.637494 ], "pop" : 2019, "state" : "KY" } +{ "_id" : "40471", "city" : "PRYSE", "loc" : [ -83.842586, 37.684068 ], "pop" : 250, "state" : "KY" } +{ "_id" : "40472", "city" : "RAVENNA", "loc" : [ -83.93865700000001, 37.686711 ], "pop" : 798, "state" : "KY" } +{ "_id" : "40475", "city" : "RICHMOND", "loc" : [ -84.295526, 37.754605 ], "pop" : 37946, "state" : "KY" } +{ "_id" : "40481", "city" : "SANDGAP", "loc" : [ -84.056676, 37.487097 ], "pop" : 837, "state" : "KY" } +{ "_id" : "40484", "city" : "STANFORD", "loc" : [ -84.691177, 37.524529 ], "pop" : 9072, "state" : "KY" } +{ "_id" : "40486", "city" : "ELIAS", "loc" : [ -83.87067399999999, 37.343023 ], "pop" : 837, "state" : "KY" } +{ "_id" : "40489", "city" : "WAYNESBURG", "loc" : [ -84.665486, 37.349932 ], "pop" : 4024, "state" : "KY" } +{ "_id" : "40502", "city" : "LEXINGTON", "loc" : [ -84.485423, 38.017394 ], "pop" : 30886, "state" : "KY" } +{ "_id" : "40503", "city" : "LEXINGTON", "loc" : [ -84.52821, 38.001002 ], "pop" : 33537, "state" : "KY" } +{ "_id" : "40504", "city" : "LEXINGTON", "loc" : [ -84.543325, 38.040628 ], "pop" : 22397, "state" : "KY" } +{ "_id" : "40505", "city" : "LEXINGTON", "loc" : [ -84.458338, 38.061201 ], "pop" : 28344, "state" : "KY" } +{ "_id" : "40507", "city" : "LEXINGTON", "loc" : [ -84.495289, 38.046385 ], "pop" : 2291, "state" : "KY" } +{ "_id" : "40508", "city" : "LEXINGTON", "loc" : [ -84.49643500000001, 38.04754 ], "pop" : 25161, "state" : "KY" } +{ "_id" : "40509", "city" : "LEXINGTON", "loc" : [ -84.427419, 38.010166 ], "pop" : 9029, "state" : "KY" } +{ "_id" : "40510", "city" : "LEXINGTON", "loc" : [ -84.59104600000001, 38.070211 ], "pop" : 1467, "state" : "KY" } +{ "_id" : "40511", "city" : "LEXINGTON", "loc" : [ -84.500671, 38.093233 ], "pop" : 16309, "state" : "KY" } +{ "_id" : "40513", "city" : "LEXINGTON", "loc" : [ -84.58152200000001, 38.01388 ], "pop" : 3383, "state" : "KY" } +{ "_id" : "40514", "city" : "LEXINGTON", "loc" : [ -84.576667, 37.983291 ], "pop" : 6252, "state" : "KY" } +{ "_id" : "40515", "city" : "LEXINGTON", "loc" : [ -84.47075100000001, 37.965102 ], "pop" : 20125, "state" : "KY" } +{ "_id" : "40516", "city" : "LEXINGTON", "loc" : [ -84.35480200000001, 38.054355 ], "pop" : 1294, "state" : "KY" } +{ "_id" : "40517", "city" : "LEXINGTON", "loc" : [ -84.481588, 37.984864 ], "pop" : 26787, "state" : "KY" } +{ "_id" : "40601", "city" : "HATTON", "loc" : [ -84.88061, 38.192831 ], "pop" : 46563, "state" : "KY" } +{ "_id" : "40701", "city" : "CORBIN", "loc" : [ -84.10208, 36.934429 ], "pop" : 17476, "state" : "KY" } +{ "_id" : "40724", "city" : "BUSH", "loc" : [ -83.976117, 37.070874 ], "pop" : 5759, "state" : "KY" } +{ "_id" : "40729", "city" : "SYMBOL", "loc" : [ -84.14567599999999, 37.190779 ], "pop" : 8589, "state" : "KY" } +{ "_id" : "40734", "city" : "GRAY", "loc" : [ -83.982799, 36.946743 ], "pop" : 2418, "state" : "KY" } +{ "_id" : "40737", "city" : "KEAVY", "loc" : [ -84.14360600000001, 37.015604 ], "pop" : 1323, "state" : "KY" } +{ "_id" : "40740", "city" : "LILY", "loc" : [ -84.08071, 37.002295 ], "pop" : 7471, "state" : "KY" } +{ "_id" : "40741", "city" : "SASSER", "loc" : [ -84.097498, 37.101605 ], "pop" : 20329, "state" : "KY" } +{ "_id" : "40754", "city" : "NEVISDALE", "loc" : [ -84.111113, 36.663711 ], "pop" : 157, "state" : "KY" } +{ "_id" : "40759", "city" : "ROCKHOLDS", "loc" : [ -84.10404800000001, 36.824216 ], "pop" : 1433, "state" : "KY" } +{ "_id" : "40763", "city" : "SILER", "loc" : [ -83.964192, 36.720352 ], "pop" : 151, "state" : "KY" } +{ "_id" : "40769", "city" : "PLEASANT VIEW", "loc" : [ -84.143592, 36.735535 ], "pop" : 20235, "state" : "KY" } +{ "_id" : "40771", "city" : "WOODBINE", "loc" : [ -84.08274299999999, 36.918793 ], "pop" : 10, "state" : "KY" } +{ "_id" : "40801", "city" : "AGES BROOKSIDE", "loc" : [ -83.235294, 36.840734 ], "pop" : 164, "state" : "KY" } +{ "_id" : "40806", "city" : "BAXTER", "loc" : [ -83.314082, 36.874913 ], "pop" : 2151, "state" : "KY" } +{ "_id" : "40807", "city" : "BENHAM", "loc" : [ -82.90939899999999, 36.957377 ], "pop" : 98, "state" : "KY" } +{ "_id" : "40808", "city" : "BIG LAUREL", "loc" : [ -83.156468, 37.002795 ], "pop" : 0, "state" : "KY" } +{ "_id" : "40810", "city" : "LEWIS CREEK", "loc" : [ -83.35390099999999, 36.912348 ], "pop" : 567, "state" : "KY" } +{ "_id" : "40813", "city" : "CALVIN", "loc" : [ -83.737144, 36.707818 ], "pop" : 2047, "state" : "KY" } +{ "_id" : "40815", "city" : "CRUMMIES", "loc" : [ -83.265719, 36.74619 ], "pop" : 154, "state" : "KY" } +{ "_id" : "40818", "city" : "COALGOOD", "loc" : [ -83.238782, 36.793394 ], "pop" : 1218, "state" : "KY" } +{ "_id" : "40819", "city" : "COLDIRON", "loc" : [ -83.40959100000001, 36.877718 ], "pop" : 392, "state" : "KY" } +{ "_id" : "40820", "city" : "CRANKS", "loc" : [ -83.203948, 36.760228 ], "pop" : 529, "state" : "KY" } +{ "_id" : "40823", "city" : "CUMBERLAND", "loc" : [ -82.977052, 36.971085 ], "pop" : 6601, "state" : "KY" } +{ "_id" : "40824", "city" : "DAYHOIT", "loc" : [ -83.394329, 36.864603 ], "pop" : 44, "state" : "KY" } +{ "_id" : "40825", "city" : "DIZNEY", "loc" : [ -83.117659, 36.817697 ], "pop" : 42, "state" : "KY" } +{ "_id" : "40826", "city" : "EOLIA", "loc" : [ -82.77061999999999, 37.061767 ], "pop" : 676, "state" : "KY" } +{ "_id" : "40828", "city" : "LOUELLEN", "loc" : [ -83.181648, 36.855294 ], "pop" : 4578, "state" : "KY" } +{ "_id" : "40829", "city" : "GRAYS KNOB", "loc" : [ -83.323998, 36.811105 ], "pop" : 3057, "state" : "KY" } +{ "_id" : "40830", "city" : "GULSTON", "loc" : [ -83.326227, 36.765622 ], "pop" : 456, "state" : "KY" } +{ "_id" : "40831", "city" : "CHEVROLET", "loc" : [ -83.31957300000001, 36.84999 ], "pop" : 6636, "state" : "KY" } +{ "_id" : "40843", "city" : "HOLMES MILL", "loc" : [ -82.994304, 36.875652 ], "pop" : 624, "state" : "KY" } +{ "_id" : "40845", "city" : "HULEN", "loc" : [ -83.555132, 36.771449 ], "pop" : 2719, "state" : "KY" } +{ "_id" : "40846", "city" : "KEITH", "loc" : [ -83.361367, 36.871241 ], "pop" : 185, "state" : "KY" } +{ "_id" : "40847", "city" : "KENVIR", "loc" : [ -83.16055, 36.777596 ], "pop" : 346, "state" : "KY" } +{ "_id" : "40849", "city" : "LEJUNIOR", "loc" : [ -83.19048600000001, 36.921199 ], "pop" : 1536, "state" : "KY" } +{ "_id" : "40855", "city" : "LYNCH", "loc" : [ -82.915629, 36.997856 ], "pop" : 125, "state" : "KY" } +{ "_id" : "40858", "city" : "MOZELLE", "loc" : [ -83.413499, 37.003666 ], "pop" : 2762, "state" : "KY" } +{ "_id" : "40861", "city" : "OVEN FORK", "loc" : [ -82.818484, 37.053929 ], "pop" : 356, "state" : "KY" } +{ "_id" : "40862", "city" : "PARTRIDGE", "loc" : [ -82.877168, 37.012932 ], "pop" : 861, "state" : "KY" } +{ "_id" : "40863", "city" : "PATHFORK", "loc" : [ -83.462925, 36.752071 ], "pop" : 545, "state" : "KY" } +{ "_id" : "40865", "city" : "PUTNEY", "loc" : [ -83.26079300000001, 36.925907 ], "pop" : 348, "state" : "KY" } +{ "_id" : "40867", "city" : "SMITH", "loc" : [ -83.32090599999999, 36.71869 ], "pop" : 312, "state" : "KY" } +{ "_id" : "40868", "city" : "STINNETT", "loc" : [ -83.390742, 37.08835 ], "pop" : 324, "state" : "KY" } +{ "_id" : "40870", "city" : "TOTZ", "loc" : [ -83.201891, 36.970968 ], "pop" : 301, "state" : "KY" } +{ "_id" : "40873", "city" : "WALLINS CREEK", "loc" : [ -83.41896800000001, 36.816532 ], "pop" : 3386, "state" : "KY" } +{ "_id" : "40902", "city" : "ARJAY", "loc" : [ -83.641537, 36.828342 ], "pop" : 1676, "state" : "KY" } +{ "_id" : "40903", "city" : "ARTEMUS", "loc" : [ -83.832886, 36.838837 ], "pop" : 520, "state" : "KY" } +{ "_id" : "40906", "city" : "BAILEY SWITCH", "loc" : [ -83.899316, 36.864807 ], "pop" : 8506, "state" : "KY" } +{ "_id" : "40913", "city" : "BEVERLY", "loc" : [ -83.556031, 36.944179 ], "pop" : 63, "state" : "KY" } +{ "_id" : "40914", "city" : "BIG CREEK", "loc" : [ -83.633095, 37.14168 ], "pop" : 3877, "state" : "KY" } +{ "_id" : "40915", "city" : "BIMBLE", "loc" : [ -83.82817900000001, 36.886751 ], "pop" : 836, "state" : "KY" } +{ "_id" : "40921", "city" : "BRYANTS STORE", "loc" : [ -83.930729, 36.783087 ], "pop" : 907, "state" : "KY" } +{ "_id" : "40923", "city" : "CANNON", "loc" : [ -83.84249800000001, 36.94888 ], "pop" : 2396, "state" : "KY" } +{ "_id" : "40927", "city" : "CLOSPLINT", "loc" : [ -83.099766, 36.89227 ], "pop" : 1472, "state" : "KY" } +{ "_id" : "40930", "city" : "DEWITT", "loc" : [ -83.73156, 36.8738 ], "pop" : 379, "state" : "KY" } +{ "_id" : "40935", "city" : "SALT GUM", "loc" : [ -83.77139699999999, 36.834531 ], "pop" : 1706, "state" : "KY" } +{ "_id" : "40940", "city" : "FONDE", "loc" : [ -83.895022, 36.64455 ], "pop" : 1326, "state" : "KY" } +{ "_id" : "40943", "city" : "GIRDLER", "loc" : [ -83.85388, 36.969096 ], "pop" : 229, "state" : "KY" } +{ "_id" : "40946", "city" : "GREEN ROAD", "loc" : [ -83.895768, 36.998937 ], "pop" : 360, "state" : "KY" } +{ "_id" : "40949", "city" : "HEIDRICK", "loc" : [ -83.86650899999999, 36.892696 ], "pop" : 1362, "state" : "KY" } +{ "_id" : "40953", "city" : "HINKLE", "loc" : [ -83.780441, 36.875323 ], "pop" : 269, "state" : "KY" } +{ "_id" : "40958", "city" : "KETTLE ISLAND", "loc" : [ -83.58918300000001, 36.809344 ], "pop" : 710, "state" : "KY" } +{ "_id" : "40962", "city" : "BRIGHT SHADE", "loc" : [ -83.768291, 37.142321 ], "pop" : 13727, "state" : "KY" } +{ "_id" : "40964", "city" : "MARY ALICE", "loc" : [ -83.424408, 36.706797 ], "pop" : 115, "state" : "KY" } +{ "_id" : "40965", "city" : "MIDDLESBORO", "loc" : [ -83.723079, 36.617188 ], "pop" : 14900, "state" : "KY" } +{ "_id" : "40970", "city" : "MILLS", "loc" : [ -83.605305, 36.940659 ], "pop" : 471, "state" : "KY" } +{ "_id" : "40972", "city" : "ONEIDA", "loc" : [ -83.655467, 37.2677 ], "pop" : 2371, "state" : "KY" } +{ "_id" : "40977", "city" : "CALLAWAY", "loc" : [ -83.698502, 36.751302 ], "pop" : 7658, "state" : "KY" } +{ "_id" : "40979", "city" : "ROARK", "loc" : [ -83.506201, 37.024432 ], "pop" : 463, "state" : "KY" } +{ "_id" : "40982", "city" : "SCALF", "loc" : [ -83.72655399999999, 36.91748 ], "pop" : 600, "state" : "KY" } +{ "_id" : "40983", "city" : "SEXTONS CREEK", "loc" : [ -83.798378, 37.27334 ], "pop" : 1776, "state" : "KY" } +{ "_id" : "40988", "city" : "STONEY FORK", "loc" : [ -83.538504, 36.889184 ], "pop" : 387, "state" : "KY" } +{ "_id" : "40995", "city" : "TROSPER", "loc" : [ -83.831442, 36.782564 ], "pop" : 1245, "state" : "KY" } +{ "_id" : "40997", "city" : "WALKER", "loc" : [ -83.66160000000001, 36.891138 ], "pop" : 120, "state" : "KY" } +{ "_id" : "40999", "city" : "WOOLLUM", "loc" : [ -83.847202, 37.009657 ], "pop" : 219, "state" : "KY" } +{ "_id" : "41001", "city" : "ALEXANDRIA", "loc" : [ -84.394329, 38.940605 ], "pop" : 11858, "state" : "KY" } +{ "_id" : "41002", "city" : "AUGUSTA", "loc" : [ -83.995352, 38.762991 ], "pop" : 1902, "state" : "KY" } +{ "_id" : "41003", "city" : "BERRY", "loc" : [ -84.361118, 38.515974 ], "pop" : 2083, "state" : "KY" } +{ "_id" : "41004", "city" : "BROOKSVILLE", "loc" : [ -84.078649, 38.664387 ], "pop" : 4309, "state" : "KY" } +{ "_id" : "41005", "city" : "RABBIT HASH", "loc" : [ -84.74142000000001, 39.032411 ], "pop" : 8322, "state" : "KY" } +{ "_id" : "41006", "city" : "BUTLER", "loc" : [ -84.34457999999999, 38.801328 ], "pop" : 4743, "state" : "KY" } +{ "_id" : "41007", "city" : "CALIFORNIA", "loc" : [ -84.309794, 38.900614 ], "pop" : 3427, "state" : "KY" } +{ "_id" : "41008", "city" : "CARROLLTON", "loc" : [ -85.173036, 38.669565 ], "pop" : 7072, "state" : "KY" } +{ "_id" : "41010", "city" : "CORINTH", "loc" : [ -84.584596, 38.53021 ], "pop" : 1701, "state" : "KY" } +{ "_id" : "41011", "city" : "COVINGTON", "loc" : [ -84.52121, 39.070839 ], "pop" : 29098, "state" : "KY" } +{ "_id" : "41014", "city" : "ROUSE", "loc" : [ -84.505061, 39.066593 ], "pop" : 8607, "state" : "KY" } +{ "_id" : "41015", "city" : "LATONIA", "loc" : [ -84.498858, 39.021686 ], "pop" : 19857, "state" : "KY" } +{ "_id" : "41016", "city" : "LUDLOW", "loc" : [ -84.548304, 39.088946 ], "pop" : 7210, "state" : "KY" } +{ "_id" : "41017", "city" : "DIXIE", "loc" : [ -84.56961099999999, 39.032378 ], "pop" : 34285, "state" : "KY" } +{ "_id" : "41018", "city" : "ERLANGER", "loc" : [ -84.597745, 39.008238 ], "pop" : 23909, "state" : "KY" } +{ "_id" : "41030", "city" : "CRITTENDEN", "loc" : [ -84.598202, 38.774107 ], "pop" : 2630, "state" : "KY" } +{ "_id" : "41031", "city" : "CYNTHIANA", "loc" : [ -84.294921, 38.396403 ], "pop" : 13375, "state" : "KY" } +{ "_id" : "41033", "city" : "DEMOSSVILLE", "loc" : [ -84.47080200000001, 38.75165 ], "pop" : 1292, "state" : "KY" } +{ "_id" : "41034", "city" : "DOVER", "loc" : [ -83.871793, 38.691016 ], "pop" : 1991, "state" : "KY" } +{ "_id" : "41035", "city" : "DRY RIDGE", "loc" : [ -84.62373599999999, 38.704854 ], "pop" : 6092, "state" : "KY" } +{ "_id" : "41039", "city" : "EWING", "loc" : [ -83.873317, 38.415651 ], "pop" : 2396, "state" : "KY" } +{ "_id" : "41040", "city" : "FALMOUTH", "loc" : [ -84.345124, 38.664304 ], "pop" : 6779, "state" : "KY" } +{ "_id" : "41041", "city" : "FLEMINGSBURG", "loc" : [ -83.70796799999999, 38.427983 ], "pop" : 6549, "state" : "KY" } +{ "_id" : "41042", "city" : "FLORENCE", "loc" : [ -84.64196099999999, 38.994065 ], "pop" : 34010, "state" : "KY" } +{ "_id" : "41043", "city" : "FOSTER", "loc" : [ -84.156593, 38.75064 ], "pop" : 1479, "state" : "KY" } +{ "_id" : "41044", "city" : "GERMANTOWN", "loc" : [ -83.960616, 38.707534 ], "pop" : 88, "state" : "KY" } +{ "_id" : "41045", "city" : "GHENT", "loc" : [ -85.055662, 38.718823 ], "pop" : 980, "state" : "KY" } +{ "_id" : "41046", "city" : "GLENCOE", "loc" : [ -84.81155200000001, 38.722946 ], "pop" : 589, "state" : "KY" } +{ "_id" : "41048", "city" : "HEBRON", "loc" : [ -84.700745, 39.07553 ], "pop" : 3497, "state" : "KY" } +{ "_id" : "41049", "city" : "HILLSBORO", "loc" : [ -83.66967, 38.29294 ], "pop" : 1981, "state" : "KY" } +{ "_id" : "41051", "city" : "INDEPENDENCE", "loc" : [ -84.547912, 38.935407 ], "pop" : 12778, "state" : "KY" } +{ "_id" : "41052", "city" : "JONESVILLE", "loc" : [ -84.76367, 38.648251 ], "pop" : 295, "state" : "KY" } +{ "_id" : "41055", "city" : "MAYS LICK", "loc" : [ -83.87487400000001, 38.52692 ], "pop" : 1786, "state" : "KY" } +{ "_id" : "41056", "city" : "LIMESTONE SQ", "loc" : [ -83.758858, 38.619716 ], "pop" : 12889, "state" : "KY" } +{ "_id" : "41059", "city" : "MELBOURNE", "loc" : [ -84.353751, 39.006699 ], "pop" : 2688, "state" : "KY" } +{ "_id" : "41063", "city" : "MORNING VIEW", "loc" : [ -84.506918, 38.83942 ], "pop" : 3938, "state" : "KY" } +{ "_id" : "41064", "city" : "MOUNT OLIVET", "loc" : [ -84.047977, 38.521751 ], "pop" : 2124, "state" : "KY" } +{ "_id" : "41071", "city" : "SOUTHGATE", "loc" : [ -84.48651099999999, 39.082847 ], "pop" : 22918, "state" : "KY" } +{ "_id" : "41073", "city" : "BELLEVUE", "loc" : [ -84.478746, 39.102431 ], "pop" : 6997, "state" : "KY" } +{ "_id" : "41074", "city" : "DAYTON", "loc" : [ -84.471155, 39.111428 ], "pop" : 6576, "state" : "KY" } +{ "_id" : "41075", "city" : "FORT THOMAS", "loc" : [ -84.45234000000001, 39.078634 ], "pop" : 16165, "state" : "KY" } +{ "_id" : "41076", "city" : "NEWPORT", "loc" : [ -84.440792, 39.026184 ], "pop" : 11237, "state" : "KY" } +{ "_id" : "41080", "city" : "PETERSBURG", "loc" : [ -84.837104, 39.041561 ], "pop" : 1219, "state" : "KY" } +{ "_id" : "41083", "city" : "SANDERS", "loc" : [ -84.973151, 38.661004 ], "pop" : 516, "state" : "KY" } +{ "_id" : "41085", "city" : "SILVER GROVE", "loc" : [ -84.390849, 39.034262 ], "pop" : 1210, "state" : "KY" } +{ "_id" : "41086", "city" : "SPARTA", "loc" : [ -84.881334, 38.725582 ], "pop" : 1186, "state" : "KY" } +{ "_id" : "41091", "city" : "UNION", "loc" : [ -84.72735900000001, 38.943511 ], "pop" : 4468, "state" : "KY" } +{ "_id" : "41092", "city" : "VERONA", "loc" : [ -84.69072199999999, 38.839012 ], "pop" : 2169, "state" : "KY" } +{ "_id" : "41093", "city" : "WALLINGFORD", "loc" : [ -83.562532, 38.337449 ], "pop" : 1366, "state" : "KY" } +{ "_id" : "41094", "city" : "WALTON", "loc" : [ -84.63276999999999, 38.887491 ], "pop" : 6253, "state" : "KY" } +{ "_id" : "41095", "city" : "WARSAW", "loc" : [ -84.84958399999999, 38.780704 ], "pop" : 3618, "state" : "KY" } +{ "_id" : "41097", "city" : "WILLIAMSTOWN", "loc" : [ -84.57441, 38.629191 ], "pop" : 5019, "state" : "KY" } +{ "_id" : "41098", "city" : "WORTHVILLE", "loc" : [ -85.066321, 38.617948 ], "pop" : 724, "state" : "KY" } +{ "_id" : "41101", "city" : "WESTWOOD", "loc" : [ -82.702709, 38.443038 ], "pop" : 17464, "state" : "KY" } +{ "_id" : "41102", "city" : "ASHLAND", "loc" : [ -82.644721, 38.461255 ], "pop" : 24865, "state" : "KY" } +{ "_id" : "41121", "city" : "ARGILLITE", "loc" : [ -82.809442, 38.432228 ], "pop" : 467, "state" : "KY" } +{ "_id" : "41124", "city" : "BLAINE", "loc" : [ -82.851347, 38.026974 ], "pop" : 982, "state" : "KY" } +{ "_id" : "41127", "city" : "CAMP DIX", "loc" : [ -83.28779299999999, 38.508044 ], "pop" : 269, "state" : "KY" } +{ "_id" : "41129", "city" : "CATLETTSBURG", "loc" : [ -82.632065, 38.379946 ], "pop" : 8851, "state" : "KY" } +{ "_id" : "41132", "city" : "DENTON", "loc" : [ -82.82692400000001, 38.295212 ], "pop" : 452, "state" : "KY" } +{ "_id" : "41135", "city" : "HEAD OF GRASSY", "loc" : [ -83.261786, 38.367225 ], "pop" : 435, "state" : "KY" } +{ "_id" : "41137", "city" : "FIREBRICK", "loc" : [ -83.04320300000001, 38.687785 ], "pop" : 279, "state" : "KY" } +{ "_id" : "41139", "city" : "FLATWOODS", "loc" : [ -82.72122, 38.518776 ], "pop" : 8397, "state" : "KY" } +{ "_id" : "41141", "city" : "GARRISON", "loc" : [ -83.200036, 38.586915 ], "pop" : 3066, "state" : "KY" } +{ "_id" : "41143", "city" : "FULTZ", "loc" : [ -82.965087, 38.328037 ], "pop" : 11771, "state" : "KY" } +{ "_id" : "41144", "city" : "LYNN", "loc" : [ -82.868396, 38.547969 ], "pop" : 11666, "state" : "KY" } +{ "_id" : "41146", "city" : "HITCHINS", "loc" : [ -82.92026799999999, 38.254585 ], "pop" : 3187, "state" : "KY" } +{ "_id" : "41149", "city" : "ISONVILLE", "loc" : [ -83.050607, 38.046229 ], "pop" : 890, "state" : "KY" } +{ "_id" : "41159", "city" : "MARTHA", "loc" : [ -82.95576, 38.015228 ], "pop" : 706, "state" : "KY" } +{ "_id" : "41163", "city" : "OLDTOWN", "loc" : [ -82.95695000000001, 38.441153 ], "pop" : 690, "state" : "KY" } +{ "_id" : "41164", "city" : "LAWTON", "loc" : [ -83.16898500000001, 38.336275 ], "pop" : 5763, "state" : "KY" } +{ "_id" : "41166", "city" : "QUINCY", "loc" : [ -83.105647, 38.627059 ], "pop" : 512, "state" : "KY" } +{ "_id" : "41168", "city" : "RUSH", "loc" : [ -82.747602, 38.30893 ], "pop" : 1502, "state" : "KY" } +{ "_id" : "41169", "city" : "RACELAND", "loc" : [ -82.715632, 38.522575 ], "pop" : 6469, "state" : "KY" } +{ "_id" : "41170", "city" : "SAINT PAUL", "loc" : [ -83.067931, 38.665445 ], "pop" : 222, "state" : "KY" } +{ "_id" : "41171", "city" : "BURKE", "loc" : [ -83.12725, 38.129368 ], "pop" : 5319, "state" : "KY" } +{ "_id" : "41174", "city" : "SOUTH PORTSMOUTH", "loc" : [ -83.01621799999999, 38.708706 ], "pop" : 813, "state" : "KY" } +{ "_id" : "41175", "city" : "MALONETON", "loc" : [ -82.94637299999999, 38.709269 ], "pop" : 4923, "state" : "KY" } +{ "_id" : "41177", "city" : "STEPHENS", "loc" : [ -82.983689, 38.114625 ], "pop" : 261, "state" : "KY" } +{ "_id" : "41179", "city" : "TRINITY", "loc" : [ -83.355448, 38.551511 ], "pop" : 5141, "state" : "KY" } +{ "_id" : "41180", "city" : "WEBBVILLE", "loc" : [ -82.789743, 38.163377 ], "pop" : 1654, "state" : "KY" } +{ "_id" : "41183", "city" : "WORTHINGTON", "loc" : [ -82.739553, 38.551102 ], "pop" : 1829, "state" : "KY" } +{ "_id" : "41189", "city" : "TOLLESBORO", "loc" : [ -83.560458, 38.572332 ], "pop" : 3061, "state" : "KY" } +{ "_id" : "41201", "city" : "ADAMS", "loc" : [ -82.702437, 37.991375 ], "pop" : 2540, "state" : "KY" } +{ "_id" : "41204", "city" : "BOONS CAMP", "loc" : [ -82.67043, 37.821609 ], "pop" : 260, "state" : "KY" } +{ "_id" : "41214", "city" : "DAVELLA", "loc" : [ -82.58672900000001, 37.790019 ], "pop" : 766, "state" : "KY" } +{ "_id" : "41215", "city" : "DENVER", "loc" : [ -82.86304800000001, 37.796582 ], "pop" : 573, "state" : "KY" } +{ "_id" : "41216", "city" : "EAST POINT", "loc" : [ -82.828801, 37.708578 ], "pop" : 1014, "state" : "KY" } +{ "_id" : "41219", "city" : "ELNA", "loc" : [ -82.882825, 37.938594 ], "pop" : 766, "state" : "KY" } +{ "_id" : "41220", "city" : "FUGET", "loc" : [ -82.911422, 37.902164 ], "pop" : 285, "state" : "KY" } +{ "_id" : "41222", "city" : "HAGERHILL", "loc" : [ -82.81491, 37.803511 ], "pop" : 739, "state" : "KY" } +{ "_id" : "41224", "city" : "JOB", "loc" : [ -82.520421, 37.867149 ], "pop" : 4231, "state" : "KY" } +{ "_id" : "41226", "city" : "KEATON", "loc" : [ -82.95610499999999, 37.968049 ], "pop" : 354, "state" : "KY" } +{ "_id" : "41228", "city" : "LEANDER", "loc" : [ -82.831045, 37.761904 ], "pop" : 1037, "state" : "KY" } +{ "_id" : "41230", "city" : "CLIFFORD", "loc" : [ -82.617598, 38.094332 ], "pop" : 8123, "state" : "KY" } +{ "_id" : "41231", "city" : "LOVELY", "loc" : [ -82.363794, 37.792109 ], "pop" : 958, "state" : "KY" } +{ "_id" : "41234", "city" : "MEALLY", "loc" : [ -82.74417699999999, 37.796498 ], "pop" : 925, "state" : "KY" } +{ "_id" : "41237", "city" : "OFFUTT", "loc" : [ -82.70812599999999, 37.852766 ], "pop" : 462, "state" : "KY" } +{ "_id" : "41238", "city" : "MANILA", "loc" : [ -82.928079, 37.826409 ], "pop" : 1430, "state" : "KY" } +{ "_id" : "41240", "city" : "NIPPA", "loc" : [ -82.805162, 37.819293 ], "pop" : 4095, "state" : "KY" } +{ "_id" : "41250", "city" : "LAURA", "loc" : [ -82.44875399999999, 37.763752 ], "pop" : 1700, "state" : "KY" } +{ "_id" : "41254", "city" : "RIVER", "loc" : [ -82.67094400000001, 37.875063 ], "pop" : 169, "state" : "KY" } +{ "_id" : "41255", "city" : "SITKA", "loc" : [ -82.844554, 37.892187 ], "pop" : 598, "state" : "KY" } +{ "_id" : "41256", "city" : "BARNETTS CREEK", "loc" : [ -82.85742999999999, 37.838463 ], "pop" : 1267, "state" : "KY" } +{ "_id" : "41257", "city" : "STAMBAUGH", "loc" : [ -82.76779000000001, 37.84112 ], "pop" : 165, "state" : "KY" } +{ "_id" : "41258", "city" : "RICEVILLE", "loc" : [ -82.911269, 37.743408 ], "pop" : 816, "state" : "KY" } +{ "_id" : "41260", "city" : "THELMA", "loc" : [ -82.775532, 37.798745 ], "pop" : 3956, "state" : "KY" } +{ "_id" : "41262", "city" : "DAVISPORT", "loc" : [ -82.59926900000001, 37.879292 ], "pop" : 1923, "state" : "KY" } +{ "_id" : "41263", "city" : "TUTOR KEY", "loc" : [ -82.735106, 37.860527 ], "pop" : 33, "state" : "KY" } +{ "_id" : "41265", "city" : "VAN LEAR", "loc" : [ -82.703236, 37.692916 ], "pop" : 3387, "state" : "KY" } +{ "_id" : "41266", "city" : "FUGET", "loc" : [ -82.911224, 37.902927 ], "pop" : 764, "state" : "KY" } +{ "_id" : "41267", "city" : "HODE", "loc" : [ -82.432192, 37.858088 ], "pop" : 2656, "state" : "KY" } +{ "_id" : "41269", "city" : "WHITEHOUSE", "loc" : [ -82.775328, 37.895347 ], "pop" : 2105, "state" : "KY" } +{ "_id" : "41271", "city" : "WILLIAMSPORT", "loc" : [ -82.710455, 37.81416 ], "pop" : 295, "state" : "KY" } +{ "_id" : "41274", "city" : "WITTENSVILLE", "loc" : [ -82.80998700000001, 37.870297 ], "pop" : 689, "state" : "KY" } +{ "_id" : "41301", "city" : "FLAT", "loc" : [ -83.516395, 37.750243 ], "pop" : 5038, "state" : "KY" } +{ "_id" : "41306", "city" : "ALTRO", "loc" : [ -83.395749, 37.356346 ], "pop" : 436, "state" : "KY" } +{ "_id" : "41311", "city" : "VADA", "loc" : [ -83.702337, 37.581891 ], "pop" : 6877, "state" : "KY" } +{ "_id" : "41314", "city" : "MORRIS FORK", "loc" : [ -83.660624, 37.478717 ], "pop" : 2675, "state" : "KY" } +{ "_id" : "41315", "city" : "BURKHART", "loc" : [ -83.27339600000001, 37.687451 ], "pop" : 233, "state" : "KY" } +{ "_id" : "41317", "city" : "CLAYHOLE", "loc" : [ -83.281254, 37.466076 ], "pop" : 2294, "state" : "KY" } +{ "_id" : "41321", "city" : "DECOY", "loc" : [ -83.02895599999999, 37.49046 ], "pop" : 184, "state" : "KY" } +{ "_id" : "41327", "city" : "GILLMORE", "loc" : [ -83.348026, 37.697155 ], "pop" : 44, "state" : "KY" } +{ "_id" : "41328", "city" : "GREEN HALL", "loc" : [ -83.780693, 37.368938 ], "pop" : 185, "state" : "KY" } +{ "_id" : "41331", "city" : "HADDIX", "loc" : [ -83.376176, 37.492249 ], "pop" : 513, "state" : "KY" } +{ "_id" : "41332", "city" : "GRASSY CREEK", "loc" : [ -83.39891799999999, 37.775989 ], "pop" : 978, "state" : "KY" } +{ "_id" : "41338", "city" : "ISLAND CITY", "loc" : [ -83.717991, 37.389926 ], "pop" : 526, "state" : "KY" } +{ "_id" : "41339", "city" : "CANOE", "loc" : [ -83.39690400000001, 37.557378 ], "pop" : 6384, "state" : "KY" } +{ "_id" : "41340", "city" : "LAMBRIC", "loc" : [ -83.100888, 37.579455 ], "pop" : 14, "state" : "KY" } +{ "_id" : "41342", "city" : "LEE CITY", "loc" : [ -83.325474, 37.731163 ], "pop" : 233, "state" : "KY" } +{ "_id" : "41343", "city" : "LEECO", "loc" : [ -83.692806, 37.698933 ], "pop" : 66, "state" : "KY" } +{ "_id" : "41346", "city" : "LITTLE", "loc" : [ -83.382373, 37.432158 ], "pop" : 247, "state" : "KY" } +{ "_id" : "41348", "city" : "HARDSHELL", "loc" : [ -83.328889, 37.484106 ], "pop" : 375, "state" : "KY" } +{ "_id" : "41351", "city" : "MISTLETOE", "loc" : [ -83.588078, 37.331428 ], "pop" : 72, "state" : "KY" } +{ "_id" : "41357", "city" : "NOCTOR", "loc" : [ -83.270831, 37.569915 ], "pop" : 771, "state" : "KY" } +{ "_id" : "41358", "city" : "OLD LANDING", "loc" : [ -83.805784, 37.639678 ], "pop" : 253, "state" : "KY" } +{ "_id" : "41360", "city" : "PINE RIDGE", "loc" : [ -83.632059, 37.774872 ], "pop" : 334, "state" : "KY" } +{ "_id" : "41363", "city" : "QUICKSAND", "loc" : [ -83.365098, 37.532947 ], "pop" : 727, "state" : "KY" } +{ "_id" : "41364", "city" : "RICETOWN", "loc" : [ -83.61506199999999, 37.409305 ], "pop" : 672, "state" : "KY" } +{ "_id" : "41365", "city" : "ROGERS", "loc" : [ -83.65667000000001, 37.739538 ], "pop" : 288, "state" : "KY" } +{ "_id" : "41366", "city" : "ROUSSEAU", "loc" : [ -83.21472, 37.63491 ], "pop" : 104, "state" : "KY" } +{ "_id" : "41367", "city" : "ROWDY", "loc" : [ -83.20403, 37.413063 ], "pop" : 245, "state" : "KY" } +{ "_id" : "41369", "city" : "SALDEE", "loc" : [ -83.373268, 37.455799 ], "pop" : 118, "state" : "KY" } +{ "_id" : "41377", "city" : "TALBERT", "loc" : [ -83.448185, 37.399505 ], "pop" : 352, "state" : "KY" } +{ "_id" : "41385", "city" : "VANCLEVE", "loc" : [ -83.38055300000001, 37.64768 ], "pop" : 1335, "state" : "KY" } +{ "_id" : "41386", "city" : "VINCENT", "loc" : [ -83.784628, 37.443733 ], "pop" : 586, "state" : "KY" } +{ "_id" : "41390", "city" : "WHICK", "loc" : [ -83.374707, 37.41022 ], "pop" : 235, "state" : "KY" } +{ "_id" : "41396", "city" : "ZACHARIAH", "loc" : [ -83.677244, 37.674917 ], "pop" : 36, "state" : "KY" } +{ "_id" : "41397", "city" : "ZOE", "loc" : [ -83.668778, 37.666371 ], "pop" : 190, "state" : "KY" } +{ "_id" : "41407", "city" : "CANEY", "loc" : [ -83.291662, 37.809847 ], "pop" : 1754, "state" : "KY" } +{ "_id" : "41409", "city" : "CARVER", "loc" : [ -83.06900899999999, 37.650274 ], "pop" : 368, "state" : "KY" } +{ "_id" : "41412", "city" : "COTTLE", "loc" : [ -83.220078, 37.892975 ], "pop" : 73, "state" : "KY" } +{ "_id" : "41419", "city" : "EDNA", "loc" : [ -83.179973, 37.799813 ], "pop" : 312, "state" : "KY" } +{ "_id" : "41421", "city" : "ELKFORK", "loc" : [ -83.077112, 37.940358 ], "pop" : 2081, "state" : "KY" } +{ "_id" : "41422", "city" : "ELSIE", "loc" : [ -83.142321, 37.768875 ], "pop" : 84, "state" : "KY" } +{ "_id" : "41425", "city" : "EZEL", "loc" : [ -83.388835, 37.903985 ], "pop" : 1488, "state" : "KY" } +{ "_id" : "41441", "city" : "HENDRICKS", "loc" : [ -83.098108, 37.70505 ], "pop" : 377, "state" : "KY" } +{ "_id" : "41447", "city" : "LENOX", "loc" : [ -83.18159300000001, 37.967224 ], "pop" : 550, "state" : "KY" } +{ "_id" : "41464", "city" : "ROYALTON", "loc" : [ -82.98666900000001, 37.652116 ], "pop" : 1550, "state" : "KY" } +{ "_id" : "41465", "city" : "BETHANNA", "loc" : [ -83.055443, 37.763499 ], "pop" : 8442, "state" : "KY" } +{ "_id" : "41466", "city" : "SEITZ", "loc" : [ -83.174941, 37.668402 ], "pop" : 395, "state" : "KY" } +{ "_id" : "41472", "city" : "BLAIRS MILL", "loc" : [ -83.279926, 37.949746 ], "pop" : 4700, "state" : "KY" } +{ "_id" : "41474", "city" : "WHITE OAK", "loc" : [ -83.204869, 37.849769 ], "pop" : 361, "state" : "KY" } +{ "_id" : "41501", "city" : "BROAD BOTTOM", "loc" : [ -82.52017499999999, 37.506833 ], "pop" : 17362, "state" : "KY" } +{ "_id" : "41503", "city" : "SOUTH WILLIAMSON", "loc" : [ -82.288608, 37.666991 ], "pop" : 899, "state" : "KY" } +{ "_id" : "41512", "city" : "ASHCAMP", "loc" : [ -82.461269, 37.258909 ], "pop" : 2274, "state" : "KY" } +{ "_id" : "41513", "city" : "BELCHER", "loc" : [ -82.396536, 37.3137 ], "pop" : 111, "state" : "KY" } +{ "_id" : "41514", "city" : "BELFRY", "loc" : [ -82.257301, 37.64011 ], "pop" : 1744, "state" : "KY" } +{ "_id" : "41519", "city" : "CANADA", "loc" : [ -82.35330999999999, 37.637816 ], "pop" : 817, "state" : "KY" } +{ "_id" : "41522", "city" : "SENTERVILLE", "loc" : [ -82.353337, 37.302649 ], "pop" : 1988, "state" : "KY" } +{ "_id" : "41524", "city" : "BIGGS", "loc" : [ -82.25746599999999, 37.361002 ], "pop" : 724, "state" : "KY" } +{ "_id" : "41527", "city" : "FOREST HILLS", "loc" : [ -82.299145, 37.643238 ], "pop" : 363, "state" : "KY" } +{ "_id" : "41528", "city" : "FREEBURN", "loc" : [ -82.143378, 37.551188 ], "pop" : 1749, "state" : "KY" } +{ "_id" : "41529", "city" : "AFLEX", "loc" : [ -82.30796100000001, 37.689943 ], "pop" : 802, "state" : "KY" } +{ "_id" : "41531", "city" : "HARDY", "loc" : [ -82.255236, 37.602652 ], "pop" : 1693, "state" : "KY" } +{ "_id" : "41535", "city" : "HUDDY", "loc" : [ -82.25004, 37.566819 ], "pop" : 513, "state" : "KY" } +{ "_id" : "41536", "city" : "JAMBOREE", "loc" : [ -82.089129, 37.485976 ], "pop" : 848, "state" : "KY" } +{ "_id" : "41537", "city" : "PAYNE GAP", "loc" : [ -82.630045, 37.186328 ], "pop" : 3615, "state" : "KY" } +{ "_id" : "41539", "city" : "KIMPER", "loc" : [ -82.31804099999999, 37.469588 ], "pop" : 2317, "state" : "KY" } +{ "_id" : "41540", "city" : "LICK CREEK", "loc" : [ -82.325456, 37.347969 ], "pop" : 221, "state" : "KY" } +{ "_id" : "41543", "city" : "MC ANDREWS", "loc" : [ -82.25579999999999, 37.544986 ], "pop" : 830, "state" : "KY" } +{ "_id" : "41544", "city" : "MC CARR", "loc" : [ -82.167365, 37.596944 ], "pop" : 1054, "state" : "KY" } +{ "_id" : "41545", "city" : "MC COMBS", "loc" : [ -82.54822799999999, 37.593432 ], "pop" : 173, "state" : "KY" } +{ "_id" : "41546", "city" : "MC VEIGH", "loc" : [ -82.22280000000001, 37.534249 ], "pop" : 603, "state" : "KY" } +{ "_id" : "41548", "city" : "MOUTHCARD", "loc" : [ -82.305424, 37.333908 ], "pop" : 156, "state" : "KY" } +{ "_id" : "41551", "city" : "PAW PAW", "loc" : [ -82.134942, 37.435562 ], "pop" : 228, "state" : "KY" } +{ "_id" : "41553", "city" : "PHELPS", "loc" : [ -82.158378, 37.498736 ], "pop" : 2947, "state" : "KY" } +{ "_id" : "41554", "city" : "PHYLLIS", "loc" : [ -82.266786, 37.422152 ], "pop" : 891, "state" : "KY" } +{ "_id" : "41555", "city" : "PINSONFORK", "loc" : [ -82.19536600000001, 37.565137 ], "pop" : 568, "state" : "KY" } +{ "_id" : "41557", "city" : "FISHTRAP", "loc" : [ -82.426256, 37.524072 ], "pop" : 3807, "state" : "KY" } +{ "_id" : "41559", "city" : "REGINA", "loc" : [ -82.37369700000001, 37.359686 ], "pop" : 1559, "state" : "KY" } +{ "_id" : "41560", "city" : "ROBINSON CREEK", "loc" : [ -82.567679, 37.334708 ], "pop" : 6715, "state" : "KY" } +{ "_id" : "41562", "city" : "SHELBIANA", "loc" : [ -82.455321, 37.375478 ], "pop" : 9187, "state" : "KY" } +{ "_id" : "41563", "city" : "SHELBY GAP", "loc" : [ -82.575149, 37.232743 ], "pop" : 952, "state" : "KY" } +{ "_id" : "41564", "city" : "SIDNEY", "loc" : [ -82.338666, 37.580225 ], "pop" : 1727, "state" : "KY" } +{ "_id" : "41565", "city" : "SPEIGHT", "loc" : [ -82.71650200000001, 37.262473 ], "pop" : 17, "state" : "KY" } +{ "_id" : "41566", "city" : "STEELE", "loc" : [ -82.20707899999999, 37.40292 ], "pop" : 1321, "state" : "KY" } +{ "_id" : "41567", "city" : "STONE", "loc" : [ -82.28898700000001, 37.560639 ], "pop" : 1239, "state" : "KY" } +{ "_id" : "41568", "city" : "ARGO", "loc" : [ -82.073522, 37.530336 ], "pop" : 471, "state" : "KY" } +{ "_id" : "41570", "city" : "TURKEY CREEK", "loc" : [ -82.32022499999999, 37.659347 ], "pop" : 264, "state" : "KY" } +{ "_id" : "41571", "city" : "VARNEY", "loc" : [ -82.350976, 37.698541 ], "pop" : 827, "state" : "KY" } +{ "_id" : "41572", "city" : "ETTY", "loc" : [ -82.649445, 37.313669 ], "pop" : 2622, "state" : "KY" } +{ "_id" : "41601", "city" : "ALLEN", "loc" : [ -82.63627200000001, 37.566182 ], "pop" : 1768, "state" : "KY" } +{ "_id" : "41602", "city" : "AUXIER", "loc" : [ -82.767736, 37.721847 ], "pop" : 2461, "state" : "KY" } +{ "_id" : "41603", "city" : "BANNER", "loc" : [ -82.69736899999999, 37.577051 ], "pop" : 1043, "state" : "KY" } +{ "_id" : "41604", "city" : "LIGON", "loc" : [ -82.680295, 37.372179 ], "pop" : 956, "state" : "KY" } +{ "_id" : "41605", "city" : "BETSY LAYNE", "loc" : [ -82.700249, 37.531593 ], "pop" : 353, "state" : "KY" } +{ "_id" : "41606", "city" : "BEVINSVILLE", "loc" : [ -82.712468, 37.338488 ], "pop" : 3200, "state" : "KY" } +{ "_id" : "41607", "city" : "BLUE RIVER", "loc" : [ -82.827361, 37.648097 ], "pop" : 247, "state" : "KY" } +{ "_id" : "41614", "city" : "CRAYNOR", "loc" : [ -82.69176, 37.408673 ], "pop" : 260, "state" : "KY" } +{ "_id" : "41615", "city" : "DANA", "loc" : [ -82.670501, 37.546653 ], "pop" : 227, "state" : "KY" } +{ "_id" : "41616", "city" : "DAVID", "loc" : [ -82.892748, 37.604387 ], "pop" : 60, "state" : "KY" } +{ "_id" : "41622", "city" : "EASTERN", "loc" : [ -82.82649600000001, 37.532386 ], "pop" : 509, "state" : "KY" } +{ "_id" : "41626", "city" : "ENDICOTT", "loc" : [ -82.627608, 37.681936 ], "pop" : 42, "state" : "KY" } +{ "_id" : "41627", "city" : "ESTILL", "loc" : [ -82.81962900000001, 37.46201 ], "pop" : 263, "state" : "KY" } +{ "_id" : "41629", "city" : "GALVESTON", "loc" : [ -82.661868, 37.478249 ], "pop" : 1030, "state" : "KY" } +{ "_id" : "41630", "city" : "GARRETT", "loc" : [ -82.846192, 37.486126 ], "pop" : 1408, "state" : "KY" } +{ "_id" : "41631", "city" : "GRETHEL", "loc" : [ -82.739575, 37.459599 ], "pop" : 2126, "state" : "KY" } +{ "_id" : "41632", "city" : "WALDO", "loc" : [ -82.93574, 37.546661 ], "pop" : 699, "state" : "KY" } +{ "_id" : "41633", "city" : "HALO", "loc" : [ -82.73060599999999, 37.307629 ], "pop" : 119, "state" : "KY" } +{ "_id" : "41635", "city" : "HAROLD", "loc" : [ -82.621595, 37.504184 ], "pop" : 1286, "state" : "KY" } +{ "_id" : "41636", "city" : "BUCKINGHAM", "loc" : [ -82.73245, 37.393499 ], "pop" : 879, "state" : "KY" } +{ "_id" : "41637", "city" : "PYRMID", "loc" : [ -82.864919, 37.513484 ], "pop" : 568, "state" : "KY" } +{ "_id" : "41639", "city" : "HONAKER", "loc" : [ -82.667534, 37.514977 ], "pop" : 772, "state" : "KY" } +{ "_id" : "41640", "city" : "ELMROCK", "loc" : [ -82.836764, 37.506204 ], "pop" : 115, "state" : "KY" } +{ "_id" : "41642", "city" : "IVEL", "loc" : [ -82.64268, 37.555443 ], "pop" : 1038, "state" : "KY" } +{ "_id" : "41643", "city" : "LACKEY", "loc" : [ -82.798012, 37.464283 ], "pop" : 591, "state" : "KY" } +{ "_id" : "41645", "city" : "LANGLEY", "loc" : [ -82.797648, 37.538079 ], "pop" : 648, "state" : "KY" } +{ "_id" : "41647", "city" : "EAST MC DOWELL", "loc" : [ -82.745018, 37.425232 ], "pop" : 376, "state" : "KY" } +{ "_id" : "41649", "city" : "HITE", "loc" : [ -82.74785199999999, 37.563267 ], "pop" : 4649, "state" : "KY" } +{ "_id" : "41653", "city" : "EMMA", "loc" : [ -82.788135, 37.649462 ], "pop" : 9573, "state" : "KY" } +{ "_id" : "41655", "city" : "PRINTER", "loc" : [ -82.70602700000001, 37.505485 ], "pop" : 243, "state" : "KY" } +{ "_id" : "41659", "city" : "STANVILLE", "loc" : [ -82.669174, 37.578386 ], "pop" : 309, "state" : "KY" } +{ "_id" : "41660", "city" : "TEABERRY", "loc" : [ -82.640456, 37.421955 ], "pop" : 2248, "state" : "KY" } +{ "_id" : "41666", "city" : "WAYLAND", "loc" : [ -82.80103699999999, 37.436709 ], "pop" : 928, "state" : "KY" } +{ "_id" : "41701", "city" : "DARFORK", "loc" : [ -83.199845, 37.252641 ], "pop" : 11851, "state" : "KY" } +{ "_id" : "41712", "city" : "ARY", "loc" : [ -83.139253, 37.354364 ], "pop" : 331, "state" : "KY" } +{ "_id" : "41714", "city" : "BEAR BRANCH", "loc" : [ -83.494449, 37.210894 ], "pop" : 400, "state" : "KY" } +{ "_id" : "41719", "city" : "BLUE DIAMOND", "loc" : [ -83.228579, 37.310812 ], "pop" : 861, "state" : "KY" } +{ "_id" : "41721", "city" : "BUCKHORN", "loc" : [ -83.49364799999999, 37.301036 ], "pop" : 640, "state" : "KY" } +{ "_id" : "41722", "city" : "TRIBBEY", "loc" : [ -83.15848699999999, 37.328174 ], "pop" : 2312, "state" : "KY" } +{ "_id" : "41723", "city" : "BUSY", "loc" : [ -83.30070499999999, 37.26316 ], "pop" : 967, "state" : "KY" } +{ "_id" : "41725", "city" : "CARRIE", "loc" : [ -83.041549, 37.297995 ], "pop" : 457, "state" : "KY" } +{ "_id" : "41727", "city" : "CHAVIES", "loc" : [ -83.33146600000001, 37.355545 ], "pop" : 564, "state" : "KY" } +{ "_id" : "41728", "city" : "CINDA", "loc" : [ -83.302886, 37.09667 ], "pop" : 584, "state" : "KY" } +{ "_id" : "41729", "city" : "COMBS", "loc" : [ -83.20229399999999, 37.291321 ], "pop" : 1001, "state" : "KY" } +{ "_id" : "41730", "city" : "CONFLUENCE", "loc" : [ -83.37110199999999, 37.271904 ], "pop" : 184, "state" : "KY" } +{ "_id" : "41731", "city" : "ULVAH", "loc" : [ -83.035127, 37.120385 ], "pop" : 1289, "state" : "KY" } +{ "_id" : "41732", "city" : "CUTSHIN", "loc" : [ -83.247304, 37.108109 ], "pop" : 1591, "state" : "KY" } +{ "_id" : "41733", "city" : "DAISY", "loc" : [ -83.095095, 37.115936 ], "pop" : 77, "state" : "KY" } +{ "_id" : "41735", "city" : "DELPHIA", "loc" : [ -83.095574, 37.023317 ], "pop" : 349, "state" : "KY" } +{ "_id" : "41736", "city" : "DICE", "loc" : [ -83.20533500000001, 37.382539 ], "pop" : 1251, "state" : "KY" } +{ "_id" : "41740", "city" : "BEARVILLE", "loc" : [ -83.068449, 37.322096 ], "pop" : 1961, "state" : "KY" } +{ "_id" : "41743", "city" : "FISTY", "loc" : [ -83.108251, 37.356348 ], "pop" : 172, "state" : "KY" } +{ "_id" : "41745", "city" : "GAYS CREEK", "loc" : [ -83.455607, 37.350421 ], "pop" : 369, "state" : "KY" } +{ "_id" : "41746", "city" : "HAPPY", "loc" : [ -83.081408, 37.195047 ], "pop" : 784, "state" : "KY" } +{ "_id" : "41749", "city" : "DRYHILL", "loc" : [ -83.415668, 37.154604 ], "pop" : 5507, "state" : "KY" } +{ "_id" : "41754", "city" : "NAPFOR", "loc" : [ -83.305913, 37.318325 ], "pop" : 2357, "state" : "KY" } +{ "_id" : "41756", "city" : "LEATHERWOOD", "loc" : [ -83.15125399999999, 37.040503 ], "pop" : 241, "state" : "KY" } +{ "_id" : "41759", "city" : "ANCO", "loc" : [ -83.03212499999999, 37.233926 ], "pop" : 1442, "state" : "KY" } +{ "_id" : "41760", "city" : "SCUDDY", "loc" : [ -83.093242, 37.212182 ], "pop" : 296, "state" : "KY" } +{ "_id" : "41763", "city" : "SLEMP", "loc" : [ -83.11694, 37.08037 ], "pop" : 1012, "state" : "KY" } +{ "_id" : "41764", "city" : "SMILAX", "loc" : [ -83.284533, 37.166314 ], "pop" : 634, "state" : "KY" } +{ "_id" : "41765", "city" : "TALCUM", "loc" : [ -83.047864, 37.383621 ], "pop" : 375, "state" : "KY" } +{ "_id" : "41772", "city" : "VEST", "loc" : [ -83.06265, 37.408732 ], "pop" : 312, "state" : "KY" } +{ "_id" : "41773", "city" : "VICCO", "loc" : [ -83.09979199999999, 37.189826 ], "pop" : 3072, "state" : "KY" } +{ "_id" : "41774", "city" : "FARLER", "loc" : [ -83.158299, 37.150655 ], "pop" : 1364, "state" : "KY" } +{ "_id" : "41775", "city" : "WENDOVER", "loc" : [ -83.350185, 37.129115 ], "pop" : 314, "state" : "KY" } +{ "_id" : "41776", "city" : "FREW", "loc" : [ -83.292655, 37.192435 ], "pop" : 474, "state" : "KY" } +{ "_id" : "41777", "city" : "BIG ROCK", "loc" : [ -83.227006, 37.043019 ], "pop" : 405, "state" : "KY" } +{ "_id" : "41801", "city" : "AMBURGEY", "loc" : [ -83.000483, 37.26716 ], "pop" : 329, "state" : "KY" } +{ "_id" : "41804", "city" : "CARCASSONNE", "loc" : [ -82.940189, 37.134266 ], "pop" : 552, "state" : "KY" } +{ "_id" : "41805", "city" : "BRINKLEY", "loc" : [ -82.91397600000001, 37.262613 ], "pop" : 1204, "state" : "KY" } +{ "_id" : "41811", "city" : "CROWN", "loc" : [ -82.847442, 37.159125 ], "pop" : 295, "state" : "KY" } +{ "_id" : "41812", "city" : "DEANE", "loc" : [ -82.799722, 37.23332 ], "pop" : 1400, "state" : "KY" } +{ "_id" : "41815", "city" : "ERMINE", "loc" : [ -82.822118, 37.174612 ], "pop" : 3231, "state" : "KY" } +{ "_id" : "41817", "city" : "LARKSLANE", "loc" : [ -82.89384699999999, 37.377663 ], "pop" : 1287, "state" : "KY" } +{ "_id" : "41819", "city" : "GILLY", "loc" : [ -83.069317, 36.990109 ], "pop" : 555, "state" : "KY" } +{ "_id" : "41821", "city" : "SKYLINE", "loc" : [ -83.020354, 37.069879 ], "pop" : 426, "state" : "KY" } +{ "_id" : "41822", "city" : "HINDMAN", "loc" : [ -82.952653, 37.327607 ], "pop" : 2965, "state" : "KY" } +{ "_id" : "41823", "city" : "HOLLYBUSH", "loc" : [ -82.831509, 37.337608 ], "pop" : 380, "state" : "KY" } +{ "_id" : "41824", "city" : "ISOM", "loc" : [ -82.913348, 37.196027 ], "pop" : 714, "state" : "KY" } +{ "_id" : "41825", "city" : "JACKHORN", "loc" : [ -82.691856, 37.171685 ], "pop" : 1380, "state" : "KY" } +{ "_id" : "41826", "city" : "JEREMIAH", "loc" : [ -82.92683599999999, 37.165127 ], "pop" : 623, "state" : "KY" } +{ "_id" : "41828", "city" : "PUNCHEON", "loc" : [ -82.78472499999999, 37.270944 ], "pop" : 293, "state" : "KY" } +{ "_id" : "41829", "city" : "KONA", "loc" : [ -82.752469, 37.166814 ], "pop" : 607, "state" : "KY" } +{ "_id" : "41831", "city" : "SOFT SHELL", "loc" : [ -82.956428, 37.383737 ], "pop" : 765, "state" : "KY" } +{ "_id" : "41832", "city" : "LETCHER", "loc" : [ -82.980908, 37.155 ], "pop" : 571, "state" : "KY" } +{ "_id" : "41833", "city" : "LINEFORK", "loc" : [ -82.919765, 37.051399 ], "pop" : 860, "state" : "KY" } +{ "_id" : "41834", "city" : "LITTCARR", "loc" : [ -82.965098, 37.271457 ], "pop" : 468, "state" : "KY" } +{ "_id" : "41836", "city" : "MALLIE", "loc" : [ -82.871364, 37.334623 ], "pop" : 792, "state" : "KY" } +{ "_id" : "41838", "city" : "MILLSTONE", "loc" : [ -82.7533, 37.151615 ], "pop" : 247, "state" : "KY" } +{ "_id" : "41839", "city" : "MOUSIE", "loc" : [ -82.901768, 37.433125 ], "pop" : 795, "state" : "KY" } +{ "_id" : "41840", "city" : "FLEMING NEON", "loc" : [ -82.69755499999999, 37.212056 ], "pop" : 2563, "state" : "KY" } +{ "_id" : "41843", "city" : "OMAHA", "loc" : [ -82.830417, 37.311528 ], "pop" : 336, "state" : "KY" } +{ "_id" : "41844", "city" : "RAVEN", "loc" : [ -82.82916400000001, 37.363252 ], "pop" : 197, "state" : "KY" } +{ "_id" : "41845", "city" : "PREMIUM", "loc" : [ -82.95811500000001, 37.068587 ], "pop" : 311, "state" : "KY" } +{ "_id" : "41847", "city" : "REDFOX", "loc" : [ -82.871865, 37.25311 ], "pop" : 974, "state" : "KY" } +{ "_id" : "41848", "city" : "ROXANA", "loc" : [ -83.034488, 37.090502 ], "pop" : 117, "state" : "KY" } +{ "_id" : "41849", "city" : "SECO", "loc" : [ -82.735832, 37.176523 ], "pop" : 791, "state" : "KY" } +{ "_id" : "41855", "city" : "THORNTON", "loc" : [ -82.73820000000001, 37.129622 ], "pop" : 635, "state" : "KY" } +{ "_id" : "41858", "city" : "DAY RURAL", "loc" : [ -82.838768, 37.115463 ], "pop" : 4678, "state" : "KY" } +{ "_id" : "41859", "city" : "DEMA", "loc" : [ -82.852313, 37.421491 ], "pop" : 468, "state" : "KY" } +{ "_id" : "41861", "city" : "RAVEN", "loc" : [ -82.826064, 37.404328 ], "pop" : 128, "state" : "KY" } +{ "_id" : "41862", "city" : "DRY CREEK", "loc" : [ -82.781036, 37.346979 ], "pop" : 1605, "state" : "KY" } +{ "_id" : "42001", "city" : "PADUCAH", "loc" : [ -88.66320399999999, 37.063377 ], "pop" : 27002, "state" : "KY" } +{ "_id" : "42003", "city" : "PADUCAH", "loc" : [ -88.593388, 37.036833 ], "pop" : 29932, "state" : "KY" } +{ "_id" : "42020", "city" : "ALMO", "loc" : [ -88.308666, 36.712805 ], "pop" : 1509, "state" : "KY" } +{ "_id" : "42021", "city" : "ARLINGTON", "loc" : [ -88.94383500000001, 36.800117 ], "pop" : 1780, "state" : "KY" } +{ "_id" : "42023", "city" : "BARDWELL", "loc" : [ -89.020855, 36.863387 ], "pop" : 1957, "state" : "KY" } +{ "_id" : "42024", "city" : "BARLOW", "loc" : [ -89.04081499999999, 37.049279 ], "pop" : 1335, "state" : "KY" } +{ "_id" : "42025", "city" : "BENTON", "loc" : [ -88.35477299999999, 36.880649 ], "pop" : 15886, "state" : "KY" } +{ "_id" : "42027", "city" : "BOAZ", "loc" : [ -88.622288, 36.929974 ], "pop" : 1609, "state" : "KY" } +{ "_id" : "42028", "city" : "BURNA", "loc" : [ -88.39418499999999, 37.231514 ], "pop" : 453, "state" : "KY" } +{ "_id" : "42029", "city" : "CALVERT CITY", "loc" : [ -88.38111499999999, 37.014741 ], "pop" : 4479, "state" : "KY" } +{ "_id" : "42031", "city" : "CLINTON", "loc" : [ -88.967574, 36.667531 ], "pop" : 4143, "state" : "KY" } +{ "_id" : "42032", "city" : "COLUMBUS", "loc" : [ -89.098288, 36.755505 ], "pop" : 454, "state" : "KY" } +{ "_id" : "42035", "city" : "CUNNINGHAM", "loc" : [ -88.872815, 36.896256 ], "pop" : 1501, "state" : "KY" } +{ "_id" : "42036", "city" : "DEXTER", "loc" : [ -88.180695, 36.70313 ], "pop" : 1800, "state" : "KY" } +{ "_id" : "42038", "city" : "EDDYVILLE", "loc" : [ -88.04939, 37.066385 ], "pop" : 4402, "state" : "KY" } +{ "_id" : "42039", "city" : "FANCY FARM", "loc" : [ -88.791785, 36.77674 ], "pop" : 1423, "state" : "KY" } +{ "_id" : "42040", "city" : "FARMINGTON", "loc" : [ -88.547832, 36.686903 ], "pop" : 2821, "state" : "KY" } +{ "_id" : "42041", "city" : "CRUTCHFIELD", "loc" : [ -88.889224, 36.528678 ], "pop" : 5955, "state" : "KY" } +{ "_id" : "42044", "city" : "GILBERTSVILLE", "loc" : [ -88.274856, 36.962465 ], "pop" : 3285, "state" : "KY" } +{ "_id" : "42045", "city" : "IUKA", "loc" : [ -88.261382, 37.05781 ], "pop" : 2210, "state" : "KY" } +{ "_id" : "42047", "city" : "HAMPTON", "loc" : [ -88.364897, 37.334764 ], "pop" : 922, "state" : "KY" } +{ "_id" : "42048", "city" : "HARDIN", "loc" : [ -88.262153, 36.776233 ], "pop" : 3246, "state" : "KY" } +{ "_id" : "42049", "city" : "HAZEL", "loc" : [ -88.331862, 36.542215 ], "pop" : 3235, "state" : "KY" } +{ "_id" : "42050", "city" : "HICKMAN", "loc" : [ -89.194667, 36.559269 ], "pop" : 3676, "state" : "KY" } +{ "_id" : "42051", "city" : "HICKORY", "loc" : [ -88.678782, 36.847783 ], "pop" : 3140, "state" : "KY" } +{ "_id" : "42053", "city" : "KEVIL", "loc" : [ -88.876366, 37.087231 ], "pop" : 5019, "state" : "KY" } +{ "_id" : "42054", "city" : "KIRKSEY", "loc" : [ -88.423815, 36.673092 ], "pop" : 3190, "state" : "KY" } +{ "_id" : "42055", "city" : "KUTTAWA", "loc" : [ -88.14981299999999, 37.061871 ], "pop" : 2222, "state" : "KY" } +{ "_id" : "42056", "city" : "LA CENTER", "loc" : [ -88.972954, 37.083019 ], "pop" : 1563, "state" : "KY" } +{ "_id" : "42058", "city" : "LEDBETTER", "loc" : [ -88.486503, 37.049167 ], "pop" : 2278, "state" : "KY" } +{ "_id" : "42064", "city" : "MARION", "loc" : [ -88.100471, 37.325426 ], "pop" : 8733, "state" : "KY" } +{ "_id" : "42066", "city" : "MAYFIELD", "loc" : [ -88.650637, 36.732686 ], "pop" : 16321, "state" : "KY" } +{ "_id" : "42069", "city" : "MELBER", "loc" : [ -88.752037, 36.919658 ], "pop" : 1187, "state" : "KY" } +{ "_id" : "42071", "city" : "MURRAY", "loc" : [ -88.30324899999999, 36.609915 ], "pop" : 20388, "state" : "KY" } +{ "_id" : "42076", "city" : "NEW CONCORD", "loc" : [ -88.09547999999999, 36.550003 ], "pop" : 922, "state" : "KY" } +{ "_id" : "42078", "city" : "SALEM", "loc" : [ -88.27113900000001, 37.255346 ], "pop" : 1801, "state" : "KY" } +{ "_id" : "42079", "city" : "SEDALIA", "loc" : [ -88.594813, 36.588208 ], "pop" : 1983, "state" : "KY" } +{ "_id" : "42081", "city" : "CARRSVILLE", "loc" : [ -88.383593, 37.12269 ], "pop" : 1200, "state" : "KY" } +{ "_id" : "42082", "city" : "SYMSONIA", "loc" : [ -88.528576, 36.871544 ], "pop" : 2725, "state" : "KY" } +{ "_id" : "42083", "city" : "TILINE", "loc" : [ -88.254679, 37.162773 ], "pop" : 198, "state" : "KY" } +{ "_id" : "42085", "city" : "WATER VALLEY", "loc" : [ -88.80837099999999, 36.569358 ], "pop" : 409, "state" : "KY" } +{ "_id" : "42086", "city" : "WEST PADUCAH", "loc" : [ -88.76107500000001, 37.092239 ], "pop" : 2223, "state" : "KY" } +{ "_id" : "42087", "city" : "WICKLIFFE", "loc" : [ -89.01769299999999, 36.967969 ], "pop" : 2605, "state" : "KY" } +{ "_id" : "42088", "city" : "WINGO", "loc" : [ -88.73944899999999, 36.625282 ], "pop" : 2643, "state" : "KY" } +{ "_id" : "42101", "city" : "PLUM SPRINGS", "loc" : [ -86.45589099999999, 37.007874 ], "pop" : 40671, "state" : "KY" } +{ "_id" : "42103", "city" : "BOWLING GREEN", "loc" : [ -86.393321, 36.96629 ], "pop" : 11391, "state" : "KY" } +{ "_id" : "42104", "city" : "BOWLING GREEN", "loc" : [ -86.448077, 36.937537 ], "pop" : 14948, "state" : "KY" } +{ "_id" : "42120", "city" : "ADOLPHUS", "loc" : [ -86.26359600000001, 36.677486 ], "pop" : 1976, "state" : "KY" } +{ "_id" : "42122", "city" : "ALVATON", "loc" : [ -86.363213, 36.86296 ], "pop" : 2934, "state" : "KY" } +{ "_id" : "42123", "city" : "AUSTIN", "loc" : [ -85.98502999999999, 36.812376 ], "pop" : 425, "state" : "KY" } +{ "_id" : "42124", "city" : "BEAUMONT", "loc" : [ -85.64882900000001, 36.88758 ], "pop" : 206, "state" : "KY" } +{ "_id" : "42127", "city" : "CAVE CITY", "loc" : [ -85.944283, 37.11696 ], "pop" : 6283, "state" : "KY" } +{ "_id" : "42129", "city" : "SUBTLE", "loc" : [ -85.592741, 36.985197 ], "pop" : 4020, "state" : "KY" } +{ "_id" : "42130", "city" : "EIGHTY EIGHT", "loc" : [ -85.828076, 36.939238 ], "pop" : 2716, "state" : "KY" } +{ "_id" : "42131", "city" : "ETOILE", "loc" : [ -85.91727899999999, 36.813428 ], "pop" : 138, "state" : "KY" } +{ "_id" : "42133", "city" : "FOUNTAIN RUN", "loc" : [ -85.952023, 36.72002 ], "pop" : 1568, "state" : "KY" } +{ "_id" : "42134", "city" : "FRANKLIN", "loc" : [ -86.570043, 36.725353 ], "pop" : 14684, "state" : "KY" } +{ "_id" : "42140", "city" : "GAMALIEL", "loc" : [ -85.81335300000001, 36.654037 ], "pop" : 1377, "state" : "KY" } +{ "_id" : "42141", "city" : "GLASGOW", "loc" : [ -85.92205300000001, 36.988189 ], "pop" : 21079, "state" : "KY" } +{ "_id" : "42151", "city" : "HESTAND", "loc" : [ -85.569799, 36.653473 ], "pop" : 386, "state" : "KY" } +{ "_id" : "42153", "city" : "HOLLAND", "loc" : [ -86.049756, 36.667316 ], "pop" : 330, "state" : "KY" } +{ "_id" : "42154", "city" : "KNOB LICK", "loc" : [ -85.71369799999999, 36.996922 ], "pop" : 656, "state" : "KY" } +{ "_id" : "42155", "city" : "LAMB", "loc" : [ -85.885413, 36.799768 ], "pop" : 189, "state" : "KY" } +{ "_id" : "42156", "city" : "LUCAS", "loc" : [ -86.035678, 36.837594 ], "pop" : 415, "state" : "KY" } +{ "_id" : "42157", "city" : "MOUNT HERMAN", "loc" : [ -85.81916200000001, 36.808982 ], "pop" : 816, "state" : "KY" } +{ "_id" : "42159", "city" : "OAKLAND", "loc" : [ -86.285934, 37.007595 ], "pop" : 2879, "state" : "KY" } +{ "_id" : "42160", "city" : "PARK CITY", "loc" : [ -86.077619, 37.057926 ], "pop" : 1351, "state" : "KY" } +{ "_id" : "42163", "city" : "ROCKY HILL", "loc" : [ -86.11009, 37.067481 ], "pop" : 139, "state" : "KY" } +{ "_id" : "42164", "city" : "SCOTTSVILLE", "loc" : [ -86.192863, 36.761437 ], "pop" : 11611, "state" : "KY" } +{ "_id" : "42166", "city" : "SUMMER SHADE", "loc" : [ -85.708322, 36.888345 ], "pop" : 2281, "state" : "KY" } +{ "_id" : "42167", "city" : "T VILLE", "loc" : [ -85.696842, 36.713085 ], "pop" : 8016, "state" : "KY" } +{ "_id" : "42169", "city" : "WILLOW SHADE", "loc" : [ -85.62203, 36.858183 ], "pop" : 126, "state" : "KY" } +{ "_id" : "42170", "city" : "WOODBURN", "loc" : [ -86.562291, 36.855688 ], "pop" : 1573, "state" : "KY" } +{ "_id" : "42171", "city" : "SMITHS GROVE", "loc" : [ -86.19375700000001, 37.058104 ], "pop" : 4650, "state" : "KY" } +{ "_id" : "42202", "city" : "ADAIRVILLE", "loc" : [ -86.85852300000001, 36.691385 ], "pop" : 2481, "state" : "KY" } +{ "_id" : "42204", "city" : "ALLENSVILLE", "loc" : [ -87.02444199999999, 36.694744 ], "pop" : 842, "state" : "KY" } +{ "_id" : "42206", "city" : "AUBURN", "loc" : [ -86.719813, 36.881755 ], "pop" : 4192, "state" : "KY" } +{ "_id" : "42207", "city" : "BEE SPRING", "loc" : [ -86.279377, 37.29754 ], "pop" : 1480, "state" : "KY" } +{ "_id" : "42210", "city" : "REEDYVILLE", "loc" : [ -86.27400299999999, 37.18817 ], "pop" : 2296, "state" : "KY" } +{ "_id" : "42211", "city" : "GOLDEN POND", "loc" : [ -87.84124300000001, 36.846421 ], "pop" : 9683, "state" : "KY" } +{ "_id" : "42214", "city" : "CENTER", "loc" : [ -85.670455, 37.100897 ], "pop" : 2051, "state" : "KY" } +{ "_id" : "42215", "city" : "CERULEAN", "loc" : [ -87.66484800000001, 36.949619 ], "pop" : 1654, "state" : "KY" } +{ "_id" : "42217", "city" : "CROFTON", "loc" : [ -87.48907199999999, 37.034387 ], "pop" : 3531, "state" : "KY" } +{ "_id" : "42220", "city" : "ELKTON", "loc" : [ -87.167833, 36.909403 ], "pop" : 7207, "state" : "KY" } +{ "_id" : "42223", "city" : "FORT CAMPBELL", "loc" : [ -87.459706, 36.653584 ], "pop" : 18861, "state" : "KY" } +{ "_id" : "42232", "city" : "GRACEY", "loc" : [ -87.6545, 36.856393 ], "pop" : 92, "state" : "KY" } +{ "_id" : "42234", "city" : "TINY TOWN", "loc" : [ -87.170931, 36.664268 ], "pop" : 2307, "state" : "KY" } +{ "_id" : "42236", "city" : "HERNDON", "loc" : [ -87.608215, 36.708469 ], "pop" : 810, "state" : "KY" } +{ "_id" : "42240", "city" : "HOPKINSVILLE", "loc" : [ -87.485148, 36.862053 ], "pop" : 39331, "state" : "KY" } +{ "_id" : "42250", "city" : "HUFF", "loc" : [ -86.38211200000001, 37.234241 ], "pop" : 92, "state" : "KY" } +{ "_id" : "42252", "city" : "JETSON", "loc" : [ -86.520872, 37.240367 ], "pop" : 1375, "state" : "KY" } +{ "_id" : "42254", "city" : "LA FAYETTE", "loc" : [ -87.65634, 36.658165 ], "pop" : 123, "state" : "KY" } +{ "_id" : "42256", "city" : "LEWISBURG", "loc" : [ -86.988748, 37.003747 ], "pop" : 3241, "state" : "KY" } +{ "_id" : "42257", "city" : "LINDSEYVILLE", "loc" : [ -86.296384, 37.22813 ], "pop" : 601, "state" : "KY" } +{ "_id" : "42259", "city" : "MAMMOTH CAVE NAT", "loc" : [ -86.178112, 37.274385 ], "pop" : 1354, "state" : "KY" } +{ "_id" : "42261", "city" : "LOGANSPORT", "loc" : [ -86.703726, 37.19102 ], "pop" : 5488, "state" : "KY" } +{ "_id" : "42262", "city" : "OAK GROVE", "loc" : [ -87.42551400000001, 36.665225 ], "pop" : 3556, "state" : "KY" } +{ "_id" : "42265", "city" : "OLMSTEAD", "loc" : [ -86.981846, 36.78463 ], "pop" : 1529, "state" : "KY" } +{ "_id" : "42266", "city" : "PEMBROKE", "loc" : [ -87.331892, 36.798221 ], "pop" : 1221, "state" : "KY" } +{ "_id" : "42268", "city" : "QUALITY", "loc" : [ -86.86905299999999, 37.035402 ], "pop" : 1436, "state" : "KY" } +{ "_id" : "42273", "city" : "ROCHESTER", "loc" : [ -86.85921, 37.204778 ], "pop" : 669, "state" : "KY" } +{ "_id" : "42274", "city" : "BROWNING", "loc" : [ -86.58538900000001, 36.939859 ], "pop" : 1592, "state" : "KY" } +{ "_id" : "42275", "city" : "ROUNDHILL", "loc" : [ -86.40697400000001, 37.25601 ], "pop" : 405, "state" : "KY" } +{ "_id" : "42276", "city" : "DAYSVILLE", "loc" : [ -86.88870799999999, 36.853074 ], "pop" : 12585, "state" : "KY" } +{ "_id" : "42280", "city" : "SHARON GROVE", "loc" : [ -87.10029, 36.927754 ], "pop" : 651, "state" : "KY" } +{ "_id" : "42284", "city" : "SUNFISH", "loc" : [ -86.390826, 37.3022 ], "pop" : 483, "state" : "KY" } +{ "_id" : "42285", "city" : "KYROCK", "loc" : [ -86.29568999999999, 37.252343 ], "pop" : 416, "state" : "KY" } +{ "_id" : "42286", "city" : "TRENTON", "loc" : [ -87.261098, 36.731384 ], "pop" : 1209, "state" : "KY" } +{ "_id" : "42287", "city" : "WELCHS CREEK", "loc" : [ -86.637139, 37.30856 ], "pop" : 2972, "state" : "KY" } +{ "_id" : "42301", "city" : "OWENSBORO", "loc" : [ -87.155394, 37.751255 ], "pop" : 40043, "state" : "KY" } +{ "_id" : "42303", "city" : "OWENSBORO", "loc" : [ -87.080252, 37.755884 ], "pop" : 32552, "state" : "KY" } +{ "_id" : "42320", "city" : "BEAVER DAM", "loc" : [ -86.87293200000001, 37.386958 ], "pop" : 6508, "state" : "KY" } +{ "_id" : "42321", "city" : "BEECH CREEK", "loc" : [ -87.12385399999999, 37.183704 ], "pop" : 303, "state" : "KY" } +{ "_id" : "42323", "city" : "BEECHMONT", "loc" : [ -87.03934, 37.177552 ], "pop" : 2431, "state" : "KY" } +{ "_id" : "42324", "city" : "BELTON", "loc" : [ -86.977369, 37.151056 ], "pop" : 1137, "state" : "KY" } +{ "_id" : "42325", "city" : "BREMEN", "loc" : [ -87.232989, 37.342955 ], "pop" : 3631, "state" : "KY" } +{ "_id" : "42326", "city" : "BROWDER", "loc" : [ -86.97819699999999, 37.259333 ], "pop" : 0, "state" : "KY" } +{ "_id" : "42327", "city" : "CALHOUN", "loc" : [ -87.27730699999999, 37.574997 ], "pop" : 3734, "state" : "KY" } +{ "_id" : "42328", "city" : "CENTERTOWN", "loc" : [ -87.00902000000001, 37.407918 ], "pop" : 1434, "state" : "KY" } +{ "_id" : "42330", "city" : "CENTRAL CITY", "loc" : [ -87.12023600000001, 37.300699 ], "pop" : 8187, "state" : "KY" } +{ "_id" : "42333", "city" : "CROMWELL", "loc" : [ -86.769964, 37.341765 ], "pop" : 356, "state" : "KY" } +{ "_id" : "42337", "city" : "DRAKESBORO", "loc" : [ -87.047966, 37.213588 ], "pop" : 1552, "state" : "KY" } +{ "_id" : "42338", "city" : "DUNDEE", "loc" : [ -86.760446, 37.551052 ], "pop" : 255, "state" : "KY" } +{ "_id" : "42339", "city" : "DUNMOR", "loc" : [ -87.00789, 37.083967 ], "pop" : 534, "state" : "KY" } +{ "_id" : "42343", "city" : "FORDSVILLE", "loc" : [ -86.726251, 37.629738 ], "pop" : 2108, "state" : "KY" } +{ "_id" : "42344", "city" : "GRAHAM", "loc" : [ -87.25784899999999, 37.225836 ], "pop" : 2837, "state" : "KY" } +{ "_id" : "42345", "city" : "GREENVILLE", "loc" : [ -87.18061299999999, 37.207642 ], "pop" : 8616, "state" : "KY" } +{ "_id" : "42347", "city" : "HARTFORD", "loc" : [ -86.91798199999999, 37.478533 ], "pop" : 4628, "state" : "KY" } +{ "_id" : "42348", "city" : "HAWESVILLE", "loc" : [ -86.76380399999999, 37.850318 ], "pop" : 4194, "state" : "KY" } +{ "_id" : "42349", "city" : "HORSE BRANCH", "loc" : [ -86.698734, 37.423417 ], "pop" : 1880, "state" : "KY" } +{ "_id" : "42350", "city" : "ISLAND", "loc" : [ -87.16921000000001, 37.447109 ], "pop" : 1453, "state" : "KY" } +{ "_id" : "42351", "city" : "LEWISPORT", "loc" : [ -86.895712, 37.909016 ], "pop" : 4102, "state" : "KY" } +{ "_id" : "42352", "city" : "LIVERMORE", "loc" : [ -87.12386100000001, 37.504453 ], "pop" : 2336, "state" : "KY" } +{ "_id" : "42355", "city" : "MACEO", "loc" : [ -86.999915, 37.843601 ], "pop" : 2223, "state" : "KY" } +{ "_id" : "42358", "city" : "NARROWS", "loc" : [ -86.68671999999999, 37.569072 ], "pop" : 124, "state" : "KY" } +{ "_id" : "42361", "city" : "OLATON", "loc" : [ -86.728223, 37.498666 ], "pop" : 1838, "state" : "KY" } +{ "_id" : "42365", "city" : "PENROD", "loc" : [ -86.998181, 37.116725 ], "pop" : 354, "state" : "KY" } +{ "_id" : "42366", "city" : "PHILPOT", "loc" : [ -86.937172, 37.718317 ], "pop" : 6890, "state" : "KY" } +{ "_id" : "42368", "city" : "REYNOLDS STATION", "loc" : [ -86.77942, 37.696533 ], "pop" : 1389, "state" : "KY" } +{ "_id" : "42369", "city" : "ROCKPORT", "loc" : [ -86.97462400000001, 37.326871 ], "pop" : 647, "state" : "KY" } +{ "_id" : "42371", "city" : "RUMSEY", "loc" : [ -87.280644, 37.50762 ], "pop" : 836, "state" : "KY" } +{ "_id" : "42372", "city" : "SACRAMENTO", "loc" : [ -87.273584, 37.417687 ], "pop" : 1265, "state" : "KY" } +{ "_id" : "42376", "city" : "UTICA", "loc" : [ -87.059082, 37.620559 ], "pop" : 4800, "state" : "KY" } +{ "_id" : "42378", "city" : "WHITESVILLE", "loc" : [ -86.869912, 37.683402 ], "pop" : 640, "state" : "KY" } +{ "_id" : "42404", "city" : "CLAY", "loc" : [ -87.836793, 37.475599 ], "pop" : 2708, "state" : "KY" } +{ "_id" : "42406", "city" : "CORYDON", "loc" : [ -87.700033, 37.744284 ], "pop" : 3688, "state" : "KY" } +{ "_id" : "42408", "city" : "DAWSON SPRINGS", "loc" : [ -87.68205, 37.196386 ], "pop" : 6728, "state" : "KY" } +{ "_id" : "42409", "city" : "DIXON", "loc" : [ -87.701904, 37.510587 ], "pop" : 1093, "state" : "KY" } +{ "_id" : "42410", "city" : "EARLINGTON", "loc" : [ -87.522679, 37.267899 ], "pop" : 2445, "state" : "KY" } +{ "_id" : "42411", "city" : "FREDONIA", "loc" : [ -88.011229, 37.212956 ], "pop" : 1557, "state" : "KY" } +{ "_id" : "42413", "city" : "HANSON", "loc" : [ -87.47513499999999, 37.438246 ], "pop" : 2329, "state" : "KY" } +{ "_id" : "42420", "city" : "HENDERSON", "loc" : [ -87.563228, 37.827393 ], "pop" : 34941, "state" : "KY" } +{ "_id" : "42431", "city" : "MADISONVILLE", "loc" : [ -87.49532600000001, 37.325551 ], "pop" : 26866, "state" : "KY" } +{ "_id" : "42436", "city" : "MANITOU", "loc" : [ -87.56117999999999, 37.407972 ], "pop" : 1425, "state" : "KY" } +{ "_id" : "42437", "city" : "HENSHAW", "loc" : [ -87.87685999999999, 37.663935 ], "pop" : 10346, "state" : "KY" } +{ "_id" : "42441", "city" : "NEBO", "loc" : [ -87.686521, 37.368255 ], "pop" : 1639, "state" : "KY" } +{ "_id" : "42442", "city" : "NORTONVILLE", "loc" : [ -87.460505, 37.183367 ], "pop" : 2811, "state" : "KY" } +{ "_id" : "42445", "city" : "PRINCETON", "loc" : [ -87.863226, 37.115097 ], "pop" : 11736, "state" : "KY" } +{ "_id" : "42450", "city" : "PROVIDENCE", "loc" : [ -87.750512, 37.404958 ], "pop" : 4778, "state" : "KY" } +{ "_id" : "42451", "city" : "REED", "loc" : [ -87.37038200000001, 37.858764 ], "pop" : 1072, "state" : "KY" } +{ "_id" : "42452", "city" : "ROBARDS", "loc" : [ -87.526596, 37.675836 ], "pop" : 1416, "state" : "KY" } +{ "_id" : "42453", "city" : "SAINT CHARLES", "loc" : [ -87.55386, 37.176635 ], "pop" : 848, "state" : "KY" } +{ "_id" : "42455", "city" : "SEBREE", "loc" : [ -87.52548899999999, 37.588921 ], "pop" : 2911, "state" : "KY" } +{ "_id" : "42456", "city" : "SLAUGHTERS", "loc" : [ -87.50534399999999, 37.5054 ], "pop" : 914, "state" : "KY" } +{ "_id" : "42458", "city" : "SPOTTSVILLE", "loc" : [ -87.424682, 37.839948 ], "pop" : 1534, "state" : "KY" } +{ "_id" : "42459", "city" : "STURGIS", "loc" : [ -87.99645700000001, 37.548669 ], "pop" : 5483, "state" : "KY" } +{ "_id" : "42461", "city" : "UNIONTOWN", "loc" : [ -87.92633499999999, 37.767741 ], "pop" : 1555, "state" : "KY" } +{ "_id" : "42462", "city" : "WAVERLY", "loc" : [ -87.80668799999999, 37.742985 ], "pop" : 1521, "state" : "KY" } +{ "_id" : "42464", "city" : "WHITE PLAINS", "loc" : [ -87.36441499999999, 37.178765 ], "pop" : 1877, "state" : "KY" } +{ "_id" : "42501", "city" : "ALCALDE", "loc" : [ -84.60436199999999, 37.073853 ], "pop" : 28546, "state" : "KY" } +{ "_id" : "42516", "city" : "BETHELRIDGE", "loc" : [ -84.778971, 37.22459 ], "pop" : 550, "state" : "KY" } +{ "_id" : "42518", "city" : "BRONSTON", "loc" : [ -84.63141299999999, 36.952488 ], "pop" : 2417, "state" : "KY" } +{ "_id" : "42519", "city" : "SLOANS VALLEY", "loc" : [ -84.565237, 36.96145 ], "pop" : 2843, "state" : "KY" } +{ "_id" : "42528", "city" : "DUNNVILLE", "loc" : [ -84.929507, 37.176894 ], "pop" : 2308, "state" : "KY" } +{ "_id" : "42532", "city" : "JABEZ", "loc" : [ -84.863157, 37.066884 ], "pop" : 364, "state" : "KY" } +{ "_id" : "42539", "city" : "LIBERTY", "loc" : [ -84.971864, 37.314553 ], "pop" : 7831, "state" : "KY" } +{ "_id" : "42541", "city" : "MIDDLEBURG", "loc" : [ -84.832103, 37.359082 ], "pop" : 697, "state" : "KY" } +{ "_id" : "42544", "city" : "POINTER", "loc" : [ -84.766245, 37.064216 ], "pop" : 3861, "state" : "KY" } +{ "_id" : "42553", "city" : "SCIENCE HILL", "loc" : [ -84.64865, 37.168333 ], "pop" : 2899, "state" : "KY" } +{ "_id" : "42554", "city" : "SHOPVILLE", "loc" : [ -84.44593999999999, 37.174243 ], "pop" : 3258, "state" : "KY" } +{ "_id" : "42555", "city" : "SLOANS VALLEY", "loc" : [ -84.37620099999999, 36.968617 ], "pop" : 0, "state" : "KY" } +{ "_id" : "42558", "city" : "TATEVILLE", "loc" : [ -84.43836400000001, 36.973892 ], "pop" : 0, "state" : "KY" } +{ "_id" : "42566", "city" : "YOSEMITE", "loc" : [ -84.81241199999999, 37.307355 ], "pop" : 380, "state" : "KY" } +{ "_id" : "42567", "city" : "PULASKI", "loc" : [ -84.605593, 37.247038 ], "pop" : 5867, "state" : "KY" } +{ "_id" : "42601", "city" : "AARON", "loc" : [ -85.19911399999999, 36.812827 ], "pop" : 270, "state" : "KY" } +{ "_id" : "42602", "city" : "ALBANY", "loc" : [ -85.140677, 36.68569 ], "pop" : 6419, "state" : "KY" } +{ "_id" : "42603", "city" : "ALPHA", "loc" : [ -85.092405, 36.779735 ], "pop" : 2163, "state" : "KY" } +{ "_id" : "42611", "city" : "COOPERSVILLE", "loc" : [ -84.718717, 36.722168 ], "pop" : 350, "state" : "KY" } +{ "_id" : "42613", "city" : "DELTA", "loc" : [ -84.68402399999999, 36.801658 ], "pop" : 639, "state" : "KY" } +{ "_id" : "42629", "city" : "JAMESTOWN", "loc" : [ -85.096844, 36.967955 ], "pop" : 5140, "state" : "KY" } +{ "_id" : "42633", "city" : "PUEBLO", "loc" : [ -84.839251, 36.842723 ], "pop" : 13523, "state" : "KY" } +{ "_id" : "42634", "city" : "PARKERS LAKE", "loc" : [ -84.443642, 36.834689 ], "pop" : 1952, "state" : "KY" } +{ "_id" : "42635", "city" : "HOLLYHILL", "loc" : [ -84.412745, 36.663677 ], "pop" : 4865, "state" : "KY" } +{ "_id" : "42638", "city" : "REVELO", "loc" : [ -84.472189, 36.673363 ], "pop" : 221, "state" : "KY" } +{ "_id" : "42640", "city" : "ROCKYBRANCH", "loc" : [ -84.81017900000001, 36.668512 ], "pop" : 79, "state" : "KY" } +{ "_id" : "42642", "city" : "WEBBS CROSS ROAD", "loc" : [ -85.042873, 37.056683 ], "pop" : 9569, "state" : "KY" } +{ "_id" : "42643", "city" : "SAWYER", "loc" : [ -84.361745, 36.925337 ], "pop" : 288, "state" : "KY" } +{ "_id" : "42647", "city" : "STEARNS", "loc" : [ -84.51648400000001, 36.708184 ], "pop" : 4201, "state" : "KY" } +{ "_id" : "42649", "city" : "STRUNK", "loc" : [ -84.430801, 36.619068 ], "pop" : 481, "state" : "KY" } +{ "_id" : "42653", "city" : "WIBORG", "loc" : [ -84.46836399999999, 36.738597 ], "pop" : 3595, "state" : "KY" } +{ "_id" : "42655", "city" : "WINDY", "loc" : [ -84.961122, 36.778411 ], "pop" : 2481, "state" : "KY" } +{ "_id" : "42701", "city" : "E TOWN", "loc" : [ -85.858977, 37.706973 ], "pop" : 31300, "state" : "KY" } +{ "_id" : "42711", "city" : "BAKERTON", "loc" : [ -85.331723, 36.871151 ], "pop" : 222, "state" : "KY" } +{ "_id" : "42712", "city" : "BIG CLIFTY", "loc" : [ -86.139498, 37.527801 ], "pop" : 1459, "state" : "KY" } +{ "_id" : "42713", "city" : "BONNIEVILLE", "loc" : [ -85.895996, 37.374141 ], "pop" : 1627, "state" : "KY" } +{ "_id" : "42714", "city" : "BOW", "loc" : [ -85.301935, 36.708119 ], "pop" : 697, "state" : "KY" } +{ "_id" : "42715", "city" : "BREEDING", "loc" : [ -85.407822, 36.981043 ], "pop" : 692, "state" : "KY" } +{ "_id" : "42716", "city" : "BUFFALO", "loc" : [ -85.643411, 37.47864 ], "pop" : 1614, "state" : "KY" } +{ "_id" : "42717", "city" : "BURKESVILLE", "loc" : [ -85.39702800000001, 36.806791 ], "pop" : 4891, "state" : "KY" } +{ "_id" : "42718", "city" : "CAMPBELLSVILLE", "loc" : [ -85.35075500000001, 37.346618 ], "pop" : 19358, "state" : "KY" } +{ "_id" : "42721", "city" : "CANEYVILLE", "loc" : [ -86.470207, 37.422168 ], "pop" : 3148, "state" : "KY" } +{ "_id" : "42722", "city" : "CANMER", "loc" : [ -85.720292, 37.269562 ], "pop" : 465, "state" : "KY" } +{ "_id" : "42723", "city" : "CASEY CREEK", "loc" : [ -85.20764800000001, 37.273479 ], "pop" : 1102, "state" : "KY" } +{ "_id" : "42724", "city" : "STEPHENSBURG", "loc" : [ -86.006046, 37.660339 ], "pop" : 3153, "state" : "KY" } +{ "_id" : "42726", "city" : "WAX", "loc" : [ -86.160219, 37.427896 ], "pop" : 3001, "state" : "KY" } +{ "_id" : "42728", "city" : "MONTPELIER", "loc" : [ -85.269265, 37.116408 ], "pop" : 10012, "state" : "KY" } +{ "_id" : "42729", "city" : "CUB RUN", "loc" : [ -86.08132000000001, 37.314855 ], "pop" : 609, "state" : "KY" } +{ "_id" : "42730", "city" : "CUNDIFF", "loc" : [ -85.274434, 36.957125 ], "pop" : 429, "state" : "KY" } +{ "_id" : "42731", "city" : "DUBRE", "loc" : [ -85.568281, 36.891998 ], "pop" : 210, "state" : "KY" } +{ "_id" : "42732", "city" : "E VIEW", "loc" : [ -86.119153, 37.61478 ], "pop" : 2728, "state" : "KY" } +{ "_id" : "42733", "city" : "ELK HORN", "loc" : [ -85.19176400000001, 37.339287 ], "pop" : 637, "state" : "KY" } +{ "_id" : "42735", "city" : "FAIRPLAY", "loc" : [ -85.32621399999999, 37.035626 ], "pop" : 557, "state" : "KY" } +{ "_id" : "42736", "city" : "FINLEY", "loc" : [ -85.35244899999999, 37.454549 ], "pop" : 1153, "state" : "KY" } +{ "_id" : "42740", "city" : "GLENDALE", "loc" : [ -85.892101, 37.603398 ], "pop" : 991, "state" : "KY" } +{ "_id" : "42741", "city" : "GLENS FORK", "loc" : [ -85.240117, 37.018195 ], "pop" : 788, "state" : "KY" } +{ "_id" : "42742", "city" : "GRADYVILLE", "loc" : [ -85.42753, 37.054438 ], "pop" : 775, "state" : "KY" } +{ "_id" : "42743", "city" : "GREENSBURG", "loc" : [ -85.523639, 37.243009 ], "pop" : 8471, "state" : "KY" } +{ "_id" : "42746", "city" : "HARDYVILLE", "loc" : [ -85.75417400000001, 37.224905 ], "pop" : 1234, "state" : "KY" } +{ "_id" : "42748", "city" : "HODGENVILLE", "loc" : [ -85.723206, 37.574566 ], "pop" : 6666, "state" : "KY" } +{ "_id" : "42749", "city" : "HORSE CAVE", "loc" : [ -85.87854900000001, 37.184939 ], "pop" : 5282, "state" : "KY" } +{ "_id" : "42752", "city" : "KETTLE", "loc" : [ -85.40917, 36.694573 ], "pop" : 991, "state" : "KY" } +{ "_id" : "42753", "city" : "KNIFLEY", "loc" : [ -85.112844, 37.231886 ], "pop" : 648, "state" : "KY" } +{ "_id" : "42754", "city" : "SADLER", "loc" : [ -86.30371, 37.493098 ], "pop" : 13023, "state" : "KY" } +{ "_id" : "42757", "city" : "MAGNOLIA", "loc" : [ -85.730823, 37.416464 ], "pop" : 2960, "state" : "KY" } +{ "_id" : "42761", "city" : "MILLTOWN", "loc" : [ -85.444181, 37.103415 ], "pop" : 625, "state" : "KY" } +{ "_id" : "42762", "city" : "MILLWOOD", "loc" : [ -86.37982100000001, 37.460879 ], "pop" : 561, "state" : "KY" } +{ "_id" : "42764", "city" : "MOUNT SHERMAN", "loc" : [ -85.631381, 37.453408 ], "pop" : 589, "state" : "KY" } +{ "_id" : "42765", "city" : "MUNFORDVILLE", "loc" : [ -85.920141, 37.289812 ], "pop" : 4085, "state" : "KY" } +{ "_id" : "42768", "city" : "PEYTONSBURG", "loc" : [ -85.371663, 36.646299 ], "pop" : 272, "state" : "KY" } +{ "_id" : "42776", "city" : "SONORA", "loc" : [ -85.92296899999999, 37.52207 ], "pop" : 2396, "state" : "KY" } +{ "_id" : "42782", "city" : "SUMMERSVILLE", "loc" : [ -85.619376, 37.34186 ], "pop" : 778, "state" : "KY" } +{ "_id" : "42784", "city" : "UPTON", "loc" : [ -85.908619, 37.456802 ], "pop" : 2272, "state" : "KY" } +{ "_id" : "42788", "city" : "WHITE MILLS", "loc" : [ -86.039519, 37.543765 ], "pop" : 540, "state" : "KY" } +{ "_id" : "43001", "city" : "ALEXANDRIA", "loc" : [ -82.60768299999999, 40.105965 ], "pop" : 2485, "state" : "OH" } +{ "_id" : "43002", "city" : "AMLIN", "loc" : [ -83.179157, 40.07203 ], "pop" : 1699, "state" : "OH" } +{ "_id" : "43003", "city" : "ASHLEY", "loc" : [ -82.954201, 40.416264 ], "pop" : 3009, "state" : "OH" } +{ "_id" : "43004", "city" : "BLACKLICK", "loc" : [ -82.807857, 40.020952 ], "pop" : 2288, "state" : "OH" } +{ "_id" : "43006", "city" : "BRINKHAVEN", "loc" : [ -82.155289, 40.458346 ], "pop" : 378, "state" : "OH" } +{ "_id" : "43009", "city" : "CABLE", "loc" : [ -83.64696000000001, 40.178411 ], "pop" : 1660, "state" : "OH" } +{ "_id" : "43011", "city" : "CENTERBURG", "loc" : [ -82.68003899999999, 40.286513 ], "pop" : 4437, "state" : "OH" } +{ "_id" : "43013", "city" : "CROTON", "loc" : [ -82.698948, 40.237603 ], "pop" : 1197, "state" : "OH" } +{ "_id" : "43014", "city" : "DANVILLE", "loc" : [ -82.26385500000001, 40.455693 ], "pop" : 2033, "state" : "OH" } +{ "_id" : "43015", "city" : "DELAWARE", "loc" : [ -83.072312, 40.293186 ], "pop" : 29384, "state" : "OH" } +{ "_id" : "43017", "city" : "DUBLIN", "loc" : [ -83.114633, 40.109297 ], "pop" : 34840, "state" : "OH" } +{ "_id" : "43019", "city" : "FREDERICKTOWN", "loc" : [ -82.585711, 40.497613 ], "pop" : 10647, "state" : "OH" } +{ "_id" : "43021", "city" : "GALENA", "loc" : [ -82.895937, 40.191546 ], "pop" : 4893, "state" : "OH" } +{ "_id" : "43022", "city" : "GAMBIER", "loc" : [ -82.382752, 40.378241 ], "pop" : 3903, "state" : "OH" } +{ "_id" : "43023", "city" : "GRANVILLE", "loc" : [ -82.51939900000001, 40.078791 ], "pop" : 9523, "state" : "OH" } +{ "_id" : "43025", "city" : "HEBRON", "loc" : [ -82.491868, 39.953464 ], "pop" : 7920, "state" : "OH" } +{ "_id" : "43026", "city" : "HILLIARD", "loc" : [ -83.138333, 40.032187 ], "pop" : 25442, "state" : "OH" } +{ "_id" : "43028", "city" : "HOWARD", "loc" : [ -82.33335099999999, 40.415818 ], "pop" : 1972, "state" : "OH" } +{ "_id" : "43029", "city" : "IRWIN", "loc" : [ -83.458699, 40.128352 ], "pop" : 498, "state" : "OH" } +{ "_id" : "43031", "city" : "JOHNSTOWN", "loc" : [ -82.697284, 40.14452 ], "pop" : 7550, "state" : "OH" } +{ "_id" : "43036", "city" : "MAGNETIC SPRINGS", "loc" : [ -83.26714200000001, 40.358023 ], "pop" : 708, "state" : "OH" } +{ "_id" : "43037", "city" : "MARTINSBURG", "loc" : [ -82.356691, 40.267954 ], "pop" : 370, "state" : "OH" } +{ "_id" : "43040", "city" : "MARYSVILLE", "loc" : [ -83.362213, 40.247723 ], "pop" : 19644, "state" : "OH" } +{ "_id" : "43044", "city" : "MECHANICSBURG", "loc" : [ -83.572352, 40.064659 ], "pop" : 5390, "state" : "OH" } +{ "_id" : "43045", "city" : "MILFORD CENTER", "loc" : [ -83.437333, 40.181666 ], "pop" : 1260, "state" : "OH" } +{ "_id" : "43046", "city" : "MILLERSPORT", "loc" : [ -82.52834799999999, 39.899307 ], "pop" : 3171, "state" : "OH" } +{ "_id" : "43050", "city" : "MOUNT VERNON", "loc" : [ -82.487286, 40.384937 ], "pop" : 24421, "state" : "OH" } +{ "_id" : "43054", "city" : "NEW ALBANY", "loc" : [ -82.798793, 40.084686 ], "pop" : 3520, "state" : "OH" } +{ "_id" : "43055", "city" : "NEWARK", "loc" : [ -82.40456500000001, 40.072429 ], "pop" : 56412, "state" : "OH" } +{ "_id" : "43056", "city" : "HEATH", "loc" : [ -82.38752700000001, 40.019659 ], "pop" : 13336, "state" : "OH" } +{ "_id" : "43060", "city" : "NORTH LEWISBURG", "loc" : [ -83.561476, 40.222871 ], "pop" : 1407, "state" : "OH" } +{ "_id" : "43061", "city" : "OSTRANDER", "loc" : [ -83.197813, 40.273971 ], "pop" : 2622, "state" : "OH" } +{ "_id" : "43062", "city" : "PATASKALA", "loc" : [ -82.668656, 40.000925 ], "pop" : 15470, "state" : "OH" } +{ "_id" : "43064", "city" : "PLAIN CITY", "loc" : [ -83.269049, 40.097356 ], "pop" : 8323, "state" : "OH" } +{ "_id" : "43065", "city" : "SHAWNEE HILLS", "loc" : [ -83.074921, 40.152652 ], "pop" : 14955, "state" : "OH" } +{ "_id" : "43066", "city" : "RADNOR", "loc" : [ -83.178074, 40.391779 ], "pop" : 1150, "state" : "OH" } +{ "_id" : "43067", "city" : "RAYMOND", "loc" : [ -83.36492699999999, 40.247321 ], "pop" : 576, "state" : "OH" } +{ "_id" : "43068", "city" : "REYNOLDSBURG", "loc" : [ -82.803454, 39.955145 ], "pop" : 35820, "state" : "OH" } +{ "_id" : "43071", "city" : "SAINT LOUISVILLE", "loc" : [ -82.356015, 40.181776 ], "pop" : 2389, "state" : "OH" } +{ "_id" : "43072", "city" : "SAINT PARIS", "loc" : [ -83.96306199999999, 40.105755 ], "pop" : 5963, "state" : "OH" } +{ "_id" : "43074", "city" : "SUNBURY", "loc" : [ -82.851051, 40.265499 ], "pop" : 7508, "state" : "OH" } +{ "_id" : "43076", "city" : "THORNVILLE", "loc" : [ -82.407059, 39.897364 ], "pop" : 8187, "state" : "OH" } +{ "_id" : "43078", "city" : "URBANA", "loc" : [ -83.76714200000001, 40.106639 ], "pop" : 20175, "state" : "OH" } +{ "_id" : "43080", "city" : "UTICA", "loc" : [ -82.413459, 40.244137 ], "pop" : 5502, "state" : "OH" } +{ "_id" : "43081", "city" : "WESTERVILLE", "loc" : [ -82.910504, 40.114569 ], "pop" : 49023, "state" : "OH" } +{ "_id" : "43084", "city" : "WOODSTOCK", "loc" : [ -83.546149, 40.181644 ], "pop" : 793, "state" : "OH" } +{ "_id" : "43085", "city" : "WORTHINGTON", "loc" : [ -83.010069, 40.105155 ], "pop" : 27229, "state" : "OH" } +{ "_id" : "43102", "city" : "AMANDA", "loc" : [ -82.755236, 39.625104 ], "pop" : 3730, "state" : "OH" } +{ "_id" : "43103", "city" : "ASHVILLE", "loc" : [ -82.94456700000001, 39.731576 ], "pop" : 9050, "state" : "OH" } +{ "_id" : "43105", "city" : "BALTIMORE", "loc" : [ -82.62402299999999, 39.864452 ], "pop" : 5765, "state" : "OH" } +{ "_id" : "43106", "city" : "BLOOMINGBURG", "loc" : [ -83.409521, 39.628617 ], "pop" : 1643, "state" : "OH" } +{ "_id" : "43107", "city" : "HIDE A WAY HILLS", "loc" : [ -82.42547999999999, 39.698807 ], "pop" : 3087, "state" : "OH" } +{ "_id" : "43110", "city" : "CANAL WINCHESTER", "loc" : [ -82.80436899999999, 39.83486 ], "pop" : 8444, "state" : "OH" } +{ "_id" : "43112", "city" : "CARROLL", "loc" : [ -82.708358, 39.795743 ], "pop" : 3914, "state" : "OH" } +{ "_id" : "43113", "city" : "CIRCLEVILLE", "loc" : [ -82.92996599999999, 39.598836 ], "pop" : 22337, "state" : "OH" } +{ "_id" : "43115", "city" : "CLARKSBURG", "loc" : [ -83.156282, 39.490432 ], "pop" : 1523, "state" : "OH" } +{ "_id" : "43119", "city" : "GALLOWAY", "loc" : [ -83.183848, 39.936604 ], "pop" : 9984, "state" : "OH" } +{ "_id" : "43123", "city" : "GROVE CITY", "loc" : [ -83.083944, 39.881382 ], "pop" : 33730, "state" : "OH" } +{ "_id" : "43125", "city" : "GROVEPORT", "loc" : [ -82.887219, 39.858137 ], "pop" : 7728, "state" : "OH" } +{ "_id" : "43128", "city" : "JEFFERSONVILLE", "loc" : [ -83.56873, 39.65896 ], "pop" : 2359, "state" : "OH" } +{ "_id" : "43130", "city" : "LANCASTER", "loc" : [ -82.60307400000001, 39.718697 ], "pop" : 54451, "state" : "OH" } +{ "_id" : "43135", "city" : "LAURELVILLE", "loc" : [ -82.721219, 39.4757 ], "pop" : 4552, "state" : "OH" } +{ "_id" : "43137", "city" : "LOCKBOURNE", "loc" : [ -82.97636900000001, 39.814236 ], "pop" : 1423, "state" : "OH" } +{ "_id" : "43138", "city" : "LOGAN", "loc" : [ -82.412594, 39.537175 ], "pop" : 16011, "state" : "OH" } +{ "_id" : "43140", "city" : "LONDON", "loc" : [ -83.443899, 39.900074 ], "pop" : 20432, "state" : "OH" } +{ "_id" : "43143", "city" : "MOUNT STERLING", "loc" : [ -83.280618, 39.717506 ], "pop" : 4912, "state" : "OH" } +{ "_id" : "43145", "city" : "NEW HOLLAND", "loc" : [ -83.250429, 39.558897 ], "pop" : 1768, "state" : "OH" } +{ "_id" : "43146", "city" : "ORIENT", "loc" : [ -83.15431700000001, 39.795386 ], "pop" : 13491, "state" : "OH" } +{ "_id" : "43147", "city" : "PICKERINGTON", "loc" : [ -82.75626699999999, 39.906062 ], "pop" : 18424, "state" : "OH" } +{ "_id" : "43148", "city" : "PLEASANTVILLE", "loc" : [ -82.504268, 39.822684 ], "pop" : 1272, "state" : "OH" } +{ "_id" : "43149", "city" : "ROCKBRIDGE", "loc" : [ -82.562572, 39.550907 ], "pop" : 2063, "state" : "OH" } +{ "_id" : "43150", "city" : "RUSHVILLE", "loc" : [ -82.427981, 39.767375 ], "pop" : 1558, "state" : "OH" } +{ "_id" : "43152", "city" : "SOUTH BLOOMINGVI", "loc" : [ -82.639404, 39.374145 ], "pop" : 1429, "state" : "OH" } +{ "_id" : "43153", "city" : "SOUTH SOLON", "loc" : [ -83.59698400000001, 39.742295 ], "pop" : 766, "state" : "OH" } +{ "_id" : "43154", "city" : "STOUTSVILLE", "loc" : [ -82.81927899999999, 39.60672 ], "pop" : 1666, "state" : "OH" } +{ "_id" : "43155", "city" : "SUGAR GROVE", "loc" : [ -82.532113, 39.627699 ], "pop" : 1572, "state" : "OH" } +{ "_id" : "43160", "city" : "WASHINGTON COURT", "loc" : [ -83.438817, 39.534346 ], "pop" : 21357, "state" : "OH" } +{ "_id" : "43162", "city" : "WEST JEFFERSON", "loc" : [ -83.28530600000001, 39.942409 ], "pop" : 7411, "state" : "OH" } +{ "_id" : "43164", "city" : "WILLIAMSPORT", "loc" : [ -83.12505299999999, 39.611739 ], "pop" : 2192, "state" : "OH" } +{ "_id" : "43201", "city" : "COLUMBUS", "loc" : [ -83.004732, 39.995157 ], "pop" : 37110, "state" : "OH" } +{ "_id" : "43202", "city" : "COLUMBUS", "loc" : [ -83.011842, 40.020084 ], "pop" : 21526, "state" : "OH" } +{ "_id" : "43203", "city" : "COLUMBUS", "loc" : [ -82.969131, 39.971925 ], "pop" : 11047, "state" : "OH" } +{ "_id" : "43204", "city" : "COLUMBUS", "loc" : [ -83.07799900000001, 39.952333 ], "pop" : 38794, "state" : "OH" } +{ "_id" : "43205", "city" : "COLUMBUS", "loc" : [ -82.96435200000001, 39.956905 ], "pop" : 17567, "state" : "OH" } +{ "_id" : "43206", "city" : "COLUMBUS", "loc" : [ -82.974845, 39.942639 ], "pop" : 26587, "state" : "OH" } +{ "_id" : "43207", "city" : "COLUMBUS", "loc" : [ -82.97033399999999, 39.904565 ], "pop" : 44404, "state" : "OH" } +{ "_id" : "43209", "city" : "BEXLEY", "loc" : [ -82.92659500000001, 39.958999 ], "pop" : 29574, "state" : "OH" } +{ "_id" : "43210", "city" : "COLUMBUS", "loc" : [ -83.01640399999999, 40.002804 ], "pop" : 10690, "state" : "OH" } +{ "_id" : "43211", "city" : "COLUMBUS", "loc" : [ -82.973196, 40.011792 ], "pop" : 28031, "state" : "OH" } +{ "_id" : "43212", "city" : "COLUMBUS", "loc" : [ -83.045579, 39.987381 ], "pop" : 18478, "state" : "OH" } +{ "_id" : "43213", "city" : "WHITEHALL", "loc" : [ -82.878275, 39.967146 ], "pop" : 29375, "state" : "OH" } +{ "_id" : "43214", "city" : "COLUMBUS", "loc" : [ -83.01875, 40.053482 ], "pop" : 26080, "state" : "OH" } +{ "_id" : "43215", "city" : "COLUMBUS", "loc" : [ -83.004383, 39.967106 ], "pop" : 10145, "state" : "OH" } +{ "_id" : "43217", "city" : "COLUMBUS", "loc" : [ -82.94748300000001, 39.806209 ], "pop" : 2150, "state" : "OH" } +{ "_id" : "43219", "city" : "SHEPARD", "loc" : [ -82.936459, 40.004394 ], "pop" : 24841, "state" : "OH" } +{ "_id" : "43220", "city" : "COLUMBUS", "loc" : [ -83.066911, 40.049484 ], "pop" : 24378, "state" : "OH" } +{ "_id" : "43221", "city" : "UPPER ARLINGTON", "loc" : [ -83.064592, 40.015431 ], "pop" : 21283, "state" : "OH" } +{ "_id" : "43222", "city" : "COLUMBUS", "loc" : [ -83.031109, 39.957628 ], "pop" : 7019, "state" : "OH" } +{ "_id" : "43223", "city" : "COLUMBUS", "loc" : [ -83.046344, 39.938753 ], "pop" : 30538, "state" : "OH" } +{ "_id" : "43224", "city" : "COLUMBUS", "loc" : [ -82.968947, 40.042493 ], "pop" : 41442, "state" : "OH" } +{ "_id" : "43227", "city" : "COLUMBUS", "loc" : [ -82.890298, 39.944394 ], "pop" : 24945, "state" : "OH" } +{ "_id" : "43228", "city" : "LINCOLN VILLAGE", "loc" : [ -83.123858, 39.947876 ], "pop" : 37615, "state" : "OH" } +{ "_id" : "43229", "city" : "COLUMBUS", "loc" : [ -82.972568, 40.083886 ], "pop" : 45798, "state" : "OH" } +{ "_id" : "43230", "city" : "GAHANNA", "loc" : [ -82.882429, 40.038458 ], "pop" : 34342, "state" : "OH" } +{ "_id" : "43231", "city" : "COLUMBUS", "loc" : [ -82.938275, 40.080984 ], "pop" : 14519, "state" : "OH" } +{ "_id" : "43232", "city" : "COLUMBUS", "loc" : [ -82.866432, 39.923024 ], "pop" : 38848, "state" : "OH" } +{ "_id" : "43235", "city" : "WEST WORTHINGTON", "loc" : [ -83.059287, 40.101271 ], "pop" : 34051, "state" : "OH" } +{ "_id" : "43302", "city" : "MARION", "loc" : [ -83.127056, 40.587648 ], "pop" : 50967, "state" : "OH" } +{ "_id" : "43310", "city" : "BELLE CENTER", "loc" : [ -83.768773, 40.502371 ], "pop" : 2057, "state" : "OH" } +{ "_id" : "43311", "city" : "BELLEFONTAINE", "loc" : [ -83.757076, 40.360472 ], "pop" : 16796, "state" : "OH" } +{ "_id" : "43314", "city" : "CALEDONIA", "loc" : [ -82.992465, 40.627239 ], "pop" : 3120, "state" : "OH" } +{ "_id" : "43315", "city" : "CARDINGTON", "loc" : [ -82.933728, 40.506583 ], "pop" : 4739, "state" : "OH" } +{ "_id" : "43316", "city" : "CAREY", "loc" : [ -83.383578, 40.948599 ], "pop" : 6177, "state" : "OH" } +{ "_id" : "43318", "city" : "DE GRAFF", "loc" : [ -83.9153, 40.305773 ], "pop" : 3452, "state" : "OH" } +{ "_id" : "43319", "city" : "EAST LIBERTY", "loc" : [ -83.58622099999999, 40.307682 ], "pop" : 1351, "state" : "OH" } +{ "_id" : "43320", "city" : "EDISON", "loc" : [ -82.90230099999999, 40.590475 ], "pop" : 1319, "state" : "OH" } +{ "_id" : "43321", "city" : "FULTON", "loc" : [ -82.83624399999999, 40.465013 ], "pop" : 1181, "state" : "OH" } +{ "_id" : "43323", "city" : "HARPSTER", "loc" : [ -83.23428, 40.747541 ], "pop" : 719, "state" : "OH" } +{ "_id" : "43324", "city" : "HUNTSVILLE", "loc" : [ -83.792748, 40.441295 ], "pop" : 1953, "state" : "OH" } +{ "_id" : "43326", "city" : "KENTON", "loc" : [ -83.611087, 40.640433 ], "pop" : 15332, "state" : "OH" } +{ "_id" : "43331", "city" : "LAKEVIEW", "loc" : [ -83.90813900000001, 40.503033 ], "pop" : 5722, "state" : "OH" } +{ "_id" : "43332", "city" : "LA RUE", "loc" : [ -83.373397, 40.578879 ], "pop" : 2120, "state" : "OH" } +{ "_id" : "43333", "city" : "LEWISTOWN", "loc" : [ -83.92089300000001, 40.42768 ], "pop" : 958, "state" : "OH" } +{ "_id" : "43334", "city" : "MARENGO", "loc" : [ -82.812136, 40.389512 ], "pop" : 3338, "state" : "OH" } +{ "_id" : "43335", "city" : "MARTEL", "loc" : [ -82.90586, 40.670775 ], "pop" : 659, "state" : "OH" } +{ "_id" : "43337", "city" : "MORRAL", "loc" : [ -83.204606, 40.695366 ], "pop" : 1035, "state" : "OH" } +{ "_id" : "43338", "city" : "MOUNT GILEAD", "loc" : [ -82.806235, 40.538371 ], "pop" : 8271, "state" : "OH" } +{ "_id" : "43340", "city" : "MOUNT VICTORY", "loc" : [ -83.494165, 40.52321 ], "pop" : 1015, "state" : "OH" } +{ "_id" : "43341", "city" : "NEW BLOOMINGTON", "loc" : [ -83.322351, 40.607301 ], "pop" : 1428, "state" : "OH" } +{ "_id" : "43342", "city" : "PROSPECT", "loc" : [ -83.176295, 40.472659 ], "pop" : 3365, "state" : "OH" } +{ "_id" : "43343", "city" : "QUINCY", "loc" : [ -83.974411, 40.287606 ], "pop" : 1147, "state" : "OH" } +{ "_id" : "43344", "city" : "RICHWOOD", "loc" : [ -83.31363899999999, 40.43698 ], "pop" : 4055, "state" : "OH" } +{ "_id" : "43345", "city" : "RIDGEWAY", "loc" : [ -83.570161, 40.520923 ], "pop" : 857, "state" : "OH" } +{ "_id" : "43346", "city" : "ROUNDHEAD", "loc" : [ -83.848502, 40.580337 ], "pop" : 641, "state" : "OH" } +{ "_id" : "43347", "city" : "RUSHSYLVANIA", "loc" : [ -83.659789, 40.465808 ], "pop" : 1544, "state" : "OH" } +{ "_id" : "43348", "city" : "RUSSELLS POINT", "loc" : [ -83.879825, 40.474956 ], "pop" : 2416, "state" : "OH" } +{ "_id" : "43350", "city" : "SPARTA", "loc" : [ -82.697034, 40.373492 ], "pop" : 966, "state" : "OH" } +{ "_id" : "43351", "city" : "UPPER SANDUSKY", "loc" : [ -83.29771100000001, 40.824876 ], "pop" : 9778, "state" : "OH" } +{ "_id" : "43356", "city" : "WALDO", "loc" : [ -83.070609, 40.460544 ], "pop" : 1170, "state" : "OH" } +{ "_id" : "43357", "city" : "WEST LIBERTY", "loc" : [ -83.752763, 40.262541 ], "pop" : 4148, "state" : "OH" } +{ "_id" : "43358", "city" : "WEST MANSFIELD", "loc" : [ -83.52427400000001, 40.404284 ], "pop" : 2580, "state" : "OH" } +{ "_id" : "43359", "city" : "WHARTON", "loc" : [ -83.463016, 40.861216 ], "pop" : 378, "state" : "OH" } +{ "_id" : "43360", "city" : "ZANESFIELD", "loc" : [ -83.664832, 40.302396 ], "pop" : 1171, "state" : "OH" } +{ "_id" : "43402", "city" : "BOWLING GREEN", "loc" : [ -83.650749, 41.381513 ], "pop" : 34468, "state" : "OH" } +{ "_id" : "43406", "city" : "BRADNER", "loc" : [ -83.4456, 41.329789 ], "pop" : 1934, "state" : "OH" } +{ "_id" : "43407", "city" : "BURGOON", "loc" : [ -83.247455, 41.267986 ], "pop" : 572, "state" : "OH" } +{ "_id" : "43410", "city" : "CLYDE", "loc" : [ -82.991849, 41.302397 ], "pop" : 9650, "state" : "OH" } +{ "_id" : "43412", "city" : "CURTICE", "loc" : [ -83.285825, 41.647736 ], "pop" : 2426, "state" : "OH" } +{ "_id" : "43413", "city" : "CYGNET", "loc" : [ -83.61415100000001, 41.247024 ], "pop" : 1516, "state" : "OH" } +{ "_id" : "43416", "city" : "ELMORE", "loc" : [ -83.27673, 41.468144 ], "pop" : 3230, "state" : "OH" } +{ "_id" : "43420", "city" : "FREMONT", "loc" : [ -83.118095, 41.349792 ], "pop" : 31615, "state" : "OH" } +{ "_id" : "43430", "city" : "GENOA", "loc" : [ -83.35898400000001, 41.530005 ], "pop" : 5405, "state" : "OH" } +{ "_id" : "43431", "city" : "GIBSONBURG", "loc" : [ -83.335762, 41.380474 ], "pop" : 3874, "state" : "OH" } +{ "_id" : "43432", "city" : "ELLISTON", "loc" : [ -83.261135, 41.527136 ], "pop" : 115, "state" : "OH" } +{ "_id" : "43435", "city" : "MILLERSVILLE", "loc" : [ -83.323184, 41.318005 ], "pop" : 1427, "state" : "OH" } +{ "_id" : "43436", "city" : "ISLE SAINT GEORG", "loc" : [ -82.819275, 41.713668 ], "pop" : 38, "state" : "OH" } +{ "_id" : "43438", "city" : "KELLEYS ISLAND", "loc" : [ -82.706811, 41.600755 ], "pop" : 172, "state" : "OH" } +{ "_id" : "43439", "city" : "LACARNE", "loc" : [ -83.02400400000001, 41.527846 ], "pop" : 1457, "state" : "OH" } +{ "_id" : "43440", "city" : "LAKESIDE", "loc" : [ -82.77139200000001, 41.52913 ], "pop" : 4410, "state" : "OH" } +{ "_id" : "43442", "city" : "LINDSEY", "loc" : [ -83.21347400000001, 41.414747 ], "pop" : 1646, "state" : "OH" } +{ "_id" : "43443", "city" : "LUCKEY", "loc" : [ -83.46739599999999, 41.451669 ], "pop" : 1771, "state" : "OH" } +{ "_id" : "43445", "city" : "BONO", "loc" : [ -83.345536, 41.596249 ], "pop" : 3895, "state" : "OH" } +{ "_id" : "43447", "city" : "MILLBURY", "loc" : [ -83.43808300000001, 41.56106 ], "pop" : 3100, "state" : "OH" } +{ "_id" : "43449", "city" : "OAK HARBOR", "loc" : [ -83.127764, 41.523556 ], "pop" : 9620, "state" : "OH" } +{ "_id" : "43450", "city" : "PEMBERVILLE", "loc" : [ -83.473642, 41.402258 ], "pop" : 2569, "state" : "OH" } +{ "_id" : "43451", "city" : "PORTAGE", "loc" : [ -83.614299, 41.312702 ], "pop" : 1304, "state" : "OH" } +{ "_id" : "43452", "city" : "PORT CLINTON", "loc" : [ -82.909368, 41.521535 ], "pop" : 11851, "state" : "OH" } +{ "_id" : "43456", "city" : "PUT IN BAY", "loc" : [ -82.822593, 41.651356 ], "pop" : 518, "state" : "OH" } +{ "_id" : "43457", "city" : "RISINGSUN", "loc" : [ -83.43259, 41.270639 ], "pop" : 1756, "state" : "OH" } +{ "_id" : "43460", "city" : "ROSSFORD", "loc" : [ -83.563793, 41.604908 ], "pop" : 5861, "state" : "OH" } +{ "_id" : "43462", "city" : "RUDOLPH", "loc" : [ -83.683212, 41.296734 ], "pop" : 1737, "state" : "OH" } +{ "_id" : "43464", "city" : "VICKERY", "loc" : [ -82.89895300000001, 41.39099 ], "pop" : 1976, "state" : "OH" } +{ "_id" : "43465", "city" : "WALBRIDGE", "loc" : [ -83.493008, 41.586067 ], "pop" : 4597, "state" : "OH" } +{ "_id" : "43466", "city" : "WAYNE", "loc" : [ -83.47006500000001, 41.299312 ], "pop" : 1572, "state" : "OH" } +{ "_id" : "43469", "city" : "WOODVILLE", "loc" : [ -83.364643, 41.451206 ], "pop" : 2968, "state" : "OH" } +{ "_id" : "43501", "city" : "ALVORDTON", "loc" : [ -84.43553300000001, 41.662489 ], "pop" : 954, "state" : "OH" } +{ "_id" : "43502", "city" : "ARCHBOLD", "loc" : [ -84.304833, 41.533255 ], "pop" : 6565, "state" : "OH" } +{ "_id" : "43504", "city" : "BERKEY", "loc" : [ -83.830972, 41.698892 ], "pop" : 843, "state" : "OH" } +{ "_id" : "43506", "city" : "BRYAN", "loc" : [ -84.56287, 41.474839 ], "pop" : 14693, "state" : "OH" } +{ "_id" : "43511", "city" : "CUSTAR", "loc" : [ -83.834919, 41.295318 ], "pop" : 1049, "state" : "OH" } +{ "_id" : "43512", "city" : "DEFIANCE", "loc" : [ -84.362583, 41.279858 ], "pop" : 29859, "state" : "OH" } +{ "_id" : "43515", "city" : "DELTA", "loc" : [ -83.9866, 41.557695 ], "pop" : 11110, "state" : "OH" } +{ "_id" : "43516", "city" : "DESHLER", "loc" : [ -83.896434, 41.223945 ], "pop" : 4043, "state" : "OH" } +{ "_id" : "43517", "city" : "EDGERTON", "loc" : [ -84.734937, 41.442496 ], "pop" : 3663, "state" : "OH" } +{ "_id" : "43518", "city" : "EDON", "loc" : [ -84.757002, 41.584219 ], "pop" : 2688, "state" : "OH" } +{ "_id" : "43521", "city" : "FAYETTE", "loc" : [ -84.32500400000001, 41.671716 ], "pop" : 2248, "state" : "OH" } +{ "_id" : "43522", "city" : "GRAND RAPIDS", "loc" : [ -83.85524599999999, 41.437855 ], "pop" : 3362, "state" : "OH" } +{ "_id" : "43524", "city" : "HAMLER", "loc" : [ -84.071989, 41.212874 ], "pop" : 1949, "state" : "OH" } +{ "_id" : "43525", "city" : "HASKINS", "loc" : [ -83.70585800000001, 41.465159 ], "pop" : 549, "state" : "OH" } +{ "_id" : "43526", "city" : "HICKSVILLE", "loc" : [ -84.758852, 41.303378 ], "pop" : 5541, "state" : "OH" } +{ "_id" : "43527", "city" : "HOLGATE", "loc" : [ -84.144735, 41.254859 ], "pop" : 2032, "state" : "OH" } +{ "_id" : "43528", "city" : "HOLLAND", "loc" : [ -83.725712, 41.622629 ], "pop" : 10773, "state" : "OH" } +{ "_id" : "43532", "city" : "LIBERTY CENTER", "loc" : [ -83.985889, 41.451371 ], "pop" : 3933, "state" : "OH" } +{ "_id" : "43533", "city" : "LYONS", "loc" : [ -84.06235100000001, 41.690546 ], "pop" : 1395, "state" : "OH" } +{ "_id" : "43534", "city" : "MC CLURE", "loc" : [ -83.942482, 41.377309 ], "pop" : 1876, "state" : "OH" } +{ "_id" : "43535", "city" : "MALINTA", "loc" : [ -84.045731, 41.308425 ], "pop" : 1121, "state" : "OH" } +{ "_id" : "43536", "city" : "MARK CENTER", "loc" : [ -84.62778, 41.291669 ], "pop" : 963, "state" : "OH" } +{ "_id" : "43537", "city" : "MAUMEE", "loc" : [ -83.66283, 41.581682 ], "pop" : 22993, "state" : "OH" } +{ "_id" : "43540", "city" : "METAMORA", "loc" : [ -83.925972, 41.695233 ], "pop" : 1531, "state" : "OH" } +{ "_id" : "43542", "city" : "MONCLOVA", "loc" : [ -83.775718, 41.568416 ], "pop" : 2286, "state" : "OH" } +{ "_id" : "43543", "city" : "MONTPELIER", "loc" : [ -84.61470300000001, 41.59821 ], "pop" : 7569, "state" : "OH" } +{ "_id" : "43545", "city" : "NAPOLEON", "loc" : [ -84.143271, 41.390969 ], "pop" : 14196, "state" : "OH" } +{ "_id" : "43548", "city" : "NEW BAVARIA", "loc" : [ -84.19133600000001, 41.208649 ], "pop" : 523, "state" : "OH" } +{ "_id" : "43549", "city" : "NEY", "loc" : [ -84.526921, 41.378083 ], "pop" : 1801, "state" : "OH" } +{ "_id" : "43551", "city" : "PERRYSBURG", "loc" : [ -83.592727, 41.542926 ], "pop" : 29621, "state" : "OH" } +{ "_id" : "43554", "city" : "PIONEER", "loc" : [ -84.53632399999999, 41.665619 ], "pop" : 2350, "state" : "OH" } +{ "_id" : "43556", "city" : "SHERWOOD", "loc" : [ -84.541674, 41.294593 ], "pop" : 1686, "state" : "OH" } +{ "_id" : "43557", "city" : "STRYKER", "loc" : [ -84.408914, 41.486123 ], "pop" : 2607, "state" : "OH" } +{ "_id" : "43558", "city" : "SWANTON", "loc" : [ -83.871821, 41.594497 ], "pop" : 10729, "state" : "OH" } +{ "_id" : "43560", "city" : "SYLVANIA", "loc" : [ -83.70682499999999, 41.707985 ], "pop" : 24564, "state" : "OH" } +{ "_id" : "43566", "city" : "WATERVILLE", "loc" : [ -83.733142, 41.502248 ], "pop" : 5918, "state" : "OH" } +{ "_id" : "43567", "city" : "WAUSEON", "loc" : [ -84.153745, 41.566796 ], "pop" : 10493, "state" : "OH" } +{ "_id" : "43569", "city" : "WESTON", "loc" : [ -83.797336, 41.351593 ], "pop" : 2560, "state" : "OH" } +{ "_id" : "43570", "city" : "WEST UNITY", "loc" : [ -84.442066, 41.575645 ], "pop" : 3305, "state" : "OH" } +{ "_id" : "43571", "city" : "WHITEHOUSE", "loc" : [ -83.81151, 41.519432 ], "pop" : 5199, "state" : "OH" } +{ "_id" : "43602", "city" : "TOLEDO", "loc" : [ -83.55474700000001, 41.647984 ], "pop" : 4084, "state" : "OH" } +{ "_id" : "43604", "city" : "TOLEDO", "loc" : [ -83.52494900000001, 41.661415 ], "pop" : 5506, "state" : "OH" } +{ "_id" : "43605", "city" : "OREGON", "loc" : [ -83.51234100000001, 41.640701 ], "pop" : 33168, "state" : "OH" } +{ "_id" : "43606", "city" : "TOLEDO", "loc" : [ -83.605992, 41.671213 ], "pop" : 29111, "state" : "OH" } +{ "_id" : "43607", "city" : "TOLEDO", "loc" : [ -83.597419, 41.650417 ], "pop" : 30240, "state" : "OH" } +{ "_id" : "43608", "city" : "TOLEDO", "loc" : [ -83.53435899999999, 41.677908 ], "pop" : 21427, "state" : "OH" } +{ "_id" : "43609", "city" : "TOLEDO", "loc" : [ -83.577282, 41.629761 ], "pop" : 29228, "state" : "OH" } +{ "_id" : "43610", "city" : "TOLEDO", "loc" : [ -83.557303, 41.676693 ], "pop" : 8374, "state" : "OH" } +{ "_id" : "43611", "city" : "TOLEDO", "loc" : [ -83.489203, 41.704507 ], "pop" : 23349, "state" : "OH" } +{ "_id" : "43612", "city" : "TOLEDO", "loc" : [ -83.565622, 41.704567 ], "pop" : 33408, "state" : "OH" } +{ "_id" : "43613", "city" : "TOLEDO", "loc" : [ -83.603397, 41.703913 ], "pop" : 35327, "state" : "OH" } +{ "_id" : "43614", "city" : "TOLEDO", "loc" : [ -83.62917, 41.60279 ], "pop" : 31020, "state" : "OH" } +{ "_id" : "43615", "city" : "TOLEDO", "loc" : [ -83.67058299999999, 41.649197 ], "pop" : 38173, "state" : "OH" } +{ "_id" : "43616", "city" : "OREGON", "loc" : [ -83.471366, 41.641842 ], "pop" : 15713, "state" : "OH" } +{ "_id" : "43617", "city" : "TOLEDO", "loc" : [ -83.716967, 41.666765 ], "pop" : 7449, "state" : "OH" } +{ "_id" : "43618", "city" : "OREGON", "loc" : [ -83.392302, 41.665636 ], "pop" : 3379, "state" : "OH" } +{ "_id" : "43619", "city" : "NORTHWOOD", "loc" : [ -83.48056, 41.607986 ], "pop" : 7526, "state" : "OH" } +{ "_id" : "43620", "city" : "TOLEDO", "loc" : [ -83.553602, 41.66536 ], "pop" : 8471, "state" : "OH" } +{ "_id" : "43623", "city" : "TOLEDO", "loc" : [ -83.64340799999999, 41.707968 ], "pop" : 21315, "state" : "OH" } +{ "_id" : "43624", "city" : "TOLEDO", "loc" : [ -83.545005, 41.65627 ], "pop" : 1596, "state" : "OH" } +{ "_id" : "43701", "city" : "SONORA", "loc" : [ -82.008898, 39.944265 ], "pop" : 56655, "state" : "OH" } +{ "_id" : "43713", "city" : "SOMERTON", "loc" : [ -81.171295, 39.9812 ], "pop" : 7140, "state" : "OH" } +{ "_id" : "43716", "city" : "BEALLSVILLE", "loc" : [ -81.014358, 39.872601 ], "pop" : 716, "state" : "OH" } +{ "_id" : "43718", "city" : "BELMONT", "loc" : [ -81.006564, 40.03202 ], "pop" : 3229, "state" : "OH" } +{ "_id" : "43719", "city" : "BETHESDA", "loc" : [ -81.076742, 40.019221 ], "pop" : 2464, "state" : "OH" } +{ "_id" : "43720", "city" : "BLUE ROCK", "loc" : [ -81.891023, 39.799996 ], "pop" : 1001, "state" : "OH" } +{ "_id" : "43723", "city" : "BYESVILLE", "loc" : [ -81.548485, 39.962336 ], "pop" : 5164, "state" : "OH" } +{ "_id" : "43724", "city" : "CALDWELL", "loc" : [ -81.51528, 39.746651 ], "pop" : 7043, "state" : "OH" } +{ "_id" : "43725", "city" : "CLAYSVILLE", "loc" : [ -81.59127700000001, 40.030501 ], "pop" : 21261, "state" : "OH" } +{ "_id" : "43727", "city" : "CHANDLERSVILLE", "loc" : [ -81.830084, 39.889659 ], "pop" : 1368, "state" : "OH" } +{ "_id" : "43728", "city" : "CHESTERHILL", "loc" : [ -81.877286, 39.495277 ], "pop" : 1323, "state" : "OH" } +{ "_id" : "43730", "city" : "HEMLOCK", "loc" : [ -82.097737, 39.634902 ], "pop" : 3374, "state" : "OH" } +{ "_id" : "43731", "city" : "CROOKSVILLE", "loc" : [ -82.084018, 39.762321 ], "pop" : 4609, "state" : "OH" } +{ "_id" : "43732", "city" : "CUMBERLAND", "loc" : [ -81.625925, 39.874092 ], "pop" : 1831, "state" : "OH" } +{ "_id" : "43734", "city" : "DUNCAN FALLS", "loc" : [ -81.911665, 39.877777 ], "pop" : 957, "state" : "OH" } +{ "_id" : "43739", "city" : "GLENFORD", "loc" : [ -82.302592, 39.869935 ], "pop" : 1632, "state" : "OH" } +{ "_id" : "43746", "city" : "HOPEWELL", "loc" : [ -82.175619, 39.96008 ], "pop" : 1160, "state" : "OH" } +{ "_id" : "43747", "city" : "JERUSALEM", "loc" : [ -81.092088, 39.848831 ], "pop" : 2037, "state" : "OH" } +{ "_id" : "43748", "city" : "JUNCTION CITY", "loc" : [ -82.31552499999999, 39.696531 ], "pop" : 2577, "state" : "OH" } +{ "_id" : "43749", "city" : "GUERNSEY", "loc" : [ -81.53036, 40.166544 ], "pop" : 2109, "state" : "OH" } +{ "_id" : "43754", "city" : "LEWISVILLE", "loc" : [ -81.231583, 39.768379 ], "pop" : 1366, "state" : "OH" } +{ "_id" : "43755", "city" : "LORE CITY", "loc" : [ -81.44785299999999, 40.045854 ], "pop" : 1487, "state" : "OH" } +{ "_id" : "43756", "city" : "MC CONNELSVILLE", "loc" : [ -81.837625, 39.670014 ], "pop" : 4784, "state" : "OH" } +{ "_id" : "43758", "city" : "MALTA", "loc" : [ -81.912746, 39.648212 ], "pop" : 3127, "state" : "OH" } +{ "_id" : "43760", "city" : "MOUNT PERRY", "loc" : [ -82.188039, 39.878798 ], "pop" : 1550, "state" : "OH" } +{ "_id" : "43762", "city" : "NEW CONCORD", "loc" : [ -81.738727, 40.008798 ], "pop" : 4770, "state" : "OH" } +{ "_id" : "43764", "city" : "NEW LEXINGTON", "loc" : [ -82.20188400000001, 39.717438 ], "pop" : 8536, "state" : "OH" } +{ "_id" : "43766", "city" : "NEW STRAITSVILLE", "loc" : [ -82.24880400000001, 39.586872 ], "pop" : 1669, "state" : "OH" } +{ "_id" : "43767", "city" : "NORWICH", "loc" : [ -81.802425, 39.993438 ], "pop" : 1142, "state" : "OH" } +{ "_id" : "43771", "city" : "PHILO", "loc" : [ -81.917479, 39.845773 ], "pop" : 1374, "state" : "OH" } +{ "_id" : "43772", "city" : "PLEASANT CITY", "loc" : [ -81.55797, 39.909514 ], "pop" : 1231, "state" : "OH" } +{ "_id" : "43773", "city" : "QUAKER CITY", "loc" : [ -81.289883, 39.986576 ], "pop" : 2139, "state" : "OH" } +{ "_id" : "43777", "city" : "ROSEVILLE", "loc" : [ -82.079212, 39.818656 ], "pop" : 4293, "state" : "OH" } +{ "_id" : "43778", "city" : "SALESVILLE", "loc" : [ -81.372793, 40.008146 ], "pop" : 1009, "state" : "OH" } +{ "_id" : "43779", "city" : "SARAHSVILLE", "loc" : [ -81.467825, 39.793846 ], "pop" : 947, "state" : "OH" } +{ "_id" : "43780", "city" : "SENECAVILLE", "loc" : [ -81.458043, 39.933719 ], "pop" : 3014, "state" : "OH" } +{ "_id" : "43782", "city" : "SHAWNEE", "loc" : [ -82.208459, 39.610984 ], "pop" : 1019, "state" : "OH" } +{ "_id" : "43783", "city" : "SOMERSET", "loc" : [ -82.29911, 39.793615 ], "pop" : 2541, "state" : "OH" } +{ "_id" : "43787", "city" : "PENNSVILLE", "loc" : [ -81.82525099999999, 39.561434 ], "pop" : 1865, "state" : "OH" } +{ "_id" : "43788", "city" : "SUMMERFIELD", "loc" : [ -81.331993, 39.803597 ], "pop" : 1151, "state" : "OH" } +{ "_id" : "43793", "city" : "ANTIOCH", "loc" : [ -81.10336, 39.753063 ], "pop" : 5231, "state" : "OH" } +{ "_id" : "43802", "city" : "ADAMSVILLE", "loc" : [ -81.871847, 40.07929 ], "pop" : 943, "state" : "OH" } +{ "_id" : "43804", "city" : "BALTIC", "loc" : [ -81.679171, 40.447568 ], "pop" : 2225, "state" : "OH" } +{ "_id" : "43811", "city" : "CONESVILLE", "loc" : [ -81.89507399999999, 40.180441 ], "pop" : 696, "state" : "OH" } +{ "_id" : "43812", "city" : "COSHOCTON", "loc" : [ -81.866033, 40.275412 ], "pop" : 21561, "state" : "OH" } +{ "_id" : "43821", "city" : "ADAMS MILLS", "loc" : [ -82.018807, 40.112941 ], "pop" : 4204, "state" : "OH" } +{ "_id" : "43822", "city" : "FRAZEYSBURG", "loc" : [ -82.129279, 40.131616 ], "pop" : 2746, "state" : "OH" } +{ "_id" : "43824", "city" : "FRESNO", "loc" : [ -81.762297, 40.371126 ], "pop" : 2777, "state" : "OH" } +{ "_id" : "43830", "city" : "NASHPORT", "loc" : [ -82.09976, 40.038588 ], "pop" : 3579, "state" : "OH" } +{ "_id" : "43832", "city" : "NEWCOMERSTOWN", "loc" : [ -81.593969, 40.273895 ], "pop" : 7574, "state" : "OH" } +{ "_id" : "43837", "city" : "PORT WASHINGTON", "loc" : [ -81.521518, 40.340359 ], "pop" : 1190, "state" : "OH" } +{ "_id" : "43840", "city" : "STONE CREEK", "loc" : [ -81.589018, 40.405188 ], "pop" : 1208, "state" : "OH" } +{ "_id" : "43843", "city" : "WALHONDING", "loc" : [ -82.20935900000001, 40.362037 ], "pop" : 937, "state" : "OH" } +{ "_id" : "43844", "city" : "WARSAW", "loc" : [ -82.055989, 40.317243 ], "pop" : 3177, "state" : "OH" } +{ "_id" : "43845", "city" : "WEST LAFAYETTE", "loc" : [ -81.736102, 40.271829 ], "pop" : 4667, "state" : "OH" } +{ "_id" : "43901", "city" : "ADENA", "loc" : [ -80.88153800000001, 40.212581 ], "pop" : 1690, "state" : "OH" } +{ "_id" : "43902", "city" : "ALLEDONIA", "loc" : [ -80.957753, 39.905271 ], "pop" : 499, "state" : "OH" } +{ "_id" : "43903", "city" : "AMSTERDAM", "loc" : [ -80.959554, 40.473131 ], "pop" : 819, "state" : "OH" } +{ "_id" : "43906", "city" : "BELLAIRE", "loc" : [ -80.763813, 40.020399 ], "pop" : 10480, "state" : "OH" } +{ "_id" : "43907", "city" : "MOOREFIELD", "loc" : [ -80.996244, 40.264537 ], "pop" : 5925, "state" : "OH" } +{ "_id" : "43908", "city" : "BERGHOLZ", "loc" : [ -80.88615299999999, 40.47771 ], "pop" : 3392, "state" : "OH" } +{ "_id" : "43910", "city" : "BLOOMINGDALE", "loc" : [ -80.807214, 40.3742 ], "pop" : 3925, "state" : "OH" } +{ "_id" : "43912", "city" : "BRIDGEPORT", "loc" : [ -80.774682, 40.075184 ], "pop" : 7706, "state" : "OH" } +{ "_id" : "43913", "city" : "BRILLIANT", "loc" : [ -80.63194900000001, 40.268283 ], "pop" : 2057, "state" : "OH" } +{ "_id" : "43915", "city" : "CLARINGTON", "loc" : [ -80.911311, 39.781908 ], "pop" : 1890, "state" : "OH" } +{ "_id" : "43917", "city" : "DILLONVALE", "loc" : [ -80.802843, 40.212132 ], "pop" : 5972, "state" : "OH" } +{ "_id" : "43920", "city" : "CALCUTTA", "loc" : [ -80.578669, 40.645918 ], "pop" : 25993, "state" : "OH" } +{ "_id" : "43930", "city" : "HAMMONDSVILLE", "loc" : [ -80.729918, 40.579909 ], "pop" : 1060, "state" : "OH" } +{ "_id" : "43932", "city" : "IRONDALE", "loc" : [ -80.791546, 40.511052 ], "pop" : 496, "state" : "OH" } +{ "_id" : "43933", "city" : "ARMSTRONG MILLS", "loc" : [ -80.882181, 39.956304 ], "pop" : 1795, "state" : "OH" } +{ "_id" : "43935", "city" : "MARTINS FERRY", "loc" : [ -80.736125, 40.103597 ], "pop" : 10605, "state" : "OH" } +{ "_id" : "43938", "city" : "MINGO JUNCTION", "loc" : [ -80.625021, 40.320256 ], "pop" : 6388, "state" : "OH" } +{ "_id" : "43942", "city" : "POWHATAN POINT", "loc" : [ -80.8168, 39.867935 ], "pop" : 2694, "state" : "OH" } +{ "_id" : "43943", "city" : "RAYLAND", "loc" : [ -80.71253400000001, 40.208274 ], "pop" : 4623, "state" : "OH" } +{ "_id" : "43944", "city" : "RICHMOND", "loc" : [ -80.76128, 40.426061 ], "pop" : 2326, "state" : "OH" } +{ "_id" : "43945", "city" : "SALINEVILLE", "loc" : [ -80.83497699999999, 40.619525 ], "pop" : 3617, "state" : "OH" } +{ "_id" : "43946", "city" : "SARDIS", "loc" : [ -80.924308, 39.652639 ], "pop" : 2785, "state" : "OH" } +{ "_id" : "43947", "city" : "SHADYSIDE", "loc" : [ -80.764309, 39.967497 ], "pop" : 5918, "state" : "OH" } +{ "_id" : "43950", "city" : "SAINT CLAIRSVILL", "loc" : [ -80.90228500000001, 40.083439 ], "pop" : 14292, "state" : "OH" } +{ "_id" : "43952", "city" : "WINTERSVILLE", "loc" : [ -80.66115000000001, 40.370638 ], "pop" : 35873, "state" : "OH" } +{ "_id" : "43963", "city" : "TILTONSVILLE", "loc" : [ -80.699647, 40.168075 ], "pop" : 872, "state" : "OH" } +{ "_id" : "43964", "city" : "TORONTO", "loc" : [ -80.632504, 40.473298 ], "pop" : 11981, "state" : "OH" } +{ "_id" : "43968", "city" : "WELLSVILLE", "loc" : [ -80.66209499999999, 40.617099 ], "pop" : 8315, "state" : "OH" } +{ "_id" : "43971", "city" : "YORKVILLE", "loc" : [ -80.70773699999999, 40.158051 ], "pop" : 1213, "state" : "OH" } +{ "_id" : "43973", "city" : "FREEPORT", "loc" : [ -81.276955, 40.192502 ], "pop" : 1905, "state" : "OH" } +{ "_id" : "43976", "city" : "HOPEDALE", "loc" : [ -80.902136, 40.349647 ], "pop" : 1501, "state" : "OH" } +{ "_id" : "43977", "city" : "FLUSHING", "loc" : [ -81.07572999999999, 40.145144 ], "pop" : 2719, "state" : "OH" } +{ "_id" : "43983", "city" : "PIEDMONT", "loc" : [ -81.214494, 40.150716 ], "pop" : 420, "state" : "OH" } +{ "_id" : "43986", "city" : "JEWETT", "loc" : [ -81.000379, 40.37446 ], "pop" : 1998, "state" : "OH" } +{ "_id" : "43988", "city" : "SCIO", "loc" : [ -81.10157700000001, 40.40116 ], "pop" : 2640, "state" : "OH" } +{ "_id" : "44001", "city" : "SOUTH AMHERST", "loc" : [ -82.228165, 41.390506 ], "pop" : 18839, "state" : "OH" } +{ "_id" : "44003", "city" : "ANDOVER", "loc" : [ -80.575374, 41.622488 ], "pop" : 3491, "state" : "OH" } +{ "_id" : "44004", "city" : "ASHTABULA", "loc" : [ -80.794681, 41.867877 ], "pop" : 37480, "state" : "OH" } +{ "_id" : "44010", "city" : "AUSTINBURG", "loc" : [ -80.858422, 41.75536 ], "pop" : 1902, "state" : "OH" } +{ "_id" : "44011", "city" : "AVON", "loc" : [ -82.020359, 41.446713 ], "pop" : 7332, "state" : "OH" } +{ "_id" : "44012", "city" : "AVON LAKE", "loc" : [ -82.011094, 41.501904 ], "pop" : 15061, "state" : "OH" } +{ "_id" : "44017", "city" : "BEREA", "loc" : [ -81.861756, 41.367557 ], "pop" : 18561, "state" : "OH" } +{ "_id" : "44021", "city" : "BURTON", "loc" : [ -81.15262, 41.452702 ], "pop" : 6677, "state" : "OH" } +{ "_id" : "44022", "city" : "CHAGRIN FALLS", "loc" : [ -81.361437, 41.418577 ], "pop" : 29184, "state" : "OH" } +{ "_id" : "44024", "city" : "CHARDON", "loc" : [ -81.205629, 41.571862 ], "pop" : 20339, "state" : "OH" } +{ "_id" : "44026", "city" : "CHESTERLAND", "loc" : [ -81.342102, 41.534378 ], "pop" : 12510, "state" : "OH" } +{ "_id" : "44028", "city" : "COLUMBIA STATION", "loc" : [ -81.934398, 41.318708 ], "pop" : 8436, "state" : "OH" } +{ "_id" : "44030", "city" : "CONNEAUT", "loc" : [ -80.580257, 41.934479 ], "pop" : 16612, "state" : "OH" } +{ "_id" : "44032", "city" : "DORSET", "loc" : [ -80.668334, 41.658972 ], "pop" : 1536, "state" : "OH" } +{ "_id" : "44035", "city" : "ELYRIA", "loc" : [ -82.10508799999999, 41.372353 ], "pop" : 66674, "state" : "OH" } +{ "_id" : "44039", "city" : "NORTH RIDGEVILLE", "loc" : [ -82.00332299999999, 41.396432 ], "pop" : 21574, "state" : "OH" } +{ "_id" : "44040", "city" : "GATES MILLS", "loc" : [ -81.415021, 41.532368 ], "pop" : 2879, "state" : "OH" } +{ "_id" : "44041", "city" : "GENEVA", "loc" : [ -80.947363, 41.802864 ], "pop" : 14694, "state" : "OH" } +{ "_id" : "44044", "city" : "GRAFTON", "loc" : [ -82.043098, 41.28537 ], "pop" : 12127, "state" : "OH" } +{ "_id" : "44046", "city" : "HUNTSBURG", "loc" : [ -81.05718299999999, 41.530559 ], "pop" : 1804, "state" : "OH" } +{ "_id" : "44047", "city" : "JEFFERSON", "loc" : [ -80.75616599999999, 41.733513 ], "pop" : 8242, "state" : "OH" } +{ "_id" : "44048", "city" : "KINGSVILLE", "loc" : [ -80.66009200000001, 41.872311 ], "pop" : 2192, "state" : "OH" } +{ "_id" : "44050", "city" : "LAGRANGE", "loc" : [ -82.12791799999999, 41.242278 ], "pop" : 5092, "state" : "OH" } +{ "_id" : "44052", "city" : "LORAIN", "loc" : [ -82.17103899999999, 41.457796 ], "pop" : 35989, "state" : "OH" } +{ "_id" : "44053", "city" : "LORAIN", "loc" : [ -82.203833, 41.432002 ], "pop" : 16141, "state" : "OH" } +{ "_id" : "44054", "city" : "SHEFFIELD LAKE", "loc" : [ -82.096497, 41.482276 ], "pop" : 11685, "state" : "OH" } +{ "_id" : "44055", "city" : "LORAIN", "loc" : [ -82.134992, 41.436131 ], "pop" : 22919, "state" : "OH" } +{ "_id" : "44056", "city" : "MACEDONIA", "loc" : [ -81.499578, 41.322236 ], "pop" : 7470, "state" : "OH" } +{ "_id" : "44057", "city" : "MADISON", "loc" : [ -81.058819, 41.805367 ], "pop" : 18357, "state" : "OH" } +{ "_id" : "44060", "city" : "MENTOR", "loc" : [ -81.342133, 41.689468 ], "pop" : 60109, "state" : "OH" } +{ "_id" : "44062", "city" : "MIDDLEFIELD", "loc" : [ -81.03733800000001, 41.445547 ], "pop" : 11700, "state" : "OH" } +{ "_id" : "44064", "city" : "MONTVILLE", "loc" : [ -81.057036, 41.603446 ], "pop" : 1867, "state" : "OH" } +{ "_id" : "44065", "city" : "NEWBURY", "loc" : [ -81.23452, 41.475022 ], "pop" : 2907, "state" : "OH" } +{ "_id" : "44067", "city" : "NORTHFIELD", "loc" : [ -81.54294299999999, 41.320821 ], "pop" : 14014, "state" : "OH" } +{ "_id" : "44070", "city" : "NORTH OLMSTED", "loc" : [ -81.913056, 41.420129 ], "pop" : 34123, "state" : "OH" } +{ "_id" : "44072", "city" : "NOVELTY", "loc" : [ -81.334228, 41.476288 ], "pop" : 4736, "state" : "OH" } +{ "_id" : "44074", "city" : "OBERLIN", "loc" : [ -82.222863, 41.28987 ], "pop" : 11631, "state" : "OH" } +{ "_id" : "44076", "city" : "EAST ORWELL", "loc" : [ -80.839671, 41.533456 ], "pop" : 3814, "state" : "OH" } +{ "_id" : "44077", "city" : "FAIRPORT HARBOR", "loc" : [ -81.24366499999999, 41.714014 ], "pop" : 43783, "state" : "OH" } +{ "_id" : "44081", "city" : "PERRY", "loc" : [ -81.14331199999999, 41.767916 ], "pop" : 5571, "state" : "OH" } +{ "_id" : "44082", "city" : "PIERPONT", "loc" : [ -80.57411399999999, 41.767661 ], "pop" : 1460, "state" : "OH" } +{ "_id" : "44084", "city" : "ROAMING SHORES", "loc" : [ -80.88513399999999, 41.6651 ], "pop" : 2979, "state" : "OH" } +{ "_id" : "44085", "city" : "ROAMING SHORES", "loc" : [ -80.832075, 41.602629 ], "pop" : 1810, "state" : "OH" } +{ "_id" : "44086", "city" : "THOMPSON", "loc" : [ -81.057318, 41.676189 ], "pop" : 2668, "state" : "OH" } +{ "_id" : "44087", "city" : "TWINSBURG", "loc" : [ -81.455912, 41.328851 ], "pop" : 11274, "state" : "OH" } +{ "_id" : "44089", "city" : "VERMILION", "loc" : [ -82.355417, 41.409989 ], "pop" : 15058, "state" : "OH" } +{ "_id" : "44090", "city" : "WELLINGTON", "loc" : [ -82.22691500000001, 41.171178 ], "pop" : 9870, "state" : "OH" } +{ "_id" : "44092", "city" : "WICKLIFFE", "loc" : [ -81.46917500000001, 41.604565 ], "pop" : 18334, "state" : "OH" } +{ "_id" : "44093", "city" : "WILLIAMSFIELD", "loc" : [ -80.596378, 41.538296 ], "pop" : 1817, "state" : "OH" } +{ "_id" : "44094", "city" : "WILLOUGHBY", "loc" : [ -81.407619, 41.630229 ], "pop" : 30153, "state" : "OH" } +{ "_id" : "44095", "city" : "WILLOWICK", "loc" : [ -81.44788699999999, 41.649822 ], "pop" : 37473, "state" : "OH" } +{ "_id" : "44099", "city" : "WINDSOR", "loc" : [ -80.966745, 41.56233 ], "pop" : 2085, "state" : "OH" } +{ "_id" : "44102", "city" : "CLEVELAND", "loc" : [ -81.739791, 41.473508 ], "pop" : 53416, "state" : "OH" } +{ "_id" : "44103", "city" : "CLEVELAND", "loc" : [ -81.640475, 41.515726 ], "pop" : 28288, "state" : "OH" } +{ "_id" : "44104", "city" : "CLEVELAND", "loc" : [ -81.62450200000001, 41.480924 ], "pop" : 34766, "state" : "OH" } +{ "_id" : "44105", "city" : "CLEVELAND", "loc" : [ -81.61900199999999, 41.450912 ], "pop" : 56341, "state" : "OH" } +{ "_id" : "44106", "city" : "CLEVELAND", "loc" : [ -81.60757, 41.508359 ], "pop" : 35787, "state" : "OH" } +{ "_id" : "44107", "city" : "EDGEWATER", "loc" : [ -81.79714300000001, 41.482654 ], "pop" : 59702, "state" : "OH" } +{ "_id" : "44108", "city" : "CLEVELAND", "loc" : [ -81.608974, 41.53492 ], "pop" : 40401, "state" : "OH" } +{ "_id" : "44109", "city" : "CLEVELAND", "loc" : [ -81.703315, 41.445768 ], "pop" : 47515, "state" : "OH" } +{ "_id" : "44110", "city" : "CLEVELAND", "loc" : [ -81.57327600000001, 41.563557 ], "pop" : 26613, "state" : "OH" } +{ "_id" : "44111", "city" : "CLEVELAND", "loc" : [ -81.78435, 41.457066 ], "pop" : 43366, "state" : "OH" } +{ "_id" : "44112", "city" : "EAST CLEVELAND", "loc" : [ -81.576262, 41.535517 ], "pop" : 41340, "state" : "OH" } +{ "_id" : "44113", "city" : "CLEVELAND", "loc" : [ -81.701848, 41.481648 ], "pop" : 20211, "state" : "OH" } +{ "_id" : "44114", "city" : "CLEVELAND", "loc" : [ -81.67425, 41.506351 ], "pop" : 4673, "state" : "OH" } +{ "_id" : "44115", "city" : "CLEVELAND", "loc" : [ -81.66700899999999, 41.494574 ], "pop" : 7035, "state" : "OH" } +{ "_id" : "44116", "city" : "ROCKY RIVER", "loc" : [ -81.851246, 41.469401 ], "pop" : 20410, "state" : "OH" } +{ "_id" : "44117", "city" : "EUCLID", "loc" : [ -81.52568599999999, 41.569615 ], "pop" : 12371, "state" : "OH" } +{ "_id" : "44118", "city" : "CLEVELAND HEIGHT", "loc" : [ -81.553945, 41.501213 ], "pop" : 45619, "state" : "OH" } +{ "_id" : "44119", "city" : "CLEVELAND", "loc" : [ -81.54675899999999, 41.588238 ], "pop" : 13654, "state" : "OH" } +{ "_id" : "44120", "city" : "CLEVELAND", "loc" : [ -81.583911, 41.471433 ], "pop" : 49357, "state" : "OH" } +{ "_id" : "44121", "city" : "SOUTH EUCLID", "loc" : [ -81.53375800000001, 41.526019 ], "pop" : 37107, "state" : "OH" } +{ "_id" : "44122", "city" : "BEACHWOOD", "loc" : [ -81.523172, 41.470109 ], "pop" : 35115, "state" : "OH" } +{ "_id" : "44123", "city" : "SHORE", "loc" : [ -81.524325, 41.604416 ], "pop" : 18724, "state" : "OH" } +{ "_id" : "44124", "city" : "LYNDHURST MAYFIE", "loc" : [ -81.46801000000001, 41.514349 ], "pop" : 41699, "state" : "OH" } +{ "_id" : "44125", "city" : "GARFIELD HEIGHTS", "loc" : [ -81.605385, 41.415792 ], "pop" : 31020, "state" : "OH" } +{ "_id" : "44126", "city" : "FAIRVIEW PARK", "loc" : [ -81.856381, 41.4433 ], "pop" : 18145, "state" : "OH" } +{ "_id" : "44127", "city" : "CLEVELAND", "loc" : [ -81.648999, 41.470125 ], "pop" : 9046, "state" : "OH" } +{ "_id" : "44128", "city" : "CLEVELAND", "loc" : [ -81.548574, 41.441565 ], "pop" : 35258, "state" : "OH" } +{ "_id" : "44129", "city" : "PARMA", "loc" : [ -81.734604, 41.396474 ], "pop" : 30370, "state" : "OH" } +{ "_id" : "44130", "city" : "MIDPARK", "loc" : [ -81.77485799999999, 41.377178 ], "pop" : 52198, "state" : "OH" } +{ "_id" : "44131", "city" : "INDEPENDENCE", "loc" : [ -81.66421, 41.380905 ], "pop" : 20594, "state" : "OH" } +{ "_id" : "44132", "city" : "NOBLE", "loc" : [ -81.499056, 41.608516 ], "pop" : 16398, "state" : "OH" } +{ "_id" : "44133", "city" : "NORTH ROYALTON", "loc" : [ -81.74565699999999, 41.323164 ], "pop" : 23197, "state" : "OH" } +{ "_id" : "44134", "city" : "PARMA", "loc" : [ -81.705726, 41.390764 ], "pop" : 41397, "state" : "OH" } +{ "_id" : "44135", "city" : "CLEVELAND", "loc" : [ -81.804433, 41.434177 ], "pop" : 31032, "state" : "OH" } +{ "_id" : "44136", "city" : "STRONGSVILLE", "loc" : [ -81.828457, 41.313218 ], "pop" : 35308, "state" : "OH" } +{ "_id" : "44137", "city" : "MAPLE HEIGHTS", "loc" : [ -81.560339, 41.410513 ], "pop" : 26945, "state" : "OH" } +{ "_id" : "44138", "city" : "OLMSTED FALLS", "loc" : [ -81.915769, 41.373351 ], "pop" : 15722, "state" : "OH" } +{ "_id" : "44139", "city" : "SOLON", "loc" : [ -81.442082, 41.386597 ], "pop" : 18830, "state" : "OH" } +{ "_id" : "44140", "city" : "BAY VILLAGE", "loc" : [ -81.92886799999999, 41.484137 ], "pop" : 17000, "state" : "OH" } +{ "_id" : "44141", "city" : "BRECKSVILLE", "loc" : [ -81.62608299999999, 41.316554 ], "pop" : 12172, "state" : "OH" } +{ "_id" : "44142", "city" : "BROOKPARK", "loc" : [ -81.81181100000001, 41.397944 ], "pop" : 22865, "state" : "OH" } +{ "_id" : "44143", "city" : "RICHMOND HEIGHTS", "loc" : [ -81.48471499999999, 41.552195 ], "pop" : 21114, "state" : "OH" } +{ "_id" : "44144", "city" : "BROOKLYN", "loc" : [ -81.73522199999999, 41.434419 ], "pop" : 22288, "state" : "OH" } +{ "_id" : "44145", "city" : "WESTLAKE", "loc" : [ -81.92177100000001, 41.453459 ], "pop" : 27099, "state" : "OH" } +{ "_id" : "44146", "city" : "BEDFORD", "loc" : [ -81.52315, 41.392067 ], "pop" : 33014, "state" : "OH" } +{ "_id" : "44147", "city" : "BROADVIEW HEIGHT", "loc" : [ -81.680879, 41.32907 ], "pop" : 11951, "state" : "OH" } +{ "_id" : "44201", "city" : "ATWATER", "loc" : [ -81.19845599999999, 41.033487 ], "pop" : 7081, "state" : "OH" } +{ "_id" : "44202", "city" : "REMINDERVILLE", "loc" : [ -81.36042399999999, 41.320935 ], "pop" : 11547, "state" : "OH" } +{ "_id" : "44203", "city" : "NORTON", "loc" : [ -81.615314, 41.018589 ], "pop" : 42160, "state" : "OH" } +{ "_id" : "44212", "city" : "BRUNSWICK", "loc" : [ -81.827968, 41.247053 ], "pop" : 32435, "state" : "OH" } +{ "_id" : "44214", "city" : "BURBANK", "loc" : [ -81.99575299999999, 40.963725 ], "pop" : 1298, "state" : "OH" } +{ "_id" : "44215", "city" : "CHIPPEWA LAKE", "loc" : [ -81.909173, 41.06719 ], "pop" : 2714, "state" : "OH" } +{ "_id" : "44216", "city" : "CLINTON", "loc" : [ -81.587079, 40.939062 ], "pop" : 8830, "state" : "OH" } +{ "_id" : "44217", "city" : "CRESTON", "loc" : [ -81.921083, 40.978846 ], "pop" : 6602, "state" : "OH" } +{ "_id" : "44221", "city" : "CUYAHOGA FALLS", "loc" : [ -81.478961, 41.140082 ], "pop" : 32009, "state" : "OH" } +{ "_id" : "44223", "city" : "CUYAHOGA FALLS", "loc" : [ -81.51071899999999, 41.146448 ], "pop" : 14757, "state" : "OH" } +{ "_id" : "44224", "city" : "STOW", "loc" : [ -81.438017, 41.174808 ], "pop" : 31912, "state" : "OH" } +{ "_id" : "44230", "city" : "DOYLESTOWN", "loc" : [ -81.684845, 40.965042 ], "pop" : 7451, "state" : "OH" } +{ "_id" : "44231", "city" : "GARRETTSVILLE", "loc" : [ -81.070365, 41.298803 ], "pop" : 7352, "state" : "OH" } +{ "_id" : "44233", "city" : "HINCKLEY", "loc" : [ -81.74527, 41.241872 ], "pop" : 5845, "state" : "OH" } +{ "_id" : "44234", "city" : "HIRAM", "loc" : [ -81.14644, 41.332253 ], "pop" : 3775, "state" : "OH" } +{ "_id" : "44235", "city" : "HOMERVILLE", "loc" : [ -82.12495699999999, 41.02669 ], "pop" : 1196, "state" : "OH" } +{ "_id" : "44236", "city" : "HUDSON", "loc" : [ -81.43665900000001, 41.245836 ], "pop" : 18695, "state" : "OH" } +{ "_id" : "44240", "city" : "KENT", "loc" : [ -81.34976, 41.14492 ], "pop" : 43071, "state" : "OH" } +{ "_id" : "44241", "city" : "STREETSBORO", "loc" : [ -81.33829799999999, 41.249099 ], "pop" : 10735, "state" : "OH" } +{ "_id" : "44253", "city" : "LITCHFIELD", "loc" : [ -82.015674, 41.166847 ], "pop" : 2506, "state" : "OH" } +{ "_id" : "44254", "city" : "LODI", "loc" : [ -82.014661, 41.032713 ], "pop" : 4776, "state" : "OH" } +{ "_id" : "44255", "city" : "MANTUA", "loc" : [ -81.22825899999999, 41.294141 ], "pop" : 7324, "state" : "OH" } +{ "_id" : "44256", "city" : "MEDINA", "loc" : [ -81.858351, 41.140415 ], "pop" : 35686, "state" : "OH" } +{ "_id" : "44260", "city" : "MOGADORE", "loc" : [ -81.358963, 41.038196 ], "pop" : 12947, "state" : "OH" } +{ "_id" : "44262", "city" : "MUNROE FALLS", "loc" : [ -81.43756500000001, 41.14202 ], "pop" : 5375, "state" : "OH" } +{ "_id" : "44264", "city" : "PENINSULA", "loc" : [ -81.540013, 41.225579 ], "pop" : 1886, "state" : "OH" } +{ "_id" : "44266", "city" : "RAVENNA", "loc" : [ -81.233656, 41.164886 ], "pop" : 31700, "state" : "OH" } +{ "_id" : "44270", "city" : "RITTMAN", "loc" : [ -81.782599, 40.968381 ], "pop" : 8270, "state" : "OH" } +{ "_id" : "44272", "city" : "ROOTSTOWN", "loc" : [ -81.202642, 41.099534 ], "pop" : 3556, "state" : "OH" } +{ "_id" : "44273", "city" : "SEVILLE", "loc" : [ -81.856199, 41.022731 ], "pop" : 3611, "state" : "OH" } +{ "_id" : "44275", "city" : "SPENCER", "loc" : [ -82.099907, 41.098287 ], "pop" : 2595, "state" : "OH" } +{ "_id" : "44276", "city" : "STERLING", "loc" : [ -81.85191399999999, 40.953263 ], "pop" : 1838, "state" : "OH" } +{ "_id" : "44278", "city" : "TALLMADGE", "loc" : [ -81.425966, 41.097492 ], "pop" : 15402, "state" : "OH" } +{ "_id" : "44280", "city" : "VALLEY CITY", "loc" : [ -81.92446700000001, 41.236806 ], "pop" : 3711, "state" : "OH" } +{ "_id" : "44281", "city" : "WADSWORTH", "loc" : [ -81.73737300000001, 41.038375 ], "pop" : 24707, "state" : "OH" } +{ "_id" : "44286", "city" : "RICHFIELD", "loc" : [ -81.64666800000001, 41.23712 ], "pop" : 4724, "state" : "OH" } +{ "_id" : "44287", "city" : "WEST SALEM", "loc" : [ -82.106638, 40.948514 ], "pop" : 5351, "state" : "OH" } +{ "_id" : "44288", "city" : "WINDHAM", "loc" : [ -81.053451, 41.239244 ], "pop" : 4561, "state" : "OH" } +{ "_id" : "44301", "city" : "AKRON", "loc" : [ -81.520048, 41.044852 ], "pop" : 18356, "state" : "OH" } +{ "_id" : "44302", "city" : "AKRON", "loc" : [ -81.54201500000001, 41.091988 ], "pop" : 6835, "state" : "OH" } +{ "_id" : "44303", "city" : "AKRON", "loc" : [ -81.53860899999999, 41.102508 ], "pop" : 8658, "state" : "OH" } +{ "_id" : "44304", "city" : "AKRON", "loc" : [ -81.508526, 41.080808 ], "pop" : 9521, "state" : "OH" } +{ "_id" : "44305", "city" : "AKRON", "loc" : [ -81.464409, 41.076029 ], "pop" : 25788, "state" : "OH" } +{ "_id" : "44306", "city" : "AKRON", "loc" : [ -81.49155399999999, 41.04791 ], "pop" : 25758, "state" : "OH" } +{ "_id" : "44307", "city" : "AKRON", "loc" : [ -81.54878600000001, 41.069465 ], "pop" : 9945, "state" : "OH" } +{ "_id" : "44308", "city" : "AKRON", "loc" : [ -81.519363, 41.079576 ], "pop" : 1113, "state" : "OH" } +{ "_id" : "44310", "city" : "AKRON", "loc" : [ -81.500586, 41.107547 ], "pop" : 25482, "state" : "OH" } +{ "_id" : "44311", "city" : "AKRON", "loc" : [ -81.520005, 41.063784 ], "pop" : 9040, "state" : "OH" } +{ "_id" : "44312", "city" : "AKRON", "loc" : [ -81.43852800000001, 41.033442 ], "pop" : 32097, "state" : "OH" } +{ "_id" : "44313", "city" : "AKRON", "loc" : [ -81.568487, 41.121995 ], "pop" : 23501, "state" : "OH" } +{ "_id" : "44314", "city" : "AKRON", "loc" : [ -81.559825, 41.040774 ], "pop" : 21289, "state" : "OH" } +{ "_id" : "44319", "city" : "AKRON", "loc" : [ -81.53467999999999, 40.97912 ], "pop" : 21902, "state" : "OH" } +{ "_id" : "44320", "city" : "AKRON", "loc" : [ -81.56744, 41.083496 ], "pop" : 25910, "state" : "OH" } +{ "_id" : "44321", "city" : "COPLEY", "loc" : [ -81.648045, 41.103139 ], "pop" : 8756, "state" : "OH" } +{ "_id" : "44333", "city" : "FAIRLAWN", "loc" : [ -81.62385, 41.146734 ], "pop" : 15383, "state" : "OH" } +{ "_id" : "44401", "city" : "BERLIN CENTER", "loc" : [ -80.934104, 41.024319 ], "pop" : 2771, "state" : "OH" } +{ "_id" : "44402", "city" : "BRISTOLVILLE", "loc" : [ -80.85683899999999, 41.379749 ], "pop" : 3220, "state" : "OH" } +{ "_id" : "44403", "city" : "BROOKFIELD", "loc" : [ -80.578767, 41.247957 ], "pop" : 5819, "state" : "OH" } +{ "_id" : "44404", "city" : "BURGHILL", "loc" : [ -80.54406, 41.334688 ], "pop" : 802, "state" : "OH" } +{ "_id" : "44405", "city" : "CAMPBELL", "loc" : [ -80.589721, 41.077829 ], "pop" : 10027, "state" : "OH" } +{ "_id" : "44406", "city" : "CANFIELD", "loc" : [ -80.75643599999999, 41.029328 ], "pop" : 16683, "state" : "OH" } +{ "_id" : "44408", "city" : "COLUMBIANA", "loc" : [ -80.697473, 40.885279 ], "pop" : 9868, "state" : "OH" } +{ "_id" : "44410", "city" : "CORTLAND", "loc" : [ -80.73274499999999, 41.325125 ], "pop" : 15687, "state" : "OH" } +{ "_id" : "44411", "city" : "DEERFIELD", "loc" : [ -81.05282699999999, 41.03586 ], "pop" : 2323, "state" : "OH" } +{ "_id" : "44412", "city" : "DIAMOND", "loc" : [ -81.0425, 41.093473 ], "pop" : 1854, "state" : "OH" } +{ "_id" : "44413", "city" : "EAST PALESTINE", "loc" : [ -80.546513, 40.840554 ], "pop" : 7493, "state" : "OH" } +{ "_id" : "44417", "city" : "FARMDALE", "loc" : [ -80.662818, 41.392301 ], "pop" : 1781, "state" : "OH" } +{ "_id" : "44418", "city" : "FOWLER", "loc" : [ -80.60589400000001, 41.334851 ], "pop" : 1692, "state" : "OH" } +{ "_id" : "44420", "city" : "GIRARD", "loc" : [ -80.693305, 41.161136 ], "pop" : 16480, "state" : "OH" } +{ "_id" : "44423", "city" : "HANOVERTON", "loc" : [ -80.914445, 40.773116 ], "pop" : 2461, "state" : "OH" } +{ "_id" : "44425", "city" : "HUBBARD", "loc" : [ -80.57619200000001, 41.162401 ], "pop" : 15616, "state" : "OH" } +{ "_id" : "44427", "city" : "KENSINGTON", "loc" : [ -80.938079, 40.71418 ], "pop" : 1463, "state" : "OH" } +{ "_id" : "44428", "city" : "KINSMAN", "loc" : [ -80.57650599999999, 41.435442 ], "pop" : 3397, "state" : "OH" } +{ "_id" : "44429", "city" : "LAKE MILTON", "loc" : [ -80.97235000000001, 41.101354 ], "pop" : 3984, "state" : "OH" } +{ "_id" : "44430", "city" : "LEAVITTSBURG", "loc" : [ -80.886922, 41.244498 ], "pop" : 4368, "state" : "OH" } +{ "_id" : "44431", "city" : "LEETONIA", "loc" : [ -80.758453, 40.863077 ], "pop" : 4281, "state" : "OH" } +{ "_id" : "44432", "city" : "LISBON", "loc" : [ -80.758674, 40.759154 ], "pop" : 11236, "state" : "OH" } +{ "_id" : "44436", "city" : "LOWELLVILLE", "loc" : [ -80.541551, 41.050256 ], "pop" : 3882, "state" : "OH" } +{ "_id" : "44437", "city" : "MC DONALD", "loc" : [ -80.73116899999999, 41.158026 ], "pop" : 4868, "state" : "OH" } +{ "_id" : "44438", "city" : "MASURY", "loc" : [ -80.53256500000001, 41.22552 ], "pop" : 5864, "state" : "OH" } +{ "_id" : "44440", "city" : "MINERAL RIDGE", "loc" : [ -80.75529299999999, 41.131843 ], "pop" : 921, "state" : "OH" } +{ "_id" : "44441", "city" : "NEGLEY", "loc" : [ -80.564497, 40.774601 ], "pop" : 2222, "state" : "OH" } +{ "_id" : "44442", "city" : "NEW MIDDLETOWN", "loc" : [ -80.553415, 40.964607 ], "pop" : 3396, "state" : "OH" } +{ "_id" : "44443", "city" : "NEW SPRINGFIELD", "loc" : [ -80.58558499999999, 40.926517 ], "pop" : 2547, "state" : "OH" } +{ "_id" : "44444", "city" : "NEWTON FALLS", "loc" : [ -80.970135, 41.191047 ], "pop" : 11623, "state" : "OH" } +{ "_id" : "44445", "city" : "NEW WATERFORD", "loc" : [ -80.62085500000001, 40.848941 ], "pop" : 3141, "state" : "OH" } +{ "_id" : "44446", "city" : "NILES", "loc" : [ -80.755775, 41.182414 ], "pop" : 27450, "state" : "OH" } +{ "_id" : "44449", "city" : "NORTH BENTON", "loc" : [ -81.01616799999999, 40.987579 ], "pop" : 892, "state" : "OH" } +{ "_id" : "44450", "city" : "NORTH BLOOMFIELD", "loc" : [ -80.80683500000001, 41.456887 ], "pop" : 3393, "state" : "OH" } +{ "_id" : "44451", "city" : "NORTH JACKSON", "loc" : [ -80.86225, 41.088044 ], "pop" : 2448, "state" : "OH" } +{ "_id" : "44452", "city" : "NORTH LIMA", "loc" : [ -80.654911, 40.964866 ], "pop" : 2657, "state" : "OH" } +{ "_id" : "44454", "city" : "PETERSBURG", "loc" : [ -80.540031, 40.904861 ], "pop" : 650, "state" : "OH" } +{ "_id" : "44455", "city" : "ROGERS", "loc" : [ -80.620237, 40.778943 ], "pop" : 1418, "state" : "OH" } +{ "_id" : "44460", "city" : "SALEM", "loc" : [ -80.86188300000001, 40.900024 ], "pop" : 26756, "state" : "OH" } +{ "_id" : "44470", "city" : "SOUTHINGTON", "loc" : [ -80.948474, 41.298312 ], "pop" : 3019, "state" : "OH" } +{ "_id" : "44471", "city" : "STRUTHERS", "loc" : [ -80.59848700000001, 41.050847 ], "pop" : 12318, "state" : "OH" } +{ "_id" : "44473", "city" : "VIENNA", "loc" : [ -80.65499800000001, 41.217478 ], "pop" : 5638, "state" : "OH" } +{ "_id" : "44481", "city" : "WARREN", "loc" : [ -80.87180600000001, 41.172426 ], "pop" : 5407, "state" : "OH" } +{ "_id" : "44483", "city" : "WARREN", "loc" : [ -80.81644799999999, 41.263878 ], "pop" : 30257, "state" : "OH" } +{ "_id" : "44484", "city" : "WARREN", "loc" : [ -80.76424299999999, 41.231819 ], "pop" : 25898, "state" : "OH" } +{ "_id" : "44485", "city" : "WARREN", "loc" : [ -80.84413600000001, 41.240511 ], "pop" : 24847, "state" : "OH" } +{ "_id" : "44490", "city" : "WASHINGTONVILLE", "loc" : [ -80.763137, 40.897331 ], "pop" : 482, "state" : "OH" } +{ "_id" : "44491", "city" : "WEST FARMINGTON", "loc" : [ -80.96724500000001, 41.350849 ], "pop" : 768, "state" : "OH" } +{ "_id" : "44502", "city" : "YOUNGSTOWN", "loc" : [ -80.640905, 41.077366 ], "pop" : 13671, "state" : "OH" } +{ "_id" : "44503", "city" : "YOUNGSTOWN", "loc" : [ -80.650007, 41.102016 ], "pop" : 1315, "state" : "OH" } +{ "_id" : "44504", "city" : "YOUNGSTOWN", "loc" : [ -80.653887, 41.123686 ], "pop" : 5845, "state" : "OH" } +{ "_id" : "44505", "city" : "YOUNGSTOWN", "loc" : [ -80.627748, 41.125748 ], "pop" : 25106, "state" : "OH" } +{ "_id" : "44506", "city" : "YOUNGSTOWN", "loc" : [ -80.625916, 41.096045 ], "pop" : 5619, "state" : "OH" } +{ "_id" : "44507", "city" : "YOUNGSTOWN", "loc" : [ -80.65533600000001, 41.073236 ], "pop" : 10501, "state" : "OH" } +{ "_id" : "44509", "city" : "YOUNGSTOWN", "loc" : [ -80.694463, 41.10498 ], "pop" : 14399, "state" : "OH" } +{ "_id" : "44510", "city" : "YOUNGSTOWN", "loc" : [ -80.667204, 41.119714 ], "pop" : 4513, "state" : "OH" } +{ "_id" : "44511", "city" : "YOUNGSTOWN", "loc" : [ -80.69309800000001, 41.070402 ], "pop" : 27278, "state" : "OH" } +{ "_id" : "44512", "city" : "BOARDMAN", "loc" : [ -80.666629, 41.031985 ], "pop" : 35628, "state" : "OH" } +{ "_id" : "44514", "city" : "POLAND", "loc" : [ -80.610254, 41.023258 ], "pop" : 21694, "state" : "OH" } +{ "_id" : "44515", "city" : "AUSTINTOWN", "loc" : [ -80.743966, 41.093903 ], "pop" : 27130, "state" : "OH" } +{ "_id" : "44601", "city" : "ALLIANCE", "loc" : [ -81.11819300000001, 40.915842 ], "pop" : 35230, "state" : "OH" } +{ "_id" : "44606", "city" : "APPLE CREEK", "loc" : [ -81.809256, 40.755118 ], "pop" : 7286, "state" : "OH" } +{ "_id" : "44608", "city" : "BEACH CITY", "loc" : [ -81.58512899999999, 40.656199 ], "pop" : 2321, "state" : "OH" } +{ "_id" : "44609", "city" : "BELOIT", "loc" : [ -80.98966900000001, 40.895678 ], "pop" : 3205, "state" : "OH" } +{ "_id" : "44611", "city" : "BIG PRAIRIE", "loc" : [ -82.072048, 40.618777 ], "pop" : 1956, "state" : "OH" } +{ "_id" : "44612", "city" : "BOLIVAR", "loc" : [ -81.44635599999999, 40.634692 ], "pop" : 4225, "state" : "OH" } +{ "_id" : "44613", "city" : "BREWSTER", "loc" : [ -81.598752, 40.714387 ], "pop" : 2129, "state" : "OH" } +{ "_id" : "44614", "city" : "CANAL FULTON", "loc" : [ -81.577269, 40.88871 ], "pop" : 10310, "state" : "OH" } +{ "_id" : "44615", "city" : "CARROLLTON", "loc" : [ -81.081789, 40.578663 ], "pop" : 10052, "state" : "OH" } +{ "_id" : "44618", "city" : "DALTON", "loc" : [ -81.70077999999999, 40.779326 ], "pop" : 6069, "state" : "OH" } +{ "_id" : "44620", "city" : "DELLROY", "loc" : [ -81.19856, 40.586143 ], "pop" : 1844, "state" : "OH" } +{ "_id" : "44621", "city" : "DENNISON", "loc" : [ -81.320301, 40.408885 ], "pop" : 4573, "state" : "OH" } +{ "_id" : "44622", "city" : "DOVER", "loc" : [ -81.476321, 40.534338 ], "pop" : 17042, "state" : "OH" } +{ "_id" : "44624", "city" : "DUNDEE", "loc" : [ -81.676519, 40.639441 ], "pop" : 3871, "state" : "OH" } +{ "_id" : "44625", "city" : "EAST ROCHESTER", "loc" : [ -81.01749, 40.756288 ], "pop" : 1531, "state" : "OH" } +{ "_id" : "44626", "city" : "EAST SPARTA", "loc" : [ -81.368728, 40.697065 ], "pop" : 2908, "state" : "OH" } +{ "_id" : "44627", "city" : "FREDERICKSBURG", "loc" : [ -81.851812, 40.685953 ], "pop" : 3336, "state" : "OH" } +{ "_id" : "44628", "city" : "GLENMONT", "loc" : [ -82.150538, 40.521682 ], "pop" : 1908, "state" : "OH" } +{ "_id" : "44629", "city" : "GNADENHUTTEN", "loc" : [ -81.40585799999999, 40.372123 ], "pop" : 5892, "state" : "OH" } +{ "_id" : "44632", "city" : "HARTVILLE", "loc" : [ -81.32387300000001, 40.961798 ], "pop" : 8318, "state" : "OH" } +{ "_id" : "44633", "city" : "HOLMESVILLE", "loc" : [ -81.927476, 40.633042 ], "pop" : 2145, "state" : "OH" } +{ "_id" : "44634", "city" : "HOMEWORTH", "loc" : [ -81.065473, 40.859192 ], "pop" : 3400, "state" : "OH" } +{ "_id" : "44637", "city" : "KILLBUCK", "loc" : [ -81.983721, 40.4933 ], "pop" : 1868, "state" : "OH" } +{ "_id" : "44638", "city" : "LAKEVILLE", "loc" : [ -82.145477, 40.651965 ], "pop" : 1516, "state" : "OH" } +{ "_id" : "44641", "city" : "LOUISVILLE", "loc" : [ -81.25946399999999, 40.847729 ], "pop" : 18994, "state" : "OH" } +{ "_id" : "44643", "city" : "MAGNOLIA", "loc" : [ -81.307607, 40.651414 ], "pop" : 2166, "state" : "OH" } +{ "_id" : "44644", "city" : "MALVERN", "loc" : [ -81.18378, 40.684532 ], "pop" : 4761, "state" : "OH" } +{ "_id" : "44645", "city" : "MARSHALLVILLE", "loc" : [ -81.722527, 40.906677 ], "pop" : 1838, "state" : "OH" } +{ "_id" : "44646", "city" : "MASSILLON", "loc" : [ -81.497263, 40.811605 ], "pop" : 45092, "state" : "OH" } +{ "_id" : "44647", "city" : "MASSILLON", "loc" : [ -81.553252, 40.795918 ], "pop" : 17715, "state" : "OH" } +{ "_id" : "44651", "city" : "MECHANICSTOWN", "loc" : [ -80.956025, 40.626279 ], "pop" : 709, "state" : "OH" } +{ "_id" : "44654", "city" : "MILLERSBURG", "loc" : [ -81.83238299999999, 40.556683 ], "pop" : 20350, "state" : "OH" } +{ "_id" : "44656", "city" : "ZOARVILLE", "loc" : [ -81.354561, 40.625686 ], "pop" : 2969, "state" : "OH" } +{ "_id" : "44657", "city" : "MINERVA", "loc" : [ -81.103076, 40.742049 ], "pop" : 10547, "state" : "OH" } +{ "_id" : "44662", "city" : "NAVARRE", "loc" : [ -81.533824, 40.720405 ], "pop" : 10006, "state" : "OH" } +{ "_id" : "44663", "city" : "NEW PHILADELPHIA", "loc" : [ -81.435827, 40.484539 ], "pop" : 24640, "state" : "OH" } +{ "_id" : "44666", "city" : "NORTH LAWRENCE", "loc" : [ -81.629946, 40.838652 ], "pop" : 2528, "state" : "OH" } +{ "_id" : "44667", "city" : "ORRVILLE", "loc" : [ -81.774109, 40.845836 ], "pop" : 11983, "state" : "OH" } +{ "_id" : "44669", "city" : "PARIS", "loc" : [ -81.15398999999999, 40.801413 ], "pop" : 1338, "state" : "OH" } +{ "_id" : "44672", "city" : "SEBRING", "loc" : [ -81.023191, 40.922694 ], "pop" : 6276, "state" : "OH" } +{ "_id" : "44675", "city" : "SHERRODSVILLE", "loc" : [ -81.23394500000001, 40.518418 ], "pop" : 1330, "state" : "OH" } +{ "_id" : "44676", "city" : "SHREVE", "loc" : [ -82.03245099999999, 40.692584 ], "pop" : 4312, "state" : "OH" } +{ "_id" : "44677", "city" : "SMITHVILLE", "loc" : [ -81.863328, 40.859228 ], "pop" : 2695, "state" : "OH" } +{ "_id" : "44680", "city" : "STRASBURG", "loc" : [ -81.536646, 40.60028 ], "pop" : 3201, "state" : "OH" } +{ "_id" : "44681", "city" : "SUGARCREEK", "loc" : [ -81.66035599999999, 40.514785 ], "pop" : 4772, "state" : "OH" } +{ "_id" : "44683", "city" : "UHRICHSVILLE", "loc" : [ -81.33736500000001, 40.390502 ], "pop" : 6925, "state" : "OH" } +{ "_id" : "44685", "city" : "UNIONTOWN", "loc" : [ -81.421108, 40.963694 ], "pop" : 21009, "state" : "OH" } +{ "_id" : "44688", "city" : "WAYNESBURG", "loc" : [ -81.265891, 40.682881 ], "pop" : 3149, "state" : "OH" } +{ "_id" : "44689", "city" : "WILMOT", "loc" : [ -81.63524700000001, 40.656723 ], "pop" : 286, "state" : "OH" } +{ "_id" : "44691", "city" : "WOOSTER", "loc" : [ -81.948272, 40.809354 ], "pop" : 35504, "state" : "OH" } +{ "_id" : "44695", "city" : "BOWERSTON", "loc" : [ -81.18624, 40.437056 ], "pop" : 1484, "state" : "OH" } +{ "_id" : "44699", "city" : "TIPPECANOE", "loc" : [ -81.291937, 40.279748 ], "pop" : 1184, "state" : "OH" } +{ "_id" : "44702", "city" : "CANTON", "loc" : [ -81.373946, 40.80267 ], "pop" : 1208, "state" : "OH" } +{ "_id" : "44703", "city" : "CANTON", "loc" : [ -81.381439, 40.809791 ], "pop" : 11520, "state" : "OH" } +{ "_id" : "44704", "city" : "CANTON", "loc" : [ -81.353701, 40.799076 ], "pop" : 5408, "state" : "OH" } +{ "_id" : "44705", "city" : "CANTON", "loc" : [ -81.33990300000001, 40.825866 ], "pop" : 21271, "state" : "OH" } +{ "_id" : "44706", "city" : "CANTON", "loc" : [ -81.411903, 40.767959 ], "pop" : 19443, "state" : "OH" } +{ "_id" : "44707", "city" : "NORTH INDUSTRY", "loc" : [ -81.360407, 40.776885 ], "pop" : 11010, "state" : "OH" } +{ "_id" : "44708", "city" : "CANTON", "loc" : [ -81.424116, 40.81196 ], "pop" : 25891, "state" : "OH" } +{ "_id" : "44709", "city" : "NORTH CANTON", "loc" : [ -81.385947, 40.837227 ], "pop" : 19371, "state" : "OH" } +{ "_id" : "44710", "city" : "CANTON", "loc" : [ -81.416946, 40.791107 ], "pop" : 9928, "state" : "OH" } +{ "_id" : "44714", "city" : "CANTON", "loc" : [ -81.360963, 40.827174 ], "pop" : 8988, "state" : "OH" } +{ "_id" : "44718", "city" : "JACKSON BELDEN", "loc" : [ -81.448514, 40.85479 ], "pop" : 10407, "state" : "OH" } +{ "_id" : "44720", "city" : "NORTH CANTON", "loc" : [ -81.413464, 40.889919 ], "pop" : 33193, "state" : "OH" } +{ "_id" : "44721", "city" : "CANTON", "loc" : [ -81.33279, 40.883446 ], "pop" : 10254, "state" : "OH" } +{ "_id" : "44730", "city" : "EAST CANTON", "loc" : [ -81.278295, 40.784983 ], "pop" : 6154, "state" : "OH" } +{ "_id" : "44802", "city" : "ALVADA", "loc" : [ -83.376982, 41.046284 ], "pop" : 1955, "state" : "OH" } +{ "_id" : "44804", "city" : "ARCADIA", "loc" : [ -83.50194999999999, 41.111562 ], "pop" : 1142, "state" : "OH" } +{ "_id" : "44805", "city" : "ASHLAND", "loc" : [ -82.31893100000001, 40.855892 ], "pop" : 27072, "state" : "OH" } +{ "_id" : "44807", "city" : "CARROTHERS", "loc" : [ -82.88972099999999, 41.077755 ], "pop" : 2792, "state" : "OH" } +{ "_id" : "44811", "city" : "BELLEVUE", "loc" : [ -82.85765000000001, 41.268432 ], "pop" : 14361, "state" : "OH" } +{ "_id" : "44813", "city" : "BELLVILLE", "loc" : [ -82.517516, 40.613604 ], "pop" : 6432, "state" : "OH" } +{ "_id" : "44814", "city" : "BERLIN HEIGHTS", "loc" : [ -82.47771299999999, 41.320519 ], "pop" : 2485, "state" : "OH" } +{ "_id" : "44817", "city" : "BLOOMDALE", "loc" : [ -83.572356, 41.181489 ], "pop" : 1331, "state" : "OH" } +{ "_id" : "44818", "city" : "BLOOMVILLE", "loc" : [ -82.989874, 41.018206 ], "pop" : 2572, "state" : "OH" } +{ "_id" : "44820", "city" : "BUCYRUS", "loc" : [ -82.969829, 40.810306 ], "pop" : 19018, "state" : "OH" } +{ "_id" : "44822", "city" : "BUTLER", "loc" : [ -82.398984, 40.543754 ], "pop" : 3870, "state" : "OH" } +{ "_id" : "44824", "city" : "CASTALIA", "loc" : [ -82.799426, 41.387229 ], "pop" : 4027, "state" : "OH" } +{ "_id" : "44825", "city" : "CHATFIELD", "loc" : [ -83.021432, 40.956637 ], "pop" : 514, "state" : "OH" } +{ "_id" : "44826", "city" : "COLLINS", "loc" : [ -82.490402, 41.245023 ], "pop" : 1934, "state" : "OH" } +{ "_id" : "44827", "city" : "CRESTLINE", "loc" : [ -82.736723, 40.792714 ], "pop" : 6723, "state" : "OH" } +{ "_id" : "44830", "city" : "FOSTORIA", "loc" : [ -83.413938, 41.162346 ], "pop" : 20686, "state" : "OH" } +{ "_id" : "44833", "city" : "GALION", "loc" : [ -82.793943, 40.730316 ], "pop" : 19069, "state" : "OH" } +{ "_id" : "44836", "city" : "GREEN SPRINGS", "loc" : [ -83.088549, 41.228111 ], "pop" : 3752, "state" : "OH" } +{ "_id" : "44837", "city" : "GREENWICH", "loc" : [ -82.51334, 41.04068 ], "pop" : 3054, "state" : "OH" } +{ "_id" : "44839", "city" : "SHINROCK", "loc" : [ -82.555491, 41.390662 ], "pop" : 10386, "state" : "OH" } +{ "_id" : "44840", "city" : "JEROMESVILLE", "loc" : [ -82.186134, 40.813366 ], "pop" : 4052, "state" : "OH" } +{ "_id" : "44841", "city" : "KANSAS", "loc" : [ -83.329829, 41.212543 ], "pop" : 893, "state" : "OH" } +{ "_id" : "44842", "city" : "LOUDONVILLE", "loc" : [ -82.23559, 40.636059 ], "pop" : 4767, "state" : "OH" } +{ "_id" : "44843", "city" : "LUCAS", "loc" : [ -82.408671, 40.70389 ], "pop" : 2127, "state" : "OH" } +{ "_id" : "44844", "city" : "MC CUTCHENVILLE", "loc" : [ -83.26366899999999, 40.975225 ], "pop" : 515, "state" : "OH" } +{ "_id" : "44845", "city" : "MELMORE", "loc" : [ -83.143238, 41.038954 ], "pop" : 1611, "state" : "OH" } +{ "_id" : "44846", "city" : "MILAN", "loc" : [ -82.612565, 41.311065 ], "pop" : 3568, "state" : "OH" } +{ "_id" : "44847", "city" : "MONROEVILLE", "loc" : [ -82.70233, 41.218074 ], "pop" : 2721, "state" : "OH" } +{ "_id" : "44849", "city" : "NEVADA", "loc" : [ -83.12656699999999, 40.825946 ], "pop" : 2464, "state" : "OH" } +{ "_id" : "44851", "city" : "NEW LONDON", "loc" : [ -82.39658799999999, 41.090575 ], "pop" : 4243, "state" : "OH" } +{ "_id" : "44853", "city" : "NEW RIEGEL", "loc" : [ -83.24180699999999, 41.036058 ], "pop" : 1483, "state" : "OH" } +{ "_id" : "44854", "city" : "NEW WASHINGTON", "loc" : [ -82.850359, 40.957076 ], "pop" : 1679, "state" : "OH" } +{ "_id" : "44855", "city" : "NORTH FAIRFIELD", "loc" : [ -82.599801, 41.102987 ], "pop" : 1229, "state" : "OH" } +{ "_id" : "44857", "city" : "NORWALK", "loc" : [ -82.60785, 41.240314 ], "pop" : 21687, "state" : "OH" } +{ "_id" : "44859", "city" : "NOVA", "loc" : [ -82.33843899999999, 41.028215 ], "pop" : 1565, "state" : "OH" } +{ "_id" : "44864", "city" : "PERRYSVILLE", "loc" : [ -82.321307, 40.660626 ], "pop" : 2818, "state" : "OH" } +{ "_id" : "44865", "city" : "PLYMOUTH", "loc" : [ -82.66349200000001, 41.00031 ], "pop" : 4122, "state" : "OH" } +{ "_id" : "44866", "city" : "POLK", "loc" : [ -82.212587, 40.934293 ], "pop" : 2293, "state" : "OH" } +{ "_id" : "44867", "city" : "REPUBLIC", "loc" : [ -83.019407, 41.125876 ], "pop" : 1735, "state" : "OH" } +{ "_id" : "44870", "city" : "SANDUSKY", "loc" : [ -82.70632999999999, 41.434878 ], "pop" : 44129, "state" : "OH" } +{ "_id" : "44874", "city" : "SAVANNAH", "loc" : [ -82.344272, 40.945382 ], "pop" : 2983, "state" : "OH" } +{ "_id" : "44875", "city" : "SHELBY", "loc" : [ -82.654949, 40.878432 ], "pop" : 14736, "state" : "OH" } +{ "_id" : "44878", "city" : "SHILOH", "loc" : [ -82.522155, 40.934015 ], "pop" : 4297, "state" : "OH" } +{ "_id" : "44880", "city" : "SULLIVAN", "loc" : [ -82.21721700000001, 41.036818 ], "pop" : 1772, "state" : "OH" } +{ "_id" : "44882", "city" : "SYCAMORE", "loc" : [ -83.149176, 40.941299 ], "pop" : 2610, "state" : "OH" } +{ "_id" : "44883", "city" : "TIFFIN", "loc" : [ -83.18435599999999, 41.123822 ], "pop" : 28310, "state" : "OH" } +{ "_id" : "44887", "city" : "TIRO", "loc" : [ -82.797032, 40.880992 ], "pop" : 1471, "state" : "OH" } +{ "_id" : "44889", "city" : "WAKEMAN", "loc" : [ -82.378168, 41.263748 ], "pop" : 6464, "state" : "OH" } +{ "_id" : "44890", "city" : "WILLARD", "loc" : [ -82.72880499999999, 41.062787 ], "pop" : 11156, "state" : "OH" } +{ "_id" : "44902", "city" : "MANSFIELD", "loc" : [ -82.512269, 40.755937 ], "pop" : 8504, "state" : "OH" } +{ "_id" : "44903", "city" : "MANSFIELD", "loc" : [ -82.52538, 40.762258 ], "pop" : 26575, "state" : "OH" } +{ "_id" : "44904", "city" : "LEXINGTON", "loc" : [ -82.590605, 40.682568 ], "pop" : 12466, "state" : "OH" } +{ "_id" : "44905", "city" : "LINCOLN", "loc" : [ -82.474609, 40.777173 ], "pop" : 16221, "state" : "OH" } +{ "_id" : "44906", "city" : "MANSFIELD", "loc" : [ -82.55929500000001, 40.762679 ], "pop" : 16809, "state" : "OH" } +{ "_id" : "44907", "city" : "MANSFIELD", "loc" : [ -82.51983300000001, 40.734483 ], "pop" : 14891, "state" : "OH" } +{ "_id" : "45001", "city" : "ADDYSTON", "loc" : [ -84.709602, 39.137364 ], "pop" : 1198, "state" : "OH" } +{ "_id" : "45002", "city" : "CLEVES", "loc" : [ -84.733969, 39.193707 ], "pop" : 10249, "state" : "OH" } +{ "_id" : "45003", "city" : "COLLEGE CORNER", "loc" : [ -84.804951, 39.575453 ], "pop" : 708, "state" : "OH" } +{ "_id" : "45005", "city" : "CARLISLE", "loc" : [ -84.305881, 39.547839 ], "pop" : 29720, "state" : "OH" } +{ "_id" : "45011", "city" : "HAMILTON", "loc" : [ -84.52211699999999, 39.405906 ], "pop" : 41229, "state" : "OH" } +{ "_id" : "45013", "city" : "ROSSVILLE", "loc" : [ -84.606655, 39.40619 ], "pop" : 48553, "state" : "OH" } +{ "_id" : "45014", "city" : "FAIRFIELD", "loc" : [ -84.547881, 39.326602 ], "pop" : 41880, "state" : "OH" } +{ "_id" : "45015", "city" : "LINDENWALD", "loc" : [ -84.551187, 39.367152 ], "pop" : 13310, "state" : "OH" } +{ "_id" : "45030", "city" : "HARRISON", "loc" : [ -84.78368, 39.259208 ], "pop" : 15218, "state" : "OH" } +{ "_id" : "45036", "city" : "OTTERBIEN HOME", "loc" : [ -84.218754, 39.442047 ], "pop" : 24354, "state" : "OH" } +{ "_id" : "45039", "city" : "MAINEVILLE", "loc" : [ -84.252567, 39.313878 ], "pop" : 12215, "state" : "OH" } +{ "_id" : "45040", "city" : "MASON", "loc" : [ -84.31493500000001, 39.335741 ], "pop" : 18803, "state" : "OH" } +{ "_id" : "45042", "city" : "MIDDLETOWN", "loc" : [ -84.389601, 39.532121 ], "pop" : 27251, "state" : "OH" } +{ "_id" : "45044", "city" : "EXCELLO", "loc" : [ -84.383461, 39.485259 ], "pop" : 38868, "state" : "OH" } +{ "_id" : "45050", "city" : "MONROE", "loc" : [ -84.365196, 39.441285 ], "pop" : 4352, "state" : "OH" } +{ "_id" : "45052", "city" : "NORTH BEND", "loc" : [ -84.727261, 39.153605 ], "pop" : 4013, "state" : "OH" } +{ "_id" : "45053", "city" : "OKEANA", "loc" : [ -84.776149, 39.353732 ], "pop" : 2894, "state" : "OH" } +{ "_id" : "45054", "city" : "OREGONIA", "loc" : [ -84.051136, 39.414479 ], "pop" : 1405, "state" : "OH" } +{ "_id" : "45056", "city" : "MIAMI UNIVERSITY", "loc" : [ -84.738518, 39.503838 ], "pop" : 26075, "state" : "OH" } +{ "_id" : "45064", "city" : "SOMERVILLE", "loc" : [ -84.621911, 39.555366 ], "pop" : 902, "state" : "OH" } +{ "_id" : "45065", "city" : "SOUTH LEBANON", "loc" : [ -84.21078300000001, 39.371451 ], "pop" : 2774, "state" : "OH" } +{ "_id" : "45066", "city" : "SPRINGBORO", "loc" : [ -84.228774, 39.562975 ], "pop" : 9106, "state" : "OH" } +{ "_id" : "45067", "city" : "TRENTON", "loc" : [ -84.45976899999999, 39.479937 ], "pop" : 7072, "state" : "OH" } +{ "_id" : "45068", "city" : "WAYNESVILLE", "loc" : [ -84.081518, 39.528489 ], "pop" : 6880, "state" : "OH" } +{ "_id" : "45069", "city" : "WEST CHESTER", "loc" : [ -84.39978600000001, 39.340243 ], "pop" : 32613, "state" : "OH" } +{ "_id" : "45101", "city" : "ABERDEEN", "loc" : [ -83.763723, 38.670864 ], "pop" : 2176, "state" : "OH" } +{ "_id" : "45102", "city" : "AMELIA", "loc" : [ -84.211174, 39.021138 ], "pop" : 15931, "state" : "OH" } +{ "_id" : "45103", "city" : "BATAVIA", "loc" : [ -84.14512499999999, 39.095661 ], "pop" : 14416, "state" : "OH" } +{ "_id" : "45106", "city" : "BETHEL", "loc" : [ -84.09195, 38.94236 ], "pop" : 10408, "state" : "OH" } +{ "_id" : "45107", "city" : "BLANCHESTER", "loc" : [ -83.973977, 39.303442 ], "pop" : 6158, "state" : "OH" } +{ "_id" : "45111", "city" : "CAMP DENNISON", "loc" : [ -84.289659, 39.196212 ], "pop" : 482, "state" : "OH" } +{ "_id" : "45113", "city" : "CLARKSVILLE", "loc" : [ -83.959407, 39.404233 ], "pop" : 1434, "state" : "OH" } +{ "_id" : "45118", "city" : "FAYETTEVILLE", "loc" : [ -83.950087, 39.186214 ], "pop" : 3177, "state" : "OH" } +{ "_id" : "45120", "city" : "FELICITY", "loc" : [ -84.098581, 38.826248 ], "pop" : 2662, "state" : "OH" } +{ "_id" : "45121", "city" : "GEORGETOWN", "loc" : [ -83.909153, 38.871708 ], "pop" : 7474, "state" : "OH" } +{ "_id" : "45122", "city" : "GOSHEN", "loc" : [ -84.118764, 39.220931 ], "pop" : 11742, "state" : "OH" } +{ "_id" : "45123", "city" : "GREENFIELD", "loc" : [ -83.389805, 39.347763 ], "pop" : 8106, "state" : "OH" } +{ "_id" : "45130", "city" : "HAMERSVILLE", "loc" : [ -83.99306199999999, 38.919962 ], "pop" : 3415, "state" : "OH" } +{ "_id" : "45133", "city" : "HILLSBORO", "loc" : [ -83.60640600000001, 39.167877 ], "pop" : 19825, "state" : "OH" } +{ "_id" : "45135", "city" : "LEESBURG", "loc" : [ -83.548146, 39.345767 ], "pop" : 3684, "state" : "OH" } +{ "_id" : "45140", "city" : "LOVELAND", "loc" : [ -84.258802, 39.244484 ], "pop" : 29488, "state" : "OH" } +{ "_id" : "45142", "city" : "LYNCHBURG", "loc" : [ -83.80212400000001, 39.211931 ], "pop" : 4539, "state" : "OH" } +{ "_id" : "45144", "city" : "MANCHESTER", "loc" : [ -83.618064, 38.698167 ], "pop" : 4303, "state" : "OH" } +{ "_id" : "45146", "city" : "MARTINSVILLE", "loc" : [ -83.800545, 39.312705 ], "pop" : 1413, "state" : "OH" } +{ "_id" : "45148", "city" : "MIDLAND", "loc" : [ -83.893131, 39.29169 ], "pop" : 1488, "state" : "OH" } +{ "_id" : "45150", "city" : "DAY HEIGHTS", "loc" : [ -84.243814, 39.179987 ], "pop" : 24709, "state" : "OH" } +{ "_id" : "45152", "city" : "MORROW", "loc" : [ -84.11808499999999, 39.347619 ], "pop" : 5498, "state" : "OH" } +{ "_id" : "45153", "city" : "MOSCOW", "loc" : [ -84.195824, 38.858255 ], "pop" : 1957, "state" : "OH" } +{ "_id" : "45154", "city" : "MOUNT ORAB", "loc" : [ -83.948027, 39.045368 ], "pop" : 8247, "state" : "OH" } +{ "_id" : "45157", "city" : "NEW RICHMOND", "loc" : [ -84.237903, 38.953663 ], "pop" : 8660, "state" : "OH" } +{ "_id" : "45159", "city" : "NEW VIENNA", "loc" : [ -83.688171, 39.332058 ], "pop" : 2213, "state" : "OH" } +{ "_id" : "45162", "city" : "PLEASANT PLAIN", "loc" : [ -84.09673600000001, 39.288382 ], "pop" : 2911, "state" : "OH" } +{ "_id" : "45167", "city" : "RIPLEY", "loc" : [ -83.822677, 38.755095 ], "pop" : 3742, "state" : "OH" } +{ "_id" : "45168", "city" : "RUSSELLVILLE", "loc" : [ -83.76245900000001, 38.851128 ], "pop" : 1600, "state" : "OH" } +{ "_id" : "45169", "city" : "SABINA", "loc" : [ -83.65025199999999, 39.490022 ], "pop" : 4866, "state" : "OH" } +{ "_id" : "45171", "city" : "SARDINIA", "loc" : [ -83.796649, 38.983232 ], "pop" : 3377, "state" : "OH" } +{ "_id" : "45174", "city" : "TERRACE PARK", "loc" : [ -84.30976200000001, 39.160155 ], "pop" : 2133, "state" : "OH" } +{ "_id" : "45176", "city" : "WILLIAMSBURG", "loc" : [ -84.043167, 39.075345 ], "pop" : 5038, "state" : "OH" } +{ "_id" : "45177", "city" : "WILMINGTON", "loc" : [ -83.84165299999999, 39.448788 ], "pop" : 18361, "state" : "OH" } +{ "_id" : "45202", "city" : "CINCINNATI", "loc" : [ -84.50195600000001, 39.107225 ], "pop" : 6428, "state" : "OH" } +{ "_id" : "45203", "city" : "CINCINNATI", "loc" : [ -84.525684, 39.10754 ], "pop" : 5327, "state" : "OH" } +{ "_id" : "45204", "city" : "CINCINNATI", "loc" : [ -84.566794, 39.102498 ], "pop" : 11444, "state" : "OH" } +{ "_id" : "45205", "city" : "CINCINNATI", "loc" : [ -84.575672, 39.110439 ], "pop" : 23052, "state" : "OH" } +{ "_id" : "45206", "city" : "CINCINNATI", "loc" : [ -84.485258, 39.126916 ], "pop" : 14017, "state" : "OH" } +{ "_id" : "45207", "city" : "CINCINNATI", "loc" : [ -84.47062099999999, 39.139747 ], "pop" : 8156, "state" : "OH" } +{ "_id" : "45208", "city" : "CINCINNATI", "loc" : [ -84.435474, 39.136082 ], "pop" : 19557, "state" : "OH" } +{ "_id" : "45209", "city" : "CINCINNATI", "loc" : [ -84.42783300000001, 39.151578 ], "pop" : 12082, "state" : "OH" } +{ "_id" : "45210", "city" : "CINCINNATI", "loc" : [ -84.513535, 39.112579 ], "pop" : 11349, "state" : "OH" } +{ "_id" : "45211", "city" : "CINCINNATI", "loc" : [ -84.59671400000001, 39.152401 ], "pop" : 44072, "state" : "OH" } +{ "_id" : "45212", "city" : "NORWOOD", "loc" : [ -84.452765, 39.162505 ], "pop" : 26737, "state" : "OH" } +{ "_id" : "45213", "city" : "TAFT", "loc" : [ -84.418701, 39.182905 ], "pop" : 14333, "state" : "OH" } +{ "_id" : "45214", "city" : "CINCINNATI", "loc" : [ -84.541442, 39.120642 ], "pop" : 12013, "state" : "OH" } +{ "_id" : "45215", "city" : "LOCKLAND", "loc" : [ -84.457168, 39.230063 ], "pop" : 34166, "state" : "OH" } +{ "_id" : "45216", "city" : "ELMWOOD PLACE", "loc" : [ -84.479232, 39.199183 ], "pop" : 10261, "state" : "OH" } +{ "_id" : "45217", "city" : "SAINT BERNARD", "loc" : [ -84.497424, 39.161715 ], "pop" : 8838, "state" : "OH" } +{ "_id" : "45218", "city" : "GREENHILLS", "loc" : [ -84.51960800000001, 39.266573 ], "pop" : 4680, "state" : "OH" } +{ "_id" : "45219", "city" : "CINCINNATI", "loc" : [ -84.513127, 39.127027 ], "pop" : 21619, "state" : "OH" } +{ "_id" : "45220", "city" : "CINCINNATI", "loc" : [ -84.521738, 39.143183 ], "pop" : 15449, "state" : "OH" } +{ "_id" : "45223", "city" : "CINCINNATI", "loc" : [ -84.54780700000001, 39.169619 ], "pop" : 15639, "state" : "OH" } +{ "_id" : "45224", "city" : "COLLEGE HILL", "loc" : [ -84.53883, 39.203079 ], "pop" : 23394, "state" : "OH" } +{ "_id" : "45225", "city" : "CINCINNATI", "loc" : [ -84.55326700000001, 39.144654 ], "pop" : 13324, "state" : "OH" } +{ "_id" : "45226", "city" : "CINCINNATI", "loc" : [ -84.431194, 39.117356 ], "pop" : 5711, "state" : "OH" } +{ "_id" : "45227", "city" : "MADISONVILLE", "loc" : [ -84.38721099999999, 39.15431 ], "pop" : 21393, "state" : "OH" } +{ "_id" : "45228", "city" : "CINCINNATI", "loc" : [ -84.42353900000001, 39.066448 ], "pop" : 538, "state" : "OH" } +{ "_id" : "45229", "city" : "CINCINNATI", "loc" : [ -84.48918399999999, 39.149016 ], "pop" : 19811, "state" : "OH" } +{ "_id" : "45230", "city" : "ANDERSON", "loc" : [ -84.378727, 39.080861 ], "pop" : 26856, "state" : "OH" } +{ "_id" : "45231", "city" : "CINCINNATI", "loc" : [ -84.543702, 39.241827 ], "pop" : 44838, "state" : "OH" } +{ "_id" : "45232", "city" : "CINCINNATI", "loc" : [ -84.514101, 39.185926 ], "pop" : 9364, "state" : "OH" } +{ "_id" : "45233", "city" : "SAYLOR PARK", "loc" : [ -84.669411, 39.11928 ], "pop" : 15452, "state" : "OH" } +{ "_id" : "45236", "city" : "TAFT", "loc" : [ -84.394746, 39.207302 ], "pop" : 26113, "state" : "OH" } +{ "_id" : "45237", "city" : "CINCINNATI", "loc" : [ -84.45799700000001, 39.18797 ], "pop" : 25445, "state" : "OH" } +{ "_id" : "45238", "city" : "WESTERN HILLS", "loc" : [ -84.608805, 39.111667 ], "pop" : 48302, "state" : "OH" } +{ "_id" : "45239", "city" : "GROESBECK", "loc" : [ -84.57922499999999, 39.207995 ], "pop" : 27024, "state" : "OH" } +{ "_id" : "45240", "city" : "PARKDALE", "loc" : [ -84.52629899999999, 39.286424 ], "pop" : 27517, "state" : "OH" } +{ "_id" : "45241", "city" : "SHARONVILLE", "loc" : [ -84.391161, 39.276745 ], "pop" : 21992, "state" : "OH" } +{ "_id" : "45242", "city" : "SYCAMORE", "loc" : [ -84.359919, 39.239881 ], "pop" : 21183, "state" : "OH" } +{ "_id" : "45243", "city" : "MADEIRA", "loc" : [ -84.35934899999999, 39.187847 ], "pop" : 14999, "state" : "OH" } +{ "_id" : "45244", "city" : "NEWTOWN", "loc" : [ -84.347765, 39.107091 ], "pop" : 12310, "state" : "OH" } +{ "_id" : "45245", "city" : "NEWTOWN", "loc" : [ -84.277383, 39.091293 ], "pop" : 36134, "state" : "OH" } +{ "_id" : "45246", "city" : "GLENDALE", "loc" : [ -84.472353, 39.28751 ], "pop" : 13861, "state" : "OH" } +{ "_id" : "45247", "city" : "GROESBECK", "loc" : [ -84.631608, 39.207604 ], "pop" : 16834, "state" : "OH" } +{ "_id" : "45248", "city" : "WESTWOOD", "loc" : [ -84.651535, 39.159056 ], "pop" : 20735, "state" : "OH" } +{ "_id" : "45249", "city" : "SYCAMORE", "loc" : [ -84.326673, 39.275946 ], "pop" : 10312, "state" : "OH" } +{ "_id" : "45251", "city" : "GROESBECK", "loc" : [ -84.587987, 39.253005 ], "pop" : 22487, "state" : "OH" } +{ "_id" : "45252", "city" : "CINCINNATI", "loc" : [ -84.62832, 39.266803 ], "pop" : 3302, "state" : "OH" } +{ "_id" : "45255", "city" : "ANDERSON", "loc" : [ -84.33077400000001, 39.070642 ], "pop" : 15600, "state" : "OH" } +{ "_id" : "45302", "city" : "ANNA", "loc" : [ -84.21034400000001, 40.405105 ], "pop" : 3483, "state" : "OH" } +{ "_id" : "45303", "city" : "ANSONIA", "loc" : [ -84.640642, 40.215064 ], "pop" : 2230, "state" : "OH" } +{ "_id" : "45304", "city" : "CASTINE", "loc" : [ -84.53702, 39.988367 ], "pop" : 8201, "state" : "OH" } +{ "_id" : "45305", "city" : "BELLBROOK", "loc" : [ -84.08244999999999, 39.640187 ], "pop" : 8162, "state" : "OH" } +{ "_id" : "45306", "city" : "BOTKINS", "loc" : [ -84.177994, 40.465897 ], "pop" : 2168, "state" : "OH" } +{ "_id" : "45308", "city" : "BRADFORD", "loc" : [ -84.429288, 40.128558 ], "pop" : 6966, "state" : "OH" } +{ "_id" : "45309", "city" : "BROOKVILLE", "loc" : [ -84.416464, 39.841393 ], "pop" : 11613, "state" : "OH" } +{ "_id" : "45311", "city" : "CAMDEN", "loc" : [ -84.61000799999999, 39.613391 ], "pop" : 8394, "state" : "OH" } +{ "_id" : "45312", "city" : "CASSTOWN", "loc" : [ -84.108799, 40.071578 ], "pop" : 1283, "state" : "OH" } +{ "_id" : "45314", "city" : "CEDARVILLE", "loc" : [ -83.801253, 39.748424 ], "pop" : 4685, "state" : "OH" } +{ "_id" : "45315", "city" : "CLAYTON", "loc" : [ -84.33989, 39.855124 ], "pop" : 2269, "state" : "OH" } +{ "_id" : "45317", "city" : "CONOVER", "loc" : [ -84.02829699999999, 40.145694 ], "pop" : 1053, "state" : "OH" } +{ "_id" : "45318", "city" : "COVINGTON", "loc" : [ -84.34964600000001, 40.11756 ], "pop" : 3154, "state" : "OH" } +{ "_id" : "45320", "city" : "EATON", "loc" : [ -84.65084899999999, 39.742572 ], "pop" : 13779, "state" : "OH" } +{ "_id" : "45321", "city" : "ELDORADO", "loc" : [ -84.67859199999999, 39.888209 ], "pop" : 1168, "state" : "OH" } +{ "_id" : "45322", "city" : "UNION", "loc" : [ -84.309515, 39.873976 ], "pop" : 20297, "state" : "OH" } +{ "_id" : "45323", "city" : "ENON", "loc" : [ -83.938464, 39.866282 ], "pop" : 5820, "state" : "OH" } +{ "_id" : "45324", "city" : "FAIRBORN", "loc" : [ -84.019789, 39.805311 ], "pop" : 35733, "state" : "OH" } +{ "_id" : "45325", "city" : "FARMERSVILLE", "loc" : [ -84.420507, 39.686684 ], "pop" : 2292, "state" : "OH" } +{ "_id" : "45326", "city" : "FLETCHER", "loc" : [ -84.13303999999999, 40.152622 ], "pop" : 1752, "state" : "OH" } +{ "_id" : "45327", "city" : "GERMANTOWN", "loc" : [ -84.376384, 39.6244 ], "pop" : 8187, "state" : "OH" } +{ "_id" : "45331", "city" : "GREENVILLE", "loc" : [ -84.63418900000001, 40.098726 ], "pop" : 23035, "state" : "OH" } +{ "_id" : "45332", "city" : "HOLLANSBURG", "loc" : [ -84.79008, 39.989862 ], "pop" : 789, "state" : "OH" } +{ "_id" : "45333", "city" : "HOUSTON", "loc" : [ -84.352109, 40.253478 ], "pop" : 1613, "state" : "OH" } +{ "_id" : "45334", "city" : "JACKSON CENTER", "loc" : [ -84.045677, 40.435802 ], "pop" : 2318, "state" : "OH" } +{ "_id" : "45335", "city" : "JAMESTOWN", "loc" : [ -83.750417, 39.642848 ], "pop" : 6956, "state" : "OH" } +{ "_id" : "45337", "city" : "LAURA", "loc" : [ -84.3994, 39.978492 ], "pop" : 2602, "state" : "OH" } +{ "_id" : "45338", "city" : "LEWISBURG", "loc" : [ -84.53685, 39.853404 ], "pop" : 5582, "state" : "OH" } +{ "_id" : "45339", "city" : "LUDLOW FALLS", "loc" : [ -84.33339100000001, 39.987091 ], "pop" : 1888, "state" : "OH" } +{ "_id" : "45340", "city" : "MAPLEWOOD", "loc" : [ -84.076657, 40.343743 ], "pop" : 2071, "state" : "OH" } +{ "_id" : "45341", "city" : "MEDWAY", "loc" : [ -84.026808, 39.879774 ], "pop" : 4385, "state" : "OH" } +{ "_id" : "45342", "city" : "MIAMISBURG", "loc" : [ -84.267477, 39.632095 ], "pop" : 27356, "state" : "OH" } +{ "_id" : "45344", "city" : "NEW CARLISLE", "loc" : [ -84.021704, 39.930025 ], "pop" : 17912, "state" : "OH" } +{ "_id" : "45345", "city" : "NEW LEBANON", "loc" : [ -84.395591, 39.739798 ], "pop" : 7359, "state" : "OH" } +{ "_id" : "45346", "city" : "NEW MADISON", "loc" : [ -84.722211, 39.968711 ], "pop" : 2519, "state" : "OH" } +{ "_id" : "45347", "city" : "NEW PARIS", "loc" : [ -84.779337, 39.861718 ], "pop" : 3783, "state" : "OH" } +{ "_id" : "45348", "city" : "NEW WESTON", "loc" : [ -84.630792, 40.334923 ], "pop" : 1266, "state" : "OH" } +{ "_id" : "45356", "city" : "PIQUA", "loc" : [ -84.25305299999999, 40.148621 ], "pop" : 24508, "state" : "OH" } +{ "_id" : "45359", "city" : "PLEASANT HILL", "loc" : [ -84.34363399999999, 40.053136 ], "pop" : 2553, "state" : "OH" } +{ "_id" : "45362", "city" : "ROSSBURG", "loc" : [ -84.626419, 40.29465 ], "pop" : 1450, "state" : "OH" } +{ "_id" : "45363", "city" : "RUSSIA", "loc" : [ -84.412255, 40.234065 ], "pop" : 911, "state" : "OH" } +{ "_id" : "45365", "city" : "SIDNEY", "loc" : [ -84.162223, 40.287357 ], "pop" : 27517, "state" : "OH" } +{ "_id" : "45368", "city" : "SELMA", "loc" : [ -83.660787, 39.846939 ], "pop" : 4143, "state" : "OH" } +{ "_id" : "45369", "city" : "SOUTH VIENNA", "loc" : [ -83.61570399999999, 39.94732 ], "pop" : 3814, "state" : "OH" } +{ "_id" : "45370", "city" : "SPRING VALLEY", "loc" : [ -84.10158300000001, 39.602761 ], "pop" : 5950, "state" : "OH" } +{ "_id" : "45371", "city" : "PHONETON", "loc" : [ -84.17150100000001, 39.943577 ], "pop" : 14967, "state" : "OH" } +{ "_id" : "45373", "city" : "TROY", "loc" : [ -84.20315100000001, 40.037394 ], "pop" : 29422, "state" : "OH" } +{ "_id" : "45377", "city" : "VANDALIA", "loc" : [ -84.20226599999999, 39.888273 ], "pop" : 14355, "state" : "OH" } +{ "_id" : "45380", "city" : "VERSAILLES", "loc" : [ -84.49569700000001, 40.227284 ], "pop" : 4921, "state" : "OH" } +{ "_id" : "45381", "city" : "WEST ALEXANDRIA", "loc" : [ -84.535214, 39.725898 ], "pop" : 5707, "state" : "OH" } +{ "_id" : "45382", "city" : "WEST MANCHESTER", "loc" : [ -84.619383, 39.902564 ], "pop" : 1599, "state" : "OH" } +{ "_id" : "45383", "city" : "WEST MILTON", "loc" : [ -84.324237, 39.953077 ], "pop" : 6095, "state" : "OH" } +{ "_id" : "45385", "city" : "XENIA", "loc" : [ -83.93687799999999, 39.684204 ], "pop" : 36683, "state" : "OH" } +{ "_id" : "45387", "city" : "YELLOW SPRINGS", "loc" : [ -83.889066, 39.799569 ], "pop" : 5743, "state" : "OH" } +{ "_id" : "45388", "city" : "YORKSHIRE", "loc" : [ -84.483587, 40.328328 ], "pop" : 1054, "state" : "OH" } +{ "_id" : "45390", "city" : "UNION CITY", "loc" : [ -84.783209, 40.201773 ], "pop" : 4123, "state" : "OH" } +{ "_id" : "45402", "city" : "DAYTON", "loc" : [ -84.189508, 39.756305 ], "pop" : 2811, "state" : "OH" } +{ "_id" : "45403", "city" : "DAYTON", "loc" : [ -84.14980199999999, 39.761728 ], "pop" : 19567, "state" : "OH" } +{ "_id" : "45404", "city" : "DAYTON", "loc" : [ -84.16215699999999, 39.78619 ], "pop" : 14396, "state" : "OH" } +{ "_id" : "45405", "city" : "DAYTON", "loc" : [ -84.21354599999999, 39.78993 ], "pop" : 25151, "state" : "OH" } +{ "_id" : "45406", "city" : "DAYTON", "loc" : [ -84.237297, 39.782148 ], "pop" : 31024, "state" : "OH" } +{ "_id" : "45407", "city" : "DAYTON", "loc" : [ -84.224232, 39.762699 ], "pop" : 13708, "state" : "OH" } +{ "_id" : "45408", "city" : "DAYTON", "loc" : [ -84.22896299999999, 39.739526 ], "pop" : 13177, "state" : "OH" } +{ "_id" : "45409", "city" : "DAYTON", "loc" : [ -84.182495, 39.728496 ], "pop" : 12633, "state" : "OH" } +{ "_id" : "45410", "city" : "DAYTON", "loc" : [ -84.16001, 39.74743 ], "pop" : 19743, "state" : "OH" } +{ "_id" : "45414", "city" : "DAYTON", "loc" : [ -84.202444, 39.828528 ], "pop" : 23033, "state" : "OH" } +{ "_id" : "45415", "city" : "DAYTON", "loc" : [ -84.26132800000001, 39.835488 ], "pop" : 12885, "state" : "OH" } +{ "_id" : "45416", "city" : "TROTWOOD", "loc" : [ -84.25982399999999, 39.805541 ], "pop" : 6905, "state" : "OH" } +{ "_id" : "45417", "city" : "DAYTON", "loc" : [ -84.246961, 39.752812 ], "pop" : 14617, "state" : "OH" } +{ "_id" : "45418", "city" : "DAYTON", "loc" : [ -84.267696, 39.716251 ], "pop" : 6913, "state" : "OH" } +{ "_id" : "45419", "city" : "DAYTON", "loc" : [ -84.163656, 39.715486 ], "pop" : 17079, "state" : "OH" } +{ "_id" : "45420", "city" : "KETTERING", "loc" : [ -84.133892, 39.721286 ], "pop" : 26955, "state" : "OH" } +{ "_id" : "45424", "city" : "HUBER HEIGHTS", "loc" : [ -84.123287, 39.845339 ], "pop" : 48120, "state" : "OH" } +{ "_id" : "45426", "city" : "TROTWOOD", "loc" : [ -84.298283, 39.810548 ], "pop" : 17853, "state" : "OH" } +{ "_id" : "45427", "city" : "DAYTON", "loc" : [ -84.28188400000001, 39.754527 ], "pop" : 13469, "state" : "OH" } +{ "_id" : "45429", "city" : "KETTERING", "loc" : [ -84.156077, 39.686392 ], "pop" : 27574, "state" : "OH" } +{ "_id" : "45430", "city" : "BEAVERCREEK", "loc" : [ -84.083596, 39.709381 ], "pop" : 6511, "state" : "OH" } +{ "_id" : "45431", "city" : "BEAVERCREEK", "loc" : [ -84.099802, 39.765396 ], "pop" : 25772, "state" : "OH" } +{ "_id" : "45432", "city" : "BEAVERCREEK", "loc" : [ -84.094157, 39.740774 ], "pop" : 14917, "state" : "OH" } +{ "_id" : "45433", "city" : "DAYTON", "loc" : [ -84.059048, 39.813758 ], "pop" : 2298, "state" : "OH" } +{ "_id" : "45434", "city" : "BEAVERCREEK", "loc" : [ -84.040385, 39.716552 ], "pop" : 8855, "state" : "OH" } +{ "_id" : "45439", "city" : "WEST CARROLLTON", "loc" : [ -84.21626000000001, 39.689617 ], "pop" : 9866, "state" : "OH" } +{ "_id" : "45440", "city" : "DAYTON", "loc" : [ -84.113573, 39.674854 ], "pop" : 17129, "state" : "OH" } +{ "_id" : "45449", "city" : "WEST CARROLLTON", "loc" : [ -84.237887, 39.662098 ], "pop" : 20391, "state" : "OH" } +{ "_id" : "45458", "city" : "CENTERVILLE", "loc" : [ -84.16269699999999, 39.615755 ], "pop" : 16364, "state" : "OH" } +{ "_id" : "45459", "city" : "CENTERVILLE", "loc" : [ -84.166422, 39.645957 ], "pop" : 25767, "state" : "OH" } +{ "_id" : "45502", "city" : "SPRINGFIELD", "loc" : [ -83.84133799999999, 39.930486 ], "pop" : 16510, "state" : "OH" } +{ "_id" : "45503", "city" : "SPRINGFIELD", "loc" : [ -83.78043, 39.9528 ], "pop" : 30547, "state" : "OH" } +{ "_id" : "45504", "city" : "SPRINGFIELD", "loc" : [ -83.83430199999999, 39.940793 ], "pop" : 19854, "state" : "OH" } +{ "_id" : "45505", "city" : "SPRINGFIELD", "loc" : [ -83.78559300000001, 39.910588 ], "pop" : 23956, "state" : "OH" } +{ "_id" : "45506", "city" : "SPRINGFIELD", "loc" : [ -83.827512, 39.910418 ], "pop" : 19027, "state" : "OH" } +{ "_id" : "45601", "city" : "CHILLICOTHE", "loc" : [ -82.98949, 39.337997 ], "pop" : 54615, "state" : "OH" } +{ "_id" : "45612", "city" : "BAINBRIDGE", "loc" : [ -83.276268, 39.213116 ], "pop" : 4356, "state" : "OH" } +{ "_id" : "45613", "city" : "BEAVER", "loc" : [ -82.847469, 39.023847 ], "pop" : 2953, "state" : "OH" } +{ "_id" : "45614", "city" : "BIDWELL", "loc" : [ -82.27009200000001, 38.927647 ], "pop" : 3572, "state" : "OH" } +{ "_id" : "45616", "city" : "BLUE CREEK", "loc" : [ -83.35268000000001, 38.756451 ], "pop" : 1436, "state" : "OH" } +{ "_id" : "45619", "city" : "CHESAPEAKE", "loc" : [ -82.45044799999999, 38.455089 ], "pop" : 8076, "state" : "OH" } +{ "_id" : "45620", "city" : "CHESHIRE", "loc" : [ -82.123537, 38.958678 ], "pop" : 1007, "state" : "OH" } +{ "_id" : "45622", "city" : "CREOLA", "loc" : [ -82.493835, 39.3497 ], "pop" : 535, "state" : "OH" } +{ "_id" : "45623", "city" : "CROWN CITY", "loc" : [ -82.265717, 38.613548 ], "pop" : 2677, "state" : "OH" } +{ "_id" : "45628", "city" : "FRANKFORT", "loc" : [ -83.203356, 39.391015 ], "pop" : 3985, "state" : "OH" } +{ "_id" : "45629", "city" : "FRANKLIN FURNACE", "loc" : [ -82.814477, 38.628216 ], "pop" : 3956, "state" : "OH" } +{ "_id" : "45631", "city" : "GALLIPOLIS", "loc" : [ -82.22902000000001, 38.814781 ], "pop" : 18163, "state" : "OH" } +{ "_id" : "45634", "city" : "HAMDEN", "loc" : [ -82.50997599999999, 39.168497 ], "pop" : 1554, "state" : "OH" } +{ "_id" : "45638", "city" : "IRONTON", "loc" : [ -82.665351, 38.529429 ], "pop" : 21093, "state" : "OH" } +{ "_id" : "45640", "city" : "JACKSON", "loc" : [ -82.647209, 39.042821 ], "pop" : 13373, "state" : "OH" } +{ "_id" : "45644", "city" : "KINGSTON", "loc" : [ -82.84880800000001, 39.441432 ], "pop" : 1347, "state" : "OH" } +{ "_id" : "45645", "city" : "KITTS HILL", "loc" : [ -82.548897, 38.564945 ], "pop" : 2837, "state" : "OH" } +{ "_id" : "45646", "city" : "LATHAM", "loc" : [ -83.328294, 39.080436 ], "pop" : 351, "state" : "OH" } +{ "_id" : "45647", "city" : "LONDONDERRY", "loc" : [ -82.783288, 39.272283 ], "pop" : 1481, "state" : "OH" } +{ "_id" : "45648", "city" : "LUCASVILLE", "loc" : [ -82.99400900000001, 38.893832 ], "pop" : 12974, "state" : "OH" } +{ "_id" : "45651", "city" : "ALLENSVILLE", "loc" : [ -82.49069900000001, 39.255326 ], "pop" : 5028, "state" : "OH" } +{ "_id" : "45652", "city" : "MC DERMOTT", "loc" : [ -83.06889200000001, 38.836203 ], "pop" : 2932, "state" : "OH" } +{ "_id" : "45653", "city" : "MINFORD", "loc" : [ -82.855538, 38.875087 ], "pop" : 3969, "state" : "OH" } +{ "_id" : "45654", "city" : "NEW PLYMOUTH", "loc" : [ -82.389172, 39.388421 ], "pop" : 804, "state" : "OH" } +{ "_id" : "45656", "city" : "OAK HILL", "loc" : [ -82.58834299999999, 38.891559 ], "pop" : 6036, "state" : "OH" } +{ "_id" : "45657", "city" : "OTWAY", "loc" : [ -83.222172, 38.85203 ], "pop" : 2287, "state" : "OH" } +{ "_id" : "45658", "city" : "PATRIOT", "loc" : [ -82.427491, 38.77702 ], "pop" : 2202, "state" : "OH" } +{ "_id" : "45659", "city" : "PEDRO", "loc" : [ -82.647722, 38.650323 ], "pop" : 3870, "state" : "OH" } +{ "_id" : "45660", "city" : "PEEBLES", "loc" : [ -83.36869799999999, 38.986885 ], "pop" : 7298, "state" : "OH" } +{ "_id" : "45661", "city" : "IDAHO", "loc" : [ -83.076742, 39.040196 ], "pop" : 4342, "state" : "OH" } +{ "_id" : "45662", "city" : "NEW BOSTON", "loc" : [ -82.94864, 38.757252 ], "pop" : 33275, "state" : "OH" } +{ "_id" : "45663", "city" : "PORTSMOUTH", "loc" : [ -83.047657, 38.749222 ], "pop" : 8485, "state" : "OH" } +{ "_id" : "45669", "city" : "PROCTORVILLE", "loc" : [ -82.352294, 38.463461 ], "pop" : 8976, "state" : "OH" } +{ "_id" : "45670", "city" : "RADCLIFF", "loc" : [ -82.354243, 39.105205 ], "pop" : 1413, "state" : "OH" } +{ "_id" : "45671", "city" : "RARDEN", "loc" : [ -83.237337, 38.943388 ], "pop" : 524, "state" : "OH" } +{ "_id" : "45672", "city" : "RAY", "loc" : [ -82.69080099999999, 39.207678 ], "pop" : 1472, "state" : "OH" } +{ "_id" : "45673", "city" : "RICHMOND DALE", "loc" : [ -82.814913, 39.203922 ], "pop" : 454, "state" : "OH" } +{ "_id" : "45675", "city" : "ROCK CAMP", "loc" : [ -82.563832, 38.522145 ], "pop" : 435, "state" : "OH" } +{ "_id" : "45678", "city" : "SCOTTOWN", "loc" : [ -82.39668500000001, 38.594034 ], "pop" : 1433, "state" : "OH" } +{ "_id" : "45679", "city" : "SEAMAN", "loc" : [ -83.593625, 38.962072 ], "pop" : 3482, "state" : "OH" } +{ "_id" : "45680", "city" : "SOUTH POINT", "loc" : [ -82.55288299999999, 38.433856 ], "pop" : 13272, "state" : "OH" } +{ "_id" : "45681", "city" : "SOUTH SALEM", "loc" : [ -83.271953, 39.302137 ], "pop" : 1001, "state" : "OH" } +{ "_id" : "45682", "city" : "SOUTH WEBSTER", "loc" : [ -82.720151, 38.819967 ], "pop" : 2094, "state" : "OH" } +{ "_id" : "45684", "city" : "STOUT", "loc" : [ -83.208984, 38.654588 ], "pop" : 1342, "state" : "OH" } +{ "_id" : "45685", "city" : "THURMAN", "loc" : [ -82.404996, 38.898786 ], "pop" : 2291, "state" : "OH" } +{ "_id" : "45686", "city" : "VINTON", "loc" : [ -82.35701400000001, 38.978338 ], "pop" : 1898, "state" : "OH" } +{ "_id" : "45688", "city" : "WATERLOO", "loc" : [ -82.517399, 38.718152 ], "pop" : 385, "state" : "OH" } +{ "_id" : "45690", "city" : "WAVERLY", "loc" : [ -83.004874, 39.126445 ], "pop" : 14422, "state" : "OH" } +{ "_id" : "45692", "city" : "WELLSTON", "loc" : [ -82.548474, 39.118897 ], "pop" : 9486, "state" : "OH" } +{ "_id" : "45693", "city" : "WEST UNION", "loc" : [ -83.533349, 38.801702 ], "pop" : 8656, "state" : "OH" } +{ "_id" : "45694", "city" : "WHEELERSBURG", "loc" : [ -82.82043400000001, 38.741793 ], "pop" : 10537, "state" : "OH" } +{ "_id" : "45696", "city" : "WILLOW WOOD", "loc" : [ -82.453, 38.593976 ], "pop" : 665, "state" : "OH" } +{ "_id" : "45697", "city" : "WINCHESTER", "loc" : [ -83.66613700000001, 38.935283 ], "pop" : 3146, "state" : "OH" } +{ "_id" : "45701", "city" : "ATHENS", "loc" : [ -82.102011, 39.317824 ], "pop" : 28523, "state" : "OH" } +{ "_id" : "45710", "city" : "ALBANY", "loc" : [ -82.217727, 39.209664 ], "pop" : 4090, "state" : "OH" } +{ "_id" : "45711", "city" : "AMESVILLE", "loc" : [ -81.96497599999999, 39.408641 ], "pop" : 1661, "state" : "OH" } +{ "_id" : "45714", "city" : "BELPRE", "loc" : [ -81.596795, 39.286772 ], "pop" : 9237, "state" : "OH" } +{ "_id" : "45715", "city" : "BEVERLY", "loc" : [ -81.63458799999999, 39.571435 ], "pop" : 2715, "state" : "OH" } +{ "_id" : "45723", "city" : "COOLVILLE", "loc" : [ -81.83286699999999, 39.214131 ], "pop" : 5023, "state" : "OH" } +{ "_id" : "45724", "city" : "CUTLER", "loc" : [ -81.76573, 39.404172 ], "pop" : 2624, "state" : "OH" } +{ "_id" : "45727", "city" : "DEXTER CITY", "loc" : [ -81.467151, 39.652585 ], "pop" : 277, "state" : "OH" } +{ "_id" : "45729", "city" : "FLEMING", "loc" : [ -81.65644399999999, 39.392806 ], "pop" : 1864, "state" : "OH" } +{ "_id" : "45732", "city" : "GLOUSTER", "loc" : [ -82.08712800000001, 39.497837 ], "pop" : 6226, "state" : "OH" } +{ "_id" : "45734", "city" : "RINARD MILLS", "loc" : [ -81.18915200000001, 39.659384 ], "pop" : 535, "state" : "OH" } +{ "_id" : "45735", "city" : "GUYSVILLE", "loc" : [ -81.926841, 39.294368 ], "pop" : 359, "state" : "OH" } +{ "_id" : "45741", "city" : "DEXTER", "loc" : [ -82.23118599999999, 39.056325 ], "pop" : 1613, "state" : "OH" } +{ "_id" : "45742", "city" : "LITTLE HOCKING", "loc" : [ -81.70710699999999, 39.280046 ], "pop" : 3346, "state" : "OH" } +{ "_id" : "45743", "city" : "LONG BOTTOM", "loc" : [ -81.88874800000001, 39.08015 ], "pop" : 1692, "state" : "OH" } +{ "_id" : "45744", "city" : "LOWELL", "loc" : [ -81.519679, 39.53847 ], "pop" : 1741, "state" : "OH" } +{ "_id" : "45745", "city" : "WARNER", "loc" : [ -81.35451999999999, 39.593895 ], "pop" : 1900, "state" : "OH" } +{ "_id" : "45746", "city" : "MACKSBURG", "loc" : [ -81.44708799999999, 39.620356 ], "pop" : 445, "state" : "OH" } +{ "_id" : "45750", "city" : "MARIETTA", "loc" : [ -81.464438, 39.428141 ], "pop" : 25904, "state" : "OH" } +{ "_id" : "45760", "city" : "MIDDLEPORT", "loc" : [ -82.060012, 38.999312 ], "pop" : 3433, "state" : "OH" } +{ "_id" : "45761", "city" : "MILLFIELD", "loc" : [ -82.111328, 39.407711 ], "pop" : 2656, "state" : "OH" } +{ "_id" : "45764", "city" : "NELSONVILLE", "loc" : [ -82.23088300000001, 39.455635 ], "pop" : 8924, "state" : "OH" } +{ "_id" : "45766", "city" : "NEW MARSHFIELD", "loc" : [ -82.22251300000001, 39.338295 ], "pop" : 2321, "state" : "OH" } +{ "_id" : "45767", "city" : "NEW MATAMORAS", "loc" : [ -81.093998, 39.528819 ], "pop" : 3032, "state" : "OH" } +{ "_id" : "45768", "city" : "NEWPORT", "loc" : [ -81.24017499999999, 39.39711 ], "pop" : 1645, "state" : "OH" } +{ "_id" : "45769", "city" : "POMEROY", "loc" : [ -82.033145, 39.060729 ], "pop" : 5509, "state" : "OH" } +{ "_id" : "45770", "city" : "PORTLAND", "loc" : [ -81.813548, 38.999919 ], "pop" : 905, "state" : "OH" } +{ "_id" : "45771", "city" : "RACINE", "loc" : [ -81.925759, 38.978551 ], "pop" : 3774, "state" : "OH" } +{ "_id" : "45772", "city" : "REEDSVILLE", "loc" : [ -81.792433, 39.149002 ], "pop" : 1305, "state" : "OH" } +{ "_id" : "45773", "city" : "RENO", "loc" : [ -81.38043, 39.378408 ], "pop" : 2673, "state" : "OH" } +{ "_id" : "45775", "city" : "RUTLAND", "loc" : [ -82.121914, 39.045653 ], "pop" : 1598, "state" : "OH" } +{ "_id" : "45776", "city" : "SHADE", "loc" : [ -82.021755, 39.212862 ], "pop" : 1890, "state" : "OH" } +{ "_id" : "45778", "city" : "STEWART", "loc" : [ -81.892884, 39.32133 ], "pop" : 975, "state" : "OH" } +{ "_id" : "45780", "city" : "THE PLAINS", "loc" : [ -82.134148, 39.366177 ], "pop" : 3567, "state" : "OH" } +{ "_id" : "45784", "city" : "VINCENT", "loc" : [ -81.67426500000001, 39.337446 ], "pop" : 1524, "state" : "OH" } +{ "_id" : "45786", "city" : "WATERFORD", "loc" : [ -81.655917, 39.515904 ], "pop" : 3932, "state" : "OH" } +{ "_id" : "45788", "city" : "WHIPPLE", "loc" : [ -81.36363900000001, 39.480975 ], "pop" : 1835, "state" : "OH" } +{ "_id" : "45789", "city" : "WINGETT RUN", "loc" : [ -81.28399899999999, 39.542813 ], "pop" : 365, "state" : "OH" } +{ "_id" : "45801", "city" : "LIMA", "loc" : [ -84.097296, 40.764066 ], "pop" : 27344, "state" : "OH" } +{ "_id" : "45804", "city" : "LIMA", "loc" : [ -84.089023, 40.727476 ], "pop" : 19289, "state" : "OH" } +{ "_id" : "45805", "city" : "LIMA", "loc" : [ -84.14591, 40.739911 ], "pop" : 23080, "state" : "OH" } +{ "_id" : "45806", "city" : "CRIDERSVILLE", "loc" : [ -84.144049, 40.675926 ], "pop" : 12250, "state" : "OH" } +{ "_id" : "45807", "city" : "ELIDA", "loc" : [ -84.163966, 40.791599 ], "pop" : 9531, "state" : "OH" } +{ "_id" : "45810", "city" : "ADA", "loc" : [ -83.81540200000001, 40.770931 ], "pop" : 7299, "state" : "OH" } +{ "_id" : "45812", "city" : "ALGER", "loc" : [ -83.825011, 40.705967 ], "pop" : 2394, "state" : "OH" } +{ "_id" : "45813", "city" : "ANTWERP", "loc" : [ -84.74479599999999, 41.188736 ], "pop" : 3039, "state" : "OH" } +{ "_id" : "45814", "city" : "ARLINGTON", "loc" : [ -83.668536, 40.876109 ], "pop" : 2603, "state" : "OH" } +{ "_id" : "45817", "city" : "BLUFFTON", "loc" : [ -83.891397, 40.878978 ], "pop" : 6055, "state" : "OH" } +{ "_id" : "45821", "city" : "CECIL", "loc" : [ -84.62964599999999, 41.217355 ], "pop" : 1527, "state" : "OH" } +{ "_id" : "45822", "city" : "CARTHAGENA", "loc" : [ -84.57006699999999, 40.546074 ], "pop" : 18799, "state" : "OH" } +{ "_id" : "45827", "city" : "CLOVERDALE", "loc" : [ -84.29382, 41.037934 ], "pop" : 1225, "state" : "OH" } +{ "_id" : "45828", "city" : "COLDWATER", "loc" : [ -84.651653, 40.484557 ], "pop" : 6677, "state" : "OH" } +{ "_id" : "45830", "city" : "COLUMBUS GROVE", "loc" : [ -84.07046699999999, 40.91372 ], "pop" : 6030, "state" : "OH" } +{ "_id" : "45831", "city" : "CONTINENTAL", "loc" : [ -84.235778, 41.114769 ], "pop" : 3518, "state" : "OH" } +{ "_id" : "45832", "city" : "CONVOY", "loc" : [ -84.723772, 40.926998 ], "pop" : 2134, "state" : "OH" } +{ "_id" : "45833", "city" : "DELPHOS", "loc" : [ -84.32467800000001, 40.833619 ], "pop" : 10062, "state" : "OH" } +{ "_id" : "45835", "city" : "DOLA", "loc" : [ -83.68937099999999, 40.787645 ], "pop" : 256, "state" : "OH" } +{ "_id" : "45836", "city" : "DUNKIRK", "loc" : [ -83.633912, 40.782375 ], "pop" : 1522, "state" : "OH" } +{ "_id" : "45840", "city" : "FINDLAY", "loc" : [ -83.645656, 41.044903 ], "pop" : 48109, "state" : "OH" } +{ "_id" : "45841", "city" : "JENERA", "loc" : [ -83.725628, 40.900388 ], "pop" : 335, "state" : "OH" } +{ "_id" : "45843", "city" : "PATTERSON", "loc" : [ -83.509771, 40.79955 ], "pop" : 3333, "state" : "OH" } +{ "_id" : "45844", "city" : "FORT JENNINGS", "loc" : [ -84.237381, 40.948393 ], "pop" : 5287, "state" : "OH" } +{ "_id" : "45845", "city" : "FORT LORAMIE", "loc" : [ -84.37413100000001, 40.330632 ], "pop" : 2639, "state" : "OH" } +{ "_id" : "45846", "city" : "FORT RECOVERY", "loc" : [ -84.76125, 40.401829 ], "pop" : 3555, "state" : "OH" } +{ "_id" : "45849", "city" : "GROVER HILL", "loc" : [ -84.49560099999999, 41.024497 ], "pop" : 1113, "state" : "OH" } +{ "_id" : "45850", "city" : "HARROD", "loc" : [ -83.94364899999999, 40.717657 ], "pop" : 4897, "state" : "OH" } +{ "_id" : "45851", "city" : "HAVILAND", "loc" : [ -84.6139, 41.032911 ], "pop" : 659, "state" : "OH" } +{ "_id" : "45856", "city" : "LEIPSIC", "loc" : [ -83.995723, 41.109197 ], "pop" : 4657, "state" : "OH" } +{ "_id" : "45858", "city" : "MC COMB", "loc" : [ -83.801423, 41.112498 ], "pop" : 2298, "state" : "OH" } +{ "_id" : "45860", "city" : "MARIA STEIN", "loc" : [ -84.50757900000001, 40.406225 ], "pop" : 2284, "state" : "OH" } +{ "_id" : "45862", "city" : "MENDON", "loc" : [ -84.51515000000001, 40.677737 ], "pop" : 1527, "state" : "OH" } +{ "_id" : "45863", "city" : "MIDDLE POINT", "loc" : [ -84.417495, 40.873147 ], "pop" : 2691, "state" : "OH" } +{ "_id" : "45865", "city" : "MINSTER", "loc" : [ -84.372895, 40.390983 ], "pop" : 4436, "state" : "OH" } +{ "_id" : "45867", "city" : "MOUNT BLANCHARD", "loc" : [ -83.555286, 40.892929 ], "pop" : 957, "state" : "OH" } +{ "_id" : "45868", "city" : "MOUNT CORY", "loc" : [ -83.809285, 40.943717 ], "pop" : 1553, "state" : "OH" } +{ "_id" : "45869", "city" : "NEW BREMEN", "loc" : [ -84.38209999999999, 40.438917 ], "pop" : 3400, "state" : "OH" } +{ "_id" : "45871", "city" : "NEW KNOXVILLE", "loc" : [ -84.311797, 40.50386 ], "pop" : 2003, "state" : "OH" } +{ "_id" : "45872", "city" : "NORTH BALTIMORE", "loc" : [ -83.680581, 41.186703 ], "pop" : 3820, "state" : "OH" } +{ "_id" : "45873", "city" : "OAKWOOD", "loc" : [ -84.396923, 41.090788 ], "pop" : 3129, "state" : "OH" } +{ "_id" : "45874", "city" : "OHIO CITY", "loc" : [ -84.673063, 40.785428 ], "pop" : 3117, "state" : "OH" } +{ "_id" : "45875", "city" : "GILBOA", "loc" : [ -84.047293, 41.029747 ], "pop" : 10177, "state" : "OH" } +{ "_id" : "45876", "city" : "OTTOVILLE", "loc" : [ -84.347392, 40.937218 ], "pop" : 1972, "state" : "OH" } +{ "_id" : "45877", "city" : "PANDORA", "loc" : [ -83.952073, 40.95087 ], "pop" : 2026, "state" : "OH" } +{ "_id" : "45879", "city" : "PAULDING", "loc" : [ -84.572227, 41.141016 ], "pop" : 6565, "state" : "OH" } +{ "_id" : "45880", "city" : "PAYNE", "loc" : [ -84.734127, 41.08069 ], "pop" : 2766, "state" : "OH" } +{ "_id" : "45881", "city" : "RAWSON", "loc" : [ -83.806951, 41.000135 ], "pop" : 955, "state" : "OH" } +{ "_id" : "45882", "city" : "ROCKFORD", "loc" : [ -84.664174, 40.677077 ], "pop" : 3038, "state" : "OH" } +{ "_id" : "45883", "city" : "SAINT HENRY", "loc" : [ -84.63333799999999, 40.409138 ], "pop" : 3615, "state" : "OH" } +{ "_id" : "45885", "city" : "SAINT MARYS", "loc" : [ -84.39439900000001, 40.543988 ], "pop" : 13066, "state" : "OH" } +{ "_id" : "45886", "city" : "SCOTT", "loc" : [ -84.58445500000001, 40.989238 ], "pop" : 397, "state" : "OH" } +{ "_id" : "45887", "city" : "SPENCERVILLE", "loc" : [ -84.34125, 40.703767 ], "pop" : 5745, "state" : "OH" } +{ "_id" : "45889", "city" : "VAN BUREN", "loc" : [ -83.647302, 41.132691 ], "pop" : 1232, "state" : "OH" } +{ "_id" : "45890", "city" : "VANLUE", "loc" : [ -83.497062, 40.958314 ], "pop" : 901, "state" : "OH" } +{ "_id" : "45891", "city" : "VAN WERT", "loc" : [ -84.59036399999999, 40.868927 ], "pop" : 16625, "state" : "OH" } +{ "_id" : "45894", "city" : "VENEDOCIA", "loc" : [ -84.46204, 40.768454 ], "pop" : 966, "state" : "OH" } +{ "_id" : "45895", "city" : "WAPAKONETA", "loc" : [ -84.177378, 40.568978 ], "pop" : 16364, "state" : "OH" } +{ "_id" : "45896", "city" : "WAYNESFIELD", "loc" : [ -83.95847500000001, 40.607185 ], "pop" : 1648, "state" : "OH" } +{ "_id" : "45898", "city" : "WILLSHIRE", "loc" : [ -84.77773000000001, 40.734618 ], "pop" : 1265, "state" : "OH" } +{ "_id" : "46001", "city" : "ALEXANDRIA", "loc" : [ -85.668148, 40.256081 ], "pop" : 11011, "state" : "IN" } +{ "_id" : "46011", "city" : "ANDERSON", "loc" : [ -85.72530500000001, 40.114577 ], "pop" : 17280, "state" : "IN" } +{ "_id" : "46012", "city" : "ANDERSON", "loc" : [ -85.65359100000001, 40.130947 ], "pop" : 20949, "state" : "IN" } +{ "_id" : "46013", "city" : "ANDERSON", "loc" : [ -85.68007299999999, 40.061865 ], "pop" : 17037, "state" : "IN" } +{ "_id" : "46016", "city" : "ANDERSON", "loc" : [ -85.684566, 40.098799 ], "pop" : 22838, "state" : "IN" } +{ "_id" : "46017", "city" : "CHESTERFIELD", "loc" : [ -85.601493, 40.096431 ], "pop" : 6038, "state" : "IN" } +{ "_id" : "46030", "city" : "ARCADIA", "loc" : [ -86.040882, 40.17758 ], "pop" : 4137, "state" : "IN" } +{ "_id" : "46031", "city" : "ATLANTA", "loc" : [ -85.93394499999999, 40.146964 ], "pop" : 2450, "state" : "IN" } +{ "_id" : "46032", "city" : "CARMEL", "loc" : [ -86.124545, 39.971232 ], "pop" : 40090, "state" : "IN" } +{ "_id" : "46034", "city" : "CICERO", "loc" : [ -86.024844, 40.126781 ], "pop" : 4309, "state" : "IN" } +{ "_id" : "46035", "city" : "COLFAX", "loc" : [ -86.659271, 40.195619 ], "pop" : 1343, "state" : "IN" } +{ "_id" : "46036", "city" : "ELWOOD", "loc" : [ -85.839055, 40.280278 ], "pop" : 13598, "state" : "IN" } +{ "_id" : "46038", "city" : "FISHERS", "loc" : [ -86.023048, 39.957486 ], "pop" : 11918, "state" : "IN" } +{ "_id" : "46039", "city" : "FOREST", "loc" : [ -86.320098, 40.375728 ], "pop" : 879, "state" : "IN" } +{ "_id" : "46040", "city" : "FORTVILLE", "loc" : [ -85.81855400000001, 39.922835 ], "pop" : 5887, "state" : "IN" } +{ "_id" : "46041", "city" : "HILLISBURG", "loc" : [ -86.511387, 40.288404 ], "pop" : 20713, "state" : "IN" } +{ "_id" : "46044", "city" : "FRANKTON", "loc" : [ -85.77911, 40.228548 ], "pop" : 3723, "state" : "IN" } +{ "_id" : "46048", "city" : "INGALLS", "loc" : [ -85.825596, 40.000237 ], "pop" : 763, "state" : "IN" } +{ "_id" : "46049", "city" : "KEMPTON", "loc" : [ -86.1887, 40.275946 ], "pop" : 1501, "state" : "IN" } +{ "_id" : "46050", "city" : "KIRKLIN", "loc" : [ -86.33237200000001, 40.203066 ], "pop" : 2038, "state" : "IN" } +{ "_id" : "46051", "city" : "LAPEL", "loc" : [ -85.84395000000001, 40.085429 ], "pop" : 3221, "state" : "IN" } +{ "_id" : "46052", "city" : "LEBANON", "loc" : [ -86.464074, 40.044894 ], "pop" : 17322, "state" : "IN" } +{ "_id" : "46055", "city" : "MC CORDSVILLE", "loc" : [ -85.909502, 39.901823 ], "pop" : 1450, "state" : "IN" } +{ "_id" : "46056", "city" : "MARKLEVILLE", "loc" : [ -85.622736, 39.994385 ], "pop" : 2957, "state" : "IN" } +{ "_id" : "46057", "city" : "MICHIGANTOWN", "loc" : [ -86.37530599999999, 40.310823 ], "pop" : 2207, "state" : "IN" } +{ "_id" : "46058", "city" : "MULBERRY", "loc" : [ -86.661261, 40.343299 ], "pop" : 1938, "state" : "IN" } +{ "_id" : "46060", "city" : "NOBLESVILLE", "loc" : [ -86.016294, 40.056292 ], "pop" : 26318, "state" : "IN" } +{ "_id" : "46064", "city" : "PENDLETON", "loc" : [ -85.794614, 39.979237 ], "pop" : 13824, "state" : "IN" } +{ "_id" : "46065", "city" : "ROSSVILLE", "loc" : [ -86.607966, 40.410928 ], "pop" : 2217, "state" : "IN" } +{ "_id" : "46068", "city" : "SHARPSVILLE", "loc" : [ -86.10864100000001, 40.373232 ], "pop" : 3570, "state" : "IN" } +{ "_id" : "46069", "city" : "SHERIDAN", "loc" : [ -86.23674099999999, 40.110407 ], "pop" : 7155, "state" : "IN" } +{ "_id" : "46070", "city" : "SUMMITVILLE", "loc" : [ -85.640261, 40.339833 ], "pop" : 1902, "state" : "IN" } +{ "_id" : "46071", "city" : "THORNTOWN", "loc" : [ -86.589822, 40.113335 ], "pop" : 4159, "state" : "IN" } +{ "_id" : "46072", "city" : "TIPTON", "loc" : [ -86.043291, 40.281725 ], "pop" : 8060, "state" : "IN" } +{ "_id" : "46074", "city" : "WESTFIELD", "loc" : [ -86.149907, 40.048868 ], "pop" : 6841, "state" : "IN" } +{ "_id" : "46075", "city" : "WHITESTOWN", "loc" : [ -86.35071600000001, 40.00002 ], "pop" : 1378, "state" : "IN" } +{ "_id" : "46076", "city" : "WINDFALL", "loc" : [ -85.947624, 40.366891 ], "pop" : 1535, "state" : "IN" } +{ "_id" : "46077", "city" : "ZIONSVILLE", "loc" : [ -86.276737, 39.956111 ], "pop" : 9759, "state" : "IN" } +{ "_id" : "46104", "city" : "ARLINGTON", "loc" : [ -85.582775, 39.648791 ], "pop" : 1194, "state" : "IN" } +{ "_id" : "46105", "city" : "BAINBRIDGE", "loc" : [ -86.771119, 39.740664 ], "pop" : 3147, "state" : "IN" } +{ "_id" : "46106", "city" : "BARGERSVILLE", "loc" : [ -86.179687, 39.499989 ], "pop" : 3310, "state" : "IN" } +{ "_id" : "46107", "city" : "BEECH GROVE", "loc" : [ -86.093299, 39.715434 ], "pop" : 13051, "state" : "IN" } +{ "_id" : "46110", "city" : "BOGGSTOWN", "loc" : [ -85.915965, 39.568331 ], "pop" : 958, "state" : "IN" } +{ "_id" : "46112", "city" : "BROWNSBURG", "loc" : [ -86.386933, 39.846605 ], "pop" : 18768, "state" : "IN" } +{ "_id" : "46113", "city" : "CAMBY", "loc" : [ -86.31181100000001, 39.640501 ], "pop" : 2681, "state" : "IN" } +{ "_id" : "46115", "city" : "CARTHAGE", "loc" : [ -85.575382, 39.746627 ], "pop" : 1910, "state" : "IN" } +{ "_id" : "46117", "city" : "CHARLOTTESVILLE", "loc" : [ -85.653599, 39.811981 ], "pop" : 1762, "state" : "IN" } +{ "_id" : "46118", "city" : "CLAYTON", "loc" : [ -86.495921, 39.668154 ], "pop" : 4566, "state" : "IN" } +{ "_id" : "46120", "city" : "CLOVERDALE", "loc" : [ -86.814021, 39.543442 ], "pop" : 7062, "state" : "IN" } +{ "_id" : "46121", "city" : "COATESVILLE", "loc" : [ -86.63144699999999, 39.693041 ], "pop" : 1992, "state" : "IN" } +{ "_id" : "46122", "city" : "DANVILLE", "loc" : [ -86.534254, 39.762815 ], "pop" : 8632, "state" : "IN" } +{ "_id" : "46124", "city" : "EDINBURGH", "loc" : [ -85.97071200000001, 39.362601 ], "pop" : 5115, "state" : "IN" } +{ "_id" : "46126", "city" : "FAIRLAND", "loc" : [ -85.891284, 39.629467 ], "pop" : 6682, "state" : "IN" } +{ "_id" : "46127", "city" : "FALMOUTH", "loc" : [ -85.352423, 39.743617 ], "pop" : 531, "state" : "IN" } +{ "_id" : "46128", "city" : "FILLMORE", "loc" : [ -86.746861, 39.647518 ], "pop" : 1711, "state" : "IN" } +{ "_id" : "46130", "city" : "FOUNTAINTOWN", "loc" : [ -85.78482700000001, 39.675131 ], "pop" : 1555, "state" : "IN" } +{ "_id" : "46131", "city" : "FRANKLIN", "loc" : [ -86.06075199999999, 39.485389 ], "pop" : 14959, "state" : "IN" } +{ "_id" : "46133", "city" : "GLENWOOD", "loc" : [ -85.273532, 39.612436 ], "pop" : 149, "state" : "IN" } +{ "_id" : "46135", "city" : "GREENCASTLE", "loc" : [ -86.86861399999999, 39.649487 ], "pop" : 13300, "state" : "IN" } +{ "_id" : "46140", "city" : "GREENFIELD", "loc" : [ -85.81410200000001, 39.790204 ], "pop" : 28919, "state" : "IN" } +{ "_id" : "46142", "city" : "GREENWOOD", "loc" : [ -86.148993, 39.622398 ], "pop" : 24735, "state" : "IN" } +{ "_id" : "46143", "city" : "GREENWOOD", "loc" : [ -86.13091900000001, 39.596037 ], "pop" : 24633, "state" : "IN" } +{ "_id" : "46147", "city" : "JAMESTOWN", "loc" : [ -86.623561, 39.95789 ], "pop" : 2355, "state" : "IN" } +{ "_id" : "46148", "city" : "KNIGHTSTOWN", "loc" : [ -85.52614800000001, 39.806029 ], "pop" : 3842, "state" : "IN" } +{ "_id" : "46149", "city" : "LIZTON", "loc" : [ -86.542857, 39.884326 ], "pop" : 1586, "state" : "IN" } +{ "_id" : "46150", "city" : "MANILLA", "loc" : [ -85.635369, 39.575711 ], "pop" : 1696, "state" : "IN" } +{ "_id" : "46151", "city" : "CENTERTON", "loc" : [ -86.42901000000001, 39.447646 ], "pop" : 31539, "state" : "IN" } +{ "_id" : "46156", "city" : "MILROY", "loc" : [ -85.50437100000001, 39.495474 ], "pop" : 2154, "state" : "IN" } +{ "_id" : "46157", "city" : "MONROVIA", "loc" : [ -86.48936999999999, 39.571397 ], "pop" : 2205, "state" : "IN" } +{ "_id" : "46158", "city" : "MOORESVILLE", "loc" : [ -86.36417299999999, 39.591469 ], "pop" : 18800, "state" : "IN" } +{ "_id" : "46160", "city" : "MORGANTOWN", "loc" : [ -86.280297, 39.362841 ], "pop" : 2193, "state" : "IN" } +{ "_id" : "46161", "city" : "MORRISTOWN", "loc" : [ -85.69341900000001, 39.667477 ], "pop" : 2215, "state" : "IN" } +{ "_id" : "46162", "city" : "NEEDHAM", "loc" : [ -86.00409399999999, 39.477935 ], "pop" : 2353, "state" : "IN" } +{ "_id" : "46163", "city" : "NEW PALESTINE", "loc" : [ -85.90515000000001, 39.723264 ], "pop" : 3794, "state" : "IN" } +{ "_id" : "46164", "city" : "NINEVEH", "loc" : [ -86.097641, 39.365597 ], "pop" : 3528, "state" : "IN" } +{ "_id" : "46165", "city" : "NORTH SALEM", "loc" : [ -86.63883300000001, 39.867051 ], "pop" : 1541, "state" : "IN" } +{ "_id" : "46166", "city" : "PARAGON", "loc" : [ -86.577867, 39.404203 ], "pop" : 1244, "state" : "IN" } +{ "_id" : "46167", "city" : "PITTSBORO", "loc" : [ -86.46454799999999, 39.861529 ], "pop" : 3466, "state" : "IN" } +{ "_id" : "46168", "city" : "AVON", "loc" : [ -86.395061, 39.716036 ], "pop" : 29182, "state" : "IN" } +{ "_id" : "46171", "city" : "REELSVILLE", "loc" : [ -86.94998, 39.546416 ], "pop" : 2027, "state" : "IN" } +{ "_id" : "46172", "city" : "ROACHDALE", "loc" : [ -86.79022500000001, 39.832545 ], "pop" : 2293, "state" : "IN" } +{ "_id" : "46173", "city" : "RUSHVILLE", "loc" : [ -85.43212, 39.619232 ], "pop" : 11721, "state" : "IN" } +{ "_id" : "46175", "city" : "RUSSELLVILLE", "loc" : [ -86.96697500000001, 39.836598 ], "pop" : 775, "state" : "IN" } +{ "_id" : "46176", "city" : "SHELBYVILLE", "loc" : [ -85.787515, 39.50434 ], "pop" : 24691, "state" : "IN" } +{ "_id" : "46180", "city" : "STILESVILLE", "loc" : [ -86.61819, 39.639113 ], "pop" : 1135, "state" : "IN" } +{ "_id" : "46181", "city" : "TRAFALGAR", "loc" : [ -86.18379299999999, 39.369585 ], "pop" : 3538, "state" : "IN" } +{ "_id" : "46182", "city" : "WALDRON", "loc" : [ -85.664407, 39.468849 ], "pop" : 1878, "state" : "IN" } +{ "_id" : "46184", "city" : "NEW WHITELAND", "loc" : [ -86.093476, 39.555313 ], "pop" : 7226, "state" : "IN" } +{ "_id" : "46186", "city" : "WILKINSON", "loc" : [ -85.61436, 39.895668 ], "pop" : 2567, "state" : "IN" } +{ "_id" : "46201", "city" : "INDIANAPOLIS", "loc" : [ -86.109348, 39.775006 ], "pop" : 42096, "state" : "IN" } +{ "_id" : "46202", "city" : "INDIANAPOLIS", "loc" : [ -86.159502, 39.785063 ], "pop" : 15672, "state" : "IN" } +{ "_id" : "46203", "city" : "INDIANAPOLIS", "loc" : [ -86.117859, 39.743025 ], "pop" : 42566, "state" : "IN" } +{ "_id" : "46204", "city" : "INDIANAPOLIS", "loc" : [ -86.153491, 39.771986 ], "pop" : 4327, "state" : "IN" } +{ "_id" : "46205", "city" : "INDIANAPOLIS", "loc" : [ -86.138582, 39.826761 ], "pop" : 35328, "state" : "IN" } +{ "_id" : "46208", "city" : "INDIANAPOLIS", "loc" : [ -86.179444, 39.829905 ], "pop" : 39610, "state" : "IN" } +{ "_id" : "46214", "city" : "EAGLE CREEK", "loc" : [ -86.289952, 39.792678 ], "pop" : 16644, "state" : "IN" } +{ "_id" : "46216", "city" : "FORT BENJAMIN HA", "loc" : [ -86.016688, 39.857731 ], "pop" : 1566, "state" : "IN" } +{ "_id" : "46217", "city" : "SOUTHPORT", "loc" : [ -86.175394, 39.664141 ], "pop" : 16644, "state" : "IN" } +{ "_id" : "46218", "city" : "INDIANAPOLIS", "loc" : [ -86.10142500000001, 39.80817 ], "pop" : 39965, "state" : "IN" } +{ "_id" : "46219", "city" : "INDIANAPOLIS", "loc" : [ -86.049533, 39.782092 ], "pop" : 38198, "state" : "IN" } +{ "_id" : "46220", "city" : "INDIANAPOLIS", "loc" : [ -86.11815, 39.864685 ], "pop" : 35482, "state" : "IN" } +{ "_id" : "46221", "city" : "INDIANAPOLIS", "loc" : [ -86.19243, 39.750885 ], "pop" : 7920, "state" : "IN" } +{ "_id" : "46222", "city" : "INDIANAPOLIS", "loc" : [ -86.21357399999999, 39.788971 ], "pop" : 39240, "state" : "IN" } +{ "_id" : "46224", "city" : "SPEEDWAY", "loc" : [ -86.25730799999999, 39.798674 ], "pop" : 32130, "state" : "IN" } +{ "_id" : "46225", "city" : "INDIANAPOLIS", "loc" : [ -86.156944, 39.740599 ], "pop" : 8464, "state" : "IN" } +{ "_id" : "46226", "city" : "LAWRENCE", "loc" : [ -86.048945, 39.836969 ], "pop" : 47144, "state" : "IN" } +{ "_id" : "46227", "city" : "SOUTHPORT", "loc" : [ -86.129817, 39.675 ], "pop" : 52257, "state" : "IN" } +{ "_id" : "46229", "city" : "CUMBERLAND", "loc" : [ -85.98382599999999, 39.792219 ], "pop" : 19914, "state" : "IN" } +{ "_id" : "46231", "city" : "BRIDGEPORT", "loc" : [ -86.31828899999999, 39.740637 ], "pop" : 5531, "state" : "IN" } +{ "_id" : "46234", "city" : "CLERMONT", "loc" : [ -86.324117, 39.788438 ], "pop" : 13865, "state" : "IN" } +{ "_id" : "46236", "city" : "OAKLANDON", "loc" : [ -85.98505900000001, 39.849588 ], "pop" : 31475, "state" : "IN" } +{ "_id" : "46237", "city" : "SOUTHPORT", "loc" : [ -86.07890999999999, 39.686777 ], "pop" : 18919, "state" : "IN" } +{ "_id" : "46239", "city" : "WANAMAKER", "loc" : [ -86.00820899999999, 39.721826 ], "pop" : 8611, "state" : "IN" } +{ "_id" : "46240", "city" : "NORA", "loc" : [ -86.129548, 39.9057 ], "pop" : 17553, "state" : "IN" } +{ "_id" : "46241", "city" : "PARK FLETCHER", "loc" : [ -86.250856, 39.723814 ], "pop" : 44731, "state" : "IN" } +{ "_id" : "46250", "city" : "CASTLETON", "loc" : [ -86.069112, 39.9069 ], "pop" : 17196, "state" : "IN" } +{ "_id" : "46254", "city" : "EAGLE CREEK", "loc" : [ -86.2638, 39.841379 ], "pop" : 23015, "state" : "IN" } +{ "_id" : "46256", "city" : "CASTLETON", "loc" : [ -86.023877, 39.90114 ], "pop" : 20589, "state" : "IN" } +{ "_id" : "46259", "city" : "ACTON", "loc" : [ -85.992603, 39.660901 ], "pop" : 3642, "state" : "IN" } +{ "_id" : "46260", "city" : "NORA", "loc" : [ -86.184809, 39.897488 ], "pop" : 29718, "state" : "IN" } +{ "_id" : "46268", "city" : "NEW AUGUSTA", "loc" : [ -86.222104, 39.900296 ], "pop" : 14109, "state" : "IN" } +{ "_id" : "46278", "city" : "NEW AUGUSTA", "loc" : [ -86.291455, 39.883858 ], "pop" : 4727, "state" : "IN" } +{ "_id" : "46280", "city" : "NORA", "loc" : [ -86.13894000000001, 39.938417 ], "pop" : 5281, "state" : "IN" } +{ "_id" : "46290", "city" : "NORA", "loc" : [ -86.167118, 39.93077 ], "pop" : 75, "state" : "IN" } +{ "_id" : "46303", "city" : "EAST CEDAR LAKE", "loc" : [ -87.444509, 41.377338 ], "pop" : 11557, "state" : "IN" } +{ "_id" : "46304", "city" : "PORTER", "loc" : [ -87.050196, 41.603949 ], "pop" : 19024, "state" : "IN" } +{ "_id" : "46307", "city" : "CROWN POINT", "loc" : [ -87.355586, 41.423571 ], "pop" : 37816, "state" : "IN" } +{ "_id" : "46310", "city" : "DEMOTTE", "loc" : [ -87.249129, 41.171319 ], "pop" : 10188, "state" : "IN" } +{ "_id" : "46311", "city" : "DYER", "loc" : [ -87.510803, 41.491976 ], "pop" : 13426, "state" : "IN" } +{ "_id" : "46312", "city" : "EAST CHICAGO", "loc" : [ -87.462734, 41.634893 ], "pop" : 33775, "state" : "IN" } +{ "_id" : "46319", "city" : "GRIFFITH", "loc" : [ -87.422837, 41.53352 ], "pop" : 19758, "state" : "IN" } +{ "_id" : "46320", "city" : "HAMMOND", "loc" : [ -87.50791099999999, 41.609929 ], "pop" : 16636, "state" : "IN" } +{ "_id" : "46321", "city" : "MUNSTER", "loc" : [ -87.50110100000001, 41.554438 ], "pop" : 19906, "state" : "IN" } +{ "_id" : "46322", "city" : "HIGHLAND", "loc" : [ -87.45691100000001, 41.55005 ], "pop" : 24029, "state" : "IN" } +{ "_id" : "46323", "city" : "HAMMOND", "loc" : [ -87.45319600000001, 41.587755 ], "pop" : 23456, "state" : "IN" } +{ "_id" : "46324", "city" : "HAMMOND", "loc" : [ -87.503393, 41.583954 ], "pop" : 23585, "state" : "IN" } +{ "_id" : "46327", "city" : "HAMMOND", "loc" : [ -87.51134999999999, 41.632695 ], "pop" : 12384, "state" : "IN" } +{ "_id" : "46340", "city" : "HANNA", "loc" : [ -86.77592199999999, 41.408767 ], "pop" : 941, "state" : "IN" } +{ "_id" : "46341", "city" : "HEBRON", "loc" : [ -87.20879100000001, 41.315537 ], "pop" : 6230, "state" : "IN" } +{ "_id" : "46342", "city" : "HOBART", "loc" : [ -87.252499, 41.526281 ], "pop" : 32127, "state" : "IN" } +{ "_id" : "46347", "city" : "KOUTS", "loc" : [ -87.02404300000001, 41.309085 ], "pop" : 3244, "state" : "IN" } +{ "_id" : "46348", "city" : "LA CROSSE", "loc" : [ -86.868216, 41.315709 ], "pop" : 1352, "state" : "IN" } +{ "_id" : "46349", "city" : "LAKE VILLAGE", "loc" : [ -87.44542199999999, 41.138741 ], "pop" : 2208, "state" : "IN" } +{ "_id" : "46350", "city" : "LA PORTE", "loc" : [ -86.70765400000001, 41.599438 ], "pop" : 36301, "state" : "IN" } +{ "_id" : "46356", "city" : "LOWELL", "loc" : [ -87.419072, 41.284531 ], "pop" : 12579, "state" : "IN" } +{ "_id" : "46360", "city" : "MICHIGAN CITY", "loc" : [ -86.869899, 41.698031 ], "pop" : 55392, "state" : "IN" } +{ "_id" : "46365", "city" : "MILL CREEK", "loc" : [ -86.547247, 41.556102 ], "pop" : 2091, "state" : "IN" } +{ "_id" : "46366", "city" : "NORTH JUDSON", "loc" : [ -86.696601, 41.224372 ], "pop" : 8426, "state" : "IN" } +{ "_id" : "46368", "city" : "PORTAGE", "loc" : [ -87.17568900000001, 41.567201 ], "pop" : 40860, "state" : "IN" } +{ "_id" : "46371", "city" : "ROLLING PRAIRIE", "loc" : [ -86.584092, 41.72286 ], "pop" : 3694, "state" : "IN" } +{ "_id" : "46373", "city" : "SAINT JOHN", "loc" : [ -87.476376, 41.44949 ], "pop" : 4786, "state" : "IN" } +{ "_id" : "46374", "city" : "SAN PIERRE", "loc" : [ -86.87253200000001, 41.21108 ], "pop" : 1499, "state" : "IN" } +{ "_id" : "46375", "city" : "SCHERERVILLE", "loc" : [ -87.460532, 41.492233 ], "pop" : 14152, "state" : "IN" } +{ "_id" : "46382", "city" : "UNION MILLS", "loc" : [ -86.83551199999999, 41.460236 ], "pop" : 3155, "state" : "IN" } +{ "_id" : "46383", "city" : "VALPARAISO", "loc" : [ -87.075866, 41.475661 ], "pop" : 53439, "state" : "IN" } +{ "_id" : "46390", "city" : "WANATAH", "loc" : [ -86.876439, 41.384477 ], "pop" : 711, "state" : "IN" } +{ "_id" : "46391", "city" : "WESTVILLE", "loc" : [ -86.90131700000001, 41.536516 ], "pop" : 6212, "state" : "IN" } +{ "_id" : "46392", "city" : "WHEATFIELD", "loc" : [ -87.06987599999999, 41.177948 ], "pop" : 5415, "state" : "IN" } +{ "_id" : "46394", "city" : "WHITING", "loc" : [ -87.50053699999999, 41.678656 ], "pop" : 13157, "state" : "IN" } +{ "_id" : "46402", "city" : "GARY", "loc" : [ -87.338548, 41.599711 ], "pop" : 10873, "state" : "IN" } +{ "_id" : "46403", "city" : "GARY", "loc" : [ -87.258984, 41.603612 ], "pop" : 16489, "state" : "IN" } +{ "_id" : "46404", "city" : "GARY", "loc" : [ -87.373153, 41.589937 ], "pop" : 23031, "state" : "IN" } +{ "_id" : "46405", "city" : "LAKE STATION", "loc" : [ -87.262209, 41.568629 ], "pop" : 12437, "state" : "IN" } +{ "_id" : "46406", "city" : "GARY", "loc" : [ -87.40621, 41.587806 ], "pop" : 15132, "state" : "IN" } +{ "_id" : "46407", "city" : "GARY", "loc" : [ -87.334958, 41.580429 ], "pop" : 21360, "state" : "IN" } +{ "_id" : "46408", "city" : "GARY", "loc" : [ -87.35883, 41.542178 ], "pop" : 21586, "state" : "IN" } +{ "_id" : "46409", "city" : "GARY", "loc" : [ -87.32712600000001, 41.541247 ], "pop" : 14119, "state" : "IN" } +{ "_id" : "46410", "city" : "MERRILLVILLE", "loc" : [ -87.350932, 41.4957 ], "pop" : 30765, "state" : "IN" } +{ "_id" : "46501", "city" : "ARGOS", "loc" : [ -86.250573, 41.230827 ], "pop" : 3630, "state" : "IN" } +{ "_id" : "46504", "city" : "BOURBON", "loc" : [ -86.11743800000001, 41.309785 ], "pop" : 2976, "state" : "IN" } +{ "_id" : "46506", "city" : "BREMEN", "loc" : [ -86.19323, 41.446701 ], "pop" : 13832, "state" : "IN" } +{ "_id" : "46507", "city" : "BRISTOL", "loc" : [ -85.82619200000001, 41.716885 ], "pop" : 7086, "state" : "IN" } +{ "_id" : "46510", "city" : "CLAYPOOL", "loc" : [ -85.868571, 41.116497 ], "pop" : 4891, "state" : "IN" } +{ "_id" : "46511", "city" : "CULVER MILITARY", "loc" : [ -86.412888, 41.22307 ], "pop" : 3289, "state" : "IN" } +{ "_id" : "46514", "city" : "ELKHART", "loc" : [ -85.972949, 41.710083 ], "pop" : 33830, "state" : "IN" } +{ "_id" : "46516", "city" : "ELKHART", "loc" : [ -85.962137, 41.676333 ], "pop" : 29971, "state" : "IN" } +{ "_id" : "46517", "city" : "ELKHART", "loc" : [ -85.972849, 41.646922 ], "pop" : 17983, "state" : "IN" } +{ "_id" : "46524", "city" : "ETNA GREEN", "loc" : [ -86.034995, 41.291789 ], "pop" : 1290, "state" : "IN" } +{ "_id" : "46526", "city" : "FORAKER", "loc" : [ -85.837988, 41.584484 ], "pop" : 41317, "state" : "IN" } +{ "_id" : "46530", "city" : "GRANGER", "loc" : [ -86.141104, 41.742704 ], "pop" : 17591, "state" : "IN" } +{ "_id" : "46531", "city" : "GROVERTOWN", "loc" : [ -86.52890499999999, 41.321969 ], "pop" : 1077, "state" : "IN" } +{ "_id" : "46532", "city" : "HAMLET", "loc" : [ -86.53213, 41.393338 ], "pop" : 4314, "state" : "IN" } +{ "_id" : "46534", "city" : "OBER", "loc" : [ -86.610715, 41.29006 ], "pop" : 7437, "state" : "IN" } +{ "_id" : "46536", "city" : "LAKEVILLE", "loc" : [ -86.27144, 41.525328 ], "pop" : 3355, "state" : "IN" } +{ "_id" : "46538", "city" : "LEESBURG", "loc" : [ -85.816028, 41.326592 ], "pop" : 1823, "state" : "IN" } +{ "_id" : "46539", "city" : "MENTONE", "loc" : [ -86.029918, 41.161494 ], "pop" : 2163, "state" : "IN" } +{ "_id" : "46540", "city" : "MIDDLEBURY", "loc" : [ -85.711443, 41.675415 ], "pop" : 7737, "state" : "IN" } +{ "_id" : "46542", "city" : "MILFORD", "loc" : [ -85.85543800000001, 41.401141 ], "pop" : 4861, "state" : "IN" } +{ "_id" : "46543", "city" : "MILLERSBURG", "loc" : [ -85.707249, 41.533513 ], "pop" : 2078, "state" : "IN" } +{ "_id" : "46544", "city" : "MISHAWAKA", "loc" : [ -86.162301, 41.650659 ], "pop" : 29911, "state" : "IN" } +{ "_id" : "46545", "city" : "MISHAWAKA", "loc" : [ -86.168232, 41.683498 ], "pop" : 23031, "state" : "IN" } +{ "_id" : "46550", "city" : "NAPPANEE", "loc" : [ -85.994534, 41.449297 ], "pop" : 10640, "state" : "IN" } +{ "_id" : "46552", "city" : "NEW CARLISLE", "loc" : [ -86.48382700000001, 41.705115 ], "pop" : 3574, "state" : "IN" } +{ "_id" : "46553", "city" : "NEW PARIS", "loc" : [ -85.83383000000001, 41.491652 ], "pop" : 2723, "state" : "IN" } +{ "_id" : "46554", "city" : "NORTH LIBERTY", "loc" : [ -86.41332800000001, 41.542507 ], "pop" : 4056, "state" : "IN" } +{ "_id" : "46555", "city" : "NORTH WEBSTER", "loc" : [ -85.70787199999999, 41.308423 ], "pop" : 6197, "state" : "IN" } +{ "_id" : "46556", "city" : "SAINT MARYS", "loc" : [ -86.242893, 41.70057 ], "pop" : 6903, "state" : "IN" } +{ "_id" : "46561", "city" : "OSCEOLA", "loc" : [ -86.078883, 41.674074 ], "pop" : 8029, "state" : "IN" } +{ "_id" : "46562", "city" : "PIERCETON", "loc" : [ -85.706119, 41.212406 ], "pop" : 3128, "state" : "IN" } +{ "_id" : "46563", "city" : "INWOOD", "loc" : [ -86.32408700000001, 41.333897 ], "pop" : 16087, "state" : "IN" } +{ "_id" : "46565", "city" : "SHIPSHEWANA", "loc" : [ -85.593198, 41.663257 ], "pop" : 3850, "state" : "IN" } +{ "_id" : "46567", "city" : "SYRACUSE", "loc" : [ -85.718352, 41.40649 ], "pop" : 7695, "state" : "IN" } +{ "_id" : "46570", "city" : "TIPPECANOE", "loc" : [ -86.10950800000001, 41.216609 ], "pop" : 1188, "state" : "IN" } +{ "_id" : "46571", "city" : "TOPEKA", "loc" : [ -85.531668, 41.563441 ], "pop" : 5749, "state" : "IN" } +{ "_id" : "46573", "city" : "WAKARUSA", "loc" : [ -86.02052399999999, 41.540073 ], "pop" : 2776, "state" : "IN" } +{ "_id" : "46574", "city" : "WALKERTON", "loc" : [ -86.451018, 41.445748 ], "pop" : 5279, "state" : "IN" } +{ "_id" : "46580", "city" : "WARSAW", "loc" : [ -85.85078, 41.24377 ], "pop" : 22851, "state" : "IN" } +{ "_id" : "46590", "city" : "WINONA LAKE", "loc" : [ -85.83053099999999, 41.211007 ], "pop" : 7559, "state" : "IN" } +{ "_id" : "46601", "city" : "SOUTH BEND", "loc" : [ -86.253489, 41.672699 ], "pop" : 5479, "state" : "IN" } +{ "_id" : "46613", "city" : "SOUTH BEND", "loc" : [ -86.247865, 41.654636 ], "pop" : 11827, "state" : "IN" } +{ "_id" : "46614", "city" : "SOUTH BEND", "loc" : [ -86.243278, 41.625461 ], "pop" : 27521, "state" : "IN" } +{ "_id" : "46615", "city" : "SOUTH BEND", "loc" : [ -86.210375, 41.67413 ], "pop" : 15580, "state" : "IN" } +{ "_id" : "46616", "city" : "SOUTH BEND", "loc" : [ -86.26473900000001, 41.691894 ], "pop" : 8132, "state" : "IN" } +{ "_id" : "46617", "city" : "SOUTH BEND", "loc" : [ -86.2351, 41.684966 ], "pop" : 11057, "state" : "IN" } +{ "_id" : "46619", "city" : "SOUTH BEND", "loc" : [ -86.31526599999999, 41.667397 ], "pop" : 19880, "state" : "IN" } +{ "_id" : "46628", "city" : "SOUTH BEND", "loc" : [ -86.294929, 41.701525 ], "pop" : 24914, "state" : "IN" } +{ "_id" : "46635", "city" : "SOUTH BEND", "loc" : [ -86.20780600000001, 41.716768 ], "pop" : 6989, "state" : "IN" } +{ "_id" : "46637", "city" : "SOUTH BEND", "loc" : [ -86.240694, 41.729936 ], "pop" : 16351, "state" : "IN" } +{ "_id" : "46701", "city" : "ALBION", "loc" : [ -85.41418299999999, 41.348217 ], "pop" : 6907, "state" : "IN" } +{ "_id" : "46702", "city" : "ANDREWS", "loc" : [ -85.60672599999999, 40.861792 ], "pop" : 2138, "state" : "IN" } +{ "_id" : "46703", "city" : "ANGOLA", "loc" : [ -85.019803, 41.656321 ], "pop" : 15134, "state" : "IN" } +{ "_id" : "46705", "city" : "ASHLEY", "loc" : [ -85.05038500000001, 41.534651 ], "pop" : 1272, "state" : "IN" } +{ "_id" : "46706", "city" : "AUBURN", "loc" : [ -85.046848, 41.359001 ], "pop" : 12503, "state" : "IN" } +{ "_id" : "46710", "city" : "AVILLA", "loc" : [ -85.241418, 41.36894 ], "pop" : 2154, "state" : "IN" } +{ "_id" : "46711", "city" : "LINN GROVE", "loc" : [ -84.934271, 40.661517 ], "pop" : 6577, "state" : "IN" } +{ "_id" : "46714", "city" : "BLUFFTON", "loc" : [ -85.162199, 40.736837 ], "pop" : 14669, "state" : "IN" } +{ "_id" : "46721", "city" : "BUTLER", "loc" : [ -84.878716, 41.42873 ], "pop" : 5982, "state" : "IN" } +{ "_id" : "46723", "city" : "CHURUBUSCO", "loc" : [ -85.324364, 41.228988 ], "pop" : 6796, "state" : "IN" } +{ "_id" : "46725", "city" : "COLUMBIA CITY", "loc" : [ -85.473736, 41.161855 ], "pop" : 17282, "state" : "IN" } +{ "_id" : "46730", "city" : "CORUNNA", "loc" : [ -85.137028, 41.450377 ], "pop" : 2373, "state" : "IN" } +{ "_id" : "46731", "city" : "CRAIGVILLE", "loc" : [ -85.090379, 40.793034 ], "pop" : 323, "state" : "IN" } +{ "_id" : "46732", "city" : "CROMWELL", "loc" : [ -85.603133, 41.37514 ], "pop" : 2872, "state" : "IN" } +{ "_id" : "46733", "city" : "DECATUR", "loc" : [ -84.931432, 40.827333 ], "pop" : 19069, "state" : "IN" } +{ "_id" : "46737", "city" : "FREMONT", "loc" : [ -84.94524699999999, 41.733125 ], "pop" : 4248, "state" : "IN" } +{ "_id" : "46738", "city" : "GARRETT", "loc" : [ -85.13467, 41.348216 ], "pop" : 6459, "state" : "IN" } +{ "_id" : "46740", "city" : "GENEVA", "loc" : [ -84.962074, 40.607129 ], "pop" : 3676, "state" : "IN" } +{ "_id" : "46741", "city" : "GRABILL", "loc" : [ -84.94059300000001, 41.210753 ], "pop" : 4267, "state" : "IN" } +{ "_id" : "46742", "city" : "HAMILTON", "loc" : [ -84.89509200000001, 41.5566 ], "pop" : 2344, "state" : "IN" } +{ "_id" : "46743", "city" : "HARLAN", "loc" : [ -84.838635, 41.228468 ], "pop" : 653, "state" : "IN" } +{ "_id" : "46745", "city" : "HOAGLAND", "loc" : [ -85.00751, 40.952375 ], "pop" : 1483, "state" : "IN" } +{ "_id" : "46746", "city" : "HOWE", "loc" : [ -85.472746, 41.728594 ], "pop" : 6040, "state" : "IN" } +{ "_id" : "46747", "city" : "HELMER", "loc" : [ -85.141953, 41.559887 ], "pop" : 2012, "state" : "IN" } +{ "_id" : "46748", "city" : "HUNTERTOWN", "loc" : [ -85.16772400000001, 41.239113 ], "pop" : 2265, "state" : "IN" } +{ "_id" : "46750", "city" : "HUNTINGTON", "loc" : [ -85.505438, 40.881128 ], "pop" : 23716, "state" : "IN" } +{ "_id" : "46755", "city" : "KENDALLVILLE", "loc" : [ -85.260874, 41.448206 ], "pop" : 11784, "state" : "IN" } +{ "_id" : "46759", "city" : "KEYSTONE", "loc" : [ -85.276748, 40.589667 ], "pop" : 518, "state" : "IN" } +{ "_id" : "46760", "city" : "KIMMELL", "loc" : [ -85.51873399999999, 41.363103 ], "pop" : 2095, "state" : "IN" } +{ "_id" : "46761", "city" : "LAGRANGE", "loc" : [ -85.40401, 41.652008 ], "pop" : 8410, "state" : "IN" } +{ "_id" : "46763", "city" : "LAOTTO", "loc" : [ -85.19008599999999, 41.299119 ], "pop" : 3483, "state" : "IN" } +{ "_id" : "46764", "city" : "LARWILL", "loc" : [ -85.61386899999999, 41.164623 ], "pop" : 1496, "state" : "IN" } +{ "_id" : "46765", "city" : "LEO", "loc" : [ -85.03009299999999, 41.224864 ], "pop" : 3047, "state" : "IN" } +{ "_id" : "46766", "city" : "LIBERTY CENTER", "loc" : [ -85.277411, 40.700159 ], "pop" : 1027, "state" : "IN" } +{ "_id" : "46767", "city" : "LIGONIER", "loc" : [ -85.59272, 41.466175 ], "pop" : 5212, "state" : "IN" } +{ "_id" : "46770", "city" : "MARKLE", "loc" : [ -85.373994, 40.837972 ], "pop" : 3084, "state" : "IN" } +{ "_id" : "46772", "city" : "MONROE", "loc" : [ -84.844128, 40.700523 ], "pop" : 873, "state" : "IN" } +{ "_id" : "46773", "city" : "MONROEVILLE", "loc" : [ -84.89373000000001, 40.987044 ], "pop" : 4093, "state" : "IN" } +{ "_id" : "46774", "city" : "NEW HAVEN", "loc" : [ -85.01173, 41.069856 ], "pop" : 12742, "state" : "IN" } +{ "_id" : "46776", "city" : "ORLAND", "loc" : [ -85.146512, 41.730884 ], "pop" : 1326, "state" : "IN" } +{ "_id" : "46777", "city" : "OSSIAN", "loc" : [ -85.15704100000001, 40.880611 ], "pop" : 5394, "state" : "IN" } +{ "_id" : "46779", "city" : "PLEASANT LAKE", "loc" : [ -85.021276, 41.584255 ], "pop" : 1625, "state" : "IN" } +{ "_id" : "46781", "city" : "PONETO", "loc" : [ -85.25618799999999, 40.641871 ], "pop" : 709, "state" : "IN" } +{ "_id" : "46783", "city" : "ROANOKE", "loc" : [ -85.35263, 40.960003 ], "pop" : 4973, "state" : "IN" } +{ "_id" : "46784", "city" : "ROME CITY", "loc" : [ -85.374303, 41.484907 ], "pop" : 3040, "state" : "IN" } +{ "_id" : "46785", "city" : "SAINT JOE", "loc" : [ -84.90425, 41.324049 ], "pop" : 1161, "state" : "IN" } +{ "_id" : "46787", "city" : "SOUTH WHITLEY", "loc" : [ -85.61425199999999, 41.072635 ], "pop" : 3791, "state" : "IN" } +{ "_id" : "46788", "city" : "SPENCERVILLE", "loc" : [ -84.93975, 41.269555 ], "pop" : 1905, "state" : "IN" } +{ "_id" : "46791", "city" : "UNIONDALE", "loc" : [ -85.273206, 40.871658 ], "pop" : 2419, "state" : "IN" } +{ "_id" : "46792", "city" : "WARREN", "loc" : [ -85.41833699999999, 40.688646 ], "pop" : 2404, "state" : "IN" } +{ "_id" : "46793", "city" : "WATERLOO", "loc" : [ -85.022103, 41.440216 ], "pop" : 3802, "state" : "IN" } +{ "_id" : "46794", "city" : "WAWAKA", "loc" : [ -85.48042700000001, 41.483251 ], "pop" : 1545, "state" : "IN" } +{ "_id" : "46795", "city" : "WOLCOTTVILLE", "loc" : [ -85.314986, 41.556972 ], "pop" : 5921, "state" : "IN" } +{ "_id" : "46797", "city" : "WOODBURN", "loc" : [ -84.892871, 41.136102 ], "pop" : 5044, "state" : "IN" } +{ "_id" : "46798", "city" : "YODER", "loc" : [ -85.19582800000001, 40.937059 ], "pop" : 691, "state" : "IN" } +{ "_id" : "46802", "city" : "FORT WAYNE", "loc" : [ -85.15431, 41.070717 ], "pop" : 10837, "state" : "IN" } +{ "_id" : "46803", "city" : "FORT WAYNE", "loc" : [ -85.10736199999999, 41.069452 ], "pop" : 13295, "state" : "IN" } +{ "_id" : "46804", "city" : "FORT WAYNE", "loc" : [ -85.256013, 41.050843 ], "pop" : 23713, "state" : "IN" } +{ "_id" : "46805", "city" : "FORT WAYNE", "loc" : [ -85.118865, 41.097663 ], "pop" : 22657, "state" : "IN" } +{ "_id" : "46806", "city" : "FORT WAYNE", "loc" : [ -85.113496, 41.047988 ], "pop" : 28184, "state" : "IN" } +{ "_id" : "46807", "city" : "FORT WAYNE", "loc" : [ -85.14616700000001, 41.049054 ], "pop" : 18346, "state" : "IN" } +{ "_id" : "46808", "city" : "FORT WAYNE", "loc" : [ -85.162121, 41.093877 ], "pop" : 19401, "state" : "IN" } +{ "_id" : "46809", "city" : "FORT WAYNE", "loc" : [ -85.18340000000001, 41.02543 ], "pop" : 9804, "state" : "IN" } +{ "_id" : "46815", "city" : "FORT WAYNE", "loc" : [ -85.062397, 41.105318 ], "pop" : 25377, "state" : "IN" } +{ "_id" : "46816", "city" : "FORT WAYNE", "loc" : [ -85.097573, 41.016519 ], "pop" : 15507, "state" : "IN" } +{ "_id" : "46818", "city" : "FORT WAYNE", "loc" : [ -85.206686, 41.146847 ], "pop" : 10155, "state" : "IN" } +{ "_id" : "46819", "city" : "FORT WAYNE", "loc" : [ -85.152743, 41.005167 ], "pop" : 9139, "state" : "IN" } +{ "_id" : "46825", "city" : "FORT WAYNE", "loc" : [ -85.12315599999999, 41.146482 ], "pop" : 19522, "state" : "IN" } +{ "_id" : "46835", "city" : "FORT WAYNE", "loc" : [ -85.06853099999999, 41.137051 ], "pop" : 26758, "state" : "IN" } +{ "_id" : "46845", "city" : "FORT WAYNE", "loc" : [ -85.119088, 41.195783 ], "pop" : 9168, "state" : "IN" } +{ "_id" : "46901", "city" : "KOKOMO", "loc" : [ -86.145273, 40.49884 ], "pop" : 37261, "state" : "IN" } +{ "_id" : "46902", "city" : "KOKOMO", "loc" : [ -86.135227, 40.450856 ], "pop" : 36889, "state" : "IN" } +{ "_id" : "46910", "city" : "AKRON", "loc" : [ -86.03947100000001, 41.038921 ], "pop" : 2617, "state" : "IN" } +{ "_id" : "46911", "city" : "AMBOY", "loc" : [ -85.949726, 40.610505 ], "pop" : 1555, "state" : "IN" } +{ "_id" : "46913", "city" : "BRINGHURST", "loc" : [ -86.520369, 40.516294 ], "pop" : 212, "state" : "IN" } +{ "_id" : "46914", "city" : "BUNKER HILL", "loc" : [ -86.09614999999999, 40.642267 ], "pop" : 3073, "state" : "IN" } +{ "_id" : "46917", "city" : "CAMDEN", "loc" : [ -86.51521700000001, 40.599588 ], "pop" : 1527, "state" : "IN" } +{ "_id" : "46919", "city" : "CONVERSE", "loc" : [ -85.876299, 40.577031 ], "pop" : 1353, "state" : "IN" } +{ "_id" : "46920", "city" : "CUTLER", "loc" : [ -86.446172, 40.4785 ], "pop" : 2495, "state" : "IN" } +{ "_id" : "46923", "city" : "DELPHI", "loc" : [ -86.678849, 40.57339 ], "pop" : 7576, "state" : "IN" } +{ "_id" : "46926", "city" : "CHILI", "loc" : [ -86.076953, 40.869363 ], "pop" : 5339, "state" : "IN" } +{ "_id" : "46928", "city" : "FAIRMOUNT", "loc" : [ -85.67132700000001, 40.418755 ], "pop" : 6230, "state" : "IN" } +{ "_id" : "46929", "city" : "FLORA", "loc" : [ -86.501572, 40.544467 ], "pop" : 3249, "state" : "IN" } +{ "_id" : "46932", "city" : "GALVESTON", "loc" : [ -86.1972, 40.586249 ], "pop" : 3059, "state" : "IN" } +{ "_id" : "46933", "city" : "GAS CITY", "loc" : [ -85.60553299999999, 40.487895 ], "pop" : 6975, "state" : "IN" } +{ "_id" : "46936", "city" : "GREENTOWN", "loc" : [ -85.958195, 40.479096 ], "pop" : 5785, "state" : "IN" } +{ "_id" : "46938", "city" : "JONESBORO", "loc" : [ -85.63649599999999, 40.481456 ], "pop" : 3989, "state" : "IN" } +{ "_id" : "46939", "city" : "KEWANNA", "loc" : [ -86.40605499999999, 41.008706 ], "pop" : 1966, "state" : "IN" } +{ "_id" : "46940", "city" : "LA FONTAINE", "loc" : [ -85.697138, 40.690896 ], "pop" : 2947, "state" : "IN" } +{ "_id" : "46941", "city" : "LAGRO", "loc" : [ -85.72044699999999, 40.819897 ], "pop" : 2255, "state" : "IN" } +{ "_id" : "46947", "city" : "LOGANSPORT", "loc" : [ -86.359888, 40.760377 ], "pop" : 27829, "state" : "IN" } +{ "_id" : "46950", "city" : "LUCERNE", "loc" : [ -86.407726, 40.861434 ], "pop" : 809, "state" : "IN" } +{ "_id" : "46951", "city" : "MACY", "loc" : [ -86.126428, 40.961838 ], "pop" : 633, "state" : "IN" } +{ "_id" : "46952", "city" : "MARION", "loc" : [ -85.674127, 40.574333 ], "pop" : 24986, "state" : "IN" } +{ "_id" : "46953", "city" : "MARION", "loc" : [ -85.661624, 40.53592 ], "pop" : 22079, "state" : "IN" } +{ "_id" : "46960", "city" : "MONTEREY", "loc" : [ -86.51786199999999, 41.138334 ], "pop" : 997, "state" : "IN" } +{ "_id" : "46962", "city" : "NORTH MANCHESTER", "loc" : [ -85.784184, 40.998603 ], "pop" : 10772, "state" : "IN" } +{ "_id" : "46970", "city" : "PERU", "loc" : [ -86.068044, 40.749203 ], "pop" : 19549, "state" : "IN" } +{ "_id" : "46971", "city" : "GRISSOM AIR FORC", "loc" : [ -86.14729199999999, 40.663546 ], "pop" : 4364, "state" : "IN" } +{ "_id" : "46974", "city" : "ROANN", "loc" : [ -85.88988500000001, 40.906649 ], "pop" : 1612, "state" : "IN" } +{ "_id" : "46975", "city" : "ROCHESTER", "loc" : [ -86.23100700000001, 41.065493 ], "pop" : 14259, "state" : "IN" } +{ "_id" : "46978", "city" : "ROYAL CENTER", "loc" : [ -86.507751, 40.864499 ], "pop" : 1558, "state" : "IN" } +{ "_id" : "46979", "city" : "RUSSIAVILLE", "loc" : [ -86.267467, 40.415086 ], "pop" : 1724, "state" : "IN" } +{ "_id" : "46982", "city" : "SILVER LAKE", "loc" : [ -85.87920699999999, 41.074318 ], "pop" : 1566, "state" : "IN" } +{ "_id" : "46985", "city" : "STAR CITY", "loc" : [ -86.54040500000001, 40.960176 ], "pop" : 951, "state" : "IN" } +{ "_id" : "46986", "city" : "SWAYZEE", "loc" : [ -85.826542, 40.511199 ], "pop" : 1891, "state" : "IN" } +{ "_id" : "46988", "city" : "TWELVE MILE", "loc" : [ -86.21259499999999, 40.854661 ], "pop" : 873, "state" : "IN" } +{ "_id" : "46989", "city" : "UPLAND", "loc" : [ -85.499049, 40.454841 ], "pop" : 6027, "state" : "IN" } +{ "_id" : "46990", "city" : "URBANA", "loc" : [ -85.748481, 40.898655 ], "pop" : 505, "state" : "IN" } +{ "_id" : "46991", "city" : "LANDESS", "loc" : [ -85.481891, 40.63199 ], "pop" : 3670, "state" : "IN" } +{ "_id" : "46992", "city" : "WABASH", "loc" : [ -85.83212399999999, 40.790947 ], "pop" : 17371, "state" : "IN" } +{ "_id" : "46994", "city" : "WALTON", "loc" : [ -86.280501, 40.677225 ], "pop" : 4935, "state" : "IN" } +{ "_id" : "46996", "city" : "WINAMAC", "loc" : [ -86.630697, 41.056242 ], "pop" : 6857, "state" : "IN" } +{ "_id" : "47001", "city" : "AURORA", "loc" : [ -84.945188, 39.071897 ], "pop" : 9435, "state" : "IN" } +{ "_id" : "47006", "city" : "BATESVILLE", "loc" : [ -85.222053, 39.300057 ], "pop" : 6963, "state" : "IN" } +{ "_id" : "47010", "city" : "BATH", "loc" : [ -84.836007, 39.499237 ], "pop" : 197, "state" : "IN" } +{ "_id" : "47011", "city" : "BENNINGTON", "loc" : [ -85.07189700000001, 38.875993 ], "pop" : 1376, "state" : "IN" } +{ "_id" : "47012", "city" : "BROOKVILLE", "loc" : [ -84.99942299999999, 39.421305 ], "pop" : 9204, "state" : "IN" } +{ "_id" : "47016", "city" : "CEDAR GROVE", "loc" : [ -84.892402, 39.345891 ], "pop" : 1522, "state" : "IN" } +{ "_id" : "47017", "city" : "CROSS PLAINS", "loc" : [ -85.21221, 38.949046 ], "pop" : 802, "state" : "IN" } +{ "_id" : "47018", "city" : "DILLSBORO", "loc" : [ -85.05499399999999, 38.996195 ], "pop" : 3699, "state" : "IN" } +{ "_id" : "47020", "city" : "FLORENCE", "loc" : [ -84.93987199999999, 38.822436 ], "pop" : 1019, "state" : "IN" } +{ "_id" : "47021", "city" : "FRIENDSHIP", "loc" : [ -85.215296, 39.114591 ], "pop" : 218, "state" : "IN" } +{ "_id" : "47022", "city" : "GUILFORD", "loc" : [ -84.961586, 39.205855 ], "pop" : 2595, "state" : "IN" } +{ "_id" : "47023", "city" : "HOLTON", "loc" : [ -85.37394500000001, 39.049817 ], "pop" : 2384, "state" : "IN" } +{ "_id" : "47024", "city" : "LAUREL", "loc" : [ -85.208044, 39.491573 ], "pop" : 3041, "state" : "IN" } +{ "_id" : "47025", "city" : "LAWRENCEBURG", "loc" : [ -84.865819, 39.140123 ], "pop" : 15358, "state" : "IN" } +{ "_id" : "47030", "city" : "METAMORA", "loc" : [ -85.15044, 39.428775 ], "pop" : 1085, "state" : "IN" } +{ "_id" : "47031", "city" : "MILAN", "loc" : [ -85.13242, 39.150333 ], "pop" : 3877, "state" : "IN" } +{ "_id" : "47032", "city" : "MOORES HILL", "loc" : [ -85.063806, 39.094459 ], "pop" : 2729, "state" : "IN" } +{ "_id" : "47036", "city" : "OLDENBURG", "loc" : [ -85.22223, 39.359797 ], "pop" : 1398, "state" : "IN" } +{ "_id" : "47037", "city" : "OSGOOD", "loc" : [ -85.293812, 39.157342 ], "pop" : 4785, "state" : "IN" } +{ "_id" : "47038", "city" : "PATRIOT", "loc" : [ -84.85154300000001, 38.853691 ], "pop" : 1265, "state" : "IN" } +{ "_id" : "47040", "city" : "RISING SUN", "loc" : [ -84.88067599999999, 38.956667 ], "pop" : 4500, "state" : "IN" } +{ "_id" : "47041", "city" : "SUNMAN", "loc" : [ -85.11592899999999, 39.262307 ], "pop" : 4719, "state" : "IN" } +{ "_id" : "47042", "city" : "VERSAILLES", "loc" : [ -85.223489, 39.051074 ], "pop" : 4753, "state" : "IN" } +{ "_id" : "47043", "city" : "VEVAY", "loc" : [ -85.085217, 38.772423 ], "pop" : 3974, "state" : "IN" } +{ "_id" : "47060", "city" : "W HARRISON", "loc" : [ -84.878027, 39.266727 ], "pop" : 5338, "state" : "IN" } +{ "_id" : "47102", "city" : "AUSTIN", "loc" : [ -85.796188, 38.747801 ], "pop" : 6713, "state" : "IN" } +{ "_id" : "47106", "city" : "BORDEN", "loc" : [ -85.92147300000001, 38.436171 ], "pop" : 4080, "state" : "IN" } +{ "_id" : "47108", "city" : "CAMPBELLSBURG", "loc" : [ -86.235846, 38.669037 ], "pop" : 2900, "state" : "IN" } +{ "_id" : "47110", "city" : "CENTRAL", "loc" : [ -86.19738099999999, 38.094543 ], "pop" : 779, "state" : "IN" } +{ "_id" : "47111", "city" : "CHARLESTOWN", "loc" : [ -85.660614, 38.456778 ], "pop" : 9896, "state" : "IN" } +{ "_id" : "47112", "city" : "CORYDON", "loc" : [ -86.114465, 38.218865 ], "pop" : 10928, "state" : "IN" } +{ "_id" : "47114", "city" : "CRANDALL", "loc" : [ -86.069804, 38.28927 ], "pop" : 239, "state" : "IN" } +{ "_id" : "47115", "city" : "DEPAUW", "loc" : [ -86.210857, 38.336078 ], "pop" : 3269, "state" : "IN" } +{ "_id" : "47116", "city" : "ECKERTY", "loc" : [ -86.60593900000001, 38.318548 ], "pop" : 971, "state" : "IN" } +{ "_id" : "47117", "city" : "ELIZABETH", "loc" : [ -85.95887399999999, 38.124389 ], "pop" : 3273, "state" : "IN" } +{ "_id" : "47118", "city" : "ENGLISH", "loc" : [ -86.442875, 38.325807 ], "pop" : 3424, "state" : "IN" } +{ "_id" : "47119", "city" : "FLOYDS KNOBS", "loc" : [ -85.89955500000001, 38.351006 ], "pop" : 9954, "state" : "IN" } +{ "_id" : "47120", "city" : "FREDERICKSBURG", "loc" : [ -86.17825499999999, 38.482118 ], "pop" : 1846, "state" : "IN" } +{ "_id" : "47122", "city" : "GEORGETOWN", "loc" : [ -85.961704, 38.302943 ], "pop" : 4446, "state" : "IN" } +{ "_id" : "47123", "city" : "GRANTSBURG", "loc" : [ -86.466043, 38.289183 ], "pop" : 154, "state" : "IN" } +{ "_id" : "47124", "city" : "GREENVILLE", "loc" : [ -86.00829899999999, 38.353533 ], "pop" : 1162, "state" : "IN" } +{ "_id" : "47125", "city" : "HARDINSBURG", "loc" : [ -86.317983, 38.462599 ], "pop" : 2496, "state" : "IN" } +{ "_id" : "47126", "city" : "HENRYVILLE", "loc" : [ -85.773403, 38.539829 ], "pop" : 2648, "state" : "IN" } +{ "_id" : "47129", "city" : "CLARKSVILLE", "loc" : [ -85.524438, 38.537273 ], "pop" : 379, "state" : "IN" } +{ "_id" : "47130", "city" : "JEFFERSONVILLE", "loc" : [ -85.735885, 38.307767 ], "pop" : 56543, "state" : "IN" } +{ "_id" : "47135", "city" : "LACONIA", "loc" : [ -86.08441500000001, 38.052703 ], "pop" : 1058, "state" : "IN" } +{ "_id" : "47136", "city" : "LANESVILLE", "loc" : [ -85.95931400000001, 38.244817 ], "pop" : 3524, "state" : "IN" } +{ "_id" : "47137", "city" : "LEAVENWORTH", "loc" : [ -86.35986200000001, 38.194244 ], "pop" : 1152, "state" : "IN" } +{ "_id" : "47138", "city" : "LEXINGTON", "loc" : [ -85.65891499999999, 38.650643 ], "pop" : 2803, "state" : "IN" } +{ "_id" : "47140", "city" : "MARENGO", "loc" : [ -86.357784, 38.373603 ], "pop" : 1539, "state" : "IN" } +{ "_id" : "47141", "city" : "MARYSVILLE", "loc" : [ -85.630809, 38.554488 ], "pop" : 828, "state" : "IN" } +{ "_id" : "47142", "city" : "MAUCKPORT", "loc" : [ -86.184622, 38.04366 ], "pop" : 520, "state" : "IN" } +{ "_id" : "47143", "city" : "MEMPHIS", "loc" : [ -85.777501, 38.464181 ], "pop" : 2381, "state" : "IN" } +{ "_id" : "47145", "city" : "MILLTOWN", "loc" : [ -86.300344, 38.344453 ], "pop" : 1724, "state" : "IN" } +{ "_id" : "47147", "city" : "NABB", "loc" : [ -85.521704, 38.612768 ], "pop" : 2246, "state" : "IN" } +{ "_id" : "47150", "city" : "NEW ALBANY", "loc" : [ -85.822085, 38.308919 ], "pop" : 44969, "state" : "IN" } +{ "_id" : "47160", "city" : "NEW MIDDLETOWN", "loc" : [ -86.055261, 38.144199 ], "pop" : 1593, "state" : "IN" } +{ "_id" : "47161", "city" : "NEW SALISBURY", "loc" : [ -86.088731, 38.339885 ], "pop" : 4814, "state" : "IN" } +{ "_id" : "47162", "city" : "NEW WASHINGTON", "loc" : [ -85.45987, 38.557521 ], "pop" : 380, "state" : "IN" } +{ "_id" : "47163", "city" : "OTISCO", "loc" : [ -85.66470200000001, 38.542342 ], "pop" : 1738, "state" : "IN" } +{ "_id" : "47164", "city" : "PALMYRA", "loc" : [ -86.088778, 38.410484 ], "pop" : 814, "state" : "IN" } +{ "_id" : "47165", "city" : "PEKIN", "loc" : [ -86.017045, 38.49308 ], "pop" : 5351, "state" : "IN" } +{ "_id" : "47166", "city" : "RAMSEY", "loc" : [ -86.130768, 38.335442 ], "pop" : 1146, "state" : "IN" } +{ "_id" : "47167", "city" : "SALEM", "loc" : [ -86.07874200000001, 38.607138 ], "pop" : 10949, "state" : "IN" } +{ "_id" : "47170", "city" : "SCOTTSBURG", "loc" : [ -85.798654, 38.688499 ], "pop" : 13114, "state" : "IN" } +{ "_id" : "47172", "city" : "SPEED", "loc" : [ -85.763518, 38.390331 ], "pop" : 8658, "state" : "IN" } +{ "_id" : "47174", "city" : "SULPHUR", "loc" : [ -86.487296, 38.227194 ], "pop" : 303, "state" : "IN" } +{ "_id" : "47175", "city" : "TASWELL", "loc" : [ -86.538675, 38.346302 ], "pop" : 950, "state" : "IN" } +{ "_id" : "47177", "city" : "UNDERWOOD", "loc" : [ -85.767211, 38.590251 ], "pop" : 818, "state" : "IN" } +{ "_id" : "47201", "city" : "COLUMBUS", "loc" : [ -85.93174500000001, 39.205507 ], "pop" : 40769, "state" : "IN" } +{ "_id" : "47203", "city" : "COLUMBUS", "loc" : [ -85.885497, 39.230097 ], "pop" : 15656, "state" : "IN" } +{ "_id" : "47220", "city" : "BROWNSTOWN", "loc" : [ -86.048619, 38.883593 ], "pop" : 4963, "state" : "IN" } +{ "_id" : "47223", "city" : "BUTLERVILLE", "loc" : [ -85.494415, 39.120598 ], "pop" : 813, "state" : "IN" } +{ "_id" : "47224", "city" : "CANAAN", "loc" : [ -85.268896, 38.869644 ], "pop" : 936, "state" : "IN" } +{ "_id" : "47227", "city" : "COMMISKEY", "loc" : [ -85.643384, 38.852629 ], "pop" : 896, "state" : "IN" } +{ "_id" : "47228", "city" : "CORTLAND", "loc" : [ -86.000918, 38.991546 ], "pop" : 1680, "state" : "IN" } +{ "_id" : "47229", "city" : "CROTHERSVILLE", "loc" : [ -85.846965, 38.806672 ], "pop" : 3865, "state" : "IN" } +{ "_id" : "47230", "city" : "DEPUTY", "loc" : [ -85.63040700000001, 38.775891 ], "pop" : 1448, "state" : "IN" } +{ "_id" : "47231", "city" : "DUPONT", "loc" : [ -85.50920499999999, 38.890504 ], "pop" : 716, "state" : "IN" } +{ "_id" : "47232", "city" : "ELIZABETHTOWN", "loc" : [ -85.81531099999999, 39.124291 ], "pop" : 1222, "state" : "IN" } +{ "_id" : "47234", "city" : "FLAT ROCK", "loc" : [ -85.67588600000001, 39.407503 ], "pop" : 1496, "state" : "IN" } +{ "_id" : "47235", "city" : "FREETOWN", "loc" : [ -86.12405099999999, 38.995728 ], "pop" : 1380, "state" : "IN" } +{ "_id" : "47236", "city" : "GRAMMER", "loc" : [ -85.718338, 39.159192 ], "pop" : 412, "state" : "IN" } +{ "_id" : "47240", "city" : "ADAMS", "loc" : [ -85.47353200000001, 39.331223 ], "pop" : 19250, "state" : "IN" } +{ "_id" : "47243", "city" : "HANOVER", "loc" : [ -85.476316, 38.71378 ], "pop" : 4900, "state" : "IN" } +{ "_id" : "47244", "city" : "HARTSVILLE", "loc" : [ -85.70046000000001, 39.273318 ], "pop" : 543, "state" : "IN" } +{ "_id" : "47246", "city" : "HOPE", "loc" : [ -85.766538, 39.25733 ], "pop" : 5676, "state" : "IN" } +{ "_id" : "47250", "city" : "MADISON", "loc" : [ -85.40701900000001, 38.764866 ], "pop" : 20596, "state" : "IN" } +{ "_id" : "47260", "city" : "MEDORA", "loc" : [ -86.189733, 38.825505 ], "pop" : 1576, "state" : "IN" } +{ "_id" : "47264", "city" : "NORMAN", "loc" : [ -86.20793399999999, 38.929996 ], "pop" : 1834, "state" : "IN" } +{ "_id" : "47265", "city" : "NORTH VERNON", "loc" : [ -85.627216, 39.001763 ], "pop" : 13466, "state" : "IN" } +{ "_id" : "47270", "city" : "PARIS CROSSING", "loc" : [ -85.74872499999999, 38.855843 ], "pop" : 972, "state" : "IN" } +{ "_id" : "47272", "city" : "SAINT PAUL", "loc" : [ -85.599374, 39.427747 ], "pop" : 1389, "state" : "IN" } +{ "_id" : "47273", "city" : "SCIPIO", "loc" : [ -85.71285899999999, 39.066544 ], "pop" : 5043, "state" : "IN" } +{ "_id" : "47274", "city" : "SEYMOUR", "loc" : [ -85.88247699999999, 38.957133 ], "pop" : 21094, "state" : "IN" } +{ "_id" : "47281", "city" : "VALLONIA", "loc" : [ -86.068997, 38.817413 ], "pop" : 1338, "state" : "IN" } +{ "_id" : "47282", "city" : "VERNON", "loc" : [ -85.598377, 38.96887 ], "pop" : 2277, "state" : "IN" } +{ "_id" : "47283", "city" : "WESTPORT", "loc" : [ -85.585596, 39.174856 ], "pop" : 3065, "state" : "IN" } +{ "_id" : "47302", "city" : "MUNCIE", "loc" : [ -85.380689, 40.168414 ], "pop" : 29709, "state" : "IN" } +{ "_id" : "47303", "city" : "MUNCIE", "loc" : [ -85.37896600000001, 40.217992 ], "pop" : 26033, "state" : "IN" } +{ "_id" : "47304", "city" : "MUNCIE", "loc" : [ -85.429115, 40.211134 ], "pop" : 28452, "state" : "IN" } +{ "_id" : "47305", "city" : "MUNCIE", "loc" : [ -85.386163, 40.193299 ], "pop" : 5251, "state" : "IN" } +{ "_id" : "47306", "city" : "BALL STATE UNIVE", "loc" : [ -85.41015299999999, 40.192739 ], "pop" : 3259, "state" : "IN" } +{ "_id" : "47320", "city" : "ALBANY", "loc" : [ -85.257987, 40.292049 ], "pop" : 4625, "state" : "IN" } +{ "_id" : "47325", "city" : "BROWNSVILLE", "loc" : [ -84.98806999999999, 39.684485 ], "pop" : 850, "state" : "IN" } +{ "_id" : "47326", "city" : "BRYANT", "loc" : [ -84.911748, 40.54462 ], "pop" : 1350, "state" : "IN" } +{ "_id" : "47327", "city" : "CAMBRIDGE CITY", "loc" : [ -85.16845499999999, 39.818171 ], "pop" : 4998, "state" : "IN" } +{ "_id" : "47330", "city" : "CENTERVILLE", "loc" : [ -85.00317, 39.808103 ], "pop" : 5475, "state" : "IN" } +{ "_id" : "47331", "city" : "CONNERSVILLE", "loc" : [ -85.14643100000001, 39.643508 ], "pop" : 25503, "state" : "IN" } +{ "_id" : "47334", "city" : "DALEVILLE", "loc" : [ -85.511016, 40.125738 ], "pop" : 5063, "state" : "IN" } +{ "_id" : "47336", "city" : "DUNKIRK", "loc" : [ -85.22554100000001, 40.388291 ], "pop" : 4413, "state" : "IN" } +{ "_id" : "47338", "city" : "EATON", "loc" : [ -85.354387, 40.337673 ], "pop" : 3637, "state" : "IN" } +{ "_id" : "47339", "city" : "ECONOMY", "loc" : [ -85.08780299999999, 39.971215 ], "pop" : 677, "state" : "IN" } +{ "_id" : "47340", "city" : "FARMLAND", "loc" : [ -85.125381, 40.194454 ], "pop" : 1784, "state" : "IN" } +{ "_id" : "47341", "city" : "FOUNTAIN CITY", "loc" : [ -84.908996, 39.963429 ], "pop" : 2020, "state" : "IN" } +{ "_id" : "47342", "city" : "GASTON", "loc" : [ -85.489842, 40.29479 ], "pop" : 4594, "state" : "IN" } +{ "_id" : "47345", "city" : "GREENS FORK", "loc" : [ -85.049413, 39.89163 ], "pop" : 1054, "state" : "IN" } +{ "_id" : "47346", "city" : "HAGERSTOWN", "loc" : [ -85.16009099999999, 39.92277 ], "pop" : 3906, "state" : "IN" } +{ "_id" : "47348", "city" : "HARTFORD CITY", "loc" : [ -85.375771, 40.454106 ], "pop" : 9762, "state" : "IN" } +{ "_id" : "47352", "city" : "LEWISVILLE", "loc" : [ -85.36211, 39.828288 ], "pop" : 1219, "state" : "IN" } +{ "_id" : "47353", "city" : "LIBERTY", "loc" : [ -84.908947, 39.612645 ], "pop" : 6126, "state" : "IN" } +{ "_id" : "47354", "city" : "LOSANTVILLE", "loc" : [ -85.21084999999999, 40.047492 ], "pop" : 1768, "state" : "IN" } +{ "_id" : "47355", "city" : "LYNN", "loc" : [ -84.93003, 40.051863 ], "pop" : 3544, "state" : "IN" } +{ "_id" : "47356", "city" : "MIDDLETOWN", "loc" : [ -85.536778, 40.047488 ], "pop" : 4613, "state" : "IN" } +{ "_id" : "47357", "city" : "MILTON", "loc" : [ -85.142267, 39.776279 ], "pop" : 1488, "state" : "IN" } +{ "_id" : "47358", "city" : "MODOC", "loc" : [ -85.091904, 40.05816 ], "pop" : 1253, "state" : "IN" } +{ "_id" : "47359", "city" : "MONTPELIER", "loc" : [ -85.251339, 40.557656 ], "pop" : 3753, "state" : "IN" } +{ "_id" : "47360", "city" : "MOORELAND", "loc" : [ -85.258065, 39.994066 ], "pop" : 1265, "state" : "IN" } +{ "_id" : "47362", "city" : "NEW CASTLE", "loc" : [ -85.366322, 39.920765 ], "pop" : 25888, "state" : "IN" } +{ "_id" : "47368", "city" : "PARKER CITY", "loc" : [ -85.196265, 40.193841 ], "pop" : 1818, "state" : "IN" } +{ "_id" : "47369", "city" : "PENNVILLE", "loc" : [ -85.14916599999999, 40.508195 ], "pop" : 1236, "state" : "IN" } +{ "_id" : "47371", "city" : "PORTLAND", "loc" : [ -84.992825, 40.430564 ], "pop" : 13186, "state" : "IN" } +{ "_id" : "47373", "city" : "REDKEY", "loc" : [ -85.16196600000001, 40.326491 ], "pop" : 2971, "state" : "IN" } +{ "_id" : "47374", "city" : "RICHMOND", "loc" : [ -84.89360600000001, 39.83244 ], "pop" : 50516, "state" : "IN" } +{ "_id" : "47380", "city" : "RIDGEVILLE", "loc" : [ -85.03710100000001, 40.280359 ], "pop" : 1343, "state" : "IN" } +{ "_id" : "47381", "city" : "SALAMONIA", "loc" : [ -84.855098, 40.358234 ], "pop" : 741, "state" : "IN" } +{ "_id" : "47382", "city" : "SARATOGA", "loc" : [ -84.950846, 40.257365 ], "pop" : 1244, "state" : "IN" } +{ "_id" : "47383", "city" : "SELMA", "loc" : [ -85.273765, 40.169295 ], "pop" : 4009, "state" : "IN" } +{ "_id" : "47384", "city" : "SHIRLEY", "loc" : [ -85.518151, 39.91582 ], "pop" : 2292, "state" : "IN" } +{ "_id" : "47385", "city" : "SPICELAND", "loc" : [ -85.445043, 39.827078 ], "pop" : 2270, "state" : "IN" } +{ "_id" : "47386", "city" : "SPRINGPORT", "loc" : [ -85.36886699999999, 40.008848 ], "pop" : 3393, "state" : "IN" } +{ "_id" : "47387", "city" : "STRAUGHN", "loc" : [ -85.272406, 39.831946 ], "pop" : 1300, "state" : "IN" } +{ "_id" : "47388", "city" : "SULPHUR SPRINGS", "loc" : [ -85.440747, 40.011121 ], "pop" : 1242, "state" : "IN" } +{ "_id" : "47390", "city" : "UNION CITY", "loc" : [ -84.826787, 40.202372 ], "pop" : 5393, "state" : "IN" } +{ "_id" : "47392", "city" : "WEBSTER", "loc" : [ -84.942908, 39.905701 ], "pop" : 540, "state" : "IN" } +{ "_id" : "47393", "city" : "WILLIAMSBURG", "loc" : [ -84.998442, 39.958005 ], "pop" : 1272, "state" : "IN" } +{ "_id" : "47394", "city" : "WINCHESTER", "loc" : [ -85.004366, 40.16959 ], "pop" : 8830, "state" : "IN" } +{ "_id" : "47396", "city" : "YORKTOWN", "loc" : [ -85.49599499999999, 40.183581 ], "pop" : 5027, "state" : "IN" } +{ "_id" : "47401", "city" : "BLOOMINGTON", "loc" : [ -86.508262, 39.140057 ], "pop" : 31456, "state" : "IN" } +{ "_id" : "47403", "city" : "BLOOMINGTON", "loc" : [ -86.57686699999999, 39.12632 ], "pop" : 23435, "state" : "IN" } +{ "_id" : "47404", "city" : "BLOOMINGTON", "loc" : [ -86.57572, 39.195026 ], "pop" : 15079, "state" : "IN" } +{ "_id" : "47408", "city" : "WOODBRIDGE", "loc" : [ -86.505836, 39.183175 ], "pop" : 30907, "state" : "IN" } +{ "_id" : "47421", "city" : "BEDFORD", "loc" : [ -86.487072, 38.872881 ], "pop" : 27071, "state" : "IN" } +{ "_id" : "47424", "city" : "BLOOMFIELD", "loc" : [ -86.867549, 39.029542 ], "pop" : 9014, "state" : "IN" } +{ "_id" : "47427", "city" : "COAL CITY", "loc" : [ -86.988297, 39.257304 ], "pop" : 1647, "state" : "IN" } +{ "_id" : "47429", "city" : "ELLETTSVILLE", "loc" : [ -86.619635, 39.254477 ], "pop" : 4960, "state" : "IN" } +{ "_id" : "47431", "city" : "FREEDOM", "loc" : [ -86.850027, 39.215147 ], "pop" : 1003, "state" : "IN" } +{ "_id" : "47432", "city" : "FRENCH LICK", "loc" : [ -86.61955500000001, 38.532351 ], "pop" : 3920, "state" : "IN" } +{ "_id" : "47433", "city" : "GOSPORT", "loc" : [ -86.6583, 39.344969 ], "pop" : 2269, "state" : "IN" } +{ "_id" : "47436", "city" : "HELTONVILLE", "loc" : [ -86.370328, 38.948014 ], "pop" : 1402, "state" : "IN" } +{ "_id" : "47438", "city" : "JASONVILLE", "loc" : [ -87.202292, 39.172333 ], "pop" : 4340, "state" : "IN" } +{ "_id" : "47441", "city" : "LINTON", "loc" : [ -87.172286, 39.046139 ], "pop" : 9233, "state" : "IN" } +{ "_id" : "47443", "city" : "LYONS", "loc" : [ -87.101595, 38.971731 ], "pop" : 1706, "state" : "IN" } +{ "_id" : "47446", "city" : "MITCHELL", "loc" : [ -86.476096, 38.742625 ], "pop" : 9516, "state" : "IN" } +{ "_id" : "47448", "city" : "NASHVILLE", "loc" : [ -86.22199000000001, 39.236712 ], "pop" : 11751, "state" : "IN" } +{ "_id" : "47449", "city" : "NEWBERRY", "loc" : [ -87.008055, 38.922905 ], "pop" : 386, "state" : "IN" } +{ "_id" : "47451", "city" : "OOLITIC", "loc" : [ -86.52461700000001, 38.89378 ], "pop" : 1493, "state" : "IN" } +{ "_id" : "47452", "city" : "ORLEANS", "loc" : [ -86.453157, 38.653464 ], "pop" : 4309, "state" : "IN" } +{ "_id" : "47453", "city" : "OWENSBURG", "loc" : [ -86.744122, 38.952216 ], "pop" : 1497, "state" : "IN" } +{ "_id" : "47454", "city" : "PAOLI", "loc" : [ -86.44902, 38.550697 ], "pop" : 6790, "state" : "IN" } +{ "_id" : "47456", "city" : "QUINCY", "loc" : [ -86.80250599999999, 39.439521 ], "pop" : 2959, "state" : "IN" } +{ "_id" : "47459", "city" : "SOLSBERRY", "loc" : [ -86.737843, 39.119047 ], "pop" : 1832, "state" : "IN" } +{ "_id" : "47460", "city" : "SPENCER", "loc" : [ -86.77894000000001, 39.289067 ], "pop" : 10170, "state" : "IN" } +{ "_id" : "47462", "city" : "SPRINGVILLE", "loc" : [ -86.613879, 38.950655 ], "pop" : 1726, "state" : "IN" } +{ "_id" : "47465", "city" : "SWITZ CITY", "loc" : [ -87.05023799999999, 39.036937 ], "pop" : 1347, "state" : "IN" } +{ "_id" : "47468", "city" : "UNIONVILLE", "loc" : [ -86.418947, 39.251396 ], "pop" : 1111, "state" : "IN" } +{ "_id" : "47469", "city" : "WEST BADEN SPRIN", "loc" : [ -86.613826, 38.585501 ], "pop" : 1757, "state" : "IN" } +{ "_id" : "47470", "city" : "WILLIAMS", "loc" : [ -86.628488, 38.773478 ], "pop" : 1960, "state" : "IN" } +{ "_id" : "47471", "city" : "WORTHINGTON", "loc" : [ -86.99905800000001, 39.12298 ], "pop" : 2365, "state" : "IN" } +{ "_id" : "47501", "city" : "WASHINGTON", "loc" : [ -87.17065599999999, 38.653568 ], "pop" : 15495, "state" : "IN" } +{ "_id" : "47512", "city" : "BICKNELL", "loc" : [ -87.31371799999999, 38.77272 ], "pop" : 4470, "state" : "IN" } +{ "_id" : "47513", "city" : "BIRDSEYE", "loc" : [ -86.710193, 38.30058 ], "pop" : 1591, "state" : "IN" } +{ "_id" : "47514", "city" : "BRANCHVILLE", "loc" : [ -86.585866, 38.157189 ], "pop" : 1314, "state" : "IN" } +{ "_id" : "47515", "city" : "SIBERIA", "loc" : [ -86.72181500000001, 38.163101 ], "pop" : 912, "state" : "IN" } +{ "_id" : "47516", "city" : "BRUCEVILLE", "loc" : [ -87.431299, 38.756279 ], "pop" : 1167, "state" : "IN" } +{ "_id" : "47519", "city" : "CANNELBURG", "loc" : [ -86.96686800000001, 38.694696 ], "pop" : 1265, "state" : "IN" } +{ "_id" : "47520", "city" : "MOUNT PLEASANT", "loc" : [ -86.732617, 37.910851 ], "pop" : 2290, "state" : "IN" } +{ "_id" : "47521", "city" : "CELESTINE", "loc" : [ -86.756809, 38.387789 ], "pop" : 858, "state" : "IN" } +{ "_id" : "47522", "city" : "CRANE NAVAL DEPO", "loc" : [ -86.86547299999999, 38.849618 ], "pop" : 371, "state" : "IN" } +{ "_id" : "47523", "city" : "DALE", "loc" : [ -87.00698199999999, 38.170638 ], "pop" : 3459, "state" : "IN" } +{ "_id" : "47524", "city" : "DECKER", "loc" : [ -87.553713, 38.507629 ], "pop" : 621, "state" : "IN" } +{ "_id" : "47525", "city" : "DERBY", "loc" : [ -86.57695099999999, 38.023933 ], "pop" : 485, "state" : "IN" } +{ "_id" : "47527", "city" : "DUBOIS", "loc" : [ -86.78319, 38.472824 ], "pop" : 2200, "state" : "IN" } +{ "_id" : "47528", "city" : "EDWARDSPORT", "loc" : [ -87.251856, 38.810584 ], "pop" : 497, "state" : "IN" } +{ "_id" : "47529", "city" : "ELNORA", "loc" : [ -87.065243, 38.822284 ], "pop" : 2373, "state" : "IN" } +{ "_id" : "47531", "city" : "EVANSTON", "loc" : [ -86.836422, 38.022436 ], "pop" : 163, "state" : "IN" } +{ "_id" : "47532", "city" : "FERDINAND", "loc" : [ -86.860669, 38.233582 ], "pop" : 3725, "state" : "IN" } +{ "_id" : "47537", "city" : "GENTRYVILLE", "loc" : [ -87.04413700000001, 38.085458 ], "pop" : 824, "state" : "IN" } +{ "_id" : "47541", "city" : "HOLLAND", "loc" : [ -87.008768, 38.23851 ], "pop" : 2072, "state" : "IN" } +{ "_id" : "47542", "city" : "HUNTINGBURG", "loc" : [ -86.953299, 38.297902 ], "pop" : 7415, "state" : "IN" } +{ "_id" : "47546", "city" : "HAYSVILLE", "loc" : [ -86.940787, 38.404392 ], "pop" : 16927, "state" : "IN" } +{ "_id" : "47550", "city" : "BUFFALOVILLE", "loc" : [ -86.962908, 38.047904 ], "pop" : 202, "state" : "IN" } +{ "_id" : "47551", "city" : "LEOPOLD", "loc" : [ -86.60442999999999, 38.101138 ], "pop" : 623, "state" : "IN" } +{ "_id" : "47552", "city" : "LINCOLN CITY", "loc" : [ -86.98720400000001, 38.127565 ], "pop" : 233, "state" : "IN" } +{ "_id" : "47553", "city" : "LOOGOOTEE", "loc" : [ -86.913658, 38.662901 ], "pop" : 6068, "state" : "IN" } +{ "_id" : "47555", "city" : "MAGNET", "loc" : [ -86.48353, 38.088165 ], "pop" : 240, "state" : "IN" } +{ "_id" : "47556", "city" : "MARIAH HILL", "loc" : [ -86.831593, 38.149493 ], "pop" : 1317, "state" : "IN" } +{ "_id" : "47557", "city" : "MONROE CITY", "loc" : [ -87.364136, 38.60015 ], "pop" : 1915, "state" : "IN" } +{ "_id" : "47558", "city" : "MONTGOMERY", "loc" : [ -87.047603, 38.652146 ], "pop" : 2675, "state" : "IN" } +{ "_id" : "47561", "city" : "OAKTOWN", "loc" : [ -87.387877, 38.857939 ], "pop" : 2569, "state" : "IN" } +{ "_id" : "47562", "city" : "ODON", "loc" : [ -86.97521399999999, 38.818666 ], "pop" : 4198, "state" : "IN" } +{ "_id" : "47564", "city" : "OTWELL", "loc" : [ -87.09854799999999, 38.466221 ], "pop" : 912, "state" : "IN" } +{ "_id" : "47567", "city" : "PETERSBURG", "loc" : [ -87.28829399999999, 38.478929 ], "pop" : 6614, "state" : "IN" } +{ "_id" : "47568", "city" : "PLAINVILLE", "loc" : [ -87.157822, 38.791507 ], "pop" : 895, "state" : "IN" } +{ "_id" : "47574", "city" : "ROME", "loc" : [ -86.595787, 37.937561 ], "pop" : 297, "state" : "IN" } +{ "_id" : "47575", "city" : "KYANA", "loc" : [ -86.82485800000001, 38.332222 ], "pop" : 2012, "state" : "IN" } +{ "_id" : "47576", "city" : "SAINT CROIX", "loc" : [ -86.603511, 38.239773 ], "pop" : 325, "state" : "IN" } +{ "_id" : "47577", "city" : "SAINT MEINRAD", "loc" : [ -86.842916, 38.181946 ], "pop" : 652, "state" : "IN" } +{ "_id" : "47578", "city" : "SANDBORN", "loc" : [ -87.20253200000001, 38.881743 ], "pop" : 919, "state" : "IN" } +{ "_id" : "47579", "city" : "SANTA CLAUS", "loc" : [ -86.90352799999999, 38.094496 ], "pop" : 2323, "state" : "IN" } +{ "_id" : "47580", "city" : "SCHNELLVILLE", "loc" : [ -86.756506, 38.341436 ], "pop" : 199, "state" : "IN" } +{ "_id" : "47581", "city" : "SHOALS", "loc" : [ -86.776094, 38.679103 ], "pop" : 4562, "state" : "IN" } +{ "_id" : "47585", "city" : "STENDAL", "loc" : [ -87.12045000000001, 38.283472 ], "pop" : 596, "state" : "IN" } +{ "_id" : "47586", "city" : "TELL CITY", "loc" : [ -86.745704, 37.965505 ], "pop" : 11583, "state" : "IN" } +{ "_id" : "47587", "city" : "TOBINSPORT", "loc" : [ -86.634128, 37.874726 ], "pop" : 151, "state" : "IN" } +{ "_id" : "47588", "city" : "TROY", "loc" : [ -86.797766, 37.997994 ], "pop" : 727, "state" : "IN" } +{ "_id" : "47590", "city" : "VELPEN", "loc" : [ -87.098996, 38.367981 ], "pop" : 393, "state" : "IN" } +{ "_id" : "47591", "city" : "VINCENNES", "loc" : [ -87.509806, 38.67344 ], "pop" : 26841, "state" : "IN" } +{ "_id" : "47597", "city" : "WHEATLAND", "loc" : [ -87.30620399999999, 38.667055 ], "pop" : 885, "state" : "IN" } +{ "_id" : "47598", "city" : "WINSLOW", "loc" : [ -87.222328, 38.363951 ], "pop" : 3994, "state" : "IN" } +{ "_id" : "47601", "city" : "BOONVILLE", "loc" : [ -87.261994, 38.047435 ], "pop" : 11964, "state" : "IN" } +{ "_id" : "47610", "city" : "CHANDLER", "loc" : [ -87.375552, 38.042304 ], "pop" : 5641, "state" : "IN" } +{ "_id" : "47611", "city" : "CHRISNEY", "loc" : [ -87.070421, 38.005995 ], "pop" : 1455, "state" : "IN" } +{ "_id" : "47612", "city" : "CYNTHIANA", "loc" : [ -87.711518, 38.174299 ], "pop" : 1277, "state" : "IN" } +{ "_id" : "47613", "city" : "ELBERFELD", "loc" : [ -87.41794299999999, 38.205267 ], "pop" : 3361, "state" : "IN" } +{ "_id" : "47615", "city" : "GRANDVIEW", "loc" : [ -86.956774, 37.970297 ], "pop" : 1990, "state" : "IN" } +{ "_id" : "47616", "city" : "GRIFFIN", "loc" : [ -87.916631, 38.206858 ], "pop" : 329, "state" : "IN" } +{ "_id" : "47619", "city" : "LYNNVILLE", "loc" : [ -87.293486, 38.196085 ], "pop" : 1329, "state" : "IN" } +{ "_id" : "47620", "city" : "MOUNT VERNON", "loc" : [ -87.856887, 37.950569 ], "pop" : 16037, "state" : "IN" } +{ "_id" : "47630", "city" : "NEWBURGH", "loc" : [ -87.393798, 37.963746 ], "pop" : 21793, "state" : "IN" } +{ "_id" : "47631", "city" : "NEW HARMONY", "loc" : [ -87.917186, 38.124502 ], "pop" : 1432, "state" : "IN" } +{ "_id" : "47633", "city" : "POSEYVILLE", "loc" : [ -87.802747, 38.171986 ], "pop" : 2009, "state" : "IN" } +{ "_id" : "47634", "city" : "RICHLAND", "loc" : [ -87.200957, 37.913599 ], "pop" : 2862, "state" : "IN" } +{ "_id" : "47635", "city" : "ROCKPORT", "loc" : [ -87.07701, 37.885803 ], "pop" : 4850, "state" : "IN" } +{ "_id" : "47637", "city" : "TENNYSON", "loc" : [ -87.13875, 38.123207 ], "pop" : 1378, "state" : "IN" } +{ "_id" : "47638", "city" : "WADESVILLE", "loc" : [ -87.754295, 38.082791 ], "pop" : 3614, "state" : "IN" } +{ "_id" : "47639", "city" : "HAUBSTADT", "loc" : [ -87.57982699999999, 38.189536 ], "pop" : 3568, "state" : "IN" } +{ "_id" : "47640", "city" : "HAZLETON", "loc" : [ -87.49834799999999, 38.462283 ], "pop" : 1214, "state" : "IN" } +{ "_id" : "47647", "city" : "BUCKSKIN", "loc" : [ -87.43077, 38.220867 ], "pop" : 236, "state" : "IN" } +{ "_id" : "47648", "city" : "FORT BRANCH", "loc" : [ -87.56823300000001, 38.247136 ], "pop" : 4031, "state" : "IN" } +{ "_id" : "47649", "city" : "FRANCISCO", "loc" : [ -87.453621, 38.332953 ], "pop" : 1503, "state" : "IN" } +{ "_id" : "47660", "city" : "OAKLAND CITY", "loc" : [ -87.351907, 38.336053 ], "pop" : 4244, "state" : "IN" } +{ "_id" : "47665", "city" : "OWENSVILLE", "loc" : [ -87.709052, 38.274414 ], "pop" : 3159, "state" : "IN" } +{ "_id" : "47666", "city" : "PATOKA", "loc" : [ -87.595789, 38.414296 ], "pop" : 1434, "state" : "IN" } +{ "_id" : "47670", "city" : "PRINCETON", "loc" : [ -87.569069, 38.352502 ], "pop" : 11579, "state" : "IN" } +{ "_id" : "47708", "city" : "EVANSVILLE", "loc" : [ -87.571973, 37.971818 ], "pop" : 857, "state" : "IN" } +{ "_id" : "47710", "city" : "EVANSVILLE", "loc" : [ -87.574569, 38.008617 ], "pop" : 22336, "state" : "IN" } +{ "_id" : "47711", "city" : "EVANSVILLE", "loc" : [ -87.535236, 38.076377 ], "pop" : 9387, "state" : "IN" } +{ "_id" : "47712", "city" : "EVANSVILLE", "loc" : [ -87.634682, 37.998484 ], "pop" : 35603, "state" : "IN" } +{ "_id" : "47713", "city" : "EVANSVILLE", "loc" : [ -87.55768, 37.962326 ], "pop" : 14121, "state" : "IN" } +{ "_id" : "47714", "city" : "EVANSVILLE", "loc" : [ -87.529302, 37.959076 ], "pop" : 27381, "state" : "IN" } +{ "_id" : "47715", "city" : "EVANSVILLE", "loc" : [ -87.48552599999999, 37.967815 ], "pop" : 30611, "state" : "IN" } +{ "_id" : "47720", "city" : "EVANSVILLE", "loc" : [ -87.538793, 37.998832 ], "pop" : 25504, "state" : "IN" } +{ "_id" : "47802", "city" : "TERRE HAUTE", "loc" : [ -87.402019, 39.40697 ], "pop" : 29656, "state" : "IN" } +{ "_id" : "47803", "city" : "TERRE HAUTE", "loc" : [ -87.353967, 39.465696 ], "pop" : 17709, "state" : "IN" } +{ "_id" : "47804", "city" : "TERRE HAUTE", "loc" : [ -87.39449399999999, 39.493665 ], "pop" : 11573, "state" : "IN" } +{ "_id" : "47805", "city" : "NORTH TERRE HAUT", "loc" : [ -87.341109, 39.535981 ], "pop" : 13652, "state" : "IN" } +{ "_id" : "47807", "city" : "TERRE HAUTE", "loc" : [ -87.400859, 39.470974 ], "pop" : 19106, "state" : "IN" } +{ "_id" : "47832", "city" : "BLOOMINGDALE", "loc" : [ -87.255967, 39.834808 ], "pop" : 770, "state" : "IN" } +{ "_id" : "47833", "city" : "BOWLING GREEN", "loc" : [ -87.00524900000001, 39.381209 ], "pop" : 734, "state" : "IN" } +{ "_id" : "47834", "city" : "BRAZIL", "loc" : [ -87.12776700000001, 39.521041 ], "pop" : 18960, "state" : "IN" } +{ "_id" : "47836", "city" : "BRIDGETON", "loc" : [ -87.18139600000001, 39.648366 ], "pop" : 818, "state" : "IN" } +{ "_id" : "47837", "city" : "CARBON", "loc" : [ -87.064455, 39.57463 ], "pop" : 790, "state" : "IN" } +{ "_id" : "47838", "city" : "CARLISLE", "loc" : [ -87.366738, 38.976297 ], "pop" : 2324, "state" : "IN" } +{ "_id" : "47840", "city" : "CENTERPOINT", "loc" : [ -87.09347, 39.390989 ], "pop" : 955, "state" : "IN" } +{ "_id" : "47841", "city" : "CLAY CITY", "loc" : [ -87.108244, 39.2727 ], "pop" : 2275, "state" : "IN" } +{ "_id" : "47842", "city" : "CLINTON", "loc" : [ -87.4208, 39.659142 ], "pop" : 9250, "state" : "IN" } +{ "_id" : "47846", "city" : "CORY", "loc" : [ -87.195644, 39.343545 ], "pop" : 259, "state" : "IN" } +{ "_id" : "47847", "city" : "DANA", "loc" : [ -87.501018, 39.752829 ], "pop" : 1833, "state" : "IN" } +{ "_id" : "47848", "city" : "DUGGER", "loc" : [ -87.259867, 39.069057 ], "pop" : 1144, "state" : "IN" } +{ "_id" : "47849", "city" : "FAIRBANKS", "loc" : [ -87.518483, 39.212865 ], "pop" : 655, "state" : "IN" } +{ "_id" : "47850", "city" : "FARMERSBURG", "loc" : [ -87.502365, 39.268456 ], "pop" : 335, "state" : "IN" } +{ "_id" : "47854", "city" : "HILLSDALE", "loc" : [ -87.40410199999999, 39.771235 ], "pop" : 858, "state" : "IN" } +{ "_id" : "47858", "city" : "LEWIS", "loc" : [ -87.26368100000001, 39.273261 ], "pop" : 308, "state" : "IN" } +{ "_id" : "47859", "city" : "MARSHALL", "loc" : [ -87.178032, 39.906216 ], "pop" : 617, "state" : "IN" } +{ "_id" : "47861", "city" : "MEROM", "loc" : [ -87.539675, 39.032307 ], "pop" : 649, "state" : "IN" } +{ "_id" : "47862", "city" : "MONTEZUMA", "loc" : [ -87.360679, 39.796061 ], "pop" : 1444, "state" : "IN" } +{ "_id" : "47866", "city" : "PIMENTO", "loc" : [ -87.379186, 39.289792 ], "pop" : 1123, "state" : "IN" } +{ "_id" : "47868", "city" : "POLAND", "loc" : [ -86.963103, 39.446195 ], "pop" : 292, "state" : "IN" } +{ "_id" : "47872", "city" : "ROCKVILLE", "loc" : [ -87.197794, 39.768152 ], "pop" : 7895, "state" : "IN" } +{ "_id" : "47874", "city" : "ROSEDALE", "loc" : [ -87.308592, 39.62391 ], "pop" : 3463, "state" : "IN" } +{ "_id" : "47879", "city" : "SHELBURN", "loc" : [ -87.361194, 39.209924 ], "pop" : 5300, "state" : "IN" } +{ "_id" : "47882", "city" : "SULLIVAN", "loc" : [ -87.410235, 39.101018 ], "pop" : 8921, "state" : "IN" } +{ "_id" : "47885", "city" : "SANDFORD", "loc" : [ -87.46708599999999, 39.49384 ], "pop" : 11459, "state" : "IN" } +{ "_id" : "47901", "city" : "LAFAYETTE", "loc" : [ -86.888358, 40.417743 ], "pop" : 2971, "state" : "IN" } +{ "_id" : "47904", "city" : "LAFAYETTE", "loc" : [ -86.873464, 40.427649 ], "pop" : 15231, "state" : "IN" } +{ "_id" : "47905", "city" : "LAFAYETTE", "loc" : [ -86.860236, 40.400054 ], "pop" : 53104, "state" : "IN" } +{ "_id" : "47906", "city" : "WEST LAFAYETTE", "loc" : [ -86.923661, 40.444025 ], "pop" : 54702, "state" : "IN" } +{ "_id" : "47917", "city" : "AMBIA", "loc" : [ -87.47955399999999, 40.479328 ], "pop" : 794, "state" : "IN" } +{ "_id" : "47918", "city" : "ATTICA", "loc" : [ -87.224108, 40.281127 ], "pop" : 5523, "state" : "IN" } +{ "_id" : "47920", "city" : "BATTLE GROUND", "loc" : [ -86.823784, 40.5248 ], "pop" : 1646, "state" : "IN" } +{ "_id" : "47921", "city" : "BOSWELL", "loc" : [ -87.378947, 40.518021 ], "pop" : 1118, "state" : "IN" } +{ "_id" : "47922", "city" : "BROOK", "loc" : [ -87.35268499999999, 40.865534 ], "pop" : 1341, "state" : "IN" } +{ "_id" : "47923", "city" : "BROOKSTON", "loc" : [ -86.875311, 40.601088 ], "pop" : 3200, "state" : "IN" } +{ "_id" : "47926", "city" : "BURNETTSVILLE", "loc" : [ -86.574744, 40.707753 ], "pop" : 2102, "state" : "IN" } +{ "_id" : "47928", "city" : "CAYUGA", "loc" : [ -87.459019, 39.930028 ], "pop" : 3160, "state" : "IN" } +{ "_id" : "47929", "city" : "CHALMERS", "loc" : [ -86.862621, 40.669265 ], "pop" : 809, "state" : "IN" } +{ "_id" : "47930", "city" : "CLARKS HILL", "loc" : [ -86.760766, 40.262805 ], "pop" : 2119, "state" : "IN" } +{ "_id" : "47932", "city" : "COVINGTON", "loc" : [ -87.38187600000001, 40.132618 ], "pop" : 4711, "state" : "IN" } +{ "_id" : "47933", "city" : "CRAWFORDSVILLE", "loc" : [ -86.90742400000001, 40.032524 ], "pop" : 22838, "state" : "IN" } +{ "_id" : "47940", "city" : "DARLINGTON", "loc" : [ -86.764505, 40.111778 ], "pop" : 1941, "state" : "IN" } +{ "_id" : "47942", "city" : "EARL PARK", "loc" : [ -87.423199, 40.694465 ], "pop" : 903, "state" : "IN" } +{ "_id" : "47943", "city" : "FAIR OAKS", "loc" : [ -87.197031, 41.072862 ], "pop" : 1254, "state" : "IN" } +{ "_id" : "47944", "city" : "FOWLER", "loc" : [ -87.30901900000001, 40.625511 ], "pop" : 3762, "state" : "IN" } +{ "_id" : "47946", "city" : "FRANCESVILLE", "loc" : [ -86.85534, 40.97094 ], "pop" : 1808, "state" : "IN" } +{ "_id" : "47948", "city" : "GOODLAND", "loc" : [ -87.299858, 40.766872 ], "pop" : 1341, "state" : "IN" } +{ "_id" : "47949", "city" : "HILLSBORO", "loc" : [ -87.154509, 40.083452 ], "pop" : 2318, "state" : "IN" } +{ "_id" : "47950", "city" : "IDAVILLE", "loc" : [ -86.655647, 40.767372 ], "pop" : 673, "state" : "IN" } +{ "_id" : "47951", "city" : "KENTLAND", "loc" : [ -87.44707099999999, 40.787678 ], "pop" : 2609, "state" : "IN" } +{ "_id" : "47952", "city" : "CATES", "loc" : [ -87.30354800000001, 39.989383 ], "pop" : 2183, "state" : "IN" } +{ "_id" : "47954", "city" : "LADOGA", "loc" : [ -86.80309800000001, 39.91325 ], "pop" : 2405, "state" : "IN" } +{ "_id" : "47955", "city" : "LINDEN", "loc" : [ -86.89054899999999, 40.183316 ], "pop" : 1274, "state" : "IN" } +{ "_id" : "47957", "city" : "MEDARYVILLE", "loc" : [ -86.880844, 41.089734 ], "pop" : 2030, "state" : "IN" } +{ "_id" : "47959", "city" : "MONON", "loc" : [ -86.86353699999999, 40.861176 ], "pop" : 3119, "state" : "IN" } +{ "_id" : "47960", "city" : "MONTICELLO", "loc" : [ -86.754999, 40.762556 ], "pop" : 13599, "state" : "IN" } +{ "_id" : "47963", "city" : "MOROCCO", "loc" : [ -87.41871, 40.964547 ], "pop" : 2461, "state" : "IN" } +{ "_id" : "47967", "city" : "NEW RICHMOND", "loc" : [ -86.978925, 40.18118 ], "pop" : 909, "state" : "IN" } +{ "_id" : "47968", "city" : "NEW ROSS", "loc" : [ -86.752768, 39.988266 ], "pop" : 1440, "state" : "IN" } +{ "_id" : "47970", "city" : "OTTERBEIN", "loc" : [ -87.12249, 40.517013 ], "pop" : 1527, "state" : "IN" } +{ "_id" : "47971", "city" : "OXFORD", "loc" : [ -87.252576, 40.521708 ], "pop" : 1641, "state" : "IN" } +{ "_id" : "47974", "city" : "PERRYSVILLE", "loc" : [ -87.464787, 40.073697 ], "pop" : 1672, "state" : "IN" } +{ "_id" : "47975", "city" : "PINE VILLAGE", "loc" : [ -87.231724, 40.432759 ], "pop" : 1310, "state" : "IN" } +{ "_id" : "47977", "city" : "REMINGTON", "loc" : [ -87.15994000000001, 40.766653 ], "pop" : 1937, "state" : "IN" } +{ "_id" : "47978", "city" : "COLLEGEVILLE", "loc" : [ -87.13373300000001, 40.947731 ], "pop" : 9776, "state" : "IN" } +{ "_id" : "47980", "city" : "REYNOLDS", "loc" : [ -86.86914, 40.760608 ], "pop" : 1148, "state" : "IN" } +{ "_id" : "47981", "city" : "ROMNEY", "loc" : [ -86.90441199999999, 40.2605 ], "pop" : 694, "state" : "IN" } +{ "_id" : "47985", "city" : "TANGIER", "loc" : [ -87.341551, 39.920601 ], "pop" : 711, "state" : "IN" } +{ "_id" : "47987", "city" : "VEEDERSBURG", "loc" : [ -87.260167, 40.118616 ], "pop" : 3081, "state" : "IN" } +{ "_id" : "47989", "city" : "WAVELAND", "loc" : [ -87.01776, 39.901996 ], "pop" : 1548, "state" : "IN" } +{ "_id" : "47990", "city" : "WAYNETOWN", "loc" : [ -87.051165, 40.085788 ], "pop" : 1529, "state" : "IN" } +{ "_id" : "47991", "city" : "WEST LEBANON", "loc" : [ -87.43667600000001, 40.241491 ], "pop" : 2957, "state" : "IN" } +{ "_id" : "47992", "city" : "WESTPOINT", "loc" : [ -87.05747700000001, 40.358052 ], "pop" : 145, "state" : "IN" } +{ "_id" : "47993", "city" : "MARSHFIELD", "loc" : [ -87.278689, 40.309435 ], "pop" : 3591, "state" : "IN" } +{ "_id" : "47994", "city" : "WINGATE", "loc" : [ -87.066441, 40.166594 ], "pop" : 552, "state" : "IN" } +{ "_id" : "47995", "city" : "WOLCOTT", "loc" : [ -87.028997, 40.751613 ], "pop" : 1909, "state" : "IN" } +{ "_id" : "48001", "city" : "PEARL BEACH", "loc" : [ -82.560159, 42.630704 ], "pop" : 11783, "state" : "MI" } +{ "_id" : "48002", "city" : "BERLIN", "loc" : [ -82.886809, 42.919864 ], "pop" : 1333, "state" : "MI" } +{ "_id" : "48003", "city" : "ALMONT", "loc" : [ -83.036221, 42.926007 ], "pop" : 5315, "state" : "MI" } +{ "_id" : "48004", "city" : "ANCHORVILLE", "loc" : [ -82.70939199999999, 42.711817 ], "pop" : 5360, "state" : "MI" } +{ "_id" : "48005", "city" : "ARMADA", "loc" : [ -82.889905, 42.840903 ], "pop" : 4819, "state" : "MI" } +{ "_id" : "48006", "city" : "GREENWOOD", "loc" : [ -82.678141, 43.056424 ], "pop" : 2325, "state" : "MI" } +{ "_id" : "48009", "city" : "BIRMINGHAM", "loc" : [ -83.213255, 42.544396 ], "pop" : 19611, "state" : "MI" } +{ "_id" : "48014", "city" : "MUSSEY", "loc" : [ -82.92518800000001, 43.019976 ], "pop" : 4304, "state" : "MI" } +{ "_id" : "48015", "city" : "CENTER LINE", "loc" : [ -83.02477, 42.47879 ], "pop" : 8923, "state" : "MI" } +{ "_id" : "48017", "city" : "CLAWSON", "loc" : [ -83.150317, 42.536468 ], "pop" : 14008, "state" : "MI" } +{ "_id" : "48021", "city" : "EASTPOINTE", "loc" : [ -82.945896, 42.465756 ], "pop" : 35073, "state" : "MI" } +{ "_id" : "48022", "city" : "EMMETT", "loc" : [ -82.785402, 42.987239 ], "pop" : 2335, "state" : "MI" } +{ "_id" : "48023", "city" : "IRA", "loc" : [ -82.63767300000001, 42.680651 ], "pop" : 3781, "state" : "MI" } +{ "_id" : "48025", "city" : "FRANKLIN", "loc" : [ -83.251852, 42.521891 ], "pop" : 13880, "state" : "MI" } +{ "_id" : "48026", "city" : "FRASER", "loc" : [ -82.94696399999999, 42.542252 ], "pop" : 20605, "state" : "MI" } +{ "_id" : "48027", "city" : "WALES", "loc" : [ -82.621728, 43.000058 ], "pop" : 3285, "state" : "MI" } +{ "_id" : "48028", "city" : "HARSENS ISLAND", "loc" : [ -82.586049, 42.585043 ], "pop" : 1091, "state" : "MI" } +{ "_id" : "48030", "city" : "HAZEL PARK", "loc" : [ -83.09818199999999, 42.460768 ], "pop" : 20218, "state" : "MI" } +{ "_id" : "48032", "city" : "GRANT TOWNSHIP", "loc" : [ -82.554734, 43.134584 ], "pop" : 1498, "state" : "MI" } +{ "_id" : "48034", "city" : "SOUTHFIELD", "loc" : [ -83.28829500000001, 42.477676 ], "pop" : 28647, "state" : "MI" } +{ "_id" : "48039", "city" : "COTTRELLVILLE", "loc" : [ -82.514034, 42.721291 ], "pop" : 10057, "state" : "MI" } +{ "_id" : "48040", "city" : "MARYSVILLE", "loc" : [ -82.48134400000001, 42.913534 ], "pop" : 8515, "state" : "MI" } +{ "_id" : "48041", "city" : "RILEY", "loc" : [ -82.769623, 42.905955 ], "pop" : 3328, "state" : "MI" } +{ "_id" : "48043", "city" : "MOUNT CLEMENS", "loc" : [ -82.894052, 42.577562 ], "pop" : 67489, "state" : "MI" } +{ "_id" : "48044", "city" : "MACOMB", "loc" : [ -82.946845, 42.616456 ], "pop" : 51044, "state" : "MI" } +{ "_id" : "48045", "city" : "SELFRIDGE A N G", "loc" : [ -82.836395, 42.602743 ], "pop" : 34104, "state" : "MI" } +{ "_id" : "48047", "city" : "CHESTERFIELD", "loc" : [ -82.780102, 42.675344 ], "pop" : 22480, "state" : "MI" } +{ "_id" : "48048", "city" : "LENOX", "loc" : [ -82.82024800000001, 42.732958 ], "pop" : 4800, "state" : "MI" } +{ "_id" : "48049", "city" : "RUBY", "loc" : [ -82.538252, 43.026861 ], "pop" : 2316, "state" : "MI" } +{ "_id" : "48060", "city" : "PORT HURON", "loc" : [ -82.45993799999999, 42.995843 ], "pop" : 58197, "state" : "MI" } +{ "_id" : "48062", "city" : "RICHMOND", "loc" : [ -82.730052, 42.812743 ], "pop" : 12587, "state" : "MI" } +{ "_id" : "48065", "city" : "BRUCE", "loc" : [ -83.019204, 42.803513 ], "pop" : 13552, "state" : "MI" } +{ "_id" : "48066", "city" : "ROSEVILLE", "loc" : [ -82.93868000000001, 42.503423 ], "pop" : 51539, "state" : "MI" } +{ "_id" : "48067", "city" : "ROYAL OAK", "loc" : [ -83.136584, 42.490579 ], "pop" : 27820, "state" : "MI" } +{ "_id" : "48069", "city" : "PLEASANT RIDGE", "loc" : [ -83.143771, 42.47104 ], "pop" : 2895, "state" : "MI" } +{ "_id" : "48070", "city" : "HUNTINGTON WOODS", "loc" : [ -83.17490599999999, 42.482538 ], "pop" : 9107, "state" : "MI" } +{ "_id" : "48071", "city" : "MADISON HEIGHTS", "loc" : [ -83.102699, 42.501605 ], "pop" : 32196, "state" : "MI" } +{ "_id" : "48072", "city" : "BERKLEY", "loc" : [ -83.188683, 42.502755 ], "pop" : 22323, "state" : "MI" } +{ "_id" : "48073", "city" : "ROYAL OAK", "loc" : [ -83.157027, 42.519047 ], "pop" : 32093, "state" : "MI" } +{ "_id" : "48074", "city" : "KIMBALL", "loc" : [ -82.574516, 42.922072 ], "pop" : 4496, "state" : "MI" } +{ "_id" : "48075", "city" : "SOUTHFIELD", "loc" : [ -83.225539, 42.463831 ], "pop" : 22758, "state" : "MI" } +{ "_id" : "48076", "city" : "LATHRUP VILLAGE", "loc" : [ -83.22971, 42.499915 ], "pop" : 29081, "state" : "MI" } +{ "_id" : "48079", "city" : "SAINT CLAIR", "loc" : [ -82.513256, 42.825453 ], "pop" : 11681, "state" : "MI" } +{ "_id" : "48080", "city" : "SAINT CLAIR SHOR", "loc" : [ -82.900674, 42.463474 ], "pop" : 25179, "state" : "MI" } +{ "_id" : "48081", "city" : "SAINT CLAIR SHOR", "loc" : [ -82.89995399999999, 42.49538 ], "pop" : 23479, "state" : "MI" } +{ "_id" : "48082", "city" : "SAINT CLAIR SHOR", "loc" : [ -82.886538, 42.526627 ], "pop" : 19975, "state" : "MI" } +{ "_id" : "48083", "city" : "TROY", "loc" : [ -83.113771, 42.559668 ], "pop" : 20459, "state" : "MI" } +{ "_id" : "48084", "city" : "TROY", "loc" : [ -83.179947, 42.562696 ], "pop" : 13010, "state" : "MI" } +{ "_id" : "48089", "city" : "WARREN", "loc" : [ -82.99738499999999, 42.468494 ], "pop" : 35861, "state" : "MI" } +{ "_id" : "48091", "city" : "WARREN", "loc" : [ -83.059263, 42.466463 ], "pop" : 33165, "state" : "MI" } +{ "_id" : "48092", "city" : "WARREN", "loc" : [ -83.064278, 42.512459 ], "pop" : 25781, "state" : "MI" } +{ "_id" : "48093", "city" : "WARREN", "loc" : [ -82.996764, 42.514943 ], "pop" : 50327, "state" : "MI" } +{ "_id" : "48094", "city" : "WASHINGTON", "loc" : [ -83.026805, 42.726202 ], "pop" : 10975, "state" : "MI" } +{ "_id" : "48097", "city" : "BROCKWAY", "loc" : [ -82.797899, 43.122429 ], "pop" : 5665, "state" : "MI" } +{ "_id" : "48098", "city" : "TROY", "loc" : [ -83.14500099999999, 42.598118 ], "pop" : 39379, "state" : "MI" } +{ "_id" : "48101", "city" : "ALLEN PARK", "loc" : [ -83.212001, 42.25223 ], "pop" : 31167, "state" : "MI" } +{ "_id" : "48103", "city" : "ANN ARBOR", "loc" : [ -83.783998, 42.279379 ], "pop" : 41263, "state" : "MI" } +{ "_id" : "48104", "city" : "ANN ARBOR", "loc" : [ -83.728156, 42.26939 ], "pop" : 47564, "state" : "MI" } +{ "_id" : "48105", "city" : "ANN ARBOR", "loc" : [ -83.706756, 42.304247 ], "pop" : 28543, "state" : "MI" } +{ "_id" : "48108", "city" : "ANN ARBOR", "loc" : [ -83.701481, 42.232782 ], "pop" : 17948, "state" : "MI" } +{ "_id" : "48109", "city" : "ANN ARBOR", "loc" : [ -83.715363, 42.293 ], "pop" : 0, "state" : "MI" } +{ "_id" : "48111", "city" : "BELLEVILLE", "loc" : [ -83.48542500000001, 42.194858 ], "pop" : 35436, "state" : "MI" } +{ "_id" : "48116", "city" : "BRIGHTON", "loc" : [ -83.775628, 42.537069 ], "pop" : 37205, "state" : "MI" } +{ "_id" : "48117", "city" : "CARLETON", "loc" : [ -83.375502, 42.052941 ], "pop" : 8144, "state" : "MI" } +{ "_id" : "48118", "city" : "CHELSEA", "loc" : [ -84.03339200000001, 42.320692 ], "pop" : 9504, "state" : "MI" } +{ "_id" : "48120", "city" : "DEARBORN", "loc" : [ -83.160488, 42.305295 ], "pop" : 6325, "state" : "MI" } +{ "_id" : "48122", "city" : "MELVINDALE", "loc" : [ -83.182573, 42.281229 ], "pop" : 11226, "state" : "MI" } +{ "_id" : "48124", "city" : "DEARBORN", "loc" : [ -83.25356499999999, 42.294141 ], "pop" : 34078, "state" : "MI" } +{ "_id" : "48125", "city" : "DEARBORN HEIGHTS", "loc" : [ -83.260603, 42.276824 ], "pop" : 24715, "state" : "MI" } +{ "_id" : "48126", "city" : "DEARBORN", "loc" : [ -83.180065, 42.334882 ], "pop" : 37807, "state" : "MI" } +{ "_id" : "48127", "city" : "DEARBORN HEIGHTS", "loc" : [ -83.286383, 42.335317 ], "pop" : 36123, "state" : "MI" } +{ "_id" : "48128", "city" : "DEARBORN", "loc" : [ -83.27013100000001, 42.319981 ], "pop" : 11076, "state" : "MI" } +{ "_id" : "48130", "city" : "DEXTER", "loc" : [ -83.90002800000001, 42.35832 ], "pop" : 8216, "state" : "MI" } +{ "_id" : "48131", "city" : "DUNDEE", "loc" : [ -83.652165, 41.951435 ], "pop" : 6521, "state" : "MI" } +{ "_id" : "48133", "city" : "ERIE", "loc" : [ -83.495797, 41.782935 ], "pop" : 5101, "state" : "MI" } +{ "_id" : "48134", "city" : "FLAT ROCK", "loc" : [ -83.27952500000001, 42.105521 ], "pop" : 11180, "state" : "MI" } +{ "_id" : "48135", "city" : "GARDEN CITY", "loc" : [ -83.340236, 42.32415 ], "pop" : 31846, "state" : "MI" } +{ "_id" : "48137", "city" : "GREGORY", "loc" : [ -84.046588, 42.450671 ], "pop" : 3323, "state" : "MI" } +{ "_id" : "48138", "city" : "GROSSE ILE", "loc" : [ -83.153828, 42.13465 ], "pop" : 9783, "state" : "MI" } +{ "_id" : "48140", "city" : "IDA", "loc" : [ -83.591561, 41.854928 ], "pop" : 2690, "state" : "MI" } +{ "_id" : "48141", "city" : "INKSTER", "loc" : [ -83.31462999999999, 42.294041 ], "pop" : 30772, "state" : "MI" } +{ "_id" : "48144", "city" : "LAMBERTVILLE", "loc" : [ -83.625865, 41.753055 ], "pop" : 7959, "state" : "MI" } +{ "_id" : "48145", "city" : "LA SALLE", "loc" : [ -83.47148799999999, 41.858489 ], "pop" : 3800, "state" : "MI" } +{ "_id" : "48146", "city" : "LINCOLN PARK", "loc" : [ -83.180688, 42.242211 ], "pop" : 41763, "state" : "MI" } +{ "_id" : "48150", "city" : "LIVONIA", "loc" : [ -83.36494, 42.361503 ], "pop" : 27644, "state" : "MI" } +{ "_id" : "48152", "city" : "LIVONIA", "loc" : [ -83.363603, 42.425793 ], "pop" : 30199, "state" : "MI" } +{ "_id" : "48154", "city" : "LIVONIA", "loc" : [ -83.377157, 42.395796 ], "pop" : 43007, "state" : "MI" } +{ "_id" : "48157", "city" : "LUNA PIER", "loc" : [ -83.436165, 41.815368 ], "pop" : 1758, "state" : "MI" } +{ "_id" : "48158", "city" : "MANCHESTER", "loc" : [ -84.033247, 42.155545 ], "pop" : 6163, "state" : "MI" } +{ "_id" : "48159", "city" : "MAYBEE", "loc" : [ -83.51790200000001, 42.028822 ], "pop" : 3822, "state" : "MI" } +{ "_id" : "48160", "city" : "MILAN", "loc" : [ -83.67763600000001, 42.091373 ], "pop" : 12411, "state" : "MI" } +{ "_id" : "48161", "city" : "DETROIT BEACH", "loc" : [ -83.404848, 41.92751 ], "pop" : 55630, "state" : "MI" } +{ "_id" : "48164", "city" : "NEW BOSTON", "loc" : [ -83.35885500000001, 42.144899 ], "pop" : 9809, "state" : "MI" } +{ "_id" : "48165", "city" : "NEW HUDSON", "loc" : [ -83.63423299999999, 42.507647 ], "pop" : 4233, "state" : "MI" } +{ "_id" : "48166", "city" : "NEWPORT", "loc" : [ -83.280438, 41.976582 ], "pop" : 5651, "state" : "MI" } +{ "_id" : "48167", "city" : "NORTHVILLE", "loc" : [ -83.479355, 42.426245 ], "pop" : 30177, "state" : "MI" } +{ "_id" : "48169", "city" : "PINCKNEY", "loc" : [ -83.909918, 42.459579 ], "pop" : 13071, "state" : "MI" } +{ "_id" : "48170", "city" : "PLYMOUTH", "loc" : [ -83.479946, 42.36882 ], "pop" : 35389, "state" : "MI" } +{ "_id" : "48173", "city" : "GIBRALTAR", "loc" : [ -83.216196, 42.07918 ], "pop" : 9594, "state" : "MI" } +{ "_id" : "48174", "city" : "ROMULUS", "loc" : [ -83.358288, 42.220304 ], "pop" : 23471, "state" : "MI" } +{ "_id" : "48176", "city" : "SALINE", "loc" : [ -83.784936, 42.169844 ], "pop" : 13356, "state" : "MI" } +{ "_id" : "48178", "city" : "SOUTH LYON", "loc" : [ -83.658951, 42.456678 ], "pop" : 15616, "state" : "MI" } +{ "_id" : "48179", "city" : "SOUTH ROCKWOOD", "loc" : [ -83.266302, 42.062405 ], "pop" : 3204, "state" : "MI" } +{ "_id" : "48180", "city" : "TAYLOR", "loc" : [ -83.267269, 42.231738 ], "pop" : 70811, "state" : "MI" } +{ "_id" : "48182", "city" : "TEMPERANCE", "loc" : [ -83.579739, 41.768229 ], "pop" : 15581, "state" : "MI" } +{ "_id" : "48183", "city" : "WOODHAVEN", "loc" : [ -83.218142, 42.134304 ], "pop" : 38874, "state" : "MI" } +{ "_id" : "48184", "city" : "WAYNE", "loc" : [ -83.375812, 42.276805 ], "pop" : 19911, "state" : "MI" } +{ "_id" : "48185", "city" : "WESTLAND", "loc" : [ -83.374908, 42.318882 ], "pop" : 84712, "state" : "MI" } +{ "_id" : "48187", "city" : "CANTON", "loc" : [ -83.46952400000001, 42.332013 ], "pop" : 39308, "state" : "MI" } +{ "_id" : "48188", "city" : "CANTON", "loc" : [ -83.465007, 42.290997 ], "pop" : 17741, "state" : "MI" } +{ "_id" : "48189", "city" : "WHITMORE LAKE", "loc" : [ -83.78282, 42.428904 ], "pop" : 11639, "state" : "MI" } +{ "_id" : "48191", "city" : "WILLIS", "loc" : [ -83.568741, 42.129249 ], "pop" : 2574, "state" : "MI" } +{ "_id" : "48192", "city" : "RIVERVIEW", "loc" : [ -83.182112, 42.196065 ], "pop" : 50509, "state" : "MI" } +{ "_id" : "48195", "city" : "SOUTHGATE", "loc" : [ -83.19991899999999, 42.204434 ], "pop" : 30771, "state" : "MI" } +{ "_id" : "48197", "city" : "YPSILANTI", "loc" : [ -83.63362100000001, 42.232544 ], "pop" : 46790, "state" : "MI" } +{ "_id" : "48198", "city" : "YPSILANTI", "loc" : [ -83.582972, 42.24388 ], "pop" : 39534, "state" : "MI" } +{ "_id" : "48201", "city" : "DETROIT", "loc" : [ -83.06039800000001, 42.347429 ], "pop" : 15920, "state" : "MI" } +{ "_id" : "48202", "city" : "DETROIT", "loc" : [ -83.07961299999999, 42.377033 ], "pop" : 24565, "state" : "MI" } +{ "_id" : "48203", "city" : "HIGHLAND PARK", "loc" : [ -83.100909, 42.421155 ], "pop" : 53352, "state" : "MI" } +{ "_id" : "48204", "city" : "DETROIT", "loc" : [ -83.142151, 42.366098 ], "pop" : 48856, "state" : "MI" } +{ "_id" : "48205", "city" : "DETROIT", "loc" : [ -82.981279, 42.431259 ], "pop" : 65127, "state" : "MI" } +{ "_id" : "48206", "city" : "DETROIT", "loc" : [ -83.108695, 42.374893 ], "pop" : 38035, "state" : "MI" } +{ "_id" : "48207", "city" : "DETROIT", "loc" : [ -83.027101, 42.352373 ], "pop" : 25703, "state" : "MI" } +{ "_id" : "48208", "city" : "DETROIT", "loc" : [ -83.09271099999999, 42.34947 ], "pop" : 14925, "state" : "MI" } +{ "_id" : "48209", "city" : "DETROIT", "loc" : [ -83.115464, 42.309746 ], "pop" : 38839, "state" : "MI" } +{ "_id" : "48210", "city" : "DETROIT", "loc" : [ -83.130281, 42.337603 ], "pop" : 39833, "state" : "MI" } +{ "_id" : "48211", "city" : "DETROIT", "loc" : [ -83.04094499999999, 42.380922 ], "pop" : 13911, "state" : "MI" } +{ "_id" : "48212", "city" : "HAMTRAMCK", "loc" : [ -83.05826500000001, 42.408117 ], "pop" : 42830, "state" : "MI" } +{ "_id" : "48213", "city" : "DETROIT", "loc" : [ -82.99253, 42.39816 ], "pop" : 52700, "state" : "MI" } +{ "_id" : "48214", "city" : "DETROIT", "loc" : [ -82.993798, 42.366944 ], "pop" : 39584, "state" : "MI" } +{ "_id" : "48215", "city" : "DETROIT", "loc" : [ -82.951319, 42.377272 ], "pop" : 24493, "state" : "MI" } +{ "_id" : "48216", "city" : "DETROIT", "loc" : [ -83.082656, 42.327467 ], "pop" : 8592, "state" : "MI" } +{ "_id" : "48217", "city" : "DETROIT", "loc" : [ -83.154545, 42.271914 ], "pop" : 11634, "state" : "MI" } +{ "_id" : "48218", "city" : "RIVER ROUGE", "loc" : [ -83.136432, 42.269229 ], "pop" : 11314, "state" : "MI" } +{ "_id" : "48219", "city" : "DETROIT", "loc" : [ -83.249495, 42.426033 ], "pop" : 63058, "state" : "MI" } +{ "_id" : "48220", "city" : "FERNDALE", "loc" : [ -83.13625999999999, 42.458564 ], "pop" : 28698, "state" : "MI" } +{ "_id" : "48221", "city" : "DETROIT", "loc" : [ -83.149976, 42.425998 ], "pop" : 48068, "state" : "MI" } +{ "_id" : "48223", "city" : "DETROIT", "loc" : [ -83.245403, 42.394453 ], "pop" : 39612, "state" : "MI" } +{ "_id" : "48224", "city" : "DETROIT", "loc" : [ -82.944061, 42.409808 ], "pop" : 52938, "state" : "MI" } +{ "_id" : "48225", "city" : "HARPER WOODS", "loc" : [ -82.92888499999999, 42.437658 ], "pop" : 14937, "state" : "MI" } +{ "_id" : "48226", "city" : "DETROIT", "loc" : [ -83.04843200000001, 42.333346 ], "pop" : 5502, "state" : "MI" } +{ "_id" : "48227", "city" : "DETROIT", "loc" : [ -83.193732, 42.388303 ], "pop" : 68390, "state" : "MI" } +{ "_id" : "48228", "city" : "DETROIT", "loc" : [ -83.216753, 42.35473 ], "pop" : 67215, "state" : "MI" } +{ "_id" : "48229", "city" : "ECORSE", "loc" : [ -83.148943, 42.251881 ], "pop" : 12164, "state" : "MI" } +{ "_id" : "48230", "city" : "GROSSE POINTE", "loc" : [ -82.92439400000001, 42.384694 ], "pop" : 19302, "state" : "MI" } +{ "_id" : "48234", "city" : "DETROIT", "loc" : [ -83.04338300000001, 42.4337 ], "pop" : 47768, "state" : "MI" } +{ "_id" : "48235", "city" : "DETROIT", "loc" : [ -83.19512400000001, 42.426098 ], "pop" : 57165, "state" : "MI" } +{ "_id" : "48236", "city" : "GROSSE POINTE", "loc" : [ -82.900248, 42.427404 ], "pop" : 32076, "state" : "MI" } +{ "_id" : "48237", "city" : "OAK PARK", "loc" : [ -83.183993, 42.466151 ], "pop" : 28884, "state" : "MI" } +{ "_id" : "48238", "city" : "DETROIT", "loc" : [ -83.14114499999999, 42.395932 ], "pop" : 50599, "state" : "MI" } +{ "_id" : "48239", "city" : "REDFORD", "loc" : [ -83.28895, 42.375554 ], "pop" : 39218, "state" : "MI" } +{ "_id" : "48240", "city" : "REDFORD", "loc" : [ -83.30166, 42.426354 ], "pop" : 20297, "state" : "MI" } +{ "_id" : "48242", "city" : "DETROIT", "loc" : [ -83.377081, 42.220718 ], "pop" : 211, "state" : "MI" } +{ "_id" : "48301", "city" : "BLOOMFIELD TOWNS", "loc" : [ -83.2771, 42.545044 ], "pop" : 15338, "state" : "MI" } +{ "_id" : "48302", "city" : "BLOOMFIELD TOWNS", "loc" : [ -83.296271, 42.583237 ], "pop" : 17017, "state" : "MI" } +{ "_id" : "48304", "city" : "BLOOMFIELD TOWNS", "loc" : [ -83.234011, 42.593764 ], "pop" : 16057, "state" : "MI" } +{ "_id" : "48306", "city" : "ROCHESTER HILLS", "loc" : [ -83.164215, 42.710684 ], "pop" : 15755, "state" : "MI" } +{ "_id" : "48307", "city" : "ROCHESTER HILLS", "loc" : [ -83.129124, 42.660185 ], "pop" : 31734, "state" : "MI" } +{ "_id" : "48309", "city" : "ROCHESTER HILLS", "loc" : [ -83.181842, 42.666848 ], "pop" : 27450, "state" : "MI" } +{ "_id" : "48310", "city" : "STERLING HEIGHTS", "loc" : [ -83.07013499999999, 42.564782 ], "pop" : 42255, "state" : "MI" } +{ "_id" : "48312", "city" : "STERLING HEIGHTS", "loc" : [ -83.00289600000001, 42.559203 ], "pop" : 33163, "state" : "MI" } +{ "_id" : "48313", "city" : "STERLING HEIGHTS", "loc" : [ -82.99976599999999, 42.600498 ], "pop" : 33890, "state" : "MI" } +{ "_id" : "48314", "city" : "STERLING HEIGHTS", "loc" : [ -83.03445499999999, 42.612352 ], "pop" : 8502, "state" : "MI" } +{ "_id" : "48315", "city" : "SHELBY TOWNSHIP", "loc" : [ -82.99654700000001, 42.663694 ], "pop" : 11783, "state" : "MI" } +{ "_id" : "48316", "city" : "SHELBY TOWNSHIP", "loc" : [ -83.060928, 42.682668 ], "pop" : 15039, "state" : "MI" } +{ "_id" : "48317", "city" : "SHELBY TOWNSHIP", "loc" : [ -83.048109, 42.640462 ], "pop" : 24775, "state" : "MI" } +{ "_id" : "48320", "city" : "SYLVAN LAKE", "loc" : [ -83.339551, 42.610449 ], "pop" : 4688, "state" : "MI" } +{ "_id" : "48322", "city" : "WEST BLOOMFIELD", "loc" : [ -83.379313, 42.542366 ], "pop" : 26119, "state" : "MI" } +{ "_id" : "48323", "city" : "ORCHARD LAKE", "loc" : [ -83.369342, 42.570171 ], "pop" : 15797, "state" : "MI" } +{ "_id" : "48324", "city" : "ORCHARD LAKE", "loc" : [ -83.39553600000001, 42.598109 ], "pop" : 13719, "state" : "MI" } +{ "_id" : "48326", "city" : "AUBURN HILLS", "loc" : [ -83.237489, 42.658345 ], "pop" : 16184, "state" : "MI" } +{ "_id" : "48327", "city" : "WATERFORD", "loc" : [ -83.407602, 42.643751 ], "pop" : 17213, "state" : "MI" } +{ "_id" : "48328", "city" : "WATERFORD", "loc" : [ -83.354624, 42.642944 ], "pop" : 24330, "state" : "MI" } +{ "_id" : "48329", "city" : "WATERFORD", "loc" : [ -83.38786899999999, 42.687663 ], "pop" : 25125, "state" : "MI" } +{ "_id" : "48331", "city" : "FARMINGTON HILLS", "loc" : [ -83.405433, 42.510042 ], "pop" : 19626, "state" : "MI" } +{ "_id" : "48334", "city" : "FARMINGTON HILLS", "loc" : [ -83.35198, 42.506798 ], "pop" : 17513, "state" : "MI" } +{ "_id" : "48335", "city" : "FARMINGTON HILLS", "loc" : [ -83.40013399999999, 42.463055 ], "pop" : 19715, "state" : "MI" } +{ "_id" : "48336", "city" : "FARMINGTON HILLS", "loc" : [ -83.345465, 42.460938 ], "pop" : 25680, "state" : "MI" } +{ "_id" : "48340", "city" : "PONTIAC", "loc" : [ -83.28933499999999, 42.667955 ], "pop" : 23663, "state" : "MI" } +{ "_id" : "48341", "city" : "PONTIAC", "loc" : [ -83.304149, 42.629449 ], "pop" : 22685, "state" : "MI" } +{ "_id" : "48342", "city" : "PONTIAC", "loc" : [ -83.279236, 42.643856 ], "pop" : 24663, "state" : "MI" } +{ "_id" : "48346", "city" : "INDEPENDENCE", "loc" : [ -83.405658, 42.721637 ], "pop" : 17459, "state" : "MI" } +{ "_id" : "48348", "city" : "INDEPENDENCE", "loc" : [ -83.390568, 42.772414 ], "pop" : 14635, "state" : "MI" } +{ "_id" : "48350", "city" : "SPRINGFIELD", "loc" : [ -83.520022, 42.75413 ], "pop" : 5949, "state" : "MI" } +{ "_id" : "48353", "city" : "HARTLAND", "loc" : [ -83.714674, 42.63561 ], "pop" : 4584, "state" : "MI" } +{ "_id" : "48356", "city" : "HIGHLAND", "loc" : [ -83.58951, 42.669187 ], "pop" : 8161, "state" : "MI" } +{ "_id" : "48357", "city" : "HIGHLAND", "loc" : [ -83.637013, 42.659453 ], "pop" : 7376, "state" : "MI" } +{ "_id" : "48359", "city" : "ORION", "loc" : [ -83.291701, 42.720779 ], "pop" : 5264, "state" : "MI" } +{ "_id" : "48360", "city" : "ORION", "loc" : [ -83.282792, 42.742212 ], "pop" : 6725, "state" : "MI" } +{ "_id" : "48362", "city" : "ORION", "loc" : [ -83.253208, 42.780598 ], "pop" : 11862, "state" : "MI" } +{ "_id" : "48363", "city" : "OAKLAND", "loc" : [ -83.171116, 42.773179 ], "pop" : 3716, "state" : "MI" } +{ "_id" : "48367", "city" : "ADDISON TOWNSHIP", "loc" : [ -83.13808899999999, 42.836423 ], "pop" : 3963, "state" : "MI" } +{ "_id" : "48370", "city" : "OXFORD", "loc" : [ -83.20045500000001, 42.826451 ], "pop" : 1267, "state" : "MI" } +{ "_id" : "48371", "city" : "OXFORD", "loc" : [ -83.282892, 42.822272 ], "pop" : 13306, "state" : "MI" } +{ "_id" : "48374", "city" : "NOVI", "loc" : [ -83.522423, 42.473495 ], "pop" : 5302, "state" : "MI" } +{ "_id" : "48375", "city" : "NOVI", "loc" : [ -83.457741, 42.460354 ], "pop" : 19067, "state" : "MI" } +{ "_id" : "48377", "city" : "NOVI", "loc" : [ -83.472838, 42.513616 ], "pop" : 6011, "state" : "MI" } +{ "_id" : "48380", "city" : "MILFORD", "loc" : [ -83.650796, 42.601951 ], "pop" : 4050, "state" : "MI" } +{ "_id" : "48381", "city" : "MILFORD", "loc" : [ -83.592404, 42.575841 ], "pop" : 10297, "state" : "MI" } +{ "_id" : "48382", "city" : "COMMERCE TOWNSHI", "loc" : [ -83.49467, 42.589424 ], "pop" : 16939, "state" : "MI" } +{ "_id" : "48383", "city" : "WHITE LAKE", "loc" : [ -83.539838, 42.658004 ], "pop" : 7528, "state" : "MI" } +{ "_id" : "48386", "city" : "WHITE LAKE", "loc" : [ -83.473809, 42.641003 ], "pop" : 14778, "state" : "MI" } +{ "_id" : "48390", "city" : "WOLVERINE LAKE", "loc" : [ -83.479623, 42.550384 ], "pop" : 15904, "state" : "MI" } +{ "_id" : "48393", "city" : "WIXOM", "loc" : [ -83.528486, 42.534037 ], "pop" : 9337, "state" : "MI" } +{ "_id" : "48401", "city" : "APPLEGATE", "loc" : [ -82.647865, 43.361899 ], "pop" : 1338, "state" : "MI" } +{ "_id" : "48412", "city" : "ATTICA", "loc" : [ -83.166842, 43.054673 ], "pop" : 5780, "state" : "MI" } +{ "_id" : "48413", "city" : "BAD AXE", "loc" : [ -83.00537799999999, 43.806745 ], "pop" : 7321, "state" : "MI" } +{ "_id" : "48414", "city" : "BANCROFT", "loc" : [ -84.12072499999999, 42.881957 ], "pop" : 7199, "state" : "MI" } +{ "_id" : "48415", "city" : "BIRCH RUN", "loc" : [ -83.79028700000001, 43.264868 ], "pop" : 7961, "state" : "MI" } +{ "_id" : "48416", "city" : "BROWN CITY", "loc" : [ -82.99783600000001, 43.217073 ], "pop" : 4646, "state" : "MI" } +{ "_id" : "48417", "city" : "BURT", "loc" : [ -83.95107299999999, 43.24043 ], "pop" : 5487, "state" : "MI" } +{ "_id" : "48418", "city" : "BYRON", "loc" : [ -83.97297, 42.805928 ], "pop" : 3085, "state" : "MI" } +{ "_id" : "48419", "city" : "CARSONVILLE", "loc" : [ -82.602169, 43.425805 ], "pop" : 2621, "state" : "MI" } +{ "_id" : "48420", "city" : "CLIO", "loc" : [ -83.724949, 43.177885 ], "pop" : 21345, "state" : "MI" } +{ "_id" : "48421", "city" : "COLUMBIAVILLE", "loc" : [ -83.381055, 43.150334 ], "pop" : 6499, "state" : "MI" } +{ "_id" : "48422", "city" : "CROSWELL", "loc" : [ -82.63372099999999, 43.262245 ], "pop" : 5931, "state" : "MI" } +{ "_id" : "48423", "city" : "DAVISON", "loc" : [ -83.526771, 43.034777 ], "pop" : 26713, "state" : "MI" } +{ "_id" : "48426", "city" : "DECKER", "loc" : [ -83.06379099999999, 43.477532 ], "pop" : 480, "state" : "MI" } +{ "_id" : "48427", "city" : "DECKERVILLE", "loc" : [ -82.71911799999999, 43.515087 ], "pop" : 4623, "state" : "MI" } +{ "_id" : "48428", "city" : "DRYDEN", "loc" : [ -83.150066, 42.937772 ], "pop" : 3095, "state" : "MI" } +{ "_id" : "48429", "city" : "DURAND", "loc" : [ -83.987651, 42.91171 ], "pop" : 7797, "state" : "MI" } +{ "_id" : "48430", "city" : "FENTON", "loc" : [ -83.72935099999999, 42.785098 ], "pop" : 25337, "state" : "MI" } +{ "_id" : "48432", "city" : "FILION", "loc" : [ -82.982483, 43.901362 ], "pop" : 988, "state" : "MI" } +{ "_id" : "48433", "city" : "FLUSHING", "loc" : [ -83.84239100000001, 43.071954 ], "pop" : 23082, "state" : "MI" } +{ "_id" : "48435", "city" : "FOSTORIA", "loc" : [ -83.379593, 43.264504 ], "pop" : 2242, "state" : "MI" } +{ "_id" : "48436", "city" : "GAINES", "loc" : [ -83.885488, 42.881333 ], "pop" : 2931, "state" : "MI" } +{ "_id" : "48438", "city" : "GOODRICH", "loc" : [ -83.484459, 42.914734 ], "pop" : 5184, "state" : "MI" } +{ "_id" : "48439", "city" : "GRAND BLANC", "loc" : [ -83.626414, 42.928163 ], "pop" : 30329, "state" : "MI" } +{ "_id" : "48441", "city" : "HARBOR BEACH", "loc" : [ -82.688608, 43.831249 ], "pop" : 4046, "state" : "MI" } +{ "_id" : "48442", "city" : "HOLLY", "loc" : [ -83.612737, 42.790494 ], "pop" : 15119, "state" : "MI" } +{ "_id" : "48444", "city" : "IMLAY CITY", "loc" : [ -83.07079899999999, 43.042512 ], "pop" : 6493, "state" : "MI" } +{ "_id" : "48445", "city" : "KINDE", "loc" : [ -82.97552899999999, 43.948003 ], "pop" : 1082, "state" : "MI" } +{ "_id" : "48446", "city" : "LAPEER", "loc" : [ -83.333153, 43.057879 ], "pop" : 27632, "state" : "MI" } +{ "_id" : "48449", "city" : "LENNON", "loc" : [ -83.927908, 42.969323 ], "pop" : 3778, "state" : "MI" } +{ "_id" : "48450", "city" : "LEXINGTON", "loc" : [ -82.530103, 43.24348 ], "pop" : 3815, "state" : "MI" } +{ "_id" : "48451", "city" : "LINDEN", "loc" : [ -83.79928099999999, 42.810379 ], "pop" : 10127, "state" : "MI" } +{ "_id" : "48453", "city" : "MARLETTE", "loc" : [ -83.057253, 43.339882 ], "pop" : 4869, "state" : "MI" } +{ "_id" : "48454", "city" : "MELVIN", "loc" : [ -82.839277, 43.19304 ], "pop" : 816, "state" : "MI" } +{ "_id" : "48455", "city" : "METAMORA", "loc" : [ -83.318371, 42.942365 ], "pop" : 6719, "state" : "MI" } +{ "_id" : "48456", "city" : "MINDEN CITY", "loc" : [ -82.72986299999999, 43.681393 ], "pop" : 1637, "state" : "MI" } +{ "_id" : "48457", "city" : "MONTROSE", "loc" : [ -83.882411, 43.175381 ], "pop" : 7181, "state" : "MI" } +{ "_id" : "48458", "city" : "MOUNT MORRIS", "loc" : [ -83.68952299999999, 43.11601 ], "pop" : 27347, "state" : "MI" } +{ "_id" : "48460", "city" : "NEW LOTHROP", "loc" : [ -83.98514400000001, 43.138781 ], "pop" : 3206, "state" : "MI" } +{ "_id" : "48461", "city" : "NORTH BRANCH", "loc" : [ -83.226664, 43.206887 ], "pop" : 6106, "state" : "MI" } +{ "_id" : "48462", "city" : "ORTONVILLE", "loc" : [ -83.428811, 42.840943 ], "pop" : 10315, "state" : "MI" } +{ "_id" : "48463", "city" : "OTISVILLE", "loc" : [ -83.51718700000001, 43.170584 ], "pop" : 4130, "state" : "MI" } +{ "_id" : "48464", "city" : "OTTER LAKE", "loc" : [ -83.42421899999999, 43.218334 ], "pop" : 2442, "state" : "MI" } +{ "_id" : "48465", "city" : "PALMS", "loc" : [ -82.70173699999999, 43.625671 ], "pop" : 611, "state" : "MI" } +{ "_id" : "48466", "city" : "PECK", "loc" : [ -82.81929, 43.26938 ], "pop" : 1658, "state" : "MI" } +{ "_id" : "48467", "city" : "PORT AUSTIN", "loc" : [ -82.99842700000001, 44.022292 ], "pop" : 2508, "state" : "MI" } +{ "_id" : "48468", "city" : "PORT HOPE", "loc" : [ -82.752893, 43.927989 ], "pop" : 1490, "state" : "MI" } +{ "_id" : "48469", "city" : "PORT SANILAC", "loc" : [ -82.54679400000001, 43.43292 ], "pop" : 254, "state" : "MI" } +{ "_id" : "48470", "city" : "RUTH", "loc" : [ -82.74139599999999, 43.740436 ], "pop" : 1162, "state" : "MI" } +{ "_id" : "48471", "city" : "SANDUSKY", "loc" : [ -82.84093900000001, 43.405541 ], "pop" : 4198, "state" : "MI" } +{ "_id" : "48472", "city" : "SNOVER", "loc" : [ -82.930063, 43.488649 ], "pop" : 2301, "state" : "MI" } +{ "_id" : "48473", "city" : "SWARTZ CREEK", "loc" : [ -83.81700499999999, 42.946776 ], "pop" : 18263, "state" : "MI" } +{ "_id" : "48475", "city" : "UBLY", "loc" : [ -82.96401299999999, 43.689631 ], "pop" : 2802, "state" : "MI" } +{ "_id" : "48502", "city" : "FLINT", "loc" : [ -83.68776800000001, 43.012321 ], "pop" : 1359, "state" : "MI" } +{ "_id" : "48503", "city" : "FLINT", "loc" : [ -83.691429, 43.012836 ], "pop" : 33451, "state" : "MI" } +{ "_id" : "48504", "city" : "NORTHWEST", "loc" : [ -83.72990799999999, 43.04247 ], "pop" : 40445, "state" : "MI" } +{ "_id" : "48505", "city" : "FLINT", "loc" : [ -83.700093, 43.063369 ], "pop" : 42423, "state" : "MI" } +{ "_id" : "48506", "city" : "NORTHEAST", "loc" : [ -83.640192, 43.052596 ], "pop" : 35154, "state" : "MI" } +{ "_id" : "48507", "city" : "FLINT", "loc" : [ -83.688999, 42.97303 ], "pop" : 37656, "state" : "MI" } +{ "_id" : "48509", "city" : "NORTHEAST", "loc" : [ -83.606295, 43.024493 ], "pop" : 9432, "state" : "MI" } +{ "_id" : "48519", "city" : "SOUTHEAST", "loc" : [ -83.61042399999999, 42.993847 ], "pop" : 6081, "state" : "MI" } +{ "_id" : "48529", "city" : "SOUTHEAST", "loc" : [ -83.671064, 42.97268 ], "pop" : 11092, "state" : "MI" } +{ "_id" : "48532", "city" : "NORTHWEST", "loc" : [ -83.768576, 43.01021 ], "pop" : 20367, "state" : "MI" } +{ "_id" : "48601", "city" : "SAGINAW", "loc" : [ -83.915626, 43.404692 ], "pop" : 55547, "state" : "MI" } +{ "_id" : "48602", "city" : "SAGINAW", "loc" : [ -83.97445500000001, 43.424838 ], "pop" : 34096, "state" : "MI" } +{ "_id" : "48603", "city" : "SAGINAW", "loc" : [ -84.03028, 43.43251 ], "pop" : 49303, "state" : "MI" } +{ "_id" : "48604", "city" : "SAGINAW", "loc" : [ -83.951421, 43.473223 ], "pop" : 11937, "state" : "MI" } +{ "_id" : "48607", "city" : "SAGINAW", "loc" : [ -83.931872, 43.430141 ], "pop" : 3436, "state" : "MI" } +{ "_id" : "48610", "city" : "ALGER", "loc" : [ -84.18719, 44.139488 ], "pop" : 2015, "state" : "MI" } +{ "_id" : "48611", "city" : "AUBURN", "loc" : [ -84.10267, 43.607988 ], "pop" : 6154, "state" : "MI" } +{ "_id" : "48612", "city" : "BEAVERTON", "loc" : [ -84.424059, 43.886576 ], "pop" : 9682, "state" : "MI" } +{ "_id" : "48613", "city" : "BENTLEY", "loc" : [ -84.144738, 43.886028 ], "pop" : 1022, "state" : "MI" } +{ "_id" : "48614", "city" : "BRANT", "loc" : [ -84.297849, 43.25484 ], "pop" : 1572, "state" : "MI" } +{ "_id" : "48615", "city" : "BRECKENRIDGE", "loc" : [ -84.502319, 43.393463 ], "pop" : 2266, "state" : "MI" } +{ "_id" : "48616", "city" : "CHESANING", "loc" : [ -84.112156, 43.182387 ], "pop" : 4567, "state" : "MI" } +{ "_id" : "48617", "city" : "CLARE", "loc" : [ -84.763463, 43.822318 ], "pop" : 6635, "state" : "MI" } +{ "_id" : "48618", "city" : "COLEMAN", "loc" : [ -84.591058, 43.749397 ], "pop" : 5866, "state" : "MI" } +{ "_id" : "48619", "city" : "COMINS", "loc" : [ -84.026061, 44.826354 ], "pop" : 515, "state" : "MI" } +{ "_id" : "48620", "city" : "EDENVILLE", "loc" : [ -84.396227, 43.802757 ], "pop" : 237, "state" : "MI" } +{ "_id" : "48621", "city" : "FAIRVIEW", "loc" : [ -84.052532, 44.72046 ], "pop" : 1785, "state" : "MI" } +{ "_id" : "48622", "city" : "FARWELL", "loc" : [ -84.87540199999999, 43.834163 ], "pop" : 4456, "state" : "MI" } +{ "_id" : "48623", "city" : "FREELAND", "loc" : [ -84.18217300000001, 43.516134 ], "pop" : 10892, "state" : "MI" } +{ "_id" : "48624", "city" : "GLADWIN", "loc" : [ -84.496801, 44.029618 ], "pop" : 11790, "state" : "MI" } +{ "_id" : "48625", "city" : "HARRISON", "loc" : [ -84.77289, 44.028478 ], "pop" : 9223, "state" : "MI" } +{ "_id" : "48626", "city" : "HEMLOCK", "loc" : [ -84.226563, 43.409911 ], "pop" : 5711, "state" : "MI" } +{ "_id" : "48628", "city" : "HOPE", "loc" : [ -84.329605, 43.788167 ], "pop" : 1339, "state" : "MI" } +{ "_id" : "48629", "city" : "HOUGHTON LAKE", "loc" : [ -84.742175, 44.341327 ], "pop" : 5625, "state" : "MI" } +{ "_id" : "48631", "city" : "KAWKAWLIN", "loc" : [ -83.99265699999999, 43.679399 ], "pop" : 3935, "state" : "MI" } +{ "_id" : "48632", "city" : "LAKE", "loc" : [ -84.97859699999999, 43.850164 ], "pop" : 7779, "state" : "MI" } +{ "_id" : "48634", "city" : "LINWOOD", "loc" : [ -84.013341, 43.737448 ], "pop" : 4719, "state" : "MI" } +{ "_id" : "48635", "city" : "LUPTON", "loc" : [ -83.99047299999999, 44.397578 ], "pop" : 1784, "state" : "MI" } +{ "_id" : "48636", "city" : "LUZERNE", "loc" : [ -84.246742, 44.629594 ], "pop" : 744, "state" : "MI" } +{ "_id" : "48637", "city" : "MERRILL", "loc" : [ -84.33075700000001, 43.393892 ], "pop" : 2702, "state" : "MI" } +{ "_id" : "48640", "city" : "MIDLAND", "loc" : [ -84.26796, 43.637562 ], "pop" : 26370, "state" : "MI" } +{ "_id" : "48642", "city" : "MIDLAND", "loc" : [ -84.197941, 43.637488 ], "pop" : 24643, "state" : "MI" } +{ "_id" : "48647", "city" : "MIO", "loc" : [ -84.13526400000001, 44.666481 ], "pop" : 3508, "state" : "MI" } +{ "_id" : "48649", "city" : "OAKLEY", "loc" : [ -84.209379, 43.150533 ], "pop" : 3506, "state" : "MI" } +{ "_id" : "48650", "city" : "PINCONNING", "loc" : [ -84.008162, 43.849079 ], "pop" : 8659, "state" : "MI" } +{ "_id" : "48651", "city" : "PRUDENVILLE", "loc" : [ -84.662747, 44.297394 ], "pop" : 4484, "state" : "MI" } +{ "_id" : "48652", "city" : "RHODES", "loc" : [ -84.213402, 43.851745 ], "pop" : 2034, "state" : "MI" } +{ "_id" : "48653", "city" : "ROSCOMMON", "loc" : [ -84.66009200000001, 44.483908 ], "pop" : 8311, "state" : "MI" } +{ "_id" : "48654", "city" : "ROSE CITY", "loc" : [ -84.125562, 44.41672 ], "pop" : 2962, "state" : "MI" } +{ "_id" : "48655", "city" : "SAINT CHARLES", "loc" : [ -84.159785, 43.286271 ], "pop" : 6272, "state" : "MI" } +{ "_id" : "48656", "city" : "SAINT HELEN", "loc" : [ -84.42470400000001, 44.366489 ], "pop" : 3686, "state" : "MI" } +{ "_id" : "48657", "city" : "SANFORD", "loc" : [ -84.39544600000001, 43.720352 ], "pop" : 5154, "state" : "MI" } +{ "_id" : "48658", "city" : "STANDISH", "loc" : [ -83.943297, 43.973287 ], "pop" : 5314, "state" : "MI" } +{ "_id" : "48659", "city" : "STERLING", "loc" : [ -84.012567, 44.067837 ], "pop" : 2855, "state" : "MI" } +{ "_id" : "48661", "city" : "WEST BRANCH", "loc" : [ -84.228623, 44.279032 ], "pop" : 7739, "state" : "MI" } +{ "_id" : "48662", "city" : "WHEELER", "loc" : [ -84.424335, 43.396224 ], "pop" : 2144, "state" : "MI" } +{ "_id" : "48701", "city" : "AKRON", "loc" : [ -83.53926199999999, 43.584373 ], "pop" : 1694, "state" : "MI" } +{ "_id" : "48703", "city" : "AU GRES", "loc" : [ -83.70202399999999, 44.033802 ], "pop" : 1568, "state" : "MI" } +{ "_id" : "48705", "city" : "BARTON CITY", "loc" : [ -83.599372, 44.701956 ], "pop" : 755, "state" : "MI" } +{ "_id" : "48706", "city" : "UNIVERSITY CENTE", "loc" : [ -83.91988499999999, 43.612165 ], "pop" : 41677, "state" : "MI" } +{ "_id" : "48708", "city" : "BAY CITY", "loc" : [ -83.878073, 43.58205 ], "pop" : 29918, "state" : "MI" } +{ "_id" : "48720", "city" : "BAY PORT", "loc" : [ -83.35246100000001, 43.837744 ], "pop" : 1693, "state" : "MI" } +{ "_id" : "48721", "city" : "BLACK RIVER", "loc" : [ -83.34071, 44.813842 ], "pop" : 373, "state" : "MI" } +{ "_id" : "48722", "city" : "BRIDGEPORT", "loc" : [ -83.854906, 43.355309 ], "pop" : 3792, "state" : "MI" } +{ "_id" : "48723", "city" : "CARO", "loc" : [ -83.38346900000001, 43.483272 ], "pop" : 11389, "state" : "MI" } +{ "_id" : "48725", "city" : "CASEVILLE", "loc" : [ -83.265924, 43.94292 ], "pop" : 2939, "state" : "MI" } +{ "_id" : "48726", "city" : "CASS CITY", "loc" : [ -83.173264, 43.579677 ], "pop" : 7414, "state" : "MI" } +{ "_id" : "48727", "city" : "CLIFFORD", "loc" : [ -83.174105, 43.309953 ], "pop" : 1444, "state" : "MI" } +{ "_id" : "48728", "city" : "CURRAN", "loc" : [ -83.83198899999999, 44.733606 ], "pop" : 188, "state" : "MI" } +{ "_id" : "48729", "city" : "DEFORD", "loc" : [ -83.170244, 43.473482 ], "pop" : 556, "state" : "MI" } +{ "_id" : "48730", "city" : "EAST TAWAS", "loc" : [ -83.47762899999999, 44.300823 ], "pop" : 5006, "state" : "MI" } +{ "_id" : "48731", "city" : "ELKTON", "loc" : [ -83.178642, 43.834437 ], "pop" : 2292, "state" : "MI" } +{ "_id" : "48732", "city" : "ESSEXVILLE", "loc" : [ -83.821659, 43.606908 ], "pop" : 12019, "state" : "MI" } +{ "_id" : "48733", "city" : "FAIRGROVE", "loc" : [ -83.583534, 43.512574 ], "pop" : 3175, "state" : "MI" } +{ "_id" : "48734", "city" : "FRANKENMUTH", "loc" : [ -83.74748200000001, 43.340965 ], "pop" : 6931, "state" : "MI" } +{ "_id" : "48735", "city" : "GAGETOWN", "loc" : [ -83.262788, 43.654251 ], "pop" : 759, "state" : "MI" } +{ "_id" : "48737", "city" : "GLENNIE", "loc" : [ -83.689948, 44.558234 ], "pop" : 1153, "state" : "MI" } +{ "_id" : "48738", "city" : "GREENBUSH", "loc" : [ -83.326883, 44.548044 ], "pop" : 1121, "state" : "MI" } +{ "_id" : "48739", "city" : "HALE", "loc" : [ -83.83594100000001, 44.38189 ], "pop" : 3317, "state" : "MI" } +{ "_id" : "48740", "city" : "HARRISVILLE", "loc" : [ -83.34242999999999, 44.654595 ], "pop" : 2250, "state" : "MI" } +{ "_id" : "48741", "city" : "KINGSTON", "loc" : [ -83.184727, 43.398153 ], "pop" : 2475, "state" : "MI" } +{ "_id" : "48742", "city" : "LINCOLN", "loc" : [ -83.39466899999999, 44.711124 ], "pop" : 1167, "state" : "MI" } +{ "_id" : "48743", "city" : "LONG LAKE", "loc" : [ -83.817058, 44.448465 ], "pop" : 349, "state" : "MI" } +{ "_id" : "48744", "city" : "MAYVILLE", "loc" : [ -83.372529, 43.356156 ], "pop" : 4271, "state" : "MI" } +{ "_id" : "48745", "city" : "MIKADO", "loc" : [ -83.435518, 44.583275 ], "pop" : 1392, "state" : "MI" } +{ "_id" : "48746", "city" : "MILLINGTON", "loc" : [ -83.561944, 43.271772 ], "pop" : 8752, "state" : "MI" } +{ "_id" : "48747", "city" : "MUNGER", "loc" : [ -83.76722100000001, 43.528585 ], "pop" : 1898, "state" : "MI" } +{ "_id" : "48748", "city" : "NATIONAL CITY", "loc" : [ -83.683948, 44.313746 ], "pop" : 1823, "state" : "MI" } +{ "_id" : "48749", "city" : "OMER", "loc" : [ -83.842956, 44.049939 ], "pop" : 965, "state" : "MI" } +{ "_id" : "48750", "city" : "OSCODA", "loc" : [ -83.361908, 44.446485 ], "pop" : 14188, "state" : "MI" } +{ "_id" : "48754", "city" : "OWENDALE", "loc" : [ -83.23070300000001, 43.720648 ], "pop" : 1833, "state" : "MI" } +{ "_id" : "48755", "city" : "PIGEON", "loc" : [ -83.275508, 43.817909 ], "pop" : 1891, "state" : "MI" } +{ "_id" : "48756", "city" : "PRESCOTT", "loc" : [ -84.021197, 44.20999 ], "pop" : 4816, "state" : "MI" } +{ "_id" : "48757", "city" : "REESE", "loc" : [ -83.70152899999999, 43.453094 ], "pop" : 2830, "state" : "MI" } +{ "_id" : "48759", "city" : "SEBEWAING", "loc" : [ -83.436622, 43.728888 ], "pop" : 3203, "state" : "MI" } +{ "_id" : "48760", "city" : "SILVERWOOD", "loc" : [ -83.271974, 43.31413 ], "pop" : 964, "state" : "MI" } +{ "_id" : "48761", "city" : "SOUTH BRANCH", "loc" : [ -83.868574, 44.501403 ], "pop" : 968, "state" : "MI" } +{ "_id" : "48762", "city" : "SPRUCE", "loc" : [ -83.504391, 44.822443 ], "pop" : 1531, "state" : "MI" } +{ "_id" : "48763", "city" : "TAWAS CITY", "loc" : [ -83.544905, 44.267485 ], "pop" : 3868, "state" : "MI" } +{ "_id" : "48765", "city" : "TURNER", "loc" : [ -83.650679, 44.10543 ], "pop" : 2664, "state" : "MI" } +{ "_id" : "48766", "city" : "TWINING", "loc" : [ -83.849118, 44.12929 ], "pop" : 934, "state" : "MI" } +{ "_id" : "48767", "city" : "UNIONVILLE", "loc" : [ -83.469898, 43.647341 ], "pop" : 2111, "state" : "MI" } +{ "_id" : "48768", "city" : "VASSAR", "loc" : [ -83.58444900000001, 43.369052 ], "pop" : 9979, "state" : "MI" } +{ "_id" : "48770", "city" : "WHITTEMORE", "loc" : [ -83.806842, 44.232514 ], "pop" : 1754, "state" : "MI" } +{ "_id" : "48801", "city" : "ALMA", "loc" : [ -84.663484, 43.380877 ], "pop" : 11018, "state" : "MI" } +{ "_id" : "48806", "city" : "ASHLEY", "loc" : [ -84.48796, 43.189103 ], "pop" : 2278, "state" : "MI" } +{ "_id" : "48807", "city" : "BANNISTER", "loc" : [ -84.359679, 43.161537 ], "pop" : 1499, "state" : "MI" } +{ "_id" : "48808", "city" : "BATH", "loc" : [ -84.45454700000001, 42.820563 ], "pop" : 3695, "state" : "MI" } +{ "_id" : "48809", "city" : "BELDING", "loc" : [ -85.231272, 43.088546 ], "pop" : 8995, "state" : "MI" } +{ "_id" : "48811", "city" : "CARSON CITY", "loc" : [ -84.865334, 43.169496 ], "pop" : 4190, "state" : "MI" } +{ "_id" : "48813", "city" : "CHARLOTTE", "loc" : [ -84.83518100000001, 42.570169 ], "pop" : 17424, "state" : "MI" } +{ "_id" : "48815", "city" : "CLARKSVILLE", "loc" : [ -85.24938400000001, 42.830177 ], "pop" : 2027, "state" : "MI" } +{ "_id" : "48817", "city" : "CORUNNA", "loc" : [ -84.027618, 43.041402 ], "pop" : 3906, "state" : "MI" } +{ "_id" : "48818", "city" : "CRYSTAL", "loc" : [ -84.899328, 43.262382 ], "pop" : 2279, "state" : "MI" } +{ "_id" : "48819", "city" : "DANSVILLE", "loc" : [ -84.293932, 42.550485 ], "pop" : 2338, "state" : "MI" } +{ "_id" : "48820", "city" : "DEWITT", "loc" : [ -84.579654, 42.842784 ], "pop" : 10811, "state" : "MI" } +{ "_id" : "48821", "city" : "DIMONDALE", "loc" : [ -84.64859300000001, 42.650094 ], "pop" : 5131, "state" : "MI" } +{ "_id" : "48822", "city" : "EAGLE", "loc" : [ -84.758971, 42.826306 ], "pop" : 1937, "state" : "MI" } +{ "_id" : "48823", "city" : "EAST LANSING", "loc" : [ -84.476409, 42.738805 ], "pop" : 61997, "state" : "MI" } +{ "_id" : "48827", "city" : "EATON RAPIDS", "loc" : [ -84.65654499999999, 42.516624 ], "pop" : 12987, "state" : "MI" } +{ "_id" : "48829", "city" : "EDMORE", "loc" : [ -85.028003, 43.411578 ], "pop" : 2515, "state" : "MI" } +{ "_id" : "48831", "city" : "CARLAND", "loc" : [ -84.39096499999999, 43.086918 ], "pop" : 2487, "state" : "MI" } +{ "_id" : "48832", "city" : "ELWELL", "loc" : [ -84.763103, 43.410565 ], "pop" : 1006, "state" : "MI" } +{ "_id" : "48834", "city" : "FENWICK", "loc" : [ -85.06656599999999, 43.149682 ], "pop" : 1440, "state" : "MI" } +{ "_id" : "48835", "city" : "FOWLER", "loc" : [ -84.759969, 42.994144 ], "pop" : 2253, "state" : "MI" } +{ "_id" : "48836", "city" : "FOWLERVILLE", "loc" : [ -84.072085, 42.661438 ], "pop" : 8519, "state" : "MI" } +{ "_id" : "48837", "city" : "GRAND LEDGE", "loc" : [ -84.737314, 42.752924 ], "pop" : 16000, "state" : "MI" } +{ "_id" : "48838", "city" : "GREENVILLE", "loc" : [ -85.24970500000001, 43.17926 ], "pop" : 12208, "state" : "MI" } +{ "_id" : "48840", "city" : "HASLETT", "loc" : [ -84.398887, 42.753088 ], "pop" : 10679, "state" : "MI" } +{ "_id" : "48841", "city" : "HENDERSON", "loc" : [ -84.185777, 43.081708 ], "pop" : 534, "state" : "MI" } +{ "_id" : "48842", "city" : "HOLT", "loc" : [ -84.524232, 42.639401 ], "pop" : 15960, "state" : "MI" } +{ "_id" : "48843", "city" : "HOWELL", "loc" : [ -83.92480999999999, 42.615933 ], "pop" : 28075, "state" : "MI" } +{ "_id" : "48845", "city" : "HUBBARDSTON", "loc" : [ -84.81728200000001, 43.082776 ], "pop" : 1407, "state" : "MI" } +{ "_id" : "48846", "city" : "IONIA", "loc" : [ -85.07098499999999, 42.98592 ], "pop" : 18602, "state" : "MI" } +{ "_id" : "48847", "city" : "ITHACA", "loc" : [ -84.60883, 43.282808 ], "pop" : 6418, "state" : "MI" } +{ "_id" : "48848", "city" : "LAINGSBURG", "loc" : [ -84.352991, 42.86271 ], "pop" : 8214, "state" : "MI" } +{ "_id" : "48849", "city" : "LAKE ODESSA", "loc" : [ -85.135667, 42.786335 ], "pop" : 5386, "state" : "MI" } +{ "_id" : "48850", "city" : "LAKEVIEW", "loc" : [ -85.292421, 43.42694 ], "pop" : 6000, "state" : "MI" } +{ "_id" : "48851", "city" : "LYONS", "loc" : [ -84.92094299999999, 42.963429 ], "pop" : 2488, "state" : "MI" } +{ "_id" : "48854", "city" : "MASON", "loc" : [ -84.45609, 42.579588 ], "pop" : 17286, "state" : "MI" } +{ "_id" : "48856", "city" : "MIDDLETON", "loc" : [ -84.75522100000001, 43.168911 ], "pop" : 1181, "state" : "MI" } +{ "_id" : "48857", "city" : "MORRICE", "loc" : [ -84.176771, 42.83851 ], "pop" : 718, "state" : "MI" } +{ "_id" : "48858", "city" : "MOUNT PLEASANT", "loc" : [ -84.773571, 43.601295 ], "pop" : 33732, "state" : "MI" } +{ "_id" : "48860", "city" : "MUIR", "loc" : [ -84.93908999999999, 43.043864 ], "pop" : 1885, "state" : "MI" } +{ "_id" : "48861", "city" : "MULLIKEN", "loc" : [ -84.89791099999999, 42.737657 ], "pop" : 1903, "state" : "MI" } +{ "_id" : "48864", "city" : "OKEMOS", "loc" : [ -84.418696, 42.705341 ], "pop" : 17587, "state" : "MI" } +{ "_id" : "48865", "city" : "ORLEANS", "loc" : [ -85.116547, 43.089459 ], "pop" : 1678, "state" : "MI" } +{ "_id" : "48866", "city" : "OVID", "loc" : [ -84.36493900000001, 42.996927 ], "pop" : 5004, "state" : "MI" } +{ "_id" : "48867", "city" : "OWOSSO", "loc" : [ -84.159486, 42.993407 ], "pop" : 29958, "state" : "MI" } +{ "_id" : "48871", "city" : "PERRINTON", "loc" : [ -84.66598399999999, 43.16492 ], "pop" : 1791, "state" : "MI" } +{ "_id" : "48872", "city" : "PERRY", "loc" : [ -84.231346, 42.820012 ], "pop" : 5746, "state" : "MI" } +{ "_id" : "48873", "city" : "PEWAMO", "loc" : [ -84.849217, 43.000747 ], "pop" : 654, "state" : "MI" } +{ "_id" : "48875", "city" : "PORTLAND", "loc" : [ -84.913933, 42.862414 ], "pop" : 8824, "state" : "MI" } +{ "_id" : "48876", "city" : "POTTERVILLE", "loc" : [ -84.734589, 42.639779 ], "pop" : 2795, "state" : "MI" } +{ "_id" : "48877", "city" : "RIVERDALE", "loc" : [ -84.826607, 43.409817 ], "pop" : 1211, "state" : "MI" } +{ "_id" : "48878", "city" : "ROSEBUSH", "loc" : [ -84.783299, 43.68427 ], "pop" : 2025, "state" : "MI" } +{ "_id" : "48879", "city" : "SAINT JOHNS", "loc" : [ -84.571934, 43.005924 ], "pop" : 16472, "state" : "MI" } +{ "_id" : "48880", "city" : "SAINT LOUIS", "loc" : [ -84.59523900000001, 43.42777 ], "pop" : 7552, "state" : "MI" } +{ "_id" : "48881", "city" : "SARANAC", "loc" : [ -85.229938, 42.928534 ], "pop" : 5911, "state" : "MI" } +{ "_id" : "48883", "city" : "SHEPHERD", "loc" : [ -84.587317, 43.565668 ], "pop" : 17397, "state" : "MI" } +{ "_id" : "48884", "city" : "SHERIDAN", "loc" : [ -85.04683799999999, 43.212632 ], "pop" : 3030, "state" : "MI" } +{ "_id" : "48885", "city" : "SIDNEY", "loc" : [ -85.120671, 43.23579 ], "pop" : 642, "state" : "MI" } +{ "_id" : "48886", "city" : "SIX LAKES", "loc" : [ -85.141569, 43.433714 ], "pop" : 2132, "state" : "MI" } +{ "_id" : "48888", "city" : "STANTON", "loc" : [ -85.099548, 43.305841 ], "pop" : 6997, "state" : "MI" } +{ "_id" : "48889", "city" : "SUMNER", "loc" : [ -84.790662, 43.309144 ], "pop" : 2771, "state" : "MI" } +{ "_id" : "48890", "city" : "SUNFIELD", "loc" : [ -84.98130500000001, 42.769314 ], "pop" : 2282, "state" : "MI" } +{ "_id" : "48891", "city" : "VESTABURG", "loc" : [ -84.908168, 43.387025 ], "pop" : 3540, "state" : "MI" } +{ "_id" : "48892", "city" : "WEBBERVILLE", "loc" : [ -84.17013, 42.662981 ], "pop" : 4561, "state" : "MI" } +{ "_id" : "48893", "city" : "WEIDMAN", "loc" : [ -85.00456699999999, 43.645284 ], "pop" : 708, "state" : "MI" } +{ "_id" : "48894", "city" : "WESTPHALIA", "loc" : [ -84.785567, 42.912308 ], "pop" : 2099, "state" : "MI" } +{ "_id" : "48895", "city" : "WILLIAMSTON", "loc" : [ -84.292596, 42.696652 ], "pop" : 9270, "state" : "MI" } +{ "_id" : "48897", "city" : "WOODLAND", "loc" : [ -85.13261, 42.705654 ], "pop" : 1405, "state" : "MI" } +{ "_id" : "48906", "city" : "LANSING", "loc" : [ -84.558043, 42.763464 ], "pop" : 28434, "state" : "MI" } +{ "_id" : "48910", "city" : "LANSING", "loc" : [ -84.54900499999999, 42.700784 ], "pop" : 37654, "state" : "MI" } +{ "_id" : "48911", "city" : "LANSING", "loc" : [ -84.577168, 42.679727 ], "pop" : 39930, "state" : "MI" } +{ "_id" : "48912", "city" : "LANSING", "loc" : [ -84.52441399999999, 42.737115 ], "pop" : 19898, "state" : "MI" } +{ "_id" : "48915", "city" : "LANSING", "loc" : [ -84.570398, 42.739074 ], "pop" : 11703, "state" : "MI" } +{ "_id" : "48917", "city" : "LANSING", "loc" : [ -84.62439000000001, 42.737621 ], "pop" : 28475, "state" : "MI" } +{ "_id" : "48933", "city" : "LANSING", "loc" : [ -84.557142, 42.733429 ], "pop" : 2780, "state" : "MI" } +{ "_id" : "49001", "city" : "KALAMAZOO", "loc" : [ -85.545653, 42.273565 ], "pop" : 45278, "state" : "MI" } +{ "_id" : "49002", "city" : "KALAMAZOO", "loc" : [ -85.595691, 42.207482 ], "pop" : 40439, "state" : "MI" } +{ "_id" : "49004", "city" : "PARCHMENT", "loc" : [ -85.54195900000001, 42.326538 ], "pop" : 15968, "state" : "MI" } +{ "_id" : "49007", "city" : "KALAMAZOO", "loc" : [ -85.613722, 42.295688 ], "pop" : 44854, "state" : "MI" } +{ "_id" : "49008", "city" : "KALAMAZOO", "loc" : [ -85.609645, 42.262432 ], "pop" : 19435, "state" : "MI" } +{ "_id" : "49009", "city" : "KALAMAZOO", "loc" : [ -85.686333, 42.280947 ], "pop" : 22218, "state" : "MI" } +{ "_id" : "49010", "city" : "ALLEGAN", "loc" : [ -85.86608, 42.525609 ], "pop" : 15532, "state" : "MI" } +{ "_id" : "49011", "city" : "ATHENS", "loc" : [ -85.231742, 42.102962 ], "pop" : 2436, "state" : "MI" } +{ "_id" : "49012", "city" : "AUGUSTA", "loc" : [ -85.354012, 42.356313 ], "pop" : 2896, "state" : "MI" } +{ "_id" : "49013", "city" : "BANGOR", "loc" : [ -86.131096, 42.33122 ], "pop" : 8743, "state" : "MI" } +{ "_id" : "49015", "city" : "BATTLE CREEK", "loc" : [ -85.212825, 42.302806 ], "pop" : 29828, "state" : "MI" } +{ "_id" : "49017", "city" : "BATTLE CREEK", "loc" : [ -85.181106, 42.332218 ], "pop" : 62035, "state" : "MI" } +{ "_id" : "49021", "city" : "BELLEVUE", "loc" : [ -85.048867, 42.452474 ], "pop" : 6911, "state" : "MI" } +{ "_id" : "49022", "city" : "BENTON HARBOR", "loc" : [ -86.423417, 42.108594 ], "pop" : 37550, "state" : "MI" } +{ "_id" : "49026", "city" : "BLOOMINGDALE", "loc" : [ -85.956757, 42.384232 ], "pop" : 1958, "state" : "MI" } +{ "_id" : "49028", "city" : "BRONSON", "loc" : [ -85.183767, 41.864316 ], "pop" : 7024, "state" : "MI" } +{ "_id" : "49029", "city" : "BURLINGTON", "loc" : [ -85.105, 42.123859 ], "pop" : 1898, "state" : "MI" } +{ "_id" : "49030", "city" : "BURR OAK", "loc" : [ -85.334536, 41.845898 ], "pop" : 3192, "state" : "MI" } +{ "_id" : "49031", "city" : "CASSOPOLIS", "loc" : [ -85.992273, 41.896805 ], "pop" : 6622, "state" : "MI" } +{ "_id" : "49032", "city" : "CENTREVILLE", "loc" : [ -85.49629899999999, 41.921685 ], "pop" : 3606, "state" : "MI" } +{ "_id" : "49033", "city" : "CERESCO", "loc" : [ -85.11284999999999, 42.212741 ], "pop" : 1128, "state" : "MI" } +{ "_id" : "49034", "city" : "CLIMAX", "loc" : [ -85.323832, 42.233979 ], "pop" : 983, "state" : "MI" } +{ "_id" : "49036", "city" : "COLDWATER", "loc" : [ -85.00568199999999, 41.925464 ], "pop" : 20278, "state" : "MI" } +{ "_id" : "49038", "city" : "COLOMA", "loc" : [ -86.32247, 42.202952 ], "pop" : 9987, "state" : "MI" } +{ "_id" : "49040", "city" : "COLON", "loc" : [ -85.33058800000001, 41.957605 ], "pop" : 2800, "state" : "MI" } +{ "_id" : "49042", "city" : "CONSTANTINE", "loc" : [ -85.657094, 41.846029 ], "pop" : 5737, "state" : "MI" } +{ "_id" : "49043", "city" : "COVERT", "loc" : [ -86.274294, 42.291074 ], "pop" : 2544, "state" : "MI" } +{ "_id" : "49045", "city" : "DECATUR", "loc" : [ -86.03380799999999, 42.101219 ], "pop" : 8320, "state" : "MI" } +{ "_id" : "49046", "city" : "DELTON", "loc" : [ -85.406706, 42.514102 ], "pop" : 7306, "state" : "MI" } +{ "_id" : "49047", "city" : "DOWAGIAC", "loc" : [ -86.116766, 41.990965 ], "pop" : 14921, "state" : "MI" } +{ "_id" : "49050", "city" : "DOWLING", "loc" : [ -85.24945200000001, 42.501478 ], "pop" : 909, "state" : "MI" } +{ "_id" : "49051", "city" : "EAST LEROY", "loc" : [ -85.231083, 42.196125 ], "pop" : 1915, "state" : "MI" } +{ "_id" : "49052", "city" : "FULTON", "loc" : [ -85.322659, 42.139086 ], "pop" : 720, "state" : "MI" } +{ "_id" : "49053", "city" : "GALESBURG", "loc" : [ -85.423665, 42.294843 ], "pop" : 4820, "state" : "MI" } +{ "_id" : "49055", "city" : "GOBLES", "loc" : [ -85.853649, 42.370182 ], "pop" : 4476, "state" : "MI" } +{ "_id" : "49056", "city" : "GRAND JUNCTION", "loc" : [ -86.054052, 42.376081 ], "pop" : 2100, "state" : "MI" } +{ "_id" : "49057", "city" : "HARTFORD", "loc" : [ -86.16870299999999, 42.208807 ], "pop" : 5826, "state" : "MI" } +{ "_id" : "49058", "city" : "HASTINGS", "loc" : [ -85.29368700000001, 42.643007 ], "pop" : 15043, "state" : "MI" } +{ "_id" : "49060", "city" : "HICKORY CORNERS", "loc" : [ -85.399784, 42.423682 ], "pop" : 1823, "state" : "MI" } +{ "_id" : "49061", "city" : "JONES", "loc" : [ -85.83411099999999, 41.912903 ], "pop" : 2121, "state" : "MI" } +{ "_id" : "49064", "city" : "LAWRENCE", "loc" : [ -86.052543, 42.207635 ], "pop" : 3030, "state" : "MI" } +{ "_id" : "49065", "city" : "LAWTON", "loc" : [ -85.82896599999999, 42.154462 ], "pop" : 5933, "state" : "MI" } +{ "_id" : "49066", "city" : "LEONIDAS", "loc" : [ -85.349683, 42.029394 ], "pop" : 765, "state" : "MI" } +{ "_id" : "49067", "city" : "MARCELLUS", "loc" : [ -85.798776, 42.027461 ], "pop" : 3481, "state" : "MI" } +{ "_id" : "49068", "city" : "MARSHALL", "loc" : [ -84.95828, 42.272047 ], "pop" : 14844, "state" : "MI" } +{ "_id" : "49070", "city" : "MARTIN", "loc" : [ -85.610646, 42.548321 ], "pop" : 2366, "state" : "MI" } +{ "_id" : "49071", "city" : "MATTAWAN", "loc" : [ -85.794281, 42.245069 ], "pop" : 6461, "state" : "MI" } +{ "_id" : "49072", "city" : "MENDON", "loc" : [ -85.472697, 42.014262 ], "pop" : 3598, "state" : "MI" } +{ "_id" : "49073", "city" : "NASHVILLE", "loc" : [ -85.122029, 42.593721 ], "pop" : 5517, "state" : "MI" } +{ "_id" : "49076", "city" : "OLIVET", "loc" : [ -84.897312, 42.445947 ], "pop" : 4084, "state" : "MI" } +{ "_id" : "49078", "city" : "OTSEGO", "loc" : [ -85.703497, 42.472334 ], "pop" : 10614, "state" : "MI" } +{ "_id" : "49079", "city" : "PAW PAW", "loc" : [ -85.900488, 42.234931 ], "pop" : 11455, "state" : "MI" } +{ "_id" : "49080", "city" : "PLAINWELL", "loc" : [ -85.59936, 42.454379 ], "pop" : 15308, "state" : "MI" } +{ "_id" : "49082", "city" : "QUINCY", "loc" : [ -84.849295, 41.970694 ], "pop" : 8671, "state" : "MI" } +{ "_id" : "49083", "city" : "RICHLAND", "loc" : [ -85.44465099999999, 42.375689 ], "pop" : 5676, "state" : "MI" } +{ "_id" : "49085", "city" : "SAINT JOSEPH", "loc" : [ -86.478341, 42.063959 ], "pop" : 22984, "state" : "MI" } +{ "_id" : "49087", "city" : "SCHOOLCRAFT", "loc" : [ -85.663741, 42.132857 ], "pop" : 5324, "state" : "MI" } +{ "_id" : "49088", "city" : "SCOTTS", "loc" : [ -85.468492, 42.181892 ], "pop" : 3249, "state" : "MI" } +{ "_id" : "49089", "city" : "SHERWOOD", "loc" : [ -85.240797, 42.010736 ], "pop" : 2310, "state" : "MI" } +{ "_id" : "49090", "city" : "SOUTH HAVEN", "loc" : [ -86.25420699999999, 42.404096 ], "pop" : 12604, "state" : "MI" } +{ "_id" : "49091", "city" : "STURGIS", "loc" : [ -85.426357, 41.808934 ], "pop" : 16597, "state" : "MI" } +{ "_id" : "49092", "city" : "TEKONSHA", "loc" : [ -84.99260200000001, 42.086326 ], "pop" : 2747, "state" : "MI" } +{ "_id" : "49093", "city" : "THREE RIVERS", "loc" : [ -85.637125, 41.959598 ], "pop" : 17021, "state" : "MI" } +{ "_id" : "49094", "city" : "UNION CITY", "loc" : [ -85.135637, 42.055134 ], "pop" : 3600, "state" : "MI" } +{ "_id" : "49095", "city" : "VANDALIA", "loc" : [ -85.875546, 41.895506 ], "pop" : 1839, "state" : "MI" } +{ "_id" : "49096", "city" : "VERMONTVILLE", "loc" : [ -85.01098399999999, 42.63921 ], "pop" : 2978, "state" : "MI" } +{ "_id" : "49097", "city" : "VICKSBURG", "loc" : [ -85.502376, 42.120896 ], "pop" : 8152, "state" : "MI" } +{ "_id" : "49098", "city" : "WATERVLIET", "loc" : [ -86.26036999999999, 42.193804 ], "pop" : 4793, "state" : "MI" } +{ "_id" : "49099", "city" : "WHITE PIGEON", "loc" : [ -85.67501, 41.792891 ], "pop" : 6161, "state" : "MI" } +{ "_id" : "49101", "city" : "BARODA", "loc" : [ -86.491274, 41.948818 ], "pop" : 3030, "state" : "MI" } +{ "_id" : "49102", "city" : "BERRIEN CENTER", "loc" : [ -86.285039, 41.948439 ], "pop" : 2324, "state" : "MI" } +{ "_id" : "49103", "city" : "BERRIEN SPRINGS", "loc" : [ -86.35401299999999, 41.948002 ], "pop" : 11600, "state" : "MI" } +{ "_id" : "49106", "city" : "BRIDGMAN", "loc" : [ -86.554334, 41.936199 ], "pop" : 4073, "state" : "MI" } +{ "_id" : "49107", "city" : "BUCHANAN", "loc" : [ -86.37084400000001, 41.83269 ], "pop" : 10342, "state" : "MI" } +{ "_id" : "49111", "city" : "EAU CLAIRE", "loc" : [ -86.29715400000001, 42.015134 ], "pop" : 4007, "state" : "MI" } +{ "_id" : "49112", "city" : "EDWARDSBURG", "loc" : [ -86.026252, 41.791258 ], "pop" : 8926, "state" : "MI" } +{ "_id" : "49113", "city" : "GALIEN", "loc" : [ -86.50354400000001, 41.819758 ], "pop" : 2775, "state" : "MI" } +{ "_id" : "49116", "city" : "LAKESIDE", "loc" : [ -86.669354, 41.848459 ], "pop" : 269, "state" : "MI" } +{ "_id" : "49117", "city" : "GRAND BEACH", "loc" : [ -86.74663, 41.785591 ], "pop" : 4389, "state" : "MI" } +{ "_id" : "49120", "city" : "NILES", "loc" : [ -86.236789, 41.820168 ], "pop" : 33750, "state" : "MI" } +{ "_id" : "49125", "city" : "SAWYER", "loc" : [ -86.588508, 41.882866 ], "pop" : 2704, "state" : "MI" } +{ "_id" : "49126", "city" : "SODUS", "loc" : [ -86.3921, 42.052082 ], "pop" : 1404, "state" : "MI" } +{ "_id" : "49127", "city" : "STEVENSVILLE", "loc" : [ -86.51186199999999, 42.021968 ], "pop" : 9354, "state" : "MI" } +{ "_id" : "49128", "city" : "THREE OAKS", "loc" : [ -86.61541099999999, 41.814976 ], "pop" : 3994, "state" : "MI" } +{ "_id" : "49129", "city" : "UNION PIER", "loc" : [ -86.691146, 41.82555 ], "pop" : 979, "state" : "MI" } +{ "_id" : "49130", "city" : "UNION", "loc" : [ -85.85290500000001, 41.782678 ], "pop" : 1617, "state" : "MI" } +{ "_id" : "49201", "city" : "JACKSON", "loc" : [ -84.38747600000001, 42.254522 ], "pop" : 42076, "state" : "MI" } +{ "_id" : "49202", "city" : "JACKSON", "loc" : [ -84.408348, 42.263431 ], "pop" : 20387, "state" : "MI" } +{ "_id" : "49203", "city" : "JACKSON", "loc" : [ -84.41321000000001, 42.228963 ], "pop" : 38466, "state" : "MI" } +{ "_id" : "49220", "city" : "ADDISON", "loc" : [ -84.312229, 42.003604 ], "pop" : 2506, "state" : "MI" } +{ "_id" : "49221", "city" : "ADRIAN", "loc" : [ -84.044556, 41.900516 ], "pop" : 33769, "state" : "MI" } +{ "_id" : "49224", "city" : "ALBION", "loc" : [ -84.756052, 42.258073 ], "pop" : 13514, "state" : "MI" } +{ "_id" : "49227", "city" : "ALLEN", "loc" : [ -84.76078200000001, 41.926419 ], "pop" : 1953, "state" : "MI" } +{ "_id" : "49228", "city" : "BLISSFIELD", "loc" : [ -83.877257, 41.827636 ], "pop" : 5635, "state" : "MI" } +{ "_id" : "49229", "city" : "BRITTON", "loc" : [ -83.837722, 41.988713 ], "pop" : 2553, "state" : "MI" } +{ "_id" : "49230", "city" : "BROOKLYN", "loc" : [ -84.241353, 42.10436 ], "pop" : 7155, "state" : "MI" } +{ "_id" : "49232", "city" : "CAMDEN", "loc" : [ -84.724497, 41.736149 ], "pop" : 1500, "state" : "MI" } +{ "_id" : "49233", "city" : "CEMENT CITY", "loc" : [ -84.325423, 42.060395 ], "pop" : 1313, "state" : "MI" } +{ "_id" : "49234", "city" : "CLARKLAKE", "loc" : [ -84.352056, 42.123503 ], "pop" : 2418, "state" : "MI" } +{ "_id" : "49235", "city" : "CLAYTON", "loc" : [ -84.177519, 41.868648 ], "pop" : 2000, "state" : "MI" } +{ "_id" : "49236", "city" : "CLINTON", "loc" : [ -83.944152, 42.063886 ], "pop" : 5222, "state" : "MI" } +{ "_id" : "49237", "city" : "CONCORD", "loc" : [ -84.652928, 42.187501 ], "pop" : 3375, "state" : "MI" } +{ "_id" : "49238", "city" : "DEERFIELD", "loc" : [ -83.784739, 41.890912 ], "pop" : 1427, "state" : "MI" } +{ "_id" : "49240", "city" : "GRASS LAKE", "loc" : [ -84.194041, 42.271071 ], "pop" : 6321, "state" : "MI" } +{ "_id" : "49241", "city" : "HANOVER", "loc" : [ -84.58480900000001, 42.102521 ], "pop" : 2809, "state" : "MI" } +{ "_id" : "49242", "city" : "HILLSDALE", "loc" : [ -84.620812, 41.923954 ], "pop" : 10382, "state" : "MI" } +{ "_id" : "49245", "city" : "HOMER", "loc" : [ -84.81572, 42.141561 ], "pop" : 4934, "state" : "MI" } +{ "_id" : "49246", "city" : "HORTON", "loc" : [ -84.49759299999999, 42.119092 ], "pop" : 3099, "state" : "MI" } +{ "_id" : "49247", "city" : "HUDSON", "loc" : [ -84.338031, 41.858101 ], "pop" : 5953, "state" : "MI" } +{ "_id" : "49248", "city" : "JASPER", "loc" : [ -83.951549, 41.758956 ], "pop" : 1240, "state" : "MI" } +{ "_id" : "49249", "city" : "JEROME", "loc" : [ -84.445483, 42.048375 ], "pop" : 2686, "state" : "MI" } +{ "_id" : "49250", "city" : "JONESVILLE", "loc" : [ -84.645083, 41.979833 ], "pop" : 5671, "state" : "MI" } +{ "_id" : "49251", "city" : "LESLIE", "loc" : [ -84.420653, 42.460279 ], "pop" : 5493, "state" : "MI" } +{ "_id" : "49252", "city" : "LITCHFIELD", "loc" : [ -84.636095, 42.054039 ], "pop" : 840, "state" : "MI" } +{ "_id" : "49253", "city" : "MANITOU BEACH", "loc" : [ -84.276706, 41.967055 ], "pop" : 2714, "state" : "MI" } +{ "_id" : "49254", "city" : "MICHIGAN CENTER", "loc" : [ -84.321315, 42.226294 ], "pop" : 4013, "state" : "MI" } +{ "_id" : "49255", "city" : "MONTGOMERY", "loc" : [ -84.84964100000001, 41.792764 ], "pop" : 2260, "state" : "MI" } +{ "_id" : "49256", "city" : "MORENCI", "loc" : [ -84.219204, 41.738612 ], "pop" : 4699, "state" : "MI" } +{ "_id" : "49259", "city" : "MUNITH", "loc" : [ -84.248486, 42.370317 ], "pop" : 3078, "state" : "MI" } +{ "_id" : "49262", "city" : "NORTH ADAMS", "loc" : [ -84.520824, 41.971484 ], "pop" : 750, "state" : "MI" } +{ "_id" : "49264", "city" : "ONONDAGA", "loc" : [ -84.553501, 42.448726 ], "pop" : 1358, "state" : "MI" } +{ "_id" : "49265", "city" : "ONSTED", "loc" : [ -84.183892, 42.029533 ], "pop" : 4601, "state" : "MI" } +{ "_id" : "49266", "city" : "OSSEO", "loc" : [ -84.597388, 41.838413 ], "pop" : 7025, "state" : "MI" } +{ "_id" : "49267", "city" : "OTTAWA LAKE", "loc" : [ -83.685559, 41.768276 ], "pop" : 4531, "state" : "MI" } +{ "_id" : "49268", "city" : "PALMYRA", "loc" : [ -83.96567899999999, 41.872976 ], "pop" : 2289, "state" : "MI" } +{ "_id" : "49269", "city" : "PARMA", "loc" : [ -84.599886, 42.273879 ], "pop" : 6185, "state" : "MI" } +{ "_id" : "49270", "city" : "PETERSBURG", "loc" : [ -83.687673, 41.875655 ], "pop" : 4832, "state" : "MI" } +{ "_id" : "49271", "city" : "PITTSFORD", "loc" : [ -84.444016, 41.896262 ], "pop" : 2552, "state" : "MI" } +{ "_id" : "49272", "city" : "PLEASANT LAKE", "loc" : [ -84.34279100000001, 42.390343 ], "pop" : 1685, "state" : "MI" } +{ "_id" : "49274", "city" : "READING", "loc" : [ -84.76475000000001, 41.844194 ], "pop" : 2253, "state" : "MI" } +{ "_id" : "49275", "city" : "RIDGEWAY", "loc" : [ -83.778429, 42.010554 ], "pop" : 23, "state" : "MI" } +{ "_id" : "49276", "city" : "RIGA", "loc" : [ -83.80114399999999, 41.795309 ], "pop" : 961, "state" : "MI" } +{ "_id" : "49277", "city" : "RIVES JUNCTION", "loc" : [ -84.458868, 42.38871 ], "pop" : 3676, "state" : "MI" } +{ "_id" : "49279", "city" : "SAND CREEK", "loc" : [ -84.075502, 41.77928 ], "pop" : 1197, "state" : "MI" } +{ "_id" : "49281", "city" : "SOMERSET", "loc" : [ -84.39472000000001, 42.044732 ], "pop" : 1556, "state" : "MI" } +{ "_id" : "49283", "city" : "SPRING ARBOR", "loc" : [ -84.550127, 42.206861 ], "pop" : 2852, "state" : "MI" } +{ "_id" : "49284", "city" : "SPRINGPORT", "loc" : [ -84.70388800000001, 42.38055 ], "pop" : 3153, "state" : "MI" } +{ "_id" : "49285", "city" : "STOCKBRIDGE", "loc" : [ -84.175178, 42.460404 ], "pop" : 6047, "state" : "MI" } +{ "_id" : "49286", "city" : "TECUMSEH", "loc" : [ -83.955485, 41.995297 ], "pop" : 12645, "state" : "MI" } +{ "_id" : "49287", "city" : "TIPTON", "loc" : [ -84.07684, 42.036911 ], "pop" : 2473, "state" : "MI" } +{ "_id" : "49288", "city" : "WALDRON", "loc" : [ -84.449636, 41.738608 ], "pop" : 2151, "state" : "MI" } +{ "_id" : "49301", "city" : "ADA", "loc" : [ -85.480959, 42.95661 ], "pop" : 9568, "state" : "MI" } +{ "_id" : "49302", "city" : "ALTO", "loc" : [ -85.42555400000001, 42.824312 ], "pop" : 5391, "state" : "MI" } +{ "_id" : "49303", "city" : "BAILEY", "loc" : [ -85.831318, 43.276768 ], "pop" : 670, "state" : "MI" } +{ "_id" : "49304", "city" : "BALDWIN", "loc" : [ -85.881874, 43.889409 ], "pop" : 3387, "state" : "MI" } +{ "_id" : "49305", "city" : "BARRYTON", "loc" : [ -85.15465399999999, 43.750651 ], "pop" : 1824, "state" : "MI" } +{ "_id" : "49306", "city" : "BELMONT", "loc" : [ -85.586769, 43.077934 ], "pop" : 6782, "state" : "MI" } +{ "_id" : "49307", "city" : "BIG RAPIDS", "loc" : [ -85.479705, 43.689679 ], "pop" : 18049, "state" : "MI" } +{ "_id" : "49309", "city" : "BITELY", "loc" : [ -85.877799, 43.732132 ], "pop" : 1828, "state" : "MI" } +{ "_id" : "49310", "city" : "BLANCHARD", "loc" : [ -85.05885600000001, 43.522778 ], "pop" : 2473, "state" : "MI" } +{ "_id" : "49315", "city" : "BYRON CENTER", "loc" : [ -85.71360199999999, 42.801614 ], "pop" : 6861, "state" : "MI" } +{ "_id" : "49316", "city" : "DUTTON", "loc" : [ -85.562167, 42.796395 ], "pop" : 8634, "state" : "MI" } +{ "_id" : "49318", "city" : "CASNOVIA", "loc" : [ -85.825394, 43.23815 ], "pop" : 1283, "state" : "MI" } +{ "_id" : "49319", "city" : "CEDAR SPRINGS", "loc" : [ -85.545238, 43.22148 ], "pop" : 9743, "state" : "MI" } +{ "_id" : "49321", "city" : "COMSTOCK PARK", "loc" : [ -85.684468, 43.057813 ], "pop" : 11913, "state" : "MI" } +{ "_id" : "49322", "city" : "CORAL", "loc" : [ -85.379245, 43.364458 ], "pop" : 895, "state" : "MI" } +{ "_id" : "49323", "city" : "DORR", "loc" : [ -85.762798, 42.723113 ], "pop" : 7782, "state" : "MI" } +{ "_id" : "49325", "city" : "FREEPORT", "loc" : [ -85.279134, 42.729703 ], "pop" : 1546, "state" : "MI" } +{ "_id" : "49326", "city" : "GOWEN", "loc" : [ -85.315941, 43.223884 ], "pop" : 6144, "state" : "MI" } +{ "_id" : "49327", "city" : "GRANT", "loc" : [ -85.836827, 43.339197 ], "pop" : 6898, "state" : "MI" } +{ "_id" : "49328", "city" : "HOPKINS", "loc" : [ -85.732195, 42.64209 ], "pop" : 2350, "state" : "MI" } +{ "_id" : "49329", "city" : "HOWARD CITY", "loc" : [ -85.485609, 43.408326 ], "pop" : 3028, "state" : "MI" } +{ "_id" : "49330", "city" : "KENT CITY", "loc" : [ -85.739949, 43.236235 ], "pop" : 3742, "state" : "MI" } +{ "_id" : "49331", "city" : "LOWELL", "loc" : [ -85.36530500000001, 42.95497 ], "pop" : 12732, "state" : "MI" } +{ "_id" : "49332", "city" : "MECOSTA", "loc" : [ -85.22803399999999, 43.681317 ], "pop" : 1939, "state" : "MI" } +{ "_id" : "49333", "city" : "MIDDLEVILLE", "loc" : [ -85.47590099999999, 42.693247 ], "pop" : 8596, "state" : "MI" } +{ "_id" : "49336", "city" : "MORLEY", "loc" : [ -85.447318, 43.505951 ], "pop" : 2875, "state" : "MI" } +{ "_id" : "49337", "city" : "NEWAYGO", "loc" : [ -85.759381, 43.419799 ], "pop" : 8091, "state" : "MI" } +{ "_id" : "49338", "city" : "PARIS", "loc" : [ -85.521348, 43.767704 ], "pop" : 3359, "state" : "MI" } +{ "_id" : "49339", "city" : "PIERSON", "loc" : [ -85.51335899999999, 43.335514 ], "pop" : 2177, "state" : "MI" } +{ "_id" : "49340", "city" : "REMUS", "loc" : [ -85.157365, 43.603249 ], "pop" : 4990, "state" : "MI" } +{ "_id" : "49341", "city" : "ROCKFORD", "loc" : [ -85.513606, 43.115217 ], "pop" : 19778, "state" : "MI" } +{ "_id" : "49342", "city" : "RODNEY", "loc" : [ -85.321884, 43.73791 ], "pop" : 1202, "state" : "MI" } +{ "_id" : "49343", "city" : "SAND LAKE", "loc" : [ -85.536655, 43.298109 ], "pop" : 4951, "state" : "MI" } +{ "_id" : "49344", "city" : "SHELBYVILLE", "loc" : [ -85.62823899999999, 42.593581 ], "pop" : 259, "state" : "MI" } +{ "_id" : "49345", "city" : "SPARTA", "loc" : [ -85.687668, 43.161867 ], "pop" : 11522, "state" : "MI" } +{ "_id" : "49346", "city" : "STANWOOD", "loc" : [ -85.444607, 43.601728 ], "pop" : 3068, "state" : "MI" } +{ "_id" : "49347", "city" : "TRUFANT", "loc" : [ -85.368489, 43.315611 ], "pop" : 1002, "state" : "MI" } +{ "_id" : "49348", "city" : "WAYLAND", "loc" : [ -85.619112, 42.664268 ], "pop" : 6756, "state" : "MI" } +{ "_id" : "49349", "city" : "WHITE CLOUD", "loc" : [ -85.75864, 43.539803 ], "pop" : 8668, "state" : "MI" } +{ "_id" : "49401", "city" : "ALLENDALE", "loc" : [ -85.924913, 42.971066 ], "pop" : 7311, "state" : "MI" } +{ "_id" : "49402", "city" : "BRANCH", "loc" : [ -86.13136900000001, 43.923296 ], "pop" : 1741, "state" : "MI" } +{ "_id" : "49403", "city" : "CONKLIN", "loc" : [ -85.853753, 43.149399 ], "pop" : 2720, "state" : "MI" } +{ "_id" : "49404", "city" : "COOPERSVILLE", "loc" : [ -85.951722, 43.06013 ], "pop" : 5962, "state" : "MI" } +{ "_id" : "49405", "city" : "CUSTER", "loc" : [ -86.220437, 43.94424 ], "pop" : 1002, "state" : "MI" } +{ "_id" : "49408", "city" : "FENNVILLE", "loc" : [ -86.124876, 42.577669 ], "pop" : 6486, "state" : "MI" } +{ "_id" : "49410", "city" : "FOUNTAIN", "loc" : [ -86.21686099999999, 44.036342 ], "pop" : 1030, "state" : "MI" } +{ "_id" : "49411", "city" : "FREE SOIL", "loc" : [ -86.265158, 44.112036 ], "pop" : 903, "state" : "MI" } +{ "_id" : "49412", "city" : "FREMONT", "loc" : [ -85.962554, 43.465196 ], "pop" : 7946, "state" : "MI" } +{ "_id" : "49415", "city" : "FRUITPORT", "loc" : [ -86.13883199999999, 43.144282 ], "pop" : 4183, "state" : "MI" } +{ "_id" : "49417", "city" : "GRAND HAVEN", "loc" : [ -86.191227, 43.037838 ], "pop" : 24103, "state" : "MI" } +{ "_id" : "49418", "city" : "GRANDVILLE", "loc" : [ -85.76187400000001, 42.89387 ], "pop" : 19467, "state" : "MI" } +{ "_id" : "49419", "city" : "HAMILTON", "loc" : [ -85.97473100000001, 42.688097 ], "pop" : 4586, "state" : "MI" } +{ "_id" : "49420", "city" : "HART", "loc" : [ -86.31415200000001, 43.70676 ], "pop" : 5548, "state" : "MI" } +{ "_id" : "49421", "city" : "HESPERIA", "loc" : [ -86.060739, 43.596513 ], "pop" : 5102, "state" : "MI" } +{ "_id" : "49423", "city" : "HOLLAND", "loc" : [ -86.116362, 42.769211 ], "pop" : 40325, "state" : "MI" } +{ "_id" : "49424", "city" : "HOLLAND", "loc" : [ -86.14263099999999, 42.813514 ], "pop" : 25798, "state" : "MI" } +{ "_id" : "49425", "city" : "HOLTON", "loc" : [ -86.150853, 43.441454 ], "pop" : 4251, "state" : "MI" } +{ "_id" : "49426", "city" : "HUDSONVILLE", "loc" : [ -85.8751, 42.874805 ], "pop" : 20122, "state" : "MI" } +{ "_id" : "49428", "city" : "JENISON", "loc" : [ -85.827603, 42.910423 ], "pop" : 23358, "state" : "MI" } +{ "_id" : "49431", "city" : "LUDINGTON", "loc" : [ -86.440253, 43.968823 ], "pop" : 13169, "state" : "MI" } +{ "_id" : "49435", "city" : "MARNE", "loc" : [ -85.84195800000001, 43.053185 ], "pop" : 2715, "state" : "MI" } +{ "_id" : "49436", "city" : "MEARS", "loc" : [ -86.453307, 43.682494 ], "pop" : 1302, "state" : "MI" } +{ "_id" : "49437", "city" : "MONTAGUE", "loc" : [ -86.373992, 43.424163 ], "pop" : 4953, "state" : "MI" } +{ "_id" : "49440", "city" : "MUSKEGON", "loc" : [ -86.249191, 43.232589 ], "pop" : 1033, "state" : "MI" } +{ "_id" : "49441", "city" : "MUSKEGON", "loc" : [ -86.273819, 43.196184 ], "pop" : 36169, "state" : "MI" } +{ "_id" : "49442", "city" : "MUSKEGON", "loc" : [ -86.188467, 43.232876 ], "pop" : 39272, "state" : "MI" } +{ "_id" : "49444", "city" : "MUSKEGON HEIGHTS", "loc" : [ -86.21620799999999, 43.195046 ], "pop" : 29295, "state" : "MI" } +{ "_id" : "49445", "city" : "NORTH MUSKEGON", "loc" : [ -86.273297, 43.282873 ], "pop" : 18797, "state" : "MI" } +{ "_id" : "49446", "city" : "NEW ERA", "loc" : [ -86.344803, 43.555578 ], "pop" : 2539, "state" : "MI" } +{ "_id" : "49447", "city" : "NEW RICHMOND", "loc" : [ -86.03798500000001, 42.662383 ], "pop" : 438, "state" : "MI" } +{ "_id" : "49448", "city" : "NUNICA", "loc" : [ -86.102768, 43.088306 ], "pop" : 3795, "state" : "MI" } +{ "_id" : "49449", "city" : "PENTWATER", "loc" : [ -86.38681800000001, 43.823713 ], "pop" : 3915, "state" : "MI" } +{ "_id" : "49450", "city" : "PULLMAN", "loc" : [ -86.079909, 42.465131 ], "pop" : 2672, "state" : "MI" } +{ "_id" : "49451", "city" : "RAVENNA", "loc" : [ -85.964816, 43.209128 ], "pop" : 5106, "state" : "MI" } +{ "_id" : "49452", "city" : "ROTHBURY", "loc" : [ -86.34464, 43.511633 ], "pop" : 1618, "state" : "MI" } +{ "_id" : "49453", "city" : "SAUGATUCK", "loc" : [ -86.194093, 42.642562 ], "pop" : 3870, "state" : "MI" } +{ "_id" : "49454", "city" : "SCOTTVILLE", "loc" : [ -86.31561499999999, 43.976692 ], "pop" : 4229, "state" : "MI" } +{ "_id" : "49455", "city" : "SHELBY", "loc" : [ -86.361503, 43.607942 ], "pop" : 4420, "state" : "MI" } +{ "_id" : "49456", "city" : "SPRING LAKE", "loc" : [ -86.19150999999999, 43.088741 ], "pop" : 14602, "state" : "MI" } +{ "_id" : "49457", "city" : "TWIN LAKE", "loc" : [ -86.16331599999999, 43.341378 ], "pop" : 7212, "state" : "MI" } +{ "_id" : "49459", "city" : "WALKERVILLE", "loc" : [ -86.08299100000001, 43.762559 ], "pop" : 309, "state" : "MI" } +{ "_id" : "49460", "city" : "WEST OLIVE", "loc" : [ -86.131726, 42.909912 ], "pop" : 6722, "state" : "MI" } +{ "_id" : "49461", "city" : "WHITEHALL", "loc" : [ -86.331453, 43.390358 ], "pop" : 6925, "state" : "MI" } +{ "_id" : "49464", "city" : "ZEELAND", "loc" : [ -86.010408, 42.825586 ], "pop" : 15649, "state" : "MI" } +{ "_id" : "49503", "city" : "GRAND RAPIDS", "loc" : [ -85.65273000000001, 42.965879 ], "pop" : 32876, "state" : "MI" } +{ "_id" : "49504", "city" : "WALKER", "loc" : [ -85.725543, 42.98392 ], "pop" : 63454, "state" : "MI" } +{ "_id" : "49505", "city" : "GRAND RAPIDS", "loc" : [ -85.630931, 43.012025 ], "pop" : 52883, "state" : "MI" } +{ "_id" : "49506", "city" : "GRAND RAPIDS", "loc" : [ -85.621317, 42.943978 ], "pop" : 36668, "state" : "MI" } +{ "_id" : "49507", "city" : "GRAND RAPIDS", "loc" : [ -85.65416999999999, 42.931788 ], "pop" : 37681, "state" : "MI" } +{ "_id" : "49508", "city" : "KENTWOOD", "loc" : [ -85.624179, 42.875653 ], "pop" : 32830, "state" : "MI" } +{ "_id" : "49509", "city" : "WYOMING", "loc" : [ -85.705775, 42.900867 ], "pop" : 57419, "state" : "MI" } +{ "_id" : "49512", "city" : "KENTWOOD", "loc" : [ -85.57815600000001, 42.89269 ], "pop" : 7823, "state" : "MI" } +{ "_id" : "49546", "city" : "GRAND RAPIDS", "loc" : [ -85.548346, 42.928029 ], "pop" : 25471, "state" : "MI" } +{ "_id" : "49548", "city" : "KENTWOOD", "loc" : [ -85.66076700000001, 42.867048 ], "pop" : 32054, "state" : "MI" } +{ "_id" : "49601", "city" : "CADILLAC", "loc" : [ -85.430046, 44.250447 ], "pop" : 18182, "state" : "MI" } +{ "_id" : "49612", "city" : "ALDEN", "loc" : [ -85.22410000000001, 44.877887 ], "pop" : 1536, "state" : "MI" } +{ "_id" : "49613", "city" : "ARCADIA", "loc" : [ -86.206057, 44.523157 ], "pop" : 937, "state" : "MI" } +{ "_id" : "49614", "city" : "BEAR LAKE", "loc" : [ -86.14249700000001, 44.431125 ], "pop" : 1965, "state" : "MI" } +{ "_id" : "49615", "city" : "BELLAIRE", "loc" : [ -85.226495, 44.976469 ], "pop" : 2031, "state" : "MI" } +{ "_id" : "49616", "city" : "BENZONIA", "loc" : [ -86.096091, 44.595502 ], "pop" : 1833, "state" : "MI" } +{ "_id" : "49617", "city" : "BEULAH", "loc" : [ -86.038346, 44.646002 ], "pop" : 2617, "state" : "MI" } +{ "_id" : "49618", "city" : "BOON", "loc" : [ -85.614383, 44.291555 ], "pop" : 388, "state" : "MI" } +{ "_id" : "49619", "city" : "BRETHREN", "loc" : [ -85.996396, 44.296596 ], "pop" : 966, "state" : "MI" } +{ "_id" : "49620", "city" : "BUCKLEY", "loc" : [ -85.693541, 44.519856 ], "pop" : 1788, "state" : "MI" } +{ "_id" : "49621", "city" : "CEDAR", "loc" : [ -85.745344, 44.836953 ], "pop" : 2853, "state" : "MI" } +{ "_id" : "49622", "city" : "CENTRAL LAKE", "loc" : [ -85.267285, 45.074796 ], "pop" : 1970, "state" : "MI" } +{ "_id" : "49623", "city" : "CHASE", "loc" : [ -85.61963900000001, 43.868172 ], "pop" : 1016, "state" : "MI" } +{ "_id" : "49625", "city" : "COPEMISH", "loc" : [ -85.88785900000001, 44.450276 ], "pop" : 927, "state" : "MI" } +{ "_id" : "49629", "city" : "ELK RAPIDS", "loc" : [ -85.408226, 44.895473 ], "pop" : 1493, "state" : "MI" } +{ "_id" : "49630", "city" : "EMPIRE", "loc" : [ -85.99253299999999, 44.84106 ], "pop" : 609, "state" : "MI" } +{ "_id" : "49631", "city" : "EVART", "loc" : [ -85.26493499999999, 43.888772 ], "pop" : 4253, "state" : "MI" } +{ "_id" : "49632", "city" : "FALMOUTH", "loc" : [ -85.01700200000001, 44.252861 ], "pop" : 1891, "state" : "MI" } +{ "_id" : "49633", "city" : "FIFE LAKE", "loc" : [ -85.253122, 44.572064 ], "pop" : 2566, "state" : "MI" } +{ "_id" : "49635", "city" : "FRANKFORT", "loc" : [ -86.22120099999999, 44.631122 ], "pop" : 3168, "state" : "MI" } +{ "_id" : "49636", "city" : "GLEN ARBOR", "loc" : [ -86.03533899999999, 44.842927 ], "pop" : 641, "state" : "MI" } +{ "_id" : "49637", "city" : "GRAWN", "loc" : [ -85.71129000000001, 44.642779 ], "pop" : 1869, "state" : "MI" } +{ "_id" : "49638", "city" : "HARRIETTA", "loc" : [ -85.73957299999999, 44.297163 ], "pop" : 651, "state" : "MI" } +{ "_id" : "49639", "city" : "HERSEY", "loc" : [ -85.40592599999999, 43.84806 ], "pop" : 1915, "state" : "MI" } +{ "_id" : "49640", "city" : "HONOR", "loc" : [ -86.037582, 44.69539 ], "pop" : 945, "state" : "MI" } +{ "_id" : "49642", "city" : "IDLEWILD", "loc" : [ -85.716036, 43.912621 ], "pop" : 1132, "state" : "MI" } +{ "_id" : "49643", "city" : "INTERLOCHEN", "loc" : [ -85.802156, 44.651769 ], "pop" : 3429, "state" : "MI" } +{ "_id" : "49644", "city" : "IRONS", "loc" : [ -85.939008, 44.096638 ], "pop" : 1245, "state" : "MI" } +{ "_id" : "49645", "city" : "KALEVA", "loc" : [ -86.04673699999999, 44.369168 ], "pop" : 1533, "state" : "MI" } +{ "_id" : "49646", "city" : "KALKASKA", "loc" : [ -85.120655, 44.73546 ], "pop" : 7387, "state" : "MI" } +{ "_id" : "49647", "city" : "KARLIN", "loc" : [ -85.79406, 44.569128 ], "pop" : 80, "state" : "MI" } +{ "_id" : "49648", "city" : "KEWADIN", "loc" : [ -85.35394100000001, 45.012574 ], "pop" : 1303, "state" : "MI" } +{ "_id" : "49649", "city" : "KINGSLEY", "loc" : [ -85.526235, 44.575644 ], "pop" : 3823, "state" : "MI" } +{ "_id" : "49650", "city" : "LAKE ANN", "loc" : [ -85.85284, 44.731736 ], "pop" : 1448, "state" : "MI" } +{ "_id" : "49651", "city" : "MOORESTOWN", "loc" : [ -85.207352, 44.361932 ], "pop" : 6225, "state" : "MI" } +{ "_id" : "49653", "city" : "LAKE LEELANAU", "loc" : [ -85.732866, 44.985602 ], "pop" : 2053, "state" : "MI" } +{ "_id" : "49654", "city" : "LELAND", "loc" : [ -86.092924, 45.010215 ], "pop" : 0, "state" : "MI" } +{ "_id" : "49655", "city" : "LEROY", "loc" : [ -85.430001, 44.045656 ], "pop" : 3386, "state" : "MI" } +{ "_id" : "49656", "city" : "LUTHER", "loc" : [ -85.682631, 44.054494 ], "pop" : 1540, "state" : "MI" } +{ "_id" : "49657", "city" : "MC BAIN", "loc" : [ -85.228252, 44.21718 ], "pop" : 3431, "state" : "MI" } +{ "_id" : "49659", "city" : "MANCELONA", "loc" : [ -85.063399, 44.911596 ], "pop" : 5447, "state" : "MI" } +{ "_id" : "49660", "city" : "STRONACH", "loc" : [ -86.28503000000001, 44.228323 ], "pop" : 14319, "state" : "MI" } +{ "_id" : "49663", "city" : "MANTON", "loc" : [ -85.42017, 44.415222 ], "pop" : 3516, "state" : "MI" } +{ "_id" : "49664", "city" : "MAPLE CITY", "loc" : [ -85.88139200000001, 44.859035 ], "pop" : 1917, "state" : "MI" } +{ "_id" : "49665", "city" : "MARION", "loc" : [ -85.15503099999999, 44.046314 ], "pop" : 5710, "state" : "MI" } +{ "_id" : "49667", "city" : "MERRITT", "loc" : [ -85.015508, 44.36843 ], "pop" : 600, "state" : "MI" } +{ "_id" : "49668", "city" : "MESICK", "loc" : [ -85.70612199999999, 44.407451 ], "pop" : 2864, "state" : "MI" } +{ "_id" : "49670", "city" : "NORTHPORT", "loc" : [ -85.617287, 45.115699 ], "pop" : 1663, "state" : "MI" } +{ "_id" : "49675", "city" : "ONEKAMA", "loc" : [ -86.209959, 44.364576 ], "pop" : 1089, "state" : "MI" } +{ "_id" : "49676", "city" : "RAPID CITY", "loc" : [ -85.294318, 44.844863 ], "pop" : 2741, "state" : "MI" } +{ "_id" : "49677", "city" : "REED CITY", "loc" : [ -85.51302800000001, 43.886808 ], "pop" : 5056, "state" : "MI" } +{ "_id" : "49679", "city" : "SEARS", "loc" : [ -85.18824600000001, 43.901747 ], "pop" : 150, "state" : "MI" } +{ "_id" : "49680", "city" : "SOUTH BOARDMAN", "loc" : [ -85.24720000000001, 44.640143 ], "pop" : 1427, "state" : "MI" } +{ "_id" : "49682", "city" : "SUTTONS BAY", "loc" : [ -85.642264, 44.965613 ], "pop" : 3422, "state" : "MI" } +{ "_id" : "49683", "city" : "THOMPSONVILLE", "loc" : [ -85.945973, 44.519833 ], "pop" : 1231, "state" : "MI" } +{ "_id" : "49684", "city" : "TRAVERSE CITY", "loc" : [ -85.618869, 44.74365 ], "pop" : 53415, "state" : "MI" } +{ "_id" : "49688", "city" : "TUSTIN", "loc" : [ -85.490143, 44.107181 ], "pop" : 1213, "state" : "MI" } +{ "_id" : "49689", "city" : "WELLSTON", "loc" : [ -85.95547500000001, 44.213266 ], "pop" : 1043, "state" : "MI" } +{ "_id" : "49690", "city" : "WILLIAMSBURG", "loc" : [ -85.434732, 44.801952 ], "pop" : 4987, "state" : "MI" } +{ "_id" : "49705", "city" : "AFTON", "loc" : [ -84.469453, 45.363684 ], "pop" : 605, "state" : "MI" } +{ "_id" : "49706", "city" : "ALANSON", "loc" : [ -84.792421, 45.440545 ], "pop" : 3681, "state" : "MI" } +{ "_id" : "49707", "city" : "ALPENA", "loc" : [ -83.4602, 45.079018 ], "pop" : 23530, "state" : "MI" } +{ "_id" : "49709", "city" : "ATLANTA", "loc" : [ -84.147982, 44.992371 ], "pop" : 2299, "state" : "MI" } +{ "_id" : "49710", "city" : "BARBEAU", "loc" : [ -84.217332, 46.284753 ], "pop" : 368, "state" : "MI" } +{ "_id" : "49712", "city" : "BOYNE CITY", "loc" : [ -85.018294, 45.205203 ], "pop" : 7244, "state" : "MI" } +{ "_id" : "49713", "city" : "BOYNE FALLS", "loc" : [ -84.89158399999999, 45.211563 ], "pop" : 2009, "state" : "MI" } +{ "_id" : "49715", "city" : "RACO", "loc" : [ -84.563841, 46.411117 ], "pop" : 871, "state" : "MI" } +{ "_id" : "49716", "city" : "BRUTUS", "loc" : [ -84.74669299999999, 45.506785 ], "pop" : 586, "state" : "MI" } +{ "_id" : "49718", "city" : "CARP LAKE", "loc" : [ -84.773453, 45.742364 ], "pop" : 1049, "state" : "MI" } +{ "_id" : "49719", "city" : "CEDARVILLE", "loc" : [ -84.348823, 46.002449 ], "pop" : 1615, "state" : "MI" } +{ "_id" : "49720", "city" : "CHARLEVOIX", "loc" : [ -85.24529800000001, 45.29934 ], "pop" : 7690, "state" : "MI" } +{ "_id" : "49721", "city" : "CHEBOYGAN", "loc" : [ -84.48672000000001, 45.608038 ], "pop" : 13854, "state" : "MI" } +{ "_id" : "49724", "city" : "DAFTER", "loc" : [ -84.39967900000001, 46.349196 ], "pop" : 2040, "state" : "MI" } +{ "_id" : "49725", "city" : "DE TOUR VILLAGE", "loc" : [ -83.939628, 45.993852 ], "pop" : 719, "state" : "MI" } +{ "_id" : "49726", "city" : "DRUMMOND ISLAND", "loc" : [ -83.736706, 46.005521 ], "pop" : 835, "state" : "MI" } +{ "_id" : "49727", "city" : "EAST JORDAN", "loc" : [ -85.138655, 45.153858 ], "pop" : 5532, "state" : "MI" } +{ "_id" : "49728", "city" : "ECKERMAN", "loc" : [ -85.162606, 46.346638 ], "pop" : 208, "state" : "MI" } +{ "_id" : "49729", "city" : "ELLSWORTH", "loc" : [ -85.26329200000001, 45.159929 ], "pop" : 1223, "state" : "MI" } +{ "_id" : "49730", "city" : "ELMIRA", "loc" : [ -84.830321, 45.034582 ], "pop" : 2807, "state" : "MI" } +{ "_id" : "49733", "city" : "FREDERIC", "loc" : [ -84.68241, 44.838217 ], "pop" : 3967, "state" : "MI" } +{ "_id" : "49735", "city" : "GAYLORD", "loc" : [ -84.67228, 45.012523 ], "pop" : 11598, "state" : "MI" } +{ "_id" : "49736", "city" : "GOETZVILLE", "loc" : [ -84.059271, 46.100976 ], "pop" : 123, "state" : "MI" } +{ "_id" : "49738", "city" : "GRAYLING", "loc" : [ -84.691321, 44.670959 ], "pop" : 7591, "state" : "MI" } +{ "_id" : "49740", "city" : "HARBOR POINT", "loc" : [ -84.98030300000001, 45.464535 ], "pop" : 5473, "state" : "MI" } +{ "_id" : "49743", "city" : "HAWKS", "loc" : [ -83.854219, 45.297467 ], "pop" : 876, "state" : "MI" } +{ "_id" : "49744", "city" : "HERRON", "loc" : [ -83.65348, 45.012367 ], "pop" : 978, "state" : "MI" } +{ "_id" : "49746", "city" : "HILLMAN", "loc" : [ -83.946781, 45.069104 ], "pop" : 3902, "state" : "MI" } +{ "_id" : "49747", "city" : "HUBBARD LAKE", "loc" : [ -83.60590500000001, 44.89467 ], "pop" : 1359, "state" : "MI" } +{ "_id" : "49749", "city" : "INDIAN RIVER", "loc" : [ -84.595578, 45.426984 ], "pop" : 2965, "state" : "MI" } +{ "_id" : "49751", "city" : "JOHANNESBURG", "loc" : [ -84.38570799999999, 45.015207 ], "pop" : 2062, "state" : "MI" } +{ "_id" : "49752", "city" : "KINROSS", "loc" : [ -84.751122, 46.416612 ], "pop" : 1070, "state" : "MI" } +{ "_id" : "49753", "city" : "LACHINE", "loc" : [ -83.749071, 45.042946 ], "pop" : 1764, "state" : "MI" } +{ "_id" : "49755", "city" : "LEVERING", "loc" : [ -84.798597, 45.637711 ], "pop" : 1251, "state" : "MI" } +{ "_id" : "49756", "city" : "LEWISTON", "loc" : [ -84.297281, 44.853758 ], "pop" : 3327, "state" : "MI" } +{ "_id" : "49757", "city" : "MACKINAC ISLAND", "loc" : [ -84.624527, 45.857837 ], "pop" : 469, "state" : "MI" } +{ "_id" : "49759", "city" : "MILLERSBURG", "loc" : [ -84.122246, 45.402164 ], "pop" : 2048, "state" : "MI" } +{ "_id" : "49760", "city" : "MORAN", "loc" : [ -85.007835, 46.044106 ], "pop" : 113, "state" : "MI" } +{ "_id" : "49762", "city" : "NAUBINWAY", "loc" : [ -85.44619, 46.126021 ], "pop" : 1297, "state" : "MI" } +{ "_id" : "49765", "city" : "ONAWAY", "loc" : [ -84.212272, 45.33654 ], "pop" : 1926, "state" : "MI" } +{ "_id" : "49766", "city" : "OSSINEKE", "loc" : [ -83.459186, 44.91038 ], "pop" : 2294, "state" : "MI" } +{ "_id" : "49768", "city" : "PARADISE", "loc" : [ -85.056247, 46.598321 ], "pop" : 515, "state" : "MI" } +{ "_id" : "49769", "city" : "PELLSTON", "loc" : [ -84.842502, 45.570285 ], "pop" : 1360, "state" : "MI" } +{ "_id" : "49770", "city" : "BAY VIEW", "loc" : [ -84.940263, 45.361268 ], "pop" : 12806, "state" : "MI" } +{ "_id" : "49774", "city" : "PICKFORD", "loc" : [ -84.36631199999999, 46.155858 ], "pop" : 624, "state" : "MI" } +{ "_id" : "49775", "city" : "POINTE AUX PINS", "loc" : [ -84.447035, 45.754888 ], "pop" : 59, "state" : "MI" } +{ "_id" : "49776", "city" : "POSEN", "loc" : [ -83.63927099999999, 45.223335 ], "pop" : 3830, "state" : "MI" } +{ "_id" : "49779", "city" : "ROGERS CITY", "loc" : [ -83.835483, 45.412306 ], "pop" : 5463, "state" : "MI" } +{ "_id" : "49780", "city" : "FIBRE", "loc" : [ -84.54934299999999, 46.200568 ], "pop" : 3242, "state" : "MI" } +{ "_id" : "49781", "city" : "SAINT IGNACE", "loc" : [ -84.70940899999999, 45.921527 ], "pop" : 5411, "state" : "MI" } +{ "_id" : "49782", "city" : "SAINT JAMES", "loc" : [ -85.531581, 45.722061 ], "pop" : 404, "state" : "MI" } +{ "_id" : "49783", "city" : "SAULT SAINTE MAR", "loc" : [ -84.346746, 46.473932 ], "pop" : 17974, "state" : "MI" } +{ "_id" : "49788", "city" : "KINCHELOE", "loc" : [ -84.46258400000001, 46.26271 ], "pop" : 6046, "state" : "MI" } +{ "_id" : "49789", "city" : "STALWART", "loc" : [ -84.155861, 46.138876 ], "pop" : 214, "state" : "MI" } +{ "_id" : "49792", "city" : "TOWER", "loc" : [ -84.303496, 45.341619 ], "pop" : 929, "state" : "MI" } +{ "_id" : "49795", "city" : "VANDERBILT", "loc" : [ -84.651134, 45.153247 ], "pop" : 1541, "state" : "MI" } +{ "_id" : "49799", "city" : "WOLVERINE", "loc" : [ -84.606477, 45.286148 ], "pop" : 1857, "state" : "MI" } +{ "_id" : "49801", "city" : "IRON MOUNTAIN", "loc" : [ -88.068257, 45.821894 ], "pop" : 18423, "state" : "MI" } +{ "_id" : "49806", "city" : "AU TRAIN", "loc" : [ -86.77932699999999, 46.428231 ], "pop" : 796, "state" : "MI" } +{ "_id" : "49807", "city" : "HARDWOOD", "loc" : [ -87.240522, 45.705411 ], "pop" : 4037, "state" : "MI" } +{ "_id" : "49812", "city" : "CARNEY", "loc" : [ -87.543896, 45.591738 ], "pop" : 1014, "state" : "MI" } +{ "_id" : "49813", "city" : "CEDAR RIVER", "loc" : [ -87.365994, 45.448475 ], "pop" : 185, "state" : "MI" } +{ "_id" : "49814", "city" : "CHAMPION", "loc" : [ -87.83058699999999, 46.468497 ], "pop" : 2774, "state" : "MI" } +{ "_id" : "49815", "city" : "CHANNING", "loc" : [ -88.07722099999999, 46.154562 ], "pop" : 522, "state" : "MI" } +{ "_id" : "49816", "city" : "LIMESTONE", "loc" : [ -86.758934, 46.294821 ], "pop" : 251, "state" : "MI" } +{ "_id" : "49817", "city" : "COOKS", "loc" : [ -86.53071799999999, 45.899665 ], "pop" : 2, "state" : "MI" } +{ "_id" : "49818", "city" : "CORNELL", "loc" : [ -87.223702, 45.910373 ], "pop" : 671, "state" : "MI" } +{ "_id" : "49820", "city" : "CURTIS", "loc" : [ -85.786466, 46.204763 ], "pop" : 523, "state" : "MI" } +{ "_id" : "49821", "city" : "DAGGETT", "loc" : [ -87.60785799999999, 45.488738 ], "pop" : 1184, "state" : "MI" } +{ "_id" : "49822", "city" : "DEERTON", "loc" : [ -87.04064, 46.483979 ], "pop" : 290, "state" : "MI" } +{ "_id" : "49825", "city" : "EBEN JUNCTION", "loc" : [ -87.032799, 46.351726 ], "pop" : 456, "state" : "MI" } +{ "_id" : "49826", "city" : "RUMELY", "loc" : [ -86.935068, 46.341867 ], "pop" : 823, "state" : "MI" } +{ "_id" : "49827", "city" : "ENGADINE", "loc" : [ -85.60046800000001, 46.204009 ], "pop" : 327, "state" : "MI" } +{ "_id" : "49829", "city" : "ESCANABA", "loc" : [ -87.08898499999999, 45.76587 ], "pop" : 21065, "state" : "MI" } +{ "_id" : "49833", "city" : "LITTLE LAKE", "loc" : [ -87.41144799999999, 46.053711 ], "pop" : 437, "state" : "MI" } +{ "_id" : "49834", "city" : "FOSTER CITY", "loc" : [ -87.804768, 46.004769 ], "pop" : 1249, "state" : "MI" } +{ "_id" : "49835", "city" : "GARDEN", "loc" : [ -86.57757599999999, 45.754867 ], "pop" : 934, "state" : "MI" } +{ "_id" : "49836", "city" : "GERMFASK", "loc" : [ -85.91589, 46.236261 ], "pop" : 542, "state" : "MI" } +{ "_id" : "49837", "city" : "BRAMPTON", "loc" : [ -87.02728399999999, 45.856402 ], "pop" : 5707, "state" : "MI" } +{ "_id" : "49838", "city" : "GOULD CITY", "loc" : [ -85.725889, 46.134544 ], "pop" : 615, "state" : "MI" } +{ "_id" : "49839", "city" : "GRAND MARAIS", "loc" : [ -85.983633, 46.652916 ], "pop" : 508, "state" : "MI" } +{ "_id" : "49840", "city" : "GULLIVER", "loc" : [ -86.021433, 46.011491 ], "pop" : 822, "state" : "MI" } +{ "_id" : "49841", "city" : "PRINCETON", "loc" : [ -87.43016, 46.291938 ], "pop" : 5377, "state" : "MI" } +{ "_id" : "49843", "city" : "K I SAWYER A F B", "loc" : [ -87.37593, 46.330811 ], "pop" : 5613, "state" : "MI" } +{ "_id" : "49847", "city" : "HERMANSVILLE", "loc" : [ -87.622659, 45.714902 ], "pop" : 1090, "state" : "MI" } +{ "_id" : "49848", "city" : "INGALLS", "loc" : [ -87.62060700000001, 45.374774 ], "pop" : 340, "state" : "MI" } +{ "_id" : "49849", "city" : "NORTH LAKE", "loc" : [ -87.682638, 46.490165 ], "pop" : 11725, "state" : "MI" } +{ "_id" : "49853", "city" : "MC MILLAN", "loc" : [ -85.730715, 46.297027 ], "pop" : 897, "state" : "MI" } +{ "_id" : "49854", "city" : "THOMPSON", "loc" : [ -86.275513, 45.982978 ], "pop" : 6753, "state" : "MI" } +{ "_id" : "49855", "city" : "BEAVER GROVE", "loc" : [ -87.389443, 46.53124 ], "pop" : 32361, "state" : "MI" } +{ "_id" : "49858", "city" : "MENOMINEE", "loc" : [ -87.621475, 45.13427 ], "pop" : 13149, "state" : "MI" } +{ "_id" : "49861", "city" : "MICHIGAMME", "loc" : [ -87.892386, 46.668143 ], "pop" : 1230, "state" : "MI" } +{ "_id" : "49862", "city" : "CHRISTMAS", "loc" : [ -86.626846, 46.413863 ], "pop" : 3762, "state" : "MI" } +{ "_id" : "49866", "city" : "NEGAUNEE", "loc" : [ -87.582915, 46.500662 ], "pop" : 8204, "state" : "MI" } +{ "_id" : "49868", "city" : "NEWBERRY", "loc" : [ -85.514951, 46.343763 ], "pop" : 4866, "state" : "MI" } +{ "_id" : "49870", "city" : "NORWAY", "loc" : [ -87.90469299999999, 45.786186 ], "pop" : 3300, "state" : "MI" } +{ "_id" : "49873", "city" : "PERRONVILLE", "loc" : [ -87.398903, 45.826409 ], "pop" : 360, "state" : "MI" } +{ "_id" : "49874", "city" : "POWERS", "loc" : [ -87.531853, 45.679238 ], "pop" : 559, "state" : "MI" } +{ "_id" : "49876", "city" : "QUINNESEC", "loc" : [ -87.99215100000001, 45.799866 ], "pop" : 1313, "state" : "MI" } +{ "_id" : "49878", "city" : "RAPID RIVER", "loc" : [ -86.88449, 45.910662 ], "pop" : 3345, "state" : "MI" } +{ "_id" : "49879", "city" : "REPUBLIC", "loc" : [ -87.99382300000001, 46.368046 ], "pop" : 1192, "state" : "MI" } +{ "_id" : "49880", "city" : "ROCK", "loc" : [ -87.13306799999999, 46.050262 ], "pop" : 1601, "state" : "MI" } +{ "_id" : "49881", "city" : "SAGOLA", "loc" : [ -88.067644, 46.081274 ], "pop" : 392, "state" : "MI" } +{ "_id" : "49883", "city" : "SENEY", "loc" : [ -85.97084700000001, 46.387989 ], "pop" : 185, "state" : "MI" } +{ "_id" : "49884", "city" : "SHINGLETON", "loc" : [ -86.48226099999999, 46.351202 ], "pop" : 589, "state" : "MI" } +{ "_id" : "49885", "city" : "SKANDIA", "loc" : [ -87.24809399999999, 46.349049 ], "pop" : 1975, "state" : "MI" } +{ "_id" : "49886", "city" : "SPALDING", "loc" : [ -87.49639999999999, 45.695747 ], "pop" : 922, "state" : "MI" } +{ "_id" : "49887", "city" : "STEPHENSON", "loc" : [ -87.62578999999999, 45.416594 ], "pop" : 2202, "state" : "MI" } +{ "_id" : "49890", "city" : "TRAUNIK", "loc" : [ -86.988891, 46.258534 ], "pop" : 334, "state" : "MI" } +{ "_id" : "49891", "city" : "TRENARY", "loc" : [ -86.950183, 46.194738 ], "pop" : 563, "state" : "MI" } +{ "_id" : "49892", "city" : "VULCAN", "loc" : [ -87.816811, 45.762257 ], "pop" : 1841, "state" : "MI" } +{ "_id" : "49893", "city" : "WALLACE", "loc" : [ -87.580457, 45.301657 ], "pop" : 2103, "state" : "MI" } +{ "_id" : "49894", "city" : "WELLS", "loc" : [ -87.073443, 45.784866 ], "pop" : 1093, "state" : "MI" } +{ "_id" : "49895", "city" : "WETMORE", "loc" : [ -86.63453699999999, 46.353518 ], "pop" : 646, "state" : "MI" } +{ "_id" : "49896", "city" : "WILSON", "loc" : [ -87.399734, 45.664855 ], "pop" : 1112, "state" : "MI" } +{ "_id" : "49905", "city" : "ATLANTIC MINE", "loc" : [ -88.66131799999999, 47.093663 ], "pop" : 3379, "state" : "MI" } +{ "_id" : "49908", "city" : "KEWEENAW BAY", "loc" : [ -88.49548900000001, 46.790213 ], "pop" : 1759, "state" : "MI" } +{ "_id" : "49910", "city" : "BERGLAND", "loc" : [ -89.597296, 46.588124 ], "pop" : 618, "state" : "MI" } +{ "_id" : "49911", "city" : "BESSEMER", "loc" : [ -90.05154400000001, 46.480188 ], "pop" : 3603, "state" : "MI" } +{ "_id" : "49912", "city" : "BRUCE CROSSING", "loc" : [ -89.16802800000001, 46.527956 ], "pop" : 1089, "state" : "MI" } +{ "_id" : "49913", "city" : "LAURIUM", "loc" : [ -88.44271999999999, 47.242721 ], "pop" : 7656, "state" : "MI" } +{ "_id" : "49916", "city" : "CHASSELL", "loc" : [ -88.554554, 47.002038 ], "pop" : 3096, "state" : "MI" } +{ "_id" : "49919", "city" : "COVINGTON", "loc" : [ -88.524452, 46.557194 ], "pop" : 260, "state" : "MI" } +{ "_id" : "49920", "city" : "CRYSTAL FALLS", "loc" : [ -88.350517, 46.109255 ], "pop" : 4804, "state" : "MI" } +{ "_id" : "49921", "city" : "DODGEVILLE", "loc" : [ -88.58087399999999, 47.091443 ], "pop" : 390, "state" : "MI" } +{ "_id" : "49925", "city" : "EWEN", "loc" : [ -89.314494, 46.540412 ], "pop" : 772, "state" : "MI" } +{ "_id" : "49927", "city" : "GAASTRA", "loc" : [ -88.591728, 46.052638 ], "pop" : 489, "state" : "MI" } +{ "_id" : "49930", "city" : "HANCOCK", "loc" : [ -88.56538500000001, 47.136731 ], "pop" : 7683, "state" : "MI" } +{ "_id" : "49931", "city" : "HOUGHTON", "loc" : [ -88.558024, 47.115801 ], "pop" : 8639, "state" : "MI" } +{ "_id" : "49935", "city" : "IRON RIVER", "loc" : [ -88.645974, 46.093017 ], "pop" : 7882, "state" : "MI" } +{ "_id" : "49938", "city" : "IRONWOOD", "loc" : [ -90.158844, 46.463793 ], "pop" : 9402, "state" : "MI" } +{ "_id" : "49943", "city" : "KENTON", "loc" : [ -88.812933, 46.491565 ], "pop" : 304, "state" : "MI" } +{ "_id" : "49945", "city" : "GAY", "loc" : [ -88.411829, 47.171387 ], "pop" : 3365, "state" : "MI" } +{ "_id" : "49946", "city" : "LANSE", "loc" : [ -88.420959, 46.770407 ], "pop" : 3929, "state" : "MI" } +{ "_id" : "49947", "city" : "MARENISCO", "loc" : [ -89.67742200000001, 46.355107 ], "pop" : 956, "state" : "MI" } +{ "_id" : "49948", "city" : "MASS CITY", "loc" : [ -89.064864, 46.747447 ], "pop" : 805, "state" : "MI" } +{ "_id" : "49950", "city" : "EAGLE HARBOR", "loc" : [ -88.332572, 47.320067 ], "pop" : 1701, "state" : "MI" } +{ "_id" : "49952", "city" : "NISULA", "loc" : [ -88.83396999999999, 46.76952 ], "pop" : 73, "state" : "MI" } +{ "_id" : "49953", "city" : "ONTONAGON", "loc" : [ -89.348474, 46.827484 ], "pop" : 5090, "state" : "MI" } +{ "_id" : "49958", "city" : "PELKIE", "loc" : [ -88.625083, 46.794932 ], "pop" : 1583, "state" : "MI" } +{ "_id" : "49962", "city" : "SKANEE", "loc" : [ -88.17318899999999, 46.874732 ], "pop" : 310, "state" : "MI" } +{ "_id" : "49965", "city" : "TOIVOLA", "loc" : [ -88.860657, 46.985447 ], "pop" : 352, "state" : "MI" } +{ "_id" : "49967", "city" : "TROUT CREEK", "loc" : [ -89.026962, 46.486426 ], "pop" : 480, "state" : "MI" } +{ "_id" : "49968", "city" : "WAKEFIELD", "loc" : [ -89.942446, 46.475184 ], "pop" : 3043, "state" : "MI" } +{ "_id" : "49969", "city" : "WATERSMEET", "loc" : [ -89.210836, 46.25416 ], "pop" : 1048, "state" : "MI" } +{ "_id" : "49970", "city" : "WATTON", "loc" : [ -88.599298, 46.513698 ], "pop" : 391, "state" : "MI" } +{ "_id" : "50001", "city" : "ACKWORTH", "loc" : [ -93.37671899999999, 41.37372 ], "pop" : 491, "state" : "IA" } +{ "_id" : "50002", "city" : "ADAIR", "loc" : [ -94.644363, 41.513687 ], "pop" : 1748, "state" : "IA" } +{ "_id" : "50003", "city" : "ADEL", "loc" : [ -94.037965, 41.62214 ], "pop" : 4884, "state" : "IA" } +{ "_id" : "50005", "city" : "ALBION", "loc" : [ -92.98821, 42.11427 ], "pop" : 773, "state" : "IA" } +{ "_id" : "50006", "city" : "ALDEN", "loc" : [ -93.384123, 42.51789 ], "pop" : 1374, "state" : "IA" } +{ "_id" : "50007", "city" : "ALLEMAN", "loc" : [ -93.60630500000001, 41.815886 ], "pop" : 449, "state" : "IA" } +{ "_id" : "50008", "city" : "ALLERTON", "loc" : [ -93.37239, 40.702301 ], "pop" : 805, "state" : "IA" } +{ "_id" : "50009", "city" : "ALTOONA", "loc" : [ -93.472415, 41.647549 ], "pop" : 7546, "state" : "IA" } +{ "_id" : "50010", "city" : "AMES", "loc" : [ -93.639398, 42.029859 ], "pop" : 52105, "state" : "IA" } +{ "_id" : "50020", "city" : "ANITA", "loc" : [ -94.77940099999999, 41.449973 ], "pop" : 1529, "state" : "IA" } +{ "_id" : "50021", "city" : "ANKENY", "loc" : [ -93.602175, 41.72755 ], "pop" : 20465, "state" : "IA" } +{ "_id" : "50022", "city" : "ATLANTIC", "loc" : [ -95.01012299999999, 41.400279 ], "pop" : 8468, "state" : "IA" } +{ "_id" : "50025", "city" : "AUDUBON", "loc" : [ -94.91641199999999, 41.730032 ], "pop" : 4034, "state" : "IA" } +{ "_id" : "50026", "city" : "BAGLEY", "loc" : [ -94.441535, 41.834053 ], "pop" : 568, "state" : "IA" } +{ "_id" : "50027", "city" : "BARNES CITY", "loc" : [ -92.470338, 41.488269 ], "pop" : 355, "state" : "IA" } +{ "_id" : "50028", "city" : "BAXTER", "loc" : [ -93.158332, 41.820369 ], "pop" : 1381, "state" : "IA" } +{ "_id" : "50029", "city" : "BAYARD", "loc" : [ -94.591533, 41.838599 ], "pop" : 971, "state" : "IA" } +{ "_id" : "50030", "city" : "BEACONSFIELD", "loc" : [ -94.075126, 40.778431 ], "pop" : 195, "state" : "IA" } +{ "_id" : "50031", "city" : "BEAVER", "loc" : [ -94.103309, 42.039936 ], "pop" : 501, "state" : "IA" } +{ "_id" : "50033", "city" : "BEVINGTON", "loc" : [ -93.812865, 41.371763 ], "pop" : 273, "state" : "IA" } +{ "_id" : "50034", "city" : "BLAIRSBURG", "loc" : [ -93.65944399999999, 42.493725 ], "pop" : 458, "state" : "IA" } +{ "_id" : "50035", "city" : "BONDURANT", "loc" : [ -93.45268900000001, 41.70166 ], "pop" : 2666, "state" : "IA" } +{ "_id" : "50036", "city" : "BOONE", "loc" : [ -93.878083, 42.069354 ], "pop" : 14773, "state" : "IA" } +{ "_id" : "50038", "city" : "BOONEVILLE", "loc" : [ -93.88135699999999, 41.533987 ], "pop" : 100, "state" : "IA" } +{ "_id" : "50039", "city" : "BOUTON", "loc" : [ -93.996286, 41.828432 ], "pop" : 552, "state" : "IA" } +{ "_id" : "50040", "city" : "BOXHOLM", "loc" : [ -94.10524599999999, 42.170567 ], "pop" : 437, "state" : "IA" } +{ "_id" : "50041", "city" : "BRADFORD", "loc" : [ -93.218068, 42.610434 ], "pop" : 406, "state" : "IA" } +{ "_id" : "50042", "city" : "BRAYTON", "loc" : [ -94.974017, 41.55236 ], "pop" : 416, "state" : "IA" } +{ "_id" : "50044", "city" : "BUSSEY", "loc" : [ -92.896252, 41.209422 ], "pop" : 707, "state" : "IA" } +{ "_id" : "50046", "city" : "CAMBRIDGE", "loc" : [ -93.53053800000001, 41.90251 ], "pop" : 1103, "state" : "IA" } +{ "_id" : "50047", "city" : "CARLISLE", "loc" : [ -93.49214000000001, 41.481384 ], "pop" : 5109, "state" : "IA" } +{ "_id" : "50048", "city" : "CASEY", "loc" : [ -94.414475, 41.496116 ], "pop" : 1822, "state" : "IA" } +{ "_id" : "50049", "city" : "CHARITON", "loc" : [ -93.30419000000001, 41.022638 ], "pop" : 6836, "state" : "IA" } +{ "_id" : "50050", "city" : "CHURDAN", "loc" : [ -94.493346, 42.161402 ], "pop" : 797, "state" : "IA" } +{ "_id" : "50051", "city" : "CLEMONS", "loc" : [ -93.16878, 42.090041 ], "pop" : 557, "state" : "IA" } +{ "_id" : "50052", "city" : "CLIO", "loc" : [ -93.48644299999999, 40.680261 ], "pop" : 125, "state" : "IA" } +{ "_id" : "50054", "city" : "COLFAX", "loc" : [ -93.258816, 41.678785 ], "pop" : 3475, "state" : "IA" } +{ "_id" : "50055", "city" : "COLLINS", "loc" : [ -93.300808, 41.903226 ], "pop" : 764, "state" : "IA" } +{ "_id" : "50056", "city" : "COLO", "loc" : [ -93.307114, 42.013102 ], "pop" : 1293, "state" : "IA" } +{ "_id" : "50057", "city" : "COLUMBIA", "loc" : [ -93.15821699999999, 41.183814 ], "pop" : 304, "state" : "IA" } +{ "_id" : "50058", "city" : "COON RAPIDS", "loc" : [ -94.679979, 41.893957 ], "pop" : 1802, "state" : "IA" } +{ "_id" : "50059", "city" : "COOPER", "loc" : [ -94.339073, 41.903433 ], "pop" : 170, "state" : "IA" } +{ "_id" : "50060", "city" : "SEWAL", "loc" : [ -93.322549, 40.76131 ], "pop" : 2617, "state" : "IA" } +{ "_id" : "50061", "city" : "CUMMING", "loc" : [ -93.75386, 41.484876 ], "pop" : 635, "state" : "IA" } +{ "_id" : "50062", "city" : "DALLAS", "loc" : [ -93.253525, 41.221332 ], "pop" : 996, "state" : "IA" } +{ "_id" : "50063", "city" : "DALLAS CENTER", "loc" : [ -93.970657, 41.686248 ], "pop" : 1838, "state" : "IA" } +{ "_id" : "50064", "city" : "DANA", "loc" : [ -94.232212, 42.10634 ], "pop" : 131, "state" : "IA" } +{ "_id" : "50065", "city" : "PLEASANTON", "loc" : [ -93.807022, 40.632075 ], "pop" : 762, "state" : "IA" } +{ "_id" : "50066", "city" : "DAWSON", "loc" : [ -94.217127, 41.832396 ], "pop" : 434, "state" : "IA" } +{ "_id" : "50067", "city" : "DECATUR", "loc" : [ -93.832598, 40.755258 ], "pop" : 394, "state" : "IA" } +{ "_id" : "50068", "city" : "DERBY", "loc" : [ -93.47959, 40.935476 ], "pop" : 339, "state" : "IA" } +{ "_id" : "50069", "city" : "DE SOTO", "loc" : [ -94.027582, 41.533285 ], "pop" : 1535, "state" : "IA" } +{ "_id" : "50070", "city" : "DEXTER", "loc" : [ -94.2145, 41.519806 ], "pop" : 824, "state" : "IA" } +{ "_id" : "50071", "city" : "DOWS", "loc" : [ -93.50580100000001, 42.661026 ], "pop" : 1373, "state" : "IA" } +{ "_id" : "50072", "city" : "EARLHAM", "loc" : [ -94.12944299999999, 41.470916 ], "pop" : 2010, "state" : "IA" } +{ "_id" : "50073", "city" : "ELKHART", "loc" : [ -93.48545799999999, 41.811384 ], "pop" : 1374, "state" : "IA" } +{ "_id" : "50074", "city" : "ELLSTON", "loc" : [ -94.08411599999999, 40.850485 ], "pop" : 286, "state" : "IA" } +{ "_id" : "50075", "city" : "ELLSWORTH", "loc" : [ -93.548979, 42.30086 ], "pop" : 1129, "state" : "IA" } +{ "_id" : "50076", "city" : "EXIRA", "loc" : [ -94.857145, 41.576771 ], "pop" : 1590, "state" : "IA" } +{ "_id" : "50101", "city" : "GALT", "loc" : [ -93.60351199999999, 42.691187 ], "pop" : 57, "state" : "IA" } +{ "_id" : "50102", "city" : "GARDEN CITY", "loc" : [ -93.403068, 42.25266 ], "pop" : 422, "state" : "IA" } +{ "_id" : "50103", "city" : "GARDEN GROVE", "loc" : [ -93.61166900000001, 40.771078 ], "pop" : 603, "state" : "IA" } +{ "_id" : "50104", "city" : "GIBSON", "loc" : [ -92.353121, 41.464206 ], "pop" : 458, "state" : "IA" } +{ "_id" : "50106", "city" : "GILMAN", "loc" : [ -92.810067, 41.901236 ], "pop" : 1221, "state" : "IA" } +{ "_id" : "50107", "city" : "GRAND JUNCTION", "loc" : [ -94.23362899999999, 42.029578 ], "pop" : 1055, "state" : "IA" } +{ "_id" : "50108", "city" : "GRAND RIVER", "loc" : [ -93.95437200000001, 40.813704 ], "pop" : 454, "state" : "IA" } +{ "_id" : "50109", "city" : "GRANGER", "loc" : [ -93.841002, 41.752355 ], "pop" : 1324, "state" : "IA" } +{ "_id" : "50110", "city" : "GRAY", "loc" : [ -95.02272000000001, 41.82663 ], "pop" : 344, "state" : "IA" } +{ "_id" : "50111", "city" : "GRIMES", "loc" : [ -93.78210900000001, 41.701838 ], "pop" : 4205, "state" : "IA" } +{ "_id" : "50112", "city" : "GRINNELL", "loc" : [ -92.734432, 41.742081 ], "pop" : 11530, "state" : "IA" } +{ "_id" : "50115", "city" : "GUTHRIE CENTER", "loc" : [ -94.48644400000001, 41.683671 ], "pop" : 3398, "state" : "IA" } +{ "_id" : "50116", "city" : "HAMILTON", "loc" : [ -92.92434900000001, 41.175543 ], "pop" : 314, "state" : "IA" } +{ "_id" : "50117", "city" : "HAMLIN", "loc" : [ -94.915745, 41.650571 ], "pop" : 336, "state" : "IA" } +{ "_id" : "50118", "city" : "HARTFORD", "loc" : [ -93.402213, 41.459629 ], "pop" : 1201, "state" : "IA" } +{ "_id" : "50119", "city" : "HARVEY", "loc" : [ -92.931843, 41.302972 ], "pop" : 683, "state" : "IA" } +{ "_id" : "50120", "city" : "HAVERHILL", "loc" : [ -92.945857, 41.93196 ], "pop" : 419, "state" : "IA" } +{ "_id" : "50122", "city" : "HUBBARD", "loc" : [ -93.29392799999999, 42.302208 ], "pop" : 1356, "state" : "IA" } +{ "_id" : "50123", "city" : "HUMESTON", "loc" : [ -93.51011699999999, 40.846922 ], "pop" : 981, "state" : "IA" } +{ "_id" : "50124", "city" : "HUXLEY", "loc" : [ -93.60238099999999, 41.899434 ], "pop" : 2417, "state" : "IA" } +{ "_id" : "50125", "city" : "SPRING HILL", "loc" : [ -93.571502, 41.35617 ], "pop" : 13920, "state" : "IA" } +{ "_id" : "50126", "city" : "IOWA FALLS", "loc" : [ -93.270943, 42.513756 ], "pop" : 7714, "state" : "IA" } +{ "_id" : "50127", "city" : "IRA", "loc" : [ -93.16443599999999, 41.731759 ], "pop" : 378, "state" : "IA" } +{ "_id" : "50128", "city" : "JAMAICA", "loc" : [ -94.320367, 41.841931 ], "pop" : 423, "state" : "IA" } +{ "_id" : "50129", "city" : "JEFFERSON", "loc" : [ -94.388768, 42.009325 ], "pop" : 5663, "state" : "IA" } +{ "_id" : "50130", "city" : "JEWELL", "loc" : [ -93.642821, 42.313912 ], "pop" : 1348, "state" : "IA" } +{ "_id" : "50131", "city" : "JOHNSTON", "loc" : [ -93.702792, 41.673017 ], "pop" : 4945, "state" : "IA" } +{ "_id" : "50132", "city" : "KAMRAR", "loc" : [ -93.727941, 42.394517 ], "pop" : 246, "state" : "IA" } +{ "_id" : "50133", "city" : "KELLERTON", "loc" : [ -94.060693, 40.686127 ], "pop" : 601, "state" : "IA" } +{ "_id" : "50134", "city" : "KELLEY", "loc" : [ -93.664354, 41.948773 ], "pop" : 314, "state" : "IA" } +{ "_id" : "50135", "city" : "KELLOGG", "loc" : [ -92.911404, 41.718371 ], "pop" : 913, "state" : "IA" } +{ "_id" : "50136", "city" : "KESWICK", "loc" : [ -92.239547, 41.461251 ], "pop" : 497, "state" : "IA" } +{ "_id" : "50138", "city" : "KNOXVILLE", "loc" : [ -93.095427, 41.316446 ], "pop" : 11205, "state" : "IA" } +{ "_id" : "50139", "city" : "LACONA", "loc" : [ -93.38380100000001, 41.198832 ], "pop" : 700, "state" : "IA" } +{ "_id" : "50140", "city" : "LAMONI", "loc" : [ -93.934899, 40.622852 ], "pop" : 2638, "state" : "IA" } +{ "_id" : "50141", "city" : "LAUREL", "loc" : [ -92.926294, 41.882904 ], "pop" : 457, "state" : "IA" } +{ "_id" : "50143", "city" : "LEIGHTON", "loc" : [ -92.808125, 41.364677 ], "pop" : 594, "state" : "IA" } +{ "_id" : "50144", "city" : "LEON", "loc" : [ -93.742903, 40.737334 ], "pop" : 2556, "state" : "IA" } +{ "_id" : "50145", "city" : "LIBERTY CENTER", "loc" : [ -93.49739099999999, 41.207668 ], "pop" : 468, "state" : "IA" } +{ "_id" : "50146", "city" : "LINDEN", "loc" : [ -94.24057999999999, 41.64225 ], "pop" : 585, "state" : "IA" } +{ "_id" : "50147", "city" : "LINEVILLE", "loc" : [ -93.48620699999999, 40.600373 ], "pop" : 586, "state" : "IA" } +{ "_id" : "50148", "city" : "LISCOMB", "loc" : [ -92.983279, 42.184 ], "pop" : 512, "state" : "IA" } +{ "_id" : "50149", "city" : "LORIMOR", "loc" : [ -94.063885, 41.1233 ], "pop" : 619, "state" : "IA" } +{ "_id" : "50150", "city" : "LOVILIA", "loc" : [ -92.929272, 41.12719 ], "pop" : 1053, "state" : "IA" } +{ "_id" : "50151", "city" : "LUCAS", "loc" : [ -93.483614, 41.058451 ], "pop" : 617, "state" : "IA" } +{ "_id" : "50152", "city" : "LUTHER", "loc" : [ -93.855394, 41.991934 ], "pop" : 529, "state" : "IA" } +{ "_id" : "50153", "city" : "LYNNVILLE", "loc" : [ -92.78771500000001, 41.569766 ], "pop" : 630, "state" : "IA" } +{ "_id" : "50154", "city" : "MC CALLSBURG", "loc" : [ -93.397757, 42.166475 ], "pop" : 533, "state" : "IA" } +{ "_id" : "50155", "city" : "MACKSBURG", "loc" : [ -94.18567299999999, 41.202792 ], "pop" : 310, "state" : "IA" } +{ "_id" : "50156", "city" : "MADRID", "loc" : [ -93.844815, 41.884083 ], "pop" : 4367, "state" : "IA" } +{ "_id" : "50157", "city" : "MALCOM", "loc" : [ -92.535426, 41.769502 ], "pop" : 1595, "state" : "IA" } +{ "_id" : "50158", "city" : "MARSHALLTOWN", "loc" : [ -92.91269, 42.040482 ], "pop" : 30857, "state" : "IA" } +{ "_id" : "50161", "city" : "MAXWELL", "loc" : [ -93.400125, 41.89673 ], "pop" : 1268, "state" : "IA" } +{ "_id" : "50162", "city" : "MELBOURNE", "loc" : [ -93.085627, 41.932348 ], "pop" : 970, "state" : "IA" } +{ "_id" : "50163", "city" : "MELCHER-DALLAS", "loc" : [ -93.219404, 41.222912 ], "pop" : 924, "state" : "IA" } +{ "_id" : "50164", "city" : "MENLO", "loc" : [ -94.409002, 41.534797 ], "pop" : 650, "state" : "IA" } +{ "_id" : "50165", "city" : "MILLERTON", "loc" : [ -93.27958599999999, 40.854889 ], "pop" : 258, "state" : "IA" } +{ "_id" : "50166", "city" : "MILO", "loc" : [ -93.445356, 41.29042 ], "pop" : 1705, "state" : "IA" } +{ "_id" : "50167", "city" : "MINBURN", "loc" : [ -94.01501, 41.756206 ], "pop" : 517, "state" : "IA" } +{ "_id" : "50168", "city" : "MINGO", "loc" : [ -93.288015, 41.789843 ], "pop" : 725, "state" : "IA" } +{ "_id" : "50169", "city" : "MITCHELLVILLE", "loc" : [ -93.36995, 41.66089 ], "pop" : 2363, "state" : "IA" } +{ "_id" : "50170", "city" : "MONROE", "loc" : [ -93.072551, 41.535619 ], "pop" : 2868, "state" : "IA" } +{ "_id" : "50171", "city" : "MONTEZUMA", "loc" : [ -92.527582, 41.592845 ], "pop" : 3570, "state" : "IA" } +{ "_id" : "50172", "city" : "GUERNSEY", "loc" : [ -92.333549, 41.662496 ], "pop" : 128, "state" : "IA" } +{ "_id" : "50173", "city" : "MONTOUR", "loc" : [ -92.700575, 41.970876 ], "pop" : 1137, "state" : "IA" } +{ "_id" : "50174", "city" : "MURRAY", "loc" : [ -93.952975, 41.037644 ], "pop" : 1357, "state" : "IA" } +{ "_id" : "50201", "city" : "NEVADA", "loc" : [ -93.446219, 42.018983 ], "pop" : 7381, "state" : "IA" } +{ "_id" : "50206", "city" : "NEW PROVIDENCE", "loc" : [ -93.175262, 42.269261 ], "pop" : 445, "state" : "IA" } +{ "_id" : "50207", "city" : "NEW SHARON", "loc" : [ -92.684815, 41.463976 ], "pop" : 2426, "state" : "IA" } +{ "_id" : "50208", "city" : "NEWTON", "loc" : [ -93.045456, 41.699173 ], "pop" : 19721, "state" : "IA" } +{ "_id" : "50210", "city" : "NEW VIRGINIA", "loc" : [ -93.71131200000001, 41.160063 ], "pop" : 1593, "state" : "IA" } +{ "_id" : "50211", "city" : "NORWALK", "loc" : [ -93.657332, 41.486055 ], "pop" : 9512, "state" : "IA" } +{ "_id" : "50212", "city" : "OGDEN", "loc" : [ -94.006333, 42.035106 ], "pop" : 3115, "state" : "IA" } +{ "_id" : "50213", "city" : "OSCEOLA", "loc" : [ -93.771236, 41.029503 ], "pop" : 5528, "state" : "IA" } +{ "_id" : "50214", "city" : "OTLEY", "loc" : [ -93.034778, 41.451806 ], "pop" : 676, "state" : "IA" } +{ "_id" : "50216", "city" : "PANORA", "loc" : [ -94.360613, 41.696684 ], "pop" : 1847, "state" : "IA" } +{ "_id" : "50217", "city" : "PATON", "loc" : [ -94.273038, 42.165841 ], "pop" : 621, "state" : "IA" } +{ "_id" : "50218", "city" : "PATTERSON", "loc" : [ -93.878174, 41.353912 ], "pop" : 258, "state" : "IA" } +{ "_id" : "50219", "city" : "PELLA", "loc" : [ -92.917207, 41.408175 ], "pop" : 10771, "state" : "IA" } +{ "_id" : "50220", "city" : "PERRY", "loc" : [ -94.10216699999999, 41.839695 ], "pop" : 7918, "state" : "IA" } +{ "_id" : "50222", "city" : "PERU", "loc" : [ -93.943729, 41.21454 ], "pop" : 442, "state" : "IA" } +{ "_id" : "50223", "city" : "PILOT MOUND", "loc" : [ -94.010184, 42.160395 ], "pop" : 380, "state" : "IA" } +{ "_id" : "50225", "city" : "PLEASANTVILLE", "loc" : [ -93.27120600000001, 41.373836 ], "pop" : 2474, "state" : "IA" } +{ "_id" : "50226", "city" : "POLK CITY", "loc" : [ -93.689346, 41.754905 ], "pop" : 4203, "state" : "IA" } +{ "_id" : "50227", "city" : "POPEJOY", "loc" : [ -93.43086700000001, 42.595628 ], "pop" : 298, "state" : "IA" } +{ "_id" : "50228", "city" : "PRAIRIE CITY", "loc" : [ -93.24098600000001, 41.585425 ], "pop" : 1941, "state" : "IA" } +{ "_id" : "50229", "city" : "PROLE", "loc" : [ -93.734357, 41.382973 ], "pop" : 1488, "state" : "IA" } +{ "_id" : "50230", "city" : "RADCLIFFE", "loc" : [ -93.42336400000001, 42.324064 ], "pop" : 804, "state" : "IA" } +{ "_id" : "50231", "city" : "RANDALL", "loc" : [ -93.62109, 42.247463 ], "pop" : 508, "state" : "IA" } +{ "_id" : "50232", "city" : "REASNOR", "loc" : [ -93.01982700000001, 41.579802 ], "pop" : 245, "state" : "IA" } +{ "_id" : "50233", "city" : "REDFIELD", "loc" : [ -94.189733, 41.587349 ], "pop" : 1236, "state" : "IA" } +{ "_id" : "50234", "city" : "RHODES", "loc" : [ -93.179586, 41.917717 ], "pop" : 564, "state" : "IA" } +{ "_id" : "50235", "city" : "RIPPEY", "loc" : [ -94.213202, 41.92574 ], "pop" : 563, "state" : "IA" } +{ "_id" : "50236", "city" : "ROLAND", "loc" : [ -93.50631300000001, 42.164585 ], "pop" : 1452, "state" : "IA" } +{ "_id" : "50237", "city" : "RUNNELLS", "loc" : [ -93.42025, 41.551549 ], "pop" : 2309, "state" : "IA" } +{ "_id" : "50238", "city" : "RUSSELL", "loc" : [ -93.178371, 40.945557 ], "pop" : 1018, "state" : "IA" } +{ "_id" : "50239", "city" : "SAINT ANTHONY", "loc" : [ -93.18243099999999, 42.151974 ], "pop" : 328, "state" : "IA" } +{ "_id" : "50240", "city" : "SAINT CHARLES", "loc" : [ -93.824195, 41.292443 ], "pop" : 1169, "state" : "IA" } +{ "_id" : "50241", "city" : "SAINT MARYS", "loc" : [ -93.736107, 41.297826 ], "pop" : 632, "state" : "IA" } +{ "_id" : "50242", "city" : "SEARSBORO", "loc" : [ -92.69873699999999, 41.56561 ], "pop" : 464, "state" : "IA" } +{ "_id" : "50244", "city" : "SLATER", "loc" : [ -93.681155, 41.876511 ], "pop" : 2083, "state" : "IA" } +{ "_id" : "50246", "city" : "STANHOPE", "loc" : [ -93.775081, 42.290407 ], "pop" : 1001, "state" : "IA" } +{ "_id" : "50247", "city" : "STATE CENTER", "loc" : [ -93.167283, 42.010911 ], "pop" : 1618, "state" : "IA" } +{ "_id" : "50248", "city" : "STORY CITY", "loc" : [ -93.598811, 42.183487 ], "pop" : 3501, "state" : "IA" } +{ "_id" : "50249", "city" : "STRATFORD", "loc" : [ -93.90294, 42.284673 ], "pop" : 1215, "state" : "IA" } +{ "_id" : "50250", "city" : "STUART", "loc" : [ -94.304563, 41.518643 ], "pop" : 1463, "state" : "IA" } +{ "_id" : "50251", "city" : "SULLY", "loc" : [ -92.845085, 41.573969 ], "pop" : 1096, "state" : "IA" } +{ "_id" : "50252", "city" : "SWAN", "loc" : [ -93.234165, 41.4717 ], "pop" : 691, "state" : "IA" } +{ "_id" : "50254", "city" : "THAYER", "loc" : [ -94.068639, 41.00293 ], "pop" : 453, "state" : "IA" } +{ "_id" : "50256", "city" : "TRACY", "loc" : [ -92.875337, 41.275564 ], "pop" : 256, "state" : "IA" } +{ "_id" : "50257", "city" : "TRURO", "loc" : [ -93.84097800000001, 41.207622 ], "pop" : 767, "state" : "IA" } +{ "_id" : "50258", "city" : "UNION", "loc" : [ -93.056192, 42.252074 ], "pop" : 937, "state" : "IA" } +{ "_id" : "50261", "city" : "VAN METER", "loc" : [ -93.95303, 41.539415 ], "pop" : 1780, "state" : "IA" } +{ "_id" : "50262", "city" : "VAN WERT", "loc" : [ -93.80732999999999, 40.864451 ], "pop" : 431, "state" : "IA" } +{ "_id" : "50263", "city" : "WAUKEE", "loc" : [ -93.85916, 41.592959 ], "pop" : 4933, "state" : "IA" } +{ "_id" : "50264", "city" : "WELDON", "loc" : [ -93.738743, 40.873906 ], "pop" : 388, "state" : "IA" } +{ "_id" : "50265", "city" : "WEST DES MOINES", "loc" : [ -93.744711, 41.580512 ], "pop" : 31896, "state" : "IA" } +{ "_id" : "50268", "city" : "WHAT CHEER", "loc" : [ -92.354789, 41.395276 ], "pop" : 1108, "state" : "IA" } +{ "_id" : "50271", "city" : "WILLIAMS", "loc" : [ -93.56774, 42.461376 ], "pop" : 1036, "state" : "IA" } +{ "_id" : "50272", "city" : "WILLIAMSON", "loc" : [ -93.26593, 41.102026 ], "pop" : 505, "state" : "IA" } +{ "_id" : "50273", "city" : "WINTERSET", "loc" : [ -94.008763, 41.339077 ], "pop" : 7254, "state" : "IA" } +{ "_id" : "50274", "city" : "WIOTA", "loc" : [ -94.840515, 41.384552 ], "pop" : 596, "state" : "IA" } +{ "_id" : "50275", "city" : "WOODBURN", "loc" : [ -93.608282, 41.00001 ], "pop" : 677, "state" : "IA" } +{ "_id" : "50276", "city" : "WOODWARD", "loc" : [ -93.90561700000001, 41.845219 ], "pop" : 1749, "state" : "IA" } +{ "_id" : "50277", "city" : "YALE", "loc" : [ -94.35026000000001, 41.775309 ], "pop" : 414, "state" : "IA" } +{ "_id" : "50278", "city" : "ZEARING", "loc" : [ -93.292766, 42.15349 ], "pop" : 1032, "state" : "IA" } +{ "_id" : "50309", "city" : "DES MOINES", "loc" : [ -93.62117499999999, 41.588743 ], "pop" : 4879, "state" : "IA" } +{ "_id" : "50310", "city" : "DES MOINES", "loc" : [ -93.67361099999999, 41.625475 ], "pop" : 30498, "state" : "IA" } +{ "_id" : "50311", "city" : "WINDSOR HEIGHTS", "loc" : [ -93.67437099999999, 41.601562 ], "pop" : 19816, "state" : "IA" } +{ "_id" : "50312", "city" : "DES MOINES", "loc" : [ -93.671908, 41.585453 ], "pop" : 16424, "state" : "IA" } +{ "_id" : "50313", "city" : "DES MOINES", "loc" : [ -93.620305, 41.638085 ], "pop" : 16175, "state" : "IA" } +{ "_id" : "50314", "city" : "DES MOINES", "loc" : [ -93.632993, 41.603003 ], "pop" : 11709, "state" : "IA" } +{ "_id" : "50315", "city" : "DES MOINES", "loc" : [ -93.619226, 41.544394 ], "pop" : 36434, "state" : "IA" } +{ "_id" : "50316", "city" : "DES MOINES", "loc" : [ -93.59996599999999, 41.609228 ], "pop" : 16359, "state" : "IA" } +{ "_id" : "50317", "city" : "PLEASANT HILL", "loc" : [ -93.549446, 41.612499 ], "pop" : 39883, "state" : "IA" } +{ "_id" : "50320", "city" : "DES MOINES", "loc" : [ -93.582674, 41.548693 ], "pop" : 8444, "state" : "IA" } +{ "_id" : "50321", "city" : "DES MOINES", "loc" : [ -93.661846, 41.547628 ], "pop" : 7233, "state" : "IA" } +{ "_id" : "50322", "city" : "URBANDALE", "loc" : [ -93.72304200000001, 41.629479 ], "pop" : 28512, "state" : "IA" } +{ "_id" : "50325", "city" : "CLIVE", "loc" : [ -93.745749, 41.606729 ], "pop" : 7293, "state" : "IA" } +{ "_id" : "50401", "city" : "MASON CITY", "loc" : [ -93.195379, 43.149869 ], "pop" : 31168, "state" : "IA" } +{ "_id" : "50420", "city" : "ALEXANDER", "loc" : [ -93.44499999999999, 42.811395 ], "pop" : 664, "state" : "IA" } +{ "_id" : "50421", "city" : "BELMOND", "loc" : [ -93.620012, 42.851137 ], "pop" : 3306, "state" : "IA" } +{ "_id" : "50423", "city" : "BRITT", "loc" : [ -93.775175, 43.100582 ], "pop" : 3988, "state" : "IA" } +{ "_id" : "50424", "city" : "BUFFALO CENTER", "loc" : [ -93.937557, 43.373204 ], "pop" : 1566, "state" : "IA" } +{ "_id" : "50428", "city" : "CLEAR LAKE", "loc" : [ -93.384978, 43.140607 ], "pop" : 10056, "state" : "IA" } +{ "_id" : "50430", "city" : "CORWITH", "loc" : [ -93.932303, 42.992736 ], "pop" : 737, "state" : "IA" } +{ "_id" : "50432", "city" : "CRYSTAL LAKE", "loc" : [ -93.794166, 43.218692 ], "pop" : 543, "state" : "IA" } +{ "_id" : "50433", "city" : "DOUGHERTY", "loc" : [ -93.068586, 42.941633 ], "pop" : 308, "state" : "IA" } +{ "_id" : "50434", "city" : "FERTILE", "loc" : [ -93.434485, 43.279514 ], "pop" : 766, "state" : "IA" } +{ "_id" : "50435", "city" : "FLOYD", "loc" : [ -92.72398800000001, 43.143049 ], "pop" : 1273, "state" : "IA" } +{ "_id" : "50436", "city" : "FOREST CITY", "loc" : [ -93.635595, 43.269184 ], "pop" : 6010, "state" : "IA" } +{ "_id" : "50438", "city" : "GARNER", "loc" : [ -93.59439399999999, 43.114395 ], "pop" : 3756, "state" : "IA" } +{ "_id" : "50439", "city" : "GOODELL", "loc" : [ -93.582426, 42.938298 ], "pop" : 452, "state" : "IA" } +{ "_id" : "50440", "city" : "GRAFTON", "loc" : [ -93.079718, 43.311016 ], "pop" : 630, "state" : "IA" } +{ "_id" : "50441", "city" : "HAMPTON", "loc" : [ -93.210954, 42.740531 ], "pop" : 5313, "state" : "IA" } +{ "_id" : "50444", "city" : "HANLONTOWN", "loc" : [ -93.335065, 43.307234 ], "pop" : 605, "state" : "IA" } +{ "_id" : "50446", "city" : "JOICE", "loc" : [ -93.44535399999999, 43.376105 ], "pop" : 522, "state" : "IA" } +{ "_id" : "50447", "city" : "KANAWHA", "loc" : [ -93.772801, 42.94338 ], "pop" : 1181, "state" : "IA" } +{ "_id" : "50448", "city" : "KENSETT", "loc" : [ -93.172805, 43.37391 ], "pop" : 729, "state" : "IA" } +{ "_id" : "50449", "city" : "KLEMME", "loc" : [ -93.58794399999999, 43.013643 ], "pop" : 849, "state" : "IA" } +{ "_id" : "50450", "city" : "LAKE MILLS", "loc" : [ -93.53362799999999, 43.416696 ], "pop" : 2801, "state" : "IA" } +{ "_id" : "50451", "city" : "LAKOTA", "loc" : [ -94.07055, 43.395283 ], "pop" : 789, "state" : "IA" } +{ "_id" : "50452", "city" : "LATIMER", "loc" : [ -93.351798, 42.759783 ], "pop" : 966, "state" : "IA" } +{ "_id" : "50453", "city" : "LELAND", "loc" : [ -93.751496, 43.307043 ], "pop" : 333, "state" : "IA" } +{ "_id" : "50454", "city" : "LITTLE CEDAR", "loc" : [ -92.734376, 43.391861 ], "pop" : 248, "state" : "IA" } +{ "_id" : "50455", "city" : "MC INTIRE", "loc" : [ -92.60485, 43.44999 ], "pop" : 382, "state" : "IA" } +{ "_id" : "50456", "city" : "MANLY", "loc" : [ -93.201802, 43.289116 ], "pop" : 1757, "state" : "IA" } +{ "_id" : "50457", "city" : "MESERVEY", "loc" : [ -93.477298, 42.913696 ], "pop" : 298, "state" : "IA" } +{ "_id" : "50458", "city" : "NORA SPRINGS", "loc" : [ -93.000221, 43.147858 ], "pop" : 1849, "state" : "IA" } +{ "_id" : "50459", "city" : "NORTHWOOD", "loc" : [ -93.24194300000001, 43.450604 ], "pop" : 2982, "state" : "IA" } +{ "_id" : "50460", "city" : "ORCHARD", "loc" : [ -92.719979, 43.235459 ], "pop" : 442, "state" : "IA" } +{ "_id" : "50461", "city" : "OSAGE", "loc" : [ -92.814356, 43.28722 ], "pop" : 5790, "state" : "IA" } +{ "_id" : "50464", "city" : "PLYMOUTH", "loc" : [ -93.12262800000001, 43.246046 ], "pop" : 453, "state" : "IA" } +{ "_id" : "50465", "city" : "RAKE", "loc" : [ -93.91712800000001, 43.476655 ], "pop" : 435, "state" : "IA" } +{ "_id" : "50466", "city" : "RICEVILLE", "loc" : [ -92.55537200000001, 43.371899 ], "pop" : 1546, "state" : "IA" } +{ "_id" : "50467", "city" : "ROCK FALLS", "loc" : [ -93.076402, 43.198014 ], "pop" : 306, "state" : "IA" } +{ "_id" : "50468", "city" : "ROCKFORD", "loc" : [ -92.952034, 43.057331 ], "pop" : 1258, "state" : "IA" } +{ "_id" : "50469", "city" : "ROCKWELL", "loc" : [ -93.21673699999999, 43.003167 ], "pop" : 2009, "state" : "IA" } +{ "_id" : "50470", "city" : "ROWAN", "loc" : [ -93.556966, 42.759644 ], "pop" : 405, "state" : "IA" } +{ "_id" : "50471", "city" : "RUDD", "loc" : [ -92.88854600000001, 43.141958 ], "pop" : 688, "state" : "IA" } +{ "_id" : "50472", "city" : "SAINT ANSGAR", "loc" : [ -92.923523, 43.406107 ], "pop" : 2401, "state" : "IA" } +{ "_id" : "50473", "city" : "SCARVILLE", "loc" : [ -93.64233, 43.467286 ], "pop" : 420, "state" : "IA" } +{ "_id" : "50475", "city" : "SHEFFIELD", "loc" : [ -93.215583, 42.877881 ], "pop" : 1988, "state" : "IA" } +{ "_id" : "50476", "city" : "STACYVILLE", "loc" : [ -92.761031, 43.445687 ], "pop" : 798, "state" : "IA" } +{ "_id" : "50477", "city" : "SWALEDALE", "loc" : [ -93.31152899999999, 42.962167 ], "pop" : 414, "state" : "IA" } +{ "_id" : "50478", "city" : "THOMPSON", "loc" : [ -93.751671, 43.387497 ], "pop" : 1178, "state" : "IA" } +{ "_id" : "50479", "city" : "THORNTON", "loc" : [ -93.408787, 42.968405 ], "pop" : 905, "state" : "IA" } +{ "_id" : "50480", "city" : "TITONKA", "loc" : [ -94.03665599999999, 43.245606 ], "pop" : 1159, "state" : "IA" } +{ "_id" : "50482", "city" : "VENTURA", "loc" : [ -93.4706, 43.126178 ], "pop" : 816, "state" : "IA" } +{ "_id" : "50483", "city" : "WESLEY", "loc" : [ -94.003776, 43.09765 ], "pop" : 647, "state" : "IA" } +{ "_id" : "50484", "city" : "WODEN", "loc" : [ -93.91092500000001, 43.222564 ], "pop" : 511, "state" : "IA" } +{ "_id" : "50501", "city" : "FORT DODGE", "loc" : [ -94.18073699999999, 42.508817 ], "pop" : 27632, "state" : "IA" } +{ "_id" : "50510", "city" : "ALBERT CITY", "loc" : [ -94.98238000000001, 42.778403 ], "pop" : 1293, "state" : "IA" } +{ "_id" : "50511", "city" : "ALGONA", "loc" : [ -94.230638, 43.065976 ], "pop" : 7829, "state" : "IA" } +{ "_id" : "50514", "city" : "ARMSTRONG", "loc" : [ -94.485305, 43.402423 ], "pop" : 1464, "state" : "IA" } +{ "_id" : "50515", "city" : "AYRSHIRE", "loc" : [ -94.847804, 43.037001 ], "pop" : 413, "state" : "IA" } +{ "_id" : "50516", "city" : "BADGER", "loc" : [ -94.162988, 42.599595 ], "pop" : 1270, "state" : "IA" } +{ "_id" : "50517", "city" : "BANCROFT", "loc" : [ -94.210778, 43.293485 ], "pop" : 1346, "state" : "IA" } +{ "_id" : "50518", "city" : "BARNUM", "loc" : [ -94.370327, 42.515867 ], "pop" : 481, "state" : "IA" } +{ "_id" : "50519", "city" : "BODE", "loc" : [ -94.27805499999999, 42.866078 ], "pop" : 555, "state" : "IA" } +{ "_id" : "50520", "city" : "BRADGATE", "loc" : [ -94.400239, 42.779425 ], "pop" : 359, "state" : "IA" } +{ "_id" : "50521", "city" : "BURNSIDE", "loc" : [ -94.11425300000001, 42.341318 ], "pop" : 355, "state" : "IA" } +{ "_id" : "50522", "city" : "BURT", "loc" : [ -94.21223000000001, 43.206167 ], "pop" : 1069, "state" : "IA" } +{ "_id" : "50523", "city" : "CALLENDER", "loc" : [ -94.281963, 42.349372 ], "pop" : 1009, "state" : "IA" } +{ "_id" : "50524", "city" : "CLARE", "loc" : [ -94.30802799999999, 42.595397 ], "pop" : 821, "state" : "IA" } +{ "_id" : "50525", "city" : "CLARION", "loc" : [ -93.727715, 42.727149 ], "pop" : 3849, "state" : "IA" } +{ "_id" : "50527", "city" : "CURLEW", "loc" : [ -94.797528, 42.963321 ], "pop" : 278, "state" : "IA" } +{ "_id" : "50528", "city" : "CYLINDER", "loc" : [ -94.510672, 43.150716 ], "pop" : 536, "state" : "IA" } +{ "_id" : "50530", "city" : "DAYTON", "loc" : [ -94.06104999999999, 42.259438 ], "pop" : 1366, "state" : "IA" } +{ "_id" : "50531", "city" : "DOLLIVER", "loc" : [ -94.624236, 43.466382 ], "pop" : 260, "state" : "IA" } +{ "_id" : "50532", "city" : "DUNCOMBE", "loc" : [ -94.059212, 42.449303 ], "pop" : 1561, "state" : "IA" } +{ "_id" : "50533", "city" : "EAGLE GROVE", "loc" : [ -93.904872, 42.660867 ], "pop" : 4109, "state" : "IA" } +{ "_id" : "50535", "city" : "EARLY", "loc" : [ -95.172569, 42.448258 ], "pop" : 1195, "state" : "IA" } +{ "_id" : "50536", "city" : "EMMETSBURG", "loc" : [ -94.682545, 43.108249 ], "pop" : 4794, "state" : "IA" } +{ "_id" : "50538", "city" : "FARNHAMVILLE", "loc" : [ -94.422623, 42.269234 ], "pop" : 631, "state" : "IA" } +{ "_id" : "50539", "city" : "FENTON", "loc" : [ -94.404366, 43.242047 ], "pop" : 779, "state" : "IA" } +{ "_id" : "50540", "city" : "FONDA", "loc" : [ -94.82974, 42.605148 ], "pop" : 1438, "state" : "IA" } +{ "_id" : "50541", "city" : "GILMORE CITY", "loc" : [ -94.41082400000001, 42.706691 ], "pop" : 604, "state" : "IA" } +{ "_id" : "50542", "city" : "GOLDFIELD", "loc" : [ -93.91943499999999, 42.758055 ], "pop" : 1148, "state" : "IA" } +{ "_id" : "50543", "city" : "GOWRIE", "loc" : [ -94.298669, 42.276712 ], "pop" : 1225, "state" : "IA" } +{ "_id" : "50544", "city" : "HARCOURT", "loc" : [ -94.196095, 42.253052 ], "pop" : 631, "state" : "IA" } +{ "_id" : "50545", "city" : "HARDY", "loc" : [ -94.030852, 42.782247 ], "pop" : 262, "state" : "IA" } +{ "_id" : "50546", "city" : "HAVELOCK", "loc" : [ -94.725233, 42.84109 ], "pop" : 586, "state" : "IA" } +{ "_id" : "50548", "city" : "HUMBOLDT", "loc" : [ -94.213184, 42.719574 ], "pop" : 6493, "state" : "IA" } +{ "_id" : "50551", "city" : "JOLLEY", "loc" : [ -94.742338, 42.507785 ], "pop" : 296, "state" : "IA" } +{ "_id" : "50552", "city" : "KNIERIM", "loc" : [ -94.453153, 42.431944 ], "pop" : 295, "state" : "IA" } +{ "_id" : "50553", "city" : "KNOKE", "loc" : [ -94.85437, 42.520515 ], "pop" : 192, "state" : "IA" } +{ "_id" : "50554", "city" : "LAURENS", "loc" : [ -94.85081599999999, 42.840938 ], "pop" : 2055, "state" : "IA" } +{ "_id" : "50556", "city" : "LEDYARD", "loc" : [ -94.15028100000001, 43.434569 ], "pop" : 384, "state" : "IA" } +{ "_id" : "50557", "city" : "LEHIGH", "loc" : [ -94.03415800000001, 42.352645 ], "pop" : 821, "state" : "IA" } +{ "_id" : "50558", "city" : "LIVERMORE", "loc" : [ -94.174716, 42.866601 ], "pop" : 645, "state" : "IA" } +{ "_id" : "50559", "city" : "LONE ROCK", "loc" : [ -94.35857799999999, 43.166645 ], "pop" : 560, "state" : "IA" } +{ "_id" : "50560", "city" : "LU VERNE", "loc" : [ -94.095912, 42.98684 ], "pop" : 1337, "state" : "IA" } +{ "_id" : "50561", "city" : "LYTTON", "loc" : [ -94.813991, 42.430375 ], "pop" : 235, "state" : "IA" } +{ "_id" : "50562", "city" : "MALLARD", "loc" : [ -94.67460800000001, 42.94167 ], "pop" : 721, "state" : "IA" } +{ "_id" : "50563", "city" : "MANSON", "loc" : [ -94.53038599999999, 42.528503 ], "pop" : 2131, "state" : "IA" } +{ "_id" : "50565", "city" : "MARATHON", "loc" : [ -94.98355100000001, 42.861233 ], "pop" : 564, "state" : "IA" } +{ "_id" : "50566", "city" : "MOORLAND", "loc" : [ -94.319886, 42.434005 ], "pop" : 541, "state" : "IA" } +{ "_id" : "50567", "city" : "NEMAHA", "loc" : [ -95.093914, 42.518027 ], "pop" : 356, "state" : "IA" } +{ "_id" : "50568", "city" : "NEWELL", "loc" : [ -94.994591, 42.615699 ], "pop" : 1668, "state" : "IA" } +{ "_id" : "50569", "city" : "OTHO", "loc" : [ -94.170776, 42.432825 ], "pop" : 1910, "state" : "IA" } +{ "_id" : "50570", "city" : "OTTOSEN", "loc" : [ -94.378648, 42.876443 ], "pop" : 301, "state" : "IA" } +{ "_id" : "50571", "city" : "PALMER", "loc" : [ -94.543155, 42.641871 ], "pop" : 1119, "state" : "IA" } +{ "_id" : "50573", "city" : "PLOVER", "loc" : [ -94.622507, 42.869107 ], "pop" : 275, "state" : "IA" } +{ "_id" : "50574", "city" : "POCAHONTAS", "loc" : [ -94.673675, 42.729602 ], "pop" : 2802, "state" : "IA" } +{ "_id" : "50575", "city" : "POMEROY", "loc" : [ -94.663758, 42.532565 ], "pop" : 1197, "state" : "IA" } +{ "_id" : "50576", "city" : "REMBRANDT", "loc" : [ -95.165178, 42.826034 ], "pop" : 236, "state" : "IA" } +{ "_id" : "50577", "city" : "RENWICK", "loc" : [ -94.007437, 42.849132 ], "pop" : 545, "state" : "IA" } +{ "_id" : "50578", "city" : "RINGSTED", "loc" : [ -94.52913700000001, 43.297654 ], "pop" : 860, "state" : "IA" } +{ "_id" : "50579", "city" : "ROCKWELL CITY", "loc" : [ -94.62921900000001, 42.396126 ], "pop" : 2952, "state" : "IA" } +{ "_id" : "50580", "city" : "RODMAN", "loc" : [ -94.49924300000001, 43.035233 ], "pop" : 286, "state" : "IA" } +{ "_id" : "50581", "city" : "ROLFE", "loc" : [ -94.516593, 42.808233 ], "pop" : 1250, "state" : "IA" } +{ "_id" : "50582", "city" : "RUTLAND", "loc" : [ -94.27188200000001, 42.763486 ], "pop" : 529, "state" : "IA" } +{ "_id" : "50583", "city" : "SAC CITY", "loc" : [ -94.979552, 42.426212 ], "pop" : 3531, "state" : "IA" } +{ "_id" : "50585", "city" : "SIOUX RAPIDS", "loc" : [ -95.138836, 42.906472 ], "pop" : 1542, "state" : "IA" } +{ "_id" : "50586", "city" : "SOMERS", "loc" : [ -94.44638999999999, 42.356065 ], "pop" : 425, "state" : "IA" } +{ "_id" : "50588", "city" : "STORM LAKE", "loc" : [ -95.196079, 42.64738 ], "pop" : 11663, "state" : "IA" } +{ "_id" : "50590", "city" : "SWEA CITY", "loc" : [ -94.319322, 43.402225 ], "pop" : 1440, "state" : "IA" } +{ "_id" : "50591", "city" : "THOR", "loc" : [ -94.03895799999999, 42.688923 ], "pop" : 463, "state" : "IA" } +{ "_id" : "50594", "city" : "VINCENT", "loc" : [ -94.033534, 42.562292 ], "pop" : 719, "state" : "IA" } +{ "_id" : "50595", "city" : "WEBSTER CITY", "loc" : [ -93.826216, 42.465682 ], "pop" : 9130, "state" : "IA" } +{ "_id" : "50597", "city" : "WEST BEND", "loc" : [ -94.456402, 42.957415 ], "pop" : 1099, "state" : "IA" } +{ "_id" : "50598", "city" : "WHITTEMORE", "loc" : [ -94.406395, 43.02608 ], "pop" : 1252, "state" : "IA" } +{ "_id" : "50599", "city" : "WOOLSTOCK", "loc" : [ -93.82161000000001, 42.584439 ], "pop" : 394, "state" : "IA" } +{ "_id" : "50601", "city" : "ACKLEY", "loc" : [ -93.060835, 42.552722 ], "pop" : 2316, "state" : "IA" } +{ "_id" : "50602", "city" : "ALLISON", "loc" : [ -92.78295199999999, 42.761465 ], "pop" : 1458, "state" : "IA" } +{ "_id" : "50603", "city" : "ALTA VISTA", "loc" : [ -92.423682, 43.148159 ], "pop" : 1356, "state" : "IA" } +{ "_id" : "50604", "city" : "APLINGTON", "loc" : [ -92.875141, 42.587039 ], "pop" : 1436, "state" : "IA" } +{ "_id" : "50605", "city" : "AREDALE", "loc" : [ -92.97687999999999, 42.854852 ], "pop" : 317, "state" : "IA" } +{ "_id" : "50606", "city" : "ARLINGTON", "loc" : [ -91.666814, 42.733827 ], "pop" : 1124, "state" : "IA" } +{ "_id" : "50607", "city" : "AURORA", "loc" : [ -91.733469, 42.620317 ], "pop" : 344, "state" : "IA" } +{ "_id" : "50608", "city" : "AUSTINVILLE", "loc" : [ -92.959422, 42.596245 ], "pop" : 363, "state" : "IA" } +{ "_id" : "50609", "city" : "BEAMAN", "loc" : [ -92.816215, 42.236707 ], "pop" : 395, "state" : "IA" } +{ "_id" : "50611", "city" : "BRISTOW", "loc" : [ -92.88642400000001, 42.774106 ], "pop" : 465, "state" : "IA" } +{ "_id" : "50612", "city" : "BUCKINGHAM", "loc" : [ -92.40978800000001, 42.255211 ], "pop" : 694, "state" : "IA" } +{ "_id" : "50613", "city" : "CEDAR FALLS", "loc" : [ -92.449725, 42.524071 ], "pop" : 36084, "state" : "IA" } +{ "_id" : "50616", "city" : "CHARLES CITY", "loc" : [ -92.676062, 43.068327 ], "pop" : 10110, "state" : "IA" } +{ "_id" : "50619", "city" : "CLARKSVILLE", "loc" : [ -92.658833, 42.804079 ], "pop" : 2757, "state" : "IA" } +{ "_id" : "50621", "city" : "CONRAD", "loc" : [ -92.88652500000001, 42.234188 ], "pop" : 1346, "state" : "IA" } +{ "_id" : "50622", "city" : "DENVER", "loc" : [ -92.341701, 42.673137 ], "pop" : 2543, "state" : "IA" } +{ "_id" : "50624", "city" : "DIKE", "loc" : [ -92.612154, 42.47301 ], "pop" : 1860, "state" : "IA" } +{ "_id" : "50625", "city" : "DUMONT", "loc" : [ -92.967347, 42.736773 ], "pop" : 1302, "state" : "IA" } +{ "_id" : "50626", "city" : "DUNKERTON", "loc" : [ -92.158826, 42.578028 ], "pop" : 1676, "state" : "IA" } +{ "_id" : "50627", "city" : "ELDORA", "loc" : [ -93.10369900000001, 42.357158 ], "pop" : 3689, "state" : "IA" } +{ "_id" : "50628", "city" : "ELMA", "loc" : [ -92.398066, 43.27855 ], "pop" : 2102, "state" : "IA" } +{ "_id" : "50629", "city" : "FAIRBANK", "loc" : [ -92.032589, 42.616235 ], "pop" : 1770, "state" : "IA" } +{ "_id" : "50630", "city" : "FREDERICKSBURG", "loc" : [ -92.198334, 42.959299 ], "pop" : 1830, "state" : "IA" } +{ "_id" : "50632", "city" : "GARWIN", "loc" : [ -92.68935, 42.087228 ], "pop" : 869, "state" : "IA" } +{ "_id" : "50633", "city" : "GENEVA", "loc" : [ -93.103793, 42.68044 ], "pop" : 382, "state" : "IA" } +{ "_id" : "50635", "city" : "GLADBROOK", "loc" : [ -92.714112, 42.177432 ], "pop" : 1268, "state" : "IA" } +{ "_id" : "50636", "city" : "GREENE", "loc" : [ -92.758324, 42.91604 ], "pop" : 2480, "state" : "IA" } +{ "_id" : "50638", "city" : "GRUNDY CENTER", "loc" : [ -92.777344, 42.3672 ], "pop" : 4130, "state" : "IA" } +{ "_id" : "50640", "city" : "HANSELL", "loc" : [ -93.090036, 42.771195 ], "pop" : 362, "state" : "IA" } +{ "_id" : "50641", "city" : "HAZLETON", "loc" : [ -91.910462, 42.607561 ], "pop" : 1480, "state" : "IA" } +{ "_id" : "50642", "city" : "HOLLAND", "loc" : [ -92.79988400000001, 42.40114 ], "pop" : 222, "state" : "IA" } +{ "_id" : "50643", "city" : "HUDSON", "loc" : [ -92.45487199999999, 42.390497 ], "pop" : 2641, "state" : "IA" } +{ "_id" : "50644", "city" : "INDEPENDENCE", "loc" : [ -91.880343, 42.46744 ], "pop" : 8466, "state" : "IA" } +{ "_id" : "50645", "city" : "IONIA", "loc" : [ -92.486521, 43.040253 ], "pop" : 869, "state" : "IA" } +{ "_id" : "50647", "city" : "JANESVILLE", "loc" : [ -92.479096, 42.646515 ], "pop" : 2008, "state" : "IA" } +{ "_id" : "50648", "city" : "JESUP", "loc" : [ -92.045625, 42.482329 ], "pop" : 3505, "state" : "IA" } +{ "_id" : "50649", "city" : "KESLEY", "loc" : [ -92.853455, 42.685717 ], "pop" : 301, "state" : "IA" } +{ "_id" : "50650", "city" : "LAMONT", "loc" : [ -91.670078, 42.594552 ], "pop" : 830, "state" : "IA" } +{ "_id" : "50651", "city" : "LA PORTE CITY", "loc" : [ -92.186155, 42.341618 ], "pop" : 3990, "state" : "IA" } +{ "_id" : "50652", "city" : "LINCOLN", "loc" : [ -92.70469300000001, 42.256056 ], "pop" : 433, "state" : "IA" } +{ "_id" : "50653", "city" : "MARBLE ROCK", "loc" : [ -92.89168100000001, 42.964547 ], "pop" : 940, "state" : "IA" } +{ "_id" : "50654", "city" : "MASONVILLE", "loc" : [ -91.55057600000001, 42.50461 ], "pop" : 557, "state" : "IA" } +{ "_id" : "50655", "city" : "MAYNARD", "loc" : [ -91.890773, 42.775156 ], "pop" : 899, "state" : "IA" } +{ "_id" : "50658", "city" : "NASHUA", "loc" : [ -92.529839, 42.952848 ], "pop" : 2007, "state" : "IA" } +{ "_id" : "50659", "city" : "NEW HAMPTON", "loc" : [ -92.313136, 43.056015 ], "pop" : 5783, "state" : "IA" } +{ "_id" : "50660", "city" : "NEW HARTFORD", "loc" : [ -92.616359, 42.583128 ], "pop" : 1362, "state" : "IA" } +{ "_id" : "50662", "city" : "OELWEIN", "loc" : [ -91.913084, 42.681095 ], "pop" : 8426, "state" : "IA" } +{ "_id" : "50665", "city" : "PARKERSBURG", "loc" : [ -92.76876300000001, 42.571377 ], "pop" : 3544, "state" : "IA" } +{ "_id" : "50666", "city" : "PLAINFIELD", "loc" : [ -92.51155799999999, 42.850267 ], "pop" : 1030, "state" : "IA" } +{ "_id" : "50667", "city" : "RAYMOND", "loc" : [ -92.216247, 42.467169 ], "pop" : 367, "state" : "IA" } +{ "_id" : "50668", "city" : "READLYN", "loc" : [ -92.21543200000001, 42.692869 ], "pop" : 1858, "state" : "IA" } +{ "_id" : "50669", "city" : "REINBECK", "loc" : [ -92.59483899999999, 42.313078 ], "pop" : 2099, "state" : "IA" } +{ "_id" : "50670", "city" : "SHELL ROCK", "loc" : [ -92.58878, 42.70611 ], "pop" : 1834, "state" : "IA" } +{ "_id" : "50671", "city" : "STANLEY", "loc" : [ -91.812673, 42.635623 ], "pop" : 175, "state" : "IA" } +{ "_id" : "50672", "city" : "STEAMBOAT ROCK", "loc" : [ -93.06291, 42.417841 ], "pop" : 650, "state" : "IA" } +{ "_id" : "50674", "city" : "SUMNER", "loc" : [ -92.118562, 42.841935 ], "pop" : 3187, "state" : "IA" } +{ "_id" : "50675", "city" : "TRAER", "loc" : [ -92.482681, 42.184685 ], "pop" : 2064, "state" : "IA" } +{ "_id" : "50676", "city" : "TRIPOLI", "loc" : [ -92.265934, 42.810538 ], "pop" : 1993, "state" : "IA" } +{ "_id" : "50677", "city" : "BREMER", "loc" : [ -92.466199, 42.737307 ], "pop" : 10879, "state" : "IA" } +{ "_id" : "50680", "city" : "WELLSBURG", "loc" : [ -92.939763, 42.449418 ], "pop" : 1353, "state" : "IA" } +{ "_id" : "50681", "city" : "WESTGATE", "loc" : [ -92.018299, 42.805453 ], "pop" : 1044, "state" : "IA" } +{ "_id" : "50682", "city" : "WINTHROP", "loc" : [ -91.73146699999999, 42.491163 ], "pop" : 1330, "state" : "IA" } +{ "_id" : "50701", "city" : "WATERLOO", "loc" : [ -92.36609900000001, 42.477784 ], "pop" : 29194, "state" : "IA" } +{ "_id" : "50702", "city" : "WATERLOO", "loc" : [ -92.33648599999999, 42.473112 ], "pop" : 18939, "state" : "IA" } +{ "_id" : "50703", "city" : "WATERLOO", "loc" : [ -92.326919, 42.514875 ], "pop" : 21256, "state" : "IA" } +{ "_id" : "50706", "city" : "WASHBURN", "loc" : [ -92.2676, 42.407605 ], "pop" : 1010, "state" : "IA" } +{ "_id" : "50707", "city" : "EVANSDALE", "loc" : [ -92.281158, 42.475453 ], "pop" : 7954, "state" : "IA" } +{ "_id" : "50801", "city" : "NEVINVILLE", "loc" : [ -94.369151, 41.062384 ], "pop" : 9548, "state" : "IA" } +{ "_id" : "50830", "city" : "AFTON", "loc" : [ -94.19404400000001, 41.040146 ], "pop" : 1450, "state" : "IA" } +{ "_id" : "50833", "city" : "BEDFORD", "loc" : [ -94.73244800000001, 40.66829 ], "pop" : 2608, "state" : "IA" } +{ "_id" : "50835", "city" : "BENTON", "loc" : [ -94.39310399999999, 40.725836 ], "pop" : 203, "state" : "IA" } +{ "_id" : "50836", "city" : "BLOCKTON", "loc" : [ -94.504901, 40.624242 ], "pop" : 476, "state" : "IA" } +{ "_id" : "50837", "city" : "BRIDGEWATER", "loc" : [ -94.64101100000001, 41.157084 ], "pop" : 1383, "state" : "IA" } +{ "_id" : "50840", "city" : "CLEARFIELD", "loc" : [ -94.494439, 40.793534 ], "pop" : 593, "state" : "IA" } +{ "_id" : "50841", "city" : "CORNING", "loc" : [ -94.735789, 40.987121 ], "pop" : 2660, "state" : "IA" } +{ "_id" : "50843", "city" : "CUMBERLAND", "loc" : [ -94.87100599999999, 41.263165 ], "pop" : 695, "state" : "IA" } +{ "_id" : "50844", "city" : "DELPHOS", "loc" : [ -94.316188, 40.661959 ], "pop" : 100, "state" : "IA" } +{ "_id" : "50845", "city" : "DIAGONAL", "loc" : [ -94.35515599999999, 40.822644 ], "pop" : 793, "state" : "IA" } +{ "_id" : "50846", "city" : "FONTANELLE", "loc" : [ -94.541904, 41.289568 ], "pop" : 1534, "state" : "IA" } +{ "_id" : "50847", "city" : "GRANT", "loc" : [ -94.984554, 41.125799 ], "pop" : 315, "state" : "IA" } +{ "_id" : "50848", "city" : "GRAVITY", "loc" : [ -94.750595, 40.790914 ], "pop" : 617, "state" : "IA" } +{ "_id" : "50849", "city" : "GREENFIELD", "loc" : [ -94.440757, 41.313311 ], "pop" : 2772, "state" : "IA" } +{ "_id" : "50850", "city" : "KENT", "loc" : [ -94.421718, 40.944856 ], "pop" : 309, "state" : "IA" } +{ "_id" : "50851", "city" : "LENOX", "loc" : [ -94.56117, 40.884096 ], "pop" : 1973, "state" : "IA" } +{ "_id" : "50852", "city" : "MALOY", "loc" : [ -94.40764, 40.673648 ], "pop" : 81, "state" : "IA" } +{ "_id" : "50853", "city" : "MASSENA", "loc" : [ -94.764872, 41.249867 ], "pop" : 794, "state" : "IA" } +{ "_id" : "50854", "city" : "MOUNT AYR", "loc" : [ -94.232146, 40.7142 ], "pop" : 2487, "state" : "IA" } +{ "_id" : "50857", "city" : "NODAWAY", "loc" : [ -94.87309, 40.954034 ], "pop" : 706, "state" : "IA" } +{ "_id" : "50858", "city" : "ORIENT", "loc" : [ -94.370496, 41.219191 ], "pop" : 1042, "state" : "IA" } +{ "_id" : "50859", "city" : "PRESCOTT", "loc" : [ -94.524901, 41.024848 ], "pop" : 205, "state" : "IA" } +{ "_id" : "50860", "city" : "REDDING", "loc" : [ -94.35945100000001, 40.605312 ], "pop" : 327, "state" : "IA" } +{ "_id" : "50861", "city" : "SHANNON CITY", "loc" : [ -94.250106, 40.936636 ], "pop" : 586, "state" : "IA" } +{ "_id" : "50862", "city" : "SHARPSBURG", "loc" : [ -94.641633, 40.795042 ], "pop" : 199, "state" : "IA" } +{ "_id" : "50863", "city" : "TINGLEY", "loc" : [ -94.19082299999999, 40.851597 ], "pop" : 347, "state" : "IA" } +{ "_id" : "50864", "city" : "VILLISCA", "loc" : [ -94.97958800000001, 40.943718 ], "pop" : 1794, "state" : "IA" } +{ "_id" : "51001", "city" : "AKRON", "loc" : [ -96.52245000000001, 42.835392 ], "pop" : 2068, "state" : "IA" } +{ "_id" : "51002", "city" : "ALTA", "loc" : [ -95.3129, 42.677118 ], "pop" : 2757, "state" : "IA" } +{ "_id" : "51003", "city" : "ALTON", "loc" : [ -96.017268, 42.978175 ], "pop" : 1371, "state" : "IA" } +{ "_id" : "51004", "city" : "ANTHON", "loc" : [ -95.89476500000001, 42.386967 ], "pop" : 1550, "state" : "IA" } +{ "_id" : "51005", "city" : "AURELIA", "loc" : [ -95.438086, 42.69122 ], "pop" : 1543, "state" : "IA" } +{ "_id" : "51006", "city" : "BATTLE CREEK", "loc" : [ -95.604517, 42.332662 ], "pop" : 1552, "state" : "IA" } +{ "_id" : "51007", "city" : "BRONSON", "loc" : [ -96.19859099999999, 42.429181 ], "pop" : 796, "state" : "IA" } +{ "_id" : "51009", "city" : "CALUMET", "loc" : [ -95.55487100000001, 42.953272 ], "pop" : 431, "state" : "IA" } +{ "_id" : "51010", "city" : "CASTANA", "loc" : [ -95.943121, 42.105404 ], "pop" : 533, "state" : "IA" } +{ "_id" : "51012", "city" : "CHEROKEE", "loc" : [ -95.556842, 42.748187 ], "pop" : 8339, "state" : "IA" } +{ "_id" : "51014", "city" : "CLEGHORN", "loc" : [ -95.712436, 42.808593 ], "pop" : 541, "state" : "IA" } +{ "_id" : "51016", "city" : "CORRECTIONVILLE", "loc" : [ -95.780382, 42.474322 ], "pop" : 1432, "state" : "IA" } +{ "_id" : "51018", "city" : "CUSHING", "loc" : [ -95.67748, 42.464182 ], "pop" : 261, "state" : "IA" } +{ "_id" : "51019", "city" : "DANBURY", "loc" : [ -95.726259, 42.269337 ], "pop" : 906, "state" : "IA" } +{ "_id" : "51020", "city" : "GALVA", "loc" : [ -95.429838, 42.510508 ], "pop" : 626, "state" : "IA" } +{ "_id" : "51022", "city" : "GRANVILLE", "loc" : [ -95.897167, 42.969252 ], "pop" : 592, "state" : "IA" } +{ "_id" : "51023", "city" : "HAWARDEN", "loc" : [ -96.472992, 43.001333 ], "pop" : 3097, "state" : "IA" } +{ "_id" : "51024", "city" : "HINTON", "loc" : [ -96.30503299999999, 42.604046 ], "pop" : 2449, "state" : "IA" } +{ "_id" : "51025", "city" : "HOLSTEIN", "loc" : [ -95.564971, 42.494779 ], "pop" : 1977, "state" : "IA" } +{ "_id" : "51026", "city" : "HORNICK", "loc" : [ -96.079553, 42.289741 ], "pop" : 894, "state" : "IA" } +{ "_id" : "51027", "city" : "IRETON", "loc" : [ -96.32322600000001, 42.966566 ], "pop" : 1154, "state" : "IA" } +{ "_id" : "51028", "city" : "KINGSLEY", "loc" : [ -95.976151, 42.619057 ], "pop" : 2138, "state" : "IA" } +{ "_id" : "51029", "city" : "LARRABEE", "loc" : [ -95.581228, 42.862758 ], "pop" : 607, "state" : "IA" } +{ "_id" : "51030", "city" : "LAWTON", "loc" : [ -96.21893, 42.504748 ], "pop" : 1481, "state" : "IA" } +{ "_id" : "51031", "city" : "LE MARS", "loc" : [ -96.17038599999999, 42.79623 ], "pop" : 11576, "state" : "IA" } +{ "_id" : "51033", "city" : "LINN GROVE", "loc" : [ -95.251249, 42.874229 ], "pop" : 722, "state" : "IA" } +{ "_id" : "51034", "city" : "MAPLETON", "loc" : [ -95.79093399999999, 42.158524 ], "pop" : 2038, "state" : "IA" } +{ "_id" : "51035", "city" : "MARCUS", "loc" : [ -95.803431, 42.819959 ], "pop" : 1654, "state" : "IA" } +{ "_id" : "51036", "city" : "MAURICE", "loc" : [ -96.165531, 42.962647 ], "pop" : 625, "state" : "IA" } +{ "_id" : "51037", "city" : "MERIDEN", "loc" : [ -95.64079700000001, 42.787416 ], "pop" : 333, "state" : "IA" } +{ "_id" : "51038", "city" : "MERRILL", "loc" : [ -96.228324, 42.704737 ], "pop" : 1468, "state" : "IA" } +{ "_id" : "51039", "city" : "MOVILLE", "loc" : [ -96.065583, 42.481924 ], "pop" : 2064, "state" : "IA" } +{ "_id" : "51040", "city" : "ONAWA", "loc" : [ -96.107213, 42.036967 ], "pop" : 3867, "state" : "IA" } +{ "_id" : "51041", "city" : "ORANGE CITY", "loc" : [ -96.05646400000001, 43.01849 ], "pop" : 6126, "state" : "IA" } +{ "_id" : "51044", "city" : "OTO", "loc" : [ -95.861575, 42.264592 ], "pop" : 340, "state" : "IA" } +{ "_id" : "51046", "city" : "PAULLINA", "loc" : [ -95.708322, 42.970277 ], "pop" : 1760, "state" : "IA" } +{ "_id" : "51047", "city" : "PETERSON", "loc" : [ -95.337658, 42.932794 ], "pop" : 640, "state" : "IA" } +{ "_id" : "51048", "city" : "PIERSON", "loc" : [ -95.89219300000001, 42.533493 ], "pop" : 642, "state" : "IA" } +{ "_id" : "51049", "city" : "QUIMBY", "loc" : [ -95.681175, 42.628711 ], "pop" : 562, "state" : "IA" } +{ "_id" : "51050", "city" : "REMSEN", "loc" : [ -95.95437800000001, 42.8149 ], "pop" : 2254, "state" : "IA" } +{ "_id" : "51051", "city" : "RODNEY", "loc" : [ -95.953456, 42.201541 ], "pop" : 120, "state" : "IA" } +{ "_id" : "51052", "city" : "SALIX", "loc" : [ -96.28791200000001, 42.330554 ], "pop" : 1210, "state" : "IA" } +{ "_id" : "51053", "city" : "SCHALLER", "loc" : [ -95.284587, 42.505501 ], "pop" : 1311, "state" : "IA" } +{ "_id" : "51054", "city" : "SERGEANT BLUFF", "loc" : [ -96.353392, 42.401895 ], "pop" : 2853, "state" : "IA" } +{ "_id" : "51055", "city" : "SLOAN", "loc" : [ -96.23063399999999, 42.242726 ], "pop" : 1303, "state" : "IA" } +{ "_id" : "51056", "city" : "SMITHLAND", "loc" : [ -95.94864699999999, 42.24079 ], "pop" : 495, "state" : "IA" } +{ "_id" : "51058", "city" : "SUTHERLAND", "loc" : [ -95.480665, 42.982623 ], "pop" : 1096, "state" : "IA" } +{ "_id" : "51059", "city" : "TURIN", "loc" : [ -95.95182800000001, 41.973189 ], "pop" : 387, "state" : "IA" } +{ "_id" : "51060", "city" : "UTE", "loc" : [ -95.712542, 42.058085 ], "pop" : 567, "state" : "IA" } +{ "_id" : "51061", "city" : "WASHTA", "loc" : [ -95.72953699999999, 42.578108 ], "pop" : 519, "state" : "IA" } +{ "_id" : "51062", "city" : "WESTFIELD", "loc" : [ -96.49198699999999, 42.695329 ], "pop" : 1435, "state" : "IA" } +{ "_id" : "51063", "city" : "WHITING", "loc" : [ -96.182247, 42.15216 ], "pop" : 895, "state" : "IA" } +{ "_id" : "51101", "city" : "SIOUX CITY", "loc" : [ -96.40291999999999, 42.497223 ], "pop" : 765, "state" : "IA" } +{ "_id" : "51103", "city" : "SIOUX CITY", "loc" : [ -96.42950999999999, 42.506793 ], "pop" : 16831, "state" : "IA" } +{ "_id" : "51104", "city" : "SIOUX CITY", "loc" : [ -96.400453, 42.52536 ], "pop" : 20441, "state" : "IA" } +{ "_id" : "51105", "city" : "SIOUX CITY", "loc" : [ -96.38285500000001, 42.503224 ], "pop" : 10372, "state" : "IA" } +{ "_id" : "51106", "city" : "SIOUX CITY", "loc" : [ -96.352755, 42.467057 ], "pop" : 25974, "state" : "IA" } +{ "_id" : "51107", "city" : "SIOUX CITY", "loc" : [ -96.376064, 42.490266 ], "pop" : 258, "state" : "IA" } +{ "_id" : "51108", "city" : "SIOUX CITY", "loc" : [ -96.361695, 42.546891 ], "pop" : 4615, "state" : "IA" } +{ "_id" : "51109", "city" : "SIOUX CITY", "loc" : [ -96.480304, 42.517287 ], "pop" : 2592, "state" : "IA" } +{ "_id" : "51110", "city" : "SIOUX CITY", "loc" : [ -96.372559, 42.400921 ], "pop" : 189, "state" : "IA" } +{ "_id" : "51111", "city" : "SIOUX CITY", "loc" : [ -96.37129400000001, 42.408912 ], "pop" : 12, "state" : "IA" } +{ "_id" : "51201", "city" : "SHELDON", "loc" : [ -95.840141, 43.180797 ], "pop" : 5585, "state" : "IA" } +{ "_id" : "51230", "city" : "ALVORD", "loc" : [ -96.290994, 43.320109 ], "pop" : 494, "state" : "IA" } +{ "_id" : "51231", "city" : "ARCHER", "loc" : [ -95.74165600000001, 43.117917 ], "pop" : 194, "state" : "IA" } +{ "_id" : "51232", "city" : "ASHTON", "loc" : [ -95.76550899999999, 43.305259 ], "pop" : 1090, "state" : "IA" } +{ "_id" : "51234", "city" : "BOYDEN", "loc" : [ -95.982309, 43.20343 ], "pop" : 1652, "state" : "IA" } +{ "_id" : "51235", "city" : "DOON", "loc" : [ -96.201987, 43.287183 ], "pop" : 957, "state" : "IA" } +{ "_id" : "51237", "city" : "GEORGE", "loc" : [ -95.989383, 43.343903 ], "pop" : 2326, "state" : "IA" } +{ "_id" : "51238", "city" : "HOSPERS", "loc" : [ -95.91417199999999, 43.079337 ], "pop" : 1491, "state" : "IA" } +{ "_id" : "51239", "city" : "HULL", "loc" : [ -96.13924799999999, 43.195201 ], "pop" : 2283, "state" : "IA" } +{ "_id" : "51240", "city" : "INWOOD", "loc" : [ -96.43629300000001, 43.304747 ], "pop" : 1434, "state" : "IA" } +{ "_id" : "51241", "city" : "LARCHWOOD", "loc" : [ -96.42522, 43.438673 ], "pop" : 2097, "state" : "IA" } +{ "_id" : "51243", "city" : "LITTLE ROCK", "loc" : [ -95.892622, 43.449571 ], "pop" : 688, "state" : "IA" } +{ "_id" : "51245", "city" : "PRIMGHAR", "loc" : [ -95.65330400000001, 43.075892 ], "pop" : 2167, "state" : "IA" } +{ "_id" : "51246", "city" : "ROCK RAPIDS", "loc" : [ -96.178055, 43.427192 ], "pop" : 3956, "state" : "IA" } +{ "_id" : "51247", "city" : "ROCK VALLEY", "loc" : [ -96.31034200000001, 43.201356 ], "pop" : 4100, "state" : "IA" } +{ "_id" : "51248", "city" : "SANBORN", "loc" : [ -95.662227, 43.189002 ], "pop" : 1632, "state" : "IA" } +{ "_id" : "51249", "city" : "SIBLEY", "loc" : [ -95.7424, 43.406929 ], "pop" : 3853, "state" : "IA" } +{ "_id" : "51250", "city" : "SIOUX CENTER", "loc" : [ -96.179952, 43.081416 ], "pop" : 7417, "state" : "IA" } +{ "_id" : "51301", "city" : "SPENCER", "loc" : [ -95.14569, 43.145107 ], "pop" : 12101, "state" : "IA" } +{ "_id" : "51331", "city" : "ARNOLDS PARK", "loc" : [ -95.13126099999999, 43.36358 ], "pop" : 1109, "state" : "IA" } +{ "_id" : "51333", "city" : "DICKENS", "loc" : [ -94.985383, 43.154836 ], "pop" : 732, "state" : "IA" } +{ "_id" : "51334", "city" : "ESTHERVILLE", "loc" : [ -94.818001, 43.401709 ], "pop" : 8614, "state" : "IA" } +{ "_id" : "51338", "city" : "EVERLY", "loc" : [ -95.322777, 43.160917 ], "pop" : 1153, "state" : "IA" } +{ "_id" : "51340", "city" : "FOSTORIA", "loc" : [ -95.185042, 43.225857 ], "pop" : 471, "state" : "IA" } +{ "_id" : "51342", "city" : "GRAETTINGER", "loc" : [ -94.733401, 43.227731 ], "pop" : 1259, "state" : "IA" } +{ "_id" : "51343", "city" : "GREENVILLE", "loc" : [ -95.058184, 43.033348 ], "pop" : 630, "state" : "IA" } +{ "_id" : "51345", "city" : "HARRIS", "loc" : [ -95.44260300000001, 43.456793 ], "pop" : 333, "state" : "IA" } +{ "_id" : "51346", "city" : "HARTLEY", "loc" : [ -95.481696, 43.179984 ], "pop" : 2574, "state" : "IA" } +{ "_id" : "51347", "city" : "LAKE PARK", "loc" : [ -95.321601, 43.445239 ], "pop" : 1320, "state" : "IA" } +{ "_id" : "51350", "city" : "MELVIN", "loc" : [ -95.592951, 43.284496 ], "pop" : 395, "state" : "IA" } +{ "_id" : "51351", "city" : "MILFORD", "loc" : [ -95.161534, 43.31964 ], "pop" : 2964, "state" : "IA" } +{ "_id" : "51354", "city" : "OCHEYEDAN", "loc" : [ -95.520366, 43.39105 ], "pop" : 1596, "state" : "IA" } +{ "_id" : "51355", "city" : "OKOBOJI", "loc" : [ -95.153026, 43.37938 ], "pop" : 1637, "state" : "IA" } +{ "_id" : "51357", "city" : "ROYAL", "loc" : [ -95.26785599999999, 43.048751 ], "pop" : 1035, "state" : "IA" } +{ "_id" : "51358", "city" : "RUTHVEN", "loc" : [ -94.884214, 43.144845 ], "pop" : 1283, "state" : "IA" } +{ "_id" : "51360", "city" : "SPIRIT LAKE", "loc" : [ -95.112336, 43.426211 ], "pop" : 6683, "state" : "IA" } +{ "_id" : "51363", "city" : "SUPERIOR", "loc" : [ -94.964935, 43.450317 ], "pop" : 333, "state" : "IA" } +{ "_id" : "51364", "city" : "TERRIL", "loc" : [ -94.973725, 43.324073 ], "pop" : 863, "state" : "IA" } +{ "_id" : "51365", "city" : "WALLINGFORD", "loc" : [ -94.82057, 43.312158 ], "pop" : 371, "state" : "IA" } +{ "_id" : "51366", "city" : "WEBB", "loc" : [ -94.995124, 42.950189 ], "pop" : 343, "state" : "IA" } +{ "_id" : "51401", "city" : "CARROLL", "loc" : [ -94.866664, 42.071972 ], "pop" : 11456, "state" : "IA" } +{ "_id" : "51430", "city" : "ARCADIA", "loc" : [ -95.03713999999999, 42.057279 ], "pop" : 1183, "state" : "IA" } +{ "_id" : "51431", "city" : "ARTHUR", "loc" : [ -95.367519, 42.336283 ], "pop" : 577, "state" : "IA" } +{ "_id" : "51432", "city" : "ASPINWALL", "loc" : [ -95.149936, 41.908252 ], "pop" : 367, "state" : "IA" } +{ "_id" : "51433", "city" : "YETTER", "loc" : [ -94.903447, 42.280895 ], "pop" : 882, "state" : "IA" } +{ "_id" : "51436", "city" : "BREDA", "loc" : [ -95.00067900000001, 42.175835 ], "pop" : 773, "state" : "IA" } +{ "_id" : "51439", "city" : "CHARTER OAK", "loc" : [ -95.59924100000001, 42.070735 ], "pop" : 797, "state" : "IA" } +{ "_id" : "51440", "city" : "DEDHAM", "loc" : [ -94.814896, 41.905539 ], "pop" : 562, "state" : "IA" } +{ "_id" : "51441", "city" : "DELOIT", "loc" : [ -95.286338, 42.085899 ], "pop" : 618, "state" : "IA" } +{ "_id" : "51442", "city" : "DENISON", "loc" : [ -95.363572, 42.019626 ], "pop" : 8507, "state" : "IA" } +{ "_id" : "51443", "city" : "GLIDDEN", "loc" : [ -94.714777, 42.061816 ], "pop" : 1518, "state" : "IA" } +{ "_id" : "51444", "city" : "HALBUR", "loc" : [ -94.93586000000001, 41.997357 ], "pop" : 720, "state" : "IA" } +{ "_id" : "51445", "city" : "IDA GROVE", "loc" : [ -95.464488, 42.340026 ], "pop" : 3633, "state" : "IA" } +{ "_id" : "51446", "city" : "IRWIN", "loc" : [ -95.195842, 41.794094 ], "pop" : 1120, "state" : "IA" } +{ "_id" : "51447", "city" : "KIRKMAN", "loc" : [ -95.267083, 41.73076 ], "pop" : 395, "state" : "IA" } +{ "_id" : "51448", "city" : "KIRON", "loc" : [ -95.31146, 42.179359 ], "pop" : 753, "state" : "IA" } +{ "_id" : "51449", "city" : "LAKE CITY", "loc" : [ -94.74578700000001, 42.270494 ], "pop" : 2539, "state" : "IA" } +{ "_id" : "51450", "city" : "LAKE VIEW", "loc" : [ -95.048562, 42.315367 ], "pop" : 1792, "state" : "IA" } +{ "_id" : "51451", "city" : "LANESBORO", "loc" : [ -94.690274, 42.174687 ], "pop" : 396, "state" : "IA" } +{ "_id" : "51452", "city" : "LIDDERDALE", "loc" : [ -94.79535300000001, 42.152815 ], "pop" : 525, "state" : "IA" } +{ "_id" : "51453", "city" : "LOHRVILLE", "loc" : [ -94.556605, 42.261923 ], "pop" : 615, "state" : "IA" } +{ "_id" : "51454", "city" : "MANILLA", "loc" : [ -95.239126, 41.892233 ], "pop" : 1185, "state" : "IA" } +{ "_id" : "51455", "city" : "MANNING", "loc" : [ -95.055622, 41.907248 ], "pop" : 1807, "state" : "IA" } +{ "_id" : "51458", "city" : "ODEBOLT", "loc" : [ -95.25005, 42.309514 ], "pop" : 1776, "state" : "IA" } +{ "_id" : "51459", "city" : "RALSTON", "loc" : [ -94.569779, 42.075655 ], "pop" : 231, "state" : "IA" } +{ "_id" : "51460", "city" : "RICKETTS", "loc" : [ -95.599547, 42.15406 ], "pop" : 346, "state" : "IA" } +{ "_id" : "51461", "city" : "SCHLESWIG", "loc" : [ -95.444309, 42.164586 ], "pop" : 1191, "state" : "IA" } +{ "_id" : "51462", "city" : "SCRANTON", "loc" : [ -94.55176400000001, 42.012381 ], "pop" : 814, "state" : "IA" } +{ "_id" : "51463", "city" : "TEMPLETON", "loc" : [ -94.93200899999999, 41.912077 ], "pop" : 681, "state" : "IA" } +{ "_id" : "51465", "city" : "VAIL", "loc" : [ -95.17776600000001, 42.033772 ], "pop" : 790, "state" : "IA" } +{ "_id" : "51466", "city" : "WALL LAKE", "loc" : [ -95.085156, 42.265252 ], "pop" : 1481, "state" : "IA" } +{ "_id" : "51467", "city" : "WESTSIDE", "loc" : [ -95.12730000000001, 42.10844 ], "pop" : 714, "state" : "IA" } +{ "_id" : "51501", "city" : "MANAWA", "loc" : [ -95.88099200000001, 41.252954 ], "pop" : 31614, "state" : "IA" } +{ "_id" : "51503", "city" : "COUNCIL BLUFFS", "loc" : [ -95.82508300000001, 41.261584 ], "pop" : 30513, "state" : "IA" } +{ "_id" : "51510", "city" : "CARTER LAKE", "loc" : [ -95.91406000000001, 41.292524 ], "pop" : 3200, "state" : "IA" } +{ "_id" : "51520", "city" : "ARION", "loc" : [ -95.46232999999999, 41.950406 ], "pop" : 194, "state" : "IA" } +{ "_id" : "51521", "city" : "AVOCA", "loc" : [ -95.350872, 41.476834 ], "pop" : 2032, "state" : "IA" } +{ "_id" : "51523", "city" : "BLENCOE", "loc" : [ -96.082663, 41.923662 ], "pop" : 373, "state" : "IA" } +{ "_id" : "51525", "city" : "CARSON", "loc" : [ -95.36808600000001, 41.225276 ], "pop" : 1398, "state" : "IA" } +{ "_id" : "51526", "city" : "CRESCENT", "loc" : [ -95.827648, 41.364378 ], "pop" : 1967, "state" : "IA" } +{ "_id" : "51527", "city" : "EARLING", "loc" : [ -95.340293, 41.827063 ], "pop" : 375, "state" : "IA" } +{ "_id" : "51528", "city" : "DOW CITY", "loc" : [ -95.4862, 41.913429 ], "pop" : 1313, "state" : "IA" } +{ "_id" : "51529", "city" : "EARLING", "loc" : [ -95.615709, 41.842301 ], "pop" : 1836, "state" : "IA" } +{ "_id" : "51530", "city" : "EARLING", "loc" : [ -95.42104500000001, 41.792483 ], "pop" : 1068, "state" : "IA" } +{ "_id" : "51531", "city" : "ELK HORN", "loc" : [ -95.070015, 41.582871 ], "pop" : 990, "state" : "IA" } +{ "_id" : "51532", "city" : "ELLIOTT", "loc" : [ -95.160237, 41.130617 ], "pop" : 879, "state" : "IA" } +{ "_id" : "51533", "city" : "EMERSON", "loc" : [ -95.410624, 41.028439 ], "pop" : 1529, "state" : "IA" } +{ "_id" : "51534", "city" : "GLENWOOD", "loc" : [ -95.73891999999999, 41.047009 ], "pop" : 6392, "state" : "IA" } +{ "_id" : "51535", "city" : "GRISWOLD", "loc" : [ -95.098989, 41.223842 ], "pop" : 1678, "state" : "IA" } +{ "_id" : "51536", "city" : "HANCOCK", "loc" : [ -95.344528, 41.383238 ], "pop" : 427, "state" : "IA" } +{ "_id" : "51537", "city" : "HARLAN", "loc" : [ -95.31110099999999, 41.64375 ], "pop" : 6934, "state" : "IA" } +{ "_id" : "51540", "city" : "HASTINGS", "loc" : [ -95.55309699999999, 40.960514 ], "pop" : 267, "state" : "IA" } +{ "_id" : "51541", "city" : "HENDERSON", "loc" : [ -95.458629, 41.125426 ], "pop" : 564, "state" : "IA" } +{ "_id" : "51542", "city" : "HONEY CREEK", "loc" : [ -95.8802, 41.463045 ], "pop" : 656, "state" : "IA" } +{ "_id" : "51543", "city" : "KIMBALLTON", "loc" : [ -95.055324, 41.635214 ], "pop" : 614, "state" : "IA" } +{ "_id" : "51544", "city" : "LEWIS", "loc" : [ -95.06202399999999, 41.296289 ], "pop" : 980, "state" : "IA" } +{ "_id" : "51545", "city" : "LITTLE SIOUX", "loc" : [ -96.031357, 41.808267 ], "pop" : 402, "state" : "IA" } +{ "_id" : "51546", "city" : "LOGAN", "loc" : [ -95.752478, 41.624345 ], "pop" : 2764, "state" : "IA" } +{ "_id" : "51548", "city" : "MC CLELLAND", "loc" : [ -95.68127800000001, 41.293168 ], "pop" : 714, "state" : "IA" } +{ "_id" : "51549", "city" : "MACEDONIA", "loc" : [ -95.431386, 41.191627 ], "pop" : 475, "state" : "IA" } +{ "_id" : "51550", "city" : "MAGNOLIA", "loc" : [ -95.854955, 41.708177 ], "pop" : 631, "state" : "IA" } +{ "_id" : "51551", "city" : "MALVERN", "loc" : [ -95.58398800000001, 41.007378 ], "pop" : 1409, "state" : "IA" } +{ "_id" : "51552", "city" : "MARNE", "loc" : [ -95.097308, 41.454681 ], "pop" : 388, "state" : "IA" } +{ "_id" : "51553", "city" : "MINDEN", "loc" : [ -95.55188699999999, 41.465355 ], "pop" : 917, "state" : "IA" } +{ "_id" : "51554", "city" : "MINEOLA", "loc" : [ -95.75569900000001, 41.110171 ], "pop" : 1276, "state" : "IA" } +{ "_id" : "51555", "city" : "MISSOURI VALLEY", "loc" : [ -95.891346, 41.564399 ], "pop" : 4330, "state" : "IA" } +{ "_id" : "51556", "city" : "MODALE", "loc" : [ -95.985225, 41.637143 ], "pop" : 505, "state" : "IA" } +{ "_id" : "51557", "city" : "MONDAMIN", "loc" : [ -96.007204, 41.708876 ], "pop" : 793, "state" : "IA" } +{ "_id" : "51558", "city" : "MOORHEAD", "loc" : [ -95.829031, 41.918601 ], "pop" : 589, "state" : "IA" } +{ "_id" : "51559", "city" : "NEOLA", "loc" : [ -95.67935799999999, 41.456383 ], "pop" : 1766, "state" : "IA" } +{ "_id" : "51560", "city" : "OAKLAND", "loc" : [ -95.379034, 41.311964 ], "pop" : 2385, "state" : "IA" } +{ "_id" : "51561", "city" : "PACIFIC JUNCTION", "loc" : [ -95.80464499999999, 41.027123 ], "pop" : 1228, "state" : "IA" } +{ "_id" : "51562", "city" : "PANAMA", "loc" : [ -95.48704600000001, 41.728813 ], "pop" : 511, "state" : "IA" } +{ "_id" : "51563", "city" : "PERSIA", "loc" : [ -95.56577, 41.56473 ], "pop" : 691, "state" : "IA" } +{ "_id" : "51564", "city" : "PISGAH", "loc" : [ -95.919172, 41.821376 ], "pop" : 673, "state" : "IA" } +{ "_id" : "51565", "city" : "PORTSMOUTH", "loc" : [ -95.510751, 41.648385 ], "pop" : 476, "state" : "IA" } +{ "_id" : "51566", "city" : "RED OAK", "loc" : [ -95.226924, 41.007949 ], "pop" : 7395, "state" : "IA" } +{ "_id" : "51570", "city" : "SHELBY", "loc" : [ -95.446888, 41.533898 ], "pop" : 941, "state" : "IA" } +{ "_id" : "51571", "city" : "SILVER CITY", "loc" : [ -95.626912, 41.113024 ], "pop" : 483, "state" : "IA" } +{ "_id" : "51572", "city" : "SOLDIER", "loc" : [ -95.78253100000001, 41.994188 ], "pop" : 665, "state" : "IA" } +{ "_id" : "51573", "city" : "STANTON", "loc" : [ -95.09876, 40.985924 ], "pop" : 1315, "state" : "IA" } +{ "_id" : "51575", "city" : "TREYNOR", "loc" : [ -95.617041, 41.220679 ], "pop" : 1619, "state" : "IA" } +{ "_id" : "51576", "city" : "UNDERWOOD", "loc" : [ -95.626997, 41.360294 ], "pop" : 1652, "state" : "IA" } +{ "_id" : "51577", "city" : "WALNUT", "loc" : [ -95.217973, 41.462329 ], "pop" : 1293, "state" : "IA" } +{ "_id" : "51578", "city" : "WESTPHALIA", "loc" : [ -95.386978, 41.718014 ], "pop" : 420, "state" : "IA" } +{ "_id" : "51579", "city" : "WOODBINE", "loc" : [ -95.700785, 41.737267 ], "pop" : 2105, "state" : "IA" } +{ "_id" : "51601", "city" : "SHENANDOAH", "loc" : [ -95.36479799999999, 40.758087 ], "pop" : 6226, "state" : "IA" } +{ "_id" : "51630", "city" : "BLANCHARD", "loc" : [ -95.205377, 40.612156 ], "pop" : 284, "state" : "IA" } +{ "_id" : "51631", "city" : "BRADDYVILLE", "loc" : [ -94.99557799999999, 40.599081 ], "pop" : 351, "state" : "IA" } +{ "_id" : "51632", "city" : "CLARINDA", "loc" : [ -95.037976, 40.749084 ], "pop" : 6652, "state" : "IA" } +{ "_id" : "51636", "city" : "COIN", "loc" : [ -95.221653, 40.668591 ], "pop" : 387, "state" : "IA" } +{ "_id" : "51637", "city" : "COLLEGE SPRINGS", "loc" : [ -95.099717, 40.617109 ], "pop" : 537, "state" : "IA" } +{ "_id" : "51638", "city" : "ESSEX", "loc" : [ -95.288777, 40.840359 ], "pop" : 1433, "state" : "IA" } +{ "_id" : "51639", "city" : "FARRAGUT", "loc" : [ -95.45549800000001, 40.729971 ], "pop" : 1055, "state" : "IA" } +{ "_id" : "51640", "city" : "HAMBURG", "loc" : [ -95.625789, 40.614902 ], "pop" : 1997, "state" : "IA" } +{ "_id" : "51645", "city" : "IMOGENE", "loc" : [ -95.435804, 40.863144 ], "pop" : 318, "state" : "IA" } +{ "_id" : "51646", "city" : "NEW MARKET", "loc" : [ -94.891662, 40.742174 ], "pop" : 702, "state" : "IA" } +{ "_id" : "51647", "city" : "NORTHBORO", "loc" : [ -95.30959199999999, 40.612737 ], "pop" : 287, "state" : "IA" } +{ "_id" : "51648", "city" : "PERCIVAL", "loc" : [ -95.809307, 40.740148 ], "pop" : 327, "state" : "IA" } +{ "_id" : "51649", "city" : "RANDOLPH", "loc" : [ -95.562386, 40.870353 ], "pop" : 419, "state" : "IA" } +{ "_id" : "51650", "city" : "RIVERTON", "loc" : [ -95.55780300000001, 40.686968 ], "pop" : 447, "state" : "IA" } +{ "_id" : "51651", "city" : "SHAMBAUGH", "loc" : [ -95.063591, 40.675735 ], "pop" : 456, "state" : "IA" } +{ "_id" : "51652", "city" : "SIDNEY", "loc" : [ -95.64027, 40.750671 ], "pop" : 1948, "state" : "IA" } +{ "_id" : "51653", "city" : "TABOR", "loc" : [ -95.672892, 40.900448 ], "pop" : 1626, "state" : "IA" } +{ "_id" : "51654", "city" : "THURMAN", "loc" : [ -95.760535, 40.84241 ], "pop" : 521, "state" : "IA" } +{ "_id" : "51656", "city" : "YORKTOWN", "loc" : [ -95.216335, 40.769244 ], "pop" : 257, "state" : "IA" } +{ "_id" : "52001", "city" : "DUBUQUE", "loc" : [ -90.68191400000001, 42.514977 ], "pop" : 41934, "state" : "IA" } +{ "_id" : "52002", "city" : "DUBUQUE", "loc" : [ -90.738372, 42.512191 ], "pop" : 12734, "state" : "IA" } +{ "_id" : "52003", "city" : "DUBUQUE", "loc" : [ -90.682884, 42.464916 ], "pop" : 13104, "state" : "IA" } +{ "_id" : "52030", "city" : "ANDREW", "loc" : [ -90.60035000000001, 42.158496 ], "pop" : 741, "state" : "IA" } +{ "_id" : "52031", "city" : "BELLEVUE", "loc" : [ -90.435603, 42.25825 ], "pop" : 2884, "state" : "IA" } +{ "_id" : "52032", "city" : "BERNARD", "loc" : [ -90.863032, 42.33207 ], "pop" : 861, "state" : "IA" } +{ "_id" : "52033", "city" : "CASCADE", "loc" : [ -91.01439499999999, 42.286959 ], "pop" : 3155, "state" : "IA" } +{ "_id" : "52035", "city" : "COLESBURG", "loc" : [ -91.19628, 42.638346 ], "pop" : 1401, "state" : "IA" } +{ "_id" : "52036", "city" : "DELAWARE", "loc" : [ -91.347176, 42.477713 ], "pop" : 262, "state" : "IA" } +{ "_id" : "52037", "city" : "DELMAR", "loc" : [ -90.608712, 41.996065 ], "pop" : 927, "state" : "IA" } +{ "_id" : "52038", "city" : "DUNDEE", "loc" : [ -91.547697, 42.593979 ], "pop" : 618, "state" : "IA" } +{ "_id" : "52039", "city" : "DURANGO", "loc" : [ -90.860794, 42.552564 ], "pop" : 874, "state" : "IA" } +{ "_id" : "52040", "city" : "DYERSVILLE", "loc" : [ -91.11826499999999, 42.483332 ], "pop" : 4709, "state" : "IA" } +{ "_id" : "52041", "city" : "EARLVILLE", "loc" : [ -91.259658, 42.500101 ], "pop" : 1566, "state" : "IA" } +{ "_id" : "52042", "city" : "EDGEWOOD", "loc" : [ -91.39495100000001, 42.654098 ], "pop" : 2095, "state" : "IA" } +{ "_id" : "52043", "city" : "ELKADER", "loc" : [ -91.41430800000001, 42.849627 ], "pop" : 2887, "state" : "IA" } +{ "_id" : "52044", "city" : "ELKPORT", "loc" : [ -91.283934, 42.739892 ], "pop" : 129, "state" : "IA" } +{ "_id" : "52045", "city" : "EPWORTH", "loc" : [ -90.931331, 42.443928 ], "pop" : 1931, "state" : "IA" } +{ "_id" : "52046", "city" : "FARLEY", "loc" : [ -91.00826600000001, 42.445059 ], "pop" : 2120, "state" : "IA" } +{ "_id" : "52047", "city" : "FARMERSBURG", "loc" : [ -91.338984, 42.952205 ], "pop" : 638, "state" : "IA" } +{ "_id" : "52048", "city" : "GARBER", "loc" : [ -91.259275, 42.74528 ], "pop" : 191, "state" : "IA" } +{ "_id" : "52049", "city" : "GARNAVILLO", "loc" : [ -91.215609, 42.876188 ], "pop" : 1408, "state" : "IA" } +{ "_id" : "52050", "city" : "GREELEY", "loc" : [ -91.32331600000001, 42.59389 ], "pop" : 679, "state" : "IA" } +{ "_id" : "52052", "city" : "GUTTENBERG", "loc" : [ -91.119015, 42.759443 ], "pop" : 4113, "state" : "IA" } +{ "_id" : "52053", "city" : "HOLY CROSS", "loc" : [ -90.97298600000001, 42.580778 ], "pop" : 1139, "state" : "IA" } +{ "_id" : "52054", "city" : "LA MOTTE", "loc" : [ -90.617673, 42.304448 ], "pop" : 1132, "state" : "IA" } +{ "_id" : "52057", "city" : "MANCHESTER", "loc" : [ -91.449001, 42.483418 ], "pop" : 7823, "state" : "IA" } +{ "_id" : "52060", "city" : "MAQUOKETA", "loc" : [ -90.677075, 42.07782 ], "pop" : 8374, "state" : "IA" } +{ "_id" : "52064", "city" : "MILES", "loc" : [ -90.336716, 42.100587 ], "pop" : 1083, "state" : "IA" } +{ "_id" : "52065", "city" : "NEW VIENNA", "loc" : [ -91.09763700000001, 42.567829 ], "pop" : 835, "state" : "IA" } +{ "_id" : "52066", "city" : "NORTH BUENA VIST", "loc" : [ -90.958772, 42.671103 ], "pop" : 404, "state" : "IA" } +{ "_id" : "52068", "city" : "PEOSTA", "loc" : [ -90.809372, 42.443535 ], "pop" : 1565, "state" : "IA" } +{ "_id" : "52069", "city" : "PRESTON", "loc" : [ -90.395382, 42.053854 ], "pop" : 1376, "state" : "IA" } +{ "_id" : "52070", "city" : "SABULA", "loc" : [ -90.19553000000001, 42.073668 ], "pop" : 1174, "state" : "IA" } +{ "_id" : "52071", "city" : "SAINT DONATUS", "loc" : [ -90.484514, 42.33119 ], "pop" : 757, "state" : "IA" } +{ "_id" : "52072", "city" : "SAINT OLAF", "loc" : [ -91.41754899999999, 42.948179 ], "pop" : 466, "state" : "IA" } +{ "_id" : "52073", "city" : "SHERRILL", "loc" : [ -90.811486, 42.617078 ], "pop" : 1381, "state" : "IA" } +{ "_id" : "52074", "city" : "SPRAGUEVILLE", "loc" : [ -90.473044, 42.072742 ], "pop" : 492, "state" : "IA" } +{ "_id" : "52075", "city" : "SPRINGBROOK", "loc" : [ -90.48463700000001, 42.167401 ], "pop" : 497, "state" : "IA" } +{ "_id" : "52076", "city" : "STRAWBERRY POINT", "loc" : [ -91.540926, 42.683225 ], "pop" : 1825, "state" : "IA" } +{ "_id" : "52077", "city" : "VOLGA", "loc" : [ -91.542891, 42.790389 ], "pop" : 562, "state" : "IA" } +{ "_id" : "52078", "city" : "WORTHINGTON", "loc" : [ -91.106919, 42.393001 ], "pop" : 797, "state" : "IA" } +{ "_id" : "52079", "city" : "ZWINGLE", "loc" : [ -90.750666, 42.277486 ], "pop" : 1320, "state" : "IA" } +{ "_id" : "52101", "city" : "DECORAH", "loc" : [ -91.793947, 43.322711 ], "pop" : 13593, "state" : "IA" } +{ "_id" : "52131", "city" : "BURR OAK", "loc" : [ -91.89207399999999, 43.463912 ], "pop" : 484, "state" : "IA" } +{ "_id" : "52132", "city" : "CALMAR", "loc" : [ -91.91257899999999, 43.197402 ], "pop" : 2218, "state" : "IA" } +{ "_id" : "52133", "city" : "CASTALIA", "loc" : [ -91.662904, 43.161179 ], "pop" : 1103, "state" : "IA" } +{ "_id" : "52134", "city" : "CHESTER", "loc" : [ -92.41552799999999, 43.473021 ], "pop" : 571, "state" : "IA" } +{ "_id" : "52135", "city" : "CLERMONT", "loc" : [ -91.65518400000001, 43.01298 ], "pop" : 817, "state" : "IA" } +{ "_id" : "52136", "city" : "CRESCO", "loc" : [ -92.12595399999999, 43.363007 ], "pop" : 5785, "state" : "IA" } +{ "_id" : "52140", "city" : "DORCHESTER", "loc" : [ -91.50765, 43.442136 ], "pop" : 757, "state" : "IA" } +{ "_id" : "52141", "city" : "ELGIN", "loc" : [ -91.645375, 42.954845 ], "pop" : 963, "state" : "IA" } +{ "_id" : "52142", "city" : "FAYETTE", "loc" : [ -91.81388699999999, 42.84941 ], "pop" : 1939, "state" : "IA" } +{ "_id" : "52144", "city" : "FORT ATKINSON", "loc" : [ -91.91336, 43.133932 ], "pop" : 1095, "state" : "IA" } +{ "_id" : "52146", "city" : "HARPERS FERRY", "loc" : [ -91.218822, 43.16977 ], "pop" : 915, "state" : "IA" } +{ "_id" : "52147", "city" : "HAWKEYE", "loc" : [ -91.957764, 42.948702 ], "pop" : 1205, "state" : "IA" } +{ "_id" : "52150", "city" : "JACKSON JUNCTION", "loc" : [ -92.01844699999999, 43.121369 ], "pop" : 369, "state" : "IA" } +{ "_id" : "52151", "city" : "LANSING", "loc" : [ -91.265979, 43.366126 ], "pop" : 1717, "state" : "IA" } +{ "_id" : "52154", "city" : "LAWLER", "loc" : [ -92.143974, 43.093247 ], "pop" : 1450, "state" : "IA" } +{ "_id" : "52155", "city" : "LIME SPRINGS", "loc" : [ -92.273324, 43.45563 ], "pop" : 672, "state" : "IA" } +{ "_id" : "52156", "city" : "LUANA", "loc" : [ -91.458275, 43.049281 ], "pop" : 388, "state" : "IA" } +{ "_id" : "52157", "city" : "MC GREGOR", "loc" : [ -91.18872399999999, 43.023719 ], "pop" : 1344, "state" : "IA" } +{ "_id" : "52158", "city" : "MARQUETTE", "loc" : [ -91.19214100000001, 43.050457 ], "pop" : 276, "state" : "IA" } +{ "_id" : "52159", "city" : "MONONA", "loc" : [ -91.45867699999999, 43.073485 ], "pop" : 4670, "state" : "IA" } +{ "_id" : "52160", "city" : "NEW ALBIN", "loc" : [ -91.294166, 43.489877 ], "pop" : 749, "state" : "IA" } +{ "_id" : "52161", "city" : "OSSIAN", "loc" : [ -91.773431, 43.137858 ], "pop" : 1349, "state" : "IA" } +{ "_id" : "52162", "city" : "POSTVILLE", "loc" : [ -91.547809, 43.003619 ], "pop" : 885, "state" : "IA" } +{ "_id" : "52164", "city" : "RANDALIA", "loc" : [ -91.88462800000001, 42.862551 ], "pop" : 159, "state" : "IA" } +{ "_id" : "52165", "city" : "RIDGEWAY", "loc" : [ -92.00341299999999, 43.297853 ], "pop" : 636, "state" : "IA" } +{ "_id" : "52166", "city" : "SAINT LUCAS", "loc" : [ -91.91156100000001, 43.047703 ], "pop" : 638, "state" : "IA" } +{ "_id" : "52169", "city" : "WADENA", "loc" : [ -91.663865, 42.854956 ], "pop" : 551, "state" : "IA" } +{ "_id" : "52170", "city" : "WATERVILLE", "loc" : [ -91.26304500000001, 43.263608 ], "pop" : 1204, "state" : "IA" } +{ "_id" : "52171", "city" : "WAUCOMA", "loc" : [ -92.03022, 43.043329 ], "pop" : 727, "state" : "IA" } +{ "_id" : "52172", "city" : "WAUKON", "loc" : [ -91.479994, 43.263951 ], "pop" : 6134, "state" : "IA" } +{ "_id" : "52175", "city" : "ELDORADO", "loc" : [ -91.803602, 42.973232 ], "pop" : 3353, "state" : "IA" } +{ "_id" : "52201", "city" : "AINSWORTH", "loc" : [ -91.547173, 41.320226 ], "pop" : 1265, "state" : "IA" } +{ "_id" : "52202", "city" : "ALBURNETT", "loc" : [ -91.639245, 42.158322 ], "pop" : 1038, "state" : "IA" } +{ "_id" : "52203", "city" : "AMANA", "loc" : [ -91.88545000000001, 41.831284 ], "pop" : 450, "state" : "IA" } +{ "_id" : "52205", "city" : "ANAMOSA", "loc" : [ -91.285115, 42.107763 ], "pop" : 7264, "state" : "IA" } +{ "_id" : "52206", "city" : "ATKINS", "loc" : [ -91.87596600000001, 41.988103 ], "pop" : 1347, "state" : "IA" } +{ "_id" : "52207", "city" : "BALDWIN", "loc" : [ -90.819968, 42.073188 ], "pop" : 362, "state" : "IA" } +{ "_id" : "52208", "city" : "BELLE PLAINE", "loc" : [ -92.257381, 41.899159 ], "pop" : 3562, "state" : "IA" } +{ "_id" : "52209", "city" : "BLAIRSTOWN", "loc" : [ -92.08286099999999, 41.906338 ], "pop" : 672, "state" : "IA" } +{ "_id" : "52210", "city" : "BRANDON", "loc" : [ -92.005892, 42.330912 ], "pop" : 717, "state" : "IA" } +{ "_id" : "52211", "city" : "BROOKLYN", "loc" : [ -92.428462, 41.732147 ], "pop" : 2196, "state" : "IA" } +{ "_id" : "52212", "city" : "CENTER JUNCTION", "loc" : [ -91.067013, 42.092585 ], "pop" : 647, "state" : "IA" } +{ "_id" : "52213", "city" : "CENTER POINT", "loc" : [ -91.775764, 42.189844 ], "pop" : 2462, "state" : "IA" } +{ "_id" : "52214", "city" : "CENTRAL CITY", "loc" : [ -91.491399, 42.198234 ], "pop" : 3478, "state" : "IA" } +{ "_id" : "52215", "city" : "CHELSEA", "loc" : [ -92.407815, 41.913132 ], "pop" : 906, "state" : "IA" } +{ "_id" : "52216", "city" : "CLARENCE", "loc" : [ -91.060457, 41.88958 ], "pop" : 1219, "state" : "IA" } +{ "_id" : "52217", "city" : "CLUTIER", "loc" : [ -92.376347, 42.078892 ], "pop" : 497, "state" : "IA" } +{ "_id" : "52218", "city" : "COGGON", "loc" : [ -91.541285, 42.279158 ], "pop" : 1053, "state" : "IA" } +{ "_id" : "52220", "city" : "CONROY", "loc" : [ -91.96947900000001, 41.74255 ], "pop" : 21, "state" : "IA" } +{ "_id" : "52222", "city" : "DEEP RIVER", "loc" : [ -92.364513, 41.571713 ], "pop" : 596, "state" : "IA" } +{ "_id" : "52223", "city" : "DELHI", "loc" : [ -91.27022599999999, 42.427082 ], "pop" : 1530, "state" : "IA" } +{ "_id" : "52224", "city" : "DYSART", "loc" : [ -92.318731, 42.169017 ], "pop" : 1513, "state" : "IA" } +{ "_id" : "52225", "city" : "ELBERON", "loc" : [ -92.331447, 42.008769 ], "pop" : 337, "state" : "IA" } +{ "_id" : "52226", "city" : "ELWOOD", "loc" : [ -90.724609, 41.99083 ], "pop" : 413, "state" : "IA" } +{ "_id" : "52227", "city" : "ELY", "loc" : [ -91.573767, 41.894275 ], "pop" : 1091, "state" : "IA" } +{ "_id" : "52228", "city" : "FAIRFAX", "loc" : [ -91.780102, 41.915304 ], "pop" : 1392, "state" : "IA" } +{ "_id" : "52229", "city" : "GARRISON", "loc" : [ -92.16440900000001, 42.158827 ], "pop" : 872, "state" : "IA" } +{ "_id" : "52231", "city" : "HARPER", "loc" : [ -92.038758, 41.37283 ], "pop" : 324, "state" : "IA" } +{ "_id" : "52232", "city" : "HARTWICK", "loc" : [ -92.35384500000001, 41.808019 ], "pop" : 376, "state" : "IA" } +{ "_id" : "52233", "city" : "HIAWATHA", "loc" : [ -91.67695999999999, 42.042455 ], "pop" : 4966, "state" : "IA" } +{ "_id" : "52236", "city" : "HOMESTEAD", "loc" : [ -91.879471, 41.733858 ], "pop" : 557, "state" : "IA" } +{ "_id" : "52237", "city" : "HOPKINTON", "loc" : [ -91.24605099999999, 42.342164 ], "pop" : 1547, "state" : "IA" } +{ "_id" : "52240", "city" : "IOWA CITY", "loc" : [ -91.51119199999999, 41.654899 ], "pop" : 25049, "state" : "IA" } +{ "_id" : "52241", "city" : "CORALVILLE", "loc" : [ -91.590608, 41.693666 ], "pop" : 12646, "state" : "IA" } +{ "_id" : "52245", "city" : "IOWA CITY", "loc" : [ -91.51506999999999, 41.664916 ], "pop" : 21140, "state" : "IA" } +{ "_id" : "52246", "city" : "IOWA CITY", "loc" : [ -91.56688200000001, 41.643813 ], "pop" : 22869, "state" : "IA" } +{ "_id" : "52247", "city" : "KALONA", "loc" : [ -91.70567800000001, 41.482299 ], "pop" : 3058, "state" : "IA" } +{ "_id" : "52248", "city" : "KEOTA", "loc" : [ -91.96406399999999, 41.350429 ], "pop" : 1439, "state" : "IA" } +{ "_id" : "52249", "city" : "KEYSTONE", "loc" : [ -92.217944, 42.015636 ], "pop" : 1110, "state" : "IA" } +{ "_id" : "52250", "city" : "KINROSS", "loc" : [ -92.001007, 41.460998 ], "pop" : 374, "state" : "IA" } +{ "_id" : "52251", "city" : "LADORA", "loc" : [ -92.187281, 41.756353 ], "pop" : 304, "state" : "IA" } +{ "_id" : "52253", "city" : "LISBON", "loc" : [ -91.38613700000001, 41.921169 ], "pop" : 1581, "state" : "IA" } +{ "_id" : "52254", "city" : "LOST NATION", "loc" : [ -90.82653999999999, 41.974503 ], "pop" : 768, "state" : "IA" } +{ "_id" : "52255", "city" : "LOWDEN", "loc" : [ -90.93822, 41.859393 ], "pop" : 1488, "state" : "IA" } +{ "_id" : "52257", "city" : "LUZERNE", "loc" : [ -92.179334, 41.90614 ], "pop" : 110, "state" : "IA" } +{ "_id" : "52301", "city" : "MARENGO", "loc" : [ -92.07204900000001, 41.786286 ], "pop" : 4856, "state" : "IA" } +{ "_id" : "52302", "city" : "MARION", "loc" : [ -91.59413499999999, 42.041095 ], "pop" : 23227, "state" : "IA" } +{ "_id" : "52305", "city" : "MARTELLE", "loc" : [ -91.321703, 42.003512 ], "pop" : 716, "state" : "IA" } +{ "_id" : "52306", "city" : "MECHANICSVILLE", "loc" : [ -91.27637, 41.903906 ], "pop" : 1516, "state" : "IA" } +{ "_id" : "52307", "city" : "MIDDLE AMANA", "loc" : [ -91.882696, 41.799737 ], "pop" : 902, "state" : "IA" } +{ "_id" : "52308", "city" : "MILLERSBURG", "loc" : [ -92.160843, 41.575099 ], "pop" : 223, "state" : "IA" } +{ "_id" : "52309", "city" : "MONMOUTH", "loc" : [ -90.878551, 42.07716 ], "pop" : 304, "state" : "IA" } +{ "_id" : "52310", "city" : "MONTICELLO", "loc" : [ -91.19890100000001, 42.232591 ], "pop" : 5549, "state" : "IA" } +{ "_id" : "52313", "city" : "MOUNT AUBURN", "loc" : [ -92.159485, 42.255395 ], "pop" : 784, "state" : "IA" } +{ "_id" : "52314", "city" : "MOUNT VERNON", "loc" : [ -91.42737099999999, 41.928741 ], "pop" : 4874, "state" : "IA" } +{ "_id" : "52315", "city" : "NEWHALL", "loc" : [ -91.97788799999999, 41.992685 ], "pop" : 1216, "state" : "IA" } +{ "_id" : "52316", "city" : "NORTH ENGLISH", "loc" : [ -92.089291, 41.524128 ], "pop" : 1287, "state" : "IA" } +{ "_id" : "52317", "city" : "NORTH LIBERTY", "loc" : [ -91.60612, 41.744318 ], "pop" : 3241, "state" : "IA" } +{ "_id" : "52318", "city" : "NORWAY", "loc" : [ -91.89197, 41.899176 ], "pop" : 1317, "state" : "IA" } +{ "_id" : "52320", "city" : "OLIN", "loc" : [ -91.14092599999999, 41.995423 ], "pop" : 1427, "state" : "IA" } +{ "_id" : "52321", "city" : "ONSLOW", "loc" : [ -90.97305, 42.123509 ], "pop" : 322, "state" : "IA" } +{ "_id" : "52322", "city" : "OXFORD", "loc" : [ -91.772418, 41.650687 ], "pop" : 3141, "state" : "IA" } +{ "_id" : "52323", "city" : "OXFORD JUNCTION", "loc" : [ -90.954341, 41.985382 ], "pop" : 909, "state" : "IA" } +{ "_id" : "52324", "city" : "PALO", "loc" : [ -91.78770299999999, 42.036496 ], "pop" : 1528, "state" : "IA" } +{ "_id" : "52325", "city" : "PARNELL", "loc" : [ -92.00515900000001, 41.570161 ], "pop" : 499, "state" : "IA" } +{ "_id" : "52326", "city" : "QUASQUETON", "loc" : [ -91.76795, 42.395551 ], "pop" : 834, "state" : "IA" } +{ "_id" : "52327", "city" : "RIVERSIDE", "loc" : [ -91.57414, 41.475792 ], "pop" : 1514, "state" : "IA" } +{ "_id" : "52328", "city" : "ROBINS", "loc" : [ -91.664841, 42.073092 ], "pop" : 877, "state" : "IA" } +{ "_id" : "52329", "city" : "ROWLEY", "loc" : [ -91.787543, 42.343449 ], "pop" : 1393, "state" : "IA" } +{ "_id" : "52330", "city" : "RYAN", "loc" : [ -91.484838, 42.343643 ], "pop" : 1201, "state" : "IA" } +{ "_id" : "52331", "city" : "SCOTCH GROVE", "loc" : [ -91.083682, 42.164441 ], "pop" : 447, "state" : "IA" } +{ "_id" : "52332", "city" : "SHELLSBURG", "loc" : [ -91.874568, 42.084829 ], "pop" : 1463, "state" : "IA" } +{ "_id" : "52333", "city" : "SOLON", "loc" : [ -91.50860900000001, 41.809913 ], "pop" : 2894, "state" : "IA" } +{ "_id" : "52334", "city" : "SOUTH AMANA", "loc" : [ -91.92626, 41.757609 ], "pop" : 45, "state" : "IA" } +{ "_id" : "52335", "city" : "SOUTH ENGLISH", "loc" : [ -92.102557, 41.46214 ], "pop" : 502, "state" : "IA" } +{ "_id" : "52336", "city" : "SPRINGVILLE", "loc" : [ -91.43935, 42.060741 ], "pop" : 2011, "state" : "IA" } +{ "_id" : "52337", "city" : "STANWOOD", "loc" : [ -91.166202, 41.896318 ], "pop" : 970, "state" : "IA" } +{ "_id" : "52338", "city" : "SWISHER", "loc" : [ -91.67391600000001, 41.826843 ], "pop" : 3101, "state" : "IA" } +{ "_id" : "52339", "city" : "TAMA", "loc" : [ -92.580049, 41.961642 ], "pop" : 3242, "state" : "IA" } +{ "_id" : "52341", "city" : "TODDVILLE", "loc" : [ -91.728981, 42.103932 ], "pop" : 1337, "state" : "IA" } +{ "_id" : "52342", "city" : "TOLEDO", "loc" : [ -92.56620599999999, 42.007696 ], "pop" : 3891, "state" : "IA" } +{ "_id" : "52343", "city" : "TORONTO", "loc" : [ -90.79388899999999, 41.89709 ], "pop" : 660, "state" : "IA" } +{ "_id" : "52346", "city" : "VAN HORNE", "loc" : [ -92.104617, 42.019394 ], "pop" : 1215, "state" : "IA" } +{ "_id" : "52347", "city" : "VICTOR", "loc" : [ -92.284172, 41.729004 ], "pop" : 1092, "state" : "IA" } +{ "_id" : "52348", "city" : "VINING", "loc" : [ -92.369687, 41.979881 ], "pop" : 244, "state" : "IA" } +{ "_id" : "52349", "city" : "VINTON", "loc" : [ -91.989154, 42.174284 ], "pop" : 8276, "state" : "IA" } +{ "_id" : "52352", "city" : "WALKER", "loc" : [ -91.73017900000001, 42.272024 ], "pop" : 1706, "state" : "IA" } +{ "_id" : "52353", "city" : "WASHINGTON", "loc" : [ -91.698671, 41.301453 ], "pop" : 9381, "state" : "IA" } +{ "_id" : "52354", "city" : "WATKINS", "loc" : [ -91.99646799999999, 41.903993 ], "pop" : 485, "state" : "IA" } +{ "_id" : "52355", "city" : "WEBSTER", "loc" : [ -92.176525, 41.436408 ], "pop" : 154, "state" : "IA" } +{ "_id" : "52356", "city" : "WELLMAN", "loc" : [ -91.83995299999999, 41.470032 ], "pop" : 1904, "state" : "IA" } +{ "_id" : "52357", "city" : "WEST AMANA", "loc" : [ -91.933566, 41.802996 ], "pop" : 90, "state" : "IA" } +{ "_id" : "52358", "city" : "WEST BRANCH", "loc" : [ -91.3141, 41.672622 ], "pop" : 3533, "state" : "IA" } +{ "_id" : "52359", "city" : "WEST CHESTER", "loc" : [ -91.861858, 41.361019 ], "pop" : 500, "state" : "IA" } +{ "_id" : "52361", "city" : "WILLIAMSBURG", "loc" : [ -92.024011, 41.639308 ], "pop" : 4304, "state" : "IA" } +{ "_id" : "52362", "city" : "WYOMING", "loc" : [ -90.994024, 42.060352 ], "pop" : 884, "state" : "IA" } +{ "_id" : "52401", "city" : "CEDAR RAPIDS", "loc" : [ -91.655382, 41.9743 ], "pop" : 1924, "state" : "IA" } +{ "_id" : "52402", "city" : "CEDAR RAPIDS", "loc" : [ -91.661222, 42.018778 ], "pop" : 37211, "state" : "IA" } +{ "_id" : "52403", "city" : "CEDAR RAPIDS", "loc" : [ -91.625919, 41.984312 ], "pop" : 25064, "state" : "IA" } +{ "_id" : "52404", "city" : "CEDAR RAPIDS", "loc" : [ -91.685286, 41.952108 ], "pop" : 28262, "state" : "IA" } +{ "_id" : "52405", "city" : "CEDAR RAPIDS", "loc" : [ -91.709816, 41.980422 ], "pop" : 23685, "state" : "IA" } +{ "_id" : "52501", "city" : "HIGHLAND CENTER", "loc" : [ -92.413428, 41.015099 ], "pop" : 29462, "state" : "IA" } +{ "_id" : "52530", "city" : "AGENCY", "loc" : [ -92.316231, 40.995693 ], "pop" : 1233, "state" : "IA" } +{ "_id" : "52531", "city" : "ALBIA", "loc" : [ -92.794619, 41.028718 ], "pop" : 6397, "state" : "IA" } +{ "_id" : "52533", "city" : "BATAVIA", "loc" : [ -92.14305899999999, 40.99048 ], "pop" : 1164, "state" : "IA" } +{ "_id" : "52534", "city" : "BEACON", "loc" : [ -92.72843, 41.287133 ], "pop" : 1559, "state" : "IA" } +{ "_id" : "52535", "city" : "BIRMINGHAM", "loc" : [ -91.95343099999999, 40.862605 ], "pop" : 1023, "state" : "IA" } +{ "_id" : "52536", "city" : "BLAKESBURG", "loc" : [ -92.594037, 40.984763 ], "pop" : 1337, "state" : "IA" } +{ "_id" : "52537", "city" : "BLOOMFIELD", "loc" : [ -92.398712, 40.732368 ], "pop" : 4788, "state" : "IA" } +{ "_id" : "52538", "city" : "WEST GROVE", "loc" : [ -92.54984899999999, 40.719646 ], "pop" : 419, "state" : "IA" } +{ "_id" : "52540", "city" : "BRIGHTON", "loc" : [ -91.828351, 41.154331 ], "pop" : 1686, "state" : "IA" } +{ "_id" : "52542", "city" : "CANTRIL", "loc" : [ -92.046521, 40.654598 ], "pop" : 490, "state" : "IA" } +{ "_id" : "52543", "city" : "CEDAR", "loc" : [ -92.509021, 41.212054 ], "pop" : 242, "state" : "IA" } +{ "_id" : "52544", "city" : "CENTERVILLE", "loc" : [ -92.872826, 40.73259 ], "pop" : 7725, "state" : "IA" } +{ "_id" : "52548", "city" : "CHILLICOTHE", "loc" : [ -92.53276200000001, 41.077041 ], "pop" : 249, "state" : "IA" } +{ "_id" : "52549", "city" : "CINCINNATI", "loc" : [ -92.921898, 40.634384 ], "pop" : 793, "state" : "IA" } +{ "_id" : "52550", "city" : "DELTA", "loc" : [ -92.33591199999999, 41.316682 ], "pop" : 614, "state" : "IA" } +{ "_id" : "52551", "city" : "DOUDS", "loc" : [ -92.045222, 40.803931 ], "pop" : 15, "state" : "IA" } +{ "_id" : "52552", "city" : "DRAKESVILLE", "loc" : [ -92.505109, 40.825332 ], "pop" : 1576, "state" : "IA" } +{ "_id" : "52553", "city" : "EDDYVILLE", "loc" : [ -92.622052, 41.153266 ], "pop" : 1474, "state" : "IA" } +{ "_id" : "52554", "city" : "ELDON", "loc" : [ -92.226754, 40.92613 ], "pop" : 1603, "state" : "IA" } +{ "_id" : "52555", "city" : "EXLINE", "loc" : [ -92.826999, 40.641399 ], "pop" : 432, "state" : "IA" } +{ "_id" : "52556", "city" : "FAIRFIELD", "loc" : [ -91.957611, 41.003943 ], "pop" : 12147, "state" : "IA" } +{ "_id" : "52560", "city" : "FLORIS", "loc" : [ -92.324715, 40.859071 ], "pop" : 1087, "state" : "IA" } +{ "_id" : "52561", "city" : "FREMONT", "loc" : [ -92.43618600000001, 41.211739 ], "pop" : 835, "state" : "IA" } +{ "_id" : "52563", "city" : "HEDRICK", "loc" : [ -92.309725, 41.182578 ], "pop" : 1304, "state" : "IA" } +{ "_id" : "52565", "city" : "KEOSAUQUA", "loc" : [ -91.970434, 40.74235 ], "pop" : 2022, "state" : "IA" } +{ "_id" : "52566", "city" : "KIRKVILLE", "loc" : [ -92.46989499999999, 41.117927 ], "pop" : 670, "state" : "IA" } +{ "_id" : "52567", "city" : "LIBERTYVILLE", "loc" : [ -92.024951, 40.949863 ], "pop" : 658, "state" : "IA" } +{ "_id" : "52569", "city" : "MELROSE", "loc" : [ -93.01451400000001, 40.966466 ], "pop" : 664, "state" : "IA" } +{ "_id" : "52570", "city" : "MILTON", "loc" : [ -92.143793, 40.672143 ], "pop" : 851, "state" : "IA" } +{ "_id" : "52571", "city" : "MORAVIA", "loc" : [ -92.853358, 40.882522 ], "pop" : 1143, "state" : "IA" } +{ "_id" : "52572", "city" : "MOULTON", "loc" : [ -92.683252, 40.686617 ], "pop" : 1073, "state" : "IA" } +{ "_id" : "52573", "city" : "MOUNT STERLING", "loc" : [ -91.902663, 40.645765 ], "pop" : 249, "state" : "IA" } +{ "_id" : "52574", "city" : "MYSTIC", "loc" : [ -92.928437, 40.788268 ], "pop" : 1002, "state" : "IA" } +{ "_id" : "52575", "city" : "NUMA", "loc" : [ -93.013233, 40.674147 ], "pop" : 563, "state" : "IA" } +{ "_id" : "52576", "city" : "OLLIE", "loc" : [ -92.135366, 41.200134 ], "pop" : 631, "state" : "IA" } +{ "_id" : "52577", "city" : "OSKALOOSA", "loc" : [ -92.64393, 41.294205 ], "pop" : 14376, "state" : "IA" } +{ "_id" : "52580", "city" : "PACKWOOD", "loc" : [ -92.066389, 41.122781 ], "pop" : 862, "state" : "IA" } +{ "_id" : "52581", "city" : "PLANO", "loc" : [ -93.038554, 40.775109 ], "pop" : 414, "state" : "IA" } +{ "_id" : "52583", "city" : "PROMISE CITY", "loc" : [ -93.152654, 40.758477 ], "pop" : 370, "state" : "IA" } +{ "_id" : "52584", "city" : "PULASKI", "loc" : [ -92.25797300000001, 40.694081 ], "pop" : 442, "state" : "IA" } +{ "_id" : "52585", "city" : "RICHLAND", "loc" : [ -91.973921, 41.193905 ], "pop" : 1082, "state" : "IA" } +{ "_id" : "52586", "city" : "ROSE HILL", "loc" : [ -92.471958, 41.330918 ], "pop" : 795, "state" : "IA" } +{ "_id" : "52588", "city" : "SELMA", "loc" : [ -92.11067199999999, 40.851936 ], "pop" : 659, "state" : "IA" } +{ "_id" : "52590", "city" : "SEYMOUR", "loc" : [ -93.136826, 40.672416 ], "pop" : 1192, "state" : "IA" } +{ "_id" : "52591", "city" : "SIGOURNEY", "loc" : [ -92.201888, 41.330071 ], "pop" : 3402, "state" : "IA" } +{ "_id" : "52593", "city" : "UDELL", "loc" : [ -92.718512, 40.783573 ], "pop" : 195, "state" : "IA" } +{ "_id" : "52594", "city" : "UNIONVILLE", "loc" : [ -92.69345199999999, 40.841637 ], "pop" : 403, "state" : "IA" } +{ "_id" : "52601", "city" : "BURLINGTON", "loc" : [ -91.116972, 40.808665 ], "pop" : 30564, "state" : "IA" } +{ "_id" : "52619", "city" : "ARGYLE", "loc" : [ -91.563896, 40.565658 ], "pop" : 1899, "state" : "IA" } +{ "_id" : "52620", "city" : "BONAPARTE", "loc" : [ -91.789734, 40.714825 ], "pop" : 903, "state" : "IA" } +{ "_id" : "52621", "city" : "CRAWFORDSVILLE", "loc" : [ -91.541444, 41.209257 ], "pop" : 603, "state" : "IA" } +{ "_id" : "52623", "city" : "DANVILLE", "loc" : [ -91.314027, 40.854046 ], "pop" : 1694, "state" : "IA" } +{ "_id" : "52624", "city" : "DENMARK", "loc" : [ -91.326593, 40.748693 ], "pop" : 869, "state" : "IA" } +{ "_id" : "52625", "city" : "DONNELLSON", "loc" : [ -91.574547, 40.661171 ], "pop" : 1823, "state" : "IA" } +{ "_id" : "52626", "city" : "FARMINGTON", "loc" : [ -91.744719, 40.639715 ], "pop" : 961, "state" : "IA" } +{ "_id" : "52627", "city" : "FORT MADISON", "loc" : [ -91.33982899999999, 40.633008 ], "pop" : 14472, "state" : "IA" } +{ "_id" : "52630", "city" : "HILLSBORO", "loc" : [ -91.711938, 40.837211 ], "pop" : 213, "state" : "IA" } +{ "_id" : "52631", "city" : "HOUGHTON", "loc" : [ -91.63930000000001, 40.775001 ], "pop" : 448, "state" : "IA" } +{ "_id" : "52632", "city" : "KEOKUK", "loc" : [ -91.398234, 40.409434 ], "pop" : 13995, "state" : "IA" } +{ "_id" : "52635", "city" : "LOCKRIDGE", "loc" : [ -91.76454, 41.011867 ], "pop" : 693, "state" : "IA" } +{ "_id" : "52637", "city" : "MEDIAPOLIS", "loc" : [ -91.132142, 41.005932 ], "pop" : 3044, "state" : "IA" } +{ "_id" : "52638", "city" : "MIDDLETOWN", "loc" : [ -91.26310599999999, 40.82963 ], "pop" : 440, "state" : "IA" } +{ "_id" : "52639", "city" : "MONTROSE", "loc" : [ -91.423985, 40.513915 ], "pop" : 1857, "state" : "IA" } +{ "_id" : "52640", "city" : "MORNING SUN", "loc" : [ -91.258146, 41.098424 ], "pop" : 1165, "state" : "IA" } +{ "_id" : "52641", "city" : "MOUNT PLEASANT", "loc" : [ -91.56142699999999, 40.964573 ], "pop" : 11113, "state" : "IA" } +{ "_id" : "52644", "city" : "MOUNT UNION", "loc" : [ -91.413831, 41.03735 ], "pop" : 446, "state" : "IA" } +{ "_id" : "52645", "city" : "NEW LONDON", "loc" : [ -91.39858700000001, 40.916055 ], "pop" : 3627, "state" : "IA" } +{ "_id" : "52646", "city" : "OAKVILLE", "loc" : [ -91.04392199999999, 41.100326 ], "pop" : 709, "state" : "IA" } +{ "_id" : "52647", "city" : "OLDS", "loc" : [ -91.548413, 41.12065 ], "pop" : 711, "state" : "IA" } +{ "_id" : "52649", "city" : "SALEM", "loc" : [ -91.63362100000001, 40.856804 ], "pop" : 786, "state" : "IA" } +{ "_id" : "52650", "city" : "SPERRY", "loc" : [ -91.185047, 40.941939 ], "pop" : 700, "state" : "IA" } +{ "_id" : "52651", "city" : "STOCKPORT", "loc" : [ -91.80349699999999, 40.858933 ], "pop" : 503, "state" : "IA" } +{ "_id" : "52653", "city" : "WAPELLO", "loc" : [ -91.171921, 41.206982 ], "pop" : 4379, "state" : "IA" } +{ "_id" : "52654", "city" : "WAYLAND", "loc" : [ -91.658946, 41.144919 ], "pop" : 1626, "state" : "IA" } +{ "_id" : "52655", "city" : "WEST BURLINGTON", "loc" : [ -91.179894, 40.832081 ], "pop" : 5420, "state" : "IA" } +{ "_id" : "52656", "city" : "WEST POINT", "loc" : [ -91.439733, 40.714986 ], "pop" : 2144, "state" : "IA" } +{ "_id" : "52657", "city" : "SAINT PAUL", "loc" : [ -91.53754000000001, 40.769306 ], "pop" : 623, "state" : "IA" } +{ "_id" : "52658", "city" : "WEVER", "loc" : [ -91.226767, 40.706652 ], "pop" : 546, "state" : "IA" } +{ "_id" : "52659", "city" : "WINFIELD", "loc" : [ -91.43789200000001, 41.125693 ], "pop" : 1349, "state" : "IA" } +{ "_id" : "52660", "city" : "YARMOUTH", "loc" : [ -91.317548, 41.029687 ], "pop" : 339, "state" : "IA" } +{ "_id" : "52701", "city" : "ANDOVER", "loc" : [ -90.238584, 41.992552 ], "pop" : 856, "state" : "IA" } +{ "_id" : "52720", "city" : "ATALISSA", "loc" : [ -91.174764, 41.561443 ], "pop" : 721, "state" : "IA" } +{ "_id" : "52721", "city" : "BENNETT", "loc" : [ -90.965613, 41.735267 ], "pop" : 824, "state" : "IA" } +{ "_id" : "52722", "city" : "BETTENDORF", "loc" : [ -90.494201, 41.550865 ], "pop" : 29785, "state" : "IA" } +{ "_id" : "52726", "city" : "BLUE GRASS", "loc" : [ -90.738015, 41.511168 ], "pop" : 7536, "state" : "IA" } +{ "_id" : "52727", "city" : "BRYANT", "loc" : [ -90.338767, 41.962932 ], "pop" : 252, "state" : "IA" } +{ "_id" : "52729", "city" : "CALAMUS", "loc" : [ -90.741553, 41.811122 ], "pop" : 790, "state" : "IA" } +{ "_id" : "52730", "city" : "CAMANCHE", "loc" : [ -90.270855, 41.788636 ], "pop" : 5013, "state" : "IA" } +{ "_id" : "52731", "city" : "CHARLOTTE", "loc" : [ -90.47822600000001, 41.977859 ], "pop" : 756, "state" : "IA" } +{ "_id" : "52732", "city" : "CLINTON", "loc" : [ -90.207784, 41.851684 ], "pop" : 30723, "state" : "IA" } +{ "_id" : "52738", "city" : "COLUMBUS JUNCTIO", "loc" : [ -91.37419800000001, 41.279911 ], "pop" : 3945, "state" : "IA" } +{ "_id" : "52739", "city" : "CONESVILLE", "loc" : [ -91.346498, 41.380454 ], "pop" : 497, "state" : "IA" } +{ "_id" : "52742", "city" : "DE WITT", "loc" : [ -90.523735, 41.826726 ], "pop" : 6560, "state" : "IA" } +{ "_id" : "52745", "city" : "BIG ROCK", "loc" : [ -90.77833200000001, 41.735013 ], "pop" : 596, "state" : "IA" } +{ "_id" : "52746", "city" : "DONAHUE", "loc" : [ -90.682908, 41.709316 ], "pop" : 685, "state" : "IA" } +{ "_id" : "52747", "city" : "DURANT", "loc" : [ -90.909988, 41.614513 ], "pop" : 2416, "state" : "IA" } +{ "_id" : "52748", "city" : "ELDRIDGE", "loc" : [ -90.563379, 41.663532 ], "pop" : 6947, "state" : "IA" } +{ "_id" : "52750", "city" : "GOOSE LAKE", "loc" : [ -90.381855, 41.979898 ], "pop" : 542, "state" : "IA" } +{ "_id" : "52751", "city" : "GRAND MOUND", "loc" : [ -90.63287800000001, 41.823559 ], "pop" : 1149, "state" : "IA" } +{ "_id" : "52753", "city" : "LE CLAIRE", "loc" : [ -90.36278799999999, 41.608234 ], "pop" : 4176, "state" : "IA" } +{ "_id" : "52754", "city" : "LETTS", "loc" : [ -91.20399, 41.293027 ], "pop" : 1394, "state" : "IA" } +{ "_id" : "52755", "city" : "LONE TREE", "loc" : [ -91.436262, 41.498804 ], "pop" : 2038, "state" : "IA" } +{ "_id" : "52756", "city" : "LONG GROVE", "loc" : [ -90.55343999999999, 41.721327 ], "pop" : 2326, "state" : "IA" } +{ "_id" : "52760", "city" : "MOSCOW", "loc" : [ -91.085888, 41.564558 ], "pop" : 752, "state" : "IA" } +{ "_id" : "52761", "city" : "MUSCATINE", "loc" : [ -91.050928, 41.430378 ], "pop" : 29779, "state" : "IA" } +{ "_id" : "52765", "city" : "NEW LIBERTY", "loc" : [ -90.859922, 41.713229 ], "pop" : 615, "state" : "IA" } +{ "_id" : "52766", "city" : "NICHOLS", "loc" : [ -91.293116, 41.476634 ], "pop" : 797, "state" : "IA" } +{ "_id" : "52768", "city" : "PRINCETON", "loc" : [ -90.370574, 41.685753 ], "pop" : 1529, "state" : "IA" } +{ "_id" : "52769", "city" : "STOCKTON", "loc" : [ -90.84733199999999, 41.558327 ], "pop" : 777, "state" : "IA" } +{ "_id" : "52772", "city" : "TIPTON", "loc" : [ -91.136163, 41.756276 ], "pop" : 5751, "state" : "IA" } +{ "_id" : "52773", "city" : "WALCOTT", "loc" : [ -90.72560300000001, 41.645309 ], "pop" : 705, "state" : "IA" } +{ "_id" : "52774", "city" : "WELTON", "loc" : [ -90.606785, 41.907472 ], "pop" : 539, "state" : "IA" } +{ "_id" : "52776", "city" : "WEST LIBERTY", "loc" : [ -91.266847, 41.570055 ], "pop" : 3552, "state" : "IA" } +{ "_id" : "52777", "city" : "WHEATLAND", "loc" : [ -90.84015100000001, 41.82585 ], "pop" : 1092, "state" : "IA" } +{ "_id" : "52778", "city" : "WILTON", "loc" : [ -91.009958, 41.585801 ], "pop" : 3032, "state" : "IA" } +{ "_id" : "52802", "city" : "DAVENPORT", "loc" : [ -90.61409, 41.516358 ], "pop" : 12547, "state" : "IA" } +{ "_id" : "52803", "city" : "DAVENPORT", "loc" : [ -90.561348, 41.538509 ], "pop" : 25514, "state" : "IA" } +{ "_id" : "52804", "city" : "DAVENPORT", "loc" : [ -90.61147, 41.538603 ], "pop" : 23671, "state" : "IA" } +{ "_id" : "52806", "city" : "DAVENPORT", "loc" : [ -90.60384500000001, 41.573271 ], "pop" : 25480, "state" : "IA" } +{ "_id" : "52807", "city" : "DAVENPORT", "loc" : [ -90.540262, 41.561822 ], "pop" : 8531, "state" : "IA" } +{ "_id" : "53001", "city" : "ADELL", "loc" : [ -88.02539400000001, 43.615071 ], "pop" : 1221, "state" : "WI" } +{ "_id" : "53002", "city" : "ALLENTON", "loc" : [ -88.35390099999999, 43.468065 ], "pop" : 1449, "state" : "WI" } +{ "_id" : "53004", "city" : "BELGIUM", "loc" : [ -87.850908, 43.499465 ], "pop" : 2333, "state" : "WI" } +{ "_id" : "53005", "city" : "BROOKFIELD", "loc" : [ -88.098, 43.062173 ], "pop" : 19793, "state" : "WI" } +{ "_id" : "53006", "city" : "SOUTH BYRON", "loc" : [ -88.50972899999999, 43.610934 ], "pop" : 1842, "state" : "WI" } +{ "_id" : "53007", "city" : "BUTLER", "loc" : [ -88.071043, 43.105405 ], "pop" : 2079, "state" : "WI" } +{ "_id" : "53010", "city" : "CAMPBELLSPORT", "loc" : [ -88.27285500000001, 43.604183 ], "pop" : 6057, "state" : "WI" } +{ "_id" : "53011", "city" : "CASCADE", "loc" : [ -88.094658, 43.659106 ], "pop" : 632, "state" : "WI" } +{ "_id" : "53012", "city" : "CEDARBURG", "loc" : [ -88.00286699999999, 43.303413 ], "pop" : 17552, "state" : "WI" } +{ "_id" : "53013", "city" : "CEDAR GROVE", "loc" : [ -87.840108, 43.575076 ], "pop" : 2656, "state" : "WI" } +{ "_id" : "53014", "city" : "CHILTON", "loc" : [ -88.182689, 44.024242 ], "pop" : 7495, "state" : "WI" } +{ "_id" : "53015", "city" : "CLEVELAND", "loc" : [ -87.767314, 43.921732 ], "pop" : 2490, "state" : "WI" } +{ "_id" : "53017", "city" : "COLGATE", "loc" : [ -88.24061399999999, 43.199767 ], "pop" : 4155, "state" : "WI" } +{ "_id" : "53018", "city" : "DELAFIELD", "loc" : [ -88.397248, 43.050019 ], "pop" : 4837, "state" : "WI" } +{ "_id" : "53019", "city" : "EDEN", "loc" : [ -88.326607, 43.695878 ], "pop" : 1874, "state" : "WI" } +{ "_id" : "53020", "city" : "ELKHART LAKE", "loc" : [ -87.97667, 43.843553 ], "pop" : 4665, "state" : "WI" } +{ "_id" : "53021", "city" : "WAUBEKA", "loc" : [ -87.982243, 43.484319 ], "pop" : 3942, "state" : "WI" } +{ "_id" : "53022", "city" : "GERMANTOWN", "loc" : [ -88.116508, 43.218871 ], "pop" : 13053, "state" : "WI" } +{ "_id" : "53023", "city" : "GLENBEULAH", "loc" : [ -88.10488599999999, 43.766611 ], "pop" : 1965, "state" : "WI" } +{ "_id" : "53024", "city" : "GRAFTON", "loc" : [ -87.95208700000001, 43.323146 ], "pop" : 12526, "state" : "WI" } +{ "_id" : "53027", "city" : "HARTFORD", "loc" : [ -88.370727, 43.315749 ], "pop" : 15889, "state" : "WI" } +{ "_id" : "53029", "city" : "HARTLAND", "loc" : [ -88.344572, 43.117153 ], "pop" : 14530, "state" : "WI" } +{ "_id" : "53032", "city" : "HORICON", "loc" : [ -88.631049, 43.446859 ], "pop" : 4724, "state" : "WI" } +{ "_id" : "53033", "city" : "HUBERTUS", "loc" : [ -88.23114700000001, 43.234269 ], "pop" : 4823, "state" : "WI" } +{ "_id" : "53035", "city" : "IRON RIDGE", "loc" : [ -88.544072, 43.393415 ], "pop" : 2504, "state" : "WI" } +{ "_id" : "53036", "city" : "IXONIA", "loc" : [ -88.580567, 43.170667 ], "pop" : 2454, "state" : "WI" } +{ "_id" : "53037", "city" : "JACKSON", "loc" : [ -88.162592, 43.325243 ], "pop" : 3999, "state" : "WI" } +{ "_id" : "53038", "city" : "JOHNSON CREEK", "loc" : [ -88.783602, 43.075051 ], "pop" : 2469, "state" : "WI" } +{ "_id" : "53039", "city" : "JUNEAU", "loc" : [ -88.684517, 43.379199 ], "pop" : 5857, "state" : "WI" } +{ "_id" : "53040", "city" : "KEWASKUM", "loc" : [ -88.19253, 43.521446 ], "pop" : 6394, "state" : "WI" } +{ "_id" : "53042", "city" : "KIEL", "loc" : [ -87.995644, 43.934105 ], "pop" : 5345, "state" : "WI" } +{ "_id" : "53044", "city" : "KOHLER", "loc" : [ -87.78673000000001, 43.738096 ], "pop" : 1900, "state" : "WI" } +{ "_id" : "53045", "city" : "BROOKFIELD", "loc" : [ -88.146946, 43.066791 ], "pop" : 15412, "state" : "WI" } +{ "_id" : "53046", "city" : "LANNON", "loc" : [ -88.16386300000001, 43.149651 ], "pop" : 924, "state" : "WI" } +{ "_id" : "53048", "city" : "KNOWLES", "loc" : [ -88.441309, 43.588489 ], "pop" : 2101, "state" : "WI" } +{ "_id" : "53049", "city" : "MALONE", "loc" : [ -88.307289, 43.869002 ], "pop" : 3453, "state" : "WI" } +{ "_id" : "53050", "city" : "MAYVILLE", "loc" : [ -88.545084, 43.504496 ], "pop" : 6394, "state" : "WI" } +{ "_id" : "53051", "city" : "MENOMONEE FALLS", "loc" : [ -88.112774, 43.160174 ], "pop" : 26840, "state" : "WI" } +{ "_id" : "53057", "city" : "MOUNT CALVARY", "loc" : [ -88.23992200000001, 43.814211 ], "pop" : 1403, "state" : "WI" } +{ "_id" : "53058", "city" : "NASHOTAH", "loc" : [ -88.408913, 43.111791 ], "pop" : 2996, "state" : "WI" } +{ "_id" : "53059", "city" : "NEOSHO", "loc" : [ -88.520482, 43.297841 ], "pop" : 2051, "state" : "WI" } +{ "_id" : "53061", "city" : "NEW HOLSTEIN", "loc" : [ -88.091083, 43.944639 ], "pop" : 5536, "state" : "WI" } +{ "_id" : "53063", "city" : "NEWTON", "loc" : [ -87.784764, 43.983621 ], "pop" : 1394, "state" : "WI" } +{ "_id" : "53065", "city" : "OAKFIELD", "loc" : [ -88.55691899999999, 43.686371 ], "pop" : 2377, "state" : "WI" } +{ "_id" : "53066", "city" : "OCONOMOWOC", "loc" : [ -88.48622899999999, 43.109497 ], "pop" : 24795, "state" : "WI" } +{ "_id" : "53069", "city" : "OKAUCHEE", "loc" : [ -88.432287, 43.113011 ], "pop" : 848, "state" : "WI" } +{ "_id" : "53070", "city" : "OOSTBURG", "loc" : [ -87.796955, 43.622939 ], "pop" : 3916, "state" : "WI" } +{ "_id" : "53072", "city" : "PEWAUKEE", "loc" : [ -88.27292199999999, 43.078777 ], "pop" : 13337, "state" : "WI" } +{ "_id" : "53073", "city" : "PLYMOUTH", "loc" : [ -87.977906, 43.75258 ], "pop" : 11811, "state" : "WI" } +{ "_id" : "53074", "city" : "PORT WASHINGTON", "loc" : [ -87.879659, 43.395463 ], "pop" : 10829, "state" : "WI" } +{ "_id" : "53075", "city" : "RANDOM LAKE", "loc" : [ -87.98155300000001, 43.567206 ], "pop" : 3299, "state" : "WI" } +{ "_id" : "53076", "city" : "RICHFIELD", "loc" : [ -88.215467, 43.273925 ], "pop" : 2810, "state" : "WI" } +{ "_id" : "53078", "city" : "RUBICON", "loc" : [ -88.452793, 43.312144 ], "pop" : 1023, "state" : "WI" } +{ "_id" : "53079", "city" : "SAINT CLOUD", "loc" : [ -88.184482, 43.807431 ], "pop" : 1524, "state" : "WI" } +{ "_id" : "53080", "city" : "SAUKVILLE", "loc" : [ -87.956765, 43.391265 ], "pop" : 5460, "state" : "WI" } +{ "_id" : "53081", "city" : "SHEBOYGAN", "loc" : [ -87.724667, 43.740981 ], "pop" : 42246, "state" : "WI" } +{ "_id" : "53083", "city" : "HOWARDS GROVE", "loc" : [ -87.748552, 43.788609 ], "pop" : 17004, "state" : "WI" } +{ "_id" : "53085", "city" : "SHEBOYGAN FALLS", "loc" : [ -87.82422800000001, 43.726598 ], "pop" : 9457, "state" : "WI" } +{ "_id" : "53086", "city" : "SLINGER", "loc" : [ -88.282377, 43.332211 ], "pop" : 4671, "state" : "WI" } +{ "_id" : "53089", "city" : "SUSSEX", "loc" : [ -88.227064, 43.144059 ], "pop" : 11913, "state" : "WI" } +{ "_id" : "53091", "city" : "THERESA", "loc" : [ -88.447766, 43.504477 ], "pop" : 1555, "state" : "WI" } +{ "_id" : "53092", "city" : "MEQUON", "loc" : [ -87.959357, 43.225145 ], "pop" : 22294, "state" : "WI" } +{ "_id" : "53093", "city" : "WALDO", "loc" : [ -87.97217000000001, 43.657087 ], "pop" : 2471, "state" : "WI" } +{ "_id" : "53094", "city" : "WATERTOWN", "loc" : [ -88.71850999999999, 43.192971 ], "pop" : 25240, "state" : "WI" } +{ "_id" : "53095", "city" : "WEST BEND", "loc" : [ -88.184549, 43.422444 ], "pop" : 38743, "state" : "WI" } +{ "_id" : "53103", "city" : "BIG BEND", "loc" : [ -88.212182, 42.888463 ], "pop" : 4274, "state" : "WI" } +{ "_id" : "53104", "city" : "BRISTOL", "loc" : [ -88.04777900000001, 42.532525 ], "pop" : 4514, "state" : "WI" } +{ "_id" : "53105", "city" : "BURLINGTON", "loc" : [ -88.274886, 42.666034 ], "pop" : 23978, "state" : "WI" } +{ "_id" : "53108", "city" : "CALEDONIA", "loc" : [ -87.92278, 42.829473 ], "pop" : 2453, "state" : "WI" } +{ "_id" : "53110", "city" : "CUDAHY", "loc" : [ -87.861983, 42.948976 ], "pop" : 18659, "state" : "WI" } +{ "_id" : "53114", "city" : "DARIEN", "loc" : [ -88.714217, 42.6435 ], "pop" : 3954, "state" : "WI" } +{ "_id" : "53115", "city" : "DELAVAN", "loc" : [ -88.627717, 42.622715 ], "pop" : 9967, "state" : "WI" } +{ "_id" : "53118", "city" : "DOUSMAN", "loc" : [ -88.456754, 42.98506 ], "pop" : 5699, "state" : "WI" } +{ "_id" : "53119", "city" : "EAGLE", "loc" : [ -88.46742, 42.880942 ], "pop" : 3129, "state" : "WI" } +{ "_id" : "53120", "city" : "EAST TROY", "loc" : [ -88.409215, 42.803531 ], "pop" : 8712, "state" : "WI" } +{ "_id" : "53121", "city" : "ELKHORN", "loc" : [ -88.546209, 42.700928 ], "pop" : 11680, "state" : "WI" } +{ "_id" : "53122", "city" : "ELM GROVE", "loc" : [ -88.085374, 43.047943 ], "pop" : 6394, "state" : "WI" } +{ "_id" : "53125", "city" : "FONTANA", "loc" : [ -88.56842399999999, 42.542928 ], "pop" : 1697, "state" : "WI" } +{ "_id" : "53126", "city" : "FRANKSVILLE", "loc" : [ -87.987273, 42.785892 ], "pop" : 6685, "state" : "WI" } +{ "_id" : "53128", "city" : "GENOA CITY", "loc" : [ -88.348456, 42.532276 ], "pop" : 5027, "state" : "WI" } +{ "_id" : "53129", "city" : "GREENDALE", "loc" : [ -87.994277, 42.937293 ], "pop" : 15109, "state" : "WI" } +{ "_id" : "53130", "city" : "HALES CORNERS", "loc" : [ -88.05029999999999, 42.941034 ], "pop" : 7643, "state" : "WI" } +{ "_id" : "53132", "city" : "FRANKLIN", "loc" : [ -88.008582, 42.901728 ], "pop" : 21840, "state" : "WI" } +{ "_id" : "53137", "city" : "HELENVILLE", "loc" : [ -88.726887, 43.01007 ], "pop" : 1440, "state" : "WI" } +{ "_id" : "53139", "city" : "KANSASVILLE", "loc" : [ -88.118037, 42.701246 ], "pop" : 2911, "state" : "WI" } +{ "_id" : "53140", "city" : "KENOSHA", "loc" : [ -87.829945, 42.605228 ], "pop" : 28062, "state" : "WI" } +{ "_id" : "53142", "city" : "KENOSHA", "loc" : [ -87.870526, 42.556038 ], "pop" : 28495, "state" : "WI" } +{ "_id" : "53143", "city" : "KENOSHA", "loc" : [ -87.83005300000001, 42.561726 ], "pop" : 26551, "state" : "WI" } +{ "_id" : "53144", "city" : "KENOSHA", "loc" : [ -87.876171, 42.605788 ], "pop" : 18824, "state" : "WI" } +{ "_id" : "53146", "city" : "NEW BERLIN", "loc" : [ -88.15527400000001, 42.97397 ], "pop" : 8149, "state" : "WI" } +{ "_id" : "53147", "city" : "LAKE GENEVA", "loc" : [ -88.45537899999999, 42.588111 ], "pop" : 11183, "state" : "WI" } +{ "_id" : "53149", "city" : "MUKWONAGO", "loc" : [ -88.345116, 42.882054 ], "pop" : 12846, "state" : "WI" } +{ "_id" : "53150", "city" : "MUSKEGO", "loc" : [ -88.12141099999999, 42.904651 ], "pop" : 17098, "state" : "WI" } +{ "_id" : "53151", "city" : "NEW BERLIN", "loc" : [ -88.09464199999999, 42.982151 ], "pop" : 25731, "state" : "WI" } +{ "_id" : "53153", "city" : "NORTH PRAIRIE", "loc" : [ -88.394988, 42.938501 ], "pop" : 1732, "state" : "WI" } +{ "_id" : "53154", "city" : "OAK CREEK", "loc" : [ -87.90266099999999, 42.88916 ], "pop" : 19513, "state" : "WI" } +{ "_id" : "53156", "city" : "PALMYRA", "loc" : [ -88.590255, 42.879263 ], "pop" : 2748, "state" : "WI" } +{ "_id" : "53168", "city" : "SALEM", "loc" : [ -88.128731, 42.570922 ], "pop" : 8746, "state" : "WI" } +{ "_id" : "53172", "city" : "SOUTH MILWAUKEE", "loc" : [ -87.864626, 42.910468 ], "pop" : 20958, "state" : "WI" } +{ "_id" : "53177", "city" : "STURTEVANT", "loc" : [ -87.903082, 42.69673 ], "pop" : 4774, "state" : "WI" } +{ "_id" : "53178", "city" : "SULLIVAN", "loc" : [ -88.602569, 42.99825 ], "pop" : 3381, "state" : "WI" } +{ "_id" : "53179", "city" : "TREVOR", "loc" : [ -88.13869, 42.520112 ], "pop" : 3527, "state" : "WI" } +{ "_id" : "53181", "city" : "TWIN LAKES", "loc" : [ -88.257318, 42.523173 ], "pop" : 6103, "state" : "WI" } +{ "_id" : "53182", "city" : "UNION GROVE", "loc" : [ -88.03900400000001, 42.689643 ], "pop" : 6233, "state" : "WI" } +{ "_id" : "53183", "city" : "WALES", "loc" : [ -88.378742, 43.008787 ], "pop" : 3171, "state" : "WI" } +{ "_id" : "53184", "city" : "WALWORTH", "loc" : [ -88.602738, 42.535005 ], "pop" : 2831, "state" : "WI" } +{ "_id" : "53185", "city" : "WIND LAKE", "loc" : [ -88.19335, 42.796882 ], "pop" : 11362, "state" : "WI" } +{ "_id" : "53186", "city" : "WAUKESHA", "loc" : [ -88.219559, 42.999304 ], "pop" : 46445, "state" : "WI" } +{ "_id" : "53188", "city" : "WAUKESHA", "loc" : [ -88.27048000000001, 43.012848 ], "pop" : 33794, "state" : "WI" } +{ "_id" : "53190", "city" : "WHITEWATER", "loc" : [ -88.742864, 42.827174 ], "pop" : 16723, "state" : "WI" } +{ "_id" : "53191", "city" : "WILLIAMS BAY", "loc" : [ -88.54308899999999, 42.576678 ], "pop" : 2208, "state" : "WI" } +{ "_id" : "53202", "city" : "MILWAUKEE", "loc" : [ -87.896792, 43.050601 ], "pop" : 20178, "state" : "WI" } +{ "_id" : "53203", "city" : "MILWAUKEE", "loc" : [ -87.915375, 43.040299 ], "pop" : 456, "state" : "WI" } +{ "_id" : "53204", "city" : "MILWAUKEE", "loc" : [ -87.931685, 43.015778 ], "pop" : 41978, "state" : "WI" } +{ "_id" : "53205", "city" : "MILWAUKEE", "loc" : [ -87.935332, 43.052841 ], "pop" : 14708, "state" : "WI" } +{ "_id" : "53206", "city" : "MILWAUKEE", "loc" : [ -87.934714, 43.075324 ], "pop" : 42009, "state" : "WI" } +{ "_id" : "53207", "city" : "BAY VIEW", "loc" : [ -87.894598, 42.981405 ], "pop" : 49199, "state" : "WI" } +{ "_id" : "53208", "city" : "MILWAUKEE", "loc" : [ -87.96245399999999, 43.048775 ], "pop" : 42238, "state" : "WI" } +{ "_id" : "53209", "city" : "MILWAUKEE", "loc" : [ -87.947834, 43.118765 ], "pop" : 51008, "state" : "WI" } +{ "_id" : "53210", "city" : "MILWAUKEE", "loc" : [ -87.97146600000001, 43.068545 ], "pop" : 32111, "state" : "WI" } +{ "_id" : "53211", "city" : "SHOREWOOD", "loc" : [ -87.88507799999999, 43.080517 ], "pop" : 37036, "state" : "WI" } +{ "_id" : "53212", "city" : "MILWAUKEE", "loc" : [ -87.90841500000001, 43.071195 ], "pop" : 37237, "state" : "WI" } +{ "_id" : "53213", "city" : "WAUWATOSA", "loc" : [ -88.00075699999999, 43.051316 ], "pop" : 27606, "state" : "WI" } +{ "_id" : "53214", "city" : "WEST ALLIS", "loc" : [ -88.010757, 43.019113 ], "pop" : 38491, "state" : "WI" } +{ "_id" : "53215", "city" : "WEST MILWAUKEE", "loc" : [ -87.94174, 43.000411 ], "pop" : 48228, "state" : "WI" } +{ "_id" : "53216", "city" : "MILWAUKEE", "loc" : [ -87.97421799999999, 43.085868 ], "pop" : 34881, "state" : "WI" } +{ "_id" : "53217", "city" : "MILWAUKEE", "loc" : [ -87.90726100000001, 43.14086 ], "pop" : 30065, "state" : "WI" } +{ "_id" : "53218", "city" : "MILWAUKEE", "loc" : [ -87.993161, 43.11218 ], "pop" : 40443, "state" : "WI" } +{ "_id" : "53219", "city" : "MILWAUKEE", "loc" : [ -87.99436799999999, 42.995909 ], "pop" : 35271, "state" : "WI" } +{ "_id" : "53220", "city" : "GREENFIELD", "loc" : [ -87.992209, 42.968186 ], "pop" : 25819, "state" : "WI" } +{ "_id" : "53221", "city" : "MILWAUKEE", "loc" : [ -87.944734, 42.954864 ], "pop" : 35767, "state" : "WI" } +{ "_id" : "53222", "city" : "MILWAUKEE", "loc" : [ -88.02687, 43.08283 ], "pop" : 25406, "state" : "WI" } +{ "_id" : "53223", "city" : "MILWAUKEE", "loc" : [ -87.989818, 43.162374 ], "pop" : 30272, "state" : "WI" } +{ "_id" : "53224", "city" : "MILWAUKEE", "loc" : [ -88.03274399999999, 43.159415 ], "pop" : 18182, "state" : "WI" } +{ "_id" : "53225", "city" : "MILWAUKEE", "loc" : [ -88.03464, 43.115416 ], "pop" : 25395, "state" : "WI" } +{ "_id" : "53226", "city" : "WAUWATOSA", "loc" : [ -88.041386, 43.050006 ], "pop" : 19216, "state" : "WI" } +{ "_id" : "53227", "city" : "MILWAUKEE", "loc" : [ -88.036384, 42.994919 ], "pop" : 23150, "state" : "WI" } +{ "_id" : "53228", "city" : "GREENFIELD", "loc" : [ -88.034638, 42.970251 ], "pop" : 12634, "state" : "WI" } +{ "_id" : "53233", "city" : "MILWAUKEE", "loc" : [ -87.93566, 43.040738 ], "pop" : 16569, "state" : "WI" } +{ "_id" : "53402", "city" : "RACINE", "loc" : [ -87.795985, 42.772596 ], "pop" : 31959, "state" : "WI" } +{ "_id" : "53403", "city" : "RACINE", "loc" : [ -87.80137499999999, 42.706015 ], "pop" : 26329, "state" : "WI" } +{ "_id" : "53404", "city" : "RACINE", "loc" : [ -87.8053, 42.743348 ], "pop" : 17129, "state" : "WI" } +{ "_id" : "53405", "city" : "RACINE", "loc" : [ -87.823329, 42.716112 ], "pop" : 26652, "state" : "WI" } +{ "_id" : "53406", "city" : "RACINE", "loc" : [ -87.855104, 42.724162 ], "pop" : 20925, "state" : "WI" } +{ "_id" : "53502", "city" : "ALBANY", "loc" : [ -89.435695, 42.715535 ], "pop" : 1886, "state" : "WI" } +{ "_id" : "53503", "city" : "ARENA", "loc" : [ -89.938614, 43.152111 ], "pop" : 1554, "state" : "WI" } +{ "_id" : "53504", "city" : "ARGYLE", "loc" : [ -89.85983400000001, 42.695532 ], "pop" : 2048, "state" : "WI" } +{ "_id" : "53505", "city" : "AVALON", "loc" : [ -88.837142, 42.65979 ], "pop" : 373, "state" : "WI" } +{ "_id" : "53506", "city" : "AVOCA", "loc" : [ -90.288859, 43.157137 ], "pop" : 1072, "state" : "WI" } +{ "_id" : "53507", "city" : "BARNEVELD", "loc" : [ -89.904229, 43.015797 ], "pop" : 1301, "state" : "WI" } +{ "_id" : "53508", "city" : "BELLEVILLE", "loc" : [ -89.53773, 42.866906 ], "pop" : 3500, "state" : "WI" } +{ "_id" : "53510", "city" : "BELMONT", "loc" : [ -90.335881, 42.730784 ], "pop" : 1477, "state" : "WI" } +{ "_id" : "53511", "city" : "SHOPIERE", "loc" : [ -89.039897, 42.522871 ], "pop" : 46738, "state" : "WI" } +{ "_id" : "53515", "city" : "BLACK EARTH", "loc" : [ -89.738974, 43.132213 ], "pop" : 1824, "state" : "WI" } +{ "_id" : "53516", "city" : "BLANCHARDVILLE", "loc" : [ -89.85551100000001, 42.806186 ], "pop" : 1810, "state" : "WI" } +{ "_id" : "53517", "city" : "BLUE MOUNDS", "loc" : [ -89.83445500000001, 43.004964 ], "pop" : 639, "state" : "WI" } +{ "_id" : "53518", "city" : "BLUE RIVER", "loc" : [ -90.587312, 43.236567 ], "pop" : 1520, "state" : "WI" } +{ "_id" : "53520", "city" : "BRODHEAD", "loc" : [ -89.371409, 42.611074 ], "pop" : 5825, "state" : "WI" } +{ "_id" : "53521", "city" : "BROOKLYN", "loc" : [ -89.38181400000001, 42.842327 ], "pop" : 2329, "state" : "WI" } +{ "_id" : "53522", "city" : "BROWNTOWN", "loc" : [ -89.78158000000001, 42.557872 ], "pop" : 1146, "state" : "WI" } +{ "_id" : "53523", "city" : "CAMBRIDGE", "loc" : [ -89.02090099999999, 42.99176 ], "pop" : 4102, "state" : "WI" } +{ "_id" : "53525", "city" : "CLINTON", "loc" : [ -88.87047699999999, 42.553481 ], "pop" : 3627, "state" : "WI" } +{ "_id" : "53526", "city" : "COBB", "loc" : [ -90.332408, 42.966009 ], "pop" : 542, "state" : "WI" } +{ "_id" : "53527", "city" : "COTTAGE GROVE", "loc" : [ -89.20169199999999, 43.078405 ], "pop" : 4349, "state" : "WI" } +{ "_id" : "53528", "city" : "CROSS PLAINS", "loc" : [ -89.63966499999999, 43.113214 ], "pop" : 3622, "state" : "WI" } +{ "_id" : "53529", "city" : "DANE", "loc" : [ -89.51174, 43.242414 ], "pop" : 1572, "state" : "WI" } +{ "_id" : "53530", "city" : "DARLINGTON", "loc" : [ -90.110648, 42.687816 ], "pop" : 4224, "state" : "WI" } +{ "_id" : "53531", "city" : "DEERFIELD", "loc" : [ -89.08619899999999, 43.057106 ], "pop" : 2668, "state" : "WI" } +{ "_id" : "53532", "city" : "DE FOREST", "loc" : [ -89.329652, 43.235748 ], "pop" : 9321, "state" : "WI" } +{ "_id" : "53533", "city" : "DODGEVILLE", "loc" : [ -90.140433, 42.969779 ], "pop" : 5663, "state" : "WI" } +{ "_id" : "53534", "city" : "EDGERTON", "loc" : [ -89.06415699999999, 42.838605 ], "pop" : 9749, "state" : "WI" } +{ "_id" : "53536", "city" : "EVANSVILLE", "loc" : [ -89.287712, 42.773216 ], "pop" : 5986, "state" : "WI" } +{ "_id" : "53538", "city" : "FORT ATKINSON", "loc" : [ -88.846689, 42.922902 ], "pop" : 15624, "state" : "WI" } +{ "_id" : "53541", "city" : "GRATIOT", "loc" : [ -90.024344, 42.575852 ], "pop" : 1129, "state" : "WI" } +{ "_id" : "53543", "city" : "HIGHLAND", "loc" : [ -90.36501, 43.052368 ], "pop" : 1586, "state" : "WI" } +{ "_id" : "53544", "city" : "HOLLANDALE", "loc" : [ -89.91297299999999, 42.877321 ], "pop" : 591, "state" : "WI" } +{ "_id" : "53545", "city" : "JANESVILLE", "loc" : [ -89.033124, 42.691542 ], "pop" : 40339, "state" : "WI" } +{ "_id" : "53546", "city" : "JANESVILLE", "loc" : [ -89.002534, 42.668254 ], "pop" : 22324, "state" : "WI" } +{ "_id" : "53549", "city" : "JEFFERSON", "loc" : [ -88.807765, 43.000557 ], "pop" : 8540, "state" : "WI" } +{ "_id" : "53550", "city" : "JUDA", "loc" : [ -89.502608, 42.567874 ], "pop" : 1177, "state" : "WI" } +{ "_id" : "53551", "city" : "LAKE MILLS", "loc" : [ -88.913335, 43.081576 ], "pop" : 6196, "state" : "WI" } +{ "_id" : "53553", "city" : "LINDEN", "loc" : [ -90.279726, 42.918419 ], "pop" : 522, "state" : "WI" } +{ "_id" : "53554", "city" : "LIVINGSTON", "loc" : [ -90.441986, 42.904432 ], "pop" : 964, "state" : "WI" } +{ "_id" : "53555", "city" : "LODI", "loc" : [ -89.555421, 43.326964 ], "pop" : 5765, "state" : "WI" } +{ "_id" : "53556", "city" : "LONE ROCK", "loc" : [ -90.235229, 43.220773 ], "pop" : 2367, "state" : "WI" } +{ "_id" : "53557", "city" : "LOWELL", "loc" : [ -88.787263, 43.342018 ], "pop" : 231, "state" : "WI" } +{ "_id" : "53558", "city" : "MC FARLAND", "loc" : [ -89.29477300000001, 43.010651 ], "pop" : 8040, "state" : "WI" } +{ "_id" : "53559", "city" : "MARSHALL", "loc" : [ -89.07533100000001, 43.163639 ], "pop" : 4175, "state" : "WI" } +{ "_id" : "53560", "city" : "MAZOMANIE", "loc" : [ -89.763616, 43.184746 ], "pop" : 3176, "state" : "WI" } +{ "_id" : "53561", "city" : "MERRIMAC", "loc" : [ -89.632254, 43.385527 ], "pop" : 1366, "state" : "WI" } +{ "_id" : "53562", "city" : "MIDDLETON", "loc" : [ -89.50725799999999, 43.105196 ], "pop" : 16575, "state" : "WI" } +{ "_id" : "53563", "city" : "MILTON", "loc" : [ -88.953087, 42.779087 ], "pop" : 7309, "state" : "WI" } +{ "_id" : "53565", "city" : "MINERAL POINT", "loc" : [ -90.164556, 42.854696 ], "pop" : 4566, "state" : "WI" } +{ "_id" : "53566", "city" : "MONROE", "loc" : [ -89.6403, 42.599076 ], "pop" : 13720, "state" : "WI" } +{ "_id" : "53569", "city" : "MONTFORT", "loc" : [ -90.44473000000001, 42.975745 ], "pop" : 1129, "state" : "WI" } +{ "_id" : "53570", "city" : "MONTICELLO", "loc" : [ -89.608069, 42.741482 ], "pop" : 2315, "state" : "WI" } +{ "_id" : "53572", "city" : "MOUNT HOREB", "loc" : [ -89.74144800000001, 43.002022 ], "pop" : 7193, "state" : "WI" } +{ "_id" : "53573", "city" : "MUSCODA", "loc" : [ -90.456998, 43.207375 ], "pop" : 3774, "state" : "WI" } +{ "_id" : "53574", "city" : "NEW GLARUS", "loc" : [ -89.643666, 42.814344 ], "pop" : 2540, "state" : "WI" } +{ "_id" : "53575", "city" : "OREGON", "loc" : [ -89.387002, 42.929485 ], "pop" : 9719, "state" : "WI" } +{ "_id" : "53576", "city" : "ORFORDVILLE", "loc" : [ -89.253292, 42.627766 ], "pop" : 1923, "state" : "WI" } +{ "_id" : "53577", "city" : "PLAIN", "loc" : [ -90.055825, 43.292693 ], "pop" : 1292, "state" : "WI" } +{ "_id" : "53578", "city" : "PRAIRIE DU SAC", "loc" : [ -89.745233, 43.295631 ], "pop" : 4060, "state" : "WI" } +{ "_id" : "53579", "city" : "REESEVILLE", "loc" : [ -88.857117, 43.301278 ], "pop" : 2027, "state" : "WI" } +{ "_id" : "53580", "city" : "REWEY", "loc" : [ -90.38036099999999, 42.859393 ], "pop" : 601, "state" : "WI" } +{ "_id" : "53581", "city" : "GILLINGHAM", "loc" : [ -90.391378, 43.362714 ], "pop" : 10306, "state" : "WI" } +{ "_id" : "53582", "city" : "RIDGEWAY", "loc" : [ -89.988946, 43.007654 ], "pop" : 924, "state" : "WI" } +{ "_id" : "53583", "city" : "SAUK CITY", "loc" : [ -89.741777, 43.268558 ], "pop" : 5186, "state" : "WI" } +{ "_id" : "53585", "city" : "SHARON", "loc" : [ -88.726522, 42.519367 ], "pop" : 2297, "state" : "WI" } +{ "_id" : "53586", "city" : "SHULLSBURG", "loc" : [ -90.226619, 42.57856 ], "pop" : 2124, "state" : "WI" } +{ "_id" : "53587", "city" : "SOUTH WAYNE", "loc" : [ -89.88884400000001, 42.582199 ], "pop" : 1444, "state" : "WI" } +{ "_id" : "53588", "city" : "SPRING GREEN", "loc" : [ -90.06760800000001, 43.18835 ], "pop" : 3439, "state" : "WI" } +{ "_id" : "53589", "city" : "STOUGHTON", "loc" : [ -89.223989, 42.929007 ], "pop" : 15469, "state" : "WI" } +{ "_id" : "53590", "city" : "SUN PRAIRIE", "loc" : [ -89.222662, 43.186901 ], "pop" : 18776, "state" : "WI" } +{ "_id" : "53593", "city" : "VERONA", "loc" : [ -89.55224699999999, 42.999913 ], "pop" : 9932, "state" : "WI" } +{ "_id" : "53594", "city" : "WATERLOO", "loc" : [ -88.983835, 43.183171 ], "pop" : 4106, "state" : "WI" } +{ "_id" : "53597", "city" : "WAUNAKEE", "loc" : [ -89.45317, 43.181828 ], "pop" : 9691, "state" : "WI" } +{ "_id" : "53598", "city" : "WINDSOR", "loc" : [ -89.341469, 43.214121 ], "pop" : 1825, "state" : "WI" } +{ "_id" : "53703", "city" : "MADISON", "loc" : [ -89.38306799999999, 43.077535 ], "pop" : 25721, "state" : "WI" } +{ "_id" : "53704", "city" : "MADISON", "loc" : [ -89.352295, 43.120526 ], "pop" : 40639, "state" : "WI" } +{ "_id" : "53705", "city" : "MADISON", "loc" : [ -89.452823, 43.072999 ], "pop" : 29114, "state" : "WI" } +{ "_id" : "53706", "city" : "MADISON", "loc" : [ -89.409362, 43.076929 ], "pop" : 3587, "state" : "WI" } +{ "_id" : "53711", "city" : "MADISON", "loc" : [ -89.452558, 43.035644 ], "pop" : 42198, "state" : "WI" } +{ "_id" : "53713", "city" : "FITCHBURG", "loc" : [ -89.39000799999999, 43.037381 ], "pop" : 18082, "state" : "WI" } +{ "_id" : "53714", "city" : "MADISON", "loc" : [ -89.311758, 43.097735 ], "pop" : 17978, "state" : "WI" } +{ "_id" : "53715", "city" : "MADISON", "loc" : [ -89.40004500000001, 43.065287 ], "pop" : 13545, "state" : "WI" } +{ "_id" : "53716", "city" : "MONONA", "loc" : [ -89.315921, 43.067413 ], "pop" : 20296, "state" : "WI" } +{ "_id" : "53717", "city" : "MADISON", "loc" : [ -89.50798399999999, 43.073587 ], "pop" : 7675, "state" : "WI" } +{ "_id" : "53718", "city" : "MADISON", "loc" : [ -89.40733899999999, 43.152143 ], "pop" : 63, "state" : "WI" } +{ "_id" : "53719", "city" : "MADISON", "loc" : [ -89.499324, 43.03207 ], "pop" : 9669, "state" : "WI" } +{ "_id" : "53801", "city" : "BAGLEY", "loc" : [ -91.068502, 42.920734 ], "pop" : 879, "state" : "WI" } +{ "_id" : "53803", "city" : "BENTON", "loc" : [ -90.33804499999999, 42.534901 ], "pop" : 153, "state" : "WI" } +{ "_id" : "53804", "city" : "BLOOMINGTON", "loc" : [ -90.90990499999999, 42.872598 ], "pop" : 1485, "state" : "WI" } +{ "_id" : "53805", "city" : "BOSCOBEL", "loc" : [ -90.706101, 43.139327 ], "pop" : 4755, "state" : "WI" } +{ "_id" : "53806", "city" : "CASSVILLE", "loc" : [ -90.960751, 42.728791 ], "pop" : 2134, "state" : "WI" } +{ "_id" : "53807", "city" : "CUBA CITY", "loc" : [ -90.474907, 42.599073 ], "pop" : 6856, "state" : "WI" } +{ "_id" : "53809", "city" : "FENNIMORE", "loc" : [ -90.65500900000001, 42.988558 ], "pop" : 3668, "state" : "WI" } +{ "_id" : "53810", "city" : "GLEN HAVEN", "loc" : [ -91.000451, 42.820372 ], "pop" : 614, "state" : "WI" } +{ "_id" : "53811", "city" : "HAZEL GREEN", "loc" : [ -90.511782, 42.535913 ], "pop" : 3228, "state" : "WI" } +{ "_id" : "53813", "city" : "LANCASTER", "loc" : [ -90.71090599999999, 42.844469 ], "pop" : 6537, "state" : "WI" } +{ "_id" : "53816", "city" : "MOUNT HOPE", "loc" : [ -90.86648, 42.968862 ], "pop" : 737, "state" : "WI" } +{ "_id" : "53818", "city" : "PLATTEVILLE", "loc" : [ -90.485406, 42.73932 ], "pop" : 13067, "state" : "WI" } +{ "_id" : "53820", "city" : "POTOSI", "loc" : [ -90.700153, 42.6884 ], "pop" : 2845, "state" : "WI" } +{ "_id" : "53821", "city" : "PRAIRIE DU CHIEN", "loc" : [ -91.119305, 43.042649 ], "pop" : 7950, "state" : "WI" } +{ "_id" : "53825", "city" : "STITZER", "loc" : [ -90.607924, 42.92142 ], "pop" : 469, "state" : "WI" } +{ "_id" : "53826", "city" : "WAUZEKA", "loc" : [ -90.923885, 43.114264 ], "pop" : 1455, "state" : "WI" } +{ "_id" : "53827", "city" : "WOODMAN", "loc" : [ -90.824539, 43.057697 ], "pop" : 412, "state" : "WI" } +{ "_id" : "53901", "city" : "PORTAGE", "loc" : [ -89.47139, 43.550145 ], "pop" : 11280, "state" : "WI" } +{ "_id" : "53910", "city" : "ADAMS", "loc" : [ -89.82186900000001, 43.896688 ], "pop" : 2342, "state" : "WI" } +{ "_id" : "53911", "city" : "ARLINGTON", "loc" : [ -89.36308200000001, 43.326868 ], "pop" : 1329, "state" : "WI" } +{ "_id" : "53913", "city" : "BARABOO", "loc" : [ -89.746168, 43.482531 ], "pop" : 14955, "state" : "WI" } +{ "_id" : "53916", "city" : "BEAVER DAM", "loc" : [ -88.840681, 43.461574 ], "pop" : 19539, "state" : "WI" } +{ "_id" : "53919", "city" : "BRANDON", "loc" : [ -88.784099, 43.72579 ], "pop" : 2953, "state" : "WI" } +{ "_id" : "53920", "city" : "BRIGGSVILLE", "loc" : [ -89.580259, 43.675865 ], "pop" : 951, "state" : "WI" } +{ "_id" : "53922", "city" : "BURNETT", "loc" : [ -88.717606, 43.511609 ], "pop" : 909, "state" : "WI" } +{ "_id" : "53923", "city" : "CAMBRIA", "loc" : [ -89.11561399999999, 43.57239 ], "pop" : 2566, "state" : "WI" } +{ "_id" : "53924", "city" : "CAZENOVIA", "loc" : [ -90.279572, 43.498715 ], "pop" : 717, "state" : "WI" } +{ "_id" : "53925", "city" : "COLUMBUS", "loc" : [ -89.027089, 43.331494 ], "pop" : 6847, "state" : "WI" } +{ "_id" : "53926", "city" : "DALTON", "loc" : [ -89.191768, 43.67178 ], "pop" : 685, "state" : "WI" } +{ "_id" : "53929", "city" : "ELROY", "loc" : [ -90.28885699999999, 43.751616 ], "pop" : 3270, "state" : "WI" } +{ "_id" : "53930", "city" : "ENDEAVOR", "loc" : [ -89.461699, 43.696305 ], "pop" : 773, "state" : "WI" } +{ "_id" : "53932", "city" : "FALL RIVER", "loc" : [ -89.062513, 43.400838 ], "pop" : 1996, "state" : "WI" } +{ "_id" : "53933", "city" : "FOX LAKE", "loc" : [ -88.90408100000001, 43.581507 ], "pop" : 3233, "state" : "WI" } +{ "_id" : "53934", "city" : "FRIENDSHIP", "loc" : [ -89.814875, 43.989629 ], "pop" : 4859, "state" : "WI" } +{ "_id" : "53936", "city" : "GRAND MARSH", "loc" : [ -89.655663, 43.856789 ], "pop" : 1907, "state" : "WI" } +{ "_id" : "53937", "city" : "HILLPOINT", "loc" : [ -90.15879200000001, 43.395129 ], "pop" : 980, "state" : "WI" } +{ "_id" : "53939", "city" : "KINGSTON", "loc" : [ -89.131997, 43.69236 ], "pop" : 346, "state" : "WI" } +{ "_id" : "53941", "city" : "LA VALLE", "loc" : [ -90.127966, 43.569874 ], "pop" : 2383, "state" : "WI" } +{ "_id" : "53943", "city" : "LOGANVILLE", "loc" : [ -90.033688, 43.405046 ], "pop" : 877, "state" : "WI" } +{ "_id" : "53944", "city" : "LYNDON STATION", "loc" : [ -89.891543, 43.689875 ], "pop" : 2010, "state" : "WI" } +{ "_id" : "53946", "city" : "MARKESAN", "loc" : [ -89.00697099999999, 43.714015 ], "pop" : 4015, "state" : "WI" } +{ "_id" : "53947", "city" : "MARQUETTE", "loc" : [ -89.13965399999999, 43.745886 ], "pop" : 183, "state" : "WI" } +{ "_id" : "53948", "city" : "MAUSTON", "loc" : [ -90.06408500000001, 43.793383 ], "pop" : 7325, "state" : "WI" } +{ "_id" : "53949", "city" : "MONTELLO", "loc" : [ -89.35864100000001, 43.768984 ], "pop" : 4392, "state" : "WI" } +{ "_id" : "53950", "city" : "NEW LISBON", "loc" : [ -90.152407, 43.88775 ], "pop" : 3320, "state" : "WI" } +{ "_id" : "53951", "city" : "NORTH FREEDOM", "loc" : [ -89.849019, 43.410562 ], "pop" : 1858, "state" : "WI" } +{ "_id" : "53952", "city" : "OXFORD", "loc" : [ -89.563175, 43.779914 ], "pop" : 1217, "state" : "WI" } +{ "_id" : "53954", "city" : "PARDEEVILLE", "loc" : [ -89.326514, 43.533975 ], "pop" : 6321, "state" : "WI" } +{ "_id" : "53955", "city" : "POYNETTE", "loc" : [ -89.418857, 43.401342 ], "pop" : 4264, "state" : "WI" } +{ "_id" : "53956", "city" : "RANDOLPH", "loc" : [ -89.00299200000001, 43.539696 ], "pop" : 3206, "state" : "WI" } +{ "_id" : "53959", "city" : "REEDSBURG", "loc" : [ -89.995948, 43.531581 ], "pop" : 9118, "state" : "WI" } +{ "_id" : "53960", "city" : "RIO", "loc" : [ -89.23536199999999, 43.423053 ], "pop" : 2766, "state" : "WI" } +{ "_id" : "53961", "city" : "ROCK SPRINGS", "loc" : [ -89.921834, 43.468098 ], "pop" : 735, "state" : "WI" } +{ "_id" : "53963", "city" : "WAUPUN", "loc" : [ -88.737253, 43.632441 ], "pop" : 11222, "state" : "WI" } +{ "_id" : "53964", "city" : "WESTFIELD", "loc" : [ -89.502015, 43.896788 ], "pop" : 3309, "state" : "WI" } +{ "_id" : "53965", "city" : "WISCONSIN DELLS", "loc" : [ -89.76652, 43.650789 ], "pop" : 7650, "state" : "WI" } +{ "_id" : "53968", "city" : "WONEWOC", "loc" : [ -90.239357, 43.62848 ], "pop" : 3180, "state" : "WI" } +{ "_id" : "54001", "city" : "DERONDA", "loc" : [ -92.361527, 45.325238 ], "pop" : 4929, "state" : "WI" } +{ "_id" : "54002", "city" : "BALDWIN", "loc" : [ -92.365498, 44.9657 ], "pop" : 4214, "state" : "WI" } +{ "_id" : "54003", "city" : "BELDENVILLE", "loc" : [ -92.437202, 44.7721 ], "pop" : 1442, "state" : "WI" } +{ "_id" : "54004", "city" : "CLAYTON", "loc" : [ -92.13946199999999, 45.306297 ], "pop" : 2414, "state" : "WI" } +{ "_id" : "54005", "city" : "CLEAR LAKE", "loc" : [ -92.27488, 45.236481 ], "pop" : 3254, "state" : "WI" } +{ "_id" : "54006", "city" : "CUSHING", "loc" : [ -92.62413599999999, 45.560359 ], "pop" : 2750, "state" : "WI" } +{ "_id" : "54007", "city" : "DEER PARK", "loc" : [ -92.358464, 45.169046 ], "pop" : 876, "state" : "WI" } +{ "_id" : "54009", "city" : "DRESSER", "loc" : [ -92.56229999999999, 45.354585 ], "pop" : 4019, "state" : "WI" } +{ "_id" : "54011", "city" : "ELLSWORTH", "loc" : [ -92.48903799999999, 44.730191 ], "pop" : 4293, "state" : "WI" } +{ "_id" : "54012", "city" : "EMERALD", "loc" : [ -92.312786, 45.078578 ], "pop" : 630, "state" : "WI" } +{ "_id" : "54013", "city" : "GLENWOOD CITY", "loc" : [ -92.181588, 45.062339 ], "pop" : 1835, "state" : "WI" } +{ "_id" : "54014", "city" : "HAGER CITY", "loc" : [ -92.550146, 44.626969 ], "pop" : 2075, "state" : "WI" } +{ "_id" : "54015", "city" : "HAMMOND", "loc" : [ -92.447215, 44.967004 ], "pop" : 1921, "state" : "WI" } +{ "_id" : "54016", "city" : "HUDSON", "loc" : [ -92.727062, 44.984187 ], "pop" : 16136, "state" : "WI" } +{ "_id" : "54017", "city" : "NEW RICHMOND", "loc" : [ -92.551333, 45.159819 ], "pop" : 14190, "state" : "WI" } +{ "_id" : "54020", "city" : "OSCEOLA", "loc" : [ -92.697108, 45.321757 ], "pop" : 2062, "state" : "WI" } +{ "_id" : "54021", "city" : "PRESCOTT", "loc" : [ -92.753528, 44.747648 ], "pop" : 4807, "state" : "WI" } +{ "_id" : "54022", "city" : "RIVER FALLS", "loc" : [ -92.631275, 44.85501 ], "pop" : 16037, "state" : "WI" } +{ "_id" : "54023", "city" : "ROBERTS", "loc" : [ -92.55977300000001, 44.987356 ], "pop" : 2063, "state" : "WI" } +{ "_id" : "54024", "city" : "SAINT CROIX FALL", "loc" : [ -92.63837100000001, 45.413215 ], "pop" : 1640, "state" : "WI" } +{ "_id" : "54025", "city" : "SOMERSET", "loc" : [ -92.686466, 45.133064 ], "pop" : 2937, "state" : "WI" } +{ "_id" : "54026", "city" : "STAR PRAIRIE", "loc" : [ -92.55135300000001, 45.2013 ], "pop" : 40, "state" : "WI" } +{ "_id" : "54027", "city" : "WILSON", "loc" : [ -92.196538, 44.94658 ], "pop" : 1415, "state" : "WI" } +{ "_id" : "54028", "city" : "WOODVILLE", "loc" : [ -92.284803, 44.940806 ], "pop" : 1326, "state" : "WI" } +{ "_id" : "54082", "city" : "SAINT JOSEPH", "loc" : [ -92.760803, 45.070123 ], "pop" : 987, "state" : "WI" } +{ "_id" : "54101", "city" : "ABRAMS", "loc" : [ -88.057101, 44.78693 ], "pop" : 1712, "state" : "WI" } +{ "_id" : "54102", "city" : "AMBERG", "loc" : [ -87.96425600000001, 45.498878 ], "pop" : 917, "state" : "WI" } +{ "_id" : "54103", "city" : "ARMSTRONG CREEK", "loc" : [ -88.490847, 45.67261 ], "pop" : 460, "state" : "WI" } +{ "_id" : "54104", "city" : "ATHELSTANE", "loc" : [ -88.175282, 45.422819 ], "pop" : 696, "state" : "WI" } +{ "_id" : "54106", "city" : "CENTER VALLEY", "loc" : [ -88.444776, 44.485595 ], "pop" : 4859, "state" : "WI" } +{ "_id" : "54107", "city" : "NAVARINO", "loc" : [ -88.439026, 44.73794 ], "pop" : 2148, "state" : "WI" } +{ "_id" : "54110", "city" : "BRILLION", "loc" : [ -88.083337, 44.17792 ], "pop" : 4618, "state" : "WI" } +{ "_id" : "54111", "city" : "CECIL", "loc" : [ -88.41825300000001, 44.811027 ], "pop" : 2966, "state" : "WI" } +{ "_id" : "54112", "city" : "COLEMAN", "loc" : [ -88.058667, 45.072157 ], "pop" : 2828, "state" : "WI" } +{ "_id" : "54113", "city" : "COMBINED LOCKS", "loc" : [ -88.313271, 44.266581 ], "pop" : 2190, "state" : "WI" } +{ "_id" : "54114", "city" : "BEAVER", "loc" : [ -88.06126500000001, 45.254053 ], "pop" : 3395, "state" : "WI" } +{ "_id" : "54115", "city" : "DE PERE", "loc" : [ -88.080613, 44.438779 ], "pop" : 22430, "state" : "WI" } +{ "_id" : "54119", "city" : "DUNBAR", "loc" : [ -88.106669, 45.600944 ], "pop" : 838, "state" : "WI" } +{ "_id" : "54120", "city" : "FENCE", "loc" : [ -88.364873, 45.759652 ], "pop" : 362, "state" : "WI" } +{ "_id" : "54121", "city" : "FLORENCE", "loc" : [ -88.228921, 45.902724 ], "pop" : 2616, "state" : "WI" } +{ "_id" : "54123", "city" : "FOREST JUNCTION", "loc" : [ -88.15171599999999, 44.20613 ], "pop" : 395, "state" : "WI" } +{ "_id" : "54124", "city" : "GILLETT", "loc" : [ -88.32422099999999, 44.901753 ], "pop" : 3317, "state" : "WI" } +{ "_id" : "54125", "city" : "GOODMAN", "loc" : [ -88.36290099999999, 45.646895 ], "pop" : 758, "state" : "WI" } +{ "_id" : "54126", "city" : "GREENLEAF", "loc" : [ -88.027519, 44.29373 ], "pop" : 3443, "state" : "WI" } +{ "_id" : "54128", "city" : "GRESHAM", "loc" : [ -88.78873, 44.852963 ], "pop" : 1689, "state" : "WI" } +{ "_id" : "54129", "city" : "HILBERT", "loc" : [ -88.20696100000001, 44.127129 ], "pop" : 3938, "state" : "WI" } +{ "_id" : "54130", "city" : "KAUKAUNA", "loc" : [ -88.271692, 44.29561 ], "pop" : 19823, "state" : "WI" } +{ "_id" : "54135", "city" : "KESHENA", "loc" : [ -88.63568600000001, 44.914635 ], "pop" : 3588, "state" : "WI" } +{ "_id" : "54136", "city" : "KIMBERLY", "loc" : [ -88.338374, 44.27008 ], "pop" : 5406, "state" : "WI" } +{ "_id" : "54137", "city" : "KRAKOW", "loc" : [ -88.25933000000001, 44.763457 ], "pop" : 883, "state" : "WI" } +{ "_id" : "54138", "city" : "LAKEWOOD", "loc" : [ -88.50318900000001, 45.316285 ], "pop" : 626, "state" : "WI" } +{ "_id" : "54139", "city" : "STILES", "loc" : [ -88.05430800000001, 44.940494 ], "pop" : 2684, "state" : "WI" } +{ "_id" : "54140", "city" : "LITTLE CHUTE", "loc" : [ -88.311989, 44.284248 ], "pop" : 7769, "state" : "WI" } +{ "_id" : "54141", "city" : "LITTLE SUAMICO", "loc" : [ -88.02724499999999, 44.67751 ], "pop" : 3506, "state" : "WI" } +{ "_id" : "54143", "city" : "MARINETTE", "loc" : [ -87.669684, 45.087403 ], "pop" : 16297, "state" : "WI" } +{ "_id" : "54149", "city" : "MOUNTAIN", "loc" : [ -88.45828, 45.199127 ], "pop" : 1261, "state" : "WI" } +{ "_id" : "54150", "city" : "NEOPIT", "loc" : [ -88.861116, 44.987323 ], "pop" : 14, "state" : "WI" } +{ "_id" : "54151", "city" : "NIAGARA", "loc" : [ -88.03092700000001, 45.765343 ], "pop" : 4123, "state" : "WI" } +{ "_id" : "54153", "city" : "OCONTO", "loc" : [ -87.891728, 44.891359 ], "pop" : 6710, "state" : "WI" } +{ "_id" : "54154", "city" : "OCONTO FALLS", "loc" : [ -88.155528, 44.875499 ], "pop" : 4481, "state" : "WI" } +{ "_id" : "54155", "city" : "ONEIDA", "loc" : [ -88.185851, 44.516641 ], "pop" : 3674, "state" : "WI" } +{ "_id" : "54156", "city" : "PEMBINE", "loc" : [ -87.97036300000001, 45.607398 ], "pop" : 1443, "state" : "WI" } +{ "_id" : "54157", "city" : "PESHTIGO", "loc" : [ -87.729795, 45.045778 ], "pop" : 4956, "state" : "WI" } +{ "_id" : "54159", "city" : "PORTERFIELD", "loc" : [ -87.80624299999999, 45.193399 ], "pop" : 1974, "state" : "WI" } +{ "_id" : "54161", "city" : "POUND", "loc" : [ -88.13962100000001, 45.127317 ], "pop" : 2084, "state" : "WI" } +{ "_id" : "54162", "city" : "PULASKI", "loc" : [ -88.263447, 44.66112 ], "pop" : 6933, "state" : "WI" } +{ "_id" : "54165", "city" : "SEYMOUR", "loc" : [ -88.317243, 44.509096 ], "pop" : 5744, "state" : "WI" } +{ "_id" : "54166", "city" : "SHAWANO", "loc" : [ -88.603599, 44.785133 ], "pop" : 13367, "state" : "WI" } +{ "_id" : "54170", "city" : "SHIOCTON", "loc" : [ -88.556236, 44.497202 ], "pop" : 3708, "state" : "WI" } +{ "_id" : "54171", "city" : "SOBIESKI", "loc" : [ -88.10760500000001, 44.710495 ], "pop" : 1644, "state" : "WI" } +{ "_id" : "54174", "city" : "SURING", "loc" : [ -88.36276700000001, 45.018551 ], "pop" : 2591, "state" : "WI" } +{ "_id" : "54175", "city" : "TOWNSEND", "loc" : [ -88.610743, 45.314819 ], "pop" : 729, "state" : "WI" } +{ "_id" : "54176", "city" : "UNDERHILL", "loc" : [ -88.168898, 44.731836 ], "pop" : 69, "state" : "WI" } +{ "_id" : "54177", "city" : "WAUSAUKEE", "loc" : [ -87.90987699999999, 45.349507 ], "pop" : 2875, "state" : "WI" } +{ "_id" : "54180", "city" : "WRIGHTSTOWN", "loc" : [ -88.121769, 44.338377 ], "pop" : 2359, "state" : "WI" } +{ "_id" : "54201", "city" : "ALGOMA", "loc" : [ -87.457792, 44.610051 ], "pop" : 5387, "state" : "WI" } +{ "_id" : "54202", "city" : "BAILEYS HARBOR", "loc" : [ -87.167626, 45.056549 ], "pop" : 1167, "state" : "WI" } +{ "_id" : "54204", "city" : "BRUSSELS", "loc" : [ -87.62251999999999, 44.747558 ], "pop" : 1785, "state" : "WI" } +{ "_id" : "54205", "city" : "CASCO", "loc" : [ -87.623122, 44.58328 ], "pop" : 2066, "state" : "WI" } +{ "_id" : "54206", "city" : "CATO", "loc" : [ -87.864688, 44.148521 ], "pop" : 1097, "state" : "WI" } +{ "_id" : "54208", "city" : "DENMARK", "loc" : [ -87.82703600000001, 44.359392 ], "pop" : 3968, "state" : "WI" } +{ "_id" : "54209", "city" : "EGG HARBOR", "loc" : [ -87.28052099999999, 45.010039 ], "pop" : 738, "state" : "WI" } +{ "_id" : "54210", "city" : "ELLISON BAY", "loc" : [ -87.051209, 45.257206 ], "pop" : 804, "state" : "WI" } +{ "_id" : "54212", "city" : "FISH CREEK", "loc" : [ -87.20643200000001, 45.11554 ], "pop" : 1200, "state" : "WI" } +{ "_id" : "54213", "city" : "FORESTVILLE", "loc" : [ -87.49283200000001, 44.696863 ], "pop" : 1680, "state" : "WI" } +{ "_id" : "54214", "city" : "FRANCIS CREEK", "loc" : [ -87.720007, 44.199964 ], "pop" : 562, "state" : "WI" } +{ "_id" : "54215", "city" : "KELLNERSVILLE", "loc" : [ -87.803596, 44.22493 ], "pop" : 350, "state" : "WI" } +{ "_id" : "54216", "city" : "KEWAUNEE", "loc" : [ -87.559442, 44.440143 ], "pop" : 6262, "state" : "WI" } +{ "_id" : "54217", "city" : "LUXEMBURG", "loc" : [ -87.71560599999999, 44.550612 ], "pop" : 5188, "state" : "WI" } +{ "_id" : "54220", "city" : "MANITOWOC", "loc" : [ -87.682303, 44.097122 ], "pop" : 39178, "state" : "WI" } +{ "_id" : "54227", "city" : "MARIBEL", "loc" : [ -87.805482, 44.285151 ], "pop" : 2251, "state" : "WI" } +{ "_id" : "54228", "city" : "MISHICOT", "loc" : [ -87.64470300000001, 44.260942 ], "pop" : 3245, "state" : "WI" } +{ "_id" : "54229", "city" : "NEW FRANKEN", "loc" : [ -87.823482, 44.559193 ], "pop" : 2640, "state" : "WI" } +{ "_id" : "54230", "city" : "REEDSVILLE", "loc" : [ -87.96602799999999, 44.157566 ], "pop" : 3073, "state" : "WI" } +{ "_id" : "54232", "city" : "SAINT NAZIANZ", "loc" : [ -87.922906, 44.006425 ], "pop" : 680, "state" : "WI" } +{ "_id" : "54234", "city" : "SISTER BAY", "loc" : [ -87.113865, 45.187544 ], "pop" : 1376, "state" : "WI" } +{ "_id" : "54235", "city" : "STURGEON BAY", "loc" : [ -87.375311, 44.84384 ], "pop" : 16149, "state" : "WI" } +{ "_id" : "54241", "city" : "TWO RIVERS", "loc" : [ -87.585504, 44.166008 ], "pop" : 16768, "state" : "WI" } +{ "_id" : "54245", "city" : "VALDERS", "loc" : [ -87.88118299999999, 44.041977 ], "pop" : 2056, "state" : "WI" } +{ "_id" : "54246", "city" : "WASHINGTON ISLAN", "loc" : [ -86.913664, 45.374042 ], "pop" : 623, "state" : "WI" } +{ "_id" : "54247", "city" : "WHITELAW", "loc" : [ -87.82669799999999, 44.157269 ], "pop" : 1402, "state" : "WI" } +{ "_id" : "54301", "city" : "ALLOUEZ", "loc" : [ -88.016868, 44.485313 ], "pop" : 25108, "state" : "WI" } +{ "_id" : "54302", "city" : "GREEN BAY", "loc" : [ -87.977136, 44.502508 ], "pop" : 27273, "state" : "WI" } +{ "_id" : "54303", "city" : "HOWARD", "loc" : [ -88.04526199999999, 44.530146 ], "pop" : 27046, "state" : "WI" } +{ "_id" : "54304", "city" : "ASHWAUBENON", "loc" : [ -88.066799, 44.505525 ], "pop" : 31339, "state" : "WI" } +{ "_id" : "54311", "city" : "GREEN BAY", "loc" : [ -87.92668500000001, 44.491405 ], "pop" : 19373, "state" : "WI" } +{ "_id" : "54313", "city" : "GREEN BAY", "loc" : [ -88.102054, 44.546289 ], "pop" : 23360, "state" : "WI" } +{ "_id" : "54401", "city" : "WAUSAU", "loc" : [ -89.633955, 44.963433 ], "pop" : 51083, "state" : "WI" } +{ "_id" : "54405", "city" : "ABBOTSFORD", "loc" : [ -90.29943799999999, 44.964057 ], "pop" : 2480, "state" : "WI" } +{ "_id" : "54406", "city" : "AMHERST", "loc" : [ -89.303482, 44.423052 ], "pop" : 2885, "state" : "WI" } +{ "_id" : "54407", "city" : "AMHERST JUNCTION", "loc" : [ -89.303754, 44.506458 ], "pop" : 1448, "state" : "WI" } +{ "_id" : "54408", "city" : "ANIWA", "loc" : [ -89.268254, 45.01039 ], "pop" : 1510, "state" : "WI" } +{ "_id" : "54409", "city" : "ANTIGO", "loc" : [ -89.14187099999999, 45.131362 ], "pop" : 13087, "state" : "WI" } +{ "_id" : "54410", "city" : "ARPIN", "loc" : [ -90.037049, 44.54194 ], "pop" : 2301, "state" : "WI" } +{ "_id" : "54411", "city" : "HAMBURG", "loc" : [ -90.062612, 45.032037 ], "pop" : 4263, "state" : "WI" } +{ "_id" : "54412", "city" : "AUBURNDALE", "loc" : [ -90.013577, 44.637836 ], "pop" : 1667, "state" : "WI" } +{ "_id" : "54413", "city" : "BABCOCK", "loc" : [ -90.098574, 44.303064 ], "pop" : 409, "state" : "WI" } +{ "_id" : "54414", "city" : "BIRNAMWOOD", "loc" : [ -89.212433, 44.926896 ], "pop" : 2464, "state" : "WI" } +{ "_id" : "54416", "city" : "BOWLER", "loc" : [ -88.976071, 44.933667 ], "pop" : 2777, "state" : "WI" } +{ "_id" : "54418", "city" : "BRYANT", "loc" : [ -88.99832499999999, 45.202962 ], "pop" : 1029, "state" : "WI" } +{ "_id" : "54419", "city" : "CHELSEA", "loc" : [ -90.303685, 45.288166 ], "pop" : 122, "state" : "WI" } +{ "_id" : "54420", "city" : "CHILI", "loc" : [ -90.35995200000001, 44.630135 ], "pop" : 728, "state" : "WI" } +{ "_id" : "54421", "city" : "COLBY", "loc" : [ -90.314432, 44.911651 ], "pop" : 3621, "state" : "WI" } +{ "_id" : "54422", "city" : "CURTISS", "loc" : [ -90.45922299999999, 44.960186 ], "pop" : 1111, "state" : "WI" } +{ "_id" : "54423", "city" : "CUSTER", "loc" : [ -89.41527499999999, 44.56622 ], "pop" : 2010, "state" : "WI" } +{ "_id" : "54424", "city" : "DEERBROOK", "loc" : [ -89.187257, 45.236791 ], "pop" : 902, "state" : "WI" } +{ "_id" : "54425", "city" : "DORCHESTER", "loc" : [ -90.35964800000001, 45.004192 ], "pop" : 1860, "state" : "WI" } +{ "_id" : "54426", "city" : "FENWOOD", "loc" : [ -89.998029, 44.903831 ], "pop" : 3810, "state" : "WI" } +{ "_id" : "54427", "city" : "ELAND", "loc" : [ -89.246117, 44.830888 ], "pop" : 1278, "state" : "WI" } +{ "_id" : "54428", "city" : "ELCHO", "loc" : [ -89.15157000000001, 45.440906 ], "pop" : 988, "state" : "WI" } +{ "_id" : "54430", "city" : "ELTON", "loc" : [ -88.883743, 45.156216 ], "pop" : 135, "state" : "WI" } +{ "_id" : "54433", "city" : "GILMAN", "loc" : [ -90.825672, 45.18906 ], "pop" : 1780, "state" : "WI" } +{ "_id" : "54435", "city" : "GLEASON", "loc" : [ -89.475264, 45.338428 ], "pop" : 2347, "state" : "WI" } +{ "_id" : "54436", "city" : "GRANTON", "loc" : [ -90.44838300000001, 44.560558 ], "pop" : 2072, "state" : "WI" } +{ "_id" : "54437", "city" : "GREENWOOD", "loc" : [ -90.622913, 44.740373 ], "pop" : 3029, "state" : "WI" } +{ "_id" : "54440", "city" : "HATLEY", "loc" : [ -89.377728, 44.825638 ], "pop" : 2129, "state" : "WI" } +{ "_id" : "54441", "city" : "HEWITT", "loc" : [ -90.103054, 44.643651 ], "pop" : 595, "state" : "WI" } +{ "_id" : "54442", "city" : "IRMA", "loc" : [ -89.66113799999999, 45.348483 ], "pop" : 1006, "state" : "WI" } +{ "_id" : "54443", "city" : "JUNCTION CITY", "loc" : [ -89.743758, 44.59634 ], "pop" : 2396, "state" : "WI" } +{ "_id" : "54445", "city" : "LILY", "loc" : [ -88.83845100000001, 45.318723 ], "pop" : 196, "state" : "WI" } +{ "_id" : "54446", "city" : "LOYAL", "loc" : [ -90.492238, 44.727243 ], "pop" : 3809, "state" : "WI" } +{ "_id" : "54447", "city" : "LUBLIN", "loc" : [ -90.733678, 45.073933 ], "pop" : 564, "state" : "WI" } +{ "_id" : "54448", "city" : "MARATHON", "loc" : [ -89.829948, 44.965664 ], "pop" : 5202, "state" : "WI" } +{ "_id" : "54449", "city" : "MARSHFIELD", "loc" : [ -90.17845, 44.661453 ], "pop" : 25791, "state" : "WI" } +{ "_id" : "54451", "city" : "MEDFORD", "loc" : [ -90.350306, 45.151185 ], "pop" : 10388, "state" : "WI" } +{ "_id" : "54452", "city" : "MERRILL", "loc" : [ -89.690696, 45.180924 ], "pop" : 17891, "state" : "WI" } +{ "_id" : "54454", "city" : "MILLADORE", "loc" : [ -89.88753199999999, 44.604416 ], "pop" : 1347, "state" : "WI" } +{ "_id" : "54455", "city" : "MOSINEE", "loc" : [ -89.68449099999999, 44.799736 ], "pop" : 13664, "state" : "WI" } +{ "_id" : "54456", "city" : "NEILLSVILLE", "loc" : [ -90.611197, 44.549429 ], "pop" : 4904, "state" : "WI" } +{ "_id" : "54457", "city" : "NEKOOSA", "loc" : [ -89.881394, 44.281979 ], "pop" : 7312, "state" : "WI" } +{ "_id" : "54459", "city" : "OGEMA", "loc" : [ -90.256513, 45.439187 ], "pop" : 1459, "state" : "WI" } +{ "_id" : "54460", "city" : "OWEN", "loc" : [ -90.54689999999999, 44.957817 ], "pop" : 1759, "state" : "WI" } +{ "_id" : "54462", "city" : "PEARSON", "loc" : [ -89.075824, 45.388119 ], "pop" : 679, "state" : "WI" } +{ "_id" : "54463", "city" : "PELICAN LAKE", "loc" : [ -89.181707, 45.504886 ], "pop" : 635, "state" : "WI" } +{ "_id" : "54465", "city" : "PICKEREL", "loc" : [ -88.91365, 45.356658 ], "pop" : 269, "state" : "WI" } +{ "_id" : "54466", "city" : "PITTSVILLE", "loc" : [ -90.18917399999999, 44.43747 ], "pop" : 2754, "state" : "WI" } +{ "_id" : "54467", "city" : "PLOVER", "loc" : [ -89.542805, 44.450673 ], "pop" : 6142, "state" : "WI" } +{ "_id" : "54469", "city" : "PORT EDWARDS", "loc" : [ -89.865246, 44.349705 ], "pop" : 1828, "state" : "WI" } +{ "_id" : "54470", "city" : "RIB LAKE", "loc" : [ -90.176322, 45.298376 ], "pop" : 2002, "state" : "WI" } +{ "_id" : "54471", "city" : "RINGLE", "loc" : [ -89.432845, 44.92383 ], "pop" : 1370, "state" : "WI" } +{ "_id" : "54473", "city" : "ROSHOLT", "loc" : [ -89.33563700000001, 44.662224 ], "pop" : 3147, "state" : "WI" } +{ "_id" : "54474", "city" : "ROTHSCHILD", "loc" : [ -89.61926200000001, 44.88429 ], "pop" : 3867, "state" : "WI" } +{ "_id" : "54475", "city" : "RUDOLPH", "loc" : [ -89.800252, 44.474061 ], "pop" : 1648, "state" : "WI" } +{ "_id" : "54476", "city" : "SCHOFIELD", "loc" : [ -89.581789, 44.906407 ], "pop" : 12583, "state" : "WI" } +{ "_id" : "54479", "city" : "SPENCER", "loc" : [ -90.31140600000001, 44.739148 ], "pop" : 2997, "state" : "WI" } +{ "_id" : "54480", "city" : "STETSONVILLE", "loc" : [ -90.282931, 45.07923 ], "pop" : 1241, "state" : "WI" } +{ "_id" : "54481", "city" : "STEVENS POINT", "loc" : [ -89.558764, 44.521221 ], "pop" : 38950, "state" : "WI" } +{ "_id" : "54484", "city" : "STRATFORD", "loc" : [ -90.058317, 44.789878 ], "pop" : 4201, "state" : "WI" } +{ "_id" : "54485", "city" : "SUMMIT LAKE", "loc" : [ -89.18074300000001, 45.320414 ], "pop" : 616, "state" : "WI" } +{ "_id" : "54486", "city" : "TIGERTON", "loc" : [ -89.056893, 44.729938 ], "pop" : 3310, "state" : "WI" } +{ "_id" : "54487", "city" : "TOMAHAWK", "loc" : [ -89.72726900000001, 45.496308 ], "pop" : 8130, "state" : "WI" } +{ "_id" : "54488", "city" : "UNITY", "loc" : [ -90.322074, 44.822676 ], "pop" : 1797, "state" : "WI" } +{ "_id" : "54489", "city" : "VESPER", "loc" : [ -89.982553, 44.467656 ], "pop" : 1616, "state" : "WI" } +{ "_id" : "54490", "city" : "WESTBORO", "loc" : [ -90.307194, 45.344539 ], "pop" : 766, "state" : "WI" } +{ "_id" : "54491", "city" : "WHITE LAKE", "loc" : [ -88.755489, 45.171465 ], "pop" : 1324, "state" : "WI" } +{ "_id" : "54493", "city" : "WILLARD", "loc" : [ -90.749897, 44.727378 ], "pop" : 682, "state" : "WI" } +{ "_id" : "54494", "city" : "WISCONSIN RAPIDS", "loc" : [ -89.806229, 44.375803 ], "pop" : 33296, "state" : "WI" } +{ "_id" : "54498", "city" : "WITHEE", "loc" : [ -90.604862, 44.975726 ], "pop" : 2286, "state" : "WI" } +{ "_id" : "54499", "city" : "WITTENBERG", "loc" : [ -89.166479, 44.823247 ], "pop" : 1850, "state" : "WI" } +{ "_id" : "54501", "city" : "MONICO", "loc" : [ -89.409285, 45.646718 ], "pop" : 19039, "state" : "WI" } +{ "_id" : "54511", "city" : "CAVOUR", "loc" : [ -88.888566, 45.658309 ], "pop" : 1533, "state" : "WI" } +{ "_id" : "54512", "city" : "BOULDER JUNCTION", "loc" : [ -89.632454, 46.111183 ], "pop" : 563, "state" : "WI" } +{ "_id" : "54513", "city" : "BRANTWOOD", "loc" : [ -90.11595199999999, 45.551413 ], "pop" : 540, "state" : "WI" } +{ "_id" : "54514", "city" : "BUTTERNUT", "loc" : [ -90.482114, 46.018358 ], "pop" : 2054, "state" : "WI" } +{ "_id" : "54515", "city" : "CATAWBA", "loc" : [ -90.51456399999999, 45.508123 ], "pop" : 616, "state" : "WI" } +{ "_id" : "54517", "city" : "CLAM LAKE", "loc" : [ -90.884107, 46.245675 ], "pop" : 2, "state" : "WI" } +{ "_id" : "54519", "city" : "CONOVER", "loc" : [ -89.238919, 46.043968 ], "pop" : 1039, "state" : "WI" } +{ "_id" : "54520", "city" : "CRANDON", "loc" : [ -88.911619, 45.541553 ], "pop" : 3419, "state" : "WI" } +{ "_id" : "54521", "city" : "EAGLE RIVER", "loc" : [ -89.253058, 45.916084 ], "pop" : 6726, "state" : "WI" } +{ "_id" : "54524", "city" : "FIFIELD", "loc" : [ -90.4246, 45.862148 ], "pop" : 496, "state" : "WI" } +{ "_id" : "54526", "city" : "INGRAM", "loc" : [ -90.855183, 45.488807 ], "pop" : 949, "state" : "WI" } +{ "_id" : "54527", "city" : "GLIDDEN", "loc" : [ -90.58885600000001, 46.133668 ], "pop" : 1061, "state" : "WI" } +{ "_id" : "54529", "city" : "HARSHAW", "loc" : [ -89.650346, 45.676244 ], "pop" : 854, "state" : "WI" } +{ "_id" : "54530", "city" : "HAWKINS", "loc" : [ -90.71137299999999, 45.524129 ], "pop" : 747, "state" : "WI" } +{ "_id" : "54531", "city" : "HAZELHURST", "loc" : [ -89.74783600000001, 45.77446 ], "pop" : 1057, "state" : "WI" } +{ "_id" : "54534", "city" : "HURLEY", "loc" : [ -90.19750000000001, 46.44482 ], "pop" : 2658, "state" : "WI" } +{ "_id" : "54536", "city" : "IRON BELT", "loc" : [ -90.324528, 46.395545 ], "pop" : 265, "state" : "WI" } +{ "_id" : "54537", "city" : "KENNAN", "loc" : [ -90.590987, 45.53497 ], "pop" : 628, "state" : "WI" } +{ "_id" : "54538", "city" : "LAC DU FLAMBEAU", "loc" : [ -89.890078, 45.97175 ], "pop" : 2085, "state" : "WI" } +{ "_id" : "54539", "city" : "LAKE TOMAHAWK", "loc" : [ -89.58560900000001, 45.803455 ], "pop" : 1223, "state" : "WI" } +{ "_id" : "54540", "city" : "LAND O LAKES", "loc" : [ -89.321787, 46.156305 ], "pop" : 742, "state" : "WI" } +{ "_id" : "54541", "city" : "LAONA", "loc" : [ -88.671525, 45.553416 ], "pop" : 1823, "state" : "WI" } +{ "_id" : "54542", "city" : "ALVIN", "loc" : [ -88.695308, 45.921841 ], "pop" : 550, "state" : "WI" } +{ "_id" : "54545", "city" : "MANITOWISH WATER", "loc" : [ -89.83076699999999, 46.123909 ], "pop" : 901, "state" : "WI" } +{ "_id" : "54546", "city" : "MELLEN", "loc" : [ -90.655233, 46.300659 ], "pop" : 1752, "state" : "WI" } +{ "_id" : "54547", "city" : "MERCER", "loc" : [ -90.067914, 46.169594 ], "pop" : 1321, "state" : "WI" } +{ "_id" : "54548", "city" : "MINOCQUA", "loc" : [ -89.757954, 45.871909 ], "pop" : 3793, "state" : "WI" } +{ "_id" : "54550", "city" : "PENCE", "loc" : [ -90.244195, 46.425736 ], "pop" : 1019, "state" : "WI" } +{ "_id" : "54552", "city" : "PARK FALLS", "loc" : [ -90.424648, 45.936345 ], "pop" : 5316, "state" : "WI" } +{ "_id" : "54554", "city" : "PHELPS", "loc" : [ -89.081547, 46.064481 ], "pop" : 1183, "state" : "WI" } +{ "_id" : "54555", "city" : "PHILLIPS", "loc" : [ -90.40413100000001, 45.697463 ], "pop" : 5155, "state" : "WI" } +{ "_id" : "54556", "city" : "PRENTICE", "loc" : [ -90.294217, 45.548201 ], "pop" : 1177, "state" : "WI" } +{ "_id" : "54557", "city" : "WINCHESTER", "loc" : [ -89.772795, 46.221735 ], "pop" : 735, "state" : "WI" } +{ "_id" : "54558", "city" : "SAINT GERMAIN", "loc" : [ -89.48655599999999, 45.918315 ], "pop" : 1201, "state" : "WI" } +{ "_id" : "54559", "city" : "SAXON", "loc" : [ -90.438273, 46.495855 ], "pop" : 478, "state" : "WI" } +{ "_id" : "54560", "city" : "SAYNER", "loc" : [ -89.519437, 45.986664 ], "pop" : 559, "state" : "WI" } +{ "_id" : "54562", "city" : "THREE LAKES", "loc" : [ -89.13279199999999, 45.804633 ], "pop" : 1755, "state" : "WI" } +{ "_id" : "54563", "city" : "TONY", "loc" : [ -90.98693799999999, 45.474082 ], "pop" : 814, "state" : "WI" } +{ "_id" : "54564", "city" : "TRIPOLI", "loc" : [ -89.985218, 45.581387 ], "pop" : 374, "state" : "WI" } +{ "_id" : "54565", "city" : "UPSON", "loc" : [ -90.405135, 46.376124 ], "pop" : 69, "state" : "WI" } +{ "_id" : "54566", "city" : "WABENO", "loc" : [ -88.66245600000001, 45.433172 ], "pop" : 1308, "state" : "WI" } +{ "_id" : "54568", "city" : "WOODRUFF", "loc" : [ -89.69544999999999, 45.918583 ], "pop" : 4088, "state" : "WI" } +{ "_id" : "54601", "city" : "LA CROSSE", "loc" : [ -91.217494, 43.798938 ], "pop" : 48348, "state" : "WI" } +{ "_id" : "54603", "city" : "LA CROSSE", "loc" : [ -91.248439, 43.848675 ], "pop" : 15292, "state" : "WI" } +{ "_id" : "54610", "city" : "ALMA", "loc" : [ -91.807931, 44.429437 ], "pop" : 3824, "state" : "WI" } +{ "_id" : "54611", "city" : "ALMA CENTER", "loc" : [ -90.935602, 44.445218 ], "pop" : 989, "state" : "WI" } +{ "_id" : "54612", "city" : "ARCADIA", "loc" : [ -91.480453, 44.253937 ], "pop" : 4707, "state" : "WI" } +{ "_id" : "54613", "city" : "ARKDALE", "loc" : [ -89.896215, 44.052886 ], "pop" : 1582, "state" : "WI" } +{ "_id" : "54614", "city" : "BANGOR", "loc" : [ -90.98088799999999, 43.868697 ], "pop" : 1952, "state" : "WI" } +{ "_id" : "54615", "city" : "BLACK RIVER FALL", "loc" : [ -90.84795200000001, 44.292101 ], "pop" : 8248, "state" : "WI" } +{ "_id" : "54616", "city" : "BLAIR", "loc" : [ -91.223501, 44.296843 ], "pop" : 2347, "state" : "WI" } +{ "_id" : "54617", "city" : "BLOOM CITY", "loc" : [ -90.66645800000001, 43.509034 ], "pop" : 437, "state" : "WI" } +{ "_id" : "54618", "city" : "CUTLER", "loc" : [ -90.268861, 43.936705 ], "pop" : 1613, "state" : "WI" } +{ "_id" : "54619", "city" : "CASHTON", "loc" : [ -90.761197, 43.745649 ], "pop" : 1547, "state" : "WI" } +{ "_id" : "54621", "city" : "CHASEBURG", "loc" : [ -91.07993399999999, 43.679372 ], "pop" : 550, "state" : "WI" } +{ "_id" : "54622", "city" : "WAUMANDEE", "loc" : [ -91.858677, 44.251591 ], "pop" : 2271, "state" : "WI" } +{ "_id" : "54623", "city" : "COON VALLEY", "loc" : [ -91.014338, 43.721783 ], "pop" : 1402, "state" : "WI" } +{ "_id" : "54624", "city" : "VICTORY", "loc" : [ -91.193015, 43.494707 ], "pop" : 1422, "state" : "WI" } +{ "_id" : "54625", "city" : "DODGE", "loc" : [ -91.52434100000001, 44.12886 ], "pop" : 397, "state" : "WI" } +{ "_id" : "54626", "city" : "EASTMAN", "loc" : [ -91.01927000000001, 43.19592 ], "pop" : 1064, "state" : "WI" } +{ "_id" : "54627", "city" : "ETTRICK", "loc" : [ -91.26354600000001, 44.172428 ], "pop" : 1644, "state" : "WI" } +{ "_id" : "54628", "city" : "FERRYVILLE", "loc" : [ -91.044578, 43.395857 ], "pop" : 1411, "state" : "WI" } +{ "_id" : "54629", "city" : "FOUNTAIN CITY", "loc" : [ -91.67786099999999, 44.136436 ], "pop" : 2481, "state" : "WI" } +{ "_id" : "54630", "city" : "GALESVILLE", "loc" : [ -91.358789, 44.088848 ], "pop" : 3111, "state" : "WI" } +{ "_id" : "54631", "city" : "GAYS MILLS", "loc" : [ -90.867636, 43.293639 ], "pop" : 2577, "state" : "WI" } +{ "_id" : "54632", "city" : "GENOA", "loc" : [ -91.13499899999999, 43.605134 ], "pop" : 1432, "state" : "WI" } +{ "_id" : "54634", "city" : "YUBA", "loc" : [ -90.37059499999999, 43.635009 ], "pop" : 2309, "state" : "WI" } +{ "_id" : "54635", "city" : "NORTHFIELD", "loc" : [ -91.039086, 44.397778 ], "pop" : 1513, "state" : "WI" } +{ "_id" : "54636", "city" : "HOLMEN", "loc" : [ -91.2497, 43.976125 ], "pop" : 7098, "state" : "WI" } +{ "_id" : "54638", "city" : "KENDALL", "loc" : [ -90.410691, 43.81614 ], "pop" : 1848, "state" : "WI" } +{ "_id" : "54639", "city" : "WEST LIMA", "loc" : [ -90.648257, 43.616955 ], "pop" : 3280, "state" : "WI" } +{ "_id" : "54641", "city" : "MATHER", "loc" : [ -90.295264, 44.147706 ], "pop" : 57, "state" : "WI" } +{ "_id" : "54642", "city" : "MELROSE", "loc" : [ -91.04446299999999, 44.138156 ], "pop" : 1806, "state" : "WI" } +{ "_id" : "54644", "city" : "MINDORO", "loc" : [ -91.064181, 44.02873 ], "pop" : 1157, "state" : "WI" } +{ "_id" : "54646", "city" : "NECEDAH", "loc" : [ -90.05997600000001, 44.034481 ], "pop" : 2741, "state" : "WI" } +{ "_id" : "54648", "city" : "NORWALK", "loc" : [ -90.680134, 43.812823 ], "pop" : 2360, "state" : "WI" } +{ "_id" : "54650", "city" : "ONALASKA", "loc" : [ -91.231419, 43.897392 ], "pop" : 16435, "state" : "WI" } +{ "_id" : "54651", "city" : "ONTARIO", "loc" : [ -90.62053400000001, 43.717197 ], "pop" : 1032, "state" : "WI" } +{ "_id" : "54652", "city" : "READSTOWN", "loc" : [ -90.75787200000001, 43.450791 ], "pop" : 736, "state" : "WI" } +{ "_id" : "54653", "city" : "ROCKLAND", "loc" : [ -90.948846, 43.938159 ], "pop" : 1486, "state" : "WI" } +{ "_id" : "54655", "city" : "SOLDIERS GROVE", "loc" : [ -90.766293, 43.391857 ], "pop" : 1621, "state" : "WI" } +{ "_id" : "54656", "city" : "SPARTA", "loc" : [ -90.814566, 43.954045 ], "pop" : 14151, "state" : "WI" } +{ "_id" : "54657", "city" : "STEUBEN", "loc" : [ -90.860878, 43.195464 ], "pop" : 63, "state" : "WI" } +{ "_id" : "54658", "city" : "STODDARD", "loc" : [ -91.19188, 43.691227 ], "pop" : 2116, "state" : "WI" } +{ "_id" : "54659", "city" : "TAYLOR", "loc" : [ -91.112752, 44.289855 ], "pop" : 1205, "state" : "WI" } +{ "_id" : "54660", "city" : "WYEVILLE", "loc" : [ -90.491704, 43.994833 ], "pop" : 14294, "state" : "WI" } +{ "_id" : "54661", "city" : "TREMPEALEAU", "loc" : [ -91.4282, 44.021843 ], "pop" : 2370, "state" : "WI" } +{ "_id" : "54664", "city" : "VIOLA", "loc" : [ -90.655416, 43.504758 ], "pop" : 718, "state" : "WI" } +{ "_id" : "54665", "city" : "VIROQUA", "loc" : [ -90.89386500000001, 43.54419 ], "pop" : 7071, "state" : "WI" } +{ "_id" : "54666", "city" : "WARRENS", "loc" : [ -90.496692, 44.15697 ], "pop" : 1089, "state" : "WI" } +{ "_id" : "54667", "city" : "WESTBY", "loc" : [ -90.87403, 43.663123 ], "pop" : 4290, "state" : "WI" } +{ "_id" : "54669", "city" : "WEST SALEM", "loc" : [ -91.089311, 43.906253 ], "pop" : 5244, "state" : "WI" } +{ "_id" : "54670", "city" : "WILTON", "loc" : [ -90.51618499999999, 43.832209 ], "pop" : 1188, "state" : "WI" } +{ "_id" : "54701", "city" : "EAU CLAIRE", "loc" : [ -91.487686, 44.783972 ], "pop" : 31593, "state" : "WI" } +{ "_id" : "54703", "city" : "EAU CLAIRE", "loc" : [ -91.499701, 44.827122 ], "pop" : 38400, "state" : "WI" } +{ "_id" : "54720", "city" : "ALTOONA", "loc" : [ -91.43825, 44.802142 ], "pop" : 6065, "state" : "WI" } +{ "_id" : "54721", "city" : "ARKANSAW", "loc" : [ -92.056646, 44.626659 ], "pop" : 1099, "state" : "WI" } +{ "_id" : "54722", "city" : "AUGUSTA", "loc" : [ -91.123154, 44.694737 ], "pop" : 3402, "state" : "WI" } +{ "_id" : "54723", "city" : "BAY CITY", "loc" : [ -92.446889, 44.6166 ], "pop" : 1540, "state" : "WI" } +{ "_id" : "54724", "city" : "BLOOMER", "loc" : [ -91.489974, 45.102477 ], "pop" : 6410, "state" : "WI" } +{ "_id" : "54725", "city" : "BOYCEVILLE", "loc" : [ -92.02480300000001, 45.064238 ], "pop" : 2520, "state" : "WI" } +{ "_id" : "54726", "city" : "BOYD", "loc" : [ -91.029355, 44.943737 ], "pop" : 2549, "state" : "WI" } +{ "_id" : "54727", "city" : "CADOTT", "loc" : [ -91.169884, 44.963014 ], "pop" : 4397, "state" : "WI" } +{ "_id" : "54728", "city" : "CHETEK", "loc" : [ -91.65415400000001, 45.317046 ], "pop" : 5453, "state" : "WI" } +{ "_id" : "54729", "city" : "CHIPPEWA FALLS", "loc" : [ -91.384376, 44.932202 ], "pop" : 25627, "state" : "WI" } +{ "_id" : "54730", "city" : "COLFAX", "loc" : [ -91.735737, 44.999326 ], "pop" : 4073, "state" : "WI" } +{ "_id" : "54731", "city" : "CONRATH", "loc" : [ -91.06213200000001, 45.353281 ], "pop" : 758, "state" : "WI" } +{ "_id" : "54732", "city" : "CORNELL", "loc" : [ -91.17325200000001, 45.16191 ], "pop" : 2799, "state" : "WI" } +{ "_id" : "54733", "city" : "DALLAS", "loc" : [ -91.836844, 45.254883 ], "pop" : 973, "state" : "WI" } +{ "_id" : "54734", "city" : "DOWNING", "loc" : [ -92.113384, 45.103032 ], "pop" : 1029, "state" : "WI" } +{ "_id" : "54736", "city" : "DURAND", "loc" : [ -91.92947599999999, 44.630042 ], "pop" : 3746, "state" : "WI" } +{ "_id" : "54737", "city" : "EAU GALLE", "loc" : [ -92.04081600000001, 44.721433 ], "pop" : 921, "state" : "WI" } +{ "_id" : "54738", "city" : "ELEVA", "loc" : [ -91.48036999999999, 44.598493 ], "pop" : 2291, "state" : "WI" } +{ "_id" : "54739", "city" : "ELK MOUND", "loc" : [ -91.675229, 44.866973 ], "pop" : 3539, "state" : "WI" } +{ "_id" : "54740", "city" : "ELMWOOD", "loc" : [ -92.202195, 44.756088 ], "pop" : 1759, "state" : "WI" } +{ "_id" : "54741", "city" : "FAIRCHILD", "loc" : [ -90.990568, 44.596253 ], "pop" : 1319, "state" : "WI" } +{ "_id" : "54742", "city" : "FALL CREEK", "loc" : [ -91.285631, 44.768385 ], "pop" : 3814, "state" : "WI" } +{ "_id" : "54744", "city" : "HILLSDALE", "loc" : [ -91.85985700000001, 45.32136 ], "pop" : 560, "state" : "WI" } +{ "_id" : "54745", "city" : "HOLCOMBE", "loc" : [ -91.132955, 45.251263 ], "pop" : 1752, "state" : "WI" } +{ "_id" : "54746", "city" : "HUMBIRD", "loc" : [ -90.888257, 44.536676 ], "pop" : 633, "state" : "WI" } +{ "_id" : "54747", "city" : "INDEPENDENCE", "loc" : [ -91.45351100000001, 44.395926 ], "pop" : 2826, "state" : "WI" } +{ "_id" : "54748", "city" : "JIM FALLS", "loc" : [ -91.264909, 45.064439 ], "pop" : 974, "state" : "WI" } +{ "_id" : "54749", "city" : "KNAPP", "loc" : [ -92.07520100000001, 44.954495 ], "pop" : 935, "state" : "WI" } +{ "_id" : "54750", "city" : "MAIDEN ROCK", "loc" : [ -92.278212, 44.608599 ], "pop" : 1503, "state" : "WI" } +{ "_id" : "54751", "city" : "MENOMONIE", "loc" : [ -91.92650999999999, 44.87182 ], "pop" : 21211, "state" : "WI" } +{ "_id" : "54754", "city" : "MERRILLAN", "loc" : [ -90.810496, 44.436938 ], "pop" : 1317, "state" : "WI" } +{ "_id" : "54755", "city" : "MODENA", "loc" : [ -91.66957600000001, 44.609853 ], "pop" : 4907, "state" : "WI" } +{ "_id" : "54756", "city" : "NELSON", "loc" : [ -92.000742, 44.42947 ], "pop" : 652, "state" : "WI" } +{ "_id" : "54757", "city" : "NEW AUBURN", "loc" : [ -91.519747, 45.23562 ], "pop" : 2101, "state" : "WI" } +{ "_id" : "54758", "city" : "OSSEO", "loc" : [ -91.219148, 44.559923 ], "pop" : 4347, "state" : "WI" } +{ "_id" : "54759", "city" : "PEPIN", "loc" : [ -92.139353, 44.458687 ], "pop" : 1504, "state" : "WI" } +{ "_id" : "54761", "city" : "PLUM CITY", "loc" : [ -92.183725, 44.635979 ], "pop" : 1050, "state" : "WI" } +{ "_id" : "54762", "city" : "PRAIRIE FARM", "loc" : [ -91.974205, 45.246183 ], "pop" : 1061, "state" : "WI" } +{ "_id" : "54763", "city" : "RIDGELAND", "loc" : [ -91.879024, 45.186773 ], "pop" : 863, "state" : "WI" } +{ "_id" : "54765", "city" : "SAND CREEK", "loc" : [ -91.701446, 45.170513 ], "pop" : 501, "state" : "WI" } +{ "_id" : "54766", "city" : "SHELDON", "loc" : [ -90.914148, 45.318171 ], "pop" : 1711, "state" : "WI" } +{ "_id" : "54767", "city" : "SPRING VALLEY", "loc" : [ -92.290599, 44.835569 ], "pop" : 2746, "state" : "WI" } +{ "_id" : "54768", "city" : "STANLEY", "loc" : [ -90.938935, 44.968872 ], "pop" : 3157, "state" : "WI" } +{ "_id" : "54769", "city" : "STOCKHOLM", "loc" : [ -92.22842900000001, 44.500441 ], "pop" : 434, "state" : "WI" } +{ "_id" : "54770", "city" : "STRUM", "loc" : [ -91.38327099999999, 44.567356 ], "pop" : 1560, "state" : "WI" } +{ "_id" : "54771", "city" : "THORP", "loc" : [ -90.80286099999999, 44.957319 ], "pop" : 4803, "state" : "WI" } +{ "_id" : "54772", "city" : "WHEELER", "loc" : [ -91.887055, 45.071856 ], "pop" : 1094, "state" : "WI" } +{ "_id" : "54773", "city" : "WHITEHALL", "loc" : [ -91.302953, 44.382683 ], "pop" : 3330, "state" : "WI" } +{ "_id" : "54801", "city" : "SPOONER", "loc" : [ -91.91555, 45.850468 ], "pop" : 5384, "state" : "WI" } +{ "_id" : "54805", "city" : "ALMENA", "loc" : [ -92.002691, 45.419507 ], "pop" : 3180, "state" : "WI" } +{ "_id" : "54806", "city" : "MOQUAH", "loc" : [ -90.876712, 46.577948 ], "pop" : 12254, "state" : "WI" } +{ "_id" : "54810", "city" : "BALSAM LAKE", "loc" : [ -92.41495399999999, 45.458845 ], "pop" : 1765, "state" : "WI" } +{ "_id" : "54812", "city" : "BARRON", "loc" : [ -91.84996, 45.400535 ], "pop" : 4049, "state" : "WI" } +{ "_id" : "54813", "city" : "BARRONETT", "loc" : [ -92.019595, 45.618995 ], "pop" : 804, "state" : "WI" } +{ "_id" : "54814", "city" : "BAYFIELD", "loc" : [ -90.821681, 46.835359 ], "pop" : 2375, "state" : "WI" } +{ "_id" : "54817", "city" : "BIRCHWOOD", "loc" : [ -91.577564, 45.640296 ], "pop" : 1962, "state" : "WI" } +{ "_id" : "54819", "city" : "BRUCE", "loc" : [ -91.290622, 45.447923 ], "pop" : 2654, "state" : "WI" } +{ "_id" : "54820", "city" : "BRULE", "loc" : [ -91.553862, 46.576318 ], "pop" : 902, "state" : "WI" } +{ "_id" : "54821", "city" : "CABLE", "loc" : [ -91.22443800000001, 46.217155 ], "pop" : 1311, "state" : "WI" } +{ "_id" : "54822", "city" : "CAMERON", "loc" : [ -91.730992, 45.403836 ], "pop" : 3314, "state" : "WI" } +{ "_id" : "54824", "city" : "CENTURIA", "loc" : [ -92.547741, 45.448369 ], "pop" : 1791, "state" : "WI" } +{ "_id" : "54826", "city" : "COMSTOCK", "loc" : [ -92.085961, 45.491114 ], "pop" : 473, "state" : "WI" } +{ "_id" : "54827", "city" : "CORNUCOPIA", "loc" : [ -91.097421, 46.837171 ], "pop" : 242, "state" : "WI" } +{ "_id" : "54828", "city" : "NEW POST", "loc" : [ -91.327825, 45.809664 ], "pop" : 377, "state" : "WI" } +{ "_id" : "54829", "city" : "CUMBERLAND", "loc" : [ -92.029709, 45.5403 ], "pop" : 4229, "state" : "WI" } +{ "_id" : "54830", "city" : "DAIRYLAND", "loc" : [ -92.265995, 46.029681 ], "pop" : 1855, "state" : "WI" } +{ "_id" : "54832", "city" : "DRUMMOND", "loc" : [ -91.285569, 46.311896 ], "pop" : 329, "state" : "WI" } +{ "_id" : "54835", "city" : "EXELAND", "loc" : [ -91.22381900000001, 45.675298 ], "pop" : 939, "state" : "WI" } +{ "_id" : "54836", "city" : "FOXBORO", "loc" : [ -92.149254, 46.487511 ], "pop" : 1528, "state" : "WI" } +{ "_id" : "54837", "city" : "CLAM FALLS", "loc" : [ -92.42648199999999, 45.665314 ], "pop" : 4011, "state" : "WI" } +{ "_id" : "54838", "city" : "GORDON", "loc" : [ -91.803301, 46.233603 ], "pop" : 1088, "state" : "WI" } +{ "_id" : "54839", "city" : "GRAND VIEW", "loc" : [ -91.107465, 46.357682 ], "pop" : 280, "state" : "WI" } +{ "_id" : "54840", "city" : "EVERGREEN", "loc" : [ -92.662685, 45.761312 ], "pop" : 4008, "state" : "WI" } +{ "_id" : "54843", "city" : "NORTH WOODS BEAC", "loc" : [ -91.397659, 46.001404 ], "pop" : 9339, "state" : "WI" } +{ "_id" : "54844", "city" : "HERBSTER", "loc" : [ -91.233193, 46.82128 ], "pop" : 230, "state" : "WI" } +{ "_id" : "54845", "city" : "HERTEL", "loc" : [ -92.14041899999999, 45.807561 ], "pop" : 110, "state" : "WI" } +{ "_id" : "54846", "city" : "HIGH BRIDGE", "loc" : [ -90.73826, 46.379613 ], "pop" : 536, "state" : "WI" } +{ "_id" : "54847", "city" : "IRON RIVER", "loc" : [ -91.42105599999999, 46.578984 ], "pop" : 1777, "state" : "WI" } +{ "_id" : "54848", "city" : "LADYSMITH", "loc" : [ -91.10880400000001, 45.471941 ], "pop" : 6737, "state" : "WI" } +{ "_id" : "54849", "city" : "LAKE NEBAGAMON", "loc" : [ -91.74024300000001, 46.502347 ], "pop" : 1824, "state" : "WI" } +{ "_id" : "54850", "city" : "LA POINTE", "loc" : [ -90.603622, 46.846675 ], "pop" : 17, "state" : "WI" } +{ "_id" : "54853", "city" : "LUCK", "loc" : [ -92.416391, 45.556799 ], "pop" : 2131, "state" : "WI" } +{ "_id" : "54854", "city" : "MAPLE", "loc" : [ -91.702015, 46.620591 ], "pop" : 891, "state" : "WI" } +{ "_id" : "54855", "city" : "MARENGO", "loc" : [ -90.839991, 46.407112 ], "pop" : 592, "state" : "WI" } +{ "_id" : "54856", "city" : "DELTA", "loc" : [ -91.05751100000001, 46.457285 ], "pop" : 1519, "state" : "WI" } +{ "_id" : "54858", "city" : "MILLTOWN", "loc" : [ -92.501739, 45.527082 ], "pop" : 1570, "state" : "WI" } +{ "_id" : "54859", "city" : "MINONG", "loc" : [ -91.850628, 46.10445 ], "pop" : 1451, "state" : "WI" } +{ "_id" : "54862", "city" : "OJIBWA", "loc" : [ -91.110922, 45.785351 ], "pop" : 401, "state" : "WI" } +{ "_id" : "54864", "city" : "POPLAR", "loc" : [ -91.825345, 46.57708 ], "pop" : 1064, "state" : "WI" } +{ "_id" : "54865", "city" : "PORT WING", "loc" : [ -91.392016, 46.76204 ], "pop" : 544, "state" : "WI" } +{ "_id" : "54867", "city" : "RADISSON", "loc" : [ -91.22615, 45.773359 ], "pop" : 509, "state" : "WI" } +{ "_id" : "54868", "city" : "CANTON", "loc" : [ -91.73354399999999, 45.510466 ], "pop" : 13996, "state" : "WI" } +{ "_id" : "54870", "city" : "SARONA", "loc" : [ -91.762103, 45.708532 ], "pop" : 1201, "state" : "WI" } +{ "_id" : "54871", "city" : "SHELL LAKE", "loc" : [ -91.960606, 45.753598 ], "pop" : 3450, "state" : "WI" } +{ "_id" : "54872", "city" : "SIREN", "loc" : [ -92.389151, 45.78214 ], "pop" : 2495, "state" : "WI" } +{ "_id" : "54873", "city" : "BARNES", "loc" : [ -91.77015400000001, 46.388821 ], "pop" : 2443, "state" : "WI" } +{ "_id" : "54874", "city" : "WENTWORTH", "loc" : [ -91.94580499999999, 46.588659 ], "pop" : 3029, "state" : "WI" } +{ "_id" : "54875", "city" : "EARL", "loc" : [ -91.677734, 45.960384 ], "pop" : 970, "state" : "WI" } +{ "_id" : "54876", "city" : "STONE LAKE", "loc" : [ -91.509291, 45.833733 ], "pop" : 1662, "state" : "WI" } +{ "_id" : "54880", "city" : "SUPERIOR", "loc" : [ -92.091174, 46.701552 ], "pop" : 29513, "state" : "WI" } +{ "_id" : "54888", "city" : "TREGO", "loc" : [ -91.858051, 45.951556 ], "pop" : 1037, "state" : "WI" } +{ "_id" : "54889", "city" : "TURTLE LAKE", "loc" : [ -92.17814199999999, 45.421349 ], "pop" : 2048, "state" : "WI" } +{ "_id" : "54891", "city" : "WASHBURN", "loc" : [ -90.909516, 46.680595 ], "pop" : 3177, "state" : "WI" } +{ "_id" : "54893", "city" : "WEBSTER", "loc" : [ -92.322722, 45.874001 ], "pop" : 3012, "state" : "WI" } +{ "_id" : "54895", "city" : "WEYERHAEUSER", "loc" : [ -91.428944, 45.426347 ], "pop" : 858, "state" : "WI" } +{ "_id" : "54896", "city" : "LORETTA", "loc" : [ -90.949591, 45.841419 ], "pop" : 1385, "state" : "WI" } +{ "_id" : "54901", "city" : "OSHKOSH", "loc" : [ -88.54363499999999, 44.021962 ], "pop" : 57187, "state" : "WI" } +{ "_id" : "54904", "city" : "OSHKOSH", "loc" : [ -88.607015, 44.030356 ], "pop" : 12608, "state" : "WI" } +{ "_id" : "54909", "city" : "ALMOND", "loc" : [ -89.35836399999999, 44.289832 ], "pop" : 2002, "state" : "WI" } +{ "_id" : "54911", "city" : "APPLETON", "loc" : [ -88.397649, 44.277325 ], "pop" : 25970, "state" : "WI" } +{ "_id" : "54914", "city" : "APPLETON", "loc" : [ -88.432608, 44.270992 ], "pop" : 23028, "state" : "WI" } +{ "_id" : "54915", "city" : "APPLETON", "loc" : [ -88.399902, 44.26351 ], "pop" : 42119, "state" : "WI" } +{ "_id" : "54921", "city" : "BANCROFT", "loc" : [ -89.530438, 44.30648 ], "pop" : 1368, "state" : "WI" } +{ "_id" : "54922", "city" : "BEAR CREEK", "loc" : [ -88.740375, 44.5348 ], "pop" : 1488, "state" : "WI" } +{ "_id" : "54923", "city" : "BERLIN", "loc" : [ -88.949009, 43.976936 ], "pop" : 8132, "state" : "WI" } +{ "_id" : "54928", "city" : "CAROLINE", "loc" : [ -88.888749, 44.727574 ], "pop" : 293, "state" : "WI" } +{ "_id" : "54929", "city" : "CLINTONVILLE", "loc" : [ -88.742999, 44.636442 ], "pop" : 8902, "state" : "WI" } +{ "_id" : "54930", "city" : "COLOMA", "loc" : [ -89.494332, 44.027462 ], "pop" : 1364, "state" : "WI" } +{ "_id" : "54932", "city" : "ELDORADO", "loc" : [ -88.63882700000001, 43.841471 ], "pop" : 765, "state" : "WI" } +{ "_id" : "54935", "city" : "TAYCHEEDAH", "loc" : [ -88.429149, 43.770446 ], "pop" : 37093, "state" : "WI" } +{ "_id" : "54937", "city" : "NORTH FOND DU LA", "loc" : [ -88.481264, 43.792633 ], "pop" : 14665, "state" : "WI" } +{ "_id" : "54940", "city" : "FREMONT", "loc" : [ -88.844852, 44.237884 ], "pop" : 3211, "state" : "WI" } +{ "_id" : "54941", "city" : "GREEN LAKE", "loc" : [ -88.96847, 43.844383 ], "pop" : 2504, "state" : "WI" } +{ "_id" : "54942", "city" : "GREENVILLE", "loc" : [ -88.569579, 44.299747 ], "pop" : 1722, "state" : "WI" } +{ "_id" : "54943", "city" : "HANCOCK", "loc" : [ -89.534448, 44.129743 ], "pop" : 1214, "state" : "WI" } +{ "_id" : "54944", "city" : "HORTONVILLE", "loc" : [ -88.62813, 44.327306 ], "pop" : 5602, "state" : "WI" } +{ "_id" : "54945", "city" : "IOLA", "loc" : [ -89.137311, 44.532183 ], "pop" : 2589, "state" : "WI" } +{ "_id" : "54946", "city" : "KING", "loc" : [ -89.113739, 44.267332 ], "pop" : 661, "state" : "WI" } +{ "_id" : "54947", "city" : "LARSEN", "loc" : [ -88.696305, 44.198421 ], "pop" : 1863, "state" : "WI" } +{ "_id" : "54948", "city" : "LEOPOLIS", "loc" : [ -88.87222300000001, 44.781188 ], "pop" : 403, "state" : "WI" } +{ "_id" : "54949", "city" : "MANAWA", "loc" : [ -88.916444, 44.470148 ], "pop" : 2749, "state" : "WI" } +{ "_id" : "54950", "city" : "MARION", "loc" : [ -88.876706, 44.679414 ], "pop" : 3071, "state" : "WI" } +{ "_id" : "54952", "city" : "MENASHA", "loc" : [ -88.417536, 44.211164 ], "pop" : 22505, "state" : "WI" } +{ "_id" : "54956", "city" : "NEENAH", "loc" : [ -88.479201, 44.181094 ], "pop" : 34261, "state" : "WI" } +{ "_id" : "54960", "city" : "NESHKORO", "loc" : [ -89.233572, 43.898943 ], "pop" : 2210, "state" : "WI" } +{ "_id" : "54961", "city" : "NEW LONDON", "loc" : [ -88.75542799999999, 44.392847 ], "pop" : 13037, "state" : "WI" } +{ "_id" : "54962", "city" : "OGDENSBURG", "loc" : [ -89.01185099999999, 44.467803 ], "pop" : 1509, "state" : "WI" } +{ "_id" : "54963", "city" : "OMRO", "loc" : [ -88.75193299999999, 44.035678 ], "pop" : 5678, "state" : "WI" } +{ "_id" : "54964", "city" : "PICKETT", "loc" : [ -88.71345700000001, 43.900917 ], "pop" : 518, "state" : "WI" } +{ "_id" : "54965", "city" : "PINE RIVER", "loc" : [ -89.040415, 44.160393 ], "pop" : 2148, "state" : "WI" } +{ "_id" : "54966", "city" : "PLAINFIELD", "loc" : [ -89.455896, 44.209079 ], "pop" : 2336, "state" : "WI" } +{ "_id" : "54967", "city" : "POY SIPPI", "loc" : [ -88.926835, 44.110069 ], "pop" : 232, "state" : "WI" } +{ "_id" : "54968", "city" : "PRINCETON", "loc" : [ -89.12491300000001, 43.843827 ], "pop" : 3101, "state" : "WI" } +{ "_id" : "54970", "city" : "REDGRANITE", "loc" : [ -89.098125, 44.04381 ], "pop" : 2093, "state" : "WI" } +{ "_id" : "54971", "city" : "RIPON", "loc" : [ -88.842433, 43.845402 ], "pop" : 10694, "state" : "WI" } +{ "_id" : "54974", "city" : "ROSENDALE", "loc" : [ -88.641704, 43.788903 ], "pop" : 2012, "state" : "WI" } +{ "_id" : "54977", "city" : "SCANDINAVIA", "loc" : [ -89.165042, 44.460436 ], "pop" : 1097, "state" : "WI" } +{ "_id" : "54978", "city" : "TILLEDA", "loc" : [ -88.907498, 44.811812 ], "pop" : 58, "state" : "WI" } +{ "_id" : "54979", "city" : "VAN DYNE", "loc" : [ -88.510008, 43.873399 ], "pop" : 1403, "state" : "WI" } +{ "_id" : "54981", "city" : "WAUPACA", "loc" : [ -89.11014299999999, 44.348101 ], "pop" : 11716, "state" : "WI" } +{ "_id" : "54982", "city" : "WAUTOMA", "loc" : [ -89.26655100000001, 44.065576 ], "pop" : 6318, "state" : "WI" } +{ "_id" : "54983", "city" : "WEYAUWEGA", "loc" : [ -88.941047, 44.320973 ], "pop" : 3886, "state" : "WI" } +{ "_id" : "54984", "city" : "WILD ROSE", "loc" : [ -89.195252, 44.183433 ], "pop" : 2127, "state" : "WI" } +{ "_id" : "54986", "city" : "WINNECONNE", "loc" : [ -88.721384, 44.118704 ], "pop" : 3887, "state" : "WI" } +{ "_id" : "55001", "city" : "AFTON", "loc" : [ -92.823358, 44.86965 ], "pop" : 4357, "state" : "MN" } +{ "_id" : "55003", "city" : "BAYPORT", "loc" : [ -92.784375, 45.021405 ], "pop" : 3200, "state" : "MN" } +{ "_id" : "55005", "city" : "EAST BETHEL", "loc" : [ -93.233088, 45.394114 ], "pop" : 2821, "state" : "MN" } +{ "_id" : "55006", "city" : "BRAHAM", "loc" : [ -93.203695, 45.717547 ], "pop" : 1944, "state" : "MN" } +{ "_id" : "55007", "city" : "QUAMBA", "loc" : [ -92.98347, 45.938694 ], "pop" : 1222, "state" : "MN" } +{ "_id" : "55008", "city" : "CAMBRIDGE", "loc" : [ -93.288935, 45.557591 ], "pop" : 14444, "state" : "MN" } +{ "_id" : "55009", "city" : "CANNON FALLS", "loc" : [ -92.863995, 44.495985 ], "pop" : 7590, "state" : "MN" } +{ "_id" : "55010", "city" : "CASTLE ROCK", "loc" : [ -93.109241, 44.594216 ], "pop" : 1480, "state" : "MN" } +{ "_id" : "55011", "city" : "CEDAR EAST BETHE", "loc" : [ -93.265834, 45.336494 ], "pop" : 6874, "state" : "MN" } +{ "_id" : "55013", "city" : "CHISAGO CITY", "loc" : [ -92.892134, 45.361144 ], "pop" : 2905, "state" : "MN" } +{ "_id" : "55014", "city" : "CIRCLE PINES", "loc" : [ -93.143984, 45.152841 ], "pop" : 19791, "state" : "MN" } +{ "_id" : "55016", "city" : "COTTAGE GROVE", "loc" : [ -92.939283, 44.830824 ], "pop" : 22265, "state" : "MN" } +{ "_id" : "55017", "city" : "DALBO", "loc" : [ -93.441918, 45.678735 ], "pop" : 616, "state" : "MN" } +{ "_id" : "55018", "city" : "STANTON", "loc" : [ -92.974779, 44.423884 ], "pop" : 2009, "state" : "MN" } +{ "_id" : "55019", "city" : "DUNDAS", "loc" : [ -93.20368999999999, 44.395537 ], "pop" : 803, "state" : "MN" } +{ "_id" : "55020", "city" : "ELKO", "loc" : [ -93.383555, 44.58945 ], "pop" : 4146, "state" : "MN" } +{ "_id" : "55021", "city" : "FARIBAULT", "loc" : [ -93.28179, 44.294457 ], "pop" : 21450, "state" : "MN" } +{ "_id" : "55024", "city" : "FARMINGTON", "loc" : [ -93.153891, 44.662799 ], "pop" : 10145, "state" : "MN" } +{ "_id" : "55025", "city" : "FOREST LAKE", "loc" : [ -92.97489400000001, 45.268499 ], "pop" : 14749, "state" : "MN" } +{ "_id" : "55026", "city" : "FRONTENAC", "loc" : [ -92.328103, 44.487176 ], "pop" : 1698, "state" : "MN" } +{ "_id" : "55027", "city" : "GOODHUE", "loc" : [ -92.571743, 44.402178 ], "pop" : 1928, "state" : "MN" } +{ "_id" : "55030", "city" : "GRASSTON", "loc" : [ -93.196226, 45.772926 ], "pop" : 1007, "state" : "MN" } +{ "_id" : "55031", "city" : "HAMPTON", "loc" : [ -92.946673, 44.602848 ], "pop" : 1780, "state" : "MN" } +{ "_id" : "55032", "city" : "HARRIS", "loc" : [ -93.039545, 45.596205 ], "pop" : 2026, "state" : "MN" } +{ "_id" : "55033", "city" : "WELCH", "loc" : [ -92.862566, 44.718932 ], "pop" : 20769, "state" : "MN" } +{ "_id" : "55037", "city" : "HINCKLEY", "loc" : [ -92.899333, 46.018876 ], "pop" : 2611, "state" : "MN" } +{ "_id" : "55038", "city" : "CENTERVILLE", "loc" : [ -93.00349300000001, 45.1628 ], "pop" : 6520, "state" : "MN" } +{ "_id" : "55040", "city" : "ISANTI", "loc" : [ -93.22656499999999, 45.468212 ], "pop" : 8004, "state" : "MN" } +{ "_id" : "55041", "city" : "LAKE CITY", "loc" : [ -92.283778, 44.430493 ], "pop" : 5154, "state" : "MN" } +{ "_id" : "55042", "city" : "LAKE ELMO", "loc" : [ -92.90564999999999, 44.994609 ], "pop" : 5903, "state" : "MN" } +{ "_id" : "55043", "city" : "LAKELAND", "loc" : [ -92.771592, 44.939384 ], "pop" : 3792, "state" : "MN" } +{ "_id" : "55044", "city" : "LAKEVILLE", "loc" : [ -93.257802, 44.674865 ], "pop" : 17741, "state" : "MN" } +{ "_id" : "55045", "city" : "LINDSTROM", "loc" : [ -92.84207600000001, 45.387265 ], "pop" : 5991, "state" : "MN" } +{ "_id" : "55046", "city" : "VESELI", "loc" : [ -93.42359399999999, 44.462888 ], "pop" : 4020, "state" : "MN" } +{ "_id" : "55047", "city" : "MARINE ON SAINT", "loc" : [ -92.822952, 45.183119 ], "pop" : 4310, "state" : "MN" } +{ "_id" : "55049", "city" : "MEDFORD", "loc" : [ -93.24372099999999, 44.17415 ], "pop" : 1305, "state" : "MN" } +{ "_id" : "55051", "city" : "MORA", "loc" : [ -93.294234, 45.895786 ], "pop" : 10652, "state" : "MN" } +{ "_id" : "55052", "city" : "MORRISTOWN", "loc" : [ -93.452512, 44.234183 ], "pop" : 1425, "state" : "MN" } +{ "_id" : "55053", "city" : "NERSTRAND", "loc" : [ -93.0855, 44.353769 ], "pop" : 687, "state" : "MN" } +{ "_id" : "55055", "city" : "NEWPORT", "loc" : [ -92.998603, 44.872522 ], "pop" : 3720, "state" : "MN" } +{ "_id" : "55056", "city" : "NORTH BRANCH", "loc" : [ -92.93709699999999, 45.516479 ], "pop" : 6024, "state" : "MN" } +{ "_id" : "55057", "city" : "NORTHFIELD", "loc" : [ -93.166826, 44.458724 ], "pop" : 17995, "state" : "MN" } +{ "_id" : "55060", "city" : "OWATONNA", "loc" : [ -93.21914, 44.080478 ], "pop" : 23860, "state" : "MN" } +{ "_id" : "55063", "city" : "BEROUN", "loc" : [ -92.98260399999999, 45.832273 ], "pop" : 6858, "state" : "MN" } +{ "_id" : "55065", "city" : "RANDOLPH", "loc" : [ -93.01961900000001, 44.527386 ], "pop" : 370, "state" : "MN" } +{ "_id" : "55066", "city" : "RED WING", "loc" : [ -92.548559, 44.552779 ], "pop" : 17033, "state" : "MN" } +{ "_id" : "55067", "city" : "ROCK CREEK", "loc" : [ -92.930826, 45.762404 ], "pop" : 1040, "state" : "MN" } +{ "_id" : "55068", "city" : "ROSEMOUNT", "loc" : [ -93.158844, 44.728919 ], "pop" : 14747, "state" : "MN" } +{ "_id" : "55069", "city" : "RUSH CITY", "loc" : [ -92.99787600000001, 45.684496 ], "pop" : 3566, "state" : "MN" } +{ "_id" : "55070", "city" : "SAINT FRANCIS", "loc" : [ -93.359832, 45.390284 ], "pop" : 2789, "state" : "MN" } +{ "_id" : "55071", "city" : "SAINT PAUL PARK", "loc" : [ -92.987331, 44.834404 ], "pop" : 5517, "state" : "MN" } +{ "_id" : "55072", "city" : "MARKVILLE", "loc" : [ -92.87100100000001, 46.121355 ], "pop" : 3299, "state" : "MN" } +{ "_id" : "55073", "city" : "SCANDIA", "loc" : [ -92.82915800000001, 45.269666 ], "pop" : 2024, "state" : "MN" } +{ "_id" : "55074", "city" : "SHAFER", "loc" : [ -92.76088900000001, 45.357561 ], "pop" : 1519, "state" : "MN" } +{ "_id" : "55075", "city" : "SOUTH SAINT PAUL", "loc" : [ -93.046013, 44.888128 ], "pop" : 20027, "state" : "MN" } +{ "_id" : "55076", "city" : "INVER GROVE HEIG", "loc" : [ -93.034746, 44.841966 ], "pop" : 14444, "state" : "MN" } +{ "_id" : "55077", "city" : "INVER GROVE HEIG", "loc" : [ -93.073938, 44.850123 ], "pop" : 8309, "state" : "MN" } +{ "_id" : "55079", "city" : "STACY", "loc" : [ -93.017743, 45.397509 ], "pop" : 5936, "state" : "MN" } +{ "_id" : "55080", "city" : "STANCHFIELD", "loc" : [ -93.243302, 45.667513 ], "pop" : 913, "state" : "MN" } +{ "_id" : "55082", "city" : "OAK PARK HEIGHTS", "loc" : [ -92.830032, 45.050007 ], "pop" : 25247, "state" : "MN" } +{ "_id" : "55084", "city" : "TAYLORS FALLS", "loc" : [ -92.69059300000001, 45.41825 ], "pop" : 1421, "state" : "MN" } +{ "_id" : "55087", "city" : "WARSAW", "loc" : [ -93.364181, 44.250439 ], "pop" : 1236, "state" : "MN" } +{ "_id" : "55088", "city" : "WEBSTER", "loc" : [ -93.334418, 44.502633 ], "pop" : 1452, "state" : "MN" } +{ "_id" : "55089", "city" : "WELCH", "loc" : [ -92.726259, 44.603006 ], "pop" : 678, "state" : "MN" } +{ "_id" : "55092", "city" : "EAST BETHEL", "loc" : [ -93.06856500000001, 45.324337 ], "pop" : 7514, "state" : "MN" } +{ "_id" : "55101", "city" : "SAINT PAUL", "loc" : [ -93.083167, 44.969963 ], "pop" : 18352, "state" : "MN" } +{ "_id" : "55102", "city" : "SAINT PAUL", "loc" : [ -93.120852, 44.937228 ], "pop" : 18585, "state" : "MN" } +{ "_id" : "55103", "city" : "SAINT PAUL", "loc" : [ -93.121594, 44.960798 ], "pop" : 12169, "state" : "MN" } +{ "_id" : "55104", "city" : "SAINT PAUL", "loc" : [ -93.15797000000001, 44.953179 ], "pop" : 46396, "state" : "MN" } +{ "_id" : "55105", "city" : "SAINT PAUL", "loc" : [ -93.165148, 44.934723 ], "pop" : 26216, "state" : "MN" } +{ "_id" : "55106", "city" : "SAINT PAUL", "loc" : [ -93.048817, 44.968384 ], "pop" : 47905, "state" : "MN" } +{ "_id" : "55107", "city" : "WEST SAINT PAUL", "loc" : [ -93.086157, 44.927235 ], "pop" : 15825, "state" : "MN" } +{ "_id" : "55108", "city" : "LAUDERDALE", "loc" : [ -93.17458000000001, 44.982217 ], "pop" : 17285, "state" : "MN" } +{ "_id" : "55109", "city" : "NORTH SAINT PAUL", "loc" : [ -93.017072, 45.011859 ], "pop" : 28263, "state" : "MN" } +{ "_id" : "55110", "city" : "WHITE BEAR LAKE", "loc" : [ -93.01129899999999, 45.074527 ], "pop" : 38649, "state" : "MN" } +{ "_id" : "55111", "city" : "FORT SNELLING", "loc" : [ -93.202579, 44.901548 ], "pop" : 97, "state" : "MN" } +{ "_id" : "55112", "city" : "NEW BRIGHTON", "loc" : [ -93.199691, 45.074129 ], "pop" : 44128, "state" : "MN" } +{ "_id" : "55113", "city" : "ROSEVILLE", "loc" : [ -93.14924499999999, 45.012876 ], "pop" : 37302, "state" : "MN" } +{ "_id" : "55114", "city" : "SAINT PAUL", "loc" : [ -93.19806699999999, 44.967968 ], "pop" : 1402, "state" : "MN" } +{ "_id" : "55115", "city" : "WHITE BEAR LAKE", "loc" : [ -92.954847, 45.061132 ], "pop" : 6201, "state" : "MN" } +{ "_id" : "55116", "city" : "SAINT PAUL", "loc" : [ -93.172747, 44.914007 ], "pop" : 23868, "state" : "MN" } +{ "_id" : "55117", "city" : "LITTLE CANADA", "loc" : [ -93.10365899999999, 44.992165 ], "pop" : 38771, "state" : "MN" } +{ "_id" : "55118", "city" : "WEST SAINT PAUL", "loc" : [ -93.096435, 44.902691 ], "pop" : 25866, "state" : "MN" } +{ "_id" : "55119", "city" : "MAPLEWOOD", "loc" : [ -93.008019, 44.955384 ], "pop" : 33887, "state" : "MN" } +{ "_id" : "55120", "city" : "EAGAN", "loc" : [ -93.12902, 44.873825 ], "pop" : 3113, "state" : "MN" } +{ "_id" : "55121", "city" : "EAGAN", "loc" : [ -93.16753, 44.843039 ], "pop" : 6047, "state" : "MN" } +{ "_id" : "55122", "city" : "EAGAN", "loc" : [ -93.19693700000001, 44.803593 ], "pop" : 23875, "state" : "MN" } +{ "_id" : "55123", "city" : "EAGAN", "loc" : [ -93.14135, 44.809764 ], "pop" : 17487, "state" : "MN" } +{ "_id" : "55124", "city" : "APPLE VALLEY", "loc" : [ -93.20775999999999, 44.746147 ], "pop" : 34598, "state" : "MN" } +{ "_id" : "55125", "city" : "WOODBURY", "loc" : [ -92.951413, 44.916195 ], "pop" : 20075, "state" : "MN" } +{ "_id" : "55126", "city" : "SHOREVIEW", "loc" : [ -93.134367, 45.083334 ], "pop" : 24597, "state" : "MN" } +{ "_id" : "55127", "city" : "VADNAIS HEIGHTS", "loc" : [ -93.07875, 45.070839 ], "pop" : 14628, "state" : "MN" } +{ "_id" : "55128", "city" : "OAKDALE", "loc" : [ -92.96812799999999, 44.984648 ], "pop" : 19099, "state" : "MN" } +{ "_id" : "55150", "city" : "MENDOTA", "loc" : [ -93.161221, 44.885796 ], "pop" : 164, "state" : "MN" } +{ "_id" : "55301", "city" : "ALBERTVILLE", "loc" : [ -93.646899, 45.253425 ], "pop" : 3132, "state" : "MN" } +{ "_id" : "55302", "city" : "ANNANDALE", "loc" : [ -94.106072, 45.248272 ], "pop" : 6174, "state" : "MN" } +{ "_id" : "55303", "city" : "RAMSEY", "loc" : [ -93.407822, 45.238537 ], "pop" : 33161, "state" : "MN" } +{ "_id" : "55304", "city" : "HAM LAKE", "loc" : [ -93.284531, 45.25068 ], "pop" : 25122, "state" : "MN" } +{ "_id" : "55307", "city" : "ARLINGTON", "loc" : [ -94.076195, 44.615279 ], "pop" : 2997, "state" : "MN" } +{ "_id" : "55308", "city" : "BECKER", "loc" : [ -93.84096599999999, 45.436539 ], "pop" : 3589, "state" : "MN" } +{ "_id" : "55309", "city" : "BIG LAKE", "loc" : [ -93.73991700000001, 45.350648 ], "pop" : 6703, "state" : "MN" } +{ "_id" : "55310", "city" : "BIRD ISLAND", "loc" : [ -94.871634, 44.750729 ], "pop" : 1885, "state" : "MN" } +{ "_id" : "55312", "city" : "BROWNTON", "loc" : [ -94.330611, 44.728145 ], "pop" : 1686, "state" : "MN" } +{ "_id" : "55313", "city" : "BUFFALO", "loc" : [ -93.863479, 45.181371 ], "pop" : 8942, "state" : "MN" } +{ "_id" : "55314", "city" : "BUFFALO LAKE", "loc" : [ -94.591207, 44.770885 ], "pop" : 1431, "state" : "MN" } +{ "_id" : "55315", "city" : "CARVER", "loc" : [ -93.687949, 44.716898 ], "pop" : 1181, "state" : "MN" } +{ "_id" : "55316", "city" : "CHAMPLIN", "loc" : [ -93.381927, 45.170042 ], "pop" : 16849, "state" : "MN" } +{ "_id" : "55317", "city" : "CHANHASSEN", "loc" : [ -93.535906, 44.867924 ], "pop" : 8499, "state" : "MN" } +{ "_id" : "55318", "city" : "CHASKA", "loc" : [ -93.60831399999999, 44.806071 ], "pop" : 13907, "state" : "MN" } +{ "_id" : "55319", "city" : "CLEAR LAKE", "loc" : [ -93.968391, 45.479477 ], "pop" : 3280, "state" : "MN" } +{ "_id" : "55320", "city" : "CLEARWATER", "loc" : [ -94.04524600000001, 45.387694 ], "pop" : 1752, "state" : "MN" } +{ "_id" : "55321", "city" : "COKATO", "loc" : [ -94.19105399999999, 45.074761 ], "pop" : 4053, "state" : "MN" } +{ "_id" : "55322", "city" : "COLOGNE", "loc" : [ -93.798249, 44.764591 ], "pop" : 2298, "state" : "MN" } +{ "_id" : "55324", "city" : "DARWIN", "loc" : [ -94.424926, 45.102949 ], "pop" : 933, "state" : "MN" } +{ "_id" : "55325", "city" : "DASSEL", "loc" : [ -94.33047500000001, 45.103208 ], "pop" : 4818, "state" : "MN" } +{ "_id" : "55327", "city" : "DAYTON", "loc" : [ -93.466795, 45.198164 ], "pop" : 4251, "state" : "MN" } +{ "_id" : "55328", "city" : "DELANO", "loc" : [ -93.801644, 45.034222 ], "pop" : 5574, "state" : "MN" } +{ "_id" : "55329", "city" : "EDEN VALLEY", "loc" : [ -94.603911, 45.302006 ], "pop" : 1955, "state" : "MN" } +{ "_id" : "55330", "city" : "ELK RIVER", "loc" : [ -93.5814, 45.313601 ], "pop" : 17703, "state" : "MN" } +{ "_id" : "55331", "city" : "EXCELSIOR", "loc" : [ -93.579132, 44.900704 ], "pop" : 15860, "state" : "MN" } +{ "_id" : "55332", "city" : "FAIRFAX", "loc" : [ -94.72562600000001, 44.532942 ], "pop" : 2250, "state" : "MN" } +{ "_id" : "55333", "city" : "FRANKLIN", "loc" : [ -94.893094, 44.542132 ], "pop" : 702, "state" : "MN" } +{ "_id" : "55334", "city" : "GAYLORD", "loc" : [ -94.195543, 44.546298 ], "pop" : 3099, "state" : "MN" } +{ "_id" : "55335", "city" : "GIBBON", "loc" : [ -94.54667999999999, 44.560587 ], "pop" : 1718, "state" : "MN" } +{ "_id" : "55336", "city" : "GLENCOE", "loc" : [ -94.161554, 44.778001 ], "pop" : 6275, "state" : "MN" } +{ "_id" : "55337", "city" : "BURNSVILLE", "loc" : [ -93.275283, 44.76086 ], "pop" : 51421, "state" : "MN" } +{ "_id" : "55338", "city" : "GREEN ISLE", "loc" : [ -93.932635, 44.668665 ], "pop" : 1353, "state" : "MN" } +{ "_id" : "55339", "city" : "HAMBURG", "loc" : [ -93.96431699999999, 44.731452 ], "pop" : 696, "state" : "MN" } +{ "_id" : "55340", "city" : "HAMEL", "loc" : [ -93.575957, 45.079951 ], "pop" : 4930, "state" : "MN" } +{ "_id" : "55342", "city" : "HECTOR", "loc" : [ -94.70582400000001, 44.748489 ], "pop" : 1896, "state" : "MN" } +{ "_id" : "55343", "city" : "EDEN PRAIRIE", "loc" : [ -93.41645200000001, 44.933318 ], "pop" : 40067, "state" : "MN" } +{ "_id" : "55344", "city" : "EDEN PRAIRIE", "loc" : [ -93.437573, 44.857426 ], "pop" : 7901, "state" : "MN" } +{ "_id" : "55345", "city" : "MINNETONKA", "loc" : [ -93.48499700000001, 44.913808 ], "pop" : 22535, "state" : "MN" } +{ "_id" : "55346", "city" : "EDEN PRAIRIE", "loc" : [ -93.483028, 44.877106 ], "pop" : 16269, "state" : "MN" } +{ "_id" : "55347", "city" : "EDEN PRAIRIE", "loc" : [ -93.438934, 44.834217 ], "pop" : 15141, "state" : "MN" } +{ "_id" : "55349", "city" : "HOWARD LAKE", "loc" : [ -94.069515, 45.061594 ], "pop" : 3443, "state" : "MN" } +{ "_id" : "55350", "city" : "HUTCHINSON", "loc" : [ -94.384691, 44.894554 ], "pop" : 15549, "state" : "MN" } +{ "_id" : "55352", "city" : "JORDAN", "loc" : [ -93.61946, 44.671321 ], "pop" : 4679, "state" : "MN" } +{ "_id" : "55353", "city" : "KIMBALL", "loc" : [ -94.302837, 45.343584 ], "pop" : 2226, "state" : "MN" } +{ "_id" : "55354", "city" : "LESTER PRAIRIE", "loc" : [ -94.055094, 44.873898 ], "pop" : 2160, "state" : "MN" } +{ "_id" : "55355", "city" : "LITCHFIELD", "loc" : [ -94.526805, 45.126272 ], "pop" : 8528, "state" : "MN" } +{ "_id" : "55356", "city" : "LONG LAKE", "loc" : [ -93.58179800000001, 44.991228 ], "pop" : 5700, "state" : "MN" } +{ "_id" : "55357", "city" : "LORETTO", "loc" : [ -93.66916500000001, 45.106099 ], "pop" : 1492, "state" : "MN" } +{ "_id" : "55358", "city" : "MAPLE LAKE", "loc" : [ -93.963793, 45.220236 ], "pop" : 4084, "state" : "MN" } +{ "_id" : "55359", "city" : "MAPLE PLAIN", "loc" : [ -93.700214, 44.978686 ], "pop" : 6885, "state" : "MN" } +{ "_id" : "55360", "city" : "MAYER", "loc" : [ -93.885925, 44.902231 ], "pop" : 1233, "state" : "MN" } +{ "_id" : "55362", "city" : "MONTICELLO", "loc" : [ -93.802252, 45.295557 ], "pop" : 8919, "state" : "MN" } +{ "_id" : "55363", "city" : "MONTROSE", "loc" : [ -93.93176200000001, 45.089737 ], "pop" : 2847, "state" : "MN" } +{ "_id" : "55364", "city" : "MOUND", "loc" : [ -93.656087, 44.938158 ], "pop" : 13251, "state" : "MN" } +{ "_id" : "55366", "city" : "NEW AUBURN", "loc" : [ -94.20567, 44.675919 ], "pop" : 784, "state" : "MN" } +{ "_id" : "55367", "city" : "NEW GERMANY", "loc" : [ -93.97013099999999, 44.899431 ], "pop" : 1136, "state" : "MN" } +{ "_id" : "55368", "city" : "NORWOOD", "loc" : [ -93.93006699999999, 44.766786 ], "pop" : 1761, "state" : "MN" } +{ "_id" : "55369", "city" : "MAPLE GROVE", "loc" : [ -93.43987, 45.108636 ], "pop" : 41581, "state" : "MN" } +{ "_id" : "55370", "city" : "PLATO", "loc" : [ -94.050583, 44.765728 ], "pop" : 990, "state" : "MN" } +{ "_id" : "55371", "city" : "PRINCETON", "loc" : [ -93.596143, 45.585115 ], "pop" : 8975, "state" : "MN" } +{ "_id" : "55372", "city" : "PRIOR LAKE", "loc" : [ -93.41005699999999, 44.710694 ], "pop" : 18539, "state" : "MN" } +{ "_id" : "55373", "city" : "ROCKFORD", "loc" : [ -93.765832, 45.103074 ], "pop" : 6268, "state" : "MN" } +{ "_id" : "55374", "city" : "ROGERS", "loc" : [ -93.581445, 45.171484 ], "pop" : 4957, "state" : "MN" } +{ "_id" : "55376", "city" : "SAINT MICHAEL", "loc" : [ -93.65925300000001, 45.206409 ], "pop" : 5441, "state" : "MN" } +{ "_id" : "55378", "city" : "SAVAGE", "loc" : [ -93.343445, 44.761547 ], "pop" : 7764, "state" : "MN" } +{ "_id" : "55379", "city" : "SHAKOPEE", "loc" : [ -93.51974800000001, 44.7793 ], "pop" : 14755, "state" : "MN" } +{ "_id" : "55380", "city" : "SILVER CREEK", "loc" : [ -93.94962200000001, 45.326474 ], "pop" : 1835, "state" : "MN" } +{ "_id" : "55381", "city" : "SILVER LAKE", "loc" : [ -94.197383, 44.913945 ], "pop" : 2012, "state" : "MN" } +{ "_id" : "55382", "city" : "SOUTH HAVEN", "loc" : [ -94.162768, 45.346008 ], "pop" : 4377, "state" : "MN" } +{ "_id" : "55384", "city" : "SPRING PARK", "loc" : [ -93.63410399999999, 44.935566 ], "pop" : 1571, "state" : "MN" } +{ "_id" : "55385", "city" : "STEWART", "loc" : [ -94.451572, 44.725928 ], "pop" : 1410, "state" : "MN" } +{ "_id" : "55386", "city" : "VICTORIA", "loc" : [ -93.656094, 44.858223 ], "pop" : 1367, "state" : "MN" } +{ "_id" : "55387", "city" : "WACONIA", "loc" : [ -93.7784, 44.851029 ], "pop" : 5844, "state" : "MN" } +{ "_id" : "55388", "city" : "WATERTOWN", "loc" : [ -93.848159, 44.959533 ], "pop" : 3520, "state" : "MN" } +{ "_id" : "55389", "city" : "WATKINS", "loc" : [ -94.429677, 45.308652 ], "pop" : 1998, "state" : "MN" } +{ "_id" : "55390", "city" : "WAVERLY", "loc" : [ -93.954538, 45.041265 ], "pop" : 1691, "state" : "MN" } +{ "_id" : "55391", "city" : "WAYZATA", "loc" : [ -93.52058100000001, 44.958189 ], "pop" : 15196, "state" : "MN" } +{ "_id" : "55395", "city" : "WINSTED", "loc" : [ -94.05516799999999, 44.958459 ], "pop" : 2548, "state" : "MN" } +{ "_id" : "55396", "city" : "WINTHROP", "loc" : [ -94.36984699999999, 44.543566 ], "pop" : 2630, "state" : "MN" } +{ "_id" : "55397", "city" : "YOUNG AMERICA", "loc" : [ -93.918049, 44.792905 ], "pop" : 2527, "state" : "MN" } +{ "_id" : "55398", "city" : "ZIMMERMAN", "loc" : [ -93.58785899999999, 45.455321 ], "pop" : 5786, "state" : "MN" } +{ "_id" : "55401", "city" : "MINNEAPOLIS", "loc" : [ -93.26825100000001, 44.983473 ], "pop" : 2716, "state" : "MN" } +{ "_id" : "55402", "city" : "MINNEAPOLIS", "loc" : [ -93.275871, 44.976184 ], "pop" : 261, "state" : "MN" } +{ "_id" : "55403", "city" : "MINNEAPOLIS", "loc" : [ -93.282841, 44.967345 ], "pop" : 14098, "state" : "MN" } +{ "_id" : "55404", "city" : "MINNEAPOLIS", "loc" : [ -93.26416, 44.960891 ], "pop" : 19903, "state" : "MN" } +{ "_id" : "55405", "city" : "MINNEAPOLIS", "loc" : [ -93.29909600000001, 44.968734 ], "pop" : 16148, "state" : "MN" } +{ "_id" : "55406", "city" : "MINNEAPOLIS", "loc" : [ -93.221357, 44.938359 ], "pop" : 31760, "state" : "MN" } +{ "_id" : "55407", "city" : "MINNEAPOLIS", "loc" : [ -93.25449999999999, 44.937787 ], "pop" : 34059, "state" : "MN" } +{ "_id" : "55408", "city" : "MINNEAPOLIS", "loc" : [ -93.28617300000001, 44.946575 ], "pop" : 29685, "state" : "MN" } +{ "_id" : "55409", "city" : "MINNEAPOLIS", "loc" : [ -93.28182, 44.926378 ], "pop" : 20415, "state" : "MN" } +{ "_id" : "55410", "city" : "EDINA", "loc" : [ -93.31818699999999, 44.915366 ], "pop" : 16834, "state" : "MN" } +{ "_id" : "55411", "city" : "MINNEAPOLIS", "loc" : [ -93.30054800000001, 44.999601 ], "pop" : 30088, "state" : "MN" } +{ "_id" : "55412", "city" : "MINNEAPOLIS", "loc" : [ -93.30203299999999, 45.024236 ], "pop" : 21329, "state" : "MN" } +{ "_id" : "55413", "city" : "MINNEAPOLIS", "loc" : [ -93.255194, 44.997994 ], "pop" : 12201, "state" : "MN" } +{ "_id" : "55414", "city" : "MINNEAPOLIS", "loc" : [ -93.219904, 44.977908 ], "pop" : 10535, "state" : "MN" } +{ "_id" : "55415", "city" : "MINNEAPOLIS", "loc" : [ -93.264403, 44.971455 ], "pop" : 4401, "state" : "MN" } +{ "_id" : "55416", "city" : "SAINT LOUIS PARK", "loc" : [ -93.340344, 44.946899 ], "pop" : 26211, "state" : "MN" } +{ "_id" : "55417", "city" : "MINNEAPOLIS", "loc" : [ -93.23605999999999, 44.905371 ], "pop" : 25445, "state" : "MN" } +{ "_id" : "55418", "city" : "MINNEAPOLIS", "loc" : [ -93.24010800000001, 45.01923 ], "pop" : 30904, "state" : "MN" } +{ "_id" : "55419", "city" : "MINNEAPOLIS", "loc" : [ -93.288618, 44.902567 ], "pop" : 19740, "state" : "MN" } +{ "_id" : "55420", "city" : "BLOOMINGTON", "loc" : [ -93.276034, 44.837284 ], "pop" : 22028, "state" : "MN" } +{ "_id" : "55421", "city" : "COLUMBIA HEIGHTS", "loc" : [ -93.246095, 45.049582 ], "pop" : 25668, "state" : "MN" } +{ "_id" : "55422", "city" : "ROBBINSDALE", "loc" : [ -93.339769, 45.016722 ], "pop" : 28922, "state" : "MN" } +{ "_id" : "55423", "city" : "RICHFIELD", "loc" : [ -93.281351, 44.875731 ], "pop" : 35710, "state" : "MN" } +{ "_id" : "55424", "city" : "EDINA", "loc" : [ -93.335005, 44.904385 ], "pop" : 12342, "state" : "MN" } +{ "_id" : "55425", "city" : "BLOOMINGTON", "loc" : [ -93.249413, 44.843198 ], "pop" : 8501, "state" : "MN" } +{ "_id" : "55426", "city" : "SAINT LOUIS PARK", "loc" : [ -93.379627, 44.954448 ], "pop" : 25951, "state" : "MN" } +{ "_id" : "55427", "city" : "GOLDEN VALLEY", "loc" : [ -93.381585, 45.010374 ], "pop" : 24406, "state" : "MN" } +{ "_id" : "55428", "city" : "CRYSTAL", "loc" : [ -93.376908, 45.060299 ], "pop" : 33233, "state" : "MN" } +{ "_id" : "55429", "city" : "BROOKLYN CENTER", "loc" : [ -93.340203, 45.067667 ], "pop" : 22597, "state" : "MN" } +{ "_id" : "55430", "city" : "BROOKLYN CENTER", "loc" : [ -93.29906800000001, 45.061106 ], "pop" : 21561, "state" : "MN" } +{ "_id" : "55431", "city" : "BLOOMINGTON", "loc" : [ -93.31232199999999, 44.827776 ], "pop" : 19428, "state" : "MN" } +{ "_id" : "55432", "city" : "FRIDLEY", "loc" : [ -93.253905, 45.095695 ], "pop" : 31132, "state" : "MN" } +{ "_id" : "55433", "city" : "COON RAPIDS", "loc" : [ -93.32625299999999, 45.168192 ], "pop" : 27580, "state" : "MN" } +{ "_id" : "55434", "city" : "BLAINE", "loc" : [ -93.24255700000001, 45.168083 ], "pop" : 33410, "state" : "MN" } +{ "_id" : "55435", "city" : "EDINA", "loc" : [ -93.37145200000001, 44.877143 ], "pop" : 8926, "state" : "MN" } +{ "_id" : "55436", "city" : "EDINA", "loc" : [ -93.370997, 44.902305 ], "pop" : 11750, "state" : "MN" } +{ "_id" : "55437", "city" : "BLOOMINGTON", "loc" : [ -93.34349899999999, 44.823279 ], "pop" : 19472, "state" : "MN" } +{ "_id" : "55438", "city" : "BLOOMINGTON", "loc" : [ -93.38014099999999, 44.823924 ], "pop" : 16896, "state" : "MN" } +{ "_id" : "55439", "city" : "EDINA", "loc" : [ -93.33216899999999, 44.873716 ], "pop" : 10571, "state" : "MN" } +{ "_id" : "55441", "city" : "PLYMOUTH", "loc" : [ -93.422782, 45.009836 ], "pop" : 16840, "state" : "MN" } +{ "_id" : "55442", "city" : "PLYMOUTH", "loc" : [ -93.426316, 45.045151 ], "pop" : 9893, "state" : "MN" } +{ "_id" : "55443", "city" : "BROOKLYN CENTER", "loc" : [ -93.34018399999999, 45.105586 ], "pop" : 20896, "state" : "MN" } +{ "_id" : "55444", "city" : "BROOKLYN CENTER", "loc" : [ -93.30245499999999, 45.100172 ], "pop" : 12538, "state" : "MN" } +{ "_id" : "55445", "city" : "BROOKLYN PARK", "loc" : [ -93.37349500000001, 45.103956 ], "pop" : 6398, "state" : "MN" } +{ "_id" : "55446", "city" : "PLYMOUTH", "loc" : [ -93.472323, 45.032446 ], "pop" : 7704, "state" : "MN" } +{ "_id" : "55447", "city" : "PLYMOUTH", "loc" : [ -93.49469499999999, 44.998593 ], "pop" : 16668, "state" : "MN" } +{ "_id" : "55448", "city" : "COON RAPIDS", "loc" : [ -93.289699, 45.180626 ], "pop" : 25234, "state" : "MN" } +{ "_id" : "55450", "city" : "MINNEAPOLIS", "loc" : [ -93.24741400000001, 44.865883 ], "pop" : 0, "state" : "MN" } +{ "_id" : "55454", "city" : "MINNEAPOLIS", "loc" : [ -93.242898, 44.968161 ], "pop" : 8815, "state" : "MN" } +{ "_id" : "55455", "city" : "MINNEAPOLIS", "loc" : [ -93.23927999999999, 44.981562 ], "pop" : 12216, "state" : "MN" } +{ "_id" : "55599", "city" : "LORETTO", "loc" : [ -93.664534, 45.05604 ], "pop" : 541, "state" : "MN" } +{ "_id" : "55602", "city" : "BRIMSON", "loc" : [ -91.862521, 47.314162 ], "pop" : 176, "state" : "MN" } +{ "_id" : "55603", "city" : "FINLAND", "loc" : [ -91.209597, 47.419716 ], "pop" : 565, "state" : "MN" } +{ "_id" : "55604", "city" : "GRAND MARAIS", "loc" : [ -90.339114, 47.77577 ], "pop" : 2404, "state" : "MN" } +{ "_id" : "55605", "city" : "GRAND PORTAGE", "loc" : [ -89.69886200000001, 47.959065 ], "pop" : 350, "state" : "MN" } +{ "_id" : "55606", "city" : "HOVLAND", "loc" : [ -90.04756999999999, 47.83415 ], "pop" : 218, "state" : "MN" } +{ "_id" : "55607", "city" : "ISABELLA", "loc" : [ -91.51732699999999, 47.626719 ], "pop" : 402, "state" : "MN" } +{ "_id" : "55612", "city" : "LUTSEN", "loc" : [ -90.638059, 47.683066 ], "pop" : 381, "state" : "MN" } +{ "_id" : "55613", "city" : "SCHROEDER", "loc" : [ -90.933807, 47.542185 ], "pop" : 174, "state" : "MN" } +{ "_id" : "55614", "city" : "LITTLE MARAIS", "loc" : [ -91.277753, 47.299905 ], "pop" : 2552, "state" : "MN" } +{ "_id" : "55615", "city" : "TOFTE", "loc" : [ -90.783135, 47.760792 ], "pop" : 341, "state" : "MN" } +{ "_id" : "55616", "city" : "TWO HARBORS", "loc" : [ -91.678264, 47.039364 ], "pop" : 6511, "state" : "MN" } +{ "_id" : "55702", "city" : "ALBORN", "loc" : [ -92.557937, 46.978229 ], "pop" : 601, "state" : "MN" } +{ "_id" : "55703", "city" : "ANGORA", "loc" : [ -92.64133200000001, 47.757738 ], "pop" : 291, "state" : "MN" } +{ "_id" : "55704", "city" : "ASKOV", "loc" : [ -92.75281200000001, 46.196408 ], "pop" : 919, "state" : "MN" } +{ "_id" : "55705", "city" : "AURORA", "loc" : [ -92.24148599999999, 47.495096 ], "pop" : 3674, "state" : "MN" } +{ "_id" : "55706", "city" : "BABBITT", "loc" : [ -91.956951, 47.709121 ], "pop" : 2014, "state" : "MN" } +{ "_id" : "55707", "city" : "BARNUM", "loc" : [ -92.629167, 46.519616 ], "pop" : 2028, "state" : "MN" } +{ "_id" : "55709", "city" : "BOVEY", "loc" : [ -93.372322, 47.286788 ], "pop" : 5077, "state" : "MN" } +{ "_id" : "55710", "city" : "BRITT", "loc" : [ -92.632062, 47.65496 ], "pop" : 1229, "state" : "MN" } +{ "_id" : "55711", "city" : "BROOKSTON", "loc" : [ -92.643005, 46.838425 ], "pop" : 621, "state" : "MN" } +{ "_id" : "55712", "city" : "BRUNO", "loc" : [ -92.618994, 46.284496 ], "pop" : 259, "state" : "MN" } +{ "_id" : "55717", "city" : "CANYON", "loc" : [ -92.459361, 47.078525 ], "pop" : 230, "state" : "MN" } +{ "_id" : "55718", "city" : "CARLTON", "loc" : [ -92.470984, 46.6484 ], "pop" : 3401, "state" : "MN" } +{ "_id" : "55719", "city" : "CHISHOLM", "loc" : [ -92.861693, 47.500744 ], "pop" : 7412, "state" : "MN" } +{ "_id" : "55720", "city" : "CLOQUET", "loc" : [ -92.45282, 46.726041 ], "pop" : 13503, "state" : "MN" } +{ "_id" : "55721", "city" : "COHASSET", "loc" : [ -93.639154, 47.269112 ], "pop" : 3694, "state" : "MN" } +{ "_id" : "55723", "city" : "COOK", "loc" : [ -92.72103799999999, 47.844193 ], "pop" : 2705, "state" : "MN" } +{ "_id" : "55724", "city" : "KELSEY", "loc" : [ -92.44492099999999, 47.163803 ], "pop" : 430, "state" : "MN" } +{ "_id" : "55725", "city" : "CRANE LAKE", "loc" : [ -92.48959600000001, 48.259387 ], "pop" : 74, "state" : "MN" } +{ "_id" : "55726", "city" : "CROMWELL", "loc" : [ -92.873942, 46.671784 ], "pop" : 1048, "state" : "MN" } +{ "_id" : "55727", "city" : "CULVER", "loc" : [ -92.552403, 46.911886 ], "pop" : 309, "state" : "MN" } +{ "_id" : "55731", "city" : "ELY", "loc" : [ -91.85704200000001, 47.903435 ], "pop" : 5685, "state" : "MN" } +{ "_id" : "55732", "city" : "EMBARRASS", "loc" : [ -92.21011, 47.665847 ], "pop" : 1143, "state" : "MN" } +{ "_id" : "55733", "city" : "ESKO", "loc" : [ -92.35691799999999, 46.712551 ], "pop" : 4102, "state" : "MN" } +{ "_id" : "55734", "city" : "EVELETH", "loc" : [ -92.528037, 47.451047 ], "pop" : 6135, "state" : "MN" } +{ "_id" : "55735", "city" : "FINLAYSON", "loc" : [ -92.938924, 46.212111 ], "pop" : 1264, "state" : "MN" } +{ "_id" : "55736", "city" : "FLOODWOOD", "loc" : [ -92.91668199999999, 46.907589 ], "pop" : 1475, "state" : "MN" } +{ "_id" : "55740", "city" : "GHEEN", "loc" : [ -92.906892, 47.946475 ], "pop" : 255, "state" : "MN" } +{ "_id" : "55741", "city" : "GILBERT", "loc" : [ -92.40246399999999, 47.488487 ], "pop" : 4721, "state" : "MN" } +{ "_id" : "55742", "city" : "GOODLAND", "loc" : [ -93.146914, 47.192426 ], "pop" : 437, "state" : "MN" } +{ "_id" : "55744", "city" : "LA PRAIRIE", "loc" : [ -93.527672, 47.223472 ], "pop" : 18067, "state" : "MN" } +{ "_id" : "55746", "city" : "HIBBING", "loc" : [ -92.935582, 47.4156 ], "pop" : 20816, "state" : "MN" } +{ "_id" : "55748", "city" : "HILL CITY", "loc" : [ -93.599397, 46.996817 ], "pop" : 762, "state" : "MN" } +{ "_id" : "55749", "city" : "HOLYOKE", "loc" : [ -92.374955, 46.466445 ], "pop" : 160, "state" : "MN" } +{ "_id" : "55750", "city" : "HOYT LAKES", "loc" : [ -92.140046, 47.514957 ], "pop" : 2348, "state" : "MN" } +{ "_id" : "55751", "city" : "IRON", "loc" : [ -92.619502, 47.411455 ], "pop" : 1210, "state" : "MN" } +{ "_id" : "55752", "city" : "JACOBSON", "loc" : [ -93.306359, 46.977187 ], "pop" : 387, "state" : "MN" } +{ "_id" : "55756", "city" : "KERRICK", "loc" : [ -92.578, 46.379151 ], "pop" : 487, "state" : "MN" } +{ "_id" : "55757", "city" : "KETTLE RIVER", "loc" : [ -92.904746, 46.502899 ], "pop" : 1136, "state" : "MN" } +{ "_id" : "55760", "city" : "MC GREGOR", "loc" : [ -93.29562, 46.686424 ], "pop" : 1897, "state" : "MN" } +{ "_id" : "55762", "city" : "MAHTOWA", "loc" : [ -92.606505, 46.582588 ], "pop" : 833, "state" : "MN" } +{ "_id" : "55763", "city" : "MAKINEN", "loc" : [ -92.344584, 47.341603 ], "pop" : 1028, "state" : "MN" } +{ "_id" : "55765", "city" : "MEADOWLANDS", "loc" : [ -92.788357, 47.102064 ], "pop" : 1172, "state" : "MN" } +{ "_id" : "55766", "city" : "MELRUDE", "loc" : [ -92.42644, 47.242318 ], "pop" : 121, "state" : "MN" } +{ "_id" : "55767", "city" : "MOOSE LAKE", "loc" : [ -92.74664799999999, 46.44724 ], "pop" : 2699, "state" : "MN" } +{ "_id" : "55768", "city" : "MOUNTAIN IRON", "loc" : [ -92.624274, 47.513336 ], "pop" : 1790, "state" : "MN" } +{ "_id" : "55769", "city" : "NASHWAUK", "loc" : [ -93.216818, 47.42003 ], "pop" : 4058, "state" : "MN" } +{ "_id" : "55771", "city" : "BUYCK", "loc" : [ -92.845555, 47.933881 ], "pop" : 1252, "state" : "MN" } +{ "_id" : "55773", "city" : "PARKVILLE", "loc" : [ -92.584051, 47.510296 ], "pop" : 1787, "state" : "MN" } +{ "_id" : "55775", "city" : "PENGILLY", "loc" : [ -93.193667, 47.315089 ], "pop" : 1173, "state" : "MN" } +{ "_id" : "55779", "city" : "SAGINAW", "loc" : [ -92.391723, 46.879462 ], "pop" : 3185, "state" : "MN" } +{ "_id" : "55780", "city" : "SAWYER", "loc" : [ -92.609612, 46.711799 ], "pop" : 833, "state" : "MN" } +{ "_id" : "55783", "city" : "STURGEON LAKE", "loc" : [ -92.818246, 46.383685 ], "pop" : 1883, "state" : "MN" } +{ "_id" : "55784", "city" : "SWAN RIVER", "loc" : [ -93.19643600000001, 47.07394 ], "pop" : 231, "state" : "MN" } +{ "_id" : "55785", "city" : "SWATARA", "loc" : [ -93.66848299999999, 46.929871 ], "pop" : 331, "state" : "MN" } +{ "_id" : "55787", "city" : "TAMARACK", "loc" : [ -93.13420000000001, 46.617873 ], "pop" : 559, "state" : "MN" } +{ "_id" : "55788", "city" : "TOGO", "loc" : [ -93.201545, 47.76843 ], "pop" : 632, "state" : "MN" } +{ "_id" : "55790", "city" : "TOWER", "loc" : [ -92.287781, 47.808926 ], "pop" : 2280, "state" : "MN" } +{ "_id" : "55792", "city" : "VIRGINIA", "loc" : [ -92.528525, 47.537078 ], "pop" : 11153, "state" : "MN" } +{ "_id" : "55793", "city" : "WARBA", "loc" : [ -93.276417, 47.13611 ], "pop" : 431, "state" : "MN" } +{ "_id" : "55795", "city" : "WILLOW RIVER", "loc" : [ -92.83093100000001, 46.294883 ], "pop" : 968, "state" : "MN" } +{ "_id" : "55797", "city" : "WRENSHALL", "loc" : [ -92.37177200000001, 46.592114 ], "pop" : 839, "state" : "MN" } +{ "_id" : "55798", "city" : "WRIGHT", "loc" : [ -93.002863, 46.675324 ], "pop" : 417, "state" : "MN" } +{ "_id" : "55799", "city" : "ZIM", "loc" : [ -92.629606, 47.317591 ], "pop" : 507, "state" : "MN" } +{ "_id" : "55801", "city" : "DULUTH", "loc" : [ -91.84673100000001, 47.094431 ], "pop" : 230, "state" : "MN" } +{ "_id" : "55802", "city" : "DULUTH", "loc" : [ -92.08649699999999, 46.768475 ], "pop" : 2639, "state" : "MN" } +{ "_id" : "55803", "city" : "DULUTH", "loc" : [ -92.09405700000001, 46.874913 ], "pop" : 14740, "state" : "MN" } +{ "_id" : "55804", "city" : "DULUTH", "loc" : [ -92.00743300000001, 46.855131 ], "pop" : 14207, "state" : "MN" } +{ "_id" : "55805", "city" : "DULUTH", "loc" : [ -92.094553, 46.798733 ], "pop" : 10849, "state" : "MN" } +{ "_id" : "55806", "city" : "DULUTH", "loc" : [ -92.127871, 46.771457 ], "pop" : 9723, "state" : "MN" } +{ "_id" : "55807", "city" : "DULUTH", "loc" : [ -92.169821, 46.740783 ], "pop" : 10257, "state" : "MN" } +{ "_id" : "55808", "city" : "DULUTH", "loc" : [ -92.22261, 46.681002 ], "pop" : 5903, "state" : "MN" } +{ "_id" : "55810", "city" : "PROCTOR", "loc" : [ -92.232332, 46.74459 ], "pop" : 6881, "state" : "MN" } +{ "_id" : "55811", "city" : "HERMANTOWN", "loc" : [ -92.16822500000001, 46.81341 ], "pop" : 23478, "state" : "MN" } +{ "_id" : "55812", "city" : "DULUTH", "loc" : [ -92.07669300000001, 46.810598 ], "pop" : 10296, "state" : "MN" } +{ "_id" : "55901", "city" : "ROCHESTER", "loc" : [ -92.48962, 44.049572 ], "pop" : 33744, "state" : "MN" } +{ "_id" : "55902", "city" : "ROCHESTER", "loc" : [ -92.483519, 44.003217 ], "pop" : 13594, "state" : "MN" } +{ "_id" : "55904", "city" : "ROCHESTER", "loc" : [ -92.39727600000001, 44.010545 ], "pop" : 7854, "state" : "MN" } +{ "_id" : "55906", "city" : "ROCHESTER", "loc" : [ -92.44687399999999, 44.021001 ], "pop" : 29174, "state" : "MN" } +{ "_id" : "55909", "city" : "ADAMS", "loc" : [ -92.73049399999999, 43.559119 ], "pop" : 1214, "state" : "MN" } +{ "_id" : "55910", "city" : "ALTURA", "loc" : [ -91.974474, 44.136114 ], "pop" : 2913, "state" : "MN" } +{ "_id" : "55912", "city" : "AUSTIN", "loc" : [ -92.978374, 43.669538 ], "pop" : 25655, "state" : "MN" } +{ "_id" : "55917", "city" : "BLOOMING PRAIRIE", "loc" : [ -93.06081, 43.897732 ], "pop" : 3922, "state" : "MN" } +{ "_id" : "55918", "city" : "BROWNSDALE", "loc" : [ -92.873752, 43.724761 ], "pop" : 1443, "state" : "MN" } +{ "_id" : "55919", "city" : "BROWNSVILLE", "loc" : [ -91.301226, 43.670732 ], "pop" : 995, "state" : "MN" } +{ "_id" : "55920", "city" : "BYRON", "loc" : [ -92.630753, 44.037333 ], "pop" : 7129, "state" : "MN" } +{ "_id" : "55921", "city" : "CALEDONIA", "loc" : [ -91.48365699999999, 43.622079 ], "pop" : 5049, "state" : "MN" } +{ "_id" : "55922", "city" : "CANTON", "loc" : [ -91.91295700000001, 43.566687 ], "pop" : 1390, "state" : "MN" } +{ "_id" : "55923", "city" : "CHATFIELD", "loc" : [ -92.15735100000001, 43.836201 ], "pop" : 3949, "state" : "MN" } +{ "_id" : "55924", "city" : "CLAREMONT", "loc" : [ -92.988839, 44.05223 ], "pop" : 979, "state" : "MN" } +{ "_id" : "55925", "city" : "DAKOTA", "loc" : [ -91.39404, 43.914806 ], "pop" : 725, "state" : "MN" } +{ "_id" : "55926", "city" : "DEXTER", "loc" : [ -92.726764, 43.715962 ], "pop" : 588, "state" : "MN" } +{ "_id" : "55927", "city" : "DODGE CENTER", "loc" : [ -92.85537600000001, 44.032514 ], "pop" : 3319, "state" : "MN" } +{ "_id" : "55929", "city" : "DOVER", "loc" : [ -92.14151099999999, 44.001457 ], "pop" : 1265, "state" : "MN" } +{ "_id" : "55932", "city" : "ELGIN", "loc" : [ -92.25349300000001, 44.135837 ], "pop" : 1494, "state" : "MN" } +{ "_id" : "55933", "city" : "ELKTON", "loc" : [ -92.710407, 43.634806 ], "pop" : 721, "state" : "MN" } +{ "_id" : "55934", "city" : "VIOLA", "loc" : [ -92.244068, 44.004294 ], "pop" : 2579, "state" : "MN" } +{ "_id" : "55935", "city" : "FOUNTAIN", "loc" : [ -92.14228799999999, 43.728404 ], "pop" : 662, "state" : "MN" } +{ "_id" : "55936", "city" : "GRAND MEADOW", "loc" : [ -92.569203, 43.710065 ], "pop" : 1653, "state" : "MN" } +{ "_id" : "55937", "city" : "GRANGER", "loc" : [ -92.156115, 43.544873 ], "pop" : 385, "state" : "MN" } +{ "_id" : "55939", "city" : "HARMONY", "loc" : [ -92.014511, 43.566268 ], "pop" : 1853, "state" : "MN" } +{ "_id" : "55940", "city" : "HAYFIELD", "loc" : [ -92.81748899999999, 43.892259 ], "pop" : 2254, "state" : "MN" } +{ "_id" : "55941", "city" : "HOKAH", "loc" : [ -91.345472, 43.750856 ], "pop" : 1289, "state" : "MN" } +{ "_id" : "55943", "city" : "HOUSTON", "loc" : [ -91.56256500000001, 43.792904 ], "pop" : 3337, "state" : "MN" } +{ "_id" : "55944", "city" : "KASSON", "loc" : [ -92.74642, 44.024029 ], "pop" : 4420, "state" : "MN" } +{ "_id" : "55945", "city" : "THEILMAN", "loc" : [ -92.00839000000001, 44.305396 ], "pop" : 738, "state" : "MN" } +{ "_id" : "55946", "city" : "KENYON", "loc" : [ -93.019661, 44.255237 ], "pop" : 3437, "state" : "MN" } +{ "_id" : "55947", "city" : "LA CRESCENT", "loc" : [ -91.326325, 43.830686 ], "pop" : 6700, "state" : "MN" } +{ "_id" : "55949", "city" : "LANESBORO", "loc" : [ -91.987719, 43.717447 ], "pop" : 1191, "state" : "MN" } +{ "_id" : "55951", "city" : "LE ROY", "loc" : [ -92.50646399999999, 43.531533 ], "pop" : 1478, "state" : "MN" } +{ "_id" : "55952", "city" : "LEWISTON", "loc" : [ -91.866162, 43.970193 ], "pop" : 2038, "state" : "MN" } +{ "_id" : "55953", "city" : "LYLE", "loc" : [ -92.932818, 43.530868 ], "pop" : 1314, "state" : "MN" } +{ "_id" : "55954", "city" : "MABEL", "loc" : [ -91.780636, 43.544611 ], "pop" : 1470, "state" : "MN" } +{ "_id" : "55955", "city" : "MANTORVILLE", "loc" : [ -92.75796200000001, 44.070195 ], "pop" : 1324, "state" : "MN" } +{ "_id" : "55956", "city" : "MAZEPPA", "loc" : [ -92.52068300000001, 44.264568 ], "pop" : 1560, "state" : "MN" } +{ "_id" : "55957", "city" : "MILLVILLE", "loc" : [ -92.267188, 44.235862 ], "pop" : 579, "state" : "MN" } +{ "_id" : "55959", "city" : "MINNESOTA CITY", "loc" : [ -91.74180800000001, 44.083222 ], "pop" : 1185, "state" : "MN" } +{ "_id" : "55960", "city" : "ORONOCO", "loc" : [ -92.48496, 44.148861 ], "pop" : 3319, "state" : "MN" } +{ "_id" : "55961", "city" : "OSTRANDER", "loc" : [ -92.415744, 43.597188 ], "pop" : 654, "state" : "MN" } +{ "_id" : "55962", "city" : "PETERSON", "loc" : [ -91.84433799999999, 43.77691 ], "pop" : 901, "state" : "MN" } +{ "_id" : "55963", "city" : "PINE ISLAND", "loc" : [ -92.66134700000001, 44.211009 ], "pop" : 3832, "state" : "MN" } +{ "_id" : "55964", "city" : "PLAINVIEW", "loc" : [ -92.162125, 44.16373 ], "pop" : 3303, "state" : "MN" } +{ "_id" : "55965", "city" : "PRESTON", "loc" : [ -92.096039, 43.664132 ], "pop" : 1866, "state" : "MN" } +{ "_id" : "55967", "city" : "RACINE", "loc" : [ -92.531013, 43.78997 ], "pop" : 1107, "state" : "MN" } +{ "_id" : "55969", "city" : "ROLLINGSTONE", "loc" : [ -91.81579499999999, 44.102501 ], "pop" : 1085, "state" : "MN" } +{ "_id" : "55970", "city" : "ROSE CREEK", "loc" : [ -92.862082, 43.627423 ], "pop" : 952, "state" : "MN" } +{ "_id" : "55971", "city" : "RUSHFORD", "loc" : [ -91.75364999999999, 43.821626 ], "pop" : 2809, "state" : "MN" } +{ "_id" : "55972", "city" : "SAINT CHARLES", "loc" : [ -92.051738, 43.958481 ], "pop" : 3704, "state" : "MN" } +{ "_id" : "55973", "city" : "SARGEANT", "loc" : [ -92.759517, 43.808976 ], "pop" : 349, "state" : "MN" } +{ "_id" : "55974", "city" : "SPRING GROVE", "loc" : [ -91.636788, 43.562339 ], "pop" : 2333, "state" : "MN" } +{ "_id" : "55975", "city" : "SPRING VALLEY", "loc" : [ -92.367985, 43.682288 ], "pop" : 4506, "state" : "MN" } +{ "_id" : "55976", "city" : "STEWARTVILLE", "loc" : [ -92.454654, 43.867345 ], "pop" : 6847, "state" : "MN" } +{ "_id" : "55977", "city" : "TAOPI", "loc" : [ -92.633455, 43.545783 ], "pop" : 350, "state" : "MN" } +{ "_id" : "55978", "city" : "THEILMAN", "loc" : [ -92.211579, 44.30278 ], "pop" : 402, "state" : "MN" } +{ "_id" : "55979", "city" : "UTICA", "loc" : [ -91.941737, 43.958727 ], "pop" : 599, "state" : "MN" } +{ "_id" : "55981", "city" : "WABASHA", "loc" : [ -92.036058, 44.370273 ], "pop" : 3743, "state" : "MN" } +{ "_id" : "55982", "city" : "WALTHAM", "loc" : [ -92.873446, 43.806958 ], "pop" : 561, "state" : "MN" } +{ "_id" : "55983", "city" : "WANAMINGO", "loc" : [ -92.810258, 44.31214 ], "pop" : 1319, "state" : "MN" } +{ "_id" : "55985", "city" : "WEST CONCORD", "loc" : [ -92.88249500000001, 44.151954 ], "pop" : 2040, "state" : "MN" } +{ "_id" : "55986", "city" : "WHALAN", "loc" : [ -91.918863, 43.716528 ], "pop" : 269, "state" : "MN" } +{ "_id" : "55987", "city" : "GOODVIEW", "loc" : [ -91.65334799999999, 44.039132 ], "pop" : 34518, "state" : "MN" } +{ "_id" : "55990", "city" : "WYKOFF", "loc" : [ -92.267921, 43.71464 ], "pop" : 954, "state" : "MN" } +{ "_id" : "55991", "city" : "HAMMOND", "loc" : [ -92.40396699999999, 44.248812 ], "pop" : 1720, "state" : "MN" } +{ "_id" : "55992", "city" : "ZUMBROTA", "loc" : [ -92.671863, 44.303179 ], "pop" : 3535, "state" : "MN" } +{ "_id" : "56001", "city" : "MANKATO", "loc" : [ -93.996044, 44.153809 ], "pop" : 38417, "state" : "MN" } +{ "_id" : "56003", "city" : "NORTH MANKATO", "loc" : [ -94.031476, 44.177541 ], "pop" : 11629, "state" : "MN" } +{ "_id" : "56007", "city" : "ALBERT LEA", "loc" : [ -93.370672, 43.653678 ], "pop" : 21186, "state" : "MN" } +{ "_id" : "56009", "city" : "ALDEN", "loc" : [ -93.582307, 43.646586 ], "pop" : 1660, "state" : "MN" } +{ "_id" : "56010", "city" : "AMBOY", "loc" : [ -94.177353, 43.890326 ], "pop" : 1449, "state" : "MN" } +{ "_id" : "56011", "city" : "BELLE PLAINE", "loc" : [ -93.76039400000001, 44.613852 ], "pop" : 4623, "state" : "MN" } +{ "_id" : "56013", "city" : "BLUE EARTH", "loc" : [ -94.09237899999999, 43.639426 ], "pop" : 5090, "state" : "MN" } +{ "_id" : "56014", "city" : "BRICELYN", "loc" : [ -93.82108100000001, 43.574628 ], "pop" : 912, "state" : "MN" } +{ "_id" : "56016", "city" : "CLARKS GROVE", "loc" : [ -93.323222, 43.762971 ], "pop" : 956, "state" : "MN" } +{ "_id" : "56017", "city" : "CLEVELAND", "loc" : [ -93.828622, 44.32014 ], "pop" : 1258, "state" : "MN" } +{ "_id" : "56019", "city" : "COMFREY", "loc" : [ -94.91345, 44.111069 ], "pop" : 981, "state" : "MN" } +{ "_id" : "56020", "city" : "CONGER", "loc" : [ -93.522358, 43.611417 ], "pop" : 277, "state" : "MN" } +{ "_id" : "56021", "city" : "COURTLAND", "loc" : [ -94.348229, 44.279083 ], "pop" : 1122, "state" : "MN" } +{ "_id" : "56022", "city" : "DARFUR", "loc" : [ -94.813416, 44.061034 ], "pop" : 331, "state" : "MN" } +{ "_id" : "56023", "city" : "DELAVAN", "loc" : [ -94.022488, 43.771859 ], "pop" : 310, "state" : "MN" } +{ "_id" : "56024", "city" : "EAGLE LAKE", "loc" : [ -93.87191199999999, 44.154587 ], "pop" : 2218, "state" : "MN" } +{ "_id" : "56025", "city" : "EASTON", "loc" : [ -93.933994, 43.758126 ], "pop" : 793, "state" : "MN" } +{ "_id" : "56026", "city" : "ELLENDALE", "loc" : [ -93.319492, 43.882591 ], "pop" : 1051, "state" : "MN" } +{ "_id" : "56027", "city" : "ELMORE", "loc" : [ -94.09836799999999, 43.520065 ], "pop" : 1125, "state" : "MN" } +{ "_id" : "56028", "city" : "ELYSIAN", "loc" : [ -93.69649800000001, 44.22313 ], "pop" : 1303, "state" : "MN" } +{ "_id" : "56029", "city" : "EMMONS", "loc" : [ -93.48244099999999, 43.508851 ], "pop" : 599, "state" : "MN" } +{ "_id" : "56030", "city" : "ESSIG", "loc" : [ -94.56823, 44.323754 ], "pop" : 522, "state" : "MN" } +{ "_id" : "56031", "city" : "FAIRMONT", "loc" : [ -94.45095000000001, 43.637592 ], "pop" : 12732, "state" : "MN" } +{ "_id" : "56032", "city" : "FREEBORN", "loc" : [ -93.57454300000001, 43.784763 ], "pop" : 632, "state" : "MN" } +{ "_id" : "56033", "city" : "FROST", "loc" : [ -93.936099, 43.563796 ], "pop" : 388, "state" : "MN" } +{ "_id" : "56034", "city" : "GARDEN CITY", "loc" : [ -94.179084, 44.046748 ], "pop" : 460, "state" : "MN" } +{ "_id" : "56035", "city" : "GENEVA", "loc" : [ -93.267096, 43.82354 ], "pop" : 524, "state" : "MN" } +{ "_id" : "56036", "city" : "GLENVILLE", "loc" : [ -93.26176100000001, 43.557749 ], "pop" : 1254, "state" : "MN" } +{ "_id" : "56037", "city" : "GOOD THUNDER", "loc" : [ -94.067662, 43.995187 ], "pop" : 941, "state" : "MN" } +{ "_id" : "56039", "city" : "GRANADA", "loc" : [ -94.330731, 43.706082 ], "pop" : 681, "state" : "MN" } +{ "_id" : "56041", "city" : "HANSKA", "loc" : [ -94.493267, 44.152678 ], "pop" : 1184, "state" : "MN" } +{ "_id" : "56042", "city" : "HARTLAND", "loc" : [ -93.47695299999999, 43.803989 ], "pop" : 612, "state" : "MN" } +{ "_id" : "56043", "city" : "HAYWARD", "loc" : [ -93.23772700000001, 43.63864 ], "pop" : 705, "state" : "MN" } +{ "_id" : "56044", "city" : "HENDERSON", "loc" : [ -93.934487, 44.534398 ], "pop" : 1785, "state" : "MN" } +{ "_id" : "56045", "city" : "HOLLANDALE", "loc" : [ -93.16798900000001, 43.752842 ], "pop" : 2346, "state" : "MN" } +{ "_id" : "56046", "city" : "HOPE", "loc" : [ -93.345823, 43.979723 ], "pop" : 520, "state" : "MN" } +{ "_id" : "56047", "city" : "HUNTLEY", "loc" : [ -94.201567, 43.723746 ], "pop" : 469, "state" : "MN" } +{ "_id" : "56048", "city" : "JANESVILLE", "loc" : [ -93.709462, 44.116778 ], "pop" : 2996, "state" : "MN" } +{ "_id" : "56050", "city" : "KASOTA", "loc" : [ -93.945319, 44.284188 ], "pop" : 1958, "state" : "MN" } +{ "_id" : "56051", "city" : "KIESTER", "loc" : [ -93.71019099999999, 43.541445 ], "pop" : 923, "state" : "MN" } +{ "_id" : "56052", "city" : "KILKENNY", "loc" : [ -93.516397, 44.318532 ], "pop" : 1249, "state" : "MN" } +{ "_id" : "56054", "city" : "LAFAYETTE", "loc" : [ -94.436463, 44.407315 ], "pop" : 2268, "state" : "MN" } +{ "_id" : "56055", "city" : "LAKE CRYSTAL", "loc" : [ -94.218385, 44.120189 ], "pop" : 3350, "state" : "MN" } +{ "_id" : "56057", "city" : "LE CENTER", "loc" : [ -93.721428, 44.385348 ], "pop" : 3284, "state" : "MN" } +{ "_id" : "56058", "city" : "LE SUEUR", "loc" : [ -93.885588, 44.458154 ], "pop" : 5491, "state" : "MN" } +{ "_id" : "56060", "city" : "LEWISVILLE", "loc" : [ -94.428854, 43.920922 ], "pop" : 568, "state" : "MN" } +{ "_id" : "56061", "city" : "LONDON", "loc" : [ -93.116527, 43.543455 ], "pop" : 437, "state" : "MN" } +{ "_id" : "56062", "city" : "MADELIA", "loc" : [ -94.410994, 44.049949 ], "pop" : 3012, "state" : "MN" } +{ "_id" : "56063", "city" : "MADISON LAKE", "loc" : [ -93.82889299999999, 44.222074 ], "pop" : 2135, "state" : "MN" } +{ "_id" : "56064", "city" : "MANCHESTER", "loc" : [ -93.46065400000001, 43.716762 ], "pop" : 552, "state" : "MN" } +{ "_id" : "56065", "city" : "MAPLETON", "loc" : [ -93.954247, 43.933065 ], "pop" : 2299, "state" : "MN" } +{ "_id" : "56067", "city" : "MERIDEN", "loc" : [ -93.351167, 44.069875 ], "pop" : 693, "state" : "MN" } +{ "_id" : "56068", "city" : "MINNESOTA LAKE", "loc" : [ -93.82820100000001, 43.829465 ], "pop" : 944, "state" : "MN" } +{ "_id" : "56069", "city" : "MONTGOMERY", "loc" : [ -93.581024, 44.435591 ], "pop" : 3026, "state" : "MN" } +{ "_id" : "56071", "city" : "NEW PRAGUE", "loc" : [ -93.580473, 44.540239 ], "pop" : 6601, "state" : "MN" } +{ "_id" : "56072", "city" : "NEW RICHLAND", "loc" : [ -93.49954099999999, 43.893724 ], "pop" : 1964, "state" : "MN" } +{ "_id" : "56073", "city" : "NEW ULM", "loc" : [ -94.464421, 44.304378 ], "pop" : 15142, "state" : "MN" } +{ "_id" : "56074", "city" : "NICOLLET", "loc" : [ -94.186701, 44.272373 ], "pop" : 1654, "state" : "MN" } +{ "_id" : "56075", "city" : "NORTHROP", "loc" : [ -94.43495, 43.721164 ], "pop" : 724, "state" : "MN" } +{ "_id" : "56076", "city" : "OAKLAND", "loc" : [ -93.11132499999999, 43.632981 ], "pop" : 394, "state" : "MN" } +{ "_id" : "56077", "city" : "OTISCO", "loc" : [ -93.474097, 43.981513 ], "pop" : 623, "state" : "MN" } +{ "_id" : "56078", "city" : "PEMBERTON", "loc" : [ -93.818449, 43.959955 ], "pop" : 880, "state" : "MN" } +{ "_id" : "56080", "city" : "SAINT CLAIR", "loc" : [ -93.844932, 44.077775 ], "pop" : 1083, "state" : "MN" } +{ "_id" : "56081", "city" : "SAINT JAMES", "loc" : [ -94.622935, 43.987519 ], "pop" : 6472, "state" : "MN" } +{ "_id" : "56082", "city" : "SAINT PETER", "loc" : [ -93.981061, 44.335107 ], "pop" : 11277, "state" : "MN" } +{ "_id" : "56083", "city" : "SANBORN", "loc" : [ -95.13279300000001, 44.218291 ], "pop" : 1030, "state" : "MN" } +{ "_id" : "56085", "city" : "SLEEPY EYE", "loc" : [ -94.727251, 44.282089 ], "pop" : 6092, "state" : "MN" } +{ "_id" : "56087", "city" : "SPRINGFIELD", "loc" : [ -94.979204, 44.232905 ], "pop" : 2915, "state" : "MN" } +{ "_id" : "56088", "city" : "TRUMAN", "loc" : [ -94.431862, 43.820008 ], "pop" : 2319, "state" : "MN" } +{ "_id" : "56089", "city" : "TWIN LAKES", "loc" : [ -93.388667, 43.553951 ], "pop" : 926, "state" : "MN" } +{ "_id" : "56090", "city" : "VERNON CENTER", "loc" : [ -94.214212, 43.970557 ], "pop" : 942, "state" : "MN" } +{ "_id" : "56091", "city" : "WALDORF", "loc" : [ -93.70426399999999, 43.939868 ], "pop" : 962, "state" : "MN" } +{ "_id" : "56092", "city" : "WALTERS", "loc" : [ -93.70102, 43.623868 ], "pop" : 400, "state" : "MN" } +{ "_id" : "56093", "city" : "WASECA", "loc" : [ -93.510828, 44.0834 ], "pop" : 11534, "state" : "MN" } +{ "_id" : "56096", "city" : "WATERVILLE", "loc" : [ -93.575063, 44.223796 ], "pop" : 2390, "state" : "MN" } +{ "_id" : "56097", "city" : "WELLS", "loc" : [ -93.732069, 43.743396 ], "pop" : 3585, "state" : "MN" } +{ "_id" : "56098", "city" : "WINNEBAGO", "loc" : [ -94.16324, 43.77549 ], "pop" : 1998, "state" : "MN" } +{ "_id" : "56101", "city" : "WILDER", "loc" : [ -95.15153100000001, 43.879022 ], "pop" : 6224, "state" : "MN" } +{ "_id" : "56110", "city" : "ADRIAN", "loc" : [ -95.927261, 43.619683 ], "pop" : 1899, "state" : "MN" } +{ "_id" : "56111", "city" : "ALPHA", "loc" : [ -94.90508800000001, 43.594594 ], "pop" : 674, "state" : "MN" } +{ "_id" : "56112", "city" : "AMIRET", "loc" : [ -95.71904600000001, 44.325134 ], "pop" : 556, "state" : "MN" } +{ "_id" : "56113", "city" : "ARCO", "loc" : [ -96.199913, 44.409147 ], "pop" : 515, "state" : "MN" } +{ "_id" : "56114", "city" : "AVOCA", "loc" : [ -95.60015199999999, 43.970553 ], "pop" : 572, "state" : "MN" } +{ "_id" : "56115", "city" : "BALATON", "loc" : [ -95.88377, 44.225253 ], "pop" : 1305, "state" : "MN" } +{ "_id" : "56116", "city" : "BEAVER CREEK", "loc" : [ -96.369771, 43.622343 ], "pop" : 694, "state" : "MN" } +{ "_id" : "56117", "city" : "BIGELOW", "loc" : [ -95.651527, 43.533612 ], "pop" : 633, "state" : "MN" } +{ "_id" : "56118", "city" : "BINGHAM LAKE", "loc" : [ -95.04571, 43.894155 ], "pop" : 432, "state" : "MN" } +{ "_id" : "56119", "city" : "BREWSTER", "loc" : [ -95.480676, 43.703223 ], "pop" : 800, "state" : "MN" } +{ "_id" : "56120", "city" : "BUTTERFIELD", "loc" : [ -94.795627, 43.965417 ], "pop" : 894, "state" : "MN" } +{ "_id" : "56121", "city" : "CEYLON", "loc" : [ -94.614908, 43.538243 ], "pop" : 1051, "state" : "MN" } +{ "_id" : "56122", "city" : "CHANDLER", "loc" : [ -95.929616, 43.916308 ], "pop" : 808, "state" : "MN" } +{ "_id" : "56123", "city" : "CURRIE", "loc" : [ -95.695323, 44.094616 ], "pop" : 1254, "state" : "MN" } +{ "_id" : "56124", "city" : "DELFT", "loc" : [ -95.047234, 43.978502 ], "pop" : 363, "state" : "MN" } +{ "_id" : "56125", "city" : "DOVRAY", "loc" : [ -95.52708199999999, 44.05967 ], "pop" : 277, "state" : "MN" } +{ "_id" : "56126", "city" : "DUNDEE", "loc" : [ -95.499286, 43.819052 ], "pop" : 414, "state" : "MN" } +{ "_id" : "56127", "city" : "DUNNELL", "loc" : [ -94.787558, 43.553052 ], "pop" : 452, "state" : "MN" } +{ "_id" : "56128", "city" : "EDGERTON", "loc" : [ -96.146333, 43.882419 ], "pop" : 2045, "state" : "MN" } +{ "_id" : "56129", "city" : "ELLSWORTH", "loc" : [ -96.01124799999999, 43.526539 ], "pop" : 852, "state" : "MN" } +{ "_id" : "56131", "city" : "FULDA", "loc" : [ -95.597937, 43.875298 ], "pop" : 1792, "state" : "MN" } +{ "_id" : "56132", "city" : "GARVIN", "loc" : [ -95.76721499999999, 44.229318 ], "pop" : 471, "state" : "MN" } +{ "_id" : "56133", "city" : "HADLEY", "loc" : [ -95.86902499999999, 44.03105 ], "pop" : 429, "state" : "MN" } +{ "_id" : "56134", "city" : "HARDWICK", "loc" : [ -96.21607, 43.791072 ], "pop" : 461, "state" : "MN" } +{ "_id" : "56136", "city" : "HENDRICKS", "loc" : [ -96.407753, 44.499514 ], "pop" : 1305, "state" : "MN" } +{ "_id" : "56137", "city" : "HERON LAKE", "loc" : [ -95.326736, 43.79788 ], "pop" : 1190, "state" : "MN" } +{ "_id" : "56138", "city" : "HILLS", "loc" : [ -96.364527, 43.533548 ], "pop" : 1072, "state" : "MN" } +{ "_id" : "56139", "city" : "HOLLAND", "loc" : [ -96.19027699999999, 44.075904 ], "pop" : 682, "state" : "MN" } +{ "_id" : "56141", "city" : "IONA", "loc" : [ -95.77176900000001, 43.902631 ], "pop" : 434, "state" : "MN" } +{ "_id" : "56142", "city" : "IVANHOE", "loc" : [ -96.22605900000001, 44.507119 ], "pop" : 1683, "state" : "MN" } +{ "_id" : "56143", "city" : "JACKSON", "loc" : [ -94.993827, 43.645732 ], "pop" : 5119, "state" : "MN" } +{ "_id" : "56144", "city" : "JASPER", "loc" : [ -96.385035, 43.856827 ], "pop" : 1220, "state" : "MN" } +{ "_id" : "56145", "city" : "JEFFERS", "loc" : [ -95.154664, 44.073678 ], "pop" : 1000, "state" : "MN" } +{ "_id" : "56146", "city" : "KANARANZI", "loc" : [ -96.111306, 43.54979 ], "pop" : 320, "state" : "MN" } +{ "_id" : "56147", "city" : "KENNETH", "loc" : [ -96.10886000000001, 43.763738 ], "pop" : 523, "state" : "MN" } +{ "_id" : "56149", "city" : "LAKE BENTON", "loc" : [ -96.29103499999999, 44.278211 ], "pop" : 1323, "state" : "MN" } +{ "_id" : "56150", "city" : "LAKEFIELD", "loc" : [ -95.184834, 43.654456 ], "pop" : 3233, "state" : "MN" } +{ "_id" : "56151", "city" : "LAKE WILSON", "loc" : [ -95.97973, 44.009529 ], "pop" : 749, "state" : "MN" } +{ "_id" : "56152", "city" : "LAMBERTON", "loc" : [ -95.273946, 44.237776 ], "pop" : 1736, "state" : "MN" } +{ "_id" : "56153", "city" : "LEOTA", "loc" : [ -96.005392, 43.822628 ], "pop" : 504, "state" : "MN" } +{ "_id" : "56155", "city" : "LISMORE", "loc" : [ -95.96817799999999, 43.733857 ], "pop" : 494, "state" : "MN" } +{ "_id" : "56156", "city" : "LUVERNE", "loc" : [ -96.22156200000001, 43.661366 ], "pop" : 5436, "state" : "MN" } +{ "_id" : "56157", "city" : "LYND", "loc" : [ -95.923284, 44.40322 ], "pop" : 1005, "state" : "MN" } +{ "_id" : "56158", "city" : "MAGNOLIA", "loc" : [ -96.100825, 43.638211 ], "pop" : 458, "state" : "MN" } +{ "_id" : "56159", "city" : "MOUNTAIN LAKE", "loc" : [ -94.927313, 43.938998 ], "pop" : 2506, "state" : "MN" } +{ "_id" : "56160", "city" : "ODIN", "loc" : [ -94.77401999999999, 43.882402 ], "pop" : 382, "state" : "MN" } +{ "_id" : "56161", "city" : "OKABENA", "loc" : [ -95.338112, 43.72302 ], "pop" : 606, "state" : "MN" } +{ "_id" : "56162", "city" : "ORMSBY", "loc" : [ -94.68725499999999, 43.861639 ], "pop" : 221, "state" : "MN" } +{ "_id" : "56164", "city" : "HATFIELD", "loc" : [ -96.322762, 44.009516 ], "pop" : 5923, "state" : "MN" } +{ "_id" : "56165", "city" : "READING", "loc" : [ -95.738945, 43.713604 ], "pop" : 400, "state" : "MN" } +{ "_id" : "56166", "city" : "REVERE", "loc" : [ -95.39958799999999, 44.271326 ], "pop" : 459, "state" : "MN" } +{ "_id" : "56167", "city" : "ROUND LAKE", "loc" : [ -95.45015100000001, 43.562045 ], "pop" : 1236, "state" : "MN" } +{ "_id" : "56168", "city" : "RUSHMORE", "loc" : [ -95.77672800000001, 43.624011 ], "pop" : 726, "state" : "MN" } +{ "_id" : "56169", "city" : "RUSSELL", "loc" : [ -95.942564, 44.320129 ], "pop" : 781, "state" : "MN" } +{ "_id" : "56170", "city" : "FLORENCE", "loc" : [ -96.07902799999999, 44.163836 ], "pop" : 737, "state" : "MN" } +{ "_id" : "56171", "city" : "SHERBURN", "loc" : [ -94.726877, 43.661089 ], "pop" : 2275, "state" : "MN" } +{ "_id" : "56172", "city" : "SLAYTON", "loc" : [ -95.755448, 43.985596 ], "pop" : 2535, "state" : "MN" } +{ "_id" : "56173", "city" : "STEEN", "loc" : [ -96.24386800000001, 43.531728 ], "pop" : 526, "state" : "MN" } +{ "_id" : "56174", "city" : "STORDEN", "loc" : [ -95.30192599999999, 44.052383 ], "pop" : 537, "state" : "MN" } +{ "_id" : "56175", "city" : "TRACY", "loc" : [ -95.621301, 44.234201 ], "pop" : 2390, "state" : "MN" } +{ "_id" : "56176", "city" : "TRIMONT", "loc" : [ -94.71863, 43.782702 ], "pop" : 1349, "state" : "MN" } +{ "_id" : "56178", "city" : "TYLER", "loc" : [ -96.130235, 44.277342 ], "pop" : 1940, "state" : "MN" } +{ "_id" : "56179", "city" : "VERDI", "loc" : [ -96.372429, 44.234078 ], "pop" : 234, "state" : "MN" } +{ "_id" : "56180", "city" : "WALNUT GROVE", "loc" : [ -95.49645099999999, 44.229375 ], "pop" : 1277, "state" : "MN" } +{ "_id" : "56181", "city" : "WELCOME", "loc" : [ -94.588593, 43.67052 ], "pop" : 1435, "state" : "MN" } +{ "_id" : "56183", "city" : "WESTBROOK", "loc" : [ -95.423208, 44.065381 ], "pop" : 1362, "state" : "MN" } +{ "_id" : "56185", "city" : "WILMONT", "loc" : [ -95.832421, 43.7692 ], "pop" : 1101, "state" : "MN" } +{ "_id" : "56186", "city" : "WOODSTOCK", "loc" : [ -96.119198, 43.987338 ], "pop" : 451, "state" : "MN" } +{ "_id" : "56187", "city" : "WORTHINGTON", "loc" : [ -95.605907, 43.628626 ], "pop" : 11556, "state" : "MN" } +{ "_id" : "56201", "city" : "WILLMAR", "loc" : [ -95.05231499999999, 45.139264 ], "pop" : 22069, "state" : "MN" } +{ "_id" : "56207", "city" : "ALBERTA", "loc" : [ -96.049772, 45.557086 ], "pop" : 296, "state" : "MN" } +{ "_id" : "56208", "city" : "APPLETON", "loc" : [ -95.994872, 45.20543 ], "pop" : 2294, "state" : "MN" } +{ "_id" : "56209", "city" : "ATWATER", "loc" : [ -94.793779, 45.111645 ], "pop" : 1841, "state" : "MN" } +{ "_id" : "56210", "city" : "BARRY", "loc" : [ -96.56052699999999, 45.547446 ], "pop" : 135, "state" : "MN" } +{ "_id" : "56211", "city" : "BEARDSLEY", "loc" : [ -96.706013, 45.553855 ], "pop" : 494, "state" : "MN" } +{ "_id" : "56212", "city" : "BELLINGHAM", "loc" : [ -96.32235, 45.155626 ], "pop" : 715, "state" : "MN" } +{ "_id" : "56214", "city" : "BELVIEW", "loc" : [ -95.317757, 44.605486 ], "pop" : 750, "state" : "MN" } +{ "_id" : "56215", "city" : "BENSON", "loc" : [ -95.576644, 45.312904 ], "pop" : 5107, "state" : "MN" } +{ "_id" : "56216", "city" : "SVEA", "loc" : [ -95.06395500000001, 44.939512 ], "pop" : 668, "state" : "MN" } +{ "_id" : "56218", "city" : "BOYD", "loc" : [ -95.94210200000001, 44.850725 ], "pop" : 668, "state" : "MN" } +{ "_id" : "56219", "city" : "BROWNS VALLEY", "loc" : [ -96.80625000000001, 45.606934 ], "pop" : 1128, "state" : "MN" } +{ "_id" : "56220", "city" : "CANBY", "loc" : [ -96.27839400000001, 44.720187 ], "pop" : 3043, "state" : "MN" } +{ "_id" : "56221", "city" : "CHOKIO", "loc" : [ -96.17331, 45.552369 ], "pop" : 785, "state" : "MN" } +{ "_id" : "56222", "city" : "CLARA CITY", "loc" : [ -95.349902, 44.963912 ], "pop" : 1879, "state" : "MN" } +{ "_id" : "56223", "city" : "CLARKFIELD", "loc" : [ -95.830405, 44.774261 ], "pop" : 1623, "state" : "MN" } +{ "_id" : "56224", "city" : "CLEMENTS", "loc" : [ -95.04744700000001, 44.39432 ], "pop" : 398, "state" : "MN" } +{ "_id" : "56225", "city" : "CLINTON", "loc" : [ -96.418161, 45.457659 ], "pop" : 843, "state" : "MN" } +{ "_id" : "56226", "city" : "CLONTARF", "loc" : [ -95.678629, 45.373418 ], "pop" : 279, "state" : "MN" } +{ "_id" : "56227", "city" : "CORRELL", "loc" : [ -96.17526599999999, 45.290742 ], "pop" : 397, "state" : "MN" } +{ "_id" : "56228", "city" : "COSMOS", "loc" : [ -94.697827, 44.958969 ], "pop" : 1217, "state" : "MN" } +{ "_id" : "56229", "city" : "COTTONWOOD", "loc" : [ -95.692508, 44.600251 ], "pop" : 1552, "state" : "MN" } +{ "_id" : "56230", "city" : "DANUBE", "loc" : [ -95.078366, 44.795567 ], "pop" : 1179, "state" : "MN" } +{ "_id" : "56231", "city" : "DANVERS", "loc" : [ -95.886194, 45.341853 ], "pop" : 710, "state" : "MN" } +{ "_id" : "56232", "city" : "DAWSON", "loc" : [ -96.01501399999999, 44.931737 ], "pop" : 2496, "state" : "MN" } +{ "_id" : "56233", "city" : "DE GRAFF", "loc" : [ -95.44658800000001, 45.270845 ], "pop" : 336, "state" : "MN" } +{ "_id" : "56235", "city" : "DONNELLY", "loc" : [ -96.064937, 45.70137 ], "pop" : 526, "state" : "MN" } +{ "_id" : "56236", "city" : "DUMONT", "loc" : [ -96.40612299999999, 45.671742 ], "pop" : 727, "state" : "MN" } +{ "_id" : "56237", "city" : "ECHO", "loc" : [ -95.418223, 44.631046 ], "pop" : 797, "state" : "MN" } +{ "_id" : "56238", "city" : "EVAN", "loc" : [ -94.816956, 44.351114 ], "pop" : 222, "state" : "MN" } +{ "_id" : "56239", "city" : "GHENT", "loc" : [ -95.893642, 44.507843 ], "pop" : 661, "state" : "MN" } +{ "_id" : "56240", "city" : "GRACEVILLE", "loc" : [ -96.420925, 45.560248 ], "pop" : 1019, "state" : "MN" } +{ "_id" : "56241", "city" : "GRANITE FALLS", "loc" : [ -95.551557, 44.808749 ], "pop" : 4051, "state" : "MN" } +{ "_id" : "56243", "city" : "GROVE CITY", "loc" : [ -94.687843, 45.153172 ], "pop" : 1428, "state" : "MN" } +{ "_id" : "56244", "city" : "HANCOCK", "loc" : [ -95.800775, 45.498464 ], "pop" : 1255, "state" : "MN" } +{ "_id" : "56245", "city" : "HANLEY FALLS", "loc" : [ -95.682492, 44.678862 ], "pop" : 652, "state" : "MN" } +{ "_id" : "56246", "city" : "HAWICK", "loc" : [ -94.820762, 45.361775 ], "pop" : 536, "state" : "MN" } +{ "_id" : "56247", "city" : "HAZEL RUN", "loc" : [ -95.712187, 44.749688 ], "pop" : 328, "state" : "MN" } +{ "_id" : "56248", "city" : "HERMAN", "loc" : [ -96.099188, 45.807104 ], "pop" : 928, "state" : "MN" } +{ "_id" : "56249", "city" : "HOLLOWAY", "loc" : [ -95.916374, 45.270805 ], "pop" : 283, "state" : "MN" } +{ "_id" : "56250", "city" : "JOHNSON", "loc" : [ -96.266277, 45.573007 ], "pop" : 12, "state" : "MN" } +{ "_id" : "56251", "city" : "KANDIYOHI", "loc" : [ -94.94727399999999, 45.123162 ], "pop" : 1169, "state" : "MN" } +{ "_id" : "56252", "city" : "KERKHOVEN", "loc" : [ -95.311465, 45.209626 ], "pop" : 1267, "state" : "MN" } +{ "_id" : "56253", "city" : "LAKE LILLIAN", "loc" : [ -94.901443, 44.96603 ], "pop" : 1106, "state" : "MN" } +{ "_id" : "56254", "city" : "LOUISBURG", "loc" : [ -96.171539, 45.130556 ], "pop" : 307, "state" : "MN" } +{ "_id" : "56255", "city" : "LUCAN", "loc" : [ -95.411934, 44.413237 ], "pop" : 487, "state" : "MN" } +{ "_id" : "56256", "city" : "MADISON", "loc" : [ -96.164507, 44.994618 ], "pop" : 3857, "state" : "MN" } +{ "_id" : "56257", "city" : "MARIETTA", "loc" : [ -96.409448, 44.963582 ], "pop" : 588, "state" : "MN" } +{ "_id" : "56258", "city" : "MARSHALL", "loc" : [ -95.779454, 44.448127 ], "pop" : 13489, "state" : "MN" } +{ "_id" : "56260", "city" : "MAYNARD", "loc" : [ -95.48450800000001, 44.922615 ], "pop" : 1004, "state" : "MN" } +{ "_id" : "56262", "city" : "MILAN", "loc" : [ -95.869045, 45.114317 ], "pop" : 864, "state" : "MN" } +{ "_id" : "56263", "city" : "MILROY", "loc" : [ -95.55447100000001, 44.436494 ], "pop" : 907, "state" : "MN" } +{ "_id" : "56264", "city" : "MINNEOTA", "loc" : [ -95.976714, 44.558732 ], "pop" : 2056, "state" : "MN" } +{ "_id" : "56265", "city" : "MONTEVIDEO", "loc" : [ -95.676473, 44.968829 ], "pop" : 8405, "state" : "MN" } +{ "_id" : "56266", "city" : "MORGAN", "loc" : [ -94.921783, 44.392554 ], "pop" : 2257, "state" : "MN" } +{ "_id" : "56267", "city" : "MORRIS", "loc" : [ -95.91723399999999, 45.592095 ], "pop" : 7772, "state" : "MN" } +{ "_id" : "56270", "city" : "MORTON", "loc" : [ -95.02681699999999, 44.566189 ], "pop" : 962, "state" : "MN" } +{ "_id" : "56271", "city" : "MURDOCK", "loc" : [ -95.40489700000001, 45.216147 ], "pop" : 448, "state" : "MN" } +{ "_id" : "56272", "city" : "NASSAU", "loc" : [ -96.413307, 45.107554 ], "pop" : 293, "state" : "MN" } +{ "_id" : "56273", "city" : "NEW LONDON", "loc" : [ -94.948008, 45.294936 ], "pop" : 4077, "state" : "MN" } +{ "_id" : "56274", "city" : "NORCROSS", "loc" : [ -96.134168, 45.885839 ], "pop" : 303, "state" : "MN" } +{ "_id" : "56276", "city" : "ODESSA", "loc" : [ -96.310154, 45.299766 ], "pop" : 457, "state" : "MN" } +{ "_id" : "56277", "city" : "OLIVIA", "loc" : [ -94.972747, 44.770627 ], "pop" : 3829, "state" : "MN" } +{ "_id" : "56278", "city" : "ORTONVILLE", "loc" : [ -96.45965, 45.329621 ], "pop" : 2928, "state" : "MN" } +{ "_id" : "56279", "city" : "PENNOCK", "loc" : [ -95.17533299999999, 45.131031 ], "pop" : 915, "state" : "MN" } +{ "_id" : "56280", "city" : "PORTER", "loc" : [ -96.15812, 44.656532 ], "pop" : 425, "state" : "MN" } +{ "_id" : "56281", "city" : "PRINSBURG", "loc" : [ -95.18653999999999, 44.937088 ], "pop" : 931, "state" : "MN" } +{ "_id" : "56282", "city" : "RAYMOND", "loc" : [ -95.220788, 45.018097 ], "pop" : 1095, "state" : "MN" } +{ "_id" : "56283", "city" : "DELHI", "loc" : [ -95.10713, 44.531753 ], "pop" : 6705, "state" : "MN" } +{ "_id" : "56284", "city" : "RENVILLE", "loc" : [ -95.19887900000001, 44.777609 ], "pop" : 2027, "state" : "MN" } +{ "_id" : "56285", "city" : "SACRED HEART", "loc" : [ -95.353801, 44.797536 ], "pop" : 1725, "state" : "MN" } +{ "_id" : "56286", "city" : "SAINT LEO", "loc" : [ -96.042546, 44.711091 ], "pop" : 483, "state" : "MN" } +{ "_id" : "56287", "city" : "SEAFORTH", "loc" : [ -95.297768, 44.490536 ], "pop" : 327, "state" : "MN" } +{ "_id" : "56288", "city" : "SPICER", "loc" : [ -94.91157200000001, 45.224112 ], "pop" : 3440, "state" : "MN" } +{ "_id" : "56289", "city" : "SUNBURG", "loc" : [ -95.204915, 45.358316 ], "pop" : 408, "state" : "MN" } +{ "_id" : "56291", "city" : "TAUNTON", "loc" : [ -96.052594, 44.595076 ], "pop" : 349, "state" : "MN" } +{ "_id" : "56292", "city" : "VESTA", "loc" : [ -95.411801, 44.505052 ], "pop" : 525, "state" : "MN" } +{ "_id" : "56293", "city" : "WABASSO", "loc" : [ -95.2632, 44.405865 ], "pop" : 991, "state" : "MN" } +{ "_id" : "56294", "city" : "WANDA", "loc" : [ -95.178, 44.32295 ], "pop" : 401, "state" : "MN" } +{ "_id" : "56295", "city" : "WATSON", "loc" : [ -95.794203, 45.019443 ], "pop" : 436, "state" : "MN" } +{ "_id" : "56296", "city" : "WHEATON", "loc" : [ -96.486598, 45.811104 ], "pop" : 2338, "state" : "MN" } +{ "_id" : "56297", "city" : "WOOD LAKE", "loc" : [ -95.540908, 44.637915 ], "pop" : 922, "state" : "MN" } +{ "_id" : "56301", "city" : "SAINT CLOUD", "loc" : [ -94.18185699999999, 45.540972 ], "pop" : 36182, "state" : "MN" } +{ "_id" : "56303", "city" : "SAINT CLOUD", "loc" : [ -94.20363399999999, 45.571298 ], "pop" : 14039, "state" : "MN" } +{ "_id" : "56304", "city" : "SAINT CLOUD", "loc" : [ -94.12844699999999, 45.552113 ], "pop" : 13570, "state" : "MN" } +{ "_id" : "56307", "city" : "ALBANY", "loc" : [ -94.574022, 45.615114 ], "pop" : 3064, "state" : "MN" } +{ "_id" : "56308", "city" : "ALEXANDRIA", "loc" : [ -95.38199400000001, 45.881747 ], "pop" : 17548, "state" : "MN" } +{ "_id" : "56309", "city" : "ASHBY", "loc" : [ -95.821417, 46.078066 ], "pop" : 869, "state" : "MN" } +{ "_id" : "56310", "city" : "AVON", "loc" : [ -94.436029, 45.612168 ], "pop" : 4355, "state" : "MN" } +{ "_id" : "56311", "city" : "BARRETT", "loc" : [ -95.87539099999999, 45.899555 ], "pop" : 799, "state" : "MN" } +{ "_id" : "56312", "city" : "BELGRADE", "loc" : [ -94.969877, 45.486522 ], "pop" : 1661, "state" : "MN" } +{ "_id" : "56313", "city" : "BOCK", "loc" : [ -93.553658, 45.784427 ], "pop" : 115, "state" : "MN" } +{ "_id" : "56314", "city" : "BOWLUS", "loc" : [ -94.41753300000001, 45.81212 ], "pop" : 1183, "state" : "MN" } +{ "_id" : "56315", "city" : "BRANDON", "loc" : [ -95.57876899999999, 46.0039 ], "pop" : 1453, "state" : "MN" } +{ "_id" : "56316", "city" : "BROOTEN", "loc" : [ -95.09004899999999, 45.493171 ], "pop" : 1287, "state" : "MN" } +{ "_id" : "56318", "city" : "BURTRUM", "loc" : [ -94.696214, 45.88803 ], "pop" : 854, "state" : "MN" } +{ "_id" : "56319", "city" : "CARLOS", "loc" : [ -95.310468, 45.972572 ], "pop" : 2136, "state" : "MN" } +{ "_id" : "56320", "city" : "COLD SPRING", "loc" : [ -94.43782299999999, 45.449976 ], "pop" : 5162, "state" : "MN" } +{ "_id" : "56323", "city" : "CYRUS", "loc" : [ -95.706965, 45.569483 ], "pop" : 988, "state" : "MN" } +{ "_id" : "56324", "city" : "DALTON", "loc" : [ -95.85001699999999, 46.154414 ], "pop" : 1305, "state" : "MN" } +{ "_id" : "56326", "city" : "EVANSVILLE", "loc" : [ -95.69506699999999, 46.01525 ], "pop" : 1149, "state" : "MN" } +{ "_id" : "56327", "city" : "FARWELL", "loc" : [ -95.665583, 45.724424 ], "pop" : 394, "state" : "MN" } +{ "_id" : "56328", "city" : "FLENSBURG", "loc" : [ -94.530767, 45.950899 ], "pop" : 213, "state" : "MN" } +{ "_id" : "56329", "city" : "FOLEY", "loc" : [ -93.868459, 45.708687 ], "pop" : 4078, "state" : "MN" } +{ "_id" : "56330", "city" : "FORESTON", "loc" : [ -93.69575500000001, 45.702842 ], "pop" : 1353, "state" : "MN" } +{ "_id" : "56331", "city" : "FREEPORT", "loc" : [ -94.678529, 45.673146 ], "pop" : 3865, "state" : "MN" } +{ "_id" : "56332", "city" : "GARFIELD", "loc" : [ -95.45004400000001, 45.995309 ], "pop" : 1430, "state" : "MN" } +{ "_id" : "56333", "city" : "GILMAN", "loc" : [ -93.946876, 45.774178 ], "pop" : 945, "state" : "MN" } +{ "_id" : "56334", "city" : "GLENWOOD", "loc" : [ -95.38681, 45.642911 ], "pop" : 5272, "state" : "MN" } +{ "_id" : "56336", "city" : "GREY EAGLE", "loc" : [ -94.832075, 45.81069 ], "pop" : 2188, "state" : "MN" } +{ "_id" : "56338", "city" : "HILLMAN", "loc" : [ -93.881224, 46.06776 ], "pop" : 724, "state" : "MN" } +{ "_id" : "56339", "city" : "HOFFMAN", "loc" : [ -95.79548200000001, 45.823292 ], "pop" : 852, "state" : "MN" } +{ "_id" : "56340", "city" : "HOLDINGFORD", "loc" : [ -94.458091, 45.724924 ], "pop" : 1721, "state" : "MN" } +{ "_id" : "56341", "city" : "HOLMES CITY", "loc" : [ -95.56464, 45.810706 ], "pop" : 614, "state" : "MN" } +{ "_id" : "56342", "city" : "ISLE", "loc" : [ -93.474062, 46.169605 ], "pop" : 1109, "state" : "MN" } +{ "_id" : "56343", "city" : "KENSINGTON", "loc" : [ -95.694452, 45.81761 ], "pop" : 770, "state" : "MN" } +{ "_id" : "56345", "city" : "LITTLE FALLS", "loc" : [ -94.360428, 45.98108 ], "pop" : 13558, "state" : "MN" } +{ "_id" : "56347", "city" : "LITTLE SAUK", "loc" : [ -94.89838899999999, 45.962417 ], "pop" : 6436, "state" : "MN" } +{ "_id" : "56349", "city" : "LOWRY", "loc" : [ -95.53221000000001, 45.710469 ], "pop" : 429, "state" : "MN" } +{ "_id" : "56350", "city" : "MC GRATH", "loc" : [ -93.241619, 46.244116 ], "pop" : 933, "state" : "MN" } +{ "_id" : "56352", "city" : "MELROSE", "loc" : [ -94.819768, 45.658183 ], "pop" : 4739, "state" : "MN" } +{ "_id" : "56353", "city" : "MILACA", "loc" : [ -93.64526600000001, 45.779481 ], "pop" : 4927, "state" : "MN" } +{ "_id" : "56354", "city" : "MILTONA", "loc" : [ -95.325767, 46.054519 ], "pop" : 866, "state" : "MN" } +{ "_id" : "56355", "city" : "NELSON", "loc" : [ -95.226032, 45.8516 ], "pop" : 858, "state" : "MN" } +{ "_id" : "56357", "city" : "OAK PARK", "loc" : [ -93.92141700000001, 45.671403 ], "pop" : 2636, "state" : "MN" } +{ "_id" : "56358", "city" : "OGILVIE", "loc" : [ -93.43592099999999, 45.847632 ], "pop" : 1143, "state" : "MN" } +{ "_id" : "56359", "city" : "ONAMIA", "loc" : [ -93.68668, 46.09022 ], "pop" : 3111, "state" : "MN" } +{ "_id" : "56360", "city" : "OSAKIS", "loc" : [ -95.13317000000001, 45.876836 ], "pop" : 2099, "state" : "MN" } +{ "_id" : "56361", "city" : "PARKERS PRAIRIE", "loc" : [ -95.360764, 46.176925 ], "pop" : 3067, "state" : "MN" } +{ "_id" : "56362", "city" : "PAYNESVILLE", "loc" : [ -94.715709, 45.398798 ], "pop" : 4967, "state" : "MN" } +{ "_id" : "56363", "city" : "PEASE", "loc" : [ -93.649247, 45.697872 ], "pop" : 178, "state" : "MN" } +{ "_id" : "56364", "city" : "PIERZ", "loc" : [ -94.085306, 46.008059 ], "pop" : 4300, "state" : "MN" } +{ "_id" : "56367", "city" : "RICE", "loc" : [ -94.165752, 45.736383 ], "pop" : 4560, "state" : "MN" } +{ "_id" : "56368", "city" : "RICHMOND", "loc" : [ -94.546072, 45.423817 ], "pop" : 3718, "state" : "MN" } +{ "_id" : "56373", "city" : "ROYALTON", "loc" : [ -94.221063, 45.858928 ], "pop" : 2571, "state" : "MN" } +{ "_id" : "56374", "city" : "SAINT JOSEPH", "loc" : [ -94.336688, 45.565124 ], "pop" : 9480, "state" : "MN" } +{ "_id" : "56375", "city" : "SAINT STEPHEN", "loc" : [ -94.281662, 45.711815 ], "pop" : 2868, "state" : "MN" } +{ "_id" : "56377", "city" : "SARTELL", "loc" : [ -94.21356900000001, 45.631827 ], "pop" : 4966, "state" : "MN" } +{ "_id" : "56378", "city" : "SAUK CENTRE", "loc" : [ -94.968166, 45.728079 ], "pop" : 6025, "state" : "MN" } +{ "_id" : "56379", "city" : "SAUK RAPIDS", "loc" : [ -94.159088, 45.604032 ], "pop" : 12505, "state" : "MN" } +{ "_id" : "56380", "city" : "SEDAN", "loc" : [ -95.263989, 45.51069 ], "pop" : 968, "state" : "MN" } +{ "_id" : "56381", "city" : "STARBUCK", "loc" : [ -95.542125, 45.592587 ], "pop" : 1964, "state" : "MN" } +{ "_id" : "56382", "city" : "SWANVILLE", "loc" : [ -94.62892100000001, 45.943148 ], "pop" : 1917, "state" : "MN" } +{ "_id" : "56384", "city" : "UPSALA", "loc" : [ -94.575531, 45.809723 ], "pop" : 1001, "state" : "MN" } +{ "_id" : "56385", "city" : "VILLARD", "loc" : [ -95.241439, 45.711823 ], "pop" : 730, "state" : "MN" } +{ "_id" : "56386", "city" : "WAHKON", "loc" : [ -93.497174, 46.11214 ], "pop" : 656, "state" : "MN" } +{ "_id" : "56387", "city" : "WAITE PARK", "loc" : [ -94.224481, 45.54972 ], "pop" : 5227, "state" : "MN" } +{ "_id" : "56389", "city" : "WEST UNION", "loc" : [ -95.08328, 45.798451 ], "pop" : 54, "state" : "MN" } +{ "_id" : "56401", "city" : "EAST GULL LAKE", "loc" : [ -94.20187300000001, 46.357219 ], "pop" : 23504, "state" : "MN" } +{ "_id" : "56431", "city" : "AITKIN", "loc" : [ -93.645413, 46.479929 ], "pop" : 6388, "state" : "MN" } +{ "_id" : "56433", "city" : "AKELEY", "loc" : [ -94.72342999999999, 47.000987 ], "pop" : 1097, "state" : "MN" } +{ "_id" : "56434", "city" : "ALDRICH", "loc" : [ -94.992017, 46.402538 ], "pop" : 1105, "state" : "MN" } +{ "_id" : "56435", "city" : "BACKUS", "loc" : [ -94.39591799999999, 46.869905 ], "pop" : 2594, "state" : "MN" } +{ "_id" : "56437", "city" : "BERTHA", "loc" : [ -95.03573299999999, 46.251457 ], "pop" : 1365, "state" : "MN" } +{ "_id" : "56438", "city" : "BROWERVILLE", "loc" : [ -94.834581, 46.090525 ], "pop" : 2179, "state" : "MN" } +{ "_id" : "56440", "city" : "CLARISSA", "loc" : [ -94.95719, 46.137305 ], "pop" : 1222, "state" : "MN" } +{ "_id" : "56441", "city" : "CROSBY", "loc" : [ -93.987448, 46.509084 ], "pop" : 5601, "state" : "MN" } +{ "_id" : "56442", "city" : "CROSSLAKE", "loc" : [ -94.114256, 46.678644 ], "pop" : 1132, "state" : "MN" } +{ "_id" : "56443", "city" : "CUSHING", "loc" : [ -94.618452, 46.202194 ], "pop" : 2122, "state" : "MN" } +{ "_id" : "56444", "city" : "DEERWOOD", "loc" : [ -93.884863, 46.444571 ], "pop" : 2225, "state" : "MN" } +{ "_id" : "56446", "city" : "EAGLE BEND", "loc" : [ -95.09606100000001, 46.117017 ], "pop" : 1714, "state" : "MN" } +{ "_id" : "56447", "city" : "EMILY", "loc" : [ -93.948385, 46.747791 ], "pop" : 699, "state" : "MN" } +{ "_id" : "56448", "city" : "FIFTY LAKES", "loc" : [ -94.065555, 46.746997 ], "pop" : 289, "state" : "MN" } +{ "_id" : "56449", "city" : "FORT RIPLEY", "loc" : [ -94.252696, 46.20988 ], "pop" : 1377, "state" : "MN" } +{ "_id" : "56450", "city" : "GARRISON", "loc" : [ -93.93634299999999, 46.263725 ], "pop" : 1771, "state" : "MN" } +{ "_id" : "56452", "city" : "HACKENSACK", "loc" : [ -94.50332400000001, 46.988442 ], "pop" : 1382, "state" : "MN" } +{ "_id" : "56453", "city" : "HEWITT", "loc" : [ -95.050361, 46.32497 ], "pop" : 1213, "state" : "MN" } +{ "_id" : "56455", "city" : "IRONTON", "loc" : [ -94.043655, 46.464135 ], "pop" : 145, "state" : "MN" } +{ "_id" : "56456", "city" : "JENKINS", "loc" : [ -94.33248500000001, 46.650983 ], "pop" : 262, "state" : "MN" } +{ "_id" : "56458", "city" : "LAKE GEORGE", "loc" : [ -95.00214800000001, 47.214992 ], "pop" : 485, "state" : "MN" } +{ "_id" : "56460", "city" : "LAKE ITASCA", "loc" : [ -95.252149, 47.275725 ], "pop" : 208, "state" : "MN" } +{ "_id" : "56461", "city" : "LAPORTE", "loc" : [ -94.77716100000001, 47.236752 ], "pop" : 1624, "state" : "MN" } +{ "_id" : "56463", "city" : "MANHATTAN BEACH", "loc" : [ -94.140068, 46.733563 ], "pop" : 71, "state" : "MN" } +{ "_id" : "56464", "city" : "MENAHGA", "loc" : [ -95.07142899999999, 46.757233 ], "pop" : 1940, "state" : "MN" } +{ "_id" : "56465", "city" : "MERRIFIELD", "loc" : [ -94.204268, 46.494309 ], "pop" : 1552, "state" : "MN" } +{ "_id" : "56466", "city" : "LEADER", "loc" : [ -94.628086, 46.321568 ], "pop" : 943, "state" : "MN" } +{ "_id" : "56467", "city" : "NEVIS", "loc" : [ -94.84600500000001, 46.931892 ], "pop" : 1252, "state" : "MN" } +{ "_id" : "56468", "city" : "LAKE SHORE", "loc" : [ -94.29656199999999, 46.484828 ], "pop" : 2184, "state" : "MN" } +{ "_id" : "56469", "city" : "PALISADE", "loc" : [ -93.562741, 46.689492 ], "pop" : 1168, "state" : "MN" } +{ "_id" : "56470", "city" : "PARK RAPIDS", "loc" : [ -95.03829899999999, 46.937682 ], "pop" : 8074, "state" : "MN" } +{ "_id" : "56472", "city" : "PEQUOT LAKES", "loc" : [ -94.26842600000001, 46.62569 ], "pop" : 3437, "state" : "MN" } +{ "_id" : "56473", "city" : "PILLAGER", "loc" : [ -94.392287, 46.398395 ], "pop" : 3481, "state" : "MN" } +{ "_id" : "56474", "city" : "PINE RIVER", "loc" : [ -94.44769100000001, 46.693796 ], "pop" : 4095, "state" : "MN" } +{ "_id" : "56475", "city" : "RANDALL", "loc" : [ -94.50054299999999, 46.073361 ], "pop" : 1621, "state" : "MN" } +{ "_id" : "56477", "city" : "SEBEKA", "loc" : [ -95.068055, 46.630615 ], "pop" : 3089, "state" : "MN" } +{ "_id" : "56479", "city" : "STAPLES", "loc" : [ -94.763299, 46.353552 ], "pop" : 5352, "state" : "MN" } +{ "_id" : "56481", "city" : "VERNDALE", "loc" : [ -94.853268, 46.426995 ], "pop" : 1899, "state" : "MN" } +{ "_id" : "56482", "city" : "WADENA", "loc" : [ -95.128283, 46.440121 ], "pop" : 5818, "state" : "MN" } +{ "_id" : "56484", "city" : "WALKER", "loc" : [ -94.584675, 47.08775 ], "pop" : 2431, "state" : "MN" } +{ "_id" : "56485", "city" : "WHIPHOLT", "loc" : [ -94.35097399999999, 47.040953 ], "pop" : 138, "state" : "MN" } +{ "_id" : "56501", "city" : "DETROIT LAKES", "loc" : [ -95.800606, 46.834877 ], "pop" : 15501, "state" : "MN" } +{ "_id" : "56510", "city" : "LOCKHART", "loc" : [ -96.503569, 47.315597 ], "pop" : 2500, "state" : "MN" } +{ "_id" : "56511", "city" : "AUDUBON", "loc" : [ -95.988136, 46.871887 ], "pop" : 1083, "state" : "MN" } +{ "_id" : "56513", "city" : "BAKER", "loc" : [ -96.604955, 46.685764 ], "pop" : 267, "state" : "MN" } +{ "_id" : "56514", "city" : "DOWNER", "loc" : [ -96.37269000000001, 46.677296 ], "pop" : 3357, "state" : "MN" } +{ "_id" : "56515", "city" : "BATTLE LAKE", "loc" : [ -95.714395, 46.314175 ], "pop" : 2143, "state" : "MN" } +{ "_id" : "56516", "city" : "BEJOU", "loc" : [ -95.94542300000001, 47.44909 ], "pop" : 358, "state" : "MN" } +{ "_id" : "56517", "city" : "BELTRAMI", "loc" : [ -96.454864, 47.572118 ], "pop" : 517, "state" : "MN" } +{ "_id" : "56518", "city" : "BLUFFTON", "loc" : [ -95.223592, 46.491795 ], "pop" : 623, "state" : "MN" } +{ "_id" : "56519", "city" : "BORUP", "loc" : [ -96.552969, 47.189641 ], "pop" : 329, "state" : "MN" } +{ "_id" : "56520", "city" : "BRECKENRIDGE", "loc" : [ -96.56222, 46.27966 ], "pop" : 4776, "state" : "MN" } +{ "_id" : "56521", "city" : "CALLAWAY", "loc" : [ -95.94396399999999, 47.007642 ], "pop" : 761, "state" : "MN" } +{ "_id" : "56522", "city" : "DORAN", "loc" : [ -96.437169, 46.129645 ], "pop" : 718, "state" : "MN" } +{ "_id" : "56523", "city" : "ELDRED", "loc" : [ -96.80264699999999, 47.653011 ], "pop" : 731, "state" : "MN" } +{ "_id" : "56524", "city" : "CLITHERALL", "loc" : [ -95.58582199999999, 46.31693 ], "pop" : 555, "state" : "MN" } +{ "_id" : "56525", "city" : "COMSTOCK", "loc" : [ -96.739752, 46.666703 ], "pop" : 260, "state" : "MN" } +{ "_id" : "56527", "city" : "DEER CREEK", "loc" : [ -95.26726499999999, 46.411193 ], "pop" : 1431, "state" : "MN" } +{ "_id" : "56528", "city" : "DENT", "loc" : [ -95.764357, 46.555417 ], "pop" : 2064, "state" : "MN" } +{ "_id" : "56529", "city" : "DILWORTH", "loc" : [ -96.70222, 46.878168 ], "pop" : 2546, "state" : "MN" } +{ "_id" : "56531", "city" : "ELBOW LAKE", "loc" : [ -95.96714900000001, 45.995267 ], "pop" : 2087, "state" : "MN" } +{ "_id" : "56533", "city" : "ELIZABETH", "loc" : [ -96.085093, 46.406218 ], "pop" : 738, "state" : "MN" } +{ "_id" : "56534", "city" : "ERHARD", "loc" : [ -96.059264, 46.494817 ], "pop" : 846, "state" : "MN" } +{ "_id" : "56535", "city" : "ERSKINE", "loc" : [ -96.012173, 47.661817 ], "pop" : 993, "state" : "MN" } +{ "_id" : "56536", "city" : "FELTON", "loc" : [ -96.505225, 47.070528 ], "pop" : 431, "state" : "MN" } +{ "_id" : "56537", "city" : "CARLISLE", "loc" : [ -96.06433800000001, 46.289723 ], "pop" : 18010, "state" : "MN" } +{ "_id" : "56540", "city" : "FERTILE", "loc" : [ -96.237127, 47.521367 ], "pop" : 1933, "state" : "MN" } +{ "_id" : "56542", "city" : "FOSSTON", "loc" : [ -95.743082, 47.581584 ], "pop" : 2469, "state" : "MN" } +{ "_id" : "56543", "city" : "FOXHOME", "loc" : [ -96.31757899999999, 46.258366 ], "pop" : 309, "state" : "MN" } +{ "_id" : "56544", "city" : "FRAZEE", "loc" : [ -95.521159, 46.756469 ], "pop" : 3166, "state" : "MN" } +{ "_id" : "56545", "city" : "GARY", "loc" : [ -96.215233, 47.367491 ], "pop" : 518, "state" : "MN" } +{ "_id" : "56546", "city" : "GEORGETOWN", "loc" : [ -96.726996, 47.099865 ], "pop" : 425, "state" : "MN" } +{ "_id" : "56547", "city" : "GLYNDON", "loc" : [ -96.55833800000001, 46.882023 ], "pop" : 2198, "state" : "MN" } +{ "_id" : "56548", "city" : "HALSTAD", "loc" : [ -96.79803800000001, 47.355114 ], "pop" : 898, "state" : "MN" } +{ "_id" : "56549", "city" : "ROLLAG", "loc" : [ -96.31115, 46.884185 ], "pop" : 3105, "state" : "MN" } +{ "_id" : "56550", "city" : "HENDRUM", "loc" : [ -96.79875, 47.26889 ], "pop" : 467, "state" : "MN" } +{ "_id" : "56551", "city" : "HENNING", "loc" : [ -95.38516199999999, 46.325606 ], "pop" : 1770, "state" : "MN" } +{ "_id" : "56552", "city" : "HITTERDAL", "loc" : [ -96.28883999999999, 47.001354 ], "pop" : 613, "state" : "MN" } +{ "_id" : "56553", "city" : "KENT", "loc" : [ -96.685181, 46.437811 ], "pop" : 168, "state" : "MN" } +{ "_id" : "56554", "city" : "LAKE PARK", "loc" : [ -96.067047, 46.817623 ], "pop" : 3001, "state" : "MN" } +{ "_id" : "56556", "city" : "MCINTOSH", "loc" : [ -95.886252, 47.652165 ], "pop" : 1088, "state" : "MN" } +{ "_id" : "56557", "city" : "MAHNOMEN", "loc" : [ -95.885609, 47.336155 ], "pop" : 2940, "state" : "MN" } +{ "_id" : "56560", "city" : "MOORHEAD", "loc" : [ -96.75719700000001, 46.867748 ], "pop" : 35056, "state" : "MN" } +{ "_id" : "56565", "city" : "NASHUA", "loc" : [ -96.31600899999999, 46.053731 ], "pop" : 153, "state" : "MN" } +{ "_id" : "56566", "city" : "NAYTAHWAUSH", "loc" : [ -95.62832400000001, 47.26007 ], "pop" : 785, "state" : "MN" } +{ "_id" : "56567", "city" : "NEW YORK MILLS", "loc" : [ -95.40471700000001, 46.555867 ], "pop" : 3681, "state" : "MN" } +{ "_id" : "56568", "city" : "NIELSVILLE", "loc" : [ -96.75743300000001, 47.537336 ], "pop" : 299, "state" : "MN" } +{ "_id" : "56569", "city" : "OGEMA", "loc" : [ -95.91512400000001, 47.102865 ], "pop" : 1129, "state" : "MN" } +{ "_id" : "56570", "city" : "OSAGE", "loc" : [ -95.23528399999999, 46.932896 ], "pop" : 626, "state" : "MN" } +{ "_id" : "56571", "city" : "OTTERTAIL", "loc" : [ -95.543571, 46.417722 ], "pop" : 1080, "state" : "MN" } +{ "_id" : "56572", "city" : "PELICAN RAPIDS", "loc" : [ -96.066227, 46.599444 ], "pop" : 4481, "state" : "MN" } +{ "_id" : "56573", "city" : "PERHAM", "loc" : [ -95.581763, 46.603106 ], "pop" : 3238, "state" : "MN" } +{ "_id" : "56574", "city" : "PERLEY", "loc" : [ -96.777722, 47.18308 ], "pop" : 303, "state" : "MN" } +{ "_id" : "56575", "city" : "PONSFORD", "loc" : [ -95.319717, 47.013348 ], "pop" : 1072, "state" : "MN" } +{ "_id" : "56576", "city" : "RICHVILLE", "loc" : [ -95.59289099999999, 46.500807 ], "pop" : 898, "state" : "MN" } +{ "_id" : "56577", "city" : "RICHWOOD", "loc" : [ -95.850094, 46.93609 ], "pop" : 594, "state" : "MN" } +{ "_id" : "56578", "city" : "ROCHERT", "loc" : [ -95.600443, 46.855904 ], "pop" : 688, "state" : "MN" } +{ "_id" : "56579", "city" : "ROTHSAY", "loc" : [ -96.288726, 46.509412 ], "pop" : 916, "state" : "MN" } +{ "_id" : "56580", "city" : "SABIN", "loc" : [ -96.59851999999999, 46.770257 ], "pop" : 1225, "state" : "MN" } +{ "_id" : "56581", "city" : "SHELLY", "loc" : [ -96.78380199999999, 47.455375 ], "pop" : 445, "state" : "MN" } +{ "_id" : "56583", "city" : "TENNEY", "loc" : [ -96.387049, 45.990196 ], "pop" : 270, "state" : "MN" } +{ "_id" : "56584", "city" : "TWIN VALLEY", "loc" : [ -96.246382, 47.250905 ], "pop" : 2108, "state" : "MN" } +{ "_id" : "56585", "city" : "ULEN", "loc" : [ -96.28239000000001, 47.090263 ], "pop" : 939, "state" : "MN" } +{ "_id" : "56586", "city" : "UNDERWOOD", "loc" : [ -95.84155, 46.32652 ], "pop" : 1932, "state" : "MN" } +{ "_id" : "56587", "city" : "VERGAS", "loc" : [ -95.79481199999999, 46.670645 ], "pop" : 1338, "state" : "MN" } +{ "_id" : "56588", "city" : "VINING", "loc" : [ -95.588263, 46.256135 ], "pop" : 463, "state" : "MN" } +{ "_id" : "56589", "city" : "WAUBUN", "loc" : [ -95.887125, 47.192009 ], "pop" : 961, "state" : "MN" } +{ "_id" : "56590", "city" : "WENDELL", "loc" : [ -96.114407, 46.056174 ], "pop" : 408, "state" : "MN" } +{ "_id" : "56592", "city" : "WINGER", "loc" : [ -95.994085, 47.537516 ], "pop" : 406, "state" : "MN" } +{ "_id" : "56593", "city" : "WOLF LAKE", "loc" : [ -95.36070599999999, 46.833417 ], "pop" : 260, "state" : "MN" } +{ "_id" : "56594", "city" : "WOLVERTON", "loc" : [ -96.61487, 46.555017 ], "pop" : 834, "state" : "MN" } +{ "_id" : "56601", "city" : "BEMIDJI", "loc" : [ -94.848809, 47.488071 ], "pop" : 25278, "state" : "MN" } +{ "_id" : "56621", "city" : "BAGLEY", "loc" : [ -95.41334000000001, 47.487024 ], "pop" : 4063, "state" : "MN" } +{ "_id" : "56623", "city" : "BAUDETTE", "loc" : [ -94.599479, 48.692724 ], "pop" : 2065, "state" : "MN" } +{ "_id" : "56626", "city" : "BENA", "loc" : [ -94.251921, 47.347732 ], "pop" : 461, "state" : "MN" } +{ "_id" : "56627", "city" : "BIG FALLS", "loc" : [ -93.729629, 48.156028 ], "pop" : 652, "state" : "MN" } +{ "_id" : "56628", "city" : "BIGFORK", "loc" : [ -93.670699, 47.750227 ], "pop" : 819, "state" : "MN" } +{ "_id" : "56629", "city" : "BIRCHDALE", "loc" : [ -94.167652, 48.624696 ], "pop" : 374, "state" : "MN" } +{ "_id" : "56630", "city" : "BLACKDUCK", "loc" : [ -94.496072, 47.738136 ], "pop" : 1428, "state" : "MN" } +{ "_id" : "56632", "city" : "BOY RIVER", "loc" : [ -94.102587, 47.181841 ], "pop" : 132, "state" : "MN" } +{ "_id" : "56633", "city" : "CASS LAKE", "loc" : [ -94.611896, 47.35155 ], "pop" : 2866, "state" : "MN" } +{ "_id" : "56634", "city" : "CLEARBROOK", "loc" : [ -95.375185, 47.714581 ], "pop" : 1208, "state" : "MN" } +{ "_id" : "56636", "city" : "DEER RIVER", "loc" : [ -93.84979, 47.382867 ], "pop" : 3254, "state" : "MN" } +{ "_id" : "56637", "city" : "TALMOON", "loc" : [ -93.774913, 47.588764 ], "pop" : 155, "state" : "MN" } +{ "_id" : "56639", "city" : "EFFIE", "loc" : [ -93.579905, 47.847187 ], "pop" : 346, "state" : "MN" } +{ "_id" : "56641", "city" : "FEDERAL DAM", "loc" : [ -94.257519, 47.206914 ], "pop" : 347, "state" : "MN" } +{ "_id" : "56644", "city" : "GONVICK", "loc" : [ -95.499014, 47.749009 ], "pop" : 931, "state" : "MN" } +{ "_id" : "56646", "city" : "GULLY", "loc" : [ -95.641034, 47.769745 ], "pop" : 511, "state" : "MN" } +{ "_id" : "56647", "city" : "HINES", "loc" : [ -94.647666, 47.732429 ], "pop" : 1083, "state" : "MN" } +{ "_id" : "56649", "city" : "INTERNATIONAL FA", "loc" : [ -93.40609000000001, 48.583398 ], "pop" : 11124, "state" : "MN" } +{ "_id" : "56650", "city" : "KELLIHER", "loc" : [ -94.538166, 47.927173 ], "pop" : 1092, "state" : "MN" } +{ "_id" : "56651", "city" : "LENGBY", "loc" : [ -95.627475, 47.536998 ], "pop" : 514, "state" : "MN" } +{ "_id" : "56652", "city" : "LEONARD", "loc" : [ -95.37077499999999, 47.628905 ], "pop" : 1022, "state" : "MN" } +{ "_id" : "56653", "city" : "LITTLEFORK", "loc" : [ -93.53993199999999, 48.385233 ], "pop" : 1769, "state" : "MN" } +{ "_id" : "56654", "city" : "LOMAN", "loc" : [ -93.840673, 48.516406 ], "pop" : 198, "state" : "MN" } +{ "_id" : "56655", "city" : "LONGVILLE", "loc" : [ -94.198182, 47.024842 ], "pop" : 757, "state" : "MN" } +{ "_id" : "56657", "city" : "MARCELL", "loc" : [ -93.678425, 47.634527 ], "pop" : 449, "state" : "MN" } +{ "_id" : "56659", "city" : "MAX", "loc" : [ -93.972031, 47.628919 ], "pop" : 140, "state" : "MN" } +{ "_id" : "56660", "city" : "MIZPAH", "loc" : [ -94.146748, 47.949525 ], "pop" : 321, "state" : "MN" } +{ "_id" : "56661", "city" : "NORTHOME", "loc" : [ -94.204274, 47.844039 ], "pop" : 908, "state" : "MN" } +{ "_id" : "56662", "city" : "OUTING", "loc" : [ -93.94425200000001, 46.837528 ], "pop" : 348, "state" : "MN" } +{ "_id" : "56663", "city" : "PENNINGTON", "loc" : [ -94.483361, 47.465121 ], "pop" : 176, "state" : "MN" } +{ "_id" : "56665", "city" : "PITT", "loc" : [ -94.728252, 48.782986 ], "pop" : 678, "state" : "MN" } +{ "_id" : "56666", "city" : "PONEMAH", "loc" : [ -94.91704799999999, 48.037168 ], "pop" : 790, "state" : "MN" } +{ "_id" : "56667", "city" : "PUPOSKY", "loc" : [ -94.980294, 47.7436 ], "pop" : 967, "state" : "MN" } +{ "_id" : "56668", "city" : "RANIER", "loc" : [ -93.31245699999999, 48.611847 ], "pop" : 1145, "state" : "MN" } +{ "_id" : "56669", "city" : "RAY", "loc" : [ -93.08954900000001, 48.421834 ], "pop" : 365, "state" : "MN" } +{ "_id" : "56670", "city" : "REDBY", "loc" : [ -94.940409, 47.868888 ], "pop" : 1394, "state" : "MN" } +{ "_id" : "56671", "city" : "REDLAKE", "loc" : [ -95.06432, 47.865378 ], "pop" : 1358, "state" : "MN" } +{ "_id" : "56672", "city" : "REMER", "loc" : [ -93.919647, 47.087422 ], "pop" : 1466, "state" : "MN" } +{ "_id" : "56673", "city" : "ROOSEVELT", "loc" : [ -95.179389, 48.814807 ], "pop" : 907, "state" : "MN" } +{ "_id" : "56674", "city" : "SAUM", "loc" : [ -94.651203, 47.974492 ], "pop" : 150, "state" : "MN" } +{ "_id" : "56676", "city" : "SHEVLIN", "loc" : [ -95.24502099999999, 47.500364 ], "pop" : 879, "state" : "MN" } +{ "_id" : "56678", "city" : "SOLWAY", "loc" : [ -95.120475, 47.547972 ], "pop" : 971, "state" : "MN" } +{ "_id" : "56680", "city" : "SPRING LAKE", "loc" : [ -93.83821500000001, 47.588811 ], "pop" : 383, "state" : "MN" } +{ "_id" : "56681", "city" : "SQUAW LAKE", "loc" : [ -94.14749999999999, 47.636162 ], "pop" : 337, "state" : "MN" } +{ "_id" : "56682", "city" : "SWIFT", "loc" : [ -95.297499, 48.847573 ], "pop" : 789, "state" : "MN" } +{ "_id" : "56683", "city" : "TENSTRIKE", "loc" : [ -94.68243200000001, 47.661146 ], "pop" : 184, "state" : "MN" } +{ "_id" : "56684", "city" : "TRAIL", "loc" : [ -95.760668, 47.747769 ], "pop" : 353, "state" : "MN" } +{ "_id" : "56685", "city" : "WASKISH", "loc" : [ -94.50370700000001, 48.176971 ], "pop" : 115, "state" : "MN" } +{ "_id" : "56686", "city" : "WILLIAMS", "loc" : [ -94.955586, 48.802218 ], "pop" : 1257, "state" : "MN" } +{ "_id" : "56687", "city" : "WILTON", "loc" : [ -94.986238, 47.535254 ], "pop" : 976, "state" : "MN" } +{ "_id" : "56688", "city" : "WIRT", "loc" : [ -93.98107899999999, 47.716428 ], "pop" : 84, "state" : "MN" } +{ "_id" : "56701", "city" : "THIEF RIVER FALL", "loc" : [ -96.167019, 48.110391 ], "pop" : 11401, "state" : "MN" } +{ "_id" : "56710", "city" : "ALVARADO", "loc" : [ -96.991457, 48.201968 ], "pop" : 483, "state" : "MN" } +{ "_id" : "56711", "city" : "ANGLE INLET", "loc" : [ -95.090248, 49.324924 ], "pop" : 50, "state" : "MN" } +{ "_id" : "56712", "city" : "ANGUS", "loc" : [ -96.656978, 48.092675 ], "pop" : 336, "state" : "MN" } +{ "_id" : "56713", "city" : "ARGYLE", "loc" : [ -96.867096, 48.331418 ], "pop" : 989, "state" : "MN" } +{ "_id" : "56714", "city" : "BADGER", "loc" : [ -96.096523, 48.791294 ], "pop" : 1068, "state" : "MN" } +{ "_id" : "56715", "city" : "BROOKS", "loc" : [ -96.011663, 47.812942 ], "pop" : 350, "state" : "MN" } +{ "_id" : "56716", "city" : "CROOKSTON", "loc" : [ -96.59307800000001, 47.779694 ], "pop" : 9976, "state" : "MN" } +{ "_id" : "56720", "city" : "DONALDSON", "loc" : [ -96.857894, 48.579792 ], "pop" : 117, "state" : "MN" } +{ "_id" : "56721", "city" : "EAST GRAND FORKS", "loc" : [ -97.02126199999999, 47.931802 ], "pop" : 8830, "state" : "MN" } +{ "_id" : "56722", "city" : "EUCLID", "loc" : [ -96.921496, 48.033804 ], "pop" : 1483, "state" : "MN" } +{ "_id" : "56723", "city" : "FISHER", "loc" : [ -96.880312, 47.838145 ], "pop" : 1473, "state" : "MN" } +{ "_id" : "56724", "city" : "GATZKE", "loc" : [ -95.790305, 48.410416 ], "pop" : 131, "state" : "MN" } +{ "_id" : "56725", "city" : "GOODRIDGE", "loc" : [ -95.72834400000001, 48.068586 ], "pop" : 923, "state" : "MN" } +{ "_id" : "56726", "city" : "GREENBUSH", "loc" : [ -96.187091, 48.695667 ], "pop" : 1022, "state" : "MN" } +{ "_id" : "56727", "city" : "GRYGLA", "loc" : [ -95.639805, 48.307068 ], "pop" : 1315, "state" : "MN" } +{ "_id" : "56728", "city" : "HALLOCK", "loc" : [ -96.944486, 48.774855 ], "pop" : 1729, "state" : "MN" } +{ "_id" : "56729", "city" : "HALMA", "loc" : [ -96.59689899999999, 48.666895 ], "pop" : 146, "state" : "MN" } +{ "_id" : "56732", "city" : "KARLSTAD", "loc" : [ -96.55111599999999, 48.591592 ], "pop" : 1461, "state" : "MN" } +{ "_id" : "56733", "city" : "KENNEDY", "loc" : [ -96.96140699999999, 48.633686 ], "pop" : 673, "state" : "MN" } +{ "_id" : "56734", "city" : "LAKE BRONSON", "loc" : [ -96.643145, 48.77868 ], "pop" : 548, "state" : "MN" } +{ "_id" : "56735", "city" : "ORLEANS", "loc" : [ -96.813729, 48.881968 ], "pop" : 785, "state" : "MN" } +{ "_id" : "56736", "city" : "MENTOR", "loc" : [ -96.177823, 47.657597 ], "pop" : 993, "state" : "MN" } +{ "_id" : "56737", "city" : "MIDDLE RIVER", "loc" : [ -96.12325, 48.442593 ], "pop" : 948, "state" : "MN" } +{ "_id" : "56738", "city" : "NEWFOLDEN", "loc" : [ -96.25501800000001, 48.28945 ], "pop" : 1700, "state" : "MN" } +{ "_id" : "56740", "city" : "NOYES", "loc" : [ -97.14903200000001, 48.969223 ], "pop" : 67, "state" : "MN" } +{ "_id" : "56741", "city" : "OAK ISLAND", "loc" : [ -94.849209, 49.313466 ], "pop" : 21, "state" : "MN" } +{ "_id" : "56742", "city" : "OKLEE", "loc" : [ -95.861693, 47.82861 ], "pop" : 628, "state" : "MN" } +{ "_id" : "56744", "city" : "OSLO", "loc" : [ -97.116252, 48.20657 ], "pop" : 552, "state" : "MN" } +{ "_id" : "56748", "city" : "PLUMMER", "loc" : [ -95.964558, 47.911324 ], "pop" : 847, "state" : "MN" } +{ "_id" : "56750", "city" : "RED LAKE FALLS", "loc" : [ -96.268097, 47.882285 ], "pop" : 2700, "state" : "MN" } +{ "_id" : "56751", "city" : "PENCER", "loc" : [ -95.756709, 48.826809 ], "pop" : 5473, "state" : "MN" } +{ "_id" : "56754", "city" : "SAINT HILAIRE", "loc" : [ -96.224914, 48.010871 ], "pop" : 873, "state" : "MN" } +{ "_id" : "56755", "city" : "SAINT VINCENT", "loc" : [ -97.17030699999999, 48.945825 ], "pop" : 241, "state" : "MN" } +{ "_id" : "56756", "city" : "SALOL", "loc" : [ -95.535594, 48.852213 ], "pop" : 478, "state" : "MN" } +{ "_id" : "56757", "city" : "STEPHEN", "loc" : [ -96.867392, 48.452488 ], "pop" : 1340, "state" : "MN" } +{ "_id" : "56758", "city" : "STRANDQUIST", "loc" : [ -96.472266, 48.45256 ], "pop" : 969, "state" : "MN" } +{ "_id" : "56759", "city" : "STRATHCONA", "loc" : [ -96.109604, 48.626556 ], "pop" : 860, "state" : "MN" } +{ "_id" : "56760", "city" : "VIKING", "loc" : [ -96.474926, 48.234881 ], "pop" : 627, "state" : "MN" } +{ "_id" : "56761", "city" : "WANNASKA", "loc" : [ -95.7072, 48.64515 ], "pop" : 684, "state" : "MN" } +{ "_id" : "56762", "city" : "RADIUM", "loc" : [ -96.759702, 48.20784 ], "pop" : 2404, "state" : "MN" } +{ "_id" : "56763", "city" : "WARROAD", "loc" : [ -95.353843, 48.911144 ], "pop" : 3766, "state" : "MN" } +{ "_id" : "57001", "city" : "ALCESTER", "loc" : [ -96.63324299999999, 43.004726 ], "pop" : 2064, "state" : "SD" } +{ "_id" : "57002", "city" : "AURORA", "loc" : [ -96.704268, 44.283786 ], "pop" : 1252, "state" : "SD" } +{ "_id" : "57003", "city" : "BALTIC", "loc" : [ -96.756272, 43.730908 ], "pop" : 1839, "state" : "SD" } +{ "_id" : "57004", "city" : "BERESFORD", "loc" : [ -96.781256, 43.087409 ], "pop" : 2639, "state" : "SD" } +{ "_id" : "57005", "city" : "CORSON", "loc" : [ -96.57820100000001, 43.596413 ], "pop" : 4155, "state" : "SD" } +{ "_id" : "57006", "city" : "BROOKINGS", "loc" : [ -96.791408, 44.305619 ], "pop" : 18164, "state" : "SD" } +{ "_id" : "57010", "city" : "BURBANK", "loc" : [ -96.846569, 42.763798 ], "pop" : 293, "state" : "SD" } +{ "_id" : "57012", "city" : "CANISTOTA", "loc" : [ -97.288901, 43.585639 ], "pop" : 1255, "state" : "SD" } +{ "_id" : "57013", "city" : "CANTON", "loc" : [ -96.593796, 43.303819 ], "pop" : 3210, "state" : "SD" } +{ "_id" : "57014", "city" : "CENTERVILLE", "loc" : [ -96.96363700000001, 43.117635 ], "pop" : 1048, "state" : "SD" } +{ "_id" : "57015", "city" : "CHANCELLOR", "loc" : [ -96.98269500000001, 43.407962 ], "pop" : 887, "state" : "SD" } +{ "_id" : "57016", "city" : "CHESTER", "loc" : [ -96.975883, 43.898077 ], "pop" : 799, "state" : "SD" } +{ "_id" : "57017", "city" : "COLMAN", "loc" : [ -96.818882, 43.955761 ], "pop" : 1013, "state" : "SD" } +{ "_id" : "57018", "city" : "COLTON", "loc" : [ -96.957202, 43.795102 ], "pop" : 1242, "state" : "SD" } +{ "_id" : "57020", "city" : "CROOKS", "loc" : [ -96.818259, 43.64509 ], "pop" : 1262, "state" : "SD" } +{ "_id" : "57021", "city" : "DAVIS", "loc" : [ -96.979206, 43.286365 ], "pop" : 357, "state" : "SD" } +{ "_id" : "57022", "city" : "DELL RAPIDS", "loc" : [ -96.72231499999999, 43.822759 ], "pop" : 3128, "state" : "SD" } +{ "_id" : "57024", "city" : "EGAN", "loc" : [ -96.649252, 43.986592 ], "pop" : 658, "state" : "SD" } +{ "_id" : "57025", "city" : "ELK POINT", "loc" : [ -96.686954, 42.738219 ], "pop" : 2698, "state" : "SD" } +{ "_id" : "57026", "city" : "ELKTON", "loc" : [ -96.50109500000001, 44.234984 ], "pop" : 853, "state" : "SD" } +{ "_id" : "57027", "city" : "FAIRVIEW", "loc" : [ -96.57426100000001, 43.208965 ], "pop" : 472, "state" : "SD" } +{ "_id" : "57028", "city" : "FLANDREAU", "loc" : [ -96.622184, 44.06578 ], "pop" : 3851, "state" : "SD" } +{ "_id" : "57029", "city" : "FREEMAN", "loc" : [ -97.46007299999999, 43.360501 ], "pop" : 2190, "state" : "SD" } +{ "_id" : "57030", "city" : "GARRETSON", "loc" : [ -96.519626, 43.71617 ], "pop" : 1546, "state" : "SD" } +{ "_id" : "57031", "city" : "GAYVILLE", "loc" : [ -97.18295000000001, 42.883516 ], "pop" : 572, "state" : "SD" } +{ "_id" : "57032", "city" : "HARRISBURG", "loc" : [ -96.68638900000001, 43.446021 ], "pop" : 3387, "state" : "SD" } +{ "_id" : "57033", "city" : "HARTFORD", "loc" : [ -96.950052, 43.615472 ], "pop" : 3110, "state" : "SD" } +{ "_id" : "57034", "city" : "HUDSON", "loc" : [ -96.53063, 43.128357 ], "pop" : 774, "state" : "SD" } +{ "_id" : "57035", "city" : "HUMBOLDT", "loc" : [ -97.06971, 43.612026 ], "pop" : 1090, "state" : "SD" } +{ "_id" : "57036", "city" : "HURLEY", "loc" : [ -97.190364, 43.289256 ], "pop" : 1124, "state" : "SD" } +{ "_id" : "57037", "city" : "IRENE", "loc" : [ -97.255797, 43.102683 ], "pop" : 1320, "state" : "SD" } +{ "_id" : "57038", "city" : "JEFFERSON", "loc" : [ -96.57839199999999, 42.601341 ], "pop" : 1262, "state" : "SD" } +{ "_id" : "57039", "city" : "LENNOX", "loc" : [ -96.88206099999999, 43.345066 ], "pop" : 2852, "state" : "SD" } +{ "_id" : "57040", "city" : "LESTERVILLE", "loc" : [ -97.548282, 43.054976 ], "pop" : 680, "state" : "SD" } +{ "_id" : "57042", "city" : "MADISON", "loc" : [ -97.11485999999999, 44.005434 ], "pop" : 7745, "state" : "SD" } +{ "_id" : "57043", "city" : "MARION", "loc" : [ -97.277066, 43.41878 ], "pop" : 1377, "state" : "SD" } +{ "_id" : "57044", "city" : "MECKLING", "loc" : [ -97.092249, 42.848994 ], "pop" : 228, "state" : "SD" } +{ "_id" : "57045", "city" : "MENNO", "loc" : [ -97.564986, 43.233968 ], "pop" : 1337, "state" : "SD" } +{ "_id" : "57046", "city" : "MISSION HILL", "loc" : [ -97.33487700000001, 42.983611 ], "pop" : 546, "state" : "SD" } +{ "_id" : "57047", "city" : "MONROE", "loc" : [ -97.21816699999999, 43.477883 ], "pop" : 239, "state" : "SD" } +{ "_id" : "57048", "city" : "MONTROSE", "loc" : [ -97.18849299999999, 43.706262 ], "pop" : 958, "state" : "SD" } +{ "_id" : "57049", "city" : "DAKOTA DUNES", "loc" : [ -96.50761, 42.532706 ], "pop" : 2491, "state" : "SD" } +{ "_id" : "57050", "city" : "NUNDA", "loc" : [ -96.994209, 44.152459 ], "pop" : 334, "state" : "SD" } +{ "_id" : "57051", "city" : "OLDHAM", "loc" : [ -97.269575, 44.245722 ], "pop" : 655, "state" : "SD" } +{ "_id" : "57052", "city" : "OLIVET", "loc" : [ -97.718355, 43.292811 ], "pop" : 555, "state" : "SD" } +{ "_id" : "57053", "city" : "PARKER", "loc" : [ -97.133298, 43.40204 ], "pop" : 1494, "state" : "SD" } +{ "_id" : "57054", "city" : "RAMONA", "loc" : [ -97.234889, 44.122887 ], "pop" : 641, "state" : "SD" } +{ "_id" : "57055", "city" : "RENNER", "loc" : [ -96.71192499999999, 43.636625 ], "pop" : 1444, "state" : "SD" } +{ "_id" : "57057", "city" : "RUTLAND", "loc" : [ -96.95185600000001, 44.068282 ], "pop" : 213, "state" : "SD" } +{ "_id" : "57058", "city" : "SALEM", "loc" : [ -97.379695, 43.735583 ], "pop" : 1963, "state" : "SD" } +{ "_id" : "57059", "city" : "SCOTLAND", "loc" : [ -97.729596, 43.121208 ], "pop" : 1611, "state" : "SD" } +{ "_id" : "57060", "city" : "SHERMAN", "loc" : [ -96.54439600000001, 43.798677 ], "pop" : 507, "state" : "SD" } +{ "_id" : "57061", "city" : "SINAI", "loc" : [ -97.054332, 44.239745 ], "pop" : 296, "state" : "SD" } +{ "_id" : "57062", "city" : "SPRINGFIELD", "loc" : [ -97.928825, 42.868694 ], "pop" : 2044, "state" : "SD" } +{ "_id" : "57063", "city" : "TABOR", "loc" : [ -97.69228200000001, 42.938262 ], "pop" : 853, "state" : "SD" } +{ "_id" : "57064", "city" : "TEA", "loc" : [ -96.817734, 43.471114 ], "pop" : 2885, "state" : "SD" } +{ "_id" : "57065", "city" : "TRENT", "loc" : [ -96.63257400000001, 43.894159 ], "pop" : 865, "state" : "SD" } +{ "_id" : "57066", "city" : "TYNDALL", "loc" : [ -97.863285, 42.990043 ], "pop" : 1451, "state" : "SD" } +{ "_id" : "57067", "city" : "UTICA", "loc" : [ -97.455095, 42.936629 ], "pop" : 1183, "state" : "SD" } +{ "_id" : "57068", "city" : "VALLEY SPRINGS", "loc" : [ -96.495637, 43.577306 ], "pop" : 1709, "state" : "SD" } +{ "_id" : "57069", "city" : "VERMILLION", "loc" : [ -96.92578399999999, 42.795109 ], "pop" : 11446, "state" : "SD" } +{ "_id" : "57070", "city" : "VIBORG", "loc" : [ -97.114048, 43.181497 ], "pop" : 1664, "state" : "SD" } +{ "_id" : "57071", "city" : "VOLGA", "loc" : [ -96.92514799999999, 44.322354 ], "pop" : 1562, "state" : "SD" } +{ "_id" : "57072", "city" : "VOLIN", "loc" : [ -97.22823099999999, 42.969617 ], "pop" : 782, "state" : "SD" } +{ "_id" : "57073", "city" : "WAKONDA", "loc" : [ -97.069374, 42.996001 ], "pop" : 938, "state" : "SD" } +{ "_id" : "57074", "city" : "WARD", "loc" : [ -96.481325, 44.155883 ], "pop" : 120, "state" : "SD" } +{ "_id" : "57075", "city" : "WENTWORTH", "loc" : [ -96.961456, 43.985242 ], "pop" : 394, "state" : "SD" } +{ "_id" : "57076", "city" : "WINFRED", "loc" : [ -97.30926599999999, 43.959511 ], "pop" : 424, "state" : "SD" } +{ "_id" : "57077", "city" : "WORTHING", "loc" : [ -96.75293499999999, 43.292531 ], "pop" : 882, "state" : "SD" } +{ "_id" : "57078", "city" : "YANKTON", "loc" : [ -97.398624, 42.882086 ], "pop" : 14765, "state" : "SD" } +{ "_id" : "57102", "city" : "SIOUX FALLS", "loc" : [ -96.726927, 43.546131 ], "pop" : 530, "state" : "SD" } +{ "_id" : "57103", "city" : "SIOUX FALLS", "loc" : [ -96.686415, 43.537386 ], "pop" : 32508, "state" : "SD" } +{ "_id" : "57104", "city" : "SIOUX FALLS", "loc" : [ -96.73753499999999, 43.551355 ], "pop" : 22081, "state" : "SD" } +{ "_id" : "57105", "city" : "SIOUX FALLS", "loc" : [ -96.73414099999999, 43.523972 ], "pop" : 26347, "state" : "SD" } +{ "_id" : "57106", "city" : "SIOUX FALLS", "loc" : [ -96.792376, 43.517912 ], "pop" : 16823, "state" : "SD" } +{ "_id" : "57107", "city" : "SIOUX FALLS", "loc" : [ -96.80281100000001, 43.556628 ], "pop" : 3331, "state" : "SD" } +{ "_id" : "57115", "city" : "BUFFALO RIDGE", "loc" : [ -96.834165, 43.516936 ], "pop" : 731, "state" : "SD" } +{ "_id" : "57116", "city" : "SIOUX FALLS", "loc" : [ -96.766199, 43.508535 ], "pop" : 426, "state" : "SD" } +{ "_id" : "57201", "city" : "WATERTOWN", "loc" : [ -97.123977, 44.904295 ], "pop" : 20148, "state" : "SD" } +{ "_id" : "57202", "city" : "WAVERLY", "loc" : [ -96.946744, 45.003209 ], "pop" : 163, "state" : "SD" } +{ "_id" : "57212", "city" : "ARLINGTON", "loc" : [ -97.06873400000001, 44.366769 ], "pop" : 358, "state" : "SD" } +{ "_id" : "57213", "city" : "ASTORIA", "loc" : [ -96.541634, 44.573515 ], "pop" : 370, "state" : "SD" } +{ "_id" : "57214", "city" : "BADGER", "loc" : [ -97.218368, 44.491802 ], "pop" : 354, "state" : "SD" } +{ "_id" : "57216", "city" : "BIG STONE CITY", "loc" : [ -96.56143400000001, 45.28504 ], "pop" : 1568, "state" : "SD" } +{ "_id" : "57217", "city" : "BRADLEY", "loc" : [ -97.638712, 45.075099 ], "pop" : 399, "state" : "SD" } +{ "_id" : "57218", "city" : "BRANDT", "loc" : [ -96.643545, 44.67383 ], "pop" : 655, "state" : "SD" } +{ "_id" : "57219", "city" : "BUTLER", "loc" : [ -97.746573, 45.308982 ], "pop" : 769, "state" : "SD" } +{ "_id" : "57220", "city" : "BRUCE", "loc" : [ -96.910984, 44.467453 ], "pop" : 929, "state" : "SD" } +{ "_id" : "57221", "city" : "BRYANT", "loc" : [ -97.453659, 44.598671 ], "pop" : 627, "state" : "SD" } +{ "_id" : "57223", "city" : "CASTLEWOOD", "loc" : [ -97.020432, 44.731339 ], "pop" : 1083, "state" : "SD" } +{ "_id" : "57224", "city" : "CLAIRE CITY", "loc" : [ -97.107274, 45.875522 ], "pop" : 394, "state" : "SD" } +{ "_id" : "57225", "city" : "CLARK", "loc" : [ -97.726536, 44.878 ], "pop" : 2062, "state" : "SD" } +{ "_id" : "57226", "city" : "ALTAMONT", "loc" : [ -96.700541, 44.763703 ], "pop" : 1786, "state" : "SD" } +{ "_id" : "57227", "city" : "CORONA", "loc" : [ -96.664897, 45.359483 ], "pop" : 613, "state" : "SD" } +{ "_id" : "57231", "city" : "DE SMET", "loc" : [ -97.56343200000001, 44.385169 ], "pop" : 1956, "state" : "SD" } +{ "_id" : "57232", "city" : "EDEN", "loc" : [ -97.37409100000001, 45.621074 ], "pop" : 318, "state" : "SD" } +{ "_id" : "57233", "city" : "ERWIN", "loc" : [ -97.410291, 44.491484 ], "pop" : 225, "state" : "SD" } +{ "_id" : "57234", "city" : "DEMPSTER", "loc" : [ -96.923678, 44.576998 ], "pop" : 903, "state" : "SD" } +{ "_id" : "57235", "city" : "FLORENCE", "loc" : [ -97.286643, 45.055388 ], "pop" : 664, "state" : "SD" } +{ "_id" : "57236", "city" : "GARDEN CITY", "loc" : [ -97.56802500000001, 44.947413 ], "pop" : 175, "state" : "SD" } +{ "_id" : "57237", "city" : "GARY", "loc" : [ -96.504362, 44.827022 ], "pop" : 733, "state" : "SD" } +{ "_id" : "57238", "city" : "BEMIS", "loc" : [ -96.811368, 44.886232 ], "pop" : 509, "state" : "SD" } +{ "_id" : "57239", "city" : "GRENVILLE", "loc" : [ -97.415457, 45.489673 ], "pop" : 334, "state" : "SD" } +{ "_id" : "57241", "city" : "HAYTI", "loc" : [ -97.230509, 44.664737 ], "pop" : 720, "state" : "SD" } +{ "_id" : "57242", "city" : "HAZEL", "loc" : [ -97.30829, 44.75717 ], "pop" : 496, "state" : "SD" } +{ "_id" : "57243", "city" : "HENRY", "loc" : [ -97.444216, 44.88576 ], "pop" : 435, "state" : "SD" } +{ "_id" : "57244", "city" : "HETLAND", "loc" : [ -97.141024, 44.367519 ], "pop" : 1069, "state" : "SD" } +{ "_id" : "57245", "city" : "KRANZBURG", "loc" : [ -96.947013, 44.879264 ], "pop" : 525, "state" : "SD" } +{ "_id" : "57246", "city" : "LABOLT", "loc" : [ -96.68920900000001, 45.041458 ], "pop" : 188, "state" : "SD" } +{ "_id" : "57247", "city" : "LAKE CITY", "loc" : [ -97.348131, 45.68991 ], "pop" : 401, "state" : "SD" } +{ "_id" : "57248", "city" : "LAKE NORDEN", "loc" : [ -97.200867, 44.584351 ], "pop" : 900, "state" : "SD" } +{ "_id" : "57249", "city" : "LAKE PRESTON", "loc" : [ -97.356283, 44.367298 ], "pop" : 1074, "state" : "SD" } +{ "_id" : "57251", "city" : "MARVIN", "loc" : [ -96.90996, 45.272651 ], "pop" : 146, "state" : "SD" } +{ "_id" : "57252", "city" : "MILBANK", "loc" : [ -96.62548, 45.206127 ], "pop" : 5235, "state" : "SD" } +{ "_id" : "57255", "city" : "NEW EFFINGTON", "loc" : [ -96.91498900000001, 45.865868 ], "pop" : 391, "state" : "SD" } +{ "_id" : "57256", "city" : "ORTLEY", "loc" : [ -97.176985, 45.340633 ], "pop" : 151, "state" : "SD" } +{ "_id" : "57257", "city" : "PEEVER", "loc" : [ -97.001205, 45.520647 ], "pop" : 992, "state" : "SD" } +{ "_id" : "57258", "city" : "RAYMOND", "loc" : [ -97.916781, 44.863651 ], "pop" : 415, "state" : "SD" } +{ "_id" : "57259", "city" : "ALBEE", "loc" : [ -96.562366, 45.022142 ], "pop" : 357, "state" : "SD" } +{ "_id" : "57260", "city" : "ROSHOLT", "loc" : [ -96.71741, 45.875315 ], "pop" : 841, "state" : "SD" } +{ "_id" : "57261", "city" : "ROSLYN", "loc" : [ -97.540105, 45.500564 ], "pop" : 533, "state" : "SD" } +{ "_id" : "57262", "city" : "AGENCY VILLAGE", "loc" : [ -97.02321999999999, 45.664413 ], "pop" : 4968, "state" : "SD" } +{ "_id" : "57263", "city" : "SOUTH SHORE", "loc" : [ -96.985885, 45.104919 ], "pop" : 487, "state" : "SD" } +{ "_id" : "57264", "city" : "STOCKHOLM", "loc" : [ -96.81059, 45.10309 ], "pop" : 213, "state" : "SD" } +{ "_id" : "57265", "city" : "STRANDBURG", "loc" : [ -96.79012899999999, 45.038872 ], "pop" : 133, "state" : "SD" } +{ "_id" : "57266", "city" : "SUMMIT", "loc" : [ -97.042654, 45.352128 ], "pop" : 469, "state" : "SD" } +{ "_id" : "57268", "city" : "TORONTO", "loc" : [ -96.70774, 44.578622 ], "pop" : 469, "state" : "SD" } +{ "_id" : "57269", "city" : "TWIN BROOKS", "loc" : [ -96.99560099999999, 45.211519 ], "pop" : 532, "state" : "SD" } +{ "_id" : "57270", "city" : "VEBLEN", "loc" : [ -97.31219299999999, 45.853508 ], "pop" : 765, "state" : "SD" } +{ "_id" : "57271", "city" : "VIENNA", "loc" : [ -97.545559, 44.690019 ], "pop" : 454, "state" : "SD" } +{ "_id" : "57272", "city" : "WALLACE", "loc" : [ -97.445751, 45.081542 ], "pop" : 276, "state" : "SD" } +{ "_id" : "57273", "city" : "WAUBAY", "loc" : [ -97.29498700000001, 45.37837 ], "pop" : 1437, "state" : "SD" } +{ "_id" : "57274", "city" : "LILY", "loc" : [ -97.515316, 45.322573 ], "pop" : 3194, "state" : "SD" } +{ "_id" : "57276", "city" : "WHITE", "loc" : [ -96.614963, 44.413237 ], "pop" : 1793, "state" : "SD" } +{ "_id" : "57278", "city" : "WILLOW LAKE", "loc" : [ -97.674747, 44.627225 ], "pop" : 661, "state" : "SD" } +{ "_id" : "57279", "city" : "WILMOT", "loc" : [ -96.85600599999999, 45.412487 ], "pop" : 1095, "state" : "SD" } +{ "_id" : "57301", "city" : "LOOMIS", "loc" : [ -98.02702600000001, 43.710921 ], "pop" : 16187, "state" : "SD" } +{ "_id" : "57311", "city" : "FARMER", "loc" : [ -97.782087, 43.623847 ], "pop" : 934, "state" : "SD" } +{ "_id" : "57312", "city" : "ALPENA", "loc" : [ -98.396191, 44.170907 ], "pop" : 414, "state" : "SD" } +{ "_id" : "57313", "city" : "ARMOUR", "loc" : [ -98.34137200000001, 43.316045 ], "pop" : 1118, "state" : "SD" } +{ "_id" : "57314", "city" : "FORESTBURG", "loc" : [ -97.953958, 44.035362 ], "pop" : 640, "state" : "SD" } +{ "_id" : "57315", "city" : "AVON", "loc" : [ -98.028261, 43.039725 ], "pop" : 1130, "state" : "SD" } +{ "_id" : "57316", "city" : "BANCROFT", "loc" : [ -97.77673299999999, 44.494419 ], "pop" : 200, "state" : "SD" } +{ "_id" : "57317", "city" : "BONESTEEL", "loc" : [ -98.987959, 43.069536 ], "pop" : 688, "state" : "SD" } +{ "_id" : "57319", "city" : "DOLTON", "loc" : [ -97.49590999999999, 43.554306 ], "pop" : 1055, "state" : "SD" } +{ "_id" : "57321", "city" : "CANOVA", "loc" : [ -97.53416300000001, 43.885517 ], "pop" : 506, "state" : "SD" } +{ "_id" : "57322", "city" : "CARPENTER", "loc" : [ -97.916825, 44.664768 ], "pop" : 101, "state" : "SD" } +{ "_id" : "57323", "city" : "CARTHAGE", "loc" : [ -97.71163199999999, 44.1496 ], "pop" : 380, "state" : "SD" } +{ "_id" : "57324", "city" : "CAVOUR", "loc" : [ -98.020797, 44.364951 ], "pop" : 444, "state" : "SD" } +{ "_id" : "57325", "city" : "CHAMBERLAIN", "loc" : [ -99.311819, 43.795295 ], "pop" : 3218, "state" : "SD" } +{ "_id" : "57328", "city" : "CORSICA", "loc" : [ -98.356358, 43.421319 ], "pop" : 1569, "state" : "SD" } +{ "_id" : "57329", "city" : "DANTE", "loc" : [ -98.174637, 42.996661 ], "pop" : 519, "state" : "SD" } +{ "_id" : "57330", "city" : "DELMONT", "loc" : [ -98.159612, 43.257261 ], "pop" : 468, "state" : "SD" } +{ "_id" : "57331", "city" : "DIMOCK", "loc" : [ -97.9988, 43.470476 ], "pop" : 426, "state" : "SD" } +{ "_id" : "57332", "city" : "EMERY", "loc" : [ -97.64748899999999, 43.565647 ], "pop" : 888, "state" : "SD" } +{ "_id" : "57334", "city" : "ETHAN", "loc" : [ -98.059074, 43.542653 ], "pop" : 975, "state" : "SD" } +{ "_id" : "57335", "city" : "FAIRFAX", "loc" : [ -98.83075700000001, 43.035103 ], "pop" : 423, "state" : "SD" } +{ "_id" : "57337", "city" : "FEDORA", "loc" : [ -97.78900299999999, 43.984125 ], "pop" : 288, "state" : "SD" } +{ "_id" : "57339", "city" : "FORT THOMPSON", "loc" : [ -99.397305, 44.051695 ], "pop" : 1495, "state" : "SD" } +{ "_id" : "57340", "city" : "FULTON", "loc" : [ -97.871218, 43.758767 ], "pop" : 572, "state" : "SD" } +{ "_id" : "57341", "city" : "GANN VALLEY", "loc" : [ -99.054334, 44.069303 ], "pop" : 264, "state" : "SD" } +{ "_id" : "57342", "city" : "GEDDES", "loc" : [ -98.69256, 43.259677 ], "pop" : 725, "state" : "SD" } +{ "_id" : "57344", "city" : "HARRISON", "loc" : [ -98.523338, 43.454923 ], "pop" : 233, "state" : "SD" } +{ "_id" : "57345", "city" : "HIGHMORE", "loc" : [ -99.45434899999999, 44.532604 ], "pop" : 1652, "state" : "SD" } +{ "_id" : "57348", "city" : "HITCHCOCK", "loc" : [ -98.450914, 44.583444 ], "pop" : 501, "state" : "SD" } +{ "_id" : "57349", "city" : "ROSWELL", "loc" : [ -97.516012, 44.029296 ], "pop" : 2098, "state" : "SD" } +{ "_id" : "57350", "city" : "HURON", "loc" : [ -98.21629299999999, 44.359022 ], "pop" : 15277, "state" : "SD" } +{ "_id" : "57353", "city" : "IROQUOIS", "loc" : [ -97.85417200000001, 44.345517 ], "pop" : 576, "state" : "SD" } +{ "_id" : "57354", "city" : "KAYLOR", "loc" : [ -97.820094, 43.202393 ], "pop" : 223, "state" : "SD" } +{ "_id" : "57355", "city" : "KIMBALL", "loc" : [ -98.93430499999999, 43.712881 ], "pop" : 1546, "state" : "SD" } +{ "_id" : "57356", "city" : "LAKE ANDES", "loc" : [ -98.49635499999999, 43.130288 ], "pop" : 2556, "state" : "SD" } +{ "_id" : "57357", "city" : "RAVINIA", "loc" : [ -98.426413, 43.136123 ], "pop" : 79, "state" : "SD" } +{ "_id" : "57358", "city" : "LANE", "loc" : [ -98.406496, 44.067383 ], "pop" : 152, "state" : "SD" } +{ "_id" : "57359", "city" : "LETCHER", "loc" : [ -98.174279, 43.892324 ], "pop" : 912, "state" : "SD" } +{ "_id" : "57361", "city" : "MARTY", "loc" : [ -98.42242899999999, 42.97639 ], "pop" : 306, "state" : "SD" } +{ "_id" : "57362", "city" : "MILLER", "loc" : [ -98.989395, 44.496644 ], "pop" : 2938, "state" : "SD" } +{ "_id" : "57363", "city" : "MOUNT VERNON", "loc" : [ -98.263288, 43.7204 ], "pop" : 731, "state" : "SD" } +{ "_id" : "57364", "city" : "NEW HOLLAND", "loc" : [ -98.628697, 43.431042 ], "pop" : 358, "state" : "SD" } +{ "_id" : "57366", "city" : "PARKSTON", "loc" : [ -97.96782399999999, 43.397796 ], "pop" : 2231, "state" : "SD" } +{ "_id" : "57368", "city" : "PLANKINTON", "loc" : [ -98.46939500000001, 43.737287 ], "pop" : 1129, "state" : "SD" } +{ "_id" : "57369", "city" : "ACADEMY", "loc" : [ -98.889656, 43.40242 ], "pop" : 2425, "state" : "SD" } +{ "_id" : "57370", "city" : "PUKWANA", "loc" : [ -99.17788400000001, 43.778326 ], "pop" : 577, "state" : "SD" } +{ "_id" : "57371", "city" : "REE HEIGHTS", "loc" : [ -99.22864, 44.560275 ], "pop" : 288, "state" : "SD" } +{ "_id" : "57373", "city" : "SAINT LAWRENCE", "loc" : [ -98.875427, 44.521523 ], "pop" : 425, "state" : "SD" } +{ "_id" : "57374", "city" : "SPENCER", "loc" : [ -97.59361, 43.755684 ], "pop" : 658, "state" : "SD" } +{ "_id" : "57375", "city" : "STICKNEY", "loc" : [ -98.508843, 43.58422 ], "pop" : 1099, "state" : "SD" } +{ "_id" : "57376", "city" : "TRIPP", "loc" : [ -97.97128499999999, 43.240377 ], "pop" : 1128, "state" : "SD" } +{ "_id" : "57379", "city" : "VIRGIL", "loc" : [ -98.392146, 44.325582 ], "pop" : 167, "state" : "SD" } +{ "_id" : "57380", "city" : "WAGNER", "loc" : [ -98.281876, 43.081931 ], "pop" : 2665, "state" : "SD" } +{ "_id" : "57381", "city" : "WESSINGTON", "loc" : [ -98.691982, 44.41285 ], "pop" : 618, "state" : "SD" } +{ "_id" : "57382", "city" : "WESSINGTON SPRIN", "loc" : [ -98.611625, 44.069935 ], "pop" : 1864, "state" : "SD" } +{ "_id" : "57383", "city" : "WHITE LAKE", "loc" : [ -98.70761299999999, 43.756441 ], "pop" : 717, "state" : "SD" } +{ "_id" : "57384", "city" : "WOLSEY", "loc" : [ -98.474251, 44.399072 ], "pop" : 751, "state" : "SD" } +{ "_id" : "57385", "city" : "WOONSOCKET", "loc" : [ -98.24301699999999, 44.057186 ], "pop" : 1471, "state" : "SD" } +{ "_id" : "57386", "city" : "YALE", "loc" : [ -97.99324900000001, 44.495591 ], "pop" : 462, "state" : "SD" } +{ "_id" : "57401", "city" : "ABERDEEN", "loc" : [ -98.485642, 45.466109 ], "pop" : 28786, "state" : "SD" } +{ "_id" : "57420", "city" : "AKASKA", "loc" : [ -100.118614, 45.332447 ], "pop" : 52, "state" : "SD" } +{ "_id" : "57421", "city" : "AMHERST", "loc" : [ -97.93007799999999, 45.707426 ], "pop" : 227, "state" : "SD" } +{ "_id" : "57422", "city" : "ANDOVER", "loc" : [ -97.917497, 45.422171 ], "pop" : 348, "state" : "SD" } +{ "_id" : "57424", "city" : "ATHOL", "loc" : [ -98.442549, 45.012833 ], "pop" : 306, "state" : "SD" } +{ "_id" : "57426", "city" : "BARNARD", "loc" : [ -98.55337900000001, 45.720469 ], "pop" : 172, "state" : "SD" } +{ "_id" : "57427", "city" : "BATH", "loc" : [ -98.355209, 45.456352 ], "pop" : 593, "state" : "SD" } +{ "_id" : "57428", "city" : "BOWDLE", "loc" : [ -99.63597799999999, 45.432881 ], "pop" : 882, "state" : "SD" } +{ "_id" : "57429", "city" : "BRENTFORD", "loc" : [ -98.319281, 45.153063 ], "pop" : 257, "state" : "SD" } +{ "_id" : "57430", "city" : "BRITTON", "loc" : [ -97.74183499999999, 45.802304 ], "pop" : 2507, "state" : "SD" } +{ "_id" : "57432", "city" : "CLAREMONT", "loc" : [ -98.040367, 45.666149 ], "pop" : 400, "state" : "SD" } +{ "_id" : "57433", "city" : "COLUMBIA", "loc" : [ -98.295152, 45.671721 ], "pop" : 585, "state" : "SD" } +{ "_id" : "57434", "city" : "VERDON", "loc" : [ -98.034323, 45.155125 ], "pop" : 611, "state" : "SD" } +{ "_id" : "57435", "city" : "CRESBARD", "loc" : [ -98.941124, 45.169125 ], "pop" : 312, "state" : "SD" } +{ "_id" : "57436", "city" : "DOLAND", "loc" : [ -98.09470899999999, 44.81587 ], "pop" : 997, "state" : "SD" } +{ "_id" : "57437", "city" : "ARTAS", "loc" : [ -99.615926, 45.769768 ], "pop" : 1753, "state" : "SD" } +{ "_id" : "57438", "city" : "MIRANDA", "loc" : [ -99.13405400000001, 45.06845 ], "pop" : 1593, "state" : "SD" } +{ "_id" : "57440", "city" : "FRANKFORT", "loc" : [ -98.293496, 44.808416 ], "pop" : 533, "state" : "SD" } +{ "_id" : "57441", "city" : "FREDERICK", "loc" : [ -98.51756399999999, 45.849332 ], "pop" : 524, "state" : "SD" } +{ "_id" : "57442", "city" : "GETTYSBURG", "loc" : [ -99.976626, 45.02588 ], "pop" : 2065, "state" : "SD" } +{ "_id" : "57445", "city" : "GROTON", "loc" : [ -98.105814, 45.450345 ], "pop" : 1814, "state" : "SD" } +{ "_id" : "57446", "city" : "HECLA", "loc" : [ -98.191774, 45.872515 ], "pop" : 754, "state" : "SD" } +{ "_id" : "57448", "city" : "HOSMER", "loc" : [ -99.48574499999999, 45.568988 ], "pop" : 454, "state" : "SD" } +{ "_id" : "57449", "city" : "HOUGHTON", "loc" : [ -98.095186, 45.796746 ], "pop" : 147, "state" : "SD" } +{ "_id" : "57450", "city" : "HOVEN", "loc" : [ -99.776286, 45.227799 ], "pop" : 677, "state" : "SD" } +{ "_id" : "57451", "city" : "IPSWICH", "loc" : [ -99.014807, 45.448905 ], "pop" : 1771, "state" : "SD" } +{ "_id" : "57452", "city" : "JAVA", "loc" : [ -99.83515300000001, 45.413541 ], "pop" : 518, "state" : "SD" } +{ "_id" : "57454", "city" : "LANGFORD", "loc" : [ -97.792547, 45.617381 ], "pop" : 626, "state" : "SD" } +{ "_id" : "57455", "city" : "LEBANON", "loc" : [ -99.73657900000001, 45.012318 ], "pop" : 259, "state" : "SD" } +{ "_id" : "57456", "city" : "LEOLA", "loc" : [ -98.901544, 45.732265 ], "pop" : 1192, "state" : "SD" } +{ "_id" : "57457", "city" : "LONGLAKE", "loc" : [ -99.250677, 45.796812 ], "pop" : 378, "state" : "SD" } +{ "_id" : "57460", "city" : "MANSFIELD", "loc" : [ -98.606568, 45.226727 ], "pop" : 92, "state" : "SD" } +{ "_id" : "57461", "city" : "MELLETTE", "loc" : [ -98.48237, 45.16312 ], "pop" : 362, "state" : "SD" } +{ "_id" : "57462", "city" : "MINA", "loc" : [ -98.756581, 45.439116 ], "pop" : 515, "state" : "SD" } +{ "_id" : "57465", "city" : "NORTHVILLE", "loc" : [ -98.65885299999999, 45.161112 ], "pop" : 328, "state" : "SD" } +{ "_id" : "57466", "city" : "ONAKA", "loc" : [ -99.45505199999999, 45.196527 ], "pop" : 143, "state" : "SD" } +{ "_id" : "57467", "city" : "ORIENT", "loc" : [ -99.10578700000001, 44.834347 ], "pop" : 441, "state" : "SD" } +{ "_id" : "57468", "city" : "PIERPONT", "loc" : [ -97.812844, 45.495983 ], "pop" : 328, "state" : "SD" } +{ "_id" : "57469", "city" : "REDFIELD", "loc" : [ -98.511234, 44.871853 ], "pop" : 4033, "state" : "SD" } +{ "_id" : "57470", "city" : "ROCKHAM", "loc" : [ -98.768683, 44.971579 ], "pop" : 237, "state" : "SD" } +{ "_id" : "57471", "city" : "ROSCOE", "loc" : [ -99.33263100000001, 45.427119 ], "pop" : 673, "state" : "SD" } +{ "_id" : "57472", "city" : "SELBY", "loc" : [ -100.054067, 45.478587 ], "pop" : 1284, "state" : "SD" } +{ "_id" : "57473", "city" : "SENECA", "loc" : [ -99.46098600000001, 45.026191 ], "pop" : 246, "state" : "SD" } +{ "_id" : "57474", "city" : "STRATFORD", "loc" : [ -98.27915299999999, 45.286595 ], "pop" : 418, "state" : "SD" } +{ "_id" : "57475", "city" : "TOLSTOY", "loc" : [ -99.617553, 45.170199 ], "pop" : 189, "state" : "SD" } +{ "_id" : "57476", "city" : "TULARE", "loc" : [ -98.553926, 44.730489 ], "pop" : 526, "state" : "SD" } +{ "_id" : "57477", "city" : "TURTON", "loc" : [ -98.09964100000001, 45.037938 ], "pop" : 154, "state" : "SD" } +{ "_id" : "57479", "city" : "WARNER", "loc" : [ -98.475697, 45.348627 ], "pop" : 1060, "state" : "SD" } +{ "_id" : "57481", "city" : "WETONKA", "loc" : [ -98.585623, 45.625025 ], "pop" : 337, "state" : "SD" } +{ "_id" : "57483", "city" : "ZELL", "loc" : [ -98.831746, 44.854624 ], "pop" : 131, "state" : "SD" } +{ "_id" : "57501", "city" : "PIERRE", "loc" : [ -100.321057, 44.369514 ], "pop" : 14138, "state" : "SD" } +{ "_id" : "57520", "city" : "AGAR", "loc" : [ -100.071238, 44.839345 ], "pop" : 89, "state" : "SD" } +{ "_id" : "57521", "city" : "BELVIDERE", "loc" : [ -101.238691, 43.886031 ], "pop" : 177, "state" : "SD" } +{ "_id" : "57522", "city" : "BLUNT", "loc" : [ -99.94627800000001, 44.502572 ], "pop" : 484, "state" : "SD" } +{ "_id" : "57523", "city" : "LUCAS", "loc" : [ -99.268963, 43.210602 ], "pop" : 1258, "state" : "SD" } +{ "_id" : "57526", "city" : "CARTER", "loc" : [ -100.172958, 43.368487 ], "pop" : 118, "state" : "SD" } +{ "_id" : "57527", "city" : "CEDARBUTTE", "loc" : [ -101.131585, 43.64731 ], "pop" : 208, "state" : "SD" } +{ "_id" : "57528", "city" : "COLOME", "loc" : [ -99.693273, 43.227334 ], "pop" : 771, "state" : "SD" } +{ "_id" : "57529", "city" : "DALLAS", "loc" : [ -99.513994, 43.235075 ], "pop" : 167, "state" : "SD" } +{ "_id" : "57531", "city" : "DRAPER", "loc" : [ -100.508514, 43.926035 ], "pop" : 304, "state" : "SD" } +{ "_id" : "57532", "city" : "FORT PIERRE", "loc" : [ -100.404323, 44.342587 ], "pop" : 2179, "state" : "SD" } +{ "_id" : "57533", "city" : "DIXON", "loc" : [ -99.43021400000001, 43.226908 ], "pop" : 2401, "state" : "SD" } +{ "_id" : "57534", "city" : "HAMILL", "loc" : [ -99.69175199999999, 43.643942 ], "pop" : 78, "state" : "SD" } +{ "_id" : "57536", "city" : "HARROLD", "loc" : [ -99.73816600000001, 44.521476 ], "pop" : 195, "state" : "SD" } +{ "_id" : "57537", "city" : "HAYES", "loc" : [ -100.735938, 44.421898 ], "pop" : 191, "state" : "SD" } +{ "_id" : "57538", "city" : "HERRICK", "loc" : [ -99.21726700000001, 43.101186 ], "pop" : 337, "state" : "SD" } +{ "_id" : "57540", "city" : "HOLABIRD", "loc" : [ -99.59429900000001, 44.517327 ], "pop" : 44, "state" : "SD" } +{ "_id" : "57541", "city" : "IDEAL", "loc" : [ -99.927949, 43.559612 ], "pop" : 473, "state" : "SD" } +{ "_id" : "57542", "city" : "IONA", "loc" : [ -99.488073, 43.575756 ], "pop" : 146, "state" : "SD" } +{ "_id" : "57543", "city" : "KADOKA", "loc" : [ -101.552272, 43.84457 ], "pop" : 1024, "state" : "SD" } +{ "_id" : "57544", "city" : "KENNEBEC", "loc" : [ -99.850191, 43.892139 ], "pop" : 495, "state" : "SD" } +{ "_id" : "57545", "city" : "KEYAPAHA", "loc" : [ -100.163958, 43.073497 ], "pop" : 48, "state" : "SD" } +{ "_id" : "57547", "city" : "LONG VALLEY", "loc" : [ -101.382145, 43.569784 ], "pop" : 214, "state" : "SD" } +{ "_id" : "57548", "city" : "LOWER BRULE", "loc" : [ -99.613896, 44.093692 ], "pop" : 1118, "state" : "SD" } +{ "_id" : "57551", "city" : "VETAL", "loc" : [ -101.740814, 43.178543 ], "pop" : 2159, "state" : "SD" } +{ "_id" : "57552", "city" : "OTTUMWA", "loc" : [ -101.292442, 44.237443 ], "pop" : 789, "state" : "SD" } +{ "_id" : "57553", "city" : "MILESVILLE", "loc" : [ -101.752276, 44.428259 ], "pop" : 191, "state" : "SD" } +{ "_id" : "57555", "city" : "MISSION", "loc" : [ -100.595364, 43.285017 ], "pop" : 3169, "state" : "SD" } +{ "_id" : "57557", "city" : "MISSION RIDGE", "loc" : [ -100.894553, 44.623851 ], "pop" : 83, "state" : "SD" } +{ "_id" : "57559", "city" : "MURDO", "loc" : [ -100.712107, 43.896115 ], "pop" : 855, "state" : "SD" } +{ "_id" : "57560", "city" : "NORRIS", "loc" : [ -101.151664, 43.466176 ], "pop" : 322, "state" : "SD" } +{ "_id" : "57562", "city" : "OKATON", "loc" : [ -100.935054, 43.934157 ], "pop" : 165, "state" : "SD" } +{ "_id" : "57564", "city" : "ONIDA", "loc" : [ -100.095667, 44.712543 ], "pop" : 1500, "state" : "SD" } +{ "_id" : "57566", "city" : "PARMELEE", "loc" : [ -101.008089, 43.311716 ], "pop" : 1272, "state" : "SD" } +{ "_id" : "57567", "city" : "PHILIP", "loc" : [ -101.687611, 44.055006 ], "pop" : 1644, "state" : "SD" } +{ "_id" : "57568", "city" : "PRESHO", "loc" : [ -100.074645, 43.899538 ], "pop" : 897, "state" : "SD" } +{ "_id" : "57569", "city" : "RELIANCE", "loc" : [ -99.485668, 43.830241 ], "pop" : 790, "state" : "SD" } +{ "_id" : "57571", "city" : "SAINT CHARLES", "loc" : [ -99.090969, 43.108893 ], "pop" : 85, "state" : "SD" } +{ "_id" : "57572", "city" : "SAINT FRANCIS", "loc" : [ -100.88502, 43.191017 ], "pop" : 3917, "state" : "SD" } +{ "_id" : "57574", "city" : "TUTHILL", "loc" : [ -101.470116, 43.119623 ], "pop" : 286, "state" : "SD" } +{ "_id" : "57576", "city" : "VIVIAN", "loc" : [ -100.285989, 43.95352 ], "pop" : 192, "state" : "SD" } +{ "_id" : "57577", "city" : "WANBLEE", "loc" : [ -101.721856, 43.55893 ], "pop" : 1269, "state" : "SD" } +{ "_id" : "57578", "city" : "WEWELA", "loc" : [ -99.747317, 43.079352 ], "pop" : 207, "state" : "SD" } +{ "_id" : "57579", "city" : "WHITE RIVER", "loc" : [ -100.74487, 43.56662 ], "pop" : 1259, "state" : "SD" } +{ "_id" : "57580", "city" : "CLEARFIELD", "loc" : [ -99.861907, 43.355504 ], "pop" : 5111, "state" : "SD" } +{ "_id" : "57584", "city" : "WITTEN", "loc" : [ -100.078291, 43.44982 ], "pop" : 118, "state" : "SD" } +{ "_id" : "57585", "city" : "WOOD", "loc" : [ -100.437929, 43.536599 ], "pop" : 342, "state" : "SD" } +{ "_id" : "57601", "city" : "MOBRIDGE", "loc" : [ -100.431488, 45.540723 ], "pop" : 4099, "state" : "SD" } +{ "_id" : "57620", "city" : "BISON", "loc" : [ -102.482707, 45.516126 ], "pop" : 710, "state" : "SD" } +{ "_id" : "57622", "city" : "CHERRY CREEK", "loc" : [ -101.65178, 44.621018 ], "pop" : 715, "state" : "SD" } +{ "_id" : "57623", "city" : "DUPREE", "loc" : [ -101.63368, 45.007851 ], "pop" : 1441, "state" : "SD" } +{ "_id" : "57626", "city" : "FAITH", "loc" : [ -102.054142, 44.992609 ], "pop" : 660, "state" : "SD" } +{ "_id" : "57628", "city" : "FIRESTEEL", "loc" : [ -101.223461, 45.430736 ], "pop" : 50, "state" : "SD" } +{ "_id" : "57629", "city" : "GLAD VALLEY", "loc" : [ -101.795168, 45.43696 ], "pop" : 64, "state" : "SD" } +{ "_id" : "57630", "city" : "GLENCROSS", "loc" : [ -100.894417, 45.450549 ], "pop" : 56, "state" : "SD" } +{ "_id" : "57631", "city" : "GLENHAM", "loc" : [ -100.27156, 45.53351 ], "pop" : 134, "state" : "SD" } +{ "_id" : "57632", "city" : "HERREID", "loc" : [ -100.048983, 45.845164 ], "pop" : 829, "state" : "SD" } +{ "_id" : "57633", "city" : "ISABEL", "loc" : [ -101.273637, 45.064016 ], "pop" : 3606, "state" : "SD" } +{ "_id" : "57634", "city" : "KELDRON", "loc" : [ -101.939465, 45.902221 ], "pop" : 72, "state" : "SD" } +{ "_id" : "57638", "city" : "LEMMON", "loc" : [ -102.192772, 45.915892 ], "pop" : 2127, "state" : "SD" } +{ "_id" : "57640", "city" : "LODGEPOLE", "loc" : [ -102.759917, 45.823193 ], "pop" : 216, "state" : "SD" } +{ "_id" : "57641", "city" : "MC INTOSH", "loc" : [ -101.500393, 45.81244 ], "pop" : 719, "state" : "SD" } +{ "_id" : "57642", "city" : "MC LAUGHLIN", "loc" : [ -100.877596, 45.748884 ], "pop" : 2545, "state" : "SD" } +{ "_id" : "57643", "city" : "MAHTO", "loc" : [ -100.658897, 45.767644 ], "pop" : 31, "state" : "SD" } +{ "_id" : "57644", "city" : "MEADOW", "loc" : [ -102.284425, 45.353769 ], "pop" : 530, "state" : "SD" } +{ "_id" : "57645", "city" : "MORRISTOWN", "loc" : [ -101.699838, 45.900642 ], "pop" : 190, "state" : "SD" } +{ "_id" : "57646", "city" : "MOUND CITY", "loc" : [ -100.047856, 45.678645 ], "pop" : 548, "state" : "SD" } +{ "_id" : "57647", "city" : "PARADE", "loc" : [ -100.743399, 45.108068 ], "pop" : 819, "state" : "SD" } +{ "_id" : "57648", "city" : "POLLOCK", "loc" : [ -100.287518, 45.889043 ], "pop" : 493, "state" : "SD" } +{ "_id" : "57649", "city" : "PRAIRIE CITY", "loc" : [ -102.80847, 45.581342 ], "pop" : 172, "state" : "SD" } +{ "_id" : "57650", "city" : "RALPH", "loc" : [ -103.035552, 45.855365 ], "pop" : 101, "state" : "SD" } +{ "_id" : "57651", "city" : "REVA", "loc" : [ -103.069163, 45.527653 ], "pop" : 332, "state" : "SD" } +{ "_id" : "57653", "city" : "SHADEHILL", "loc" : [ -102.189131, 45.669855 ], "pop" : 49, "state" : "SD" } +{ "_id" : "57656", "city" : "TIMBER LAKE", "loc" : [ -101.035077, 45.392737 ], "pop" : 939, "state" : "SD" } +{ "_id" : "57657", "city" : "TRAIL CITY", "loc" : [ -100.682902, 45.440082 ], "pop" : 53, "state" : "SD" } +{ "_id" : "57658", "city" : "WAKPALA", "loc" : [ -100.533176, 45.700617 ], "pop" : 582, "state" : "SD" } +{ "_id" : "57660", "city" : "WATAUGA", "loc" : [ -101.512936, 45.927593 ], "pop" : 56, "state" : "SD" } +{ "_id" : "57701", "city" : "ROCKERVILLE", "loc" : [ -103.200259, 44.077041 ], "pop" : 45328, "state" : "SD" } +{ "_id" : "57702", "city" : "SILVER CITY", "loc" : [ -103.283406, 44.069796 ], "pop" : 20904, "state" : "SD" } +{ "_id" : "57706", "city" : "ELLSWORTH AFB", "loc" : [ -103.07591, 44.144655 ], "pop" : 6355, "state" : "SD" } +{ "_id" : "57708", "city" : "BETHLEHEM", "loc" : [ -103.461246, 44.288967 ], "pop" : 374, "state" : "SD" } +{ "_id" : "57714", "city" : "ALLEN", "loc" : [ -101.932858, 43.290818 ], "pop" : 761, "state" : "SD" } +{ "_id" : "57716", "city" : "DENBY", "loc" : [ -102.173776, 43.078962 ], "pop" : 435, "state" : "SD" } +{ "_id" : "57717", "city" : "BELLE FOURCHE", "loc" : [ -103.839601, 44.672281 ], "pop" : 5841, "state" : "SD" } +{ "_id" : "57718", "city" : "BLACK HAWK", "loc" : [ -103.348634, 44.151173 ], "pop" : 7418, "state" : "SD" } +{ "_id" : "57719", "city" : "BOX ELDER", "loc" : [ -103.068237, 44.119858 ], "pop" : 3690, "state" : "SD" } +{ "_id" : "57720", "city" : "BUFFALO", "loc" : [ -103.582605, 45.574001 ], "pop" : 913, "state" : "SD" } +{ "_id" : "57722", "city" : "BUFFALO GAP", "loc" : [ -103.315749, 43.495762 ], "pop" : 302, "state" : "SD" } +{ "_id" : "57724", "city" : "SKY RANCH", "loc" : [ -103.963232, 45.595289 ], "pop" : 258, "state" : "SD" } +{ "_id" : "57725", "city" : "CAPUTA", "loc" : [ -103.023406, 43.980116 ], "pop" : 578, "state" : "SD" } +{ "_id" : "57729", "city" : "CREIGHTON", "loc" : [ -102.177043, 44.283087 ], "pop" : 127, "state" : "SD" } +{ "_id" : "57730", "city" : "CRAZY HORSE", "loc" : [ -103.618465, 43.740886 ], "pop" : 4781, "state" : "SD" } +{ "_id" : "57732", "city" : "DEADWOOD", "loc" : [ -103.699939, 44.356628 ], "pop" : 2726, "state" : "SD" } +{ "_id" : "57735", "city" : "EDGEMONT", "loc" : [ -103.811018, 43.287361 ], "pop" : 1264, "state" : "SD" } +{ "_id" : "57736", "city" : "ELM SPRINGS", "loc" : [ -102.631208, 44.239743 ], "pop" : 222, "state" : "SD" } +{ "_id" : "57737", "city" : "ENNING", "loc" : [ -102.6208, 44.538884 ], "pop" : 275, "state" : "SD" } +{ "_id" : "57738", "city" : "FAIRBURN", "loc" : [ -103.213335, 43.66228 ], "pop" : 203, "state" : "SD" } +{ "_id" : "57741", "city" : "FORT MEADE", "loc" : [ -103.47233, 44.409097 ], "pop" : 124, "state" : "SD" } +{ "_id" : "57742", "city" : "FRUITDALE", "loc" : [ -103.689568, 44.660039 ], "pop" : 234, "state" : "SD" } +{ "_id" : "57744", "city" : "HERMOSA", "loc" : [ -103.20596, 43.818845 ], "pop" : 919, "state" : "SD" } +{ "_id" : "57745", "city" : "HILL CITY", "loc" : [ -103.578158, 43.93768 ], "pop" : 1671, "state" : "SD" } +{ "_id" : "57747", "city" : "HOT SPRINGS", "loc" : [ -103.476555, 43.422308 ], "pop" : 5467, "state" : "SD" } +{ "_id" : "57748", "city" : "PLAINVIEW", "loc" : [ -102.215763, 44.534952 ], "pop" : 153, "state" : "SD" } +{ "_id" : "57750", "city" : "INTERIOR", "loc" : [ -101.964238, 43.731892 ], "pop" : 127, "state" : "SD" } +{ "_id" : "57751", "city" : "KEYSTONE", "loc" : [ -103.335235, 43.969604 ], "pop" : 2573, "state" : "SD" } +{ "_id" : "57752", "city" : "KYLE", "loc" : [ -102.212419, 43.439437 ], "pop" : 1424, "state" : "SD" } +{ "_id" : "57754", "city" : "SPEARFISH CANYON", "loc" : [ -103.769841, 44.349012 ], "pop" : 4626, "state" : "SD" } +{ "_id" : "57755", "city" : "LUDLOW", "loc" : [ -103.31115, 45.874655 ], "pop" : 142, "state" : "SD" } +{ "_id" : "57756", "city" : "MANDERSON", "loc" : [ -102.374493, 43.309844 ], "pop" : 1027, "state" : "SD" } +{ "_id" : "57757", "city" : "MARCUS", "loc" : [ -102.330697, 44.674678 ], "pop" : 28, "state" : "SD" } +{ "_id" : "57758", "city" : "MUD BUTTE", "loc" : [ -102.803129, 45.031046 ], "pop" : 104, "state" : "SD" } +{ "_id" : "57759", "city" : "NEMO", "loc" : [ -103.544863, 44.209718 ], "pop" : 393, "state" : "SD" } +{ "_id" : "57760", "city" : "NEWELL", "loc" : [ -103.391359, 44.740979 ], "pop" : 1223, "state" : "SD" } +{ "_id" : "57761", "city" : "NEW UNDERWOOD", "loc" : [ -102.813635, 44.087354 ], "pop" : 763, "state" : "SD" } +{ "_id" : "57762", "city" : "NISLAND", "loc" : [ -103.540176, 44.666539 ], "pop" : 313, "state" : "SD" } +{ "_id" : "57763", "city" : "OELRICHS", "loc" : [ -103.216181, 43.155063 ], "pop" : 284, "state" : "SD" } +{ "_id" : "57765", "city" : "OPAL", "loc" : [ -102.477752, 44.867111 ], "pop" : 235, "state" : "SD" } +{ "_id" : "57766", "city" : "ORAL", "loc" : [ -103.183215, 43.387587 ], "pop" : 265, "state" : "SD" } +{ "_id" : "57767", "city" : "OWANKA", "loc" : [ -102.562776, 44.063078 ], "pop" : 69, "state" : "SD" } +{ "_id" : "57769", "city" : "PIEDMONT", "loc" : [ -103.368818, 44.228744 ], "pop" : 1337, "state" : "SD" } +{ "_id" : "57770", "city" : "PINE RIDGE", "loc" : [ -102.598352, 43.112401 ], "pop" : 5720, "state" : "SD" } +{ "_id" : "57772", "city" : "PORCUPINE", "loc" : [ -102.223448, 43.293979 ], "pop" : 470, "state" : "SD" } +{ "_id" : "57774", "city" : "PROVO", "loc" : [ -103.866588, 43.173599 ], "pop" : 32, "state" : "SD" } +{ "_id" : "57775", "city" : "COTTONWOOD", "loc" : [ -102.069706, 44.07721 ], "pop" : 89, "state" : "SD" } +{ "_id" : "57777", "city" : "REDOWL", "loc" : [ -102.65923, 44.720224 ], "pop" : 16, "state" : "SD" } +{ "_id" : "57778", "city" : "ROCHFORD", "loc" : [ -103.657621, 44.072318 ], "pop" : 251, "state" : "SD" } +{ "_id" : "57779", "city" : "SAINT ONGE", "loc" : [ -103.734426, 44.552225 ], "pop" : 317, "state" : "SD" } +{ "_id" : "57780", "city" : "SCENIC", "loc" : [ -102.535309, 43.799368 ], "pop" : 128, "state" : "SD" } +{ "_id" : "57782", "city" : "SMITHWICK", "loc" : [ -103.198826, 43.26837 ], "pop" : 15, "state" : "SD" } +{ "_id" : "57783", "city" : "SPEARFISH", "loc" : [ -103.864962, 44.494625 ], "pop" : 11088, "state" : "SD" } +{ "_id" : "57785", "city" : "HEREFORD", "loc" : [ -103.477158, 44.413077 ], "pop" : 8209, "state" : "SD" } +{ "_id" : "57787", "city" : "STONEVILLE", "loc" : [ -102.79796, 44.638004 ], "pop" : 204, "state" : "SD" } +{ "_id" : "57788", "city" : "VALE", "loc" : [ -103.379499, 44.622235 ], "pop" : 303, "state" : "SD" } +{ "_id" : "57790", "city" : "WALL", "loc" : [ -102.224546, 43.981232 ], "pop" : 1070, "state" : "SD" } +{ "_id" : "57791", "city" : "WASTA", "loc" : [ -102.347077, 44.093707 ], "pop" : 217, "state" : "SD" } +{ "_id" : "57792", "city" : "WHITE OWL", "loc" : [ -102.445195, 44.618247 ], "pop" : 92, "state" : "SD" } +{ "_id" : "57793", "city" : "WHITEWOOD", "loc" : [ -103.637039, 44.458855 ], "pop" : 1505, "state" : "SD" } +{ "_id" : "57794", "city" : "WOUNDED KNEE", "loc" : [ -102.402157, 43.185194 ], "pop" : 826, "state" : "SD" } +{ "_id" : "57795", "city" : "ZEONA", "loc" : [ -102.7793, 45.251481 ], "pop" : 8, "state" : "SD" } +{ "_id" : "58002", "city" : "ABSARAKA", "loc" : [ -97.388769, 47.014359 ], "pop" : 124, "state" : "ND" } +{ "_id" : "58003", "city" : "ALICE", "loc" : [ -97.531819, 46.768892 ], "pop" : 255, "state" : "ND" } +{ "_id" : "58004", "city" : "AMENIA", "loc" : [ -97.204808, 47.019395 ], "pop" : 321, "state" : "ND" } +{ "_id" : "58005", "city" : "ARGUSVILLE", "loc" : [ -96.905764, 47.10664 ], "pop" : 353, "state" : "ND" } +{ "_id" : "58006", "city" : "ARTHUR", "loc" : [ -97.209737, 47.104774 ], "pop" : 543, "state" : "ND" } +{ "_id" : "58007", "city" : "AYR", "loc" : [ -97.572841, 47.019576 ], "pop" : 187, "state" : "ND" } +{ "_id" : "58008", "city" : "BARNEY", "loc" : [ -96.970772, 46.249621 ], "pop" : 222, "state" : "ND" } +{ "_id" : "58009", "city" : "BLANCHARD", "loc" : [ -97.262079, 47.353664 ], "pop" : 144, "state" : "ND" } +{ "_id" : "58011", "city" : "BUFFALO", "loc" : [ -97.53515899999999, 46.926351 ], "pop" : 281, "state" : "ND" } +{ "_id" : "58012", "city" : "CASSELTON", "loc" : [ -97.213821, 46.899195 ], "pop" : 1838, "state" : "ND" } +{ "_id" : "58013", "city" : "CAYUGA", "loc" : [ -97.405941, 46.132589 ], "pop" : 442, "state" : "ND" } +{ "_id" : "58014", "city" : "CHAFFEE", "loc" : [ -97.357753, 46.766477 ], "pop" : 189, "state" : "ND" } +{ "_id" : "58015", "city" : "CHRISTINE", "loc" : [ -96.790882, 46.552157 ], "pop" : 377, "state" : "ND" } +{ "_id" : "58016", "city" : "CLIFFORD", "loc" : [ -97.409961, 47.356946 ], "pop" : 128, "state" : "ND" } +{ "_id" : "58017", "city" : "BRAMPTON", "loc" : [ -97.80954300000001, 46.089106 ], "pop" : 631, "state" : "ND" } +{ "_id" : "58018", "city" : "COLFAX", "loc" : [ -96.979001, 46.497153 ], "pop" : 414, "state" : "ND" } +{ "_id" : "58021", "city" : "DAVENPORT", "loc" : [ -97.087073, 46.696811 ], "pop" : 349, "state" : "ND" } +{ "_id" : "58027", "city" : "ENDERLIN", "loc" : [ -97.61055399999999, 46.607898 ], "pop" : 1732, "state" : "ND" } +{ "_id" : "58029", "city" : "ERIE", "loc" : [ -97.384851, 47.112803 ], "pop" : 135, "state" : "ND" } +{ "_id" : "58030", "city" : "FAIRMOUNT", "loc" : [ -96.63081099999999, 46.042658 ], "pop" : 780, "state" : "ND" } +{ "_id" : "58031", "city" : "FINGAL", "loc" : [ -97.781198, 46.772754 ], "pop" : 349, "state" : "ND" } +{ "_id" : "58032", "city" : "FORMAN", "loc" : [ -97.698643, 46.072075 ], "pop" : 72, "state" : "ND" } +{ "_id" : "58033", "city" : "ENGLEVALE", "loc" : [ -97.90548200000001, 46.478188 ], "pop" : 764, "state" : "ND" } +{ "_id" : "58035", "city" : "GALESBURG", "loc" : [ -97.374599, 47.27779 ], "pop" : 344, "state" : "ND" } +{ "_id" : "58036", "city" : "GARDNER", "loc" : [ -96.990116, 47.1252 ], "pop" : 200, "state" : "ND" } +{ "_id" : "58038", "city" : "GRANDIN", "loc" : [ -97.02067599999999, 47.215769 ], "pop" : 365, "state" : "ND" } +{ "_id" : "58039", "city" : "GREAT BEND", "loc" : [ -96.817143, 46.154369 ], "pop" : 235, "state" : "ND" } +{ "_id" : "58040", "city" : "CRETE", "loc" : [ -97.86685300000001, 46.230455 ], "pop" : 243, "state" : "ND" } +{ "_id" : "58041", "city" : "HANKINSON", "loc" : [ -96.899069, 46.055797 ], "pop" : 1546, "state" : "ND" } +{ "_id" : "58042", "city" : "PROSPER", "loc" : [ -96.90097299999999, 46.996497 ], "pop" : 1045, "state" : "ND" } +{ "_id" : "58043", "city" : "HAVANA", "loc" : [ -97.60945, 45.964413 ], "pop" : 272, "state" : "ND" } +{ "_id" : "58045", "city" : "KELSO", "loc" : [ -97.05602399999999, 47.394168 ], "pop" : 2398, "state" : "ND" } +{ "_id" : "58046", "city" : "COLGATE", "loc" : [ -97.784865, 47.19995 ], "pop" : 90, "state" : "ND" } +{ "_id" : "58047", "city" : "HICKSON", "loc" : [ -96.860941, 46.739267 ], "pop" : 2056, "state" : "ND" } +{ "_id" : "58048", "city" : "HUNTER", "loc" : [ -97.251648, 47.19132 ], "pop" : 512, "state" : "ND" } +{ "_id" : "58049", "city" : "HASTINGS", "loc" : [ -97.999791, 46.705548 ], "pop" : 355, "state" : "ND" } +{ "_id" : "58051", "city" : "KINDRED", "loc" : [ -97.004919, 46.654296 ], "pop" : 907, "state" : "ND" } +{ "_id" : "58052", "city" : "LEONARD", "loc" : [ -97.272488, 46.659324 ], "pop" : 554, "state" : "ND" } +{ "_id" : "58053", "city" : "GENESEO", "loc" : [ -97.144429, 46.073885 ], "pop" : 1494, "state" : "ND" } +{ "_id" : "58054", "city" : "ELLIOTT", "loc" : [ -97.658895, 46.420133 ], "pop" : 3078, "state" : "ND" } +{ "_id" : "58056", "city" : "LUVERNE", "loc" : [ -97.72962200000001, 47.315052 ], "pop" : 893, "state" : "ND" } +{ "_id" : "58057", "city" : "MCLEOD", "loc" : [ -97.313892, 46.41027 ], "pop" : 70, "state" : "ND" } +{ "_id" : "58058", "city" : "MANTADOR", "loc" : [ -96.957004, 46.159935 ], "pop" : 239, "state" : "ND" } +{ "_id" : "58059", "city" : "DURBIN", "loc" : [ -97.051366, 46.867546 ], "pop" : 1665, "state" : "ND" } +{ "_id" : "58060", "city" : "DELAMERE", "loc" : [ -97.433724, 46.255074 ], "pop" : 927, "state" : "ND" } +{ "_id" : "58061", "city" : "MOORETON", "loc" : [ -96.85072599999999, 46.261537 ], "pop" : 313, "state" : "ND" } +{ "_id" : "58062", "city" : "NOME", "loc" : [ -97.791099, 46.674834 ], "pop" : 284, "state" : "ND" } +{ "_id" : "58063", "city" : "ORISKA", "loc" : [ -97.785331, 46.943251 ], "pop" : 332, "state" : "ND" } +{ "_id" : "58064", "city" : "PAGE", "loc" : [ -97.596665, 47.151512 ], "pop" : 586, "state" : "ND" } +{ "_id" : "58067", "city" : "RUTLAND", "loc" : [ -97.548284, 46.073813 ], "pop" : 1166, "state" : "ND" } +{ "_id" : "58068", "city" : "SHELDON", "loc" : [ -97.454261, 46.554784 ], "pop" : 546, "state" : "ND" } +{ "_id" : "58069", "city" : "STIRUM", "loc" : [ -97.654233, 46.229891 ], "pop" : 776, "state" : "ND" } +{ "_id" : "58071", "city" : "TOWER CITY", "loc" : [ -97.659392, 46.911873 ], "pop" : 417, "state" : "ND" } +{ "_id" : "58072", "city" : "VALLEY CITY", "loc" : [ -98.003316, 46.92681 ], "pop" : 8633, "state" : "ND" } +{ "_id" : "58075", "city" : "DWIGHT", "loc" : [ -96.633934, 46.279842 ], "pop" : 10683, "state" : "ND" } +{ "_id" : "58077", "city" : "WALCOTT", "loc" : [ -97.001442, 46.583529 ], "pop" : 740, "state" : "ND" } +{ "_id" : "58078", "city" : "RIVERSIDE", "loc" : [ -96.89500200000001, 46.869523 ], "pop" : 12422, "state" : "ND" } +{ "_id" : "58079", "city" : "EMBDEN", "loc" : [ -97.391694, 46.875015 ], "pop" : 367, "state" : "ND" } +{ "_id" : "58081", "city" : "WYNDMERE", "loc" : [ -97.128912, 46.289137 ], "pop" : 1127, "state" : "ND" } +{ "_id" : "58102", "city" : "NORTH RIVER", "loc" : [ -96.793577, 46.900878 ], "pop" : 33408, "state" : "ND" } +{ "_id" : "58103", "city" : "FARGO", "loc" : [ -96.812252, 46.856406 ], "pop" : 38483, "state" : "ND" } +{ "_id" : "58104", "city" : "BRIARWOOD", "loc" : [ -96.823846, 46.81492 ], "pop" : 5170, "state" : "ND" } +{ "_id" : "58201", "city" : "GRAND FORKS", "loc" : [ -97.04463, 47.901041 ], "pop" : 31138, "state" : "ND" } +{ "_id" : "58203", "city" : "GRAND FORKS", "loc" : [ -97.067156, 47.927217 ], "pop" : 19056, "state" : "ND" } +{ "_id" : "58205", "city" : "GRAND FORKS", "loc" : [ -97.370802, 47.959499 ], "pop" : 9333, "state" : "ND" } +{ "_id" : "58210", "city" : "ADAMS", "loc" : [ -98.086741, 48.422299 ], "pop" : 312, "state" : "ND" } +{ "_id" : "58212", "city" : "ANETA", "loc" : [ -97.98140600000001, 47.699262 ], "pop" : 426, "state" : "ND" } +{ "_id" : "58213", "city" : "ARDOCH", "loc" : [ -97.253534, 48.226911 ], "pop" : 355, "state" : "ND" } +{ "_id" : "58214", "city" : "ARVILLA", "loc" : [ -97.48712399999999, 47.909292 ], "pop" : 529, "state" : "ND" } +{ "_id" : "58216", "city" : "BATHGATE", "loc" : [ -97.483215, 48.868632 ], "pop" : 169, "state" : "ND" } +{ "_id" : "58218", "city" : "BUXTON", "loc" : [ -97.089259, 47.616314 ], "pop" : 952, "state" : "ND" } +{ "_id" : "58219", "city" : "CALEDONIA", "loc" : [ -96.90847599999999, 47.457645 ], "pop" : 154, "state" : "ND" } +{ "_id" : "58220", "city" : "CONCRETE", "loc" : [ -97.657191, 48.794341 ], "pop" : 2758, "state" : "ND" } +{ "_id" : "58222", "city" : "CRYSTAL", "loc" : [ -97.673846, 48.592387 ], "pop" : 384, "state" : "ND" } +{ "_id" : "58223", "city" : "CUMMINGS", "loc" : [ -96.991287, 47.537023 ], "pop" : 286, "state" : "ND" } +{ "_id" : "58224", "city" : "DAHLEN", "loc" : [ -97.957269, 48.159896 ], "pop" : 103, "state" : "ND" } +{ "_id" : "58225", "city" : "BOWESMONT", "loc" : [ -97.19922200000001, 48.578569 ], "pop" : 1233, "state" : "ND" } +{ "_id" : "58227", "city" : "GARDAR", "loc" : [ -97.89018799999999, 48.490164 ], "pop" : 859, "state" : "ND" } +{ "_id" : "58228", "city" : "EMERADO", "loc" : [ -97.263012, 47.921376 ], "pop" : 1690, "state" : "ND" } +{ "_id" : "58229", "city" : "FAIRDALE", "loc" : [ -98.206587, 48.481924 ], "pop" : 274, "state" : "ND" } +{ "_id" : "58230", "city" : "FINLEY", "loc" : [ -97.744242, 47.530611 ], "pop" : 1403, "state" : "ND" } +{ "_id" : "58231", "city" : "FORDVILLE", "loc" : [ -97.802238, 48.22119 ], "pop" : 377, "state" : "ND" } +{ "_id" : "58233", "city" : "FOREST RIVER", "loc" : [ -97.460476, 48.225094 ], "pop" : 284, "state" : "ND" } +{ "_id" : "58235", "city" : "HONEYFORD", "loc" : [ -97.46329900000001, 48.077082 ], "pop" : 395, "state" : "ND" } +{ "_id" : "58237", "city" : "NASH", "loc" : [ -97.41589500000001, 48.410783 ], "pop" : 6591, "state" : "ND" } +{ "_id" : "58238", "city" : "HAMILTON", "loc" : [ -97.469302, 48.794249 ], "pop" : 135, "state" : "ND" } +{ "_id" : "58239", "city" : "HANNAH", "loc" : [ -98.723693, 48.959446 ], "pop" : 141, "state" : "ND" } +{ "_id" : "58240", "city" : "HATTON", "loc" : [ -97.432548, 47.638012 ], "pop" : 1081, "state" : "ND" } +{ "_id" : "58241", "city" : "HENSEL", "loc" : [ -97.59622299999999, 48.673836 ], "pop" : 121, "state" : "ND" } +{ "_id" : "58243", "city" : "HOOPLE", "loc" : [ -97.61833300000001, 48.51981 ], "pop" : 555, "state" : "ND" } +{ "_id" : "58244", "city" : "ORR", "loc" : [ -97.681302, 48.118654 ], "pop" : 730, "state" : "ND" } +{ "_id" : "58249", "city" : "LANGDON", "loc" : [ -98.35662000000001, 48.786562 ], "pop" : 3701, "state" : "ND" } +{ "_id" : "58250", "city" : "LANKIN", "loc" : [ -98.006997, 48.295233 ], "pop" : 796, "state" : "ND" } +{ "_id" : "58251", "city" : "MCCANNA", "loc" : [ -97.651792, 47.904048 ], "pop" : 2023, "state" : "ND" } +{ "_id" : "58254", "city" : "KLOTEN", "loc" : [ -98.162999, 47.778981 ], "pop" : 925, "state" : "ND" } +{ "_id" : "58255", "city" : "MAIDA", "loc" : [ -98.39482599999999, 48.949043 ], "pop" : 104, "state" : "ND" } +{ "_id" : "58256", "city" : "MANVEL", "loc" : [ -97.194332, 48.085314 ], "pop" : 1033, "state" : "ND" } +{ "_id" : "58257", "city" : "MAYVILLE", "loc" : [ -97.317645, 47.50138 ], "pop" : 2378, "state" : "ND" } +{ "_id" : "58258", "city" : "MEKINOCK", "loc" : [ -97.489593, 47.980909 ], "pop" : 398, "state" : "ND" } +{ "_id" : "58259", "city" : "WHITMAN", "loc" : [ -98.12424300000001, 48.04144 ], "pop" : 624, "state" : "ND" } +{ "_id" : "58260", "city" : "MILTON", "loc" : [ -98.01828500000001, 48.616963 ], "pop" : 248, "state" : "ND" } +{ "_id" : "58261", "city" : "VOSS", "loc" : [ -97.333727, 48.298874 ], "pop" : 851, "state" : "ND" } +{ "_id" : "58262", "city" : "MOUNTAIN", "loc" : [ -97.807569, 48.677341 ], "pop" : 435, "state" : "ND" } +{ "_id" : "58265", "city" : "NECHE", "loc" : [ -97.542687, 48.979567 ], "pop" : 500, "state" : "ND" } +{ "_id" : "58266", "city" : "NIAGARA", "loc" : [ -97.833431, 47.984817 ], "pop" : 164, "state" : "ND" } +{ "_id" : "58267", "city" : "KEMPTON", "loc" : [ -97.56305399999999, 47.741756 ], "pop" : 1910, "state" : "ND" } +{ "_id" : "58269", "city" : "OSNABROCK", "loc" : [ -98.23271, 48.641908 ], "pop" : 620, "state" : "ND" } +{ "_id" : "58270", "city" : "PARK RIVER", "loc" : [ -97.743897, 48.403881 ], "pop" : 2139, "state" : "ND" } +{ "_id" : "58271", "city" : "JOLIETTE", "loc" : [ -97.275611, 48.936124 ], "pop" : 907, "state" : "ND" } +{ "_id" : "58272", "city" : "PETERSBURG", "loc" : [ -97.984033, 47.997973 ], "pop" : 404, "state" : "ND" } +{ "_id" : "58273", "city" : "PISEK", "loc" : [ -97.702894, 48.297096 ], "pop" : 350, "state" : "ND" } +{ "_id" : "58274", "city" : "PORTLAND", "loc" : [ -97.384303, 47.501542 ], "pop" : 887, "state" : "ND" } +{ "_id" : "58275", "city" : "REYNOLDS", "loc" : [ -97.209153, 47.706776 ], "pop" : 470, "state" : "ND" } +{ "_id" : "58276", "city" : "SAINT THOMAS", "loc" : [ -97.454508, 48.625223 ], "pop" : 607, "state" : "ND" } +{ "_id" : "58277", "city" : "SHARON", "loc" : [ -97.905091, 47.606188 ], "pop" : 163, "state" : "ND" } +{ "_id" : "58278", "city" : "THOMPSON", "loc" : [ -97.09620099999999, 47.77658 ], "pop" : 1705, "state" : "ND" } +{ "_id" : "58281", "city" : "WALES", "loc" : [ -98.55964899999999, 48.921647 ], "pop" : 122, "state" : "ND" } +{ "_id" : "58282", "city" : "BACKOO", "loc" : [ -97.881927, 48.91103 ], "pop" : 1759, "state" : "ND" } +{ "_id" : "58301", "city" : "DEVILS LAKE", "loc" : [ -98.861588, 48.113162 ], "pop" : 10324, "state" : "ND" } +{ "_id" : "58311", "city" : "LOMA", "loc" : [ -98.622545, 48.636847 ], "pop" : 272, "state" : "ND" } +{ "_id" : "58315", "city" : "BARTON", "loc" : [ -100.204429, 48.461084 ], "pop" : 140, "state" : "ND" } +{ "_id" : "58316", "city" : "BELCOURT", "loc" : [ -99.768754, 48.837862 ], "pop" : 5415, "state" : "ND" } +{ "_id" : "58317", "city" : "BISBEE", "loc" : [ -99.363592, 48.555196 ], "pop" : 507, "state" : "ND" } +{ "_id" : "58318", "city" : "BOTTINEAU", "loc" : [ -100.432894, 48.845137 ], "pop" : 4356, "state" : "ND" } +{ "_id" : "58319", "city" : "BREMEN", "loc" : [ -99.37156400000001, 47.727212 ], "pop" : 108, "state" : "ND" } +{ "_id" : "58320", "city" : "BRINSMADE", "loc" : [ -99.31238399999999, 48.156805 ], "pop" : 168, "state" : "ND" } +{ "_id" : "58321", "city" : "BROCKET", "loc" : [ -98.35585399999999, 48.225527 ], "pop" : 131, "state" : "ND" } +{ "_id" : "58323", "city" : "CALVIN", "loc" : [ -98.92423599999999, 48.80843 ], "pop" : 117, "state" : "ND" } +{ "_id" : "58324", "city" : "MAZA", "loc" : [ -99.194553, 48.485479 ], "pop" : 1800, "state" : "ND" } +{ "_id" : "58325", "city" : "CHURCHS FERRY", "loc" : [ -99.141187, 48.286206 ], "pop" : 206, "state" : "ND" } +{ "_id" : "58327", "city" : "SOUTHAM", "loc" : [ -98.621236, 48.053028 ], "pop" : 272, "state" : "ND" } +{ "_id" : "58328", "city" : "DOYON", "loc" : [ -98.50675699999999, 48.081067 ], "pop" : 121, "state" : "ND" } +{ "_id" : "58329", "city" : "SAN HAVEN", "loc" : [ -100.031105, 48.84801 ], "pop" : 3092, "state" : "ND" } +{ "_id" : "58330", "city" : "EDMORE", "loc" : [ -98.445756, 48.43084 ], "pop" : 572, "state" : "ND" } +{ "_id" : "58331", "city" : "EGELAND", "loc" : [ -99.111475, 48.635537 ], "pop" : 297, "state" : "ND" } +{ "_id" : "58332", "city" : "FILLMORE", "loc" : [ -99.703388, 48.072022 ], "pop" : 563, "state" : "ND" } +{ "_id" : "58337", "city" : "HAMBERG", "loc" : [ -99.46829700000001, 47.779372 ], "pop" : 213, "state" : "ND" } +{ "_id" : "58338", "city" : "HAMPDEN", "loc" : [ -98.65431599999999, 48.522892 ], "pop" : 148, "state" : "ND" } +{ "_id" : "58339", "city" : "HANSBORO", "loc" : [ -99.383259, 48.86648 ], "pop" : 390, "state" : "ND" } +{ "_id" : "58341", "city" : "MANFRED", "loc" : [ -99.932941, 47.768121 ], "pop" : 2769, "state" : "ND" } +{ "_id" : "58342", "city" : "HEIMDAL", "loc" : [ -99.68914700000001, 47.799918 ], "pop" : 180, "state" : "ND" } +{ "_id" : "58343", "city" : "KNOX", "loc" : [ -99.671274, 48.338812 ], "pop" : 100, "state" : "ND" } +{ "_id" : "58344", "city" : "MAPES", "loc" : [ -98.341548, 48.035714 ], "pop" : 1327, "state" : "ND" } +{ "_id" : "58345", "city" : "LAWTON", "loc" : [ -98.414199, 48.30326 ], "pop" : 178, "state" : "ND" } +{ "_id" : "58346", "city" : "HARLOW", "loc" : [ -99.440123, 48.26681 ], "pop" : 980, "state" : "ND" } +{ "_id" : "58348", "city" : "FLORA", "loc" : [ -99.54306099999999, 47.95074 ], "pop" : 1045, "state" : "ND" } +{ "_id" : "58351", "city" : "MINNEWAUKAN", "loc" : [ -99.274323, 48.069777 ], "pop" : 554, "state" : "ND" } +{ "_id" : "58352", "city" : "CALIO", "loc" : [ -98.842646, 48.654605 ], "pop" : 572, "state" : "ND" } +{ "_id" : "58353", "city" : "MYLO", "loc" : [ -99.63287800000001, 48.635981 ], "pop" : 292, "state" : "ND" } +{ "_id" : "58356", "city" : "BRANTFORD", "loc" : [ -99.078007, 47.679385 ], "pop" : 2309, "state" : "ND" } +{ "_id" : "58357", "city" : "OBERON", "loc" : [ -99.140129, 47.948744 ], "pop" : 556, "state" : "ND" } +{ "_id" : "58360", "city" : "OVERLY", "loc" : [ -100.175958, 48.679029 ], "pop" : 61, "state" : "ND" } +{ "_id" : "58361", "city" : "PEKIN", "loc" : [ -98.326035, 47.769558 ], "pop" : 229, "state" : "ND" } +{ "_id" : "58362", "city" : "PENN", "loc" : [ -99.06550900000001, 48.227106 ], "pop" : 165, "state" : "ND" } +{ "_id" : "58363", "city" : "PERTH", "loc" : [ -99.383076, 48.681601 ], "pop" : 125, "state" : "ND" } +{ "_id" : "58365", "city" : "ROCKLAKE", "loc" : [ -99.17962799999999, 48.821569 ], "pop" : 508, "state" : "ND" } +{ "_id" : "58366", "city" : "NANSON", "loc" : [ -99.874375, 48.655224 ], "pop" : 1125, "state" : "ND" } +{ "_id" : "58367", "city" : "ROLLA", "loc" : [ -99.61338600000001, 48.859423 ], "pop" : 1645, "state" : "ND" } +{ "_id" : "58368", "city" : "PLEASANT LAKE", "loc" : [ -99.998954, 48.317264 ], "pop" : 4592, "state" : "ND" } +{ "_id" : "58369", "city" : "SAINT JOHN", "loc" : [ -99.76476, 48.936588 ], "pop" : 1203, "state" : "ND" } +{ "_id" : "58370", "city" : "SAINT MICHAEL", "loc" : [ -98.918058, 47.977363 ], "pop" : 2860, "state" : "ND" } +{ "_id" : "58372", "city" : "SARLES", "loc" : [ -98.960562, 48.945921 ], "pop" : 172, "state" : "ND" } +{ "_id" : "58374", "city" : "SHEYENNE", "loc" : [ -99.05832599999999, 47.818386 ], "pop" : 551, "state" : "ND" } +{ "_id" : "58377", "city" : "STARKWEATHER", "loc" : [ -98.853903, 48.448802 ], "pop" : 456, "state" : "ND" } +{ "_id" : "58380", "city" : "HAMAR", "loc" : [ -98.475218, 47.802014 ], "pop" : 463, "state" : "ND" } +{ "_id" : "58381", "city" : "WARWICK", "loc" : [ -98.68095599999999, 47.891285 ], "pop" : 195, "state" : "ND" } +{ "_id" : "58382", "city" : "WEBSTER", "loc" : [ -98.87394399999999, 48.322852 ], "pop" : 108, "state" : "ND" } +{ "_id" : "58384", "city" : "WILLOW CITY", "loc" : [ -100.296802, 48.606205 ], "pop" : 453, "state" : "ND" } +{ "_id" : "58385", "city" : "WOLFORD", "loc" : [ -99.662756, 48.480937 ], "pop" : 326, "state" : "ND" } +{ "_id" : "58386", "city" : "BAKER", "loc" : [ -99.550489, 48.321709 ], "pop" : 74, "state" : "ND" } +{ "_id" : "58401", "city" : "ELDRIDGE", "loc" : [ -98.706127, 46.905899 ], "pop" : 18347, "state" : "ND" } +{ "_id" : "58411", "city" : "ALFRED", "loc" : [ -98.914671, 46.58588 ], "pop" : 121, "state" : "ND" } +{ "_id" : "58412", "city" : "ARENA", "loc" : [ -100.17651, 47.134934 ], "pop" : 140, "state" : "ND" } +{ "_id" : "58413", "city" : "ASHLEY", "loc" : [ -99.3164, 46.053677 ], "pop" : 1544, "state" : "ND" } +{ "_id" : "58415", "city" : "BERLIN", "loc" : [ -98.523342, 46.400834 ], "pop" : 185, "state" : "ND" } +{ "_id" : "58416", "city" : "BINFORD", "loc" : [ -98.354625, 47.573899 ], "pop" : 506, "state" : "ND" } +{ "_id" : "58418", "city" : "BOWDON", "loc" : [ -99.701532, 47.434318 ], "pop" : 387, "state" : "ND" } +{ "_id" : "58420", "city" : "BUCHANAN", "loc" : [ -98.81115800000001, 47.040917 ], "pop" : 162, "state" : "ND" } +{ "_id" : "58421", "city" : "BORDULAC", "loc" : [ -99.108226, 47.453918 ], "pop" : 3104, "state" : "ND" } +{ "_id" : "58422", "city" : "EMRICK", "loc" : [ -99.429677, 47.549857 ], "pop" : 115, "state" : "ND" } +{ "_id" : "58423", "city" : "CHASELEY", "loc" : [ -99.824082, 47.449018 ], "pop" : 68, "state" : "ND" } +{ "_id" : "58424", "city" : "WINDSOR", "loc" : [ -99.086596, 46.883242 ], "pop" : 378, "state" : "ND" } +{ "_id" : "58425", "city" : "COOPERSTOWN", "loc" : [ -98.15333200000001, 47.452732 ], "pop" : 2313, "state" : "ND" } +{ "_id" : "58426", "city" : "COURTENAY", "loc" : [ -98.54885, 47.227195 ], "pop" : 166, "state" : "ND" } +{ "_id" : "58428", "city" : "DAWSON", "loc" : [ -99.763544, 46.829612 ], "pop" : 298, "state" : "ND" } +{ "_id" : "58429", "city" : "SIBLEY", "loc" : [ -98.143863, 47.195503 ], "pop" : 376, "state" : "ND" } +{ "_id" : "58430", "city" : "DENHOFF", "loc" : [ -100.263037, 47.570905 ], "pop" : 177, "state" : "ND" } +{ "_id" : "58431", "city" : "DICKEY", "loc" : [ -98.46821199999999, 46.542565 ], "pop" : 211, "state" : "ND" } +{ "_id" : "58432", "city" : "ECKELSON", "loc" : [ -98.366939, 46.916737 ], "pop" : 138, "state" : "ND" } +{ "_id" : "58433", "city" : "MERRICOURT", "loc" : [ -98.70834600000001, 46.324969 ], "pop" : 1364, "state" : "ND" } +{ "_id" : "58436", "city" : "ELLENDALE", "loc" : [ -98.51383, 46.007317 ], "pop" : 2446, "state" : "ND" } +{ "_id" : "58438", "city" : "FESSENDEN", "loc" : [ -99.643361, 47.628644 ], "pop" : 1297, "state" : "ND" } +{ "_id" : "58439", "city" : "FORBES", "loc" : [ -98.812414, 46.010926 ], "pop" : 287, "state" : "ND" } +{ "_id" : "58440", "city" : "FREDONIA", "loc" : [ -99.262818, 46.353456 ], "pop" : 453, "state" : "ND" } +{ "_id" : "58441", "city" : "FULLERTON", "loc" : [ -98.38821900000001, 46.195138 ], "pop" : 375, "state" : "ND" } +{ "_id" : "58442", "city" : "GACKLE", "loc" : [ -99.21905599999999, 46.591263 ], "pop" : 866, "state" : "ND" } +{ "_id" : "58443", "city" : "JUANITA", "loc" : [ -98.663951, 47.443185 ], "pop" : 539, "state" : "ND" } +{ "_id" : "58444", "city" : "GOODRICH", "loc" : [ -100.118979, 47.471048 ], "pop" : 339, "state" : "ND" } +{ "_id" : "58445", "city" : "GRACE CITY", "loc" : [ -98.809465, 47.55358 ], "pop" : 168, "state" : "ND" } +{ "_id" : "58448", "city" : "WALUM", "loc" : [ -98.15718, 47.299693 ], "pop" : 374, "state" : "ND" } +{ "_id" : "58450", "city" : "HEATON", "loc" : [ -99.57848199999999, 47.462249 ], "pop" : 76, "state" : "ND" } +{ "_id" : "58451", "city" : "HURDSFIELD", "loc" : [ -99.94165, 47.438733 ], "pop" : 194, "state" : "ND" } +{ "_id" : "58454", "city" : "NORTONVILLE", "loc" : [ -98.807661, 46.500996 ], "pop" : 575, "state" : "ND" } +{ "_id" : "58455", "city" : "KENSAL", "loc" : [ -98.720579, 47.272609 ], "pop" : 384, "state" : "ND" } +{ "_id" : "58456", "city" : "KULM", "loc" : [ -98.942724, 46.307274 ], "pop" : 634, "state" : "ND" } +{ "_id" : "58458", "city" : "GRAND RAPIDS", "loc" : [ -98.30022, 46.361961 ], "pop" : 1493, "state" : "ND" } +{ "_id" : "58460", "city" : "LEHR", "loc" : [ -99.349136, 46.258638 ], "pop" : 227, "state" : "ND" } +{ "_id" : "58461", "city" : "LITCHVILLE", "loc" : [ -98.20327, 46.688788 ], "pop" : 421, "state" : "ND" } +{ "_id" : "58463", "city" : "MCCLUSKY", "loc" : [ -100.451966, 47.489639 ], "pop" : 1002, "state" : "ND" } +{ "_id" : "58464", "city" : "MCHENRY", "loc" : [ -98.572594, 47.560416 ], "pop" : 172, "state" : "ND" } +{ "_id" : "58465", "city" : "MANFRED", "loc" : [ -99.764369, 47.711663 ], "pop" : 73, "state" : "ND" } +{ "_id" : "58466", "city" : "MARION", "loc" : [ -98.253327, 46.571587 ], "pop" : 723, "state" : "ND" } +{ "_id" : "58467", "city" : "MEDINA", "loc" : [ -99.31055600000001, 46.891951 ], "pop" : 622, "state" : "ND" } +{ "_id" : "58471", "city" : "MONANGO", "loc" : [ -98.57962000000001, 46.193641 ], "pop" : 172, "state" : "ND" } +{ "_id" : "58472", "city" : "ADRIAN", "loc" : [ -98.59764699999999, 46.654218 ], "pop" : 419, "state" : "ND" } +{ "_id" : "58474", "city" : "GUELPH", "loc" : [ -98.099339, 46.128796 ], "pop" : 2569, "state" : "ND" } +{ "_id" : "58475", "city" : "PETTIBONE", "loc" : [ -99.52789199999999, 47.119973 ], "pop" : 163, "state" : "ND" } +{ "_id" : "58476", "city" : "EDMUNDS", "loc" : [ -99.00204100000001, 47.165715 ], "pop" : 624, "state" : "ND" } +{ "_id" : "58477", "city" : "REGAN", "loc" : [ -100.522448, 47.152703 ], "pop" : 274, "state" : "ND" } +{ "_id" : "58478", "city" : "LAKE WILLIAMS", "loc" : [ -99.70030199999999, 47.150765 ], "pop" : 505, "state" : "ND" } +{ "_id" : "58479", "city" : "LEAL", "loc" : [ -98.220885, 47.071086 ], "pop" : 395, "state" : "ND" } +{ "_id" : "58480", "city" : "SANBORN", "loc" : [ -98.233622, 46.927065 ], "pop" : 304, "state" : "ND" } +{ "_id" : "58481", "city" : "SPIRITWOOD", "loc" : [ -98.64846799999999, 47.101601 ], "pop" : 263, "state" : "ND" } +{ "_id" : "58482", "city" : "STEELE", "loc" : [ -99.933559, 46.852357 ], "pop" : 1277, "state" : "ND" } +{ "_id" : "58483", "city" : "STREETER", "loc" : [ -99.29710799999999, 46.694999 ], "pop" : 482, "state" : "ND" } +{ "_id" : "58484", "city" : "SUTTON", "loc" : [ -98.432044, 47.385355 ], "pop" : 110, "state" : "ND" } +{ "_id" : "58486", "city" : "SYKESTON", "loc" : [ -99.39751, 47.436938 ], "pop" : 384, "state" : "ND" } +{ "_id" : "58487", "city" : "TAPPEN", "loc" : [ -99.60189200000001, 46.83362 ], "pop" : 631, "state" : "ND" } +{ "_id" : "58488", "city" : "TUTTLE", "loc" : [ -99.98728699999999, 47.162583 ], "pop" : 458, "state" : "ND" } +{ "_id" : "58489", "city" : "VENTURIA", "loc" : [ -99.494253, 46.037075 ], "pop" : 164, "state" : "ND" } +{ "_id" : "58490", "city" : "VERONA", "loc" : [ -98.089536, 46.371229 ], "pop" : 278, "state" : "ND" } +{ "_id" : "58492", "city" : "WIMBLEDON", "loc" : [ -98.43291600000001, 47.143837 ], "pop" : 530, "state" : "ND" } +{ "_id" : "58494", "city" : "WING", "loc" : [ -100.307159, 47.151939 ], "pop" : 376, "state" : "ND" } +{ "_id" : "58495", "city" : "BURNSTAD", "loc" : [ -99.586005, 46.251617 ], "pop" : 1677, "state" : "ND" } +{ "_id" : "58496", "city" : "WOODWORTH", "loc" : [ -99.34059999999999, 47.163639 ], "pop" : 340, "state" : "ND" } +{ "_id" : "58497", "city" : "YPSILANTI", "loc" : [ -98.48763599999999, 46.771949 ], "pop" : 281, "state" : "ND" } +{ "_id" : "58501", "city" : "BISMARCK", "loc" : [ -100.774755, 46.823448 ], "pop" : 36602, "state" : "ND" } +{ "_id" : "58504", "city" : "LINCOLN", "loc" : [ -100.774411, 46.782463 ], "pop" : 19990, "state" : "ND" } +{ "_id" : "58520", "city" : "ALMONT", "loc" : [ -101.522126, 46.704605 ], "pop" : 309, "state" : "ND" } +{ "_id" : "58521", "city" : "BALDWIN", "loc" : [ -100.761464, 46.954338 ], "pop" : 1218, "state" : "ND" } +{ "_id" : "58523", "city" : "BEULAH", "loc" : [ -101.807468, 47.270664 ], "pop" : 4363, "state" : "ND" } +{ "_id" : "58524", "city" : "BRADDOCK", "loc" : [ -100.241577, 46.549885 ], "pop" : 401, "state" : "ND" } +{ "_id" : "58528", "city" : "CANNON BALL", "loc" : [ -100.59749, 46.387446 ], "pop" : 608, "state" : "ND" } +{ "_id" : "58529", "city" : "CARSON", "loc" : [ -101.538725, 46.462389 ], "pop" : 713, "state" : "ND" } +{ "_id" : "58530", "city" : "FORT CLARK", "loc" : [ -101.328643, 47.121912 ], "pop" : 2381, "state" : "ND" } +{ "_id" : "58531", "city" : "COLEHARBOR", "loc" : [ -101.233198, 47.519559 ], "pop" : 184, "state" : "ND" } +{ "_id" : "58532", "city" : "DRISCOLL", "loc" : [ -100.144063, 46.851139 ], "pop" : 235, "state" : "ND" } +{ "_id" : "58533", "city" : "HEIL", "loc" : [ -101.835145, 46.411346 ], "pop" : 1052, "state" : "ND" } +{ "_id" : "58535", "city" : "LARK", "loc" : [ -101.151681, 46.465133 ], "pop" : 972, "state" : "ND" } +{ "_id" : "58537", "city" : "HUFF", "loc" : [ -100.693909, 46.563172 ], "pop" : 266, "state" : "ND" } +{ "_id" : "58538", "city" : "FORT YATES", "loc" : [ -100.651611, 46.09054 ], "pop" : 2096, "state" : "ND" } +{ "_id" : "58540", "city" : "EMMET", "loc" : [ -101.398325, 47.655219 ], "pop" : 2215, "state" : "ND" } +{ "_id" : "58541", "city" : "GOLDEN VALLEY", "loc" : [ -102.061229, 47.293754 ], "pop" : 315, "state" : "ND" } +{ "_id" : "58542", "city" : "HAGUE", "loc" : [ -99.974507, 46.058896 ], "pop" : 252, "state" : "ND" } +{ "_id" : "58544", "city" : "HAZELTON", "loc" : [ -100.273325, 46.487477 ], "pop" : 323, "state" : "ND" } +{ "_id" : "58545", "city" : "HAZEN", "loc" : [ -101.610695, 47.327138 ], "pop" : 4072, "state" : "ND" } +{ "_id" : "58549", "city" : "KINTYRE", "loc" : [ -99.970462, 46.573573 ], "pop" : 83, "state" : "ND" } +{ "_id" : "58551", "city" : "LEITH", "loc" : [ -101.455531, 46.234873 ], "pop" : 456, "state" : "ND" } +{ "_id" : "58552", "city" : "TEMVIK", "loc" : [ -100.215832, 46.286924 ], "pop" : 2362, "state" : "ND" } +{ "_id" : "58553", "city" : "MCKENZIE", "loc" : [ -100.3995, 46.831062 ], "pop" : 163, "state" : "ND" } +{ "_id" : "58554", "city" : "MANDAN", "loc" : [ -100.909175, 46.830649 ], "pop" : 18098, "state" : "ND" } +{ "_id" : "58558", "city" : "MENOKEN", "loc" : [ -100.527488, 46.861032 ], "pop" : 176, "state" : "ND" } +{ "_id" : "58559", "city" : "MERCER", "loc" : [ -100.717079, 47.485792 ], "pop" : 142, "state" : "ND" } +{ "_id" : "58560", "city" : "MOFFIT", "loc" : [ -100.297538, 46.675725 ], "pop" : 176, "state" : "ND" } +{ "_id" : "58561", "city" : "NAPOLEON", "loc" : [ -99.77253, 46.486724 ], "pop" : 1440, "state" : "ND" } +{ "_id" : "58562", "city" : "BENTLEY", "loc" : [ -101.89369, 46.374448 ], "pop" : 1095, "state" : "ND" } +{ "_id" : "58563", "city" : "HANNOVER", "loc" : [ -101.424453, 46.851248 ], "pop" : 1545, "state" : "ND" } +{ "_id" : "58564", "city" : "RALEIGH", "loc" : [ -101.282651, 46.335236 ], "pop" : 138, "state" : "ND" } +{ "_id" : "58565", "city" : "RIVERDALE", "loc" : [ -101.115061, 47.640333 ], "pop" : 86, "state" : "ND" } +{ "_id" : "58566", "city" : "SAINT ANTHONY", "loc" : [ -100.897237, 46.588831 ], "pop" : 238, "state" : "ND" } +{ "_id" : "58568", "city" : "SELFRIDGE", "loc" : [ -101.150204, 46.035147 ], "pop" : 647, "state" : "ND" } +{ "_id" : "58569", "city" : "SHIELDS", "loc" : [ -101.258894, 46.183772 ], "pop" : 76, "state" : "ND" } +{ "_id" : "58570", "city" : "BREIEN", "loc" : [ -100.81363, 46.294106 ], "pop" : 410, "state" : "ND" } +{ "_id" : "58571", "city" : "STANTON", "loc" : [ -101.38987, 47.312786 ], "pop" : 720, "state" : "ND" } +{ "_id" : "58572", "city" : "STERLING", "loc" : [ -100.274392, 46.843583 ], "pop" : 263, "state" : "ND" } +{ "_id" : "58573", "city" : "STRASBURG", "loc" : [ -100.211869, 46.097938 ], "pop" : 1409, "state" : "ND" } +{ "_id" : "58575", "city" : "TURTLE LAKE", "loc" : [ -100.881364, 47.541416 ], "pop" : 1059, "state" : "ND" } +{ "_id" : "58576", "city" : "UNDERWOOD", "loc" : [ -101.189807, 47.460163 ], "pop" : 1629, "state" : "ND" } +{ "_id" : "58577", "city" : "WASHBURN", "loc" : [ -101.011568, 47.311388 ], "pop" : 2006, "state" : "ND" } +{ "_id" : "58579", "city" : "WILTON", "loc" : [ -100.794385, 47.170853 ], "pop" : 1335, "state" : "ND" } +{ "_id" : "58580", "city" : "ZAP", "loc" : [ -101.925649, 47.289711 ], "pop" : 338, "state" : "ND" } +{ "_id" : "58581", "city" : "ZEELAND", "loc" : [ -99.772543, 46.005476 ], "pop" : 497, "state" : "ND" } +{ "_id" : "58601", "city" : "NEW HRADEC", "loc" : [ -102.787595, 46.887289 ], "pop" : 18751, "state" : "ND" } +{ "_id" : "58620", "city" : "AMIDON", "loc" : [ -103.264741, 46.455951 ], "pop" : 673, "state" : "ND" } +{ "_id" : "58621", "city" : "BEACH", "loc" : [ -103.98429, 46.932381 ], "pop" : 1577, "state" : "ND" } +{ "_id" : "58622", "city" : "FRYBURG", "loc" : [ -103.179515, 46.887728 ], "pop" : 1290, "state" : "ND" } +{ "_id" : "58623", "city" : "BOWMAN", "loc" : [ -103.401965, 46.173316 ], "pop" : 2432, "state" : "ND" } +{ "_id" : "58625", "city" : "DODGE", "loc" : [ -102.198505, 47.304893 ], "pop" : 159, "state" : "ND" } +{ "_id" : "58626", "city" : "DUNN CENTER", "loc" : [ -102.589198, 47.345265 ], "pop" : 276, "state" : "ND" } +{ "_id" : "58627", "city" : "GORHAM", "loc" : [ -103.222328, 47.118004 ], "pop" : 729, "state" : "ND" } +{ "_id" : "58630", "city" : "GLADSTONE", "loc" : [ -102.527379, 46.815162 ], "pop" : 397, "state" : "ND" } +{ "_id" : "58631", "city" : "GLEN ULLIN", "loc" : [ -101.822293, 46.823301 ], "pop" : 1207, "state" : "ND" } +{ "_id" : "58632", "city" : "GOLVA", "loc" : [ -103.957545, 46.7075 ], "pop" : 290, "state" : "ND" } +{ "_id" : "58634", "city" : "GRASSY BUTTE", "loc" : [ -103.294433, 47.443072 ], "pop" : 282, "state" : "ND" } +{ "_id" : "58636", "city" : "WERNER", "loc" : [ -102.319286, 47.367752 ], "pop" : 973, "state" : "ND" } +{ "_id" : "58638", "city" : "HEBRON", "loc" : [ -102.036678, 46.893613 ], "pop" : 1133, "state" : "ND" } +{ "_id" : "58639", "city" : "BUCYRUS", "loc" : [ -102.584516, 46.027869 ], "pop" : 2793, "state" : "ND" } +{ "_id" : "58640", "city" : "KILLDEER", "loc" : [ -102.776242, 47.410898 ], "pop" : 1564, "state" : "ND" } +{ "_id" : "58641", "city" : "LEFOR", "loc" : [ -102.764292, 46.725264 ], "pop" : 601, "state" : "ND" } +{ "_id" : "58642", "city" : "MANNING", "loc" : [ -102.680638, 47.125837 ], "pop" : 733, "state" : "ND" } +{ "_id" : "58643", "city" : "MARMARTH", "loc" : [ -103.88, 46.325396 ], "pop" : 234, "state" : "ND" } +{ "_id" : "58645", "city" : "MEDORA", "loc" : [ -103.421011, 46.845771 ], "pop" : 379, "state" : "ND" } +{ "_id" : "58646", "city" : "BURT", "loc" : [ -102.312935, 46.401095 ], "pop" : 1834, "state" : "ND" } +{ "_id" : "58647", "city" : "NEW ENGLAND", "loc" : [ -102.835816, 46.512841 ], "pop" : 1183, "state" : "ND" } +{ "_id" : "58649", "city" : "REEDER", "loc" : [ -102.940519, 46.111577 ], "pop" : 381, "state" : "ND" } +{ "_id" : "58650", "city" : "REGENT", "loc" : [ -102.568443, 46.423452 ], "pop" : 379, "state" : "ND" } +{ "_id" : "58651", "city" : "RHAME", "loc" : [ -103.70791, 46.166449 ], "pop" : 467, "state" : "ND" } +{ "_id" : "58652", "city" : "RICHARDTON", "loc" : [ -102.292004, 46.842614 ], "pop" : 1091, "state" : "ND" } +{ "_id" : "58653", "city" : "GASCOYNE", "loc" : [ -103.144688, 46.139924 ], "pop" : 697, "state" : "ND" } +{ "_id" : "58654", "city" : "SENTINEL BUTTE", "loc" : [ -103.800113, 46.830475 ], "pop" : 229, "state" : "ND" } +{ "_id" : "58655", "city" : "SOUTH HEART", "loc" : [ -103.016241, 46.812701 ], "pop" : 613, "state" : "ND" } +{ "_id" : "58656", "city" : "TAYLOR", "loc" : [ -102.375626, 46.928372 ], "pop" : 389, "state" : "ND" } +{ "_id" : "58657", "city" : "TROTTERS", "loc" : [ -103.854704, 47.233008 ], "pop" : 12, "state" : "ND" } +{ "_id" : "58701", "city" : "MINOT", "loc" : [ -101.298476, 48.22914 ], "pop" : 42195, "state" : "ND" } +{ "_id" : "58704", "city" : "MINOT AFB", "loc" : [ -101.31678, 48.423217 ], "pop" : 9095, "state" : "ND" } +{ "_id" : "58710", "city" : "ANAMOOSE", "loc" : [ -100.252941, 47.870307 ], "pop" : 595, "state" : "ND" } +{ "_id" : "58711", "city" : "ANTLER", "loc" : [ -101.333758, 48.958525 ], "pop" : 222, "state" : "ND" } +{ "_id" : "58712", "city" : "BALFOUR", "loc" : [ -100.520929, 47.968451 ], "pop" : 82, "state" : "ND" } +{ "_id" : "58713", "city" : "BANTRY", "loc" : [ -100.789445, 48.511875 ], "pop" : 504, "state" : "ND" } +{ "_id" : "58716", "city" : "BENEDICT", "loc" : [ -101.057884, 47.786493 ], "pop" : 149, "state" : "ND" } +{ "_id" : "58718", "city" : "BLAISDELL", "loc" : [ -101.800562, 48.323399 ], "pop" : 677, "state" : "ND" } +{ "_id" : "58721", "city" : "COTEAU", "loc" : [ -102.247271, 48.796803 ], "pop" : 705, "state" : "ND" } +{ "_id" : "58722", "city" : "BURLINGTON", "loc" : [ -101.428205, 48.273534 ], "pop" : 1291, "state" : "ND" } +{ "_id" : "58723", "city" : "BUTTE", "loc" : [ -100.660446, 47.811884 ], "pop" : 241, "state" : "ND" } +{ "_id" : "58725", "city" : "CARPIO", "loc" : [ -101.711943, 48.432299 ], "pop" : 298, "state" : "ND" } +{ "_id" : "58727", "city" : "LARSON", "loc" : [ -102.794848, 48.878875 ], "pop" : 484, "state" : "ND" } +{ "_id" : "58730", "city" : "CROSBY", "loc" : [ -103.274023, 48.883551 ], "pop" : 1881, "state" : "ND" } +{ "_id" : "58731", "city" : "DEERING", "loc" : [ -101.033685, 48.405693 ], "pop" : 200, "state" : "ND" } +{ "_id" : "58733", "city" : "DES LACS", "loc" : [ -101.567167, 48.25569 ], "pop" : 306, "state" : "ND" } +{ "_id" : "58734", "city" : "DONNYBROOK", "loc" : [ -101.896039, 48.490015 ], "pop" : 208, "state" : "ND" } +{ "_id" : "58735", "city" : "DOUGLAS", "loc" : [ -101.511218, 47.865914 ], "pop" : 135, "state" : "ND" } +{ "_id" : "58736", "city" : "DRAKE", "loc" : [ -100.378955, 47.902431 ], "pop" : 577, "state" : "ND" } +{ "_id" : "58737", "city" : "NORTHGATE", "loc" : [ -102.341502, 48.917672 ], "pop" : 240, "state" : "ND" } +{ "_id" : "58738", "city" : "FOXHOLM", "loc" : [ -101.59072, 48.339193 ], "pop" : 88, "state" : "ND" } +{ "_id" : "58739", "city" : "GARDENA", "loc" : [ -100.48429, 48.683566 ], "pop" : 82, "state" : "ND" } +{ "_id" : "58740", "city" : "WOLSETH", "loc" : [ -101.31955, 48.507978 ], "pop" : 783, "state" : "ND" } +{ "_id" : "58741", "city" : "GRANVILLE", "loc" : [ -100.808193, 48.256575 ], "pop" : 679, "state" : "ND" } +{ "_id" : "58744", "city" : "KARLSRUHE", "loc" : [ -100.574158, 48.10085 ], "pop" : 682, "state" : "ND" } +{ "_id" : "58746", "city" : "COULEE", "loc" : [ -102.071745, 48.673149 ], "pop" : 1756, "state" : "ND" } +{ "_id" : "58747", "city" : "KIEF", "loc" : [ -100.52146, 47.818615 ], "pop" : 204, "state" : "ND" } +{ "_id" : "58748", "city" : "KRAMER", "loc" : [ -100.671638, 48.686666 ], "pop" : 145, "state" : "ND" } +{ "_id" : "58750", "city" : "LANSFORD", "loc" : [ -101.385825, 48.625419 ], "pop" : 562, "state" : "ND" } +{ "_id" : "58752", "city" : "LIGNITE", "loc" : [ -102.554177, 48.848113 ], "pop" : 399, "state" : "ND" } +{ "_id" : "58755", "city" : "MCGREGOR", "loc" : [ -102.928795, 48.594983 ], "pop" : 94, "state" : "ND" } +{ "_id" : "58756", "city" : "MAKOTI", "loc" : [ -101.814942, 47.985283 ], "pop" : 247, "state" : "ND" } +{ "_id" : "58757", "city" : "MANDAREE", "loc" : [ -102.653473, 47.856744 ], "pop" : 886, "state" : "ND" } +{ "_id" : "58758", "city" : "MARTIN", "loc" : [ -100.122517, 47.778144 ], "pop" : 279, "state" : "ND" } +{ "_id" : "58759", "city" : "MAX", "loc" : [ -101.293166, 47.815577 ], "pop" : 472, "state" : "ND" } +{ "_id" : "58760", "city" : "MAXBASS", "loc" : [ -101.256328, 48.772163 ], "pop" : 404, "state" : "ND" } +{ "_id" : "58761", "city" : "LORAINE", "loc" : [ -101.554512, 48.765814 ], "pop" : 1455, "state" : "ND" } +{ "_id" : "58762", "city" : "NEWBURG", "loc" : [ -100.968056, 48.698192 ], "pop" : 516, "state" : "ND" } +{ "_id" : "58763", "city" : "CHARLSON", "loc" : [ -102.485793, 47.977154 ], "pop" : 2033, "state" : "ND" } +{ "_id" : "58765", "city" : "NOONAN", "loc" : [ -103.009793, 48.885635 ], "pop" : 326, "state" : "ND" } +{ "_id" : "58768", "city" : "NORWICH", "loc" : [ -100.971165, 48.249115 ], "pop" : 167, "state" : "ND" } +{ "_id" : "58769", "city" : "PALERMO", "loc" : [ -102.239954, 48.3396 ], "pop" : 133, "state" : "ND" } +{ "_id" : "58770", "city" : "PARSHALL", "loc" : [ -102.142732, 47.95597 ], "pop" : 1425, "state" : "ND" } +{ "_id" : "58771", "city" : "PLAZA", "loc" : [ -101.964276, 48.02421 ], "pop" : 309, "state" : "ND" } +{ "_id" : "58772", "city" : "PORTAL", "loc" : [ -102.548023, 48.975818 ], "pop" : 286, "state" : "ND" } +{ "_id" : "58773", "city" : "BATTLEVIEW", "loc" : [ -102.644646, 48.589815 ], "pop" : 888, "state" : "ND" } +{ "_id" : "58775", "city" : "ROSEGLEN", "loc" : [ -101.822041, 47.695967 ], "pop" : 1178, "state" : "ND" } +{ "_id" : "58776", "city" : "ROSS", "loc" : [ -102.530721, 48.316159 ], "pop" : 104, "state" : "ND" } +{ "_id" : "58778", "city" : "RUSO", "loc" : [ -100.875432, 47.762224 ], "pop" : 187, "state" : "ND" } +{ "_id" : "58779", "city" : "RAUB", "loc" : [ -101.765095, 47.868017 ], "pop" : 320, "state" : "ND" } +{ "_id" : "58781", "city" : "SAWYER", "loc" : [ -101.067396, 48.085837 ], "pop" : 493, "state" : "ND" } +{ "_id" : "58782", "city" : "SHERWOOD", "loc" : [ -101.697024, 48.957551 ], "pop" : 487, "state" : "ND" } +{ "_id" : "58783", "city" : "CARBURY", "loc" : [ -100.741324, 48.937378 ], "pop" : 443, "state" : "ND" } +{ "_id" : "58784", "city" : "BELDEN", "loc" : [ -102.392802, 48.319189 ], "pop" : 2711, "state" : "ND" } +{ "_id" : "58785", "city" : "SURREY", "loc" : [ -101.121617, 48.236472 ], "pop" : 1109, "state" : "ND" } +{ "_id" : "58787", "city" : "TOLLEY", "loc" : [ -101.855891, 48.796903 ], "pop" : 270, "state" : "ND" } +{ "_id" : "58788", "city" : "BERWICK", "loc" : [ -100.412322, 48.377657 ], "pop" : 1251, "state" : "ND" } +{ "_id" : "58789", "city" : "UPHAM", "loc" : [ -100.732314, 48.581632 ], "pop" : 285, "state" : "ND" } +{ "_id" : "58790", "city" : "VELVA", "loc" : [ -100.934623, 48.06748 ], "pop" : 1241, "state" : "ND" } +{ "_id" : "58792", "city" : "BERGEN", "loc" : [ -100.803824, 47.951793 ], "pop" : 418, "state" : "ND" } +{ "_id" : "58793", "city" : "WESTHOPE", "loc" : [ -101.033809, 48.905074 ], "pop" : 855, "state" : "ND" } +{ "_id" : "58794", "city" : "WHITE EARTH", "loc" : [ -102.806672, 48.430748 ], "pop" : 172, "state" : "ND" } +{ "_id" : "58795", "city" : "HAMLET", "loc" : [ -103.184878, 48.621929 ], "pop" : 238, "state" : "ND" } +{ "_id" : "58801", "city" : "BONETRAILL", "loc" : [ -103.631699, 48.167924 ], "pop" : 16473, "state" : "ND" } +{ "_id" : "58830", "city" : "APPAM", "loc" : [ -103.422154, 48.585803 ], "pop" : 116, "state" : "ND" } +{ "_id" : "58831", "city" : "RAWSON", "loc" : [ -103.63961, 47.843517 ], "pop" : 535, "state" : "ND" } +{ "_id" : "58833", "city" : "AMBROSE", "loc" : [ -103.700676, 48.817195 ], "pop" : 569, "state" : "ND" } +{ "_id" : "58835", "city" : "ARNEGARD", "loc" : [ -103.453837, 47.808832 ], "pop" : 190, "state" : "ND" } +{ "_id" : "58838", "city" : "CARTWRIGHT", "loc" : [ -103.948718, 47.79922 ], "pop" : 944, "state" : "ND" } +{ "_id" : "58843", "city" : "SPRINGBROOK", "loc" : [ -103.372462, 48.260088 ], "pop" : 195, "state" : "ND" } +{ "_id" : "58844", "city" : "COLGAN", "loc" : [ -103.828955, 48.924646 ], "pop" : 123, "state" : "ND" } +{ "_id" : "58845", "city" : "ALKABO", "loc" : [ -103.929128, 48.613946 ], "pop" : 313, "state" : "ND" } +{ "_id" : "58847", "city" : "KEENE", "loc" : [ -102.890567, 47.940516 ], "pop" : 358, "state" : "ND" } +{ "_id" : "58849", "city" : "WHEELOCK", "loc" : [ -103.18365, 48.3323 ], "pop" : 816, "state" : "ND" } +{ "_id" : "58852", "city" : "TEMPLE", "loc" : [ -102.961281, 48.392009 ], "pop" : 1984, "state" : "ND" } +{ "_id" : "58853", "city" : "TRENTON", "loc" : [ -103.861276, 48.056303 ], "pop" : 806, "state" : "ND" } +{ "_id" : "58854", "city" : "WATFORD CITY", "loc" : [ -103.258205, 47.804258 ], "pop" : 3188, "state" : "ND" } +{ "_id" : "58856", "city" : "ZAHL", "loc" : [ -103.659926, 48.578747 ], "pop" : 94, "state" : "ND" } +{ "_id" : "59001", "city" : "ABSAROKEE", "loc" : [ -109.469171, 45.515356 ], "pop" : 1330, "state" : "MT" } +{ "_id" : "59002", "city" : "ACTON", "loc" : [ -108.680975, 45.936997 ], "pop" : 55, "state" : "MT" } +{ "_id" : "59003", "city" : "ASHLAND", "loc" : [ -106.279722, 45.58275 ], "pop" : 353, "state" : "MT" } +{ "_id" : "59006", "city" : "BALLANTINE", "loc" : [ -108.123133, 45.954699 ], "pop" : 730, "state" : "MT" } +{ "_id" : "59007", "city" : "BEARCREEK", "loc" : [ -109.044704, 45.15226 ], "pop" : 312, "state" : "MT" } +{ "_id" : "59008", "city" : "BELFRY", "loc" : [ -109.078777, 45.049827 ], "pop" : 64, "state" : "MT" } +{ "_id" : "59010", "city" : "BIGHORN", "loc" : [ -107.205942, 46.238286 ], "pop" : 573, "state" : "MT" } +{ "_id" : "59011", "city" : "BIG TIMBER", "loc" : [ -109.963094, 45.82827 ], "pop" : 2296, "state" : "MT" } +{ "_id" : "59012", "city" : "BIRNEY", "loc" : [ -106.509496, 45.286204 ], "pop" : 138, "state" : "MT" } +{ "_id" : "59014", "city" : "BRIDGER", "loc" : [ -108.908217, 45.285682 ], "pop" : 1524, "state" : "MT" } +{ "_id" : "59015", "city" : "BROADVIEW", "loc" : [ -108.809062, 46.082101 ], "pop" : 303, "state" : "MT" } +{ "_id" : "59016", "city" : "BUSBY", "loc" : [ -106.872311, 45.554139 ], "pop" : 1077, "state" : "MT" } +{ "_id" : "59017", "city" : "CAT CREEK", "loc" : [ -108.259094, 47.154789 ], "pop" : 155, "state" : "MT" } +{ "_id" : "59019", "city" : "COLUMBUS", "loc" : [ -109.257126, 45.626171 ], "pop" : 2438, "state" : "MT" } +{ "_id" : "59022", "city" : "CROW AGENCY", "loc" : [ -107.497251, 45.629594 ], "pop" : 2267, "state" : "MT" } +{ "_id" : "59024", "city" : "CUSTER", "loc" : [ -107.59585, 46.13019 ], "pop" : 304, "state" : "MT" } +{ "_id" : "59025", "city" : "DECKER", "loc" : [ -106.87206, 45.179698 ], "pop" : 164, "state" : "MT" } +{ "_id" : "59027", "city" : "EMIGRANT", "loc" : [ -110.798928, 45.127557 ], "pop" : 2058, "state" : "MT" } +{ "_id" : "59028", "city" : "FISHTAIL", "loc" : [ -109.582078, 45.400217 ], "pop" : 348, "state" : "MT" } +{ "_id" : "59029", "city" : "FROMBERG", "loc" : [ -108.905658, 45.40269 ], "pop" : 627, "state" : "MT" } +{ "_id" : "59030", "city" : "GARDINER", "loc" : [ -110.196258, 45.0493 ], "pop" : 168, "state" : "MT" } +{ "_id" : "59031", "city" : "GARRYOWEN", "loc" : [ -107.364925, 45.508557 ], "pop" : 428, "state" : "MT" } +{ "_id" : "59032", "city" : "GRASS RANGE", "loc" : [ -108.827059, 47.025894 ], "pop" : 494, "state" : "MT" } +{ "_id" : "59033", "city" : "GREYCLIFF", "loc" : [ -109.674601, 45.792631 ], "pop" : 216, "state" : "MT" } +{ "_id" : "59034", "city" : "HARDIN", "loc" : [ -107.607457, 45.749843 ], "pop" : 3889, "state" : "MT" } +{ "_id" : "59037", "city" : "HUNTLEY", "loc" : [ -108.284981, 45.89049 ], "pop" : 1006, "state" : "MT" } +{ "_id" : "59038", "city" : "HYSHAM", "loc" : [ -107.307196, 46.276483 ], "pop" : 301, "state" : "MT" } +{ "_id" : "59039", "city" : "INGOMAR", "loc" : [ -107.551749, 46.654196 ], "pop" : 118, "state" : "MT" } +{ "_id" : "59041", "city" : "SILESIA", "loc" : [ -108.94804, 45.498763 ], "pop" : 1739, "state" : "MT" } +{ "_id" : "59043", "city" : "LAME DEER", "loc" : [ -106.565424, 45.603167 ], "pop" : 2846, "state" : "MT" } +{ "_id" : "59044", "city" : "LAUREL", "loc" : [ -108.769008, 45.67451 ], "pop" : 8328, "state" : "MT" } +{ "_id" : "59046", "city" : "LAVINA", "loc" : [ -108.995853, 46.329058 ], "pop" : 410, "state" : "MT" } +{ "_id" : "59047", "city" : "LIVINGSTON", "loc" : [ -110.560907, 45.654587 ], "pop" : 9980, "state" : "MT" } +{ "_id" : "59050", "city" : "LODGE GRASS", "loc" : [ -107.734105, 45.33218 ], "pop" : 2938, "state" : "MT" } +{ "_id" : "59051", "city" : "LUTHER", "loc" : [ -109.475326, 45.279485 ], "pop" : 11, "state" : "MT" } +{ "_id" : "59052", "city" : "MC LEOD", "loc" : [ -109.935698, 45.596334 ], "pop" : 226, "state" : "MT" } +{ "_id" : "59053", "city" : "MARTINSDALE", "loc" : [ -110.432397, 46.458149 ], "pop" : 246, "state" : "MT" } +{ "_id" : "59055", "city" : "MELVILLE", "loc" : [ -109.880885, 46.036446 ], "pop" : 416, "state" : "MT" } +{ "_id" : "59057", "city" : "MOLT", "loc" : [ -108.973073, 45.861503 ], "pop" : 524, "state" : "MT" } +{ "_id" : "59058", "city" : "MOSBY", "loc" : [ -107.789149, 46.900453 ], "pop" : 7, "state" : "MT" } +{ "_id" : "59059", "city" : "MUSSELSHELL", "loc" : [ -108.003122, 46.517125 ], "pop" : 584, "state" : "MT" } +{ "_id" : "59061", "city" : "NYE", "loc" : [ -109.827137, 45.441022 ], "pop" : 236, "state" : "MT" } +{ "_id" : "59062", "city" : "OTTER", "loc" : [ -106.008667, 45.445803 ], "pop" : 404, "state" : "MT" } +{ "_id" : "59063", "city" : "PARK CITY", "loc" : [ -108.929279, 45.632864 ], "pop" : 1398, "state" : "MT" } +{ "_id" : "59064", "city" : "POMPEYS PILLAR", "loc" : [ -107.915406, 45.983847 ], "pop" : 207, "state" : "MT" } +{ "_id" : "59065", "city" : "PRAY", "loc" : [ -110.686399, 45.419315 ], "pop" : 1094, "state" : "MT" } +{ "_id" : "59067", "city" : "RAPELJE", "loc" : [ -109.276093, 45.97948 ], "pop" : 219, "state" : "MT" } +{ "_id" : "59068", "city" : "RED LODGE", "loc" : [ -109.268812, 45.196522 ], "pop" : 2875, "state" : "MT" } +{ "_id" : "59069", "city" : "REEDPOINT", "loc" : [ -109.468889, 45.648462 ], "pop" : 301, "state" : "MT" } +{ "_id" : "59070", "city" : "ROBERTS", "loc" : [ -109.176888, 45.367235 ], "pop" : 652, "state" : "MT" } +{ "_id" : "59071", "city" : "ROSCOE", "loc" : [ -109.44644, 45.377232 ], "pop" : 159, "state" : "MT" } +{ "_id" : "59072", "city" : "ROUNDUP", "loc" : [ -108.543846, 46.422487 ], "pop" : 3522, "state" : "MT" } +{ "_id" : "59074", "city" : "RYEGATE", "loc" : [ -109.276121, 46.272367 ], "pop" : 502, "state" : "MT" } +{ "_id" : "59075", "city" : "SAINT XAVIER", "loc" : [ -107.709242, 45.488996 ], "pop" : 199, "state" : "MT" } +{ "_id" : "59077", "city" : "SAND SPRINGS", "loc" : [ -107.288623, 47.032287 ], "pop" : 95, "state" : "MT" } +{ "_id" : "59078", "city" : "SHAWMUT", "loc" : [ -109.597361, 46.386921 ], "pop" : 249, "state" : "MT" } +{ "_id" : "59079", "city" : "SHEPHERD", "loc" : [ -108.342634, 45.94608 ], "pop" : 2078, "state" : "MT" } +{ "_id" : "59085", "city" : "TWODOT", "loc" : [ -109.899483, 46.446513 ], "pop" : 1694, "state" : "MT" } +{ "_id" : "59086", "city" : "WILSALL", "loc" : [ -110.606147, 45.948351 ], "pop" : 1293, "state" : "MT" } +{ "_id" : "59087", "city" : "WINNETT", "loc" : [ -108.318373, 46.943788 ], "pop" : 364, "state" : "MT" } +{ "_id" : "59088", "city" : "WORDEN", "loc" : [ -108.153284, 45.977937 ], "pop" : 1025, "state" : "MT" } +{ "_id" : "59089", "city" : "WYOLA", "loc" : [ -107.430258, 45.108904 ], "pop" : 375, "state" : "MT" } +{ "_id" : "59101", "city" : "BILLINGS", "loc" : [ -108.500452, 45.774489 ], "pop" : 33061, "state" : "MT" } +{ "_id" : "59102", "city" : "BILLINGS", "loc" : [ -108.572662, 45.781265 ], "pop" : 40121, "state" : "MT" } +{ "_id" : "59105", "city" : "BILLINGS HEIGHTS", "loc" : [ -108.474726, 45.828443 ], "pop" : 20320, "state" : "MT" } +{ "_id" : "59106", "city" : "BILLINGS", "loc" : [ -108.65191, 45.775306 ], "pop" : 5623, "state" : "MT" } +{ "_id" : "59201", "city" : "WOLF POINT", "loc" : [ -105.629318, 48.111879 ], "pop" : 4845, "state" : "MT" } +{ "_id" : "59211", "city" : "ANTELOPE", "loc" : [ -104.452883, 48.696813 ], "pop" : 152, "state" : "MT" } +{ "_id" : "59212", "city" : "BAINVILLE", "loc" : [ -104.199532, 48.157989 ], "pop" : 354, "state" : "MT" } +{ "_id" : "59213", "city" : "BROCKTON", "loc" : [ -104.85479, 48.210063 ], "pop" : 959, "state" : "MT" } +{ "_id" : "59214", "city" : "BROCKWAY", "loc" : [ -105.777649, 47.248497 ], "pop" : 233, "state" : "MT" } +{ "_id" : "59215", "city" : "CIRCLE", "loc" : [ -105.614771, 47.426389 ], "pop" : 1271, "state" : "MT" } +{ "_id" : "59218", "city" : "CULBERTSON", "loc" : [ -104.513212, 48.149536 ], "pop" : 949, "state" : "MT" } +{ "_id" : "59219", "city" : "DAGMAR", "loc" : [ -104.240123, 48.609337 ], "pop" : 317, "state" : "MT" } +{ "_id" : "59221", "city" : "FAIRVIEW", "loc" : [ -104.230194, 47.891598 ], "pop" : 1668, "state" : "MT" } +{ "_id" : "59222", "city" : "FLAXVILLE", "loc" : [ -105.163746, 48.747222 ], "pop" : 312, "state" : "MT" } +{ "_id" : "59223", "city" : "FORT PECK", "loc" : [ -106.516646, 48.053844 ], "pop" : 714, "state" : "MT" } +{ "_id" : "59225", "city" : "LUSTRE", "loc" : [ -105.991929, 48.161166 ], "pop" : 819, "state" : "MT" } +{ "_id" : "59226", "city" : "FROID", "loc" : [ -104.451765, 48.320113 ], "pop" : 479, "state" : "MT" } +{ "_id" : "59230", "city" : "GLASGOW", "loc" : [ -106.609419, 48.203385 ], "pop" : 5192, "state" : "MT" } +{ "_id" : "59241", "city" : "HINSDALE", "loc" : [ -107.009836, 48.400705 ], "pop" : 704, "state" : "MT" } +{ "_id" : "59242", "city" : "HOMESTEAD", "loc" : [ -104.591805, 48.429616 ], "pop" : 7, "state" : "MT" } +{ "_id" : "59243", "city" : "LAMBERT", "loc" : [ -104.598746, 47.745908 ], "pop" : 655, "state" : "MT" } +{ "_id" : "59244", "city" : "LARSLAN", "loc" : [ -106.283503, 48.58218 ], "pop" : 120, "state" : "MT" } +{ "_id" : "59247", "city" : "MEDICINE LAKE", "loc" : [ -104.437545, 48.485179 ], "pop" : 629, "state" : "MT" } +{ "_id" : "59248", "city" : "NASHUA", "loc" : [ -106.24407, 48.18653 ], "pop" : 206, "state" : "MT" } +{ "_id" : "59250", "city" : "OPHEIM", "loc" : [ -106.365832, 48.87016 ], "pop" : 322, "state" : "MT" } +{ "_id" : "59252", "city" : "OUTLOOK", "loc" : [ -104.741526, 48.881673 ], "pop" : 241, "state" : "MT" } +{ "_id" : "59253", "city" : "PEERLESS", "loc" : [ -105.800567, 48.780767 ], "pop" : 395, "state" : "MT" } +{ "_id" : "59254", "city" : "PLENTYWOOD", "loc" : [ -104.560032, 48.778825 ], "pop" : 2557, "state" : "MT" } +{ "_id" : "59255", "city" : "POPLAR", "loc" : [ -105.187021, 48.130713 ], "pop" : 3407, "state" : "MT" } +{ "_id" : "59256", "city" : "RAYMOND", "loc" : [ -104.629763, 48.968612 ], "pop" : 29, "state" : "MT" } +{ "_id" : "59257", "city" : "REDSTONE", "loc" : [ -104.935259, 48.835511 ], "pop" : 158, "state" : "MT" } +{ "_id" : "59258", "city" : "RESERVE", "loc" : [ -104.627875, 48.590519 ], "pop" : 127, "state" : "MT" } +{ "_id" : "59259", "city" : "RICHEY", "loc" : [ -105.017017, 47.622874 ], "pop" : 462, "state" : "MT" } +{ "_id" : "59260", "city" : "RICHLAND", "loc" : [ -106.223696, 48.727326 ], "pop" : 162, "state" : "MT" } +{ "_id" : "59261", "city" : "SACO", "loc" : [ -107.429324, 48.638938 ], "pop" : 178, "state" : "MT" } +{ "_id" : "59262", "city" : "SAVAGE", "loc" : [ -104.284487, 47.519375 ], "pop" : 1170, "state" : "MT" } +{ "_id" : "59263", "city" : "SCOBEY", "loc" : [ -105.417016, 48.785356 ], "pop" : 1415, "state" : "MT" } +{ "_id" : "59270", "city" : "SIDNEY", "loc" : [ -104.163445, 47.713017 ], "pop" : 7229, "state" : "MT" } +{ "_id" : "59274", "city" : "VIDA", "loc" : [ -105.599595, 47.894727 ], "pop" : 772, "state" : "MT" } +{ "_id" : "59275", "city" : "WESTBY", "loc" : [ -104.124708, 48.858695 ], "pop" : 515, "state" : "MT" } +{ "_id" : "59276", "city" : "WHITETAIL", "loc" : [ -105.297667, 48.924968 ], "pop" : 144, "state" : "MT" } +{ "_id" : "59301", "city" : "MILES CITY", "loc" : [ -105.833193, 46.407459 ], "pop" : 10604, "state" : "MT" } +{ "_id" : "59311", "city" : "ALZADA", "loc" : [ -104.261747, 45.156244 ], "pop" : 101, "state" : "MT" } +{ "_id" : "59312", "city" : "ANGELA", "loc" : [ -106.315732, 46.771929 ], "pop" : 35, "state" : "MT" } +{ "_id" : "59313", "city" : "BAKER", "loc" : [ -104.266707, 46.355219 ], "pop" : 2631, "state" : "MT" } +{ "_id" : "59314", "city" : "BIDDLE", "loc" : [ -105.290138, 45.256977 ], "pop" : 606, "state" : "MT" } +{ "_id" : "59315", "city" : "BLOOMFIELD", "loc" : [ -104.878235, 47.340813 ], "pop" : 569, "state" : "MT" } +{ "_id" : "59316", "city" : "BOYES", "loc" : [ -104.884118, 45.490003 ], "pop" : 90, "state" : "MT" } +{ "_id" : "59317", "city" : "BELLE CREEK", "loc" : [ -105.424968, 45.46057 ], "pop" : 946, "state" : "MT" } +{ "_id" : "59318", "city" : "BRUSETT", "loc" : [ -107.599864, 47.342341 ], "pop" : 229, "state" : "MT" } +{ "_id" : "59319", "city" : "CAPITOL", "loc" : [ -104.146212, 45.473162 ], "pop" : 73, "state" : "MT" } +{ "_id" : "59322", "city" : "COHAGEN", "loc" : [ -106.498065, 47.126296 ], "pop" : 372, "state" : "MT" } +{ "_id" : "59324", "city" : "EKALAKA", "loc" : [ -104.503958, 45.88054 ], "pop" : 881, "state" : "MT" } +{ "_id" : "59326", "city" : "FALLON", "loc" : [ -105.116055, 46.786632 ], "pop" : 388, "state" : "MT" } +{ "_id" : "59327", "city" : "FORSYTH", "loc" : [ -106.699086, 46.2819 ], "pop" : 3148, "state" : "MT" } +{ "_id" : "59330", "city" : "GLENDIVE", "loc" : [ -104.728716, 47.100813 ], "pop" : 8364, "state" : "MT" } +{ "_id" : "59332", "city" : "HAMMOND", "loc" : [ -104.615444, 45.291872 ], "pop" : 358, "state" : "MT" } +{ "_id" : "59336", "city" : "ISMAY", "loc" : [ -105.209064, 46.413223 ], "pop" : 317, "state" : "MT" } +{ "_id" : "59337", "city" : "JORDAN", "loc" : [ -106.922076, 47.369419 ], "pop" : 886, "state" : "MT" } +{ "_id" : "59338", "city" : "KINSEY", "loc" : [ -105.74458, 46.577008 ], "pop" : 346, "state" : "MT" } +{ "_id" : "59339", "city" : "LINDSAY", "loc" : [ -105.208878, 47.202383 ], "pop" : 110, "state" : "MT" } +{ "_id" : "59341", "city" : "MILDRED", "loc" : [ -104.7891, 46.751671 ], "pop" : 83, "state" : "MT" } +{ "_id" : "59343", "city" : "OLIVE", "loc" : [ -105.668741, 45.546641 ], "pop" : 59, "state" : "MT" } +{ "_id" : "59344", "city" : "PLEVNA", "loc" : [ -104.571289, 46.411225 ], "pop" : 433, "state" : "MT" } +{ "_id" : "59345", "city" : "POWDERVILLE", "loc" : [ -105.276098, 45.739183 ], "pop" : 24, "state" : "MT" } +{ "_id" : "59347", "city" : "ROSEBUD", "loc" : [ -106.598123, 45.935826 ], "pop" : 3867, "state" : "MT" } +{ "_id" : "59349", "city" : "TERRY", "loc" : [ -105.37059, 46.828972 ], "pop" : 912, "state" : "MT" } +{ "_id" : "59351", "city" : "VOLBORG", "loc" : [ -105.721444, 46.073609 ], "pop" : 481, "state" : "MT" } +{ "_id" : "59353", "city" : "WIBAUX", "loc" : [ -104.189715, 46.964596 ], "pop" : 1191, "state" : "MT" } +{ "_id" : "59354", "city" : "WILLARD", "loc" : [ -104.446662, 46.114064 ], "pop" : 39, "state" : "MT" } +{ "_id" : "59401", "city" : "GREAT FALLS", "loc" : [ -111.273397, 47.509812 ], "pop" : 13361, "state" : "MT" } +{ "_id" : "59404", "city" : "GREAT FALLS", "loc" : [ -111.340496, 47.509755 ], "pop" : 23133, "state" : "MT" } +{ "_id" : "59405", "city" : "GREAT FALLS", "loc" : [ -111.250227, 47.495016 ], "pop" : 32774, "state" : "MT" } +{ "_id" : "59410", "city" : "AUGUSTA", "loc" : [ -112.388304, 47.453739 ], "pop" : 839, "state" : "MT" } +{ "_id" : "59411", "city" : "BABB", "loc" : [ -113.368132, 48.878781 ], "pop" : 224, "state" : "MT" } +{ "_id" : "59412", "city" : "BELT", "loc" : [ -110.908099, 47.38211 ], "pop" : 1383, "state" : "MT" } +{ "_id" : "59414", "city" : "BLACK EAGLE", "loc" : [ -111.276366, 47.526197 ], "pop" : 927, "state" : "MT" } +{ "_id" : "59416", "city" : "BRADY", "loc" : [ -111.755013, 48.031244 ], "pop" : 334, "state" : "MT" } +{ "_id" : "59417", "city" : "SAINT MARY", "loc" : [ -113.019697, 48.54926 ], "pop" : 6712, "state" : "MT" } +{ "_id" : "59418", "city" : "BUFFALO", "loc" : [ -109.723122, 46.805593 ], "pop" : 105, "state" : "MT" } +{ "_id" : "59419", "city" : "BYNUM", "loc" : [ -112.276177, 47.990017 ], "pop" : 130, "state" : "MT" } +{ "_id" : "59420", "city" : "CARTER", "loc" : [ -110.978593, 47.780964 ], "pop" : 99, "state" : "MT" } +{ "_id" : "59421", "city" : "CASCADE", "loc" : [ -111.722321, 47.29117 ], "pop" : 2050, "state" : "MT" } +{ "_id" : "59422", "city" : "CHOTEAU", "loc" : [ -112.202136, 47.837951 ], "pop" : 2846, "state" : "MT" } +{ "_id" : "59424", "city" : "COFFEE CREEK", "loc" : [ -110.052784, 47.339642 ], "pop" : 175, "state" : "MT" } +{ "_id" : "59425", "city" : "CONRAD", "loc" : [ -111.939665, 48.178346 ], "pop" : 3843, "state" : "MT" } +{ "_id" : "59427", "city" : "CUT BANK", "loc" : [ -112.365354, 48.660284 ], "pop" : 5249, "state" : "MT" } +{ "_id" : "59430", "city" : "DENTON", "loc" : [ -109.878877, 47.319081 ], "pop" : 604, "state" : "MT" } +{ "_id" : "59433", "city" : "DUTTON", "loc" : [ -111.689967, 47.860082 ], "pop" : 710, "state" : "MT" } +{ "_id" : "59434", "city" : "EAST GLACIER PAR", "loc" : [ -113.317304, 48.45998 ], "pop" : 35, "state" : "MT" } +{ "_id" : "59436", "city" : "FAIRFIELD", "loc" : [ -112.001502, 47.614255 ], "pop" : 1598, "state" : "MT" } +{ "_id" : "59440", "city" : "FLOWEREE", "loc" : [ -111.121384, 47.658441 ], "pop" : 188, "state" : "MT" } +{ "_id" : "59441", "city" : "FORESTGROVE", "loc" : [ -109.023294, 46.913727 ], "pop" : 143, "state" : "MT" } +{ "_id" : "59442", "city" : "FORT BENTON", "loc" : [ -110.671487, 47.809406 ], "pop" : 2795, "state" : "MT" } +{ "_id" : "59443", "city" : "FORT SHAW", "loc" : [ -111.805655, 47.563862 ], "pop" : 531, "state" : "MT" } +{ "_id" : "59444", "city" : "GALATA", "loc" : [ -111.419772, 48.458657 ], "pop" : 156, "state" : "MT" } +{ "_id" : "59446", "city" : "GERALDINE", "loc" : [ -110.276537, 47.602365 ], "pop" : 369, "state" : "MT" } +{ "_id" : "59447", "city" : "GEYSER", "loc" : [ -110.483877, 47.259816 ], "pop" : 289, "state" : "MT" } +{ "_id" : "59448", "city" : "HEART BUTTE", "loc" : [ -112.845591, 48.277743 ], "pop" : 642, "state" : "MT" } +{ "_id" : "59450", "city" : "HIGHWOOD", "loc" : [ -110.788656, 47.581587 ], "pop" : 387, "state" : "MT" } +{ "_id" : "59451", "city" : "HILGER", "loc" : [ -109.456246, 47.269546 ], "pop" : 719, "state" : "MT" } +{ "_id" : "59452", "city" : "UTICA", "loc" : [ -109.951824, 46.947633 ], "pop" : 632, "state" : "MT" } +{ "_id" : "59453", "city" : "JUDITH GAP", "loc" : [ -109.675475, 46.662301 ], "pop" : 303, "state" : "MT" } +{ "_id" : "59454", "city" : "KEVIN", "loc" : [ -111.970829, 48.750786 ], "pop" : 254, "state" : "MT" } +{ "_id" : "59456", "city" : "LEDGER", "loc" : [ -111.756384, 48.277569 ], "pop" : 42, "state" : "MT" } +{ "_id" : "59457", "city" : "LEWISTOWN", "loc" : [ -109.420297, 47.056324 ], "pop" : 8545, "state" : "MT" } +{ "_id" : "59460", "city" : "LOMA", "loc" : [ -110.499487, 47.954576 ], "pop" : 201, "state" : "MT" } +{ "_id" : "59462", "city" : "MOCCASIN", "loc" : [ -109.890066, 47.09164 ], "pop" : 187, "state" : "MT" } +{ "_id" : "59463", "city" : "MONARCH", "loc" : [ -110.871027, 47.07223 ], "pop" : 150, "state" : "MT" } +{ "_id" : "59464", "city" : "MOORE", "loc" : [ -109.653838, 46.989811 ], "pop" : 569, "state" : "MT" } +{ "_id" : "59465", "city" : "NEIHART", "loc" : [ -110.732827, 46.939086 ], "pop" : 58, "state" : "MT" } +{ "_id" : "59467", "city" : "PENDROY", "loc" : [ -112.326082, 48.087892 ], "pop" : 214, "state" : "MT" } +{ "_id" : "59468", "city" : "POWER", "loc" : [ -111.716898, 47.679846 ], "pop" : 862, "state" : "MT" } +{ "_id" : "59469", "city" : "RAYNESFORD", "loc" : [ -110.704747, 47.260425 ], "pop" : 208, "state" : "MT" } +{ "_id" : "59471", "city" : "ROY", "loc" : [ -108.863422, 47.367821 ], "pop" : 353, "state" : "MT" } +{ "_id" : "59472", "city" : "SAND COULEE", "loc" : [ -111.16606, 47.402117 ], "pop" : 583, "state" : "MT" } +{ "_id" : "59474", "city" : "SHELBY", "loc" : [ -111.839122, 48.503666 ], "pop" : 3375, "state" : "MT" } +{ "_id" : "59479", "city" : "STANFORD", "loc" : [ -110.196111, 47.14886 ], "pop" : 966, "state" : "MT" } +{ "_id" : "59480", "city" : "STOCKETT", "loc" : [ -111.12868, 47.321712 ], "pop" : 554, "state" : "MT" } +{ "_id" : "59482", "city" : "SUNBURST", "loc" : [ -111.744195, 48.851585 ], "pop" : 912, "state" : "MT" } +{ "_id" : "59483", "city" : "SUN RIVER", "loc" : [ -111.724214, 47.480975 ], "pop" : 1083, "state" : "MT" } +{ "_id" : "59484", "city" : "SWEETGRASS", "loc" : [ -112.020436, 48.971305 ], "pop" : 349, "state" : "MT" } +{ "_id" : "59486", "city" : "VALIER", "loc" : [ -112.303275, 48.279504 ], "pop" : 1473, "state" : "MT" } +{ "_id" : "59487", "city" : "VAUGHN", "loc" : [ -111.576955, 47.562445 ], "pop" : 869, "state" : "MT" } +{ "_id" : "59489", "city" : "WINIFRED", "loc" : [ -109.340931, 47.589903 ], "pop" : 376, "state" : "MT" } +{ "_id" : "59501", "city" : "HAVRE", "loc" : [ -109.687974, 48.556121 ], "pop" : 13961, "state" : "MT" } +{ "_id" : "59520", "city" : "BIG SANDY", "loc" : [ -110.07762, 48.149677 ], "pop" : 1554, "state" : "MT" } +{ "_id" : "59521", "city" : "BOX ELDER", "loc" : [ -109.820548, 48.284066 ], "pop" : 2012, "state" : "MT" } +{ "_id" : "59522", "city" : "CHESTER", "loc" : [ -110.97982, 48.454125 ], "pop" : 1530, "state" : "MT" } +{ "_id" : "59523", "city" : "CHINOOK", "loc" : [ -109.22246, 48.57985 ], "pop" : 2607, "state" : "MT" } +{ "_id" : "59524", "city" : "DODSON", "loc" : [ -108.629967, 48.207526 ], "pop" : 1870, "state" : "MT" } +{ "_id" : "59525", "city" : "GILDFORD", "loc" : [ -110.283633, 48.592716 ], "pop" : 330, "state" : "MT" } +{ "_id" : "59526", "city" : "HARLEM", "loc" : [ -108.769253, 48.539802 ], "pop" : 1177, "state" : "MT" } +{ "_id" : "59527", "city" : "HAYS", "loc" : [ -108.768422, 48.380374 ], "pop" : 638, "state" : "MT" } +{ "_id" : "59528", "city" : "HINGHAM", "loc" : [ -110.427548, 48.587029 ], "pop" : 333, "state" : "MT" } +{ "_id" : "59529", "city" : "HOGELAND", "loc" : [ -108.667704, 48.857071 ], "pop" : 143, "state" : "MT" } +{ "_id" : "59530", "city" : "INVERNESS", "loc" : [ -110.68796, 48.593009 ], "pop" : 231, "state" : "MT" } +{ "_id" : "59531", "city" : "JOPLIN", "loc" : [ -110.79145, 48.649795 ], "pop" : 496, "state" : "MT" } +{ "_id" : "59532", "city" : "KREMLIN", "loc" : [ -110.051315, 48.559955 ], "pop" : 311, "state" : "MT" } +{ "_id" : "59535", "city" : "LLOYD", "loc" : [ -109.294264, 48.148632 ], "pop" : 212, "state" : "MT" } +{ "_id" : "59537", "city" : "LORING", "loc" : [ -107.868603, 48.798333 ], "pop" : 243, "state" : "MT" } +{ "_id" : "59538", "city" : "MALTA", "loc" : [ -107.840784, 48.369167 ], "pop" : 4049, "state" : "MT" } +{ "_id" : "59540", "city" : "RUDYARD", "loc" : [ -110.555235, 48.586001 ], "pop" : 476, "state" : "MT" } +{ "_id" : "59542", "city" : "TURNER", "loc" : [ -108.396079, 48.832766 ], "pop" : 270, "state" : "MT" } +{ "_id" : "59544", "city" : "WHITEWATER", "loc" : [ -107.40543, 48.834909 ], "pop" : 110, "state" : "MT" } +{ "_id" : "59545", "city" : "WHITLASH", "loc" : [ -111.107512, 48.911037 ], "pop" : 269, "state" : "MT" } +{ "_id" : "59546", "city" : "ZORTMAN", "loc" : [ -108.349523, 47.874326 ], "pop" : 394, "state" : "MT" } +{ "_id" : "59601", "city" : "HELENA", "loc" : [ -112.021283, 46.613066 ], "pop" : 40102, "state" : "MT" } +{ "_id" : "59632", "city" : "BOULDER", "loc" : [ -112.113757, 46.230647 ], "pop" : 1737, "state" : "MT" } +{ "_id" : "59633", "city" : "CANYON CREEK", "loc" : [ -112.279496, 46.762662 ], "pop" : 648, "state" : "MT" } +{ "_id" : "59634", "city" : "MONTANA CITY", "loc" : [ -111.992565, 46.474492 ], "pop" : 3496, "state" : "MT" } +{ "_id" : "59635", "city" : "EAST HELENA", "loc" : [ -111.905089, 46.597324 ], "pop" : 3901, "state" : "MT" } +{ "_id" : "59639", "city" : "LINCOLN", "loc" : [ -112.66514, 46.957458 ], "pop" : 1015, "state" : "MT" } +{ "_id" : "59641", "city" : "RADERSBURG", "loc" : [ -111.572186, 46.079317 ], "pop" : 391, "state" : "MT" } +{ "_id" : "59642", "city" : "RINGLING", "loc" : [ -110.824214, 46.285468 ], "pop" : 97, "state" : "MT" } +{ "_id" : "59643", "city" : "TOSTON", "loc" : [ -111.425974, 46.20437 ], "pop" : 168, "state" : "MT" } +{ "_id" : "59644", "city" : "TOWNSEND", "loc" : [ -111.491906, 46.334571 ], "pop" : 2343, "state" : "MT" } +{ "_id" : "59645", "city" : "WHITE SULPHUR SP", "loc" : [ -110.934413, 46.566323 ], "pop" : 1476, "state" : "MT" } +{ "_id" : "59647", "city" : "WINSTON", "loc" : [ -111.644671, 46.431485 ], "pop" : 416, "state" : "MT" } +{ "_id" : "59648", "city" : "WOLF CREEK", "loc" : [ -111.883316, 46.839567 ], "pop" : 995, "state" : "MT" } +{ "_id" : "59701", "city" : "WALKERVILLE", "loc" : [ -112.517807, 45.991579 ], "pop" : 33096, "state" : "MT" } +{ "_id" : "59711", "city" : "ANACONDA", "loc" : [ -112.97388, 46.129863 ], "pop" : 8611, "state" : "MT" } +{ "_id" : "59714", "city" : "BELGRADE", "loc" : [ -111.143927, 45.780126 ], "pop" : 9060, "state" : "MT" } +{ "_id" : "59715", "city" : "BOZEMAN", "loc" : [ -111.043057, 45.669269 ], "pop" : 31218, "state" : "MT" } +{ "_id" : "59720", "city" : "CAMERON", "loc" : [ -111.650778, 45.139021 ], "pop" : 269, "state" : "MT" } +{ "_id" : "59721", "city" : "CARDWELL", "loc" : [ -111.780946, 45.894071 ], "pop" : 109, "state" : "MT" } +{ "_id" : "59722", "city" : "DEER LODGE", "loc" : [ -112.747589, 46.38807 ], "pop" : 5220, "state" : "MT" } +{ "_id" : "59724", "city" : "DELL", "loc" : [ -112.950401, 44.95877 ], "pop" : 387, "state" : "MT" } +{ "_id" : "59725", "city" : "DILLON", "loc" : [ -112.640452, 45.23394 ], "pop" : 6972, "state" : "MT" } +{ "_id" : "59727", "city" : "DIVIDE", "loc" : [ -112.719551, 45.716055 ], "pop" : 316, "state" : "MT" } +{ "_id" : "59729", "city" : "ENNIS", "loc" : [ -111.687033, 45.354456 ], "pop" : 1749, "state" : "MT" } +{ "_id" : "59730", "city" : "GALLATIN GATEWAY", "loc" : [ -111.173407, 45.609963 ], "pop" : 2807, "state" : "MT" } +{ "_id" : "59731", "city" : "GARRISON", "loc" : [ -112.617322, 46.572363 ], "pop" : 817, "state" : "MT" } +{ "_id" : "59733", "city" : "GOLD CREEK", "loc" : [ -112.97057, 46.590025 ], "pop" : 66, "state" : "MT" } +{ "_id" : "59735", "city" : "HARRISON", "loc" : [ -111.846135, 45.742333 ], "pop" : 434, "state" : "MT" } +{ "_id" : "59736", "city" : "JACKSON", "loc" : [ -113.465862, 45.430725 ], "pop" : 208, "state" : "MT" } +{ "_id" : "59739", "city" : "LIMA", "loc" : [ -112.562492, 44.644057 ], "pop" : 434, "state" : "MT" } +{ "_id" : "59741", "city" : "MANHATTAN", "loc" : [ -111.314577, 45.79799 ], "pop" : 3461, "state" : "MT" } +{ "_id" : "59745", "city" : "NORRIS", "loc" : [ -111.694284, 45.532271 ], "pop" : 148, "state" : "MT" } +{ "_id" : "59747", "city" : "PONY", "loc" : [ -111.961859, 45.574502 ], "pop" : 252, "state" : "MT" } +{ "_id" : "59748", "city" : "RAMSAY", "loc" : [ -112.619628, 46.119573 ], "pop" : 89, "state" : "MT" } +{ "_id" : "59749", "city" : "SHERIDAN", "loc" : [ -112.173543, 45.422968 ], "pop" : 1524, "state" : "MT" } +{ "_id" : "59750", "city" : "BUTTE", "loc" : [ -112.71586, 46.003281 ], "pop" : 440, "state" : "MT" } +{ "_id" : "59751", "city" : "SILVER STAR", "loc" : [ -112.177604, 45.757105 ], "pop" : 310, "state" : "MT" } +{ "_id" : "59752", "city" : "THREE FORKS", "loc" : [ -111.543643, 45.881068 ], "pop" : 1951, "state" : "MT" } +{ "_id" : "59754", "city" : "TWIN BRIDGES", "loc" : [ -112.349461, 45.531055 ], "pop" : 1041, "state" : "MT" } +{ "_id" : "59755", "city" : "VIRGINIA CITY", "loc" : [ -112.002619, 45.247216 ], "pop" : 268, "state" : "MT" } +{ "_id" : "59756", "city" : "WARMSPRINGS", "loc" : [ -112.820041, 46.162593 ], "pop" : 1667, "state" : "MT" } +{ "_id" : "59758", "city" : "WEST YELLOWSTONE", "loc" : [ -111.18595, 44.912502 ], "pop" : 1987, "state" : "MT" } +{ "_id" : "59759", "city" : "WHITEHALL", "loc" : [ -112.124535, 45.877146 ], "pop" : 2591, "state" : "MT" } +{ "_id" : "59761", "city" : "WISDOM", "loc" : [ -113.472926, 45.651915 ], "pop" : 224, "state" : "MT" } +{ "_id" : "59762", "city" : "WISE RIVER", "loc" : [ -112.996285, 45.742397 ], "pop" : 199, "state" : "MT" } +{ "_id" : "59801", "city" : "MISSOULA", "loc" : [ -114.025207, 46.856274 ], "pop" : 33811, "state" : "MT" } +{ "_id" : "59802", "city" : "MISSOULA", "loc" : [ -114.002732, 46.900615 ], "pop" : 22650, "state" : "MT" } +{ "_id" : "59803", "city" : "MISSOULA", "loc" : [ -114.026528, 46.822362 ], "pop" : 10444, "state" : "MT" } +{ "_id" : "59820", "city" : "ALBERTON", "loc" : [ -114.492139, 46.98061 ], "pop" : 885, "state" : "MT" } +{ "_id" : "59821", "city" : "ARLEE", "loc" : [ -114.075978, 47.186035 ], "pop" : 1432, "state" : "MT" } +{ "_id" : "59823", "city" : "BONNER", "loc" : [ -113.746254, 46.860138 ], "pop" : 1625, "state" : "MT" } +{ "_id" : "59824", "city" : "MOIESE", "loc" : [ -114.15931, 47.433449 ], "pop" : 1638, "state" : "MT" } +{ "_id" : "59825", "city" : "CLINTON", "loc" : [ -113.703764, 46.767281 ], "pop" : 829, "state" : "MT" } +{ "_id" : "59826", "city" : "CONDON", "loc" : [ -113.707477, 47.509696 ], "pop" : 534, "state" : "MT" } +{ "_id" : "59827", "city" : "CONNER", "loc" : [ -114.179966, 45.912762 ], "pop" : 579, "state" : "MT" } +{ "_id" : "59828", "city" : "CORVALLIS", "loc" : [ -114.095995, 46.314193 ], "pop" : 2987, "state" : "MT" } +{ "_id" : "59829", "city" : "DARBY", "loc" : [ -114.193784, 46.028033 ], "pop" : 1657, "state" : "MT" } +{ "_id" : "59831", "city" : "DIXON", "loc" : [ -114.30557, 47.31313 ], "pop" : 454, "state" : "MT" } +{ "_id" : "59832", "city" : "DRUMMOND", "loc" : [ -113.242649, 46.664676 ], "pop" : 800, "state" : "MT" } +{ "_id" : "59833", "city" : "FLORENCE", "loc" : [ -114.094487, 46.63102 ], "pop" : 3184, "state" : "MT" } +{ "_id" : "59834", "city" : "FRENCHTOWN", "loc" : [ -114.268308, 47.047112 ], "pop" : 1679, "state" : "MT" } +{ "_id" : "59836", "city" : "GREENOUGH", "loc" : [ -113.427017, 46.943361 ], "pop" : 372, "state" : "MT" } +{ "_id" : "59837", "city" : "HALL", "loc" : [ -113.208725, 46.582539 ], "pop" : 276, "state" : "MT" } +{ "_id" : "59840", "city" : "HAMILTON", "loc" : [ -114.167869, 46.23953 ], "pop" : 9548, "state" : "MT" } +{ "_id" : "59843", "city" : "HELMVILLE", "loc" : [ -112.941296, 46.829968 ], "pop" : 155, "state" : "MT" } +{ "_id" : "59844", "city" : "HERON", "loc" : [ -115.940668, 48.053668 ], "pop" : 559, "state" : "MT" } +{ "_id" : "59845", "city" : "HOT SPRINGS", "loc" : [ -114.659712, 47.591408 ], "pop" : 858, "state" : "MT" } +{ "_id" : "59846", "city" : "HUSON", "loc" : [ -114.421939, 47.065953 ], "pop" : 562, "state" : "MT" } +{ "_id" : "59847", "city" : "LOLO", "loc" : [ -114.109732, 46.7585 ], "pop" : 3783, "state" : "MT" } +{ "_id" : "59848", "city" : "LONEPINE", "loc" : [ -114.63718, 47.711209 ], "pop" : 236, "state" : "MT" } +{ "_id" : "59852", "city" : "NIARADA", "loc" : [ -114.656218, 47.8031 ], "pop" : 58, "state" : "MT" } +{ "_id" : "59853", "city" : "NOXON", "loc" : [ -115.780658, 48.030166 ], "pop" : 530, "state" : "MT" } +{ "_id" : "59854", "city" : "OVANDO", "loc" : [ -113.090528, 47.006719 ], "pop" : 362, "state" : "MT" } +{ "_id" : "59858", "city" : "PHILIPSBURG", "loc" : [ -113.3126, 46.318899 ], "pop" : 1445, "state" : "MT" } +{ "_id" : "59859", "city" : "PLAINS", "loc" : [ -114.893014, 47.473448 ], "pop" : 2590, "state" : "MT" } +{ "_id" : "59860", "city" : "POLSON", "loc" : [ -114.140444, 47.687574 ], "pop" : 6294, "state" : "MT" } +{ "_id" : "59864", "city" : "RONAN", "loc" : [ -114.105385, 47.552457 ], "pop" : 5682, "state" : "MT" } +{ "_id" : "59865", "city" : "SAINT IGNATIUS", "loc" : [ -114.075822, 47.330014 ], "pop" : 2283, "state" : "MT" } +{ "_id" : "59866", "city" : "SAINT REGIS", "loc" : [ -115.170323, 47.336899 ], "pop" : 962, "state" : "MT" } +{ "_id" : "59868", "city" : "SEELEY LAKE", "loc" : [ -113.481019, 47.178928 ], "pop" : 1240, "state" : "MT" } +{ "_id" : "59870", "city" : "STEVENSVILLE", "loc" : [ -114.047846, 46.526723 ], "pop" : 5250, "state" : "MT" } +{ "_id" : "59871", "city" : "SULA", "loc" : [ -114.042968, 45.827701 ], "pop" : 422, "state" : "MT" } +{ "_id" : "59872", "city" : "SUPERIOR", "loc" : [ -114.888483, 47.172103 ], "pop" : 1825, "state" : "MT" } +{ "_id" : "59873", "city" : "THOMPSON FALLS", "loc" : [ -115.360236, 47.601572 ], "pop" : 2311, "state" : "MT" } +{ "_id" : "59874", "city" : "TROUT CREEK", "loc" : [ -115.559185, 47.811138 ], "pop" : 1095, "state" : "MT" } +{ "_id" : "59875", "city" : "VICTOR", "loc" : [ -114.166534, 46.400489 ], "pop" : 2211, "state" : "MT" } +{ "_id" : "59901", "city" : "EVERGREEN", "loc" : [ -114.289163, 48.220939 ], "pop" : 33469, "state" : "MT" } +{ "_id" : "59910", "city" : "BIG ARM", "loc" : [ -114.207049, 47.758514 ], "pop" : 1089, "state" : "MT" } +{ "_id" : "59911", "city" : "SWAN LAKE", "loc" : [ -114.01993, 48.039725 ], "pop" : 5119, "state" : "MT" } +{ "_id" : "59912", "city" : "COLUMBIA FALLS", "loc" : [ -114.178394, 48.353394 ], "pop" : 9275, "state" : "MT" } +{ "_id" : "59914", "city" : "DAYTON", "loc" : [ -114.280918, 47.860749 ], "pop" : 226, "state" : "MT" } +{ "_id" : "59915", "city" : "ELMO", "loc" : [ -114.343938, 47.818541 ], "pop" : 243, "state" : "MT" } +{ "_id" : "59916", "city" : "ESSEX", "loc" : [ -113.946678, 48.494028 ], "pop" : 98, "state" : "MT" } +{ "_id" : "59917", "city" : "EUREKA", "loc" : [ -115.004938, 48.842766 ], "pop" : 3747, "state" : "MT" } +{ "_id" : "59920", "city" : "KILA", "loc" : [ -114.510402, 48.074437 ], "pop" : 578, "state" : "MT" } +{ "_id" : "59922", "city" : "LAKESIDE", "loc" : [ -114.226562, 48.021469 ], "pop" : 1027, "state" : "MT" } +{ "_id" : "59923", "city" : "LIBBY", "loc" : [ -115.539101, 48.377311 ], "pop" : 10148, "state" : "MT" } +{ "_id" : "59925", "city" : "MARION", "loc" : [ -114.744625, 48.083596 ], "pop" : 475, "state" : "MT" } +{ "_id" : "59928", "city" : "POLEBRIDGE", "loc" : [ -114.383558, 48.820585 ], "pop" : 97, "state" : "MT" } +{ "_id" : "59929", "city" : "PROCTOR", "loc" : [ -114.383193, 47.940371 ], "pop" : 66, "state" : "MT" } +{ "_id" : "59930", "city" : "REXFORD", "loc" : [ -115.212859, 48.917947 ], "pop" : 440, "state" : "MT" } +{ "_id" : "59931", "city" : "ROLLINS", "loc" : [ -114.224986, 47.918207 ], "pop" : 205, "state" : "MT" } +{ "_id" : "59932", "city" : "SOMERS", "loc" : [ -114.23548, 48.079329 ], "pop" : 1104, "state" : "MT" } +{ "_id" : "59935", "city" : "TROY", "loc" : [ -115.881684, 48.479119 ], "pop" : 3146, "state" : "MT" } +{ "_id" : "59937", "city" : "WHITEFISH", "loc" : [ -114.350859, 48.403999 ], "pop" : 9837, "state" : "MT" } +{ "_id" : "60002", "city" : "ANTIOCH", "loc" : [ -88.117802, 42.464811 ], "pop" : 18058, "state" : "IL" } +{ "_id" : "60004", "city" : "ARLINGTON HEIGHT", "loc" : [ -87.97909900000001, 42.111619 ], "pop" : 52947, "state" : "IL" } +{ "_id" : "60005", "city" : "ARLINGTON HEIGHT", "loc" : [ -87.985461, 42.066599 ], "pop" : 26742, "state" : "IL" } +{ "_id" : "60007", "city" : "ELK GROVE VILLAG", "loc" : [ -88.012775, 42.005613 ], "pop" : 34577, "state" : "IL" } +{ "_id" : "60008", "city" : "ROLLING MEADOWS", "loc" : [ -88.019075, 42.072979 ], "pop" : 18672, "state" : "IL" } +{ "_id" : "60010", "city" : "BARRINGTON", "loc" : [ -88.138345, 42.161387 ], "pop" : 37323, "state" : "IL" } +{ "_id" : "60012", "city" : "CRYSTAL LAKE", "loc" : [ -88.32129399999999, 42.266198 ], "pop" : 6855, "state" : "IL" } +{ "_id" : "60013", "city" : "CARY", "loc" : [ -88.242594, 42.219599 ], "pop" : 17521, "state" : "IL" } +{ "_id" : "60014", "city" : "CRYSTAL LAKE", "loc" : [ -88.332364, 42.230755 ], "pop" : 29595, "state" : "IL" } +{ "_id" : "60015", "city" : "DEERFIELD", "loc" : [ -87.859033, 42.170494 ], "pop" : 22048, "state" : "IL" } +{ "_id" : "60016", "city" : "DES PLAINES", "loc" : [ -87.88589899999999, 42.046734 ], "pop" : 54734, "state" : "IL" } +{ "_id" : "60018", "city" : "ROSEMONT", "loc" : [ -87.897882, 42.015116 ], "pop" : 28884, "state" : "IL" } +{ "_id" : "60020", "city" : "FOX LAKE", "loc" : [ -88.16475199999999, 42.393701 ], "pop" : 10336, "state" : "IL" } +{ "_id" : "60021", "city" : "FOX RIVER GROVE", "loc" : [ -88.220483, 42.193594 ], "pop" : 4898, "state" : "IL" } +{ "_id" : "60022", "city" : "GLENCOE", "loc" : [ -87.761486, 42.133339 ], "pop" : 8168, "state" : "IL" } +{ "_id" : "60025", "city" : "GLENVIEW", "loc" : [ -87.822299, 42.075785 ], "pop" : 45038, "state" : "IL" } +{ "_id" : "60026", "city" : "GLENVIEW NAS", "loc" : [ -87.824782, 42.09134 ], "pop" : 437, "state" : "IL" } +{ "_id" : "60030", "city" : "GAGES LAKE", "loc" : [ -88.037789, 42.34848 ], "pop" : 8038, "state" : "IL" } +{ "_id" : "60031", "city" : "GURNEE", "loc" : [ -87.945232, 42.366906 ], "pop" : 32114, "state" : "IL" } +{ "_id" : "60033", "city" : "HARVARD", "loc" : [ -88.604812, 42.422727 ], "pop" : 10790, "state" : "IL" } +{ "_id" : "60034", "city" : "HEBRON", "loc" : [ -88.41758299999999, 42.464173 ], "pop" : 1606, "state" : "IL" } +{ "_id" : "60035", "city" : "HIGHLAND PARK", "loc" : [ -87.805894, 42.179446 ], "pop" : 29346, "state" : "IL" } +{ "_id" : "60037", "city" : "FORT SHERIDAN", "loc" : [ -87.805572, 42.209683 ], "pop" : 2598, "state" : "IL" } +{ "_id" : "60040", "city" : "HIGHWOOD", "loc" : [ -87.81406800000001, 42.203549 ], "pop" : 3956, "state" : "IL" } +{ "_id" : "60041", "city" : "INGLESIDE", "loc" : [ -88.158749, 42.363093 ], "pop" : 4267, "state" : "IL" } +{ "_id" : "60042", "city" : "ISLAND LAKE", "loc" : [ -88.19262999999999, 42.274186 ], "pop" : 3919, "state" : "IL" } +{ "_id" : "60043", "city" : "KENILWORTH", "loc" : [ -87.716463, 42.088444 ], "pop" : 2509, "state" : "IL" } +{ "_id" : "60044", "city" : "LAKE BLUFF", "loc" : [ -87.85595000000001, 42.28196 ], "pop" : 8031, "state" : "IL" } +{ "_id" : "60045", "city" : "LAKE FOREST", "loc" : [ -87.84815399999999, 42.237398 ], "pop" : 17948, "state" : "IL" } +{ "_id" : "60046", "city" : "LINDENHURST", "loc" : [ -88.063318, 42.414796 ], "pop" : 20764, "state" : "IL" } +{ "_id" : "60047", "city" : "LONG GROVE", "loc" : [ -88.07029900000001, 42.196721 ], "pop" : 26893, "state" : "IL" } +{ "_id" : "60048", "city" : "LIBERTYVILLE", "loc" : [ -87.949955, 42.281001 ], "pop" : 28573, "state" : "IL" } +{ "_id" : "60050", "city" : "MC HENRY", "loc" : [ -88.254429, 42.345527 ], "pop" : 39545, "state" : "IL" } +{ "_id" : "60053", "city" : "MORTON GROVE", "loc" : [ -87.789879, 42.043133 ], "pop" : 22502, "state" : "IL" } +{ "_id" : "60056", "city" : "MOUNT PROSPECT", "loc" : [ -87.937667, 42.062392 ], "pop" : 54459, "state" : "IL" } +{ "_id" : "60060", "city" : "MUNDELEIN", "loc" : [ -88.004762, 42.263616 ], "pop" : 22817, "state" : "IL" } +{ "_id" : "60061", "city" : "VERNON HILLS", "loc" : [ -87.971852, 42.228753 ], "pop" : 19713, "state" : "IL" } +{ "_id" : "60062", "city" : "NORTHBROOK", "loc" : [ -87.846535, 42.125443 ], "pop" : 40216, "state" : "IL" } +{ "_id" : "60064", "city" : "ABBOTT PARK", "loc" : [ -87.847819, 42.318901 ], "pop" : 26542, "state" : "IL" } +{ "_id" : "60067", "city" : "PALATINE", "loc" : [ -88.04293699999999, 42.113888 ], "pop" : 57281, "state" : "IL" } +{ "_id" : "60068", "city" : "PARK RIDGE", "loc" : [ -87.841675, 42.012171 ], "pop" : 37450, "state" : "IL" } +{ "_id" : "60069", "city" : "PRAIRIE VIEW", "loc" : [ -87.90482299999999, 42.192872 ], "pop" : 4047, "state" : "IL" } +{ "_id" : "60070", "city" : "PROSPECT HEIGHTS", "loc" : [ -87.914934, 42.103324 ], "pop" : 14692, "state" : "IL" } +{ "_id" : "60071", "city" : "RICHMOND", "loc" : [ -88.290024, 42.466863 ], "pop" : 2658, "state" : "IL" } +{ "_id" : "60072", "city" : "RINGWOOD", "loc" : [ -88.297073, 42.380427 ], "pop" : 1926, "state" : "IL" } +{ "_id" : "60073", "city" : "ROUND LAKE", "loc" : [ -88.088819, 42.366809 ], "pop" : 28919, "state" : "IL" } +{ "_id" : "60074", "city" : "PALATINE", "loc" : [ -88.022998, 42.145775 ], "pop" : 11712, "state" : "IL" } +{ "_id" : "60076", "city" : "SKOKIE", "loc" : [ -87.732828, 42.036168 ], "pop" : 31589, "state" : "IL" } +{ "_id" : "60077", "city" : "SKOKIE", "loc" : [ -87.75412300000001, 42.034525 ], "pop" : 22680, "state" : "IL" } +{ "_id" : "60081", "city" : "SPRING GROVE", "loc" : [ -88.22373399999999, 42.441267 ], "pop" : 2783, "state" : "IL" } +{ "_id" : "60082", "city" : "TECHNY", "loc" : [ -87.80488200000001, 42.121425 ], "pop" : 196, "state" : "IL" } +{ "_id" : "60083", "city" : "WADSWORTH", "loc" : [ -87.904048, 42.446032 ], "pop" : 5510, "state" : "IL" } +{ "_id" : "60084", "city" : "WAUCONDA", "loc" : [ -88.133284, 42.263553 ], "pop" : 11142, "state" : "IL" } +{ "_id" : "60085", "city" : "MC GAW PARK", "loc" : [ -87.852585, 42.361882 ], "pop" : 55778, "state" : "IL" } +{ "_id" : "60087", "city" : "WAUKEGAN", "loc" : [ -87.85538699999999, 42.398906 ], "pop" : 17816, "state" : "IL" } +{ "_id" : "60088", "city" : "GREAT LAKES", "loc" : [ -87.864192, 42.303173 ], "pop" : 8831, "state" : "IL" } +{ "_id" : "60089", "city" : "BUFFALO GROVE", "loc" : [ -87.964364, 42.159843 ], "pop" : 41478, "state" : "IL" } +{ "_id" : "60090", "city" : "WHEELING", "loc" : [ -87.93409699999999, 42.13404 ], "pop" : 31261, "state" : "IL" } +{ "_id" : "60091", "city" : "WILMETTE", "loc" : [ -87.72457199999999, 42.076462 ], "pop" : 26657, "state" : "IL" } +{ "_id" : "60093", "city" : "NORTHFIELD", "loc" : [ -87.752256, 42.103605 ], "pop" : 19317, "state" : "IL" } +{ "_id" : "60096", "city" : "WINTHROP HARBOR", "loc" : [ -87.831788, 42.479269 ], "pop" : 7433, "state" : "IL" } +{ "_id" : "60097", "city" : "WONDER LAKE", "loc" : [ -88.353364, 42.384908 ], "pop" : 8401, "state" : "IL" } +{ "_id" : "60098", "city" : "WOODSTOCK", "loc" : [ -88.447671, 42.319775 ], "pop" : 21770, "state" : "IL" } +{ "_id" : "60099", "city" : "ZION", "loc" : [ -87.838925, 42.444249 ], "pop" : 24944, "state" : "IL" } +{ "_id" : "60101", "city" : "ADDISON", "loc" : [ -88.00539999999999, 41.933509 ], "pop" : 35140, "state" : "IL" } +{ "_id" : "60102", "city" : "LAKE IN THE HILL", "loc" : [ -88.301429, 42.170923 ], "pop" : 22082, "state" : "IL" } +{ "_id" : "60103", "city" : "HANOVER PARK", "loc" : [ -88.16035599999999, 41.983559 ], "pop" : 51877, "state" : "IL" } +{ "_id" : "60104", "city" : "BELLWOOD", "loc" : [ -87.878557, 41.882484 ], "pop" : 19336, "state" : "IL" } +{ "_id" : "60106", "city" : "BENSENVILLE", "loc" : [ -87.944973, 41.950145 ], "pop" : 20080, "state" : "IL" } +{ "_id" : "60107", "city" : "STREAMWOOD", "loc" : [ -88.168965, 42.022539 ], "pop" : 30513, "state" : "IL" } +{ "_id" : "60108", "city" : "BLOOMINGDALE", "loc" : [ -88.07823999999999, 41.94827 ], "pop" : 16560, "state" : "IL" } +{ "_id" : "60110", "city" : "CARPENTERSVILLE", "loc" : [ -88.2606, 42.123004 ], "pop" : 23550, "state" : "IL" } +{ "_id" : "60111", "city" : "CLARE", "loc" : [ -88.83783200000001, 42.027045 ], "pop" : 373, "state" : "IL" } +{ "_id" : "60115", "city" : "DE KALB", "loc" : [ -88.760673, 41.934245 ], "pop" : 38360, "state" : "IL" } +{ "_id" : "60118", "city" : "DUNDEE", "loc" : [ -88.29020199999999, 42.096197 ], "pop" : 11919, "state" : "IL" } +{ "_id" : "60119", "city" : "ELBURN", "loc" : [ -88.461106, 41.882405 ], "pop" : 6271, "state" : "IL" } +{ "_id" : "60120", "city" : "ELGIN", "loc" : [ -88.260631, 42.038356 ], "pop" : 42848, "state" : "IL" } +{ "_id" : "60123", "city" : "ELGIN", "loc" : [ -88.31861499999999, 42.037574 ], "pop" : 43835, "state" : "IL" } +{ "_id" : "60126", "city" : "ELMHURST", "loc" : [ -87.941025, 41.892661 ], "pop" : 43637, "state" : "IL" } +{ "_id" : "60129", "city" : "ESMOND", "loc" : [ -88.94386, 42.022458 ], "pop" : 388, "state" : "IL" } +{ "_id" : "60130", "city" : "FOREST PARK", "loc" : [ -87.810624, 41.874373 ], "pop" : 14882, "state" : "IL" } +{ "_id" : "60131", "city" : "FRANKLIN PARK", "loc" : [ -87.873423, 41.933878 ], "pop" : 18572, "state" : "IL" } +{ "_id" : "60134", "city" : "GENEVA", "loc" : [ -88.310954, 41.886013 ], "pop" : 13603, "state" : "IL" } +{ "_id" : "60135", "city" : "GENOA", "loc" : [ -88.690803, 42.09811 ], "pop" : 4356, "state" : "IL" } +{ "_id" : "60136", "city" : "GILBERTS", "loc" : [ -88.369089, 42.098377 ], "pop" : 1212, "state" : "IL" } +{ "_id" : "60137", "city" : "GLEN ELLYN", "loc" : [ -88.064774, 41.866112 ], "pop" : 35643, "state" : "IL" } +{ "_id" : "60139", "city" : "GLENDALE HEIGHTS", "loc" : [ -88.07928200000001, 41.920523 ], "pop" : 27324, "state" : "IL" } +{ "_id" : "60140", "city" : "HAMPSHIRE", "loc" : [ -88.517033, 42.080748 ], "pop" : 6255, "state" : "IL" } +{ "_id" : "60141", "city" : "HINES", "loc" : [ -87.835542, 41.862262 ], "pop" : 200, "state" : "IL" } +{ "_id" : "60142", "city" : "HUNTLEY", "loc" : [ -88.42684800000001, 42.175555 ], "pop" : 4351, "state" : "IL" } +{ "_id" : "60143", "city" : "ITASCA", "loc" : [ -88.020247, 41.971967 ], "pop" : 8650, "state" : "IL" } +{ "_id" : "60145", "city" : "KINGSTON", "loc" : [ -88.769496, 42.105654 ], "pop" : 1555, "state" : "IL" } +{ "_id" : "60146", "city" : "KIRKLAND", "loc" : [ -88.868522, 42.101406 ], "pop" : 1930, "state" : "IL" } +{ "_id" : "60148", "city" : "LOMBARD", "loc" : [ -88.01598799999999, 41.872139 ], "pop" : 52289, "state" : "IL" } +{ "_id" : "60150", "city" : "MALTA", "loc" : [ -88.868818, 41.918332 ], "pop" : 1619, "state" : "IL" } +{ "_id" : "60151", "city" : "MAPLE PARK", "loc" : [ -88.59985, 41.923217 ], "pop" : 4893, "state" : "IL" } +{ "_id" : "60152", "city" : "MARENGO", "loc" : [ -88.60736900000001, 42.244189 ], "pop" : 8536, "state" : "IL" } +{ "_id" : "60153", "city" : "BROADVIEW", "loc" : [ -87.847675, 41.874857 ], "pop" : 37099, "state" : "IL" } +{ "_id" : "60154", "city" : "WESTCHESTER", "loc" : [ -87.884488, 41.852368 ], "pop" : 16957, "state" : "IL" } +{ "_id" : "60157", "city" : "MEDINAH", "loc" : [ -88.057507, 41.970545 ], "pop" : 3110, "state" : "IL" } +{ "_id" : "60160", "city" : "MELROSE PARK", "loc" : [ -87.85806599999999, 41.900347 ], "pop" : 21235, "state" : "IL" } +{ "_id" : "60162", "city" : "HILLSIDE", "loc" : [ -87.901591, 41.872452 ], "pop" : 7757, "state" : "IL" } +{ "_id" : "60163", "city" : "HILLSIDE", "loc" : [ -87.910678, 41.886538 ], "pop" : 5079, "state" : "IL" } +{ "_id" : "60164", "city" : "NORTHLAKE", "loc" : [ -87.89592, 41.917961 ], "pop" : 21306, "state" : "IL" } +{ "_id" : "60165", "city" : "STONE PARK", "loc" : [ -87.88105299999999, 41.903005 ], "pop" : 4387, "state" : "IL" } +{ "_id" : "60171", "city" : "RIVER GROVE", "loc" : [ -87.838707, 41.927886 ], "pop" : 9949, "state" : "IL" } +{ "_id" : "60172", "city" : "ROSELLE", "loc" : [ -88.08569900000001, 41.979834 ], "pop" : 22626, "state" : "IL" } +{ "_id" : "60173", "city" : "SCHAUMBURG", "loc" : [ -88.04818899999999, 42.05807 ], "pop" : 9314, "state" : "IL" } +{ "_id" : "60174", "city" : "SAINT CHARLES", "loc" : [ -88.307022, 41.919417 ], "pop" : 27454, "state" : "IL" } +{ "_id" : "60175", "city" : "SAINT CHARLES", "loc" : [ -88.39179900000001, 41.947842 ], "pop" : 11851, "state" : "IL" } +{ "_id" : "60176", "city" : "SCHILLER PARK", "loc" : [ -87.869179, 41.956304 ], "pop" : 11189, "state" : "IL" } +{ "_id" : "60177", "city" : "SOUTH ELGIN", "loc" : [ -88.298558, 41.996868 ], "pop" : 9117, "state" : "IL" } +{ "_id" : "60178", "city" : "SYCAMORE", "loc" : [ -88.692809, 41.991117 ], "pop" : 13512, "state" : "IL" } +{ "_id" : "60180", "city" : "UNION", "loc" : [ -88.528295, 42.210274 ], "pop" : 1450, "state" : "IL" } +{ "_id" : "60181", "city" : "VILLA PARK", "loc" : [ -87.978246, 41.879899 ], "pop" : 27217, "state" : "IL" } +{ "_id" : "60185", "city" : "WEST CHICAGO", "loc" : [ -88.202168, 41.888558 ], "pop" : 23894, "state" : "IL" } +{ "_id" : "60187", "city" : "WHEATON", "loc" : [ -88.10763300000001, 41.856592 ], "pop" : 57758, "state" : "IL" } +{ "_id" : "60188", "city" : "CAROL STREAM", "loc" : [ -88.136962, 41.91784 ], "pop" : 34902, "state" : "IL" } +{ "_id" : "60190", "city" : "WINFIELD", "loc" : [ -88.15162100000001, 41.874358 ], "pop" : 9255, "state" : "IL" } +{ "_id" : "60191", "city" : "WOOD DALE", "loc" : [ -87.980971, 41.960171 ], "pop" : 13750, "state" : "IL" } +{ "_id" : "60193", "city" : "SCHAUMBURG", "loc" : [ -88.093481, 42.014432 ], "pop" : 39438, "state" : "IL" } +{ "_id" : "60194", "city" : "HOFFMAN ESTATES", "loc" : [ -88.109442, 42.039025 ], "pop" : 37295, "state" : "IL" } +{ "_id" : "60195", "city" : "HOFFMAN ESTATES", "loc" : [ -88.108709, 42.073865 ], "pop" : 29236, "state" : "IL" } +{ "_id" : "60201", "city" : "EVANSTON", "loc" : [ -87.69433100000001, 42.054551 ], "pop" : 41692, "state" : "IL" } +{ "_id" : "60202", "city" : "EVANSTON", "loc" : [ -87.686544, 42.03022 ], "pop" : 31509, "state" : "IL" } +{ "_id" : "60203", "city" : "EVANSTON", "loc" : [ -87.71759, 42.048487 ], "pop" : 4764, "state" : "IL" } +{ "_id" : "60301", "city" : "OAK PARK", "loc" : [ -87.798598, 41.888601 ], "pop" : 1673, "state" : "IL" } +{ "_id" : "60302", "city" : "OAK PARK", "loc" : [ -87.78954299999999, 41.892471 ], "pop" : 33298, "state" : "IL" } +{ "_id" : "60304", "city" : "OAK PARK", "loc" : [ -87.787712, 41.872458 ], "pop" : 18677, "state" : "IL" } +{ "_id" : "60305", "city" : "RIVER FOREST", "loc" : [ -87.8159, 41.895064 ], "pop" : 11669, "state" : "IL" } +{ "_id" : "60401", "city" : "BEECHER", "loc" : [ -87.611538, 41.34437 ], "pop" : 3724, "state" : "IL" } +{ "_id" : "60402", "city" : "STICKNEY", "loc" : [ -87.79075, 41.841819 ], "pop" : 51541, "state" : "IL" } +{ "_id" : "60406", "city" : "BLUE ISLAND", "loc" : [ -87.67946499999999, 41.658187 ], "pop" : 23305, "state" : "IL" } +{ "_id" : "60407", "city" : "BRACEVILLE", "loc" : [ -88.269042, 41.228788 ], "pop" : 1535, "state" : "IL" } +{ "_id" : "60408", "city" : "BRAIDWOOD", "loc" : [ -88.223124, 41.26574 ], "pop" : 3814, "state" : "IL" } +{ "_id" : "60409", "city" : "CALUMET CITY", "loc" : [ -87.548328, 41.615257 ], "pop" : 36065, "state" : "IL" } +{ "_id" : "60410", "city" : "CHANNAHON", "loc" : [ -88.213786, 41.434664 ], "pop" : 3870, "state" : "IL" } +{ "_id" : "60411", "city" : "SAUK VILLAGE", "loc" : [ -87.613209, 41.506202 ], "pop" : 60738, "state" : "IL" } +{ "_id" : "60415", "city" : "CHICAGO RIDGE", "loc" : [ -87.77738100000001, 41.70171 ], "pop" : 13472, "state" : "IL" } +{ "_id" : "60416", "city" : "COAL CITY", "loc" : [ -88.282346, 41.290769 ], "pop" : 6248, "state" : "IL" } +{ "_id" : "60417", "city" : "CRETE", "loc" : [ -87.602738, 41.438952 ], "pop" : 14372, "state" : "IL" } +{ "_id" : "60419", "city" : "DOLTON", "loc" : [ -87.59795200000001, 41.625723 ], "pop" : 22705, "state" : "IL" } +{ "_id" : "60420", "city" : "DWIGHT", "loc" : [ -88.41588400000001, 41.088701 ], "pop" : 4956, "state" : "IL" } +{ "_id" : "60421", "city" : "ELWOOD", "loc" : [ -88.08642, 41.426018 ], "pop" : 2700, "state" : "IL" } +{ "_id" : "60422", "city" : "FLOSSMOOR", "loc" : [ -87.68373699999999, 41.540574 ], "pop" : 8627, "state" : "IL" } +{ "_id" : "60423", "city" : "FRANKFORT", "loc" : [ -87.82477400000001, 41.509361 ], "pop" : 15682, "state" : "IL" } +{ "_id" : "60424", "city" : "GARDNER", "loc" : [ -88.296543, 41.179321 ], "pop" : 2349, "state" : "IL" } +{ "_id" : "60425", "city" : "GLENWOOD", "loc" : [ -87.612584, 41.546718 ], "pop" : 10180, "state" : "IL" } +{ "_id" : "60426", "city" : "MARKHAM", "loc" : [ -87.661115, 41.608536 ], "pop" : 48332, "state" : "IL" } +{ "_id" : "60429", "city" : "HAZEL CREST", "loc" : [ -87.68488499999999, 41.573803 ], "pop" : 14987, "state" : "IL" } +{ "_id" : "60430", "city" : "HOMEWOOD", "loc" : [ -87.66157800000001, 41.555579 ], "pop" : 19469, "state" : "IL" } +{ "_id" : "60431", "city" : "JOLIET", "loc" : [ -88.08241, 41.527154 ], "pop" : 512, "state" : "IL" } +{ "_id" : "60432", "city" : "JOLIET", "loc" : [ -88.05717799999999, 41.537758 ], "pop" : 20199, "state" : "IL" } +{ "_id" : "60433", "city" : "JOLIET", "loc" : [ -88.05687, 41.511873 ], "pop" : 18342, "state" : "IL" } +{ "_id" : "60435", "city" : "SHOREWOOD", "loc" : [ -88.128107, 41.541468 ], "pop" : 56510, "state" : "IL" } +{ "_id" : "60436", "city" : "ROCKDALE", "loc" : [ -88.135779, 41.508818 ], "pop" : 23888, "state" : "IL" } +{ "_id" : "60437", "city" : "KINSMAN", "loc" : [ -88.48047699999999, 41.161825 ], "pop" : 687, "state" : "IL" } +{ "_id" : "60438", "city" : "LANSING", "loc" : [ -87.544634, 41.566045 ], "pop" : 28810, "state" : "IL" } +{ "_id" : "60439", "city" : "ARGONNE", "loc" : [ -88.02355799999999, 41.695076 ], "pop" : 31018, "state" : "IL" } +{ "_id" : "60440", "city" : "BOLINGBROOK", "loc" : [ -88.087315, 41.697605 ], "pop" : 23726, "state" : "IL" } +{ "_id" : "60441", "city" : "ROMEOVILLE", "loc" : [ -88.025581, 41.613481 ], "pop" : 55268, "state" : "IL" } +{ "_id" : "60442", "city" : "MANHATTAN", "loc" : [ -87.97713299999999, 41.428883 ], "pop" : 3657, "state" : "IL" } +{ "_id" : "60443", "city" : "MATTESON", "loc" : [ -87.74064799999999, 41.510183 ], "pop" : 13624, "state" : "IL" } +{ "_id" : "60444", "city" : "MAZON", "loc" : [ -88.409561, 41.297189 ], "pop" : 3909, "state" : "IL" } +{ "_id" : "60445", "city" : "CRESTWOOD", "loc" : [ -87.732418, 41.634106 ], "pop" : 26378, "state" : "IL" } +{ "_id" : "60447", "city" : "MINOOKA", "loc" : [ -88.27859599999999, 41.461516 ], "pop" : 6005, "state" : "IL" } +{ "_id" : "60448", "city" : "MOKENA", "loc" : [ -87.891121, 41.53421 ], "pop" : 12324, "state" : "IL" } +{ "_id" : "60449", "city" : "MONEE", "loc" : [ -87.77484, 41.419133 ], "pop" : 3537, "state" : "IL" } +{ "_id" : "60450", "city" : "MORRIS", "loc" : [ -88.41776900000001, 41.367233 ], "pop" : 13423, "state" : "IL" } +{ "_id" : "60451", "city" : "NEW LENOX", "loc" : [ -87.963083, 41.506701 ], "pop" : 17470, "state" : "IL" } +{ "_id" : "60452", "city" : "OAK FOREST", "loc" : [ -87.75421900000001, 41.607684 ], "pop" : 26772, "state" : "IL" } +{ "_id" : "60453", "city" : "OAK LAWN", "loc" : [ -87.751564, 41.714305 ], "pop" : 56039, "state" : "IL" } +{ "_id" : "60455", "city" : "BRIDGEVIEW", "loc" : [ -87.806572, 41.743128 ], "pop" : 14065, "state" : "IL" } +{ "_id" : "60456", "city" : "HOMETOWN", "loc" : [ -87.73153600000001, 41.73113 ], "pop" : 4769, "state" : "IL" } +{ "_id" : "60457", "city" : "HICKORY HILLS", "loc" : [ -87.82889299999999, 41.726228 ], "pop" : 12894, "state" : "IL" } +{ "_id" : "60458", "city" : "JUSTICE", "loc" : [ -87.834587, 41.744709 ], "pop" : 12773, "state" : "IL" } +{ "_id" : "60459", "city" : "BURBANK", "loc" : [ -87.769907, 41.744704 ], "pop" : 27870, "state" : "IL" } +{ "_id" : "60460", "city" : "ODELL", "loc" : [ -88.515641, 41.023773 ], "pop" : 2795, "state" : "IL" } +{ "_id" : "60461", "city" : "OLYMPIA FIELDS", "loc" : [ -87.68995200000001, 41.51564 ], "pop" : 4253, "state" : "IL" } +{ "_id" : "60462", "city" : "ORLAND PARK", "loc" : [ -87.84225000000001, 41.619378 ], "pop" : 42564, "state" : "IL" } +{ "_id" : "60463", "city" : "PALOS HEIGHTS", "loc" : [ -87.792697, 41.662146 ], "pop" : 13509, "state" : "IL" } +{ "_id" : "60464", "city" : "PALOS PARK", "loc" : [ -87.852146, 41.662352 ], "pop" : 8967, "state" : "IL" } +{ "_id" : "60465", "city" : "PALOS HILLS", "loc" : [ -87.82627599999999, 41.700389 ], "pop" : 18112, "state" : "IL" } +{ "_id" : "60466", "city" : "UNIVERSITY PARK", "loc" : [ -87.682867, 41.474064 ], "pop" : 31607, "state" : "IL" } +{ "_id" : "60468", "city" : "PEOTONE", "loc" : [ -87.78968, 41.33609 ], "pop" : 4936, "state" : "IL" } +{ "_id" : "60469", "city" : "POSEN", "loc" : [ -87.687213, 41.62766 ], "pop" : 4158, "state" : "IL" } +{ "_id" : "60470", "city" : "RANSOM", "loc" : [ -88.65021400000001, 41.153048 ], "pop" : 690, "state" : "IL" } +{ "_id" : "60471", "city" : "RICHTON PARK", "loc" : [ -87.723834, 41.481854 ], "pop" : 10776, "state" : "IL" } +{ "_id" : "60472", "city" : "ROBBINS", "loc" : [ -87.70890900000001, 41.642289 ], "pop" : 7132, "state" : "IL" } +{ "_id" : "60473", "city" : "SOUTH HOLLAND", "loc" : [ -87.59381399999999, 41.597916 ], "pop" : 24457, "state" : "IL" } +{ "_id" : "60475", "city" : "STEGER", "loc" : [ -87.63858500000001, 41.468608 ], "pop" : 8531, "state" : "IL" } +{ "_id" : "60476", "city" : "THORNTON", "loc" : [ -87.607823, 41.572726 ], "pop" : 2678, "state" : "IL" } +{ "_id" : "60477", "city" : "TINLEY PARK", "loc" : [ -87.804963, 41.582535 ], "pop" : 45371, "state" : "IL" } +{ "_id" : "60478", "city" : "COUNTRY CLUB HIL", "loc" : [ -87.718452, 41.559773 ], "pop" : 16225, "state" : "IL" } +{ "_id" : "60479", "city" : "VERONA", "loc" : [ -88.51701, 41.250094 ], "pop" : 769, "state" : "IL" } +{ "_id" : "60480", "city" : "WILLOW SPRINGS", "loc" : [ -87.87858799999999, 41.736416 ], "pop" : 4469, "state" : "IL" } +{ "_id" : "60481", "city" : "CUSTER PARK", "loc" : [ -88.130083, 41.298063 ], "pop" : 11034, "state" : "IL" } +{ "_id" : "60482", "city" : "WORTH", "loc" : [ -87.786272, 41.689498 ], "pop" : 13081, "state" : "IL" } +{ "_id" : "60501", "city" : "ARGO", "loc" : [ -87.807468, 41.784245 ], "pop" : 10525, "state" : "IL" } +{ "_id" : "60504", "city" : "AURORA", "loc" : [ -88.24528100000001, 41.752269 ], "pop" : 15334, "state" : "IL" } +{ "_id" : "60505", "city" : "AURORA", "loc" : [ -88.297139, 41.758209 ], "pop" : 51422, "state" : "IL" } +{ "_id" : "60506", "city" : "AURORA", "loc" : [ -88.344582, 41.766414 ], "pop" : 42636, "state" : "IL" } +{ "_id" : "60510", "city" : "BATAVIA", "loc" : [ -88.30975599999999, 41.848165 ], "pop" : 19299, "state" : "IL" } +{ "_id" : "60511", "city" : "BIG ROCK", "loc" : [ -88.537617, 41.759308 ], "pop" : 1976, "state" : "IL" } +{ "_id" : "60512", "city" : "BRISTOL", "loc" : [ -88.401354, 41.707446 ], "pop" : 595, "state" : "IL" } +{ "_id" : "60513", "city" : "BROOKFIELD", "loc" : [ -87.84924599999999, 41.82167 ], "pop" : 18859, "state" : "IL" } +{ "_id" : "60514", "city" : "CLARENDON HILLS", "loc" : [ -87.955322, 41.779729 ], "pop" : 17321, "state" : "IL" } +{ "_id" : "60515", "city" : "DOWNERS GROVE", "loc" : [ -88.01375299999999, 41.803428 ], "pop" : 26971, "state" : "IL" } +{ "_id" : "60516", "city" : "DOWNERS GROVE", "loc" : [ -88.015873, 41.760157 ], "pop" : 35756, "state" : "IL" } +{ "_id" : "60517", "city" : "WOODRIDGE", "loc" : [ -88.04885, 41.751755 ], "pop" : 23761, "state" : "IL" } +{ "_id" : "60518", "city" : "EARLVILLE", "loc" : [ -88.910346, 41.585901 ], "pop" : 2305, "state" : "IL" } +{ "_id" : "60520", "city" : "HINCKLEY", "loc" : [ -88.644831, 41.769108 ], "pop" : 2387, "state" : "IL" } +{ "_id" : "60521", "city" : "OAK BROOK", "loc" : [ -87.940089, 41.7891 ], "pop" : 44245, "state" : "IL" } +{ "_id" : "60525", "city" : "HODGKINS", "loc" : [ -87.875252, 41.801345 ], "pop" : 45424, "state" : "IL" } +{ "_id" : "60530", "city" : "LEE", "loc" : [ -88.971386, 41.786418 ], "pop" : 825, "state" : "IL" } +{ "_id" : "60531", "city" : "LELAND", "loc" : [ -88.771574, 41.606591 ], "pop" : 1601, "state" : "IL" } +{ "_id" : "60532", "city" : "LISLE", "loc" : [ -88.0879, 41.786174 ], "pop" : 24914, "state" : "IL" } +{ "_id" : "60534", "city" : "LYONS", "loc" : [ -87.823559, 41.813016 ], "pop" : 9828, "state" : "IL" } +{ "_id" : "60538", "city" : "MONTGOMERY", "loc" : [ -88.331965, 41.717742 ], "pop" : 14146, "state" : "IL" } +{ "_id" : "60539", "city" : "MOOSEHEART", "loc" : [ -88.331532, 41.824148 ], "pop" : 371, "state" : "IL" } +{ "_id" : "60540", "city" : "NAPERVILLE", "loc" : [ -88.14103799999999, 41.766198 ], "pop" : 35414, "state" : "IL" } +{ "_id" : "60541", "city" : "NEWARK", "loc" : [ -88.527006, 41.526679 ], "pop" : 3016, "state" : "IL" } +{ "_id" : "60542", "city" : "NORTH AURORA", "loc" : [ -88.32742399999999, 41.808932 ], "pop" : 6618, "state" : "IL" } +{ "_id" : "60543", "city" : "OSWEGO", "loc" : [ -88.345305, 41.684893 ], "pop" : 9649, "state" : "IL" } +{ "_id" : "60544", "city" : "PLAINFIELD", "loc" : [ -88.19939100000001, 41.600884 ], "pop" : 10416, "state" : "IL" } +{ "_id" : "60545", "city" : "PLANO", "loc" : [ -88.53838, 41.666987 ], "pop" : 7506, "state" : "IL" } +{ "_id" : "60546", "city" : "NORTH RIVERSIDE", "loc" : [ -87.82135599999999, 41.837367 ], "pop" : 14899, "state" : "IL" } +{ "_id" : "60548", "city" : "SANDWICH", "loc" : [ -88.639303, 41.635286 ], "pop" : 10125, "state" : "IL" } +{ "_id" : "60549", "city" : "SERENA", "loc" : [ -88.75089, 41.499481 ], "pop" : 830, "state" : "IL" } +{ "_id" : "60550", "city" : "SHABBONA", "loc" : [ -88.875249, 41.763846 ], "pop" : 1180, "state" : "IL" } +{ "_id" : "60551", "city" : "SHERIDAN", "loc" : [ -88.67063400000001, 41.516428 ], "pop" : 3345, "state" : "IL" } +{ "_id" : "60552", "city" : "SOMONAUK", "loc" : [ -88.681645, 41.638289 ], "pop" : 1475, "state" : "IL" } +{ "_id" : "60553", "city" : "STEWARD", "loc" : [ -89.015086, 41.847545 ], "pop" : 661, "state" : "IL" } +{ "_id" : "60554", "city" : "SUGAR GROVE", "loc" : [ -88.43972100000001, 41.774113 ], "pop" : 4255, "state" : "IL" } +{ "_id" : "60555", "city" : "WARRENVILLE", "loc" : [ -88.19213000000001, 41.828046 ], "pop" : 12421, "state" : "IL" } +{ "_id" : "60556", "city" : "WATERMAN", "loc" : [ -88.775381, 41.750365 ], "pop" : 1914, "state" : "IL" } +{ "_id" : "60558", "city" : "WESTERN SPRINGS", "loc" : [ -87.899485, 41.804864 ], "pop" : 11862, "state" : "IL" } +{ "_id" : "60559", "city" : "WESTMONT", "loc" : [ -87.975736, 41.772848 ], "pop" : 41903, "state" : "IL" } +{ "_id" : "60560", "city" : "YORKVILLE", "loc" : [ -88.443794, 41.638725 ], "pop" : 8161, "state" : "IL" } +{ "_id" : "60563", "city" : "NAPERVILLE", "loc" : [ -88.16901, 41.78955 ], "pop" : 26348, "state" : "IL" } +{ "_id" : "60564", "city" : "NAPERVILLE", "loc" : [ -88.19524800000001, 41.704022 ], "pop" : 8549, "state" : "IL" } +{ "_id" : "60565", "city" : "NAPERVILLE", "loc" : [ -88.12824500000001, 41.732833 ], "pop" : 32693, "state" : "IL" } +{ "_id" : "60601", "city" : "CHICAGO", "loc" : [ -87.618123, 41.885847 ], "pop" : 4585, "state" : "IL" } +{ "_id" : "60602", "city" : "CHICAGO", "loc" : [ -87.632125, 41.882883 ], "pop" : 59, "state" : "IL" } +{ "_id" : "60603", "city" : "CHICAGO", "loc" : [ -87.62849900000001, 41.87985 ], "pop" : 0, "state" : "IL" } +{ "_id" : "60604", "city" : "CHICAGO", "loc" : [ -87.632999, 41.87845 ], "pop" : 3, "state" : "IL" } +{ "_id" : "60605", "city" : "CHICAGO", "loc" : [ -87.62771499999999, 41.87125 ], "pop" : 7709, "state" : "IL" } +{ "_id" : "60606", "city" : "CHICAGO", "loc" : [ -87.638648, 41.886822 ], "pop" : 58, "state" : "IL" } +{ "_id" : "60607", "city" : "CHICAGO", "loc" : [ -87.65784499999999, 41.872075 ], "pop" : 13745, "state" : "IL" } +{ "_id" : "60608", "city" : "CHICAGO", "loc" : [ -87.669444, 41.851482 ], "pop" : 84518, "state" : "IL" } +{ "_id" : "60609", "city" : "CHICAGO", "loc" : [ -87.653279, 41.809721 ], "pop" : 89762, "state" : "IL" } +{ "_id" : "60610", "city" : "CHICAGO", "loc" : [ -87.633565, 41.903294 ], "pop" : 40840, "state" : "IL" } +{ "_id" : "60611", "city" : "CHICAGO", "loc" : [ -87.62228500000001, 41.897105 ], "pop" : 22264, "state" : "IL" } +{ "_id" : "60612", "city" : "CHICAGO", "loc" : [ -87.687333, 41.880483 ], "pop" : 44363, "state" : "IL" } +{ "_id" : "60613", "city" : "CHICAGO", "loc" : [ -87.65749099999999, 41.954341 ], "pop" : 48963, "state" : "IL" } +{ "_id" : "60614", "city" : "CHICAGO", "loc" : [ -87.648295, 41.92286 ], "pop" : 61350, "state" : "IL" } +{ "_id" : "60615", "city" : "CHICAGO", "loc" : [ -87.600623, 41.802211 ], "pop" : 44137, "state" : "IL" } +{ "_id" : "60616", "city" : "CHICAGO", "loc" : [ -87.63055199999999, 41.84258 ], "pop" : 45750, "state" : "IL" } +{ "_id" : "60617", "city" : "CHICAGO", "loc" : [ -87.556012, 41.725743 ], "pop" : 98612, "state" : "IL" } +{ "_id" : "60618", "city" : "CHICAGO", "loc" : [ -87.70421399999999, 41.946401 ], "pop" : 88377, "state" : "IL" } +{ "_id" : "60619", "city" : "CHICAGO", "loc" : [ -87.60539, 41.745765 ], "pop" : 74469, "state" : "IL" } +{ "_id" : "60620", "city" : "CHICAGO", "loc" : [ -87.654251, 41.741119 ], "pop" : 92005, "state" : "IL" } +{ "_id" : "60621", "city" : "CHICAGO", "loc" : [ -87.64213599999999, 41.774993 ], "pop" : 56458, "state" : "IL" } +{ "_id" : "60622", "city" : "CHICAGO", "loc" : [ -87.67785000000001, 41.901923 ], "pop" : 74468, "state" : "IL" } +{ "_id" : "60623", "city" : "CHICAGO", "loc" : [ -87.7157, 41.849015 ], "pop" : 112047, "state" : "IL" } +{ "_id" : "60624", "city" : "CHICAGO", "loc" : [ -87.72234899999999, 41.880394 ], "pop" : 50030, "state" : "IL" } +{ "_id" : "60625", "city" : "CHICAGO", "loc" : [ -87.704157, 41.970325 ], "pop" : 83401, "state" : "IL" } +{ "_id" : "60626", "city" : "CHICAGO", "loc" : [ -87.668887, 42.009475 ], "pop" : 57320, "state" : "IL" } +{ "_id" : "60627", "city" : "RIVERDALE", "loc" : [ -87.618213, 41.645918 ], "pop" : 24996, "state" : "IL" } +{ "_id" : "60628", "city" : "CHICAGO", "loc" : [ -87.62427700000001, 41.693443 ], "pop" : 94317, "state" : "IL" } +{ "_id" : "60629", "city" : "CHICAGO", "loc" : [ -87.706936, 41.778149 ], "pop" : 91814, "state" : "IL" } +{ "_id" : "60630", "city" : "CHICAGO", "loc" : [ -87.760273, 41.969862 ], "pop" : 48371, "state" : "IL" } +{ "_id" : "60631", "city" : "CHICAGO", "loc" : [ -87.808215, 41.995145 ], "pop" : 25175, "state" : "IL" } +{ "_id" : "60632", "city" : "CHICAGO", "loc" : [ -87.70518, 41.809274 ], "pop" : 62368, "state" : "IL" } +{ "_id" : "60633", "city" : "BURNHAM", "loc" : [ -87.54948899999999, 41.649791 ], "pop" : 12367, "state" : "IL" } +{ "_id" : "60634", "city" : "NORRIDGE", "loc" : [ -87.796054, 41.945213 ], "pop" : 69160, "state" : "IL" } +{ "_id" : "60635", "city" : "ELMWOOD PARK", "loc" : [ -87.808593, 41.922907 ], "pop" : 38056, "state" : "IL" } +{ "_id" : "60636", "city" : "CHICAGO", "loc" : [ -87.667368, 41.775989 ], "pop" : 58048, "state" : "IL" } +{ "_id" : "60637", "city" : "CHICAGO", "loc" : [ -87.605097, 41.781312 ], "pop" : 59637, "state" : "IL" } +{ "_id" : "60638", "city" : "BEDFORD PARK", "loc" : [ -87.77192700000001, 41.789703 ], "pop" : 53145, "state" : "IL" } +{ "_id" : "60639", "city" : "CHICAGO", "loc" : [ -87.753502, 41.920162 ], "pop" : 74209, "state" : "IL" } +{ "_id" : "60640", "city" : "CHICAGO", "loc" : [ -87.66240500000001, 41.971928 ], "pop" : 76829, "state" : "IL" } +{ "_id" : "60641", "city" : "CHICAGO", "loc" : [ -87.747376, 41.945333 ], "pop" : 59870, "state" : "IL" } +{ "_id" : "60642", "city" : "EVERGREEN PARK", "loc" : [ -87.70172100000001, 41.718765 ], "pop" : 24016, "state" : "IL" } +{ "_id" : "60643", "city" : "CALUMET PARK", "loc" : [ -87.65944500000001, 41.693243 ], "pop" : 63953, "state" : "IL" } +{ "_id" : "60644", "city" : "CHICAGO", "loc" : [ -87.758163, 41.882913 ], "pop" : 57376, "state" : "IL" } +{ "_id" : "60645", "city" : "LINCOLNWOOD", "loc" : [ -87.6962, 42.007718 ], "pop" : 43829, "state" : "IL" } +{ "_id" : "60646", "city" : "LINCOLNWOOD", "loc" : [ -87.75917200000001, 41.996414 ], "pop" : 32075, "state" : "IL" } +{ "_id" : "60647", "city" : "CHICAGO", "loc" : [ -87.704322, 41.920903 ], "pop" : 95971, "state" : "IL" } +{ "_id" : "60648", "city" : "CHICAGO", "loc" : [ -87.81636, 42.031101 ], "pop" : 30924, "state" : "IL" } +{ "_id" : "60649", "city" : "CHICAGO", "loc" : [ -87.570252, 41.761968 ], "pop" : 54795, "state" : "IL" } +{ "_id" : "60650", "city" : "CICERO", "loc" : [ -87.76008, 41.84776 ], "pop" : 67670, "state" : "IL" } +{ "_id" : "60651", "city" : "CHICAGO", "loc" : [ -87.739307, 41.902509 ], "pop" : 78082, "state" : "IL" } +{ "_id" : "60652", "city" : "CHICAGO", "loc" : [ -87.713516, 41.745393 ], "pop" : 36337, "state" : "IL" } +{ "_id" : "60653", "city" : "CHICAGO", "loc" : [ -87.612605, 41.819645 ], "pop" : 40091, "state" : "IL" } +{ "_id" : "60654", "city" : "CHICAGO", "loc" : [ -87.63529200000001, 41.888533 ], "pop" : 0, "state" : "IL" } +{ "_id" : "60655", "city" : "MERRIONETTE PARK", "loc" : [ -87.70218800000001, 41.693033 ], "pop" : 29847, "state" : "IL" } +{ "_id" : "60656", "city" : "HARWOOD HEIGHTS", "loc" : [ -87.819981, 41.971844 ], "pop" : 43597, "state" : "IL" } +{ "_id" : "60657", "city" : "CHICAGO", "loc" : [ -87.652805, 41.93992 ], "pop" : 65533, "state" : "IL" } +{ "_id" : "60658", "city" : "ALSIP", "loc" : [ -87.729967, 41.671505 ], "pop" : 16461, "state" : "IL" } +{ "_id" : "60659", "city" : "LINCOLNWOOD", "loc" : [ -87.700823, 41.991687 ], "pop" : 35461, "state" : "IL" } +{ "_id" : "60660", "city" : "CHICAGO", "loc" : [ -87.662856, 41.990879 ], "pop" : 45106, "state" : "IL" } +{ "_id" : "60661", "city" : "CHICAGO", "loc" : [ -87.64296899999999, 41.881351 ], "pop" : 2031, "state" : "IL" } +{ "_id" : "60666", "city" : "AMF OHARE", "loc" : [ -87.906803, 41.9821 ], "pop" : 262, "state" : "IL" } +{ "_id" : "60901", "city" : "KANKAKEE", "loc" : [ -87.869607, 41.116582 ], "pop" : 35952, "state" : "IL" } +{ "_id" : "60910", "city" : "AROMA PARK", "loc" : [ -87.77188700000001, 41.094653 ], "pop" : 3151, "state" : "IL" } +{ "_id" : "60911", "city" : "ASHKUM", "loc" : [ -87.941148, 40.884431 ], "pop" : 1484, "state" : "IL" } +{ "_id" : "60912", "city" : "BEAVERVILLE", "loc" : [ -87.62171499999999, 40.967164 ], "pop" : 672, "state" : "IL" } +{ "_id" : "60913", "city" : "BONFIELD", "loc" : [ -88.061854, 41.15731 ], "pop" : 1189, "state" : "IL" } +{ "_id" : "60914", "city" : "BOURBONNAIS", "loc" : [ -87.879023, 41.166119 ], "pop" : 18311, "state" : "IL" } +{ "_id" : "60915", "city" : "BRADLEY", "loc" : [ -87.86011499999999, 41.145376 ], "pop" : 10071, "state" : "IL" } +{ "_id" : "60917", "city" : "BUCKINGHAM", "loc" : [ -88.177156, 41.043316 ], "pop" : 557, "state" : "IL" } +{ "_id" : "60918", "city" : "BUCKLEY", "loc" : [ -88.036092, 40.601827 ], "pop" : 875, "state" : "IL" } +{ "_id" : "60919", "city" : "CABERY", "loc" : [ -88.19208500000001, 40.981895 ], "pop" : 510, "state" : "IL" } +{ "_id" : "60921", "city" : "CHATSWORTH", "loc" : [ -88.293662, 40.748441 ], "pop" : 1703, "state" : "IL" } +{ "_id" : "60922", "city" : "CHEBANSE", "loc" : [ -87.895917, 41.02541 ], "pop" : 3580, "state" : "IL" } +{ "_id" : "60924", "city" : "CISSNA PARK", "loc" : [ -87.87588, 40.585814 ], "pop" : 2282, "state" : "IL" } +{ "_id" : "60927", "city" : "CLIFTON", "loc" : [ -87.920237, 40.939444 ], "pop" : 2033, "state" : "IL" } +{ "_id" : "60928", "city" : "CRESCENT CITY", "loc" : [ -87.83703, 40.7682 ], "pop" : 1271, "state" : "IL" } +{ "_id" : "60929", "city" : "CULLOM", "loc" : [ -88.276476, 40.878066 ], "pop" : 782, "state" : "IL" } +{ "_id" : "60930", "city" : "DANFORTH", "loc" : [ -87.986824, 40.82443 ], "pop" : 959, "state" : "IL" } +{ "_id" : "60931", "city" : "DONOVAN", "loc" : [ -87.604635, 40.889074 ], "pop" : 613, "state" : "IL" } +{ "_id" : "60934", "city" : "EMINGTON", "loc" : [ -88.321135, 40.978317 ], "pop" : 330, "state" : "IL" } +{ "_id" : "60935", "city" : "ESSEX", "loc" : [ -88.184528, 41.167644 ], "pop" : 994, "state" : "IL" } +{ "_id" : "60936", "city" : "GIBSON CITY", "loc" : [ -88.360873, 40.465932 ], "pop" : 4608, "state" : "IL" } +{ "_id" : "60938", "city" : "GILMAN", "loc" : [ -87.993336, 40.767987 ], "pop" : 2125, "state" : "IL" } +{ "_id" : "60940", "city" : "GRANT PARK", "loc" : [ -87.647992, 41.247677 ], "pop" : 3009, "state" : "IL" } +{ "_id" : "60941", "city" : "HERSCHER", "loc" : [ -88.085801, 41.046441 ], "pop" : 2138, "state" : "IL" } +{ "_id" : "60942", "city" : "HOOPESTON", "loc" : [ -87.666229, 40.463873 ], "pop" : 6600, "state" : "IL" } +{ "_id" : "60946", "city" : "KEMPTON", "loc" : [ -88.209013, 40.912604 ], "pop" : 462, "state" : "IL" } +{ "_id" : "60948", "city" : "LODA", "loc" : [ -88.092675, 40.524097 ], "pop" : 1474, "state" : "IL" } +{ "_id" : "60949", "city" : "LUDLOW", "loc" : [ -88.13796499999999, 40.374736 ], "pop" : 832, "state" : "IL" } +{ "_id" : "60950", "city" : "MANTENO", "loc" : [ -87.846761, 41.251439 ], "pop" : 5673, "state" : "IL" } +{ "_id" : "60951", "city" : "MARTINTON", "loc" : [ -87.744257, 40.905233 ], "pop" : 1004, "state" : "IL" } +{ "_id" : "60952", "city" : "MELVIN", "loc" : [ -88.255078, 40.571379 ], "pop" : 654, "state" : "IL" } +{ "_id" : "60953", "city" : "MILFORD", "loc" : [ -87.685332, 40.629253 ], "pop" : 2367, "state" : "IL" } +{ "_id" : "60954", "city" : "MOMENCE", "loc" : [ -87.657515, 41.159308 ], "pop" : 6804, "state" : "IL" } +{ "_id" : "60955", "city" : "ONARGA", "loc" : [ -87.995841, 40.712005 ], "pop" : 1678, "state" : "IL" } +{ "_id" : "60957", "city" : "PAXTON", "loc" : [ -88.098989, 40.456546 ], "pop" : 5226, "state" : "IL" } +{ "_id" : "60959", "city" : "PIPER CITY", "loc" : [ -88.187347, 40.755615 ], "pop" : 1187, "state" : "IL" } +{ "_id" : "60960", "city" : "RANKIN", "loc" : [ -87.888355, 40.455911 ], "pop" : 1697, "state" : "IL" } +{ "_id" : "60961", "city" : "REDDICK", "loc" : [ -88.208928, 41.10053 ], "pop" : 480, "state" : "IL" } +{ "_id" : "60962", "city" : "ROBERTS", "loc" : [ -88.180414, 40.619333 ], "pop" : 617, "state" : "IL" } +{ "_id" : "60963", "city" : "ROSSVILLE", "loc" : [ -87.66918099999999, 40.362548 ], "pop" : 2082, "state" : "IL" } +{ "_id" : "60964", "city" : "SAINT ANNE", "loc" : [ -87.656363, 41.048725 ], "pop" : 6081, "state" : "IL" } +{ "_id" : "60966", "city" : "SHELDON", "loc" : [ -87.57364, 40.780288 ], "pop" : 1966, "state" : "IL" } +{ "_id" : "60968", "city" : "THAWVILLE", "loc" : [ -88.09993, 40.684011 ], "pop" : 374, "state" : "IL" } +{ "_id" : "60970", "city" : "WATSEKA", "loc" : [ -87.730932, 40.773351 ], "pop" : 7072, "state" : "IL" } +{ "_id" : "60973", "city" : "WELLINGTON", "loc" : [ -87.65607, 40.53394 ], "pop" : 782, "state" : "IL" } +{ "_id" : "61001", "city" : "APPLE RIVER", "loc" : [ -90.12014499999999, 42.471432 ], "pop" : 1010, "state" : "IL" } +{ "_id" : "61006", "city" : "ASHTON", "loc" : [ -89.2086, 41.864327 ], "pop" : 1911, "state" : "IL" } +{ "_id" : "61007", "city" : "BAILEYVILLE", "loc" : [ -89.593937, 42.190465 ], "pop" : 430, "state" : "IL" } +{ "_id" : "61008", "city" : "BELVIDERE", "loc" : [ -88.850943, 42.259465 ], "pop" : 22199, "state" : "IL" } +{ "_id" : "61010", "city" : "BYRON", "loc" : [ -89.26588700000001, 42.129236 ], "pop" : 4894, "state" : "IL" } +{ "_id" : "61011", "city" : "CALEDONIA", "loc" : [ -88.91845600000001, 42.38346 ], "pop" : 2086, "state" : "IL" } +{ "_id" : "61012", "city" : "CAPRON", "loc" : [ -88.74651799999999, 42.408659 ], "pop" : 1893, "state" : "IL" } +{ "_id" : "61014", "city" : "CHADWICK", "loc" : [ -89.896278, 41.996205 ], "pop" : 1252, "state" : "IL" } +{ "_id" : "61015", "city" : "CHANA", "loc" : [ -89.211693, 41.993343 ], "pop" : 1167, "state" : "IL" } +{ "_id" : "61016", "city" : "CHERRY VALLEY", "loc" : [ -88.961923, 42.220562 ], "pop" : 3768, "state" : "IL" } +{ "_id" : "61018", "city" : "DAKOTA", "loc" : [ -89.54678199999999, 42.403078 ], "pop" : 1134, "state" : "IL" } +{ "_id" : "61019", "city" : "DAVIS", "loc" : [ -89.406721, 42.442157 ], "pop" : 2337, "state" : "IL" } +{ "_id" : "61020", "city" : "DAVIS JUNCTION", "loc" : [ -89.083838, 42.09792 ], "pop" : 1263, "state" : "IL" } +{ "_id" : "61021", "city" : "DIXON", "loc" : [ -89.48930300000001, 41.847797 ], "pop" : 22293, "state" : "IL" } +{ "_id" : "61024", "city" : "DURAND", "loc" : [ -89.309378, 42.433653 ], "pop" : 2633, "state" : "IL" } +{ "_id" : "61025", "city" : "EAST DUBUQUE", "loc" : [ -90.604597, 42.487488 ], "pop" : 4999, "state" : "IL" } +{ "_id" : "61028", "city" : "ELIZABETH", "loc" : [ -90.19862000000001, 42.308942 ], "pop" : 1951, "state" : "IL" } +{ "_id" : "61030", "city" : "FORRESTON", "loc" : [ -89.583124, 42.122924 ], "pop" : 2261, "state" : "IL" } +{ "_id" : "61031", "city" : "FRANKLIN GROVE", "loc" : [ -89.31711199999999, 41.857968 ], "pop" : 2070, "state" : "IL" } +{ "_id" : "61032", "city" : "FREEPORT", "loc" : [ -89.63452100000001, 42.299148 ], "pop" : 33259, "state" : "IL" } +{ "_id" : "61036", "city" : "GALENA", "loc" : [ -90.41950900000001, 42.418233 ], "pop" : 5479, "state" : "IL" } +{ "_id" : "61038", "city" : "GARDEN PRAIRIE", "loc" : [ -88.74366999999999, 42.250983 ], "pop" : 1584, "state" : "IL" } +{ "_id" : "61039", "city" : "GERMAN VALLEY", "loc" : [ -89.47115100000001, 42.21761 ], "pop" : 1003, "state" : "IL" } +{ "_id" : "61041", "city" : "HANOVER", "loc" : [ -90.28970700000001, 42.259405 ], "pop" : 1559, "state" : "IL" } +{ "_id" : "61042", "city" : "HARMON", "loc" : [ -89.569513, 41.697296 ], "pop" : 793, "state" : "IL" } +{ "_id" : "61044", "city" : "KENT", "loc" : [ -89.919489, 42.315528 ], "pop" : 425, "state" : "IL" } +{ "_id" : "61045", "city" : "KINGS", "loc" : [ -89.09968499999999, 42.013987 ], "pop" : 377, "state" : "IL" } +{ "_id" : "61046", "city" : "LANARK", "loc" : [ -89.824732, 42.093534 ], "pop" : 1843, "state" : "IL" } +{ "_id" : "61047", "city" : "EGAN", "loc" : [ -89.40102400000001, 42.140975 ], "pop" : 1804, "state" : "IL" } +{ "_id" : "61048", "city" : "LENA", "loc" : [ -89.82525099999999, 42.379054 ], "pop" : 4251, "state" : "IL" } +{ "_id" : "61049", "city" : "LINDENWOOD", "loc" : [ -89.033979, 42.050741 ], "pop" : 351, "state" : "IL" } +{ "_id" : "61050", "city" : "MC CONNELL", "loc" : [ -89.741545, 42.439511 ], "pop" : 357, "state" : "IL" } +{ "_id" : "61051", "city" : "MILLEDGEVILLE", "loc" : [ -89.78012099999999, 41.96737 ], "pop" : 1526, "state" : "IL" } +{ "_id" : "61052", "city" : "MONROE CENTER", "loc" : [ -89.016946, 42.10501 ], "pop" : 1327, "state" : "IL" } +{ "_id" : "61053", "city" : "MOUNT CARROLL", "loc" : [ -89.984454, 42.105308 ], "pop" : 3529, "state" : "IL" } +{ "_id" : "61054", "city" : "MOUNT MORRIS", "loc" : [ -89.434614, 42.047903 ], "pop" : 4169, "state" : "IL" } +{ "_id" : "61060", "city" : "ORANGEVILLE", "loc" : [ -89.644757, 42.472779 ], "pop" : 1318, "state" : "IL" } +{ "_id" : "61061", "city" : "OREGON", "loc" : [ -89.344364, 42.009512 ], "pop" : 6482, "state" : "IL" } +{ "_id" : "61062", "city" : "PEARL CITY", "loc" : [ -89.83932900000001, 42.260972 ], "pop" : 1987, "state" : "IL" } +{ "_id" : "61063", "city" : "PECATONICA", "loc" : [ -89.34722499999999, 42.305111 ], "pop" : 3554, "state" : "IL" } +{ "_id" : "61064", "city" : "POLO", "loc" : [ -89.598358, 41.98895 ], "pop" : 4524, "state" : "IL" } +{ "_id" : "61065", "city" : "POPLAR GROVE", "loc" : [ -88.84277400000001, 42.359365 ], "pop" : 2593, "state" : "IL" } +{ "_id" : "61067", "city" : "RIDOTT", "loc" : [ -89.462664, 42.299607 ], "pop" : 750, "state" : "IL" } +{ "_id" : "61068", "city" : "ROCHELLE", "loc" : [ -89.07103499999999, 41.928156 ], "pop" : 12890, "state" : "IL" } +{ "_id" : "61070", "city" : "ROCK CITY", "loc" : [ -89.47590099999999, 42.410345 ], "pop" : 1420, "state" : "IL" } +{ "_id" : "61071", "city" : "ROCK FALLS", "loc" : [ -89.69247300000001, 41.766525 ], "pop" : 14548, "state" : "IL" } +{ "_id" : "61072", "city" : "ROCKTON", "loc" : [ -89.08874400000001, 42.454371 ], "pop" : 6514, "state" : "IL" } +{ "_id" : "61073", "city" : "ROSCOE", "loc" : [ -88.99433000000001, 42.421659 ], "pop" : 10391, "state" : "IL" } +{ "_id" : "61074", "city" : "SAVANNA", "loc" : [ -90.140061, 42.095581 ], "pop" : 4943, "state" : "IL" } +{ "_id" : "61075", "city" : "SCALES MOUND", "loc" : [ -90.258033, 42.471548 ], "pop" : 909, "state" : "IL" } +{ "_id" : "61078", "city" : "SHANNON", "loc" : [ -89.748075, 42.161049 ], "pop" : 1753, "state" : "IL" } +{ "_id" : "61080", "city" : "SOUTH BELOIT", "loc" : [ -89.029791, 42.483672 ], "pop" : 6833, "state" : "IL" } +{ "_id" : "61081", "city" : "STERLING", "loc" : [ -89.70538999999999, 41.805511 ], "pop" : 22261, "state" : "IL" } +{ "_id" : "61084", "city" : "STILLMAN VALLEY", "loc" : [ -89.189762, 42.11835 ], "pop" : 2772, "state" : "IL" } +{ "_id" : "61085", "city" : "STOCKTON", "loc" : [ -90.020185, 42.349224 ], "pop" : 3489, "state" : "IL" } +{ "_id" : "61087", "city" : "WARREN", "loc" : [ -89.985992, 42.489001 ], "pop" : 1967, "state" : "IL" } +{ "_id" : "61088", "city" : "WINNEBAGO", "loc" : [ -89.23731600000001, 42.272723 ], "pop" : 4059, "state" : "IL" } +{ "_id" : "61089", "city" : "WINSLOW", "loc" : [ -89.806028, 42.48383 ], "pop" : 887, "state" : "IL" } +{ "_id" : "61101", "city" : "ROCKFORD", "loc" : [ -89.116118, 42.292233 ], "pop" : 23908, "state" : "IL" } +{ "_id" : "61102", "city" : "ROCKFORD", "loc" : [ -89.124695, 42.254669 ], "pop" : 19427, "state" : "IL" } +{ "_id" : "61103", "city" : "ROCKFORD", "loc" : [ -89.083326, 42.300986 ], "pop" : 24143, "state" : "IL" } +{ "_id" : "61104", "city" : "ROCKFORD", "loc" : [ -89.076779, 42.255355 ], "pop" : 19912, "state" : "IL" } +{ "_id" : "61107", "city" : "ROCKFORD", "loc" : [ -89.036107, 42.278629 ], "pop" : 28879, "state" : "IL" } +{ "_id" : "61108", "city" : "ROCKFORD", "loc" : [ -89.02351899999999, 42.251406 ], "pop" : 25501, "state" : "IL" } +{ "_id" : "61109", "city" : "ROCKFORD", "loc" : [ -89.05118, 42.216581 ], "pop" : 25246, "state" : "IL" } +{ "_id" : "61111", "city" : "LOVES PARK", "loc" : [ -89.03352099999999, 42.32952 ], "pop" : 47733, "state" : "IL" } +{ "_id" : "61112", "city" : "ROCKFORD", "loc" : [ -88.970429, 42.245639 ], "pop" : 15, "state" : "IL" } +{ "_id" : "61201", "city" : "ROCK ISLAND", "loc" : [ -90.564796, 41.491317 ], "pop" : 37799, "state" : "IL" } +{ "_id" : "61230", "city" : "ALBANY", "loc" : [ -90.208051, 41.765874 ], "pop" : 1287, "state" : "IL" } +{ "_id" : "61231", "city" : "ALEDO", "loc" : [ -90.741629, 41.20078 ], "pop" : 5189, "state" : "IL" } +{ "_id" : "61232", "city" : "ANDALUSIA", "loc" : [ -90.728385, 41.435324 ], "pop" : 1899, "state" : "IL" } +{ "_id" : "61234", "city" : "ANNAWAN", "loc" : [ -89.912949, 41.398022 ], "pop" : 1432, "state" : "IL" } +{ "_id" : "61235", "city" : "ATKINSON", "loc" : [ -90.022482, 41.41619 ], "pop" : 1619, "state" : "IL" } +{ "_id" : "61238", "city" : "CAMBRIDGE", "loc" : [ -90.18048, 41.311379 ], "pop" : 3265, "state" : "IL" } +{ "_id" : "61240", "city" : "COAL VALLEY", "loc" : [ -90.46517900000001, 41.435143 ], "pop" : 5435, "state" : "IL" } +{ "_id" : "61241", "city" : "GREEN ROCK", "loc" : [ -90.349231, 41.475224 ], "pop" : 7809, "state" : "IL" } +{ "_id" : "61242", "city" : "CORDOVA", "loc" : [ -90.307121, 41.69278 ], "pop" : 954, "state" : "IL" } +{ "_id" : "61243", "city" : "DEER GROVE", "loc" : [ -89.6972, 41.631599 ], "pop" : 393, "state" : "IL" } +{ "_id" : "61244", "city" : "EAST MOLINE", "loc" : [ -90.432118, 41.511804 ], "pop" : 24023, "state" : "IL" } +{ "_id" : "61250", "city" : "ERIE", "loc" : [ -90.084264, 41.655958 ], "pop" : 2428, "state" : "IL" } +{ "_id" : "61251", "city" : "FENTON", "loc" : [ -90.04568500000001, 41.728495 ], "pop" : 289, "state" : "IL" } +{ "_id" : "61252", "city" : "FULTON", "loc" : [ -90.15065300000001, 41.8522 ], "pop" : 5743, "state" : "IL" } +{ "_id" : "61254", "city" : "GENESEO", "loc" : [ -90.171127, 41.46881 ], "pop" : 10023, "state" : "IL" } +{ "_id" : "61256", "city" : "HAMPTON", "loc" : [ -90.323037, 41.541805 ], "pop" : 538, "state" : "IL" } +{ "_id" : "61257", "city" : "HILLSDALE", "loc" : [ -90.22625499999999, 41.592896 ], "pop" : 1807, "state" : "IL" } +{ "_id" : "61259", "city" : "ILLINOIS CITY", "loc" : [ -90.89250699999999, 41.389236 ], "pop" : 1553, "state" : "IL" } +{ "_id" : "61260", "city" : "JOY", "loc" : [ -90.85175700000001, 41.226198 ], "pop" : 1185, "state" : "IL" } +{ "_id" : "61261", "city" : "LYNDON", "loc" : [ -89.916865, 41.719933 ], "pop" : 936, "state" : "IL" } +{ "_id" : "61262", "city" : "LYNN CENTER", "loc" : [ -90.330444, 41.288761 ], "pop" : 1694, "state" : "IL" } +{ "_id" : "61263", "city" : "MATHERVILLE", "loc" : [ -90.602343, 41.269075 ], "pop" : 1409, "state" : "IL" } +{ "_id" : "61264", "city" : "MILAN", "loc" : [ -90.57393500000001, 41.426197 ], "pop" : 14565, "state" : "IL" } +{ "_id" : "61265", "city" : "MOLINE", "loc" : [ -90.497968, 41.490609 ], "pop" : 45240, "state" : "IL" } +{ "_id" : "61270", "city" : "MORRISON", "loc" : [ -89.96899500000001, 41.816664 ], "pop" : 7580, "state" : "IL" } +{ "_id" : "61272", "city" : "NEW BOSTON", "loc" : [ -90.98786, 41.215259 ], "pop" : 1663, "state" : "IL" } +{ "_id" : "61273", "city" : "ORION", "loc" : [ -90.384929, 41.363367 ], "pop" : 3121, "state" : "IL" } +{ "_id" : "61274", "city" : "OSCO", "loc" : [ -90.26809299999999, 41.363674 ], "pop" : 538, "state" : "IL" } +{ "_id" : "61275", "city" : "PORT BYRON", "loc" : [ -90.326291, 41.601346 ], "pop" : 3441, "state" : "IL" } +{ "_id" : "61277", "city" : "PROPHETSTOWN", "loc" : [ -89.946665, 41.631223 ], "pop" : 3736, "state" : "IL" } +{ "_id" : "61279", "city" : "REYNOLDS", "loc" : [ -90.638367, 41.327675 ], "pop" : 944, "state" : "IL" } +{ "_id" : "61281", "city" : "SHERRARD", "loc" : [ -90.493863, 41.302669 ], "pop" : 2192, "state" : "IL" } +{ "_id" : "61282", "city" : "SILVIS", "loc" : [ -90.412609, 41.500677 ], "pop" : 9832, "state" : "IL" } +{ "_id" : "61283", "city" : "TAMPICO", "loc" : [ -89.794793, 41.652158 ], "pop" : 1753, "state" : "IL" } +{ "_id" : "61284", "city" : "TAYLOR RIDGE", "loc" : [ -90.734047, 41.382755 ], "pop" : 1090, "state" : "IL" } +{ "_id" : "61285", "city" : "THOMSON", "loc" : [ -90.08444299999999, 41.981626 ], "pop" : 1868, "state" : "IL" } +{ "_id" : "61301", "city" : "LA SALLE", "loc" : [ -89.095468, 41.344221 ], "pop" : 10188, "state" : "IL" } +{ "_id" : "61310", "city" : "AMBOY", "loc" : [ -89.34716, 41.704181 ], "pop" : 3994, "state" : "IL" } +{ "_id" : "61311", "city" : "ANCONA", "loc" : [ -88.76603900000001, 41.055118 ], "pop" : 38, "state" : "IL" } +{ "_id" : "61312", "city" : "ARLINGTON", "loc" : [ -89.221949, 41.443669 ], "pop" : 1044, "state" : "IL" } +{ "_id" : "61313", "city" : "BLACKSTONE", "loc" : [ -88.649782, 41.071945 ], "pop" : 258, "state" : "IL" } +{ "_id" : "61314", "city" : "BUDA", "loc" : [ -89.67947599999999, 41.313973 ], "pop" : 931, "state" : "IL" } +{ "_id" : "61318", "city" : "COMPTON", "loc" : [ -89.08770800000001, 41.684976 ], "pop" : 551, "state" : "IL" } +{ "_id" : "61319", "city" : "MANVILLE", "loc" : [ -88.742694, 40.985827 ], "pop" : 968, "state" : "IL" } +{ "_id" : "61320", "city" : "DALZELL", "loc" : [ -89.20326900000001, 41.373077 ], "pop" : 2255, "state" : "IL" } +{ "_id" : "61321", "city" : "DANA", "loc" : [ -88.962793, 40.954675 ], "pop" : 257, "state" : "IL" } +{ "_id" : "61325", "city" : "GRAND RIDGE", "loc" : [ -88.816836, 41.238621 ], "pop" : 1179, "state" : "IL" } +{ "_id" : "61326", "city" : "GRANVILLE", "loc" : [ -89.22502900000001, 41.264212 ], "pop" : 2784, "state" : "IL" } +{ "_id" : "61327", "city" : "HENNEPIN", "loc" : [ -89.321791, 41.235154 ], "pop" : 1111, "state" : "IL" } +{ "_id" : "61330", "city" : "LA MOILLE", "loc" : [ -89.29702399999999, 41.537557 ], "pop" : 1315, "state" : "IL" } +{ "_id" : "61332", "city" : "LEONORE", "loc" : [ -88.99693600000001, 41.166368 ], "pop" : 437, "state" : "IL" } +{ "_id" : "61333", "city" : "LONG POINT", "loc" : [ -88.881106, 40.989553 ], "pop" : 541, "state" : "IL" } +{ "_id" : "61334", "city" : "LOSTANT", "loc" : [ -89.075031, 41.145007 ], "pop" : 747, "state" : "IL" } +{ "_id" : "61335", "city" : "MC NABB", "loc" : [ -89.218664, 41.173026 ], "pop" : 747, "state" : "IL" } +{ "_id" : "61336", "city" : "MAGNOLIA", "loc" : [ -89.22701000000001, 41.116374 ], "pop" : 519, "state" : "IL" } +{ "_id" : "61337", "city" : "MALDEN", "loc" : [ -89.36761, 41.437743 ], "pop" : 1109, "state" : "IL" } +{ "_id" : "61341", "city" : "MARSEILLES", "loc" : [ -88.694678, 41.330201 ], "pop" : 7360, "state" : "IL" } +{ "_id" : "61342", "city" : "MENDOTA", "loc" : [ -89.10827999999999, 41.544308 ], "pop" : 9660, "state" : "IL" } +{ "_id" : "61344", "city" : "MINERAL", "loc" : [ -89.820087, 41.403556 ], "pop" : 648, "state" : "IL" } +{ "_id" : "61345", "city" : "NEPONSET", "loc" : [ -89.794382, 41.290457 ], "pop" : 819, "state" : "IL" } +{ "_id" : "61346", "city" : "NEW BEDFORD", "loc" : [ -89.778558, 41.540883 ], "pop" : 641, "state" : "IL" } +{ "_id" : "61348", "city" : "OGLESBY", "loc" : [ -89.055341, 41.292768 ], "pop" : 5323, "state" : "IL" } +{ "_id" : "61349", "city" : "OHIO", "loc" : [ -89.45741099999999, 41.537149 ], "pop" : 1031, "state" : "IL" } +{ "_id" : "61350", "city" : "OTTAWA", "loc" : [ -88.841589, 41.352619 ], "pop" : 23727, "state" : "IL" } +{ "_id" : "61353", "city" : "PAW PAW", "loc" : [ -88.967377, 41.685228 ], "pop" : 1539, "state" : "IL" } +{ "_id" : "61354", "city" : "PERU", "loc" : [ -89.12647800000001, 41.333021 ], "pop" : 10050, "state" : "IL" } +{ "_id" : "61356", "city" : "PRINCETON", "loc" : [ -89.42701700000001, 41.362934 ], "pop" : 12333, "state" : "IL" } +{ "_id" : "61358", "city" : "RUTLAND", "loc" : [ -89.03882900000001, 40.984407 ], "pop" : 629, "state" : "IL" } +{ "_id" : "61360", "city" : "SENECA", "loc" : [ -88.610013, 41.315248 ], "pop" : 2246, "state" : "IL" } +{ "_id" : "61361", "city" : "SHEFFIELD", "loc" : [ -89.711502, 41.394876 ], "pop" : 1964, "state" : "IL" } +{ "_id" : "61362", "city" : "SPRING VALLEY", "loc" : [ -89.20417, 41.327923 ], "pop" : 5541, "state" : "IL" } +{ "_id" : "61364", "city" : "STREATOR", "loc" : [ -88.83067200000001, 41.12249 ], "pop" : 22239, "state" : "IL" } +{ "_id" : "61367", "city" : "SUBLETTE", "loc" : [ -89.235409, 41.633144 ], "pop" : 899, "state" : "IL" } +{ "_id" : "61368", "city" : "TISKILWA", "loc" : [ -89.50796800000001, 41.289055 ], "pop" : 1587, "state" : "IL" } +{ "_id" : "61369", "city" : "TOLUCA", "loc" : [ -89.13481, 41.004553 ], "pop" : 1755, "state" : "IL" } +{ "_id" : "61370", "city" : "TONICA", "loc" : [ -89.088993, 41.232741 ], "pop" : 1409, "state" : "IL" } +{ "_id" : "61373", "city" : "UTICA", "loc" : [ -89.000795, 41.363033 ], "pop" : 1926, "state" : "IL" } +{ "_id" : "61375", "city" : "VARNA", "loc" : [ -89.24833099999999, 41.032723 ], "pop" : 1527, "state" : "IL" } +{ "_id" : "61376", "city" : "NORMANDY", "loc" : [ -89.592237, 41.553035 ], "pop" : 2050, "state" : "IL" } +{ "_id" : "61377", "city" : "WENONA", "loc" : [ -89.04163699999999, 41.054846 ], "pop" : 1410, "state" : "IL" } +{ "_id" : "61378", "city" : "WEST BROOKLYN", "loc" : [ -89.190917, 41.729156 ], "pop" : 946, "state" : "IL" } +{ "_id" : "61379", "city" : "WYANET", "loc" : [ -89.574423, 41.378452 ], "pop" : 1799, "state" : "IL" } +{ "_id" : "61401", "city" : "GALESBURG", "loc" : [ -90.36980699999999, 40.952138 ], "pop" : 36161, "state" : "IL" } +{ "_id" : "61410", "city" : "ABINGDON", "loc" : [ -90.400898, 40.802312 ], "pop" : 4241, "state" : "IL" } +{ "_id" : "61411", "city" : "ADAIR", "loc" : [ -90.503742, 40.385197 ], "pop" : 731, "state" : "IL" } +{ "_id" : "61412", "city" : "ALEXIS", "loc" : [ -90.543576, 41.052146 ], "pop" : 1866, "state" : "IL" } +{ "_id" : "61413", "city" : "ALPHA", "loc" : [ -90.382081, 41.193029 ], "pop" : 1152, "state" : "IL" } +{ "_id" : "61414", "city" : "ALTONA", "loc" : [ -90.159826, 41.112828 ], "pop" : 813, "state" : "IL" } +{ "_id" : "61415", "city" : "AVON", "loc" : [ -90.44605300000001, 40.654947 ], "pop" : 2125, "state" : "IL" } +{ "_id" : "61416", "city" : "BARDOLPH", "loc" : [ -90.502495, 40.498078 ], "pop" : 365, "state" : "IL" } +{ "_id" : "61417", "city" : "BERWICK", "loc" : [ -90.50591300000001, 40.779911 ], "pop" : 461, "state" : "IL" } +{ "_id" : "61418", "city" : "BIGGSVILLE", "loc" : [ -90.85605700000001, 40.853122 ], "pop" : 627, "state" : "IL" } +{ "_id" : "61420", "city" : "BLANDINSVILLE", "loc" : [ -90.859521, 40.551585 ], "pop" : 1272, "state" : "IL" } +{ "_id" : "61421", "city" : "BRADFORD", "loc" : [ -89.65207700000001, 41.15323 ], "pop" : 2071, "state" : "IL" } +{ "_id" : "61422", "city" : "BUSHNELL", "loc" : [ -90.506027, 40.553916 ], "pop" : 3511, "state" : "IL" } +{ "_id" : "61423", "city" : "CAMERON", "loc" : [ -90.50013, 40.888963 ], "pop" : 969, "state" : "IL" } +{ "_id" : "61425", "city" : "CARMAN", "loc" : [ -91.05639600000001, 40.755054 ], "pop" : 398, "state" : "IL" } +{ "_id" : "61427", "city" : "CUBA", "loc" : [ -90.181055, 40.4995 ], "pop" : 2169, "state" : "IL" } +{ "_id" : "61428", "city" : "DAHINDA", "loc" : [ -90.139808, 40.95508 ], "pop" : 710, "state" : "IL" } +{ "_id" : "61431", "city" : "ELLISVILLE", "loc" : [ -90.287469, 40.604652 ], "pop" : 565, "state" : "IL" } +{ "_id" : "61432", "city" : "FAIRVIEW", "loc" : [ -90.16526500000001, 40.64418 ], "pop" : 702, "state" : "IL" } +{ "_id" : "61433", "city" : "FIATT", "loc" : [ -90.16218600000001, 40.571779 ], "pop" : 495, "state" : "IL" } +{ "_id" : "61434", "city" : "GALVA", "loc" : [ -90.04809299999999, 41.165627 ], "pop" : 3725, "state" : "IL" } +{ "_id" : "61435", "city" : "GERLAW", "loc" : [ -90.622765, 40.999519 ], "pop" : 520, "state" : "IL" } +{ "_id" : "61436", "city" : "GILSON", "loc" : [ -90.174663, 40.876525 ], "pop" : 696, "state" : "IL" } +{ "_id" : "61437", "city" : "GLADSTONE", "loc" : [ -90.994078, 40.837682 ], "pop" : 1166, "state" : "IL" } +{ "_id" : "61438", "city" : "GOOD HOPE", "loc" : [ -90.63243199999999, 40.574891 ], "pop" : 499, "state" : "IL" } +{ "_id" : "61440", "city" : "INDUSTRY", "loc" : [ -90.610524, 40.3256 ], "pop" : 885, "state" : "IL" } +{ "_id" : "61441", "city" : "IPAVA", "loc" : [ -90.296744, 40.359375 ], "pop" : 1152, "state" : "IL" } +{ "_id" : "61442", "city" : "KEITHSBURG", "loc" : [ -90.926337, 41.104333 ], "pop" : 1024, "state" : "IL" } +{ "_id" : "61443", "city" : "KEWANEE", "loc" : [ -89.92739, 41.241116 ], "pop" : 14861, "state" : "IL" } +{ "_id" : "61447", "city" : "KIRKWOOD", "loc" : [ -90.745659, 40.863849 ], "pop" : 1171, "state" : "IL" } +{ "_id" : "61448", "city" : "KNOXVILLE", "loc" : [ -90.287116, 40.910672 ], "pop" : 5958, "state" : "IL" } +{ "_id" : "61449", "city" : "LA FAYETTE", "loc" : [ -89.957466, 41.109535 ], "pop" : 454, "state" : "IL" } +{ "_id" : "61450", "city" : "LA HARPE", "loc" : [ -90.968746, 40.584586 ], "pop" : 1686, "state" : "IL" } +{ "_id" : "61451", "city" : "LAURA", "loc" : [ -89.93490799999999, 40.933468 ], "pop" : 500, "state" : "IL" } +{ "_id" : "61452", "city" : "LITTLETON", "loc" : [ -90.61900799999999, 40.233929 ], "pop" : 386, "state" : "IL" } +{ "_id" : "61453", "city" : "LITTLE YORK", "loc" : [ -90.736434, 41.01529 ], "pop" : 679, "state" : "IL" } +{ "_id" : "61454", "city" : "LOMAX", "loc" : [ -91.039096, 40.676143 ], "pop" : 1036, "state" : "IL" } +{ "_id" : "61455", "city" : "MACOMB", "loc" : [ -90.678674, 40.461674 ], "pop" : 23503, "state" : "IL" } +{ "_id" : "61458", "city" : "MAQUON", "loc" : [ -90.200841, 40.784863 ], "pop" : 1226, "state" : "IL" } +{ "_id" : "61459", "city" : "MARIETTA", "loc" : [ -90.38845999999999, 40.497775 ], "pop" : 421, "state" : "IL" } +{ "_id" : "61460", "city" : "MEDIA", "loc" : [ -90.85696, 40.761775 ], "pop" : 484, "state" : "IL" } +{ "_id" : "61462", "city" : "MONMOUTH", "loc" : [ -90.644828, 40.910702 ], "pop" : 11245, "state" : "IL" } +{ "_id" : "61465", "city" : "NEW WINDSOR", "loc" : [ -90.45984199999999, 41.198734 ], "pop" : 1171, "state" : "IL" } +{ "_id" : "61466", "city" : "NORTH HENDERSON", "loc" : [ -90.47357100000001, 41.100607 ], "pop" : 390, "state" : "IL" } +{ "_id" : "61467", "city" : "ONEIDA", "loc" : [ -90.239093, 41.083236 ], "pop" : 1122, "state" : "IL" } +{ "_id" : "61469", "city" : "OQUAWKA", "loc" : [ -90.930199, 40.944174 ], "pop" : 2410, "state" : "IL" } +{ "_id" : "61470", "city" : "PRAIRIE CITY", "loc" : [ -90.472748, 40.617952 ], "pop" : 651, "state" : "IL" } +{ "_id" : "61471", "city" : "RARITAN", "loc" : [ -90.831891, 40.687808 ], "pop" : 345, "state" : "IL" } +{ "_id" : "61472", "city" : "RIO", "loc" : [ -90.389978, 41.110319 ], "pop" : 570, "state" : "IL" } +{ "_id" : "61473", "city" : "ROSEVILLE", "loc" : [ -90.65145, 40.723821 ], "pop" : 1734, "state" : "IL" } +{ "_id" : "61474", "city" : "SAINT AUGUSTINE", "loc" : [ -90.37978099999999, 40.7289 ], "pop" : 376, "state" : "IL" } +{ "_id" : "61475", "city" : "SCIOTA", "loc" : [ -90.707999, 40.567361 ], "pop" : 622, "state" : "IL" } +{ "_id" : "61476", "city" : "SEATON", "loc" : [ -90.825654, 41.073222 ], "pop" : 704, "state" : "IL" } +{ "_id" : "61477", "city" : "SMITHFIELD", "loc" : [ -90.285601, 40.48551 ], "pop" : 647, "state" : "IL" } +{ "_id" : "61478", "city" : "SMITHSHIRE", "loc" : [ -90.739874, 40.740021 ], "pop" : 568, "state" : "IL" } +{ "_id" : "61479", "city" : "SPEER", "loc" : [ -89.693254, 41.009682 ], "pop" : 398, "state" : "IL" } +{ "_id" : "61480", "city" : "STRONGHURST", "loc" : [ -90.925702, 40.752265 ], "pop" : 1055, "state" : "IL" } +{ "_id" : "61482", "city" : "TABLE GROVE", "loc" : [ -90.423901, 40.378441 ], "pop" : 429, "state" : "IL" } +{ "_id" : "61483", "city" : "TOULON", "loc" : [ -89.860584, 41.100949 ], "pop" : 2378, "state" : "IL" } +{ "_id" : "61484", "city" : "VERMONT", "loc" : [ -90.422028, 40.30623 ], "pop" : 1112, "state" : "IL" } +{ "_id" : "61485", "city" : "VICTORIA", "loc" : [ -90.09332499999999, 41.025635 ], "pop" : 669, "state" : "IL" } +{ "_id" : "61486", "city" : "VIOLA", "loc" : [ -90.593583, 41.202422 ], "pop" : 1651, "state" : "IL" } +{ "_id" : "61488", "city" : "WATAGA", "loc" : [ -90.27231, 41.022351 ], "pop" : 1197, "state" : "IL" } +{ "_id" : "61489", "city" : "WILLIAMSFIELD", "loc" : [ -90.026725, 40.927724 ], "pop" : 912, "state" : "IL" } +{ "_id" : "61490", "city" : "WOODHULL", "loc" : [ -90.283282, 41.184887 ], "pop" : 1390, "state" : "IL" } +{ "_id" : "61491", "city" : "WYOMING", "loc" : [ -89.778238, 41.059879 ], "pop" : 1818, "state" : "IL" } +{ "_id" : "61501", "city" : "ASTORIA", "loc" : [ -90.34425400000001, 40.231144 ], "pop" : 2093, "state" : "IL" } +{ "_id" : "61516", "city" : "BENSON", "loc" : [ -89.116501, 40.83058 ], "pop" : 838, "state" : "IL" } +{ "_id" : "61517", "city" : "BRIMFIELD", "loc" : [ -89.89703799999999, 40.840654 ], "pop" : 1177, "state" : "IL" } +{ "_id" : "61518", "city" : "OAK HILL", "loc" : [ -89.83725, 40.786938 ], "pop" : 1007, "state" : "IL" } +{ "_id" : "61519", "city" : "BRYANT", "loc" : [ -90.06613400000001, 40.483072 ], "pop" : 1017, "state" : "IL" } +{ "_id" : "61520", "city" : "CANTON", "loc" : [ -90.024151, 40.560137 ], "pop" : 16309, "state" : "IL" } +{ "_id" : "61523", "city" : "CHILLICOTHE", "loc" : [ -89.506793, 40.901349 ], "pop" : 9929, "state" : "IL" } +{ "_id" : "61524", "city" : "DUNFERMLINE", "loc" : [ -90.03134900000001, 40.490342 ], "pop" : 319, "state" : "IL" } +{ "_id" : "61525", "city" : "DUNLAP", "loc" : [ -89.639655, 40.844417 ], "pop" : 4669, "state" : "IL" } +{ "_id" : "61526", "city" : "EDELSTEIN", "loc" : [ -89.585812, 40.945367 ], "pop" : 1866, "state" : "IL" } +{ "_id" : "61528", "city" : "EDWARDS", "loc" : [ -89.705344, 40.764362 ], "pop" : 2896, "state" : "IL" } +{ "_id" : "61529", "city" : "ELMWOOD", "loc" : [ -89.928882, 40.772594 ], "pop" : 2698, "state" : "IL" } +{ "_id" : "61530", "city" : "EUREKA", "loc" : [ -89.270561, 40.715249 ], "pop" : 5688, "state" : "IL" } +{ "_id" : "61531", "city" : "MIDDLEGROVE", "loc" : [ -90.013434, 40.690265 ], "pop" : 3569, "state" : "IL" } +{ "_id" : "61532", "city" : "FOREST CITY", "loc" : [ -89.833426, 40.35942 ], "pop" : 670, "state" : "IL" } +{ "_id" : "61533", "city" : "GLASFORD", "loc" : [ -89.81132599999999, 40.575976 ], "pop" : 2531, "state" : "IL" } +{ "_id" : "61534", "city" : "GREEN VALLEY", "loc" : [ -89.65492500000001, 40.41978 ], "pop" : 1800, "state" : "IL" } +{ "_id" : "61536", "city" : "HANNA CITY", "loc" : [ -89.795242, 40.679776 ], "pop" : 3255, "state" : "IL" } +{ "_id" : "61537", "city" : "HENRY", "loc" : [ -89.37432800000001, 41.111543 ], "pop" : 3255, "state" : "IL" } +{ "_id" : "61539", "city" : "KINGSTON MINES", "loc" : [ -89.806791, 40.49028 ], "pop" : 1745, "state" : "IL" } +{ "_id" : "61540", "city" : "LACON", "loc" : [ -89.400842, 41.021587 ], "pop" : 2809, "state" : "IL" } +{ "_id" : "61542", "city" : "LEWISTOWN", "loc" : [ -90.15628700000001, 40.383046 ], "pop" : 3849, "state" : "IL" } +{ "_id" : "61543", "city" : "LIVERPOOL", "loc" : [ -90.038972, 40.411574 ], "pop" : 730, "state" : "IL" } +{ "_id" : "61544", "city" : "LONDON MILLS", "loc" : [ -90.261594, 40.694954 ], "pop" : 746, "state" : "IL" } +{ "_id" : "61545", "city" : "CAZENOVIA", "loc" : [ -89.37039900000001, 40.871082 ], "pop" : 1247, "state" : "IL" } +{ "_id" : "61546", "city" : "MANITO", "loc" : [ -89.78979099999999, 40.415991 ], "pop" : 2593, "state" : "IL" } +{ "_id" : "61547", "city" : "MAPLETON", "loc" : [ -89.718429, 40.611699 ], "pop" : 2593, "state" : "IL" } +{ "_id" : "61548", "city" : "METAMORA", "loc" : [ -89.430876, 40.784428 ], "pop" : 9052, "state" : "IL" } +{ "_id" : "61550", "city" : "MORTON", "loc" : [ -89.46044500000001, 40.614771 ], "pop" : 15207, "state" : "IL" } +{ "_id" : "61554", "city" : "PEKIN", "loc" : [ -89.624332, 40.567435 ], "pop" : 44902, "state" : "IL" } +{ "_id" : "61559", "city" : "PRINCEVILLE", "loc" : [ -89.772285, 40.909277 ], "pop" : 3210, "state" : "IL" } +{ "_id" : "61560", "city" : "PUTNAM", "loc" : [ -89.440901, 41.19486 ], "pop" : 724, "state" : "IL" } +{ "_id" : "61561", "city" : "ROANOKE", "loc" : [ -89.209334, 40.795601 ], "pop" : 2653, "state" : "IL" } +{ "_id" : "61563", "city" : "SAINT DAVID", "loc" : [ -90.043739, 40.522571 ], "pop" : 241, "state" : "IL" } +{ "_id" : "61565", "city" : "SPARLAND", "loc" : [ -89.45711, 41.013366 ], "pop" : 1190, "state" : "IL" } +{ "_id" : "61567", "city" : "TOPEKA", "loc" : [ -89.93263, 40.38108 ], "pop" : 969, "state" : "IL" } +{ "_id" : "61568", "city" : "TREMONT", "loc" : [ -89.483316, 40.505337 ], "pop" : 4492, "state" : "IL" } +{ "_id" : "61569", "city" : "TRIVOLI", "loc" : [ -89.913546, 40.679506 ], "pop" : 1166, "state" : "IL" } +{ "_id" : "61570", "city" : "WASHBURN", "loc" : [ -89.28304900000001, 40.91413 ], "pop" : 1771, "state" : "IL" } +{ "_id" : "61571", "city" : "SUNNYLAND", "loc" : [ -89.447926, 40.699364 ], "pop" : 18931, "state" : "IL" } +{ "_id" : "61572", "city" : "YATES CITY", "loc" : [ -90.026481, 40.787826 ], "pop" : 1402, "state" : "IL" } +{ "_id" : "61602", "city" : "PEORIA", "loc" : [ -89.601178, 40.687987 ], "pop" : 740, "state" : "IL" } +{ "_id" : "61603", "city" : "PEORIA HEIGHTS", "loc" : [ -89.58081300000001, 40.713915 ], "pop" : 20163, "state" : "IL" } +{ "_id" : "61604", "city" : "PEORIA", "loc" : [ -89.63237700000001, 40.711142 ], "pop" : 33171, "state" : "IL" } +{ "_id" : "61605", "city" : "PEORIA", "loc" : [ -89.62632499999999, 40.677512 ], "pop" : 20320, "state" : "IL" } +{ "_id" : "61606", "city" : "PEORIA", "loc" : [ -89.612189, 40.698926 ], "pop" : 10299, "state" : "IL" } +{ "_id" : "61607", "city" : "BARTONVILLE", "loc" : [ -89.67389799999999, 40.652434 ], "pop" : 10389, "state" : "IL" } +{ "_id" : "61611", "city" : "EAST PEORIA", "loc" : [ -89.55141, 40.673121 ], "pop" : 29630, "state" : "IL" } +{ "_id" : "61614", "city" : "PEORIA HEIGHTS", "loc" : [ -89.603295, 40.75481 ], "pop" : 35177, "state" : "IL" } +{ "_id" : "61615", "city" : "PEORIA", "loc" : [ -89.63208299999999, 40.770165 ], "pop" : 15452, "state" : "IL" } +{ "_id" : "61701", "city" : "BLOOMINGTON", "loc" : [ -88.989318, 40.478295 ], "pop" : 35218, "state" : "IL" } +{ "_id" : "61704", "city" : "BLOOMINGTON", "loc" : [ -88.96246600000001, 40.471618 ], "pop" : 24135, "state" : "IL" } +{ "_id" : "61720", "city" : "ANCHOR", "loc" : [ -88.52658099999999, 40.544091 ], "pop" : 393, "state" : "IL" } +{ "_id" : "61721", "city" : "ARMINGTON", "loc" : [ -89.321775, 40.317046 ], "pop" : 1163, "state" : "IL" } +{ "_id" : "61722", "city" : "ARROWSMITH", "loc" : [ -88.629648, 40.411966 ], "pop" : 813, "state" : "IL" } +{ "_id" : "61723", "city" : "ATLANTA", "loc" : [ -89.23002099999999, 40.258624 ], "pop" : 1978, "state" : "IL" } +{ "_id" : "61724", "city" : "BELLFLOWER", "loc" : [ -88.522702, 40.340091 ], "pop" : 702, "state" : "IL" } +{ "_id" : "61725", "city" : "CARLOCK", "loc" : [ -89.109779, 40.602898 ], "pop" : 1066, "state" : "IL" } +{ "_id" : "61726", "city" : "CHENOA", "loc" : [ -88.721853, 40.744633 ], "pop" : 2898, "state" : "IL" } +{ "_id" : "61727", "city" : "CLINTON", "loc" : [ -88.96266, 40.148708 ], "pop" : 10043, "state" : "IL" } +{ "_id" : "61728", "city" : "COLFAX", "loc" : [ -88.62001600000001, 40.570377 ], "pop" : 1391, "state" : "IL" } +{ "_id" : "61729", "city" : "CONGERVILLE", "loc" : [ -89.199397, 40.620762 ], "pop" : 802, "state" : "IL" } +{ "_id" : "61730", "city" : "COOKSVILLE", "loc" : [ -88.73504699999999, 40.536014 ], "pop" : 478, "state" : "IL" } +{ "_id" : "61731", "city" : "CROPSEY", "loc" : [ -88.494343, 40.602983 ], "pop" : 240, "state" : "IL" } +{ "_id" : "61732", "city" : "DANVERS", "loc" : [ -89.18848699999999, 40.536353 ], "pop" : 1825, "state" : "IL" } +{ "_id" : "61733", "city" : "DEER CREEK", "loc" : [ -89.30029999999999, 40.627992 ], "pop" : 2277, "state" : "IL" } +{ "_id" : "61734", "city" : "DELAVAN", "loc" : [ -89.532133, 40.369029 ], "pop" : 2285, "state" : "IL" } +{ "_id" : "61735", "city" : "DEWITT", "loc" : [ -88.763672, 40.184759 ], "pop" : 417, "state" : "IL" } +{ "_id" : "61736", "city" : "HOLDER", "loc" : [ -88.870814, 40.380858 ], "pop" : 992, "state" : "IL" } +{ "_id" : "61737", "city" : "ELLSWORTH", "loc" : [ -88.737121, 40.443154 ], "pop" : 660, "state" : "IL" } +{ "_id" : "61738", "city" : "EL PASO", "loc" : [ -89.01195199999999, 40.738948 ], "pop" : 3338, "state" : "IL" } +{ "_id" : "61739", "city" : "FAIRBURY", "loc" : [ -88.516486, 40.745033 ], "pop" : 4706, "state" : "IL" } +{ "_id" : "61740", "city" : "FLANAGAN", "loc" : [ -88.86196, 40.879003 ], "pop" : 1424, "state" : "IL" } +{ "_id" : "61741", "city" : "FORREST", "loc" : [ -88.411143, 40.751324 ], "pop" : 1809, "state" : "IL" } +{ "_id" : "61743", "city" : "GRAYMONT", "loc" : [ -88.760299, 40.90663 ], "pop" : 180, "state" : "IL" } +{ "_id" : "61744", "city" : "GRIDLEY", "loc" : [ -88.884044, 40.74387 ], "pop" : 2142, "state" : "IL" } +{ "_id" : "61745", "city" : "HEYWORTH", "loc" : [ -88.977608, 40.3307 ], "pop" : 2934, "state" : "IL" } +{ "_id" : "61747", "city" : "HOPEDALE", "loc" : [ -89.421398, 40.427318 ], "pop" : 1355, "state" : "IL" } +{ "_id" : "61748", "city" : "HUDSON", "loc" : [ -88.975931, 40.620485 ], "pop" : 1850, "state" : "IL" } +{ "_id" : "61749", "city" : "KENNEY", "loc" : [ -89.078925, 40.10247 ], "pop" : 789, "state" : "IL" } +{ "_id" : "61752", "city" : "LE ROY", "loc" : [ -88.75981299999999, 40.346781 ], "pop" : 3379, "state" : "IL" } +{ "_id" : "61753", "city" : "LEXINGTON", "loc" : [ -88.806203, 40.635685 ], "pop" : 3098, "state" : "IL" } +{ "_id" : "61754", "city" : "MC LEAN", "loc" : [ -89.164483, 40.328159 ], "pop" : 1432, "state" : "IL" } +{ "_id" : "61755", "city" : "MACKINAW", "loc" : [ -89.345795, 40.539643 ], "pop" : 2772, "state" : "IL" } +{ "_id" : "61756", "city" : "MAROA", "loc" : [ -88.957769, 40.034159 ], "pop" : 1883, "state" : "IL" } +{ "_id" : "61759", "city" : "MINIER", "loc" : [ -89.316484, 40.435889 ], "pop" : 1483, "state" : "IL" } +{ "_id" : "61760", "city" : "MINONK", "loc" : [ -89.034863, 40.898501 ], "pop" : 2559, "state" : "IL" } +{ "_id" : "61761", "city" : "NORMAL", "loc" : [ -88.988287, 40.512446 ], "pop" : 40851, "state" : "IL" } +{ "_id" : "61764", "city" : "PONTIAC", "loc" : [ -88.632775, 40.876404 ], "pop" : 14036, "state" : "IL" } +{ "_id" : "61769", "city" : "SAUNEMIN", "loc" : [ -88.40936000000001, 40.888516 ], "pop" : 683, "state" : "IL" } +{ "_id" : "61770", "city" : "SAYBROOK", "loc" : [ -88.52465599999999, 40.432005 ], "pop" : 1051, "state" : "IL" } +{ "_id" : "61771", "city" : "SECOR", "loc" : [ -89.127065, 40.722402 ], "pop" : 952, "state" : "IL" } +{ "_id" : "61772", "city" : "SHIRLEY", "loc" : [ -89.08218100000001, 40.417437 ], "pop" : 332, "state" : "IL" } +{ "_id" : "61773", "city" : "SIBLEY", "loc" : [ -88.38146, 40.582315 ], "pop" : 608, "state" : "IL" } +{ "_id" : "61774", "city" : "STANFORD", "loc" : [ -89.21643400000001, 40.437575 ], "pop" : 996, "state" : "IL" } +{ "_id" : "61775", "city" : "STRAWN", "loc" : [ -88.404036, 40.647615 ], "pop" : 322, "state" : "IL" } +{ "_id" : "61776", "city" : "TOWANDA", "loc" : [ -88.88865, 40.553326 ], "pop" : 1191, "state" : "IL" } +{ "_id" : "61777", "city" : "WAPELLA", "loc" : [ -88.967264, 40.232305 ], "pop" : 1031, "state" : "IL" } +{ "_id" : "61778", "city" : "WAYNESVILLE", "loc" : [ -89.114299, 40.243673 ], "pop" : 768, "state" : "IL" } +{ "_id" : "61801", "city" : "URBANA", "loc" : [ -88.203631, 40.109522 ], "pop" : 46110, "state" : "IL" } +{ "_id" : "61810", "city" : "ALLERTON", "loc" : [ -87.931235, 39.918818 ], "pop" : 405, "state" : "IL" } +{ "_id" : "61811", "city" : "ALVIN", "loc" : [ -87.608003, 40.3007 ], "pop" : 817, "state" : "IL" } +{ "_id" : "61812", "city" : "ARMSTRONG", "loc" : [ -87.894256, 40.217548 ], "pop" : 247, "state" : "IL" } +{ "_id" : "61813", "city" : "BEMENT", "loc" : [ -88.56877, 39.922207 ], "pop" : 1928, "state" : "IL" } +{ "_id" : "61814", "city" : "BISMARCK", "loc" : [ -87.613769, 40.255187 ], "pop" : 1476, "state" : "IL" } +{ "_id" : "61816", "city" : "BROADLANDS", "loc" : [ -87.994831, 39.914247 ], "pop" : 481, "state" : "IL" } +{ "_id" : "61817", "city" : "CATLIN", "loc" : [ -87.71125499999999, 40.069922 ], "pop" : 3359, "state" : "IL" } +{ "_id" : "61818", "city" : "CERRO GORDO", "loc" : [ -88.725634, 39.868062 ], "pop" : 2060, "state" : "IL" } +{ "_id" : "61820", "city" : "CHAMPAIGN", "loc" : [ -88.240747, 40.111017 ], "pop" : 33409, "state" : "IL" } +{ "_id" : "61821", "city" : "CHAMPAIGN", "loc" : [ -88.278847, 40.107262 ], "pop" : 37547, "state" : "IL" } +{ "_id" : "61830", "city" : "CISCO", "loc" : [ -88.696153, 39.997164 ], "pop" : 732, "state" : "IL" } +{ "_id" : "61831", "city" : "COLLISON", "loc" : [ -87.798709, 40.220737 ], "pop" : 421, "state" : "IL" } +{ "_id" : "61832", "city" : "DANVILLE", "loc" : [ -87.621737, 40.136976 ], "pop" : 49857, "state" : "IL" } +{ "_id" : "61833", "city" : "TILTON", "loc" : [ -87.644048, 40.096406 ], "pop" : 2945, "state" : "IL" } +{ "_id" : "61839", "city" : "DE LAND", "loc" : [ -88.63919300000001, 40.110656 ], "pop" : 848, "state" : "IL" } +{ "_id" : "61840", "city" : "DEWEY", "loc" : [ -88.276966, 40.313055 ], "pop" : 548, "state" : "IL" } +{ "_id" : "61841", "city" : "FAIRMOUNT", "loc" : [ -87.836456, 40.037329 ], "pop" : 1317, "state" : "IL" } +{ "_id" : "61842", "city" : "FARMER CITY", "loc" : [ -88.66338500000001, 40.244689 ], "pop" : 2889, "state" : "IL" } +{ "_id" : "61843", "city" : "FISHER", "loc" : [ -88.355991, 40.299126 ], "pop" : 2823, "state" : "IL" } +{ "_id" : "61844", "city" : "FITHIAN", "loc" : [ -87.879713, 40.11924 ], "pop" : 673, "state" : "IL" } +{ "_id" : "61845", "city" : "FOOSLAND", "loc" : [ -88.420177, 40.35537 ], "pop" : 319, "state" : "IL" } +{ "_id" : "61846", "city" : "GEORGETOWN", "loc" : [ -87.63648000000001, 39.97922 ], "pop" : 4534, "state" : "IL" } +{ "_id" : "61847", "city" : "GIFFORD", "loc" : [ -88.031705, 40.302755 ], "pop" : 1459, "state" : "IL" } +{ "_id" : "61849", "city" : "HOMER", "loc" : [ -87.96274200000001, 40.034619 ], "pop" : 1624, "state" : "IL" } +{ "_id" : "61850", "city" : "INDIANOLA", "loc" : [ -87.73882, 39.926819 ], "pop" : 715, "state" : "IL" } +{ "_id" : "61851", "city" : "IVESDALE", "loc" : [ -88.44509499999999, 39.950233 ], "pop" : 596, "state" : "IL" } +{ "_id" : "61852", "city" : "LONGVIEW", "loc" : [ -88.075282, 39.901241 ], "pop" : 555, "state" : "IL" } +{ "_id" : "61853", "city" : "MAHOMET", "loc" : [ -88.39283, 40.196437 ], "pop" : 8734, "state" : "IL" } +{ "_id" : "61854", "city" : "MANSFIELD", "loc" : [ -88.517895, 40.214697 ], "pop" : 1407, "state" : "IL" } +{ "_id" : "61855", "city" : "MILMINE", "loc" : [ -88.648696, 39.900702 ], "pop" : 148, "state" : "IL" } +{ "_id" : "61856", "city" : "MONTICELLO", "loc" : [ -88.568555, 40.02632 ], "pop" : 5339, "state" : "IL" } +{ "_id" : "61858", "city" : "OAKWOOD", "loc" : [ -87.7825, 40.116656 ], "pop" : 2852, "state" : "IL" } +{ "_id" : "61859", "city" : "OGDEN", "loc" : [ -87.966499, 40.140117 ], "pop" : 1397, "state" : "IL" } +{ "_id" : "61862", "city" : "PENFIELD", "loc" : [ -87.95702, 40.310137 ], "pop" : 601, "state" : "IL" } +{ "_id" : "61863", "city" : "PESOTUM", "loc" : [ -88.274331, 39.9151 ], "pop" : 774, "state" : "IL" } +{ "_id" : "61864", "city" : "PHILO", "loc" : [ -88.15950599999999, 40.005156 ], "pop" : 1377, "state" : "IL" } +{ "_id" : "61865", "city" : "POTOMAC", "loc" : [ -87.82319200000001, 40.309 ], "pop" : 1544, "state" : "IL" } +{ "_id" : "61866", "city" : "RANTOUL", "loc" : [ -88.146179, 40.310742 ], "pop" : 11146, "state" : "IL" } +{ "_id" : "61868", "city" : "RANTOUL", "loc" : [ -88.149884, 40.295886 ], "pop" : 7185, "state" : "IL" } +{ "_id" : "61870", "city" : "RIDGE FARM", "loc" : [ -87.634578, 39.915455 ], "pop" : 2094, "state" : "IL" } +{ "_id" : "61872", "city" : "SADORUS", "loc" : [ -88.344717, 39.961312 ], "pop" : 1022, "state" : "IL" } +{ "_id" : "61873", "city" : "SAINT JOSEPH", "loc" : [ -88.04723199999999, 40.120736 ], "pop" : 4168, "state" : "IL" } +{ "_id" : "61874", "city" : "SAVOY", "loc" : [ -88.252837, 40.065373 ], "pop" : 2972, "state" : "IL" } +{ "_id" : "61875", "city" : "SEYMOUR", "loc" : [ -88.394431, 40.103471 ], "pop" : 1135, "state" : "IL" } +{ "_id" : "61876", "city" : "SIDELL", "loc" : [ -87.82480200000001, 39.911018 ], "pop" : 703, "state" : "IL" } +{ "_id" : "61877", "city" : "SIDNEY", "loc" : [ -88.069029, 40.023206 ], "pop" : 1521, "state" : "IL" } +{ "_id" : "61878", "city" : "THOMASBORO", "loc" : [ -88.18303299999999, 40.240206 ], "pop" : 1638, "state" : "IL" } +{ "_id" : "61880", "city" : "TOLONO", "loc" : [ -88.259641, 39.985006 ], "pop" : 2837, "state" : "IL" } +{ "_id" : "61882", "city" : "WELDON", "loc" : [ -88.753055, 40.117741 ], "pop" : 579, "state" : "IL" } +{ "_id" : "61883", "city" : "WESTVILLE", "loc" : [ -87.635952, 40.045113 ], "pop" : 4398, "state" : "IL" } +{ "_id" : "61884", "city" : "WHITE HEATH", "loc" : [ -88.51929699999999, 40.100911 ], "pop" : 1481, "state" : "IL" } +{ "_id" : "61910", "city" : "ARCOLA", "loc" : [ -88.303679, 39.687001 ], "pop" : 3132, "state" : "IL" } +{ "_id" : "61911", "city" : "ARTHUR", "loc" : [ -88.45550900000001, 39.707679 ], "pop" : 4951, "state" : "IL" } +{ "_id" : "61912", "city" : "ASHMORE", "loc" : [ -88.034097, 39.525428 ], "pop" : 1467, "state" : "IL" } +{ "_id" : "61913", "city" : "ATWOOD", "loc" : [ -88.44944599999999, 39.804368 ], "pop" : 2455, "state" : "IL" } +{ "_id" : "61914", "city" : "BETHANY", "loc" : [ -88.754301, 39.634754 ], "pop" : 1983, "state" : "IL" } +{ "_id" : "61917", "city" : "BROCTON", "loc" : [ -87.926258, 39.692311 ], "pop" : 748, "state" : "IL" } +{ "_id" : "61919", "city" : "CAMARGO", "loc" : [ -88.146815, 39.799955 ], "pop" : 1015, "state" : "IL" } +{ "_id" : "61920", "city" : "CHARLESTON", "loc" : [ -88.176115, 39.486933 ], "pop" : 22767, "state" : "IL" } +{ "_id" : "61924", "city" : "CHRISMAN", "loc" : [ -87.655552, 39.799572 ], "pop" : 2269, "state" : "IL" } +{ "_id" : "61925", "city" : "DALTON CITY", "loc" : [ -88.797459, 39.711943 ], "pop" : 715, "state" : "IL" } +{ "_id" : "61928", "city" : "GAYS", "loc" : [ -88.524153, 39.479553 ], "pop" : 678, "state" : "IL" } +{ "_id" : "61929", "city" : "HAMMOND", "loc" : [ -88.57930500000001, 39.79465 ], "pop" : 797, "state" : "IL" } +{ "_id" : "61930", "city" : "HINDSBORO", "loc" : [ -88.148611, 39.701799 ], "pop" : 811, "state" : "IL" } +{ "_id" : "61931", "city" : "HUMBOLDT", "loc" : [ -88.314089, 39.60118 ], "pop" : 856, "state" : "IL" } +{ "_id" : "61932", "city" : "HUME", "loc" : [ -87.87465899999999, 39.800882 ], "pop" : 593, "state" : "IL" } +{ "_id" : "61933", "city" : "KANSAS", "loc" : [ -87.935238, 39.552533 ], "pop" : 1114, "state" : "IL" } +{ "_id" : "61937", "city" : "LOVINGTON", "loc" : [ -88.64167500000001, 39.719192 ], "pop" : 1995, "state" : "IL" } +{ "_id" : "61938", "city" : "MATTOON", "loc" : [ -88.376152, 39.480184 ], "pop" : 23012, "state" : "IL" } +{ "_id" : "61940", "city" : "METCALF", "loc" : [ -87.795524, 39.800847 ], "pop" : 554, "state" : "IL" } +{ "_id" : "61942", "city" : "NEWMAN", "loc" : [ -88.000055, 39.784788 ], "pop" : 1591, "state" : "IL" } +{ "_id" : "61943", "city" : "OAKLAND", "loc" : [ -88.025325, 39.651618 ], "pop" : 1447, "state" : "IL" } +{ "_id" : "61944", "city" : "PARIS", "loc" : [ -87.697631, 39.613219 ], "pop" : 12509, "state" : "IL" } +{ "_id" : "61951", "city" : "SULLIVAN", "loc" : [ -88.603767, 39.593431 ], "pop" : 6946, "state" : "IL" } +{ "_id" : "61953", "city" : "TUSCOLA", "loc" : [ -88.28158500000001, 39.799509 ], "pop" : 5056, "state" : "IL" } +{ "_id" : "61956", "city" : "VILLA GROVE", "loc" : [ -88.161635, 39.868716 ], "pop" : 3259, "state" : "IL" } +{ "_id" : "61957", "city" : "WINDSOR", "loc" : [ -88.585747, 39.430198 ], "pop" : 2019, "state" : "IL" } +{ "_id" : "62001", "city" : "ALHAMBRA", "loc" : [ -89.744123, 38.882211 ], "pop" : 1543, "state" : "IL" } +{ "_id" : "62002", "city" : "ALTON", "loc" : [ -90.156806, 38.908651 ], "pop" : 37541, "state" : "IL" } +{ "_id" : "62006", "city" : "BATCHTOWN", "loc" : [ -90.659114, 39.072468 ], "pop" : 579, "state" : "IL" } +{ "_id" : "62009", "city" : "BENLD", "loc" : [ -89.803057, 39.093903 ], "pop" : 1604, "state" : "IL" } +{ "_id" : "62010", "city" : "BETHALTO", "loc" : [ -90.034447, 38.907353 ], "pop" : 10587, "state" : "IL" } +{ "_id" : "62011", "city" : "BINGHAM", "loc" : [ -89.195789, 39.14667 ], "pop" : 565, "state" : "IL" } +{ "_id" : "62012", "city" : "BRIGHTON", "loc" : [ -90.144312, 39.036098 ], "pop" : 6467, "state" : "IL" } +{ "_id" : "62013", "city" : "MEPPEN", "loc" : [ -90.59069599999999, 38.937115 ], "pop" : 814, "state" : "IL" } +{ "_id" : "62014", "city" : "BUNKER HILL", "loc" : [ -89.962379, 39.040827 ], "pop" : 3052, "state" : "IL" } +{ "_id" : "62015", "city" : "BUTLER", "loc" : [ -89.530535, 39.211419 ], "pop" : 570, "state" : "IL" } +{ "_id" : "62016", "city" : "CARROLLTON", "loc" : [ -90.409211, 39.300937 ], "pop" : 3079, "state" : "IL" } +{ "_id" : "62017", "city" : "COFFEEN", "loc" : [ -89.39454000000001, 39.090757 ], "pop" : 1207, "state" : "IL" } +{ "_id" : "62018", "city" : "COTTAGE HILLS", "loc" : [ -90.082632, 38.912377 ], "pop" : 4437, "state" : "IL" } +{ "_id" : "62019", "city" : "DONNELLSON", "loc" : [ -89.490858, 39.034422 ], "pop" : 1010, "state" : "IL" } +{ "_id" : "62021", "city" : "DORSEY", "loc" : [ -89.978635, 38.983237 ], "pop" : 652, "state" : "IL" } +{ "_id" : "62022", "city" : "DOW", "loc" : [ -90.301059, 39.031198 ], "pop" : 1758, "state" : "IL" } +{ "_id" : "62024", "city" : "EAST ALTON", "loc" : [ -90.083045, 38.88031 ], "pop" : 13839, "state" : "IL" } +{ "_id" : "62025", "city" : "EDWARDSVILLE", "loc" : [ -89.963697, 38.804967 ], "pop" : 19241, "state" : "IL" } +{ "_id" : "62027", "city" : "ELDRED", "loc" : [ -90.53287400000001, 39.283592 ], "pop" : 907, "state" : "IL" } +{ "_id" : "62028", "city" : "ELSAH", "loc" : [ -90.331913, 38.961297 ], "pop" : 2553, "state" : "IL" } +{ "_id" : "62030", "city" : "FIDELITY", "loc" : [ -90.198803, 39.132286 ], "pop" : 655, "state" : "IL" } +{ "_id" : "62031", "city" : "FIELDON", "loc" : [ -90.529742, 39.108608 ], "pop" : 1382, "state" : "IL" } +{ "_id" : "62032", "city" : "FILLMORE", "loc" : [ -89.294551, 39.103872 ], "pop" : 977, "state" : "IL" } +{ "_id" : "62033", "city" : "DORCHESTER", "loc" : [ -89.818577, 39.136106 ], "pop" : 6518, "state" : "IL" } +{ "_id" : "62034", "city" : "GLEN CARBON", "loc" : [ -89.970583, 38.760871 ], "pop" : 9729, "state" : "IL" } +{ "_id" : "62035", "city" : "GODFREY", "loc" : [ -90.206024, 38.946035 ], "pop" : 13959, "state" : "IL" } +{ "_id" : "62036", "city" : "GOLDEN EAGLE", "loc" : [ -90.560199, 38.896138 ], "pop" : 266, "state" : "IL" } +{ "_id" : "62037", "city" : "GRAFTON", "loc" : [ -90.43233499999999, 39.002134 ], "pop" : 2036, "state" : "IL" } +{ "_id" : "62040", "city" : "MITCHELL", "loc" : [ -90.11582199999999, 38.721572 ], "pop" : 48697, "state" : "IL" } +{ "_id" : "62044", "city" : "GREENFIELD", "loc" : [ -90.208851, 39.349058 ], "pop" : 1718, "state" : "IL" } +{ "_id" : "62045", "city" : "HAMBURG", "loc" : [ -90.699546, 39.223488 ], "pop" : 383, "state" : "IL" } +{ "_id" : "62046", "city" : "HAMEL", "loc" : [ -89.87267799999999, 38.878433 ], "pop" : 1685, "state" : "IL" } +{ "_id" : "62047", "city" : "HARDIN", "loc" : [ -90.624002, 39.154652 ], "pop" : 1232, "state" : "IL" } +{ "_id" : "62048", "city" : "HARTFORD", "loc" : [ -90.074533, 38.829852 ], "pop" : 3763, "state" : "IL" } +{ "_id" : "62049", "city" : "HILLSBORO", "loc" : [ -89.488146, 39.149412 ], "pop" : 7916, "state" : "IL" } +{ "_id" : "62050", "city" : "HILLVIEW", "loc" : [ -90.512837, 39.467373 ], "pop" : 795, "state" : "IL" } +{ "_id" : "62051", "city" : "IRVING", "loc" : [ -89.41043000000001, 39.208903 ], "pop" : 909, "state" : "IL" } +{ "_id" : "62052", "city" : "JERSEYVILLE", "loc" : [ -90.33375700000001, 39.121324 ], "pop" : 9439, "state" : "IL" } +{ "_id" : "62053", "city" : "KAMPSVILLE", "loc" : [ -90.62693400000001, 39.306388 ], "pop" : 623, "state" : "IL" } +{ "_id" : "62054", "city" : "KANE", "loc" : [ -90.37188, 39.203688 ], "pop" : 1044, "state" : "IL" } +{ "_id" : "62056", "city" : "LITCHFIELD", "loc" : [ -89.64991499999999, 39.179345 ], "pop" : 9172, "state" : "IL" } +{ "_id" : "62060", "city" : "MADISON", "loc" : [ -90.15658500000001, 38.68109 ], "pop" : 7556, "state" : "IL" } +{ "_id" : "62061", "city" : "MARINE", "loc" : [ -89.821376, 38.785458 ], "pop" : 2020, "state" : "IL" } +{ "_id" : "62063", "city" : "MEDORA", "loc" : [ -90.154225, 39.198593 ], "pop" : 531, "state" : "IL" } +{ "_id" : "62065", "city" : "MICHAEL", "loc" : [ -90.633498, 39.21821 ], "pop" : 343, "state" : "IL" } +{ "_id" : "62067", "city" : "MORO", "loc" : [ -89.961771, 38.931769 ], "pop" : 2775, "state" : "IL" } +{ "_id" : "62069", "city" : "MOUNT OLIVE", "loc" : [ -89.74484200000001, 39.070504 ], "pop" : 3443, "state" : "IL" } +{ "_id" : "62070", "city" : "MOZIER", "loc" : [ -90.714978, 39.287719 ], "pop" : 241, "state" : "IL" } +{ "_id" : "62074", "city" : "NEW DOUGLAS", "loc" : [ -89.73923499999999, 38.967633 ], "pop" : 2464, "state" : "IL" } +{ "_id" : "62075", "city" : "NOKOMIS", "loc" : [ -89.285297, 39.303642 ], "pop" : 4576, "state" : "IL" } +{ "_id" : "62079", "city" : "PIASA", "loc" : [ -90.131147, 39.151697 ], "pop" : 863, "state" : "IL" } +{ "_id" : "62080", "city" : "RAMSEY", "loc" : [ -89.105147, 39.078123 ], "pop" : 4166, "state" : "IL" } +{ "_id" : "62081", "city" : "ROCKBRIDGE", "loc" : [ -90.255818, 39.283146 ], "pop" : 718, "state" : "IL" } +{ "_id" : "62082", "city" : "ROODHOUSE", "loc" : [ -90.34981399999999, 39.484646 ], "pop" : 3020, "state" : "IL" } +{ "_id" : "62083", "city" : "ROSAMOND", "loc" : [ -89.1846, 39.389229 ], "pop" : 443, "state" : "IL" } +{ "_id" : "62084", "city" : "ROXANA", "loc" : [ -90.07978, 38.848154 ], "pop" : 1513, "state" : "IL" } +{ "_id" : "62086", "city" : "SORENTO", "loc" : [ -89.565347, 38.969342 ], "pop" : 2127, "state" : "IL" } +{ "_id" : "62088", "city" : "STAUNTON", "loc" : [ -89.785697, 39.01348 ], "pop" : 5482, "state" : "IL" } +{ "_id" : "62090", "city" : "VENICE", "loc" : [ -90.16892799999999, 38.67063 ], "pop" : 1559, "state" : "IL" } +{ "_id" : "62091", "city" : "WALSHVILLE", "loc" : [ -89.634968, 39.047257 ], "pop" : 359, "state" : "IL" } +{ "_id" : "62092", "city" : "WHITE HALL", "loc" : [ -90.401899, 39.428804 ], "pop" : 3882, "state" : "IL" } +{ "_id" : "62094", "city" : "WITT", "loc" : [ -89.341426, 39.246919 ], "pop" : 1251, "state" : "IL" } +{ "_id" : "62095", "city" : "WOOD RIVER", "loc" : [ -90.087507, 38.864279 ], "pop" : 10817, "state" : "IL" } +{ "_id" : "62097", "city" : "WORDEN", "loc" : [ -89.85321399999999, 38.944895 ], "pop" : 1818, "state" : "IL" } +{ "_id" : "62201", "city" : "SAUGET", "loc" : [ -90.13806599999999, 38.631538 ], "pop" : 11213, "state" : "IL" } +{ "_id" : "62203", "city" : "EAST SAINT LOUIS", "loc" : [ -90.074449, 38.599191 ], "pop" : 12435, "state" : "IL" } +{ "_id" : "62204", "city" : "WASHINGTON PARK", "loc" : [ -90.102008, 38.631335 ], "pop" : 14425, "state" : "IL" } +{ "_id" : "62205", "city" : "EAST SAINT LOUIS", "loc" : [ -90.12750200000001, 38.614947 ], "pop" : 14488, "state" : "IL" } +{ "_id" : "62206", "city" : "CAHOKIA", "loc" : [ -90.16587, 38.561899 ], "pop" : 20356, "state" : "IL" } +{ "_id" : "62207", "city" : "ALORTON", "loc" : [ -90.12829000000001, 38.58734 ], "pop" : 11681, "state" : "IL" } +{ "_id" : "62208", "city" : "FAIRVIEW HEIGHTS", "loc" : [ -90.007093, 38.596044 ], "pop" : 10882, "state" : "IL" } +{ "_id" : "62214", "city" : "VENEDY", "loc" : [ -89.52273, 38.360422 ], "pop" : 539, "state" : "IL" } +{ "_id" : "62215", "city" : "ALBERS", "loc" : [ -89.62015100000001, 38.531955 ], "pop" : 1641, "state" : "IL" } +{ "_id" : "62217", "city" : "BALDWIN", "loc" : [ -89.841391, 38.175351 ], "pop" : 1093, "state" : "IL" } +{ "_id" : "62218", "city" : "BARTELSO", "loc" : [ -89.457841, 38.53851 ], "pop" : 1270, "state" : "IL" } +{ "_id" : "62220", "city" : "BELLEVILLE", "loc" : [ -89.98469299999999, 38.512677 ], "pop" : 23454, "state" : "IL" } +{ "_id" : "62221", "city" : "BELLEVILLE", "loc" : [ -89.958302, 38.539639 ], "pop" : 29321, "state" : "IL" } +{ "_id" : "62223", "city" : "BELLEVILLE", "loc" : [ -90.037775, 38.545581 ], "pop" : 34650, "state" : "IL" } +{ "_id" : "62225", "city" : "SCOTT A F B", "loc" : [ -89.85877499999999, 38.54692 ], "pop" : 7391, "state" : "IL" } +{ "_id" : "62230", "city" : "BREESE", "loc" : [ -89.52838, 38.618802 ], "pop" : 4882, "state" : "IL" } +{ "_id" : "62231", "city" : "CARLYLE", "loc" : [ -89.380544, 38.606609 ], "pop" : 6529, "state" : "IL" } +{ "_id" : "62232", "city" : "CASEYVILLE", "loc" : [ -90.013486, 38.634458 ], "pop" : 7601, "state" : "IL" } +{ "_id" : "62233", "city" : "CHESTER", "loc" : [ -89.82180700000001, 37.918822 ], "pop" : 9436, "state" : "IL" } +{ "_id" : "62234", "city" : "COLLINSVILLE", "loc" : [ -89.98529000000001, 38.683545 ], "pop" : 33686, "state" : "IL" } +{ "_id" : "62236", "city" : "COLUMBIA", "loc" : [ -90.20271700000001, 38.432469 ], "pop" : 8489, "state" : "IL" } +{ "_id" : "62237", "city" : "SWANWICK", "loc" : [ -89.582064, 38.176401 ], "pop" : 2359, "state" : "IL" } +{ "_id" : "62238", "city" : "CUTLER", "loc" : [ -89.56612699999999, 38.042663 ], "pop" : 787, "state" : "IL" } +{ "_id" : "62239", "city" : "DUPO", "loc" : [ -90.194188, 38.514771 ], "pop" : 5663, "state" : "IL" } +{ "_id" : "62240", "city" : "EAST CARONDELET", "loc" : [ -90.220782, 38.534912 ], "pop" : 1579, "state" : "IL" } +{ "_id" : "62241", "city" : "ELLIS GROVE", "loc" : [ -89.900847, 38.005358 ], "pop" : 999, "state" : "IL" } +{ "_id" : "62242", "city" : "EVANSVILLE", "loc" : [ -89.917028, 38.09258 ], "pop" : 1540, "state" : "IL" } +{ "_id" : "62243", "city" : "FREEBURG", "loc" : [ -89.91806, 38.408016 ], "pop" : 5837, "state" : "IL" } +{ "_id" : "62244", "city" : "FULTS", "loc" : [ -90.19735300000001, 38.179736 ], "pop" : 635, "state" : "IL" } +{ "_id" : "62245", "city" : "GERMANTOWN", "loc" : [ -89.54134000000001, 38.548677 ], "pop" : 1773, "state" : "IL" } +{ "_id" : "62246", "city" : "GREENVILLE", "loc" : [ -89.405185, 38.893338 ], "pop" : 7623, "state" : "IL" } +{ "_id" : "62248", "city" : "HECKER", "loc" : [ -89.983115, 38.281039 ], "pop" : 1454, "state" : "IL" } +{ "_id" : "62249", "city" : "HIGHLAND", "loc" : [ -89.678894, 38.763086 ], "pop" : 6772, "state" : "IL" } +{ "_id" : "62253", "city" : "KEYESPORT", "loc" : [ -89.30632300000001, 38.738773 ], "pop" : 1464, "state" : "IL" } +{ "_id" : "62254", "city" : "LEBANON", "loc" : [ -89.79921299999999, 38.60528 ], "pop" : 4950, "state" : "IL" } +{ "_id" : "62255", "city" : "LENZBURG", "loc" : [ -89.792202, 38.295003 ], "pop" : 1316, "state" : "IL" } +{ "_id" : "62256", "city" : "MAEYSTOWN", "loc" : [ -90.20178, 38.24112 ], "pop" : 592, "state" : "IL" } +{ "_id" : "62257", "city" : "MARISSA", "loc" : [ -89.750119, 38.245455 ], "pop" : 2634, "state" : "IL" } +{ "_id" : "62258", "city" : "MASCOUTAH", "loc" : [ -89.787745, 38.474496 ], "pop" : 8151, "state" : "IL" } +{ "_id" : "62260", "city" : "MILLSTADT", "loc" : [ -90.088818, 38.444264 ], "pop" : 4979, "state" : "IL" } +{ "_id" : "62261", "city" : "MODOC", "loc" : [ -90.016261, 38.050683 ], "pop" : 381, "state" : "IL" } +{ "_id" : "62262", "city" : "MULBERRY GROVE", "loc" : [ -89.246297, 38.931082 ], "pop" : 1721, "state" : "IL" } +{ "_id" : "62263", "city" : "NASHVILLE", "loc" : [ -89.384058, 38.335208 ], "pop" : 4546, "state" : "IL" } +{ "_id" : "62264", "city" : "NEW ATHENS", "loc" : [ -89.872777, 38.315998 ], "pop" : 2488, "state" : "IL" } +{ "_id" : "62265", "city" : "NEW BADEN", "loc" : [ -89.692232, 38.531485 ], "pop" : 3455, "state" : "IL" } +{ "_id" : "62268", "city" : "OAKDALE", "loc" : [ -89.596046, 38.257285 ], "pop" : 1348, "state" : "IL" } +{ "_id" : "62269", "city" : "SHILOH", "loc" : [ -89.9093, 38.59052 ], "pop" : 21198, "state" : "IL" } +{ "_id" : "62271", "city" : "OKAWVILLE", "loc" : [ -89.523045, 38.431862 ], "pop" : 2187, "state" : "IL" } +{ "_id" : "62272", "city" : "PERCY", "loc" : [ -89.616961, 38.01261 ], "pop" : 1241, "state" : "IL" } +{ "_id" : "62274", "city" : "PINCKNEYVILLE", "loc" : [ -89.38578, 38.090327 ], "pop" : 7013, "state" : "IL" } +{ "_id" : "62275", "city" : "POCAHONTAS", "loc" : [ -89.52468399999999, 38.78456 ], "pop" : 3279, "state" : "IL" } +{ "_id" : "62277", "city" : "PRAIRIE DU ROCHE", "loc" : [ -90.090147, 38.085468 ], "pop" : 1017, "state" : "IL" } +{ "_id" : "62278", "city" : "RED BUD", "loc" : [ -89.988356, 38.190738 ], "pop" : 4923, "state" : "IL" } +{ "_id" : "62279", "city" : "RENAULT", "loc" : [ -90.095043, 38.170396 ], "pop" : 929, "state" : "IL" } +{ "_id" : "62280", "city" : "ROCKWOOD", "loc" : [ -89.62144499999999, 37.832201 ], "pop" : 770, "state" : "IL" } +{ "_id" : "62281", "city" : "SAINT JACOB", "loc" : [ -89.669616, 38.72448 ], "pop" : 5477, "state" : "IL" } +{ "_id" : "62283", "city" : "SHATTUC", "loc" : [ -89.20543600000001, 38.643533 ], "pop" : 1079, "state" : "IL" } +{ "_id" : "62284", "city" : "SMITHBORO", "loc" : [ -89.326556, 38.873893 ], "pop" : 771, "state" : "IL" } +{ "_id" : "62285", "city" : "SMITHTON", "loc" : [ -89.989604, 38.423137 ], "pop" : 2749, "state" : "IL" } +{ "_id" : "62286", "city" : "SPARTA", "loc" : [ -89.703458, 38.131815 ], "pop" : 8035, "state" : "IL" } +{ "_id" : "62288", "city" : "STEELEVILLE", "loc" : [ -89.66645800000001, 38.005713 ], "pop" : 2951, "state" : "IL" } +{ "_id" : "62293", "city" : "TRENTON", "loc" : [ -89.644696, 38.619102 ], "pop" : 5574, "state" : "IL" } +{ "_id" : "62294", "city" : "TROY", "loc" : [ -89.870848, 38.724275 ], "pop" : 10526, "state" : "IL" } +{ "_id" : "62295", "city" : "VALMEYER", "loc" : [ -90.309234, 38.295163 ], "pop" : 1841, "state" : "IL" } +{ "_id" : "62297", "city" : "WALSH", "loc" : [ -89.82965799999999, 38.020286 ], "pop" : 801, "state" : "IL" } +{ "_id" : "62298", "city" : "WATERLOO", "loc" : [ -90.147773, 38.322273 ], "pop" : 8482, "state" : "IL" } +{ "_id" : "62301", "city" : "QUINCY", "loc" : [ -91.376284, 39.930701 ], "pop" : 52014, "state" : "IL" } +{ "_id" : "62311", "city" : "AUGUSTA", "loc" : [ -90.955416, 40.234109 ], "pop" : 867, "state" : "IL" } +{ "_id" : "62312", "city" : "BARRY", "loc" : [ -91.026482, 39.704662 ], "pop" : 2697, "state" : "IL" } +{ "_id" : "62313", "city" : "BASCO", "loc" : [ -91.196983, 40.328303 ], "pop" : 399, "state" : "IL" } +{ "_id" : "62314", "city" : "BAYLIS", "loc" : [ -90.883216, 39.761201 ], "pop" : 628, "state" : "IL" } +{ "_id" : "62316", "city" : "BOWEN", "loc" : [ -91.070491, 40.234076 ], "pop" : 693, "state" : "IL" } +{ "_id" : "62318", "city" : "BURNSIDE", "loc" : [ -91.142392, 40.497445 ], "pop" : 770, "state" : "IL" } +{ "_id" : "62319", "city" : "CAMDEN", "loc" : [ -90.75443300000001, 40.151076 ], "pop" : 317, "state" : "IL" } +{ "_id" : "62320", "city" : "CAMP POINT", "loc" : [ -91.076926, 40.029285 ], "pop" : 2113, "state" : "IL" } +{ "_id" : "62321", "city" : "CARTHAGE", "loc" : [ -91.100522, 40.412937 ], "pop" : 4171, "state" : "IL" } +{ "_id" : "62323", "city" : "CHAMBERSBURG", "loc" : [ -90.663017, 39.807058 ], "pop" : 203, "state" : "IL" } +{ "_id" : "62324", "city" : "CLAYTON", "loc" : [ -90.955394, 40.013342 ], "pop" : 1354, "state" : "IL" } +{ "_id" : "62325", "city" : "COATSBURG", "loc" : [ -91.174733, 40.055385 ], "pop" : 446, "state" : "IL" } +{ "_id" : "62326", "city" : "COLCHESTER", "loc" : [ -90.78456, 40.415643 ], "pop" : 2470, "state" : "IL" } +{ "_id" : "62330", "city" : "PONTOOSUC", "loc" : [ -91.163454, 40.620062 ], "pop" : 2146, "state" : "IL" } +{ "_id" : "62332", "city" : "DETROIT", "loc" : [ -90.65449, 39.618307 ], "pop" : 353, "state" : "IL" } +{ "_id" : "62334", "city" : "ELVASTON", "loc" : [ -91.21642, 40.40662 ], "pop" : 449, "state" : "IL" } +{ "_id" : "62338", "city" : "FOWLER", "loc" : [ -91.245226, 39.992504 ], "pop" : 508, "state" : "IL" } +{ "_id" : "62339", "city" : "GOLDEN", "loc" : [ -91.029588, 40.120257 ], "pop" : 938, "state" : "IL" } +{ "_id" : "62340", "city" : "GRIGGSVILLE", "loc" : [ -90.724891, 39.708378 ], "pop" : 1611, "state" : "IL" } +{ "_id" : "62341", "city" : "HAMILTON", "loc" : [ -91.344042, 40.439213 ], "pop" : 5574, "state" : "IL" } +{ "_id" : "62343", "city" : "HULL", "loc" : [ -91.233844, 39.718562 ], "pop" : 892, "state" : "IL" } +{ "_id" : "62344", "city" : "HUNTSVILLE", "loc" : [ -90.85313600000001, 40.154396 ], "pop" : 189, "state" : "IL" } +{ "_id" : "62345", "city" : "KINDERHOOK", "loc" : [ -91.16372800000001, 39.695313 ], "pop" : 427, "state" : "IL" } +{ "_id" : "62346", "city" : "LA PRAIRIE", "loc" : [ -90.984387, 40.157191 ], "pop" : 218, "state" : "IL" } +{ "_id" : "62347", "city" : "LIBERTY", "loc" : [ -91.08687999999999, 39.889176 ], "pop" : 1331, "state" : "IL" } +{ "_id" : "62348", "city" : "LIMA", "loc" : [ -91.38675600000001, 40.170098 ], "pop" : 559, "state" : "IL" } +{ "_id" : "62349", "city" : "LORAINE", "loc" : [ -91.21301, 40.153197 ], "pop" : 634, "state" : "IL" } +{ "_id" : "62351", "city" : "MENDON", "loc" : [ -91.289923, 40.085658 ], "pop" : 1462, "state" : "IL" } +{ "_id" : "62352", "city" : "MILTON", "loc" : [ -90.644346, 39.550811 ], "pop" : 548, "state" : "IL" } +{ "_id" : "62353", "city" : "MOUNT STERLING", "loc" : [ -90.74142399999999, 39.980279 ], "pop" : 4058, "state" : "IL" } +{ "_id" : "62355", "city" : "NEBO", "loc" : [ -90.7692, 39.420181 ], "pop" : 1011, "state" : "IL" } +{ "_id" : "62356", "city" : "NEW CANTON", "loc" : [ -91.088556, 39.634242 ], "pop" : 658, "state" : "IL" } +{ "_id" : "62357", "city" : "NEW SALEM", "loc" : [ -90.843986, 39.699573 ], "pop" : 292, "state" : "IL" } +{ "_id" : "62358", "city" : "NIOTA", "loc" : [ -91.299136, 40.597753 ], "pop" : 672, "state" : "IL" } +{ "_id" : "62359", "city" : "PALOMA", "loc" : [ -91.205287, 40.036616 ], "pop" : 254, "state" : "IL" } +{ "_id" : "62360", "city" : "PAYSON", "loc" : [ -91.262676, 39.815253 ], "pop" : 1939, "state" : "IL" } +{ "_id" : "62361", "city" : "PEARL", "loc" : [ -90.63795399999999, 39.444072 ], "pop" : 415, "state" : "IL" } +{ "_id" : "62362", "city" : "PERRY", "loc" : [ -90.746105, 39.787042 ], "pop" : 703, "state" : "IL" } +{ "_id" : "62363", "city" : "PITTSFIELD", "loc" : [ -90.80726900000001, 39.601306 ], "pop" : 5678, "state" : "IL" } +{ "_id" : "62365", "city" : "PLAINVILLE", "loc" : [ -91.143598, 39.800448 ], "pop" : 986, "state" : "IL" } +{ "_id" : "62366", "city" : "PLEASANT HILL", "loc" : [ -90.877011, 39.446697 ], "pop" : 1521, "state" : "IL" } +{ "_id" : "62367", "city" : "COLMAR", "loc" : [ -90.87381499999999, 40.288493 ], "pop" : 1425, "state" : "IL" } +{ "_id" : "62370", "city" : "ROCKPORT", "loc" : [ -90.972178, 39.532846 ], "pop" : 641, "state" : "IL" } +{ "_id" : "62373", "city" : "SUTTER", "loc" : [ -91.37609399999999, 40.309683 ], "pop" : 747, "state" : "IL" } +{ "_id" : "62374", "city" : "TENNESSEE", "loc" : [ -90.855605, 40.41399 ], "pop" : 414, "state" : "IL" } +{ "_id" : "62375", "city" : "TIMEWELL", "loc" : [ -90.866067, 40.011658 ], "pop" : 539, "state" : "IL" } +{ "_id" : "62376", "city" : "URSA", "loc" : [ -91.373341, 40.080918 ], "pop" : 1074, "state" : "IL" } +{ "_id" : "62378", "city" : "VERSAILLES", "loc" : [ -90.674147, 39.888286 ], "pop" : 1136, "state" : "IL" } +{ "_id" : "62379", "city" : "WARSAW", "loc" : [ -91.434803, 40.354449 ], "pop" : 1882, "state" : "IL" } +{ "_id" : "62380", "city" : "WEST POINT", "loc" : [ -91.249568, 40.245184 ], "pop" : 874, "state" : "IL" } +{ "_id" : "62401", "city" : "EFFINGHAM", "loc" : [ -88.561105, 39.121727 ], "pop" : 15524, "state" : "IL" } +{ "_id" : "62410", "city" : "ALLENDALE", "loc" : [ -87.721901, 38.523236 ], "pop" : 1051, "state" : "IL" } +{ "_id" : "62411", "city" : "ALTAMONT", "loc" : [ -88.748092, 39.063449 ], "pop" : 3867, "state" : "IL" } +{ "_id" : "62413", "city" : "ANNAPOLIS", "loc" : [ -87.802875, 39.117857 ], "pop" : 692, "state" : "IL" } +{ "_id" : "62414", "city" : "BEECHER CITY", "loc" : [ -88.80385, 39.183515 ], "pop" : 1968, "state" : "IL" } +{ "_id" : "62415", "city" : "BIRDS", "loc" : [ -87.681545, 38.812059 ], "pop" : 842, "state" : "IL" } +{ "_id" : "62417", "city" : "BRIDGEPORT", "loc" : [ -87.85492600000001, 38.694506 ], "pop" : 2076, "state" : "IL" } +{ "_id" : "62418", "city" : "BROWNSTOWN", "loc" : [ -88.949438, 38.989118 ], "pop" : 2434, "state" : "IL" } +{ "_id" : "62419", "city" : "CALHOUN", "loc" : [ -88.003745, 38.635116 ], "pop" : 715, "state" : "IL" } +{ "_id" : "62420", "city" : "CASEY", "loc" : [ -87.99130599999999, 39.301716 ], "pop" : 5300, "state" : "IL" } +{ "_id" : "62421", "city" : "CLAREMONT", "loc" : [ -87.972685, 38.742904 ], "pop" : 1320, "state" : "IL" } +{ "_id" : "62422", "city" : "COWDEN", "loc" : [ -88.886799, 39.232643 ], "pop" : 1521, "state" : "IL" } +{ "_id" : "62423", "city" : "DENNISON", "loc" : [ -87.58671, 39.449033 ], "pop" : 753, "state" : "IL" } +{ "_id" : "62424", "city" : "DIETERICH", "loc" : [ -88.407448, 39.031875 ], "pop" : 1639, "state" : "IL" } +{ "_id" : "62425", "city" : "DUNDAS", "loc" : [ -88.097309, 38.830572 ], "pop" : 437, "state" : "IL" } +{ "_id" : "62426", "city" : "LACLEDE", "loc" : [ -88.66386799999999, 38.91318 ], "pop" : 772, "state" : "IL" } +{ "_id" : "62427", "city" : "FLAT ROCK", "loc" : [ -87.683747, 38.909606 ], "pop" : 2173, "state" : "IL" } +{ "_id" : "62428", "city" : "HAZEL DELL", "loc" : [ -88.144502, 39.239454 ], "pop" : 2914, "state" : "IL" } +{ "_id" : "62431", "city" : "HERRICK", "loc" : [ -88.981211, 39.224481 ], "pop" : 628, "state" : "IL" } +{ "_id" : "62432", "city" : "HIDALGO", "loc" : [ -88.139706, 39.122808 ], "pop" : 820, "state" : "IL" } +{ "_id" : "62433", "city" : "HUTSONVILLE", "loc" : [ -87.669455, 39.106357 ], "pop" : 1039, "state" : "IL" } +{ "_id" : "62434", "city" : "INGRAHAM", "loc" : [ -88.320374, 38.828446 ], "pop" : 1077, "state" : "IL" } +{ "_id" : "62436", "city" : "JEWETT", "loc" : [ -88.24744, 39.207596 ], "pop" : 402, "state" : "IL" } +{ "_id" : "62438", "city" : "LAKEWOOD", "loc" : [ -88.87147400000001, 39.313358 ], "pop" : 415, "state" : "IL" } +{ "_id" : "62439", "city" : "LAWRENCEVILLE", "loc" : [ -87.678397, 38.730862 ], "pop" : 7833, "state" : "IL" } +{ "_id" : "62440", "city" : "LERNA", "loc" : [ -88.25302600000001, 39.39579 ], "pop" : 1289, "state" : "IL" } +{ "_id" : "62441", "city" : "MARSHALL", "loc" : [ -87.692261, 39.421999 ], "pop" : 8305, "state" : "IL" } +{ "_id" : "62442", "city" : "MARTINSVILLE", "loc" : [ -87.87073700000001, 39.317443 ], "pop" : 1881, "state" : "IL" } +{ "_id" : "62443", "city" : "MASON", "loc" : [ -88.623396, 38.964453 ], "pop" : 1774, "state" : "IL" } +{ "_id" : "62445", "city" : "MONTROSE", "loc" : [ -88.33497, 39.157274 ], "pop" : 1611, "state" : "IL" } +{ "_id" : "62446", "city" : "MOUNT ERIE", "loc" : [ -88.218521, 38.522151 ], "pop" : 470, "state" : "IL" } +{ "_id" : "62447", "city" : "NEOGA", "loc" : [ -88.450288, 39.322024 ], "pop" : 3494, "state" : "IL" } +{ "_id" : "62448", "city" : "NEWTON", "loc" : [ -88.17038599999999, 38.984678 ], "pop" : 5296, "state" : "IL" } +{ "_id" : "62449", "city" : "OBLONG", "loc" : [ -87.895016, 39.001043 ], "pop" : 3508, "state" : "IL" } +{ "_id" : "62450", "city" : "OLNEY", "loc" : [ -88.08093599999999, 38.733389 ], "pop" : 11163, "state" : "IL" } +{ "_id" : "62451", "city" : "PALESTINE", "loc" : [ -87.615695, 39.002823 ], "pop" : 2413, "state" : "IL" } +{ "_id" : "62452", "city" : "PARKERSBURG", "loc" : [ -88.064722, 38.589998 ], "pop" : 485, "state" : "IL" } +{ "_id" : "62454", "city" : "ROBINSON", "loc" : [ -87.748352, 39.007034 ], "pop" : 9243, "state" : "IL" } +{ "_id" : "62458", "city" : "SAINT ELMO", "loc" : [ -88.855181, 39.031544 ], "pop" : 2091, "state" : "IL" } +{ "_id" : "62460", "city" : "SAINT FRANCISVIL", "loc" : [ -87.67362799999999, 38.612494 ], "pop" : 1806, "state" : "IL" } +{ "_id" : "62461", "city" : "SHUMWAY", "loc" : [ -88.64182599999999, 39.188138 ], "pop" : 539, "state" : "IL" } +{ "_id" : "62462", "city" : "SIGEL", "loc" : [ -88.480301, 39.21762 ], "pop" : 2239, "state" : "IL" } +{ "_id" : "62463", "city" : "STEWARDSON", "loc" : [ -88.63185300000001, 39.27199 ], "pop" : 1219, "state" : "IL" } +{ "_id" : "62465", "city" : "STRASBURG", "loc" : [ -88.62786199999999, 39.364111 ], "pop" : 758, "state" : "IL" } +{ "_id" : "62466", "city" : "SUMNER", "loc" : [ -87.780728, 38.734077 ], "pop" : 3517, "state" : "IL" } +{ "_id" : "62467", "city" : "TEUTOPOLIS", "loc" : [ -88.476741, 39.131978 ], "pop" : 3095, "state" : "IL" } +{ "_id" : "62468", "city" : "TOLEDO", "loc" : [ -88.246821, 39.277223 ], "pop" : 2046, "state" : "IL" } +{ "_id" : "62469", "city" : "TRILLA", "loc" : [ -88.345698, 39.385286 ], "pop" : 499, "state" : "IL" } +{ "_id" : "62471", "city" : "VANDALIA", "loc" : [ -89.104116, 38.94391 ], "pop" : 7894, "state" : "IL" } +{ "_id" : "62473", "city" : "WATSON", "loc" : [ -88.559876, 39.039488 ], "pop" : 2740, "state" : "IL" } +{ "_id" : "62474", "city" : "WESTFIELD", "loc" : [ -88.044799, 39.442369 ], "pop" : 1602, "state" : "IL" } +{ "_id" : "62475", "city" : "WEST LIBERTY", "loc" : [ -88.09792899999999, 38.894989 ], "pop" : 593, "state" : "IL" } +{ "_id" : "62476", "city" : "WEST SALEM", "loc" : [ -88.032297, 38.518267 ], "pop" : 1994, "state" : "IL" } +{ "_id" : "62477", "city" : "WEST UNION", "loc" : [ -87.65121499999999, 39.240185 ], "pop" : 993, "state" : "IL" } +{ "_id" : "62478", "city" : "WEST YORK", "loc" : [ -87.71307299999999, 39.193793 ], "pop" : 665, "state" : "IL" } +{ "_id" : "62479", "city" : "WHEELER", "loc" : [ -88.317536, 39.018185 ], "pop" : 809, "state" : "IL" } +{ "_id" : "62480", "city" : "WILLOW HILL", "loc" : [ -88.017156, 38.975654 ], "pop" : 1708, "state" : "IL" } +{ "_id" : "62481", "city" : "YALE", "loc" : [ -88.01047, 39.129975 ], "pop" : 410, "state" : "IL" } +{ "_id" : "62501", "city" : "NEWBURG", "loc" : [ -88.821371, 39.991581 ], "pop" : 1444, "state" : "IL" } +{ "_id" : "62510", "city" : "ASSUMPTION", "loc" : [ -89.039807, 39.509489 ], "pop" : 1949, "state" : "IL" } +{ "_id" : "62511", "city" : "ATWATER", "loc" : [ -89.763374, 39.310733 ], "pop" : 489, "state" : "IL" } +{ "_id" : "62512", "city" : "BEASON", "loc" : [ -89.194801, 40.143652 ], "pop" : 467, "state" : "IL" } +{ "_id" : "62513", "city" : "BLUE MOUND", "loc" : [ -89.113558, 39.697813 ], "pop" : 1488, "state" : "IL" } +{ "_id" : "62514", "city" : "BOODY", "loc" : [ -89.07206100000001, 39.762824 ], "pop" : 541, "state" : "IL" } +{ "_id" : "62515", "city" : "BUFFALO HART", "loc" : [ -89.388846, 39.847201 ], "pop" : 797, "state" : "IL" } +{ "_id" : "62518", "city" : "CHESTNUT", "loc" : [ -89.19001400000001, 40.058202 ], "pop" : 436, "state" : "IL" } +{ "_id" : "62520", "city" : "DAWSON", "loc" : [ -89.460329, 39.85629 ], "pop" : 558, "state" : "IL" } +{ "_id" : "62521", "city" : "DECATUR", "loc" : [ -88.925984, 39.827137 ], "pop" : 39666, "state" : "IL" } +{ "_id" : "62522", "city" : "DECATUR", "loc" : [ -88.98613899999999, 39.843237 ], "pop" : 19224, "state" : "IL" } +{ "_id" : "62523", "city" : "DECATUR", "loc" : [ -88.953435, 39.841694 ], "pop" : 864, "state" : "IL" } +{ "_id" : "62526", "city" : "BEARSDALE", "loc" : [ -88.953515, 39.877413 ], "pop" : 39674, "state" : "IL" } +{ "_id" : "62530", "city" : "CIMIC", "loc" : [ -89.65465399999999, 39.567684 ], "pop" : 1484, "state" : "IL" } +{ "_id" : "62531", "city" : "EDINBURG", "loc" : [ -89.37788399999999, 39.661223 ], "pop" : 1925, "state" : "IL" } +{ "_id" : "62533", "city" : "THOMASVILLE", "loc" : [ -89.642718, 39.453048 ], "pop" : 1047, "state" : "IL" } +{ "_id" : "62534", "city" : "BRUNSWICK", "loc" : [ -88.756208, 39.503253 ], "pop" : 1410, "state" : "IL" } +{ "_id" : "62536", "city" : "GLENARM", "loc" : [ -89.65814399999999, 39.632713 ], "pop" : 739, "state" : "IL" } +{ "_id" : "62538", "city" : "HARVEL", "loc" : [ -89.53804, 39.371865 ], "pop" : 374, "state" : "IL" } +{ "_id" : "62539", "city" : "ILLIOPOLIS", "loc" : [ -89.251319, 39.849929 ], "pop" : 1366, "state" : "IL" } +{ "_id" : "62543", "city" : "LATHAM", "loc" : [ -89.17249200000001, 39.97111 ], "pop" : 857, "state" : "IL" } +{ "_id" : "62544", "city" : "MACON", "loc" : [ -88.988026, 39.704093 ], "pop" : 1737, "state" : "IL" } +{ "_id" : "62545", "city" : "BOLIVIA", "loc" : [ -89.417692, 39.77771 ], "pop" : 2228, "state" : "IL" } +{ "_id" : "62546", "city" : "MORRISONVILLE", "loc" : [ -89.45407, 39.415336 ], "pop" : 1418, "state" : "IL" } +{ "_id" : "62547", "city" : "MOUNT AUBURN", "loc" : [ -89.23567199999999, 39.762845 ], "pop" : 1011, "state" : "IL" } +{ "_id" : "62548", "city" : "MOUNT PULASKI", "loc" : [ -89.293482, 40.004482 ], "pop" : 2500, "state" : "IL" } +{ "_id" : "62549", "city" : "HERVEY CITY", "loc" : [ -88.87020699999999, 39.778883 ], "pop" : 5691, "state" : "IL" } +{ "_id" : "62550", "city" : "RADFORD", "loc" : [ -89.012776, 39.616135 ], "pop" : 3112, "state" : "IL" } +{ "_id" : "62551", "city" : "NIANTIC", "loc" : [ -89.17007099999999, 39.858175 ], "pop" : 850, "state" : "IL" } +{ "_id" : "62552", "city" : "CASNER", "loc" : [ -88.80559100000001, 39.896897 ], "pop" : 810, "state" : "IL" } +{ "_id" : "62553", "city" : "OCONEE", "loc" : [ -89.083636, 39.288408 ], "pop" : 796, "state" : "IL" } +{ "_id" : "62554", "city" : "OREANA", "loc" : [ -88.854675, 39.935135 ], "pop" : 1554, "state" : "IL" } +{ "_id" : "62555", "city" : "OWANECO", "loc" : [ -89.195071, 39.477508 ], "pop" : 540, "state" : "IL" } +{ "_id" : "62556", "city" : "CLARKSDALE", "loc" : [ -89.425555, 39.470817 ], "pop" : 689, "state" : "IL" } +{ "_id" : "62557", "city" : "DUNKEL", "loc" : [ -89.078165, 39.388124 ], "pop" : 7081, "state" : "IL" } +{ "_id" : "62558", "city" : "SICILY", "loc" : [ -89.57895499999999, 39.590966 ], "pop" : 2822, "state" : "IL" } +{ "_id" : "62560", "city" : "RAYMOND", "loc" : [ -89.58513499999999, 39.310551 ], "pop" : 1660, "state" : "IL" } +{ "_id" : "62561", "city" : "SPAULDING", "loc" : [ -89.54190800000001, 39.855239 ], "pop" : 3921, "state" : "IL" } +{ "_id" : "62563", "city" : "BERRY", "loc" : [ -89.547208, 39.759047 ], "pop" : 8726, "state" : "IL" } +{ "_id" : "62565", "city" : "CLARKSBURG", "loc" : [ -88.804615, 39.404873 ], "pop" : 7481, "state" : "IL" } +{ "_id" : "62567", "city" : "STONINGTON", "loc" : [ -89.191328, 39.640482 ], "pop" : 1280, "state" : "IL" } +{ "_id" : "62568", "city" : "HEWITTSVILLE", "loc" : [ -89.313357, 39.554516 ], "pop" : 17182, "state" : "IL" } +{ "_id" : "62571", "city" : "DOLLVILLE", "loc" : [ -88.97451700000001, 39.36576 ], "pop" : 1505, "state" : "IL" } +{ "_id" : "62572", "city" : "WAGGONER", "loc" : [ -89.647429, 39.38383 ], "pop" : 547, "state" : "IL" } +{ "_id" : "62573", "city" : "HEMAN", "loc" : [ -89.068316, 39.939737 ], "pop" : 1780, "state" : "IL" } +{ "_id" : "62601", "city" : "ORLEANS", "loc" : [ -90.035304, 39.725935 ], "pop" : 501, "state" : "IL" } +{ "_id" : "62611", "city" : "ARENZVILLE", "loc" : [ -90.363595, 39.897927 ], "pop" : 1008, "state" : "IL" } +{ "_id" : "62612", "city" : "NEWMANSVILLE", "loc" : [ -90.028721, 39.89168 ], "pop" : 1904, "state" : "IL" } +{ "_id" : "62613", "city" : "FANCY PRAIRIE", "loc" : [ -89.72108, 39.964813 ], "pop" : 2696, "state" : "IL" } +{ "_id" : "62615", "city" : "AUBURN", "loc" : [ -89.744033, 39.591787 ], "pop" : 3934, "state" : "IL" } +{ "_id" : "62617", "city" : "LYNCHBURG", "loc" : [ -90.148568, 40.161774 ], "pop" : 1118, "state" : "IL" } +{ "_id" : "62618", "city" : "BEARDSTOWN", "loc" : [ -90.42285099999999, 40.004356 ], "pop" : 7369, "state" : "IL" } +{ "_id" : "62621", "city" : "EXETER", "loc" : [ -90.53052700000001, 39.744078 ], "pop" : 1101, "state" : "IL" } +{ "_id" : "62624", "city" : "BADER", "loc" : [ -90.351671, 40.155025 ], "pop" : 766, "state" : "IL" } +{ "_id" : "62625", "city" : "CANTRALL", "loc" : [ -89.66426, 39.911267 ], "pop" : 1811, "state" : "IL" } +{ "_id" : "62626", "city" : "COMER", "loc" : [ -89.888935, 39.279821 ], "pop" : 7343, "state" : "IL" } +{ "_id" : "62627", "city" : "PANTHER CREEK", "loc" : [ -90.147657, 40.038437 ], "pop" : 1283, "state" : "IL" } +{ "_id" : "62628", "city" : "CHAPIN", "loc" : [ -90.411299, 39.771581 ], "pop" : 879, "state" : "IL" } +{ "_id" : "62629", "city" : "CHATHAM", "loc" : [ -89.711212, 39.673679 ], "pop" : 4922, "state" : "IL" } +{ "_id" : "62630", "city" : "HAGAMAN", "loc" : [ -90.076632, 39.270756 ], "pop" : 683, "state" : "IL" } +{ "_id" : "62631", "city" : "CONCORD", "loc" : [ -90.372175, 39.822958 ], "pop" : 460, "state" : "IL" } +{ "_id" : "62633", "city" : "BIGGS", "loc" : [ -89.846447, 40.235482 ], "pop" : 1056, "state" : "IL" } +{ "_id" : "62634", "city" : "BROADWELL", "loc" : [ -89.47493799999999, 40.002394 ], "pop" : 922, "state" : "IL" } +{ "_id" : "62635", "city" : "EMDEN", "loc" : [ -89.51744100000001, 40.294538 ], "pop" : 1144, "state" : "IL" } +{ "_id" : "62638", "city" : "CLEMENTS", "loc" : [ -90.048535, 39.608461 ], "pop" : 1280, "state" : "IL" } +{ "_id" : "62639", "city" : "FREDERICK", "loc" : [ -90.504391, 40.070246 ], "pop" : 690, "state" : "IL" } +{ "_id" : "62640", "city" : "MCVEY", "loc" : [ -89.780535, 39.447182 ], "pop" : 2454, "state" : "IL" } +{ "_id" : "62642", "city" : "HUBLY", "loc" : [ -89.711606, 40.079859 ], "pop" : 1499, "state" : "IL" } +{ "_id" : "62643", "city" : "HARTSBURG", "loc" : [ -89.451944, 40.245073 ], "pop" : 602, "state" : "IL" } +{ "_id" : "62644", "city" : "ECKARD", "loc" : [ -90.04952, 40.295995 ], "pop" : 5593, "state" : "IL" } +{ "_id" : "62649", "city" : "HETTICK", "loc" : [ -90.067161, 39.375217 ], "pop" : 518, "state" : "IL" } +{ "_id" : "62650", "city" : "ARCADIA", "loc" : [ -90.236238, 39.729269 ], "pop" : 28240, "state" : "IL" } +{ "_id" : "62655", "city" : "KILBOURNE", "loc" : [ -90.004279, 40.158696 ], "pop" : 633, "state" : "IL" } +{ "_id" : "62656", "city" : "LINCOLN", "loc" : [ -89.368376, 40.14508 ], "pop" : 20130, "state" : "IL" } +{ "_id" : "62661", "city" : "LOAMI", "loc" : [ -89.858823, 39.670394 ], "pop" : 1286, "state" : "IL" } +{ "_id" : "62664", "city" : "LUTHER", "loc" : [ -89.69925600000001, 40.199938 ], "pop" : 2968, "state" : "IL" } +{ "_id" : "62665", "city" : "NAPLES", "loc" : [ -90.549542, 39.797631 ], "pop" : 2215, "state" : "IL" } +{ "_id" : "62666", "city" : "MIDDLETOWN", "loc" : [ -89.58181999999999, 40.096668 ], "pop" : 586, "state" : "IL" } +{ "_id" : "62667", "city" : "MODESTO", "loc" : [ -89.97938600000001, 39.475965 ], "pop" : 564, "state" : "IL" } +{ "_id" : "62668", "city" : "NORTONVILLE", "loc" : [ -90.231189, 39.572952 ], "pop" : 1387, "state" : "IL" } +{ "_id" : "62670", "city" : "BATES", "loc" : [ -89.905721, 39.736048 ], "pop" : 1470, "state" : "IL" } +{ "_id" : "62671", "city" : "NEW HOLLAND", "loc" : [ -89.56044, 40.168226 ], "pop" : 663, "state" : "IL" } +{ "_id" : "62672", "city" : "NILWOOD", "loc" : [ -89.77841100000001, 39.387199 ], "pop" : 633, "state" : "IL" } +{ "_id" : "62673", "city" : "OAKFORD", "loc" : [ -89.96013499999999, 40.099445 ], "pop" : 493, "state" : "IL" } +{ "_id" : "62674", "city" : "BARR", "loc" : [ -89.95673600000001, 39.41654 ], "pop" : 1490, "state" : "IL" } +{ "_id" : "62675", "city" : "ATTERBURY", "loc" : [ -89.847874, 40.011529 ], "pop" : 5049, "state" : "IL" } +{ "_id" : "62676", "city" : "PLAINVIEW", "loc" : [ -89.97568699999999, 39.128311 ], "pop" : 792, "state" : "IL" } +{ "_id" : "62677", "city" : "FARMINGDALE", "loc" : [ -89.83836100000001, 39.849767 ], "pop" : 3081, "state" : "IL" } +{ "_id" : "62681", "city" : "LAYTON", "loc" : [ -90.560883, 40.124189 ], "pop" : 4747, "state" : "IL" } +{ "_id" : "62682", "city" : "ALLEN", "loc" : [ -89.625029, 40.294466 ], "pop" : 669, "state" : "IL" } +{ "_id" : "62683", "city" : "SCOTTVILLE", "loc" : [ -90.09692099999999, 39.478167 ], "pop" : 387, "state" : "IL" } +{ "_id" : "62684", "city" : "BARCLAY", "loc" : [ -89.60251, 39.889456 ], "pop" : 2185, "state" : "IL" } +{ "_id" : "62685", "city" : "ROYAL LAKES", "loc" : [ -90.048737, 39.124165 ], "pop" : 844, "state" : "IL" } +{ "_id" : "62688", "city" : "TALLULA", "loc" : [ -89.882274, 39.940188 ], "pop" : 1427, "state" : "IL" } +{ "_id" : "62690", "city" : "VIRDEN", "loc" : [ -89.77833200000001, 39.506447 ], "pop" : 5939, "state" : "IL" } +{ "_id" : "62691", "city" : "LITTLE INDIAN", "loc" : [ -90.212681, 39.945475 ], "pop" : 2144, "state" : "IL" } +{ "_id" : "62692", "city" : "WAVERLY", "loc" : [ -89.944903, 39.586983 ], "pop" : 1968, "state" : "IL" } +{ "_id" : "62693", "city" : "WILLIAMSVILLE", "loc" : [ -89.534172, 39.930438 ], "pop" : 2320, "state" : "IL" } +{ "_id" : "62694", "city" : "GLASGOW", "loc" : [ -90.433696, 39.614113 ], "pop" : 3909, "state" : "IL" } +{ "_id" : "62701", "city" : "SPRINGFIELD", "loc" : [ -89.649531, 39.80004 ], "pop" : 1155, "state" : "IL" } +{ "_id" : "62702", "city" : "GRANDVIEW", "loc" : [ -89.644147, 39.816768 ], "pop" : 42047, "state" : "IL" } +{ "_id" : "62703", "city" : "SOUTHERN VIEW", "loc" : [ -89.63333, 39.772401 ], "pop" : 32501, "state" : "IL" } +{ "_id" : "62704", "city" : "JEROME", "loc" : [ -89.681066, 39.780319 ], "pop" : 41611, "state" : "IL" } +{ "_id" : "62707", "city" : "ANDREW", "loc" : [ -89.663991, 39.772842 ], "pop" : 16264, "state" : "IL" } +{ "_id" : "62801", "city" : "CENTRALIA", "loc" : [ -89.136478, 38.524117 ], "pop" : 23956, "state" : "IL" } +{ "_id" : "62803", "city" : "HOYLETON", "loc" : [ -89.306854, 38.445468 ], "pop" : 1295, "state" : "IL" } +{ "_id" : "62806", "city" : "ALBION", "loc" : [ -88.063557, 38.374003 ], "pop" : 3162, "state" : "IL" } +{ "_id" : "62807", "city" : "ALMA", "loc" : [ -88.915695, 38.723089 ], "pop" : 1251, "state" : "IL" } +{ "_id" : "62808", "city" : "ASHLEY", "loc" : [ -89.231115, 38.306002 ], "pop" : 1260, "state" : "IL" } +{ "_id" : "62809", "city" : "BARNHILL", "loc" : [ -88.350831, 38.278144 ], "pop" : 165, "state" : "IL" } +{ "_id" : "62810", "city" : "BELLE RIVE", "loc" : [ -88.75580100000001, 38.215268 ], "pop" : 1149, "state" : "IL" } +{ "_id" : "62812", "city" : "BENTON", "loc" : [ -88.922659, 37.99998 ], "pop" : 11419, "state" : "IL" } +{ "_id" : "62814", "city" : "BLUFORD", "loc" : [ -88.75872, 38.353138 ], "pop" : 2622, "state" : "IL" } +{ "_id" : "62815", "city" : "BONE GAP", "loc" : [ -88.00249100000001, 38.448967 ], "pop" : 496, "state" : "IL" } +{ "_id" : "62816", "city" : "BONNIE", "loc" : [ -88.922884, 38.198017 ], "pop" : 994, "state" : "IL" } +{ "_id" : "62817", "city" : "BROUGHTON", "loc" : [ -88.467775, 37.954554 ], "pop" : 732, "state" : "IL" } +{ "_id" : "62818", "city" : "BROWNS", "loc" : [ -87.992824, 38.376433 ], "pop" : 440, "state" : "IL" } +{ "_id" : "62819", "city" : "BUCKNER", "loc" : [ -88.977993, 37.966881 ], "pop" : 278, "state" : "IL" } +{ "_id" : "62820", "city" : "BURNT PRAIRIE", "loc" : [ -88.214719, 38.208151 ], "pop" : 503, "state" : "IL" } +{ "_id" : "62821", "city" : "CARMI", "loc" : [ -88.16698700000001, 38.080819 ], "pop" : 8234, "state" : "IL" } +{ "_id" : "62822", "city" : "CHRISTOPHER", "loc" : [ -89.057367, 37.984905 ], "pop" : 5042, "state" : "IL" } +{ "_id" : "62823", "city" : "CISNE", "loc" : [ -88.40452399999999, 38.513774 ], "pop" : 1403, "state" : "IL" } +{ "_id" : "62824", "city" : "CLAY CITY", "loc" : [ -88.351641, 38.669501 ], "pop" : 1753, "state" : "IL" } +{ "_id" : "62827", "city" : "CROSSVILLE", "loc" : [ -88.05947399999999, 38.166029 ], "pop" : 1388, "state" : "IL" } +{ "_id" : "62828", "city" : "DAHLGREN", "loc" : [ -88.63631100000001, 38.197479 ], "pop" : 1627, "state" : "IL" } +{ "_id" : "62829", "city" : "DALE", "loc" : [ -88.53423100000001, 37.996585 ], "pop" : 594, "state" : "IL" } +{ "_id" : "62830", "city" : "DIX", "loc" : [ -88.96569700000001, 38.43329 ], "pop" : 1552, "state" : "IL" } +{ "_id" : "62831", "city" : "DU BOIS", "loc" : [ -89.204187, 38.252638 ], "pop" : 732, "state" : "IL" } +{ "_id" : "62832", "city" : "DU QUOIN", "loc" : [ -89.233268, 38.013687 ], "pop" : 10061, "state" : "IL" } +{ "_id" : "62833", "city" : "ELLERY", "loc" : [ -88.133455, 38.365021 ], "pop" : 141, "state" : "IL" } +{ "_id" : "62835", "city" : "ENFIELD", "loc" : [ -88.33254599999999, 38.092746 ], "pop" : 1145, "state" : "IL" } +{ "_id" : "62836", "city" : "EWING", "loc" : [ -88.850441, 38.07021 ], "pop" : 1286, "state" : "IL" } +{ "_id" : "62837", "city" : "FAIRFIELD", "loc" : [ -88.359323, 38.378214 ], "pop" : 8723, "state" : "IL" } +{ "_id" : "62838", "city" : "FARINA", "loc" : [ -88.76141200000001, 38.846902 ], "pop" : 925, "state" : "IL" } +{ "_id" : "62839", "city" : "FLORA", "loc" : [ -88.49186, 38.670337 ], "pop" : 6989, "state" : "IL" } +{ "_id" : "62840", "city" : "FRANKFORT HEIGHT", "loc" : [ -88.845651, 37.901301 ], "pop" : 778, "state" : "IL" } +{ "_id" : "62842", "city" : "GEFF", "loc" : [ -88.414428, 38.441326 ], "pop" : 632, "state" : "IL" } +{ "_id" : "62843", "city" : "GOLDEN GATE", "loc" : [ -88.207466, 38.364514 ], "pop" : 733, "state" : "IL" } +{ "_id" : "62844", "city" : "GRAYVILLE", "loc" : [ -88.003539, 38.262707 ], "pop" : 2569, "state" : "IL" } +{ "_id" : "62845", "city" : "HERALD", "loc" : [ -88.21315199999999, 37.967542 ], "pop" : 641, "state" : "IL" } +{ "_id" : "62846", "city" : "INA", "loc" : [ -88.88936200000001, 38.152743 ], "pop" : 800, "state" : "IL" } +{ "_id" : "62849", "city" : "IUKA", "loc" : [ -88.768925, 38.613563 ], "pop" : 965, "state" : "IL" } +{ "_id" : "62850", "city" : "JOHNSONVILLE", "loc" : [ -88.588701, 38.525628 ], "pop" : 1264, "state" : "IL" } +{ "_id" : "62851", "city" : "KEENES", "loc" : [ -88.64805800000001, 38.369146 ], "pop" : 968, "state" : "IL" } +{ "_id" : "62853", "city" : "KELL", "loc" : [ -88.84110699999999, 38.513256 ], "pop" : 1261, "state" : "IL" } +{ "_id" : "62854", "city" : "KINMUNDY", "loc" : [ -88.812999, 38.755857 ], "pop" : 2134, "state" : "IL" } +{ "_id" : "62855", "city" : "LANCASTER", "loc" : [ -87.871216, 38.537438 ], "pop" : 567, "state" : "IL" } +{ "_id" : "62858", "city" : "BIBLE GROVE", "loc" : [ -88.510046, 38.811856 ], "pop" : 3688, "state" : "IL" } +{ "_id" : "62859", "city" : "MC LEANSBORO", "loc" : [ -88.52855599999999, 38.093861 ], "pop" : 4357, "state" : "IL" } +{ "_id" : "62860", "city" : "MACEDONIA", "loc" : [ -88.696077, 38.013023 ], "pop" : 1505, "state" : "IL" } +{ "_id" : "62862", "city" : "MILL SHOALS", "loc" : [ -88.333817, 38.244675 ], "pop" : 412, "state" : "IL" } +{ "_id" : "62863", "city" : "MOUNT CARMEL", "loc" : [ -87.791107, 38.414727 ], "pop" : 11493, "state" : "IL" } +{ "_id" : "62864", "city" : "MOUNT VERNON", "loc" : [ -88.91052500000001, 38.317014 ], "pop" : 23844, "state" : "IL" } +{ "_id" : "62865", "city" : "MULKEYTOWN", "loc" : [ -89.1159, 37.968712 ], "pop" : 474, "state" : "IL" } +{ "_id" : "62866", "city" : "NASON", "loc" : [ -88.968839, 38.173872 ], "pop" : 269, "state" : "IL" } +{ "_id" : "62867", "city" : "NEW HAVEN", "loc" : [ -88.12845799999999, 37.899907 ], "pop" : 558, "state" : "IL" } +{ "_id" : "62868", "city" : "NOBLE", "loc" : [ -88.219038, 38.711851 ], "pop" : 2425, "state" : "IL" } +{ "_id" : "62869", "city" : "NORRIS CITY", "loc" : [ -88.32434000000001, 37.9773 ], "pop" : 2377, "state" : "IL" } +{ "_id" : "62870", "city" : "ODIN", "loc" : [ -89.055228, 38.608786 ], "pop" : 1758, "state" : "IL" } +{ "_id" : "62871", "city" : "OMAHA", "loc" : [ -88.286484, 37.890423 ], "pop" : 638, "state" : "IL" } +{ "_id" : "62872", "city" : "OPDYKE", "loc" : [ -88.77495500000001, 38.274955 ], "pop" : 284, "state" : "IL" } +{ "_id" : "62875", "city" : "PATOKA", "loc" : [ -89.094188, 38.754852 ], "pop" : 857, "state" : "IL" } +{ "_id" : "62877", "city" : "RICHVIEW", "loc" : [ -89.175572, 38.408227 ], "pop" : 1087, "state" : "IL" } +{ "_id" : "62878", "city" : "RINARD", "loc" : [ -88.464094, 38.580596 ], "pop" : 377, "state" : "IL" } +{ "_id" : "62880", "city" : "SAINT PETER", "loc" : [ -88.855998, 38.869684 ], "pop" : 725, "state" : "IL" } +{ "_id" : "62881", "city" : "SALEM", "loc" : [ -88.948077, 38.626421 ], "pop" : 11599, "state" : "IL" } +{ "_id" : "62882", "city" : "SANDOVAL", "loc" : [ -89.11400999999999, 38.613113 ], "pop" : 3145, "state" : "IL" } +{ "_id" : "62883", "city" : "SCHELLER", "loc" : [ -89.092691, 38.173095 ], "pop" : 528, "state" : "IL" } +{ "_id" : "62884", "city" : "SESSER", "loc" : [ -89.05740400000001, 38.089422 ], "pop" : 2844, "state" : "IL" } +{ "_id" : "62885", "city" : "SHOBONIER", "loc" : [ -89.078959, 38.844584 ], "pop" : 219, "state" : "IL" } +{ "_id" : "62886", "city" : "SIMS", "loc" : [ -88.530642, 38.392318 ], "pop" : 868, "state" : "IL" } +{ "_id" : "62887", "city" : "SPRINGERTON", "loc" : [ -88.37261100000001, 38.169868 ], "pop" : 737, "state" : "IL" } +{ "_id" : "62888", "city" : "TAMAROA", "loc" : [ -89.223091, 38.137969 ], "pop" : 1788, "state" : "IL" } +{ "_id" : "62889", "city" : "TEXICO", "loc" : [ -88.87015100000001, 38.425035 ], "pop" : 1159, "state" : "IL" } +{ "_id" : "62890", "city" : "THOMPSONVILLE", "loc" : [ -88.768394, 37.880438 ], "pop" : 2413, "state" : "IL" } +{ "_id" : "62892", "city" : "VERNON", "loc" : [ -89.083001, 38.803328 ], "pop" : 371, "state" : "IL" } +{ "_id" : "62893", "city" : "WALNUT HILL", "loc" : [ -88.984514, 38.520006 ], "pop" : 1386, "state" : "IL" } +{ "_id" : "62894", "city" : "WALTONVILLE", "loc" : [ -89.006702, 38.246479 ], "pop" : 1923, "state" : "IL" } +{ "_id" : "62895", "city" : "WAYNE CITY", "loc" : [ -88.58331699999999, 38.332808 ], "pop" : 1523, "state" : "IL" } +{ "_id" : "62896", "city" : "WEST FRANKFORT", "loc" : [ -88.930724, 37.897914 ], "pop" : 11800, "state" : "IL" } +{ "_id" : "62897", "city" : "WHITTINGTON", "loc" : [ -88.863456, 38.098937 ], "pop" : 370, "state" : "IL" } +{ "_id" : "62898", "city" : "WOODLAWN", "loc" : [ -89.074457, 38.38444 ], "pop" : 1896, "state" : "IL" } +{ "_id" : "62899", "city" : "XENIA", "loc" : [ -88.63789, 38.669747 ], "pop" : 1252, "state" : "IL" } +{ "_id" : "62901", "city" : "CARBONDALE", "loc" : [ -89.215762, 37.719994 ], "pop" : 31742, "state" : "IL" } +{ "_id" : "62905", "city" : "ALTO PASS", "loc" : [ -89.317179, 37.568142 ], "pop" : 912, "state" : "IL" } +{ "_id" : "62906", "city" : "ANNA", "loc" : [ -89.22068400000001, 37.466777 ], "pop" : 8151, "state" : "IL" } +{ "_id" : "62907", "city" : "AVA", "loc" : [ -89.465366, 37.879286 ], "pop" : 1806, "state" : "IL" } +{ "_id" : "62908", "city" : "BELKNAP", "loc" : [ -88.95065200000001, 37.326584 ], "pop" : 188, "state" : "IL" } +{ "_id" : "62910", "city" : "NEW LIBERTY", "loc" : [ -88.61194399999999, 37.138731 ], "pop" : 2565, "state" : "IL" } +{ "_id" : "62912", "city" : "BUNCOMBE", "loc" : [ -88.980586, 37.463661 ], "pop" : 696, "state" : "IL" } +{ "_id" : "62913", "city" : "CACHE", "loc" : [ -89.298018, 37.114131 ], "pop" : 80, "state" : "IL" } +{ "_id" : "62914", "city" : "CAIRO", "loc" : [ -89.181104, 37.012293 ], "pop" : 5439, "state" : "IL" } +{ "_id" : "62916", "city" : "CAMPBELL HILL", "loc" : [ -89.57990100000001, 37.922778 ], "pop" : 976, "state" : "IL" } +{ "_id" : "62917", "city" : "CARRIER MILLS", "loc" : [ -88.612706, 37.678199 ], "pop" : 3355, "state" : "IL" } +{ "_id" : "62918", "city" : "CARTERVILLE", "loc" : [ -89.097793, 37.774785 ], "pop" : 10457, "state" : "IL" } +{ "_id" : "62919", "city" : "CAVE IN ROCK", "loc" : [ -88.22196099999999, 37.517947 ], "pop" : 2266, "state" : "IL" } +{ "_id" : "62920", "city" : "COBDEN", "loc" : [ -89.245741, 37.542358 ], "pop" : 2348, "state" : "IL" } +{ "_id" : "62922", "city" : "CREAL SPRINGS", "loc" : [ -88.880697, 37.628393 ], "pop" : 2743, "state" : "IL" } +{ "_id" : "62923", "city" : "CYPRESS", "loc" : [ -89.014414, 37.366223 ], "pop" : 618, "state" : "IL" } +{ "_id" : "62924", "city" : "DE SOTO", "loc" : [ -89.221834, 37.81473 ], "pop" : 2073, "state" : "IL" } +{ "_id" : "62926", "city" : "DONGOLA", "loc" : [ -89.134933, 37.371234 ], "pop" : 2361, "state" : "IL" } +{ "_id" : "62928", "city" : "EDDYVILLE", "loc" : [ -88.594893, 37.52439 ], "pop" : 677, "state" : "IL" } +{ "_id" : "62930", "city" : "ELDORADO", "loc" : [ -88.443382, 37.813885 ], "pop" : 7036, "state" : "IL" } +{ "_id" : "62931", "city" : "ELIZABETHTOWN", "loc" : [ -88.28673499999999, 37.466492 ], "pop" : 815, "state" : "IL" } +{ "_id" : "62932", "city" : "ELKVILLE", "loc" : [ -89.233574, 37.915506 ], "pop" : 2091, "state" : "IL" } +{ "_id" : "62934", "city" : "EQUALITY", "loc" : [ -88.3445, 37.727786 ], "pop" : 1173, "state" : "IL" } +{ "_id" : "62935", "city" : "GALATIA", "loc" : [ -88.62348799999999, 37.827444 ], "pop" : 2802, "state" : "IL" } +{ "_id" : "62938", "city" : "BROWNFIELD", "loc" : [ -88.555148, 37.349984 ], "pop" : 2997, "state" : "IL" } +{ "_id" : "62939", "city" : "GOREVILLE", "loc" : [ -88.965524, 37.574985 ], "pop" : 2867, "state" : "IL" } +{ "_id" : "62940", "city" : "GORHAM", "loc" : [ -89.444031, 37.740611 ], "pop" : 982, "state" : "IL" } +{ "_id" : "62941", "city" : "GRAND CHAIN", "loc" : [ -89.008335, 37.251043 ], "pop" : 603, "state" : "IL" } +{ "_id" : "62942", "city" : "GRAND TOWER", "loc" : [ -89.49986, 37.63222 ], "pop" : 903, "state" : "IL" } +{ "_id" : "62943", "city" : "GRANTSBURG", "loc" : [ -88.770489, 37.39672 ], "pop" : 2549, "state" : "IL" } +{ "_id" : "62946", "city" : "HARRISBURG", "loc" : [ -88.54404, 37.725661 ], "pop" : 12122, "state" : "IL" } +{ "_id" : "62947", "city" : "HEROD", "loc" : [ -88.458062, 37.469731 ], "pop" : 699, "state" : "IL" } +{ "_id" : "62948", "city" : "HERRIN", "loc" : [ -89.02316, 37.801884 ], "pop" : 13900, "state" : "IL" } +{ "_id" : "62950", "city" : "JACOB", "loc" : [ -89.544359, 37.743738 ], "pop" : 257, "state" : "IL" } +{ "_id" : "62951", "city" : "JOHNSTON CITY", "loc" : [ -88.920858, 37.824477 ], "pop" : 5424, "state" : "IL" } +{ "_id" : "62952", "city" : "JONESBORO", "loc" : [ -89.291494, 37.446082 ], "pop" : 3383, "state" : "IL" } +{ "_id" : "62953", "city" : "JOPPA", "loc" : [ -88.84819, 37.247192 ], "pop" : 1687, "state" : "IL" } +{ "_id" : "62954", "city" : "JUNCTION", "loc" : [ -88.249071, 37.695206 ], "pop" : 581, "state" : "IL" } +{ "_id" : "62955", "city" : "KARBERS RIDGE", "loc" : [ -88.367893, 37.463071 ], "pop" : 686, "state" : "IL" } +{ "_id" : "62956", "city" : "KARNAK", "loc" : [ -88.97394300000001, 37.291066 ], "pop" : 710, "state" : "IL" } +{ "_id" : "62957", "city" : "MC CLURE", "loc" : [ -89.453119, 37.301983 ], "pop" : 1231, "state" : "IL" } +{ "_id" : "62958", "city" : "MAKANDA", "loc" : [ -89.214232, 37.656396 ], "pop" : 3893, "state" : "IL" } +{ "_id" : "62959", "city" : "MARION", "loc" : [ -88.929447, 37.725662 ], "pop" : 20722, "state" : "IL" } +{ "_id" : "62960", "city" : "METROPOLIS", "loc" : [ -88.725179, 37.175348 ], "pop" : 10500, "state" : "IL" } +{ "_id" : "62961", "city" : "MILLCREEK", "loc" : [ -89.26988900000001, 37.353127 ], "pop" : 356, "state" : "IL" } +{ "_id" : "62962", "city" : "MILLER CITY", "loc" : [ -89.34944299999999, 37.103359 ], "pop" : 122, "state" : "IL" } +{ "_id" : "62963", "city" : "MOUND CITY", "loc" : [ -89.163687, 37.086474 ], "pop" : 845, "state" : "IL" } +{ "_id" : "62964", "city" : "MOUNDS", "loc" : [ -89.200064, 37.11883 ], "pop" : 2064, "state" : "IL" } +{ "_id" : "62966", "city" : "MURPHYSBORO", "loc" : [ -89.331749, 37.765464 ], "pop" : 15335, "state" : "IL" } +{ "_id" : "62967", "city" : "NEW BURNSIDE", "loc" : [ -88.771253, 37.580608 ], "pop" : 512, "state" : "IL" } +{ "_id" : "62970", "city" : "OLMSTED", "loc" : [ -89.093266, 37.193507 ], "pop" : 692, "state" : "IL" } +{ "_id" : "62972", "city" : "OZARK", "loc" : [ -88.768778, 37.536704 ], "pop" : 463, "state" : "IL" } +{ "_id" : "62974", "city" : "PITTSBURG", "loc" : [ -88.87039300000001, 37.78387 ], "pop" : 1330, "state" : "IL" } +{ "_id" : "62975", "city" : "POMONA", "loc" : [ -89.336308, 37.641081 ], "pop" : 769, "state" : "IL" } +{ "_id" : "62976", "city" : "PULASKI", "loc" : [ -89.19680099999999, 37.214575 ], "pop" : 663, "state" : "IL" } +{ "_id" : "62977", "city" : "RALEIGH", "loc" : [ -88.53236800000001, 37.825597 ], "pop" : 817, "state" : "IL" } +{ "_id" : "62979", "city" : "RIDGWAY", "loc" : [ -88.261202, 37.804242 ], "pop" : 1686, "state" : "IL" } +{ "_id" : "62982", "city" : "ROSICLARE", "loc" : [ -88.346189, 37.423987 ], "pop" : 1422, "state" : "IL" } +{ "_id" : "62983", "city" : "ROYALTON", "loc" : [ -89.114149, 37.879033 ], "pop" : 1344, "state" : "IL" } +{ "_id" : "62984", "city" : "SHAWNEETOWN", "loc" : [ -88.17850300000001, 37.713188 ], "pop" : 2400, "state" : "IL" } +{ "_id" : "62985", "city" : "ROBBS", "loc" : [ -88.76245900000001, 37.463032 ], "pop" : 507, "state" : "IL" } +{ "_id" : "62987", "city" : "STONEFORT", "loc" : [ -88.742807, 37.62992 ], "pop" : 1255, "state" : "IL" } +{ "_id" : "62988", "city" : "TAMMS", "loc" : [ -89.276346, 37.234493 ], "pop" : 2020, "state" : "IL" } +{ "_id" : "62990", "city" : "GALE", "loc" : [ -89.396896, 37.191554 ], "pop" : 1732, "state" : "IL" } +{ "_id" : "62991", "city" : "TUNNEL HILL", "loc" : [ -88.883459, 37.573676 ], "pop" : 867, "state" : "IL" } +{ "_id" : "62992", "city" : "ULLIN", "loc" : [ -89.191137, 37.270385 ], "pop" : 787, "state" : "IL" } +{ "_id" : "62994", "city" : "VERGENNES", "loc" : [ -89.326863, 37.905128 ], "pop" : 681, "state" : "IL" } +{ "_id" : "62995", "city" : "VIENNA", "loc" : [ -88.88786899999999, 37.420541 ], "pop" : 2767, "state" : "IL" } +{ "_id" : "62996", "city" : "VILLA RIDGE", "loc" : [ -89.18252200000001, 37.157765 ], "pop" : 736, "state" : "IL" } +{ "_id" : "62997", "city" : "WILLISVILLE", "loc" : [ -89.578487, 37.982142 ], "pop" : 912, "state" : "IL" } +{ "_id" : "62998", "city" : "WOLF LAKE", "loc" : [ -89.44076099999999, 37.511985 ], "pop" : 533, "state" : "IL" } +{ "_id" : "62999", "city" : "ZEIGLER", "loc" : [ -89.06026, 37.906923 ], "pop" : 2502, "state" : "IL" } +{ "_id" : "63005", "city" : "CHESTERFIELD", "loc" : [ -90.61418500000001, 38.631832 ], "pop" : 7770, "state" : "MO" } +{ "_id" : "63010", "city" : "ARNOLD", "loc" : [ -90.387046, 38.430484 ], "pop" : 29195, "state" : "MO" } +{ "_id" : "63011", "city" : "MANCHESTER", "loc" : [ -90.55213000000001, 38.604132 ], "pop" : 36722, "state" : "MO" } +{ "_id" : "63012", "city" : "BARNHART", "loc" : [ -90.41417, 38.338425 ], "pop" : 7689, "state" : "MO" } +{ "_id" : "63013", "city" : "BEAUFORT", "loc" : [ -91.170929, 38.429352 ], "pop" : 460, "state" : "MO" } +{ "_id" : "63014", "city" : "BERGER", "loc" : [ -91.337412, 38.644449 ], "pop" : 1092, "state" : "MO" } +{ "_id" : "63015", "city" : "CATAWISSA", "loc" : [ -90.761703, 38.436161 ], "pop" : 831, "state" : "MO" } +{ "_id" : "63016", "city" : "CEDAR HILL", "loc" : [ -90.649777, 38.357319 ], "pop" : 7211, "state" : "MO" } +{ "_id" : "63017", "city" : "TOWN AND COUNTRY", "loc" : [ -90.53968999999999, 38.647241 ], "pop" : 40848, "state" : "MO" } +{ "_id" : "63019", "city" : "CRYSTAL CITY", "loc" : [ -90.382525, 38.23002 ], "pop" : 4112, "state" : "MO" } +{ "_id" : "63020", "city" : "DE SOTO", "loc" : [ -90.554621, 38.120421 ], "pop" : 13331, "state" : "MO" } +{ "_id" : "63021", "city" : "BALLWIN", "loc" : [ -90.525527, 38.577032 ], "pop" : 46397, "state" : "MO" } +{ "_id" : "63023", "city" : "DITTMER", "loc" : [ -90.691101, 38.315465 ], "pop" : 2410, "state" : "MO" } +{ "_id" : "63025", "city" : "CRESCENT", "loc" : [ -90.626277, 38.484832 ], "pop" : 6053, "state" : "MO" } +{ "_id" : "63026", "city" : "FENTON", "loc" : [ -90.468299, 38.501489 ], "pop" : 38020, "state" : "MO" } +{ "_id" : "63028", "city" : "FESTUS", "loc" : [ -90.42859, 38.187889 ], "pop" : 22497, "state" : "MO" } +{ "_id" : "63030", "city" : "FLETCHER", "loc" : [ -90.73445599999999, 38.180141 ], "pop" : 241, "state" : "MO" } +{ "_id" : "63031", "city" : "FLORISSANT", "loc" : [ -90.340097, 38.806865 ], "pop" : 52659, "state" : "MO" } +{ "_id" : "63033", "city" : "FLORISSANT", "loc" : [ -90.283062, 38.794711 ], "pop" : 44480, "state" : "MO" } +{ "_id" : "63034", "city" : "FLORISSANT", "loc" : [ -90.293617, 38.833841 ], "pop" : 13972, "state" : "MO" } +{ "_id" : "63036", "city" : "FRENCH VILLAGE", "loc" : [ -90.400507, 37.996101 ], "pop" : 697, "state" : "MO" } +{ "_id" : "63037", "city" : "GERALD", "loc" : [ -91.29306200000001, 38.350719 ], "pop" : 4664, "state" : "MO" } +{ "_id" : "63038", "city" : "GLENCOE", "loc" : [ -90.64397099999999, 38.5745 ], "pop" : 6093, "state" : "MO" } +{ "_id" : "63039", "city" : "GRAY SUMMIT", "loc" : [ -90.829184, 38.503044 ], "pop" : 752, "state" : "MO" } +{ "_id" : "63040", "city" : "GROVER", "loc" : [ -90.646112, 38.573316 ], "pop" : 497, "state" : "MO" } +{ "_id" : "63042", "city" : "HAZELWOOD", "loc" : [ -90.36692499999999, 38.780875 ], "pop" : 20004, "state" : "MO" } +{ "_id" : "63043", "city" : "MARYLAND HEIGHTS", "loc" : [ -90.44740299999999, 38.722896 ], "pop" : 21268, "state" : "MO" } +{ "_id" : "63044", "city" : "BRIDGETON", "loc" : [ -90.416101, 38.750627 ], "pop" : 17695, "state" : "MO" } +{ "_id" : "63045", "city" : "BRIDGETON", "loc" : [ -90.458062, 38.7561 ], "pop" : 0, "state" : "MO" } +{ "_id" : "63048", "city" : "HERCULANEUM", "loc" : [ -90.387095, 38.260087 ], "pop" : 2490, "state" : "MO" } +{ "_id" : "63049", "city" : "HIGH RIDGE", "loc" : [ -90.528127, 38.472783 ], "pop" : 12915, "state" : "MO" } +{ "_id" : "63050", "city" : "HILLSBORO", "loc" : [ -90.57819600000001, 38.258582 ], "pop" : 14095, "state" : "MO" } +{ "_id" : "63051", "city" : "HOUSE SPRINGS", "loc" : [ -90.55753900000001, 38.413068 ], "pop" : 10035, "state" : "MO" } +{ "_id" : "63052", "city" : "ANTONIA", "loc" : [ -90.431134, 38.392733 ], "pop" : 17913, "state" : "MO" } +{ "_id" : "63055", "city" : "LABADIE", "loc" : [ -90.876966, 38.520031 ], "pop" : 498, "state" : "MO" } +{ "_id" : "63056", "city" : "LESLIE", "loc" : [ -91.19516400000001, 38.458228 ], "pop" : 1238, "state" : "MO" } +{ "_id" : "63060", "city" : "LONEDELL", "loc" : [ -90.822216, 38.274982 ], "pop" : 1153, "state" : "MO" } +{ "_id" : "63061", "city" : "LUEBBERING", "loc" : [ -90.802713, 38.261499 ], "pop" : 224, "state" : "MO" } +{ "_id" : "63068", "city" : "NEW HAVEN", "loc" : [ -91.22905, 38.573995 ], "pop" : 4353, "state" : "MO" } +{ "_id" : "63069", "city" : "PACIFIC", "loc" : [ -90.747968, 38.492168 ], "pop" : 12874, "state" : "MO" } +{ "_id" : "63070", "city" : "PEVELY", "loc" : [ -90.411075, 38.279911 ], "pop" : 5221, "state" : "MO" } +{ "_id" : "63071", "city" : "RICHWOODS", "loc" : [ -90.83099, 38.149639 ], "pop" : 1079, "state" : "MO" } +{ "_id" : "63072", "city" : "ROBERTSVILLE", "loc" : [ -90.801619, 38.381602 ], "pop" : 4250, "state" : "MO" } +{ "_id" : "63074", "city" : "SAINT ANN", "loc" : [ -90.38641800000001, 38.725928 ], "pop" : 16528, "state" : "MO" } +{ "_id" : "63077", "city" : "SAINT CLAIR", "loc" : [ -90.971346, 38.329927 ], "pop" : 10668, "state" : "MO" } +{ "_id" : "63080", "city" : "SULLIVAN", "loc" : [ -91.156662, 38.230706 ], "pop" : 7541, "state" : "MO" } +{ "_id" : "63084", "city" : "UNION", "loc" : [ -91.020596, 38.445629 ], "pop" : 14183, "state" : "MO" } +{ "_id" : "63088", "city" : "VALLEY PARK", "loc" : [ -90.492422, 38.557619 ], "pop" : 5014, "state" : "MO" } +{ "_id" : "63089", "city" : "VILLA RIDGE", "loc" : [ -90.882198, 38.460108 ], "pop" : 4954, "state" : "MO" } +{ "_id" : "63090", "city" : "WASHINGTON", "loc" : [ -91.019346, 38.545851 ], "pop" : 15437, "state" : "MO" } +{ "_id" : "63091", "city" : "ROSEBUD", "loc" : [ -91.397407, 38.385301 ], "pop" : 607, "state" : "MO" } +{ "_id" : "63101", "city" : "SAINT LOUIS", "loc" : [ -90.19131299999999, 38.634616 ], "pop" : 931, "state" : "MO" } +{ "_id" : "63102", "city" : "SAINT LOUIS", "loc" : [ -90.18736, 38.630803 ], "pop" : 731, "state" : "MO" } +{ "_id" : "63103", "city" : "SAINT LOUIS", "loc" : [ -90.216444, 38.633176 ], "pop" : 6710, "state" : "MO" } +{ "_id" : "63104", "city" : "SAINT LOUIS", "loc" : [ -90.218512, 38.612819 ], "pop" : 20885, "state" : "MO" } +{ "_id" : "63105", "city" : "CLAYTON", "loc" : [ -90.324189, 38.642574 ], "pop" : 15732, "state" : "MO" } +{ "_id" : "63106", "city" : "SAINT LOUIS", "loc" : [ -90.208198, 38.644246 ], "pop" : 15156, "state" : "MO" } +{ "_id" : "63107", "city" : "SAINT LOUIS", "loc" : [ -90.21249, 38.664522 ], "pop" : 23263, "state" : "MO" } +{ "_id" : "63108", "city" : "SAINT LOUIS", "loc" : [ -90.254397, 38.644526 ], "pop" : 20993, "state" : "MO" } +{ "_id" : "63109", "city" : "SAINT LOUIS", "loc" : [ -90.292918, 38.585452 ], "pop" : 30029, "state" : "MO" } +{ "_id" : "63110", "city" : "SAINT LOUIS", "loc" : [ -90.256381, 38.618534 ], "pop" : 23697, "state" : "MO" } +{ "_id" : "63111", "city" : "SAINT LOUIS", "loc" : [ -90.24945200000001, 38.563349 ], "pop" : 22733, "state" : "MO" } +{ "_id" : "63112", "city" : "SAINT LOUIS", "loc" : [ -90.28187, 38.661619 ], "pop" : 28841, "state" : "MO" } +{ "_id" : "63113", "city" : "SAINT LOUIS", "loc" : [ -90.249633, 38.65896 ], "pop" : 23360, "state" : "MO" } +{ "_id" : "63114", "city" : "OVERLAND", "loc" : [ -90.363304, 38.704425 ], "pop" : 40522, "state" : "MO" } +{ "_id" : "63115", "city" : "SAINT LOUIS", "loc" : [ -90.238478, 38.675618 ], "pop" : 30748, "state" : "MO" } +{ "_id" : "63116", "city" : "SAINT LOUIS", "loc" : [ -90.26254299999999, 38.581356 ], "pop" : 49014, "state" : "MO" } +{ "_id" : "63117", "city" : "RICHMOND HEIGHTS", "loc" : [ -90.324817, 38.629202 ], "pop" : 10263, "state" : "MO" } +{ "_id" : "63118", "city" : "SAINT LOUIS", "loc" : [ -90.23091100000001, 38.594265 ], "pop" : 33259, "state" : "MO" } +{ "_id" : "63119", "city" : "WEBSTER GROVES", "loc" : [ -90.350807, 38.588853 ], "pop" : 33698, "state" : "MO" } +{ "_id" : "63120", "city" : "SAINT LOUIS", "loc" : [ -90.25945, 38.690914 ], "pop" : 17815, "state" : "MO" } +{ "_id" : "63121", "city" : "NORMANDY", "loc" : [ -90.296719, 38.705086 ], "pop" : 31649, "state" : "MO" } +{ "_id" : "63122", "city" : "KIRKWOOD", "loc" : [ -90.410042, 38.58486 ], "pop" : 39452, "state" : "MO" } +{ "_id" : "63123", "city" : "AFFTON", "loc" : [ -90.325304, 38.550594 ], "pop" : 47127, "state" : "MO" } +{ "_id" : "63124", "city" : "LADUE", "loc" : [ -90.375468, 38.642383 ], "pop" : 9517, "state" : "MO" } +{ "_id" : "63125", "city" : "LEMAY", "loc" : [ -90.29590899999999, 38.521899 ], "pop" : 33874, "state" : "MO" } +{ "_id" : "63126", "city" : "SAPPINGTON", "loc" : [ -90.37867900000001, 38.550349 ], "pop" : 16311, "state" : "MO" } +{ "_id" : "63127", "city" : "SAPPINGTON", "loc" : [ -90.405967, 38.540369 ], "pop" : 4770, "state" : "MO" } +{ "_id" : "63128", "city" : "SAPPINGTON", "loc" : [ -90.372275, 38.498285 ], "pop" : 28366, "state" : "MO" } +{ "_id" : "63129", "city" : "SOUTH COUNTY", "loc" : [ -90.32138999999999, 38.468864 ], "pop" : 45920, "state" : "MO" } +{ "_id" : "63130", "city" : "UNIVERSITY CITY", "loc" : [ -90.321896, 38.663941 ], "pop" : 33986, "state" : "MO" } +{ "_id" : "63131", "city" : "DES PERES", "loc" : [ -90.44264, 38.612479 ], "pop" : 16955, "state" : "MO" } +{ "_id" : "63132", "city" : "OLIVETTE", "loc" : [ -90.369642, 38.672823 ], "pop" : 15193, "state" : "MO" } +{ "_id" : "63133", "city" : "SAINT LOUIS", "loc" : [ -90.30327200000001, 38.6779 ], "pop" : 11141, "state" : "MO" } +{ "_id" : "63134", "city" : "BERKELEY", "loc" : [ -90.337834, 38.739614 ], "pop" : 18068, "state" : "MO" } +{ "_id" : "63135", "city" : "FERGUSON", "loc" : [ -90.302241, 38.748429 ], "pop" : 23173, "state" : "MO" } +{ "_id" : "63136", "city" : "JENNINGS", "loc" : [ -90.260189, 38.738878 ], "pop" : 54994, "state" : "MO" } +{ "_id" : "63137", "city" : "NORTH COUNTY", "loc" : [ -90.217778, 38.74885 ], "pop" : 21055, "state" : "MO" } +{ "_id" : "63138", "city" : "NORTH COUNTY", "loc" : [ -90.21158200000001, 38.787041 ], "pop" : 20801, "state" : "MO" } +{ "_id" : "63139", "city" : "SAINT LOUIS", "loc" : [ -90.292045, 38.610776 ], "pop" : 25310, "state" : "MO" } +{ "_id" : "63140", "city" : "BERKELEY", "loc" : [ -90.322846, 38.738482 ], "pop" : 2478, "state" : "MO" } +{ "_id" : "63141", "city" : "CREVE COEUR", "loc" : [ -90.457072, 38.661741 ], "pop" : 20120, "state" : "MO" } +{ "_id" : "63143", "city" : "MAPLEWOOD", "loc" : [ -90.31961099999999, 38.613116 ], "pop" : 12025, "state" : "MO" } +{ "_id" : "63144", "city" : "BRENTWOOD", "loc" : [ -90.350944, 38.620839 ], "pop" : 9770, "state" : "MO" } +{ "_id" : "63146", "city" : "WEST COUNTY", "loc" : [ -90.448251, 38.688418 ], "pop" : 29946, "state" : "MO" } +{ "_id" : "63147", "city" : "SAINT LOUIS", "loc" : [ -90.237512, 38.713889 ], "pop" : 13186, "state" : "MO" } +{ "_id" : "63301", "city" : "SAINT CHARLES", "loc" : [ -90.506503, 38.801424 ], "pop" : 47255, "state" : "MO" } +{ "_id" : "63303", "city" : "SAINT CHARLES", "loc" : [ -90.547059, 38.762237 ], "pop" : 40675, "state" : "MO" } +{ "_id" : "63304", "city" : "SAINT CHARLES", "loc" : [ -90.62344299999999, 38.737769 ], "pop" : 27477, "state" : "MO" } +{ "_id" : "63330", "city" : "ANNADA", "loc" : [ -90.822355, 39.255758 ], "pop" : 199, "state" : "MO" } +{ "_id" : "63332", "city" : "AUGUSTA", "loc" : [ -90.881471, 38.572767 ], "pop" : 302, "state" : "MO" } +{ "_id" : "63333", "city" : "BELLFLOWER", "loc" : [ -91.34891500000001, 39.0012 ], "pop" : 689, "state" : "MO" } +{ "_id" : "63334", "city" : "BOWLING GREEN", "loc" : [ -91.19623199999999, 39.334639 ], "pop" : 5258, "state" : "MO" } +{ "_id" : "63336", "city" : "CLARKSVILLE", "loc" : [ -90.936205, 39.346477 ], "pop" : 1195, "state" : "MO" } +{ "_id" : "63339", "city" : "CURRYVILLE", "loc" : [ -91.349301, 39.325702 ], "pop" : 1604, "state" : "MO" } +{ "_id" : "63341", "city" : "DEFIANCE", "loc" : [ -90.830231, 38.661557 ], "pop" : 2861, "state" : "MO" } +{ "_id" : "63343", "city" : "ELSBERRY", "loc" : [ -90.815956, 39.158953 ], "pop" : 3739, "state" : "MO" } +{ "_id" : "63344", "city" : "EOLIA", "loc" : [ -91.009322, 39.243097 ], "pop" : 533, "state" : "MO" } +{ "_id" : "63345", "city" : "FARBER", "loc" : [ -91.579843, 39.27424 ], "pop" : 546, "state" : "MO" } +{ "_id" : "63347", "city" : "FOLEY", "loc" : [ -90.777468, 39.053019 ], "pop" : 2518, "state" : "MO" } +{ "_id" : "63348", "city" : "FORISTELL", "loc" : [ -90.93432799999999, 38.762557 ], "pop" : 2993, "state" : "MO" } +{ "_id" : "63349", "city" : "HAWK POINT", "loc" : [ -91.121067, 38.976576 ], "pop" : 1550, "state" : "MO" } +{ "_id" : "63350", "city" : "HIGH HILL", "loc" : [ -91.37147299999999, 38.890238 ], "pop" : 614, "state" : "MO" } +{ "_id" : "63351", "city" : "JONESBURG", "loc" : [ -91.30193, 38.871658 ], "pop" : 1055, "state" : "MO" } +{ "_id" : "63352", "city" : "LADDONIA", "loc" : [ -91.689348, 39.259328 ], "pop" : 1023, "state" : "MO" } +{ "_id" : "63353", "city" : "LOUISIANA", "loc" : [ -91.066385, 39.43359 ], "pop" : 5428, "state" : "MO" } +{ "_id" : "63357", "city" : "LAKE SHERWOOD", "loc" : [ -91.055459, 38.648619 ], "pop" : 3690, "state" : "MO" } +{ "_id" : "63359", "city" : "MIDDLETOWN", "loc" : [ -91.38731199999999, 39.105494 ], "pop" : 853, "state" : "MO" } +{ "_id" : "63361", "city" : "MONTGOMERY CITY", "loc" : [ -91.508486, 38.983949 ], "pop" : 3160, "state" : "MO" } +{ "_id" : "63362", "city" : "MOSCOW MILLS", "loc" : [ -90.96300100000001, 38.922927 ], "pop" : 3538, "state" : "MO" } +{ "_id" : "63363", "city" : "NEW FLORENCE", "loc" : [ -91.490861, 38.902309 ], "pop" : 1745, "state" : "MO" } +{ "_id" : "63364", "city" : "NEW HARTFORD", "loc" : [ -91.292984, 39.188103 ], "pop" : 503, "state" : "MO" } +{ "_id" : "63366", "city" : "SAINT PAUL", "loc" : [ -90.720159, 38.800101 ], "pop" : 28243, "state" : "MO" } +{ "_id" : "63367", "city" : "LAKE SAINT LOUIS", "loc" : [ -90.78540700000001, 38.79355 ], "pop" : 7785, "state" : "MO" } +{ "_id" : "63369", "city" : "OLD MONROE", "loc" : [ -90.77819599999999, 38.934581 ], "pop" : 1591, "state" : "MO" } +{ "_id" : "63370", "city" : "OLNEY", "loc" : [ -91.211314, 39.087509 ], "pop" : 351, "state" : "MO" } +{ "_id" : "63371", "city" : "PAYNESVILLE", "loc" : [ -90.907268, 39.258679 ], "pop" : 182, "state" : "MO" } +{ "_id" : "63373", "city" : "PORTAGE DES SIOU", "loc" : [ -90.353115, 38.927629 ], "pop" : 777, "state" : "MO" } +{ "_id" : "63376", "city" : "SAINT PETERS", "loc" : [ -90.622765, 38.78024 ], "pop" : 43133, "state" : "MO" } +{ "_id" : "63377", "city" : "SILEX", "loc" : [ -91.03698799999999, 39.116617 ], "pop" : 2913, "state" : "MO" } +{ "_id" : "63379", "city" : "TROY", "loc" : [ -90.96244900000001, 39.001212 ], "pop" : 7636, "state" : "MO" } +{ "_id" : "63381", "city" : "TRUXTON", "loc" : [ -91.21261800000001, 38.967002 ], "pop" : 794, "state" : "MO" } +{ "_id" : "63382", "city" : "VANDALIA", "loc" : [ -91.488299, 39.294937 ], "pop" : 3441, "state" : "MO" } +{ "_id" : "63383", "city" : "WARRENTON", "loc" : [ -91.174047, 38.805042 ], "pop" : 9464, "state" : "MO" } +{ "_id" : "63384", "city" : "WELLSVILLE", "loc" : [ -91.564519, 39.076482 ], "pop" : 1899, "state" : "MO" } +{ "_id" : "63385", "city" : "WENTZVILLE", "loc" : [ -90.85344000000001, 38.801963 ], "pop" : 10238, "state" : "MO" } +{ "_id" : "63386", "city" : "WEST ALTON", "loc" : [ -90.23836300000001, 38.875796 ], "pop" : 1172, "state" : "MO" } +{ "_id" : "63388", "city" : "WILLIAMSBURG", "loc" : [ -91.679188, 38.898143 ], "pop" : 228, "state" : "MO" } +{ "_id" : "63389", "city" : "WINFIELD", "loc" : [ -90.821319, 38.989727 ], "pop" : 4791, "state" : "MO" } +{ "_id" : "63390", "city" : "WRIGHT CITY", "loc" : [ -91.03292999999999, 38.809677 ], "pop" : 5852, "state" : "MO" } +{ "_id" : "63401", "city" : "HANNIBAL", "loc" : [ -91.38387, 39.70636 ], "pop" : 20086, "state" : "MO" } +{ "_id" : "63430", "city" : "ALEXANDRIA", "loc" : [ -91.51543700000001, 40.344514 ], "pop" : 753, "state" : "MO" } +{ "_id" : "63431", "city" : "ANABEL", "loc" : [ -92.351142, 39.736793 ], "pop" : 289, "state" : "MO" } +{ "_id" : "63432", "city" : "ARBELA", "loc" : [ -92.004741, 40.486299 ], "pop" : 564, "state" : "MO" } +{ "_id" : "63433", "city" : "ASHBURN", "loc" : [ -91.187651, 39.52904 ], "pop" : 235, "state" : "MO" } +{ "_id" : "63434", "city" : "BETHEL", "loc" : [ -92.03161900000001, 39.892199 ], "pop" : 377, "state" : "MO" } +{ "_id" : "63435", "city" : "CANTON", "loc" : [ -91.54798700000001, 40.143695 ], "pop" : 3822, "state" : "MO" } +{ "_id" : "63436", "city" : "CENTER", "loc" : [ -91.53984199999999, 39.515397 ], "pop" : 971, "state" : "MO" } +{ "_id" : "63437", "city" : "CLARENCE", "loc" : [ -92.25297, 39.736648 ], "pop" : 1600, "state" : "MO" } +{ "_id" : "63438", "city" : "DURHAM", "loc" : [ -91.67041500000001, 39.962486 ], "pop" : 548, "state" : "MO" } +{ "_id" : "63439", "city" : "EMDEN", "loc" : [ -91.880926, 39.85013 ], "pop" : 364, "state" : "MO" } +{ "_id" : "63440", "city" : "EWING", "loc" : [ -91.721627, 39.996237 ], "pop" : 1142, "state" : "MO" } +{ "_id" : "63441", "city" : "FRANKFORD", "loc" : [ -91.30308599999999, 39.489246 ], "pop" : 831, "state" : "MO" } +{ "_id" : "63443", "city" : "HUNNEWELL", "loc" : [ -91.88323099999999, 39.701831 ], "pop" : 528, "state" : "MO" } +{ "_id" : "63445", "city" : "KAHOKA", "loc" : [ -91.725033, 40.426576 ], "pop" : 3922, "state" : "MO" } +{ "_id" : "63446", "city" : "KNOX CITY", "loc" : [ -92.00770300000001, 40.138357 ], "pop" : 547, "state" : "MO" } +{ "_id" : "63447", "city" : "LA BELLE", "loc" : [ -91.917125, 40.116383 ], "pop" : 893, "state" : "MO" } +{ "_id" : "63448", "city" : "LA GRANGE", "loc" : [ -91.518247, 40.039126 ], "pop" : 1715, "state" : "MO" } +{ "_id" : "63450", "city" : "LENTNER", "loc" : [ -92.148916, 39.712269 ], "pop" : 198, "state" : "MO" } +{ "_id" : "63451", "city" : "LEONARD", "loc" : [ -92.19467899999999, 39.907577 ], "pop" : 312, "state" : "MO" } +{ "_id" : "63452", "city" : "LEWISTOWN", "loc" : [ -91.815663, 40.086666 ], "pop" : 824, "state" : "MO" } +{ "_id" : "63453", "city" : "LURAY", "loc" : [ -91.891227, 40.493096 ], "pop" : 523, "state" : "MO" } +{ "_id" : "63454", "city" : "MAYWOOD", "loc" : [ -91.614769, 39.933289 ], "pop" : 939, "state" : "MO" } +{ "_id" : "63456", "city" : "MONROE CITY", "loc" : [ -91.722999, 39.654586 ], "pop" : 4039, "state" : "MO" } +{ "_id" : "63457", "city" : "MONTICELLO", "loc" : [ -91.712267, 40.10402 ], "pop" : 515, "state" : "MO" } +{ "_id" : "63458", "city" : "NEWARK", "loc" : [ -91.99236000000001, 39.997428 ], "pop" : 195, "state" : "MO" } +{ "_id" : "63459", "city" : "NEW LONDON", "loc" : [ -91.39599, 39.591672 ], "pop" : 4801, "state" : "MO" } +{ "_id" : "63460", "city" : "NOVELTY", "loc" : [ -92.24378299999999, 40.035997 ], "pop" : 542, "state" : "MO" } +{ "_id" : "63461", "city" : "PALMYRA", "loc" : [ -91.536817, 39.791309 ], "pop" : 5344, "state" : "MO" } +{ "_id" : "63462", "city" : "PERRY", "loc" : [ -91.664125, 39.420721 ], "pop" : 1268, "state" : "MO" } +{ "_id" : "63463", "city" : "PHILADELPHIA", "loc" : [ -91.753803, 39.835931 ], "pop" : 674, "state" : "MO" } +{ "_id" : "63464", "city" : "PLEVNA", "loc" : [ -92.111716, 39.992561 ], "pop" : 149, "state" : "MO" } +{ "_id" : "63466", "city" : "SAINT PATRICK", "loc" : [ -91.65467700000001, 40.319851 ], "pop" : 455, "state" : "MO" } +{ "_id" : "63468", "city" : "SHELBINA", "loc" : [ -92.03706, 39.694718 ], "pop" : 2714, "state" : "MO" } +{ "_id" : "63469", "city" : "SHELBYVILLE", "loc" : [ -92.04978199999999, 39.810792 ], "pop" : 929, "state" : "MO" } +{ "_id" : "63470", "city" : "STEFFENVILLE", "loc" : [ -91.85945, 39.993976 ], "pop" : 310, "state" : "MO" } +{ "_id" : "63471", "city" : "TAYLOR", "loc" : [ -91.527834, 39.914486 ], "pop" : 667, "state" : "MO" } +{ "_id" : "63472", "city" : "WAYLAND", "loc" : [ -91.60786400000001, 40.442574 ], "pop" : 1252, "state" : "MO" } +{ "_id" : "63473", "city" : "WILLIAMSTOWN", "loc" : [ -91.854809, 40.21559 ], "pop" : 343, "state" : "MO" } +{ "_id" : "63474", "city" : "WYACONDA", "loc" : [ -91.907077, 40.372083 ], "pop" : 642, "state" : "MO" } +{ "_id" : "63501", "city" : "KIRKSVILLE", "loc" : [ -92.585634, 40.190765 ], "pop" : 20717, "state" : "MO" } +{ "_id" : "63530", "city" : "ATLANTA", "loc" : [ -92.475019, 39.914639 ], "pop" : 977, "state" : "MO" } +{ "_id" : "63531", "city" : "BARING", "loc" : [ -92.23107400000001, 40.250864 ], "pop" : 440, "state" : "MO" } +{ "_id" : "63532", "city" : "BEVIER", "loc" : [ -92.561925, 39.749707 ], "pop" : 1273, "state" : "MO" } +{ "_id" : "63533", "city" : "BRASHEAR", "loc" : [ -92.43325299999999, 40.195891 ], "pop" : 1444, "state" : "MO" } +{ "_id" : "63534", "city" : "CALLAO", "loc" : [ -92.635144, 39.744849 ], "pop" : 878, "state" : "MO" } +{ "_id" : "63535", "city" : "COATSVILLE", "loc" : [ -92.638801, 40.566473 ], "pop" : 148, "state" : "MO" } +{ "_id" : "63536", "city" : "DOWNING", "loc" : [ -92.391762, 40.479828 ], "pop" : 953, "state" : "MO" } +{ "_id" : "63537", "city" : "EDINA", "loc" : [ -92.145549, 40.179452 ], "pop" : 2101, "state" : "MO" } +{ "_id" : "63538", "city" : "ELMER", "loc" : [ -92.642413, 39.941456 ], "pop" : 308, "state" : "MO" } +{ "_id" : "63539", "city" : "ETHEL", "loc" : [ -92.766396, 39.914605 ], "pop" : 374, "state" : "MO" } +{ "_id" : "63540", "city" : "GIBBS", "loc" : [ -92.443495, 40.083962 ], "pop" : 389, "state" : "MO" } +{ "_id" : "63541", "city" : "GLENWOOD", "loc" : [ -92.58864199999999, 40.514935 ], "pop" : 333, "state" : "MO" } +{ "_id" : "63543", "city" : "GORIN", "loc" : [ -92.01397, 40.362217 ], "pop" : 428, "state" : "MO" } +{ "_id" : "63544", "city" : "GREEN CASTLE", "loc" : [ -92.877966, 40.270325 ], "pop" : 335, "state" : "MO" } +{ "_id" : "63545", "city" : "GREEN CITY", "loc" : [ -92.953244, 40.260125 ], "pop" : 1189, "state" : "MO" } +{ "_id" : "63546", "city" : "GREENTOP", "loc" : [ -92.55667, 40.344593 ], "pop" : 859, "state" : "MO" } +{ "_id" : "63547", "city" : "HURDLAND", "loc" : [ -92.279066, 40.160909 ], "pop" : 508, "state" : "MO" } +{ "_id" : "63548", "city" : "LANCASTER", "loc" : [ -92.526403, 40.525265 ], "pop" : 1060, "state" : "MO" } +{ "_id" : "63549", "city" : "LA PLATA", "loc" : [ -92.50766900000001, 40.020831 ], "pop" : 2022, "state" : "MO" } +{ "_id" : "63551", "city" : "LIVONIA", "loc" : [ -92.724084, 40.511237 ], "pop" : 398, "state" : "MO" } +{ "_id" : "63552", "city" : "MACON", "loc" : [ -92.462163, 39.748089 ], "pop" : 7557, "state" : "MO" } +{ "_id" : "63555", "city" : "MEMPHIS", "loc" : [ -92.18508300000001, 40.46191 ], "pop" : 3546, "state" : "MO" } +{ "_id" : "63556", "city" : "MILAN", "loc" : [ -93.136149, 40.184435 ], "pop" : 3171, "state" : "MO" } +{ "_id" : "63557", "city" : "NEW BOSTON", "loc" : [ -92.91596699999999, 39.933234 ], "pop" : 184, "state" : "MO" } +{ "_id" : "63558", "city" : "NEW CAMBRIA", "loc" : [ -92.769469, 39.75509 ], "pop" : 953, "state" : "MO" } +{ "_id" : "63559", "city" : "NOVINGER", "loc" : [ -92.717236, 40.268513 ], "pop" : 1770, "state" : "MO" } +{ "_id" : "63560", "city" : "POLLOCK", "loc" : [ -93.11150600000001, 40.33852 ], "pop" : 638, "state" : "MO" } +{ "_id" : "63561", "city" : "QUEEN CITY", "loc" : [ -92.56626300000001, 40.415175 ], "pop" : 1269, "state" : "MO" } +{ "_id" : "63563", "city" : "RUTLEDGE", "loc" : [ -92.097559, 40.328984 ], "pop" : 284, "state" : "MO" } +{ "_id" : "63565", "city" : "UNIONVILLE", "loc" : [ -92.99509399999999, 40.481464 ], "pop" : 3515, "state" : "MO" } +{ "_id" : "63566", "city" : "WINIGAN", "loc" : [ -92.93007, 40.03706 ], "pop" : 335, "state" : "MO" } +{ "_id" : "63567", "city" : "WORTHINGTON", "loc" : [ -92.740139, 40.424001 ], "pop" : 438, "state" : "MO" } +{ "_id" : "63601", "city" : "DESLOGE", "loc" : [ -90.52735, 37.85555 ], "pop" : 14716, "state" : "MO" } +{ "_id" : "63620", "city" : "ANNAPOLIS", "loc" : [ -90.67023500000001, 37.39809 ], "pop" : 1282, "state" : "MO" } +{ "_id" : "63621", "city" : "ARCADIA", "loc" : [ -90.59276800000001, 37.570054 ], "pop" : 896, "state" : "MO" } +{ "_id" : "63622", "city" : "BELGRADE", "loc" : [ -90.86130799999999, 37.78886 ], "pop" : 1000, "state" : "MO" } +{ "_id" : "63623", "city" : "BELLEVIEW", "loc" : [ -90.799075, 37.681981 ], "pop" : 1206, "state" : "MO" } +{ "_id" : "63624", "city" : "DESLOGE", "loc" : [ -90.620732, 37.769865 ], "pop" : 2282, "state" : "MO" } +{ "_id" : "63625", "city" : "BLACK", "loc" : [ -90.99173500000001, 37.547275 ], "pop" : 671, "state" : "MO" } +{ "_id" : "63626", "city" : "BLACKWELL", "loc" : [ -90.70953799999999, 38.071694 ], "pop" : 1012, "state" : "MO" } +{ "_id" : "63627", "city" : "BLOOMSDALE", "loc" : [ -90.280548, 38.045112 ], "pop" : 3035, "state" : "MO" } +{ "_id" : "63628", "city" : "BONNE TERRE", "loc" : [ -90.525052, 37.931423 ], "pop" : 10579, "state" : "MO" } +{ "_id" : "63629", "city" : "BUNKER", "loc" : [ -91.192735, 37.477227 ], "pop" : 882, "state" : "MO" } +{ "_id" : "63630", "city" : "CADET", "loc" : [ -90.743932, 38.012534 ], "pop" : 3277, "state" : "MO" } +{ "_id" : "63631", "city" : "CALEDONIA", "loc" : [ -90.740936, 37.763881 ], "pop" : 808, "state" : "MO" } +{ "_id" : "63633", "city" : "CENTERVILLE", "loc" : [ -90.975657, 37.428537 ], "pop" : 505, "state" : "MO" } +{ "_id" : "63636", "city" : "DES ARC", "loc" : [ -90.62787, 37.29546 ], "pop" : 640, "state" : "MO" } +{ "_id" : "63637", "city" : "DOE RUN", "loc" : [ -90.496842, 37.734818 ], "pop" : 1866, "state" : "MO" } +{ "_id" : "63638", "city" : "ELLINGTON", "loc" : [ -90.958851, 37.239797 ], "pop" : 3329, "state" : "MO" } +{ "_id" : "63640", "city" : "FARMINGTON", "loc" : [ -90.40937700000001, 37.777299 ], "pop" : 19031, "state" : "MO" } +{ "_id" : "63645", "city" : "MILLCREEK", "loc" : [ -90.31052699999999, 37.543716 ], "pop" : 10043, "state" : "MO" } +{ "_id" : "63648", "city" : "IRONDALE", "loc" : [ -90.69838900000001, 37.82962 ], "pop" : 1793, "state" : "MO" } +{ "_id" : "63650", "city" : "IRON MOUNTAIN", "loc" : [ -90.63563499999999, 37.614702 ], "pop" : 5610, "state" : "MO" } +{ "_id" : "63653", "city" : "LEADWOOD", "loc" : [ -90.591007, 37.864081 ], "pop" : 1331, "state" : "MO" } +{ "_id" : "63654", "city" : "LESTERVILLE", "loc" : [ -90.842544, 37.482004 ], "pop" : 733, "state" : "MO" } +{ "_id" : "63655", "city" : "MARQUAND", "loc" : [ -90.174092, 37.427403 ], "pop" : 1296, "state" : "MO" } +{ "_id" : "63656", "city" : "MIDDLE BROOK", "loc" : [ -90.67350399999999, 37.670161 ], "pop" : 509, "state" : "MO" } +{ "_id" : "63660", "city" : "MINERAL POINT", "loc" : [ -90.719324, 37.915555 ], "pop" : 4032, "state" : "MO" } +{ "_id" : "63662", "city" : "PATTON", "loc" : [ -90.050045, 37.473347 ], "pop" : 1622, "state" : "MO" } +{ "_id" : "63664", "city" : "POTOSI", "loc" : [ -90.84146699999999, 37.954942 ], "pop" : 7274, "state" : "MO" } +{ "_id" : "63665", "city" : "REDFORD", "loc" : [ -90.921994, 37.323518 ], "pop" : 407, "state" : "MO" } +{ "_id" : "63670", "city" : "LAKE FOREST ESTA", "loc" : [ -90.09604, 37.950356 ], "pop" : 9405, "state" : "MO" } +{ "_id" : "63673", "city" : "SAINT MARY", "loc" : [ -89.92926799999999, 37.914034 ], "pop" : 130, "state" : "IL" } +{ "_id" : "63675", "city" : "VULCAN", "loc" : [ -90.71060799999999, 37.305963 ], "pop" : 153, "state" : "MO" } +{ "_id" : "63701", "city" : "CAPE GIRARDEAU", "loc" : [ -89.545861, 37.31685 ], "pop" : 37993, "state" : "MO" } +{ "_id" : "63730", "city" : "ADVANCE", "loc" : [ -89.910614, 37.092219 ], "pop" : 2448, "state" : "MO" } +{ "_id" : "63732", "city" : "NEW WELLS", "loc" : [ -89.581453, 37.630633 ], "pop" : 576, "state" : "MO" } +{ "_id" : "63733", "city" : "ARAB", "loc" : [ -90.080448, 37.064804 ], "pop" : 139, "state" : "MO" } +{ "_id" : "63735", "city" : "BELL CITY", "loc" : [ -89.798417, 37.011608 ], "pop" : 1219, "state" : "MO" } +{ "_id" : "63736", "city" : "BENTON", "loc" : [ -89.56640400000001, 37.069674 ], "pop" : 3349, "state" : "MO" } +{ "_id" : "63739", "city" : "BURFORDVILLE", "loc" : [ -89.820632, 37.363231 ], "pop" : 819, "state" : "MO" } +{ "_id" : "63740", "city" : "CHAFFEE", "loc" : [ -89.64565, 37.172612 ], "pop" : 4830, "state" : "MO" } +{ "_id" : "63743", "city" : "DAISY", "loc" : [ -89.821327, 37.515064 ], "pop" : 100, "state" : "MO" } +{ "_id" : "63744", "city" : "DELTA", "loc" : [ -89.76085999999999, 37.184417 ], "pop" : 1418, "state" : "MO" } +{ "_id" : "63747", "city" : "FRIEDHEIM", "loc" : [ -89.837552, 37.566904 ], "pop" : 133, "state" : "MO" } +{ "_id" : "63748", "city" : "FROHNA", "loc" : [ -89.661903, 37.66855 ], "pop" : 1012, "state" : "MO" } +{ "_id" : "63750", "city" : "GIPSY", "loc" : [ -90.19407699999999, 37.131092 ], "pop" : 92, "state" : "MO" } +{ "_id" : "63751", "city" : "GLENALLEN", "loc" : [ -90.051495, 37.323119 ], "pop" : 572, "state" : "MO" } +{ "_id" : "63753", "city" : "GRASSY", "loc" : [ -90.160838, 37.259347 ], "pop" : 375, "state" : "MO" } +{ "_id" : "63755", "city" : "JACKSON", "loc" : [ -89.651939, 37.387885 ], "pop" : 14335, "state" : "MO" } +{ "_id" : "63760", "city" : "LEOPOLD", "loc" : [ -89.922735, 37.260903 ], "pop" : 303, "state" : "MO" } +{ "_id" : "63763", "city" : "MC GEE", "loc" : [ -90.19084700000001, 37.044139 ], "pop" : 308, "state" : "MO" } +{ "_id" : "63764", "city" : "SCOPUS", "loc" : [ -89.962732, 37.313464 ], "pop" : 5211, "state" : "MO" } +{ "_id" : "63766", "city" : "MILLERSVILLE", "loc" : [ -89.795035, 37.440138 ], "pop" : 1060, "state" : "MO" } +{ "_id" : "63769", "city" : "OAK RIDGE", "loc" : [ -89.750818, 37.525787 ], "pop" : 1184, "state" : "MO" } +{ "_id" : "63770", "city" : "OLD APPLETON", "loc" : [ -89.70709100000001, 37.583014 ], "pop" : 200, "state" : "MO" } +{ "_id" : "63771", "city" : "ORAN", "loc" : [ -89.67336400000001, 37.086977 ], "pop" : 1827, "state" : "MO" } +{ "_id" : "63775", "city" : "PERRYVILLE", "loc" : [ -89.87366400000001, 37.717437 ], "pop" : 13296, "state" : "MO" } +{ "_id" : "63780", "city" : "SCOTT CITY", "loc" : [ -89.518081, 37.20771 ], "pop" : 6340, "state" : "MO" } +{ "_id" : "63781", "city" : "SEDGEWICKVILLE", "loc" : [ -89.927246, 37.536962 ], "pop" : 772, "state" : "MO" } +{ "_id" : "63782", "city" : "STURDIVANT", "loc" : [ -90.009215, 37.071011 ], "pop" : 220, "state" : "MO" } +{ "_id" : "63783", "city" : "UNIONTOWN", "loc" : [ -89.723744, 37.610708 ], "pop" : 440, "state" : "MO" } +{ "_id" : "63785", "city" : "WHITEWATER", "loc" : [ -89.736338, 37.286495 ], "pop" : 1906, "state" : "MO" } +{ "_id" : "63786", "city" : "WITTENBERG", "loc" : [ -89.564261, 37.679256 ], "pop" : 140, "state" : "MO" } +{ "_id" : "63787", "city" : "ZALMA", "loc" : [ -90.075711, 37.13648 ], "pop" : 898, "state" : "MO" } +{ "_id" : "63801", "city" : "SIKESTON", "loc" : [ -89.58197, 36.891111 ], "pop" : 22618, "state" : "MO" } +{ "_id" : "63821", "city" : "ARBYRD", "loc" : [ -90.22835499999999, 36.050104 ], "pop" : 891, "state" : "MO" } +{ "_id" : "63822", "city" : "BERNIE", "loc" : [ -89.987758, 36.672703 ], "pop" : 3200, "state" : "MO" } +{ "_id" : "63823", "city" : "BERTRAND", "loc" : [ -89.44825899999999, 36.892746 ], "pop" : 1455, "state" : "MO" } +{ "_id" : "63825", "city" : "BLOOMFIELD", "loc" : [ -89.945564, 36.898892 ], "pop" : 5938, "state" : "MO" } +{ "_id" : "63827", "city" : "BRAGG CITY", "loc" : [ -89.87362400000001, 36.273236 ], "pop" : 711, "state" : "MO" } +{ "_id" : "63829", "city" : "CARDWELL", "loc" : [ -90.290696, 36.04345 ], "pop" : 1552, "state" : "MO" } +{ "_id" : "63830", "city" : "CARUTHERSVILLE", "loc" : [ -89.668306, 36.180237 ], "pop" : 8376, "state" : "MO" } +{ "_id" : "63833", "city" : "CATRON", "loc" : [ -89.770647, 36.687578 ], "pop" : 174, "state" : "MO" } +{ "_id" : "63834", "city" : "CHARLESTON", "loc" : [ -89.33420700000001, 36.921341 ], "pop" : 7209, "state" : "MO" } +{ "_id" : "63837", "city" : "CLARKTON", "loc" : [ -89.972852, 36.447812 ], "pop" : 1672, "state" : "MO" } +{ "_id" : "63841", "city" : "DEXTER", "loc" : [ -89.963933, 36.788458 ], "pop" : 11641, "state" : "MO" } +{ "_id" : "63845", "city" : "EAST PRAIRIE", "loc" : [ -89.372629, 36.777609 ], "pop" : 6184, "state" : "MO" } +{ "_id" : "63846", "city" : "ESSEX", "loc" : [ -89.83664899999999, 36.810859 ], "pop" : 1212, "state" : "MO" } +{ "_id" : "63848", "city" : "GIDEON", "loc" : [ -89.913546, 36.45378 ], "pop" : 1599, "state" : "MO" } +{ "_id" : "63849", "city" : "GOBLER", "loc" : [ -89.934907, 36.158987 ], "pop" : 144, "state" : "MO" } +{ "_id" : "63851", "city" : "HAYTI HEIGHTS", "loc" : [ -89.75160700000001, 36.239475 ], "pop" : 5073, "state" : "MO" } +{ "_id" : "63852", "city" : "HOLCOMB", "loc" : [ -90.02079500000001, 36.38846 ], "pop" : 1335, "state" : "MO" } +{ "_id" : "63855", "city" : "HORNERSVILLE", "loc" : [ -90.081643, 36.062694 ], "pop" : 1685, "state" : "MO" } +{ "_id" : "63857", "city" : "KENNETT", "loc" : [ -90.049057, 36.240656 ], "pop" : 12742, "state" : "MO" } +{ "_id" : "63862", "city" : "LILBOURN", "loc" : [ -89.61124100000001, 36.585313 ], "pop" : 2258, "state" : "MO" } +{ "_id" : "63863", "city" : "MALDEN", "loc" : [ -89.973679, 36.567209 ], "pop" : 6735, "state" : "MO" } +{ "_id" : "63866", "city" : "MARSTON", "loc" : [ -89.62881899999999, 36.508448 ], "pop" : 1160, "state" : "MO" } +{ "_id" : "63867", "city" : "MATTHEWS", "loc" : [ -89.57683299999999, 36.807528 ], "pop" : 2675, "state" : "MO" } +{ "_id" : "63868", "city" : "MOREHOUSE", "loc" : [ -89.685191, 36.819041 ], "pop" : 1856, "state" : "MO" } +{ "_id" : "63869", "city" : "NEW MADRID", "loc" : [ -89.53664499999999, 36.607284 ], "pop" : 4289, "state" : "MO" } +{ "_id" : "63870", "city" : "PARMA", "loc" : [ -89.818971, 36.585629 ], "pop" : 2308, "state" : "MO" } +{ "_id" : "63873", "city" : "PORTAGEVILLE", "loc" : [ -89.70023399999999, 36.427945 ], "pop" : 5400, "state" : "MO" } +{ "_id" : "63876", "city" : "SENATH", "loc" : [ -90.163224, 36.132428 ], "pop" : 2234, "state" : "MO" } +{ "_id" : "63877", "city" : "STEELE", "loc" : [ -89.834585, 36.091528 ], "pop" : 5905, "state" : "MO" } +{ "_id" : "63879", "city" : "HOMESTOWN", "loc" : [ -89.816362, 36.347215 ], "pop" : 1003, "state" : "MO" } +{ "_id" : "63901", "city" : "POPLAR BLUFF", "loc" : [ -90.416647, 36.766235 ], "pop" : 31363, "state" : "MO" } +{ "_id" : "63931", "city" : "BRIAR", "loc" : [ -90.92777, 36.639115 ], "pop" : 617, "state" : "MO" } +{ "_id" : "63932", "city" : "BROSELEY", "loc" : [ -90.240472, 36.707553 ], "pop" : 2173, "state" : "MO" } +{ "_id" : "63933", "city" : "CAMPBELL", "loc" : [ -90.082859, 36.519714 ], "pop" : 4358, "state" : "MO" } +{ "_id" : "63934", "city" : "CLUBB", "loc" : [ -90.359638, 37.2302 ], "pop" : 88, "state" : "MO" } +{ "_id" : "63935", "city" : "POYNOR", "loc" : [ -90.81953, 36.621094 ], "pop" : 7690, "state" : "MO" } +{ "_id" : "63936", "city" : "DUDLEY", "loc" : [ -90.120974, 36.810981 ], "pop" : 1061, "state" : "MO" } +{ "_id" : "63937", "city" : "ELLSINORE", "loc" : [ -90.74853, 36.945263 ], "pop" : 1573, "state" : "MO" } +{ "_id" : "63939", "city" : "FAIRDEALING", "loc" : [ -90.633515, 36.670404 ], "pop" : 617, "state" : "MO" } +{ "_id" : "63940", "city" : "FISK", "loc" : [ -90.216758, 36.783625 ], "pop" : 590, "state" : "MO" } +{ "_id" : "63941", "city" : "FREMONT", "loc" : [ -91.143984, 36.917164 ], "pop" : 570, "state" : "MO" } +{ "_id" : "63942", "city" : "GATEWOOD", "loc" : [ -91.07033300000001, 36.562608 ], "pop" : 342, "state" : "MO" } +{ "_id" : "63943", "city" : "GRANDIN", "loc" : [ -90.794175, 36.827961 ], "pop" : 2228, "state" : "MO" } +{ "_id" : "63944", "city" : "GREENVILLE", "loc" : [ -90.451362, 37.110838 ], "pop" : 1012, "state" : "MO" } +{ "_id" : "63945", "city" : "HARVIELL", "loc" : [ -90.55830400000001, 36.672318 ], "pop" : 726, "state" : "MO" } +{ "_id" : "63947", "city" : "HIRAM", "loc" : [ -90.289556, 37.228158 ], "pop" : 467, "state" : "MO" } +{ "_id" : "63950", "city" : "LODI", "loc" : [ -90.46322499999999, 37.242046 ], "pop" : 52, "state" : "MO" } +{ "_id" : "63951", "city" : "LOWNDES", "loc" : [ -90.254437, 37.134318 ], "pop" : 101, "state" : "MO" } +{ "_id" : "63952", "city" : "MILL SPRING", "loc" : [ -90.67462500000001, 37.067477 ], "pop" : 732, "state" : "MO" } +{ "_id" : "63953", "city" : "NAYLOR", "loc" : [ -90.612354, 36.584337 ], "pop" : 1390, "state" : "MO" } +{ "_id" : "63954", "city" : "NEELYVILLE", "loc" : [ -90.49949100000001, 36.571005 ], "pop" : 1556, "state" : "MO" } +{ "_id" : "63955", "city" : "OXLY", "loc" : [ -90.691973, 36.587385 ], "pop" : 596, "state" : "MO" } +{ "_id" : "63956", "city" : "PATTERSON", "loc" : [ -90.57717100000001, 37.195992 ], "pop" : 1378, "state" : "MO" } +{ "_id" : "63957", "city" : "PIEDMONT", "loc" : [ -90.69902, 37.15727 ], "pop" : 3719, "state" : "MO" } +{ "_id" : "63960", "city" : "PUXICO", "loc" : [ -90.16225799999999, 36.942163 ], "pop" : 2085, "state" : "MO" } +{ "_id" : "63961", "city" : "QULIN", "loc" : [ -90.261674, 36.581769 ], "pop" : 1646, "state" : "MO" } +{ "_id" : "63963", "city" : "SHOOK", "loc" : [ -90.30059, 37.076976 ], "pop" : 222, "state" : "MO" } +{ "_id" : "63964", "city" : "SILVA", "loc" : [ -90.437472, 37.211892 ], "pop" : 933, "state" : "MO" } +{ "_id" : "63965", "city" : "VAN BUREN", "loc" : [ -91.000681, 37.00153 ], "pop" : 2417, "state" : "MO" } +{ "_id" : "63966", "city" : "WAPPAPELLO", "loc" : [ -90.28480500000001, 36.976566 ], "pop" : 1353, "state" : "MO" } +{ "_id" : "63967", "city" : "WILLIAMSVILLE", "loc" : [ -90.48785100000001, 36.963789 ], "pop" : 1657, "state" : "MO" } +{ "_id" : "64001", "city" : "ALMA", "loc" : [ -93.54285299999999, 39.10484 ], "pop" : 718, "state" : "MO" } +{ "_id" : "64011", "city" : "BATES CITY", "loc" : [ -94.07984, 39.021887 ], "pop" : 1393, "state" : "MO" } +{ "_id" : "64012", "city" : "BELTON", "loc" : [ -94.532785, 38.816118 ], "pop" : 20208, "state" : "MO" } +{ "_id" : "64014", "city" : "BLUE SPRINGS", "loc" : [ -94.260429, 39.015186 ], "pop" : 19140, "state" : "MO" } +{ "_id" : "64015", "city" : "LAKE TAPAWINGO", "loc" : [ -94.29284800000001, 39.018378 ], "pop" : 23758, "state" : "MO" } +{ "_id" : "64016", "city" : "BUCKNER", "loc" : [ -94.206219, 39.130328 ], "pop" : 4156, "state" : "MO" } +{ "_id" : "64017", "city" : "CAMDEN", "loc" : [ -94.025913, 39.204806 ], "pop" : 641, "state" : "MO" } +{ "_id" : "64018", "city" : "CAMDEN POINT", "loc" : [ -94.744438, 39.451549 ], "pop" : 678, "state" : "MO" } +{ "_id" : "64019", "city" : "CENTERVIEW", "loc" : [ -93.870234, 38.78971 ], "pop" : 1890, "state" : "MO" } +{ "_id" : "64020", "city" : "CONCORDIA", "loc" : [ -93.581205, 38.977553 ], "pop" : 3240, "state" : "MO" } +{ "_id" : "64021", "city" : "CORDER", "loc" : [ -93.639127, 39.102401 ], "pop" : 649, "state" : "MO" } +{ "_id" : "64022", "city" : "DOVER", "loc" : [ -93.66837700000001, 39.192619 ], "pop" : 512, "state" : "MO" } +{ "_id" : "64024", "city" : "EXCELSIOR SPRING", "loc" : [ -94.223614, 39.33491 ], "pop" : 18308, "state" : "MO" } +{ "_id" : "64029", "city" : "GRAIN VALLEY", "loc" : [ -94.20874000000001, 39.027361 ], "pop" : 2865, "state" : "MO" } +{ "_id" : "64030", "city" : "GRANDVIEW", "loc" : [ -94.52054200000001, 38.881936 ], "pop" : 24926, "state" : "MO" } +{ "_id" : "64034", "city" : "LAKE WINNEBAGO", "loc" : [ -94.334767, 38.842813 ], "pop" : 5578, "state" : "MO" } +{ "_id" : "64035", "city" : "HARDIN", "loc" : [ -93.840869, 39.350433 ], "pop" : 2019, "state" : "MO" } +{ "_id" : "64036", "city" : "HENRIETTA", "loc" : [ -93.93687300000001, 39.236732 ], "pop" : 438, "state" : "MO" } +{ "_id" : "64037", "city" : "HIGGINSVILLE", "loc" : [ -93.71326500000001, 39.070504 ], "pop" : 5994, "state" : "MO" } +{ "_id" : "64040", "city" : "HOLDEN", "loc" : [ -93.98557099999999, 38.718595 ], "pop" : 3088, "state" : "MO" } +{ "_id" : "64048", "city" : "HOLT", "loc" : [ -94.368876, 39.428867 ], "pop" : 1712, "state" : "MO" } +{ "_id" : "64050", "city" : "INDEPENDENCE", "loc" : [ -94.411072, 39.098288 ], "pop" : 24188, "state" : "MO" } +{ "_id" : "64052", "city" : "INDEPENDENCE", "loc" : [ -94.449945, 39.074984 ], "pop" : 22793, "state" : "MO" } +{ "_id" : "64053", "city" : "INDEPENDENCE", "loc" : [ -94.462461, 39.105041 ], "pop" : 6152, "state" : "MO" } +{ "_id" : "64054", "city" : "SUGAR CREEK", "loc" : [ -94.441496, 39.107234 ], "pop" : 4574, "state" : "MO" } +{ "_id" : "64055", "city" : "INDEPENDENCE", "loc" : [ -94.403902, 39.054504 ], "pop" : 30654, "state" : "MO" } +{ "_id" : "64056", "city" : "INDEPENDENCE", "loc" : [ -94.35963700000001, 39.11773 ], "pop" : 14962, "state" : "MO" } +{ "_id" : "64057", "city" : "INDEPENDENCE", "loc" : [ -94.353284, 39.073099 ], "pop" : 9209, "state" : "MO" } +{ "_id" : "64058", "city" : "INDEPENDENCE", "loc" : [ -94.35152600000001, 39.141233 ], "pop" : 5752, "state" : "MO" } +{ "_id" : "64060", "city" : "KEARNEY", "loc" : [ -94.362104, 39.365175 ], "pop" : 4419, "state" : "MO" } +{ "_id" : "64061", "city" : "KINGSVILLE", "loc" : [ -94.046188, 38.817755 ], "pop" : 3447, "state" : "MO" } +{ "_id" : "64062", "city" : "LAWSON", "loc" : [ -94.19658800000001, 39.440129 ], "pop" : 4898, "state" : "MO" } +{ "_id" : "64063", "city" : "LAKE LOTAWANA", "loc" : [ -94.348744, 38.921094 ], "pop" : 30114, "state" : "MO" } +{ "_id" : "64064", "city" : "LEES SUMMIT", "loc" : [ -94.36519199999999, 38.995336 ], "pop" : 10649, "state" : "MO" } +{ "_id" : "64067", "city" : "LEXINGTON", "loc" : [ -93.871438, 39.174249 ], "pop" : 6294, "state" : "MO" } +{ "_id" : "64068", "city" : "PLEASANT VALLEY", "loc" : [ -94.43366399999999, 39.241916 ], "pop" : 25473, "state" : "MO" } +{ "_id" : "64070", "city" : "LONE JACK", "loc" : [ -94.16145299999999, 38.891837 ], "pop" : 1918, "state" : "MO" } +{ "_id" : "64071", "city" : "MAYVIEW", "loc" : [ -93.835306, 39.045898 ], "pop" : 746, "state" : "MO" } +{ "_id" : "64074", "city" : "NAPOLEON", "loc" : [ -94.070911, 39.114034 ], "pop" : 545, "state" : "MO" } +{ "_id" : "64075", "city" : "OAK GROVE", "loc" : [ -94.13994599999999, 38.998456 ], "pop" : 7851, "state" : "MO" } +{ "_id" : "64076", "city" : "ODESSA", "loc" : [ -93.975731, 38.982938 ], "pop" : 8790, "state" : "MO" } +{ "_id" : "64077", "city" : "ORRICK", "loc" : [ -94.123863, 39.211577 ], "pop" : 1186, "state" : "MO" } +{ "_id" : "64078", "city" : "PECULIAR", "loc" : [ -94.44053, 38.716453 ], "pop" : 5207, "state" : "MO" } +{ "_id" : "64079", "city" : "PLATTE CITY", "loc" : [ -94.788972, 39.360171 ], "pop" : 4280, "state" : "MO" } +{ "_id" : "64080", "city" : "PLEASANT HILL", "loc" : [ -94.243961, 38.785856 ], "pop" : 6057, "state" : "MO" } +{ "_id" : "64081", "city" : "LEES SUMMIT", "loc" : [ -94.407302, 38.914169 ], "pop" : 9637, "state" : "MO" } +{ "_id" : "64082", "city" : "LEES SUMMIT", "loc" : [ -94.394368, 38.851803 ], "pop" : 2580, "state" : "MO" } +{ "_id" : "64083", "city" : "RAYMORE", "loc" : [ -94.452893, 38.801896 ], "pop" : 8112, "state" : "MO" } +{ "_id" : "64084", "city" : "RAYVILLE", "loc" : [ -94.02840999999999, 39.385291 ], "pop" : 1727, "state" : "MO" } +{ "_id" : "64085", "city" : "RICHMOND", "loc" : [ -93.979163, 39.279298 ], "pop" : 7080, "state" : "MO" } +{ "_id" : "64088", "city" : "SIBLEY", "loc" : [ -94.19901900000001, 39.162658 ], "pop" : 1527, "state" : "MO" } +{ "_id" : "64089", "city" : "SMITHVILLE", "loc" : [ -94.55923900000001, 39.391739 ], "pop" : 3469, "state" : "MO" } +{ "_id" : "64093", "city" : "WARRENSBURG", "loc" : [ -93.727341, 38.766695 ], "pop" : 21993, "state" : "MO" } +{ "_id" : "64096", "city" : "WAVERLY", "loc" : [ -93.52565199999999, 39.205523 ], "pop" : 1036, "state" : "MO" } +{ "_id" : "64097", "city" : "WELLINGTON", "loc" : [ -93.985513, 39.125845 ], "pop" : 1167, "state" : "MO" } +{ "_id" : "64098", "city" : "WESTON", "loc" : [ -94.91445299999999, 39.445294 ], "pop" : 3269, "state" : "MO" } +{ "_id" : "64101", "city" : "KANSAS CITY", "loc" : [ -94.601849, 39.10005 ], "pop" : 0, "state" : "MO" } +{ "_id" : "64102", "city" : "KANSAS CITY", "loc" : [ -94.606596, 39.086067 ], "pop" : 0, "state" : "MO" } +{ "_id" : "64105", "city" : "KANSAS CITY", "loc" : [ -94.590092, 39.102459 ], "pop" : 1733, "state" : "MO" } +{ "_id" : "64106", "city" : "KANSAS CITY", "loc" : [ -94.569858, 39.105186 ], "pop" : 7323, "state" : "MO" } +{ "_id" : "64108", "city" : "KANSAS CITY", "loc" : [ -94.586826, 39.0837 ], "pop" : 7167, "state" : "MO" } +{ "_id" : "64109", "city" : "KANSAS CITY", "loc" : [ -94.56737200000001, 39.066286 ], "pop" : 13553, "state" : "MO" } +{ "_id" : "64110", "city" : "KANSAS CITY", "loc" : [ -94.57220599999999, 39.036088 ], "pop" : 19532, "state" : "MO" } +{ "_id" : "64111", "city" : "KANSAS CITY", "loc" : [ -94.59294199999999, 39.056483 ], "pop" : 19929, "state" : "MO" } +{ "_id" : "64112", "city" : "KANSAS CITY", "loc" : [ -94.592873, 39.038191 ], "pop" : 8891, "state" : "MO" } +{ "_id" : "64113", "city" : "KANSAS CITY", "loc" : [ -94.593828, 39.01234 ], "pop" : 11744, "state" : "MO" } +{ "_id" : "64114", "city" : "KANSAS CITY", "loc" : [ -94.595941, 38.962147 ], "pop" : 24416, "state" : "MO" } +{ "_id" : "64116", "city" : "NORTH KANSAS CIT", "loc" : [ -94.56988200000001, 39.163189 ], "pop" : 14697, "state" : "MO" } +{ "_id" : "64117", "city" : "RANDOLPH", "loc" : [ -94.527367, 39.168111 ], "pop" : 14295, "state" : "MO" } +{ "_id" : "64118", "city" : "GLADSTONE", "loc" : [ -94.570448, 39.213842 ], "pop" : 35772, "state" : "MO" } +{ "_id" : "64119", "city" : "KANSAS CITY", "loc" : [ -94.519873, 39.19785 ], "pop" : 24046, "state" : "MO" } +{ "_id" : "64120", "city" : "KANSAS CITY", "loc" : [ -94.54873000000001, 39.122206 ], "pop" : 731, "state" : "MO" } +{ "_id" : "64123", "city" : "KANSAS CITY", "loc" : [ -94.523545, 39.113593 ], "pop" : 9910, "state" : "MO" } +{ "_id" : "64124", "city" : "KANSAS CITY", "loc" : [ -94.539402, 39.106832 ], "pop" : 11683, "state" : "MO" } +{ "_id" : "64125", "city" : "KANSAS CITY", "loc" : [ -94.492328, 39.104157 ], "pop" : 2011, "state" : "MO" } +{ "_id" : "64126", "city" : "KANSAS CITY", "loc" : [ -94.50466, 39.092255 ], "pop" : 6929, "state" : "MO" } +{ "_id" : "64127", "city" : "KANSAS CITY", "loc" : [ -94.536636, 39.088303 ], "pop" : 22469, "state" : "MO" } +{ "_id" : "64128", "city" : "KANSAS CITY", "loc" : [ -94.538634, 39.065932 ], "pop" : 18185, "state" : "MO" } +{ "_id" : "64129", "city" : "KANSAS CITY", "loc" : [ -94.49513, 39.040093 ], "pop" : 12006, "state" : "MO" } +{ "_id" : "64130", "city" : "KANSAS CITY", "loc" : [ -94.546674, 39.035106 ], "pop" : 30403, "state" : "MO" } +{ "_id" : "64131", "city" : "KANSAS CITY", "loc" : [ -94.57741, 38.971303 ], "pop" : 24033, "state" : "MO" } +{ "_id" : "64132", "city" : "KANSAS CITY", "loc" : [ -94.552156, 38.991073 ], "pop" : 17552, "state" : "MO" } +{ "_id" : "64133", "city" : "RAYTOWN", "loc" : [ -94.45922899999999, 39.014909 ], "pop" : 33484, "state" : "MO" } +{ "_id" : "64134", "city" : "KANSAS CITY", "loc" : [ -94.500908, 38.929633 ], "pop" : 23346, "state" : "MO" } +{ "_id" : "64136", "city" : "KANSAS CITY", "loc" : [ -94.400774, 39.018684 ], "pop" : 1033, "state" : "MO" } +{ "_id" : "64137", "city" : "KANSAS CITY", "loc" : [ -94.540487, 38.92988 ], "pop" : 11216, "state" : "MO" } +{ "_id" : "64138", "city" : "RAYTOWN", "loc" : [ -94.479361, 38.96871 ], "pop" : 25590, "state" : "MO" } +{ "_id" : "64139", "city" : "KANSAS CITY", "loc" : [ -94.406086, 38.965891 ], "pop" : 465, "state" : "MO" } +{ "_id" : "64145", "city" : "KANSAS CITY", "loc" : [ -94.597607, 38.89767 ], "pop" : 4830, "state" : "MO" } +{ "_id" : "64146", "city" : "KANSAS CITY", "loc" : [ -94.57638, 38.897264 ], "pop" : 1417, "state" : "MO" } +{ "_id" : "64147", "city" : "MARTIN CITY", "loc" : [ -94.52971700000001, 38.861352 ], "pop" : 600, "state" : "MO" } +{ "_id" : "64149", "city" : "KANSAS CITY", "loc" : [ -94.463554, 38.860646 ], "pop" : 314, "state" : "MO" } +{ "_id" : "64150", "city" : "KANSAS CITY", "loc" : [ -94.616669, 39.177927 ], "pop" : 2140, "state" : "MO" } +{ "_id" : "64151", "city" : "LAKE WAUKOMIS", "loc" : [ -94.63318, 39.213876 ], "pop" : 18196, "state" : "MO" } +{ "_id" : "64152", "city" : "PARKVILLE", "loc" : [ -94.69131299999999, 39.220954 ], "pop" : 18719, "state" : "MO" } +{ "_id" : "64153", "city" : "KANSAS CITY", "loc" : [ -94.697008, 39.262746 ], "pop" : 1582, "state" : "MO" } +{ "_id" : "64154", "city" : "KANSAS CITY", "loc" : [ -94.63544400000001, 39.254728 ], "pop" : 3379, "state" : "MO" } +{ "_id" : "64155", "city" : "KANSAS CITY", "loc" : [ -94.570401, 39.275831 ], "pop" : 11562, "state" : "MO" } +{ "_id" : "64156", "city" : "KANSAS CITY", "loc" : [ -94.533614, 39.290052 ], "pop" : 921, "state" : "MO" } +{ "_id" : "64157", "city" : "KANSAS CITY", "loc" : [ -94.459456, 39.276673 ], "pop" : 1084, "state" : "MO" } +{ "_id" : "64158", "city" : "KANSAS CITY", "loc" : [ -94.472036, 39.228428 ], "pop" : 158, "state" : "MO" } +{ "_id" : "64161", "city" : "RANDOLPH", "loc" : [ -94.459829, 39.161506 ], "pop" : 470, "state" : "MO" } +{ "_id" : "64163", "city" : "FERRELVIEW", "loc" : [ -94.71931499999999, 39.359756 ], "pop" : 1479, "state" : "MO" } +{ "_id" : "64164", "city" : "KANSAS CITY", "loc" : [ -94.644643, 39.3426 ], "pop" : 1459, "state" : "MO" } +{ "_id" : "64165", "city" : "KANSAS CITY", "loc" : [ -94.57296599999999, 39.340054 ], "pop" : 320, "state" : "MO" } +{ "_id" : "64166", "city" : "KANSAS CITY", "loc" : [ -94.519858, 39.329399 ], "pop" : 466, "state" : "MO" } +{ "_id" : "64167", "city" : "KANSAS CITY", "loc" : [ -94.46529099999999, 39.309643 ], "pop" : 244, "state" : "MO" } +{ "_id" : "64401", "city" : "AGENCY", "loc" : [ -94.717017, 39.666229 ], "pop" : 1773, "state" : "MO" } +{ "_id" : "64402", "city" : "ALBANY", "loc" : [ -94.326977, 40.251282 ], "pop" : 2600, "state" : "MO" } +{ "_id" : "64421", "city" : "AMAZONIA", "loc" : [ -94.911344, 39.909197 ], "pop" : 864, "state" : "MO" } +{ "_id" : "64422", "city" : "AMITY", "loc" : [ -94.513558, 39.883697 ], "pop" : 651, "state" : "MO" } +{ "_id" : "64423", "city" : "BARNARD", "loc" : [ -94.805558, 40.186176 ], "pop" : 561, "state" : "MO" } +{ "_id" : "64424", "city" : "BETHANY", "loc" : [ -94.018863, 40.260055 ], "pop" : 4148, "state" : "MO" } +{ "_id" : "64426", "city" : "BLYTHEDALE", "loc" : [ -93.895447, 40.502352 ], "pop" : 335, "state" : "MO" } +{ "_id" : "64427", "city" : "BOLCKOW", "loc" : [ -94.88474100000001, 40.100673 ], "pop" : 684, "state" : "MO" } +{ "_id" : "64428", "city" : "BURLINGTON JUNCT", "loc" : [ -95.051663, 40.442125 ], "pop" : 922, "state" : "MO" } +{ "_id" : "64429", "city" : "CAMERON", "loc" : [ -94.243723, 39.730892 ], "pop" : 4660, "state" : "MO" } +{ "_id" : "64430", "city" : "CLARKSDALE", "loc" : [ -94.54212, 39.813675 ], "pop" : 546, "state" : "MO" } +{ "_id" : "64431", "city" : "CLEARMONT", "loc" : [ -95.005478, 40.517489 ], "pop" : 524, "state" : "MO" } +{ "_id" : "64432", "city" : "CLYDE", "loc" : [ -94.654563, 40.264475 ], "pop" : 221, "state" : "MO" } +{ "_id" : "64433", "city" : "CONCEPTION", "loc" : [ -94.684302, 40.230929 ], "pop" : 281, "state" : "MO" } +{ "_id" : "64434", "city" : "CONCEPTION JUNCT", "loc" : [ -94.696797, 40.266017 ], "pop" : 334, "state" : "MO" } +{ "_id" : "64435", "city" : "CORNING", "loc" : [ -95.436128, 40.24463 ], "pop" : 178, "state" : "MO" } +{ "_id" : "64436", "city" : "COSBY", "loc" : [ -94.697678, 39.855534 ], "pop" : 727, "state" : "MO" } +{ "_id" : "64437", "city" : "BIGELOW", "loc" : [ -95.377047, 40.193873 ], "pop" : 580, "state" : "MO" } +{ "_id" : "64438", "city" : "DARLINGTON", "loc" : [ -94.404899, 40.195517 ], "pop" : 184, "state" : "MO" } +{ "_id" : "64439", "city" : "DEARBORN", "loc" : [ -94.766368, 39.517248 ], "pop" : 1556, "state" : "MO" } +{ "_id" : "64440", "city" : "DE KALB", "loc" : [ -94.927027, 39.583361 ], "pop" : 584, "state" : "MO" } +{ "_id" : "64441", "city" : "DENVER", "loc" : [ -94.306624, 40.418074 ], "pop" : 181, "state" : "MO" } +{ "_id" : "64442", "city" : "EAGLEVILLE", "loc" : [ -93.995058, 40.491197 ], "pop" : 669, "state" : "MO" } +{ "_id" : "64443", "city" : "EASTON", "loc" : [ -94.65819399999999, 39.751709 ], "pop" : 1189, "state" : "MO" } +{ "_id" : "64444", "city" : "EDGERTON", "loc" : [ -94.635217, 39.474213 ], "pop" : 1427, "state" : "MO" } +{ "_id" : "64445", "city" : "ELMO", "loc" : [ -95.123564, 40.518492 ], "pop" : 481, "state" : "MO" } +{ "_id" : "64446", "city" : "FAIRFAX", "loc" : [ -95.375075, 40.330193 ], "pop" : 1413, "state" : "MO" } +{ "_id" : "64448", "city" : "FAUCETT", "loc" : [ -94.791276, 39.589124 ], "pop" : 1077, "state" : "MO" } +{ "_id" : "64449", "city" : "FILLMORE", "loc" : [ -94.955496, 40.014212 ], "pop" : 514, "state" : "MO" } +{ "_id" : "64451", "city" : "FOREST CITY", "loc" : [ -95.19159399999999, 39.989708 ], "pop" : 450, "state" : "MO" } +{ "_id" : "64452", "city" : "FORTESCUE", "loc" : [ -95.33158400000001, 40.054712 ], "pop" : 208, "state" : "MO" } +{ "_id" : "64453", "city" : "GENTRY", "loc" : [ -94.414198, 40.341112 ], "pop" : 256, "state" : "MO" } +{ "_id" : "64454", "city" : "GOWER", "loc" : [ -94.596526, 39.602009 ], "pop" : 2115, "state" : "MO" } +{ "_id" : "64455", "city" : "GRAHAM", "loc" : [ -95.012118, 40.201204 ], "pop" : 543, "state" : "MO" } +{ "_id" : "64456", "city" : "GRANT CITY", "loc" : [ -94.397908, 40.492358 ], "pop" : 1401, "state" : "MO" } +{ "_id" : "64457", "city" : "GUILFORD", "loc" : [ -94.695076, 40.174614 ], "pop" : 388, "state" : "MO" } +{ "_id" : "64458", "city" : "HATFIELD", "loc" : [ -94.169059, 40.521853 ], "pop" : 141, "state" : "MO" } +{ "_id" : "64459", "city" : "HELENA", "loc" : [ -94.69212, 39.925122 ], "pop" : 1218, "state" : "MO" } +{ "_id" : "64461", "city" : "HOPKINS", "loc" : [ -94.81894800000001, 40.548328 ], "pop" : 869, "state" : "MO" } +{ "_id" : "64463", "city" : "KING CITY", "loc" : [ -94.52341199999999, 40.065184 ], "pop" : 1382, "state" : "MO" } +{ "_id" : "64465", "city" : "LATHROP", "loc" : [ -94.309271, 39.517727 ], "pop" : 4461, "state" : "MO" } +{ "_id" : "64466", "city" : "MAITLAND", "loc" : [ -95.09270600000001, 40.199111 ], "pop" : 582, "state" : "MO" } +{ "_id" : "64467", "city" : "MARTINSVILLE", "loc" : [ -94.164463, 40.366206 ], "pop" : 271, "state" : "MO" } +{ "_id" : "64468", "city" : "MARYVILLE", "loc" : [ -94.873479, 40.343399 ], "pop" : 13687, "state" : "MO" } +{ "_id" : "64469", "city" : "MAYSVILLE", "loc" : [ -94.354821, 39.911189 ], "pop" : 1948, "state" : "MO" } +{ "_id" : "64470", "city" : "MOUND CITY", "loc" : [ -95.213837, 40.136238 ], "pop" : 2166, "state" : "MO" } +{ "_id" : "64471", "city" : "NEW HAMPTON", "loc" : [ -94.17856500000001, 40.244439 ], "pop" : 666, "state" : "MO" } +{ "_id" : "64473", "city" : "OREGON", "loc" : [ -95.123358, 39.980906 ], "pop" : 1601, "state" : "MO" } +{ "_id" : "64474", "city" : "OSBORN", "loc" : [ -94.247677, 39.768436 ], "pop" : 4084, "state" : "MO" } +{ "_id" : "64475", "city" : "PARNELL", "loc" : [ -94.659519, 40.472288 ], "pop" : 456, "state" : "MO" } +{ "_id" : "64476", "city" : "PICKERING", "loc" : [ -94.84111900000001, 40.459073 ], "pop" : 525, "state" : "MO" } +{ "_id" : "64477", "city" : "PLATTSBURG", "loc" : [ -94.433814, 39.57047 ], "pop" : 3786, "state" : "MO" } +{ "_id" : "64478", "city" : "QUITMAN", "loc" : [ -95.072909, 40.3701 ], "pop" : 302, "state" : "MO" } +{ "_id" : "64479", "city" : "RAVENWOOD", "loc" : [ -94.68051, 40.357902 ], "pop" : 942, "state" : "MO" } +{ "_id" : "64480", "city" : "REA", "loc" : [ -94.70018399999999, 40.059263 ], "pop" : 690, "state" : "MO" } +{ "_id" : "64481", "city" : "RIDGEWAY", "loc" : [ -93.957527, 40.399896 ], "pop" : 870, "state" : "MO" } +{ "_id" : "64482", "city" : "ROCK PORT", "loc" : [ -95.52740300000001, 40.430581 ], "pop" : 2704, "state" : "MO" } +{ "_id" : "64483", "city" : "ROSENDALE", "loc" : [ -94.832808, 40.039853 ], "pop" : 630, "state" : "MO" } +{ "_id" : "64484", "city" : "RUSHVILLE", "loc" : [ -95.041259, 39.565272 ], "pop" : 1068, "state" : "MO" } +{ "_id" : "64485", "city" : "SAVANNAH", "loc" : [ -94.826733, 39.916774 ], "pop" : 7599, "state" : "MO" } +{ "_id" : "64486", "city" : "SHERIDAN", "loc" : [ -94.570149, 40.492822 ], "pop" : 664, "state" : "MO" } +{ "_id" : "64487", "city" : "SKIDMORE", "loc" : [ -95.079241, 40.28961 ], "pop" : 638, "state" : "MO" } +{ "_id" : "64489", "city" : "STANBERRY", "loc" : [ -94.538691, 40.229285 ], "pop" : 1879, "state" : "MO" } +{ "_id" : "64490", "city" : "HEMPLE", "loc" : [ -94.51779000000001, 39.745465 ], "pop" : 2110, "state" : "MO" } +{ "_id" : "64491", "city" : "TARKIO", "loc" : [ -95.378586, 40.441841 ], "pop" : 2553, "state" : "MO" } +{ "_id" : "64492", "city" : "TRIMBLE", "loc" : [ -94.55123399999999, 39.487067 ], "pop" : 944, "state" : "MO" } +{ "_id" : "64493", "city" : "TURNEY", "loc" : [ -94.297241, 39.631772 ], "pop" : 319, "state" : "MO" } +{ "_id" : "64494", "city" : "UNION STAR", "loc" : [ -94.578732, 39.984645 ], "pop" : 745, "state" : "MO" } +{ "_id" : "64496", "city" : "WATSON", "loc" : [ -95.61931, 40.477985 ], "pop" : 215, "state" : "MO" } +{ "_id" : "64497", "city" : "WEATHERBY", "loc" : [ -94.254959, 39.888699 ], "pop" : 584, "state" : "MO" } +{ "_id" : "64498", "city" : "WESTBORO", "loc" : [ -95.313419, 40.535748 ], "pop" : 572, "state" : "MO" } +{ "_id" : "64499", "city" : "WORTH", "loc" : [ -94.437084, 40.4173 ], "pop" : 229, "state" : "MO" } +{ "_id" : "64501", "city" : "SAINT JOSEPH", "loc" : [ -94.838488, 39.768755 ], "pop" : 12978, "state" : "MO" } +{ "_id" : "64503", "city" : "SAINT JOSEPH", "loc" : [ -94.817125, 39.733987 ], "pop" : 14190, "state" : "MO" } +{ "_id" : "64504", "city" : "SAINT JOSEPH", "loc" : [ -94.867749, 39.707566 ], "pop" : 11412, "state" : "MO" } +{ "_id" : "64505", "city" : "SAINT JOSEPH", "loc" : [ -94.844341, 39.796532 ], "pop" : 10627, "state" : "MO" } +{ "_id" : "64506", "city" : "SAINT JOSEPH", "loc" : [ -94.80431400000001, 39.789292 ], "pop" : 18009, "state" : "MO" } +{ "_id" : "64507", "city" : "SAINT JOSEPH", "loc" : [ -94.817303, 39.755052 ], "pop" : 11194, "state" : "MO" } +{ "_id" : "64601", "city" : "CHILLICOTHE", "loc" : [ -93.550887, 39.796569 ], "pop" : 11189, "state" : "MO" } +{ "_id" : "64620", "city" : "ALTAMONT", "loc" : [ -94.12815500000001, 39.905017 ], "pop" : 533, "state" : "MO" } +{ "_id" : "64621", "city" : "AVALON", "loc" : [ -93.47288, 39.668183 ], "pop" : 388, "state" : "MO" } +{ "_id" : "64622", "city" : "BOGARD", "loc" : [ -93.537387, 39.499354 ], "pop" : 831, "state" : "MO" } +{ "_id" : "64623", "city" : "BOSWORTH", "loc" : [ -93.333521, 39.476692 ], "pop" : 583, "state" : "MO" } +{ "_id" : "64624", "city" : "BRAYMER", "loc" : [ -93.78868, 39.591454 ], "pop" : 1671, "state" : "MO" } +{ "_id" : "64625", "city" : "BRECKENRIDGE", "loc" : [ -93.806794, 39.758205 ], "pop" : 608, "state" : "MO" } +{ "_id" : "64628", "city" : "BROOKFIELD", "loc" : [ -93.07194800000001, 39.784612 ], "pop" : 5564, "state" : "MO" } +{ "_id" : "64630", "city" : "BROWNING", "loc" : [ -93.160661, 40.028983 ], "pop" : 360, "state" : "MO" } +{ "_id" : "64631", "city" : "BUCKLIN", "loc" : [ -92.89281, 39.800563 ], "pop" : 969, "state" : "MO" } +{ "_id" : "64632", "city" : "CAINSVILLE", "loc" : [ -93.759047, 40.457768 ], "pop" : 870, "state" : "MO" } +{ "_id" : "64633", "city" : "CARROLLTON", "loc" : [ -93.492626, 39.367334 ], "pop" : 5694, "state" : "MO" } +{ "_id" : "64635", "city" : "CHULA", "loc" : [ -93.484095, 39.922606 ], "pop" : 685, "state" : "MO" } +{ "_id" : "64636", "city" : "COFFEY", "loc" : [ -94.02515099999999, 40.099928 ], "pop" : 359, "state" : "MO" } +{ "_id" : "64637", "city" : "COWGILL", "loc" : [ -93.929469, 39.564314 ], "pop" : 532, "state" : "MO" } +{ "_id" : "64638", "city" : "DAWN", "loc" : [ -93.596405, 39.666506 ], "pop" : 468, "state" : "MO" } +{ "_id" : "64639", "city" : "DE WITT", "loc" : [ -93.30158299999999, 39.358978 ], "pop" : 592, "state" : "MO" } +{ "_id" : "64640", "city" : "GALLATIN", "loc" : [ -93.978748, 39.902486 ], "pop" : 3260, "state" : "MO" } +{ "_id" : "64641", "city" : "GALT", "loc" : [ -93.395261, 40.14398 ], "pop" : 607, "state" : "MO" } +{ "_id" : "64642", "city" : "GILMAN CITY", "loc" : [ -93.831979, 40.145005 ], "pop" : 680, "state" : "MO" } +{ "_id" : "64643", "city" : "HALE", "loc" : [ -93.34448, 39.595302 ], "pop" : 771, "state" : "MO" } +{ "_id" : "64644", "city" : "HAMILTON", "loc" : [ -93.990898, 39.736412 ], "pop" : 2706, "state" : "MO" } +{ "_id" : "64645", "city" : "HARRIS", "loc" : [ -93.350106, 40.307519 ], "pop" : 127, "state" : "MO" } +{ "_id" : "64646", "city" : "HUMPHREYS", "loc" : [ -93.301455, 40.114448 ], "pop" : 368, "state" : "MO" } +{ "_id" : "64647", "city" : "JAMESON", "loc" : [ -93.95974699999999, 40.004615 ], "pop" : 401, "state" : "MO" } +{ "_id" : "64648", "city" : "JAMESPORT", "loc" : [ -93.78004799999999, 39.983724 ], "pop" : 1933, "state" : "MO" } +{ "_id" : "64649", "city" : "KIDDER", "loc" : [ -94.130005, 39.757039 ], "pop" : 708, "state" : "MO" } +{ "_id" : "64650", "city" : "KINGSTON", "loc" : [ -94.082694, 39.6508 ], "pop" : 868, "state" : "MO" } +{ "_id" : "64651", "city" : "LACLEDE", "loc" : [ -93.16797099999999, 39.7837 ], "pop" : 744, "state" : "MO" } +{ "_id" : "64652", "city" : "LAREDO", "loc" : [ -93.440676, 40.014397 ], "pop" : 485, "state" : "MO" } +{ "_id" : "64653", "city" : "LINNEUS", "loc" : [ -93.188529, 39.909945 ], "pop" : 1421, "state" : "MO" } +{ "_id" : "64654", "city" : "LOCK SPRINGS", "loc" : [ -93.797697, 39.907396 ], "pop" : 576, "state" : "MO" } +{ "_id" : "64655", "city" : "LUCERNE", "loc" : [ -93.286654, 40.438182 ], "pop" : 206, "state" : "MO" } +{ "_id" : "64656", "city" : "LUDLOW", "loc" : [ -93.704578, 39.655064 ], "pop" : 355, "state" : "MO" } +{ "_id" : "64657", "city" : "MC FALL", "loc" : [ -94.300259, 40.105071 ], "pop" : 547, "state" : "MO" } +{ "_id" : "64658", "city" : "MARCELINE", "loc" : [ -92.945502, 39.712485 ], "pop" : 3517, "state" : "MO" } +{ "_id" : "64659", "city" : "MEADVILLE", "loc" : [ -93.301389, 39.779468 ], "pop" : 774, "state" : "MO" } +{ "_id" : "64660", "city" : "MENDON", "loc" : [ -93.089168, 39.582849 ], "pop" : 568, "state" : "MO" } +{ "_id" : "64661", "city" : "MERCER", "loc" : [ -93.524197, 40.516917 ], "pop" : 975, "state" : "MO" } +{ "_id" : "64664", "city" : "MOORESVILLE", "loc" : [ -93.71693, 39.74249 ], "pop" : 320, "state" : "MO" } +{ "_id" : "64665", "city" : "MOUNT MORIAH", "loc" : [ -93.814252, 40.329164 ], "pop" : 247, "state" : "MO" } +{ "_id" : "64667", "city" : "NEWTOWN", "loc" : [ -93.30727899999999, 40.361227 ], "pop" : 313, "state" : "MO" } +{ "_id" : "64668", "city" : "NORBORNE", "loc" : [ -93.67609, 39.329903 ], "pop" : 1669, "state" : "MO" } +{ "_id" : "64670", "city" : "PATTONSBURG", "loc" : [ -94.13429499999999, 40.042756 ], "pop" : 855, "state" : "MO" } +{ "_id" : "64671", "city" : "POLO", "loc" : [ -94.074303, 39.564697 ], "pop" : 1496, "state" : "MO" } +{ "_id" : "64672", "city" : "POWERSVILLE", "loc" : [ -93.284436, 40.527155 ], "pop" : 284, "state" : "MO" } +{ "_id" : "64673", "city" : "PRINCETON", "loc" : [ -93.577394, 40.385533 ], "pop" : 2467, "state" : "MO" } +{ "_id" : "64674", "city" : "PURDIN", "loc" : [ -93.17001999999999, 39.952948 ], "pop" : 297, "state" : "MO" } +{ "_id" : "64676", "city" : "ROTHVILLE", "loc" : [ -93.046683, 39.662666 ], "pop" : 440, "state" : "MO" } +{ "_id" : "64677", "city" : "SAINT CATHARINE", "loc" : [ -92.99294999999999, 39.800017 ], "pop" : 288, "state" : "MO" } +{ "_id" : "64679", "city" : "SPICKARD", "loc" : [ -93.550291, 40.239985 ], "pop" : 659, "state" : "MO" } +{ "_id" : "64681", "city" : "SUMNER", "loc" : [ -93.22412799999999, 39.654992 ], "pop" : 307, "state" : "MO" } +{ "_id" : "64682", "city" : "TINA", "loc" : [ -93.46475, 39.551751 ], "pop" : 399, "state" : "MO" } +{ "_id" : "64683", "city" : "TRENTON", "loc" : [ -93.608634, 40.082335 ], "pop" : 8465, "state" : "MO" } +{ "_id" : "64686", "city" : "UTICA", "loc" : [ -93.62889699999999, 39.741742 ], "pop" : 361, "state" : "MO" } +{ "_id" : "64688", "city" : "WHEELING", "loc" : [ -93.386835, 39.801137 ], "pop" : 481, "state" : "MO" } +{ "_id" : "64689", "city" : "WINSTON", "loc" : [ -94.148747, 39.84995 ], "pop" : 567, "state" : "MO" } +{ "_id" : "64701", "city" : "HARRISONVILLE", "loc" : [ -94.32852, 38.64193 ], "pop" : 12242, "state" : "MO" } +{ "_id" : "64720", "city" : "ADRIAN", "loc" : [ -94.368336, 38.412473 ], "pop" : 2254, "state" : "MO" } +{ "_id" : "64722", "city" : "AMORET", "loc" : [ -94.57342300000001, 38.260508 ], "pop" : 409, "state" : "MO" } +{ "_id" : "64723", "city" : "AMSTERDAM", "loc" : [ -94.57628200000001, 38.395385 ], "pop" : 884, "state" : "MO" } +{ "_id" : "64724", "city" : "APPLETON CITY", "loc" : [ -94.02290000000001, 38.184779 ], "pop" : 1584, "state" : "MO" } +{ "_id" : "64725", "city" : "ARCHIE", "loc" : [ -94.36299200000001, 38.498612 ], "pop" : 1912, "state" : "MO" } +{ "_id" : "64726", "city" : "BLAIRSTOWN", "loc" : [ -93.964102, 38.522701 ], "pop" : 803, "state" : "MO" } +{ "_id" : "64728", "city" : "BRONAUGH", "loc" : [ -94.48603, 37.69 ], "pop" : 493, "state" : "MO" } +{ "_id" : "64730", "city" : "BUTLER", "loc" : [ -94.31375, 38.271245 ], "pop" : 8449, "state" : "MO" } +{ "_id" : "64733", "city" : "CHILHOWEE", "loc" : [ -93.865325, 38.612604 ], "pop" : 951, "state" : "MO" } +{ "_id" : "64734", "city" : "CLEVELAND", "loc" : [ -94.56950000000001, 38.68977 ], "pop" : 2586, "state" : "MO" } +{ "_id" : "64735", "city" : "TIGHTWAD", "loc" : [ -93.758906, 38.368811 ], "pop" : 12259, "state" : "MO" } +{ "_id" : "64738", "city" : "COLLINS", "loc" : [ -93.660849, 37.880998 ], "pop" : 844, "state" : "MO" } +{ "_id" : "64739", "city" : "CREIGHTON", "loc" : [ -94.09260399999999, 38.507754 ], "pop" : 711, "state" : "MO" } +{ "_id" : "64740", "city" : "DEEPWATER", "loc" : [ -93.73028100000001, 38.243164 ], "pop" : 1233, "state" : "MO" } +{ "_id" : "64741", "city" : "DEERFIELD", "loc" : [ -94.48484500000001, 37.82109 ], "pop" : 966, "state" : "MO" } +{ "_id" : "64742", "city" : "DREXEL", "loc" : [ -94.592765, 38.495625 ], "pop" : 1181, "state" : "MO" } +{ "_id" : "64744", "city" : "EL DORADO SPRING", "loc" : [ -94.030091, 37.858517 ], "pop" : 6787, "state" : "MO" } +{ "_id" : "64745", "city" : "FOSTER", "loc" : [ -94.53706699999999, 38.17338 ], "pop" : 464, "state" : "MO" } +{ "_id" : "64746", "city" : "FREEMAN", "loc" : [ -94.495561, 38.624549 ], "pop" : 1509, "state" : "MO" } +{ "_id" : "64747", "city" : "GARDEN CITY", "loc" : [ -94.18253199999999, 38.568082 ], "pop" : 1837, "state" : "MO" } +{ "_id" : "64748", "city" : "GOLDEN CITY", "loc" : [ -94.102683, 37.399535 ], "pop" : 1127, "state" : "MO" } +{ "_id" : "64750", "city" : "HARWOOD", "loc" : [ -94.14019399999999, 37.953028 ], "pop" : 189, "state" : "MO" } +{ "_id" : "64751", "city" : "HORTON", "loc" : [ -94.396438, 37.995078 ], "pop" : 551, "state" : "MO" } +{ "_id" : "64752", "city" : "STOTESBURY", "loc" : [ -94.56100000000001, 38.059635 ], "pop" : 728, "state" : "MO" } +{ "_id" : "64755", "city" : "JASPER", "loc" : [ -94.273126, 37.318224 ], "pop" : 2085, "state" : "MO" } +{ "_id" : "64756", "city" : "JERICO SPRINGS", "loc" : [ -94.012912, 37.661343 ], "pop" : 966, "state" : "MO" } +{ "_id" : "64759", "city" : "IANTHA", "loc" : [ -94.270253, 37.500221 ], "pop" : 7847, "state" : "MO" } +{ "_id" : "64760", "city" : "LATOUR", "loc" : [ -94.045721, 38.634847 ], "pop" : 745, "state" : "MO" } +{ "_id" : "64761", "city" : "LEETON", "loc" : [ -93.712321, 38.614113 ], "pop" : 1723, "state" : "MO" } +{ "_id" : "64762", "city" : "LIBERAL", "loc" : [ -94.520377, 37.572453 ], "pop" : 1448, "state" : "MO" } +{ "_id" : "64763", "city" : "LOWRY CITY", "loc" : [ -93.71135200000001, 38.140443 ], "pop" : 1345, "state" : "MO" } +{ "_id" : "64767", "city" : "MILO", "loc" : [ -94.304632, 37.744559 ], "pop" : 439, "state" : "MO" } +{ "_id" : "64769", "city" : "MINDENMINES", "loc" : [ -94.57557300000001, 37.451987 ], "pop" : 544, "state" : "MO" } +{ "_id" : "64770", "city" : "MONTROSE", "loc" : [ -93.995239, 38.259702 ], "pop" : 643, "state" : "MO" } +{ "_id" : "64771", "city" : "MOUNDVILLE", "loc" : [ -94.449645, 37.747637 ], "pop" : 478, "state" : "MO" } +{ "_id" : "64772", "city" : "NEVADA", "loc" : [ -94.35712700000001, 37.840853 ], "pop" : 11918, "state" : "MO" } +{ "_id" : "64776", "city" : "OSCEOLA", "loc" : [ -93.753621, 38.028553 ], "pop" : 4684, "state" : "MO" } +{ "_id" : "64778", "city" : "RICHARDS", "loc" : [ -94.55922700000001, 37.906111 ], "pop" : 207, "state" : "MO" } +{ "_id" : "64779", "city" : "RICH HILL", "loc" : [ -94.363454, 38.09438 ], "pop" : 1630, "state" : "MO" } +{ "_id" : "64780", "city" : "ROCKVILLE", "loc" : [ -94.129904, 38.076583 ], "pop" : 456, "state" : "MO" } +{ "_id" : "64783", "city" : "SCHELL CITY", "loc" : [ -94.15791, 38.009403 ], "pop" : 809, "state" : "MO" } +{ "_id" : "64784", "city" : "SHELDON", "loc" : [ -94.254835, 37.683969 ], "pop" : 1281, "state" : "MO" } +{ "_id" : "64788", "city" : "URICH", "loc" : [ -93.97847, 38.44489 ], "pop" : 949, "state" : "MO" } +{ "_id" : "64790", "city" : "WALKER", "loc" : [ -94.22930100000001, 37.893023 ], "pop" : 544, "state" : "MO" } +{ "_id" : "64801", "city" : "JOPLIN", "loc" : [ -94.505144, 37.096858 ], "pop" : 29617, "state" : "MO" } +{ "_id" : "64804", "city" : "JOPLIN", "loc" : [ -94.51025199999999, 37.046454 ], "pop" : 30661, "state" : "MO" } +{ "_id" : "64831", "city" : "ANDERSON", "loc" : [ -94.476648, 36.669224 ], "pop" : 4477, "state" : "MO" } +{ "_id" : "64832", "city" : "ASBURY", "loc" : [ -94.565484, 37.294168 ], "pop" : 603, "state" : "MO" } +{ "_id" : "64833", "city" : "AVILLA", "loc" : [ -94.117043, 37.194709 ], "pop" : 678, "state" : "MO" } +{ "_id" : "64834", "city" : "CARL JUNCTION", "loc" : [ -94.55502, 37.179479 ], "pop" : 4158, "state" : "MO" } +{ "_id" : "64835", "city" : "CARTERVILLE", "loc" : [ -94.43593799999999, 37.150734 ], "pop" : 2397, "state" : "MO" } +{ "_id" : "64836", "city" : "CARTHAGE", "loc" : [ -94.311232, 37.159686 ], "pop" : 19516, "state" : "MO" } +{ "_id" : "64840", "city" : "DIAMOND", "loc" : [ -94.32041, 37.005993 ], "pop" : 2736, "state" : "MO" } +{ "_id" : "64842", "city" : "FAIRVIEW", "loc" : [ -94.09120299999999, 36.825419 ], "pop" : 568, "state" : "MO" } +{ "_id" : "64843", "city" : "GOODMAN", "loc" : [ -94.39855, 36.732335 ], "pop" : 2025, "state" : "MO" } +{ "_id" : "64844", "city" : "GRANBY", "loc" : [ -94.264349, 36.906562 ], "pop" : 3571, "state" : "MO" } +{ "_id" : "64847", "city" : "LANAGAN", "loc" : [ -94.4551, 36.605956 ], "pop" : 755, "state" : "MO" } +{ "_id" : "64848", "city" : "LA RUSSELL", "loc" : [ -94.03287400000001, 37.17387 ], "pop" : 817, "state" : "MO" } +{ "_id" : "64850", "city" : "NEOSHO", "loc" : [ -94.386218, 36.870634 ], "pop" : 15863, "state" : "MO" } +{ "_id" : "64854", "city" : "NOEL", "loc" : [ -94.490627, 36.541668 ], "pop" : 2239, "state" : "MO" } +{ "_id" : "64855", "city" : "ORONOGO", "loc" : [ -94.446246, 37.243288 ], "pop" : 3942, "state" : "MO" } +{ "_id" : "64856", "city" : "JANE", "loc" : [ -94.351461, 36.580243 ], "pop" : 2783, "state" : "MO" } +{ "_id" : "64859", "city" : "REEDS", "loc" : [ -94.161272, 37.122477 ], "pop" : 222, "state" : "MO" } +{ "_id" : "64861", "city" : "ROCKY COMFORT", "loc" : [ -94.109066, 36.717546 ], "pop" : 543, "state" : "MO" } +{ "_id" : "64862", "city" : "SARCOXIE", "loc" : [ -94.11514, 37.072382 ], "pop" : 2133, "state" : "MO" } +{ "_id" : "64863", "city" : "SOUTH WEST CITY", "loc" : [ -94.596141, 36.531924 ], "pop" : 1201, "state" : "MO" } +{ "_id" : "64865", "city" : "SENECA", "loc" : [ -94.55936699999999, 36.844169 ], "pop" : 5419, "state" : "MO" } +{ "_id" : "64866", "city" : "STARK CITY", "loc" : [ -94.154811, 36.878538 ], "pop" : 967, "state" : "MO" } +{ "_id" : "64867", "city" : "STELLA", "loc" : [ -94.20858, 36.751553 ], "pop" : 2154, "state" : "MO" } +{ "_id" : "64868", "city" : "TIFF CITY", "loc" : [ -94.59343699999999, 36.664447 ], "pop" : 364, "state" : "MO" } +{ "_id" : "64870", "city" : "WEBB CITY", "loc" : [ -94.472683, 37.144 ], "pop" : 7474, "state" : "MO" } +{ "_id" : "64873", "city" : "WENTWORTH", "loc" : [ -94.132169, 36.980702 ], "pop" : 1211, "state" : "MO" } +{ "_id" : "64874", "city" : "WHEATON", "loc" : [ -94.04916, 36.765145 ], "pop" : 970, "state" : "MO" } +{ "_id" : "65001", "city" : "ARGYLE", "loc" : [ -92.015456, 38.298619 ], "pop" : 384, "state" : "MO" } +{ "_id" : "65010", "city" : "ASHLAND", "loc" : [ -92.25366200000001, 38.787771 ], "pop" : 2989, "state" : "MO" } +{ "_id" : "65011", "city" : "BARNETT", "loc" : [ -92.668594, 38.396696 ], "pop" : 660, "state" : "MO" } +{ "_id" : "65013", "city" : "BELLE", "loc" : [ -91.730299, 38.271108 ], "pop" : 2874, "state" : "MO" } +{ "_id" : "65014", "city" : "BLAND", "loc" : [ -91.626334, 38.307383 ], "pop" : 2284, "state" : "MO" } +{ "_id" : "65016", "city" : "BONNOTS MILL", "loc" : [ -91.92934099999999, 38.553282 ], "pop" : 1373, "state" : "MO" } +{ "_id" : "65017", "city" : "BRUMLEY", "loc" : [ -92.474732, 38.070914 ], "pop" : 1127, "state" : "MO" } +{ "_id" : "65018", "city" : "CALIFORNIA", "loc" : [ -92.545558, 38.622369 ], "pop" : 6224, "state" : "MO" } +{ "_id" : "65020", "city" : "CAMDENTON", "loc" : [ -92.76774399999999, 38.018534 ], "pop" : 8006, "state" : "MO" } +{ "_id" : "65023", "city" : "CENTERTOWN", "loc" : [ -92.39952099999999, 38.629705 ], "pop" : 1184, "state" : "MO" } +{ "_id" : "65024", "city" : "CHAMOIS", "loc" : [ -91.76967999999999, 38.652683 ], "pop" : 986, "state" : "MO" } +{ "_id" : "65025", "city" : "CLARKSBURG", "loc" : [ -92.67292500000001, 38.643156 ], "pop" : 784, "state" : "MO" } +{ "_id" : "65026", "city" : "ELDON", "loc" : [ -92.57361899999999, 38.340127 ], "pop" : 8673, "state" : "MO" } +{ "_id" : "65032", "city" : "EUGENE", "loc" : [ -92.368853, 38.359849 ], "pop" : 1181, "state" : "MO" } +{ "_id" : "65034", "city" : "FORTUNA", "loc" : [ -92.784948, 38.574391 ], "pop" : 310, "state" : "MO" } +{ "_id" : "65035", "city" : "FREEBURG", "loc" : [ -91.927605, 38.355085 ], "pop" : 1373, "state" : "MO" } +{ "_id" : "65037", "city" : "GRAVOIS MILLS", "loc" : [ -92.82302900000001, 38.258445 ], "pop" : 5653, "state" : "MO" } +{ "_id" : "65039", "city" : "HARTSBURG", "loc" : [ -92.286377, 38.715902 ], "pop" : 1945, "state" : "MO" } +{ "_id" : "65040", "city" : "HENLEY", "loc" : [ -92.312303, 38.388133 ], "pop" : 952, "state" : "MO" } +{ "_id" : "65041", "city" : "BAY", "loc" : [ -91.46771699999999, 38.668381 ], "pop" : 4842, "state" : "MO" } +{ "_id" : "65042", "city" : "HIGH POINT", "loc" : [ -92.600514, 38.478237 ], "pop" : 509, "state" : "MO" } +{ "_id" : "65043", "city" : "HOLTS SUMMIT", "loc" : [ -92.116345, 38.632784 ], "pop" : 6642, "state" : "MO" } +{ "_id" : "65046", "city" : "JAMESTOWN", "loc" : [ -92.48065099999999, 38.779292 ], "pop" : 1018, "state" : "MO" } +{ "_id" : "65047", "city" : "KAISER", "loc" : [ -92.579869, 38.163673 ], "pop" : 1213, "state" : "MO" } +{ "_id" : "65048", "city" : "KOELTZTOWN", "loc" : [ -92.048365, 38.323526 ], "pop" : 185, "state" : "MO" } +{ "_id" : "65049", "city" : "FOUR SEASONS", "loc" : [ -92.677555, 38.209127 ], "pop" : 4404, "state" : "MO" } +{ "_id" : "65050", "city" : "LATHAM", "loc" : [ -92.65364700000001, 38.550035 ], "pop" : 937, "state" : "MO" } +{ "_id" : "65051", "city" : "LINN", "loc" : [ -91.81945, 38.473855 ], "pop" : 3836, "state" : "MO" } +{ "_id" : "65052", "city" : "LINN CREEK", "loc" : [ -92.683077, 38.060524 ], "pop" : 2308, "state" : "MO" } +{ "_id" : "65053", "city" : "LOHMAN", "loc" : [ -92.384216, 38.548434 ], "pop" : 356, "state" : "MO" } +{ "_id" : "65054", "city" : "LOOSE CREEK", "loc" : [ -91.959126, 38.471715 ], "pop" : 1089, "state" : "MO" } +{ "_id" : "65058", "city" : "META", "loc" : [ -92.135797, 38.250039 ], "pop" : 1003, "state" : "MO" } +{ "_id" : "65059", "city" : "MOKANE", "loc" : [ -91.886815, 38.699839 ], "pop" : 881, "state" : "MO" } +{ "_id" : "65061", "city" : "MORRISON", "loc" : [ -91.657972, 38.605967 ], "pop" : 267, "state" : "MO" } +{ "_id" : "65062", "city" : "MOUNT STERLING", "loc" : [ -91.610315, 38.538786 ], "pop" : 285, "state" : "MO" } +{ "_id" : "65063", "city" : "NEW BLOOMFIELD", "loc" : [ -92.082983, 38.709996 ], "pop" : 2588, "state" : "MO" } +{ "_id" : "65064", "city" : "OLEAN", "loc" : [ -92.53031, 38.400059 ], "pop" : 882, "state" : "MO" } +{ "_id" : "65065", "city" : "OSAGE BEACH", "loc" : [ -92.666427, 38.13805 ], "pop" : 3601, "state" : "MO" } +{ "_id" : "65066", "city" : "OWENSVILLE", "loc" : [ -91.486679, 38.351119 ], "pop" : 5980, "state" : "MO" } +{ "_id" : "65067", "city" : "PORTLAND", "loc" : [ -91.70056700000001, 38.784701 ], "pop" : 439, "state" : "MO" } +{ "_id" : "65068", "city" : "PRAIRIE HOME", "loc" : [ -92.597376, 38.825331 ], "pop" : 533, "state" : "MO" } +{ "_id" : "65069", "city" : "RHINELAND", "loc" : [ -91.51510500000001, 38.763811 ], "pop" : 1340, "state" : "MO" } +{ "_id" : "65072", "city" : "ROCKY MOUNT", "loc" : [ -92.705921, 38.291057 ], "pop" : 157, "state" : "MO" } +{ "_id" : "65074", "city" : "RUSSELLVILLE", "loc" : [ -92.42912200000001, 38.500534 ], "pop" : 2043, "state" : "MO" } +{ "_id" : "65075", "city" : "SAINT ELIZABETH", "loc" : [ -92.263503, 38.271244 ], "pop" : 701, "state" : "MO" } +{ "_id" : "65076", "city" : "SAINT THOMAS", "loc" : [ -92.18938199999999, 38.391246 ], "pop" : 1232, "state" : "MO" } +{ "_id" : "65077", "city" : "STEEDMAN", "loc" : [ -91.788837, 38.756604 ], "pop" : 458, "state" : "MO" } +{ "_id" : "65078", "city" : "STOVER", "loc" : [ -92.99466700000001, 38.441352 ], "pop" : 1946, "state" : "MO" } +{ "_id" : "65079", "city" : "SUNRISE BEACH", "loc" : [ -92.78539499999999, 38.155845 ], "pop" : 3635, "state" : "MO" } +{ "_id" : "65080", "city" : "TEBBETTS", "loc" : [ -91.967316, 38.640193 ], "pop" : 413, "state" : "MO" } +{ "_id" : "65081", "city" : "TIPTON", "loc" : [ -92.781448, 38.654839 ], "pop" : 2516, "state" : "MO" } +{ "_id" : "65082", "city" : "TUSCUMBIA", "loc" : [ -92.491739, 38.238881 ], "pop" : 1181, "state" : "MO" } +{ "_id" : "65083", "city" : "ULMAN", "loc" : [ -92.46397899999999, 38.134141 ], "pop" : 517, "state" : "MO" } +{ "_id" : "65084", "city" : "VERSAILLES", "loc" : [ -92.825835, 38.436491 ], "pop" : 5581, "state" : "MO" } +{ "_id" : "65085", "city" : "WESTPHALIA", "loc" : [ -92.039221, 38.426968 ], "pop" : 992, "state" : "MO" } +{ "_id" : "65101", "city" : "JEFFERSON CITY", "loc" : [ -92.152462, 38.546212 ], "pop" : 25992, "state" : "MO" } +{ "_id" : "65109", "city" : "JEFFERSON CITY", "loc" : [ -92.244298, 38.577272 ], "pop" : 31418, "state" : "MO" } +{ "_id" : "65201", "city" : "COLUMBIA", "loc" : [ -92.30486500000001, 38.938176 ], "pop" : 33668, "state" : "MO" } +{ "_id" : "65202", "city" : "COLUMBIA", "loc" : [ -92.311204, 38.995019 ], "pop" : 27394, "state" : "MO" } +{ "_id" : "65203", "city" : "COLUMBIA", "loc" : [ -92.363865, 38.93482 ], "pop" : 34914, "state" : "MO" } +{ "_id" : "65230", "city" : "ARMSTRONG", "loc" : [ -92.70897600000001, 39.256585 ], "pop" : 736, "state" : "MO" } +{ "_id" : "65231", "city" : "AUXVASSE", "loc" : [ -91.885801, 39.012184 ], "pop" : 2698, "state" : "MO" } +{ "_id" : "65232", "city" : "BENTON CITY", "loc" : [ -91.766124, 39.120886 ], "pop" : 300, "state" : "MO" } +{ "_id" : "65233", "city" : "BOONVILLE", "loc" : [ -92.744973, 38.95364 ], "pop" : 9330, "state" : "MO" } +{ "_id" : "65236", "city" : "BRUNSWICK", "loc" : [ -93.118694, 39.437424 ], "pop" : 1610, "state" : "MO" } +{ "_id" : "65237", "city" : "BUNCETON", "loc" : [ -92.79269499999999, 38.746754 ], "pop" : 1343, "state" : "MO" } +{ "_id" : "65239", "city" : "CAIRO", "loc" : [ -92.440027, 39.51141 ], "pop" : 1143, "state" : "MO" } +{ "_id" : "65240", "city" : "CENTRALIA", "loc" : [ -92.147244, 39.196089 ], "pop" : 5171, "state" : "MO" } +{ "_id" : "65243", "city" : "CLARK", "loc" : [ -92.382706, 39.315293 ], "pop" : 4672, "state" : "MO" } +{ "_id" : "65244", "city" : "CLIFTON HILL", "loc" : [ -92.667676, 39.425985 ], "pop" : 341, "state" : "MO" } +{ "_id" : "65246", "city" : "DALTON", "loc" : [ -92.994366, 39.40346 ], "pop" : 209, "state" : "MO" } +{ "_id" : "65247", "city" : "EXCELLO", "loc" : [ -92.475705, 39.645543 ], "pop" : 873, "state" : "MO" } +{ "_id" : "65248", "city" : "FAYETTE", "loc" : [ -92.658287, 39.143041 ], "pop" : 4805, "state" : "MO" } +{ "_id" : "65250", "city" : "FRANKLIN", "loc" : [ -92.831596, 39.066818 ], "pop" : 680, "state" : "MO" } +{ "_id" : "65251", "city" : "FULTON", "loc" : [ -91.96055, 38.851821 ], "pop" : 17506, "state" : "MO" } +{ "_id" : "65254", "city" : "GLASGOW", "loc" : [ -92.831812, 39.225736 ], "pop" : 1757, "state" : "MO" } +{ "_id" : "65255", "city" : "HALLSVILLE", "loc" : [ -92.223855, 39.105429 ], "pop" : 2476, "state" : "MO" } +{ "_id" : "65256", "city" : "HARRISBURG", "loc" : [ -92.440955, 39.120312 ], "pop" : 928, "state" : "MO" } +{ "_id" : "65257", "city" : "HIGBEE", "loc" : [ -92.51630900000001, 39.305521 ], "pop" : 932, "state" : "MO" } +{ "_id" : "65258", "city" : "HOLLIDAY", "loc" : [ -92.131759, 39.490436 ], "pop" : 286, "state" : "MO" } +{ "_id" : "65259", "city" : "HUNTSVILLE", "loc" : [ -92.552992, 39.435371 ], "pop" : 3210, "state" : "MO" } +{ "_id" : "65260", "city" : "JACKSONVILLE", "loc" : [ -92.43153599999999, 39.579076 ], "pop" : 473, "state" : "MO" } +{ "_id" : "65261", "city" : "KEYTESVILLE", "loc" : [ -92.930187, 39.479388 ], "pop" : 1354, "state" : "MO" } +{ "_id" : "65262", "city" : "KINGDOM CITY", "loc" : [ -91.95200800000001, 38.95508 ], "pop" : 322, "state" : "MO" } +{ "_id" : "65263", "city" : "MADISON", "loc" : [ -92.22871499999999, 39.461543 ], "pop" : 2000, "state" : "MO" } +{ "_id" : "65264", "city" : "MARTINSBURG", "loc" : [ -91.66463, 39.09675 ], "pop" : 644, "state" : "MO" } +{ "_id" : "65265", "city" : "MEXICO", "loc" : [ -91.889473, 39.171233 ], "pop" : 14785, "state" : "MO" } +{ "_id" : "65270", "city" : "MOBERLY", "loc" : [ -92.435793, 39.420239 ], "pop" : 14884, "state" : "MO" } +{ "_id" : "65274", "city" : "NEW FRANKLIN", "loc" : [ -92.738601, 39.020042 ], "pop" : 1595, "state" : "MO" } +{ "_id" : "65275", "city" : "PARIS", "loc" : [ -92.011323, 39.493219 ], "pop" : 3157, "state" : "MO" } +{ "_id" : "65276", "city" : "PILOT GROVE", "loc" : [ -92.93046099999999, 38.871168 ], "pop" : 1492, "state" : "MO" } +{ "_id" : "65279", "city" : "ROCHEPORT", "loc" : [ -92.50785399999999, 38.975578 ], "pop" : 1437, "state" : "MO" } +{ "_id" : "65280", "city" : "RUSH HILL", "loc" : [ -91.68882499999999, 39.193163 ], "pop" : 646, "state" : "MO" } +{ "_id" : "65281", "city" : "SALISBURY", "loc" : [ -92.80144, 39.431853 ], "pop" : 4022, "state" : "MO" } +{ "_id" : "65282", "city" : "SANTA FE", "loc" : [ -91.82937699999999, 39.398929 ], "pop" : 712, "state" : "MO" } +{ "_id" : "65283", "city" : "STOUTSVILLE", "loc" : [ -91.829661, 39.559425 ], "pop" : 361, "state" : "MO" } +{ "_id" : "65284", "city" : "STURGEON", "loc" : [ -92.295264, 39.205705 ], "pop" : 1812, "state" : "MO" } +{ "_id" : "65285", "city" : "THOMPSON", "loc" : [ -92.02594499999999, 39.20258 ], "pop" : 1230, "state" : "MO" } +{ "_id" : "65286", "city" : "TRIPLETT", "loc" : [ -93.19277099999999, 39.501098 ], "pop" : 192, "state" : "MO" } +{ "_id" : "65287", "city" : "WOOLDRIDGE", "loc" : [ -92.582584, 38.919475 ], "pop" : 571, "state" : "MO" } +{ "_id" : "65301", "city" : "SEDALIA", "loc" : [ -93.232268, 38.696076 ], "pop" : 28813, "state" : "MO" } +{ "_id" : "65305", "city" : "WHITEMAN AFB", "loc" : [ -93.572514, 38.731683 ], "pop" : 4222, "state" : "MO" } +{ "_id" : "65321", "city" : "BLACKBURN", "loc" : [ -93.428124, 39.098776 ], "pop" : 777, "state" : "MO" } +{ "_id" : "65322", "city" : "BLACKWATER", "loc" : [ -92.96829099999999, 38.972659 ], "pop" : 713, "state" : "MO" } +{ "_id" : "65323", "city" : "CALHOUN", "loc" : [ -93.645929, 38.485842 ], "pop" : 795, "state" : "MO" } +{ "_id" : "65324", "city" : "CLIMAX SPRINGS", "loc" : [ -92.95371, 38.139586 ], "pop" : 1840, "state" : "MO" } +{ "_id" : "65325", "city" : "COLE CAMP", "loc" : [ -93.191529, 38.453124 ], "pop" : 2570, "state" : "MO" } +{ "_id" : "65326", "city" : "EDWARDS", "loc" : [ -93.147104, 38.190564 ], "pop" : 1320, "state" : "MO" } +{ "_id" : "65329", "city" : "FLORENCE", "loc" : [ -92.998606, 38.610056 ], "pop" : 847, "state" : "MO" } +{ "_id" : "65330", "city" : "GILLIAM", "loc" : [ -92.993222, 39.244708 ], "pop" : 476, "state" : "MO" } +{ "_id" : "65332", "city" : "GREEN RIDGE", "loc" : [ -93.437395, 38.618983 ], "pop" : 1198, "state" : "MO" } +{ "_id" : "65333", "city" : "HOUSTONIA", "loc" : [ -93.332531, 38.910581 ], "pop" : 699, "state" : "MO" } +{ "_id" : "65334", "city" : "HUGHESVILLE", "loc" : [ -93.215895, 38.84944 ], "pop" : 1279, "state" : "MO" } +{ "_id" : "65335", "city" : "IONIA", "loc" : [ -93.32235799999999, 38.501887 ], "pop" : 175, "state" : "MO" } +{ "_id" : "65336", "city" : "KNOB NOSTER", "loc" : [ -93.556422, 38.746932 ], "pop" : 4455, "state" : "MO" } +{ "_id" : "65337", "city" : "LA MONTE", "loc" : [ -93.43126599999999, 38.775256 ], "pop" : 1570, "state" : "MO" } +{ "_id" : "65338", "city" : "LINCOLN", "loc" : [ -93.3668, 38.407271 ], "pop" : 1810, "state" : "MO" } +{ "_id" : "65339", "city" : "GRAND PASS", "loc" : [ -93.381325, 39.195108 ], "pop" : 622, "state" : "MO" } +{ "_id" : "65340", "city" : "NAPTON", "loc" : [ -93.196017, 39.10983 ], "pop" : 15086, "state" : "MO" } +{ "_id" : "65344", "city" : "MIAMI", "loc" : [ -93.19678, 39.282095 ], "pop" : 569, "state" : "MO" } +{ "_id" : "65345", "city" : "MORA", "loc" : [ -93.227232, 38.520726 ], "pop" : 132, "state" : "MO" } +{ "_id" : "65347", "city" : "NELSON", "loc" : [ -93.031102, 39.010447 ], "pop" : 836, "state" : "MO" } +{ "_id" : "65348", "city" : "OTTERVILLE", "loc" : [ -93.010819, 38.71607 ], "pop" : 853, "state" : "MO" } +{ "_id" : "65349", "city" : "SLATER", "loc" : [ -93.05467400000001, 39.216273 ], "pop" : 2872, "state" : "MO" } +{ "_id" : "65350", "city" : "SMITHTON", "loc" : [ -93.10807200000001, 38.649973 ], "pop" : 1669, "state" : "MO" } +{ "_id" : "65351", "city" : "SWEET SPRINGS", "loc" : [ -93.424683, 38.965953 ], "pop" : 2385, "state" : "MO" } +{ "_id" : "65354", "city" : "SYRACUSE", "loc" : [ -92.882265, 38.637423 ], "pop" : 730, "state" : "MO" } +{ "_id" : "65355", "city" : "WARSAW", "loc" : [ -93.337279, 38.250186 ], "pop" : 8108, "state" : "MO" } +{ "_id" : "65360", "city" : "WINDSOR", "loc" : [ -93.526864, 38.52719 ], "pop" : 3453, "state" : "MO" } +{ "_id" : "65401", "city" : "ROLLA", "loc" : [ -91.76034799999999, 37.948527 ], "pop" : 24377, "state" : "MO" } +{ "_id" : "65433", "city" : "BENDAVIS", "loc" : [ -92.228174, 37.246803 ], "pop" : 44, "state" : "MO" } +{ "_id" : "65436", "city" : "BEULAH", "loc" : [ -91.878714, 37.644469 ], "pop" : 546, "state" : "MO" } +{ "_id" : "65438", "city" : "BIRCH TREE", "loc" : [ -91.50082, 36.947589 ], "pop" : 2586, "state" : "MO" } +{ "_id" : "65439", "city" : "BIXBY", "loc" : [ -91.083461, 37.672244 ], "pop" : 464, "state" : "MO" } +{ "_id" : "65440", "city" : "BOSS", "loc" : [ -91.210905, 37.637282 ], "pop" : 457, "state" : "MO" } +{ "_id" : "65441", "city" : "BOURBON", "loc" : [ -91.22254, 38.172039 ], "pop" : 4456, "state" : "MO" } +{ "_id" : "65443", "city" : "BRINKTOWN", "loc" : [ -92.12310600000001, 38.067282 ], "pop" : 946, "state" : "MO" } +{ "_id" : "65444", "city" : "BUCYRUS", "loc" : [ -92.046536, 37.397197 ], "pop" : 1416, "state" : "MO" } +{ "_id" : "65446", "city" : "CHERRYVILLE", "loc" : [ -91.234807, 37.806601 ], "pop" : 861, "state" : "MO" } +{ "_id" : "65449", "city" : "COOK STATION", "loc" : [ -91.461631, 37.855234 ], "pop" : 347, "state" : "MO" } +{ "_id" : "65452", "city" : "CROCKER", "loc" : [ -92.269998, 37.944611 ], "pop" : 2954, "state" : "MO" } +{ "_id" : "65453", "city" : "CUBA", "loc" : [ -91.40814, 38.092553 ], "pop" : 7466, "state" : "MO" } +{ "_id" : "65456", "city" : "DAVISVILLE", "loc" : [ -91.13287200000001, 37.792596 ], "pop" : 286, "state" : "MO" } +{ "_id" : "65457", "city" : "DEVILS ELBOW", "loc" : [ -92.08569300000001, 37.85026 ], "pop" : 1717, "state" : "MO" } +{ "_id" : "65459", "city" : "DIXON", "loc" : [ -92.089662, 37.984766 ], "pop" : 4779, "state" : "MO" } +{ "_id" : "65461", "city" : "DUKE", "loc" : [ -91.99306300000001, 37.655001 ], "pop" : 166, "state" : "MO" } +{ "_id" : "65462", "city" : "EDGAR SPRINGS", "loc" : [ -91.890579, 37.736505 ], "pop" : 1026, "state" : "MO" } +{ "_id" : "65463", "city" : "ELDRIDGE", "loc" : [ -92.738202, 37.83456 ], "pop" : 892, "state" : "MO" } +{ "_id" : "65464", "city" : "ELK CREEK", "loc" : [ -91.998812, 37.217087 ], "pop" : 540, "state" : "MO" } +{ "_id" : "65466", "city" : "EMINENCE", "loc" : [ -91.451933, 37.162556 ], "pop" : 2450, "state" : "MO" } +{ "_id" : "65468", "city" : "EUNICE", "loc" : [ -91.723191, 37.212277 ], "pop" : 215, "state" : "MO" } +{ "_id" : "65470", "city" : "FALCON", "loc" : [ -92.34656200000001, 37.606099 ], "pop" : 561, "state" : "MO" } +{ "_id" : "65473", "city" : "FORT LEONARD WOO", "loc" : [ -92.126345, 37.759856 ], "pop" : 16140, "state" : "MO" } +{ "_id" : "65479", "city" : "HARTSHORN", "loc" : [ -91.683418, 37.284306 ], "pop" : 306, "state" : "MO" } +{ "_id" : "65483", "city" : "HOUSTON", "loc" : [ -91.95298200000001, 37.321829 ], "pop" : 4497, "state" : "MO" } +{ "_id" : "65484", "city" : "HUGGINS", "loc" : [ -92.148605, 37.266224 ], "pop" : 593, "state" : "MO" } +{ "_id" : "65486", "city" : "IBERIA", "loc" : [ -92.298897, 38.121926 ], "pop" : 3704, "state" : "MO" } +{ "_id" : "65501", "city" : "JADWIN", "loc" : [ -91.51588700000001, 37.473619 ], "pop" : 374, "state" : "MO" } +{ "_id" : "65529", "city" : "JEROME", "loc" : [ -91.99057000000001, 37.92543 ], "pop" : 391, "state" : "MO" } +{ "_id" : "65534", "city" : "LAQUEY", "loc" : [ -92.337901, 37.749378 ], "pop" : 798, "state" : "MO" } +{ "_id" : "65535", "city" : "LEASBURG", "loc" : [ -91.2488, 38.081054 ], "pop" : 1061, "state" : "MO" } +{ "_id" : "65536", "city" : "LEBANON", "loc" : [ -92.655029, 37.685049 ], "pop" : 20859, "state" : "MO" } +{ "_id" : "65540", "city" : "ANUTT", "loc" : [ -91.715862, 37.743731 ], "pop" : 635, "state" : "MO" } +{ "_id" : "65541", "city" : "LENOX", "loc" : [ -91.727735, 37.640757 ], "pop" : 640, "state" : "MO" } +{ "_id" : "65542", "city" : "LICKING", "loc" : [ -91.855585, 37.509082 ], "pop" : 3545, "state" : "MO" } +{ "_id" : "65543", "city" : "LYNCHBURG", "loc" : [ -92.320196, 37.505357 ], "pop" : 297, "state" : "MO" } +{ "_id" : "65548", "city" : "MOUNTAIN VIEW", "loc" : [ -91.709937, 36.989197 ], "pop" : 3721, "state" : "MO" } +{ "_id" : "65550", "city" : "NEWBURG", "loc" : [ -91.880683, 37.900778 ], "pop" : 2972, "state" : "MO" } +{ "_id" : "65552", "city" : "PLATO", "loc" : [ -92.170913, 37.512231 ], "pop" : 1479, "state" : "MO" } +{ "_id" : "65555", "city" : "RAYMONDVILLE", "loc" : [ -91.81308900000001, 37.356913 ], "pop" : 1145, "state" : "MO" } +{ "_id" : "65556", "city" : "RICHLAND", "loc" : [ -92.39624499999999, 37.852752 ], "pop" : 3643, "state" : "MO" } +{ "_id" : "65557", "city" : "ROBY", "loc" : [ -92.12218799999999, 37.496993 ], "pop" : 184, "state" : "MO" } +{ "_id" : "65559", "city" : "SAINT JAMES", "loc" : [ -91.60756499999999, 38.005622 ], "pop" : 6315, "state" : "MO" } +{ "_id" : "65560", "city" : "SALEM", "loc" : [ -91.525809, 37.616952 ], "pop" : 12088, "state" : "MO" } +{ "_id" : "65564", "city" : "SOLO", "loc" : [ -91.95990500000001, 37.167052 ], "pop" : 309, "state" : "MO" } +{ "_id" : "65565", "city" : "BERRYMAN", "loc" : [ -91.329337, 37.962998 ], "pop" : 4323, "state" : "MO" } +{ "_id" : "65566", "city" : "VIBURNUM", "loc" : [ -91.128922, 37.715066 ], "pop" : 844, "state" : "MO" } +{ "_id" : "65567", "city" : "STOUTLAND", "loc" : [ -92.51137300000001, 37.869338 ], "pop" : 1637, "state" : "MO" } +{ "_id" : "65570", "city" : "SUCCESS", "loc" : [ -92.003621, 37.480533 ], "pop" : 210, "state" : "MO" } +{ "_id" : "65571", "city" : "SUMMERSVILLE", "loc" : [ -91.68277, 37.148352 ], "pop" : 1199, "state" : "MO" } +{ "_id" : "65573", "city" : "TERESITA", "loc" : [ -91.596553, 36.999728 ], "pop" : 573, "state" : "MO" } +{ "_id" : "65580", "city" : "VICHY", "loc" : [ -91.77875, 38.097958 ], "pop" : 977, "state" : "MO" } +{ "_id" : "65582", "city" : "VIENNA", "loc" : [ -91.94220799999999, 38.191926 ], "pop" : 1956, "state" : "MO" } +{ "_id" : "65583", "city" : "SAINT ROBERT", "loc" : [ -92.198944, 37.817515 ], "pop" : 12431, "state" : "MO" } +{ "_id" : "65586", "city" : "WESCO", "loc" : [ -91.349028, 37.873185 ], "pop" : 460, "state" : "MO" } +{ "_id" : "65588", "city" : "WINONA", "loc" : [ -91.312059, 37.016869 ], "pop" : 2065, "state" : "MO" } +{ "_id" : "65589", "city" : "YUKON", "loc" : [ -91.824377, 37.231108 ], "pop" : 476, "state" : "MO" } +{ "_id" : "65590", "city" : "LONG LANE", "loc" : [ -92.930853, 37.580769 ], "pop" : 1589, "state" : "MO" } +{ "_id" : "65591", "city" : "MONTREAL", "loc" : [ -92.547031, 37.985108 ], "pop" : 759, "state" : "MO" } +{ "_id" : "65601", "city" : "ALDRICH", "loc" : [ -93.557642, 37.505667 ], "pop" : 1006, "state" : "MO" } +{ "_id" : "65603", "city" : "ARCOLA", "loc" : [ -93.858718, 37.531254 ], "pop" : 420, "state" : "MO" } +{ "_id" : "65604", "city" : "ASH GROVE", "loc" : [ -93.57813, 37.315972 ], "pop" : 1909, "state" : "MO" } +{ "_id" : "65605", "city" : "JENKINS", "loc" : [ -93.71238, 36.947661 ], "pop" : 10006, "state" : "MO" } +{ "_id" : "65606", "city" : "RIVERTON", "loc" : [ -91.392743, 36.702543 ], "pop" : 3224, "state" : "MO" } +{ "_id" : "65608", "city" : "AVA", "loc" : [ -92.67654400000001, 36.940717 ], "pop" : 8246, "state" : "MO" } +{ "_id" : "65609", "city" : "BAKERSFIELD", "loc" : [ -92.150679, 36.53323 ], "pop" : 560, "state" : "MO" } +{ "_id" : "65610", "city" : "BILLINGS", "loc" : [ -93.547629, 37.062841 ], "pop" : 2408, "state" : "MO" } +{ "_id" : "65611", "city" : "BLUE EYE", "loc" : [ -93.42994400000001, 36.54321 ], "pop" : 2148, "state" : "MO" } +{ "_id" : "65612", "city" : "BOIS D ARC", "loc" : [ -93.54472199999999, 37.221417 ], "pop" : 2410, "state" : "MO" } +{ "_id" : "65613", "city" : "BOLIVAR", "loc" : [ -93.412631, 37.608502 ], "pop" : 10671, "state" : "MO" } +{ "_id" : "65614", "city" : "BRADLEYVILLE", "loc" : [ -92.915116, 36.765908 ], "pop" : 428, "state" : "MO" } +{ "_id" : "65616", "city" : "MARVEL CAVE PARK", "loc" : [ -93.24378900000001, 36.655755 ], "pop" : 7658, "state" : "MO" } +{ "_id" : "65617", "city" : "BRIGHTON", "loc" : [ -93.36027900000001, 37.472807 ], "pop" : 920, "state" : "MO" } +{ "_id" : "65618", "city" : "BRIXEY", "loc" : [ -92.40264500000001, 36.758966 ], "pop" : 198, "state" : "MO" } +{ "_id" : "65619", "city" : "BROOKLINE STATIO", "loc" : [ -93.383467, 37.127184 ], "pop" : 4541, "state" : "MO" } +{ "_id" : "65620", "city" : "BRUNER", "loc" : [ -92.969241, 36.999002 ], "pop" : 737, "state" : "MO" } +{ "_id" : "65622", "city" : "BUFFALO", "loc" : [ -93.10422800000001, 37.549842 ], "pop" : 4176, "state" : "MO" } +{ "_id" : "65623", "city" : "BUTTERFIELD", "loc" : [ -93.912609, 36.745066 ], "pop" : 684, "state" : "MO" } +{ "_id" : "65624", "city" : "CAPE FAIR", "loc" : [ -93.524255, 36.693776 ], "pop" : 1783, "state" : "MO" } +{ "_id" : "65625", "city" : "CASSVILLE", "loc" : [ -93.84667, 36.678386 ], "pop" : 5416, "state" : "MO" } +{ "_id" : "65626", "city" : "CAULFIELD", "loc" : [ -92.067773, 36.60353 ], "pop" : 1941, "state" : "MO" } +{ "_id" : "65627", "city" : "CEDARCREEK", "loc" : [ -93.017239, 36.571013 ], "pop" : 407, "state" : "MO" } +{ "_id" : "65629", "city" : "CHADWICK", "loc" : [ -93.04508199999999, 36.922041 ], "pop" : 326, "state" : "MO" } +{ "_id" : "65630", "city" : "CHESTNUTRIDGE", "loc" : [ -93.10121700000001, 36.835283 ], "pop" : 188, "state" : "MO" } +{ "_id" : "65631", "city" : "CLEVER", "loc" : [ -93.44747, 37.034796 ], "pop" : 1728, "state" : "MO" } +{ "_id" : "65632", "city" : "CONWAY", "loc" : [ -92.7891, 37.508472 ], "pop" : 1451, "state" : "MO" } +{ "_id" : "65633", "city" : "CRANE", "loc" : [ -93.530339, 36.925771 ], "pop" : 2918, "state" : "MO" } +{ "_id" : "65634", "city" : "CROSS TIMBERS", "loc" : [ -93.19781, 38.023873 ], "pop" : 612, "state" : "MO" } +{ "_id" : "65635", "city" : "DADEVILLE", "loc" : [ -93.695562, 37.510458 ], "pop" : 774, "state" : "MO" } +{ "_id" : "65637", "city" : "DORA", "loc" : [ -92.237796, 36.756009 ], "pop" : 1163, "state" : "MO" } +{ "_id" : "65638", "city" : "DRURY", "loc" : [ -92.36639599999999, 36.93193 ], "pop" : 735, "state" : "MO" } +{ "_id" : "65640", "city" : "DUNNEGAN", "loc" : [ -93.52160499999999, 37.703137 ], "pop" : 755, "state" : "MO" } +{ "_id" : "65641", "city" : "EAGLE ROCK", "loc" : [ -93.733609, 36.548035 ], "pop" : 1062, "state" : "MO" } +{ "_id" : "65644", "city" : "ELKLAND", "loc" : [ -93.020983, 37.433591 ], "pop" : 1136, "state" : "MO" } +{ "_id" : "65646", "city" : "EVERTON", "loc" : [ -93.68943400000001, 37.235428 ], "pop" : 675, "state" : "MO" } +{ "_id" : "65647", "city" : "EXETER", "loc" : [ -93.970209, 36.681498 ], "pop" : 2264, "state" : "MO" } +{ "_id" : "65648", "city" : "FAIR GROVE", "loc" : [ -93.142824, 37.372143 ], "pop" : 2079, "state" : "MO" } +{ "_id" : "65649", "city" : "FAIR PLAY", "loc" : [ -93.60635499999999, 37.633496 ], "pop" : 1533, "state" : "MO" } +{ "_id" : "65650", "city" : "FLEMINGTON", "loc" : [ -93.447131, 37.780268 ], "pop" : 642, "state" : "MO" } +{ "_id" : "65652", "city" : "FORDLAND", "loc" : [ -92.911148, 37.14474 ], "pop" : 2080, "state" : "MO" } +{ "_id" : "65653", "city" : "FORSYTH", "loc" : [ -93.114968, 36.69548 ], "pop" : 3870, "state" : "MO" } +{ "_id" : "65654", "city" : "FREISTATT", "loc" : [ -93.89614400000001, 37.017563 ], "pop" : 515, "state" : "MO" } +{ "_id" : "65655", "city" : "GAINESVILLE", "loc" : [ -92.416151, 36.590101 ], "pop" : 1987, "state" : "MO" } +{ "_id" : "65656", "city" : "GALENA", "loc" : [ -93.48112999999999, 36.819835 ], "pop" : 2307, "state" : "MO" } +{ "_id" : "65657", "city" : "GARRISON", "loc" : [ -92.99850000000001, 36.860997 ], "pop" : 362, "state" : "MO" } +{ "_id" : "65658", "city" : "GOLDEN", "loc" : [ -93.62298800000001, 36.562486 ], "pop" : 1663, "state" : "MO" } +{ "_id" : "65659", "city" : "GOODSON", "loc" : [ -93.237528, 37.707534 ], "pop" : 379, "state" : "MO" } +{ "_id" : "65660", "city" : "GRAFF", "loc" : [ -92.264726, 37.326214 ], "pop" : 271, "state" : "MO" } +{ "_id" : "65661", "city" : "GREENFIELD", "loc" : [ -93.840689, 37.419662 ], "pop" : 2041, "state" : "MO" } +{ "_id" : "65662", "city" : "GROVESPRING", "loc" : [ -92.60014099999999, 37.494667 ], "pop" : 2121, "state" : "MO" } +{ "_id" : "65663", "city" : "HALF WAY", "loc" : [ -93.241989, 37.601795 ], "pop" : 1270, "state" : "MO" } +{ "_id" : "65666", "city" : "HARDENVILLE", "loc" : [ -92.367766, 36.592625 ], "pop" : 267, "state" : "MO" } +{ "_id" : "65667", "city" : "HARTVILLE", "loc" : [ -92.518058, 37.273453 ], "pop" : 3040, "state" : "MO" } +{ "_id" : "65668", "city" : "HERMITAGE", "loc" : [ -93.29790199999999, 37.896853 ], "pop" : 2575, "state" : "MO" } +{ "_id" : "65669", "city" : "HIGHLANDVILLE", "loc" : [ -93.26802000000001, 36.94077 ], "pop" : 2106, "state" : "MO" } +{ "_id" : "65672", "city" : "HOLLISTER", "loc" : [ -93.228585, 36.610727 ], "pop" : 5515, "state" : "MO" } +{ "_id" : "65674", "city" : "HUMANSVILLE", "loc" : [ -93.579531, 37.792282 ], "pop" : 1541, "state" : "MO" } +{ "_id" : "65675", "city" : "HURLEY", "loc" : [ -93.476803, 36.925425 ], "pop" : 766, "state" : "MO" } +{ "_id" : "65676", "city" : "ISABELLA", "loc" : [ -92.605277, 36.574924 ], "pop" : 563, "state" : "MO" } +{ "_id" : "65679", "city" : "KIRBYVILLE", "loc" : [ -93.168256, 36.642615 ], "pop" : 1794, "state" : "MO" } +{ "_id" : "65680", "city" : "KISSEE MILLS", "loc" : [ -93.037733, 36.670446 ], "pop" : 826, "state" : "MO" } +{ "_id" : "65681", "city" : "LAMPE", "loc" : [ -93.45160199999999, 36.576725 ], "pop" : 1087, "state" : "MO" } +{ "_id" : "65682", "city" : "LOCKWOOD", "loc" : [ -93.86715, 37.386605 ], "pop" : 4042, "state" : "MO" } +{ "_id" : "65685", "city" : "LOUISBURG", "loc" : [ -93.10069900000001, 37.682843 ], "pop" : 4530, "state" : "MO" } +{ "_id" : "65686", "city" : "KIMBERLING CITY", "loc" : [ -93.43720999999999, 36.63928 ], "pop" : 3208, "state" : "MO" } +{ "_id" : "65688", "city" : "BRANDSVILLE", "loc" : [ -91.735536, 36.584925 ], "pop" : 794, "state" : "MO" } +{ "_id" : "65689", "city" : "CABOOL", "loc" : [ -92.11440899999999, 37.131366 ], "pop" : 4127, "state" : "MO" } +{ "_id" : "65690", "city" : "COUCH", "loc" : [ -91.330991, 36.565268 ], "pop" : 995, "state" : "MO" } +{ "_id" : "65692", "city" : "KOSHKONONG", "loc" : [ -91.630411, 36.605553 ], "pop" : 727, "state" : "MO" } +{ "_id" : "65701", "city" : "MC CLURG", "loc" : [ -92.818018, 36.751465 ], "pop" : 76, "state" : "MO" } +{ "_id" : "65702", "city" : "MACOMB", "loc" : [ -92.48206999999999, 37.104947 ], "pop" : 533, "state" : "MO" } +{ "_id" : "65704", "city" : "MANSFIELD", "loc" : [ -92.593553, 37.1273 ], "pop" : 3368, "state" : "MO" } +{ "_id" : "65705", "city" : "MARIONVILLE", "loc" : [ -93.641345, 37.000906 ], "pop" : 3305, "state" : "MO" } +{ "_id" : "65706", "city" : "MARSHFIELD", "loc" : [ -92.925033, 37.331178 ], "pop" : 10026, "state" : "MO" } +{ "_id" : "65707", "city" : "MILLER", "loc" : [ -93.84218799999999, 37.222454 ], "pop" : 1986, "state" : "MO" } +{ "_id" : "65708", "city" : "MONETT", "loc" : [ -93.925766, 36.921242 ], "pop" : 9297, "state" : "MO" } +{ "_id" : "65710", "city" : "MORRISVILLE", "loc" : [ -93.427486, 37.468588 ], "pop" : 689, "state" : "MO" } +{ "_id" : "65711", "city" : "MOUNTAIN GROVE", "loc" : [ -92.28389300000001, 37.162638 ], "pop" : 7623, "state" : "MO" } +{ "_id" : "65712", "city" : "MOUNT VERNON", "loc" : [ -93.79763199999999, 37.104466 ], "pop" : 6685, "state" : "MO" } +{ "_id" : "65713", "city" : "NIANGUA", "loc" : [ -92.776337, 37.398537 ], "pop" : 2628, "state" : "MO" } +{ "_id" : "65714", "city" : "NIXA", "loc" : [ -93.29717599999999, 37.051154 ], "pop" : 11346, "state" : "MO" } +{ "_id" : "65715", "city" : "NOBLE", "loc" : [ -92.57686, 36.744052 ], "pop" : 103, "state" : "MO" } +{ "_id" : "65717", "city" : "NORWOOD", "loc" : [ -92.408209, 37.068696 ], "pop" : 1535, "state" : "MO" } +{ "_id" : "65720", "city" : "OLDFIELD", "loc" : [ -93.032526, 36.970416 ], "pop" : 409, "state" : "MO" } +{ "_id" : "65721", "city" : "OZARK", "loc" : [ -93.20221100000001, 37.016926 ], "pop" : 8437, "state" : "MO" } +{ "_id" : "65722", "city" : "PHILLIPSBURG", "loc" : [ -92.741631, 37.583177 ], "pop" : 1369, "state" : "MO" } +{ "_id" : "65723", "city" : "PIERCE CITY", "loc" : [ -94.00241, 36.972992 ], "pop" : 2795, "state" : "MO" } +{ "_id" : "65724", "city" : "PITTSBURG", "loc" : [ -93.335615, 37.8442 ], "pop" : 610, "state" : "MO" } +{ "_id" : "65725", "city" : "PLEASANT HOPE", "loc" : [ -93.26173300000001, 37.4615 ], "pop" : 2079, "state" : "MO" } +{ "_id" : "65727", "city" : "POLK", "loc" : [ -93.294065, 37.752928 ], "pop" : 725, "state" : "MO" } +{ "_id" : "65728", "city" : "PONCE DE LEON", "loc" : [ -93.36705499999999, 36.89054 ], "pop" : 435, "state" : "MO" } +{ "_id" : "65729", "city" : "PONTIAC", "loc" : [ -92.561221, 36.524804 ], "pop" : 293, "state" : "MO" } +{ "_id" : "65730", "city" : "POWELL", "loc" : [ -94.167541, 36.556252 ], "pop" : 1681, "state" : "MO" } +{ "_id" : "65731", "city" : "POWERSITE", "loc" : [ -93.09001499999999, 36.630656 ], "pop" : 742, "state" : "MO" } +{ "_id" : "65732", "city" : "PRESTON", "loc" : [ -93.171295, 37.939025 ], "pop" : 753, "state" : "MO" } +{ "_id" : "65733", "city" : "PROTEM", "loc" : [ -92.829689, 36.546336 ], "pop" : 375, "state" : "MO" } +{ "_id" : "65734", "city" : "PURDY", "loc" : [ -93.916376, 36.806917 ], "pop" : 2906, "state" : "MO" } +{ "_id" : "65735", "city" : "QUINCY", "loc" : [ -93.471281, 38.002925 ], "pop" : 241, "state" : "MO" } +{ "_id" : "65737", "city" : "BRANSON WEST", "loc" : [ -93.372182, 36.694658 ], "pop" : 4426, "state" : "MO" } +{ "_id" : "65738", "city" : "REPUBLIC", "loc" : [ -93.480041, 37.123017 ], "pop" : 8312, "state" : "MO" } +{ "_id" : "65739", "city" : "RIDGEDALE", "loc" : [ -93.27780799999999, 36.524662 ], "pop" : 809, "state" : "MO" } +{ "_id" : "65740", "city" : "ROCKAWAY BEACH", "loc" : [ -93.17153500000001, 36.713686 ], "pop" : 1354, "state" : "MO" } +{ "_id" : "65742", "city" : "ROGERSVILLE", "loc" : [ -93.09644900000001, 37.131047 ], "pop" : 9409, "state" : "MO" } +{ "_id" : "65744", "city" : "RUETER", "loc" : [ -92.918792, 36.631415 ], "pop" : 180, "state" : "MO" } +{ "_id" : "65745", "city" : "SELIGMAN", "loc" : [ -93.935851, 36.527593 ], "pop" : 1392, "state" : "MO" } +{ "_id" : "65746", "city" : "SEYMOUR", "loc" : [ -92.785659, 37.166726 ], "pop" : 5311, "state" : "MO" } +{ "_id" : "65747", "city" : "SHELL KNOB", "loc" : [ -93.624855, 36.616672 ], "pop" : 821, "state" : "MO" } +{ "_id" : "65752", "city" : "SOUTH GREENFIELD", "loc" : [ -93.844482, 37.374256 ], "pop" : 248, "state" : "MO" } +{ "_id" : "65753", "city" : "SPARTA", "loc" : [ -93.106483, 36.977524 ], "pop" : 1879, "state" : "MO" } +{ "_id" : "65754", "city" : "SPOKANE", "loc" : [ -93.275447, 36.863639 ], "pop" : 968, "state" : "MO" } +{ "_id" : "65755", "city" : "SQUIRES", "loc" : [ -92.58444299999999, 36.850406 ], "pop" : 536, "state" : "MO" } +{ "_id" : "65756", "city" : "STOTTS CITY", "loc" : [ -93.954329, 37.103148 ], "pop" : 497, "state" : "MO" } +{ "_id" : "65757", "city" : "STRAFFORD", "loc" : [ -93.10663, 37.279718 ], "pop" : 3226, "state" : "MO" } +{ "_id" : "65758", "city" : "SYCAMORE", "loc" : [ -92.354355, 36.67179 ], "pop" : 97, "state" : "MO" } +{ "_id" : "65759", "city" : "TANEYVILLE", "loc" : [ -93.027951, 36.740497 ], "pop" : 731, "state" : "MO" } +{ "_id" : "65760", "city" : "TECUMSEH", "loc" : [ -92.259782, 36.58751 ], "pop" : 444, "state" : "MO" } +{ "_id" : "65761", "city" : "DUGGINSVILLE", "loc" : [ -92.70186099999999, 36.569019 ], "pop" : 962, "state" : "MO" } +{ "_id" : "65762", "city" : "NOTTINGHILL", "loc" : [ -92.65778899999999, 36.707546 ], "pop" : 617, "state" : "MO" } +{ "_id" : "65764", "city" : "TUNAS", "loc" : [ -92.980788, 37.839196 ], "pop" : 827, "state" : "MO" } +{ "_id" : "65766", "city" : "UDALL", "loc" : [ -92.23345, 36.525291 ], "pop" : 184, "state" : "MO" } +{ "_id" : "65767", "city" : "URBANA", "loc" : [ -93.150972, 37.85233 ], "pop" : 755, "state" : "MO" } +{ "_id" : "65768", "city" : "VANZANT", "loc" : [ -92.21006800000001, 36.977829 ], "pop" : 1048, "state" : "MO" } +{ "_id" : "65769", "city" : "VERONA", "loc" : [ -93.800505, 36.936964 ], "pop" : 2021, "state" : "MO" } +{ "_id" : "65770", "city" : "WALNUT GROVE", "loc" : [ -93.504356, 37.394253 ], "pop" : 2374, "state" : "MO" } +{ "_id" : "65771", "city" : "WALNUT SHADE", "loc" : [ -93.21482399999999, 36.770395 ], "pop" : 722, "state" : "MO" } +{ "_id" : "65772", "city" : "WASHBURN", "loc" : [ -93.991974, 36.580703 ], "pop" : 1526, "state" : "MO" } +{ "_id" : "65773", "city" : "SOUDER", "loc" : [ -92.58991, 36.782631 ], "pop" : 215, "state" : "MO" } +{ "_id" : "65774", "city" : "WEAUBLEAU", "loc" : [ -93.53435500000001, 37.880393 ], "pop" : 814, "state" : "MO" } +{ "_id" : "65775", "city" : "WEST PLAINS", "loc" : [ -91.871681, 36.728418 ], "pop" : 16362, "state" : "MO" } +{ "_id" : "65776", "city" : "SOUTH FORK", "loc" : [ -91.91248400000001, 36.629312 ], "pop" : 194, "state" : "MO" } +{ "_id" : "65777", "city" : "MOODY", "loc" : [ -91.989756, 36.533018 ], "pop" : 328, "state" : "MO" } +{ "_id" : "65778", "city" : "MYRTLE", "loc" : [ -91.270584, 36.521697 ], "pop" : 404, "state" : "MO" } +{ "_id" : "65779", "city" : "WHEATLAND", "loc" : [ -93.398129, 37.910283 ], "pop" : 1730, "state" : "MO" } +{ "_id" : "65781", "city" : "WILLARD", "loc" : [ -93.425861, 37.296153 ], "pop" : 3690, "state" : "MO" } +{ "_id" : "65783", "city" : "WINDYVILLE", "loc" : [ -92.93789099999999, 37.718209 ], "pop" : 769, "state" : "MO" } +{ "_id" : "65784", "city" : "ZANONI", "loc" : [ -92.304677, 36.692518 ], "pop" : 274, "state" : "MO" } +{ "_id" : "65785", "city" : "STOCKTON", "loc" : [ -93.796013, 37.72408 ], "pop" : 4635, "state" : "MO" } +{ "_id" : "65786", "city" : "MACKS CREEK", "loc" : [ -92.96034899999999, 37.961563 ], "pop" : 1741, "state" : "MO" } +{ "_id" : "65787", "city" : "ROACH", "loc" : [ -92.807456, 38.008825 ], "pop" : 1542, "state" : "MO" } +{ "_id" : "65788", "city" : "PEACE VALLEY", "loc" : [ -91.769598, 36.837974 ], "pop" : 1074, "state" : "MO" } +{ "_id" : "65789", "city" : "POMONA", "loc" : [ -91.913668, 36.84409 ], "pop" : 1309, "state" : "MO" } +{ "_id" : "65790", "city" : "POTTERSVILLE", "loc" : [ -92.044044, 36.706822 ], "pop" : 1227, "state" : "MO" } +{ "_id" : "65791", "city" : "THAYER", "loc" : [ -91.541803, 36.532714 ], "pop" : 3473, "state" : "MO" } +{ "_id" : "65793", "city" : "WILLOW SPRINGS", "loc" : [ -91.940545, 36.995812 ], "pop" : 5968, "state" : "MO" } +{ "_id" : "65802", "city" : "SPRINGFIELD", "loc" : [ -93.29903, 37.211663 ], "pop" : 33216, "state" : "MO" } +{ "_id" : "65803", "city" : "SPRINGFIELD", "loc" : [ -93.29123199999999, 37.259327 ], "pop" : 41361, "state" : "MO" } +{ "_id" : "65804", "city" : "SPRINGFIELD", "loc" : [ -93.252154, 37.165361 ], "pop" : 33507, "state" : "MO" } +{ "_id" : "65806", "city" : "SPRINGFIELD", "loc" : [ -93.29710799999999, 37.203057 ], "pop" : 11386, "state" : "MO" } +{ "_id" : "65807", "city" : "SPRINGFIELD", "loc" : [ -93.308457, 37.166799 ], "pop" : 46691, "state" : "MO" } +{ "_id" : "65809", "city" : "SPRINGFIELD", "loc" : [ -93.205742, 37.185223 ], "pop" : 5606, "state" : "MO" } +{ "_id" : "65810", "city" : "SPRINGFIELD", "loc" : [ -93.28959399999999, 37.113647 ], "pop" : 3982, "state" : "MO" } +{ "_id" : "66002", "city" : "ATCHISON", "loc" : [ -95.130408, 39.559411 ], "pop" : 13463, "state" : "KS" } +{ "_id" : "66006", "city" : "BALDWIN CITY", "loc" : [ -95.227621, 38.795308 ], "pop" : 6990, "state" : "KS" } +{ "_id" : "66007", "city" : "BASEHOR", "loc" : [ -94.95703399999999, 39.128137 ], "pop" : 5182, "state" : "KS" } +{ "_id" : "66008", "city" : "BENDENA", "loc" : [ -95.176458, 39.717379 ], "pop" : 334, "state" : "KS" } +{ "_id" : "66010", "city" : "BLUE MOUND", "loc" : [ -95.005269, 38.090772 ], "pop" : 484, "state" : "KS" } +{ "_id" : "66012", "city" : "LAKE OF THE FORE", "loc" : [ -94.886098, 39.068455 ], "pop" : 6315, "state" : "KS" } +{ "_id" : "66013", "city" : "BUCYRUS", "loc" : [ -94.742947, 38.687017 ], "pop" : 989, "state" : "KS" } +{ "_id" : "66014", "city" : "CENTERVILLE", "loc" : [ -94.993431, 38.213032 ], "pop" : 381, "state" : "KS" } +{ "_id" : "66015", "city" : "COLONY", "loc" : [ -95.328705, 38.076147 ], "pop" : 806, "state" : "KS" } +{ "_id" : "66016", "city" : "CUMMINGS", "loc" : [ -95.286281, 39.482976 ], "pop" : 647, "state" : "KS" } +{ "_id" : "66017", "city" : "DENTON", "loc" : [ -95.274377, 39.715358 ], "pop" : 378, "state" : "KS" } +{ "_id" : "66018", "city" : "DE SOTO", "loc" : [ -94.964713, 38.956563 ], "pop" : 4167, "state" : "KS" } +{ "_id" : "66020", "city" : "EASTON", "loc" : [ -95.05435199999999, 39.362054 ], "pop" : 2801, "state" : "KS" } +{ "_id" : "66021", "city" : "EDGERTON", "loc" : [ -95.009377, 38.781084 ], "pop" : 2101, "state" : "KS" } +{ "_id" : "66023", "city" : "EFFINGHAM", "loc" : [ -95.41982, 39.502259 ], "pop" : 1303, "state" : "KS" } +{ "_id" : "66025", "city" : "EUDORA", "loc" : [ -95.102206, 38.933043 ], "pop" : 4011, "state" : "KS" } +{ "_id" : "66026", "city" : "FONTANA", "loc" : [ -94.871788, 38.410153 ], "pop" : 774, "state" : "KS" } +{ "_id" : "66027", "city" : "FORT LEAVENWORTH", "loc" : [ -94.926547, 39.348508 ], "pop" : 12630, "state" : "KS" } +{ "_id" : "66030", "city" : "GARDNER", "loc" : [ -94.91567499999999, 38.80754 ], "pop" : 5356, "state" : "KS" } +{ "_id" : "66031", "city" : "INDUSTRIAL AIRPO", "loc" : [ -94.93226300000001, 38.850264 ], "pop" : 723, "state" : "KS" } +{ "_id" : "66032", "city" : "GARNETT", "loc" : [ -95.25936799999999, 38.285907 ], "pop" : 5081, "state" : "KS" } +{ "_id" : "66033", "city" : "GREELEY", "loc" : [ -95.11875999999999, 38.352428 ], "pop" : 671, "state" : "KS" } +{ "_id" : "66035", "city" : "HIGHLAND", "loc" : [ -95.258335, 39.860752 ], "pop" : 1369, "state" : "KS" } +{ "_id" : "66036", "city" : "HILLSDALE", "loc" : [ -94.85836999999999, 38.684463 ], "pop" : 1969, "state" : "KS" } +{ "_id" : "66039", "city" : "MILDRED", "loc" : [ -95.145167, 38.091497 ], "pop" : 441, "state" : "KS" } +{ "_id" : "66040", "city" : "LA CYGNE", "loc" : [ -94.759264, 38.343402 ], "pop" : 1958, "state" : "KS" } +{ "_id" : "66041", "city" : "HURON", "loc" : [ -95.308902, 39.591202 ], "pop" : 890, "state" : "KS" } +{ "_id" : "66042", "city" : "LANE", "loc" : [ -95.097886, 38.437499 ], "pop" : 582, "state" : "KS" } +{ "_id" : "66043", "city" : "LANSING", "loc" : [ -94.899379, 39.250191 ], "pop" : 8145, "state" : "KS" } +{ "_id" : "66044", "city" : "LAWRENCE", "loc" : [ -95.241789, 38.964402 ], "pop" : 29968, "state" : "KS" } +{ "_id" : "66046", "city" : "LAWRENCE", "loc" : [ -95.24203, 38.936925 ], "pop" : 16411, "state" : "KS" } +{ "_id" : "66047", "city" : "LAWRENCE", "loc" : [ -95.27786500000001, 38.940714 ], "pop" : 9234, "state" : "KS" } +{ "_id" : "66048", "city" : "LEAVENWORTH", "loc" : [ -94.933865, 39.301546 ], "pop" : 28028, "state" : "KS" } +{ "_id" : "66049", "city" : "LAWRENCE", "loc" : [ -95.27686199999999, 38.970433 ], "pop" : 12600, "state" : "KS" } +{ "_id" : "66050", "city" : "LECOMPTON", "loc" : [ -95.402519, 39.000125 ], "pop" : 2701, "state" : "KS" } +{ "_id" : "66052", "city" : "LINWOOD", "loc" : [ -94.991388, 39.020627 ], "pop" : 2036, "state" : "KS" } +{ "_id" : "66053", "city" : "LOUISBURG", "loc" : [ -94.68290500000001, 38.607341 ], "pop" : 4720, "state" : "KS" } +{ "_id" : "66054", "city" : "MC LOUTH", "loc" : [ -95.218295, 39.166763 ], "pop" : 2139, "state" : "KS" } +{ "_id" : "66056", "city" : "MOUND CITY", "loc" : [ -94.81863199999999, 38.155954 ], "pop" : 1644, "state" : "KS" } +{ "_id" : "66058", "city" : "MUSCOTAH", "loc" : [ -95.49845000000001, 39.588046 ], "pop" : 631, "state" : "KS" } +{ "_id" : "66060", "city" : "NORTONVILLE", "loc" : [ -95.32357, 39.409532 ], "pop" : 932, "state" : "KS" } +{ "_id" : "66061", "city" : "OLATHE", "loc" : [ -94.820359, 38.886548 ], "pop" : 31694, "state" : "KS" } +{ "_id" : "66062", "city" : "OLATHE", "loc" : [ -94.77516799999999, 38.873287 ], "pop" : 32845, "state" : "KS" } +{ "_id" : "66064", "city" : "OSAWATOMIE", "loc" : [ -94.96199, 38.488803 ], "pop" : 5887, "state" : "KS" } +{ "_id" : "66066", "city" : "OSKALOOSA", "loc" : [ -95.313546, 39.215183 ], "pop" : 1832, "state" : "KS" } +{ "_id" : "66067", "city" : "OTTAWA", "loc" : [ -95.274519, 38.614247 ], "pop" : 13830, "state" : "KS" } +{ "_id" : "66070", "city" : "OZAWKIE", "loc" : [ -95.44038999999999, 39.213648 ], "pop" : 2123, "state" : "KS" } +{ "_id" : "66071", "city" : "PAOLA", "loc" : [ -94.893694, 38.571999 ], "pop" : 9325, "state" : "KS" } +{ "_id" : "66072", "city" : "PARKER", "loc" : [ -94.98707400000001, 38.330311 ], "pop" : 830, "state" : "KS" } +{ "_id" : "66073", "city" : "PERRY", "loc" : [ -95.373122, 39.087524 ], "pop" : 2031, "state" : "KS" } +{ "_id" : "66075", "city" : "PLEASANTON", "loc" : [ -94.70567, 38.182285 ], "pop" : 2050, "state" : "KS" } +{ "_id" : "66076", "city" : "POMONA", "loc" : [ -95.448915, 38.615255 ], "pop" : 1680, "state" : "KS" } +{ "_id" : "66078", "city" : "PRINCETON", "loc" : [ -95.276444, 38.484684 ], "pop" : 650, "state" : "KS" } +{ "_id" : "66079", "city" : "RANTOUL", "loc" : [ -95.12342099999999, 38.566594 ], "pop" : 1195, "state" : "KS" } +{ "_id" : "66080", "city" : "RICHMOND", "loc" : [ -95.24887099999999, 38.407434 ], "pop" : 833, "state" : "KS" } +{ "_id" : "66083", "city" : "SPRING HILL", "loc" : [ -94.82459299999999, 38.763088 ], "pop" : 4024, "state" : "KS" } +{ "_id" : "66085", "city" : "STILWELL", "loc" : [ -94.664282, 38.790157 ], "pop" : 4836, "state" : "KS" } +{ "_id" : "66086", "city" : "TONGANOXIE", "loc" : [ -95.10505499999999, 39.102614 ], "pop" : 5556, "state" : "KS" } +{ "_id" : "66087", "city" : "SEVERANCE", "loc" : [ -95.066345, 39.778746 ], "pop" : 2422, "state" : "KS" } +{ "_id" : "66088", "city" : "VALLEY FALLS", "loc" : [ -95.46699599999999, 39.34843 ], "pop" : 2000, "state" : "KS" } +{ "_id" : "66090", "city" : "WATHENA", "loc" : [ -94.92546, 39.762505 ], "pop" : 2825, "state" : "KS" } +{ "_id" : "66091", "city" : "WELDA", "loc" : [ -95.309606, 38.168615 ], "pop" : 286, "state" : "KS" } +{ "_id" : "66092", "city" : "WELLSVILLE", "loc" : [ -95.091573, 38.713676 ], "pop" : 2178, "state" : "KS" } +{ "_id" : "66093", "city" : "WESTPHALIA", "loc" : [ -95.46651199999999, 38.171792 ], "pop" : 518, "state" : "KS" } +{ "_id" : "66094", "city" : "WHITE CLOUD", "loc" : [ -95.298203, 39.962717 ], "pop" : 379, "state" : "KS" } +{ "_id" : "66095", "city" : "WILLIAMSBURG", "loc" : [ -95.42261499999999, 38.490166 ], "pop" : 929, "state" : "KS" } +{ "_id" : "66097", "city" : "WINCHESTER", "loc" : [ -95.26958399999999, 39.324531 ], "pop" : 1191, "state" : "KS" } +{ "_id" : "66101", "city" : "KANSAS CITY", "loc" : [ -94.627139, 39.115733 ], "pop" : 16147, "state" : "KS" } +{ "_id" : "66102", "city" : "KANSAS CITY", "loc" : [ -94.669337, 39.113247 ], "pop" : 27909, "state" : "KS" } +{ "_id" : "66103", "city" : "ROSEDALE", "loc" : [ -94.625105, 39.056193 ], "pop" : 14477, "state" : "KS" } +{ "_id" : "66104", "city" : "KANSAS CITY", "loc" : [ -94.679158, 39.137512 ], "pop" : 32071, "state" : "KS" } +{ "_id" : "66105", "city" : "KANSAS CITY", "loc" : [ -94.63564599999999, 39.085025 ], "pop" : 3478, "state" : "KS" } +{ "_id" : "66106", "city" : "LAKE QUIVIRA", "loc" : [ -94.68739600000001, 39.061187 ], "pop" : 25298, "state" : "KS" } +{ "_id" : "66109", "city" : "KANSAS CITY", "loc" : [ -94.78559799999999, 39.143376 ], "pop" : 14656, "state" : "KS" } +{ "_id" : "66111", "city" : "KANSAS CITY", "loc" : [ -94.780593, 39.080332 ], "pop" : 11189, "state" : "KS" } +{ "_id" : "66112", "city" : "KANSAS CITY", "loc" : [ -94.76402400000001, 39.115999 ], "pop" : 11461, "state" : "KS" } +{ "_id" : "66115", "city" : "KANSAS CITY", "loc" : [ -94.61464700000001, 39.114534 ], "pop" : 0, "state" : "KS" } +{ "_id" : "66118", "city" : "KANSAS CITY", "loc" : [ -94.608361, 39.096867 ], "pop" : 0, "state" : "KS" } +{ "_id" : "66202", "city" : "COUNTRYSIDE", "loc" : [ -94.66699800000001, 39.025376 ], "pop" : 17916, "state" : "KS" } +{ "_id" : "66203", "city" : "SHAWNEE", "loc" : [ -94.708303, 39.019802 ], "pop" : 20922, "state" : "KS" } +{ "_id" : "66204", "city" : "OVERLAND PARK", "loc" : [ -94.674769, 38.992488 ], "pop" : 18226, "state" : "KS" } +{ "_id" : "66205", "city" : "MISSION", "loc" : [ -94.631806, 39.031944 ], "pop" : 14871, "state" : "KS" } +{ "_id" : "66206", "city" : "LEAWOOD", "loc" : [ -94.61964399999999, 38.960567 ], "pop" : 9797, "state" : "KS" } +{ "_id" : "66207", "city" : "SHAWNEE MISSION", "loc" : [ -94.64519300000001, 38.957472 ], "pop" : 13863, "state" : "KS" } +{ "_id" : "66208", "city" : "PRAIRIE VILLAGE", "loc" : [ -94.631513, 38.996812 ], "pop" : 22047, "state" : "KS" } +{ "_id" : "66209", "city" : "LEAWOOD", "loc" : [ -94.634047, 38.901798 ], "pop" : 12176, "state" : "KS" } +{ "_id" : "66210", "city" : "LENEXA", "loc" : [ -94.70478799999999, 38.922007 ], "pop" : 17576, "state" : "KS" } +{ "_id" : "66211", "city" : "LEAWOOD", "loc" : [ -94.637991, 38.925956 ], "pop" : 2155, "state" : "KS" } +{ "_id" : "66212", "city" : "OVERLAND PARK", "loc" : [ -94.68414, 38.958954 ], "pop" : 36187, "state" : "KS" } +{ "_id" : "66213", "city" : "OVERLAND PARK", "loc" : [ -94.700344, 38.904899 ], "pop" : 7368, "state" : "KS" } +{ "_id" : "66214", "city" : "LENEXA", "loc" : [ -94.71326500000001, 38.959929 ], "pop" : 12365, "state" : "KS" } +{ "_id" : "66215", "city" : "LENEXA", "loc" : [ -94.739947, 38.963028 ], "pop" : 24051, "state" : "KS" } +{ "_id" : "66216", "city" : "SHAWNEE", "loc" : [ -94.73823400000001, 39.009289 ], "pop" : 19644, "state" : "KS" } +{ "_id" : "66217", "city" : "SHAWNEE", "loc" : [ -94.779663, 39.004835 ], "pop" : 2261, "state" : "KS" } +{ "_id" : "66218", "city" : "SHAWNEE", "loc" : [ -94.823913, 39.017431 ], "pop" : 1828, "state" : "KS" } +{ "_id" : "66219", "city" : "LENEXA", "loc" : [ -94.773145, 38.961896 ], "pop" : 6090, "state" : "KS" } +{ "_id" : "66220", "city" : "LENEXA", "loc" : [ -94.82999700000001, 38.96884 ], "pop" : 626, "state" : "KS" } +{ "_id" : "66221", "city" : "STANLEY", "loc" : [ -94.706745, 38.85272 ], "pop" : 1186, "state" : "KS" } +{ "_id" : "66223", "city" : "STANLEY", "loc" : [ -94.664467, 38.848477 ], "pop" : 3539, "state" : "KS" } +{ "_id" : "66224", "city" : "STANLEY", "loc" : [ -94.62890299999999, 38.867526 ], "pop" : 713, "state" : "KS" } +{ "_id" : "66226", "city" : "SHAWNEE", "loc" : [ -94.873017, 38.997764 ], "pop" : 2613, "state" : "KS" } +{ "_id" : "66227", "city" : "LENEXA", "loc" : [ -94.840082, 38.99416 ], "pop" : 273, "state" : "KS" } +{ "_id" : "66401", "city" : "ALMA", "loc" : [ -96.292323, 39.009206 ], "pop" : 2186, "state" : "KS" } +{ "_id" : "66402", "city" : "AUBURN", "loc" : [ -95.81993799999999, 38.916673 ], "pop" : 2157, "state" : "KS" } +{ "_id" : "66403", "city" : "AXTELL", "loc" : [ -96.26755900000001, 39.870676 ], "pop" : 669, "state" : "KS" } +{ "_id" : "66404", "city" : "BAILEYVILLE", "loc" : [ -96.180136, 39.881621 ], "pop" : 613, "state" : "KS" } +{ "_id" : "66406", "city" : "BEATTIE", "loc" : [ -96.428618, 39.89884 ], "pop" : 739, "state" : "KS" } +{ "_id" : "66407", "city" : "BELVUE", "loc" : [ -96.186635, 39.2273 ], "pop" : 321, "state" : "KS" } +{ "_id" : "66408", "city" : "BERN", "loc" : [ -95.961028, 39.957051 ], "pop" : 457, "state" : "KS" } +{ "_id" : "66409", "city" : "BERRYTON", "loc" : [ -95.582487, 38.944182 ], "pop" : 1939, "state" : "KS" } +{ "_id" : "66411", "city" : "BLUE RAPIDS", "loc" : [ -96.63594999999999, 39.674974 ], "pop" : 1552, "state" : "KS" } +{ "_id" : "66412", "city" : "BREMEN", "loc" : [ -96.745846, 39.877473 ], "pop" : 347, "state" : "KS" } +{ "_id" : "66413", "city" : "BURLINGAME", "loc" : [ -95.840017, 38.763395 ], "pop" : 1994, "state" : "KS" } +{ "_id" : "66414", "city" : "CARBONDALE", "loc" : [ -95.687083, 38.820622 ], "pop" : 2502, "state" : "KS" } +{ "_id" : "66415", "city" : "CENTRALIA", "loc" : [ -96.14860400000001, 39.738051 ], "pop" : 782, "state" : "KS" } +{ "_id" : "66416", "city" : "CIRCLEVILLE", "loc" : [ -95.851708, 39.515472 ], "pop" : 466, "state" : "KS" } +{ "_id" : "66417", "city" : "CORNING", "loc" : [ -96.077589, 39.657015 ], "pop" : 656, "state" : "KS" } +{ "_id" : "66418", "city" : "DELIA", "loc" : [ -95.96080499999999, 39.265453 ], "pop" : 557, "state" : "KS" } +{ "_id" : "66419", "city" : "DENISON", "loc" : [ -95.632851, 39.415307 ], "pop" : 604, "state" : "KS" } +{ "_id" : "66420", "city" : "DOVER", "loc" : [ -95.89854699999999, 39.019223 ], "pop" : 1220, "state" : "KS" } +{ "_id" : "66422", "city" : "EMMETT", "loc" : [ -96.059325, 39.304819 ], "pop" : 342, "state" : "KS" } +{ "_id" : "66423", "city" : "ESKRIDGE", "loc" : [ -96.10158300000001, 38.851361 ], "pop" : 771, "state" : "KS" } +{ "_id" : "66424", "city" : "EVEREST", "loc" : [ -95.413802, 39.687972 ], "pop" : 525, "state" : "KS" } +{ "_id" : "66425", "city" : "FAIRVIEW", "loc" : [ -95.711012, 39.844504 ], "pop" : 712, "state" : "KS" } +{ "_id" : "66427", "city" : "WINIFRED", "loc" : [ -96.42832300000001, 39.718996 ], "pop" : 1418, "state" : "KS" } +{ "_id" : "66428", "city" : "GOFF", "loc" : [ -95.95739399999999, 39.665388 ], "pop" : 537, "state" : "KS" } +{ "_id" : "66429", "city" : "GRANTVILLE", "loc" : [ -95.539733, 39.097208 ], "pop" : 753, "state" : "KS" } +{ "_id" : "66431", "city" : "HARVEYVILLE", "loc" : [ -95.996239, 38.857413 ], "pop" : 1065, "state" : "KS" } +{ "_id" : "66432", "city" : "HAVENSVILLE", "loc" : [ -96.07688400000001, 39.494197 ], "pop" : 417, "state" : "KS" } +{ "_id" : "66433", "city" : "HERKIMER", "loc" : [ -96.746861, 39.956337 ], "pop" : 270, "state" : "KS" } +{ "_id" : "66434", "city" : "RESERVE", "loc" : [ -95.52890499999999, 39.871563 ], "pop" : 5297, "state" : "KS" } +{ "_id" : "66436", "city" : "HOLTON", "loc" : [ -95.752498, 39.443624 ], "pop" : 5625, "state" : "KS" } +{ "_id" : "66438", "city" : "HOME", "loc" : [ -96.529201, 39.854542 ], "pop" : 362, "state" : "KS" } +{ "_id" : "66439", "city" : "HORTON", "loc" : [ -95.529858, 39.678883 ], "pop" : 2556, "state" : "KS" } +{ "_id" : "66440", "city" : "HOYT", "loc" : [ -95.686742, 39.255249 ], "pop" : 1812, "state" : "KS" } +{ "_id" : "66441", "city" : "JUNCTION CITY", "loc" : [ -96.839553, 39.029913 ], "pop" : 24386, "state" : "KS" } +{ "_id" : "66442", "city" : "FORT RILEY", "loc" : [ -96.78733800000001, 39.061947 ], "pop" : 5363, "state" : "KS" } +{ "_id" : "66449", "city" : "LEONARDVILLE", "loc" : [ -96.83122299999999, 39.365151 ], "pop" : 1274, "state" : "KS" } +{ "_id" : "66450", "city" : "LOUISVILLE", "loc" : [ -96.316954, 39.267048 ], "pop" : 318, "state" : "KS" } +{ "_id" : "66451", "city" : "LYNDON", "loc" : [ -95.680226, 38.635649 ], "pop" : 1879, "state" : "KS" } +{ "_id" : "66502", "city" : "MANHATTAN", "loc" : [ -96.585776, 39.193757 ], "pop" : 50178, "state" : "KS" } +{ "_id" : "66507", "city" : "MAPLE HILL", "loc" : [ -96.018727, 39.069456 ], "pop" : 796, "state" : "KS" } +{ "_id" : "66508", "city" : "MARYSVILLE", "loc" : [ -96.642183, 39.842827 ], "pop" : 4104, "state" : "KS" } +{ "_id" : "66509", "city" : "MAYETTA", "loc" : [ -95.692753, 39.348915 ], "pop" : 1132, "state" : "KS" } +{ "_id" : "66510", "city" : "MELVERN", "loc" : [ -95.628986, 38.50266 ], "pop" : 856, "state" : "KS" } +{ "_id" : "66512", "city" : "MERIDEN", "loc" : [ -95.54763699999999, 39.203832 ], "pop" : 2299, "state" : "KS" } +{ "_id" : "66514", "city" : "MILFORD", "loc" : [ -96.91005, 39.169173 ], "pop" : 704, "state" : "KS" } +{ "_id" : "66515", "city" : "MORRILL", "loc" : [ -95.712048, 39.935592 ], "pop" : 591, "state" : "KS" } +{ "_id" : "66516", "city" : "NETAWAKA", "loc" : [ -95.72700399999999, 39.606298 ], "pop" : 371, "state" : "KS" } +{ "_id" : "66517", "city" : "OGDEN", "loc" : [ -96.70007699999999, 39.119219 ], "pop" : 2049, "state" : "KS" } +{ "_id" : "66518", "city" : "OKETO", "loc" : [ -96.623525, 39.95984 ], "pop" : 318, "state" : "KS" } +{ "_id" : "66520", "city" : "OLSBURG", "loc" : [ -96.60024900000001, 39.412506 ], "pop" : 581, "state" : "KS" } +{ "_id" : "66521", "city" : "DULUTH", "loc" : [ -96.17610500000001, 39.472974 ], "pop" : 1358, "state" : "KS" } +{ "_id" : "66522", "city" : "ONEIDA", "loc" : [ -95.958097, 39.866087 ], "pop" : 247, "state" : "KS" } +{ "_id" : "66523", "city" : "OSAGE CITY", "loc" : [ -95.830303, 38.626896 ], "pop" : 3627, "state" : "KS" } +{ "_id" : "66524", "city" : "OVERBROOK", "loc" : [ -95.561632, 38.792173 ], "pop" : 1630, "state" : "KS" } +{ "_id" : "66526", "city" : "PAXICO", "loc" : [ -96.181777, 39.080285 ], "pop" : 1153, "state" : "KS" } +{ "_id" : "66527", "city" : "POWHATTAN", "loc" : [ -95.675111, 39.71769 ], "pop" : 913, "state" : "KS" } +{ "_id" : "66528", "city" : "QUENEMO", "loc" : [ -95.53619, 38.578504 ], "pop" : 500, "state" : "KS" } +{ "_id" : "66531", "city" : "RILEY", "loc" : [ -96.811824, 39.122421 ], "pop" : 14793, "state" : "KS" } +{ "_id" : "66532", "city" : "LEONA", "loc" : [ -95.386236, 39.812721 ], "pop" : 671, "state" : "KS" } +{ "_id" : "66533", "city" : "ROSSVILLE", "loc" : [ -95.95529999999999, 39.145114 ], "pop" : 1583, "state" : "KS" } +{ "_id" : "66534", "city" : "SABETHA", "loc" : [ -95.811271, 39.89929 ], "pop" : 3242, "state" : "KS" } +{ "_id" : "66535", "city" : "SAINT GEORGE", "loc" : [ -96.434488, 39.210806 ], "pop" : 1904, "state" : "KS" } +{ "_id" : "66536", "city" : "SAINT MARYS", "loc" : [ -96.06827699999999, 39.198674 ], "pop" : 2316, "state" : "KS" } +{ "_id" : "66537", "city" : "SCRANTON", "loc" : [ -95.74799, 38.787998 ], "pop" : 1158, "state" : "KS" } +{ "_id" : "66538", "city" : "KELLY", "loc" : [ -96.059489, 39.839804 ], "pop" : 3336, "state" : "KS" } +{ "_id" : "66539", "city" : "SILVER LAKE", "loc" : [ -95.855182, 39.1102 ], "pop" : 2152, "state" : "KS" } +{ "_id" : "66540", "city" : "SOLDIER", "loc" : [ -95.96517799999999, 39.501254 ], "pop" : 578, "state" : "KS" } +{ "_id" : "66541", "city" : "SUMMERFIELD", "loc" : [ -96.32790900000001, 39.979847 ], "pop" : 271, "state" : "KS" } +{ "_id" : "66542", "city" : "TECUMSEH", "loc" : [ -95.537926, 39.021664 ], "pop" : 1059, "state" : "KS" } +{ "_id" : "66543", "city" : "VASSAR", "loc" : [ -95.581278, 38.669127 ], "pop" : 849, "state" : "KS" } +{ "_id" : "66544", "city" : "VLIETS", "loc" : [ -96.28164200000001, 39.705044 ], "pop" : 469, "state" : "KS" } +{ "_id" : "66546", "city" : "WAKARUSA", "loc" : [ -95.701464, 38.904543 ], "pop" : 855, "state" : "KS" } +{ "_id" : "66547", "city" : "WAMEGO", "loc" : [ -96.315344, 39.210001 ], "pop" : 5200, "state" : "KS" } +{ "_id" : "66548", "city" : "WATERVILLE", "loc" : [ -96.749781, 39.697088 ], "pop" : 1116, "state" : "KS" } +{ "_id" : "66549", "city" : "BLAINE", "loc" : [ -96.411402, 39.416545 ], "pop" : 1373, "state" : "KS" } +{ "_id" : "66550", "city" : "WETMORE", "loc" : [ -95.82311799999999, 39.642761 ], "pop" : 546, "state" : "KS" } +{ "_id" : "66551", "city" : "ONAGA", "loc" : [ -96.314753, 39.510969 ], "pop" : 238, "state" : "KS" } +{ "_id" : "66552", "city" : "WHITING", "loc" : [ -95.61584000000001, 39.597396 ], "pop" : 380, "state" : "KS" } +{ "_id" : "66554", "city" : "RANDOLPH", "loc" : [ -96.782842, 39.487939 ], "pop" : 608, "state" : "KS" } +{ "_id" : "66603", "city" : "TOPEKA", "loc" : [ -95.680212, 39.055344 ], "pop" : 2250, "state" : "KS" } +{ "_id" : "66604", "city" : "TOPEKA", "loc" : [ -95.717831, 39.040549 ], "pop" : 23913, "state" : "KS" } +{ "_id" : "66605", "city" : "TOPEKA", "loc" : [ -95.643894, 39.015076 ], "pop" : 20138, "state" : "KS" } +{ "_id" : "66606", "city" : "TOPEKA", "loc" : [ -95.709458, 39.058345 ], "pop" : 13053, "state" : "KS" } +{ "_id" : "66607", "city" : "TOPEKA", "loc" : [ -95.644858, 39.042111 ], "pop" : 9850, "state" : "KS" } +{ "_id" : "66608", "city" : "TOPEKA", "loc" : [ -95.686651, 39.085812 ], "pop" : 7739, "state" : "KS" } +{ "_id" : "66609", "city" : "TOPEKA", "loc" : [ -95.668069, 38.991899 ], "pop" : 6252, "state" : "KS" } +{ "_id" : "66610", "city" : "TOPEKA", "loc" : [ -95.746061, 38.982213 ], "pop" : 4656, "state" : "KS" } +{ "_id" : "66611", "city" : "TOPEKA", "loc" : [ -95.69815, 39.014152 ], "pop" : 10194, "state" : "KS" } +{ "_id" : "66612", "city" : "TOPEKA", "loc" : [ -95.68180599999999, 39.042714 ], "pop" : 2949, "state" : "KS" } +{ "_id" : "66614", "city" : "TOPEKA", "loc" : [ -95.746883, 39.015403 ], "pop" : 26238, "state" : "KS" } +{ "_id" : "66615", "city" : "TOPEKA", "loc" : [ -95.790561, 39.04458 ], "pop" : 677, "state" : "KS" } +{ "_id" : "66616", "city" : "TOPEKA", "loc" : [ -95.641302, 39.064479 ], "pop" : 6538, "state" : "KS" } +{ "_id" : "66617", "city" : "TOPEKA", "loc" : [ -95.63838800000001, 39.127098 ], "pop" : 7779, "state" : "KS" } +{ "_id" : "66618", "city" : "TOPEKA", "loc" : [ -95.70231, 39.132853 ], "pop" : 5436, "state" : "KS" } +{ "_id" : "66619", "city" : "PAULINE", "loc" : [ -95.700728, 38.942859 ], "pop" : 2952, "state" : "KS" } +{ "_id" : "66701", "city" : "HIATTVILLE", "loc" : [ -94.704221, 37.834159 ], "pop" : 11192, "state" : "KS" } +{ "_id" : "66710", "city" : "ALTOONA", "loc" : [ -95.64833, 37.519669 ], "pop" : 905, "state" : "KS" } +{ "_id" : "66711", "city" : "ARCADIA", "loc" : [ -94.654782, 37.634113 ], "pop" : 664, "state" : "KS" } +{ "_id" : "66713", "city" : "BAXTER SPRINGS", "loc" : [ -94.739276, 37.028057 ], "pop" : 5434, "state" : "KS" } +{ "_id" : "66714", "city" : "BENEDICT", "loc" : [ -95.624213, 37.651401 ], "pop" : 815, "state" : "KS" } +{ "_id" : "66716", "city" : "BRONSON", "loc" : [ -95.030345, 37.921356 ], "pop" : 702, "state" : "KS" } +{ "_id" : "66717", "city" : "BUFFALO", "loc" : [ -95.70141700000001, 37.701057 ], "pop" : 455, "state" : "KS" } +{ "_id" : "66720", "city" : "CHANUTE", "loc" : [ -95.456962, 37.674928 ], "pop" : 10852, "state" : "KS" } +{ "_id" : "66724", "city" : "CHEROKEE", "loc" : [ -94.842412, 37.369413 ], "pop" : 1397, "state" : "KS" } +{ "_id" : "66725", "city" : "HALLOWELL", "loc" : [ -94.850227, 37.168992 ], "pop" : 4750, "state" : "KS" } +{ "_id" : "66727", "city" : "COYVILLE", "loc" : [ -95.917164, 37.659167 ], "pop" : 331, "state" : "KS" } +{ "_id" : "66728", "city" : "CRESTLINE", "loc" : [ -94.678275, 37.161226 ], "pop" : 478, "state" : "KS" } +{ "_id" : "66732", "city" : "ELSMORE", "loc" : [ -95.154645, 37.80353 ], "pop" : 293, "state" : "KS" } +{ "_id" : "66733", "city" : "ERIE", "loc" : [ -95.25138, 37.604395 ], "pop" : 2572, "state" : "KS" } +{ "_id" : "66734", "city" : "FARLINGTON", "loc" : [ -94.847928, 37.6163 ], "pop" : 519, "state" : "KS" } +{ "_id" : "66736", "city" : "LAFONTAINE", "loc" : [ -95.822898, 37.525622 ], "pop" : 3747, "state" : "KS" } +{ "_id" : "66738", "city" : "FULTON", "loc" : [ -94.739591, 37.988279 ], "pop" : 404, "state" : "KS" } +{ "_id" : "66739", "city" : "GALENA", "loc" : [ -94.655743, 37.063237 ], "pop" : 5961, "state" : "KS" } +{ "_id" : "66740", "city" : "GALESBURG", "loc" : [ -95.310772, 37.469346 ], "pop" : 932, "state" : "KS" } +{ "_id" : "66741", "city" : "GARLAND", "loc" : [ -94.672055, 37.717363 ], "pop" : 377, "state" : "KS" } +{ "_id" : "66743", "city" : "GIRARD", "loc" : [ -94.85691300000001, 37.509129 ], "pop" : 3707, "state" : "KS" } +{ "_id" : "66746", "city" : "HEPLER", "loc" : [ -94.989225, 37.657558 ], "pop" : 229, "state" : "KS" } +{ "_id" : "66748", "city" : "HUMBOLDT", "loc" : [ -95.422006, 37.80446 ], "pop" : 3247, "state" : "KS" } +{ "_id" : "66749", "city" : "CARLYLE", "loc" : [ -95.402146, 37.928244 ], "pop" : 7721, "state" : "KS" } +{ "_id" : "66751", "city" : "LA HARPE", "loc" : [ -95.32319200000001, 37.92239 ], "pop" : 1966, "state" : "KS" } +{ "_id" : "66753", "city" : "MC CUNE", "loc" : [ -95.03759100000001, 37.346754 ], "pop" : 1252, "state" : "KS" } +{ "_id" : "66754", "city" : "MAPLETON", "loc" : [ -94.873519, 38.022821 ], "pop" : 351, "state" : "KS" } +{ "_id" : "66755", "city" : "MORAN", "loc" : [ -95.164733, 37.934159 ], "pop" : 1214, "state" : "KS" } +{ "_id" : "66756", "city" : "MULBERRY", "loc" : [ -94.683902, 37.544197 ], "pop" : 3096, "state" : "KS" } +{ "_id" : "66757", "city" : "NEODESHA", "loc" : [ -95.676478, 37.425709 ], "pop" : 3664, "state" : "KS" } +{ "_id" : "66758", "city" : "NEOSHO FALLS", "loc" : [ -95.54973200000001, 37.966883 ], "pop" : 392, "state" : "KS" } +{ "_id" : "66759", "city" : "NEW ALBANY", "loc" : [ -95.912594, 37.544436 ], "pop" : 372, "state" : "KS" } +{ "_id" : "66761", "city" : "PIQUA", "loc" : [ -95.59002599999999, 37.872847 ], "pop" : 206, "state" : "KS" } +{ "_id" : "66762", "city" : "RADLEY", "loc" : [ -94.70225000000001, 37.413156 ], "pop" : 24845, "state" : "KS" } +{ "_id" : "66767", "city" : "PRESCOTT", "loc" : [ -94.700841, 38.071802 ], "pop" : 600, "state" : "KS" } +{ "_id" : "66769", "city" : "REDFIELD", "loc" : [ -94.828988, 37.856046 ], "pop" : 1224, "state" : "KS" } +{ "_id" : "66770", "city" : "RIVERTON", "loc" : [ -94.67880100000001, 37.099262 ], "pop" : 564, "state" : "KS" } +{ "_id" : "66771", "city" : "SAINT PAUL", "loc" : [ -95.168784, 37.518046 ], "pop" : 936, "state" : "KS" } +{ "_id" : "66772", "city" : "SAVONBURG", "loc" : [ -95.154532, 37.751725 ], "pop" : 197, "state" : "KS" } +{ "_id" : "66773", "city" : "CARONA", "loc" : [ -94.851961, 37.271102 ], "pop" : 1552, "state" : "KS" } +{ "_id" : "66775", "city" : "STARK", "loc" : [ -95.138794, 37.681111 ], "pop" : 246, "state" : "KS" } +{ "_id" : "66776", "city" : "THAYER", "loc" : [ -95.467083, 37.452657 ], "pop" : 1349, "state" : "KS" } +{ "_id" : "66777", "city" : "TORONTO", "loc" : [ -95.936818, 37.795343 ], "pop" : 659, "state" : "KS" } +{ "_id" : "66778", "city" : "TREECE", "loc" : [ -94.86904699999999, 37.039883 ], "pop" : 528, "state" : "KS" } +{ "_id" : "66779", "city" : "UNIONTOWN", "loc" : [ -94.98136599999999, 37.811681 ], "pop" : 825, "state" : "KS" } +{ "_id" : "66780", "city" : "WALNUT", "loc" : [ -95.045531, 37.59674 ], "pop" : 383, "state" : "KS" } +{ "_id" : "66781", "city" : "LAWTON", "loc" : [ -94.743909, 37.298173 ], "pop" : 1515, "state" : "KS" } +{ "_id" : "66783", "city" : "YATES CENTER", "loc" : [ -95.72893999999999, 37.880125 ], "pop" : 2859, "state" : "KS" } +{ "_id" : "66801", "city" : "EMPORIA", "loc" : [ -96.187145, 38.418405 ], "pop" : 29401, "state" : "KS" } +{ "_id" : "66830", "city" : "ADMIRE", "loc" : [ -96.101657, 38.639297 ], "pop" : 172, "state" : "KS" } +{ "_id" : "66833", "city" : "BUSHONG", "loc" : [ -96.249968, 38.637522 ], "pop" : 88, "state" : "KS" } +{ "_id" : "66834", "city" : "ALTA VISTA", "loc" : [ -96.479983, 38.86357 ], "pop" : 629, "state" : "KS" } +{ "_id" : "66835", "city" : "AMERICUS", "loc" : [ -96.26075299999999, 38.509803 ], "pop" : 1491, "state" : "KS" } +{ "_id" : "66838", "city" : "BURDICK", "loc" : [ -96.83963, 38.567369 ], "pop" : 230, "state" : "KS" } +{ "_id" : "66839", "city" : "STRAWN", "loc" : [ -95.741162, 38.201596 ], "pop" : 4404, "state" : "KS" } +{ "_id" : "66840", "city" : "BURNS", "loc" : [ -96.863435, 38.12216 ], "pop" : 593, "state" : "KS" } +{ "_id" : "66842", "city" : "CASSODAY", "loc" : [ -96.674565, 38.029801 ], "pop" : 351, "state" : "KS" } +{ "_id" : "66843", "city" : "CLEMENTS", "loc" : [ -96.77544399999999, 38.279757 ], "pop" : 200, "state" : "KS" } +{ "_id" : "66845", "city" : "COTTONWOOD FALLS", "loc" : [ -96.541849, 38.356538 ], "pop" : 1183, "state" : "KS" } +{ "_id" : "66846", "city" : "DUNLAP", "loc" : [ -96.497294, 38.667657 ], "pop" : 3831, "state" : "KS" } +{ "_id" : "66849", "city" : "DWIGHT", "loc" : [ -96.580215, 38.838902 ], "pop" : 569, "state" : "KS" } +{ "_id" : "66850", "city" : "ELMDALE", "loc" : [ -96.667464, 38.377924 ], "pop" : 168, "state" : "KS" } +{ "_id" : "66851", "city" : "FLORENCE", "loc" : [ -96.934561, 38.241536 ], "pop" : 828, "state" : "KS" } +{ "_id" : "66852", "city" : "GRIDLEY", "loc" : [ -95.887351, 38.101234 ], "pop" : 638, "state" : "KS" } +{ "_id" : "66853", "city" : "HAMILTON", "loc" : [ -96.169133, 37.979122 ], "pop" : 600, "state" : "KS" } +{ "_id" : "66854", "city" : "HARTFORD", "loc" : [ -95.999718, 38.28326 ], "pop" : 1006, "state" : "KS" } +{ "_id" : "66856", "city" : "LEBO", "loc" : [ -95.822174, 38.416085 ], "pop" : 1708, "state" : "KS" } +{ "_id" : "66857", "city" : "LE ROY", "loc" : [ -95.62265499999999, 38.087429 ], "pop" : 795, "state" : "KS" } +{ "_id" : "66858", "city" : "ANTELOPE", "loc" : [ -96.96123, 38.481037 ], "pop" : 562, "state" : "KS" } +{ "_id" : "66859", "city" : "LOST SPRINGS", "loc" : [ -96.979872, 38.565723 ], "pop" : 241, "state" : "KS" } +{ "_id" : "66860", "city" : "MADISON", "loc" : [ -96.12128300000001, 38.127755 ], "pop" : 1430, "state" : "KS" } +{ "_id" : "66861", "city" : "MARION", "loc" : [ -97.02045, 38.355444 ], "pop" : 3196, "state" : "KS" } +{ "_id" : "66862", "city" : "MATFIELD GREEN", "loc" : [ -96.55410500000001, 38.144768 ], "pop" : 143, "state" : "KS" } +{ "_id" : "66864", "city" : "NEOSHO RAPIDS", "loc" : [ -96.016824, 38.394762 ], "pop" : 865, "state" : "KS" } +{ "_id" : "66865", "city" : "OLPE", "loc" : [ -96.18905599999999, 38.257774 ], "pop" : 1156, "state" : "KS" } +{ "_id" : "66866", "city" : "PEABODY", "loc" : [ -97.118386, 38.173746 ], "pop" : 1927, "state" : "KS" } +{ "_id" : "66868", "city" : "READING", "loc" : [ -95.98949, 38.529012 ], "pop" : 553, "state" : "KS" } +{ "_id" : "66869", "city" : "STRONG CITY", "loc" : [ -96.51719199999999, 38.41292 ], "pop" : 1149, "state" : "KS" } +{ "_id" : "66870", "city" : "VIRGIL", "loc" : [ -96.03293499999999, 37.897594 ], "pop" : 381, "state" : "KS" } +{ "_id" : "66871", "city" : "WAVERLY", "loc" : [ -95.598201, 38.378214 ], "pop" : 1112, "state" : "KS" } +{ "_id" : "66872", "city" : "WHITE CITY", "loc" : [ -96.763677, 38.78902 ], "pop" : 983, "state" : "KS" } +{ "_id" : "66873", "city" : "WILSEY", "loc" : [ -96.670407, 38.633449 ], "pop" : 325, "state" : "KS" } +{ "_id" : "66901", "city" : "RICE", "loc" : [ -97.662735, 39.559427 ], "pop" : 7733, "state" : "KS" } +{ "_id" : "66930", "city" : "AGENDA", "loc" : [ -97.42698300000001, 39.702868 ], "pop" : 198, "state" : "KS" } +{ "_id" : "66931", "city" : "AMES", "loc" : [ -97.538245, 39.533923 ], "pop" : 161, "state" : "KS" } +{ "_id" : "66932", "city" : "ATHOL", "loc" : [ -98.90773299999999, 39.771872 ], "pop" : 164, "state" : "KS" } +{ "_id" : "66933", "city" : "BARNES", "loc" : [ -96.867574, 39.684114 ], "pop" : 374, "state" : "KS" } +{ "_id" : "66935", "city" : "BELLEVILLE", "loc" : [ -97.62901599999999, 39.824054 ], "pop" : 3863, "state" : "KS" } +{ "_id" : "66936", "city" : "BURR OAK", "loc" : [ -98.34991100000001, 39.893177 ], "pop" : 583, "state" : "KS" } +{ "_id" : "66937", "city" : "CLIFTON", "loc" : [ -97.261104, 39.620121 ], "pop" : 853, "state" : "KS" } +{ "_id" : "66938", "city" : "CLYDE", "loc" : [ -97.407999, 39.575842 ], "pop" : 1164, "state" : "KS" } +{ "_id" : "66939", "city" : "COURTLAND", "loc" : [ -97.889956, 39.78509 ], "pop" : 487, "state" : "KS" } +{ "_id" : "66940", "city" : "CUBA", "loc" : [ -97.449623, 39.797482 ], "pop" : 342, "state" : "KS" } +{ "_id" : "66941", "city" : "ESBON", "loc" : [ -98.44622200000001, 39.756186 ], "pop" : 342, "state" : "KS" } +{ "_id" : "66942", "city" : "FORMOSO", "loc" : [ -97.98890900000001, 39.779467 ], "pop" : 223, "state" : "KS" } +{ "_id" : "66943", "city" : "GREENLEAF", "loc" : [ -96.977465, 39.706145 ], "pop" : 564, "state" : "KS" } +{ "_id" : "66944", "city" : "HADDAM", "loc" : [ -97.308142, 39.851969 ], "pop" : 333, "state" : "KS" } +{ "_id" : "66945", "city" : "HANOVER", "loc" : [ -96.86894700000001, 39.89266 ], "pop" : 1278, "state" : "KS" } +{ "_id" : "66946", "city" : "HOLLENBERG", "loc" : [ -96.97350900000001, 39.959987 ], "pop" : 146, "state" : "KS" } +{ "_id" : "66948", "city" : "JAMESTOWN", "loc" : [ -97.86308200000001, 39.602144 ], "pop" : 430, "state" : "KS" } +{ "_id" : "66949", "city" : "IONIA", "loc" : [ -98.125603, 39.669686 ], "pop" : 752, "state" : "KS" } +{ "_id" : "66951", "city" : "KENSINGTON", "loc" : [ -99.03084800000001, 39.769179 ], "pop" : 665, "state" : "KS" } +{ "_id" : "66952", "city" : "BELLAIRE", "loc" : [ -98.558148, 39.812839 ], "pop" : 526, "state" : "KS" } +{ "_id" : "66953", "city" : "LINN", "loc" : [ -97.08541200000001, 39.684687 ], "pop" : 666, "state" : "KS" } +{ "_id" : "66955", "city" : "MAHASKA", "loc" : [ -97.34527199999999, 39.984502 ], "pop" : 142, "state" : "KS" } +{ "_id" : "66956", "city" : "MANKATO", "loc" : [ -98.215227, 39.783259 ], "pop" : 1929, "state" : "KS" } +{ "_id" : "66958", "city" : "MORROWVILLE", "loc" : [ -97.18252099999999, 39.861551 ], "pop" : 462, "state" : "KS" } +{ "_id" : "66959", "city" : "MUNDEN", "loc" : [ -97.540302, 39.927219 ], "pop" : 266, "state" : "KS" } +{ "_id" : "66960", "city" : "NARKA", "loc" : [ -97.42433200000001, 39.958162 ], "pop" : 205, "state" : "KS" } +{ "_id" : "66961", "city" : "NORWAY", "loc" : [ -97.811926, 39.695305 ], "pop" : 287, "state" : "KS" } +{ "_id" : "66962", "city" : "PALMER", "loc" : [ -97.11221399999999, 39.619165 ], "pop" : 276, "state" : "KS" } +{ "_id" : "66963", "city" : "RANDALL", "loc" : [ -98.06605399999999, 39.62859 ], "pop" : 190, "state" : "KS" } +{ "_id" : "66964", "city" : "REPUBLIC", "loc" : [ -97.843456, 39.937572 ], "pop" : 297, "state" : "KS" } +{ "_id" : "66966", "city" : "SCANDIA", "loc" : [ -97.778645, 39.793861 ], "pop" : 537, "state" : "KS" } +{ "_id" : "66967", "city" : "SMITH CENTER", "loc" : [ -98.784243, 39.804217 ], "pop" : 2848, "state" : "KS" } +{ "_id" : "66968", "city" : "WASHINGTON", "loc" : [ -97.048368, 39.82234 ], "pop" : 1979, "state" : "KS" } +{ "_id" : "66970", "city" : "WEBBER", "loc" : [ -97.997793, 39.924496 ], "pop" : 232, "state" : "KS" } +{ "_id" : "67001", "city" : "ANDALE", "loc" : [ -97.64071199999999, 37.782686 ], "pop" : 1251, "state" : "KS" } +{ "_id" : "67002", "city" : "ANDOVER", "loc" : [ -97.117901, 37.698531 ], "pop" : 5384, "state" : "KS" } +{ "_id" : "67003", "city" : "ANTHONY", "loc" : [ -98.028499, 37.151206 ], "pop" : 2930, "state" : "KS" } +{ "_id" : "67004", "city" : "ARGONIA", "loc" : [ -97.755678, 37.283966 ], "pop" : 949, "state" : "KS" } +{ "_id" : "67005", "city" : "ARKANSAS CITY", "loc" : [ -97.035658, 37.067593 ], "pop" : 17740, "state" : "KS" } +{ "_id" : "67008", "city" : "ATLANTA", "loc" : [ -96.76613500000001, 37.434309 ], "pop" : 320, "state" : "KS" } +{ "_id" : "67009", "city" : "ATTICA", "loc" : [ -98.22642500000001, 37.25277 ], "pop" : 1125, "state" : "KS" } +{ "_id" : "67010", "city" : "AUGUSTA", "loc" : [ -96.964772, 37.683606 ], "pop" : 11306, "state" : "KS" } +{ "_id" : "67012", "city" : "BEAUMONT", "loc" : [ -96.63864, 37.607871 ], "pop" : 85, "state" : "KS" } +{ "_id" : "67013", "city" : "BELLE PLAINE", "loc" : [ -97.28522100000001, 37.405155 ], "pop" : 2784, "state" : "KS" } +{ "_id" : "67016", "city" : "BENTLEY", "loc" : [ -97.516381, 37.879582 ], "pop" : 895, "state" : "KS" } +{ "_id" : "67017", "city" : "BENTON", "loc" : [ -97.097117, 37.794615 ], "pop" : 2122, "state" : "KS" } +{ "_id" : "67018", "city" : "BLUFF CITY", "loc" : [ -97.875412, 37.083846 ], "pop" : 216, "state" : "KS" } +{ "_id" : "67019", "city" : "BURDEN", "loc" : [ -96.75704399999999, 37.320856 ], "pop" : 698, "state" : "KS" } +{ "_id" : "67020", "city" : "BURRTON", "loc" : [ -97.66664900000001, 38.026128 ], "pop" : 1149, "state" : "KS" } +{ "_id" : "67021", "city" : "BYERS", "loc" : [ -98.901662, 37.784693 ], "pop" : 208, "state" : "KS" } +{ "_id" : "67022", "city" : "CALDWELL", "loc" : [ -97.62465899999999, 37.045241 ], "pop" : 1777, "state" : "KS" } +{ "_id" : "67023", "city" : "CAMBRIDGE", "loc" : [ -96.66388000000001, 37.358348 ], "pop" : 316, "state" : "KS" } +{ "_id" : "67024", "city" : "CEDAR VALE", "loc" : [ -96.470133, 37.126487 ], "pop" : 1267, "state" : "KS" } +{ "_id" : "67025", "city" : "CHENEY", "loc" : [ -97.768638, 37.635299 ], "pop" : 2497, "state" : "KS" } +{ "_id" : "67026", "city" : "CLEARWATER", "loc" : [ -97.508179, 37.507592 ], "pop" : 2453, "state" : "KS" } +{ "_id" : "67028", "city" : "COATS", "loc" : [ -98.850398, 37.512502 ], "pop" : 190, "state" : "KS" } +{ "_id" : "67029", "city" : "COLDWATER", "loc" : [ -99.31148399999999, 37.247915 ], "pop" : 1317, "state" : "KS" } +{ "_id" : "67030", "city" : "COLWICH", "loc" : [ -97.54051800000001, 37.77824 ], "pop" : 1745, "state" : "KS" } +{ "_id" : "67031", "city" : "CONWAY SPRINGS", "loc" : [ -97.62835800000001, 37.390272 ], "pop" : 2241, "state" : "KS" } +{ "_id" : "67032", "city" : "CORBIN", "loc" : [ -97.526326, 37.073142 ], "pop" : 193, "state" : "KS" } +{ "_id" : "67035", "city" : "PENALOSA", "loc" : [ -98.39297000000001, 37.666149 ], "pop" : 497, "state" : "KS" } +{ "_id" : "67036", "city" : "DANVILLE", "loc" : [ -97.868933, 37.267424 ], "pop" : 168, "state" : "KS" } +{ "_id" : "67037", "city" : "DERBY", "loc" : [ -97.25488799999999, 37.552976 ], "pop" : 17109, "state" : "KS" } +{ "_id" : "67038", "city" : "DEXTER", "loc" : [ -96.69170200000001, 37.164087 ], "pop" : 698, "state" : "KS" } +{ "_id" : "67039", "city" : "DOUGLASS", "loc" : [ -96.994848, 37.51951 ], "pop" : 2388, "state" : "KS" } +{ "_id" : "67041", "city" : "ELBING", "loc" : [ -97.11276599999999, 38.046208 ], "pop" : 422, "state" : "KS" } +{ "_id" : "67042", "city" : "EL DORADO", "loc" : [ -96.854297, 37.822649 ], "pop" : 14387, "state" : "KS" } +{ "_id" : "67045", "city" : "EUREKA", "loc" : [ -96.295877, 37.826471 ], "pop" : 3986, "state" : "KS" } +{ "_id" : "67047", "city" : "FALL RIVER", "loc" : [ -96.04345600000001, 37.621049 ], "pop" : 527, "state" : "KS" } +{ "_id" : "67049", "city" : "FREEPORT", "loc" : [ -97.86342, 37.190257 ], "pop" : 52, "state" : "KS" } +{ "_id" : "67050", "city" : "GARDEN PLAIN", "loc" : [ -97.66002, 37.676712 ], "pop" : 1406, "state" : "KS" } +{ "_id" : "67051", "city" : "GEUDA SPRINGS", "loc" : [ -97.17950399999999, 37.08093 ], "pop" : 503, "state" : "KS" } +{ "_id" : "67052", "city" : "GODDARD", "loc" : [ -97.53640799999999, 37.657483 ], "pop" : 6586, "state" : "KS" } +{ "_id" : "67053", "city" : "GOESSEL", "loc" : [ -97.33628, 38.234259 ], "pop" : 973, "state" : "KS" } +{ "_id" : "67054", "city" : "GREENSBURG", "loc" : [ -99.301057, 37.608367 ], "pop" : 2073, "state" : "KS" } +{ "_id" : "67056", "city" : "HALSTEAD", "loc" : [ -97.511792, 38.006391 ], "pop" : 2405, "state" : "KS" } +{ "_id" : "67057", "city" : "HARDTNER", "loc" : [ -98.654732, 37.030009 ], "pop" : 284, "state" : "KS" } +{ "_id" : "67058", "city" : "HARPER", "loc" : [ -98.017978, 37.290943 ], "pop" : 2444, "state" : "KS" } +{ "_id" : "67059", "city" : "HAVILAND", "loc" : [ -99.13396400000001, 37.609615 ], "pop" : 1277, "state" : "KS" } +{ "_id" : "67060", "city" : "HAYSVILLE", "loc" : [ -97.355323, 37.56467 ], "pop" : 7666, "state" : "KS" } +{ "_id" : "67061", "city" : "HAZELTON", "loc" : [ -98.400319, 37.098421 ], "pop" : 201, "state" : "KS" } +{ "_id" : "67062", "city" : "HESSTON", "loc" : [ -97.44945800000001, 38.135951 ], "pop" : 4156, "state" : "KS" } +{ "_id" : "67063", "city" : "HILLSBORO", "loc" : [ -97.212154, 38.344907 ], "pop" : 3543, "state" : "KS" } +{ "_id" : "67065", "city" : "ISABEL", "loc" : [ -98.53514, 37.448544 ], "pop" : 198, "state" : "KS" } +{ "_id" : "67066", "city" : "IUKA", "loc" : [ -98.736103, 37.739725 ], "pop" : 387, "state" : "KS" } +{ "_id" : "67068", "city" : "BELMONT", "loc" : [ -98.109295, 37.636246 ], "pop" : 6072, "state" : "KS" } +{ "_id" : "67070", "city" : "KIOWA", "loc" : [ -98.48590799999999, 37.017166 ], "pop" : 1255, "state" : "KS" } +{ "_id" : "67071", "city" : "LAKE CITY", "loc" : [ -98.809833, 37.356885 ], "pop" : 97, "state" : "KS" } +{ "_id" : "67072", "city" : "LATHAM", "loc" : [ -96.679148, 37.530983 ], "pop" : 293, "state" : "KS" } +{ "_id" : "67073", "city" : "LEHIGH", "loc" : [ -97.304315, 38.377106 ], "pop" : 311, "state" : "KS" } +{ "_id" : "67074", "city" : "LEON", "loc" : [ -96.752634, 37.681268 ], "pop" : 1342, "state" : "KS" } +{ "_id" : "67101", "city" : "MAIZE", "loc" : [ -97.468874, 37.774727 ], "pop" : 1808, "state" : "KS" } +{ "_id" : "67102", "city" : "MAPLE CITY", "loc" : [ -96.781387, 37.071295 ], "pop" : 78, "state" : "KS" } +{ "_id" : "67103", "city" : "MAYFIELD", "loc" : [ -97.54160299999999, 37.251806 ], "pop" : 353, "state" : "KS" } +{ "_id" : "67104", "city" : "MEDICINE LODGE", "loc" : [ -98.584785, 37.284452 ], "pop" : 3208, "state" : "KS" } +{ "_id" : "67105", "city" : "MILAN", "loc" : [ -97.65206499999999, 37.257764 ], "pop" : 238, "state" : "KS" } +{ "_id" : "67106", "city" : "MILTON", "loc" : [ -97.759156, 37.440064 ], "pop" : 353, "state" : "KS" } +{ "_id" : "67107", "city" : "MOUNDRIDGE", "loc" : [ -97.50876700000001, 38.206029 ], "pop" : 2307, "state" : "KS" } +{ "_id" : "67108", "city" : "MOUNT HOPE", "loc" : [ -97.659092, 37.868412 ], "pop" : 1060, "state" : "KS" } +{ "_id" : "67109", "city" : "MULLINVILLE", "loc" : [ -99.46388, 37.571608 ], "pop" : 427, "state" : "KS" } +{ "_id" : "67110", "city" : "MULVANE", "loc" : [ -97.231954, 37.476433 ], "pop" : 6238, "state" : "KS" } +{ "_id" : "67111", "city" : "MURDOCK", "loc" : [ -97.95027, 37.609945 ], "pop" : 197, "state" : "KS" } +{ "_id" : "67112", "city" : "NASHVILLE", "loc" : [ -98.417052, 37.434419 ], "pop" : 220, "state" : "KS" } +{ "_id" : "67114", "city" : "NEWTON", "loc" : [ -97.343457, 38.045067 ], "pop" : 20273, "state" : "KS" } +{ "_id" : "67117", "city" : "NORTH NEWTON", "loc" : [ -97.328796, 38.128246 ], "pop" : 408, "state" : "KS" } +{ "_id" : "67118", "city" : "NORWICH", "loc" : [ -97.866247, 37.4501 ], "pop" : 705, "state" : "KS" } +{ "_id" : "67119", "city" : "OXFORD", "loc" : [ -97.176131, 37.265303 ], "pop" : 1515, "state" : "KS" } +{ "_id" : "67120", "city" : "PECK", "loc" : [ -97.311565, 37.472445 ], "pop" : 1023, "state" : "KS" } +{ "_id" : "67122", "city" : "PIEDMONT", "loc" : [ -96.36950299999999, 37.637169 ], "pop" : 249, "state" : "KS" } +{ "_id" : "67123", "city" : "POTWIN", "loc" : [ -97.000608, 37.971872 ], "pop" : 900, "state" : "KS" } +{ "_id" : "67124", "city" : "PRATT", "loc" : [ -98.73003, 37.650219 ], "pop" : 8348, "state" : "KS" } +{ "_id" : "67127", "city" : "PROTECTION", "loc" : [ -99.481628, 37.196782 ], "pop" : 864, "state" : "KS" } +{ "_id" : "67128", "city" : "RAGO", "loc" : [ -98.077208, 37.439824 ], "pop" : 127, "state" : "KS" } +{ "_id" : "67131", "city" : "ROCK", "loc" : [ -96.936468, 37.429435 ], "pop" : 393, "state" : "KS" } +{ "_id" : "67132", "city" : "ROSALIA", "loc" : [ -96.648161, 37.796041 ], "pop" : 545, "state" : "KS" } +{ "_id" : "67133", "city" : "ROSE HILL", "loc" : [ -97.117346, 37.578371 ], "pop" : 5598, "state" : "KS" } +{ "_id" : "67134", "city" : "SAWYER", "loc" : [ -98.66422, 37.51007 ], "pop" : 569, "state" : "KS" } +{ "_id" : "67135", "city" : "SEDGWICK", "loc" : [ -97.402412, 37.869328 ], "pop" : 7706, "state" : "KS" } +{ "_id" : "67137", "city" : "CLIMAX", "loc" : [ -96.229777, 37.64985 ], "pop" : 871, "state" : "KS" } +{ "_id" : "67138", "city" : "SHARON", "loc" : [ -98.414168, 37.249239 ], "pop" : 440, "state" : "KS" } +{ "_id" : "67140", "city" : "SOUTH HAVEN", "loc" : [ -97.404228, 37.049997 ], "pop" : 710, "state" : "KS" } +{ "_id" : "67142", "city" : "SPIVEY", "loc" : [ -98.175122, 37.440986 ], "pop" : 169, "state" : "KS" } +{ "_id" : "67143", "city" : "SUN CITY", "loc" : [ -98.90385999999999, 37.394647 ], "pop" : 191, "state" : "KS" } +{ "_id" : "67144", "city" : "TOWANDA", "loc" : [ -96.99176900000001, 37.800506 ], "pop" : 2598, "state" : "KS" } +{ "_id" : "67146", "city" : "UDALL", "loc" : [ -97.110784, 37.393861 ], "pop" : 1714, "state" : "KS" } +{ "_id" : "67147", "city" : "VALLEY CENTER", "loc" : [ -97.262146, 37.861643 ], "pop" : 1146, "state" : "KS" } +{ "_id" : "67149", "city" : "VIOLA", "loc" : [ -97.630636, 37.569624 ], "pop" : 1330, "state" : "KS" } +{ "_id" : "67150", "city" : "WALDRON", "loc" : [ -98.228877, 37.072994 ], "pop" : 189, "state" : "KS" } +{ "_id" : "67151", "city" : "WALTON", "loc" : [ -97.23607699999999, 38.123909 ], "pop" : 418, "state" : "KS" } +{ "_id" : "67152", "city" : "WELLINGTON", "loc" : [ -97.39097599999999, 37.27783 ], "pop" : 11149, "state" : "KS" } +{ "_id" : "67154", "city" : "WHITEWATER", "loc" : [ -97.130816, 37.961231 ], "pop" : 1100, "state" : "KS" } +{ "_id" : "67155", "city" : "WILMORE", "loc" : [ -99.184577, 37.331794 ], "pop" : 132, "state" : "KS" } +{ "_id" : "67156", "city" : "WINFIELD", "loc" : [ -96.97998699999999, 37.241621 ], "pop" : 14958, "state" : "KS" } +{ "_id" : "67159", "city" : "ZENDA", "loc" : [ -98.28736000000001, 37.437253 ], "pop" : 200, "state" : "KS" } +{ "_id" : "67202", "city" : "WICHITA", "loc" : [ -97.33551, 37.689945 ], "pop" : 1250, "state" : "KS" } +{ "_id" : "67203", "city" : "WICHITA", "loc" : [ -97.363766, 37.704798 ], "pop" : 30712, "state" : "KS" } +{ "_id" : "67204", "city" : "WICHITA", "loc" : [ -97.35656299999999, 37.748838 ], "pop" : 20298, "state" : "KS" } +{ "_id" : "67205", "city" : "WICHITA", "loc" : [ -97.426924, 37.763929 ], "pop" : 1807, "state" : "KS" } +{ "_id" : "67206", "city" : "EASTBOROUGH", "loc" : [ -97.23925300000001, 37.699622 ], "pop" : 13008, "state" : "KS" } +{ "_id" : "67207", "city" : "EASTBOROUGH", "loc" : [ -97.238962, 37.667152 ], "pop" : 20116, "state" : "KS" } +{ "_id" : "67208", "city" : "WICHITA", "loc" : [ -97.28106200000001, 37.702428 ], "pop" : 18195, "state" : "KS" } +{ "_id" : "67209", "city" : "WICHITA", "loc" : [ -97.42354, 37.677855 ], "pop" : 4135, "state" : "KS" } +{ "_id" : "67210", "city" : "WICHITA", "loc" : [ -97.26125399999999, 37.637915 ], "pop" : 11414, "state" : "KS" } +{ "_id" : "67211", "city" : "WICHITA", "loc" : [ -97.316451, 37.666181 ], "pop" : 20182, "state" : "KS" } +{ "_id" : "67212", "city" : "WICHITA", "loc" : [ -97.438344, 37.700683 ], "pop" : 41349, "state" : "KS" } +{ "_id" : "67213", "city" : "WICHITA", "loc" : [ -97.35907400000001, 37.667959 ], "pop" : 23607, "state" : "KS" } +{ "_id" : "67214", "city" : "WICHITA", "loc" : [ -97.313284, 37.705051 ], "pop" : 18651, "state" : "KS" } +{ "_id" : "67215", "city" : "WICHITA", "loc" : [ -97.42498500000001, 37.633333 ], "pop" : 2930, "state" : "KS" } +{ "_id" : "67216", "city" : "WICHITA", "loc" : [ -97.313625, 37.622332 ], "pop" : 23031, "state" : "KS" } +{ "_id" : "67217", "city" : "WICHITA", "loc" : [ -97.35813899999999, 37.626574 ], "pop" : 30680, "state" : "KS" } +{ "_id" : "67218", "city" : "WICHITA", "loc" : [ -97.280219, 37.669007 ], "pop" : 23491, "state" : "KS" } +{ "_id" : "67219", "city" : "PARK CITY", "loc" : [ -97.313517, 37.76482 ], "pop" : 10619, "state" : "KS" } +{ "_id" : "67220", "city" : "BEL AIRE", "loc" : [ -97.275915, 37.74548 ], "pop" : 9802, "state" : "KS" } +{ "_id" : "67221", "city" : "MC CONNELL A F B", "loc" : [ -97.25402099999999, 37.623687 ], "pop" : 137, "state" : "KS" } +{ "_id" : "67223", "city" : "WICHITA", "loc" : [ -97.467421, 37.748434 ], "pop" : 318, "state" : "KS" } +{ "_id" : "67226", "city" : "WICHITA", "loc" : [ -97.24785300000001, 37.737891 ], "pop" : 8884, "state" : "KS" } +{ "_id" : "67227", "city" : "WICHITA", "loc" : [ -97.460561, 37.588466 ], "pop" : 107, "state" : "KS" } +{ "_id" : "67228", "city" : "WICHITA", "loc" : [ -97.201404, 37.776061 ], "pop" : 768, "state" : "KS" } +{ "_id" : "67230", "city" : "WICHITA", "loc" : [ -97.155764, 37.680814 ], "pop" : 4957, "state" : "KS" } +{ "_id" : "67231", "city" : "WICHITA", "loc" : [ -97.423384, 37.526866 ], "pop" : 855, "state" : "KS" } +{ "_id" : "67232", "city" : "WICHITA", "loc" : [ -97.164278, 37.642797 ], "pop" : 128, "state" : "KS" } +{ "_id" : "67233", "city" : "WICHITA", "loc" : [ -97.32237000000001, 37.54434 ], "pop" : 3861, "state" : "KS" } +{ "_id" : "67235", "city" : "WICHITA", "loc" : [ -97.461145, 37.668631 ], "pop" : 3243, "state" : "KS" } +{ "_id" : "67236", "city" : "WICHITA", "loc" : [ -97.26821, 37.497943 ], "pop" : 262, "state" : "KS" } +{ "_id" : "67301", "city" : "INDEPENDENCE", "loc" : [ -95.716528, 37.229247 ], "pop" : 13892, "state" : "KS" } +{ "_id" : "67330", "city" : "ALTAMONT", "loc" : [ -95.29830200000001, 37.187298 ], "pop" : 1336, "state" : "KS" } +{ "_id" : "67332", "city" : "BARTLETT", "loc" : [ -95.211512, 37.060096 ], "pop" : 385, "state" : "KS" } +{ "_id" : "67333", "city" : "CANEY", "loc" : [ -95.909128, 37.022412 ], "pop" : 3302, "state" : "KS" } +{ "_id" : "67335", "city" : "CHERRYVALE", "loc" : [ -95.55901900000001, 37.266828 ], "pop" : 3490, "state" : "KS" } +{ "_id" : "67336", "city" : "CHETOPA", "loc" : [ -95.079572, 37.041817 ], "pop" : 2031, "state" : "KS" } +{ "_id" : "67337", "city" : "COFFEYVILLE", "loc" : [ -95.632756, 37.044056 ], "pop" : 17417, "state" : "KS" } +{ "_id" : "67341", "city" : "DENNIS", "loc" : [ -95.411602, 37.324324 ], "pop" : 430, "state" : "KS" } +{ "_id" : "67342", "city" : "EDNA", "loc" : [ -95.344159, 37.056146 ], "pop" : 817, "state" : "KS" } +{ "_id" : "67344", "city" : "ELK CITY", "loc" : [ -95.913517, 37.314571 ], "pop" : 801, "state" : "KS" } +{ "_id" : "67345", "city" : "ELK FALLS", "loc" : [ -96.195902, 37.374514 ], "pop" : 206, "state" : "KS" } +{ "_id" : "67346", "city" : "GRENOLA", "loc" : [ -96.439564, 37.366824 ], "pop" : 389, "state" : "KS" } +{ "_id" : "67347", "city" : "HAVANA", "loc" : [ -95.941372, 37.091655 ], "pop" : 149, "state" : "KS" } +{ "_id" : "67349", "city" : "HOWARD", "loc" : [ -96.256298, 37.48089 ], "pop" : 1161, "state" : "KS" } +{ "_id" : "67351", "city" : "LIBERTY", "loc" : [ -95.601698, 37.157629 ], "pop" : 504, "state" : "KS" } +{ "_id" : "67352", "city" : "LONGTON", "loc" : [ -96.081379, 37.390455 ], "pop" : 561, "state" : "KS" } +{ "_id" : "67353", "city" : "MOLINE", "loc" : [ -96.30687500000001, 37.364868 ], "pop" : 681, "state" : "KS" } +{ "_id" : "67354", "city" : "MOUND VALLEY", "loc" : [ -95.424712, 37.209078 ], "pop" : 807, "state" : "KS" } +{ "_id" : "67355", "city" : "NIOTAZE", "loc" : [ -96.01922, 37.05133 ], "pop" : 265, "state" : "KS" } +{ "_id" : "67356", "city" : "OSWEGO", "loc" : [ -95.133458, 37.182254 ], "pop" : 3121, "state" : "KS" } +{ "_id" : "67357", "city" : "PARSONS", "loc" : [ -95.269288, 37.338888 ], "pop" : 14375, "state" : "KS" } +{ "_id" : "67360", "city" : "PERU", "loc" : [ -96.140376, 37.056823 ], "pop" : 689, "state" : "KS" } +{ "_id" : "67361", "city" : "SEDAN", "loc" : [ -96.173248, 37.12968 ], "pop" : 2186, "state" : "KS" } +{ "_id" : "67401", "city" : "BAVARIA", "loc" : [ -97.60878700000001, 38.823802 ], "pop" : 45208, "state" : "KS" } +{ "_id" : "67410", "city" : "ABILENE", "loc" : [ -97.20632000000001, 38.937144 ], "pop" : 8249, "state" : "KS" } +{ "_id" : "67414", "city" : "ADA", "loc" : [ -97.887387, 39.157777 ], "pop" : 179, "state" : "KS" } +{ "_id" : "67416", "city" : "ASSARIA", "loc" : [ -97.62032000000001, 38.667596 ], "pop" : 761, "state" : "KS" } +{ "_id" : "67417", "city" : "AURORA", "loc" : [ -97.530411, 39.447188 ], "pop" : 195, "state" : "KS" } +{ "_id" : "67418", "city" : "BARNARD", "loc" : [ -98.071144, 39.181572 ], "pop" : 302, "state" : "KS" } +{ "_id" : "67420", "city" : "SCOTTSVILLE", "loc" : [ -98.11171400000001, 39.45446 ], "pop" : 5221, "state" : "KS" } +{ "_id" : "67422", "city" : "BENNINGTON", "loc" : [ -97.603121, 39.02239 ], "pop" : 844, "state" : "KS" } +{ "_id" : "67423", "city" : "BEVERLY", "loc" : [ -97.981785, 38.984416 ], "pop" : 389, "state" : "KS" } +{ "_id" : "67425", "city" : "BROOKVILLE", "loc" : [ -97.86300199999999, 38.785771 ], "pop" : 323, "state" : "KS" } +{ "_id" : "67427", "city" : "BUSHTON", "loc" : [ -98.401629, 38.501836 ], "pop" : 480, "state" : "KS" } +{ "_id" : "67428", "city" : "CANTON", "loc" : [ -97.42907200000001, 38.385838 ], "pop" : 1050, "state" : "KS" } +{ "_id" : "67429", "city" : "CARLTON", "loc" : [ -97.307506, 38.6729 ], "pop" : 121, "state" : "KS" } +{ "_id" : "67430", "city" : "CAWKER CITY", "loc" : [ -98.433458, 39.511529 ], "pop" : 637, "state" : "KS" } +{ "_id" : "67431", "city" : "CHAPMAN", "loc" : [ -97.01696099999999, 38.972225 ], "pop" : 1968, "state" : "KS" } +{ "_id" : "67432", "city" : "CLAY CENTER", "loc" : [ -97.127793, 39.384354 ], "pop" : 6038, "state" : "KS" } +{ "_id" : "67436", "city" : "DELPHOS", "loc" : [ -97.771692, 39.273122 ], "pop" : 639, "state" : "KS" } +{ "_id" : "67437", "city" : "DOWNS", "loc" : [ -98.544117, 39.502753 ], "pop" : 1285, "state" : "KS" } +{ "_id" : "67438", "city" : "DURHAM", "loc" : [ -97.255532, 38.503836 ], "pop" : 444, "state" : "KS" } +{ "_id" : "67439", "city" : "ELLSWORTH", "loc" : [ -98.20567800000001, 38.731219 ], "pop" : 3728, "state" : "KS" } +{ "_id" : "67441", "city" : "ENTERPRISE", "loc" : [ -97.112222, 38.906321 ], "pop" : 1286, "state" : "KS" } +{ "_id" : "67442", "city" : "FALUN", "loc" : [ -97.755411, 38.664794 ], "pop" : 226, "state" : "KS" } +{ "_id" : "67443", "city" : "GALVA", "loc" : [ -97.53592, 38.382377 ], "pop" : 1151, "state" : "KS" } +{ "_id" : "67444", "city" : "GENESEO", "loc" : [ -98.185818, 38.503655 ], "pop" : 569, "state" : "KS" } +{ "_id" : "67445", "city" : "GLASCO", "loc" : [ -97.841829, 39.362092 ], "pop" : 663, "state" : "KS" } +{ "_id" : "67446", "city" : "GLEN ELDER", "loc" : [ -98.31550799999999, 39.495775 ], "pop" : 632, "state" : "KS" } +{ "_id" : "67447", "city" : "GREEN", "loc" : [ -96.999424, 39.420056 ], "pop" : 340, "state" : "KS" } +{ "_id" : "67448", "city" : "GYPSUM", "loc" : [ -97.43384, 38.704744 ], "pop" : 742, "state" : "KS" } +{ "_id" : "67449", "city" : "DELAVAN", "loc" : [ -97.015491, 38.702306 ], "pop" : 4145, "state" : "KS" } +{ "_id" : "67450", "city" : "HOLYROOD", "loc" : [ -98.415916, 38.589955 ], "pop" : 678, "state" : "KS" } +{ "_id" : "67451", "city" : "HOPE", "loc" : [ -97.106126, 38.6776 ], "pop" : 725, "state" : "KS" } +{ "_id" : "67452", "city" : "HUNTER", "loc" : [ -98.40174500000001, 39.242964 ], "pop" : 181, "state" : "KS" } +{ "_id" : "67454", "city" : "KANOPOLIS", "loc" : [ -98.15746799999999, 38.709111 ], "pop" : 641, "state" : "KS" } +{ "_id" : "67455", "city" : "WESTFALL", "loc" : [ -98.14042600000001, 39.028644 ], "pop" : 1986, "state" : "KS" } +{ "_id" : "67456", "city" : "LINDSBORG", "loc" : [ -97.67389, 38.576058 ], "pop" : 3320, "state" : "KS" } +{ "_id" : "67457", "city" : "LITTLE RIVER", "loc" : [ -98.01131700000001, 38.407868 ], "pop" : 841, "state" : "KS" } +{ "_id" : "67458", "city" : "LONGFORD", "loc" : [ -97.208662, 39.174324 ], "pop" : 507, "state" : "KS" } +{ "_id" : "67459", "city" : "LORRAINE", "loc" : [ -98.28995399999999, 38.565175 ], "pop" : 302, "state" : "KS" } +{ "_id" : "67460", "city" : "CONWAY", "loc" : [ -97.654989, 38.373732 ], "pop" : 16480, "state" : "KS" } +{ "_id" : "67463", "city" : "MANCHESTER", "loc" : [ -97.30954699999999, 39.087051 ], "pop" : 203, "state" : "KS" } +{ "_id" : "67464", "city" : "MARQUETTE", "loc" : [ -97.83807899999999, 38.556028 ], "pop" : 760, "state" : "KS" } +{ "_id" : "67465", "city" : "MENTOR", "loc" : [ -97.566034, 38.732103 ], "pop" : 791, "state" : "KS" } +{ "_id" : "67466", "city" : "MILTONVALE", "loc" : [ -97.457911, 39.348078 ], "pop" : 677, "state" : "KS" } +{ "_id" : "67467", "city" : "MINNEAPOLIS", "loc" : [ -97.668778, 39.129487 ], "pop" : 2985, "state" : "KS" } +{ "_id" : "67468", "city" : "MORGANVILLE", "loc" : [ -97.249219, 39.509219 ], "pop" : 847, "state" : "KS" } +{ "_id" : "67469", "city" : "NAVARRE", "loc" : [ -97.105554, 38.81772 ], "pop" : 205, "state" : "KS" } +{ "_id" : "67470", "city" : "NEW CAMBRIA", "loc" : [ -97.52301199999999, 38.896008 ], "pop" : 390, "state" : "KS" } +{ "_id" : "67472", "city" : "OAKHILL", "loc" : [ -97.330501, 39.247668 ], "pop" : 96, "state" : "KS" } +{ "_id" : "67473", "city" : "OSBORNE", "loc" : [ -98.69608100000001, 39.419402 ], "pop" : 2340, "state" : "KS" } +{ "_id" : "67474", "city" : "PORTIS", "loc" : [ -98.69044599999999, 39.545545 ], "pop" : 255, "state" : "KS" } +{ "_id" : "67475", "city" : "RAMONA", "loc" : [ -97.075874, 38.577726 ], "pop" : 237, "state" : "KS" } +{ "_id" : "67476", "city" : "ROXBURY", "loc" : [ -97.42719, 38.474325 ], "pop" : 106, "state" : "KS" } +{ "_id" : "67478", "city" : "SIMPSON", "loc" : [ -97.948887, 39.373074 ], "pop" : 159, "state" : "KS" } +{ "_id" : "67479", "city" : "SMOLAN", "loc" : [ -97.71327700000001, 38.76442 ], "pop" : 706, "state" : "KS" } +{ "_id" : "67480", "city" : "SOLOMON", "loc" : [ -97.351803, 38.919359 ], "pop" : 1626, "state" : "KS" } +{ "_id" : "67481", "city" : "SYLVAN GROVE", "loc" : [ -98.373031, 39.032443 ], "pop" : 976, "state" : "KS" } +{ "_id" : "67482", "city" : "TALMAGE", "loc" : [ -97.29736699999999, 39.008594 ], "pop" : 200, "state" : "KS" } +{ "_id" : "67483", "city" : "TAMPA", "loc" : [ -97.17738799999999, 38.553437 ], "pop" : 211, "state" : "KS" } +{ "_id" : "67484", "city" : "CULVER", "loc" : [ -97.82837499999999, 38.998318 ], "pop" : 745, "state" : "KS" } +{ "_id" : "67485", "city" : "TIPTON", "loc" : [ -98.46439100000001, 39.343639 ], "pop" : 373, "state" : "KS" } +{ "_id" : "67487", "city" : "WAKEFIELD", "loc" : [ -97.022851, 39.224916 ], "pop" : 1330, "state" : "KS" } +{ "_id" : "67488", "city" : "WELLS", "loc" : [ -97.554636, 39.059224 ], "pop" : 242, "state" : "KS" } +{ "_id" : "67490", "city" : "WILSON", "loc" : [ -98.44321600000001, 38.813373 ], "pop" : 1237, "state" : "KS" } +{ "_id" : "67491", "city" : "WINDOM", "loc" : [ -97.89647600000001, 38.384518 ], "pop" : 231, "state" : "KS" } +{ "_id" : "67492", "city" : "WOODBINE", "loc" : [ -96.961935, 38.813064 ], "pop" : 384, "state" : "KS" } +{ "_id" : "67501", "city" : "HUTCHINSON", "loc" : [ -97.93105199999999, 38.054995 ], "pop" : 27097, "state" : "KS" } +{ "_id" : "67502", "city" : "MEDORA", "loc" : [ -97.920517, 38.091483 ], "pop" : 21197, "state" : "KS" } +{ "_id" : "67505", "city" : "SOUTH HUTCHINSON", "loc" : [ -97.90814, 38.007306 ], "pop" : 4243, "state" : "KS" } +{ "_id" : "67510", "city" : "ABBYVILLE", "loc" : [ -98.207103, 37.962597 ], "pop" : 267, "state" : "KS" } +{ "_id" : "67511", "city" : "ALBERT", "loc" : [ -98.98071400000001, 38.475758 ], "pop" : 544, "state" : "KS" } +{ "_id" : "67512", "city" : "ALDEN", "loc" : [ -98.31120199999999, 38.234303 ], "pop" : 278, "state" : "KS" } +{ "_id" : "67513", "city" : "ALEXANDER", "loc" : [ -99.537828, 38.456996 ], "pop" : 150, "state" : "KS" } +{ "_id" : "67514", "city" : "ARLINGTON", "loc" : [ -98.15904500000001, 37.859795 ], "pop" : 930, "state" : "KS" } +{ "_id" : "67515", "city" : "ARNOLD", "loc" : [ -100.012003, 38.609122 ], "pop" : 0, "state" : "KS" } +{ "_id" : "67516", "city" : "BAZINE", "loc" : [ -99.701607, 38.456457 ], "pop" : 546, "state" : "KS" } +{ "_id" : "67517", "city" : "BEAVER", "loc" : [ -98.64832699999999, 38.650055 ], "pop" : 122, "state" : "KS" } +{ "_id" : "67518", "city" : "BEELER", "loc" : [ -100.170957, 38.48113 ], "pop" : 91, "state" : "KS" } +{ "_id" : "67519", "city" : "BELPRE", "loc" : [ -99.09357, 37.934655 ], "pop" : 268, "state" : "KS" } +{ "_id" : "67520", "city" : "BISON", "loc" : [ -99.198634, 38.519332 ], "pop" : 347, "state" : "KS" } +{ "_id" : "67521", "city" : "BROWNELL", "loc" : [ -99.732806, 38.623854 ], "pop" : 156, "state" : "KS" } +{ "_id" : "67522", "city" : "BUHLER", "loc" : [ -97.769093, 38.130903 ], "pop" : 1854, "state" : "KS" } +{ "_id" : "67523", "city" : "BURDETT", "loc" : [ -99.52751499999999, 38.210384 ], "pop" : 340, "state" : "KS" } +{ "_id" : "67524", "city" : "CHASE", "loc" : [ -98.35563399999999, 38.363515 ], "pop" : 772, "state" : "KS" } +{ "_id" : "67525", "city" : "CLAFLIN", "loc" : [ -98.53722, 38.540885 ], "pop" : 969, "state" : "KS" } +{ "_id" : "67526", "city" : "ELLINWOOD", "loc" : [ -98.584872, 38.356498 ], "pop" : 3297, "state" : "KS" } +{ "_id" : "67529", "city" : "GARFIELD", "loc" : [ -99.237433, 38.064929 ], "pop" : 368, "state" : "KS" } +{ "_id" : "67530", "city" : "HEIZER", "loc" : [ -98.783103, 38.370937 ], "pop" : 19861, "state" : "KS" } +{ "_id" : "67543", "city" : "HAVEN", "loc" : [ -97.777244, 37.868593 ], "pop" : 2181, "state" : "KS" } +{ "_id" : "67544", "city" : "SUSANK", "loc" : [ -98.79104100000001, 38.529246 ], "pop" : 3642, "state" : "KS" } +{ "_id" : "67545", "city" : "HUDSON", "loc" : [ -98.640815, 38.148493 ], "pop" : 381, "state" : "KS" } +{ "_id" : "67546", "city" : "INMAN", "loc" : [ -97.795107, 38.223212 ], "pop" : 1863, "state" : "KS" } +{ "_id" : "67547", "city" : "KINSLEY", "loc" : [ -99.411556, 37.924715 ], "pop" : 2321, "state" : "KS" } +{ "_id" : "67548", "city" : "LA CROSSE", "loc" : [ -99.30973299999999, 38.531144 ], "pop" : 1545, "state" : "KS" } +{ "_id" : "67550", "city" : "RADIUM", "loc" : [ -99.112382, 38.179643 ], "pop" : 6572, "state" : "KS" } +{ "_id" : "67552", "city" : "LEWIS", "loc" : [ -99.24797700000001, 37.906223 ], "pop" : 758, "state" : "KS" } +{ "_id" : "67553", "city" : "LIEBENTHAL", "loc" : [ -99.282051, 38.646585 ], "pop" : 231, "state" : "KS" } +{ "_id" : "67554", "city" : "LYONS", "loc" : [ -98.183094, 38.334881 ], "pop" : 4931, "state" : "KS" } +{ "_id" : "67556", "city" : "MC CRACKEN", "loc" : [ -99.553982, 38.595734 ], "pop" : 317, "state" : "KS" } +{ "_id" : "67557", "city" : "MACKSVILLE", "loc" : [ -98.948052, 37.943276 ], "pop" : 754, "state" : "KS" } +{ "_id" : "67559", "city" : "NEKOMA", "loc" : [ -99.42337999999999, 38.437226 ], "pop" : 81, "state" : "KS" } +{ "_id" : "67560", "city" : "NESS CITY", "loc" : [ -99.90286, 38.438754 ], "pop" : 2256, "state" : "KS" } +{ "_id" : "67561", "city" : "NICKERSON", "loc" : [ -98.067408, 38.141171 ], "pop" : 1596, "state" : "KS" } +{ "_id" : "67562", "city" : "ODIN", "loc" : [ -98.626762, 38.55628 ], "pop" : 281, "state" : "KS" } +{ "_id" : "67563", "city" : "OFFERLE", "loc" : [ -99.549757, 37.882805 ], "pop" : 323, "state" : "KS" } +{ "_id" : "67564", "city" : "GALATIA", "loc" : [ -98.92899, 38.567045 ], "pop" : 14, "state" : "KS" } +{ "_id" : "67565", "city" : "GALATIA", "loc" : [ -99.065635, 38.509239 ], "pop" : 711, "state" : "KS" } +{ "_id" : "67566", "city" : "PARTRIDGE", "loc" : [ -98.07981100000001, 37.967129 ], "pop" : 581, "state" : "KS" } +{ "_id" : "67567", "city" : "PAWNEE ROCK", "loc" : [ -98.981436, 38.278193 ], "pop" : 515, "state" : "KS" } +{ "_id" : "67568", "city" : "PLEVNA", "loc" : [ -98.298807, 37.965762 ], "pop" : 270, "state" : "KS" } +{ "_id" : "67570", "city" : "PRETTY PRAIRIE", "loc" : [ -97.988603, 37.77828 ], "pop" : 959, "state" : "KS" } +{ "_id" : "67572", "city" : "RANSOM", "loc" : [ -99.92665100000001, 38.640003 ], "pop" : 581, "state" : "KS" } +{ "_id" : "67573", "city" : "RAYMOND", "loc" : [ -98.411867, 38.287677 ], "pop" : 254, "state" : "KS" } +{ "_id" : "67574", "city" : "ROZEL", "loc" : [ -99.40484600000001, 38.214823 ], "pop" : 275, "state" : "KS" } +{ "_id" : "67575", "city" : "RUSH CENTER", "loc" : [ -99.30788099999999, 38.453341 ], "pop" : 275, "state" : "KS" } +{ "_id" : "67576", "city" : "SAINT JOHN", "loc" : [ -98.764653, 38.030939 ], "pop" : 2292, "state" : "KS" } +{ "_id" : "67577", "city" : "SEWARD", "loc" : [ -98.76391, 38.206558 ], "pop" : 249, "state" : "KS" } +{ "_id" : "67578", "city" : "STAFFORD", "loc" : [ -98.592854, 37.955372 ], "pop" : 1689, "state" : "KS" } +{ "_id" : "67579", "city" : "STERLING", "loc" : [ -98.205474, 38.212621 ], "pop" : 2485, "state" : "KS" } +{ "_id" : "67581", "city" : "SYLVIA", "loc" : [ -98.40676499999999, 37.955687 ], "pop" : 396, "state" : "KS" } +{ "_id" : "67582", "city" : "TIMKEN", "loc" : [ -99.19015400000001, 38.445489 ], "pop" : 185, "state" : "KS" } +{ "_id" : "67583", "city" : "LANGDON", "loc" : [ -98.421798, 37.809593 ], "pop" : 558, "state" : "KS" } +{ "_id" : "67584", "city" : "UTICA", "loc" : [ -100.137976, 38.641057 ], "pop" : 403, "state" : "KS" } +{ "_id" : "67601", "city" : "ANTONINO", "loc" : [ -99.320134, 38.878046 ], "pop" : 20703, "state" : "KS" } +{ "_id" : "67621", "city" : "AGRA", "loc" : [ -99.12554299999999, 39.803701 ], "pop" : 604, "state" : "KS" } +{ "_id" : "67622", "city" : "ALMENA", "loc" : [ -99.704177, 39.889071 ], "pop" : 574, "state" : "KS" } +{ "_id" : "67623", "city" : "ALTON", "loc" : [ -98.953875, 39.451422 ], "pop" : 364, "state" : "KS" } +{ "_id" : "67625", "city" : "BOGUE", "loc" : [ -99.67882, 39.378221 ], "pop" : 416, "state" : "KS" } +{ "_id" : "67626", "city" : "BUNKER HILL", "loc" : [ -98.678285, 38.835704 ], "pop" : 359, "state" : "KS" } +{ "_id" : "67627", "city" : "CATHARINE", "loc" : [ -99.215992, 38.96034 ], "pop" : 289, "state" : "KS" } +{ "_id" : "67628", "city" : "CEDAR", "loc" : [ -98.93692299999999, 39.660242 ], "pop" : 62, "state" : "KS" } +{ "_id" : "67629", "city" : "CLAYTON", "loc" : [ -100.059623, 39.69985 ], "pop" : 485, "state" : "KS" } +{ "_id" : "67630", "city" : "CODELL", "loc" : [ -99.15918600000001, 39.206652 ], "pop" : 160, "state" : "KS" } +{ "_id" : "67631", "city" : "COLLYER", "loc" : [ -100.06921, 38.965231 ], "pop" : 523, "state" : "KS" } +{ "_id" : "67632", "city" : "DAMAR", "loc" : [ -99.581056, 39.324181 ], "pop" : 214, "state" : "KS" } +{ "_id" : "67634", "city" : "DORRANCE", "loc" : [ -98.56947099999999, 38.834784 ], "pop" : 316, "state" : "KS" } +{ "_id" : "67635", "city" : "DRESDEN", "loc" : [ -100.411219, 39.609357 ], "pop" : 158, "state" : "KS" } +{ "_id" : "67636", "city" : "EDMOND", "loc" : [ -99.78418499999999, 39.661348 ], "pop" : 180, "state" : "KS" } +{ "_id" : "67637", "city" : "ELLIS", "loc" : [ -99.52851, 38.947128 ], "pop" : 2478, "state" : "KS" } +{ "_id" : "67638", "city" : "GAYLORD", "loc" : [ -98.801751, 39.659923 ], "pop" : 722, "state" : "KS" } +{ "_id" : "67639", "city" : "GLADE", "loc" : [ -99.29962999999999, 39.670373 ], "pop" : 320, "state" : "KS" } +{ "_id" : "67640", "city" : "GORHAM", "loc" : [ -99.01116, 38.872226 ], "pop" : 528, "state" : "KS" } +{ "_id" : "67641", "city" : "HARLAN", "loc" : [ -98.789796, 39.611345 ], "pop" : 91, "state" : "KS" } +{ "_id" : "67642", "city" : "HILL CITY", "loc" : [ -99.842921, 39.35657 ], "pop" : 2501, "state" : "KS" } +{ "_id" : "67643", "city" : "JENNINGS", "loc" : [ -100.283441, 39.676242 ], "pop" : 347, "state" : "KS" } +{ "_id" : "67644", "city" : "KIRWIN", "loc" : [ -99.120378, 39.671716 ], "pop" : 388, "state" : "KS" } +{ "_id" : "67645", "city" : "DENSMORE", "loc" : [ -100.001566, 39.609364 ], "pop" : 344, "state" : "KS" } +{ "_id" : "67646", "city" : "LOGAN", "loc" : [ -99.56869399999999, 39.661096 ], "pop" : 751, "state" : "KS" } +{ "_id" : "67647", "city" : "LONG ISLAND", "loc" : [ -99.539125, 39.951683 ], "pop" : 260, "state" : "KS" } +{ "_id" : "67648", "city" : "LUCAS", "loc" : [ -98.535186, 39.058126 ], "pop" : 576, "state" : "KS" } +{ "_id" : "67649", "city" : "LURAY", "loc" : [ -98.685084, 39.103856 ], "pop" : 339, "state" : "KS" } +{ "_id" : "67650", "city" : "MORLAND", "loc" : [ -100.07328, 39.322905 ], "pop" : 604, "state" : "KS" } +{ "_id" : "67651", "city" : "NATOMA", "loc" : [ -98.98286299999999, 39.201341 ], "pop" : 623, "state" : "KS" } +{ "_id" : "67652", "city" : "NEW ALMELO", "loc" : [ -100.139829, 39.624755 ], "pop" : 2, "state" : "KS" } +{ "_id" : "67653", "city" : "NORCATUR", "loc" : [ -100.200714, 39.844661 ], "pop" : 304, "state" : "KS" } +{ "_id" : "67654", "city" : "NORTON", "loc" : [ -99.887832, 39.840706 ], "pop" : 4360, "state" : "KS" } +{ "_id" : "67656", "city" : "OGALLAH", "loc" : [ -99.681117, 38.932307 ], "pop" : 460, "state" : "KS" } +{ "_id" : "67657", "city" : "PALCO", "loc" : [ -99.559265, 39.253107 ], "pop" : 384, "state" : "KS" } +{ "_id" : "67658", "city" : "PARADISE", "loc" : [ -98.920723, 39.075617 ], "pop" : 219, "state" : "KS" } +{ "_id" : "67659", "city" : "PENOKEE", "loc" : [ -99.919603, 39.391667 ], "pop" : 22, "state" : "KS" } +{ "_id" : "67660", "city" : "PFEIFER", "loc" : [ -99.14116199999999, 38.729915 ], "pop" : 123, "state" : "KS" } +{ "_id" : "67661", "city" : "PHILLIPSBURG", "loc" : [ -99.33284, 39.762333 ], "pop" : 3942, "state" : "KS" } +{ "_id" : "67663", "city" : "PLAINVILLE", "loc" : [ -99.300827, 39.230823 ], "pop" : 2499, "state" : "KS" } +{ "_id" : "67664", "city" : "PRAIRIE VIEW", "loc" : [ -99.568314, 39.836967 ], "pop" : 325, "state" : "KS" } +{ "_id" : "67665", "city" : "RUSSELL", "loc" : [ -98.85945100000001, 38.880563 ], "pop" : 5370, "state" : "KS" } +{ "_id" : "67667", "city" : "SCHOENCHEN", "loc" : [ -99.386872, 38.748087 ], "pop" : 534, "state" : "KS" } +{ "_id" : "67669", "city" : "STOCKTON", "loc" : [ -99.28710599999999, 39.43761 ], "pop" : 2147, "state" : "KS" } +{ "_id" : "67671", "city" : "VICTORIA", "loc" : [ -99.13905699999999, 38.858932 ], "pop" : 1877, "state" : "KS" } +{ "_id" : "67672", "city" : "WA KEENEY", "loc" : [ -99.88182399999999, 39.011415 ], "pop" : 2711, "state" : "KS" } +{ "_id" : "67673", "city" : "WALDO", "loc" : [ -98.778516, 39.087715 ], "pop" : 128, "state" : "KS" } +{ "_id" : "67675", "city" : "WOODSTON", "loc" : [ -99.103745, 39.443118 ], "pop" : 317, "state" : "KS" } +{ "_id" : "67676", "city" : "ZURICH", "loc" : [ -99.44908, 39.218155 ], "pop" : 318, "state" : "KS" } +{ "_id" : "67701", "city" : "COLBY", "loc" : [ -101.044169, 39.383038 ], "pop" : 7225, "state" : "KS" } +{ "_id" : "67730", "city" : "ATWOOD", "loc" : [ -101.031766, 39.792607 ], "pop" : 2174, "state" : "KS" } +{ "_id" : "67731", "city" : "BIRD CITY", "loc" : [ -101.531875, 39.757941 ], "pop" : 794, "state" : "KS" } +{ "_id" : "67732", "city" : "BREWSTER", "loc" : [ -101.372973, 39.36552 ], "pop" : 374, "state" : "KS" } +{ "_id" : "67733", "city" : "EDSON", "loc" : [ -101.520999, 39.357873 ], "pop" : 294, "state" : "KS" } +{ "_id" : "67734", "city" : "GEM", "loc" : [ -100.894781, 39.429587 ], "pop" : 157, "state" : "KS" } +{ "_id" : "67735", "city" : "GOODLAND", "loc" : [ -101.716396, 39.349099 ], "pop" : 6039, "state" : "KS" } +{ "_id" : "67736", "city" : "GOVE", "loc" : [ -100.486707, 38.886969 ], "pop" : 379, "state" : "KS" } +{ "_id" : "67737", "city" : "GRAINFIELD", "loc" : [ -100.468038, 39.103016 ], "pop" : 467, "state" : "KS" } +{ "_id" : "67738", "city" : "GRINNELL", "loc" : [ -100.662052, 39.085107 ], "pop" : 632, "state" : "KS" } +{ "_id" : "67739", "city" : "HERNDON", "loc" : [ -100.813935, 39.90356 ], "pop" : 477, "state" : "KS" } +{ "_id" : "67740", "city" : "HOXIE", "loc" : [ -100.47583, 39.332189 ], "pop" : 2023, "state" : "KS" } +{ "_id" : "67741", "city" : "KANORADO", "loc" : [ -102.001491, 39.343753 ], "pop" : 593, "state" : "KS" } +{ "_id" : "67743", "city" : "LEVANT", "loc" : [ -101.209587, 39.384083 ], "pop" : 143, "state" : "KS" } +{ "_id" : "67744", "city" : "LUDELL", "loc" : [ -100.960352, 39.863037 ], "pop" : 155, "state" : "KS" } +{ "_id" : "67745", "city" : "MC DONALD", "loc" : [ -101.322697, 39.792304 ], "pop" : 598, "state" : "KS" } +{ "_id" : "67747", "city" : "MONUMENT", "loc" : [ -101.034952, 39.07896 ], "pop" : 164, "state" : "KS" } +{ "_id" : "67748", "city" : "OAKLEY", "loc" : [ -100.858048, 39.112102 ], "pop" : 2346, "state" : "KS" } +{ "_id" : "67749", "city" : "OBERLIN", "loc" : [ -100.531389, 39.827507 ], "pop" : 3046, "state" : "KS" } +{ "_id" : "67751", "city" : "PARK", "loc" : [ -100.34694, 39.078832 ], "pop" : 316, "state" : "KS" } +{ "_id" : "67752", "city" : "QUINTER", "loc" : [ -100.233739, 39.036252 ], "pop" : 1437, "state" : "KS" } +{ "_id" : "67753", "city" : "MENLO", "loc" : [ -100.748982, 39.462185 ], "pop" : 246, "state" : "KS" } +{ "_id" : "67755", "city" : "RUSSELL SPRINGS", "loc" : [ -101.2759, 38.868374 ], "pop" : 243, "state" : "KS" } +{ "_id" : "67756", "city" : "WHEELER", "loc" : [ -101.81226, 39.773634 ], "pop" : 2449, "state" : "KS" } +{ "_id" : "67757", "city" : "SELDEN", "loc" : [ -100.525695, 39.521636 ], "pop" : 872, "state" : "KS" } +{ "_id" : "67758", "city" : "SHARON SPRINGS", "loc" : [ -101.743118, 38.885661 ], "pop" : 1148, "state" : "KS" } +{ "_id" : "67759", "city" : "STUDLEY", "loc" : [ -100.281436, 39.261618 ], "pop" : 314, "state" : "KS" } +{ "_id" : "67761", "city" : "WALLACE", "loc" : [ -101.573474, 38.874675 ], "pop" : 293, "state" : "KS" } +{ "_id" : "67762", "city" : "WESKAN", "loc" : [ -101.951162, 38.864867 ], "pop" : 380, "state" : "KS" } +{ "_id" : "67764", "city" : "WINONA", "loc" : [ -101.221569, 39.061038 ], "pop" : 328, "state" : "KS" } +{ "_id" : "67801", "city" : "DODGE CITY", "loc" : [ -100.024074, 37.756882 ], "pop" : 23098, "state" : "KS" } +{ "_id" : "67831", "city" : "ASHLAND", "loc" : [ -99.75904, 37.182345 ], "pop" : 1271, "state" : "KS" } +{ "_id" : "67834", "city" : "BUCKLIN", "loc" : [ -99.632543, 37.552974 ], "pop" : 848, "state" : "KS" } +{ "_id" : "67835", "city" : "CIMARRON", "loc" : [ -100.343825, 37.812727 ], "pop" : 2249, "state" : "KS" } +{ "_id" : "67837", "city" : "COPELAND", "loc" : [ -100.614815, 37.567994 ], "pop" : 536, "state" : "KS" } +{ "_id" : "67838", "city" : "DEERFIELD", "loc" : [ -101.143141, 38.00677 ], "pop" : 1077, "state" : "KS" } +{ "_id" : "67839", "city" : "ALAMOTA", "loc" : [ -100.458023, 38.474588 ], "pop" : 1666, "state" : "KS" } +{ "_id" : "67840", "city" : "ENGLEWOOD", "loc" : [ -99.987793, 37.065751 ], "pop" : 148, "state" : "KS" } +{ "_id" : "67841", "city" : "ENSIGN", "loc" : [ -100.249555, 37.641381 ], "pop" : 373, "state" : "KS" } +{ "_id" : "67842", "city" : "FORD", "loc" : [ -99.76421999999999, 37.632312 ], "pop" : 403, "state" : "KS" } +{ "_id" : "67843", "city" : "FORT DODGE", "loc" : [ -99.94563100000001, 37.70652 ], "pop" : 736, "state" : "KS" } +{ "_id" : "67844", "city" : "FOWLER", "loc" : [ -100.19815, 37.354201 ], "pop" : 881, "state" : "KS" } +{ "_id" : "67846", "city" : "GARDEN CITY", "loc" : [ -100.862088, 37.97693 ], "pop" : 30189, "state" : "KS" } +{ "_id" : "67849", "city" : "HANSTON", "loc" : [ -99.69278, 38.108964 ], "pop" : 695, "state" : "KS" } +{ "_id" : "67850", "city" : "HEALY", "loc" : [ -100.615941, 38.566355 ], "pop" : 476, "state" : "KS" } +{ "_id" : "67851", "city" : "HOLCOMB", "loc" : [ -100.989323, 37.993105 ], "pop" : 2060, "state" : "KS" } +{ "_id" : "67853", "city" : "INGALLS", "loc" : [ -100.514253, 37.829339 ], "pop" : 807, "state" : "KS" } +{ "_id" : "67854", "city" : "JETMORE", "loc" : [ -99.93266800000001, 38.073829 ], "pop" : 1482, "state" : "KS" } +{ "_id" : "67855", "city" : "JOHNSON", "loc" : [ -101.719354, 37.569424 ], "pop" : 1979, "state" : "KS" } +{ "_id" : "67856", "city" : "KALVESTA", "loc" : [ -100.443095, 38.102796 ], "pop" : 326, "state" : "KS" } +{ "_id" : "67857", "city" : "KENDALL", "loc" : [ -101.596883, 37.963657 ], "pop" : 86, "state" : "KS" } +{ "_id" : "67858", "city" : "KINGSDOWN", "loc" : [ -99.751553, 37.52138 ], "pop" : 124, "state" : "KS" } +{ "_id" : "67859", "city" : "KISMET", "loc" : [ -100.750645, 37.133601 ], "pop" : 1195, "state" : "KS" } +{ "_id" : "67860", "city" : "LAKIN", "loc" : [ -101.271297, 37.938197 ], "pop" : 2950, "state" : "KS" } +{ "_id" : "67861", "city" : "LEOTI", "loc" : [ -101.358851, 38.498726 ], "pop" : 2604, "state" : "KS" } +{ "_id" : "67862", "city" : "MANTER", "loc" : [ -101.910869, 37.545094 ], "pop" : 354, "state" : "KS" } +{ "_id" : "67863", "city" : "MODOC", "loc" : [ -101.199231, 38.482523 ], "pop" : 154, "state" : "KS" } +{ "_id" : "67864", "city" : "MEADE", "loc" : [ -100.336378, 37.282137 ], "pop" : 1949, "state" : "KS" } +{ "_id" : "67865", "city" : "BLOOM", "loc" : [ -99.960358, 37.42454 ], "pop" : 999, "state" : "KS" } +{ "_id" : "67867", "city" : "MONTEZUMA", "loc" : [ -100.446127, 37.601638 ], "pop" : 1431, "state" : "KS" } +{ "_id" : "67868", "city" : "PIERCEVILLE", "loc" : [ -100.71177, 37.907739 ], "pop" : 495, "state" : "KS" } +{ "_id" : "67869", "city" : "PLAINS", "loc" : [ -100.573174, 37.270106 ], "pop" : 1417, "state" : "KS" } +{ "_id" : "67870", "city" : "SATANTA", "loc" : [ -100.96908, 37.440916 ], "pop" : 1881, "state" : "KS" } +{ "_id" : "67871", "city" : "FRIEND", "loc" : [ -100.899331, 38.47994 ], "pop" : 4476, "state" : "KS" } +{ "_id" : "67874", "city" : "SHIELDS", "loc" : [ -100.417699, 38.620794 ], "pop" : 158, "state" : "KS" } +{ "_id" : "67876", "city" : "SPEARVILLE", "loc" : [ -99.737041, 37.823473 ], "pop" : 1361, "state" : "KS" } +{ "_id" : "67877", "city" : "SUBLETTE", "loc" : [ -100.820775, 37.522148 ], "pop" : 2364, "state" : "KS" } +{ "_id" : "67878", "city" : "SYRACUSE", "loc" : [ -101.768654, 37.982581 ], "pop" : 2302, "state" : "KS" } +{ "_id" : "67879", "city" : "TRIBUNE", "loc" : [ -101.765584, 38.496219 ], "pop" : 1774, "state" : "KS" } +{ "_id" : "67880", "city" : "ULYSSES", "loc" : [ -101.348846, 37.579174 ], "pop" : 7159, "state" : "KS" } +{ "_id" : "67882", "city" : "WRIGHT", "loc" : [ -99.923766, 37.767638 ], "pop" : 759, "state" : "KS" } +{ "_id" : "67901", "city" : "LIBERAL", "loc" : [ -100.92857, 37.043789 ], "pop" : 17189, "state" : "KS" } +{ "_id" : "67950", "city" : "ELKHART", "loc" : [ -101.901244, 37.015448 ], "pop" : 2562, "state" : "KS" } +{ "_id" : "67951", "city" : "HUGOTON", "loc" : [ -101.334614, 37.168226 ], "pop" : 4244, "state" : "KS" } +{ "_id" : "67952", "city" : "MOSCOW", "loc" : [ -101.242699, 37.317175 ], "pop" : 804, "state" : "KS" } +{ "_id" : "67953", "city" : "RICHFIELD", "loc" : [ -101.700382, 37.283364 ], "pop" : 269, "state" : "KS" } +{ "_id" : "67954", "city" : "ROLLA", "loc" : [ -101.644683, 37.108881 ], "pop" : 649, "state" : "KS" } +{ "_id" : "68001", "city" : "ABIE", "loc" : [ -96.956282, 41.347901 ], "pop" : 282, "state" : "NE" } +{ "_id" : "68002", "city" : "ARLINGTON", "loc" : [ -96.306974, 41.441654 ], "pop" : 2075, "state" : "NE" } +{ "_id" : "68003", "city" : "ASHLAND", "loc" : [ -96.39041, 41.05411 ], "pop" : 3296, "state" : "NE" } +{ "_id" : "68004", "city" : "BANCROFT", "loc" : [ -96.61714600000001, 42.026716 ], "pop" : 913, "state" : "NE" } +{ "_id" : "68005", "city" : "BELLEVUE", "loc" : [ -95.909932, 41.149663 ], "pop" : 24133, "state" : "NE" } +{ "_id" : "68007", "city" : "BENNINGTON", "loc" : [ -96.15752500000001, 41.362262 ], "pop" : 1372, "state" : "NE" } +{ "_id" : "68008", "city" : "BLAIR", "loc" : [ -96.161666, 41.545376 ], "pop" : 9059, "state" : "NE" } +{ "_id" : "68014", "city" : "BRUNO", "loc" : [ -96.964612, 41.271771 ], "pop" : 366, "state" : "NE" } +{ "_id" : "68015", "city" : "CEDAR BLUFFS", "loc" : [ -96.569115, 41.383492 ], "pop" : 1911, "state" : "NE" } +{ "_id" : "68017", "city" : "CERESCO", "loc" : [ -96.639769, 41.06807 ], "pop" : 1237, "state" : "NE" } +{ "_id" : "68018", "city" : "COLON", "loc" : [ -96.614132, 41.288261 ], "pop" : 290, "state" : "NE" } +{ "_id" : "68019", "city" : "CRAIG", "loc" : [ -96.392398, 41.771497 ], "pop" : 574, "state" : "NE" } +{ "_id" : "68020", "city" : "DECATUR", "loc" : [ -96.259456, 41.996553 ], "pop" : 975, "state" : "NE" } +{ "_id" : "68022", "city" : "ELKHORN", "loc" : [ -96.24308000000001, 41.275647 ], "pop" : 8508, "state" : "NE" } +{ "_id" : "68023", "city" : "FORT CALHOUN", "loc" : [ -96.032375, 41.437281 ], "pop" : 2833, "state" : "NE" } +{ "_id" : "68025", "city" : "FREMONT", "loc" : [ -96.494468, 41.441637 ], "pop" : 26498, "state" : "NE" } +{ "_id" : "68028", "city" : "GRETNA", "loc" : [ -96.24583699999999, 41.134458 ], "pop" : 3236, "state" : "NE" } +{ "_id" : "68029", "city" : "HERMAN", "loc" : [ -96.286942, 41.652381 ], "pop" : 988, "state" : "NE" } +{ "_id" : "68031", "city" : "HOOPER", "loc" : [ -96.523231, 41.641371 ], "pop" : 1821, "state" : "NE" } +{ "_id" : "68033", "city" : "ITHACA", "loc" : [ -96.529785, 41.174849 ], "pop" : 359, "state" : "NE" } +{ "_id" : "68034", "city" : "KENNARD", "loc" : [ -96.16192700000001, 41.471139 ], "pop" : 1652, "state" : "NE" } +{ "_id" : "68035", "city" : "LESHARA", "loc" : [ -96.449805, 41.346597 ], "pop" : 492, "state" : "NE" } +{ "_id" : "68036", "city" : "LINWOOD", "loc" : [ -96.93987300000001, 41.412926 ], "pop" : 175, "state" : "NE" } +{ "_id" : "68037", "city" : "LOUISVILLE", "loc" : [ -96.194817, 40.996667 ], "pop" : 1998, "state" : "NE" } +{ "_id" : "68038", "city" : "LYONS", "loc" : [ -96.46613600000001, 41.94416 ], "pop" : 1613, "state" : "NE" } +{ "_id" : "68039", "city" : "MACY", "loc" : [ -96.35886499999999, 42.117739 ], "pop" : 1464, "state" : "NE" } +{ "_id" : "68040", "city" : "MALMO", "loc" : [ -96.73271800000001, 41.298424 ], "pop" : 584, "state" : "NE" } +{ "_id" : "68041", "city" : "MEAD", "loc" : [ -96.49614099999999, 41.23929 ], "pop" : 786, "state" : "NE" } +{ "_id" : "68044", "city" : "NICKERSON", "loc" : [ -96.49042300000001, 41.523293 ], "pop" : 691, "state" : "NE" } +{ "_id" : "68045", "city" : "OAKLAND", "loc" : [ -96.46706399999999, 41.838426 ], "pop" : 1855, "state" : "NE" } +{ "_id" : "68046", "city" : "PAPILLION", "loc" : [ -96.037052, 41.152257 ], "pop" : 7177, "state" : "NE" } +{ "_id" : "68047", "city" : "PENDER", "loc" : [ -96.718907, 42.117719 ], "pop" : 1818, "state" : "NE" } +{ "_id" : "68048", "city" : "PLATTSMOUTH", "loc" : [ -95.913933, 40.999194 ], "pop" : 10387, "state" : "NE" } +{ "_id" : "68050", "city" : "PRAGUE", "loc" : [ -96.830084, 41.303598 ], "pop" : 819, "state" : "NE" } +{ "_id" : "68054", "city" : "RICHFIELD", "loc" : [ -96.045627, 41.090522 ], "pop" : 822, "state" : "NE" } +{ "_id" : "68055", "city" : "ROSALIE", "loc" : [ -96.49286600000001, 42.057435 ], "pop" : 424, "state" : "NE" } +{ "_id" : "68057", "city" : "SCRIBNER", "loc" : [ -96.64409499999999, 41.663035 ], "pop" : 1485, "state" : "NE" } +{ "_id" : "68059", "city" : "SPRINGFIELD", "loc" : [ -96.143811, 41.07649 ], "pop" : 2961, "state" : "NE" } +{ "_id" : "68061", "city" : "TEKAMAH", "loc" : [ -96.228144, 41.781898 ], "pop" : 2881, "state" : "NE" } +{ "_id" : "68062", "city" : "THURSTON", "loc" : [ -96.69035599999999, 42.188161 ], "pop" : 362, "state" : "NE" } +{ "_id" : "68064", "city" : "VALLEY", "loc" : [ -96.346288, 41.318581 ], "pop" : 3067, "state" : "NE" } +{ "_id" : "68065", "city" : "VALPARAISO", "loc" : [ -96.80914900000001, 41.084304 ], "pop" : 1095, "state" : "NE" } +{ "_id" : "68066", "city" : "WAHOO", "loc" : [ -96.62194599999999, 41.211723 ], "pop" : 4258, "state" : "NE" } +{ "_id" : "68067", "city" : "WALTHILL", "loc" : [ -96.480294, 42.148543 ], "pop" : 1212, "state" : "NE" } +{ "_id" : "68069", "city" : "WATERLOO", "loc" : [ -96.306318, 41.27024 ], "pop" : 1468, "state" : "NE" } +{ "_id" : "68070", "city" : "WESTON", "loc" : [ -96.769075, 41.181083 ], "pop" : 834, "state" : "NE" } +{ "_id" : "68071", "city" : "WINNEBAGO", "loc" : [ -96.468507, 42.233851 ], "pop" : 1449, "state" : "NE" } +{ "_id" : "68073", "city" : "YUTAN", "loc" : [ -96.393247, 41.23403 ], "pop" : 1838, "state" : "NE" } +{ "_id" : "68102", "city" : "OMAHA", "loc" : [ -95.940909, 41.258961 ], "pop" : 4963, "state" : "NE" } +{ "_id" : "68104", "city" : "OMAHA", "loc" : [ -95.999888, 41.29186 ], "pop" : 35325, "state" : "NE" } +{ "_id" : "68105", "city" : "OMAHA", "loc" : [ -95.96293799999999, 41.243502 ], "pop" : 23007, "state" : "NE" } +{ "_id" : "68106", "city" : "OMAHA", "loc" : [ -95.997972, 41.240322 ], "pop" : 20622, "state" : "NE" } +{ "_id" : "68107", "city" : "OMAHA", "loc" : [ -95.955877, 41.206783 ], "pop" : 23890, "state" : "NE" } +{ "_id" : "68108", "city" : "OMAHA", "loc" : [ -95.93355699999999, 41.238198 ], "pop" : 12721, "state" : "NE" } +{ "_id" : "68110", "city" : "OMAHA", "loc" : [ -95.936072, 41.293342 ], "pop" : 8718, "state" : "NE" } +{ "_id" : "68111", "city" : "OMAHA", "loc" : [ -95.965045, 41.296212 ], "pop" : 28453, "state" : "NE" } +{ "_id" : "68112", "city" : "OMAHA", "loc" : [ -95.959684, 41.329614 ], "pop" : 12075, "state" : "NE" } +{ "_id" : "68113", "city" : "OFFUTT A F B", "loc" : [ -95.907601, 41.114755 ], "pop" : 2894, "state" : "NE" } +{ "_id" : "68114", "city" : "OMAHA", "loc" : [ -96.049306, 41.265624 ], "pop" : 16573, "state" : "NE" } +{ "_id" : "68116", "city" : "OMAHA", "loc" : [ -96.149462, 41.287854 ], "pop" : 875, "state" : "NE" } +{ "_id" : "68117", "city" : "OMAHA", "loc" : [ -95.995301, 41.206403 ], "pop" : 8347, "state" : "NE" } +{ "_id" : "68118", "city" : "OMAHA", "loc" : [ -96.166118, 41.260636 ], "pop" : 3593, "state" : "NE" } +{ "_id" : "68122", "city" : "OMAHA", "loc" : [ -96.045772, 41.333312 ], "pop" : 2556, "state" : "NE" } +{ "_id" : "68123", "city" : "OMAHA", "loc" : [ -95.95599, 41.122265 ], "pop" : 20362, "state" : "NE" } +{ "_id" : "68124", "city" : "OMAHA", "loc" : [ -96.049515, 41.233814 ], "pop" : 16340, "state" : "NE" } +{ "_id" : "68127", "city" : "RALSTON", "loc" : [ -96.055019, 41.201782 ], "pop" : 22434, "state" : "NE" } +{ "_id" : "68128", "city" : "PAPILLION", "loc" : [ -96.040256, 41.171983 ], "pop" : 15882, "state" : "NE" } +{ "_id" : "68130", "city" : "OMAHA", "loc" : [ -96.168815, 41.235452 ], "pop" : 7291, "state" : "NE" } +{ "_id" : "68131", "city" : "OMAHA", "loc" : [ -95.963891, 41.264658 ], "pop" : 14069, "state" : "NE" } +{ "_id" : "68132", "city" : "OMAHA", "loc" : [ -95.995954, 41.265746 ], "pop" : 13730, "state" : "NE" } +{ "_id" : "68133", "city" : "PAPILLION", "loc" : [ -96.013076, 41.141564 ], "pop" : 842, "state" : "NE" } +{ "_id" : "68134", "city" : "OMAHA", "loc" : [ -96.054569, 41.294917 ], "pop" : 27571, "state" : "NE" } +{ "_id" : "68135", "city" : "OMAHA", "loc" : [ -96.169827, 41.210419 ], "pop" : 2503, "state" : "NE" } +{ "_id" : "68136", "city" : "OMAHA", "loc" : [ -96.209633, 41.168343 ], "pop" : 226, "state" : "NE" } +{ "_id" : "68137", "city" : "MILLARD", "loc" : [ -96.12446199999999, 41.201067 ], "pop" : 23894, "state" : "NE" } +{ "_id" : "68138", "city" : "PAPILLION", "loc" : [ -96.129718, 41.177724 ], "pop" : 8845, "state" : "NE" } +{ "_id" : "68142", "city" : "OMAHA", "loc" : [ -96.090109, 41.335904 ], "pop" : 1249, "state" : "NE" } +{ "_id" : "68144", "city" : "MILLARD", "loc" : [ -96.116772, 41.235599 ], "pop" : 26450, "state" : "NE" } +{ "_id" : "68147", "city" : "OMAHA", "loc" : [ -95.95915599999999, 41.181508 ], "pop" : 9205, "state" : "NE" } +{ "_id" : "68152", "city" : "OMAHA", "loc" : [ -96.00029499999999, 41.334557 ], "pop" : 6518, "state" : "NE" } +{ "_id" : "68154", "city" : "OMAHA", "loc" : [ -96.120611, 41.264167 ], "pop" : 21847, "state" : "NE" } +{ "_id" : "68157", "city" : "PAPILLION", "loc" : [ -95.995378, 41.183423 ], "pop" : 6112, "state" : "NE" } +{ "_id" : "68164", "city" : "OMAHA", "loc" : [ -96.100793, 41.29552 ], "pop" : 16301, "state" : "NE" } +{ "_id" : "68301", "city" : "ADAMS", "loc" : [ -96.53955999999999, 40.457571 ], "pop" : 1127, "state" : "NE" } +{ "_id" : "68303", "city" : "ALEXANDRIA", "loc" : [ -97.40385499999999, 40.261446 ], "pop" : 429, "state" : "NE" } +{ "_id" : "68304", "city" : "ALVO", "loc" : [ -96.40355700000001, 40.899185 ], "pop" : 447, "state" : "NE" } +{ "_id" : "68305", "city" : "AUBURN", "loc" : [ -95.85264599999999, 40.378889 ], "pop" : 4296, "state" : "NE" } +{ "_id" : "68307", "city" : "AVOCA", "loc" : [ -96.095736, 40.815941 ], "pop" : 444, "state" : "NE" } +{ "_id" : "68310", "city" : "BEATRICE", "loc" : [ -96.743494, 40.270509 ], "pop" : 15528, "state" : "NE" } +{ "_id" : "68313", "city" : "BEAVER CROSSING", "loc" : [ -97.29135599999999, 40.788658 ], "pop" : 827, "state" : "NE" } +{ "_id" : "68314", "city" : "BEE", "loc" : [ -97.07446899999999, 41.000675 ], "pop" : 447, "state" : "NE" } +{ "_id" : "68315", "city" : "BELVIDERE", "loc" : [ -97.55541599999999, 40.25101 ], "pop" : 233, "state" : "NE" } +{ "_id" : "68316", "city" : "BENEDICT", "loc" : [ -97.60292099999999, 41.003268 ], "pop" : 646, "state" : "NE" } +{ "_id" : "68317", "city" : "BENNET", "loc" : [ -96.5134, 40.63822 ], "pop" : 1611, "state" : "NE" } +{ "_id" : "68318", "city" : "BLUE SPRINGS", "loc" : [ -96.659037, 40.140684 ], "pop" : 504, "state" : "NE" } +{ "_id" : "68319", "city" : "BRADSHAW", "loc" : [ -97.760699, 40.920718 ], "pop" : 716, "state" : "NE" } +{ "_id" : "68320", "city" : "BROCK", "loc" : [ -95.98014499999999, 40.477227 ], "pop" : 400, "state" : "NE" } +{ "_id" : "68321", "city" : "BROWNVILLE", "loc" : [ -95.69347999999999, 40.399447 ], "pop" : 475, "state" : "NE" } +{ "_id" : "68322", "city" : "BRUNING", "loc" : [ -97.557276, 40.330157 ], "pop" : 496, "state" : "NE" } +{ "_id" : "68323", "city" : "BURCHARD", "loc" : [ -96.348806, 40.105743 ], "pop" : 507, "state" : "NE" } +{ "_id" : "68324", "city" : "BURR", "loc" : [ -96.238401, 40.560057 ], "pop" : 500, "state" : "NE" } +{ "_id" : "68325", "city" : "BYRON", "loc" : [ -97.761236, 40.02688 ], "pop" : 357, "state" : "NE" } +{ "_id" : "68326", "city" : "CARLETON", "loc" : [ -97.671909, 40.300534 ], "pop" : 323, "state" : "NE" } +{ "_id" : "68327", "city" : "CHESTER", "loc" : [ -97.61969000000001, 40.028954 ], "pop" : 527, "state" : "NE" } +{ "_id" : "68328", "city" : "CLATONIA", "loc" : [ -96.855513, 40.47236 ], "pop" : 502, "state" : "NE" } +{ "_id" : "68329", "city" : "COOK", "loc" : [ -96.15262, 40.498628 ], "pop" : 592, "state" : "NE" } +{ "_id" : "68330", "city" : "CORDOVA", "loc" : [ -97.340721, 40.718477 ], "pop" : 241, "state" : "NE" } +{ "_id" : "68331", "city" : "CORTLAND", "loc" : [ -96.716627, 40.497599 ], "pop" : 691, "state" : "NE" } +{ "_id" : "68332", "city" : "CRAB ORCHARD", "loc" : [ -96.411569, 40.316648 ], "pop" : 169, "state" : "NE" } +{ "_id" : "68333", "city" : "CRETE", "loc" : [ -96.956676, 40.619302 ], "pop" : 6390, "state" : "NE" } +{ "_id" : "68335", "city" : "DAVENPORT", "loc" : [ -97.80495999999999, 40.310782 ], "pop" : 488, "state" : "NE" } +{ "_id" : "68336", "city" : "DAVEY", "loc" : [ -96.641379, 41.002543 ], "pop" : 413, "state" : "NE" } +{ "_id" : "68337", "city" : "DAWSON", "loc" : [ -95.834097, 40.137697 ], "pop" : 359, "state" : "NE" } +{ "_id" : "68338", "city" : "DAYKIN", "loc" : [ -97.304306, 40.31916 ], "pop" : 324, "state" : "NE" } +{ "_id" : "68339", "city" : "DENTON", "loc" : [ -96.853157, 40.700905 ], "pop" : 1035, "state" : "NE" } +{ "_id" : "68340", "city" : "DESHLER", "loc" : [ -97.730007, 40.138668 ], "pop" : 1108, "state" : "NE" } +{ "_id" : "68341", "city" : "DE WITT", "loc" : [ -96.93376600000001, 40.39438 ], "pop" : 821, "state" : "NE" } +{ "_id" : "68342", "city" : "DILLER", "loc" : [ -96.949487, 40.119201 ], "pop" : 507, "state" : "NE" } +{ "_id" : "68343", "city" : "DORCHESTER", "loc" : [ -97.10556200000001, 40.649858 ], "pop" : 832, "state" : "NE" } +{ "_id" : "68344", "city" : "DOUGLAS", "loc" : [ -96.396958, 40.583824 ], "pop" : 369, "state" : "NE" } +{ "_id" : "68345", "city" : "DU BOIS", "loc" : [ -96.05747700000001, 40.037486 ], "pop" : 315, "state" : "NE" } +{ "_id" : "68346", "city" : "DUNBAR", "loc" : [ -96.013575, 40.659156 ], "pop" : 619, "state" : "NE" } +{ "_id" : "68347", "city" : "EAGLE", "loc" : [ -96.42896500000001, 40.816909 ], "pop" : 1561, "state" : "NE" } +{ "_id" : "68348", "city" : "ELK CREEK", "loc" : [ -96.142128, 40.2977 ], "pop" : 356, "state" : "NE" } +{ "_id" : "68349", "city" : "ELMWOOD", "loc" : [ -96.29439499999999, 40.837811 ], "pop" : 879, "state" : "NE" } +{ "_id" : "68350", "city" : "ENDICOTT", "loc" : [ -97.09378700000001, 40.073407 ], "pop" : 282, "state" : "NE" } +{ "_id" : "68351", "city" : "EXETER", "loc" : [ -97.44238799999999, 40.634062 ], "pop" : 934, "state" : "NE" } +{ "_id" : "68352", "city" : "FAIRBURY", "loc" : [ -97.18391800000001, 40.148817 ], "pop" : 5763, "state" : "NE" } +{ "_id" : "68354", "city" : "FAIRMONT", "loc" : [ -97.58729, 40.6404 ], "pop" : 968, "state" : "NE" } +{ "_id" : "68355", "city" : "FALLS CITY", "loc" : [ -95.593148, 40.074193 ], "pop" : 6069, "state" : "NE" } +{ "_id" : "68357", "city" : "FILLEY", "loc" : [ -96.53013199999999, 40.294606 ], "pop" : 352, "state" : "NE" } +{ "_id" : "68358", "city" : "FIRTH", "loc" : [ -96.614023, 40.558595 ], "pop" : 1095, "state" : "NE" } +{ "_id" : "68359", "city" : "FRIEND", "loc" : [ -97.273928, 40.636792 ], "pop" : 1707, "state" : "NE" } +{ "_id" : "68360", "city" : "GARLAND", "loc" : [ -96.97019, 40.941189 ], "pop" : 795, "state" : "NE" } +{ "_id" : "68361", "city" : "GENEVA", "loc" : [ -97.60962499999999, 40.527731 ], "pop" : 3224, "state" : "NE" } +{ "_id" : "68362", "city" : "GILEAD", "loc" : [ -97.42713999999999, 40.146986 ], "pop" : 169, "state" : "NE" } +{ "_id" : "68364", "city" : "GOEHNER", "loc" : [ -97.205456, 40.830208 ], "pop" : 457, "state" : "NE" } +{ "_id" : "68365", "city" : "GRAFTON", "loc" : [ -97.740263, 40.640193 ], "pop" : 302, "state" : "NE" } +{ "_id" : "68366", "city" : "GREENWOOD", "loc" : [ -96.42583999999999, 40.97064 ], "pop" : 813, "state" : "NE" } +{ "_id" : "68367", "city" : "GRESHAM", "loc" : [ -97.407937, 41.020952 ], "pop" : 426, "state" : "NE" } +{ "_id" : "68368", "city" : "HALLAM", "loc" : [ -96.754518, 40.554734 ], "pop" : 663, "state" : "NE" } +{ "_id" : "68370", "city" : "HEBRON", "loc" : [ -97.605228, 40.172807 ], "pop" : 2305, "state" : "NE" } +{ "_id" : "68371", "city" : "HENDERSON", "loc" : [ -97.797865, 40.781374 ], "pop" : 1615, "state" : "NE" } +{ "_id" : "68372", "city" : "HOLLAND", "loc" : [ -96.62492399999999, 40.624558 ], "pop" : 1495, "state" : "NE" } +{ "_id" : "68374", "city" : "HOLMESVILLE", "loc" : [ -96.63263499999999, 40.220245 ], "pop" : 353, "state" : "NE" } +{ "_id" : "68375", "city" : "HUBBELL", "loc" : [ -97.473467, 40.045581 ], "pop" : 200, "state" : "NE" } +{ "_id" : "68376", "city" : "HUMBOLDT", "loc" : [ -95.931079, 40.156595 ], "pop" : 1806, "state" : "NE" } +{ "_id" : "68377", "city" : "JANSEN", "loc" : [ -97.02442600000001, 40.207425 ], "pop" : 579, "state" : "NE" } +{ "_id" : "68378", "city" : "JOHNSON", "loc" : [ -95.988276, 40.401623 ], "pop" : 747, "state" : "NE" } +{ "_id" : "68379", "city" : "JULIAN", "loc" : [ -95.85046, 40.486056 ], "pop" : 313, "state" : "NE" } +{ "_id" : "68380", "city" : "LEWISTON", "loc" : [ -96.40494099999999, 40.230879 ], "pop" : 189, "state" : "NE" } +{ "_id" : "68381", "city" : "LIBERTY", "loc" : [ -96.523668, 40.075286 ], "pop" : 422, "state" : "NE" } +{ "_id" : "68401", "city" : "MC COOL JUNCTION", "loc" : [ -97.593666, 40.744181 ], "pop" : 820, "state" : "NE" } +{ "_id" : "68402", "city" : "MALCOLM", "loc" : [ -96.859966, 40.90913 ], "pop" : 954, "state" : "NE" } +{ "_id" : "68404", "city" : "MARTELL", "loc" : [ -96.744227, 40.651434 ], "pop" : 864, "state" : "NE" } +{ "_id" : "68405", "city" : "MILFORD", "loc" : [ -97.05763, 40.763153 ], "pop" : 3258, "state" : "NE" } +{ "_id" : "68406", "city" : "MILLIGAN", "loc" : [ -97.39968399999999, 40.495163 ], "pop" : 477, "state" : "NE" } +{ "_id" : "68407", "city" : "MURDOCK", "loc" : [ -96.28482700000001, 40.919034 ], "pop" : 622, "state" : "NE" } +{ "_id" : "68409", "city" : "MURRAY", "loc" : [ -95.922668, 40.91999 ], "pop" : 1145, "state" : "NE" } +{ "_id" : "68410", "city" : "NEBRASKA CITY", "loc" : [ -95.86190000000001, 40.674746 ], "pop" : 7668, "state" : "NE" } +{ "_id" : "68413", "city" : "NEHAWKA", "loc" : [ -95.993045, 40.832978 ], "pop" : 423, "state" : "NE" } +{ "_id" : "68414", "city" : "NEMAHA", "loc" : [ -95.69132999999999, 40.319818 ], "pop" : 428, "state" : "NE" } +{ "_id" : "68415", "city" : "ODELL", "loc" : [ -96.801924, 40.045128 ], "pop" : 642, "state" : "NE" } +{ "_id" : "68416", "city" : "OHIOWA", "loc" : [ -97.442712, 40.406507 ], "pop" : 274, "state" : "NE" } +{ "_id" : "68417", "city" : "OTOE", "loc" : [ -96.132867, 40.735485 ], "pop" : 696, "state" : "NE" } +{ "_id" : "68418", "city" : "PALMYRA", "loc" : [ -96.39990299999999, 40.704964 ], "pop" : 1012, "state" : "NE" } +{ "_id" : "68420", "city" : "PAWNEE CITY", "loc" : [ -96.150926, 40.109291 ], "pop" : 1434, "state" : "NE" } +{ "_id" : "68421", "city" : "PERU", "loc" : [ -95.731166, 40.476643 ], "pop" : 1321, "state" : "NE" } +{ "_id" : "68422", "city" : "PICKRELL", "loc" : [ -96.734444, 40.382117 ], "pop" : 512, "state" : "NE" } +{ "_id" : "68423", "city" : "PLEASANT DALE", "loc" : [ -96.95128, 40.813329 ], "pop" : 678, "state" : "NE" } +{ "_id" : "68424", "city" : "PLYMOUTH", "loc" : [ -97.001169, 40.303896 ], "pop" : 872, "state" : "NE" } +{ "_id" : "68428", "city" : "AGNEW", "loc" : [ -96.78294200000001, 40.985331 ], "pop" : 1218, "state" : "NE" } +{ "_id" : "68429", "city" : "REYNOLDS", "loc" : [ -97.318243, 40.059372 ], "pop" : 184, "state" : "NE" } +{ "_id" : "68430", "city" : "ROCA", "loc" : [ -96.63908499999999, 40.670195 ], "pop" : 517, "state" : "NE" } +{ "_id" : "68431", "city" : "RULO", "loc" : [ -95.42921800000001, 40.053619 ], "pop" : 312, "state" : "NE" } +{ "_id" : "68432", "city" : "SAINT MARY", "loc" : [ -96.28997200000001, 40.444756 ], "pop" : 259, "state" : "NE" } +{ "_id" : "68433", "city" : "SALEM", "loc" : [ -95.727261, 40.061953 ], "pop" : 280, "state" : "NE" } +{ "_id" : "68434", "city" : "SEWARD", "loc" : [ -97.09661800000001, 40.906609 ], "pop" : 7082, "state" : "NE" } +{ "_id" : "68436", "city" : "SHICKLEY", "loc" : [ -97.714298, 40.407677 ], "pop" : 722, "state" : "NE" } +{ "_id" : "68437", "city" : "SHUBERT", "loc" : [ -95.689454, 40.232479 ], "pop" : 320, "state" : "NE" } +{ "_id" : "68439", "city" : "STAPLEHURST", "loc" : [ -97.18585899999999, 40.984455 ], "pop" : 597, "state" : "NE" } +{ "_id" : "68440", "city" : "STEELE CITY", "loc" : [ -96.990712, 40.042492 ], "pop" : 248, "state" : "NE" } +{ "_id" : "68441", "city" : "STEINAUER", "loc" : [ -96.230215, 40.216885 ], "pop" : 378, "state" : "NE" } +{ "_id" : "68442", "city" : "STELLA", "loc" : [ -95.767989, 40.230345 ], "pop" : 342, "state" : "NE" } +{ "_id" : "68443", "city" : "STERLING", "loc" : [ -96.386655, 40.463743 ], "pop" : 840, "state" : "NE" } +{ "_id" : "68444", "city" : "STRANG", "loc" : [ -97.552132, 40.398105 ], "pop" : 202, "state" : "NE" } +{ "_id" : "68445", "city" : "SWANTON", "loc" : [ -97.08055, 40.384389 ], "pop" : 266, "state" : "NE" } +{ "_id" : "68446", "city" : "SYRACUSE", "loc" : [ -96.182407, 40.661386 ], "pop" : 1937, "state" : "NE" } +{ "_id" : "68447", "city" : "TABLE ROCK", "loc" : [ -96.081822, 40.187437 ], "pop" : 494, "state" : "NE" } +{ "_id" : "68448", "city" : "TALMAGE", "loc" : [ -96.013814, 40.558646 ], "pop" : 731, "state" : "NE" } +{ "_id" : "68450", "city" : "TECUMSEH", "loc" : [ -96.20495099999999, 40.369702 ], "pop" : 2457, "state" : "NE" } +{ "_id" : "68452", "city" : "ONG", "loc" : [ -97.861018, 40.396806 ], "pop" : 150, "state" : "NE" } +{ "_id" : "68453", "city" : "TOBIAS", "loc" : [ -97.318444, 40.426171 ], "pop" : 464, "state" : "NE" } +{ "_id" : "68454", "city" : "UNADILLA", "loc" : [ -96.282454, 40.691675 ], "pop" : 720, "state" : "NE" } +{ "_id" : "68455", "city" : "UNION", "loc" : [ -95.903739, 40.824452 ], "pop" : 689, "state" : "NE" } +{ "_id" : "68456", "city" : "UTICA", "loc" : [ -97.334431, 40.91685 ], "pop" : 1068, "state" : "NE" } +{ "_id" : "68457", "city" : "VERDON", "loc" : [ -95.716157, 40.142507 ], "pop" : 449, "state" : "NE" } +{ "_id" : "68458", "city" : "VIRGINIA", "loc" : [ -96.512145, 40.230877 ], "pop" : 226, "state" : "NE" } +{ "_id" : "68460", "city" : "WACO", "loc" : [ -97.453352, 40.919826 ], "pop" : 613, "state" : "NE" } +{ "_id" : "68461", "city" : "WALTON", "loc" : [ -96.535943, 40.797467 ], "pop" : 268, "state" : "NE" } +{ "_id" : "68462", "city" : "WAVERLY", "loc" : [ -96.525988, 40.92224 ], "pop" : 2545, "state" : "NE" } +{ "_id" : "68463", "city" : "WEEPING WATER", "loc" : [ -96.15282500000001, 40.873096 ], "pop" : 1910, "state" : "NE" } +{ "_id" : "68464", "city" : "WESTERN", "loc" : [ -97.197649, 40.415157 ], "pop" : 552, "state" : "NE" } +{ "_id" : "68465", "city" : "WILBER", "loc" : [ -96.975713, 40.482141 ], "pop" : 2016, "state" : "NE" } +{ "_id" : "68466", "city" : "WYMORE", "loc" : [ -96.661326, 40.112955 ], "pop" : 1935, "state" : "NE" } +{ "_id" : "68467", "city" : "YORK", "loc" : [ -97.582482, 40.866678 ], "pop" : 9592, "state" : "NE" } +{ "_id" : "68502", "city" : "LINCOLN", "loc" : [ -96.693763, 40.789282 ], "pop" : 27576, "state" : "NE" } +{ "_id" : "68503", "city" : "LINCOLN", "loc" : [ -96.67662300000001, 40.823339 ], "pop" : 14093, "state" : "NE" } +{ "_id" : "68504", "city" : "LINCOLN", "loc" : [ -96.653248, 40.839226 ], "pop" : 12756, "state" : "NE" } +{ "_id" : "68505", "city" : "LINCOLN", "loc" : [ -96.625193, 40.824674 ], "pop" : 13461, "state" : "NE" } +{ "_id" : "68506", "city" : "LINCOLN", "loc" : [ -96.643052, 40.784796 ], "pop" : 25903, "state" : "NE" } +{ "_id" : "68507", "city" : "LINCOLN", "loc" : [ -96.628874, 40.847265 ], "pop" : 12296, "state" : "NE" } +{ "_id" : "68508", "city" : "LINCOLN", "loc" : [ -96.700907, 40.814503 ], "pop" : 13716, "state" : "NE" } +{ "_id" : "68510", "city" : "LINCOLN", "loc" : [ -96.65445800000001, 40.806345 ], "pop" : 20948, "state" : "NE" } +{ "_id" : "68512", "city" : "LINCOLN", "loc" : [ -96.69460599999999, 40.756487 ], "pop" : 6139, "state" : "NE" } +{ "_id" : "68514", "city" : "LINCOLN", "loc" : [ -96.66108199999999, 40.925792 ], "pop" : 200, "state" : "NE" } +{ "_id" : "68516", "city" : "LINCOLN", "loc" : [ -96.652304, 40.756807 ], "pop" : 21213, "state" : "NE" } +{ "_id" : "68517", "city" : "LINCOLN", "loc" : [ -96.60450899999999, 40.931743 ], "pop" : 485, "state" : "NE" } +{ "_id" : "68520", "city" : "LINCOLN", "loc" : [ -96.56934099999999, 40.774441 ], "pop" : 1460, "state" : "NE" } +{ "_id" : "68521", "city" : "LINCOLN", "loc" : [ -96.711006, 40.851044 ], "pop" : 16067, "state" : "NE" } +{ "_id" : "68522", "city" : "LINCOLN", "loc" : [ -96.747871, 40.793407 ], "pop" : 4991, "state" : "NE" } +{ "_id" : "68523", "city" : "LINCOLN", "loc" : [ -96.75833900000001, 40.740766 ], "pop" : 685, "state" : "NE" } +{ "_id" : "68524", "city" : "LINCOLN", "loc" : [ -96.79434500000001, 40.852913 ], "pop" : 4321, "state" : "NE" } +{ "_id" : "68526", "city" : "LINCOLN", "loc" : [ -96.587817, 40.731386 ], "pop" : 526, "state" : "NE" } +{ "_id" : "68527", "city" : "LINCOLN", "loc" : [ -96.540053, 40.834708 ], "pop" : 617, "state" : "NE" } +{ "_id" : "68528", "city" : "LINCOLN", "loc" : [ -96.754496, 40.819541 ], "pop" : 2476, "state" : "NE" } +{ "_id" : "68531", "city" : "LINCOLN", "loc" : [ -96.71557199999999, 40.899397 ], "pop" : 310, "state" : "NE" } +{ "_id" : "68532", "city" : "LINCOLN", "loc" : [ -96.85509, 40.792159 ], "pop" : 391, "state" : "NE" } +{ "_id" : "68601", "city" : "RICHLAND", "loc" : [ -97.356469, 41.437225 ], "pop" : 23684, "state" : "NE" } +{ "_id" : "68620", "city" : "ALBION", "loc" : [ -97.999116, 41.704947 ], "pop" : 3788, "state" : "NE" } +{ "_id" : "68621", "city" : "AMES", "loc" : [ -96.646344, 41.461253 ], "pop" : 141, "state" : "NE" } +{ "_id" : "68622", "city" : "BARTLETT", "loc" : [ -98.556668, 41.8697 ], "pop" : 262, "state" : "NE" } +{ "_id" : "68623", "city" : "BELGRADE", "loc" : [ -98.08663799999999, 41.461077 ], "pop" : 268, "state" : "NE" } +{ "_id" : "68624", "city" : "BELLWOOD", "loc" : [ -97.274657, 41.347389 ], "pop" : 1199, "state" : "NE" } +{ "_id" : "68626", "city" : "BRAINARD", "loc" : [ -96.988226, 41.183151 ], "pop" : 570, "state" : "NE" } +{ "_id" : "68627", "city" : "CEDAR RAPIDS", "loc" : [ -98.15537999999999, 41.556407 ], "pop" : 728, "state" : "NE" } +{ "_id" : "68628", "city" : "CLARKS", "loc" : [ -97.846143, 41.232797 ], "pop" : 749, "state" : "NE" } +{ "_id" : "68629", "city" : "CLARKSON", "loc" : [ -97.105059, 41.696064 ], "pop" : 1235, "state" : "NE" } +{ "_id" : "68631", "city" : "CRESTON", "loc" : [ -97.368692, 41.660695 ], "pop" : 910, "state" : "NE" } +{ "_id" : "68632", "city" : "GARRISON", "loc" : [ -97.126229, 41.237315 ], "pop" : 3798, "state" : "NE" } +{ "_id" : "68633", "city" : "DODGE", "loc" : [ -96.818077, 41.681609 ], "pop" : 2151, "state" : "NE" } +{ "_id" : "68635", "city" : "DWIGHT", "loc" : [ -96.993143, 41.089388 ], "pop" : 462, "state" : "NE" } +{ "_id" : "68636", "city" : "ELGIN", "loc" : [ -98.07508199999999, 41.973239 ], "pop" : 1367, "state" : "NE" } +{ "_id" : "68637", "city" : "ERICSON", "loc" : [ -98.645323, 41.782804 ], "pop" : 311, "state" : "NE" } +{ "_id" : "68638", "city" : "FULLERTON", "loc" : [ -98.00536200000001, 41.366042 ], "pop" : 2087, "state" : "NE" } +{ "_id" : "68640", "city" : "GENOA", "loc" : [ -97.764011, 41.446776 ], "pop" : 2116, "state" : "NE" } +{ "_id" : "68641", "city" : "HOWELLS", "loc" : [ -96.985811, 41.696441 ], "pop" : 1122, "state" : "NE" } +{ "_id" : "68642", "city" : "HUMPHREY", "loc" : [ -97.498649, 41.670184 ], "pop" : 1818, "state" : "NE" } +{ "_id" : "68643", "city" : "LEIGH", "loc" : [ -97.232001, 41.673877 ], "pop" : 1225, "state" : "NE" } +{ "_id" : "68644", "city" : "LINDSAY", "loc" : [ -97.671134, 41.692634 ], "pop" : 973, "state" : "NE" } +{ "_id" : "68647", "city" : "MONROE", "loc" : [ -97.606075, 41.478255 ], "pop" : 799, "state" : "NE" } +{ "_id" : "68648", "city" : "MORSE BLUFF", "loc" : [ -96.786171, 41.417831 ], "pop" : 486, "state" : "NE" } +{ "_id" : "68649", "city" : "NORTH BEND", "loc" : [ -96.781328, 41.468924 ], "pop" : 1651, "state" : "NE" } +{ "_id" : "68650", "city" : "OCTAVIA", "loc" : [ -97.07021, 41.355323 ], "pop" : 361, "state" : "NE" } +{ "_id" : "68651", "city" : "OSCEOLA", "loc" : [ -97.557079, 41.196565 ], "pop" : 1398, "state" : "NE" } +{ "_id" : "68652", "city" : "PETERSBURG", "loc" : [ -98.084791, 41.858954 ], "pop" : 784, "state" : "NE" } +{ "_id" : "68653", "city" : "PLATTE CENTER", "loc" : [ -97.457616, 41.524114 ], "pop" : 1399, "state" : "NE" } +{ "_id" : "68654", "city" : "POLK", "loc" : [ -97.75237199999999, 41.117671 ], "pop" : 988, "state" : "NE" } +{ "_id" : "68655", "city" : "PRIMROSE", "loc" : [ -98.235455, 41.64054 ], "pop" : 255, "state" : "NE" } +{ "_id" : "68658", "city" : "RISING CITY", "loc" : [ -97.303174, 41.208219 ], "pop" : 697, "state" : "NE" } +{ "_id" : "68659", "city" : "ROGERS", "loc" : [ -96.949735, 41.469536 ], "pop" : 208, "state" : "NE" } +{ "_id" : "68660", "city" : "SAINT EDWARD", "loc" : [ -97.880116, 41.57076 ], "pop" : 1112, "state" : "NE" } +{ "_id" : "68661", "city" : "SCHUYLER", "loc" : [ -97.062832, 41.459128 ], "pop" : 5243, "state" : "NE" } +{ "_id" : "68662", "city" : "SHELBY", "loc" : [ -97.429536, 41.243544 ], "pop" : 1495, "state" : "NE" } +{ "_id" : "68663", "city" : "SILVER CREEK", "loc" : [ -97.667106, 41.318999 ], "pop" : 627, "state" : "NE" } +{ "_id" : "68665", "city" : "SPALDING", "loc" : [ -98.37146799999999, 41.687409 ], "pop" : 1053, "state" : "NE" } +{ "_id" : "68666", "city" : "STROMSBURG", "loc" : [ -97.574183, 41.111834 ], "pop" : 1765, "state" : "NE" } +{ "_id" : "68667", "city" : "ULYSSES", "loc" : [ -97.30901299999999, 41.089922 ], "pop" : 250, "state" : "NE" } +{ "_id" : "68669", "city" : "ULYSSES", "loc" : [ -97.19838799999999, 41.079059 ], "pop" : 440, "state" : "NE" } +{ "_id" : "68701", "city" : "NORFOLK", "loc" : [ -97.422898, 42.032914 ], "pop" : 25728, "state" : "NE" } +{ "_id" : "68710", "city" : "ALLEN", "loc" : [ -96.8574, 42.443667 ], "pop" : 1007, "state" : "NE" } +{ "_id" : "68711", "city" : "AMELIA", "loc" : [ -99.008036, 42.18088 ], "pop" : 196, "state" : "NE" } +{ "_id" : "68713", "city" : "ATKINSON", "loc" : [ -98.97608700000001, 42.548279 ], "pop" : 2321, "state" : "NE" } +{ "_id" : "68714", "city" : "BASSETT", "loc" : [ -99.538732, 42.576293 ], "pop" : 1344, "state" : "NE" } +{ "_id" : "68715", "city" : "BATTLE CREEK", "loc" : [ -97.598153, 41.994283 ], "pop" : 1448, "state" : "NE" } +{ "_id" : "68716", "city" : "BEEMER", "loc" : [ -96.81500800000001, 41.937422 ], "pop" : 948, "state" : "NE" } +{ "_id" : "68717", "city" : "BELDEN", "loc" : [ -97.195628, 42.402185 ], "pop" : 346, "state" : "NE" } +{ "_id" : "68718", "city" : "BLOOMFIELD", "loc" : [ -97.654494, 42.597824 ], "pop" : 1873, "state" : "NE" } +{ "_id" : "68719", "city" : "BRISTOW", "loc" : [ -98.60267, 42.880575 ], "pop" : 355, "state" : "NE" } +{ "_id" : "68720", "city" : "BRUNSWICK", "loc" : [ -97.944008, 42.351023 ], "pop" : 907, "state" : "NE" } +{ "_id" : "68722", "city" : "BUTTE", "loc" : [ -98.84590300000001, 42.912377 ], "pop" : 667, "state" : "NE" } +{ "_id" : "68723", "city" : "CARROLL", "loc" : [ -97.192612, 42.277009 ], "pop" : 576, "state" : "NE" } +{ "_id" : "68724", "city" : "CENTER", "loc" : [ -97.883567, 42.602451 ], "pop" : 264, "state" : "NE" } +{ "_id" : "68725", "city" : "CHAMBERS", "loc" : [ -98.737846, 42.191606 ], "pop" : 815, "state" : "NE" } +{ "_id" : "68726", "city" : "CLEARWATER", "loc" : [ -98.186761, 42.126562 ], "pop" : 919, "state" : "NE" } +{ "_id" : "68727", "city" : "COLERIDGE", "loc" : [ -97.17856399999999, 42.522992 ], "pop" : 1185, "state" : "NE" } +{ "_id" : "68728", "city" : "CONCORD", "loc" : [ -96.98103500000001, 42.381982 ], "pop" : 262, "state" : "NE" } +{ "_id" : "68729", "city" : "CREIGHTON", "loc" : [ -97.89323, 42.468053 ], "pop" : 1604, "state" : "NE" } +{ "_id" : "68730", "city" : "CROFTON", "loc" : [ -97.540589, 42.737028 ], "pop" : 1717, "state" : "NE" } +{ "_id" : "68731", "city" : "DAKOTA CITY", "loc" : [ -96.453608, 42.38074 ], "pop" : 3022, "state" : "NE" } +{ "_id" : "68732", "city" : "DIXON", "loc" : [ -96.97738099999999, 42.41853 ], "pop" : 226, "state" : "NE" } +{ "_id" : "68733", "city" : "EMERSON", "loc" : [ -96.71587, 42.285247 ], "pop" : 1471, "state" : "NE" } +{ "_id" : "68734", "city" : "EMMET", "loc" : [ -98.82377700000001, 42.474708 ], "pop" : 190, "state" : "NE" } +{ "_id" : "68735", "city" : "EWING", "loc" : [ -98.39813700000001, 42.185107 ], "pop" : 1300, "state" : "NE" } +{ "_id" : "68736", "city" : "FORDYCE", "loc" : [ -97.35666500000001, 42.730889 ], "pop" : 1059, "state" : "NE" } +{ "_id" : "68737", "city" : "FOSTER", "loc" : [ -97.658038, 42.269932 ], "pop" : 216, "state" : "NE" } +{ "_id" : "68739", "city" : "HARTINGTON", "loc" : [ -97.28367799999999, 42.623494 ], "pop" : 2806, "state" : "NE" } +{ "_id" : "68740", "city" : "HOSKINS", "loc" : [ -97.308435, 42.140839 ], "pop" : 784, "state" : "NE" } +{ "_id" : "68741", "city" : "HUBBARD", "loc" : [ -96.62242500000001, 42.413139 ], "pop" : 705, "state" : "NE" } +{ "_id" : "68742", "city" : "INMAN", "loc" : [ -98.538366, 42.376149 ], "pop" : 439, "state" : "NE" } +{ "_id" : "68743", "city" : "JACKSON", "loc" : [ -96.574335, 42.452877 ], "pop" : 406, "state" : "NE" } +{ "_id" : "68745", "city" : "LAUREL", "loc" : [ -97.08738099999999, 42.427036 ], "pop" : 1519, "state" : "NE" } +{ "_id" : "68746", "city" : "LYNCH", "loc" : [ -98.450433, 42.837275 ], "pop" : 496, "state" : "NE" } +{ "_id" : "68747", "city" : "MCLEAN", "loc" : [ -97.47511299999999, 42.392082 ], "pop" : 232, "state" : "NE" } +{ "_id" : "68748", "city" : "MADISON", "loc" : [ -97.47195000000001, 41.830786 ], "pop" : 3203, "state" : "NE" } +{ "_id" : "68749", "city" : "MAGNET", "loc" : [ -97.44072199999999, 42.475294 ], "pop" : 218, "state" : "NE" } +{ "_id" : "68751", "city" : "MASKELL", "loc" : [ -96.966978, 42.670245 ], "pop" : 218, "state" : "NE" } +{ "_id" : "68752", "city" : "MEADOW GROVE", "loc" : [ -97.73342599999999, 42.010184 ], "pop" : 939, "state" : "NE" } +{ "_id" : "68753", "city" : "MILLS", "loc" : [ -99.446647, 42.922527 ], "pop" : 329, "state" : "NE" } +{ "_id" : "68755", "city" : "NAPER", "loc" : [ -99.071027, 42.952091 ], "pop" : 521, "state" : "NE" } +{ "_id" : "68756", "city" : "NELIGH", "loc" : [ -98.01506999999999, 42.138926 ], "pop" : 2375, "state" : "NE" } +{ "_id" : "68757", "city" : "NEWCASTLE", "loc" : [ -96.87085, 42.620672 ], "pop" : 763, "state" : "NE" } +{ "_id" : "68758", "city" : "NEWMAN GROVE", "loc" : [ -97.773966, 41.74977 ], "pop" : 1482, "state" : "NE" } +{ "_id" : "68759", "city" : "NEWPORT", "loc" : [ -99.335887, 42.600089 ], "pop" : 344, "state" : "NE" } +{ "_id" : "68760", "city" : "VERDEL", "loc" : [ -97.912734, 42.776942 ], "pop" : 1051, "state" : "NE" } +{ "_id" : "68761", "city" : "OAKDALE", "loc" : [ -97.918644, 42.053585 ], "pop" : 1016, "state" : "NE" } +{ "_id" : "68762", "city" : "OBERT", "loc" : [ -97.07070899999999, 42.65767 ], "pop" : 204, "state" : "NE" } +{ "_id" : "68763", "city" : "ONEILL", "loc" : [ -98.645565, 42.485733 ], "pop" : 5782, "state" : "NE" } +{ "_id" : "68764", "city" : "ORCHARD", "loc" : [ -98.240853, 42.33987 ], "pop" : 1044, "state" : "NE" } +{ "_id" : "68765", "city" : "OSMOND", "loc" : [ -97.581998, 42.353936 ], "pop" : 1418, "state" : "NE" } +{ "_id" : "68766", "city" : "PAGE", "loc" : [ -98.39639, 42.411882 ], "pop" : 544, "state" : "NE" } +{ "_id" : "68767", "city" : "PIERCE", "loc" : [ -97.525604, 42.194323 ], "pop" : 2942, "state" : "NE" } +{ "_id" : "68768", "city" : "PILGER", "loc" : [ -97.268472, 42.040413 ], "pop" : 3122, "state" : "NE" } +{ "_id" : "68769", "city" : "PLAINVIEW", "loc" : [ -97.778615, 42.346701 ], "pop" : 1978, "state" : "NE" } +{ "_id" : "68770", "city" : "PONCA", "loc" : [ -96.712793, 42.56931 ], "pop" : 1316, "state" : "NE" } +{ "_id" : "68771", "city" : "RANDOLPH", "loc" : [ -97.34644299999999, 42.379778 ], "pop" : 1826, "state" : "NE" } +{ "_id" : "68772", "city" : "ROSE", "loc" : [ -99.444755, 42.256782 ], "pop" : 331, "state" : "NE" } +{ "_id" : "68773", "city" : "ROYAL", "loc" : [ -98.12462600000001, 42.294614 ], "pop" : 479, "state" : "NE" } +{ "_id" : "68774", "city" : "SAINT HELENA", "loc" : [ -97.358616, 42.818145 ], "pop" : 888, "state" : "NE" } +{ "_id" : "68776", "city" : "SOUTH SIOUX CITY", "loc" : [ -96.418161, 42.465615 ], "pop" : 12037, "state" : "NE" } +{ "_id" : "68777", "city" : "SPENCER", "loc" : [ -98.705853, 42.884936 ], "pop" : 796, "state" : "NE" } +{ "_id" : "68778", "city" : "SPRINGVIEW", "loc" : [ -99.80614799999999, 42.848785 ], "pop" : 700, "state" : "NE" } +{ "_id" : "68779", "city" : "STANTON", "loc" : [ -97.213955, 41.907559 ], "pop" : 3122, "state" : "NE" } +{ "_id" : "68780", "city" : "STUART", "loc" : [ -99.139563, 42.571307 ], "pop" : 1331, "state" : "NE" } +{ "_id" : "68781", "city" : "TILDEN", "loc" : [ -97.82229700000001, 42.049629 ], "pop" : 883, "state" : "NE" } +{ "_id" : "68783", "city" : "VERDIGRE", "loc" : [ -98.079278, 42.610111 ], "pop" : 1184, "state" : "NE" } +{ "_id" : "68784", "city" : "WAKEFIELD", "loc" : [ -96.877645, 42.273271 ], "pop" : 1858, "state" : "NE" } +{ "_id" : "68785", "city" : "WATERBURY", "loc" : [ -96.74478000000001, 42.460431 ], "pop" : 241, "state" : "NE" } +{ "_id" : "68786", "city" : "WAUSA", "loc" : [ -97.557616, 42.497265 ], "pop" : 1058, "state" : "NE" } +{ "_id" : "68787", "city" : "WAYNE", "loc" : [ -97.018579, 42.230439 ], "pop" : 6454, "state" : "NE" } +{ "_id" : "68788", "city" : "WEST POINT", "loc" : [ -96.731763, 41.84503 ], "pop" : 6463, "state" : "NE" } +{ "_id" : "68789", "city" : "WINNETOON", "loc" : [ -98.025408, 42.494565 ], "pop" : 395, "state" : "NE" } +{ "_id" : "68790", "city" : "WINSIDE", "loc" : [ -97.18250500000001, 42.167817 ], "pop" : 808, "state" : "NE" } +{ "_id" : "68791", "city" : "WISNER", "loc" : [ -96.91697499999999, 41.997994 ], "pop" : 1793, "state" : "NE" } +{ "_id" : "68792", "city" : "WYNOT", "loc" : [ -97.16780900000001, 42.739304 ], "pop" : 609, "state" : "NE" } +{ "_id" : "68801", "city" : "GRAND ISLAND", "loc" : [ -98.34106199999999, 40.921858 ], "pop" : 24173, "state" : "NE" } +{ "_id" : "68803", "city" : "GRAND ISLAND", "loc" : [ -98.387271, 40.928608 ], "pop" : 19337, "state" : "NE" } +{ "_id" : "68810", "city" : "ALDA", "loc" : [ -98.455135, 40.856923 ], "pop" : 872, "state" : "NE" } +{ "_id" : "68812", "city" : "AMHERST", "loc" : [ -99.260949, 40.849494 ], "pop" : 560, "state" : "NE" } +{ "_id" : "68813", "city" : "MILBURN", "loc" : [ -99.799149, 41.636214 ], "pop" : 566, "state" : "NE" } +{ "_id" : "68814", "city" : "ANSLEY", "loc" : [ -99.36452, 41.30193 ], "pop" : 853, "state" : "NE" } +{ "_id" : "68815", "city" : "ARCADIA", "loc" : [ -99.120468, 41.429305 ], "pop" : 609, "state" : "NE" } +{ "_id" : "68816", "city" : "ARCHER", "loc" : [ -98.118151, 41.178156 ], "pop" : 237, "state" : "NE" } +{ "_id" : "68817", "city" : "ASHTON", "loc" : [ -98.803352, 41.267184 ], "pop" : 505, "state" : "NE" } +{ "_id" : "68818", "city" : "AURORA", "loc" : [ -98.020107, 40.852838 ], "pop" : 5954, "state" : "NE" } +{ "_id" : "68819", "city" : "BERWYN", "loc" : [ -99.50157299999999, 41.347015 ], "pop" : 318, "state" : "NE" } +{ "_id" : "68820", "city" : "BOELUS", "loc" : [ -98.697551, 41.100278 ], "pop" : 533, "state" : "NE" } +{ "_id" : "68821", "city" : "BREWSTER", "loc" : [ -99.829196, 41.946705 ], "pop" : 246, "state" : "NE" } +{ "_id" : "68822", "city" : "BROKEN BOW", "loc" : [ -99.635452, 41.412586 ], "pop" : 4864, "state" : "NE" } +{ "_id" : "68823", "city" : "BURWELL", "loc" : [ -99.09952699999999, 41.807982 ], "pop" : 2141, "state" : "NE" } +{ "_id" : "68824", "city" : "CAIRO", "loc" : [ -98.61653800000001, 41.000183 ], "pop" : 976, "state" : "NE" } +{ "_id" : "68825", "city" : "CALLAWAY", "loc" : [ -99.993185, 41.248499 ], "pop" : 1100, "state" : "NE" } +{ "_id" : "68826", "city" : "CENTRAL CITY", "loc" : [ -98.001693, 41.121259 ], "pop" : 3783, "state" : "NE" } +{ "_id" : "68827", "city" : "CHAPMAN", "loc" : [ -98.221723, 40.985592 ], "pop" : 1503, "state" : "NE" } +{ "_id" : "68828", "city" : "COMSTOCK", "loc" : [ -99.27528100000001, 41.555254 ], "pop" : 331, "state" : "NE" } +{ "_id" : "68829", "city" : "COTESFIELD", "loc" : [ -98.655344, 41.34301 ], "pop" : 216, "state" : "NE" } +{ "_id" : "68831", "city" : "DANNEBROG", "loc" : [ -98.554564, 41.119156 ], "pop" : 890, "state" : "NE" } +{ "_id" : "68832", "city" : "DONIPHAN", "loc" : [ -98.37900999999999, 40.770031 ], "pop" : 1496, "state" : "NE" } +{ "_id" : "68833", "city" : "DUNNING", "loc" : [ -100.087271, 41.813107 ], "pop" : 225, "state" : "NE" } +{ "_id" : "68834", "city" : "EDDYVILLE", "loc" : [ -99.681009, 41.0079 ], "pop" : 229, "state" : "NE" } +{ "_id" : "68835", "city" : "ELBA", "loc" : [ -98.575622, 41.28644 ], "pop" : 310, "state" : "NE" } +{ "_id" : "68836", "city" : "ELM CREEK", "loc" : [ -99.372786, 40.730079 ], "pop" : 1256, "state" : "NE" } +{ "_id" : "68837", "city" : "ELYRIA", "loc" : [ -99.046656, 41.695655 ], "pop" : 305, "state" : "NE" } +{ "_id" : "68838", "city" : "FARWELL", "loc" : [ -98.648144, 41.220378 ], "pop" : 313, "state" : "NE" } +{ "_id" : "68840", "city" : "GIBBON", "loc" : [ -98.85435, 40.744445 ], "pop" : 1901, "state" : "NE" } +{ "_id" : "68841", "city" : "GILTNER", "loc" : [ -98.14344, 40.765402 ], "pop" : 522, "state" : "NE" } +{ "_id" : "68842", "city" : "GREELEY", "loc" : [ -98.529951, 41.552578 ], "pop" : 832, "state" : "NE" } +{ "_id" : "68843", "city" : "HAMPTON", "loc" : [ -97.884146, 40.923609 ], "pop" : 897, "state" : "NE" } +{ "_id" : "68844", "city" : "HAZARD", "loc" : [ -99.071859, 41.093368 ], "pop" : 285, "state" : "NE" } +{ "_id" : "68846", "city" : "HORDVILLE", "loc" : [ -97.88814499999999, 41.081253 ], "pop" : 405, "state" : "NE" } +{ "_id" : "68847", "city" : "KEARNEY", "loc" : [ -99.077883, 40.713608 ], "pop" : 28674, "state" : "NE" } +{ "_id" : "68850", "city" : "LEXINGTON", "loc" : [ -99.751515, 40.785002 ], "pop" : 8970, "state" : "NE" } +{ "_id" : "68852", "city" : "LITCHFIELD", "loc" : [ -99.141452, 41.168639 ], "pop" : 629, "state" : "NE" } +{ "_id" : "68853", "city" : "LOUP CITY", "loc" : [ -98.975149, 41.284531 ], "pop" : 1810, "state" : "NE" } +{ "_id" : "68854", "city" : "MARQUETTE", "loc" : [ -97.999955, 41.010017 ], "pop" : 563, "state" : "NE" } +{ "_id" : "68855", "city" : "MASON CITY", "loc" : [ -99.304937, 41.185319 ], "pop" : 473, "state" : "NE" } +{ "_id" : "68856", "city" : "MERNA", "loc" : [ -99.803595, 41.443482 ], "pop" : 913, "state" : "NE" } +{ "_id" : "68858", "city" : "MILLER", "loc" : [ -99.373987, 40.942236 ], "pop" : 337, "state" : "NE" } +{ "_id" : "68859", "city" : "NORTH LOUP", "loc" : [ -98.785836, 41.49717 ], "pop" : 626, "state" : "NE" } +{ "_id" : "68860", "city" : "OCONTO", "loc" : [ -99.69511199999999, 41.138075 ], "pop" : 539, "state" : "NE" } +{ "_id" : "68861", "city" : "ODESSA", "loc" : [ -99.254082, 40.709726 ], "pop" : 379, "state" : "NE" } +{ "_id" : "68862", "city" : "ORD", "loc" : [ -98.941783, 41.596187 ], "pop" : 3629, "state" : "NE" } +{ "_id" : "68863", "city" : "OVERTON", "loc" : [ -99.527824, 40.751875 ], "pop" : 1090, "state" : "NE" } +{ "_id" : "68864", "city" : "PALMER", "loc" : [ -98.241146, 41.178757 ], "pop" : 1142, "state" : "NE" } +{ "_id" : "68865", "city" : "PHILLIPS", "loc" : [ -98.21286000000001, 40.898197 ], "pop" : 517, "state" : "NE" } +{ "_id" : "68866", "city" : "PLEASANTON", "loc" : [ -99.12827799999999, 40.981848 ], "pop" : 654, "state" : "NE" } +{ "_id" : "68868", "city" : "PROSSER", "loc" : [ -98.559471, 40.659175 ], "pop" : 297, "state" : "NE" } +{ "_id" : "68869", "city" : "RAVENNA", "loc" : [ -98.904129, 41.023271 ], "pop" : 1646, "state" : "NE" } +{ "_id" : "68870", "city" : "RIVERDALE", "loc" : [ -99.138147, 40.762684 ], "pop" : 784, "state" : "NE" } +{ "_id" : "68871", "city" : "ROCKVILLE", "loc" : [ -98.85775700000001, 41.110832 ], "pop" : 489, "state" : "NE" } +{ "_id" : "68872", "city" : "SAINT LIBORY", "loc" : [ -98.35888, 41.08669 ], "pop" : 705, "state" : "NE" } +{ "_id" : "68873", "city" : "SAINT PAUL", "loc" : [ -98.44398700000001, 41.224212 ], "pop" : 3088, "state" : "NE" } +{ "_id" : "68874", "city" : "SARGENT", "loc" : [ -99.381624, 41.650845 ], "pop" : 1042, "state" : "NE" } +{ "_id" : "68875", "city" : "SCOTIA", "loc" : [ -98.689256, 41.483724 ], "pop" : 711, "state" : "NE" } +{ "_id" : "68876", "city" : "SHELTON", "loc" : [ -98.743453, 40.771703 ], "pop" : 1256, "state" : "NE" } +{ "_id" : "68878", "city" : "SUMNER", "loc" : [ -99.51995100000001, 40.950384 ], "pop" : 448, "state" : "NE" } +{ "_id" : "68879", "city" : "ALMERIA", "loc" : [ -99.415404, 41.822859 ], "pop" : 683, "state" : "NE" } +{ "_id" : "68881", "city" : "WESTERVILLE", "loc" : [ -99.38436900000001, 41.419282 ], "pop" : 172, "state" : "NE" } +{ "_id" : "68882", "city" : "WOLBACH", "loc" : [ -98.399456, 41.424373 ], "pop" : 466, "state" : "NE" } +{ "_id" : "68883", "city" : "WOOD RIVER", "loc" : [ -98.606509, 40.810635 ], "pop" : 2071, "state" : "NE" } +{ "_id" : "68901", "city" : "HASTINGS", "loc" : [ -98.39114600000001, 40.587654 ], "pop" : 25562, "state" : "NE" } +{ "_id" : "68920", "city" : "ALMA", "loc" : [ -99.360073, 40.118853 ], "pop" : 1587, "state" : "NE" } +{ "_id" : "68922", "city" : "ARAPAHOE", "loc" : [ -99.899697, 40.302662 ], "pop" : 1246, "state" : "NE" } +{ "_id" : "68923", "city" : "ATLANTA", "loc" : [ -99.484354, 40.384901 ], "pop" : 261, "state" : "NE" } +{ "_id" : "68924", "city" : "AXTELL", "loc" : [ -99.11690299999999, 40.526907 ], "pop" : 1547, "state" : "NE" } +{ "_id" : "68925", "city" : "AYR", "loc" : [ -98.438982, 40.441054 ], "pop" : 616, "state" : "NE" } +{ "_id" : "68926", "city" : "BEAVER CITY", "loc" : [ -99.806532, 40.129036 ], "pop" : 959, "state" : "NE" } +{ "_id" : "68927", "city" : "BERTRAND", "loc" : [ -99.575891, 40.560843 ], "pop" : 1566, "state" : "NE" } +{ "_id" : "68928", "city" : "BLADEN", "loc" : [ -98.604625, 40.298996 ], "pop" : 579, "state" : "NE" } +{ "_id" : "68929", "city" : "BLOOMINGTON", "loc" : [ -99.009438, 40.138257 ], "pop" : 431, "state" : "NE" } +{ "_id" : "68930", "city" : "BLUE HILL", "loc" : [ -98.42695500000001, 40.31102 ], "pop" : 1291, "state" : "NE" } +{ "_id" : "68932", "city" : "CAMPBELL", "loc" : [ -98.73701199999999, 40.296684 ], "pop" : 525, "state" : "NE" } +{ "_id" : "68933", "city" : "CLAY CENTER", "loc" : [ -98.03864900000001, 40.511301 ], "pop" : 1115, "state" : "NE" } +{ "_id" : "68934", "city" : "DEWEESE", "loc" : [ -98.177199, 40.379234 ], "pop" : 342, "state" : "NE" } +{ "_id" : "68935", "city" : "EDGAR", "loc" : [ -97.972679, 40.365166 ], "pop" : 795, "state" : "NE" } +{ "_id" : "68936", "city" : "EDISON", "loc" : [ -99.785988, 40.280176 ], "pop" : 246, "state" : "NE" } +{ "_id" : "68937", "city" : "ELWOOD", "loc" : [ -99.825812, 40.574738 ], "pop" : 956, "state" : "NE" } +{ "_id" : "68938", "city" : "FAIRFIELD", "loc" : [ -98.106272, 40.428511 ], "pop" : 569, "state" : "NE" } +{ "_id" : "68939", "city" : "FRANKLIN", "loc" : [ -98.946862, 40.105172 ], "pop" : 1305, "state" : "NE" } +{ "_id" : "68940", "city" : "FUNK", "loc" : [ -99.244992, 40.502031 ], "pop" : 558, "state" : "NE" } +{ "_id" : "68941", "city" : "GLENVIL", "loc" : [ -98.246475, 40.493145 ], "pop" : 447, "state" : "NE" } +{ "_id" : "68942", "city" : "GUIDE ROCK", "loc" : [ -98.33906399999999, 40.081186 ], "pop" : 530, "state" : "NE" } +{ "_id" : "68943", "city" : "HARDY", "loc" : [ -97.927057, 40.028452 ], "pop" : 462, "state" : "NE" } +{ "_id" : "68944", "city" : "HARVARD", "loc" : [ -98.084574, 40.626463 ], "pop" : 1400, "state" : "NE" } +{ "_id" : "68945", "city" : "HEARTWELL", "loc" : [ -98.78514, 40.571601 ], "pop" : 197, "state" : "NE" } +{ "_id" : "68946", "city" : "HENDLEY", "loc" : [ -99.971537, 40.106312 ], "pop" : 217, "state" : "NE" } +{ "_id" : "68947", "city" : "HILDRETH", "loc" : [ -99.05712800000001, 40.321743 ], "pop" : 663, "state" : "NE" } +{ "_id" : "68948", "city" : "HOLBROOK", "loc" : [ -100.013593, 40.301893 ], "pop" : 369, "state" : "NE" } +{ "_id" : "68949", "city" : "HOLDREGE", "loc" : [ -99.367233, 40.447527 ], "pop" : 6744, "state" : "NE" } +{ "_id" : "68950", "city" : "HOLSTEIN", "loc" : [ -98.65377700000001, 40.454169 ], "pop" : 413, "state" : "NE" } +{ "_id" : "68951", "city" : "HUNTLEY", "loc" : [ -99.284786, 40.210254 ], "pop" : 89, "state" : "NE" } +{ "_id" : "68952", "city" : "INAVALE", "loc" : [ -98.661191, 40.095886 ], "pop" : 249, "state" : "NE" } +{ "_id" : "68954", "city" : "INLAND", "loc" : [ -98.22337899999999, 40.589934 ], "pop" : 113, "state" : "NE" } +{ "_id" : "68955", "city" : "JUNIATA", "loc" : [ -98.515017, 40.586652 ], "pop" : 1058, "state" : "NE" } +{ "_id" : "68956", "city" : "KENESAW", "loc" : [ -98.657241, 40.61645 ], "pop" : 1076, "state" : "NE" } +{ "_id" : "68957", "city" : "LAWRENCE", "loc" : [ -98.24024300000001, 40.27672 ], "pop" : 594, "state" : "NE" } +{ "_id" : "68958", "city" : "LOOMIS", "loc" : [ -99.497851, 40.479155 ], "pop" : 586, "state" : "NE" } +{ "_id" : "68959", "city" : "MINDEN", "loc" : [ -98.93829700000001, 40.509142 ], "pop" : 4365, "state" : "NE" } +{ "_id" : "68960", "city" : "NAPONEE", "loc" : [ -99.127725, 40.125807 ], "pop" : 361, "state" : "NE" } +{ "_id" : "68961", "city" : "NORA", "loc" : [ -98.05841700000001, 40.209739 ], "pop" : 1084, "state" : "NE" } +{ "_id" : "68964", "city" : "OAK", "loc" : [ -97.884114, 40.260489 ], "pop" : 312, "state" : "NE" } +{ "_id" : "68966", "city" : "ORLEANS", "loc" : [ -99.45718599999999, 40.148435 ], "pop" : 760, "state" : "NE" } +{ "_id" : "68967", "city" : "OXFORD", "loc" : [ -99.630197, 40.256049 ], "pop" : 1306, "state" : "NE" } +{ "_id" : "68969", "city" : "RAGAN", "loc" : [ -99.24891, 40.309594 ], "pop" : 148, "state" : "NE" } +{ "_id" : "68970", "city" : "RED CLOUD", "loc" : [ -98.518655, 40.09516 ], "pop" : 1630, "state" : "NE" } +{ "_id" : "68971", "city" : "REPUBLICAN CITY", "loc" : [ -99.23218900000001, 40.103401 ], "pop" : 429, "state" : "NE" } +{ "_id" : "68972", "city" : "RIVERTON", "loc" : [ -98.785819, 40.101626 ], "pop" : 394, "state" : "NE" } +{ "_id" : "68973", "city" : "ROSELAND", "loc" : [ -98.555059, 40.459058 ], "pop" : 603, "state" : "NE" } +{ "_id" : "68974", "city" : "RUSKIN", "loc" : [ -97.87203, 40.138318 ], "pop" : 324, "state" : "NE" } +{ "_id" : "68975", "city" : "SARONVILLE", "loc" : [ -97.87385, 40.600625 ], "pop" : 1704, "state" : "NE" } +{ "_id" : "68976", "city" : "SMITHFIELD", "loc" : [ -99.82386200000001, 40.583567 ], "pop" : 972, "state" : "NE" } +{ "_id" : "68977", "city" : "STAMFORD", "loc" : [ -99.581405, 40.11625 ], "pop" : 396, "state" : "NE" } +{ "_id" : "68978", "city" : "SUPERIOR", "loc" : [ -98.077872, 40.031537 ], "pop" : 2902, "state" : "NE" } +{ "_id" : "68979", "city" : "SUTTON", "loc" : [ -97.873476, 40.653955 ], "pop" : 215, "state" : "NE" } +{ "_id" : "68980", "city" : "TRUMBULL", "loc" : [ -98.257414, 40.66918 ], "pop" : 381, "state" : "NE" } +{ "_id" : "68981", "city" : "UPLAND", "loc" : [ -98.89657699999999, 40.317073 ], "pop" : 259, "state" : "NE" } +{ "_id" : "68982", "city" : "WILCOX", "loc" : [ -99.153927, 40.373523 ], "pop" : 520, "state" : "NE" } +{ "_id" : "69001", "city" : "MC COOK", "loc" : [ -100.627948, 40.204905 ], "pop" : 9513, "state" : "NE" } +{ "_id" : "69020", "city" : "BARTLEY", "loc" : [ -100.29075, 40.258113 ], "pop" : 519, "state" : "NE" } +{ "_id" : "69021", "city" : "BENKELMAN", "loc" : [ -101.534354, 40.098049 ], "pop" : 1813, "state" : "NE" } +{ "_id" : "69022", "city" : "CAMBRIDGE", "loc" : [ -100.167579, 40.280767 ], "pop" : 1347, "state" : "NE" } +{ "_id" : "69023", "city" : "CHAMPION", "loc" : [ -101.74849, 40.460039 ], "pop" : 288, "state" : "NE" } +{ "_id" : "69024", "city" : "CULBERTSON", "loc" : [ -100.850043, 40.223707 ], "pop" : 1560, "state" : "NE" } +{ "_id" : "69025", "city" : "CURTIS", "loc" : [ -100.510406, 40.613067 ], "pop" : 1095, "state" : "NE" } +{ "_id" : "69026", "city" : "DANBURY", "loc" : [ -100.424228, 40.037689 ], "pop" : 283, "state" : "NE" } +{ "_id" : "69027", "city" : "ENDERS", "loc" : [ -101.522156, 40.465492 ], "pop" : 217, "state" : "NE" } +{ "_id" : "69028", "city" : "EUSTIS", "loc" : [ -100.054694, 40.626745 ], "pop" : 829, "state" : "NE" } +{ "_id" : "69029", "city" : "FARNAM", "loc" : [ -100.206878, 40.712881 ], "pop" : 243, "state" : "NE" } +{ "_id" : "69030", "city" : "HAIGLER", "loc" : [ -101.937106, 40.064179 ], "pop" : 398, "state" : "NE" } +{ "_id" : "69031", "city" : "HAMLET", "loc" : [ -101.234106, 40.399363 ], "pop" : 222, "state" : "NE" } +{ "_id" : "69032", "city" : "HAYES CENTER", "loc" : [ -101.025208, 40.517316 ], "pop" : 1000, "state" : "NE" } +{ "_id" : "69033", "city" : "IMPERIAL", "loc" : [ -101.646775, 40.525124 ], "pop" : 2372, "state" : "NE" } +{ "_id" : "69034", "city" : "INDIANOLA", "loc" : [ -100.429758, 40.235718 ], "pop" : 1213, "state" : "NE" } +{ "_id" : "69035", "city" : "LAMAR", "loc" : [ -101.903297, 40.538653 ], "pop" : 613, "state" : "NE" } +{ "_id" : "69036", "city" : "LEBANON", "loc" : [ -100.26122, 40.07522 ], "pop" : 182, "state" : "NE" } +{ "_id" : "69037", "city" : "MAX", "loc" : [ -101.391607, 40.106884 ], "pop" : 164, "state" : "NE" } +{ "_id" : "69038", "city" : "MAYWOOD", "loc" : [ -100.642135, 40.589262 ], "pop" : 689, "state" : "NE" } +{ "_id" : "69039", "city" : "MOOREFIELD", "loc" : [ -100.310773, 40.57856 ], "pop" : 355, "state" : "NE" } +{ "_id" : "69040", "city" : "PALISADE", "loc" : [ -101.129464, 40.338668 ], "pop" : 544, "state" : "NE" } +{ "_id" : "69041", "city" : "PARKS", "loc" : [ -101.739879, 40.139837 ], "pop" : 207, "state" : "NE" } +{ "_id" : "69042", "city" : "STOCKVILLE", "loc" : [ -100.384886, 40.494834 ], "pop" : 128, "state" : "NE" } +{ "_id" : "69043", "city" : "STRATTON", "loc" : [ -101.218275, 40.144462 ], "pop" : 776, "state" : "NE" } +{ "_id" : "69044", "city" : "TRENTON", "loc" : [ -101.020073, 40.168096 ], "pop" : 870, "state" : "NE" } +{ "_id" : "69045", "city" : "WAUNETA", "loc" : [ -101.381195, 40.440906 ], "pop" : 891, "state" : "NE" } +{ "_id" : "69046", "city" : "WILSONVILLE", "loc" : [ -100.1211, 40.108895 ], "pop" : 264, "state" : "NE" } +{ "_id" : "69101", "city" : "NORTH PLATTE", "loc" : [ -100.774631, 41.132595 ], "pop" : 26416, "state" : "NE" } +{ "_id" : "69120", "city" : "ARNOLD", "loc" : [ -100.156731, 41.445583 ], "pop" : 1099, "state" : "NE" } +{ "_id" : "69121", "city" : "ARTHUR", "loc" : [ -101.693123, 41.573952 ], "pop" : 462, "state" : "NE" } +{ "_id" : "69122", "city" : "BIG SPRINGS", "loc" : [ -102.093273, 41.069621 ], "pop" : 792, "state" : "NE" } +{ "_id" : "69123", "city" : "BRADY", "loc" : [ -100.373649, 41.051525 ], "pop" : 1243, "state" : "NE" } +{ "_id" : "69125", "city" : "BROADWATER", "loc" : [ -102.822521, 41.582547 ], "pop" : 411, "state" : "NE" } +{ "_id" : "69127", "city" : "BRULE", "loc" : [ -101.909933, 41.100186 ], "pop" : 792, "state" : "NE" } +{ "_id" : "69128", "city" : "BUSHNELL", "loc" : [ -103.907494, 41.213876 ], "pop" : 355, "state" : "NE" } +{ "_id" : "69129", "city" : "CHAPPELL", "loc" : [ -102.452344, 41.096586 ], "pop" : 1445, "state" : "NE" } +{ "_id" : "69130", "city" : "COZAD", "loc" : [ -99.992091, 40.861934 ], "pop" : 5221, "state" : "NE" } +{ "_id" : "69131", "city" : "DALTON", "loc" : [ -102.972609, 41.406778 ], "pop" : 511, "state" : "NE" } +{ "_id" : "69132", "city" : "DICKENS", "loc" : [ -101.01495, 40.804089 ], "pop" : 132, "state" : "NE" } +{ "_id" : "69133", "city" : "DIX", "loc" : [ -103.479603, 41.226993 ], "pop" : 426, "state" : "NE" } +{ "_id" : "69134", "city" : "ELSIE", "loc" : [ -101.369994, 40.859647 ], "pop" : 448, "state" : "NE" } +{ "_id" : "69135", "city" : "ELSMERE", "loc" : [ -100.282412, 42.264974 ], "pop" : 132, "state" : "NE" } +{ "_id" : "69138", "city" : "GOTHENBURG", "loc" : [ -100.154707, 40.940035 ], "pop" : 3739, "state" : "NE" } +{ "_id" : "69140", "city" : "GRANT", "loc" : [ -101.719589, 40.851069 ], "pop" : 1896, "state" : "NE" } +{ "_id" : "69141", "city" : "GURLEY", "loc" : [ -102.982325, 41.28771 ], "pop" : 624, "state" : "NE" } +{ "_id" : "69142", "city" : "HALSEY", "loc" : [ -100.295515, 41.929095 ], "pop" : 166, "state" : "NE" } +{ "_id" : "69143", "city" : "HERSHEY", "loc" : [ -101.001157, 41.155303 ], "pop" : 1685, "state" : "NE" } +{ "_id" : "69144", "city" : "KEYSTONE", "loc" : [ -101.628218, 41.262129 ], "pop" : 247, "state" : "NE" } +{ "_id" : "69145", "city" : "KIMBALL", "loc" : [ -103.660236, 41.23208 ], "pop" : 3327, "state" : "NE" } +{ "_id" : "69146", "city" : "LEMOYNE", "loc" : [ -101.894677, 41.304017 ], "pop" : 303, "state" : "NE" } +{ "_id" : "69147", "city" : "LEWELLEN", "loc" : [ -102.139622, 41.343461 ], "pop" : 612, "state" : "NE" } +{ "_id" : "69148", "city" : "LISCO", "loc" : [ -102.54983, 41.511398 ], "pop" : 214, "state" : "NE" } +{ "_id" : "69149", "city" : "LODGEPOLE", "loc" : [ -102.657034, 41.169745 ], "pop" : 642, "state" : "NE" } +{ "_id" : "69150", "city" : "MADRID", "loc" : [ -101.537067, 40.85443 ], "pop" : 546, "state" : "NE" } +{ "_id" : "69151", "city" : "MAXWELL", "loc" : [ -100.526993, 41.058831 ], "pop" : 722, "state" : "NE" } +{ "_id" : "69152", "city" : "MULLEN", "loc" : [ -101.054185, 42.016292 ], "pop" : 793, "state" : "NE" } +{ "_id" : "69153", "city" : "OGALLALA", "loc" : [ -101.710742, 41.127505 ], "pop" : 6329, "state" : "NE" } +{ "_id" : "69154", "city" : "OSHKOSH", "loc" : [ -102.345699, 41.445057 ], "pop" : 1634, "state" : "NE" } +{ "_id" : "69155", "city" : "PAXTON", "loc" : [ -101.358544, 41.126763 ], "pop" : 913, "state" : "NE" } +{ "_id" : "69156", "city" : "POTTER", "loc" : [ -103.306112, 41.234688 ], "pop" : 658, "state" : "NE" } +{ "_id" : "69157", "city" : "PURDUM", "loc" : [ -100.15685, 41.966475 ], "pop" : 217, "state" : "NE" } +{ "_id" : "69161", "city" : "SENECA", "loc" : [ -100.807315, 41.99012 ], "pop" : 169, "state" : "NE" } +{ "_id" : "69162", "city" : "SIDNEY", "loc" : [ -102.985573, 41.138001 ], "pop" : 7059, "state" : "NE" } +{ "_id" : "69163", "city" : "STAPLETON", "loc" : [ -100.483105, 41.48877 ], "pop" : 878, "state" : "NE" } +{ "_id" : "69165", "city" : "SUTHERLAND", "loc" : [ -101.136029, 41.15575 ], "pop" : 1472, "state" : "NE" } +{ "_id" : "69166", "city" : "BROWNLEE", "loc" : [ -100.573834, 41.973575 ], "pop" : 503, "state" : "NE" } +{ "_id" : "69167", "city" : "TRYON", "loc" : [ -101.017508, 41.573175 ], "pop" : 546, "state" : "NE" } +{ "_id" : "69168", "city" : "VENANGO", "loc" : [ -101.983894, 40.807324 ], "pop" : 433, "state" : "NE" } +{ "_id" : "69169", "city" : "WALLACE", "loc" : [ -101.173767, 40.830423 ], "pop" : 571, "state" : "NE" } +{ "_id" : "69170", "city" : "WELLFLEET", "loc" : [ -100.711915, 40.798776 ], "pop" : 311, "state" : "NE" } +{ "_id" : "69201", "city" : "VALENTINE", "loc" : [ -100.621542, 42.806166 ], "pop" : 4504, "state" : "NE" } +{ "_id" : "69210", "city" : "AINSWORTH", "loc" : [ -99.861491, 42.54027 ], "pop" : 2580, "state" : "NE" } +{ "_id" : "69211", "city" : "CODY", "loc" : [ -101.379846, 42.614556 ], "pop" : 156, "state" : "NE" } +{ "_id" : "69212", "city" : "CROOKSTON", "loc" : [ -100.773473, 42.925506 ], "pop" : 229, "state" : "NE" } +{ "_id" : "69214", "city" : "JOHNSTOWN", "loc" : [ -100.045322, 42.530857 ], "pop" : 371, "state" : "NE" } +{ "_id" : "69216", "city" : "KILGORE", "loc" : [ -100.988447, 42.914587 ], "pop" : 213, "state" : "NE" } +{ "_id" : "69217", "city" : "LONG PINE", "loc" : [ -99.72304200000001, 42.533379 ], "pop" : 706, "state" : "NE" } +{ "_id" : "69218", "city" : "MERRIMAN", "loc" : [ -101.758304, 42.641883 ], "pop" : 873, "state" : "NE" } +{ "_id" : "69221", "city" : "WOOD LAKE", "loc" : [ -100.287175, 42.626394 ], "pop" : 200, "state" : "NE" } +{ "_id" : "69301", "city" : "ALLIANCE", "loc" : [ -102.888045, 42.114943 ], "pop" : 11903, "state" : "NE" } +{ "_id" : "69331", "city" : "ANGORA", "loc" : [ -103.085019, 41.893434 ], "pop" : 84, "state" : "NE" } +{ "_id" : "69333", "city" : "ASHBY", "loc" : [ -101.963581, 41.977578 ], "pop" : 151, "state" : "NE" } +{ "_id" : "69334", "city" : "BAYARD", "loc" : [ -103.301887, 41.757923 ], "pop" : 2378, "state" : "NE" } +{ "_id" : "69335", "city" : "BINGHAM", "loc" : [ -102.133075, 42.260651 ], "pop" : 218, "state" : "NE" } +{ "_id" : "69336", "city" : "BRIDGEPORT", "loc" : [ -103.070134, 41.676556 ], "pop" : 2550, "state" : "NE" } +{ "_id" : "69337", "city" : "CHADRON", "loc" : [ -102.995331, 42.819268 ], "pop" : 6661, "state" : "NE" } +{ "_id" : "69339", "city" : "CRAWFORD", "loc" : [ -103.405336, 42.67584 ], "pop" : 1492, "state" : "NE" } +{ "_id" : "69340", "city" : "ELLSWORTH", "loc" : [ -102.47245, 42.169717 ], "pop" : 310, "state" : "NE" } +{ "_id" : "69341", "city" : "GERING", "loc" : [ -103.662896, 41.821993 ], "pop" : 11631, "state" : "NE" } +{ "_id" : "69343", "city" : "GORDON", "loc" : [ -102.204929, 42.806843 ], "pop" : 2666, "state" : "NE" } +{ "_id" : "69345", "city" : "HARRISBURG", "loc" : [ -103.711141, 41.55306 ], "pop" : 852, "state" : "NE" } +{ "_id" : "69346", "city" : "HARRISON", "loc" : [ -103.831803, 42.394594 ], "pop" : 1525, "state" : "NE" } +{ "_id" : "69347", "city" : "HAY SPRINGS", "loc" : [ -102.675641, 42.640122 ], "pop" : 1570, "state" : "NE" } +{ "_id" : "69348", "city" : "HEMINGFORD", "loc" : [ -103.064412, 42.33117 ], "pop" : 1280, "state" : "NE" } +{ "_id" : "69349", "city" : "HENRY", "loc" : [ -104.034933, 41.993392 ], "pop" : 208, "state" : "NE" } +{ "_id" : "69350", "city" : "HYANNIS", "loc" : [ -101.748296, 42.006967 ], "pop" : 430, "state" : "NE" } +{ "_id" : "69351", "city" : "LAKESIDE", "loc" : [ -102.443655, 42.049595 ], "pop" : 5, "state" : "NE" } +{ "_id" : "69352", "city" : "LYMAN", "loc" : [ -104.006569, 41.891765 ], "pop" : 988, "state" : "NE" } +{ "_id" : "69354", "city" : "MARSLAND", "loc" : [ -103.051857, 42.598842 ], "pop" : 605, "state" : "NE" } +{ "_id" : "69356", "city" : "MINATARE", "loc" : [ -103.489011, 41.849333 ], "pop" : 2355, "state" : "NE" } +{ "_id" : "69357", "city" : "MITCHELL", "loc" : [ -103.795996, 41.945851 ], "pop" : 2998, "state" : "NE" } +{ "_id" : "69358", "city" : "MORRILL", "loc" : [ -103.918216, 41.96807 ], "pop" : 1469, "state" : "NE" } +{ "_id" : "69360", "city" : "RUSHVILLE", "loc" : [ -102.465738, 42.737934 ], "pop" : 1955, "state" : "NE" } +{ "_id" : "69361", "city" : "SCOTTSBLUFF", "loc" : [ -103.661914, 41.871975 ], "pop" : 16373, "state" : "NE" } +{ "_id" : "69366", "city" : "WHITMAN", "loc" : [ -101.521623, 41.958355 ], "pop" : 188, "state" : "NE" } +{ "_id" : "69367", "city" : "WHITNEY", "loc" : [ -103.239552, 42.755881 ], "pop" : 263, "state" : "NE" } +{ "_id" : "70001", "city" : "METAIRIE", "loc" : [ -90.16951299999999, 29.987138 ], "pop" : 39554, "state" : "LA" } +{ "_id" : "70002", "city" : "METAIRIE", "loc" : [ -90.16303000000001, 30.009843 ], "pop" : 19511, "state" : "LA" } +{ "_id" : "70003", "city" : "METAIRIE", "loc" : [ -90.21456999999999, 29.99746 ], "pop" : 46193, "state" : "LA" } +{ "_id" : "70005", "city" : "METAIRIE", "loc" : [ -90.13314, 30.000476 ], "pop" : 26512, "state" : "LA" } +{ "_id" : "70006", "city" : "METAIRIE", "loc" : [ -90.19148300000001, 30.012885 ], "pop" : 16919, "state" : "LA" } +{ "_id" : "70030", "city" : "DES ALLEMANDS", "loc" : [ -90.44704900000001, 29.821993 ], "pop" : 3322, "state" : "LA" } +{ "_id" : "70031", "city" : "AMA", "loc" : [ -90.292509, 29.943494 ], "pop" : 1300, "state" : "LA" } +{ "_id" : "70032", "city" : "ARABI", "loc" : [ -89.99649700000001, 29.961154 ], "pop" : 8954, "state" : "LA" } +{ "_id" : "70036", "city" : "BARATARIA", "loc" : [ -90.126232, 29.717859 ], "pop" : 334, "state" : "LA" } +{ "_id" : "70037", "city" : "BELLE CHASSE", "loc" : [ -90.004177, 29.834514 ], "pop" : 9920, "state" : "LA" } +{ "_id" : "70039", "city" : "BOUTTE", "loc" : [ -90.393396, 29.897319 ], "pop" : 2432, "state" : "LA" } +{ "_id" : "70040", "city" : "BRAITHWAITE", "loc" : [ -89.885347, 29.673563 ], "pop" : 2303, "state" : "LA" } +{ "_id" : "70041", "city" : "BURAS", "loc" : [ -89.47568, 29.341056 ], "pop" : 6496, "state" : "LA" } +{ "_id" : "70043", "city" : "CHALMETTE", "loc" : [ -89.96113699999999, 29.946611 ], "pop" : 31850, "state" : "LA" } +{ "_id" : "70047", "city" : "NEW SARPY", "loc" : [ -90.373982, 29.96579 ], "pop" : 10472, "state" : "LA" } +{ "_id" : "70049", "city" : "EDGARD", "loc" : [ -90.581678, 30.031863 ], "pop" : 3702, "state" : "LA" } +{ "_id" : "70051", "city" : "GARYVILLE", "loc" : [ -90.620113, 30.05352 ], "pop" : 3191, "state" : "LA" } +{ "_id" : "70052", "city" : "GRAMERCY", "loc" : [ -90.69018199999999, 30.052711 ], "pop" : 2765, "state" : "LA" } +{ "_id" : "70053", "city" : "GRETNA", "loc" : [ -90.05311500000001, 29.910806 ], "pop" : 16979, "state" : "LA" } +{ "_id" : "70056", "city" : "TERRYTOWN", "loc" : [ -90.029123, 29.892652 ], "pop" : 37901, "state" : "LA" } +{ "_id" : "70057", "city" : "HAHNVILLE", "loc" : [ -90.488581, 30.000094 ], "pop" : 745, "state" : "LA" } +{ "_id" : "70058", "city" : "HARVEY", "loc" : [ -90.06725900000001, 29.872535 ], "pop" : 36824, "state" : "LA" } +{ "_id" : "70062", "city" : "KENNER", "loc" : [ -90.247901, 29.991203 ], "pop" : 20016, "state" : "LA" } +{ "_id" : "70065", "city" : "KENNER", "loc" : [ -90.25217499999999, 30.025164 ], "pop" : 54023, "state" : "LA" } +{ "_id" : "70067", "city" : "LAFITTE", "loc" : [ -90.05663300000001, 29.562194 ], "pop" : 0, "state" : "LA" } +{ "_id" : "70068", "city" : "LA PLACE", "loc" : [ -90.489544, 30.077718 ], "pop" : 26023, "state" : "LA" } +{ "_id" : "70070", "city" : "LULING", "loc" : [ -90.36926099999999, 29.925116 ], "pop" : 11956, "state" : "LA" } +{ "_id" : "70071", "city" : "LUTCHER", "loc" : [ -90.70084, 30.044679 ], "pop" : 3993, "state" : "LA" } +{ "_id" : "70072", "city" : "MARRERO", "loc" : [ -90.110462, 29.859756 ], "pop" : 58905, "state" : "LA" } +{ "_id" : "70075", "city" : "MERAUX", "loc" : [ -89.92143299999999, 29.933494 ], "pop" : 7196, "state" : "LA" } +{ "_id" : "70079", "city" : "NORCO", "loc" : [ -90.41979600000001, 30.005706 ], "pop" : 4931, "state" : "LA" } +{ "_id" : "70080", "city" : "PARADIS", "loc" : [ -90.43524600000001, 29.877033 ], "pop" : 939, "state" : "LA" } +{ "_id" : "70083", "city" : "PORT SULPHUR", "loc" : [ -89.68474999999999, 29.470011 ], "pop" : 6398, "state" : "LA" } +{ "_id" : "70084", "city" : "RESERVE", "loc" : [ -90.551773, 30.060255 ], "pop" : 7080, "state" : "LA" } +{ "_id" : "70085", "city" : "SAINT BERNARD", "loc" : [ -89.836414, 29.861093 ], "pop" : 8082, "state" : "LA" } +{ "_id" : "70086", "city" : "SAINT JAMES", "loc" : [ -90.86054900000001, 30.027598 ], "pop" : 2515, "state" : "LA" } +{ "_id" : "70087", "city" : "SAINT ROSE", "loc" : [ -90.312432, 29.958074 ], "pop" : 6340, "state" : "LA" } +{ "_id" : "70090", "city" : "VACHERIE", "loc" : [ -90.709699, 29.969372 ], "pop" : 6652, "state" : "LA" } +{ "_id" : "70091", "city" : "VENICE", "loc" : [ -89.347776, 29.261812 ], "pop" : 458, "state" : "LA" } +{ "_id" : "70092", "city" : "VIOLET", "loc" : [ -89.89599200000001, 29.904347 ], "pop" : 10549, "state" : "LA" } +{ "_id" : "70094", "city" : "BRIDGE CITY", "loc" : [ -90.18130499999999, 29.914386 ], "pop" : 35200, "state" : "LA" } +{ "_id" : "70112", "city" : "NEW ORLEANS", "loc" : [ -90.075301, 29.960484 ], "pop" : 6047, "state" : "LA" } +{ "_id" : "70113", "city" : "NEW ORLEANS", "loc" : [ -90.084777, 29.940511 ], "pop" : 12177, "state" : "LA" } +{ "_id" : "70114", "city" : "NEW ORLEANS", "loc" : [ -90.033126, 29.937934 ], "pop" : 29767, "state" : "LA" } +{ "_id" : "70115", "city" : "NEW ORLEANS", "loc" : [ -90.1005, 29.928863 ], "pop" : 45070, "state" : "LA" } +{ "_id" : "70116", "city" : "NEW ORLEANS", "loc" : [ -90.06461400000001, 29.968608 ], "pop" : 16592, "state" : "LA" } +{ "_id" : "70117", "city" : "NEW ORLEANS", "loc" : [ -90.03124, 29.970298 ], "pop" : 56494, "state" : "LA" } +{ "_id" : "70118", "city" : "NEW ORLEANS", "loc" : [ -90.123598, 29.950352 ], "pop" : 40049, "state" : "LA" } +{ "_id" : "70119", "city" : "NEW ORLEANS", "loc" : [ -90.085156, 29.974552 ], "pop" : 47894, "state" : "LA" } +{ "_id" : "70121", "city" : "JEFFERSON", "loc" : [ -90.16095300000001, 29.963071 ], "pop" : 12924, "state" : "LA" } +{ "_id" : "70122", "city" : "NEW ORLEANS", "loc" : [ -90.064409, 30.005637 ], "pop" : 47077, "state" : "LA" } +{ "_id" : "70123", "city" : "HARAHAN", "loc" : [ -90.210748, 29.953473 ], "pop" : 25057, "state" : "LA" } +{ "_id" : "70124", "city" : "NEW ORLEANS", "loc" : [ -90.10938400000001, 30.007081 ], "pop" : 22851, "state" : "LA" } +{ "_id" : "70125", "city" : "NEW ORLEANS", "loc" : [ -90.102785, 29.951225 ], "pop" : 22734, "state" : "LA" } +{ "_id" : "70126", "city" : "NEW ORLEANS", "loc" : [ -90.018913, 30.015341 ], "pop" : 45119, "state" : "LA" } +{ "_id" : "70127", "city" : "NEW ORLEANS", "loc" : [ -89.980688, 30.033811 ], "pop" : 29643, "state" : "LA" } +{ "_id" : "70128", "city" : "NEW ORLEANS", "loc" : [ -89.95642100000001, 30.052691 ], "pop" : 18844, "state" : "LA" } +{ "_id" : "70129", "city" : "NEW ORLEANS", "loc" : [ -89.906206, 30.047984 ], "pop" : 14064, "state" : "LA" } +{ "_id" : "70130", "city" : "NEW ORLEANS", "loc" : [ -90.073949, 29.932438 ], "pop" : 15576, "state" : "LA" } +{ "_id" : "70131", "city" : "NEW ORLEANS", "loc" : [ -89.996033, 29.916811 ], "pop" : 26939, "state" : "LA" } +{ "_id" : "70301", "city" : "THIBODAUX", "loc" : [ -90.809605, 29.799213 ], "pop" : 37831, "state" : "LA" } +{ "_id" : "70339", "city" : "PIERRE PART", "loc" : [ -91.20016699999999, 29.95501 ], "pop" : 5207, "state" : "LA" } +{ "_id" : "70340", "city" : "AMELIA", "loc" : [ -91.11110499999999, 29.66046 ], "pop" : 656, "state" : "LA" } +{ "_id" : "70341", "city" : "BELLE ROSE", "loc" : [ -91.04435100000001, 30.025955 ], "pop" : 4842, "state" : "LA" } +{ "_id" : "70342", "city" : "BERWICK", "loc" : [ -91.205662, 29.698786 ], "pop" : 17631, "state" : "LA" } +{ "_id" : "70343", "city" : "BOURG", "loc" : [ -90.60866, 29.548489 ], "pop" : 5310, "state" : "LA" } +{ "_id" : "70344", "city" : "CHAUVIN", "loc" : [ -90.59795200000001, 29.463401 ], "pop" : 6430, "state" : "LA" } +{ "_id" : "70345", "city" : "CUT OFF", "loc" : [ -90.339298, 29.523188 ], "pop" : 13268, "state" : "LA" } +{ "_id" : "70346", "city" : "DONALDSONVILLE", "loc" : [ -90.99702499999999, 30.101799 ], "pop" : 11265, "state" : "LA" } +{ "_id" : "70353", "city" : "DULAC", "loc" : [ -90.655655, 29.359814 ], "pop" : 1683, "state" : "LA" } +{ "_id" : "70354", "city" : "GALLIANO", "loc" : [ -90.29805399999999, 29.431125 ], "pop" : 3669, "state" : "LA" } +{ "_id" : "70355", "city" : "GHEENS", "loc" : [ -90.484855, 29.707591 ], "pop" : 452, "state" : "LA" } +{ "_id" : "70356", "city" : "GIBSON", "loc" : [ -90.977637, 29.662522 ], "pop" : 1642, "state" : "LA" } +{ "_id" : "70357", "city" : "GOLDEN MEADOW", "loc" : [ -90.263932, 29.382054 ], "pop" : 4075, "state" : "LA" } +{ "_id" : "70358", "city" : "GRAND ISLE", "loc" : [ -90.00880100000001, 29.22973 ], "pop" : 1455, "state" : "LA" } +{ "_id" : "70359", "city" : "GRAY", "loc" : [ -90.78071, 29.69034 ], "pop" : 4755, "state" : "LA" } +{ "_id" : "70360", "city" : "HOUMA", "loc" : [ -90.754808, 29.59433 ], "pop" : 18335, "state" : "LA" } +{ "_id" : "70363", "city" : "HOUMA", "loc" : [ -90.69166800000001, 29.560137 ], "pop" : 23618, "state" : "LA" } +{ "_id" : "70364", "city" : "HOUMA", "loc" : [ -90.72680099999999, 29.629887 ], "pop" : 25330, "state" : "LA" } +{ "_id" : "70372", "city" : "LABADIEVILLE", "loc" : [ -90.961319, 29.834458 ], "pop" : 2856, "state" : "LA" } +{ "_id" : "70374", "city" : "LOCKPORT", "loc" : [ -90.49061399999999, 29.603493 ], "pop" : 10863, "state" : "LA" } +{ "_id" : "70375", "city" : "MATHEWS", "loc" : [ -90.49491399999999, 29.681982 ], "pop" : 479, "state" : "LA" } +{ "_id" : "70377", "city" : "MONTEGUT", "loc" : [ -90.543952, 29.474366 ], "pop" : 3892, "state" : "LA" } +{ "_id" : "70380", "city" : "MORGAN CITY", "loc" : [ -91.116497, 29.723937 ], "pop" : 5341, "state" : "LA" } +{ "_id" : "70390", "city" : "NAPOLEONVILLE", "loc" : [ -91.026608, 29.92884 ], "pop" : 7710, "state" : "LA" } +{ "_id" : "70392", "city" : "PATTERSON", "loc" : [ -91.28123100000001, 29.69671 ], "pop" : 13463, "state" : "LA" } +{ "_id" : "70394", "city" : "RACELAND", "loc" : [ -90.599908, 29.717835 ], "pop" : 12920, "state" : "LA" } +{ "_id" : "70395", "city" : "SCHRIEVER", "loc" : [ -90.85134100000001, 29.712276 ], "pop" : 4774, "state" : "LA" } +{ "_id" : "70397", "city" : "THERIOT", "loc" : [ -90.765146, 29.451587 ], "pop" : 3982, "state" : "LA" } +{ "_id" : "70401", "city" : "HAMMOND", "loc" : [ -90.48785599999999, 30.51908 ], "pop" : 16101, "state" : "LA" } +{ "_id" : "70403", "city" : "HAMMOND", "loc" : [ -90.46972, 30.491054 ], "pop" : 15299, "state" : "LA" } +{ "_id" : "70420", "city" : "ABITA SPRINGS", "loc" : [ -90.00407199999999, 30.483696 ], "pop" : 2659, "state" : "LA" } +{ "_id" : "70422", "city" : "AMITE", "loc" : [ -90.570493, 30.718208 ], "pop" : 12006, "state" : "LA" } +{ "_id" : "70426", "city" : "ANGIE", "loc" : [ -89.856714, 30.922406 ], "pop" : 6303, "state" : "LA" } +{ "_id" : "70427", "city" : "BOGALUSA", "loc" : [ -89.865329, 30.773303 ], "pop" : 18938, "state" : "LA" } +{ "_id" : "70431", "city" : "BUSH", "loc" : [ -89.955664, 30.613393 ], "pop" : 3906, "state" : "LA" } +{ "_id" : "70433", "city" : "COVINGTON", "loc" : [ -90.095933, 30.487606 ], "pop" : 26117, "state" : "LA" } +{ "_id" : "70436", "city" : "FLUKER", "loc" : [ -90.52067, 30.812776 ], "pop" : 186, "state" : "LA" } +{ "_id" : "70437", "city" : "FOLSOM", "loc" : [ -90.187927, 30.61447 ], "pop" : 4832, "state" : "LA" } +{ "_id" : "70438", "city" : "FRANKLINTON", "loc" : [ -90.11547899999999, 30.857735 ], "pop" : 16352, "state" : "LA" } +{ "_id" : "70441", "city" : "GREENSBURG", "loc" : [ -90.725561, 30.864693 ], "pop" : 3833, "state" : "LA" } +{ "_id" : "70443", "city" : "INDEPENDENCE", "loc" : [ -90.52768500000001, 30.635148 ], "pop" : 4330, "state" : "LA" } +{ "_id" : "70444", "city" : "KENTWOOD", "loc" : [ -90.472829, 30.889215 ], "pop" : 11244, "state" : "LA" } +{ "_id" : "70445", "city" : "LACOMBE", "loc" : [ -89.929744, 30.322027 ], "pop" : 7956, "state" : "LA" } +{ "_id" : "70446", "city" : "LORANGER", "loc" : [ -90.356723, 30.588407 ], "pop" : 8701, "state" : "LA" } +{ "_id" : "70447", "city" : "MADISONVILLE", "loc" : [ -90.17728200000001, 30.428743 ], "pop" : 3110, "state" : "LA" } +{ "_id" : "70448", "city" : "MANDEVILLE", "loc" : [ -90.076846, 30.386096 ], "pop" : 22492, "state" : "LA" } +{ "_id" : "70449", "city" : "MAUREPAS", "loc" : [ -90.704255, 30.271587 ], "pop" : 2489, "state" : "LA" } +{ "_id" : "70450", "city" : "MOUNT HERMON", "loc" : [ -90.276886, 30.953619 ], "pop" : 1577, "state" : "LA" } +{ "_id" : "70452", "city" : "PEARL RIVER", "loc" : [ -89.77315, 30.394448 ], "pop" : 9228, "state" : "LA" } +{ "_id" : "70453", "city" : "PINE GROVE", "loc" : [ -90.767235, 30.703202 ], "pop" : 444, "state" : "LA" } +{ "_id" : "70454", "city" : "PONCHATOULA", "loc" : [ -90.44224699999999, 30.440644 ], "pop" : 15713, "state" : "LA" } +{ "_id" : "70455", "city" : "ROBERT", "loc" : [ -90.335171, 30.506327 ], "pop" : 564, "state" : "LA" } +{ "_id" : "70456", "city" : "ROSELAND", "loc" : [ -90.524277, 30.771711 ], "pop" : 2062, "state" : "LA" } +{ "_id" : "70458", "city" : "SLIDELL", "loc" : [ -89.771192, 30.278411 ], "pop" : 28918, "state" : "LA" } +{ "_id" : "70460", "city" : "SLIDELL", "loc" : [ -89.812895, 30.291611 ], "pop" : 18020, "state" : "LA" } +{ "_id" : "70461", "city" : "SLIDELL", "loc" : [ -89.729027, 30.272615 ], "pop" : 17270, "state" : "LA" } +{ "_id" : "70462", "city" : "SPRINGFIELD", "loc" : [ -90.577479, 30.415738 ], "pop" : 5597, "state" : "LA" } +{ "_id" : "70466", "city" : "TICKFAW", "loc" : [ -90.48199700000001, 30.566849 ], "pop" : 5565, "state" : "LA" } +{ "_id" : "70467", "city" : "VARNADO", "loc" : [ -89.7606, 30.982085 ], "pop" : 15, "state" : "LA" } +{ "_id" : "70501", "city" : "LAFAYETTE", "loc" : [ -92.008261, 30.236141 ], "pop" : 31717, "state" : "LA" } +{ "_id" : "70503", "city" : "LAFAYETTE", "loc" : [ -92.049745, 30.184256 ], "pop" : 25109, "state" : "LA" } +{ "_id" : "70506", "city" : "LAFAYETTE", "loc" : [ -92.065623, 30.207707 ], "pop" : 33970, "state" : "LA" } +{ "_id" : "70507", "city" : "LAFAYETTE", "loc" : [ -92.015962, 30.281313 ], "pop" : 12074, "state" : "LA" } +{ "_id" : "70508", "city" : "LAFAYETTE", "loc" : [ -92.023579, 30.158222 ], "pop" : 20568, "state" : "LA" } +{ "_id" : "70510", "city" : "FORKED ISLAND", "loc" : [ -92.142655, 29.958828 ], "pop" : 21018, "state" : "LA" } +{ "_id" : "70512", "city" : "ARNAUDVILLE", "loc" : [ -91.92628499999999, 30.398054 ], "pop" : 5676, "state" : "LA" } +{ "_id" : "70514", "city" : "BALDWIN", "loc" : [ -91.545783, 29.848784 ], "pop" : 4601, "state" : "LA" } +{ "_id" : "70515", "city" : "BASILE", "loc" : [ -92.57357, 30.497787 ], "pop" : 2733, "state" : "LA" } +{ "_id" : "70516", "city" : "BRANCH", "loc" : [ -92.33461800000001, 30.328684 ], "pop" : 2695, "state" : "LA" } +{ "_id" : "70517", "city" : "HENDERSON", "loc" : [ -91.90589900000001, 30.274955 ], "pop" : 9596, "state" : "LA" } +{ "_id" : "70518", "city" : "BROUSSARD", "loc" : [ -91.950171, 30.12189 ], "pop" : 8159, "state" : "LA" } +{ "_id" : "70520", "city" : "CARENCRO", "loc" : [ -92.042265, 30.324433 ], "pop" : 12256, "state" : "LA" } +{ "_id" : "70525", "city" : "CHURCH POINT", "loc" : [ -92.22395400000001, 30.401287 ], "pop" : 11108, "state" : "LA" } +{ "_id" : "70526", "city" : "CROWLEY", "loc" : [ -92.377709, 30.214753 ], "pop" : 17975, "state" : "LA" } +{ "_id" : "70528", "city" : "DELCAMBRE", "loc" : [ -91.988938, 29.947414 ], "pop" : 2769, "state" : "LA" } +{ "_id" : "70529", "city" : "DUSON", "loc" : [ -92.152455, 30.191216 ], "pop" : 7160, "state" : "LA" } +{ "_id" : "70531", "city" : "EGAN", "loc" : [ -92.500226, 30.250966 ], "pop" : 359, "state" : "LA" } +{ "_id" : "70532", "city" : "ELTON", "loc" : [ -92.699614, 30.471496 ], "pop" : 1973, "state" : "LA" } +{ "_id" : "70533", "city" : "ERATH", "loc" : [ -92.034266, 29.952237 ], "pop" : 7280, "state" : "LA" } +{ "_id" : "70535", "city" : "EUNICE", "loc" : [ -92.39847399999999, 30.51158 ], "pop" : 21409, "state" : "LA" } +{ "_id" : "70537", "city" : "EVANGELINE", "loc" : [ -92.55324400000001, 30.26829 ], "pop" : 475, "state" : "LA" } +{ "_id" : "70538", "city" : "FRANKLIN", "loc" : [ -91.50264300000001, 29.785656 ], "pop" : 15334, "state" : "LA" } +{ "_id" : "70542", "city" : "GUEYDAN", "loc" : [ -92.533779, 30.025541 ], "pop" : 3839, "state" : "LA" } +{ "_id" : "70543", "city" : "IOTA", "loc" : [ -92.532201, 30.300081 ], "pop" : 5338, "state" : "LA" } +{ "_id" : "70544", "city" : "JEANERETTE", "loc" : [ -91.654397, 29.90324 ], "pop" : 14068, "state" : "LA" } +{ "_id" : "70546", "city" : "JENNINGS", "loc" : [ -92.657405, 30.22011 ], "pop" : 11966, "state" : "LA" } +{ "_id" : "70548", "city" : "KAPLAN", "loc" : [ -92.302463, 29.977096 ], "pop" : 9442, "state" : "LA" } +{ "_id" : "70549", "city" : "LAKE ARTHUR", "loc" : [ -92.682526, 30.09097 ], "pop" : 5011, "state" : "LA" } +{ "_id" : "70552", "city" : "LOREAUVILLE", "loc" : [ -91.659571, 30.068276 ], "pop" : 109, "state" : "LA" } +{ "_id" : "70554", "city" : "MAMOU", "loc" : [ -92.419646, 30.649648 ], "pop" : 6639, "state" : "LA" } +{ "_id" : "70555", "city" : "MAURICE", "loc" : [ -92.107035, 30.07215 ], "pop" : 3628, "state" : "LA" } +{ "_id" : "70559", "city" : "MIDLAND", "loc" : [ -92.46315300000001, 30.143437 ], "pop" : 4566, "state" : "LA" } +{ "_id" : "70560", "city" : "NEW IBERIA", "loc" : [ -91.819959, 30.001027 ], "pop" : 56105, "state" : "LA" } +{ "_id" : "70570", "city" : "OPELOUSAS", "loc" : [ -92.089668, 30.51442 ], "pop" : 46673, "state" : "LA" } +{ "_id" : "70577", "city" : "PORT BARRE", "loc" : [ -91.92857600000001, 30.547788 ], "pop" : 4940, "state" : "LA" } +{ "_id" : "70578", "city" : "RAYNE", "loc" : [ -92.248592, 30.204508 ], "pop" : 15652, "state" : "LA" } +{ "_id" : "70581", "city" : "ROANOKE", "loc" : [ -92.68697299999999, 30.318167 ], "pop" : 2766, "state" : "LA" } +{ "_id" : "70582", "city" : "SAINT MARTINVILL", "loc" : [ -91.82596100000001, 30.208282 ], "pop" : 29590, "state" : "LA" } +{ "_id" : "70583", "city" : "SCOTT", "loc" : [ -92.098079, 30.250401 ], "pop" : 9093, "state" : "LA" } +{ "_id" : "70584", "city" : "CANKTON", "loc" : [ -92.075681, 30.393741 ], "pop" : 634, "state" : "LA" } +{ "_id" : "70586", "city" : "VILLE PLATTE", "loc" : [ -92.27370999999999, 30.692376 ], "pop" : 14291, "state" : "LA" } +{ "_id" : "70589", "city" : "WASHINGTON", "loc" : [ -92.039888, 30.709881 ], "pop" : 3771, "state" : "LA" } +{ "_id" : "70591", "city" : "WELSH", "loc" : [ -92.818972, 30.236259 ], "pop" : 5587, "state" : "LA" } +{ "_id" : "70592", "city" : "YOUNGSVILLE", "loc" : [ -92.009629, 30.097498 ], "pop" : 6671, "state" : "LA" } +{ "_id" : "70601", "city" : "LAKE CHARLES", "loc" : [ -93.187966, 30.228453 ], "pop" : 49710, "state" : "LA" } +{ "_id" : "70605", "city" : "LAKE CHARLES", "loc" : [ -93.22179800000001, 30.169349 ], "pop" : 42627, "state" : "LA" } +{ "_id" : "70611", "city" : "LAKE CHARLES", "loc" : [ -93.211082, 30.322031 ], "pop" : 12470, "state" : "LA" } +{ "_id" : "70630", "city" : "BELL CITY", "loc" : [ -92.94407, 30.114454 ], "pop" : 1365, "state" : "LA" } +{ "_id" : "70631", "city" : "CAMERON", "loc" : [ -93.27766200000001, 29.86492 ], "pop" : 5677, "state" : "LA" } +{ "_id" : "70632", "city" : "CREOLE", "loc" : [ -93.034874, 29.797813 ], "pop" : 1023, "state" : "LA" } +{ "_id" : "70633", "city" : "DEQUINCY", "loc" : [ -93.415053, 30.421113 ], "pop" : 8271, "state" : "LA" } +{ "_id" : "70634", "city" : "DERIDDER", "loc" : [ -93.268461, 30.828738 ], "pop" : 19304, "state" : "LA" } +{ "_id" : "70637", "city" : "DRY CREEK", "loc" : [ -92.988849, 30.735356 ], "pop" : 1597, "state" : "LA" } +{ "_id" : "70639", "city" : "EVANS", "loc" : [ -93.42217100000001, 31.008817 ], "pop" : 2757, "state" : "LA" } +{ "_id" : "70643", "city" : "GRAND CHENIER", "loc" : [ -92.897997, 29.787535 ], "pop" : 696, "state" : "LA" } +{ "_id" : "70645", "city" : "HACKBERRY", "loc" : [ -93.374973, 29.982187 ], "pop" : 1668, "state" : "LA" } +{ "_id" : "70647", "city" : "IOWA", "loc" : [ -93.02585999999999, 30.221937 ], "pop" : 4915, "state" : "LA" } +{ "_id" : "70648", "city" : "KINDER", "loc" : [ -92.869332, 30.460653 ], "pop" : 6853, "state" : "LA" } +{ "_id" : "70650", "city" : "LACASSINE", "loc" : [ -92.829262, 30.145587 ], "pop" : 460, "state" : "LA" } +{ "_id" : "70652", "city" : "LONGVILLE", "loc" : [ -93.254806, 30.579992 ], "pop" : 1324, "state" : "LA" } +{ "_id" : "70653", "city" : "FIELDS", "loc" : [ -93.530734, 30.770145 ], "pop" : 3273, "state" : "LA" } +{ "_id" : "70654", "city" : "MITTIE", "loc" : [ -92.932056, 30.678812 ], "pop" : 477, "state" : "LA" } +{ "_id" : "70655", "city" : "OBERLIN", "loc" : [ -92.752672, 30.6162 ], "pop" : 3121, "state" : "LA" } +{ "_id" : "70656", "city" : "PITKIN", "loc" : [ -92.954762, 30.932988 ], "pop" : 3603, "state" : "LA" } +{ "_id" : "70657", "city" : "RAGLEY", "loc" : [ -93.23365200000001, 30.470262 ], "pop" : 2530, "state" : "LA" } +{ "_id" : "70658", "city" : "REEVES", "loc" : [ -93.03684699999999, 30.496734 ], "pop" : 1718, "state" : "LA" } +{ "_id" : "70660", "city" : "SINGER", "loc" : [ -93.464986, 30.532906 ], "pop" : 2374, "state" : "LA" } +{ "_id" : "70661", "city" : "STARKS", "loc" : [ -93.661485, 30.308477 ], "pop" : 2457, "state" : "LA" } +{ "_id" : "70662", "city" : "SUGARTOWN", "loc" : [ -93.017017, 30.827653 ], "pop" : 319, "state" : "LA" } +{ "_id" : "70663", "city" : "SULPHUR", "loc" : [ -93.363911, 30.219001 ], "pop" : 29774, "state" : "LA" } +{ "_id" : "70668", "city" : "VINTON", "loc" : [ -93.57280799999999, 30.201523 ], "pop" : 6584, "state" : "LA" } +{ "_id" : "70669", "city" : "WESTLAKE", "loc" : [ -93.268837, 30.261274 ], "pop" : 11106, "state" : "LA" } +{ "_id" : "70710", "city" : "ADDIS", "loc" : [ -91.261348, 30.355699 ], "pop" : 2354, "state" : "LA" } +{ "_id" : "70711", "city" : "ALBANY", "loc" : [ -90.59641499999999, 30.514872 ], "pop" : 4533, "state" : "LA" } +{ "_id" : "70712", "city" : "ANGOLA", "loc" : [ -91.597948, 30.96562 ], "pop" : 5382, "state" : "LA" } +{ "_id" : "70714", "city" : "BAKER", "loc" : [ -91.142893, 30.581395 ], "pop" : 19623, "state" : "LA" } +{ "_id" : "70715", "city" : "BATCHELOR", "loc" : [ -91.66867499999999, 30.802631 ], "pop" : 1864, "state" : "LA" } +{ "_id" : "70717", "city" : "BLANKS", "loc" : [ -91.61584499999999, 30.579813 ], "pop" : 1657, "state" : "LA" } +{ "_id" : "70719", "city" : "BRUSLY", "loc" : [ -91.25264900000001, 30.387692 ], "pop" : 3429, "state" : "LA" } +{ "_id" : "70720", "city" : "BUECHE", "loc" : [ -91.338303, 30.574894 ], "pop" : 504, "state" : "LA" } +{ "_id" : "70721", "city" : "POINT CLAIR", "loc" : [ -91.102484, 30.220759 ], "pop" : 1104, "state" : "LA" } +{ "_id" : "70722", "city" : "CLINTON", "loc" : [ -90.93314100000001, 30.824867 ], "pop" : 3028, "state" : "LA" } +{ "_id" : "70723", "city" : "CONVENT", "loc" : [ -90.864988, 30.055251 ], "pop" : 2052, "state" : "LA" } +{ "_id" : "70725", "city" : "DARROW", "loc" : [ -90.965102, 30.12999 ], "pop" : 1090, "state" : "LA" } +{ "_id" : "70726", "city" : "PORT VINCENT", "loc" : [ -90.932588, 30.484623 ], "pop" : 34574, "state" : "LA" } +{ "_id" : "70729", "city" : "ERWINVILLE", "loc" : [ -91.399444, 30.551252 ], "pop" : 342, "state" : "LA" } +{ "_id" : "70730", "city" : "ETHEL", "loc" : [ -91.10997500000001, 30.813124 ], "pop" : 3979, "state" : "LA" } +{ "_id" : "70732", "city" : "FORDOCHE", "loc" : [ -91.69725800000001, 30.550835 ], "pop" : 0, "state" : "LA" } +{ "_id" : "70733", "city" : "FRENCH SETTLEMEN", "loc" : [ -90.773225, 30.336394 ], "pop" : 3132, "state" : "LA" } +{ "_id" : "70734", "city" : "GEISMAR", "loc" : [ -90.975824, 30.236265 ], "pop" : 3622, "state" : "LA" } +{ "_id" : "70736", "city" : "GLYNN", "loc" : [ -91.342311, 30.637617 ], "pop" : 557, "state" : "LA" } +{ "_id" : "70737", "city" : "GONZALES", "loc" : [ -90.918012, 30.247306 ], "pop" : 21482, "state" : "LA" } +{ "_id" : "70739", "city" : "GREENWELL SPRING", "loc" : [ -91.00748400000001, 30.52114 ], "pop" : 8000, "state" : "LA" } +{ "_id" : "70740", "city" : "GROSSE TETE", "loc" : [ -91.43828999999999, 30.387935 ], "pop" : 956, "state" : "LA" } +{ "_id" : "70744", "city" : "HOLDEN", "loc" : [ -90.665176, 30.555646 ], "pop" : 2424, "state" : "LA" } +{ "_id" : "70748", "city" : "THE BLUFFS", "loc" : [ -91.234537, 30.827034 ], "pop" : 7635, "state" : "LA" } +{ "_id" : "70749", "city" : "JARREAU", "loc" : [ -91.433205, 30.632585 ], "pop" : 1365, "state" : "LA" } +{ "_id" : "70750", "city" : "KROTZ SPRINGS", "loc" : [ -91.75632899999999, 30.537928 ], "pop" : 935, "state" : "LA" } +{ "_id" : "70752", "city" : "LAKELAND", "loc" : [ -91.421677, 30.579941 ], "pop" : 839, "state" : "LA" } +{ "_id" : "70753", "city" : "LETTSWORTH", "loc" : [ -91.740252, 30.932394 ], "pop" : 1589, "state" : "LA" } +{ "_id" : "70754", "city" : "LIVINGSTON", "loc" : [ -90.76733900000001, 30.474107 ], "pop" : 4653, "state" : "LA" } +{ "_id" : "70755", "city" : "LIVONIA", "loc" : [ -91.533219, 30.552353 ], "pop" : 2711, "state" : "LA" } +{ "_id" : "70756", "city" : "LOTTIE", "loc" : [ -91.71053000000001, 30.503947 ], "pop" : 9, "state" : "LA" } +{ "_id" : "70757", "city" : "RAMAH", "loc" : [ -91.51681600000001, 30.482292 ], "pop" : 2070, "state" : "LA" } +{ "_id" : "70759", "city" : "MORGANZA", "loc" : [ -91.595935, 30.724491 ], "pop" : 1082, "state" : "LA" } +{ "_id" : "70760", "city" : "NEW ROADS", "loc" : [ -91.44212400000001, 30.701356 ], "pop" : 7642, "state" : "LA" } +{ "_id" : "70761", "city" : "NORWOOD", "loc" : [ -91.062871, 30.951772 ], "pop" : 1833, "state" : "LA" } +{ "_id" : "70762", "city" : "OSCAR", "loc" : [ -91.48457999999999, 30.598759 ], "pop" : 744, "state" : "LA" } +{ "_id" : "70763", "city" : "PAULINA", "loc" : [ -90.73743899999999, 30.035159 ], "pop" : 2639, "state" : "LA" } +{ "_id" : "70764", "city" : "PLAQUEMINE", "loc" : [ -91.25236099999999, 30.268414 ], "pop" : 16692, "state" : "LA" } +{ "_id" : "70767", "city" : "PORT ALLEN", "loc" : [ -91.254088, 30.471983 ], "pop" : 12837, "state" : "LA" } +{ "_id" : "70769", "city" : "GALVEZ", "loc" : [ -90.92990399999999, 30.315588 ], "pop" : 13275, "state" : "LA" } +{ "_id" : "70770", "city" : "PRIDE", "loc" : [ -90.99429000000001, 30.613321 ], "pop" : 5260, "state" : "LA" } +{ "_id" : "70772", "city" : "ROSEDALE", "loc" : [ -91.45616, 30.440776 ], "pop" : 807, "state" : "LA" } +{ "_id" : "70773", "city" : "ROUGON", "loc" : [ -91.381316, 30.603452 ], "pop" : 542, "state" : "LA" } +{ "_id" : "70774", "city" : "SAINT AMANT", "loc" : [ -90.84352699999999, 30.23849 ], "pop" : 6177, "state" : "LA" } +{ "_id" : "70775", "city" : "BAINS", "loc" : [ -91.39226600000001, 30.858658 ], "pop" : 5634, "state" : "LA" } +{ "_id" : "70776", "city" : "IBERVILLE", "loc" : [ -91.09162000000001, 30.279873 ], "pop" : 3225, "state" : "LA" } +{ "_id" : "70777", "city" : "SLAUGHTER", "loc" : [ -91.052251, 30.799139 ], "pop" : 4558, "state" : "LA" } +{ "_id" : "70778", "city" : "SORRENTO", "loc" : [ -90.86314, 30.185388 ], "pop" : 1303, "state" : "LA" } +{ "_id" : "70780", "city" : "SUNSHINE", "loc" : [ -91.179922, 30.29824 ], "pop" : 395, "state" : "LA" } +{ "_id" : "70781", "city" : "TORBERT", "loc" : [ -91.421616, 30.538575 ], "pop" : 27, "state" : "LA" } +{ "_id" : "70783", "city" : "VENTRESS", "loc" : [ -91.403257, 30.681404 ], "pop" : 1926, "state" : "LA" } +{ "_id" : "70785", "city" : "WALKER", "loc" : [ -90.85570800000001, 30.524748 ], "pop" : 12659, "state" : "LA" } +{ "_id" : "70788", "city" : "WHITE CASTLE", "loc" : [ -91.17734299999999, 30.15447 ], "pop" : 5739, "state" : "LA" } +{ "_id" : "70789", "city" : "WILSON", "loc" : [ -91.065511, 30.947325 ], "pop" : 77, "state" : "LA" } +{ "_id" : "70791", "city" : "ZACHARY", "loc" : [ -91.135841, 30.656129 ], "pop" : 18647, "state" : "LA" } +{ "_id" : "70792", "city" : "UNCLE SAM", "loc" : [ -90.771879, 30.021679 ], "pop" : 263, "state" : "LA" } +{ "_id" : "70801", "city" : "BATON ROUGE", "loc" : [ -91.186954, 30.450731 ], "pop" : 62, "state" : "LA" } +{ "_id" : "70802", "city" : "BATON ROUGE", "loc" : [ -91.169037, 30.444236 ], "pop" : 35116, "state" : "LA" } +{ "_id" : "70805", "city" : "BATON ROUGE", "loc" : [ -91.148095, 30.48604 ], "pop" : 30584, "state" : "LA" } +{ "_id" : "70806", "city" : "BATON ROUGE", "loc" : [ -91.13004599999999, 30.448486 ], "pop" : 25893, "state" : "LA" } +{ "_id" : "70807", "city" : "SCOTLANDVILLE", "loc" : [ -91.17861499999999, 30.533199 ], "pop" : 23234, "state" : "LA" } +{ "_id" : "70808", "city" : "BATON ROUGE", "loc" : [ -91.146765, 30.406596 ], "pop" : 31189, "state" : "LA" } +{ "_id" : "70809", "city" : "BATON ROUGE", "loc" : [ -91.08421300000001, 30.408891 ], "pop" : 15623, "state" : "LA" } +{ "_id" : "70810", "city" : "BATON ROUGE", "loc" : [ -91.091898, 30.363309 ], "pop" : 22331, "state" : "LA" } +{ "_id" : "70811", "city" : "GREENWOOD", "loc" : [ -91.12653899999999, 30.53046 ], "pop" : 13653, "state" : "LA" } +{ "_id" : "70812", "city" : "BATON ROUGE", "loc" : [ -91.118111, 30.505159 ], "pop" : 11842, "state" : "LA" } +{ "_id" : "70814", "city" : "BATON ROUGE", "loc" : [ -91.06893599999999, 30.484808 ], "pop" : 13227, "state" : "LA" } +{ "_id" : "70815", "city" : "BATON ROUGE", "loc" : [ -91.059558, 30.455809 ], "pop" : 27565, "state" : "LA" } +{ "_id" : "70816", "city" : "BATON ROUGE", "loc" : [ -91.035645, 30.427289 ], "pop" : 32885, "state" : "LA" } +{ "_id" : "70817", "city" : "BATON ROUGE", "loc" : [ -91.00212999999999, 30.390404 ], "pop" : 20916, "state" : "LA" } +{ "_id" : "70818", "city" : "BATON ROUGE", "loc" : [ -91.049964, 30.540832 ], "pop" : 8368, "state" : "LA" } +{ "_id" : "70819", "city" : "BATON ROUGE", "loc" : [ -91.01564999999999, 30.46679 ], "pop" : 5377, "state" : "LA" } +{ "_id" : "70820", "city" : "BATON ROUGE", "loc" : [ -91.167064, 30.379523 ], "pop" : 10710, "state" : "LA" } +{ "_id" : "71001", "city" : "ARCADIA", "loc" : [ -92.92452900000001, 32.555643 ], "pop" : 4367, "state" : "LA" } +{ "_id" : "71003", "city" : "ATHENS", "loc" : [ -93.023875, 32.645073 ], "pop" : 1336, "state" : "LA" } +{ "_id" : "71004", "city" : "BELCHER", "loc" : [ -93.85079899999999, 32.754393 ], "pop" : 849, "state" : "LA" } +{ "_id" : "71006", "city" : "BENTON", "loc" : [ -93.69095, 32.697617 ], "pop" : 7234, "state" : "LA" } +{ "_id" : "71007", "city" : "BETHANY", "loc" : [ -94.003394, 32.366179 ], "pop" : 404, "state" : "LA" } +{ "_id" : "71008", "city" : "BIENVILLE", "loc" : [ -92.908402, 32.252323 ], "pop" : 445, "state" : "LA" } +{ "_id" : "71016", "city" : "CASTOR", "loc" : [ -93.093576, 32.245181 ], "pop" : 2784, "state" : "LA" } +{ "_id" : "71018", "city" : "COTTON VALLEY", "loc" : [ -93.42588499999999, 32.819011 ], "pop" : 2061, "state" : "LA" } +{ "_id" : "71019", "city" : "HANNA", "loc" : [ -93.31564400000001, 32.050099 ], "pop" : 9339, "state" : "LA" } +{ "_id" : "71023", "city" : "DOYLINE", "loc" : [ -93.399585, 32.490023 ], "pop" : 3065, "state" : "LA" } +{ "_id" : "71024", "city" : "DUBBERLY", "loc" : [ -93.21419, 32.519164 ], "pop" : 1117, "state" : "LA" } +{ "_id" : "71027", "city" : "FRIERSON", "loc" : [ -93.69148800000001, 32.244968 ], "pop" : 1600, "state" : "LA" } +{ "_id" : "71028", "city" : "GIBSLAND", "loc" : [ -93.07055800000001, 32.529874 ], "pop" : 2219, "state" : "LA" } +{ "_id" : "71029", "city" : "GILLIAM", "loc" : [ -93.829268, 32.825055 ], "pop" : 367, "state" : "LA" } +{ "_id" : "71030", "city" : "GLOSTER", "loc" : [ -93.82930899999999, 32.191705 ], "pop" : 1242, "state" : "LA" } +{ "_id" : "71031", "city" : "GOLDONNA", "loc" : [ -92.961056, 31.999988 ], "pop" : 1378, "state" : "LA" } +{ "_id" : "71032", "city" : "GRAND CANE", "loc" : [ -93.79406400000001, 32.105 ], "pop" : 1048, "state" : "LA" } +{ "_id" : "71033", "city" : "GREENWOOD", "loc" : [ -93.969252, 32.424025 ], "pop" : 3140, "state" : "LA" } +{ "_id" : "71034", "city" : "HALL SUMMIT", "loc" : [ -93.30475, 32.175249 ], "pop" : 227, "state" : "LA" } +{ "_id" : "71037", "city" : "HAUGHTON", "loc" : [ -93.565742, 32.550732 ], "pop" : 13876, "state" : "LA" } +{ "_id" : "71038", "city" : "HAYNESVILLE", "loc" : [ -93.069137, 32.927807 ], "pop" : 7888, "state" : "LA" } +{ "_id" : "71039", "city" : "HEFLIN", "loc" : [ -93.285192, 32.447008 ], "pop" : 1415, "state" : "LA" } +{ "_id" : "71040", "city" : "HOMER", "loc" : [ -93.028834, 32.774883 ], "pop" : 6963, "state" : "LA" } +{ "_id" : "71043", "city" : "HOSSTON", "loc" : [ -93.883425, 32.896653 ], "pop" : 766, "state" : "LA" } +{ "_id" : "71044", "city" : "IDA", "loc" : [ -93.902186, 32.993393 ], "pop" : 742, "state" : "LA" } +{ "_id" : "71045", "city" : "JAMESTOWN", "loc" : [ -93.184758, 32.36127 ], "pop" : 380, "state" : "LA" } +{ "_id" : "71046", "city" : "KEATCHIE", "loc" : [ -93.95104600000001, 32.162173 ], "pop" : 1068, "state" : "LA" } +{ "_id" : "71047", "city" : "KEITHVILLE", "loc" : [ -93.888138, 32.316059 ], "pop" : 8291, "state" : "LA" } +{ "_id" : "71048", "city" : "LISBON", "loc" : [ -92.88781, 32.845196 ], "pop" : 427, "state" : "LA" } +{ "_id" : "71049", "city" : "LOGANSPORT", "loc" : [ -93.962733, 31.994327 ], "pop" : 4130, "state" : "LA" } +{ "_id" : "71051", "city" : "ELM GROVE", "loc" : [ -93.50261500000001, 32.388628 ], "pop" : 2216, "state" : "LA" } +{ "_id" : "71052", "city" : "MANSFIELD", "loc" : [ -93.69804499999999, 32.023863 ], "pop" : 12317, "state" : "LA" } +{ "_id" : "71055", "city" : "MINDEN", "loc" : [ -93.28858700000001, 32.632281 ], "pop" : 21954, "state" : "LA" } +{ "_id" : "71059", "city" : "MIRA", "loc" : [ -93.918797, 32.922491 ], "pop" : 207, "state" : "LA" } +{ "_id" : "71060", "city" : "MOORINGSPORT", "loc" : [ -93.973018, 32.66258 ], "pop" : 2838, "state" : "LA" } +{ "_id" : "71061", "city" : "OIL CITY", "loc" : [ -93.983844, 32.745107 ], "pop" : 1874, "state" : "LA" } +{ "_id" : "71063", "city" : "PELICAN", "loc" : [ -93.563361, 31.896563 ], "pop" : 998, "state" : "LA" } +{ "_id" : "71064", "city" : "PLAIN DEALING", "loc" : [ -93.690534, 32.907419 ], "pop" : 4904, "state" : "LA" } +{ "_id" : "71065", "city" : "PLEASANT HILL", "loc" : [ -93.513594, 31.808577 ], "pop" : 1338, "state" : "LA" } +{ "_id" : "71067", "city" : "PRINCETON", "loc" : [ -93.522577, 32.579089 ], "pop" : 1914, "state" : "LA" } +{ "_id" : "71068", "city" : "RINGGOLD", "loc" : [ -93.298241, 32.326302 ], "pop" : 4442, "state" : "LA" } +{ "_id" : "71069", "city" : "RODESSA", "loc" : [ -93.988474, 32.970079 ], "pop" : 1014, "state" : "LA" } +{ "_id" : "71070", "city" : "CHESTNUT", "loc" : [ -92.948606, 32.156604 ], "pop" : 1207, "state" : "LA" } +{ "_id" : "71071", "city" : "SAREPTA", "loc" : [ -93.44040699999999, 32.943361 ], "pop" : 4570, "state" : "LA" } +{ "_id" : "71072", "city" : "SHONGALOO", "loc" : [ -93.29626399999999, 32.971289 ], "pop" : 752, "state" : "LA" } +{ "_id" : "71073", "city" : "SIBLEY", "loc" : [ -93.30090199999999, 32.509539 ], "pop" : 1363, "state" : "LA" } +{ "_id" : "71075", "city" : "SPRINGHILL", "loc" : [ -93.459563, 33.00054 ], "pop" : 6271, "state" : "LA" } +{ "_id" : "71078", "city" : "STONEWALL", "loc" : [ -93.80027699999999, 32.284758 ], "pop" : 3009, "state" : "LA" } +{ "_id" : "71079", "city" : "SUMMERFIELD", "loc" : [ -92.821516, 32.923802 ], "pop" : 25, "state" : "LA" } +{ "_id" : "71082", "city" : "TREES", "loc" : [ -93.987312, 32.866844 ], "pop" : 5880, "state" : "LA" } +{ "_id" : "71101", "city" : "SHREVEPORT", "loc" : [ -93.748696, 32.503743 ], "pop" : 11355, "state" : "LA" } +{ "_id" : "71103", "city" : "SHREVEPORT", "loc" : [ -93.772701, 32.494459 ], "pop" : 12908, "state" : "LA" } +{ "_id" : "71104", "city" : "SHREVEPORT", "loc" : [ -93.73486200000001, 32.482978 ], "pop" : 14181, "state" : "LA" } +{ "_id" : "71105", "city" : "SHREVEPORT", "loc" : [ -93.714341, 32.458882 ], "pop" : 19053, "state" : "LA" } +{ "_id" : "71106", "city" : "FORBING", "loc" : [ -93.747922, 32.426251 ], "pop" : 32844, "state" : "LA" } +{ "_id" : "71107", "city" : "DIXIE", "loc" : [ -93.82878100000001, 32.564652 ], "pop" : 29013, "state" : "LA" } +{ "_id" : "71108", "city" : "SHREVEPORT", "loc" : [ -93.781378, 32.448596 ], "pop" : 19800, "state" : "LA" } +{ "_id" : "71109", "city" : "SHREVEPORT", "loc" : [ -93.80129700000001, 32.473994 ], "pop" : 27393, "state" : "LA" } +{ "_id" : "71110", "city" : "BARKSDALE A F B", "loc" : [ -93.638172, 32.514313 ], "pop" : 3518, "state" : "LA" } +{ "_id" : "71111", "city" : "BOSSIER CITY", "loc" : [ -93.70382600000001, 32.544924 ], "pop" : 26472, "state" : "LA" } +{ "_id" : "71112", "city" : "BOSSIER CITY", "loc" : [ -93.676723, 32.486025 ], "pop" : 25299, "state" : "LA" } +{ "_id" : "71115", "city" : "CASPIANA", "loc" : [ -93.697402, 32.410156 ], "pop" : 8897, "state" : "LA" } +{ "_id" : "71118", "city" : "SHREVEPORT", "loc" : [ -93.802543, 32.397664 ], "pop" : 23539, "state" : "LA" } +{ "_id" : "71119", "city" : "SHREVEPORT", "loc" : [ -93.87260999999999, 32.477121 ], "pop" : 10578, "state" : "LA" } +{ "_id" : "71129", "city" : "SHREVEPORT", "loc" : [ -93.87419199999999, 32.41412 ], "pop" : 12661, "state" : "LA" } +{ "_id" : "71201", "city" : "MONROE", "loc" : [ -92.106104, 32.528551 ], "pop" : 22419, "state" : "LA" } +{ "_id" : "71202", "city" : "RICHWOOD", "loc" : [ -92.090231, 32.463327 ], "pop" : 32038, "state" : "LA" } +{ "_id" : "71203", "city" : "MONROE", "loc" : [ -92.042241, 32.553038 ], "pop" : 35643, "state" : "LA" } +{ "_id" : "71219", "city" : "BASKIN", "loc" : [ -91.713154, 32.289728 ], "pop" : 1518, "state" : "LA" } +{ "_id" : "71220", "city" : "BASTROP", "loc" : [ -91.90776, 32.789382 ], "pop" : 26388, "state" : "LA" } +{ "_id" : "71222", "city" : "BERNICE", "loc" : [ -92.62626899999999, 32.821024 ], "pop" : 3510, "state" : "LA" } +{ "_id" : "71223", "city" : "BONITA", "loc" : [ -91.682158, 32.912263 ], "pop" : 963, "state" : "LA" } +{ "_id" : "71225", "city" : "CALHOUN", "loc" : [ -92.32992900000001, 32.524791 ], "pop" : 4082, "state" : "LA" } +{ "_id" : "71226", "city" : "CHATHAM", "loc" : [ -92.437433, 32.292246 ], "pop" : 1254, "state" : "LA" } +{ "_id" : "71227", "city" : "CHOUDRANT", "loc" : [ -92.522419, 32.555627 ], "pop" : 5436, "state" : "LA" } +{ "_id" : "71229", "city" : "COLLINSTON", "loc" : [ -91.86341899999999, 32.697143 ], "pop" : 1128, "state" : "LA" } +{ "_id" : "71232", "city" : "WARDEN", "loc" : [ -91.51248699999999, 32.450433 ], "pop" : 6657, "state" : "LA" } +{ "_id" : "71234", "city" : "DOWNSVILLE", "loc" : [ -92.374471, 32.652508 ], "pop" : 4019, "state" : "LA" } +{ "_id" : "71235", "city" : "DUBACH", "loc" : [ -92.678543, 32.694893 ], "pop" : 2838, "state" : "LA" } +{ "_id" : "71237", "city" : "EPPS", "loc" : [ -91.49135, 32.616099 ], "pop" : 1586, "state" : "LA" } +{ "_id" : "71238", "city" : "EROS", "loc" : [ -92.34795, 32.398822 ], "pop" : 2296, "state" : "LA" } +{ "_id" : "71239", "city" : "EXTENSION", "loc" : [ -91.801091, 31.947065 ], "pop" : 263, "state" : "LA" } +{ "_id" : "71241", "city" : "FARMERVILLE", "loc" : [ -92.317955, 32.753378 ], "pop" : 7172, "state" : "LA" } +{ "_id" : "71243", "city" : "FORT NECESSITY", "loc" : [ -91.825694, 32.043412 ], "pop" : 74, "state" : "LA" } +{ "_id" : "71245", "city" : "GRAMBLING", "loc" : [ -92.715785, 32.524398 ], "pop" : 5740, "state" : "LA" } +{ "_id" : "71250", "city" : "JONES", "loc" : [ -91.596509, 32.966286 ], "pop" : 386, "state" : "LA" } +{ "_id" : "71251", "city" : "JONESBORO", "loc" : [ -92.694425, 32.248292 ], "pop" : 11078, "state" : "LA" } +{ "_id" : "71254", "city" : "LAKE PROVIDENCE", "loc" : [ -91.19056999999999, 32.807067 ], "pop" : 7774, "state" : "LA" } +{ "_id" : "71256", "city" : "LILLIE", "loc" : [ -92.68576899999999, 32.952931 ], "pop" : 439, "state" : "LA" } +{ "_id" : "71259", "city" : "MANGHAM", "loc" : [ -91.797607, 32.333114 ], "pop" : 3493, "state" : "LA" } +{ "_id" : "71260", "city" : "LINVILLE", "loc" : [ -92.25706, 32.888155 ], "pop" : 3761, "state" : "LA" } +{ "_id" : "71261", "city" : "MER ROUGE", "loc" : [ -91.771643, 32.77176 ], "pop" : 2177, "state" : "LA" } +{ "_id" : "71263", "city" : "TERRY", "loc" : [ -91.41290499999999, 32.872258 ], "pop" : 9056, "state" : "LA" } +{ "_id" : "71264", "city" : "OAK RIDGE", "loc" : [ -91.761785, 32.624317 ], "pop" : 913, "state" : "LA" } +{ "_id" : "71266", "city" : "PIONEER", "loc" : [ -91.464822, 32.715436 ], "pop" : 1451, "state" : "LA" } +{ "_id" : "71268", "city" : "QUITMAN", "loc" : [ -92.70853200000001, 32.356423 ], "pop" : 2603, "state" : "LA" } +{ "_id" : "71269", "city" : "ALTO", "loc" : [ -91.76430000000001, 32.468938 ], "pop" : 11441, "state" : "LA" } +{ "_id" : "71270", "city" : "RUSTON", "loc" : [ -92.64392700000001, 32.530823 ], "pop" : 26114, "state" : "LA" } +{ "_id" : "71275", "city" : "SIMSBORO", "loc" : [ -92.79948400000001, 32.538388 ], "pop" : 2476, "state" : "LA" } +{ "_id" : "71276", "city" : "SONDHEIMER", "loc" : [ -91.248197, 32.577216 ], "pop" : 887, "state" : "LA" } +{ "_id" : "71277", "city" : "SPEARSVILLE", "loc" : [ -92.58698, 32.955022 ], "pop" : 2830, "state" : "LA" } +{ "_id" : "71280", "city" : "SPENCER", "loc" : [ -92.12134, 32.593268 ], "pop" : 14, "state" : "LA" } +{ "_id" : "71282", "city" : "MOUND", "loc" : [ -91.190066, 32.402127 ], "pop" : 12354, "state" : "LA" } +{ "_id" : "71286", "city" : "TRANSYLVANIA", "loc" : [ -91.228813, 32.670529 ], "pop" : 1067, "state" : "LA" } +{ "_id" : "71291", "city" : "WEST MONROE", "loc" : [ -92.175971, 32.531726 ], "pop" : 27809, "state" : "LA" } +{ "_id" : "71292", "city" : "WEST MONROE", "loc" : [ -92.185445, 32.456599 ], "pop" : 17851, "state" : "LA" } +{ "_id" : "71295", "city" : "WINNSBORO", "loc" : [ -91.71084500000001, 32.159229 ], "pop" : 14751, "state" : "LA" } +{ "_id" : "71301", "city" : "ALEXANDRIA", "loc" : [ -92.46334899999999, 31.288519 ], "pop" : 25040, "state" : "LA" } +{ "_id" : "71302", "city" : "ALEXANDRIA", "loc" : [ -92.42416900000001, 31.268272 ], "pop" : 16918, "state" : "LA" } +{ "_id" : "71303", "city" : "ALEXANDRIA", "loc" : [ -92.508892, 31.304838 ], "pop" : 21759, "state" : "LA" } +{ "_id" : "71316", "city" : "ACME", "loc" : [ -91.821563, 31.301618 ], "pop" : 173, "state" : "LA" } +{ "_id" : "71318", "city" : "BIG BEND", "loc" : [ -91.84506500000001, 31.079347 ], "pop" : 786, "state" : "LA" } +{ "_id" : "71322", "city" : "EOLA", "loc" : [ -92.182582, 30.949284 ], "pop" : 6271, "state" : "LA" } +{ "_id" : "71323", "city" : "CENTER POINT", "loc" : [ -92.18786799999999, 31.263068 ], "pop" : 1720, "state" : "LA" } +{ "_id" : "71325", "city" : "CHENEYVILLE", "loc" : [ -92.29514399999999, 31.020097 ], "pop" : 1545, "state" : "LA" } +{ "_id" : "71326", "city" : "CLAYTON", "loc" : [ -91.542547, 31.78857 ], "pop" : 1070, "state" : "LA" } +{ "_id" : "71327", "city" : "COTTONPORT", "loc" : [ -92.05812400000001, 30.986168 ], "pop" : 3190, "state" : "LA" } +{ "_id" : "71328", "city" : "BUCKEYE", "loc" : [ -92.202287, 31.354506 ], "pop" : 6080, "state" : "LA" } +{ "_id" : "71331", "city" : "VICK", "loc" : [ -92.194182, 31.189613 ], "pop" : 447, "state" : "LA" } +{ "_id" : "71333", "city" : "GOUDEAU", "loc" : [ -92.090039, 30.951089 ], "pop" : 919, "state" : "LA" } +{ "_id" : "71334", "city" : "FROGMORE", "loc" : [ -91.571958, 31.647944 ], "pop" : 9280, "state" : "LA" } +{ "_id" : "71336", "city" : "GILBERT", "loc" : [ -91.592026, 32.034943 ], "pop" : 793, "state" : "LA" } +{ "_id" : "71339", "city" : "HAMBURG", "loc" : [ -91.916177, 31.073269 ], "pop" : 481, "state" : "LA" } +{ "_id" : "71340", "city" : "HARRISONBURG", "loc" : [ -91.883971, 31.766926 ], "pop" : 2348, "state" : "LA" } +{ "_id" : "71341", "city" : "HESSMER", "loc" : [ -92.139933, 31.0534 ], "pop" : 3057, "state" : "LA" } +{ "_id" : "71342", "city" : "JENA", "loc" : [ -92.113677, 31.674817 ], "pop" : 5796, "state" : "LA" } +{ "_id" : "71343", "city" : "LARTO", "loc" : [ -91.845812, 31.636486 ], "pop" : 5507, "state" : "LA" } +{ "_id" : "71346", "city" : "LECOMPTE", "loc" : [ -92.389031, 31.106032 ], "pop" : 3056, "state" : "LA" } +{ "_id" : "71350", "city" : "MANSURA", "loc" : [ -92.054333, 31.061466 ], "pop" : 3239, "state" : "LA" } +{ "_id" : "71351", "city" : "MARKSVILLE", "loc" : [ -92.083145, 31.139614 ], "pop" : 11217, "state" : "LA" } +{ "_id" : "71353", "city" : "MELVILLE", "loc" : [ -91.75649, 30.662643 ], "pop" : 2713, "state" : "LA" } +{ "_id" : "71354", "city" : "MONTEREY", "loc" : [ -91.734455, 31.440287 ], "pop" : 2074, "state" : "LA" } +{ "_id" : "71355", "city" : "MOREAUVILLE", "loc" : [ -91.981814, 31.036766 ], "pop" : 1914, "state" : "LA" } +{ "_id" : "71356", "city" : "LE MOYEN", "loc" : [ -92.040781, 30.824887 ], "pop" : 404, "state" : "LA" } +{ "_id" : "71357", "city" : "NEWELLTON", "loc" : [ -91.25777100000001, 32.065621 ], "pop" : 3235, "state" : "LA" } +{ "_id" : "71358", "city" : "PALMETTO", "loc" : [ -91.911384, 30.706543 ], "pop" : 621, "state" : "LA" } +{ "_id" : "71360", "city" : "KOLIN", "loc" : [ -92.399276, 31.34991 ], "pop" : 37069, "state" : "LA" } +{ "_id" : "71362", "city" : "PLAUCHEVILLE", "loc" : [ -91.984673, 30.936484 ], "pop" : 2517, "state" : "LA" } +{ "_id" : "71366", "city" : "SAINT JOSEPH", "loc" : [ -91.278432, 31.924805 ], "pop" : 2073, "state" : "LA" } +{ "_id" : "71367", "city" : "SAINT LANDRY", "loc" : [ -92.393846, 30.83812 ], "pop" : 5679, "state" : "LA" } +{ "_id" : "71368", "city" : "SICILY ISLAND", "loc" : [ -91.680711, 31.850734 ], "pop" : 1568, "state" : "LA" } +{ "_id" : "71369", "city" : "SIMMESPORT", "loc" : [ -91.825868, 30.977119 ], "pop" : 3137, "state" : "LA" } +{ "_id" : "71371", "city" : "TROUT", "loc" : [ -92.19931, 31.653142 ], "pop" : 3624, "state" : "LA" } +{ "_id" : "71373", "city" : "VIDALIA", "loc" : [ -91.469471, 31.578222 ], "pop" : 9257, "state" : "LA" } +{ "_id" : "71375", "city" : "WATERPROOF", "loc" : [ -91.387154, 31.807613 ], "pop" : 1245, "state" : "LA" } +{ "_id" : "71378", "city" : "WISNER", "loc" : [ -91.67679800000001, 31.991252 ], "pop" : 4116, "state" : "LA" } +{ "_id" : "71401", "city" : "AIMWELL", "loc" : [ -91.992491, 31.761898 ], "pop" : 51, "state" : "LA" } +{ "_id" : "71403", "city" : "ANACOCO", "loc" : [ -93.358949, 31.221762 ], "pop" : 4978, "state" : "LA" } +{ "_id" : "71404", "city" : "ATLANTA", "loc" : [ -92.76412500000001, 31.873583 ], "pop" : 2466, "state" : "LA" } +{ "_id" : "71406", "city" : "BELMONT", "loc" : [ -93.495863, 31.709956 ], "pop" : 616, "state" : "LA" } +{ "_id" : "71407", "city" : "BENTLEY", "loc" : [ -92.49272999999999, 31.466035 ], "pop" : 2805, "state" : "LA" } +{ "_id" : "71409", "city" : "BOYCE", "loc" : [ -92.68668099999999, 31.321601 ], "pop" : 4672, "state" : "LA" } +{ "_id" : "71411", "city" : "CAMPTI", "loc" : [ -93.09357199999999, 31.895851 ], "pop" : 3990, "state" : "LA" } +{ "_id" : "71412", "city" : "CHOPIN", "loc" : [ -92.94971700000001, 31.541916 ], "pop" : 434, "state" : "LA" } +{ "_id" : "71416", "city" : "DERRY", "loc" : [ -92.857326, 31.535918 ], "pop" : 802, "state" : "LA" } +{ "_id" : "71417", "city" : "COLFAX", "loc" : [ -92.656758, 31.507948 ], "pop" : 5520, "state" : "LA" } +{ "_id" : "71418", "city" : "HEBERT", "loc" : [ -92.10365299999999, 32.114794 ], "pop" : 4785, "state" : "LA" } +{ "_id" : "71419", "city" : "MITCHELL", "loc" : [ -93.71569, 31.785153 ], "pop" : 1592, "state" : "LA" } +{ "_id" : "71422", "city" : "DODSON", "loc" : [ -92.678292, 32.070131 ], "pop" : 2198, "state" : "LA" } +{ "_id" : "71423", "city" : "DRY PRONG", "loc" : [ -92.566479, 31.597921 ], "pop" : 1993, "state" : "LA" } +{ "_id" : "71424", "city" : "ELMER", "loc" : [ -92.717062, 31.146476 ], "pop" : 1364, "state" : "LA" } +{ "_id" : "71425", "city" : "ENTERPRISE", "loc" : [ -91.87514899999999, 31.906412 ], "pop" : 124, "state" : "LA" } +{ "_id" : "71426", "city" : "FISHER", "loc" : [ -93.46019699999999, 31.493655 ], "pop" : 370, "state" : "LA" } +{ "_id" : "71427", "city" : "FLATWOODS", "loc" : [ -92.881246, 31.384882 ], "pop" : 312, "state" : "LA" } +{ "_id" : "71429", "city" : "FLORIEN", "loc" : [ -93.517916, 31.427455 ], "pop" : 6006, "state" : "LA" } +{ "_id" : "71430", "city" : "FOREST HILL", "loc" : [ -92.51079799999999, 31.024304 ], "pop" : 1804, "state" : "LA" } +{ "_id" : "71432", "city" : "GEORGETOWN", "loc" : [ -92.39518200000001, 31.745006 ], "pop" : 1016, "state" : "LA" } +{ "_id" : "71433", "city" : "CALCASIEU", "loc" : [ -92.645758, 30.978384 ], "pop" : 4204, "state" : "LA" } +{ "_id" : "71435", "city" : "GRAYSON", "loc" : [ -91.974615, 32.012108 ], "pop" : 324, "state" : "LA" } +{ "_id" : "71438", "city" : "LEANDER", "loc" : [ -92.77488, 31.082535 ], "pop" : 854, "state" : "LA" } +{ "_id" : "71439", "city" : "HORNBECK", "loc" : [ -93.368306, 31.322639 ], "pop" : 1352, "state" : "LA" } +{ "_id" : "71441", "city" : "KELLY", "loc" : [ -92.12607199999999, 32.028619 ], "pop" : 4042, "state" : "LA" } +{ "_id" : "71444", "city" : "LACAMP", "loc" : [ -92.89618299999999, 31.160702 ], "pop" : 276, "state" : "LA" } +{ "_id" : "71446", "city" : "HICKS", "loc" : [ -93.223957, 31.144292 ], "pop" : 21956, "state" : "LA" } +{ "_id" : "71447", "city" : "CHOPIN", "loc" : [ -92.77185, 31.418481 ], "pop" : 757, "state" : "LA" } +{ "_id" : "71449", "city" : "MANY", "loc" : [ -93.464113, 31.58508 ], "pop" : 6560, "state" : "LA" } +{ "_id" : "71450", "city" : "MARTHAVILLE", "loc" : [ -93.395428, 31.772583 ], "pop" : 932, "state" : "LA" } +{ "_id" : "71451", "city" : "MELDER", "loc" : [ -92.66218600000001, 31.11932 ], "pop" : 377, "state" : "LA" } +{ "_id" : "71454", "city" : "MONTGOMERY", "loc" : [ -92.841178, 31.667388 ], "pop" : 2263, "state" : "LA" } +{ "_id" : "71455", "city" : "CLIFTON", "loc" : [ -92.888915, 31.333927 ], "pop" : 443, "state" : "LA" } +{ "_id" : "71456", "city" : "NATCHEZ", "loc" : [ -93.024117, 31.661502 ], "pop" : 2070, "state" : "LA" } +{ "_id" : "71457", "city" : "NATCHITOCHES", "loc" : [ -93.091572, 31.761688 ], "pop" : 23878, "state" : "LA" } +{ "_id" : "71459", "city" : "FORT POLK", "loc" : [ -93.22213000000001, 31.032068 ], "pop" : 27181, "state" : "LA" } +{ "_id" : "71461", "city" : "NEWLLANO", "loc" : [ -93.287899, 31.069396 ], "pop" : 250, "state" : "LA" } +{ "_id" : "71462", "city" : "NOBLE", "loc" : [ -93.716679, 31.693849 ], "pop" : 841, "state" : "LA" } +{ "_id" : "71463", "city" : "OAKDALE", "loc" : [ -92.66396400000001, 30.817173 ], "pop" : 9577, "state" : "LA" } +{ "_id" : "71465", "city" : "OLLA", "loc" : [ -92.22139, 31.87339 ], "pop" : 3448, "state" : "LA" } +{ "_id" : "71466", "city" : "OTIS", "loc" : [ -92.744478, 31.226442 ], "pop" : 231, "state" : "LA" } +{ "_id" : "71467", "city" : "POLLOCK", "loc" : [ -92.400536, 31.499966 ], "pop" : 4328, "state" : "LA" } +{ "_id" : "71468", "city" : "PROVENCAL", "loc" : [ -93.140089, 31.580117 ], "pop" : 2700, "state" : "LA" } +{ "_id" : "71469", "city" : "ROBELINE", "loc" : [ -93.320972, 31.771453 ], "pop" : 939, "state" : "LA" } +{ "_id" : "71472", "city" : "SIEPER", "loc" : [ -92.76981000000001, 31.197034 ], "pop" : 474, "state" : "LA" } +{ "_id" : "71473", "city" : "SIKES", "loc" : [ -92.442894, 32.068616 ], "pop" : 579, "state" : "LA" } +{ "_id" : "71477", "city" : "TIOGA", "loc" : [ -92.44711599999999, 31.415732 ], "pop" : 2158, "state" : "LA" } +{ "_id" : "71479", "city" : "TULLOS", "loc" : [ -92.301254, 31.853088 ], "pop" : 1280, "state" : "LA" } +{ "_id" : "71483", "city" : "WINNFIELD", "loc" : [ -92.636646, 31.921389 ], "pop" : 9295, "state" : "LA" } +{ "_id" : "71485", "city" : "WOODWORTH", "loc" : [ -92.49899600000001, 31.132588 ], "pop" : 1932, "state" : "LA" } +{ "_id" : "71486", "city" : "ZWOLLE", "loc" : [ -93.663569, 31.61379 ], "pop" : 5325, "state" : "LA" } +{ "_id" : "71601", "city" : "NORTH CEDAR", "loc" : [ -91.995812, 34.215405 ], "pop" : 23095, "state" : "AR" } +{ "_id" : "71602", "city" : "DOLLARWAY", "loc" : [ -92.089718, 34.257001 ], "pop" : 15547, "state" : "AR" } +{ "_id" : "71603", "city" : "PINE BLUFF", "loc" : [ -92.044786, 34.189745 ], "pop" : 36473, "state" : "AR" } +{ "_id" : "71630", "city" : "ARKANSAS CITY", "loc" : [ -91.232529, 33.614328 ], "pop" : 7, "state" : "AR" } +{ "_id" : "71631", "city" : "BANKS", "loc" : [ -92.260386, 33.549665 ], "pop" : 514, "state" : "AR" } +{ "_id" : "71635", "city" : "NORTH", "loc" : [ -91.959152, 33.152369 ], "pop" : 14645, "state" : "AR" } +{ "_id" : "71638", "city" : "DERMOTT", "loc" : [ -91.439391, 33.524054 ], "pop" : 5880, "state" : "AR" } +{ "_id" : "71639", "city" : "DUMAS", "loc" : [ -91.486056, 33.892102 ], "pop" : 7033, "state" : "AR" } +{ "_id" : "71640", "city" : "EUDORA", "loc" : [ -91.271552, 33.12135 ], "pop" : 4860, "state" : "AR" } +{ "_id" : "71642", "city" : "FOUNTAIN HILL", "loc" : [ -91.835627, 33.342951 ], "pop" : 704, "state" : "AR" } +{ "_id" : "71643", "city" : "GOULD", "loc" : [ -91.576798, 34.034503 ], "pop" : 3765, "state" : "AR" } +{ "_id" : "71644", "city" : "TAMO", "loc" : [ -91.67082000000001, 34.030484 ], "pop" : 3768, "state" : "AR" } +{ "_id" : "71646", "city" : "HAMBURG", "loc" : [ -91.80226500000001, 33.2058 ], "pop" : 5422, "state" : "AR" } +{ "_id" : "71647", "city" : "INGALLS", "loc" : [ -92.127714, 33.422207 ], "pop" : 2150, "state" : "AR" } +{ "_id" : "71651", "city" : "JERSEY", "loc" : [ -92.29661299999999, 33.388914 ], "pop" : 301, "state" : "AR" } +{ "_id" : "71652", "city" : "KINGSLAND", "loc" : [ -92.30141500000001, 33.86002 ], "pop" : 993, "state" : "AR" } +{ "_id" : "71653", "city" : "LAKE VILLAGE", "loc" : [ -91.282487, 33.327408 ], "pop" : 5501, "state" : "AR" } +{ "_id" : "71654", "city" : "MC GEHEE", "loc" : [ -91.392781, 33.62971 ], "pop" : 6646, "state" : "AR" } +{ "_id" : "71655", "city" : "MONTICELLO", "loc" : [ -91.794845, 33.624951 ], "pop" : 14127, "state" : "AR" } +{ "_id" : "71658", "city" : "MONTROSE", "loc" : [ -91.52277599999999, 33.307516 ], "pop" : 948, "state" : "AR" } +{ "_id" : "71660", "city" : "NEW EDINBURG", "loc" : [ -92.193909, 33.758846 ], "pop" : 1105, "state" : "AR" } +{ "_id" : "71661", "city" : "PARKDALE", "loc" : [ -91.542793, 33.121267 ], "pop" : 560, "state" : "AR" } +{ "_id" : "71662", "city" : "PICKENS", "loc" : [ -91.39157, 33.807923 ], "pop" : 1228, "state" : "AR" } +{ "_id" : "71663", "city" : "PORTLAND", "loc" : [ -91.513935, 33.231773 ], "pop" : 773, "state" : "AR" } +{ "_id" : "71665", "city" : "RISON", "loc" : [ -92.118762, 33.945325 ], "pop" : 5669, "state" : "AR" } +{ "_id" : "71666", "city" : "ROHWER", "loc" : [ -91.205124, 33.616003 ], "pop" : 656, "state" : "AR" } +{ "_id" : "71667", "city" : "STAR CITY", "loc" : [ -91.865343, 33.940528 ], "pop" : 5913, "state" : "AR" } +{ "_id" : "71670", "city" : "REED", "loc" : [ -91.520287, 33.67479 ], "pop" : 739, "state" : "AR" } +{ "_id" : "71671", "city" : "WARREN", "loc" : [ -92.07782400000001, 33.613983 ], "pop" : 8828, "state" : "AR" } +{ "_id" : "71674", "city" : "WATSON", "loc" : [ -91.28145499999999, 33.890737 ], "pop" : 1003, "state" : "AR" } +{ "_id" : "71675", "city" : "WILMAR", "loc" : [ -91.925697, 33.621296 ], "pop" : 1293, "state" : "AR" } +{ "_id" : "71676", "city" : "WILMOT", "loc" : [ -91.572283, 33.057557 ], "pop" : 1267, "state" : "AR" } +{ "_id" : "71677", "city" : "WINCHESTER", "loc" : [ -91.543059, 33.752039 ], "pop" : 687, "state" : "AR" } +{ "_id" : "71678", "city" : "YORKTOWN", "loc" : [ -91.79647199999999, 34.017166 ], "pop" : 868, "state" : "AR" } +{ "_id" : "71701", "city" : "EAST CAMDEN", "loc" : [ -92.833386, 33.575866 ], "pop" : 22640, "state" : "AR" } +{ "_id" : "71720", "city" : "BEARDEN", "loc" : [ -92.61802, 33.729797 ], "pop" : 1945, "state" : "AR" } +{ "_id" : "71722", "city" : "BLUFF CITY", "loc" : [ -93.18681100000001, 33.698191 ], "pop" : 546, "state" : "AR" } +{ "_id" : "71725", "city" : "CARTHAGE", "loc" : [ -92.62623000000001, 34.063625 ], "pop" : 1255, "state" : "AR" } +{ "_id" : "71726", "city" : "READER", "loc" : [ -93.018716, 33.700148 ], "pop" : 1416, "state" : "AR" } +{ "_id" : "71730", "city" : "EL DORADO", "loc" : [ -92.662856, 33.20735 ], "pop" : 35308, "state" : "AR" } +{ "_id" : "71740", "city" : "EMERSON", "loc" : [ -93.198699, 33.089054 ], "pop" : 1888, "state" : "AR" } +{ "_id" : "71742", "city" : "FORDYCE", "loc" : [ -92.42247500000001, 33.817648 ], "pop" : 6001, "state" : "AR" } +{ "_id" : "71743", "city" : "GURDON", "loc" : [ -93.14169099999999, 33.912493 ], "pop" : 4180, "state" : "AR" } +{ "_id" : "71744", "city" : "HAMPTON", "loc" : [ -92.52951, 33.537613 ], "pop" : 3505, "state" : "AR" } +{ "_id" : "71745", "city" : "HARRELL", "loc" : [ -92.391243, 33.510865 ], "pop" : 846, "state" : "AR" } +{ "_id" : "71747", "city" : "HUTTIG", "loc" : [ -92.194153, 33.045888 ], "pop" : 1287, "state" : "AR" } +{ "_id" : "71748", "city" : "IVAN", "loc" : [ -92.43940600000001, 33.902984 ], "pop" : 353, "state" : "AR" } +{ "_id" : "71749", "city" : "JUNCTION CITY", "loc" : [ -92.684254, 33.043965 ], "pop" : 1553, "state" : "AR" } +{ "_id" : "71751", "city" : "LOUANN", "loc" : [ -92.782759, 33.411744 ], "pop" : 1667, "state" : "AR" } +{ "_id" : "71752", "city" : "MC NEIL", "loc" : [ -93.193006, 33.36222 ], "pop" : 2020, "state" : "AR" } +{ "_id" : "71753", "city" : "MAGNOLIA", "loc" : [ -93.239153, 33.264678 ], "pop" : 16379, "state" : "AR" } +{ "_id" : "71758", "city" : "MOUNT HOLLY", "loc" : [ -92.944265, 33.308534 ], "pop" : 514, "state" : "AR" } +{ "_id" : "71759", "city" : "NORPHLET", "loc" : [ -92.657619, 33.309619 ], "pop" : 1765, "state" : "AR" } +{ "_id" : "71762", "city" : "SMACKOVER", "loc" : [ -92.74424999999999, 33.339831 ], "pop" : 3554, "state" : "AR" } +{ "_id" : "71763", "city" : "MANNING", "loc" : [ -92.810984, 33.902989 ], "pop" : 2005, "state" : "AR" } +{ "_id" : "71764", "city" : "STEPHENS", "loc" : [ -93.02139099999999, 33.455044 ], "pop" : 2906, "state" : "AR" } +{ "_id" : "71765", "city" : "STRONG", "loc" : [ -92.362104, 33.119526 ], "pop" : 2738, "state" : "AR" } +{ "_id" : "71766", "city" : "THORNTON", "loc" : [ -92.468299, 33.767694 ], "pop" : 1272, "state" : "AR" } +{ "_id" : "71767", "city" : "TINSMAN", "loc" : [ -92.382192, 33.643436 ], "pop" : 203, "state" : "AR" } +{ "_id" : "71769", "city" : "VILLAGE", "loc" : [ -93.046404, 33.281849 ], "pop" : 882, "state" : "AR" } +{ "_id" : "71770", "city" : "WALDO", "loc" : [ -93.294915, 33.360017 ], "pop" : 2862, "state" : "AR" } +{ "_id" : "71801", "city" : "PERRYTOWN", "loc" : [ -93.590305, 33.656645 ], "pop" : 15955, "state" : "AR" } +{ "_id" : "71822", "city" : "ASHDOWN", "loc" : [ -94.135102, 33.678711 ], "pop" : 8514, "state" : "AR" } +{ "_id" : "71825", "city" : "BLEVINS", "loc" : [ -93.536035, 33.875468 ], "pop" : 831, "state" : "AR" } +{ "_id" : "71826", "city" : "BRADLEY", "loc" : [ -93.62749599999999, 33.106963 ], "pop" : 2623, "state" : "AR" } +{ "_id" : "71827", "city" : "BUCKNER", "loc" : [ -93.44699799999999, 33.375323 ], "pop" : 1364, "state" : "AR" } +{ "_id" : "71828", "city" : "CALE", "loc" : [ -93.26497000000001, 33.616403 ], "pop" : 230, "state" : "AR" } +{ "_id" : "71831", "city" : "COLUMBUS", "loc" : [ -93.85588, 33.745108 ], "pop" : 739, "state" : "AR" } +{ "_id" : "71832", "city" : "DE QUEEN", "loc" : [ -94.338559, 34.044206 ], "pop" : 7593, "state" : "AR" } +{ "_id" : "71833", "city" : "DIERKS", "loc" : [ -94.015243, 34.13232 ], "pop" : 2284, "state" : "AR" } +{ "_id" : "71834", "city" : "DODDRIDGE", "loc" : [ -93.954307, 33.105448 ], "pop" : 1435, "state" : "AR" } +{ "_id" : "71835", "city" : "EMMET", "loc" : [ -93.423242, 33.692896 ], "pop" : 1141, "state" : "AR" } +{ "_id" : "71836", "city" : "FOREMAN", "loc" : [ -94.388108, 33.71759 ], "pop" : 2740, "state" : "AR" } +{ "_id" : "71837", "city" : "FOUKE", "loc" : [ -93.900953, 33.302476 ], "pop" : 5895, "state" : "AR" } +{ "_id" : "71838", "city" : "FULTON", "loc" : [ -93.80856199999999, 33.629876 ], "pop" : 925, "state" : "AR" } +{ "_id" : "71839", "city" : "GARLAND CITY", "loc" : [ -93.731624, 33.335161 ], "pop" : 666, "state" : "AR" } +{ "_id" : "71841", "city" : "GILLHAM", "loc" : [ -94.316497, 34.157003 ], "pop" : 853, "state" : "AR" } +{ "_id" : "71842", "city" : "HORATIO", "loc" : [ -94.295942, 33.939221 ], "pop" : 2952, "state" : "AR" } +{ "_id" : "71845", "city" : "LEWISVILLE", "loc" : [ -93.595258, 33.373603 ], "pop" : 2550, "state" : "AR" } +{ "_id" : "71846", "city" : "LOCKESBURG", "loc" : [ -94.127588, 33.930553 ], "pop" : 2239, "state" : "AR" } +{ "_id" : "71847", "city" : "MC CASKILL", "loc" : [ -93.626605, 33.923042 ], "pop" : 658, "state" : "AR" } +{ "_id" : "71851", "city" : "MINERAL SPRINGS", "loc" : [ -93.918828, 33.863852 ], "pop" : 2732, "state" : "AR" } +{ "_id" : "71852", "city" : "NASHVILLE", "loc" : [ -93.87070900000001, 33.957646 ], "pop" : 7625, "state" : "AR" } +{ "_id" : "71853", "city" : "OGDEN", "loc" : [ -94.027826, 33.585706 ], "pop" : 779, "state" : "AR" } +{ "_id" : "71855", "city" : "OZAN", "loc" : [ -93.771443, 33.902775 ], "pop" : 1695, "state" : "AR" } +{ "_id" : "71857", "city" : "PRESCOTT", "loc" : [ -93.372544, 33.804029 ], "pop" : 5732, "state" : "AR" } +{ "_id" : "71858", "city" : "ROSSTON", "loc" : [ -93.30389099999999, 33.561693 ], "pop" : 1561, "state" : "AR" } +{ "_id" : "71859", "city" : "SARATOGA", "loc" : [ -93.876723, 33.759883 ], "pop" : 281, "state" : "AR" } +{ "_id" : "71860", "city" : "STAMPS", "loc" : [ -93.501307, 33.356877 ], "pop" : 3106, "state" : "AR" } +{ "_id" : "71861", "city" : "TAYLOR", "loc" : [ -93.44601900000001, 33.107957 ], "pop" : 1660, "state" : "AR" } +{ "_id" : "71862", "city" : "WASHINGTON", "loc" : [ -93.673529, 33.754596 ], "pop" : 821, "state" : "AR" } +{ "_id" : "71864", "city" : "WILLISVILLE", "loc" : [ -93.31211999999999, 33.484731 ], "pop" : 888, "state" : "AR" } +{ "_id" : "71865", "city" : "WILTON", "loc" : [ -94.135746, 33.734794 ], "pop" : 983, "state" : "AR" } +{ "_id" : "71866", "city" : "WINTHROP", "loc" : [ -94.395174, 33.858321 ], "pop" : 950, "state" : "AR" } +{ "_id" : "71901", "city" : "LAKE CATHERINE", "loc" : [ -93.02602400000001, 34.501475 ], "pop" : 27402, "state" : "AR" } +{ "_id" : "71909", "city" : "HOT SPRINGS VILL", "loc" : [ -93.00638600000001, 34.65862 ], "pop" : 8268, "state" : "AR" } +{ "_id" : "71913", "city" : "LAKE HAMILTON", "loc" : [ -93.109177, 34.473304 ], "pop" : 31048, "state" : "AR" } +{ "_id" : "71921", "city" : "AMITY", "loc" : [ -93.420551, 34.259362 ], "pop" : 1569, "state" : "AR" } +{ "_id" : "71922", "city" : "ANTOINE", "loc" : [ -93.437169, 34.028296 ], "pop" : 474, "state" : "AR" } +{ "_id" : "71923", "city" : "ARKADELPHIA", "loc" : [ -93.068989, 34.11525 ], "pop" : 14961, "state" : "AR" } +{ "_id" : "71929", "city" : "BISMARCK", "loc" : [ -93.187236, 34.311033 ], "pop" : 1291, "state" : "AR" } +{ "_id" : "71931", "city" : "BLAKELY", "loc" : [ -93.063509, 34.703957 ], "pop" : 271, "state" : "AR" } +{ "_id" : "71933", "city" : "BONNERDALE", "loc" : [ -93.31941500000001, 34.349751 ], "pop" : 1037, "state" : "AR" } +{ "_id" : "71935", "city" : "CADDO GAP", "loc" : [ -93.586376, 34.397579 ], "pop" : 2257, "state" : "AR" } +{ "_id" : "71937", "city" : "COVE", "loc" : [ -94.39234, 34.419159 ], "pop" : 1681, "state" : "AR" } +{ "_id" : "71940", "city" : "DELIGHT", "loc" : [ -93.524666, 34.023772 ], "pop" : 1529, "state" : "AR" } +{ "_id" : "71941", "city" : "DONALDSON", "loc" : [ -92.909384, 34.221221 ], "pop" : 748, "state" : "AR" } +{ "_id" : "71942", "city" : "FRIENDSHIP", "loc" : [ -92.98039300000001, 34.241225 ], "pop" : 626, "state" : "AR" } +{ "_id" : "71943", "city" : "GLENWOOD", "loc" : [ -93.555881, 34.319207 ], "pop" : 2720, "state" : "AR" } +{ "_id" : "71944", "city" : "GRANNIS", "loc" : [ -94.32550000000001, 34.237021 ], "pop" : 751, "state" : "AR" } +{ "_id" : "71945", "city" : "HATFIELD", "loc" : [ -94.371397, 34.487703 ], "pop" : 1048, "state" : "AR" } +{ "_id" : "71949", "city" : "JESSIEVILLE", "loc" : [ -93.19631800000001, 34.693729 ], "pop" : 931, "state" : "AR" } +{ "_id" : "71950", "city" : "KIRBY", "loc" : [ -93.616716, 34.255153 ], "pop" : 973, "state" : "AR" } +{ "_id" : "71952", "city" : "LANGLEY", "loc" : [ -93.850942, 34.314035 ], "pop" : 215, "state" : "AR" } +{ "_id" : "71953", "city" : "MENA", "loc" : [ -94.220984, 34.581435 ], "pop" : 12505, "state" : "AR" } +{ "_id" : "71956", "city" : "BUCKVILLE", "loc" : [ -93.16004100000001, 34.577182 ], "pop" : 1857, "state" : "AR" } +{ "_id" : "71957", "city" : "MOUNT IDA", "loc" : [ -93.574904, 34.561194 ], "pop" : 3052, "state" : "AR" } +{ "_id" : "71958", "city" : "MURFREESBORO", "loc" : [ -93.710903, 34.101734 ], "pop" : 3775, "state" : "AR" } +{ "_id" : "71959", "city" : "NEWHOPE", "loc" : [ -93.89048699999999, 34.227347 ], "pop" : 400, "state" : "AR" } +{ "_id" : "71960", "city" : "NORMAN", "loc" : [ -93.67430400000001, 34.459633 ], "pop" : 688, "state" : "AR" } +{ "_id" : "71961", "city" : "ODEN", "loc" : [ -93.82110299999999, 34.611292 ], "pop" : 710, "state" : "AR" } +{ "_id" : "71962", "city" : "OKOLONA", "loc" : [ -93.28967900000001, 34.055138 ], "pop" : 985, "state" : "AR" } +{ "_id" : "71964", "city" : "PEARCY", "loc" : [ -93.24201499999999, 34.435092 ], "pop" : 3215, "state" : "AR" } +{ "_id" : "71965", "city" : "PENCIL BLUFF", "loc" : [ -93.742947, 34.639946 ], "pop" : 323, "state" : "AR" } +{ "_id" : "71968", "city" : "ROYAL", "loc" : [ -93.289734, 34.515049 ], "pop" : 1099, "state" : "AR" } +{ "_id" : "71969", "city" : "SIMS", "loc" : [ -93.674071, 34.646181 ], "pop" : 461, "state" : "AR" } +{ "_id" : "71970", "city" : "STORY", "loc" : [ -93.537587, 34.668695 ], "pop" : 350, "state" : "AR" } +{ "_id" : "71971", "city" : "UMPIRE", "loc" : [ -94.03137700000001, 34.292129 ], "pop" : 647, "state" : "AR" } +{ "_id" : "71972", "city" : "VANDERVOORT", "loc" : [ -94.369788, 34.379535 ], "pop" : 323, "state" : "AR" } +{ "_id" : "71973", "city" : "WICKES", "loc" : [ -94.34025699999999, 34.308806 ], "pop" : 1273, "state" : "AR" } +{ "_id" : "72001", "city" : "ADONA", "loc" : [ -92.903325, 35.046956 ], "pop" : 494, "state" : "AR" } +{ "_id" : "72002", "city" : "ALEXANDER", "loc" : [ -92.472673, 34.631266 ], "pop" : 7984, "state" : "AR" } +{ "_id" : "72003", "city" : "ALMYRA", "loc" : [ -91.430992, 34.41459 ], "pop" : 626, "state" : "AR" } +{ "_id" : "72004", "city" : "ALTHEIMER", "loc" : [ -91.82891600000001, 34.306168 ], "pop" : 1929, "state" : "AR" } +{ "_id" : "72005", "city" : "AMAGON", "loc" : [ -91.07963599999999, 35.561559 ], "pop" : 457, "state" : "AR" } +{ "_id" : "72006", "city" : "AUGUSTA", "loc" : [ -91.352653, 35.278806 ], "pop" : 3702, "state" : "AR" } +{ "_id" : "72007", "city" : "AUSTIN", "loc" : [ -91.95939799999999, 35.028369 ], "pop" : 1741, "state" : "AR" } +{ "_id" : "72010", "city" : "BALD KNOB", "loc" : [ -91.550197, 35.311331 ], "pop" : 5132, "state" : "AR" } +{ "_id" : "72011", "city" : "BAUXITE", "loc" : [ -92.36053099999999, 34.545537 ], "pop" : 6956, "state" : "AR" } +{ "_id" : "72012", "city" : "BEEBE", "loc" : [ -91.907449, 35.093743 ], "pop" : 7862, "state" : "AR" } +{ "_id" : "72013", "city" : "BEE BRANCH", "loc" : [ -92.408523, 35.423367 ], "pop" : 1344, "state" : "AR" } +{ "_id" : "72014", "city" : "BEEDEVILLE", "loc" : [ -91.106371, 35.420267 ], "pop" : 518, "state" : "AR" } +{ "_id" : "72015", "city" : "BENTON", "loc" : [ -92.595241, 34.580087 ], "pop" : 36525, "state" : "AR" } +{ "_id" : "72016", "city" : "BIGELOW", "loc" : [ -92.630842, 34.984659 ], "pop" : 2001, "state" : "AR" } +{ "_id" : "72017", "city" : "BISCOE", "loc" : [ -91.490028, 34.833706 ], "pop" : 1348, "state" : "AR" } +{ "_id" : "72020", "city" : "BRADFORD", "loc" : [ -91.518973, 35.427655 ], "pop" : 3546, "state" : "AR" } +{ "_id" : "72021", "city" : "BRINKLEY", "loc" : [ -91.188596, 34.878124 ], "pop" : 6313, "state" : "AR" } +{ "_id" : "72022", "city" : "BRYANT", "loc" : [ -92.49201499999999, 34.606786 ], "pop" : 6065, "state" : "AR" } +{ "_id" : "72023", "city" : "CABOT", "loc" : [ -92.03177100000001, 34.945724 ], "pop" : 21197, "state" : "AR" } +{ "_id" : "72024", "city" : "CARLISLE", "loc" : [ -91.745929, 34.793291 ], "pop" : 2904, "state" : "AR" } +{ "_id" : "72025", "city" : "CASA", "loc" : [ -93.047005, 35.032168 ], "pop" : 649, "state" : "AR" } +{ "_id" : "72026", "city" : "CASSCOE", "loc" : [ -91.324798, 34.473625 ], "pop" : 1033, "state" : "AR" } +{ "_id" : "72027", "city" : "CENTER RIDGE", "loc" : [ -92.558167, 35.398063 ], "pop" : 981, "state" : "AR" } +{ "_id" : "72028", "city" : "CHOCTAW", "loc" : [ -92.426412, 35.523528 ], "pop" : 1091, "state" : "AR" } +{ "_id" : "72029", "city" : "CLARENDON", "loc" : [ -91.256426, 34.660138 ], "pop" : 3211, "state" : "AR" } +{ "_id" : "72030", "city" : "CLEVELAND", "loc" : [ -92.71282100000001, 35.358328 ], "pop" : 1244, "state" : "AR" } +{ "_id" : "72031", "city" : "CLINTON", "loc" : [ -92.475825, 35.604537 ], "pop" : 4098, "state" : "AR" } +{ "_id" : "72032", "city" : "CONWAY", "loc" : [ -92.423574, 35.084199 ], "pop" : 43236, "state" : "AR" } +{ "_id" : "72036", "city" : "COTTON PLANT", "loc" : [ -91.229043, 35.017827 ], "pop" : 1789, "state" : "AR" } +{ "_id" : "72038", "city" : "CROCKETTS BLUFF", "loc" : [ -91.232079, 34.425272 ], "pop" : 132, "state" : "AR" } +{ "_id" : "72039", "city" : "TWIN GROVES", "loc" : [ -92.432952, 35.291042 ], "pop" : 1605, "state" : "AR" } +{ "_id" : "72040", "city" : "DES ARC", "loc" : [ -91.511342, 34.97507 ], "pop" : 3446, "state" : "AR" } +{ "_id" : "72041", "city" : "DE VALLS BLUFF", "loc" : [ -91.49821799999999, 34.744704 ], "pop" : 1854, "state" : "AR" } +{ "_id" : "72042", "city" : "DE WITT", "loc" : [ -91.33362700000001, 34.285312 ], "pop" : 5320, "state" : "AR" } +{ "_id" : "72044", "city" : "EDGEMONT", "loc" : [ -92.199471, 35.623006 ], "pop" : 487, "state" : "AR" } +{ "_id" : "72045", "city" : "EL PASO", "loc" : [ -92.090076, 35.114176 ], "pop" : 580, "state" : "AR" } +{ "_id" : "72046", "city" : "ENGLAND", "loc" : [ -91.94842199999999, 34.557458 ], "pop" : 5254, "state" : "AR" } +{ "_id" : "72047", "city" : "ENOLA", "loc" : [ -92.212328, 35.208705 ], "pop" : 500, "state" : "AR" } +{ "_id" : "72048", "city" : "ETHEL", "loc" : [ -91.13983899999999, 34.243525 ], "pop" : 27, "state" : "AR" } +{ "_id" : "72051", "city" : "FOX", "loc" : [ -92.304266, 35.768208 ], "pop" : 960, "state" : "AR" } +{ "_id" : "72052", "city" : "GARNER", "loc" : [ -91.742884, 35.130305 ], "pop" : 618, "state" : "AR" } +{ "_id" : "72055", "city" : "GILLETT", "loc" : [ -91.380048, 34.121838 ], "pop" : 925, "state" : "AR" } +{ "_id" : "72057", "city" : "GRAPEVINE", "loc" : [ -92.31094400000001, 34.130893 ], "pop" : 591, "state" : "AR" } +{ "_id" : "72058", "city" : "GREENBRIER", "loc" : [ -92.357792, 35.229547 ], "pop" : 5532, "state" : "AR" } +{ "_id" : "72060", "city" : "GRIFFITHVILLE", "loc" : [ -91.624234, 35.114383 ], "pop" : 582, "state" : "AR" } +{ "_id" : "72061", "city" : "GUY", "loc" : [ -92.33153900000001, 35.318487 ], "pop" : 1026, "state" : "AR" } +{ "_id" : "72063", "city" : "HATTIEVILLE", "loc" : [ -92.778317, 35.290713 ], "pop" : 360, "state" : "AR" } +{ "_id" : "72064", "city" : "HAZEN", "loc" : [ -91.576699, 34.783833 ], "pop" : 1841, "state" : "AR" } +{ "_id" : "72065", "city" : "HENSLEY", "loc" : [ -92.21401899999999, 34.591133 ], "pop" : 3696, "state" : "AR" } +{ "_id" : "72066", "city" : "HICKORY PLAINS", "loc" : [ -91.750844, 34.978642 ], "pop" : 522, "state" : "AR" } +{ "_id" : "72067", "city" : "GREERS FERRY", "loc" : [ -92.182284, 35.549812 ], "pop" : 1802, "state" : "AR" } +{ "_id" : "72068", "city" : "HIGGINSON", "loc" : [ -91.71827999999999, 35.188254 ], "pop" : 786, "state" : "AR" } +{ "_id" : "72069", "city" : "HOLLY GROVE", "loc" : [ -91.184376, 34.599294 ], "pop" : 1417, "state" : "AR" } +{ "_id" : "72070", "city" : "HOUSTON", "loc" : [ -92.69131899999999, 35.036209 ], "pop" : 642, "state" : "AR" } +{ "_id" : "72072", "city" : "HUMNOKE", "loc" : [ -91.75661599999999, 34.541896 ], "pop" : 992, "state" : "AR" } +{ "_id" : "72073", "city" : "HUMPHREY", "loc" : [ -91.67896, 34.403387 ], "pop" : 851, "state" : "AR" } +{ "_id" : "72076", "city" : "GRAVEL RIDGE", "loc" : [ -92.13043500000001, 34.881985 ], "pop" : 37428, "state" : "AR" } +{ "_id" : "72079", "city" : "JEFFERSON", "loc" : [ -92.148574, 34.355285 ], "pop" : 1682, "state" : "AR" } +{ "_id" : "72080", "city" : "JERUSALEM", "loc" : [ -92.813886, 35.37975 ], "pop" : 765, "state" : "AR" } +{ "_id" : "72081", "city" : "JUDSONIA", "loc" : [ -91.64908699999999, 35.324954 ], "pop" : 7033, "state" : "AR" } +{ "_id" : "72082", "city" : "KENSETT", "loc" : [ -91.66967200000001, 35.229939 ], "pop" : 2123, "state" : "AR" } +{ "_id" : "72083", "city" : "KEO", "loc" : [ -92.00784400000001, 34.604072 ], "pop" : 278, "state" : "AR" } +{ "_id" : "72084", "city" : "LEOLA", "loc" : [ -92.597865, 34.185605 ], "pop" : 769, "state" : "AR" } +{ "_id" : "72086", "city" : "LONOKE", "loc" : [ -91.921367, 34.783162 ], "pop" : 6733, "state" : "AR" } +{ "_id" : "72087", "city" : "LONSDALE", "loc" : [ -92.834034, 34.556203 ], "pop" : 456, "state" : "AR" } +{ "_id" : "72101", "city" : "MC CRORY", "loc" : [ -91.179327, 35.247292 ], "pop" : 4029, "state" : "AR" } +{ "_id" : "72102", "city" : "MC RAE", "loc" : [ -91.821551, 35.11322 ], "pop" : 1095, "state" : "AR" } +{ "_id" : "72103", "city" : "SHANNON HILLS", "loc" : [ -92.384618, 34.621756 ], "pop" : 8853, "state" : "AR" } +{ "_id" : "72104", "city" : "MALVERN", "loc" : [ -92.829162, 34.355715 ], "pop" : 20257, "state" : "AR" } +{ "_id" : "72105", "city" : "JONES MILLS", "loc" : [ -92.861975, 34.453624 ], "pop" : 1896, "state" : "AR" } +{ "_id" : "72106", "city" : "MAYFLOWER", "loc" : [ -92.400102, 34.966853 ], "pop" : 3593, "state" : "AR" } +{ "_id" : "72110", "city" : "MORRILTON", "loc" : [ -92.73543600000001, 35.169227 ], "pop" : 12976, "state" : "AR" } +{ "_id" : "72111", "city" : "MOUNT VERNON", "loc" : [ -92.137334, 35.260613 ], "pop" : 534, "state" : "AR" } +{ "_id" : "72112", "city" : "NEWPORT", "loc" : [ -91.257064, 35.598823 ], "pop" : 13502, "state" : "AR" } +{ "_id" : "72113", "city" : "MAUMELLE", "loc" : [ -92.40589199999999, 34.849085 ], "pop" : 4806, "state" : "AR" } +{ "_id" : "72114", "city" : "NORTH LITTLE ROC", "loc" : [ -92.265376, 34.766974 ], "pop" : 15485, "state" : "AR" } +{ "_id" : "72116", "city" : "SHERWOOD", "loc" : [ -92.237359, 34.807629 ], "pop" : 29871, "state" : "AR" } +{ "_id" : "72117", "city" : "NORTH LITTLE ROC", "loc" : [ -92.194604, 34.776305 ], "pop" : 12736, "state" : "AR" } +{ "_id" : "72118", "city" : "CAMP JOSEPH T RO", "loc" : [ -92.307875, 34.821598 ], "pop" : 26442, "state" : "AR" } +{ "_id" : "72120", "city" : "NORTH LITTLE ROC", "loc" : [ -92.214169, 34.859292 ], "pop" : 15389, "state" : "AR" } +{ "_id" : "72121", "city" : "PANGBURN", "loc" : [ -91.79597099999999, 35.421583 ], "pop" : 1996, "state" : "AR" } +{ "_id" : "72122", "city" : "PARON", "loc" : [ -92.748176, 34.785289 ], "pop" : 484, "state" : "AR" } +{ "_id" : "72125", "city" : "PERRY", "loc" : [ -92.787976, 35.042732 ], "pop" : 648, "state" : "AR" } +{ "_id" : "72126", "city" : "PERRYVILLE", "loc" : [ -92.847171, 34.970096 ], "pop" : 3851, "state" : "AR" } +{ "_id" : "72127", "city" : "PLUMERVILLE", "loc" : [ -92.620435, 35.157466 ], "pop" : 1940, "state" : "AR" } +{ "_id" : "72128", "city" : "POYEN", "loc" : [ -92.599037, 34.350828 ], "pop" : 1753, "state" : "AR" } +{ "_id" : "72129", "city" : "PRATTSVILLE", "loc" : [ -92.513105, 34.307865 ], "pop" : 860, "state" : "AR" } +{ "_id" : "72130", "city" : "PRIM", "loc" : [ -92.134596, 35.685733 ], "pop" : 74, "state" : "AR" } +{ "_id" : "72131", "city" : "QUITMAN", "loc" : [ -92.133334, 35.404988 ], "pop" : 3043, "state" : "AR" } +{ "_id" : "72132", "city" : "REDFIELD", "loc" : [ -92.17579000000001, 34.452647 ], "pop" : 1888, "state" : "AR" } +{ "_id" : "72133", "city" : "REYDELL", "loc" : [ -91.55039499999999, 34.143281 ], "pop" : 150, "state" : "AR" } +{ "_id" : "72134", "city" : "ROE", "loc" : [ -91.37705800000001, 34.628592 ], "pop" : 392, "state" : "AR" } +{ "_id" : "72135", "city" : "ROLAND", "loc" : [ -92.51915200000001, 34.88287 ], "pop" : 1824, "state" : "AR" } +{ "_id" : "72136", "city" : "ROMANCE", "loc" : [ -92.06985, 35.215462 ], "pop" : 576, "state" : "AR" } +{ "_id" : "72137", "city" : "ROSE BUD", "loc" : [ -92.061988, 35.321447 ], "pop" : 891, "state" : "AR" } +{ "_id" : "72140", "city" : "SAINT CHARLES", "loc" : [ -91.16808, 34.335296 ], "pop" : 607, "state" : "AR" } +{ "_id" : "72141", "city" : "SCOTLAND", "loc" : [ -92.586652, 35.507956 ], "pop" : 1276, "state" : "AR" } +{ "_id" : "72142", "city" : "SCOTT", "loc" : [ -92.11566000000001, 34.694215 ], "pop" : 1027, "state" : "AR" } +{ "_id" : "72143", "city" : "GEORGETOWN", "loc" : [ -91.76293099999999, 35.253512 ], "pop" : 22586, "state" : "AR" } +{ "_id" : "72150", "city" : "SHERIDAN", "loc" : [ -92.365713, 34.316527 ], "pop" : 9714, "state" : "AR" } +{ "_id" : "72152", "city" : "SHERRILL", "loc" : [ -91.993285, 34.358148 ], "pop" : 615, "state" : "AR" } +{ "_id" : "72153", "city" : "SHIRLEY", "loc" : [ -92.29751, 35.573259 ], "pop" : 4841, "state" : "AR" } +{ "_id" : "72156", "city" : "SOLGOHACHIA", "loc" : [ -92.675387, 35.270056 ], "pop" : 133, "state" : "AR" } +{ "_id" : "72157", "city" : "SPRINGFIELD", "loc" : [ -92.54567, 35.274879 ], "pop" : 752, "state" : "AR" } +{ "_id" : "72160", "city" : "STUTTGART", "loc" : [ -91.548742, 34.485358 ], "pop" : 11801, "state" : "AR" } +{ "_id" : "72165", "city" : "THIDA", "loc" : [ -91.461823, 35.553556 ], "pop" : 616, "state" : "AR" } +{ "_id" : "72166", "city" : "TICHNOR", "loc" : [ -91.243684, 34.089311 ], "pop" : 331, "state" : "AR" } +{ "_id" : "72167", "city" : "TRASKWOOD", "loc" : [ -92.654734, 34.450791 ], "pop" : 606, "state" : "AR" } +{ "_id" : "72168", "city" : "TUCKER", "loc" : [ -91.916265, 34.441442 ], "pop" : 2170, "state" : "AR" } +{ "_id" : "72170", "city" : "ULM", "loc" : [ -91.51343, 34.579938 ], "pop" : 507, "state" : "AR" } +{ "_id" : "72173", "city" : "VILONIA", "loc" : [ -92.183235, 35.071895 ], "pop" : 2492, "state" : "AR" } +{ "_id" : "72175", "city" : "WABBASEKA", "loc" : [ -91.754948, 34.393552 ], "pop" : 1021, "state" : "AR" } +{ "_id" : "72176", "city" : "WARD", "loc" : [ -91.90038300000001, 34.95316 ], "pop" : 3503, "state" : "AR" } +{ "_id" : "72179", "city" : "WILBURN", "loc" : [ -91.907248, 35.454547 ], "pop" : 1924, "state" : "AR" } +{ "_id" : "72181", "city" : "WOOSTER", "loc" : [ -92.450998, 35.197308 ], "pop" : 1264, "state" : "AR" } +{ "_id" : "72182", "city" : "WRIGHT", "loc" : [ -92.06308, 34.437656 ], "pop" : 302, "state" : "AR" } +{ "_id" : "72201", "city" : "LITTLE ROCK", "loc" : [ -92.28193899999999, 34.748342 ], "pop" : 539, "state" : "AR" } +{ "_id" : "72202", "city" : "LITTLE ROCK", "loc" : [ -92.274067, 34.736322 ], "pop" : 11686, "state" : "AR" } +{ "_id" : "72204", "city" : "LITTLE ROCK", "loc" : [ -92.344041, 34.726904 ], "pop" : 33104, "state" : "AR" } +{ "_id" : "72205", "city" : "LITTLE ROCK", "loc" : [ -92.345512, 34.750971 ], "pop" : 25156, "state" : "AR" } +{ "_id" : "72206", "city" : "LITTLE ROCK", "loc" : [ -92.27760600000001, 34.683599 ], "pop" : 27367, "state" : "AR" } +{ "_id" : "72207", "city" : "LITTLE ROCK", "loc" : [ -92.356481, 34.772121 ], "pop" : 25217, "state" : "AR" } +{ "_id" : "72208", "city" : "FERNDALE", "loc" : [ -92.585581, 34.781575 ], "pop" : 458, "state" : "AR" } +{ "_id" : "72209", "city" : "LITTLE ROCK", "loc" : [ -92.352919, 34.672509 ], "pop" : 35211, "state" : "AR" } +{ "_id" : "72210", "city" : "LITTLE ROCK", "loc" : [ -92.465981, 34.707625 ], "pop" : 4426, "state" : "AR" } +{ "_id" : "72211", "city" : "LITTLE ROCK", "loc" : [ -92.431485, 34.758819 ], "pop" : 14006, "state" : "AR" } +{ "_id" : "72212", "city" : "LITTLE ROCK", "loc" : [ -92.42223199999999, 34.787076 ], "pop" : 16183, "state" : "AR" } +{ "_id" : "72301", "city" : "WEST MEMPHIS", "loc" : [ -90.17792, 35.148442 ], "pop" : 28720, "state" : "AR" } +{ "_id" : "72310", "city" : "ARMOREL", "loc" : [ -89.758118, 35.942843 ], "pop" : 444, "state" : "AR" } +{ "_id" : "72311", "city" : "AUBREY", "loc" : [ -90.911331, 34.702727 ], "pop" : 901, "state" : "AR" } +{ "_id" : "72313", "city" : "BASSETT", "loc" : [ -90.192155, 35.513808 ], "pop" : 1147, "state" : "AR" } +{ "_id" : "72314", "city" : "BIRDEYE", "loc" : [ -90.67074, 35.409571 ], "pop" : 505, "state" : "AR" } +{ "_id" : "72315", "city" : "BLYTHEVILLE A F", "loc" : [ -89.92249700000001, 35.934482 ], "pop" : 30944, "state" : "AR" } +{ "_id" : "72320", "city" : "BRICKEYS", "loc" : [ -90.537738, 34.854814 ], "pop" : 458, "state" : "AR" } +{ "_id" : "72321", "city" : "BURDETTE", "loc" : [ -89.942312, 35.814769 ], "pop" : 329, "state" : "AR" } +{ "_id" : "72324", "city" : "CHERRY VALLEY", "loc" : [ -90.761329, 35.399122 ], "pop" : 1273, "state" : "AR" } +{ "_id" : "72326", "city" : "COLT", "loc" : [ -90.787204, 35.096062 ], "pop" : 3755, "state" : "AR" } +{ "_id" : "72327", "city" : "CRAWFORDSVILLE", "loc" : [ -90.33510699999999, 35.211873 ], "pop" : 1834, "state" : "AR" } +{ "_id" : "72328", "city" : "CRUMROD", "loc" : [ -90.949535, 34.216167 ], "pop" : 514, "state" : "AR" } +{ "_id" : "72329", "city" : "DRIVER", "loc" : [ -89.960526, 35.559714 ], "pop" : 25, "state" : "AR" } +{ "_id" : "72330", "city" : "DYESS", "loc" : [ -90.215716, 35.595394 ], "pop" : 912, "state" : "AR" } +{ "_id" : "72331", "city" : "EARLE", "loc" : [ -90.450261, 35.27989 ], "pop" : 5009, "state" : "AR" } +{ "_id" : "72332", "city" : "EDMONDSON", "loc" : [ -90.328672, 35.022309 ], "pop" : 2435, "state" : "AR" } +{ "_id" : "72333", "city" : "ELAINE", "loc" : [ -90.873485, 34.308668 ], "pop" : 1366, "state" : "AR" } +{ "_id" : "72335", "city" : "FORREST CITY", "loc" : [ -90.788572, 35.009129 ], "pop" : 17751, "state" : "AR" } +{ "_id" : "72338", "city" : "FRENCHMANS BAYOU", "loc" : [ -90.055933, 35.478419 ], "pop" : 34, "state" : "AR" } +{ "_id" : "72339", "city" : "GILMORE", "loc" : [ -90.264664, 35.386408 ], "pop" : 1852, "state" : "AR" } +{ "_id" : "72340", "city" : "GOODWIN", "loc" : [ -90.983518, 34.959149 ], "pop" : 597, "state" : "AR" } +{ "_id" : "72341", "city" : "HAYNES", "loc" : [ -90.766621, 34.883752 ], "pop" : 552, "state" : "AR" } +{ "_id" : "72342", "city" : "HELENA", "loc" : [ -90.629784, 34.532491 ], "pop" : 9515, "state" : "AR" } +{ "_id" : "72346", "city" : "HETH", "loc" : [ -90.45855400000001, 35.097335 ], "pop" : 859, "state" : "AR" } +{ "_id" : "72347", "city" : "HICKORY RIDGE", "loc" : [ -90.982283, 35.399457 ], "pop" : 754, "state" : "AR" } +{ "_id" : "72348", "city" : "HUGHES", "loc" : [ -90.474142, 34.945416 ], "pop" : 2477, "state" : "AR" } +{ "_id" : "72350", "city" : "JOINER", "loc" : [ -90.14779, 35.505239 ], "pop" : 986, "state" : "AR" } +{ "_id" : "72351", "city" : "KEISER", "loc" : [ -90.096171, 35.678626 ], "pop" : 980, "state" : "AR" } +{ "_id" : "72354", "city" : "LEPANTO", "loc" : [ -90.335883, 35.606909 ], "pop" : 2023, "state" : "AR" } +{ "_id" : "72355", "city" : "LEXA", "loc" : [ -90.78532, 34.672694 ], "pop" : 903, "state" : "AR" } +{ "_id" : "72358", "city" : "LUXORA", "loc" : [ -89.92204, 35.760786 ], "pop" : 1593, "state" : "AR" } +{ "_id" : "72360", "city" : "MARIANNA", "loc" : [ -90.77852, 34.775929 ], "pop" : 8668, "state" : "AR" } +{ "_id" : "72364", "city" : "MARION", "loc" : [ -90.198908, 35.2077 ], "pop" : 7891, "state" : "AR" } +{ "_id" : "72365", "city" : "MARKED TREE", "loc" : [ -90.419387, 35.534933 ], "pop" : 5144, "state" : "AR" } +{ "_id" : "72366", "city" : "MARVELL", "loc" : [ -90.941322, 34.548541 ], "pop" : 2733, "state" : "AR" } +{ "_id" : "72367", "city" : "MELLWOOD", "loc" : [ -91.008589, 34.220032 ], "pop" : 61, "state" : "AR" } +{ "_id" : "72368", "city" : "MORO", "loc" : [ -91.00602600000001, 34.802953 ], "pop" : 1571, "state" : "AR" } +{ "_id" : "72369", "city" : "ONEIDA", "loc" : [ -90.82604499999999, 34.405267 ], "pop" : 918, "state" : "AR" } +{ "_id" : "72370", "city" : "OSCEOLA", "loc" : [ -89.979764, 35.701864 ], "pop" : 10119, "state" : "AR" } +{ "_id" : "72372", "city" : "PALESTINE", "loc" : [ -90.904929, 34.966346 ], "pop" : 1371, "state" : "AR" } +{ "_id" : "72373", "city" : "PARKIN", "loc" : [ -90.556417, 35.258557 ], "pop" : 2437, "state" : "AR" } +{ "_id" : "72374", "city" : "POPLAR GROVE", "loc" : [ -90.881274, 34.539397 ], "pop" : 1466, "state" : "AR" } +{ "_id" : "72376", "city" : "PROCTOR", "loc" : [ -90.255026, 35.083396 ], "pop" : 953, "state" : "AR" } +{ "_id" : "72379", "city" : "SNOW LAKE", "loc" : [ -91.00708299999999, 34.066466 ], "pop" : 225, "state" : "AR" } +{ "_id" : "72381", "city" : "TOMATO", "loc" : [ -89.787092, 35.806666 ], "pop" : 0, "state" : "AR" } +{ "_id" : "72384", "city" : "TURRELL", "loc" : [ -90.262979, 35.296936 ], "pop" : 1308, "state" : "AR" } +{ "_id" : "72386", "city" : "TYRONZA", "loc" : [ -90.351944, 35.486477 ], "pop" : 1230, "state" : "AR" } +{ "_id" : "72390", "city" : "WEST HELENA", "loc" : [ -90.65453100000001, 34.549635 ], "pop" : 12265, "state" : "AR" } +{ "_id" : "72392", "city" : "WHEATLEY", "loc" : [ -91.108645, 34.920703 ], "pop" : 542, "state" : "AR" } +{ "_id" : "72394", "city" : "WIDENER", "loc" : [ -90.629313, 35.059167 ], "pop" : 1145, "state" : "AR" } +{ "_id" : "72395", "city" : "WILSON", "loc" : [ -90.042749, 35.566004 ], "pop" : 1185, "state" : "AR" } +{ "_id" : "72396", "city" : "WYNNE", "loc" : [ -90.79303, 35.233036 ], "pop" : 13908, "state" : "AR" } +{ "_id" : "72397", "city" : "FAIR OAKS", "loc" : [ -91.014304, 35.236817 ], "pop" : 285, "state" : "AR" } +{ "_id" : "72401", "city" : "JONESBORO", "loc" : [ -90.69652600000001, 35.833016 ], "pop" : 53532, "state" : "AR" } +{ "_id" : "72410", "city" : "ALICIA", "loc" : [ -91.081003, 35.942327 ], "pop" : 725, "state" : "AR" } +{ "_id" : "72411", "city" : "BAY", "loc" : [ -90.550658, 35.74559 ], "pop" : 2527, "state" : "AR" } +{ "_id" : "72412", "city" : "BEECH GROVE", "loc" : [ -90.618084, 36.183172 ], "pop" : 292, "state" : "AR" } +{ "_id" : "72413", "city" : "BIGGERS", "loc" : [ -90.78446700000001, 36.342978 ], "pop" : 1060, "state" : "AR" } +{ "_id" : "72414", "city" : "BLACK OAK", "loc" : [ -90.35422699999999, 35.835851 ], "pop" : 518, "state" : "AR" } +{ "_id" : "72415", "city" : "BLACK ROCK", "loc" : [ -91.11762899999999, 36.114874 ], "pop" : 1190, "state" : "AR" } +{ "_id" : "72416", "city" : "BONO", "loc" : [ -90.78475299999999, 35.908592 ], "pop" : 3030, "state" : "AR" } +{ "_id" : "72417", "city" : "BROOKLAND", "loc" : [ -90.576228, 35.91647 ], "pop" : 1896, "state" : "AR" } +{ "_id" : "72419", "city" : "CARAWAY", "loc" : [ -90.335797, 35.758951 ], "pop" : 2214, "state" : "AR" } +{ "_id" : "72421", "city" : "CASH", "loc" : [ -90.941007, 35.830145 ], "pop" : 628, "state" : "AR" } +{ "_id" : "72422", "city" : "CORNING", "loc" : [ -90.58702, 36.415532 ], "pop" : 5469, "state" : "AR" } +{ "_id" : "72424", "city" : "DATTO", "loc" : [ -90.723117, 36.389685 ], "pop" : 308, "state" : "AR" } +{ "_id" : "72425", "city" : "DELAPLAINE", "loc" : [ -90.734482, 36.199485 ], "pop" : 719, "state" : "AR" } +{ "_id" : "72426", "city" : "DELL", "loc" : [ -90.035449, 35.850118 ], "pop" : 832, "state" : "AR" } +{ "_id" : "72428", "city" : "ETOWAH", "loc" : [ -90.218172, 35.714707 ], "pop" : 1330, "state" : "AR" } +{ "_id" : "72429", "city" : "FISHER", "loc" : [ -90.955001, 35.513956 ], "pop" : 907, "state" : "AR" } +{ "_id" : "72430", "city" : "GREENWAY", "loc" : [ -90.225257, 36.334766 ], "pop" : 529, "state" : "AR" } +{ "_id" : "72432", "city" : "HARRISBURG", "loc" : [ -90.70375199999999, 35.572222 ], "pop" : 5961, "state" : "AR" } +{ "_id" : "72433", "city" : "HOXIE", "loc" : [ -90.971504, 36.032573 ], "pop" : 3436, "state" : "AR" } +{ "_id" : "72434", "city" : "IMBODEN", "loc" : [ -91.18544199999999, 36.19763 ], "pop" : 889, "state" : "AR" } +{ "_id" : "72435", "city" : "KNOBEL", "loc" : [ -90.599048, 36.317647 ], "pop" : 518, "state" : "AR" } +{ "_id" : "72436", "city" : "LAFE", "loc" : [ -90.506973, 36.21547 ], "pop" : 1007, "state" : "AR" } +{ "_id" : "72437", "city" : "LAKE CITY", "loc" : [ -90.44232700000001, 35.81715 ], "pop" : 2056, "state" : "AR" } +{ "_id" : "72438", "city" : "LEACHVILLE", "loc" : [ -90.195488, 35.933216 ], "pop" : 2810, "state" : "AR" } +{ "_id" : "72440", "city" : "LYNN", "loc" : [ -91.254588, 36.016639 ], "pop" : 1032, "state" : "AR" } +{ "_id" : "72441", "city" : "MC DOUGAL", "loc" : [ -90.394093, 36.379909 ], "pop" : 1552, "state" : "AR" } +{ "_id" : "72442", "city" : "ROSELAND", "loc" : [ -90.180252, 35.874885 ], "pop" : 3855, "state" : "AR" } +{ "_id" : "72443", "city" : "MARMADUKE", "loc" : [ -90.38368, 36.195117 ], "pop" : 2082, "state" : "AR" } +{ "_id" : "72444", "city" : "MAYNARD", "loc" : [ -90.874921, 36.438563 ], "pop" : 1616, "state" : "AR" } +{ "_id" : "72445", "city" : "MINTURN", "loc" : [ -91.033704, 35.976096 ], "pop" : 364, "state" : "AR" } +{ "_id" : "72447", "city" : "MONETTE", "loc" : [ -90.343658, 35.900168 ], "pop" : 2008, "state" : "AR" } +{ "_id" : "72449", "city" : "O KEAN", "loc" : [ -90.82406899999999, 36.179672 ], "pop" : 420, "state" : "AR" } +{ "_id" : "72450", "city" : "PARAGOULD", "loc" : [ -90.525093, 36.060033 ], "pop" : 27704, "state" : "AR" } +{ "_id" : "72453", "city" : "PEACH ORCHARD", "loc" : [ -90.67021699999999, 36.283045 ], "pop" : 332, "state" : "AR" } +{ "_id" : "72454", "city" : "PIGGOTT", "loc" : [ -90.19261, 36.386993 ], "pop" : 4818, "state" : "AR" } +{ "_id" : "72455", "city" : "POCAHONTAS", "loc" : [ -90.996782, 36.282876 ], "pop" : 12280, "state" : "AR" } +{ "_id" : "72456", "city" : "POLLARD", "loc" : [ -90.27512299999999, 36.431725 ], "pop" : 553, "state" : "AR" } +{ "_id" : "72457", "city" : "PORTIA", "loc" : [ -91.068004, 36.080699 ], "pop" : 646, "state" : "AR" } +{ "_id" : "72458", "city" : "POWHATAN", "loc" : [ -91.148214, 36.080044 ], "pop" : 476, "state" : "AR" } +{ "_id" : "72459", "city" : "RAVENDEN", "loc" : [ -91.25933999999999, 36.202863 ], "pop" : 1137, "state" : "AR" } +{ "_id" : "72460", "city" : "RAVENDEN SPRINGS", "loc" : [ -91.209433, 36.310384 ], "pop" : 944, "state" : "AR" } +{ "_id" : "72461", "city" : "RECTOR", "loc" : [ -90.270201, 36.267177 ], "pop" : 3515, "state" : "AR" } +{ "_id" : "72464", "city" : "SAINT FRANCIS", "loc" : [ -90.144991, 36.454771 ], "pop" : 227, "state" : "AR" } +{ "_id" : "72465", "city" : "SEDGWICK", "loc" : [ -90.880099, 35.985965 ], "pop" : 503, "state" : "AR" } +{ "_id" : "72466", "city" : "SMITHVILLE", "loc" : [ -91.274456, 36.090815 ], "pop" : 427, "state" : "AR" } +{ "_id" : "72467", "city" : "STATE UNIVERSITY", "loc" : [ -90.454245, 35.914894 ], "pop" : 544, "state" : "AR" } +{ "_id" : "72469", "city" : "CALAMINE", "loc" : [ -91.375398, 35.972622 ], "pop" : 1078, "state" : "AR" } +{ "_id" : "72470", "city" : "SUCCESS", "loc" : [ -90.728128, 36.453615 ], "pop" : 286, "state" : "AR" } +{ "_id" : "72471", "city" : "SWIFTON", "loc" : [ -91.126358, 35.827366 ], "pop" : 1172, "state" : "AR" } +{ "_id" : "72472", "city" : "PAYNEWAY", "loc" : [ -90.518738, 35.668914 ], "pop" : 8179, "state" : "AR" } +{ "_id" : "72473", "city" : "TUCKERMAN", "loc" : [ -91.20034699999999, 35.730678 ], "pop" : 2564, "state" : "AR" } +{ "_id" : "72476", "city" : "COLLEGE CITY", "loc" : [ -90.952809, 36.077814 ], "pop" : 5794, "state" : "AR" } +{ "_id" : "72478", "city" : "WARM SPRINGS", "loc" : [ -91.038707, 36.467531 ], "pop" : 238, "state" : "AR" } +{ "_id" : "72479", "city" : "WEINER", "loc" : [ -90.928928, 35.629052 ], "pop" : 1223, "state" : "AR" } +{ "_id" : "72482", "city" : "WILLIFORD", "loc" : [ -91.379226, 36.245335 ], "pop" : 349, "state" : "AR" } +{ "_id" : "72501", "city" : "BATESVILLE", "loc" : [ -91.63518999999999, 35.782614 ], "pop" : 19976, "state" : "AR" } +{ "_id" : "72512", "city" : "HORSESHOE BEND", "loc" : [ -91.755334, 36.202502 ], "pop" : 3088, "state" : "AR" } +{ "_id" : "72513", "city" : "AGNOS", "loc" : [ -91.61074600000001, 36.219732 ], "pop" : 1433, "state" : "AR" } +{ "_id" : "72515", "city" : "BEXAR", "loc" : [ -91.985998, 36.306103 ], "pop" : 325, "state" : "AR" } +{ "_id" : "72516", "city" : "BOSWELL", "loc" : [ -92.044307, 36.01084 ], "pop" : 321, "state" : "AR" } +{ "_id" : "72517", "city" : "BROCKWELL", "loc" : [ -91.951308, 36.135755 ], "pop" : 548, "state" : "AR" } +{ "_id" : "72519", "city" : "JORDAN", "loc" : [ -92.145494, 36.144771 ], "pop" : 2019, "state" : "AR" } +{ "_id" : "72520", "city" : "CAMP", "loc" : [ -91.72616600000001, 36.402531 ], "pop" : 401, "state" : "AR" } +{ "_id" : "72521", "city" : "CAVE CITY", "loc" : [ -91.544432, 35.951684 ], "pop" : 2111, "state" : "AR" } +{ "_id" : "72522", "city" : "CHARLOTTE", "loc" : [ -91.39621699999999, 35.833393 ], "pop" : 797, "state" : "AR" } +{ "_id" : "72523", "city" : "CONCORD", "loc" : [ -91.833339, 35.641355 ], "pop" : 1168, "state" : "AR" } +{ "_id" : "72524", "city" : "CORD", "loc" : [ -91.33745500000001, 35.81844 ], "pop" : 205, "state" : "AR" } +{ "_id" : "72526", "city" : "CUSHMAN", "loc" : [ -91.776455, 35.869663 ], "pop" : 336, "state" : "AR" } +{ "_id" : "72527", "city" : "DESHA", "loc" : [ -91.678287, 35.731524 ], "pop" : 876, "state" : "AR" } +{ "_id" : "72528", "city" : "DOLPH", "loc" : [ -92.11766, 36.222878 ], "pop" : 348, "state" : "AR" } +{ "_id" : "72529", "city" : "CHEROKEE VILLAGE", "loc" : [ -91.528075, 36.30114 ], "pop" : 4523, "state" : "AR" } +{ "_id" : "72530", "city" : "DRASCO", "loc" : [ -91.939818, 35.661606 ], "pop" : 886, "state" : "AR" } +{ "_id" : "72531", "city" : "ELIZABETH", "loc" : [ -92.093366, 36.323776 ], "pop" : 390, "state" : "AR" } +{ "_id" : "72532", "city" : "EVENING SHADE", "loc" : [ -91.59801400000001, 36.085532 ], "pop" : 1356, "state" : "AR" } +{ "_id" : "72533", "city" : "FIFTY SIX", "loc" : [ -92.218169, 35.991958 ], "pop" : 346, "state" : "AR" } +{ "_id" : "72534", "city" : "FLORAL", "loc" : [ -91.734101, 35.602337 ], "pop" : 940, "state" : "AR" } +{ "_id" : "72536", "city" : "FRANKLIN", "loc" : [ -91.80959199999999, 36.129093 ], "pop" : 364, "state" : "AR" } +{ "_id" : "72537", "city" : "GAMALIEL", "loc" : [ -92.228447, 36.461794 ], "pop" : 301, "state" : "AR" } +{ "_id" : "72538", "city" : "GEPP", "loc" : [ -92.099507, 36.436443 ], "pop" : 351, "state" : "AR" } +{ "_id" : "72539", "city" : "GLENCOE", "loc" : [ -91.76948299999999, 36.288962 ], "pop" : 514, "state" : "AR" } +{ "_id" : "72540", "city" : "GUION", "loc" : [ -91.934287, 35.960135 ], "pop" : 226, "state" : "AR" } +{ "_id" : "72542", "city" : "HARDY", "loc" : [ -91.411027, 36.322746 ], "pop" : 2473, "state" : "AR" } +{ "_id" : "72543", "city" : "HEBER SPRINGS", "loc" : [ -92.03921099999999, 35.510278 ], "pop" : 8709, "state" : "AR" } +{ "_id" : "72544", "city" : "HENDERSON", "loc" : [ -92.26925300000001, 36.356829 ], "pop" : 3441, "state" : "AR" } +{ "_id" : "72546", "city" : "IDA", "loc" : [ -91.930081, 35.594326 ], "pop" : 539, "state" : "AR" } +{ "_id" : "72550", "city" : "LOCUST GROVE", "loc" : [ -91.741443, 35.717705 ], "pop" : 750, "state" : "AR" } +{ "_id" : "72553", "city" : "MAGNESS", "loc" : [ -91.485041, 35.710062 ], "pop" : 413, "state" : "AR" } +{ "_id" : "72554", "city" : "MAMMOTH SPRING", "loc" : [ -91.575712, 36.407648 ], "pop" : 4075, "state" : "AR" } +{ "_id" : "72555", "city" : "MARCELLA", "loc" : [ -91.941891, 35.749654 ], "pop" : 535, "state" : "AR" } +{ "_id" : "72556", "city" : "ZION", "loc" : [ -91.905196, 36.059958 ], "pop" : 1880, "state" : "AR" } +{ "_id" : "72557", "city" : "MOKO", "loc" : [ -91.85866300000001, 36.468902 ], "pop" : 321, "state" : "AR" } +{ "_id" : "72560", "city" : "HANOVER", "loc" : [ -92.114762, 35.865769 ], "pop" : 5553, "state" : "AR" } +{ "_id" : "72561", "city" : "MOUNT PLEASANT", "loc" : [ -91.78501300000001, 35.975909 ], "pop" : 1264, "state" : "AR" } +{ "_id" : "72562", "city" : "NEWARK", "loc" : [ -91.439395, 35.71183 ], "pop" : 1816, "state" : "AR" } +{ "_id" : "72564", "city" : "OIL TROUGH", "loc" : [ -91.470305, 35.613147 ], "pop" : 674, "state" : "AR" } +{ "_id" : "72565", "city" : "OXFORD", "loc" : [ -91.925849, 36.211408 ], "pop" : 738, "state" : "AR" } +{ "_id" : "72566", "city" : "PINEVILLE", "loc" : [ -92.107299, 36.167704 ], "pop" : 356, "state" : "AR" } +{ "_id" : "72567", "city" : "PLEASANT GROVE", "loc" : [ -91.931905, 35.842349 ], "pop" : 772, "state" : "AR" } +{ "_id" : "72568", "city" : "PLEASANT PLAINS", "loc" : [ -91.632043, 35.589301 ], "pop" : 1790, "state" : "AR" } +{ "_id" : "72569", "city" : "POUGHKEEPSIE", "loc" : [ -91.45157500000001, 36.071526 ], "pop" : 601, "state" : "AR" } +{ "_id" : "72571", "city" : "ROSIE", "loc" : [ -91.534003, 35.663816 ], "pop" : 438, "state" : "AR" } +{ "_id" : "72572", "city" : "SAFFELL", "loc" : [ -91.297753, 35.917957 ], "pop" : 379, "state" : "AR" } +{ "_id" : "72573", "city" : "SAGE", "loc" : [ -91.824569, 36.042476 ], "pop" : 256, "state" : "AR" } +{ "_id" : "72575", "city" : "SALADO", "loc" : [ -91.59792400000001, 35.703493 ], "pop" : 818, "state" : "AR" } +{ "_id" : "72576", "city" : "BYRON", "loc" : [ -91.836321, 36.365401 ], "pop" : 2561, "state" : "AR" } +{ "_id" : "72577", "city" : "SIDNEY", "loc" : [ -91.634593, 35.991554 ], "pop" : 743, "state" : "AR" } +{ "_id" : "72578", "city" : "STURKIE", "loc" : [ -91.98991700000001, 36.463869 ], "pop" : 168, "state" : "AR" } +{ "_id" : "72579", "city" : "SULPHUR ROCK", "loc" : [ -91.507333, 35.754466 ], "pop" : 756, "state" : "AR" } +{ "_id" : "72581", "city" : "TUMBLING SHOALS", "loc" : [ -91.970359, 35.546985 ], "pop" : 768, "state" : "AR" } +{ "_id" : "72583", "city" : "VIOLA", "loc" : [ -91.99319800000001, 36.392429 ], "pop" : 823, "state" : "AR" } +{ "_id" : "72584", "city" : "VIOLET HILL", "loc" : [ -91.847064, 36.162966 ], "pop" : 220, "state" : "AR" } +{ "_id" : "72585", "city" : "WIDEMAN", "loc" : [ -92.001796, 36.198739 ], "pop" : 89, "state" : "AR" } +{ "_id" : "72587", "city" : "WISEMAN", "loc" : [ -91.84949899999999, 36.228022 ], "pop" : 26, "state" : "AR" } +{ "_id" : "72601", "city" : "HARRISON", "loc" : [ -93.106162, 36.241707 ], "pop" : 23009, "state" : "AR" } +{ "_id" : "72610", "city" : "ALCO", "loc" : [ -92.380753, 35.894511 ], "pop" : 172, "state" : "AR" } +{ "_id" : "72611", "city" : "ALPENA", "loc" : [ -93.2792, 36.299768 ], "pop" : 780, "state" : "AR" } +{ "_id" : "72612", "city" : "BASS", "loc" : [ -92.999832, 35.892225 ], "pop" : 261, "state" : "AR" } +{ "_id" : "72616", "city" : "BERRYVILLE", "loc" : [ -93.558725, 36.351908 ], "pop" : 6821, "state" : "AR" } +{ "_id" : "72617", "city" : "BIG FLAT", "loc" : [ -92.39168100000001, 36.006824 ], "pop" : 244, "state" : "AR" } +{ "_id" : "72618", "city" : "BRUNO", "loc" : [ -92.763651, 36.124617 ], "pop" : 236, "state" : "AR" } +{ "_id" : "72619", "city" : "BULL SHOALS", "loc" : [ -92.593765, 36.370958 ], "pop" : 1967, "state" : "AR" } +{ "_id" : "72623", "city" : "CLARKRIDGE", "loc" : [ -92.35159, 36.443311 ], "pop" : 1031, "state" : "AR" } +{ "_id" : "72624", "city" : "COMPTON", "loc" : [ -93.30990300000001, 36.097941 ], "pop" : 233, "state" : "AR" } +{ "_id" : "72626", "city" : "COTTER", "loc" : [ -92.532787, 36.280378 ], "pop" : 1044, "state" : "AR" } +{ "_id" : "72628", "city" : "DEER", "loc" : [ -93.31738799999999, 35.852982 ], "pop" : 1378, "state" : "AR" } +{ "_id" : "72629", "city" : "DENNARD", "loc" : [ -92.557456, 35.725236 ], "pop" : 1370, "state" : "AR" } +{ "_id" : "72632", "city" : "EUREKA SPRINGS", "loc" : [ -93.737915, 36.417465 ], "pop" : 5444, "state" : "AR" } +{ "_id" : "72633", "city" : "EVERTON", "loc" : [ -92.91498900000001, 36.153366 ], "pop" : 436, "state" : "AR" } +{ "_id" : "72634", "city" : "FLIPPIN", "loc" : [ -92.577995, 36.268219 ], "pop" : 2784, "state" : "AR" } +{ "_id" : "72635", "city" : "GASSVILLE", "loc" : [ -92.473637, 36.317525 ], "pop" : 3568, "state" : "AR" } +{ "_id" : "72638", "city" : "GREEN FOREST", "loc" : [ -93.40587499999999, 36.322408 ], "pop" : 5430, "state" : "AR" } +{ "_id" : "72639", "city" : "HARRIET", "loc" : [ -92.50055, 35.974187 ], "pop" : 950, "state" : "AR" } +{ "_id" : "72640", "city" : "HASTY", "loc" : [ -93.04596600000001, 36.015229 ], "pop" : 219, "state" : "AR" } +{ "_id" : "72641", "city" : "JASPER", "loc" : [ -93.20477099999999, 36.003798 ], "pop" : 1632, "state" : "AR" } +{ "_id" : "72642", "city" : "LAKEVIEW", "loc" : [ -92.50441600000001, 36.397308 ], "pop" : 2815, "state" : "AR" } +{ "_id" : "72644", "city" : "LEAD HILL", "loc" : [ -92.930194, 36.430886 ], "pop" : 1818, "state" : "AR" } +{ "_id" : "72645", "city" : "LESLIE", "loc" : [ -92.566293, 35.82716 ], "pop" : 1768, "state" : "AR" } +{ "_id" : "72648", "city" : "DOGPATCH", "loc" : [ -93.144822, 36.095121 ], "pop" : 608, "state" : "AR" } +{ "_id" : "72650", "city" : "MARSHALL", "loc" : [ -92.640203, 35.926697 ], "pop" : 2882, "state" : "AR" } +{ "_id" : "72651", "city" : "MIDWAY", "loc" : [ -92.431398, 36.290454 ], "pop" : 408, "state" : "AR" } +{ "_id" : "72653", "city" : "MOUNTAIN HOME", "loc" : [ -92.375337, 36.331153 ], "pop" : 16131, "state" : "AR" } +{ "_id" : "72655", "city" : "MOUNT JUDEA", "loc" : [ -93.082391, 35.834674 ], "pop" : 665, "state" : "AR" } +{ "_id" : "72657", "city" : "TIMBO", "loc" : [ -92.25253600000001, 35.896338 ], "pop" : 596, "state" : "AR" } +{ "_id" : "72658", "city" : "NORFORK", "loc" : [ -92.273011, 36.206571 ], "pop" : 1824, "state" : "AR" } +{ "_id" : "72660", "city" : "OAK GROVE", "loc" : [ -93.432129, 36.461347 ], "pop" : 956, "state" : "AR" } +{ "_id" : "72661", "city" : "OAKLAND", "loc" : [ -92.583187, 36.444227 ], "pop" : 544, "state" : "AR" } +{ "_id" : "72662", "city" : "OMAHA", "loc" : [ -93.18875300000001, 36.46123 ], "pop" : 1251, "state" : "AR" } +{ "_id" : "72663", "city" : "ONIA", "loc" : [ -92.345859, 35.940339 ], "pop" : 444, "state" : "AR" } +{ "_id" : "72666", "city" : "PARTHENON", "loc" : [ -93.267776, 35.940836 ], "pop" : 518, "state" : "AR" } +{ "_id" : "72668", "city" : "PEEL", "loc" : [ -92.776143, 36.444374 ], "pop" : 731, "state" : "AR" } +{ "_id" : "72669", "city" : "PINDALL", "loc" : [ -92.886409, 36.067479 ], "pop" : 499, "state" : "AR" } +{ "_id" : "72670", "city" : "PONCA", "loc" : [ -93.401985, 36.066225 ], "pop" : 435, "state" : "AR" } +{ "_id" : "72675", "city" : "SAINT JOE", "loc" : [ -92.792828, 35.987707 ], "pop" : 1196, "state" : "AR" } +{ "_id" : "72679", "city" : "TILLY", "loc" : [ -92.84420900000001, 35.6976 ], "pop" : 118, "state" : "AR" } +{ "_id" : "72680", "city" : "NEWNATA", "loc" : [ -92.337929, 35.855318 ], "pop" : 397, "state" : "AR" } +{ "_id" : "72682", "city" : "VALLEY SPRINGS", "loc" : [ -92.97993700000001, 36.146823 ], "pop" : 1050, "state" : "AR" } +{ "_id" : "72683", "city" : "VENDOR", "loc" : [ -93.100815, 35.948062 ], "pop" : 784, "state" : "AR" } +{ "_id" : "72685", "city" : "WESTERN GROVE", "loc" : [ -92.971649, 36.082994 ], "pop" : 933, "state" : "AR" } +{ "_id" : "72686", "city" : "WITTS SPRINGS", "loc" : [ -92.815518, 35.785514 ], "pop" : 546, "state" : "AR" } +{ "_id" : "72687", "city" : "YELLVILLE", "loc" : [ -92.72447200000001, 36.225322 ], "pop" : 5695, "state" : "AR" } +{ "_id" : "72701", "city" : "FAYETTEVILLE", "loc" : [ -94.153395, 36.052045 ], "pop" : 28372, "state" : "AR" } +{ "_id" : "72703", "city" : "FAYETTEVILLE", "loc" : [ -94.17162999999999, 36.099183 ], "pop" : 24649, "state" : "AR" } +{ "_id" : "72712", "city" : "BENTONVILLE", "loc" : [ -94.22242, 36.357703 ], "pop" : 14439, "state" : "AR" } +{ "_id" : "72714", "city" : "BELLA VISTA", "loc" : [ -94.251969, 36.465086 ], "pop" : 8645, "state" : "AR" } +{ "_id" : "72716", "city" : "WAL-MART INC", "loc" : [ -94.181483, 36.326554 ], "pop" : 459, "state" : "AR" } +{ "_id" : "72717", "city" : "CANEHILL", "loc" : [ -94.3862, 35.910992 ], "pop" : 781, "state" : "AR" } +{ "_id" : "72718", "city" : "CAVE SPRINGS", "loc" : [ -94.207836, 36.266771 ], "pop" : 1629, "state" : "AR" } +{ "_id" : "72719", "city" : "CENTERTON", "loc" : [ -94.30891, 36.366993 ], "pop" : 1797, "state" : "AR" } +{ "_id" : "72721", "city" : "COMBS", "loc" : [ -93.82521800000001, 35.848297 ], "pop" : 491, "state" : "AR" } +{ "_id" : "72722", "city" : "DECATUR", "loc" : [ -94.453411, 36.334749 ], "pop" : 1633, "state" : "AR" } +{ "_id" : "72727", "city" : "ELKINS", "loc" : [ -94.007323, 36.017719 ], "pop" : 1767, "state" : "AR" } +{ "_id" : "72729", "city" : "EVANSVILLE", "loc" : [ -94.478936, 35.819345 ], "pop" : 380, "state" : "AR" } +{ "_id" : "72730", "city" : "FARMINGTON", "loc" : [ -94.253871, 36.043635 ], "pop" : 3495, "state" : "AR" } +{ "_id" : "72732", "city" : "GARFIELD", "loc" : [ -93.95119699999999, 36.428817 ], "pop" : 1389, "state" : "AR" } +{ "_id" : "72733", "city" : "GATEWAY", "loc" : [ -93.935016, 36.485751 ], "pop" : 581, "state" : "AR" } +{ "_id" : "72734", "city" : "GENTRY", "loc" : [ -94.475131, 36.26516 ], "pop" : 5145, "state" : "AR" } +{ "_id" : "72735", "city" : "GOSHEN", "loc" : [ -93.987262, 36.107523 ], "pop" : 1639, "state" : "AR" } +{ "_id" : "72736", "city" : "GRAVETTE", "loc" : [ -94.477862, 36.415513 ], "pop" : 3508, "state" : "AR" } +{ "_id" : "72738", "city" : "HINDSVILLE", "loc" : [ -93.863339, 36.142206 ], "pop" : 1024, "state" : "AR" } +{ "_id" : "72739", "city" : "HIWASSE", "loc" : [ -94.338993, 36.441589 ], "pop" : 1188, "state" : "AR" } +{ "_id" : "72740", "city" : "HUNTSVILLE", "loc" : [ -93.72789299999999, 36.104348 ], "pop" : 7021, "state" : "AR" } +{ "_id" : "72742", "city" : "KINGSTON", "loc" : [ -93.504357, 36.04845 ], "pop" : 566, "state" : "AR" } +{ "_id" : "72744", "city" : "LINCOLN", "loc" : [ -94.42724, 35.956931 ], "pop" : 3129, "state" : "AR" } +{ "_id" : "72745", "city" : "LOWELL", "loc" : [ -94.082725, 36.243318 ], "pop" : 5077, "state" : "AR" } +{ "_id" : "72747", "city" : "MAYSVILLE", "loc" : [ -94.581278, 36.401062 ], "pop" : 214, "state" : "AR" } +{ "_id" : "72749", "city" : "MORROW", "loc" : [ -94.425793, 35.85373 ], "pop" : 615, "state" : "AR" } +{ "_id" : "72751", "city" : "PEA RIDGE", "loc" : [ -94.118026, 36.453884 ], "pop" : 3584, "state" : "AR" } +{ "_id" : "72752", "city" : "PETTIGREW", "loc" : [ -93.61807899999999, 35.834562 ], "pop" : 422, "state" : "AR" } +{ "_id" : "72753", "city" : "PRAIRIE GROVE", "loc" : [ -94.316861, 35.991809 ], "pop" : 4105, "state" : "AR" } +{ "_id" : "72756", "city" : "ROGERS", "loc" : [ -94.114784, 36.336316 ], "pop" : 34081, "state" : "AR" } +{ "_id" : "72760", "city" : "SAINT PAUL", "loc" : [ -93.73474299999999, 35.849576 ], "pop" : 608, "state" : "AR" } +{ "_id" : "72761", "city" : "SILOAM SPRINGS", "loc" : [ -94.528036, 36.179969 ], "pop" : 11677, "state" : "AR" } +{ "_id" : "72762", "city" : "SPRINGDALE", "loc" : [ -94.176216, 36.183521 ], "pop" : 20104, "state" : "AR" } +{ "_id" : "72764", "city" : "BETHEL HEIGHTS", "loc" : [ -94.104682, 36.177918 ], "pop" : 17792, "state" : "AR" } +{ "_id" : "72768", "city" : "SULPHUR SPRINGS", "loc" : [ -94.45206899999999, 36.479434 ], "pop" : 982, "state" : "AR" } +{ "_id" : "72769", "city" : "SUMMERS", "loc" : [ -94.500027, 36.013827 ], "pop" : 1013, "state" : "AR" } +{ "_id" : "72773", "city" : "WESLEY", "loc" : [ -93.911478, 35.957264 ], "pop" : 1307, "state" : "AR" } +{ "_id" : "72774", "city" : "WEST FORK", "loc" : [ -94.230375, 35.908153 ], "pop" : 4473, "state" : "AR" } +{ "_id" : "72776", "city" : "WITTER", "loc" : [ -93.621, 35.935583 ], "pop" : 179, "state" : "AR" } +{ "_id" : "72801", "city" : "RUSSELLVILLE", "loc" : [ -93.13147600000001, 35.284208 ], "pop" : 25169, "state" : "AR" } +{ "_id" : "72820", "city" : "ALIX", "loc" : [ -93.726416, 35.430767 ], "pop" : 488, "state" : "AR" } +{ "_id" : "72821", "city" : "ALTUS", "loc" : [ -93.811494, 35.404873 ], "pop" : 2292, "state" : "AR" } +{ "_id" : "72823", "city" : "ATKINS", "loc" : [ -92.95069599999999, 35.244948 ], "pop" : 4835, "state" : "AR" } +{ "_id" : "72824", "city" : "BELLEVILLE", "loc" : [ -93.45181700000001, 35.103762 ], "pop" : 988, "state" : "AR" } +{ "_id" : "72826", "city" : "BLUE MOUNTAIN", "loc" : [ -93.716797, 35.130386 ], "pop" : 200, "state" : "AR" } +{ "_id" : "72827", "city" : "BLUFFTON", "loc" : [ -93.59194599999999, 34.901635 ], "pop" : 208, "state" : "AR" } +{ "_id" : "72828", "city" : "BRIGGSVILLE", "loc" : [ -93.515748, 34.916065 ], "pop" : 164, "state" : "AR" } +{ "_id" : "72830", "city" : "CLARKSVILLE", "loc" : [ -93.491056, 35.490763 ], "pop" : 11304, "state" : "AR" } +{ "_id" : "72832", "city" : "COAL HILL", "loc" : [ -93.67203000000001, 35.437117 ], "pop" : 1179, "state" : "AR" } +{ "_id" : "72833", "city" : "DANVILLE", "loc" : [ -93.392933, 35.049541 ], "pop" : 3292, "state" : "AR" } +{ "_id" : "72834", "city" : "DARDANELLE", "loc" : [ -93.187316, 35.195507 ], "pop" : 8281, "state" : "AR" } +{ "_id" : "72835", "city" : "DELAWARE", "loc" : [ -93.346152, 35.278005 ], "pop" : 645, "state" : "AR" } +{ "_id" : "72837", "city" : "DOVER", "loc" : [ -93.135526, 35.407356 ], "pop" : 5687, "state" : "AR" } +{ "_id" : "72838", "city" : "GRAVELLY", "loc" : [ -93.680249, 34.888123 ], "pop" : 150, "state" : "AR" } +{ "_id" : "72839", "city" : "HAGARVILLE", "loc" : [ -93.344256, 35.523291 ], "pop" : 584, "state" : "AR" } +{ "_id" : "72840", "city" : "HARTMAN", "loc" : [ -93.61419600000001, 35.443583 ], "pop" : 846, "state" : "AR" } +{ "_id" : "72841", "city" : "HARVEY", "loc" : [ -93.752538, 34.867912 ], "pop" : 243, "state" : "AR" } +{ "_id" : "72842", "city" : "WAVELAND", "loc" : [ -93.576719, 35.111845 ], "pop" : 1294, "state" : "AR" } +{ "_id" : "72843", "city" : "HECTOR", "loc" : [ -92.965559, 35.40574 ], "pop" : 5067, "state" : "AR" } +{ "_id" : "72845", "city" : "KNOXVILLE", "loc" : [ -93.361797, 35.374897 ], "pop" : 848, "state" : "AR" } +{ "_id" : "72846", "city" : "LAMAR", "loc" : [ -93.35515700000001, 35.434868 ], "pop" : 2905, "state" : "AR" } +{ "_id" : "72847", "city" : "LONDON", "loc" : [ -93.238907, 35.337017 ], "pop" : 2396, "state" : "AR" } +{ "_id" : "72851", "city" : "NEW BLAINE", "loc" : [ -93.44457, 35.318912 ], "pop" : 891, "state" : "AR" } +{ "_id" : "72852", "city" : "OARK", "loc" : [ -93.558531, 35.709454 ], "pop" : 221, "state" : "AR" } +{ "_id" : "72853", "city" : "OLA", "loc" : [ -93.21356, 35.03091 ], "pop" : 1823, "state" : "AR" } +{ "_id" : "72854", "city" : "OZONE", "loc" : [ -93.43111, 35.657478 ], "pop" : 334, "state" : "AR" } +{ "_id" : "72855", "city" : "PARIS", "loc" : [ -93.72646899999999, 35.294149 ], "pop" : 5718, "state" : "AR" } +{ "_id" : "72856", "city" : "PELSOR", "loc" : [ -93.016088, 35.691158 ], "pop" : 117, "state" : "AR" } +{ "_id" : "72857", "city" : "PLAINVIEW", "loc" : [ -93.30989700000001, 34.966793 ], "pop" : 1260, "state" : "AR" } +{ "_id" : "72858", "city" : "POTTSVILLE", "loc" : [ -93.056386, 35.239785 ], "pop" : 2494, "state" : "AR" } +{ "_id" : "72860", "city" : "ROVER", "loc" : [ -93.40172800000001, 34.947522 ], "pop" : 299, "state" : "AR" } +{ "_id" : "72863", "city" : "SCRANTON", "loc" : [ -93.539362, 35.330816 ], "pop" : 1683, "state" : "AR" } +{ "_id" : "72865", "city" : "SUBIACO", "loc" : [ -93.63869, 35.31346 ], "pop" : 1190, "state" : "AR" } +{ "_id" : "72901", "city" : "FORT SMITH", "loc" : [ -94.411035, 35.365272 ], "pop" : 21722, "state" : "AR" } +{ "_id" : "72903", "city" : "FORT SMITH", "loc" : [ -94.378361, 35.342673 ], "pop" : 32809, "state" : "AR" } +{ "_id" : "72904", "city" : "FORT SMITH", "loc" : [ -94.38723, 35.405122 ], "pop" : 18559, "state" : "AR" } +{ "_id" : "72905", "city" : "FORT CHAFFEE", "loc" : [ -94.340521, 35.297366 ], "pop" : 224, "state" : "AR" } +{ "_id" : "72916", "city" : "FORT SMITH", "loc" : [ -94.37030799999999, 35.250175 ], "pop" : 3494, "state" : "AR" } +{ "_id" : "72921", "city" : "ALMA", "loc" : [ -94.207337, 35.500043 ], "pop" : 7443, "state" : "AR" } +{ "_id" : "72923", "city" : "BARLING", "loc" : [ -94.308226, 35.332963 ], "pop" : 3857, "state" : "AR" } +{ "_id" : "72924", "city" : "BATES", "loc" : [ -94.39315499999999, 34.909295 ], "pop" : 213, "state" : "AR" } +{ "_id" : "72926", "city" : "BOLES", "loc" : [ -94.062864, 34.765363 ], "pop" : 687, "state" : "AR" } +{ "_id" : "72927", "city" : "BOONEVILLE", "loc" : [ -93.92743299999999, 35.136385 ], "pop" : 7502, "state" : "AR" } +{ "_id" : "72928", "city" : "BRANCH", "loc" : [ -93.94537, 35.297055 ], "pop" : 597, "state" : "AR" } +{ "_id" : "72930", "city" : "CECIL", "loc" : [ -93.942932, 35.434176 ], "pop" : 271, "state" : "AR" } +{ "_id" : "72932", "city" : "CEDARVILLE", "loc" : [ -94.344618, 35.590231 ], "pop" : 1605, "state" : "AR" } +{ "_id" : "72933", "city" : "CHARLESTON", "loc" : [ -94.03368, 35.311502 ], "pop" : 3173, "state" : "AR" } +{ "_id" : "72934", "city" : "CHESTER", "loc" : [ -94.202026, 35.689776 ], "pop" : 1004, "state" : "AR" } +{ "_id" : "72936", "city" : "GREENWOOD", "loc" : [ -94.253027, 35.195476 ], "pop" : 8385, "state" : "AR" } +{ "_id" : "72937", "city" : "HACKETT", "loc" : [ -94.39832800000001, 35.194476 ], "pop" : 1587, "state" : "AR" } +{ "_id" : "72938", "city" : "HARTFORD", "loc" : [ -94.38187600000001, 35.022233 ], "pop" : 1073, "state" : "AR" } +{ "_id" : "72940", "city" : "HUNTINGTON", "loc" : [ -94.331283, 35.096267 ], "pop" : 2608, "state" : "AR" } +{ "_id" : "72941", "city" : "CENTRAL CITY", "loc" : [ -94.165637, 35.337513 ], "pop" : 4138, "state" : "AR" } +{ "_id" : "72943", "city" : "MAGAZINE", "loc" : [ -93.800336, 35.15873 ], "pop" : 1336, "state" : "AR" } +{ "_id" : "72944", "city" : "MANSFIELD", "loc" : [ -94.22036, 35.0432 ], "pop" : 2607, "state" : "AR" } +{ "_id" : "72946", "city" : "MOUNTAINBURG", "loc" : [ -94.109094, 35.570027 ], "pop" : 4762, "state" : "AR" } +{ "_id" : "72947", "city" : "MULBERRY", "loc" : [ -93.988505, 35.517246 ], "pop" : 738, "state" : "AR" } +{ "_id" : "72948", "city" : "NATURAL DAM", "loc" : [ -94.41237700000001, 35.674259 ], "pop" : 497, "state" : "AR" } +{ "_id" : "72949", "city" : "OZARK", "loc" : [ -93.837423, 35.524645 ], "pop" : 7338, "state" : "AR" } +{ "_id" : "72950", "city" : "PARKS", "loc" : [ -93.950913, 34.800333 ], "pop" : 471, "state" : "AR" } +{ "_id" : "72951", "city" : "RATCLIFF", "loc" : [ -93.84214900000001, 35.276032 ], "pop" : 1392, "state" : "AR" } +{ "_id" : "72952", "city" : "RUDY", "loc" : [ -94.237376, 35.539805 ], "pop" : 1753, "state" : "AR" } +{ "_id" : "72955", "city" : "UNIONTOWN", "loc" : [ -94.43487, 35.574822 ], "pop" : 710, "state" : "AR" } +{ "_id" : "72956", "city" : "VAN BUREN", "loc" : [ -94.32776200000001, 35.453989 ], "pop" : 24719, "state" : "AR" } +{ "_id" : "72958", "city" : "WALDRON", "loc" : [ -94.077243, 34.902642 ], "pop" : 6884, "state" : "AR" } +{ "_id" : "72959", "city" : "WINSLOW", "loc" : [ -94.118657, 35.831206 ], "pop" : 2566, "state" : "AR" } +{ "_id" : "73002", "city" : "ALEX", "loc" : [ -97.75709000000001, 34.961202 ], "pop" : 1976, "state" : "OK" } +{ "_id" : "73004", "city" : "AMBER", "loc" : [ -97.764566, 35.137691 ], "pop" : 2575, "state" : "OK" } +{ "_id" : "73005", "city" : "ANADARKO", "loc" : [ -98.24290999999999, 35.072808 ], "pop" : 10332, "state" : "OK" } +{ "_id" : "73006", "city" : "APACHE", "loc" : [ -98.369483, 34.903376 ], "pop" : 2969, "state" : "OK" } +{ "_id" : "73007", "city" : "ARCADIA", "loc" : [ -97.32428899999999, 35.6543 ], "pop" : 697, "state" : "OK" } +{ "_id" : "73008", "city" : "BETHANY", "loc" : [ -97.63985599999999, 35.504315 ], "pop" : 21064, "state" : "OK" } +{ "_id" : "73009", "city" : "BINGER", "loc" : [ -98.314797, 35.310593 ], "pop" : 1799, "state" : "OK" } +{ "_id" : "73010", "city" : "BLANCHARD", "loc" : [ -97.640131, 35.119215 ], "pop" : 4511, "state" : "OK" } +{ "_id" : "73011", "city" : "BRADLEY", "loc" : [ -97.71184100000001, 34.874124 ], "pop" : 416, "state" : "OK" } +{ "_id" : "73013", "city" : "EDMOND", "loc" : [ -97.473268, 35.621534 ], "pop" : 22802, "state" : "OK" } +{ "_id" : "73014", "city" : "CALUMET", "loc" : [ -98.18999100000001, 35.594819 ], "pop" : 1507, "state" : "OK" } +{ "_id" : "73015", "city" : "CARNEGIE", "loc" : [ -98.57545399999999, 35.123484 ], "pop" : 3907, "state" : "OK" } +{ "_id" : "73016", "city" : "CASHION", "loc" : [ -97.679523, 35.799996 ], "pop" : 408, "state" : "OK" } +{ "_id" : "73017", "city" : "CEMENT", "loc" : [ -98.14655999999999, 34.932092 ], "pop" : 1641, "state" : "OK" } +{ "_id" : "73018", "city" : "CHICKASHA", "loc" : [ -97.951847, 35.026751 ], "pop" : 19634, "state" : "OK" } +{ "_id" : "73020", "city" : "CHOCTAW", "loc" : [ -97.272564, 35.471758 ], "pop" : 13832, "state" : "OK" } +{ "_id" : "73021", "city" : "COLONY", "loc" : [ -98.67067400000001, 35.344844 ], "pop" : 312, "state" : "OK" } +{ "_id" : "73024", "city" : "CORN", "loc" : [ -98.806226, 35.399842 ], "pop" : 1156, "state" : "OK" } +{ "_id" : "73027", "city" : "COYLE", "loc" : [ -97.260683, 35.898496 ], "pop" : 3054, "state" : "OK" } +{ "_id" : "73028", "city" : "CRESCENT", "loc" : [ -97.59692200000001, 35.942 ], "pop" : 2832, "state" : "OK" } +{ "_id" : "73029", "city" : "CYRIL", "loc" : [ -98.208269, 34.895854 ], "pop" : 1433, "state" : "OK" } +{ "_id" : "73030", "city" : "DAVIS", "loc" : [ -97.10843, 34.495301 ], "pop" : 4823, "state" : "OK" } +{ "_id" : "73034", "city" : "EDMOND", "loc" : [ -97.47983499999999, 35.666483 ], "pop" : 43814, "state" : "OK" } +{ "_id" : "73035", "city" : "ELMORE CITY", "loc" : [ -97.39003, 34.608516 ], "pop" : 2520, "state" : "OK" } +{ "_id" : "73036", "city" : "EL RENO", "loc" : [ -97.959091, 35.533468 ], "pop" : 18480, "state" : "OK" } +{ "_id" : "73038", "city" : "FORT COBB", "loc" : [ -98.430296, 35.116097 ], "pop" : 1847, "state" : "OK" } +{ "_id" : "73039", "city" : "FOSTER", "loc" : [ -97.533395, 34.627789 ], "pop" : 578, "state" : "OK" } +{ "_id" : "73040", "city" : "GEARY", "loc" : [ -98.390529, 35.621709 ], "pop" : 2124, "state" : "OK" } +{ "_id" : "73041", "city" : "GOTEBO", "loc" : [ -98.87597700000001, 35.075891 ], "pop" : 534, "state" : "OK" } +{ "_id" : "73042", "city" : "GRACEMONT", "loc" : [ -98.283513, 35.187498 ], "pop" : 968, "state" : "OK" } +{ "_id" : "73043", "city" : "GREENFIELD", "loc" : [ -98.384073, 35.733269 ], "pop" : 270, "state" : "OK" } +{ "_id" : "73044", "city" : "GUTHRIE", "loc" : [ -97.43599500000001, 35.832955 ], "pop" : 19769, "state" : "OK" } +{ "_id" : "73045", "city" : "HARRAH", "loc" : [ -97.17343, 35.483258 ], "pop" : 6766, "state" : "OK" } +{ "_id" : "73046", "city" : "HENNEPIN", "loc" : [ -97.42146700000001, 34.485893 ], "pop" : 656, "state" : "OK" } +{ "_id" : "73047", "city" : "HINTON", "loc" : [ -98.33134800000001, 35.4675 ], "pop" : 2433, "state" : "OK" } +{ "_id" : "73048", "city" : "HYDRO", "loc" : [ -98.56044799999999, 35.45201 ], "pop" : 2009, "state" : "OK" } +{ "_id" : "73049", "city" : "JONES", "loc" : [ -97.28914, 35.575316 ], "pop" : 3059, "state" : "OK" } +{ "_id" : "73051", "city" : "LEXINGTON", "loc" : [ -97.26094500000001, 35.037661 ], "pop" : 7904, "state" : "OK" } +{ "_id" : "73052", "city" : "LINDSAY", "loc" : [ -97.599788, 34.821116 ], "pop" : 5597, "state" : "OK" } +{ "_id" : "73053", "city" : "LOOKEBA", "loc" : [ -98.389833, 35.367946 ], "pop" : 802, "state" : "OK" } +{ "_id" : "73054", "city" : "LUTHER", "loc" : [ -97.182292, 35.631491 ], "pop" : 2111, "state" : "OK" } +{ "_id" : "73055", "city" : "MARLOW", "loc" : [ -97.940955, 34.638681 ], "pop" : 7881, "state" : "OK" } +{ "_id" : "73056", "city" : "MARSHALL", "loc" : [ -97.617052, 36.148455 ], "pop" : 479, "state" : "OK" } +{ "_id" : "73057", "city" : "MAYSVILLE", "loc" : [ -97.41314300000001, 34.811316 ], "pop" : 2456, "state" : "OK" } +{ "_id" : "73058", "city" : "MERIDIAN", "loc" : [ -97.24623, 35.8451 ], "pop" : 61, "state" : "OK" } +{ "_id" : "73059", "city" : "MINCO", "loc" : [ -97.96638, 35.306723 ], "pop" : 2119, "state" : "OK" } +{ "_id" : "73061", "city" : "MORRISON", "loc" : [ -97.022777, 36.290214 ], "pop" : 1425, "state" : "OK" } +{ "_id" : "73062", "city" : "MOUNTAIN VIEW", "loc" : [ -98.730694, 35.06535 ], "pop" : 1808, "state" : "OK" } +{ "_id" : "73063", "city" : "MULHALL", "loc" : [ -97.409809, 36.053678 ], "pop" : 463, "state" : "OK" } +{ "_id" : "73064", "city" : "MUSTANG", "loc" : [ -97.73088799999999, 35.388498 ], "pop" : 12156, "state" : "OK" } +{ "_id" : "73065", "city" : "NEWCASTLE", "loc" : [ -97.621573, 35.245269 ], "pop" : 4653, "state" : "OK" } +{ "_id" : "73067", "city" : "NINNEKAH", "loc" : [ -97.933277, 34.91435 ], "pop" : 1075, "state" : "OK" } +{ "_id" : "73068", "city" : "NOBLE", "loc" : [ -97.340929, 35.141742 ], "pop" : 8098, "state" : "OK" } +{ "_id" : "73069", "city" : "NORMAN", "loc" : [ -97.45774299999999, 35.220389 ], "pop" : 21299, "state" : "OK" } +{ "_id" : "73071", "city" : "NORMAN", "loc" : [ -97.379159, 35.224254 ], "pop" : 32228, "state" : "OK" } +{ "_id" : "73072", "city" : "NORMAN", "loc" : [ -97.472984, 35.210733 ], "pop" : 27969, "state" : "OK" } +{ "_id" : "73073", "city" : "ORLANDO", "loc" : [ -97.39599200000001, 36.141973 ], "pop" : 332, "state" : "OK" } +{ "_id" : "73074", "city" : "PAOLI", "loc" : [ -97.260807, 34.828492 ], "pop" : 989, "state" : "OK" } +{ "_id" : "73075", "city" : "PAULS VALLEY", "loc" : [ -97.21950099999999, 34.738506 ], "pop" : 8663, "state" : "OK" } +{ "_id" : "73077", "city" : "PERRY", "loc" : [ -97.284175, 36.287468 ], "pop" : 7231, "state" : "OK" } +{ "_id" : "73078", "city" : "PIEDMONT", "loc" : [ -97.743109, 35.66946 ], "pop" : 2267, "state" : "OK" } +{ "_id" : "73079", "city" : "POCASSET", "loc" : [ -97.97904, 35.154437 ], "pop" : 895, "state" : "OK" } +{ "_id" : "73080", "city" : "PURCELL", "loc" : [ -97.425493, 35.010293 ], "pop" : 8700, "state" : "OK" } +{ "_id" : "73081", "city" : "RATLIFF CITY", "loc" : [ -97.51442400000001, 34.420719 ], "pop" : 894, "state" : "OK" } +{ "_id" : "73082", "city" : "RUSH SPRINGS", "loc" : [ -97.943101, 34.770804 ], "pop" : 3537, "state" : "OK" } +{ "_id" : "73084", "city" : "SPENCER", "loc" : [ -97.348775, 35.518276 ], "pop" : 7675, "state" : "OK" } +{ "_id" : "73086", "city" : "SULPHUR", "loc" : [ -96.97969500000001, 34.511585 ], "pop" : 7018, "state" : "OK" } +{ "_id" : "73088", "city" : "TUSSY", "loc" : [ -97.536379, 34.492159 ], "pop" : 90, "state" : "OK" } +{ "_id" : "73089", "city" : "TUTTLE", "loc" : [ -97.744621, 35.267406 ], "pop" : 8753, "state" : "OK" } +{ "_id" : "73090", "city" : "UNION CITY", "loc" : [ -97.93979, 35.391333 ], "pop" : 551, "state" : "OK" } +{ "_id" : "73092", "city" : "VERDEN", "loc" : [ -98.079206, 35.08356 ], "pop" : 734, "state" : "OK" } +{ "_id" : "73093", "city" : "WASHINGTON", "loc" : [ -97.486969, 35.13235 ], "pop" : 1670, "state" : "OK" } +{ "_id" : "73095", "city" : "WAYNE", "loc" : [ -97.329014, 34.915353 ], "pop" : 1430, "state" : "OK" } +{ "_id" : "73096", "city" : "WEATHERFORD", "loc" : [ -98.699603, 35.535046 ], "pop" : 11963, "state" : "OK" } +{ "_id" : "73098", "city" : "WYNNEWOOD", "loc" : [ -97.176952, 34.63847 ], "pop" : 3762, "state" : "OK" } +{ "_id" : "73099", "city" : "YUKON", "loc" : [ -97.73230700000001, 35.49772 ], "pop" : 38891, "state" : "OK" } +{ "_id" : "73102", "city" : "OKLAHOMA CITY", "loc" : [ -97.519926, 35.472601 ], "pop" : 2227, "state" : "OK" } +{ "_id" : "73103", "city" : "OKLAHOMA CITY", "loc" : [ -97.51959100000001, 35.490957 ], "pop" : 4253, "state" : "OK" } +{ "_id" : "73104", "city" : "OKLAHOMA CITY", "loc" : [ -97.50171400000001, 35.479388 ], "pop" : 2534, "state" : "OK" } +{ "_id" : "73105", "city" : "OKLAHOMA CITY", "loc" : [ -97.500291, 35.510811 ], "pop" : 5379, "state" : "OK" } +{ "_id" : "73106", "city" : "OKLAHOMA CITY", "loc" : [ -97.537228, 35.485328 ], "pop" : 12706, "state" : "OK" } +{ "_id" : "73107", "city" : "OKLAHOMA CITY", "loc" : [ -97.57397400000001, 35.48736 ], "pop" : 23130, "state" : "OK" } +{ "_id" : "73108", "city" : "OKLAHOMA CITY", "loc" : [ -97.56192799999999, 35.444485 ], "pop" : 13259, "state" : "OK" } +{ "_id" : "73109", "city" : "OKLAHOMA CITY", "loc" : [ -97.52613100000001, 35.425944 ], "pop" : 16821, "state" : "OK" } +{ "_id" : "73110", "city" : "MIDWEST CITY", "loc" : [ -97.397661, 35.461978 ], "pop" : 35101, "state" : "OK" } +{ "_id" : "73111", "city" : "OKLAHOMA CITY", "loc" : [ -97.48060700000001, 35.504238 ], "pop" : 15332, "state" : "OK" } +{ "_id" : "73112", "city" : "OKLAHOMA CITY", "loc" : [ -97.574639, 35.518435 ], "pop" : 29057, "state" : "OK" } +{ "_id" : "73114", "city" : "OKLAHOMA CITY", "loc" : [ -97.52573599999999, 35.570357 ], "pop" : 15126, "state" : "OK" } +{ "_id" : "73115", "city" : "DEL CITY", "loc" : [ -97.44164499999999, 35.440093 ], "pop" : 23589, "state" : "OK" } +{ "_id" : "73116", "city" : "NICHOLS HILLS", "loc" : [ -97.56394, 35.542484 ], "pop" : 9559, "state" : "OK" } +{ "_id" : "73117", "city" : "OKLAHOMA CITY", "loc" : [ -97.472195, 35.479667 ], "pop" : 6489, "state" : "OK" } +{ "_id" : "73118", "city" : "OKLAHOMA CITY", "loc" : [ -97.531908, 35.513645 ], "pop" : 13826, "state" : "OK" } +{ "_id" : "73119", "city" : "OKLAHOMA CITY", "loc" : [ -97.561584, 35.421033 ], "pop" : 25150, "state" : "OK" } +{ "_id" : "73120", "city" : "OKLAHOMA CITY", "loc" : [ -97.563756, 35.583478 ], "pop" : 35879, "state" : "OK" } +{ "_id" : "73121", "city" : "OKLAHOMA CITY", "loc" : [ -97.445183, 35.506235 ], "pop" : 3134, "state" : "OK" } +{ "_id" : "73122", "city" : "WARR ACRES", "loc" : [ -97.613305, 35.520239 ], "pop" : 13337, "state" : "OK" } +{ "_id" : "73127", "city" : "OKLAHOMA CITY", "loc" : [ -97.629927, 35.483371 ], "pop" : 20789, "state" : "OK" } +{ "_id" : "73128", "city" : "OKLAHOMA CITY", "loc" : [ -97.616362, 35.444358 ], "pop" : 1349, "state" : "OK" } +{ "_id" : "73129", "city" : "OKLAHOMA CITY", "loc" : [ -97.491309, 35.43119 ], "pop" : 18830, "state" : "OK" } +{ "_id" : "73130", "city" : "MIDWEST CITY", "loc" : [ -97.351489, 35.460863 ], "pop" : 16223, "state" : "OK" } +{ "_id" : "73131", "city" : "OKLAHOMA CITY", "loc" : [ -97.469127, 35.579693 ], "pop" : 1460, "state" : "OK" } +{ "_id" : "73132", "city" : "WARR ACRES", "loc" : [ -97.63633299999999, 35.552783 ], "pop" : 22038, "state" : "OK" } +{ "_id" : "73134", "city" : "OKLAHOMA CITY", "loc" : [ -97.558342, 35.617397 ], "pop" : 1317, "state" : "OK" } +{ "_id" : "73135", "city" : "OKLAHOMA CITY", "loc" : [ -97.438762, 35.411037 ], "pop" : 13933, "state" : "OK" } +{ "_id" : "73139", "city" : "OKLAHOMA CITY", "loc" : [ -97.536205, 35.379193 ], "pop" : 22429, "state" : "OK" } +{ "_id" : "73141", "city" : "OKLAHOMA CITY", "loc" : [ -97.366606, 35.491848 ], "pop" : 2667, "state" : "OK" } +{ "_id" : "73142", "city" : "OKLAHOMA CITY", "loc" : [ -97.625067, 35.598994 ], "pop" : 4366, "state" : "OK" } +{ "_id" : "73145", "city" : "TINKER AFB", "loc" : [ -97.403707, 35.415706 ], "pop" : 3714, "state" : "OK" } +{ "_id" : "73149", "city" : "OKLAHOMA CITY", "loc" : [ -97.497175, 35.394998 ], "pop" : 5335, "state" : "OK" } +{ "_id" : "73150", "city" : "OKLAHOMA CITY", "loc" : [ -97.33308, 35.41231 ], "pop" : 4512, "state" : "OK" } +{ "_id" : "73151", "city" : "OKLAHOMA CITY", "loc" : [ -97.39057, 35.568508 ], "pop" : 1315, "state" : "OK" } +{ "_id" : "73159", "city" : "OKLAHOMA CITY", "loc" : [ -97.55674, 35.39224 ], "pop" : 21343, "state" : "OK" } +{ "_id" : "73160", "city" : "MOORE", "loc" : [ -97.487352, 35.342465 ], "pop" : 39935, "state" : "OK" } +{ "_id" : "73162", "city" : "OKLAHOMA CITY", "loc" : [ -97.64193400000001, 35.580647 ], "pop" : 21084, "state" : "OK" } +{ "_id" : "73165", "city" : "MOORE", "loc" : [ -97.34979199999999, 35.337086 ], "pop" : 4202, "state" : "OK" } +{ "_id" : "73169", "city" : "OKLAHOMA CITY", "loc" : [ -97.658683, 35.388233 ], "pop" : 1266, "state" : "OK" } +{ "_id" : "73170", "city" : "MOORE", "loc" : [ -97.536, 35.341554 ], "pop" : 13250, "state" : "OK" } +{ "_id" : "73173", "city" : "OKLAHOMA CITY", "loc" : [ -97.63171, 35.342455 ], "pop" : 667, "state" : "OK" } +{ "_id" : "73179", "city" : "OKLAHOMA CITY", "loc" : [ -97.654729, 35.424157 ], "pop" : 1177, "state" : "OK" } +{ "_id" : "73401", "city" : "MILO", "loc" : [ -97.134157, 34.176681 ], "pop" : 30328, "state" : "OK" } +{ "_id" : "73430", "city" : "BURNEYVILLE", "loc" : [ -97.324929, 33.951516 ], "pop" : 740, "state" : "OK" } +{ "_id" : "73432", "city" : "COLEMAN", "loc" : [ -96.45881799999999, 34.262498 ], "pop" : 1073, "state" : "OK" } +{ "_id" : "73437", "city" : "GRAHAM", "loc" : [ -97.495435, 34.337379 ], "pop" : 674, "state" : "OK" } +{ "_id" : "73438", "city" : "HEALDTON", "loc" : [ -97.48890400000001, 34.229017 ], "pop" : 3114, "state" : "OK" } +{ "_id" : "73439", "city" : "KINGSTON", "loc" : [ -96.711977, 33.951664 ], "pop" : 3808, "state" : "OK" } +{ "_id" : "73440", "city" : "LEBANON", "loc" : [ -96.86449500000001, 33.961036 ], "pop" : 144, "state" : "OK" } +{ "_id" : "73441", "city" : "LEON", "loc" : [ -97.447058, 33.924278 ], "pop" : 919, "state" : "OK" } +{ "_id" : "73442", "city" : "LOCO", "loc" : [ -97.665803, 34.321416 ], "pop" : 338, "state" : "OK" } +{ "_id" : "73443", "city" : "LONE GROVE", "loc" : [ -97.268523, 34.177373 ], "pop" : 3002, "state" : "OK" } +{ "_id" : "73446", "city" : "MC MILLAN", "loc" : [ -96.78725799999999, 34.07126 ], "pop" : 6877, "state" : "OK" } +{ "_id" : "73447", "city" : "MANNSVILLE", "loc" : [ -96.87780100000001, 34.189902 ], "pop" : 888, "state" : "OK" } +{ "_id" : "73448", "city" : "MARIETTA", "loc" : [ -97.114801, 33.943099 ], "pop" : 5242, "state" : "OK" } +{ "_id" : "73449", "city" : "MEAD", "loc" : [ -96.529886, 33.994442 ], "pop" : 1520, "state" : "OK" } +{ "_id" : "73450", "city" : "MILBURN", "loc" : [ -96.54286, 34.195172 ], "pop" : 884, "state" : "OK" } +{ "_id" : "73453", "city" : "OVERBROOK", "loc" : [ -97.13235299999999, 34.053906 ], "pop" : 283, "state" : "OK" } +{ "_id" : "73456", "city" : "RINGLING", "loc" : [ -97.602867, 34.167865 ], "pop" : 2215, "state" : "OK" } +{ "_id" : "73458", "city" : "SPRINGER", "loc" : [ -97.122266, 34.303832 ], "pop" : 1248, "state" : "OK" } +{ "_id" : "73459", "city" : "THACKERVILLE", "loc" : [ -97.136349, 33.788167 ], "pop" : 973, "state" : "OK" } +{ "_id" : "73460", "city" : "TISHOMINGO", "loc" : [ -96.667502, 34.264286 ], "pop" : 4958, "state" : "OK" } +{ "_id" : "73461", "city" : "WAPANUCKA", "loc" : [ -96.45322299999999, 34.386634 ], "pop" : 719, "state" : "OK" } +{ "_id" : "73463", "city" : "RUBOTTOM", "loc" : [ -97.42487, 34.164206 ], "pop" : 3095, "state" : "OK" } +{ "_id" : "73501", "city" : "LAWTON", "loc" : [ -98.369783, 34.591467 ], "pop" : 18175, "state" : "OK" } +{ "_id" : "73503", "city" : "FORT SILL", "loc" : [ -98.40040999999999, 34.659525 ], "pop" : 12228, "state" : "OK" } +{ "_id" : "73505", "city" : "LAWTON", "loc" : [ -98.455234, 34.617939 ], "pop" : 45542, "state" : "OK" } +{ "_id" : "73507", "city" : "LAWTON", "loc" : [ -98.389453, 34.624595 ], "pop" : 19244, "state" : "OK" } +{ "_id" : "73521", "city" : "ALTUS", "loc" : [ -99.320483, 34.648406 ], "pop" : 22957, "state" : "OK" } +{ "_id" : "73526", "city" : "BLAIR", "loc" : [ -99.333404, 34.778813 ], "pop" : 1147, "state" : "OK" } +{ "_id" : "73527", "city" : "CACHE", "loc" : [ -98.615351, 34.613072 ], "pop" : 3857, "state" : "OK" } +{ "_id" : "73528", "city" : "CHATTANOOGA", "loc" : [ -98.651365, 34.426193 ], "pop" : 483, "state" : "OK" } +{ "_id" : "73529", "city" : "COMANCHE", "loc" : [ -97.979286, 34.376523 ], "pop" : 4998, "state" : "OK" } +{ "_id" : "73530", "city" : "DAVIDSON", "loc" : [ -99.064031, 34.251423 ], "pop" : 800, "state" : "OK" } +{ "_id" : "73531", "city" : "DEVOL", "loc" : [ -98.57699100000001, 34.195589 ], "pop" : 311, "state" : "OK" } +{ "_id" : "73532", "city" : "DUKE", "loc" : [ -99.54817199999999, 34.666769 ], "pop" : 625, "state" : "OK" } +{ "_id" : "73533", "city" : "DUNCAN", "loc" : [ -97.94032199999999, 34.507277 ], "pop" : 28871, "state" : "OK" } +{ "_id" : "73537", "city" : "ELDORADO", "loc" : [ -99.645956, 34.472744 ], "pop" : 742, "state" : "OK" } +{ "_id" : "73538", "city" : "ELGIN", "loc" : [ -98.40732199999999, 34.772018 ], "pop" : 5476, "state" : "OK" } +{ "_id" : "73539", "city" : "ELMER", "loc" : [ -99.316744, 34.513668 ], "pop" : 569, "state" : "OK" } +{ "_id" : "73540", "city" : "FAXON", "loc" : [ -98.55771, 34.464521 ], "pop" : 352, "state" : "OK" } +{ "_id" : "73541", "city" : "FLETCHER", "loc" : [ -98.20024600000001, 34.784657 ], "pop" : 3382, "state" : "OK" } +{ "_id" : "73542", "city" : "FREDERICK", "loc" : [ -99.011877, 34.401199 ], "pop" : 6196, "state" : "OK" } +{ "_id" : "73543", "city" : "GERONIMO", "loc" : [ -98.387525, 34.480499 ], "pop" : 1305, "state" : "OK" } +{ "_id" : "73544", "city" : "GOULD", "loc" : [ -99.78433699999999, 34.664964 ], "pop" : 553, "state" : "OK" } +{ "_id" : "73546", "city" : "GRANDFIELD", "loc" : [ -98.686654, 34.228247 ], "pop" : 1436, "state" : "OK" } +{ "_id" : "73547", "city" : "GRANITE", "loc" : [ -99.388139, 34.971184 ], "pop" : 2216, "state" : "OK" } +{ "_id" : "73548", "city" : "HASTINGS", "loc" : [ -98.107539, 34.225064 ], "pop" : 210, "state" : "OK" } +{ "_id" : "73549", "city" : "HEADRICK", "loc" : [ -99.23904, 34.72189 ], "pop" : 1903, "state" : "OK" } +{ "_id" : "73550", "city" : "HOLLIS", "loc" : [ -99.917711, 34.695281 ], "pop" : 3136, "state" : "OK" } +{ "_id" : "73551", "city" : "HOLLISTER", "loc" : [ -98.881404, 34.352473 ], "pop" : 127, "state" : "OK" } +{ "_id" : "73552", "city" : "INDIAHOMA", "loc" : [ -98.734864, 34.624226 ], "pop" : 1385, "state" : "OK" } +{ "_id" : "73553", "city" : "LOVELAND", "loc" : [ -98.72353, 34.391018 ], "pop" : 312, "state" : "OK" } +{ "_id" : "73554", "city" : "REED", "loc" : [ -99.505769, 34.875473 ], "pop" : 4057, "state" : "OK" } +{ "_id" : "73559", "city" : "MOUNTAIN PARK", "loc" : [ -98.959136, 34.703158 ], "pop" : 631, "state" : "OK" } +{ "_id" : "73560", "city" : "OLUSTEE", "loc" : [ -99.428684, 34.549634 ], "pop" : 821, "state" : "OK" } +{ "_id" : "73561", "city" : "OSCAR", "loc" : [ -97.761359, 33.973237 ], "pop" : 35, "state" : "OK" } +{ "_id" : "73562", "city" : "RANDLETT", "loc" : [ -98.459974, 34.174045 ], "pop" : 891, "state" : "OK" } +{ "_id" : "73564", "city" : "ROOSEVELT", "loc" : [ -98.983599, 34.846983 ], "pop" : 666, "state" : "OK" } +{ "_id" : "73565", "city" : "RYAN", "loc" : [ -97.946141, 34.023787 ], "pop" : 1331, "state" : "OK" } +{ "_id" : "73566", "city" : "SNYDER", "loc" : [ -98.95075199999999, 34.654779 ], "pop" : 1858, "state" : "OK" } +{ "_id" : "73568", "city" : "TEMPLE", "loc" : [ -98.23707400000001, 34.260669 ], "pop" : 1588, "state" : "OK" } +{ "_id" : "73569", "city" : "GRADY", "loc" : [ -97.935045, 33.897162 ], "pop" : 563, "state" : "OK" } +{ "_id" : "73570", "city" : "TIPTON", "loc" : [ -99.13148200000001, 34.509793 ], "pop" : 1513, "state" : "OK" } +{ "_id" : "73571", "city" : "VINSON", "loc" : [ -99.833929, 34.906179 ], "pop" : 104, "state" : "OK" } +{ "_id" : "73572", "city" : "WALTERS", "loc" : [ -98.31398299999999, 34.360526 ], "pop" : 3861, "state" : "OK" } +{ "_id" : "73573", "city" : "WAURIKA", "loc" : [ -97.99734599999999, 34.174466 ], "pop" : 2656, "state" : "OK" } +{ "_id" : "73601", "city" : "CLINTON", "loc" : [ -98.979533, 35.511543 ], "pop" : 10287, "state" : "OK" } +{ "_id" : "73620", "city" : "ARAPAHO", "loc" : [ -98.959508, 35.578864 ], "pop" : 1005, "state" : "OK" } +{ "_id" : "73622", "city" : "BESSIE", "loc" : [ -98.989638, 35.38545 ], "pop" : 271, "state" : "OK" } +{ "_id" : "73625", "city" : "BUTLER", "loc" : [ -99.242749, 35.633638 ], "pop" : 1110, "state" : "OK" } +{ "_id" : "73626", "city" : "CANUTE", "loc" : [ -99.281575, 35.403678 ], "pop" : 1245, "state" : "OK" } +{ "_id" : "73627", "city" : "CARTER", "loc" : [ -99.48223900000001, 35.220779 ], "pop" : 664, "state" : "OK" } +{ "_id" : "73628", "city" : "STRONG CITY", "loc" : [ -99.676688, 35.623181 ], "pop" : 1586, "state" : "OK" } +{ "_id" : "73632", "city" : "CORDELL", "loc" : [ -98.95105599999999, 35.278803 ], "pop" : 4210, "state" : "OK" } +{ "_id" : "73638", "city" : "CRAWFORD", "loc" : [ -99.80644599999999, 35.836766 ], "pop" : 178, "state" : "OK" } +{ "_id" : "73639", "city" : "CUSTER CITY", "loc" : [ -98.912013, 35.689371 ], "pop" : 758, "state" : "OK" } +{ "_id" : "73641", "city" : "DILL CITY", "loc" : [ -99.153738, 35.278704 ], "pop" : 966, "state" : "OK" } +{ "_id" : "73642", "city" : "DURHAM", "loc" : [ -99.90877399999999, 35.836391 ], "pop" : 173, "state" : "OK" } +{ "_id" : "73644", "city" : "ELK CITY", "loc" : [ -99.421086, 35.410359 ], "pop" : 12461, "state" : "OK" } +{ "_id" : "73645", "city" : "ERICK", "loc" : [ -99.863463, 35.228586 ], "pop" : 1638, "state" : "OK" } +{ "_id" : "73646", "city" : "FAY", "loc" : [ -98.65867799999999, 35.820417 ], "pop" : 136, "state" : "OK" } +{ "_id" : "73647", "city" : "FOSS", "loc" : [ -99.15259, 35.373645 ], "pop" : 1609, "state" : "OK" } +{ "_id" : "73650", "city" : "HAMMON", "loc" : [ -99.402683, 35.646131 ], "pop" : 873, "state" : "OK" } +{ "_id" : "73651", "city" : "HOBART", "loc" : [ -99.094433, 35.025521 ], "pop" : 4844, "state" : "OK" } +{ "_id" : "73654", "city" : "LEEDEY", "loc" : [ -99.349146, 35.869772 ], "pop" : 906, "state" : "OK" } +{ "_id" : "73655", "city" : "LONE WOLF", "loc" : [ -99.25016100000001, 34.980584 ], "pop" : 1135, "state" : "OK" } +{ "_id" : "73658", "city" : "EAGLE CITY", "loc" : [ -98.70805799999999, 35.921429 ], "pop" : 332, "state" : "OK" } +{ "_id" : "73659", "city" : "PUTNAM", "loc" : [ -98.963765, 35.853851 ], "pop" : 149, "state" : "OK" } +{ "_id" : "73660", "city" : "REYDON", "loc" : [ -99.916567, 35.657587 ], "pop" : 537, "state" : "OK" } +{ "_id" : "73661", "city" : "ROCKY", "loc" : [ -99.04803699999999, 35.152636 ], "pop" : 242, "state" : "OK" } +{ "_id" : "73662", "city" : "SAYRE", "loc" : [ -99.642928, 35.304722 ], "pop" : 4072, "state" : "OK" } +{ "_id" : "73663", "city" : "SEILING", "loc" : [ -98.88746, 36.127823 ], "pop" : 1847, "state" : "OK" } +{ "_id" : "73664", "city" : "SENTINEL", "loc" : [ -99.17061099999999, 35.161741 ], "pop" : 1358, "state" : "OK" } +{ "_id" : "73666", "city" : "SWEETWATER", "loc" : [ -99.90061900000001, 35.448835 ], "pop" : 428, "state" : "OK" } +{ "_id" : "73667", "city" : "TALOGA", "loc" : [ -98.982473, 35.997242 ], "pop" : 784, "state" : "OK" } +{ "_id" : "73668", "city" : "TEXOLA", "loc" : [ -99.98218, 35.224977 ], "pop" : 89, "state" : "OK" } +{ "_id" : "73669", "city" : "THOMAS", "loc" : [ -98.73884200000001, 35.738165 ], "pop" : 1774, "state" : "OK" } +{ "_id" : "73673", "city" : "WILLOW", "loc" : [ -99.542091, 35.070245 ], "pop" : 376, "state" : "OK" } +{ "_id" : "73701", "city" : "ENID", "loc" : [ -97.862257, 36.402842 ], "pop" : 22487, "state" : "OK" } +{ "_id" : "73703", "city" : "ENID", "loc" : [ -97.91569699999999, 36.397509 ], "pop" : 24700, "state" : "OK" } +{ "_id" : "73716", "city" : "ALINE", "loc" : [ -98.457387, 36.505621 ], "pop" : 526, "state" : "OK" } +{ "_id" : "73717", "city" : "ALVA", "loc" : [ -98.672162, 36.801564 ], "pop" : 6376, "state" : "OK" } +{ "_id" : "73718", "city" : "AMES", "loc" : [ -98.181989, 36.242293 ], "pop" : 618, "state" : "OK" } +{ "_id" : "73719", "city" : "AMORITA", "loc" : [ -98.24582100000001, 36.941221 ], "pop" : 178, "state" : "OK" } +{ "_id" : "73720", "city" : "BISON", "loc" : [ -97.880484, 36.196222 ], "pop" : 212, "state" : "OK" } +{ "_id" : "73722", "city" : "BURLINGTON", "loc" : [ -98.42145499999999, 36.903613 ], "pop" : 359, "state" : "OK" } +{ "_id" : "73723", "city" : "BYRON", "loc" : [ -98.244502, 36.879857 ], "pop" : 172, "state" : "OK" } +{ "_id" : "73724", "city" : "CANTON", "loc" : [ -98.57781799999999, 36.037194 ], "pop" : 1293, "state" : "OK" } +{ "_id" : "73725", "city" : "CAPRON", "loc" : [ -98.629891, 36.896812 ], "pop" : 268, "state" : "OK" } +{ "_id" : "73726", "city" : "CARMEN", "loc" : [ -98.457793, 36.584206 ], "pop" : 642, "state" : "OK" } +{ "_id" : "73727", "city" : "CARRIER", "loc" : [ -97.99968800000001, 36.518892 ], "pop" : 619, "state" : "OK" } +{ "_id" : "73728", "city" : "CHEROKEE", "loc" : [ -98.359375, 36.756376 ], "pop" : 2256, "state" : "OK" } +{ "_id" : "73729", "city" : "CLEO SPRINGS", "loc" : [ -98.442275, 36.408989 ], "pop" : 630, "state" : "OK" } +{ "_id" : "73730", "city" : "COVINGTON", "loc" : [ -97.575163, 36.309944 ], "pop" : 1017, "state" : "OK" } +{ "_id" : "73731", "city" : "DACOMA", "loc" : [ -98.594202, 36.660604 ], "pop" : 351, "state" : "OK" } +{ "_id" : "73733", "city" : "DOUGLAS", "loc" : [ -97.689626, 36.248138 ], "pop" : 314, "state" : "OK" } +{ "_id" : "73734", "city" : "DOVER", "loc" : [ -97.906677, 35.984761 ], "pop" : 580, "state" : "OK" } +{ "_id" : "73735", "city" : "DRUMMOND", "loc" : [ -98.03584600000001, 36.284142 ], "pop" : 896, "state" : "OK" } +{ "_id" : "73736", "city" : "FAIRMONT", "loc" : [ -97.711493, 36.391614 ], "pop" : 701, "state" : "OK" } +{ "_id" : "73737", "city" : "ORIENTA", "loc" : [ -98.506271, 36.265981 ], "pop" : 3964, "state" : "OK" } +{ "_id" : "73738", "city" : "GARBER", "loc" : [ -97.57889900000001, 36.439184 ], "pop" : 1296, "state" : "OK" } +{ "_id" : "73739", "city" : "GOLTRY", "loc" : [ -98.153978, 36.531364 ], "pop" : 436, "state" : "OK" } +{ "_id" : "73741", "city" : "HELENA", "loc" : [ -98.27781899999999, 36.54375 ], "pop" : 1365, "state" : "OK" } +{ "_id" : "73742", "city" : "HENNESSEY", "loc" : [ -97.892595, 36.086848 ], "pop" : 4006, "state" : "OK" } +{ "_id" : "73744", "city" : "HITCHCOCK", "loc" : [ -98.331535, 35.971209 ], "pop" : 231, "state" : "OK" } +{ "_id" : "73747", "city" : "ISABELLA", "loc" : [ -98.337446, 36.23407 ], "pop" : 416, "state" : "OK" } +{ "_id" : "73749", "city" : "JET", "loc" : [ -98.172121, 36.692917 ], "pop" : 526, "state" : "OK" } +{ "_id" : "73750", "city" : "KINGFISHER", "loc" : [ -97.947293, 35.863613 ], "pop" : 6323, "state" : "OK" } +{ "_id" : "73753", "city" : "KREMLIN", "loc" : [ -97.854186, 36.520735 ], "pop" : 971, "state" : "OK" } +{ "_id" : "73754", "city" : "LAHOMA", "loc" : [ -98.072738, 36.385005 ], "pop" : 1275, "state" : "OK" } +{ "_id" : "73755", "city" : "LONGDALE", "loc" : [ -98.549966, 36.121233 ], "pop" : 668, "state" : "OK" } +{ "_id" : "73756", "city" : "LOYAL", "loc" : [ -98.115516, 35.970529 ], "pop" : 132, "state" : "OK" } +{ "_id" : "73757", "city" : "LUCIEN", "loc" : [ -97.452574, 36.275327 ], "pop" : 120, "state" : "OK" } +{ "_id" : "73758", "city" : "MANCHESTER", "loc" : [ -98.03825999999999, 36.9744 ], "pop" : 206, "state" : "OK" } +{ "_id" : "73759", "city" : "MEDFORD", "loc" : [ -97.720215, 36.814195 ], "pop" : 2027, "state" : "OK" } +{ "_id" : "73760", "city" : "MENO", "loc" : [ -98.163501, 36.381497 ], "pop" : 455, "state" : "OK" } +{ "_id" : "73761", "city" : "NASH", "loc" : [ -98.025764, 36.696146 ], "pop" : 647, "state" : "OK" } +{ "_id" : "73762", "city" : "OKARCHE", "loc" : [ -97.92999, 35.750158 ], "pop" : 1703, "state" : "OK" } +{ "_id" : "73763", "city" : "OKEENE", "loc" : [ -98.325422, 36.11646 ], "pop" : 1899, "state" : "OK" } +{ "_id" : "73764", "city" : "OMEGA", "loc" : [ -98.18634400000001, 35.850653 ], "pop" : 60, "state" : "OK" } +{ "_id" : "73766", "city" : "POND CREEK", "loc" : [ -97.801903, 36.664281 ], "pop" : 1173, "state" : "OK" } +{ "_id" : "73768", "city" : "RINGWOOD", "loc" : [ -98.270639, 36.375293 ], "pop" : 1362, "state" : "OK" } +{ "_id" : "73770", "city" : "SOUTHARD", "loc" : [ -98.446456, 36.074706 ], "pop" : 8, "state" : "OK" } +{ "_id" : "73771", "city" : "WAKITA", "loc" : [ -97.94268700000001, 36.875333 ], "pop" : 684, "state" : "OK" } +{ "_id" : "73772", "city" : "WATONGA", "loc" : [ -98.41748699999999, 35.853762 ], "pop" : 5042, "state" : "OK" } +{ "_id" : "73773", "city" : "WAUKOMIS", "loc" : [ -97.89957800000001, 36.278057 ], "pop" : 1704, "state" : "OK" } +{ "_id" : "73801", "city" : "WOODWARD", "loc" : [ -99.402016, 36.426784 ], "pop" : 14279, "state" : "OK" } +{ "_id" : "73832", "city" : "HARMON", "loc" : [ -99.73266, 36.120524 ], "pop" : 1353, "state" : "OK" } +{ "_id" : "73834", "city" : "SELMAN", "loc" : [ -99.604816, 36.835901 ], "pop" : 1957, "state" : "OK" } +{ "_id" : "73835", "city" : "CAMARGO", "loc" : [ -99.27810100000001, 36.021235 ], "pop" : 233, "state" : "OK" } +{ "_id" : "73838", "city" : "CHESTER", "loc" : [ -98.884078, 36.252841 ], "pop" : 561, "state" : "OK" } +{ "_id" : "73840", "city" : "FARGO", "loc" : [ -99.65060200000001, 36.40525 ], "pop" : 692, "state" : "OK" } +{ "_id" : "73841", "city" : "FORT SUPPLY", "loc" : [ -99.526797, 36.564556 ], "pop" : 1222, "state" : "OK" } +{ "_id" : "73842", "city" : "FREEDOM", "loc" : [ -99.131922, 36.809036 ], "pop" : 532, "state" : "OK" } +{ "_id" : "73843", "city" : "GAGE", "loc" : [ -99.760003, 36.317996 ], "pop" : 567, "state" : "OK" } +{ "_id" : "73844", "city" : "GATE", "loc" : [ -100.073386, 36.875679 ], "pop" : 323, "state" : "OK" } +{ "_id" : "73847", "city" : "KNOWLES", "loc" : [ -100.217867, 36.839316 ], "pop" : 49, "state" : "OK" } +{ "_id" : "73848", "city" : "LAVERNE", "loc" : [ -99.891766, 36.70625 ], "pop" : 1747, "state" : "OK" } +{ "_id" : "73849", "city" : "LOGAN", "loc" : [ -100.167934, 36.635554 ], "pop" : 467, "state" : "OK" } +{ "_id" : "73851", "city" : "MAY", "loc" : [ -99.72469, 36.62673 ], "pop" : 88, "state" : "OK" } +{ "_id" : "73852", "city" : "MOORELAND", "loc" : [ -99.18321, 36.442828 ], "pop" : 2047, "state" : "OK" } +{ "_id" : "73853", "city" : "MUTUAL", "loc" : [ -99.114492, 36.213954 ], "pop" : 262, "state" : "OK" } +{ "_id" : "73855", "city" : "ROSSTON", "loc" : [ -99.90025300000001, 36.878915 ], "pop" : 271, "state" : "OK" } +{ "_id" : "73857", "city" : "SHARON", "loc" : [ -99.35873599999999, 36.269872 ], "pop" : 1166, "state" : "OK" } +{ "_id" : "73858", "city" : "SHATTUCK", "loc" : [ -99.87930299999999, 36.288922 ], "pop" : 1886, "state" : "OK" } +{ "_id" : "73859", "city" : "VICI", "loc" : [ -99.267004, 36.137168 ], "pop" : 1333, "state" : "OK" } +{ "_id" : "73860", "city" : "WAYNOKA", "loc" : [ -98.84874600000001, 36.585788 ], "pop" : 1516, "state" : "OK" } +{ "_id" : "73931", "city" : "BALKO", "loc" : [ -100.710329, 36.599607 ], "pop" : 826, "state" : "OK" } +{ "_id" : "73932", "city" : "ELMWOOD", "loc" : [ -100.532938, 36.795562 ], "pop" : 2128, "state" : "OK" } +{ "_id" : "73933", "city" : "BOISE CITY", "loc" : [ -102.535519, 36.728328 ], "pop" : 2064, "state" : "OK" } +{ "_id" : "73937", "city" : "FELT", "loc" : [ -102.797422, 36.566569 ], "pop" : 210, "state" : "OK" } +{ "_id" : "73938", "city" : "FORGAN", "loc" : [ -100.540875, 36.908588 ], "pop" : 688, "state" : "OK" } +{ "_id" : "73939", "city" : "GOODWELL", "loc" : [ -101.71369, 36.674382 ], "pop" : 1857, "state" : "OK" } +{ "_id" : "73942", "city" : "GUYMON", "loc" : [ -101.47778, 36.696052 ], "pop" : 9387, "state" : "OK" } +{ "_id" : "73944", "city" : "HARDESTY", "loc" : [ -101.153944, 36.601754 ], "pop" : 450, "state" : "OK" } +{ "_id" : "73945", "city" : "OPTIMA", "loc" : [ -101.190683, 36.847981 ], "pop" : 2585, "state" : "OK" } +{ "_id" : "73946", "city" : "KENTON", "loc" : [ -102.912421, 36.855639 ], "pop" : 108, "state" : "OK" } +{ "_id" : "73947", "city" : "KEYES", "loc" : [ -102.236063, 36.800316 ], "pop" : 781, "state" : "OK" } +{ "_id" : "73949", "city" : "TEXHOMA", "loc" : [ -101.839351, 36.52529 ], "pop" : 1057, "state" : "OK" } +{ "_id" : "73950", "city" : "BAKER", "loc" : [ -100.869028, 36.909012 ], "pop" : 1542, "state" : "OK" } +{ "_id" : "73951", "city" : "TYRONE", "loc" : [ -101.059408, 36.95577 ], "pop" : 1221, "state" : "OK" } +{ "_id" : "74002", "city" : "BARNSDALL", "loc" : [ -96.131789, 36.542866 ], "pop" : 2936, "state" : "OK" } +{ "_id" : "74003", "city" : "BARTLESVILLE", "loc" : [ -95.992091, 36.743956 ], "pop" : 14990, "state" : "OK" } +{ "_id" : "74006", "city" : "BARTLESVILLE", "loc" : [ -95.92513, 36.736646 ], "pop" : 23075, "state" : "OK" } +{ "_id" : "74008", "city" : "BIXBY", "loc" : [ -95.872895, 35.917291 ], "pop" : 7505, "state" : "OK" } +{ "_id" : "74010", "city" : "BRISTOW", "loc" : [ -96.375838, 35.820904 ], "pop" : 7361, "state" : "OK" } +{ "_id" : "74011", "city" : "BROKEN ARROW", "loc" : [ -95.81433199999999, 35.990812 ], "pop" : 23493, "state" : "OK" } +{ "_id" : "74012", "city" : "BROKEN ARROW", "loc" : [ -95.807863, 36.04466 ], "pop" : 35399, "state" : "OK" } +{ "_id" : "74014", "city" : "BROKEN ARROW", "loc" : [ -95.722269, 36.054435 ], "pop" : 17246, "state" : "OK" } +{ "_id" : "74015", "city" : "CATOOSA", "loc" : [ -95.727321, 36.17208 ], "pop" : 7103, "state" : "OK" } +{ "_id" : "74016", "city" : "CHELSEA", "loc" : [ -95.448871, 36.535586 ], "pop" : 3789, "state" : "OK" } +{ "_id" : "74017", "city" : "CLAREMORE", "loc" : [ -95.598539, 36.324208 ], "pop" : 29964, "state" : "OK" } +{ "_id" : "74020", "city" : "CLEVELAND", "loc" : [ -96.42300899999999, 36.255334 ], "pop" : 8636, "state" : "OK" } +{ "_id" : "74021", "city" : "COLLINSVILLE", "loc" : [ -95.84688, 36.370069 ], "pop" : 8944, "state" : "OK" } +{ "_id" : "74022", "city" : "COPAN", "loc" : [ -95.912987, 36.906181 ], "pop" : 1965, "state" : "OK" } +{ "_id" : "74023", "city" : "CUSHING", "loc" : [ -96.752628, 35.982174 ], "pop" : 9961, "state" : "OK" } +{ "_id" : "74027", "city" : "DELAWARE", "loc" : [ -95.61809599999999, 36.780382 ], "pop" : 1275, "state" : "OK" } +{ "_id" : "74028", "city" : "DEPEW", "loc" : [ -96.489665, 35.756141 ], "pop" : 2224, "state" : "OK" } +{ "_id" : "74029", "city" : "DEWEY", "loc" : [ -95.93454, 36.80125 ], "pop" : 5217, "state" : "OK" } +{ "_id" : "74030", "city" : "DRUMRIGHT", "loc" : [ -96.519789, 35.993136 ], "pop" : 7886, "state" : "OK" } +{ "_id" : "74032", "city" : "GLENCOE", "loc" : [ -96.91384499999999, 36.215815 ], "pop" : 951, "state" : "OK" } +{ "_id" : "74033", "city" : "GLENPOOL", "loc" : [ -95.999709, 35.959106 ], "pop" : 6575, "state" : "OK" } +{ "_id" : "74035", "city" : "HOMINY", "loc" : [ -96.38784800000001, 36.411068 ], "pop" : 3410, "state" : "OK" } +{ "_id" : "74036", "city" : "INOLA", "loc" : [ -95.520456, 36.150315 ], "pop" : 4268, "state" : "OK" } +{ "_id" : "74037", "city" : "JENKS", "loc" : [ -95.97971099999999, 36.014834 ], "pop" : 8086, "state" : "OK" } +{ "_id" : "74038", "city" : "JENNINGS", "loc" : [ -96.573227, 36.186302 ], "pop" : 766, "state" : "OK" } +{ "_id" : "74039", "city" : "KELLYVILLE", "loc" : [ -96.218009, 35.917075 ], "pop" : 2648, "state" : "OK" } +{ "_id" : "74042", "city" : "LENAPAH", "loc" : [ -95.623316, 36.880055 ], "pop" : 692, "state" : "OK" } +{ "_id" : "74044", "city" : "MANNFORD", "loc" : [ -96.357552, 36.092688 ], "pop" : 6963, "state" : "OK" } +{ "_id" : "74045", "city" : "MARAMEC", "loc" : [ -96.68441, 36.217465 ], "pop" : 290, "state" : "OK" } +{ "_id" : "74047", "city" : "MOUNDS", "loc" : [ -96.068513, 35.912919 ], "pop" : 5412, "state" : "OK" } +{ "_id" : "74048", "city" : "NOWATA", "loc" : [ -95.640421, 36.694565 ], "pop" : 5688, "state" : "OK" } +{ "_id" : "74051", "city" : "OCHELATA", "loc" : [ -95.969143, 36.594655 ], "pop" : 1381, "state" : "OK" } +{ "_id" : "74053", "city" : "OOLOGAH", "loc" : [ -95.72901, 36.443723 ], "pop" : 3369, "state" : "OK" } +{ "_id" : "74054", "city" : "OSAGE", "loc" : [ -96.377411, 36.283156 ], "pop" : 633, "state" : "OK" } +{ "_id" : "74055", "city" : "OWASSO", "loc" : [ -95.82215100000001, 36.286258 ], "pop" : 20281, "state" : "OK" } +{ "_id" : "74056", "city" : "PAWHUSKA", "loc" : [ -96.31209, 36.690424 ], "pop" : 6039, "state" : "OK" } +{ "_id" : "74058", "city" : "PAWNEE", "loc" : [ -96.79227, 36.336197 ], "pop" : 4209, "state" : "OK" } +{ "_id" : "74059", "city" : "PERKINS", "loc" : [ -97.044059, 35.97684 ], "pop" : 3246, "state" : "OK" } +{ "_id" : "74060", "city" : "PRUE", "loc" : [ -96.27007399999999, 36.250125 ], "pop" : 712, "state" : "OK" } +{ "_id" : "74061", "city" : "RAMONA", "loc" : [ -95.89622, 36.575245 ], "pop" : 1628, "state" : "OK" } +{ "_id" : "74062", "city" : "RIPLEY", "loc" : [ -96.89667, 35.998491 ], "pop" : 839, "state" : "OK" } +{ "_id" : "74063", "city" : "SAND SPRINGS", "loc" : [ -96.142601, 36.13414 ], "pop" : 25745, "state" : "OK" } +{ "_id" : "74066", "city" : "SAPULPA", "loc" : [ -96.11060999999999, 36.00297 ], "pop" : 24409, "state" : "OK" } +{ "_id" : "74070", "city" : "SKIATOOK", "loc" : [ -96.012325, 36.372495 ], "pop" : 8619, "state" : "OK" } +{ "_id" : "74072", "city" : "S COFFEYVILLE", "loc" : [ -95.606509, 36.983684 ], "pop" : 1397, "state" : "OK" } +{ "_id" : "74073", "city" : "SPERRY", "loc" : [ -95.980368, 36.29547 ], "pop" : 1979, "state" : "OK" } +{ "_id" : "74074", "city" : "STILLWATER", "loc" : [ -97.060868, 36.104349 ], "pop" : 25259, "state" : "OK" } +{ "_id" : "74075", "city" : "STILLWATER", "loc" : [ -97.063035, 36.139584 ], "pop" : 18955, "state" : "OK" } +{ "_id" : "74079", "city" : "KENDRICK", "loc" : [ -96.684377, 35.782389 ], "pop" : 4898, "state" : "OK" } +{ "_id" : "74080", "city" : "TALALA", "loc" : [ -95.714203, 36.542915 ], "pop" : 883, "state" : "OK" } +{ "_id" : "74081", "city" : "TERLTON", "loc" : [ -96.48756899999999, 36.188856 ], "pop" : 915, "state" : "OK" } +{ "_id" : "74083", "city" : "WANN", "loc" : [ -95.776752, 36.940211 ], "pop" : 977, "state" : "OK" } +{ "_id" : "74084", "city" : "WYNONA", "loc" : [ -96.368891, 36.50847 ], "pop" : 1815, "state" : "OK" } +{ "_id" : "74085", "city" : "YALE", "loc" : [ -96.702209, 36.110065 ], "pop" : 2296, "state" : "OK" } +{ "_id" : "74103", "city" : "TULSA", "loc" : [ -95.99542599999999, 36.153858 ], "pop" : 1105, "state" : "OK" } +{ "_id" : "74104", "city" : "TULSA", "loc" : [ -95.952566, 36.146446 ], "pop" : 13247, "state" : "OK" } +{ "_id" : "74105", "city" : "TULSA", "loc" : [ -95.96554399999999, 36.094808 ], "pop" : 29466, "state" : "OK" } +{ "_id" : "74106", "city" : "TULSA", "loc" : [ -95.985956, 36.188296 ], "pop" : 18108, "state" : "OK" } +{ "_id" : "74107", "city" : "TULSA", "loc" : [ -96.02444800000001, 36.104199 ], "pop" : 18899, "state" : "OK" } +{ "_id" : "74108", "city" : "TULSA", "loc" : [ -95.792311, 36.149893 ], "pop" : 8018, "state" : "OK" } +{ "_id" : "74110", "city" : "TULSA", "loc" : [ -95.95249200000001, 36.180296 ], "pop" : 14224, "state" : "OK" } +{ "_id" : "74112", "city" : "TULSA", "loc" : [ -95.90703600000001, 36.147039 ], "pop" : 21754, "state" : "OK" } +{ "_id" : "74114", "city" : "TULSA", "loc" : [ -95.94079600000001, 36.126152 ], "pop" : 17190, "state" : "OK" } +{ "_id" : "74115", "city" : "TULSA", "loc" : [ -95.91118299999999, 36.175408 ], "pop" : 22100, "state" : "OK" } +{ "_id" : "74116", "city" : "TULSA", "loc" : [ -95.847695, 36.174994 ], "pop" : 2067, "state" : "OK" } +{ "_id" : "74117", "city" : "TULSA", "loc" : [ -95.910768, 36.27949 ], "pop" : 824, "state" : "OK" } +{ "_id" : "74119", "city" : "TULSA", "loc" : [ -95.990194, 36.140688 ], "pop" : 4059, "state" : "OK" } +{ "_id" : "74120", "city" : "TULSA", "loc" : [ -95.973373, 36.144228 ], "pop" : 5612, "state" : "OK" } +{ "_id" : "74126", "city" : "TULSA", "loc" : [ -95.99311299999999, 36.238288 ], "pop" : 13636, "state" : "OK" } +{ "_id" : "74127", "city" : "TULSA", "loc" : [ -96.03107, 36.157636 ], "pop" : 17336, "state" : "OK" } +{ "_id" : "74128", "city" : "TULSA", "loc" : [ -95.851377, 36.145927 ], "pop" : 12260, "state" : "OK" } +{ "_id" : "74129", "city" : "TULSA", "loc" : [ -95.865354, 36.125928 ], "pop" : 17278, "state" : "OK" } +{ "_id" : "74130", "city" : "TULSA", "loc" : [ -95.959649, 36.239481 ], "pop" : 2553, "state" : "OK" } +{ "_id" : "74131", "city" : "TULSA", "loc" : [ -96.06022900000001, 36.05566 ], "pop" : 4057, "state" : "OK" } +{ "_id" : "74132", "city" : "TULSA", "loc" : [ -96.025104, 36.063971 ], "pop" : 5290, "state" : "OK" } +{ "_id" : "74133", "city" : "TULSA", "loc" : [ -95.884062, 36.046717 ], "pop" : 30499, "state" : "OK" } +{ "_id" : "74134", "city" : "TULSA", "loc" : [ -95.822472, 36.116223 ], "pop" : 12607, "state" : "OK" } +{ "_id" : "74135", "city" : "TULSA", "loc" : [ -95.922805, 36.097603 ], "pop" : 21783, "state" : "OK" } +{ "_id" : "74136", "city" : "TULSA", "loc" : [ -95.945178, 36.060548 ], "pop" : 29192, "state" : "OK" } +{ "_id" : "74137", "city" : "TULSA", "loc" : [ -95.93059700000001, 36.028426 ], "pop" : 15434, "state" : "OK" } +{ "_id" : "74145", "city" : "TULSA", "loc" : [ -95.885576, 36.093433 ], "pop" : 17509, "state" : "OK" } +{ "_id" : "74146", "city" : "TULSA", "loc" : [ -95.85061, 36.109293 ], "pop" : 12965, "state" : "OK" } +{ "_id" : "74301", "city" : "VINITA", "loc" : [ -95.138164, 36.633353 ], "pop" : 8987, "state" : "OK" } +{ "_id" : "74330", "city" : "ADAIR", "loc" : [ -95.27319900000001, 36.411453 ], "pop" : 4938, "state" : "OK" } +{ "_id" : "74331", "city" : "BERNICE", "loc" : [ -94.90749099999999, 36.630072 ], "pop" : 5352, "state" : "OK" } +{ "_id" : "74332", "city" : "BIG CABIN", "loc" : [ -95.274736, 36.607931 ], "pop" : 2634, "state" : "OK" } +{ "_id" : "74333", "city" : "BLUEJACKET", "loc" : [ -95.101844, 36.797453 ], "pop" : 1005, "state" : "OK" } +{ "_id" : "74337", "city" : "CHOUTEAU", "loc" : [ -95.34157399999999, 36.166924 ], "pop" : 3763, "state" : "OK" } +{ "_id" : "74338", "city" : "COLCORD", "loc" : [ -94.654675, 36.233349 ], "pop" : 4202, "state" : "OK" } +{ "_id" : "74339", "city" : "COMMERCE", "loc" : [ -94.872983, 36.933063 ], "pop" : 2624, "state" : "OK" } +{ "_id" : "74342", "city" : "EUCHA", "loc" : [ -94.92300299999999, 36.398709 ], "pop" : 2935, "state" : "OK" } +{ "_id" : "74343", "city" : "FAIRLAND", "loc" : [ -94.827934, 36.74178 ], "pop" : 2003, "state" : "OK" } +{ "_id" : "74344", "city" : "GROVE", "loc" : [ -94.756536, 36.592869 ], "pop" : 8408, "state" : "OK" } +{ "_id" : "74346", "city" : "JAY", "loc" : [ -94.776309, 36.436343 ], "pop" : 5073, "state" : "OK" } +{ "_id" : "74347", "city" : "KANSAS", "loc" : [ -94.81141599999999, 36.216114 ], "pop" : 1594, "state" : "OK" } +{ "_id" : "74352", "city" : "LOCUST GROVE", "loc" : [ -95.168854, 36.181902 ], "pop" : 5856, "state" : "OK" } +{ "_id" : "74354", "city" : "MIAMI", "loc" : [ -94.87186, 36.876377 ], "pop" : 16679, "state" : "OK" } +{ "_id" : "74359", "city" : "OAKS", "loc" : [ -94.850206, 36.168663 ], "pop" : 327, "state" : "OK" } +{ "_id" : "74360", "city" : "PICHER", "loc" : [ -94.817301, 36.979961 ], "pop" : 3019, "state" : "OK" } +{ "_id" : "74361", "city" : "PRYOR", "loc" : [ -95.31294200000001, 36.292112 ], "pop" : 11669, "state" : "OK" } +{ "_id" : "74363", "city" : "QUAPAW", "loc" : [ -94.742983, 36.928248 ], "pop" : 2465, "state" : "OK" } +{ "_id" : "74364", "city" : "LEACH", "loc" : [ -94.993362, 36.211263 ], "pop" : 1222, "state" : "OK" } +{ "_id" : "74365", "city" : "SALINA", "loc" : [ -95.11577200000001, 36.311597 ], "pop" : 3432, "state" : "OK" } +{ "_id" : "74366", "city" : "SPAVINAW", "loc" : [ -95.028465, 36.415548 ], "pop" : 1252, "state" : "OK" } +{ "_id" : "74367", "city" : "STRANG", "loc" : [ -95.070768, 36.463861 ], "pop" : 2240, "state" : "OK" } +{ "_id" : "74368", "city" : "TWIN OAKS", "loc" : [ -94.854444, 36.191616 ], "pop" : 435, "state" : "OK" } +{ "_id" : "74369", "city" : "WELCH", "loc" : [ -95.12945499999999, 36.902022 ], "pop" : 1746, "state" : "OK" } +{ "_id" : "74370", "city" : "WYANDOTTE", "loc" : [ -94.700239, 36.779616 ], "pop" : 2500, "state" : "OK" } +{ "_id" : "74401", "city" : "MUSKOGEE", "loc" : [ -95.375491, 35.730661 ], "pop" : 21813, "state" : "OK" } +{ "_id" : "74403", "city" : "MUSKOGEE", "loc" : [ -95.34490700000001, 35.741057 ], "pop" : 24787, "state" : "OK" } +{ "_id" : "74421", "city" : "BEGGS", "loc" : [ -96.026398, 35.789595 ], "pop" : 4590, "state" : "OK" } +{ "_id" : "74422", "city" : "BOYNTON", "loc" : [ -95.66003600000001, 35.657652 ], "pop" : 762, "state" : "OK" } +{ "_id" : "74423", "city" : "BRAGGS", "loc" : [ -95.203326, 35.657395 ], "pop" : 671, "state" : "OK" } +{ "_id" : "74425", "city" : "CANADIAN", "loc" : [ -95.653042, 35.159258 ], "pop" : 1339, "state" : "OK" } +{ "_id" : "74426", "city" : "CHECOTAH", "loc" : [ -95.535038, 35.435786 ], "pop" : 9683, "state" : "OK" } +{ "_id" : "74427", "city" : "COOKSON", "loc" : [ -94.913205, 35.711622 ], "pop" : 1312, "state" : "OK" } +{ "_id" : "74428", "city" : "COUNCIL HILL", "loc" : [ -95.711326, 35.532175 ], "pop" : 992, "state" : "OK" } +{ "_id" : "74429", "city" : "COWETA", "loc" : [ -95.652597, 35.957835 ], "pop" : 9873, "state" : "OK" } +{ "_id" : "74432", "city" : "EUFAULA", "loc" : [ -95.647227, 35.29114 ], "pop" : 5069, "state" : "OK" } +{ "_id" : "74434", "city" : "FORT GIBSON", "loc" : [ -95.22973399999999, 35.794285 ], "pop" : 5233, "state" : "OK" } +{ "_id" : "74435", "city" : "GORE", "loc" : [ -95.10947400000001, 35.541772 ], "pop" : 1167, "state" : "OK" } +{ "_id" : "74436", "city" : "HASKELL", "loc" : [ -95.683981, 35.810752 ], "pop" : 3467, "state" : "OK" } +{ "_id" : "74437", "city" : "HOFFMAN", "loc" : [ -95.976187, 35.454476 ], "pop" : 10729, "state" : "OK" } +{ "_id" : "74440", "city" : "HOYT", "loc" : [ -95.29938199999999, 35.268466 ], "pop" : 65, "state" : "OK" } +{ "_id" : "74441", "city" : "HULBERT", "loc" : [ -95.16509499999999, 35.925415 ], "pop" : 4597, "state" : "OK" } +{ "_id" : "74442", "city" : "INDIANOLA", "loc" : [ -95.784479, 35.093724 ], "pop" : 2014, "state" : "OK" } +{ "_id" : "74445", "city" : "MORRIS", "loc" : [ -95.83186000000001, 35.661877 ], "pop" : 3028, "state" : "OK" } +{ "_id" : "74447", "city" : "OKMULGEE", "loc" : [ -95.96966999999999, 35.628805 ], "pop" : 18109, "state" : "OK" } +{ "_id" : "74450", "city" : "OKTAHA", "loc" : [ -95.485591, 35.625014 ], "pop" : 2624, "state" : "OK" } +{ "_id" : "74451", "city" : "PARK HILL", "loc" : [ -94.982173, 35.797686 ], "pop" : 4003, "state" : "OK" } +{ "_id" : "74452", "city" : "PEGGS", "loc" : [ -94.991928, 36.059061 ], "pop" : 3896, "state" : "OK" } +{ "_id" : "74454", "city" : "PORTER", "loc" : [ -95.50819300000001, 35.85674 ], "pop" : 2705, "state" : "OK" } +{ "_id" : "74455", "city" : "PORUM", "loc" : [ -95.260661, 35.363059 ], "pop" : 2976, "state" : "OK" } +{ "_id" : "74457", "city" : "PROCTOR", "loc" : [ -94.744159, 35.967111 ], "pop" : 443, "state" : "OK" } +{ "_id" : "74461", "city" : "STIDHAM", "loc" : [ -95.705575, 35.381389 ], "pop" : 286, "state" : "OK" } +{ "_id" : "74462", "city" : "STIGLER", "loc" : [ -95.10706999999999, 35.268561 ], "pop" : 4932, "state" : "OK" } +{ "_id" : "74463", "city" : "TAFT", "loc" : [ -95.54935999999999, 35.758059 ], "pop" : 1822, "state" : "OK" } +{ "_id" : "74464", "city" : "TAHLEQUAH", "loc" : [ -94.97873, 35.909385 ], "pop" : 17092, "state" : "OK" } +{ "_id" : "74467", "city" : "WAGONER", "loc" : [ -95.353956, 35.954864 ], "pop" : 13813, "state" : "OK" } +{ "_id" : "74469", "city" : "WARNER", "loc" : [ -95.306434, 35.494546 ], "pop" : 2501, "state" : "OK" } +{ "_id" : "74470", "city" : "WEBBERS FALLS", "loc" : [ -95.165881, 35.513787 ], "pop" : 1530, "state" : "OK" } +{ "_id" : "74471", "city" : "WELLING", "loc" : [ -94.865326, 35.881917 ], "pop" : 3149, "state" : "OK" } +{ "_id" : "74472", "city" : "WHITEFIELD", "loc" : [ -95.237493, 35.25114 ], "pop" : 283, "state" : "OK" } +{ "_id" : "74501", "city" : "MCALESTER", "loc" : [ -95.759168, 34.926233 ], "pop" : 23786, "state" : "OK" } +{ "_id" : "74523", "city" : "ANTLERS", "loc" : [ -95.625412, 34.234923 ], "pop" : 5432, "state" : "OK" } +{ "_id" : "74525", "city" : "ATOKA", "loc" : [ -96.14182700000001, 34.34451 ], "pop" : 7450, "state" : "OK" } +{ "_id" : "74528", "city" : "BLANCO", "loc" : [ -95.792069, 34.762151 ], "pop" : 289, "state" : "OK" } +{ "_id" : "74531", "city" : "CALVIN", "loc" : [ -96.270972, 34.877987 ], "pop" : 779, "state" : "OK" } +{ "_id" : "74533", "city" : "CANEY", "loc" : [ -96.258364, 34.222112 ], "pop" : 1443, "state" : "OK" } +{ "_id" : "74534", "city" : "CENTRAHOMA", "loc" : [ -96.33858499999999, 34.606642 ], "pop" : 435, "state" : "OK" } +{ "_id" : "74536", "city" : "CLAYTON", "loc" : [ -95.379981, 34.590591 ], "pop" : 1635, "state" : "OK" } +{ "_id" : "74538", "city" : "COALGATE", "loc" : [ -96.21672599999999, 34.534408 ], "pop" : 3908, "state" : "OK" } +{ "_id" : "74540", "city" : "DAISY", "loc" : [ -95.70877299999999, 34.538357 ], "pop" : 147, "state" : "OK" } +{ "_id" : "74542", "city" : "FARRIS", "loc" : [ -95.841368, 34.255833 ], "pop" : 1226, "state" : "OK" } +{ "_id" : "74543", "city" : "FINLEY", "loc" : [ -95.53851899999999, 34.340654 ], "pop" : 149, "state" : "OK" } +{ "_id" : "74547", "city" : "HARTSHORNE", "loc" : [ -95.573972, 34.84517 ], "pop" : 5133, "state" : "OK" } +{ "_id" : "74548", "city" : "HAYWOOD", "loc" : [ -95.96715399999999, 34.951102 ], "pop" : 2185, "state" : "OK" } +{ "_id" : "74549", "city" : "HONOBIA", "loc" : [ -94.991557, 34.592604 ], "pop" : 125, "state" : "OK" } +{ "_id" : "74552", "city" : "KINTA", "loc" : [ -95.317545, 35.197065 ], "pop" : 2676, "state" : "OK" } +{ "_id" : "74553", "city" : "KIOWA", "loc" : [ -95.93283599999999, 34.727755 ], "pop" : 1390, "state" : "OK" } +{ "_id" : "74555", "city" : "LANE", "loc" : [ -95.968515, 34.269122 ], "pop" : 1001, "state" : "OK" } +{ "_id" : "74557", "city" : "MOYERS", "loc" : [ -95.663881, 34.338648 ], "pop" : 280, "state" : "OK" } +{ "_id" : "74558", "city" : "NASHOBA", "loc" : [ -95.20746699999999, 34.507204 ], "pop" : 534, "state" : "OK" } +{ "_id" : "74560", "city" : "PITTSBURG", "loc" : [ -95.84390500000001, 34.69748 ], "pop" : 536, "state" : "OK" } +{ "_id" : "74561", "city" : "QUINTON", "loc" : [ -95.467085, 35.154666 ], "pop" : 3909, "state" : "OK" } +{ "_id" : "74562", "city" : "RATTAN", "loc" : [ -95.344235, 34.245417 ], "pop" : 1648, "state" : "OK" } +{ "_id" : "74563", "city" : "RED OAK", "loc" : [ -95.09043200000001, 34.942174 ], "pop" : 2167, "state" : "OK" } +{ "_id" : "74567", "city" : "SNOW", "loc" : [ -95.42783300000001, 34.377963 ], "pop" : 317, "state" : "OK" } +{ "_id" : "74569", "city" : "STRINGTOWN", "loc" : [ -96.00024500000001, 34.467597 ], "pop" : 755, "state" : "OK" } +{ "_id" : "74570", "city" : "STUART", "loc" : [ -96.138105, 34.882581 ], "pop" : 751, "state" : "OK" } +{ "_id" : "74571", "city" : "TALIHINA", "loc" : [ -94.99781299999999, 34.73812 ], "pop" : 2930, "state" : "OK" } +{ "_id" : "74572", "city" : "TUPELO", "loc" : [ -96.42736499999999, 34.559809 ], "pop" : 1388, "state" : "OK" } +{ "_id" : "74574", "city" : "TUSKAHOMA", "loc" : [ -95.220798, 34.734778 ], "pop" : 2491, "state" : "OK" } +{ "_id" : "74576", "city" : "WARDVILLE", "loc" : [ -96.02095799999999, 34.568791 ], "pop" : 756, "state" : "OK" } +{ "_id" : "74577", "city" : "WHITESBORO", "loc" : [ -94.86997700000001, 34.684311 ], "pop" : 219, "state" : "OK" } +{ "_id" : "74578", "city" : "WILBURTON", "loc" : [ -95.33889600000001, 34.912805 ], "pop" : 5866, "state" : "OK" } +{ "_id" : "74601", "city" : "PONCA CITY", "loc" : [ -97.07840899999999, 36.703104 ], "pop" : 24347, "state" : "OK" } +{ "_id" : "74604", "city" : "PONCA CITY", "loc" : [ -97.04544300000001, 36.729916 ], "pop" : 9327, "state" : "OK" } +{ "_id" : "74630", "city" : "BILLINGS", "loc" : [ -97.41888899999999, 36.524609 ], "pop" : 855, "state" : "OK" } +{ "_id" : "74631", "city" : "BLACKWELL", "loc" : [ -97.28669499999999, 36.800574 ], "pop" : 8480, "state" : "OK" } +{ "_id" : "74632", "city" : "BRAMAN", "loc" : [ -97.30823100000001, 36.933054 ], "pop" : 746, "state" : "OK" } +{ "_id" : "74633", "city" : "BURBANK", "loc" : [ -96.786873, 36.696583 ], "pop" : 641, "state" : "OK" } +{ "_id" : "74636", "city" : "DEER CREEK", "loc" : [ -97.513581, 36.80482 ], "pop" : 260, "state" : "OK" } +{ "_id" : "74637", "city" : "FAIRFAX", "loc" : [ -96.699691, 36.557687 ], "pop" : 2307, "state" : "OK" } +{ "_id" : "74640", "city" : "HUNTER", "loc" : [ -97.64250699999999, 36.560342 ], "pop" : 533, "state" : "OK" } +{ "_id" : "74641", "city" : "KAW CITY", "loc" : [ -96.89886199999999, 36.786663 ], "pop" : 876, "state" : "OK" } +{ "_id" : "74643", "city" : "LAMONT", "loc" : [ -97.56009299999999, 36.693884 ], "pop" : 650, "state" : "OK" } +{ "_id" : "74644", "city" : "MARLAND", "loc" : [ -97.09759200000001, 36.559067 ], "pop" : 639, "state" : "OK" } +{ "_id" : "74646", "city" : "NARDIN", "loc" : [ -97.432458, 36.815517 ], "pop" : 262, "state" : "OK" } +{ "_id" : "74647", "city" : "PECKHAM", "loc" : [ -97.05132999999999, 36.887425 ], "pop" : 3274, "state" : "OK" } +{ "_id" : "74650", "city" : "RALSTON", "loc" : [ -96.775481, 36.499228 ], "pop" : 756, "state" : "OK" } +{ "_id" : "74651", "city" : "RED ROCK", "loc" : [ -97.16402100000001, 36.474754 ], "pop" : 775, "state" : "OK" } +{ "_id" : "74652", "city" : "FORAKER", "loc" : [ -96.67496199999999, 36.814915 ], "pop" : 1143, "state" : "OK" } +{ "_id" : "74653", "city" : "TONKAWA", "loc" : [ -97.30634000000001, 36.68062 ], "pop" : 4002, "state" : "OK" } +{ "_id" : "74701", "city" : "DURANT", "loc" : [ -96.384705, 34.00609 ], "pop" : 17179, "state" : "OK" } +{ "_id" : "74723", "city" : "BENNINGTON", "loc" : [ -96.01877399999999, 33.977085 ], "pop" : 1411, "state" : "OK" } +{ "_id" : "74724", "city" : "BETHEL", "loc" : [ -94.87812599999999, 34.358443 ], "pop" : 1468, "state" : "OK" } +{ "_id" : "74726", "city" : "BOKCHITO", "loc" : [ -96.162097, 33.985913 ], "pop" : 1812, "state" : "OK" } +{ "_id" : "74727", "city" : "BOSWELL", "loc" : [ -95.84031299999999, 34.024475 ], "pop" : 2162, "state" : "OK" } +{ "_id" : "74728", "city" : "BROKEN BOW", "loc" : [ -94.76229600000001, 34.026991 ], "pop" : 10436, "state" : "OK" } +{ "_id" : "74729", "city" : "CADDO", "loc" : [ -96.260017, 34.115688 ], "pop" : 1474, "state" : "OK" } +{ "_id" : "74730", "city" : "CALERA", "loc" : [ -96.410205, 33.928872 ], "pop" : 2448, "state" : "OK" } +{ "_id" : "74731", "city" : "CARTWRIGHT", "loc" : [ -96.55190899999999, 33.884552 ], "pop" : 1796, "state" : "OK" } +{ "_id" : "74733", "city" : "COLBERT", "loc" : [ -96.495345, 33.857516 ], "pop" : 2267, "state" : "OK" } +{ "_id" : "74734", "city" : "EAGLETOWN", "loc" : [ -94.559557, 34.036358 ], "pop" : 1237, "state" : "OK" } +{ "_id" : "74735", "city" : "FORT TOWSON", "loc" : [ -95.253015, 34.051968 ], "pop" : 2249, "state" : "OK" } +{ "_id" : "74736", "city" : "GARVIN", "loc" : [ -94.93230800000001, 33.920512 ], "pop" : 804, "state" : "OK" } +{ "_id" : "74738", "city" : "GRANT", "loc" : [ -95.489324, 33.930239 ], "pop" : 740, "state" : "OK" } +{ "_id" : "74740", "city" : "TOM", "loc" : [ -94.58177499999999, 33.787507 ], "pop" : 1861, "state" : "OK" } +{ "_id" : "74741", "city" : "HENDRIX", "loc" : [ -96.35813400000001, 33.801582 ], "pop" : 1812, "state" : "OK" } +{ "_id" : "74743", "city" : "HUGO", "loc" : [ -95.513876, 34.011339 ], "pop" : 8804, "state" : "OK" } +{ "_id" : "74745", "city" : "IDABEL", "loc" : [ -94.802012, 33.88512 ], "pop" : 10294, "state" : "OK" } +{ "_id" : "74748", "city" : "KENEFIC", "loc" : [ -96.38866299999999, 34.131377 ], "pop" : 370, "state" : "OK" } +{ "_id" : "74754", "city" : "RINGOLD", "loc" : [ -95.070387, 34.179892 ], "pop" : 97, "state" : "OK" } +{ "_id" : "74755", "city" : "RUFE", "loc" : [ -95.136011, 34.161684 ], "pop" : 244, "state" : "OK" } +{ "_id" : "74756", "city" : "SAWYER", "loc" : [ -95.355833, 34.027726 ], "pop" : 421, "state" : "OK" } +{ "_id" : "74759", "city" : "SOPER", "loc" : [ -95.69156599999999, 34.03659 ], "pop" : 935, "state" : "OK" } +{ "_id" : "74760", "city" : "SPENCERVILLE", "loc" : [ -95.38346799999999, 34.13263 ], "pop" : 246, "state" : "OK" } +{ "_id" : "74764", "city" : "VALLIANT", "loc" : [ -95.068625, 34.009056 ], "pop" : 3875, "state" : "OK" } +{ "_id" : "74766", "city" : "WRIGHT CITY", "loc" : [ -94.99288900000001, 34.079922 ], "pop" : 1879, "state" : "OK" } +{ "_id" : "74801", "city" : "SHAWNEE", "loc" : [ -96.931321, 35.34907 ], "pop" : 40076, "state" : "OK" } +{ "_id" : "74820", "city" : "ADA", "loc" : [ -96.69235999999999, 34.780044 ], "pop" : 24967, "state" : "OK" } +{ "_id" : "74824", "city" : "AGRA", "loc" : [ -96.87794, 35.882548 ], "pop" : 1327, "state" : "OK" } +{ "_id" : "74825", "city" : "ALLEN", "loc" : [ -96.55846200000001, 34.850176 ], "pop" : 4803, "state" : "OK" } +{ "_id" : "74826", "city" : "ASHER", "loc" : [ -96.87632600000001, 34.984862 ], "pop" : 970, "state" : "OK" } +{ "_id" : "74827", "city" : "ATWOOD", "loc" : [ -96.357703, 34.919194 ], "pop" : 723, "state" : "OK" } +{ "_id" : "74829", "city" : "BOLEY", "loc" : [ -96.470386, 35.491328 ], "pop" : 1437, "state" : "OK" } +{ "_id" : "74831", "city" : "BYARS", "loc" : [ -97.099723, 34.890397 ], "pop" : 1133, "state" : "OK" } +{ "_id" : "74832", "city" : "CARNEY", "loc" : [ -97.015942, 35.805381 ], "pop" : 663, "state" : "OK" } +{ "_id" : "74833", "city" : "CASTLE", "loc" : [ -96.379133, 35.473235 ], "pop" : 168, "state" : "OK" } +{ "_id" : "74834", "city" : "CHANDLER", "loc" : [ -96.858266, 35.704253 ], "pop" : 6506, "state" : "OK" } +{ "_id" : "74835", "city" : "CLEARVIEW", "loc" : [ -96.171404, 35.392585 ], "pop" : 227, "state" : "OK" } +{ "_id" : "74839", "city" : "DUSTIN", "loc" : [ -96.057271, 35.251937 ], "pop" : 893, "state" : "OK" } +{ "_id" : "74840", "city" : "EARLSBORO", "loc" : [ -96.80409299999999, 35.262792 ], "pop" : 572, "state" : "OK" } +{ "_id" : "74842", "city" : "FITTSTOWN", "loc" : [ -96.649458, 34.630134 ], "pop" : 759, "state" : "OK" } +{ "_id" : "74843", "city" : "FITZHUGH", "loc" : [ -96.77448699999999, 34.661545 ], "pop" : 201, "state" : "OK" } +{ "_id" : "74845", "city" : "VERNON", "loc" : [ -95.89579500000001, 35.208526 ], "pop" : 638, "state" : "OK" } +{ "_id" : "74848", "city" : "HOLDENVILLE", "loc" : [ -96.37696800000001, 35.083935 ], "pop" : 7471, "state" : "OK" } +{ "_id" : "74849", "city" : "KONAWA", "loc" : [ -96.734279, 34.970824 ], "pop" : 2800, "state" : "OK" } +{ "_id" : "74850", "city" : "LAMAR", "loc" : [ -96.114226, 35.083557 ], "pop" : 225, "state" : "OK" } +{ "_id" : "74851", "city" : "MC LOUD", "loc" : [ -97.105178, 35.41907 ], "pop" : 3334, "state" : "OK" } +{ "_id" : "74852", "city" : "MACOMB", "loc" : [ -97.033964, 35.12052 ], "pop" : 1005, "state" : "OK" } +{ "_id" : "74854", "city" : "MAUD", "loc" : [ -96.762686, 35.129224 ], "pop" : 4144, "state" : "OK" } +{ "_id" : "74855", "city" : "MEEKER", "loc" : [ -96.998052, 35.521111 ], "pop" : 6180, "state" : "OK" } +{ "_id" : "74856", "city" : "MILL CREEK", "loc" : [ -96.788419, 34.309754 ], "pop" : 1510, "state" : "OK" } +{ "_id" : "74857", "city" : "NEWALLA", "loc" : [ -97.197123, 35.373415 ], "pop" : 7768, "state" : "OK" } +{ "_id" : "74859", "city" : "BEARDEN", "loc" : [ -96.306788, 35.447516 ], "pop" : 5792, "state" : "OK" } +{ "_id" : "74860", "city" : "PADEN", "loc" : [ -96.571921, 35.518171 ], "pop" : 1508, "state" : "OK" } +{ "_id" : "74864", "city" : "PRAGUE", "loc" : [ -96.700879, 35.510482 ], "pop" : 4504, "state" : "OK" } +{ "_id" : "74865", "city" : "ROFF", "loc" : [ -96.842313, 34.615294 ], "pop" : 1316, "state" : "OK" } +{ "_id" : "74867", "city" : "SASAKWA", "loc" : [ -96.538706, 34.950982 ], "pop" : 854, "state" : "OK" } +{ "_id" : "74868", "city" : "SEMINOLE", "loc" : [ -96.668307, 35.252095 ], "pop" : 11673, "state" : "OK" } +{ "_id" : "74869", "city" : "SPARKS", "loc" : [ -96.81626900000001, 35.61378 ], "pop" : 330, "state" : "OK" } +{ "_id" : "74871", "city" : "HARDEN CITY", "loc" : [ -96.54289, 34.666194 ], "pop" : 2317, "state" : "OK" } +{ "_id" : "74872", "city" : "STRATFORD", "loc" : [ -96.976277, 34.771412 ], "pop" : 2773, "state" : "OK" } +{ "_id" : "74873", "city" : "TECUMSEH", "loc" : [ -96.966713, 35.25023 ], "pop" : 9203, "state" : "OK" } +{ "_id" : "74875", "city" : "TRYON", "loc" : [ -96.9984, 35.863151 ], "pop" : 1356, "state" : "OK" } +{ "_id" : "74878", "city" : "WANETTE", "loc" : [ -97.0419, 34.998313 ], "pop" : 1288, "state" : "OK" } +{ "_id" : "74880", "city" : "WELEETKA", "loc" : [ -96.113609, 35.341582 ], "pop" : 2133, "state" : "OK" } +{ "_id" : "74881", "city" : "WELLSTON", "loc" : [ -97.059685, 35.675738 ], "pop" : 3452, "state" : "OK" } +{ "_id" : "74882", "city" : "WELTY", "loc" : [ -96.42762, 35.610727 ], "pop" : 286, "state" : "OK" } +{ "_id" : "74883", "city" : "WETUMKA", "loc" : [ -96.242082, 35.239552 ], "pop" : 2181, "state" : "OK" } +{ "_id" : "74884", "city" : "NEW LIMA", "loc" : [ -96.503793, 35.182893 ], "pop" : 8015, "state" : "OK" } +{ "_id" : "74901", "city" : "ARKOMA", "loc" : [ -94.44031099999999, 35.343352 ], "pop" : 2764, "state" : "OK" } +{ "_id" : "74902", "city" : "POCOLA", "loc" : [ -94.476029, 35.243603 ], "pop" : 3575, "state" : "OK" } +{ "_id" : "74930", "city" : "BOKOSHE", "loc" : [ -94.72215799999999, 35.160925 ], "pop" : 3931, "state" : "OK" } +{ "_id" : "74931", "city" : "BUNCH", "loc" : [ -94.734154, 35.735691 ], "pop" : 1656, "state" : "OK" } +{ "_id" : "74932", "city" : "CAMERON", "loc" : [ -94.506015, 35.149355 ], "pop" : 935, "state" : "OK" } +{ "_id" : "74937", "city" : "HEAVENER", "loc" : [ -94.61848999999999, 34.835267 ], "pop" : 5628, "state" : "OK" } +{ "_id" : "74939", "city" : "HODGEN", "loc" : [ -94.63908000000001, 34.753757 ], "pop" : 756, "state" : "OK" } +{ "_id" : "74940", "city" : "HOWE", "loc" : [ -94.657072, 34.929936 ], "pop" : 1352, "state" : "OK" } +{ "_id" : "74941", "city" : "KEOTA", "loc" : [ -94.902822, 35.264541 ], "pop" : 1878, "state" : "OK" } +{ "_id" : "74944", "city" : "MCCURTAIN", "loc" : [ -95.012737, 35.140403 ], "pop" : 1106, "state" : "OK" } +{ "_id" : "74948", "city" : "MULDROW", "loc" : [ -94.633216, 35.401985 ], "pop" : 8185, "state" : "OK" } +{ "_id" : "74949", "city" : "MUSE", "loc" : [ -94.719007, 34.664124 ], "pop" : 183, "state" : "OK" } +{ "_id" : "74953", "city" : "POTEAU", "loc" : [ -94.60960300000001, 35.060561 ], "pop" : 9466, "state" : "OK" } +{ "_id" : "74954", "city" : "ROLAND", "loc" : [ -94.52908499999999, 35.453811 ], "pop" : 7047, "state" : "OK" } +{ "_id" : "74955", "city" : "SALLISAW", "loc" : [ -94.778998, 35.485191 ], "pop" : 11399, "state" : "OK" } +{ "_id" : "74956", "city" : "SHADY POINT", "loc" : [ -94.666534, 35.129333 ], "pop" : 937, "state" : "OK" } +{ "_id" : "74957", "city" : "OCTAVIA", "loc" : [ -94.619117, 34.479056 ], "pop" : 442, "state" : "OK" } +{ "_id" : "74959", "city" : "SPIRO", "loc" : [ -94.626546, 35.249219 ], "pop" : 7368, "state" : "OK" } +{ "_id" : "74960", "city" : "STILWELL", "loc" : [ -94.631322, 35.810703 ], "pop" : 10267, "state" : "OK" } +{ "_id" : "74962", "city" : "VIAN", "loc" : [ -94.988756, 35.540383 ], "pop" : 6030, "state" : "OK" } +{ "_id" : "74963", "city" : "WATSON", "loc" : [ -94.556217, 34.419252 ], "pop" : 797, "state" : "OK" } +{ "_id" : "74964", "city" : "WATTS", "loc" : [ -94.634472, 36.115216 ], "pop" : 2156, "state" : "OK" } +{ "_id" : "74965", "city" : "WESTVILLE", "loc" : [ -94.59262699999999, 35.991226 ], "pop" : 3899, "state" : "OK" } +{ "_id" : "74966", "city" : "WISTER", "loc" : [ -94.783205, 34.955593 ], "pop" : 3656, "state" : "OK" } +{ "_id" : "75002", "city" : "ALLEN", "loc" : [ -96.645433, 33.093383 ], "pop" : 24151, "state" : "TX" } +{ "_id" : "75006", "city" : "CARROLLTON", "loc" : [ -96.882464, 32.965736 ], "pop" : 37699, "state" : "TX" } +{ "_id" : "75007", "city" : "CARROLLTON", "loc" : [ -96.88198800000001, 33.003294 ], "pop" : 54796, "state" : "TX" } +{ "_id" : "75008", "city" : "CARROLLTON", "loc" : [ -96.923197, 33.03524 ], "pop" : 1482, "state" : "TX" } +{ "_id" : "75009", "city" : "CELINA", "loc" : [ -96.767325, 33.310316 ], "pop" : 3373, "state" : "TX" } +{ "_id" : "75010", "city" : "CARROLLTON", "loc" : [ -96.877746, 33.030414 ], "pop" : 4379, "state" : "TX" } +{ "_id" : "75019", "city" : "COPPELL", "loc" : [ -96.98051599999999, 32.96727 ], "pop" : 16862, "state" : "TX" } +{ "_id" : "75020", "city" : "DENISON", "loc" : [ -96.54957400000001, 33.745009 ], "pop" : 27172, "state" : "TX" } +{ "_id" : "75023", "city" : "PLANO", "loc" : [ -96.73645399999999, 33.054972 ], "pop" : 40832, "state" : "TX" } +{ "_id" : "75024", "city" : "PLANO", "loc" : [ -96.784307, 33.075211 ], "pop" : 1439, "state" : "TX" } +{ "_id" : "75025", "city" : "PLANO", "loc" : [ -96.729142, 33.078377 ], "pop" : 8562, "state" : "TX" } +{ "_id" : "75028", "city" : "FLOWER MOUND", "loc" : [ -97.074501, 33.038268 ], "pop" : 16825, "state" : "TX" } +{ "_id" : "75034", "city" : "FRISCO", "loc" : [ -96.824105, 33.149901 ], "pop" : 8045, "state" : "TX" } +{ "_id" : "75038", "city" : "IRVING", "loc" : [ -96.990503, 32.865309 ], "pop" : 20152, "state" : "TX" } +{ "_id" : "75039", "city" : "IRVING", "loc" : [ -96.93887599999999, 32.869669 ], "pop" : 598, "state" : "TX" } +{ "_id" : "75040", "city" : "GARLAND", "loc" : [ -96.624804, 32.922744 ], "pop" : 45359, "state" : "TX" } +{ "_id" : "75041", "city" : "GARLAND", "loc" : [ -96.641115, 32.87937 ], "pop" : 26212, "state" : "TX" } +{ "_id" : "75042", "city" : "GARLAND", "loc" : [ -96.67754499999999, 32.918486 ], "pop" : 31807, "state" : "TX" } +{ "_id" : "75043", "city" : "GARLAND", "loc" : [ -96.59988199999999, 32.856502 ], "pop" : 46620, "state" : "TX" } +{ "_id" : "75044", "city" : "GARLAND", "loc" : [ -96.66538300000001, 32.952228 ], "pop" : 30455, "state" : "TX" } +{ "_id" : "75048", "city" : "SACHSE", "loc" : [ -96.591472, 32.973576 ], "pop" : 5632, "state" : "TX" } +{ "_id" : "75050", "city" : "GRAND PRAIRIE", "loc" : [ -97.01121000000001, 32.76488 ], "pop" : 32148, "state" : "TX" } +{ "_id" : "75051", "city" : "GRAND PRAIRIE", "loc" : [ -97.006916, 32.711471 ], "pop" : 52779, "state" : "TX" } +{ "_id" : "75052", "city" : "GRAND PRAIRIE", "loc" : [ -97.031142, 32.660475 ], "pop" : 15850, "state" : "TX" } +{ "_id" : "75056", "city" : "THE COLONY", "loc" : [ -96.883574, 33.094023 ], "pop" : 22549, "state" : "TX" } +{ "_id" : "75057", "city" : "LEWISVILLE", "loc" : [ -96.999882, 33.053162 ], "pop" : 8052, "state" : "TX" } +{ "_id" : "75058", "city" : "GUNTER", "loc" : [ -96.734103, 33.449513 ], "pop" : 1410, "state" : "TX" } +{ "_id" : "75060", "city" : "IRVING", "loc" : [ -96.959665, 32.80231 ], "pop" : 41001, "state" : "TX" } +{ "_id" : "75061", "city" : "IRVING", "loc" : [ -96.963256, 32.826658 ], "pop" : 42947, "state" : "TX" } +{ "_id" : "75062", "city" : "IRVING", "loc" : [ -96.97402700000001, 32.847854 ], "pop" : 40234, "state" : "TX" } +{ "_id" : "75063", "city" : "IRVING", "loc" : [ -96.959817, 32.924686 ], "pop" : 9527, "state" : "TX" } +{ "_id" : "75065", "city" : "LAKE DALLAS", "loc" : [ -97.023709, 33.121903 ], "pop" : 5452, "state" : "TX" } +{ "_id" : "75067", "city" : "HIGHLAND VILLAGE", "loc" : [ -97.026815, 33.04503 ], "pop" : 46151, "state" : "TX" } +{ "_id" : "75068", "city" : "LAKEWOOD VILLAGE", "loc" : [ -96.967811, 33.178319 ], "pop" : 3952, "state" : "TX" } +{ "_id" : "75069", "city" : "MC KINNEY", "loc" : [ -96.60848799999999, 33.196558 ], "pop" : 20865, "state" : "TX" } +{ "_id" : "75070", "city" : "MC KINNEY", "loc" : [ -96.66422300000001, 33.195148 ], "pop" : 5573, "state" : "TX" } +{ "_id" : "75074", "city" : "PLANO", "loc" : [ -96.67771, 33.027722 ], "pop" : 29591, "state" : "TX" } +{ "_id" : "75075", "city" : "PLANO", "loc" : [ -96.739743, 33.024985 ], "pop" : 33236, "state" : "TX" } +{ "_id" : "75076", "city" : "POTTSBORO", "loc" : [ -96.690562, 33.809526 ], "pop" : 5458, "state" : "TX" } +{ "_id" : "75078", "city" : "PROSPER", "loc" : [ -96.795401, 33.236169 ], "pop" : 1103, "state" : "TX" } +{ "_id" : "75080", "city" : "RICHARDSON", "loc" : [ -96.745249, 32.965986 ], "pop" : 37227, "state" : "TX" } +{ "_id" : "75081", "city" : "RICHARDSON", "loc" : [ -96.70584100000001, 32.946217 ], "pop" : 30573, "state" : "TX" } +{ "_id" : "75082", "city" : "RICHARDSON", "loc" : [ -96.685957, 32.986461 ], "pop" : 6678, "state" : "TX" } +{ "_id" : "75087", "city" : "HEATH", "loc" : [ -96.454497, 32.90456 ], "pop" : 17438, "state" : "TX" } +{ "_id" : "75088", "city" : "ROWLETT", "loc" : [ -96.547161, 32.90315 ], "pop" : 22057, "state" : "TX" } +{ "_id" : "75090", "city" : "SHERMAN", "loc" : [ -96.60752100000001, 33.643525 ], "pop" : 35260, "state" : "TX" } +{ "_id" : "75093", "city" : "PLANO", "loc" : [ -96.788903, 33.029866 ], "pop" : 14376, "state" : "TX" } +{ "_id" : "75094", "city" : "MURPHY", "loc" : [ -96.609101, 33.004873 ], "pop" : 1722, "state" : "TX" } +{ "_id" : "75098", "city" : "WYLIE", "loc" : [ -96.539383, 33.004102 ], "pop" : 15418, "state" : "TX" } +{ "_id" : "75102", "city" : "BARRY", "loc" : [ -96.625141, 32.101356 ], "pop" : 588, "state" : "TX" } +{ "_id" : "75103", "city" : "CANTON", "loc" : [ -95.904657, 32.514301 ], "pop" : 12281, "state" : "TX" } +{ "_id" : "75104", "city" : "CEDAR HILL", "loc" : [ -96.94380200000001, 32.58847 ], "pop" : 19503, "state" : "TX" } +{ "_id" : "75105", "city" : "CHATFIELD", "loc" : [ -96.388668, 32.295416 ], "pop" : 129, "state" : "TX" } +{ "_id" : "75110", "city" : "CORSICANA", "loc" : [ -96.476151, 32.086776 ], "pop" : 28003, "state" : "TX" } +{ "_id" : "75114", "city" : "CRANDALL", "loc" : [ -96.46369, 32.597465 ], "pop" : 3720, "state" : "TX" } +{ "_id" : "75115", "city" : "DE SOTO", "loc" : [ -96.854721, 32.593167 ], "pop" : 33750, "state" : "TX" } +{ "_id" : "75116", "city" : "DUNCANVILLE", "loc" : [ -96.91139200000001, 32.65873 ], "pop" : 18023, "state" : "TX" } +{ "_id" : "75117", "city" : "EDGEWOOD", "loc" : [ -95.878011, 32.700326 ], "pop" : 3328, "state" : "TX" } +{ "_id" : "75119", "city" : "ENNIS", "loc" : [ -96.62236300000001, 32.332102 ], "pop" : 19008, "state" : "TX" } +{ "_id" : "75124", "city" : "EUSTACE", "loc" : [ -96.013693, 32.296485 ], "pop" : 2192, "state" : "TX" } +{ "_id" : "75125", "city" : "FERRIS", "loc" : [ -96.664321, 32.52232 ], "pop" : 7592, "state" : "TX" } +{ "_id" : "75126", "city" : "FORNEY", "loc" : [ -96.45975900000001, 32.749055 ], "pop" : 6803, "state" : "TX" } +{ "_id" : "75127", "city" : "FRUITVALE", "loc" : [ -95.789903, 32.676981 ], "pop" : 1622, "state" : "TX" } +{ "_id" : "75134", "city" : "LANCASTER", "loc" : [ -96.78299699999999, 32.616056 ], "pop" : 11306, "state" : "TX" } +{ "_id" : "75135", "city" : "CADDO MILLS", "loc" : [ -96.239093, 33.068267 ], "pop" : 3148, "state" : "TX" } +{ "_id" : "75137", "city" : "DUNCANVILLE", "loc" : [ -96.91132500000001, 32.634665 ], "pop" : 16979, "state" : "TX" } +{ "_id" : "75140", "city" : "GRAND SALINE", "loc" : [ -95.706411, 32.663528 ], "pop" : 4870, "state" : "TX" } +{ "_id" : "75141", "city" : "HUTCHINS", "loc" : [ -96.707021, 32.639586 ], "pop" : 2716, "state" : "TX" } +{ "_id" : "75142", "city" : "KAUFMAN", "loc" : [ -96.285239, 32.54599 ], "pop" : 9160, "state" : "TX" } +{ "_id" : "75143", "city" : "SEVEN POINTS", "loc" : [ -96.257768, 32.369146 ], "pop" : 5268, "state" : "TX" } +{ "_id" : "75144", "city" : "KERENS", "loc" : [ -96.229828, 32.127463 ], "pop" : 2991, "state" : "TX" } +{ "_id" : "75146", "city" : "LANCASTER", "loc" : [ -96.77280500000001, 32.591395 ], "pop" : 11762, "state" : "TX" } +{ "_id" : "75147", "city" : "GUN BARREL CITY", "loc" : [ -96.129524, 32.307513 ], "pop" : 18113, "state" : "TX" } +{ "_id" : "75148", "city" : "MALAKOFF", "loc" : [ -96.00595199999999, 32.170511 ], "pop" : 4972, "state" : "TX" } +{ "_id" : "75149", "city" : "MESQUITE", "loc" : [ -96.60821900000001, 32.767821 ], "pop" : 45754, "state" : "TX" } +{ "_id" : "75150", "city" : "MESQUITE", "loc" : [ -96.630681, 32.815416 ], "pop" : 51494, "state" : "TX" } +{ "_id" : "75152", "city" : "PALMER", "loc" : [ -96.679429, 32.438714 ], "pop" : 2605, "state" : "TX" } +{ "_id" : "75153", "city" : "POWELL", "loc" : [ -96.332713, 32.119557 ], "pop" : 127, "state" : "TX" } +{ "_id" : "75154", "city" : "OVILLA", "loc" : [ -96.82033699999999, 32.516096 ], "pop" : 16882, "state" : "TX" } +{ "_id" : "75155", "city" : "RICE", "loc" : [ -96.460613, 32.225788 ], "pop" : 1812, "state" : "TX" } +{ "_id" : "75158", "city" : "SCURRY", "loc" : [ -96.39245099999999, 32.48184 ], "pop" : 2589, "state" : "TX" } +{ "_id" : "75159", "city" : "SEAGOVILLE", "loc" : [ -96.557967, 32.652522 ], "pop" : 10569, "state" : "TX" } +{ "_id" : "75160", "city" : "TERRELL", "loc" : [ -96.25134199999999, 32.714292 ], "pop" : 24116, "state" : "TX" } +{ "_id" : "75163", "city" : "TRINIDAD", "loc" : [ -96.08307000000001, 32.138341 ], "pop" : 1246, "state" : "TX" } +{ "_id" : "75165", "city" : "WAXAHACHIE", "loc" : [ -96.83739799999999, 32.380796 ], "pop" : 22844, "state" : "TX" } +{ "_id" : "75169", "city" : "WILLS POINT", "loc" : [ -96.00788, 32.72834 ], "pop" : 7310, "state" : "TX" } +{ "_id" : "75172", "city" : "WILMER", "loc" : [ -96.68376000000001, 32.598133 ], "pop" : 2407, "state" : "TX" } +{ "_id" : "75173", "city" : "NEVADA", "loc" : [ -96.387657, 33.05934 ], "pop" : 3149, "state" : "TX" } +{ "_id" : "75180", "city" : "BALCH SPRINGS", "loc" : [ -96.615278, 32.720216 ], "pop" : 18848, "state" : "TX" } +{ "_id" : "75181", "city" : "MESQUITE", "loc" : [ -96.566889, 32.727166 ], "pop" : 5005, "state" : "TX" } +{ "_id" : "75182", "city" : "MESQUITE", "loc" : [ -96.567004, 32.801922 ], "pop" : 1959, "state" : "TX" } +{ "_id" : "75189", "city" : "ROYSE CITY", "loc" : [ -96.36484, 32.962778 ], "pop" : 5533, "state" : "TX" } +{ "_id" : "75201", "city" : "DALLAS", "loc" : [ -96.80439, 32.790439 ], "pop" : 1505, "state" : "TX" } +{ "_id" : "75202", "city" : "DALLAS", "loc" : [ -96.805352, 32.778056 ], "pop" : 3622, "state" : "TX" } +{ "_id" : "75203", "city" : "DALLAS", "loc" : [ -96.80697600000001, 32.745985 ], "pop" : 18850, "state" : "TX" } +{ "_id" : "75204", "city" : "DALLAS", "loc" : [ -96.785144, 32.803814 ], "pop" : 16697, "state" : "TX" } +{ "_id" : "75205", "city" : "VILLAGE", "loc" : [ -96.793828, 32.836878 ], "pop" : 23883, "state" : "TX" } +{ "_id" : "75206", "city" : "DALLAS", "loc" : [ -96.76921900000001, 32.831029 ], "pop" : 36526, "state" : "TX" } +{ "_id" : "75207", "city" : "DALLAS", "loc" : [ -96.83187100000001, 32.793897 ], "pop" : 1744, "state" : "TX" } +{ "_id" : "75208", "city" : "DALLAS", "loc" : [ -96.838898, 32.749208 ], "pop" : 33527, "state" : "TX" } +{ "_id" : "75209", "city" : "DALLAS", "loc" : [ -96.82598400000001, 32.84564 ], "pop" : 15398, "state" : "TX" } +{ "_id" : "75210", "city" : "DALLAS", "loc" : [ -96.742974, 32.769919 ], "pop" : 10216, "state" : "TX" } +{ "_id" : "75211", "city" : "COCKRELL HILL", "loc" : [ -96.88179700000001, 32.736928 ], "pop" : 54691, "state" : "TX" } +{ "_id" : "75212", "city" : "DALLAS", "loc" : [ -96.871396, 32.782884 ], "pop" : 23556, "state" : "TX" } +{ "_id" : "75214", "city" : "DALLAS", "loc" : [ -96.749774, 32.824789 ], "pop" : 32618, "state" : "TX" } +{ "_id" : "75215", "city" : "DALLAS", "loc" : [ -96.76226, 32.758206 ], "pop" : 22120, "state" : "TX" } +{ "_id" : "75216", "city" : "DALLAS", "loc" : [ -96.79548800000001, 32.708611 ], "pop" : 55166, "state" : "TX" } +{ "_id" : "75217", "city" : "DALLAS", "loc" : [ -96.675481, 32.724429 ], "pop" : 57605, "state" : "TX" } +{ "_id" : "75218", "city" : "DALLAS", "loc" : [ -96.69721199999999, 32.846335 ], "pop" : 22646, "state" : "TX" } +{ "_id" : "75219", "city" : "DALLAS", "loc" : [ -96.814166, 32.813245 ], "pop" : 19178, "state" : "TX" } +{ "_id" : "75220", "city" : "DALLAS", "loc" : [ -96.862202, 32.868131 ], "pop" : 30241, "state" : "TX" } +{ "_id" : "75223", "city" : "DALLAS", "loc" : [ -96.74747499999999, 32.794173 ], "pop" : 14700, "state" : "TX" } +{ "_id" : "75224", "city" : "DALLAS", "loc" : [ -96.838711, 32.711415 ], "pop" : 26734, "state" : "TX" } +{ "_id" : "75225", "city" : "DALLAS", "loc" : [ -96.791753, 32.862808 ], "pop" : 18255, "state" : "TX" } +{ "_id" : "75226", "city" : "DALLAS", "loc" : [ -96.76755199999999, 32.78871 ], "pop" : 1561, "state" : "TX" } +{ "_id" : "75227", "city" : "DALLAS", "loc" : [ -96.68358600000001, 32.767226 ], "pop" : 39631, "state" : "TX" } +{ "_id" : "75228", "city" : "DALLAS", "loc" : [ -96.678378, 32.824997 ], "pop" : 55010, "state" : "TX" } +{ "_id" : "75229", "city" : "DALLAS", "loc" : [ -96.8588, 32.8958 ], "pop" : 27621, "state" : "TX" } +{ "_id" : "75230", "city" : "DALLAS", "loc" : [ -96.78967900000001, 32.89994 ], "pop" : 24281, "state" : "TX" } +{ "_id" : "75231", "city" : "DALLAS", "loc" : [ -96.74952999999999, 32.875621 ], "pop" : 35407, "state" : "TX" } +{ "_id" : "75232", "city" : "DALLAS", "loc" : [ -96.838392, 32.664708 ], "pop" : 28289, "state" : "TX" } +{ "_id" : "75233", "city" : "DALLAS", "loc" : [ -96.872547, 32.704638 ], "pop" : 11206, "state" : "TX" } +{ "_id" : "75234", "city" : "FARMERS BRANCH", "loc" : [ -96.876848, 32.929803 ], "pop" : 25992, "state" : "TX" } +{ "_id" : "75235", "city" : "DALLAS", "loc" : [ -96.838843, 32.825213 ], "pop" : 14850, "state" : "TX" } +{ "_id" : "75236", "city" : "DALLAS", "loc" : [ -96.917737, 32.690002 ], "pop" : 6124, "state" : "TX" } +{ "_id" : "75237", "city" : "DALLAS", "loc" : [ -96.876453, 32.658972 ], "pop" : 12859, "state" : "TX" } +{ "_id" : "75238", "city" : "DALLAS", "loc" : [ -96.707982, 32.876976 ], "pop" : 25855, "state" : "TX" } +{ "_id" : "75239", "city" : "DALLAS", "loc" : [ -96.732769, 32.659974 ], "pop" : 541, "state" : "TX" } +{ "_id" : "75240", "city" : "DALLAS", "loc" : [ -96.78721400000001, 32.937431 ], "pop" : 37646, "state" : "TX" } +{ "_id" : "75241", "city" : "DALLAS", "loc" : [ -96.777421, 32.672216 ], "pop" : 26407, "state" : "TX" } +{ "_id" : "75243", "city" : "DALLAS", "loc" : [ -96.728472, 32.910347 ], "pop" : 48344, "state" : "TX" } +{ "_id" : "75244", "city" : "FARMERS BRANCH", "loc" : [ -96.842533, 32.925817 ], "pop" : 16870, "state" : "TX" } +{ "_id" : "75246", "city" : "DALLAS", "loc" : [ -96.769696, 32.79484 ], "pop" : 3129, "state" : "TX" } +{ "_id" : "75247", "city" : "DALLAS", "loc" : [ -96.887123, 32.801323 ], "pop" : 124, "state" : "TX" } +{ "_id" : "75248", "city" : "DALLAS", "loc" : [ -96.794242, 32.968199 ], "pop" : 34858, "state" : "TX" } +{ "_id" : "75249", "city" : "DALLAS", "loc" : [ -96.94926599999999, 32.636024 ], "pop" : 8677, "state" : "TX" } +{ "_id" : "75251", "city" : "DALLAS", "loc" : [ -96.77183100000001, 32.912203 ], "pop" : 75, "state" : "TX" } +{ "_id" : "75252", "city" : "DALLAS", "loc" : [ -96.792113, 32.996848 ], "pop" : 15152, "state" : "TX" } +{ "_id" : "75253", "city" : "DALLAS", "loc" : [ -96.59643, 32.683311 ], "pop" : 10252, "state" : "TX" } +{ "_id" : "75287", "city" : "DALLAS", "loc" : [ -96.83143, 33.000458 ], "pop" : 11388, "state" : "TX" } +{ "_id" : "75401", "city" : "GREENVILLE", "loc" : [ -96.10241600000001, 33.117476 ], "pop" : 30183, "state" : "TX" } +{ "_id" : "75407", "city" : "PRINCETON", "loc" : [ -96.49807300000001, 33.155542 ], "pop" : 7552, "state" : "TX" } +{ "_id" : "75409", "city" : "ANNA", "loc" : [ -96.563862, 33.344516 ], "pop" : 4413, "state" : "TX" } +{ "_id" : "75410", "city" : "ALBA", "loc" : [ -95.59710200000001, 32.765235 ], "pop" : 2599, "state" : "TX" } +{ "_id" : "75411", "city" : "ARTHUR CITY", "loc" : [ -95.49403700000001, 33.840031 ], "pop" : 1583, "state" : "TX" } +{ "_id" : "75412", "city" : "BAGWELL", "loc" : [ -95.14869, 33.836089 ], "pop" : 979, "state" : "TX" } +{ "_id" : "75414", "city" : "BELLS", "loc" : [ -96.42366800000001, 33.617817 ], "pop" : 1829, "state" : "TX" } +{ "_id" : "75415", "city" : "BEN FRANKLIN", "loc" : [ -95.759107, 33.474146 ], "pop" : 151, "state" : "TX" } +{ "_id" : "75416", "city" : "BLOSSOM", "loc" : [ -95.382341, 33.694547 ], "pop" : 3253, "state" : "TX" } +{ "_id" : "75417", "city" : "BOGATA", "loc" : [ -95.193725, 33.469862 ], "pop" : 2803, "state" : "TX" } +{ "_id" : "75418", "city" : "BONHAM", "loc" : [ -96.183566, 33.580559 ], "pop" : 9003, "state" : "TX" } +{ "_id" : "75420", "city" : "BRASHEAR", "loc" : [ -95.73451, 33.115521 ], "pop" : 272, "state" : "TX" } +{ "_id" : "75421", "city" : "BROOKSTON", "loc" : [ -95.688812, 33.624555 ], "pop" : 287, "state" : "TX" } +{ "_id" : "75422", "city" : "CAMPBELL", "loc" : [ -95.94391899999999, 33.151049 ], "pop" : 2029, "state" : "TX" } +{ "_id" : "75423", "city" : "CELESTE", "loc" : [ -96.207635, 33.264913 ], "pop" : 2697, "state" : "TX" } +{ "_id" : "75424", "city" : "BLUE RIDGE", "loc" : [ -96.390056, 33.306135 ], "pop" : 2312, "state" : "TX" } +{ "_id" : "75426", "city" : "CLARKSVILLE", "loc" : [ -95.046094, 33.623563 ], "pop" : 6675, "state" : "TX" } +{ "_id" : "75428", "city" : "COMMERCE", "loc" : [ -95.90967999999999, 33.2493 ], "pop" : 8421, "state" : "TX" } +{ "_id" : "75431", "city" : "COMO", "loc" : [ -95.362655, 33.064231 ], "pop" : 1679, "state" : "TX" } +{ "_id" : "75432", "city" : "COOPER", "loc" : [ -95.662311, 33.381166 ], "pop" : 3438, "state" : "TX" } +{ "_id" : "75433", "city" : "CUMBY", "loc" : [ -95.79453599999999, 33.111761 ], "pop" : 2894, "state" : "TX" } +{ "_id" : "75435", "city" : "DEPORT", "loc" : [ -95.365351, 33.522077 ], "pop" : 1927, "state" : "TX" } +{ "_id" : "75436", "city" : "DETROIT", "loc" : [ -95.23848, 33.662691 ], "pop" : 1594, "state" : "TX" } +{ "_id" : "75437", "city" : "DIKE", "loc" : [ -95.471125, 33.196485 ], "pop" : 210, "state" : "TX" } +{ "_id" : "75438", "city" : "DODD CITY", "loc" : [ -96.06194000000001, 33.564704 ], "pop" : 1094, "state" : "TX" } +{ "_id" : "75439", "city" : "ECTOR", "loc" : [ -96.273533, 33.581913 ], "pop" : 803, "state" : "TX" } +{ "_id" : "75440", "city" : "EMORY", "loc" : [ -95.741786, 32.875041 ], "pop" : 3919, "state" : "TX" } +{ "_id" : "75442", "city" : "FARMERSVILLE", "loc" : [ -96.368619, 33.165862 ], "pop" : 4777, "state" : "TX" } +{ "_id" : "75446", "city" : "HONEY GROVE", "loc" : [ -95.9109, 33.598505 ], "pop" : 2563, "state" : "TX" } +{ "_id" : "75447", "city" : "IVANHOE", "loc" : [ -96.169811, 33.67364 ], "pop" : 1004, "state" : "TX" } +{ "_id" : "75448", "city" : "KLONDIKE", "loc" : [ -95.801762, 33.303375 ], "pop" : 729, "state" : "TX" } +{ "_id" : "75449", "city" : "LADONIA", "loc" : [ -95.94548899999999, 33.424527 ], "pop" : 899, "state" : "TX" } +{ "_id" : "75450", "city" : "LAKE CREEK", "loc" : [ -95.622131, 33.467493 ], "pop" : 50, "state" : "TX" } +{ "_id" : "75451", "city" : "LEESBURG", "loc" : [ -95.107924, 32.976275 ], "pop" : 1246, "state" : "TX" } +{ "_id" : "75452", "city" : "LEONARD", "loc" : [ -96.223772, 33.404363 ], "pop" : 3229, "state" : "TX" } +{ "_id" : "75453", "city" : "LONE OAK", "loc" : [ -95.943412, 32.991571 ], "pop" : 1822, "state" : "TX" } +{ "_id" : "75454", "city" : "MELISSA", "loc" : [ -96.574009, 33.284114 ], "pop" : 703, "state" : "TX" } +{ "_id" : "75455", "city" : "MOUNT PLEASANT", "loc" : [ -94.969461, 33.173309 ], "pop" : 16878, "state" : "TX" } +{ "_id" : "75457", "city" : "MOUNT VERNON", "loc" : [ -95.21810600000001, 33.170204 ], "pop" : 5948, "state" : "TX" } +{ "_id" : "75459", "city" : "HOWE", "loc" : [ -96.64072299999999, 33.534867 ], "pop" : 4843, "state" : "TX" } +{ "_id" : "75460", "city" : "PARIS", "loc" : [ -95.537881, 33.658077 ], "pop" : 30317, "state" : "TX" } +{ "_id" : "75468", "city" : "PATTONVILLE", "loc" : [ -95.3908, 33.570234 ], "pop" : 194, "state" : "TX" } +{ "_id" : "75469", "city" : "PECAN GAP", "loc" : [ -95.826196, 33.419641 ], "pop" : 489, "state" : "TX" } +{ "_id" : "75470", "city" : "PETTY", "loc" : [ -95.789057, 33.609765 ], "pop" : 247, "state" : "TX" } +{ "_id" : "75471", "city" : "PICKTON", "loc" : [ -95.462979, 33.042401 ], "pop" : 1569, "state" : "TX" } +{ "_id" : "75472", "city" : "POINT", "loc" : [ -95.89028500000001, 32.900743 ], "pop" : 2796, "state" : "TX" } +{ "_id" : "75473", "city" : "POWDERLY", "loc" : [ -95.530692, 33.777877 ], "pop" : 1570, "state" : "TX" } +{ "_id" : "75474", "city" : "QUINLAN", "loc" : [ -96.12608299999999, 32.898347 ], "pop" : 13826, "state" : "TX" } +{ "_id" : "75476", "city" : "RAVENNA", "loc" : [ -96.145157, 33.709757 ], "pop" : 1635, "state" : "TX" } +{ "_id" : "75477", "city" : "ROXTON", "loc" : [ -95.74160500000001, 33.542934 ], "pop" : 975, "state" : "TX" } +{ "_id" : "75478", "city" : "SALTILLO", "loc" : [ -95.343324, 33.176678 ], "pop" : 500, "state" : "TX" } +{ "_id" : "75479", "city" : "SAVOY", "loc" : [ -96.350156, 33.606571 ], "pop" : 1726, "state" : "TX" } +{ "_id" : "75480", "city" : "SCROGGINS", "loc" : [ -95.239683, 32.991177 ], "pop" : 2029, "state" : "TX" } +{ "_id" : "75481", "city" : "SULPHUR BLUFF", "loc" : [ -95.37396, 33.333379 ], "pop" : 228, "state" : "TX" } +{ "_id" : "75482", "city" : "SULPHUR SPRINGS", "loc" : [ -95.592161, 33.134541 ], "pop" : 21479, "state" : "TX" } +{ "_id" : "75486", "city" : "SUMNER", "loc" : [ -95.680671, 33.758941 ], "pop" : 3596, "state" : "TX" } +{ "_id" : "75487", "city" : "TALCO", "loc" : [ -95.049718, 33.33436 ], "pop" : 1932, "state" : "TX" } +{ "_id" : "75488", "city" : "TELEPHONE", "loc" : [ -96.044945, 33.797854 ], "pop" : 709, "state" : "TX" } +{ "_id" : "75490", "city" : "TRENTON", "loc" : [ -96.339754, 33.423491 ], "pop" : 1776, "state" : "TX" } +{ "_id" : "75491", "city" : "WHITEWRIGHT", "loc" : [ -96.451025, 33.519041 ], "pop" : 4327, "state" : "TX" } +{ "_id" : "75492", "city" : "WINDOM", "loc" : [ -96.002002, 33.563295 ], "pop" : 363, "state" : "TX" } +{ "_id" : "75493", "city" : "WINFIELD", "loc" : [ -95.07898400000001, 33.161498 ], "pop" : 1956, "state" : "TX" } +{ "_id" : "75494", "city" : "WINNSBORO", "loc" : [ -95.27265, 32.91462 ], "pop" : 6204, "state" : "TX" } +{ "_id" : "75495", "city" : "VAN ALSTYNE", "loc" : [ -96.548632, 33.429169 ], "pop" : 4251, "state" : "TX" } +{ "_id" : "75496", "city" : "WOLFE CITY", "loc" : [ -96.06907, 33.360479 ], "pop" : 2225, "state" : "TX" } +{ "_id" : "75497", "city" : "YANTIS", "loc" : [ -95.531113, 32.925694 ], "pop" : 1554, "state" : "TX" } +{ "_id" : "75501", "city" : "WAKE VILLAGE", "loc" : [ -94.118245, 33.407371 ], "pop" : 40273, "state" : "TX" } +{ "_id" : "75502", "city" : "TEXARKANA", "loc" : [ -94.011281, 33.432644 ], "pop" : 30471, "state" : "AR" } +{ "_id" : "75503", "city" : "TEXARKANA", "loc" : [ -94.07737400000001, 33.466906 ], "pop" : 16443, "state" : "TX" } +{ "_id" : "75550", "city" : "ANNONA", "loc" : [ -94.899226, 33.553519 ], "pop" : 949, "state" : "TX" } +{ "_id" : "75551", "city" : "ATLANTA", "loc" : [ -94.16461700000001, 33.10898 ], "pop" : 9024, "state" : "TX" } +{ "_id" : "75554", "city" : "AVERY", "loc" : [ -94.786708, 33.533935 ], "pop" : 1317, "state" : "TX" } +{ "_id" : "75555", "city" : "BIVINS", "loc" : [ -94.140406, 32.96602 ], "pop" : 1758, "state" : "TX" } +{ "_id" : "75556", "city" : "BLOOMBURG", "loc" : [ -94.064688, 33.133859 ], "pop" : 855, "state" : "TX" } +{ "_id" : "75558", "city" : "COOKVILLE", "loc" : [ -94.87329099999999, 33.181908 ], "pop" : 2050, "state" : "TX" } +{ "_id" : "75559", "city" : "DE KALB", "loc" : [ -94.621092, 33.472741 ], "pop" : 3364, "state" : "TX" } +{ "_id" : "75560", "city" : "DOUGLASSVILLE", "loc" : [ -94.346699, 33.175806 ], "pop" : 1705, "state" : "TX" } +{ "_id" : "75561", "city" : "LEARY", "loc" : [ -94.269188, 33.477542 ], "pop" : 5815, "state" : "TX" } +{ "_id" : "75563", "city" : "LINDEN", "loc" : [ -94.36050899999999, 33.004821 ], "pop" : 5727, "state" : "TX" } +{ "_id" : "75566", "city" : "MARIETTA", "loc" : [ -94.542098, 33.179618 ], "pop" : 1526, "state" : "TX" } +{ "_id" : "75567", "city" : "MAUD", "loc" : [ -94.48226699999999, 33.35504 ], "pop" : 888, "state" : "TX" } +{ "_id" : "75568", "city" : "NAPLES", "loc" : [ -94.689061, 33.191186 ], "pop" : 2752, "state" : "TX" } +{ "_id" : "75569", "city" : "NASH", "loc" : [ -94.14223699999999, 33.439786 ], "pop" : 3464, "state" : "TX" } +{ "_id" : "75570", "city" : "BOSTON", "loc" : [ -94.433882, 33.462119 ], "pop" : 7801, "state" : "TX" } +{ "_id" : "75571", "city" : "OMAHA", "loc" : [ -94.763944, 33.180794 ], "pop" : 1791, "state" : "TX" } +{ "_id" : "75572", "city" : "QUEEN CITY", "loc" : [ -94.154825, 33.18736 ], "pop" : 4376, "state" : "TX" } +{ "_id" : "75574", "city" : "SIMMS", "loc" : [ -94.60386200000001, 33.498727 ], "pop" : 3617, "state" : "TX" } +{ "_id" : "75601", "city" : "LONGVIEW", "loc" : [ -94.72328, 32.526854 ], "pop" : 27102, "state" : "TX" } +{ "_id" : "75602", "city" : "LONGVIEW", "loc" : [ -94.710078, 32.472373 ], "pop" : 17399, "state" : "TX" } +{ "_id" : "75603", "city" : "LONGVIEW", "loc" : [ -94.711691, 32.426368 ], "pop" : 6737, "state" : "TX" } +{ "_id" : "75604", "city" : "LONGVIEW", "loc" : [ -94.798957, 32.525139 ], "pop" : 25570, "state" : "TX" } +{ "_id" : "75605", "city" : "LONGVIEW", "loc" : [ -94.776748, 32.554711 ], "pop" : 9166, "state" : "TX" } +{ "_id" : "75630", "city" : "AVINGER", "loc" : [ -94.579534, 32.848514 ], "pop" : 2764, "state" : "TX" } +{ "_id" : "75631", "city" : "BECKVILLE", "loc" : [ -94.455451, 32.245165 ], "pop" : 3114, "state" : "TX" } +{ "_id" : "75633", "city" : "CARTHAGE", "loc" : [ -94.352721, 32.154379 ], "pop" : 11062, "state" : "TX" } +{ "_id" : "75638", "city" : "DAINGERFIELD", "loc" : [ -94.735899, 33.031263 ], "pop" : 5614, "state" : "TX" } +{ "_id" : "75639", "city" : "DE BERRY", "loc" : [ -94.13557, 32.254327 ], "pop" : 4375, "state" : "TX" } +{ "_id" : "75640", "city" : "NEW DIANA", "loc" : [ -94.698122, 32.704585 ], "pop" : 1930, "state" : "TX" } +{ "_id" : "75643", "city" : "GARY", "loc" : [ -94.28150100000001, 32.019848 ], "pop" : 1394, "state" : "TX" } +{ "_id" : "75644", "city" : "GILMER", "loc" : [ -94.971434, 32.724565 ], "pop" : 10141, "state" : "TX" } +{ "_id" : "75647", "city" : "GLADEWATER", "loc" : [ -94.932001, 32.555858 ], "pop" : 14791, "state" : "TX" } +{ "_id" : "75650", "city" : "HALLSVILLE", "loc" : [ -94.53330800000001, 32.507283 ], "pop" : 7463, "state" : "TX" } +{ "_id" : "75651", "city" : "HARLETON", "loc" : [ -94.465165, 32.657858 ], "pop" : 2609, "state" : "TX" } +{ "_id" : "75652", "city" : "HENDERSON", "loc" : [ -94.791962, 32.152375 ], "pop" : 19836, "state" : "TX" } +{ "_id" : "75656", "city" : "HUGHES SPRINGS", "loc" : [ -94.622758, 33.016763 ], "pop" : 4564, "state" : "TX" } +{ "_id" : "75657", "city" : "SMITHLAND", "loc" : [ -94.371217, 32.779863 ], "pop" : 8460, "state" : "TX" } +{ "_id" : "75661", "city" : "KARNACK", "loc" : [ -94.20005, 32.620508 ], "pop" : 4434, "state" : "TX" } +{ "_id" : "75662", "city" : "KILGORE", "loc" : [ -94.86527100000001, 32.383557 ], "pop" : 22785, "state" : "TX" } +{ "_id" : "75667", "city" : "LANEVILLE", "loc" : [ -94.866027, 31.950821 ], "pop" : 3032, "state" : "TX" } +{ "_id" : "75668", "city" : "LONE STAR", "loc" : [ -94.71830300000001, 32.946982 ], "pop" : 2578, "state" : "TX" } +{ "_id" : "75669", "city" : "LONG BRANCH", "loc" : [ -94.47202799999999, 32.050224 ], "pop" : 2101, "state" : "TX" } +{ "_id" : "75670", "city" : "MARSHALL", "loc" : [ -94.36190999999999, 32.53378 ], "pop" : 27482, "state" : "TX" } +{ "_id" : "75681", "city" : "MOUNT ENTERPRISE", "loc" : [ -94.62350499999999, 31.9125 ], "pop" : 2558, "state" : "TX" } +{ "_id" : "75683", "city" : "ORE CITY", "loc" : [ -94.751401, 32.785588 ], "pop" : 5129, "state" : "TX" } +{ "_id" : "75684", "city" : "OVERTON", "loc" : [ -94.95291400000001, 32.269041 ], "pop" : 4776, "state" : "TX" } +{ "_id" : "75686", "city" : "PITTSBURG", "loc" : [ -94.960337, 32.96231 ], "pop" : 12871, "state" : "TX" } +{ "_id" : "75687", "city" : "PRICE", "loc" : [ -94.94149400000001, 32.100842 ], "pop" : 945, "state" : "TX" } +{ "_id" : "75689", "city" : "TURNERTOWN", "loc" : [ -94.950805, 32.18734 ], "pop" : 923, "state" : "TX" } +{ "_id" : "75691", "city" : "TATUM", "loc" : [ -94.59602700000001, 32.326569 ], "pop" : 4679, "state" : "TX" } +{ "_id" : "75692", "city" : "WASKOM", "loc" : [ -94.137884, 32.467183 ], "pop" : 6516, "state" : "TX" } +{ "_id" : "75693", "city" : "CLARKSVILLE CITY", "loc" : [ -94.862115, 32.537232 ], "pop" : 5887, "state" : "TX" } +{ "_id" : "75701", "city" : "TYLER", "loc" : [ -95.292179, 32.325366 ], "pop" : 30794, "state" : "TX" } +{ "_id" : "75702", "city" : "TYLER", "loc" : [ -95.311652, 32.361969 ], "pop" : 24885, "state" : "TX" } +{ "_id" : "75703", "city" : "TYLER", "loc" : [ -95.303147, 32.276827 ], "pop" : 26345, "state" : "TX" } +{ "_id" : "75704", "city" : "TYLER", "loc" : [ -95.406977, 32.373781 ], "pop" : 6100, "state" : "TX" } +{ "_id" : "75705", "city" : "TYLER", "loc" : [ -95.125225, 32.376599 ], "pop" : 1539, "state" : "TX" } +{ "_id" : "75706", "city" : "TYLER", "loc" : [ -95.33099300000001, 32.444148 ], "pop" : 6770, "state" : "TX" } +{ "_id" : "75707", "city" : "TYLER", "loc" : [ -95.19269199999999, 32.303782 ], "pop" : 9853, "state" : "TX" } +{ "_id" : "75708", "city" : "EAST TEXAS CENTE", "loc" : [ -95.244354, 32.389193 ], "pop" : 4338, "state" : "TX" } +{ "_id" : "75709", "city" : "TYLER", "loc" : [ -95.395563, 32.307817 ], "pop" : 1737, "state" : "TX" } +{ "_id" : "75750", "city" : "ARP", "loc" : [ -95.063908, 32.241758 ], "pop" : 1815, "state" : "TX" } +{ "_id" : "75751", "city" : "ATHENS", "loc" : [ -95.84318, 32.193499 ], "pop" : 18579, "state" : "TX" } +{ "_id" : "75754", "city" : "BEN WHEELER", "loc" : [ -95.637085, 32.412588 ], "pop" : 3992, "state" : "TX" } +{ "_id" : "75755", "city" : "BIG SANDY", "loc" : [ -95.08803399999999, 32.61682 ], "pop" : 3997, "state" : "TX" } +{ "_id" : "75756", "city" : "EDOM", "loc" : [ -95.62289, 32.290514 ], "pop" : 2868, "state" : "TX" } +{ "_id" : "75757", "city" : "MOUNT SELMAN", "loc" : [ -95.375045, 32.135745 ], "pop" : 4654, "state" : "TX" } +{ "_id" : "75758", "city" : "CHANDLER", "loc" : [ -95.502531, 32.270638 ], "pop" : 4835, "state" : "TX" } +{ "_id" : "75760", "city" : "CUSHING", "loc" : [ -94.853887, 31.797767 ], "pop" : 2068, "state" : "TX" } +{ "_id" : "75762", "city" : "FLINT", "loc" : [ -95.394848, 32.207927 ], "pop" : 6365, "state" : "TX" } +{ "_id" : "75763", "city" : "FRANKSTON", "loc" : [ -95.516284, 32.053488 ], "pop" : 5394, "state" : "TX" } +{ "_id" : "75765", "city" : "HAWKINS", "loc" : [ -95.222015, 32.643901 ], "pop" : 4968, "state" : "TX" } +{ "_id" : "75766", "city" : "JACKSONVILLE", "loc" : [ -95.27032800000001, 31.96177 ], "pop" : 19652, "state" : "TX" } +{ "_id" : "75770", "city" : "LARUE", "loc" : [ -95.59266100000001, 32.160758 ], "pop" : 2826, "state" : "TX" } +{ "_id" : "75771", "city" : "MT SYLVAN", "loc" : [ -95.42993199999999, 32.517152 ], "pop" : 9838, "state" : "TX" } +{ "_id" : "75773", "city" : "MINEOLA", "loc" : [ -95.487032, 32.666059 ], "pop" : 8904, "state" : "TX" } +{ "_id" : "75778", "city" : "MURCHISON", "loc" : [ -95.77372, 32.325732 ], "pop" : 1801, "state" : "TX" } +{ "_id" : "75783", "city" : "QUITMAN", "loc" : [ -95.430161, 32.804862 ], "pop" : 5864, "state" : "TX" } +{ "_id" : "75784", "city" : "REKLAW", "loc" : [ -95.01183399999999, 31.885858 ], "pop" : 334, "state" : "TX" } +{ "_id" : "75785", "city" : "DIALVILLE", "loc" : [ -95.17315600000001, 31.80976 ], "pop" : 10527, "state" : "TX" } +{ "_id" : "75789", "city" : "TROUP", "loc" : [ -95.12265600000001, 32.104003 ], "pop" : 8363, "state" : "TX" } +{ "_id" : "75790", "city" : "VAN", "loc" : [ -95.654538, 32.528265 ], "pop" : 4019, "state" : "TX" } +{ "_id" : "75791", "city" : "WHITEHOUSE", "loc" : [ -95.226552, 32.221958 ], "pop" : 8273, "state" : "TX" } +{ "_id" : "75792", "city" : "WINONA", "loc" : [ -95.124624, 32.466163 ], "pop" : 2825, "state" : "TX" } +{ "_id" : "75801", "city" : "PALESTINE", "loc" : [ -95.634158, 31.758752 ], "pop" : 26466, "state" : "TX" } +{ "_id" : "75831", "city" : "FREESTONE", "loc" : [ -96.058516, 31.457151 ], "pop" : 3404, "state" : "TX" } +{ "_id" : "75833", "city" : "CENTERVILLE", "loc" : [ -95.92128700000001, 31.272025 ], "pop" : 2618, "state" : "TX" } +{ "_id" : "75835", "city" : "AUSTONIO", "loc" : [ -95.46832999999999, 31.315067 ], "pop" : 11698, "state" : "TX" } +{ "_id" : "75838", "city" : "DONIE", "loc" : [ -96.238687, 31.487285 ], "pop" : 334, "state" : "TX" } +{ "_id" : "75839", "city" : "SLOCUM", "loc" : [ -95.55323199999999, 31.635087 ], "pop" : 4767, "state" : "TX" } +{ "_id" : "75840", "city" : "FAIRFIELD", "loc" : [ -96.15717600000001, 31.736136 ], "pop" : 6331, "state" : "TX" } +{ "_id" : "75844", "city" : "GRAPELAND", "loc" : [ -95.44471299999999, 31.49721 ], "pop" : 4705, "state" : "TX" } +{ "_id" : "75845", "city" : "GROVETON", "loc" : [ -95.09689400000001, 31.065142 ], "pop" : 2206, "state" : "TX" } +{ "_id" : "75846", "city" : "JEWETT", "loc" : [ -96.191841, 31.373925 ], "pop" : 2112, "state" : "TX" } +{ "_id" : "75847", "city" : "KENNARD", "loc" : [ -95.154118, 31.338449 ], "pop" : 1784, "state" : "TX" } +{ "_id" : "75850", "city" : "LEONA", "loc" : [ -95.928428, 31.14207 ], "pop" : 475, "state" : "TX" } +{ "_id" : "75851", "city" : "LOVELADY", "loc" : [ -95.550057, 31.0564 ], "pop" : 3649, "state" : "TX" } +{ "_id" : "75852", "city" : "MIDWAY", "loc" : [ -95.70894, 30.980579 ], "pop" : 3522, "state" : "TX" } +{ "_id" : "75853", "city" : "MONTALBA", "loc" : [ -95.75926, 31.922165 ], "pop" : 2070, "state" : "TX" } +{ "_id" : "75855", "city" : "OAKWOOD", "loc" : [ -95.902151, 31.602312 ], "pop" : 2637, "state" : "TX" } +{ "_id" : "75856", "city" : "PENNINGTON", "loc" : [ -95.15867799999999, 31.161843 ], "pop" : 565, "state" : "TX" } +{ "_id" : "75859", "city" : "STREETMAN", "loc" : [ -96.29876299999999, 31.888532 ], "pop" : 488, "state" : "TX" } +{ "_id" : "75860", "city" : "TEAGUE", "loc" : [ -96.27778000000001, 31.632772 ], "pop" : 5318, "state" : "TX" } +{ "_id" : "75861", "city" : "TENNESSEE COLONY", "loc" : [ -95.899798, 31.792882 ], "pop" : 11380, "state" : "TX" } +{ "_id" : "75862", "city" : "TRINITY", "loc" : [ -95.340295, 30.941951 ], "pop" : 7585, "state" : "TX" } +{ "_id" : "75901", "city" : "KELTYS", "loc" : [ -94.734185, 31.336004 ], "pop" : 46763, "state" : "TX" } +{ "_id" : "75925", "city" : "FOREST", "loc" : [ -95.079786, 31.647815 ], "pop" : 3203, "state" : "TX" } +{ "_id" : "75926", "city" : "APPLE SPRINGS", "loc" : [ -94.98115199999999, 31.226923 ], "pop" : 1079, "state" : "TX" } +{ "_id" : "75928", "city" : "BON WIER", "loc" : [ -93.766465, 30.687557 ], "pop" : 2283, "state" : "TX" } +{ "_id" : "75929", "city" : "BROADDUS", "loc" : [ -94.215552, 31.295241 ], "pop" : 1786, "state" : "TX" } +{ "_id" : "75930", "city" : "BRONSON", "loc" : [ -93.999256, 31.339056 ], "pop" : 1922, "state" : "TX" } +{ "_id" : "75931", "city" : "BROOKELAND", "loc" : [ -94.00356600000001, 31.106273 ], "pop" : 1883, "state" : "TX" } +{ "_id" : "75932", "city" : "BURKEVILLE", "loc" : [ -93.658517, 31.009934 ], "pop" : 2275, "state" : "TX" } +{ "_id" : "75933", "city" : "CALL", "loc" : [ -93.833355, 30.574132 ], "pop" : 1813, "state" : "TX" } +{ "_id" : "75935", "city" : "CENTER", "loc" : [ -94.186947, 31.786468 ], "pop" : 11512, "state" : "TX" } +{ "_id" : "75936", "city" : "CHESTER", "loc" : [ -94.458099, 30.928532 ], "pop" : 1588, "state" : "TX" } +{ "_id" : "75937", "city" : "CHIRENO", "loc" : [ -94.430244, 31.511935 ], "pop" : 3983, "state" : "TX" } +{ "_id" : "75938", "city" : "ROCKLAND", "loc" : [ -94.42181100000001, 30.909226 ], "pop" : 836, "state" : "TX" } +{ "_id" : "75939", "city" : "BARNUM", "loc" : [ -94.7959, 31.000657 ], "pop" : 3969, "state" : "TX" } +{ "_id" : "75941", "city" : "DIBOLL", "loc" : [ -94.77291099999999, 31.195028 ], "pop" : 7686, "state" : "TX" } +{ "_id" : "75943", "city" : "DOUGLASS", "loc" : [ -94.869649, 31.657846 ], "pop" : 1005, "state" : "TX" } +{ "_id" : "75946", "city" : "GARRISON", "loc" : [ -94.52660400000001, 31.811111 ], "pop" : 2365, "state" : "TX" } +{ "_id" : "75948", "city" : "HEMPHILL", "loc" : [ -93.79045000000001, 31.316123 ], "pop" : 4180, "state" : "TX" } +{ "_id" : "75949", "city" : "HUNTINGTON", "loc" : [ -94.566237, 31.283714 ], "pop" : 8415, "state" : "TX" } +{ "_id" : "75951", "city" : "SAM RAYBURN", "loc" : [ -94.02148099999999, 30.925348 ], "pop" : 14219, "state" : "TX" } +{ "_id" : "75954", "city" : "JOAQUIN", "loc" : [ -94.060833, 31.943989 ], "pop" : 2754, "state" : "TX" } +{ "_id" : "75956", "city" : "BON AMI", "loc" : [ -93.92793399999999, 30.688217 ], "pop" : 5772, "state" : "TX" } +{ "_id" : "75957", "city" : "MAGNOLIA SPRINGS", "loc" : [ -94.070896, 30.762882 ], "pop" : 111, "state" : "TX" } +{ "_id" : "75959", "city" : "MILAM", "loc" : [ -93.831816, 31.47001 ], "pop" : 2187, "state" : "TX" } +{ "_id" : "75960", "city" : "MOSCOW", "loc" : [ -94.85437, 30.917902 ], "pop" : 1018, "state" : "TX" } +{ "_id" : "75961", "city" : "APPLEBY", "loc" : [ -94.651093, 31.618534 ], "pop" : 45332, "state" : "TX" } +{ "_id" : "75966", "city" : "NEWTON", "loc" : [ -93.7497, 30.835074 ], "pop" : 4184, "state" : "TX" } +{ "_id" : "75968", "city" : "PINELAND", "loc" : [ -93.97542, 31.241782 ], "pop" : 1279, "state" : "TX" } +{ "_id" : "75969", "city" : "POLLOK", "loc" : [ -94.82540299999999, 31.429107 ], "pop" : 4725, "state" : "TX" } +{ "_id" : "75972", "city" : "SAN AUGUSTINE", "loc" : [ -94.132581, 31.515173 ], "pop" : 5916, "state" : "TX" } +{ "_id" : "75973", "city" : "SHELBYVILLE", "loc" : [ -93.969841, 31.713074 ], "pop" : 2949, "state" : "TX" } +{ "_id" : "75974", "city" : "TENAHA", "loc" : [ -94.248773, 31.940812 ], "pop" : 1759, "state" : "TX" } +{ "_id" : "75975", "city" : "TIMPSON", "loc" : [ -94.396733, 31.884089 ], "pop" : 3060, "state" : "TX" } +{ "_id" : "75976", "city" : "WELLS", "loc" : [ -94.969351, 31.499755 ], "pop" : 1550, "state" : "TX" } +{ "_id" : "75977", "city" : "WIERGATE", "loc" : [ -93.803854, 31.041417 ], "pop" : 290, "state" : "TX" } +{ "_id" : "75979", "city" : "DOGWOOD", "loc" : [ -94.425494, 30.775133 ], "pop" : 5942, "state" : "TX" } +{ "_id" : "75980", "city" : "ZAVALLA", "loc" : [ -94.38711499999999, 31.156863 ], "pop" : 2295, "state" : "TX" } +{ "_id" : "76006", "city" : "ARLINGTON", "loc" : [ -97.08342500000001, 32.778494 ], "pop" : 18003, "state" : "TX" } +{ "_id" : "76008", "city" : "ALEDO", "loc" : [ -97.60388500000001, 32.700351 ], "pop" : 5148, "state" : "TX" } +{ "_id" : "76009", "city" : "ALVARADO", "loc" : [ -97.212971, 32.439499 ], "pop" : 13229, "state" : "TX" } +{ "_id" : "76010", "city" : "ARLINGTON", "loc" : [ -97.082576, 32.720368 ], "pop" : 42405, "state" : "TX" } +{ "_id" : "76011", "city" : "ARLINGTON", "loc" : [ -97.100302, 32.758236 ], "pop" : 23943, "state" : "TX" } +{ "_id" : "76012", "city" : "ARLINGTON", "loc" : [ -97.13480800000001, 32.753962 ], "pop" : 24141, "state" : "TX" } +{ "_id" : "76013", "city" : "ARLINGTON", "loc" : [ -97.14416, 32.719905 ], "pop" : 30252, "state" : "TX" } +{ "_id" : "76014", "city" : "ARLINGTON", "loc" : [ -97.08755600000001, 32.695425 ], "pop" : 26087, "state" : "TX" } +{ "_id" : "76015", "city" : "ARLINGTON", "loc" : [ -97.134685, 32.693125 ], "pop" : 14544, "state" : "TX" } +{ "_id" : "76016", "city" : "ARLINGTON", "loc" : [ -97.190466, 32.688898 ], "pop" : 28219, "state" : "TX" } +{ "_id" : "76017", "city" : "ARLINGTON", "loc" : [ -97.159899, 32.65545 ], "pop" : 42829, "state" : "TX" } +{ "_id" : "76018", "city" : "ARLINGTON", "loc" : [ -97.091987, 32.654752 ], "pop" : 15590, "state" : "TX" } +{ "_id" : "76020", "city" : "AZLE", "loc" : [ -97.54115299999999, 32.903453 ], "pop" : 18198, "state" : "TX" } +{ "_id" : "76021", "city" : "BEDFORD", "loc" : [ -97.135797, 32.853579 ], "pop" : 31798, "state" : "TX" } +{ "_id" : "76022", "city" : "BEDFORD", "loc" : [ -97.14535100000001, 32.829749 ], "pop" : 13186, "state" : "TX" } +{ "_id" : "76023", "city" : "BOYD", "loc" : [ -97.586797, 33.059367 ], "pop" : 4292, "state" : "TX" } +{ "_id" : "76028", "city" : "BURLESON", "loc" : [ -97.308959, 32.531624 ], "pop" : 33535, "state" : "TX" } +{ "_id" : "76031", "city" : "CLEBURNE", "loc" : [ -97.39795700000001, 32.342891 ], "pop" : 25844, "state" : "TX" } +{ "_id" : "76034", "city" : "COLLEYVILLE", "loc" : [ -97.14602600000001, 32.88721 ], "pop" : 11726, "state" : "TX" } +{ "_id" : "76035", "city" : "CRESSON", "loc" : [ -97.651931, 32.530714 ], "pop" : 265, "state" : "TX" } +{ "_id" : "76036", "city" : "CROWLEY", "loc" : [ -97.370306, 32.581398 ], "pop" : 8749, "state" : "TX" } +{ "_id" : "76039", "city" : "EULESS", "loc" : [ -97.083212, 32.858172 ], "pop" : 22412, "state" : "TX" } +{ "_id" : "76040", "city" : "EULESS", "loc" : [ -97.09720299999999, 32.826358 ], "pop" : 17220, "state" : "TX" } +{ "_id" : "76041", "city" : "FORRESTON", "loc" : [ -96.887522, 32.281131 ], "pop" : 106, "state" : "TX" } +{ "_id" : "76043", "city" : "GLEN ROSE", "loc" : [ -97.762911, 32.229762 ], "pop" : 4432, "state" : "TX" } +{ "_id" : "76044", "city" : "GODLEY", "loc" : [ -97.534865, 32.428174 ], "pop" : 2595, "state" : "TX" } +{ "_id" : "76048", "city" : "GRANBURY", "loc" : [ -97.774173, 32.42505 ], "pop" : 13718, "state" : "TX" } +{ "_id" : "76049", "city" : "GRANBURY", "loc" : [ -97.72848399999999, 32.448811 ], "pop" : 10830, "state" : "TX" } +{ "_id" : "76050", "city" : "GRANDVIEW", "loc" : [ -97.235069, 32.277856 ], "pop" : 4850, "state" : "TX" } +{ "_id" : "76051", "city" : "GRAPEVINE", "loc" : [ -97.096203, 32.93143 ], "pop" : 30774, "state" : "TX" } +{ "_id" : "76052", "city" : "HASLET", "loc" : [ -97.33718500000001, 32.955734 ], "pop" : 866, "state" : "TX" } +{ "_id" : "76053", "city" : "HURST", "loc" : [ -97.175613, 32.821107 ], "pop" : 24835, "state" : "TX" } +{ "_id" : "76054", "city" : "HURST", "loc" : [ -97.175521, 32.855832 ], "pop" : 9953, "state" : "TX" } +{ "_id" : "76055", "city" : "ITASCA", "loc" : [ -97.146034, 32.163589 ], "pop" : 2341, "state" : "TX" } +{ "_id" : "76058", "city" : "JOSHUA", "loc" : [ -97.401123, 32.466252 ], "pop" : 12544, "state" : "TX" } +{ "_id" : "76059", "city" : "KEENE", "loc" : [ -97.32868000000001, 32.393659 ], "pop" : 5863, "state" : "TX" } +{ "_id" : "76060", "city" : "KENNEDALE", "loc" : [ -97.213853, 32.64316 ], "pop" : 5362, "state" : "TX" } +{ "_id" : "76063", "city" : "MANSFIELD", "loc" : [ -97.14155100000001, 32.577258 ], "pop" : 17381, "state" : "TX" } +{ "_id" : "76064", "city" : "MAYPEARL", "loc" : [ -96.98802999999999, 32.327878 ], "pop" : 2842, "state" : "TX" } +{ "_id" : "76065", "city" : "MIDLOTHIAN", "loc" : [ -96.993551, 32.475743 ], "pop" : 10271, "state" : "TX" } +{ "_id" : "76066", "city" : "MILLSAP", "loc" : [ -97.87838600000001, 32.670019 ], "pop" : 9110, "state" : "TX" } +{ "_id" : "76067", "city" : "MINERAL WELLS", "loc" : [ -98.063051, 32.810283 ], "pop" : 23617, "state" : "TX" } +{ "_id" : "76070", "city" : "NEMO", "loc" : [ -97.656668, 32.271312 ], "pop" : 206, "state" : "TX" } +{ "_id" : "76071", "city" : "NEWARK", "loc" : [ -97.510696, 33.007099 ], "pop" : 2670, "state" : "TX" } +{ "_id" : "76073", "city" : "PARADISE", "loc" : [ -97.697423, 33.082607 ], "pop" : 3009, "state" : "TX" } +{ "_id" : "76077", "city" : "RAINBOW", "loc" : [ -97.70652, 32.281216 ], "pop" : 722, "state" : "TX" } +{ "_id" : "76078", "city" : "RHOME", "loc" : [ -97.48168800000001, 33.054045 ], "pop" : 1771, "state" : "TX" } +{ "_id" : "76082", "city" : "SPRINGTOWN", "loc" : [ -97.634951, 32.966021 ], "pop" : 7377, "state" : "TX" } +{ "_id" : "76084", "city" : "VENUS", "loc" : [ -97.108734, 32.432975 ], "pop" : 2726, "state" : "TX" } +{ "_id" : "76086", "city" : "WEATHERFORD", "loc" : [ -97.738591, 32.784074 ], "pop" : 29937, "state" : "TX" } +{ "_id" : "76087", "city" : "WEATHERFORD", "loc" : [ -97.68943899999999, 32.749473 ], "pop" : 2502, "state" : "TX" } +{ "_id" : "76092", "city" : "GRAPEVINE", "loc" : [ -97.148066, 32.956456 ], "pop" : 5638, "state" : "TX" } +{ "_id" : "76093", "city" : "RIO VISTA", "loc" : [ -97.367825, 32.253168 ], "pop" : 1819, "state" : "TX" } +{ "_id" : "76102", "city" : "FORT WORTH", "loc" : [ -97.328023, 32.758897 ], "pop" : 8550, "state" : "TX" } +{ "_id" : "76103", "city" : "FORT WORTH", "loc" : [ -97.26039400000001, 32.747005 ], "pop" : 12611, "state" : "TX" } +{ "_id" : "76104", "city" : "FORT WORTH", "loc" : [ -97.318409, 32.725551 ], "pop" : 20012, "state" : "TX" } +{ "_id" : "76105", "city" : "FORT WORTH", "loc" : [ -97.26899, 32.723325 ], "pop" : 20947, "state" : "TX" } +{ "_id" : "76106", "city" : "FORT WORTH", "loc" : [ -97.356008, 32.796849 ], "pop" : 44367, "state" : "TX" } +{ "_id" : "76107", "city" : "FORT WORTH", "loc" : [ -97.385248, 32.739175 ], "pop" : 27082, "state" : "TX" } +{ "_id" : "76108", "city" : "WHITE SETTLEMENT", "loc" : [ -97.474063, 32.759271 ], "pop" : 22510, "state" : "TX" } +{ "_id" : "76109", "city" : "FORT WORTH", "loc" : [ -97.37887600000001, 32.700246 ], "pop" : 21893, "state" : "TX" } +{ "_id" : "76110", "city" : "FORT WORTH", "loc" : [ -97.33750499999999, 32.706505 ], "pop" : 27828, "state" : "TX" } +{ "_id" : "76111", "city" : "FORT WORTH", "loc" : [ -97.300327, 32.782382 ], "pop" : 17740, "state" : "TX" } +{ "_id" : "76112", "city" : "FORT WORTH", "loc" : [ -97.21812199999999, 32.749297 ], "pop" : 35311, "state" : "TX" } +{ "_id" : "76114", "city" : "RIVER OAKS", "loc" : [ -97.401526, 32.775379 ], "pop" : 21921, "state" : "TX" } +{ "_id" : "76115", "city" : "FORT WORTH", "loc" : [ -97.333634, 32.679618 ], "pop" : 16544, "state" : "TX" } +{ "_id" : "76116", "city" : "FORT WORTH", "loc" : [ -97.448279, 32.723032 ], "pop" : 38210, "state" : "TX" } +{ "_id" : "76117", "city" : "HALTOM CITY", "loc" : [ -97.27089100000001, 32.808742 ], "pop" : 27312, "state" : "TX" } +{ "_id" : "76118", "city" : "NORTH RICHLAND H", "loc" : [ -97.222781, 32.808944 ], "pop" : 9764, "state" : "TX" } +{ "_id" : "76119", "city" : "FORT WORTH", "loc" : [ -97.267492, 32.691379 ], "pop" : 36951, "state" : "TX" } +{ "_id" : "76120", "city" : "FORT WORTH", "loc" : [ -97.178112, 32.763912 ], "pop" : 8601, "state" : "TX" } +{ "_id" : "76123", "city" : "FORT WORTH", "loc" : [ -97.365838, 32.625361 ], "pop" : 5314, "state" : "TX" } +{ "_id" : "76126", "city" : "BENBROOK", "loc" : [ -97.464141, 32.670023 ], "pop" : 14301, "state" : "TX" } +{ "_id" : "76127", "city" : "CARSWELL AFB", "loc" : [ -97.435453, 32.771846 ], "pop" : 940, "state" : "TX" } +{ "_id" : "76131", "city" : "FORT WORTH", "loc" : [ -97.337656, 32.863156 ], "pop" : 3738, "state" : "TX" } +{ "_id" : "76132", "city" : "FORT WORTH", "loc" : [ -97.405626, 32.671092 ], "pop" : 13724, "state" : "TX" } +{ "_id" : "76133", "city" : "FORT WORTH", "loc" : [ -97.375849, 32.652561 ], "pop" : 44032, "state" : "TX" } +{ "_id" : "76134", "city" : "FORT WORTH", "loc" : [ -97.33246699999999, 32.646886 ], "pop" : 17442, "state" : "TX" } +{ "_id" : "76135", "city" : "FORT WORTH", "loc" : [ -97.45191, 32.824844 ], "pop" : 13135, "state" : "TX" } +{ "_id" : "76137", "city" : "FORT WORTH", "loc" : [ -97.289114, 32.866421 ], "pop" : 15226, "state" : "TX" } +{ "_id" : "76140", "city" : "EVERMAN", "loc" : [ -97.27040599999999, 32.631332 ], "pop" : 17658, "state" : "TX" } +{ "_id" : "76148", "city" : "WATAUGA", "loc" : [ -97.24902899999999, 32.8681 ], "pop" : 22794, "state" : "TX" } +{ "_id" : "76155", "city" : "FORT WORTH", "loc" : [ -97.050285, 32.824742 ], "pop" : 2096, "state" : "TX" } +{ "_id" : "76177", "city" : "FORT WORTH", "loc" : [ -97.332671, 32.901017 ], "pop" : 61, "state" : "TX" } +{ "_id" : "76179", "city" : "SAGINAW", "loc" : [ -97.403149, 32.872961 ], "pop" : 15143, "state" : "TX" } +{ "_id" : "76180", "city" : "NORTH RICHLAND H", "loc" : [ -97.220714, 32.853966 ], "pop" : 44496, "state" : "TX" } +{ "_id" : "76201", "city" : "DENTON", "loc" : [ -97.13143599999999, 33.22893 ], "pop" : 48643, "state" : "TX" } +{ "_id" : "76205", "city" : "DENTON", "loc" : [ -97.101833, 33.180106 ], "pop" : 27830, "state" : "TX" } +{ "_id" : "76225", "city" : "ALVORD", "loc" : [ -97.68848800000001, 33.36982 ], "pop" : 1748, "state" : "TX" } +{ "_id" : "76226", "city" : "ARGYLE", "loc" : [ -97.159977, 33.106244 ], "pop" : 4420, "state" : "TX" } +{ "_id" : "76227", "city" : "AUBREY", "loc" : [ -96.987866, 33.291997 ], "pop" : 3089, "state" : "TX" } +{ "_id" : "76228", "city" : "BELLEVUE", "loc" : [ -98.15737300000001, 33.58789 ], "pop" : 1697, "state" : "TX" } +{ "_id" : "76230", "city" : "BOWIE", "loc" : [ -97.83733700000001, 33.556796 ], "pop" : 8686, "state" : "TX" } +{ "_id" : "76233", "city" : "COLLINSVILLE", "loc" : [ -96.901365, 33.558012 ], "pop" : 1681, "state" : "TX" } +{ "_id" : "76234", "city" : "DECATUR", "loc" : [ -97.573995, 33.235077 ], "pop" : 9323, "state" : "TX" } +{ "_id" : "76238", "city" : "ERA", "loc" : [ -97.29235799999999, 33.50101 ], "pop" : 264, "state" : "TX" } +{ "_id" : "76239", "city" : "FORESTBURG", "loc" : [ -97.584774, 33.539778 ], "pop" : 805, "state" : "TX" } +{ "_id" : "76240", "city" : "LAKE KIOWA", "loc" : [ -97.103208, 33.625943 ], "pop" : 24108, "state" : "TX" } +{ "_id" : "76245", "city" : "GORDONVILLE", "loc" : [ -96.84027, 33.834283 ], "pop" : 1664, "state" : "TX" } +{ "_id" : "76247", "city" : "JUSTIN", "loc" : [ -97.309254, 33.073375 ], "pop" : 3422, "state" : "TX" } +{ "_id" : "76248", "city" : "KELLER", "loc" : [ -97.24888300000001, 32.927556 ], "pop" : 14313, "state" : "TX" } +{ "_id" : "76249", "city" : "KRUM", "loc" : [ -97.26745200000001, 33.27337 ], "pop" : 3198, "state" : "TX" } +{ "_id" : "76250", "city" : "LINDSAY", "loc" : [ -97.221436, 33.63601 ], "pop" : 610, "state" : "TX" } +{ "_id" : "76251", "city" : "MONTAGUE", "loc" : [ -97.72822600000001, 33.663899 ], "pop" : 617, "state" : "TX" } +{ "_id" : "76252", "city" : "MUENSTER", "loc" : [ -97.362409, 33.659549 ], "pop" : 3042, "state" : "TX" } +{ "_id" : "76255", "city" : "NOCONA", "loc" : [ -97.72698200000001, 33.798163 ], "pop" : 4365, "state" : "TX" } +{ "_id" : "76258", "city" : "PILOT POINT", "loc" : [ -96.944554, 33.370983 ], "pop" : 4183, "state" : "TX" } +{ "_id" : "76259", "city" : "PONDER", "loc" : [ -97.28481499999999, 33.177383 ], "pop" : 1443, "state" : "TX" } +{ "_id" : "76261", "city" : "RINGGOLD", "loc" : [ -97.94398200000001, 33.816392 ], "pop" : 243, "state" : "TX" } +{ "_id" : "76262", "city" : "TROPHY CLUB", "loc" : [ -97.20534600000001, 32.98639 ], "pop" : 11484, "state" : "TX" } +{ "_id" : "76263", "city" : "ROSSTON", "loc" : [ -97.454172, 33.483795 ], "pop" : 30, "state" : "TX" } +{ "_id" : "76264", "city" : "SADLER", "loc" : [ -96.840017, 33.730989 ], "pop" : 349, "state" : "TX" } +{ "_id" : "76265", "city" : "SAINT JO", "loc" : [ -97.55675599999999, 33.744024 ], "pop" : 2071, "state" : "TX" } +{ "_id" : "76266", "city" : "SANGER", "loc" : [ -97.181432, 33.356266 ], "pop" : 7440, "state" : "TX" } +{ "_id" : "76270", "city" : "SUNSET", "loc" : [ -97.77089100000001, 33.453909 ], "pop" : 487, "state" : "TX" } +{ "_id" : "76271", "city" : "TIOGA", "loc" : [ -96.909712, 33.467493 ], "pop" : 857, "state" : "TX" } +{ "_id" : "76272", "city" : "VALLEY VIEW", "loc" : [ -97.231053, 33.502166 ], "pop" : 2754, "state" : "TX" } +{ "_id" : "76273", "city" : "WHITESBORO", "loc" : [ -96.878984, 33.659021 ], "pop" : 5920, "state" : "TX" } +{ "_id" : "76301", "city" : "WICHITA FALLS", "loc" : [ -98.49764500000001, 33.905284 ], "pop" : 15309, "state" : "TX" } +{ "_id" : "76302", "city" : "WICHITA FALLS", "loc" : [ -98.493987, 33.864278 ], "pop" : 10724, "state" : "TX" } +{ "_id" : "76303", "city" : "WICHITA FALLS", "loc" : [ -98.460812, 33.899837 ], "pop" : 3922, "state" : "TX" } +{ "_id" : "76304", "city" : "WICHITA FALLS", "loc" : [ -98.500491, 33.930806 ], "pop" : 4529, "state" : "TX" } +{ "_id" : "76305", "city" : "WICHITA FALLS", "loc" : [ -98.540679, 33.937345 ], "pop" : 8522, "state" : "TX" } +{ "_id" : "76306", "city" : "WICHITA FALLS", "loc" : [ -98.524835, 33.974595 ], "pop" : 6808, "state" : "TX" } +{ "_id" : "76308", "city" : "WICHITA FALLS", "loc" : [ -98.53396499999999, 33.863258 ], "pop" : 19151, "state" : "TX" } +{ "_id" : "76309", "city" : "WICHITA FALLS", "loc" : [ -98.534288, 33.893084 ], "pop" : 12500, "state" : "TX" } +{ "_id" : "76310", "city" : "WICHITA FALLS", "loc" : [ -98.575548, 33.858122 ], "pop" : 11497, "state" : "TX" } +{ "_id" : "76311", "city" : "SHEPPARD AFB", "loc" : [ -98.508771, 33.982353 ], "pop" : 7080, "state" : "TX" } +{ "_id" : "76354", "city" : "BURKBURNETT", "loc" : [ -98.570842, 34.085989 ], "pop" : 10558, "state" : "TX" } +{ "_id" : "76357", "city" : "BYERS", "loc" : [ -98.18392900000001, 34.072812 ], "pop" : 665, "state" : "TX" } +{ "_id" : "76359", "city" : "ELBERT", "loc" : [ -99.05521400000001, 33.015687 ], "pop" : 445, "state" : "TX" } +{ "_id" : "76360", "city" : "ELECTRA", "loc" : [ -98.91545000000001, 34.036234 ], "pop" : 3580, "state" : "TX" } +{ "_id" : "76363", "city" : "GOREE", "loc" : [ -99.525806, 33.474832 ], "pop" : 523, "state" : "TX" } +{ "_id" : "76364", "city" : "HARROLD", "loc" : [ -99.03505199999999, 34.097097 ], "pop" : 369, "state" : "TX" } +{ "_id" : "76365", "city" : "HENRIETTA", "loc" : [ -98.25997599999999, 33.819609 ], "pop" : 6020, "state" : "TX" } +{ "_id" : "76366", "city" : "HOLLIDAY", "loc" : [ -98.657634, 33.675141 ], "pop" : 5949, "state" : "TX" } +{ "_id" : "76367", "city" : "IOWA PARK", "loc" : [ -98.674497, 33.94235 ], "pop" : 9443, "state" : "TX" } +{ "_id" : "76371", "city" : "MUNDAY", "loc" : [ -99.63262400000001, 33.456088 ], "pop" : 2028, "state" : "TX" } +{ "_id" : "76372", "city" : "NEWCASTLE", "loc" : [ -98.74464399999999, 33.190103 ], "pop" : 905, "state" : "TX" } +{ "_id" : "76373", "city" : "OKLAUNION", "loc" : [ -99.160234, 34.120372 ], "pop" : 338, "state" : "TX" } +{ "_id" : "76374", "city" : "OLNEY", "loc" : [ -98.742695, 33.360135 ], "pop" : 4554, "state" : "TX" } +{ "_id" : "76377", "city" : "PETROLIA", "loc" : [ -98.269223, 34.027331 ], "pop" : 1642, "state" : "TX" } +{ "_id" : "76379", "city" : "SCOTLAND", "loc" : [ -98.464983, 33.653486 ], "pop" : 398, "state" : "TX" } +{ "_id" : "76380", "city" : "SEYMOUR", "loc" : [ -99.25872699999999, 33.591445 ], "pop" : 4208, "state" : "TX" } +{ "_id" : "76383", "city" : "VERA", "loc" : [ -99.75909799999999, 33.615469 ], "pop" : 481, "state" : "TX" } +{ "_id" : "76384", "city" : "VERNON", "loc" : [ -99.30301, 34.149135 ], "pop" : 14414, "state" : "TX" } +{ "_id" : "76388", "city" : "WEINERT", "loc" : [ -99.666431, 33.324872 ], "pop" : 301, "state" : "TX" } +{ "_id" : "76389", "city" : "WINDTHORST", "loc" : [ -98.437589, 33.57957 ], "pop" : 381, "state" : "TX" } +{ "_id" : "76401", "city" : "STEPHENVILLE", "loc" : [ -98.222407, 32.221372 ], "pop" : 19745, "state" : "TX" } +{ "_id" : "76424", "city" : "BRECKENRIDGE", "loc" : [ -98.909882, 32.753166 ], "pop" : 8803, "state" : "TX" } +{ "_id" : "76426", "city" : "BRIDGEPORT", "loc" : [ -97.78098, 33.187027 ], "pop" : 9158, "state" : "TX" } +{ "_id" : "76427", "city" : "BRYSON", "loc" : [ -98.370256, 33.15947 ], "pop" : 915, "state" : "TX" } +{ "_id" : "76429", "city" : "CADDO", "loc" : [ -98.65898300000001, 32.688617 ], "pop" : 127, "state" : "TX" } +{ "_id" : "76430", "city" : "ALBANY", "loc" : [ -99.319581, 32.719005 ], "pop" : 2858, "state" : "TX" } +{ "_id" : "76431", "city" : "CHICO", "loc" : [ -97.803133, 33.319315 ], "pop" : 2657, "state" : "TX" } +{ "_id" : "76432", "city" : "BLANKET", "loc" : [ -98.83108900000001, 31.78819 ], "pop" : 1929, "state" : "TX" } +{ "_id" : "76433", "city" : "BLUFF DALE", "loc" : [ -98.163775, 32.401791 ], "pop" : 1751, "state" : "TX" } +{ "_id" : "76435", "city" : "CARBON", "loc" : [ -98.83479, 32.270125 ], "pop" : 462, "state" : "TX" } +{ "_id" : "76436", "city" : "CARLTON", "loc" : [ -98.152519, 31.911438 ], "pop" : 235, "state" : "TX" } +{ "_id" : "76437", "city" : "CISCO", "loc" : [ -98.986507, 32.380043 ], "pop" : 4906, "state" : "TX" } +{ "_id" : "76442", "city" : "COMANCHE", "loc" : [ -98.608227, 31.911637 ], "pop" : 7208, "state" : "TX" } +{ "_id" : "76443", "city" : "CROSS PLAINS", "loc" : [ -99.18718, 32.148159 ], "pop" : 1928, "state" : "TX" } +{ "_id" : "76444", "city" : "DE LEON", "loc" : [ -98.54894, 32.108742 ], "pop" : 4401, "state" : "TX" } +{ "_id" : "76445", "city" : "DESDEMONA", "loc" : [ -98.56732700000001, 32.281877 ], "pop" : 366, "state" : "TX" } +{ "_id" : "76446", "city" : "DUBLIN", "loc" : [ -98.34546899999999, 32.090873 ], "pop" : 5029, "state" : "TX" } +{ "_id" : "76448", "city" : "EASTLAND", "loc" : [ -98.807101, 32.399418 ], "pop" : 5837, "state" : "TX" } +{ "_id" : "76449", "city" : "GRAFORD", "loc" : [ -98.337002, 32.924192 ], "pop" : 2235, "state" : "TX" } +{ "_id" : "76450", "city" : "GRAHAM", "loc" : [ -98.583212, 33.099283 ], "pop" : 12511, "state" : "TX" } +{ "_id" : "76453", "city" : "GORDON", "loc" : [ -98.36321100000001, 32.547828 ], "pop" : 566, "state" : "TX" } +{ "_id" : "76454", "city" : "GORMAN", "loc" : [ -98.683408, 32.223441 ], "pop" : 1773, "state" : "TX" } +{ "_id" : "76455", "city" : "GUSTINE", "loc" : [ -98.383488, 31.872448 ], "pop" : 1680, "state" : "TX" } +{ "_id" : "76457", "city" : "HICO", "loc" : [ -98.024933, 31.959718 ], "pop" : 1962, "state" : "TX" } +{ "_id" : "76458", "city" : "JACKSBORO", "loc" : [ -98.168138, 33.234655 ], "pop" : 4664, "state" : "TX" } +{ "_id" : "76459", "city" : "JERMYN", "loc" : [ -98.39314899999999, 33.263554 ], "pop" : 154, "state" : "TX" } +{ "_id" : "76460", "city" : "LOVING", "loc" : [ -98.50237, 33.26886 ], "pop" : 156, "state" : "TX" } +{ "_id" : "76462", "city" : "LIPAN", "loc" : [ -97.953614, 32.507218 ], "pop" : 1582, "state" : "TX" } +{ "_id" : "76463", "city" : "MINGUS", "loc" : [ -98.42626199999999, 32.562665 ], "pop" : 278, "state" : "TX" } +{ "_id" : "76464", "city" : "MORAN", "loc" : [ -99.165567, 32.554909 ], "pop" : 458, "state" : "TX" } +{ "_id" : "76470", "city" : "RANGER", "loc" : [ -98.67465900000001, 32.46809 ], "pop" : 3414, "state" : "TX" } +{ "_id" : "76471", "city" : "RISING STAR", "loc" : [ -98.98585199999999, 32.127986 ], "pop" : 1810, "state" : "TX" } +{ "_id" : "76472", "city" : "SANTO", "loc" : [ -98.179675, 32.597935 ], "pop" : 1433, "state" : "TX" } +{ "_id" : "76474", "city" : "SIDNEY", "loc" : [ -98.767995, 31.932031 ], "pop" : 92, "state" : "TX" } +{ "_id" : "76475", "city" : "STRAWN", "loc" : [ -98.499467, 32.5945 ], "pop" : 968, "state" : "TX" } +{ "_id" : "76476", "city" : "TOLAR", "loc" : [ -97.880208, 32.377246 ], "pop" : 2586, "state" : "TX" } +{ "_id" : "76483", "city" : "THROCKMORTON", "loc" : [ -99.183812, 33.179446 ], "pop" : 1321, "state" : "TX" } +{ "_id" : "76484", "city" : "PALO PINTO", "loc" : [ -98.270262, 32.725315 ], "pop" : 867, "state" : "TX" } +{ "_id" : "76486", "city" : "PERRIN", "loc" : [ -98.044006, 33.058453 ], "pop" : 1065, "state" : "TX" } +{ "_id" : "76487", "city" : "POOLVILLE", "loc" : [ -97.847229, 32.968023 ], "pop" : 1549, "state" : "TX" } +{ "_id" : "76490", "city" : "WHITT", "loc" : [ -98.02100799999999, 32.955459 ], "pop" : 305, "state" : "TX" } +{ "_id" : "76491", "city" : "WOODSON", "loc" : [ -99.015953, 33.301972 ], "pop" : 114, "state" : "TX" } +{ "_id" : "76501", "city" : "TEMPLE", "loc" : [ -97.334264, 31.089518 ], "pop" : 16400, "state" : "TX" } +{ "_id" : "76502", "city" : "TEMPLE", "loc" : [ -97.389781, 31.071004 ], "pop" : 15632, "state" : "TX" } +{ "_id" : "76504", "city" : "TEMPLE", "loc" : [ -97.36476399999999, 31.091742 ], "pop" : 20273, "state" : "TX" } +{ "_id" : "76511", "city" : "BARTLETT", "loc" : [ -97.42630200000001, 30.799056 ], "pop" : 727, "state" : "TX" } +{ "_id" : "76513", "city" : "BELTON", "loc" : [ -97.472025, 31.072298 ], "pop" : 20331, "state" : "TX" } +{ "_id" : "76518", "city" : "BUCKHOLTS", "loc" : [ -97.124135, 30.885756 ], "pop" : 1072, "state" : "TX" } +{ "_id" : "76519", "city" : "BURLINGTON", "loc" : [ -96.88530799999999, 30.945691 ], "pop" : 1312, "state" : "TX" } +{ "_id" : "76520", "city" : "CAMERON", "loc" : [ -96.976562, 30.852713 ], "pop" : 6965, "state" : "TX" } +{ "_id" : "76522", "city" : "IZORO", "loc" : [ -97.912132, 31.125799 ], "pop" : 26431, "state" : "TX" } +{ "_id" : "76523", "city" : "DAVILLA", "loc" : [ -97.20086499999999, 30.767471 ], "pop" : 1079, "state" : "TX" } +{ "_id" : "76524", "city" : "EDDY", "loc" : [ -97.270926, 31.326724 ], "pop" : 2544, "state" : "TX" } +{ "_id" : "76525", "city" : "BEE HOUSE", "loc" : [ -98.05517500000001, 31.403967 ], "pop" : 1179, "state" : "TX" } +{ "_id" : "76526", "city" : "FLAT", "loc" : [ -97.589777, 31.306475 ], "pop" : 774, "state" : "TX" } +{ "_id" : "76527", "city" : "FLORENCE", "loc" : [ -97.834423, 30.78137 ], "pop" : 3703, "state" : "TX" } +{ "_id" : "76528", "city" : "TURNERSVILLE", "loc" : [ -97.72428600000001, 31.447646 ], "pop" : 14415, "state" : "TX" } +{ "_id" : "76530", "city" : "GRANGER", "loc" : [ -97.445065, 30.739813 ], "pop" : 3160, "state" : "TX" } +{ "_id" : "76531", "city" : "HAMILTON", "loc" : [ -98.113051, 31.678116 ], "pop" : 5260, "state" : "TX" } +{ "_id" : "76534", "city" : "HOLLAND", "loc" : [ -97.385695, 30.879977 ], "pop" : 2223, "state" : "TX" } +{ "_id" : "76537", "city" : "JARRELL", "loc" : [ -97.60083299999999, 30.748406 ], "pop" : 3430, "state" : "TX" } +{ "_id" : "76538", "city" : "JONESBORO", "loc" : [ -97.775155, 31.599601 ], "pop" : 793, "state" : "TX" } +{ "_id" : "76539", "city" : "KEMPNER", "loc" : [ -97.97206799999999, 31.073051 ], "pop" : 3884, "state" : "TX" } +{ "_id" : "76541", "city" : "KILLEEN", "loc" : [ -97.727808, 31.116426 ], "pop" : 22853, "state" : "TX" } +{ "_id" : "76542", "city" : "HARKER HEIGHTS", "loc" : [ -97.746736, 31.075056 ], "pop" : 25829, "state" : "TX" } +{ "_id" : "76543", "city" : "HARKER HEIGHTS", "loc" : [ -97.67686399999999, 31.100505 ], "pop" : 35052, "state" : "TX" } +{ "_id" : "76544", "city" : "FORT HOOD", "loc" : [ -97.776404, 31.137953 ], "pop" : 36657, "state" : "TX" } +{ "_id" : "76550", "city" : "LAMPASAS", "loc" : [ -98.183361, 31.067957 ], "pop" : 7698, "state" : "TX" } +{ "_id" : "76556", "city" : "MILANO", "loc" : [ -96.803477, 30.736612 ], "pop" : 2187, "state" : "TX" } +{ "_id" : "76557", "city" : "MOODY", "loc" : [ -97.40995700000001, 31.253321 ], "pop" : 4411, "state" : "TX" } +{ "_id" : "76559", "city" : "NOLANVILLE", "loc" : [ -97.594109, 31.083271 ], "pop" : 1820, "state" : "TX" } +{ "_id" : "76561", "city" : "OGLESBY", "loc" : [ -97.550093, 31.443767 ], "pop" : 1221, "state" : "TX" } +{ "_id" : "76565", "city" : "POTTSVILLE", "loc" : [ -98.356077, 31.68374 ], "pop" : 279, "state" : "TX" } +{ "_id" : "76566", "city" : "PURMELA", "loc" : [ -97.88894500000001, 31.472647 ], "pop" : 1111, "state" : "TX" } +{ "_id" : "76567", "city" : "ROCKDALE", "loc" : [ -97.00790000000001, 30.658282 ], "pop" : 8052, "state" : "TX" } +{ "_id" : "76569", "city" : "ROGERS", "loc" : [ -97.222793, 30.955013 ], "pop" : 2565, "state" : "TX" } +{ "_id" : "76570", "city" : "ROSEBUD", "loc" : [ -96.975455, 31.092208 ], "pop" : 3093, "state" : "TX" } +{ "_id" : "76571", "city" : "SALADO", "loc" : [ -97.532999, 30.949388 ], "pop" : 3454, "state" : "TX" } +{ "_id" : "76574", "city" : "TAYLOR", "loc" : [ -97.44010299999999, 30.58071 ], "pop" : 14135, "state" : "TX" } +{ "_id" : "76577", "city" : "THORNDALE", "loc" : [ -97.176446, 30.608237 ], "pop" : 2279, "state" : "TX" } +{ "_id" : "76578", "city" : "THRALL", "loc" : [ -97.289261, 30.591981 ], "pop" : 852, "state" : "TX" } +{ "_id" : "76579", "city" : "TROY", "loc" : [ -97.285205, 31.175855 ], "pop" : 3791, "state" : "TX" } +{ "_id" : "76621", "city" : "ABBOTT", "loc" : [ -97.06714599999999, 31.891642 ], "pop" : 577, "state" : "TX" } +{ "_id" : "76622", "city" : "AQUILLA", "loc" : [ -97.22577, 31.858882 ], "pop" : 1901, "state" : "TX" } +{ "_id" : "76624", "city" : "AXTELL", "loc" : [ -96.988178, 31.660966 ], "pop" : 3235, "state" : "TX" } +{ "_id" : "76626", "city" : "BLOOMING GROVE", "loc" : [ -96.700991, 32.075839 ], "pop" : 1594, "state" : "TX" } +{ "_id" : "76627", "city" : "BLUM", "loc" : [ -97.365183, 32.105183 ], "pop" : 2737, "state" : "TX" } +{ "_id" : "76629", "city" : "BREMOND", "loc" : [ -96.66974399999999, 31.156007 ], "pop" : 1883, "state" : "TX" } +{ "_id" : "76630", "city" : "BRUCEVILLE", "loc" : [ -97.234244, 31.326708 ], "pop" : 477, "state" : "TX" } +{ "_id" : "76631", "city" : "BYNUM", "loc" : [ -96.98370199999999, 31.990668 ], "pop" : 496, "state" : "TX" } +{ "_id" : "76632", "city" : "CHILTON", "loc" : [ -97.09002, 31.310018 ], "pop" : 2304, "state" : "TX" } +{ "_id" : "76633", "city" : "CHINA SPRING", "loc" : [ -97.30022099999999, 31.667266 ], "pop" : 3030, "state" : "TX" } +{ "_id" : "76634", "city" : "LAGUNA PARK", "loc" : [ -97.515282, 31.799689 ], "pop" : 6410, "state" : "TX" } +{ "_id" : "76635", "city" : "COOLIDGE", "loc" : [ -96.65774399999999, 31.743804 ], "pop" : 1042, "state" : "TX" } +{ "_id" : "76636", "city" : "COVINGTON", "loc" : [ -97.259091, 32.159538 ], "pop" : 767, "state" : "TX" } +{ "_id" : "76637", "city" : "CRANFILLS GAP", "loc" : [ -97.78537, 31.781071 ], "pop" : 687, "state" : "TX" } +{ "_id" : "76638", "city" : "CRAWFORD", "loc" : [ -97.38999200000001, 31.559765 ], "pop" : 3473, "state" : "TX" } +{ "_id" : "76639", "city" : "DAWSON", "loc" : [ -96.708483, 31.897429 ], "pop" : 1457, "state" : "TX" } +{ "_id" : "76640", "city" : "ELM MOTT", "loc" : [ -97.113838, 31.672547 ], "pop" : 4183, "state" : "TX" } +{ "_id" : "76641", "city" : "FROST", "loc" : [ -96.76843700000001, 32.027545 ], "pop" : 1831, "state" : "TX" } +{ "_id" : "76642", "city" : "GROESBECK", "loc" : [ -96.523381, 31.535667 ], "pop" : 5538, "state" : "TX" } +{ "_id" : "76643", "city" : "HEWITT", "loc" : [ -97.196556, 31.458166 ], "pop" : 8487, "state" : "TX" } +{ "_id" : "76645", "city" : "HILLSBORO", "loc" : [ -97.11979100000001, 32.014942 ], "pop" : 8966, "state" : "TX" } +{ "_id" : "76648", "city" : "HUBBARD", "loc" : [ -96.80001, 31.843559 ], "pop" : 2015, "state" : "TX" } +{ "_id" : "76649", "city" : "IREDELL", "loc" : [ -97.879283, 31.972197 ], "pop" : 813, "state" : "TX" } +{ "_id" : "76651", "city" : "ITALY", "loc" : [ -96.88229, 32.178508 ], "pop" : 2321, "state" : "TX" } +{ "_id" : "76652", "city" : "KOPPERL", "loc" : [ -97.542085, 32.103491 ], "pop" : 820, "state" : "TX" } +{ "_id" : "76653", "city" : "KOSSE", "loc" : [ -96.61947499999999, 31.314704 ], "pop" : 854, "state" : "TX" } +{ "_id" : "76655", "city" : "LORENA", "loc" : [ -97.230161, 31.409271 ], "pop" : 4007, "state" : "TX" } +{ "_id" : "76656", "city" : "LOTT", "loc" : [ -97.058143, 31.192462 ], "pop" : 2005, "state" : "TX" } +{ "_id" : "76657", "city" : "MC GREGOR", "loc" : [ -97.394318, 31.443099 ], "pop" : 5853, "state" : "TX" } +{ "_id" : "76660", "city" : "MALONE", "loc" : [ -96.890682, 31.923979 ], "pop" : 491, "state" : "TX" } +{ "_id" : "76661", "city" : "MARLIN", "loc" : [ -96.888942, 31.303592 ], "pop" : 8810, "state" : "TX" } +{ "_id" : "76664", "city" : "MART", "loc" : [ -96.838133, 31.545798 ], "pop" : 2588, "state" : "TX" } +{ "_id" : "76665", "city" : "MERIDIAN", "loc" : [ -97.64433, 31.929022 ], "pop" : 2354, "state" : "TX" } +{ "_id" : "76666", "city" : "MERTENS", "loc" : [ -96.898128, 32.02753 ], "pop" : 328, "state" : "TX" } +{ "_id" : "76667", "city" : "MEXIA", "loc" : [ -96.495186, 31.678386 ], "pop" : 10971, "state" : "TX" } +{ "_id" : "76670", "city" : "MILFORD", "loc" : [ -96.96115, 32.148198 ], "pop" : 1259, "state" : "TX" } +{ "_id" : "76671", "city" : "MORGAN", "loc" : [ -97.560829, 32.01946 ], "pop" : 1403, "state" : "TX" } +{ "_id" : "76673", "city" : "MOUNT CALM", "loc" : [ -96.89439299999999, 31.757504 ], "pop" : 612, "state" : "TX" } +{ "_id" : "76675", "city" : "OTTO", "loc" : [ -96.87590400000001, 31.432733 ], "pop" : 776, "state" : "TX" } +{ "_id" : "76676", "city" : "PENELOPE", "loc" : [ -96.937164, 31.855148 ], "pop" : 613, "state" : "TX" } +{ "_id" : "76678", "city" : "PRAIRIE HILL", "loc" : [ -96.809381, 31.659097 ], "pop" : 657, "state" : "TX" } +{ "_id" : "76679", "city" : "PURDON", "loc" : [ -96.58561899999999, 31.948285 ], "pop" : 752, "state" : "TX" } +{ "_id" : "76680", "city" : "REAGAN", "loc" : [ -96.74194300000001, 31.229713 ], "pop" : 796, "state" : "TX" } +{ "_id" : "76681", "city" : "RICHLAND", "loc" : [ -96.437262, 31.901785 ], "pop" : 512, "state" : "TX" } +{ "_id" : "76682", "city" : "RIESEL", "loc" : [ -96.94764000000001, 31.500247 ], "pop" : 2488, "state" : "TX" } +{ "_id" : "76687", "city" : "THORNTON", "loc" : [ -96.50237799999999, 31.408326 ], "pop" : 1438, "state" : "TX" } +{ "_id" : "76689", "city" : "VALLEY MILLS", "loc" : [ -97.493461, 31.659876 ], "pop" : 1796, "state" : "TX" } +{ "_id" : "76690", "city" : "WALNUT SPRINGS", "loc" : [ -97.751423, 32.059268 ], "pop" : 842, "state" : "TX" } +{ "_id" : "76691", "city" : "WEST", "loc" : [ -97.125843, 31.775385 ], "pop" : 6222, "state" : "TX" } +{ "_id" : "76692", "city" : "BONANZA", "loc" : [ -97.33495000000001, 31.959201 ], "pop" : 5302, "state" : "TX" } +{ "_id" : "76693", "city" : "WORTHAM", "loc" : [ -96.420208, 31.786542 ], "pop" : 1602, "state" : "TX" } +{ "_id" : "76701", "city" : "WACO", "loc" : [ -97.139608, 31.552452 ], "pop" : 1752, "state" : "TX" } +{ "_id" : "76704", "city" : "BELLMEAD", "loc" : [ -97.12674199999999, 31.575701 ], "pop" : 8919, "state" : "TX" } +{ "_id" : "76705", "city" : "BELLMEAD", "loc" : [ -97.09457500000001, 31.610787 ], "pop" : 18763, "state" : "TX" } +{ "_id" : "76706", "city" : "WACO", "loc" : [ -97.11975200000001, 31.517086 ], "pop" : 31263, "state" : "TX" } +{ "_id" : "76707", "city" : "WACO", "loc" : [ -97.158824, 31.552709 ], "pop" : 15905, "state" : "TX" } +{ "_id" : "76708", "city" : "WACO", "loc" : [ -97.178635, 31.576544 ], "pop" : 18436, "state" : "TX" } +{ "_id" : "76710", "city" : "WACO", "loc" : [ -97.189891, 31.534981 ], "pop" : 22014, "state" : "TX" } +{ "_id" : "76711", "city" : "BEVERLY HILLS", "loc" : [ -97.150254, 31.519863 ], "pop" : 8736, "state" : "TX" } +{ "_id" : "76712", "city" : "WOODWAY", "loc" : [ -97.23106199999999, 31.505074 ], "pop" : 14756, "state" : "TX" } +{ "_id" : "76801", "city" : "EARLY", "loc" : [ -98.97516400000001, 31.704658 ], "pop" : 24634, "state" : "TX" } +{ "_id" : "76820", "city" : "ART", "loc" : [ -99.093732, 30.775419 ], "pop" : 24, "state" : "TX" } +{ "_id" : "76821", "city" : "BALLINGER", "loc" : [ -99.958927, 31.746836 ], "pop" : 4957, "state" : "TX" } +{ "_id" : "76823", "city" : "BANGS", "loc" : [ -99.107657, 31.768388 ], "pop" : 5681, "state" : "TX" } +{ "_id" : "76824", "city" : "BEND", "loc" : [ -98.482102, 31.11231 ], "pop" : 1, "state" : "TX" } +{ "_id" : "76825", "city" : "FIFE", "loc" : [ -99.3372, 31.128304 ], "pop" : 7280, "state" : "TX" } +{ "_id" : "76827", "city" : "BROOKESMITH", "loc" : [ -99.127729, 31.517602 ], "pop" : 240, "state" : "TX" } +{ "_id" : "76828", "city" : "BURKETT", "loc" : [ -99.255258, 31.998623 ], "pop" : 237, "state" : "TX" } +{ "_id" : "76831", "city" : "CASTELL", "loc" : [ -98.931859, 30.697429 ], "pop" : 64, "state" : "TX" } +{ "_id" : "76832", "city" : "CHEROKEE", "loc" : [ -98.66332, 30.980598 ], "pop" : 127, "state" : "TX" } +{ "_id" : "76834", "city" : "COLEMAN", "loc" : [ -99.427007, 31.828651 ], "pop" : 6300, "state" : "TX" } +{ "_id" : "76836", "city" : "DOOLE", "loc" : [ -99.550605, 31.415743 ], "pop" : 86, "state" : "TX" } +{ "_id" : "76837", "city" : "EDEN", "loc" : [ -99.840658, 31.219219 ], "pop" : 2028, "state" : "TX" } +{ "_id" : "76841", "city" : "FORT MC KAVETT", "loc" : [ -100.080928, 30.82903 ], "pop" : 47, "state" : "TX" } +{ "_id" : "76842", "city" : "FREDONIA", "loc" : [ -99.12156, 30.921386 ], "pop" : 72, "state" : "TX" } +{ "_id" : "76844", "city" : "GOLDTHWAITE", "loc" : [ -98.574405, 31.445769 ], "pop" : 2523, "state" : "TX" } +{ "_id" : "76845", "city" : "GOULDBUSK", "loc" : [ -99.51363000000001, 31.551075 ], "pop" : 159, "state" : "TX" } +{ "_id" : "76848", "city" : "HEXT", "loc" : [ -99.554008, 30.881632 ], "pop" : 60, "state" : "TX" } +{ "_id" : "76849", "city" : "JUNCTION", "loc" : [ -99.74731, 30.47544 ], "pop" : 3248, "state" : "TX" } +{ "_id" : "76852", "city" : "LOHN", "loc" : [ -99.38334, 31.317297 ], "pop" : 233, "state" : "TX" } +{ "_id" : "76853", "city" : "LOMETA", "loc" : [ -98.400553, 31.216712 ], "pop" : 1215, "state" : "TX" } +{ "_id" : "76854", "city" : "LONDON", "loc" : [ -99.62552700000001, 30.617101 ], "pop" : 465, "state" : "TX" } +{ "_id" : "76856", "city" : "MASON", "loc" : [ -99.226117, 30.743392 ], "pop" : 3182, "state" : "TX" } +{ "_id" : "76857", "city" : "MAY", "loc" : [ -98.96564600000001, 31.957082 ], "pop" : 1454, "state" : "TX" } +{ "_id" : "76858", "city" : "MELVIN", "loc" : [ -99.54389999999999, 31.185145 ], "pop" : 361, "state" : "TX" } +{ "_id" : "76859", "city" : "MENARD", "loc" : [ -99.784721, 30.911898 ], "pop" : 2145, "state" : "TX" } +{ "_id" : "76861", "city" : "MILES", "loc" : [ -100.182292, 31.612052 ], "pop" : 1102, "state" : "TX" } +{ "_id" : "76862", "city" : "MILLERSVIEW", "loc" : [ -99.71713699999999, 31.416745 ], "pop" : 137, "state" : "TX" } +{ "_id" : "76864", "city" : "MULLIN", "loc" : [ -98.66354200000001, 31.574829 ], "pop" : 1281, "state" : "TX" } +{ "_id" : "76865", "city" : "NORTON", "loc" : [ -100.131515, 31.879498 ], "pop" : 244, "state" : "TX" } +{ "_id" : "76866", "city" : "PAINT ROCK", "loc" : [ -99.91393600000001, 31.504808 ], "pop" : 400, "state" : "TX" } +{ "_id" : "76867", "city" : "PEAR VALLEY", "loc" : [ -99.494742, 31.297211 ], "pop" : 110, "state" : "TX" } +{ "_id" : "76869", "city" : "PONTOTOC", "loc" : [ -99.021224, 30.890617 ], "pop" : 113, "state" : "TX" } +{ "_id" : "76870", "city" : "PRIDDY", "loc" : [ -98.501464, 31.687418 ], "pop" : 122, "state" : "TX" } +{ "_id" : "76871", "city" : "RICHLAND SPRINGS", "loc" : [ -98.850731, 31.275317 ], "pop" : 1103, "state" : "TX" } +{ "_id" : "76872", "city" : "ROCHELLE", "loc" : [ -99.157229, 31.300011 ], "pop" : 761, "state" : "TX" } +{ "_id" : "76873", "city" : "ROCKWOOD", "loc" : [ -99.374579, 31.503677 ], "pop" : 63, "state" : "TX" } +{ "_id" : "76874", "city" : "ROOSEVELT", "loc" : [ -99.916501, 30.532203 ], "pop" : 382, "state" : "TX" } +{ "_id" : "76875", "city" : "ROWENA", "loc" : [ -100.019094, 31.64355 ], "pop" : 802, "state" : "TX" } +{ "_id" : "76877", "city" : "SAN SABA", "loc" : [ -98.730929, 31.162678 ], "pop" : 4023, "state" : "TX" } +{ "_id" : "76878", "city" : "SANTA ANNA", "loc" : [ -99.321197, 31.721477 ], "pop" : 1835, "state" : "TX" } +{ "_id" : "76880", "city" : "STAR", "loc" : [ -98.415752, 31.479039 ], "pop" : 605, "state" : "TX" } +{ "_id" : "76882", "city" : "TALPA", "loc" : [ -99.674679, 31.803424 ], "pop" : 240, "state" : "TX" } +{ "_id" : "76883", "city" : "TELEGRAPH", "loc" : [ -99.928369, 30.367365 ], "pop" : 27, "state" : "TX" } +{ "_id" : "76884", "city" : "VALERA", "loc" : [ -99.563962, 31.77314 ], "pop" : 201, "state" : "TX" } +{ "_id" : "76885", "city" : "VALLEY SPRING", "loc" : [ -98.83254100000001, 30.836862 ], "pop" : 270, "state" : "TX" } +{ "_id" : "76887", "city" : "VOCA", "loc" : [ -99.16820300000001, 30.995874 ], "pop" : 94, "state" : "TX" } +{ "_id" : "76888", "city" : "LEADAY", "loc" : [ -99.53853599999999, 31.639194 ], "pop" : 227, "state" : "TX" } +{ "_id" : "76890", "city" : "ZEPHYR", "loc" : [ -98.81819900000001, 31.669429 ], "pop" : 433, "state" : "TX" } +{ "_id" : "76901", "city" : "SAN ANGELO", "loc" : [ -100.481752, 31.478165 ], "pop" : 23800, "state" : "TX" } +{ "_id" : "76903", "city" : "SAN ANGELO", "loc" : [ -100.438586, 31.470735 ], "pop" : 32471, "state" : "TX" } +{ "_id" : "76904", "city" : "SAN ANGELO", "loc" : [ -100.480036, 31.419411 ], "pop" : 25535, "state" : "TX" } +{ "_id" : "76905", "city" : "SAN ANGELO", "loc" : [ -100.390005, 31.464738 ], "pop" : 11284, "state" : "TX" } +{ "_id" : "76930", "city" : "BARNHART", "loc" : [ -101.191752, 31.159647 ], "pop" : 178, "state" : "TX" } +{ "_id" : "76932", "city" : "BEST", "loc" : [ -101.478776, 31.240592 ], "pop" : 4514, "state" : "TX" } +{ "_id" : "76933", "city" : "BRONTE", "loc" : [ -100.298765, 31.878939 ], "pop" : 1291, "state" : "TX" } +{ "_id" : "76934", "city" : "CARLSBAD", "loc" : [ -100.627501, 31.597995 ], "pop" : 1886, "state" : "TX" } +{ "_id" : "76935", "city" : "CHRISTOVAL", "loc" : [ -100.52031, 31.23461 ], "pop" : 1639, "state" : "TX" } +{ "_id" : "76936", "city" : "ELDORADO", "loc" : [ -100.58894, 30.86667 ], "pop" : 2990, "state" : "TX" } +{ "_id" : "76937", "city" : "EOLA", "loc" : [ -100.072892, 31.429812 ], "pop" : 479, "state" : "TX" } +{ "_id" : "76940", "city" : "MERETA", "loc" : [ -100.183391, 31.48632 ], "pop" : 768, "state" : "TX" } +{ "_id" : "76941", "city" : "MERTZON", "loc" : [ -100.822101, 31.282884 ], "pop" : 1451, "state" : "TX" } +{ "_id" : "76943", "city" : "OZONA", "loc" : [ -101.238802, 30.716369 ], "pop" : 4076, "state" : "TX" } +{ "_id" : "76945", "city" : "ROBERT LEE", "loc" : [ -100.510366, 31.895091 ], "pop" : 1826, "state" : "TX" } +{ "_id" : "76949", "city" : "SILVER", "loc" : [ -100.692229, 32.048371 ], "pop" : 45, "state" : "TX" } +{ "_id" : "76950", "city" : "SONORA", "loc" : [ -100.630667, 30.555752 ], "pop" : 4135, "state" : "TX" } +{ "_id" : "76951", "city" : "STERLING CITY", "loc" : [ -101.001729, 31.835063 ], "pop" : 1438, "state" : "TX" } +{ "_id" : "76955", "city" : "VANCOURT", "loc" : [ -100.180367, 31.340417 ], "pop" : 256, "state" : "TX" } +{ "_id" : "76957", "city" : "WALL", "loc" : [ -100.322132, 31.369445 ], "pop" : 819, "state" : "TX" } +{ "_id" : "77002", "city" : "HOUSTON", "loc" : [ -95.35936100000001, 29.759366 ], "pop" : 7658, "state" : "TX" } +{ "_id" : "77003", "city" : "HOUSTON", "loc" : [ -95.339108, 29.748903 ], "pop" : 8500, "state" : "TX" } +{ "_id" : "77004", "city" : "HOUSTON", "loc" : [ -95.36254599999999, 29.724687 ], "pop" : 29940, "state" : "TX" } +{ "_id" : "77005", "city" : "HOUSTON", "loc" : [ -95.426261, 29.717856 ], "pop" : 21772, "state" : "TX" } +{ "_id" : "77006", "city" : "HOUSTON", "loc" : [ -95.39225500000001, 29.740899 ], "pop" : 17653, "state" : "TX" } +{ "_id" : "77007", "city" : "HOUSTON", "loc" : [ -95.40342099999999, 29.773603 ], "pop" : 22511, "state" : "TX" } +{ "_id" : "77008", "city" : "HOUSTON", "loc" : [ -95.41179700000001, 29.799096 ], "pop" : 29653, "state" : "TX" } +{ "_id" : "77009", "city" : "HOUSTON", "loc" : [ -95.367481, 29.793558 ], "pop" : 42521, "state" : "TX" } +{ "_id" : "77010", "city" : "HOUSTON", "loc" : [ -95.356549, 29.75125 ], "pop" : 0, "state" : "TX" } +{ "_id" : "77011", "city" : "HOUSTON", "loc" : [ -95.30726199999999, 29.741992 ], "pop" : 22311, "state" : "TX" } +{ "_id" : "77012", "city" : "HOUSTON", "loc" : [ -95.281925, 29.71491 ], "pop" : 23344, "state" : "TX" } +{ "_id" : "77013", "city" : "HOUSTON", "loc" : [ -95.23013400000001, 29.784169 ], "pop" : 17011, "state" : "TX" } +{ "_id" : "77014", "city" : "HOUSTON", "loc" : [ -95.462497, 29.979637 ], "pop" : 11970, "state" : "TX" } +{ "_id" : "77015", "city" : "HOUSTON", "loc" : [ -95.18518899999999, 29.785287 ], "pop" : 42008, "state" : "TX" } +{ "_id" : "77016", "city" : "HOUSTON", "loc" : [ -95.30319900000001, 29.857855 ], "pop" : 31180, "state" : "TX" } +{ "_id" : "77017", "city" : "HOUSTON", "loc" : [ -95.25548499999999, 29.686301 ], "pop" : 26502, "state" : "TX" } +{ "_id" : "77018", "city" : "HOUSTON", "loc" : [ -95.426631, 29.827166 ], "pop" : 25857, "state" : "TX" } +{ "_id" : "77019", "city" : "HOUSTON", "loc" : [ -95.40539, 29.751651 ], "pop" : 15280, "state" : "TX" } +{ "_id" : "77020", "city" : "HOUSTON", "loc" : [ -95.312101, 29.775759 ], "pop" : 28011, "state" : "TX" } +{ "_id" : "77021", "city" : "HOUSTON", "loc" : [ -95.356151, 29.69538 ], "pop" : 23815, "state" : "TX" } +{ "_id" : "77022", "city" : "HOUSTON", "loc" : [ -95.376862, 29.829862 ], "pop" : 27417, "state" : "TX" } +{ "_id" : "77023", "city" : "HOUSTON", "loc" : [ -95.31777700000001, 29.724179 ], "pop" : 31983, "state" : "TX" } +{ "_id" : "77024", "city" : "HOUSTON", "loc" : [ -95.52006299999999, 29.76958 ], "pop" : 30766, "state" : "TX" } +{ "_id" : "77025", "city" : "HOUSTON", "loc" : [ -95.434107, 29.688897 ], "pop" : 21618, "state" : "TX" } +{ "_id" : "77026", "city" : "HOUSTON", "loc" : [ -95.32877499999999, 29.797168 ], "pop" : 27744, "state" : "TX" } +{ "_id" : "77027", "city" : "HOUSTON", "loc" : [ -95.446032, 29.739571 ], "pop" : 11422, "state" : "TX" } +{ "_id" : "77028", "city" : "HOUSTON", "loc" : [ -95.287886, 29.829657 ], "pop" : 17943, "state" : "TX" } +{ "_id" : "77029", "city" : "JACINTO CITY", "loc" : [ -95.25486100000001, 29.760326 ], "pop" : 17739, "state" : "TX" } +{ "_id" : "77030", "city" : "V A HOSPITAL", "loc" : [ -95.40619, 29.70372 ], "pop" : 10462, "state" : "TX" } +{ "_id" : "77031", "city" : "HOUSTON", "loc" : [ -95.541281, 29.658144 ], "pop" : 14021, "state" : "TX" } +{ "_id" : "77032", "city" : "HOUSTON", "loc" : [ -95.329883, 29.93676 ], "pop" : 8373, "state" : "TX" } +{ "_id" : "77033", "city" : "HOUSTON", "loc" : [ -95.338157, 29.668566 ], "pop" : 28295, "state" : "TX" } +{ "_id" : "77034", "city" : "HOUSTON", "loc" : [ -95.221615, 29.636395 ], "pop" : 21593, "state" : "TX" } +{ "_id" : "77035", "city" : "HOUSTON", "loc" : [ -95.48536799999999, 29.651833 ], "pop" : 30746, "state" : "TX" } +{ "_id" : "77036", "city" : "HOUSTON", "loc" : [ -95.540464, 29.698447 ], "pop" : 55414, "state" : "TX" } +{ "_id" : "77037", "city" : "HOUSTON", "loc" : [ -95.39351499999999, 29.889161 ], "pop" : 14286, "state" : "TX" } +{ "_id" : "77038", "city" : "HOUSTON", "loc" : [ -95.43860100000001, 29.91956 ], "pop" : 15653, "state" : "TX" } +{ "_id" : "77039", "city" : "HOUSTON", "loc" : [ -95.33338000000001, 29.906731 ], "pop" : 23839, "state" : "TX" } +{ "_id" : "77040", "city" : "JERSEY VILLAGE", "loc" : [ -95.52996899999999, 29.879613 ], "pop" : 33052, "state" : "TX" } +{ "_id" : "77041", "city" : "HOUSTON", "loc" : [ -95.58166300000001, 29.860187 ], "pop" : 14790, "state" : "TX" } +{ "_id" : "77042", "city" : "HOUSTON", "loc" : [ -95.55889500000001, 29.740446 ], "pop" : 31505, "state" : "TX" } +{ "_id" : "77043", "city" : "HOUSTON", "loc" : [ -95.560734, 29.805181 ], "pop" : 21752, "state" : "TX" } +{ "_id" : "77044", "city" : "HOUSTON", "loc" : [ -95.19757, 29.863485 ], "pop" : 10669, "state" : "TX" } +{ "_id" : "77045", "city" : "HOUSTON", "loc" : [ -95.438166, 29.629717 ], "pop" : 22145, "state" : "TX" } +{ "_id" : "77046", "city" : "HOUSTON", "loc" : [ -95.431845, 29.73279 ], "pop" : 557, "state" : "TX" } +{ "_id" : "77047", "city" : "HOUSTON", "loc" : [ -95.374993, 29.625443 ], "pop" : 9588, "state" : "TX" } +{ "_id" : "77048", "city" : "HOUSTON", "loc" : [ -95.341606, 29.632097 ], "pop" : 13873, "state" : "TX" } +{ "_id" : "77049", "city" : "HOUSTON", "loc" : [ -95.184815, 29.823471 ], "pop" : 14445, "state" : "TX" } +{ "_id" : "77050", "city" : "HOUSTON", "loc" : [ -95.284837, 29.901456 ], "pop" : 3709, "state" : "TX" } +{ "_id" : "77051", "city" : "HOUSTON", "loc" : [ -95.368763, 29.65792 ], "pop" : 13776, "state" : "TX" } +{ "_id" : "77053", "city" : "HOUSTON", "loc" : [ -95.458709, 29.596156 ], "pop" : 20720, "state" : "TX" } +{ "_id" : "77054", "city" : "HOUSTON", "loc" : [ -95.40167700000001, 29.685209 ], "pop" : 12399, "state" : "TX" } +{ "_id" : "77055", "city" : "HOUSTON", "loc" : [ -95.49578700000001, 29.797064 ], "pop" : 36187, "state" : "TX" } +{ "_id" : "77056", "city" : "HOUSTON", "loc" : [ -95.468282, 29.744584 ], "pop" : 13544, "state" : "TX" } +{ "_id" : "77057", "city" : "HOUSTON", "loc" : [ -95.490253, 29.74217 ], "pop" : 28217, "state" : "TX" } +{ "_id" : "77058", "city" : "HOUSTON", "loc" : [ -95.057413, 29.574787 ], "pop" : 5556, "state" : "TX" } +{ "_id" : "77059", "city" : "HOUSTON", "loc" : [ -95.113354, 29.597493 ], "pop" : 6185, "state" : "TX" } +{ "_id" : "77060", "city" : "HOUSTON", "loc" : [ -95.398061, 29.933462 ], "pop" : 31443, "state" : "TX" } +{ "_id" : "77061", "city" : "HOUSTON", "loc" : [ -95.278987, 29.665221 ], "pop" : 20966, "state" : "TX" } +{ "_id" : "77062", "city" : "HOUSTON", "loc" : [ -95.130292, 29.572084 ], "pop" : 25303, "state" : "TX" } +{ "_id" : "77063", "city" : "HOUSTON", "loc" : [ -95.52203900000001, 29.734843 ], "pop" : 24156, "state" : "TX" } +{ "_id" : "77064", "city" : "HOUSTON", "loc" : [ -95.556894, 29.918981 ], "pop" : 21388, "state" : "TX" } +{ "_id" : "77065", "city" : "HOUSTON", "loc" : [ -95.61063, 29.931933 ], "pop" : 17370, "state" : "TX" } +{ "_id" : "77066", "city" : "HOUSTON", "loc" : [ -95.49471699999999, 29.961027 ], "pop" : 23310, "state" : "TX" } +{ "_id" : "77067", "city" : "HOUSTON", "loc" : [ -95.452158, 29.954717 ], "pop" : 18416, "state" : "TX" } +{ "_id" : "77068", "city" : "HOUSTON", "loc" : [ -95.489661, 30.006867 ], "pop" : 7670, "state" : "TX" } +{ "_id" : "77069", "city" : "HOUSTON", "loc" : [ -95.520827, 29.986292 ], "pop" : 11617, "state" : "TX" } +{ "_id" : "77070", "city" : "HOUSTON", "loc" : [ -95.58027, 29.978099 ], "pop" : 25735, "state" : "TX" } +{ "_id" : "77071", "city" : "HOUSTON", "loc" : [ -95.517554, 29.651838 ], "pop" : 21037, "state" : "TX" } +{ "_id" : "77072", "city" : "HOUSTON", "loc" : [ -95.58615500000001, 29.699026 ], "pop" : 41808, "state" : "TX" } +{ "_id" : "77073", "city" : "HOUSTON", "loc" : [ -95.408671, 30.019767 ], "pop" : 10208, "state" : "TX" } +{ "_id" : "77074", "city" : "HOUSTON", "loc" : [ -95.510588, 29.689601 ], "pop" : 32691, "state" : "TX" } +{ "_id" : "77075", "city" : "HOUSTON", "loc" : [ -95.25998300000001, 29.622276 ], "pop" : 16943, "state" : "TX" } +{ "_id" : "77076", "city" : "HOUSTON", "loc" : [ -95.383442, 29.85801 ], "pop" : 23881, "state" : "TX" } +{ "_id" : "77077", "city" : "HOUSTON", "loc" : [ -95.602991, 29.747656 ], "pop" : 32090, "state" : "TX" } +{ "_id" : "77078", "city" : "HOUSTON", "loc" : [ -95.258208, 29.849724 ], "pop" : 12300, "state" : "TX" } +{ "_id" : "77079", "city" : "HOUSTON", "loc" : [ -95.597993, 29.773759 ], "pop" : 29891, "state" : "TX" } +{ "_id" : "77080", "city" : "HOUSTON", "loc" : [ -95.522986, 29.815854 ], "pop" : 39465, "state" : "TX" } +{ "_id" : "77081", "city" : "HOUSTON", "loc" : [ -95.484531, 29.711926 ], "pop" : 33787, "state" : "TX" } +{ "_id" : "77082", "city" : "HOUSTON", "loc" : [ -95.628533, 29.722283 ], "pop" : 23875, "state" : "TX" } +{ "_id" : "77083", "city" : "HOUSTON", "loc" : [ -95.651098, 29.694709 ], "pop" : 38124, "state" : "TX" } +{ "_id" : "77084", "city" : "HOUSTON", "loc" : [ -95.662329, 29.844022 ], "pop" : 45204, "state" : "TX" } +{ "_id" : "77085", "city" : "HOUSTON", "loc" : [ -95.481945, 29.621787 ], "pop" : 6519, "state" : "TX" } +{ "_id" : "77086", "city" : "HOUSTON", "loc" : [ -95.49386800000001, 29.922667 ], "pop" : 16075, "state" : "TX" } +{ "_id" : "77087", "city" : "HOUSTON", "loc" : [ -95.301062, 29.687579 ], "pop" : 31112, "state" : "TX" } +{ "_id" : "77088", "city" : "HOUSTON", "loc" : [ -95.45387700000001, 29.881694 ], "pop" : 44595, "state" : "TX" } +{ "_id" : "77089", "city" : "HOUSTON", "loc" : [ -95.22178599999999, 29.593978 ], "pop" : 37678, "state" : "TX" } +{ "_id" : "77090", "city" : "HOUSTON", "loc" : [ -95.447002, 30.016673 ], "pop" : 22054, "state" : "TX" } +{ "_id" : "77091", "city" : "HOUSTON", "loc" : [ -95.443521, 29.853448 ], "pop" : 21341, "state" : "TX" } +{ "_id" : "77092", "city" : "HOUSTON", "loc" : [ -95.472031, 29.832391 ], "pop" : 31872, "state" : "TX" } +{ "_id" : "77093", "city" : "HOUSTON", "loc" : [ -95.34028600000001, 29.861661 ], "pop" : 39118, "state" : "TX" } +{ "_id" : "77094", "city" : "HOUSTON", "loc" : [ -95.710742, 29.770536 ], "pop" : 1168, "state" : "TX" } +{ "_id" : "77095", "city" : "HOUSTON", "loc" : [ -95.648082, 29.894115 ], "pop" : 24418, "state" : "TX" } +{ "_id" : "77096", "city" : "HOUSTON", "loc" : [ -95.48606599999999, 29.672205 ], "pop" : 32124, "state" : "TX" } +{ "_id" : "77098", "city" : "HOUSTON", "loc" : [ -95.411778, 29.734987 ], "pop" : 10436, "state" : "TX" } +{ "_id" : "77099", "city" : "HOUSTON", "loc" : [ -95.586613, 29.670869 ], "pop" : 40503, "state" : "TX" } +{ "_id" : "77301", "city" : "CONROE", "loc" : [ -95.45266700000001, 30.312535 ], "pop" : 20150, "state" : "TX" } +{ "_id" : "77302", "city" : "GRANGERLAND", "loc" : [ -95.416087, 30.250357 ], "pop" : 5767, "state" : "TX" } +{ "_id" : "77303", "city" : "CUT AND SHOOT", "loc" : [ -95.369725, 30.344456 ], "pop" : 14683, "state" : "TX" } +{ "_id" : "77304", "city" : "PANORAMA VILLAGE", "loc" : [ -95.495244, 30.327351 ], "pop" : 9625, "state" : "TX" } +{ "_id" : "77327", "city" : "CLEVELAND", "loc" : [ -95.020152, 30.329977 ], "pop" : 21298, "state" : "TX" } +{ "_id" : "77331", "city" : "COLDSPRING", "loc" : [ -95.10858, 30.602661 ], "pop" : 3182, "state" : "TX" } +{ "_id" : "77335", "city" : "GOODRICH", "loc" : [ -94.95922, 30.607909 ], "pop" : 1441, "state" : "TX" } +{ "_id" : "77336", "city" : "HUFFMAN", "loc" : [ -95.105069, 30.056491 ], "pop" : 6529, "state" : "TX" } +{ "_id" : "77338", "city" : "HUMBLE", "loc" : [ -95.282476, 30.004091 ], "pop" : 19090, "state" : "TX" } +{ "_id" : "77339", "city" : "HUMBLE", "loc" : [ -95.21071600000001, 30.056333 ], "pop" : 28083, "state" : "TX" } +{ "_id" : "77340", "city" : "HUNTSVILLE", "loc" : [ -95.53418600000001, 30.73435 ], "pop" : 48879, "state" : "TX" } +{ "_id" : "77345", "city" : "HUMBLE", "loc" : [ -95.170654, 30.056641 ], "pop" : 13004, "state" : "TX" } +{ "_id" : "77346", "city" : "HUMBLE", "loc" : [ -95.172815, 30.004195 ], "pop" : 15984, "state" : "TX" } +{ "_id" : "77351", "city" : "SEGNO", "loc" : [ -94.935278, 30.718018 ], "pop" : 24261, "state" : "TX" } +{ "_id" : "77355", "city" : "MAGNOLIA", "loc" : [ -95.68898900000001, 30.1678 ], "pop" : 15638, "state" : "TX" } +{ "_id" : "77356", "city" : "MONTGOMERY", "loc" : [ -95.65034199999999, 30.363932 ], "pop" : 12002, "state" : "TX" } +{ "_id" : "77357", "city" : "NEW CANEY", "loc" : [ -95.197968, 30.157933 ], "pop" : 13214, "state" : "TX" } +{ "_id" : "77358", "city" : "NEW WAVERLY", "loc" : [ -95.453194, 30.535357 ], "pop" : 1977, "state" : "TX" } +{ "_id" : "77359", "city" : "OAKHURST", "loc" : [ -95.309478, 30.71262 ], "pop" : 283, "state" : "TX" } +{ "_id" : "77362", "city" : "PINEHURST", "loc" : [ -95.681406, 30.158052 ], "pop" : 2498, "state" : "TX" } +{ "_id" : "77363", "city" : "PLANTERSVILLE", "loc" : [ -95.849812, 30.296931 ], "pop" : 1333, "state" : "TX" } +{ "_id" : "77364", "city" : "POINTBLANK", "loc" : [ -95.229494, 30.75926 ], "pop" : 2911, "state" : "TX" } +{ "_id" : "77365", "city" : "PORTER", "loc" : [ -95.268613, 30.123731 ], "pop" : 13541, "state" : "TX" } +{ "_id" : "77371", "city" : "SHEPHERD", "loc" : [ -95.092913, 30.483396 ], "pop" : 9604, "state" : "TX" } +{ "_id" : "77372", "city" : "SPLENDORA", "loc" : [ -95.199308, 30.232609 ], "pop" : 11287, "state" : "TX" } +{ "_id" : "77373", "city" : "SPRING", "loc" : [ -95.377329, 30.053241 ], "pop" : 33118, "state" : "TX" } +{ "_id" : "77375", "city" : "TOMBALL", "loc" : [ -95.62006, 30.073923 ], "pop" : 19801, "state" : "TX" } +{ "_id" : "77378", "city" : "WILLIS", "loc" : [ -95.49758300000001, 30.432025 ], "pop" : 9988, "state" : "TX" } +{ "_id" : "77379", "city" : "KLEIN", "loc" : [ -95.528481, 30.023377 ], "pop" : 35275, "state" : "TX" } +{ "_id" : "77380", "city" : "THE WOODLANDS", "loc" : [ -95.46894399999999, 30.13739 ], "pop" : 16541, "state" : "TX" } +{ "_id" : "77381", "city" : "THE WOODLANDS", "loc" : [ -95.500743, 30.168887 ], "pop" : 19466, "state" : "TX" } +{ "_id" : "77384", "city" : "CONROE", "loc" : [ -95.492392, 30.225725 ], "pop" : 1635, "state" : "TX" } +{ "_id" : "77385", "city" : "CONROE", "loc" : [ -95.42878899999999, 30.187695 ], "pop" : 7311, "state" : "TX" } +{ "_id" : "77386", "city" : "SPRING", "loc" : [ -95.42394299999999, 30.128805 ], "pop" : 8379, "state" : "TX" } +{ "_id" : "77388", "city" : "SPRING", "loc" : [ -95.46945599999999, 30.050546 ], "pop" : 21805, "state" : "TX" } +{ "_id" : "77389", "city" : "SPRING", "loc" : [ -95.506624, 30.104398 ], "pop" : 8540, "state" : "TX" } +{ "_id" : "77396", "city" : "HUMBLE", "loc" : [ -95.262186, 29.950697 ], "pop" : 16163, "state" : "TX" } +{ "_id" : "77401", "city" : "BELLAIRE", "loc" : [ -95.461106, 29.702313 ], "pop" : 13913, "state" : "TX" } +{ "_id" : "77414", "city" : "SARGENT", "loc" : [ -95.92816999999999, 28.96183 ], "pop" : 19305, "state" : "TX" } +{ "_id" : "77417", "city" : "BEASLEY", "loc" : [ -95.96814500000001, 29.479045 ], "pop" : 2151, "state" : "TX" } +{ "_id" : "77418", "city" : "BELLVILLE", "loc" : [ -96.253083, 29.96583 ], "pop" : 6771, "state" : "TX" } +{ "_id" : "77419", "city" : "BLESSING", "loc" : [ -96.217956, 28.864947 ], "pop" : 1285, "state" : "TX" } +{ "_id" : "77420", "city" : "BOLING", "loc" : [ -95.974045, 29.252874 ], "pop" : 3459, "state" : "TX" } +{ "_id" : "77422", "city" : "BRAZORIA", "loc" : [ -95.58668299999999, 29.023642 ], "pop" : 12583, "state" : "TX" } +{ "_id" : "77423", "city" : "BROOKSHIRE", "loc" : [ -95.975537, 29.807168 ], "pop" : 4990, "state" : "TX" } +{ "_id" : "77426", "city" : "CHAPPELL HILL", "loc" : [ -96.234739, 30.183271 ], "pop" : 2916, "state" : "TX" } +{ "_id" : "77429", "city" : "CYPRESS", "loc" : [ -95.635778, 29.976608 ], "pop" : 18527, "state" : "TX" } +{ "_id" : "77430", "city" : "DAMON", "loc" : [ -95.703577, 29.301381 ], "pop" : 1493, "state" : "TX" } +{ "_id" : "77432", "city" : "DANEVANG", "loc" : [ -96.19765, 29.066969 ], "pop" : 278, "state" : "TX" } +{ "_id" : "77433", "city" : "CYPRESS", "loc" : [ -95.702456, 29.883633 ], "pop" : 1983, "state" : "TX" } +{ "_id" : "77434", "city" : "EAGLE LAKE", "loc" : [ -96.33536700000001, 29.584236 ], "pop" : 4543, "state" : "TX" } +{ "_id" : "77435", "city" : "EAST BERNARD", "loc" : [ -96.121115, 29.470458 ], "pop" : 5773, "state" : "TX" } +{ "_id" : "77437", "city" : "EL CAMPO", "loc" : [ -96.274266, 29.200776 ], "pop" : 15829, "state" : "TX" } +{ "_id" : "77440", "city" : "ELMATON", "loc" : [ -96.13351, 28.83209 ], "pop" : 470, "state" : "TX" } +{ "_id" : "77441", "city" : "FULSHEAR", "loc" : [ -95.897682, 29.721698 ], "pop" : 193, "state" : "TX" } +{ "_id" : "77442", "city" : "GARWOOD", "loc" : [ -96.49192499999999, 29.476001 ], "pop" : 2231, "state" : "TX" } +{ "_id" : "77444", "city" : "GUY", "loc" : [ -95.77022700000001, 29.332676 ], "pop" : 343, "state" : "TX" } +{ "_id" : "77445", "city" : "HEMPSTEAD", "loc" : [ -96.071648, 30.091973 ], "pop" : 5883, "state" : "TX" } +{ "_id" : "77447", "city" : "HOCKLEY", "loc" : [ -95.810447, 30.072888 ], "pop" : 5040, "state" : "TX" } +{ "_id" : "77449", "city" : "PARK ROW", "loc" : [ -95.72926699999999, 29.819922 ], "pop" : 22664, "state" : "TX" } +{ "_id" : "77450", "city" : "PARK ROW", "loc" : [ -95.744506, 29.767632 ], "pop" : 28533, "state" : "TX" } +{ "_id" : "77455", "city" : "LOUISE", "loc" : [ -96.392374, 29.14908 ], "pop" : 2431, "state" : "TX" } +{ "_id" : "77456", "city" : "MARKHAM", "loc" : [ -96.09276800000001, 28.954701 ], "pop" : 2015, "state" : "TX" } +{ "_id" : "77457", "city" : "MATAGORDA", "loc" : [ -95.951891, 28.764926 ], "pop" : 1455, "state" : "TX" } +{ "_id" : "77458", "city" : "MIDFIELD", "loc" : [ -96.226527, 28.936166 ], "pop" : 286, "state" : "TX" } +{ "_id" : "77459", "city" : "MISSOURI CITY", "loc" : [ -95.542284, 29.570434 ], "pop" : 16067, "state" : "TX" } +{ "_id" : "77461", "city" : "NEEDVILLE", "loc" : [ -95.827288, 29.41165 ], "pop" : 7609, "state" : "TX" } +{ "_id" : "77465", "city" : "PALACIOS", "loc" : [ -96.215439, 28.71504 ], "pop" : 5607, "state" : "TX" } +{ "_id" : "77468", "city" : "PLEDGER", "loc" : [ -95.898591, 29.179208 ], "pop" : 345, "state" : "TX" } +{ "_id" : "77469", "city" : "CLODINE", "loc" : [ -95.752122, 29.593226 ], "pop" : 36014, "state" : "TX" } +{ "_id" : "77471", "city" : "ROSENBERG", "loc" : [ -95.798213, 29.549727 ], "pop" : 22182, "state" : "TX" } +{ "_id" : "77474", "city" : "SEALY", "loc" : [ -96.159189, 29.782632 ], "pop" : 8680, "state" : "TX" } +{ "_id" : "77477", "city" : "STAFFORD", "loc" : [ -95.567764, 29.622816 ], "pop" : 18952, "state" : "TX" } +{ "_id" : "77478", "city" : "SUGAR LAND", "loc" : [ -95.62185599999999, 29.634153 ], "pop" : 36536, "state" : "TX" } +{ "_id" : "77479", "city" : "SUGAR LAND", "loc" : [ -95.60659099999999, 29.578537 ], "pop" : 20219, "state" : "TX" } +{ "_id" : "77480", "city" : "SWEENY", "loc" : [ -95.700363, 29.041508 ], "pop" : 5077, "state" : "TX" } +{ "_id" : "77482", "city" : "VAN VLECK", "loc" : [ -95.938903, 29.013879 ], "pop" : 6011, "state" : "TX" } +{ "_id" : "77483", "city" : "WADSWORTH", "loc" : [ -95.971307, 28.614288 ], "pop" : 145, "state" : "TX" } +{ "_id" : "77484", "city" : "WALLER", "loc" : [ -95.961275, 30.086008 ], "pop" : 10513, "state" : "TX" } +{ "_id" : "77485", "city" : "WALLIS", "loc" : [ -96.045574, 29.63968 ], "pop" : 3380, "state" : "TX" } +{ "_id" : "77486", "city" : "WEST COLUMBIA", "loc" : [ -95.669388, 29.140823 ], "pop" : 9777, "state" : "TX" } +{ "_id" : "77488", "city" : "WHARTON", "loc" : [ -96.08582800000001, 29.320488 ], "pop" : 12326, "state" : "TX" } +{ "_id" : "77489", "city" : "MISSOURI CITY", "loc" : [ -95.511512, 29.596206 ], "pop" : 27760, "state" : "TX" } +{ "_id" : "77493", "city" : "PARK ROW", "loc" : [ -95.815988, 29.804876 ], "pop" : 10312, "state" : "TX" } +{ "_id" : "77494", "city" : "PARK ROW", "loc" : [ -95.81167499999999, 29.750893 ], "pop" : 2684, "state" : "TX" } +{ "_id" : "77502", "city" : "PASADENA", "loc" : [ -95.198193, 29.678945 ], "pop" : 31270, "state" : "TX" } +{ "_id" : "77503", "city" : "PASADENA", "loc" : [ -95.15721000000001, 29.687696 ], "pop" : 23019, "state" : "TX" } +{ "_id" : "77504", "city" : "PASADENA", "loc" : [ -95.188478, 29.650133 ], "pop" : 18518, "state" : "TX" } +{ "_id" : "77505", "city" : "PASADENA", "loc" : [ -95.146388, 29.651753 ], "pop" : 10978, "state" : "TX" } +{ "_id" : "77506", "city" : "PASADENA", "loc" : [ -95.19895, 29.70087 ], "pop" : 33656, "state" : "TX" } +{ "_id" : "77507", "city" : "PASADENA", "loc" : [ -95.079365, 29.6055 ], "pop" : 0, "state" : "TX" } +{ "_id" : "77510", "city" : "ALTA LOMA", "loc" : [ -95.089429, 29.371854 ], "pop" : 11098, "state" : "TX" } +{ "_id" : "77511", "city" : "ALVIN", "loc" : [ -95.251535, 29.41195 ], "pop" : 30979, "state" : "TX" } +{ "_id" : "77514", "city" : "MONROE CITY", "loc" : [ -94.55481899999999, 29.780987 ], "pop" : 7969, "state" : "TX" } +{ "_id" : "77515", "city" : "ANGLETON", "loc" : [ -95.44666100000001, 29.181049 ], "pop" : 29204, "state" : "TX" } +{ "_id" : "77517", "city" : "ARCADIA", "loc" : [ -95.129003, 29.380259 ], "pop" : 3377, "state" : "TX" } +{ "_id" : "77518", "city" : "BACLIFF", "loc" : [ -94.989293, 29.505506 ], "pop" : 5465, "state" : "TX" } +{ "_id" : "77519", "city" : "BATSON", "loc" : [ -94.60959, 30.22502 ], "pop" : 1071, "state" : "TX" } +{ "_id" : "77520", "city" : "BAYTOWN", "loc" : [ -94.965265, 29.746063 ], "pop" : 43386, "state" : "TX" } +{ "_id" : "77521", "city" : "BAYTOWN", "loc" : [ -94.969549, 29.770482 ], "pop" : 30277, "state" : "TX" } +{ "_id" : "77530", "city" : "CHANNELVIEW", "loc" : [ -95.13165499999999, 29.791438 ], "pop" : 23408, "state" : "TX" } +{ "_id" : "77531", "city" : "CLUTE", "loc" : [ -95.40259500000001, 29.032502 ], "pop" : 13361, "state" : "TX" } +{ "_id" : "77532", "city" : "BARRETT", "loc" : [ -95.07522, 29.937812 ], "pop" : 13679, "state" : "TX" } +{ "_id" : "77534", "city" : "DANBURY", "loc" : [ -95.34346499999999, 29.229082 ], "pop" : 2522, "state" : "TX" } +{ "_id" : "77535", "city" : "DAYTON", "loc" : [ -94.878747, 30.010208 ], "pop" : 16229, "state" : "TX" } +{ "_id" : "77536", "city" : "DEER PARK", "loc" : [ -95.122192, 29.682571 ], "pop" : 25806, "state" : "TX" } +{ "_id" : "77538", "city" : "DEVERS", "loc" : [ -94.57461499999999, 29.997835 ], "pop" : 570, "state" : "TX" } +{ "_id" : "77539", "city" : "SAN LEON", "loc" : [ -95.034496, 29.466033 ], "pop" : 21905, "state" : "TX" } +{ "_id" : "77541", "city" : "QUINTANA", "loc" : [ -95.37138899999999, 28.96968 ], "pop" : 17049, "state" : "TX" } +{ "_id" : "77545", "city" : "FRESNO", "loc" : [ -95.462608, 29.52931 ], "pop" : 3144, "state" : "TX" } +{ "_id" : "77546", "city" : "FRIENDSWOOD", "loc" : [ -95.187888, 29.522399 ], "pop" : 32217, "state" : "TX" } +{ "_id" : "77547", "city" : "GALENA PARK", "loc" : [ -95.24000100000001, 29.739204 ], "pop" : 9306, "state" : "TX" } +{ "_id" : "77550", "city" : "GALVESTON", "loc" : [ -94.79297, 29.298272 ], "pop" : 31879, "state" : "TX" } +{ "_id" : "77551", "city" : "GALVESTON", "loc" : [ -94.83033399999999, 29.276584 ], "pop" : 22680, "state" : "TX" } +{ "_id" : "77554", "city" : "GALVESTON", "loc" : [ -94.91371599999999, 29.229638 ], "pop" : 5495, "state" : "TX" } +{ "_id" : "77560", "city" : "HANKAMER", "loc" : [ -94.593846, 29.87524 ], "pop" : 233, "state" : "TX" } +{ "_id" : "77562", "city" : "HIGHLANDS", "loc" : [ -95.039286, 29.829599 ], "pop" : 17005, "state" : "TX" } +{ "_id" : "77563", "city" : "HITCHCOCK", "loc" : [ -94.992591, 29.339835 ], "pop" : 8591, "state" : "TX" } +{ "_id" : "77564", "city" : "HULL", "loc" : [ -94.660382, 30.13337 ], "pop" : 3386, "state" : "TX" } +{ "_id" : "77565", "city" : "CLEAR LAKE SHORE", "loc" : [ -95.039209, 29.543823 ], "pop" : 4101, "state" : "TX" } +{ "_id" : "77566", "city" : "LAKE JACKSON", "loc" : [ -95.440119, 29.039275 ], "pop" : 24000, "state" : "TX" } +{ "_id" : "77568", "city" : "LA MARQUE", "loc" : [ -94.974159, 29.3676 ], "pop" : 13884, "state" : "TX" } +{ "_id" : "77571", "city" : "SHOREACRES", "loc" : [ -95.05721, 29.660098 ], "pop" : 31556, "state" : "TX" } +{ "_id" : "77573", "city" : "LEAGUE CITY", "loc" : [ -95.09627399999999, 29.517281 ], "pop" : 41580, "state" : "TX" } +{ "_id" : "77575", "city" : "AMES", "loc" : [ -94.763819, 30.072794 ], "pop" : 14511, "state" : "TX" } +{ "_id" : "77577", "city" : "LIVERPOOL", "loc" : [ -95.240754, 29.311457 ], "pop" : 2023, "state" : "TX" } +{ "_id" : "77578", "city" : "MANVEL", "loc" : [ -95.35033, 29.469381 ], "pop" : 4754, "state" : "TX" } +{ "_id" : "77581", "city" : "PEARLAND", "loc" : [ -95.272069, 29.561656 ], "pop" : 20807, "state" : "TX" } +{ "_id" : "77583", "city" : "ROSHARON", "loc" : [ -95.453732, 29.420329 ], "pop" : 8495, "state" : "TX" } +{ "_id" : "77584", "city" : "PEARLAND", "loc" : [ -95.320778, 29.540479 ], "pop" : 14234, "state" : "TX" } +{ "_id" : "77585", "city" : "SARATOGA", "loc" : [ -94.571718, 30.339817 ], "pop" : 1921, "state" : "TX" } +{ "_id" : "77586", "city" : "EL LAGO", "loc" : [ -95.028739, 29.572895 ], "pop" : 9490, "state" : "TX" } +{ "_id" : "77587", "city" : "SOUTH HOUSTON", "loc" : [ -95.22582, 29.660097 ], "pop" : 16109, "state" : "TX" } +{ "_id" : "77590", "city" : "TEXAS CITY", "loc" : [ -94.920298, 29.396984 ], "pop" : 30108, "state" : "TX" } +{ "_id" : "77591", "city" : "TEXAS CITY", "loc" : [ -94.994204, 29.389097 ], "pop" : 10099, "state" : "TX" } +{ "_id" : "77597", "city" : "WALLISVILLE", "loc" : [ -94.67589599999999, 29.859096 ], "pop" : 1072, "state" : "TX" } +{ "_id" : "77598", "city" : "WEBSTER", "loc" : [ -95.143985, 29.55641 ], "pop" : 11453, "state" : "TX" } +{ "_id" : "77611", "city" : "BRIDGE CITY", "loc" : [ -93.84729299999999, 30.04054 ], "pop" : 13688, "state" : "TX" } +{ "_id" : "77612", "city" : "BUNA", "loc" : [ -93.991263, 30.413209 ], "pop" : 9023, "state" : "TX" } +{ "_id" : "77614", "city" : "DEWEYVILLE", "loc" : [ -93.77305, 30.289295 ], "pop" : 3133, "state" : "TX" } +{ "_id" : "77616", "city" : "FRED", "loc" : [ -94.185948, 30.598657 ], "pop" : 1973, "state" : "TX" } +{ "_id" : "77619", "city" : "GROVES", "loc" : [ -93.915187, 29.944779 ], "pop" : 16865, "state" : "TX" } +{ "_id" : "77622", "city" : "HAMSHIRE", "loc" : [ -94.31873899999999, 29.866769 ], "pop" : 571, "state" : "TX" } +{ "_id" : "77624", "city" : "HILLISTER", "loc" : [ -94.407588, 30.689911 ], "pop" : 1326, "state" : "TX" } +{ "_id" : "77625", "city" : "KOUNTZE", "loc" : [ -94.32590500000001, 30.370316 ], "pop" : 7073, "state" : "TX" } +{ "_id" : "77627", "city" : "NEDERLAND", "loc" : [ -94.001192, 29.971609 ], "pop" : 22035, "state" : "TX" } +{ "_id" : "77630", "city" : "WEST ORANGE", "loc" : [ -93.771883, 30.125167 ], "pop" : 39125, "state" : "TX" } +{ "_id" : "77640", "city" : "PORT ACRES", "loc" : [ -93.96256200000001, 29.882557 ], "pop" : 24605, "state" : "TX" } +{ "_id" : "77642", "city" : "PORT ARTHUR", "loc" : [ -93.926962, 29.92119 ], "pop" : 33943, "state" : "TX" } +{ "_id" : "77650", "city" : "CRYSTAL BEACH", "loc" : [ -94.611678, 29.459788 ], "pop" : 2807, "state" : "TX" } +{ "_id" : "77651", "city" : "PORT NECHES", "loc" : [ -93.96262400000001, 29.976983 ], "pop" : 13009, "state" : "TX" } +{ "_id" : "77656", "city" : "SILSBEE", "loc" : [ -94.190726, 30.324387 ], "pop" : 27117, "state" : "TX" } +{ "_id" : "77659", "city" : "SOUR LAKE", "loc" : [ -94.373341, 30.149134 ], "pop" : 4138, "state" : "TX" } +{ "_id" : "77660", "city" : "SPURGER", "loc" : [ -94.212745, 30.778057 ], "pop" : 2516, "state" : "TX" } +{ "_id" : "77662", "city" : "VIDOR", "loc" : [ -94.00077899999999, 30.15018 ], "pop" : 27702, "state" : "TX" } +{ "_id" : "77664", "city" : "WARREN", "loc" : [ -94.411974, 30.597776 ], "pop" : 2465, "state" : "TX" } +{ "_id" : "77665", "city" : "WINNIE", "loc" : [ -94.339499, 29.815676 ], "pop" : 2716, "state" : "TX" } +{ "_id" : "77701", "city" : "BEAUMONT", "loc" : [ -94.10389600000001, 30.068805 ], "pop" : 18121, "state" : "TX" } +{ "_id" : "77702", "city" : "BEAUMONT", "loc" : [ -94.125412, 30.087057 ], "pop" : 4396, "state" : "TX" } +{ "_id" : "77703", "city" : "BEAUMONT", "loc" : [ -94.119698, 30.113201 ], "pop" : 16003, "state" : "TX" } +{ "_id" : "77705", "city" : "BEAUMONT", "loc" : [ -94.115673, 30.021128 ], "pop" : 26134, "state" : "TX" } +{ "_id" : "77706", "city" : "BEAUMONT", "loc" : [ -94.164816, 30.094834 ], "pop" : 25388, "state" : "TX" } +{ "_id" : "77707", "city" : "BEAUMONT", "loc" : [ -94.175541, 30.068567 ], "pop" : 15366, "state" : "TX" } +{ "_id" : "77708", "city" : "BEAUMONT", "loc" : [ -94.160357, 30.139957 ], "pop" : 10782, "state" : "TX" } +{ "_id" : "77713", "city" : "BEAUMONT", "loc" : [ -94.26071899999999, 30.084996 ], "pop" : 10798, "state" : "TX" } +{ "_id" : "77801", "city" : "BRYAN", "loc" : [ -96.36615999999999, 30.632698 ], "pop" : 12190, "state" : "TX" } +{ "_id" : "77802", "city" : "BRYAN", "loc" : [ -96.335143, 30.658171 ], "pop" : 19306, "state" : "TX" } +{ "_id" : "77803", "city" : "BRYAN", "loc" : [ -96.371398, 30.691293 ], "pop" : 32052, "state" : "TX" } +{ "_id" : "77830", "city" : "ANDERSON", "loc" : [ -96.001822, 30.544291 ], "pop" : 1792, "state" : "TX" } +{ "_id" : "77831", "city" : "SINGLETON", "loc" : [ -95.93356900000001, 30.764059 ], "pop" : 1079, "state" : "TX" } +{ "_id" : "77833", "city" : "BRENHAM", "loc" : [ -96.40276900000001, 30.17736 ], "pop" : 20178, "state" : "TX" } +{ "_id" : "77835", "city" : "BURTON", "loc" : [ -96.59247499999999, 30.176744 ], "pop" : 2444, "state" : "TX" } +{ "_id" : "77836", "city" : "CALDWELL", "loc" : [ -96.714292, 30.529819 ], "pop" : 7873, "state" : "TX" } +{ "_id" : "77837", "city" : "CALVERT", "loc" : [ -96.67107, 30.978211 ], "pop" : 1829, "state" : "TX" } +{ "_id" : "77840", "city" : "COLLEGE STATION", "loc" : [ -96.31227, 30.604476 ], "pop" : 45766, "state" : "TX" } +{ "_id" : "77843", "city" : "COLLEGE STATION", "loc" : [ -96.340001, 30.614738 ], "pop" : 10425, "state" : "TX" } +{ "_id" : "77845", "city" : "COLLEGE STATION", "loc" : [ -96.31711300000001, 30.511811 ], "pop" : 1908, "state" : "TX" } +{ "_id" : "77850", "city" : "CONCORD", "loc" : [ -96.102643, 31.263144 ], "pop" : 143, "state" : "TX" } +{ "_id" : "77853", "city" : "DIME BOX", "loc" : [ -96.824781, 30.35786 ], "pop" : 699, "state" : "TX" } +{ "_id" : "77856", "city" : "FRANKLIN", "loc" : [ -96.442643, 31.035013 ], "pop" : 4144, "state" : "TX" } +{ "_id" : "77859", "city" : "HEARNE", "loc" : [ -96.584256, 30.86686 ], "pop" : 7655, "state" : "TX" } +{ "_id" : "77861", "city" : "IOLA", "loc" : [ -96.091075, 30.732637 ], "pop" : 1418, "state" : "TX" } +{ "_id" : "77864", "city" : "MADISONVILLE", "loc" : [ -95.909094, 30.953335 ], "pop" : 5532, "state" : "TX" } +{ "_id" : "77865", "city" : "MARQUEZ", "loc" : [ -96.237499, 31.230889 ], "pop" : 1047, "state" : "TX" } +{ "_id" : "77868", "city" : "NAVASOTA", "loc" : [ -96.05935700000001, 30.357645 ], "pop" : 12634, "state" : "TX" } +{ "_id" : "77871", "city" : "HILLTOP LAKES", "loc" : [ -96.147274, 31.087473 ], "pop" : 2540, "state" : "TX" } +{ "_id" : "77872", "city" : "NORTH ZULCH", "loc" : [ -96.09248599999999, 30.928531 ], "pop" : 1887, "state" : "TX" } +{ "_id" : "77873", "city" : "RICHARDS", "loc" : [ -95.861053, 30.538166 ], "pop" : 787, "state" : "TX" } +{ "_id" : "77879", "city" : "SOMERVILLE", "loc" : [ -96.535825, 30.407585 ], "pop" : 5752, "state" : "TX" } +{ "_id" : "77880", "city" : "WASHINGTON", "loc" : [ -96.224948, 30.31819 ], "pop" : 616, "state" : "TX" } +{ "_id" : "77901", "city" : "VICTORIA", "loc" : [ -96.999347, 28.808953 ], "pop" : 50119, "state" : "TX" } +{ "_id" : "77904", "city" : "VICTORIA", "loc" : [ -96.998993, 28.867482 ], "pop" : 18982, "state" : "TX" } +{ "_id" : "77951", "city" : "BLOOMINGTON", "loc" : [ -96.88407599999999, 28.68898 ], "pop" : 4452, "state" : "TX" } +{ "_id" : "77954", "city" : "CUERO", "loc" : [ -97.28124699999999, 29.090969 ], "pop" : 8321, "state" : "TX" } +{ "_id" : "77957", "city" : "EDNA", "loc" : [ -96.64876599999999, 28.952714 ], "pop" : 8987, "state" : "TX" } +{ "_id" : "77962", "city" : "GANADO", "loc" : [ -96.503078, 29.03084 ], "pop" : 2876, "state" : "TX" } +{ "_id" : "77963", "city" : "GOLIAD", "loc" : [ -97.378321, 28.699257 ], "pop" : 5980, "state" : "TX" } +{ "_id" : "77964", "city" : "HALLETTSVILLE", "loc" : [ -96.923423, 29.442609 ], "pop" : 6905, "state" : "TX" } +{ "_id" : "77968", "city" : "INEZ", "loc" : [ -96.80029399999999, 28.899416 ], "pop" : 808, "state" : "TX" } +{ "_id" : "77971", "city" : "LOLITA", "loc" : [ -96.47933, 28.772449 ], "pop" : 2632, "state" : "TX" } +{ "_id" : "77974", "city" : "MEYERSVILLE", "loc" : [ -97.30416099999999, 28.922921 ], "pop" : 45, "state" : "TX" } +{ "_id" : "77975", "city" : "MOULTON", "loc" : [ -97.103122, 29.569992 ], "pop" : 2459, "state" : "TX" } +{ "_id" : "77979", "city" : "PORT LAVACA", "loc" : [ -96.625941, 28.601135 ], "pop" : 15627, "state" : "TX" } +{ "_id" : "77982", "city" : "PORT O CONNOR", "loc" : [ -96.775131, 28.140032 ], "pop" : 5, "state" : "TX" } +{ "_id" : "77983", "city" : "SEADRIFT", "loc" : [ -96.702279, 28.410113 ], "pop" : 1965, "state" : "TX" } +{ "_id" : "77984", "city" : "SHINER", "loc" : [ -97.163955, 29.428038 ], "pop" : 3596, "state" : "TX" } +{ "_id" : "77990", "city" : "TIVOLI", "loc" : [ -96.88717200000001, 28.440122 ], "pop" : 965, "state" : "TX" } +{ "_id" : "77994", "city" : "WESTHOFF", "loc" : [ -97.351102, 29.054983 ], "pop" : 2069, "state" : "TX" } +{ "_id" : "77995", "city" : "YOAKUM", "loc" : [ -97.13063, 29.283954 ], "pop" : 9747, "state" : "TX" } +{ "_id" : "78002", "city" : "ATASCOSA", "loc" : [ -98.74212, 29.270501 ], "pop" : 2943, "state" : "TX" } +{ "_id" : "78003", "city" : "BANDERA", "loc" : [ -99.04527899999999, 29.72755 ], "pop" : 5538, "state" : "TX" } +{ "_id" : "78004", "city" : "BERGHEIM", "loc" : [ -98.59325800000001, 29.839873 ], "pop" : 763, "state" : "TX" } +{ "_id" : "78005", "city" : "BIGFOOT", "loc" : [ -98.85823000000001, 29.053073 ], "pop" : 328, "state" : "TX" } +{ "_id" : "78006", "city" : "SISTERDALE", "loc" : [ -98.71340600000001, 29.77774 ], "pop" : 14427, "state" : "TX" } +{ "_id" : "78007", "city" : "CALLIHAM", "loc" : [ -98.407873, 28.417682 ], "pop" : 230, "state" : "TX" } +{ "_id" : "78008", "city" : "CAMPBELLTON", "loc" : [ -98.256573, 28.76699 ], "pop" : 475, "state" : "TX" } +{ "_id" : "78009", "city" : "CASTROVILLE", "loc" : [ -98.882391, 29.35532 ], "pop" : 4262, "state" : "TX" } +{ "_id" : "78010", "city" : "CAMP VERDE", "loc" : [ -99.00714000000001, 29.939658 ], "pop" : 2704, "state" : "TX" } +{ "_id" : "78011", "city" : "CHARLOTTE", "loc" : [ -98.70700100000001, 28.864871 ], "pop" : 1990, "state" : "TX" } +{ "_id" : "78013", "city" : "COMFORT", "loc" : [ -98.843772, 29.979072 ], "pop" : 3253, "state" : "TX" } +{ "_id" : "78014", "city" : "COTULLA", "loc" : [ -99.23281799999999, 28.439837 ], "pop" : 4369, "state" : "TX" } +{ "_id" : "78016", "city" : "DEVINE", "loc" : [ -98.90899400000001, 29.152078 ], "pop" : 6887, "state" : "TX" } +{ "_id" : "78017", "city" : "DILLEY", "loc" : [ -99.174684, 28.678201 ], "pop" : 3396, "state" : "TX" } +{ "_id" : "78019", "city" : "ENCINAL", "loc" : [ -99.340902, 28.051329 ], "pop" : 821, "state" : "TX" } +{ "_id" : "78021", "city" : "FOWLERTON", "loc" : [ -98.851821, 28.488666 ], "pop" : 76, "state" : "TX" } +{ "_id" : "78022", "city" : "GEORGE WEST", "loc" : [ -98.116159, 28.320388 ], "pop" : 4093, "state" : "TX" } +{ "_id" : "78023", "city" : "GREY FOREST", "loc" : [ -98.703534, 29.592203 ], "pop" : 3552, "state" : "TX" } +{ "_id" : "78024", "city" : "HUNT", "loc" : [ -99.48232899999999, 30.002694 ], "pop" : 263, "state" : "TX" } +{ "_id" : "78025", "city" : "INGRAM", "loc" : [ -99.26902200000001, 30.073126 ], "pop" : 7005, "state" : "TX" } +{ "_id" : "78026", "city" : "JOURDANTON", "loc" : [ -98.544037, 28.902985 ], "pop" : 4615, "state" : "TX" } +{ "_id" : "78027", "city" : "KENDALIA", "loc" : [ -98.51655599999999, 29.940619 ], "pop" : 251, "state" : "TX" } +{ "_id" : "78028", "city" : "KERRVILLE", "loc" : [ -99.140817, 30.041647 ], "pop" : 26128, "state" : "TX" } +{ "_id" : "78039", "city" : "LA COSTE", "loc" : [ -98.812466, 29.308178 ], "pop" : 1320, "state" : "TX" } +{ "_id" : "78040", "city" : "LAREDO", "loc" : [ -99.49857900000001, 27.515538 ], "pop" : 43486, "state" : "TX" } +{ "_id" : "78041", "city" : "LAREDO", "loc" : [ -99.49065299999999, 27.556933 ], "pop" : 46156, "state" : "TX" } +{ "_id" : "78043", "city" : "RIO BRAVO", "loc" : [ -99.46548799999999, 27.481537 ], "pop" : 42505, "state" : "TX" } +{ "_id" : "78052", "city" : "LYTLE", "loc" : [ -98.794489, 29.236568 ], "pop" : 2078, "state" : "TX" } +{ "_id" : "78053", "city" : "MC COY", "loc" : [ -98.371565, 28.792661 ], "pop" : 34, "state" : "TX" } +{ "_id" : "78055", "city" : "MEDINA", "loc" : [ -99.306431, 29.790689 ], "pop" : 1590, "state" : "TX" } +{ "_id" : "78056", "city" : "MICO", "loc" : [ -98.88210599999999, 29.59105 ], "pop" : 230, "state" : "TX" } +{ "_id" : "78057", "city" : "MOORE", "loc" : [ -98.987403, 29.035377 ], "pop" : 767, "state" : "TX" } +{ "_id" : "78058", "city" : "MOUNTAIN HOME", "loc" : [ -99.318607, 30.213249 ], "pop" : 207, "state" : "TX" } +{ "_id" : "78059", "city" : "NATALIA", "loc" : [ -98.855158, 29.211669 ], "pop" : 4136, "state" : "TX" } +{ "_id" : "78060", "city" : "OAKVILLE", "loc" : [ -98.055392, 28.464402 ], "pop" : 261, "state" : "TX" } +{ "_id" : "78061", "city" : "PEARSALL", "loc" : [ -99.09436100000001, 28.892317 ], "pop" : 8981, "state" : "TX" } +{ "_id" : "78063", "city" : "LAKEHILLS", "loc" : [ -98.922118, 29.631513 ], "pop" : 3187, "state" : "TX" } +{ "_id" : "78064", "city" : "PLEASANTON", "loc" : [ -98.48306100000001, 28.992368 ], "pop" : 11977, "state" : "TX" } +{ "_id" : "78065", "city" : "POTEET", "loc" : [ -98.624071, 29.099405 ], "pop" : 9523, "state" : "TX" } +{ "_id" : "78066", "city" : "RIOMEDINA", "loc" : [ -98.866865, 29.490395 ], "pop" : 687, "state" : "TX" } +{ "_id" : "78067", "city" : "SAN YGNACIO", "loc" : [ -99.427148, 27.062523 ], "pop" : 871, "state" : "TX" } +{ "_id" : "78069", "city" : "SOMERSET", "loc" : [ -98.62140100000001, 29.211561 ], "pop" : 3477, "state" : "TX" } +{ "_id" : "78070", "city" : "SPRING BRANCH", "loc" : [ -98.37878600000001, 29.923815 ], "pop" : 1544, "state" : "TX" } +{ "_id" : "78071", "city" : "THREE RIVERS", "loc" : [ -98.178162, 28.475646 ], "pop" : 3190, "state" : "TX" } +{ "_id" : "78072", "city" : "TILDEN", "loc" : [ -98.569322, 28.419755 ], "pop" : 575, "state" : "TX" } +{ "_id" : "78073", "city" : "VON ORMY", "loc" : [ -98.66774100000001, 29.274979 ], "pop" : 2911, "state" : "TX" } +{ "_id" : "78075", "city" : "WHITSETT", "loc" : [ -98.256484, 28.637316 ], "pop" : 135, "state" : "TX" } +{ "_id" : "78076", "city" : "ZAPATA", "loc" : [ -99.250625, 26.88966 ], "pop" : 8408, "state" : "TX" } +{ "_id" : "78101", "city" : "ADKINS", "loc" : [ -98.26504, 29.380542 ], "pop" : 3611, "state" : "TX" } +{ "_id" : "78102", "city" : "BEEVILLE", "loc" : [ -97.761571, 28.422246 ], "pop" : 23211, "state" : "TX" } +{ "_id" : "78108", "city" : "CIBOLO", "loc" : [ -98.22798299999999, 29.574971 ], "pop" : 6062, "state" : "TX" } +{ "_id" : "78109", "city" : "CONVERSE", "loc" : [ -98.321673, 29.517331 ], "pop" : 13291, "state" : "TX" } +{ "_id" : "78111", "city" : "ECLETO", "loc" : [ -97.741185, 29.020128 ], "pop" : 0, "state" : "TX" } +{ "_id" : "78112", "city" : "ELMENDORF", "loc" : [ -98.371982, 29.230793 ], "pop" : 2251, "state" : "TX" } +{ "_id" : "78113", "city" : "FALLS CITY", "loc" : [ -98.015632, 28.981413 ], "pop" : 964, "state" : "TX" } +{ "_id" : "78114", "city" : "FLORESVILLE", "loc" : [ -98.193589, 29.169338 ], "pop" : 11510, "state" : "TX" } +{ "_id" : "78116", "city" : "GILLETT", "loc" : [ -97.83432500000001, 29.051353 ], "pop" : 641, "state" : "TX" } +{ "_id" : "78117", "city" : "HOBSON", "loc" : [ -97.970743, 28.944499 ], "pop" : 302, "state" : "TX" } +{ "_id" : "78118", "city" : "KARNES CITY", "loc" : [ -97.90707, 28.882757 ], "pop" : 3827, "state" : "TX" } +{ "_id" : "78119", "city" : "KENEDY", "loc" : [ -97.845601, 28.804584 ], "pop" : 5118, "state" : "TX" } +{ "_id" : "78121", "city" : "LA VERNIA", "loc" : [ -98.112971, 29.350905 ], "pop" : 4529, "state" : "TX" } +{ "_id" : "78122", "city" : "LEESVILLE", "loc" : [ -97.75662199999999, 29.396142 ], "pop" : 206, "state" : "TX" } +{ "_id" : "78123", "city" : "MC QUEENEY", "loc" : [ -98.03759100000001, 29.605655 ], "pop" : 2055, "state" : "TX" } +{ "_id" : "78124", "city" : "MARION", "loc" : [ -98.151709, 29.56835 ], "pop" : 4167, "state" : "TX" } +{ "_id" : "78130", "city" : "CANYON LAKE", "loc" : [ -98.113041, 29.694733 ], "pop" : 32975, "state" : "TX" } +{ "_id" : "78132", "city" : "CANYON LAKE", "loc" : [ -98.16721200000001, 29.72939 ], "pop" : 6412, "state" : "TX" } +{ "_id" : "78133", "city" : "CANYON LAKE", "loc" : [ -98.24941200000001, 29.870984 ], "pop" : 8428, "state" : "TX" } +{ "_id" : "78140", "city" : "NIXON", "loc" : [ -97.752898, 29.301649 ], "pop" : 2953, "state" : "TX" } +{ "_id" : "78141", "city" : "NORDHEIM", "loc" : [ -97.594579, 28.914225 ], "pop" : 655, "state" : "TX" } +{ "_id" : "78147", "city" : "POTH", "loc" : [ -98.08247, 29.06191 ], "pop" : 3000, "state" : "TX" } +{ "_id" : "78148", "city" : "RANDOLPH A F B", "loc" : [ -98.306742, 29.551608 ], "pop" : 13215, "state" : "TX" } +{ "_id" : "78150", "city" : "RANDOLPH A F B", "loc" : [ -98.27919300000001, 29.53021 ], "pop" : 4079, "state" : "TX" } +{ "_id" : "78151", "city" : "RUNGE", "loc" : [ -97.713824, 28.887556 ], "pop" : 1603, "state" : "TX" } +{ "_id" : "78152", "city" : "SAINT HEDWIG", "loc" : [ -98.195223, 29.435284 ], "pop" : 1685, "state" : "TX" } +{ "_id" : "78154", "city" : "SELMA", "loc" : [ -98.27221400000001, 29.568159 ], "pop" : 10332, "state" : "TX" } +{ "_id" : "78155", "city" : "SEGUIN", "loc" : [ -97.962801, 29.561316 ], "pop" : 32348, "state" : "TX" } +{ "_id" : "78159", "city" : "SMILEY", "loc" : [ -97.62271200000001, 29.265529 ], "pop" : 972, "state" : "TX" } +{ "_id" : "78160", "city" : "STOCKDALE", "loc" : [ -97.93508199999999, 29.231907 ], "pop" : 3085, "state" : "TX" } +{ "_id" : "78161", "city" : "SUTHERLAND SPRIN", "loc" : [ -98.07079400000001, 29.277831 ], "pop" : 1051, "state" : "TX" } +{ "_id" : "78163", "city" : "WETMORE", "loc" : [ -98.43784599999999, 29.780175 ], "pop" : 5491, "state" : "TX" } +{ "_id" : "78164", "city" : "YORKTOWN", "loc" : [ -97.512056, 28.989191 ], "pop" : 3733, "state" : "TX" } +{ "_id" : "78201", "city" : "BALCONES HEIGHTS", "loc" : [ -98.526352, 29.468525 ], "pop" : 43037, "state" : "TX" } +{ "_id" : "78202", "city" : "SAN ANTONIO", "loc" : [ -98.460112, 29.427462 ], "pop" : 12043, "state" : "TX" } +{ "_id" : "78203", "city" : "SAN ANTONIO", "loc" : [ -98.460127, 29.414799 ], "pop" : 7261, "state" : "TX" } +{ "_id" : "78204", "city" : "SAN ANTONIO", "loc" : [ -98.5063, 29.400217 ], "pop" : 11526, "state" : "TX" } +{ "_id" : "78205", "city" : "SAN ANTONIO", "loc" : [ -98.492509, 29.423711 ], "pop" : 1714, "state" : "TX" } +{ "_id" : "78207", "city" : "SAN ANTONIO", "loc" : [ -98.52596699999999, 29.422855 ], "pop" : 58355, "state" : "TX" } +{ "_id" : "78208", "city" : "SAN ANTONIO", "loc" : [ -98.458983, 29.440039 ], "pop" : 5007, "state" : "TX" } +{ "_id" : "78209", "city" : "ALAMO HEIGHTS", "loc" : [ -98.45577400000001, 29.488623 ], "pop" : 34701, "state" : "TX" } +{ "_id" : "78210", "city" : "SAN ANTONIO", "loc" : [ -98.465796, 29.397718 ], "pop" : 39300, "state" : "TX" } +{ "_id" : "78211", "city" : "SAN ANTONIO", "loc" : [ -98.545219, 29.358366 ], "pop" : 30417, "state" : "TX" } +{ "_id" : "78212", "city" : "OLMOS PARK", "loc" : [ -98.49581499999999, 29.461181 ], "pop" : 29762, "state" : "TX" } +{ "_id" : "78213", "city" : "CASTLE HILLS", "loc" : [ -98.522679, 29.513406 ], "pop" : 36060, "state" : "TX" } +{ "_id" : "78214", "city" : "SAN ANTONIO", "loc" : [ -98.492436, 29.364115 ], "pop" : 23338, "state" : "TX" } +{ "_id" : "78215", "city" : "SAN ANTONIO", "loc" : [ -98.479338, 29.441338 ], "pop" : 1264, "state" : "TX" } +{ "_id" : "78216", "city" : "SAN ANTONIO", "loc" : [ -98.497511, 29.533387 ], "pop" : 30435, "state" : "TX" } +{ "_id" : "78217", "city" : "SAN ANTONIO", "loc" : [ -98.419444, 29.539525 ], "pop" : 27925, "state" : "TX" } +{ "_id" : "78218", "city" : "SAN ANTONIO", "loc" : [ -98.403184, 29.496852 ], "pop" : 29276, "state" : "TX" } +{ "_id" : "78219", "city" : "KIRBY", "loc" : [ -98.39731500000001, 29.448794 ], "pop" : 14249, "state" : "TX" } +{ "_id" : "78220", "city" : "SAN ANTONIO", "loc" : [ -98.412791, 29.410641 ], "pop" : 17035, "state" : "TX" } +{ "_id" : "78221", "city" : "SAN ANTONIO", "loc" : [ -98.50541699999999, 29.330913 ], "pop" : 35392, "state" : "TX" } +{ "_id" : "78222", "city" : "SAN ANTONIO", "loc" : [ -98.396005, 29.383113 ], "pop" : 12729, "state" : "TX" } +{ "_id" : "78223", "city" : "SAN ANTONIO", "loc" : [ -98.43562799999999, 29.357869 ], "pop" : 38381, "state" : "TX" } +{ "_id" : "78224", "city" : "SAN ANTONIO", "loc" : [ -98.53933499999999, 29.337432 ], "pop" : 14894, "state" : "TX" } +{ "_id" : "78225", "city" : "SAN ANTONIO", "loc" : [ -98.524494, 29.387497 ], "pop" : 13803, "state" : "TX" } +{ "_id" : "78226", "city" : "SAN ANTONIO", "loc" : [ -98.551095, 29.393001 ], "pop" : 7141, "state" : "TX" } +{ "_id" : "78227", "city" : "SAN ANTONIO", "loc" : [ -98.643311, 29.402687 ], "pop" : 42329, "state" : "TX" } +{ "_id" : "78228", "city" : "SAN ANTONIO", "loc" : [ -98.56987100000001, 29.458937 ], "pop" : 58136, "state" : "TX" } +{ "_id" : "78229", "city" : "SAN ANTONIO", "loc" : [ -98.569726, 29.504228 ], "pop" : 22681, "state" : "TX" } +{ "_id" : "78230", "city" : "SAN ANTONIO", "loc" : [ -98.552117, 29.540738 ], "pop" : 30253, "state" : "TX" } +{ "_id" : "78231", "city" : "SHAVANO PARK", "loc" : [ -98.536817, 29.571434 ], "pop" : 7504, "state" : "TX" } +{ "_id" : "78232", "city" : "HOLLYWOOD PARK", "loc" : [ -98.46729999999999, 29.582833 ], "pop" : 27332, "state" : "TX" } +{ "_id" : "78233", "city" : "LIVE OAK", "loc" : [ -98.369128, 29.554741 ], "pop" : 36334, "state" : "TX" } +{ "_id" : "78234", "city" : "FORT SAM HOUSTON", "loc" : [ -98.43540400000001, 29.461961 ], "pop" : 8258, "state" : "TX" } +{ "_id" : "78235", "city" : "BROOKS A F B", "loc" : [ -98.43944399999999, 29.341733 ], "pop" : 885, "state" : "TX" } +{ "_id" : "78236", "city" : "WILFORD HALL U S", "loc" : [ -98.613367, 29.394267 ], "pop" : 8707, "state" : "TX" } +{ "_id" : "78237", "city" : "SAN ANTONIO", "loc" : [ -98.56454600000001, 29.420758 ], "pop" : 38900, "state" : "TX" } +{ "_id" : "78238", "city" : "LEON VALLEY", "loc" : [ -98.61545099999999, 29.476833 ], "pop" : 20840, "state" : "TX" } +{ "_id" : "78239", "city" : "WINDCREST", "loc" : [ -98.361604, 29.515686 ], "pop" : 21781, "state" : "TX" } +{ "_id" : "78240", "city" : "SAN ANTONIO", "loc" : [ -98.600566, 29.518896 ], "pop" : 33776, "state" : "TX" } +{ "_id" : "78241", "city" : "KELLY A F B", "loc" : [ -98.578063, 29.392432 ], "pop" : 1784, "state" : "TX" } +{ "_id" : "78242", "city" : "SAN ANTONIO", "loc" : [ -98.610927, 29.350905 ], "pop" : 24343, "state" : "TX" } +{ "_id" : "78244", "city" : "SAN ANTONIO", "loc" : [ -98.347585, 29.479264 ], "pop" : 13798, "state" : "TX" } +{ "_id" : "78245", "city" : "SAN ANTONIO", "loc" : [ -98.689494, 29.418927 ], "pop" : 20410, "state" : "TX" } +{ "_id" : "78247", "city" : "WETMORE", "loc" : [ -98.409783, 29.577604 ], "pop" : 25572, "state" : "TX" } +{ "_id" : "78248", "city" : "SAN ANTONIO", "loc" : [ -98.520105, 29.58936 ], "pop" : 4469, "state" : "TX" } +{ "_id" : "78249", "city" : "SAN ANTONIO", "loc" : [ -98.611666, 29.561245 ], "pop" : 19127, "state" : "TX" } +{ "_id" : "78250", "city" : "SAN ANTONIO", "loc" : [ -98.66876499999999, 29.505394 ], "pop" : 43845, "state" : "TX" } +{ "_id" : "78251", "city" : "SAN ANTONIO", "loc" : [ -98.655472, 29.459743 ], "pop" : 15297, "state" : "TX" } +{ "_id" : "78252", "city" : "SAN ANTONIO", "loc" : [ -98.646395, 29.346015 ], "pop" : 1378, "state" : "TX" } +{ "_id" : "78253", "city" : "SAN ANTONIO", "loc" : [ -98.74793099999999, 29.459923 ], "pop" : 3861, "state" : "TX" } +{ "_id" : "78254", "city" : "SAN ANTONIO", "loc" : [ -98.724841, 29.54091 ], "pop" : 1340, "state" : "TX" } +{ "_id" : "78255", "city" : "SAN ANTONIO", "loc" : [ -98.65557200000001, 29.636875 ], "pop" : 2544, "state" : "TX" } +{ "_id" : "78256", "city" : "SAN ANTONIO", "loc" : [ -98.625215, 29.616946 ], "pop" : 1237, "state" : "TX" } +{ "_id" : "78257", "city" : "SAN ANTONIO", "loc" : [ -98.61370100000001, 29.64953 ], "pop" : 1360, "state" : "TX" } +{ "_id" : "78258", "city" : "SAN ANTONIO", "loc" : [ -98.49669900000001, 29.65624 ], "pop" : 2877, "state" : "TX" } +{ "_id" : "78259", "city" : "SAN ANTONIO", "loc" : [ -98.444495, 29.628331 ], "pop" : 3865, "state" : "TX" } +{ "_id" : "78260", "city" : "SAN ANTONIO", "loc" : [ -98.475908, 29.702578 ], "pop" : 1684, "state" : "TX" } +{ "_id" : "78261", "city" : "SAN ANTONIO", "loc" : [ -98.41909200000001, 29.705463 ], "pop" : 487, "state" : "TX" } +{ "_id" : "78263", "city" : "SAN ANTONIO", "loc" : [ -98.317386, 29.36143 ], "pop" : 2836, "state" : "TX" } +{ "_id" : "78264", "city" : "SAN ANTONIO", "loc" : [ -98.472272, 29.173345 ], "pop" : 3723, "state" : "TX" } +{ "_id" : "78266", "city" : "GARDEN RIDGE", "loc" : [ -98.312774, 29.644226 ], "pop" : 2016, "state" : "TX" } +{ "_id" : "78332", "city" : "ALICE", "loc" : [ -98.08362200000001, 27.743171 ], "pop" : 28292, "state" : "TX" } +{ "_id" : "78336", "city" : "ARANSAS PASS", "loc" : [ -97.159091, 27.909498 ], "pop" : 9087, "state" : "TX" } +{ "_id" : "78338", "city" : "ARMSTRONG", "loc" : [ -97.70929099999999, 26.738706 ], "pop" : 148, "state" : "TX" } +{ "_id" : "78340", "city" : "BAYSIDE", "loc" : [ -97.210643, 28.096758 ], "pop" : 454, "state" : "TX" } +{ "_id" : "78343", "city" : "BISHOP", "loc" : [ -97.78303099999999, 27.588564 ], "pop" : 4608, "state" : "TX" } +{ "_id" : "78344", "city" : "BRUNI", "loc" : [ -98.85010800000001, 27.435329 ], "pop" : 508, "state" : "TX" } +{ "_id" : "78349", "city" : "CONCEPCION", "loc" : [ -98.381489, 27.544266 ], "pop" : 3458, "state" : "TX" } +{ "_id" : "78353", "city" : "ENCINO", "loc" : [ -98.192168, 26.924862 ], "pop" : 703, "state" : "TX" } +{ "_id" : "78355", "city" : "FALFURRIAS", "loc" : [ -98.140844, 27.22416 ], "pop" : 7501, "state" : "TX" } +{ "_id" : "78357", "city" : "FREER", "loc" : [ -98.606129, 27.879984 ], "pop" : 3922, "state" : "TX" } +{ "_id" : "78358", "city" : "FULTON", "loc" : [ -96.80837699999999, 28.223448 ], "pop" : 0, "state" : "TX" } +{ "_id" : "78360", "city" : "GUERRA", "loc" : [ -98.918886, 26.912753 ], "pop" : 34, "state" : "TX" } +{ "_id" : "78361", "city" : "HEBBRONVILLE", "loc" : [ -98.68288800000001, 27.2997 ], "pop" : 5078, "state" : "TX" } +{ "_id" : "78362", "city" : "INGLESIDE", "loc" : [ -97.206906, 27.868238 ], "pop" : 5871, "state" : "TX" } +{ "_id" : "78363", "city" : "KINGSVILLE NAVAL", "loc" : [ -97.85959800000001, 27.507418 ], "pop" : 28435, "state" : "TX" } +{ "_id" : "78368", "city" : "MATHIS", "loc" : [ -97.809659, 28.080208 ], "pop" : 11068, "state" : "TX" } +{ "_id" : "78369", "city" : "MIRANDO CITY", "loc" : [ -99.00111699999999, 27.445038 ], "pop" : 584, "state" : "TX" } +{ "_id" : "78370", "city" : "ODEM", "loc" : [ -97.583752, 27.940306 ], "pop" : 3299, "state" : "TX" } +{ "_id" : "78372", "city" : "ORANGE GROVE", "loc" : [ -97.983835, 27.948659 ], "pop" : 4339, "state" : "TX" } +{ "_id" : "78374", "city" : "PORTLAND", "loc" : [ -97.316931, 27.893547 ], "pop" : 15830, "state" : "TX" } +{ "_id" : "78375", "city" : "PREMONT", "loc" : [ -98.13301800000001, 27.354444 ], "pop" : 4051, "state" : "TX" } +{ "_id" : "78376", "city" : "REALITOS", "loc" : [ -98.535493, 27.416283 ], "pop" : 520, "state" : "TX" } +{ "_id" : "78377", "city" : "REFUGIO", "loc" : [ -97.27666499999999, 28.316944 ], "pop" : 4004, "state" : "TX" } +{ "_id" : "78379", "city" : "RIVIERA", "loc" : [ -97.778707, 27.321735 ], "pop" : 1839, "state" : "TX" } +{ "_id" : "78380", "city" : "ROBSTOWN", "loc" : [ -97.699523, 27.798395 ], "pop" : 24903, "state" : "TX" } +{ "_id" : "78382", "city" : "ROCKPORT", "loc" : [ -97.06877299999999, 28.030778 ], "pop" : 16944, "state" : "TX" } +{ "_id" : "78383", "city" : "SANDIA", "loc" : [ -97.89784899999999, 28.070879 ], "pop" : 2053, "state" : "TX" } +{ "_id" : "78384", "city" : "SAN DIEGO", "loc" : [ -98.250297, 27.76535 ], "pop" : 5018, "state" : "TX" } +{ "_id" : "78385", "city" : "SARITA", "loc" : [ -97.85762699999999, 27.149622 ], "pop" : 312, "state" : "TX" } +{ "_id" : "78387", "city" : "SINTON", "loc" : [ -97.519582, 28.033895 ], "pop" : 9051, "state" : "TX" } +{ "_id" : "78389", "city" : "SKIDMORE", "loc" : [ -97.666071, 28.230577 ], "pop" : 1785, "state" : "TX" } +{ "_id" : "78390", "city" : "TAFT", "loc" : [ -97.39662300000001, 27.976517 ], "pop" : 6140, "state" : "TX" } +{ "_id" : "78391", "city" : "TYNAN", "loc" : [ -97.754881, 28.169341 ], "pop" : 327, "state" : "TX" } +{ "_id" : "78393", "city" : "WOODSBORO", "loc" : [ -97.31921, 28.223222 ], "pop" : 2559, "state" : "TX" } +{ "_id" : "78401", "city" : "CORPUS CHRISTI", "loc" : [ -97.40299400000001, 27.794086 ], "pop" : 5811, "state" : "TX" } +{ "_id" : "78402", "city" : "CORPUS CHRISTI", "loc" : [ -97.385659, 27.82621 ], "pop" : 451, "state" : "TX" } +{ "_id" : "78404", "city" : "CORPUS CHRISTI", "loc" : [ -97.40125500000001, 27.768329 ], "pop" : 17395, "state" : "TX" } +{ "_id" : "78405", "city" : "CORPUS CHRISTI", "loc" : [ -97.427132, 27.776234 ], "pop" : 17437, "state" : "TX" } +{ "_id" : "78406", "city" : "CORPUS CHRISTI", "loc" : [ -97.51445, 27.768412 ], "pop" : 1556, "state" : "TX" } +{ "_id" : "78407", "city" : "CORPUS CHRISTI", "loc" : [ -97.435597, 27.804195 ], "pop" : 6334, "state" : "TX" } +{ "_id" : "78408", "city" : "CORPUS CHRISTI", "loc" : [ -97.43814999999999, 27.794477 ], "pop" : 10071, "state" : "TX" } +{ "_id" : "78409", "city" : "CORPUS CHRISTI", "loc" : [ -97.527034, 27.814555 ], "pop" : 2655, "state" : "TX" } +{ "_id" : "78410", "city" : "CORPUS CHRISTI", "loc" : [ -97.596002, 27.84585 ], "pop" : 20860, "state" : "TX" } +{ "_id" : "78411", "city" : "CORPUS CHRISTI", "loc" : [ -97.387732, 27.731139 ], "pop" : 27625, "state" : "TX" } +{ "_id" : "78412", "city" : "CORPUS CHRISTI", "loc" : [ -97.353694, 27.70608 ], "pop" : 33510, "state" : "TX" } +{ "_id" : "78413", "city" : "CORPUS CHRISTI", "loc" : [ -97.39832, 27.691041 ], "pop" : 27278, "state" : "TX" } +{ "_id" : "78414", "city" : "CORPUS CHRISTI", "loc" : [ -97.365016, 27.677016 ], "pop" : 8600, "state" : "TX" } +{ "_id" : "78415", "city" : "CORPUS CHRISTI", "loc" : [ -97.40778, 27.726204 ], "pop" : 39998, "state" : "TX" } +{ "_id" : "78416", "city" : "CORPUS CHRISTI", "loc" : [ -97.43468, 27.753593 ], "pop" : 16634, "state" : "TX" } +{ "_id" : "78417", "city" : "CORPUS CHRISTI", "loc" : [ -97.44942899999999, 27.728964 ], "pop" : 3075, "state" : "TX" } +{ "_id" : "78418", "city" : "CORPUS CHRISTI", "loc" : [ -97.266558, 27.668531 ], "pop" : 20449, "state" : "TX" } +{ "_id" : "78419", "city" : "CORPUS CHRISTI", "loc" : [ -97.27636, 27.692502 ], "pop" : 1873, "state" : "TX" } +{ "_id" : "78473", "city" : "CORPUS CHRISTI", "loc" : [ -97.396624, 27.79515 ], "pop" : 0, "state" : "TX" } +{ "_id" : "78501", "city" : "MCALLEN", "loc" : [ -98.235871, 26.21544 ], "pop" : 53932, "state" : "TX" } +{ "_id" : "78503", "city" : "MCALLEN", "loc" : [ -98.251974, 26.177115 ], "pop" : 14820, "state" : "TX" } +{ "_id" : "78504", "city" : "MCALLEN", "loc" : [ -98.230253, 26.255645 ], "pop" : 15182, "state" : "TX" } +{ "_id" : "78516", "city" : "ALAMO", "loc" : [ -98.116445, 26.190578 ], "pop" : 16555, "state" : "TX" } +{ "_id" : "78520", "city" : "BROWNSVILLE", "loc" : [ -97.517413, 25.933743 ], "pop" : 50091, "state" : "TX" } +{ "_id" : "78521", "city" : "BROWNSVILLE", "loc" : [ -97.461236, 25.922103 ], "pop" : 79463, "state" : "TX" } +{ "_id" : "78536", "city" : "DELMITA", "loc" : [ -98.396553, 26.656571 ], "pop" : 55, "state" : "TX" } +{ "_id" : "78537", "city" : "DONNA", "loc" : [ -98.052925, 26.167138 ], "pop" : 20909, "state" : "TX" } +{ "_id" : "78538", "city" : "MONTE ALTO", "loc" : [ -97.97547299999999, 26.304208 ], "pop" : 16225, "state" : "TX" } +{ "_id" : "78539", "city" : "EDINBURG", "loc" : [ -98.15692199999999, 26.304221 ], "pop" : 52534, "state" : "TX" } +{ "_id" : "78547", "city" : "GARCIASVILLE", "loc" : [ -98.669112, 26.312894 ], "pop" : 5741, "state" : "TX" } +{ "_id" : "78548", "city" : "GRULLA", "loc" : [ -98.596041, 26.293714 ], "pop" : 303, "state" : "TX" } +{ "_id" : "78549", "city" : "HARGILL", "loc" : [ -97.99933, 26.433812 ], "pop" : 1294, "state" : "TX" } +{ "_id" : "78550", "city" : "HARLINGEN", "loc" : [ -97.688981, 26.195142 ], "pop" : 43292, "state" : "TX" } +{ "_id" : "78552", "city" : "HARLINGEN", "loc" : [ -97.746771, 26.183069 ], "pop" : 21672, "state" : "TX" } +{ "_id" : "78557", "city" : "HIDALGO", "loc" : [ -98.253641, 26.102832 ], "pop" : 3300, "state" : "TX" } +{ "_id" : "78559", "city" : "LA FERIA", "loc" : [ -97.826115, 26.166556 ], "pop" : 8446, "state" : "TX" } +{ "_id" : "78563", "city" : "LINN", "loc" : [ -98.17986999999999, 26.542054 ], "pop" : 1244, "state" : "TX" } +{ "_id" : "78566", "city" : "BAYVIEW", "loc" : [ -97.490402, 26.091068 ], "pop" : 9033, "state" : "TX" } +{ "_id" : "78569", "city" : "LYFORD", "loc" : [ -97.78165300000001, 26.408926 ], "pop" : 2757, "state" : "TX" } +{ "_id" : "78570", "city" : "MERCEDES", "loc" : [ -97.918503, 26.15133 ], "pop" : 21450, "state" : "TX" } +{ "_id" : "78572", "city" : "ALTON", "loc" : [ -98.342647, 26.24153 ], "pop" : 67604, "state" : "TX" } +{ "_id" : "78577", "city" : "PHARR", "loc" : [ -98.187022, 26.177053 ], "pop" : 36070, "state" : "TX" } +{ "_id" : "78578", "city" : "PORT ISABEL", "loc" : [ -97.254389, 26.08764 ], "pop" : 9335, "state" : "TX" } +{ "_id" : "78580", "city" : "RAYMONDVILLE", "loc" : [ -97.79666, 26.479243 ], "pop" : 11642, "state" : "TX" } +{ "_id" : "78582", "city" : "RIO GRANDE CITY", "loc" : [ -98.810444, 26.394194 ], "pop" : 19113, "state" : "TX" } +{ "_id" : "78583", "city" : "RIO HONDO", "loc" : [ -97.551311, 26.233855 ], "pop" : 4990, "state" : "TX" } +{ "_id" : "78584", "city" : "ROMA", "loc" : [ -99.00247899999999, 26.421545 ], "pop" : 14612, "state" : "TX" } +{ "_id" : "78586", "city" : "SAN BENITO", "loc" : [ -97.64474800000001, 26.133659 ], "pop" : 28609, "state" : "TX" } +{ "_id" : "78588", "city" : "SAN ISIDRO", "loc" : [ -98.416147, 26.721404 ], "pop" : 468, "state" : "TX" } +{ "_id" : "78589", "city" : "SAN JUAN", "loc" : [ -98.153729, 26.204375 ], "pop" : 18419, "state" : "TX" } +{ "_id" : "78590", "city" : "SAN PERLITA", "loc" : [ -97.61569900000001, 26.483156 ], "pop" : 886, "state" : "TX" } +{ "_id" : "78591", "city" : "SANTA ELENA", "loc" : [ -98.519412, 26.73364 ], "pop" : 223, "state" : "TX" } +{ "_id" : "78593", "city" : "SANTA ROSA", "loc" : [ -97.82566300000001, 26.255508 ], "pop" : 3393, "state" : "TX" } +{ "_id" : "78594", "city" : "SEBASTIAN", "loc" : [ -97.774728, 26.34524 ], "pop" : 2137, "state" : "TX" } +{ "_id" : "78595", "city" : "SULLIVAN CITY", "loc" : [ -98.562713, 26.27197 ], "pop" : 3351, "state" : "TX" } +{ "_id" : "78596", "city" : "WESLACO", "loc" : [ -97.988714, 26.169444 ], "pop" : 40652, "state" : "TX" } +{ "_id" : "78597", "city" : "SOUTH PADRE ISLA", "loc" : [ -97.167294, 26.111105 ], "pop" : 1796, "state" : "TX" } +{ "_id" : "78598", "city" : "PORT MANSFIELD", "loc" : [ -97.427982, 26.555237 ], "pop" : 287, "state" : "TX" } +{ "_id" : "78602", "city" : "BASTROP", "loc" : [ -97.292101, 30.13883 ], "pop" : 10588, "state" : "TX" } +{ "_id" : "78603", "city" : "BEBE", "loc" : [ -97.626594, 29.422211 ], "pop" : 82, "state" : "TX" } +{ "_id" : "78605", "city" : "BERTRAM", "loc" : [ -98.052932, 30.741082 ], "pop" : 1622, "state" : "TX" } +{ "_id" : "78606", "city" : "BLANCO", "loc" : [ -98.410663, 30.087359 ], "pop" : 3152, "state" : "TX" } +{ "_id" : "78607", "city" : "BLUFFTON", "loc" : [ -98.51503, 30.825633 ], "pop" : 31, "state" : "TX" } +{ "_id" : "78608", "city" : "BRIGGS", "loc" : [ -97.97022800000001, 30.932546 ], "pop" : 715, "state" : "TX" } +{ "_id" : "78609", "city" : "BUCHANAN DAM", "loc" : [ -98.453226, 30.759765 ], "pop" : 1457, "state" : "TX" } +{ "_id" : "78610", "city" : "BUDA", "loc" : [ -97.85342199999999, 30.091758 ], "pop" : 7487, "state" : "TX" } +{ "_id" : "78611", "city" : "BURNET", "loc" : [ -98.26424, 30.776597 ], "pop" : 8460, "state" : "TX" } +{ "_id" : "78612", "city" : "CEDAR CREEK", "loc" : [ -97.497602, 30.096636 ], "pop" : 8026, "state" : "TX" } +{ "_id" : "78613", "city" : "CEDAR PARK", "loc" : [ -97.817571, 30.477165 ], "pop" : 22192, "state" : "TX" } +{ "_id" : "78614", "city" : "COST", "loc" : [ -97.553124, 29.432098 ], "pop" : 286, "state" : "TX" } +{ "_id" : "78615", "city" : "COUPLAND", "loc" : [ -97.330364, 30.532357 ], "pop" : 2311, "state" : "TX" } +{ "_id" : "78616", "city" : "DALE", "loc" : [ -97.580968, 29.952785 ], "pop" : 2666, "state" : "TX" } +{ "_id" : "78617", "city" : "DEL VALLE", "loc" : [ -97.613443, 30.174492 ], "pop" : 5635, "state" : "TX" } +{ "_id" : "78618", "city" : "DOSS", "loc" : [ -99.17072, 30.461319 ], "pop" : 54, "state" : "TX" } +{ "_id" : "78619", "city" : "DRIFTWOOD", "loc" : [ -98.05237200000001, 30.159351 ], "pop" : 1064, "state" : "TX" } +{ "_id" : "78620", "city" : "DRIPPING SPRINGS", "loc" : [ -98.102947, 30.226768 ], "pop" : 3453, "state" : "TX" } +{ "_id" : "78621", "city" : "ELGIN", "loc" : [ -97.37374800000001, 30.323136 ], "pop" : 9852, "state" : "TX" } +{ "_id" : "78623", "city" : "FISCHER", "loc" : [ -98.25828300000001, 29.969588 ], "pop" : 459, "state" : "TX" } +{ "_id" : "78624", "city" : "FREDERICKSBURG", "loc" : [ -98.87992800000001, 30.281658 ], "pop" : 15125, "state" : "TX" } +{ "_id" : "78626", "city" : "GEORGETOWN", "loc" : [ -97.670704, 30.633038 ], "pop" : 8153, "state" : "TX" } +{ "_id" : "78628", "city" : "ANDICE", "loc" : [ -97.70093900000001, 30.659364 ], "pop" : 14100, "state" : "TX" } +{ "_id" : "78629", "city" : "GONZALES", "loc" : [ -97.449456, 29.50857 ], "pop" : 11297, "state" : "TX" } +{ "_id" : "78631", "city" : "HARPER", "loc" : [ -99.24104800000001, 30.281637 ], "pop" : 1144, "state" : "TX" } +{ "_id" : "78632", "city" : "HARWOOD", "loc" : [ -97.490622, 29.666108 ], "pop" : 295, "state" : "TX" } +{ "_id" : "78634", "city" : "HUTTO", "loc" : [ -97.56720300000001, 30.525725 ], "pop" : 2314, "state" : "TX" } +{ "_id" : "78635", "city" : "HYE", "loc" : [ -98.539607, 30.226866 ], "pop" : 341, "state" : "TX" } +{ "_id" : "78636", "city" : "JOHNSON CITY", "loc" : [ -98.36908200000001, 30.294806 ], "pop" : 2219, "state" : "TX" } +{ "_id" : "78638", "city" : "KINGSBURY", "loc" : [ -97.830634, 29.672566 ], "pop" : 1073, "state" : "TX" } +{ "_id" : "78639", "city" : "KINGSLAND", "loc" : [ -98.447492, 30.666212 ], "pop" : 2797, "state" : "TX" } +{ "_id" : "78640", "city" : "UHLAND", "loc" : [ -97.83710600000001, 30.0043 ], "pop" : 8770, "state" : "TX" } +{ "_id" : "78641", "city" : "LEANDER", "loc" : [ -97.87516599999999, 30.552888 ], "pop" : 10882, "state" : "TX" } +{ "_id" : "78642", "city" : "LIBERTY HILL", "loc" : [ -97.93159799999999, 30.662953 ], "pop" : 2028, "state" : "TX" } +{ "_id" : "78643", "city" : "SUNRISE BEACH", "loc" : [ -98.652727, 30.722533 ], "pop" : 4802, "state" : "TX" } +{ "_id" : "78644", "city" : "LOCKHART", "loc" : [ -97.676922, 29.886759 ], "pop" : 11690, "state" : "TX" } +{ "_id" : "78645", "city" : "JONESTOWN", "loc" : [ -97.97023, 30.459796 ], "pop" : 4060, "state" : "TX" } +{ "_id" : "78648", "city" : "LULING", "loc" : [ -97.649947, 29.682621 ], "pop" : 6587, "state" : "TX" } +{ "_id" : "78650", "city" : "MC DADE", "loc" : [ -97.238556, 30.296816 ], "pop" : 721, "state" : "TX" } +{ "_id" : "78652", "city" : "MANCHACA", "loc" : [ -97.853793, 30.127267 ], "pop" : 4049, "state" : "TX" } +{ "_id" : "78653", "city" : "MANOR", "loc" : [ -97.532295, 30.338817 ], "pop" : 5359, "state" : "TX" } +{ "_id" : "78654", "city" : "CYPRESS MILL", "loc" : [ -98.30699199999999, 30.57228 ], "pop" : 13422, "state" : "TX" } +{ "_id" : "78655", "city" : "MARTINDALE", "loc" : [ -97.79331999999999, 29.793328 ], "pop" : 2081, "state" : "TX" } +{ "_id" : "78656", "city" : "MAXWELL", "loc" : [ -97.852852, 29.878628 ], "pop" : 3974, "state" : "TX" } +{ "_id" : "78659", "city" : "PAIGE", "loc" : [ -97.119771, 30.185799 ], "pop" : 1294, "state" : "TX" } +{ "_id" : "78660", "city" : "PFLUGERVILLE", "loc" : [ -97.629895, 30.442133 ], "pop" : 12297, "state" : "TX" } +{ "_id" : "78662", "city" : "RED ROCK", "loc" : [ -97.408058, 29.990616 ], "pop" : 1963, "state" : "TX" } +{ "_id" : "78663", "city" : "ROUND MOUNTAIN", "loc" : [ -98.436514, 30.442879 ], "pop" : 169, "state" : "TX" } +{ "_id" : "78664", "city" : "ROUND ROCK", "loc" : [ -97.66802800000001, 30.51452 ], "pop" : 20142, "state" : "TX" } +{ "_id" : "78665", "city" : "SANDY", "loc" : [ -98.509846, 30.339127 ], "pop" : 91, "state" : "TX" } +{ "_id" : "78666", "city" : "SAN MARCOS", "loc" : [ -97.94041799999999, 29.875359 ], "pop" : 39087, "state" : "TX" } +{ "_id" : "78669", "city" : "SPICEWOOD", "loc" : [ -98.05392000000001, 30.389945 ], "pop" : 2235, "state" : "TX" } +{ "_id" : "78671", "city" : "ALBERT", "loc" : [ -98.655468, 30.224921 ], "pop" : 777, "state" : "TX" } +{ "_id" : "78672", "city" : "TOW", "loc" : [ -98.459647, 30.860867 ], "pop" : 874, "state" : "TX" } +{ "_id" : "78675", "city" : "WILLOW CITY", "loc" : [ -98.66458900000001, 30.454889 ], "pop" : 104, "state" : "TX" } +{ "_id" : "78676", "city" : "WIMBERLEY", "loc" : [ -98.11230999999999, 30.026471 ], "pop" : 7004, "state" : "TX" } +{ "_id" : "78677", "city" : "WRIGHTSBORO", "loc" : [ -97.503531, 29.357772 ], "pop" : 26, "state" : "TX" } +{ "_id" : "78681", "city" : "ROUND ROCK", "loc" : [ -97.706171, 30.508431 ], "pop" : 17196, "state" : "TX" } +{ "_id" : "78701", "city" : "AUSTIN", "loc" : [ -97.742559, 30.271289 ], "pop" : 3857, "state" : "TX" } +{ "_id" : "78702", "city" : "AUSTIN", "loc" : [ -97.716589, 30.263817 ], "pop" : 21432, "state" : "TX" } +{ "_id" : "78703", "city" : "AUSTIN", "loc" : [ -97.764809, 30.290671 ], "pop" : 18253, "state" : "TX" } +{ "_id" : "78704", "city" : "AUSTIN", "loc" : [ -97.765788, 30.242831 ], "pop" : 39211, "state" : "TX" } +{ "_id" : "78705", "city" : "AUSTIN", "loc" : [ -97.739627, 30.289619 ], "pop" : 23679, "state" : "TX" } +{ "_id" : "78717", "city" : "AUSTIN", "loc" : [ -97.747187, 30.505972 ], "pop" : 2516, "state" : "TX" } +{ "_id" : "78719", "city" : "AUSTIN", "loc" : [ -97.666701, 30.180243 ], "pop" : 5368, "state" : "TX" } +{ "_id" : "78721", "city" : "AUSTIN", "loc" : [ -97.686798, 30.272144 ], "pop" : 9091, "state" : "TX" } +{ "_id" : "78722", "city" : "AUSTIN", "loc" : [ -97.71495, 30.289305 ], "pop" : 5588, "state" : "TX" } +{ "_id" : "78723", "city" : "AUSTIN", "loc" : [ -97.68494099999999, 30.308515 ], "pop" : 22972, "state" : "TX" } +{ "_id" : "78724", "city" : "AUSTIN", "loc" : [ -97.63958700000001, 30.295982 ], "pop" : 6465, "state" : "TX" } +{ "_id" : "78725", "city" : "AUSTIN", "loc" : [ -97.624301, 30.256186 ], "pop" : 2764, "state" : "TX" } +{ "_id" : "78726", "city" : "AUSTIN", "loc" : [ -97.832649, 30.43 ], "pop" : 871, "state" : "TX" } +{ "_id" : "78727", "city" : "AUSTIN", "loc" : [ -97.719488, 30.425422 ], "pop" : 14276, "state" : "TX" } +{ "_id" : "78728", "city" : "AUSTIN", "loc" : [ -97.681123, 30.441679 ], "pop" : 8051, "state" : "TX" } +{ "_id" : "78729", "city" : "AUSTIN", "loc" : [ -97.768787, 30.45206 ], "pop" : 16611, "state" : "TX" } +{ "_id" : "78730", "city" : "AUSTIN", "loc" : [ -97.824062, 30.360745 ], "pop" : 1021, "state" : "TX" } +{ "_id" : "78731", "city" : "AUSTIN", "loc" : [ -97.760887, 30.347129 ], "pop" : 23276, "state" : "TX" } +{ "_id" : "78732", "city" : "AUSTIN", "loc" : [ -97.900685, 30.375233 ], "pop" : 919, "state" : "TX" } +{ "_id" : "78733", "city" : "AUSTIN", "loc" : [ -97.86663299999999, 30.331355 ], "pop" : 4083, "state" : "TX" } +{ "_id" : "78734", "city" : "LAKEWAY", "loc" : [ -97.95755800000001, 30.377404 ], "pop" : 7495, "state" : "TX" } +{ "_id" : "78735", "city" : "AUSTIN", "loc" : [ -97.84142300000001, 30.248978 ], "pop" : 3463, "state" : "TX" } +{ "_id" : "78736", "city" : "AUSTIN", "loc" : [ -97.91596800000001, 30.244433 ], "pop" : 5812, "state" : "TX" } +{ "_id" : "78737", "city" : "AUSTIN", "loc" : [ -97.94274900000001, 30.210692 ], "pop" : 4135, "state" : "TX" } +{ "_id" : "78738", "city" : "AUSTIN", "loc" : [ -97.982367, 30.333708 ], "pop" : 606, "state" : "TX" } +{ "_id" : "78739", "city" : "AUSTIN", "loc" : [ -97.878433, 30.172026 ], "pop" : 3104, "state" : "TX" } +{ "_id" : "78741", "city" : "AUSTIN", "loc" : [ -97.722317, 30.231513 ], "pop" : 25424, "state" : "TX" } +{ "_id" : "78742", "city" : "AUSTIN", "loc" : [ -97.670349, 30.231296 ], "pop" : 1653, "state" : "TX" } +{ "_id" : "78744", "city" : "AUSTIN", "loc" : [ -97.74723, 30.18764 ], "pop" : 23418, "state" : "TX" } +{ "_id" : "78745", "city" : "AUSTIN", "loc" : [ -97.795599, 30.206298 ], "pop" : 48151, "state" : "TX" } +{ "_id" : "78746", "city" : "WEST LAKE HILLS", "loc" : [ -97.80812899999999, 30.285009 ], "pop" : 18855, "state" : "TX" } +{ "_id" : "78747", "city" : "CREEDMOOR", "loc" : [ -97.76212700000001, 30.130235 ], "pop" : 3070, "state" : "TX" } +{ "_id" : "78748", "city" : "AUSTIN", "loc" : [ -97.822474, 30.174311 ], "pop" : 16288, "state" : "TX" } +{ "_id" : "78749", "city" : "AUSTIN", "loc" : [ -97.85075500000001, 30.216641 ], "pop" : 13674, "state" : "TX" } +{ "_id" : "78750", "city" : "AUSTIN", "loc" : [ -97.79667600000001, 30.422401 ], "pop" : 8867, "state" : "TX" } +{ "_id" : "78751", "city" : "AUSTIN", "loc" : [ -97.724163, 30.309288 ], "pop" : 12715, "state" : "TX" } +{ "_id" : "78752", "city" : "AUSTIN", "loc" : [ -97.700394, 30.331562 ], "pop" : 13311, "state" : "TX" } +{ "_id" : "78753", "city" : "AUSTIN", "loc" : [ -97.682658, 30.36485 ], "pop" : 26823, "state" : "TX" } +{ "_id" : "78754", "city" : "AUSTIN", "loc" : [ -97.667267, 30.342331 ], "pop" : 2328, "state" : "TX" } +{ "_id" : "78756", "city" : "AUSTIN", "loc" : [ -97.73903199999999, 30.322312 ], "pop" : 7525, "state" : "TX" } +{ "_id" : "78757", "city" : "AUSTIN", "loc" : [ -97.731617, 30.343732 ], "pop" : 11723, "state" : "TX" } +{ "_id" : "78758", "city" : "AUSTIN", "loc" : [ -97.707758, 30.376431 ], "pop" : 43246, "state" : "TX" } +{ "_id" : "78759", "city" : "AUSTIN", "loc" : [ -97.752602, 30.403614 ], "pop" : 27479, "state" : "TX" } +{ "_id" : "78801", "city" : "UVALDE", "loc" : [ -99.793074, 29.217238 ], "pop" : 19725, "state" : "TX" } +{ "_id" : "78827", "city" : "ASHERTON", "loc" : [ -99.748611, 28.436421 ], "pop" : 1869, "state" : "TX" } +{ "_id" : "78828", "city" : "BARKSDALE", "loc" : [ -100.070983, 29.708488 ], "pop" : 353, "state" : "TX" } +{ "_id" : "78829", "city" : "BATESVILLE", "loc" : [ -99.611457, 28.928648 ], "pop" : 1512, "state" : "TX" } +{ "_id" : "78830", "city" : "BIG WELLS", "loc" : [ -99.57808300000001, 28.569344 ], "pop" : 882, "state" : "TX" } +{ "_id" : "78832", "city" : "BRACKETTVILLE", "loc" : [ -100.415495, 29.30963 ], "pop" : 3119, "state" : "TX" } +{ "_id" : "78833", "city" : "CAMP WOOD", "loc" : [ -100.00838, 29.679491 ], "pop" : 1017, "state" : "TX" } +{ "_id" : "78834", "city" : "CARRIZO SPRINGS", "loc" : [ -99.863513, 28.52779 ], "pop" : 7682, "state" : "TX" } +{ "_id" : "78837", "city" : "COMSTOCK", "loc" : [ -101.262755, 29.74842 ], "pop" : 497, "state" : "TX" } +{ "_id" : "78838", "city" : "CONCAN", "loc" : [ -99.68424400000001, 29.524057 ], "pop" : 201, "state" : "TX" } +{ "_id" : "78839", "city" : "CRYSTAL CITY", "loc" : [ -99.826412, 28.686953 ], "pop" : 9130, "state" : "TX" } +{ "_id" : "78840", "city" : "LAUGHLIN A F B", "loc" : [ -100.891555, 29.373881 ], "pop" : 38233, "state" : "TX" } +{ "_id" : "78850", "city" : "D HANIS", "loc" : [ -99.28348800000001, 29.3398 ], "pop" : 1337, "state" : "TX" } +{ "_id" : "78851", "city" : "DRYDEN", "loc" : [ -102.33207, 30.165108 ], "pop" : 1410, "state" : "TX" } +{ "_id" : "78852", "city" : "EAGLE PASS", "loc" : [ -100.48176, 28.702786 ], "pop" : 35136, "state" : "TX" } +{ "_id" : "78861", "city" : "DUNLAY", "loc" : [ -99.12763699999999, 29.356065 ], "pop" : 8114, "state" : "TX" } +{ "_id" : "78870", "city" : "KNIPPA", "loc" : [ -99.637171, 29.291119 ], "pop" : 618, "state" : "TX" } +{ "_id" : "78872", "city" : "LA PRYOR", "loc" : [ -99.85074, 28.948848 ], "pop" : 1520, "state" : "TX" } +{ "_id" : "78873", "city" : "LEAKEY", "loc" : [ -99.747913, 29.768951 ], "pop" : 1142, "state" : "TX" } +{ "_id" : "78877", "city" : "SPOFFORD", "loc" : [ -100.574181, 28.942688 ], "pop" : 1242, "state" : "TX" } +{ "_id" : "78879", "city" : "RIO FRIO", "loc" : [ -99.77233699999999, 29.658295 ], "pop" : 253, "state" : "TX" } +{ "_id" : "78880", "city" : "ROCKSPRINGS", "loc" : [ -100.231029, 30.018756 ], "pop" : 1904, "state" : "TX" } +{ "_id" : "78881", "city" : "SABINAL", "loc" : [ -99.478109, 29.326668 ], "pop" : 2203, "state" : "TX" } +{ "_id" : "78883", "city" : "TARPLEY", "loc" : [ -99.24687400000001, 29.645494 ], "pop" : 20, "state" : "TX" } +{ "_id" : "78884", "city" : "UTOPIA", "loc" : [ -99.558454, 29.597197 ], "pop" : 593, "state" : "TX" } +{ "_id" : "78885", "city" : "VANDERPOOL", "loc" : [ -99.555542, 29.741779 ], "pop" : 227, "state" : "TX" } +{ "_id" : "78886", "city" : "YANCEY", "loc" : [ -99.14277, 29.140398 ], "pop" : 368, "state" : "TX" } +{ "_id" : "78931", "city" : "BLEIBLERVILLE", "loc" : [ -96.418719, 29.967572 ], "pop" : 1226, "state" : "TX" } +{ "_id" : "78932", "city" : "CARMINE", "loc" : [ -96.686077, 30.140351 ], "pop" : 356, "state" : "TX" } +{ "_id" : "78933", "city" : "CAT SPRING", "loc" : [ -96.390029, 29.751204 ], "pop" : 658, "state" : "TX" } +{ "_id" : "78934", "city" : "COLUMBUS", "loc" : [ -96.5527, 29.703247 ], "pop" : 5234, "state" : "TX" } +{ "_id" : "78935", "city" : "ALLEYTON", "loc" : [ -96.46312, 29.745286 ], "pop" : 273, "state" : "TX" } +{ "_id" : "78938", "city" : "ELLINGER", "loc" : [ -96.69663, 29.845915 ], "pop" : 374, "state" : "TX" } +{ "_id" : "78940", "city" : "FAYETTEVILLE", "loc" : [ -96.646317, 29.886789 ], "pop" : 2290, "state" : "TX" } +{ "_id" : "78941", "city" : "FLATONIA", "loc" : [ -97.098685, 29.709493 ], "pop" : 2934, "state" : "TX" } +{ "_id" : "78942", "city" : "GIDDINGS", "loc" : [ -96.93322000000001, 30.177725 ], "pop" : 6799, "state" : "TX" } +{ "_id" : "78944", "city" : "INDUSTRY", "loc" : [ -96.518849, 29.971789 ], "pop" : 1258, "state" : "TX" } +{ "_id" : "78945", "city" : "LA GRANGE", "loc" : [ -96.885988, 29.903978 ], "pop" : 10019, "state" : "TX" } +{ "_id" : "78946", "city" : "LEDBETTER", "loc" : [ -96.761276, 30.238307 ], "pop" : 806, "state" : "TX" } +{ "_id" : "78947", "city" : "LEXINGTON", "loc" : [ -97.052387, 30.419144 ], "pop" : 3138, "state" : "TX" } +{ "_id" : "78948", "city" : "LINCOLN", "loc" : [ -96.970159, 30.317693 ], "pop" : 1228, "state" : "TX" } +{ "_id" : "78949", "city" : "MULDOON", "loc" : [ -97.100562, 29.799305 ], "pop" : 8, "state" : "TX" } +{ "_id" : "78950", "city" : "NEW ULM", "loc" : [ -96.537963, 29.814248 ], "pop" : 689, "state" : "TX" } +{ "_id" : "78953", "city" : "ROSANKY", "loc" : [ -97.311875, 29.924122 ], "pop" : 1345, "state" : "TX" } +{ "_id" : "78954", "city" : "ROUND TOP", "loc" : [ -96.734058, 30.041131 ], "pop" : 1127, "state" : "TX" } +{ "_id" : "78956", "city" : "SCHULENBURG", "loc" : [ -96.91056399999999, 29.688247 ], "pop" : 3703, "state" : "TX" } +{ "_id" : "78957", "city" : "SMITHVILLE", "loc" : [ -97.149396, 30.017813 ], "pop" : 5244, "state" : "TX" } +{ "_id" : "78959", "city" : "WAELDER", "loc" : [ -97.295798, 29.6868 ], "pop" : 1105, "state" : "TX" } +{ "_id" : "78962", "city" : "WEIMAR", "loc" : [ -96.755045, 29.678707 ], "pop" : 3854, "state" : "TX" } +{ "_id" : "78963", "city" : "WEST POINT", "loc" : [ -97.036129, 29.95235 ], "pop" : 58, "state" : "TX" } +{ "_id" : "79001", "city" : "ADRIAN", "loc" : [ -102.69699, 35.275807 ], "pop" : 307, "state" : "TX" } +{ "_id" : "79005", "city" : "BOOKER", "loc" : [ -100.523791, 36.442948 ], "pop" : 1454, "state" : "TX" } +{ "_id" : "79007", "city" : "PHILLIPS", "loc" : [ -101.403245, 35.664299 ], "pop" : 17339, "state" : "TX" } +{ "_id" : "79009", "city" : "BOVINA", "loc" : [ -102.806115, 34.481504 ], "pop" : 2805, "state" : "TX" } +{ "_id" : "79011", "city" : "BRISCOE", "loc" : [ -100.167923, 35.58547 ], "pop" : 469, "state" : "TX" } +{ "_id" : "79014", "city" : "GLAZIER", "loc" : [ -100.353875, 35.885906 ], "pop" : 3720, "state" : "TX" } +{ "_id" : "79015", "city" : "CANYON", "loc" : [ -101.924705, 34.977222 ], "pop" : 14389, "state" : "TX" } +{ "_id" : "79018", "city" : "CHANNING", "loc" : [ -102.334269, 35.782572 ], "pop" : 648, "state" : "TX" } +{ "_id" : "79019", "city" : "CLAUDE", "loc" : [ -101.381271, 35.096715 ], "pop" : 1903, "state" : "TX" } +{ "_id" : "79022", "city" : "DALHART", "loc" : [ -102.517658, 36.073183 ], "pop" : 7051, "state" : "TX" } +{ "_id" : "79027", "city" : "DIMMITT", "loc" : [ -102.304634, 34.534089 ], "pop" : 7088, "state" : "TX" } +{ "_id" : "79029", "city" : "DUMAS", "loc" : [ -101.967984, 35.882315 ], "pop" : 15902, "state" : "TX" } +{ "_id" : "79031", "city" : "EARTH", "loc" : [ -102.421284, 34.241521 ], "pop" : 1704, "state" : "TX" } +{ "_id" : "79034", "city" : "FOLLETT", "loc" : [ -100.206776, 36.430923 ], "pop" : 983, "state" : "TX" } +{ "_id" : "79035", "city" : "BLACK", "loc" : [ -102.719139, 34.640298 ], "pop" : 4788, "state" : "TX" } +{ "_id" : "79036", "city" : "FRITCH", "loc" : [ -101.584482, 35.644121 ], "pop" : 5073, "state" : "TX" } +{ "_id" : "79039", "city" : "GROOM", "loc" : [ -101.12846, 35.216761 ], "pop" : 827, "state" : "TX" } +{ "_id" : "79040", "city" : "GRUVER", "loc" : [ -101.408906, 36.286805 ], "pop" : 2053, "state" : "TX" } +{ "_id" : "79041", "city" : "HALE CENTER", "loc" : [ -101.873623, 34.066943 ], "pop" : 3139, "state" : "TX" } +{ "_id" : "79042", "city" : "HAPPY", "loc" : [ -101.825632, 34.721899 ], "pop" : 839, "state" : "TX" } +{ "_id" : "79043", "city" : "HART", "loc" : [ -102.115534, 34.387838 ], "pop" : 1430, "state" : "TX" } +{ "_id" : "79044", "city" : "HARTLEY", "loc" : [ -102.52213, 35.931122 ], "pop" : 724, "state" : "TX" } +{ "_id" : "79045", "city" : "HEREFORD", "loc" : [ -102.40503, 34.837037 ], "pop" : 19090, "state" : "TX" } +{ "_id" : "79046", "city" : "HIGGINS", "loc" : [ -100.095191, 36.136504 ], "pop" : 672, "state" : "TX" } +{ "_id" : "79052", "city" : "KRESS", "loc" : [ -101.73705, 34.373703 ], "pop" : 1643, "state" : "TX" } +{ "_id" : "79056", "city" : "LIPSCOMB", "loc" : [ -100.270164, 36.223031 ], "pop" : 34, "state" : "TX" } +{ "_id" : "79057", "city" : "KELLERVILLE", "loc" : [ -100.611303, 35.234051 ], "pop" : 1151, "state" : "TX" } +{ "_id" : "79059", "city" : "MIAMI", "loc" : [ -100.702715, 35.719301 ], "pop" : 1025, "state" : "TX" } +{ "_id" : "79061", "city" : "MOBEETIE", "loc" : [ -100.424158, 35.529717 ], "pop" : 421, "state" : "TX" } +{ "_id" : "79062", "city" : "MORSE", "loc" : [ -101.47288, 36.059579 ], "pop" : 169, "state" : "TX" } +{ "_id" : "79063", "city" : "NAZARETH", "loc" : [ -102.106914, 34.544356 ], "pop" : 443, "state" : "TX" } +{ "_id" : "79064", "city" : "OLTON", "loc" : [ -102.141415, 34.184418 ], "pop" : 2747, "state" : "TX" } +{ "_id" : "79065", "city" : "PAMPA", "loc" : [ -100.957885, 35.538043 ], "pop" : 22816, "state" : "TX" } +{ "_id" : "79068", "city" : "PANHANDLE", "loc" : [ -101.43037, 35.380841 ], "pop" : 3669, "state" : "TX" } +{ "_id" : "79070", "city" : "PERRYTON", "loc" : [ -100.815558, 36.374825 ], "pop" : 9128, "state" : "TX" } +{ "_id" : "79072", "city" : "PLAINVIEW", "loc" : [ -101.725896, 34.196194 ], "pop" : 27037, "state" : "TX" } +{ "_id" : "79079", "city" : "TWITTY", "loc" : [ -100.262152, 35.220596 ], "pop" : 2927, "state" : "TX" } +{ "_id" : "79080", "city" : "SKELLYTOWN", "loc" : [ -101.172134, 35.568489 ], "pop" : 739, "state" : "TX" } +{ "_id" : "79081", "city" : "SPEARMAN", "loc" : [ -101.195234, 36.192689 ], "pop" : 3626, "state" : "TX" } +{ "_id" : "79082", "city" : "SPRINGLAKE", "loc" : [ -102.308999, 34.23932 ], "pop" : 331, "state" : "TX" } +{ "_id" : "79083", "city" : "STINNETT", "loc" : [ -101.450011, 35.837661 ], "pop" : 3277, "state" : "TX" } +{ "_id" : "79084", "city" : "STRATFORD", "loc" : [ -101.988568, 36.33349 ], "pop" : 2858, "state" : "TX" } +{ "_id" : "79085", "city" : "SUMMERFIELD", "loc" : [ -102.49919, 34.727244 ], "pop" : 109, "state" : "TX" } +{ "_id" : "79086", "city" : "SUNRAY", "loc" : [ -101.812334, 36.009707 ], "pop" : 1963, "state" : "TX" } +{ "_id" : "79087", "city" : "TEXLINE", "loc" : [ -102.984516, 36.374034 ], "pop" : 672, "state" : "TX" } +{ "_id" : "79088", "city" : "VIGO PARK", "loc" : [ -101.762864, 34.540258 ], "pop" : 5651, "state" : "TX" } +{ "_id" : "79092", "city" : "VEGA", "loc" : [ -102.356572, 35.373212 ], "pop" : 1738, "state" : "TX" } +{ "_id" : "79094", "city" : "WAYSIDE", "loc" : [ -101.545434, 34.803353 ], "pop" : 118, "state" : "TX" } +{ "_id" : "79095", "city" : "WELLINGTON", "loc" : [ -100.220721, 34.871726 ], "pop" : 3324, "state" : "TX" } +{ "_id" : "79096", "city" : "WHEELER", "loc" : [ -100.256824, 35.431852 ], "pop" : 2062, "state" : "TX" } +{ "_id" : "79097", "city" : "WHITE DEER", "loc" : [ -101.173993, 35.42781 ], "pop" : 1341, "state" : "TX" } +{ "_id" : "79098", "city" : "WILDORADO", "loc" : [ -102.211754, 35.19156 ], "pop" : 296, "state" : "TX" } +{ "_id" : "79101", "city" : "AMARILLO", "loc" : [ -101.842052, 35.203238 ], "pop" : 2355, "state" : "TX" } +{ "_id" : "79102", "city" : "AMARILLO", "loc" : [ -101.84963, 35.199854 ], "pop" : 9091, "state" : "TX" } +{ "_id" : "79103", "city" : "AMARILLO", "loc" : [ -101.797587, 35.175134 ], "pop" : 5336, "state" : "TX" } +{ "_id" : "79104", "city" : "AMARILLO", "loc" : [ -101.797503, 35.193918 ], "pop" : 12468, "state" : "TX" } +{ "_id" : "79106", "city" : "AMARILLO", "loc" : [ -101.894918, 35.197741 ], "pop" : 29728, "state" : "TX" } +{ "_id" : "79107", "city" : "AMARILLO", "loc" : [ -101.805962, 35.230866 ], "pop" : 29593, "state" : "TX" } +{ "_id" : "79108", "city" : "AMARILLO", "loc" : [ -101.830025, 35.277866 ], "pop" : 8461, "state" : "TX" } +{ "_id" : "79109", "city" : "AMARILLO", "loc" : [ -101.886764, 35.166332 ], "pop" : 41676, "state" : "TX" } +{ "_id" : "79110", "city" : "AMARILLO", "loc" : [ -101.864063, 35.154468 ], "pop" : 17159, "state" : "TX" } +{ "_id" : "79111", "city" : "AMARILLO", "loc" : [ -101.670342, 35.228619 ], "pop" : 2194, "state" : "TX" } +{ "_id" : "79118", "city" : "AMARILLO", "loc" : [ -101.834936, 35.07629 ], "pop" : 6981, "state" : "TX" } +{ "_id" : "79119", "city" : "AMARILLO", "loc" : [ -101.97432, 35.064214 ], "pop" : 968, "state" : "TX" } +{ "_id" : "79121", "city" : "AMARILLO", "loc" : [ -101.926594, 35.169689 ], "pop" : 3454, "state" : "TX" } +{ "_id" : "79124", "city" : "AMARILLO", "loc" : [ -101.942952, 35.270269 ], "pop" : 3694, "state" : "TX" } +{ "_id" : "79201", "city" : "KIRKLAND", "loc" : [ -100.21017, 34.428124 ], "pop" : 5862, "state" : "TX" } +{ "_id" : "79220", "city" : "AFTON", "loc" : [ -100.802131, 33.771837 ], "pop" : 132, "state" : "TX" } +{ "_id" : "79225", "city" : "CHILLICOTHE", "loc" : [ -99.515669, 34.243946 ], "pop" : 1186, "state" : "TX" } +{ "_id" : "79226", "city" : "CLARENDON", "loc" : [ -100.895157, 34.952878 ], "pop" : 2884, "state" : "TX" } +{ "_id" : "79227", "city" : "CROWELL", "loc" : [ -99.698345, 33.991208 ], "pop" : 1794, "state" : "TX" } +{ "_id" : "79229", "city" : "DICKENS", "loc" : [ -100.819695, 33.627996 ], "pop" : 569, "state" : "TX" } +{ "_id" : "79230", "city" : "DODSON", "loc" : [ -100.028593, 34.764354 ], "pop" : 197, "state" : "TX" } +{ "_id" : "79232", "city" : "DUMONT", "loc" : [ -100.319829, 33.656735 ], "pop" : 344, "state" : "TX" } +{ "_id" : "79234", "city" : "FLOMOT", "loc" : [ -101.003824, 34.232076 ], "pop" : 38, "state" : "TX" } +{ "_id" : "79235", "city" : "FLOYDADA", "loc" : [ -101.334564, 33.974296 ], "pop" : 5075, "state" : "TX" } +{ "_id" : "79237", "city" : "HEDLEY", "loc" : [ -100.680632, 34.869787 ], "pop" : 812, "state" : "TX" } +{ "_id" : "79239", "city" : "LAKEVIEW", "loc" : [ -100.725921, 34.672437 ], "pop" : 358, "state" : "TX" } +{ "_id" : "79241", "city" : "LOCKNEY", "loc" : [ -101.425934, 34.145827 ], "pop" : 3422, "state" : "TX" } +{ "_id" : "79243", "city" : "MCADOO", "loc" : [ -100.983293, 33.741265 ], "pop" : 149, "state" : "TX" } +{ "_id" : "79244", "city" : "MATADOR", "loc" : [ -100.836138, 34.052507 ], "pop" : 1173, "state" : "TX" } +{ "_id" : "79245", "city" : "MEMPHIS", "loc" : [ -100.534653, 34.712237 ], "pop" : 2843, "state" : "TX" } +{ "_id" : "79248", "city" : "CHALK", "loc" : [ -100.305917, 34.019154 ], "pop" : 2260, "state" : "TX" } +{ "_id" : "79250", "city" : "PETERSBURG", "loc" : [ -101.604591, 33.876806 ], "pop" : 1608, "state" : "TX" } +{ "_id" : "79251", "city" : "QUAIL", "loc" : [ -100.425243, 34.917969 ], "pop" : 73, "state" : "TX" } +{ "_id" : "79252", "city" : "QUANAH", "loc" : [ -99.749438, 34.29555 ], "pop" : 4097, "state" : "TX" } +{ "_id" : "79255", "city" : "QUITAQUE", "loc" : [ -101.046458, 34.379605 ], "pop" : 674, "state" : "TX" } +{ "_id" : "79256", "city" : "ROARING SPRINGS", "loc" : [ -100.852818, 33.897669 ], "pop" : 321, "state" : "TX" } +{ "_id" : "79257", "city" : "SILVERTON", "loc" : [ -101.316899, 34.464089 ], "pop" : 1297, "state" : "TX" } +{ "_id" : "79259", "city" : "TELL", "loc" : [ -100.396482, 34.378164 ], "pop" : 70, "state" : "TX" } +{ "_id" : "79260", "city" : "TRUSCOTT", "loc" : [ -99.66245499999999, 33.75323 ], "pop" : 54, "state" : "TX" } +{ "_id" : "79261", "city" : "TURKEY", "loc" : [ -100.844875, 34.403644 ], "pop" : 704, "state" : "TX" } +{ "_id" : "79311", "city" : "ABERNATHY", "loc" : [ -101.861111, 33.849961 ], "pop" : 3482, "state" : "TX" } +{ "_id" : "79312", "city" : "AMHERST", "loc" : [ -102.441614, 33.997608 ], "pop" : 1266, "state" : "TX" } +{ "_id" : "79313", "city" : "ANTON", "loc" : [ -102.165165, 33.804278 ], "pop" : 1625, "state" : "TX" } +{ "_id" : "79316", "city" : "BROWNFIELD", "loc" : [ -102.276157, 33.169801 ], "pop" : 11954, "state" : "TX" } +{ "_id" : "79320", "city" : "BULA", "loc" : [ -102.656426, 33.89696 ], "pop" : 113, "state" : "TX" } +{ "_id" : "79322", "city" : "CROSBYTON", "loc" : [ -101.228733, 33.656159 ], "pop" : 2711, "state" : "TX" } +{ "_id" : "79323", "city" : "DENVER CITY", "loc" : [ -102.831251, 32.971114 ], "pop" : 6697, "state" : "TX" } +{ "_id" : "79324", "city" : "ENOCHS", "loc" : [ -102.764107, 33.850225 ], "pop" : 53, "state" : "TX" } +{ "_id" : "79325", "city" : "FARWELL", "loc" : [ -102.990064, 34.386025 ], "pop" : 2270, "state" : "TX" } +{ "_id" : "79326", "city" : "FIELDTON", "loc" : [ -102.269692, 34.091878 ], "pop" : 48, "state" : "TX" } +{ "_id" : "79329", "city" : "IDALOU", "loc" : [ -101.678579, 33.650376 ], "pop" : 4632, "state" : "TX" } +{ "_id" : "79331", "city" : "LAMESA", "loc" : [ -101.956914, 32.736677 ], "pop" : 12989, "state" : "TX" } +{ "_id" : "79336", "city" : "LEVELLAND", "loc" : [ -102.367591, 33.578778 ], "pop" : 20952, "state" : "TX" } +{ "_id" : "79339", "city" : "LITTLEFIELD", "loc" : [ -102.320697, 33.921195 ], "pop" : 7766, "state" : "TX" } +{ "_id" : "79342", "city" : "LOOP", "loc" : [ -102.422084, 32.916169 ], "pop" : 393, "state" : "TX" } +{ "_id" : "79343", "city" : "LORENZO", "loc" : [ -101.527736, 33.666626 ], "pop" : 1753, "state" : "TX" } +{ "_id" : "79344", "city" : "MAPLE", "loc" : [ -102.926588, 33.8622 ], "pop" : 234, "state" : "TX" } +{ "_id" : "79345", "city" : "MEADOW", "loc" : [ -102.249196, 33.332098 ], "pop" : 1234, "state" : "TX" } +{ "_id" : "79346", "city" : "MORTON", "loc" : [ -102.779619, 33.715718 ], "pop" : 3569, "state" : "TX" } +{ "_id" : "79347", "city" : "MULESHOE", "loc" : [ -102.749631, 34.219308 ], "pop" : 6664, "state" : "TX" } +{ "_id" : "79351", "city" : "ODONNELL", "loc" : [ -101.827099, 32.977331 ], "pop" : 1381, "state" : "TX" } +{ "_id" : "79353", "city" : "PEP", "loc" : [ -102.56558, 33.810434 ], "pop" : 66, "state" : "TX" } +{ "_id" : "79355", "city" : "PLAINS", "loc" : [ -102.829367, 33.189354 ], "pop" : 2089, "state" : "TX" } +{ "_id" : "79356", "city" : "POST", "loc" : [ -101.39216, 33.201695 ], "pop" : 5143, "state" : "TX" } +{ "_id" : "79357", "city" : "CONE", "loc" : [ -101.382738, 33.678977 ], "pop" : 2840, "state" : "TX" } +{ "_id" : "79358", "city" : "ROPESVILLE", "loc" : [ -102.15841, 33.457499 ], "pop" : 1556, "state" : "TX" } +{ "_id" : "79359", "city" : "SEAGRAVES", "loc" : [ -102.578075, 32.93172 ], "pop" : 3307, "state" : "TX" } +{ "_id" : "79360", "city" : "SEMINOLE", "loc" : [ -102.682761, 32.721045 ], "pop" : 10423, "state" : "TX" } +{ "_id" : "79363", "city" : "SHALLOWATER", "loc" : [ -101.983626, 33.691859 ], "pop" : 4342, "state" : "TX" } +{ "_id" : "79364", "city" : "RANSOM CANYON", "loc" : [ -101.65192, 33.436795 ], "pop" : 7118, "state" : "TX" } +{ "_id" : "79366", "city" : "RANSOM CANYON", "loc" : [ -101.690805, 33.533019 ], "pop" : 1248, "state" : "TX" } +{ "_id" : "79370", "city" : "SPUR", "loc" : [ -100.857116, 33.479016 ], "pop" : 1718, "state" : "TX" } +{ "_id" : "79371", "city" : "SUDAN", "loc" : [ -102.525525, 34.069661 ], "pop" : 1210, "state" : "TX" } +{ "_id" : "79373", "city" : "TAHOKA", "loc" : [ -101.821976, 33.198803 ], "pop" : 4309, "state" : "TX" } +{ "_id" : "79376", "city" : "TOKIO", "loc" : [ -102.576753, 33.18259 ], "pop" : 30, "state" : "TX" } +{ "_id" : "79377", "city" : "WELCH", "loc" : [ -102.106792, 32.893827 ], "pop" : 575, "state" : "TX" } +{ "_id" : "79379", "city" : "WHITEFACE", "loc" : [ -102.638941, 33.586575 ], "pop" : 808, "state" : "TX" } +{ "_id" : "79381", "city" : "WILSON", "loc" : [ -101.712231, 33.329862 ], "pop" : 1068, "state" : "TX" } +{ "_id" : "79382", "city" : "WOLFFORTH", "loc" : [ -102.026101, 33.530381 ], "pop" : 3101, "state" : "TX" } +{ "_id" : "79401", "city" : "LUBBOCK", "loc" : [ -101.860634, 33.586527 ], "pop" : 10240, "state" : "TX" } +{ "_id" : "79403", "city" : "LUBBOCK", "loc" : [ -101.80982, 33.619573 ], "pop" : 17237, "state" : "TX" } +{ "_id" : "79404", "city" : "LUBBOCK", "loc" : [ -101.833263, 33.525979 ], "pop" : 12158, "state" : "TX" } +{ "_id" : "79405", "city" : "LUBBOCK", "loc" : [ -101.850655, 33.570972 ], "pop" : 2903, "state" : "TX" } +{ "_id" : "79406", "city" : "LUBBOCK", "loc" : [ -101.877828, 33.581934 ], "pop" : 5582, "state" : "TX" } +{ "_id" : "79407", "city" : "LUBBOCK", "loc" : [ -101.942333, 33.568369 ], "pop" : 12783, "state" : "TX" } +{ "_id" : "79410", "city" : "LUBBOCK", "loc" : [ -101.890377, 33.56931 ], "pop" : 9955, "state" : "TX" } +{ "_id" : "79411", "city" : "LUBBOCK", "loc" : [ -101.862593, 33.570393 ], "pop" : 4715, "state" : "TX" } +{ "_id" : "79412", "city" : "LUBBOCK", "loc" : [ -101.857737, 33.546313 ], "pop" : 14245, "state" : "TX" } +{ "_id" : "79413", "city" : "LUBBOCK", "loc" : [ -101.887142, 33.546597 ], "pop" : 20238, "state" : "TX" } +{ "_id" : "79414", "city" : "LUBBOCK", "loc" : [ -101.918666, 33.549728 ], "pop" : 16893, "state" : "TX" } +{ "_id" : "79415", "city" : "LUBBOCK", "loc" : [ -101.876015, 33.602117 ], "pop" : 13384, "state" : "TX" } +{ "_id" : "79416", "city" : "LUBBOCK", "loc" : [ -101.936705, 33.592397 ], "pop" : 20774, "state" : "TX" } +{ "_id" : "79423", "city" : "LUBBOCK", "loc" : [ -101.87946, 33.514604 ], "pop" : 17308, "state" : "TX" } +{ "_id" : "79424", "city" : "LUBBOCK", "loc" : [ -101.93439, 33.515866 ], "pop" : 22873, "state" : "TX" } +{ "_id" : "79489", "city" : "REESE AIR FORCE", "loc" : [ -102.028792, 33.594344 ], "pop" : 312, "state" : "TX" } +{ "_id" : "79501", "city" : "ANSON", "loc" : [ -99.895301, 32.748894 ], "pop" : 3724, "state" : "TX" } +{ "_id" : "79502", "city" : "ASPERMONT", "loc" : [ -100.234372, 33.130059 ], "pop" : 1424, "state" : "TX" } +{ "_id" : "79503", "city" : "AVOCA", "loc" : [ -99.69642, 32.883225 ], "pop" : 248, "state" : "TX" } +{ "_id" : "79504", "city" : "BAIRD", "loc" : [ -99.37766000000001, 32.391557 ], "pop" : 2267, "state" : "TX" } +{ "_id" : "79506", "city" : "BLACKWELL", "loc" : [ -100.311078, 32.082044 ], "pop" : 697, "state" : "TX" } +{ "_id" : "79510", "city" : "CLYDE", "loc" : [ -99.518445, 32.380289 ], "pop" : 7664, "state" : "TX" } +{ "_id" : "79511", "city" : "COAHOMA", "loc" : [ -101.319681, 32.294215 ], "pop" : 2365, "state" : "TX" } +{ "_id" : "79512", "city" : "COLORADO CITY", "loc" : [ -100.860948, 32.398736 ], "pop" : 5874, "state" : "TX" } +{ "_id" : "79517", "city" : "FLUVANNA", "loc" : [ -101.041966, 32.781022 ], "pop" : 707, "state" : "TX" } +{ "_id" : "79518", "city" : "GIRARD", "loc" : [ -100.693688, 33.363202 ], "pop" : 132, "state" : "TX" } +{ "_id" : "79519", "city" : "GOLDSBORO", "loc" : [ -99.677457, 32.048213 ], "pop" : 27, "state" : "TX" } +{ "_id" : "79520", "city" : "HAMLIN", "loc" : [ -100.128014, 32.879893 ], "pop" : 3271, "state" : "TX" } +{ "_id" : "79521", "city" : "HASKELL", "loc" : [ -99.730923, 33.157993 ], "pop" : 3917, "state" : "TX" } +{ "_id" : "79525", "city" : "HAWLEY", "loc" : [ -99.79599399999999, 32.594965 ], "pop" : 4405, "state" : "TX" } +{ "_id" : "79526", "city" : "HERMLEIGH", "loc" : [ -100.754714, 32.629441 ], "pop" : 942, "state" : "TX" } +{ "_id" : "79527", "city" : "IRA", "loc" : [ -101.025419, 32.621274 ], "pop" : 949, "state" : "TX" } +{ "_id" : "79528", "city" : "JAYTON", "loc" : [ -100.582482, 33.251774 ], "pop" : 708, "state" : "TX" } +{ "_id" : "79529", "city" : "KNOX CITY", "loc" : [ -99.8137, 33.418294 ], "pop" : 1751, "state" : "TX" } +{ "_id" : "79530", "city" : "LAWN", "loc" : [ -99.73508099999999, 32.136012 ], "pop" : 619, "state" : "TX" } +{ "_id" : "79532", "city" : "LORAINE", "loc" : [ -100.72851, 32.385047 ], "pop" : 1300, "state" : "TX" } +{ "_id" : "79533", "city" : "LUEDERS", "loc" : [ -99.672792, 32.762339 ], "pop" : 839, "state" : "TX" } +{ "_id" : "79534", "city" : "MC CAULLEY", "loc" : [ -100.216784, 32.778654 ], "pop" : 272, "state" : "TX" } +{ "_id" : "79535", "city" : "MARYNEAL", "loc" : [ -100.497178, 32.202639 ], "pop" : 123, "state" : "TX" } +{ "_id" : "79536", "city" : "MERKEL", "loc" : [ -99.99244299999999, 32.444371 ], "pop" : 4906, "state" : "TX" } +{ "_id" : "79537", "city" : "NOLAN", "loc" : [ -100.267053, 32.279333 ], "pop" : 254, "state" : "TX" } +{ "_id" : "79538", "city" : "NOVICE", "loc" : [ -99.59353, 32.000927 ], "pop" : 421, "state" : "TX" } +{ "_id" : "79539", "city" : "O BRIEN", "loc" : [ -99.847303, 33.374869 ], "pop" : 314, "state" : "TX" } +{ "_id" : "79540", "city" : "OLD GLORY", "loc" : [ -100.153155, 33.184162 ], "pop" : 431, "state" : "TX" } +{ "_id" : "79541", "city" : "OVALO", "loc" : [ -99.822873, 32.155257 ], "pop" : 326, "state" : "TX" } +{ "_id" : "79543", "city" : "ROBY", "loc" : [ -100.400766, 32.722016 ], "pop" : 1333, "state" : "TX" } +{ "_id" : "79544", "city" : "ROCHESTER", "loc" : [ -99.85936599999999, 33.310457 ], "pop" : 707, "state" : "TX" } +{ "_id" : "79545", "city" : "ROSCOE", "loc" : [ -100.539088, 32.427558 ], "pop" : 2168, "state" : "TX" } +{ "_id" : "79546", "city" : "ROTAN", "loc" : [ -100.470489, 32.855521 ], "pop" : 2449, "state" : "TX" } +{ "_id" : "79547", "city" : "RULE", "loc" : [ -99.889354, 33.184163 ], "pop" : 993, "state" : "TX" } +{ "_id" : "79548", "city" : "SAGERTON", "loc" : [ -99.892329, 33.051321 ], "pop" : 351, "state" : "TX" } +{ "_id" : "79549", "city" : "DERMOTT", "loc" : [ -100.907485, 32.715105 ], "pop" : 16206, "state" : "TX" } +{ "_id" : "79553", "city" : "STAMFORD", "loc" : [ -99.78592999999999, 32.945323 ], "pop" : 4338, "state" : "TX" } +{ "_id" : "79556", "city" : "SWEETWATER", "loc" : [ -100.397908, 32.472589 ], "pop" : 14064, "state" : "TX" } +{ "_id" : "79560", "city" : "SYLVESTER", "loc" : [ -100.242497, 32.717909 ], "pop" : 240, "state" : "TX" } +{ "_id" : "79561", "city" : "TRENT", "loc" : [ -100.119488, 32.489752 ], "pop" : 494, "state" : "TX" } +{ "_id" : "79562", "city" : "TUSCOLA", "loc" : [ -99.82438999999999, 32.234955 ], "pop" : 2980, "state" : "TX" } +{ "_id" : "79563", "city" : "TYE", "loc" : [ -99.86843399999999, 32.447728 ], "pop" : 903, "state" : "TX" } +{ "_id" : "79565", "city" : "WESTBROOK", "loc" : [ -100.990719, 32.353195 ], "pop" : 842, "state" : "TX" } +{ "_id" : "79566", "city" : "WINGATE", "loc" : [ -100.118311, 32.031777 ], "pop" : 313, "state" : "TX" } +{ "_id" : "79567", "city" : "WINTERS", "loc" : [ -99.95511399999999, 31.962028 ], "pop" : 3876, "state" : "TX" } +{ "_id" : "79601", "city" : "ABILENE", "loc" : [ -99.718208, 32.468155 ], "pop" : 16713, "state" : "TX" } +{ "_id" : "79602", "city" : "ABILENE", "loc" : [ -99.721448, 32.41783 ], "pop" : 16432, "state" : "TX" } +{ "_id" : "79603", "city" : "ABILENE", "loc" : [ -99.761916, 32.467852 ], "pop" : 24123, "state" : "TX" } +{ "_id" : "79605", "city" : "ABILENE", "loc" : [ -99.772374, 32.431987 ], "pop" : 29862, "state" : "TX" } +{ "_id" : "79606", "city" : "ABILENE", "loc" : [ -99.77457800000001, 32.392038 ], "pop" : 17332, "state" : "TX" } +{ "_id" : "79607", "city" : "DYESS AFB", "loc" : [ -99.82214, 32.418956 ], "pop" : 4965, "state" : "TX" } +{ "_id" : "79701", "city" : "MIDLAND", "loc" : [ -102.06261, 31.989636 ], "pop" : 32926, "state" : "TX" } +{ "_id" : "79703", "city" : "MIDLAND", "loc" : [ -102.136854, 31.972106 ], "pop" : 23167, "state" : "TX" } +{ "_id" : "79705", "city" : "MIDLAND", "loc" : [ -102.091483, 32.029473 ], "pop" : 27708, "state" : "TX" } +{ "_id" : "79707", "city" : "MIDLAND", "loc" : [ -102.147599, 32.019911 ], "pop" : 22810, "state" : "TX" } +{ "_id" : "79713", "city" : "ACKERLY", "loc" : [ -101.795132, 32.609085 ], "pop" : 793, "state" : "TX" } +{ "_id" : "79714", "city" : "ANDREWS", "loc" : [ -102.540926, 32.320125 ], "pop" : 14338, "state" : "TX" } +{ "_id" : "79718", "city" : "BALMORHEA", "loc" : [ -103.693316, 31.012361 ], "pop" : 1655, "state" : "TX" } +{ "_id" : "79719", "city" : "BARSTOW", "loc" : [ -103.397086, 31.463908 ], "pop" : 701, "state" : "TX" } +{ "_id" : "79720", "city" : "VEALMOOR", "loc" : [ -101.467517, 32.241767 ], "pop" : 29733, "state" : "TX" } +{ "_id" : "79730", "city" : "COYANOSA", "loc" : [ -103.053815, 31.229547 ], "pop" : 341, "state" : "TX" } +{ "_id" : "79731", "city" : "CRANE", "loc" : [ -102.354382, 31.396949 ], "pop" : 4652, "state" : "TX" } +{ "_id" : "79734", "city" : "FORT DAVIS", "loc" : [ -103.936434, 30.613144 ], "pop" : 1607, "state" : "TX" } +{ "_id" : "79735", "city" : "FORT STOCKTON", "loc" : [ -102.879942, 30.890785 ], "pop" : 11755, "state" : "TX" } +{ "_id" : "79738", "city" : "GAIL", "loc" : [ -101.450032, 32.752334 ], "pop" : 799, "state" : "TX" } +{ "_id" : "79739", "city" : "GARDEN CITY", "loc" : [ -101.526912, 31.849078 ], "pop" : 1447, "state" : "TX" } +{ "_id" : "79741", "city" : "GOLDSMITH", "loc" : [ -102.625047, 31.95412 ], "pop" : 442, "state" : "TX" } +{ "_id" : "79742", "city" : "GRANDFALLS", "loc" : [ -102.856778, 31.345856 ], "pop" : 748, "state" : "TX" } +{ "_id" : "79743", "city" : "IMPERIAL", "loc" : [ -102.710918, 31.237264 ], "pop" : 557, "state" : "TX" } +{ "_id" : "79744", "city" : "IRAAN", "loc" : [ -101.915175, 30.915564 ], "pop" : 1596, "state" : "TX" } +{ "_id" : "79745", "city" : "KERMIT", "loc" : [ -103.091269, 31.85496 ], "pop" : 7370, "state" : "TX" } +{ "_id" : "79748", "city" : "KNOTT", "loc" : [ -101.651731, 32.412489 ], "pop" : 245, "state" : "TX" } +{ "_id" : "79749", "city" : "LENORAH", "loc" : [ -101.761137, 32.439157 ], "pop" : 529, "state" : "TX" } +{ "_id" : "79752", "city" : "MC CAMEY", "loc" : [ -102.215325, 31.131894 ], "pop" : 2950, "state" : "TX" } +{ "_id" : "79754", "city" : "MENTONE", "loc" : [ -103.550316, 31.738374 ], "pop" : 107, "state" : "TX" } +{ "_id" : "79755", "city" : "MIDKIFF", "loc" : [ -101.926913, 31.306761 ], "pop" : 1497, "state" : "TX" } +{ "_id" : "79756", "city" : "MONAHANS", "loc" : [ -102.900273, 31.581294 ], "pop" : 11296, "state" : "TX" } +{ "_id" : "79758", "city" : "GARDENDALE", "loc" : [ -102.357237, 32.024476 ], "pop" : 1536, "state" : "TX" } +{ "_id" : "79761", "city" : "ODESSA", "loc" : [ -102.352252, 31.857945 ], "pop" : 30126, "state" : "TX" } +{ "_id" : "79762", "city" : "ODESSA", "loc" : [ -102.354806, 31.889029 ], "pop" : 34327, "state" : "TX" } +{ "_id" : "79763", "city" : "ODESSA", "loc" : [ -102.416179, 31.834085 ], "pop" : 30550, "state" : "TX" } +{ "_id" : "79764", "city" : "ODESSA", "loc" : [ -102.437465, 31.876683 ], "pop" : 17919, "state" : "TX" } +{ "_id" : "79765", "city" : "ODESSA", "loc" : [ -102.394403, 31.937548 ], "pop" : 2240, "state" : "TX" } +{ "_id" : "79766", "city" : "ODESSA", "loc" : [ -102.344863, 31.782683 ], "pop" : 1794, "state" : "TX" } +{ "_id" : "79772", "city" : "VERHALEN", "loc" : [ -103.508129, 31.414384 ], "pop" : 14197, "state" : "TX" } +{ "_id" : "79777", "city" : "PYOTE", "loc" : [ -103.139676, 31.539491 ], "pop" : 370, "state" : "TX" } +{ "_id" : "79781", "city" : "SHEFFIELD", "loc" : [ -101.859963, 30.693549 ], "pop" : 428, "state" : "TX" } +{ "_id" : "79782", "city" : "STANTON", "loc" : [ -101.809887, 32.139992 ], "pop" : 3776, "state" : "TX" } +{ "_id" : "79783", "city" : "TARZAN", "loc" : [ -101.960723, 32.357523 ], "pop" : 643, "state" : "TX" } +{ "_id" : "79789", "city" : "WINK", "loc" : [ -103.156084, 31.752673 ], "pop" : 1256, "state" : "TX" } +{ "_id" : "79821", "city" : "ANTHONY", "loc" : [ -106.597625, 31.990718 ], "pop" : 3341, "state" : "TX" } +{ "_id" : "79830", "city" : "ALPINE", "loc" : [ -103.654089, 30.263111 ], "pop" : 7648, "state" : "TX" } +{ "_id" : "79834", "city" : "BIG BEND NATIONA", "loc" : [ -103.330626, 29.147657 ], "pop" : 249, "state" : "TX" } +{ "_id" : "79835", "city" : "CANUTILLO", "loc" : [ -106.592888, 31.934379 ], "pop" : 8585, "state" : "TX" } +{ "_id" : "79836", "city" : "CLINT", "loc" : [ -106.20383, 31.549418 ], "pop" : 17337, "state" : "TX" } +{ "_id" : "79837", "city" : "DELL CITY", "loc" : [ -105.209902, 31.923975 ], "pop" : 915, "state" : "TX" } +{ "_id" : "79839", "city" : "FORT HANCOCK", "loc" : [ -105.823448, 31.296887 ], "pop" : 1108, "state" : "TX" } +{ "_id" : "79842", "city" : "MARATHON", "loc" : [ -103.221397, 30.18858 ], "pop" : 725, "state" : "TX" } +{ "_id" : "79843", "city" : "MARFA", "loc" : [ -104.084835, 30.292982 ], "pop" : 3155, "state" : "TX" } +{ "_id" : "79845", "city" : "PRESIDIO", "loc" : [ -104.35511, 29.557302 ], "pop" : 3482, "state" : "TX" } +{ "_id" : "79847", "city" : "SALT FLAT", "loc" : [ -104.611467, 31.359027 ], "pop" : 317, "state" : "TX" } +{ "_id" : "79851", "city" : "SIERRA BLANCA", "loc" : [ -105.321874, 31.193821 ], "pop" : 892, "state" : "TX" } +{ "_id" : "79852", "city" : "TERLINGUA", "loc" : [ -103.559671, 29.31648 ], "pop" : 59, "state" : "TX" } +{ "_id" : "79854", "city" : "VALENTINE", "loc" : [ -104.481096, 30.620043 ], "pop" : 339, "state" : "TX" } +{ "_id" : "79855", "city" : "KENT", "loc" : [ -104.832249, 31.042879 ], "pop" : 3090, "state" : "TX" } +{ "_id" : "79901", "city" : "EL PASO", "loc" : [ -106.478311, 31.758411 ], "pop" : 17467, "state" : "TX" } +{ "_id" : "79902", "city" : "EL PASO", "loc" : [ -106.493165, 31.776317 ], "pop" : 26404, "state" : "TX" } +{ "_id" : "79903", "city" : "EL PASO", "loc" : [ -106.440569, 31.786213 ], "pop" : 20768, "state" : "TX" } +{ "_id" : "79904", "city" : "EL PASO", "loc" : [ -106.438135, 31.853334 ], "pop" : 35732, "state" : "TX" } +{ "_id" : "79905", "city" : "EL PASO", "loc" : [ -106.430445, 31.767447 ], "pop" : 32865, "state" : "TX" } +{ "_id" : "79906", "city" : "FORT BLISS", "loc" : [ -106.421611, 31.807631 ], "pop" : 11364, "state" : "TX" } +{ "_id" : "79907", "city" : "EL PASO", "loc" : [ -106.329281, 31.708908 ], "pop" : 58052, "state" : "TX" } +{ "_id" : "79908", "city" : "FORT BLISS", "loc" : [ -106.386711, 31.82753 ], "pop" : 2918, "state" : "TX" } +{ "_id" : "79912", "city" : "EL PASO", "loc" : [ -106.536433, 31.838309 ], "pop" : 46537, "state" : "TX" } +{ "_id" : "79915", "city" : "EL PASO", "loc" : [ -106.368605, 31.743234 ], "pop" : 46356, "state" : "TX" } +{ "_id" : "79916", "city" : "FORT BLISS", "loc" : [ -106.159157, 31.794873 ], "pop" : 6703, "state" : "TX" } +{ "_id" : "79922", "city" : "EL PASO", "loc" : [ -106.573176, 31.821767 ], "pop" : 8540, "state" : "TX" } +{ "_id" : "79924", "city" : "EL PASO", "loc" : [ -106.414857, 31.902098 ], "pop" : 57215, "state" : "TX" } +{ "_id" : "79925", "city" : "EL PASO", "loc" : [ -106.361317, 31.781402 ], "pop" : 41235, "state" : "TX" } +{ "_id" : "79927", "city" : "HORIZON CITY", "loc" : [ -106.273064, 31.653014 ], "pop" : 30011, "state" : "TX" } +{ "_id" : "79930", "city" : "EL PASO", "loc" : [ -106.456754, 31.804795 ], "pop" : 29792, "state" : "TX" } +{ "_id" : "79932", "city" : "EL PASO", "loc" : [ -106.593186, 31.862334 ], "pop" : 14909, "state" : "TX" } +{ "_id" : "79934", "city" : "EL PASO", "loc" : [ -106.407328, 31.938585 ], "pop" : 2983, "state" : "TX" } +{ "_id" : "79935", "city" : "EL PASO", "loc" : [ -106.330258, 31.771847 ], "pop" : 20465, "state" : "TX" } +{ "_id" : "79936", "city" : "EL PASO", "loc" : [ -106.30159, 31.767655 ], "pop" : 52031, "state" : "TX" } +{ "_id" : "80002", "city" : "ARVADA", "loc" : [ -105.098402, 39.794533 ], "pop" : 12065, "state" : "CO" } +{ "_id" : "80003", "city" : "ARVADA", "loc" : [ -105.065549, 39.828572 ], "pop" : 32980, "state" : "CO" } +{ "_id" : "80004", "city" : "ARVADA", "loc" : [ -105.11771, 39.814066 ], "pop" : 33260, "state" : "CO" } +{ "_id" : "80005", "city" : "ARVADA", "loc" : [ -105.109719, 39.842189 ], "pop" : 22613, "state" : "CO" } +{ "_id" : "80010", "city" : "AURORA", "loc" : [ -104.864618, 39.736788 ], "pop" : 27090, "state" : "CO" } +{ "_id" : "80011", "city" : "AURORA", "loc" : [ -104.815233, 39.737809 ], "pop" : 36021, "state" : "CO" } +{ "_id" : "80012", "city" : "AURORA", "loc" : [ -104.837693, 39.698672 ], "pop" : 37711, "state" : "CO" } +{ "_id" : "80013", "city" : "AURORA", "loc" : [ -104.784566, 39.657457 ], "pop" : 45335, "state" : "CO" } +{ "_id" : "80014", "city" : "AURORA", "loc" : [ -104.834954, 39.666171 ], "pop" : 31059, "state" : "CO" } +{ "_id" : "80015", "city" : "AURORA", "loc" : [ -104.787438, 39.62552 ], "pop" : 28161, "state" : "CO" } +{ "_id" : "80016", "city" : "AURORA", "loc" : [ -104.741734, 39.618713 ], "pop" : 4085, "state" : "CO" } +{ "_id" : "80017", "city" : "AURORA", "loc" : [ -104.788093, 39.694827 ], "pop" : 25910, "state" : "CO" } +{ "_id" : "80018", "city" : "AURORA", "loc" : [ -104.707102, 39.710179 ], "pop" : 321, "state" : "CO" } +{ "_id" : "80019", "city" : "AURORA", "loc" : [ -104.706906, 39.765608 ], "pop" : 46, "state" : "CO" } +{ "_id" : "80020", "city" : "BROOMFIELD", "loc" : [ -105.060902, 39.924513 ], "pop" : 31533, "state" : "CO" } +{ "_id" : "80021", "city" : "WESTMINSTER", "loc" : [ -105.102837, 39.875996 ], "pop" : 20461, "state" : "CO" } +{ "_id" : "80022", "city" : "COMMERCE CITY", "loc" : [ -104.911349, 39.825875 ], "pop" : 23205, "state" : "CO" } +{ "_id" : "80026", "city" : "LAFAYETTE", "loc" : [ -105.096346, 39.997964 ], "pop" : 17111, "state" : "CO" } +{ "_id" : "80027", "city" : "LOUISVILLE", "loc" : [ -105.145557, 39.978942 ], "pop" : 12612, "state" : "CO" } +{ "_id" : "80030", "city" : "WESTMINSTER", "loc" : [ -105.037086, 39.854238 ], "pop" : 43235, "state" : "CO" } +{ "_id" : "80033", "city" : "WHEAT RIDGE", "loc" : [ -105.096195, 39.774036 ], "pop" : 23040, "state" : "CO" } +{ "_id" : "80045", "city" : "AURORA", "loc" : [ -104.837954, 39.748014 ], "pop" : 1715, "state" : "CO" } +{ "_id" : "80101", "city" : "AGATE", "loc" : [ -103.984575, 39.420256 ], "pop" : 230, "state" : "CO" } +{ "_id" : "80102", "city" : "BENNETT", "loc" : [ -104.427284, 39.725398 ], "pop" : 3885, "state" : "CO" } +{ "_id" : "80103", "city" : "BYERS", "loc" : [ -104.201872, 39.698454 ], "pop" : 1448, "state" : "CO" } +{ "_id" : "80104", "city" : "CASTLE ROCK", "loc" : [ -104.860187, 39.39256 ], "pop" : 11763, "state" : "CO" } +{ "_id" : "80105", "city" : "DEER TRAIL", "loc" : [ -104.068003, 39.593121 ], "pop" : 634, "state" : "CO" } +{ "_id" : "80106", "city" : "ELBERT", "loc" : [ -104.574631, 39.096892 ], "pop" : 1808, "state" : "CO" } +{ "_id" : "80107", "city" : "ELIZABETH", "loc" : [ -104.591961, 39.383618 ], "pop" : 4973, "state" : "CO" } +{ "_id" : "80110", "city" : "CHERRY HILLS VIL", "loc" : [ -104.990022, 39.646027 ], "pop" : 40226, "state" : "CO" } +{ "_id" : "80111", "city" : "CHERRY HILLS VIL", "loc" : [ -104.882832, 39.610327 ], "pop" : 20230, "state" : "CO" } +{ "_id" : "80112", "city" : "ENGLEWOOD", "loc" : [ -104.901115, 39.58051 ], "pop" : 20210, "state" : "CO" } +{ "_id" : "80116", "city" : "FRANKTOWN", "loc" : [ -104.725569, 39.372841 ], "pop" : 3742, "state" : "CO" } +{ "_id" : "80117", "city" : "KIOWA", "loc" : [ -104.452263, 39.323972 ], "pop" : 680, "state" : "CO" } +{ "_id" : "80118", "city" : "LARKSPUR", "loc" : [ -104.854587, 39.201079 ], "pop" : 1424, "state" : "CO" } +{ "_id" : "80120", "city" : "LITTLETON", "loc" : [ -105.0044, 39.599426 ], "pop" : 24992, "state" : "CO" } +{ "_id" : "80121", "city" : "GREENWOOD VILLAG", "loc" : [ -104.957285, 39.605835 ], "pop" : 17238, "state" : "CO" } +{ "_id" : "80122", "city" : "LITTLETON", "loc" : [ -104.955673, 39.581418 ], "pop" : 31135, "state" : "CO" } +{ "_id" : "80123", "city" : "BOW MAR", "loc" : [ -105.07766, 39.596854 ], "pop" : 59418, "state" : "CO" } +{ "_id" : "80124", "city" : "LITTLETON", "loc" : [ -104.897204, 39.55061 ], "pop" : 5393, "state" : "CO" } +{ "_id" : "80125", "city" : "LITTLETON", "loc" : [ -105.056098, 39.484466 ], "pop" : 3230, "state" : "CO" } +{ "_id" : "80126", "city" : "HIGHLANDS RANCH", "loc" : [ -104.963751, 39.55134 ], "pop" : 13649, "state" : "CO" } +{ "_id" : "80127", "city" : "LITTLETON", "loc" : [ -105.132811, 39.591968 ], "pop" : 23204, "state" : "CO" } +{ "_id" : "80132", "city" : "MONUMENT", "loc" : [ -104.85416, 39.100726 ], "pop" : 7411, "state" : "CO" } +{ "_id" : "80133", "city" : "PALMER LAKE", "loc" : [ -104.914795, 39.120498 ], "pop" : 1237, "state" : "CO" } +{ "_id" : "80134", "city" : "PARKER", "loc" : [ -104.734904, 39.505466 ], "pop" : 19466, "state" : "CO" } +{ "_id" : "80135", "city" : "DECKERS", "loc" : [ -105.008305, 39.330109 ], "pop" : 3257, "state" : "CO" } +{ "_id" : "80136", "city" : "STRASBURG", "loc" : [ -104.268258, 39.781359 ], "pop" : 1197, "state" : "CO" } +{ "_id" : "80137", "city" : "WATKINS", "loc" : [ -104.583391, 39.762317 ], "pop" : 406, "state" : "CO" } +{ "_id" : "80202", "city" : "DENVER", "loc" : [ -104.994591, 39.749107 ], "pop" : 2816, "state" : "CO" } +{ "_id" : "80203", "city" : "DENVER", "loc" : [ -104.981111, 39.731285 ], "pop" : 15775, "state" : "CO" } +{ "_id" : "80204", "city" : "DENVER", "loc" : [ -105.025854, 39.734022 ], "pop" : 27439, "state" : "CO" } +{ "_id" : "80205", "city" : "DENVER", "loc" : [ -104.966141, 39.758993 ], "pop" : 24169, "state" : "CO" } +{ "_id" : "80206", "city" : "DENVER", "loc" : [ -104.9524, 39.733109 ], "pop" : 19145, "state" : "CO" } +{ "_id" : "80207", "city" : "DENVER", "loc" : [ -104.91771, 39.758425 ], "pop" : 20955, "state" : "CO" } +{ "_id" : "80209", "city" : "DENVER", "loc" : [ -104.968587, 39.707437 ], "pop" : 19691, "state" : "CO" } +{ "_id" : "80210", "city" : "DENVER", "loc" : [ -104.963124, 39.679003 ], "pop" : 30868, "state" : "CO" } +{ "_id" : "80211", "city" : "DENVER", "loc" : [ -105.020377, 39.766515 ], "pop" : 34679, "state" : "CO" } +{ "_id" : "80212", "city" : "MOUNTAIN VIEW", "loc" : [ -105.046979, 39.772396 ], "pop" : 17745, "state" : "CO" } +{ "_id" : "80214", "city" : "EDGEWATER", "loc" : [ -105.062036, 39.746931 ], "pop" : 13154, "state" : "CO" } +{ "_id" : "80215", "city" : "LAKEWOOD", "loc" : [ -105.102329, 39.744033 ], "pop" : 27556, "state" : "CO" } +{ "_id" : "80216", "city" : "DENVER", "loc" : [ -104.966946, 39.783469 ], "pop" : 9113, "state" : "CO" } +{ "_id" : "80218", "city" : "DENVER", "loc" : [ -104.971652, 39.732747 ], "pop" : 14916, "state" : "CO" } +{ "_id" : "80219", "city" : "DENVER", "loc" : [ -105.034134, 39.695624 ], "pop" : 48234, "state" : "CO" } +{ "_id" : "80220", "city" : "DENVER", "loc" : [ -104.912866, 39.7312 ], "pop" : 35520, "state" : "CO" } +{ "_id" : "80221", "city" : "FEDERAL HEIGHTS", "loc" : [ -105.007985, 39.840562 ], "pop" : 54069, "state" : "CO" } +{ "_id" : "80222", "city" : "GLENDALE", "loc" : [ -104.927992, 39.682803 ], "pop" : 28373, "state" : "CO" } +{ "_id" : "80223", "city" : "DENVER", "loc" : [ -105.002799, 39.700239 ], "pop" : 16692, "state" : "CO" } +{ "_id" : "80224", "city" : "DENVER", "loc" : [ -104.910778, 39.687995 ], "pop" : 14918, "state" : "CO" } +{ "_id" : "80226", "city" : "LAKEWOOD", "loc" : [ -105.066703, 39.712186 ], "pop" : 13675, "state" : "CO" } +{ "_id" : "80227", "city" : "DENVER", "loc" : [ -105.085359, 39.666746 ], "pop" : 26932, "state" : "CO" } +{ "_id" : "80228", "city" : "LAKEWOOD", "loc" : [ -105.143009, 39.696898 ], "pop" : 25008, "state" : "CO" } +{ "_id" : "80229", "city" : "THORNTON", "loc" : [ -104.961749, 39.860998 ], "pop" : 33512, "state" : "CO" } +{ "_id" : "80231", "city" : "DENVER", "loc" : [ -104.884326, 39.679324 ], "pop" : 35985, "state" : "CO" } +{ "_id" : "80232", "city" : "LAKEWOOD", "loc" : [ -105.094524, 39.697282 ], "pop" : 35087, "state" : "CO" } +{ "_id" : "80233", "city" : "NORTHGLENN", "loc" : [ -104.958257, 39.901222 ], "pop" : 30749, "state" : "CO" } +{ "_id" : "80234", "city" : "NORTHGLENN", "loc" : [ -105.004474, 39.905479 ], "pop" : 13350, "state" : "CO" } +{ "_id" : "80235", "city" : "DENVER", "loc" : [ -105.079466, 39.647175 ], "pop" : 5783, "state" : "CO" } +{ "_id" : "80236", "city" : "DENVER", "loc" : [ -105.037595, 39.653535 ], "pop" : 12979, "state" : "CO" } +{ "_id" : "80237", "city" : "DENVER", "loc" : [ -104.89866, 39.64314 ], "pop" : 14211, "state" : "CO" } +{ "_id" : "80239", "city" : "DENVER", "loc" : [ -104.828837, 39.787757 ], "pop" : 17622, "state" : "CO" } +{ "_id" : "80241", "city" : "NORTHGLENN", "loc" : [ -104.941809, 39.927792 ], "pop" : 10108, "state" : "CO" } +{ "_id" : "80249", "city" : "DENVER", "loc" : [ -104.75565, 39.778264 ], "pop" : 2740, "state" : "CO" } +{ "_id" : "80301", "city" : "BOULDER", "loc" : [ -105.21426, 40.049733 ], "pop" : 18174, "state" : "CO" } +{ "_id" : "80302", "city" : "BOULDER", "loc" : [ -105.285131, 40.017235 ], "pop" : 29384, "state" : "CO" } +{ "_id" : "80303", "city" : "BOULDER", "loc" : [ -105.239178, 39.991381 ], "pop" : 39860, "state" : "CO" } +{ "_id" : "80304", "city" : "BOULDER", "loc" : [ -105.277073, 40.037482 ], "pop" : 21550, "state" : "CO" } +{ "_id" : "80401", "city" : "GOLDEN", "loc" : [ -105.191528, 39.730548 ], "pop" : 32876, "state" : "CO" } +{ "_id" : "80403", "city" : "GOLDEN", "loc" : [ -105.282516, 39.823219 ], "pop" : 13159, "state" : "CO" } +{ "_id" : "80421", "city" : "BAILEY", "loc" : [ -105.469282, 39.448233 ], "pop" : 4448, "state" : "CO" } +{ "_id" : "80422", "city" : "BLACK HAWK", "loc" : [ -105.503991, 39.801105 ], "pop" : 551, "state" : "CO" } +{ "_id" : "80423", "city" : "BOND", "loc" : [ -106.676273, 39.869119 ], "pop" : 149, "state" : "CO" } +{ "_id" : "80428", "city" : "CLARK", "loc" : [ -106.921482, 40.726783 ], "pop" : 455, "state" : "CO" } +{ "_id" : "80429", "city" : "CLIMAX", "loc" : [ -106.258027, 39.298804 ], "pop" : 346, "state" : "CO" } +{ "_id" : "80430", "city" : "COALMONT", "loc" : [ -106.532134, 40.538252 ], "pop" : 88, "state" : "CO" } +{ "_id" : "80433", "city" : "CONIFER", "loc" : [ -105.316873, 39.519735 ], "pop" : 5919, "state" : "CO" } +{ "_id" : "80435", "city" : "KEYSTONE", "loc" : [ -106.057345, 39.574827 ], "pop" : 12881, "state" : "CO" } +{ "_id" : "80439", "city" : "EVERGREEN", "loc" : [ -105.340248, 39.637405 ], "pop" : 19250, "state" : "CO" } +{ "_id" : "80440", "city" : "FAIRPLAY", "loc" : [ -105.999416, 39.225617 ], "pop" : 1030, "state" : "CO" } +{ "_id" : "80441", "city" : "FOXTON", "loc" : [ -105.24815, 39.372056 ], "pop" : 127, "state" : "CO" } +{ "_id" : "80446", "city" : "GRANBY", "loc" : [ -105.889916, 40.012834 ], "pop" : 4839, "state" : "CO" } +{ "_id" : "80447", "city" : "GRAND LAKE", "loc" : [ -105.860488, 40.228862 ], "pop" : 1202, "state" : "CO" } +{ "_id" : "80452", "city" : "IDAHO SPRINGS", "loc" : [ -105.598261, 39.740192 ], "pop" : 5113, "state" : "CO" } +{ "_id" : "80455", "city" : "JAMESTOWN", "loc" : [ -105.418971, 40.10056 ], "pop" : 654, "state" : "CO" } +{ "_id" : "80456", "city" : "JEFFERSON", "loc" : [ -105.78633, 39.300926 ], "pop" : 157, "state" : "CO" } +{ "_id" : "80459", "city" : "KREMMLING", "loc" : [ -106.395472, 40.063224 ], "pop" : 1580, "state" : "CO" } +{ "_id" : "80461", "city" : "LEADVILLE", "loc" : [ -106.301545, 39.249742 ], "pop" : 5544, "state" : "CO" } +{ "_id" : "80463", "city" : "MC COY", "loc" : [ -106.730906, 39.913377 ], "pop" : 61, "state" : "CO" } +{ "_id" : "80465", "city" : "MORRISON", "loc" : [ -105.174641, 39.612452 ], "pop" : 13657, "state" : "CO" } +{ "_id" : "80466", "city" : "NEDERLAND", "loc" : [ -105.481265, 39.970259 ], "pop" : 2621, "state" : "CO" } +{ "_id" : "80467", "city" : "OAK CREEK", "loc" : [ -106.929621, 40.256733 ], "pop" : 1135, "state" : "CO" } +{ "_id" : "80468", "city" : "PARSHALL", "loc" : [ -106.225492, 40.053765 ], "pop" : 345, "state" : "CO" } +{ "_id" : "80470", "city" : "PINE", "loc" : [ -105.374116, 39.46667 ], "pop" : 2827, "state" : "CO" } +{ "_id" : "80471", "city" : "PINECLIFFE", "loc" : [ -105.354004, 39.942898 ], "pop" : 225, "state" : "CO" } +{ "_id" : "80474", "city" : "ROLLINSVILLE", "loc" : [ -105.472596, 39.910757 ], "pop" : 343, "state" : "CO" } +{ "_id" : "80479", "city" : "TOPONAS", "loc" : [ -106.908172, 40.119601 ], "pop" : 697, "state" : "CO" } +{ "_id" : "80480", "city" : "WALDEN", "loc" : [ -106.276728, 40.709978 ], "pop" : 1517, "state" : "CO" } +{ "_id" : "80481", "city" : "WARD", "loc" : [ -105.508023, 40.072572 ], "pop" : 159, "state" : "CO" } +{ "_id" : "80487", "city" : "STEAMBOAT SPRING", "loc" : [ -106.8457, 40.474124 ], "pop" : 9773, "state" : "CO" } +{ "_id" : "80501", "city" : "LONGMONT", "loc" : [ -105.10095, 40.177921 ], "pop" : 47166, "state" : "CO" } +{ "_id" : "80503", "city" : "LONGMONT", "loc" : [ -105.162432, 40.15588 ], "pop" : 16814, "state" : "CO" } +{ "_id" : "80504", "city" : "LONGMONT", "loc" : [ -104.950446, 40.130615 ], "pop" : 3716, "state" : "CO" } +{ "_id" : "80510", "city" : "ALLENSPARK", "loc" : [ -105.520064, 40.226775 ], "pop" : 183, "state" : "CO" } +{ "_id" : "80512", "city" : "BELLVUE", "loc" : [ -105.260977, 40.626528 ], "pop" : 1982, "state" : "CO" } +{ "_id" : "80513", "city" : "BERTHOUD", "loc" : [ -105.105459, 40.299333 ], "pop" : 6886, "state" : "CO" } +{ "_id" : "80514", "city" : "DACONO", "loc" : [ -104.929705, 40.08361 ], "pop" : 2223, "state" : "CO" } +{ "_id" : "80515", "city" : "DRAKE", "loc" : [ -105.296925, 40.443257 ], "pop" : 721, "state" : "CO" } +{ "_id" : "80516", "city" : "ERIE", "loc" : [ -105.068583, 40.059746 ], "pop" : 304, "state" : "CO" } +{ "_id" : "80517", "city" : "ESTES PARK", "loc" : [ -105.514163, 40.365761 ], "pop" : 6428, "state" : "CO" } +{ "_id" : "80521", "city" : "FORT COLLINS", "loc" : [ -105.103884, 40.581293 ], "pop" : 30059, "state" : "CO" } +{ "_id" : "80524", "city" : "FORT COLLINS", "loc" : [ -105.05811, 40.59865 ], "pop" : 21204, "state" : "CO" } +{ "_id" : "80525", "city" : "FORT COLLINS", "loc" : [ -105.054715, 40.538354 ], "pop" : 31263, "state" : "CO" } +{ "_id" : "80526", "city" : "FORT COLLINS", "loc" : [ -105.107646, 40.547294 ], "pop" : 29180, "state" : "CO" } +{ "_id" : "80534", "city" : "JOHNSTOWN", "loc" : [ -104.923558, 40.335526 ], "pop" : 2601, "state" : "CO" } +{ "_id" : "80535", "city" : "LAPORTE", "loc" : [ -105.148757, 40.634683 ], "pop" : 2300, "state" : "CO" } +{ "_id" : "80536", "city" : "VIRGINIA DALE", "loc" : [ -105.367745, 40.779878 ], "pop" : 513, "state" : "CO" } +{ "_id" : "80537", "city" : "LOVELAND", "loc" : [ -105.09164, 40.384917 ], "pop" : 24502, "state" : "CO" } +{ "_id" : "80538", "city" : "LOVELAND", "loc" : [ -105.089985, 40.426239 ], "pop" : 26449, "state" : "CO" } +{ "_id" : "80540", "city" : "LYONS", "loc" : [ -105.323071, 40.235715 ], "pop" : 3696, "state" : "CO" } +{ "_id" : "80543", "city" : "MILLIKEN", "loc" : [ -104.876137, 40.310656 ], "pop" : 2632, "state" : "CO" } +{ "_id" : "80545", "city" : "RED FEATHER LAKE", "loc" : [ -105.624455, 40.796451 ], "pop" : 440, "state" : "CO" } +{ "_id" : "80549", "city" : "WELLINGTON", "loc" : [ -105.031844, 40.725525 ], "pop" : 3309, "state" : "CO" } +{ "_id" : "80550", "city" : "WINDSOR", "loc" : [ -104.899442, 40.483663 ], "pop" : 6724, "state" : "CO" } +{ "_id" : "80601", "city" : "LOCHBUI", "loc" : [ -104.810278, 39.980553 ], "pop" : 20533, "state" : "CO" } +{ "_id" : "80610", "city" : "AULT", "loc" : [ -104.735629, 40.593772 ], "pop" : 2684, "state" : "CO" } +{ "_id" : "80611", "city" : "BRIGGSDALE", "loc" : [ -104.28707, 40.639192 ], "pop" : 259, "state" : "CO" } +{ "_id" : "80612", "city" : "CARR", "loc" : [ -104.885865, 40.866551 ], "pop" : 94, "state" : "CO" } +{ "_id" : "80615", "city" : "EATON", "loc" : [ -104.714559, 40.527272 ], "pop" : 2902, "state" : "CO" } +{ "_id" : "80620", "city" : "EVANS", "loc" : [ -104.697095, 40.380255 ], "pop" : 6262, "state" : "CO" } +{ "_id" : "80621", "city" : "WATTENBURG", "loc" : [ -104.865639, 40.078876 ], "pop" : 12913, "state" : "CO" } +{ "_id" : "80622", "city" : "GALETON", "loc" : [ -104.597254, 40.515034 ], "pop" : 360, "state" : "CO" } +{ "_id" : "80624", "city" : "GILL", "loc" : [ -104.499995, 40.469586 ], "pop" : 130, "state" : "CO" } +{ "_id" : "80631", "city" : "GARDEN CITY", "loc" : [ -104.704756, 40.413968 ], "pop" : 53905, "state" : "CO" } +{ "_id" : "80634", "city" : "GREELEY", "loc" : [ -104.754113, 40.410947 ], "pop" : 14100, "state" : "CO" } +{ "_id" : "80640", "city" : "HENDERSON", "loc" : [ -104.871834, 39.898304 ], "pop" : 1388, "state" : "CO" } +{ "_id" : "80642", "city" : "HUDSON", "loc" : [ -104.653208, 40.060555 ], "pop" : 2369, "state" : "CO" } +{ "_id" : "80643", "city" : "KEENESBURG", "loc" : [ -104.446366, 40.095847 ], "pop" : 1979, "state" : "CO" } +{ "_id" : "80644", "city" : "KERSEY", "loc" : [ -104.528768, 40.396305 ], "pop" : 2843, "state" : "CO" } +{ "_id" : "80645", "city" : "LA SALLE", "loc" : [ -104.726784, 40.321138 ], "pop" : 4455, "state" : "CO" } +{ "_id" : "80648", "city" : "NUNN", "loc" : [ -104.785012, 40.726483 ], "pop" : 505, "state" : "CO" } +{ "_id" : "80649", "city" : "ORCHARD", "loc" : [ -104.097325, 40.363946 ], "pop" : 277, "state" : "CO" } +{ "_id" : "80650", "city" : "PIERCE", "loc" : [ -104.763764, 40.635911 ], "pop" : 1020, "state" : "CO" } +{ "_id" : "80651", "city" : "PLATTEVILLE", "loc" : [ -104.802776, 40.213121 ], "pop" : 2577, "state" : "CO" } +{ "_id" : "80652", "city" : "ROGGEN", "loc" : [ -104.315747, 40.207445 ], "pop" : 150, "state" : "CO" } +{ "_id" : "80653", "city" : "WELDONA", "loc" : [ -103.967755, 40.368093 ], "pop" : 328, "state" : "CO" } +{ "_id" : "80654", "city" : "HOYT", "loc" : [ -104.052814, 40.205651 ], "pop" : 1746, "state" : "CO" } +{ "_id" : "80701", "city" : "FORT MORGAN", "loc" : [ -103.803119, 40.254084 ], "pop" : 13263, "state" : "CO" } +{ "_id" : "80720", "city" : "AKRON", "loc" : [ -103.225885, 40.180315 ], "pop" : 2559, "state" : "CO" } +{ "_id" : "80721", "city" : "AMHERST", "loc" : [ -102.170567, 40.682386 ], "pop" : 86, "state" : "CO" } +{ "_id" : "80722", "city" : "ATWOOD", "loc" : [ -103.039301, 40.517432 ], "pop" : 140, "state" : "CO" } +{ "_id" : "80723", "city" : "BRUSH", "loc" : [ -103.62788, 40.260255 ], "pop" : 5603, "state" : "CO" } +{ "_id" : "80726", "city" : "CROOK", "loc" : [ -102.847174, 40.874743 ], "pop" : 638, "state" : "CO" } +{ "_id" : "80727", "city" : "ECKLEY", "loc" : [ -102.482776, 40.113775 ], "pop" : 242, "state" : "CO" } +{ "_id" : "80728", "city" : "FLEMING", "loc" : [ -102.868821, 40.637019 ], "pop" : 853, "state" : "CO" } +{ "_id" : "80729", "city" : "GROVER", "loc" : [ -104.234613, 40.871635 ], "pop" : 492, "state" : "CO" } +{ "_id" : "80731", "city" : "HAXTUN", "loc" : [ -102.605175, 40.640587 ], "pop" : 1569, "state" : "CO" } +{ "_id" : "80733", "city" : "HILLROSE", "loc" : [ -103.541816, 40.307186 ], "pop" : 516, "state" : "CO" } +{ "_id" : "80734", "city" : "HOLYOKE", "loc" : [ -102.282545, 40.582542 ], "pop" : 2642, "state" : "CO" } +{ "_id" : "80735", "city" : "HALE", "loc" : [ -102.211563, 39.733147 ], "pop" : 393, "state" : "CO" } +{ "_id" : "80736", "city" : "ILIFF", "loc" : [ -103.096808, 40.769174 ], "pop" : 778, "state" : "CO" } +{ "_id" : "80737", "city" : "JULESBURG", "loc" : [ -102.257501, 40.97083 ], "pop" : 1712, "state" : "CO" } +{ "_id" : "80740", "city" : "LINDON", "loc" : [ -103.314471, 39.830849 ], "pop" : 136, "state" : "CO" } +{ "_id" : "80741", "city" : "WILLARD", "loc" : [ -103.34471, 40.511548 ], "pop" : 959, "state" : "CO" } +{ "_id" : "80742", "city" : "NEW RAYMER", "loc" : [ -103.838982, 40.685079 ], "pop" : 310, "state" : "CO" } +{ "_id" : "80743", "city" : "OTIS", "loc" : [ -102.939219, 40.202989 ], "pop" : 1102, "state" : "CO" } +{ "_id" : "80744", "city" : "OVID", "loc" : [ -102.387396, 40.945865 ], "pop" : 563, "state" : "CO" } +{ "_id" : "80745", "city" : "PADRONI", "loc" : [ -103.358163, 40.954911 ], "pop" : 72, "state" : "CO" } +{ "_id" : "80747", "city" : "PEETZ", "loc" : [ -103.116606, 40.95195 ], "pop" : 451, "state" : "CO" } +{ "_id" : "80749", "city" : "SEDGWICK", "loc" : [ -102.529122, 40.910317 ], "pop" : 415, "state" : "CO" } +{ "_id" : "80750", "city" : "SNYDER", "loc" : [ -103.597134, 40.330655 ], "pop" : 134, "state" : "CO" } +{ "_id" : "80751", "city" : "STERLING", "loc" : [ -103.221183, 40.63062 ], "pop" : 13524, "state" : "CO" } +{ "_id" : "80754", "city" : "STONEHAM", "loc" : [ -103.638687, 40.686994 ], "pop" : 141, "state" : "CO" } +{ "_id" : "80755", "city" : "VERNON", "loc" : [ -102.319343, 39.933127 ], "pop" : 318, "state" : "CO" } +{ "_id" : "80757", "city" : "LAST CHANCE", "loc" : [ -103.578033, 39.938105 ], "pop" : 265, "state" : "CO" } +{ "_id" : "80758", "city" : "LAIRD", "loc" : [ -102.233751, 40.104917 ], "pop" : 3396, "state" : "CO" } +{ "_id" : "80759", "city" : "YUMA", "loc" : [ -102.707174, 40.130063 ], "pop" : 3811, "state" : "CO" } +{ "_id" : "80801", "city" : "ANTON", "loc" : [ -103.434296, 39.686527 ], "pop" : 240, "state" : "CO" } +{ "_id" : "80802", "city" : "ARAPAHOE", "loc" : [ -102.19401, 38.841716 ], "pop" : 335, "state" : "CO" } +{ "_id" : "80804", "city" : "ARRIBA", "loc" : [ -103.270968, 39.30253 ], "pop" : 388, "state" : "CO" } +{ "_id" : "80805", "city" : "BETHUNE", "loc" : [ -102.428142, 39.344771 ], "pop" : 543, "state" : "CO" } +{ "_id" : "80807", "city" : "BURLINGTON", "loc" : [ -102.258281, 39.310649 ], "pop" : 3982, "state" : "CO" } +{ "_id" : "80808", "city" : "CALHAN", "loc" : [ -104.355274, 38.964773 ], "pop" : 2955, "state" : "CO" } +{ "_id" : "80809", "city" : "NORTH POLE", "loc" : [ -104.993684, 38.921314 ], "pop" : 2259, "state" : "CO" } +{ "_id" : "80810", "city" : "CHEYENNE WELLS", "loc" : [ -102.358173, 38.819762 ], "pop" : 1364, "state" : "CO" } +{ "_id" : "80812", "city" : "COPE", "loc" : [ -102.988098, 39.746227 ], "pop" : 626, "state" : "CO" } +{ "_id" : "80814", "city" : "DIVIDE", "loc" : [ -105.19937, 38.957622 ], "pop" : 1675, "state" : "CO" } +{ "_id" : "80815", "city" : "FLAGLER", "loc" : [ -103.062395, 39.312654 ], "pop" : 854, "state" : "CO" } +{ "_id" : "80816", "city" : "FLORISSANT", "loc" : [ -105.226106, 38.827669 ], "pop" : 2480, "state" : "CO" } +{ "_id" : "80817", "city" : "FOUNTAIN", "loc" : [ -104.700469, 38.699563 ], "pop" : 11570, "state" : "CO" } +{ "_id" : "80818", "city" : "GENOA", "loc" : [ -103.460689, 39.338328 ], "pop" : 320, "state" : "CO" } +{ "_id" : "80820", "city" : "GUFFEY", "loc" : [ -105.57835, 38.814584 ], "pop" : 300, "state" : "CO" } +{ "_id" : "80821", "city" : "HUGO", "loc" : [ -103.498971, 39.084318 ], "pop" : 1064, "state" : "CO" } +{ "_id" : "80822", "city" : "JOES", "loc" : [ -102.615134, 39.672771 ], "pop" : 315, "state" : "CO" } +{ "_id" : "80823", "city" : "KARVAL", "loc" : [ -103.500613, 38.71194 ], "pop" : 339, "state" : "CO" } +{ "_id" : "80824", "city" : "KIRK", "loc" : [ -102.477554, 39.617072 ], "pop" : 479, "state" : "CO" } +{ "_id" : "80825", "city" : "KIT CARSON", "loc" : [ -102.819842, 38.803984 ], "pop" : 698, "state" : "CO" } +{ "_id" : "80827", "city" : "LAKE GEORGE", "loc" : [ -105.434654, 39.034233 ], "pop" : 587, "state" : "CO" } +{ "_id" : "80828", "city" : "LIMON", "loc" : [ -103.685572, 39.27126 ], "pop" : 2244, "state" : "CO" } +{ "_id" : "80829", "city" : "MANITOU SPRINGS", "loc" : [ -104.905839, 38.854994 ], "pop" : 4989, "state" : "CO" } +{ "_id" : "80830", "city" : "MATHESON", "loc" : [ -103.913165, 39.132044 ], "pop" : 439, "state" : "CO" } +{ "_id" : "80831", "city" : "PEYTON", "loc" : [ -104.54722, 38.954097 ], "pop" : 3707, "state" : "CO" } +{ "_id" : "80832", "city" : "RAMAH", "loc" : [ -104.124733, 39.073571 ], "pop" : 561, "state" : "CO" } +{ "_id" : "80833", "city" : "RUSH", "loc" : [ -104.024065, 38.764248 ], "pop" : 408, "state" : "CO" } +{ "_id" : "80834", "city" : "SEIBERT", "loc" : [ -102.882184, 39.318329 ], "pop" : 364, "state" : "CO" } +{ "_id" : "80835", "city" : "SIMLA", "loc" : [ -104.086236, 39.146457 ], "pop" : 580, "state" : "CO" } +{ "_id" : "80836", "city" : "STRATTON", "loc" : [ -102.597928, 39.308733 ], "pop" : 1102, "state" : "CO" } +{ "_id" : "80840", "city" : "UNITED STATES AI", "loc" : [ -104.860139, 38.990448 ], "pop" : 9062, "state" : "CO" } +{ "_id" : "80861", "city" : "VONA", "loc" : [ -102.739287, 39.323564 ], "pop" : 295, "state" : "CO" } +{ "_id" : "80863", "city" : "WOODLAND PARK", "loc" : [ -105.062292, 38.996929 ], "pop" : 8272, "state" : "CO" } +{ "_id" : "80864", "city" : "YODER", "loc" : [ -104.218353, 38.775252 ], "pop" : 511, "state" : "CO" } +{ "_id" : "80903", "city" : "COLORADO SPRINGS", "loc" : [ -104.814466, 38.838832 ], "pop" : 13972, "state" : "CO" } +{ "_id" : "80904", "city" : "COLORADO SPRINGS", "loc" : [ -104.859513, 38.853318 ], "pop" : 17366, "state" : "CO" } +{ "_id" : "80905", "city" : "COLORADO SPRINGS", "loc" : [ -104.836997, 38.837692 ], "pop" : 3435, "state" : "CO" } +{ "_id" : "80906", "city" : "COLORADO SPRINGS", "loc" : [ -104.819893, 38.790164 ], "pop" : 38856, "state" : "CO" } +{ "_id" : "80907", "city" : "COLORADO SPRINGS", "loc" : [ -104.817034, 38.876001 ], "pop" : 25123, "state" : "CO" } +{ "_id" : "80908", "city" : "COLORADO SPRINGS", "loc" : [ -104.693331, 39.023745 ], "pop" : 6803, "state" : "CO" } +{ "_id" : "80909", "city" : "COLORADO SPRINGS", "loc" : [ -104.773483, 38.852038 ], "pop" : 34887, "state" : "CO" } +{ "_id" : "80910", "city" : "COLORADO SPRINGS", "loc" : [ -104.770299, 38.815164 ], "pop" : 24867, "state" : "CO" } +{ "_id" : "80911", "city" : "COLORADO SPRINGS", "loc" : [ -104.722322, 38.745665 ], "pop" : 22116, "state" : "CO" } +{ "_id" : "80913", "city" : "FORT CARSON", "loc" : [ -104.782218, 38.741967 ], "pop" : 11309, "state" : "CO" } +{ "_id" : "80914", "city" : "CHEYENNE MTN AFB", "loc" : [ -104.719052, 38.784241 ], "pop" : 0, "state" : "CO" } +{ "_id" : "80915", "city" : "COLORADO SPRINGS", "loc" : [ -104.713422, 38.855845 ], "pop" : 18209, "state" : "CO" } +{ "_id" : "80916", "city" : "COLORADO SPRINGS", "loc" : [ -104.74034, 38.807619 ], "pop" : 26402, "state" : "CO" } +{ "_id" : "80917", "city" : "COLORADO SPRINGS", "loc" : [ -104.739904, 38.886027 ], "pop" : 27664, "state" : "CO" } +{ "_id" : "80918", "city" : "COLORADO SPRINGS", "loc" : [ -104.773444, 38.912924 ], "pop" : 36410, "state" : "CO" } +{ "_id" : "80919", "city" : "COLORADO SPRINGS", "loc" : [ -104.84642, 38.926795 ], "pop" : 17468, "state" : "CO" } +{ "_id" : "80920", "city" : "COLORADO SPRINGS", "loc" : [ -104.766951, 38.949732 ], "pop" : 16907, "state" : "CO" } +{ "_id" : "80921", "city" : "COLORADO SPRINGS", "loc" : [ -104.814042, 39.048674 ], "pop" : 3539, "state" : "CO" } +{ "_id" : "80922", "city" : "COLORADO SPRINGS", "loc" : [ -104.698161, 38.90503 ], "pop" : 1836, "state" : "CO" } +{ "_id" : "80925", "city" : "COLORADO SPRINGS", "loc" : [ -104.660087, 38.731329 ], "pop" : 2550, "state" : "CO" } +{ "_id" : "80926", "city" : "COLORADO SPRINGS", "loc" : [ -104.85051, 38.698073 ], "pop" : 1040, "state" : "CO" } +{ "_id" : "80928", "city" : "COLORADO SPRINGS", "loc" : [ -104.457043, 38.623261 ], "pop" : 273, "state" : "CO" } +{ "_id" : "80929", "city" : "COLORADO SPRINGS", "loc" : [ -104.607857, 38.796837 ], "pop" : 197, "state" : "CO" } +{ "_id" : "80930", "city" : "COLORADO SPRINGS", "loc" : [ -104.526924, 38.828926 ], "pop" : 484, "state" : "CO" } +{ "_id" : "81001", "city" : "PUEBLO", "loc" : [ -104.584828, 38.287876 ], "pop" : 28837, "state" : "CO" } +{ "_id" : "81003", "city" : "PUEBLO", "loc" : [ -104.62337, 38.284277 ], "pop" : 13461, "state" : "CO" } +{ "_id" : "81004", "city" : "PUEBLO", "loc" : [ -104.627829, 38.244063 ], "pop" : 25748, "state" : "CO" } +{ "_id" : "81005", "city" : "PUEBLO", "loc" : [ -104.660031, 38.235157 ], "pop" : 26273, "state" : "CO" } +{ "_id" : "81006", "city" : "PUEBLO", "loc" : [ -104.531834, 38.24465 ], "pop" : 12277, "state" : "CO" } +{ "_id" : "81007", "city" : "PUEBLO WEST", "loc" : [ -104.743264, 38.319975 ], "pop" : 4592, "state" : "CO" } +{ "_id" : "81008", "city" : "PUEBLO", "loc" : [ -104.628433, 38.313251 ], "pop" : 5953, "state" : "CO" } +{ "_id" : "81020", "city" : "AGUILAR", "loc" : [ -104.676926, 37.393304 ], "pop" : 928, "state" : "CO" } +{ "_id" : "81021", "city" : "ARLINGTON", "loc" : [ -103.369741, 38.40677 ], "pop" : 28, "state" : "CO" } +{ "_id" : "81022", "city" : "NORTH AVONDALE", "loc" : [ -104.359686, 38.211603 ], "pop" : 1483, "state" : "CO" } +{ "_id" : "81023", "city" : "BEULAH", "loc" : [ -104.97245, 38.083712 ], "pop" : 867, "state" : "CO" } +{ "_id" : "81025", "city" : "BOONE", "loc" : [ -104.25851, 38.264614 ], "pop" : 976, "state" : "CO" } +{ "_id" : "81026", "city" : "BRANDON", "loc" : [ -102.781906, 38.485133 ], "pop" : 1094, "state" : "CO" } +{ "_id" : "81027", "city" : "BRANSON", "loc" : [ -103.874115, 37.051775 ], "pop" : 140, "state" : "CO" } +{ "_id" : "81028", "city" : "BRISTOL", "loc" : [ -102.342642, 38.133184 ], "pop" : 256, "state" : "CO" } +{ "_id" : "81029", "city" : "CAMPO", "loc" : [ -102.546423, 37.119547 ], "pop" : 487, "state" : "CO" } +{ "_id" : "81036", "city" : "CHIVINGTON", "loc" : [ -102.50536, 38.444141 ], "pop" : 123, "state" : "CO" } +{ "_id" : "81039", "city" : "FOWLER", "loc" : [ -104.029908, 38.123071 ], "pop" : 1877, "state" : "CO" } +{ "_id" : "81040", "city" : "FARISITA", "loc" : [ -105.237397, 37.763753 ], "pop" : 428, "state" : "CO" } +{ "_id" : "81041", "city" : "GRANADA", "loc" : [ -102.32712, 38.054485 ], "pop" : 741, "state" : "CO" } +{ "_id" : "81043", "city" : "HARTMAN", "loc" : [ -102.186609, 38.145291 ], "pop" : 256, "state" : "CO" } +{ "_id" : "81044", "city" : "CADDOA", "loc" : [ -102.933145, 38.107347 ], "pop" : 263, "state" : "CO" } +{ "_id" : "81045", "city" : "HASWELL", "loc" : [ -103.150543, 38.447431 ], "pop" : 109, "state" : "CO" } +{ "_id" : "81047", "city" : "HOLLY", "loc" : [ -102.141466, 38.0205 ], "pop" : 1480, "state" : "CO" } +{ "_id" : "81049", "city" : "VILLEGREEN", "loc" : [ -103.358348, 37.331189 ], "pop" : 389, "state" : "CO" } +{ "_id" : "81050", "city" : "TIMPAS", "loc" : [ -103.549068, 37.991552 ], "pop" : 11742, "state" : "CO" } +{ "_id" : "81052", "city" : "LAMAR", "loc" : [ -102.619195, 38.084136 ], "pop" : 9903, "state" : "CO" } +{ "_id" : "81054", "city" : "DEORA", "loc" : [ -103.208492, 38.065514 ], "pop" : 4217, "state" : "CO" } +{ "_id" : "81055", "city" : "CUCHARA", "loc" : [ -105.012994, 37.498292 ], "pop" : 1234, "state" : "CO" } +{ "_id" : "81057", "city" : "MC CLAVE", "loc" : [ -102.816934, 38.150484 ], "pop" : 568, "state" : "CO" } +{ "_id" : "81058", "city" : "MANZANOLA", "loc" : [ -103.876602, 38.110861 ], "pop" : 961, "state" : "CO" } +{ "_id" : "81059", "city" : "DELHI", "loc" : [ -104.13074, 37.478533 ], "pop" : 237, "state" : "CO" } +{ "_id" : "81062", "city" : "OLNEY SPRINGS", "loc" : [ -103.941033, 38.201877 ], "pop" : 706, "state" : "CO" } +{ "_id" : "81063", "city" : "ORDWAY", "loc" : [ -103.800277, 38.209546 ], "pop" : 2692, "state" : "CO" } +{ "_id" : "81064", "city" : "UTLEYVILLE", "loc" : [ -102.893106, 37.355885 ], "pop" : 383, "state" : "CO" } +{ "_id" : "81067", "city" : "ROCKY FORD", "loc" : [ -103.725143, 38.049016 ], "pop" : 5946, "state" : "CO" } +{ "_id" : "81069", "city" : "RYE", "loc" : [ -104.886257, 37.937145 ], "pop" : 2369, "state" : "CO" } +{ "_id" : "81071", "city" : "TOWNER", "loc" : [ -102.295367, 38.462172 ], "pop" : 162, "state" : "CO" } +{ "_id" : "81073", "city" : "SPRINGFIELD", "loc" : [ -102.617322, 37.406727 ], "pop" : 1992, "state" : "CO" } +{ "_id" : "81076", "city" : "SUGAR CITY", "loc" : [ -103.655557, 38.244368 ], "pop" : 400, "state" : "CO" } +{ "_id" : "81081", "city" : "TRINCHERA", "loc" : [ -104.118354, 37.075662 ], "pop" : 21, "state" : "CO" } +{ "_id" : "81082", "city" : "JANSEN", "loc" : [ -104.500715, 37.175475 ], "pop" : 10978, "state" : "CO" } +{ "_id" : "81084", "city" : "LYCAN", "loc" : [ -102.320128, 37.57476 ], "pop" : 183, "state" : "CO" } +{ "_id" : "81087", "city" : "VILAS", "loc" : [ -102.44374, 37.373043 ], "pop" : 145, "state" : "CO" } +{ "_id" : "81089", "city" : "FARISTA", "loc" : [ -104.804301, 37.638159 ], "pop" : 4347, "state" : "CO" } +{ "_id" : "81090", "city" : "WALSH", "loc" : [ -102.253716, 37.352057 ], "pop" : 1366, "state" : "CO" } +{ "_id" : "81091", "city" : "WESTON", "loc" : [ -104.824749, 37.170211 ], "pop" : 1094, "state" : "CO" } +{ "_id" : "81092", "city" : "WILEY", "loc" : [ -102.714734, 38.158978 ], "pop" : 711, "state" : "CO" } +{ "_id" : "81101", "city" : "ALAMOSA", "loc" : [ -105.878602, 37.470274 ], "pop" : 12580, "state" : "CO" } +{ "_id" : "81120", "city" : "ANTONITO", "loc" : [ -106.037946, 37.085473 ], "pop" : 2246, "state" : "CO" } +{ "_id" : "81121", "city" : "ARBOLES", "loc" : [ -107.390749, 37.101633 ], "pop" : 587, "state" : "CO" } +{ "_id" : "81122", "city" : "BAYFIELD", "loc" : [ -107.613728, 37.260328 ], "pop" : 3866, "state" : "CO" } +{ "_id" : "81123", "city" : "BLANCA", "loc" : [ -105.517784, 37.431702 ], "pop" : 429, "state" : "CO" } +{ "_id" : "81125", "city" : "CENTER", "loc" : [ -106.090628, 37.734295 ], "pop" : 4419, "state" : "CO" } +{ "_id" : "81130", "city" : "CREEDE", "loc" : [ -106.927679, 37.816367 ], "pop" : 558, "state" : "CO" } +{ "_id" : "81132", "city" : "LA GARITA", "loc" : [ -106.350502, 37.671346 ], "pop" : 2791, "state" : "CO" } +{ "_id" : "81133", "city" : "FORT GARLAND", "loc" : [ -105.404879, 37.426978 ], "pop" : 725, "state" : "CO" } +{ "_id" : "81136", "city" : "HOOPER", "loc" : [ -105.871193, 37.723203 ], "pop" : 265, "state" : "CO" } +{ "_id" : "81137", "city" : "IGNACIO", "loc" : [ -107.639465, 37.126412 ], "pop" : 3494, "state" : "CO" } +{ "_id" : "81140", "city" : "LA JARA", "loc" : [ -106.005427, 37.290726 ], "pop" : 2274, "state" : "CO" } +{ "_id" : "81143", "city" : "MOFFAT", "loc" : [ -105.841051, 38.045195 ], "pop" : 737, "state" : "CO" } +{ "_id" : "81144", "city" : "MONTE VISTA", "loc" : [ -106.140833, 37.573095 ], "pop" : 6041, "state" : "CO" } +{ "_id" : "81146", "city" : "MOSCA", "loc" : [ -105.806866, 37.635796 ], "pop" : 399, "state" : "CO" } +{ "_id" : "81147", "city" : "PAGOSA SPRINGS", "loc" : [ -107.038497, 37.252345 ], "pop" : 4758, "state" : "CO" } +{ "_id" : "81149", "city" : "SAGUACHE", "loc" : [ -106.187592, 38.09775 ], "pop" : 895, "state" : "CO" } +{ "_id" : "81150", "city" : "SAN ACACIO", "loc" : [ -105.439949, 37.201347 ], "pop" : 1146, "state" : "CO" } +{ "_id" : "81151", "city" : "SANFORD", "loc" : [ -105.928588, 37.208724 ], "pop" : 3037, "state" : "CO" } +{ "_id" : "81152", "city" : "MESITA", "loc" : [ -105.575625, 37.05057 ], "pop" : 252, "state" : "CO" } +{ "_id" : "81153", "city" : "SAN PABLO", "loc" : [ -105.346196, 37.134872 ], "pop" : 638, "state" : "CO" } +{ "_id" : "81154", "city" : "SOUTH FORK", "loc" : [ -106.612451, 37.67248 ], "pop" : 722, "state" : "CO" } +{ "_id" : "81155", "city" : "VILLA GROVE", "loc" : [ -106.110183, 38.2952 ], "pop" : 53, "state" : "CO" } +{ "_id" : "81201", "city" : "SALIDA", "loc" : [ -105.997818, 38.525909 ], "pop" : 7658, "state" : "CO" } +{ "_id" : "81210", "city" : "ALMONT", "loc" : [ -106.627099, 38.64997 ], "pop" : 150, "state" : "CO" } +{ "_id" : "81211", "city" : "BUENA VISTA", "loc" : [ -106.147121, 38.838003 ], "pop" : 5220, "state" : "CO" } +{ "_id" : "81212", "city" : "CANON CITY", "loc" : [ -105.217829, 38.445074 ], "pop" : 23049, "state" : "CO" } +{ "_id" : "81220", "city" : "CIMARRON", "loc" : [ -107.482366, 38.387633 ], "pop" : 84, "state" : "CO" } +{ "_id" : "81224", "city" : "CRESTED BUTTE", "loc" : [ -106.961899, 38.869081 ], "pop" : 1750, "state" : "CO" } +{ "_id" : "81226", "city" : "FLORENCE", "loc" : [ -105.123233, 38.385016 ], "pop" : 4461, "state" : "CO" } +{ "_id" : "81228", "city" : "GRANITE", "loc" : [ -106.311417, 39.095294 ], "pop" : 79, "state" : "CO" } +{ "_id" : "81230", "city" : "GUNNISON", "loc" : [ -106.931013, 38.551056 ], "pop" : 7814, "state" : "CO" } +{ "_id" : "81233", "city" : "HOWARD", "loc" : [ -105.747124, 38.388519 ], "pop" : 485, "state" : "CO" } +{ "_id" : "81235", "city" : "LAKE CITY", "loc" : [ -107.302037, 37.986769 ], "pop" : 467, "state" : "CO" } +{ "_id" : "81236", "city" : "NATHROP", "loc" : [ -106.116576, 38.710343 ], "pop" : 440, "state" : "CO" } +{ "_id" : "81239", "city" : "PARLIN", "loc" : [ -106.677995, 38.508762 ], "pop" : 67, "state" : "CO" } +{ "_id" : "81240", "city" : "PENROSE", "loc" : [ -105.011325, 38.433622 ], "pop" : 3166, "state" : "CO" } +{ "_id" : "81241", "city" : "PITKIN", "loc" : [ -106.516774, 38.608542 ], "pop" : 53, "state" : "CO" } +{ "_id" : "81243", "city" : "POWDERHORN", "loc" : [ -107.108449, 38.282165 ], "pop" : 11, "state" : "CO" } +{ "_id" : "81251", "city" : "TWIN LAKES", "loc" : [ -106.435079, 39.090231 ], "pop" : 49, "state" : "CO" } +{ "_id" : "81252", "city" : "WESTCLIFFE", "loc" : [ -105.433154, 38.123023 ], "pop" : 1569, "state" : "CO" } +{ "_id" : "81253", "city" : "WETMORE", "loc" : [ -105.106441, 38.189857 ], "pop" : 357, "state" : "CO" } +{ "_id" : "81301", "city" : "DURANGO", "loc" : [ -107.861684, 37.287388 ], "pop" : 23506, "state" : "CO" } +{ "_id" : "81320", "city" : "CAHONE", "loc" : [ -108.579442, 37.69163 ], "pop" : 384, "state" : "CO" } +{ "_id" : "81321", "city" : "CORTEZ", "loc" : [ -108.583726, 37.354949 ], "pop" : 11937, "state" : "CO" } +{ "_id" : "81323", "city" : "DOLORES", "loc" : [ -108.471748, 37.466571 ], "pop" : 1770, "state" : "CO" } +{ "_id" : "81324", "city" : "DOVE CREEK", "loc" : [ -108.918147, 37.763199 ], "pop" : 1120, "state" : "CO" } +{ "_id" : "81325", "city" : "EGNAR", "loc" : [ -108.929889, 37.934448 ], "pop" : 119, "state" : "CO" } +{ "_id" : "81326", "city" : "HESPERUS", "loc" : [ -108.121917, 37.165368 ], "pop" : 1303, "state" : "CO" } +{ "_id" : "81327", "city" : "LEWIS", "loc" : [ -108.61891, 37.47101 ], "pop" : 1455, "state" : "CO" } +{ "_id" : "81328", "city" : "MANCOS", "loc" : [ -108.298242, 37.347133 ], "pop" : 2141, "state" : "CO" } +{ "_id" : "81331", "city" : "PLEASANT VIEW", "loc" : [ -108.809487, 37.588763 ], "pop" : 223, "state" : "CO" } +{ "_id" : "81334", "city" : "TOWAOC", "loc" : [ -108.719993, 37.208408 ], "pop" : 1135, "state" : "CO" } +{ "_id" : "81335", "city" : "YELLOW JACKET", "loc" : [ -108.785167, 37.499526 ], "pop" : 126, "state" : "CO" } +{ "_id" : "81401", "city" : "MONTROSE", "loc" : [ -107.875182, 38.46783 ], "pop" : 17834, "state" : "CO" } +{ "_id" : "81410", "city" : "AUSTIN", "loc" : [ -107.97384, 38.797544 ], "pop" : 1258, "state" : "CO" } +{ "_id" : "81411", "city" : "BEDROCK", "loc" : [ -108.953224, 38.384352 ], "pop" : 191, "state" : "CO" } +{ "_id" : "81413", "city" : "CEDAREDGE", "loc" : [ -107.926786, 38.911878 ], "pop" : 3254, "state" : "CO" } +{ "_id" : "81415", "city" : "CRAWFORD", "loc" : [ -107.614864, 38.69408 ], "pop" : 882, "state" : "CO" } +{ "_id" : "81416", "city" : "DELTA", "loc" : [ -108.060421, 38.734891 ], "pop" : 8644, "state" : "CO" } +{ "_id" : "81418", "city" : "ECKERT", "loc" : [ -107.962452, 38.844982 ], "pop" : 1211, "state" : "CO" } +{ "_id" : "81419", "city" : "HOTCHKISS", "loc" : [ -107.747173, 38.812417 ], "pop" : 2735, "state" : "CO" } +{ "_id" : "81422", "city" : "NATURITA", "loc" : [ -108.572836, 38.222559 ], "pop" : 554, "state" : "CO" } +{ "_id" : "81423", "city" : "NORWOOD", "loc" : [ -108.284472, 38.110406 ], "pop" : 1079, "state" : "CO" } +{ "_id" : "81424", "city" : "NUCLA", "loc" : [ -108.547644, 38.268219 ], "pop" : 1135, "state" : "CO" } +{ "_id" : "81425", "city" : "OLATHE", "loc" : [ -107.992118, 38.597575 ], "pop" : 4246, "state" : "CO" } +{ "_id" : "81426", "city" : "OPHIR", "loc" : [ -107.851961, 37.856197 ], "pop" : 138, "state" : "CO" } +{ "_id" : "81427", "city" : "OURAY", "loc" : [ -107.67261, 38.02576 ], "pop" : 686, "state" : "CO" } +{ "_id" : "81428", "city" : "PAONIA", "loc" : [ -107.598483, 38.864978 ], "pop" : 3314, "state" : "CO" } +{ "_id" : "81430", "city" : "PLACERVILLE", "loc" : [ -108.024775, 38.008759 ], "pop" : 467, "state" : "CO" } +{ "_id" : "81431", "city" : "REDVALE", "loc" : [ -108.389536, 38.186452 ], "pop" : 409, "state" : "CO" } +{ "_id" : "81432", "city" : "RIDGWAY", "loc" : [ -107.753341, 38.138074 ], "pop" : 1299, "state" : "CO" } +{ "_id" : "81433", "city" : "SILVERTON", "loc" : [ -107.666686, 37.808995 ], "pop" : 745, "state" : "CO" } +{ "_id" : "81434", "city" : "SOMERSET", "loc" : [ -107.378145, 38.946801 ], "pop" : 180, "state" : "CO" } +{ "_id" : "81435", "city" : "TELLURIDE", "loc" : [ -107.821371, 37.940028 ], "pop" : 1850, "state" : "CO" } +{ "_id" : "81501", "city" : "GRAND JUNCTION", "loc" : [ -108.545692, 39.078326 ], "pop" : 19665, "state" : "CO" } +{ "_id" : "81503", "city" : "GRAND JUNCTION", "loc" : [ -108.575609, 39.056777 ], "pop" : 20467, "state" : "CO" } +{ "_id" : "81504", "city" : "FRUITVALE", "loc" : [ -108.489094, 39.083136 ], "pop" : 16754, "state" : "CO" } +{ "_id" : "81505", "city" : "GRAND JUNCTION", "loc" : [ -108.596834, 39.107097 ], "pop" : 4877, "state" : "CO" } +{ "_id" : "81506", "city" : "GRAND JUNCTION", "loc" : [ -108.54911, 39.103209 ], "pop" : 7471, "state" : "CO" } +{ "_id" : "81520", "city" : "CLIFTON", "loc" : [ -108.449628, 39.0805 ], "pop" : 8408, "state" : "CO" } +{ "_id" : "81521", "city" : "FRUITA", "loc" : [ -108.721757, 39.163656 ], "pop" : 6230, "state" : "CO" } +{ "_id" : "81522", "city" : "GATEWAY", "loc" : [ -108.791344, 38.915136 ], "pop" : 752, "state" : "CO" } +{ "_id" : "81524", "city" : "LOMA", "loc" : [ -108.814902, 39.227896 ], "pop" : 1067, "state" : "CO" } +{ "_id" : "81525", "city" : "MACK", "loc" : [ -108.929597, 39.255367 ], "pop" : 176, "state" : "CO" } +{ "_id" : "81526", "city" : "PALISADE", "loc" : [ -108.367977, 39.103178 ], "pop" : 4366, "state" : "CO" } +{ "_id" : "81527", "city" : "WHITEWATER", "loc" : [ -108.399042, 38.974422 ], "pop" : 664, "state" : "CO" } +{ "_id" : "81601", "city" : "GLENWOOD SPRINGS", "loc" : [ -107.325188, 39.529607 ], "pop" : 9606, "state" : "CO" } +{ "_id" : "81610", "city" : "DINOSAUR", "loc" : [ -108.965184, 40.256609 ], "pop" : 498, "state" : "CO" } +{ "_id" : "81611", "city" : "ASPEN", "loc" : [ -106.823593, 39.195139 ], "pop" : 7431, "state" : "CO" } +{ "_id" : "81621", "city" : "BASALT", "loc" : [ -106.998752, 39.353466 ], "pop" : 3248, "state" : "CO" } +{ "_id" : "81623", "city" : "MARBLE", "loc" : [ -107.171012, 39.385431 ], "pop" : 9406, "state" : "CO" } +{ "_id" : "81624", "city" : "COLLBRAN", "loc" : [ -107.924945, 39.245267 ], "pop" : 1043, "state" : "CO" } +{ "_id" : "81625", "city" : "CRAIG", "loc" : [ -107.561458, 40.522351 ], "pop" : 10242, "state" : "CO" } +{ "_id" : "81630", "city" : "DE BEQUE", "loc" : [ -108.230405, 39.311764 ], "pop" : 464, "state" : "CO" } +{ "_id" : "81631", "city" : "EAGLE", "loc" : [ -106.75884, 39.634138 ], "pop" : 3368, "state" : "CO" } +{ "_id" : "81633", "city" : "ELK SPRINGS", "loc" : [ -108.419729, 40.414588 ], "pop" : 10, "state" : "CO" } +{ "_id" : "81635", "city" : "BATTLEMENT MESA", "loc" : [ -108.038038, 39.440729 ], "pop" : 2602, "state" : "CO" } +{ "_id" : "81637", "city" : "GYPSUM", "loc" : [ -106.967083, 39.661848 ], "pop" : 2593, "state" : "CO" } +{ "_id" : "81638", "city" : "HAMILTON", "loc" : [ -107.584089, 40.32504 ], "pop" : 191, "state" : "CO" } +{ "_id" : "81639", "city" : "HAYDEN", "loc" : [ -107.257055, 40.494487 ], "pop" : 2028, "state" : "CO" } +{ "_id" : "81640", "city" : "MAYBELL", "loc" : [ -108.272264, 40.650649 ], "pop" : 351, "state" : "CO" } +{ "_id" : "81641", "city" : "MEEKER", "loc" : [ -107.892498, 40.038726 ], "pop" : 3094, "state" : "CO" } +{ "_id" : "81642", "city" : "MEREDITH", "loc" : [ -106.67823, 39.335348 ], "pop" : 76, "state" : "CO" } +{ "_id" : "81643", "city" : "MESA", "loc" : [ -108.104401, 39.161161 ], "pop" : 741, "state" : "CO" } +{ "_id" : "81647", "city" : "NEW CASTLE", "loc" : [ -107.542758, 39.570922 ], "pop" : 2719, "state" : "CO" } +{ "_id" : "81648", "city" : "RANGELY", "loc" : [ -108.799148, 40.082844 ], "pop" : 2740, "state" : "CO" } +{ "_id" : "81650", "city" : "RIFLE", "loc" : [ -107.789804, 39.549073 ], "pop" : 7146, "state" : "CO" } +{ "_id" : "81652", "city" : "SILT", "loc" : [ -107.657411, 39.541464 ], "pop" : 2430, "state" : "CO" } +{ "_id" : "81653", "city" : "SLATER", "loc" : [ -107.497178, 40.947985 ], "pop" : 65, "state" : "CO" } +{ "_id" : "81654", "city" : "SNOWMASS", "loc" : [ -106.950839, 39.250059 ], "pop" : 2627, "state" : "CO" } +{ "_id" : "81657", "city" : "VAIL", "loc" : [ -106.463454, 39.623793 ], "pop" : 11449, "state" : "CO" } +{ "_id" : "82001", "city" : "CHEYENNE", "loc" : [ -104.796234, 41.143719 ], "pop" : 33107, "state" : "WY" } +{ "_id" : "82007", "city" : "CHEYENNE", "loc" : [ -104.810745, 41.108433 ], "pop" : 15050, "state" : "WY" } +{ "_id" : "82009", "city" : "CHEYENNE", "loc" : [ -104.802328, 41.183566 ], "pop" : 22028, "state" : "WY" } +{ "_id" : "82050", "city" : "ALBIN", "loc" : [ -104.150542, 41.434237 ], "pop" : 310, "state" : "WY" } +{ "_id" : "82051", "city" : "LARAMIE", "loc" : [ -105.819708, 41.562721 ], "pop" : 22, "state" : "WY" } +{ "_id" : "82052", "city" : "BUFORD", "loc" : [ -105.469697, 41.142115 ], "pop" : 97, "state" : "WY" } +{ "_id" : "82053", "city" : "BURNS", "loc" : [ -104.315521, 41.200297 ], "pop" : 1303, "state" : "WY" } +{ "_id" : "82054", "city" : "CARPENTER", "loc" : [ -104.276514, 41.042819 ], "pop" : 222, "state" : "WY" } +{ "_id" : "82055", "city" : "CENTENNIAL", "loc" : [ -105.99451, 41.339149 ], "pop" : 446, "state" : "WY" } +{ "_id" : "82058", "city" : "GARRETT", "loc" : [ -105.550534, 42.142015 ], "pop" : 120, "state" : "WY" } +{ "_id" : "82063", "city" : "JELM", "loc" : [ -105.925727, 41.145723 ], "pop" : 470, "state" : "WY" } +{ "_id" : "82070", "city" : "LARAMIE", "loc" : [ -105.581146, 41.312907 ], "pop" : 29327, "state" : "WY" } +{ "_id" : "82080", "city" : "MC FADDEN", "loc" : [ -106.137861, 41.6327 ], "pop" : 79, "state" : "WY" } +{ "_id" : "82081", "city" : "MERIDEN", "loc" : [ -104.286606, 41.54236 ], "pop" : 40, "state" : "WY" } +{ "_id" : "82082", "city" : "PINE BLUFFS", "loc" : [ -104.066591, 41.178799 ], "pop" : 1082, "state" : "WY" } +{ "_id" : "82083", "city" : "ROCK RIVER", "loc" : [ -105.974629, 41.746073 ], "pop" : 236, "state" : "WY" } +{ "_id" : "82084", "city" : "TIE SIDING", "loc" : [ -105.446222, 41.052785 ], "pop" : 19, "state" : "WY" } +{ "_id" : "82190", "city" : "FISHING BRIDGE", "loc" : [ -110.674366, 44.853913 ], "pop" : 443, "state" : "WY" } +{ "_id" : "82201", "city" : "WHEATLAND", "loc" : [ -104.967852, 42.049467 ], "pop" : 5952, "state" : "WY" } +{ "_id" : "82210", "city" : "CHUGWATER", "loc" : [ -104.817916, 41.748668 ], "pop" : 295, "state" : "WY" } +{ "_id" : "82212", "city" : "FORT LARAMIE", "loc" : [ -104.522595, 42.213314 ], "pop" : 325, "state" : "WY" } +{ "_id" : "82213", "city" : "GLENDO", "loc" : [ -105.000013, 42.500352 ], "pop" : 471, "state" : "WY" } +{ "_id" : "82214", "city" : "GUERNSEY", "loc" : [ -104.751164, 42.265513 ], "pop" : 1319, "state" : "WY" } +{ "_id" : "82215", "city" : "HARTVILLE", "loc" : [ -104.729564, 42.33339 ], "pop" : 108, "state" : "WY" } +{ "_id" : "82217", "city" : "HAWK SPRINGS", "loc" : [ -104.329498, 41.741481 ], "pop" : 125, "state" : "WY" } +{ "_id" : "82219", "city" : "JAY EM", "loc" : [ -104.311437, 42.357399 ], "pop" : 399, "state" : "WY" } +{ "_id" : "82220", "city" : "KEELINE", "loc" : [ -104.720277, 42.839062 ], "pop" : 209, "state" : "WY" } +{ "_id" : "82221", "city" : "LAGRANGE", "loc" : [ -104.19738, 41.642311 ], "pop" : 413, "state" : "WY" } +{ "_id" : "82222", "city" : "LANCE CREEK", "loc" : [ -104.544958, 43.231636 ], "pop" : 181, "state" : "WY" } +{ "_id" : "82223", "city" : "LINGLE", "loc" : [ -104.331992, 42.134624 ], "pop" : 714, "state" : "WY" } +{ "_id" : "82224", "city" : "LOST SPRINGS", "loc" : [ -104.920901, 42.729835 ], "pop" : 6, "state" : "WY" } +{ "_id" : "82225", "city" : "LUSK", "loc" : [ -104.465076, 42.765953 ], "pop" : 1724, "state" : "WY" } +{ "_id" : "82229", "city" : "SHAWNEE", "loc" : [ -105.032447, 42.839464 ], "pop" : 137, "state" : "WY" } +{ "_id" : "82240", "city" : "TORRINGTON", "loc" : [ -104.191662, 42.062377 ], "pop" : 9575, "state" : "WY" } +{ "_id" : "82242", "city" : "VAN TASSELL", "loc" : [ -104.315073, 42.830004 ], "pop" : 385, "state" : "WY" } +{ "_id" : "82243", "city" : "VETERAN", "loc" : [ -104.370899, 41.982091 ], "pop" : 148, "state" : "WY" } +{ "_id" : "82244", "city" : "YODER", "loc" : [ -104.353507, 41.912018 ], "pop" : 674, "state" : "WY" } +{ "_id" : "82301", "city" : "RAWLINS", "loc" : [ -107.234883, 41.795131 ], "pop" : 9914, "state" : "WY" } +{ "_id" : "82310", "city" : "JEFFREY CITY", "loc" : [ -107.872422, 42.540201 ], "pop" : 253, "state" : "WY" } +{ "_id" : "82321", "city" : "BAGGS", "loc" : [ -107.668733, 41.031191 ], "pop" : 384, "state" : "WY" } +{ "_id" : "82322", "city" : "BAIROIL", "loc" : [ -107.563288, 42.232721 ], "pop" : 236, "state" : "WY" } +{ "_id" : "82323", "city" : "DIXON", "loc" : [ -107.560354, 41.044631 ], "pop" : 253, "state" : "WY" } +{ "_id" : "82325", "city" : "ENCAMPMENT", "loc" : [ -106.780285, 41.205353 ], "pop" : 946, "state" : "WY" } +{ "_id" : "82327", "city" : "HANNA", "loc" : [ -106.528283, 41.87264 ], "pop" : 1585, "state" : "WY" } +{ "_id" : "82329", "city" : "MEDICINE BOW", "loc" : [ -106.201228, 41.903002 ], "pop" : 409, "state" : "WY" } +{ "_id" : "82331", "city" : "RYAN PARK", "loc" : [ -106.797538, 41.446293 ], "pop" : 2462, "state" : "WY" } +{ "_id" : "82332", "city" : "SAVERY", "loc" : [ -107.42338, 41.039485 ], "pop" : 97, "state" : "WY" } +{ "_id" : "82334", "city" : "SINCLAIR", "loc" : [ -107.109083, 41.779741 ], "pop" : 530, "state" : "WY" } +{ "_id" : "82336", "city" : "WAMSUTTER", "loc" : [ -108.151674, 41.658278 ], "pop" : 516, "state" : "WY" } +{ "_id" : "82401", "city" : "WORLAND", "loc" : [ -107.95626, 44.013796 ], "pop" : 7693, "state" : "WY" } +{ "_id" : "82410", "city" : "BASIN", "loc" : [ -108.043787, 44.378765 ], "pop" : 1580, "state" : "WY" } +{ "_id" : "82411", "city" : "BURLINGTON", "loc" : [ -108.432669, 44.444218 ], "pop" : 435, "state" : "WY" } +{ "_id" : "82414", "city" : "CODY", "loc" : [ -109.075611, 44.523135 ], "pop" : 11985, "state" : "WY" } +{ "_id" : "82421", "city" : "DEAVER", "loc" : [ -108.597948, 44.925695 ], "pop" : 499, "state" : "WY" } +{ "_id" : "82426", "city" : "GREYBULL", "loc" : [ -108.079503, 44.491881 ], "pop" : 2460, "state" : "WY" } +{ "_id" : "82428", "city" : "HYATTVILLE", "loc" : [ -107.605318, 44.250693 ], "pop" : 97, "state" : "WY" } +{ "_id" : "82431", "city" : "LOVELL", "loc" : [ -108.414107, 44.833637 ], "pop" : 4322, "state" : "WY" } +{ "_id" : "82432", "city" : "MANDERSON", "loc" : [ -107.953423, 44.311931 ], "pop" : 657, "state" : "WY" } +{ "_id" : "82433", "city" : "MEETEETSE", "loc" : [ -108.950045, 44.196202 ], "pop" : 1010, "state" : "WY" } +{ "_id" : "82434", "city" : "OTTO", "loc" : [ -108.304673, 44.405644 ], "pop" : 120, "state" : "WY" } +{ "_id" : "82435", "city" : "POWELL", "loc" : [ -108.777322, 44.756077 ], "pop" : 9608, "state" : "WY" } +{ "_id" : "82441", "city" : "SHELL", "loc" : [ -107.824333, 44.563649 ], "pop" : 355, "state" : "WY" } +{ "_id" : "82442", "city" : "TEN SLEEP", "loc" : [ -107.415305, 43.997848 ], "pop" : 695, "state" : "WY" } +{ "_id" : "82443", "city" : "GRASS CREEK", "loc" : [ -108.231297, 43.662152 ], "pop" : 4809, "state" : "WY" } +{ "_id" : "82450", "city" : "WAPITI", "loc" : [ -109.432629, 44.47967 ], "pop" : 214, "state" : "WY" } +{ "_id" : "82501", "city" : "GAS HILLS", "loc" : [ -108.411335, 43.045786 ], "pop" : 15471, "state" : "WY" } +{ "_id" : "82510", "city" : "ARAPAHOE", "loc" : [ -108.494134, 42.967936 ], "pop" : 605, "state" : "WY" } +{ "_id" : "82512", "city" : "CROWHEART", "loc" : [ -109.296043, 43.371569 ], "pop" : 157, "state" : "WY" } +{ "_id" : "82513", "city" : "DUBOIS", "loc" : [ -109.649175, 43.545136 ], "pop" : 1493, "state" : "WY" } +{ "_id" : "82514", "city" : "FORT WASHAKIE", "loc" : [ -108.896445, 43.004761 ], "pop" : 1131, "state" : "WY" } +{ "_id" : "82516", "city" : "KINNEAR", "loc" : [ -108.615428, 43.131777 ], "pop" : 420, "state" : "WY" } +{ "_id" : "82520", "city" : "ETHETE", "loc" : [ -108.738288, 42.859678 ], "pop" : 11770, "state" : "WY" } +{ "_id" : "82523", "city" : "PAVILLION", "loc" : [ -108.604394, 43.198515 ], "pop" : 1681, "state" : "WY" } +{ "_id" : "82601", "city" : "CASPER", "loc" : [ -106.316571, 42.845763 ], "pop" : 21224, "state" : "WY" } +{ "_id" : "82604", "city" : "CASPER", "loc" : [ -106.389634, 42.826073 ], "pop" : 24812, "state" : "WY" } +{ "_id" : "82609", "city" : "CASPER", "loc" : [ -106.280649, 42.840629 ], "pop" : 12789, "state" : "WY" } +{ "_id" : "82620", "city" : "ALCOVA", "loc" : [ -106.610199, 42.568383 ], "pop" : 10, "state" : "WY" } +{ "_id" : "82630", "city" : "ARMINTO", "loc" : [ -107.343611, 43.120883 ], "pop" : 14, "state" : "WY" } +{ "_id" : "82633", "city" : "DOUGLAS", "loc" : [ -105.385484, 42.762558 ], "pop" : 7502, "state" : "WY" } +{ "_id" : "82636", "city" : "EVANSVILLE", "loc" : [ -106.263886, 42.861384 ], "pop" : 1621, "state" : "WY" } +{ "_id" : "82637", "city" : "GLENROCK", "loc" : [ -105.857911, 42.867495 ], "pop" : 3483, "state" : "WY" } +{ "_id" : "82639", "city" : "KAYCEE", "loc" : [ -106.56323, 43.723625 ], "pop" : 876, "state" : "WY" } +{ "_id" : "82642", "city" : "LYSITE", "loc" : [ -107.648781, 43.328417 ], "pop" : 81, "state" : "WY" } +{ "_id" : "82643", "city" : "MIDWEST", "loc" : [ -106.266818, 43.410829 ], "pop" : 756, "state" : "WY" } +{ "_id" : "82649", "city" : "SHOSHONI", "loc" : [ -108.100667, 43.245707 ], "pop" : 600, "state" : "WY" } +{ "_id" : "82701", "city" : "NEWCASTLE", "loc" : [ -104.226205, 43.851098 ], "pop" : 4833, "state" : "WY" } +{ "_id" : "82710", "city" : "ALADDIN", "loc" : [ -104.19314, 44.747331 ], "pop" : 230, "state" : "WY" } +{ "_id" : "82712", "city" : "BEULAH", "loc" : [ -104.153095, 44.573575 ], "pop" : 187, "state" : "WY" } +{ "_id" : "82714", "city" : "DEVILS TOWER", "loc" : [ -104.793638, 44.617067 ], "pop" : 119, "state" : "WY" } +{ "_id" : "82715", "city" : "FOUR CORNERS", "loc" : [ -104.122897, 44.100747 ], "pop" : 38, "state" : "WY" } +{ "_id" : "82716", "city" : "GILLETTE", "loc" : [ -105.497442, 44.282009 ], "pop" : 25968, "state" : "WY" } +{ "_id" : "82720", "city" : "HULETT", "loc" : [ -104.617367, 44.735222 ], "pop" : 1054, "state" : "WY" } +{ "_id" : "82721", "city" : "PINE HAVEN", "loc" : [ -104.905904, 44.299932 ], "pop" : 1820, "state" : "WY" } +{ "_id" : "82723", "city" : "OSAGE", "loc" : [ -104.4226, 43.998982 ], "pop" : 292, "state" : "WY" } +{ "_id" : "82724", "city" : "OSHOTO", "loc" : [ -104.937659, 44.583023 ], "pop" : 57, "state" : "WY" } +{ "_id" : "82725", "city" : "RECLUSE", "loc" : [ -105.776005, 44.786149 ], "pop" : 183, "state" : "WY" } +{ "_id" : "82727", "city" : "ROZET", "loc" : [ -105.245875, 44.305825 ], "pop" : 900, "state" : "WY" } +{ "_id" : "82729", "city" : "SUNDANCE", "loc" : [ -104.383696, 44.405755 ], "pop" : 1827, "state" : "WY" } +{ "_id" : "82730", "city" : "UPTON", "loc" : [ -104.635159, 44.089271 ], "pop" : 1355, "state" : "WY" } +{ "_id" : "82731", "city" : "GILLETTE", "loc" : [ -105.373236, 44.835689 ], "pop" : 187, "state" : "WY" } +{ "_id" : "82732", "city" : "WRIGHT", "loc" : [ -105.532327, 43.829349 ], "pop" : 2132, "state" : "WY" } +{ "_id" : "82801", "city" : "SHERIDAN", "loc" : [ -106.964795, 44.78486 ], "pop" : 20025, "state" : "WY" } +{ "_id" : "82831", "city" : "ARVADA", "loc" : [ -106.109191, 44.689876 ], "pop" : 107, "state" : "WY" } +{ "_id" : "82832", "city" : "BANNER", "loc" : [ -106.87331, 44.590804 ], "pop" : 983, "state" : "WY" } +{ "_id" : "82834", "city" : "BUFFALO", "loc" : [ -106.70726, 44.34847 ], "pop" : 5269, "state" : "WY" } +{ "_id" : "82835", "city" : "CLEARMONT", "loc" : [ -106.458071, 44.66101 ], "pop" : 350, "state" : "WY" } +{ "_id" : "82836", "city" : "DAYTON", "loc" : [ -107.302605, 44.877958 ], "pop" : 986, "state" : "WY" } +{ "_id" : "82838", "city" : "PARKMAN", "loc" : [ -107.325393, 44.964965 ], "pop" : 148, "state" : "WY" } +{ "_id" : "82839", "city" : "ACME", "loc" : [ -107.159833, 44.904789 ], "pop" : 868, "state" : "WY" } +{ "_id" : "82842", "city" : "STORY", "loc" : [ -107.049229, 44.607169 ], "pop" : 63, "state" : "WY" } +{ "_id" : "82844", "city" : "RANCHESTER", "loc" : [ -107.303429, 44.768228 ], "pop" : 32, "state" : "WY" } +{ "_id" : "82901", "city" : "ROCK SPRINGS", "loc" : [ -109.230047, 41.605957 ], "pop" : 23927, "state" : "WY" } +{ "_id" : "82922", "city" : "BONDURANT", "loc" : [ -110.335287, 43.223798 ], "pop" : 116, "state" : "WY" } +{ "_id" : "82923", "city" : "BOULDER", "loc" : [ -109.540105, 42.688146 ], "pop" : 112, "state" : "WY" } +{ "_id" : "82925", "city" : "CORA", "loc" : [ -109.915351, 43.139921 ], "pop" : 30, "state" : "WY" } +{ "_id" : "82930", "city" : "EVANSTON", "loc" : [ -110.963067, 41.260947 ], "pop" : 12577, "state" : "WY" } +{ "_id" : "82933", "city" : "FORT BRIDGER", "loc" : [ -110.347428, 41.28282 ], "pop" : 3777, "state" : "WY" } +{ "_id" : "82935", "city" : "GREEN RIVER", "loc" : [ -109.471445, 41.51959 ], "pop" : 13956, "state" : "WY" } +{ "_id" : "82936", "city" : "LONETREE", "loc" : [ -110.172862, 41.049144 ], "pop" : 24, "state" : "WY" } +{ "_id" : "82937", "city" : "LYMAN", "loc" : [ -110.292629, 41.329136 ], "pop" : 2327, "state" : "WY" } +{ "_id" : "82938", "city" : "MC KINNON", "loc" : [ -109.874536, 41.040898 ], "pop" : 188, "state" : "WY" } +{ "_id" : "82941", "city" : "PINEDALE", "loc" : [ -109.856088, 42.854331 ], "pop" : 2326, "state" : "WY" } +{ "_id" : "83001", "city" : "COLTER BAY", "loc" : [ -110.766277, 43.460734 ], "pop" : 9078, "state" : "WY" } +{ "_id" : "83011", "city" : "KELLY", "loc" : [ -110.544186, 43.609361 ], "pop" : 203, "state" : "WY" } +{ "_id" : "83012", "city" : "MOOSE", "loc" : [ -110.857493, 43.771201 ], "pop" : 519, "state" : "WY" } +{ "_id" : "83013", "city" : "MORAN", "loc" : [ -110.329429, 43.881635 ], "pop" : 191, "state" : "WY" } +{ "_id" : "83014", "city" : "WILSON", "loc" : [ -110.874199, 43.49922 ], "pop" : 1099, "state" : "WY" } +{ "_id" : "83101", "city" : "KEMMERER", "loc" : [ -110.52834, 41.788661 ], "pop" : 4258, "state" : "WY" } +{ "_id" : "83110", "city" : "AFTON", "loc" : [ -110.941976, 42.712829 ], "pop" : 3201, "state" : "WY" } +{ "_id" : "83111", "city" : "AUBURN", "loc" : [ -110.994415, 42.805114 ], "pop" : 488, "state" : "WY" } +{ "_id" : "83112", "city" : "BEDFORD", "loc" : [ -110.95556, 42.932336 ], "pop" : 1177, "state" : "WY" } +{ "_id" : "83113", "city" : "MARBLETON", "loc" : [ -110.132954, 42.552059 ], "pop" : 1861, "state" : "WY" } +{ "_id" : "83114", "city" : "COKEVILLE", "loc" : [ -110.916419, 42.057983 ], "pop" : 905, "state" : "WY" } +{ "_id" : "83115", "city" : "DANIEL", "loc" : [ -110.133624, 42.917629 ], "pop" : 398, "state" : "WY" } +{ "_id" : "83118", "city" : "ETNA", "loc" : [ -111.015996, 43.138606 ], "pop" : 524, "state" : "WY" } +{ "_id" : "83120", "city" : "FREEDOM", "loc" : [ -111.029178, 43.017167 ], "pop" : 212, "state" : "WY" } +{ "_id" : "83122", "city" : "GROVER", "loc" : [ -110.924392, 42.796472 ], "pop" : 335, "state" : "WY" } +{ "_id" : "83123", "city" : "LA BARGE", "loc" : [ -110.210865, 42.24734 ], "pop" : 606, "state" : "WY" } +{ "_id" : "83126", "city" : "SMOOT", "loc" : [ -110.922351, 42.619238 ], "pop" : 414, "state" : "WY" } +{ "_id" : "83127", "city" : "THAYNE", "loc" : [ -111.011354, 42.933026 ], "pop" : 505, "state" : "WY" } +{ "_id" : "83201", "city" : "POCATELLO", "loc" : [ -112.438142, 42.887592 ], "pop" : 33282, "state" : "ID" } +{ "_id" : "83202", "city" : "CHUBBUCK", "loc" : [ -112.474873, 42.926548 ], "pop" : 11385, "state" : "ID" } +{ "_id" : "83203", "city" : "FORT HALL", "loc" : [ -112.459854, 42.988717 ], "pop" : 1566, "state" : "ID" } +{ "_id" : "83204", "city" : "POCATELLO", "loc" : [ -112.443352, 42.846463 ], "pop" : 15605, "state" : "ID" } +{ "_id" : "83210", "city" : "STERLING", "loc" : [ -112.818124, 42.976717 ], "pop" : 2653, "state" : "ID" } +{ "_id" : "83211", "city" : "AMERICAN FALLS", "loc" : [ -112.870714, 42.789876 ], "pop" : 5867, "state" : "ID" } +{ "_id" : "83212", "city" : "ARBON", "loc" : [ -112.558481, 42.502634 ], "pop" : 121, "state" : "ID" } +{ "_id" : "83213", "city" : "ARCO", "loc" : [ -113.317559, 43.635521 ], "pop" : 1823, "state" : "ID" } +{ "_id" : "83214", "city" : "ARIMO", "loc" : [ -112.174649, 42.559953 ], "pop" : 333, "state" : "ID" } +{ "_id" : "83217", "city" : "BANCROFT", "loc" : [ -111.842944, 42.720463 ], "pop" : 988, "state" : "ID" } +{ "_id" : "83220", "city" : "BERN", "loc" : [ -111.392595, 42.319144 ], "pop" : 261, "state" : "ID" } +{ "_id" : "83221", "city" : "BLACKFOOT", "loc" : [ -112.361545, 43.194327 ], "pop" : 18202, "state" : "ID" } +{ "_id" : "83226", "city" : "CHALLIS", "loc" : [ -114.19463, 44.496912 ], "pop" : 2426, "state" : "ID" } +{ "_id" : "83227", "city" : "CLAYTON", "loc" : [ -114.410189, 44.273289 ], "pop" : 41, "state" : "ID" } +{ "_id" : "83228", "city" : "CLIFTON", "loc" : [ -111.995737, 42.215972 ], "pop" : 538, "state" : "ID" } +{ "_id" : "83230", "city" : "CONDA", "loc" : [ -111.54023, 42.717126 ], "pop" : 21, "state" : "ID" } +{ "_id" : "83231", "city" : "DARLINGTON", "loc" : [ -113.380284, 43.7715 ], "pop" : 12, "state" : "ID" } +{ "_id" : "83232", "city" : "DAYTON", "loc" : [ -111.985836, 42.11836 ], "pop" : 659, "state" : "ID" } +{ "_id" : "83234", "city" : "DOWNEY", "loc" : [ -112.109019, 42.418127 ], "pop" : 939, "state" : "ID" } +{ "_id" : "83235", "city" : "ELLIS", "loc" : [ -114.001594, 44.878829 ], "pop" : 192, "state" : "ID" } +{ "_id" : "83236", "city" : "FIRTH", "loc" : [ -112.158819, 43.302066 ], "pop" : 2878, "state" : "ID" } +{ "_id" : "83237", "city" : "FRANKLIN", "loc" : [ -111.822862, 42.030389 ], "pop" : 1699, "state" : "ID" } +{ "_id" : "83238", "city" : "GENEVA", "loc" : [ -111.072185, 42.313585 ], "pop" : 125, "state" : "ID" } +{ "_id" : "83241", "city" : "GRACE", "loc" : [ -111.739981, 42.549978 ], "pop" : 2050, "state" : "ID" } +{ "_id" : "83243", "city" : "HOLBROOK", "loc" : [ -112.693404, 42.222148 ], "pop" : 213, "state" : "ID" } +{ "_id" : "83245", "city" : "INKOM", "loc" : [ -112.246474, 42.796379 ], "pop" : 823, "state" : "ID" } +{ "_id" : "83246", "city" : "LAVA HOT SPRINGS", "loc" : [ -112.017644, 42.618474 ], "pop" : 512, "state" : "ID" } +{ "_id" : "83250", "city" : "MC CAMMON", "loc" : [ -112.175758, 42.63362 ], "pop" : 2603, "state" : "ID" } +{ "_id" : "83251", "city" : "MACKAY", "loc" : [ -113.611984, 43.91106 ], "pop" : 1207, "state" : "ID" } +{ "_id" : "83252", "city" : "MALAD CITY", "loc" : [ -112.262045, 42.180783 ], "pop" : 3110, "state" : "ID" } +{ "_id" : "83253", "city" : "PATTERSON", "loc" : [ -113.916039, 44.701745 ], "pop" : 210, "state" : "ID" } +{ "_id" : "83254", "city" : "MONTPELIER", "loc" : [ -111.31946, 42.35199 ], "pop" : 4292, "state" : "ID" } +{ "_id" : "83255", "city" : "MOORE", "loc" : [ -113.260349, 43.782094 ], "pop" : 1083, "state" : "ID" } +{ "_id" : "83260", "city" : "OVID", "loc" : [ -111.451109, 42.311423 ], "pop" : 290, "state" : "ID" } +{ "_id" : "83261", "city" : "PARIS", "loc" : [ -111.402938, 42.207065 ], "pop" : 852, "state" : "ID" } +{ "_id" : "83262", "city" : "PINGREE", "loc" : [ -112.449035, 43.195618 ], "pop" : 7340, "state" : "ID" } +{ "_id" : "83263", "city" : "PRESTON", "loc" : [ -111.856516, 42.110917 ], "pop" : 5402, "state" : "ID" } +{ "_id" : "83271", "city" : "ROCKLAND", "loc" : [ -112.853982, 42.555582 ], "pop" : 478, "state" : "ID" } +{ "_id" : "83272", "city" : "SAINT CHARLES", "loc" : [ -111.389744, 42.112812 ], "pop" : 199, "state" : "ID" } +{ "_id" : "83274", "city" : "SHELLEY", "loc" : [ -112.107549, 43.376901 ], "pop" : 6164, "state" : "ID" } +{ "_id" : "83276", "city" : "SODA SPRINGS", "loc" : [ -111.569896, 42.671819 ], "pop" : 3871, "state" : "ID" } +{ "_id" : "83278", "city" : "STANLEY", "loc" : [ -114.725414, 44.22908 ], "pop" : 444, "state" : "ID" } +{ "_id" : "83280", "city" : "STONE", "loc" : [ -112.711473, 42.038983 ], "pop" : 169, "state" : "ID" } +{ "_id" : "83283", "city" : "THATCHER", "loc" : [ -111.78899, 42.331959 ], "pop" : 207, "state" : "ID" } +{ "_id" : "83285", "city" : "WAYAN", "loc" : [ -111.254056, 43.02691 ], "pop" : 117, "state" : "ID" } +{ "_id" : "83286", "city" : "WESTON", "loc" : [ -111.97154, 42.044621 ], "pop" : 727, "state" : "ID" } +{ "_id" : "83287", "city" : "FISH HAVEN", "loc" : [ -111.463323, 42.045926 ], "pop" : 65, "state" : "ID" } +{ "_id" : "83301", "city" : "TWIN FALLS", "loc" : [ -114.469265, 42.556495 ], "pop" : 34539, "state" : "ID" } +{ "_id" : "83302", "city" : "ROGERSON", "loc" : [ -114.603794, 42.219567 ], "pop" : 92, "state" : "ID" } +{ "_id" : "83313", "city" : "BELLEVUE", "loc" : [ -114.249804, 43.439694 ], "pop" : 2150, "state" : "ID" } +{ "_id" : "83314", "city" : "BLISS", "loc" : [ -114.910387, 42.944859 ], "pop" : 845, "state" : "ID" } +{ "_id" : "83316", "city" : "BUHL", "loc" : [ -114.782545, 42.600763 ], "pop" : 8014, "state" : "ID" } +{ "_id" : "83318", "city" : "BURLEY", "loc" : [ -113.793081, 42.524442 ], "pop" : 12406, "state" : "ID" } +{ "_id" : "83320", "city" : "CAREY", "loc" : [ -113.892567, 43.274443 ], "pop" : 820, "state" : "ID" } +{ "_id" : "83321", "city" : "CASTLEFORD", "loc" : [ -114.873433, 42.521015 ], "pop" : 365, "state" : "ID" } +{ "_id" : "83322", "city" : "CORRAL", "loc" : [ -115.00871, 43.307127 ], "pop" : 59, "state" : "ID" } +{ "_id" : "83323", "city" : "DECLO", "loc" : [ -113.644794, 42.524005 ], "pop" : 2592, "state" : "ID" } +{ "_id" : "83324", "city" : "DIETRICH", "loc" : [ -114.266408, 42.91254 ], "pop" : 178, "state" : "ID" } +{ "_id" : "83325", "city" : "EDEN", "loc" : [ -114.162762, 42.580374 ], "pop" : 1762, "state" : "ID" } +{ "_id" : "83326", "city" : "ELBA", "loc" : [ -113.663559, 42.180865 ], "pop" : 163, "state" : "ID" } +{ "_id" : "83327", "city" : "FAIRFIELD", "loc" : [ -114.790845, 43.367504 ], "pop" : 668, "state" : "ID" } +{ "_id" : "83328", "city" : "FILER", "loc" : [ -114.614047, 42.565269 ], "pop" : 4176, "state" : "ID" } +{ "_id" : "83330", "city" : "GOODING", "loc" : [ -114.711966, 42.937345 ], "pop" : 4846, "state" : "ID" } +{ "_id" : "83332", "city" : "HAGERMAN", "loc" : [ -114.88697, 42.814205 ], "pop" : 1613, "state" : "ID" } +{ "_id" : "83333", "city" : "HAILEY", "loc" : [ -114.306398, 43.523861 ], "pop" : 4683, "state" : "ID" } +{ "_id" : "83334", "city" : "HANSEN", "loc" : [ -114.299364, 42.524895 ], "pop" : 1525, "state" : "ID" } +{ "_id" : "83335", "city" : "HAZELTON", "loc" : [ -114.134984, 42.595462 ], "pop" : 705, "state" : "ID" } +{ "_id" : "83336", "city" : "HEYBURN", "loc" : [ -113.770885, 42.559922 ], "pop" : 4757, "state" : "ID" } +{ "_id" : "83338", "city" : "JEROME", "loc" : [ -114.501244, 42.71784 ], "pop" : 12671, "state" : "ID" } +{ "_id" : "83340", "city" : "OBSIDIAN", "loc" : [ -114.373664, 43.675459 ], "pop" : 5823, "state" : "ID" } +{ "_id" : "83341", "city" : "KIMBERLY", "loc" : [ -114.365725, 42.528656 ], "pop" : 3779, "state" : "ID" } +{ "_id" : "83342", "city" : "NAF", "loc" : [ -113.448656, 42.364652 ], "pop" : 2315, "state" : "ID" } +{ "_id" : "83343", "city" : "MINIDOKA", "loc" : [ -113.620033, 42.759784 ], "pop" : 1379, "state" : "ID" } +{ "_id" : "83344", "city" : "MURTAUGH", "loc" : [ -114.160641, 42.477597 ], "pop" : 1019, "state" : "ID" } +{ "_id" : "83346", "city" : "OAKLEY", "loc" : [ -113.906945, 42.347561 ], "pop" : 2056, "state" : "ID" } +{ "_id" : "83347", "city" : "PAUL", "loc" : [ -113.797125, 42.623999 ], "pop" : 3464, "state" : "ID" } +{ "_id" : "83348", "city" : "PICABO", "loc" : [ -114.086065, 43.310149 ], "pop" : 76, "state" : "ID" } +{ "_id" : "83349", "city" : "RICHFIELD", "loc" : [ -114.15079, 43.058839 ], "pop" : 789, "state" : "ID" } +{ "_id" : "83350", "city" : "ACEQUIA", "loc" : [ -113.66699, 42.621467 ], "pop" : 9761, "state" : "ID" } +{ "_id" : "83352", "city" : "SHOSHONE", "loc" : [ -114.382176, 42.947353 ], "pop" : 2341, "state" : "ID" } +{ "_id" : "83355", "city" : "WENDELL", "loc" : [ -114.715391, 42.757868 ], "pop" : 4400, "state" : "ID" } +{ "_id" : "83401", "city" : "AMMON", "loc" : [ -111.990626, 43.517679 ], "pop" : 27974, "state" : "ID" } +{ "_id" : "83402", "city" : "IDAHO FALLS", "loc" : [ -112.057762, 43.493373 ], "pop" : 20716, "state" : "ID" } +{ "_id" : "83404", "city" : "IDAHO FALLS", "loc" : [ -112.012449, 43.475043 ], "pop" : 14962, "state" : "ID" } +{ "_id" : "83406", "city" : "IDAHO FALLS", "loc" : [ -111.966052, 43.473233 ], "pop" : 5935, "state" : "ID" } +{ "_id" : "83420", "city" : "ASHTON", "loc" : [ -111.619526, 43.988078 ], "pop" : 8639, "state" : "ID" } +{ "_id" : "83422", "city" : "DRIGGS", "loc" : [ -111.119896, 43.726291 ], "pop" : 1495, "state" : "ID" } +{ "_id" : "83423", "city" : "DUBOIS", "loc" : [ -112.325852, 44.185769 ], "pop" : 650, "state" : "ID" } +{ "_id" : "83424", "city" : "FELT", "loc" : [ -111.189496, 43.872407 ], "pop" : 40, "state" : "ID" } +{ "_id" : "83425", "city" : "HAMER", "loc" : [ -112.187189, 43.930751 ], "pop" : 396, "state" : "ID" } +{ "_id" : "83427", "city" : "IONA", "loc" : [ -111.928356, 43.525946 ], "pop" : 1491, "state" : "ID" } +{ "_id" : "83429", "city" : "ISLAND PARK", "loc" : [ -111.367914, 44.446606 ], "pop" : 35, "state" : "ID" } +{ "_id" : "83431", "city" : "LEWISVILLE", "loc" : [ -112.018884, 43.672476 ], "pop" : 1565, "state" : "ID" } +{ "_id" : "83434", "city" : "MENAN", "loc" : [ -111.983702, 43.726576 ], "pop" : 1789, "state" : "ID" } +{ "_id" : "83435", "city" : "MONTEVIEW", "loc" : [ -112.578321, 43.986242 ], "pop" : 441, "state" : "ID" } +{ "_id" : "83436", "city" : "NEWDALE", "loc" : [ -111.604192, 43.888078 ], "pop" : 430, "state" : "ID" } +{ "_id" : "83440", "city" : "REXBURG", "loc" : [ -111.789022, 43.809968 ], "pop" : 19157, "state" : "ID" } +{ "_id" : "83442", "city" : "RIGBY", "loc" : [ -111.900481, 43.671462 ], "pop" : 8178, "state" : "ID" } +{ "_id" : "83443", "city" : "RIRIE", "loc" : [ -111.760692, 43.631961 ], "pop" : 1749, "state" : "ID" } +{ "_id" : "83444", "city" : "ROBERTS", "loc" : [ -112.119591, 43.7116 ], "pop" : 1436, "state" : "ID" } +{ "_id" : "83445", "city" : "SAINT ANTHONY", "loc" : [ -111.523156, 44.274499 ], "pop" : 747, "state" : "ID" } +{ "_id" : "83446", "city" : "SPENCER", "loc" : [ -112.098821, 44.281444 ], "pop" : 112, "state" : "ID" } +{ "_id" : "83448", "city" : "SUGAR CITY", "loc" : [ -111.79004, 43.866852 ], "pop" : 4517, "state" : "ID" } +{ "_id" : "83449", "city" : "SWAN VALLEY", "loc" : [ -111.279358, 43.405826 ], "pop" : 441, "state" : "ID" } +{ "_id" : "83450", "city" : "TERRETON", "loc" : [ -112.420041, 43.858635 ], "pop" : 1537, "state" : "ID" } +{ "_id" : "83451", "city" : "TETON", "loc" : [ -111.668145, 43.898751 ], "pop" : 1086, "state" : "ID" } +{ "_id" : "83452", "city" : "TETONIA", "loc" : [ -111.186997, 43.843713 ], "pop" : 820, "state" : "ID" } +{ "_id" : "83455", "city" : "VICTOR", "loc" : [ -111.125934, 43.614827 ], "pop" : 1084, "state" : "ID" } +{ "_id" : "83462", "city" : "CARMEN", "loc" : [ -113.857267, 45.255016 ], "pop" : 195, "state" : "ID" } +{ "_id" : "83463", "city" : "GIBBONSVILLE", "loc" : [ -113.956466, 45.484608 ], "pop" : 230, "state" : "ID" } +{ "_id" : "83464", "city" : "LEADORE", "loc" : [ -113.492586, 44.738909 ], "pop" : 594, "state" : "ID" } +{ "_id" : "83466", "city" : "NORTH FORK", "loc" : [ -113.857287, 45.377605 ], "pop" : 267, "state" : "ID" } +{ "_id" : "83467", "city" : "SALMON", "loc" : [ -113.878356, 45.157142 ], "pop" : 5159, "state" : "ID" } +{ "_id" : "83469", "city" : "SHOUP", "loc" : [ -114.405987, 45.18514 ], "pop" : 67, "state" : "ID" } +{ "_id" : "83501", "city" : "SOUTH GATE PLAZA", "loc" : [ -116.987714, 46.389457 ], "pop" : 29650, "state" : "ID" } +{ "_id" : "83520", "city" : "AHSAHKA", "loc" : [ -116.371537, 46.510318 ], "pop" : 335, "state" : "ID" } +{ "_id" : "83522", "city" : "COTTONWOOD", "loc" : [ -116.373306, 46.044789 ], "pop" : 1791, "state" : "ID" } +{ "_id" : "83523", "city" : "CRAIGMONT", "loc" : [ -116.467655, 46.245292 ], "pop" : 820, "state" : "ID" } +{ "_id" : "83524", "city" : "CULDESAC", "loc" : [ -116.653579, 46.378012 ], "pop" : 1161, "state" : "ID" } +{ "_id" : "83525", "city" : "DIXIE", "loc" : [ -115.359158, 45.888897 ], "pop" : 755, "state" : "ID" } +{ "_id" : "83526", "city" : "FERDINAND", "loc" : [ -116.39817, 46.134877 ], "pop" : 323, "state" : "ID" } +{ "_id" : "83530", "city" : "GRANGEVILLE", "loc" : [ -116.107639, 45.927239 ], "pop" : 4791, "state" : "ID" } +{ "_id" : "83533", "city" : "GREENCREEK", "loc" : [ -116.27239, 46.115523 ], "pop" : 269, "state" : "ID" } +{ "_id" : "83535", "city" : "JULIAETTA", "loc" : [ -116.718849, 46.575376 ], "pop" : 1014, "state" : "ID" } +{ "_id" : "83536", "city" : "KAMIAH", "loc" : [ -116.034742, 46.21856 ], "pop" : 2970, "state" : "ID" } +{ "_id" : "83537", "city" : "KENDRICK", "loc" : [ -116.604895, 46.628628 ], "pop" : 970, "state" : "ID" } +{ "_id" : "83538", "city" : "KEUTERVILLE", "loc" : [ -116.535583, 45.929443 ], "pop" : 0, "state" : "ID" } +{ "_id" : "83539", "city" : "CLEARWATER", "loc" : [ -115.92396, 46.125859 ], "pop" : 2704, "state" : "ID" } +{ "_id" : "83540", "city" : "LAPWAI", "loc" : [ -116.790225, 46.412403 ], "pop" : 1784, "state" : "ID" } +{ "_id" : "83541", "city" : "LENORE", "loc" : [ -116.513015, 46.535408 ], "pop" : 473, "state" : "ID" } +{ "_id" : "83542", "city" : "LUCILE", "loc" : [ -116.266899, 45.556963 ], "pop" : 216, "state" : "ID" } +{ "_id" : "83543", "city" : "NEZPERCE", "loc" : [ -116.239281, 46.247533 ], "pop" : 650, "state" : "ID" } +{ "_id" : "83544", "city" : "OROFINO", "loc" : [ -116.240417, 46.495197 ], "pop" : 5738, "state" : "ID" } +{ "_id" : "83545", "city" : "PECK", "loc" : [ -116.411394, 46.480661 ], "pop" : 295, "state" : "ID" } +{ "_id" : "83546", "city" : "PIERCE", "loc" : [ -115.807071, 46.492424 ], "pop" : 900, "state" : "ID" } +{ "_id" : "83547", "city" : "POLLOCK", "loc" : [ -116.351742, 45.306754 ], "pop" : 274, "state" : "ID" } +{ "_id" : "83548", "city" : "REUBENS", "loc" : [ -116.533334, 46.336112 ], "pop" : 121, "state" : "ID" } +{ "_id" : "83549", "city" : "RIGGINS", "loc" : [ -116.300553, 45.397006 ], "pop" : 818, "state" : "ID" } +{ "_id" : "83553", "city" : "WEIPPE", "loc" : [ -115.938593, 46.38069 ], "pop" : 1193, "state" : "ID" } +{ "_id" : "83554", "city" : "WHITE BIRD", "loc" : [ -116.2889, 45.752096 ], "pop" : 393, "state" : "ID" } +{ "_id" : "83555", "city" : "WINCHESTER", "loc" : [ -116.620382, 46.238334 ], "pop" : 380, "state" : "ID" } +{ "_id" : "83601", "city" : "ATLANTA", "loc" : [ -115.357042, 43.567436 ], "pop" : 208, "state" : "ID" } +{ "_id" : "83602", "city" : "BANKS", "loc" : [ -115.983737, 44.149152 ], "pop" : 494, "state" : "ID" } +{ "_id" : "83604", "city" : "GRASMERE", "loc" : [ -115.677259, 42.76006 ], "pop" : 609, "state" : "ID" } +{ "_id" : "83605", "city" : "CALDWELL", "loc" : [ -116.700038, 43.662719 ], "pop" : 32407, "state" : "ID" } +{ "_id" : "83610", "city" : "CAMBRIDGE", "loc" : [ -116.675717, 44.59216 ], "pop" : 962, "state" : "ID" } +{ "_id" : "83611", "city" : "WEST MOUNTAIN", "loc" : [ -116.027676, 44.493273 ], "pop" : 1681, "state" : "ID" } +{ "_id" : "83612", "city" : "COUNCIL", "loc" : [ -116.451833, 44.762754 ], "pop" : 1606, "state" : "ID" } +{ "_id" : "83615", "city" : "DONNELLY", "loc" : [ -116.08578, 44.74937 ], "pop" : 681, "state" : "ID" } +{ "_id" : "83616", "city" : "EAGLE", "loc" : [ -116.361966, 43.706879 ], "pop" : 6874, "state" : "ID" } +{ "_id" : "83617", "city" : "MONTOUR", "loc" : [ -116.511459, 43.879152 ], "pop" : 11189, "state" : "ID" } +{ "_id" : "83619", "city" : "FRUITLAND", "loc" : [ -116.914259, 44.002658 ], "pop" : 4611, "state" : "ID" } +{ "_id" : "83622", "city" : "GARDEN VALLEY", "loc" : [ -115.824311, 44.090932 ], "pop" : 513, "state" : "ID" } +{ "_id" : "83623", "city" : "GLENNS FERRY", "loc" : [ -115.315973, 42.962202 ], "pop" : 2040, "state" : "ID" } +{ "_id" : "83624", "city" : "GRAND VIEW", "loc" : [ -116.08187, 42.810101 ], "pop" : 1449, "state" : "ID" } +{ "_id" : "83627", "city" : "HAMMETT", "loc" : [ -115.565839, 42.981755 ], "pop" : 73, "state" : "ID" } +{ "_id" : "83628", "city" : "HOMEDALE", "loc" : [ -116.947228, 43.613844 ], "pop" : 3079, "state" : "ID" } +{ "_id" : "83629", "city" : "HORSESHOE BEND", "loc" : [ -116.180898, 43.922882 ], "pop" : 1111, "state" : "ID" } +{ "_id" : "83631", "city" : "IDAHO CITY", "loc" : [ -115.918436, 43.758601 ], "pop" : 1324, "state" : "ID" } +{ "_id" : "83632", "city" : "INDIAN VALLEY", "loc" : [ -116.442969, 44.549134 ], "pop" : 188, "state" : "ID" } +{ "_id" : "83633", "city" : "KING HILL", "loc" : [ -115.269098, 42.936104 ], "pop" : 357, "state" : "ID" } +{ "_id" : "83634", "city" : "KUNA", "loc" : [ -116.381859, 43.487034 ], "pop" : 8141, "state" : "ID" } +{ "_id" : "83636", "city" : "LETHA", "loc" : [ -116.585004, 43.840306 ], "pop" : 29, "state" : "ID" } +{ "_id" : "83637", "city" : "LOWMAN", "loc" : [ -115.528488, 44.110616 ], "pop" : 63, "state" : "ID" } +{ "_id" : "83638", "city" : "MC CALL", "loc" : [ -116.078873, 44.891784 ], "pop" : 3681, "state" : "ID" } +{ "_id" : "83639", "city" : "MARSING", "loc" : [ -116.823968, 43.539866 ], "pop" : 2281, "state" : "ID" } +{ "_id" : "83641", "city" : "MELBA", "loc" : [ -116.548875, 43.37842 ], "pop" : 1116, "state" : "ID" } +{ "_id" : "83642", "city" : "MERIDIAN", "loc" : [ -116.397538, 43.614963 ], "pop" : 19033, "state" : "ID" } +{ "_id" : "83643", "city" : "MESA", "loc" : [ -116.42113, 44.657747 ], "pop" : 279, "state" : "ID" } +{ "_id" : "83644", "city" : "MIDDLETON", "loc" : [ -116.61122, 43.719052 ], "pop" : 3898, "state" : "ID" } +{ "_id" : "83645", "city" : "MIDVALE", "loc" : [ -116.703838, 44.441979 ], "pop" : 621, "state" : "ID" } +{ "_id" : "83647", "city" : "MOUNTAIN HOME", "loc" : [ -115.696334, 43.139223 ], "pop" : 12235, "state" : "ID" } +{ "_id" : "83648", "city" : "MOUNTAIN HOME A", "loc" : [ -115.873609, 43.049315 ], "pop" : 6304, "state" : "ID" } +{ "_id" : "83650", "city" : "OREANA", "loc" : [ -116.605379, 43.207296 ], "pop" : 1156, "state" : "ID" } +{ "_id" : "83651", "city" : "NAMPA", "loc" : [ -116.584818, 43.58342 ], "pop" : 16068, "state" : "ID" } +{ "_id" : "83654", "city" : "NEW MEADOWS", "loc" : [ -116.287438, 44.993969 ], "pop" : 1179, "state" : "ID" } +{ "_id" : "83655", "city" : "NEW PLYMOUTH", "loc" : [ -116.804818, 43.959021 ], "pop" : 3165, "state" : "ID" } +{ "_id" : "83657", "city" : "OLA", "loc" : [ -116.290915, 44.235026 ], "pop" : 159, "state" : "ID" } +{ "_id" : "83660", "city" : "PARMA", "loc" : [ -116.940066, 43.789576 ], "pop" : 4477, "state" : "ID" } +{ "_id" : "83661", "city" : "PAYETTE", "loc" : [ -116.920277, 44.07818 ], "pop" : 7913, "state" : "ID" } +{ "_id" : "83669", "city" : "STAR", "loc" : [ -116.496735, 43.701296 ], "pop" : 1579, "state" : "ID" } +{ "_id" : "83670", "city" : "SWEET", "loc" : [ -116.323215, 43.99475 ], "pop" : 344, "state" : "ID" } +{ "_id" : "83672", "city" : "WEISER", "loc" : [ -116.96507, 44.25222 ], "pop" : 6967, "state" : "ID" } +{ "_id" : "83676", "city" : "WILDER", "loc" : [ -116.912199, 43.657851 ], "pop" : 3042, "state" : "ID" } +{ "_id" : "83677", "city" : "YELLOW PINE", "loc" : [ -115.49634, 44.969809 ], "pop" : 68, "state" : "ID" } +{ "_id" : "83686", "city" : "NAMPA", "loc" : [ -116.565962, 43.544125 ], "pop" : 17886, "state" : "ID" } +{ "_id" : "83687", "city" : "NAMPA", "loc" : [ -116.536024, 43.593657 ], "pop" : 10589, "state" : "ID" } +{ "_id" : "83702", "city" : "BOISE", "loc" : [ -116.205192, 43.632237 ], "pop" : 19423, "state" : "ID" } +{ "_id" : "83703", "city" : "BOISE", "loc" : [ -116.252396, 43.660051 ], "pop" : 17005, "state" : "ID" } +{ "_id" : "83704", "city" : "BOISE", "loc" : [ -116.295099, 43.633001 ], "pop" : 40912, "state" : "ID" } +{ "_id" : "83705", "city" : "BOISE", "loc" : [ -116.219104, 43.585077 ], "pop" : 25402, "state" : "ID" } +{ "_id" : "83706", "city" : "BOISE", "loc" : [ -116.191006, 43.588495 ], "pop" : 24826, "state" : "ID" } +{ "_id" : "83709", "city" : "BOISE", "loc" : [ -116.29407, 43.574085 ], "pop" : 30382, "state" : "ID" } +{ "_id" : "83712", "city" : "BOISE", "loc" : [ -116.164924, 43.602311 ], "pop" : 7572, "state" : "ID" } +{ "_id" : "83714", "city" : "GARDEN CITY", "loc" : [ -116.265751, 43.643036 ], "pop" : 5897, "state" : "ID" } +{ "_id" : "83801", "city" : "ATHOL", "loc" : [ -116.731821, 47.92674 ], "pop" : 2520, "state" : "ID" } +{ "_id" : "83802", "city" : "AVERY", "loc" : [ -115.866012, 47.271431 ], "pop" : 113, "state" : "ID" } +{ "_id" : "83803", "city" : "BAYVIEW", "loc" : [ -116.568745, 47.96535 ], "pop" : 722, "state" : "ID" } +{ "_id" : "83804", "city" : "BLANCHARD", "loc" : [ -116.990865, 48.022344 ], "pop" : 507, "state" : "ID" } +{ "_id" : "83805", "city" : "BONNERS FERRY", "loc" : [ -116.332178, 48.730642 ], "pop" : 5219, "state" : "ID" } +{ "_id" : "83808", "city" : "CALDER", "loc" : [ -116.222793, 47.274135 ], "pop" : 77, "state" : "ID" } +{ "_id" : "83809", "city" : "CAREYWOOD", "loc" : [ -116.598761, 48.062494 ], "pop" : 361, "state" : "ID" } +{ "_id" : "83810", "city" : "CATALDO", "loc" : [ -116.443138, 47.552169 ], "pop" : 982, "state" : "ID" } +{ "_id" : "83811", "city" : "CLARK FORK", "loc" : [ -116.169865, 48.140457 ], "pop" : 971, "state" : "ID" } +{ "_id" : "83812", "city" : "CLARKIA", "loc" : [ -116.277408, 47.044477 ], "pop" : 85, "state" : "ID" } +{ "_id" : "83813", "city" : "COCOLALLA", "loc" : [ -116.657051, 48.124828 ], "pop" : 715, "state" : "ID" } +{ "_id" : "83814", "city" : "COEUR D ALENE", "loc" : [ -116.784976, 47.692841 ], "pop" : 33589, "state" : "ID" } +{ "_id" : "83821", "city" : "COOLIN", "loc" : [ -116.840823, 48.522754 ], "pop" : 194, "state" : "ID" } +{ "_id" : "83822", "city" : "OLD TOWN", "loc" : [ -116.927382, 48.187988 ], "pop" : 2229, "state" : "ID" } +{ "_id" : "83823", "city" : "DEARY", "loc" : [ -116.523782, 46.806062 ], "pop" : 1483, "state" : "ID" } +{ "_id" : "83824", "city" : "DESMET", "loc" : [ -116.893746, 47.125954 ], "pop" : 265, "state" : "ID" } +{ "_id" : "83827", "city" : "ELK RIVER", "loc" : [ -116.179943, 46.782972 ], "pop" : 154, "state" : "ID" } +{ "_id" : "83830", "city" : "FERNWOOD", "loc" : [ -116.383126, 47.116027 ], "pop" : 372, "state" : "ID" } +{ "_id" : "83832", "city" : "GENESEE", "loc" : [ -116.928991, 46.571394 ], "pop" : 1241, "state" : "ID" } +{ "_id" : "83833", "city" : "HARRISON", "loc" : [ -116.744607, 47.501692 ], "pop" : 1077, "state" : "ID" } +{ "_id" : "83834", "city" : "HARVARD", "loc" : [ -116.702524, 46.937647 ], "pop" : 226, "state" : "ID" } +{ "_id" : "83835", "city" : "HAYDEN LAKE", "loc" : [ -116.776821, 47.773853 ], "pop" : 9287, "state" : "ID" } +{ "_id" : "83836", "city" : "HOPE", "loc" : [ -116.279504, 48.244402 ], "pop" : 687, "state" : "ID" } +{ "_id" : "83837", "city" : "KELLOGG", "loc" : [ -116.125281, 47.543069 ], "pop" : 4640, "state" : "ID" } +{ "_id" : "83839", "city" : "KINGSTON", "loc" : [ -116.288722, 47.550881 ], "pop" : 690, "state" : "ID" } +{ "_id" : "83842", "city" : "MEDIMONT", "loc" : [ -116.568291, 47.462482 ], "pop" : 32, "state" : "ID" } +{ "_id" : "83843", "city" : "MOSCOW", "loc" : [ -116.989683, 46.730921 ], "pop" : 21714, "state" : "ID" } +{ "_id" : "83845", "city" : "MOYIE SPRINGS", "loc" : [ -116.179603, 48.746434 ], "pop" : 1496, "state" : "ID" } +{ "_id" : "83846", "city" : "MULLAN", "loc" : [ -115.792603, 47.470906 ], "pop" : 995, "state" : "ID" } +{ "_id" : "83847", "city" : "NAPLES", "loc" : [ -116.319636, 48.60491 ], "pop" : 1556, "state" : "ID" } +{ "_id" : "83848", "city" : "NORDMAN", "loc" : [ -116.92126, 48.566944 ], "pop" : 446, "state" : "ID" } +{ "_id" : "83850", "city" : "PINEHURST", "loc" : [ -116.264679, 47.501823 ], "pop" : 371, "state" : "ID" } +{ "_id" : "83851", "city" : "PLUMMER", "loc" : [ -116.866161, 47.327782 ], "pop" : 1439, "state" : "ID" } +{ "_id" : "83853", "city" : "PORTHILL", "loc" : [ -116.477517, 48.992037 ], "pop" : 61, "state" : "ID" } +{ "_id" : "83854", "city" : "POST FALLS", "loc" : [ -116.935349, 47.720475 ], "pop" : 14952, "state" : "ID" } +{ "_id" : "83855", "city" : "POTLATCH", "loc" : [ -116.914101, 46.944833 ], "pop" : 1836, "state" : "ID" } +{ "_id" : "83856", "city" : "PRIEST RIVER", "loc" : [ -116.906617, 48.16637 ], "pop" : 4345, "state" : "ID" } +{ "_id" : "83857", "city" : "PRINCETON", "loc" : [ -116.828728, 46.899556 ], "pop" : 733, "state" : "ID" } +{ "_id" : "83858", "city" : "RATHDRUM", "loc" : [ -116.887294, 47.824107 ], "pop" : 4798, "state" : "ID" } +{ "_id" : "83860", "city" : "SAGLE", "loc" : [ -116.5455, 48.2035 ], "pop" : 3512, "state" : "ID" } +{ "_id" : "83861", "city" : "SAINT MARIES", "loc" : [ -116.568107, 47.297727 ], "pop" : 5894, "state" : "ID" } +{ "_id" : "83864", "city" : "SANDPOINT", "loc" : [ -116.533249, 48.311989 ], "pop" : 12421, "state" : "ID" } +{ "_id" : "83868", "city" : "SMELTERVILLE", "loc" : [ -116.240113, 47.537096 ], "pop" : 2272, "state" : "ID" } +{ "_id" : "83869", "city" : "SPIRIT LAKE", "loc" : [ -116.868046, 47.965652 ], "pop" : 860, "state" : "ID" } +{ "_id" : "83870", "city" : "TENSED", "loc" : [ -116.902716, 47.170735 ], "pop" : 332, "state" : "ID" } +{ "_id" : "83871", "city" : "TROY", "loc" : [ -116.768105, 46.742648 ], "pop" : 1481, "state" : "ID" } +{ "_id" : "83872", "city" : "VIOLA", "loc" : [ -116.97319, 46.858293 ], "pop" : 519, "state" : "ID" } +{ "_id" : "83873", "city" : "WALLACE", "loc" : [ -115.962001, 47.490842 ], "pop" : 4688, "state" : "ID" } +{ "_id" : "83876", "city" : "WORLEY", "loc" : [ -116.905634, 47.429213 ], "pop" : 845, "state" : "ID" } +{ "_id" : "84001", "city" : "ALTAMONT", "loc" : [ -110.446356, 40.370225 ], "pop" : 146, "state" : "UT" } +{ "_id" : "84002", "city" : "ALTONAH", "loc" : [ -110.438499, 40.441894 ], "pop" : 10, "state" : "UT" } +{ "_id" : "84003", "city" : "AMERICAN FORK", "loc" : [ -111.794107, 40.392784 ], "pop" : 21864, "state" : "UT" } +{ "_id" : "84004", "city" : "ALPINE", "loc" : [ -111.768861, 40.461591 ], "pop" : 3665, "state" : "UT" } +{ "_id" : "84006", "city" : "BINGHAM CANYON", "loc" : [ -112.097718, 40.564614 ], "pop" : 631, "state" : "UT" } +{ "_id" : "84007", "city" : "BLUEBELL", "loc" : [ -110.294122, 40.351728 ], "pop" : 1443, "state" : "UT" } +{ "_id" : "84010", "city" : "BOUNTIFUL", "loc" : [ -111.872658, 40.877513 ], "pop" : 41077, "state" : "UT" } +{ "_id" : "84012", "city" : "BRIDGELAND", "loc" : [ -110.160264, 40.230411 ], "pop" : 849, "state" : "UT" } +{ "_id" : "84013", "city" : "CEDAR VALLEY", "loc" : [ -111.968985, 40.142516 ], "pop" : 1836, "state" : "UT" } +{ "_id" : "84014", "city" : "CENTERVILLE", "loc" : [ -111.87701, 40.926772 ], "pop" : 11989, "state" : "UT" } +{ "_id" : "84015", "city" : "CLEARFIELD", "loc" : [ -112.048224, 41.129388 ], "pop" : 25972, "state" : "UT" } +{ "_id" : "84017", "city" : "COALVILLE", "loc" : [ -111.407108, 40.924385 ], "pop" : 3217, "state" : "UT" } +{ "_id" : "84018", "city" : "CROYDON", "loc" : [ -111.523092, 41.068915 ], "pop" : 117, "state" : "UT" } +{ "_id" : "84020", "city" : "DRAPER", "loc" : [ -111.88096, 40.504599 ], "pop" : 5602, "state" : "UT" } +{ "_id" : "84021", "city" : "DUCHESNE", "loc" : [ -110.618094, 39.95398 ], "pop" : 38, "state" : "UT" } +{ "_id" : "84022", "city" : "DUGWAY", "loc" : [ -112.872905, 40.526892 ], "pop" : 79, "state" : "UT" } +{ "_id" : "84023", "city" : "DUTCH JOHN", "loc" : [ -109.354255, 40.932244 ], "pop" : 174, "state" : "UT" } +{ "_id" : "84025", "city" : "FARMINGTON", "loc" : [ -111.893785, 40.988913 ], "pop" : 10307, "state" : "UT" } +{ "_id" : "84026", "city" : "FORT DUCHESNE", "loc" : [ -109.863726, 40.301411 ], "pop" : 1649, "state" : "UT" } +{ "_id" : "84028", "city" : "GARDEN CITY", "loc" : [ -111.407033, 41.93764 ], "pop" : 254, "state" : "UT" } +{ "_id" : "84029", "city" : "GRANTSVILLE", "loc" : [ -112.461766, 40.60054 ], "pop" : 4741, "state" : "UT" } +{ "_id" : "84031", "city" : "HANNA", "loc" : [ -110.809748, 40.450135 ], "pop" : 54, "state" : "UT" } +{ "_id" : "84032", "city" : "HEBER CITY", "loc" : [ -111.405088, 40.494703 ], "pop" : 7913, "state" : "UT" } +{ "_id" : "84035", "city" : "JENSEN", "loc" : [ -109.350982, 40.378715 ], "pop" : 471, "state" : "UT" } +{ "_id" : "84036", "city" : "KAMAS", "loc" : [ -111.261877, 40.641432 ], "pop" : 2433, "state" : "UT" } +{ "_id" : "84037", "city" : "KAYSVILLE", "loc" : [ -111.932607, 41.037527 ], "pop" : 21132, "state" : "UT" } +{ "_id" : "84038", "city" : "LAKETOWN", "loc" : [ -111.268853, 41.81068 ], "pop" : 430, "state" : "UT" } +{ "_id" : "84039", "city" : "LAPOINT", "loc" : [ -109.804102, 40.400285 ], "pop" : 362, "state" : "UT" } +{ "_id" : "84040", "city" : "LAYTON", "loc" : [ -111.927365, 41.084576 ], "pop" : 13289, "state" : "UT" } +{ "_id" : "84041", "city" : "LAYTON", "loc" : [ -111.970354, 41.087905 ], "pop" : 33600, "state" : "UT" } +{ "_id" : "84042", "city" : "LINDON", "loc" : [ -111.714358, 40.34119 ], "pop" : 3819, "state" : "UT" } +{ "_id" : "84043", "city" : "LEHI", "loc" : [ -111.850606, 40.395845 ], "pop" : 9188, "state" : "UT" } +{ "_id" : "84044", "city" : "MAGNA", "loc" : [ -112.080867, 40.700879 ], "pop" : 17841, "state" : "UT" } +{ "_id" : "84046", "city" : "MANILA", "loc" : [ -109.723503, 40.968494 ], "pop" : 516, "state" : "UT" } +{ "_id" : "84047", "city" : "MIDVALE", "loc" : [ -111.885066, 40.615178 ], "pop" : 25001, "state" : "UT" } +{ "_id" : "84049", "city" : "MIDWAY", "loc" : [ -111.477575, 40.50934 ], "pop" : 1837, "state" : "UT" } +{ "_id" : "84050", "city" : "MORGAN", "loc" : [ -111.716339, 41.067832 ], "pop" : 5411, "state" : "UT" } +{ "_id" : "84051", "city" : "MOUNTAIN HOME", "loc" : [ -110.767018, 40.191999 ], "pop" : 236, "state" : "UT" } +{ "_id" : "84052", "city" : "MYTON", "loc" : [ -110.048056, 40.194049 ], "pop" : 940, "state" : "UT" } +{ "_id" : "84053", "city" : "NEOLA", "loc" : [ -110.037221, 40.449149 ], "pop" : 810, "state" : "UT" } +{ "_id" : "84054", "city" : "NORTH SALT LAKE", "loc" : [ -111.904116, 40.844064 ], "pop" : 7216, "state" : "UT" } +{ "_id" : "84056", "city" : "HILL AIR FORCE B", "loc" : [ -111.995565, 41.116962 ], "pop" : 5432, "state" : "UT" } +{ "_id" : "84057", "city" : "OREM", "loc" : [ -111.695293, 40.313407 ], "pop" : 38292, "state" : "UT" } +{ "_id" : "84058", "city" : "VINEYARD", "loc" : [ -111.694301, 40.280761 ], "pop" : 29323, "state" : "UT" } +{ "_id" : "84060", "city" : "PARK CITY", "loc" : [ -111.528021, 40.695724 ], "pop" : 8976, "state" : "UT" } +{ "_id" : "84061", "city" : "PEOA", "loc" : [ -111.302467, 40.720937 ], "pop" : 892, "state" : "UT" } +{ "_id" : "84062", "city" : "PLEASANT GROVE", "loc" : [ -111.733284, 40.371986 ], "pop" : 15703, "state" : "UT" } +{ "_id" : "84063", "city" : "RANDLETT", "loc" : [ -109.730102, 40.21865 ], "pop" : 78, "state" : "UT" } +{ "_id" : "84064", "city" : "RANDOLPH", "loc" : [ -111.185578, 41.656328 ], "pop" : 682, "state" : "UT" } +{ "_id" : "84065", "city" : "LARK", "loc" : [ -111.954661, 40.53789 ], "pop" : 28444, "state" : "UT" } +{ "_id" : "84066", "city" : "ROOSEVELT", "loc" : [ -110.010782, 40.310229 ], "pop" : 6725, "state" : "UT" } +{ "_id" : "84067", "city" : "ROY", "loc" : [ -112.038177, 41.172365 ], "pop" : 22166, "state" : "UT" } +{ "_id" : "84069", "city" : "RUSH VALLEY", "loc" : [ -112.744033, 40.233625 ], "pop" : 1893, "state" : "UT" } +{ "_id" : "84070", "city" : "SANDY", "loc" : [ -111.881625, 40.579379 ], "pop" : 19422, "state" : "UT" } +{ "_id" : "84071", "city" : "STOCKTON", "loc" : [ -112.425214, 40.350451 ], "pop" : 490, "state" : "UT" } +{ "_id" : "84072", "city" : "TABIONA", "loc" : [ -110.702108, 40.382691 ], "pop" : 440, "state" : "UT" } +{ "_id" : "84073", "city" : "TALMAGE", "loc" : [ -110.396529, 40.174569 ], "pop" : 1743, "state" : "UT" } +{ "_id" : "84074", "city" : "TOOELE", "loc" : [ -112.300214, 40.545445 ], "pop" : 17588, "state" : "UT" } +{ "_id" : "84075", "city" : "SYRACUSE", "loc" : [ -112.0451, 41.086423 ], "pop" : 9737, "state" : "UT" } +{ "_id" : "84076", "city" : "TRIDELL", "loc" : [ -109.835906, 40.443593 ], "pop" : 363, "state" : "UT" } +{ "_id" : "84078", "city" : "VERNAL", "loc" : [ -109.546883, 40.440613 ], "pop" : 17641, "state" : "UT" } +{ "_id" : "84080", "city" : "VERNON", "loc" : [ -112.425961, 40.082609 ], "pop" : 200, "state" : "UT" } +{ "_id" : "84082", "city" : "WALLSBURG", "loc" : [ -111.464934, 40.365697 ], "pop" : 649, "state" : "UT" } +{ "_id" : "84083", "city" : "TROUT CREEK", "loc" : [ -113.993573, 40.597396 ], "pop" : 1801, "state" : "UT" } +{ "_id" : "84084", "city" : "WEST JORDAN", "loc" : [ -111.967662, 40.625429 ], "pop" : 36145, "state" : "UT" } +{ "_id" : "84085", "city" : "WHITEROCKS", "loc" : [ -109.917244, 40.452771 ], "pop" : 858, "state" : "UT" } +{ "_id" : "84086", "city" : "WOODRUFF", "loc" : [ -111.186848, 41.488783 ], "pop" : 359, "state" : "UT" } +{ "_id" : "84087", "city" : "WOODS CROSS", "loc" : [ -111.902712, 40.887447 ], "pop" : 8170, "state" : "UT" } +{ "_id" : "84088", "city" : "WEST JORDAN", "loc" : [ -111.964385, 40.595913 ], "pop" : 18592, "state" : "UT" } +{ "_id" : "84092", "city" : "ALTA", "loc" : [ -111.82736, 40.560245 ], "pop" : 25465, "state" : "UT" } +{ "_id" : "84093", "city" : "SANDY", "loc" : [ -111.830989, 40.592651 ], "pop" : 26702, "state" : "UT" } +{ "_id" : "84094", "city" : "SANDY", "loc" : [ -111.861716, 40.568757 ], "pop" : 26375, "state" : "UT" } +{ "_id" : "84101", "city" : "SALT LAKE CITY", "loc" : [ -111.896657, 40.755851 ], "pop" : 2449, "state" : "UT" } +{ "_id" : "84102", "city" : "SALT LAKE CITY", "loc" : [ -111.862721, 40.760034 ], "pop" : 15367, "state" : "UT" } +{ "_id" : "84103", "city" : "SALT LAKE CITY", "loc" : [ -111.874891, 40.777584 ], "pop" : 21427, "state" : "UT" } +{ "_id" : "84104", "city" : "SALT LAKE CITY", "loc" : [ -111.925979, 40.74985 ], "pop" : 16951, "state" : "UT" } +{ "_id" : "84105", "city" : "SALT LAKE CITY", "loc" : [ -111.858087, 40.737236 ], "pop" : 22228, "state" : "UT" } +{ "_id" : "84106", "city" : "SALT LAKE CITY", "loc" : [ -111.854841, 40.705597 ], "pop" : 30496, "state" : "UT" } +{ "_id" : "84107", "city" : "MURRAY", "loc" : [ -111.878383, 40.659014 ], "pop" : 28403, "state" : "UT" } +{ "_id" : "84108", "city" : "SALT LAKE CITY", "loc" : [ -111.825822, 40.737136 ], "pop" : 16873, "state" : "UT" } +{ "_id" : "84109", "city" : "SALT LAKE CITY", "loc" : [ -111.814218, 40.704251 ], "pop" : 24049, "state" : "UT" } +{ "_id" : "84111", "city" : "SALT LAKE CITY", "loc" : [ -111.881, 40.754834 ], "pop" : 8978, "state" : "UT" } +{ "_id" : "84112", "city" : "SALT LAKE CITY", "loc" : [ -111.827827, 40.752372 ], "pop" : 2555, "state" : "UT" } +{ "_id" : "84113", "city" : "SALT LAKE CITY", "loc" : [ -111.841825, 40.763057 ], "pop" : 1093, "state" : "UT" } +{ "_id" : "84115", "city" : "SOUTH SALT LAKE", "loc" : [ -111.883828, 40.715797 ], "pop" : 21776, "state" : "UT" } +{ "_id" : "84116", "city" : "SALT LAKE CITY", "loc" : [ -111.929054, 40.785697 ], "pop" : 23880, "state" : "UT" } +{ "_id" : "84117", "city" : "HOLLADAY", "loc" : [ -111.832943, 40.666302 ], "pop" : 23063, "state" : "UT" } +{ "_id" : "84118", "city" : "KEARNS", "loc" : [ -111.98521, 40.652759 ], "pop" : 55999, "state" : "UT" } +{ "_id" : "84119", "city" : "WEST VALLEY CITY", "loc" : [ -111.952964, 40.690977 ], "pop" : 38892, "state" : "UT" } +{ "_id" : "84120", "city" : "WEST VALLEY CITY", "loc" : [ -112.009783, 40.68708 ], "pop" : 52854, "state" : "UT" } +{ "_id" : "84121", "city" : "COTTONWOOD", "loc" : [ -111.82468, 40.623247 ], "pop" : 40235, "state" : "UT" } +{ "_id" : "84123", "city" : "MURRAY", "loc" : [ -111.919483, 40.660479 ], "pop" : 27766, "state" : "UT" } +{ "_id" : "84124", "city" : "HOLLADAY", "loc" : [ -111.820833, 40.67966 ], "pop" : 20402, "state" : "UT" } +{ "_id" : "84302", "city" : "BRIGHAM CITY", "loc" : [ -112.015177, 41.507921 ], "pop" : 17119, "state" : "UT" } +{ "_id" : "84305", "city" : "CLARKSTON", "loc" : [ -112.04859, 41.91877 ], "pop" : 665, "state" : "UT" } +{ "_id" : "84306", "city" : "COLLINSTON", "loc" : [ -112.124219, 41.78777 ], "pop" : 952, "state" : "UT" } +{ "_id" : "84307", "city" : "CORINNE", "loc" : [ -112.151388, 41.544986 ], "pop" : 1201, "state" : "UT" } +{ "_id" : "84308", "city" : "CORNISH", "loc" : [ -111.954241, 41.970178 ], "pop" : 250, "state" : "UT" } +{ "_id" : "84309", "city" : "DEWEYVILLE", "loc" : [ -112.094717, 41.697226 ], "pop" : 491, "state" : "UT" } +{ "_id" : "84310", "city" : "EDEN", "loc" : [ -111.855765, 41.330279 ], "pop" : 1707, "state" : "UT" } +{ "_id" : "84311", "city" : "FIELDING", "loc" : [ -112.118978, 41.811817 ], "pop" : 703, "state" : "UT" } +{ "_id" : "84312", "city" : "GARLAND", "loc" : [ -112.151635, 41.741319 ], "pop" : 2208, "state" : "UT" } +{ "_id" : "84313", "city" : "GROUSE CREEK", "loc" : [ -113.854043, 41.629727 ], "pop" : 124, "state" : "UT" } +{ "_id" : "84314", "city" : "HONEYVILLE", "loc" : [ -112.097425, 41.623754 ], "pop" : 2236, "state" : "UT" } +{ "_id" : "84315", "city" : "HOOPER", "loc" : [ -112.090371, 41.18267 ], "pop" : 10540, "state" : "UT" } +{ "_id" : "84317", "city" : "HUNTSVILLE", "loc" : [ -111.761821, 41.272139 ], "pop" : 2247, "state" : "UT" } +{ "_id" : "84319", "city" : "HYRUM", "loc" : [ -111.849, 41.631096 ], "pop" : 5352, "state" : "UT" } +{ "_id" : "84320", "city" : "LEWISTON", "loc" : [ -111.876814, 41.970087 ], "pop" : 1418, "state" : "UT" } +{ "_id" : "84321", "city" : "LOGAN", "loc" : [ -111.822613, 41.747025 ], "pop" : 40074, "state" : "UT" } +{ "_id" : "84324", "city" : "MANTUA", "loc" : [ -111.941646, 41.497496 ], "pop" : 715, "state" : "UT" } +{ "_id" : "84325", "city" : "MENDON", "loc" : [ -111.981692, 41.709989 ], "pop" : 1015, "state" : "UT" } +{ "_id" : "84328", "city" : "PARADISE", "loc" : [ -111.829665, 41.560009 ], "pop" : 916, "state" : "UT" } +{ "_id" : "84329", "city" : "PARK VALLEY", "loc" : [ -113.34776, 41.855125 ], "pop" : 281, "state" : "UT" } +{ "_id" : "84332", "city" : "PROVIDENCE", "loc" : [ -111.824389, 41.69522 ], "pop" : 7650, "state" : "UT" } +{ "_id" : "84333", "city" : "RICHMOND", "loc" : [ -111.806922, 41.928223 ], "pop" : 2556, "state" : "UT" } +{ "_id" : "84335", "city" : "SMITHFIELD", "loc" : [ -111.852813, 41.840328 ], "pop" : 7376, "state" : "UT" } +{ "_id" : "84336", "city" : "SNOWVILLE", "loc" : [ -112.353391, 41.840321 ], "pop" : 1982, "state" : "UT" } +{ "_id" : "84337", "city" : "TREMONTON", "loc" : [ -112.181293, 41.701564 ], "pop" : 6439, "state" : "UT" } +{ "_id" : "84338", "city" : "TRENTON", "loc" : [ -111.934033, 41.910453 ], "pop" : 450, "state" : "UT" } +{ "_id" : "84339", "city" : "WELLSVILLE", "loc" : [ -111.931676, 41.634302 ], "pop" : 2461, "state" : "UT" } +{ "_id" : "84340", "city" : "WILLARD", "loc" : [ -112.031653, 41.398944 ], "pop" : 2034, "state" : "UT" } +{ "_id" : "84401", "city" : "OGDEN", "loc" : [ -111.962121, 41.22148 ], "pop" : 21276, "state" : "UT" } +{ "_id" : "84403", "city" : "OGDEN", "loc" : [ -111.948927, 41.189412 ], "pop" : 28751, "state" : "UT" } +{ "_id" : "84404", "city" : "OGDEN", "loc" : [ -111.983686, 41.262727 ], "pop" : 35790, "state" : "UT" } +{ "_id" : "84405", "city" : "OGDEN", "loc" : [ -111.980945, 41.173928 ], "pop" : 18982, "state" : "UT" } +{ "_id" : "84414", "city" : "OGDEN", "loc" : [ -111.968924, 41.311201 ], "pop" : 16891, "state" : "UT" } +{ "_id" : "84501", "city" : "PRICE", "loc" : [ -110.808117, 39.602013 ], "pop" : 11741, "state" : "UT" } +{ "_id" : "84510", "city" : "ANETH", "loc" : [ -109.298281, 37.214671 ], "pop" : 3442, "state" : "UT" } +{ "_id" : "84511", "city" : "BLANDING", "loc" : [ -109.486599, 37.586342 ], "pop" : 4469, "state" : "UT" } +{ "_id" : "84520", "city" : "EAST CARBON", "loc" : [ -110.411308, 39.546088 ], "pop" : 1628, "state" : "UT" } +{ "_id" : "84523", "city" : "FERRON", "loc" : [ -111.146698, 39.069196 ], "pop" : 2349, "state" : "UT" } +{ "_id" : "84525", "city" : "GREEN RIVER", "loc" : [ -110.159817, 39.000243 ], "pop" : 919, "state" : "UT" } +{ "_id" : "84526", "city" : "HELPER", "loc" : [ -110.856, 39.673684 ], "pop" : 4005, "state" : "UT" } +{ "_id" : "84528", "city" : "HUNTINGTON", "loc" : [ -110.974094, 39.29202 ], "pop" : 7137, "state" : "UT" } +{ "_id" : "84531", "city" : "MEXICAN HAT", "loc" : [ -109.991865, 37.118429 ], "pop" : 647, "state" : "UT" } +{ "_id" : "84532", "city" : "MOAB", "loc" : [ -109.527087, 38.567674 ], "pop" : 6337, "state" : "UT" } +{ "_id" : "84533", "city" : "BULLFROG", "loc" : [ -110.506917, 37.459898 ], "pop" : 125, "state" : "UT" } +{ "_id" : "84535", "city" : "MONTICELLO", "loc" : [ -109.315289, 37.921709 ], "pop" : 2527, "state" : "UT" } +{ "_id" : "84536", "city" : "MONUMENT VALLEY", "loc" : [ -110.427335, 37.061425 ], "pop" : 1411, "state" : "UT" } +{ "_id" : "84540", "city" : "THOMPSON", "loc" : [ -109.794482, 38.988065 ], "pop" : 210, "state" : "UT" } +{ "_id" : "84542", "city" : "WELLINGTON", "loc" : [ -110.736954, 39.537257 ], "pop" : 2854, "state" : "UT" } +{ "_id" : "84601", "city" : "PROVO", "loc" : [ -111.675504, 40.231949 ], "pop" : 20121, "state" : "UT" } +{ "_id" : "84604", "city" : "PROVO", "loc" : [ -111.654906, 40.260681 ], "pop" : 43841, "state" : "UT" } +{ "_id" : "84606", "city" : "PROVO", "loc" : [ -111.644724, 40.234675 ], "pop" : 23536, "state" : "UT" } +{ "_id" : "84621", "city" : "AXTELL", "loc" : [ -111.824303, 39.053248 ], "pop" : 167, "state" : "UT" } +{ "_id" : "84622", "city" : "CENTERFIELD", "loc" : [ -111.818516, 39.125083 ], "pop" : 945, "state" : "UT" } +{ "_id" : "84624", "city" : "DELTA", "loc" : [ -112.531892, 39.375534 ], "pop" : 5673, "state" : "UT" } +{ "_id" : "84627", "city" : "EPHRAIM", "loc" : [ -111.582301, 39.359983 ], "pop" : 3492, "state" : "UT" } +{ "_id" : "84628", "city" : "EUREKA", "loc" : [ -112.117448, 39.954094 ], "pop" : 600, "state" : "UT" } +{ "_id" : "84629", "city" : "FAIRVIEW", "loc" : [ -111.495287, 39.645318 ], "pop" : 2089, "state" : "UT" } +{ "_id" : "84630", "city" : "FAYETTE", "loc" : [ -111.849712, 39.231533 ], "pop" : 207, "state" : "UT" } +{ "_id" : "84631", "city" : "FILLMORE", "loc" : [ -112.331321, 38.980539 ], "pop" : 3930, "state" : "UT" } +{ "_id" : "84634", "city" : "GUNNISON", "loc" : [ -111.816701, 39.154464 ], "pop" : 1330, "state" : "UT" } +{ "_id" : "84635", "city" : "HINCKLEY", "loc" : [ -112.671577, 39.330842 ], "pop" : 983, "state" : "UT" } +{ "_id" : "84642", "city" : "MANTI", "loc" : [ -111.651372, 39.235389 ], "pop" : 3088, "state" : "UT" } +{ "_id" : "84645", "city" : "MONA", "loc" : [ -111.848001, 39.838165 ], "pop" : 826, "state" : "UT" } +{ "_id" : "84647", "city" : "MOUNT PLEASANT", "loc" : [ -111.503854, 39.523227 ], "pop" : 4979, "state" : "UT" } +{ "_id" : "84648", "city" : "NEPHI", "loc" : [ -111.8359, 39.692275 ], "pop" : 4200, "state" : "UT" } +{ "_id" : "84650", "city" : "OASIS", "loc" : [ -112.648079, 39.27067 ], "pop" : 500, "state" : "UT" } +{ "_id" : "84651", "city" : "PAYSON", "loc" : [ -111.732138, 40.044866 ], "pop" : 13960, "state" : "UT" } +{ "_id" : "84653", "city" : "WOODLAND HILLS", "loc" : [ -111.65906, 40.042702 ], "pop" : 3766, "state" : "UT" } +{ "_id" : "84654", "city" : "SALINA", "loc" : [ -111.881072, 38.956028 ], "pop" : 3716, "state" : "UT" } +{ "_id" : "84655", "city" : "GENOLA", "loc" : [ -111.793819, 39.980356 ], "pop" : 3647, "state" : "UT" } +{ "_id" : "84660", "city" : "SPANISH FORK", "loc" : [ -111.646246, 40.10991 ], "pop" : 12851, "state" : "UT" } +{ "_id" : "84663", "city" : "SPRINGVILLE", "loc" : [ -111.598664, 40.162528 ], "pop" : 14403, "state" : "UT" } +{ "_id" : "84664", "city" : "MAPLETON", "loc" : [ -111.580122, 40.133711 ], "pop" : 3427, "state" : "UT" } +{ "_id" : "84701", "city" : "VENICE", "loc" : [ -112.062253, 38.757075 ], "pop" : 8412, "state" : "UT" } +{ "_id" : "84710", "city" : "ALTON", "loc" : [ -112.548389, 37.469905 ], "pop" : 159, "state" : "UT" } +{ "_id" : "84712", "city" : "ANTIMONY", "loc" : [ -111.993029, 38.1015 ], "pop" : 90, "state" : "UT" } +{ "_id" : "84713", "city" : "BEAVER", "loc" : [ -112.629916, 38.28071 ], "pop" : 2560, "state" : "UT" } +{ "_id" : "84714", "city" : "BERYL", "loc" : [ -113.619586, 37.96005 ], "pop" : 12, "state" : "UT" } +{ "_id" : "84716", "city" : "BOULDER", "loc" : [ -111.426646, 37.916606 ], "pop" : 131, "state" : "UT" } +{ "_id" : "84717", "city" : "BRYCE CANYON", "loc" : [ -112.074311, 37.608427 ], "pop" : 958, "state" : "UT" } +{ "_id" : "84719", "city" : "BRIAN HEAD", "loc" : [ -112.843698, 37.698465 ], "pop" : 111, "state" : "UT" } +{ "_id" : "84720", "city" : "PINTURA", "loc" : [ -113.074513, 37.689544 ], "pop" : 17392, "state" : "UT" } +{ "_id" : "84722", "city" : "CENTRAL", "loc" : [ -113.717199, 37.567734 ], "pop" : 1127, "state" : "UT" } +{ "_id" : "84726", "city" : "ESCALANTE", "loc" : [ -111.603695, 37.769839 ], "pop" : 955, "state" : "UT" } +{ "_id" : "84728", "city" : "GARRISON", "loc" : [ -113.894858, 39.074382 ], "pop" : 247, "state" : "UT" } +{ "_id" : "84729", "city" : "GLENDALE", "loc" : [ -112.603491, 37.321897 ], "pop" : 287, "state" : "UT" } +{ "_id" : "84731", "city" : "GREENVILLE", "loc" : [ -112.708404, 38.263582 ], "pop" : 116, "state" : "UT" } +{ "_id" : "84734", "city" : "HANKSVILLE", "loc" : [ -110.813744, 38.252051 ], "pop" : 373, "state" : "UT" } +{ "_id" : "84737", "city" : "HURRICANE", "loc" : [ -113.224706, 37.169098 ], "pop" : 9174, "state" : "UT" } +{ "_id" : "84739", "city" : "JOSEPH", "loc" : [ -112.225119, 38.622092 ], "pop" : 289, "state" : "UT" } +{ "_id" : "84741", "city" : "BIG WATER", "loc" : [ -112.345374, 37.072085 ], "pop" : 4174, "state" : "UT" } +{ "_id" : "84743", "city" : "KINGSTON", "loc" : [ -112.204864, 38.215772 ], "pop" : 825, "state" : "UT" } +{ "_id" : "84747", "city" : "FREMONT", "loc" : [ -111.629233, 38.417266 ], "pop" : 987, "state" : "UT" } +{ "_id" : "84750", "city" : "MARYSVALE", "loc" : [ -112.251848, 38.444924 ], "pop" : 452, "state" : "UT" } +{ "_id" : "84751", "city" : "MILFORD", "loc" : [ -112.993377, 38.331071 ], "pop" : 2089, "state" : "UT" } +{ "_id" : "84753", "city" : "MODENA", "loc" : [ -113.919282, 37.799452 ], "pop" : 9, "state" : "UT" } +{ "_id" : "84754", "city" : "AUSTIN", "loc" : [ -112.132434, 38.645305 ], "pop" : 2995, "state" : "UT" } +{ "_id" : "84755", "city" : "MOUNT CARMEL", "loc" : [ -112.670034, 37.237821 ], "pop" : 43, "state" : "UT" } +{ "_id" : "84756", "city" : "NEWCASTLE", "loc" : [ -113.661479, 37.736049 ], "pop" : 758, "state" : "UT" } +{ "_id" : "84758", "city" : "ORDERVILLE", "loc" : [ -112.642045, 37.274419 ], "pop" : 506, "state" : "UT" } +{ "_id" : "84759", "city" : "PANGUITCH", "loc" : [ -112.436886, 37.80777 ], "pop" : 1797, "state" : "UT" } +{ "_id" : "84760", "city" : "PARAGONAH", "loc" : [ -112.773972, 37.89172 ], "pop" : 334, "state" : "UT" } +{ "_id" : "84761", "city" : "PAROWAN", "loc" : [ -112.832251, 37.844861 ], "pop" : 1988, "state" : "UT" } +{ "_id" : "84766", "city" : "SEVIER", "loc" : [ -112.392126, 38.590709 ], "pop" : 19, "state" : "UT" } +{ "_id" : "84770", "city" : "ST GEORGE", "loc" : [ -113.595261, 37.106651 ], "pop" : 33146, "state" : "UT" } +{ "_id" : "84772", "city" : "SUMMIT", "loc" : [ -112.913407, 37.803397 ], "pop" : 185, "state" : "UT" } +{ "_id" : "84773", "city" : "TEASDALE", "loc" : [ -111.43346, 38.285334 ], "pop" : 430, "state" : "UT" } +{ "_id" : "84775", "city" : "TORREY", "loc" : [ -111.547439, 38.334993 ], "pop" : 436, "state" : "UT" } +{ "_id" : "84780", "city" : "WASHINGTON", "loc" : [ -113.505043, 37.136379 ], "pop" : 4134, "state" : "UT" } +{ "_id" : "84781", "city" : "PINE VALLEY", "loc" : [ -113.517708, 37.389772 ], "pop" : 31, "state" : "UT" } +{ "_id" : "84782", "city" : "VEYO", "loc" : [ -113.666758, 37.35896 ], "pop" : 449, "state" : "UT" } +{ "_id" : "84783", "city" : "DAMMERON VALLEY", "loc" : [ -113.658553, 37.284899 ], "pop" : 499, "state" : "UT" } +{ "_id" : "85003", "city" : "PHOENIX", "loc" : [ -112.077428, 33.451095 ], "pop" : 10633, "state" : "AZ" } +{ "_id" : "85004", "city" : "PHOENIX", "loc" : [ -112.068584, 33.455708 ], "pop" : 4491, "state" : "AZ" } +{ "_id" : "85006", "city" : "PHOENIX", "loc" : [ -112.047357, 33.465016 ], "pop" : 26747, "state" : "AZ" } +{ "_id" : "85007", "city" : "PHOENIX", "loc" : [ -112.089326, 33.452298 ], "pop" : 13650, "state" : "AZ" } +{ "_id" : "85008", "city" : "PHOENIX", "loc" : [ -111.998381, 33.466457 ], "pop" : 41733, "state" : "AZ" } +{ "_id" : "85009", "city" : "PHOENIX", "loc" : [ -112.128368, 33.456373 ], "pop" : 41512, "state" : "AZ" } +{ "_id" : "85012", "city" : "PHOENIX", "loc" : [ -112.067816, 33.509744 ], "pop" : 6141, "state" : "AZ" } +{ "_id" : "85013", "city" : "PHOENIX", "loc" : [ -112.082657, 33.508493 ], "pop" : 18467, "state" : "AZ" } +{ "_id" : "85014", "city" : "PHOENIX", "loc" : [ -112.05557, 33.510263 ], "pop" : 22646, "state" : "AZ" } +{ "_id" : "85015", "city" : "PHOENIX", "loc" : [ -112.101064, 33.508164 ], "pop" : 32497, "state" : "AZ" } +{ "_id" : "85016", "city" : "PHOENIX", "loc" : [ -112.030496, 33.502117 ], "pop" : 29527, "state" : "AZ" } +{ "_id" : "85017", "city" : "PHOENIX", "loc" : [ -112.121232, 33.515263 ], "pop" : 27741, "state" : "AZ" } +{ "_id" : "85018", "city" : "PHOENIX", "loc" : [ -111.988259, 33.495796 ], "pop" : 32926, "state" : "AZ" } +{ "_id" : "85019", "city" : "PHOENIX", "loc" : [ -112.141681, 33.512284 ], "pop" : 21879, "state" : "AZ" } +{ "_id" : "85020", "city" : "PHOENIX", "loc" : [ -112.055888, 33.562281 ], "pop" : 29043, "state" : "AZ" } +{ "_id" : "85021", "city" : "PHOENIX", "loc" : [ -112.092686, 33.559965 ], "pop" : 31201, "state" : "AZ" } +{ "_id" : "85022", "city" : "PHOENIX", "loc" : [ -112.052008, 33.631513 ], "pop" : 33573, "state" : "AZ" } +{ "_id" : "85023", "city" : "PHOENIX", "loc" : [ -112.111838, 33.632383 ], "pop" : 54668, "state" : "AZ" } +{ "_id" : "85024", "city" : "PHOENIX", "loc" : [ -112.036956, 33.661664 ], "pop" : 14090, "state" : "AZ" } +{ "_id" : "85027", "city" : "NEW RIVER STAGE", "loc" : [ -112.102723, 33.667157 ], "pop" : 24843, "state" : "AZ" } +{ "_id" : "85028", "city" : "PHOENIX", "loc" : [ -112.008724, 33.585115 ], "pop" : 22662, "state" : "AZ" } +{ "_id" : "85029", "city" : "PHOENIX", "loc" : [ -112.119913, 33.596133 ], "pop" : 40764, "state" : "AZ" } +{ "_id" : "85031", "city" : "PHOENIX", "loc" : [ -112.16963, 33.493909 ], "pop" : 21088, "state" : "AZ" } +{ "_id" : "85032", "city" : "PHOENIX", "loc" : [ -112.004369, 33.623807 ], "pop" : 53113, "state" : "AZ" } +{ "_id" : "85033", "city" : "PHOENIX", "loc" : [ -112.213185, 33.494426 ], "pop" : 41367, "state" : "AZ" } +{ "_id" : "85034", "city" : "PHOENIX", "loc" : [ -112.042135, 33.441251 ], "pop" : 9824, "state" : "AZ" } +{ "_id" : "85035", "city" : "PHOENIX", "loc" : [ -112.183177, 33.472353 ], "pop" : 35384, "state" : "AZ" } +{ "_id" : "85037", "city" : "PHOENIX", "loc" : [ -112.246763, 33.491278 ], "pop" : 13924, "state" : "AZ" } +{ "_id" : "85039", "city" : "PHOENIX", "loc" : [ -112.288573, 33.495362 ], "pop" : 7914, "state" : "AZ" } +{ "_id" : "85040", "city" : "PHOENIX", "loc" : [ -112.03126, 33.390475 ], "pop" : 47527, "state" : "AZ" } +{ "_id" : "85041", "city" : "PHOENIX", "loc" : [ -112.095437, 33.388882 ], "pop" : 29343, "state" : "AZ" } +{ "_id" : "85043", "city" : "PHOENIX", "loc" : [ -112.197245, 33.449056 ], "pop" : 7054, "state" : "AZ" } +{ "_id" : "85044", "city" : "PHOENIX", "loc" : [ -111.9943, 33.329124 ], "pop" : 32053, "state" : "AZ" } +{ "_id" : "85051", "city" : "PHOENIX", "loc" : [ -112.133168, 33.559113 ], "pop" : 35671, "state" : "AZ" } +{ "_id" : "85201", "city" : "MESA", "loc" : [ -111.846931, 33.43174 ], "pop" : 40017, "state" : "AZ" } +{ "_id" : "85202", "city" : "MESA", "loc" : [ -111.872429, 33.385095 ], "pop" : 40729, "state" : "AZ" } +{ "_id" : "85203", "city" : "MESA", "loc" : [ -111.805697, 33.436952 ], "pop" : 32853, "state" : "AZ" } +{ "_id" : "85204", "city" : "MESA", "loc" : [ -111.789554, 33.399168 ], "pop" : 55180, "state" : "AZ" } +{ "_id" : "85205", "city" : "MESA", "loc" : [ -111.712939, 33.43685 ], "pop" : 35676, "state" : "AZ" } +{ "_id" : "85206", "city" : "MESA", "loc" : [ -111.724223, 33.402603 ], "pop" : 21274, "state" : "AZ" } +{ "_id" : "85207", "city" : "MESA", "loc" : [ -111.64256, 33.432073 ], "pop" : 12547, "state" : "AZ" } +{ "_id" : "85208", "city" : "MESA", "loc" : [ -111.651297, 33.398416 ], "pop" : 22113, "state" : "AZ" } +{ "_id" : "85210", "city" : "MESA", "loc" : [ -111.842757, 33.38867 ], "pop" : 32467, "state" : "AZ" } +{ "_id" : "85213", "city" : "MESA", "loc" : [ -111.773114, 33.436688 ], "pop" : 23500, "state" : "AZ" } +{ "_id" : "85219", "city" : "GOLD CANYON", "loc" : [ -111.51331, 33.360787 ], "pop" : 14112, "state" : "AZ" } +{ "_id" : "85220", "city" : "APACHE JUNCTION", "loc" : [ -111.571818, 33.415211 ], "pop" : 19342, "state" : "AZ" } +{ "_id" : "85222", "city" : "ELEVEN MILE CORN", "loc" : [ -111.756093, 32.892667 ], "pop" : 26134, "state" : "AZ" } +{ "_id" : "85224", "city" : "CHANDLER", "loc" : [ -111.863156, 33.330091 ], "pop" : 54023, "state" : "AZ" } +{ "_id" : "85225", "city" : "CHANDLER", "loc" : [ -111.823881, 33.310505 ], "pop" : 15678, "state" : "AZ" } +{ "_id" : "85226", "city" : "CHANDLER", "loc" : [ -111.919827, 33.30917 ], "pop" : 17639, "state" : "AZ" } +{ "_id" : "85228", "city" : "COOLIDGE", "loc" : [ -111.534378, 32.957399 ], "pop" : 10698, "state" : "AZ" } +{ "_id" : "85231", "city" : "ELOY", "loc" : [ -111.583275, 32.750929 ], "pop" : 10670, "state" : "AZ" } +{ "_id" : "85232", "city" : "FLORENCE", "loc" : [ -111.361234, 32.996881 ], "pop" : 9888, "state" : "AZ" } +{ "_id" : "85234", "city" : "GILBERT", "loc" : [ -111.780876, 33.352746 ], "pop" : 32606, "state" : "AZ" } +{ "_id" : "85236", "city" : "HIGLEY", "loc" : [ -111.696926, 33.302382 ], "pop" : 3583, "state" : "AZ" } +{ "_id" : "85237", "city" : "KEARNY", "loc" : [ -110.91227, 33.059443 ], "pop" : 2736, "state" : "AZ" } +{ "_id" : "85239", "city" : "MOBILE", "loc" : [ -112.075228, 32.987379 ], "pop" : 5026, "state" : "AZ" } +{ "_id" : "85240", "city" : "WILLIAMS AFB", "loc" : [ -111.668801, 33.310289 ], "pop" : 2574, "state" : "AZ" } +{ "_id" : "85242", "city" : "ARIZONA BOYS RAN", "loc" : [ -111.643596, 33.238577 ], "pop" : 2569, "state" : "AZ" } +{ "_id" : "85247", "city" : "SACATON", "loc" : [ -111.775162, 33.097699 ], "pop" : 6792, "state" : "AZ" } +{ "_id" : "85248", "city" : "SUN LAKES", "loc" : [ -111.866899, 33.223056 ], "pop" : 9399, "state" : "AZ" } +{ "_id" : "85249", "city" : "CHANDLER", "loc" : [ -111.774486, 33.241384 ], "pop" : 3871, "state" : "AZ" } +{ "_id" : "85250", "city" : "SCOTTSDALE", "loc" : [ -111.904926, 33.521767 ], "pop" : 16133, "state" : "AZ" } +{ "_id" : "85251", "city" : "SCOTTSDALE", "loc" : [ -111.916697, 33.493559 ], "pop" : 30869, "state" : "AZ" } +{ "_id" : "85253", "city" : "PARADISE VALLEY", "loc" : [ -111.956546, 33.549439 ], "pop" : 15289, "state" : "AZ" } +{ "_id" : "85254", "city" : "SCOTTSDALE", "loc" : [ -111.955422, 33.616476 ], "pop" : 37414, "state" : "AZ" } +{ "_id" : "85255", "city" : "SCOTTSDALE", "loc" : [ -111.889213, 33.696801 ], "pop" : 2927, "state" : "AZ" } +{ "_id" : "85256", "city" : "SCOTTSDALE", "loc" : [ -111.85333, 33.485793 ], "pop" : 3367, "state" : "AZ" } +{ "_id" : "85257", "city" : "SCOTTSDALE", "loc" : [ -111.915129, 33.46693 ], "pop" : 30182, "state" : "AZ" } +{ "_id" : "85258", "city" : "SCOTTSDALE", "loc" : [ -111.893067, 33.564747 ], "pop" : 20867, "state" : "AZ" } +{ "_id" : "85259", "city" : "SCOTTSDALE", "loc" : [ -111.840438, 33.587943 ], "pop" : 7802, "state" : "AZ" } +{ "_id" : "85260", "city" : "SCOTTSDALE", "loc" : [ -111.88671, 33.601323 ], "pop" : 17908, "state" : "AZ" } +{ "_id" : "85262", "city" : "SCOTTSDALE", "loc" : [ -111.779135, 33.77524 ], "pop" : 1614, "state" : "AZ" } +{ "_id" : "85264", "city" : "FORT MCDOWELL", "loc" : [ -111.68062, 33.611807 ], "pop" : 619, "state" : "AZ" } +{ "_id" : "85268", "city" : "FOUNTAIN HILLS", "loc" : [ -111.723685, 33.608489 ], "pop" : 10030, "state" : "AZ" } +{ "_id" : "85272", "city" : "STANFIELD", "loc" : [ -111.965987, 32.882321 ], "pop" : 644, "state" : "AZ" } +{ "_id" : "85273", "city" : "SUPERIOR", "loc" : [ -111.09846, 33.288716 ], "pop" : 3901, "state" : "AZ" } +{ "_id" : "85281", "city" : "TEMPE", "loc" : [ -111.926144, 33.422675 ], "pop" : 49218, "state" : "AZ" } +{ "_id" : "85282", "city" : "TEMPE", "loc" : [ -111.924896, 33.391669 ], "pop" : 47890, "state" : "AZ" } +{ "_id" : "85283", "city" : "TEMPE", "loc" : [ -111.93122, 33.366524 ], "pop" : 38332, "state" : "AZ" } +{ "_id" : "85284", "city" : "TEMPE", "loc" : [ -111.919696, 33.336302 ], "pop" : 12320, "state" : "AZ" } +{ "_id" : "85292", "city" : "WINKELMAN", "loc" : [ -110.772682, 33.00572 ], "pop" : 1977, "state" : "AZ" } +{ "_id" : "85301", "city" : "GLENDALE", "loc" : [ -112.176703, 33.531122 ], "pop" : 46331, "state" : "AZ" } +{ "_id" : "85302", "city" : "GLENDALE", "loc" : [ -112.175289, 33.567487 ], "pop" : 32094, "state" : "AZ" } +{ "_id" : "85303", "city" : "GLENDALE", "loc" : [ -112.214937, 33.526215 ], "pop" : 16045, "state" : "AZ" } +{ "_id" : "85304", "city" : "GLENDALE", "loc" : [ -112.174575, 33.594289 ], "pop" : 26463, "state" : "AZ" } +{ "_id" : "85305", "city" : "GLENDALE", "loc" : [ -112.248232, 33.529103 ], "pop" : 1424, "state" : "AZ" } +{ "_id" : "85306", "city" : "GLENDALE", "loc" : [ -112.177563, 33.623882 ], "pop" : 23493, "state" : "AZ" } +{ "_id" : "85307", "city" : "LUKE AFB", "loc" : [ -112.326735, 33.534879 ], "pop" : 4120, "state" : "AZ" } +{ "_id" : "85308", "city" : "GLENDALE", "loc" : [ -112.169391, 33.653924 ], "pop" : 31532, "state" : "AZ" } +{ "_id" : "85309", "city" : "LUKE AFB", "loc" : [ -112.356186, 33.539993 ], "pop" : 3601, "state" : "AZ" } +{ "_id" : "85310", "city" : "GLENDALE", "loc" : [ -112.164131, 33.704726 ], "pop" : 5369, "state" : "AZ" } +{ "_id" : "85321", "city" : "WHY", "loc" : [ -112.858681, 32.373485 ], "pop" : 3288, "state" : "AZ" } +{ "_id" : "85322", "city" : "ARLINGTON", "loc" : [ -112.789058, 33.313317 ], "pop" : 329, "state" : "AZ" } +{ "_id" : "85323", "city" : "AVONDALE", "loc" : [ -112.343754, 33.432114 ], "pop" : 12321, "state" : "AZ" } +{ "_id" : "85324", "city" : "ROCK SPRINGS", "loc" : [ -112.130956, 34.073197 ], "pop" : 1819, "state" : "AZ" } +{ "_id" : "85326", "city" : "BUCKEYE", "loc" : [ -112.607728, 33.38896 ], "pop" : 13086, "state" : "AZ" } +{ "_id" : "85328", "city" : "CIBOLA", "loc" : [ -114.512204, 33.614886 ], "pop" : 1285, "state" : "AZ" } +{ "_id" : "85331", "city" : "CAVE CREEK", "loc" : [ -112.015106, 33.821896 ], "pop" : 13654, "state" : "AZ" } +{ "_id" : "85332", "city" : "CONGRESS", "loc" : [ -112.76801, 34.176425 ], "pop" : 2314, "state" : "AZ" } +{ "_id" : "85333", "city" : "DATELAND", "loc" : [ -113.463126, 32.867886 ], "pop" : 659, "state" : "AZ" } +{ "_id" : "85335", "city" : "EL MIRAGE", "loc" : [ -112.324147, 33.608153 ], "pop" : 5234, "state" : "AZ" } +{ "_id" : "85337", "city" : "GILA BEND", "loc" : [ -112.746832, 32.93059 ], "pop" : 2898, "state" : "AZ" } +{ "_id" : "85338", "city" : "GOODYEAR", "loc" : [ -112.383385, 33.436809 ], "pop" : 5819, "state" : "AZ" } +{ "_id" : "85339", "city" : "LAVEEN", "loc" : [ -112.171618, 33.343572 ], "pop" : 6187, "state" : "AZ" } +{ "_id" : "85340", "city" : "LITCHFIELD PARK", "loc" : [ -112.380497, 33.494127 ], "pop" : 6349, "state" : "AZ" } +{ "_id" : "85342", "city" : "MORRISTOWN", "loc" : [ -112.548331, 33.772993 ], "pop" : 2878, "state" : "AZ" } +{ "_id" : "85343", "city" : "PALO VERDE", "loc" : [ -112.646662, 33.34848 ], "pop" : 669, "state" : "AZ" } +{ "_id" : "85344", "city" : "EMPIRE LANDING", "loc" : [ -114.266342, 34.0254 ], "pop" : 11143, "state" : "AZ" } +{ "_id" : "85345", "city" : "PEORIA", "loc" : [ -112.234424, 33.576135 ], "pop" : 37607, "state" : "AZ" } +{ "_id" : "85347", "city" : "ROLL", "loc" : [ -113.564287, 32.936635 ], "pop" : 959, "state" : "AZ" } +{ "_id" : "85348", "city" : "SALOME", "loc" : [ -113.571459, 33.748141 ], "pop" : 1279, "state" : "AZ" } +{ "_id" : "85350", "city" : "SOMERTON", "loc" : [ -114.7127, 32.563398 ], "pop" : 15339, "state" : "AZ" } +{ "_id" : "85351", "city" : "SUN CITY", "loc" : [ -112.279701, 33.606104 ], "pop" : 31102, "state" : "AZ" } +{ "_id" : "85353", "city" : "TOLLESON", "loc" : [ -112.277444, 33.434686 ], "pop" : 9485, "state" : "AZ" } +{ "_id" : "85354", "city" : "TONOPAH", "loc" : [ -112.952785, 33.422797 ], "pop" : 95, "state" : "AZ" } +{ "_id" : "85355", "city" : "WADDELL", "loc" : [ -112.43869, 33.567285 ], "pop" : 2125, "state" : "AZ" } +{ "_id" : "85356", "city" : "WELLTON", "loc" : [ -114.176616, 32.749251 ], "pop" : 4778, "state" : "AZ" } +{ "_id" : "85361", "city" : "WITTMANN", "loc" : [ -112.446578, 33.726425 ], "pop" : 789, "state" : "AZ" } +{ "_id" : "85362", "city" : "YARNELL", "loc" : [ -112.62166, 34.414076 ], "pop" : 455, "state" : "AZ" } +{ "_id" : "85363", "city" : "YOUNGTOWN", "loc" : [ -112.301305, 33.590751 ], "pop" : 2351, "state" : "AZ" } +{ "_id" : "85364", "city" : "YUMA", "loc" : [ -114.642362, 32.701507 ], "pop" : 57131, "state" : "AZ" } +{ "_id" : "85365", "city" : "YUMA PROVING GRO", "loc" : [ -114.548633, 32.671352 ], "pop" : 28179, "state" : "AZ" } +{ "_id" : "85373", "city" : "SUN CITY", "loc" : [ -112.321397, 33.658756 ], "pop" : 25878, "state" : "AZ" } +{ "_id" : "85374", "city" : "SURPRISE", "loc" : [ -112.33143, 33.630028 ], "pop" : 5042, "state" : "AZ" } +{ "_id" : "85375", "city" : "SUN CITY WEST", "loc" : [ -112.255434, 33.662576 ], "pop" : 5702, "state" : "AZ" } +{ "_id" : "85381", "city" : "PEORIA", "loc" : [ -112.223723, 33.604761 ], "pop" : 9624, "state" : "AZ" } +{ "_id" : "85382", "city" : "PEORIA", "loc" : [ -112.207177, 33.63083 ], "pop" : 1738, "state" : "AZ" } +{ "_id" : "85390", "city" : "WICKENBURG", "loc" : [ -112.738973, 33.911282 ], "pop" : 7994, "state" : "AZ" } +{ "_id" : "85501", "city" : "GLOBE", "loc" : [ -110.789247, 33.402426 ], "pop" : 13240, "state" : "AZ" } +{ "_id" : "85530", "city" : "BYLAS", "loc" : [ -110.11702, 33.126549 ], "pop" : 1371, "state" : "AZ" } +{ "_id" : "85533", "city" : "CLIFTON", "loc" : [ -109.246199, 33.132343 ], "pop" : 376, "state" : "AZ" } +{ "_id" : "85534", "city" : "FRANKLIN", "loc" : [ -109.129575, 32.793976 ], "pop" : 2395, "state" : "AZ" } +{ "_id" : "85535", "city" : "EDEN", "loc" : [ -109.953682, 33.028629 ], "pop" : 55, "state" : "AZ" } +{ "_id" : "85539", "city" : "MIAMI", "loc" : [ -110.881182, 33.431928 ], "pop" : 4866, "state" : "AZ" } +{ "_id" : "85540", "city" : "MORENCI", "loc" : [ -109.311517, 33.043593 ], "pop" : 5223, "state" : "AZ" } +{ "_id" : "85541", "city" : "PAYSON", "loc" : [ -111.287774, 34.219779 ], "pop" : 13456, "state" : "AZ" } +{ "_id" : "85542", "city" : "PERIDOT", "loc" : [ -110.37252, 33.478874 ], "pop" : 4878, "state" : "AZ" } +{ "_id" : "85543", "city" : "PIMA", "loc" : [ -109.856009, 32.909661 ], "pop" : 2881, "state" : "AZ" } +{ "_id" : "85544", "city" : "STRAWBERRY", "loc" : [ -111.473483, 34.390915 ], "pop" : 1903, "state" : "AZ" } +{ "_id" : "85545", "city" : "ROOSEVELT", "loc" : [ -110.974884, 33.635753 ], "pop" : 65, "state" : "AZ" } +{ "_id" : "85546", "city" : "SAFFORD", "loc" : [ -109.626641, 32.829491 ], "pop" : 2676, "state" : "AZ" } +{ "_id" : "85550", "city" : "SAN CARLOS", "loc" : [ -110.395323, 33.310643 ], "pop" : 2307, "state" : "AZ" } +{ "_id" : "85552", "city" : "THATCHER", "loc" : [ -109.730245, 32.819902 ], "pop" : 15375, "state" : "AZ" } +{ "_id" : "85602", "city" : "BENSON", "loc" : [ -110.294113, 31.98826 ], "pop" : 6141, "state" : "AZ" } +{ "_id" : "85603", "city" : "BISBEE", "loc" : [ -109.911736, 31.408557 ], "pop" : 8471, "state" : "AZ" } +{ "_id" : "85606", "city" : "COCHISE", "loc" : [ -109.92393, 32.097891 ], "pop" : 290, "state" : "AZ" } +{ "_id" : "85607", "city" : "DOUGLAS", "loc" : [ -109.544698, 31.35111 ], "pop" : 17350, "state" : "AZ" } +{ "_id" : "85610", "city" : "ELFRIDA", "loc" : [ -109.619277, 31.713891 ], "pop" : 1655, "state" : "AZ" } +{ "_id" : "85611", "city" : "ELGIN", "loc" : [ -110.611403, 31.66002 ], "pop" : 638, "state" : "AZ" } +{ "_id" : "85613", "city" : "FORT HUACHUCA", "loc" : [ -110.344131, 31.558735 ], "pop" : 8710, "state" : "AZ" } +{ "_id" : "85614", "city" : "GREEN VALLEY", "loc" : [ -111.000253, 31.854271 ], "pop" : 15530, "state" : "AZ" } +{ "_id" : "85615", "city" : "HEREFORD", "loc" : [ -110.204728, 31.403545 ], "pop" : 1762, "state" : "AZ" } +{ "_id" : "85616", "city" : "HUACHUCA CITY", "loc" : [ -110.333414, 31.663896 ], "pop" : 3639, "state" : "AZ" } +{ "_id" : "85617", "city" : "MC NEAL", "loc" : [ -109.630971, 31.502969 ], "pop" : 3135, "state" : "AZ" } +{ "_id" : "85618", "city" : "MAMMOTH", "loc" : [ -110.643961, 32.723875 ], "pop" : 1876, "state" : "AZ" } +{ "_id" : "85621", "city" : "NOGALES", "loc" : [ -110.943508, 31.376969 ], "pop" : 25506, "state" : "AZ" } +{ "_id" : "85623", "city" : "ORACLE", "loc" : [ -110.796126, 32.600506 ], "pop" : 3833, "state" : "AZ" } +{ "_id" : "85624", "city" : "PATAGONIA", "loc" : [ -110.696774, 31.535317 ], "pop" : 1430, "state" : "AZ" } +{ "_id" : "85625", "city" : "PEARCE", "loc" : [ -109.795032, 31.966608 ], "pop" : 2421, "state" : "AZ" } +{ "_id" : "85629", "city" : "SAHUARITA", "loc" : [ -111.000154, 31.945169 ], "pop" : 2973, "state" : "AZ" } +{ "_id" : "85630", "city" : "SAINT DAVID", "loc" : [ -110.215377, 31.897251 ], "pop" : 1928, "state" : "AZ" } +{ "_id" : "85631", "city" : "SAN MANUEL", "loc" : [ -110.656788, 32.695831 ], "pop" : 6253, "state" : "AZ" } +{ "_id" : "85632", "city" : "PORTAL", "loc" : [ -109.367152, 32.208167 ], "pop" : 1485, "state" : "AZ" } +{ "_id" : "85634", "city" : "PISINEMO", "loc" : [ -111.922207, 32.031572 ], "pop" : 9003, "state" : "AZ" } +{ "_id" : "85635", "city" : "SIERRA VISTA", "loc" : [ -110.266565, 31.536467 ], "pop" : 33700, "state" : "AZ" } +{ "_id" : "85637", "city" : "SONOITA", "loc" : [ -110.724418, 31.866154 ], "pop" : 1399, "state" : "AZ" } +{ "_id" : "85638", "city" : "TOMBSTONE", "loc" : [ -110.058449, 31.721598 ], "pop" : 1556, "state" : "AZ" } +{ "_id" : "85640", "city" : "AMADO", "loc" : [ -111.039693, 31.594194 ], "pop" : 813, "state" : "AZ" } +{ "_id" : "85641", "city" : "VAIL", "loc" : [ -110.88375, 32.035926 ], "pop" : 2843, "state" : "AZ" } +{ "_id" : "85643", "city" : "WILLCOX", "loc" : [ -109.863111, 32.372977 ], "pop" : 7297, "state" : "AZ" } +{ "_id" : "85645", "city" : "AMADO", "loc" : [ -111.072233, 31.643759 ], "pop" : 1157, "state" : "AZ" } +{ "_id" : "85653", "city" : "MARANA", "loc" : [ -111.273621, 32.404749 ], "pop" : 7562, "state" : "AZ" } +{ "_id" : "85701", "city" : "TUCSON", "loc" : [ -110.969445, 32.213873 ], "pop" : 5191, "state" : "AZ" } +{ "_id" : "85704", "city" : "CASAS ADOBES", "loc" : [ -110.984593, 32.329175 ], "pop" : 24039, "state" : "AZ" } +{ "_id" : "85705", "city" : "TUCSON", "loc" : [ -110.984536, 32.269088 ], "pop" : 52751, "state" : "AZ" } +{ "_id" : "85706", "city" : "TUCSON", "loc" : [ -110.945127, 32.139172 ], "pop" : 52458, "state" : "AZ" } +{ "_id" : "85708", "city" : "TUCSON", "loc" : [ -110.869283, 32.179989 ], "pop" : 6191, "state" : "AZ" } +{ "_id" : "85710", "city" : "TUCSON", "loc" : [ -110.824046, 32.213813 ], "pop" : 52679, "state" : "AZ" } +{ "_id" : "85711", "city" : "TUCSON", "loc" : [ -110.882892, 32.212729 ], "pop" : 40024, "state" : "AZ" } +{ "_id" : "85712", "city" : "TUCSON", "loc" : [ -110.886919, 32.250043 ], "pop" : 28813, "state" : "AZ" } +{ "_id" : "85713", "city" : "TUCSON", "loc" : [ -110.973896, 32.194065 ], "pop" : 40625, "state" : "AZ" } +{ "_id" : "85714", "city" : "TUCSON", "loc" : [ -110.971891, 32.170657 ], "pop" : 16488, "state" : "AZ" } +{ "_id" : "85715", "city" : "TUCSON", "loc" : [ -110.834837, 32.269213 ], "pop" : 33197, "state" : "AZ" } +{ "_id" : "85716", "city" : "TUCSON", "loc" : [ -110.922176, 32.246815 ], "pop" : 32258, "state" : "AZ" } +{ "_id" : "85718", "city" : "TUCSON", "loc" : [ -110.917882, 32.311154 ], "pop" : 22441, "state" : "AZ" } +{ "_id" : "85719", "city" : "TUCSON", "loc" : [ -110.949142, 32.247426 ], "pop" : 39019, "state" : "AZ" } +{ "_id" : "85730", "city" : "TUCSON", "loc" : [ -110.81904, 32.180951 ], "pop" : 33251, "state" : "AZ" } +{ "_id" : "85735", "city" : "TUCSON", "loc" : [ -111.260758, 32.057796 ], "pop" : 2987, "state" : "AZ" } +{ "_id" : "85736", "city" : "TUCSON", "loc" : [ -111.317842, 31.667909 ], "pop" : 1130, "state" : "AZ" } +{ "_id" : "85737", "city" : "ORO VALLEY", "loc" : [ -110.954463, 32.431679 ], "pop" : 14077, "state" : "AZ" } +{ "_id" : "85741", "city" : "TUCSON", "loc" : [ -111.041873, 32.347215 ], "pop" : 36400, "state" : "AZ" } +{ "_id" : "85743", "city" : "TUCSON", "loc" : [ -111.177071, 32.33655 ], "pop" : 4507, "state" : "AZ" } +{ "_id" : "85745", "city" : "TUCSON", "loc" : [ -111.017907, 32.243359 ], "pop" : 25143, "state" : "AZ" } +{ "_id" : "85746", "city" : "TUCSON", "loc" : [ -111.050569, 32.142244 ], "pop" : 34683, "state" : "AZ" } +{ "_id" : "85747", "city" : "TUCSON", "loc" : [ -110.667337, 32.071142 ], "pop" : 2286, "state" : "AZ" } +{ "_id" : "85748", "city" : "TUCSON", "loc" : [ -110.775765, 32.214981 ], "pop" : 9675, "state" : "AZ" } +{ "_id" : "85749", "city" : "TUCSON", "loc" : [ -110.765829, 32.273285 ], "pop" : 14254, "state" : "AZ" } +{ "_id" : "85901", "city" : "SHOW LOW", "loc" : [ -110.054633, 34.060117 ], "pop" : 16493, "state" : "AZ" } +{ "_id" : "85920", "city" : "ALPINE", "loc" : [ -109.12829, 33.827878 ], "pop" : 243, "state" : "AZ" } +{ "_id" : "85922", "city" : "BLUE", "loc" : [ -109.06849, 33.651245 ], "pop" : 14, "state" : "AZ" } +{ "_id" : "85924", "city" : "CONCHO", "loc" : [ -109.674096, 34.445787 ], "pop" : 949, "state" : "AZ" } +{ "_id" : "85925", "city" : "EAGAR", "loc" : [ -109.246933, 33.954571 ], "pop" : 482, "state" : "AZ" } +{ "_id" : "85928", "city" : "HEBER", "loc" : [ -110.568647, 34.4163 ], "pop" : 1856, "state" : "AZ" } +{ "_id" : "85929", "city" : "LAKESIDE", "loc" : [ -109.986878, 34.166224 ], "pop" : 5350, "state" : "AZ" } +{ "_id" : "85935", "city" : "PINETOP", "loc" : [ -109.919668, 34.117459 ], "pop" : 1938, "state" : "AZ" } +{ "_id" : "85936", "city" : "SAINT JOHNS", "loc" : [ -109.379617, 34.501008 ], "pop" : 3844, "state" : "AZ" } +{ "_id" : "85937", "city" : "SNOWFLAKE", "loc" : [ -110.080742, 34.495859 ], "pop" : 6678, "state" : "AZ" } +{ "_id" : "85938", "city" : "SPRINGERVILLE", "loc" : [ -109.304066, 34.119333 ], "pop" : 6560, "state" : "AZ" } +{ "_id" : "86001", "city" : "FLAGSTAFF", "loc" : [ -111.661979, 35.185911 ], "pop" : 30174, "state" : "AZ" } +{ "_id" : "86004", "city" : "FLAGSTAFF", "loc" : [ -111.574109, 35.225736 ], "pop" : 26878, "state" : "AZ" } +{ "_id" : "86021", "city" : "COLORADO CITY", "loc" : [ -112.952427, 36.976266 ], "pop" : 3065, "state" : "AZ" } +{ "_id" : "86022", "city" : "FREDONIA", "loc" : [ -112.497864, 36.904397 ], "pop" : 1393, "state" : "AZ" } +{ "_id" : "86025", "city" : "HOLBROOK", "loc" : [ -110.143412, 34.908451 ], "pop" : 5567, "state" : "AZ" } +{ "_id" : "86030", "city" : "HOTEVILLA", "loc" : [ -110.566107, 36.211141 ], "pop" : 271, "state" : "AZ" } +{ "_id" : "86033", "city" : "KAYENTA", "loc" : [ -110.265229, 36.688327 ], "pop" : 7549, "state" : "AZ" } +{ "_id" : "86034", "city" : "KEAMS CANYON", "loc" : [ -110.284461, 35.808206 ], "pop" : 3240, "state" : "AZ" } +{ "_id" : "86035", "city" : "LEUPP", "loc" : [ -110.992651, 35.336528 ], "pop" : 2396, "state" : "AZ" } +{ "_id" : "86036", "city" : "MARBLE CANYON", "loc" : [ -111.558166, 36.956943 ], "pop" : 564, "state" : "AZ" } +{ "_id" : "86038", "city" : "MORMON LAKE", "loc" : [ -111.454914, 34.916896 ], "pop" : 55, "state" : "AZ" } +{ "_id" : "86039", "city" : "KYKOTSMOVI VILLA", "loc" : [ -110.368805, 35.579084 ], "pop" : 167, "state" : "AZ" } +{ "_id" : "86040", "city" : "GREENEHAVEN", "loc" : [ -111.43847, 36.896625 ], "pop" : 8428, "state" : "AZ" } +{ "_id" : "86042", "city" : "POLACCA", "loc" : [ -110.51114, 35.811812 ], "pop" : 1723, "state" : "AZ" } +{ "_id" : "86043", "city" : "SECOND MESA", "loc" : [ -110.6472, 35.903782 ], "pop" : 1653, "state" : "AZ" } +{ "_id" : "86044", "city" : "TONALEA", "loc" : [ -110.882042, 35.934555 ], "pop" : 158, "state" : "AZ" } +{ "_id" : "86045", "city" : "TUBA CITY", "loc" : [ -111.268566, 36.103729 ], "pop" : 10514, "state" : "AZ" } +{ "_id" : "86046", "city" : "WILLIAMS", "loc" : [ -112.17075, 35.543398 ], "pop" : 6117, "state" : "AZ" } +{ "_id" : "86047", "city" : "WINSLOW", "loc" : [ -110.511382, 35.16078 ], "pop" : 17429, "state" : "AZ" } +{ "_id" : "86053", "city" : "KAIBITO", "loc" : [ -111.136973, 36.484798 ], "pop" : 6098, "state" : "AZ" } +{ "_id" : "86054", "city" : "SHONTO", "loc" : [ -110.647743, 36.61594 ], "pop" : 2049, "state" : "AZ" } +{ "_id" : "86301", "city" : "PRESCOTT", "loc" : [ -113.022459, 34.629909 ], "pop" : 915, "state" : "AZ" } +{ "_id" : "86303", "city" : "GROOM CREEK", "loc" : [ -112.473459, 34.558577 ], "pop" : 36617, "state" : "AZ" } +{ "_id" : "86314", "city" : "PRESCOTT VALLEY", "loc" : [ -112.326378, 34.601934 ], "pop" : 11396, "state" : "AZ" } +{ "_id" : "86320", "city" : "ASH FORK", "loc" : [ -112.502681, 35.214998 ], "pop" : 563, "state" : "AZ" } +{ "_id" : "86321", "city" : "BAGDAD", "loc" : [ -113.175535, 34.578484 ], "pop" : 1596, "state" : "AZ" } +{ "_id" : "86322", "city" : "CAMP VERDE", "loc" : [ -111.855131, 34.569733 ], "pop" : 6250, "state" : "AZ" } +{ "_id" : "86323", "city" : "CHINO VALLEY", "loc" : [ -112.473099, 34.775739 ], "pop" : 7285, "state" : "AZ" } +{ "_id" : "86324", "city" : "CLARKDALE", "loc" : [ -112.033417, 34.747793 ], "pop" : 7574, "state" : "AZ" } +{ "_id" : "86325", "city" : "CORNVILLE", "loc" : [ -111.908556, 34.725593 ], "pop" : 2612, "state" : "AZ" } +{ "_id" : "86326", "city" : "COTTONWOOD", "loc" : [ -112.009099, 34.705547 ], "pop" : 8530, "state" : "AZ" } +{ "_id" : "86327", "city" : "DEWEY", "loc" : [ -112.256665, 34.536753 ], "pop" : 3965, "state" : "AZ" } +{ "_id" : "86332", "city" : "KIRKLAND", "loc" : [ -112.896641, 34.454149 ], "pop" : 186, "state" : "AZ" } +{ "_id" : "86333", "city" : "MAYER", "loc" : [ -112.129551, 34.365535 ], "pop" : 3248, "state" : "AZ" } +{ "_id" : "86334", "city" : "PAULDEN", "loc" : [ -112.544105, 35.03129 ], "pop" : 24, "state" : "AZ" } +{ "_id" : "86335", "city" : "RIMROCK", "loc" : [ -111.784222, 34.63799 ], "pop" : 1743, "state" : "AZ" } +{ "_id" : "86336", "city" : "SEDONA", "loc" : [ -111.750627, 34.826645 ], "pop" : 13225, "state" : "AZ" } +{ "_id" : "86337", "city" : "SELIGMAN", "loc" : [ -112.954805, 35.321246 ], "pop" : 693, "state" : "AZ" } +{ "_id" : "86343", "city" : "CROWN KING", "loc" : [ -112.333971, 34.224062 ], "pop" : 105, "state" : "AZ" } +{ "_id" : "86401", "city" : "KINGMAN", "loc" : [ -114.05689, 35.258379 ], "pop" : 32002, "state" : "AZ" } +{ "_id" : "86403", "city" : "DESERT HILLS", "loc" : [ -114.308083, 34.492879 ], "pop" : 26718, "state" : "AZ" } +{ "_id" : "86412", "city" : "HUALAPAI", "loc" : [ -113.295324, 35.540732 ], "pop" : 2, "state" : "AZ" } +{ "_id" : "86430", "city" : "BULLHEAD CITY", "loc" : [ -114.588816, 35.014832 ], "pop" : 3196, "state" : "AZ" } +{ "_id" : "86432", "city" : "LITTLEFIELD", "loc" : [ -113.913693, 36.866524 ], "pop" : 87, "state" : "AZ" } +{ "_id" : "86434", "city" : "PEACH SPRINGS", "loc" : [ -113.420199, 35.537795 ], "pop" : 798, "state" : "AZ" } +{ "_id" : "86435", "city" : "SUPAI", "loc" : [ -112.693212, 36.224157 ], "pop" : 423, "state" : "AZ" } +{ "_id" : "86436", "city" : "TOPOCK", "loc" : [ -114.481666, 34.778388 ], "pop" : 912, "state" : "AZ" } +{ "_id" : "86440", "city" : "MOHAVE VALLEY", "loc" : [ -114.595115, 34.892942 ], "pop" : 4139, "state" : "AZ" } +{ "_id" : "86441", "city" : "DOLAN SPRINGS", "loc" : [ -114.547771, 35.774789 ], "pop" : 68, "state" : "AZ" } +{ "_id" : "86442", "city" : "BULLHEAD CITY", "loc" : [ -114.594737, 35.106001 ], "pop" : 22394, "state" : "AZ" } +{ "_id" : "86444", "city" : "MEADVIEW", "loc" : [ -114.327696, 35.813733 ], "pop" : 118, "state" : "AZ" } +{ "_id" : "86502", "city" : "CHAMBERS", "loc" : [ -109.37389, 35.143044 ], "pop" : 1085, "state" : "AZ" } +{ "_id" : "86503", "city" : "CHINLE", "loc" : [ -109.603693, 36.130367 ], "pop" : 10679, "state" : "AZ" } +{ "_id" : "86505", "city" : "GANADO", "loc" : [ -109.283168, 35.651844 ], "pop" : 23428, "state" : "AZ" } +{ "_id" : "86507", "city" : "LUKACHUKAI", "loc" : [ -109.244614, 36.418111 ], "pop" : 1665, "state" : "AZ" } +{ "_id" : "86509", "city" : "NAVAJO", "loc" : [ -109.396217, 34.817202 ], "pop" : 41, "state" : "AZ" } +{ "_id" : "86510", "city" : "PINON", "loc" : [ -110.221077, 36.100243 ], "pop" : 5911, "state" : "AZ" } +{ "_id" : "86514", "city" : "TEEC NOS POS", "loc" : [ -109.359039, 36.779694 ], "pop" : 4941, "state" : "AZ" } +{ "_id" : "86535", "city" : "DENNEHOTSO", "loc" : [ -109.861001, 36.777286 ], "pop" : 1693, "state" : "AZ" } +{ "_id" : "86538", "city" : "MANY FARMS", "loc" : [ -109.634021, 36.408259 ], "pop" : 4172, "state" : "AZ" } +{ "_id" : "86556", "city" : "TSAILE", "loc" : [ -109.217627, 36.307075 ], "pop" : 1593, "state" : "AZ" } +{ "_id" : "87001", "city" : "ALGODONES", "loc" : [ -106.616589, 35.428527 ], "pop" : 0, "state" : "NM" } +{ "_id" : "87002", "city" : "BOYS RANCH", "loc" : [ -106.761215, 34.645562 ], "pop" : 14826, "state" : "NM" } +{ "_id" : "87004", "city" : "BERNALILLO", "loc" : [ -106.530873, 35.328506 ], "pop" : 7113, "state" : "NM" } +{ "_id" : "87005", "city" : "BLUEWATER", "loc" : [ -108.191663, 35.164724 ], "pop" : 1611, "state" : "NM" } +{ "_id" : "87006", "city" : "BOSQUE", "loc" : [ -106.8038, 34.49956 ], "pop" : 276, "state" : "NM" } +{ "_id" : "87007", "city" : "CASA BLANCA", "loc" : [ -107.433907, 35.035222 ], "pop" : 2986, "state" : "NM" } +{ "_id" : "87008", "city" : "CEDAR CREST", "loc" : [ -106.361737, 35.128506 ], "pop" : 1860, "state" : "NM" } +{ "_id" : "87009", "city" : "CEDARVALE", "loc" : [ -105.734516, 34.388028 ], "pop" : 66, "state" : "NM" } +{ "_id" : "87010", "city" : "CERRILLOS", "loc" : [ -106.131683, 35.422965 ], "pop" : 788, "state" : "NM" } +{ "_id" : "87013", "city" : "CUBA", "loc" : [ -107.188462, 36.048201 ], "pop" : 2764, "state" : "NM" } +{ "_id" : "87014", "city" : "CUBERO", "loc" : [ -107.856722, 35.117372 ], "pop" : 16704, "state" : "NM" } +{ "_id" : "87015", "city" : "EDGEWOOD", "loc" : [ -106.187207, 35.077603 ], "pop" : 3032, "state" : "NM" } +{ "_id" : "87016", "city" : "ESTANCIA", "loc" : [ -106.135024, 34.769983 ], "pop" : 2634, "state" : "NM" } +{ "_id" : "87017", "city" : "GALLINA", "loc" : [ -106.661388, 36.171429 ], "pop" : 1003, "state" : "NM" } +{ "_id" : "87018", "city" : "COUNSELOR", "loc" : [ -106.949789, 36.118386 ], "pop" : 566, "state" : "NM" } +{ "_id" : "87020", "city" : "GRANTS", "loc" : [ -107.935662, 35.359802 ], "pop" : 428, "state" : "NM" } +{ "_id" : "87023", "city" : "JARALES", "loc" : [ -107.029912, 34.648156 ], "pop" : 9, "state" : "NM" } +{ "_id" : "87024", "city" : "JEMEZ PUEBLO", "loc" : [ -106.721894, 35.624315 ], "pop" : 2256, "state" : "NM" } +{ "_id" : "87025", "city" : "JEMEZ SPRINGS", "loc" : [ -106.771393, 35.892689 ], "pop" : 1, "state" : "NM" } +{ "_id" : "87026", "city" : "CANONCITO", "loc" : [ -107.105843, 35.085305 ], "pop" : 1272, "state" : "NM" } +{ "_id" : "87027", "city" : "LA JARA", "loc" : [ -106.992335, 36.119383 ], "pop" : 5, "state" : "NM" } +{ "_id" : "87028", "city" : "LAJOYA", "loc" : [ -106.84279, 34.343444 ], "pop" : 74, "state" : "NM" } +{ "_id" : "87029", "city" : "LINDRITH", "loc" : [ -106.925352, 36.336141 ], "pop" : 574, "state" : "NM" } +{ "_id" : "87031", "city" : "LOS LUNAS", "loc" : [ -106.711537, 34.780607 ], "pop" : 23560, "state" : "NM" } +{ "_id" : "87035", "city" : "MORIARTY", "loc" : [ -106.060871, 34.988878 ], "pop" : 5570, "state" : "NM" } +{ "_id" : "87036", "city" : "MOUNTAINAIR", "loc" : [ -106.257738, 34.515775 ], "pop" : 1442, "state" : "NM" } +{ "_id" : "87041", "city" : "COCHITI PUEBLO", "loc" : [ -106.343472, 35.603104 ], "pop" : 1527, "state" : "NM" } +{ "_id" : "87042", "city" : "PERALTA", "loc" : [ -106.687159, 34.833188 ], "pop" : 2672, "state" : "NM" } +{ "_id" : "87043", "city" : "PLACITAS", "loc" : [ -106.529279, 35.309175 ], "pop" : 8357, "state" : "NM" } +{ "_id" : "87044", "city" : "PONDEROSA", "loc" : [ -106.654421, 35.797576 ], "pop" : 1092, "state" : "NM" } +{ "_id" : "87045", "city" : "PREWITT", "loc" : [ -108.103798, 35.35466 ], "pop" : 1114, "state" : "NM" } +{ "_id" : "87046", "city" : "REGINA", "loc" : [ -107.071932, 36.20283 ], "pop" : 0, "state" : "NM" } +{ "_id" : "87047", "city" : "SANDIA PARK", "loc" : [ -106.323846, 35.168275 ], "pop" : 2672, "state" : "NM" } +{ "_id" : "87048", "city" : "CORRALES", "loc" : [ -106.620034, 35.233888 ], "pop" : 4900, "state" : "NM" } +{ "_id" : "87050", "city" : "SAN MATEO", "loc" : [ -107.70498, 35.222614 ], "pop" : 912, "state" : "NM" } +{ "_id" : "87052", "city" : "SANTO DOMINGO PU", "loc" : [ -106.361275, 35.513892 ], "pop" : 3030, "state" : "NM" } +{ "_id" : "87053", "city" : "ZIA PUEBLO", "loc" : [ -106.737467, 35.524241 ], "pop" : 877, "state" : "NM" } +{ "_id" : "87055", "city" : "SEBOYETA", "loc" : [ -107.382281, 35.149322 ], "pop" : 1356, "state" : "NM" } +{ "_id" : "87056", "city" : "STANLEY", "loc" : [ -106.028299, 35.12948 ], "pop" : 552, "state" : "NM" } +{ "_id" : "87059", "city" : "TIJERAS", "loc" : [ -106.306226, 35.044563 ], "pop" : 6861, "state" : "NM" } +{ "_id" : "87062", "city" : "VEGUITA", "loc" : [ -106.759148, 34.485032 ], "pop" : 817, "state" : "NM" } +{ "_id" : "87063", "city" : "WILLARD", "loc" : [ -106.030706, 34.57543 ], "pop" : 276, "state" : "NM" } +{ "_id" : "87068", "city" : "BOSQUE FARMS", "loc" : [ -106.697506, 34.876366 ], "pop" : 6286, "state" : "NM" } +{ "_id" : "87102", "city" : "ALBUQUERQUE", "loc" : [ -106.648171, 35.081831 ], "pop" : 20645, "state" : "NM" } +{ "_id" : "87104", "city" : "ALBUQUERQUE", "loc" : [ -106.671215, 35.103822 ], "pop" : 11889, "state" : "NM" } +{ "_id" : "87105", "city" : "ALBUQUERQUE", "loc" : [ -106.689341, 35.044761 ], "pop" : 50233, "state" : "NM" } +{ "_id" : "87106", "city" : "ALBUQUERQUE", "loc" : [ -106.616917, 35.079011 ], "pop" : 26482, "state" : "NM" } +{ "_id" : "87107", "city" : "ALBUQUERQUE", "loc" : [ -106.642747, 35.134742 ], "pop" : 30302, "state" : "NM" } +{ "_id" : "87108", "city" : "ALBUQUERQUE", "loc" : [ -106.574864, 35.072586 ], "pop" : 36704, "state" : "NM" } +{ "_id" : "87109", "city" : "ALBUQUERQUE", "loc" : [ -106.569004, 35.15058 ], "pop" : 39310, "state" : "NM" } +{ "_id" : "87110", "city" : "ALBUQUERQUE", "loc" : [ -106.578052, 35.110417 ], "pop" : 42652, "state" : "NM" } +{ "_id" : "87111", "city" : "ALBUQUERQUE", "loc" : [ -106.522164, 35.134724 ], "pop" : 47455, "state" : "NM" } +{ "_id" : "87112", "city" : "ALBUQUERQUE", "loc" : [ -106.518338, 35.101026 ], "pop" : 45478, "state" : "NM" } +{ "_id" : "87113", "city" : "ALBUQUERQUE", "loc" : [ -106.601467, 35.175906 ], "pop" : 3622, "state" : "NM" } +{ "_id" : "87114", "city" : "ALAMEDA", "loc" : [ -106.659138, 35.195612 ], "pop" : 16352, "state" : "NM" } +{ "_id" : "87115", "city" : "KIRTLAND A F B E", "loc" : [ -106.513896, 34.904876 ], "pop" : 0, "state" : "NM" } +{ "_id" : "87116", "city" : "ALBUQUERQUE", "loc" : [ -106.550605, 35.056116 ], "pop" : 5761, "state" : "NM" } +{ "_id" : "87118", "city" : "ALBUQUERQUE", "loc" : [ -106.595802, 35.055443 ], "pop" : 3067, "state" : "NM" } +{ "_id" : "87120", "city" : "ALBUQUERQUE", "loc" : [ -106.704137, 35.142146 ], "pop" : 23796, "state" : "NM" } +{ "_id" : "87121", "city" : "ALBUQUERQUE", "loc" : [ -106.726861, 35.051209 ], "pop" : 22253, "state" : "NM" } +{ "_id" : "87122", "city" : "ALBUQUERQUE", "loc" : [ -106.510176, 35.178715 ], "pop" : 6127, "state" : "NM" } +{ "_id" : "87123", "city" : "ALBUQUERQUE", "loc" : [ -106.509003, 35.07166 ], "pop" : 33808, "state" : "NM" } +{ "_id" : "87124", "city" : "RIO RANCHO", "loc" : [ -106.681756, 35.249347 ], "pop" : 29586, "state" : "NM" } +{ "_id" : "87301", "city" : "GALLUP", "loc" : [ -108.741352, 35.506475 ], "pop" : 32311, "state" : "NM" } +{ "_id" : "87310", "city" : "BRIMHALL", "loc" : [ -108.581469, 35.800503 ], "pop" : 119, "state" : "NM" } +{ "_id" : "87312", "city" : "CONTINENTAL DIVI", "loc" : [ -108.469256, 35.504295 ], "pop" : 704, "state" : "NM" } +{ "_id" : "87313", "city" : "CROWNPOINT", "loc" : [ -108.02709, 35.720557 ], "pop" : 6400, "state" : "NM" } +{ "_id" : "87315", "city" : "FENCE LAKE", "loc" : [ -108.693392, 34.734385 ], "pop" : 112, "state" : "NM" } +{ "_id" : "87320", "city" : "MEXICAN SPRINGS", "loc" : [ -108.818964, 35.783727 ], "pop" : 562, "state" : "NM" } +{ "_id" : "87321", "city" : "RAMAH", "loc" : [ -108.491951, 35.132375 ], "pop" : 517, "state" : "NM" } +{ "_id" : "87323", "city" : "THOREAU", "loc" : [ -107.830218, 35.57869 ], "pop" : 4254, "state" : "NM" } +{ "_id" : "87324", "city" : "TOADLENA", "loc" : [ -108.750647, 36.073202 ], "pop" : 2097, "state" : "NM" } +{ "_id" : "87325", "city" : "TOHATCHI", "loc" : [ -108.687818, 35.768609 ], "pop" : 5648, "state" : "NM" } +{ "_id" : "87327", "city" : "ZUNI", "loc" : [ -108.833611, 35.06845 ], "pop" : 7382, "state" : "NM" } +{ "_id" : "87328", "city" : "NAVAJO", "loc" : [ -109.022621, 35.894193 ], "pop" : 2715, "state" : "NM" } +{ "_id" : "87401", "city" : "FARMINGTON", "loc" : [ -108.199531, 36.706514 ], "pop" : 36782, "state" : "NM" } +{ "_id" : "87402", "city" : "FARMINGTON", "loc" : [ -108.147766, 36.768503 ], "pop" : 7238, "state" : "NM" } +{ "_id" : "87410", "city" : "AZTEC", "loc" : [ -108.010982, 36.820499 ], "pop" : 10951, "state" : "NM" } +{ "_id" : "87412", "city" : "BLANCO", "loc" : [ -107.795276, 36.725612 ], "pop" : 1007, "state" : "NM" } +{ "_id" : "87413", "city" : "BLOOMFIELD", "loc" : [ -107.978437, 36.695475 ], "pop" : 9612, "state" : "NM" } +{ "_id" : "87415", "city" : "FLORA VISTA", "loc" : [ -108.082683, 36.802771 ], "pop" : 2634, "state" : "NM" } +{ "_id" : "87416", "city" : "FRUITLAND", "loc" : [ -108.45339, 36.76323 ], "pop" : 819, "state" : "NM" } +{ "_id" : "87417", "city" : "KIRTLAND", "loc" : [ -108.350956, 36.740953 ], "pop" : 5087, "state" : "NM" } +{ "_id" : "87418", "city" : "LA PLATA", "loc" : [ -108.179243, 36.957632 ], "pop" : 163, "state" : "NM" } +{ "_id" : "87419", "city" : "NAVAJO DAM", "loc" : [ -107.670991, 36.833838 ], "pop" : 32, "state" : "NM" } +{ "_id" : "87420", "city" : "SHIPROCK", "loc" : [ -108.735479, 36.655981 ], "pop" : 14805, "state" : "NM" } +{ "_id" : "87421", "city" : "WATERFLOW", "loc" : [ -108.431083, 36.780092 ], "pop" : 378, "state" : "NM" } +{ "_id" : "87501", "city" : "POJOAQUE VALLEY", "loc" : [ -105.974818, 35.702472 ], "pop" : 51715, "state" : "NM" } +{ "_id" : "87505", "city" : "SANTA FE", "loc" : [ -105.981994, 35.619623 ], "pop" : 34054, "state" : "NM" } +{ "_id" : "87510", "city" : "ABIQUIU", "loc" : [ -106.244859, 36.176923 ], "pop" : 1538, "state" : "NM" } +{ "_id" : "87513", "city" : "ARROYO HONDO", "loc" : [ -105.621998, 36.531848 ], "pop" : 1333, "state" : "NM" } +{ "_id" : "87514", "city" : "ARROYO SECO", "loc" : [ -105.594609, 36.504568 ], "pop" : 782, "state" : "NM" } +{ "_id" : "87520", "city" : "CHAMA", "loc" : [ -106.582928, 36.896214 ], "pop" : 1103, "state" : "NM" } +{ "_id" : "87521", "city" : "CHAMISAL", "loc" : [ -105.68461, 36.160411 ], "pop" : 2147, "state" : "NM" } +{ "_id" : "87522", "city" : "CUNDIYO", "loc" : [ -105.911441, 36.011906 ], "pop" : 4380, "state" : "NM" } +{ "_id" : "87524", "city" : "COSTILLA", "loc" : [ -105.501586, 36.952556 ], "pop" : 495, "state" : "NM" } +{ "_id" : "87527", "city" : "DIXON", "loc" : [ -105.86148, 36.179 ], "pop" : 1320, "state" : "NM" } +{ "_id" : "87528", "city" : "DULCE", "loc" : [ -107.060179, 36.859808 ], "pop" : 2936, "state" : "NM" } +{ "_id" : "87530", "city" : "EL RITO", "loc" : [ -106.21917, 36.364694 ], "pop" : 928, "state" : "NM" } +{ "_id" : "87531", "city" : "EMBUDO", "loc" : [ -106.024187, 36.137028 ], "pop" : 3377, "state" : "NM" } +{ "_id" : "87532", "city" : "ESPANOLA", "loc" : [ -106.071697, 35.987157 ], "pop" : 9437, "state" : "NM" } +{ "_id" : "87535", "city" : "GLORIETA", "loc" : [ -105.790316, 35.566645 ], "pop" : 1246, "state" : "NM" } +{ "_id" : "87537", "city" : "HERNANDEZ", "loc" : [ -106.139579, 36.073811 ], "pop" : 832, "state" : "NM" } +{ "_id" : "87539", "city" : "LA MADERA", "loc" : [ -106.13443, 36.246387 ], "pop" : 75, "state" : "NM" } +{ "_id" : "87540", "city" : "LAMY", "loc" : [ -105.940906, 35.431057 ], "pop" : 516, "state" : "NM" } +{ "_id" : "87544", "city" : "LOS ALAMOS", "loc" : [ -106.267624, 35.866321 ], "pop" : 18122, "state" : "NM" } +{ "_id" : "87549", "city" : "OJO CALIENTE", "loc" : [ -105.915507, 36.40991 ], "pop" : 453, "state" : "NM" } +{ "_id" : "87552", "city" : "PECOS", "loc" : [ -105.670104, 35.571011 ], "pop" : 2534, "state" : "NM" } +{ "_id" : "87553", "city" : "PENASCO", "loc" : [ -105.734245, 36.176023 ], "pop" : 632, "state" : "NM" } +{ "_id" : "87556", "city" : "QUESTA", "loc" : [ -105.560984, 36.72572 ], "pop" : 2881, "state" : "NM" } +{ "_id" : "87557", "city" : "RANCHOS DE TAOS", "loc" : [ -105.608576, 36.335692 ], "pop" : 174, "state" : "NM" } +{ "_id" : "87560", "city" : "RIBERA", "loc" : [ -105.465228, 35.334448 ], "pop" : 1619, "state" : "NM" } +{ "_id" : "87563", "city" : "RUTHERON", "loc" : [ -106.685267, 36.647146 ], "pop" : 38, "state" : "NM" } +{ "_id" : "87564", "city" : "SAN CRISTOBAL", "loc" : [ -105.635968, 36.611638 ], "pop" : 326, "state" : "NM" } +{ "_id" : "87565", "city" : "SAN JOSE", "loc" : [ -105.438341, 35.456949 ], "pop" : 844, "state" : "NM" } +{ "_id" : "87566", "city" : "SAN JUAN PUEBLO", "loc" : [ -106.079267, 36.048886 ], "pop" : 5209, "state" : "NM" } +{ "_id" : "87567", "city" : "SANTA CRUZ", "loc" : [ -106.031839, 35.986011 ], "pop" : 5947, "state" : "NM" } +{ "_id" : "87571", "city" : "TAOS", "loc" : [ -105.584732, 36.395288 ], "pop" : 13297, "state" : "NM" } +{ "_id" : "87573", "city" : "TERERRO", "loc" : [ -105.645725, 35.736881 ], "pop" : 99, "state" : "NM" } +{ "_id" : "87575", "city" : "TIERRA AMARILLA", "loc" : [ -106.556972, 36.680481 ], "pop" : 1865, "state" : "NM" } +{ "_id" : "87579", "city" : "VADITO", "loc" : [ -105.67818, 36.191305 ], "pop" : 360, "state" : "NM" } +{ "_id" : "87580", "city" : "VALDEZ", "loc" : [ -105.506971, 36.569699 ], "pop" : 238, "state" : "NM" } +{ "_id" : "87581", "city" : "VALLECITOS", "loc" : [ -106.085942, 36.516284 ], "pop" : 576, "state" : "NM" } +{ "_id" : "87701", "city" : "LAS VEGAS", "loc" : [ -105.227162, 35.594862 ], "pop" : 19567, "state" : "NM" } +{ "_id" : "87711", "city" : "ANTON CHICO", "loc" : [ -105.141041, 35.159262 ], "pop" : 296, "state" : "NM" } +{ "_id" : "87713", "city" : "CHACON", "loc" : [ -105.385411, 36.138805 ], "pop" : 180, "state" : "NM" } +{ "_id" : "87714", "city" : "CIMARRON", "loc" : [ -105.069694, 36.457424 ], "pop" : 1582, "state" : "NM" } +{ "_id" : "87715", "city" : "CLEVELAND", "loc" : [ -105.43262, 35.989831 ], "pop" : 228, "state" : "NM" } +{ "_id" : "87718", "city" : "EAGLE NEST", "loc" : [ -105.275561, 36.53255 ], "pop" : 463, "state" : "NM" } +{ "_id" : "87722", "city" : "GUADALUPITA", "loc" : [ -105.127814, 36.113046 ], "pop" : 52, "state" : "NM" } +{ "_id" : "87724", "city" : "LA LOMA", "loc" : [ -105.096864, 35.191562 ], "pop" : 233, "state" : "NM" } +{ "_id" : "87725", "city" : "LEDOUX", "loc" : [ -105.421555, 35.919118 ], "pop" : 179, "state" : "NM" } +{ "_id" : "87728", "city" : "MAXWELL", "loc" : [ -104.56395, 36.543393 ], "pop" : 390, "state" : "NM" } +{ "_id" : "87729", "city" : "MIAMI", "loc" : [ -104.811769, 36.28955 ], "pop" : 65, "state" : "NM" } +{ "_id" : "87730", "city" : "MILLS", "loc" : [ -104.227743, 36.128144 ], "pop" : 21, "state" : "NM" } +{ "_id" : "87731", "city" : "MONTEZUMA", "loc" : [ -105.409729, 35.682959 ], "pop" : 62, "state" : "NM" } +{ "_id" : "87732", "city" : "MORA", "loc" : [ -105.312837, 36.00405 ], "pop" : 2636, "state" : "NM" } +{ "_id" : "87733", "city" : "ALBERT", "loc" : [ -103.746132, 35.715938 ], "pop" : 373, "state" : "NM" } +{ "_id" : "87734", "city" : "OCATE", "loc" : [ -105.06595, 36.10366 ], "pop" : 327, "state" : "NM" } +{ "_id" : "87740", "city" : "RATON", "loc" : [ -104.434881, 36.895187 ], "pop" : 8449, "state" : "NM" } +{ "_id" : "87742", "city" : "ROCIADA", "loc" : [ -105.314716, 35.822648 ], "pop" : 480, "state" : "NM" } +{ "_id" : "87743", "city" : "ROY", "loc" : [ -104.149698, 35.952248 ], "pop" : 499, "state" : "NM" } +{ "_id" : "87745", "city" : "SAPELLO", "loc" : [ -105.107735, 35.762012 ], "pop" : 2, "state" : "NM" } +{ "_id" : "87746", "city" : "SOLANO", "loc" : [ -104.1221, 35.837828 ], "pop" : 87, "state" : "NM" } +{ "_id" : "87747", "city" : "SPRINGER", "loc" : [ -104.592705, 36.37672 ], "pop" : 1976, "state" : "NM" } +{ "_id" : "87750", "city" : "VALMORA", "loc" : [ -104.911587, 35.794033 ], "pop" : 138, "state" : "NM" } +{ "_id" : "87752", "city" : "WAGON MOUND", "loc" : [ -104.691, 35.981361 ], "pop" : 524, "state" : "NM" } +{ "_id" : "87801", "city" : "SOCORRO", "loc" : [ -106.890659, 34.047853 ], "pop" : 9663, "state" : "NM" } +{ "_id" : "87815", "city" : "BINGHAM", "loc" : [ -106.021163, 34.043864 ], "pop" : 33, "state" : "NM" } +{ "_id" : "87820", "city" : "ARAGON", "loc" : [ -108.546589, 33.88592 ], "pop" : 149, "state" : "NM" } +{ "_id" : "87821", "city" : "DATIL", "loc" : [ -108.018284, 34.04269 ], "pop" : 340, "state" : "NM" } +{ "_id" : "87823", "city" : "LEMITAR", "loc" : [ -106.904381, 34.155999 ], "pop" : 439, "state" : "NM" } +{ "_id" : "87825", "city" : "ALAMO", "loc" : [ -107.340647, 34.241178 ], "pop" : 2715, "state" : "NM" } +{ "_id" : "87827", "city" : "PIE TOWN", "loc" : [ -108.368187, 34.324282 ], "pop" : 396, "state" : "NM" } +{ "_id" : "87828", "city" : "POLVADERA", "loc" : [ -106.897505, 34.134672 ], "pop" : 225, "state" : "NM" } +{ "_id" : "87829", "city" : "QUEMADO", "loc" : [ -108.757835, 34.265158 ], "pop" : 188, "state" : "NM" } +{ "_id" : "87830", "city" : "RESERVE", "loc" : [ -108.800918, 33.688074 ], "pop" : 1172, "state" : "NM" } +{ "_id" : "87831", "city" : "SAN ACACIA", "loc" : [ -106.904884, 34.228328 ], "pop" : 522, "state" : "NM" } +{ "_id" : "87901", "city" : "TRUTH OR CONSEQU", "loc" : [ -107.248794, 33.139478 ], "pop" : 7794, "state" : "NM" } +{ "_id" : "87930", "city" : "ARREY", "loc" : [ -107.354368, 32.802057 ], "pop" : 555, "state" : "NM" } +{ "_id" : "87931", "city" : "CABALLO", "loc" : [ -107.347113, 33.013452 ], "pop" : 860, "state" : "NM" } +{ "_id" : "87932", "city" : "CUCHILLO", "loc" : [ -107.456536, 33.370269 ], "pop" : 125, "state" : "NM" } +{ "_id" : "87933", "city" : "DERRY", "loc" : [ -107.284271, 32.808561 ], "pop" : 118, "state" : "NM" } +{ "_id" : "87936", "city" : "GARFIELD", "loc" : [ -107.270409, 32.755749 ], "pop" : 432, "state" : "NM" } +{ "_id" : "87937", "city" : "HATCH", "loc" : [ -107.159028, 32.658335 ], "pop" : 2314, "state" : "NM" } +{ "_id" : "87940", "city" : "RINCON", "loc" : [ -107.064343, 32.65969 ], "pop" : 394, "state" : "NM" } +{ "_id" : "87941", "city" : "SALEM", "loc" : [ -107.215689, 32.709322 ], "pop" : 709, "state" : "NM" } +{ "_id" : "87942", "city" : "WILLIAMSBURG", "loc" : [ -107.337583, 33.226498 ], "pop" : 58, "state" : "NM" } +{ "_id" : "87943", "city" : "WINSTON", "loc" : [ -107.667456, 33.306089 ], "pop" : 97, "state" : "NM" } +{ "_id" : "88001", "city" : "LAS CRUCES", "loc" : [ -106.746034, 32.321641 ], "pop" : 57502, "state" : "NM" } +{ "_id" : "88002", "city" : "WHITE SANDS MISS", "loc" : [ -106.49236, 32.382669 ], "pop" : 2616, "state" : "NM" } +{ "_id" : "88005", "city" : "LAS CRUCES", "loc" : [ -106.79908, 32.316076 ], "pop" : 40042, "state" : "NM" } +{ "_id" : "88020", "city" : "ANIMAS", "loc" : [ -108.585695, 31.793696 ], "pop" : 1291, "state" : "NM" } +{ "_id" : "88021", "city" : "CHAPARRAL", "loc" : [ -106.573452, 31.934505 ], "pop" : 24480, "state" : "NM" } +{ "_id" : "88023", "city" : "VANADIUM", "loc" : [ -108.107667, 32.756334 ], "pop" : 3694, "state" : "NM" } +{ "_id" : "88025", "city" : "BUCKHORN", "loc" : [ -108.477951, 32.813466 ], "pop" : 1822, "state" : "NM" } +{ "_id" : "88026", "city" : "CENTRAL", "loc" : [ -108.162698, 32.779767 ], "pop" : 3161, "state" : "NM" } +{ "_id" : "88030", "city" : "DEMING", "loc" : [ -107.746559, 32.231808 ], "pop" : 18110, "state" : "NM" } +{ "_id" : "88039", "city" : "GLENWOOD", "loc" : [ -108.774282, 33.304789 ], "pop" : 318, "state" : "NM" } +{ "_id" : "88041", "city" : "SAN LORENZO", "loc" : [ -108.082185, 32.853311 ], "pop" : 271, "state" : "NM" } +{ "_id" : "88042", "city" : "HILLSBORO", "loc" : [ -107.6276, 32.923913 ], "pop" : 305, "state" : "NM" } +{ "_id" : "88043", "city" : "HURLEY", "loc" : [ -108.15162, 32.64799 ], "pop" : 1775, "state" : "NM" } +{ "_id" : "88044", "city" : "LA MESA", "loc" : [ -106.701103, 32.082312 ], "pop" : 3370, "state" : "NM" } +{ "_id" : "88045", "city" : "ROAD FORKS", "loc" : [ -108.754657, 32.314032 ], "pop" : 4667, "state" : "NM" } +{ "_id" : "88047", "city" : "MESILLA PARK", "loc" : [ -106.637016, 32.297725 ], "pop" : 83, "state" : "NM" } +{ "_id" : "88048", "city" : "MESQUITE", "loc" : [ -106.667626, 32.145958 ], "pop" : 3568, "state" : "NM" } +{ "_id" : "88049", "city" : "MIMBRES", "loc" : [ -107.942326, 32.860936 ], "pop" : 818, "state" : "NM" } +{ "_id" : "88061", "city" : "SILVER CITY", "loc" : [ -108.274916, 32.789986 ], "pop" : 16135, "state" : "NM" } +{ "_id" : "88101", "city" : "CLOVIS", "loc" : [ -103.221391, 34.412585 ], "pop" : 39152, "state" : "NM" } +{ "_id" : "88112", "city" : "BROADVIEW", "loc" : [ -103.129235, 34.803956 ], "pop" : 175, "state" : "NM" } +{ "_id" : "88113", "city" : "CAUSEY", "loc" : [ -103.150201, 33.892926 ], "pop" : 229, "state" : "NM" } +{ "_id" : "88114", "city" : "CROSSROADS", "loc" : [ -103.356387, 33.527186 ], "pop" : 17, "state" : "NM" } +{ "_id" : "88116", "city" : "ELIDA", "loc" : [ -103.632341, 33.940468 ], "pop" : 503, "state" : "NM" } +{ "_id" : "88118", "city" : "FLOYD", "loc" : [ -103.582707, 34.251951 ], "pop" : 681, "state" : "NM" } +{ "_id" : "88119", "city" : "FORT SUMNER", "loc" : [ -104.231689, 34.460018 ], "pop" : 1934, "state" : "NM" } +{ "_id" : "88120", "city" : "GRADY", "loc" : [ -103.298043, 34.810697 ], "pop" : 265, "state" : "NM" } +{ "_id" : "88121", "city" : "HOUSE", "loc" : [ -103.920256, 34.695156 ], "pop" : 235, "state" : "NM" } +{ "_id" : "88123", "city" : "LINGO", "loc" : [ -103.208161, 33.696291 ], "pop" : 52, "state" : "NM" } +{ "_id" : "88124", "city" : "MELROSE", "loc" : [ -103.632507, 34.44787 ], "pop" : 976, "state" : "NM" } +{ "_id" : "88125", "city" : "MILNESAND", "loc" : [ -103.278189, 33.60501 ], "pop" : 10, "state" : "NM" } +{ "_id" : "88126", "city" : "PEP", "loc" : [ -103.327208, 33.897032 ], "pop" : 369, "state" : "NM" } +{ "_id" : "88130", "city" : "PORTALES", "loc" : [ -103.336311, 34.179915 ], "pop" : 14828, "state" : "NM" } +{ "_id" : "88132", "city" : "ROGERS", "loc" : [ -103.127527, 34.024759 ], "pop" : 30, "state" : "NM" } +{ "_id" : "88133", "city" : "SAINT VRAIN", "loc" : [ -103.453239, 34.465205 ], "pop" : 188, "state" : "NM" } +{ "_id" : "88134", "city" : "TAIBAN", "loc" : [ -104.032899, 34.424829 ], "pop" : 94, "state" : "NM" } +{ "_id" : "88135", "city" : "TEXICO", "loc" : [ -103.061544, 34.395795 ], "pop" : 1451, "state" : "NM" } +{ "_id" : "88136", "city" : "YESO", "loc" : [ -104.527582, 34.474962 ], "pop" : 224, "state" : "NM" } +{ "_id" : "88201", "city" : "ROSWELL", "loc" : [ -104.525857, 33.388504 ], "pop" : 53644, "state" : "NM" } +{ "_id" : "88210", "city" : "ARTESIA", "loc" : [ -104.407401, 32.838355 ], "pop" : 14689, "state" : "NM" } +{ "_id" : "88213", "city" : "CAPROCK", "loc" : [ -103.639009, 33.393855 ], "pop" : 19, "state" : "NM" } +{ "_id" : "88220", "city" : "CARLSBAD", "loc" : [ -104.239539, 32.411867 ], "pop" : 31888, "state" : "NM" } +{ "_id" : "88230", "city" : "DEXTER", "loc" : [ -104.383285, 33.191006 ], "pop" : 2056, "state" : "NM" } +{ "_id" : "88231", "city" : "EUNICE", "loc" : [ -103.159407, 32.439225 ], "pop" : 3014, "state" : "NM" } +{ "_id" : "88232", "city" : "HAGERMAN", "loc" : [ -104.329778, 33.107643 ], "pop" : 1409, "state" : "NM" } +{ "_id" : "88240", "city" : "HOBBS", "loc" : [ -103.137246, 32.72217 ], "pop" : 36880, "state" : "NM" } +{ "_id" : "88250", "city" : "HOPE", "loc" : [ -104.729921, 32.81561 ], "pop" : 177, "state" : "NM" } +{ "_id" : "88252", "city" : "JAL", "loc" : [ -103.199724, 32.112816 ], "pop" : 2335, "state" : "NM" } +{ "_id" : "88253", "city" : "LAKE ARTHUR", "loc" : [ -104.406412, 33.017106 ], "pop" : 740, "state" : "NM" } +{ "_id" : "88256", "city" : "LOVING", "loc" : [ -104.091376, 32.274034 ], "pop" : 1851, "state" : "NM" } +{ "_id" : "88260", "city" : "LOVINGTON", "loc" : [ -103.348849, 32.951166 ], "pop" : 12046, "state" : "NM" } +{ "_id" : "88264", "city" : "MALJAMAR", "loc" : [ -103.723401, 32.842281 ], "pop" : 61, "state" : "NM" } +{ "_id" : "88265", "city" : "MONUMENT", "loc" : [ -103.270256, 32.587405 ], "pop" : 0, "state" : "NM" } +{ "_id" : "88266", "city" : "OIL CENTER", "loc" : [ -103.301915, 32.490383 ], "pop" : 0, "state" : "NM" } +{ "_id" : "88267", "city" : "TATUM", "loc" : [ -103.314, 33.260018 ], "pop" : 1393, "state" : "NM" } +{ "_id" : "88301", "city" : "CARRIZOZO", "loc" : [ -105.869617, 33.64962 ], "pop" : 1288, "state" : "NM" } +{ "_id" : "88310", "city" : "ALAMOGORDO", "loc" : [ -105.948544, 32.893186 ], "pop" : 31204, "state" : "NM" } +{ "_id" : "88314", "city" : "BENT", "loc" : [ -105.863472, 33.148014 ], "pop" : 172, "state" : "NM" } +{ "_id" : "88316", "city" : "CAPITAN", "loc" : [ -105.526906, 33.560232 ], "pop" : 1760, "state" : "NM" } +{ "_id" : "88317", "city" : "CLOUDCROFT", "loc" : [ -105.939028, 32.574067 ], "pop" : 4482, "state" : "NM" } +{ "_id" : "88318", "city" : "CORONA", "loc" : [ -105.533873, 34.169259 ], "pop" : 496, "state" : "NM" } +{ "_id" : "88321", "city" : "ENCINO", "loc" : [ -105.483914, 34.61496 ], "pop" : 290, "state" : "NM" } +{ "_id" : "88324", "city" : "GLENCOE", "loc" : [ -105.502991, 33.386738 ], "pop" : 68, "state" : "NM" } +{ "_id" : "88330", "city" : "HOLLOMAN AIR FOR", "loc" : [ -106.07845, 32.862093 ], "pop" : 5896, "state" : "NM" } +{ "_id" : "88336", "city" : "HONDO", "loc" : [ -105.388854, 33.462518 ], "pop" : 160, "state" : "NM" } +{ "_id" : "88337", "city" : "LA LUZ", "loc" : [ -105.953397, 32.977449 ], "pop" : 2302, "state" : "NM" } +{ "_id" : "88338", "city" : "LINCOLN", "loc" : [ -105.528427, 33.492912 ], "pop" : 150, "state" : "NM" } +{ "_id" : "88339", "city" : "MAYHILL", "loc" : [ -105.518056, 32.907048 ], "pop" : 237, "state" : "NM" } +{ "_id" : "88340", "city" : "MESCALERO", "loc" : [ -105.774293, 33.216436 ], "pop" : 2695, "state" : "NM" } +{ "_id" : "88341", "city" : "NOGAL", "loc" : [ -105.703631, 33.499552 ], "pop" : 312, "state" : "NM" } +{ "_id" : "88343", "city" : "PICACHO", "loc" : [ -105.083382, 33.345642 ], "pop" : 38, "state" : "NM" } +{ "_id" : "88344", "city" : "PINON", "loc" : [ -105.415708, 32.639584 ], "pop" : 92, "state" : "NM" } +{ "_id" : "88345", "city" : "RUIDOSO", "loc" : [ -105.650994, 33.347406 ], "pop" : 6883, "state" : "NM" } +{ "_id" : "88346", "city" : "RUIDOSO DOWNS", "loc" : [ -105.538306, 33.357718 ], "pop" : 367, "state" : "NM" } +{ "_id" : "88347", "city" : "SACRAMENTO", "loc" : [ -105.621128, 32.805221 ], "pop" : 69, "state" : "NM" } +{ "_id" : "88348", "city" : "SAN PATRICIO", "loc" : [ -105.349798, 33.38775 ], "pop" : 532, "state" : "NM" } +{ "_id" : "88351", "city" : "TINNIE", "loc" : [ -105.202681, 33.337308 ], "pop" : 165, "state" : "NM" } +{ "_id" : "88352", "city" : "TULAROSA", "loc" : [ -106.010789, 33.065049 ], "pop" : 4583, "state" : "NM" } +{ "_id" : "88353", "city" : "VAUGHN", "loc" : [ -105.192558, 34.624074 ], "pop" : 741, "state" : "NM" } +{ "_id" : "88354", "city" : "WEED", "loc" : [ -105.506296, 32.80519 ], "pop" : 196, "state" : "NM" } +{ "_id" : "88401", "city" : "TUCUMCARI", "loc" : [ -103.717935, 35.168003 ], "pop" : 8634, "state" : "NM" } +{ "_id" : "88410", "city" : "AMISTAD", "loc" : [ -103.212954, 35.898276 ], "pop" : 170, "state" : "NM" } +{ "_id" : "88411", "city" : "BARD", "loc" : [ -103.317778, 35.115364 ], "pop" : 358, "state" : "NM" } +{ "_id" : "88412", "city" : "BUEYEROS", "loc" : [ -103.666894, 36.013541 ], "pop" : 7, "state" : "NM" } +{ "_id" : "88414", "city" : "CAPULIN", "loc" : [ -103.993599, 36.747453 ], "pop" : 62, "state" : "NM" } +{ "_id" : "88415", "city" : "CLAYTON", "loc" : [ -103.188823, 36.441378 ], "pop" : 2886, "state" : "NM" } +{ "_id" : "88416", "city" : "CONCHAS DAM", "loc" : [ -104.205231, 35.378561 ], "pop" : 218, "state" : "NM" } +{ "_id" : "88417", "city" : "CUERVO", "loc" : [ -104.399867, 35.01013 ], "pop" : 66, "state" : "NM" } +{ "_id" : "88418", "city" : "DES MOINES", "loc" : [ -103.873853, 36.729069 ], "pop" : 278, "state" : "NM" } +{ "_id" : "88419", "city" : "FOLSOM", "loc" : [ -103.839925, 36.86896 ], "pop" : 172, "state" : "NM" } +{ "_id" : "88421", "city" : "GARITA", "loc" : [ -104.441911, 35.350182 ], "pop" : 113, "state" : "NM" } +{ "_id" : "88422", "city" : "GLADSTONE", "loc" : [ -103.893081, 36.307741 ], "pop" : 45, "state" : "NM" } +{ "_id" : "88424", "city" : "GRENVILLE", "loc" : [ -103.415521, 36.725396 ], "pop" : 185, "state" : "NM" } +{ "_id" : "88426", "city" : "LOGAN", "loc" : [ -103.438339, 35.368051 ], "pop" : 962, "state" : "NM" } +{ "_id" : "88427", "city" : "MC ALISTER", "loc" : [ -103.657169, 34.749206 ], "pop" : 171, "state" : "NM" } +{ "_id" : "88429", "city" : "MOUNT DORA", "loc" : [ -103.416667, 36.498795 ], "pop" : 27, "state" : "NM" } +{ "_id" : "88430", "city" : "NARA VISA", "loc" : [ -103.131738, 35.617963 ], "pop" : 170, "state" : "NM" } +{ "_id" : "88431", "city" : "NEWKIRK", "loc" : [ -104.243323, 35.084746 ], "pop" : 40, "state" : "NM" } +{ "_id" : "88432", "city" : "PUERTO DE LUNA", "loc" : [ -104.619645, 34.847826 ], "pop" : 66, "state" : "NM" } +{ "_id" : "88433", "city" : "QUAY", "loc" : [ -103.78176, 34.929916 ], "pop" : 10, "state" : "NM" } +{ "_id" : "88434", "city" : "SAN JON", "loc" : [ -103.284599, 35.119848 ], "pop" : 283, "state" : "NM" } +{ "_id" : "88435", "city" : "PASTURA", "loc" : [ -104.682155, 34.933276 ], "pop" : 2714, "state" : "NM" } +{ "_id" : "88436", "city" : "SEDAN", "loc" : [ -103.14488, 36.226027 ], "pop" : 105, "state" : "NM" } +{ "_id" : "88437", "city" : "SENECA", "loc" : [ -103.089394, 36.6279 ], "pop" : 54, "state" : "NM" } +{ "_id" : "88438", "city" : "STEAD", "loc" : [ -103.121117, 36.12359 ], "pop" : 140, "state" : "NM" } +{ "_id" : "88439", "city" : "TREMENTINA", "loc" : [ -104.616341, 35.584945 ], "pop" : 125, "state" : "NM" } +{ "_id" : "88441", "city" : "BELL RANCH", "loc" : [ -104.111991, 35.638425 ], "pop" : 80, "state" : "NM" } +{ "_id" : "89001", "city" : "ALAMO", "loc" : [ -115.308032, 37.325866 ], "pop" : 926, "state" : "NV" } +{ "_id" : "89005", "city" : "BOULDER CITY", "loc" : [ -114.834413, 35.972711 ], "pop" : 12920, "state" : "NV" } +{ "_id" : "89008", "city" : "CALIENTE", "loc" : [ -114.509727, 37.612817 ], "pop" : 1214, "state" : "NV" } +{ "_id" : "89013", "city" : "GOLDFIELD", "loc" : [ -117.269379, 37.834364 ], "pop" : 712, "state" : "NV" } +{ "_id" : "89014", "city" : "HENDERSON", "loc" : [ -115.077968, 36.056435 ], "pop" : 27761, "state" : "NV" } +{ "_id" : "89015", "city" : "HENDERSON", "loc" : [ -114.971809, 36.035705 ], "pop" : 35694, "state" : "NV" } +{ "_id" : "89017", "city" : "HIKO", "loc" : [ -115.177158, 37.651695 ], "pop" : 97, "state" : "NV" } +{ "_id" : "89018", "city" : "INDIAN SPRINGS", "loc" : [ -115.581067, 36.407223 ], "pop" : 4114, "state" : "NV" } +{ "_id" : "89019", "city" : "GOODSPRINGS", "loc" : [ -115.469154, 35.854839 ], "pop" : 1344, "state" : "NV" } +{ "_id" : "89020", "city" : "AMARGOSA VALLEY", "loc" : [ -116.57755, 36.944007 ], "pop" : 3506, "state" : "NV" } +{ "_id" : "89029", "city" : "LAUGHLIN", "loc" : [ -114.636769, 35.132138 ], "pop" : 4801, "state" : "NV" } +{ "_id" : "89030", "city" : "NORTH LAS VEGAS", "loc" : [ -114.851389, 36.4475 ], "pop" : 16, "state" : "NV" } +{ "_id" : "89031", "city" : "NORTH LAS VEGAS", "loc" : [ -115.124832, 36.206228 ], "pop" : 48113, "state" : "NV" } +{ "_id" : "89040", "city" : "OVERTON", "loc" : [ -114.378202, 36.637236 ], "pop" : 8191, "state" : "NV" } +{ "_id" : "89041", "city" : "PAHRUMP", "loc" : [ -116.014661, 36.204039 ], "pop" : 7440, "state" : "NV" } +{ "_id" : "89043", "city" : "PIOCHE", "loc" : [ -114.396824, 37.898097 ], "pop" : 1538, "state" : "NV" } +{ "_id" : "89045", "city" : "ROUND MOUNTAIN", "loc" : [ -117.127989, 38.682886 ], "pop" : 1302, "state" : "NV" } +{ "_id" : "89046", "city" : "COTTONWOOD COVE", "loc" : [ -114.924182, 35.447601 ], "pop" : 948, "state" : "NV" } +{ "_id" : "89047", "city" : "SILVERPEAK", "loc" : [ -117.94592, 37.76444 ], "pop" : 632, "state" : "NV" } +{ "_id" : "89049", "city" : "TONOPAH", "loc" : [ -117.089886, 38.204273 ], "pop" : 4724, "state" : "NV" } +{ "_id" : "89101", "city" : "LAS VEGAS", "loc" : [ -115.122366, 36.172082 ], "pop" : 40270, "state" : "NV" } +{ "_id" : "89102", "city" : "LAS VEGAS", "loc" : [ -115.200351, 36.143303 ], "pop" : 48070, "state" : "NV" } +{ "_id" : "89103", "city" : "LAS VEGAS", "loc" : [ -115.216072, 36.114865 ], "pop" : 33258, "state" : "NV" } +{ "_id" : "89104", "city" : "LAS VEGAS", "loc" : [ -115.109195, 36.15197 ], "pop" : 26805, "state" : "NV" } +{ "_id" : "89106", "city" : "LAS VEGAS", "loc" : [ -115.161703, 36.184673 ], "pop" : 21458, "state" : "NV" } +{ "_id" : "89107", "city" : "LAS VEGAS", "loc" : [ -115.217638, 36.170457 ], "pop" : 32628, "state" : "NV" } +{ "_id" : "89108", "city" : "LAS VEGAS", "loc" : [ -115.223259, 36.204399 ], "pop" : 46924, "state" : "NV" } +{ "_id" : "89109", "city" : "LAS VEGAS", "loc" : [ -115.145378, 36.125991 ], "pop" : 35139, "state" : "NV" } +{ "_id" : "89110", "city" : "LAS VEGAS", "loc" : [ -115.066892, 36.173031 ], "pop" : 43396, "state" : "NV" } +{ "_id" : "89113", "city" : "LAS VEGAS", "loc" : [ -115.256614, 36.085366 ], "pop" : 1801, "state" : "NV" } +{ "_id" : "89115", "city" : "LAS VEGAS", "loc" : [ -115.067062, 36.215818 ], "pop" : 51532, "state" : "NV" } +{ "_id" : "89117", "city" : "LAS VEGAS", "loc" : [ -115.275518, 36.130196 ], "pop" : 30271, "state" : "NV" } +{ "_id" : "89118", "city" : "LAS VEGAS", "loc" : [ -115.216856, 36.081052 ], "pop" : 9932, "state" : "NV" } +{ "_id" : "89119", "city" : "LAS VEGAS", "loc" : [ -115.136463, 36.100836 ], "pop" : 38719, "state" : "NV" } +{ "_id" : "89120", "city" : "LAS VEGAS", "loc" : [ -115.088485, 36.091423 ], "pop" : 16191, "state" : "NV" } +{ "_id" : "89121", "city" : "LAS VEGAS", "loc" : [ -115.090219, 36.12318 ], "pop" : 50168, "state" : "NV" } +{ "_id" : "89122", "city" : "LAS VEGAS", "loc" : [ -115.052322, 36.120501 ], "pop" : 27409, "state" : "NV" } +{ "_id" : "89123", "city" : "LAS VEGAS", "loc" : [ -115.146182, 36.038273 ], "pop" : 6706, "state" : "NV" } +{ "_id" : "89124", "city" : "LAS VEGAS", "loc" : [ -115.095067, 35.963391 ], "pop" : 2580, "state" : "NV" } +{ "_id" : "89128", "city" : "LAS VEGAS", "loc" : [ -115.256252, 36.175992 ], "pop" : 18956, "state" : "NV" } +{ "_id" : "89129", "city" : "LAS VEGAS", "loc" : [ -115.274254, 36.245004 ], "pop" : 5610, "state" : "NV" } +{ "_id" : "89130", "city" : "LAS VEGAS", "loc" : [ -115.221032, 36.247137 ], "pop" : 4383, "state" : "NV" } +{ "_id" : "89131", "city" : "LAS VEGAS", "loc" : [ -115.241942, 36.295604 ], "pop" : 1721, "state" : "NV" } +{ "_id" : "89134", "city" : "LAS VEGAS", "loc" : [ -115.294123, 36.209234 ], "pop" : 3630, "state" : "NV" } +{ "_id" : "89301", "city" : "ELY", "loc" : [ -114.878011, 39.309356 ], "pop" : 8558, "state" : "NV" } +{ "_id" : "89310", "city" : "AUSTIN", "loc" : [ -117.081063, 39.507986 ], "pop" : 1026, "state" : "NV" } +{ "_id" : "89311", "city" : "BAKER", "loc" : [ -114.246165, 39.065996 ], "pop" : 269, "state" : "NV" } +{ "_id" : "89316", "city" : "EUREKA", "loc" : [ -115.994308, 39.589661 ], "pop" : 1118, "state" : "NV" } +{ "_id" : "89317", "city" : "LUND", "loc" : [ -115.044026, 38.904633 ], "pop" : 437, "state" : "NV" } +{ "_id" : "89403", "city" : "DAYTON", "loc" : [ -119.52872, 39.280594 ], "pop" : 2183, "state" : "NV" } +{ "_id" : "89404", "city" : "DENIO", "loc" : [ -118.731962, 41.704263 ], "pop" : 199, "state" : "NV" } +{ "_id" : "89405", "city" : "EMPIRE", "loc" : [ -119.655265, 40.357703 ], "pop" : 246, "state" : "NV" } +{ "_id" : "89406", "city" : "FALLON", "loc" : [ -118.786112, 39.470254 ], "pop" : 17938, "state" : "NV" } +{ "_id" : "89408", "city" : "FERNLEY", "loc" : [ -119.235044, 39.601888 ], "pop" : 5188, "state" : "NV" } +{ "_id" : "89409", "city" : "GABBS", "loc" : [ -117.868556, 38.880226 ], "pop" : 809, "state" : "NV" } +{ "_id" : "89410", "city" : "GARDNERVILLE", "loc" : [ -119.726902, 38.898268 ], "pop" : 15778, "state" : "NV" } +{ "_id" : "89412", "city" : "GERLACH", "loc" : [ -119.377441, 40.674645 ], "pop" : 469, "state" : "NV" } +{ "_id" : "89413", "city" : "GLENBROOK", "loc" : [ -119.927776, 38.993752 ], "pop" : 5705, "state" : "NV" } +{ "_id" : "89414", "city" : "GOLCONDA", "loc" : [ -117.334929, 40.968325 ], "pop" : 411, "state" : "NV" } +{ "_id" : "89415", "city" : "HAWTHORNE", "loc" : [ -118.641143, 38.534658 ], "pop" : 5172, "state" : "NV" } +{ "_id" : "89418", "city" : "UNIONVILLE", "loc" : [ -118.02115, 40.652217 ], "pop" : 1060, "state" : "NV" } +{ "_id" : "89419", "city" : "LOVELOCK", "loc" : [ -118.468915, 40.1819 ], "pop" : 3276, "state" : "NV" } +{ "_id" : "89420", "city" : "LUNING", "loc" : [ -118.157114, 38.406072 ], "pop" : 501, "state" : "NV" } +{ "_id" : "89423", "city" : "MINDEN", "loc" : [ -119.731363, 39.021766 ], "pop" : 3385, "state" : "NV" } +{ "_id" : "89424", "city" : "NIXON", "loc" : [ -119.464262, 39.885388 ], "pop" : 610, "state" : "NV" } +{ "_id" : "89425", "city" : "OROVADA", "loc" : [ -117.775458, 41.822001 ], "pop" : 1039, "state" : "NV" } +{ "_id" : "89426", "city" : "PARADISE VALLEY", "loc" : [ -117.572848, 41.505726 ], "pop" : 244, "state" : "NV" } +{ "_id" : "89427", "city" : "SCHURZ", "loc" : [ -118.775578, 38.957527 ], "pop" : 802, "state" : "NV" } +{ "_id" : "89429", "city" : "SILVER SPRINGS", "loc" : [ -119.270503, 39.380045 ], "pop" : 3261, "state" : "NV" } +{ "_id" : "89430", "city" : "SMITH", "loc" : [ -119.389005, 38.917166 ], "pop" : 70, "state" : "NV" } +{ "_id" : "89431", "city" : "SPARKS", "loc" : [ -119.755588, 39.547254 ], "pop" : 33923, "state" : "NV" } +{ "_id" : "89433", "city" : "SUN VALLEY", "loc" : [ -119.775363, 39.595477 ], "pop" : 11261, "state" : "NV" } +{ "_id" : "89434", "city" : "SPARKS", "loc" : [ -119.717754, 39.550229 ], "pop" : 20249, "state" : "NV" } +{ "_id" : "89436", "city" : "SPARKS", "loc" : [ -119.708125, 39.626861 ], "pop" : 4228, "state" : "NV" } +{ "_id" : "89440", "city" : "VIRGINIA CITY", "loc" : [ -119.596063, 39.387282 ], "pop" : 2526, "state" : "NV" } +{ "_id" : "89442", "city" : "WADSWORTH", "loc" : [ -119.291778, 39.648069 ], "pop" : 757, "state" : "NV" } +{ "_id" : "89444", "city" : "WELLINGTON", "loc" : [ -119.344901, 38.78762 ], "pop" : 1004, "state" : "NV" } +{ "_id" : "89445", "city" : "WINNEMUCCA", "loc" : [ -117.746693, 40.966418 ], "pop" : 10951, "state" : "NV" } +{ "_id" : "89447", "city" : "YERINGTON", "loc" : [ -119.159558, 38.986567 ], "pop" : 6157, "state" : "NV" } +{ "_id" : "89451", "city" : "INCLINE VILLAGE", "loc" : [ -119.95206, 39.256352 ], "pop" : 7807, "state" : "NV" } +{ "_id" : "89501", "city" : "RENO", "loc" : [ -119.811275, 39.526812 ], "pop" : 2664, "state" : "NV" } +{ "_id" : "89502", "city" : "RENO", "loc" : [ -119.776395, 39.497239 ], "pop" : 38332, "state" : "NV" } +{ "_id" : "89503", "city" : "RENO", "loc" : [ -119.837409, 39.5354 ], "pop" : 23955, "state" : "NV" } +{ "_id" : "89506", "city" : "RENO", "loc" : [ -119.873505, 39.641168 ], "pop" : 24254, "state" : "NV" } +{ "_id" : "89509", "city" : "RENO", "loc" : [ -119.823932, 39.498042 ], "pop" : 36606, "state" : "NV" } +{ "_id" : "89510", "city" : "RENO", "loc" : [ -119.602678, 39.769919 ], "pop" : 613, "state" : "NV" } +{ "_id" : "89511", "city" : "RENO", "loc" : [ -119.766846, 39.41512 ], "pop" : 16412, "state" : "NV" } +{ "_id" : "89512", "city" : "RENO", "loc" : [ -119.795699, 39.548312 ], "pop" : 21009, "state" : "NV" } +{ "_id" : "89523", "city" : "RENO", "loc" : [ -119.903065, 39.524917 ], "pop" : 7697, "state" : "NV" } +{ "_id" : "89701", "city" : "CARSON CITY", "loc" : [ -119.745904, 39.150746 ], "pop" : 18817, "state" : "NV" } +{ "_id" : "89703", "city" : "CARSON CITY", "loc" : [ -119.778242, 39.17036 ], "pop" : 8047, "state" : "NV" } +{ "_id" : "89704", "city" : "CARSON CITY", "loc" : [ -119.828624, 39.089756 ], "pop" : 82, "state" : "NV" } +{ "_id" : "89705", "city" : "CARSON CITY", "loc" : [ -119.782899, 39.089147 ], "pop" : 2703, "state" : "NV" } +{ "_id" : "89706", "city" : "MOUNDHOUSE", "loc" : [ -119.742912, 39.210876 ], "pop" : 19276, "state" : "NV" } +{ "_id" : "89801", "city" : "JIGGS", "loc" : [ -115.724679, 40.826247 ], "pop" : 24461, "state" : "NV" } +{ "_id" : "89820", "city" : "BATTLE MOUNTAIN", "loc" : [ -116.955439, 40.621985 ], "pop" : 5240, "state" : "NV" } +{ "_id" : "89821", "city" : "BEOWAWE", "loc" : [ -116.477387, 40.462398 ], "pop" : 429, "state" : "NV" } +{ "_id" : "89822", "city" : "CARLIN", "loc" : [ -116.108208, 40.717216 ], "pop" : 2272, "state" : "NV" } +{ "_id" : "89823", "city" : "DEETH", "loc" : [ -115.371729, 41.431033 ], "pop" : 69, "state" : "NV" } +{ "_id" : "89825", "city" : "JACKPOT", "loc" : [ -115.112886, 41.839591 ], "pop" : 95, "state" : "NV" } +{ "_id" : "89831", "city" : "MOUNTAIN CITY", "loc" : [ -116.113801, 41.870781 ], "pop" : 1259, "state" : "NV" } +{ "_id" : "89833", "city" : "RUBY VALLEY", "loc" : [ -115.231219, 40.399514 ], "pop" : 37, "state" : "NV" } +{ "_id" : "89834", "city" : "TUSCARORA", "loc" : [ -116.931141, 41.171527 ], "pop" : 1, "state" : "NV" } +{ "_id" : "89835", "city" : "OASIS", "loc" : [ -114.532752, 41.129798 ], "pop" : 5336, "state" : "NV" } +{ "_id" : "90001", "city" : "LOS ANGELES", "loc" : [ -118.247896, 33.973093 ], "pop" : 51841, "state" : "CA" } +{ "_id" : "90002", "city" : "LOS ANGELES", "loc" : [ -118.246213, 33.94969 ], "pop" : 40629, "state" : "CA" } +{ "_id" : "90003", "city" : "LOS ANGELES", "loc" : [ -118.272739, 33.965335 ], "pop" : 53938, "state" : "CA" } +{ "_id" : "90004", "city" : "LOS ANGELES", "loc" : [ -118.302863, 34.076163 ], "pop" : 64062, "state" : "CA" } +{ "_id" : "90005", "city" : "LOS ANGELES", "loc" : [ -118.301197, 34.058508 ], "pop" : 35864, "state" : "CA" } +{ "_id" : "90006", "city" : "LOS ANGELES", "loc" : [ -118.291687, 34.049323 ], "pop" : 63389, "state" : "CA" } +{ "_id" : "90007", "city" : "LOS ANGELES", "loc" : [ -118.287095, 34.029442 ], "pop" : 46985, "state" : "CA" } +{ "_id" : "90008", "city" : "LOS ANGELES", "loc" : [ -118.341123, 34.011643 ], "pop" : 33073, "state" : "CA" } +{ "_id" : "90010", "city" : "LOS ANGELES", "loc" : [ -118.302664, 34.060633 ], "pop" : 5335, "state" : "CA" } +{ "_id" : "90011", "city" : "LOS ANGELES", "loc" : [ -118.258189, 34.007856 ], "pop" : 96074, "state" : "CA" } +{ "_id" : "90012", "city" : "LOS ANGELES", "loc" : [ -118.238479, 34.061396 ], "pop" : 28518, "state" : "CA" } +{ "_id" : "90013", "city" : "LOS ANGELES", "loc" : [ -118.243366, 34.044841 ], "pop" : 5653, "state" : "CA" } +{ "_id" : "90014", "city" : "LOS ANGELES", "loc" : [ -118.250937, 34.044272 ], "pop" : 2715, "state" : "CA" } +{ "_id" : "90015", "city" : "LOS ANGELES", "loc" : [ -118.271613, 34.043439 ], "pop" : 18880, "state" : "CA" } +{ "_id" : "90016", "city" : "LOS ANGELES", "loc" : [ -118.352787, 34.029826 ], "pop" : 43669, "state" : "CA" } +{ "_id" : "90017", "city" : "LOS ANGELES", "loc" : [ -118.266582, 34.055864 ], "pop" : 21790, "state" : "CA" } +{ "_id" : "90018", "city" : "LOS ANGELES", "loc" : [ -118.315173, 34.028972 ], "pop" : 48267, "state" : "CA" } +{ "_id" : "90019", "city" : "LOS ANGELES", "loc" : [ -118.33426, 34.048158 ], "pop" : 64996, "state" : "CA" } +{ "_id" : "90020", "city" : "LOS ANGELES", "loc" : [ -118.302211, 34.066535 ], "pop" : 34926, "state" : "CA" } +{ "_id" : "90021", "city" : "LOS ANGELES", "loc" : [ -118.244698, 34.033303 ], "pop" : 2869, "state" : "CA" } +{ "_id" : "90022", "city" : "EAST LOS ANGELES", "loc" : [ -118.155319, 34.023638 ], "pop" : 65065, "state" : "CA" } +{ "_id" : "90023", "city" : "LOS ANGELES", "loc" : [ -118.197498, 34.024478 ], "pop" : 47136, "state" : "CA" } +{ "_id" : "90024", "city" : "LOS ANGELES", "loc" : [ -118.440796, 34.063691 ], "pop" : 38370, "state" : "CA" } +{ "_id" : "90025", "city" : "LOS ANGELES", "loc" : [ -118.448717, 34.044662 ], "pop" : 37746, "state" : "CA" } +{ "_id" : "90026", "city" : "LOS ANGELES", "loc" : [ -118.264641, 34.076629 ], "pop" : 74751, "state" : "CA" } +{ "_id" : "90027", "city" : "LOS ANGELES", "loc" : [ -118.292516, 34.104031 ], "pop" : 50484, "state" : "CA" } +{ "_id" : "90028", "city" : "LOS ANGELES", "loc" : [ -118.325363, 34.100549 ], "pop" : 30152, "state" : "CA" } +{ "_id" : "90029", "city" : "LOS ANGELES", "loc" : [ -118.294393, 34.089982 ], "pop" : 41120, "state" : "CA" } +{ "_id" : "90031", "city" : "LOS ANGELES", "loc" : [ -118.211279, 34.078349 ], "pop" : 39706, "state" : "CA" } +{ "_id" : "90032", "city" : "LOS ANGELES", "loc" : [ -118.175323, 34.081785 ], "pop" : 46602, "state" : "CA" } +{ "_id" : "90033", "city" : "LOS ANGELES", "loc" : [ -118.208442, 34.048676 ], "pop" : 57469, "state" : "CA" } +{ "_id" : "90034", "city" : "LOS ANGELES", "loc" : [ -118.400482, 34.028977 ], "pop" : 53930, "state" : "CA" } +{ "_id" : "90035", "city" : "LOS ANGELES", "loc" : [ -118.380615, 34.053096 ], "pop" : 25723, "state" : "CA" } +{ "_id" : "90036", "city" : "LOS ANGELES", "loc" : [ -118.349175, 34.069888 ], "pop" : 29887, "state" : "CA" } +{ "_id" : "90037", "city" : "LOS ANGELES", "loc" : [ -118.286284, 34.002982 ], "pop" : 56922, "state" : "CA" } +{ "_id" : "90038", "city" : "LOS ANGELES", "loc" : [ -118.321489, 34.089769 ], "pop" : 33001, "state" : "CA" } +{ "_id" : "90039", "city" : "LOS ANGELES", "loc" : [ -118.259428, 34.112089 ], "pop" : 29189, "state" : "CA" } +{ "_id" : "90040", "city" : "CITY OF COMMERCE", "loc" : [ -118.151352, 33.99471 ], "pop" : 9689, "state" : "CA" } +{ "_id" : "90041", "city" : "LOS ANGELES", "loc" : [ -118.208205, 34.133932 ], "pop" : 26864, "state" : "CA" } +{ "_id" : "90042", "city" : "LOS ANGELES", "loc" : [ -118.192902, 34.114527 ], "pop" : 60003, "state" : "CA" } +{ "_id" : "90043", "city" : "LOS ANGELES", "loc" : [ -118.33211, 33.987099 ], "pop" : 45397, "state" : "CA" } +{ "_id" : "90044", "city" : "LOS ANGELES", "loc" : [ -118.290119, 33.955089 ], "pop" : 83958, "state" : "CA" } +{ "_id" : "90045", "city" : "LOS ANGELES", "loc" : [ -118.394128, 33.963075 ], "pop" : 36480, "state" : "CA" } +{ "_id" : "90046", "city" : "COLE", "loc" : [ -118.357979, 34.09743 ], "pop" : 48423, "state" : "CA" } +{ "_id" : "90047", "city" : "LOS ANGELES", "loc" : [ -118.307304, 33.956896 ], "pop" : 47975, "state" : "CA" } +{ "_id" : "90048", "city" : "LOS ANGELES", "loc" : [ -118.371969, 34.073656 ], "pop" : 20863, "state" : "CA" } +{ "_id" : "90049", "city" : "LOS ANGELES", "loc" : [ -118.473967, 34.066 ], "pop" : 35507, "state" : "CA" } +{ "_id" : "90056", "city" : "LOS ANGELES", "loc" : [ -118.370703, 33.985329 ], "pop" : 8108, "state" : "CA" } +{ "_id" : "90057", "city" : "LOS ANGELES", "loc" : [ -118.276262, 34.062172 ], "pop" : 39017, "state" : "CA" } +{ "_id" : "90058", "city" : "VERNON", "loc" : [ -118.235365, 33.997344 ], "pop" : 4090, "state" : "CA" } +{ "_id" : "90059", "city" : "LOS ANGELES", "loc" : [ -118.24628, 33.929331 ], "pop" : 34536, "state" : "CA" } +{ "_id" : "90061", "city" : "LOS ANGELES", "loc" : [ -118.271638, 33.924493 ], "pop" : 21856, "state" : "CA" } +{ "_id" : "90062", "city" : "LOS ANGELES", "loc" : [ -118.307277, 34.00324 ], "pop" : 27517, "state" : "CA" } +{ "_id" : "90063", "city" : "HAZARD", "loc" : [ -118.185432, 34.044017 ], "pop" : 61123, "state" : "CA" } +{ "_id" : "90064", "city" : "LOS ANGELES", "loc" : [ -118.425911, 34.035279 ], "pop" : 23530, "state" : "CA" } +{ "_id" : "90065", "city" : "LOS ANGELES", "loc" : [ -118.226637, 34.107307 ], "pop" : 45578, "state" : "CA" } +{ "_id" : "90066", "city" : "LOS ANGELES", "loc" : [ -118.429769, 34.002956 ], "pop" : 53095, "state" : "CA" } +{ "_id" : "90067", "city" : "LOS ANGELES", "loc" : [ -118.409479, 34.055146 ], "pop" : 2731, "state" : "CA" } +{ "_id" : "90068", "city" : "LOS ANGELES", "loc" : [ -118.330476, 34.115625 ], "pop" : 25615, "state" : "CA" } +{ "_id" : "90069", "city" : "WEST HOLLYWOOD", "loc" : [ -118.378753, 34.090573 ], "pop" : 20587, "state" : "CA" } +{ "_id" : "90071", "city" : "LOS ANGELES", "loc" : [ -118.257127, 34.052043 ], "pop" : 15, "state" : "CA" } +{ "_id" : "90077", "city" : "LOS ANGELES", "loc" : [ -118.450155, 34.111245 ], "pop" : 7989, "state" : "CA" } +{ "_id" : "90201", "city" : "BELL GARDENS", "loc" : [ -118.17205, 33.969177 ], "pop" : 99568, "state" : "CA" } +{ "_id" : "90210", "city" : "BEVERLY HILLS", "loc" : [ -118.406477, 34.090107 ], "pop" : 20700, "state" : "CA" } +{ "_id" : "90211", "city" : "BEVERLY HILLS", "loc" : [ -118.383007, 34.065217 ], "pop" : 7746, "state" : "CA" } +{ "_id" : "90212", "city" : "BEVERLY HILLS", "loc" : [ -118.399544, 34.061855 ], "pop" : 10725, "state" : "CA" } +{ "_id" : "90220", "city" : "RANCHO DOMINGUEZ", "loc" : [ -118.239044, 33.890654 ], "pop" : 47631, "state" : "CA" } +{ "_id" : "90221", "city" : "EAST RANCHO DOMI", "loc" : [ -118.203724, 33.897324 ], "pop" : 47844, "state" : "CA" } +{ "_id" : "90222", "city" : "ROSEWOOD", "loc" : [ -118.234034, 33.911535 ], "pop" : 28754, "state" : "CA" } +{ "_id" : "90230", "city" : "CULVER CITY", "loc" : [ -118.399115, 33.994927 ], "pop" : 32207, "state" : "CA" } +{ "_id" : "90232", "city" : "CULVER CITY", "loc" : [ -118.397332, 34.016809 ], "pop" : 16138, "state" : "CA" } +{ "_id" : "90240", "city" : "DOWNEY", "loc" : [ -118.117381, 33.958135 ], "pop" : 20273, "state" : "CA" } +{ "_id" : "90241", "city" : "DOWNEY", "loc" : [ -118.13062, 33.941612 ], "pop" : 34348, "state" : "CA" } +{ "_id" : "90242", "city" : "DOWNEY", "loc" : [ -118.139465, 33.921789 ], "pop" : 36988, "state" : "CA" } +{ "_id" : "90245", "city" : "EL SEGUNDO", "loc" : [ -118.411924, 33.924275 ], "pop" : 15162, "state" : "CA" } +{ "_id" : "90247", "city" : "GARDENA", "loc" : [ -118.296122, 33.892463 ], "pop" : 42072, "state" : "CA" } +{ "_id" : "90248", "city" : "GARDENA", "loc" : [ -118.289312, 33.874506 ], "pop" : 9529, "state" : "CA" } +{ "_id" : "90249", "city" : "GARDENA", "loc" : [ -118.319854, 33.899762 ], "pop" : 25806, "state" : "CA" } +{ "_id" : "90250", "city" : "HOLLY PARK", "loc" : [ -118.346978, 33.913214 ], "pop" : 78511, "state" : "CA" } +{ "_id" : "90254", "city" : "HERMOSA BEACH", "loc" : [ -118.395511, 33.864309 ], "pop" : 18289, "state" : "CA" } +{ "_id" : "90255", "city" : "HUNTINGTON PARK", "loc" : [ -118.216053, 33.976879 ], "pop" : 72139, "state" : "CA" } +{ "_id" : "90260", "city" : "LAWNDALE", "loc" : [ -118.351014, 33.887908 ], "pop" : 29576, "state" : "CA" } +{ "_id" : "90262", "city" : "LYNWOOD", "loc" : [ -118.201289, 33.924076 ], "pop" : 61606, "state" : "CA" } +{ "_id" : "90265", "city" : "MALIBU", "loc" : [ -118.735149, 34.040184 ], "pop" : 17850, "state" : "CA" } +{ "_id" : "90266", "city" : "MANHATTAN BEACH", "loc" : [ -118.399562, 33.889594 ], "pop" : 31984, "state" : "CA" } +{ "_id" : "90270", "city" : "MAYWOOD", "loc" : [ -118.187685, 33.988992 ], "pop" : 27801, "state" : "CA" } +{ "_id" : "90272", "city" : "PACIFIC PALISADE", "loc" : [ -118.536874, 34.054097 ], "pop" : 20984, "state" : "CA" } +{ "_id" : "90274", "city" : "PALOS VERDES EST", "loc" : [ -118.374763, 33.770094 ], "pop" : 60381, "state" : "CA" } +{ "_id" : "90277", "city" : "REDONDO BEACH", "loc" : [ -118.383221, 33.830656 ], "pop" : 33102, "state" : "CA" } +{ "_id" : "90278", "city" : "REDONDO BEACH", "loc" : [ -118.371459, 33.870654 ], "pop" : 34873, "state" : "CA" } +{ "_id" : "90280", "city" : "SOUTH GATE", "loc" : [ -118.201349, 33.94617 ], "pop" : 87026, "state" : "CA" } +{ "_id" : "90290", "city" : "TOPANGA", "loc" : [ -118.602268, 34.10759 ], "pop" : 5430, "state" : "CA" } +{ "_id" : "90291", "city" : "VENICE", "loc" : [ -118.463463, 33.993772 ], "pop" : 32987, "state" : "CA" } +{ "_id" : "90292", "city" : "MARINA DEL REY", "loc" : [ -118.452475, 33.977876 ], "pop" : 16572, "state" : "CA" } +{ "_id" : "90293", "city" : "PLAYA DEL REY", "loc" : [ -118.437314, 33.957745 ], "pop" : 11477, "state" : "CA" } +{ "_id" : "90301", "city" : "INGLEWOOD", "loc" : [ -118.355575, 33.955048 ], "pop" : 36481, "state" : "CA" } +{ "_id" : "90302", "city" : "INGLEWOOD", "loc" : [ -118.354805, 33.974496 ], "pop" : 28681, "state" : "CA" } +{ "_id" : "90303", "city" : "INGLEWOOD", "loc" : [ -118.332058, 33.937691 ], "pop" : 26418, "state" : "CA" } +{ "_id" : "90304", "city" : "LENNOX", "loc" : [ -118.355562, 33.938514 ], "pop" : 28216, "state" : "CA" } +{ "_id" : "90305", "city" : "INGLEWOOD", "loc" : [ -118.32585, 33.958304 ], "pop" : 14370, "state" : "CA" } +{ "_id" : "90401", "city" : "SANTA MONICA", "loc" : [ -118.490708, 34.017628 ], "pop" : 4813, "state" : "CA" } +{ "_id" : "90402", "city" : "SANTA MONICA", "loc" : [ -118.503011, 34.034875 ], "pop" : 14628, "state" : "CA" } +{ "_id" : "90403", "city" : "SANTA MONICA", "loc" : [ -118.49241, 34.028658 ], "pop" : 22303, "state" : "CA" } +{ "_id" : "90404", "city" : "SANTA MONICA", "loc" : [ -118.4733, 34.026828 ], "pop" : 22480, "state" : "CA" } +{ "_id" : "90405", "city" : "SANTA MONICA", "loc" : [ -118.471708, 34.01001 ], "pop" : 26081, "state" : "CA" } +{ "_id" : "90501", "city" : "TORRANCE", "loc" : [ -118.31183, 33.826817 ], "pop" : 37691, "state" : "CA" } +{ "_id" : "90502", "city" : "TORRANCE", "loc" : [ -118.292039, 33.828555 ], "pop" : 15963, "state" : "CA" } +{ "_id" : "90503", "city" : "TORRANCE", "loc" : [ -118.354236, 33.839709 ], "pop" : 40351, "state" : "CA" } +{ "_id" : "90504", "city" : "TORRANCE", "loc" : [ -118.329517, 33.870815 ], "pop" : 30245, "state" : "CA" } +{ "_id" : "90505", "city" : "TORRANCE", "loc" : [ -118.350733, 33.810635 ], "pop" : 33933, "state" : "CA" } +{ "_id" : "90506", "city" : "TORRANCE", "loc" : [ -118.329543, 33.885367 ], "pop" : 0, "state" : "CA" } +{ "_id" : "90601", "city" : "WHITTIER", "loc" : [ -118.037139, 34.001119 ], "pop" : 30501, "state" : "CA" } +{ "_id" : "90602", "city" : "WHITTIER", "loc" : [ -118.033703, 33.96931 ], "pop" : 23508, "state" : "CA" } +{ "_id" : "90603", "city" : "WHITTIER", "loc" : [ -117.992685, 33.943199 ], "pop" : 18063, "state" : "CA" } +{ "_id" : "90604", "city" : "WHITTIER", "loc" : [ -118.012075, 33.929931 ], "pop" : 36371, "state" : "CA" } +{ "_id" : "90605", "city" : "WHITTIER", "loc" : [ -118.035568, 33.941338 ], "pop" : 34035, "state" : "CA" } +{ "_id" : "90606", "city" : "LOS NIETOS", "loc" : [ -118.065639, 33.977019 ], "pop" : 30185, "state" : "CA" } +{ "_id" : "90620", "city" : "BUENA PARK", "loc" : [ -118.011359, 33.840607 ], "pop" : 42966, "state" : "CA" } +{ "_id" : "90621", "city" : "BUENA PARK", "loc" : [ -117.994257, 33.873136 ], "pop" : 27502, "state" : "CA" } +{ "_id" : "90623", "city" : "CERRITOS", "loc" : [ -118.040618, 33.849017 ], "pop" : 15066, "state" : "CA" } +{ "_id" : "90630", "city" : "CYPRESS", "loc" : [ -118.038696, 33.818613 ], "pop" : 43055, "state" : "CA" } +{ "_id" : "90631", "city" : "LA HABRA HEIGHTS", "loc" : [ -117.949703, 33.932173 ], "pop" : 59113, "state" : "CA" } +{ "_id" : "90638", "city" : "LA MIRADA", "loc" : [ -118.010081, 33.906681 ], "pop" : 40452, "state" : "CA" } +{ "_id" : "90640", "city" : "MONTEBELLO", "loc" : [ -118.112986, 34.013342 ], "pop" : 59068, "state" : "CA" } +{ "_id" : "90650", "city" : "NORWALK", "loc" : [ -118.081767, 33.90564 ], "pop" : 94188, "state" : "CA" } +{ "_id" : "90660", "city" : "PICO RIVERA", "loc" : [ -118.088269, 33.98857 ], "pop" : 58891, "state" : "CA" } +{ "_id" : "90670", "city" : "SANTA FE SPRINGS", "loc" : [ -118.083801, 33.946407 ], "pop" : 14417, "state" : "CA" } +{ "_id" : "90680", "city" : "STANTON", "loc" : [ -117.994709, 33.803029 ], "pop" : 25160, "state" : "CA" } +{ "_id" : "90701", "city" : "CERRITOS", "loc" : [ -118.068046, 33.866568 ], "pop" : 69130, "state" : "CA" } +{ "_id" : "90704", "city" : "AVALON", "loc" : [ -118.343706, 33.331963 ], "pop" : 3445, "state" : "CA" } +{ "_id" : "90706", "city" : "BELLFLOWER", "loc" : [ -118.126527, 33.886676 ], "pop" : 61650, "state" : "CA" } +{ "_id" : "90710", "city" : "HARBOR CITY", "loc" : [ -118.299114, 33.797006 ], "pop" : 24418, "state" : "CA" } +{ "_id" : "90712", "city" : "LAKEWOOD", "loc" : [ -118.145727, 33.851201 ], "pop" : 28992, "state" : "CA" } +{ "_id" : "90713", "city" : "LAKEWOOD", "loc" : [ -118.111464, 33.847302 ], "pop" : 26646, "state" : "CA" } +{ "_id" : "90715", "city" : "LAKEWOOD", "loc" : [ -118.076707, 33.840453 ], "pop" : 17983, "state" : "CA" } +{ "_id" : "90716", "city" : "HAWAIIAN GARDENS", "loc" : [ -118.072964, 33.82958 ], "pop" : 13921, "state" : "CA" } +{ "_id" : "90717", "city" : "RANCHO PALOS VER", "loc" : [ -118.31693, 33.793339 ], "pop" : 19635, "state" : "CA" } +{ "_id" : "90720", "city" : "ROSSMOOR", "loc" : [ -118.069891, 33.795291 ], "pop" : 21695, "state" : "CA" } +{ "_id" : "90723", "city" : "PARAMOUNT", "loc" : [ -118.163152, 33.896867 ], "pop" : 46679, "state" : "CA" } +{ "_id" : "90731", "city" : "SAN PEDRO", "loc" : [ -118.291425, 33.733894 ], "pop" : 58821, "state" : "CA" } +{ "_id" : "90732", "city" : "RANCHO PALOS VER", "loc" : [ -118.310597, 33.744947 ], "pop" : 26244, "state" : "CA" } +{ "_id" : "90740", "city" : "SEAL BEACH", "loc" : [ -118.08428, 33.760971 ], "pop" : 24537, "state" : "CA" } +{ "_id" : "90744", "city" : "WILMINGTON", "loc" : [ -118.264451, 33.785475 ], "pop" : 49178, "state" : "CA" } +{ "_id" : "90745", "city" : "CARSON", "loc" : [ -118.268352, 33.822968 ], "pop" : 50251, "state" : "CA" } +{ "_id" : "90746", "city" : "CARSON", "loc" : [ -118.255449, 33.858444 ], "pop" : 25970, "state" : "CA" } +{ "_id" : "90802", "city" : "LONG BEACH", "loc" : [ -118.182025, 33.770553 ], "pop" : 33906, "state" : "CA" } +{ "_id" : "90803", "city" : "LONG BEACH", "loc" : [ -118.134073, 33.761932 ], "pop" : 32492, "state" : "CA" } +{ "_id" : "90804", "city" : "SIGNAL HILL", "loc" : [ -118.155187, 33.782993 ], "pop" : 36092, "state" : "CA" } +{ "_id" : "90805", "city" : "LONG BEACH", "loc" : [ -118.180102, 33.863457 ], "pop" : 74011, "state" : "CA" } +{ "_id" : "90806", "city" : "SIGNAL HILL", "loc" : [ -118.187443, 33.799319 ], "pop" : 44982, "state" : "CA" } +{ "_id" : "90807", "city" : "SIGNAL HILL", "loc" : [ -118.18092, 33.830712 ], "pop" : 28037, "state" : "CA" } +{ "_id" : "90808", "city" : "LONG BEACH", "loc" : [ -118.110299, 33.824145 ], "pop" : 37809, "state" : "CA" } +{ "_id" : "90810", "city" : "CARSON", "loc" : [ -118.215006, 33.810985 ], "pop" : 36694, "state" : "CA" } +{ "_id" : "90813", "city" : "LONG BEACH", "loc" : [ -118.183488, 33.78202 ], "pop" : 58109, "state" : "CA" } +{ "_id" : "90814", "city" : "LONG BEACH", "loc" : [ -118.147988, 33.771576 ], "pop" : 17359, "state" : "CA" } +{ "_id" : "90815", "city" : "LONG BEACH", "loc" : [ -118.119249, 33.793908 ], "pop" : 38603, "state" : "CA" } +{ "_id" : "90822", "city" : "LONG BEACH", "loc" : [ -118.239257, 33.744415 ], "pop" : 7362, "state" : "CA" } +{ "_id" : "91001", "city" : "ALTADENA", "loc" : [ -118.13919, 34.191187 ], "pop" : 36013, "state" : "CA" } +{ "_id" : "91006", "city" : "ARCADIA", "loc" : [ -118.026374, 34.132389 ], "pop" : 30550, "state" : "CA" } +{ "_id" : "91007", "city" : "ARCADIA", "loc" : [ -118.051483, 34.124271 ], "pop" : 25675, "state" : "CA" } +{ "_id" : "91010", "city" : "BRADBURY", "loc" : [ -117.967005, 34.137445 ], "pop" : 26462, "state" : "CA" } +{ "_id" : "91011", "city" : "FLINTRIDGE", "loc" : [ -118.199008, 34.209282 ], "pop" : 19699, "state" : "CA" } +{ "_id" : "91016", "city" : "MONROVIA", "loc" : [ -118.001376, 34.143959 ], "pop" : 39015, "state" : "CA" } +{ "_id" : "91020", "city" : "MONTROSE", "loc" : [ -118.230529, 34.211425 ], "pop" : 6536, "state" : "CA" } +{ "_id" : "91024", "city" : "SIERRA MADRE", "loc" : [ -118.051916, 34.165101 ], "pop" : 10560, "state" : "CA" } +{ "_id" : "91030", "city" : "SOUTH PASADENA", "loc" : [ -118.154696, 34.110939 ], "pop" : 23936, "state" : "CA" } +{ "_id" : "91040", "city" : "SHADOW HILLS", "loc" : [ -118.321359, 34.261025 ], "pop" : 18303, "state" : "CA" } +{ "_id" : "91042", "city" : "TUJUNGA", "loc" : [ -118.284856, 34.254389 ], "pop" : 24853, "state" : "CA" } +{ "_id" : "91101", "city" : "PASADENA", "loc" : [ -118.139119, 34.146762 ], "pop" : 16045, "state" : "CA" } +{ "_id" : "91103", "city" : "PASADENA", "loc" : [ -118.155119, 34.166906 ], "pop" : 26641, "state" : "CA" } +{ "_id" : "91104", "city" : "PASADENA", "loc" : [ -118.12609, 34.167776 ], "pop" : 37973, "state" : "CA" } +{ "_id" : "91105", "city" : "PASADENA", "loc" : [ -118.163577, 34.135455 ], "pop" : 11165, "state" : "CA" } +{ "_id" : "91106", "city" : "PASADENA", "loc" : [ -118.126647, 34.143527 ], "pop" : 23854, "state" : "CA" } +{ "_id" : "91107", "city" : "PASADENA", "loc" : [ -118.088905, 34.150997 ], "pop" : 31390, "state" : "CA" } +{ "_id" : "91108", "city" : "SAN MARINO", "loc" : [ -118.111745, 34.120698 ], "pop" : 12953, "state" : "CA" } +{ "_id" : "91201", "city" : "GLENDALE", "loc" : [ -118.289892, 34.171606 ], "pop" : 22495, "state" : "CA" } +{ "_id" : "91202", "city" : "GLENDALE", "loc" : [ -118.265649, 34.165235 ], "pop" : 20331, "state" : "CA" } +{ "_id" : "91203", "city" : "GLENDALE", "loc" : [ -118.263614, 34.151718 ], "pop" : 12714, "state" : "CA" } +{ "_id" : "91204", "city" : "GLENDALE", "loc" : [ -118.259947, 34.137871 ], "pop" : 15541, "state" : "CA" } +{ "_id" : "91205", "city" : "GLENDALE", "loc" : [ -118.24245, 34.137798 ], "pop" : 38428, "state" : "CA" } +{ "_id" : "91206", "city" : "GLENDALE", "loc" : [ -118.232217, 34.155605 ], "pop" : 30415, "state" : "CA" } +{ "_id" : "91207", "city" : "GLENDALE", "loc" : [ -118.245086, 34.164856 ], "pop" : 8911, "state" : "CA" } +{ "_id" : "91208", "city" : "GLENDALE", "loc" : [ -118.234966, 34.19212 ], "pop" : 14831, "state" : "CA" } +{ "_id" : "91214", "city" : "LA CRESCENTA", "loc" : [ -118.245687, 34.231619 ], "pop" : 27249, "state" : "CA" } +{ "_id" : "91301", "city" : "OAK PARK", "loc" : [ -118.75718, 34.157163 ], "pop" : 35520, "state" : "CA" } +{ "_id" : "91302", "city" : "CALABASAS", "loc" : [ -118.664103, 34.141854 ], "pop" : 12690, "state" : "CA" } +{ "_id" : "91303", "city" : "CANOGA PARK", "loc" : [ -118.59828, 34.199257 ], "pop" : 19656, "state" : "CA" } +{ "_id" : "91304", "city" : "CANOGA PARK", "loc" : [ -118.611059, 34.219671 ], "pop" : 43675, "state" : "CA" } +{ "_id" : "91306", "city" : "WINNETKA", "loc" : [ -118.57492, 34.2092 ], "pop" : 39261, "state" : "CA" } +{ "_id" : "91307", "city" : "WEST HILLS", "loc" : [ -118.638892, 34.196343 ], "pop" : 22049, "state" : "CA" } +{ "_id" : "91311", "city" : "CHATSWORTH", "loc" : [ -118.591357, 34.258253 ], "pop" : 37225, "state" : "CA" } +{ "_id" : "91316", "city" : "ENCINO", "loc" : [ -118.517542, 34.165479 ], "pop" : 24538, "state" : "CA" } +{ "_id" : "91320", "city" : "NEWBURY PARK", "loc" : [ -118.935798, 34.177393 ], "pop" : 31941, "state" : "CA" } +{ "_id" : "91321", "city" : "NEWHALL", "loc" : [ -118.523005, 34.379519 ], "pop" : 23520, "state" : "CA" } +{ "_id" : "91324", "city" : "NORTHRIDGE", "loc" : [ -118.546595, 34.236743 ], "pop" : 23252, "state" : "CA" } +{ "_id" : "91325", "city" : "NORTHRIDGE", "loc" : [ -118.51884, 34.235332 ], "pop" : 28071, "state" : "CA" } +{ "_id" : "91326", "city" : "PORTER RANCH", "loc" : [ -118.541235, 34.274191 ], "pop" : 23466, "state" : "CA" } +{ "_id" : "91330", "city" : "CALIFORNIA STATE", "loc" : [ -118.528634, 34.23805 ], "pop" : 1604, "state" : "CA" } +{ "_id" : "91331", "city" : "ARLETA", "loc" : [ -118.420692, 34.258081 ], "pop" : 88114, "state" : "CA" } +{ "_id" : "91335", "city" : "RESEDA", "loc" : [ -118.539071, 34.200663 ], "pop" : 62117, "state" : "CA" } +{ "_id" : "91340", "city" : "SAN FERNANDO", "loc" : [ -118.435242, 34.287509 ], "pop" : 33379, "state" : "CA" } +{ "_id" : "91342", "city" : "SYLMAR", "loc" : [ -118.432181, 34.30538 ], "pop" : 68612, "state" : "CA" } +{ "_id" : "91343", "city" : "NORTH HILLS", "loc" : [ -118.47582, 34.236636 ], "pop" : 48751, "state" : "CA" } +{ "_id" : "91344", "city" : "GRANADA HILLS", "loc" : [ -118.4992, 34.277068 ], "pop" : 45729, "state" : "CA" } +{ "_id" : "91345", "city" : "MISSION HILLS", "loc" : [ -118.458659, 34.261873 ], "pop" : 14886, "state" : "CA" } +{ "_id" : "91350", "city" : "AGUA DULCE", "loc" : [ -118.488955, 34.459742 ], "pop" : 31741, "state" : "CA" } +{ "_id" : "91351", "city" : "CANYON COUNTRY", "loc" : [ -118.449011, 34.426203 ], "pop" : 47273, "state" : "CA" } +{ "_id" : "91352", "city" : "SUN VALLEY", "loc" : [ -118.369853, 34.220907 ], "pop" : 43722, "state" : "CA" } +{ "_id" : "91354", "city" : "VALENCIA", "loc" : [ -118.537437, 34.446608 ], "pop" : 7918, "state" : "CA" } +{ "_id" : "91355", "city" : "VALENCIA", "loc" : [ -118.55352, 34.398456 ], "pop" : 23550, "state" : "CA" } +{ "_id" : "91356", "city" : "TARZANA", "loc" : [ -118.541354, 34.16708 ], "pop" : 25316, "state" : "CA" } +{ "_id" : "91360", "city" : "THOUSAND OAKS", "loc" : [ -118.873908, 34.209179 ], "pop" : 41654, "state" : "CA" } +{ "_id" : "91361", "city" : "WESTLAKE VILLAGE", "loc" : [ -118.83832, 34.147233 ], "pop" : 18608, "state" : "CA" } +{ "_id" : "91362", "city" : "WESTLAKE VILLAGE", "loc" : [ -118.830601, 34.191884 ], "pop" : 26572, "state" : "CA" } +{ "_id" : "91364", "city" : "WOODLAND HILLS", "loc" : [ -118.600019, 34.155652 ], "pop" : 25638, "state" : "CA" } +{ "_id" : "91367", "city" : "WOODLAND HILLS", "loc" : [ -118.615891, 34.176689 ], "pop" : 34253, "state" : "CA" } +{ "_id" : "91381", "city" : "NEWHALL", "loc" : [ -118.582134, 34.381067 ], "pop" : 1677, "state" : "CA" } +{ "_id" : "91384", "city" : "CASTAIC", "loc" : [ -118.62537, 34.482695 ], "pop" : 19440, "state" : "CA" } +{ "_id" : "91401", "city" : "VAN NUYS", "loc" : [ -118.432375, 34.180152 ], "pop" : 35990, "state" : "CA" } +{ "_id" : "91402", "city" : "PANORAMA CITY", "loc" : [ -118.447009, 34.226158 ], "pop" : 52577, "state" : "CA" } +{ "_id" : "91403", "city" : "SHERMAN OAKS", "loc" : [ -118.460325, 34.151407 ], "pop" : 20046, "state" : "CA" } +{ "_id" : "91405", "city" : "VAN NUYS", "loc" : [ -118.445636, 34.200068 ], "pop" : 39669, "state" : "CA" } +{ "_id" : "91406", "city" : "VAN NUYS", "loc" : [ -118.486821, 34.200568 ], "pop" : 46124, "state" : "CA" } +{ "_id" : "91411", "city" : "VAN NUYS", "loc" : [ -118.457396, 34.178133 ], "pop" : 21616, "state" : "CA" } +{ "_id" : "91423", "city" : "SHERMAN OAKS", "loc" : [ -118.432208, 34.152565 ], "pop" : 27747, "state" : "CA" } +{ "_id" : "91436", "city" : "ENCINO", "loc" : [ -118.488238, 34.15098 ], "pop" : 13605, "state" : "CA" } +{ "_id" : "91501", "city" : "BURBANK", "loc" : [ -118.300898, 34.186238 ], "pop" : 15991, "state" : "CA" } +{ "_id" : "91502", "city" : "BURBANK", "loc" : [ -118.305912, 34.174487 ], "pop" : 9833, "state" : "CA" } +{ "_id" : "91504", "city" : "BURBANK", "loc" : [ -118.326401, 34.200097 ], "pop" : 22656, "state" : "CA" } +{ "_id" : "91505", "city" : "BURBANK", "loc" : [ -118.344175, 34.168998 ], "pop" : 27676, "state" : "CA" } +{ "_id" : "91506", "city" : "BURBANK", "loc" : [ -118.323148, 34.171746 ], "pop" : 18336, "state" : "CA" } +{ "_id" : "91601", "city" : "NORTH HOLLYWOOD", "loc" : [ -118.371274, 34.16867 ], "pop" : 33882, "state" : "CA" } +{ "_id" : "91602", "city" : "TOLUCA LAKE", "loc" : [ -118.367606, 34.151095 ], "pop" : 14301, "state" : "CA" } +{ "_id" : "91604", "city" : "STUDIO CITY", "loc" : [ -118.391311, 34.143025 ], "pop" : 24354, "state" : "CA" } +{ "_id" : "91605", "city" : "NORTH HOLLYWOOD", "loc" : [ -118.400069, 34.205747 ], "pop" : 50050, "state" : "CA" } +{ "_id" : "91606", "city" : "NORTH HOLLYWOOD", "loc" : [ -118.386538, 34.187182 ], "pop" : 39737, "state" : "CA" } +{ "_id" : "91607", "city" : "VALLEY VILLAGE", "loc" : [ -118.398905, 34.167217 ], "pop" : 28021, "state" : "CA" } +{ "_id" : "91701", "city" : "ALTA LOMA", "loc" : [ -117.599149, 34.133922 ], "pop" : 31633, "state" : "CA" } +{ "_id" : "91702", "city" : "AZUSA", "loc" : [ -117.903083, 34.12476 ], "pop" : 52261, "state" : "CA" } +{ "_id" : "91706", "city" : "IRWINDALE", "loc" : [ -117.969539, 34.084245 ], "pop" : 69464, "state" : "CA" } +{ "_id" : "91709", "city" : "CHINO HILLS", "loc" : [ -117.730791, 33.979735 ], "pop" : 37965, "state" : "CA" } +{ "_id" : "91710", "city" : "CHINO", "loc" : [ -117.684401, 34.012532 ], "pop" : 69244, "state" : "CA" } +{ "_id" : "91711", "city" : "CLAREMONT", "loc" : [ -117.718293, 34.109167 ], "pop" : 34096, "state" : "CA" } +{ "_id" : "91719", "city" : "CORONA", "loc" : [ -117.531916, 33.861839 ], "pop" : 42717, "state" : "CA" } +{ "_id" : "91720", "city" : "CORONA", "loc" : [ -117.594288, 33.876995 ], "pop" : 55741, "state" : "CA" } +{ "_id" : "91722", "city" : "COVINA", "loc" : [ -117.906544, 34.097162 ], "pop" : 31703, "state" : "CA" } +{ "_id" : "91723", "city" : "COVINA", "loc" : [ -117.884285, 34.08596 ], "pop" : 15590, "state" : "CA" } +{ "_id" : "91724", "city" : "COVINA", "loc" : [ -117.855982, 34.093752 ], "pop" : 23462, "state" : "CA" } +{ "_id" : "91730", "city" : "RANCHO CUCAMONGA", "loc" : [ -117.59408, 34.107039 ], "pop" : 41087, "state" : "CA" } +{ "_id" : "91731", "city" : "EL MONTE", "loc" : [ -118.037108, 34.079142 ], "pop" : 26178, "state" : "CA" } +{ "_id" : "91732", "city" : "EL MONTE", "loc" : [ -118.01492, 34.070533 ], "pop" : 58059, "state" : "CA" } +{ "_id" : "91733", "city" : "SOUTH EL MONTE", "loc" : [ -118.044381, 34.055676 ], "pop" : 43691, "state" : "CA" } +{ "_id" : "91737", "city" : "ALTA LOMA", "loc" : [ -117.579295, 34.144883 ], "pop" : 19708, "state" : "CA" } +{ "_id" : "91739", "city" : "ETIWANDA", "loc" : [ -117.519329, 34.119873 ], "pop" : 13553, "state" : "CA" } +{ "_id" : "91740", "city" : "GLENDORA", "loc" : [ -117.855155, 34.128663 ], "pop" : 48836, "state" : "CA" } +{ "_id" : "91744", "city" : "INDUSTRY", "loc" : [ -117.934098, 34.029428 ], "pop" : 77114, "state" : "CA" } +{ "_id" : "91745", "city" : "HACIENDA HEIGHTS", "loc" : [ -117.965205, 33.997741 ], "pop" : 52182, "state" : "CA" } +{ "_id" : "91746", "city" : "BASSETT", "loc" : [ -117.980026, 34.050963 ], "pop" : 30330, "state" : "CA" } +{ "_id" : "91748", "city" : "ROWLAND HEIGHTS", "loc" : [ -117.896946, 33.981777 ], "pop" : 40511, "state" : "CA" } +{ "_id" : "91750", "city" : "LA VERNE", "loc" : [ -117.77077, 34.115905 ], "pop" : 33621, "state" : "CA" } +{ "_id" : "91752", "city" : "MIRA LOMA", "loc" : [ -117.523574, 33.993845 ], "pop" : 17368, "state" : "CA" } +{ "_id" : "91754", "city" : "MONTEREY PARK", "loc" : [ -118.127144, 34.053409 ], "pop" : 62133, "state" : "CA" } +{ "_id" : "91759", "city" : "MT BALDY", "loc" : [ -117.580219, 34.218082 ], "pop" : 430, "state" : "CA" } +{ "_id" : "91760", "city" : "NORCO", "loc" : [ -117.557866, 33.927983 ], "pop" : 23585, "state" : "CA" } +{ "_id" : "91761", "city" : "ONTARIO", "loc" : [ -117.618662, 34.031647 ], "pop" : 47921, "state" : "CA" } +{ "_id" : "91762", "city" : "ONTARIO", "loc" : [ -117.66647, 34.058415 ], "pop" : 47653, "state" : "CA" } +{ "_id" : "91763", "city" : "MONTCLAIR", "loc" : [ -117.698669, 34.073298 ], "pop" : 25862, "state" : "CA" } +{ "_id" : "91764", "city" : "ONTARIO", "loc" : [ -117.625402, 34.076308 ], "pop" : 41958, "state" : "CA" } +{ "_id" : "91765", "city" : "DIAMOND BAR", "loc" : [ -117.809822, 34.006585 ], "pop" : 41920, "state" : "CA" } +{ "_id" : "91766", "city" : "PHILLIPS RANCH", "loc" : [ -117.752086, 34.043268 ], "pop" : 64056, "state" : "CA" } +{ "_id" : "91767", "city" : "POMONA", "loc" : [ -117.736171, 34.081187 ], "pop" : 41420, "state" : "CA" } +{ "_id" : "91768", "city" : "POMONA", "loc" : [ -117.776312, 34.066168 ], "pop" : 31007, "state" : "CA" } +{ "_id" : "91770", "city" : "ROSEMEAD", "loc" : [ -118.08529, 34.065767 ], "pop" : 59898, "state" : "CA" } +{ "_id" : "91773", "city" : "SAN DIMAS", "loc" : [ -117.81694, 34.102263 ], "pop" : 32453, "state" : "CA" } +{ "_id" : "91775", "city" : "SAN GABRIEL", "loc" : [ -118.085658, 34.115486 ], "pop" : 21426, "state" : "CA" } +{ "_id" : "91776", "city" : "SAN GABRIEL", "loc" : [ -118.095471, 34.089027 ], "pop" : 34995, "state" : "CA" } +{ "_id" : "91780", "city" : "TEMPLE CITY", "loc" : [ -118.053652, 34.101586 ], "pop" : 31297, "state" : "CA" } +{ "_id" : "91786", "city" : "UPLAND", "loc" : [ -117.658336, 34.114432 ], "pop" : 66548, "state" : "CA" } +{ "_id" : "91789", "city" : "DIAMOND BAR", "loc" : [ -117.857828, 34.016625 ], "pop" : 42206, "state" : "CA" } +{ "_id" : "91790", "city" : "WEST COVINA", "loc" : [ -117.936643, 34.067336 ], "pop" : 38113, "state" : "CA" } +{ "_id" : "91791", "city" : "WEST COVINA", "loc" : [ -117.897767, 34.065267 ], "pop" : 25685, "state" : "CA" } +{ "_id" : "91792", "city" : "WEST COVINA", "loc" : [ -117.897459, 34.022852 ], "pop" : 30496, "state" : "CA" } +{ "_id" : "91801", "city" : "ALHAMBRA", "loc" : [ -118.129288, 34.091436 ], "pop" : 51148, "state" : "CA" } +{ "_id" : "91803", "city" : "ALHAMBRA", "loc" : [ -118.143354, 34.074514 ], "pop" : 30228, "state" : "CA" } +{ "_id" : "91901", "city" : "ALPINE", "loc" : [ -116.754328, 32.828161 ], "pop" : 12566, "state" : "CA" } +{ "_id" : "91902", "city" : "BONITA", "loc" : [ -117.022065, 32.667143 ], "pop" : 16579, "state" : "CA" } +{ "_id" : "91905", "city" : "BOULEVARD", "loc" : [ -116.319982, 32.671934 ], "pop" : 1163, "state" : "CA" } +{ "_id" : "91906", "city" : "CAMPO", "loc" : [ -116.490459, 32.660491 ], "pop" : 2657, "state" : "CA" } +{ "_id" : "91910", "city" : "CHULA VISTA", "loc" : [ -117.06756, 32.637139 ], "pop" : 56320, "state" : "CA" } +{ "_id" : "91911", "city" : "CHULA VISTA", "loc" : [ -117.056459, 32.608428 ], "pop" : 65952, "state" : "CA" } +{ "_id" : "91913", "city" : "CHULA VISTA", "loc" : [ -116.985237, 32.651296 ], "pop" : 10079, "state" : "CA" } +{ "_id" : "91914", "city" : "CHULA VISTA", "loc" : [ -116.96517, 32.65875 ], "pop" : 0, "state" : "CA" } +{ "_id" : "91915", "city" : "CHULA VISTA", "loc" : [ -116.940807, 32.631513 ], "pop" : 12, "state" : "CA" } +{ "_id" : "91916", "city" : "DESCANSO", "loc" : [ -116.602732, 32.872971 ], "pop" : 1826, "state" : "CA" } +{ "_id" : "91917", "city" : "DULZURA", "loc" : [ -116.728523, 32.615172 ], "pop" : 352, "state" : "CA" } +{ "_id" : "91932", "city" : "IMPERIAL BEACH", "loc" : [ -117.11478, 32.578289 ], "pop" : 26567, "state" : "CA" } +{ "_id" : "91934", "city" : "JACUMBA", "loc" : [ -116.195184, 32.624934 ], "pop" : 599, "state" : "CA" } +{ "_id" : "91935", "city" : "JAMUL", "loc" : [ -116.832332, 32.716289 ], "pop" : 7879, "state" : "CA" } +{ "_id" : "91941", "city" : "LA MESA", "loc" : [ -117.011541, 32.760431 ], "pop" : 42536, "state" : "CA" } +{ "_id" : "91942", "city" : "LA MESA", "loc" : [ -117.018879, 32.783506 ], "pop" : 23944, "state" : "CA" } +{ "_id" : "91945", "city" : "LEMON GROVE", "loc" : [ -117.032646, 32.73323 ], "pop" : 24268, "state" : "CA" } +{ "_id" : "91950", "city" : "NATIONAL CITY", "loc" : [ -117.089747, 32.674916 ], "pop" : 52005, "state" : "CA" } +{ "_id" : "91962", "city" : "PINE VALLEY", "loc" : [ -116.512733, 32.835047 ], "pop" : 1801, "state" : "CA" } +{ "_id" : "91963", "city" : "POTRERO", "loc" : [ -116.603748, 32.620477 ], "pop" : 638, "state" : "CA" } +{ "_id" : "91977", "city" : "SPRING VALLEY", "loc" : [ -116.997644, 32.724014 ], "pop" : 52403, "state" : "CA" } +{ "_id" : "91978", "city" : "SPRING VALLEY", "loc" : [ -116.959551, 32.732892 ], "pop" : 7601, "state" : "CA" } +{ "_id" : "91980", "city" : "TECATE", "loc" : [ -116.606397, 32.592205 ], "pop" : 230, "state" : "CA" } +{ "_id" : "92003", "city" : "BONSALL", "loc" : [ -117.18969, 33.294033 ], "pop" : 2910, "state" : "CA" } +{ "_id" : "92004", "city" : "BORREGO SPRINGS", "loc" : [ -116.351394, 33.238649 ], "pop" : 2633, "state" : "CA" } +{ "_id" : "92007", "city" : "CARDIFF BY THE S", "loc" : [ -117.274371, 33.025265 ], "pop" : 10236, "state" : "CA" } +{ "_id" : "92008", "city" : "CARLSBAD", "loc" : [ -117.324998, 33.160241 ], "pop" : 35651, "state" : "CA" } +{ "_id" : "92009", "city" : "CARLSBAD", "loc" : [ -117.261888, 33.095407 ], "pop" : 27019, "state" : "CA" } +{ "_id" : "92014", "city" : "DEL MAR", "loc" : [ -117.237314, 32.971474 ], "pop" : 19885, "state" : "CA" } +{ "_id" : "92019", "city" : "EL CAJON", "loc" : [ -116.919055, 32.777726 ], "pop" : 35425, "state" : "CA" } +{ "_id" : "92020", "city" : "EL CAJON", "loc" : [ -116.966504, 32.792765 ], "pop" : 55176, "state" : "CA" } +{ "_id" : "92021", "city" : "EL CAJON", "loc" : [ -116.922336, 32.817847 ], "pop" : 51773, "state" : "CA" } +{ "_id" : "92024", "city" : "ENCINITAS", "loc" : [ -117.26891, 33.053469 ], "pop" : 45995, "state" : "CA" } +{ "_id" : "92025", "city" : "ESCONDIDO", "loc" : [ -117.069987, 33.110117 ], "pop" : 39345, "state" : "CA" } +{ "_id" : "92026", "city" : "ESCONDIDO", "loc" : [ -117.097808, 33.160513 ], "pop" : 37176, "state" : "CA" } +{ "_id" : "92027", "city" : "ESCONDIDO", "loc" : [ -117.051966, 33.138824 ], "pop" : 39305, "state" : "CA" } +{ "_id" : "92028", "city" : "FALLBROOK", "loc" : [ -117.228952, 33.369015 ], "pop" : 35232, "state" : "CA" } +{ "_id" : "92029", "city" : "ESCONDIDO", "loc" : [ -117.112793, 33.089497 ], "pop" : 18174, "state" : "CA" } +{ "_id" : "92036", "city" : "JULIAN", "loc" : [ -116.565812, 33.053355 ], "pop" : 2552, "state" : "CA" } +{ "_id" : "92037", "city" : "LA JOLLA", "loc" : [ -117.25208, 32.845488 ], "pop" : 40399, "state" : "CA" } +{ "_id" : "92040", "city" : "LAKESIDE", "loc" : [ -116.920089, 32.856181 ], "pop" : 41054, "state" : "CA" } +{ "_id" : "92054", "city" : "OCEANSIDE", "loc" : [ -117.357294, 33.20723 ], "pop" : 61760, "state" : "CA" } +{ "_id" : "92055", "city" : "MARINE CORP BASE", "loc" : [ -117.409452, 33.327929 ], "pop" : 13643, "state" : "CA" } +{ "_id" : "92056", "city" : "OCEANSIDE", "loc" : [ -117.283089, 33.196784 ], "pop" : 40161, "state" : "CA" } +{ "_id" : "92057", "city" : "OCEANSIDE", "loc" : [ -117.302484, 33.240654 ], "pop" : 33178, "state" : "CA" } +{ "_id" : "92059", "city" : "PALA", "loc" : [ -117.071725, 33.377662 ], "pop" : 1064, "state" : "CA" } +{ "_id" : "92061", "city" : "PAUMA VALLEY", "loc" : [ -116.959552, 33.306285 ], "pop" : 1929, "state" : "CA" } +{ "_id" : "92064", "city" : "POWAY", "loc" : [ -117.040223, 32.975619 ], "pop" : 43490, "state" : "CA" } +{ "_id" : "92065", "city" : "RAMONA", "loc" : [ -116.853548, 33.029349 ], "pop" : 27744, "state" : "CA" } +{ "_id" : "92066", "city" : "RANCHITA", "loc" : [ -116.539121, 33.24055 ], "pop" : 389, "state" : "CA" } +{ "_id" : "92068", "city" : "SAN LUIS REY", "loc" : [ -117.306403, 33.294367 ], "pop" : 9471, "state" : "CA" } +{ "_id" : "92069", "city" : "SAN MARCOS", "loc" : [ -117.169716, 33.144386 ], "pop" : 45382, "state" : "CA" } +{ "_id" : "92070", "city" : "SANTA YSABEL", "loc" : [ -116.69635, 33.147579 ], "pop" : 1263, "state" : "CA" } +{ "_id" : "92071", "city" : "SANTEE", "loc" : [ -116.986154, 32.848636 ], "pop" : 52816, "state" : "CA" } +{ "_id" : "92075", "city" : "SOLANA BEACH", "loc" : [ -117.2598, 32.993739 ], "pop" : 12259, "state" : "CA" } +{ "_id" : "92082", "city" : "VALLEY CENTER", "loc" : [ -117.012232, 33.249046 ], "pop" : 13196, "state" : "CA" } +{ "_id" : "92083", "city" : "VISTA", "loc" : [ -117.245854, 33.187296 ], "pop" : 50641, "state" : "CA" } +{ "_id" : "92084", "city" : "VISTA", "loc" : [ -117.224285, 33.213118 ], "pop" : 38088, "state" : "CA" } +{ "_id" : "92086", "city" : "WARNER SPRINGS", "loc" : [ -116.721385, 33.303666 ], "pop" : 780, "state" : "CA" } +{ "_id" : "92101", "city" : "SAN DIEGO", "loc" : [ -117.159316, 32.71852 ], "pop" : 20265, "state" : "CA" } +{ "_id" : "92102", "city" : "SAN DIEGO", "loc" : [ -117.121858, 32.713893 ], "pop" : 45265, "state" : "CA" } +{ "_id" : "92103", "city" : "SAN DIEGO", "loc" : [ -117.163552, 32.746638 ], "pop" : 31123, "state" : "CA" } +{ "_id" : "92104", "city" : "SAN DIEGO", "loc" : [ -117.127189, 32.745425 ], "pop" : 44032, "state" : "CA" } +{ "_id" : "92105", "city" : "SAN DIEGO", "loc" : [ -117.094681, 32.7423 ], "pop" : 63344, "state" : "CA" } +{ "_id" : "92106", "city" : "SAN DIEGO", "loc" : [ -117.226829, 32.72725 ], "pop" : 27640, "state" : "CA" } +{ "_id" : "92107", "city" : "SAN DIEGO", "loc" : [ -117.243307, 32.742531 ], "pop" : 25913, "state" : "CA" } +{ "_id" : "92108", "city" : "SAN DIEGO", "loc" : [ -117.133525, 32.778327 ], "pop" : 8860, "state" : "CA" } +{ "_id" : "92109", "city" : "SAN DIEGO", "loc" : [ -117.240534, 32.796923 ], "pop" : 44804, "state" : "CA" } +{ "_id" : "92110", "city" : "SAN DIEGO", "loc" : [ -117.202847, 32.763476 ], "pop" : 26787, "state" : "CA" } +{ "_id" : "92111", "city" : "SAN DIEGO", "loc" : [ -117.17081, 32.797185 ], "pop" : 45487, "state" : "CA" } +{ "_id" : "92113", "city" : "SAN DIEGO", "loc" : [ -117.115257, 32.697047 ], "pop" : 44741, "state" : "CA" } +{ "_id" : "92114", "city" : "SAN DIEGO", "loc" : [ -117.05235, 32.705923 ], "pop" : 62258, "state" : "CA" } +{ "_id" : "92115", "city" : "SAN DIEGO", "loc" : [ -117.072056, 32.760742 ], "pop" : 51418, "state" : "CA" } +{ "_id" : "92116", "city" : "SAN DIEGO", "loc" : [ -117.124166, 32.762446 ], "pop" : 32279, "state" : "CA" } +{ "_id" : "92117", "city" : "SAN DIEGO", "loc" : [ -117.196536, 32.823948 ], "pop" : 49737, "state" : "CA" } +{ "_id" : "92118", "city" : "CORONADO", "loc" : [ -117.169823, 32.68069 ], "pop" : 16670, "state" : "CA" } +{ "_id" : "92119", "city" : "SAN DIEGO", "loc" : [ -117.026065, 32.803587 ], "pop" : 24135, "state" : "CA" } +{ "_id" : "92120", "city" : "SAN DIEGO", "loc" : [ -117.070708, 32.79581 ], "pop" : 25375, "state" : "CA" } +{ "_id" : "92121", "city" : "SAN DIEGO", "loc" : [ -117.203503, 32.891894 ], "pop" : 2286, "state" : "CA" } +{ "_id" : "92122", "city" : "SAN DIEGO", "loc" : [ -117.211507, 32.857736 ], "pop" : 30192, "state" : "CA" } +{ "_id" : "92123", "city" : "SAN DIEGO", "loc" : [ -117.139248, 32.797297 ], "pop" : 23541, "state" : "CA" } +{ "_id" : "92124", "city" : "SAN DIEGO", "loc" : [ -117.098613, 32.820113 ], "pop" : 29171, "state" : "CA" } +{ "_id" : "92126", "city" : "SAN DIEGO", "loc" : [ -117.140227, 32.916136 ], "pop" : 56676, "state" : "CA" } +{ "_id" : "92127", "city" : "SAN DIEGO", "loc" : [ -117.085596, 33.027854 ], "pop" : 11077, "state" : "CA" } +{ "_id" : "92128", "city" : "SAN DIEGO", "loc" : [ -117.068982, 33.00666 ], "pop" : 30437, "state" : "CA" } +{ "_id" : "92129", "city" : "SAN DIEGO", "loc" : [ -117.121308, 32.965185 ], "pop" : 43092, "state" : "CA" } +{ "_id" : "92130", "city" : "SAN DIEGO", "loc" : [ -117.225201, 32.955533 ], "pop" : 12681, "state" : "CA" } +{ "_id" : "92131", "city" : "SAN DIEGO", "loc" : [ -117.089758, 32.912343 ], "pop" : 16649, "state" : "CA" } +{ "_id" : "92135", "city" : "SAN DIEGO", "loc" : [ -117.19202, 32.702482 ], "pop" : 8122, "state" : "CA" } +{ "_id" : "92136", "city" : "SAN DIEGO", "loc" : [ -117.124678, 32.681585 ], "pop" : 11750, "state" : "CA" } +{ "_id" : "92139", "city" : "SAN DIEGO", "loc" : [ -117.047375, 32.680612 ], "pop" : 35577, "state" : "CA" } +{ "_id" : "92145", "city" : "SAN DIEGO", "loc" : [ -117.116518, 32.870365 ], "pop" : 3089, "state" : "CA" } +{ "_id" : "92154", "city" : "SAN DIEGO", "loc" : [ -117.070725, 32.575276 ], "pop" : 59925, "state" : "CA" } +{ "_id" : "92155", "city" : "SAN DIEGO", "loc" : [ -117.160335, 32.676144 ], "pop" : 1570, "state" : "CA" } +{ "_id" : "92173", "city" : "SAN YSIDRO", "loc" : [ -117.042976, 32.562567 ], "pop" : 30131, "state" : "CA" } +{ "_id" : "92201", "city" : "CHIRIACO SUMMIT", "loc" : [ -116.235729, 33.721899 ], "pop" : 47118, "state" : "CA" } +{ "_id" : "92210", "city" : "INDIAN WELLS", "loc" : [ -116.338129, 33.716334 ], "pop" : 2599, "state" : "CA" } +{ "_id" : "92220", "city" : "BANNING", "loc" : [ -116.889928, 33.92816 ], "pop" : 22545, "state" : "CA" } +{ "_id" : "92223", "city" : "BEAUMONT", "loc" : [ -116.970079, 33.950429 ], "pop" : 16176, "state" : "CA" } +{ "_id" : "92225", "city" : "LOST LAKE", "loc" : [ -114.597131, 33.605715 ], "pop" : 13852, "state" : "CA" } +{ "_id" : "92227", "city" : "BRAWLEY", "loc" : [ -115.529613, 32.979181 ], "pop" : 20199, "state" : "CA" } +{ "_id" : "92230", "city" : "CABAZON", "loc" : [ -116.773948, 33.908583 ], "pop" : 1697, "state" : "CA" } +{ "_id" : "92231", "city" : "CALEXICO", "loc" : [ -115.502815, 32.683227 ], "pop" : 22345, "state" : "CA" } +{ "_id" : "92233", "city" : "CALIPATRIA", "loc" : [ -115.511402, 33.166956 ], "pop" : 4847, "state" : "CA" } +{ "_id" : "92234", "city" : "CATHEDRAL CITY", "loc" : [ -116.466497, 33.809839 ], "pop" : 29640, "state" : "CA" } +{ "_id" : "92236", "city" : "COACHELLA", "loc" : [ -116.177231, 33.674965 ], "pop" : 17147, "state" : "CA" } +{ "_id" : "92239", "city" : "EAGLE MOUNTAIN", "loc" : [ -115.052603, 33.604941 ], "pop" : 4499, "state" : "CA" } +{ "_id" : "92240", "city" : "DESERT HOT SPRIN", "loc" : [ -116.366222, 33.904973 ], "pop" : 686, "state" : "CA" } +{ "_id" : "92242", "city" : "BIG RIVER", "loc" : [ -114.33928, 34.149142 ], "pop" : 976, "state" : "CA" } +{ "_id" : "92243", "city" : "EL CENTRO", "loc" : [ -115.566508, 32.789332 ], "pop" : 39246, "state" : "CA" } +{ "_id" : "92249", "city" : "HEBER", "loc" : [ -115.428281, 32.698918 ], "pop" : 206, "state" : "CA" } +{ "_id" : "92250", "city" : "HOLTVILLE", "loc" : [ -115.377456, 32.810387 ], "pop" : 7060, "state" : "CA" } +{ "_id" : "92251", "city" : "IMPERIAL", "loc" : [ -115.572984, 32.846954 ], "pop" : 6092, "state" : "CA" } +{ "_id" : "92252", "city" : "JOSHUA TREE", "loc" : [ -116.303763, 34.150163 ], "pop" : 8227, "state" : "CA" } +{ "_id" : "92253", "city" : "LA QUINTA", "loc" : [ -116.308081, 33.668474 ], "pop" : 9392, "state" : "CA" } +{ "_id" : "92256", "city" : "MORONGO VALLEY", "loc" : [ -116.565641, 34.060646 ], "pop" : 2721, "state" : "CA" } +{ "_id" : "92257", "city" : "NILAND", "loc" : [ -115.696455, 33.378373 ], "pop" : 875, "state" : "CA" } +{ "_id" : "92260", "city" : "PALM CITY", "loc" : [ -116.366442, 33.730842 ], "pop" : 31975, "state" : "CA" } +{ "_id" : "92262", "city" : "PALM SPRINGS", "loc" : [ -116.53466, 33.841406 ], "pop" : 22808, "state" : "CA" } +{ "_id" : "92264", "city" : "PALM SPRINGS", "loc" : [ -116.516958, 33.801828 ], "pop" : 18733, "state" : "CA" } +{ "_id" : "92267", "city" : "PARKER DAM", "loc" : [ -114.155969, 34.297977 ], "pop" : 141, "state" : "CA" } +{ "_id" : "92270", "city" : "RANCHO MIRAGE", "loc" : [ -116.422451, 33.764284 ], "pop" : 9737, "state" : "CA" } +{ "_id" : "92272", "city" : "BLYTHE", "loc" : [ -116.495855, 33.951256 ], "pop" : 18605, "state" : "CA" } +{ "_id" : "92274", "city" : "SALTON CITY", "loc" : [ -116.11584, 33.543418 ], "pop" : 19112, "state" : "CA" } +{ "_id" : "92276", "city" : "THOUSAND PALMS", "loc" : [ -116.371305, 33.808158 ], "pop" : 5557, "state" : "CA" } +{ "_id" : "92277", "city" : "TWENTYNINE PALMS", "loc" : [ -116.060133, 34.145509 ], "pop" : 13371, "state" : "CA" } +{ "_id" : "92278", "city" : "TWENTYNINE PALMS", "loc" : [ -116.06041, 34.237969 ], "pop" : 11412, "state" : "CA" } +{ "_id" : "92280", "city" : "VIDAL", "loc" : [ -114.565602, 34.156109 ], "pop" : 40, "state" : "CA" } +{ "_id" : "92281", "city" : "WESTMORLAND", "loc" : [ -115.630723, 33.041058 ], "pop" : 1902, "state" : "CA" } +{ "_id" : "92282", "city" : "WHITE WATER", "loc" : [ -116.693154, 33.927591 ], "pop" : 420, "state" : "CA" } +{ "_id" : "92283", "city" : "FELICITY", "loc" : [ -114.636634, 32.832922 ], "pop" : 3867, "state" : "CA" } +{ "_id" : "92284", "city" : "YUCCA VALLEY", "loc" : [ -116.431313, 34.155936 ], "pop" : 22131, "state" : "CA" } +{ "_id" : "92301", "city" : "ADELANTO", "loc" : [ -117.424189, 34.584128 ], "pop" : 7176, "state" : "CA" } +{ "_id" : "92304", "city" : "AMBOY", "loc" : [ -115.774907, 34.599012 ], "pop" : 29, "state" : "CA" } +{ "_id" : "92305", "city" : "ANGELUS OAKS", "loc" : [ -116.948482, 34.153149 ], "pop" : 238, "state" : "CA" } +{ "_id" : "92307", "city" : "APPLE VALLEY", "loc" : [ -117.2132, 34.529081 ], "pop" : 26066, "state" : "CA" } +{ "_id" : "92308", "city" : "APPLE VALLEY", "loc" : [ -117.192684, 34.469814 ], "pop" : 24973, "state" : "CA" } +{ "_id" : "92309", "city" : "BAKER", "loc" : [ -116.063754, 35.360573 ], "pop" : 606, "state" : "CA" } +{ "_id" : "92310", "city" : "FORT IRWIN", "loc" : [ -116.644759, 35.40148 ], "pop" : 6735, "state" : "CA" } +{ "_id" : "92311", "city" : "BARSTOW", "loc" : [ -117.038702, 34.89145 ], "pop" : 33076, "state" : "CA" } +{ "_id" : "92314", "city" : "BIG BEAR CITY", "loc" : [ -116.920412, 34.242233 ], "pop" : 18959, "state" : "CA" } +{ "_id" : "92316", "city" : "BLOOMINGTON", "loc" : [ -117.399295, 34.066198 ], "pop" : 22916, "state" : "CA" } +{ "_id" : "92320", "city" : "CALIMESA", "loc" : [ -117.04304, 33.994586 ], "pop" : 6345, "state" : "CA" } +{ "_id" : "92324", "city" : "GRAND TERRACE", "loc" : [ -117.318577, 34.057964 ], "pop" : 53822, "state" : "CA" } +{ "_id" : "92327", "city" : "DAGGETT", "loc" : [ -116.887555, 34.86677 ], "pop" : 701, "state" : "CA" } +{ "_id" : "92328", "city" : "DEATH VALLEY", "loc" : [ -116.893682, 36.467165 ], "pop" : 440, "state" : "CA" } +{ "_id" : "92332", "city" : "ESSEX", "loc" : [ -115.280344, 34.560626 ], "pop" : 214, "state" : "CA" } +{ "_id" : "92335", "city" : "FONTANA", "loc" : [ -117.455114, 34.079351 ], "pop" : 81255, "state" : "CA" } +{ "_id" : "92336", "city" : "FONTANA", "loc" : [ -117.437759, 34.117276 ], "pop" : 27957, "state" : "CA" } +{ "_id" : "92338", "city" : "LUDLOW", "loc" : [ -116.386202, 34.901779 ], "pop" : 383, "state" : "CA" } +{ "_id" : "92339", "city" : "FOREST FALLS", "loc" : [ -116.914147, 34.08805 ], "pop" : 842, "state" : "CA" } +{ "_id" : "92342", "city" : "HELENDALE", "loc" : [ -117.33666, 34.749859 ], "pop" : 3612, "state" : "CA" } +{ "_id" : "92345", "city" : "HESPERIA", "loc" : [ -117.302527, 34.422215 ], "pop" : 52170, "state" : "CA" } +{ "_id" : "92346", "city" : "EAST HIGHLAND", "loc" : [ -117.208717, 34.126969 ], "pop" : 37484, "state" : "CA" } +{ "_id" : "92347", "city" : "HINKLEY", "loc" : [ -117.180867, 34.92788 ], "pop" : 1905, "state" : "CA" } +{ "_id" : "92351", "city" : "KELSO", "loc" : [ -115.577574, 34.9678 ], "pop" : 30, "state" : "CA" } +{ "_id" : "92354", "city" : "LOMA LINDA", "loc" : [ -117.251286, 34.052833 ], "pop" : 17855, "state" : "CA" } +{ "_id" : "92356", "city" : "LUCERNE VALLEY", "loc" : [ -116.918857, 34.44695 ], "pop" : 4353, "state" : "CA" } +{ "_id" : "92358", "city" : "LYTLE CREEK", "loc" : [ -117.518613, 34.255755 ], "pop" : 625, "state" : "CA" } +{ "_id" : "92359", "city" : "MENTONE", "loc" : [ -117.112581, 34.077372 ], "pop" : 5832, "state" : "CA" } +{ "_id" : "92363", "city" : "NEEDLES", "loc" : [ -114.587134, 34.782369 ], "pop" : 6316, "state" : "CA" } +{ "_id" : "92364", "city" : "NIPTON", "loc" : [ -115.481436, 35.46761 ], "pop" : 390, "state" : "CA" } +{ "_id" : "92365", "city" : "NEWBERRY SPRINGS", "loc" : [ -116.746373, 34.885001 ], "pop" : 4296, "state" : "CA" } +{ "_id" : "92368", "city" : "ORO GRANDE", "loc" : [ -117.332733, 34.617832 ], "pop" : 852, "state" : "CA" } +{ "_id" : "92371", "city" : "PHELAN", "loc" : [ -117.519604, 34.444901 ], "pop" : 13508, "state" : "CA" } +{ "_id" : "92372", "city" : "PINON HILLS", "loc" : [ -117.640262, 34.442937 ], "pop" : 1741, "state" : "CA" } +{ "_id" : "92373", "city" : "REDLANDS", "loc" : [ -117.180352, 34.039659 ], "pop" : 29784, "state" : "CA" } +{ "_id" : "92374", "city" : "REDLANDS", "loc" : [ -117.167182, 34.064989 ], "pop" : 36952, "state" : "CA" } +{ "_id" : "92376", "city" : "RIALTO", "loc" : [ -117.377133, 34.113155 ], "pop" : 75341, "state" : "CA" } +{ "_id" : "92384", "city" : "SHOSHONE", "loc" : [ -116.264476, 35.899239 ], "pop" : 353, "state" : "CA" } +{ "_id" : "92389", "city" : "TECOPA", "loc" : [ -115.829824, 35.897925 ], "pop" : 48, "state" : "CA" } +{ "_id" : "92392", "city" : "SPRING VALLEY LA", "loc" : [ -117.319235, 34.503917 ], "pop" : 51968, "state" : "CA" } +{ "_id" : "92394", "city" : "GEORGE AFB", "loc" : [ -117.363516, 34.577325 ], "pop" : 6815, "state" : "CA" } +{ "_id" : "92397", "city" : "WRIGHTWOOD", "loc" : [ -117.6249, 34.362839 ], "pop" : 4148, "state" : "CA" } +{ "_id" : "92399", "city" : "YUCAIPA", "loc" : [ -117.048925, 34.028197 ], "pop" : 33298, "state" : "CA" } +{ "_id" : "92401", "city" : "SAN BERNARDINO", "loc" : [ -117.289753, 34.110521 ], "pop" : 1193, "state" : "CA" } +{ "_id" : "92404", "city" : "SAN BERNARDINO", "loc" : [ -117.260572, 34.142577 ], "pop" : 50792, "state" : "CA" } +{ "_id" : "92405", "city" : "MUSCOY", "loc" : [ -117.310765, 34.144101 ], "pop" : 35583, "state" : "CA" } +{ "_id" : "92407", "city" : "SAN BERNARDINO", "loc" : [ -117.293697, 34.20928 ], "pop" : 44927, "state" : "CA" } +{ "_id" : "92408", "city" : "SAN BERNARDINO", "loc" : [ -117.271059, 34.083127 ], "pop" : 13378, "state" : "CA" } +{ "_id" : "92409", "city" : "SAN BERNARDINO", "loc" : [ -117.241291, 34.103685 ], "pop" : 1746, "state" : "CA" } +{ "_id" : "92410", "city" : "SAN BERNARDINO", "loc" : [ -117.296789, 34.107729 ], "pop" : 42522, "state" : "CA" } +{ "_id" : "92411", "city" : "SAN BERNARDINO", "loc" : [ -117.317158, 34.121414 ], "pop" : 22994, "state" : "CA" } +{ "_id" : "92501", "city" : "RIVERSIDE", "loc" : [ -117.369421, 33.9924 ], "pop" : 18478, "state" : "CA" } +{ "_id" : "92503", "city" : "RIVERSIDE", "loc" : [ -117.458862, 33.920808 ], "pop" : 55552, "state" : "CA" } +{ "_id" : "92504", "city" : "RIVERSIDE", "loc" : [ -117.411948, 33.931458 ], "pop" : 45308, "state" : "CA" } +{ "_id" : "92505", "city" : "RIVERSIDE", "loc" : [ -117.486687, 33.922769 ], "pop" : 37420, "state" : "CA" } +{ "_id" : "92506", "city" : "RIVERSIDE", "loc" : [ -117.375696, 33.945485 ], "pop" : 37294, "state" : "CA" } +{ "_id" : "92507", "city" : "RIVERSIDE", "loc" : [ -117.338874, 33.976086 ], "pop" : 45844, "state" : "CA" } +{ "_id" : "92508", "city" : "RIVERSIDE", "loc" : [ -117.304264, 33.889676 ], "pop" : 13582, "state" : "CA" } +{ "_id" : "92509", "city" : "RUBIDOUX", "loc" : [ -117.444896, 33.997355 ], "pop" : 52456, "state" : "CA" } +{ "_id" : "92530", "city" : "LAKE ELSINORE", "loc" : [ -117.348535, 33.659816 ], "pop" : 34619, "state" : "CA" } +{ "_id" : "92532", "city" : "LAKE ELSINORE", "loc" : [ -117.271278, 33.651662 ], "pop" : 6796, "state" : "CA" } +{ "_id" : "92536", "city" : "AGUANGA", "loc" : [ -116.799693, 33.447306 ], "pop" : 2309, "state" : "CA" } +{ "_id" : "92539", "city" : "ANZA", "loc" : [ -116.71355, 33.568812 ], "pop" : 1860, "state" : "CA" } +{ "_id" : "92543", "city" : "HEMET", "loc" : [ -116.972974, 33.741613 ], "pop" : 26985, "state" : "CA" } +{ "_id" : "92544", "city" : "HEMET", "loc" : [ -116.924306, 33.738978 ], "pop" : 34483, "state" : "CA" } +{ "_id" : "92545", "city" : "HEMET", "loc" : [ -117.015078, 33.739857 ], "pop" : 19513, "state" : "CA" } +{ "_id" : "92548", "city" : "HOMELAND", "loc" : [ -117.111845, 33.74528 ], "pop" : 4290, "state" : "CA" } +{ "_id" : "92549", "city" : "IDYLLWILD", "loc" : [ -116.710665, 33.730433 ], "pop" : 3975, "state" : "CA" } +{ "_id" : "92553", "city" : "MORENO VALLEY", "loc" : [ -117.235066, 33.915719 ], "pop" : 71314, "state" : "CA" } +{ "_id" : "92555", "city" : "MORENO VALLEY", "loc" : [ -117.185105, 33.937659 ], "pop" : 9784, "state" : "CA" } +{ "_id" : "92557", "city" : "MORENO VALLEY", "loc" : [ -117.245682, 33.955257 ], "pop" : 37853, "state" : "CA" } +{ "_id" : "92561", "city" : "MOUNTAIN CENTER", "loc" : [ -116.581954, 33.531667 ], "pop" : 1896, "state" : "CA" } +{ "_id" : "92562", "city" : "MURRIETA", "loc" : [ -117.273838, 33.563071 ], "pop" : 1988, "state" : "CA" } +{ "_id" : "92563", "city" : "MURRIETA", "loc" : [ -117.178298, 33.56903 ], "pop" : 22649, "state" : "CA" } +{ "_id" : "92567", "city" : "LAKEVIEW", "loc" : [ -117.118704, 33.807712 ], "pop" : 6480, "state" : "CA" } +{ "_id" : "92570", "city" : "MEAD VALLEY", "loc" : [ -117.280005, 33.797535 ], "pop" : 31870, "state" : "CA" } +{ "_id" : "92571", "city" : "PERRIS", "loc" : [ -117.217968, 33.810979 ], "pop" : 12436, "state" : "CA" } +{ "_id" : "92582", "city" : "SAN JACINTO", "loc" : [ -116.981911, 33.788281 ], "pop" : 3233, "state" : "CA" } +{ "_id" : "92583", "city" : "GILMAN HOT SPRIN", "loc" : [ -116.955201, 33.78604 ], "pop" : 15506, "state" : "CA" } +{ "_id" : "92584", "city" : "MENIFEE", "loc" : [ -117.1743, 33.664744 ], "pop" : 8347, "state" : "CA" } +{ "_id" : "92585", "city" : "ROMOLAND", "loc" : [ -117.171899, 33.744518 ], "pop" : 5231, "state" : "CA" } +{ "_id" : "92586", "city" : "SUN CITY", "loc" : [ -117.196942, 33.704373 ], "pop" : 15225, "state" : "CA" } +{ "_id" : "92587", "city" : "CANYON LAKE", "loc" : [ -117.252653, 33.688756 ], "pop" : 12522, "state" : "CA" } +{ "_id" : "92590", "city" : "TEMECULA", "loc" : [ -117.182437, 33.490269 ], "pop" : 2128, "state" : "CA" } +{ "_id" : "92591", "city" : "TEMECULA", "loc" : [ -117.128571, 33.521687 ], "pop" : 13480, "state" : "CA" } +{ "_id" : "92592", "city" : "TEMECULA", "loc" : [ -117.095774, 33.498314 ], "pop" : 15567, "state" : "CA" } +{ "_id" : "92595", "city" : "WILDOMAR", "loc" : [ -117.263953, 33.602115 ], "pop" : 4758, "state" : "CA" } +{ "_id" : "92596", "city" : "WINCHESTER", "loc" : [ -117.088518, 33.624269 ], "pop" : 1195, "state" : "CA" } +{ "_id" : "92610", "city" : "FOOTHILL RANCH", "loc" : [ -117.664995, 33.666822 ], "pop" : 3294, "state" : "CA" } +{ "_id" : "92621", "city" : "BREA", "loc" : [ -117.886742, 33.922897 ], "pop" : 45577, "state" : "CA" } +{ "_id" : "92624", "city" : "CAPISTRANO BEACH", "loc" : [ -117.662657, 33.459115 ], "pop" : 7498, "state" : "CA" } +{ "_id" : "92625", "city" : "CORONA DEL MAR", "loc" : [ -117.874331, 33.602066 ], "pop" : 5166, "state" : "CA" } +{ "_id" : "92626", "city" : "COSTA MESA", "loc" : [ -117.909623, 33.677711 ], "pop" : 45411, "state" : "CA" } +{ "_id" : "92627", "city" : "COSTA MESA", "loc" : [ -117.917667, 33.647793 ], "pop" : 52357, "state" : "CA" } +{ "_id" : "92629", "city" : "MONARCH BAY", "loc" : [ -117.700483, 33.476964 ], "pop" : 25618, "state" : "CA" } +{ "_id" : "92630", "city" : "LAKE FOREST", "loc" : [ -117.68819, 33.640015 ], "pop" : 51666, "state" : "CA" } +{ "_id" : "92631", "city" : "FULLERTON", "loc" : [ -117.89157, 33.880519 ], "pop" : 28902, "state" : "CA" } +{ "_id" : "92632", "city" : "FULLERTON", "loc" : [ -117.928376, 33.865848 ], "pop" : 21680, "state" : "CA" } +{ "_id" : "92633", "city" : "FULLERTON", "loc" : [ -117.961043, 33.873913 ], "pop" : 42033, "state" : "CA" } +{ "_id" : "92635", "city" : "FULLERTON", "loc" : [ -117.927801, 33.901181 ], "pop" : 10531, "state" : "CA" } +{ "_id" : "92640", "city" : "GARDEN GROVE", "loc" : [ -117.92906, 33.785826 ], "pop" : 43908, "state" : "CA" } +{ "_id" : "92641", "city" : "GARDEN GROVE", "loc" : [ -117.975526, 33.786651 ], "pop" : 29308, "state" : "CA" } +{ "_id" : "92643", "city" : "GARDEN GROVE", "loc" : [ -117.930193, 33.762641 ], "pop" : 39473, "state" : "CA" } +{ "_id" : "92644", "city" : "GARDEN GROVE", "loc" : [ -117.96935, 33.765532 ], "pop" : 20467, "state" : "CA" } +{ "_id" : "92645", "city" : "GARDEN GROVE", "loc" : [ -118.02639, 33.78324 ], "pop" : 16398, "state" : "CA" } +{ "_id" : "92646", "city" : "HUNTINGTON BEACH", "loc" : [ -117.967771, 33.668448 ], "pop" : 57915, "state" : "CA" } +{ "_id" : "92647", "city" : "HUNTINGTON BEACH", "loc" : [ -118.003035, 33.721018 ], "pop" : 56565, "state" : "CA" } +{ "_id" : "92648", "city" : "HUNTINGTON BEACH", "loc" : [ -117.999012, 33.674577 ], "pop" : 34997, "state" : "CA" } +{ "_id" : "92649", "city" : "HUNTINGTON BEACH", "loc" : [ -118.045142, 33.719111 ], "pop" : 34065, "state" : "CA" } +{ "_id" : "92651", "city" : "LAGUNA NIGUEL", "loc" : [ -117.772351, 33.542927 ], "pop" : 20315, "state" : "CA" } +{ "_id" : "92653", "city" : "LAGUNA HILLS", "loc" : [ -117.70854, 33.60028 ], "pop" : 45283, "state" : "CA" } +{ "_id" : "92655", "city" : "MIDWAY CITY", "loc" : [ -117.983539, 33.744794 ], "pop" : 6224, "state" : "CA" } +{ "_id" : "92656", "city" : "ALISO VIEJO", "loc" : [ -117.708906, 33.572367 ], "pop" : 16455, "state" : "CA" } +{ "_id" : "92657", "city" : "NEWPORT BEACH", "loc" : [ -117.855317, 33.596382 ], "pop" : 8254, "state" : "CA" } +{ "_id" : "92660", "city" : "NEWPORT BEACH", "loc" : [ -117.8757, 33.630027 ], "pop" : 25390, "state" : "CA" } +{ "_id" : "92661", "city" : "NEWPORT BEACH", "loc" : [ -117.906237, 33.604429 ], "pop" : 6123, "state" : "CA" } +{ "_id" : "92662", "city" : "NEWPORT BEACH", "loc" : [ -117.891732, 33.606459 ], "pop" : 3472, "state" : "CA" } +{ "_id" : "92663", "city" : "NEWPORT BEACH", "loc" : [ -117.92788, 33.623084 ], "pop" : 19826, "state" : "CA" } +{ "_id" : "92665", "city" : "ORANGE", "loc" : [ -117.844903, 33.83096 ], "pop" : 16566, "state" : "CA" } +{ "_id" : "92666", "city" : "ORANGE", "loc" : [ -117.845461, 33.785258 ], "pop" : 13811, "state" : "CA" } +{ "_id" : "92667", "city" : "VILLA PARK", "loc" : [ -117.828421, 33.81036 ], "pop" : 40937, "state" : "CA" } +{ "_id" : "92668", "city" : "ORANGE", "loc" : [ -117.87532, 33.786481 ], "pop" : 20139, "state" : "CA" } +{ "_id" : "92669", "city" : "ORANGE", "loc" : [ -117.800285, 33.791672 ], "pop" : 31583, "state" : "CA" } +{ "_id" : "92670", "city" : "PLACENTIA", "loc" : [ -117.859837, 33.880323 ], "pop" : 47174, "state" : "CA" } +{ "_id" : "92672", "city" : "SAN CLEMENTE", "loc" : [ -117.610139, 33.430809 ], "pop" : 46719, "state" : "CA" } +{ "_id" : "92675", "city" : "MISSION VIEJO", "loc" : [ -117.657409, 33.511714 ], "pop" : 28121, "state" : "CA" } +{ "_id" : "92677", "city" : "LAGUNA NIGUEL", "loc" : [ -117.705154, 33.522871 ], "pop" : 40072, "state" : "CA" } +{ "_id" : "92679", "city" : "COTO DE CAZA", "loc" : [ -117.577709, 33.634576 ], "pop" : 6067, "state" : "CA" } +{ "_id" : "92680", "city" : "TUSTIN", "loc" : [ -117.819193, 33.73713 ], "pop" : 51150, "state" : "CA" } +{ "_id" : "92683", "city" : "WESTMINSTER", "loc" : [ -117.991312, 33.752756 ], "pop" : 77965, "state" : "CA" } +{ "_id" : "92686", "city" : "YORBA LINDA", "loc" : [ -117.799619, 33.888361 ], "pop" : 41141, "state" : "CA" } +{ "_id" : "92687", "city" : "YORBA LINDA", "loc" : [ -117.731162, 33.88238 ], "pop" : 14429, "state" : "CA" } +{ "_id" : "92688", "city" : "RANCHO SANTA MAR", "loc" : [ -117.588388, 33.651822 ], "pop" : 9489, "state" : "CA" } +{ "_id" : "92691", "city" : "MISSION VIEJO", "loc" : [ -117.664119, 33.617155 ], "pop" : 48832, "state" : "CA" } +{ "_id" : "92692", "city" : "MISSION VIEJO", "loc" : [ -117.64245, 33.610872 ], "pop" : 30777, "state" : "CA" } +{ "_id" : "92701", "city" : "SANTA ANA", "loc" : [ -117.857665, 33.75016 ], "pop" : 63544, "state" : "CA" } +{ "_id" : "92703", "city" : "SANTA ANA", "loc" : [ -117.899589, 33.746613 ], "pop" : 63104, "state" : "CA" } +{ "_id" : "92704", "city" : "SANTA ANA", "loc" : [ -117.904683, 33.726513 ], "pop" : 77151, "state" : "CA" } +{ "_id" : "92705", "city" : "COWAN HEIGHTS", "loc" : [ -117.768902, 33.74866 ], "pop" : 37045, "state" : "CA" } +{ "_id" : "92706", "city" : "SANTA ANA", "loc" : [ -117.881791, 33.764434 ], "pop" : 30673, "state" : "CA" } +{ "_id" : "92707", "city" : "SANTA ANA HEIGHT", "loc" : [ -117.870346, 33.715938 ], "pop" : 56450, "state" : "CA" } +{ "_id" : "92708", "city" : "FOUNTAIN VALLEY", "loc" : [ -117.952318, 33.710762 ], "pop" : 54803, "state" : "CA" } +{ "_id" : "92709", "city" : "EL TORO MARINE C", "loc" : [ -117.715018, 33.681287 ], "pop" : 8078, "state" : "CA" } +{ "_id" : "92714", "city" : "IRVINE", "loc" : [ -117.798928, 33.68764 ], "pop" : 60654, "state" : "CA" } +{ "_id" : "92715", "city" : "IRVINE", "loc" : [ -117.821251, 33.650884 ], "pop" : 30690, "state" : "CA" } +{ "_id" : "92718", "city" : "IRVINE", "loc" : [ -117.711476, 33.658179 ], "pop" : 1, "state" : "CA" } +{ "_id" : "92720", "city" : "IRVINE", "loc" : [ -117.765533, 33.707495 ], "pop" : 23474, "state" : "CA" } +{ "_id" : "92801", "city" : "ANAHEIM", "loc" : [ -117.954035, 33.842679 ], "pop" : 47392, "state" : "CA" } +{ "_id" : "92802", "city" : "ANAHEIM", "loc" : [ -117.92219, 33.806909 ], "pop" : 36262, "state" : "CA" } +{ "_id" : "92804", "city" : "ANAHEIM", "loc" : [ -117.974985, 33.81908 ], "pop" : 63622, "state" : "CA" } +{ "_id" : "92805", "city" : "ANAHEIM", "loc" : [ -117.906263, 33.835332 ], "pop" : 55489, "state" : "CA" } +{ "_id" : "92806", "city" : "ANAHEIM", "loc" : [ -117.875928, 33.837344 ], "pop" : 27945, "state" : "CA" } +{ "_id" : "92807", "city" : "ANAHEIM", "loc" : [ -117.787657, 33.851583 ], "pop" : 35411, "state" : "CA" } +{ "_id" : "92808", "city" : "ANAHEIM", "loc" : [ -117.748445, 33.857569 ], "pop" : 6206, "state" : "CA" } +{ "_id" : "93001", "city" : "SAN BUENAVENTURA", "loc" : [ -119.28882, 34.290531 ], "pop" : 31453, "state" : "CA" } +{ "_id" : "93003", "city" : "SAN BUENAVENTURA", "loc" : [ -119.2214, 34.270568 ], "pop" : 44627, "state" : "CA" } +{ "_id" : "93004", "city" : "SAN BUENAVENTURA", "loc" : [ -119.168727, 34.278091 ], "pop" : 23430, "state" : "CA" } +{ "_id" : "93010", "city" : "CAMARILLO", "loc" : [ -119.046361, 34.231328 ], "pop" : 40173, "state" : "CA" } +{ "_id" : "93012", "city" : "CAMARILLO", "loc" : [ -118.986648, 34.22179 ], "pop" : 23489, "state" : "CA" } +{ "_id" : "93013", "city" : "CARPINTERIA", "loc" : [ -119.518257, 34.403589 ], "pop" : 16591, "state" : "CA" } +{ "_id" : "93015", "city" : "BARDSDALE", "loc" : [ -118.904071, 34.402557 ], "pop" : 15311, "state" : "CA" } +{ "_id" : "93021", "city" : "MOORPARK", "loc" : [ -118.877139, 34.278421 ], "pop" : 27011, "state" : "CA" } +{ "_id" : "93022", "city" : "OAK VIEW", "loc" : [ -119.298168, 34.402021 ], "pop" : 5611, "state" : "CA" } +{ "_id" : "93023", "city" : "OJAI", "loc" : [ -119.256477, 34.44512 ], "pop" : 22778, "state" : "CA" } +{ "_id" : "93030", "city" : "OXNARD", "loc" : [ -119.174952, 34.214142 ], "pop" : 66240, "state" : "CA" } +{ "_id" : "93033", "city" : "OXNARD", "loc" : [ -119.171732, 34.168505 ], "pop" : 66043, "state" : "CA" } +{ "_id" : "93035", "city" : "OXNARD", "loc" : [ -119.215975, 34.182177 ], "pop" : 23778, "state" : "CA" } +{ "_id" : "93041", "city" : "PORT HUENEME", "loc" : [ -119.197317, 34.162572 ], "pop" : 17337, "state" : "CA" } +{ "_id" : "93042", "city" : "POINT MUGU NAWC", "loc" : [ -119.09931, 34.123432 ], "pop" : 1707, "state" : "CA" } +{ "_id" : "93043", "city" : "PORT HUENEME CBC", "loc" : [ -119.206008, 34.16212 ], "pop" : 3389, "state" : "CA" } +{ "_id" : "93060", "city" : "SANTA PAULA", "loc" : [ -119.071328, 34.354718 ], "pop" : 28319, "state" : "CA" } +{ "_id" : "93063", "city" : "SANTA SUSANA", "loc" : [ -118.699229, 34.279202 ], "pop" : 47637, "state" : "CA" } +{ "_id" : "93065", "city" : "SIMI VALLEY", "loc" : [ -118.765349, 34.265589 ], "pop" : 55528, "state" : "CA" } +{ "_id" : "93066", "city" : "SOMIS", "loc" : [ -119.011537, 34.279753 ], "pop" : 3025, "state" : "CA" } +{ "_id" : "93067", "city" : "SUMMERLAND", "loc" : [ -119.596016, 34.424541 ], "pop" : 1330, "state" : "CA" } +{ "_id" : "93101", "city" : "SANTA BARBARA", "loc" : [ -119.70782, 34.419668 ], "pop" : 29235, "state" : "CA" } +{ "_id" : "93103", "city" : "SANTA BARBARA", "loc" : [ -119.683275, 34.429065 ], "pop" : 18199, "state" : "CA" } +{ "_id" : "93105", "city" : "SANTA BARBARA", "loc" : [ -119.728538, 34.436915 ], "pop" : 23284, "state" : "CA" } +{ "_id" : "93108", "city" : "MONTECITO", "loc" : [ -119.64255, 34.434258 ], "pop" : 12923, "state" : "CA" } +{ "_id" : "93109", "city" : "SANTA BARBARA", "loc" : [ -119.7194, 34.403848 ], "pop" : 11089, "state" : "CA" } +{ "_id" : "93110", "city" : "SANTA BARBARA", "loc" : [ -119.764668, 34.441814 ], "pop" : 15352, "state" : "CA" } +{ "_id" : "93111", "city" : "SANTA BARBARA", "loc" : [ -119.802509, 34.445262 ], "pop" : 17689, "state" : "CA" } +{ "_id" : "93117", "city" : "GOLETA", "loc" : [ -119.861245, 34.429631 ], "pop" : 45988, "state" : "CA" } +{ "_id" : "93202", "city" : "ARMONA", "loc" : [ -119.705279, 36.309459 ], "pop" : 752, "state" : "CA" } +{ "_id" : "93203", "city" : "ARVIN", "loc" : [ -118.8336, 35.196629 ], "pop" : 10613, "state" : "CA" } +{ "_id" : "93204", "city" : "AVENAL", "loc" : [ -120.122716, 35.987667 ], "pop" : 9882, "state" : "CA" } +{ "_id" : "93205", "city" : "BODFISH", "loc" : [ -118.484656, 35.587046 ], "pop" : 1407, "state" : "CA" } +{ "_id" : "93206", "city" : "BUTTONWILLOW", "loc" : [ -119.465926, 35.403268 ], "pop" : 1975, "state" : "CA" } +{ "_id" : "93207", "city" : "CALIFORNIA HOT S", "loc" : [ -118.646317, 35.892422 ], "pop" : 436, "state" : "CA" } +{ "_id" : "93210", "city" : "COALINGA", "loc" : [ -120.348928, 36.162435 ], "pop" : 9579, "state" : "CA" } +{ "_id" : "93212", "city" : "CORCORAN", "loc" : [ -119.560665, 36.086455 ], "pop" : 16228, "state" : "CA" } +{ "_id" : "93214", "city" : "CUYAMA", "loc" : [ -119.661339, 34.933694 ], "pop" : 808, "state" : "CA" } +{ "_id" : "93215", "city" : "DELANO", "loc" : [ -119.24594, 35.771511 ], "pop" : 23803, "state" : "CA" } +{ "_id" : "93217", "city" : "DI GIORGIO", "loc" : [ -118.846755, 35.247604 ], "pop" : 258, "state" : "CA" } +{ "_id" : "93219", "city" : "EARLIMART", "loc" : [ -119.253406, 35.854195 ], "pop" : 11963, "state" : "CA" } +{ "_id" : "93221", "city" : "EXETER", "loc" : [ -119.12928, 36.304055 ], "pop" : 11088, "state" : "CA" } +{ "_id" : "93223", "city" : "FARMERSVILLE", "loc" : [ -119.205357, 36.300169 ], "pop" : 6432, "state" : "CA" } +{ "_id" : "93224", "city" : "FELLOWS", "loc" : [ -119.564757, 35.202579 ], "pop" : 521, "state" : "CA" } +{ "_id" : "93225", "city" : "FRAZIER PARK", "loc" : [ -119.035488, 34.826463 ], "pop" : 5257, "state" : "CA" } +{ "_id" : "93226", "city" : "GLENNVILLE", "loc" : [ -118.71693, 35.737677 ], "pop" : 346, "state" : "CA" } +{ "_id" : "93230", "city" : "HANFORD", "loc" : [ -119.649094, 36.331419 ], "pop" : 44686, "state" : "CA" } +{ "_id" : "93234", "city" : "HURON", "loc" : [ -120.101964, 36.237144 ], "pop" : 7050, "state" : "CA" } +{ "_id" : "93235", "city" : "IVANHOE", "loc" : [ -119.218884, 36.385622 ], "pop" : 3326, "state" : "CA" } +{ "_id" : "93238", "city" : "KERNVILLE", "loc" : [ -118.404723, 35.755005 ], "pop" : 812, "state" : "CA" } +{ "_id" : "93239", "city" : "KETTLEMAN CITY", "loc" : [ -119.964361, 36.021501 ], "pop" : 1762, "state" : "CA" } +{ "_id" : "93240", "city" : "MOUNTAIN MESA", "loc" : [ -118.441256, 35.617889 ], "pop" : 6285, "state" : "CA" } +{ "_id" : "93241", "city" : "LAMONT", "loc" : [ -118.912419, 35.257059 ], "pop" : 13471, "state" : "CA" } +{ "_id" : "93242", "city" : "LATON", "loc" : [ -119.715565, 36.437834 ], "pop" : 2860, "state" : "CA" } +{ "_id" : "93243", "city" : "GORMAN", "loc" : [ -118.879126, 34.828862 ], "pop" : 1103, "state" : "CA" } +{ "_id" : "93244", "city" : "LEMONCOVE", "loc" : [ -119.004986, 36.396084 ], "pop" : 64, "state" : "CA" } +{ "_id" : "93245", "city" : "LEMOORE NAVAL AI", "loc" : [ -119.831017, 36.309535 ], "pop" : 26170, "state" : "CA" } +{ "_id" : "93247", "city" : "LINDSAY", "loc" : [ -119.088427, 36.209551 ], "pop" : 12983, "state" : "CA" } +{ "_id" : "93249", "city" : "LOST HILLS", "loc" : [ -119.721573, 35.613111 ], "pop" : 2373, "state" : "CA" } +{ "_id" : "93250", "city" : "MC FARLAND", "loc" : [ -119.227156, 35.675779 ], "pop" : 8494, "state" : "CA" } +{ "_id" : "93251", "city" : "MC KITTRICK", "loc" : [ -119.636627, 35.303097 ], "pop" : 616, "state" : "CA" } +{ "_id" : "93252", "city" : "MARICOPA", "loc" : [ -119.407661, 35.038353 ], "pop" : 1571, "state" : "CA" } +{ "_id" : "93254", "city" : "NEW CUYAMA", "loc" : [ -119.823806, 34.996709 ], "pop" : 80, "state" : "CA" } +{ "_id" : "93255", "city" : "ONYX", "loc" : [ -118.190227, 35.713584 ], "pop" : 380, "state" : "CA" } +{ "_id" : "93256", "city" : "PIXLEY", "loc" : [ -119.256427, 35.955286 ], "pop" : 4768, "state" : "CA" } +{ "_id" : "93257", "city" : "PORTERVILLE", "loc" : [ -119.031549, 36.068636 ], "pop" : 54599, "state" : "CA" } +{ "_id" : "93260", "city" : "POSEY", "loc" : [ -118.664286, 35.813496 ], "pop" : 253, "state" : "CA" } +{ "_id" : "93262", "city" : "GIANT FOREST", "loc" : [ -118.772271, 36.573878 ], "pop" : 132, "state" : "CA" } +{ "_id" : "93263", "city" : "SHAFTER", "loc" : [ -119.280075, 35.496994 ], "pop" : 12270, "state" : "CA" } +{ "_id" : "93265", "city" : "SPRINGVILLE", "loc" : [ -118.796059, 36.136314 ], "pop" : 3374, "state" : "CA" } +{ "_id" : "93266", "city" : "STRATFORD", "loc" : [ -119.823564, 36.178976 ], "pop" : 1135, "state" : "CA" } +{ "_id" : "93267", "city" : "STRATHMORE", "loc" : [ -119.079163, 36.147237 ], "pop" : 4774, "state" : "CA" } +{ "_id" : "93268", "city" : "TAFT", "loc" : [ -119.455674, 35.148164 ], "pop" : 15046, "state" : "CA" } +{ "_id" : "93270", "city" : "TERRA BELLA", "loc" : [ -119.031239, 35.95698 ], "pop" : 5066, "state" : "CA" } +{ "_id" : "93271", "city" : "THREE RIVERS", "loc" : [ -118.88754, 36.437686 ], "pop" : 2245, "state" : "CA" } +{ "_id" : "93272", "city" : "TIPTON", "loc" : [ -119.30781, 36.054567 ], "pop" : 2365, "state" : "CA" } +{ "_id" : "93274", "city" : "TULARE", "loc" : [ -119.33802, 36.202155 ], "pop" : 45567, "state" : "CA" } +{ "_id" : "93276", "city" : "TUPMAN", "loc" : [ -119.341994, 35.288547 ], "pop" : 280, "state" : "CA" } +{ "_id" : "93277", "city" : "VISALIA", "loc" : [ -119.306471, 36.311379 ], "pop" : 51620, "state" : "CA" } +{ "_id" : "93280", "city" : "POND", "loc" : [ -119.344728, 35.593375 ], "pop" : 13589, "state" : "CA" } +{ "_id" : "93283", "city" : "WELDON", "loc" : [ -118.285856, 35.639076 ], "pop" : 2049, "state" : "CA" } +{ "_id" : "93285", "city" : "WOFFORD HEIGHTS", "loc" : [ -118.455877, 35.724556 ], "pop" : 3480, "state" : "CA" } +{ "_id" : "93286", "city" : "WOODLAKE", "loc" : [ -119.091764, 36.431334 ], "pop" : 8421, "state" : "CA" } +{ "_id" : "93287", "city" : "WOODY", "loc" : [ -118.843872, 35.70681 ], "pop" : 72, "state" : "CA" } +{ "_id" : "93291", "city" : "VISALIA", "loc" : [ -119.301029, 36.355108 ], "pop" : 46656, "state" : "CA" } +{ "_id" : "93301", "city" : "BAKERSFIELD", "loc" : [ -119.017063, 35.386611 ], "pop" : 12822, "state" : "CA" } +{ "_id" : "93304", "city" : "BAKERSFIELD", "loc" : [ -119.021793, 35.339581 ], "pop" : 41870, "state" : "CA" } +{ "_id" : "93305", "city" : "COLLEGE HEIGHTS", "loc" : [ -118.982042, 35.387772 ], "pop" : 34046, "state" : "CA" } +{ "_id" : "93306", "city" : "BAKERSFIELD", "loc" : [ -118.939104, 35.386697 ], "pop" : 46699, "state" : "CA" } +{ "_id" : "93307", "city" : "BAKERSFIELD", "loc" : [ -118.983851, 35.327484 ], "pop" : 50585, "state" : "CA" } +{ "_id" : "93308", "city" : "BAKERSFIELD", "loc" : [ -119.043319, 35.424395 ], "pop" : 39454, "state" : "CA" } +{ "_id" : "93309", "city" : "BAKERSFIELD", "loc" : [ -119.062713, 35.33839 ], "pop" : 58179, "state" : "CA" } +{ "_id" : "93311", "city" : "BAKERSFIELD", "loc" : [ -119.105647, 35.303891 ], "pop" : 10321, "state" : "CA" } +{ "_id" : "93312", "city" : "GREENACRES", "loc" : [ -119.15014, 35.382082 ], "pop" : 15935, "state" : "CA" } +{ "_id" : "93313", "city" : "BAKERSFIELD", "loc" : [ -119.050936, 35.297391 ], "pop" : 11417, "state" : "CA" } +{ "_id" : "93401", "city" : "SAN LUIS OBISPO", "loc" : [ -120.650933, 35.263453 ], "pop" : 24638, "state" : "CA" } +{ "_id" : "93402", "city" : "LOS OSOS", "loc" : [ -120.833261, 35.317203 ], "pop" : 14648, "state" : "CA" } +{ "_id" : "93405", "city" : "SAN LUIS OBISPO", "loc" : [ -120.681724, 35.290058 ], "pop" : 31976, "state" : "CA" } +{ "_id" : "93420", "city" : "HALCYON", "loc" : [ -120.57289, 35.11449 ], "pop" : 21992, "state" : "CA" } +{ "_id" : "93422", "city" : "ATASCADERO", "loc" : [ -120.663838, 35.475439 ], "pop" : 27720, "state" : "CA" } +{ "_id" : "93426", "city" : "BRADLEY", "loc" : [ -120.972793, 35.809255 ], "pop" : 862, "state" : "CA" } +{ "_id" : "93427", "city" : "BUELLTON", "loc" : [ -120.192233, 34.62093 ], "pop" : 3883, "state" : "CA" } +{ "_id" : "93428", "city" : "CAMBRIA", "loc" : [ -121.084029, 35.556568 ], "pop" : 5635, "state" : "CA" } +{ "_id" : "93430", "city" : "CAYUCOS", "loc" : [ -120.890791, 35.444606 ], "pop" : 3384, "state" : "CA" } +{ "_id" : "93431", "city" : "CHOLAME", "loc" : [ -120.194827, 35.543847 ], "pop" : 206, "state" : "CA" } +{ "_id" : "93432", "city" : "CRESTON", "loc" : [ -120.554238, 35.491543 ], "pop" : 726, "state" : "CA" } +{ "_id" : "93433", "city" : "GROVER BEACH", "loc" : [ -120.617348, 35.120969 ], "pop" : 11790, "state" : "CA" } +{ "_id" : "93434", "city" : "GUADALUPE", "loc" : [ -120.570329, 34.959989 ], "pop" : 6064, "state" : "CA" } +{ "_id" : "93436", "city" : "LOMPOC", "loc" : [ -120.450605, 34.658349 ], "pop" : 49960, "state" : "CA" } +{ "_id" : "93437", "city" : "LOMPOC", "loc" : [ -120.517096, 34.753215 ], "pop" : 9846, "state" : "CA" } +{ "_id" : "93442", "city" : "MORRO BAY", "loc" : [ -120.844745, 35.37953 ], "pop" : 10475, "state" : "CA" } +{ "_id" : "93444", "city" : "NIPOMO", "loc" : [ -120.489413, 35.029806 ], "pop" : 11070, "state" : "CA" } +{ "_id" : "93445", "city" : "OCEANO", "loc" : [ -120.608044, 35.10187 ], "pop" : 6249, "state" : "CA" } +{ "_id" : "93446", "city" : "ADELAIDE", "loc" : [ -120.670676, 35.635248 ], "pop" : 29255, "state" : "CA" } +{ "_id" : "93449", "city" : "SHELL BEACH", "loc" : [ -120.651788, 35.149212 ], "pop" : 7474, "state" : "CA" } +{ "_id" : "93450", "city" : "SAN ARDO", "loc" : [ -120.861191, 35.985685 ], "pop" : 1684, "state" : "CA" } +{ "_id" : "93451", "city" : "PARKFIELD", "loc" : [ -120.696532, 35.753209 ], "pop" : 1218, "state" : "CA" } +{ "_id" : "93452", "city" : "SAN SIMEON", "loc" : [ -121.144033, 35.666815 ], "pop" : 500, "state" : "CA" } +{ "_id" : "93453", "city" : "CALIFORNIA VALLE", "loc" : [ -120.3202, 35.341254 ], "pop" : 1237, "state" : "CA" } +{ "_id" : "93454", "city" : "SANTA MARIA", "loc" : [ -120.43245, 34.954538 ], "pop" : 60187, "state" : "CA" } +{ "_id" : "93455", "city" : "ORCUTT", "loc" : [ -120.429128, 34.879786 ], "pop" : 32891, "state" : "CA" } +{ "_id" : "93460", "city" : "SANTA YNEZ", "loc" : [ -120.071332, 34.623966 ], "pop" : 5659, "state" : "CA" } +{ "_id" : "93461", "city" : "SHANDON", "loc" : [ -120.372047, 35.651273 ], "pop" : 908, "state" : "CA" } +{ "_id" : "93463", "city" : "BALLARD", "loc" : [ -120.129286, 34.609931 ], "pop" : 8327, "state" : "CA" } +{ "_id" : "93465", "city" : "TEMPLETON", "loc" : [ -120.710737, 35.555082 ], "pop" : 5795, "state" : "CA" } +{ "_id" : "93501", "city" : "MOJAVE", "loc" : [ -118.173475, 35.047767 ], "pop" : 4774, "state" : "CA" } +{ "_id" : "93505", "city" : "CALIFORNIA CITY", "loc" : [ -117.965142, 35.127783 ], "pop" : 6086, "state" : "CA" } +{ "_id" : "93510", "city" : "ACTON", "loc" : [ -118.195929, 34.483541 ], "pop" : 6139, "state" : "CA" } +{ "_id" : "93512", "city" : "BENTON", "loc" : [ -118.498526, 37.798099 ], "pop" : 241, "state" : "CA" } +{ "_id" : "93513", "city" : "BIG PINE", "loc" : [ -118.291597, 37.167857 ], "pop" : 1642, "state" : "CA" } +{ "_id" : "93514", "city" : "TOMS PLACE", "loc" : [ -118.44156, 37.386301 ], "pop" : 14072, "state" : "CA" } +{ "_id" : "93516", "city" : "BORON", "loc" : [ -117.662921, 35.003748 ], "pop" : 2904, "state" : "CA" } +{ "_id" : "93517", "city" : "BRIDGEPORT", "loc" : [ -119.208025, 38.256601 ], "pop" : 697, "state" : "CA" } +{ "_id" : "93518", "city" : "HAVILAH", "loc" : [ -118.410264, 35.356798 ], "pop" : 899, "state" : "CA" } +{ "_id" : "93519", "city" : "CANTIL", "loc" : [ -117.993868, 35.282558 ], "pop" : 222, "state" : "CA" } +{ "_id" : "93523", "city" : "NORTH EDWARDS", "loc" : [ -117.915384, 34.930507 ], "pop" : 8996, "state" : "CA" } +{ "_id" : "93526", "city" : "INDEPENDENCE", "loc" : [ -118.204808, 36.839578 ], "pop" : 889, "state" : "CA" } +{ "_id" : "93527", "city" : "PEARSONVILLE", "loc" : [ -117.834844, 35.674498 ], "pop" : 2633, "state" : "CA" } +{ "_id" : "93528", "city" : "JOHANNESBURG", "loc" : [ -117.637325, 35.370655 ], "pop" : 306, "state" : "CA" } +{ "_id" : "93529", "city" : "JUNE LAKE", "loc" : [ -119.082492, 37.777324 ], "pop" : 609, "state" : "CA" } +{ "_id" : "93531", "city" : "KEENE", "loc" : [ -118.607563, 35.237502 ], "pop" : 455, "state" : "CA" } +{ "_id" : "93532", "city" : "ELIZABETH LAKE", "loc" : [ -118.444719, 34.668297 ], "pop" : 2337, "state" : "CA" } +{ "_id" : "93534", "city" : "LANCASTER", "loc" : [ -118.149129, 34.690888 ], "pop" : 32929, "state" : "CA" } +{ "_id" : "93535", "city" : "HI VISTA", "loc" : [ -118.063245, 34.684751 ], "pop" : 49751, "state" : "CA" } +{ "_id" : "93536", "city" : "QUARTZ HILL", "loc" : [ -118.213336, 34.673619 ], "pop" : 39987, "state" : "CA" } +{ "_id" : "93541", "city" : "LEE VINING", "loc" : [ -119.123413, 37.988988 ], "pop" : 415, "state" : "CA" } +{ "_id" : "93543", "city" : "JUNIPER HILLS", "loc" : [ -117.957405, 34.547372 ], "pop" : 10046, "state" : "CA" } +{ "_id" : "93544", "city" : "CRYSTALAIRE", "loc" : [ -117.798841, 34.495914 ], "pop" : 1204, "state" : "CA" } +{ "_id" : "93545", "city" : "LONE PINE", "loc" : [ -118.057824, 36.579781 ], "pop" : 2257, "state" : "CA" } +{ "_id" : "93546", "city" : "CROWLEY LAKE", "loc" : [ -118.976383, 37.642361 ], "pop" : 4832, "state" : "CA" } +{ "_id" : "93550", "city" : "LAKE LOS ANGELES", "loc" : [ -118.061306, 34.571483 ], "pop" : 71024, "state" : "CA" } +{ "_id" : "93551", "city" : "LEONA VALLEY", "loc" : [ -118.181207, 34.601404 ], "pop" : 20768, "state" : "CA" } +{ "_id" : "93553", "city" : "JUNIPER HILLS", "loc" : [ -117.902893, 34.491124 ], "pop" : 1106, "state" : "CA" } +{ "_id" : "93554", "city" : "RANDSBURG", "loc" : [ -117.726396, 35.352176 ], "pop" : 190, "state" : "CA" } +{ "_id" : "93555", "city" : "CHINA LAKE NWC", "loc" : [ -117.679733, 35.631376 ], "pop" : 34246, "state" : "CA" } +{ "_id" : "93560", "city" : "WILLOW SPRINGS", "loc" : [ -118.19636, 34.863117 ], "pop" : 9898, "state" : "CA" } +{ "_id" : "93561", "city" : "BEAR VALLEY SPRI", "loc" : [ -118.522227, 35.129776 ], "pop" : 24466, "state" : "CA" } +{ "_id" : "93562", "city" : "ARGUS", "loc" : [ -117.382992, 35.760817 ], "pop" : 3189, "state" : "CA" } +{ "_id" : "93563", "city" : "VALYERMO", "loc" : [ -117.8271, 34.339014 ], "pop" : 1456, "state" : "CA" } +{ "_id" : "93601", "city" : "AHWAHNEE", "loc" : [ -119.723251, 37.407631 ], "pop" : 327, "state" : "CA" } +{ "_id" : "93602", "city" : "AUBERRY", "loc" : [ -119.457202, 37.072635 ], "pop" : 3179, "state" : "CA" } +{ "_id" : "93604", "city" : "BASS LAKE", "loc" : [ -119.556839, 37.324359 ], "pop" : 628, "state" : "CA" } +{ "_id" : "93608", "city" : "CANTUA CREEK", "loc" : [ -120.335252, 36.492123 ], "pop" : 1622, "state" : "CA" } +{ "_id" : "93609", "city" : "CARUTHERS", "loc" : [ -119.844581, 36.535847 ], "pop" : 4558, "state" : "CA" } +{ "_id" : "93610", "city" : "CHOWCHILLA", "loc" : [ -120.269077, 37.101371 ], "pop" : 10745, "state" : "CA" } +{ "_id" : "93612", "city" : "CLOVIS", "loc" : [ -119.689757, 36.823146 ], "pop" : 59963, "state" : "CA" } +{ "_id" : "93614", "city" : "COARSEGOLD", "loc" : [ -119.745545, 37.221378 ], "pop" : 6950, "state" : "CA" } +{ "_id" : "93615", "city" : "CUTLER", "loc" : [ -119.287023, 36.524266 ], "pop" : 4901, "state" : "CA" } +{ "_id" : "93616", "city" : "DEL REY", "loc" : [ -119.59291, 36.654306 ], "pop" : 1923, "state" : "CA" } +{ "_id" : "93618", "city" : "DINUBA", "loc" : [ -119.39087, 36.534931 ], "pop" : 20012, "state" : "CA" } +{ "_id" : "93620", "city" : "DOS PALOS", "loc" : [ -120.633348, 37.00253 ], "pop" : 9311, "state" : "CA" } +{ "_id" : "93621", "city" : "DUNLAP", "loc" : [ -119.089931, 36.744635 ], "pop" : 94, "state" : "CA" } +{ "_id" : "93622", "city" : "FIREBAUGH", "loc" : [ -120.470048, 36.8651 ], "pop" : 7435, "state" : "CA" } +{ "_id" : "93623", "city" : "FISH CAMP", "loc" : [ -119.642005, 37.51692 ], "pop" : 132, "state" : "CA" } +{ "_id" : "93625", "city" : "FOWLER", "loc" : [ -119.671025, 36.628153 ], "pop" : 5290, "state" : "CA" } +{ "_id" : "93626", "city" : "FRIANT", "loc" : [ -119.696501, 37.002416 ], "pop" : 871, "state" : "CA" } +{ "_id" : "93627", "city" : "HELM", "loc" : [ -120.093598, 36.499231 ], "pop" : 832, "state" : "CA" } +{ "_id" : "93630", "city" : "KERMAN", "loc" : [ -120.072444, 36.730576 ], "pop" : 11224, "state" : "CA" } +{ "_id" : "93631", "city" : "KINGSBURG", "loc" : [ -119.543298, 36.508047 ], "pop" : 12263, "state" : "CA" } +{ "_id" : "93633", "city" : "KINGS CANYON NAT", "loc" : [ -119.068201, 36.780601 ], "pop" : 472, "state" : "CA" } +{ "_id" : "93635", "city" : "LOS BANOS", "loc" : [ -120.854387, 37.06266 ], "pop" : 18199, "state" : "CA" } +{ "_id" : "93637", "city" : "MADERA", "loc" : [ -120.081966, 36.94026 ], "pop" : 20440, "state" : "CA" } +{ "_id" : "93638", "city" : "MADERA", "loc" : [ -120.012778, 36.968726 ], "pop" : 36525, "state" : "CA" } +{ "_id" : "93640", "city" : "MENDOTA", "loc" : [ -120.409287, 36.742365 ], "pop" : 8839, "state" : "CA" } +{ "_id" : "93641", "city" : "MIRAMONTE", "loc" : [ -119.047718, 36.68938 ], "pop" : 607, "state" : "CA" } +{ "_id" : "93643", "city" : "NORTH FORK", "loc" : [ -119.514324, 37.212531 ], "pop" : 2541, "state" : "CA" } +{ "_id" : "93644", "city" : "OAKHURST", "loc" : [ -119.644854, 37.347561 ], "pop" : 8190, "state" : "CA" } +{ "_id" : "93645", "city" : "O NEALS", "loc" : [ -119.745369, 37.086874 ], "pop" : 24, "state" : "CA" } +{ "_id" : "93646", "city" : "ORANGE COVE", "loc" : [ -119.313502, 36.624283 ], "pop" : 6374, "state" : "CA" } +{ "_id" : "93647", "city" : "OROSI", "loc" : [ -119.281522, 36.546368 ], "pop" : 7545, "state" : "CA" } +{ "_id" : "93648", "city" : "PARLIER", "loc" : [ -119.537482, 36.610265 ], "pop" : 9076, "state" : "CA" } +{ "_id" : "93650", "city" : "PINEDALE", "loc" : [ -119.800359, 36.841107 ], "pop" : 4164, "state" : "CA" } +{ "_id" : "93651", "city" : "PRATHER", "loc" : [ -119.526771, 36.993799 ], "pop" : 1446, "state" : "CA" } +{ "_id" : "93652", "city" : "RAISIN", "loc" : [ -119.903158, 36.598928 ], "pop" : 381, "state" : "CA" } +{ "_id" : "93653", "city" : "RAYMOND", "loc" : [ -119.876567, 37.27898 ], "pop" : 491, "state" : "CA" } +{ "_id" : "93654", "city" : "REEDLEY", "loc" : [ -119.437785, 36.604406 ], "pop" : 22370, "state" : "CA" } +{ "_id" : "93656", "city" : "RIVERDALE", "loc" : [ -119.871953, 36.429525 ], "pop" : 4386, "state" : "CA" } +{ "_id" : "93657", "city" : "SANGER", "loc" : [ -119.547796, 36.7243 ], "pop" : 27201, "state" : "CA" } +{ "_id" : "93660", "city" : "SAN JOAQUIN", "loc" : [ -120.188934, 36.605869 ], "pop" : 2727, "state" : "CA" } +{ "_id" : "93662", "city" : "SELMA", "loc" : [ -119.617026, 36.569524 ], "pop" : 21798, "state" : "CA" } +{ "_id" : "93664", "city" : "SHAVER LAKE", "loc" : [ -119.273031, 37.139695 ], "pop" : 925, "state" : "CA" } +{ "_id" : "93667", "city" : "TOLLHOUSE", "loc" : [ -119.391415, 36.99434 ], "pop" : 1820, "state" : "CA" } +{ "_id" : "93668", "city" : "TRANQUILLITY", "loc" : [ -120.261655, 36.658376 ], "pop" : 1297, "state" : "CA" } +{ "_id" : "93669", "city" : "WISHON", "loc" : [ -119.557014, 37.281028 ], "pop" : 474, "state" : "CA" } +{ "_id" : "93675", "city" : "SQUAW VALLEY", "loc" : [ -119.181449, 36.707146 ], "pop" : 2731, "state" : "CA" } +{ "_id" : "93701", "city" : "FRESNO", "loc" : [ -119.786705, 36.748727 ], "pop" : 15024, "state" : "CA" } +{ "_id" : "93702", "city" : "FRESNO", "loc" : [ -119.753215, 36.739954 ], "pop" : 44477, "state" : "CA" } +{ "_id" : "93703", "city" : "FRESNO", "loc" : [ -119.759401, 36.768445 ], "pop" : 30457, "state" : "CA" } +{ "_id" : "93704", "city" : "FIG GARDEN VILLA", "loc" : [ -119.799745, 36.798781 ], "pop" : 26496, "state" : "CA" } +{ "_id" : "93705", "city" : "FRESNO", "loc" : [ -119.828617, 36.786285 ], "pop" : 34114, "state" : "CA" } +{ "_id" : "93706", "city" : "EASTON", "loc" : [ -119.820408, 36.700589 ], "pop" : 33682, "state" : "CA" } +{ "_id" : "93710", "city" : "FRESNO", "loc" : [ -119.76205, 36.823643 ], "pop" : 29719, "state" : "CA" } +{ "_id" : "93711", "city" : "FRESNO", "loc" : [ -119.831896, 36.830297 ], "pop" : 29809, "state" : "CA" } +{ "_id" : "93720", "city" : "FRESNO", "loc" : [ -119.765522, 36.857944 ], "pop" : 21498, "state" : "CA" } +{ "_id" : "93721", "city" : "FRESNO", "loc" : [ -119.784273, 36.737714 ], "pop" : 6156, "state" : "CA" } +{ "_id" : "93722", "city" : "FRESNO", "loc" : [ -119.880119, 36.791779 ], "pop" : 33523, "state" : "CA" } +{ "_id" : "93725", "city" : "CALWA", "loc" : [ -119.742477, 36.675312 ], "pop" : 19698, "state" : "CA" } +{ "_id" : "93726", "city" : "FRESNO", "loc" : [ -119.760445, 36.794943 ], "pop" : 36325, "state" : "CA" } +{ "_id" : "93727", "city" : "FRESNO", "loc" : [ -119.706055, 36.752796 ], "pop" : 51417, "state" : "CA" } +{ "_id" : "93728", "city" : "FRESNO", "loc" : [ -119.811314, 36.758095 ], "pop" : 15386, "state" : "CA" } +{ "_id" : "93901", "city" : "SALINAS", "loc" : [ -121.659589, 36.667693 ], "pop" : 25605, "state" : "CA" } +{ "_id" : "93905", "city" : "SALINAS", "loc" : [ -121.617606, 36.681143 ], "pop" : 41956, "state" : "CA" } +{ "_id" : "93906", "city" : "SALINAS", "loc" : [ -121.643805, 36.710339 ], "pop" : 39534, "state" : "CA" } +{ "_id" : "93907", "city" : "PRUNEDALE", "loc" : [ -121.665588, 36.765385 ], "pop" : 21061, "state" : "CA" } +{ "_id" : "93908", "city" : "SALINAS", "loc" : [ -121.672861, 36.601122 ], "pop" : 15610, "state" : "CA" } +{ "_id" : "93920", "city" : "BIG SUR", "loc" : [ -121.700897, 36.245798 ], "pop" : 1669, "state" : "CA" } +{ "_id" : "93923", "city" : "CARMEL", "loc" : [ -121.894875, 36.545693 ], "pop" : 15293, "state" : "CA" } +{ "_id" : "93924", "city" : "CARMEL VALLEY", "loc" : [ -121.724356, 36.478709 ], "pop" : 6066, "state" : "CA" } +{ "_id" : "93925", "city" : "CHUALAR", "loc" : [ -121.431964, 36.595042 ], "pop" : 12, "state" : "CA" } +{ "_id" : "93926", "city" : "GONZALES", "loc" : [ -121.410347, 36.490038 ], "pop" : 12842, "state" : "CA" } +{ "_id" : "93927", "city" : "GREENFIELD", "loc" : [ -121.24507, 36.320178 ], "pop" : 8728, "state" : "CA" } +{ "_id" : "93930", "city" : "KING CITY", "loc" : [ -121.127329, 36.202776 ], "pop" : 11299, "state" : "CA" } +{ "_id" : "93932", "city" : "LOCKWOOD", "loc" : [ -121.205946, 35.989287 ], "pop" : 939, "state" : "CA" } +{ "_id" : "93933", "city" : "MARINA", "loc" : [ -121.793383, 36.684922 ], "pop" : 16973, "state" : "CA" } +{ "_id" : "93940", "city" : "DEL REY OAKS", "loc" : [ -121.8848, 36.595642 ], "pop" : 35326, "state" : "CA" } +{ "_id" : "93941", "city" : "FORT ORD", "loc" : [ -121.804999, 36.644627 ], "pop" : 25009, "state" : "CA" } +{ "_id" : "93950", "city" : "PACIFIC GROVE", "loc" : [ -121.921957, 36.616737 ], "pop" : 16040, "state" : "CA" } +{ "_id" : "93953", "city" : "PEBBLE BEACH", "loc" : [ -121.942044, 36.590735 ], "pop" : 5061, "state" : "CA" } +{ "_id" : "93955", "city" : "SAND CITY", "loc" : [ -121.835724, 36.609208 ], "pop" : 23514, "state" : "CA" } +{ "_id" : "93960", "city" : "SOLEDAD", "loc" : [ -121.324286, 36.41964 ], "pop" : 9046, "state" : "CA" } +{ "_id" : "94002", "city" : "BELMONT", "loc" : [ -122.292671, 37.517433 ], "pop" : 24960, "state" : "CA" } +{ "_id" : "94005", "city" : "BRISBANE", "loc" : [ -122.400118, 37.681104 ], "pop" : 2952, "state" : "CA" } +{ "_id" : "94010", "city" : "HILLSBOROUGH", "loc" : [ -122.362952, 37.575884 ], "pop" : 38444, "state" : "CA" } +{ "_id" : "94014", "city" : "COLMA", "loc" : [ -122.452679, 37.698187 ], "pop" : 40406, "state" : "CA" } +{ "_id" : "94015", "city" : "DALY CITY", "loc" : [ -122.478015, 37.678696 ], "pop" : 57354, "state" : "CA" } +{ "_id" : "94019", "city" : "HALF MOON BAY", "loc" : [ -122.445929, 37.479057 ], "pop" : 14073, "state" : "CA" } +{ "_id" : "94020", "city" : "LA HONDA", "loc" : [ -122.293889, 37.272285 ], "pop" : 1557, "state" : "CA" } +{ "_id" : "94021", "city" : "LOMA MAR", "loc" : [ -122.281996, 37.254437 ], "pop" : 237, "state" : "CA" } +{ "_id" : "94022", "city" : "LOS ALTOS", "loc" : [ -122.125754, 37.381432 ], "pop" : 17366, "state" : "CA" } +{ "_id" : "94024", "city" : "LOS ALTOS", "loc" : [ -122.086205, 37.354745 ], "pop" : 20795, "state" : "CA" } +{ "_id" : "94025", "city" : "WEST MENLO PARK", "loc" : [ -122.179136, 37.453401 ], "pop" : 38383, "state" : "CA" } +{ "_id" : "94027", "city" : "ATHERTON", "loc" : [ -122.200198, 37.456255 ], "pop" : 7312, "state" : "CA" } +{ "_id" : "94028", "city" : "LADERA", "loc" : [ -122.208131, 37.378859 ], "pop" : 6379, "state" : "CA" } +{ "_id" : "94030", "city" : "MILLBRAE", "loc" : [ -122.401985, 37.600382 ], "pop" : 20508, "state" : "CA" } +{ "_id" : "94035", "city" : "MOFFETT FIELD", "loc" : [ -122.051944, 37.41001 ], "pop" : 790, "state" : "CA" } +{ "_id" : "94038", "city" : "MOSS BEACH", "loc" : [ -122.50683, 37.531039 ], "pop" : 5415, "state" : "CA" } +{ "_id" : "94040", "city" : "MOUNTAIN VIEW", "loc" : [ -122.087983, 37.385532 ], "pop" : 26969, "state" : "CA" } +{ "_id" : "94041", "city" : "MOUNTAIN VIEW", "loc" : [ -122.078341, 37.389347 ], "pop" : 13438, "state" : "CA" } +{ "_id" : "94043", "city" : "MOUNTAIN VIEW", "loc" : [ -122.077468, 37.405567 ], "pop" : 28592, "state" : "CA" } +{ "_id" : "94044", "city" : "PACIFICA", "loc" : [ -122.481607, 37.619559 ], "pop" : 37596, "state" : "CA" } +{ "_id" : "94060", "city" : "PESCADERO", "loc" : [ -122.364876, 37.206518 ], "pop" : 670, "state" : "CA" } +{ "_id" : "94061", "city" : "REDWOOD CITY", "loc" : [ -122.230406, 37.464661 ], "pop" : 33316, "state" : "CA" } +{ "_id" : "94062", "city" : "WOODSIDE", "loc" : [ -122.255879, 37.452119 ], "pop" : 24947, "state" : "CA" } +{ "_id" : "94063", "city" : "REDWOOD CITY", "loc" : [ -122.209134, 37.481544 ], "pop" : 28251, "state" : "CA" } +{ "_id" : "94065", "city" : "REDWOOD CITY", "loc" : [ -122.248564, 37.533128 ], "pop" : 2285, "state" : "CA" } +{ "_id" : "94066", "city" : "SAN BRUNO", "loc" : [ -122.429021, 37.624742 ], "pop" : 38678, "state" : "CA" } +{ "_id" : "94070", "city" : "SAN CARLOS", "loc" : [ -122.267356, 37.496859 ], "pop" : 27599, "state" : "CA" } +{ "_id" : "94074", "city" : "SAN GREGORIO", "loc" : [ -122.355552, 37.325513 ], "pop" : 312, "state" : "CA" } +{ "_id" : "94080", "city" : "SOUTH SAN FRANCI", "loc" : [ -122.4347, 37.65382 ], "pop" : 54610, "state" : "CA" } +{ "_id" : "94086", "city" : "SUNNYVALE", "loc" : [ -122.023771, 37.376407 ], "pop" : 56215, "state" : "CA" } +{ "_id" : "94087", "city" : "SUNNYVALE", "loc" : [ -122.034859, 37.350214 ], "pop" : 47813, "state" : "CA" } +{ "_id" : "94089", "city" : "SUNNYVALE", "loc" : [ -122.000637, 37.398255 ], "pop" : 13522, "state" : "CA" } +{ "_id" : "94102", "city" : "SAN FRANCISCO", "loc" : [ -122.416728, 37.781334 ], "pop" : 26908, "state" : "CA" } +{ "_id" : "94103", "city" : "SAN FRANCISCO", "loc" : [ -122.414664, 37.77254 ], "pop" : 17867, "state" : "CA" } +{ "_id" : "94104", "city" : "SAN FRANCISCO", "loc" : [ -122.401826, 37.791487 ], "pop" : 760, "state" : "CA" } +{ "_id" : "94105", "city" : "SAN FRANCISCO", "loc" : [ -122.389229, 37.786427 ], "pop" : 2054, "state" : "CA" } +{ "_id" : "94107", "city" : "SAN FRANCISCO", "loc" : [ -122.397099, 37.762147 ], "pop" : 12143, "state" : "CA" } +{ "_id" : "94108", "city" : "SAN FRANCISCO", "loc" : [ -122.40791, 37.792931 ], "pop" : 14143, "state" : "CA" } +{ "_id" : "94109", "city" : "SAN FRANCISCO", "loc" : [ -122.418579, 37.791687 ], "pop" : 49396, "state" : "CA" } +{ "_id" : "94110", "city" : "SAN FRANCISCO", "loc" : [ -122.415344, 37.750858 ], "pop" : 70770, "state" : "CA" } +{ "_id" : "94111", "city" : "SAN FRANCISCO", "loc" : [ -122.400147, 37.797376 ], "pop" : 3122, "state" : "CA" } +{ "_id" : "94112", "city" : "SAN FRANCISCO", "loc" : [ -122.441081, 37.71954 ], "pop" : 64320, "state" : "CA" } +{ "_id" : "94114", "city" : "SAN FRANCISCO", "loc" : [ -122.432977, 37.758716 ], "pop" : 30698, "state" : "CA" } +{ "_id" : "94115", "city" : "SAN FRANCISCO", "loc" : [ -122.435835, 37.785607 ], "pop" : 28859, "state" : "CA" } +{ "_id" : "94116", "city" : "SAN FRANCISCO", "loc" : [ -122.486296, 37.744144 ], "pop" : 39970, "state" : "CA" } +{ "_id" : "94117", "city" : "SAN FRANCISCO", "loc" : [ -122.441272, 37.771234 ], "pop" : 38127, "state" : "CA" } +{ "_id" : "94118", "city" : "SAN FRANCISCO", "loc" : [ -122.461414, 37.781174 ], "pop" : 38499, "state" : "CA" } +{ "_id" : "94121", "city" : "SAN FRANCISCO", "loc" : [ -122.489178, 37.778616 ], "pop" : 40430, "state" : "CA" } +{ "_id" : "94122", "city" : "SAN FRANCISCO", "loc" : [ -122.483647, 37.759326 ], "pop" : 52318, "state" : "CA" } +{ "_id" : "94123", "city" : "SAN FRANCISCO", "loc" : [ -122.434163, 37.799865 ], "pop" : 23280, "state" : "CA" } +{ "_id" : "94124", "city" : "SAN FRANCISCO", "loc" : [ -122.388649, 37.730888 ], "pop" : 27239, "state" : "CA" } +{ "_id" : "94127", "city" : "SAN FRANCISCO", "loc" : [ -122.457116, 37.735385 ], "pop" : 17906, "state" : "CA" } +{ "_id" : "94129", "city" : "SAN FRANCISCO", "loc" : [ -122.464958, 37.800507 ], "pop" : 4715, "state" : "CA" } +{ "_id" : "94130", "city" : "SAN FRANCISCO", "loc" : [ -122.369319, 37.823128 ], "pop" : 4533, "state" : "CA" } +{ "_id" : "94131", "city" : "SAN FRANCISCO", "loc" : [ -122.438335, 37.745032 ], "pop" : 30521, "state" : "CA" } +{ "_id" : "94132", "city" : "SAN FRANCISCO", "loc" : [ -122.47545, 37.721118 ], "pop" : 23632, "state" : "CA" } +{ "_id" : "94133", "city" : "SAN FRANCISCO", "loc" : [ -122.409081, 37.800175 ], "pop" : 27148, "state" : "CA" } +{ "_id" : "94134", "city" : "SAN FRANCISCO", "loc" : [ -122.409577, 37.718968 ], "pop" : 34635, "state" : "CA" } +{ "_id" : "94301", "city" : "PALO ALTO", "loc" : [ -122.149685, 37.444324 ], "pop" : 15965, "state" : "CA" } +{ "_id" : "94303", "city" : "EAST PALO ALTO", "loc" : [ -122.131902, 37.455641 ], "pop" : 35680, "state" : "CA" } +{ "_id" : "94304", "city" : "PALO ALTO", "loc" : [ -122.184234, 37.433424 ], "pop" : 1835, "state" : "CA" } +{ "_id" : "94305", "city" : "STANFORD", "loc" : [ -122.161867, 37.423573 ], "pop" : 18097, "state" : "CA" } +{ "_id" : "94306", "city" : "PALO ALTO", "loc" : [ -122.127375, 37.418009 ], "pop" : 24309, "state" : "CA" } +{ "_id" : "94401", "city" : "RUSSIAN RIVER", "loc" : [ -122.320262, 37.572271 ], "pop" : 28190, "state" : "CA" } +{ "_id" : "94402", "city" : "SAN MATEO", "loc" : [ -122.32762, 37.550685 ], "pop" : 23838, "state" : "CA" } +{ "_id" : "94403", "city" : "SAN MATEO", "loc" : [ -122.299796, 37.539495 ], "pop" : 35630, "state" : "CA" } +{ "_id" : "94404", "city" : "FOSTER CITY", "loc" : [ -122.263577, 37.551614 ], "pop" : 33745, "state" : "CA" } +{ "_id" : "94501", "city" : "COAST GUARD ISLA", "loc" : [ -122.260516, 37.764783 ], "pop" : 76110, "state" : "CA" } +{ "_id" : "94507", "city" : "ALAMO", "loc" : [ -122.022868, 37.853695 ], "pop" : 8569, "state" : "CA" } +{ "_id" : "94508", "city" : "ANGWIN", "loc" : [ -122.447732, 38.576906 ], "pop" : 4067, "state" : "CA" } +{ "_id" : "94509", "city" : "ANTIOCH", "loc" : [ -121.808906, 37.993917 ], "pop" : 62830, "state" : "CA" } +{ "_id" : "94510", "city" : "BENICIA", "loc" : [ -122.161392, 38.068459 ], "pop" : 24545, "state" : "CA" } +{ "_id" : "94512", "city" : "BIRDS LANDING", "loc" : [ -121.844318, 38.150402 ], "pop" : 32, "state" : "CA" } +{ "_id" : "94513", "city" : "BRENTWOOD", "loc" : [ -121.689427, 37.932415 ], "pop" : 12372, "state" : "CA" } +{ "_id" : "94514", "city" : "BYRON", "loc" : [ -121.602211, 37.902616 ], "pop" : 5745, "state" : "CA" } +{ "_id" : "94515", "city" : "CALISTOGA", "loc" : [ -122.581384, 38.582305 ], "pop" : 5758, "state" : "CA" } +{ "_id" : "94517", "city" : "CLAYTON", "loc" : [ -121.909967, 37.915442 ], "pop" : 10353, "state" : "CA" } +{ "_id" : "94518", "city" : "CONCORD", "loc" : [ -122.026296, 37.950434 ], "pop" : 25516, "state" : "CA" } +{ "_id" : "94519", "city" : "CONCORD", "loc" : [ -122.011948, 37.984082 ], "pop" : 19032, "state" : "CA" } +{ "_id" : "94520", "city" : "CONCORD", "loc" : [ -122.036178, 37.982259 ], "pop" : 31474, "state" : "CA" } +{ "_id" : "94521", "city" : "CONCORD", "loc" : [ -121.974955, 37.957503 ], "pop" : 39005, "state" : "CA" } +{ "_id" : "94523", "city" : "PLEASANT HILL", "loc" : [ -122.07371, 37.954002 ], "pop" : 31046, "state" : "CA" } +{ "_id" : "94525", "city" : "CROCKETT", "loc" : [ -122.217659, 38.051865 ], "pop" : 3228, "state" : "CA" } +{ "_id" : "94526", "city" : "DANVILLE", "loc" : [ -121.96598, 37.813985 ], "pop" : 40613, "state" : "CA" } +{ "_id" : "94528", "city" : "DIABLO", "loc" : [ -121.960951, 37.83883 ], "pop" : 791, "state" : "CA" } +{ "_id" : "94530", "city" : "EL CERRITO", "loc" : [ -122.298521, 37.915633 ], "pop" : 28146, "state" : "CA" } +{ "_id" : "94533", "city" : "FAIRFIELD", "loc" : [ -122.03565, 38.267084 ], "pop" : 65455, "state" : "CA" } +{ "_id" : "94535", "city" : "TRAVIS AFB", "loc" : [ -121.946317, 38.274313 ], "pop" : 9874, "state" : "CA" } +{ "_id" : "94536", "city" : "FREMONT", "loc" : [ -121.999935, 37.560493 ], "pop" : 58580, "state" : "CA" } +{ "_id" : "94538", "city" : "FREMONT", "loc" : [ -121.971215, 37.530815 ], "pop" : 45430, "state" : "CA" } +{ "_id" : "94539", "city" : "FREMONT", "loc" : [ -121.928733, 37.517579 ], "pop" : 39927, "state" : "CA" } +{ "_id" : "94541", "city" : "HAYWARD", "loc" : [ -122.089418, 37.674048 ], "pop" : 48964, "state" : "CA" } +{ "_id" : "94542", "city" : "HAYWARD", "loc" : [ -122.047236, 37.658566 ], "pop" : 11165, "state" : "CA" } +{ "_id" : "94544", "city" : "HAYWARD", "loc" : [ -122.067029, 37.637443 ], "pop" : 58348, "state" : "CA" } +{ "_id" : "94545", "city" : "HAYWARD", "loc" : [ -122.0971, 37.633245 ], "pop" : 23760, "state" : "CA" } +{ "_id" : "94546", "city" : "CASTRO VALLEY", "loc" : [ -122.078183, 37.701527 ], "pop" : 37808, "state" : "CA" } +{ "_id" : "94547", "city" : "HERCULES", "loc" : [ -122.263702, 38.006649 ], "pop" : 16376, "state" : "CA" } +{ "_id" : "94548", "city" : "KNIGHTSEN", "loc" : [ -121.672149, 37.9818 ], "pop" : 118, "state" : "CA" } +{ "_id" : "94549", "city" : "LAFAYETTE", "loc" : [ -122.11194, 37.896105 ], "pop" : 25979, "state" : "CA" } +{ "_id" : "94550", "city" : "LIVERMORE", "loc" : [ -121.762983, 37.68299 ], "pop" : 59709, "state" : "CA" } +{ "_id" : "94552", "city" : "CASTRO VALLEY", "loc" : [ -122.038113, 37.713107 ], "pop" : 7936, "state" : "CA" } +{ "_id" : "94553", "city" : "PACHECO", "loc" : [ -122.111693, 37.993246 ], "pop" : 45532, "state" : "CA" } +{ "_id" : "94555", "city" : "FREMONT", "loc" : [ -122.046925, 37.573458 ], "pop" : 29437, "state" : "CA" } +{ "_id" : "94556", "city" : "MORAGA", "loc" : [ -122.124185, 37.843653 ], "pop" : 15988, "state" : "CA" } +{ "_id" : "94558", "city" : "SPANISH FLAT", "loc" : [ -122.305518, 38.328137 ], "pop" : 57901, "state" : "CA" } +{ "_id" : "94559", "city" : "NAPA", "loc" : [ -122.284086, 38.290362 ], "pop" : 23606, "state" : "CA" } +{ "_id" : "94560", "city" : "NEWARK", "loc" : [ -122.031956, 37.536812 ], "pop" : 37861, "state" : "CA" } +{ "_id" : "94561", "city" : "OAKLEY", "loc" : [ -121.703623, 37.994034 ], "pop" : 20920, "state" : "CA" } +{ "_id" : "94563", "city" : "ORINDA", "loc" : [ -122.172848, 37.878659 ], "pop" : 16883, "state" : "CA" } +{ "_id" : "94564", "city" : "PINOLE", "loc" : [ -122.287477, 37.996903 ], "pop" : 16920, "state" : "CA" } +{ "_id" : "94565", "city" : "SHORE ACRES", "loc" : [ -121.908178, 38.016887 ], "pop" : 64053, "state" : "CA" } +{ "_id" : "94566", "city" : "PLEASANTON", "loc" : [ -121.8755, 37.665804 ], "pop" : 32953, "state" : "CA" } +{ "_id" : "94567", "city" : "POPE VALLEY", "loc" : [ -122.472244, 38.678192 ], "pop" : 286, "state" : "CA" } +{ "_id" : "94568", "city" : "DUBLIN", "loc" : [ -121.922589, 37.716597 ], "pop" : 23275, "state" : "CA" } +{ "_id" : "94569", "city" : "PORT COSTA", "loc" : [ -122.186649, 38.046013 ], "pop" : 228, "state" : "CA" } +{ "_id" : "94571", "city" : "RIO VISTA", "loc" : [ -121.701635, 38.163734 ], "pop" : 4516, "state" : "CA" } +{ "_id" : "94572", "city" : "RODEO", "loc" : [ -122.258139, 38.03069 ], "pop" : 7827, "state" : "CA" } +{ "_id" : "94574", "city" : "SAINT HELENA", "loc" : [ -122.461921, 38.513776 ], "pop" : 9388, "state" : "CA" } +{ "_id" : "94577", "city" : "SAN LEANDRO", "loc" : [ -122.158705, 37.720467 ], "pop" : 36779, "state" : "CA" } +{ "_id" : "94578", "city" : "SAN LEANDRO", "loc" : [ -122.123969, 37.702377 ], "pop" : 31780, "state" : "CA" } +{ "_id" : "94579", "city" : "SAN LEANDRO", "loc" : [ -122.150659, 37.689209 ], "pop" : 15754, "state" : "CA" } +{ "_id" : "94580", "city" : "SAN LORENZO", "loc" : [ -122.129547, 37.678671 ], "pop" : 23010, "state" : "CA" } +{ "_id" : "94583", "city" : "SAN RAMON", "loc" : [ -121.952224, 37.756188 ], "pop" : 35449, "state" : "CA" } +{ "_id" : "94585", "city" : "SUISUN CITY", "loc" : [ -122.042003, 38.240834 ], "pop" : 31081, "state" : "CA" } +{ "_id" : "94586", "city" : "SUNOL", "loc" : [ -121.898636, 37.609403 ], "pop" : 953, "state" : "CA" } +{ "_id" : "94587", "city" : "UNION CITY", "loc" : [ -122.049702, 37.589458 ], "pop" : 52869, "state" : "CA" } +{ "_id" : "94588", "city" : "PLEASANTON", "loc" : [ -121.8957, 37.687311 ], "pop" : 19032, "state" : "CA" } +{ "_id" : "94589", "city" : "AMERICAN CANYON", "loc" : [ -122.249333, 38.148345 ], "pop" : 37599, "state" : "CA" } +{ "_id" : "94590", "city" : "VALLEJO", "loc" : [ -122.247367, 38.105302 ], "pop" : 35516, "state" : "CA" } +{ "_id" : "94591", "city" : "VALLEJO", "loc" : [ -122.212354, 38.09853 ], "pop" : 43336, "state" : "CA" } +{ "_id" : "94592", "city" : "MARE ISLAND", "loc" : [ -122.27273, 38.094654 ], "pop" : 3589, "state" : "CA" } +{ "_id" : "94595", "city" : "WALNUT CREEK", "loc" : [ -122.070259, 37.875317 ], "pop" : 16346, "state" : "CA" } +{ "_id" : "94596", "city" : "WALNUT CREEK", "loc" : [ -122.054909, 37.905279 ], "pop" : 38092, "state" : "CA" } +{ "_id" : "94598", "city" : "WALNUT CREEK", "loc" : [ -122.025879, 37.919424 ], "pop" : 24174, "state" : "CA" } +{ "_id" : "94599", "city" : "YOUNTVILLE", "loc" : [ -122.358506, 38.403813 ], "pop" : 1876, "state" : "CA" } +{ "_id" : "94601", "city" : "OAKLAND", "loc" : [ -122.216587, 37.780595 ], "pop" : 47715, "state" : "CA" } +{ "_id" : "94602", "city" : "OAKLAND", "loc" : [ -122.210368, 37.801133 ], "pop" : 28629, "state" : "CA" } +{ "_id" : "94603", "city" : "OAKLAND", "loc" : [ -122.171017, 37.740239 ], "pop" : 27303, "state" : "CA" } +{ "_id" : "94605", "city" : "OAKLAND", "loc" : [ -122.163326, 37.764132 ], "pop" : 38511, "state" : "CA" } +{ "_id" : "94606", "city" : "OAKLAND", "loc" : [ -122.24292, 37.79565 ], "pop" : 38555, "state" : "CA" } +{ "_id" : "94607", "city" : "OAKLAND", "loc" : [ -122.285051, 37.807084 ], "pop" : 21294, "state" : "CA" } +{ "_id" : "94608", "city" : "EMERYVILLE", "loc" : [ -122.280363, 37.836466 ], "pop" : 22318, "state" : "CA" } +{ "_id" : "94609", "city" : "OAKLAND", "loc" : [ -122.26367, 37.836096 ], "pop" : 20263, "state" : "CA" } +{ "_id" : "94610", "city" : "OAKLAND", "loc" : [ -122.244322, 37.812636 ], "pop" : 29637, "state" : "CA" } +{ "_id" : "94611", "city" : "PIEDMONT", "loc" : [ -122.22683, 37.828157 ], "pop" : 34238, "state" : "CA" } +{ "_id" : "94612", "city" : "OAKLAND", "loc" : [ -122.266774, 37.808473 ], "pop" : 10763, "state" : "CA" } +{ "_id" : "94613", "city" : "OAKLAND", "loc" : [ -122.181585, 37.782427 ], "pop" : 627, "state" : "CA" } +{ "_id" : "94618", "city" : "PIEDMONT", "loc" : [ -122.24191, 37.84368 ], "pop" : 15763, "state" : "CA" } +{ "_id" : "94619", "city" : "OAKLAND", "loc" : [ -122.18838, 37.787786 ], "pop" : 24501, "state" : "CA" } +{ "_id" : "94621", "city" : "OAKLAND", "loc" : [ -122.185335, 37.758924 ], "pop" : 26689, "state" : "CA" } +{ "_id" : "94702", "city" : "BERKELEY", "loc" : [ -122.285126, 37.865611 ], "pop" : 15004, "state" : "CA" } +{ "_id" : "94703", "city" : "BERKELEY", "loc" : [ -122.274914, 37.863028 ], "pop" : 18554, "state" : "CA" } +{ "_id" : "94704", "city" : "BERKELEY", "loc" : [ -122.257048, 37.866428 ], "pop" : 23551, "state" : "CA" } +{ "_id" : "94705", "city" : "BERKELEY", "loc" : [ -122.249964, 37.85711 ], "pop" : 11833, "state" : "CA" } +{ "_id" : "94706", "city" : "ALBANY", "loc" : [ -122.295394, 37.890045 ], "pop" : 17333, "state" : "CA" } +{ "_id" : "94707", "city" : "KENSINGTON", "loc" : [ -122.276517, 37.893118 ], "pop" : 9152, "state" : "CA" } +{ "_id" : "94708", "city" : "KENSINGTON", "loc" : [ -122.25976, 37.890829 ], "pop" : 8874, "state" : "CA" } +{ "_id" : "94709", "city" : "BERKELEY", "loc" : [ -122.265461, 37.878397 ], "pop" : 9927, "state" : "CA" } +{ "_id" : "94710", "city" : "BERKELEY", "loc" : [ -122.295929, 37.869603 ], "pop" : 6891, "state" : "CA" } +{ "_id" : "94801", "city" : "RICHMOND", "loc" : [ -122.36201, 37.940039 ], "pop" : 23948, "state" : "CA" } +{ "_id" : "94803", "city" : "EL SOBRANTE", "loc" : [ -122.290092, 37.969287 ], "pop" : 22238, "state" : "CA" } +{ "_id" : "94804", "city" : "RICHMOND", "loc" : [ -122.33421, 37.926523 ], "pop" : 33990, "state" : "CA" } +{ "_id" : "94805", "city" : "RICHMOND", "loc" : [ -122.323756, 37.941719 ], "pop" : 12342, "state" : "CA" } +{ "_id" : "94806", "city" : "SAN PABLO", "loc" : [ -122.336929, 37.972374 ], "pop" : 47668, "state" : "CA" } +{ "_id" : "94901", "city" : "SAN RAFAEL", "loc" : [ -122.510502, 37.969144 ], "pop" : 41550, "state" : "CA" } +{ "_id" : "94903", "city" : "CIVIC CENTER", "loc" : [ -122.54521, 38.015044 ], "pop" : 25563, "state" : "CA" } +{ "_id" : "94904", "city" : "KENTFIELD", "loc" : [ -122.535501, 37.950599 ], "pop" : 11820, "state" : "CA" } +{ "_id" : "94920", "city" : "BELVEDERE", "loc" : [ -122.472627, 37.889885 ], "pop" : 10993, "state" : "CA" } +{ "_id" : "94922", "city" : "BODEGA", "loc" : [ -122.951364, 38.339264 ], "pop" : 93, "state" : "CA" } +{ "_id" : "94923", "city" : "BODEGA BAY", "loc" : [ -123.037308, 38.330921 ], "pop" : 1427, "state" : "CA" } +{ "_id" : "94924", "city" : "BOLINAS", "loc" : [ -122.694655, 37.907875 ], "pop" : 1555, "state" : "CA" } +{ "_id" : "94925", "city" : "CORTE MADERA", "loc" : [ -122.513202, 37.922256 ], "pop" : 7974, "state" : "CA" } +{ "_id" : "94928", "city" : "ROHNERT PARK", "loc" : [ -122.69408, 38.347027 ], "pop" : 35730, "state" : "CA" } +{ "_id" : "94930", "city" : "FAIRFAX", "loc" : [ -122.593711, 37.988289 ], "pop" : 8051, "state" : "CA" } +{ "_id" : "94931", "city" : "COTATI", "loc" : [ -122.704831, 38.325918 ], "pop" : 6849, "state" : "CA" } +{ "_id" : "94933", "city" : "FOREST KNOLLS", "loc" : [ -122.69074, 38.012178 ], "pop" : 732, "state" : "CA" } +{ "_id" : "94937", "city" : "INVERNESS", "loc" : [ -122.856774, 38.083514 ], "pop" : 1716, "state" : "CA" } +{ "_id" : "94938", "city" : "LAGUNITAS", "loc" : [ -122.701576, 38.013929 ], "pop" : 276, "state" : "CA" } +{ "_id" : "94939", "city" : "LARKSPUR", "loc" : [ -122.536202, 37.936743 ], "pop" : 5884, "state" : "CA" } +{ "_id" : "94940", "city" : "MARSHALL", "loc" : [ -122.890011, 38.176221 ], "pop" : 55, "state" : "CA" } +{ "_id" : "94941", "city" : "MILL VALLEY", "loc" : [ -122.533885, 37.895757 ], "pop" : 27746, "state" : "CA" } +{ "_id" : "94945", "city" : "NOVATO", "loc" : [ -122.571416, 38.1163 ], "pop" : 15535, "state" : "CA" } +{ "_id" : "94946", "city" : "NICASIO", "loc" : [ -122.696402, 38.054622 ], "pop" : 665, "state" : "CA" } +{ "_id" : "94947", "city" : "NOVATO", "loc" : [ -122.583691, 38.097258 ], "pop" : 22759, "state" : "CA" } +{ "_id" : "94949", "city" : "NOVATO", "loc" : [ -122.540408, 38.061837 ], "pop" : 16219, "state" : "CA" } +{ "_id" : "94951", "city" : "PENNGROVE", "loc" : [ -122.671772, 38.315948 ], "pop" : 3886, "state" : "CA" } +{ "_id" : "94952", "city" : "PETALUMA", "loc" : [ -122.677727, 38.240349 ], "pop" : 29724, "state" : "CA" } +{ "_id" : "94954", "city" : "PETALUMA", "loc" : [ -122.615536, 38.250739 ], "pop" : 27667, "state" : "CA" } +{ "_id" : "94956", "city" : "POINT REYES STAT", "loc" : [ -122.81621, 38.064794 ], "pop" : 951, "state" : "CA" } +{ "_id" : "94960", "city" : "SAN ANSELMO", "loc" : [ -122.571062, 37.984579 ], "pop" : 15178, "state" : "CA" } +{ "_id" : "94963", "city" : "SAN GERONIMO", "loc" : [ -122.67784, 38.017155 ], "pop" : 802, "state" : "CA" } +{ "_id" : "94965", "city" : "SAUSALITO", "loc" : [ -122.494555, 37.860147 ], "pop" : 10032, "state" : "CA" } +{ "_id" : "94970", "city" : "STINSON BEACH", "loc" : [ -122.639305, 37.901992 ], "pop" : 630, "state" : "CA" } +{ "_id" : "94972", "city" : "VALLEY FORD", "loc" : [ -122.924457, 38.315729 ], "pop" : 114, "state" : "CA" } +{ "_id" : "94973", "city" : "WOODACRE", "loc" : [ -122.638247, 38.006933 ], "pop" : 1524, "state" : "CA" } +{ "_id" : "95002", "city" : "ALVISO", "loc" : [ -121.968597, 37.427659 ], "pop" : 2179, "state" : "CA" } +{ "_id" : "95003", "city" : "APTOS", "loc" : [ -121.891979, 36.978477 ], "pop" : 23964, "state" : "CA" } +{ "_id" : "95004", "city" : "AROMAS", "loc" : [ -121.639781, 36.878522 ], "pop" : 2713, "state" : "CA" } +{ "_id" : "95005", "city" : "BEN LOMOND", "loc" : [ -122.083869, 37.086183 ], "pop" : 7702, "state" : "CA" } +{ "_id" : "95006", "city" : "BOULDER CREEK", "loc" : [ -122.133053, 37.149934 ], "pop" : 9434, "state" : "CA" } +{ "_id" : "95008", "city" : "CAMPBELL", "loc" : [ -121.95539, 37.280007 ], "pop" : 41821, "state" : "CA" } +{ "_id" : "95010", "city" : "CAPITOLA", "loc" : [ -121.952145, 36.977359 ], "pop" : 9337, "state" : "CA" } +{ "_id" : "95012", "city" : "CASTROVILLE", "loc" : [ -121.747368, 36.77142 ], "pop" : 7168, "state" : "CA" } +{ "_id" : "95013", "city" : "COYOTE", "loc" : [ -121.746021, 37.216721 ], "pop" : 316, "state" : "CA" } +{ "_id" : "95014", "city" : "MONTE VISTA", "loc" : [ -122.038604, 37.317363 ], "pop" : 47598, "state" : "CA" } +{ "_id" : "95017", "city" : "DAVENPORT", "loc" : [ -122.225735, 37.06306 ], "pop" : 42, "state" : "CA" } +{ "_id" : "95018", "city" : "FELTON", "loc" : [ -122.062162, 37.063124 ], "pop" : 8194, "state" : "CA" } +{ "_id" : "95019", "city" : "FREEDOM", "loc" : [ -121.776761, 36.936483 ], "pop" : 5075, "state" : "CA" } +{ "_id" : "95020", "city" : "GILROY", "loc" : [ -121.57825, 37.016005 ], "pop" : 39878, "state" : "CA" } +{ "_id" : "95023", "city" : "HOLLISTER", "loc" : [ -121.387101, 36.848404 ], "pop" : 31243, "state" : "CA" } +{ "_id" : "95030", "city" : "MONTE SERENO", "loc" : [ -121.978684, 37.211677 ], "pop" : 25881, "state" : "CA" } +{ "_id" : "95032", "city" : "LOS GATOS", "loc" : [ -121.950088, 37.231571 ], "pop" : 18189, "state" : "CA" } +{ "_id" : "95035", "city" : "MILPITAS", "loc" : [ -121.892885, 37.436491 ], "pop" : 50907, "state" : "CA" } +{ "_id" : "95037", "city" : "MORGAN HILL", "loc" : [ -121.64636, 37.129171 ], "pop" : 31309, "state" : "CA" } +{ "_id" : "95043", "city" : "PAICINES", "loc" : [ -121.032853, 36.49478 ], "pop" : 636, "state" : "CA" } +{ "_id" : "95045", "city" : "SAN JUAN BAUTIST", "loc" : [ -121.532721, 36.849856 ], "pop" : 3657, "state" : "CA" } +{ "_id" : "95046", "city" : "SAN MARTIN", "loc" : [ -121.599901, 37.091118 ], "pop" : 5563, "state" : "CA" } +{ "_id" : "95050", "city" : "SANTA CLARA", "loc" : [ -121.954079, 37.34732 ], "pop" : 33310, "state" : "CA" } +{ "_id" : "95051", "city" : "SANTA CLARA", "loc" : [ -121.983848, 37.346992 ], "pop" : 49570, "state" : "CA" } +{ "_id" : "95054", "city" : "SANTA CLARA", "loc" : [ -121.95394, 37.394673 ], "pop" : 10370, "state" : "CA" } +{ "_id" : "95060", "city" : "SCOTTS VALLEY", "loc" : [ -122.043612, 36.982946 ], "pop" : 40334, "state" : "CA" } +{ "_id" : "95062", "city" : "SANTA CRUZ", "loc" : [ -121.988055, 36.972101 ], "pop" : 34287, "state" : "CA" } +{ "_id" : "95064", "city" : "SANTA CRUZ", "loc" : [ -122.057803, 36.995851 ], "pop" : 4658, "state" : "CA" } +{ "_id" : "95065", "city" : "SANTA CRUZ", "loc" : [ -121.982557, 37.003319 ], "pop" : 8130, "state" : "CA" } +{ "_id" : "95066", "city" : "SCOTTS VALLEY", "loc" : [ -122.014961, 37.057841 ], "pop" : 10636, "state" : "CA" } +{ "_id" : "95070", "city" : "SARATOGA", "loc" : [ -122.018238, 37.272871 ], "pop" : 28909, "state" : "CA" } +{ "_id" : "95073", "city" : "SOQUEL", "loc" : [ -121.950255, 37.003525 ], "pop" : 8143, "state" : "CA" } +{ "_id" : "95076", "city" : "LA SELVA BEACH", "loc" : [ -121.763437, 36.920515 ], "pop" : 68295, "state" : "CA" } +{ "_id" : "95110", "city" : "SAN JOSE", "loc" : [ -121.890299, 37.32966 ], "pop" : 17437, "state" : "CA" } +{ "_id" : "95111", "city" : "SAN JOSE", "loc" : [ -121.824038, 37.282276 ], "pop" : 48286, "state" : "CA" } +{ "_id" : "95112", "city" : "SAN JOSE", "loc" : [ -121.880414, 37.341388 ], "pop" : 46470, "state" : "CA" } +{ "_id" : "95113", "city" : "SAN JOSE", "loc" : [ -121.887227, 37.335188 ], "pop" : 1265, "state" : "CA" } +{ "_id" : "95116", "city" : "SAN JOSE", "loc" : [ -121.850221, 37.351342 ], "pop" : 46754, "state" : "CA" } +{ "_id" : "95117", "city" : "SAN JOSE", "loc" : [ -121.962126, 37.308896 ], "pop" : 27414, "state" : "CA" } +{ "_id" : "95118", "city" : "SAN JOSE", "loc" : [ -121.889845, 37.256162 ], "pop" : 30591, "state" : "CA" } +{ "_id" : "95119", "city" : "SAN JOSE", "loc" : [ -121.790067, 37.230135 ], "pop" : 9823, "state" : "CA" } +{ "_id" : "95120", "city" : "SAN JOSE", "loc" : [ -121.861547, 37.217538 ], "pop" : 34577, "state" : "CA" } +{ "_id" : "95121", "city" : "SAN JOSE", "loc" : [ -121.811939, 37.30593 ], "pop" : 32572, "state" : "CA" } +{ "_id" : "95122", "city" : "SAN JOSE", "loc" : [ -121.833949, 37.329313 ], "pop" : 52543, "state" : "CA" } +{ "_id" : "95123", "city" : "SAN JOSE", "loc" : [ -121.830502, 37.244594 ], "pop" : 55146, "state" : "CA" } +{ "_id" : "95124", "city" : "SAN JOSE", "loc" : [ -121.920831, 37.256844 ], "pop" : 44595, "state" : "CA" } +{ "_id" : "95125", "city" : "SAN JOSE", "loc" : [ -121.895476, 37.296187 ], "pop" : 42573, "state" : "CA" } +{ "_id" : "95126", "city" : "SAN JOSE", "loc" : [ -121.917398, 37.322482 ], "pop" : 24778, "state" : "CA" } +{ "_id" : "95127", "city" : "SAN JOSE", "loc" : [ -121.819516, 37.3664 ], "pop" : 50371, "state" : "CA" } +{ "_id" : "95128", "city" : "SAN JOSE", "loc" : [ -121.934364, 37.314657 ], "pop" : 28275, "state" : "CA" } +{ "_id" : "95129", "city" : "SAN JOSE", "loc" : [ -122.000494, 37.306537 ], "pop" : 33953, "state" : "CA" } +{ "_id" : "95130", "city" : "SAN JOSE", "loc" : [ -121.979182, 37.288628 ], "pop" : 13765, "state" : "CA" } +{ "_id" : "95131", "city" : "SAN JOSE", "loc" : [ -121.879977, 37.386368 ], "pop" : 18425, "state" : "CA" } +{ "_id" : "95132", "city" : "SAN JOSE", "loc" : [ -121.860336, 37.40408 ], "pop" : 37995, "state" : "CA" } +{ "_id" : "95133", "city" : "SAN JOSE", "loc" : [ -121.855959, 37.372875 ], "pop" : 24136, "state" : "CA" } +{ "_id" : "95134", "city" : "SAN JOSE", "loc" : [ -121.943399, 37.413999 ], "pop" : 4324, "state" : "CA" } +{ "_id" : "95135", "city" : "SAN JOSE", "loc" : [ -121.757228, 37.297539 ], "pop" : 9104, "state" : "CA" } +{ "_id" : "95136", "city" : "SAN JOSE", "loc" : [ -121.847625, 37.268423 ], "pop" : 31200, "state" : "CA" } +{ "_id" : "95138", "city" : "SAN JOSE", "loc" : [ -121.778641, 37.246259 ], "pop" : 5956, "state" : "CA" } +{ "_id" : "95139", "city" : "SAN JOSE", "loc" : [ -121.766867, 37.225162 ], "pop" : 6912, "state" : "CA" } +{ "_id" : "95140", "city" : "MOUNT HAMILTON", "loc" : [ -121.639948, 37.316087 ], "pop" : 37, "state" : "CA" } +{ "_id" : "95141", "city" : "SAN JOSE", "loc" : [ -121.755808, 37.169912 ], "pop" : 0, "state" : "CA" } +{ "_id" : "95148", "city" : "SAN JOSE", "loc" : [ -121.792111, 37.329765 ], "pop" : 37413, "state" : "CA" } +{ "_id" : "95202", "city" : "STOCKTON", "loc" : [ -121.287087, 37.960632 ], "pop" : 7753, "state" : "CA" } +{ "_id" : "95203", "city" : "STOCKTON", "loc" : [ -121.307688, 37.956515 ], "pop" : 17847, "state" : "CA" } +{ "_id" : "95204", "city" : "STOCKTON", "loc" : [ -121.315364, 37.974302 ], "pop" : 28860, "state" : "CA" } +{ "_id" : "95205", "city" : "STOCKTON", "loc" : [ -121.259241, 37.960986 ], "pop" : 31314, "state" : "CA" } +{ "_id" : "95206", "city" : "STOCKTON", "loc" : [ -121.287169, 37.931643 ], "pop" : 33154, "state" : "CA" } +{ "_id" : "95207", "city" : "STOCKTON", "loc" : [ -121.32056, 38.002025 ], "pop" : 50167, "state" : "CA" } +{ "_id" : "95209", "city" : "STOCKTON", "loc" : [ -121.343292, 38.033105 ], "pop" : 26289, "state" : "CA" } +{ "_id" : "95210", "city" : "STOCKTON", "loc" : [ -121.297229, 38.024997 ], "pop" : 33763, "state" : "CA" } +{ "_id" : "95211", "city" : "UNIV OF THE PACI", "loc" : [ -121.310336, 37.980364 ], "pop" : 1722, "state" : "CA" } +{ "_id" : "95212", "city" : "STOCKTON", "loc" : [ -121.246018, 38.034428 ], "pop" : 5584, "state" : "CA" } +{ "_id" : "95215", "city" : "STOCKTON", "loc" : [ -121.215295, 37.968545 ], "pop" : 18533, "state" : "CA" } +{ "_id" : "95219", "city" : "STOCKTON", "loc" : [ -121.363712, 38.010233 ], "pop" : 13994, "state" : "CA" } +{ "_id" : "95220", "city" : "ACAMPO", "loc" : [ -121.218576, 38.200413 ], "pop" : 7734, "state" : "CA" } +{ "_id" : "95222", "city" : "ANGELS CAMP", "loc" : [ -120.55437, 38.064011 ], "pop" : 3530, "state" : "CA" } +{ "_id" : "95223", "city" : "BEAR VALLEY", "loc" : [ -120.342231, 38.24175 ], "pop" : 6205, "state" : "CA" } +{ "_id" : "95228", "city" : "COPPEROPOLIS", "loc" : [ -120.638374, 37.937246 ], "pop" : 1336, "state" : "CA" } +{ "_id" : "95230", "city" : "FARMINGTON", "loc" : [ -120.852343, 37.944771 ], "pop" : 141, "state" : "CA" } +{ "_id" : "95231", "city" : "FRENCH CAMP", "loc" : [ -121.282704, 37.877982 ], "pop" : 3673, "state" : "CA" } +{ "_id" : "95232", "city" : "GLENCOE", "loc" : [ -120.594546, 38.351557 ], "pop" : 189, "state" : "CA" } +{ "_id" : "95236", "city" : "LINDEN", "loc" : [ -121.074442, 38.021869 ], "pop" : 3656, "state" : "CA" } +{ "_id" : "95237", "city" : "LOCKEFORD", "loc" : [ -121.135611, 38.162436 ], "pop" : 2847, "state" : "CA" } +{ "_id" : "95240", "city" : "LODI", "loc" : [ -121.263034, 38.123579 ], "pop" : 42726, "state" : "CA" } +{ "_id" : "95242", "city" : "LODI", "loc" : [ -121.311814, 38.132989 ], "pop" : 20669, "state" : "CA" } +{ "_id" : "95245", "city" : "MOKELUMNE HILL", "loc" : [ -120.567705, 38.328918 ], "pop" : 3507, "state" : "CA" } +{ "_id" : "95246", "city" : "MOUNTAIN RANCH", "loc" : [ -120.548137, 38.220363 ], "pop" : 2323, "state" : "CA" } +{ "_id" : "95247", "city" : "MURPHYS", "loc" : [ -120.461772, 38.126896 ], "pop" : 2691, "state" : "CA" } +{ "_id" : "95249", "city" : "SAN ANDREAS", "loc" : [ -120.668703, 38.186732 ], "pop" : 3081, "state" : "CA" } +{ "_id" : "95251", "city" : "VALLECITO", "loc" : [ -120.467879, 38.101472 ], "pop" : 200, "state" : "CA" } +{ "_id" : "95252", "city" : "VALLEY SPRINGS", "loc" : [ -120.859742, 38.154355 ], "pop" : 7592, "state" : "CA" } +{ "_id" : "95255", "city" : "WEST POINT", "loc" : [ -120.515862, 38.406201 ], "pop" : 1513, "state" : "CA" } +{ "_id" : "95257", "city" : "WILSEYVILLE", "loc" : [ -120.442356, 38.384566 ], "pop" : 32, "state" : "CA" } +{ "_id" : "95258", "city" : "WOODBRIDGE", "loc" : [ -121.308632, 38.155124 ], "pop" : 2241, "state" : "CA" } +{ "_id" : "95301", "city" : "ATWATER", "loc" : [ -120.600837, 37.353154 ], "pop" : 24928, "state" : "CA" } +{ "_id" : "95303", "city" : "BALLICO", "loc" : [ -120.700152, 37.452455 ], "pop" : 1296, "state" : "CA" } +{ "_id" : "95306", "city" : "CATHEYS VALLEY", "loc" : [ -120.069017, 37.441409 ], "pop" : 1033, "state" : "CA" } +{ "_id" : "95307", "city" : "CERES", "loc" : [ -120.949936, 37.588097 ], "pop" : 29037, "state" : "CA" } +{ "_id" : "95309", "city" : "CHINESE CAMP", "loc" : [ -120.406673, 37.856829 ], "pop" : 15, "state" : "CA" } +{ "_id" : "95310", "city" : "COLUMBIA", "loc" : [ -120.405552, 38.03975 ], "pop" : 1512, "state" : "CA" } +{ "_id" : "95311", "city" : "COULTERVILLE", "loc" : [ -119.985813, 37.738642 ], "pop" : 2384, "state" : "CA" } +{ "_id" : "95313", "city" : "CROWS LANDING", "loc" : [ -121.019893, 37.438956 ], "pop" : 1896, "state" : "CA" } +{ "_id" : "95315", "city" : "DELHI", "loc" : [ -120.775489, 37.428629 ], "pop" : 6151, "state" : "CA" } +{ "_id" : "95316", "city" : "DENAIR", "loc" : [ -120.796474, 37.538419 ], "pop" : 5878, "state" : "CA" } +{ "_id" : "95317", "city" : "EL NIDO", "loc" : [ -120.483235, 37.13452 ], "pop" : 1024, "state" : "CA" } +{ "_id" : "95320", "city" : "ESCALON", "loc" : [ -120.990044, 37.804428 ], "pop" : 9405, "state" : "CA" } +{ "_id" : "95321", "city" : "GROVELAND", "loc" : [ -120.191809, 37.840899 ], "pop" : 3616, "state" : "CA" } +{ "_id" : "95322", "city" : "GUSTINE", "loc" : [ -121.003965, 37.242456 ], "pop" : 6083, "state" : "CA" } +{ "_id" : "95323", "city" : "HICKMAN", "loc" : [ -120.71722, 37.619989 ], "pop" : 1405, "state" : "CA" } +{ "_id" : "95324", "city" : "HILMAR", "loc" : [ -120.856144, 37.408377 ], "pop" : 6676, "state" : "CA" } +{ "_id" : "95325", "city" : "HORNITOS", "loc" : [ -120.226443, 37.492226 ], "pop" : 49, "state" : "CA" } +{ "_id" : "95326", "city" : "HUGHSON", "loc" : [ -120.865281, 37.594364 ], "pop" : 6383, "state" : "CA" } +{ "_id" : "95327", "city" : "JAMESTOWN", "loc" : [ -120.494567, 37.906544 ], "pop" : 8359, "state" : "CA" } +{ "_id" : "95329", "city" : "LA GRANGE", "loc" : [ -120.358131, 37.678915 ], "pop" : 1305, "state" : "CA" } +{ "_id" : "95330", "city" : "LATHROP", "loc" : [ -121.282652, 37.820897 ], "pop" : 8426, "state" : "CA" } +{ "_id" : "95333", "city" : "LE GRAND", "loc" : [ -120.251737, 37.234175 ], "pop" : 1810, "state" : "CA" } +{ "_id" : "95334", "city" : "LIVINGSTON", "loc" : [ -120.716156, 37.376168 ], "pop" : 10994, "state" : "CA" } +{ "_id" : "95335", "city" : "COLD SPRINGS", "loc" : [ -120.001159, 38.20336 ], "pop" : 201, "state" : "CA" } +{ "_id" : "95336", "city" : "MANTECA", "loc" : [ -121.21856, 37.80875 ], "pop" : 51728, "state" : "CA" } +{ "_id" : "95338", "city" : "MARIPOSA", "loc" : [ -119.892496, 37.503918 ], "pop" : 9323, "state" : "CA" } +{ "_id" : "95340", "city" : "RED TOP", "loc" : [ -120.461668, 37.300724 ], "pop" : 59918, "state" : "CA" } +{ "_id" : "95345", "city" : "MIDPINES", "loc" : [ -119.946548, 37.571009 ], "pop" : 388, "state" : "CA" } +{ "_id" : "95346", "city" : "MI WUK VILLAGE", "loc" : [ -120.131762, 38.105576 ], "pop" : 701, "state" : "CA" } +{ "_id" : "95348", "city" : "MERCED", "loc" : [ -120.500897, 37.326964 ], "pop" : 19719, "state" : "CA" } +{ "_id" : "95350", "city" : "MODESTO", "loc" : [ -121.011303, 37.674649 ], "pop" : 50618, "state" : "CA" } +{ "_id" : "95351", "city" : "MODESTO", "loc" : [ -121.006033, 37.625022 ], "pop" : 69275, "state" : "CA" } +{ "_id" : "95354", "city" : "MODESTO", "loc" : [ -120.968323, 37.644526 ], "pop" : 26630, "state" : "CA" } +{ "_id" : "95355", "city" : "MODESTO", "loc" : [ -120.954658, 37.673515 ], "pop" : 43734, "state" : "CA" } +{ "_id" : "95356", "city" : "MODESTO", "loc" : [ -121.027051, 37.699431 ], "pop" : 26202, "state" : "CA" } +{ "_id" : "95360", "city" : "NEWMAN", "loc" : [ -121.025943, 37.317591 ], "pop" : 5313, "state" : "CA" } +{ "_id" : "95361", "city" : "KNIGHTS FERRY", "loc" : [ -120.849474, 37.775323 ], "pop" : 20919, "state" : "CA" } +{ "_id" : "95363", "city" : "PATTERSON", "loc" : [ -121.140732, 37.490592 ], "pop" : 13437, "state" : "CA" } +{ "_id" : "95364", "city" : "PINECREST", "loc" : [ -119.865195, 38.341062 ], "pop" : 13, "state" : "CA" } +{ "_id" : "95366", "city" : "RIPON", "loc" : [ -121.122909, 37.753286 ], "pop" : 10879, "state" : "CA" } +{ "_id" : "95367", "city" : "RIVERBANK", "loc" : [ -120.943019, 37.732809 ], "pop" : 9732, "state" : "CA" } +{ "_id" : "95368", "city" : "SALIDA", "loc" : [ -121.090484, 37.70713 ], "pop" : 3255, "state" : "CA" } +{ "_id" : "95369", "city" : "SNELLING", "loc" : [ -120.481615, 37.514359 ], "pop" : 1335, "state" : "CA" } +{ "_id" : "95370", "city" : "SONORA", "loc" : [ -120.338498, 37.995692 ], "pop" : 23398, "state" : "CA" } +{ "_id" : "95372", "city" : "SOULSBYVILLE", "loc" : [ -120.259892, 37.992794 ], "pop" : 1566, "state" : "CA" } +{ "_id" : "95374", "city" : "STEVINSON", "loc" : [ -120.869856, 37.32575 ], "pop" : 1564, "state" : "CA" } +{ "_id" : "95376", "city" : "TRACY", "loc" : [ -121.419723, 37.742116 ], "pop" : 47291, "state" : "CA" } +{ "_id" : "95379", "city" : "TUOLUMNE", "loc" : [ -120.237496, 37.971339 ], "pop" : 3402, "state" : "CA" } +{ "_id" : "95380", "city" : "TURLOCK", "loc" : [ -120.850511, 37.503605 ], "pop" : 50025, "state" : "CA" } +{ "_id" : "95383", "city" : "TWAIN HARTE", "loc" : [ -120.2155, 38.044722 ], "pop" : 5133, "state" : "CA" } +{ "_id" : "95386", "city" : "WATERFORD", "loc" : [ -120.753862, 37.650988 ], "pop" : 6505, "state" : "CA" } +{ "_id" : "95388", "city" : "WINTON", "loc" : [ -120.6132, 37.39233 ], "pop" : 10362, "state" : "CA" } +{ "_id" : "95401", "city" : "SANTA ROSA", "loc" : [ -122.751722, 38.443123 ], "pop" : 30549, "state" : "CA" } +{ "_id" : "95403", "city" : "SANTA ROSA", "loc" : [ -122.748528, 38.477273 ], "pop" : 30874, "state" : "CA" } +{ "_id" : "95404", "city" : "SANTA ROSA", "loc" : [ -122.689524, 38.449556 ], "pop" : 31216, "state" : "CA" } +{ "_id" : "95405", "city" : "SANTA ROSA", "loc" : [ -122.66988, 38.438279 ], "pop" : 20776, "state" : "CA" } +{ "_id" : "95407", "city" : "SANTA ROSA", "loc" : [ -122.727896, 38.410462 ], "pop" : 22086, "state" : "CA" } +{ "_id" : "95409", "city" : "SANTA ROSA", "loc" : [ -122.642125, 38.461242 ], "pop" : 22897, "state" : "CA" } +{ "_id" : "95410", "city" : "ALBION", "loc" : [ -123.721366, 39.215934 ], "pop" : 869, "state" : "CA" } +{ "_id" : "95412", "city" : "ANNAPOLIS", "loc" : [ -123.314214, 38.714485 ], "pop" : 24, "state" : "CA" } +{ "_id" : "95415", "city" : "BOONVILLE", "loc" : [ -123.401954, 39.035007 ], "pop" : 1744, "state" : "CA" } +{ "_id" : "95417", "city" : "BRANSCOMB", "loc" : [ -123.554982, 39.700531 ], "pop" : 708, "state" : "CA" } +{ "_id" : "95420", "city" : "CASPAR", "loc" : [ -123.798489, 39.365102 ], "pop" : 349, "state" : "CA" } +{ "_id" : "95421", "city" : "CAZADERO", "loc" : [ -123.182896, 38.566335 ], "pop" : 2367, "state" : "CA" } +{ "_id" : "95422", "city" : "CLEARLAKE", "loc" : [ -122.636089, 38.957138 ], "pop" : 12157, "state" : "CA" } +{ "_id" : "95423", "city" : "CLEARLAKE OAKS", "loc" : [ -122.66873, 39.034838 ], "pop" : 3400, "state" : "CA" } +{ "_id" : "95425", "city" : "CLOVERDALE", "loc" : [ -123.011725, 38.799396 ], "pop" : 7695, "state" : "CA" } +{ "_id" : "95427", "city" : "COMPTCHE", "loc" : [ -123.585652, 39.249919 ], "pop" : 538, "state" : "CA" } +{ "_id" : "95428", "city" : "COVELO", "loc" : [ -123.215015, 39.801864 ], "pop" : 2182, "state" : "CA" } +{ "_id" : "95429", "city" : "DOS RIOS", "loc" : [ -123.298294, 39.709298 ], "pop" : 14, "state" : "CA" } +{ "_id" : "95432", "city" : "ELK", "loc" : [ -123.723961, 39.160402 ], "pop" : 199, "state" : "CA" } +{ "_id" : "95436", "city" : "FORESTVILLE", "loc" : [ -122.896683, 38.489442 ], "pop" : 7252, "state" : "CA" } +{ "_id" : "95437", "city" : "FORT BRAGG", "loc" : [ -123.78835, 39.437452 ], "pop" : 13535, "state" : "CA" } +{ "_id" : "95439", "city" : "FULTON", "loc" : [ -122.77608, 38.494732 ], "pop" : 569, "state" : "CA" } +{ "_id" : "95441", "city" : "GEYSERVILLE", "loc" : [ -122.888921, 38.700398 ], "pop" : 2716, "state" : "CA" } +{ "_id" : "95442", "city" : "GLEN ELLEN", "loc" : [ -122.521002, 38.362538 ], "pop" : 5055, "state" : "CA" } +{ "_id" : "95443", "city" : "GLENHAVEN", "loc" : [ -122.522035, 38.99008 ], "pop" : 94, "state" : "CA" } +{ "_id" : "95444", "city" : "GRATON", "loc" : [ -122.866766, 38.434971 ], "pop" : 259, "state" : "CA" } +{ "_id" : "95445", "city" : "GUALALA", "loc" : [ -123.553975, 38.803619 ], "pop" : 1806, "state" : "CA" } +{ "_id" : "95446", "city" : "GUERNEVILLE", "loc" : [ -122.994416, 38.509573 ], "pop" : 5060, "state" : "CA" } +{ "_id" : "95448", "city" : "HEALDSBURG", "loc" : [ -122.856529, 38.61553 ], "pop" : 16884, "state" : "CA" } +{ "_id" : "95449", "city" : "HOPLAND", "loc" : [ -123.116956, 38.972056 ], "pop" : 1648, "state" : "CA" } +{ "_id" : "95450", "city" : "JENNER", "loc" : [ -123.135379, 38.474093 ], "pop" : 156, "state" : "CA" } +{ "_id" : "95451", "city" : "KELSEYVILLE", "loc" : [ -122.781707, 38.946164 ], "pop" : 10064, "state" : "CA" } +{ "_id" : "95452", "city" : "KENWOOD", "loc" : [ -122.554679, 38.416794 ], "pop" : 1411, "state" : "CA" } +{ "_id" : "95453", "city" : "LAKEPORT", "loc" : [ -122.915082, 39.055147 ], "pop" : 10351, "state" : "CA" } +{ "_id" : "95454", "city" : "LAYTONVILLE", "loc" : [ -123.486862, 39.667811 ], "pop" : 1815, "state" : "CA" } +{ "_id" : "95456", "city" : "LITTLERIVER", "loc" : [ -123.753089, 39.271042 ], "pop" : 1119, "state" : "CA" } +{ "_id" : "95457", "city" : "LOWER LAKE", "loc" : [ -122.575426, 38.860682 ], "pop" : 4880, "state" : "CA" } +{ "_id" : "95458", "city" : "LUCERNE", "loc" : [ -122.785125, 39.083393 ], "pop" : 2330, "state" : "CA" } +{ "_id" : "95459", "city" : "MANCHESTER", "loc" : [ -123.670962, 38.992088 ], "pop" : 453, "state" : "CA" } +{ "_id" : "95460", "city" : "MENDOCINO", "loc" : [ -123.78846, 39.323212 ], "pop" : 1876, "state" : "CA" } +{ "_id" : "95461", "city" : "MIDDLETOWN", "loc" : [ -122.64352, 38.782504 ], "pop" : 2863, "state" : "CA" } +{ "_id" : "95462", "city" : "RUSSIAN RIVER MD", "loc" : [ -123.00447, 38.462668 ], "pop" : 1999, "state" : "CA" } +{ "_id" : "95464", "city" : "NICE", "loc" : [ -122.842409, 39.122341 ], "pop" : 2374, "state" : "CA" } +{ "_id" : "95465", "city" : "OCCIDENTAL", "loc" : [ -122.988194, 38.396911 ], "pop" : 2094, "state" : "CA" } +{ "_id" : "95466", "city" : "PHILO", "loc" : [ -123.538218, 39.120005 ], "pop" : 498, "state" : "CA" } +{ "_id" : "95468", "city" : "POINT ARENA", "loc" : [ -123.660756, 38.915264 ], "pop" : 1129, "state" : "CA" } +{ "_id" : "95469", "city" : "POTTER VALLEY", "loc" : [ -123.104181, 39.329639 ], "pop" : 1970, "state" : "CA" } +{ "_id" : "95470", "city" : "REDWOOD VALLEY", "loc" : [ -123.213289, 39.269446 ], "pop" : 5328, "state" : "CA" } +{ "_id" : "95472", "city" : "FREESTONE", "loc" : [ -122.838503, 38.391543 ], "pop" : 27943, "state" : "CA" } +{ "_id" : "95476", "city" : "SONOMA", "loc" : [ -122.472843, 38.295659 ], "pop" : 30443, "state" : "CA" } +{ "_id" : "95482", "city" : "UKIAH", "loc" : [ -123.200692, 39.151917 ], "pop" : 28165, "state" : "CA" } +{ "_id" : "95485", "city" : "UPPER LAKE", "loc" : [ -122.896114, 39.160829 ], "pop" : 1771, "state" : "CA" } +{ "_id" : "95488", "city" : "WESTPORT", "loc" : [ -123.76426, 39.644059 ], "pop" : 369, "state" : "CA" } +{ "_id" : "95490", "city" : "WILLITS", "loc" : [ -123.350271, 39.411426 ], "pop" : 12864, "state" : "CA" } +{ "_id" : "95492", "city" : "WINDSOR", "loc" : [ -122.804375, 38.543182 ], "pop" : 13717, "state" : "CA" } +{ "_id" : "95493", "city" : "WITTER SPRINGS", "loc" : [ -122.97105, 39.182118 ], "pop" : 300, "state" : "CA" } +{ "_id" : "95494", "city" : "YORKVILLE", "loc" : [ -123.233867, 38.908945 ], "pop" : 173, "state" : "CA" } +{ "_id" : "95497", "city" : "THE SEA RANCH", "loc" : [ -123.467486, 38.725627 ], "pop" : 576, "state" : "CA" } +{ "_id" : "95501", "city" : "EUREKA", "loc" : [ -124.155892, 40.776237 ], "pop" : 45720, "state" : "CA" } +{ "_id" : "95521", "city" : "MC KINLEYVILLE", "loc" : [ -124.081069, 40.904901 ], "pop" : 32283, "state" : "CA" } +{ "_id" : "95524", "city" : "BAYSIDE", "loc" : [ -124.027305, 40.822381 ], "pop" : 1744, "state" : "CA" } +{ "_id" : "95525", "city" : "BLUE LAKE", "loc" : [ -123.896696, 40.928701 ], "pop" : 328, "state" : "CA" } +{ "_id" : "95526", "city" : "RUTH", "loc" : [ -123.549351, 40.468566 ], "pop" : 1076, "state" : "CA" } +{ "_id" : "95527", "city" : "BURNT RANCH", "loc" : [ -123.461248, 40.772238 ], "pop" : 478, "state" : "CA" } +{ "_id" : "95528", "city" : "CARLOTTA", "loc" : [ -123.974287, 40.507027 ], "pop" : 1054, "state" : "CA" } +{ "_id" : "95531", "city" : "CRESCENT CITY", "loc" : [ -124.178448, 41.785402 ], "pop" : 19400, "state" : "CA" } +{ "_id" : "95536", "city" : "FERNDALE", "loc" : [ -124.252268, 40.574488 ], "pop" : 2942, "state" : "CA" } +{ "_id" : "95540", "city" : "FORTUNA", "loc" : [ -124.140654, 40.584931 ], "pop" : 10727, "state" : "CA" } +{ "_id" : "95543", "city" : "GASQUET", "loc" : [ -123.912467, 41.862768 ], "pop" : 658, "state" : "CA" } +{ "_id" : "95546", "city" : "HOOPA", "loc" : [ -123.692754, 41.105937 ], "pop" : 2702, "state" : "CA" } +{ "_id" : "95547", "city" : "HYDESVILLE", "loc" : [ -124.084489, 40.549576 ], "pop" : 919, "state" : "CA" } +{ "_id" : "95548", "city" : "KLAMATH", "loc" : [ -124.033907, 41.542075 ], "pop" : 1390, "state" : "CA" } +{ "_id" : "95549", "city" : "KNEELAND", "loc" : [ -123.946421, 40.71262 ], "pop" : 265, "state" : "CA" } +{ "_id" : "95550", "city" : "KORBEL", "loc" : [ -123.859413, 40.824369 ], "pop" : 187, "state" : "CA" } +{ "_id" : "95551", "city" : "LOLETA", "loc" : [ -124.228826, 40.6531 ], "pop" : 1244, "state" : "CA" } +{ "_id" : "95552", "city" : "MAD RIVER", "loc" : [ -123.413994, 40.352352 ], "pop" : 6, "state" : "CA" } +{ "_id" : "95554", "city" : "MYERS FLAT", "loc" : [ -123.822713, 40.194758 ], "pop" : 3791, "state" : "CA" } +{ "_id" : "95555", "city" : "ORICK", "loc" : [ -124.050319, 41.30724 ], "pop" : 314, "state" : "CA" } +{ "_id" : "95556", "city" : "ORLEANS", "loc" : [ -123.529564, 41.318092 ], "pop" : 619, "state" : "CA" } +{ "_id" : "95558", "city" : "PETROLIA", "loc" : [ -124.251236, 40.300558 ], "pop" : 347, "state" : "CA" } +{ "_id" : "95560", "city" : "REDWAY", "loc" : [ -123.844194, 40.110081 ], "pop" : 148, "state" : "CA" } +{ "_id" : "95562", "city" : "RIO DELL", "loc" : [ -124.104386, 40.495147 ], "pop" : 4066, "state" : "CA" } +{ "_id" : "95563", "city" : "SALYER", "loc" : [ -123.547833, 40.89095 ], "pop" : 903, "state" : "CA" } +{ "_id" : "95564", "city" : "SAMOA", "loc" : [ -124.193571, 40.803712 ], "pop" : 527, "state" : "CA" } +{ "_id" : "95565", "city" : "SCOTIA", "loc" : [ -124.039074, 40.454665 ], "pop" : 321, "state" : "CA" } +{ "_id" : "95567", "city" : "SMITH RIVER", "loc" : [ -124.166115, 41.936218 ], "pop" : 2012, "state" : "CA" } +{ "_id" : "95568", "city" : "SOMES BAR", "loc" : [ -123.475928, 41.43304 ], "pop" : 195, "state" : "CA" } +{ "_id" : "95569", "city" : "REDCREST", "loc" : [ -123.94205, 40.406458 ], "pop" : 208, "state" : "CA" } +{ "_id" : "95570", "city" : "WESTHAVEN", "loc" : [ -124.101253, 41.087949 ], "pop" : 3143, "state" : "CA" } +{ "_id" : "95573", "city" : "WILLOW CREEK", "loc" : [ -123.631062, 40.938894 ], "pop" : 1503, "state" : "CA" } +{ "_id" : "95603", "city" : "AUBURN", "loc" : [ -121.084347, 38.928311 ], "pop" : 32535, "state" : "CA" } +{ "_id" : "95605", "city" : "BRYTE", "loc" : [ -121.526377, 38.592424 ], "pop" : 11611, "state" : "CA" } +{ "_id" : "95606", "city" : "BROOKS", "loc" : [ -122.133391, 38.739277 ], "pop" : 162, "state" : "CA" } +{ "_id" : "95607", "city" : "CAPAY", "loc" : [ -122.100993, 38.696964 ], "pop" : 175, "state" : "CA" } +{ "_id" : "95608", "city" : "CARMICHAEL", "loc" : [ -121.328683, 38.628393 ], "pop" : 55815, "state" : "CA" } +{ "_id" : "95610", "city" : "CITRUS HEIGHTS", "loc" : [ -121.269211, 38.694571 ], "pop" : 41476, "state" : "CA" } +{ "_id" : "95612", "city" : "CLARKSBURG", "loc" : [ -121.556853, 38.395963 ], "pop" : 1501, "state" : "CA" } +{ "_id" : "95614", "city" : "COOL", "loc" : [ -120.972963, 38.903633 ], "pop" : 2325, "state" : "CA" } +{ "_id" : "95615", "city" : "COURTLAND", "loc" : [ -121.554297, 38.305756 ], "pop" : 958, "state" : "CA" } +{ "_id" : "95616", "city" : "DAVIS", "loc" : [ -121.748495, 38.554817 ], "pop" : 52224, "state" : "CA" } +{ "_id" : "95618", "city" : "EL MACERO", "loc" : [ -121.676722, 38.542151 ], "pop" : 1126, "state" : "CA" } +{ "_id" : "95619", "city" : "DIAMOND SPRINGS", "loc" : [ -120.836071, 38.66302 ], "pop" : 6747, "state" : "CA" } +{ "_id" : "95620", "city" : "LIBERTY FARMS", "loc" : [ -121.815825, 38.458691 ], "pop" : 14536, "state" : "CA" } +{ "_id" : "95621", "city" : "CITRUS HEIGHTS", "loc" : [ -121.307501, 38.695155 ], "pop" : 40540, "state" : "CA" } +{ "_id" : "95624", "city" : "ELK GROVE", "loc" : [ -121.359914, 38.412744 ], "pop" : 23492, "state" : "CA" } +{ "_id" : "95626", "city" : "ELVERTA", "loc" : [ -121.431038, 38.716424 ], "pop" : 6154, "state" : "CA" } +{ "_id" : "95627", "city" : "ESPARTO", "loc" : [ -122.021391, 38.694191 ], "pop" : 2118, "state" : "CA" } +{ "_id" : "95628", "city" : "FAIR OAKS", "loc" : [ -121.261065, 38.655408 ], "pop" : 40502, "state" : "CA" } +{ "_id" : "95629", "city" : "FIDDLETOWN", "loc" : [ -120.715926, 38.53141 ], "pop" : 1147, "state" : "CA" } +{ "_id" : "95630", "city" : "EL DORADO HILLS", "loc" : [ -121.140927, 38.687885 ], "pop" : 38587, "state" : "CA" } +{ "_id" : "95631", "city" : "FORESTHILL", "loc" : [ -120.861127, 39.00229 ], "pop" : 4626, "state" : "CA" } +{ "_id" : "95632", "city" : "GALT", "loc" : [ -121.29383, 38.269846 ], "pop" : 14173, "state" : "CA" } +{ "_id" : "95633", "city" : "GARDEN VALLEY", "loc" : [ -120.856672, 38.866495 ], "pop" : 3628, "state" : "CA" } +{ "_id" : "95634", "city" : "GEORGETOWN", "loc" : [ -120.793388, 38.919892 ], "pop" : 1634, "state" : "CA" } +{ "_id" : "95635", "city" : "GREENWOOD", "loc" : [ -120.916589, 38.936234 ], "pop" : 226, "state" : "CA" } +{ "_id" : "95636", "city" : "GRIZZLY FLATS", "loc" : [ -120.542508, 38.628665 ], "pop" : 237, "state" : "CA" } +{ "_id" : "95637", "city" : "GUINDA", "loc" : [ -122.189659, 38.816568 ], "pop" : 198, "state" : "CA" } +{ "_id" : "95638", "city" : "HERALD", "loc" : [ -121.158898, 38.31282 ], "pop" : 1009, "state" : "CA" } +{ "_id" : "95640", "city" : "IONE", "loc" : [ -120.943265, 38.351882 ], "pop" : 8440, "state" : "CA" } +{ "_id" : "95641", "city" : "ISLETON", "loc" : [ -121.604858, 38.155392 ], "pop" : 2273, "state" : "CA" } +{ "_id" : "95642", "city" : "JACKSON", "loc" : [ -120.754877, 38.357514 ], "pop" : 5335, "state" : "CA" } +{ "_id" : "95643", "city" : "KELSEY", "loc" : [ -120.824056, 38.797636 ], "pop" : 531, "state" : "CA" } +{ "_id" : "95645", "city" : "KNIGHTS LANDING", "loc" : [ -121.720003, 38.822032 ], "pop" : 1907, "state" : "CA" } +{ "_id" : "95648", "city" : "LINCOLN", "loc" : [ -121.295541, 38.904035 ], "pop" : 11935, "state" : "CA" } +{ "_id" : "95650", "city" : "LOOMIS", "loc" : [ -121.169826, 38.80711 ], "pop" : 12973, "state" : "CA" } +{ "_id" : "95651", "city" : "LOTUS", "loc" : [ -120.928864, 38.801712 ], "pop" : 1832, "state" : "CA" } +{ "_id" : "95652", "city" : "MCCLELLAN AFB", "loc" : [ -121.40311, 38.655416 ], "pop" : 541, "state" : "CA" } +{ "_id" : "95653", "city" : "MADISON", "loc" : [ -121.972129, 38.680164 ], "pop" : 523, "state" : "CA" } +{ "_id" : "95655", "city" : "MATHER AFB", "loc" : [ -121.282394, 38.549224 ], "pop" : 4880, "state" : "CA" } +{ "_id" : "95658", "city" : "NEWCASTLE", "loc" : [ -121.142616, 38.872467 ], "pop" : 5998, "state" : "CA" } +{ "_id" : "95659", "city" : "TROWBRIDGE", "loc" : [ -121.553043, 38.882726 ], "pop" : 802, "state" : "CA" } +{ "_id" : "95660", "city" : "NORTH HIGHLANDS", "loc" : [ -121.374913, 38.68855 ], "pop" : 42271, "state" : "CA" } +{ "_id" : "95661", "city" : "ROSEVILLE", "loc" : [ -121.233968, 38.734612 ], "pop" : 29157, "state" : "CA" } +{ "_id" : "95662", "city" : "ORANGEVALE", "loc" : [ -121.222902, 38.682384 ], "pop" : 31361, "state" : "CA" } +{ "_id" : "95663", "city" : "PENRYN", "loc" : [ -121.179149, 38.856654 ], "pop" : 2048, "state" : "CA" } +{ "_id" : "95664", "city" : "PILOT HILL", "loc" : [ -121.029765, 38.826312 ], "pop" : 1152, "state" : "CA" } +{ "_id" : "95665", "city" : "PINE GROVE", "loc" : [ -120.643713, 38.396783 ], "pop" : 3066, "state" : "CA" } +{ "_id" : "95666", "city" : "PIONEER", "loc" : [ -120.531815, 38.460271 ], "pop" : 4797, "state" : "CA" } +{ "_id" : "95667", "city" : "PLACERVILLE", "loc" : [ -120.804564, 38.719479 ], "pop" : 30563, "state" : "CA" } +{ "_id" : "95668", "city" : "PLEASANT GROVE", "loc" : [ -121.507967, 38.787773 ], "pop" : 1034, "state" : "CA" } +{ "_id" : "95669", "city" : "PLYMOUTH", "loc" : [ -120.870258, 38.48811 ], "pop" : 969, "state" : "CA" } +{ "_id" : "95670", "city" : "GOLD RIVER", "loc" : [ -121.289434, 38.601897 ], "pop" : 42461, "state" : "CA" } +{ "_id" : "95672", "city" : "RESCUE", "loc" : [ -120.994526, 38.719353 ], "pop" : 2987, "state" : "CA" } +{ "_id" : "95673", "city" : "RIO LINDA", "loc" : [ -121.445152, 38.689311 ], "pop" : 12756, "state" : "CA" } +{ "_id" : "95674", "city" : "RIO OSO", "loc" : [ -121.505305, 38.960998 ], "pop" : 1102, "state" : "CA" } +{ "_id" : "95677", "city" : "ROCKLIN", "loc" : [ -121.243406, 38.791898 ], "pop" : 19125, "state" : "CA" } +{ "_id" : "95678", "city" : "ROSEVILLE", "loc" : [ -121.302801, 38.750895 ], "pop" : 28285, "state" : "CA" } +{ "_id" : "95679", "city" : "RUMSEY", "loc" : [ -122.253738, 38.8762 ], "pop" : 228, "state" : "CA" } +{ "_id" : "95681", "city" : "SHERIDAN", "loc" : [ -121.362062, 38.99153 ], "pop" : 1169, "state" : "CA" } +{ "_id" : "95682", "city" : "CAMERON PARK", "loc" : [ -120.975925, 38.665616 ], "pop" : 20139, "state" : "CA" } +{ "_id" : "95683", "city" : "RANCHO MURIETA", "loc" : [ -121.094089, 38.507475 ], "pop" : 3035, "state" : "CA" } +{ "_id" : "95684", "city" : "SOMERSET", "loc" : [ -120.666306, 38.607414 ], "pop" : 2892, "state" : "CA" } +{ "_id" : "95685", "city" : "SUTTER CREEK", "loc" : [ -120.785454, 38.418569 ], "pop" : 5677, "state" : "CA" } +{ "_id" : "95687", "city" : "VACAVILLE", "loc" : [ -121.962285, 38.341915 ], "pop" : 50280, "state" : "CA" } +{ "_id" : "95688", "city" : "VACAVILLE", "loc" : [ -121.989912, 38.3812 ], "pop" : 29052, "state" : "CA" } +{ "_id" : "95689", "city" : "VOLCANO", "loc" : [ -120.617761, 38.477319 ], "pop" : 1004, "state" : "CA" } +{ "_id" : "95690", "city" : "WALNUT GROVE", "loc" : [ -121.524849, 38.236362 ], "pop" : 1839, "state" : "CA" } +{ "_id" : "95691", "city" : "WEST SACRAMENTO", "loc" : [ -121.539671, 38.567979 ], "pop" : 17301, "state" : "CA" } +{ "_id" : "95692", "city" : "WHEATLAND", "loc" : [ -121.422126, 39.019197 ], "pop" : 2532, "state" : "CA" } +{ "_id" : "95693", "city" : "WILTON", "loc" : [ -121.225656, 38.412069 ], "pop" : 4082, "state" : "CA" } +{ "_id" : "95694", "city" : "WINTERS", "loc" : [ -121.974544, 38.529462 ], "pop" : 6253, "state" : "CA" } +{ "_id" : "95695", "city" : "WOODLAND", "loc" : [ -121.77932, 38.674294 ], "pop" : 44587, "state" : "CA" } +{ "_id" : "95698", "city" : "ZAMORA", "loc" : [ -121.90654, 38.799896 ], "pop" : 317, "state" : "CA" } +{ "_id" : "95701", "city" : "ALTA", "loc" : [ -120.773165, 39.228032 ], "pop" : 751, "state" : "CA" } +{ "_id" : "95703", "city" : "APPLEGATE", "loc" : [ -120.990511, 38.995487 ], "pop" : 1898, "state" : "CA" } +{ "_id" : "95709", "city" : "CAMINO", "loc" : [ -120.671979, 38.744938 ], "pop" : 4394, "state" : "CA" } +{ "_id" : "95713", "city" : "IOWA HILL", "loc" : [ -120.960163, 39.076936 ], "pop" : 7344, "state" : "CA" } +{ "_id" : "95714", "city" : "DUTCH FLAT", "loc" : [ -120.826224, 39.197788 ], "pop" : 533, "state" : "CA" } +{ "_id" : "95715", "city" : "EMIGRANT GAP", "loc" : [ -120.662902, 39.286907 ], "pop" : 36, "state" : "CA" } +{ "_id" : "95717", "city" : "GOLD RUN", "loc" : [ -120.856909, 39.175102 ], "pop" : 79, "state" : "CA" } +{ "_id" : "95720", "city" : "KYBURZ", "loc" : [ -120.25529, 38.780036 ], "pop" : 159, "state" : "CA" } +{ "_id" : "95721", "city" : "ECHO LAKE", "loc" : [ -120.070498, 38.810254 ], "pop" : 17, "state" : "CA" } +{ "_id" : "95722", "city" : "MEADOW VISTA", "loc" : [ -121.029155, 39.003101 ], "pop" : 3314, "state" : "CA" } +{ "_id" : "95724", "city" : "NORDEN", "loc" : [ -120.400876, 39.319566 ], "pop" : 316, "state" : "CA" } +{ "_id" : "95726", "city" : "PACIFIC HOUSE", "loc" : [ -120.585114, 38.745581 ], "pop" : 7722, "state" : "CA" } +{ "_id" : "95728", "city" : "SODA SPRINGS", "loc" : [ -120.465493, 39.338467 ], "pop" : 96, "state" : "CA" } +{ "_id" : "95735", "city" : "TWIN BRIDGES", "loc" : [ -120.128851, 38.808615 ], "pop" : 0, "state" : "CA" } +{ "_id" : "95742", "city" : "RANCHO CORDOVA", "loc" : [ -121.204019, 38.604313 ], "pop" : 186, "state" : "CA" } +{ "_id" : "95758", "city" : "ELK GROVE", "loc" : [ -121.430706, 38.404238 ], "pop" : 13455, "state" : "CA" } +{ "_id" : "95814", "city" : "SACRAMENTO", "loc" : [ -121.489404, 38.579792 ], "pop" : 16414, "state" : "CA" } +{ "_id" : "95815", "city" : "SACRAMENTO", "loc" : [ -121.443543, 38.613303 ], "pop" : 23491, "state" : "CA" } +{ "_id" : "95816", "city" : "SACRAMENTO", "loc" : [ -121.46753, 38.572788 ], "pop" : 16211, "state" : "CA" } +{ "_id" : "95817", "city" : "SACRAMENTO", "loc" : [ -121.458324, 38.549785 ], "pop" : 15767, "state" : "CA" } +{ "_id" : "95818", "city" : "SACRAMENTO", "loc" : [ -121.492884, 38.556778 ], "pop" : 22214, "state" : "CA" } +{ "_id" : "95819", "city" : "SACRAMENTO", "loc" : [ -121.436634, 38.568293 ], "pop" : 18333, "state" : "CA" } +{ "_id" : "95820", "city" : "SACRAMENTO", "loc" : [ -121.445139, 38.534694 ], "pop" : 35354, "state" : "CA" } +{ "_id" : "95821", "city" : "SACRAMENTO", "loc" : [ -121.383807, 38.623889 ], "pop" : 33040, "state" : "CA" } +{ "_id" : "95822", "city" : "SACRAMENTO", "loc" : [ -121.493541, 38.509139 ], "pop" : 43943, "state" : "CA" } +{ "_id" : "95823", "city" : "SACRAMENTO", "loc" : [ -121.443846, 38.479711 ], "pop" : 55103, "state" : "CA" } +{ "_id" : "95824", "city" : "SACRAMENTO", "loc" : [ -121.441883, 38.517843 ], "pop" : 26507, "state" : "CA" } +{ "_id" : "95825", "city" : "SACRAMENTO", "loc" : [ -121.405677, 38.589226 ], "pop" : 27116, "state" : "CA" } +{ "_id" : "95826", "city" : "SACRAMENTO", "loc" : [ -121.369265, 38.553868 ], "pop" : 38107, "state" : "CA" } +{ "_id" : "95827", "city" : "SACRAMENTO", "loc" : [ -121.328593, 38.56623 ], "pop" : 19471, "state" : "CA" } +{ "_id" : "95828", "city" : "SACRAMENTO", "loc" : [ -121.401504, 38.483718 ], "pop" : 43489, "state" : "CA" } +{ "_id" : "95829", "city" : "SACRAMENTO", "loc" : [ -121.346631, 38.472564 ], "pop" : 4610, "state" : "CA" } +{ "_id" : "95830", "city" : "SACRAMENTO", "loc" : [ -121.281453, 38.476556 ], "pop" : 420, "state" : "CA" } +{ "_id" : "95831", "city" : "SACRAMENTO", "loc" : [ -121.529661, 38.496226 ], "pop" : 39369, "state" : "CA" } +{ "_id" : "95832", "city" : "SACRAMENTO", "loc" : [ -121.482967, 38.475387 ], "pop" : 7724, "state" : "CA" } +{ "_id" : "95833", "city" : "SACRAMENTO", "loc" : [ -121.494487, 38.616993 ], "pop" : 29150, "state" : "CA" } +{ "_id" : "95834", "city" : "SACRAMENTO", "loc" : [ -121.492052, 38.633418 ], "pop" : 6375, "state" : "CA" } +{ "_id" : "95835", "city" : "SACRAMENTO", "loc" : [ -121.483444, 38.662595 ], "pop" : 373, "state" : "CA" } +{ "_id" : "95836", "city" : "SACRAMENTO", "loc" : [ -121.532259, 38.707346 ], "pop" : 8, "state" : "CA" } +{ "_id" : "95837", "city" : "SACRAMENTO", "loc" : [ -121.60297, 38.681726 ], "pop" : 259, "state" : "CA" } +{ "_id" : "95838", "city" : "SACRAMENTO", "loc" : [ -121.44396, 38.640566 ], "pop" : 26996, "state" : "CA" } +{ "_id" : "95841", "city" : "SACRAMENTO", "loc" : [ -121.340608, 38.662699 ], "pop" : 21161, "state" : "CA" } +{ "_id" : "95842", "city" : "SACRAMENTO", "loc" : [ -121.35046, 38.687385 ], "pop" : 32169, "state" : "CA" } +{ "_id" : "95864", "city" : "SACRAMENTO", "loc" : [ -121.376889, 38.587768 ], "pop" : 25105, "state" : "CA" } +{ "_id" : "95901", "city" : "MARYSVILLE", "loc" : [ -121.522467, 39.141653 ], "pop" : 43785, "state" : "CA" } +{ "_id" : "95910", "city" : "ALLEGHANY", "loc" : [ -120.727176, 39.512698 ], "pop" : 0, "state" : "CA" } +{ "_id" : "95912", "city" : "ARBUCKLE", "loc" : [ -122.027405, 39.013787 ], "pop" : 3851, "state" : "CA" } +{ "_id" : "95914", "city" : "BANGOR", "loc" : [ -121.350499, 39.424862 ], "pop" : 110, "state" : "CA" } +{ "_id" : "95915", "city" : "BELDEN", "loc" : [ -121.325924, 39.921746 ], "pop" : 32, "state" : "CA" } +{ "_id" : "95916", "city" : "BERRY CREEK", "loc" : [ -121.385467, 39.638394 ], "pop" : 1285, "state" : "CA" } +{ "_id" : "95917", "city" : "BIGGS", "loc" : [ -121.695873, 39.414918 ], "pop" : 2784, "state" : "CA" } +{ "_id" : "95918", "city" : "BROWNS VALLEY", "loc" : [ -121.346482, 39.284428 ], "pop" : 1297, "state" : "CA" } +{ "_id" : "95919", "city" : "BROWNSVILLE", "loc" : [ -121.261179, 39.452534 ], "pop" : 1013, "state" : "CA" } +{ "_id" : "95920", "city" : "BUTTE CITY", "loc" : [ -121.978046, 39.456348 ], "pop" : 548, "state" : "CA" } +{ "_id" : "95922", "city" : "CAMPTONVILLE", "loc" : [ -121.023066, 39.450784 ], "pop" : 1090, "state" : "CA" } +{ "_id" : "95923", "city" : "CANYONDAM", "loc" : [ -121.156324, 40.207958 ], "pop" : 39, "state" : "CA" } +{ "_id" : "95926", "city" : "COHASSET", "loc" : [ -121.851806, 39.756466 ], "pop" : 55269, "state" : "CA" } +{ "_id" : "95928", "city" : "CHICO", "loc" : [ -121.81555, 39.729523 ], "pop" : 27452, "state" : "CA" } +{ "_id" : "95932", "city" : "COLUSA", "loc" : [ -122.011563, 39.21311 ], "pop" : 7042, "state" : "CA" } +{ "_id" : "95934", "city" : "CRESCENT MILLS", "loc" : [ -120.881993, 40.081915 ], "pop" : 189, "state" : "CA" } +{ "_id" : "95935", "city" : "DOBBINS", "loc" : [ -121.234386, 39.371469 ], "pop" : 1502, "state" : "CA" } +{ "_id" : "95936", "city" : "DOWNIEVILLE", "loc" : [ -120.677767, 39.570265 ], "pop" : 46, "state" : "CA" } +{ "_id" : "95937", "city" : "DUNNIGAN", "loc" : [ -121.996577, 38.893671 ], "pop" : 850, "state" : "CA" } +{ "_id" : "95938", "city" : "DURHAM", "loc" : [ -121.791983, 39.641599 ], "pop" : 3327, "state" : "CA" } +{ "_id" : "95939", "city" : "ELK CREEK", "loc" : [ -122.557244, 39.598914 ], "pop" : 497, "state" : "CA" } +{ "_id" : "95941", "city" : "FORBESTOWN", "loc" : [ -121.213443, 39.541712 ], "pop" : 517, "state" : "CA" } +{ "_id" : "95942", "city" : "BUTTE MEADOWS", "loc" : [ -121.500205, 40.129931 ], "pop" : 91, "state" : "CA" } +{ "_id" : "95943", "city" : "GLENN", "loc" : [ -122.038443, 39.606871 ], "pop" : 1090, "state" : "CA" } +{ "_id" : "95944", "city" : "GOODYEARS BAR", "loc" : [ -120.820698, 39.572891 ], "pop" : 377, "state" : "CA" } +{ "_id" : "95945", "city" : "GRASS VALLEY", "loc" : [ -121.037401, 39.207617 ], "pop" : 21263, "state" : "CA" } +{ "_id" : "95946", "city" : "PENN VALLEY", "loc" : [ -121.193519, 39.218778 ], "pop" : 7603, "state" : "CA" } +{ "_id" : "95947", "city" : "GREENVILLE", "loc" : [ -120.927299, 40.142404 ], "pop" : 2690, "state" : "CA" } +{ "_id" : "95948", "city" : "GRIDLEY", "loc" : [ -121.689777, 39.358855 ], "pop" : 9499, "state" : "CA" } +{ "_id" : "95949", "city" : "GRASS VALLEY", "loc" : [ -121.069357, 39.1029 ], "pop" : 20973, "state" : "CA" } +{ "_id" : "95953", "city" : "LIVE OAK", "loc" : [ -121.66393, 39.266904 ], "pop" : 6800, "state" : "CA" } +{ "_id" : "95954", "city" : "MAGALIA", "loc" : [ -121.597455, 39.831728 ], "pop" : 10009, "state" : "CA" } +{ "_id" : "95955", "city" : "MAXWELL", "loc" : [ -122.195161, 39.292494 ], "pop" : 1410, "state" : "CA" } +{ "_id" : "95956", "city" : "MEADOW VALLEY", "loc" : [ -121.05629, 39.918488 ], "pop" : 91, "state" : "CA" } +{ "_id" : "95957", "city" : "MERIDIAN", "loc" : [ -121.88138, 39.116812 ], "pop" : 907, "state" : "CA" } +{ "_id" : "95959", "city" : "NEVADA CITY", "loc" : [ -121.019634, 39.275395 ], "pop" : 16670, "state" : "CA" } +{ "_id" : "95960", "city" : "NORTH SAN JUAN", "loc" : [ -121.13498, 39.354037 ], "pop" : 228, "state" : "CA" } +{ "_id" : "95961", "city" : "OLIVEHURST", "loc" : [ -121.550059, 39.089483 ], "pop" : 6418, "state" : "CA" } +{ "_id" : "95962", "city" : "OREGON HOUSE", "loc" : [ -121.209229, 39.314388 ], "pop" : 0, "state" : "CA" } +{ "_id" : "95963", "city" : "ORLAND", "loc" : [ -122.157885, 39.744578 ], "pop" : 14720, "state" : "CA" } +{ "_id" : "95965", "city" : "PULGA", "loc" : [ -121.578396, 39.532967 ], "pop" : 16712, "state" : "CA" } +{ "_id" : "95966", "city" : "OROVILLE", "loc" : [ -121.502029, 39.491448 ], "pop" : 27286, "state" : "CA" } +{ "_id" : "95968", "city" : "PALERMO", "loc" : [ -121.545389, 39.436148 ], "pop" : 1843, "state" : "CA" } +{ "_id" : "95969", "city" : "PARADISE", "loc" : [ -121.603097, 39.759804 ], "pop" : 26327, "state" : "CA" } +{ "_id" : "95970", "city" : "PRINCETON", "loc" : [ -122.030181, 39.428313 ], "pop" : 563, "state" : "CA" } +{ "_id" : "95971", "city" : "QUINCY", "loc" : [ -120.928493, 39.940504 ], "pop" : 6303, "state" : "CA" } +{ "_id" : "95972", "city" : "RACKERBY", "loc" : [ -121.336192, 39.4059 ], "pop" : 260, "state" : "CA" } +{ "_id" : "95975", "city" : "ROUGH AND READY", "loc" : [ -121.150856, 39.228585 ], "pop" : 1811, "state" : "CA" } +{ "_id" : "95977", "city" : "SMARTVILLE", "loc" : [ -121.266716, 39.204305 ], "pop" : 807, "state" : "CA" } +{ "_id" : "95979", "city" : "STONYFORD", "loc" : [ -122.517811, 39.333652 ], "pop" : 683, "state" : "CA" } +{ "_id" : "95981", "city" : "LA PORTE", "loc" : [ -121.074566, 39.604136 ], "pop" : 242, "state" : "CA" } +{ "_id" : "95982", "city" : "SUTTER", "loc" : [ -121.756527, 39.168114 ], "pop" : 3090, "state" : "CA" } +{ "_id" : "95983", "city" : "TAYLORSVILLE", "loc" : [ -120.801797, 40.064911 ], "pop" : 177, "state" : "CA" } +{ "_id" : "95984", "city" : "TWAIN", "loc" : [ -121.150729, 40.002769 ], "pop" : 211, "state" : "CA" } +{ "_id" : "95987", "city" : "WILLIAMS", "loc" : [ -122.162375, 39.148855 ], "pop" : 3094, "state" : "CA" } +{ "_id" : "95988", "city" : "WILLOWS", "loc" : [ -122.199204, 39.523751 ], "pop" : 8034, "state" : "CA" } +{ "_id" : "95991", "city" : "YUBA CITY", "loc" : [ -121.621599, 39.128619 ], "pop" : 30201, "state" : "CA" } +{ "_id" : "95993", "city" : "YUBA CITY", "loc" : [ -121.655168, 39.128193 ], "pop" : 19635, "state" : "CA" } +{ "_id" : "96001", "city" : "REDDING", "loc" : [ -122.411627, 40.560493 ], "pop" : 30690, "state" : "CA" } +{ "_id" : "96002", "city" : "REDDING", "loc" : [ -122.333932, 40.548586 ], "pop" : 29008, "state" : "CA" } +{ "_id" : "96003", "city" : "REDDING", "loc" : [ -122.352962, 40.627751 ], "pop" : 30889, "state" : "CA" } +{ "_id" : "96006", "city" : "ADIN", "loc" : [ -120.943193, 41.21751 ], "pop" : 355, "state" : "CA" } +{ "_id" : "96007", "city" : "ANDERSON", "loc" : [ -122.328218, 40.457432 ], "pop" : 20309, "state" : "CA" } +{ "_id" : "96008", "city" : "BELLA VISTA", "loc" : [ -122.07245, 40.740945 ], "pop" : 1218, "state" : "CA" } +{ "_id" : "96010", "city" : "BIG BAR", "loc" : [ -123.229006, 40.74796 ], "pop" : 344, "state" : "CA" } +{ "_id" : "96013", "city" : "BURNEY", "loc" : [ -121.655036, 40.894927 ], "pop" : 4666, "state" : "CA" } +{ "_id" : "96014", "city" : "CALLAHAN", "loc" : [ -122.764046, 41.383257 ], "pop" : 196, "state" : "CA" } +{ "_id" : "96015", "city" : "CANBY", "loc" : [ -120.921769, 41.466358 ], "pop" : 424, "state" : "CA" } +{ "_id" : "96016", "city" : "CASSEL", "loc" : [ -121.524497, 40.907832 ], "pop" : 566, "state" : "CA" } +{ "_id" : "96019", "city" : "SHASTA LAKE", "loc" : [ -122.365395, 40.680262 ], "pop" : 6405, "state" : "CA" } +{ "_id" : "96020", "city" : "CHESTER", "loc" : [ -121.227338, 40.297457 ], "pop" : 2361, "state" : "CA" } +{ "_id" : "96021", "city" : "CORNING", "loc" : [ -122.195991, 39.929566 ], "pop" : 12436, "state" : "CA" } +{ "_id" : "96022", "city" : "COTTONWOOD", "loc" : [ -122.337463, 40.369072 ], "pop" : 9579, "state" : "CA" } +{ "_id" : "96024", "city" : "DOUGLAS CITY", "loc" : [ -122.923867, 40.634151 ], "pop" : 727, "state" : "CA" } +{ "_id" : "96025", "city" : "DUNSMUIR", "loc" : [ -122.273397, 41.212439 ], "pop" : 2683, "state" : "CA" } +{ "_id" : "96027", "city" : "SAWYERS BAR", "loc" : [ -122.914189, 41.468303 ], "pop" : 2326, "state" : "CA" } +{ "_id" : "96028", "city" : "FALL RIVER MILLS", "loc" : [ -121.460562, 41.03931 ], "pop" : 1843, "state" : "CA" } +{ "_id" : "96031", "city" : "FORKS OF SALMON", "loc" : [ -123.09781, 41.256978 ], "pop" : 469, "state" : "CA" } +{ "_id" : "96032", "city" : "FORT JONES", "loc" : [ -122.883207, 41.617027 ], "pop" : 2363, "state" : "CA" } +{ "_id" : "96033", "city" : "FRENCH GULCH", "loc" : [ -122.622868, 40.703517 ], "pop" : 640, "state" : "CA" } +{ "_id" : "96034", "city" : "GAZELLE", "loc" : [ -122.537122, 41.510485 ], "pop" : 162, "state" : "CA" } +{ "_id" : "96035", "city" : "GERBER", "loc" : [ -122.164937, 40.042997 ], "pop" : 3337, "state" : "CA" } +{ "_id" : "96038", "city" : "GRENADA", "loc" : [ -122.525829, 41.612512 ], "pop" : 703, "state" : "CA" } +{ "_id" : "96039", "city" : "HAPPY CAMP", "loc" : [ -123.388045, 41.801802 ], "pop" : 1885, "state" : "CA" } +{ "_id" : "96040", "city" : "HAT CREEK", "loc" : [ -121.463687, 40.767673 ], "pop" : 150, "state" : "CA" } +{ "_id" : "96041", "city" : "HAYFORK", "loc" : [ -123.163416, 40.550431 ], "pop" : 2671, "state" : "CA" } +{ "_id" : "96044", "city" : "HORNBROOK", "loc" : [ -122.526528, 41.907738 ], "pop" : 905, "state" : "CA" } +{ "_id" : "96045", "city" : "HORSE CREEK", "loc" : [ -123.013919, 41.833732 ], "pop" : 379, "state" : "CA" } +{ "_id" : "96047", "city" : "IGO", "loc" : [ -122.654023, 40.431795 ], "pop" : 205, "state" : "CA" } +{ "_id" : "96048", "city" : "HELENA", "loc" : [ -123.062671, 40.768187 ], "pop" : 606, "state" : "CA" } +{ "_id" : "96050", "city" : "KLAMATH RIVER", "loc" : [ -122.819693, 41.863699 ], "pop" : 174, "state" : "CA" } +{ "_id" : "96051", "city" : "LAKEHEAD", "loc" : [ -122.359281, 40.958775 ], "pop" : 1709, "state" : "CA" } +{ "_id" : "96052", "city" : "LEWISTON", "loc" : [ -122.842591, 40.745986 ], "pop" : 2461, "state" : "CA" } +{ "_id" : "96055", "city" : "LOS MOLINOS", "loc" : [ -122.099175, 40.049735 ], "pop" : 3363, "state" : "CA" } +{ "_id" : "96056", "city" : "MCARTHUR", "loc" : [ -121.214896, 41.111407 ], "pop" : 2797, "state" : "CA" } +{ "_id" : "96057", "city" : "MCCLOUD", "loc" : [ -122.13562, 41.252108 ], "pop" : 1743, "state" : "CA" } +{ "_id" : "96058", "city" : "MACDOEL", "loc" : [ -121.944472, 41.883028 ], "pop" : 1945, "state" : "CA" } +{ "_id" : "96059", "city" : "MANTON", "loc" : [ -121.836521, 40.433125 ], "pop" : 344, "state" : "CA" } +{ "_id" : "96062", "city" : "MILLVILLE", "loc" : [ -122.111088, 40.565316 ], "pop" : 1281, "state" : "CA" } +{ "_id" : "96063", "city" : "MINERAL", "loc" : [ -121.524807, 40.328826 ], "pop" : 172, "state" : "CA" } +{ "_id" : "96064", "city" : "MONTAGUE", "loc" : [ -122.463799, 41.724294 ], "pop" : 4246, "state" : "CA" } +{ "_id" : "96065", "city" : "MONTGOMERY CREEK", "loc" : [ -121.923313, 40.912378 ], "pop" : 823, "state" : "CA" } +{ "_id" : "96067", "city" : "MOUNT SHASTA", "loc" : [ -122.324017, 41.317435 ], "pop" : 6719, "state" : "CA" } +{ "_id" : "96069", "city" : "OAK RUN", "loc" : [ -122.040932, 40.68631 ], "pop" : 1160, "state" : "CA" } +{ "_id" : "96071", "city" : "OLD STATION", "loc" : [ -121.458476, 40.62557 ], "pop" : 213, "state" : "CA" } +{ "_id" : "96073", "city" : "PALO CEDRO", "loc" : [ -122.239805, 40.576661 ], "pop" : 3905, "state" : "CA" } +{ "_id" : "96075", "city" : "PAYNES CREEK", "loc" : [ -121.764952, 40.351415 ], "pop" : 773, "state" : "CA" } +{ "_id" : "96076", "city" : "WILDWOOD", "loc" : [ -122.918013, 40.316528 ], "pop" : 119, "state" : "CA" } +{ "_id" : "96080", "city" : "RED BLUFF", "loc" : [ -122.238281, 40.179535 ], "pop" : 25180, "state" : "CA" } +{ "_id" : "96085", "city" : "SCOTT BAR", "loc" : [ -122.988183, 41.77364 ], "pop" : 21, "state" : "CA" } +{ "_id" : "96086", "city" : "SEIAD VALLEY", "loc" : [ -123.243762, 41.886589 ], "pop" : 311, "state" : "CA" } +{ "_id" : "96087", "city" : "SHASTA", "loc" : [ -122.49685, 40.610896 ], "pop" : 294, "state" : "CA" } +{ "_id" : "96088", "city" : "SHINGLETOWN", "loc" : [ -121.885668, 40.504959 ], "pop" : 3681, "state" : "CA" } +{ "_id" : "96091", "city" : "TRINITY CENTER", "loc" : [ -122.723919, 41.061548 ], "pop" : 362, "state" : "CA" } +{ "_id" : "96093", "city" : "WEAVERVILLE", "loc" : [ -122.935303, 40.731701 ], "pop" : 3188, "state" : "CA" } +{ "_id" : "96094", "city" : "EDGEWOOD", "loc" : [ -122.384803, 41.439466 ], "pop" : 5506, "state" : "CA" } +{ "_id" : "96096", "city" : "WHITMORE", "loc" : [ -121.877076, 40.65255 ], "pop" : 593, "state" : "CA" } +{ "_id" : "96097", "city" : "YREKA", "loc" : [ -122.637604, 41.720558 ], "pop" : 9151, "state" : "CA" } +{ "_id" : "96101", "city" : "ALTURAS", "loc" : [ -120.545584, 41.476742 ], "pop" : 5566, "state" : "CA" } +{ "_id" : "96103", "city" : "CROMBERG", "loc" : [ -120.627397, 39.784745 ], "pop" : 1774, "state" : "CA" } +{ "_id" : "96104", "city" : "CEDARVILLE", "loc" : [ -120.151551, 41.475871 ], "pop" : 991, "state" : "CA" } +{ "_id" : "96105", "city" : "CHILCOOT", "loc" : [ -120.175212, 39.805683 ], "pop" : 470, "state" : "CA" } +{ "_id" : "96106", "city" : "CLIO", "loc" : [ -120.560458, 39.74326 ], "pop" : 84, "state" : "CA" } +{ "_id" : "96107", "city" : "COLEVILLE", "loc" : [ -119.482784, 38.502903 ], "pop" : 1370, "state" : "CA" } +{ "_id" : "96108", "city" : "DAVIS CREEK", "loc" : [ -120.323549, 41.862555 ], "pop" : 285, "state" : "CA" } +{ "_id" : "96109", "city" : "DOYLE", "loc" : [ -120.107693, 40.000799 ], "pop" : 985, "state" : "CA" } +{ "_id" : "96111", "city" : "FLORISTON", "loc" : [ -120.025421, 39.445746 ], "pop" : 169, "state" : "CA" } +{ "_id" : "96112", "city" : "FORT BIDWELL", "loc" : [ -120.161983, 41.864441 ], "pop" : 226, "state" : "CA" } +{ "_id" : "96113", "city" : "HERLONG", "loc" : [ -120.171271, 40.148492 ], "pop" : 1518, "state" : "CA" } +{ "_id" : "96114", "city" : "JANESVILLE", "loc" : [ -120.50982, 40.296325 ], "pop" : 2655, "state" : "CA" } +{ "_id" : "96115", "city" : "LAKE CITY", "loc" : [ -120.181424, 41.668208 ], "pop" : 234, "state" : "CA" } +{ "_id" : "96117", "city" : "LITCHFIELD", "loc" : [ -120.253975, 40.362788 ], "pop" : 23, "state" : "CA" } +{ "_id" : "96118", "city" : "LOYALTON", "loc" : [ -120.229662, 39.662974 ], "pop" : 1500, "state" : "CA" } +{ "_id" : "96120", "city" : "HOPE VALLEY", "loc" : [ -119.807275, 38.76473 ], "pop" : 850, "state" : "CA" } +{ "_id" : "96121", "city" : "MILFORD", "loc" : [ -120.389508, 40.182763 ], "pop" : 376, "state" : "CA" } +{ "_id" : "96122", "city" : "PORTOLA", "loc" : [ -120.466858, 39.810883 ], "pop" : 3685, "state" : "CA" } +{ "_id" : "96123", "city" : "RAVENDALE", "loc" : [ -120.16001, 40.831705 ], "pop" : 89, "state" : "CA" } +{ "_id" : "96124", "city" : "CALPINE", "loc" : [ -120.4442, 39.651699 ], "pop" : 286, "state" : "CA" } +{ "_id" : "96125", "city" : "SIERRA CITY", "loc" : [ -120.624135, 39.559248 ], "pop" : 311, "state" : "CA" } +{ "_id" : "96126", "city" : "SIERRAVILLE", "loc" : [ -120.347789, 39.594294 ], "pop" : 355, "state" : "CA" } +{ "_id" : "96128", "city" : "STANDISH", "loc" : [ -120.406847, 40.350863 ], "pop" : 340, "state" : "CA" } +{ "_id" : "96130", "city" : "SUSANVILLE", "loc" : [ -120.646442, 40.398282 ], "pop" : 19347, "state" : "CA" } +{ "_id" : "96132", "city" : "TERMO", "loc" : [ -120.517378, 40.946667 ], "pop" : 199, "state" : "CA" } +{ "_id" : "96133", "city" : "TOPAZ", "loc" : [ -119.512164, 38.64151 ], "pop" : 87, "state" : "CA" } +{ "_id" : "96134", "city" : "TULELAKE", "loc" : [ -121.434688, 41.931621 ], "pop" : 2613, "state" : "CA" } +{ "_id" : "96135", "city" : "VINTON", "loc" : [ -120.204994, 39.720719 ], "pop" : 0, "state" : "CA" } +{ "_id" : "96136", "city" : "WENDEL", "loc" : [ -120.352156, 40.346233 ], "pop" : 148, "state" : "CA" } +{ "_id" : "96137", "city" : "PENINSULA VILLAG", "loc" : [ -121.109224, 40.270359 ], "pop" : 1843, "state" : "CA" } +{ "_id" : "96140", "city" : "CARNELIAN BAY", "loc" : [ -120.075328, 39.231937 ], "pop" : 620, "state" : "CA" } +{ "_id" : "96141", "city" : "HOMEWOOD", "loc" : [ -120.179035, 39.078157 ], "pop" : 283, "state" : "CA" } +{ "_id" : "96142", "city" : "TAHOMA", "loc" : [ -120.135747, 39.064406 ], "pop" : 1029, "state" : "CA" } +{ "_id" : "96143", "city" : "KINGS BEACH", "loc" : [ -120.023287, 39.240119 ], "pop" : 3247, "state" : "CA" } +{ "_id" : "96145", "city" : "TAHOE CITY", "loc" : [ -120.144532, 39.180618 ], "pop" : 4944, "state" : "CA" } +{ "_id" : "96148", "city" : "TAHOE VISTA", "loc" : [ -120.052128, 39.24475 ], "pop" : 717, "state" : "CA" } +{ "_id" : "96150", "city" : "SOUTH LAKE TAHOE", "loc" : [ -119.986469, 38.916976 ], "pop" : 28975, "state" : "CA" } +{ "_id" : "96161", "city" : "TRUCKEE", "loc" : [ -120.172942, 39.338546 ], "pop" : 9544, "state" : "CA" } +{ "_id" : "96162", "city" : "TRUCKEE", "loc" : [ -120.295031, 39.319321 ], "pop" : 199, "state" : "CA" } +{ "_id" : "96701", "city" : "AIEA", "loc" : [ -157.933237, 21.390795 ], "pop" : 43273, "state" : "HI" } +{ "_id" : "96704", "city" : "CAPTAIN COOK", "loc" : [ -155.887463, 19.438604 ], "pop" : 5338, "state" : "HI" } +{ "_id" : "96705", "city" : "ELEELE", "loc" : [ -159.538115, 21.923017 ], "pop" : 6466, "state" : "HI" } +{ "_id" : "96706", "city" : "EWA BEACH", "loc" : [ -158.010307, 21.327418 ], "pop" : 26089, "state" : "HI" } +{ "_id" : "96707", "city" : "KAPOLEI", "loc" : [ -158.087007, 21.345284 ], "pop" : 15891, "state" : "HI" } +{ "_id" : "96708", "city" : "HAIKU", "loc" : [ -156.299983, 20.907097 ], "pop" : 5695, "state" : "HI" } +{ "_id" : "96710", "city" : "HAKALAU", "loc" : [ -155.133335, 19.888217 ], "pop" : 198, "state" : "HI" } +{ "_id" : "96712", "city" : "HALEIWA", "loc" : [ -158.069315, 21.631151 ], "pop" : 7870, "state" : "HI" } +{ "_id" : "96713", "city" : "HANA", "loc" : [ -156.039659, 20.761635 ], "pop" : 1895, "state" : "HI" } +{ "_id" : "96716", "city" : "HANAPEPE", "loc" : [ -159.592022, 21.915644 ], "pop" : 1523, "state" : "HI" } +{ "_id" : "96717", "city" : "HAUULA", "loc" : [ -157.915704, 21.61395 ], "pop" : 3477, "state" : "HI" } +{ "_id" : "96718", "city" : "HAWAII NATIONAL", "loc" : [ -155.284015, 19.431103 ], "pop" : 91, "state" : "HI" } +{ "_id" : "96719", "city" : "HAWI", "loc" : [ -155.838007, 20.238021 ], "pop" : 1741, "state" : "HI" } +{ "_id" : "96720", "city" : "HILO", "loc" : [ -155.093921, 19.702522 ], "pop" : 40158, "state" : "HI" } +{ "_id" : "96722", "city" : "PRINCEVILLE", "loc" : [ -159.462587, 22.215948 ], "pop" : 4631, "state" : "HI" } +{ "_id" : "96725", "city" : "HOLUALOA", "loc" : [ -155.917639, 19.610316 ], "pop" : 2096, "state" : "HI" } +{ "_id" : "96726", "city" : "HONAUNAU", "loc" : [ -155.893356, 19.44845 ], "pop" : 1583, "state" : "HI" } +{ "_id" : "96727", "city" : "HONOKAA", "loc" : [ -155.488026, 20.08266 ], "pop" : 3681, "state" : "HI" } +{ "_id" : "96728", "city" : "HONOMU", "loc" : [ -155.11766, 19.872767 ], "pop" : 548, "state" : "HI" } +{ "_id" : "96729", "city" : "HOOLEHUA", "loc" : [ -157.079138, 21.173025 ], "pop" : 853, "state" : "HI" } +{ "_id" : "96730", "city" : "KAAAWA", "loc" : [ -157.873734, 21.56737 ], "pop" : 2305, "state" : "HI" } +{ "_id" : "96732", "city" : "KAHULUI", "loc" : [ -156.478327, 20.881388 ], "pop" : 17289, "state" : "HI" } +{ "_id" : "96734", "city" : "KAILUA", "loc" : [ -157.744781, 21.406262 ], "pop" : 53403, "state" : "HI" } +{ "_id" : "96740", "city" : "KAILUA KONA", "loc" : [ -155.979809, 19.653053 ], "pop" : 19616, "state" : "HI" } +{ "_id" : "96742", "city" : "KALAUPAPA", "loc" : [ -156.983453, 21.19289 ], "pop" : 130, "state" : "HI" } +{ "_id" : "96743", "city" : "KAMUELA", "loc" : [ -155.705189, 20.008128 ], "pop" : 9140, "state" : "HI" } +{ "_id" : "96744", "city" : "KANEOHE", "loc" : [ -157.811543, 21.422819 ], "pop" : 55236, "state" : "HI" } +{ "_id" : "96746", "city" : "KAPAA", "loc" : [ -159.344842, 22.086798 ], "pop" : 15627, "state" : "HI" } +{ "_id" : "96747", "city" : "KAUMAKANI", "loc" : [ -159.62413, 21.921329 ], "pop" : 819, "state" : "HI" } +{ "_id" : "96748", "city" : "KAUNAKAKAI", "loc" : [ -156.969015, 21.090504 ], "pop" : 4419, "state" : "HI" } +{ "_id" : "96749", "city" : "KEAAU", "loc" : [ -154.992644, 19.589277 ], "pop" : 4297, "state" : "HI" } +{ "_id" : "96750", "city" : "KEALAKEKUA", "loc" : [ -155.930025, 19.526149 ], "pop" : 1309, "state" : "HI" } +{ "_id" : "96752", "city" : "KEKAHA", "loc" : [ -159.71988, 21.973509 ], "pop" : 3785, "state" : "HI" } +{ "_id" : "96753", "city" : "KIHEI", "loc" : [ -156.447543, 20.744124 ], "pop" : 14759, "state" : "HI" } +{ "_id" : "96755", "city" : "KAPAAU", "loc" : [ -155.798981, 20.218323 ], "pop" : 2550, "state" : "HI" } +{ "_id" : "96756", "city" : "KOLOA", "loc" : [ -159.474927, 21.908293 ], "pop" : 4906, "state" : "HI" } +{ "_id" : "96757", "city" : "KUALAPUU", "loc" : [ -157.027669, 21.160097 ], "pop" : 818, "state" : "HI" } +{ "_id" : "96760", "city" : "KURTISTOWN", "loc" : [ -155.020659, 19.570637 ], "pop" : 3975, "state" : "HI" } +{ "_id" : "96761", "city" : "LAHAINA", "loc" : [ -156.677162, 20.917432 ], "pop" : 14508, "state" : "HI" } +{ "_id" : "96762", "city" : "LAIE", "loc" : [ -157.939377, 21.659513 ], "pop" : 8481, "state" : "HI" } +{ "_id" : "96763", "city" : "LANAI CITY", "loc" : [ -156.921027, 20.829323 ], "pop" : 2426, "state" : "HI" } +{ "_id" : "96764", "city" : "LAUPAHOEHOE", "loc" : [ -155.232263, 19.980194 ], "pop" : 1015, "state" : "HI" } +{ "_id" : "96766", "city" : "LIHUE", "loc" : [ -159.368258, 21.981618 ], "pop" : 10663, "state" : "HI" } +{ "_id" : "96768", "city" : "MAKAWAO", "loc" : [ -156.332735, 20.846932 ], "pop" : 13389, "state" : "HI" } +{ "_id" : "96769", "city" : "MAKAWELI", "loc" : [ -159.790721, 21.927639 ], "pop" : 797, "state" : "HI" } +{ "_id" : "96770", "city" : "MAUNALOA", "loc" : [ -157.219277, 21.142202 ], "pop" : 497, "state" : "HI" } +{ "_id" : "96771", "city" : "MOUNTAIN VIEW", "loc" : [ -155.086436, 19.550587 ], "pop" : 3170, "state" : "HI" } +{ "_id" : "96772", "city" : "NAALEHU", "loc" : [ -155.657474, 19.066844 ], "pop" : 2729, "state" : "HI" } +{ "_id" : "96773", "city" : "NINOLE", "loc" : [ -155.159923, 19.904436 ], "pop" : 0, "state" : "HI" } +{ "_id" : "96774", "city" : "OOKALA", "loc" : [ -155.274666, 20.011887 ], "pop" : 315, "state" : "HI" } +{ "_id" : "96775", "city" : "PAAUHAU", "loc" : [ -155.449088, 20.027748 ], "pop" : 917, "state" : "HI" } +{ "_id" : "96776", "city" : "PAAUILO", "loc" : [ -155.369728, 20.027119 ], "pop" : 947, "state" : "HI" } +{ "_id" : "96777", "city" : "PAHALA", "loc" : [ -155.481506, 19.207898 ], "pop" : 1616, "state" : "HI" } +{ "_id" : "96778", "city" : "PAHOA", "loc" : [ -154.923135, 19.508901 ], "pop" : 6702, "state" : "HI" } +{ "_id" : "96779", "city" : "PAIA", "loc" : [ -156.38017, 20.91539 ], "pop" : 2311, "state" : "HI" } +{ "_id" : "96780", "city" : "PAPAALOA", "loc" : [ -155.218402, 19.904835 ], "pop" : 208, "state" : "HI" } +{ "_id" : "96781", "city" : "PAPAIKOU", "loc" : [ -155.098442, 19.791643 ], "pop" : 1700, "state" : "HI" } +{ "_id" : "96782", "city" : "PEARL CITY", "loc" : [ -157.965164, 21.408393 ], "pop" : 38207, "state" : "HI" } +{ "_id" : "96783", "city" : "PEPEEKEO", "loc" : [ -155.112994, 19.835283 ], "pop" : 2038, "state" : "HI" } +{ "_id" : "96785", "city" : "VOLCANO", "loc" : [ -155.19743, 19.480066 ], "pop" : 2639, "state" : "HI" } +{ "_id" : "96786", "city" : "WAHIAWA", "loc" : [ -158.043527, 21.500596 ], "pop" : 43663, "state" : "HI" } +{ "_id" : "96789", "city" : "MILILANI", "loc" : [ -158.017379, 21.45311 ], "pop" : 34734, "state" : "HI" } +{ "_id" : "96790", "city" : "KULA", "loc" : [ -156.326026, 20.753353 ], "pop" : 5697, "state" : "HI" } +{ "_id" : "96791", "city" : "WAIALUA", "loc" : [ -158.126673, 21.576623 ], "pop" : 7975, "state" : "HI" } +{ "_id" : "96792", "city" : "WAIANAE", "loc" : [ -158.178071, 21.435192 ], "pop" : 37518, "state" : "HI" } +{ "_id" : "96793", "city" : "WAILUKU", "loc" : [ -156.503612, 20.896586 ], "pop" : 15818, "state" : "HI" } +{ "_id" : "96795", "city" : "WAIMANALO", "loc" : [ -157.713094, 21.341786 ], "pop" : 9055, "state" : "HI" } +{ "_id" : "96796", "city" : "WAIMEA", "loc" : [ -159.669429, 21.968487 ], "pop" : 1960, "state" : "HI" } +{ "_id" : "96797", "city" : "WAIPAHU", "loc" : [ -158.012418, 21.398203 ], "pop" : 52411, "state" : "HI" } +{ "_id" : "96813", "city" : "HONOLULU", "loc" : [ -157.852072, 21.317905 ], "pop" : 23082, "state" : "HI" } +{ "_id" : "96814", "city" : "HONOLULU", "loc" : [ -157.843876, 21.299846 ], "pop" : 14182, "state" : "HI" } +{ "_id" : "96815", "city" : "HONOLULU", "loc" : [ -157.826616, 21.281084 ], "pop" : 28650, "state" : "HI" } +{ "_id" : "96816", "city" : "HONOLULU", "loc" : [ -157.800626, 21.288677 ], "pop" : 49208, "state" : "HI" } +{ "_id" : "96817", "city" : "HONOLULU", "loc" : [ -157.861469, 21.329452 ], "pop" : 48920, "state" : "HI" } +{ "_id" : "96818", "city" : "HONOLULU", "loc" : [ -157.926925, 21.353173 ], "pop" : 62915, "state" : "HI" } +{ "_id" : "96819", "city" : "HONOLULU", "loc" : [ -157.875947, 21.34877 ], "pop" : 50584, "state" : "HI" } +{ "_id" : "96821", "city" : "HONOLULU", "loc" : [ -157.755242, 21.292811 ], "pop" : 18366, "state" : "HI" } +{ "_id" : "96822", "city" : "HONOLULU", "loc" : [ -157.829819, 21.311704 ], "pop" : 39632, "state" : "HI" } +{ "_id" : "96825", "city" : "HONOLULU", "loc" : [ -157.698523, 21.298684 ], "pop" : 27432, "state" : "HI" } +{ "_id" : "96826", "city" : "HONOLULU", "loc" : [ -157.828388, 21.294139 ], "pop" : 33672, "state" : "HI" } +{ "_id" : "97001", "city" : "ANTELOPE", "loc" : [ -120.791384, 44.889196 ], "pop" : 129, "state" : "OR" } +{ "_id" : "97002", "city" : "AURORA", "loc" : [ -122.803881, 45.228432 ], "pop" : 4638, "state" : "OR" } +{ "_id" : "97004", "city" : "BEAVERCREEK", "loc" : [ -122.475122, 45.259723 ], "pop" : 4253, "state" : "OR" } +{ "_id" : "97005", "city" : "BEAVERTON", "loc" : [ -122.805395, 45.475035 ], "pop" : 46660, "state" : "OR" } +{ "_id" : "97006", "city" : "ALOHA", "loc" : [ -122.859209, 45.517675 ], "pop" : 31650, "state" : "OR" } +{ "_id" : "97007", "city" : "ALOHA", "loc" : [ -122.859473, 45.472985 ], "pop" : 35583, "state" : "OR" } +{ "_id" : "97009", "city" : "BORING", "loc" : [ -122.380713, 45.429704 ], "pop" : 11406, "state" : "OR" } +{ "_id" : "97010", "city" : "BRIDAL VEIL", "loc" : [ -122.176587, 45.557904 ], "pop" : 8, "state" : "OR" } +{ "_id" : "97011", "city" : "BRIGHTWOOD", "loc" : [ -122.003621, 45.365218 ], "pop" : 788, "state" : "OR" } +{ "_id" : "97013", "city" : "CANBY", "loc" : [ -122.68322, 45.251425 ], "pop" : 15801, "state" : "OR" } +{ "_id" : "97014", "city" : "BONNEVILLE", "loc" : [ -121.882411, 45.671447 ], "pop" : 951, "state" : "OR" } +{ "_id" : "97015", "city" : "CLACKAMAS", "loc" : [ -122.52005, 45.414992 ], "pop" : 12352, "state" : "OR" } +{ "_id" : "97016", "city" : "WESTPORT", "loc" : [ -123.2124, 46.09978 ], "pop" : 6361, "state" : "OR" } +{ "_id" : "97017", "city" : "COLTON", "loc" : [ -122.424753, 45.157291 ], "pop" : 4223, "state" : "OR" } +{ "_id" : "97018", "city" : "COLUMBIA CITY", "loc" : [ -122.812174, 45.892474 ], "pop" : 1003, "state" : "OR" } +{ "_id" : "97019", "city" : "CORBETT", "loc" : [ -122.241746, 45.522116 ], "pop" : 2355, "state" : "OR" } +{ "_id" : "97021", "city" : "FRIEND", "loc" : [ -121.146797, 45.429099 ], "pop" : 1111, "state" : "OR" } +{ "_id" : "97022", "city" : "EAGLE CREEK", "loc" : [ -122.338053, 45.358205 ], "pop" : 3285, "state" : "OR" } +{ "_id" : "97023", "city" : "ESTACADA", "loc" : [ -122.325858, 45.287177 ], "pop" : 8703, "state" : "OR" } +{ "_id" : "97026", "city" : "GERVAIS", "loc" : [ -122.896185, 45.108645 ], "pop" : 992, "state" : "OR" } +{ "_id" : "97027", "city" : "GLADSTONE", "loc" : [ -122.590197, 45.389882 ], "pop" : 10148, "state" : "OR" } +{ "_id" : "97028", "city" : "TIMBERLINE LODGE", "loc" : [ -121.785426, 45.318366 ], "pop" : 268, "state" : "OR" } +{ "_id" : "97029", "city" : "GRASS VALLEY", "loc" : [ -120.747795, 45.301333 ], "pop" : 415, "state" : "OR" } +{ "_id" : "97030", "city" : "GRESHAM", "loc" : [ -122.420258, 45.515397 ], "pop" : 35728, "state" : "OR" } +{ "_id" : "97031", "city" : "HOOD RIVER", "loc" : [ -121.539104, 45.671058 ], "pop" : 13718, "state" : "OR" } +{ "_id" : "97032", "city" : "HUBBARD", "loc" : [ -122.754115, 45.160422 ], "pop" : 6393, "state" : "OR" } +{ "_id" : "97033", "city" : "KENT", "loc" : [ -120.664895, 45.083789 ], "pop" : 0, "state" : "OR" } +{ "_id" : "97034", "city" : "LAKE OSWEGO", "loc" : [ -122.684721, 45.409263 ], "pop" : 18063, "state" : "OR" } +{ "_id" : "97035", "city" : "LAKE OSWEGO", "loc" : [ -122.722709, 45.414666 ], "pop" : 19305, "state" : "OR" } +{ "_id" : "97037", "city" : "MAUPIN", "loc" : [ -121.228164, 45.074247 ], "pop" : 1758, "state" : "OR" } +{ "_id" : "97038", "city" : "MOLALLA", "loc" : [ -122.575574, 45.122256 ], "pop" : 7829, "state" : "OR" } +{ "_id" : "97039", "city" : "MORO", "loc" : [ -120.695666, 45.485332 ], "pop" : 550, "state" : "OR" } +{ "_id" : "97040", "city" : "MOSIER", "loc" : [ -121.324532, 45.66167 ], "pop" : 1573, "state" : "OR" } +{ "_id" : "97041", "city" : "MOUNT HOOD PARKD", "loc" : [ -121.588485, 45.521584 ], "pop" : 2236, "state" : "OR" } +{ "_id" : "97042", "city" : "MULINO", "loc" : [ -122.535068, 45.212973 ], "pop" : 2935, "state" : "OR" } +{ "_id" : "97044", "city" : "ODELL", "loc" : [ -121.440131, 45.623245 ], "pop" : 0, "state" : "OR" } +{ "_id" : "97045", "city" : "OREGON CITY", "loc" : [ -122.569991, 45.337718 ], "pop" : 36753, "state" : "OR" } +{ "_id" : "97048", "city" : "RAINIER", "loc" : [ -122.967067, 46.064552 ], "pop" : 6357, "state" : "OR" } +{ "_id" : "97049", "city" : "ZIGZAG", "loc" : [ -121.953691, 45.355201 ], "pop" : 1325, "state" : "OR" } +{ "_id" : "97050", "city" : "RUFUS", "loc" : [ -120.726777, 45.68515 ], "pop" : 389, "state" : "OR" } +{ "_id" : "97051", "city" : "SAINT HELENS", "loc" : [ -122.828177, 45.860825 ], "pop" : 10355, "state" : "OR" } +{ "_id" : "97053", "city" : "WARREN", "loc" : [ -122.863445, 45.826043 ], "pop" : 2378, "state" : "OR" } +{ "_id" : "97054", "city" : "DEER ISLAND", "loc" : [ -122.898458, 45.935553 ], "pop" : 1317, "state" : "OR" } +{ "_id" : "97055", "city" : "SANDY", "loc" : [ -122.223049, 45.378954 ], "pop" : 12936, "state" : "OR" } +{ "_id" : "97056", "city" : "SCAPPOOSE", "loc" : [ -122.892771, 45.765451 ], "pop" : 7812, "state" : "OR" } +{ "_id" : "97057", "city" : "SHANIKO", "loc" : [ -120.806953, 45.047231 ], "pop" : 81, "state" : "OR" } +{ "_id" : "97058", "city" : "THE DALLES", "loc" : [ -121.190493, 45.599504 ], "pop" : 16319, "state" : "OR" } +{ "_id" : "97060", "city" : "TROUTDALE", "loc" : [ -122.373866, 45.525398 ], "pop" : 4849, "state" : "OR" } +{ "_id" : "97062", "city" : "TUALATIN", "loc" : [ -122.763132, 45.372688 ], "pop" : 16371, "state" : "OR" } +{ "_id" : "97063", "city" : "WAMIC", "loc" : [ -121.296517, 45.231789 ], "pop" : 712, "state" : "OR" } +{ "_id" : "97064", "city" : "VERNONIA", "loc" : [ -123.196662, 45.857298 ], "pop" : 2931, "state" : "OR" } +{ "_id" : "97065", "city" : "WASCO", "loc" : [ -120.730356, 45.597447 ], "pop" : 564, "state" : "OR" } +{ "_id" : "97067", "city" : "WELCHES", "loc" : [ -121.959826, 45.339862 ], "pop" : 802, "state" : "OR" } +{ "_id" : "97068", "city" : "WEST LINN", "loc" : [ -122.647952, 45.366874 ], "pop" : 19962, "state" : "OR" } +{ "_id" : "97070", "city" : "WILSONVILLE", "loc" : [ -122.769886, 45.298646 ], "pop" : 9397, "state" : "OR" } +{ "_id" : "97071", "city" : "WOODBURN", "loc" : [ -122.858342, 45.144617 ], "pop" : 17482, "state" : "OR" } +{ "_id" : "97080", "city" : "GRESHAM", "loc" : [ -122.415645, 45.481699 ], "pop" : 25232, "state" : "OR" } +{ "_id" : "97101", "city" : "AMITY", "loc" : [ -123.174402, 45.115704 ], "pop" : 2810, "state" : "OR" } +{ "_id" : "97103", "city" : "ASTORIA", "loc" : [ -123.79798, 46.155802 ], "pop" : 19140, "state" : "OR" } +{ "_id" : "97106", "city" : "BANKS", "loc" : [ -123.120982, 45.653476 ], "pop" : 3316, "state" : "OR" } +{ "_id" : "97107", "city" : "BAY CITY", "loc" : [ -123.876075, 45.519658 ], "pop" : 1483, "state" : "OR" } +{ "_id" : "97108", "city" : "BEAVER", "loc" : [ -123.823417, 45.276746 ], "pop" : 133, "state" : "OR" } +{ "_id" : "97109", "city" : "BUXTON", "loc" : [ -123.214555, 45.736983 ], "pop" : 420, "state" : "OR" } +{ "_id" : "97111", "city" : "CARLTON", "loc" : [ -123.152346, 45.28593 ], "pop" : 1555, "state" : "OR" } +{ "_id" : "97112", "city" : "CLOVERDALE", "loc" : [ -123.835628, 45.285821 ], "pop" : 1269, "state" : "OR" } +{ "_id" : "97113", "city" : "CORNELIUS", "loc" : [ -123.041536, 45.529034 ], "pop" : 13173, "state" : "OR" } +{ "_id" : "97114", "city" : "DAYTON", "loc" : [ -123.075332, 45.197722 ], "pop" : 3640, "state" : "OR" } +{ "_id" : "97115", "city" : "DUNDEE", "loc" : [ -123.01523, 45.27761 ], "pop" : 2382, "state" : "OR" } +{ "_id" : "97116", "city" : "GLENWOOD", "loc" : [ -123.115152, 45.532835 ], "pop" : 17626, "state" : "OR" } +{ "_id" : "97117", "city" : "GALES CREEK", "loc" : [ -123.233967, 45.595747 ], "pop" : 374, "state" : "OR" } +{ "_id" : "97119", "city" : "GASTON", "loc" : [ -123.16657, 45.442738 ], "pop" : 3844, "state" : "OR" } +{ "_id" : "97121", "city" : "HAMMOND", "loc" : [ -123.952726, 46.198028 ], "pop" : 627, "state" : "OR" } +{ "_id" : "97122", "city" : "HEBO", "loc" : [ -123.871433, 45.212016 ], "pop" : 366, "state" : "OR" } +{ "_id" : "97123", "city" : "HILLSBORO", "loc" : [ -122.956998, 45.498401 ], "pop" : 24201, "state" : "OR" } +{ "_id" : "97124", "city" : "HILLSBORO", "loc" : [ -122.963608, 45.53868 ], "pop" : 20503, "state" : "OR" } +{ "_id" : "97125", "city" : "MANNING", "loc" : [ -123.186113, 45.652468 ], "pop" : 549, "state" : "OR" } +{ "_id" : "97127", "city" : "LAFAYETTE", "loc" : [ -123.111362, 45.246638 ], "pop" : 1315, "state" : "OR" } +{ "_id" : "97128", "city" : "MCMINNVILLE", "loc" : [ -123.204342, 45.209677 ], "pop" : 21848, "state" : "OR" } +{ "_id" : "97131", "city" : "NEHALEM", "loc" : [ -123.904943, 45.72159 ], "pop" : 2118, "state" : "OR" } +{ "_id" : "97132", "city" : "NEWBERG", "loc" : [ -122.968503, 45.309901 ], "pop" : 18911, "state" : "OR" } +{ "_id" : "97136", "city" : "ROCKAWAY", "loc" : [ -123.907834, 45.608511 ], "pop" : 3164, "state" : "OR" } +{ "_id" : "97137", "city" : "SAINT PAUL", "loc" : [ -122.96737, 45.195996 ], "pop" : 1623, "state" : "OR" } +{ "_id" : "97138", "city" : "GEARHART", "loc" : [ -123.878837, 45.969506 ], "pop" : 7239, "state" : "OR" } +{ "_id" : "97140", "city" : "SHERWOOD", "loc" : [ -122.856724, 45.351419 ], "pop" : 7623, "state" : "OR" } +{ "_id" : "97141", "city" : "TILLAMOOK", "loc" : [ -123.818851, 45.449185 ], "pop" : 11010, "state" : "OR" } +{ "_id" : "97144", "city" : "TIMBER", "loc" : [ -123.311852, 45.727033 ], "pop" : 124, "state" : "OR" } +{ "_id" : "97145", "city" : "TOLOVANA PARK", "loc" : [ -123.95887, 45.886172 ], "pop" : 1114, "state" : "OR" } +{ "_id" : "97146", "city" : "WARRENTON", "loc" : [ -123.925366, 46.145017 ], "pop" : 4224, "state" : "OR" } +{ "_id" : "97148", "city" : "YAMHILL", "loc" : [ -123.203639, 45.335049 ], "pop" : 4276, "state" : "OR" } +{ "_id" : "97149", "city" : "NESKOWIN", "loc" : [ -123.926344, 45.178165 ], "pop" : 2027, "state" : "OR" } +{ "_id" : "97201", "city" : "PORTLAND", "loc" : [ -122.690258, 45.498819 ], "pop" : 22763, "state" : "OR" } +{ "_id" : "97202", "city" : "PORTLAND", "loc" : [ -122.636534, 45.484007 ], "pop" : 37147, "state" : "OR" } +{ "_id" : "97203", "city" : "PORTLAND", "loc" : [ -122.734699, 45.588872 ], "pop" : 24789, "state" : "OR" } +{ "_id" : "97204", "city" : "PORTLAND", "loc" : [ -122.674498, 45.51807 ], "pop" : 1094, "state" : "OR" } +{ "_id" : "97205", "city" : "PORTLAND", "loc" : [ -122.688846, 45.52072 ], "pop" : 5804, "state" : "OR" } +{ "_id" : "97206", "city" : "PORTLAND", "loc" : [ -122.59727, 45.483995 ], "pop" : 43134, "state" : "OR" } +{ "_id" : "97209", "city" : "PORTLAND", "loc" : [ -122.685447, 45.526962 ], "pop" : 5810, "state" : "OR" } +{ "_id" : "97210", "city" : "PORTLAND", "loc" : [ -122.703348, 45.530318 ], "pop" : 9284, "state" : "OR" } +{ "_id" : "97211", "city" : "PORTLAND", "loc" : [ -122.644815, 45.565259 ], "pop" : 28736, "state" : "OR" } +{ "_id" : "97212", "city" : "PORTLAND", "loc" : [ -122.642319, 45.544127 ], "pop" : 23898, "state" : "OR" } +{ "_id" : "97213", "city" : "PORTLAND", "loc" : [ -122.59867, 45.537292 ], "pop" : 29400, "state" : "OR" } +{ "_id" : "97214", "city" : "PORTLAND", "loc" : [ -122.636397, 45.514207 ], "pop" : 23413, "state" : "OR" } +{ "_id" : "97215", "city" : "PORTLAND", "loc" : [ -122.599001, 45.514282 ], "pop" : 16563, "state" : "OR" } +{ "_id" : "97216", "city" : "PORTLAND", "loc" : [ -122.55688, 45.513746 ], "pop" : 11436, "state" : "OR" } +{ "_id" : "97217", "city" : "PORTLAND", "loc" : [ -122.684196, 45.57424 ], "pop" : 29086, "state" : "OR" } +{ "_id" : "97218", "city" : "PORTLAND", "loc" : [ -122.600131, 45.560032 ], "pop" : 12305, "state" : "OR" } +{ "_id" : "97219", "city" : "PORTLAND", "loc" : [ -122.70738, 45.457956 ], "pop" : 34992, "state" : "OR" } +{ "_id" : "97220", "city" : "PORTLAND", "loc" : [ -122.556586, 45.541109 ], "pop" : 25679, "state" : "OR" } +{ "_id" : "97221", "city" : "PORTLAND", "loc" : [ -122.726723, 45.491829 ], "pop" : 10834, "state" : "OR" } +{ "_id" : "97222", "city" : "MILWAUKIE", "loc" : [ -122.615092, 45.442919 ], "pop" : 30905, "state" : "OR" } +{ "_id" : "97223", "city" : "GARDEN HOME", "loc" : [ -122.775974, 45.443343 ], "pop" : 33529, "state" : "OR" } +{ "_id" : "97224", "city" : "TIGARD", "loc" : [ -122.788379, 45.407292 ], "pop" : 17149, "state" : "OR" } +{ "_id" : "97225", "city" : "CEDAR HILLS", "loc" : [ -122.768344, 45.500449 ], "pop" : 20934, "state" : "OR" } +{ "_id" : "97227", "city" : "PORTLAND", "loc" : [ -122.674257, 45.549564 ], "pop" : 3171, "state" : "OR" } +{ "_id" : "97229", "city" : "PORTLAND", "loc" : [ -122.829924, 45.541087 ], "pop" : 23490, "state" : "OR" } +{ "_id" : "97230", "city" : "ROCKWOOD CORNERS", "loc" : [ -122.500343, 45.535753 ], "pop" : 30643, "state" : "OR" } +{ "_id" : "97231", "city" : "PORTLAND", "loc" : [ -122.838032, 45.640124 ], "pop" : 3760, "state" : "OR" } +{ "_id" : "97232", "city" : "PORTLAND", "loc" : [ -122.63631, 45.528712 ], "pop" : 10323, "state" : "OR" } +{ "_id" : "97233", "city" : "PORTLAND", "loc" : [ -122.498493, 45.514206 ], "pop" : 27274, "state" : "OR" } +{ "_id" : "97236", "city" : "PORTLAND", "loc" : [ -122.509091, 45.488748 ], "pop" : 24710, "state" : "OR" } +{ "_id" : "97266", "city" : "PORTLAND", "loc" : [ -122.559607, 45.476207 ], "pop" : 29648, "state" : "OR" } +{ "_id" : "97267", "city" : "OAK GROVE", "loc" : [ -122.610631, 45.407494 ], "pop" : 29597, "state" : "OR" } +{ "_id" : "97301", "city" : "SALEM", "loc" : [ -122.979692, 44.926039 ], "pop" : 48007, "state" : "OR" } +{ "_id" : "97302", "city" : "SALEM", "loc" : [ -123.044514, 44.903899 ], "pop" : 34814, "state" : "OR" } +{ "_id" : "97303", "city" : "KEIZER", "loc" : [ -123.019015, 44.985794 ], "pop" : 35826, "state" : "OR" } +{ "_id" : "97304", "city" : "SALEM", "loc" : [ -123.075323, 44.958846 ], "pop" : 16986, "state" : "OR" } +{ "_id" : "97305", "city" : "BROOKS", "loc" : [ -122.966892, 44.982502 ], "pop" : 28239, "state" : "OR" } +{ "_id" : "97306", "city" : "SALEM", "loc" : [ -123.043789, 44.8685 ], "pop" : 14770, "state" : "OR" } +{ "_id" : "97321", "city" : "ALBANY", "loc" : [ -123.094409, 44.627722 ], "pop" : 42908, "state" : "OR" } +{ "_id" : "97324", "city" : "ALSEA", "loc" : [ -123.60892, 44.369068 ], "pop" : 1008, "state" : "OR" } +{ "_id" : "97325", "city" : "WEST STAYTON", "loc" : [ -122.878575, 44.817817 ], "pop" : 4185, "state" : "OR" } +{ "_id" : "97326", "city" : "BLODGETT", "loc" : [ -123.606715, 44.628141 ], "pop" : 657, "state" : "OR" } +{ "_id" : "97327", "city" : "BROWNSVILLE", "loc" : [ -122.948491, 44.376974 ], "pop" : 3249, "state" : "OR" } +{ "_id" : "97329", "city" : "CASCADIA", "loc" : [ -122.464214, 44.392239 ], "pop" : 163, "state" : "OR" } +{ "_id" : "97330", "city" : "CORVALLIS", "loc" : [ -123.272171, 44.590411 ], "pop" : 38801, "state" : "OR" } +{ "_id" : "97331", "city" : "CORVALLIS", "loc" : [ -123.277889, 44.563783 ], "pop" : 2528, "state" : "OR" } +{ "_id" : "97333", "city" : "CORVALLIS", "loc" : [ -123.279908, 44.539281 ], "pop" : 13009, "state" : "OR" } +{ "_id" : "97338", "city" : "DALLAS", "loc" : [ -123.319991, 44.922534 ], "pop" : 14447, "state" : "OR" } +{ "_id" : "97341", "city" : "DEPOE BAY", "loc" : [ -124.03234, 44.851445 ], "pop" : 3022, "state" : "OR" } +{ "_id" : "97342", "city" : "DETROIT", "loc" : [ -122.18447, 44.776619 ], "pop" : 589, "state" : "OR" } +{ "_id" : "97343", "city" : "EDDYVILLE", "loc" : [ -123.753096, 44.637139 ], "pop" : 599, "state" : "OR" } +{ "_id" : "97344", "city" : "FALLS CITY", "loc" : [ -123.446149, 44.870597 ], "pop" : 957, "state" : "OR" } +{ "_id" : "97345", "city" : "FOSTER", "loc" : [ -122.544898, 44.383556 ], "pop" : 192, "state" : "OR" } +{ "_id" : "97346", "city" : "GATES", "loc" : [ -122.399498, 44.752716 ], "pop" : 697, "state" : "OR" } +{ "_id" : "97347", "city" : "GRAND RONDE", "loc" : [ -123.633518, 45.074973 ], "pop" : 1151, "state" : "OR" } +{ "_id" : "97348", "city" : "HALSEY", "loc" : [ -123.125103, 44.386151 ], "pop" : 1159, "state" : "OR" } +{ "_id" : "97350", "city" : "IDANHA", "loc" : [ -122.047574, 44.701484 ], "pop" : 340, "state" : "OR" } +{ "_id" : "97351", "city" : "INDEPENDENCE", "loc" : [ -123.187913, 44.848098 ], "pop" : 5955, "state" : "OR" } +{ "_id" : "97352", "city" : "JEFFERSON", "loc" : [ -123.00596, 44.749452 ], "pop" : 5829, "state" : "OR" } +{ "_id" : "97355", "city" : "LEBANON", "loc" : [ -122.882064, 44.531558 ], "pop" : 23147, "state" : "OR" } +{ "_id" : "97357", "city" : "LOGSDEN", "loc" : [ -123.773645, 44.747514 ], "pop" : 234, "state" : "OR" } +{ "_id" : "97358", "city" : "LYONS", "loc" : [ -122.820083, 44.776792 ], "pop" : 0, "state" : "OR" } +{ "_id" : "97360", "city" : "MILL CITY", "loc" : [ -122.476825, 44.751566 ], "pop" : 2340, "state" : "OR" } +{ "_id" : "97361", "city" : "MONMOUTH", "loc" : [ -123.251233, 44.837706 ], "pop" : 8071, "state" : "OR" } +{ "_id" : "97362", "city" : "MOUNT ANGEL", "loc" : [ -122.785611, 45.073727 ], "pop" : 4747, "state" : "OR" } +{ "_id" : "97364", "city" : "NEOTSU", "loc" : [ -123.984337, 44.998801 ], "pop" : 347, "state" : "OR" } +{ "_id" : "97365", "city" : "NEWPORT", "loc" : [ -124.050903, 44.648653 ], "pop" : 9239, "state" : "OR" } +{ "_id" : "97366", "city" : "SOUTH BEACH", "loc" : [ -124.059968, 44.57122 ], "pop" : 1423, "state" : "OR" } +{ "_id" : "97367", "city" : "LINCOLN CITY", "loc" : [ -123.99556, 44.968139 ], "pop" : 6786, "state" : "OR" } +{ "_id" : "97368", "city" : "OTIS", "loc" : [ -123.933244, 45.013755 ], "pop" : 2506, "state" : "OR" } +{ "_id" : "97370", "city" : "PHILOMATH", "loc" : [ -123.392271, 44.548817 ], "pop" : 6879, "state" : "OR" } +{ "_id" : "97371", "city" : "RICKREALL", "loc" : [ -123.206424, 45.020032 ], "pop" : 266, "state" : "OR" } +{ "_id" : "97374", "city" : "SCIO", "loc" : [ -122.768356, 44.716792 ], "pop" : 7170, "state" : "OR" } +{ "_id" : "97375", "city" : "SCOTTS MILLS", "loc" : [ -122.665418, 45.022 ], "pop" : 1326, "state" : "OR" } +{ "_id" : "97376", "city" : "SEAL ROCK", "loc" : [ -124.060708, 44.477749 ], "pop" : 1845, "state" : "OR" } +{ "_id" : "97377", "city" : "SHEDD", "loc" : [ -123.106462, 44.452951 ], "pop" : 1067, "state" : "OR" } +{ "_id" : "97378", "city" : "SHERIDAN", "loc" : [ -123.400335, 45.089703 ], "pop" : 6591, "state" : "OR" } +{ "_id" : "97380", "city" : "SILETZ", "loc" : [ -123.906239, 44.731333 ], "pop" : 1869, "state" : "OR" } +{ "_id" : "97381", "city" : "SILVERTON", "loc" : [ -122.762724, 44.991041 ], "pop" : 10399, "state" : "OR" } +{ "_id" : "97383", "city" : "STAYTON", "loc" : [ -122.76241, 44.80211 ], "pop" : 6808, "state" : "OR" } +{ "_id" : "97385", "city" : "SUBLIMITY", "loc" : [ -122.800718, 44.842523 ], "pop" : 2881, "state" : "OR" } +{ "_id" : "97386", "city" : "SWEET HOME", "loc" : [ -122.728561, 44.398111 ], "pop" : 11237, "state" : "OR" } +{ "_id" : "97389", "city" : "TANGENT", "loc" : [ -123.110815, 44.54973 ], "pop" : 1257, "state" : "OR" } +{ "_id" : "97390", "city" : "TIDEWATER", "loc" : [ -123.914861, 44.405538 ], "pop" : 523, "state" : "OR" } +{ "_id" : "97391", "city" : "TOLEDO", "loc" : [ -123.930119, 44.627082 ], "pop" : 5609, "state" : "OR" } +{ "_id" : "97392", "city" : "TURNER", "loc" : [ -122.950117, 44.847607 ], "pop" : 1243, "state" : "OR" } +{ "_id" : "97394", "city" : "WALDPORT", "loc" : [ -124.035053, 44.408497 ], "pop" : 3302, "state" : "OR" } +{ "_id" : "97396", "city" : "WILLAMINA", "loc" : [ -123.504708, 45.082605 ], "pop" : 2697, "state" : "OR" } +{ "_id" : "97401", "city" : "COBURG", "loc" : [ -123.078757, 44.073677 ], "pop" : 36277, "state" : "OR" } +{ "_id" : "97402", "city" : "EUGENE", "loc" : [ -123.155525, 44.061243 ], "pop" : 37830, "state" : "OR" } +{ "_id" : "97403", "city" : "EUGENE", "loc" : [ -123.061422, 44.038534 ], "pop" : 11073, "state" : "OR" } +{ "_id" : "97404", "city" : "EUGENE", "loc" : [ -123.13336, 44.100536 ], "pop" : 23778, "state" : "OR" } +{ "_id" : "97405", "city" : "EUGENE", "loc" : [ -123.099769, 44.018497 ], "pop" : 40921, "state" : "OR" } +{ "_id" : "97406", "city" : "AGNESS", "loc" : [ -124.064769, 42.574788 ], "pop" : 126, "state" : "OR" } +{ "_id" : "97410", "city" : "AZALEA", "loc" : [ -123.155017, 42.844992 ], "pop" : 1111, "state" : "OR" } +{ "_id" : "97411", "city" : "BANDON", "loc" : [ -124.40367, 43.096806 ], "pop" : 4852, "state" : "OR" } +{ "_id" : "97412", "city" : "BLACHLY", "loc" : [ -123.534816, 44.196597 ], "pop" : 495, "state" : "OR" } +{ "_id" : "97413", "city" : "MC KENZIE BRIDGE", "loc" : [ -122.222951, 44.177809 ], "pop" : 1139, "state" : "OR" } +{ "_id" : "97414", "city" : "BROADBENT", "loc" : [ -124.118924, 42.985048 ], "pop" : 121, "state" : "OR" } +{ "_id" : "97415", "city" : "HARBOR", "loc" : [ -124.267811, 42.064004 ], "pop" : 11673, "state" : "OR" } +{ "_id" : "97416", "city" : "CAMAS VALLEY", "loc" : [ -123.665465, 43.05566 ], "pop" : 972, "state" : "OR" } +{ "_id" : "97417", "city" : "CANYONVILLE", "loc" : [ -123.278015, 42.930683 ], "pop" : 1670, "state" : "OR" } +{ "_id" : "97419", "city" : "CHESHIRE", "loc" : [ -123.371516, 44.178206 ], "pop" : 1050, "state" : "OR" } +{ "_id" : "97420", "city" : "CHARLESTON", "loc" : [ -124.233101, 43.362812 ], "pop" : 24343, "state" : "OR" } +{ "_id" : "97423", "city" : "COQUILLE", "loc" : [ -124.201386, 43.188413 ], "pop" : 8374, "state" : "OR" } +{ "_id" : "97424", "city" : "COTTAGE GROVE", "loc" : [ -123.05291, 43.783934 ], "pop" : 15067, "state" : "OR" } +{ "_id" : "97426", "city" : "CRESWELL", "loc" : [ -123.02838, 43.90583 ], "pop" : 6332, "state" : "OR" } +{ "_id" : "97427", "city" : "CULP CREEK", "loc" : [ -122.752417, 43.684534 ], "pop" : 317, "state" : "OR" } +{ "_id" : "97429", "city" : "DAYS CREEK", "loc" : [ -123.14387, 42.981946 ], "pop" : 392, "state" : "OR" } +{ "_id" : "97430", "city" : "GREENLEAF", "loc" : [ -123.688328, 44.145131 ], "pop" : 492, "state" : "OR" } +{ "_id" : "97431", "city" : "DEXTER", "loc" : [ -122.842351, 43.921691 ], "pop" : 2980, "state" : "OR" } +{ "_id" : "97434", "city" : "DORENA", "loc" : [ -122.885796, 43.758655 ], "pop" : 225, "state" : "OR" } +{ "_id" : "97435", "city" : "DRAIN", "loc" : [ -123.292922, 43.687659 ], "pop" : 2331, "state" : "OR" } +{ "_id" : "97436", "city" : "ELKTON", "loc" : [ -123.590014, 43.637761 ], "pop" : 878, "state" : "OR" } +{ "_id" : "97437", "city" : "ELMIRA", "loc" : [ -123.367051, 44.08726 ], "pop" : 2424, "state" : "OR" } +{ "_id" : "97438", "city" : "FALL CREEK", "loc" : [ -122.785904, 43.95616 ], "pop" : 1581, "state" : "OR" } +{ "_id" : "97439", "city" : "FLORENCE", "loc" : [ -124.099303, 43.988099 ], "pop" : 10063, "state" : "OR" } +{ "_id" : "97441", "city" : "GARDINER", "loc" : [ -124.143695, 43.785736 ], "pop" : 14, "state" : "OR" } +{ "_id" : "97442", "city" : "GLENDALE", "loc" : [ -123.394302, 42.751751 ], "pop" : 2050, "state" : "OR" } +{ "_id" : "97443", "city" : "GLIDE", "loc" : [ -122.963846, 43.277395 ], "pop" : 2905, "state" : "OR" } +{ "_id" : "97444", "city" : "PISTOL RIVER", "loc" : [ -124.396072, 42.434818 ], "pop" : 4760, "state" : "OR" } +{ "_id" : "97446", "city" : "HARRISBURG", "loc" : [ -123.143165, 44.271656 ], "pop" : 3272, "state" : "OR" } +{ "_id" : "97447", "city" : "IDLEYLD PARK", "loc" : [ -122.901789, 43.371571 ], "pop" : 222, "state" : "OR" } +{ "_id" : "97448", "city" : "JUNCTION CITY", "loc" : [ -123.230014, 44.198792 ], "pop" : 10456, "state" : "OR" } +{ "_id" : "97449", "city" : "LAKESIDE", "loc" : [ -124.162364, 43.583306 ], "pop" : 994, "state" : "OR" } +{ "_id" : "97450", "city" : "LANGLOIS", "loc" : [ -124.441322, 42.915386 ], "pop" : 557, "state" : "OR" } +{ "_id" : "97451", "city" : "LORANE", "loc" : [ -123.247679, 43.829044 ], "pop" : 499, "state" : "OR" } +{ "_id" : "97452", "city" : "LOWELL", "loc" : [ -122.780627, 43.920993 ], "pop" : 792, "state" : "OR" } +{ "_id" : "97453", "city" : "MAPLETON", "loc" : [ -123.865735, 44.031189 ], "pop" : 1104, "state" : "OR" } +{ "_id" : "97454", "city" : "MARCOLA", "loc" : [ -122.82464, 44.206439 ], "pop" : 1442, "state" : "OR" } +{ "_id" : "97455", "city" : "PLEASANT HILL", "loc" : [ -122.928487, 43.945816 ], "pop" : 2218, "state" : "OR" } +{ "_id" : "97456", "city" : "MONROE", "loc" : [ -123.32033, 44.32446 ], "pop" : 2478, "state" : "OR" } +{ "_id" : "97457", "city" : "MYRTLE CREEK", "loc" : [ -123.285054, 43.016161 ], "pop" : 9453, "state" : "OR" } +{ "_id" : "97458", "city" : "MYRTLE POINT", "loc" : [ -124.121327, 43.066694 ], "pop" : 5246, "state" : "OR" } +{ "_id" : "97459", "city" : "NORTH BEND", "loc" : [ -124.213103, 43.432665 ], "pop" : 15269, "state" : "OR" } +{ "_id" : "97461", "city" : "NOTI", "loc" : [ -123.456962, 44.119509 ], "pop" : 1189, "state" : "OR" } +{ "_id" : "97462", "city" : "OAKLAND", "loc" : [ -123.355774, 43.452968 ], "pop" : 3315, "state" : "OR" } +{ "_id" : "97463", "city" : "OAKRIDGE", "loc" : [ -122.457711, 43.749767 ], "pop" : 4058, "state" : "OR" } +{ "_id" : "97465", "city" : "PORT ORFORD", "loc" : [ -124.491283, 42.757194 ], "pop" : 1799, "state" : "OR" } +{ "_id" : "97466", "city" : "POWERS", "loc" : [ -124.066441, 42.891006 ], "pop" : 953, "state" : "OR" } +{ "_id" : "97467", "city" : "WINCHESTER BAY", "loc" : [ -124.105476, 43.695701 ], "pop" : 6723, "state" : "OR" } +{ "_id" : "97468", "city" : "REMOTE", "loc" : [ -123.89149, 43.007909 ], "pop" : 121, "state" : "OR" } +{ "_id" : "97469", "city" : "RIDDLE", "loc" : [ -123.361247, 42.938867 ], "pop" : 2698, "state" : "OR" } +{ "_id" : "97470", "city" : "ROSEBURG", "loc" : [ -123.366437, 43.222726 ], "pop" : 41697, "state" : "OR" } +{ "_id" : "97473", "city" : "SCOTTSBURG", "loc" : [ -123.804065, 43.676481 ], "pop" : 329, "state" : "OR" } +{ "_id" : "97476", "city" : "SIXES", "loc" : [ -124.44093, 42.824984 ], "pop" : 412, "state" : "OR" } +{ "_id" : "97477", "city" : "SPRINGFIELD", "loc" : [ -123.015259, 44.06106 ], "pop" : 32384, "state" : "OR" } +{ "_id" : "97478", "city" : "SPRINGFIELD", "loc" : [ -122.917108, 44.056056 ], "pop" : 27521, "state" : "OR" } +{ "_id" : "97479", "city" : "SUTHERLIN", "loc" : [ -123.297425, 43.390404 ], "pop" : 7304, "state" : "OR" } +{ "_id" : "97480", "city" : "SWISSHOME", "loc" : [ -123.827899, 44.089903 ], "pop" : 641, "state" : "OR" } +{ "_id" : "97481", "city" : "TENMILE", "loc" : [ -123.530104, 43.137116 ], "pop" : 1231, "state" : "OR" } +{ "_id" : "97484", "city" : "TILLER", "loc" : [ -122.908088, 42.985896 ], "pop" : 534, "state" : "OR" } +{ "_id" : "97486", "city" : "UMPQUA", "loc" : [ -123.535771, 43.374537 ], "pop" : 587, "state" : "OR" } +{ "_id" : "97487", "city" : "VENETA", "loc" : [ -123.35159, 44.038235 ], "pop" : 6004, "state" : "OR" } +{ "_id" : "97488", "city" : "VIDA", "loc" : [ -122.504429, 44.130041 ], "pop" : 1040, "state" : "OR" } +{ "_id" : "97489", "city" : "LEABURG", "loc" : [ -122.629064, 44.135163 ], "pop" : 432, "state" : "OR" } +{ "_id" : "97490", "city" : "WALTON", "loc" : [ -123.589304, 44.028194 ], "pop" : 298, "state" : "OR" } +{ "_id" : "97492", "city" : "WESTFIR", "loc" : [ -122.514095, 43.756636 ], "pop" : 514, "state" : "OR" } +{ "_id" : "97493", "city" : "WESTLAKE", "loc" : [ -124.033364, 43.914017 ], "pop" : 272, "state" : "OR" } +{ "_id" : "97496", "city" : "WINSTON", "loc" : [ -123.432481, 43.104855 ], "pop" : 5971, "state" : "OR" } +{ "_id" : "97497", "city" : "SUNNY VALLEY", "loc" : [ -123.351538, 42.655128 ], "pop" : 1253, "state" : "OR" } +{ "_id" : "97498", "city" : "YACHATS", "loc" : [ -124.086262, 44.325563 ], "pop" : 1235, "state" : "OR" } +{ "_id" : "97499", "city" : "YONCALLA", "loc" : [ -123.292562, 43.60434 ], "pop" : 2261, "state" : "OR" } +{ "_id" : "97501", "city" : "WEST MAIN", "loc" : [ -122.887011, 42.319293 ], "pop" : 28708, "state" : "OR" } +{ "_id" : "97502", "city" : "CENTRAL POINT", "loc" : [ -122.922235, 42.389914 ], "pop" : 17293, "state" : "OR" } +{ "_id" : "97503", "city" : "WHITE CITY", "loc" : [ -122.82962, 42.431919 ], "pop" : 7024, "state" : "OR" } +{ "_id" : "97504", "city" : "MEDFORD", "loc" : [ -122.839801, 42.336251 ], "pop" : 30933, "state" : "OR" } +{ "_id" : "97520", "city" : "ASHLAND", "loc" : [ -122.693033, 42.188509 ], "pop" : 19579, "state" : "OR" } +{ "_id" : "97522", "city" : "BUTTE FALLS", "loc" : [ -122.563801, 42.549243 ], "pop" : 1115, "state" : "OR" } +{ "_id" : "97523", "city" : "CAVE JUNCTION", "loc" : [ -123.627199, 42.134789 ], "pop" : 5500, "state" : "OR" } +{ "_id" : "97524", "city" : "EAGLE POINT", "loc" : [ -122.808802, 42.493467 ], "pop" : 7468, "state" : "OR" } +{ "_id" : "97525", "city" : "GOLD HILL", "loc" : [ -123.08543, 42.424436 ], "pop" : 6650, "state" : "OR" } +{ "_id" : "97526", "city" : "GRANTS PASS", "loc" : [ -123.345727, 42.463758 ], "pop" : 27145, "state" : "OR" } +{ "_id" : "97527", "city" : "GRANTS PASS", "loc" : [ -123.353799, 42.398913 ], "pop" : 21774, "state" : "OR" } +{ "_id" : "97530", "city" : "APPLEGATE", "loc" : [ -123.028098, 42.254894 ], "pop" : 5723, "state" : "OR" } +{ "_id" : "97531", "city" : "KERBY", "loc" : [ -123.657302, 42.209343 ], "pop" : 78, "state" : "OR" } +{ "_id" : "97532", "city" : "MERLIN", "loc" : [ -123.439256, 42.529654 ], "pop" : 1806, "state" : "OR" } +{ "_id" : "97534", "city" : "O BRIEN", "loc" : [ -123.720898, 42.068816 ], "pop" : 247, "state" : "OR" } +{ "_id" : "97535", "city" : "PHOENIX", "loc" : [ -122.822694, 42.276555 ], "pop" : 6054, "state" : "OR" } +{ "_id" : "97536", "city" : "PROSPECT", "loc" : [ -122.50898, 42.754394 ], "pop" : 869, "state" : "OR" } +{ "_id" : "97537", "city" : "ROGUE RIVER", "loc" : [ -123.158726, 42.488889 ], "pop" : 6131, "state" : "OR" } +{ "_id" : "97538", "city" : "SELMA", "loc" : [ -123.568394, 42.296358 ], "pop" : 2065, "state" : "OR" } +{ "_id" : "97539", "city" : "SHADY COVE", "loc" : [ -122.812191, 42.607575 ], "pop" : 2364, "state" : "OR" } +{ "_id" : "97540", "city" : "TALENT", "loc" : [ -122.78605, 42.236252 ], "pop" : 5288, "state" : "OR" } +{ "_id" : "97541", "city" : "TRAIL", "loc" : [ -122.816029, 42.686358 ], "pop" : 1028, "state" : "OR" } +{ "_id" : "97543", "city" : "WILDERVILLE", "loc" : [ -123.513861, 42.392483 ], "pop" : 927, "state" : "OR" } +{ "_id" : "97544", "city" : "WILLIAMS", "loc" : [ -123.282877, 42.223049 ], "pop" : 1854, "state" : "OR" } +{ "_id" : "97601", "city" : "ORETECH", "loc" : [ -121.786969, 42.229601 ], "pop" : 18626, "state" : "OR" } +{ "_id" : "97603", "city" : "KLAMATH FALLS", "loc" : [ -121.724124, 42.191915 ], "pop" : 24894, "state" : "OR" } +{ "_id" : "97620", "city" : "ADEL", "loc" : [ -119.883291, 42.148697 ], "pop" : 190, "state" : "OR" } +{ "_id" : "97621", "city" : "BEATTY", "loc" : [ -121.219962, 42.436942 ], "pop" : 95, "state" : "OR" } +{ "_id" : "97623", "city" : "BONANZA", "loc" : [ -121.333558, 42.246268 ], "pop" : 2753, "state" : "OR" } +{ "_id" : "97624", "city" : "CHILOQUIN", "loc" : [ -121.744959, 42.546293 ], "pop" : 3608, "state" : "OR" } +{ "_id" : "97625", "city" : "DAIRY", "loc" : [ -121.642453, 42.258141 ], "pop" : 8, "state" : "OR" } +{ "_id" : "97627", "city" : "KENO", "loc" : [ -121.972427, 42.175472 ], "pop" : 2696, "state" : "OR" } +{ "_id" : "97630", "city" : "LAKEVIEW", "loc" : [ -120.377533, 42.185443 ], "pop" : 4890, "state" : "OR" } +{ "_id" : "97632", "city" : "MALIN", "loc" : [ -121.422121, 42.019502 ], "pop" : 1456, "state" : "OR" } +{ "_id" : "97633", "city" : "MERRILL", "loc" : [ -121.598545, 42.029516 ], "pop" : 1344, "state" : "OR" } +{ "_id" : "97635", "city" : "NEW PINE CREEK", "loc" : [ -120.28939, 42.027759 ], "pop" : 198, "state" : "OR" } +{ "_id" : "97636", "city" : "PAISLEY", "loc" : [ -120.553208, 42.703089 ], "pop" : 619, "state" : "OR" } +{ "_id" : "97637", "city" : "PLUSH", "loc" : [ -119.894722, 42.503493 ], "pop" : 126, "state" : "OR" } +{ "_id" : "97638", "city" : "SILVER LAKE", "loc" : [ -120.780109, 43.258164 ], "pop" : 1127, "state" : "OR" } +{ "_id" : "97640", "city" : "SUMMER LAKE", "loc" : [ -121.063254, 42.831302 ], "pop" : 1, "state" : "OR" } +{ "_id" : "97701", "city" : "BEND", "loc" : [ -121.293632, 44.092788 ], "pop" : 29432, "state" : "OR" } +{ "_id" : "97702", "city" : "BEND", "loc" : [ -121.298543, 44.022332 ], "pop" : 20214, "state" : "OR" } +{ "_id" : "97707", "city" : "SUNRIVER", "loc" : [ -121.457871, 43.850336 ], "pop" : 2881, "state" : "OR" } +{ "_id" : "97711", "city" : "ASHWOOD", "loc" : [ -120.719161, 44.719479 ], "pop" : 114, "state" : "OR" } +{ "_id" : "97712", "city" : "BROTHERS", "loc" : [ -120.477035, 43.778877 ], "pop" : 41, "state" : "OR" } +{ "_id" : "97720", "city" : "BURNS", "loc" : [ -119.050398, 43.51451 ], "pop" : 5844, "state" : "OR" } +{ "_id" : "97730", "city" : "CAMP SHERMAN", "loc" : [ -121.639363, 44.454997 ], "pop" : 378, "state" : "OR" } +{ "_id" : "97731", "city" : "DIAMOND LAKE", "loc" : [ -121.8447, 43.124669 ], "pop" : 388, "state" : "OR" } +{ "_id" : "97732", "city" : "CRANE", "loc" : [ -118.4642, 43.426219 ], "pop" : 280, "state" : "OR" } +{ "_id" : "97733", "city" : "CRESCENT", "loc" : [ -121.664813, 43.497226 ], "pop" : 1848, "state" : "OR" } +{ "_id" : "97734", "city" : "CULVER", "loc" : [ -121.234353, 44.481796 ], "pop" : 2517, "state" : "OR" } +{ "_id" : "97735", "city" : "FORT ROCK", "loc" : [ -121.08243, 43.44615 ], "pop" : 35, "state" : "OR" } +{ "_id" : "97737", "city" : "GILCHRIST", "loc" : [ -121.886596, 43.30759 ], "pop" : 148, "state" : "OR" } +{ "_id" : "97739", "city" : "LA PINE", "loc" : [ -121.519445, 43.709125 ], "pop" : 4815, "state" : "OR" } +{ "_id" : "97740", "city" : "LAWEN", "loc" : [ -118.8418, 43.561816 ], "pop" : 708, "state" : "OR" } +{ "_id" : "97741", "city" : "MADRAS", "loc" : [ -121.134924, 44.637579 ], "pop" : 8294, "state" : "OR" } +{ "_id" : "97750", "city" : "MITCHELL", "loc" : [ -120.145579, 44.565734 ], "pop" : 394, "state" : "OR" } +{ "_id" : "97751", "city" : "PAULINA", "loc" : [ -119.782768, 44.210243 ], "pop" : 98, "state" : "OR" } +{ "_id" : "97752", "city" : "POST", "loc" : [ -120.299781, 44.079273 ], "pop" : 252, "state" : "OR" } +{ "_id" : "97753", "city" : "POWELL BUTTE", "loc" : [ -121.011326, 44.241512 ], "pop" : 1056, "state" : "OR" } +{ "_id" : "97754", "city" : "PRINEVILLE", "loc" : [ -120.833616, 44.30445 ], "pop" : 12484, "state" : "OR" } +{ "_id" : "97756", "city" : "REDMOND", "loc" : [ -121.189604, 44.27669 ], "pop" : 12161, "state" : "OR" } +{ "_id" : "97758", "city" : "RILEY", "loc" : [ -116.900621, 44.930529 ], "pop" : 157, "state" : "OR" } +{ "_id" : "97759", "city" : "BLACK BUTTE RANC", "loc" : [ -121.524133, 44.307329 ], "pop" : 3534, "state" : "OR" } +{ "_id" : "97760", "city" : "CROOKED RIVER RA", "loc" : [ -121.167565, 44.355505 ], "pop" : 2101, "state" : "OR" } +{ "_id" : "97761", "city" : "WARM SPRINGS", "loc" : [ -121.290941, 44.746826 ], "pop" : 2400, "state" : "OR" } +{ "_id" : "97801", "city" : "PENDLETON", "loc" : [ -118.783104, 45.660535 ], "pop" : 20225, "state" : "OR" } +{ "_id" : "97810", "city" : "ADAMS", "loc" : [ -118.617582, 45.749678 ], "pop" : 609, "state" : "OR" } +{ "_id" : "97812", "city" : "ARLINGTON", "loc" : [ -120.197148, 45.666417 ], "pop" : 708, "state" : "OR" } +{ "_id" : "97813", "city" : "ATHENA", "loc" : [ -118.497147, 45.828893 ], "pop" : 1334, "state" : "OR" } +{ "_id" : "97814", "city" : "MEDICAL SPRINGS", "loc" : [ -117.828631, 44.780102 ], "pop" : 10024, "state" : "OR" } +{ "_id" : "97818", "city" : "BOARDMAN", "loc" : [ -119.72057, 45.827165 ], "pop" : 2143, "state" : "OR" } +{ "_id" : "97820", "city" : "CANYON CITY", "loc" : [ -118.950155, 44.410005 ], "pop" : 2806, "state" : "OR" } +{ "_id" : "97823", "city" : "CONDON", "loc" : [ -120.189834, 45.230587 ], "pop" : 1009, "state" : "OR" } +{ "_id" : "97824", "city" : "COVE", "loc" : [ -117.814741, 45.319902 ], "pop" : 1280, "state" : "OR" } +{ "_id" : "97825", "city" : "DAYVILLE", "loc" : [ -119.531178, 44.466307 ], "pop" : 144, "state" : "OR" } +{ "_id" : "97826", "city" : "ECHO", "loc" : [ -119.194904, 45.74109 ], "pop" : 648, "state" : "OR" } +{ "_id" : "97827", "city" : "ELGIN", "loc" : [ -117.91119, 45.594101 ], "pop" : 2549, "state" : "OR" } +{ "_id" : "97828", "city" : "ENTERPRISE", "loc" : [ -117.288808, 45.437037 ], "pop" : 3201, "state" : "OR" } +{ "_id" : "97830", "city" : "KINZUA", "loc" : [ -120.206699, 44.985289 ], "pop" : 564, "state" : "OR" } +{ "_id" : "97831", "city" : "FOX", "loc" : [ -119.291646, 44.660681 ], "pop" : 47, "state" : "OR" } +{ "_id" : "97833", "city" : "HAINES", "loc" : [ -117.97556, 44.877622 ], "pop" : 1642, "state" : "OR" } +{ "_id" : "97834", "city" : "HALFWAY", "loc" : [ -117.113152, 44.895272 ], "pop" : 1020, "state" : "OR" } +{ "_id" : "97835", "city" : "HELIX", "loc" : [ -118.722219, 45.866541 ], "pop" : 383, "state" : "OR" } +{ "_id" : "97836", "city" : "HEPPNER", "loc" : [ -119.536897, 45.348577 ], "pop" : 2127, "state" : "OR" } +{ "_id" : "97837", "city" : "HEREFORD", "loc" : [ -117.98896, 44.641048 ], "pop" : 287, "state" : "OR" } +{ "_id" : "97838", "city" : "HERMISTON", "loc" : [ -119.284876, 45.844992 ], "pop" : 16982, "state" : "OR" } +{ "_id" : "97839", "city" : "LEXINGTON", "loc" : [ -119.74636, 45.426362 ], "pop" : 519, "state" : "OR" } +{ "_id" : "97841", "city" : "IMBLER", "loc" : [ -117.954377, 45.459908 ], "pop" : 561, "state" : "OR" } +{ "_id" : "97842", "city" : "IMNAHA", "loc" : [ -116.825741, 45.513733 ], "pop" : 255, "state" : "OR" } +{ "_id" : "97843", "city" : "IONE", "loc" : [ -119.769034, 45.54033 ], "pop" : 535, "state" : "OR" } +{ "_id" : "97844", "city" : "IRRIGON", "loc" : [ -119.507016, 45.88768 ], "pop" : 2301, "state" : "OR" } +{ "_id" : "97845", "city" : "JOHN DAY", "loc" : [ -119.105157, 44.409977 ], "pop" : 1367, "state" : "OR" } +{ "_id" : "97846", "city" : "JOSEPH", "loc" : [ -117.212805, 45.349432 ], "pop" : 1749, "state" : "OR" } +{ "_id" : "97848", "city" : "KIMBERLY", "loc" : [ -119.596497, 44.72263 ], "pop" : 62, "state" : "OR" } +{ "_id" : "97850", "city" : "LA GRANDE", "loc" : [ -118.085228, 45.330435 ], "pop" : 15401, "state" : "OR" } +{ "_id" : "97856", "city" : "LONG CREEK", "loc" : [ -119.09702, 44.755416 ], "pop" : 442, "state" : "OR" } +{ "_id" : "97857", "city" : "LOSTINE", "loc" : [ -117.435909, 45.493861 ], "pop" : 456, "state" : "OR" } +{ "_id" : "97862", "city" : "MILTON FREEWATER", "loc" : [ -118.391172, 45.948581 ], "pop" : 9723, "state" : "OR" } +{ "_id" : "97864", "city" : "MONUMENT", "loc" : [ -119.430164, 44.818451 ], "pop" : 410, "state" : "OR" } +{ "_id" : "97865", "city" : "MOUNT VERNON", "loc" : [ -119.112142, 44.417095 ], "pop" : 538, "state" : "OR" } +{ "_id" : "97867", "city" : "NORTH POWDER", "loc" : [ -117.933666, 45.031667 ], "pop" : 571, "state" : "OR" } +{ "_id" : "97868", "city" : "PILOT ROCK", "loc" : [ -118.848331, 45.422724 ], "pop" : 2298, "state" : "OR" } +{ "_id" : "97869", "city" : "PRAIRIE CITY", "loc" : [ -118.695199, 44.456977 ], "pop" : 1614, "state" : "OR" } +{ "_id" : "97870", "city" : "RICHLAND", "loc" : [ -117.301825, 44.797013 ], "pop" : 927, "state" : "OR" } +{ "_id" : "97872", "city" : "RITTER", "loc" : [ -118.941818, 44.95404 ], "pop" : 71, "state" : "OR" } +{ "_id" : "97873", "city" : "SENECA", "loc" : [ -119.057797, 44.127704 ], "pop" : 352, "state" : "OR" } +{ "_id" : "97874", "city" : "SPRAY", "loc" : [ -119.830318, 44.824186 ], "pop" : 438, "state" : "OR" } +{ "_id" : "97875", "city" : "STANFIELD", "loc" : [ -119.211602, 45.785988 ], "pop" : 2031, "state" : "OR" } +{ "_id" : "97876", "city" : "SUMMERVILLE", "loc" : [ -118.026978, 45.507687 ], "pop" : 773, "state" : "OR" } +{ "_id" : "97877", "city" : "SUMPTER", "loc" : [ -118.190604, 44.73164 ], "pop" : 251, "state" : "OR" } +{ "_id" : "97882", "city" : "MCNARY", "loc" : [ -119.313715, 45.915725 ], "pop" : 4009, "state" : "OR" } +{ "_id" : "97883", "city" : "UNION", "loc" : [ -117.853554, 45.201939 ], "pop" : 2463, "state" : "OR" } +{ "_id" : "97884", "city" : "UNITY", "loc" : [ -118.16273, 44.449063 ], "pop" : 315, "state" : "OR" } +{ "_id" : "97885", "city" : "WALLOWA", "loc" : [ -117.535727, 45.571722 ], "pop" : 1250, "state" : "OR" } +{ "_id" : "97886", "city" : "WESTON", "loc" : [ -118.373279, 45.807365 ], "pop" : 1007, "state" : "OR" } +{ "_id" : "97901", "city" : "ADRIAN", "loc" : [ -117.060193, 43.653712 ], "pop" : 568, "state" : "OR" } +{ "_id" : "97902", "city" : "AROCK", "loc" : [ -117.034189, 43.970896 ], "pop" : 846, "state" : "OR" } +{ "_id" : "97903", "city" : "BROGAN", "loc" : [ -117.590371, 44.199396 ], "pop" : 205, "state" : "OR" } +{ "_id" : "97904", "city" : "DREWSEY", "loc" : [ -118.47066, 43.864277 ], "pop" : 228, "state" : "OR" } +{ "_id" : "97906", "city" : "HARPER", "loc" : [ -117.528433, 43.873363 ], "pop" : 326, "state" : "OR" } +{ "_id" : "97907", "city" : "HUNTINGTON", "loc" : [ -117.309691, 44.381113 ], "pop" : 694, "state" : "OR" } +{ "_id" : "97908", "city" : "IRONSIDE", "loc" : [ -117.944435, 44.300913 ], "pop" : 79, "state" : "OR" } +{ "_id" : "97909", "city" : "JAMIESON", "loc" : [ -117.437269, 44.181873 ], "pop" : 53, "state" : "OR" } +{ "_id" : "97910", "city" : "JORDAN VALLEY", "loc" : [ -117.280984, 42.880139 ], "pop" : 879, "state" : "OR" } +{ "_id" : "97911", "city" : "JUNTURA", "loc" : [ -118.092118, 43.825277 ], "pop" : 83, "state" : "OR" } +{ "_id" : "97913", "city" : "NYSSA", "loc" : [ -117.025113, 43.860386 ], "pop" : 5288, "state" : "OR" } +{ "_id" : "97914", "city" : "ONTARIO", "loc" : [ -116.978268, 44.04156 ], "pop" : 13665, "state" : "OR" } +{ "_id" : "97917", "city" : "RIVERSIDE", "loc" : [ -118.095769, 43.467415 ], "pop" : 65, "state" : "OR" } +{ "_id" : "97918", "city" : "VALE", "loc" : [ -117.267412, 44.003902 ], "pop" : 3940, "state" : "OR" } +{ "_id" : "97920", "city" : "WESTFALL", "loc" : [ -117.687673, 43.992246 ], "pop" : 41, "state" : "OR" } +{ "_id" : "98001", "city" : "ALGONA", "loc" : [ -122.270057, 47.316339 ], "pop" : 22846, "state" : "WA" } +{ "_id" : "98002", "city" : "AUBURN", "loc" : [ -122.206741, 47.30503 ], "pop" : 38163, "state" : "WA" } +{ "_id" : "98003", "city" : "FEDERAL WAY", "loc" : [ -122.311726, 47.3203 ], "pop" : 34573, "state" : "WA" } +{ "_id" : "98004", "city" : "BEAUX ARTS", "loc" : [ -122.207371, 47.619899 ], "pop" : 23724, "state" : "WA" } +{ "_id" : "98005", "city" : "BELLEVUE", "loc" : [ -122.166288, 47.614961 ], "pop" : 14297, "state" : "WA" } +{ "_id" : "98006", "city" : "BELLEVUE", "loc" : [ -122.155179, 47.561425 ], "pop" : 26775, "state" : "WA" } +{ "_id" : "98007", "city" : "BELLEVUE", "loc" : [ -122.142572, 47.617443 ], "pop" : 21887, "state" : "WA" } +{ "_id" : "98008", "city" : "BELLEVUE", "loc" : [ -122.116173, 47.611468 ], "pop" : 24046, "state" : "WA" } +{ "_id" : "98010", "city" : "BLACK DIAMOND", "loc" : [ -122.005265, 47.311372 ], "pop" : 1817, "state" : "WA" } +{ "_id" : "98011", "city" : "BOTHELL", "loc" : [ -122.2159, 47.749692 ], "pop" : 32985, "state" : "WA" } +{ "_id" : "98012", "city" : "MILL CREEK", "loc" : [ -122.206981, 47.848941 ], "pop" : 19247, "state" : "WA" } +{ "_id" : "98014", "city" : "CARNATION", "loc" : [ -121.911095, 47.638007 ], "pop" : 2808, "state" : "WA" } +{ "_id" : "98019", "city" : "DUVALL", "loc" : [ -121.936906, 47.724987 ], "pop" : 7866, "state" : "WA" } +{ "_id" : "98020", "city" : "WOODWAY", "loc" : [ -122.366949, 47.800693 ], "pop" : 17396, "state" : "WA" } +{ "_id" : "98021", "city" : "BOTHELL", "loc" : [ -122.224339, 47.791806 ], "pop" : 18013, "state" : "WA" } +{ "_id" : "98022", "city" : "ENUMCLAW", "loc" : [ -122.031429, 47.266545 ], "pop" : 34850, "state" : "WA" } +{ "_id" : "98023", "city" : "FEDERAL WAY", "loc" : [ -122.36123, 47.310358 ], "pop" : 38292, "state" : "WA" } +{ "_id" : "98024", "city" : "FALL CITY", "loc" : [ -121.889646, 47.568233 ], "pop" : 3213, "state" : "WA" } +{ "_id" : "98026", "city" : "EDMONDS", "loc" : [ -122.334463, 47.823324 ], "pop" : 33385, "state" : "WA" } +{ "_id" : "98027", "city" : "ISSAQUAH", "loc" : [ -122.033517, 47.550911 ], "pop" : 37255, "state" : "WA" } +{ "_id" : "98031", "city" : "KENT", "loc" : [ -122.193184, 47.388004 ], "pop" : 50515, "state" : "WA" } +{ "_id" : "98032", "city" : "KENT", "loc" : [ -122.285362, 47.377633 ], "pop" : 31379, "state" : "WA" } +{ "_id" : "98033", "city" : "KIRKLAND", "loc" : [ -122.189442, 47.678597 ], "pop" : 28211, "state" : "WA" } +{ "_id" : "98034", "city" : "KIRKLAND", "loc" : [ -122.196571, 47.718777 ], "pop" : 38266, "state" : "WA" } +{ "_id" : "98036", "city" : "BRIER", "loc" : [ -122.287789, 47.811825 ], "pop" : 28602, "state" : "WA" } +{ "_id" : "98037", "city" : "LYNNWOOD", "loc" : [ -122.282139, 47.850532 ], "pop" : 36995, "state" : "WA" } +{ "_id" : "98038", "city" : "MAPLE VALLEY", "loc" : [ -122.057413, 47.384526 ], "pop" : 13768, "state" : "WA" } +{ "_id" : "98040", "city" : "MERCER ISLAND", "loc" : [ -122.226562, 47.563149 ], "pop" : 20816, "state" : "WA" } +{ "_id" : "98042", "city" : "KENT", "loc" : [ -122.120615, 47.368044 ], "pop" : 22576, "state" : "WA" } +{ "_id" : "98043", "city" : "MOUNTLAKE TERRAC", "loc" : [ -122.304036, 47.793061 ], "pop" : 20059, "state" : "WA" } +{ "_id" : "98045", "city" : "NORTH BEND", "loc" : [ -121.757142, 47.475546 ], "pop" : 10083, "state" : "WA" } +{ "_id" : "98047", "city" : "PACIFIC", "loc" : [ -122.243481, 47.266605 ], "pop" : 3902, "state" : "WA" } +{ "_id" : "98051", "city" : "RAVENSDALE", "loc" : [ -121.987897, 47.415476 ], "pop" : 3778, "state" : "WA" } +{ "_id" : "98052", "city" : "REDMOND", "loc" : [ -122.123242, 47.671796 ], "pop" : 37639, "state" : "WA" } +{ "_id" : "98053", "city" : "REDMOND", "loc" : [ -122.038578, 47.646238 ], "pop" : 22112, "state" : "WA" } +{ "_id" : "98055", "city" : "RENTON", "loc" : [ -122.207484, 47.464759 ], "pop" : 17902, "state" : "WA" } +{ "_id" : "98056", "city" : "RENTON", "loc" : [ -122.181942, 47.507336 ], "pop" : 23790, "state" : "WA" } +{ "_id" : "98058", "city" : "RENTON", "loc" : [ -122.121586, 47.446507 ], "pop" : 10153, "state" : "WA" } +{ "_id" : "98059", "city" : "RENTON", "loc" : [ -122.151178, 47.467383 ], "pop" : 48197, "state" : "WA" } +{ "_id" : "98065", "city" : "SNOQUALMIE", "loc" : [ -121.822533, 47.529286 ], "pop" : 3913, "state" : "WA" } +{ "_id" : "98070", "city" : "VASHON", "loc" : [ -122.464415, 47.425949 ], "pop" : 9309, "state" : "WA" } +{ "_id" : "98072", "city" : "WOODINVILLE", "loc" : [ -122.127087, 47.768384 ], "pop" : 40666, "state" : "WA" } +{ "_id" : "98101", "city" : "SEATTLE", "loc" : [ -122.330456, 47.611435 ], "pop" : 5801, "state" : "WA" } +{ "_id" : "98102", "city" : "SEATTLE", "loc" : [ -122.320993, 47.63025 ], "pop" : 19000, "state" : "WA" } +{ "_id" : "98103", "city" : "SEATTLE", "loc" : [ -122.342621, 47.67335 ], "pop" : 39491, "state" : "WA" } +{ "_id" : "98104", "city" : "SEATTLE", "loc" : [ -122.325644, 47.603631 ], "pop" : 9680, "state" : "WA" } +{ "_id" : "98105", "city" : "SEATTLE", "loc" : [ -122.302236, 47.663266 ], "pop" : 37120, "state" : "WA" } +{ "_id" : "98106", "city" : "SEATTLE", "loc" : [ -122.354688, 47.534362 ], "pop" : 17510, "state" : "WA" } +{ "_id" : "98107", "city" : "SEATTLE", "loc" : [ -122.37626, 47.67012 ], "pop" : 18288, "state" : "WA" } +{ "_id" : "98108", "city" : "TUKWILA", "loc" : [ -122.306823, 47.547448 ], "pop" : 18776, "state" : "WA" } +{ "_id" : "98109", "city" : "SEATTLE", "loc" : [ -122.347615, 47.633875 ], "pop" : 13401, "state" : "WA" } +{ "_id" : "98110", "city" : "BAINBRIDGE ISLAN", "loc" : [ -122.531297, 47.645048 ], "pop" : 15846, "state" : "WA" } +{ "_id" : "98112", "city" : "SEATTLE", "loc" : [ -122.297157, 47.630115 ], "pop" : 19760, "state" : "WA" } +{ "_id" : "98115", "city" : "SEATTLE", "loc" : [ -122.296828, 47.684918 ], "pop" : 40454, "state" : "WA" } +{ "_id" : "98116", "city" : "SEATTLE", "loc" : [ -122.393445, 47.574591 ], "pop" : 20408, "state" : "WA" } +{ "_id" : "98117", "city" : "SEATTLE", "loc" : [ -122.377223, 47.687263 ], "pop" : 28572, "state" : "WA" } +{ "_id" : "98118", "city" : "SEATTLE", "loc" : [ -122.275021, 47.541234 ], "pop" : 36684, "state" : "WA" } +{ "_id" : "98119", "city" : "SEATTLE", "loc" : [ -122.364272, 47.637917 ], "pop" : 19064, "state" : "WA" } +{ "_id" : "98121", "city" : "SEATTLE", "loc" : [ -122.344696, 47.615135 ], "pop" : 4091, "state" : "WA" } +{ "_id" : "98122", "city" : "SEATTLE", "loc" : [ -122.305608, 47.611633 ], "pop" : 25105, "state" : "WA" } +{ "_id" : "98125", "city" : "SEATTLE", "loc" : [ -122.301546, 47.717002 ], "pop" : 31928, "state" : "WA" } +{ "_id" : "98126", "city" : "SEATTLE", "loc" : [ -122.373458, 47.544361 ], "pop" : 18627, "state" : "WA" } +{ "_id" : "98133", "city" : "SEATTLE", "loc" : [ -122.343132, 47.737717 ], "pop" : 39634, "state" : "WA" } +{ "_id" : "98134", "city" : "SEATTLE", "loc" : [ -122.326346, 47.590276 ], "pop" : 1437, "state" : "WA" } +{ "_id" : "98136", "city" : "SEATTLE", "loc" : [ -122.387768, 47.539769 ], "pop" : 13816, "state" : "WA" } +{ "_id" : "98144", "city" : "SEATTLE", "loc" : [ -122.300457, 47.584624 ], "pop" : 23333, "state" : "WA" } +{ "_id" : "98146", "city" : "BURIEN", "loc" : [ -122.353989, 47.501069 ], "pop" : 25963, "state" : "WA" } +{ "_id" : "98148", "city" : "NORMANDY PARK", "loc" : [ -122.326112, 47.450209 ], "pop" : 8818, "state" : "WA" } +{ "_id" : "98155", "city" : "LK FOREST PARK", "loc" : [ -122.296305, 47.758161 ], "pop" : 38296, "state" : "WA" } +{ "_id" : "98158", "city" : "SEATAC", "loc" : [ -122.318454, 47.442739 ], "pop" : 97, "state" : "WA" } +{ "_id" : "98166", "city" : "NORMANDY PARK", "loc" : [ -122.347392, 47.455052 ], "pop" : 19331, "state" : "WA" } +{ "_id" : "98168", "city" : "TUKWILA", "loc" : [ -122.302376, 47.48851 ], "pop" : 27990, "state" : "WA" } +{ "_id" : "98177", "city" : "SEATTLE", "loc" : [ -122.368585, 47.746678 ], "pop" : 18532, "state" : "WA" } +{ "_id" : "98178", "city" : "TUKWILA", "loc" : [ -122.247366, 47.499489 ], "pop" : 19522, "state" : "WA" } +{ "_id" : "98188", "city" : "TUKWILA", "loc" : [ -122.281159, 47.449808 ], "pop" : 18001, "state" : "WA" } +{ "_id" : "98198", "city" : "DES MOINES", "loc" : [ -122.309559, 47.407286 ], "pop" : 20550, "state" : "WA" } +{ "_id" : "98199", "city" : "SEATTLE", "loc" : [ -122.396357, 47.648845 ], "pop" : 18360, "state" : "WA" } +{ "_id" : "98201", "city" : "EVERETT", "loc" : [ -122.200571, 47.988431 ], "pop" : 26440, "state" : "WA" } +{ "_id" : "98203", "city" : "EVERETT", "loc" : [ -122.221846, 47.941937 ], "pop" : 26506, "state" : "WA" } +{ "_id" : "98204", "city" : "EVERETT", "loc" : [ -122.247217, 47.901659 ], "pop" : 20496, "state" : "WA" } +{ "_id" : "98205", "city" : "EVERETT", "loc" : [ -122.115759, 47.990065 ], "pop" : 10083, "state" : "WA" } +{ "_id" : "98208", "city" : "EVERETT", "loc" : [ -122.198722, 47.894822 ], "pop" : 32818, "state" : "WA" } +{ "_id" : "98220", "city" : "ACME", "loc" : [ -122.191391, 48.675248 ], "pop" : 471, "state" : "WA" } +{ "_id" : "98221", "city" : "ANACORTES", "loc" : [ -122.630873, 48.500438 ], "pop" : 12986, "state" : "WA" } +{ "_id" : "98223", "city" : "ARLINGTON", "loc" : [ -122.112126, 48.18293 ], "pop" : 24435, "state" : "WA" } +{ "_id" : "98224", "city" : "BARING", "loc" : [ -121.44757, 47.757787 ], "pop" : 210, "state" : "WA" } +{ "_id" : "98225", "city" : "BELLINGHAM", "loc" : [ -122.488676, 48.748957 ], "pop" : 38415, "state" : "WA" } +{ "_id" : "98226", "city" : "BELLINGHAM", "loc" : [ -122.441457, 48.762763 ], "pop" : 38518, "state" : "WA" } +{ "_id" : "98230", "city" : "BLAINE", "loc" : [ -122.732327, 48.963572 ], "pop" : 7057, "state" : "WA" } +{ "_id" : "98232", "city" : "BOW", "loc" : [ -122.413438, 48.562037 ], "pop" : 3245, "state" : "WA" } +{ "_id" : "98233", "city" : "BURLINGTON", "loc" : [ -122.33449, 48.478577 ], "pop" : 9113, "state" : "WA" } +{ "_id" : "98236", "city" : "CLINTON", "loc" : [ -122.391588, 47.950845 ], "pop" : 3242, "state" : "WA" } +{ "_id" : "98237", "city" : "CONCRETE", "loc" : [ -121.664294, 48.530962 ], "pop" : 3217, "state" : "WA" } +{ "_id" : "98239", "city" : "COUPEVILLE", "loc" : [ -122.682346, 48.218911 ], "pop" : 5753, "state" : "WA" } +{ "_id" : "98240", "city" : "CUSTER", "loc" : [ -122.622571, 48.937412 ], "pop" : 2791, "state" : "WA" } +{ "_id" : "98241", "city" : "DARRINGTON", "loc" : [ -121.591807, 48.249285 ], "pop" : 1761, "state" : "WA" } +{ "_id" : "98244", "city" : "GLACIER", "loc" : [ -122.153957, 48.803366 ], "pop" : 2110, "state" : "WA" } +{ "_id" : "98245", "city" : "EASTSOUND", "loc" : [ -122.937045, 48.665554 ], "pop" : 2259, "state" : "WA" } +{ "_id" : "98247", "city" : "EVERSON", "loc" : [ -122.332474, 48.90447 ], "pop" : 6986, "state" : "WA" } +{ "_id" : "98248", "city" : "FERNDALE", "loc" : [ -122.595293, 48.862531 ], "pop" : 13697, "state" : "WA" } +{ "_id" : "98249", "city" : "FREELAND", "loc" : [ -122.564086, 48.03417 ], "pop" : 2321, "state" : "WA" } +{ "_id" : "98250", "city" : "FRIDAY HARBOR", "loc" : [ -123.094717, 48.545416 ], "pop" : 2508, "state" : "WA" } +{ "_id" : "98252", "city" : "GRANITE FALLS", "loc" : [ -121.942752, 48.078977 ], "pop" : 3634, "state" : "WA" } +{ "_id" : "98253", "city" : "GREENBANK", "loc" : [ -122.587086, 48.124432 ], "pop" : 926, "state" : "WA" } +{ "_id" : "98257", "city" : "LA CONNER", "loc" : [ -122.53134, 48.409306 ], "pop" : 3154, "state" : "WA" } +{ "_id" : "98258", "city" : "LAKE STEVENS", "loc" : [ -122.067153, 48.017103 ], "pop" : 12728, "state" : "WA" } +{ "_id" : "98260", "city" : "LANGLEY", "loc" : [ -122.452992, 48.018672 ], "pop" : 6036, "state" : "WA" } +{ "_id" : "98261", "city" : "LOPEZ", "loc" : [ -122.967434, 48.520804 ], "pop" : 4147, "state" : "WA" } +{ "_id" : "98262", "city" : "LUMMI ISLAND", "loc" : [ -122.682285, 48.712765 ], "pop" : 628, "state" : "WA" } +{ "_id" : "98263", "city" : "LYMAN", "loc" : [ -122.016183, 48.525744 ], "pop" : 1887, "state" : "WA" } +{ "_id" : "98264", "city" : "LYNDEN", "loc" : [ -122.459153, 48.937225 ], "pop" : 12896, "state" : "WA" } +{ "_id" : "98270", "city" : "MARYSVILLE", "loc" : [ -122.156168, 48.065639 ], "pop" : 19966, "state" : "WA" } +{ "_id" : "98271", "city" : "MARYSVILLE", "loc" : [ -122.197956, 48.096572 ], "pop" : 19743, "state" : "WA" } +{ "_id" : "98272", "city" : "MONROE", "loc" : [ -121.947376, 47.85853 ], "pop" : 14143, "state" : "WA" } +{ "_id" : "98273", "city" : "MOUNT VERNON", "loc" : [ -122.326548, 48.416427 ], "pop" : 30295, "state" : "WA" } +{ "_id" : "98275", "city" : "MUKILTEO", "loc" : [ -122.301906, 47.919896 ], "pop" : 10373, "state" : "WA" } +{ "_id" : "98277", "city" : "OAK HARBOR", "loc" : [ -122.637439, 48.315096 ], "pop" : 32450, "state" : "WA" } +{ "_id" : "98278", "city" : "WHIDBEY ISLAND N", "loc" : [ -122.69005, 48.295271 ], "pop" : 3434, "state" : "WA" } +{ "_id" : "98279", "city" : "OLGA", "loc" : [ -122.836224, 48.655526 ], "pop" : 1029, "state" : "WA" } +{ "_id" : "98281", "city" : "POINT ROBERTS", "loc" : [ -123.055474, 48.987876 ], "pop" : 923, "state" : "WA" } +{ "_id" : "98283", "city" : "ROCKPORT", "loc" : [ -121.555352, 48.470388 ], "pop" : 157, "state" : "WA" } +{ "_id" : "98284", "city" : "SEDRO WOOLLEY", "loc" : [ -122.232943, 48.527405 ], "pop" : 14902, "state" : "WA" } +{ "_id" : "98288", "city" : "SKYKOMISH", "loc" : [ -121.371297, 47.692158 ], "pop" : 388, "state" : "WA" } +{ "_id" : "98290", "city" : "SNOHOMISH", "loc" : [ -122.071562, 47.895381 ], "pop" : 37327, "state" : "WA" } +{ "_id" : "98292", "city" : "STANWOOD", "loc" : [ -122.377978, 48.201067 ], "pop" : 19288, "state" : "WA" } +{ "_id" : "98294", "city" : "SULTAN", "loc" : [ -121.736869, 47.858942 ], "pop" : 7010, "state" : "WA" } +{ "_id" : "98295", "city" : "SUMAS", "loc" : [ -122.207425, 48.970763 ], "pop" : 2537, "state" : "WA" } +{ "_id" : "98303", "city" : "ANDERSON ISLAND", "loc" : [ -122.696025, 47.15872 ], "pop" : 548, "state" : "WA" } +{ "_id" : "98304", "city" : "ASHFORD", "loc" : [ -121.989791, 46.753121 ], "pop" : 339, "state" : "WA" } +{ "_id" : "98305", "city" : "BEAVER", "loc" : [ -124.305424, 48.067263 ], "pop" : 695, "state" : "WA" } +{ "_id" : "98310", "city" : "BREMERTON", "loc" : [ -122.629913, 47.601916 ], "pop" : 49057, "state" : "WA" } +{ "_id" : "98312", "city" : "BREMERTON", "loc" : [ -122.695786, 47.575424 ], "pop" : 28858, "state" : "WA" } +{ "_id" : "98314", "city" : "PUGET SOUND NAVA", "loc" : [ -122.724354, 47.746255 ], "pop" : 708, "state" : "WA" } +{ "_id" : "98315", "city" : "SILVERDALE", "loc" : [ -122.716106, 47.692017 ], "pop" : 3702, "state" : "WA" } +{ "_id" : "98320", "city" : "BRINNON", "loc" : [ -122.937509, 47.677596 ], "pop" : 1049, "state" : "WA" } +{ "_id" : "98321", "city" : "BUCKLEY", "loc" : [ -122.062098, 47.152449 ], "pop" : 10153, "state" : "WA" } +{ "_id" : "98323", "city" : "CARBONADO", "loc" : [ -122.051339, 47.080242 ], "pop" : 495, "state" : "WA" } +{ "_id" : "98325", "city" : "CHIMACUM", "loc" : [ -122.788323, 47.98607 ], "pop" : 1191, "state" : "WA" } +{ "_id" : "98326", "city" : "CLALLAM BAY", "loc" : [ -124.201512, 48.225486 ], "pop" : 384, "state" : "WA" } +{ "_id" : "98328", "city" : "EATONVILLE", "loc" : [ -122.269626, 46.870778 ], "pop" : 3972, "state" : "WA" } +{ "_id" : "98329", "city" : "GIG HARBOR", "loc" : [ -122.7, 47.378579 ], "pop" : 6678, "state" : "WA" } +{ "_id" : "98330", "city" : "ELBE", "loc" : [ -122.150344, 46.766607 ], "pop" : 103, "state" : "WA" } +{ "_id" : "98331", "city" : "FORKS", "loc" : [ -124.398949, 47.928732 ], "pop" : 6657, "state" : "WA" } +{ "_id" : "98332", "city" : "GIG HARBOR", "loc" : [ -122.600144, 47.3607 ], "pop" : 9138, "state" : "WA" } +{ "_id" : "98333", "city" : "FOX ISLAND", "loc" : [ -122.628579, 47.25238 ], "pop" : 2017, "state" : "WA" } +{ "_id" : "98335", "city" : "GIG HARBOR", "loc" : [ -122.608377, 47.300154 ], "pop" : 17299, "state" : "WA" } +{ "_id" : "98336", "city" : "GLENOMA", "loc" : [ -122.099014, 46.528266 ], "pop" : 657, "state" : "WA" } +{ "_id" : "98338", "city" : "GRAHAM", "loc" : [ -122.293648, 47.024575 ], "pop" : 11136, "state" : "WA" } +{ "_id" : "98339", "city" : "PORT HADLOCK", "loc" : [ -122.768151, 48.034531 ], "pop" : 2574, "state" : "WA" } +{ "_id" : "98340", "city" : "HANSVILLE", "loc" : [ -122.565509, 47.906143 ], "pop" : 1256, "state" : "WA" } +{ "_id" : "98346", "city" : "KINGSTON", "loc" : [ -122.525503, 47.810844 ], "pop" : 5507, "state" : "WA" } +{ "_id" : "98349", "city" : "HOME", "loc" : [ -122.74273, 47.247366 ], "pop" : 3373, "state" : "WA" } +{ "_id" : "98351", "city" : "LONGBRANCH", "loc" : [ -122.756126, 47.200737 ], "pop" : 733, "state" : "WA" } +{ "_id" : "98354", "city" : "MILTON", "loc" : [ -122.315514, 47.24827 ], "pop" : 3562, "state" : "WA" } +{ "_id" : "98355", "city" : "MINERAL", "loc" : [ -122.186056, 46.709635 ], "pop" : 814, "state" : "WA" } +{ "_id" : "98356", "city" : "MORTON", "loc" : [ -122.249573, 46.558056 ], "pop" : 2530, "state" : "WA" } +{ "_id" : "98358", "city" : "NORDLAND", "loc" : [ -122.692553, 48.04321 ], "pop" : 738, "state" : "WA" } +{ "_id" : "98359", "city" : "OLALLA", "loc" : [ -122.574512, 47.424088 ], "pop" : 3173, "state" : "WA" } +{ "_id" : "98360", "city" : "ORTING", "loc" : [ -122.185978, 47.082206 ], "pop" : 4493, "state" : "WA" } +{ "_id" : "98361", "city" : "PACKWOOD", "loc" : [ -121.655254, 46.650038 ], "pop" : 495, "state" : "WA" } +{ "_id" : "98362", "city" : "PORT ANGELES", "loc" : [ -123.438442, 48.106489 ], "pop" : 30373, "state" : "WA" } +{ "_id" : "98365", "city" : "PORT LUDLOW", "loc" : [ -122.689615, 47.922192 ], "pop" : 2229, "state" : "WA" } +{ "_id" : "98366", "city" : "SOUTH PARK VILLA", "loc" : [ -122.615276, 47.504838 ], "pop" : 44359, "state" : "WA" } +{ "_id" : "98368", "city" : "PORT TOWNSEND", "loc" : [ -122.794457, 48.104012 ], "pop" : 9870, "state" : "WA" } +{ "_id" : "98370", "city" : "POULSBO", "loc" : [ -122.627721, 47.742278 ], "pop" : 20554, "state" : "WA" } +{ "_id" : "98371", "city" : "PUYALLUP", "loc" : [ -122.315097, 47.199123 ], "pop" : 18207, "state" : "WA" } +{ "_id" : "98372", "city" : "PUYALLUP", "loc" : [ -122.273415, 47.204202 ], "pop" : 17053, "state" : "WA" } +{ "_id" : "98373", "city" : "PUYALLUP", "loc" : [ -122.321868, 47.128363 ], "pop" : 23219, "state" : "WA" } +{ "_id" : "98374", "city" : "PUYALLUP", "loc" : [ -122.265248, 47.142427 ], "pop" : 21982, "state" : "WA" } +{ "_id" : "98376", "city" : "QUILCENE", "loc" : [ -122.858304, 47.832429 ], "pop" : 1592, "state" : "WA" } +{ "_id" : "98377", "city" : "RANDLE", "loc" : [ -121.855533, 46.549195 ], "pop" : 2620, "state" : "WA" } +{ "_id" : "98380", "city" : "SEABECK", "loc" : [ -122.822685, 47.625497 ], "pop" : 2555, "state" : "WA" } +{ "_id" : "98381", "city" : "SEKIU", "loc" : [ -124.468467, 48.303166 ], "pop" : 2582, "state" : "WA" } +{ "_id" : "98382", "city" : "SEQUIM", "loc" : [ -123.119814, 48.088136 ], "pop" : 16523, "state" : "WA" } +{ "_id" : "98383", "city" : "SILVERDALE", "loc" : [ -122.698054, 47.662139 ], "pop" : 12276, "state" : "WA" } +{ "_id" : "98387", "city" : "SPANAWAY", "loc" : [ -122.394336, 47.073218 ], "pop" : 24035, "state" : "WA" } +{ "_id" : "98388", "city" : "STEILACOOM", "loc" : [ -122.588837, 47.170369 ], "pop" : 6099, "state" : "WA" } +{ "_id" : "98390", "city" : "BONNEY LAKE", "loc" : [ -122.180275, 47.188801 ], "pop" : 35436, "state" : "WA" } +{ "_id" : "98392", "city" : "SUQUAMISH", "loc" : [ -122.557295, 47.734303 ], "pop" : 1880, "state" : "WA" } +{ "_id" : "98394", "city" : "VAUGHN", "loc" : [ -122.773598, 47.330921 ], "pop" : 804, "state" : "WA" } +{ "_id" : "98402", "city" : "TACOMA", "loc" : [ -122.440536, 47.254508 ], "pop" : 2994, "state" : "WA" } +{ "_id" : "98403", "city" : "TACOMA", "loc" : [ -122.457538, 47.26428 ], "pop" : 7493, "state" : "WA" } +{ "_id" : "98404", "city" : "TACOMA", "loc" : [ -122.412625, 47.211312 ], "pop" : 27135, "state" : "WA" } +{ "_id" : "98405", "city" : "TACOMA", "loc" : [ -122.46435, 47.248351 ], "pop" : 23918, "state" : "WA" } +{ "_id" : "98406", "city" : "TACOMA", "loc" : [ -122.499349, 47.26325 ], "pop" : 22971, "state" : "WA" } +{ "_id" : "98407", "city" : "TACOMA", "loc" : [ -122.503881, 47.282479 ], "pop" : 19881, "state" : "WA" } +{ "_id" : "98408", "city" : "TACOMA", "loc" : [ -122.444381, 47.207267 ], "pop" : 28753, "state" : "WA" } +{ "_id" : "98409", "city" : "TACOMA", "loc" : [ -122.482503, 47.20381 ], "pop" : 25045, "state" : "WA" } +{ "_id" : "98421", "city" : "TACOMA", "loc" : [ -122.401457, 47.266373 ], "pop" : 508, "state" : "WA" } +{ "_id" : "98422", "city" : "TACOMA", "loc" : [ -122.398349, 47.294805 ], "pop" : 10385, "state" : "WA" } +{ "_id" : "98424", "city" : "FIFE", "loc" : [ -122.350962, 47.243632 ], "pop" : 5626, "state" : "WA" } +{ "_id" : "98433", "city" : "FORT LEWIS", "loc" : [ -122.583486, 47.100864 ], "pop" : 27463, "state" : "WA" } +{ "_id" : "98439", "city" : "LAKEWOOD CENTER", "loc" : [ -122.529326, 47.122905 ], "pop" : 3064, "state" : "WA" } +{ "_id" : "98443", "city" : "TACOMA", "loc" : [ -122.372815, 47.204369 ], "pop" : 5457, "state" : "WA" } +{ "_id" : "98444", "city" : "PARKLAND", "loc" : [ -122.448842, 47.156553 ], "pop" : 27406, "state" : "WA" } +{ "_id" : "98445", "city" : "PARKLAND", "loc" : [ -122.411614, 47.133967 ], "pop" : 20298, "state" : "WA" } +{ "_id" : "98446", "city" : "PARKLAND", "loc" : [ -122.37189, 47.14041 ], "pop" : 7156, "state" : "WA" } +{ "_id" : "98465", "city" : "TACOMA", "loc" : [ -122.527272, 47.249139 ], "pop" : 6919, "state" : "WA" } +{ "_id" : "98466", "city" : "FIRCREST", "loc" : [ -122.53503, 47.22788 ], "pop" : 22719, "state" : "WA" } +{ "_id" : "98467", "city" : "TACOMA", "loc" : [ -122.533562, 47.205395 ], "pop" : 12823, "state" : "WA" } +{ "_id" : "98498", "city" : "LAKEWOOD CENTER", "loc" : [ -122.555357, 47.164269 ], "pop" : 28193, "state" : "WA" } +{ "_id" : "98499", "city" : "LAKEWOOD CENTER", "loc" : [ -122.509074, 47.160786 ], "pop" : 20970, "state" : "WA" } +{ "_id" : "98501", "city" : "OLYMPIA", "loc" : [ -122.876311, 47.012906 ], "pop" : 25979, "state" : "WA" } +{ "_id" : "98502", "city" : "OLYMPIA", "loc" : [ -122.95214, 47.029828 ], "pop" : 40246, "state" : "WA" } +{ "_id" : "98503", "city" : "LACEY", "loc" : [ -122.782665, 47.023967 ], "pop" : 43492, "state" : "WA" } +{ "_id" : "98506", "city" : "LACEY", "loc" : [ -122.832844, 47.076259 ], "pop" : 24889, "state" : "WA" } +{ "_id" : "98520", "city" : "ABERDEEN", "loc" : [ -123.79629, 46.984293 ], "pop" : 22346, "state" : "WA" } +{ "_id" : "98524", "city" : "ALLYN", "loc" : [ -122.853571, 47.385004 ], "pop" : 2049, "state" : "WA" } +{ "_id" : "98526", "city" : "AMANDA PARK", "loc" : [ -123.907375, 47.470579 ], "pop" : 470, "state" : "WA" } +{ "_id" : "98528", "city" : "BEAR CREEK", "loc" : [ -122.822381, 47.454956 ], "pop" : 2351, "state" : "WA" } +{ "_id" : "98531", "city" : "CENTRALIA", "loc" : [ -122.967068, 46.724635 ], "pop" : 17633, "state" : "WA" } +{ "_id" : "98532", "city" : "CHEHALIS", "loc" : [ -122.965764, 46.638193 ], "pop" : 18065, "state" : "WA" } +{ "_id" : "98533", "city" : "CINEBAR", "loc" : [ -122.566005, 46.567131 ], "pop" : 796, "state" : "WA" } +{ "_id" : "98535", "city" : "COPALIS BEACH", "loc" : [ -124.135881, 47.065044 ], "pop" : 703, "state" : "WA" } +{ "_id" : "98536", "city" : "COPALIS CROSSING", "loc" : [ -124.13471, 47.12535 ], "pop" : 685, "state" : "WA" } +{ "_id" : "98537", "city" : "COSMOPOLIS", "loc" : [ -123.77394, 46.953789 ], "pop" : 1424, "state" : "WA" } +{ "_id" : "98538", "city" : "CURTIS", "loc" : [ -123.156974, 46.558372 ], "pop" : 449, "state" : "WA" } +{ "_id" : "98541", "city" : "ELMA", "loc" : [ -123.39969, 47.005813 ], "pop" : 7356, "state" : "WA" } +{ "_id" : "98542", "city" : "ETHEL", "loc" : [ -122.776009, 46.53581 ], "pop" : 320, "state" : "WA" } +{ "_id" : "98546", "city" : "GRAPEVIEW", "loc" : [ -122.949742, 47.305783 ], "pop" : 3234, "state" : "WA" } +{ "_id" : "98547", "city" : "GRAYLAND", "loc" : [ -124.056194, 46.853201 ], "pop" : 1677, "state" : "WA" } +{ "_id" : "98548", "city" : "HOODSPORT", "loc" : [ -123.173932, 47.423526 ], "pop" : 1165, "state" : "WA" } +{ "_id" : "98550", "city" : "HOQUIAM", "loc" : [ -123.884169, 46.982269 ], "pop" : 9597, "state" : "WA" } +{ "_id" : "98552", "city" : "HUMPTULIPS", "loc" : [ -123.971695, 47.135632 ], "pop" : 1301, "state" : "WA" } +{ "_id" : "98555", "city" : "LILLIWAUP", "loc" : [ -123.063119, 47.512773 ], "pop" : 635, "state" : "WA" } +{ "_id" : "98557", "city" : "MC CLEARY", "loc" : [ -123.273301, 47.053987 ], "pop" : 2644, "state" : "WA" } +{ "_id" : "98560", "city" : "MATLOCK", "loc" : [ -123.337638, 47.177545 ], "pop" : 1716, "state" : "WA" } +{ "_id" : "98562", "city" : "MOCLIPS", "loc" : [ -124.20438, 47.222619 ], "pop" : 574, "state" : "WA" } +{ "_id" : "98563", "city" : "MONTESANO", "loc" : [ -123.500584, 47.09013 ], "pop" : 10079, "state" : "WA" } +{ "_id" : "98564", "city" : "MOSSYROCK", "loc" : [ -122.478935, 46.513136 ], "pop" : 1390, "state" : "WA" } +{ "_id" : "98568", "city" : "OAKVILLE", "loc" : [ -123.249329, 46.843366 ], "pop" : 1915, "state" : "WA" } +{ "_id" : "98569", "city" : "OCEAN CITY", "loc" : [ -124.15323, 46.982905 ], "pop" : 2307, "state" : "WA" } +{ "_id" : "98570", "city" : "ONALASKA", "loc" : [ -122.707503, 46.573016 ], "pop" : 3077, "state" : "WA" } +{ "_id" : "98571", "city" : "PACIFIC BEACH", "loc" : [ -124.158833, 47.198144 ], "pop" : 122, "state" : "WA" } +{ "_id" : "98572", "city" : "PE ELL", "loc" : [ -123.285244, 46.56558 ], "pop" : 921, "state" : "WA" } +{ "_id" : "98575", "city" : "QUINAULT", "loc" : [ -123.803744, 47.448505 ], "pop" : 545, "state" : "WA" } +{ "_id" : "98576", "city" : "RAINIER", "loc" : [ -122.679468, 46.882942 ], "pop" : 2397, "state" : "WA" } +{ "_id" : "98577", "city" : "RAYMOND", "loc" : [ -123.692889, 46.671046 ], "pop" : 6144, "state" : "WA" } +{ "_id" : "98579", "city" : "ROCHESTER", "loc" : [ -123.040634, 46.819295 ], "pop" : 8231, "state" : "WA" } +{ "_id" : "98580", "city" : "ROY", "loc" : [ -122.448271, 46.956048 ], "pop" : 7730, "state" : "WA" } +{ "_id" : "98581", "city" : "RYDERWOOD", "loc" : [ -123.043134, 46.375176 ], "pop" : 330, "state" : "WA" } +{ "_id" : "98582", "city" : "SALKUM", "loc" : [ -122.645364, 46.515059 ], "pop" : 336, "state" : "WA" } +{ "_id" : "98584", "city" : "SHELTON", "loc" : [ -123.072862, 47.20863 ], "pop" : 19074, "state" : "WA" } +{ "_id" : "98585", "city" : "SILVER CREEK", "loc" : [ -122.475716, 46.549077 ], "pop" : 697, "state" : "WA" } +{ "_id" : "98586", "city" : "SOUTH BEND", "loc" : [ -123.820315, 46.6544 ], "pop" : 2575, "state" : "WA" } +{ "_id" : "98587", "city" : "TAHOLAH", "loc" : [ -124.2827, 47.340711 ], "pop" : 851, "state" : "WA" } +{ "_id" : "98588", "city" : "TAHUYA", "loc" : [ -122.921126, 47.435618 ], "pop" : 3794, "state" : "WA" } +{ "_id" : "98589", "city" : "TENINO", "loc" : [ -122.849269, 46.864119 ], "pop" : 6451, "state" : "WA" } +{ "_id" : "98590", "city" : "TOKELAND", "loc" : [ -124.046008, 46.746874 ], "pop" : 891, "state" : "WA" } +{ "_id" : "98591", "city" : "TOLEDO", "loc" : [ -122.826559, 46.439552 ], "pop" : 2829, "state" : "WA" } +{ "_id" : "98592", "city" : "UNION", "loc" : [ -123.034364, 47.351305 ], "pop" : 1592, "state" : "WA" } +{ "_id" : "98593", "city" : "VADER", "loc" : [ -122.958493, 46.398505 ], "pop" : 523, "state" : "WA" } +{ "_id" : "98595", "city" : "WESTPORT", "loc" : [ -124.106055, 46.883619 ], "pop" : 2463, "state" : "WA" } +{ "_id" : "98596", "city" : "WINLOCK", "loc" : [ -122.915806, 46.494014 ], "pop" : 5206, "state" : "WA" } +{ "_id" : "98597", "city" : "YELM", "loc" : [ -122.588049, 46.920589 ], "pop" : 9553, "state" : "WA" } +{ "_id" : "98601", "city" : "AMBOY", "loc" : [ -122.457418, 45.9195 ], "pop" : 1910, "state" : "WA" } +{ "_id" : "98602", "city" : "APPLETON", "loc" : [ -121.148618, 45.909041 ], "pop" : 13, "state" : "WA" } +{ "_id" : "98603", "city" : "ARIEL", "loc" : [ -122.46769, 45.995154 ], "pop" : 735, "state" : "WA" } +{ "_id" : "98604", "city" : "BATTLE GROUND", "loc" : [ -122.531845, 45.790667 ], "pop" : 16072, "state" : "WA" } +{ "_id" : "98605", "city" : "COOK", "loc" : [ -121.175778, 45.6341 ], "pop" : 954, "state" : "WA" } +{ "_id" : "98606", "city" : "BRUSH PRAIRIE", "loc" : [ -122.484342, 45.730432 ], "pop" : 6663, "state" : "WA" } +{ "_id" : "98607", "city" : "CAMAS", "loc" : [ -122.414231, 45.605772 ], "pop" : 12058, "state" : "WA" } +{ "_id" : "98610", "city" : "CARSON", "loc" : [ -121.835138, 45.749332 ], "pop" : 2009, "state" : "WA" } +{ "_id" : "98611", "city" : "CASTLE ROCK", "loc" : [ -122.9139, 46.278291 ], "pop" : 8455, "state" : "WA" } +{ "_id" : "98612", "city" : "CATHLAMET", "loc" : [ -123.362716, 46.195383 ], "pop" : 2114, "state" : "WA" } +{ "_id" : "98613", "city" : "CENTERVILLE", "loc" : [ -120.945973, 45.703183 ], "pop" : 681, "state" : "WA" } +{ "_id" : "98616", "city" : "COUGAR", "loc" : [ -122.294186, 46.069012 ], "pop" : 122, "state" : "WA" } +{ "_id" : "98619", "city" : "GLENWOOD", "loc" : [ -121.28849, 46.007104 ], "pop" : 549, "state" : "WA" } +{ "_id" : "98620", "city" : "GOLDENDALE", "loc" : [ -120.812981, 45.832021 ], "pop" : 5761, "state" : "WA" } +{ "_id" : "98621", "city" : "GRAYS RIVER", "loc" : [ -123.588845, 46.353481 ], "pop" : 209, "state" : "WA" } +{ "_id" : "98624", "city" : "ILWACO", "loc" : [ -124.02822, 46.314214 ], "pop" : 1210, "state" : "WA" } +{ "_id" : "98625", "city" : "KALAMA", "loc" : [ -122.816588, 46.011229 ], "pop" : 3627, "state" : "WA" } +{ "_id" : "98626", "city" : "KELSO", "loc" : [ -122.886994, 46.148491 ], "pop" : 20593, "state" : "WA" } +{ "_id" : "98628", "city" : "KLICKITAT", "loc" : [ -121.229231, 45.751534 ], "pop" : 23, "state" : "WA" } +{ "_id" : "98629", "city" : "LA CENTER", "loc" : [ -122.623972, 45.880587 ], "pop" : 3969, "state" : "WA" } +{ "_id" : "98631", "city" : "LONG BEACH", "loc" : [ -124.047041, 46.377369 ], "pop" : 3648, "state" : "WA" } +{ "_id" : "98632", "city" : "LONGVIEW", "loc" : [ -122.963421, 46.151354 ], "pop" : 42028, "state" : "WA" } +{ "_id" : "98635", "city" : "LYLE", "loc" : [ -121.250112, 45.74495 ], "pop" : 1583, "state" : "WA" } +{ "_id" : "98638", "city" : "NASELLE", "loc" : [ -123.804381, 46.352758 ], "pop" : 2177, "state" : "WA" } +{ "_id" : "98640", "city" : "OCEAN PARK", "loc" : [ -124.043582, 46.502867 ], "pop" : 2601, "state" : "WA" } +{ "_id" : "98642", "city" : "RIDGEFIELD", "loc" : [ -122.693354, 45.784634 ], "pop" : 7845, "state" : "WA" } +{ "_id" : "98643", "city" : "ROSBURG", "loc" : [ -123.657105, 46.307076 ], "pop" : 279, "state" : "WA" } +{ "_id" : "98645", "city" : "SILVERLAKE", "loc" : [ -122.764886, 46.316322 ], "pop" : 927, "state" : "WA" } +{ "_id" : "98647", "city" : "SKAMOKAWA", "loc" : [ -123.43316, 46.295186 ], "pop" : 361, "state" : "WA" } +{ "_id" : "98648", "city" : "STEVENSON", "loc" : [ -121.909346, 45.688173 ], "pop" : 3203, "state" : "WA" } +{ "_id" : "98649", "city" : "TOUTLE", "loc" : [ -122.647696, 46.295605 ], "pop" : 599, "state" : "WA" } +{ "_id" : "98650", "city" : "TROUT LAKE", "loc" : [ -121.516272, 45.982789 ], "pop" : 766, "state" : "WA" } +{ "_id" : "98651", "city" : "UNDERWOOD", "loc" : [ -121.597408, 45.740872 ], "pop" : 1161, "state" : "WA" } +{ "_id" : "98660", "city" : "VANCOUVER", "loc" : [ -122.68014, 45.64183 ], "pop" : 10432, "state" : "WA" } +{ "_id" : "98661", "city" : "VANCOUVER", "loc" : [ -122.625146, 45.641807 ], "pop" : 28837, "state" : "WA" } +{ "_id" : "98662", "city" : "ORCHARDS", "loc" : [ -122.576182, 45.674519 ], "pop" : 17842, "state" : "WA" } +{ "_id" : "98663", "city" : "VANCOUVER", "loc" : [ -122.660385, 45.6514 ], "pop" : 13198, "state" : "WA" } +{ "_id" : "98664", "city" : "VANCOUVER", "loc" : [ -122.576741, 45.623086 ], "pop" : 17179, "state" : "WA" } +{ "_id" : "98665", "city" : "HAZEL DELL", "loc" : [ -122.664223, 45.68217 ], "pop" : 16488, "state" : "WA" } +{ "_id" : "98670", "city" : "WAHKIACUS", "loc" : [ -121.148586, 45.815567 ], "pop" : 442, "state" : "WA" } +{ "_id" : "98671", "city" : "WASHOUGAL", "loc" : [ -122.310396, 45.595921 ], "pop" : 10873, "state" : "WA" } +{ "_id" : "98672", "city" : "WHITE SALMON", "loc" : [ -121.479459, 45.755142 ], "pop" : 5396, "state" : "WA" } +{ "_id" : "98674", "city" : "WOODLAND", "loc" : [ -122.71256, 45.921859 ], "pop" : 6266, "state" : "WA" } +{ "_id" : "98675", "city" : "YACOLT", "loc" : [ -122.427545, 45.862247 ], "pop" : 3295, "state" : "WA" } +{ "_id" : "98682", "city" : "VANCOUVER", "loc" : [ -122.521224, 45.664399 ], "pop" : 21359, "state" : "WA" } +{ "_id" : "98684", "city" : "CASCADE PARK", "loc" : [ -122.524969, 45.617522 ], "pop" : 26400, "state" : "WA" } +{ "_id" : "98685", "city" : "FELIDA", "loc" : [ -122.682474, 45.707313 ], "pop" : 13972, "state" : "WA" } +{ "_id" : "98686", "city" : "VANCOUVER", "loc" : [ -122.632226, 45.712017 ], "pop" : 9966, "state" : "WA" } +{ "_id" : "98801", "city" : "WENATCHEE", "loc" : [ -120.327345, 47.425269 ], "pop" : 28906, "state" : "WA" } +{ "_id" : "98802", "city" : "EAST WENATCHEE", "loc" : [ -120.273136, 47.418596 ], "pop" : 17975, "state" : "WA" } +{ "_id" : "98812", "city" : "BREWSTER", "loc" : [ -119.771999, 48.120641 ], "pop" : 3177, "state" : "WA" } +{ "_id" : "98813", "city" : "BRIDGEPORT", "loc" : [ -119.702772, 48.016083 ], "pop" : 2757, "state" : "WA" } +{ "_id" : "98814", "city" : "CARLTON", "loc" : [ -120.10551, 48.252615 ], "pop" : 332, "state" : "WA" } +{ "_id" : "98815", "city" : "CASHMERE", "loc" : [ -120.503274, 47.517293 ], "pop" : 7504, "state" : "WA" } +{ "_id" : "98816", "city" : "CHELAN", "loc" : [ -120.027306, 47.848263 ], "pop" : 4949, "state" : "WA" } +{ "_id" : "98822", "city" : "ENTIAT", "loc" : [ -120.276031, 47.705653 ], "pop" : 1507, "state" : "WA" } +{ "_id" : "98823", "city" : "EPHRATA", "loc" : [ -119.533582, 47.277051 ], "pop" : 8779, "state" : "WA" } +{ "_id" : "98826", "city" : "LEAVENWORTH", "loc" : [ -120.674792, 47.6438 ], "pop" : 4288, "state" : "WA" } +{ "_id" : "98827", "city" : "LOOMIS", "loc" : [ -119.642675, 48.869627 ], "pop" : 329, "state" : "WA" } +{ "_id" : "98828", "city" : "MALAGA", "loc" : [ -120.208562, 47.355306 ], "pop" : 1633, "state" : "WA" } +{ "_id" : "98830", "city" : "MANSFIELD", "loc" : [ -119.405315, 47.902136 ], "pop" : 960, "state" : "WA" } +{ "_id" : "98831", "city" : "MANSON", "loc" : [ -120.148963, 47.895764 ], "pop" : 2309, "state" : "WA" } +{ "_id" : "98832", "city" : "MARLIN", "loc" : [ -119.090897, 47.320929 ], "pop" : 856, "state" : "WA" } +{ "_id" : "98833", "city" : "MAZAMA", "loc" : [ -120.38796, 48.597728 ], "pop" : 115, "state" : "WA" } +{ "_id" : "98834", "city" : "METHOW", "loc" : [ -120.0059, 48.09001 ], "pop" : 623, "state" : "WA" } +{ "_id" : "98837", "city" : "MOSES LAKE", "loc" : [ -119.289149, 47.137363 ], "pop" : 22935, "state" : "WA" } +{ "_id" : "98840", "city" : "OKANOGAN", "loc" : [ -119.604563, 48.351328 ], "pop" : 3782, "state" : "WA" } +{ "_id" : "98841", "city" : "OMAK", "loc" : [ -119.527156, 48.414347 ], "pop" : 6059, "state" : "WA" } +{ "_id" : "98843", "city" : "ORONDO", "loc" : [ -120.172143, 47.696928 ], "pop" : 1424, "state" : "WA" } +{ "_id" : "98844", "city" : "OROVILLE", "loc" : [ -119.403236, 48.939681 ], "pop" : 3283, "state" : "WA" } +{ "_id" : "98845", "city" : "PALISADES", "loc" : [ -119.802264, 47.469367 ], "pop" : 36, "state" : "WA" } +{ "_id" : "98846", "city" : "PATEROS", "loc" : [ -119.913322, 48.059147 ], "pop" : 696, "state" : "WA" } +{ "_id" : "98847", "city" : "PESHASTIN", "loc" : [ -120.613928, 47.581294 ], "pop" : 1030, "state" : "WA" } +{ "_id" : "98848", "city" : "QUINCY", "loc" : [ -119.845922, 47.197574 ], "pop" : 7429, "state" : "WA" } +{ "_id" : "98849", "city" : "RIVERSIDE", "loc" : [ -119.580316, 48.487567 ], "pop" : 1871, "state" : "WA" } +{ "_id" : "98850", "city" : "ROCK ISLAND", "loc" : [ -120.137794, 47.370558 ], "pop" : 1336, "state" : "WA" } +{ "_id" : "98851", "city" : "SOAP LAKE", "loc" : [ -119.485962, 47.383034 ], "pop" : 2482, "state" : "WA" } +{ "_id" : "98852", "city" : "STEHEKIN", "loc" : [ -120.755185, 48.298034 ], "pop" : 124, "state" : "WA" } +{ "_id" : "98855", "city" : "TONASKET", "loc" : [ -119.394252, 48.71944 ], "pop" : 4921, "state" : "WA" } +{ "_id" : "98856", "city" : "TWISP", "loc" : [ -120.135035, 48.363231 ], "pop" : 1938, "state" : "WA" } +{ "_id" : "98857", "city" : "WARDEN", "loc" : [ -119.053932, 46.97697 ], "pop" : 2678, "state" : "WA" } +{ "_id" : "98858", "city" : "WATERVILLE", "loc" : [ -119.988743, 47.62951 ], "pop" : 1717, "state" : "WA" } +{ "_id" : "98859", "city" : "WAUCONDA", "loc" : [ -118.946947, 48.822449 ], "pop" : 325, "state" : "WA" } +{ "_id" : "98862", "city" : "WINTHROP", "loc" : [ -120.180468, 48.475607 ], "pop" : 1263, "state" : "WA" } +{ "_id" : "98901", "city" : "TERRACE HEIGHTS", "loc" : [ -120.477336, 46.606991 ], "pop" : 22057, "state" : "WA" } +{ "_id" : "98902", "city" : "YAKIMA", "loc" : [ -120.531084, 46.593393 ], "pop" : 39091, "state" : "WA" } +{ "_id" : "98903", "city" : "UNION GAP", "loc" : [ -120.556587, 46.5572 ], "pop" : 10498, "state" : "WA" } +{ "_id" : "98908", "city" : "WIDE HOLLOW", "loc" : [ -120.605175, 46.605865 ], "pop" : 27078, "state" : "WA" } +{ "_id" : "98922", "city" : "CLE ELUM", "loc" : [ -120.968505, 47.206319 ], "pop" : 5299, "state" : "WA" } +{ "_id" : "98923", "city" : "COWICHE", "loc" : [ -120.714893, 46.66611 ], "pop" : 920, "state" : "WA" } +{ "_id" : "98926", "city" : "ELLENSBURG", "loc" : [ -120.516274, 46.999632 ], "pop" : 20344, "state" : "WA" } +{ "_id" : "98930", "city" : "GRANDVIEW", "loc" : [ -119.915734, 46.253846 ], "pop" : 10558, "state" : "WA" } +{ "_id" : "98932", "city" : "GRANGER", "loc" : [ -120.181848, 46.348045 ], "pop" : 3562, "state" : "WA" } +{ "_id" : "98933", "city" : "HARRAH", "loc" : [ -120.573606, 46.410383 ], "pop" : 2643, "state" : "WA" } +{ "_id" : "98935", "city" : "MABTON", "loc" : [ -120.015141, 46.212082 ], "pop" : 3586, "state" : "WA" } +{ "_id" : "98936", "city" : "MOXEE", "loc" : [ -120.368463, 46.554205 ], "pop" : 4194, "state" : "WA" } +{ "_id" : "98937", "city" : "WHITE PASS", "loc" : [ -120.826699, 46.735335 ], "pop" : 2996, "state" : "WA" } +{ "_id" : "98938", "city" : "OUTLOOK", "loc" : [ -120.097005, 46.352497 ], "pop" : 1705, "state" : "WA" } +{ "_id" : "98942", "city" : "SELAH", "loc" : [ -120.540813, 46.67671 ], "pop" : 12507, "state" : "WA" } +{ "_id" : "98944", "city" : "SUNNYSIDE", "loc" : [ -120.012631, 46.321273 ], "pop" : 16774, "state" : "WA" } +{ "_id" : "98946", "city" : "THORP", "loc" : [ -120.678557, 47.017785 ], "pop" : 1082, "state" : "WA" } +{ "_id" : "98947", "city" : "TIETON", "loc" : [ -120.747275, 46.706331 ], "pop" : 2079, "state" : "WA" } +{ "_id" : "98948", "city" : "TOPPENISH", "loc" : [ -120.330534, 46.375123 ], "pop" : 11101, "state" : "WA" } +{ "_id" : "98951", "city" : "WAPATO", "loc" : [ -120.426484, 46.45066 ], "pop" : 10262, "state" : "WA" } +{ "_id" : "98952", "city" : "WHITE SWAN", "loc" : [ -120.745317, 46.371558 ], "pop" : 1941, "state" : "WA" } +{ "_id" : "98953", "city" : "ZILLAH", "loc" : [ -120.266161, 46.415777 ], "pop" : 5266, "state" : "WA" } +{ "_id" : "99003", "city" : "CHATTAROY", "loc" : [ -117.29209, 47.919178 ], "pop" : 1991, "state" : "WA" } +{ "_id" : "99004", "city" : "CHENEY", "loc" : [ -117.583372, 47.494257 ], "pop" : 12257, "state" : "WA" } +{ "_id" : "99005", "city" : "COLBERT", "loc" : [ -117.375895, 47.841093 ], "pop" : 3926, "state" : "WA" } +{ "_id" : "99006", "city" : "DEER PARK", "loc" : [ -117.443559, 47.948615 ], "pop" : 7287, "state" : "WA" } +{ "_id" : "99008", "city" : "EDWALL", "loc" : [ -117.907095, 47.537896 ], "pop" : 379, "state" : "WA" } +{ "_id" : "99009", "city" : "ELK", "loc" : [ -117.296253, 48.020523 ], "pop" : 2386, "state" : "WA" } +{ "_id" : "99011", "city" : "FAIRCHILD AIR FO", "loc" : [ -117.643746, 47.613068 ], "pop" : 4854, "state" : "WA" } +{ "_id" : "99012", "city" : "FAIRFIELD", "loc" : [ -117.192054, 47.398726 ], "pop" : 641, "state" : "WA" } +{ "_id" : "99013", "city" : "FORD", "loc" : [ -117.811858, 47.916873 ], "pop" : 790, "state" : "WA" } +{ "_id" : "99016", "city" : "GREENACRES", "loc" : [ -117.156801, 47.658357 ], "pop" : 5312, "state" : "WA" } +{ "_id" : "99017", "city" : "LAMONT", "loc" : [ -117.830239, 47.17304 ], "pop" : 317, "state" : "WA" } +{ "_id" : "99018", "city" : "LATAH", "loc" : [ -117.16884, 47.303815 ], "pop" : 477, "state" : "WA" } +{ "_id" : "99019", "city" : "LIBERTY LAKE", "loc" : [ -117.083808, 47.651672 ], "pop" : 2372, "state" : "WA" } +{ "_id" : "99021", "city" : "MEAD", "loc" : [ -117.311716, 47.793268 ], "pop" : 5903, "state" : "WA" } +{ "_id" : "99022", "city" : "ESPANOLA", "loc" : [ -117.679351, 47.583696 ], "pop" : 6436, "state" : "WA" } +{ "_id" : "99023", "city" : "MICA", "loc" : [ -117.163711, 47.553814 ], "pop" : 921, "state" : "WA" } +{ "_id" : "99025", "city" : "NEWMAN LAKE", "loc" : [ -117.064041, 47.727371 ], "pop" : 3092, "state" : "WA" } +{ "_id" : "99026", "city" : "NINE MILE FALLS", "loc" : [ -117.589359, 47.801945 ], "pop" : 4872, "state" : "WA" } +{ "_id" : "99027", "city" : "OTIS ORCHARDS", "loc" : [ -117.11209, 47.70273 ], "pop" : 5922, "state" : "WA" } +{ "_id" : "99029", "city" : "REARDAN", "loc" : [ -117.866264, 47.705407 ], "pop" : 1072, "state" : "WA" } +{ "_id" : "99030", "city" : "ROCKFORD", "loc" : [ -117.131842, 47.452804 ], "pop" : 844, "state" : "WA" } +{ "_id" : "99031", "city" : "SPANGLE", "loc" : [ -117.382696, 47.4338 ], "pop" : 1434, "state" : "WA" } +{ "_id" : "99032", "city" : "SPRAGUE", "loc" : [ -117.989684, 47.324725 ], "pop" : 672, "state" : "WA" } +{ "_id" : "99033", "city" : "TEKOA", "loc" : [ -117.081919, 47.227081 ], "pop" : 950, "state" : "WA" } +{ "_id" : "99034", "city" : "TUMTUM", "loc" : [ -117.698996, 47.898173 ], "pop" : 312, "state" : "WA" } +{ "_id" : "99036", "city" : "VALLEYFORD", "loc" : [ -117.268601, 47.529176 ], "pop" : 698, "state" : "WA" } +{ "_id" : "99037", "city" : "VERADALE", "loc" : [ -117.197706, 47.642103 ], "pop" : 8397, "state" : "WA" } +{ "_id" : "99039", "city" : "WAVERLY", "loc" : [ -117.233108, 47.335393 ], "pop" : 166, "state" : "WA" } +{ "_id" : "99040", "city" : "WELLPINIT", "loc" : [ -117.985646, 47.86974 ], "pop" : 488, "state" : "WA" } +{ "_id" : "99101", "city" : "ADDY", "loc" : [ -117.892383, 48.44769 ], "pop" : 1226, "state" : "WA" } +{ "_id" : "99103", "city" : "ALMIRA", "loc" : [ -118.91225, 47.763175 ], "pop" : 646, "state" : "WA" } +{ "_id" : "99105", "city" : "BENGE", "loc" : [ -117.969895, 46.867636 ], "pop" : 2, "state" : "WA" } +{ "_id" : "99107", "city" : "BOYDS", "loc" : [ -118.19906, 48.691919 ], "pop" : 782, "state" : "WA" } +{ "_id" : "99109", "city" : "CHEWELAH", "loc" : [ -117.77539, 48.287585 ], "pop" : 5239, "state" : "WA" } +{ "_id" : "99110", "city" : "CLAYTON", "loc" : [ -117.574021, 47.955206 ], "pop" : 1621, "state" : "WA" } +{ "_id" : "99111", "city" : "COLFAX", "loc" : [ -117.366975, 46.879996 ], "pop" : 3592, "state" : "WA" } +{ "_id" : "99113", "city" : "COLTON", "loc" : [ -117.169243, 46.590098 ], "pop" : 650, "state" : "WA" } +{ "_id" : "99114", "city" : "COLVILLE", "loc" : [ -117.864463, 48.57799 ], "pop" : 8805, "state" : "WA" } +{ "_id" : "99115", "city" : "COULEE CITY", "loc" : [ -119.27582, 47.596571 ], "pop" : 1013, "state" : "WA" } +{ "_id" : "99116", "city" : "COULEE DAM", "loc" : [ -119.180907, 48.173861 ], "pop" : 4636, "state" : "WA" } +{ "_id" : "99117", "city" : "CRESTON", "loc" : [ -118.530656, 47.797681 ], "pop" : 527, "state" : "WA" } +{ "_id" : "99118", "city" : "CURLEW", "loc" : [ -118.645182, 48.910775 ], "pop" : 986, "state" : "WA" } +{ "_id" : "99119", "city" : "CUSICK", "loc" : [ -117.329464, 48.391513 ], "pop" : 439, "state" : "WA" } +{ "_id" : "99121", "city" : "DANVILLE", "loc" : [ -118.488408, 48.972524 ], "pop" : 48, "state" : "WA" } +{ "_id" : "99122", "city" : "DAVENPORT", "loc" : [ -118.166657, 47.680855 ], "pop" : 2383, "state" : "WA" } +{ "_id" : "99123", "city" : "ELECTRIC CITY", "loc" : [ -119.036728, 47.926446 ], "pop" : 1152, "state" : "WA" } +{ "_id" : "99125", "city" : "ENDICOTT", "loc" : [ -117.723005, 46.936407 ], "pop" : 673, "state" : "WA" } +{ "_id" : "99126", "city" : "EVANS", "loc" : [ -118.00012, 48.745787 ], "pop" : 350, "state" : "WA" } +{ "_id" : "99128", "city" : "FARMINGTON", "loc" : [ -117.076327, 47.084742 ], "pop" : 355, "state" : "WA" } +{ "_id" : "99129", "city" : "FRUITLAND", "loc" : [ -118.215906, 47.979746 ], "pop" : 515, "state" : "WA" } +{ "_id" : "99130", "city" : "GARFIELD", "loc" : [ -117.152293, 46.994639 ], "pop" : 795, "state" : "WA" } +{ "_id" : "99131", "city" : "GIFFORD", "loc" : [ -118.12989, 48.22287 ], "pop" : 60, "state" : "WA" } +{ "_id" : "99133", "city" : "GRAND COULEE", "loc" : [ -118.997835, 47.938511 ], "pop" : 1073, "state" : "WA" } +{ "_id" : "99134", "city" : "HARRINGTON", "loc" : [ -118.277793, 47.4555 ], "pop" : 786, "state" : "WA" } +{ "_id" : "99135", "city" : "HARTLINE", "loc" : [ -119.104467, 47.725631 ], "pop" : 315, "state" : "WA" } +{ "_id" : "99137", "city" : "HUNTERS", "loc" : [ -118.152491, 48.133261 ], "pop" : 349, "state" : "WA" } +{ "_id" : "99138", "city" : "INCHELIUM", "loc" : [ -118.355166, 48.292411 ], "pop" : 1297, "state" : "WA" } +{ "_id" : "99139", "city" : "IONE", "loc" : [ -117.404859, 48.713023 ], "pop" : 1204, "state" : "WA" } +{ "_id" : "99140", "city" : "KELLER", "loc" : [ -118.654731, 48.023594 ], "pop" : 255, "state" : "WA" } +{ "_id" : "99141", "city" : "KETTLE FALLS", "loc" : [ -118.054801, 48.636375 ], "pop" : 3668, "state" : "WA" } +{ "_id" : "99143", "city" : "LACROSSE", "loc" : [ -117.770277, 46.771684 ], "pop" : 1066, "state" : "WA" } +{ "_id" : "99147", "city" : "LINCOLN", "loc" : [ -118.481012, 47.78204 ], "pop" : 31, "state" : "WA" } +{ "_id" : "99148", "city" : "LOON LAKE", "loc" : [ -117.632496, 48.078393 ], "pop" : 1885, "state" : "WA" } +{ "_id" : "99150", "city" : "MALO", "loc" : [ -118.623712, 48.81862 ], "pop" : 396, "state" : "WA" } +{ "_id" : "99153", "city" : "METALINE FALLS", "loc" : [ -117.36332, 48.859747 ], "pop" : 729, "state" : "WA" } +{ "_id" : "99156", "city" : "NEWPORT", "loc" : [ -117.150784, 48.169465 ], "pop" : 5881, "state" : "WA" } +{ "_id" : "99157", "city" : "NORTHPORT", "loc" : [ -117.793052, 48.924663 ], "pop" : 462, "state" : "WA" } +{ "_id" : "99158", "city" : "OAKESDALE", "loc" : [ -117.280326, 47.080556 ], "pop" : 764, "state" : "WA" } +{ "_id" : "99159", "city" : "ODESSA", "loc" : [ -118.698316, 47.339491 ], "pop" : 1324, "state" : "WA" } +{ "_id" : "99161", "city" : "PALOUSE", "loc" : [ -117.085475, 46.907555 ], "pop" : 1270, "state" : "WA" } +{ "_id" : "99163", "city" : "PULLMAN", "loc" : [ -117.172936, 46.735247 ], "pop" : 25909, "state" : "WA" } +{ "_id" : "99166", "city" : "REPUBLIC", "loc" : [ -118.699942, 48.670366 ], "pop" : 2531, "state" : "WA" } +{ "_id" : "99167", "city" : "RICE", "loc" : [ -118.124865, 48.406169 ], "pop" : 615, "state" : "WA" } +{ "_id" : "99169", "city" : "RITZVILLE", "loc" : [ -118.395812, 47.131528 ], "pop" : 2472, "state" : "WA" } +{ "_id" : "99170", "city" : "ROSALIA", "loc" : [ -117.41468, 47.221777 ], "pop" : 1081, "state" : "WA" } +{ "_id" : "99171", "city" : "SAINT JOHN", "loc" : [ -117.573002, 47.075539 ], "pop" : 765, "state" : "WA" } +{ "_id" : "99173", "city" : "SPRINGDALE", "loc" : [ -117.873273, 47.992737 ], "pop" : 361, "state" : "WA" } +{ "_id" : "99176", "city" : "THORNTON", "loc" : [ -117.386416, 47.12525 ], "pop" : 186, "state" : "WA" } +{ "_id" : "99179", "city" : "UNIONTOWN", "loc" : [ -117.090756, 46.525818 ], "pop" : 433, "state" : "WA" } +{ "_id" : "99180", "city" : "USK", "loc" : [ -117.318947, 48.295969 ], "pop" : 501, "state" : "WA" } +{ "_id" : "99181", "city" : "VALLEY", "loc" : [ -117.760967, 48.135114 ], "pop" : 1328, "state" : "WA" } +{ "_id" : "99185", "city" : "WILBUR", "loc" : [ -118.706271, 47.741012 ], "pop" : 1238, "state" : "WA" } +{ "_id" : "99201", "city" : "SPOKANE", "loc" : [ -117.436527, 47.666485 ], "pop" : 9599, "state" : "WA" } +{ "_id" : "99202", "city" : "SPOKANE", "loc" : [ -117.380972, 47.654741 ], "pop" : 17424, "state" : "WA" } +{ "_id" : "99203", "city" : "SPOKANE", "loc" : [ -117.404121, 47.629443 ], "pop" : 20454, "state" : "WA" } +{ "_id" : "99204", "city" : "SPOKANE", "loc" : [ -117.471896, 47.640682 ], "pop" : 24611, "state" : "WA" } +{ "_id" : "99205", "city" : "SPOKANE", "loc" : [ -117.439912, 47.69641 ], "pop" : 42032, "state" : "WA" } +{ "_id" : "99206", "city" : "SPOKANE", "loc" : [ -117.258126, 47.649588 ], "pop" : 29077, "state" : "WA" } +{ "_id" : "99207", "city" : "SPOKANE", "loc" : [ -117.374565, 47.697712 ], "pop" : 46237, "state" : "WA" } +{ "_id" : "99208", "city" : "SPOKANE", "loc" : [ -117.435207, 47.737434 ], "pop" : 27989, "state" : "WA" } +{ "_id" : "99212", "city" : "SPOKANE", "loc" : [ -117.304853, 47.668598 ], "pop" : 16771, "state" : "WA" } +{ "_id" : "99216", "city" : "SPOKANE", "loc" : [ -117.219307, 47.663389 ], "pop" : 18834, "state" : "WA" } +{ "_id" : "99218", "city" : "SPOKANE", "loc" : [ -117.4146, 47.755648 ], "pop" : 11902, "state" : "WA" } +{ "_id" : "99223", "city" : "SPOKANE", "loc" : [ -117.362215, 47.61558 ], "pop" : 19056, "state" : "WA" } +{ "_id" : "99301", "city" : "PASCO", "loc" : [ -119.104387, 46.249183 ], "pop" : 33988, "state" : "WA" } +{ "_id" : "99320", "city" : "BENTON CITY", "loc" : [ -119.491349, 46.280624 ], "pop" : 5047, "state" : "WA" } +{ "_id" : "99321", "city" : "BEVERLY", "loc" : [ -119.912074, 46.848429 ], "pop" : 315, "state" : "WA" } +{ "_id" : "99322", "city" : "BICKLETON", "loc" : [ -120.104223, 45.959687 ], "pop" : 329, "state" : "WA" } +{ "_id" : "99324", "city" : "COLLEGE PLACE", "loc" : [ -118.385338, 46.045723 ], "pop" : 6904, "state" : "WA" } +{ "_id" : "99326", "city" : "CONNELL", "loc" : [ -118.85454, 46.66426 ], "pop" : 2699, "state" : "WA" } +{ "_id" : "99327", "city" : "CUNNINGHAM", "loc" : [ -119.107604, 46.757333 ], "pop" : 511, "state" : "WA" } +{ "_id" : "99328", "city" : "DAYTON", "loc" : [ -117.973791, 46.307459 ], "pop" : 3373, "state" : "WA" } +{ "_id" : "99330", "city" : "ELTOPIA", "loc" : [ -119.101333, 46.474996 ], "pop" : 758, "state" : "WA" } +{ "_id" : "99336", "city" : "KENNEWICK", "loc" : [ -119.167951, 46.210913 ], "pop" : 33860, "state" : "WA" } +{ "_id" : "99337", "city" : "KENNEWICK", "loc" : [ -119.138289, 46.181387 ], "pop" : 25962, "state" : "WA" } +{ "_id" : "99341", "city" : "LIND", "loc" : [ -118.706057, 46.955954 ], "pop" : 1134, "state" : "WA" } +{ "_id" : "99343", "city" : "MESA", "loc" : [ -119.137324, 46.578223 ], "pop" : 2382, "state" : "WA" } +{ "_id" : "99344", "city" : "MATTAWA", "loc" : [ -119.316405, 46.792518 ], "pop" : 11812, "state" : "WA" } +{ "_id" : "99345", "city" : "PATERSON", "loc" : [ -119.755873, 45.991139 ], "pop" : 94, "state" : "WA" } +{ "_id" : "99346", "city" : "PLYMOUTH", "loc" : [ -119.502998, 46.038184 ], "pop" : 219, "state" : "WA" } +{ "_id" : "99347", "city" : "POMEROY", "loc" : [ -117.599282, 46.469838 ], "pop" : 2467, "state" : "WA" } +{ "_id" : "99348", "city" : "PRESCOTT", "loc" : [ -118.409663, 46.353879 ], "pop" : 638, "state" : "WA" } +{ "_id" : "99350", "city" : "PROSSER", "loc" : [ -119.771014, 46.223183 ], "pop" : 9714, "state" : "WA" } +{ "_id" : "99352", "city" : "RICHLAND", "loc" : [ -119.289201, 46.283265 ], "pop" : 37664, "state" : "WA" } +{ "_id" : "99356", "city" : "ROOSEVELT", "loc" : [ -120.356611, 45.82962 ], "pop" : 172, "state" : "WA" } +{ "_id" : "99357", "city" : "ROYAL CITY", "loc" : [ -119.581473, 46.91557 ], "pop" : 3388, "state" : "WA" } +{ "_id" : "99360", "city" : "LOWDEN", "loc" : [ -118.655411, 46.04851 ], "pop" : 1234, "state" : "WA" } +{ "_id" : "99361", "city" : "WAITSBURG", "loc" : [ -118.144734, 46.269092 ], "pop" : 2138, "state" : "WA" } +{ "_id" : "99362", "city" : "WALLA WALLA", "loc" : [ -118.331544, 46.061373 ], "pop" : 34993, "state" : "WA" } +{ "_id" : "99371", "city" : "WASHTUCNA", "loc" : [ -118.286203, 46.820912 ], "pop" : 625, "state" : "WA" } +{ "_id" : "99401", "city" : "ANATONE", "loc" : [ -117.088316, 46.128466 ], "pop" : 141, "state" : "WA" } +{ "_id" : "99402", "city" : "ASOTIN", "loc" : [ -117.001548, 46.134318 ], "pop" : 89, "state" : "WA" } +{ "_id" : "99403", "city" : "CLARKSTON", "loc" : [ -117.064457, 46.394622 ], "pop" : 17375, "state" : "WA" } +{ "_id" : "99501", "city" : "ANCHORAGE", "loc" : [ -149.876077, 61.211571 ], "pop" : 14436, "state" : "AK" } +{ "_id" : "99502", "city" : "ANCHORAGE", "loc" : [ -150.093943, 61.096163 ], "pop" : 15891, "state" : "AK" } +{ "_id" : "99503", "city" : "ANCHORAGE", "loc" : [ -149.893844, 61.189953 ], "pop" : 12534, "state" : "AK" } +{ "_id" : "99504", "city" : "ANCHORAGE", "loc" : [ -149.74467, 61.203696 ], "pop" : 32383, "state" : "AK" } +{ "_id" : "99505", "city" : "FORT RICHARDSON", "loc" : [ -149.675454, 61.275256 ], "pop" : 7979, "state" : "AK" } +{ "_id" : "99506", "city" : "ELMENDORF AFB", "loc" : [ -149.812667, 61.251531 ], "pop" : 7907, "state" : "AK" } +{ "_id" : "99507", "city" : "ANCHORAGE", "loc" : [ -149.828912, 61.153543 ], "pop" : 20128, "state" : "AK" } +{ "_id" : "99508", "city" : "ANCHORAGE", "loc" : [ -149.810085, 61.205959 ], "pop" : 29857, "state" : "AK" } +{ "_id" : "99515", "city" : "ANCHORAGE", "loc" : [ -149.897401, 61.119381 ], "pop" : 17094, "state" : "AK" } +{ "_id" : "99516", "city" : "ANCHORAGE", "loc" : [ -149.779998, 61.10541 ], "pop" : 18356, "state" : "AK" } +{ "_id" : "99517", "city" : "ANCHORAGE", "loc" : [ -149.936111, 61.190136 ], "pop" : 15192, "state" : "AK" } +{ "_id" : "99518", "city" : "ANCHORAGE", "loc" : [ -149.886571, 61.154862 ], "pop" : 8116, "state" : "AK" } +{ "_id" : "99549", "city" : "PORT HEIDEN", "loc" : [ -158.566367, 56.964333 ], "pop" : 119, "state" : "AK" } +{ "_id" : "99551", "city" : "AKIACHAK", "loc" : [ -161.39233, 60.891854 ], "pop" : 481, "state" : "AK" } +{ "_id" : "99552", "city" : "AKIAK", "loc" : [ -161.199325, 60.890632 ], "pop" : 285, "state" : "AK" } +{ "_id" : "99553", "city" : "AKUTAN", "loc" : [ -165.785368, 54.143012 ], "pop" : 589, "state" : "AK" } +{ "_id" : "99554", "city" : "ALAKANUK", "loc" : [ -164.60228, 62.746967 ], "pop" : 1186, "state" : "AK" } +{ "_id" : "99555", "city" : "ALEKNAGIK", "loc" : [ -158.619882, 59.269688 ], "pop" : 185, "state" : "AK" } +{ "_id" : "99556", "city" : "NIKOLAEVSK", "loc" : [ -151.732933, 59.788818 ], "pop" : 1698, "state" : "AK" } +{ "_id" : "99557", "city" : "CHUATHBALUK", "loc" : [ -157.758502, 61.691648 ], "pop" : 352, "state" : "AK" } +{ "_id" : "99558", "city" : "ANVIK", "loc" : [ -160.130441, 62.830913 ], "pop" : 296, "state" : "AK" } +{ "_id" : "99559", "city" : "ATMAUTLUAK", "loc" : [ -161.824053, 60.832389 ], "pop" : 7188, "state" : "AK" } +{ "_id" : "99561", "city" : "CHEFORNAK", "loc" : [ -164.210294, 60.153746 ], "pop" : 320, "state" : "AK" } +{ "_id" : "99563", "city" : "CHEVAK", "loc" : [ -164.776457, 61.583982 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99564", "city" : "CHIGNIK", "loc" : [ -158.415696, 56.301639 ], "pop" : 188, "state" : "AK" } +{ "_id" : "99565", "city" : "CHIGNIK LAGOON", "loc" : [ -158.673528, 56.251277 ], "pop" : 186, "state" : "AK" } +{ "_id" : "99567", "city" : "CHUGIAK", "loc" : [ -149.453736, 61.409802 ], "pop" : 6910, "state" : "AK" } +{ "_id" : "99568", "city" : "CLAM GULCH", "loc" : [ -151.422628, 60.201603 ], "pop" : 133, "state" : "AK" } +{ "_id" : "99569", "city" : "CLARKS POINT", "loc" : [ -158.451241, 58.84921 ], "pop" : 68, "state" : "AK" } +{ "_id" : "99571", "city" : "NELSON LAGOON", "loc" : [ -161.942941, 55.610952 ], "pop" : 475, "state" : "AK" } +{ "_id" : "99572", "city" : "COOPER LANDING", "loc" : [ -149.823514, 60.476692 ], "pop" : 252, "state" : "AK" } +{ "_id" : "99573", "city" : "COPPER CENTER", "loc" : [ -144.97793, 61.91581 ], "pop" : 1389, "state" : "AK" } +{ "_id" : "99574", "city" : "CHENEGA BAY", "loc" : [ -147.943316, 60.102558 ], "pop" : 96, "state" : "AK" } +{ "_id" : "99575", "city" : "CROOKED CREEK", "loc" : [ -158.002483, 61.818072 ], "pop" : 1, "state" : "AK" } +{ "_id" : "99576", "city" : "KOLIGANEK", "loc" : [ -158.973533, 59.059279 ], "pop" : 2711, "state" : "AK" } +{ "_id" : "99577", "city" : "EAGLE RIVER", "loc" : [ -149.508515, 61.311357 ], "pop" : 18429, "state" : "AK" } +{ "_id" : "99578", "city" : "EEK", "loc" : [ -162.032341, 60.215058 ], "pop" : 254, "state" : "AK" } +{ "_id" : "99579", "city" : "EGEGIK", "loc" : [ -157.342202, 58.206174 ], "pop" : 122, "state" : "AK" } +{ "_id" : "99580", "city" : "EKWOK", "loc" : [ -157.478211, 59.362792 ], "pop" : 77, "state" : "AK" } +{ "_id" : "99581", "city" : "EMMONAK", "loc" : [ -164.131298, 62.827404 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99583", "city" : "FALSE PASS", "loc" : [ -163.436845, 54.841028 ], "pop" : 68, "state" : "AK" } +{ "_id" : "99585", "city" : "MARSHALL", "loc" : [ -161.7394, 61.837087 ], "pop" : 530, "state" : "AK" } +{ "_id" : "99586", "city" : "SLANA", "loc" : [ -143.568393, 62.654744 ], "pop" : 394, "state" : "AK" } +{ "_id" : "99588", "city" : "GLENNALLEN", "loc" : [ -145.661684, 62.103895 ], "pop" : 1024, "state" : "AK" } +{ "_id" : "99589", "city" : "GOODNEWS BAY", "loc" : [ -161.587146, 59.085008 ], "pop" : 305, "state" : "AK" } +{ "_id" : "99590", "city" : "GRAYLING", "loc" : [ -159.404907, 63.372013 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99591", "city" : "SAINT GEORGE ISL", "loc" : [ -169.547257, 56.60324 ], "pop" : 138, "state" : "AK" } +{ "_id" : "99602", "city" : "HOLY CROSS", "loc" : [ -159.825092, 62.192584 ], "pop" : 277, "state" : "AK" } +{ "_id" : "99603", "city" : "PORT GRAHAM", "loc" : [ -151.462644, 59.665495 ], "pop" : 8186, "state" : "AK" } +{ "_id" : "99604", "city" : "HOOPER BAY", "loc" : [ -165.891045, 61.537157 ], "pop" : 1443, "state" : "AK" } +{ "_id" : "99606", "city" : "KOKHANOK", "loc" : [ -155.462556, 59.564836 ], "pop" : 362, "state" : "AK" } +{ "_id" : "99607", "city" : "KALSKAG", "loc" : [ -160.3261, 61.541006 ], "pop" : 172, "state" : "AK" } +{ "_id" : "99610", "city" : "KASILOF", "loc" : [ -151.28958, 60.316365 ], "pop" : 963, "state" : "AK" } +{ "_id" : "99611", "city" : "KENAI", "loc" : [ -151.254556, 60.614467 ], "pop" : 10508, "state" : "AK" } +{ "_id" : "99612", "city" : "KING COVE", "loc" : [ -162.305561, 55.062848 ], "pop" : 451, "state" : "AK" } +{ "_id" : "99613", "city" : "IGIUGIG", "loc" : [ -156.641603, 58.724264 ], "pop" : 480, "state" : "AK" } +{ "_id" : "99614", "city" : "KIPNUK", "loc" : [ -164.101013, 59.923204 ], "pop" : 470, "state" : "AK" } +{ "_id" : "99615", "city" : "AKHIOK", "loc" : [ -152.500169, 57.781967 ], "pop" : 13309, "state" : "AK" } +{ "_id" : "99620", "city" : "KOTLIK", "loc" : [ -163.554153, 63.029471 ], "pop" : 462, "state" : "AK" } +{ "_id" : "99621", "city" : "KWETHLUK", "loc" : [ -161.38849, 60.771814 ], "pop" : 558, "state" : "AK" } +{ "_id" : "99622", "city" : "KWIGILLINGOK", "loc" : [ -162.984938, 59.881022 ], "pop" : 572, "state" : "AK" } +{ "_id" : "99625", "city" : "LEVELOCK", "loc" : [ -154.976815, 59.371395 ], "pop" : 204, "state" : "AK" } +{ "_id" : "99626", "city" : "LOWER KALSKAG", "loc" : [ -160.359966, 61.51377 ], "pop" : 291, "state" : "AK" } +{ "_id" : "99627", "city" : "MC GRATH", "loc" : [ -155.585153, 62.967153 ], "pop" : 618, "state" : "AK" } +{ "_id" : "99628", "city" : "MANOKOTAK", "loc" : [ -158.989699, 59.009559 ], "pop" : 385, "state" : "AK" } +{ "_id" : "99630", "city" : "MEKORYUK", "loc" : [ -166.283583, 60.365679 ], "pop" : 177, "state" : "AK" } +{ "_id" : "99631", "city" : "MOOSE PASS", "loc" : [ -149.255911, 60.85852 ], "pop" : 1649, "state" : "AK" } +{ "_id" : "99632", "city" : "MOUNTAIN VILLAGE", "loc" : [ -163.883822, 62.158913 ], "pop" : 788, "state" : "AK" } +{ "_id" : "99633", "city" : "NAKNEK", "loc" : [ -156.705405, 58.885699 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99634", "city" : "NAPAKIAK", "loc" : [ -161.738144, 60.663758 ], "pop" : 328, "state" : "AK" } +{ "_id" : "99636", "city" : "NEW STUYAHOK", "loc" : [ -157.297205, 59.593533 ], "pop" : 586, "state" : "AK" } +{ "_id" : "99638", "city" : "NIKOLSKI", "loc" : [ -168.788427, 52.988337 ], "pop" : 42, "state" : "AK" } +{ "_id" : "99639", "city" : "NINILCHIK", "loc" : [ -151.639604, 60.010833 ], "pop" : 767, "state" : "AK" } +{ "_id" : "99640", "city" : "NONDALTON", "loc" : [ -154.731675, 60.030837 ], "pop" : 233, "state" : "AK" } +{ "_id" : "99645", "city" : "BUTTE", "loc" : [ -149.065323, 61.613814 ], "pop" : 12358, "state" : "AK" } +{ "_id" : "99647", "city" : "PEDRO BAY", "loc" : [ -153.821856, 59.92238 ], "pop" : 59, "state" : "AK" } +{ "_id" : "99648", "city" : "PERRYVILLE", "loc" : [ -159.259333, 55.945289 ], "pop" : 143, "state" : "AK" } +{ "_id" : "99649", "city" : "PILOT POINT", "loc" : [ -157.449272, 57.595193 ], "pop" : 63, "state" : "AK" } +{ "_id" : "99650", "city" : "PILOT STATION", "loc" : [ -162.874716, 61.946159 ], "pop" : 463, "state" : "AK" } +{ "_id" : "99651", "city" : "PLATINUM", "loc" : [ -162.043201, 58.63364 ], "pop" : 4, "state" : "AK" } +{ "_id" : "99653", "city" : "PORT ALSWORTH", "loc" : [ -154.433803, 60.636416 ], "pop" : 7, "state" : "AK" } +{ "_id" : "99654", "city" : "WASILLA", "loc" : [ -149.395875, 61.592349 ], "pop" : 10404, "state" : "AK" } +{ "_id" : "99655", "city" : "QUINHAGAK", "loc" : [ -161.874938, 59.738057 ], "pop" : 501, "state" : "AK" } +{ "_id" : "99656", "city" : "RED DEVIL", "loc" : [ -157.195969, 61.735389 ], "pop" : 159, "state" : "AK" } +{ "_id" : "99657", "city" : "RUSSIAN MISSION", "loc" : [ -161.558413, 61.591302 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99658", "city" : "SAINT MARYS", "loc" : [ -163.205263, 62.054106 ], "pop" : 576, "state" : "AK" } +{ "_id" : "99659", "city" : "SAINT MICHAEL", "loc" : [ -162.109141, 63.47759 ], "pop" : 295, "state" : "AK" } +{ "_id" : "99660", "city" : "SAINT PAUL ISLAN", "loc" : [ -170.293408, 57.178697 ], "pop" : 763, "state" : "AK" } +{ "_id" : "99661", "city" : "SAND POINT", "loc" : [ -160.491435, 55.319236 ], "pop" : 881, "state" : "AK" } +{ "_id" : "99662", "city" : "SCAMMON BAY", "loc" : [ -165.581945, 61.845019 ], "pop" : 343, "state" : "AK" } +{ "_id" : "99664", "city" : "SEWARD", "loc" : [ -149.39849, 60.132874 ], "pop" : 3937, "state" : "AK" } +{ "_id" : "99665", "city" : "SHAGELUK", "loc" : [ -159.52816, 62.661092 ], "pop" : 139, "state" : "AK" } +{ "_id" : "99668", "city" : "SLEETMUTE", "loc" : [ -157.118284, 61.634555 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99669", "city" : "SOLDOTNA", "loc" : [ -151.13582, 60.481778 ], "pop" : 9825, "state" : "AK" } +{ "_id" : "99670", "city" : "SOUTH NAKNEK", "loc" : [ -156.850289, 58.736221 ], "pop" : 929, "state" : "AK" } +{ "_id" : "99671", "city" : "STEBBINS", "loc" : [ -162.227355, 63.478468 ], "pop" : 400, "state" : "AK" } +{ "_id" : "99672", "city" : "STERLING", "loc" : [ -150.849792, 60.520373 ], "pop" : 3814, "state" : "AK" } +{ "_id" : "99676", "city" : "TALKEETNA", "loc" : [ -150.110097, 62.260516 ], "pop" : 1420, "state" : "AK" } +{ "_id" : "99679", "city" : "TULUKSAK", "loc" : [ -160.938924, 61.108848 ], "pop" : 358, "state" : "AK" } +{ "_id" : "99681", "city" : "TUNUNAK", "loc" : [ -165.097464, 60.539322 ], "pop" : 889, "state" : "AK" } +{ "_id" : "99682", "city" : "TYONEK", "loc" : [ -151.348495, 61.117929 ], "pop" : 277, "state" : "AK" } +{ "_id" : "99683", "city" : "TRAPPER CREEK", "loc" : [ -150.284455, 61.441361 ], "pop" : 20, "state" : "AK" } +{ "_id" : "99684", "city" : "UNALAKLEET", "loc" : [ -160.788365, 63.883478 ], "pop" : 716, "state" : "AK" } +{ "_id" : "99685", "city" : "UNALASKA", "loc" : [ -166.519855, 53.887114 ], "pop" : 3089, "state" : "AK" } +{ "_id" : "99686", "city" : "VALDEZ", "loc" : [ -146.195628, 60.895044 ], "pop" : 7049, "state" : "AK" } +{ "_id" : "99687", "city" : "WASILLA", "loc" : [ -149.533003, 61.578032 ], "pop" : 14215, "state" : "AK" } +{ "_id" : "99688", "city" : "WILLOW", "loc" : [ -150.188891, 61.771511 ], "pop" : 1237, "state" : "AK" } +{ "_id" : "99689", "city" : "YAKUTAT", "loc" : [ -139.778858, 59.620211 ], "pop" : 705, "state" : "AK" } +{ "_id" : "99691", "city" : "NIKOLAI", "loc" : [ -154.381247, 63.001603 ], "pop" : 109, "state" : "AK" } +{ "_id" : "99692", "city" : "DUTCH HARBOR", "loc" : [ -167.510656, 53.362757 ], "pop" : 3, "state" : "AK" } +{ "_id" : "99701", "city" : "COLDFOOT", "loc" : [ -147.710431, 64.840238 ], "pop" : 19316, "state" : "AK" } +{ "_id" : "99702", "city" : "EIELSON AFB", "loc" : [ -147.08051, 64.67352 ], "pop" : 5266, "state" : "AK" } +{ "_id" : "99703", "city" : "FORT WAINWRIGHT", "loc" : [ -147.655673, 64.82830300000001 ], "pop" : 6238, "state" : "AK" } +{ "_id" : "99704", "city" : "CLEAR", "loc" : [ -149.139885, 64.418121 ], "pop" : 440, "state" : "AK" } +{ "_id" : "99705", "city" : "NORTH POLE", "loc" : [ -147.369353, 64.78049 ], "pop" : 14672, "state" : "AK" } +{ "_id" : "99709", "city" : "FAIRBANKS", "loc" : [ -147.846917, 64.85437 ], "pop" : 23238, "state" : "AK" } +{ "_id" : "99712", "city" : "FAIRBANKS", "loc" : [ -147.510479, 64.91087899999999 ], "pop" : 8141, "state" : "AK" } +{ "_id" : "99714", "city" : "SALCHA", "loc" : [ -146.952974, 64.50905 ], "pop" : 890, "state" : "AK" } +{ "_id" : "99720", "city" : "ALLAKAKET", "loc" : [ -152.712155, 66.54319700000001 ], "pop" : 170, "state" : "AK" } +{ "_id" : "99721", "city" : "ANAKTUVUK PASS", "loc" : [ -151.679005, 68.11878 ], "pop" : 260, "state" : "AK" } +{ "_id" : "99722", "city" : "ARCTIC VILLAGE", "loc" : [ -145.423115, 68.077395 ], "pop" : 107, "state" : "AK" } +{ "_id" : "99723", "city" : "BARROW", "loc" : [ -156.817409, 71.23463700000001 ], "pop" : 3696, "state" : "AK" } +{ "_id" : "99724", "city" : "BEAVER", "loc" : [ -147.279803, 66.33883 ], "pop" : 103, "state" : "AK" } +{ "_id" : "99726", "city" : "BETTLES FIELD", "loc" : [ -151.062414, 67.100495 ], "pop" : 156, "state" : "AK" } +{ "_id" : "99727", "city" : "BUCKLAND", "loc" : [ -161.131676, 65.98105200000001 ], "pop" : 318, "state" : "AK" } +{ "_id" : "99729", "city" : "CANTWELL", "loc" : [ -148.89735, 63.395458 ], "pop" : 210, "state" : "AK" } +{ "_id" : "99730", "city" : "CENTRAL", "loc" : [ -144.74886, 65.468058 ], "pop" : 107, "state" : "AK" } +{ "_id" : "99733", "city" : "CIRCLE", "loc" : [ -144.08262, 65.82454199999999 ], "pop" : 73, "state" : "AK" } +{ "_id" : "99734", "city" : "PRUDHOE BAY", "loc" : [ -148.559636, 70.07005700000001 ], "pop" : 153, "state" : "AK" } +{ "_id" : "99736", "city" : "DEERING", "loc" : [ -162.711951, 66.062265 ], "pop" : 167, "state" : "AK" } +{ "_id" : "99737", "city" : "DOT LAKE", "loc" : [ -145.613611, 64.005426 ], "pop" : 4111, "state" : "AK" } +{ "_id" : "99739", "city" : "ELIM", "loc" : [ -162.260371, 64.621662 ], "pop" : 264, "state" : "AK" } +{ "_id" : "99740", "city" : "FORT YUKON", "loc" : [ -145.306439, 66.52074399999999 ], "pop" : 662, "state" : "AK" } +{ "_id" : "99741", "city" : "GALENA", "loc" : [ -156.797701, 64.760784 ], "pop" : 847, "state" : "AK" } +{ "_id" : "99742", "city" : "GAMBELL", "loc" : [ -171.701685, 63.776555 ], "pop" : 525, "state" : "AK" } +{ "_id" : "99743", "city" : "HEALY", "loc" : [ -149.011128, 63.917123 ], "pop" : 1057, "state" : "AK" } +{ "_id" : "99744", "city" : "ANDERSON", "loc" : [ -149.1718, 64.300693 ], "pop" : 300, "state" : "AK" } +{ "_id" : "99745", "city" : "HUGHES", "loc" : [ -154.26443, 66.038246 ], "pop" : 64, "state" : "AK" } +{ "_id" : "99746", "city" : "HUSLIA", "loc" : [ -156.291976, 65.68991800000001 ], "pop" : 207, "state" : "AK" } +{ "_id" : "99747", "city" : "KAKTOVIK", "loc" : [ -143.631329, 70.042889 ], "pop" : 245, "state" : "AK" } +{ "_id" : "99748", "city" : "KALTAG", "loc" : [ -158.724251, 64.33045199999999 ], "pop" : 240, "state" : "AK" } +{ "_id" : "99749", "city" : "KIANA", "loc" : [ -158.152204, 67.18026 ], "pop" : 349, "state" : "AK" } +{ "_id" : "99750", "city" : "KIVALINA", "loc" : [ -163.733617, 67.665859 ], "pop" : 689, "state" : "AK" } +{ "_id" : "99751", "city" : "KOBUK", "loc" : [ -157.066864, 66.91225300000001 ], "pop" : 306, "state" : "AK" } +{ "_id" : "99752", "city" : "KOTZEBUE", "loc" : [ -162.126493, 66.846459 ], "pop" : 3347, "state" : "AK" } +{ "_id" : "99753", "city" : "KOYUK", "loc" : [ -161.149957, 64.931668 ], "pop" : 231, "state" : "AK" } +{ "_id" : "99755", "city" : "DENALI NATIONAL", "loc" : [ -149.539532, 63.516075 ], "pop" : 27, "state" : "AK" } +{ "_id" : "99756", "city" : "MANLEY HOT SPRIN", "loc" : [ -150.573267, 65.02058 ], "pop" : 122, "state" : "AK" } +{ "_id" : "99757", "city" : "LAKE MINCHUMINA", "loc" : [ -152.430081, 63.903884 ], "pop" : 32, "state" : "AK" } +{ "_id" : "99758", "city" : "MINTO", "loc" : [ -149.691186, 65.05839899999999 ], "pop" : 228, "state" : "AK" } +{ "_id" : "99759", "city" : "POINT LAY", "loc" : [ -162.906148, 69.705626 ], "pop" : 139, "state" : "AK" } +{ "_id" : "99760", "city" : "NENANA", "loc" : [ -149.086744, 64.55765599999999 ], "pop" : 393, "state" : "AK" } +{ "_id" : "99761", "city" : "NOATAK", "loc" : [ -160.509453, 66.97553000000001 ], "pop" : 395, "state" : "AK" } +{ "_id" : "99762", "city" : "GOLOVIN", "loc" : [ -165.310667, 64.505775 ], "pop" : 3706, "state" : "AK" } +{ "_id" : "99763", "city" : "NOORVIK", "loc" : [ -161.044132, 66.836353 ], "pop" : 534, "state" : "AK" } +{ "_id" : "99765", "city" : "NULATO", "loc" : [ -157.991353, 64.778024 ], "pop" : 492, "state" : "AK" } +{ "_id" : "99766", "city" : "POINT HOPE", "loc" : [ -166.72618, 68.31205799999999 ], "pop" : 640, "state" : "AK" } +{ "_id" : "99767", "city" : "RAMPART", "loc" : [ -150.011201, 65.383627 ], "pop" : 68, "state" : "AK" } +{ "_id" : "99768", "city" : "RUBY", "loc" : [ -155.503872, 64.720062 ], "pop" : 172, "state" : "AK" } +{ "_id" : "99769", "city" : "SAVOONGA", "loc" : [ -170.470908, 63.679737 ], "pop" : 519, "state" : "AK" } +{ "_id" : "99770", "city" : "SELAWIK", "loc" : [ -158.534287, 65.713537 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99771", "city" : "SHAKTOOLIK", "loc" : [ -161.174589, 64.37549799999999 ], "pop" : 183, "state" : "AK" } +{ "_id" : "99772", "city" : "SHISHMAREF", "loc" : [ -166.137276, 66.23056200000001 ], "pop" : 456, "state" : "AK" } +{ "_id" : "99773", "city" : "SHUNGNAK", "loc" : [ -157.613496, 66.958141 ], "pop" : 0, "state" : "AK" } +{ "_id" : "99774", "city" : "STEVENS VILLAGE", "loc" : [ -149.118286, 65.99589400000001 ], "pop" : 110, "state" : "AK" } +{ "_id" : "99777", "city" : "TANANA", "loc" : [ -152.103747, 65.15648299999999 ], "pop" : 345, "state" : "AK" } +{ "_id" : "99778", "city" : "TELLER", "loc" : [ -166.3833, 65.24016399999999 ], "pop" : 260, "state" : "AK" } +{ "_id" : "99780", "city" : "BORDER", "loc" : [ -142.523046, 63.435022 ], "pop" : 1805, "state" : "AK" } +{ "_id" : "99781", "city" : "VENETIE", "loc" : [ -146.413723, 67.010446 ], "pop" : 184, "state" : "AK" } +{ "_id" : "99782", "city" : "WAINWRIGHT", "loc" : [ -160.012532, 70.620064 ], "pop" : 492, "state" : "AK" } +{ "_id" : "99783", "city" : "WALES", "loc" : [ -168.520521, 65.68821199999999 ], "pop" : 341, "state" : "AK" } +{ "_id" : "99784", "city" : "WHITE MOUNTAIN", "loc" : [ -163.42185, 64.702791 ], "pop" : 194, "state" : "AK" } +{ "_id" : "99785", "city" : "BREVIG MISSION", "loc" : [ -166.478578, 65.334187 ], "pop" : 198, "state" : "AK" } +{ "_id" : "99786", "city" : "AMBLER", "loc" : [ -156.455652, 67.46951 ], "pop" : 8, "state" : "AK" } +{ "_id" : "99788", "city" : "CHALKYITSIK", "loc" : [ -143.638121, 66.71899999999999 ], "pop" : 99, "state" : "AK" } +{ "_id" : "99789", "city" : "NUIQSUT", "loc" : [ -150.997119, 70.19273699999999 ], "pop" : 354, "state" : "AK" } +{ "_id" : "99801", "city" : "JUNEAU", "loc" : [ -134.529429, 58.362767 ], "pop" : 24947, "state" : "AK" } +{ "_id" : "99820", "city" : "ANGOON", "loc" : [ -134.371052, 57.569832 ], "pop" : 1002, "state" : "AK" } +{ "_id" : "99824", "city" : "DOUGLAS", "loc" : [ -134.395041, 58.275597 ], "pop" : 1802, "state" : "AK" } +{ "_id" : "99826", "city" : "GUSTAVUS", "loc" : [ -135.761542, 58.42835 ], "pop" : 258, "state" : "AK" } +{ "_id" : "99827", "city" : "HAINES", "loc" : [ -135.542032, 59.251886 ], "pop" : 2246, "state" : "AK" } +{ "_id" : "99829", "city" : "HOONAH", "loc" : [ -135.558435, 58.032237 ], "pop" : 1670, "state" : "AK" } +{ "_id" : "99833", "city" : "PETERSBURG", "loc" : [ -133.160683, 56.827134 ], "pop" : 4253, "state" : "AK" } +{ "_id" : "99835", "city" : "SITKA", "loc" : [ -135.316569, 57.051436 ], "pop" : 8638, "state" : "AK" } +{ "_id" : "99840", "city" : "SKAGWAY", "loc" : [ -135.301794, 59.468471 ], "pop" : 692, "state" : "AK" } +{ "_id" : "99901", "city" : "KETCHIKAN", "loc" : [ -131.683175, 55.372028 ], "pop" : 13886, "state" : "AK" } +{ "_id" : "99919", "city" : "THORNE BAY", "loc" : [ -132.513815, 55.66086 ], "pop" : 744, "state" : "AK" } +{ "_id" : "99921", "city" : "CRAIG", "loc" : [ -133.117081, 55.47317 ], "pop" : 1398, "state" : "AK" } +{ "_id" : "99922", "city" : "HYDABURG", "loc" : [ -132.633175, 55.137406 ], "pop" : 891, "state" : "AK" } +{ "_id" : "99923", "city" : "HYDER", "loc" : [ -130.124915, 55.925867 ], "pop" : 116, "state" : "AK" } +{ "_id" : "99925", "city" : "KLAWOCK", "loc" : [ -133.055503, 55.552611 ], "pop" : 851, "state" : "AK" } +{ "_id" : "99926", "city" : "METLAKATLA", "loc" : [ -131.579001, 55.121491 ], "pop" : 1469, "state" : "AK" } +{ "_id" : "99927", "city" : "POINT BAKER", "loc" : [ -133.376372, 56.307858 ], "pop" : 426, "state" : "AK" } +{ "_id" : "99929", "city" : "WRANGELL", "loc" : [ -132.352918, 56.433524 ], "pop" : 2573, "state" : "AK" } +{ "_id" : "99950", "city" : "KETCHIKAN", "loc" : [ -133.18479, 55.942471 ], "pop" : 422, "state" : "AK" } Binary files /tmp/tmpvedavx/2LSM_40RBk/mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/std_data/Mongo2.jar and /tmp/tmpvedavx/JfzXAFx5hF/mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/std_data/Mongo2.jar differ Binary files /tmp/tmpvedavx/2LSM_40RBk/mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/std_data/Mongo3.jar and /tmp/tmpvedavx/JfzXAFx5hF/mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/std_data/Mongo3.jar differ diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/alter_xml2.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/alter_xml2.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/alter_xml2.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/alter_xml2.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,29 @@ +--source have_libxml2.inc + +--echo # +--echo # Testing changing table type (not in-place) +--echo # +CREATE TABLE t1 (c INT NOT NULL, d CHAR(10) NOT NULL) ENGINE=CONNECT TABLE_TYPE=CSV HEADER=1 QUOTED=1; +INSERT INTO t1 VALUES (1,'One'), (2,'Two'), (3,'Three'); +SELECT * FROM t1; + +--echo # This would fail if the top node name is not specified. +--echo # This is because the XML top node name defaults to the table name. +--echo # Sure enough the temporary table name begins with '#' and is rejected by XML. +--echo # Therefore the top node name must be specified (along with the row nodes name). +ALTER TABLE t1 TABLE_TYPE=XML TABNAME=t1 OPTION_LIST='xmlsup=libxml2,rownode=row'; +SELECT * FROM t1; +SHOW CREATE TABLE t1; + +--echo # Let us see the XML file +CREATE TABLE t2 (line VARCHAR(100) NOT NULL) ENGINE=CONNECT FILE_NAME='t1.xml'; +SELECT * FROM t2; +--echo # NOTE: The first (ignored) row is due to the remaining HEADER=1 option. + +--echo # Testing field option modification +ALTER TABLE t1 MODIFY d CHAR(10) NOT NULL FIELD_FORMAT='@', HEADER=0; +SELECT * FROM t1; +SHOW CREATE TABLE t1; +SELECT * FROM t2; + +DROP TABLE t1, t2; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/alter_xml.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/alter_xml.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/alter_xml.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/alter_xml.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ ---source have_libxml2.inc +--source windows.inc --echo # --echo # Testing changing table type (not in-place) @@ -11,7 +11,7 @@ --echo # This is because the XML top node name defaults to the table name. --echo # Sure enough the temporary table name begins with '#' and is rejected by XML. --echo # Therefore the top node name must be specified (along with the row nodes name). -ALTER TABLE t1 TABLE_TYPE=XML TABNAME=t1 OPTION_LIST='rownode=row'; +ALTER TABLE t1 TABLE_TYPE=XML TABNAME=t1 OPTION_LIST='xmlsup=domdoc,rownode=row'; SELECT * FROM t1; SHOW CREATE TABLE t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/infoschema2-9739.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/infoschema2-9739.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/infoschema2-9739.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/infoschema2-9739.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,9 @@ +# +# MDEV-9739 Assertion `m_status == DA_ERROR || m_status == DA_OK' failed in Diagnostics_area::message() ; connect.xml* tests fail in buildbot +# + +--source have_libxml2.inc + +create table t1 (i int) engine=Connect table_type=XML option_list='xmlsup=libxml2'; +select * from information_schema.tables where create_options like '%table_type=XML%'; +drop table t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/infoschema-9739.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/infoschema-9739.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/infoschema-9739.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/infoschema-9739.test 2017-12-21 15:48:50.000000000 +0000 @@ -2,8 +2,8 @@ # MDEV-9739 Assertion `m_status == DA_ERROR || m_status == DA_OK' failed in Diagnostics_area::message() ; connect.xml* tests fail in buildbot # ---source have_libxml2.inc +--source windows.inc -create table t1 (i int) engine=Connect table_type=XML; +create table t1 (i int) engine=Connect table_type=XML option_list='xmlsup=domdoc'; select * from information_schema.tables where create_options like '%table_type=XML%'; drop table t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/jdbc_new.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/jdbc_new.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/jdbc_new.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/jdbc_new.test 2017-12-21 15:48:50.000000000 +0000 @@ -161,7 +161,7 @@ CREATE TABLE t1 (a date, b datetime, c time, d timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, e year); SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); +INSERT IGNORE INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); SELECT * FROM t1; connection master; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_java_2.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_java_2.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_java_2.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_java_2.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,11 @@ +-- source jdbconn.inc +-- source mongo.inc + +eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo2.jar'; +let $DRV= Java; +let $VERS= 2; +let $TYPE= JSON; +let $CONN= CONNECTION='mongodb://localhost:27017' LRECL=4096; + +-- source mongo_test.inc +-- source jdbconn_cleanup.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_java_3.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_java_3.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_java_3.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_java_3.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,11 @@ +-- source jdbconn.inc +-- source mongo.inc + +eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo3.jar'; +let $DRV= Java; +let $VERS= 3; +let $TYPE= JSON; +let $CONN= CONNECTION='mongodb://localhost:27017' LRECL=4096; + +-- source mongo_test.inc +-- source jdbconn_cleanup.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_mongo_c.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_mongo_c.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_mongo_c.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_mongo_c.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,10 @@ +-- source mongo.inc + +let $DRV= C; +let $VERS= 0; +let $PROJ= {"projection":; +let $ENDP= }; +let $TYPE= JSON; +let $CONN= CONNECTION='mongodb://localhost:27017' LRECL=1024; + +-- source mongo_test.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json.test 2017-12-21 15:48:50.000000000 +0000 @@ -35,15 +35,15 @@ CREATE TABLE t1 ( ISBN CHAR(15), - Language CHAR(2) FIELD_FORMAT='LANG', - Subject CHAR(32) FIELD_FORMAT='SUBJECT', - Authors INT(2) FIELD_FORMAT='AUTHOR:[#]', - Title CHAR(32) FIELD_FORMAT='TITLE', - Translation CHAR(32) FIELD_FORMAT='TRANSLATION', - Translator CHAR(80) FIELD_FORMAT='TRANSLATOR', - Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', - Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', - Year int(4) FIELD_FORMAT='DATEPUB' + Language CHAR(2) FIELD_FORMAT='$.LANG', + Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', + Authors INT(2) FIELD_FORMAT='$.AUTHOR[#]', + Title CHAR(32) FIELD_FORMAT='$.TITLE', + Translation CHAR(32) FIELD_FORMAT='$.TRANSLATION', + Translator CHAR(80) FIELD_FORMAT='$.TRANSLATOR', + Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', + Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', + Year int(4) FIELD_FORMAT='$.DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; SELECT * FROM t1; @@ -55,16 +55,16 @@ CREATE TABLE t1 ( ISBN CHAR(15), - Language CHAR(2) FIELD_FORMAT='LANG', - Subject CHAR(32) FIELD_FORMAT='SUBJECT', - AuthorFN CHAR(128) FIELD_FORMAT='AUTHOR:[" and "]:FIRSTNAME', - AuthorLN CHAR(128) FIELD_FORMAT='AUTHOR:[" and "]:LASTNAME', - Title CHAR(32) FIELD_FORMAT='TITLE', - Translation CHAR(32) FIELD_FORMAT='TRANSLATION', - Translator CHAR(80) FIELD_FORMAT='TRANSLATOR', - Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', - Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', - Year int(4) FIELD_FORMAT='DATEPUB' + Language CHAR(2) FIELD_FORMAT='$.LANG', + Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', + AuthorFN CHAR(128) FIELD_FORMAT='$.AUTHOR[" and "].FIRSTNAME', + AuthorLN CHAR(128) FIELD_FORMAT='$.AUTHOR[" and "].LASTNAME', + Title CHAR(32) FIELD_FORMAT='$.TITLE', + Translation CHAR(32) FIELD_FORMAT='$.TRANSLATION', + Translator CHAR(80) FIELD_FORMAT='$.TRANSLATOR', + Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', + Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', + Year int(4) FIELD_FORMAT='$.DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; SELECT * FROM t1; @@ -76,16 +76,16 @@ CREATE TABLE t1 ( ISBN CHAR(15), - Language CHAR(2) FIELD_FORMAT='LANG', - Subject CHAR(32) FIELD_FORMAT='SUBJECT', - AuthorFN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:FIRSTNAME', - AuthorLN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:LASTNAME', - Title CHAR(32) FIELD_FORMAT='TITLE', - Translation CHAR(32) FIELD_FORMAT='TRANSLATION', - Translator CHAR(80) FIELD_FORMAT='TRANSLATOR', - Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', - Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', - Year int(4) FIELD_FORMAT='DATEPUB' + Language CHAR(2) FIELD_FORMAT='$.LANG', + Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', + AuthorFN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].FIRSTNAME', + AuthorLN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].LASTNAME', + Title CHAR(32) FIELD_FORMAT='$.TITLE', + Translation CHAR(32) FIELD_FORMAT='$.TRANSLATION', + Translator CHAR(80) FIELD_FORMAT='$.TRANSLATOR', + Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', + Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', + Year int(4) FIELD_FORMAT='$.DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; SELECT * FROM t1; @@ -98,7 +98,7 @@ CREATE TABLE t2 ( FIRSTNAME CHAR(32), LASTNAME CHAR(32)) -ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json' OPTION_LIST='Object=[1]:AUTHOR'; +ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json' OPTION_LIST='Object=$[1].AUTHOR'; SELECT * FROM t2; INSERT INTO t2 VALUES('Charles','Dickens'); SELECT * FROM t1; @@ -122,17 +122,17 @@ CREATE TABLE t1 ( ISBN CHAR(15) NOT NULL, - Language CHAR(2) FIELD_FORMAT='LANG', - Subject CHAR(32) FIELD_FORMAT='SUBJECT', - AuthorFN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:FIRSTNAME', - AuthorLN CHAR(128) FIELD_FORMAT='AUTHOR:[X]:LASTNAME', - Title CHAR(32) FIELD_FORMAT='TITLE', - Translation CHAR(32) FIELD_FORMAT='TRANSLATED:PREFIX', - TranslatorFN CHAR(80) FIELD_FORMAT='TRANSLATED:TRANSLATOR:FIRSTNAME', - TranslatorLN CHAR(80) FIELD_FORMAT='TRANSLATED:TRANSLATOR:LASTNAME', - Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', - Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', - Year int(4) FIELD_FORMAT='DATEPUB', + Language CHAR(2) FIELD_FORMAT='$.LANG', + Subject CHAR(32) FIELD_FORMAT='$.SUBJECT', + AuthorFN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].FIRSTNAME', + AuthorLN CHAR(128) FIELD_FORMAT='$.AUTHOR[*].LASTNAME', + Title CHAR(32) FIELD_FORMAT='$.TITLE', + Translation CHAR(32) FIELD_FORMAT='$.TRANSLATED.PREFIX', + TranslatorFN CHAR(80) FIELD_FORMAT='$.TRANSLATED.TRANSLATOR.FIRSTNAME', + TranslatorLN CHAR(80) FIELD_FORMAT='$.TRANSLATED.TRANSLATOR.LASTNAME', + Publisher CHAR(20) FIELD_FORMAT='$.PUBLISHER.NAME', + Location CHAR(16) FIELD_FORMAT='$.PUBLISHER.PLACE', + Year int(4) FIELD_FORMAT='$.DATEPUB', INDEX IX(ISBN) ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bib0.json' LRECL=320 OPTION_LIST='Pretty=0'; @@ -148,9 +148,9 @@ --echo # CREATE TABLE t1 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK::EXPENSE:["+"]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK::EXPENSE:[+]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[*].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[].EXPENSE["+"].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[].EXPENSE[+].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t1; DROP TABLE t1; @@ -160,9 +160,9 @@ --echo # CREATE TABLE t1 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[*].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[*].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[*].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; #--error ER_GET_ERRMSG SELECT * FROM t1; @@ -173,14 +173,14 @@ --echo # CREATE TABLE t1 ( WHO CHAR(12) NOT NULL, -WEEKS CHAR(12) NOT NULL FIELD_FORMAT='WEEK:[", "]:NUMBER', -SUMS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[+]:AMOUNT', -SUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[+]:AMOUNT', -AVGS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[!]:AMOUNT', -SUMAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[!]:AMOUNT', -AVGSUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[+]:AMOUNT', -AVGAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[!]:AMOUNT', -AVERAGE DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[X]:AMOUNT') +WEEKS CHAR(12) NOT NULL FIELD_FORMAT='$.WEEK[", "].NUMBER', +SUMS CHAR(64) NOT NULL FIELD_FORMAT='$.WEEK["+"].EXPENSE[+].AMOUNT', +SUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[+].EXPENSE[+].AMOUNT', +AVGS CHAR(64) NOT NULL FIELD_FORMAT='$.WEEK["+"].EXPENSE[!].AMOUNT', +SUMAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[+].EXPENSE[!].AMOUNT', +AVGSUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[!].EXPENSE[+].AMOUNT', +AVGAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[!].EXPENSE[!].AMOUNT', +AVERAGE DOUBLE(8,2) NOT NULL FIELD_FORMAT='$.WEEK[!].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t1; DROP TABLE t1; @@ -190,25 +190,25 @@ --echo # CREATE TABLE t2 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[0]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[0]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[0]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[0].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[0].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[0].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t2; CREATE TABLE t3 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[1]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[1].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[1].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[1].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t3; CREATE TABLE t4 ( WHO CHAR(12), -WEEK INT(2) FIELD_FORMAT='WEEK:[2]:NUMBER', -WHAT CHAR(32) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:AMOUNT') +WEEK INT(2) FIELD_FORMAT='$.WEEK[2].NUMBER', +WHAT CHAR(32) FIELD_FORMAT='$.WEEK[2].EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.WEEK[2].EXPENSE[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json'; SELECT * FROM t4; @@ -230,24 +230,24 @@ CREATE TABLE t2 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp3.json'; SELECT * FROM t2; CREATE TABLE t3 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp4.json'; SELECT * FROM t3; CREATE TABLE t4 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp5.json'; SELECT * FROM t4; @@ -257,8 +257,8 @@ CREATE TABLE t1 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp*.json' MULTIPLE=1; SELECT * FROM t1 ORDER BY WHO, WEEK, WHAT, AMOUNT; DROP TABLE t1; @@ -269,8 +269,8 @@ CREATE TABLE t1 ( WHO CHAR(12), WEEK INT(2), -WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', -AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') +WHAT CHAR(32) FIELD_FORMAT='$.EXPENSE[*].WHAT', +AMOUNT DOUBLE(8,2) FIELD_FORMAT='$.EXPENSE.[*].AMOUNT') ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp%s.json'; ALTER TABLE t1 PARTITION BY LIST COLUMNS(WEEK) ( diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf2.inc mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf2.inc --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf2.inc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf2.inc 2017-12-21 15:48:50.000000000 +0000 @@ -1,10 +1,10 @@ --disable_query_log -DROP FUNCTION json_array; +DROP FUNCTION json_make_array; DROP FUNCTION json_array_add; DROP FUNCTION json_array_add_values; DROP FUNCTION json_array_delete; -DROP FUNCTION json_object; +DROP FUNCTION json_make_object; DROP FUNCTION json_object_nonull; DROP FUNCTION json_object_key; DROP FUNCTION json_object_add; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf_bin.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf_bin.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf_bin.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf_bin.test 2017-12-21 15:48:50.000000000 +0000 @@ -16,7 +16,7 @@ SELECT Json_Array_Delete(Jbin_Array_Add_Values(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), "One more", 2), 4); SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), NULL), '[1]', 1); SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]'); -SELECT Json_Array(1, TRUE, 0, FALSE); +SELECT Json_Make_Array(1, TRUE, 0, FALSE); SELECT Json_Serialize(Jbin_Array(TRUE, FALSE)); # SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL); @@ -35,65 +35,65 @@ SELECT JsonLocate(Jbin_File('gloss.json'),'XML'); # SELECT Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33)); -SELECT Json_Get_Item(Json_Array('a','b','c'), '[1]'); -SELECT Json_Get_Item(Json_Object('foo' AS "first", Json_Array('a', 33) AS "json_second"), 'second') AS "item"; -SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), 'second:*') item; -SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'); -SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv')); -SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*'); -SELECT JsonGet_String(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') lang; -SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') "See also"; -SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso')) "See also"; -SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso'),'[0]') lang; +SELECT Json_Get_Item(Json_Make_Array('a','b','c'), '$[1]'); +SELECT Json_Get_Item(Json_Make_Object('foo' AS "first", Json_Make_Array('a', 33) AS "json_second"), '$.second') AS "item"; +SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), '$.second') item; +SELECT Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv'); +SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv')); +SELECT Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv'); +SELECT JsonGet_String(Json_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso') lang; +SELECT Json_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso') "See also"; +SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso')) "See also"; +SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'$.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso'),'$[0]') lang; --echo # --echo # Test Item Get/Set/Insert/Update UDF's --echo # -SELECT Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]'); -SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]'); -SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]'); +SELECT Json_Get_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '$[]'); +SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '$[1]'); +SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '$[1]'); # -SELECT Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4))); +SELECT Json_Set_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4))); --error ER_CANT_INITIALIZE_UDF -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 'foo'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo'); -SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]'); -SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]'); -SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]'); -SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '$.foo'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '$[1]'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 7, '$[1]'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Make_Array(7, 8, 9), '$[1]'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[2]'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[2].*'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, '$.foo'); +SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '$[1][2]'); +SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '$[2].nxt.total[]'); +SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 300, '$[2].nxt.total[]'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '$[1]', 5, '$[2].cinq', 10, '$[1][]'); +SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '$[2].quatre'); SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc'); SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, ''); SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '*'); -SELECT Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')); +SELECT Json_Serialize(Jbin_Set_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq')); # -SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'); -SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'); -SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre'); -SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre'); -SELECT Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]'); -SELECT Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]'); -SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]'); -SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]'); +SELECT Json_Insert_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq'); +SELECT Json_Update_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq'); +SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 44, '$[2].quatre'); +SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][]', 44, '$[2].quatre'); +SELECT Json_Insert_Item(Json_Make_Array(1, Json_Make_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][1]', 300, '$[2].nxt.total[]'); +SELECT Json_Update_Item(Json_Make_Array(1, Json_Make_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[2].cinq', 10, '$[1][1]', 300, '$[2].nxt.total[]'); +SELECT Json_Insert_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[]'); +SELECT Json_Update_Item(Json_Make_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '$[]'); --echo # --echo # Test merging items UDF's --echo # SELECT Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')); -SELECT Json_Item_Merge(Json_Array('a','b','c'), Json_Array('d','e','f')) AS "Result"; +SELECT Json_Item_Merge(Json_Make_Array('a','b','c'), Json_Make_Array('d','e','f')) AS "Result"; SELECT Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3); SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")); SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",2 "c"), Jbin_Array('d','e','f')); SELECT Json_Object_Add(Jbin_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")), 'x' AS "and"); SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f")); --error ER_CANT_INITIALIZE_UDF -SELECT Json_Item_Merge('foo', Json_Array('d','e','f')); +SELECT Json_Item_Merge('foo', Json_Make_Array('d','e','f')); --echo # --echo # Test making file UDF's @@ -116,14 +116,14 @@ SELECT Json_File('bt1.json', 2); --echo # Back to the original file SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json'); -SELECT Json_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result"; -SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result"; -SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result"; --echo # This does modify the file -SELECT Json_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result"; +SELECT Json_Make_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result"; SELECT Json_File('bt1.json'); SELECT Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2); -SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1; SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result"; SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json'); SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result" from t1; @@ -140,11 +140,11 @@ SELECT Json_File(Json_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f'))); SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json'); --echo # Test DELETE from file -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result"; -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result"; -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1; -SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; -SELECT Json_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; +SELECT Json_Make_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1; --echo # Show modified file SELECT Json_File('bt1.json'); --echo # Object file @@ -153,11 +153,11 @@ SELECT Json_File('bt2.json'); SELECT Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d")); --echo # First query (file not modified) -SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result"; +SELECT Json_Make_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result"; --echo # First query (file modified) -SELECT Json_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result"; +SELECT Json_Make_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result"; SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0); -SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1; SELECT Json_File(Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e")) AS "Result"; SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e") AS "Result" from t1; SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), n "n") AS "Result" from t1; @@ -167,13 +167,13 @@ SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0); SELECT Json_Serialize(Jbin_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result"; SELECT Json_File(Json_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result"; -SELECT Json_Item_Merge(Json_Object(1 "a", 2 "b", 3 "c"), Json_Object(4 "d",5 "b",6 "f")) AS "Result"; +SELECT Json_Item_Merge(Json_Make_Object(1 "a", 2 "b", 3 "c"), Json_Make_Object(4 "d",5 "b",6 "f")) AS "Result"; # -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result"; -SELECT Json_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result"; -SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result"; +SELECT Json_Make_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result"; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result"; +SELECT Json_Make_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1; # SELECT Json_Serialize(Jbin_Object_List(Jbin_File('bt2.json'))) "Key list"; @@ -181,9 +181,9 @@ # Test documentation examples # SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0); -SELECT Json_Array_Add(Json_File('bt3.json', 'b'), 66); -SELECT Json_Array_Add(Json_File('bt3.json'), 66, 'b'); -SELECT Json_Array_Add(Jbin_File('bt3.json', 'b'), 66); +SELECT Json_Array_Add(Json_File('bt3.json', '$.b'), 66); +SELECT Json_Array_Add(Json_File('bt3.json'), 66, '$.b'); +SELECT Json_Array_Add(Jbin_File('bt3.json', '$.b'), 66); SELECT Json_File('bt3.json', 3); SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0); # @@ -193,11 +193,11 @@ ENGINE= MYISAM; INSERT INTO t2 VALUES(1,'bt3.json'); --echo # In this table, the jfile_cols column just contains a file name -UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', 'b'), 66) WHERE n = 1; +UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', '$.b'), 66) WHERE n = 1; SELECT JsonGet_String(jfile_cols, '*') FROM t2; -UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, 'b:[]') WHERE n = 1; -SELECT JsonGet_String(jfile_cols, 'b:*') FROM t2; -UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, 'b:') , 99, 'b:') WHERE n = 1; +UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, '$.b[]') WHERE n = 1; +SELECT JsonGet_String(jfile_cols, '$.b.*') FROM t2; +UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, '$.b[]') , 99, '$.b[]') WHERE n = 1; SELECT JsonGet_String(jfile_cols, '*') FROM t2; DROP TABLE t1, t2; @@ -210,3 +210,4 @@ --remove_file $MYSQLD_DATADIR/bt1.json --remove_file $MYSQLD_DATADIR/bt2.json --remove_file $MYSQLD_DATADIR/bt3.json + diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf.inc mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf.inc --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf.inc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf.inc 2017-12-21 15:48:50.000000000 +0000 @@ -9,11 +9,11 @@ --skip Needs a dynamically built ha_connect.so } ---eval CREATE FUNCTION json_array RETURNS STRING SONAME '$HA_CONNECT_SO'; +--eval CREATE FUNCTION json_make_array RETURNS STRING SONAME '$HA_CONNECT_SO'; --eval CREATE FUNCTION json_array_add RETURNS STRING SONAME '$HA_CONNECT_SO'; --eval CREATE FUNCTION json_array_add_values RETURNS STRING SONAME '$HA_CONNECT_SO'; --eval CREATE FUNCTION json_array_delete RETURNS STRING SONAME '$HA_CONNECT_SO'; ---eval CREATE FUNCTION json_object RETURNS STRING SONAME '$HA_CONNECT_SO'; +--eval CREATE FUNCTION json_make_object RETURNS STRING SONAME '$HA_CONNECT_SO'; --eval CREATE FUNCTION json_object_nonull RETURNS STRING SONAME '$HA_CONNECT_SO'; --eval CREATE FUNCTION json_object_key RETURNS STRING SONAME '$HA_CONNECT_SO'; --eval CREATE FUNCTION json_object_add RETURNS STRING SONAME '$HA_CONNECT_SO'; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/json_udf.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/json_udf.test 2017-12-21 15:48:50.000000000 +0000 @@ -22,13 +22,13 @@ SELECT JsonValue(); SELECT JsonValue('[11, 22, 33]' json_) FROM t1; # -SELECT Json_Array(); -SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL); -SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE); +SELECT Json_Make_Array(); +SELECT Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL); +SELECT Json_Make_Array(Json_Make_Array(56, 3.1416, 'foo'), TRUE); # --error ER_CANT_INITIALIZE_UDF -SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL)) Array; -SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL), 'One more') Array; +SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL)) Array; +SELECT Json_Array_Add(Json_Make_Array(56, 3.1416, 'foo', NULL), 'One more') Array; --error ER_CANT_INITIALIZE_UDF SELECT Json_Array_Add(JsonValue('one value'), 'One more'); --error ER_CANT_INITIALIZE_UDF @@ -39,38 +39,38 @@ SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0); SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 2) Array; SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9); -SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1); -SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1); -SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]'); -# -SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array; -SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), 'One more', 'Two more') Array FROM t1; -SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), n) Array FROM t1; -SELECT Json_Array_Add_Values(Json_Array(n, 3.1416, 'machin'), n) Array FROM t1; +SELECT Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), '[2]', 33, 1); +SELECT Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), 33, '[2]', 1); +SELECT Json_Array_Add(Json_Make_Array(1, 2, Json_Make_Array(11, 22)), 33, 1, '[2]'); +# +SELECT Json_Array_Add_Values(Json_Make_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array; +SELECT Json_Array_Add_Values(Json_Make_Array(56, 3.1416, 'machin'), 'One more', 'Two more') Array FROM t1; +SELECT Json_Array_Add_Values(Json_Make_Array(56, 3.1416, 'machin'), n) Array FROM t1; +SELECT Json_Array_Add_Values(Json_Make_Array(n, 3.1416, 'machin'), n) Array FROM t1; SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array; # -SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0); -SELECT Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2); -SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2'); -SELECT Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2); -# -SELECT Json_Object(56, 3.1416, 'foo', NULL); -SELECT Json_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty); -SELECT Json_Object(); -SELECT Json_Object(Json_Array(56, 3.1416, 'foo'), NULL); -SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL); +SELECT Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), 0); +SELECT Json_Array_Delete(Json_Make_Object(56, 3.1416, 'My name is Foo', NULL), 2); +SELECT Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), '2'); +SELECT Json_Array_Delete(Json_Make_Array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2); +# +SELECT Json_Make_Object(56, 3.1416, 'foo', NULL); +SELECT Json_Make_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty); +SELECT Json_Make_Object(); +SELECT Json_Make_Object(Json_Make_Array(56, 3.1416, 'foo'), NULL); +SELECT Json_Make_Array(Json_Make_Object(56 "qty", 3.1416 "price", 'foo') ,NULL); SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL); --error ER_CANT_INITIALIZE_UDF SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty'); # -SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color); -SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price); +SELECT Json_Object_Add(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color); +SELECT Json_Object_Add(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price); SELECT Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1); # -SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc'); -SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose'); +SELECT Json_Object_Delete(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc'); +SELECT Json_Object_Delete(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose'); # -SELECT Json_Object_List(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List"; +SELECT Json_Object_List(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List"; SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List"; --echo # @@ -89,8 +89,8 @@ DATEPUB int(4) ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json'; -SELECT Json_Array(AUTHOR, TITLE, DATEPUB) FROM t2; -SELECT Json_Object(AUTHOR, TITLE, DATEPUB) FROM t2; +SELECT Json_Make_Array(AUTHOR, TITLE, DATEPUB) FROM t2; +SELECT Json_Make_Object(AUTHOR, TITLE, DATEPUB) FROM t2; --error ER_CANT_INITIALIZE_UDF SELECT Json_Array_Grp(TITLE, DATEPUB) FROM t2; SELECT Json_Array_Grp(TITLE) FROM t2; @@ -106,19 +106,19 @@ SALARY DOUBLE(8,2) NOT NULL FLAG=52 ) ENGINE=CONNECT TABLE_TYPE=FIX BLOCK_SIZE=8 FILE_NAME='employee.dat' ENDING=1; -SELECT Json_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT'; +SELECT Json_Make_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT'; SELECT DEPARTMENT, Json_Array_Grp(NAME) FROM t3 GROUP BY DEPARTMENT; #SET connect_json_grp_size=30; Deprecated SELECT JsonSet_Grp_Size(30); -SELECT Json_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title; -SELECT Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT; -SELECT Json_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) FROM t3 GROUP BY DEPARTMENT; -SELECT Json_Object(DEPARTMENT, Json_Array_Grp(Json_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT; -SELECT Json_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT, TITLE; +SELECT Json_Make_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title; +SELECT Json_Make_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT; +SELECT Json_Make_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) FROM t3 GROUP BY DEPARTMENT; +SELECT Json_Make_Object(DEPARTMENT, Json_Array_Grp(Json_Make_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT; +SELECT Json_Make_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Make_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT, TITLE; --error ER_CANT_INITIALIZE_UDF SELECT Json_Object_Grp(SALARY) FROM t3; SELECT Json_Object_Grp(NAME, SALARY) FROM t3; -SELECT Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT; +SELECT Json_Make_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT; SELECT Json_Array_Grp(NAME) FROM t3; # SELECT Json_Object_Key(name, title) FROM t3 WHERE DEPARTMENT = 318; @@ -131,59 +131,59 @@ SELECT JsonGet_String(Json_Array_Grp(name),'[","]') FROM t3; SELECT JsonGet_String(Json_Array_Grp(name),'[>]') FROM t3; SET @j1 = '[45,28,36,45,89]'; -SELECT JsonGet_String(@j1,'[1]'); -SELECT JsonGet_String(@j1 json_,'[3]'); -SELECT JsonGet_String(Json_Array(45,28,36,45,89),'[3]'); -SELECT JsonGet_String(Json_Array(45,28,36,45,89),'["+"]') "list",'=' as "egal",JsonGet_String(Json_Array(45,28,36,45,89),'[+]') "sum"; -SELECT JsonGet_String(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]'); -SELECT JsonGet_String(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:*'); -SELECT JsonGet_String(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'truc'); +SELECT JsonGet_String(@j1,'1'); +SELECT JsonGet_String(@j1 json_,'3'); +SELECT JsonGet_String(Json_Make_Array(45,28,36,45,89),'3'); +SELECT JsonGet_String(Json_Make_Array(45,28,36,45,89),'["+"]') "list",'=' as "egal",JsonGet_String(Json_Make_Array(45,28,36,45,89),'[+]') "sum"; +SELECT JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)),'1.0'); +SELECT JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)),'1.*'); +SELECT JsonGet_String(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'truc'); SET @j2 = '{"qty":56,"price":3.141600,"truc":"machin","garanty":null}'; SELECT JsonGet_String(@j2 json_,'truc'); SELECT JsonGet_String(@j2,'truc'); SELECT JsonGet_String(@j2,'chose'); SELECT JsonGet_String(NULL json_, NULL); -SELECT department, JsonGet_String(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department; +SELECT department, JsonGet_String(Json_Make_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries.[+]') Sumsal FROM t3 GROUP BY department; # -SELECT JsonGet_Int(@j1, '[4]'); +SELECT JsonGet_Int(@j1, '4'); SELECT JsonGet_Int(@j1, '[#]'); SELECT JsonGet_Int(@j1, '[+]'); -SELECT JsonGet_Int(@j1 json_, '[3]'); -SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[3]'); -SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]'); -SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[+]'); -SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]'); -SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]'); -SELECT JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty'); +SELECT JsonGet_Int(@j1 json_, '3'); +SELECT JsonGet_Int(Json_Make_Array(45,28,36,45,89), '3'); +SELECT JsonGet_Int(Json_Make_Array(45,28,36,45,89), '["+"]'); +SELECT JsonGet_Int(Json_Make_Array(45,28,36,45,89), '[+]'); +SELECT JsonGet_Int(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '1.0'); +SELECT JsonGet_Int(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '0.1'); +SELECT JsonGet_Int(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty'); SELECT JsonGet_Int(@j2 json_, 'price'); SELECT JsonGet_Int(@j2, 'qty'); SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose'); -SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)), '[1]:*'), '[+]') sum; -SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries:[+]') Sumsal FROM t3 GROUP BY department; +SELECT JsonGet_Int(JsonGet_String(Json_Make_Array(Json_Make_Array(45,28),Json_Make_Array(36,45,89)), '1.*'), '[+]') sum; +SELECT department, JsonGet_Int(Json_Make_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries.[+]') Sumsal FROM t3 GROUP BY department; # -SELECT JsonGet_Real(@j1, '[2]'); -SELECT JsonGet_Real(@j1 json_, '[3]', 2); -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[3]'); -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]'); -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[+]'); -SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[!]'); -SELECT JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]'); -SELECT JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price'); +SELECT JsonGet_Real(@j1, '2'); +SELECT JsonGet_Real(@j1 json_, '3', 2); +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '3'); +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '["+"]'); +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[+]'); +SELECT JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[!]'); +SELECT JsonGet_Real(Json_Make_Array(Json_Make_Array(45,28), Json_Make_Array(36,45,89)), '1.0'); +SELECT JsonGet_Real(Json_Make_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price'); SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty'); SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price'); SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price', 4); SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose'); -SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department; +SELECT department, JsonGet_Real(Json_Make_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries.[+]') Sumsal FROM t3 GROUP BY department; --echo # --echo # Documentation examples --echo # SELECT - JsonGet_Int(Json_Array(45,28,36,45,89), '[4]') "Rank", - JsonGet_Int(Json_Array(45,28,36,45,89), '[#]') "Number", - JsonGet_String(Json_Array(45,28,36,45,89), '[","]') "Concat", - JsonGet_Int(Json_Array(45,28,36,45,89), '[+]') "Sum", - JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg"; + JsonGet_Int(Json_Make_Array(45,28,36,45,89), '4') "Rank", + JsonGet_Int(Json_Make_Array(45,28,36,45,89), '[#]') "Number", + JsonGet_String(Json_Make_Array(45,28,36,45,89), '[","]') "Concat", + JsonGet_Int(Json_Make_Array(45,28,36,45,89), '[+]') "Sum", + JsonGet_Real(Json_Make_Array(45,28,36,45,89), '[!]', 2) "Avg"; SELECT JsonGet_String('{"qty":7,"price":29.50,"garanty":null}', 'price') "String", JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}', 'price') "Int", @@ -193,10 +193,10 @@ --echo # --echo # Testing Locate --echo # -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'machin'); -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),56); -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),3.1416); -SELECT JsonLocate(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'chose'); +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'machin'); +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),56); +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),3.1416); +SELECT JsonLocate(Json_Make_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'chose'); SELECT JsonLocate('{"AUTHORS":[{"FN":"Jules", "LN":"Verne"}, {"FN":"Jack", "LN":"London"}]}' json_, 'Jack') Path; SELECT JsonLocate('{"AUTHORS":[{"FN":"Jules", "LN":"Verne"}, {"FN":"Jack", "LN":"London"}]}' json_, 'jack' ci) Path; SELECT JsonLocate('{"AUTHORS":[{"FN":"Jules", "LN":"Verne"}, {"FN":"Jack", "LN":"London"}]}' json_, '{"FN":"Jack", "LN":"London"}' json_) Path; @@ -220,7 +220,7 @@ SELECT Json_Locate_All('[[45,28],[[36,45],89]]','[36,45]' json_); SELECT JsonGet_Int(Json_Locate_All('[[45,28],[[36,45],89]]',45), '[#]') "Nb of occurs"; SELECT Json_Locate_All('[[45,28],[[36,45],89]]',45,2); -SELECT JsonGet_String(Json_Locate_All('[45,28,36,45,89]',45),'[0]'); +SELECT JsonGet_String(Json_Locate_All('[45,28,36,45,89]',45),'0'); SELECT JsonLocate(Json_File('test/biblio.json'), 'Knab'); SELECT Json_Locate_All('test/biblio.json' jfile_, 'Knab'); @@ -237,21 +237,21 @@ SELECT Json_File('test/fx.json', 1); SELECT Json_File('test/fx.json', 2); SELECT Json_File('test/fx.json', 0); -SELECT Json_File('test/fx.json', '[0]'); +SELECT Json_File('test/fx.json', '0'); SELECT Json_File('test/fx.json', '[?]'); -SELECT JsonGet_String(Json_File('test/fx.json'), '[1]:*'); -SELECT JsonGet_String(Json_File('test/fx.json'), '[1]'); -SELECT JsonGet_Int(Json_File('test/fx.json'), '[1]:mileage') AS Mileage; -SELECT JsonGet_Real(Json_File('test/fx.json'), '[0]:price', 2) AS Price; -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 'ratings'); -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 1, 'ratings'); -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]'), 6, 'ratings', 1); -SELECT Json_Array_Add(Json_File('test/fx.json', '[2]:ratings'), 6, 0); -SELECT Json_Array_Delete(Json_File('test/fx.json', '[2]'), 'ratings', 1); -SELECT Json_Object_Add(Json_File('test/fx.json', '[2]'), 'france' origin); -SELECT Json_Object_Add(Json_File('test/fx.json', '[2]'), 70 H, 'size'); -SELECT Json_Object_Add(Json_File('test/fx.json', '[3]'), 70 H, 'size'); -SELECT Json_Object_List(Json_File('test/fx.json', '[3]:size')); +SELECT JsonGet_String(Json_File('test/fx.json'), '1.*'); +SELECT JsonGet_String(Json_File('test/fx.json'), '1'); +SELECT JsonGet_Int(Json_File('test/fx.json'), '1.mileage') AS Mileage; +SELECT JsonGet_Real(Json_File('test/fx.json'), '0.price', 2) AS Price; +SELECT Json_Array_Add(Json_File('test/fx.json', '2'), 6, 'ratings'); +SELECT Json_Array_Add(Json_File('test/fx.json', '2'), 6, 1, 'ratings'); +SELECT Json_Array_Add(Json_File('test/fx.json', '2'), 6, 'ratings', 1); +SELECT Json_Array_Add(Json_File('test/fx.json', '2.ratings'), 6, 0); +SELECT Json_Array_Delete(Json_File('test/fx.json', '2'), 'ratings', 1); +SELECT Json_Object_Add(Json_File('test/fx.json', '2'), 'france' origin); +SELECT Json_Object_Add(Json_File('test/fx.json', '2'), 70 H, 'size'); +SELECT Json_Object_Add(Json_File('test/fx.json', '3'), 70 H, 'size'); +SELECT Json_Object_List(Json_File('test/fx.json', '3.size')); DROP TABLE t1; DROP TABLE t2; @@ -264,3 +264,5 @@ --remove_file $MYSQLD_DATADIR/test/biblio.json --remove_file $MYSQLD_DATADIR/test/employee.dat --remove_file $MYSQLD_DATADIR/test/fx.json + + diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_c.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_c.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_c.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_c.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,9 @@ +-- source mongo.inc + +let $DRV= C; +let $VERS= 0; +let $PROJ= {"projection":; +let $ENDP= }; +let $TYPE= MONGO; + +-- source mongo_test.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo.inc mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo.inc --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo.inc 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,3 @@ +let $MONGO= C:/PROGRA~1/MongoDB/Server/3.4/bin/mongo; +let $MONGOIMPORT= C:/PROGRA~1/MongoDB/Server/3.4/bin/mongoimport; + diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_java_2.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_java_2.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_java_2.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_java_2.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,10 @@ +-- source jdbconn.inc +-- source mongo.inc + +eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo2.jar'; +let $DRV= Java; +let $VERS= 2; +let $TYPE= MONGO; + +-- source mongo_test.inc +-- source jdbconn_cleanup.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_java_3.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_java_3.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_java_3.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_java_3.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,10 @@ +-- source jdbconn.inc +-- source mongo.inc + +eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo3.jar'; +let $DRV= Java; +let $VERS= 3; +let $TYPE= MONGO; + +-- source mongo_test.inc +-- source jdbconn_cleanup.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_test.inc mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_test.inc --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mongo_test.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mongo_test.inc 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,207 @@ +#set connect_enable_mongo=1; + +--echo # +--echo # Test the MONGO table type +--echo # +eval CREATE TABLE t1 (Document varchar(1024) field_format='*') +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME=restaurants $CONN +OPTION_LIST='Driver=$DRV,Version=$VERS' DATA_CHARSET=utf8; +SELECT * from t1 limit 3; +DROP TABLE t1; + +--echo # +--echo # Test catfunc +--echo # +eval CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME=restaurants CATFUNC=columns +OPTION_LIST='Level=1,Driver=$DRV,Version=$VERS' DATA_CHARSET=utf8 $CONN; +SELECT * from t1; +DROP TABLE t1; + +--echo # +--echo # Explicit columns +--echo # +eval CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(255) NOT NULL, +cuisine VARCHAR(255) NOT NULL, +borough VARCHAR(255) NOT NULL, +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME=restaurants +CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET=utf8 +OPTION_LIST='Driver=$DRV,Version=$VERS'; +SELECT * FROM t1 LIMIT 10; +DROP TABLE t1; + +--echo # +--echo # Test discovery +--echo # +eval CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME=restaurants +OPTION_LIST='Level=1,Driver=$DRV,Version=$VERS' $CONN DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +SELECT * FROM t1 LIMIT 5; +DROP TABLE t1; + +--echo # +--echo # Dropping a column +--echo # +let $COLIST= $PROJ{"grades":0}$ENDP; +eval CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME=restaurants DATA_CHARSET=utf8 +COLIST='$COLIST' OPTION_LIST='Driver=$DRV,Version=$VERS,level=0' $CONN; +SELECT * FROM t1 LIMIT 10; +DROP TABLE t1; + +--echo # +--echo # Specifying Jpath +--echo # +eval CREATE TABLE t1 ( +_id VARCHAR(24) NOT NULL, +name VARCHAR(64) NOT NULL, +cuisine CHAR(200) NOT NULL, +borough CHAR(16) NOT NULL, +street VARCHAR(65) FIELD_FORMAT='address.street', +building CHAR(16) FIELD_FORMAT='address.building', +zipcode CHAR(5) FIELD_FORMAT='address.zipcode', +grade CHAR(1) FIELD_FORMAT='grades.0.grade', +score INT(4) NOT NULL FIELD_FORMAT='grades.0.score', +`date` DATE FIELD_FORMAT='grades.0.date', +restaurant_id VARCHAR(255) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='restaurants' DATA_CHARSET=utf8 +OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN; +--vertical_results +SELECT * FROM t1 LIMIT 1; +--horizontal_results +SELECT name, street, score, date FROM t1 LIMIT 5; +SELECT name, cuisine, borough FROM t1 WHERE grade = 'A' LIMIT 10; +SELECT COUNT(*) FROM t1 WHERE grade = 'A'; +SELECT * FROM t1 WHERE cuisine = 'English'; +SELECT * FROM t1 WHERE score = building; +DROP TABLE t1; + +--echo # +--echo # Specifying Filter +--echo # +eval CREATE TABLE t1 ( +_id CHAR(24) NOT NULL, +name CHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +restaurant_id CHAR(8) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME=restaurants DATA_CHARSET=utf8 +FILTER='{"cuisine":"French","borough":{"\$ne":"Manhattan"}}' +OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN; +SELECT name FROM t1 WHERE borough = 'Queens'; +DROP TABLE t1; + +--echo # +--echo # Testing pipeline +--echo # +eval CREATE TABLE t1 ( +name VARCHAR(64) NOT NULL, +borough CHAR(16) NOT NULL, +date DATETIME NOT NULL, +grade CHAR(1) NOT NULL, +score INT(4) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='restaurants' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"\$match":{"cuisine":"French"}},{"\$unwind":"\$grades"},{"\$project":{"_id":0,"name":1,"borough":1,"date":"\$grades.date","grade":"\$grades.grade","score":"\$grades.score"}}]}' +OPTION_LIST='Driver=$DRV,Version=$VERS,Pipeline=1' $CONN; +SELECT * FROM t1 LIMIT 10; +SELECT name, grade, score, date FROM t1 WHERE borough = 'Bronx'; +DROP TABLE t1; + +--echo # +--echo # try level 2 discovery +--echo # +let $COLIST= $PROJ{"cuisine":0}$ENDP; +eval CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME=restaurants +FILTER='{"cuisine":"French","borough":{"\$ne":"Manhattan"}}' +COLIST='$COLIST' $CONN +OPTION_LIST='Driver=$DRV,level=2,version=$VERS'; +SHOW CREATE TABLE t1; +IF ($TYPE == MONGO) +{ +SELECT name, borough, address_street, grades_0_score AS score FROM t1 WHERE grades_0_grade = 'B'; +} +IF ($TYPE == JSON) +{ +SELECT name, borough, address_street, grades_score AS score FROM t1 WHERE grades_grade = 'B'; +} +DROP TABLE t1; + +--echo # +--echo # try CRUD operations +--echo # +--exec $MONGO --eval "db.testcoll.drop()" --quiet +eval CREATE TABLE t1 (_id INT(4) NOT NULL, msg CHAR(64)) +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='testcoll' +OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN; +DELETE FROM t1; +INSERT INTO t1 VALUES(0,NULL),(1,'One'),(2,'Two'),(3,'Three'); +SELECT * FROM t1; +UPDATE t1 SET msg = 'Deux' WHERE _id = 2; +DELETE FROM t1 WHERE msg IS NULL; +SELECT * FROM t1; +DELETE FROM t1; +DROP TABLE t1; +--exec $MONGO --eval "db.testcoll.drop()" --quiet + +--echo # +--echo # List states whose population is equal or more than 10 millions +--echo # +--exec $MONGO --eval "db.cities.drop()" --quiet +--exec $MONGOIMPORT --quiet $MTR_SUITE_DIR/std_data/cities.json +eval CREATE TABLE t1 ( + _id char(5) NOT NULL, + city char(16) NOT NULL, + loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', + loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', + pop int(11) NOT NULL, + state char(2) NOT NULL) +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=$TYPE TABNAME='cities' +OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN DATA_CHARSET='utf8'; +--echo # Using SQL for grouping +SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; +DROP TABLE t1; + +--echo # Using a pipeline for grouping +eval CREATE TABLE t1 (_id CHAR(2) NOT NULL, totalPop INT(11) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='cities' DATA_CHARSET=utf8 +COLIST='{"pipeline":[{"\$group":{"_id":"\$state","totalPop":{"\$sum":"\$pop"}}},{"\$match":{"totalPop":{"\$gte":10000000}}},{"\$sort":{"totalPop":-1}}]}' +OPTION_LIST='Driver=$DRV,Version=$VERS,Pipeline=1' $CONN; +SELECT * FROM t1; +DROP TABLE t1; +--exec $MONGO --eval "db.cities.drop()" --quiet + +--echo # +--echo # Test making array +--echo # +eval CREATE TABLE t1 ( + _id int(4) NOT NULL, + item CHAR(8) NOT NULL, + prices_0 INT(6) FIELD_FORMAT='prices.0', + prices_1 INT(6) FIELD_FORMAT='prices.1', + prices_2 INT(6) FIELD_FORMAT='prices.2', + prices_3 INT(6) FIELD_FORMAT='prices.3', + prices_4 INT(6) FIELD_FORMAT='prices.4') +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='testcoll' DATA_CHARSET=utf8 +OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN; +INSERT INTO t1 VALUES +(1,'journal',87,45,63,12,78), +(2,'notebook',123,456,789,NULL,NULL), +(3,'paper',5,7,3,8,NULL), +(4,'planner',25,71,NULL,44,27), +(5,'postcard',5,7,3,8,NULL); +SELECT * FROM t1; +DROP TABLE t1; + +--echo # +--echo # Test array aggregation +--echo # +eval CREATE TABLE t1 +ENGINE=CONNECT TABLE_TYPE=$TYPE TABNAME='testcoll' +COLIST='{"pipeline":[{"\$project":{"_id":0,"item":1,"total":{"\$sum":"\$prices"},"average":{"\$avg":"\$prices"}}}]}' +OPTION_LIST='Driver=$DRV,Version=$VERS,Pipeline=YES' $CONN; +SELECT * FROM t1; +DROP TABLE t1; +--exec $MONGO --eval "db.testcoll.drop()" --quiet + +#set connect_enable_mongo=0; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mul_new.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mul_new.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mul_new.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mul_new.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,67 @@ +let $MYSQLD_DATADIR= `select @@datadir`; +--mkdir $MYSQLD_DATADIR/test/subdir/ + +--echo # +--echo # Testing multiple 1 +--echo # +CREATE TABLE t1 ( + Chiffre int(3) NOT NULL, + Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='num1.csv' LRECL=20 HEADER=1; +INSERT INTO t1 VALUES(1,'One'),(2,'Two'),(3,'Three'),(4,'Four'),(5,'Five'),(6,'Six'); +SELECT * FROM t1; + +CREATE TABLE t2 ( + Chiffre int(3) NOT NULL, + Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='subdir/num2.csv' LRECL=20 HEADER=1; +INSERT INTO t2 VALUES(7,'Seven'),(8,'Eight'),(9,'Nine'),(10,'Ten'),(11,'Eleven'),(12,'Twelve'); +SELECT * FROM t2; + +CREATE TABLE t3 ( + Chiffre int(3) NOT NULL, + Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='num3.csv' LRECL=20 HEADER=1; +INSERT INTO t3 VALUES(13,'Thirteen'),(14,'Fourteen'),(15,'Fifteen'),(16,'Sixteen'),(17,'Seventeen'),(18,'Eighteen'); +SELECT * FROM t3; + +CREATE TABLE t4 ( + Chiffre int(3) NOT NULL, + Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='subdir/num4.csv' LRECL=20 HEADER=1; +INSERT INTO t4 VALUES(19,'Nineteen'),(20,'Twenty'),(21,'Twenty one'),(22,'Twenty two'),(23,'Tenty three'),(24,'Twenty four'); +SELECT * FROM t4; + +CREATE TABLE t5 ( + Chiffre int(3) NOT NULL, + Lettre char(16) NOT NULL) +ENGINE=CONNECT TABLE_TYPE='CSV' FILE_NAME='num5.csv' LRECL=20 HEADER=1; +INSERT INTO t5 VALUES(25,'Twenty five'),(26,'Twenty six'),(27,'Twenty seven'),(28,'Twenty eight'),(29,'Tenty eight'),(30,'Thirty'); +SELECT * FROM t5; + +CREATE TABLE t_all ( + Chiffre int(3) not null, + Lettre char(16) not null) +ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='num?.csv' HEADER=1 LRECL=20 MULTIPLE=1; +SELECT * FROM t_all ORDER BY Chiffre; + +--echo # +--echo # Testing multiple 3 +--echo # +ALTER TABLE t_all MULTIPLE=3; +SELECT * FROM t_all ORDER BY Chiffre; + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP TABLE t5; +DROP TABLE t_all; + +--remove_file $MYSQLD_DATADIR/test/subdir/num2.csv +--remove_file $MYSQLD_DATADIR/test/subdir/num4.csv +--rmdir $MYSQLD_DATADIR/test/subdir/ +--remove_file $MYSQLD_DATADIR/test/num1.csv +--remove_file $MYSQLD_DATADIR/test/num3.csv +--remove_file $MYSQLD_DATADIR/test/num5.csv + diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mysql_exec.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mysql_exec.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mysql_exec.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mysql_exec.test 2017-12-21 15:48:50.000000000 +0000 @@ -19,7 +19,7 @@ "insert into t1(msg) values('One'),(NULL),('Three')", "insert into t1 values(2,'Deux') on duplicate key update msg = 'Two'", "insert into t1(message) values('Four'),('Five'),('Six')", - 'insert into t1(id) values(NULL)', + 'insert ignore into t1(id) values(NULL)', "update t1 set msg = 'Four' where id = 4", 'select * from t1'); @@ -31,7 +31,7 @@ READS SQL DATA SELECT * FROM t1 WHERE command IN ('Warning','Note',cmd); -CALL p1('insert into t1(id) values(NULL)'); +CALL p1('insert ignore into t1(id) values(NULL)'); CALL p1('update t1 set msg = "Five" where id = 5'); DROP PROCEDURE p1; DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mysql_new.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mysql_new.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/mysql_new.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/mysql_new.test 2017-12-21 15:48:50.000000000 +0000 @@ -306,7 +306,7 @@ CREATE TABLE t1 (a date, b datetime, c time, d timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, e year); SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); +INSERT IGNORE INTO t1 VALUES('2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23','2003-05-27 10:45:23'); SELECT * FROM t1; connection master; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/tbl.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/tbl.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/tbl.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/tbl.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ --- source include/not_embedded.inc +--source include/not_embedded.inc let $MYSQLD_DATADIR= `select @@datadir`; let $PORT= `select @@port`; @@ -51,20 +51,3 @@ DROP TABLE t2; DROP TABLE t3; DROP TABLE t4; - ---echo # ---echo # Checking thread TBL tables ---echo # -CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v'; -SELECT * FROM t1; - -CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v'; -SELECT * FROM t2; - ---replace_result $PORT PORT ---eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT'; -SELECT * FROM total order by v desc; - -DROP TABLE total; -DROP TABLE t1; -DROP TABLE t2; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/tbl_thread.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/tbl_thread.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/tbl_thread.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/tbl_thread.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,112 @@ +-- source myconn.inc + +connection default; + +--echo # +--echo # Checking thread TBL tables +--echo # +CREATE TABLE t1 (a int, b char(10)); +INSERT INTO t1 VALUES (0,'test00'),(1,'test01'),(2,'test02'),(3,'test03'); +SELECT * FROM t1; + +connection master; + +CREATE TABLE rt2 (a int, b char(10)); +INSERT INTO rt2 VALUES (4,'test04'),(5,'test05'),(6,'test06'),(7,'test07'); +SELECT * FROM rt2; + +connection slave; + +USE test; +CREATE TABLE rt3 (a int, b char(10)); +INSERT INTO rt3 VALUES (8,'test08'),(9,'test09'),(10,'test10'),(11,'test11'); +SELECT * FROM rt3; + +CREATE TABLE rt4 (a int, b char(10)); +INSERT INTO rt4 VALUES (12,'test12'),(13,'test13'),(14,'test14'),(15,'test15'); +SELECT * FROM rt4; + +CREATE TABLE rt5 (a int, b char(10)); +INSERT INTO rt5 VALUES (16,'test16'),(17,'test17'),(18,'test18'),(19,'test19'); +SELECT * FROM rt5; + +connection default; + +--replace_result $MASTER_MYPORT MASTER_PORT +eval CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:$MASTER_MYPORT/test/rt2'; +SELECT * FROM t2; + +--replace_result $SLAVE_MYPORT SLAVE_PORT +eval CREATE TABLE t3 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/rt3'; +SELECT * FROM t3; + +--replace_result $SLAVE_MYPORT SLAVE_PORT +eval CREATE TABLE t4 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/rt4'; +SELECT * FROM t4; + +--replace_result $SLAVE_MYPORT SLAVE_PORT +eval CREATE TABLE t5 ENGINE=CONNECT TABLE_TYPE=MYSQL +CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/rt5'; +SELECT * FROM t5; + +--replace_result $PORT PORT +eval CREATE TABLE total (a int, b char(10)) +ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2,t3,t4,t5' +OPTION_LIST='thread=yes,port=$PORT'; +set connect_xtrace=1; +SELECT * FROM total order by a desc; +set connect_xtrace=0; + +connection master; + +DROP TABLE rt2; + +connection slave; + +DROP TABLE rt3,rt4,rt5; + +connection default; + +DROP TABLE t1,t2,t3,t4,t5,total; + +--echo # +--echo # Old thread TBL tables test modified +--echo # +--replace_result $MASTER_MYPORT MASTER_PORT +--eval CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v' OPTION_LIST='port=$MASTER_MYPORT' +SELECT * FROM t1; + +--replace_result $SLAVE_MYPORT SLAVE_PORT +--eval CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v' OPTION_LIST='port=$SLAVE_MYPORT' +SELECT * FROM t2; + +--replace_result $PORT PORT +--eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT'; +set connect_xtrace=1; +SELECT * FROM total order by v desc; +set connect_xtrace=0; +DROP TABLE t1,t2,total; + +--echo # +--echo # Old thread TBL tables test not modified (suppressed until MDEV-10179 is fixed) +--echo # +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v'; +SELECT * FROM t1; + +CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v'; +SELECT * FROM t2; + +--replace_result $PORT PORT +--eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT'; +set connect_xtrace=1; +SELECT * FROM total order by v desc; +set connect_xtrace=0; + +DROP TABLE total; +DROP TABLE t1; +DROP TABLE t2; + +-- source myconn_cleanup.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/unsigned.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/unsigned.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/unsigned.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/unsigned.test 2017-12-21 15:48:50.000000000 +0000 @@ -13,9 +13,9 @@ SELECT * FROM t1; UPDATE t1 SET e = d; SELECT * FROM t1; -UPDATE t1 SET c = d; +UPDATE IGNORE t1 SET c = d; SELECT * FROM t1; -UPDATE t1 SET c = e; +UPDATE IGNORE t1 SET c = e; SELECT * FROM t1; UPDATE t1 SET d = e; SELECT * FROM t1; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/upd.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/upd.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/upd.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/upd.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,6 +1,8 @@ let $MYSQLD_DATADIR= `select @@datadir`; --copy_file $MTR_SUITE_DIR/std_data/employee.dat $MYSQLD_DATADIR/test/employee.dat +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; + CREATE TABLE employee ( serialno CHAR(5) NOT NULL, @@ -150,4 +152,6 @@ DROP PROCEDURE test.tst_up; DROP TABLE employee; +SET sql_mode = DEFAULT; + --remove_file $MYSQLD_DATADIR/test/employee.dat diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_grant.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_grant.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_grant.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_grant.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,8 @@ +-- source include/not_embedded.inc +-- source have_libxml2.inc + +let $MYSQLD_DATADIR= `select @@datadir`; + +let $TABLE_OPTIONS=TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row'; +let $FILE_EXT=XML; +--source grant.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_html.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_html.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_html.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_html.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,39 @@ +--source have_libxml2.inc + +let $MYSQLD_DATADIR= `select @@datadir`; + +SET NAMES utf8; + +--copy_file $MTR_SUITE_DIR/std_data/beers.xml $MYSQLD_DATADIR/test/beers.xml +--copy_file $MTR_SUITE_DIR/std_data/coffee.htm $MYSQLD_DATADIR/test/coffee.htm + +--echo # +--echo # Testing HTML like XML file +--echo # +CREATE TABLE beers ( +`Name` CHAR(16) FIELD_FORMAT='brandName', +`Origin` CHAR(16) FIELD_FORMAT='origin', +`Description` CHAR(32) FIELD_FORMAT='details') +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='beers.xml' +TABNAME='table' OPTION_LIST='xmlsup=libxml2,rownode=tr,colnode=td'; +SELECT * FROM beers; +DROP TABLE beers; + +--echo # +--echo # Testing HTML file +--echo # +CREATE TABLE coffee ( +`Name` CHAR(16), +`Cups` INT(8), +`Type` CHAR(16), +`Sugar` CHAR(4)) +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='coffee.htm' +TABNAME='TABLE' HEADER=1 OPTION_LIST='xmlsup=libxml2,Coltype=HTML'; +SELECT * FROM coffee; +DROP TABLE coffee; + +# +# Clean up +# +--remove_file $MYSQLD_DATADIR/test/beers.xml +--remove_file $MYSQLD_DATADIR/test/coffee.htm diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_mdev5261.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_mdev5261.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_mdev5261.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_mdev5261.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,27 @@ +--source have_libxml2.inc + +let $MYSQLD_DATADIR= `select @@datadir`; + +SET NAMES utf8; + +# +#--echo Testing indexing on not indexable table type +# +--error ER_UNKNOWN_ERROR +CREATE TABLE t1 (i INT UNIQUE NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=libxml2,Rownode=N'; +CREATE TABLE t1 (i INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=libxml2,Rownode=N'; +DESCRIBE t1; +# one could *add* an index to an existing table +--error ER_UNKNOWN_ERROR +ALTER TABLE t1 ADD UNIQUE(i); +--error ER_UNKNOWN_ERROR +CREATE UNIQUE INDEX i ON t1(i); +DESCRIBE t1; +INSERT INTO t1 VALUES(2),(5),(7); +SELECT * FROM t1 WHERE i = 5; +--error ER_CANT_DROP_FIELD_OR_KEY +ALTER TABLE t1 DROP INDEX i; +--error ER_CANT_DROP_FIELD_OR_KEY +DROP INDEX i ON t1; +DROP TABLE t1; +--remove_file $MYSQLD_DATADIR/test/xt1.xml diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_mult.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_mult.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_mult.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_mult.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,64 @@ +--source have_libxml2.inc + +let $MYSQLD_DATADIR= `select @@datadir`; + +SET NAMES utf8; + +--copy_file $MTR_SUITE_DIR/std_data/bookstore.xml $MYSQLD_DATADIR/test/bookstore.xml + +#--echo $MYSQL_TEST_DIR +#--exec pwd +#SELECT LOAD_FILE('test/bookstore.xml'); + + +--echo # +--echo # Testing expanded values +--echo # +CREATE TABLE `bookstore` ( + `category` CHAR(16) NOT NULL FIELD_FORMAT='@', + `title` VARCHAR(50) NOT NULL, + `lang` char(2) NOT NULL FIELD_FORMAT='title/@', + `author` VARCHAR(24) NOT NULL, + `year` INT(4) NOT NULL, + `price` DOUBLE(8,2) NOT NULL) +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='bookstore.xml' OPTION_LIST='expand=1,mulnode=author,limit=6,xmlsup=libxml2'; +SELECT * FROM bookstore; +SELECT category, title, price FROM bookstore; +SELECT category, title, author, price FROM bookstore WHERE author LIKE '%K%'; +SELECT category, title, price FROM bookstore WHERE author LIKE 'J%'; + + +--echo # +--echo # Limiting expanded values +--echo # +ALTER TABLE bookstore OPTION_LIST='expand=1,mulnode=author,limit=3,xmlsup=libxml2'; +SELECT * FROM bookstore; +--echo # One line lost because the where clause is applied only on the first 3 rows +SELECT category, title, author, price FROM bookstore WHERE author LIKE 'J%'; + + +--echo # +--echo # Testing concatenated values +--echo # +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=6,xmlsup=libxml2'; +--echo # truncated +SELECT * FROM bookstore; +--echo # increase author size +ALTER TABLE bookstore MODIFY `author` VARCHAR(128) NOT NULL; +SELECT * FROM bookstore; + + +--echo # +--echo # Limiting concatenated values +--echo # +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=4,xmlsup=libxml2'; +SELECT * FROM bookstore; +--echo # The where clause is applied on the concatenated column result +SELECT category, title, author, price FROM bookstore WHERE author LIKE 'J%'; +DROP TABLE bookstore; + + +# +# Clean up +# +--remove_file $MYSQLD_DATADIR/test/bookstore.xml diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,320 @@ +--source have_libxml2.inc + +let $MYSQLD_DATADIR= `select @@datadir`; + +SET NAMES utf8; + +--vertical_results + +--copy_file $MTR_SUITE_DIR/std_data/xsample.xml $MYSQLD_DATADIR/test/xsample.xml +--copy_file $MTR_SUITE_DIR/std_data/latin1.xml $MYSQLD_DATADIR/test/latin1.xml +--copy_file $MTR_SUITE_DIR/std_data/cp1251.xml $MYSQLD_DATADIR/test/cp1251.xml + +#--echo $MYSQL_TEST_DIR +#--exec pwd +#SELECT LOAD_FILE('test/xsample.xml'); + + +--echo # +--echo # Testing tag values +--echo # +CREATE TABLE t1 +( + AUTHOR CHAR(50), + TITLE CHAR(32), + TRANSLATOR CHAR(40), + PUBLISHER CHAR(40), + DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing that tag names are case sensitive +--echo # +CREATE TABLE t1 +( + author CHAR(50), + TITLE CHAR(32), + TRANSLATOR CHAR(40), + PUBLISHER CHAR(40), + DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing attribute values +--echo # +CREATE TABLE t1 ( + ISBN CHAR(15), + LANG CHAR(2), + SUBJECT CHAR(32) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='Coltype=@,xmlsup=libxml2'; +SELECT * FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing that attribute names are case sensitive +--echo # +CREATE TABLE t1 ( + isbn CHAR(15), + LANG CHAR(2), + SUBJECT CHAR(32) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + OPTION_LIST='Coltype=@,xmlsup=libxml2'; +SELECT * FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing mixed tag and attribute values +--echo # +CREATE TABLE t1 ( + ISBN CHAR(15) FIELD_FORMAT='@', + LANG CHAR(2) FIELD_FORMAT='@', + SUBJECT CHAR(32) FIELD_FORMAT='@', + AUTHOR CHAR(50), + TITLE CHAR(32), + TRANSLATOR CHAR(40), + PUBLISHER CHAR(40), + DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK' + OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing INSERT on mixed tag and attribute values +--echo # +--copy_file $MTR_SUITE_DIR/std_data/xsample.xml $MYSQLD_DATADIR/test/xsample2.xml +--chmod 0644 $MYSQLD_DATADIR/test/xsample2.xml +CREATE TABLE t1 ( + ISBN CHAR(15) FIELD_FORMAT='@', + LANG CHAR(2) FIELD_FORMAT='@', + SUBJECT CHAR(32) FIELD_FORMAT='@', + AUTHOR CHAR(50), + TITLE CHAR(32), + TRANSLATOR CHAR(40), + PUBLISHER CHAR(40), + DATEPUB INT(4) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.xml' + TABNAME='BIBLIO' + OPTION_LIST='rownode=BOOK,xmlsup=libxml2'; +INSERT INTO t1 (ISBN, LANG, SUBJECT, AUTHOR, TITLE, PUBLISHEr, DATEPUB) +VALUES('9782212090529','fr','général','Alain Michard', +'XML, Langage et Applications','Eyrolles Paris',1998); +SELECT * FROM t1; +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--eval SELECT LOAD_FILE('$MYSQLD_DATADIR/test/xsample2.xml') AS xml +DROP TABLE t1; +--remove_file $MYSQLD_DATADIR/test/xsample2.xml + + +--echo # +--echo # Testing XPath +--echo # +CREATE TABLE t1 ( + isbn CHAR(15) FIELD_FORMAT='@ISBN', + language CHAR(2) FIELD_FORMAT='@LANG', + subject CHAR(32) FIELD_FORMAT='@SUBJECT', + authorfn CHAR(20) FIELD_FORMAT='AUTHOR/FIRSTNAME', + authorln CHAR(20) FIELD_FORMAT='AUTHOR/LASTNAME', + title CHAR(32) FIELD_FORMAT='TITLE', + translated CHAR(32) FIELD_FORMAT='TRANSLATOR/@PREFIX', + tranfn CHAR(20) FIELD_FORMAT='TRANSLATOR/FIRSTNAME', + tranln CHAR(20) FIELD_FORMAT='TRANSLATOR/LASTNAME', + publisher CHAR(20) FIELD_FORMAT='PUBLISHER/NAME', + location CHAR(20) FIELD_FORMAT='PUBLISHER/PLACE', + year INT(4) FIELD_FORMAT='DATEPUB' +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; +SELECT * FROM t1; +SELECT isbn, title, translated, tranfn, tranln, location FROM t1 +WHERE translated <> ''; +DROP TABLE t1; + + +# +# TODO: Connect.pdf says nodes with variable depth are not supported +# +#--echo # +#--echo # Relative paths are not supported +#--echo # +#CREATE TABLE t1 ( +# authorfn CHAR(20) FIELD_FORMAT='//FIRSTNAME', +# authorln CHAR(20) FIELD_FORMAT='//LASTNAME' +#) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' +# TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1'; +#SELECT * FROM t1; +#DROP TABLE t1; + + +# +# TODO: Connect.pdf says absolute paths are not supported +# +#--echo # +#--echo # Absolute path is not supported +#--echo # +#CREATE TABLE t1 ( +# authorfn CHAR(20) FIELD_FORMAT='/BIBLIO/BOOK/AUTHOR/FIRSTNAME', +# authorln CHAR(20) FIELD_FORMAT='/BIBLIO/BOOK/AUTHOR/LASTNAME' +#) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' +# TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1'; +#SELECT * FROM t1; +#DROP TABLE t1; + + +--echo # +--echo # Testing that XPath is case sensitive +--echo # +CREATE TABLE t1 +( + isbn CHAR(15) FIELD_FORMAT='@isbn' +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; +SELECT * FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing character sets +--echo # + +--error ER_UNKNOWN_ERROR +CREATE TABLE t1 +( + c CHAR(16) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2' + DATA_CHARSET=latin1; + +CREATE TABLE t1 +( + c CHAR(16) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2' + DATA_CHARSET=utf8; +SHOW CREATE TABLE t1; +SELECT c, HEX(c) FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 +( + c CHAR(16) +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT c, HEX(c) FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 +( + c CHAR(16) CHARACTER SET utf8 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT c, HEX(c) FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Conversion from latin1 to cp1251 produces a warning. +--echo # Question marks are returned. +--echo # +CREATE TABLE t1 +( + c CHAR(16) CHARACTER SET cp1251 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' + OPTION_LIST='xmlsup=libxml2'; +SELECT c, HEX(c) FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing Cyrillic +--echo # +CREATE TABLE t1 +( + c CHAR(16) CHARACTER SET utf8 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' + OPTION_LIST='xmlsup=libxml2,rownode=b'; +SELECT * FROM t1; +INSERT INTO t1 VALUES ('ИКЛМН'); +SELECT c, HEX(c) FROM t1; +DROP TABLE t1; +CREATE TABLE t1 +( + c CHAR(16) CHARACTER SET cp1251 +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' + OPTION_LIST='xmlsup=libxml2,rownode=b'; +SELECT * FROM t1; +INSERT INTO t1 VALUES ('ОПРСТ'); +SELECT c, HEX(c) FROM t1; +DROP TABLE t1; + + +--echo # +--echo # Testing that the underlying file is created with a proper Encoding +--echo # +CREATE TABLE t1 (node VARCHAR(50)) + CHARACTER SET latin1 + ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' + OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=utf-8'; +INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); +SELECT node, hex(node) FROM t1; +DROP TABLE t1; +--chmod 0777 $MYSQLD_DATADIR/test/t1.xml +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--eval SET @a=LOAD_FILE('$MYSQLD_DATADIR/test/t1.xml') +SELECT LEFT(@a,38); +SELECT HEX(EXTRACTVALUE(@a,'/t1/line/node')); +--remove_file $MYSQLD_DATADIR/test/t1.xml + +CREATE TABLE t1 (node VARCHAR(50)) + CHARACTER SET latin1 + ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' + OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; +INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); +SELECT node, hex(node) FROM t1; +DROP TABLE t1; +--chmod 0777 $MYSQLD_DATADIR/test/t1.xml +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--eval SET @a=LOAD_FILE('$MYSQLD_DATADIR/test/t1.xml') +SELECT LEFT(@a,43); +SELECT HEX(EXTRACTVALUE(@a,'/t1/line/node')); +--remove_file $MYSQLD_DATADIR/test/t1.xml + + +--echo # +--echo # Testing XML entities +--echo # +CREATE TABLE t1 (node VARCHAR(50)) + CHARACTER SET utf8 + ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' + OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; +INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); +INSERT INTO t1 VALUES (_cp1251 0xC0C1C2C3); +INSERT INTO t1 VALUES ('&<>"\''); +SELECT node, hex(node) FROM t1; +DROP TABLE t1; +--chmod 0777 $MYSQLD_DATADIR/test/t1.xml +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--eval SET @a=LOAD_FILE('$MYSQLD_DATADIR/test/t1.xml') +SELECT CAST(@a AS CHAR CHARACTER SET latin1); +--remove_file $MYSQLD_DATADIR/test/t1.xml + + + +# +# Clean up +# +--remove_file $MYSQLD_DATADIR/test/xsample.xml +--remove_file $MYSQLD_DATADIR/test/latin1.xml +--remove_file $MYSQLD_DATADIR/test/cp1251.xml diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_zip.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_zip.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml2_zip.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml2_zip.test 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,41 @@ +--source have_zip.inc +--source have_libxml2.inc + +let $MYSQLD_DATADIR= `select @@datadir`; + +--vertical_results + +--copy_file $MTR_SUITE_DIR/std_data/xsample2.xml $MYSQLD_DATADIR/test/xsample2.xml + +--echo # +--echo # Testing zipped XML tables +--echo # +CREATE TABLE t1 ( +ISBN CHAR(13) NOT NULL FIELD_FORMAT='@', +LANG CHAR(2) NOT NULL FIELD_FORMAT='@', +SUBJECT CHAR(12) NOT NULL FIELD_FORMAT='@', +AUTHOR_FIRSTNAME CHAR(15) NOT NULL FIELD_FORMAT='AUTHOR/FIRSTNAME', +AUTHOR_LASTNAME CHAR(8) NOT NULL FIELD_FORMAT='AUTHOR/LASTNAME', +TRANSLATOR_PREFIX CHAR(24) DEFAULT NULL FIELD_FORMAT='TRANSLATOR/@PREFIX', +TRANSLATOR_FIRSTNAME CHAR(6) DEFAULT NULL FIELD_FORMAT='TRANSLATOR/FIRSTNAME', +TRANSLATOR_LASTNAME CHAR(6) DEFAULT NULL FIELD_FORMAT='TRANSLATOR/LASTNAME', +TITLE CHAR(30) NOT NULL, +PUBLISHER_NAME CHAR(15) NOT NULL FIELD_FORMAT='PUBLISHER/NAME', +PUBLISHER_PLACE CHAR(5) NOT NULL FIELD_FORMAT='PUBLISHER/PLACE', +DATEPUB CHAR(4) NOT NULL +) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES +OPTION_LIST='entry=xsample2.xml,load=xsample2.xml,rownode=BOOK,xmlsup=libxml2,expand=1,mulnode=AUTHOR'; +SELECT * FROM t1; + +#testing discovery +CREATE TABLE t2 +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES +OPTION_LIST='xmlsup=libxml2'; +SELECT * FROM t2; +DROP TABLE t1,t2; + +# +# Clean up +# +--remove_file $MYSQLD_DATADIR/test/xsample2.xml +--remove_file $MYSQLD_DATADIR/test/xsample2.zip diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_grant.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_grant.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_grant.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_grant.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,8 +1,8 @@ -- source include/not_embedded.inc --- source have_libxml2.inc +-- source windows.inc let $MYSQLD_DATADIR= `select @@datadir`; -let $TABLE_OPTIONS=TABLE_TYPE=XML OPTION_LIST='xmlsup=libxml2,rownode=row'; +let $TABLE_OPTIONS=TABLE_TYPE=XML OPTION_LIST='xmlsup=domdoc,rownode=row'; let $FILE_EXT=XML; --source grant.inc diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_html.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_html.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_html.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_html.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ ---source have_libxml2.inc +--source windows.inc let $MYSQLD_DATADIR= `select @@datadir`; @@ -15,7 +15,7 @@ `Origin` CHAR(16) FIELD_FORMAT='origin', `Description` CHAR(32) FIELD_FORMAT='details') ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='beers.xml' -TABNAME='table' OPTION_LIST='xmlsup=libxml2,rownode=tr,colnode=td'; +TABNAME='table' OPTION_LIST='xmlsup=domdoc,rownode=tr,colnode=td'; SELECT * FROM beers; DROP TABLE beers; @@ -28,7 +28,7 @@ `Type` CHAR(16), `Sugar` CHAR(4)) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='coffee.htm' -TABNAME='TABLE' HEADER=1 OPTION_LIST='xmlsup=libxml2,Coltype=HTML'; +TABNAME='TABLE' HEADER=1 OPTION_LIST='xmlsup=domdoc,Coltype=HTML'; SELECT * FROM coffee; DROP TABLE coffee; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_mdev5261.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_mdev5261.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_mdev5261.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_mdev5261.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ ---source have_libxml2.inc +--source windows.inc let $MYSQLD_DATADIR= `select @@datadir`; @@ -8,8 +8,8 @@ #--echo Testing indexing on not indexable table type # --error ER_UNKNOWN_ERROR -CREATE TABLE t1 (i INT UNIQUE NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='Rownode=N'; -CREATE TABLE t1 (i INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='Rownode=N'; +CREATE TABLE t1 (i INT UNIQUE NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=domdoc,Rownode=N'; +CREATE TABLE t1 (i INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='xmlsup=domdoc,Rownode=N'; DESCRIBE t1; # one could *add* an index to an existing table --error ER_UNKNOWN_ERROR diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_mult.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_mult.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_mult.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_mult.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ ---source have_libxml2.inc +--source windows.inc let $MYSQLD_DATADIR= `select @@datadir`; @@ -21,7 +21,7 @@ `author` VARCHAR(24) NOT NULL, `year` INT(4) NOT NULL, `price` DOUBLE(8,2) NOT NULL) -ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='bookstore.xml' OPTION_LIST='expand=1,mulnode=author,limit=6,xmlsup=libxml2'; +ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='bookstore.xml' OPTION_LIST='expand=1,mulnode=author,limit=6,xmlsup=domdoc'; SELECT * FROM bookstore; SELECT category, title, price FROM bookstore; SELECT category, title, author, price FROM bookstore WHERE author LIKE '%K%'; @@ -31,7 +31,7 @@ --echo # --echo # Limiting expanded values --echo # -ALTER TABLE bookstore OPTION_LIST='expand=1,mulnode=author,limit=3,xmlsup=libxml2'; +ALTER TABLE bookstore OPTION_LIST='expand=1,mulnode=author,limit=3,xmlsup=domdoc'; SELECT * FROM bookstore; --echo # One line lost because the where clause is applied only on the first 3 rows SELECT category, title, author, price FROM bookstore WHERE author LIKE 'J%'; @@ -40,7 +40,7 @@ --echo # --echo # Testing concatenated values --echo # -ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=6,xmlsup=libxml2'; +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=6,xmlsup=domdoc'; --echo # truncated SELECT * FROM bookstore; --echo # increase author size @@ -51,7 +51,7 @@ --echo # --echo # Limiting concatenated values --echo # -ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=4,xmlsup=libxml2'; +ALTER TABLE bookstore OPTION_LIST='mulnode=author,limit=4,xmlsup=domdoc'; SELECT * FROM bookstore; --echo # The where clause is applied on the concatenated column result SELECT category, title, author, price FROM bookstore WHERE author LIKE 'J%'; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ ---source have_libxml2.inc +--source windows.inc let $MYSQLD_DATADIR= `select @@datadir`; @@ -26,7 +26,7 @@ PUBLISHER CHAR(40), DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t1; DROP TABLE t1; @@ -42,7 +42,7 @@ PUBLISHER CHAR(40), DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t1; DROP TABLE t1; @@ -55,7 +55,7 @@ LANG CHAR(2), SUBJECT CHAR(32) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='Coltype=@,xmlsup=libxml2'; + OPTION_LIST='Coltype=@,xmlsup=domdoc'; SELECT * FROM t1; DROP TABLE t1; @@ -68,7 +68,7 @@ LANG CHAR(2), SUBJECT CHAR(32) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - OPTION_LIST='Coltype=@,xmlsup=libxml2'; + OPTION_LIST='Coltype=@,xmlsup=domdoc'; SELECT * FROM t1; DROP TABLE t1; @@ -87,7 +87,7 @@ DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t1; DROP TABLE t1; @@ -108,7 +108,7 @@ DATEPUB INT(4) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.xml' TABNAME='BIBLIO' - OPTION_LIST='rownode=BOOK,xmlsup=libxml2'; + OPTION_LIST='rownode=BOOK,xmlsup=domdoc'; INSERT INTO t1 (ISBN, LANG, SUBJECT, AUTHOR, TITLE, PUBLISHEr, DATEPUB) VALUES('9782212090529','fr','général','Alain Michard', 'XML, Langage et Applications','Eyrolles Paris',1998); @@ -136,7 +136,7 @@ location CHAR(20) FIELD_FORMAT='PUBLISHER/PLACE', year INT(4) FIELD_FORMAT='DATEPUB' ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=domdoc'; SELECT * FROM t1; SELECT isbn, title, translated, tranfn, tranln, location FROM t1 WHERE translated <> ''; @@ -180,7 +180,7 @@ ( isbn CHAR(15) FIELD_FORMAT='@isbn' ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample.xml' - TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=libxml2'; + TABNAME='BIBLIO' OPTION_LIST='rownode=BOOK,skipnull=1,xmlsup=domdoc'; SELECT * FROM t1; DROP TABLE t1; @@ -194,14 +194,14 @@ ( c CHAR(16) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2' + OPTION_LIST='xmlsup=domdoc' DATA_CHARSET=latin1; CREATE TABLE t1 ( c CHAR(16) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2' + OPTION_LIST='xmlsup=domdoc' DATA_CHARSET=utf8; SHOW CREATE TABLE t1; SELECT c, HEX(c) FROM t1; @@ -211,7 +211,7 @@ ( c CHAR(16) ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT c, HEX(c) FROM t1; DROP TABLE t1; @@ -219,7 +219,7 @@ ( c CHAR(16) CHARACTER SET utf8 ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT c, HEX(c) FROM t1; DROP TABLE t1; @@ -232,7 +232,7 @@ ( c CHAR(16) CHARACTER SET cp1251 ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='latin1.xml' - OPTION_LIST='xmlsup=libxml2'; + OPTION_LIST='xmlsup=domdoc'; SELECT c, HEX(c) FROM t1; DROP TABLE t1; @@ -240,24 +240,24 @@ --echo # --echo # Testing Cyrillic --echo # -CREATE TABLE t1 -( - c CHAR(16) CHARACTER SET utf8 -) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' - OPTION_LIST='xmlsup=libxml2,rownode=b'; -SELECT * FROM t1; -INSERT INTO t1 VALUES ('ИКЛМН'); -SELECT c, HEX(c) FROM t1; -DROP TABLE t1; -CREATE TABLE t1 -( - c CHAR(16) CHARACTER SET cp1251 -) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' - OPTION_LIST='xmlsup=libxml2,rownode=b'; -SELECT * FROM t1; -INSERT INTO t1 VALUES ('ОПРСТ'); -SELECT c, HEX(c) FROM t1; -DROP TABLE t1; +#CREATE TABLE t1 +#( +# c CHAR(16) CHARACTER SET utf8 +#) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' +# OPTION_LIST='xmlsup=domdoc,rownode=b'; +#SELECT * FROM t1; +#INSERT INTO t1 VALUES ('ИКЛМН'); +#SELECT c, HEX(c) FROM t1; +#DROP TABLE t1; +#CREATE TABLE t1 +#( +# c CHAR(16) CHARACTER SET cp1251 +#) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='cp1251.xml' +# OPTION_LIST='xmlsup=domdoc,rownode=b'; +#SELECT * FROM t1; +#INSERT INTO t1 VALUES ('ОПРСТ'); +#SELECT c, HEX(c) FROM t1; +#DROP TABLE t1; --echo # @@ -266,11 +266,11 @@ CREATE TABLE t1 (node VARCHAR(50)) CHARACTER SET latin1 ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' - OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=utf-8'; + OPTION_LIST='xmlsup=domdoc,rownode=line,encoding=utf-8'; INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); SELECT node, hex(node) FROM t1; DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.xml +#--chmod 0777 $MYSQLD_DATADIR/test/t1.xml --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR --eval SET @a=LOAD_FILE('$MYSQLD_DATADIR/test/t1.xml') SELECT LEFT(@a,38); @@ -280,11 +280,11 @@ CREATE TABLE t1 (node VARCHAR(50)) CHARACTER SET latin1 ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' - OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; + OPTION_LIST='xmlsup=domdoc,rownode=line,encoding=iso-8859-1'; INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); SELECT node, hex(node) FROM t1; DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.xml +#--chmod 0777 $MYSQLD_DATADIR/test/t1.xml --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR --eval SET @a=LOAD_FILE('$MYSQLD_DATADIR/test/t1.xml') SELECT LEFT(@a,43); @@ -298,13 +298,13 @@ CREATE TABLE t1 (node VARCHAR(50)) CHARACTER SET utf8 ENGINE=connect TABLE_TYPE=xml FILE_NAME='t1.xml' - OPTION_LIST='xmlsup=libxml2,rownode=line,encoding=iso-8859-1'; + OPTION_LIST='xmlsup=domdoc,rownode=line,encoding=iso-8859-1'; INSERT INTO t1 VALUES (_latin1 0xC0C1C2C3); INSERT INTO t1 VALUES (_cp1251 0xC0C1C2C3); INSERT INTO t1 VALUES ('&<>"\''); SELECT node, hex(node) FROM t1; DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.xml +#--chmod 0777 $MYSQLD_DATADIR/test/t1.xml --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR --eval SET @a=LOAD_FILE('$MYSQLD_DATADIR/test/t1.xml') SELECT CAST(@a AS CHAR CHARACTER SET latin1); diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_zip.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_zip.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/xml_zip.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/xml_zip.test 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,5 @@ --source have_zip.inc ---source have_libxml2.inc +--source windows.inc let $MYSQLD_DATADIR= `select @@datadir`; @@ -24,13 +24,13 @@ PUBLISHER_PLACE CHAR(5) NOT NULL FIELD_FORMAT='PUBLISHER/PLACE', DATEPUB CHAR(4) NOT NULL ) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES -OPTION_LIST='entry=xsample2.xml,load=xsample2.xml,rownode=BOOK,xmlsup=libxml2,expand=1,mulnode=AUTHOR'; +OPTION_LIST='entry=xsample2.xml,load=xsample2.xml,rownode=BOOK,xmlsup=domdoc,expand=1,mulnode=AUTHOR'; SELECT * FROM t1; #testing discovery CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xsample2.zip' ZIPPED=YES -OPTION_LIST='xmlsup=libxml2'; +OPTION_LIST='xmlsup=domdoc'; SELECT * FROM t2; DROP TABLE t1,t2; diff -Nru mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/zip.test mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/zip.test --- mariadb-10.1-10.1.25/storage/connect/mysql-test/connect/t/zip.test 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/mysql-test/connect/t/zip.test 2017-12-21 15:48:50.000000000 +0000 @@ -83,16 +83,16 @@ --echo # CREATE TABLE t1 ( _id INT(2) NOT NULL, -name_first CHAR(9) NOT NULL FIELD_FORMAT='name:first', -name_aka CHAR(4) DEFAULT NULL FIELD_FORMAT='name:aka', -name_last CHAR(10) NOT NULL FIELD_FORMAT='name:last', +name_first CHAR(9) NOT NULL FIELD_FORMAT='$.name.first', +name_aka CHAR(4) DEFAULT NULL FIELD_FORMAT='$.name.aka', +name_last CHAR(10) NOT NULL FIELD_FORMAT='$.name.last', title CHAR(12) DEFAULT NULL, birth CHAR(20) DEFAULT NULL, death CHAR(20) DEFAULT NULL, -contribs CHAR(7) NOT NULL FIELD_FORMAT='contribs:', -awards_award CHAR(42) DEFAULT NULL FIELD_FORMAT='awards::award', -awards_year CHAR(4) DEFAULT NULL FIELD_FORMAT='awards::year', -awards_by CHAR(38) DEFAULT NULL FIELD_FORMAT='awards::by' +contribs CHAR(7) NOT NULL FIELD_FORMAT='$.contribs', +awards_award CHAR(42) DEFAULT NULL FIELD_FORMAT='$.awards.award', +awards_year CHAR(4) DEFAULT NULL FIELD_FORMAT='$.awards.year', +awards_by CHAR(38) DEFAULT NULL FIELD_FORMAT='$.awards.by' ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bios.zip' OPTION_LIST='ENTRY=bios.json,LOAD=bios.json' ZIPPED=YES; SELECT * FROM t1; @@ -104,16 +104,16 @@ CREATE TABLE t3 ( _id INT(2) NOT NULL, -firstname CHAR(9) NOT NULL FIELD_FORMAT='name:first', -aka CHAR(4) DEFAULT NULL FIELD_FORMAT='name:aka', -lastname CHAR(10) NOT NULL FIELD_FORMAT='name:last', +firstname CHAR(9) NOT NULL FIELD_FORMAT='$.name.first', +aka CHAR(4) DEFAULT NULL FIELD_FORMAT='$.name.aka', +lastname CHAR(10) NOT NULL FIELD_FORMAT='$.name.last', title CHAR(12) DEFAULT NULL, birth date DEFAULT NULL date_format="YYYY-DD-MM'T'hh:mm:ss'Z'", death date DEFAULT NULL date_format="YYYY-DD-MM'T'hh:mm:ss'Z'", -contribs CHAR(64) NOT NULL FIELD_FORMAT='contribs:[", "]', -award CHAR(42) DEFAULT NULL FIELD_FORMAT='awards:[x]:award', -year CHAR(4) DEFAULT NULL FIELD_FORMAT='awards:[x]:year', -`by` CHAR(38) DEFAULT NULL FIELD_FORMAT='awards:[x]:by' +contribs CHAR(64) NOT NULL FIELD_FORMAT='$.contribs.[", "]', +award CHAR(42) DEFAULT NULL FIELD_FORMAT='$.awards[*].award', +year CHAR(4) DEFAULT NULL FIELD_FORMAT='$.awards[*].year', +`by` CHAR(38) DEFAULT NULL FIELD_FORMAT='$.awards[*].by' ) ENGINE=CONNECT TABLE_TYPE='json' FILE_NAME='bios.zip' ZIPPED=YES; SELECT * FROM t3 WHERE _id = 1; diff -Nru mariadb-10.1-10.1.25/storage/connect/myutil.cpp mariadb-10.1-10.1.30/storage/connect/myutil.cpp --- mariadb-10.1-10.1.25/storage/connect/myutil.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/myutil.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -218,7 +218,7 @@ case MYSQL_TYPE_VARCHAR: #endif // !ALPHA) case MYSQL_TYPE_STRING: - type = TYPE_STRING; + type = (*var == 'B') ? TYPE_BIN : TYPE_STRING; break; case MYSQL_TYPE_BLOB: case MYSQL_TYPE_TINY_BLOB: @@ -232,7 +232,7 @@ type = TYPE_STRING; *var = 'X'; } else - type = TYPE_ERROR; + type = TYPE_BIN; break; case TPC_SKIP: diff -Nru mariadb-10.1-10.1.25/storage/connect/odbconn.cpp mariadb-10.1-10.1.30/storage/connect/odbconn.cpp --- mariadb-10.1-10.1.25/storage/connect/odbconn.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/odbconn.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -55,6 +55,7 @@ TYPCONV GetTypeConv(); int GetConvSize(); +void OdbcClose(PGLOBAL g, PFBLOCK fp); /***********************************************************************/ /* Some macro's (should be defined elsewhere to be more accessible) */ @@ -302,6 +303,13 @@ #endif /***********************************************************************/ +/* Close an ODBC table after a thrown error (called by PlugCloseFile) */ +/***********************************************************************/ +void OdbcClose(PGLOBAL g, PFBLOCK fp) { + ((ODBConn*)fp->File)->Close(); +} // end of OdbcClose + +/***********************************************************************/ /* ODBCColumns: constructs the result blocks containing all columns */ /* of an ODBC table that will be retrieved by GetData commands. */ /***********************************************************************/ @@ -968,6 +976,7 @@ m_Catver = (tdbp) ? tdbp->Catver : 0; m_Rows = 0; m_Fetch = 0; + m_Fp = NULL; m_Connect = NULL; m_User = NULL; m_Pwd = NULL; @@ -1137,7 +1146,25 @@ } else // Connect using SQLConnect Connect(); - /*ver = GetStringInfo(SQL_DRIVER_ODBC_VER);*/ + /*********************************************************************/ + /* Link a Fblock. This make possible to automatically close it */ + /* in case of error (throw). */ + /*********************************************************************/ + PDBUSER dbuserp = (PDBUSER)g->Activityp->Aptr; + + m_Fp = (PFBLOCK)PlugSubAlloc(g, NULL, sizeof(FBLOCK)); + m_Fp->Type = TYPE_FB_ODBC; + m_Fp->Fname = NULL; + m_Fp->Next = dbuserp->Openlist; + dbuserp->Openlist = m_Fp; + m_Fp->Count = 1; + m_Fp->Length = 0; + m_Fp->Memory = NULL; + m_Fp->Mode = MODE_ANY; + m_Fp->File = this; + m_Fp->Handle = 0; + + /*ver = GetStringInfo(SQL_DRIVER_ODBC_VER);*/ // Verify support for required functionality and cache info // VerifyConnect(); Deprecated GetConnectInfo(); @@ -2340,6 +2367,7 @@ } // endif len pval[n] = AllocateValue(g, crp->Type, len); + pval[n]->SetNullable(true); if (crp->Type == TYPE_STRING) { pbuf[n] = (char*)PlugSubAlloc(g, NULL, len); @@ -2597,4 +2625,7 @@ m_henv = SQL_NULL_HENV; } // endif m_henv + if (m_Fp) + m_Fp->Count = 0; + } // end of Close diff -Nru mariadb-10.1-10.1.25/storage/connect/odbconn.h mariadb-10.1-10.1.30/storage/connect/odbconn.h --- mariadb-10.1-10.1.25/storage/connect/odbconn.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/odbconn.h 2017-12-21 15:48:50.000000000 +0000 @@ -27,7 +27,7 @@ //efine MAX_DNAME_LEN 256 // Max size of Recordset names #define MAX_CONNECT_LEN 1024 // Max size of Connect string //efine MAX_CURSOR_NAME 18 // Max size of a cursor name -#define DEFAULT_FIELD_TYPE SQL_TYPE_NULL // pick "C" data type to match SQL data type +//efine DEFAULT_FIELD_TYPE SQL_TYPE_NULL // pick "C" data type to match SQL data type #if !defined(__WIN__) typedef unsigned char *PUCHAR; @@ -105,7 +105,7 @@ class ODBConn : public BLOCK { friend class TDBODBC; friend class DBX; - friend PQRYRES GetColumnInfo(PGLOBAL, char*&, char *, int, PVBLK&); +//friend PQRYRES GetColumnInfo(PGLOBAL, char*&, char *, int, PVBLK&); private: ODBConn(); // Standard (unused) constructor @@ -169,7 +169,7 @@ bool DriverConnect(DWORD Options); void VerifyConnect(void); void GetConnectInfo(void); - void Free(void); +//void Free(void); protected: // Static members @@ -187,7 +187,8 @@ DWORD m_UpdateOptions; DWORD m_RowsetSize; char m_IDQuoteChar[2]; - PCSZ m_Connect; + PFBLOCK m_Fp; + PCSZ m_Connect; PCSZ m_User; PCSZ m_Pwd; int m_Catver; diff -Nru mariadb-10.1-10.1.25/storage/connect/os.h mariadb-10.1-10.1.30/storage/connect/os.h --- mariadb-10.1-10.1.25/storage/connect/os.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/os.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,3 +1,4 @@ +/* Copyright (C) MariaDB Corporation Ab */ #ifndef _OS_H_INCLUDED #define _OS_H_INCLUDED @@ -45,7 +46,7 @@ sqltypes.h (through sql.h or sqlext.h). */ typedef unsigned long DWORD; -#endif /* !NODW */ +#endif // !NODW #undef HANDLE typedef int HANDLE; diff -Nru mariadb-10.1-10.1.25/storage/connect/osutil.c mariadb-10.1-10.1.30/storage/connect/osutil.c --- mariadb-10.1-10.1.25/storage/connect/osutil.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/osutil.c 2017-12-21 15:48:50.000000000 +0000 @@ -1,3 +1,4 @@ +/* Copyright (C) MariaDB Corporation Ab */ #include "my_global.h" #include #include diff -Nru mariadb-10.1-10.1.25/storage/connect/osutil.h mariadb-10.1-10.1.30/storage/connect/osutil.h --- mariadb-10.1-10.1.25/storage/connect/osutil.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/osutil.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,3 +1,4 @@ +/* Copyright (C) MariaDB Corporation Ab */ #ifndef __OSUTIL_H__ #define __OSUTIL_H__ diff -Nru mariadb-10.1-10.1.25/storage/connect/plgdbsem.h mariadb-10.1-10.1.30/storage/connect/plgdbsem.h --- mariadb-10.1-10.1.25/storage/connect/plgdbsem.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/plgdbsem.h 2017-12-21 15:48:50.000000000 +0000 @@ -36,8 +36,6 @@ TYPE_COLCRT = 71, /* Column creation block */ TYPE_CONST = 72, /* Constant */ -/*-------------------- type tokenized string --------------------------*/ - TYPE_DATE = 8, /* Timestamp */ /*-------------------- additional values used by LNA ------------------*/ TYPE_COLIST = 14, /* Column list */ TYPE_COL = 41, /* Column */ @@ -50,7 +48,10 @@ TYPE_FB_HANDLE = 24, /* File block (handle) */ TYPE_FB_XML = 21, /* DOM XML file block */ TYPE_FB_XML2 = 27, /* libxml2 XML file block */ - TYPE_FB_ZIP = 28}; /* ZIP file block */ + TYPE_FB_ODBC = 25, /* ODBC file block */ + TYPE_FB_ZIP = 28, /* ZIP file block */ + TYPE_FB_JAVA = 29, /* JAVA file block */ + TYPE_FB_MONGO = 30}; /* MONGO file block */ enum TABTYPE {TAB_UNDEF = 0, /* Table of undefined type */ TAB_DOS = 1, /* Fixed column offset, variable LRECL */ @@ -80,7 +81,7 @@ TAB_DMY = 25, /* DMY Dummy tables NIY */ TAB_JDBC = 26, /* Table accessed via JDBC */ TAB_ZIP = 27, /* ZIP file info table */ -// TAB_MONGO = 28, /* Table retrieved from MongoDB */ + TAB_MONGO = 28, /* Table retrieved from MongoDB */ TAB_NIY = 30}; /* Table not implemented yet */ enum AMT {TYPE_AM_ERROR = 0, /* Type not defined */ @@ -140,12 +141,12 @@ TYPE_AM_VIR = 171, /* Virtual tables am type no */ TYPE_AM_DMY = 172, /* DMY Dummy tables am type no */ TYPE_AM_SET = 180, /* SET Set tables am type no */ - TYPE_AM_MYSQL = 192, /* MYSQL access method type no */ - TYPE_AM_MYX = 193, /* MYSQL EXEC access method type */ - TYPE_AM_CAT = 195, /* Catalog access method type no */ - TYPE_AM_ZIP = 198, /* ZIP access method type no */ - TYPE_AM_MGO = 199, /* MGO access method type no */ - TYPE_AM_OUT = 200}; /* Output relations (storage) */ + TYPE_AM_MYSQL = 190, /* MYSQL access method type no */ + TYPE_AM_MYX = 191, /* MYSQL EXEC access method type */ + TYPE_AM_CAT = 192, /* Catalog access method type no */ + TYPE_AM_ZIP = 193, /* ZIP access method type no */ + TYPE_AM_MGO = 194, /* MGO access method type no */ + TYPE_AM_OUT = 200}; /* Output relations (storage) */ enum RECFM {RECFM_NAF = -2, /* Not a file */ RECFM_OEM = -1, /* OEM file access method */ diff -Nru mariadb-10.1-10.1.25/storage/connect/plgdbutl.cpp mariadb-10.1-10.1.30/storage/connect/plgdbutl.cpp --- mariadb-10.1-10.1.25/storage/connect/plgdbutl.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/plgdbutl.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -38,6 +38,7 @@ /* Include relevant MariaDB header file. */ /***********************************************************************/ #include "my_global.h" +#include "my_pthread.h" #if defined(__WIN__) #include #include @@ -70,7 +71,13 @@ #include "rcmsg.h" #ifdef ZIP_SUPPORT #include "filamzip.h" -#endif // ZIP_SUPPORT +#endif // ZIP_SUPPORT +#ifdef JAVA_SUPPORT +#include "javaconn.h" +#endif // JAVA_SUPPORT +#ifdef CMGO_SUPPORT +#include "cmgoconn.h" +#endif // JAVA_SUPPORT /***********************************************************************/ /* DB static variables. */ @@ -82,14 +89,14 @@ extern char version[]; } // extern "C" -#if defined(__WIN__) -extern CRITICAL_SECTION parsec; // Used calling the Flex parser -#else // !__WIN__ +//#if defined(__WIN__) +//extern CRITICAL_SECTION parsec; // Used calling the Flex parser +//#else // !__WIN__ extern pthread_mutex_t parmut; -#endif // !__WIN__ +//#endif // !__WIN__ // The debug trace used by the main thread - FILE *pfile = NULL; +FILE *pfile = NULL; MBLOCK Nmblk = {NULL, false, 0, false, NULL}; // Used to init MBLOCK's @@ -108,6 +115,9 @@ #include "libdoc.h" #endif // LIBXML2_SUPPORT +#ifdef ODBC_SUPPORT +void OdbcClose(PGLOBAL g, PFBLOCK fp); +#endif // ODBC_SUPPORT /***********************************************************************/ /* Routines for file IO with error reporting to g->Message */ @@ -473,7 +483,7 @@ tp = g->Message; else if (!(tp = new char[strlen(pat) + strlen(strg) + 2])) { strcpy(g->Message, MSG(NEW_RETURN_NULL)); - throw OP_LIKE; + throw (int)OP_LIKE; } /* endif tp */ sp = tp + strlen(pat) + 1; @@ -484,7 +494,7 @@ tp = g->Message; /* Use this as temporary work space. */ else if (!(tp = new char[strlen(pat) + 1])) { strcpy(g->Message, MSG(NEW_RETURN_NULL)); - throw OP_LIKE; + throw (int)OP_LIKE; } /* endif tp */ strcpy(tp, pat); /* Make a copy to be worked into */ @@ -695,23 +705,11 @@ /*********************************************************************/ /* Call the FLEX generated parser. In multi-threading mode the next */ - /* instruction is included in an Enter/LeaveCriticalSection bracket. */ + /* instruction is protected by mutex fmdflex using static variables. */ /*********************************************************************/ - //#if defined(THREAD) -#if defined(__WIN__) - EnterCriticalSection((LPCRITICAL_SECTION)&parsec); -#else // !__WIN__ pthread_mutex_lock(&parmut); -#endif // !__WIN__ -//#endif // THREAD rc = fmdflex(pdp); -//#if defined(THREAD) -#if defined(__WIN__) - LeaveCriticalSection((LPCRITICAL_SECTION)&parsec); -#else // !__WIN__ pthread_mutex_unlock(&parmut); -#endif // !__WIN__ -//#endif // THREAD if (trace) htrc("Done: in=%s out=%s rc=%d\n", SVP(pdp->InFmt), SVP(pdp->OutFmt), rc); @@ -886,7 +884,7 @@ /* Close file routine: the purpose of this routine is to avoid */ /* double closing that freeze the system on some Unix platforms. */ /***********************************************************************/ -int PlugCloseFile(PGLOBAL g __attribute__((unused)), PFBLOCK fp, bool all) +int PlugCloseFile(PGLOBAL g, PFBLOCK fp, bool all) { int rc = 0; @@ -935,6 +933,13 @@ CloseXML2File(g, fp, all); break; #endif // LIBXML2_SUPPORT +#ifdef ODBC_SUPPORT + case TYPE_FB_ODBC: + OdbcClose(g, fp); + fp->Count = 0; + fp->File = NULL; + break; +#endif // ODBC_SUPPORT #ifdef ZIP_SUPPORT case TYPE_FB_ZIP: if (fp->Mode == MODE_INSERT) @@ -948,6 +953,20 @@ fp->File = NULL; break; #endif // ZIP_SUPPORT +#ifdef JAVA_SUPPORT + case TYPE_FB_JAVA: + ((JAVAConn*)fp->File)->Close(); + fp->Count = 0; + fp->File = NULL; + break; +#endif // JAVA_SUPPORT +#ifdef CMGO_SUPPORT + case TYPE_FB_MONGO: + ((CMgoConn*)fp->File)->Close(); + fp->Count = 0; + fp->File = NULL; + break; +#endif // JAVA_SUPPORT default: rc = RC_FX; } // endswitch Type diff -Nru mariadb-10.1-10.1.25/storage/connect/plugutil.cpp mariadb-10.1-10.1.30/storage/connect/plugutil.cpp --- mariadb-10.1-10.1.25/storage/connect/plugutil.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/plugutil.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -2,11 +2,11 @@ /* */ /* PROGRAM NAME: PLUGUTIL */ /* ------------- */ -/* Version 2.9 */ +/* Version 3.0 */ /* */ /* COPYRIGHT: */ /* ---------- */ -/* (C) Copyright to the author Olivier BERTRAND 1993-2015 */ +/* (C) Copyright to the author Olivier BERTRAND 1993-2017 */ /* */ /* WHAT THIS PROGRAM DOES: */ /* ----------------------- */ @@ -76,6 +76,7 @@ #include "osutil.h" #include "global.h" +#include "plgdbsem.h" #if defined(NEWMSG) #include "rcmsg.h" #endif // NEWMSG @@ -132,12 +133,12 @@ /* Return value is the pointer to the Global structure. */ /***********************************************************************/ PGLOBAL PlugInit(LPCSTR Language, uint worksize) - { - PGLOBAL g; +{ + PGLOBAL g; - if (trace > 1) - htrc("PlugInit: Language='%s'\n", - ((!Language) ? "Null" : (char*)Language)); + if (trace > 1) + htrc("PlugInit: Language='%s'\n", + ((!Language) ? "Null" : (char*)Language)); try { g = new GLOBAL; @@ -146,53 +147,56 @@ return NULL; } // end try/catch - //if (!(g = (PGLOBAL)malloc(sizeof(GLOBAL)))) { - // fprintf(stderr, MSG(GLOBAL_ERROR), (int)sizeof(GLOBAL)); - // return NULL; - // } else { - g->Sarea = NULL; - g->Createas = 0; - g->Alchecked = 0; - g->Mrr = 0; - g->Activityp = NULL; - g->Xchk = NULL; - g->N = 0; - g->More = 0; - strcpy(g->Message, ""); - - /*******************************************************************/ - /* Allocate the main work segment. */ - /*******************************************************************/ - if (worksize && !(g->Sarea = PlugAllocMem(g, worksize))) { - char errmsg[MAX_STR]; - sprintf(errmsg, MSG(WORK_AREA), g->Message); - strcpy(g->Message, errmsg); - g->Sarea_Size = 0; - } else - g->Sarea_Size = worksize; - - //} /* endif g */ - - g->jump_level = -1; /* New setting to allow recursive call of Plug */ - return(g); - } /* end of PlugInit */ + g->Sarea = NULL; + g->Createas = 0; + g->Alchecked = 0; + g->Mrr = 0; + g->Activityp = NULL; + g->Xchk = NULL; + g->N = 0; + g->More = 0; + strcpy(g->Message, ""); + + /*******************************************************************/ + /* Allocate the main work segment. */ + /*******************************************************************/ + if (worksize && !(g->Sarea = PlugAllocMem(g, worksize))) { + char errmsg[MAX_STR]; + snprintf(errmsg, sizeof(errmsg) - 1, MSG(WORK_AREA), g->Message); + strcpy(g->Message, errmsg); + g->Sarea_Size = 0; + } else + g->Sarea_Size = worksize; + + g->jump_level = -1; /* New setting to allow recursive call of Plug */ + return(g); +} /* end of PlugInit */ /***********************************************************************/ /* PlugExit: Terminate Plug operations. */ /***********************************************************************/ int PlugExit(PGLOBAL g) - { - int rc = 0; +{ + if (g) { + PDBUSER dup = PlgGetUser(g); - if (!g) - return rc; + if (dup) + free(dup); - if (g->Sarea) - free(g->Sarea); + if (g->Sarea) { +#if !defined(DEVELOPMENT) + if (trace) +#endif + htrc("Freeing Sarea at %p size=%d\n", g->Sarea, g->Sarea_Size); + + free(g->Sarea); + } // endif Sarea + + delete g; + } // endif g - delete g; - return rc; - } /* end of PlugExit */ + return 0; +} // end of PlugExit /***********************************************************************/ /* Remove the file type from a file name. */ @@ -456,7 +460,7 @@ /* Program for memory allocation of work and language areas. */ /***********************************************************************/ void *PlugAllocMem(PGLOBAL g, uint size) - { +{ void *areap; /* Pointer to allocated area */ /*********************************************************************/ @@ -465,16 +469,20 @@ if (!(areap = malloc(size))) sprintf(g->Message, MSG(MALLOC_ERROR), "malloc"); - if (trace > 1) { +#if defined(DEVELOPMENT) + if (true) { +#else + if (trace) { +#endif if (areap) htrc("Memory of %u allocated at %p\n", size, areap); else htrc("PlugAllocMem: %s\n", g->Message); - } // endif trace + } // endif trace return (areap); - } /* end of PlugAllocMem */ +} // end of PlugAllocMem /***********************************************************************/ /* Program for SubSet initialization of memory pools. */ diff -Nru mariadb-10.1-10.1.25/storage/connect/rcmsg.c mariadb-10.1-10.1.30/storage/connect/rcmsg.c --- mariadb-10.1-10.1.25/storage/connect/rcmsg.c 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/rcmsg.c 2017-12-21 15:48:50.000000000 +0000 @@ -27,9 +27,9 @@ char *msglang(void); -char *GetMsgid(int id) +const char *GetMsgid(int id) { - char *p = NULL; + const char *p = NULL; // This conditional until a real fix is found for MDEV-7304 #if defined(FRENCH) @@ -55,7 +55,8 @@ int GetRcString(int id, char *buf, int bufsize) { - char *p = NULL, msg[32]; + const char *p = NULL; + char msg[32]; if (!(p = GetMsgid(id))) { sprintf(msg, "ID=%d unknown", id); diff -Nru mariadb-10.1-10.1.25/storage/connect/rcmsg.h mariadb-10.1-10.1.30/storage/connect/rcmsg.h --- mariadb-10.1-10.1.25/storage/connect/rcmsg.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/rcmsg.h 2017-12-21 15:48:50.000000000 +0000 @@ -5,7 +5,7 @@ extern "C" { #endif -char *GetMsgid(int id); +const char *GetMsgid(int id); int GetRcString(int id, char *buf, int bufsize); #ifdef __cplusplus diff -Nru mariadb-10.1-10.1.25/storage/connect/reldef.cpp mariadb-10.1-10.1.30/storage/connect/reldef.cpp --- mariadb-10.1-10.1.25/storage/connect/reldef.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/reldef.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -228,10 +228,10 @@ { int poff = 0; - Name = (PSZ)name; - Schema = (PSZ)schema; + Hc = ((MYCAT*)cat)->GetHandler(); + Name = (PSZ)name; + Schema = (PSZ)Hc->GetDBName(schema); Cat = cat; - Hc = ((MYCAT*)cat)->GetHandler(); Catfunc = GetFuncID(GetStringCatInfo(g, "Catfunc", NULL)); Elemt = GetIntCatInfo("Elements", 0); Multiple = GetIntCatInfo("Multiple", 0); @@ -547,14 +547,12 @@ } // endif dladdr #endif // 0 - // Is the library already loaded? - if (!Hdll && !(Hdll = dlopen(soname, RTLD_NOLOAD))) - // Load the desired shared library - if (!(Hdll = dlopen(soname, RTLD_LAZY))) { - error = dlerror(); - sprintf(g->Message, MSG(SHARED_LIB_ERR), soname, SVP(error)); - return NULL; - } // endif Hdll + // Load the desired shared library + if (!Hdll && !(Hdll = dlopen(soname, RTLD_LAZY))) { + error = dlerror(); + sprintf(g->Message, MSG(SHARED_LIB_ERR), soname, SVP(error)); + return NULL; + } // endif Hdll // The exported name is always in uppercase for (int i = 0; ; i++) { @@ -789,7 +787,7 @@ Poff = poff; Buf_Type = cfp->Type; - if ((Clen = GetTypeSize(Buf_Type, cfp->Length)) <= 0) { + if ((Clen = GetTypeSize(Buf_Type, cfp->Length)) < 0) { sprintf(g->Message, MSG(BAD_COL_TYPE), GetTypeName(Buf_Type), Name); return -1; } // endswitch diff -Nru mariadb-10.1-10.1.25/storage/connect/reldef.h mariadb-10.1-10.1.30/storage/connect/reldef.h --- mariadb-10.1-10.1.25/storage/connect/reldef.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/reldef.h 2017-12-21 15:48:50.000000000 +0000 @@ -11,7 +11,7 @@ #include "block.h" #include "catalog.h" -#include "my_sys.h" +//#include "my_sys.h" #include "mycat.h" typedef class INDEXDEF *PIXDEF; @@ -94,6 +94,7 @@ virtual void SetIndx(PIXDEF) {} virtual bool IsHuge(void) {return false;} const CHARSET_INFO *data_charset() {return m_data_charset;} + const char *GetCsName(void) {return csname;} // Methods int GetColCatInfo(PGLOBAL g); @@ -113,7 +114,7 @@ int Sort; /* Table already sorted ??? */ int Multiple; /* 0: No 1: DIR 2: Section 3: filelist */ int Degree; /* Number of columns in the table */ - int Pseudo; /* Bit: 1 ROWID }Ok, 2 FILEID Ok */ + int Pseudo; /* Bit: 1 ROWID }Ok, 2 FILEID Ok */ bool Read_Only; /* true for read only tables */ const CHARSET_INFO *m_data_charset; const char *csname; /* Table charset name */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabcmg.cpp mariadb-10.1-10.1.30/storage/connect/tabcmg.cpp --- mariadb-10.1-10.1.25/storage/connect/tabcmg.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabcmg.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,464 @@ +/************** tabcmg C++ Program Source Code File (.CPP) *************/ +/* PROGRAM NAME: tabcmg Version 1.1 */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* This program are the C MongoDB class DB execution routines. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include relevant sections of the MariaDB header file. */ +/***********************************************************************/ +#include + +/***********************************************************************/ +/* Include application header files: */ +/* global.h is header containing all global declarations. */ +/* plgdbsem.h is header containing the DB application declarations. */ +/* tdbdos.h is header containing the TDBDOS declarations. */ +/* json.h is header containing the JSON classes declarations. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "xtable.h" +#include "maputil.h" +#include "filamtxt.h" +#include "tabext.h" +#include "tabcmg.h" +#include "tabmul.h" +#include "filter.h" + +/* -------------------------- Class CMGDISC -------------------------- */ + +/***********************************************************************/ +/* Get document. */ +/***********************************************************************/ +void CMGDISC::GetDoc(void) +{ + doc = ((TDBCMG*)tmgp)->Cmgp->Document; +} // end of GetDoc + +/***********************************************************************/ +/* Analyse passed document. */ +/***********************************************************************/ +//bool CMGDISC::Find(PGLOBAL g, int i, int k, bool b) +bool CMGDISC::Find(PGLOBAL g) +{ + return FindInDoc(g, &iter, doc, NULL, NULL, 0, false); +} // end of Find + +/***********************************************************************/ +/* Analyse passed document. */ +/***********************************************************************/ +bool CMGDISC::FindInDoc(PGLOBAL g, bson_iter_t *iter, const bson_t *doc, + char *pcn, char *pfmt, int k, bool b) +{ + if (!doc || bson_iter_init(iter, doc)) { + const char *key; + char colname[65]; + char fmt[129]; + bool newcol; + + while (bson_iter_next(iter)) { + key = bson_iter_key(iter); + newcol = true; + + if (pcn) { + strncpy(colname, pcn, 64); + colname[64] = 0; + strncat(strncat(colname, "_", 65), key, 65); + } else + strcpy(colname, key); + + if (pfmt) { + strncpy(fmt, pfmt, 128); + fmt[128] = 0; + strncat(strncat(fmt, ".", 129), key, 129); + } else + strcpy(fmt, key); + + bcol.Cbn = false; + + if (BSON_ITER_HOLDS_UTF8(iter)) { + bcol.Type = TYPE_STRING; + bcol.Len = strlen(bson_iter_utf8(iter, NULL)); + } else if (BSON_ITER_HOLDS_INT32(iter)) { + bcol.Type = TYPE_INT; + bcol.Len = 11; // bson_iter_int32(iter) + } else if (BSON_ITER_HOLDS_INT64(iter)) { + bcol.Type = TYPE_BIGINT; + bcol.Len = 22; // bson_iter_int64(iter) + } else if (BSON_ITER_HOLDS_DOUBLE(iter)) { + bcol.Type = TYPE_DOUBLE; + bcol.Len = 12; + bcol.Scale = 6; // bson_iter_double(iter) + } else if (BSON_ITER_HOLDS_DATE_TIME(iter)) { + bcol.Type = TYPE_DATE; + bcol.Len = 19; // bson_iter_date_time(iter) + } else if (BSON_ITER_HOLDS_BOOL(iter)) { + bcol.Type = TYPE_TINY; + bcol.Len = 1; + } else if (BSON_ITER_HOLDS_OID(iter)) { + bcol.Type = TYPE_STRING; + bcol.Len = 24; // bson_iter_oid(iter) + } else if (BSON_ITER_HOLDS_DECIMAL128(iter)) { + bcol.Type = TYPE_DECIM; + bcol.Len = 32; // bson_iter_decimal128(iter, &dec) + } else if (BSON_ITER_HOLDS_DOCUMENT(iter)) { + if (lvl < 0) + continue; + else if (lvl <= k) { + bcol.Type = TYPE_STRING; + bcol.Len = 512; + } else { + bson_iter_t child; + + if (bson_iter_recurse(iter, &child)) + if (FindInDoc(g, &child, NULL, colname, fmt, k + 1, false)) + return true; + + newcol = false; + } // endif lvl + + } else if (BSON_ITER_HOLDS_ARRAY(iter)) { + if (lvl < 0) + continue; + else if (lvl <= k) { + bcol.Type = TYPE_STRING; + bcol.Len = 512; + } else { + bson_t *arr; + bson_iter_t itar; + const uint8_t *data = NULL; + uint32_t len = 0; + + bson_iter_array(iter, &len, &data); + arr = bson_new_from_data(data, len); + + if (FindInDoc(g, &itar, arr, colname, fmt, k + 1, !all)) + return true; + + newcol = false; + } // endif lvl + + } // endif's + + if (newcol) + AddColumn(g, colname, fmt, k); + + if (b) + break; // Test only first element of arrays + + } // endwhile iter + + } // endif doc + + return false; +} // end of FindInDoc + +/* --------------------------- Class TDBCMG -------------------------- */ + +/***********************************************************************/ +/* Implementation of the TDBCMG class. */ +/***********************************************************************/ +TDBCMG::TDBCMG(MGODEF *tdp) : TDBEXT(tdp) +{ + Cmgp = NULL; + Cnd = NULL; + Pcg.Tdbp = this; + + if (tdp) { + Pcg.Uristr = tdp->Uri; + Pcg.Db_name = tdp->Tabschema; + Pcg.Coll_name = tdp->Tabname; + Pcg.Options = tdp->Colist; + Pcg.Filter = tdp->Filter; + Pcg.Pipe = tdp->Pipe && tdp->Colist != NULL; + B = tdp->Base ? 1 : 0; + } else { + Pcg.Uristr = NULL; + Pcg.Db_name = NULL; + Pcg.Coll_name = NULL; + Pcg.Options = NULL; + Pcg.Filter = NULL; + Pcg.Pipe = false; + B = 0; + } // endif tdp + + Fpos = -1; + N = 0; + Done = false; +} // end of TDBCMG standard constructor + +TDBCMG::TDBCMG(TDBCMG *tdbp) : TDBEXT(tdbp) +{ + Cmgp = tdbp->Cmgp; + Cnd = tdbp->Cnd; + Pcg = tdbp->Pcg; + B = tdbp->B; + Fpos = tdbp->Fpos; + N = tdbp->N; + Done = tdbp->Done; +} // end of TDBCMG copy constructor + +// Used for update +PTDB TDBCMG::Clone(PTABS t) +{ + PTDB tp; + PMGOCOL cp1, cp2; + PGLOBAL g = t->G; + + tp = new(g) TDBCMG(this); + + for (cp1 = (PMGOCOL)Columns; cp1; cp1 = (PMGOCOL)cp1->GetNext()) + if (!cp1->IsSpecial()) { + cp2 = new(g) MGOCOL(cp1, tp); // Make a copy + NewPointer(t, cp1, cp2); + } // endif cp1 + + return tp; +} // end of Clone + +/***********************************************************************/ +/* Allocate JSN column description block. */ +/***********************************************************************/ +PCOL TDBCMG::MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n) +{ + PMGOCOL colp = new(g) MGOCOL(g, cdp, this, cprec, n); + + return colp; +} // end of MakeCol + +/***********************************************************************/ +/* InsertSpecialColumn: Put a special column ahead of the column list.*/ +/***********************************************************************/ +PCOL TDBCMG::InsertSpecialColumn(PCOL colp) +{ + if (!colp->IsSpecial()) + return NULL; + + colp->SetNext(Columns); + Columns = colp; + return colp; +} // end of InsertSpecialColumn + +/***********************************************************************/ +/* Init: initialize MongoDB processing. */ +/***********************************************************************/ +bool TDBCMG::Init(PGLOBAL g) +{ + if (Done) + return false; + + /*********************************************************************/ + /* Open an C connection for this table. */ + /*********************************************************************/ + if (!Cmgp) + Cmgp = new(g) CMgoConn(g, &Pcg); + else if (Cmgp->IsConnected()) + Cmgp->Close(); + + if (Cmgp->Connect(g)) + return true; + + Done = true; + return false; +} // end of Init + +/***********************************************************************/ +/* MONGO Cardinality: returns table size in number of rows. */ +/***********************************************************************/ +int TDBCMG::Cardinality(PGLOBAL g) +{ + if (!g) + return 1; + else if (Cardinal < 0) + Cardinal = (!Init(g)) ? Cmgp->CollSize(g) : 0; + + return Cardinal; +} // end of Cardinality + +/***********************************************************************/ +/* MONGO GetMaxSize: returns collection size estimate. */ +/***********************************************************************/ +int TDBCMG::GetMaxSize(PGLOBAL g) +{ + if (MaxSize < 0) + MaxSize = Cardinality(g); + + return MaxSize; +} // end of GetMaxSize + +/***********************************************************************/ +/* OpenDB: Data Base open routine for MONGO access method. */ +/***********************************************************************/ +bool TDBCMG::OpenDB(PGLOBAL g) +{ + if (Use == USE_OPEN) { + /*******************************************************************/ + /* Table already open replace it at its beginning. */ + /*******************************************************************/ + Cmgp->Rewind(); + Fpos = -1; + return false; + } // endif Use + + /*********************************************************************/ + /* First opening. */ + /*********************************************************************/ + if (Pcg.Pipe && Mode != MODE_READ) { + strcpy(g->Message, "Pipeline tables are read only"); + return true; + } // endif Pipe + + Use = USE_OPEN; // Do it now in case we are recursively called + + if (Init(g)) + return true; + + if (Mode == MODE_DELETE && !Next) + // Delete all documents + return Cmgp->DocDelete(g); + else if (Mode == MODE_INSERT) + Cmgp->MakeColumnGroups(g); + + return false; +} // end of OpenDB + +/***********************************************************************/ +/* Data Base indexed read routine for ODBC access method. */ +/***********************************************************************/ +bool TDBCMG::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr) +{ + strcpy(g->Message, "MONGO tables are not indexable"); + return true; +} // end of ReadKey + +/***********************************************************************/ +/* ReadDB: Get next document from a collection. */ +/***********************************************************************/ +int TDBCMG::ReadDB(PGLOBAL g) +{ + return Cmgp->ReadNext(g); +} // end of ReadDB + +/***********************************************************************/ +/* WriteDB: Data Base write routine for MGO access method. */ +/***********************************************************************/ +int TDBCMG::WriteDB(PGLOBAL g) +{ + return Cmgp->Write(g); +} // end of WriteDB + +/***********************************************************************/ +/* Data Base delete line routine for MGO access method. */ +/***********************************************************************/ +int TDBCMG::DeleteDB(PGLOBAL g, int irc) +{ + return (irc == RC_OK) ? WriteDB(g) : RC_OK; +} // end of DeleteDB + +/***********************************************************************/ +/* Table close routine for MONGO tables. */ +/***********************************************************************/ +void TDBCMG::CloseDB(PGLOBAL g) +{ + Cmgp->Close(); + Done = false; +} // end of CloseDB + +/* ----------------------------- MGOCOL ------------------------------ */ + +/***********************************************************************/ +/* MGOCOL public constructor. */ +/***********************************************************************/ +MGOCOL::MGOCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i) + : EXTCOL(cdp, tdbp, cprec, i, "MGO") +{ + Tmgp = (PTDBCMG)(tdbp->GetOrig() ? tdbp->GetOrig() : tdbp); + Jpath = cdp->GetFmt() ? cdp->GetFmt() : cdp->GetName(); +} // end of MGOCOL constructor + +/***********************************************************************/ +/* MGOCOL constructor used for copying columns. */ +/* tdbp is the pointer to the new table descriptor. */ +/***********************************************************************/ +MGOCOL::MGOCOL(MGOCOL *col1, PTDB tdbp) : EXTCOL(col1, tdbp) +{ + Tmgp = col1->Tmgp; + Jpath = col1->Jpath; +} // end of MGOCOL copy constructor + +/***********************************************************************/ +/* Get path when proj is false or projection path when proj is true. */ +/***********************************************************************/ +PSZ MGOCOL::GetJpath(PGLOBAL g, bool proj) +{ + if (Jpath) { + if (proj) { + char *p1, *p2, *projpath = PlugDup(g, Jpath); + int i = 0; + + for (p1 = p2 = projpath; *p1; p1++) + if (*p1 == '.') { + if (!i) + *p2++ = *p1; + + i = 1; + } else if (i) { + if (!isdigit(*p1)) { + *p2++ = *p1; + i = 0; + } // endif p1 + + } else + *p2++ = *p1; + + *p2 = 0; + return projpath; + } else + return Jpath; + + } else + return Name; + +} // end of GetJpath + +/***********************************************************************/ +/* ReadColumn: */ +/***********************************************************************/ +void MGOCOL::ReadColumn(PGLOBAL g) +{ + Tmgp->Cmgp->GetColumnValue(g, this); +} // end of ReadColumn + +/***********************************************************************/ +/* WriteColumn: */ +/***********************************************************************/ +void MGOCOL::WriteColumn(PGLOBAL g) +{ + // Check whether this node must be written + if (Value != To_Val) + Value->SetValue_pval(To_Val, FALSE); // Convert the updated value + +} // end of WriteColumn + +/* ---------------------------TDBGOL class --------------------------- */ + +/***********************************************************************/ +/* TDBGOL class constructor. */ +/***********************************************************************/ +TDBGOL::TDBGOL(PMGODEF tdp) : TDBCAT(tdp) +{ + Topt = tdp->GetTopt(); + Uri = tdp->Uri; + Db = tdp->GetTabschema(); +} // end of TDBJCL constructor + +/***********************************************************************/ +/* GetResult: Get the list the JSON file columns. */ +/***********************************************************************/ +PQRYRES TDBGOL::GetResult(PGLOBAL g) +{ + return MGOColumns(g, Db, Uri, Topt, false); +} // end of GetResult + +/* -------------------------- End of mongo --------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabcmg.h mariadb-10.1-10.1.30/storage/connect/tabcmg.h --- mariadb-10.1-10.1.25/storage/connect/tabcmg.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabcmg.h 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,130 @@ +/**************** tabcmg H Declares Source Code File (.H) **************/ +/* Name: tabcmg.h Version 1.2 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the MongoDB classes declares. */ +/***********************************************************************/ +#include "mongo.h" +#include "cmgoconn.h" + +/***********************************************************************/ +/* Class used to get the columns of a mongo collection. */ +/***********************************************************************/ +class CMGDISC : public MGODISC { +public: + // Constructor + CMGDISC(PGLOBAL g, int *lg) : MGODISC(g, lg) { drv = "C"; } + + // Methods + virtual void GetDoc(void); +//virtual bool Find(PGLOBAL g, int i, int k, bool b); + virtual bool Find(PGLOBAL g); + + // BSON Function +//bool FindInDoc(PGLOBAL g, bson_iter_t *iter, const bson_t *doc, +// char *pcn, char *pfmt, int i, int k, bool b); + bool FindInDoc(PGLOBAL g, bson_iter_t *iter, const bson_t *doc, + char *pcn, char *pfmt, int k, bool b); + + // Members + bson_iter_t iter; + const bson_t *doc; +}; // end of CMGDISC + +/* -------------------------- TDBCMG class --------------------------- */ + +/***********************************************************************/ +/* This is the MongoDB Table Type class declaration. */ +/* The table is a collection, each record being a document. */ +/***********************************************************************/ +class DllExport TDBCMG : public TDBEXT { + friend class MGOCOL; + friend class MGODEF; + friend class CMGDISC; + friend PQRYRES MGOColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); +public: + // Constructor + TDBCMG(MGODEF *tdp); + TDBCMG(TDBCMG *tdbp); + + // Implementation + virtual AMT GetAmType(void) {return TYPE_AM_MGO;} + virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBCMG(this);} + + // Methods + virtual PTDB Clone(PTABS t); + virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); + virtual PCOL InsertSpecialColumn(PCOL colp); + virtual int RowNumber(PGLOBAL g, bool b = FALSE) {return N;} + + // Database routines + virtual int Cardinality(PGLOBAL g); + virtual int GetMaxSize(PGLOBAL g); + virtual bool OpenDB(PGLOBAL g); + virtual int ReadDB(PGLOBAL g); + virtual int WriteDB(PGLOBAL g); + virtual int DeleteDB(PGLOBAL g, int irc); + virtual void CloseDB(PGLOBAL g); + virtual bool ReadKey(PGLOBAL g, OPVAL op, const key_range *kr); + +protected: + bool Init(PGLOBAL g); + + // Members + CMgoConn *Cmgp; // Points to a C Mongo connection class + CMGOPARM Pcg; // Parms passed to Cmgp + const Item *Cnd; // The first condition + int Fpos; // The current row index + int N; // The current Rownum + int B; // Array index base + bool Done; // Init done +}; // end of class TDBCMG + +/* --------------------------- MGOCOL class -------------------------- */ + +/***********************************************************************/ +/* Class MGOCOL: MongoDB access method column descriptor. */ +/***********************************************************************/ +class DllExport MGOCOL : public EXTCOL { + friend class TDBCMG; + friend class FILTER; +public: + // Constructors + MGOCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i); + MGOCOL(MGOCOL *colp, PTDB tdbp); // Constructor used in copy process + + // Implementation + virtual int GetAmType(void) { return Tmgp->GetAmType(); } + + // Methods + virtual PSZ GetJpath(PGLOBAL g, bool proj); + virtual void ReadColumn(PGLOBAL g); + virtual void WriteColumn(PGLOBAL g); + +protected: + // Default constructor not to be used + MGOCOL(void) {} + + // Members + TDBCMG *Tmgp; // To the MGO table block + char *Jpath; // The json path +}; // end of class MGOCOL + +/***********************************************************************/ +/* This is the class declaration for the MONGO catalog table. */ +/***********************************************************************/ +class DllExport TDBGOL : public TDBCAT { +public: + // Constructor + TDBGOL(PMGODEF tdp); + +protected: + // Specific routines + virtual PQRYRES GetResult(PGLOBAL g); + + // Members + PTOS Topt; + PCSZ Uri; + PCSZ Db; +}; // end of class TDBGOL diff -Nru mariadb-10.1-10.1.25/storage/connect/tabcol.cpp mariadb-10.1-10.1.30/storage/connect/tabcol.cpp --- mariadb-10.1-10.1.25/storage/connect/tabcol.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabcol.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -86,7 +86,7 @@ PlugPutOut(g, f, TYPE_TDB, tp->To_Tdb, n + 2); } /* endfor tp */ - } /* end of Print */ + } /* end of Printf */ /***********************************************************************/ /* Make string output of XTAB contents. */ @@ -105,7 +105,7 @@ n -= i; } // endif tp - } /* end of Print */ + } /* end of Prints */ /***********************************************************************/ @@ -149,7 +149,7 @@ PlugPutOut(g, f, TYPE_TABLE, To_Table, n + 2); PlugPutOut(g, f, TYPE_XOBJECT, To_Col, n + 2); - } /* end of Print */ + } /* end of Printf */ /***********************************************************************/ /* Make string output of COLUMN contents. */ @@ -166,4 +166,4 @@ strncpy(ps, buf, z); ps[z - 1] = '\0'; - } /* end of Print */ + } /* end of Prints */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabdos.cpp mariadb-10.1-10.1.30/storage/connect/tabdos.cpp --- mariadb-10.1-10.1.25/storage/connect/tabdos.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabdos.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -132,6 +132,7 @@ bool map = (am && (*am == 'M' || *am == 'm')); LPCSTR dfm = (am && (*am == 'F' || *am == 'f')) ? "F" : (am && (*am == 'B' || *am == 'b')) ? "B" + : (am && (*am == 'X' || *am == 'x')) ? "X" : (am && !stricmp(am, "DBF")) ? "D" : "V"; if ((Zipped = GetBoolCatInfo("Zipped", false))) { @@ -148,6 +149,7 @@ GetCharCatInfo("Recfm", (PSZ)dfm, buf, sizeof(buf)); Recfm = (toupper(*buf) == 'F') ? RECFM_FIX : (toupper(*buf) == 'B') ? RECFM_BIN : + (toupper(*buf) == 'X') ? RECFM_NAF : // MGO (toupper(*buf) == 'D') ? RECFM_DBF : RECFM_VAR; Lrecl = GetIntCatInfo("Lrecl", 0); @@ -1309,7 +1311,7 @@ } // endif !opm // if opm, pass thru - /* fall through */ + // fall through case OP_IN: if (filp->GetArgType(0) == TYPE_COLBLK && filp->GetArgType(1) == TYPE_ARRAY) { @@ -1645,7 +1647,7 @@ /***********************************************************************/ int TDBDOS::MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add) { - int k, n; + int k, n, rc = RC_OK; bool fixed, doit, sep, b = (pxdf != NULL); PCOL *keycols, colp; PIXDEF xdp, sxp = NULL; @@ -1690,95 +1692,105 @@ } else if (!(pxdf = dfp->GetIndx())) return RC_INFO; // No index to make - // Allocate all columns that will be used by indexes. - // This must be done before opening the table so specific - // column initialization can be done (in particular by TDBVCT) - for (n = 0, xdp = pxdf; xdp; xdp = xdp->GetNext()) - for (kdp = xdp->GetToKeyParts(); kdp; kdp = kdp->GetNext()) { - if (!(colp = ColDB(g, kdp->GetName(), 0))) { - sprintf(g->Message, MSG(INDX_COL_NOTIN), kdp->GetName(), Name); - goto err; - } else if (colp->GetResultType() == TYPE_DECIM) { - sprintf(g->Message, "Decimal columns are not indexable yet"); - goto err; - } // endif Type - - colp->InitValue(g); - n = MY_MAX(n, xdp->GetNparts()); - } // endfor kdp - - keycols = (PCOL*)PlugSubAlloc(g, NULL, n * sizeof(PCOL)); - sep = dfp->GetBoolCatInfo("SepIndex", false); - - /*********************************************************************/ - /* Construct and save the defined indexes. */ - /*********************************************************************/ - for (xdp = pxdf; xdp; xdp = xdp->GetNext()) - if (!OpenDB(g)) { - if (xdp->IsAuto() && fixed) - // Auto increment key and fixed file: use an XXROW index - continue; // XXROW index doesn't need to be made - - // On Update, redo only indexes that are modified - doit = !To_SetCols; - n = 0; - - if (sxp) - xdp->SetID(sxp->GetID() + 1); - - for (kdp = xdp->GetToKeyParts(); kdp; kdp = kdp->GetNext()) { - // Check whether this column was updated - for (colp = To_SetCols; !doit && colp; colp = colp->GetNext()) - if (!stricmp(kdp->GetName(), colp->GetName())) - doit = true; - - keycols[n++] = ColDB(g, kdp->GetName(), 0); - } // endfor kdp - - // If no indexed columns were updated, don't remake the index - // if indexes are in separate files. - if (!doit && sep) - continue; - - k = xdp->GetNparts(); - - // Make the index and save it - if (dfp->Huge) - pxp = new(g) XHUGE; - else - pxp = new(g) XFILE; - - if (k == 1) // Simple index - x = new(g) XINDXS(this, xdp, pxp, keycols); - else // Multi-Column index - x = new(g) XINDEX(this, xdp, pxp, keycols); - - if (!x->Make(g, sxp)) { - // Retreive define values from the index - xdp->SetMaxSame(x->GetMaxSame()); -// xdp->SetSize(x->GetSize()); + try { + // Allocate all columns that will be used by indexes. + // This must be done before opening the table so specific + // column initialization can be done (in particular by TDBVCT) + for (n = 0, xdp = pxdf; xdp; xdp = xdp->GetNext()) + for (kdp = xdp->GetToKeyParts(); kdp; kdp = kdp->GetNext()) { + if (!(colp = ColDB(g, kdp->GetName(), 0))) { + sprintf(g->Message, MSG(INDX_COL_NOTIN), kdp->GetName(), Name); + goto err; + } else if (colp->GetResultType() == TYPE_DECIM) { + sprintf(g->Message, "Decimal columns are not indexable yet"); + goto err; + } // endif Type + + colp->InitValue(g); + n = MY_MAX(n, xdp->GetNparts()); + } // endfor kdp + + keycols = (PCOL*)PlugSubAlloc(g, NULL, n * sizeof(PCOL)); + sep = dfp->GetBoolCatInfo("SepIndex", false); + + /*********************************************************************/ + /* Construct and save the defined indexes. */ + /*********************************************************************/ + for (xdp = pxdf; xdp; xdp = xdp->GetNext()) + if (!OpenDB(g)) { + if (xdp->IsAuto() && fixed) + // Auto increment key and fixed file: use an XXROW index + continue; // XXROW index doesn't need to be made + + // On Update, redo only indexes that are modified + doit = !To_SetCols; + n = 0; + + if (sxp) + xdp->SetID(sxp->GetID() + 1); + + for (kdp = xdp->GetToKeyParts(); kdp; kdp = kdp->GetNext()) { + // Check whether this column was updated + for (colp = To_SetCols; !doit && colp; colp = colp->GetNext()) + if (!stricmp(kdp->GetName(), colp->GetName())) + doit = true; + + keycols[n++] = ColDB(g, kdp->GetName(), 0); + } // endfor kdp + + // If no indexed columns were updated, don't remake the index + // if indexes are in separate files. + if (!doit && sep) + continue; + + k = xdp->GetNparts(); + + // Make the index and save it + if (dfp->Huge) + pxp = new(g) XHUGE; + else + pxp = new(g) XFILE; + + if (k == 1) // Simple index + x = new(g) XINDXS(this, xdp, pxp, keycols); + else // Multi-Column index + x = new(g) XINDEX(this, xdp, pxp, keycols); + + if (!x->Make(g, sxp)) { + // Retreive define values from the index + xdp->SetMaxSame(x->GetMaxSame()); + // xdp->SetSize(x->GetSize()); - // store KXYCOL Mxs in KPARTDEF Mxsame - xdp->SetMxsame(x); + // store KXYCOL Mxs in KPARTDEF Mxsame + xdp->SetMxsame(x); #if defined(TRACE) - printf("Make done...\n"); + printf("Make done...\n"); #endif // TRACE -// if (x->GetSize() > 0) - sxp = xdp; + // if (x->GetSize() > 0) + sxp = xdp; - xdp->SetInvalid(false); - } else - goto err; + xdp->SetInvalid(false); + } else + goto err; - } else - return RC_INFO; // Error or Physical table does not exist + } else + return RC_INFO; // Error or Physical table does not exist - if (Use == USE_OPEN) + } catch (int n) { + if (trace) + htrc("Exception %d: %s\n", n, g->Message); + rc = RC_FX; + } catch (const char *msg) { + strcpy(g->Message, msg); + rc = RC_FX; + } // end catch + + if (Use == USE_OPEN) CloseDB(g); - return RC_OK; + return rc; err: if (sxp) @@ -2725,7 +2737,7 @@ if (Value->GetBinValue(p, Long, Status)) { sprintf(g->Message, MSG(BIN_F_TOO_LONG), Name, Value->GetSize(), Long); - longjmp(g->jumper[g->jump_level], 31); + throw 31; } // endif } // end of WriteColumn @@ -2868,13 +2880,5 @@ return false; } // end of AddDistinctValue -/***********************************************************************/ -/* Make file output of a Dos column descriptor block. */ -/***********************************************************************/ -void DOSCOL::Printf(PGLOBAL g, FILE *f, uint n) - { - COLBLK::Printf(g, f, n); - } // end of Print - /* ------------------------------------------------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabdos.h mariadb-10.1-10.1.30/storage/connect/tabdos.h --- mariadb-10.1-10.1.25/storage/connect/tabdos.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabdos.h 2017-12-21 15:48:50.000000000 +0000 @@ -232,12 +232,10 @@ virtual PVBLK GetDval(void) {return Dval;} // Methods - //using COLBLK::Print; virtual bool VarSize(void); virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); virtual void ReadColumn(PGLOBAL g); virtual void WriteColumn(PGLOBAL g); - virtual void Printf(PGLOBAL g, FILE *, uint); protected: virtual bool SetMinMax(PGLOBAL g); diff -Nru mariadb-10.1-10.1.25/storage/connect/tabext.cpp mariadb-10.1-10.1.30/storage/connect/tabext.cpp --- mariadb-10.1-10.1.25/storage/connect/tabext.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabext.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -279,10 +279,57 @@ } // end of Decode /***********************************************************************/ -/* MakeSQL: make the SQL statement use with remote connection. */ -/* TODO: when implementing remote filtering, column only used in */ -/* local filter should be removed from column list. */ +/* MakeSrcdef: make the SQL statement from SRDEF option. */ /***********************************************************************/ +bool TDBEXT::MakeSrcdef(PGLOBAL g) +{ + char *catp = strstr(Srcdef, "%s"); + + if (catp) { + char *fil1, *fil2; + PCSZ ph = ((EXTDEF*)To_Def)->Phpos; + + if (!ph) + ph = (strstr(catp + 2, "%s")) ? "WH" : "W"; + + if (stricmp(ph, "H")) { + fil1 = (To_CondFil && *To_CondFil->Body) + ? To_CondFil->Body : PlugDup(g, "1=1"); + } // endif ph + + if (stricmp(ph, "W")) { + fil2 = (To_CondFil && To_CondFil->Having && *To_CondFil->Having) + ? To_CondFil->Having : PlugDup(g, "1=1"); + } // endif ph + + if (!stricmp(ph, "W")) { + Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil1)); + Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil1)); + } else if (!stricmp(ph, "WH")) { + Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil1) + strlen(fil2)); + Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil1, fil2)); + } else if (!stricmp(ph, "H")) { + Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil2)); + Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil2)); + } else if (!stricmp(ph, "HW")) { + Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil1) + strlen(fil2)); + Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil2, fil1)); + } else { + strcpy(g->Message, "MakeSQL: Wrong place holders specification"); + return true; + } // endif's ph + + } else + Query = new(g)STRING(g, 0, Srcdef); + + return false; +} // end of MakeSrcdef + + /***********************************************************************/ + /* MakeSQL: make the SQL statement use with remote connection. */ + /* TODO: when implementing remote filtering, column only used in */ + /* local filter should be removed from column list. */ + /***********************************************************************/ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt) { PCSZ schmp = NULL; @@ -292,47 +339,8 @@ PTABLE tablep = To_Table; PCOL colp; - if (Srcdef) { - if ((catp = strstr(Srcdef, "%s"))) { - char *fil1, *fil2; - PCSZ ph = ((EXTDEF*)To_Def)->Phpos; - - if (!ph) - ph = (strstr(catp + 2, "%s")) ? const_cast("WH") : - const_cast("W"); - - if (stricmp(ph, "H")) { - fil1 = (To_CondFil && *To_CondFil->Body) - ? To_CondFil->Body : PlugDup(g, "1=1"); - } // endif ph - - if (stricmp(ph, "W")) { - fil2 = (To_CondFil && To_CondFil->Having && *To_CondFil->Having) - ? To_CondFil->Having : PlugDup(g, "1=1"); - } // endif ph - - if (!stricmp(ph, "W")) { - Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil1)); - Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil1)); - } else if (!stricmp(ph, "WH")) { - Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil1) + strlen(fil2)); - Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil1, fil2)); - } else if (!stricmp(ph, "H")) { - Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil2)); - Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil2)); - } else if (!stricmp(ph, "HW")) { - Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil1) + strlen(fil2)); - Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil2, fil1)); - } else { - strcpy(g->Message, "MakeSQL: Wrong place holders specification"); - return true; - } // endif's ph - - } else - Query = new(g)STRING(g, 0, Srcdef); - - return false; - } // endif Srcdef + if (Srcdef) + return MakeSrcdef(g); // Allocate the string used to contain the Query Query = new(g)STRING(g, 1023, "SELECT "); diff -Nru mariadb-10.1-10.1.25/storage/connect/tabext.h mariadb-10.1-10.1.30/storage/connect/tabext.h --- mariadb-10.1-10.1.25/storage/connect/tabext.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabext.h 2017-12-21 15:48:50.000000000 +0000 @@ -104,6 +104,8 @@ /* This is the base class for all external tables. */ /***********************************************************************/ class DllExport TDBEXT : public TDB { + friend class JAVAConn; + friend class JMgoConn; public: // Constructors TDBEXT(EXTDEF *tdp); @@ -124,6 +126,7 @@ protected: // Internal functions + virtual bool MakeSrcdef(PGLOBAL g); virtual bool MakeSQL(PGLOBAL g, bool cnt); //virtual bool MakeInsert(PGLOBAL g); virtual bool MakeCommand(PGLOBAL g); @@ -164,7 +167,7 @@ }; // end of class TDBEXT /***********************************************************************/ -/* Virual class EXTCOL: external column. */ +/* Virtual class EXTCOL: external column. */ /***********************************************************************/ class DllExport EXTCOL : public COLBLK { friend class TDBEXT; diff -Nru mariadb-10.1-10.1.25/storage/connect/tabjdbc.cpp mariadb-10.1-10.1.30/storage/connect/tabjdbc.cpp --- mariadb-10.1-10.1.25/storage/connect/tabjdbc.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabjdbc.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -223,10 +223,10 @@ } // endif Connect if (Url) - rc = ParseURL(g, Url); - - if (rc == RC_FX) // Error - return true; + if ((rc = ParseURL(g, Url)) == RC_FX) { + sprintf(g->Message, "Wrong JDBC URL %s", Url); + return true; + } // endif rc Wrapname = GetStringCatInfo(g, "Wrapper", NULL); return false; @@ -305,12 +305,12 @@ if (tdp) { Ops.Driver = tdp->Driver; Ops.Url = tdp->Url; - WrapName = tdp->Wrapname; + Wrapname = tdp->Wrapname; Ops.User = tdp->Username; Ops.Pwd = tdp->Password; Ops.Scrollable = tdp->Scrollable; } else { - WrapName = NULL; + Wrapname = NULL; Ops.Driver = NULL; Ops.Url = NULL; Ops.User = NULL; @@ -328,7 +328,7 @@ { Jcp = tdbp->Jcp; // is that right ? Cnp = tdbp->Cnp; - WrapName = tdbp->WrapName; + Wrapname = tdbp->Wrapname; Ops = tdbp->Ops; Prepared = tdbp->Prepared; Werr = tdbp->Werr; @@ -562,7 +562,7 @@ /* Table already open, just replace it at its beginning. */ /*******************************************************************/ if (Memory == 1) { - if ((Qrp = Jcp->AllocateResult(g))) + if ((Qrp = Jcp->AllocateResult(g, this))) Memory = 2; // Must be filled else Memory = 0; // Allocation failed, don't use it @@ -596,11 +596,11 @@ /* drivers allowing concurency in getting results ??? */ /*********************************************************************/ if (!Jcp) - Jcp = new(g)JDBConn(g, this); + Jcp = new(g)JDBConn(g, Wrapname); else if (Jcp->IsOpen()) Jcp->Close(); - if (Jcp->Open(&Ops) == RC_FX) + if (Jcp->Connect(&Ops)) return true; else if (Quoted) Quote = Jcp->GetQuoteChar(); @@ -608,7 +608,7 @@ Use = USE_OPEN; // Do it now in case we are recursively called /*********************************************************************/ - /* Make the command and allocate whatever is used for getting results. */ + /* Make the command and allocate whatever is used for getting results*/ /*********************************************************************/ if (Mode == MODE_READ || Mode == MODE_READX) { if (Memory > 1 && !Srcdef) { @@ -625,7 +625,7 @@ } else if (n) { Jcp->m_Rows = n; - if ((Qrp = Jcp->AllocateResult(g))) + if ((Qrp = Jcp->AllocateResult(g, this))) Memory = 2; // Must be filled else { strcpy(g->Message, "Result set memory allocation failed"); @@ -1134,11 +1134,11 @@ /* drivers allowing concurency in getting results ??? */ /*********************************************************************/ if (!Jcp) { - Jcp = new(g) JDBConn(g, this); + Jcp = new(g) JDBConn(g, Wrapname); } else if (Jcp->IsOpen()) Jcp->Close(); - if (Jcp->Open(&Ops) == RC_FX) + if (Jcp->Connect(&Ops)) return true; Use = USE_OPEN; // Do it now in case we are recursively called @@ -1173,7 +1173,7 @@ else Query->Set(Cmdlist->Cmd); - if ((rc = Jcp->ExecSQLcommand(Query->GetStr())) == RC_FX) + if ((rc = Jcp->ExecuteCommand(Query->GetStr())) == RC_FX) Nerr++; if (rc == RC_NF) diff -Nru mariadb-10.1-10.1.25/storage/connect/tabjdbc.h mariadb-10.1-10.1.30/storage/connect/tabjdbc.h --- mariadb-10.1-10.1.25/storage/connect/tabjdbc.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabjdbc.h 2017-12-21 15:48:50.000000000 +0000 @@ -41,7 +41,7 @@ // Members PSZ Driver; /* JDBC driver */ PSZ Url; /* JDBC driver URL */ - PSZ Wrapname; /* Java wrapper name */ + PSZ Wrapname; /* Java driver name */ }; // end of JDBCDEF #if !defined(NJDBC) @@ -89,7 +89,7 @@ JDBConn *Jcp; // Points to a JDBC connection class JDBCCOL *Cnp; // Points to count(*) column JDBCPARM Ops; // Additional parameters - char *WrapName; // Points to Java wrapper name + PSZ Wrapname; // Points to Java wrapper name bool Prepared; // True when using prepared statement bool Werr; // Write error bool Rerr; // Rewind error @@ -173,7 +173,6 @@ // Methods virtual void ReadColumn(PGLOBAL g); virtual void WriteColumn(PGLOBAL g); - // void Printf(PGLOBAL g, FILE *, uint); protected: // Members diff -Nru mariadb-10.1-10.1.25/storage/connect/tabjmg.cpp mariadb-10.1-10.1.30/storage/connect/tabjmg.cpp --- mariadb-10.1-10.1.25/storage/connect/tabjmg.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabjmg.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,604 @@ +/************** tabjmg C++ Program Source Code File (.CPP) *************/ +/* PROGRAM NAME: tabjmg Version 1.2 */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* This file contains the MongoDB classes using the Java Driver. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include relevant sections of the MariaDB header file. */ +/***********************************************************************/ +#include + +/***********************************************************************/ +/* Include application header files: */ +/* global.h is header containing all global declarations. */ +/* plgdbsem.h is header containing the DB application declarations. */ +/***********************************************************************/ +#include "global.h" +#include "plgdbsem.h" +#include "xtable.h" +#include "maputil.h" +#include "filamtxt.h" +#include "tabext.h" +#include "tabjmg.h" +#include "tabmul.h" +#include "checklvl.h" +#include "resource.h" +#include "mycat.h" // for FNC_COL +#include "filter.h" + +#define nullptr 0 + +PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info); + +/* -------------------------- Class JMGDISC -------------------------- */ + +/***********************************************************************/ +/* Constructor */ +/***********************************************************************/ +JMGDISC::JMGDISC(PGLOBAL g, int *lg) : MGODISC(g, lg) +{ + drv = "Java"; Jcp = NULL; columnid = nullptr; bvnameid = nullptr; +} // end of JMGDISC constructor + +/***********************************************************************/ +/* Initialyze. */ +/***********************************************************************/ +bool JMGDISC::Init(PGLOBAL g) +{ + if (!(Jcp = ((TDBJMG*)tmgp)->Jcp)) { + strcpy(g->Message, "Init: Jcp is NULL"); + return true; + } else if (Jcp->gmID(g, columnid, "ColumnDesc", + "(Ljava/lang/Object;I[II)Ljava/lang/Object;")) + return true; + else if (Jcp->gmID(g, bvnameid, "ColDescName", "()Ljava/lang/String;")) + return true; + + return false; +} // end of Init + +/***********************************************************************/ +/* Analyse passed document. */ +/***********************************************************************/ +bool JMGDISC::Find(PGLOBAL g) +{ + return ColDesc(g, nullptr, NULL, NULL, Jcp->m_Ncol, 0); +} // end of Find + +/***********************************************************************/ +/* Analyse passed document. */ +/***********************************************************************/ +bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt, + int ncol, int k) +{ + const char *key; + char colname[65]; + char fmt[129]; + bool rc = true; + size_t z; + jint *n = nullptr; + jstring jkey; + jobject jres; + + // Build the java int array + jintArray val = Jcp->env->NewIntArray(5); + + if (val == nullptr) { + strcpy(g->Message, "Cannot allocate jint array"); + return true; + } else if (!ncol) + n = Jcp->env->GetIntArrayElements(val, 0); + + for (int i = 0; i < ncol; i++) { + jres = Jcp->env->CallObjectMethod(Jcp->job, columnid, obj, i, val, lvl - k); + n = Jcp->env->GetIntArrayElements(val, 0); + + if (Jcp->Check(n[0])) { + sprintf(g->Message, "ColDesc: %s", Jcp->Msg); + goto err; + } else if (!n[0]) + continue; + + jkey = (jstring)Jcp->env->CallObjectMethod(Jcp->job, bvnameid); + key = Jcp->env->GetStringUTFChars(jkey, (jboolean)false); + + if (pcn) { + strncpy(colname, pcn, 64); + colname[64] = 0; + z = 65 - strlen(colname); + strncat(strncat(colname, "_", z), key, z - 1); + } else + strcpy(colname, key); + + if (pfmt) { + strncpy(fmt, pfmt, 128); + fmt[128] = 0; + z = 129 - strlen(fmt); + strncat(strncat(fmt, ".", z), key, z - 1); + } else + strcpy(fmt, key); + + if (!jres) { + bcol.Type = n[0]; + bcol.Len = n[1]; + bcol.Scale = n[2]; + bcol.Cbn = n[3]; + AddColumn(g, colname, fmt, k); + } else { + if (n[0] == 2 && !all) + n[4] = MY_MIN(n[4], 1); + + if (ColDesc(g, jres, colname, fmt, n[4], k + 1)) + goto err; + + } // endif jres + + } // endfor i + + rc = false; + + err: + Jcp->env->ReleaseIntArrayElements(val, n, 0); + return rc; +} // end of ColDesc + +/* --------------------------- Class TDBJMG -------------------------- */ + +/***********************************************************************/ +/* Implementation of the TDBJMG class. */ +/***********************************************************************/ +TDBJMG::TDBJMG(PMGODEF tdp) : TDBEXT(tdp) +{ + Jcp = NULL; +//Cnp = NULL; + + if (tdp) { + Ops.Driver = tdp->Tabschema; + Ops.Url = tdp->Uri; + Ops.Version = tdp->Version; + Uri = tdp->Uri; + Db_name = tdp->Tabschema; + Wrapname = tdp->Wrapname; + Coll_name = tdp->Tabname; + Options = tdp->Colist; + Filter = tdp->Filter; + B = tdp->Base ? 1 : 0; + Pipe = tdp->Pipe && Options != NULL; + } else { + Ops.Driver = NULL; + Ops.Url = NULL; + Ops.Version = 0; + Uri = NULL; + Db_name = NULL; + Coll_name = NULL; + Options = NULL; + Filter = NULL; + B = 0; + Pipe = false; + } // endif tdp + + Ops.User = NULL; + Ops.Pwd = NULL; + Ops.Scrollable = false; + Ops.Fsize = 0; + Fpos = -1; + N = 0; + Done = false; +} // end of TDBJMG standard constructor + +TDBJMG::TDBJMG(TDBJMG *tdbp) : TDBEXT(tdbp) +{ + Uri = tdbp->Uri; + Db_name = tdbp->Db_name;; + Coll_name = tdbp->Coll_name; + Options = tdbp->Options; + Filter = tdbp->Filter; + B = tdbp->B; + Fpos = tdbp->Fpos; + N = tdbp->N; + Done = tdbp->Done; + Pipe = tdbp->Pipe; +} // end of TDBJMG copy constructor + +// Used for update +PTDB TDBJMG::Clone(PTABS t) +{ + PTDB tp; + PJMGCOL cp1, cp2; + PGLOBAL g = t->G; + + tp = new(g) TDBJMG(this); + + for (cp1 = (PJMGCOL)Columns; cp1; cp1 = (PJMGCOL)cp1->GetNext()) + if (!cp1->IsSpecial()) { + cp2 = new(g) JMGCOL(cp1, tp); // Make a copy + NewPointer(t, cp1, cp2); + } // endif cp1 + + return tp; +} // end of Clone + +/***********************************************************************/ +/* Allocate JSN column description block. */ +/***********************************************************************/ +PCOL TDBJMG::MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n) +{ + return new(g) JMGCOL(g, cdp, this, cprec, n); +} // end of MakeCol + +/***********************************************************************/ +/* InsertSpecialColumn: Put a special column ahead of the column list.*/ +/***********************************************************************/ +PCOL TDBJMG::InsertSpecialColumn(PCOL colp) +{ + if (!colp->IsSpecial()) + return NULL; + + colp->SetNext(Columns); + Columns = colp; + return colp; +} // end of InsertSpecialColumn + +/***********************************************************************/ +/* MONGO Cardinality: returns table size in number of rows. */ +/***********************************************************************/ +int TDBJMG::Cardinality(PGLOBAL g) +{ + if (!g) + return 1; + else if (Cardinal < 0) + Cardinal = (!Init(g)) ? Jcp->CollSize(g) : 0; + + return Cardinal; +} // end of Cardinality + +/***********************************************************************/ +/* MONGO GetMaxSize: returns collection size estimate. */ +/***********************************************************************/ +int TDBJMG::GetMaxSize(PGLOBAL g) +{ + if (MaxSize < 0) + MaxSize = Cardinality(g); + + return MaxSize; +} // end of GetMaxSize + +/***********************************************************************/ +/* Init: initialize MongoDB processing. */ +/***********************************************************************/ +bool TDBJMG::Init(PGLOBAL g) +{ + if (Done) + return false; + + /*********************************************************************/ + /* Open an JDBC connection for this table. */ + /* Note: this may not be the proper way to do. Perhaps it is better */ + /* to test whether a connection is already open for this datasource */ + /* and if so to allocate just a new result set. But this only for */ + /* drivers allowing concurency in getting results ??? */ + /*********************************************************************/ + if (!Jcp) + Jcp = new(g) JMgoConn(g, Coll_name, Wrapname); + else if (Jcp->IsOpen()) + Jcp->Close(); + + if (Jcp->Connect(&Ops)) + return true; + + Done = true; + return false; +} // end of Init + +/***********************************************************************/ +/* OpenDB: Data Base open routine for MONGO access method. */ +/***********************************************************************/ +bool TDBJMG::OpenDB(PGLOBAL g) +{ + if (Use == USE_OPEN) { + /*******************************************************************/ + /* Table already open replace it at its beginning. */ + /*******************************************************************/ + if (Jcp->Rewind()) + return true; + + Fpos = -1; + return false; + } // endif Use + + /*********************************************************************/ + /* First opening. */ + /*********************************************************************/ + if (Pipe && Mode != MODE_READ) { + strcpy(g->Message, "Pipeline tables are read only"); + return true; + } // endif Pipe + + Use = USE_OPEN; // Do it now in case we are recursively called + + if (Init(g)) + return true; + + if (Jcp->GetMethodId(g, Mode)) + return true; + + if (Mode == MODE_DELETE && !Next) { + // Delete all documents + if (!Jcp->MakeCursor(g, this, "all", Filter, false)) + if (Jcp->DocDelete(g, true) == RC_OK) + return false; + + return true; + } // endif Mode + + if (Mode == MODE_INSERT) + Jcp->MakeColumnGroups(g, this); + + if (Mode != MODE_UPDATE) + return Jcp->MakeCursor(g, this, Options, Filter, Pipe); + + return false; +} // end of OpenDB + +/***********************************************************************/ +/* Data Base indexed read routine for ODBC access method. */ +/***********************************************************************/ +bool TDBJMG::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr) +{ + strcpy(g->Message, "MONGO tables are not indexable"); + return true; +} // end of ReadKey + +/***********************************************************************/ +/* ReadDB: Get next document from a collection. */ +/***********************************************************************/ +int TDBJMG::ReadDB(PGLOBAL g) +{ + int rc = RC_OK; + + if (!N && Mode == MODE_UPDATE) + if (Jcp->MakeCursor(g, this, Options, Filter, Pipe)) + return RC_FX; + + if (++CurNum >= Rbuf) { + Rbuf = Jcp->Fetch(); + Curpos = Fpos + 1; + CurNum = 0; + N++; + } // endif CurNum + + rc = (Rbuf > 0) ? RC_OK : (Rbuf == 0) ? RC_EF : RC_FX; + + return rc; +} // end of ReadDB + +/***********************************************************************/ +/* WriteDB: Data Base write routine for DOS access method. */ +/***********************************************************************/ +int TDBJMG::WriteDB(PGLOBAL g) +{ + int rc = RC_OK; + + if (Mode == MODE_INSERT) { + rc = Jcp->DocWrite(g); + } else if (Mode == MODE_DELETE) { + rc = Jcp->DocDelete(g, false); + } else if (Mode == MODE_UPDATE) { + rc = Jcp->DocUpdate(g, this); + } // endif Mode + + return rc; +} // end of WriteDB + +/***********************************************************************/ +/* Data Base delete line routine for ODBC access method. */ +/***********************************************************************/ +int TDBJMG::DeleteDB(PGLOBAL g, int irc) +{ + return (irc == RC_OK) ? WriteDB(g) : RC_OK; +} // end of DeleteDB + +/***********************************************************************/ +/* Table close routine for MONGO tables. */ +/***********************************************************************/ +void TDBJMG::CloseDB(PGLOBAL g) +{ + Jcp->Close(); + Done = false; +} // end of CloseDB + +/* ----------------------------- JMGCOL ------------------------------ */ + +/***********************************************************************/ +/* JMGCOL public constructor. */ +/***********************************************************************/ +JMGCOL::JMGCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i) + : EXTCOL(cdp, tdbp, cprec, i, "MGO") +{ + Tmgp = (PTDBJMG)(tdbp->GetOrig() ? tdbp->GetOrig() : tdbp); + Jpath = cdp->GetFmt() ? cdp->GetFmt() : cdp->GetName(); +//Mbuf = NULL; +} // end of JMGCOL constructor + +/***********************************************************************/ +/* JMGCOL constructor used for copying columns. */ +/* tdbp is the pointer to the new table descriptor. */ +/***********************************************************************/ +JMGCOL::JMGCOL(JMGCOL *col1, PTDB tdbp) : EXTCOL(col1, tdbp) +{ + Tmgp = col1->Tmgp; + Jpath = col1->Jpath; +//Mbuf = col1->Mbuf; +} // end of JMGCOL copy constructor + +/***********************************************************************/ +/* Get path when proj is false or projection path when proj is true. */ +/***********************************************************************/ +PSZ JMGCOL::GetJpath(PGLOBAL g, bool proj) +{ + if (Jpath) { + if (proj) { + char *p1, *p2, *projpath = PlugDup(g, Jpath); + int i = 0; + + for (p1 = p2 = projpath; *p1; p1++) + if (*p1 == '.') { + if (!i) + *p2++ = *p1; + + i = 1; + } else if (i) { + if (!isdigit(*p1)) { + *p2++ = *p1; + i = 0; + } // endif p1 + + } else + *p2++ = *p1; + + *p2 = 0; + return projpath; + } else + return Jpath; + + } else + return Name; + +} // end of GetJpath + +#if 0 +/***********************************************************************/ +/* Mini: used to suppress blanks to json strings. */ +/***********************************************************************/ +char *JMGCOL::Mini(PGLOBAL g, const bson_t *bson, bool b) +{ + char *s, *str = NULL; + int i, k = 0; + bool ok = true; + + if (b) + s = str = bson_array_as_json(bson, NULL); + else + s = str = bson_as_json(bson, NULL); + + for (i = 0; i < Long && s[i]; i++) { + switch (s[i]) { + case ' ': + if (ok) continue; + case '"': + ok = !ok; + default: + break; + } // endswitch s[i] + + Mbuf[k++] = s[i]; + } // endfor i + + bson_free(str); + + if (i >= Long) { + sprintf(g->Message, "Value too long for column %s", Name); + throw (int)TYPE_AM_MGO; + } // endif i + + Mbuf[k] = 0; + return Mbuf; +} // end of Mini +#endif // 0 + +/***********************************************************************/ +/* ReadColumn: */ +/***********************************************************************/ +void JMGCOL::ReadColumn(PGLOBAL g) +{ + Value->SetValue_psz(Tmgp->Jcp->GetColumnValue(Jpath)); +} // end of ReadColumn + +/***********************************************************************/ +/* WriteColumn: */ +/***********************************************************************/ +void JMGCOL::WriteColumn(PGLOBAL g) +{ + // Check whether this node must be written + if (Value != To_Val) + Value->SetValue_pval(To_Val, FALSE); // Convert the updated value + +} // end of WriteColumn + +#if 0 +/***********************************************************************/ +/* AddValue: Add column value to the document to insert or update. */ +/***********************************************************************/ +bool JMGCOL::AddValue(PGLOBAL g, bson_t *doc, char *key, bool upd) +{ + bool rc = false; + + if (Value->IsNull()) { + if (upd) + rc = BSON_APPEND_NULL(doc, key); + else + return false; + + } else switch (Buf_Type) { + case TYPE_STRING: + rc = BSON_APPEND_UTF8(doc, key, Value->GetCharValue()); + break; + case TYPE_INT: + case TYPE_SHORT: + rc = BSON_APPEND_INT32(doc, key, Value->GetIntValue()); + break; + case TYPE_TINY: + rc = BSON_APPEND_BOOL(doc, key, Value->GetIntValue()); + break; + case TYPE_BIGINT: + rc = BSON_APPEND_INT64(doc, key, Value->GetBigintValue()); + break; + case TYPE_DOUBLE: + rc = BSON_APPEND_DOUBLE(doc, key, Value->GetFloatValue()); + break; + case TYPE_DECIM: + {bson_decimal128_t dec; + + if (bson_decimal128_from_string(Value->GetCharValue(), &dec)) + rc = BSON_APPEND_DECIMAL128(doc, key, &dec); + + } break; + case TYPE_DATE: + rc = BSON_APPEND_DATE_TIME(doc, key, Value->GetBigintValue() * 1000); + break; + default: + sprintf(g->Message, "Type %d not supported yet", Buf_Type); + return true; + } // endswitch Buf_Type + + if (!rc) { + strcpy(g->Message, "Adding value failed"); + return true; + } else + return false; + +} // end of AddValue +#endif // 0 + +/* -------------------------- TDBJGL class --------------------------- */ + +/***********************************************************************/ +/* TDBJGL class constructor. */ +/***********************************************************************/ +TDBJGL::TDBJGL(PMGODEF tdp) : TDBCAT(tdp) +{ + Topt = tdp->GetTopt(); + Uri = tdp->Uri; + Db = tdp->GetTabschema(); +} // end of TDBJCL constructor + +/***********************************************************************/ +/* GetResult: Get the list the MongoDB collection columns. */ +/***********************************************************************/ +PQRYRES TDBJGL::GetResult(PGLOBAL g) +{ + return MGOColumns(g, Db, Uri, Topt, false); +} // end of GetResult + +/* -------------------------- End of mongo --------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabjmg.h mariadb-10.1-10.1.30/storage/connect/tabjmg.h --- mariadb-10.1-10.1.25/storage/connect/tabjmg.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabjmg.h 2017-12-21 15:48:50.000000000 +0000 @@ -0,0 +1,145 @@ +/**************** tabjmg H Declares Source Code File (.H) **************/ +/* Name: tabjmg.h Version 1.1 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2017 */ +/* */ +/* This file contains the MongoDB classes using the Java Driver. */ +/***********************************************************************/ +#include "mongo.h" +#include "jmgoconn.h" +#include "jdbccat.h" + +/***********************************************************************/ +/* Class used to get the columns of a mongo collection. */ +/***********************************************************************/ +class JMGDISC : public MGODISC { +public: + // Constructor + JMGDISC(PGLOBAL g, int *lg); + + // Methods + virtual bool Init(PGLOBAL g); + virtual void GetDoc(void) {} + virtual bool Find(PGLOBAL g); + +protected: + // Function + bool ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt, + int ncol, int k); + + // Members + JMgoConn *Jcp; // Points to a Mongo connection class + jmethodID columnid; // The ColumnDesc method ID + jmethodID bvnameid; // The ColDescName method ID +}; // end of JMGDISC + +/* -------------------------- TDBJMG class --------------------------- */ + +/***********************************************************************/ +/* This is the MongoDB Table Type using the Java Driver. */ +/* The table is a collection, each record being a document. */ +/***********************************************************************/ +class DllExport TDBJMG : public TDBEXT { + friend class JMGCOL; + friend class MGODEF; + friend class JMGDISC; + friend class JAVAConn; + friend PQRYRES MGOColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); +public: + // Constructor + TDBJMG(PMGODEF tdp); + TDBJMG(TDBJMG *tdbp); + + // Implementation + virtual AMT GetAmType(void) { return TYPE_AM_MGO; } + virtual PTDB Duplicate(PGLOBAL g) { return (PTDB)new(g) TDBJMG(this); } + + // Methods + virtual PTDB Clone(PTABS t); + virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); + virtual PCOL InsertSpecialColumn(PCOL colp); +//virtual void SetFilter(PFIL fp); + virtual int RowNumber(PGLOBAL g, bool b = FALSE) { return N; } + + // Database routines + virtual int Cardinality(PGLOBAL g); + virtual int GetMaxSize(PGLOBAL g); + virtual bool OpenDB(PGLOBAL g); + virtual int ReadDB(PGLOBAL g); + virtual int WriteDB(PGLOBAL g); + virtual int DeleteDB(PGLOBAL g, int irc); + virtual void CloseDB(PGLOBAL g); + virtual bool ReadKey(PGLOBAL g, OPVAL op, const key_range *kr); + +protected: + bool Init(PGLOBAL g); + + // Members + JMgoConn *Jcp; // Points to a Mongo connection class +//JMGCOL *Cnp; // Points to count(*) column + JDBCPARM Ops; // Additional parameters + PCSZ Uri; + PCSZ Db_name; + PCSZ Coll_name; + PCSZ Options; // The MongoDB options + PCSZ Filter; // The filtering query + PSZ Wrapname; // Java wrapper name + int Fpos; // The current row index + int N; // The current Rownum + int B; // Array index base + bool Done; // Init done + bool Pipe; // True for pipeline +}; // end of class TDBJMG + +/* --------------------------- JMGCOL class -------------------------- */ + +/***********************************************************************/ +/* Class JMGCOL: MongoDB access method column descriptor. */ +/***********************************************************************/ +class DllExport JMGCOL : public EXTCOL { + friend class TDBJMG; + friend class FILTER; +public: + // Constructors + JMGCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i); + JMGCOL(JMGCOL *colp, PTDB tdbp); // Constructor used in copy process + + // Implementation + virtual int GetAmType(void) {return Tmgp->GetAmType();} + + // Methods + //virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); + virtual PSZ GetJpath(PGLOBAL g, bool proj); + virtual void ReadColumn(PGLOBAL g); + virtual void WriteColumn(PGLOBAL g); +//bool AddValue(PGLOBAL g, bson_t *doc, char *key, bool upd); + +protected: + // Default constructor not to be used + JMGCOL(void) {} +//char *GetProjPath(PGLOBAL g); +//char *Mini(PGLOBAL g, const bson_t *bson, bool b); + + // Members + TDBJMG *Tmgp; // To the MGO table block + char *Jpath; // The json path +//char *Mbuf; // The Mini buffer +}; // end of class JMGCOL + +/***********************************************************************/ +/* This is the class declaration for the MONGO catalog table. */ +/***********************************************************************/ +class DllExport TDBJGL : public TDBCAT { +public: + // Constructor + TDBJGL(PMGODEF tdp); + +protected: + // Specific routines + virtual PQRYRES GetResult(PGLOBAL g); + + // Members + PTOS Topt; + PCSZ Uri; + PCSZ Db; +}; // end of class TDBGOL diff -Nru mariadb-10.1-10.1.25/storage/connect/tabjson.cpp mariadb-10.1-10.1.30/storage/connect/tabjson.cpp --- mariadb-10.1-10.1.25/storage/connect/tabjson.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabjson.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -1,5 +1,5 @@ /************* tabjson C++ Program Source Code File (.CPP) *************/ -/* PROGRAM NAME: tabjson Version 1.4 */ +/* PROGRAM NAME: tabjson Version 1.5 */ /* (C) Copyright to the author Olivier BERTRAND 2014 - 2017 */ /* This program are the JSON class DB execution routines. */ /***********************************************************************/ @@ -31,6 +31,12 @@ #if defined(ZIP_SUPPORT) #include "filamzip.h" #endif // ZIP_SUPPORT +#if defined(JAVA_SUPPORT) +#include "jmgfam.h" +#endif // JAVA_SUPPORT +#if defined(CMGO_SUPPORT) +#include "cmgfam.h" +#endif // CMGO_SUPPORT #include "tabmul.h" #include "checklvl.h" #include "resource.h" @@ -41,12 +47,12 @@ /***********************************************************************/ #define MAXCOL 200 /* Default max column nb in result */ #define TYPE_UNKNOWN 12 /* Must be greater than other types */ -#define USE_G 1 /* Use recoverable memory if 1 */ /***********************************************************************/ -/* External function. */ +/* External functions. */ /***********************************************************************/ USETEMP UseTemp(void); +char *GetJsonNull(void); typedef struct _jncol { struct _jncol *Next; @@ -63,16 +69,18 @@ /* JSONColumns: construct the result blocks containing the description */ /* of all the columns of a table contained inside a JSON file. */ /***********************************************************************/ -PQRYRES JSONColumns(PGLOBAL g, char *db, PTOS topt, bool info) +PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) { static int buftyp[] = {TYPE_STRING, TYPE_SHORT, TYPE_STRING, TYPE_INT, TYPE_INT, TYPE_SHORT, TYPE_SHORT, TYPE_STRING}; static XFLD fldtyp[] = {FLD_NAME, FLD_TYPE, FLD_TYPENAME, FLD_PREC, FLD_LENGTH, FLD_SCALE, FLD_NULL, FLD_FORMAT}; static unsigned int length[] = {0, 6, 8, 10, 10, 6, 6, 0}; - char colname[65], fmt[129]; + char *p, colname[65], fmt[129]; int i, j, lvl, n = 0; int ncol = sizeof(buftyp) / sizeof(int); + bool mgo = (GetTypeID(topt->type) == TAB_MONGO); + PCSZ sep, level; PVAL valp; JCOL jcol; PJCL jcp, fjcp = NULL, pjcp = NULL; @@ -102,8 +110,15 @@ /*********************************************************************/ /* Open the input file. */ /*********************************************************************/ - lvl = GetIntegerTableOption(g, topt, "Level", 0); - lvl = (lvl < 0) ? 0 : (lvl > 16) ? 16 : lvl; + level = GetStringTableOption(g, topt, "Level", NULL); + + if (level) { + lvl = atoi(level); + lvl = (lvl > 16) ? 16 : lvl; + } else + lvl = 0; + + sep = GetStringTableOption(g, topt, "Separator", "."); tdp = new(g) JSONDEF; #if defined(ZIP_SUPPORT) @@ -112,22 +127,43 @@ #endif // ZIP_SUPPORT tdp->Fn = GetStringTableOption(g, topt, "Filename", NULL); - if (!tdp->Fn) { - strcpy(g->Message, MSG(MISSING_FNAME)); - return NULL; - } // endif Fn - if (!(tdp->Database = SetPath(g, db))) return NULL; tdp->Objname = GetStringTableOption(g, topt, "Object", NULL); tdp->Base = GetIntegerTableOption(g, topt, "Base", 0) ? 1 : 0; tdp->Pretty = GetIntegerTableOption(g, topt, "Pretty", 2); + tdp->Xcol = GetStringTableOption(g, topt, "Expand", NULL); + tdp->Accept = GetBooleanTableOption(g, topt, "Accept", false); + tdp->Uri = (dsn && *dsn ? dsn : NULL); - if (trace) + if (!tdp->Fn && !tdp->Uri) { + strcpy(g->Message, MSG(MISSING_FNAME)); + return NULL; + } // endif Fn + + if (trace) htrc("File %s objname=%s pretty=%d lvl=%d\n", tdp->Fn, tdp->Objname, tdp->Pretty, lvl); + if (tdp->Uri) { +#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT) + tdp->Collname = GetStringTableOption(g, topt, "Name", NULL); + tdp->Collname = GetStringTableOption(g, topt, "Tabname", tdp->Collname); + tdp->Schema = GetStringTableOption(g, topt, "Dbname", "test"); + tdp->Options = (PSZ)GetStringTableOption(g, topt, "Colist", "all"); + tdp->Pipe = GetBooleanTableOption(g, topt, "Pipeline", false); + tdp->Driver = (PSZ)GetStringTableOption(g, topt, "Driver", NULL); + tdp->Version = GetIntegerTableOption(g, topt, "Version", 3); + tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper", + (tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface"); + tdp->Pretty = 0; +#else // !MONGO_SUPPORT + sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); + return NULL; +#endif // !MONGO_SUPPORT + } // endif Uri + if (tdp->Pretty == 2) { if (tdp->Zipped) { #if defined(ZIP_SUPPORT) @@ -144,10 +180,12 @@ jsp = (tjsp->GetDoc()) ? tjsp->GetDoc()->GetValue(0) : NULL; } else { - if (!(tdp->Lrecl = GetIntegerTableOption(g, topt, "Lrecl", 0))) { - sprintf(g->Message, "LRECL must be specified for pretty=%d", tdp->Pretty); - return NULL; - } // endif lrecl + if (!(tdp->Lrecl = GetIntegerTableOption(g, topt, "Lrecl", 0))) + if (!mgo) { + sprintf(g->Message, "LRECL must be specified for pretty=%d", tdp->Pretty); + return NULL; + } else + tdp->Lrecl = 8192; // Should be enough tdp->Ending = GetIntegerTableOption(g, topt, "Ending", CRLF); @@ -158,12 +196,37 @@ sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "ZIP"); return NULL; #endif // !ZIP_SUPPORT + } else if (tdp->Uri) { + if (tdp->Driver && toupper(*tdp->Driver) == 'C') { +#if defined(CMGO_SUPPORT) + tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp)); +#else + sprintf(g->Message, "Mongo %s Driver not available", "C"); + return NULL; +#endif + } else if (tdp->Driver && toupper(*tdp->Driver) == 'J') { +#if defined(JAVA_SUPPORT) + tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp)); +#else + sprintf(g->Message, "Mongo %s Driver not available", "Java"); + return NULL; +#endif + } else { // Driver not specified +#if defined(CMGO_SUPPORT) + tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp)); +#elif defined(JAVA_SUPPORT) + tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp)); +#else + sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); + return NULL; +#endif + } // endif Driver + } else tjnp = new(g) TDBJSN(tdp, new(g) DOSFAM(tdp)); tjnp->SetMode(MODE_READ); -#if USE_G // Allocate the parse work memory PGLOBAL G = (PGLOBAL)PlugSubAlloc(g, NULL, sizeof(GLOBAL)); memset(G, 0, sizeof(GLOBAL)); @@ -172,9 +235,6 @@ PlugSubSet(G, G->Sarea, G->Sarea_Size); G->jump_level = 0; tjnp->SetG(G); -#else - tjnp->SetG(g); -#endif if (tjnp->OpenDB(g)) return NULL; @@ -199,7 +259,15 @@ jcol.Found = true; colname[64] = 0; fmt[128] = 0; - jrp = (PJPR*)PlugSubAlloc(g, NULL, sizeof(PJPR) * lvl); + + if (!tdp->Uri) { + *fmt = '$'; + fmt[1] = '.'; + p = fmt + 2; + } else + p = fmt; + + jrp = (PJPR*)PlugSubAlloc(g, NULL, sizeof(PJPR) * MY_MAX(lvl, 0)); /*********************************************************************/ /* Analyse the JSON tree and define columns. */ @@ -211,7 +279,7 @@ more: strncpy(colname, jpp->GetKey(), 64); - *fmt = 0; + *p = 0; j = 0; jvp = jpp->GetVal(); @@ -226,8 +294,8 @@ jcol.Len = jcol.Scale = 0; jcol.Cbn = true; } else if (j < lvl) { - if (!*fmt) - strcpy(fmt, colname); + if (!*p) + strcat(fmt, colname); jsp = jvp->GetJson(); @@ -236,13 +304,24 @@ if (!jrp[j]) jrp[j] = jsp->GetFirst(); - strncat(strncat(fmt, ":", 128), jrp[j]->GetKey(), 128); - strncat(strncat(colname, "_", 64), jrp[j]->GetKey(), 64); - jvp = jrp[j]->GetVal(); - j++; + if (*jrp[j]->GetKey() != '$') { + strncat(strncat(fmt, sep, 128), jrp[j]->GetKey(), 128); + strncat(strncat(colname, "_", 64), jrp[j]->GetKey(), 64); + } // endif Key + + jvp = jrp[j]->GetVal(); + j++; break; case TYPE_JAR: - strncat(fmt, ":", 128); + if (!tdp->Xcol || stricmp(tdp->Xcol, colname)) { + if (tdp->Uri) + strncat(strncat(fmt, sep, 128), "0", 128); + else + strncat(fmt, "[0]", 128); + + } else + strncat(fmt, (tdp->Uri ? sep : "[]"), 128); + jvp = jsp->GetValue(0); break; default: @@ -251,12 +330,13 @@ } // endswitch jsp goto retry; - } else { + } else if (lvl >= 0) { jcol.Type = TYPE_STRING; jcol.Len = 256; jcol.Scale = 0; jcol.Cbn = true; - } // endif's + } else + continue; // Check whether this column was already found for (jcp = fjcp; jcp; jcp = jcp->Next) @@ -272,16 +352,16 @@ } // endif Type - if (*fmt && (!jcp->Fmt || strlen(jcp->Fmt) < strlen(fmt))) { + if (*p && (!jcp->Fmt || strlen(jcp->Fmt) < strlen(fmt))) { jcp->Fmt = PlugDup(g, fmt); length[7] = MY_MAX(length[7], strlen(fmt)); - } // endif *fmt + } // endif fmt jcp->Len = MY_MAX(jcp->Len, jcol.Len); jcp->Scale = MY_MAX(jcp->Scale, jcol.Scale); jcp->Cbn |= jcol.Cbn; jcp->Found = true; - } else { + } else if (jcol.Type != TYPE_UNKNOWN || tdp->Accept) { // New column jcp = (PJCL)PlugSubAlloc(g, NULL, sizeof(JCOL)); *jcp = jcol; @@ -289,7 +369,7 @@ jcp->Name = PlugDup(g, colname); length[0] = MY_MAX(length[0], strlen(colname)); - if (*fmt) { + if (*p) { jcp->Fmt = PlugDup(g, fmt); length[7] = MY_MAX(length[7], strlen(fmt)); } else @@ -364,8 +444,8 @@ /* Now get the results into blocks. */ /*********************************************************************/ for (i = 0, jcp = fjcp; jcp; i++, jcp = jcp->Next) { - if (jcp->Type == TYPE_UNKNOWN) // Void column - jcp->Type = TYPE_STRING; + if (jcp->Type == TYPE_UNKNOWN) + jcp->Type = TYPE_STRING; // Void column crp = qrp->Colresp; // Column Name crp->Kdata->SetValue(jcp->Name, i); @@ -411,6 +491,13 @@ Limit = 1; Base = 0; Strict = false; + Sep = '.'; + Uri = NULL; + Collname = Options = Filter = NULL; + Pipe = false; + Driver = NULL; + Version = 0; + Wrapname = NULL; } // end of JSONDEF constructor /***********************************************************************/ @@ -418,13 +505,39 @@ /***********************************************************************/ bool JSONDEF::DefineAM(PGLOBAL g, LPCSTR, int poff) { - Jmode = (JMODE)GetIntCatInfo("Jmode", MODE_OBJECT); + Schema = GetStringCatInfo(g, "DBname", Schema); + Jmode = (JMODE)GetIntCatInfo("Jmode", MODE_OBJECT); Objname = GetStringCatInfo(g, "Object", NULL); Xcol = GetStringCatInfo(g, "Expand", NULL); Pretty = GetIntCatInfo("Pretty", 2); Limit = GetIntCatInfo("Limit", 10); Base = GetIntCatInfo("Base", 0) ? 1 : 0; - return DOSDEF::DefineAM(g, "DOS", poff); + Sep = *GetStringCatInfo(g, "Separator", "."); + + if (Uri = GetStringCatInfo(g, "Connect", NULL)) { +#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT) + Collname = GetStringCatInfo(g, "Name", + (Catfunc & (FNC_TABLE | FNC_COL)) ? NULL : Name); + Collname = GetStringCatInfo(g, "Tabname", Collname); + Options = GetStringCatInfo(g, "Colist", NULL); + Filter = GetStringCatInfo(g, "Filter", NULL); + Pipe = GetBoolCatInfo("Pipeline", false); + Driver = GetStringCatInfo(g, "Driver", NULL); + Version = GetIntCatInfo("Version", 3); + Pretty = 0; +#if defined(JAVA_SUPPORT) + if (Version == 2) + Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo2Interface"); + else + Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo3Interface"); +#endif // JAVA_SUPPORT +#else // !MONGO_SUPPORT + sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); + return true; +#endif // !MONGO_SUPPORT + } // endif Uri + + return DOSDEF::DefineAM(g, (Uri ? "XMGO" : "DOS"), poff); } // end of DefineAM /***********************************************************************/ @@ -446,7 +559,33 @@ !(tmp == TMP_FORCE && (m == MODE_UPDATE || m == MODE_DELETE)); - if (Zipped) { + if (Uri) { + if (Driver && toupper(*Driver) == 'C') { +#if defined(CMGO_SUPPORT) + txfp = new(g) CMGFAM(this); +#else + sprintf(g->Message, "Mongo %s Driver not available", "C"); + return NULL; +#endif + } else if (Driver && toupper(*Driver) == 'J') { +#if defined(JAVA_SUPPORT) + txfp = new(g) JMGFAM(this); +#else + sprintf(g->Message, "Mongo %s Driver not available", "Java"); + return NULL; +#endif + } else { // Driver not specified +#if defined(CMGO_SUPPORT) + txfp = new(g) CMGFAM(this); +#elif defined(JAVA_SUPPORT) + txfp = new(g) JMGFAM(this); +#else // !MONGO_SUPPORT + sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); + return NULL; +#endif // !MONGO_SUPPORT + } // endif Driver + + } else if (Zipped) { #if defined(ZIP_SUPPORT) if (m == MODE_READ || m == MODE_ANY || m == MODE_ALTER) { txfp = new(g) UNZFAM(this); @@ -478,18 +617,20 @@ // Txfp must be set for TDBDOS tdbp = new(g) TDBJSN(this, txfp); -#if USE_G - // Allocate the parse work memory - PGLOBAL G = (PGLOBAL)PlugSubAlloc(g, NULL, sizeof(GLOBAL)); - memset(G, 0, sizeof(GLOBAL)); - G->Sarea_Size = Lrecl * 10; - G->Sarea = PlugSubAlloc(g, NULL, G->Sarea_Size); - PlugSubSet(G, G->Sarea, G->Sarea_Size); - G->jump_level = 0; - ((TDBJSN*)tdbp)->G = G; -#else - ((TDBJSN*)tdbp)->G = g; -#endif + if (Lrecl) { + // Allocate the parse work memory + PGLOBAL G = (PGLOBAL)PlugSubAlloc(g, NULL, sizeof(GLOBAL)); + memset(G, 0, sizeof(GLOBAL)); + G->Sarea_Size = Lrecl * 10; + G->Sarea = PlugSubAlloc(g, NULL, G->Sarea_Size); + PlugSubSet(G, G->Sarea, G->Sarea_Size); + G->jump_level = 0; + ((TDBJSN*)tdbp)->G = G; + } else { + strcpy(g->Message, "LRECL is not defined"); + return NULL; + } // endif Lrecl + } else { if (Zipped) { #if defined(ZIP_SUPPORT) @@ -538,6 +679,7 @@ Limit = tdp->Limit; Pretty = tdp->Pretty; B = tdp->Base ? 1 : 0; + Sep = tdp->Sep; Strict = tdp->Strict; } else { Jmode = MODE_OBJECT; @@ -546,6 +688,7 @@ Limit = 1; Pretty = 0; B = 0; + Sep = '.'; Strict = false; } // endif tdp @@ -575,6 +718,7 @@ SameRow = tdbp->SameRow; Xval = tdbp->Xval; B = tdbp->B; + Sep = tdbp->Sep; Pretty = tdbp->Pretty; Strict = tdbp->Strict; Comma = tdbp->Comma; @@ -657,21 +801,27 @@ PJSON jsp = Row; PJVAL val = NULL; - for (objpath = PlugDup(g, Objname); jsp && objpath; objpath = p) { - if ((p = strchr(objpath, ':'))) - *p++ = 0; - - if (*objpath != '[') { // objpass is a key - val = (jsp->GetType() == TYPE_JOB) ? - jsp->GetObject()->GetValue(objpath) : NULL; - } else if (objpath[strlen(objpath)-1] == ']') { - val = (jsp->GetType() == TYPE_JAR) ? - jsp->GetArray()->GetValue(atoi(objpath+1) - B) : NULL; - } else - val = NULL; + for (objpath = PlugDup(g, Objname); jsp && objpath; objpath = p) { + if ((p = strchr(objpath, Sep))) + *p++ = 0; + + if (*objpath != '[' && !IsNum(objpath)) { // objpass is a key + val = (jsp->GetType() == TYPE_JOB) ? + jsp->GetObject()->GetValue(objpath) : NULL; + } else { + if (*objpath == '[') { + if (objpath[strlen(objpath) - 1] == ']') + objpath++; + else + return NULL; + } // endif [ + + val = (jsp->GetType() == TYPE_JAR) ? + jsp->GetArray()->GetValue(atoi(objpath) - B) : NULL; + } // endif objpath - jsp = (val) ? val->GetJson() : NULL; - } // endfor objpath + jsp = (val) ? val->GetJson() : NULL; + } // endfor objpath return jsp; } // end of FindRow @@ -702,13 +852,16 @@ return true; } // endswitch Jmode - if (Xcol && Txfp->GetAmType() != TYPE_AM_MGO) - To_Filter = NULL; // Imcompatible - } // endif Use - return TDBDOS::OpenDB(g); - } // end of OpenDB + if (TDBDOS::OpenDB(g)) + return true; + + if (Xcol) + To_Filter = NULL; // Imcompatible + + return false; +} // end of OpenDB /***********************************************************************/ /* SkipHeader: Physically skip first header line if applicable. */ @@ -762,10 +915,8 @@ // Deferred reading failed return rc; -#if USE_G // Recover the memory used for parsing PlugSubSet(G, G->Sarea, G->Sarea_Size); -#endif if ((Row = ParseJson(G, To_Line, strlen(To_Line), &Pretty, &Comma))) { Row = FindRow(g); @@ -774,9 +925,7 @@ M = 1; rc = RC_OK; } else if (Pretty != 1 || strcmp(To_Line, "]")) { -#if USE_G strcpy(g->Message, G->Message); -#endif rc = RC_FX; } else rc = RC_EF; @@ -790,63 +939,70 @@ /* Make the top tree from the object path. */ /***********************************************************************/ int TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp) - { - if (Objname) { - if (!Val) { - // Parse and allocate Objname item(s) - char *p; - char *objpath = PlugDup(g, Objname); - int i; - PJOB objp; - PJAR arp; - PJVAL val = NULL; - - Top = NULL; - - for (; objpath; objpath = p) { - if ((p = strchr(objpath, ':'))) - *p++ = 0; - - if (*objpath != '[') { - objp = new(g) JOBJECT; - - if (!Top) - Top = objp; - - if (val) - val->SetValue(objp); - - val = new(g) JVALUE; - objp->SetValue(g, val, objpath); - } else if (objpath[strlen(objpath)-1] == ']') { - arp = new(g) JARRAY; +{ + if (Objname) { + if (!Val) { + // Parse and allocate Objname item(s) + char *p; + char *objpath = PlugDup(g, Objname); + int i; + PJOB objp; + PJAR arp; + PJVAL val = NULL; + + Top = NULL; + + for (; objpath; objpath = p) { + if ((p = strchr(objpath, Sep))) + *p++ = 0; + + if (*objpath != '[' && !IsNum(objpath)) { + objp = new(g) JOBJECT; - if (!Top) - Top = arp; - - if (val) - val->SetValue(arp); - - val = new(g) JVALUE; - i = atoi(objpath+1) - B; - arp->SetValue(g, val, i); - arp->InitArray(g); - } else { - sprintf(g->Message, "Invalid Table path %s", Objname); - return RC_FX; - } // endif objpath - - } // endfor p + if (!Top) + Top = objp; - Val = val; - } // endif Val + if (val) + val->SetValue(objp); - Val->SetValue(jsp); - } else - Top = jsp; + val = new(g) JVALUE; + objp->SetValue(g, val, objpath); + } else { + if (*objpath == '[') { + // Old style + if (objpath[strlen(objpath) - 1] != ']') { + sprintf(g->Message, "Invalid Table path %s", Objname); + return RC_FX; + } else + objpath++; - return RC_OK; - } // end of MakeTopTree + } // endif objpath + + arp = new(g) JARRAY; + + if (!Top) + Top = arp; + + if (val) + val->SetValue(arp); + + val = new(g) JVALUE; + i = atoi(objpath) - B; + arp->SetValue(g, val, i); + arp->InitArray(g); + } // endif objpath + + } // endfor p + + Val = val; + } // endif Val + + Val->SetValue(jsp); + } else + Top = jsp; + + return RC_OK; +} // end of MakeTopTree /***********************************************************************/ /* PrepareWriting: Prepare the line for WriteDB. */ @@ -882,9 +1038,7 @@ { int rc = TDBDOS::WriteDB(g); -#if USE_G PlugSubSet(G, G->Sarea, G->Sarea_Size); -#endif Row->Clear(); return rc; } // end of WriteDB @@ -903,6 +1057,7 @@ MulVal = NULL; Nodes = NULL; Nod = 0; + Sep = Tjp->Sep; Xnod = -1; Xpd = false; Parsed = false; @@ -920,7 +1075,8 @@ MulVal = col1->MulVal; Nodes = col1->Nodes; Nod = col1->Nod; - Xnod = col1->Xnod; + Sep = col1->Sep; + Xnod = col1->Xnod; Xpd = col1->Xpd; Parsed = col1->Parsed; } // end of JSONCOL copy constructor @@ -963,125 +1119,132 @@ /* Analyse array processing options. */ /***********************************************************************/ bool JSONCOL::SetArrayOptions(PGLOBAL g, char *p, int i, PSZ nm) - { - int n = (int)strlen(p); - bool dg = true, b = false; - PJNODE jnp = &Nodes[i]; - - if (*p) { - if (p[--n] == ']') { - p[n--] = 0; - p++; - } else { - // Wrong array specification - sprintf(g->Message, - "Invalid array specification %s for %s", p, Name); - return true; - } // endif p - - } else - b = true; - - // To check whether a numeric Rank was specified - for (int k = 0; dg && p[k]; k++) - dg = isdigit(p[k]) > 0; - - if (!n) { - // Default specifications - if (CheckExpand(g, i, nm, false)) - return true; - else if (jnp->Op != OP_EXP) { - if (b) { - // Return 1st value (B is the index base) - jnp->Rank = Tjp->B; - jnp->Op = OP_EQ; - } else if (!Value->IsTypeNum()) { - jnp->CncVal = AllocateValue(g, (void*)", ", TYPE_STRING); - jnp->Op = OP_CNC; - } else - jnp->Op = OP_ADD; - - } // endif OP - - } else if (dg) { - // Return nth value - jnp->Rank = atoi(p) - Tjp->B; - jnp->Op = OP_EQ; - } else if (n == 1) { - // Set the Op value; - switch (*p) { - case '+': jnp->Op = OP_ADD; break; - case '*': jnp->Op = OP_MULT; break; - case '>': jnp->Op = OP_MAX; break; - case '<': jnp->Op = OP_MIN; break; - case '!': jnp->Op = OP_SEP; break; // Average - case '#': jnp->Op = OP_NUM; break; - case 'x': - case 'X': // Expand this array - if (!Tjp->Xcol && nm) { - Xpd = true; - jnp->Op = OP_EXP; - Tjp->Xval = i; - Tjp->Xcol = nm; - } else if (CheckExpand(g, i, nm, true)) - return true; - - break; - default: - sprintf(g->Message, - "Invalid function specification %c for %s", *p, Name); - return true; - } // endswitch *p - - } else if (*p == '"' && p[n - 1] == '"') { - // This is a concat specification - jnp->Op = OP_CNC; - - if (n > 2) { - // Set concat intermediate string - p[n - 1] = 0; - jnp->CncVal = AllocateValue(g, p + 1, TYPE_STRING); - } // endif n +{ + int n; + bool dg = true, b = false; + PJNODE jnp = &Nodes[i]; + + //if (*p == '[') p++; // Old syntax .[ or :[ + n = (int)strlen(p); + + if (*p) { + if (p[n - 1] == ']') { + p[--n] = 0; + } else if (!IsNum(p)) { + // Wrong array specification + sprintf(g->Message, "Invalid array specification %s for %s", p, Name); + return true; + } // endif p - } else { - sprintf(g->Message, "Wrong array specification for %s", Name); - return true; - } // endif's + } else + b = true; - // For calculated arrays, a local Value must be used - switch (jnp->Op) { - case OP_NUM: - jnp->Valp = AllocateValue(g, TYPE_INT); - break; - case OP_ADD: - case OP_MULT: - case OP_SEP: - if (!IsTypeChar(Buf_Type)) - jnp->Valp = AllocateValue(g, Buf_Type, 0, GetPrecision()); - else - jnp->Valp = AllocateValue(g, TYPE_DOUBLE, 0, 2); + // To check whether a numeric Rank was specified + dg = IsNum(p); - break; - case OP_MIN: - case OP_MAX: - jnp->Valp = AllocateValue(g, Buf_Type, Long, GetPrecision()); - break; - case OP_CNC: - if (IsTypeChar(Buf_Type)) - jnp->Valp = AllocateValue(g, TYPE_STRING, Long, GetPrecision()); - else - jnp->Valp = AllocateValue(g, TYPE_STRING, 512); + if (!n) { + // Default specifications + if (CheckExpand(g, i, nm, false)) + return true; + else if (jnp->Op != OP_EXP) { + if (b) { + // Return 1st value (B is the index base) + jnp->Rank = Tjp->B; + jnp->Op = OP_EQ; + } else if (!Value->IsTypeNum()) { + jnp->CncVal = AllocateValue(g, (void*)", ", TYPE_STRING); + jnp->Op = OP_CNC; + } else + jnp->Op = OP_ADD; + + } // endif OP + + } else if (dg) { + // Return nth value + jnp->Rank = atoi(p) - Tjp->B; + jnp->Op = OP_EQ; + } else if (n == 1) { + // Set the Op value; + if (Sep == ':') + switch (*p) { + case '*': *p = 'x'; break; + case 'x': + case 'X': *p = '*'; break; // Expand this array + default: break; + } // endswitch p + + switch (*p) { + case '+': jnp->Op = OP_ADD; break; + case 'x': jnp->Op = OP_MULT; break; + case '>': jnp->Op = OP_MAX; break; + case '<': jnp->Op = OP_MIN; break; + case '!': jnp->Op = OP_SEP; break; // Average + case '#': jnp->Op = OP_NUM; break; + case '*': // Expand this array + if (!Tjp->Xcol && nm) { + Xpd = true; + jnp->Op = OP_EXP; + Tjp->Xval = i; + Tjp->Xcol = nm; + } else if (CheckExpand(g, i, nm, true)) + return true; + + break; + default: + sprintf(g->Message, + "Invalid function specification %c for %s", *p, Name); + return true; + } // endswitch *p + + } else if (*p == '"' && p[n - 1] == '"') { + // This is a concat specification + jnp->Op = OP_CNC; + + if (n > 2) { + // Set concat intermediate string + p[n - 1] = 0; + jnp->CncVal = AllocateValue(g, p + 1, TYPE_STRING); + } // endif n - break; - default: - break; - } // endswitch Op + } else { + sprintf(g->Message, "Wrong array specification for %s", Name); + return true; + } // endif's + + // For calculated arrays, a local Value must be used + switch (jnp->Op) { + case OP_NUM: + jnp->Valp = AllocateValue(g, TYPE_INT); + break; + case OP_ADD: + case OP_MULT: + case OP_SEP: + if (!IsTypeChar(Buf_Type)) + jnp->Valp = AllocateValue(g, Buf_Type, 0, GetPrecision()); + else + jnp->Valp = AllocateValue(g, TYPE_DOUBLE, 0, 2); + + break; + case OP_MIN: + case OP_MAX: + jnp->Valp = AllocateValue(g, Buf_Type, Long, GetPrecision()); + break; + case OP_CNC: + if (IsTypeChar(Buf_Type)) + jnp->Valp = AllocateValue(g, TYPE_STRING, Long, GetPrecision()); + else + jnp->Valp = AllocateValue(g, TYPE_STRING, 512); + + break; + default: + break; + } // endswitch Op - if (jnp->Valp) - MulVal = AllocateValue(g, jnp->Valp); + if (jnp->Valp) + MulVal = AllocateValue(g, jnp->Valp); - return false; - } // end of SetArrayOptions + return false; +} // end of SetArrayOptions /***********************************************************************/ /* Parse the eventual passed Jpath information. */ @@ -1090,81 +1253,105 @@ /* the node corresponding to that column. */ /***********************************************************************/ bool JSONCOL::ParseJpath(PGLOBAL g) - { - char *p, *p2 = NULL, *pbuf = NULL; - int i; - bool mul = false; - - if (Parsed) - return false; // Already done - else if (InitValue(g)) - return true; - else if (!Jpath) - Jpath = Name; - - if (To_Tdb->GetOrig()) { - // This is an updated column, get nodes from origin - for (PJCOL colp = (PJCOL)Tjp->GetColumns(); colp; - colp = (PJCOL)colp->GetNext()) - if (!stricmp(Name, colp->GetName())) { - Nod = colp->Nod; - Nodes = colp->Nodes; +{ + char *p, *p1 = NULL, *p2 = NULL, *pbuf = NULL; + int i; + bool a, mul = false; + + if (Parsed) + return false; // Already done + else if (InitValue(g)) + return true; + else if (!Jpath) + Jpath = Name; + + if (To_Tdb->GetOrig()) { + // This is an updated column, get nodes from origin + for (PJCOL colp = (PJCOL)Tjp->GetColumns(); colp; + colp = (PJCOL)colp->GetNext()) + if (!stricmp(Name, colp->GetName())) { + Nod = colp->Nod; + Nodes = colp->Nodes; Xpd = colp->Xpd; - goto fin; - } // endif Name - - sprintf(g->Message, "Cannot parse updated column %s", Name); - return true; - } // endif To_Orig - - pbuf = PlugDup(g, Jpath); + goto fin; + } // endif Name - // The Jpath must be analyzed - for (i = 0, p = pbuf; (p = strchr(p, ':')); i++, p++) - Nod++; // One path node found - - Nodes = (PJNODE)PlugSubAlloc(g, NULL, (++Nod) * sizeof(JNODE)); - memset(Nodes, 0, (Nod) * sizeof(JNODE)); - - // Analyze the Jpath for this column - for (i = 0, p = pbuf; i < Nod; i++, p = (p2 ? p2 + 1 : p + strlen(p))) { - if ((p2 = strchr(p, ':'))) - *p2 = 0; - - // Jpath must be explicit - if (*p == 0 || *p == '[') { - // Analyse intermediate array processing - if (SetArrayOptions(g, p, i, Nodes[i-1].Key)) - return true; - - } else if (*p == '*') { - // Return JSON - Nodes[i].Op = OP_XX; - } else { - Nodes[i].Key = p; - Nodes[i].Op = OP_EXIST; - } // endif's - - } // endfor i, p - - fin: - MulVal = AllocateValue(g, Value); - Parsed = true; - return false; - } // end of ParseJpath + sprintf(g->Message, "Cannot parse updated column %s", Name); + return true; + } // endif To_Orig + + pbuf = PlugDup(g, Jpath); + if (*pbuf == '$') pbuf++; + if (*pbuf == Sep) pbuf++; + if (*pbuf == '[') p1 = pbuf++; + + // Estimate the required number of nodes + for (i = 0, p = pbuf; (p = NextChr(p, Sep)); i++, p++) + Nod++; // One path node found + + Nodes = (PJNODE)PlugSubAlloc(g, NULL, (++Nod) * sizeof(JNODE)); + memset(Nodes, 0, (Nod) * sizeof(JNODE)); + + // Analyze the Jpath for this column + for (i = 0, p = pbuf; p && i < Nod; i++, p = (p2 ? p2 : NULL)) { + a = (p1 != NULL); + p1 = strchr(p, '['); + p2 = strchr(p, Sep); + + if (!p2) + p2 = p1; + else if (p1) { + if (p1 < p2) + p2 = p1; + else if (p1 == p2 + 1) + *p2++ = 0; // Old syntax .[ or :[ + else + p1 = NULL; + + } // endif p1 + + if (p2) + *p2++ = 0; + + // Jpath must be explicit + if (a || *p == 0 || *p == '[' || IsNum(p)) { + // Analyse intermediate array processing + if (SetArrayOptions(g, p, i, Nodes[i - 1].Key)) + return true; + + } else if (*p == '*') { + // Return JSON + Nodes[i].Op = OP_XX; + } else { + Nodes[i].Key = p; + Nodes[i].Op = OP_EXIST; + } // endif's + + } // endfor i, p + + Nod = i; + +fin: + MulVal = AllocateValue(g, Value); + Parsed = true; + return false; +} // end of ParseJpath /***********************************************************************/ /* Get Jpath converted to Mongo path. */ /***********************************************************************/ -char *JSONCOL::GetJpath(PGLOBAL g, bool proj) +PSZ JSONCOL::GetJpath(PGLOBAL g, bool proj) { if (Jpath) { char *p1, *p2, *mgopath; int i = 0; - if (strcmp(Jpath, "*")) - mgopath = PlugDup(g, Jpath); - else + if (strcmp(Jpath, "*")) { + p1 = Jpath; + if (*p1 == '$') p1++; + if (*p1 == '.') p1++; + mgopath = PlugDup(g, p1); + } else return NULL; for (p1 = p2 = mgopath; *p1; p1++) @@ -1173,27 +1360,42 @@ if (!proj) *p2++ = *p1; - i = 2; - } else if (*p1 == ']' && i == 2) { - if (proj && *(p1 + 1) == ':') + } else if (*p1 == ']' && i == 1) { + if (proj && p1[1] == '.') p1++; i = 0; - } else if (proj) - i = 2; - else + } else if (*p1 == '.' && i == 2) { + if (!proj) + *p2++ = '.'; + + i = 0; + } else if (!proj) return NULL; } else switch (*p1) { - case ':': *p2++ = '.'; break; - case '[': i = 1; break; + case ':': + case '.': + if (isdigit(p1[1])) + i = 2; + + *p2++ = '.'; + break; + case '[': + if (*(p2 - 1) != '.') + *p2++ = '.'; + + i = 1; + break; case '*': if (*(p2 - 1) == '.' && !*(p1 + 1)) { p2--; // Suppress last :* break; } // endif p2 - default: *p2++ = *p1; break; + default: + *p2++ = *p1; + break; } // endswitch p1; *p2 = 0; @@ -1223,12 +1425,14 @@ void JSONCOL::SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n) { if (val) { + vp->SetNull(false); + switch (val->GetValType()) { case TYPE_STRG: case TYPE_INTG: case TYPE_BINT: case TYPE_DBL: - case TYPE_DATE: + case TYPE_DTM: vp->SetValue_pval(val->GetValue()); break; case TYPE_BOOL: @@ -1377,35 +1581,49 @@ /***********************************************************************/ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n) { - int i, ars, nv = 0, nextsame = Tjp->NextSame; - bool err; + int i, ars, nv = 0, nextsame = Tjp->NextSame; + bool err; OPVAL op = Nodes[n].Op; PVAL val[2], vp = Nodes[n].Valp; PJVAL jvrp, jvp; JVALUE jval; vp->Reset(); - ars = MY_MIN(Tjp->Limit, arp->size()); - - for (i = 0; i < ars; i++) { - jvrp = arp->GetValue(i); + ars = MY_MIN(Tjp->Limit, arp->size()); - do { - if (n < Nod - 1 && jvrp->GetJson()) { + if (trace) + htrc("CalculateArray: size=%d op=%d nextsame=%d\n", + ars, op, nextsame); + + for (i = 0; i < ars; i++) { + jvrp = arp->GetValue(i); + + if (trace) + htrc("i=%d nv=%d\n", i, nv); + + if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) do { + if (jvrp->IsNull()) { + jvrp->Value = AllocateValue(g, GetJsonNull(), TYPE_STRING); + jvp = jvrp; + } else if (n < Nod - 1 && jvrp->GetJson()) { Tjp->NextSame = nextsame; jval.SetValue(GetColumnValue(g, jvrp->GetJson(), n + 1)); jvp = &jval; } else jvp = jvrp; - if (!nv++) { + if (trace) + htrc("jvp=%s null=%d\n", + jvp->GetString(g), jvp->IsNull() ? 1 : 0); + + if (!nv++) { SetJsonValue(g, vp, jvp, n); continue; } else SetJsonValue(g, MulVal, jvp, n); - - if (!MulVal->IsZero()) { - switch (op) { + + if (!MulVal->IsNull()) { + switch (op) { case OP_CNC: if (Nodes[n].CncVal) { val[0] = Nodes[n].CncVal; @@ -1414,7 +1632,7 @@ val[0] = MulVal; err = vp->Compute(g, val, 1, op); - break; + break; // case OP_NUM: case OP_SEP: val[0] = Nodes[n].Valp; @@ -1430,7 +1648,15 @@ if (err) vp->Reset(); - } // endif Zero + if (trace) { + char buf(32); + + htrc("vp='%s' err=%d\n", + vp->GetCharString(&buf), err ? 1 : 0); + + } // endif trace + + } // endif Null } while (Tjp->NextSame > nextsame); @@ -1717,54 +1943,66 @@ if (!jsp && g->Message[0]) return RC_FX; - objpath = PlugDup(g, Objname); + if ((objpath = PlugDup(g, Objname))) { + if (*objpath == '$') objpath++; + if (*objpath == '.') objpath++; + + /*********************************************************************/ + /* Find the table in the tree structure. */ + /*********************************************************************/ + for (; jsp && objpath; objpath = p) { + if ((p = strchr(objpath, Sep))) + *p++ = 0; + + if (*objpath != '[' && !IsNum(objpath)) { + // objpass is a key + if (jsp->GetType() != TYPE_JOB) { + strcpy(g->Message, "Table path does not match the json file"); + return RC_FX; + } // endif Type - /*********************************************************************/ - /* Find the table in the tree structure. */ - /*********************************************************************/ - for (; jsp && objpath; objpath = p) { - if ((p = strchr(objpath, ':'))) - *p++ = 0; - - if (*objpath != '[') { // objpass is a key - if (jsp->GetType() != TYPE_JOB) { - strcpy(g->Message, "Table path does not match the json file"); - return RC_FX; - } // endif Type - - key = objpath; - objp = jsp->GetObject(); - arp = NULL; - val = objp->GetValue(key); - - if (!val || !(jsp = val->GetJson())) { - sprintf(g->Message, "Cannot find object key %s", key); - return RC_FX; - } // endif val - - } else if (objpath[strlen(objpath)-1] == ']') { - if (jsp->GetType() != TYPE_JAR) { - strcpy(g->Message, "Table path does not match the json file"); - return RC_FX; - } // endif Type - - arp = jsp->GetArray(); - objp = NULL; - i = atoi(objpath+1) - B; - val = arp->GetValue(i); - - if (!val) { - sprintf(g->Message, "Cannot find array value %d", i); - return RC_FX; - } // endif val + key = objpath; + objp = jsp->GetObject(); + arp = NULL; + val = objp->GetValue(key); + + if (!val || !(jsp = val->GetJson())) { + sprintf(g->Message, "Cannot find object key %s", key); + return RC_FX; + } // endif val - } else { - sprintf(g->Message, "Invalid Table path %s", Objname); - return RC_FX; - } // endif objpath + } else { + if (*objpath == '[') { + // Old style + if (objpath[strlen(objpath) - 1] != ']') { + sprintf(g->Message, "Invalid Table path %s", Objname); + return RC_FX; + } else + objpath++; + + } // endif objpath + + if (jsp->GetType() != TYPE_JAR) { + strcpy(g->Message, "Table path does not match the json file"); + return RC_FX; + } // endif Type + + arp = jsp->GetArray(); + objp = NULL; + i = atoi(objpath) - B; + val = arp->GetValue(i); + + if (!val) { + sprintf(g->Message, "Cannot find array value %d", i); + return RC_FX; + } // endif val + + } // endif + + jsp = val->GetJson(); + } // endfor objpath - jsp = val->GetJson(); - } // endfor objpath + } // endif objpath if (jsp && jsp->GetType() == TYPE_JAR) Doc = jsp->GetArray(); @@ -2047,7 +2285,8 @@ TDBJCL::TDBJCL(PJDEF tdp) : TDBCAT(tdp) { Topt = tdp->GetTopt(); - Db = (char*)tdp->GetDB(); + Db = tdp->Schema; + Dsn = tdp->Uri; } // end of TDBJCL constructor /***********************************************************************/ @@ -2055,7 +2294,7 @@ /***********************************************************************/ PQRYRES TDBJCL::GetResult(PGLOBAL g) { - return JSONColumns(g, Db, Topt, false); + return JSONColumns(g, Db, Dsn, Topt, false); } // end of GetResult /* --------------------------- End of json --------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabjson.h mariadb-10.1-10.1.30/storage/connect/tabjson.h --- mariadb-10.1-10.1.25/storage/connect/tabjson.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabjson.h 2017-12-21 15:48:50.000000000 +0000 @@ -36,7 +36,13 @@ friend class TDBJSON; friend class TDBJSN; friend class TDBJCL; - friend PQRYRES JSONColumns(PGLOBAL, char*, PTOS, bool); +#if defined(CMGO_SUPPORT) + friend class CMGFAM; +#endif // CMGO_SUPPORT +#if defined(JAVA_SUPPORT) + friend class JMGFAM; +#endif // JAVA_SUPPORT + friend PQRYRES JSONColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); public: // Constructor JSONDEF(void); @@ -58,6 +64,15 @@ int Level; /* Used for catalog table */ int Base; /* The array index base */ bool Strict; /* Strict syntax checking */ + char Sep; /* The Jpath separator */ + const char *Uri; /* MongoDB connection URI */ + PCSZ Collname; /* External collection name */ + PSZ Options; /* Colist ; Pipe */ + PSZ Filter; /* Filter */ + PSZ Driver; /* MongoDB Driver (C or JAVA) */ + bool Pipe; /* True if Colist is a pipeline */ + int Version; /* Driver version */ + PSZ Wrapname; /* MongoDB java wrapper name */ }; // end of JSONDEF /* -------------------------- TDBJSN class --------------------------- */ @@ -69,6 +84,12 @@ class DllExport TDBJSN : public TDBDOS { friend class JSONCOL; friend class JSONDEF; +#if defined(CMGO_SUPPORT) + friend class CMGFAM; +#endif // CMGO_SUPPORT +#if defined(JAVA_SUPPORT) + friend class JMGFAM; +#endif // JAVA_SUPPORT public: // Constructor TDBJSN(PJDEF tdp, PTXF txfp); @@ -120,6 +141,7 @@ int SameRow; // Same row nb int Xval; // Index of expandable array int B; // Array index base + char Sep; // The Jpath separator bool Strict; // Strict syntax checking bool Comma; // Row has final comma }; // end of class TDBJSN @@ -132,8 +154,13 @@ class DllExport JSONCOL : public DOSCOL { friend class TDBJSN; friend class TDBJSON; - friend class MGOFAM; - public: +#if defined(CMGO_SUPPORT) + friend class CMGFAM; +#endif // CMGO_SUPPORT +#if defined(JAVA_SUPPORT) + friend class JMGFAM; +#endif // JAVA_SUPPORT +public: // Constructors JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i); JSONCOL(JSONCOL *colp, PTDB tdbp); // Constructor used in copy process @@ -144,7 +171,7 @@ // Methods virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); bool ParseJpath(PGLOBAL g); - char *GetJpath(PGLOBAL g, bool proj); + virtual PSZ GetJpath(PGLOBAL g, bool proj); virtual void ReadColumn(PGLOBAL g); virtual void WriteColumn(PGLOBAL g); @@ -169,7 +196,8 @@ JNODE *Nodes; // The intermediate objects int Nod; // The number of intermediate objects int Xnod; // Index of multiple values - bool Xpd; // True for expandable column + char Sep; // The Jpath separator + bool Xpd; // True for expandable column bool Parsed; // True when parsed }; // end of class JSONCOL @@ -235,7 +263,7 @@ virtual PQRYRES GetResult(PGLOBAL g); // Members - PTOS Topt; - char *Db; - char *Dsn; + PTOS Topt; + PCSZ Db; + PCSZ Dsn; }; // end of class TDBJCL diff -Nru mariadb-10.1-10.1.25/storage/connect/table.cpp mariadb-10.1-10.1.30/storage/connect/table.cpp --- mariadb-10.1-10.1.25/storage/connect/table.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/table.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -319,12 +319,12 @@ } /* endfor tp */ - } // end of Print + } // end of Printf void TDB::Prints(PGLOBAL, char *ps, uint) { sprintf(ps, "R%d.%s", Tdb_No, Name); - } // end of Print + } // end of Prints /* -------------------------- class TDBASE --------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabmul.cpp mariadb-10.1-10.1.30/storage/connect/tabmul.cpp --- mariadb-10.1-10.1.25/storage/connect/tabmul.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabmul.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -203,12 +203,12 @@ // Data files can be imported from Windows (having CRLF) if (*p == '\n' || *p == '\r') { // is this enough for Unix ??? - *p--; // Eliminate ending CR or LF character + p--; // Eliminate ending CR or LF character if (p >= filename) // is this enough for Unix ??? if (*p == '\n' || *p == '\r') - *p--; // Eliminate ending CR or LF character + p--; // Eliminate ending CR or LF character } // endif p diff -Nru mariadb-10.1-10.1.25/storage/connect/tabmysql.cpp mariadb-10.1-10.1.30/storage/connect/tabmysql.cpp --- mariadb-10.1-10.1.25/storage/connect/tabmysql.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabmysql.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -513,18 +513,8 @@ if (Query) return false; // already done - if (Srcdef) { - if (strstr(Srcdef, "%s")) { - char *fil; - - fil = (To_CondFil) ? To_CondFil->Body : PlugDup(g, "1=1"); - Query = new(g)STRING(g, strlen(Srcdef) + strlen(fil)); - Query->SetLength(sprintf(Query->GetStr(), Srcdef, fil)); - } else - Query = new(g)STRING(g, 0, Srcdef); - - return false; - } // endif Srcdef + if (Srcdef) + return MakeSrcdef(g); // Allocate the string used to contain Query Query = new(g) STRING(g, 1023, "SELECT "); @@ -1270,7 +1260,8 @@ : COLBLK(NULL, tdbp, i) { const char *chset = get_charset_name(fld->charsetnr); - char v = (!strcmp(chset, "binary")) ? 'B' : 0; +//char v = (!strcmp(chset, "binary")) ? 'B' : 0; + char v = 0; Name = fld->name; Opt = 0; diff -Nru mariadb-10.1-10.1.25/storage/connect/tabmysql.h mariadb-10.1-10.1.30/storage/connect/tabmysql.h --- mariadb-10.1-10.1.25/storage/connect/tabmysql.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabmysql.h 2017-12-21 15:48:50.000000000 +0000 @@ -69,6 +69,7 @@ /***********************************************************************/ class TDBMYSQL : public TDBEXT { friend class MYSQLCOL; + friend class TDBTBM; public: // Constructor TDBMYSQL(PMYDEF tdp); @@ -134,7 +135,7 @@ int m_Rc; // Return code from command //int AftRows; // The number of affected rows int N; // The current table index - int Port; // MySQL port number (0 = default) + unsigned Port; // MySQL port number (0 = default) //int Nparm; // The number of statement parameters //int Quoted; // The identifier quoting level }; // end of class TDBMYSQL diff -Nru mariadb-10.1-10.1.25/storage/connect/tabodbc.cpp mariadb-10.1-10.1.30/storage/connect/tabodbc.cpp --- mariadb-10.1-10.1.25/storage/connect/tabodbc.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabodbc.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -273,7 +273,7 @@ /***********************************************************************/ /* Set DBQ and get the new file name into the connect string. */ /***********************************************************************/ -void TDBODBC::SetFile(PGLOBAL g, PSZ fn) +void TDBODBC::SetFile(PGLOBAL g, PCSZ fn) { if (MulConn) { int n = strlen(MulConn) + strlen(fn) - 1; @@ -289,7 +289,7 @@ sprintf(Connect, MulConn, fn); } // endif MultConn - DBQ = fn; + DBQ = (PSZ)fn; } // end of SetFile /***********************************************************************/ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabodbc.h mariadb-10.1-10.1.30/storage/connect/tabodbc.h --- mariadb-10.1-10.1.25/storage/connect/tabodbc.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabodbc.h 2017-12-21 15:48:50.000000000 +0000 @@ -71,7 +71,7 @@ virtual PTDB Clone(PTABS t); virtual bool SetRecpos(PGLOBAL g, int recpos); virtual PCSZ GetFile(PGLOBAL g); - virtual void SetFile(PGLOBAL g, PSZ fn); + virtual void SetFile(PGLOBAL g, PCSZ fn); virtual void ResetSize(void); virtual PCSZ GetServer(void) {return "ODBC";} virtual int Indexable(void) {return 2;} @@ -187,7 +187,6 @@ // Methods virtual void ReadColumn(PGLOBAL g); virtual void WriteColumn(PGLOBAL g); -// void Printf(PGLOBAL g, FILE *, uint); protected: // Members diff -Nru mariadb-10.1-10.1.25/storage/connect/tabtbl.cpp mariadb-10.1-10.1.30/storage/connect/tabtbl.cpp --- mariadb-10.1-10.1.25/storage/connect/tabtbl.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabtbl.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -84,6 +84,8 @@ #define SYSEXIT void * #endif // !__WIN__ +extern pthread_mutex_t tblmut; + /* ---------------------------- Class TBLDEF ---------------------------- */ /**************************************************************************/ @@ -575,9 +577,20 @@ // Try to open the connection if (!cmp->Tap->GetTo_Tdb()->OpenDB(cmp->G)) { - cmp->Ready = true; - } else - cmp->Rc = RC_FX; + pthread_mutex_lock(&tblmut); + if (trace) + htrc("Table %s ready\n", cmp->Tap->GetName()); + + cmp->Ready = true; + pthread_mutex_unlock(&tblmut); + } else { + pthread_mutex_lock(&tblmut); + if (trace) + htrc("Opening %s failed\n", cmp->Tap->GetName()); + + cmp->Rc = RC_FX; + pthread_mutex_unlock(&tblmut); + } // endif OpenDB my_thread_end(); } else @@ -629,6 +642,18 @@ } // end of RowNumber /***********************************************************************/ +/* Returns true if this MYSQL table refers to a local table. */ +/***********************************************************************/ +bool TDBTBM::IsLocal(PTABLE tbp) +{ + TDBMYSQL *tdbp = (TDBMYSQL*)tbp->GetTo_Tdb(); + + return ((!stricmp(tdbp->Host, "localhost") || + !strcmp(tdbp->Host, "127.0.0.1")) && + tdbp->Port == (int)GetDefaultPort()); +} // end of IsLocal + +/***********************************************************************/ /* Initialyze table parallel processing. */ /***********************************************************************/ bool TDBTBM::OpenTables(PGLOBAL g) @@ -640,14 +665,18 @@ // Allocates the TBMT blocks for the tables for (tabp = Tablist; tabp; tabp = tabp->Next) - if (tabp->GetTo_Tdb()->GetAmType() == TYPE_AM_MYSQL) { + if (tabp->GetTo_Tdb()->GetAmType() == TYPE_AM_MYSQL && !IsLocal(tabp)) { // Remove remote table from the local list *ptabp = tabp->Next; + if (trace) + htrc("=====> New remote table %s\n", tabp->GetName()); + // Make the remote table block tp = (PTBMT)PlugSubAlloc(g, NULL, sizeof(TBMT)); memset(tp, 0, sizeof(TBMT)); tp->G = g; + tp->Ready = false; tp->Tap = tabp; tp->Thd = thd; @@ -666,7 +695,10 @@ ptp = &tp->Next; Nrc++; // Number of remote connections } else { - ptabp = &tabp->Next; + if (trace) + htrc("=====> Local table %s\n", tabp->GetName()); + + ptabp = &tabp->Next; Nlc++; // Number of local connections } // endif Type @@ -783,7 +815,7 @@ /***********************************************************************/ int TDBTBM::ReadNextRemote(PGLOBAL g) { - bool b = false; + bool b; if (Tdbp) Tdbp->CloseDB(g); @@ -791,14 +823,24 @@ Cmp = NULL; retry: - // Search for a remote table having its result set - for (PTBMT tp = Tmp; tp; tp = tp->Next) - if (tp->Ready) { - if (!tp->Complete) - Cmp = tp; + b = false; + + // Search for a remote table having its result set + pthread_mutex_lock(&tblmut); + for (PTBMT tp = Tmp; tp; tp = tp->Next) + if (tp->Rc != RC_FX) { + if (tp->Ready) { + if (!tp->Complete) { + Cmp = tp; + break; + } // endif Complete + + } else + b = true; + + } // endif Rc - } else - b = true; + pthread_mutex_unlock(&tblmut); if (!Cmp) { if (b) { // more result to come diff -Nru mariadb-10.1-10.1.25/storage/connect/tabtbl.h mariadb-10.1-10.1.30/storage/connect/tabtbl.h --- mariadb-10.1-10.1.25/storage/connect/tabtbl.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabtbl.h 2017-12-21 15:48:50.000000000 +0000 @@ -146,6 +146,7 @@ protected: // Internal functions + bool IsLocal(PTABLE tbp); bool OpenTables(PGLOBAL g); int ReadNextRemote(PGLOBAL g); diff -Nru mariadb-10.1-10.1.25/storage/connect/tabutil.cpp mariadb-10.1-10.1.30/storage/connect/tabutil.cpp --- mariadb-10.1-10.1.25/storage/connect/tabutil.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabutil.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -120,7 +120,7 @@ FLD_REM, FLD_NO, FLD_CHARSET}; unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 32, 32}; PCSZ fmt; - char *pn, *tn, *fld, *colname, *chset, v; + char *pn, *tn, *fld, *colname, v; // *chset int i, n, ncol = sizeof(buftyp) / sizeof(int); int prec, len, type, scale; int zconv = GetConvSize(); @@ -185,8 +185,9 @@ colname = (char *)fp->field_name; crp->Kdata->SetValue(colname, i); - chset = (char *)fp->charset()->name; - v = (!strcmp(chset, "binary")) ? 'B' : 0; +// chset = (char *)fp->charset()->name; +// v = (!strcmp(chset, "binary")) ? 'B' : 0; + v = 0; if ((type = MYSQLtoPLG(fp->type(), &v)) == TYPE_ERROR) { if (v == 'K') { diff -Nru mariadb-10.1-10.1.25/storage/connect/tabvir.cpp mariadb-10.1-10.1.30/storage/connect/tabvir.cpp --- mariadb-10.1-10.1.25/storage/connect/tabvir.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabvir.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -289,7 +289,7 @@ { // This should never be called sprintf(g->Message, "ReadColumn: Column %s is not virtual", Name); - throw TYPE_COLBLK; + throw (int)TYPE_COLBLK; } // end of ReadColumn /* ---------------------------TDBVICL class -------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/tabxml.cpp mariadb-10.1-10.1.30/storage/connect/tabxml.cpp --- mariadb-10.1-10.1.25/storage/connect/tabxml.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabxml.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -1319,7 +1319,7 @@ Docp->CloseDoc(g, To_Xb); // This causes a crash in Diagnostics_area::set_error_status -// throw TYPE_AM_XML; +// throw (int)TYPE_AM_XML; } // endif DumpDoc } // endif Changed @@ -1642,7 +1642,7 @@ if (ValNode->GetType() != XML_ELEMENT_NODE && ValNode->GetType() != XML_ATTRIBUTE_NODE) { sprintf(g->Message, MSG(BAD_VALNODE), ValNode->GetType(), Name); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endif type // Get the Xname value from the XML file @@ -1653,7 +1653,7 @@ PushWarning(g, Tdbp); break; default: - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endswitch Value->SetValue_psz(Valbuf); @@ -1704,7 +1704,7 @@ /* For columns having an Xpath, the Clist must be updated. */ /*********************************************************************/ if (Tdbp->CheckRow(g, Nod || Tdbp->Colname)) - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; /*********************************************************************/ /* Null values are represented by no node. */ @@ -1776,7 +1776,7 @@ if (ColNode == NULL) { strcpy(g->Message, MSG(COL_ALLOC_ERR)); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endif ColNode } // endif ColNode @@ -1795,7 +1795,7 @@ if (ValNode == NULL && AttNode == NULL) { strcpy(g->Message, MSG(VAL_ALLOC_ERR)); - longjmp(g->jumper[g->jump_level], TYPE_AM_XML); + throw (int)TYPE_AM_XML; } // endif ValNode /*********************************************************************/ @@ -1805,7 +1805,7 @@ if (strlen(p) > (unsigned)Long) { sprintf(g->Message, MSG(VALUE_TOO_LONG), p, Name, Long); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } else strcpy(Valbuf, p); @@ -1855,7 +1855,7 @@ if (ValNode->GetType() != XML_ELEMENT_NODE && ValNode->GetType() != XML_ATTRIBUTE_NODE) { sprintf(g->Message, MSG(BAD_VALNODE), ValNode->GetType(), Name); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endif type // Get the Xname value from the XML file @@ -1866,7 +1866,7 @@ PushWarning(g, Tdbp); break; default: - longjmp(g->jumper[g->jump_level], TYPE_AM_XML); + throw (int)TYPE_AM_XML; } // endswitch if (!b) { @@ -1941,7 +1941,7 @@ /* For columns having an Xpath, the Clist must be updated. */ /*********************************************************************/ if (Tdbp->CheckRow(g, Nod)) - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; /*********************************************************************/ /* Find the column and value nodes to update or insert. */ @@ -1990,7 +1990,7 @@ if (len > 1 && !Tdbp->Xpand) { sprintf(g->Message, MSG(BAD_VAL_UPDATE), Name); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } else ValNode = Nlx->GetItem(g, Tdbp->Nsub, Vxnp); @@ -2032,7 +2032,7 @@ if (ColNode == NULL) { strcpy(g->Message, MSG(COL_ALLOC_ERR)); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endif ColNode } // endif ColNode @@ -2051,8 +2051,8 @@ if (ValNode == NULL && AttNode == NULL) { strcpy(g->Message, MSG(VAL_ALLOC_ERR)); - longjmp(g->jumper[g->jump_level], TYPE_AM_XML); - } // endif ValNode + throw (int)TYPE_AM_XML; + } // endif ValNode /*********************************************************************/ /* Get the string representation of Value according to column type. */ @@ -2061,7 +2061,7 @@ if (strlen(p) > (unsigned)Long) { sprintf(g->Message, MSG(VALUE_TOO_LONG), p, Name, Long); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } else strcpy(Valbuf, p); @@ -2093,7 +2093,7 @@ if (Tdbp->Clist == NULL) { strcpy(g->Message, MSG(MIS_TAG_LIST)); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endif Clist if ((ValNode = Tdbp->Clist->GetItem(g, Rank, Vxnp))) { @@ -2105,7 +2105,7 @@ PushWarning(g, Tdbp); break; default: - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endswitch Value->SetValue_psz(Valbuf); @@ -2156,14 +2156,14 @@ /* For all columns the Clist must be updated. */ /*********************************************************************/ if (Tdbp->CheckRow(g, true)) - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; /*********************************************************************/ /* Find the column and value nodes to update or insert. */ /*********************************************************************/ if (Tdbp->Clist == NULL) { strcpy(g->Message, MSG(MIS_TAG_LIST)); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } // endif Clist n = Tdbp->Clist->GetLength(); @@ -2188,7 +2188,7 @@ if (strlen(p) > (unsigned)Long) { sprintf(g->Message, MSG(VALUE_TOO_LONG), p, Name, Long); - throw TYPE_AM_XML; + throw (int)TYPE_AM_XML; } else strcpy(Valbuf, p); diff -Nru mariadb-10.1-10.1.25/storage/connect/tabxml.h mariadb-10.1-10.1.30/storage/connect/tabxml.h --- mariadb-10.1-10.1.25/storage/connect/tabxml.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/tabxml.h 2017-12-21 15:48:50.000000000 +0000 @@ -53,6 +53,8 @@ }; // end of XMLDEF #if defined(INCLUDE_TDBXML) +#include "m_ctype.h" + /***********************************************************************/ /* This is the class declaration for the simple XML tables. */ /***********************************************************************/ diff -Nru mariadb-10.1-10.1.25/storage/connect/user_connect.cc mariadb-10.1-10.1.30/storage/connect/user_connect.cc --- mariadb-10.1-10.1.25/storage/connect/user_connect.cc 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/user_connect.cc 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) Olivier Bertrand 2004 - 2015 +/* Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ that is a connection with its personnal memory allocation. @note - + Author Olivier Bertrand */ /****************************************************************************/ @@ -47,6 +47,8 @@ #include "user_connect.h" #include "mycat.h" +extern pthread_mutex_t usrmut; + /****************************************************************************/ /* Initialize the user_connect static member. */ /****************************************************************************/ @@ -111,7 +113,10 @@ int rc= PlugExit(g); g= NULL; - free(dup); + + if (dup) + free(dup); + return true; } // endif g-> @@ -122,14 +127,18 @@ strcpy(ap->Ap_Name, "CONNECT"); g->Activityp= ap; g->Activityp->Aptr= dup; + + pthread_mutex_lock(&usrmut); next= to_users; to_users= this; if (next) next->previous= this; - last_query_id= thdp->query_id; - count= 1; + count = 1; + pthread_mutex_unlock(&usrmut); + + last_query_id= thdp->query_id; return false; } // end of user_init @@ -144,18 +153,25 @@ /****************************************************************************/ /* Check whether we begin a new query and if so cleanup the previous one. */ /****************************************************************************/ -bool user_connect::CheckCleanup(void) +bool user_connect::CheckCleanup(bool force) { - if (thdp->query_id > last_query_id) { + if (thdp->query_id > last_query_id || force) { uint worksize= GetWorkSize(); PlugCleanup(g, true); if (g->Sarea_Size != worksize) { - if (g->Sarea) - free(g->Sarea); + if (g->Sarea) { +#if !defined(DEVELOPMENT) + if (trace) +#endif + htrc("CheckCleanup: Free Sarea at %p size=%d\n", + g->Sarea, g->Sarea_Size); + + free(g->Sarea); + } // endif Size - // Check whether the work area size was changed + // Check whether the work area could be allocated if (!(g->Sarea = PlugAllocMem(g, worksize))) { g->Sarea = PlugAllocMem(g, g->Sarea_Size); SetWorkSize(g->Sarea_Size); // Was too big @@ -171,7 +187,7 @@ g->Mrr = 0; last_query_id= thdp->query_id; - if (trace) + if (trace && !force) printf("=====> Begin new query %llu\n", last_query_id); return true; diff -Nru mariadb-10.1-10.1.25/storage/connect/user_connect.h mariadb-10.1-10.1.30/storage/connect/user_connect.h --- mariadb-10.1-10.1.25/storage/connect/user_connect.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/user_connect.h 2017-12-21 15:48:50.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) Olivier Bertrand 2004 - 2011 +/* Copyright (C) MariaDB Corporation Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ Declaration of the user_connect class. @note + Author Olivier Bertrand @see /sql/handler.h and /storage/connect/user_connect.cc @@ -53,7 +54,7 @@ // Implementation bool user_init(); void SetHandler(ha_connect *hc); - bool CheckCleanup(void); + bool CheckCleanup(bool force = false); bool CheckQueryID(void) {return thdp->query_id > last_query_id;} bool CheckQuery(query_id_t vid) {return last_query_id > vid;} diff -Nru mariadb-10.1-10.1.25/storage/connect/valblk.cpp mariadb-10.1-10.1.30/storage/connect/valblk.cpp --- mariadb-10.1-10.1.25/storage/connect/valblk.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/valblk.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -59,11 +59,12 @@ switch (type) { case TYPE_STRING: + case TYPE_BIN: case TYPE_DECIM: if (len) - blkp = new(g) CHRBLK(mp, nval, len, prec, blank); + blkp = new(g) CHRBLK(mp, nval, type, len, prec, blank); else - blkp = new(g) STRBLK(g, mp, nval); + blkp = new(g) STRBLK(g, mp, nval, type); break; case TYPE_SHORT: @@ -615,8 +616,8 @@ /***********************************************************************/ /* Constructor. */ /***********************************************************************/ -CHRBLK::CHRBLK(void *mp, int nval, int len, int prec, bool blank) - : VALBLK(mp, TYPE_STRING, nval), Chrp((char*&)Blkp) +CHRBLK::CHRBLK(void *mp, int nval, int type, int len, int prec, bool blank) + : VALBLK(mp, type, nval), Chrp((char*&)Blkp) { Valp = NULL; Blanks = blank; @@ -1008,8 +1009,8 @@ /***********************************************************************/ /* Constructor. */ /***********************************************************************/ -STRBLK::STRBLK(PGLOBAL g, void *mp, int nval) - : VALBLK(mp, TYPE_STRING, nval), Strp((PSZ*&)Blkp) +STRBLK::STRBLK(PGLOBAL g, void *mp, int nval, int type) + : VALBLK(mp, type, nval), Strp((PSZ*&)Blkp) { Global = g; Nullable = true; diff -Nru mariadb-10.1-10.1.25/storage/connect/valblk.h mariadb-10.1-10.1.30/storage/connect/valblk.h --- mariadb-10.1-10.1.25/storage/connect/valblk.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/valblk.h 2017-12-21 15:48:50.000000000 +0000 @@ -40,7 +40,7 @@ // Methods void *GetMemp(void) {return Mblk.Memp;} PVBLK Allocate(PGLOBAL g, int type, int len, int prec, - int n, bool sub = FALSE); + int n, bool sub = false); bool ReAllocate(PGLOBAL g, int n); void Free(void); @@ -214,7 +214,7 @@ class CHRBLK : public VALBLK { public: // Constructors - CHRBLK(void *mp, int size, int len, int prec, bool b); + CHRBLK(void *mp, int size, int type, int len, int prec, bool b); // Implementation virtual bool Init(PGLOBAL g, bool check); @@ -267,7 +267,7 @@ class STRBLK : public VALBLK { public: // Constructors - STRBLK(PGLOBAL g, void *mp, int size); + STRBLK(PGLOBAL g, void *mp, int size, int type); // Implementation virtual void SetNull(int n, bool b) {if (b) {Strp[n] = NULL;}} @@ -345,7 +345,7 @@ bool, bool, bool); protected: // Constructors - PTRBLK(PGLOBAL g, void *mp, int size) : STRBLK(g, mp, size) {} + PTRBLK(PGLOBAL g, void *mp, int size) : STRBLK(g, mp, size, TYPE_PCHAR) {} // Implementation diff -Nru mariadb-10.1-10.1.25/storage/connect/value.cpp mariadb-10.1-10.1.30/storage/connect/value.cpp --- mariadb-10.1-10.1.25/storage/connect/value.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/value.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -118,7 +118,8 @@ maxval++; if (minus) *minus = true; } // endif Unsigned - /* fall through */ + + // Fall through case '+': p++; break; @@ -175,7 +176,7 @@ case TYPE_DOUBLE: len = sizeof(double); break; case TYPE_TINY: len = sizeof(char); break; case TYPE_PCHAR: len = sizeof(char*); break; - default: len = 0; + default: len = -1; } // endswitch type return len; @@ -235,6 +236,7 @@ switch (type) { case TYPE_STRING: case TYPE_DECIM: + case TYPE_BIN: return true; } // endswitch type @@ -571,9 +573,9 @@ if (Null) fprintf(f, "%s\n", m); else - fprintf(f, "%s%s%s", GetCharString(buf), "\n", m); + fprintf(f, "%s%s\n", m, GetCharString(buf)); -} /* end of Print */ +} /* end of Printf */ /***********************************************************************/ /* Make string output of an object value. */ @@ -588,7 +590,7 @@ p = GetCharString(buf); strncpy(ps, p, z); -} // end of Print +} // end of Prints /* -------------------------- Class TYPVAL ---------------------------- */ @@ -664,7 +666,7 @@ if (chktype && Type != valp->GetType()) return true; - if (!(Null = valp->IsNull() && Nullable)) + if (!(Null = (valp->IsNull() && Nullable))) Tval = GetTypedValue(valp); else Reset(); @@ -1349,7 +1351,7 @@ char buf[64]; - if (!(Null = valp->IsNull() && Nullable)) + if (!(Null = (valp->IsNull() && Nullable))) strncpy(Strp, valp->GetCharString(buf), Len); else Reset(); @@ -1368,11 +1370,11 @@ if (!cp || n == 0) { Reset(); - Null = Nullable; + Null = (cp) ? false : Nullable; } else if (cp != Strp) { const char *p = cp + n - 1; - for (p; p >= cp; p--, n--) + for (; p >= cp; p--, n--) if (*p && *p != ' ') break; @@ -1451,7 +1453,7 @@ if (k > Len) { sprintf(g->Message, MSG(VALSTR_TOO_LONG), buf, Len); - longjmp(g->jumper[g->jump_level], 138); + throw 138; } else SetValue_psz(buf); @@ -1505,7 +1507,7 @@ if (k > Len) { sprintf(g->Message, MSG(VALSTR_TOO_LONG), buf, Len); - longjmp(g->jumper[g->jump_level], 138); + throw 138; } else SetValue_psz(buf); @@ -1654,34 +1656,48 @@ char *p[2], val[2][32]; int i; - for (i = 0; i < np; i++) - p[i] = vp[i]->GetCharString(val[i]); + if (trace) + htrc("Compute: np=%d op=%d\n", np, op); - switch (op) { - case OP_CNC: - assert(np == 1 || np == 2); + for (i = 0; i < np; i++) + if (!vp[i]->IsNull()) { + p[i] = vp[i]->GetCharString(val[i]); + + if (trace) + htrc("p[%d]=%s\n", i, p[i]); + + } else + return false; - if (np == 2) + switch (op) { + case OP_CNC: + assert(np == 1 || np == 2); + + if (np == 2) SetValue_psz(p[0]); - if ((i = Len - (signed)strlen(Strp)) > 0) - strncat(Strp, p[np - 1], i); + if ((i = Len - (signed)strlen(Strp)) > 0) + strncat(Strp, p[np - 1], i); - break; - case OP_MIN: - assert(np == 2); + if (trace) + htrc("Strp=%s\n", Strp); + + break; + case OP_MIN: + assert(np == 2); SetValue_psz((strcmp(p[0], p[1]) < 0) ? p[0] : p[1]); - break; - case OP_MAX: - assert(np == 2); + break; + case OP_MAX: + assert(np == 2); SetValue_psz((strcmp(p[0], p[1]) > 0) ? p[0] : p[1]); - break; - default: -// sprintf(g->Message, MSG(BAD_EXP_OPER), op); - strcpy(g->Message, "Function not supported"); - return true; - } // endswitch op + break; + default: + // sprintf(g->Message, MSG(BAD_EXP_OPER), op); + strcpy(g->Message, "Function not supported"); + return true; + } // endswitch op + Null = false; return false; } // end of Compute @@ -1719,7 +1735,7 @@ else strcat(strncat(strncpy(ps, "\"", z), Strp, z-2), "\""); -} // end of Print +} // end of Prints /* -------------------------- Class DECIMAL -------------------------- */ @@ -1852,8 +1868,9 @@ BINVAL::BINVAL(PGLOBAL g, void *p, int cl, int n) : VALUE(TYPE_BIN) { assert(g); - Len = n; - Clen = cl; +//Len = n; + Len = (g) ? n : (p) ? strlen((char*)p) : 0; + Clen = cl; Binp = PlugSubAlloc(g, NULL, Clen + 1); memset(Binp, 0, Clen + 1); @@ -1986,10 +2003,15 @@ return true; if (!(Null = valp->IsNull() && Nullable)) { - if ((rc = (Len = valp->GetSize()) > Clen)) + int len = Len; + + if ((rc = (Len = valp->GetSize()) > Clen)) Len = Clen; + else if (len > Len) + memset(Binp, 0, len); memcpy(Binp, valp->GetTo_Val(), Len); + ((char*)Binp)[Len] = 0; } else Reset(); @@ -2006,10 +2028,15 @@ bool rc; if (p && n > 0) { - rc = n > Clen; - Len = MY_MIN(n, Clen); - memcpy(Binp, p, Len); - Null = false; + int len = Len; + + if (len > (Len = MY_MIN(n, Clen))) + memset(Binp, 0, len); + + memcpy(Binp, p, Len); + ((char*)Binp)[Len] = 0; + rc = n > Clen; + Null = false; } else { rc = false; Reset(); @@ -2025,9 +2052,14 @@ void BINVAL::SetValue_psz(PCSZ s) { if (s) { - Len = MY_MIN(Clen, (signed)strlen(s)); - memcpy(Binp, s, Len); - Null = false; + int len = Len; + + if (len > (Len = MY_MIN(Clen, (signed)strlen(s)))) + memset(Binp, 0, len); + + memcpy(Binp, s, Len); + ((char*)Binp)[Len] = 0; + Null = false; } else { Reset(); Null = Nullable; @@ -2047,14 +2079,19 @@ Reset(); Null = Nullable; } else if (vp != Binp) { + int len = Len; + if (blk->GetType() == TYPE_STRING) Len = strlen((char*)vp); else Len = blk->GetVlen(); - Len = MY_MIN(Clen, Len); + if (len > (Len = MY_MIN(Clen, Len))) + memset(Binp, 0, len); + memcpy(Binp, vp, Len); - Null = false; + ((char*)Binp)[Len] = 0; + Null = false; } // endif vp } // end of SetValue_pvblk @@ -2065,7 +2102,10 @@ void BINVAL::SetValue(int n) { if (Clen >= 4) { - *((int*)Binp) = n; + if (Len > 4) + memset(Binp, 0, Len); + + *((int*)Binp) = n; Len = 4; } else SetValue((short)n); @@ -2078,7 +2118,10 @@ void BINVAL::SetValue(uint n) { if (Clen >= 4) { - *((uint*)Binp) = n; + if (Len > 4) + memset(Binp, 0, Len); + + *((uint*)Binp) = n; Len = 4; } else SetValue((ushort)n); @@ -2091,7 +2134,10 @@ void BINVAL::SetValue(short i) { if (Clen >= 2) { - *((int*)Binp) = i; + if (Len > 2) + memset(Binp, 0, Len); + + *((int*)Binp) = i; Len = 2; } else SetValue((char)i); @@ -2104,7 +2150,10 @@ void BINVAL::SetValue(ushort i) { if (Clen >= 2) { - *((uint*)Binp) = i; + if (Len > 2) + memset(Binp, 0, Len); + + *((uint*)Binp) = i; Len = 2; } else SetValue((uchar)i); @@ -2117,7 +2166,10 @@ void BINVAL::SetValue(longlong n) { if (Clen >= 8) { - *((longlong*)Binp) = n; + if (Len > 8) + memset(Binp, 0, Len); + + *((longlong*)Binp) = n; Len = 8; } else SetValue((int)n); @@ -2130,7 +2182,10 @@ void BINVAL::SetValue(ulonglong n) { if (Clen >= 8) { - *((ulonglong*)Binp) = n; + if (Len > 8) + memset(Binp, 0, Len); + + *((ulonglong*)Binp) = n; Len = 8; } else SetValue((uint)n); @@ -2141,6 +2196,9 @@ /***********************************************************************/ void BINVAL::SetValue(double n) { + if (Len > 8) + memset(Binp, 0, Len); + if (Clen >= 8) { *((double*)Binp) = n; Len = 8; @@ -2157,7 +2215,10 @@ /***********************************************************************/ void BINVAL::SetValue(char c) { - *((char*)Binp) = c; + if (Len > 1) + memset(Binp, 0, Len); + + *((char*)Binp) = c; Len = 1; } // end of SetValue @@ -2166,7 +2227,10 @@ /***********************************************************************/ void BINVAL::SetValue(uchar c) { - *((uchar*)Binp) = c; + if (Len > 1) + memset(Binp, 0, Len); + + *((uchar*)Binp) = c; Len = 1; } // end of SetValue @@ -2176,6 +2240,7 @@ void BINVAL::SetBinValue(void *p) { memcpy(Binp, p, Clen); + Len = Clen; } // end of SetBinValue /***********************************************************************/ @@ -2201,10 +2266,11 @@ /***********************************************************************/ char *BINVAL::ShowValue(char *buf, int len) { - int n = MY_MIN(Len, len / 2); + //int n = MY_MIN(Len, len / 2); - sprintf(buf, GetXfmt(), n, Binp); - return buf; + //sprintf(buf, GetXfmt(), n, Binp); + //return buf; + return (char*)Binp; } // end of ShowValue /***********************************************************************/ @@ -2562,7 +2628,7 @@ } else if (valp->GetType() == TYPE_BIGINT && !(valp->GetBigintValue() % 1000)) { // Assuming that this timestamp is in milliseconds - Tval = valp->GetBigintValue() / 1000; + Tval = (int)(valp->GetBigintValue() / 1000); } else Tval = valp->GetIntValue(); diff -Nru mariadb-10.1-10.1.25/storage/connect/value.h mariadb-10.1-10.1.30/storage/connect/value.h --- mariadb-10.1-10.1.25/storage/connect/value.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/value.h 2017-12-21 15:48:50.000000000 +0000 @@ -90,8 +90,8 @@ virtual double GetFloatValue(void) = 0; virtual void *GetTo_Val(void) = 0; virtual void SetPrec(int prec) {Prec = prec;} - bool IsNull(void) {return Null;} - void SetNull(bool b) {Null = b;} + bool IsNull(void) {return (Nullable && Null);} + void SetNull(bool b) {Null = (Nullable ? b : false);} bool GetNullable(void) {return Nullable;} void SetNullable(bool b) {Nullable = b;} int GetType(void) {return Type;} @@ -102,7 +102,7 @@ virtual bool SetValue_pval(PVAL valp, bool chktype = false) = 0; virtual bool SetValue_char(const char *p, int n) = 0; virtual void SetValue_psz(PCSZ s) = 0; - virtual void SetValue_bool(bool) {assert(FALSE);} + virtual void SetValue_bool(bool) {assert(false);} virtual int CompareValue(PVAL vp) = 0; virtual BYTE TestValue(PVAL vp); virtual void SetValue(char) {assert(false);} diff -Nru mariadb-10.1-10.1.25/storage/connect/xindex.cpp mariadb-10.1-10.1.30/storage/connect/xindex.cpp --- mariadb-10.1-10.1.25/storage/connect/xindex.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/xindex.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -188,7 +188,7 @@ memset(m, ' ', n); // Make margin string m[n] = '\0'; fprintf(f, "%sXINDEX: Tbxp=%p Num=%d\n", m, Tbxp, Num_K); - } // end of Print + } // end of Printf /***********************************************************************/ /* Make string output of XINDEX contents. */ @@ -197,7 +197,7 @@ { *ps = '\0'; strncat(ps, "Xindex", z); - } // end of Print + } // end of Prints /* -------------------------- XINDEX Class --------------------------- */ @@ -3008,7 +3008,8 @@ /***********************************************************************/ bool KXYCOL::Init(PGLOBAL g, PCOL colp, int n, bool sm, int kln) { - int len = colp->GetLength(), prec = colp->GetScale(); + int len = colp->GetLength(), prec = colp->GetScale(); + bool un = colp->IsUnsigned(); // Currently no indexing on NULL columns if (colp->IsNullable() && kln) { @@ -3028,7 +3029,7 @@ // Allocate the Value object used when moving items Type = colp->GetResultType(); - if (!(Valp = AllocateValue(g, Type, len, prec, colp->IsUnsigned()))) + if (!(Valp = AllocateValue(g, Type, len, prec, un))) return true; Klen = Valp->GetClen(); @@ -3044,7 +3045,7 @@ // Currently we set it to true to be compatible with QRY blocks, // and the one before last is to enable length/type checking, set to // true if not a prefix key. - Kblp = AllocValBlock(g, To_Keys, Type, n, len, prec, !Prefix, true); + Kblp = AllocValBlock(g, To_Keys, Type, n, len, prec, !Prefix, true, un); Asc = sm; // Sort mode: Asc=true Desc=false Ndf = n; @@ -3064,7 +3065,8 @@ /***********************************************************************/ BYTE* KXYCOL::MapInit(PGLOBAL g, PCOL colp, int *n, BYTE *m) { - int len = colp->GetLength(), prec = colp->GetScale(); + int len = colp->GetLength(), prec = colp->GetScale(); + bool un = colp->IsUnsigned(); if (n[3] && colp->GetLength() > n[3] && colp->GetResultType() == TYPE_STRING) { @@ -3079,7 +3081,7 @@ this, colp, Type, n[0], len, m); // Allocate the Value object used when moving items - Valp = AllocateValue(g, Type, len, prec, colp->IsUnsigned()); + Valp = AllocateValue(g, Type, len, prec, un); Klen = Valp->GetClen(); if (n[2]) { @@ -3088,7 +3090,7 @@ Bkeys.Sub = true; // Allocate the Valblk containing initial block key values - Blkp = AllocValBlock(g, To_Bkeys, Type, n[2], len, prec, true, true); + Blkp = AllocValBlock(g, To_Bkeys, Type, n[2], len, prec, true, true, un); } // endif nb Keys.Size = n[0] * Klen; @@ -3099,7 +3101,7 @@ // by blanks (if true) or keep the zero ending char (if false). // Currently we set it to true to be compatible with QRY blocks, // and last one to enable type checking (no conversion). - Kblp = AllocValBlock(g, To_Keys, Type, n[0], len, prec, !Prefix, true); + Kblp = AllocValBlock(g, To_Keys, Type, n[0], len, prec, !Prefix, true, un); if (n[1]) { Koff.Size = n[1] * sizeof(int); diff -Nru mariadb-10.1-10.1.25/storage/connect/xobject.cpp mariadb-10.1-10.1.30/storage/connect/xobject.cpp --- mariadb-10.1-10.1.25/storage/connect/xobject.cpp 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/xobject.cpp 2017-12-21 15:48:50.000000000 +0000 @@ -84,7 +84,7 @@ CONSTANT::CONSTANT(PGLOBAL g, void *value, short type) { if (!(Value = AllocateValue(g, value, (int)type))) - throw TYPE_CONST; + throw (int)TYPE_CONST; Constant = true; } // end of CONSTANT constructor @@ -95,7 +95,7 @@ CONSTANT::CONSTANT(PGLOBAL g, int n) { if (!(Value = AllocateValue(g, &n, TYPE_INT))) - throw TYPE_CONST; + throw (int)TYPE_CONST; Constant = true; } // end of CONSTANT constructor @@ -117,7 +117,7 @@ { if (Value->GetType() != newtype) if (!(Value = AllocateValue(g, Value, newtype))) - throw TYPE_CONST; + throw (int)TYPE_CONST; } // end of Convert @@ -176,7 +176,7 @@ void CONSTANT::Printf(PGLOBAL g, FILE *f, uint n) { Value->Printf(g, f, n); - } /* end of Print */ + } /* end of Printf */ /***********************************************************************/ /* Make string output of a constant object. */ @@ -184,7 +184,7 @@ void CONSTANT::Prints(PGLOBAL g, char *ps, uint z) { Value->Prints(g, ps, z); - } /* end of Print */ + } /* end of Prints */ /* -------------------------- Class STRING --------------------------- */ diff -Nru mariadb-10.1-10.1.25/storage/connect/xtable.h mariadb-10.1-10.1.30/storage/connect/xtable.h --- mariadb-10.1-10.1.25/storage/connect/xtable.h 2017-07-01 18:20:19.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/connect/xtable.h 2017-12-21 15:48:50.000000000 +0000 @@ -16,7 +16,7 @@ #include "assert.h" #include "block.h" #include "colblk.h" -#include "m_ctype.h" +//#include "m_ctype.h" #include "reldef.h" typedef class CMD *PCMD; diff -Nru mariadb-10.1-10.1.25/storage/federated/ha_federated.cc mariadb-10.1-10.1.30/storage/federated/ha_federated.cc --- mariadb-10.1-10.1.25/storage/federated/ha_federated.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/federated/ha_federated.cc 2017-12-21 15:48:50.000000000 +0000 @@ -1423,6 +1423,7 @@ } break; } + /* fall through */ case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1442,6 +1443,7 @@ goto err; break; } + /* fall through */ case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || diff -Nru mariadb-10.1-10.1.25/storage/federatedx/federatedx_io_mysql.cc mariadb-10.1-10.1.30/storage/federatedx/federatedx_io_mysql.cc --- mariadb-10.1-10.1.25/storage/federatedx/federatedx_io_mysql.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/federatedx/federatedx_io_mysql.cc 2017-12-21 15:48:50.000000000 +0000 @@ -120,6 +120,7 @@ void *ref); virtual int seek_position(FEDERATEDX_IO_RESULT **io_result, const void *ref); + virtual void set_thd(void *thd); }; @@ -264,9 +265,8 @@ savept= dynamic_element(&savepoints, savepoints.elements - 1, SAVEPT *); if (savept->level < sp) break; - if ((savept->flags & (SAVEPOINT_REALIZED | - SAVEPOINT_RESTRICT)) == SAVEPOINT_REALIZED) - last= savept; + if ((savept->flags & (SAVEPOINT_REALIZED | SAVEPOINT_RESTRICT)) == SAVEPOINT_REALIZED) + last= savept; savepoints.elements--; } @@ -292,8 +292,8 @@ while (savepoints.elements) { savept= dynamic_element(&savepoints, savepoints.elements - 1, SAVEPT *); - if (savept->level <= sp) - break; + if (savept->level <= sp) + break; savepoints.elements--; } @@ -648,3 +648,7 @@ return 0; } +void federatedx_io_mysql::set_thd(void *thd) +{ + mysql.net.thd= thd; +} diff -Nru mariadb-10.1-10.1.25/storage/federatedx/federatedx_txn.cc mariadb-10.1-10.1.30/storage/federatedx/federatedx_txn.cc --- mariadb-10.1-10.1.25/storage/federatedx/federatedx_txn.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/federatedx/federatedx_txn.cc 2017-12-21 15:48:50.000000000 +0000 @@ -93,8 +93,8 @@ } -int federatedx_txn::acquire(FEDERATEDX_SHARE *share, bool readonly, - federatedx_io **ioptr) +int federatedx_txn::acquire(FEDERATEDX_SHARE *share, void *thd, + bool readonly, federatedx_io **ioptr) { federatedx_io *io; FEDERATEDX_SERVER *server= share->s; @@ -131,6 +131,7 @@ io->busy= TRUE; io->owner_ptr= ioptr; + io->set_thd(thd); } DBUG_ASSERT(io->busy && io->server == server); @@ -157,7 +158,10 @@ io->active, io->is_autocommit())); if (io->is_autocommit()) + { + io->set_thd(NULL); io->active= FALSE; + } } release_scan(); diff -Nru mariadb-10.1-10.1.25/storage/federatedx/ha_federatedx.cc mariadb-10.1-10.1.30/storage/federatedx/ha_federatedx.cc --- mariadb-10.1-10.1.25/storage/federatedx/ha_federatedx.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/federatedx/ha_federatedx.cc 2017-12-21 15:48:50.000000000 +0000 @@ -1342,6 +1342,7 @@ } break; } + /* fall through */ case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federatedx HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1361,6 +1362,7 @@ goto err; break; } + /* fall through */ case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federatedx HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1762,7 +1764,7 @@ txn= get_txn(thd); - if ((error= txn->acquire(share, TRUE, &io))) + if ((error= txn->acquire(share, thd, TRUE, &io))) { free_share(txn, share); DBUG_RETURN(error); @@ -2047,7 +2049,7 @@ /* we always want to append this, even if there aren't any fields */ values_string.append(STRING_WITH_LEN(") ")); - if ((error= txn->acquire(share, FALSE, &io))) + if ((error= txn->acquire(share, ha_thd(), FALSE, &io))) DBUG_RETURN(error); if (use_bulk_insert) @@ -2136,7 +2138,7 @@ Make sure we have an open connection so that we know the maximum packet size. */ - if (txn->acquire(share, FALSE, &io)) + if (txn->acquire(share, ha_thd(), FALSE, &io)) DBUG_VOID_RETURN; page_size= (uint) my_getpagesize(); @@ -2167,7 +2169,7 @@ if (bulk_insert.str && bulk_insert.length && !table_will_be_deleted) { - if ((error= txn->acquire(share, FALSE, &io))) + if ((error= txn->acquire(share, ha_thd(), FALSE, &io))) DBUG_RETURN(error); if (io->query(bulk_insert.str, bulk_insert.length)) error= stash_remote_error(); @@ -2219,7 +2221,7 @@ DBUG_ASSERT(txn == get_txn(thd)); - if ((error= txn->acquire(share, FALSE, &io))) + if ((error= txn->acquire(share, thd, FALSE, &io))) DBUG_RETURN(error); if (io->query(query.ptr(), query.length())) @@ -2251,7 +2253,7 @@ DBUG_ASSERT(txn == get_txn(thd)); - if ((error= txn->acquire(share, FALSE, &io))) + if ((error= txn->acquire(share, thd, FALSE, &io))) DBUG_RETURN(error); if (io->query(query.ptr(), query.length())) @@ -2410,7 +2412,7 @@ if (!has_a_primary_key) update_string.append(STRING_WITH_LEN(" LIMIT 1")); - if ((error= txn->acquire(share, FALSE, &io))) + if ((error= txn->acquire(share, ha_thd(), FALSE, &io))) DBUG_RETURN(error); if (io->query(update_string.ptr(), update_string.length())) @@ -2488,7 +2490,7 @@ DBUG_PRINT("info", ("Delete sql: %s", delete_string.c_ptr_quick())); - if ((error= txn->acquire(share, FALSE, &io))) + if ((error= txn->acquire(share, ha_thd(), FALSE, &io))) DBUG_RETURN(error); if (io->query(delete_string.ptr(), delete_string.length())) @@ -2597,7 +2599,7 @@ NULL, 0, 0); sql_query.append(index_string); - if ((retval= txn->acquire(share, TRUE, &io))) + if ((retval= txn->acquire(share, ha_thd(), TRUE, &io))) DBUG_RETURN(retval); if (io->query(sql_query.ptr(), sql_query.length())) @@ -2677,7 +2679,7 @@ &table->key_info[active_index], start_key, end_key, 0, eq_range_arg); - if ((retval= txn->acquire(share, TRUE, &io))) + if ((retval= txn->acquire(share, ha_thd(), TRUE, &io))) DBUG_RETURN(retval); if (stored_result) @@ -2777,7 +2779,7 @@ { int error; - if ((error= txn->acquire(share, TRUE, &io))) + if ((error= txn->acquire(share, ha_thd(), TRUE, &io))) DBUG_RETURN(error); if (stored_result) @@ -2824,7 +2826,7 @@ else { federatedx_io *tmp_io= 0, **iop; - if (!*(iop= &io) && (error= txn->acquire(share, TRUE, (iop= &tmp_io)))) + if (!*(iop= &io) && (error= txn->acquire(share, ha_thd(), TRUE, (iop= &tmp_io)))) { DBUG_ASSERT(0); // Fail when testing insert_dynamic(&results, (uchar*) &stored_result); @@ -2904,7 +2906,7 @@ FEDERATEDX_IO_ROW *row; DBUG_ENTER("ha_federatedx::read_next"); - if ((retval= txn->acquire(share, TRUE, &io))) + if ((retval= txn->acquire(share, ha_thd(), TRUE, &io))) DBUG_RETURN(retval); /* Fetch a row, insert it back in a row format. */ @@ -2949,7 +2951,7 @@ DBUG_VOID_RETURN; } - if (txn->acquire(share, TRUE, &io)) + if (txn->acquire(share, ha_thd(), TRUE, &io)) DBUG_VOID_RETURN; io->mark_position(stored_result, ref); @@ -2978,7 +2980,7 @@ /* We have to move this to 'ref' to get things aligned */ bmove(ref, pos, ref_length); - if ((retval= txn->acquire(share, TRUE, &io))) + if ((retval= txn->acquire(share, ha_thd(), TRUE, &io))) goto error; if ((retval= io->seek_position(&result, ref))) @@ -3052,7 +3054,7 @@ /* we want not to show table status if not needed to do so */ if (flag & (HA_STATUS_VARIABLE | HA_STATUS_CONST | HA_STATUS_AUTO)) { - if (!*(iop= &io) && (error_code= tmp_txn->acquire(share, TRUE, (iop= &tmp_io)))) + if (!*(iop= &io) && (error_code= tmp_txn->acquire(share, thd, TRUE, (iop= &tmp_io)))) goto fail; } @@ -3153,6 +3155,7 @@ int ha_federatedx::reset(void) { + THD *thd= ha_thd(); int error = 0; insert_dup_update= FALSE; @@ -3170,9 +3173,9 @@ federatedx_io *tmp_io= 0, **iop; // external_lock may not have been called so txn may not be set - tmp_txn= get_txn(ha_thd()); + tmp_txn= get_txn(thd); - if (!*(iop= &io) && (error= tmp_txn->acquire(share, TRUE, (iop= &tmp_io)))) + if (!*(iop= &io) && (error= tmp_txn->acquire(share, thd, TRUE, (iop= &tmp_io)))) { DBUG_ASSERT(0); // Fail when testing return error; @@ -3206,6 +3209,7 @@ int ha_federatedx::delete_all_rows() { + THD *thd= ha_thd(); char query_buffer[FEDERATEDX_QUERY_BUFFER_SIZE]; String query(query_buffer, sizeof(query_buffer), &my_charset_bin); int error; @@ -3219,14 +3223,14 @@ ident_quote_char); /* no need for savepoint in autocommit mode */ - if (!(ha_thd()->variables.option_bits & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) + if (!(thd->variables.option_bits & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) txn->stmt_autocommit(); /* TRUNCATE won't return anything in mysql_affected_rows */ - if ((error= txn->acquire(share, FALSE, &io))) + if ((error= txn->acquire(share, thd, FALSE, &io))) DBUG_RETURN(error); if (io->query(query.ptr(), query.length())) @@ -3371,7 +3375,7 @@ if (tmp_share.s) { tmp_txn= get_txn(thd); - if (!(retval= tmp_txn->acquire(&tmp_share, TRUE, &tmp_io))) + if (!(retval= tmp_txn->acquire(&tmp_share, thd, TRUE, &tmp_io))) { retval= test_connection(thd, tmp_io, &tmp_share); tmp_txn->release(&tmp_io); @@ -3468,7 +3472,7 @@ { table_will_be_deleted = FALSE; txn= get_txn(thd); - if (!(error= txn->acquire(share, lock_type == F_RDLCK, &io)) && + if (!(error= txn->acquire(share, ha_thd(), lock_type == F_RDLCK, &io)) && (lock_type == F_WRLCK || !io->is_autocommit())) { if (!thd_test_options(thd, (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) diff -Nru mariadb-10.1-10.1.25/storage/federatedx/ha_federatedx.h mariadb-10.1-10.1.30/storage/federatedx/ha_federatedx.h --- mariadb-10.1-10.1.25/storage/federatedx/ha_federatedx.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/federatedx/ha_federatedx.h 2017-12-21 15:48:50.000000000 +0000 @@ -215,6 +215,7 @@ void *ref)=0; virtual int seek_position(FEDERATEDX_IO_RESULT **io_result, const void *ref)=0; + virtual void set_thd(void *thd) { } }; @@ -233,7 +234,7 @@ bool has_connections() const { return txn_list != NULL; } bool in_transaction() const { return savepoint_next != 0; } - int acquire(FEDERATEDX_SHARE *share, bool readonly, federatedx_io **io); + int acquire(FEDERATEDX_SHARE *share, void *thd, bool readonly, federatedx_io **io); void release(federatedx_io **io); void close(FEDERATEDX_SERVER *); diff -Nru mariadb-10.1-10.1.25/storage/heap/hp_extra.c mariadb-10.1-10.1.30/storage/heap/hp_extra.c --- mariadb-10.1-10.1.25/storage/heap/hp_extra.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/heap/hp_extra.c 2017-12-21 15:48:50.000000000 +0000 @@ -34,6 +34,7 @@ switch (function) { case HA_EXTRA_RESET_STATE: heap_reset(info); + /* fall through */ case HA_EXTRA_NO_READCHECK: info->opt_flag&= ~READ_CHECK_USED; /* No readcheck */ break; diff -Nru mariadb-10.1-10.1.25/storage/innobase/btr/btr0btr.cc mariadb-10.1-10.1.30/storage/innobase/btr/btr0btr.cc --- mariadb-10.1-10.1.25/storage/innobase/btr/btr0btr.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/btr/btr0btr.cc 2017-12-21 15:48:50.000000000 +0000 @@ -77,10 +77,9 @@ index->name, index->table_name); if (block->page.zip.data) { buf_page_print(block->page.zip.data, - buf_block_get_zip_size(block), - BUF_PAGE_PRINT_NO_CRASH); + buf_block_get_zip_size(block)); } - buf_page_print(buf_block_get_frame(block), 0, 0); + buf_page_print(buf_block_get_frame(block), 0); } #ifndef UNIV_HOTBACKUP @@ -1582,11 +1581,9 @@ if (btr_node_ptr_get_child_page_no(node_ptr, offsets) != page_no) { rec_t* print_rec; fputs("InnoDB: Dump of the child page:\n", stderr); - buf_page_print(page_align(user_rec), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page_align(user_rec), 0); fputs("InnoDB: Dump of the parent page:\n", stderr); - buf_page_print(page_align(node_ptr), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page_align(node_ptr), 0); fputs("InnoDB: Corruption of an index tree: table ", stderr); ut_print_name(stderr, NULL, TRUE, index->table_name); @@ -2046,8 +2043,8 @@ max_ins_size2 = page_get_max_insert_size_after_reorganize(page, 1); if (data_size1 != data_size2 || max_ins_size1 != max_ins_size2) { - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(temp_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(temp_page, 0); fprintf(stderr, "InnoDB: Error: page old data size %lu" @@ -2055,7 +2052,7 @@ "InnoDB: Error: page old max ins size %lu" " new max ins size %lu\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned long) data_size1, (unsigned long) data_size2, (unsigned long) max_ins_size1, (unsigned long) max_ins_size2); @@ -4575,7 +4572,7 @@ (ulong) rec_get_n_fields_old(rec), (ulong) n); if (dump_on_error) { - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); fputs("InnoDB: corrupt record ", stderr); rec_print_old(stderr, rec); @@ -4613,8 +4610,7 @@ (ulong) i, (ulong) len, (ulong) fixed_size); if (dump_on_error) { - buf_page_print(page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); fputs("InnoDB: corrupt record ", stderr); rec_print_new(stderr, rec, offsets); @@ -4891,8 +4887,8 @@ btr_validate_report2(index, level, block, right_block); fputs("InnoDB: broken FIL_PAGE_NEXT" " or FIL_PAGE_PREV links\n", stderr); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(right_page, 0); ret = false; } @@ -4900,8 +4896,8 @@ if (page_is_comp(right_page) != page_is_comp(page)) { btr_validate_report2(index, level, block, right_block); fputs("InnoDB: 'compact' flag mismatch\n", stderr); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(right_page, 0); ret = false; @@ -4923,8 +4919,8 @@ fputs("InnoDB: records in wrong order" " on adjacent pages\n", stderr); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(right_page, 0); fputs("InnoDB: record ", stderr); rec = page_rec_get_prev(page_get_supremum_rec(page)); @@ -4972,8 +4968,8 @@ fputs("InnoDB: node pointer to the page is wrong\n", stderr); - buf_page_print(father_page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(page, 0); fputs("InnoDB: node ptr ", stderr); rec_print(stderr, node_ptr, index); @@ -5005,10 +5001,8 @@ btr_validate_report1(index, level, block); - buf_page_print(father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(page, 0); fputs("InnoDB: Error: node ptrs differ" " on levels > 0\n" @@ -5053,15 +5047,9 @@ btr_validate_report1(index, level, block); - buf_page_print( - father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(page, 0); + buf_page_print(right_page, 0); } } else { page_t* right_father_page @@ -5079,18 +5067,10 @@ btr_validate_report1(index, level, block); - buf_page_print( - father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(right_father_page, 0); + buf_page_print(page, 0); + buf_page_print(right_page, 0); } if (page_get_page_no(right_father_page) @@ -5104,18 +5084,10 @@ btr_validate_report1(index, level, block); - buf_page_print( - father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(right_father_page, 0); + buf_page_print(page, 0); + buf_page_print(right_page, 0); } } } diff -Nru mariadb-10.1-10.1.25/storage/innobase/btr/btr0cur.cc mariadb-10.1-10.1.30/storage/innobase/btr/btr0cur.cc --- mariadb-10.1-10.1.25/storage/innobase/btr/btr0cur.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/btr/btr0cur.cc 2017-12-21 15:48:50.000000000 +0000 @@ -2316,6 +2316,15 @@ rec = page_cur_get_rec(page_cursor); } + /* We limit max record size to 16k even for 64k page size. */ + if (new_rec_size >= COMPRESSED_REC_MAX_DATA_SIZE || + (!dict_table_is_comp(index->table) + && new_rec_size >= REDUNDANT_REC_MAX_DATA_SIZE)) { + err = DB_OVERFLOW; + + goto func_exit; + } + if (UNIV_UNLIKELY(new_rec_size >= (page_get_free_space_of_empty(page_is_comp(page)) / 2))) { @@ -3424,7 +3433,6 @@ ulint n_reserved = 0; ibool success; ibool ret = FALSE; - ulint level; mem_heap_t* heap; ulint* offsets; @@ -3475,6 +3483,10 @@ #endif /* UNIV_ZIP_DEBUG */ } + if (flags == 0) { + lock_update_delete(block, rec); + } + if (UNIV_UNLIKELY(page_get_n_recs(page) < 2) && UNIV_UNLIKELY(dict_index_get_page(index) != buf_block_get_page_no(block))) { @@ -3489,13 +3501,7 @@ goto return_after_reservations; } - if (flags == 0) { - lock_update_delete(block, rec); - } - - level = btr_page_get_level(page, mtr); - - if (level > 0 + if (!page_is_leaf(page) && UNIV_UNLIKELY(rec == page_rec_get_next( page_get_infimum_rec(page)))) { @@ -3518,6 +3524,7 @@ on a page, we have to change the father node pointer so that it is equal to the new leftmost node pointer on the page */ + ulint level = btr_page_get_level(page, mtr); btr_node_ptr_delete(index, block, mtr); @@ -4097,7 +4104,7 @@ if (index->stat_index_size > 1) { n_sample_pages = (srv_stats_transient_sample_pages < index->stat_index_size) ? ut_min(index->stat_index_size, - log2(index->stat_index_size)*srv_stats_transient_sample_pages) + ulint(log2(index->stat_index_size)*srv_stats_transient_sample_pages)) : index->stat_index_size; } diff -Nru mariadb-10.1-10.1.25/storage/innobase/btr/btr0scrub.cc mariadb-10.1-10.1.30/storage/innobase/btr/btr0scrub.cc --- mariadb-10.1-10.1.25/storage/innobase/btr/btr0scrub.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/btr/btr0scrub.cc 2017-12-21 15:48:50.000000000 +0000 @@ -886,17 +886,15 @@ memset(&scrub_data->scrub_stat, 0, sizeof(scrub_data->scrub_stat)); } -/**************************************************************//** -Complete iterating a space */ +/** Complete iterating a space. +@param[in,out] scrub_data scrub data */ UNIV_INTERN -bool -btr_scrub_complete_space( -/*=====================*/ - btr_scrub_t* scrub_data) /*!< in/out: scrub data */ +void +btr_scrub_complete_space(btr_scrub_t* scrub_data) { + ut_ad(scrub_data->scrubbing); btr_scrub_table_close_for_thread(scrub_data); btr_scrub_update_total_stat(scrub_data); - return scrub_data->scrubbing; } /********************************************************************* diff -Nru mariadb-10.1-10.1.25/storage/innobase/btr/btr0sea.cc mariadb-10.1-10.1.30/storage/innobase/btr/btr0sea.cc --- mariadb-10.1-10.1.25/storage/innobase/btr/btr0sea.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/btr/btr0sea.cc 2017-12-21 15:48:50.000000000 +0000 @@ -1982,9 +1982,7 @@ (ulong) block->curr_left_side); if (n_page_dumps < 20) { - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); n_page_dumps++; } } diff -Nru mariadb-10.1-10.1.25/storage/innobase/buf/buf0buf.cc mariadb-10.1-10.1.30/storage/innobase/buf/buf0buf.cc --- mariadb-10.1-10.1.25/storage/innobase/buf/buf0buf.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/buf/buf0buf.cc 2017-12-21 15:48:50.000000000 +0000 @@ -31,12 +31,16 @@ Created 11/5/1995 Heikki Tuuri *******************************************************/ +#include "univ.i" +#include "mach0data.h" #include "buf0buf.h" +#include #ifdef UNIV_NONINL #include "buf0buf.ic" #endif +#ifndef UNIV_INNOCHECKSUM #include "mem0mem.h" #include "btr0btr.h" #include "fil0fil.h" @@ -52,13 +56,15 @@ #include "srv0srv.h" #include "dict0dict.h" #include "log0recv.h" -#include "page0zip.h" #include "srv0mon.h" -#include "buf0checksum.h" #ifdef HAVE_LIBNUMA #include #include #endif // HAVE_LIBNUMA +#endif /* !UNIV_INNOCHECKSUM */ +#include "page0zip.h" +#include "buf0checksum.h" +#ifndef UNIV_INNOCHECKSUM #include "fil0pagecompress.h" #include "ha_prototypes.h" #include "ut0byte.h" @@ -80,10 +86,13 @@ void *result; #ifdef _MSC_VER result = _aligned_malloc(size, align); -#else +#elif defined (HAVE_POSIX_MEMALIGN) if(posix_memalign(&result, align, size)) { result = 0; } +#else + /* Use unaligned malloc as fallback */ + result = malloc(size); #endif return result; } @@ -528,6 +537,7 @@ return(block); } #endif /* !UNIV_HOTBACKUP */ +#endif /* !UNIV_INNOCHECKSUM */ /** Check if a page is all zeroes. @param[in] read_buf database page @@ -561,6 +571,17 @@ { ib_uint32_t crc32 = buf_calc_page_crc32(read_buf); +#ifdef UNIV_INNOCHECKSUM + if (log_file + && srv_checksum_algorithm == SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) { + fprintf(log_file, "page::%llu;" + " crc32 calculated = %u;" + " recorded checksum field1 = " ULINTPF " recorded" + " checksum field2 =" ULINTPF "\n", cur_page_num, + crc32, checksum_field1, checksum_field2); + } +#endif /* UNIV_INNOCHECKSUM */ + if (!(checksum_field1 == crc32 && checksum_field2 == crc32)) { DBUG_PRINT("buf_checksum", ("Page checksum crc32 not valid field1 " ULINTPF @@ -595,12 +616,45 @@ 2. Newer InnoDB versions store the old formula checksum (buf_calc_page_old_checksum()). */ + ulint old_checksum = buf_calc_page_old_checksum(read_buf); + ulint new_checksum = buf_calc_page_new_checksum(read_buf); + +#ifdef UNIV_INNOCHECKSUM + if (log_file + && srv_checksum_algorithm == SRV_CHECKSUM_ALGORITHM_INNODB) { + fprintf(log_file, "page::%llu;" + " old style: calculated =" + " " ULINTPF "; recorded = " ULINTPF "\n", + cur_page_num, old_checksum, + checksum_field2); + fprintf(log_file, "page::%llu;" + " new style: calculated =" + " " ULINTPF "; crc32 = %u; recorded = " ULINTPF "\n", + cur_page_num, new_checksum, + buf_calc_page_crc32(read_buf), checksum_field1); + } + + if (log_file + && srv_checksum_algorithm == SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) { + fprintf(log_file, "page::%llu;" + " old style: calculated =" + " " ULINTPF "; recorded checksum = " ULINTPF "\n", + cur_page_num, old_checksum, + checksum_field2); + fprintf(log_file, "page::%llu;" + " new style: calculated =" + " " ULINTPF "; recorded checksum = " ULINTPF "\n", + cur_page_num, new_checksum, + checksum_field1); + } +#endif /* UNIV_INNOCHECKSUM */ + if (checksum_field2 != mach_read_from_4(read_buf + FIL_PAGE_LSN) - && checksum_field2 != buf_calc_page_old_checksum(read_buf)) { + && checksum_field2 != old_checksum) { DBUG_PRINT("buf_checksum", ("Page checksum innodb not valid field1 " ULINTPF " field2 " ULINTPF "crc32 " ULINTPF " lsn " ULINTPF ".", - checksum_field1, checksum_field2, buf_calc_page_old_checksum(read_buf), + checksum_field1, checksum_field2, old_checksum, mach_read_from_4(read_buf + FIL_PAGE_LSN))); return(false); @@ -612,11 +666,11 @@ (always equal to 0), to FIL_PAGE_SPACE_OR_CHKSUM */ if (checksum_field1 != 0 - && checksum_field1 != buf_calc_page_new_checksum(read_buf)) { + && checksum_field1 != new_checksum) { DBUG_PRINT("buf_checksum", ("Page checksum innodb not valid field1 " ULINTPF " field2 " ULINTPF "crc32 " ULINTPF " lsn " ULINTPF ".", - checksum_field1, checksum_field2, buf_calc_page_new_checksum(read_buf), + checksum_field1, checksum_field2, new_checksum, mach_read_from_4(read_buf + FIL_PAGE_LSN))); return(false); @@ -646,6 +700,18 @@ mach_read_from_4(read_buf + FIL_PAGE_LSN))); } +#ifdef UNIV_INNOCHECKSUM + if (log_file + && srv_checksum_algorithm == SRV_CHECKSUM_ALGORITHM_STRICT_NONE) { + fprintf(log_file, + "page::%llu; none checksum: calculated" + " = " ULINTPF "; recorded checksum_field1 = " ULINTPF + " recorded checksum_field2 = " ULINTPF "\n", + cur_page_num, BUF_NO_CHECKSUM_MAGIC, + checksum_field1, checksum_field2); + } +#endif /* UNIV_INNOCHECKSUM */ + return(checksum_field1 == checksum_field2 && checksum_field1 == BUF_NO_CHECKSUM_MAGIC); } @@ -662,14 +728,19 @@ bool check_lsn, const byte* read_buf, ulint zip_size, +#ifndef UNIV_INNOCHECKSUM const fil_space_t* space) +#else + const void* space) +#endif { - ulint checksum_field1; - ulint checksum_field2; - ulint space_id = mach_read_from_4( - read_buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); - ulint page_type = mach_read_from_2( - read_buf + FIL_PAGE_TYPE); + DBUG_EXECUTE_IF("buf_page_import_corrupt_failure", return(TRUE); ); + ulint checksum_field1 = 0; + ulint checksum_field2 = 0; +#ifndef UNIV_INNOCHECKSUM + ulint space_id = mach_read_from_4(read_buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); +#endif + ulint page_type = mach_read_from_2(read_buf + FIL_PAGE_TYPE); /* We can trust page type if page compression is set on tablespace flags because page compression flag means file must have been @@ -682,7 +753,10 @@ decompressed at this stage). */ if ((page_type == FIL_PAGE_PAGE_COMPRESSED || page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) - && space && FSP_FLAGS_HAS_PAGE_COMPRESSION(space->flags)) { +#ifndef UNIV_INNOCHECKSUM + && space && FSP_FLAGS_HAS_PAGE_COMPRESSION(space->flags) +#endif + ) { return (false); } @@ -693,16 +767,17 @@ /* Stored log sequence numbers at the start and the end of page do not match */ - +#ifndef UNIV_INNOCHECKSUM ib_logf(IB_LOG_LEVEL_INFO, - "Log sequence number at the start %lu and the end %lu do not match.", + "Log sequence number at the start " ULINTPF " and the end " ULINTPF " do not match.", mach_read_from_4(read_buf + FIL_PAGE_LSN + 4), mach_read_from_4(read_buf + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)); +#endif /* UNIV_INNOCHECKSUM */ return(true); } -#ifndef UNIV_HOTBACKUP +#if !defined(UNIV_HOTBACKUP) && !defined(UNIV_INNOCHECKSUM) if (check_lsn && recv_lsn_checks_on) { lsn_t current_lsn; @@ -715,7 +790,7 @@ ut_print_timestamp(stderr); fprintf(stderr, - " InnoDB: Error: page %lu log sequence number" + " InnoDB: Error: page " ULINTPF " log sequence number" " " LSN_PF "\n" "InnoDB: is in the future! Current system " "log sequence number " LSN_PF ".\n" @@ -742,7 +817,7 @@ } if (zip_size) { - return(!page_zip_verify_checksum(read_buf, zip_size)); + return(!page_zip_verify_checksum((const void *)read_buf, zip_size)); } checksum_field1 = mach_read_from_4( @@ -762,9 +837,10 @@ /* make sure that the page is really empty */ for (ulint i = 0; i < UNIV_PAGE_SIZE; i++) { if (read_buf[i] != 0) { +#ifndef UNIV_INNOCHECKSUM ib_logf(IB_LOG_LEVEL_INFO, "Checksum fields zero but page is not empty."); - +#endif return(true); } } @@ -772,9 +848,9 @@ return(false); } - DBUG_EXECUTE_IF("buf_page_is_corrupt_failure", return(true); ); - +#ifndef UNIV_INNOCHECKSUM ulint page_no = mach_read_from_4(read_buf + FIL_PAGE_OFFSET); +#endif const srv_checksum_algorithm_t curr_algo = static_cast(srv_checksum_algorithm); @@ -792,11 +868,31 @@ checksum_field1, checksum_field2)) { if (curr_algo == SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) { +#ifndef UNIV_INNOCHECKSUM page_warn_strict_checksum( curr_algo, SRV_CHECKSUM_ALGORITHM_NONE, space_id, page_no); +#endif /* !UNIV_INNOCHECKSUM */ + } + +#ifdef UNIV_INNOCHECKSUM + if (log_file) { + fprintf(log_file, "page::%llu;" + " old style: calculated = " ULINTPF ";" + " recorded = " ULINTPF "\n", + cur_page_num, + buf_calc_page_old_checksum(read_buf), + checksum_field2); + fprintf(log_file, "page::%llu;" + " new style: calculated = " ULINTPF ";" + " crc32 = %u; recorded = " ULINTPF "\n", + cur_page_num, + buf_calc_page_new_checksum(read_buf), + buf_calc_page_crc32(read_buf), + checksum_field1); } +#endif /* UNIV_INNOCHECKSUM */ return(false); } @@ -805,15 +901,24 @@ checksum_field1, checksum_field2)) { if (curr_algo == SRV_CHECKSUM_ALGORITHM_STRICT_CRC32) { +#ifndef UNIV_INNOCHECKSUM page_warn_strict_checksum( curr_algo, SRV_CHECKSUM_ALGORITHM_INNODB, space_id, page_no); +#endif } return(false); } +#ifdef UNIV_INNOCHECKSUM + if (log_file) { + fprintf(log_file, "Fail; page::%llu;" + " invalid (fails crc32 checksum)\n", + cur_page_num); + } +#endif /* UNIV_INNOCHECKSUM */ return(true); case SRV_CHECKSUM_ALGORITHM_INNODB: @@ -828,11 +933,29 @@ checksum_field1, checksum_field2)) { if (curr_algo == SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) { +#ifndef UNIV_INNOCHECKSUM page_warn_strict_checksum( curr_algo, SRV_CHECKSUM_ALGORITHM_NONE, space_id, page_no); +#endif } +#ifdef UNIV_INNOCHECKSUM + if (log_file) { + fprintf(log_file, "page::%llu;" + " old style: calculated = " ULINTPF ";" + " recorded = " ULINTPF "\n", cur_page_num, + buf_calc_page_old_checksum(read_buf), + checksum_field2); + fprintf(log_file, "page::%llu;" + " new style: calculated = " ULINTPF ";" + " crc32 = %u; recorded = " ULINTPF "\n", + cur_page_num, + buf_calc_page_new_checksum(read_buf), + buf_calc_page_crc32(read_buf), + checksum_field1); + } +#endif /* UNIV_INNOCHECKSUM */ return(false); } @@ -841,15 +964,25 @@ checksum_field1, checksum_field2)) { if (curr_algo == SRV_CHECKSUM_ALGORITHM_STRICT_INNODB) { +#ifndef UNIV_INNOCHECKSUM page_warn_strict_checksum( curr_algo, SRV_CHECKSUM_ALGORITHM_CRC32, space_id, page_no); +#endif } return(false); } +#ifdef UNIV_INNOCHECKSUM + if (log_file) { + fprintf(log_file, "Fail; page::%llu;" + " invalid (fails innodb checksum)\n", + cur_page_num); + } +#endif /* UNIV_INNOCHECKSUM */ + return(true); case SRV_CHECKSUM_ALGORITHM_STRICT_NONE: @@ -861,22 +994,34 @@ if (buf_page_is_checksum_valid_crc32(read_buf, checksum_field1, checksum_field2)) { +#ifndef UNIV_INNOCHECKSUM page_warn_strict_checksum( curr_algo, SRV_CHECKSUM_ALGORITHM_CRC32, space_id, page_no); +#endif return(false); } if (buf_page_is_checksum_valid_innodb(read_buf, checksum_field1, checksum_field2)) { +#ifndef UNIV_INNOCHECKSUM page_warn_strict_checksum( curr_algo, SRV_CHECKSUM_ALGORITHM_INNODB, space_id, page_no); +#endif return(false); } +#ifdef UNIV_INNOCHECKSUM + if (log_file) { + fprintf(log_file, "Fail; page::%llu;" + " invalid (fails none checksum)\n", + cur_page_num); + } +#endif /* UNIV_INNOCHECKSUM */ + return(true); case SRV_CHECKSUM_ALGORITHM_NONE: @@ -890,19 +1035,13 @@ return(false); } -/********************************************************************//** -Prints a page to stderr. */ +#ifndef UNIV_INNOCHECKSUM +/** Dump a page to stderr. +@param[in] read_buf database page +@param[in] zip_size compressed page size, or 0 for uncompressed */ UNIV_INTERN void -buf_page_print( -/*===========*/ - const byte* read_buf, /*!< in: a database page */ - ulint zip_size, /*!< in: compressed page size, or - 0 for uncompressed pages */ - ulint flags) /*!< in: 0 or - BUF_PAGE_PRINT_NO_CRASH or - BUF_PAGE_PRINT_NO_FULL */ - +buf_page_print(const byte* read_buf, ulint zip_size) { #ifndef UNIV_HOTBACKUP dict_index_t* index; @@ -913,14 +1052,12 @@ size = UNIV_PAGE_SIZE; } - if (!(flags & BUF_PAGE_PRINT_NO_FULL)) { - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: Page dump in ascii and hex (%lu bytes):\n", - size); - ut_print_buf(stderr, read_buf, size); - fputs("\nInnoDB: End of page dump\n", stderr); - } + ut_print_timestamp(stderr); + fprintf(stderr, + " InnoDB: Page dump in ascii and hex (" ULINTPF " bytes):\n", + size); + ut_print_buf(stderr, read_buf, size); + fputs("\nInnoDB: End of page dump\n", stderr); if (zip_size) { /* Print compressed page. */ @@ -972,7 +1109,7 @@ "low 4 bytes of LSN at page end " ULINTPF ", " "page number (if stored to page already) " ULINTPF ", " "space id (if created with >= MySQL-4.1.1 " - "and stored already) %lu\n", + "and stored already) " ULINTPF "\n", mach_read_from_4(read_buf + FIL_PAGE_SPACE_OR_CHKSUM), buf_checksum_algorithm_name(SRV_CHECKSUM_ALGORITHM_CRC32), buf_calc_page_crc32(read_buf), @@ -1075,8 +1212,6 @@ stderr); break; } - - ut_ad(flags & BUF_PAGE_PRINT_NO_CRASH); } #ifndef UNIV_HOTBACKUP @@ -2709,8 +2844,8 @@ if (block->page.space != space || block->page.offset != offset) { ib_logf(IB_LOG_LEVEL_ERROR, - "Corruption: Block space_id %lu != page space_id %lu or " - "Block offset %lu != page offset %lu", + "Corruption: Block space_id " ULINTPF " != page space_id " ULINTPF " or " + "Block offset " ULINTPF " != page offset " ULINTPF " ", (ulint)block->page.space, space, (ulint)block->page.offset, offset); } @@ -2927,8 +3062,8 @@ ib_mutex_t* fix_mutex = NULL; buf_pool_t* buf_pool = buf_pool_get(space, offset); - ut_ad(mtr); - ut_ad(mtr->state == MTR_ACTIVE); + ut_ad((mtr == NULL) == (mode == BUF_EVICT_IF_IN_POOL)); + ut_ad(!mtr || mtr->state == MTR_ACTIVE); ut_ad((rw_latch == RW_S_LATCH) || (rw_latch == RW_X_LATCH) || (rw_latch == RW_NO_LATCH)); @@ -2939,23 +3074,29 @@ #ifdef UNIV_DEBUG switch (mode) { + case BUF_EVICT_IF_IN_POOL: + /* After DISCARD TABLESPACE, the tablespace would not exist, + but in IMPORT TABLESPACE, PageConverter::operator() must + replace any old pages, which were not evicted during DISCARD. + Skip the assertion on zip_size. */ + break; case BUF_GET_NO_LATCH: ut_ad(rw_latch == RW_NO_LATCH); - break; + /* fall through */ case BUF_GET: case BUF_GET_IF_IN_POOL: case BUF_PEEK_IF_IN_POOL: case BUF_GET_IF_IN_POOL_OR_WATCH: case BUF_GET_POSSIBLY_FREED: + ut_ad(zip_size == fil_space_get_zip_size(space)); break; default: ut_error; } #endif /* UNIV_DEBUG */ - ut_ad(zip_size == fil_space_get_zip_size(space)); ut_ad(ut_is_2pow(zip_size)); #ifndef UNIV_LOG_DEBUG - ut_ad(!ibuf_inside(mtr) + ut_ad(!mtr || !ibuf_inside(mtr) || ibuf_page_low(space, zip_size, offset, FALSE, file, line, NULL)); #endif @@ -3020,9 +3161,11 @@ rw_lock_x_unlock(hash_lock); } - if (mode == BUF_GET_IF_IN_POOL - || mode == BUF_PEEK_IF_IN_POOL - || mode == BUF_GET_IF_IN_POOL_OR_WATCH) { + switch (mode) { + case BUF_GET_IF_IN_POOL: + case BUF_GET_IF_IN_POOL_OR_WATCH: + case BUF_PEEK_IF_IN_POOL: + case BUF_EVICT_IF_IN_POOL: #ifdef UNIV_SYNC_DEBUG ut_ad(!rw_lock_own(hash_lock, RW_LOCK_EX)); ut_ad(!rw_lock_own(hash_lock, RW_LOCK_SHARED)); @@ -3111,8 +3254,10 @@ ut_ad(page_zip_get_size(&block->page.zip) == zip_size); - if (mode == BUF_GET_IF_IN_POOL || mode == BUF_PEEK_IF_IN_POOL) { - + switch (mode) { + case BUF_GET_IF_IN_POOL: + case BUF_PEEK_IF_IN_POOL: + case BUF_EVICT_IF_IN_POOL: bool must_read; { @@ -3141,6 +3286,19 @@ buf_page_t* bpage; case BUF_BLOCK_FILE_PAGE: + if (UNIV_UNLIKELY(mode == BUF_EVICT_IF_IN_POOL)) { +evict_from_pool: + ut_ad(!fix_block->page.oldest_modification); + buf_pool_mutex_enter(buf_pool); + buf_block_unfix(fix_block); + + if (!buf_LRU_free_page(&fix_block->page, true)) { + ut_ad(0); + } + + buf_pool_mutex_exit(buf_pool); + return(NULL); + } break; case BUF_BLOCK_ZIP_PAGE: @@ -3173,6 +3331,10 @@ goto loop; } + if (UNIV_UNLIKELY(mode == BUF_EVICT_IF_IN_POOL)) { + goto evict_from_pool; + } + /* Buffer-fix the block so that it cannot be evicted or relocated while we are attempting to allocate an uncompressed page. */ @@ -4716,7 +4878,7 @@ if (err != DB_SUCCESS) { /* Not a real corruption if it was triggered by error injection */ - DBUG_EXECUTE_IF("buf_page_is_corrupt_failure", + DBUG_EXECUTE_IF("buf_page_import_corrupt_failure", if (bpage->space > TRX_SYS_SPACE) { buf_mark_space_corrupt(bpage); ib_logf(IB_LOG_LEVEL_INFO, @@ -4739,8 +4901,8 @@ space->name, bpage->space, bpage->offset); - buf_page_print(frame, buf_page_get_zip_size(bpage), - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(frame, + buf_page_get_zip_size(bpage)); ib_logf(IB_LOG_LEVEL_INFO, "It is also possible that your" @@ -4772,7 +4934,7 @@ } } - DBUG_EXECUTE_IF("buf_page_is_corrupt_failure", + DBUG_EXECUTE_IF("buf_page_import_corrupt_failure", page_not_corrupt: bpage = bpage; ); if (recv_recovery_is_on()) { @@ -6352,3 +6514,4 @@ ut_ad(space->n_pending_ios > 0); return (success); } +#endif /* !UNIV_INNOCHECKSUM */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/buf/buf0checksum.cc mariadb-10.1-10.1.30/storage/innobase/buf/buf0checksum.cc --- mariadb-10.1-10.1.25/storage/innobase/buf/buf0checksum.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/buf/buf0checksum.cc 2017-12-21 15:48:50.000000000 +0000 @@ -128,8 +128,6 @@ return(checksum); } -#ifndef UNIV_INNOCHECKSUM - /********************************************************************//** Return a printable string describing the checksum algorithm. @return algorithm name */ @@ -158,4 +156,3 @@ return(NULL); } -#endif /* !UNIV_INNOCHECKSUM */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/buf/buf0dblwr.cc mariadb-10.1-10.1.30/storage/innobase/buf/buf0dblwr.cc --- mariadb-10.1-10.1.25/storage/innobase/buf/buf0dblwr.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/buf/buf0dblwr.cc 2017-12-21 15:48:50.000000000 +0000 @@ -616,7 +616,7 @@ if (page_no == 0) { /* Check the FSP_SPACE_FLAGS. */ ulint flags = fsp_header_get_flags(page); - if (!fsp_flags_is_valid(flags) + if (!fsp_flags_is_valid(flags, space_id) && fsp_flags_convert_from_101(flags) == ULINT_UNDEFINED) { ib_logf(IB_LOG_LEVEL_WARN, @@ -800,7 +800,7 @@ /*==============================*/ const buf_block_t* block) /*!< in: block to check */ { - buf_page_print(block->frame, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(block->frame, 0); ut_print_timestamp(stderr); fprintf(stderr, diff -Nru mariadb-10.1-10.1.25/storage/innobase/buf/buf0dump.cc mariadb-10.1-10.1.30/storage/innobase/buf/buf0dump.cc --- mariadb-10.1-10.1.25/storage/innobase/buf/buf0dump.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/buf/buf0dump.cc 2017-12-21 15:48:50.000000000 +0000 @@ -41,6 +41,7 @@ #include "sync0rw.h" /* rw_lock_s_lock() */ #include "ut0byte.h" /* ut_ull_create() */ #include "ut0sort.h" /* UT_SORT_FUNCTION_BODY */ +#include "mysql/service_wsrep.h" /* wsrep_recovery */ enum status_severity { STATUS_INFO, @@ -692,7 +693,14 @@ buf_load_status(STATUS_INFO, "Loading buffer pool(s) not yet started"); if (srv_buffer_pool_load_at_startup) { - buf_load(); + +#ifdef WITH_WSREP + if (!wsrep_recovery) { +#endif /* WITH_WSREP */ + buf_load(); +#ifdef WITH_WSREP + } +#endif /* WITH_WSREP */ } while (!SHUTTING_DOWN()) { @@ -716,8 +724,15 @@ } if (srv_buffer_pool_dump_at_shutdown && srv_fast_shutdown != 2) { +#ifdef WITH_WSREP + if (!wsrep_recovery) { +#endif /* WITH_WSREP */ + buf_dump(FALSE /* ignore shutdown down flag, keep going even if we are in a shutdown state */); +#ifdef WITH_WSREP + } +#endif /* WITH_WSREP */ } srv_buf_dump_thread_active = false; diff -Nru mariadb-10.1-10.1.25/storage/innobase/buf/buf0flu.cc mariadb-10.1-10.1.30/storage/innobase/buf/buf0flu.cc --- mariadb-10.1-10.1.25/storage/innobase/buf/buf0flu.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/buf/buf0flu.cc 2017-12-21 15:48:50.000000000 +0000 @@ -715,7 +715,6 @@ srv_checksum_algorithm))); mach_write_to_8(page + FIL_PAGE_LSN, lsn); - memset(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION, 0, 8); mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM, checksum); } @@ -894,8 +893,6 @@ bpage->newest_modification); ut_a(page_zip_verify_checksum(frame, zip_size)); - - memset(frame + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION, 0, 8); break; case BUF_BLOCK_FILE_PAGE: frame = bpage->zip.data; diff -Nru mariadb-10.1-10.1.25/storage/innobase/buf/buf0lru.cc mariadb-10.1-10.1.30/storage/innobase/buf/buf0lru.cc --- mariadb-10.1-10.1.25/storage/innobase/buf/buf0lru.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/buf/buf0lru.cc 2017-12-21 15:48:50.000000000 +0000 @@ -528,26 +528,20 @@ return(processed); } -/******************************************************************//** -Remove all dirty pages belonging to a given tablespace inside a specific +/** Remove all dirty pages belonging to a given tablespace inside a specific buffer pool instance when we are deleting the data file(s) of that tablespace. The pages still remain a part of LRU and are evicted from the list as they age towards the tail of the LRU. +@param[in,out] buf_pool buffer pool +@param[in] id tablespace identifier +@param[in] trx transaction (to check for interrupt), + or NULL if the files should not be written to @retval DB_SUCCESS if all freed @retval DB_FAIL if not all freed @retval DB_INTERRUPTED if the transaction was interrupted */ static MY_ATTRIBUTE((nonnull(1), warn_unused_result)) dberr_t -buf_flush_or_remove_pages( -/*======================*/ - buf_pool_t* buf_pool, /*!< buffer pool instance */ - ulint id, /*!< in: target space id for which - to remove or flush pages */ - bool flush, /*!< in: flush to disk if true but - don't remove else remove without - flushing to disk */ - const trx_t* trx) /*!< to check if the operation must - be interrupted, can be 0 */ +buf_flush_or_remove_pages(buf_pool_t* buf_pool, ulint id, const trx_t* trx) { buf_page_t* prev; buf_page_t* bpage; @@ -574,7 +568,7 @@ /* Skip this block, as it does not belong to the target space. */ - } else if (!buf_flush_or_remove_page(buf_pool, bpage, flush)) { + } else if (!buf_flush_or_remove_page(buf_pool, bpage, trx)) { /* Remove was unsuccessful, we have to try again by scanning the entire list from the end. @@ -597,7 +591,7 @@ iteration. */ all_freed = false; - } else if (flush) { + } else if (trx) { /* The processing was successful. And during the processing we have released the buf_pool mutex @@ -616,19 +610,17 @@ processed = 0; } -#ifdef DBUG_OFF - if (flush) { + if (trx) { DBUG_EXECUTE_IF("ib_export_flush_crash", static ulint n_pages; if (++n_pages == 4) {DBUG_SUICIDE();}); - } -#endif /* DBUG_OFF */ - /* The check for trx is interrupted is expensive, we want - to check every N iterations. */ - if (!processed && trx && trx_is_interrupted(trx)) { - buf_flush_list_mutex_exit(buf_pool); - return(DB_INTERRUPTED); + /* The check for trx is interrupted is + expensive, we want to check every N iterations. */ + if (!processed && trx_is_interrupted(trx)) { + buf_flush_list_mutex_exit(buf_pool); + return(DB_INTERRUPTED); + } } } @@ -637,28 +629,25 @@ return(all_freed ? DB_SUCCESS : DB_FAIL); } -/******************************************************************//** -Remove or flush all the dirty pages that belong to a given tablespace +/** Remove or flush all the dirty pages that belong to a given tablespace inside a specific buffer pool instance. The pages will remain in the LRU list and will be evicted from the LRU list as they age and move towards -the tail of the LRU list. */ +the tail of the LRU list. +@param[in,out] buf_pool buffer pool +@param[in] id tablespace identifier +@param[in] trx transaction (to check for interrupt), + or NULL if the files should not be written to +*/ static MY_ATTRIBUTE((nonnull(1))) void -buf_flush_dirty_pages( -/*==================*/ - buf_pool_t* buf_pool, /*!< buffer pool instance */ - ulint id, /*!< in: space id */ - bool flush, /*!< in: flush to disk if true otherwise - remove the pages without flushing */ - const trx_t* trx) /*!< to check if the operation must - be interrupted */ +buf_flush_dirty_pages(buf_pool_t* buf_pool, ulint id, const trx_t* trx) { dberr_t err; do { buf_pool_mutex_enter(buf_pool); - err = buf_flush_or_remove_pages(buf_pool, id, flush, trx); + err = buf_flush_or_remove_pages(buf_pool, id, trx); buf_pool_mutex_exit(buf_pool); @@ -679,231 +668,27 @@ || buf_pool_get_dirty_pages_count(buf_pool, id) == 0); } -/******************************************************************//** -Remove all pages that belong to a given tablespace inside a specific -buffer pool instance when we are DISCARDing the tablespace. */ -static MY_ATTRIBUTE((nonnull)) +/** Empty the flush list for all pages belonging to a tablespace. +@param[in] id tablespace identifier +@param[in] trx transaction, for checking for user interrupt; + or NULL if nothing is to be written +@param[in] drop_ahi whether to drop the adaptive hash index */ +UNIV_INTERN void -buf_LRU_remove_all_pages( -/*=====================*/ - buf_pool_t* buf_pool, /*!< buffer pool instance */ - ulint id) /*!< in: space id */ +buf_LRU_flush_or_remove_pages(ulint id, const trx_t* trx, bool drop_ahi) { - buf_page_t* bpage; - ibool all_freed; - -scan_again: - buf_pool_mutex_enter(buf_pool); - - all_freed = TRUE; - - for (bpage = UT_LIST_GET_LAST(buf_pool->LRU); - bpage != NULL; - /* No op */) { - - rw_lock_t* hash_lock; - buf_page_t* prev_bpage; - ib_mutex_t* block_mutex = NULL; - - ut_a(buf_page_in_file(bpage)); - ut_ad(bpage->in_LRU_list); - - prev_bpage = UT_LIST_GET_PREV(LRU, bpage); - - /* bpage->space and bpage->io_fix are protected by - buf_pool->mutex and the block_mutex. It is safe to check - them while holding buf_pool->mutex only. */ - - if (buf_page_get_space(bpage) != id) { - /* Skip this block, as it does not belong to - the space that is being invalidated. */ - goto next_page; - } else if (buf_page_get_io_fix(bpage) != BUF_IO_NONE) { - /* We cannot remove this page during this scan - yet; maybe the system is currently reading it - in, or flushing the modifications to the file */ - - all_freed = FALSE; - goto next_page; - } else { - ulint fold = buf_page_address_fold( - bpage->space, bpage->offset); - - hash_lock = buf_page_hash_lock_get(buf_pool, fold); - - rw_lock_x_lock(hash_lock); - - block_mutex = buf_page_get_mutex(bpage); - mutex_enter(block_mutex); - - if (bpage->buf_fix_count > 0) { - - mutex_exit(block_mutex); - - rw_lock_x_unlock(hash_lock); - - /* We cannot remove this page during - this scan yet; maybe the system is - currently reading it in, or flushing - the modifications to the file */ - - all_freed = FALSE; - - goto next_page; - } - } - - ut_ad(mutex_own(block_mutex)); - -#ifdef UNIV_DEBUG - if (buf_debug_prints) { - fprintf(stderr, - "Dropping space %lu page %lu\n", - (ulong) buf_page_get_space(bpage), - (ulong) buf_page_get_page_no(bpage)); - } -#endif - if (buf_page_get_state(bpage) != BUF_BLOCK_FILE_PAGE) { - /* Do nothing, because the adaptive hash index - covers uncompressed pages only. */ - } else if (((buf_block_t*) bpage)->index) { - ulint page_no; - ulint zip_size; - - buf_pool_mutex_exit(buf_pool); - - zip_size = buf_page_get_zip_size(bpage); - page_no = buf_page_get_page_no(bpage); - - rw_lock_x_unlock(hash_lock); - - mutex_exit(block_mutex); - - /* Note that the following call will acquire - and release block->lock X-latch. */ - - btr_search_drop_page_hash_when_freed( - id, zip_size, page_no); - - goto scan_again; - } - - if (bpage->oldest_modification != 0) { - - buf_flush_remove(bpage); - } - - ut_ad(!bpage->in_flush_list); - - /* Remove from the LRU list. */ - - if (buf_LRU_block_remove_hashed(bpage, true)) { - buf_LRU_block_free_hashed_page((buf_block_t*) bpage); - } else { - ut_ad(block_mutex == &buf_pool->zip_mutex); + for (ulint i = 0; i < srv_buf_pool_instances; i++) { + buf_pool_t* buf_pool = buf_pool_from_array(i); + if (drop_ahi) { + buf_LRU_drop_page_hash_for_tablespace(buf_pool, id); } - - ut_ad(!mutex_own(block_mutex)); - -#ifdef UNIV_SYNC_DEBUG - /* buf_LRU_block_remove_hashed() releases the hash_lock */ - ut_ad(!rw_lock_own(hash_lock, RW_LOCK_EX)); - ut_ad(!rw_lock_own(hash_lock, RW_LOCK_SHARED)); -#endif /* UNIV_SYNC_DEBUG */ - -next_page: - bpage = prev_bpage; + buf_flush_dirty_pages(buf_pool, id, trx); } - buf_pool_mutex_exit(buf_pool); - - if (!all_freed) { - os_thread_sleep(20000); - - goto scan_again; - } -} - -/******************************************************************//** -Remove pages belonging to a given tablespace inside a specific -buffer pool instance when we are deleting the data file(s) of that -tablespace. The pages still remain a part of LRU and are evicted from -the list as they age towards the tail of the LRU only if buf_remove -is BUF_REMOVE_FLUSH_NO_WRITE. */ -static MY_ATTRIBUTE((nonnull(1))) -void -buf_LRU_remove_pages( -/*=================*/ - buf_pool_t* buf_pool, /*!< buffer pool instance */ - ulint id, /*!< in: space id */ - buf_remove_t buf_remove, /*!< in: remove or flush strategy */ - const trx_t* trx) /*!< to check if the operation must - be interrupted */ -{ - switch (buf_remove) { - case BUF_REMOVE_ALL_NO_WRITE: - buf_LRU_remove_all_pages(buf_pool, id); - break; - - case BUF_REMOVE_FLUSH_NO_WRITE: - ut_a(trx == 0); - buf_flush_dirty_pages(buf_pool, id, false, NULL); - break; - - case BUF_REMOVE_FLUSH_WRITE: - ut_a(trx != 0); - buf_flush_dirty_pages(buf_pool, id, true, trx); + if (trx && !trx_is_interrupted(trx)) { /* Ensure that all asynchronous IO is completed. */ os_aio_wait_until_no_pending_writes(); fil_flush(id); - break; - } -} - -/******************************************************************//** -Flushes all dirty pages or removes all pages belonging -to a given tablespace. A PROBLEM: if readahead is being started, what -guarantees that it will not try to read in pages after this operation -has completed? */ -UNIV_INTERN -void -buf_LRU_flush_or_remove_pages( -/*==========================*/ - ulint id, /*!< in: space id */ - buf_remove_t buf_remove, /*!< in: remove or flush strategy */ - const trx_t* trx) /*!< to check if the operation must - be interrupted */ -{ - ulint i; - - /* Before we attempt to drop pages one by one we first - attempt to drop page hash index entries in batches to make - it more efficient. The batching attempt is a best effort - attempt and does not guarantee that all pages hash entries - will be dropped. We get rid of remaining page hash entries - one by one below. */ - for (i = 0; i < srv_buf_pool_instances; i++) { - buf_pool_t* buf_pool; - - buf_pool = buf_pool_from_array(i); - - switch (buf_remove) { - case BUF_REMOVE_ALL_NO_WRITE: - buf_LRU_drop_page_hash_for_tablespace(buf_pool, id); - break; - - case BUF_REMOVE_FLUSH_NO_WRITE: - /* It is a DROP TABLE for a single table - tablespace. No AHI entries exist because - we already dealt with them when freeing up - extents. */ - case BUF_REMOVE_FLUSH_WRITE: - /* We allow read-only queries against the - table, there is no need to drop the AHI entries. */ - break; - } - - buf_LRU_remove_pages(buf_pool, id, buf_remove, trx); } } diff -Nru mariadb-10.1-10.1.25/storage/innobase/buf/buf0rea.cc mariadb-10.1-10.1.30/storage/innobase/buf/buf0rea.cc --- mariadb-10.1-10.1.25/storage/innobase/buf/buf0rea.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/buf/buf0rea.cc 2017-12-21 15:48:50.000000000 +0000 @@ -378,13 +378,14 @@ space, i); break; case DB_DECRYPTION_FAILED: + case DB_PAGE_CORRUPTED: ib_logf(IB_LOG_LEVEL_ERROR, - "Random readahead failed to decrypt page " - ULINTPF "." ULINTPF " .", + "Random readahead failed to decrypt page or page corrupted " + ULINTPF ":" ULINTPF " .", space, i); break; default: - ut_error; + ib_logf(IB_LOG_LEVEL_FATAL, "Error %u (%s) in random readahead", err, ut_strerr(err)); } } } @@ -514,15 +515,15 @@ " in nonexisting or being-dropped tablespace", space, offset); break; - case DB_DECRYPTION_FAILED: + case DB_PAGE_CORRUPTED: ib_logf(IB_LOG_LEVEL_ERROR, - "Async page read failed to decrypt page " + "Async page read failed to decrypt page or page corrupted " ULINTPF ":" ULINTPF ".", space, offset); break; default: - ut_error; + ib_logf(IB_LOG_LEVEL_FATAL, "Error %u (%s) in async page read", err, ut_strerr(err)); } srv_stats.buf_pool_reads.add(count); @@ -798,13 +799,14 @@ space, i); break; case DB_DECRYPTION_FAILED: + case DB_PAGE_CORRUPTED: ib_logf(IB_LOG_LEVEL_ERROR, - "Linear readahead failed to decrypt page " + "Linear readahead failed to decrypt page or page corrupted" ULINTPF ":" ULINTPF ".", space, i); break; default: - ut_error; + ib_logf(IB_LOG_LEVEL_FATAL, "Error %u (%s) in linear readahead", err, ut_strerr(err)); } } } @@ -901,13 +903,14 @@ zip_size, FALSE); break; case DB_DECRYPTION_FAILED: + case DB_PAGE_CORRUPTED: ib_logf(IB_LOG_LEVEL_ERROR, - "Failed to decrypt insert buffer page " + "Failed to decrypt insert buffer page or page corrupted " ULINTPF ":" ULINTPF ".", space_ids[i], page_nos[i]); break; default: - ut_error; + ib_logf(IB_LOG_LEVEL_FATAL, "Error %u (%s) in insert buffer read", err, ut_strerr(err)); } } diff -Nru mariadb-10.1-10.1.25/storage/innobase/CMakeLists.txt mariadb-10.1-10.1.30/storage/innobase/CMakeLists.txt --- mariadb-10.1-10.1.25/storage/innobase/CMakeLists.txt 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/CMakeLists.txt 2017-12-21 15:48:50.000000000 +0000 @@ -85,10 +85,16 @@ CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU) IF(NOT MSVC) + + CHECK_FUNCTION_EXISTS(posix_memalign HAVE_POSIX_MEMALIGN) + IF(HAVE_POSIX_MEMALIGN) + ADD_DEFINITIONS(-DHAVE_POSIX_MEMALIGN) + ENDIF() + # either define HAVE_IB_GCC_ATOMIC_BUILTINS or not - # workaround for gcc 4.1.2 RHEL5/x86, gcc atomic ops only work under -march=i686 + # workaround for old gcc on x86, gcc atomic ops only work under -march=i686 IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686" AND CMAKE_COMPILER_IS_GNUCC AND - CMAKE_C_COMPILER_VERSION VERSION_LESS "4.1.3") + CMAKE_C_COMPILER_VERSION VERSION_LESS "4.4.0") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i686") ENDIF() diff -Nru mariadb-10.1-10.1.25/storage/innobase/dict/dict0crea.cc mariadb-10.1-10.1.30/storage/innobase/dict/dict0crea.cc --- mariadb-10.1-10.1.25/storage/innobase/dict/dict0crea.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/dict/dict0crea.cc 2017-12-21 15:48:50.000000000 +0000 @@ -100,6 +100,7 @@ | ((table->flags & DICT_TF_COMPACT) << 31)); dfield_set_data(dfield, ptr, 4); + /* 5: TYPE (table flags) -----------------------------*/ dfield = dtuple_get_nth_field( entry, DICT_COL__SYS_TABLES__TYPE); diff -Nru mariadb-10.1-10.1.25/storage/innobase/dict/dict0dict.cc mariadb-10.1-10.1.30/storage/innobase/dict/dict0dict.cc --- mariadb-10.1-10.1.25/storage/innobase/dict/dict0dict.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/dict/dict0dict.cc 2017-12-21 15:48:50.000000000 +0000 @@ -570,15 +570,14 @@ ut_ad(mutex_own(&dict_sys->mutex)); ut_a(table->n_ref_count > 0); - --table->n_ref_count; + const bool last_handle = !--table->n_ref_count; /* Force persistent stats re-read upon next open of the table so that FLUSH TABLE can be used to forcibly fetch stats from disk if they have been manually modified. We reset table->stat_initialized only if table reference count is 0 because we do not want too frequent stats re-reads (e.g. in other cases than FLUSH TABLE). */ - if (strchr(table->name, '/') != NULL - && table->n_ref_count == 0 + if (last_handle && strchr(table->name, '/') != NULL && dict_stats_is_persistent_enabled(table)) { dict_stats_deinit(table); @@ -598,11 +597,8 @@ if (!dict_locked) { table_id_t table_id = table->id; - ibool drop_aborted; - - drop_aborted = try_drop + const bool drop_aborted = last_handle && try_drop && table->drop_aborted - && table->n_ref_count == 1 && dict_table_get_first_index(table); mutex_exit(&dict_sys->mutex); @@ -642,40 +638,6 @@ return(s); } -/**********************************************************************//** -Returns a column's name. -@return column name. NOTE: not guaranteed to stay valid if table is -modified in any way (columns added, etc.). */ -UNIV_INTERN -const char* -dict_table_get_col_name_for_mysql( -/*==============================*/ - const dict_table_t* table, /*!< in: table */ - const char* col_name)/*! in: MySQL table column name */ -{ - ulint i; - const char* s; - - ut_ad(table); - ut_ad(col_name); - ut_ad(table->magic_n == DICT_TABLE_MAGIC_N); - - s = table->col_names; - if (s) { - /* If we have many virtual columns MySQL key_part->fieldnr - could be larger than number of columns in InnoDB table - when creating new indexes. */ - for (i = 0; i < table->n_def; i++) { - - if (!innobase_strcasecmp(s, col_name)) { - break; /* Found */ - } - s += strlen(s) + 1; - } - } - - return(s); -} #ifndef UNIV_HOTBACKUP /** Allocate and init the autoinc latch of a given table. This function must not be called concurrently on the same table object. @@ -1389,9 +1351,6 @@ dict_table_autoinc_restore(table); ut_ad(dict_lru_validate()); - - dict_sys->size += mem_heap_get_size(table->heap) - + strlen(table->name) + 1; } /**********************************************************************//** @@ -1714,7 +1673,7 @@ filepath = fil_make_ibd_name(table->name, false); } - fil_delete_tablespace(table->space, BUF_REMOVE_ALL_NO_WRITE); + fil_delete_tablespace(table->space, true); /* Delete any temp file hanging around. */ if (os_file_status(filepath, &exists, &ftype) @@ -1806,9 +1765,6 @@ HASH_INSERT(dict_table_t, name_hash, dict_sys->table_hash, fold, table); - dict_sys->size += strlen(new_name) - strlen(old_name); - ut_a(dict_sys->size > 0); - /* Update the table_name field in indexes */ for (index = dict_table_get_first_index(table); index != NULL; @@ -2095,7 +2051,6 @@ { dict_foreign_t* foreign; dict_index_t* index; - ulint size; ut_ad(table); ut_ad(dict_lru_validate()); @@ -2152,8 +2107,9 @@ } if (lru_evict && table->drop_aborted) { - /* Do as dict_table_try_drop_aborted() does. */ - + /* When evicting the table definition, + drop the orphan indexes from the data dictionary + and free the index pages. */ trx_t* trx = trx_allocate_for_background(); ut_ad(mutex_own(&dict_sys->mutex)); @@ -2164,23 +2120,12 @@ trx->dict_operation_lock_mode = RW_X_LATCH; trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); - - /* Silence a debug assertion in row_merge_drop_indexes(). */ - ut_d(table->n_ref_count++); - row_merge_drop_indexes(trx, table, TRUE); - ut_d(table->n_ref_count--); - ut_ad(table->n_ref_count == 0); + row_merge_drop_indexes_dict(trx, table->id); trx_commit_for_mysql(trx); trx->dict_operation_lock_mode = 0; trx_free_for_background(trx); } - size = mem_heap_get_size(table->heap) + strlen(table->name) + 1; - - ut_ad(dict_sys->size >= size); - - dict_sys->size -= size; - dict_mem_table_free(table); } @@ -2424,9 +2369,13 @@ rec_max_size = 2; } else { /* The maximum allowed record size is half a B-tree - page. No additional sparse page directory entry will - be generated for the first few user records. */ - page_rec_max = page_get_free_space_of_empty(comp) / 2; + page(16k for 64k page size). No additional sparse + page directory entry will be generated for the first + few user records. */ + page_rec_max = (comp || UNIV_PAGE_SIZE < UNIV_PAGE_SIZE_MAX) + ? page_get_free_space_of_empty(comp) / 2 + : REDUNDANT_REC_MAX_DATA_SIZE; + page_ptr_max = page_rec_max; /* Each record has a header. */ rec_max_size = comp @@ -2510,7 +2459,6 @@ /* Check the size limit on leaf pages. */ if (UNIV_UNLIKELY(rec_max_size >= page_rec_max)) { - return(TRUE); } @@ -2723,8 +2671,6 @@ dict_index_is_ibuf(index) ? SYNC_IBUF_INDEX_TREE : SYNC_INDEX_TREE); - dict_sys->size += mem_heap_get_size(new_index->heap); - dict_mem_index_free(index); return(DB_SUCCESS); @@ -2741,7 +2687,6 @@ ibool lru_evict) /*!< in: TRUE if index being evicted to make room in the table LRU list */ { - ulint size; ulint retries = 0; btr_search_t* info; @@ -2809,12 +2754,6 @@ /* Remove the index from the list of indexes of the table */ UT_LIST_REMOVE(indexes, table->indexes, index); - size = mem_heap_get_size(index->heap); - - ut_ad(dict_sys->size >= size); - - dict_sys->size -= size; - dict_mem_index_free(index); } @@ -7324,3 +7263,38 @@ return(0); } #endif /* !UNIV_HOTBACKUP */ + +/** Calculate the used memory occupied by the data dictionary +table and index objects. +@return number of bytes occupied. */ +UNIV_INTERN +ulint +dict_sys_get_size() +{ + ulint size = 0; + + ut_ad(dict_sys); + + mutex_enter(&dict_sys->mutex); + + for(ulint i = 0; i < hash_get_n_cells(dict_sys->table_hash); i++) { + dict_table_t* table; + + for (table = static_cast(HASH_GET_FIRST(dict_sys->table_hash,i)); + table != NULL; + table = static_cast(HASH_GET_NEXT(name_hash, table))) { + dict_index_t* index; + size += mem_heap_get_size(table->heap) + strlen(table->name) +1; + + for(index = dict_table_get_first_index(table); + index != NULL; + index = dict_table_get_next_index(index)) { + size += mem_heap_get_size(index->heap); + } + } + } + + mutex_exit(&dict_sys->mutex); + + return (size); +} diff -Nru mariadb-10.1-10.1.25/storage/innobase/dict/dict0stats_bg.cc mariadb-10.1-10.1.30/storage/innobase/dict/dict0stats_bg.cc --- mariadb-10.1-10.1.25/storage/innobase/dict/dict0stats_bg.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/dict/dict0stats_bg.cc 2017-12-21 15:48:51.000000000 +0000 @@ -336,7 +336,7 @@ unlocking/locking the data dict */ { while (!dict_stats_stop_bg(table)) { - DICT_STATS_BG_YIELD(trx); + DICT_BG_YIELD(trx); } } @@ -478,7 +478,6 @@ static void dict_stats_process_entry_from_defrag_pool() -/*=======================================*/ { table_id_t table_id; index_id_t index_id; @@ -500,31 +499,19 @@ table = dict_table_open_on_id(table_id, TRUE, DICT_TABLE_OP_OPEN_ONLY_IF_CACHED); - if (table == NULL) { + dict_index_t* index = table && !table->corrupted + ? dict_table_find_index_on_id(table, index_id) + : NULL; + + if (!index || dict_index_is_corrupted(index)) { + if (table) { + dict_table_close(table, TRUE, FALSE); + } mutex_exit(&dict_sys->mutex); return; } - /* Check whether table is corrupted */ - if (table->corrupted) { - dict_table_close(table, TRUE, FALSE); - mutex_exit(&dict_sys->mutex); - return; - } mutex_exit(&dict_sys->mutex); - - dict_index_t* index = dict_table_find_index_on_id(table, index_id); - - if (index == NULL) { - return; - } - - /* Check whether index is corrupted */ - if (dict_index_is_corrupted(index)) { - dict_table_close(table, FALSE, FALSE); - return; - } - dict_stats_save_defrag_stats(index); dict_table_close(table, FALSE, FALSE); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/fil/fil0crypt.cc mariadb-10.1-10.1.30/storage/innobase/fil/fil0crypt.cc --- mariadb-10.1-10.1.25/storage/innobase/fil/fil0crypt.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/fil/fil0crypt.cc 2017-12-21 15:48:51.000000000 +0000 @@ -25,13 +25,18 @@ #include "fil0fil.h" #include "fil0crypt.h" +#include "mach0data.h" +#include "page0zip.h" +#include "buf0buf.h" +#include "buf0checksum.h" + +#ifndef UNIV_INNOCHECKSUM + #include "srv0srv.h" #include "srv0start.h" -#include "mach0data.h" #include "log0recv.h" #include "mtr0mtr.h" #include "mtr0log.h" -#include "page0zip.h" #include "ut0ut.h" #include "btr0scrub.h" #include "fsp0fsp.h" @@ -107,13 +112,20 @@ extern my_bool srv_background_scrub_data_uncompressed; extern my_bool srv_background_scrub_data_compressed; +/*********************************************************************** +Check if a key needs rotation given a key_state +@param[in] encrypt_mode Encryption mode +@param[in] key_version Current key version +@param[in] latest_key_version Latest key version +@param[in] rotate_key_age when to rotate +@return true if key needs rotation, false if not */ static bool fil_crypt_needs_rotation( - fil_encryption_t encrypt_mode, /*!< in: Encryption - mode */ - uint key_version, /*!< in: Key version */ - uint latest_key_version, /*!< in: Latest key version */ - uint rotate_key_age); /*!< in: When to rotate */ + fil_encryption_t encrypt_mode, + uint key_version, + uint latest_key_version, + uint rotate_key_age) + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************* Init space crypt */ @@ -179,7 +191,12 @@ crypt_data->min_key_version, key_version, srv_fil_crypt_rotate_key_age)) { - os_event_set(fil_crypt_threads_event); + /* Below event seen as NULL-pointer at startup + when new database was created and we create a + checkpoint. Only seen when debugging. */ + if (fil_crypt_threads_inited) { + os_event_set(fil_crypt_threads_event); + } } } @@ -725,11 +742,12 @@ fprintf(stderr, "ok %d corrupted %d corrupted1 %d err %d different %d\n", ok , corrupted, corrupted1, err, different); fprintf(stderr, "src_frame\n"); - buf_page_print(src_frame, zip_size, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(src_frame, zip_size); fprintf(stderr, "encrypted_frame\n"); - buf_page_print(tmp, zip_size, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(tmp, zip_size); fprintf(stderr, "decrypted_frame\n"); - buf_page_print(tmp_mem, zip_size, 0); + buf_page_print(tmp_mem, zip_size); + ut_ad(0); } free(tmp_mem); @@ -908,137 +926,6 @@ return checksum; } -/********************************************************************* -Verify that post encryption checksum match calculated checksum. -This function should be called only if tablespace contains crypt_data -metadata (this is strong indication that tablespace is encrypted). -Function also verifies that traditional checksum does not match -calculated checksum as if it does page could be valid unencrypted, -encrypted, or corrupted. - -@param[in] page Page to verify -@param[in] zip_size zip size -@param[in] space Tablespace -@param[in] pageno Page no -@return true if page is encrypted AND OK, false otherwise */ -UNIV_INTERN -bool -fil_space_verify_crypt_checksum( - byte* page, - ulint zip_size, - const fil_space_t* space, - ulint pageno) -{ - uint key_version = mach_read_from_4(page+ FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); - - /* If page is not encrypted, return false */ - if (key_version == 0) { - return(false); - } - - /* Read stored post encryption checksum. */ - ib_uint32_t checksum = mach_read_from_4( - page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION + 4); - - /* Declare empty pages non-corrupted */ - if (checksum == 0 - && *reinterpret_cast(page + FIL_PAGE_LSN) == 0 - && buf_page_is_zeroes(page, zip_size)) { - return(true); - } - - /* Compressed and encrypted pages do not have checksum. Assume not - corrupted. Page verification happens after decompression in - buf_page_io_complete() using buf_page_is_corrupted(). */ - if (mach_read_from_2(page+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { - return (true); - } - - ib_uint32_t cchecksum1 = 0; - ib_uint32_t cchecksum2 = 0; - - /* Calculate checksums */ - if (zip_size) { - cchecksum1 = page_zip_calc_checksum( - page, zip_size, SRV_CHECKSUM_ALGORITHM_CRC32); - - if(cchecksum1 != checksum) { - cchecksum2 = page_zip_calc_checksum( - page, zip_size, - SRV_CHECKSUM_ALGORITHM_INNODB); - } - } else { - cchecksum1 = buf_calc_page_crc32(page); - - if (cchecksum1 != checksum) { - cchecksum2 = (ib_uint32_t) buf_calc_page_new_checksum( - page); - } - } - - /* If stored checksum matches one of the calculated checksums - page is not corrupted. */ - - bool encrypted = (checksum == cchecksum1 || checksum == cchecksum2 - || checksum == BUF_NO_CHECKSUM_MAGIC); - - /* MySQL 5.6 and MariaDB 10.0 and 10.1 will write an LSN to the - first page of each system tablespace file at - FIL_PAGE_FILE_FLUSH_LSN offset. On other pages and in other files, - the field might have been uninitialized until MySQL 5.5. In MySQL 5.7 - (and MariaDB Server 10.2.2) WL#7990 stopped writing the field for other - than page 0 of the system tablespace. - - Starting from MariaDB 10.1 the field has been repurposed for - encryption key_version. - - Starting with MySQL 5.7 (and MariaDB Server 10.2), the - field has been repurposed for SPATIAL INDEX pages for - FIL_RTREE_SPLIT_SEQ_NUM. - - Note that FIL_PAGE_FILE_FLUSH_LSN is not included in the InnoDB page - checksum. - - Thus, FIL_PAGE_FILE_FLUSH_LSN could contain any value. While the - field would usually be 0 for pages that are not encrypted, we cannot - assume that a nonzero value means that the page is encrypted. - Therefore we must validate the page both as encrypted and unencrypted - when FIL_PAGE_FILE_FLUSH_LSN does not contain 0. - */ - - ulint checksum1 = mach_read_from_4( - page + FIL_PAGE_SPACE_OR_CHKSUM); - - ulint checksum2 = checksum1; - - bool valid; - - if (zip_size) { - valid = (checksum1 == cchecksum1); - } else { - checksum2 = mach_read_from_4( - page + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM); - valid = (buf_page_is_checksum_valid_crc32(page,checksum1,checksum2) - || buf_page_is_checksum_valid_innodb(page,checksum1, checksum2)); - } - - if (encrypted && valid) { - /* If page is encrypted and traditional checksums match, - page could be still encrypted, or not encrypted and valid or - corrupted. */ - ib_logf(IB_LOG_LEVEL_ERROR, - " Page %lu in space %s (%lu) maybe corrupted." - " Post encryption checksum %u stored [%lu:%lu] key_version %u", - pageno, - space ? space->name : "N/A", - mach_read_from_4(page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID), - checksum, checksum1, checksum2, key_version); - encrypted = false; - } - - return(encrypted); -} - /***********************************************************************/ /** A copy of global key state */ @@ -1517,7 +1404,7 @@ DBUG_PRINT("ib_crypt", ("thr_no: %u only waited %lu%% skip re-estimate.", state->thread_no, - (100 * state->cnt_waited) / state->batch)); + (100 * state->cnt_waited) / (state->batch ? state->batch : 1))); } if (state->estimated_max_iops <= state->allocated_iops) { @@ -1620,7 +1507,7 @@ /* we need iops to start rotating */ while (!state->should_shutdown() && !fil_crypt_alloc_iops(state)) { os_event_reset(fil_crypt_threads_event); - os_event_wait_time(fil_crypt_threads_event, 1000000); + os_event_wait_time(fil_crypt_threads_event, 100000); } if (state->should_shutdown()) { @@ -1768,20 +1655,6 @@ return found; } -/*********************************************************************** -Check if a page is uninitialized (doesn't need to be rotated) -@param[in] frame Page to check -@param[in] zip_size zip_size or 0 -@return true if page is uninitialized, false if not. */ -static inline -bool -fil_crypt_is_page_uninitialized( - const byte *frame, - uint zip_size) -{ - return (buf_page_is_zeroes(frame, zip_size)); -} - #define fil_crypt_get_page_throttle(state,offset,mtr,sleeptime_ms) \ fil_crypt_get_page_throttle_func(state, offset, mtr, \ sleeptime_ms, __FILE__, __LINE__) @@ -1942,6 +1815,7 @@ fil_space_crypt_t *crypt_data = space->crypt_data; ut_ad(space->n_pending_ops > 0); + ut_ad(offset > 0); /* In fil_crypt_thread where key rotation is done we have acquired space and checked that this space is not yet @@ -1970,31 +1844,40 @@ byte* frame = buf_block_get_frame(block); uint kv = mach_read_from_4(frame+FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); - /* check if tablespace is closing after reading page */ - if (!space->is_stopping()) { + if (space->is_stopping()) { + /* The tablespace is closing (in DROP TABLE or + TRUNCATE TABLE or similar): avoid further access */ + } else if (!*reinterpret_cast(FIL_PAGE_OFFSET + + frame)) { + /* It looks like this page was never + allocated. Because key rotation is accessing + pages in a pattern that is unlike the normal + B-tree and undo log access pattern, we cannot + invoke fseg_page_is_free() here, because that + could result in a deadlock. If we invoked + fseg_page_is_free() and released the + tablespace latch before acquiring block->lock, + then the fseg_page_is_free() information + could be stale already. */ + ut_ad(kv == 0); + ut_ad(page_get_space_id(frame) == 0); + } else if (fil_crypt_needs_rotation( + crypt_data->encryption, + kv, key_state->key_version, + key_state->rotate_key_age)) { + + modified = true; + + /* force rotation by dummy updating page */ + mlog_write_ulint(frame + FIL_PAGE_SPACE_ID, + space_id, MLOG_4BYTES, &mtr); - if (kv == 0 && - fil_crypt_is_page_uninitialized(frame, zip_size)) { - ; - } else if (fil_crypt_needs_rotation( - crypt_data->encryption, - kv, key_state->key_version, - key_state->rotate_key_age)) { - - modified = true; - - /* force rotation by dummy updating page */ - mlog_write_ulint(frame + - FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID, - space_id, MLOG_4BYTES, &mtr); - - /* statistics */ - state->crypt_stat.pages_modified++; - } else { - if (crypt_data->is_encrypted()) { - if (kv < state->min_key_version_found) { - state->min_key_version_found = kv; - } + /* statistics */ + state->crypt_stat.pages_modified++; + } else { + if (crypt_data->is_encrypted()) { + if (kv < state->min_key_version_found) { + state->min_key_version_found = kv; } } @@ -2245,7 +2128,8 @@ mutex_exit(&crypt_data->mutex); /* all threads must call btr_scrub_complete_space wo/ mutex held */ - if (btr_scrub_complete_space(&state->scrub_data) == true) { + if (state->scrub_data.scrubbing) { + btr_scrub_complete_space(&state->scrub_data); if (should_flush) { /* only last thread updates last_scrub_completed */ ut_ad(crypt_data); @@ -2421,7 +2305,7 @@ os_thread_create(fil_crypt_thread, NULL, &rotation_thread_id); ib_logf(IB_LOG_LEVEL_INFO, - "Creating #%d thread id %lu total threads %u.", + "Creating #%d encryption thread id %lu total threads %u.", i+1, os_thread_pf(rotation_thread_id), new_cnt); } } else if (new_cnt < srv_n_fil_crypt_threads) { @@ -2433,7 +2317,13 @@ while(srv_n_fil_crypt_threads_started != srv_n_fil_crypt_threads) { os_event_reset(fil_crypt_event); - os_event_wait_time(fil_crypt_event, 1000000); + os_event_wait_time(fil_crypt_event, 100000); + } + + /* Send a message to encryption threads that there could be + something to do. */ + if (srv_n_fil_crypt_threads) { + os_event_set(fil_crypt_threads_event); } } @@ -2555,8 +2445,9 @@ if (now >= last + 30) { ib_logf(IB_LOG_LEVEL_WARN, - "Waited %ld seconds to drop space: %s(" ULINTPF ").", - now - start, space->name, space->id); + "Waited %ld seconds to drop space: %s (" ULINTPF + ") active threads %u flushing=%d.", + now - start, space->name, space->id, cnt, flushing); last = now; } } @@ -2578,9 +2469,10 @@ ut_ad(space->n_pending_ops > 0); fil_crypt_read_crypt_data(const_cast(space)); - status->space = space->id; + status->space = ULINT_UNDEFINED; if (fil_space_crypt_t* crypt_data = space->crypt_data) { + status->space = space->id; mutex_enter(&crypt_data->mutex); status->scheme = crypt_data->type; status->keyserver_requests = crypt_data->keyserver_requests; @@ -2659,3 +2551,159 @@ mutex_exit(&crypt_data->mutex); } } + +#endif /* !UNIV_INNOCHECKSUM */ + +/********************************************************************* +Verify that post encryption checksum match calculated checksum. +This function should be called only if tablespace contains crypt_data +metadata (this is strong indication that tablespace is encrypted). +Function also verifies that traditional checksum does not match +calculated checksum as if it does page could be valid unencrypted, +encrypted, or corrupted. + +@param[in] page Page to verify +@param[in] zip_size zip size +@param[in] space Tablespace +@param[in] pageno Page no +@return true if page is encrypted AND OK, false otherwise */ +UNIV_INTERN +bool +fil_space_verify_crypt_checksum( + byte* page, + ulint zip_size, +#ifndef UNIV_INNOCHECKSUM + const fil_space_t* space, +#else + const void* space, +#endif + ulint pageno) +{ + uint key_version = mach_read_from_4(page+ FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + + /* If page is not encrypted, return false */ + if (key_version == 0) { + return(false); + } + + srv_checksum_algorithm_t algorithm = + static_cast(srv_checksum_algorithm); + + /* If no checksum is used, can't continue checking. */ + if (algorithm == SRV_CHECKSUM_ALGORITHM_NONE) { + return(true); + } + + /* Read stored post encryption checksum. */ + ib_uint32_t checksum = mach_read_from_4( + page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION + 4); + + /* Declare empty pages non-corrupted */ + if (checksum == 0 + && *reinterpret_cast(page + FIL_PAGE_LSN) == 0 + && buf_page_is_zeroes(page, zip_size)) { + return(true); + } + + /* Compressed and encrypted pages do not have checksum. Assume not + corrupted. Page verification happens after decompression in + buf_page_io_complete() using buf_page_is_corrupted(). */ + if (mach_read_from_2(page+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { + return (true); + } + + ib_uint32_t cchecksum1 = 0; + ib_uint32_t cchecksum2 = 0; + + /* Calculate checksums */ + if (zip_size) { + cchecksum1 = page_zip_calc_checksum( + page, zip_size, SRV_CHECKSUM_ALGORITHM_CRC32); + + cchecksum2 = (cchecksum1 == checksum) + ? 0 + : page_zip_calc_checksum( + page, zip_size, + SRV_CHECKSUM_ALGORITHM_INNODB); + } else { + cchecksum1 = buf_calc_page_crc32(page); + cchecksum2 = (cchecksum1 == checksum) + ? 0 + : buf_calc_page_new_checksum(page); + } + + /* If stored checksum matches one of the calculated checksums + page is not corrupted. */ + + bool encrypted = (checksum == cchecksum1 || checksum == cchecksum2 + || checksum == BUF_NO_CHECKSUM_MAGIC); + + /* MySQL 5.6 and MariaDB 10.0 and 10.1 will write an LSN to the + first page of each system tablespace file at + FIL_PAGE_FILE_FLUSH_LSN offset. On other pages and in other files, + the field might have been uninitialized until MySQL 5.5. In MySQL 5.7 + (and MariaDB Server 10.2.2) WL#7990 stopped writing the field for other + than page 0 of the system tablespace. + + Starting from MariaDB 10.1 the field has been repurposed for + encryption key_version. + + Starting with MySQL 5.7 (and MariaDB Server 10.2), the + field has been repurposed for SPATIAL INDEX pages for + FIL_RTREE_SPLIT_SEQ_NUM. + + Note that FIL_PAGE_FILE_FLUSH_LSN is not included in the InnoDB page + checksum. + + Thus, FIL_PAGE_FILE_FLUSH_LSN could contain any value. While the + field would usually be 0 for pages that are not encrypted, we cannot + assume that a nonzero value means that the page is encrypted. + Therefore we must validate the page both as encrypted and unencrypted + when FIL_PAGE_FILE_FLUSH_LSN does not contain 0. + */ + + uint32_t checksum1 = mach_read_from_4(page + FIL_PAGE_SPACE_OR_CHKSUM); + uint32_t checksum2; + + bool valid; + + if (zip_size) { + valid = (checksum1 == cchecksum1); + checksum2 = checksum1; + } else { + checksum2 = mach_read_from_4( + page + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM); + valid = (buf_page_is_checksum_valid_crc32(page,checksum1,checksum2) + || buf_page_is_checksum_valid_innodb(page,checksum1, checksum2)); + } + + if (encrypted && valid) { + /* If page is encrypted and traditional checksums match, + page could be still encrypted, or not encrypted and valid or + corrupted. */ +#ifndef UNIV_INNOCHECKSUM + ib_logf(IB_LOG_LEVEL_ERROR, + " Page " ULINTPF " in space %s (" ULINTPF ") maybe corrupted." + " Post encryption checksum %u stored [%u:%u] key_version %u", + pageno, + space ? space->name : "N/A", + mach_read_from_4(page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID), + checksum, checksum1, checksum2, key_version); +#else + if (log_file) { + fprintf(log_file, + "Page " ULINTPF ":" ULINTPF " may be corrupted." + " Post encryption checksum %u" + " stored [%u:%u] key_version %u\n", + pageno, + mach_read_from_4(page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID), + checksum, checksum1, checksum2, + key_version); + } +#endif /* UNIV_INNOCHECKSUM */ + + encrypted = false; + } + + return(encrypted); +} diff -Nru mariadb-10.1-10.1.25/storage/innobase/fil/fil0fil.cc mariadb-10.1-10.1.30/storage/innobase/fil/fil0fil.cc --- mariadb-10.1-10.1.25/storage/innobase/fil/fil0fil.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/fil/fil0fil.cc 2017-12-21 15:48:51.000000000 +0000 @@ -662,7 +662,7 @@ ut_free(buf2); os_file_close(node->handle); - if (!fsp_flags_is_valid(flags)) { + if (!fsp_flags_is_valid(flags, space->id)) { ulint cflags = fsp_flags_convert_from_101(flags); if (cflags == ULINT_UNDEFINED) { ib_logf(IB_LOG_LEVEL_ERROR, @@ -1037,155 +1037,26 @@ page_size = UNIV_PAGE_SIZE; } -#ifdef _WIN32 - const ulint io_completion_type = OS_FILE_READ; - /* Logically or physically extend the file with zero bytes, - depending on whether it is sparse. */ + /* fil_read_first_page() expects UNIV_PAGE_SIZE bytes. + fil_node_open_file() expects at least 4 * UNIV_PAGE_SIZE bytes.*/ - /* FIXME: Call DeviceIoControl(node->handle, FSCTL_SET_SPARSE, ...) - when opening a file when FSP_FLAGS_HAS_PAGE_COMPRESSION(). */ - { - FILE_END_OF_FILE_INFO feof; - /* fil_read_first_page() expects UNIV_PAGE_SIZE bytes. - fil_node_open_file() expects at least 4 * UNIV_PAGE_SIZE bytes. - Do not shrink short ROW_FORMAT=COMPRESSED files. */ - feof.EndOfFile.QuadPart = std::max( - os_offset_t(size - file_start_page_no) * page_size, - os_offset_t(FIL_IBD_FILE_INITIAL_SIZE - * UNIV_PAGE_SIZE)); - *success = SetFileInformationByHandle(node->handle, - FileEndOfFileInfo, - &feof, sizeof feof); - if (!*success) { - ib_logf(IB_LOG_LEVEL_ERROR, "extending file %s" - " from " INT64PF - " to " INT64PF " bytes failed with %u", - node->name, - os_offset_t(node->size) * page_size, - feof.EndOfFile.QuadPart, GetLastError()); - } else { - start_page_no = size; - } - } -#else - /* We will logically extend the file with ftruncate() if - page_compression is enabled, because the file is expected to - be sparse in that case. Make sure that ftruncate() can deal - with large files. */ - const bool is_sparse = sizeof(off_t) >= 8 - && FSP_FLAGS_HAS_PAGE_COMPRESSION(space->flags); - -# ifdef HAVE_POSIX_FALLOCATE - /* We must complete the I/O request after invoking - posix_fallocate() to avoid an assertion failure at shutdown. - Because no actual writes were dispatched, a read operation - will suffice. */ - const ulint io_completion_type = srv_use_posix_fallocate - || is_sparse ? OS_FILE_READ : OS_FILE_WRITE; - - if (srv_use_posix_fallocate && !is_sparse) { - const os_offset_t start_offset - = os_offset_t(start_page_no - file_start_page_no) - * page_size; - const ulint n_pages = size - start_page_no; - const os_offset_t len = os_offset_t(n_pages) * page_size; - - int err; - do { - err = posix_fallocate(node->handle, start_offset, len); - } while (err == EINTR - && srv_shutdown_state == SRV_SHUTDOWN_NONE); - - *success = !err; - if (!*success) { - ib_logf(IB_LOG_LEVEL_ERROR, "extending file %s" - " from " INT64PF " to " INT64PF " bytes" - " failed with error %d", - node->name, start_offset, len + start_offset, - err); - } - - DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28", - *success = FALSE; - os_has_said_disk_full = TRUE;); - - if (*success) { - os_has_said_disk_full = FALSE; - start_page_no = size; - } - } else -# else - const ulint io_completion_type = is_sparse - ? OS_FILE_READ : OS_FILE_WRITE; -# endif - if (is_sparse) { - /* fil_read_first_page() expects UNIV_PAGE_SIZE bytes. - fil_node_open_file() expects at least 4 * UNIV_PAGE_SIZE bytes. - Do not shrink short ROW_FORMAT=COMPRESSED files. */ - off_t s = std::max(off_t(size - file_start_page_no) - * off_t(page_size), - off_t(FIL_IBD_FILE_INITIAL_SIZE - * UNIV_PAGE_SIZE)); - *success = !ftruncate(node->handle, s); - if (!*success) { - ib_logf(IB_LOG_LEVEL_ERROR, "ftruncate of file %s" - " from " INT64PF " to " INT64PF " bytes" - " failed with error %d", - node->name, - os_offset_t(start_page_no - file_start_page_no) - * page_size, os_offset_t(s), errno); - } else { - start_page_no = size; - } - } else { - /* Extend at most 64 pages at a time */ - ulint buf_size = ut_min(64, size - start_page_no) - * page_size; - byte* buf2 = static_cast( - calloc(1, buf_size + page_size)); - *success = buf2 != NULL; - if (!buf2) { - ib_logf(IB_LOG_LEVEL_ERROR, "Cannot allocate " ULINTPF - " bytes to extend file", - buf_size + page_size); - } - byte* const buf = static_cast( - ut_align(buf2, page_size)); - - while (*success && start_page_no < size) { - ulint n_pages - = ut_min(buf_size / page_size, - size - start_page_no); - - os_offset_t offset = static_cast( - start_page_no - file_start_page_no) - * page_size; - - *success = os_aio(OS_FILE_WRITE, 0, OS_AIO_SYNC, - node->name, node->handle, buf, - offset, page_size * n_pages, - page_size, node, NULL, 0); - - DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28", - *success = FALSE; - os_has_said_disk_full = TRUE;); - - if (*success) { - os_has_said_disk_full = FALSE; - } - /* Let us measure the size of the file - to determine how much we were able to - extend it */ - os_offset_t fsize = os_file_get_size(node->handle); - ut_a(fsize != os_offset_t(-1)); + os_offset_t new_size = std::max( + os_offset_t(size - file_start_page_no) * page_size, + os_offset_t(FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE)); - start_page_no = ulint(fsize / page_size) - + file_start_page_no; - } + *success = os_file_set_size(node->name, node->handle, new_size, + FSP_FLAGS_HAS_PAGE_COMPRESSION(space->flags)); - free(buf2); + + DBUG_EXECUTE_IF("ib_os_aio_func_io_failure_28", + *success = FALSE; + os_has_said_disk_full = TRUE;); + + if (*success) { + os_has_said_disk_full = FALSE; + start_page_no = size; } -#endif + mutex_enter(&fil_system->mutex); ut_a(node->being_extended); @@ -1195,7 +1066,7 @@ space->size += file_size - node->size; node->size = file_size; - fil_node_complete_io(node, fil_system, io_completion_type); + fil_node_complete_io(node, fil_system, OS_FILE_READ); node->being_extended = FALSE; @@ -2214,7 +2085,9 @@ /* If tablespace is not encrypted, stamp flush_lsn to first page of all system tablespace datafiles to avoid unnecessary error messages on possible downgrade. */ - if (space->crypt_data->min_key_version == 0) { + if (!space->crypt_data + || !space->crypt_data->should_encrypt()) { + fil_node_t* node; ulint sum_of_sizes = 0; @@ -2322,8 +2195,10 @@ data files @param[out] flushed_lsn flushed lsn value @param[out] crypt_data encryption crypt data -@retval NULL on success, or if innodb_force_recovery is set -@return pointer to an error message string */ +@param[in] check_first_page true if first page contents + should be checked +@return NULL on success, or if innodb_force_recovery is set +@retval pointer to an error message string */ UNIV_INTERN const char* fil_read_first_page( @@ -2336,7 +2211,8 @@ ulint* max_arch_log_no, #endif /* UNIV_LOG_ARCHIVE */ lsn_t* flushed_lsn, - fil_space_crypt_t** crypt_data) + fil_space_crypt_t** crypt_data, + bool check_first_page) { byte* buf; byte* page; @@ -2358,27 +2234,31 @@ *flags and *space_id as they were read from the first file and do not validate the first page. */ if (!one_read_already) { - *space_id = fsp_header_get_space_id(page); - *flags = fsp_header_get_flags(page); - - if (flushed_lsn) { - *flushed_lsn = mach_read_from_8(page + - FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); - } - - if (!fsp_flags_is_valid(*flags)) { - ulint cflags = fsp_flags_convert_from_101(*flags); - if (cflags == ULINT_UNDEFINED) { - ib_logf(IB_LOG_LEVEL_ERROR, - "Invalid flags 0x%x in tablespace %u", - unsigned(*flags), unsigned(*space_id)); - return "invalid tablespace flags"; - } else { - *flags = cflags; + /* Undo tablespace does not contain correct FSP_HEADER, + and actually we really need to read only crypt_data. */ + if (check_first_page) { + *space_id = fsp_header_get_space_id(page); + *flags = fsp_header_get_flags(page); + + if (flushed_lsn) { + *flushed_lsn = mach_read_from_8(page + + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + } + + if (!fsp_flags_is_valid(*flags, *space_id)) { + ulint cflags = fsp_flags_convert_from_101(*flags); + if (cflags == ULINT_UNDEFINED) { + ib_logf(IB_LOG_LEVEL_ERROR, + "Invalid flags 0x%x in tablespace %u", + unsigned(*flags), unsigned(*space_id)); + return "invalid tablespace flags"; + } else { + *flags = cflags; + } } - } - check_msg = fil_check_first_page(page, *space_id, *flags); + check_msg = fil_check_first_page(page, *space_id, *flags); + } /* Possible encryption crypt data is also stored only to first page of the first datafile. */ @@ -2497,7 +2377,7 @@ ulint len; log_ptr = mlog_open(mtr, 11 + 2 + 1); - ut_ad(fsp_flags_is_valid(flags)); + ut_ad(fsp_flags_is_valid(flags, space_id)); if (!log_ptr) { /* Logging in mtr is switched off during crash recovery: @@ -2648,8 +2528,7 @@ switch (type) { case MLOG_FILE_DELETE: if (fil_tablespace_exists_in_mem(space_id)) { - dberr_t err = fil_delete_tablespace( - space_id, BUF_REMOVE_FLUSH_NO_WRITE); + dberr_t err = fil_delete_tablespace(space_id); ut_a(err == DB_SUCCESS); } @@ -2927,7 +2806,7 @@ completely and permanently. The flag stop_new_ops also prevents fil_flush() from being applied to this tablespace. */ - buf_LRU_flush_or_remove_pages(id, BUF_REMOVE_FLUSH_WRITE, trx); + buf_LRU_flush_or_remove_pages(id, trx); #endif mutex_enter(&fil_system->mutex); @@ -2954,18 +2833,13 @@ return(err); } -/*******************************************************************//** -Deletes a single-table tablespace. The tablespace must be cached in the -memory cache. +/** Delete a tablespace and associated .ibd file. +@param[in] id tablespace identifier +@param[in] drop_ahi whether to drop the adaptive hash index @return DB_SUCCESS or error */ UNIV_INTERN dberr_t -fil_delete_tablespace( -/*==================*/ - ulint id, /*!< in: space id */ - buf_remove_t buf_remove) /*!< in: specify the action to take - on the tables pages in the buffer - pool */ +fil_delete_tablespace(ulint id, bool drop_ahi) { char* path = 0; fil_space_t* space = 0; @@ -3021,7 +2895,7 @@ To deal with potential read requests by checking the ::stop_new_ops flag in fil_io() */ - buf_LRU_flush_or_remove_pages(id, buf_remove, 0); + buf_LRU_flush_or_remove_pages(id, NULL, drop_ahi); #endif /* !UNIV_HOTBACKUP */ @@ -3132,7 +3006,7 @@ { dberr_t err; - switch (err = fil_delete_tablespace(id, BUF_REMOVE_ALL_NO_WRITE)) { + switch (err = fil_delete_tablespace(id, true)) { case DB_SUCCESS: break; @@ -3718,7 +3592,7 @@ ut_ad(!srv_read_only_mode); ut_a(space_id < SRV_LOG_SPACE_FIRST_ID); ut_a(size >= FIL_IBD_FILE_INITIAL_SIZE); - ut_a(fsp_flags_is_valid(flags & ~FSP_FLAGS_MEM_MASK)); + ut_a(fsp_flags_is_valid(flags & ~FSP_FLAGS_MEM_MASK, space_id)); if (is_temp) { /* Temporary table filepath */ @@ -3979,7 +3853,7 @@ fsp_flags_try_adjust(ulint space_id, ulint flags) { ut_ad(!srv_read_only_mode); - ut_ad(fsp_flags_is_valid(flags)); + ut_ad(fsp_flags_is_valid(flags, space_id)); mtr_t mtr; mtr_start(&mtr); @@ -4061,7 +3935,7 @@ return(DB_CORRUPTION); } - ut_ad(fsp_flags_is_valid(flags & ~FSP_FLAGS_MEM_MASK)); + ut_ad(fsp_flags_is_valid(flags & ~FSP_FLAGS_MEM_MASK, id)); atomic_writes = fsp_flags_get_atomic_writes(flags); memset(&def, 0, sizeof(def)); @@ -4601,7 +4475,7 @@ flags = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page); - if (!fsp_flags_is_valid(flags)) { + if (!fsp_flags_is_valid(flags, fsp->id)) { ulint cflags = fsp_flags_convert_from_101(flags); if (cflags == ULINT_UNDEFINED) { ib_logf(IB_LOG_LEVEL_WARN, diff -Nru mariadb-10.1-10.1.25/storage/innobase/fil/fil0pagecompress.cc mariadb-10.1-10.1.30/storage/innobase/fil/fil0pagecompress.cc --- mariadb-10.1-10.1.25/storage/innobase/fil/fil0pagecompress.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/fil/fil0pagecompress.cc 2017-12-21 15:48:51.000000000 +0000 @@ -106,6 +106,9 @@ int comp_level = level; ulint header_len = FIL_PAGE_DATA + FIL_PAGE_COMPRESSED_SIZE; ulint write_size = 0; +#if HAVE_LZO + lzo_uint write_size_lzo = write_size; +#endif /* Cache to avoid change during function execution */ ulint comp_method = innodb_compression_algorithm; bool allocated = false; @@ -207,7 +210,9 @@ #ifdef HAVE_LZO case PAGE_LZO_ALGORITHM: err = lzo1x_1_15_compress( - buf, len, out_buf+header_len, &write_size, out_buf+UNIV_PAGE_SIZE); + buf, len, out_buf+header_len, &write_size_lzo, out_buf+UNIV_PAGE_SIZE); + + write_size = write_size_lzo; if (err != LZO_E_OK || write_size > UNIV_PAGE_SIZE-header_len) { if (space && !space->printed_compression_failure) { @@ -397,7 +402,8 @@ fil_decompress_page(uncomp_page, comp_page, ulong(len), NULL); if (buf_page_is_corrupted(false, uncomp_page, 0, space)) { - buf_page_print(uncomp_page, 0, 0); + buf_page_print(uncomp_page, 0); + ut_ad(0); } ut_free(comp_page); @@ -603,8 +609,11 @@ #ifdef HAVE_LZO case PAGE_LZO_ALGORITHM: { ulint olen = 0; + lzo_uint olen_lzo = olen; err = lzo1x_decompress((const unsigned char *)buf+header_len, - actual_size,(unsigned char *)in_buf, &olen, NULL); + actual_size,(unsigned char *)in_buf, &olen_lzo, NULL); + + olen = olen_lzo; if (err != LZO_E_OK || (olen == 0 || olen > UNIV_PAGE_SIZE)) { ib_logf(IB_LOG_LEVEL_ERROR, diff -Nru mariadb-10.1-10.1.25/storage/innobase/fsp/fsp0fsp.cc mariadb-10.1-10.1.30/storage/innobase/fsp/fsp0fsp.cc --- mariadb-10.1-10.1.25/storage/innobase/fsp/fsp0fsp.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/fsp/fsp0fsp.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -661,7 +662,7 @@ ulint flags) /*!< in: tablespace flags (FSP_SPACE_FLAGS) */ { flags &= ~FSP_FLAGS_MEM_MASK; - ut_a(fsp_flags_is_valid(flags)); + ut_a(fsp_flags_is_valid(flags, space_id)); mach_write_to_4(FSP_HEADER_OFFSET + FSP_SPACE_ID + page, space_id); @@ -725,7 +726,11 @@ fil_space_t* space = fil_space_acquire(space_id); ut_ad(space); - if (space->crypt_data) { + /* Write encryption metadata to page 0 if tablespace is + encrypted or encryption is disabled by table option. */ + if (space->crypt_data && + (space->crypt_data->should_encrypt() || + space->crypt_data->not_encrypted())) { space->crypt_data->write_page0(page, mtr); } @@ -2035,15 +2040,6 @@ mtr_x_lock(latch, mtr); - if (rw_lock_get_x_lock_count(latch) == 1) { - /* This thread did not own the latch before this call: free - excess pages from the insert buffer free list */ - - if (space == IBUF_SPACE_ID) { - ibuf_free_excess_pages(); - } - } - if (!has_done_reservation) { success = fsp_reserve_free_extents(&n_reserved, space, 2, FSP_NORMAL, mtr); @@ -2614,15 +2610,6 @@ mtr_x_lock(latch, mtr); - if (rw_lock_get_x_lock_count(latch) == 1) { - /* This thread did not own the latch before this call: free - excess pages from the insert buffer free list */ - - if (space == IBUF_SPACE_ID) { - ibuf_free_excess_pages(); - } - } - inode = fseg_inode_get(seg_header, space, zip_size, mtr); if (!has_done_reservation diff -Nru mariadb-10.1-10.1.25/storage/innobase/fts/fts0fts.cc mariadb-10.1-10.1.30/storage/innobase/fts/fts0fts.cc --- mariadb-10.1-10.1.25/storage/innobase/fts/fts0fts.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/fts/fts0fts.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /***************************************************************************** -Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, MariaDB Corporation. All Rights reserved. +Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2016, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -26,6 +26,7 @@ #include "row0mysql.h" #include "row0upd.h" #include "dict0types.h" +#include "dict0stats_bg.h" #include "row0sel.h" #include "fts0fts.h" @@ -868,18 +869,37 @@ err = fts_drop_index_tables(trx, index); - fts_free(table); - + for(;;) { + bool retry = false; + if (index->index_fts_syncing) { + retry = true; + } + if (!retry){ + fts_free(table); + break; + } + DICT_BG_YIELD(trx); + } return(err); } - current_doc_id = table->fts->cache->next_doc_id; - first_doc_id = table->fts->cache->first_doc_id; - fts_cache_clear(table->fts->cache); - fts_cache_destroy(table->fts->cache); - table->fts->cache = fts_cache_create(table); - table->fts->cache->next_doc_id = current_doc_id; - table->fts->cache->first_doc_id = first_doc_id; + for(;;) { + bool retry = false; + if (index->index_fts_syncing) { + retry = true; + } + if (!retry){ + current_doc_id = table->fts->cache->next_doc_id; + first_doc_id = table->fts->cache->first_doc_id; + fts_cache_clear(table->fts->cache); + fts_cache_destroy(table->fts->cache); + table->fts->cache = fts_cache_create(table); + table->fts->cache->next_doc_id = current_doc_id; + table->fts->cache->first_doc_id = first_doc_id; + break; + } + DICT_BG_YIELD(trx); + } } else { fts_cache_t* cache = table->fts->cache; fts_index_cache_t* index_cache; @@ -889,9 +909,17 @@ index_cache = fts_find_index_cache(cache, index); if (index_cache != NULL) { - if (index_cache->words) { - fts_words_free(index_cache->words); - rbt_free(index_cache->words); + for(;;) { + bool retry = false; + if (index->index_fts_syncing) { + retry = true; + } + if (!retry && index_cache->words) { + fts_words_free(index_cache->words); + rbt_free(index_cache->words); + break; + } + DICT_BG_YIELD(trx); } ib_vector_remove(cache->indexes, *(void**) index_cache); @@ -2645,22 +2673,23 @@ will consult the CONFIG table and user table to re-establish the initial value of the Doc ID */ - if (cache->first_doc_id != 0 || !fts_init_doc_id(table)) { - if (!DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID)) { - *doc_id = FTS_NULL_DOC_ID; - return(DB_SUCCESS); + if (!DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID)) { + if (cache->first_doc_id == FTS_NULL_DOC_ID) { + fts_init_doc_id(table); } + *doc_id = FTS_NULL_DOC_ID; + return(DB_SUCCESS); + } - /* Otherwise, simply increment the value in cache */ - mutex_enter(&cache->doc_id_lock); - *doc_id = ++cache->next_doc_id; - mutex_exit(&cache->doc_id_lock); - } else { - mutex_enter(&cache->doc_id_lock); - *doc_id = cache->next_doc_id; - mutex_exit(&cache->doc_id_lock); + if (cache->first_doc_id == FTS_NULL_DOC_ID) { + fts_init_doc_id(table); } + DEBUG_SYNC_C("get_next_FTS_DOC_ID"); + mutex_enter(&cache->doc_id_lock); + *doc_id = cache->next_doc_id++; + mutex_exit(&cache->doc_id_lock); + return(DB_SUCCESS); } @@ -3034,53 +3063,6 @@ } /*********************************************************************//** -Create a new document id. -@return DB_SUCCESS if all went well else error */ -UNIV_INTERN -dberr_t -fts_create_doc_id( -/*==============*/ - dict_table_t* table, /*!< in: row is of this table. */ - dtuple_t* row, /* in/out: add doc id value to this - row. This is the current row that is - being inserted. */ - mem_heap_t* heap) /*!< in: heap */ -{ - doc_id_t doc_id; - dberr_t error = DB_SUCCESS; - - ut_a(table->fts->doc_col != ULINT_UNDEFINED); - - if (!DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID)) { - if (table->fts->cache->first_doc_id == FTS_NULL_DOC_ID) { - error = fts_get_next_doc_id(table, &doc_id); - } - return(error); - } - - error = fts_get_next_doc_id(table, &doc_id); - - if (error == DB_SUCCESS) { - dfield_t* dfield; - doc_id_t* write_doc_id; - - ut_a(doc_id > 0); - - dfield = dtuple_get_nth_field(row, table->fts->doc_col); - write_doc_id = static_cast( - mem_heap_alloc(heap, sizeof(*write_doc_id))); - - ut_a(doc_id != FTS_NULL_DOC_ID); - ut_a(sizeof(doc_id) == dfield->type.len); - fts_write_doc_id((byte*) write_doc_id, doc_id); - - dfield_set_data(dfield, write_doc_id, sizeof(*write_doc_id)); - } - - return(error); -} - -/*********************************************************************//** The given transaction is about to be committed; do whatever is necessary from the FTS system's POV. @return DB_SUCCESS or error code */ @@ -4615,10 +4597,16 @@ index_cache = static_cast( ib_vector_get(cache->indexes, i)); - if (index_cache->index->to_be_dropped) { + if (index_cache->index->to_be_dropped + || index_cache->index->table->to_be_dropped) { continue; } + index_cache->index->index_fts_syncing = true; + DBUG_EXECUTE_IF("fts_instrument_sync_sleep_drop_waits", + os_thread_sleep(10000000); + ); + error = fts_sync_index(sync, index_cache); if (error != DB_SUCCESS && !sync->interrupted) { @@ -4651,11 +4639,33 @@ end_sync: if (error == DB_SUCCESS && !sync->interrupted) { error = fts_sync_commit(sync); + if (error == DB_SUCCESS) { + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + if (index_cache->index->index_fts_syncing) { + index_cache->index->index_fts_syncing + = false; + } + } + } } else { fts_sync_rollback(sync); } rw_lock_x_lock(&cache->lock); + /* Clear fts syncing flags of any indexes incase sync is + interrupeted */ + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + if (index_cache->index->index_fts_syncing == true) { + index_cache->index->index_fts_syncing = false; + } + } + sync->interrupted = false; sync->in_progress = false; os_event_set(sync->event); diff -Nru mariadb-10.1-10.1.25/storage/innobase/fts/fts0opt.cc mariadb-10.1-10.1.30/storage/innobase/fts/fts0opt.cc --- mariadb-10.1-10.1.25/storage/innobase/fts/fts0opt.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/fts/fts0opt.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2016, MariaDB Corporation. All Rights reserved. This program is free software; you can redistribute it and/or modify it under @@ -2971,13 +2971,6 @@ { dict_table_t* table = NULL; - /* Prevent DROP INDEX etc. from running when we are syncing - cache in background. */ - if (!rw_lock_s_lock_nowait(&dict_operation_lock, __FILE__, __LINE__)) { - /* Exit when fail to get dict operation lock. */ - return; - } - table = dict_table_open_on_id(table_id, FALSE, DICT_TABLE_OP_NORMAL); if (table) { @@ -2987,8 +2980,6 @@ dict_table_close(table, FALSE, FALSE); } - - rw_lock_s_unlock(&dict_operation_lock); } /**********************************************************************//** diff -Nru mariadb-10.1-10.1.25/storage/innobase/fts/fts0que.cc mariadb-10.1-10.1.30/storage/innobase/fts/fts0que.cc --- mariadb-10.1-10.1.25/storage/innobase/fts/fts0que.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/fts/fts0que.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** -Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -3633,6 +3634,10 @@ fts_doc_ids_free(query->deleted); } + if (query->intersection) { + fts_query_free_doc_ids(query, query->intersection); + } + if (query->doc_ids) { fts_query_free_doc_ids(query, query->doc_ids); } @@ -3657,8 +3662,6 @@ rbt_free(query->word_freqs); } - ut_a(!query->intersection); - if (query->word_map) { rbt_free(query->word_map); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/handler/ha_innodb.cc mariadb-10.1-10.1.30/storage/innobase/handler/ha_innodb.cc --- mariadb-10.1-10.1.25/storage/innobase/handler/ha_innodb.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/handler/ha_innodb.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1087,6 +1087,18 @@ {"encryption_key_rotation_list_length", (char*)&export_vars.innodb_key_rotation_list_length, SHOW_LONGLONG}, + {"encryption_n_merge_blocks_encrypted", + (char*)&export_vars.innodb_n_merge_blocks_encrypted, + SHOW_LONGLONG}, + {"encryption_n_merge_blocks_decrypted", + (char*)&export_vars.innodb_n_merge_blocks_decrypted, + SHOW_LONGLONG}, + {"encryption_n_rowlog_blocks_encrypted", + (char*)&export_vars.innodb_n_rowlog_blocks_encrypted, + SHOW_LONGLONG}, + {"encryption_n_rowlog_blocks_decrypted", + (char*)&export_vars.innodb_n_rowlog_blocks_decrypted, + SHOW_LONGLONG}, /* scrubing */ {"scrub_background_page_reorganizations", @@ -1969,18 +1981,33 @@ case DB_TOO_BIG_RECORD: { /* If prefix is true then a 768-byte prefix is stored - locally for BLOB fields. Refer to dict_table_get_format() */ + locally for BLOB fields. Refer to dict_table_get_format(). + Note that in page0zip.ic page_zip_rec_needs_ext() rec_size + is limited to COMPRESSED_REC_MAX_DATA_SIZE (16K) or + REDUNDANT_REC_MAX_DATA_SIZE (16K-1). */ bool prefix = (dict_tf_get_format(flags) == UNIV_FORMAT_A); + bool comp = !!(flags & DICT_TF_COMPACT); + ulint free_space = page_get_free_space_of_empty(comp) / 2; + + if (free_space >= (comp ? COMPRESSED_REC_MAX_DATA_SIZE : + REDUNDANT_REC_MAX_DATA_SIZE)) { + free_space = (comp ? COMPRESSED_REC_MAX_DATA_SIZE : + REDUNDANT_REC_MAX_DATA_SIZE) - 1; + } + my_printf_error(ER_TOO_BIG_ROWSIZE, - "Row size too large (> %lu). Changing some columns " + "Row size too large (> " ULINTPF "). Changing some columns " "to TEXT or BLOB %smay help. In current row " "format, BLOB prefix of %d bytes is stored inline.", MYF(0), - page_get_free_space_of_empty(flags & - DICT_TF_COMPACT) / 2, - prefix ? "or using ROW_FORMAT=DYNAMIC " - "or ROW_FORMAT=COMPRESSED ": "", - prefix ? DICT_MAX_FIXED_COL_LEN : 0); + free_space, + prefix + ? "or using ROW_FORMAT=DYNAMIC or" + " ROW_FORMAT=COMPRESSED " + : "", + prefix + ? DICT_MAX_FIXED_COL_LEN + : 0); return(HA_ERR_TO_BIG_ROW); } @@ -3451,6 +3478,17 @@ goto error; } +#ifdef WITH_WSREP + /* Currently, Galera does not support VATS lock schedule algorithm. */ + if (innodb_lock_schedule_algorithm == INNODB_LOCK_SCHEDULE_ALGORITHM_VATS + && global_system_variables.wsrep_on) { + /* Do not allow InnoDB startup with VATS and Galera */ + sql_print_error("In Galera, innodb_lock_schedule_algorithm=vats" + " is not supported."); + goto error; + } +#endif /* WITH_WSREP */ + #ifndef HAVE_LZ4 if (innodb_compression_algorithm == PAGE_LZ4_ALGORITHM) { sql_print_error("InnoDB: innodb_compression_algorithm = %lu unsupported.\n" @@ -4095,7 +4133,7 @@ trx_commit_for_mysql(trx); } #ifdef WITH_WSREP - if (wsrep_on(thd)) { thd_proc_info(thd, tmp); } + if (thd && wsrep_on(thd)) { thd_proc_info(thd, tmp); } #endif /* WITH_WSREP */ } @@ -4855,8 +4893,8 @@ wsrep_thd_is_BF(current_thd, FALSE), lock_get_info(trx->lock.wait_lock).c_str()); - if (!wsrep_thd_is_BF(trx->mysql_thd, FALSE) && - trx->abort_type == TRX_SERVER_ABORT) { + if (!wsrep_thd_is_BF(trx->mysql_thd, FALSE) + && trx->abort_type == TRX_SERVER_ABORT) { ut_ad(!lock_mutex_own()); lock_mutex_enter(); } @@ -5400,8 +5438,6 @@ if (innodb_idx_fld >= innodb_idx_fld_end) { DBUG_RETURN(FALSE); } - - mtype = innodb_idx_fld->col->mtype; } // MariaDB-5.5 compatibility @@ -8261,7 +8297,7 @@ table->next_number_field); /* Get the value that MySQL attempted to store in the table.*/ - auto_inc = table->next_number_field->val_int(); + auto_inc = table->next_number_field->val_uint(); switch (error) { case DB_DUPLICATE_KEY: @@ -8855,7 +8891,7 @@ ulonglong auto_inc; ulonglong col_max_value; - auto_inc = table->next_number_field->val_int(); + auto_inc = table->next_number_field->val_uint(); /* We need the upper limit of the col type to check for whether we update the table autoinc counter or not. */ @@ -10005,6 +10041,27 @@ } /*****************************************************************//** +Copy a cached MySQL row. +If requested, also avoids overwriting non-read columns. +@param[out] buf Row in MySQL format. +@param[in] cached_row Which row to copy. +@param[in] rec_len Record length. */ +void +ha_innobase::copy_cached_row( + uchar* buf, + const uchar* cached_row, + uint rec_len) +{ + if (prebuilt->keep_other_fields_on_keyread) { + row_sel_copy_cached_fields_for_mysql(buf, cached_row, + prebuilt); + } else { + memcpy(buf, cached_row, rec_len); + } +} + + +/*****************************************************************//** Set up search tuple for a query through FTS_DOC_ID_INDEX on supplied Doc ID. This is used by MySQL to retrieve the documents once the search result (Doc IDs) is available */ @@ -10372,7 +10429,7 @@ shared ? WSREP_KEY_SHARED : WSREP_KEY_EXCLUSIVE, copy); if (rcode) { - DBUG_PRINT("wsrep", ("row key failed: %lu", rcode)); + DBUG_PRINT("wsrep", ("row key failed: %zu", rcode)); WSREP_ERROR("Appending cascaded fk row key failed: %s, %lu", (wsrep_thd_query(thd)) ? wsrep_thd_query(thd) : "void", rcode); @@ -16393,6 +16450,10 @@ DBUG_ASSERT(hton == innodb_hton_ptr); + if (high_level_read_only) { + return(XAER_RMFAIL); + } + trx = trx_get_trx_by_xid(xid); if (trx) { @@ -16420,8 +16481,11 @@ DBUG_ASSERT(hton == innodb_hton_ptr); - trx = trx_get_trx_by_xid(xid); + if (high_level_read_only) { + return(XAER_RMFAIL); + } + trx = trx_get_trx_by_xid(xid); if (trx) { int ret = innobase_rollback_trx(trx); trx_free_for_background(trx); @@ -18361,7 +18425,7 @@ const void* save) /*!< in: immediate result from check function */ { - if (*(my_bool*) save) { + if (*(my_bool*) save && !srv_read_only_mode) { buf_load_start(); } } @@ -18384,7 +18448,7 @@ const void* save) /*!< in: immediate result from check function */ { - if (*(my_bool*) save) { + if (*(my_bool*) save && !srv_read_only_mode) { buf_load_abort(); } } @@ -18656,7 +18720,7 @@ wsrep_thd_awake(thd, signal); } else { /* abort currently executing query */ - DBUG_PRINT("wsrep",("sending KILL_QUERY to: %ld", + DBUG_PRINT("wsrep",("sending KILL_QUERY to: %lu", thd_get_thread_id(thd))); WSREP_DEBUG("kill query for: %ld", thd_get_thread_id(thd)); @@ -18787,7 +18851,8 @@ mutex_enter(&trx_sys->mutex); trx_id_t trx_id = trx_sys_get_new_trx_id(); mutex_exit(&trx_sys->mutex); - + WSREP_DEBUG("innodb fake trx id: " TRX_ID_FMT " thd: %s", + trx_id, wsrep_thd_query(thd)); wsrep_ws_handle_for_trx(wsrep_thd_ws_handle(thd), trx_id); } @@ -19147,7 +19212,7 @@ " the zlib compression algorithm changes." " When turned OFF, InnoDB will assume that the zlib" " compression algorithm doesn't change.", - NULL, NULL, FALSE); + NULL, NULL, TRUE); static MYSQL_SYSVAR_LONG(additional_mem_pool_size, innobase_additional_mem_pool_size, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, @@ -19180,7 +19245,7 @@ #endif /* defined UNIV_DEBUG || defined UNIV_PERF_DEBUG */ static MYSQL_SYSVAR_ENUM(lock_schedule_algorithm, innodb_lock_schedule_algorithm, - PLUGIN_VAR_RQCMDARG, + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "The algorithm Innodb uses for deciding which locks to grant next when" " a lock is released. Possible values are" " FCFS" diff -Nru mariadb-10.1-10.1.25/storage/innobase/handler/ha_innodb.h mariadb-10.1-10.1.30/storage/innobase/handler/ha_innodb.h --- mariadb-10.1-10.1.25/storage/innobase/handler/ha_innodb.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/handler/ha_innodb.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2013, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -167,6 +167,10 @@ int index_first(uchar * buf); int index_last(uchar * buf); + /* Copy a cached MySQL row. If requested, also avoids + overwriting non-read columns. */ + void copy_cached_row(uchar *to_rec, const uchar *from_rec, + uint rec_length); int rnd_init(bool scan); int rnd_end(); int rnd_next(uchar *buf); diff -Nru mariadb-10.1-10.1.25/storage/innobase/handler/handler0alter.cc mariadb-10.1-10.1.30/storage/innobase/handler/handler0alter.cc --- mariadb-10.1-10.1.25/storage/innobase/handler/handler0alter.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/handler/handler0alter.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2013, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -153,11 +153,22 @@ case DB_CORRUPTION: my_error(ER_NOT_KEYFILE, MYF(0), table); break; - case DB_TOO_BIG_RECORD: - my_error(ER_TOO_BIG_ROWSIZE, MYF(0), - page_get_free_space_of_empty( - flags & DICT_TF_COMPACT) / 2); + case DB_TOO_BIG_RECORD: { + /* Note that in page0zip.ic page_zip_rec_needs_ext() rec_size + is limited to COMPRESSED_REC_MAX_DATA_SIZE (16K) or + REDUNDANT_REC_MAX_DATA_SIZE (16K-1). */ + bool comp = !!(flags & DICT_TF_COMPACT); + ulint free_space = page_get_free_space_of_empty(comp) / 2; + + if (free_space >= (comp ? COMPRESSED_REC_MAX_DATA_SIZE : + REDUNDANT_REC_MAX_DATA_SIZE)) { + free_space = (comp ? COMPRESSED_REC_MAX_DATA_SIZE : + REDUNDANT_REC_MAX_DATA_SIZE) - 1; + } + + my_error(ER_TOO_BIG_ROWSIZE, MYF(0), free_space); break; + } case DB_INVALID_NULL: /* TODO: report the row, as we do for DB_DUPLICATE_KEY */ my_error(ER_INVALID_USE_OF_NULL, MYF(0)); @@ -197,60 +208,44 @@ return(false); } -/*******************************************************************//** -Determine if ALTER TABLE needs to rebuild the table. -@param ha_alter_info the DDL operation -@param altered_table MySQL original table +/** Determine if ALTER TABLE needs to rebuild the table. +@param ha_alter_info the DDL operation +@param table metadata before ALTER TABLE @return whether it is necessary to rebuild the table */ static MY_ATTRIBUTE((nonnull, warn_unused_result)) bool innobase_need_rebuild( -/*==================*/ const Alter_inplace_info* ha_alter_info, - const TABLE* altered_table) + const TABLE* table) { Alter_inplace_info::HA_ALTER_FLAGS alter_inplace_flags = - ha_alter_info->handler_flags & ~(INNOBASE_INPLACE_IGNORE); + ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE; - if (alter_inplace_flags - == Alter_inplace_info::CHANGE_CREATE_OPTION + if (alter_inplace_flags & Alter_inplace_info::CHANGE_CREATE_OPTION) { + const ha_table_option_struct& alt_opt= + *ha_alter_info->create_info->option_struct; + const ha_table_option_struct& opt= *table->s->option_struct; + + if (alt_opt.page_compressed != opt.page_compressed + || alt_opt.page_compression_level + != opt.page_compression_level + || alt_opt.encryption != opt.encryption + || alt_opt.encryption_key_id != opt.encryption_key_id) { + return(true); + } + } + + if (alter_inplace_flags == Alter_inplace_info::CHANGE_CREATE_OPTION && !(ha_alter_info->create_info->used_fields & (HA_CREATE_USED_ROW_FORMAT | HA_CREATE_USED_KEY_BLOCK_SIZE))) { /* Any other CHANGE_CREATE_OPTION than changing - ROW_FORMAT or KEY_BLOCK_SIZE is ignored. */ + ROW_FORMAT or KEY_BLOCK_SIZE can be done without + rebuilding the table. */ return(false); } - /* If alter table changes column name and adds a new - index, we need to check is this new index created - to new column name. This is because column name - changes are done normally after creating indexes. */ - if ((ha_alter_info->handler_flags - & Alter_inplace_info::ALTER_COLUMN_NAME) && - ((ha_alter_info->handler_flags - & Alter_inplace_info::ADD_INDEX) || - (ha_alter_info->handler_flags - & Alter_inplace_info::ADD_FOREIGN_KEY))) { - for (ulint i = 0; i < ha_alter_info->index_add_count; i++) { - const KEY* key = &ha_alter_info->key_info_buffer[ - ha_alter_info->index_add_buffer[i]]; - - for (ulint j = 0; j < key->user_defined_key_parts; j++) { - const KEY_PART_INFO* key_part = &(key->key_part[j]); - const Field* field = altered_table->field[key_part->fieldnr]; - - /* Field used on added index is renamed on - this same alter table. We need table - rebuild. */ - if (field && field->flags & FIELD_IS_RENAMED) { - return (true); - } - } - } - } - - return(!!(ha_alter_info->handler_flags & INNOBASE_ALTER_REBUILD)); + return(!!(alter_inplace_flags & INNOBASE_ALTER_REBUILD)); } /** Check if InnoDB supports a particular alter table in-place @@ -300,29 +295,6 @@ update_thd(); trx_search_latch_release_if_reserved(prebuilt->trx); - /* Change on engine specific table options require rebuild of the - table */ - if (ha_alter_info->handler_flags - & Alter_inplace_info::CHANGE_CREATE_OPTION) { - ha_table_option_struct *new_options= ha_alter_info->create_info->option_struct; - ha_table_option_struct *old_options= table->s->option_struct; - - if (new_options->page_compressed != old_options->page_compressed || - new_options->page_compression_level != old_options->page_compression_level || - new_options->atomic_writes != old_options->atomic_writes) { - ha_alter_info->unsupported_reason = innobase_get_err_msg( - ER_ALTER_OPERATION_NOT_SUPPORTED_REASON); - DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); - } - - if (new_options->encryption != old_options->encryption || - new_options->encryption_key_id != old_options->encryption_key_id) { - ha_alter_info->unsupported_reason = innobase_get_err_msg( - ER_ALTER_OPERATION_NOT_SUPPORTED_REASON); - DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); - } - } - if (ha_alter_info->handler_flags & ~(INNOBASE_INPLACE_IGNORE | INNOBASE_ALTER_NOREBUILD @@ -601,7 +573,7 @@ operation is possible. */ } else if (((ha_alter_info->handler_flags & Alter_inplace_info::ADD_PK_INDEX) - || innobase_need_rebuild(ha_alter_info, table)) + || innobase_need_rebuild(ha_alter_info, table)) && (innobase_fulltext_exist(altered_table))) { /* Refuse to rebuild the table online, if fulltext indexes are to survive the rebuild. */ @@ -1537,38 +1509,49 @@ return(0); } -/*******************************************************************//** -Create index field definition for key part */ +/** Create index field definition for key part +@param[in] new_clustered true if alter is generating a new clustered +index +@param[in] altered_table MySQL table that is being altered +@param[in] key_part MySQL key definition +@param[out] index_field index field defition for key_part */ static MY_ATTRIBUTE((nonnull(2,3))) void innobase_create_index_field_def( -/*============================*/ - const TABLE* altered_table, /*!< in: MySQL table that is - being altered, or NULL - if a new clustered index is - not being created */ - const KEY_PART_INFO* key_part, /*!< in: MySQL key definition */ - index_field_t* index_field, /*!< out: index field - definition for key_part */ - const Field** fields) /*!< in: MySQL table fields */ + bool new_clustered, + const TABLE* altered_table, + const KEY_PART_INFO* key_part, + index_field_t* index_field) { const Field* field; ibool is_unsigned; ulint col_type; + ulint innodb_fieldnr=0; DBUG_ENTER("innobase_create_index_field_def"); ut_ad(key_part); ut_ad(index_field); + ut_ad(altered_table); - field = altered_table - ? altered_table->field[key_part->fieldnr] + /* Virtual columns are not stored in InnoDB data dictionary, thus + if there is virtual columns we need to skip them to find the + correct field. */ + for(ulint i = 0; i < key_part->fieldnr; i++) { + const Field* table_field = altered_table->field[i]; + if (!table_field->stored_in_db) { + continue; + } + innodb_fieldnr++; + } + + field = new_clustered ? + altered_table->field[key_part->fieldnr] : key_part->field; - ut_a(field); - index_field->col_no = key_part->fieldnr; - index_field->col_name = altered_table ? field->field_name : fields[key_part->fieldnr]->field_name; + ut_a(field); + index_field->col_no = innodb_fieldnr; col_type = get_innobase_type_from_mysql_type(&is_unsigned, field); if (DATA_BLOB == col_type @@ -1602,10 +1585,8 @@ bool key_clustered, /*!< in: true if this is the new clustered index */ index_def_t* index, /*!< out: index definition */ - mem_heap_t* heap, /*!< in: heap where memory + mem_heap_t* heap) /*!< in: heap where memory is allocated */ - const Field** fields) /*!< in: MySQL table fields - */ { const KEY* key = &keys[key_number]; ulint i; @@ -1616,10 +1597,10 @@ DBUG_ENTER("innobase_create_index_def"); DBUG_ASSERT(!key_clustered || new_clustered); + ut_ad(altered_table); + index->fields = static_cast( mem_heap_alloc(heap, n_fields * sizeof *index->fields)); - memset(index->fields, 0, n_fields * sizeof *index->fields); - index->ind_type = 0; index->key_number = key_number; index->n_fields = n_fields; @@ -1650,13 +1631,12 @@ index->ind_type |= DICT_FTS; } - if (!new_clustered) { - altered_table = NULL; - } - for (i = 0; i < n_fields; i++) { innobase_create_index_field_def( - altered_table, &key->key_part[i], &index->fields[i], fields); + new_clustered, + altered_table, + &key->key_part[i], + &index->fields[i]); } DBUG_VOID_RETURN; @@ -1982,7 +1962,7 @@ /* Create the PRIMARY key index definition */ innobase_create_index_def( altered_table, key_info, primary_key_number, - TRUE, TRUE, indexdef++, heap, (const Field **)altered_table->field); + TRUE, TRUE, indexdef++, heap); created_clustered: n_add = 1; @@ -1994,7 +1974,7 @@ /* Copy the index definitions. */ innobase_create_index_def( altered_table, key_info, i, TRUE, FALSE, - indexdef, heap, (const Field **)altered_table->field); + indexdef, heap); if (indexdef->ind_type & DICT_FTS) { n_fts_add++; @@ -2039,7 +2019,7 @@ for (ulint i = 0; i < n_add; i++) { innobase_create_index_def( altered_table, key_info, add[i], FALSE, FALSE, - indexdef, heap, (const Field **)altered_table->field); + indexdef, heap); if (indexdef->ind_type & DICT_FTS) { n_fts_add++; @@ -2056,7 +2036,6 @@ index->fields = static_cast( mem_heap_alloc(heap, sizeof *index->fields)); - memset(index->fields, 0, sizeof *index->fields); index->n_fields = 1; index->fields->col_no = fts_doc_id_col; index->fields->prefix_len = 0; @@ -2146,7 +2125,7 @@ /** mapping of old column numbers to new ones, or NULL */ const ulint* col_map; /** new column names, or NULL if nothing was renamed */ - const char** col_names; + const char** col_names; /** added AUTO_INCREMENT column position, or ULINT_UNDEFINED */ const ulint add_autoinc; /** default values of ADD COLUMN, or NULL */ @@ -2873,7 +2852,6 @@ to rebuild the table with a temporary name. */ if (new_clustered) { - fil_space_crypt_t* crypt_data; const char* new_table_name = dict_mem_create_temporary_tablename( ctx->heap, @@ -2884,13 +2862,29 @@ ulint key_id = FIL_DEFAULT_ENCRYPTION_KEY; fil_encryption_t mode = FIL_ENCRYPTION_DEFAULT; - fil_space_t* space = fil_space_acquire(ctx->prebuilt->table->space); - crypt_data = space->crypt_data; - fil_space_release(space); - - if (crypt_data) { - key_id = crypt_data->key_id; - mode = crypt_data->encryption; + if (fil_space_t* space + = fil_space_acquire(ctx->prebuilt->table->space)) { + if (const fil_space_crypt_t* crypt_data + = space->crypt_data) { + key_id = crypt_data->key_id; + mode = crypt_data->encryption; + } + + fil_space_release(space); + } + + if (ha_alter_info->handler_flags + & Alter_inplace_info::CHANGE_CREATE_OPTION) { + const ha_table_option_struct& alt_opt= + *ha_alter_info->create_info->option_struct; + const ha_table_option_struct& opt= + *old_table->s->option_struct; + if (alt_opt.encryption != opt.encryption + || alt_opt.encryption_key_id + != opt.encryption_key_id) { + key_id = alt_opt.encryption_key_id; + mode = fil_encryption_t(alt_opt.encryption); + } } if (innobase_check_foreigns( @@ -3103,8 +3097,7 @@ for (ulint a = 0; a < ctx->num_to_add_index; a++) { ctx->add_index[a] = row_merge_create_index( - ctx->trx, ctx->new_table, - &index_defs[a], ctx->col_names); + ctx->trx, ctx->new_table, &index_defs[a]); add_key_nums[a] = index_defs[a].key_number; @@ -5906,7 +5899,47 @@ break; } - DICT_STATS_BG_YIELD(trx); + DICT_BG_YIELD(trx); + } + + /* Make a concurrent Drop fts Index to wait until sync of that + fts index is happening in the background */ + for (;;) { + bool retry = false; + + for (inplace_alter_handler_ctx** pctx = ctx_array; + *pctx; pctx++) { + int count =0; + ha_innobase_inplace_ctx* ctx + = static_cast(*pctx); + DBUG_ASSERT(new_clustered == ctx->need_rebuild()); + + if (dict_fts_index_syncing(ctx->old_table)) { + count++; + if (count == 100) { + fprintf(stderr, + "Drop index waiting for background sync" + "to finish\n"); + } + retry = true; + } + + if (new_clustered && dict_fts_index_syncing(ctx->new_table)) { + count++; + if (count == 100) { + fprintf(stderr, + "Drop index waiting for background sync" + "to finish\n"); + } + retry = true; + } + } + + if (!retry) { + break; + } + + DICT_BG_YIELD(trx); } /* Apply the changes to the data dictionary tables, for all @@ -6222,8 +6255,13 @@ ut_d(dict_table_check_for_dup_indexes( ctx->new_table, CHECK_ABORTED_OK)); - ut_a(fts_check_cached_index(ctx->new_table)); +#ifdef UNIV_DEBUG + if (!(ctx->new_table->fts != NULL + && ctx->new_table->fts->cache->sync->in_progress)) { + ut_a(fts_check_cached_index(ctx->new_table)); + } +#endif if (new_clustered) { /* Since the table has been rebuilt, we remove all persistent statistics corresponding to the diff -Nru mariadb-10.1-10.1.25/storage/innobase/handler/i_s.cc mariadb-10.1-10.1.30/storage/innobase/handler/i_s.cc --- mariadb-10.1-10.1.25/storage/innobase/handler/i_s.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/handler/i_s.cc 2017-12-21 15:48:51.000000000 +0000 @@ -6383,6 +6383,7 @@ } heap = mem_heap_create(1000); + rw_lock_s_lock(&dict_operation_lock); mutex_enter(&dict_sys->mutex); mtr_start(&mtr); @@ -6409,9 +6410,11 @@ err_msg); } + rw_lock_s_unlock(&dict_operation_lock); mem_heap_empty(heap); /* Get the next record */ + rw_lock_s_lock(&dict_operation_lock); mutex_enter(&dict_sys->mutex); mtr_start(&mtr); rec = dict_getnext_system(&pcur, &mtr); @@ -6419,6 +6422,7 @@ mtr_commit(&mtr); mutex_exit(&dict_sys->mutex); + rw_lock_s_unlock(&dict_operation_lock); mem_heap_free(heap); DBUG_RETURN(0); @@ -7722,8 +7726,6 @@ { Field** fields; ulint atomic_blobs = FSP_FLAGS_HAS_ATOMIC_BLOBS(flags); - ulint page_size = fsp_flags_get_page_size(flags); - ulint zip_size = fsp_flags_get_zip_size(flags); const char* file_format; const char* row_format; @@ -7740,13 +7742,11 @@ fields = table_to_fill->field; - OK(fields[SYS_TABLESPACES_SPACE]->store( - static_cast(space))); + OK(fields[SYS_TABLESPACES_SPACE]->store(space, true)); OK(field_store_string(fields[SYS_TABLESPACES_NAME], name)); - OK(fields[SYS_TABLESPACES_FLAGS]->store( - static_cast(flags))); + OK(fields[SYS_TABLESPACES_FLAGS]->store(flags, true)); OK(field_store_string(fields[SYS_TABLESPACES_FILE_FORMAT], file_format)); @@ -7754,11 +7754,18 @@ OK(field_store_string(fields[SYS_TABLESPACES_ROW_FORMAT], row_format)); - OK(fields[SYS_TABLESPACES_PAGE_SIZE]->store( - static_cast(page_size))); + ulint cflags = fsp_flags_is_valid(flags, space) + ? flags : fsp_flags_convert_from_101(flags); + if (cflags != ULINT_UNDEFINED) { + OK(fields[SYS_TABLESPACES_PAGE_SIZE]->store( + fsp_flags_get_page_size(cflags), true)); - OK(fields[SYS_TABLESPACES_ZIP_PAGE_SIZE]->store( - static_cast(zip_size))); + OK(fields[SYS_TABLESPACES_ZIP_PAGE_SIZE]->store( + fsp_flags_get_zip_size(cflags), true)); + } else { + fields[SYS_TABLESPACES_PAGE_SIZE]->set_null(); + fields[SYS_TABLESPACES_ZIP_PAGE_SIZE]->set_null(); + } OK(schema_table_store_record(thd, table_to_fill)); @@ -8212,6 +8219,12 @@ fil_space_crypt_get_status(space, &status); + /* If tablespace id does not match, we did not find + encryption information for this tablespace. */ + if (!space->crypt_data || space->id != status.space) { + goto skip; + } + OK(fields[TABLESPACES_ENCRYPTION_SPACE]->store(space->id)); OK(field_store_string(fields[TABLESPACES_ENCRYPTION_NAME], @@ -8246,6 +8259,7 @@ OK(schema_table_store_record(thd, table_to_fill)); +skip: DBUG_RETURN(0); } /*******************************************************************//** diff -Nru mariadb-10.1-10.1.25/storage/innobase/ibuf/ibuf0ibuf.cc mariadb-10.1-10.1.30/storage/innobase/ibuf/ibuf0ibuf.cc --- mariadb-10.1-10.1.25/storage/innobase/ibuf/ibuf0ibuf.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/ibuf/ibuf0ibuf.cc 2017-12-21 15:48:51.000000000 +0000 @@ -2175,6 +2175,8 @@ page_t* root; page_t* bitmap_page; + log_free_check(); + mtr_start(&mtr); /* Acquire the fsp latch before the ibuf header, obeying the latching @@ -2286,22 +2288,7 @@ { ulint i; -#ifdef UNIV_SYNC_DEBUG - ut_ad(rw_lock_own(fil_space_get_latch(IBUF_SPACE_ID, NULL), - RW_LOCK_EX)); -#endif /* UNIV_SYNC_DEBUG */ - - ut_ad(rw_lock_get_x_lock_count( - fil_space_get_latch(IBUF_SPACE_ID, NULL)) == 1); - - /* NOTE: We require that the thread did not own the latch before, - because then we know that we can obey the correct latching order - for ibuf latches */ - - if (!ibuf) { - /* Not yet initialized; not sure if this is possible, but - does no harm to check for it. */ - + if (srv_force_recovery >= SRV_FORCE_NO_IBUF_MERGE) { return; } @@ -4013,7 +4000,7 @@ (ulong) zip_size, (ulong) old_bits); fputs("InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); DBUG_RETURN(NULL); } @@ -4075,7 +4062,7 @@ "InnoDB: but the number of fields does not match!\n", stderr); dump: - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); dtuple_print(stderr, entry); ut_ad(0); @@ -4086,7 +4073,7 @@ " Please run CHECK TABLE on\n" "InnoDB: your tables.\n" "InnoDB: Submit a detailed bug report to" - " http://bugs.mysql.com!\n", stderr); + " https://jira.mariadb.org/\n", stderr); DBUG_VOID_RETURN; } @@ -4262,7 +4249,7 @@ fprintf(stderr, "\nspace %u offset %u" " (%u records, index id %llu)\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned) buf_block_get_space(block), (unsigned) buf_block_get_page_no(block), (unsigned) page_get_n_recs(page), @@ -4326,7 +4313,7 @@ fprintf(stderr, "\nspace %u offset %u" " (%u records, index id %llu)\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned) buf_block_get_space(block), (unsigned) buf_block_get_page_no(block), (unsigned) page_get_n_recs(page), @@ -4397,7 +4384,7 @@ } else { fprintf(stderr, "InnoDB: ERROR: Submit the output to" - " http://bugs.mysql.com\n" + " https://jira.mariadb.org/\n" "InnoDB: ibuf cursor restoration fails!\n" "InnoDB: ibuf record inserted to page %lu:%lu\n", (ulong) space, (ulong) page_no); @@ -4694,15 +4681,13 @@ fputs("InnoDB: cannot retrieve bitmap page\n", stderr); } else { - buf_page_print(bitmap_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(bitmap_page, 0); } ibuf_mtr_commit(&mtr); fputs("\nInnoDB: Dump of the page:\n", stderr); - buf_page_print(block->frame, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(block->frame, 0); fprintf(stderr, "InnoDB: Error: corruption in the tablespace." @@ -4718,7 +4703,7 @@ "InnoDB: to determine if they are corrupt" " after this.\n\n" "InnoDB: Please submit a detailed bug report" - " to http://bugs.mysql.com\n\n", + " to https://jira.mariadb.org/\n\n", (ulong) page_no, (ulong) fil_page_get_type(block->frame)); @@ -5151,7 +5136,20 @@ return(DB_TABLE_NOT_FOUND); } - size = fil_space_get_size(space_id); + mtr_t mtr; + mtr_start(&mtr); + { + buf_block_t* sp = buf_page_get(space_id, zip_size, 0, + RW_S_LATCH, &mtr); + if (sp) { + size = mach_read_from_4( + FSP_HEADER_OFFSET + FSP_FREE_LIMIT + + sp->frame); + } else { + size = 0; + } + } + mtr_commit(&mtr); if (size == 0) { return(DB_TABLE_NOT_FOUND); @@ -5162,7 +5160,6 @@ page_size = zip_size ? zip_size : UNIV_PAGE_SIZE; for (page_no = 0; page_no < size; page_no += page_size) { - mtr_t mtr; page_t* bitmap_page; ulint i; diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/btr0btr.ic mariadb-10.1-10.1.30/storage/innobase/include/btr0btr.ic --- mariadb-10.1-10.1.25/storage/innobase/include/btr0btr.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/btr0btr.ic 2017-12-21 15:48:51.000000000 +0000 @@ -306,7 +306,7 @@ "InnoDB: a nonsensical page number 0" " in a node ptr record at offset %lu\n", (ulong) page_offset(rec)); - buf_page_print(page_align(rec), 0, 0); + buf_page_print(page_align(rec), 0); ut_ad(0); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/btr0scrub.h mariadb-10.1-10.1.30/storage/innobase/include/btr0scrub.h --- mariadb-10.1-10.1.25/storage/innobase/include/btr0scrub.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/btr0scrub.h 2017-12-21 15:48:51.000000000 +0000 @@ -154,13 +154,10 @@ ulint space, /*!< in: space */ btr_scrub_t* scrub_data); /*!< in/out: scrub data */ -/**************************************************************** -Complete iterating a space -* @return true if space was scrubbed */ +/** Complete iterating a space. +@param[in,out] scrub_data scrub data */ UNIV_INTERN -bool -btr_scrub_complete_space( -/*=====================*/ - btr_scrub_t* scrub_data); /*!< in/out: scrub data */ +void +btr_scrub_complete_space(btr_scrub_t* scrub_data); #endif diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/buf0buf.h mariadb-10.1-10.1.30/storage/innobase/include/buf0buf.h --- mariadb-10.1-10.1.25/storage/innobase/include/buf0buf.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/buf0buf.h 2017-12-21 15:48:51.000000000 +0000 @@ -31,6 +31,7 @@ #include "fil0fil.h" #include "mtr0types.h" #include "buf0types.h" +#ifndef UNIV_INNOCHECKSUM #include "hash0hash.h" #include "ut0byte.h" #include "page0types.h" @@ -58,6 +59,7 @@ #define BUF_GET_POSSIBLY_FREED 16 /*!< Like BUF_GET, but do not mind if the file page has been freed. */ +#define BUF_EVICT_IF_IN_POOL 20 /*!< evict a clean block if found */ /* @} */ /** @name Modes for buf_page_get_known_nowait */ /* @{ */ @@ -643,6 +645,8 @@ # define buf_block_modify_clock_inc(block) ((void) 0) #endif /* !UNIV_HOTBACKUP */ +#endif /* !UNIV_INNOCHECKSUM */ + /** Checks if the page is in crc32 checksum format. @param[in] read_buf database page @param[in] checksum_field1 new checksum field @@ -691,8 +695,13 @@ bool check_lsn, const byte* read_buf, ulint zip_size, +#ifndef UNIV_INNOCHECKSUM const fil_space_t* space) +#else + const void* space = NULL) +#endif MY_ATTRIBUTE((warn_unused_result)); + /** Check if a page is all zeroes. @param[in] read_buf database page @param[in] zip_size ROW_FORMAT=COMPRESSED page size, or 0 @@ -700,6 +709,9 @@ UNIV_INTERN bool buf_page_is_zeroes(const byte* read_buf, ulint zip_size); + +#ifndef UNIV_INNOCHECKSUM + #ifndef UNIV_HOTBACKUP /**********************************************************************//** Gets the space id, page offset, and byte offset within page of a @@ -762,25 +774,13 @@ /*============*/ #endif /* UNIV_DEBUG_PRINT || UNIV_DEBUG || UNIV_BUF_DEBUG */ #endif /* !UNIV_HOTBACKUP */ -enum buf_page_print_flags { - /** Do not crash at the end of buf_page_print(). */ - BUF_PAGE_PRINT_NO_CRASH = 1, - /** Do not print the full page dump. */ - BUF_PAGE_PRINT_NO_FULL = 2 -}; -/********************************************************************//** -Prints a page to stderr. */ +/** Dump a page to stderr. +@param[in] read_buf database page +@param[in] zip_size compressed page size, or 0 for uncompressed */ UNIV_INTERN void -buf_page_print( -/*===========*/ - const byte* read_buf, /*!< in: a database page */ - ulint zip_size, /*!< in: compressed page size, or - 0 for uncompressed pages */ - ulint flags) /*!< in: 0 or - BUF_PAGE_PRINT_NO_CRASH or - BUF_PAGE_PRINT_NO_FULL */ +buf_page_print(const byte* read_buf, ulint zip_size) UNIV_COLD MY_ATTRIBUTE((nonnull)); /********************************************************************//** Decompress a block. @@ -2470,4 +2470,5 @@ #include "buf0buf.ic" #endif +#endif /*! UNIV_INNOCHECKSUM */ #endif diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/buf0lru.h mariadb-10.1-10.1.30/storage/innobase/include/buf0lru.h --- mariadb-10.1-10.1.25/storage/innobase/include/buf0lru.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/buf0lru.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -51,19 +52,14 @@ /** Minimum LRU list length for which the LRU_old pointer is defined */ #define BUF_LRU_OLD_MIN_LEN 512 /* 8 megabytes of 16k pages */ -/******************************************************************//** -Flushes all dirty pages or removes all pages belonging -to a given tablespace. A PROBLEM: if readahead is being started, what -guarantees that it will not try to read in pages after this operation -has completed? */ +/** Empty the flush list for all pages belonging to a tablespace. +@param[in] id tablespace identifier +@param[in] trx transaction, for checking for user interrupt; + or NULL if nothing is to be written +@param[in] drop_ahi whether to drop the adaptive hash index */ UNIV_INTERN void -buf_LRU_flush_or_remove_pages( -/*==========================*/ - ulint id, /*!< in: space id */ - buf_remove_t buf_remove, /*!< in: remove or flush strategy */ - const trx_t* trx); /*!< to check if the operation must - be interrupted */ +buf_LRU_flush_or_remove_pages(ulint id, const trx_t* trx, bool drop_ahi=false); #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG /********************************************************************//** diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/buf0types.h mariadb-10.1-10.1.30/storage/innobase/include/buf0types.h --- mariadb-10.1-10.1.25/storage/innobase/include/buf0types.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/buf0types.h 2017-12-21 15:48:51.000000000 +0000 @@ -58,17 +58,6 @@ BUF_FLUSH_N_TYPES /*!< index of last element + 1 */ }; -/** Algorithm to remove the pages for a tablespace from the buffer pool. -See buf_LRU_flush_or_remove_pages(). */ -enum buf_remove_t { - BUF_REMOVE_ALL_NO_WRITE, /*!< Remove all pages from the buffer - pool, don't write or sync to disk */ - BUF_REMOVE_FLUSH_NO_WRITE, /*!< Remove only, from the flush list, - don't write or sync to disk */ - BUF_REMOVE_FLUSH_WRITE /*!< Flush dirty pages to disk only - don't remove from the buffer pool */ -}; - /** Flags for io_fix types */ enum buf_io_fix { BUF_IO_NONE = 0, /**< no pending I/O */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/data0type.ic mariadb-10.1-10.1.30/storage/innobase/include/data0type.ic --- mariadb-10.1-10.1.25/storage/innobase/include/data0type.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/data0type.ic 2017-12-21 15:48:51.000000000 +0000 @@ -576,7 +576,7 @@ return(len); #endif /* !UNIV_HOTBACKUP */ /* Treat as variable-length. */ - /* Fall through */ + /* fall through */ case DATA_VARCHAR: case DATA_BINARY: case DATA_DECIMAL: diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/dict0dict.h mariadb-10.1-10.1.30/storage/innobase/include/dict0dict.h --- mariadb-10.1-10.1.25/storage/innobase/include/dict0dict.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/dict0dict.h 2017-12-21 15:48:51.000000000 +0000 @@ -620,17 +620,6 @@ ulint col_nr) /*!< in: column number */ MY_ATTRIBUTE((nonnull, warn_unused_result)); /**********************************************************************//** -Returns a column's name. -@return column name. NOTE: not guaranteed to stay valid if table is -modified in any way (columns added, etc.). */ -UNIV_INTERN -const char* -dict_table_get_col_name_for_mysql( -/*==============================*/ - const dict_table_t* table, /*!< in: table */ - const char* col_name)/*!< in: MySQL table column name */ - MY_ATTRIBUTE((nonnull, warn_unused_result)); -/**********************************************************************//** Prints a table data. */ UNIV_INTERN void @@ -1654,9 +1643,6 @@ on name */ hash_table_t* table_id_hash; /*!< hash table of the tables, based on id */ - ulint size; /*!< varying space in bytes occupied - by the data dictionary table and - index objects */ dict_table_t* sys_tables; /*!< SYS_TABLES table */ dict_table_t* sys_columns; /*!< SYS_COLUMNS table */ dict_table_t* sys_indexes; /*!< SYS_INDEXES table */ @@ -1910,6 +1896,13 @@ ulint col_index); /*!< in: position of column in table */ +/** Calculate the used memory occupied by the data dictionary +table and index objects. +@return number of bytes occupied. */ +UNIV_INTERN +ulint +dict_sys_get_size(); + #endif /* !UNIV_HOTBACKUP */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/dict0dict.ic mariadb-10.1-10.1.30/storage/innobase/include/dict0dict.ic --- mariadb-10.1-10.1.25/storage/innobase/include/dict0dict.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/dict0dict.ic 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2013, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -934,7 +934,7 @@ fsp_flags |= FSP_FLAGS_MASK_PAGE_COMPRESSION; } - ut_a(fsp_flags_is_valid(fsp_flags)); + ut_a(fsp_flags_is_valid(fsp_flags, false)); if (DICT_TF_HAS_DATA_DIR(table_flags)) { fsp_flags |= 1U << FSP_FLAGS_MEM_DATA_DIR; @@ -1077,6 +1077,27 @@ } /*********************************************************************//** +Returns true if the particular FTS index in the table is still syncing +in the background, false otherwise. +@param [in] table Table containing FTS index +@return True if sync of fts index is still going in the background */ +UNIV_INLINE +bool +dict_fts_index_syncing( + dict_table_t* table) +{ + dict_index_t* index; + + for (index = dict_table_get_first_index(table); + index != NULL; + index = dict_table_get_next_index(index)) { + if (index->index_fts_syncing) { + return(true); + } + } + return(false); +} +/*********************************************************************//** Release the exclusive locks on all index tree. */ UNIV_INLINE void diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/dict0mem.h mariadb-10.1-10.1.30/storage/innobase/include/dict0mem.h --- mariadb-10.1-10.1.25/storage/innobase/include/dict0mem.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/dict0mem.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. Copyright (c) 2013, 2017, MariaDB Corporation. @@ -704,6 +704,8 @@ dict_sys->mutex. Other changes are protected by index->lock. */ dict_field_t* fields; /*!< array of field descriptions */ + bool index_fts_syncing;/*!< Whether the fts index is + still syncing in the background */ #ifndef UNIV_HOTBACKUP UT_LIST_NODE_T(dict_index_t) indexes;/*!< list of indexes of the table */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/dict0stats_bg.h mariadb-10.1-10.1.30/storage/innobase/include/dict0stats_bg.h --- mariadb-10.1-10.1.25/storage/innobase/include/dict0stats_bg.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/dict0stats_bg.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -83,7 +83,7 @@ /** Yield the data dictionary latch when waiting for the background thread to stop accessing a table. @param trx transaction holding the data dictionary locks */ -#define DICT_STATS_BG_YIELD(trx) do { \ +#define DICT_BG_YIELD(trx) do { \ row_mysql_unlock_data_dictionary(trx); \ os_thread_sleep(250000); \ row_mysql_lock_data_dictionary(trx); \ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/fil0crypt.h mariadb-10.1-10.1.30/storage/innobase/include/fil0crypt.h --- mariadb-10.1-10.1.25/storage/innobase/include/fil0crypt.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/fil0crypt.h 2017-12-21 15:48:51.000000000 +0000 @@ -71,9 +71,11 @@ /** is encryption enabled */ extern ulong srv_encrypt_tables; +#ifndef UNIV_INNOCHECKSUM #ifdef UNIV_PFS_MUTEX extern mysql_pfs_key_t fil_crypt_data_mutex_key; #endif +#endif /* !UNIV_INNOCHECKSUM */ /** Mutex helper for crypt_data->scheme @param[in, out] schme encryption scheme @@ -102,6 +104,8 @@ } scrubbing; }; +#ifndef UNIV_INNOCHECKSUM + struct fil_space_crypt_t : st_encryption_scheme { public: @@ -399,6 +403,8 @@ const byte* dst_frame) MY_ATTRIBUTE((warn_unused_result)); +#endif /* UNIV_INNOCHECKSUM */ + /********************************************************************* Verify that post encryption checksum match calculated checksum. This function should be called only if tablespace contains crypt_data @@ -417,10 +423,16 @@ fil_space_verify_crypt_checksum( byte* page, ulint zip_size, +#ifndef UNIV_INNOCHECKSUM const fil_space_t* space, +#else + const void* space, +#endif ulint pageno) MY_ATTRIBUTE((warn_unused_result)); +#ifndef UNIV_INNOCHECKSUM + /********************************************************************* Adjust thread count for key rotation @param[in] enw_cnt Number of threads to be used */ @@ -508,4 +520,5 @@ #include "fil0crypt.ic" #endif +#endif /* !UNIV_INNOCHECKSUM */ #endif /* fil0crypt_h */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/fil0fil.h mariadb-10.1-10.1.30/storage/innobase/include/fil0fil.h --- mariadb-10.1-10.1.25/storage/innobase/include/fil0fil.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/fil0fil.h 2017-12-21 15:48:51.000000000 +0000 @@ -183,8 +183,6 @@ #define FIL_LOG 502 /*!< redo log */ /* @} */ -#ifndef UNIV_INNOCHECKSUM - /** Structure containing encryption specification */ struct fil_space_crypt_t; @@ -209,6 +207,10 @@ /** Number of files currently open */ extern ulint fil_n_file_opened; +#ifndef UNIV_INNOCHECKSUM + +struct fil_space_t; + struct fsp_open_info { ibool success; /*!< Has the tablespace been opened? */ const char* check_msg; /*!< fil_check_first_page() message */ @@ -225,8 +227,6 @@ dict_table_t* table; /*!< table */ }; -struct fil_space_t; - /** File node of a tablespace or the log data space */ struct fil_node_t { fil_space_t* space; /*!< backpointer to the space where this node @@ -802,6 +802,8 @@ data files @param[out] flushed_lsn flushed lsn value @param[out] crypt_data encryption crypt data +@param[in] check_first_page true if first page contents + should be checked @retval NULL on success, or if innodb_force_recovery is set @return pointer to an error message string */ UNIV_INTERN @@ -816,7 +818,8 @@ ulint* max_arch_log_no, #endif /* UNIV_LOG_ARCHIVE */ lsn_t* flushed_lsn, - fil_space_crypt_t** crypt_data) + fil_space_crypt_t** crypt_data, + bool check_first_page=true) MY_ATTRIBUTE((warn_unused_result)); #endif /* !UNIV_HOTBACKUP */ @@ -848,18 +851,13 @@ only be parsed but not replayed */ ulint log_flags); /*!< in: redo log flags (stored in the page number parameter) */ -/*******************************************************************//** -Deletes a single-table tablespace. The tablespace must be cached in the -memory cache. -@return TRUE if success */ +/** Delete a tablespace and associated .ibd file. +@param[in] id tablespace identifier +@param[in] drop_ahi whether to drop the adaptive hash index +@return DB_SUCCESS or error */ UNIV_INTERN dberr_t -fil_delete_tablespace( -/*==================*/ - ulint id, /*!< in: space id */ - buf_remove_t buf_remove); /*!< in: specify the action to take - on the tables pages in the buffer - pool */ +fil_delete_tablespace(ulint id, bool drop_ahi = false); /*******************************************************************//** Closes a single-table tablespace. The tablespace must be cached in the memory cache. Free all pages used by the tablespace. diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/fsp0fsp.h mariadb-10.1-10.1.30/storage/innobase/include/fsp0fsp.h --- mariadb-10.1-10.1.25/storage/innobase/include/fsp0fsp.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/fsp0fsp.h 2017-12-21 15:48:51.000000000 +0000 @@ -788,11 +788,12 @@ /** Validate the tablespace flags, which are stored in the tablespace header at offset FSP_SPACE_FLAGS. @param[in] flags the contents of FSP_SPACE_FLAGS +@param[in] is_ibd whether this is an .ibd file (not system tablespace) @return whether the flags are correct (not in the buggy 10.1) format */ MY_ATTRIBUTE((warn_unused_result, const)) UNIV_INLINE bool -fsp_flags_is_valid(ulint flags) +fsp_flags_is_valid(ulint flags, bool is_ibd) { DBUG_EXECUTE_IF("fsp_flags_is_valid_failure", return(false);); @@ -816,7 +817,7 @@ bits 10..14 would be nonzero 0bsssaa where sss is nonzero PAGE_SSIZE (3, 4, 6, or 7) and aa is ATOMIC_WRITES (not 0b11). */ - if (FSP_FLAGS_GET_RESERVED(flags) & ~1) { + if (FSP_FLAGS_GET_RESERVED(flags) & ~1U) { return(false); } @@ -839,7 +840,12 @@ return(false); } - return(true); + /* The flags do look valid. But, avoid misinterpreting + buggy MariaDB 10.1 format flags for + PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL={0,2,3} + as valid-looking PAGE_SSIZE if this is known to be + an .ibd file and we are using the default innodb_page_size=16k. */ + return(ssize == 0 || !is_ibd || srv_page_size != UNIV_PAGE_SIZE_ORIG); } /** Convert FSP_SPACE_FLAGS from the buggy MariaDB 10.1.0..10.1.20 format. @@ -948,7 +954,7 @@ flags = ((flags & 0x3f) | ssize << FSP_FLAGS_POS_PAGE_SSIZE | FSP_FLAGS_GET_PAGE_COMPRESSION_MARIADB101(flags) << FSP_FLAGS_POS_PAGE_COMPRESSION); - ut_ad(fsp_flags_is_valid(flags)); + ut_ad(fsp_flags_is_valid(flags, false)); return(flags); } @@ -962,7 +968,7 @@ fsp_flags_match(ulint expected, ulint actual) { expected &= ~FSP_FLAGS_MEM_MASK; - ut_ad(fsp_flags_is_valid(expected)); + ut_ad(fsp_flags_is_valid(expected, false)); if (actual == expected) { return(true); diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/fts0fts.h mariadb-10.1-10.1.30/storage/innobase/include/fts0fts.h --- mariadb-10.1-10.1.25/storage/innobase/include/fts0fts.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/fts0fts.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2016, MariaDB Corporation. All Rights reserved. +Copyright (c) 2016, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -429,21 +429,6 @@ MY_ATTRIBUTE((nonnull(2))); /******************************************************************//** -Create a new document id . -@return DB_SUCCESS if all went well else error */ -UNIV_INTERN -dberr_t -fts_create_doc_id( -/*==============*/ - dict_table_t* table, /*!< in: row is of this - table. */ - dtuple_t* row, /*!< in/out: add doc id - value to this row. This is the - current row that is being - inserted. */ - mem_heap_t* heap) /*!< in: heap */ - MY_ATTRIBUTE((nonnull)); -/******************************************************************//** Create a new fts_doc_ids_t. @return new fts_doc_ids_t. */ UNIV_INTERN diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/lock0lock.h mariadb-10.1-10.1.30/storage/innobase/include/lock0lock.h --- mariadb-10.1-10.1.25/storage/innobase/include/lock0lock.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/lock0lock.h 2017-12-21 15:48:51.000000000 +0000 @@ -1024,6 +1024,10 @@ lock_get_info( const lock_t*); +/*******************************************************************//** +@return whether wsrep_on is true on trx->mysql_thd*/ +#define wsrep_on_trx(trx) ((trx)->mysql_thd && wsrep_on((trx)->mysql_thd)) + #endif /* WITH_WSREP */ #ifndef UNIV_NONINL #include "lock0lock.ic" diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/log0crypt.h mariadb-10.1-10.1.30/storage/innobase/include/log0crypt.h --- mariadb-10.1-10.1.25/storage/innobase/include/log0crypt.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/log0crypt.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (C) 2013, 2015, Google Inc. All Rights Reserved. -Copyright (C) 2014, 2016, MariaDB Corporation. All Rights Reserved. +Copyright (C) 2014, 2017, MariaDB Corporation. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -29,6 +29,7 @@ #include "univ.i" #include "ut0byte.h" #include "my_crypt.h" +#include "os0file.h" typedef int Crypt_result; @@ -125,4 +126,45 @@ /*============================*/ const byte* log_block); +/** Encrypt temporary log block. +@param[in] src_block block to encrypt or decrypt +@param[in] size size of the block +@param[out] dst_block destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return true if successfull, false in case of failure +*/ +UNIV_INTERN +bool +log_tmp_block_encrypt( + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id) + MY_ATTRIBUTE((warn_unused_result)); + +/** Decrypt temporary log block. +@param[in] src_block block to encrypt or decrypt +@param[in] size size of the block +@param[out] dst_block destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return true if successfull, false in case of failure +*/ +UNIV_INTERN +bool +log_tmp_block_decrypt( + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id) + MY_ATTRIBUTE((warn_unused_result)); + +/** Find out is temporary log files encrypted. +@return true if temporary log file should be encrypted, false if not */ +UNIV_INTERN +bool +log_tmp_is_encrypted() MY_ATTRIBUTE((warn_unused_result)); #endif // log0crypt.h diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/mach0data.ic mariadb-10.1-10.1.30/storage/innobase/include/mach0data.ic --- mariadb-10.1-10.1.25/storage/innobase/include/mach0data.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/mach0data.ic 2017-12-21 15:48:51.000000000 +0000 @@ -154,6 +154,8 @@ ); } +#endif /* !UNIV_INNOCHECKSUM */ + /*******************************************************//** The following function is used to store data in four consecutive bytes. We store the most significant byte to the lowest address. */ @@ -172,8 +174,6 @@ b[3] = (byte) n; } -#endif /* !UNIV_INNOCHECKSUM */ - /********************************************************//** The following function is used to fetch data from 4 consecutive bytes. The most significant byte is at the lowest address. diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/mtr0log.ic mariadb-10.1-10.1.30/storage/innobase/include/mtr0log.ic --- mariadb-10.1-10.1.25/storage/innobase/include/mtr0log.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/mtr0log.ic 2017-12-21 15:48:51.000000000 +0000 @@ -215,7 +215,7 @@ "%d on page %lu of space %lu in the " "doublewrite buffer, continuing anyway.\n" "Please post a bug report to " - "bugs.mysql.com.\n", + "https://jira.mariadb.org/\n", type, offset, space); ut_ad(0); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/os0file.h mariadb-10.1-10.1.30/storage/innobase/include/os0file.h --- mariadb-10.1-10.1.25/storage/innobase/include/os0file.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/os0file.h 2017-12-21 15:48:51.000000000 +0000 @@ -405,10 +405,10 @@ os_file_read_no_error_handling_func(file, buf, offset, n) # define os_file_read_no_error_handling_int_fd( \ file, buf, offset, n) \ - os_file_read_no_error_handling_func(file, buf, offset, n) + os_file_read_no_error_handling_func(OS_FILE_FROM_FD(file), buf, offset, n) # define os_file_write_int_fd(name, file, buf, offset, n) \ - os_file_write_func(name, file, buf, offset, n) + os_file_write_func(name, OS_FILE_FROM_FD(file), buf, offset, n) # define os_file_write(name, file, buf, offset, n) \ os_file_write_func(name, file, buf, offset, n) diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/page0page.ic mariadb-10.1-10.1.30/storage/innobase/include/page0page.ic --- mariadb-10.1-10.1.25/storage/innobase/include/page0page.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/page0page.ic 2017-12-21 15:48:51.000000000 +0000 @@ -772,7 +772,7 @@ (void*) rec, (ulong) page_get_space_id(page), (ulong) page_get_page_no(page)); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); ut_error; } else if (offs == 0) { diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/page0size.h mariadb-10.1-10.1.30/storage/innobase/include/page0size.h --- mariadb-10.1-10.1.25/storage/innobase/include/page0size.h 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/page0size.h 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,200 @@ +/***************************************************************************** + +Copyright (c) 2013, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +*****************************************************************************/ + +/**************************************************//** +@file include/page0size.h +A class describing a page size. + +Created Nov 14, 2013 Vasil Dimov +*******************************************************/ + +#ifndef page0size_t +#define page0size_t + +#include "univ.i" +#include "fsp0types.h" + +#define FIELD_REF_SIZE 20 + +/** A BLOB field reference full of zero, for use in assertions and +tests.Initially, BLOB field references are set to zero, in +dtuple_convert_big_rec(). */ +extern const byte field_ref_zero[FIELD_REF_SIZE]; + +#define PAGE_SIZE_T_SIZE_BITS 17 + +/** Page size descriptor. Contains the physical and logical page size, as well +as whether the page is compressed or not. */ +class page_size_t { +public: + /** Constructor from (physical, logical, is_compressed). + @param[in] physical physical (on-disk/zipped) page size + @param[in] logical logical (in-memory/unzipped) page size + @param[in] is_compressed whether the page is compressed */ + page_size_t(ulint physical, ulint logical, bool is_compressed) + { + if (physical == 0) { + physical = UNIV_PAGE_SIZE_ORIG; + } + if (logical == 0) { + logical = UNIV_PAGE_SIZE_ORIG; + } + + m_physical = static_cast(physical); + m_logical = static_cast(logical); + m_is_compressed = static_cast(is_compressed); + + ut_ad(physical <= (1 << PAGE_SIZE_T_SIZE_BITS)); + ut_ad(logical <= (1 << PAGE_SIZE_T_SIZE_BITS)); + + ut_ad(ut_is_2pow(physical)); + ut_ad(ut_is_2pow(logical)); + + ut_ad(logical <= UNIV_PAGE_SIZE_MAX); + ut_ad(logical >= physical); + ut_ad(!is_compressed || physical <= UNIV_ZIP_SIZE_MAX); + } + + /** Constructor from (fsp_flags). + @param[in] fsp_flags filespace flags */ + explicit page_size_t(ulint fsp_flags) + { + ulint ssize = FSP_FLAGS_GET_PAGE_SSIZE(fsp_flags); + + /* If the logical page size is zero in fsp_flags, then use the + legacy 16k page size. */ + ssize = (0 == ssize) ? UNIV_PAGE_SSIZE_ORIG : ssize; + + /* Convert from a 'log2 minus 9' to a page size in bytes. */ + const unsigned size = ((UNIV_ZIP_SIZE_MIN >> 1) << ssize); + + ut_ad(size <= UNIV_PAGE_SIZE_MAX); + ut_ad(size <= (1 << PAGE_SIZE_T_SIZE_BITS)); + + m_logical = size; + + ssize = FSP_FLAGS_GET_ZIP_SSIZE(fsp_flags); + + /* If the fsp_flags have zero in the zip_ssize field, then it means + that the tablespace does not have compressed pages and the physical + page size is the same as the logical page size. */ + if (ssize == 0) { + m_is_compressed = false; + m_physical = m_logical; + } else { + m_is_compressed = true; + + /* Convert from a 'log2 minus 9' to a page size + in bytes. */ + const unsigned phy + = ((UNIV_ZIP_SIZE_MIN >> 1) << ssize); + + ut_ad(phy <= UNIV_ZIP_SIZE_MAX); + ut_ad(phy <= (1 << PAGE_SIZE_T_SIZE_BITS)); + + m_physical = phy; + } + } + + /** Retrieve the physical page size (on-disk). + @return physical page size in bytes */ + inline ulint physical() const + { + ut_ad(m_physical > 0); + + return(m_physical); + } + + /** Retrieve the logical page size (in-memory). + @return logical page size in bytes */ + inline ulint logical() const + { + ut_ad(m_logical > 0); + return(m_logical); + } + + /** Check whether the page is compressed on disk. + @return true if compressed */ + inline bool is_compressed() const + { + return(m_is_compressed); + } + + /** Copy the values from a given page_size_t object. + @param[in] src page size object whose values to fetch */ + inline void copy_from(const page_size_t& src) + { + *this = src; + } + + /** Check if a given page_size_t object is equal to the current one. + @param[in] a page_size_t object to compare + @return true if equal */ + inline bool equals_to(const page_size_t& a) const + { + return(a.physical() == m_physical + && a.logical() == m_logical + && a.is_compressed() == m_is_compressed); + } + +private: + + /* For non compressed tablespaces, physical page size is equal to + the logical page size and the data is stored in buf_page_t::frame + (and is also always equal to univ_page_size (--innodb-page-size=)). + + For compressed tablespaces, physical page size is the compressed + page size as stored on disk and in buf_page_t::zip::data. The logical + page size is the uncompressed page size in memory - the size of + buf_page_t::frame (currently also always equal to univ_page_size + (--innodb-page-size=)). */ + + /** Physical page size. */ + unsigned m_physical:PAGE_SIZE_T_SIZE_BITS; + + /** Logical page size. */ + unsigned m_logical:PAGE_SIZE_T_SIZE_BITS; + + /** Flag designating whether the physical page is compressed, which is + true IFF the whole tablespace where the page belongs is compressed. */ + unsigned m_is_compressed:1; +}; + +#ifndef UNIV_INNOCHECKSUM +/* Overloading the global output operator to conveniently print an object +of type the page_size_t. +@param[in,out] out the output stream +@param[in] obj an object of type page_size_t to be printed +@retval the output stream */ +inline +std::ostream& +operator<<( + std::ostream& out, + const page_size_t& obj) +{ + out << "[page size: physical=" << obj.physical() + << ", logical=" << obj.logical() + << ", compressed=" << obj.is_compressed() << "]"; + return(out); +} +#endif + +extern page_size_t univ_page_size; + +#endif /* page0size_t */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/page0zip.ic mariadb-10.1-10.1.30/storage/innobase/include/page0zip.ic --- mariadb-10.1-10.1.25/storage/innobase/include/page0zip.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/page0zip.ic 2017-12-21 15:48:51.000000000 +0000 @@ -174,12 +174,13 @@ ulint zip_size) /*!< in: compressed page size in bytes, or 0 */ { ut_ad(rec_size - > (comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES)); + > ulint(comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES)); ut_ad(ut_is_2pow(zip_size)); ut_ad(comp || !zip_size); -#if UNIV_PAGE_SIZE_MAX > REC_MAX_DATA_SIZE - if (rec_size >= REC_MAX_DATA_SIZE) { +#if UNIV_PAGE_SIZE_MAX > COMPRESSED_REC_MAX_DATA_SIZE + if (comp ? rec_size >= COMPRESSED_REC_MAX_DATA_SIZE : + rec_size >= REDUNDANT_REC_MAX_DATA_SIZE) { return(TRUE); } #endif diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/que0que.h mariadb-10.1-10.1.30/storage/innobase/include/que0que.h --- mariadb-10.1-10.1.25/storage/innobase/include/que0que.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/que0que.h 2017-12-21 15:48:51.000000000 +0000 @@ -384,9 +384,6 @@ thrs; /*!< list of thread nodes of the fork node */ UT_LIST_NODE_T(que_thr_t) - trx_thrs; /*!< lists of threads in wait list of - the trx */ - UT_LIST_NODE_T(que_thr_t) queue; /*!< list of runnable thread nodes in the server task queue */ ulint fk_cascade_depth; /*!< maximum cascading call depth diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/rem0rec.h mariadb-10.1-10.1.30/storage/innobase/include/rem0rec.h --- mariadb-10.1-10.1.25/storage/innobase/include/rem0rec.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/rem0rec.h 2017-12-21 15:48:51.000000000 +0000 @@ -980,9 +980,15 @@ #define REC_1BYTE_OFFS_LIMIT 0x7FUL #define REC_2BYTE_OFFS_LIMIT 0x7FFFUL -/* The data size of record must be smaller than this because we reserve -two upmost bits in a two byte offset for special purposes */ -#define REC_MAX_DATA_SIZE (16384) +/* The data size of record must not be larger than this on +REDUNDANT row format because we reserve two upmost bits in a +two byte offset for special purposes */ +#define REDUNDANT_REC_MAX_DATA_SIZE (16383) + +/* The data size of record must be smaller than this on +COMPRESSED row format because we reserve two upmost bits in a +two byte offset for special purposes */ +#define COMPRESSED_REC_MAX_DATA_SIZE (16384) #ifdef WITH_WSREP int wsrep_rec_get_foreign_key( diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/row0ftsort.h mariadb-10.1-10.1.30/storage/innobase/include/row0ftsort.h --- mariadb-10.1-10.1.25/storage/innobase/include/row0ftsort.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/row0ftsort.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2015, 2016, MariaDB Corporation. +Copyright (c) 2015, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -72,7 +72,6 @@ store Doc ID during sort, if Doc ID will not be big enough to use 8 bytes value */ - fil_space_crypt_t* crypt_data; /*!< crypt data or NULL */ }; struct fts_psort_t { diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/row0merge.h mariadb-10.1-10.1.30/storage/innobase/include/row0merge.h --- mariadb-10.1-10.1.25/storage/innobase/include/row0merge.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/row0merge.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2015, 2016, MariaDB Corporation. +Copyright (c) 2015, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -41,9 +41,6 @@ #include "lock0types.h" #include "srv0srv.h" -/* Reserve free space from every block for key_version */ -#define ROW_MERGE_RESERVE_SIZE 4 - /* Cluster index read task is mandatory */ #define COST_READ_CLUSTERED_INDEX 1.0 @@ -111,7 +108,6 @@ ulint col_no; /*!< column offset */ ulint prefix_len; /*!< column prefix length, or 0 if indexing the whole column */ - const char* col_name; /*!< column name or NULL */ }; /** Definition of an index being created */ @@ -268,11 +264,7 @@ /*===================*/ trx_t* trx, /*!< in/out: trx (sets error_state) */ dict_table_t* table, /*!< in: the index is on this table */ - const index_def_t* index_def, - /*!< in: the index definition */ - const char** col_names); - /*! in: column names if columns are - renamed or NULL */ + const index_def_t* index_def); /*!< in: the index definition */ /*********************************************************************//** Check if a transaction can use an index. @return TRUE if index can be used by the transaction else FALSE */ @@ -352,17 +344,16 @@ Write a merge block to the file system. @return TRUE if request was successful, FALSE if fail */ UNIV_INTERN -ibool +bool row_merge_write( /*============*/ int fd, /*!< in: file descriptor */ ulint offset, /*!< in: offset where to write, in number of row_merge_block_t elements */ const void* buf, /*!< in: data */ - fil_space_crypt_t* crypt_data, /*!< in: table crypt data */ void* crypt_buf, /*!< in: crypt buf or NULL */ - ulint space); /*!< in: space id */ - + ulint space) /*!< in: space id */ + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Empty a sort buffer. @return sort buffer */ @@ -400,10 +391,10 @@ const bool update_progress, /*!< in: update progress status variable or not */ const float pct_progress, /*!< in: total progress percent until now */ const float pct_cost, /*!< in: current progress percent */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ - __attribute__((nonnull(1,2,3,4,5))); + MY_ATTRIBUTE((warn_unused_result)); + /*********************************************************************//** Allocate a sort buffer. @return own: sort buffer */ @@ -433,7 +424,7 @@ Read a merge block from the file system. @return TRUE if request was successful, FALSE if fail */ UNIV_INTERN -ibool +bool row_merge_read( /*===========*/ int fd, /*!< in: file descriptor */ @@ -441,9 +432,9 @@ in number of row_merge_block_t elements */ row_merge_block_t* buf, /*!< out: data */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_buf, /*!< in: crypt buf or NULL */ - ulint space); /*!< in: space id */ + ulint space) /*!< in: space id */ + MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Read a merge record. @@ -462,8 +453,8 @@ or NULL on end of list (non-NULL on I/O error) */ ulint* offsets,/*!< out: offsets of mrec */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ - __attribute__((nonnull(1,2,3,4,6,7,8), warn_unused_result)); + MY_ATTRIBUTE((warn_unused_result)); + #endif /* row0merge.h */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/row0sel.h mariadb-10.1-10.1.30/storage/innobase/include/row0sel.h --- mariadb-10.1-10.1.25/storage/innobase/include/row0sel.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/row0sel.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -205,6 +205,18 @@ when data != NULL */ }; +/** Copy used fields from cached row. +Copy cache record field by field, don't touch fields that +are not covered by current key. +@param[out] buf Where to copy the MySQL row. +@param[in] cached_rec What to copy (in MySQL row format). +@param[in] prebuilt prebuilt struct. */ +void +row_sel_copy_cached_fields_for_mysql( + byte* buf, + const byte* cached_rec, + row_prebuilt_t* prebuilt); + /** Query plan */ struct plan_t{ dict_table_t* table; /*!< table struct in the dictionary diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/srv0srv.h mariadb-10.1-10.1.30/storage/innobase/include/srv0srv.h --- mariadb-10.1-10.1.25/storage/innobase/include/srv0srv.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/srv0srv.h 2017-12-21 15:48:51.000000000 +0000 @@ -137,6 +137,14 @@ ulint_ctr_64_t pages_encrypted; /* Number of pages decrypted */ ulint_ctr_64_t pages_decrypted; + /* Number of merge blocks encrypted */ + ulint_ctr_64_t n_merge_blocks_encrypted; + /* Number of merge blocks decrypted */ + ulint_ctr_64_t n_merge_blocks_decrypted; + /* Number of row log blocks encrypted */ + ulint_ctr_64_t n_rowlog_blocks_encrypted; + /* Number of row log blocks decrypted */ + ulint_ctr_64_t n_rowlog_blocks_decrypted; /** Number of data read in total (in bytes) */ ulint_ctr_1_t data_read; @@ -1033,6 +1041,15 @@ ib_int64_t innodb_pages_decrypted; /*!< Number of pages decrypted */ + /*!< Number of merge blocks encrypted */ + ib_int64_t innodb_n_merge_blocks_encrypted; + /*!< Number of merge blocks decrypted */ + ib_int64_t innodb_n_merge_blocks_decrypted; + /*!< Number of row log blocks encrypted */ + ib_int64_t innodb_n_rowlog_blocks_encrypted; + /*!< Number of row log blocks decrypted */ + ib_int64_t innodb_n_rowlog_blocks_decrypted; + ulint innodb_sec_rec_cluster_reads; /*!< srv_sec_rec_cluster_reads */ ulint innodb_sec_rec_cluster_reads_avoided;/*!< srv_sec_rec_cluster_reads_avoided */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/trx0rec.h mariadb-10.1-10.1.30/storage/innobase/include/trx0rec.h --- mariadb-10.1-10.1.25/storage/innobase/include/trx0rec.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/trx0rec.h 2017-12-21 15:48:51.000000000 +0000 @@ -226,10 +226,8 @@ marking, the record in the clustered index, otherwise NULL */ const ulint* offsets, /*!< in: rec_get_offsets(rec) */ - roll_ptr_t* roll_ptr) /*!< out: rollback pointer to the - inserted undo log record, - 0 if BTR_NO_UNDO_LOG - flag was specified */ + roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the + undo log record */ MY_ATTRIBUTE((nonnull(1,2,8), warn_unused_result)); /******************************************************************//** Copies an undo record to heap. This function can be called if we know that diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/trx0roll.h mariadb-10.1-10.1.30/storage/innobase/include/trx0roll.h --- mariadb-10.1-10.1.25/storage/innobase/include/trx0roll.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/trx0roll.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -32,7 +33,8 @@ #include "mtr0mtr.h" #include "trx0sys.h" -extern bool trx_rollback_or_clean_is_active; +extern bool trx_rollback_or_clean_is_active; +extern const trx_t* trx_roll_crash_recv_trx; /*******************************************************************//** Determines if this transaction is rolling back an incomplete transaction @@ -103,6 +105,11 @@ /*=================*/ trx_t* trx, /*!< in/out: transaction */ undo_no_t undo_no);/*!< in: undo number */ +/** Report progress when rolling back a row of a recovered transaction. +@return whether the rollback should be aborted due to pending shutdown */ +UNIV_INTERN +bool +trx_roll_must_shutdown(); /*******************************************************************//** Rollback or clean up any incomplete transactions which were encountered in crash recovery. If the transaction already was diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/trx0sys.h mariadb-10.1-10.1.30/storage/innobase/include/trx0sys.h --- mariadb-10.1-10.1.25/storage/innobase/include/trx0sys.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/trx0sys.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -307,19 +308,29 @@ void trx_sys_print_mysql_binlog_offset(void); /*===================================*/ + #ifdef WITH_WSREP -/** Update WSREP checkpoint XID in sys header. */ + +/** Update WSREP XID info in sys_header of TRX_SYS_PAGE_NO = 5. +@param[in] xid Transaction XID +@param[in,out] sys_header sys_header +@param[in] mtr minitransaction */ +UNIV_INTERN void trx_sys_update_wsrep_checkpoint( - const XID* xid, /*!< in: WSREP XID */ - trx_sysf_t* sys_header, /*!< in: sys_header */ - mtr_t* mtr); /*!< in: mtr */ + const XID* xid, + trx_sysf_t* sys_header, + mtr_t* mtr); + +/** Read WSREP XID from sys_header of TRX_SYS_PAGE_NO = 5. +@param[out] xid Transaction XID +@return true on success, false on error. */ +UNIV_INTERN +bool +trx_sys_read_wsrep_checkpoint(XID* xid); -void -/** Read WSREP checkpoint XID from sys header. */ -trx_sys_read_wsrep_checkpoint( - XID* xid); /*!< out: WSREP XID */ #endif /* WITH_WSREP */ + /*****************************************************************//** Prints to stderr the MySQL master log offset info in the trx system header if the magic number shows it valid. */ @@ -548,13 +559,71 @@ within that file */ #define TRX_SYS_MYSQL_LOG_NAME 12 /*!< MySQL log file name */ +/** Memory map TRX_SYS_PAGE_NO = 5 when UNIV_PAGE_SIZE = 4096 + +0...37 FIL_HEADER +38...45 TRX_SYS_TRX_ID_STORE +46...55 TRX_SYS_FSEG_HEADER (FSEG_HEADER_SIZE == 10) +56 TRX_SYS_RSEGS + 56...59 TRX_SYS_RSEG_SPACE for slot 0 + 60...63 TRX_SYS_RSEG_PAGE_NO for slot 0 + 64...67 TRX_SYS_RSEG_SPACE for slot 1 + 68...71 TRX_SYS_RSEG_PAGE_NO for slot 1 +.... + 594..597 TRX_SYS_RSEG_SPACE for slot 72 + 598..601 TRX_SYS_RSEG_PAGE_NO for slot 72 +... + ...1063 TRX_SYS_RSEG_PAGE_NO for slot 126 + +(UNIV_PAGE_SIZE-3500 WSREP ::: FAIL would overwrite undo tablespace +space_id, page_no pairs :::) +596 TRX_SYS_WSREP_XID_INFO TRX_SYS_WSREP_XID_MAGIC_N_FLD +600 TRX_SYS_WSREP_XID_FORMAT +604 TRX_SYS_WSREP_XID_GTRID_LEN +608 TRX_SYS_WSREP_XID_BQUAL_LEN +612 TRX_SYS_WSREP_XID_DATA (len = 128) +739 TRX_SYS_WSREP_XID_DATA_END + +FIXED WSREP XID info offsets for 4k page size 10.0.32-galera +(UNIV_PAGE_SIZE-2500) +1596 TRX_SYS_WSREP_XID_INFO TRX_SYS_WSREP_XID_MAGIC_N_FLD +1600 TRX_SYS_WSREP_XID_FORMAT +1604 TRX_SYS_WSREP_XID_GTRID_LEN +1608 TRX_SYS_WSREP_XID_BQUAL_LEN +1612 TRX_SYS_WSREP_XID_DATA (len = 128) +1739 TRX_SYS_WSREP_XID_DATA_END + +(UNIV_PAGE_SIZE - 2000 MYSQL MASTER LOG) +2096 TRX_SYS_MYSQL_MASTER_LOG_INFO TRX_SYS_MYSQL_LOG_MAGIC_N_FLD +2100 TRX_SYS_MYSQL_LOG_OFFSET_HIGH +2104 TRX_SYS_MYSQL_LOG_OFFSET_LOW +2108 TRX_SYS_MYSQL_LOG_NAME + +(UNIV_PAGE_SIZE - 1000 MYSQL LOG) +3096 TRX_SYS_MYSQL_LOG_INFO TRX_SYS_MYSQL_LOG_MAGIC_N_FLD +3100 TRX_SYS_MYSQL_LOG_OFFSET_HIGH +3104 TRX_SYS_MYSQL_LOG_OFFSET_LOW +3108 TRX_SYS_MYSQL_LOG_NAME + +(UNIV_PAGE_SIZE - 200 DOUBLEWRITE) +3896 TRX_SYS_DOUBLEWRITE TRX_SYS_DOUBLEWRITE_FSEG +3906 TRX_SYS_DOUBLEWRITE_MAGIC +3910 TRX_SYS_DOUBLEWRITE_BLOCK1 +3914 TRX_SYS_DOUBLEWRITE_BLOCK2 +3918 TRX_SYS_DOUBLEWRITE_REPEAT +3930 TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED_N + +(UNIV_PAGE_SIZE - 8, TAILER) +4088..4096 FIL_TAILER + +*/ #ifdef WITH_WSREP -/* The offset to WSREP XID headers */ -#define TRX_SYS_WSREP_XID_INFO (UNIV_PAGE_SIZE - 3500) +/** The offset to WSREP XID headers */ +#define TRX_SYS_WSREP_XID_INFO (ut_max(UNIV_PAGE_SIZE - 3500, 1596)) #define TRX_SYS_WSREP_XID_MAGIC_N_FLD 0 #define TRX_SYS_WSREP_XID_MAGIC_N 0x77737265 -/* XID field: formatID, gtrid_len, bqual_len, xid_data */ +/** XID field: formatID, gtrid_len, bqual_len, xid_data */ #define TRX_SYS_WSREP_XID_LEN (4 + 4 + 4 + XIDDATASIZE) #define TRX_SYS_WSREP_XID_FORMAT 4 #define TRX_SYS_WSREP_XID_GTRID_LEN 8 diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/trx0sys.ic mariadb-10.1-10.1.30/storage/innobase/include/trx0sys.ic --- mariadb-10.1-10.1.25/storage/innobase/include/trx0sys.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/trx0sys.ic 2017-12-21 15:48:51.000000000 +0000 @@ -445,10 +445,7 @@ trx_sys_get_new_trx_id(void) /*========================*/ { -#ifndef WITH_WSREP - /* wsrep_fake_trx_id violates this assert */ ut_ad(mutex_own(&trx_sys->mutex)); -#endif /* WITH_WSREP */ /* VERY important: after the database is started, max_trx_id value is divisible by TRX_SYS_TRX_ID_WRITE_MARGIN, and the following if diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/univ.i mariadb-10.1-10.1.30/storage/innobase/include/univ.i --- mariadb-10.1-10.1.25/storage/innobase/include/univ.i 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/univ.i 2017-12-21 15:48:51.000000000 +0000 @@ -45,7 +45,7 @@ #define INNODB_VERSION_MAJOR 5 #define INNODB_VERSION_MINOR 6 -#define INNODB_VERSION_BUGFIX 36 +#define INNODB_VERSION_BUGFIX 37 /* The following is the InnoDB version as shown in SELECT plugin_version FROM information_schema.plugins; @@ -371,6 +371,8 @@ #define UNIV_PAGE_SIZE_SHIFT_DEF 14 /** Original 16k InnoDB Page Size Shift, in case the default changes */ #define UNIV_PAGE_SIZE_SHIFT_ORIG 14 +/** Original 16k InnoDB Page Size as an ssize (log2 - 9) */ +#define UNIV_PAGE_SSIZE_ORIG (UNIV_PAGE_SIZE_SHIFT_ORIG - 9) /** Minimum page size InnoDB currently supports. */ #define UNIV_PAGE_SIZE_MIN (1 << UNIV_PAGE_SIZE_SHIFT_MIN) @@ -482,6 +484,12 @@ typedef unsigned long long int ullint; #endif /* UNIV_HOTBACKUP */ +#ifdef UNIV_INNOCHECKSUM +extern bool strict_verify; +extern FILE* log_file; +extern unsigned long long cur_page_num; +#endif /* UNIV_INNOCHECKSUM */ + #ifndef __WIN__ #if SIZEOF_LONG != SIZEOF_VOIDP #error "Error: InnoDB's ulint must be of the same size as void*" diff -Nru mariadb-10.1-10.1.25/storage/innobase/include/ut0timer.ic mariadb-10.1-10.1.30/storage/innobase/include/ut0timer.ic --- mariadb-10.1-10.1.25/storage/innobase/include/ut0timer.ic 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/include/ut0timer.ic 2017-12-21 15:48:51.000000000 +0000 @@ -106,7 +106,7 @@ /*=====================*/ ulonglong when) /*!< in: time where to calculate */ { - double ret = when; + double ret = (double)when; ret *= (double)(ut_timer.frequency); ret /= 1000000.0; return (ulonglong)ret; diff -Nru mariadb-10.1-10.1.25/storage/innobase/lock/lock0lock.cc mariadb-10.1-10.1.30/storage/innobase/lock/lock0lock.cc --- mariadb-10.1-10.1.25/storage/innobase/lock/lock0lock.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/lock/lock0lock.cc 2017-12-21 15:48:51.000000000 +0000 @@ -925,15 +925,21 @@ ib_logf(IB_LOG_LEVEL_INFO, "Trx id " TRX_ID_FMT - " is waiting a lock in statement %s" + " is waiting a lock " " for this trx id " TRX_ID_FMT - " and statement %s wait_lock %p", + " wait_lock %p", lock->trx->id, - stmt ? stmt : "NULL", trx_id, - stmt2 ? stmt2 : "NULL", lock->trx->lock.wait_lock); + if (stmt) { + ib_logf(IB_LOG_LEVEL_INFO, " SQL1: %s\n", stmt); + } + + if (stmt2) { + ib_logf(IB_LOG_LEVEL_INFO, " SQL2: %s\n", stmt2); + } + ut_ad(lock->trx->lock.wait_lock == lock); } @@ -1151,7 +1157,7 @@ type_mode, lock_is_on_supremum); fprintf(stderr, "conflicts states: my %d locked %d\n", - wsrep_thd_conflict_state(trx->mysql_thd, FALSE), + wsrep_thd_conflict_state(trx->mysql_thd, FALSE), wsrep_thd_conflict_state(lock2->trx->mysql_thd, FALSE) ); lock_rec_print(stderr, lock2); if (for_locking) return FALSE; @@ -1687,7 +1693,7 @@ Checks if some other transaction has a lock request in the queue. @return lock or NULL */ static -const lock_t* +lock_t* lock_rec_other_has_expl_req( /*========================*/ enum lock_mode mode, /*!< in: LOCK_S or LOCK_X */ @@ -1704,7 +1710,7 @@ requests by all transactions are taken into account */ { - const lock_t* lock; + lock_t* lock; ut_ad(lock_mutex_own()); ut_ad(mode == LOCK_X || mode == LOCK_S); @@ -1713,7 +1719,7 @@ for (lock = lock_rec_get_first(block, heap_no); lock != NULL; - lock = lock_rec_get_next_const(heap_no, lock)) { + lock = lock_rec_get_next(heap_no, lock)) { if (lock->trx != trx && (gap @@ -1800,7 +1806,7 @@ in the queue, so that we have to wait. @return lock or NULL */ static -const lock_t* +lock_t* lock_rec_other_has_conflicting( /*===========================*/ enum lock_mode mode, /*!< in: LOCK_S or LOCK_X, @@ -1812,7 +1818,7 @@ ulint heap_no,/*!< in: heap number of the record */ const trx_t* trx) /*!< in: our transaction */ { - const lock_t* lock; + lock_t* lock; ibool is_supremum; ut_ad(lock_mutex_own()); @@ -1821,13 +1827,16 @@ for (lock = lock_rec_get_first(block, heap_no); lock != NULL; - lock = lock_rec_get_next_const(heap_no, lock)) { + lock = lock_rec_get_next(heap_no, lock)) { #ifdef WITH_WSREP if (lock_rec_has_to_wait(TRUE, trx, mode, lock, is_supremum)) { - if (wsrep_on(trx->mysql_thd)) { + if (wsrep_on_trx(trx)) { trx_mutex_enter(lock->trx); - wsrep_kill_victim(trx, lock); + /* Below function will roll back either trx + or lock->trx depending on priority of the + transaction. */ + wsrep_kill_victim(const_cast(trx), lock); trx_mutex_exit(lock->trx); } #else @@ -1911,7 +1920,7 @@ } else if (!lock_check_trx_id_sanity(max_trx_id, rec, index, offsets)) { - buf_page_print(page, 0, 0); + buf_page_print(page, 0); /* The page is corrupt: try to avoid a crash by returning 0 */ trx_id = 0; @@ -2023,15 +2032,17 @@ { if (wsrep_debug && c_lock->trx->lock.wait_lock != c_lock) { fprintf(stderr, "WSREP: c_lock != wait lock\n"); - if (lock_get_type_low(c_lock) & LOCK_TABLE) + if (lock_get_type_low(c_lock) & LOCK_TABLE) { lock_table_print(stderr, c_lock); - else + } else { lock_rec_print(stderr, c_lock); + } - if (lock_get_type_low(c_lock->trx->lock.wait_lock) & LOCK_TABLE) + if (lock_get_type_low(c_lock->trx->lock.wait_lock) & LOCK_TABLE) { lock_table_print(stderr, c_lock->trx->lock.wait_lock); - else + } else { lock_rec_print(stderr, c_lock->trx->lock.wait_lock); + } } } #endif /* WITH_WSREP */ @@ -2151,7 +2162,7 @@ #ifdef WITH_WSREP if (c_lock && - wsrep_on(trx->mysql_thd) && + wsrep_on_trx(trx) && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { lock_t *hash = (lock_t *)c_lock->hash; lock_t *prev = NULL; @@ -2217,8 +2228,8 @@ if (wsrep_debug) { fprintf( stderr, - "WSREP: c_lock canceled %llu\n", - (ulonglong) c_lock->trx->id); + "WSREP: c_lock canceled " TRX_ID_FMT "\n", + c_lock->trx->id); } /* have to bail out here to avoid lock_set_lock... */ @@ -2351,6 +2362,7 @@ return DB_SUCCESS; } +#ifdef UNIV_DEBUG static bool lock_queue_validate( @@ -2384,6 +2396,7 @@ } return true; } +#endif /* UNIV_DEBUG */ /*********************************************************************//** Enqueues a waiting request for a lock which cannot be granted immediately. @@ -2451,7 +2464,7 @@ dict_index_name_print(stderr, trx, index); fputs(".\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } @@ -2517,6 +2530,16 @@ err = DB_LOCK_WAIT; } +#ifdef WITH_WSREP + if (!lock_get_wait(lock) && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { + if (wsrep_debug) { + fprintf(stderr, "WSREP: BF thread got lock granted early, ID " TRX_ID_FMT + "\n", + lock->trx->id); + } + return(DB_SUCCESS); + } +#endif /* WITH_WSREP */ // Move it only when it does not cause a deadlock. if (err != DB_DEADLOCK && innodb_lock_schedule_algorithm @@ -2812,7 +2835,7 @@ /* The trx already has a strong enough lock on rec: do nothing */ #ifdef WITH_WSREP - } else if ((c_lock = (ib_lock_t*)lock_rec_other_has_conflicting( + } else if ((c_lock = lock_rec_other_has_conflicting( static_cast(mode), block, heap_no, trx))) { #else @@ -2944,6 +2967,15 @@ #ifdef WITH_WSREP if (wsrep_thd_is_BF(wait_lock->trx->mysql_thd, FALSE) && wsrep_thd_is_BF(lock->trx->mysql_thd, TRUE)) { + if (wsrep_debug) { + fprintf(stderr, + "BF-BF lock conflict " TRX_ID_FMT + " : " TRX_ID_FMT "\n", + wait_lock->trx->id, + lock->trx->id); + lock_rec_print(stderr, wait_lock); + lock_rec_print(stderr, lock); + } /* don't wait for another BF lock */ continue; } @@ -3102,7 +3134,7 @@ && !lock_rec_has_to_wait_in_queue(lock)) { lock_grant(lock, false); - + if (previous != NULL) { /* Move the lock to the head of the list. */ HASH_GET_NEXT(hash, previous) = HASH_GET_NEXT(hash, lock); @@ -4976,8 +5008,8 @@ } if (wsrep_debug) { - fprintf(stderr, "WSREP: c_lock canceled %llu\n", - (ulonglong) c_lock->trx->id); + fprintf(stderr, "WSREP: c_lock canceled " TRX_ID_FMT "\n", + c_lock->trx->id); } } if (c_lock) { @@ -5185,7 +5217,7 @@ ut_print_name(stderr, trx, TRUE, table->name); fputs(".\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } @@ -5249,7 +5281,7 @@ the lock queue. @return lock or NULL */ UNIV_INLINE -const lock_t* +lock_t* lock_table_other_has_incompatible( /*==============================*/ const trx_t* trx, /*!< in: transaction, or NULL if all @@ -5260,7 +5292,7 @@ const dict_table_t* table, /*!< in: table */ enum lock_mode mode) /*!< in: lock mode */ { - const lock_t* lock; + lock_t* lock; ut_ad(lock_mutex_own()); @@ -5313,7 +5345,7 @@ #endif trx_t* trx; dberr_t err; - const lock_t* wait_for; + lock_t* wait_for; ut_ad(table != NULL); ut_ad(thr != NULL); @@ -5360,13 +5392,13 @@ if (wait_for != NULL) { #ifdef WITH_WSREP - err = lock_table_enqueue_waiting((ib_lock_t*)wait_for, mode | flags, table, thr); + err = lock_table_enqueue_waiting(wait_for, mode | flags, table, thr); #else err = lock_table_enqueue_waiting(mode | flags, table, thr); #endif } else { #ifdef WITH_WSREP - lock_table_create(c_lock, table, mode | flags, trx); + lock_table_create(c_lock, table, mode | flags, trx); #else lock_table_create(table, mode | flags, trx); #endif @@ -7034,10 +7066,10 @@ on the successor, which produced an unnecessary deadlock. */ #ifdef WITH_WSREP - if ((c_lock = (ib_lock_t*)lock_rec_other_has_conflicting( - static_cast( - LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION), - block, next_rec_heap_no, trx))) { + if ((c_lock = lock_rec_other_has_conflicting( + static_cast( + LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION), + block, next_rec_heap_no, trx))) { #else if (lock_rec_other_has_conflicting( static_cast( @@ -7050,7 +7082,7 @@ #ifdef WITH_WSREP err = lock_rec_enqueue_waiting(c_lock, - LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION, + LOCK_X | LOCK_GAP | LOCK_INSERT_INTENTION, block, next_rec_heap_no, index, thr); #else err = lock_rec_enqueue_waiting( diff -Nru mariadb-10.1-10.1.25/storage/innobase/lock/lock0wait.cc mariadb-10.1-10.1.30/storage/innobase/lock/lock0wait.cc --- mariadb-10.1-10.1.25/storage/innobase/lock/lock0wait.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/lock/lock0wait.cc 2017-12-21 15:48:51.000000000 +0000 @@ -191,22 +191,25 @@ /*********************************************************************//** check if lock timeout was for priority thread, as a side effect trigger lock monitor +@param[in] trx transaction owning the lock +@param[in] locked true if trx and lock_sys_mutex is ownd @return false for regular lock timeout */ -static ibool +static +bool wsrep_is_BF_lock_timeout( -/*====================*/ - trx_t* trx) /* in: trx to check for lock priority */ + const trx_t* trx, + bool locked = true) { - if (wsrep_on(trx->mysql_thd) && - wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { - fprintf(stderr, "WSREP: BF lock wait long\n"); - srv_print_innodb_monitor = TRUE; - srv_print_innodb_lock_monitor = TRUE; - os_event_set(srv_monitor_event); - return TRUE; - } - return FALSE; - } + if (wsrep_on_trx(trx) + && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { + fprintf(stderr, "WSREP: BF lock wait long for trx " TRX_ID_FMT "\n", trx->id); + srv_print_innodb_monitor = TRUE; + srv_print_innodb_lock_monitor = TRUE; + os_event_set(srv_monitor_event); + return true; + } + return false; +} #endif /* WITH_WSREP */ /***************************************************************//** @@ -402,15 +405,15 @@ if (lock_wait_timeout < 100000000 && wait_time > (double) lock_wait_timeout) { #ifdef WITH_WSREP - if (!wsrep_on(trx->mysql_thd) || - (!wsrep_is_BF_lock_timeout(trx) && - trx->error_state != DB_DEADLOCK)) { + if (!wsrep_on_trx(trx) || + (!wsrep_is_BF_lock_timeout(trx) && + trx->error_state != DB_DEADLOCK)) { #endif /* WITH_WSREP */ - trx->error_state = DB_LOCK_WAIT_TIMEOUT; + trx->error_state = DB_LOCK_WAIT_TIMEOUT; #ifdef WITH_WSREP - } + } #endif /* WITH_WSREP */ MONITOR_INC(MONITOR_TIMEOUT); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/log/log0crypt.cc mariadb-10.1-10.1.30/storage/innobase/log/log0crypt.cc --- mariadb-10.1-10.1.25/storage/innobase/log/log0crypt.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/log/log0crypt.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (C) 2013, 2015, Google Inc. All Rights Reserved. -Copyright (C) 2014, 2016, MariaDB Corporation. All Rights Reserved. +Copyright (C) 2014, 2017, MariaDB Corporation. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -237,6 +237,129 @@ return rc; } +/** Encrypt/decrypt temporary log blocks. + +@param[in] src_block block to encrypt or decrypt +@param[in] size size of the block +@param[out] dst_block destination block +@param[in] what ENCRYPTION_FLAG_ENCRYPT or + ENCRYPTION_FLAG_DECRYPT +@param[in] offs offset to block +@param[in] space_id tablespace id +@return true if successful, false in case of failure +*/ +static +bool +log_tmp_blocks_crypt( + const byte* src_block, + ulint size, + byte* dst_block, + int what, + os_offset_t offs, + ulint space_id) +{ + Crypt_result rc = MY_AES_OK; + uint dst_len; + byte aes_ctr_counter[MY_AES_BLOCK_SIZE]; + byte is_encrypt= what == ENCRYPTION_FLAG_ENCRYPT; + const crypt_info_t* info = static_cast(&crypt_info[0]); + + // AES_CTR_COUNTER = space_id + offs + + bzero(aes_ctr_counter, MY_AES_BLOCK_SIZE); + mach_write_to_8(aes_ctr_counter, space_id); + mach_write_to_8(aes_ctr_counter + 8, offs); + + rc = encryption_crypt(src_block, size, + dst_block, &dst_len, + (unsigned char*)(info->crypt_key), 16, + aes_ctr_counter, MY_AES_BLOCK_SIZE, + what | ENCRYPTION_FLAG_NOPAD, + LOG_DEFAULT_ENCRYPTION_KEY, + info->key_version); + + if (rc != MY_AES_OK) { + ib_logf(IB_LOG_LEVEL_ERROR, + "%s failed for temporary log file with rc = %d", + is_encrypt ? "Encryption" : "Decryption", + rc); + return false; + } + + return true; +} + +/** Get crypt info +@return pointer to log crypt info or NULL +*/ +inline +const crypt_info_t* +get_crypt_info() +{ + mutex_enter(&log_sys->mutex); + const crypt_info_t* info = get_crypt_info(log_sys->next_checkpoint_no); + mutex_exit(&log_sys->mutex); + + return info; +} + +/** Find out is temporary log files encrypted. +@return true if temporary log file should be encrypted, false if not */ +UNIV_INTERN +bool +log_tmp_is_encrypted() +{ + const crypt_info_t* info = get_crypt_info(); + + if (info == NULL || info->key_version == UNENCRYPTED_KEY_VER) { + return false; + } + + return true; +} + +/** Encrypt temporary log block. +@param[in] src_block block to encrypt or decrypt +@param[in] size size of the block +@param[out] dst_block destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return true if successfull, false in case of failure +*/ +UNIV_INTERN +bool +log_tmp_block_encrypt( + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id) +{ + return (log_tmp_blocks_crypt(src_block, size, dst_block, + ENCRYPTION_FLAG_ENCRYPT, offs, space_id)); +} + +/** Decrypt temporary log block. +@param[in] src_block block to encrypt or decrypt +@param[in] size size of the block +@param[out] dst_block destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return true if successfull, false in case of failure +*/ +UNIV_INTERN +bool +log_tmp_block_decrypt( + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id) +{ + return (log_tmp_blocks_crypt(src_block, size, dst_block, + ENCRYPTION_FLAG_DECRYPT, offs, space_id)); +} + /*********************************************************************//** Generate crypt key from crypt msg. @return true if successfull, false if not. */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/log/log0recv.cc mariadb-10.1-10.1.30/storage/innobase/log/log0recv.cc --- mariadb-10.1-10.1.25/storage/innobase/log/log0recv.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/log/log0recv.cc 2017-12-21 15:48:51.000000000 +0000 @@ -819,10 +819,8 @@ fprintf(stderr, "InnoDB: No valid checkpoint found.\n" - "InnoDB: If you are attempting downgrade" - " from MySQL 5.7.9 or later,\n" - "InnoDB: please refer to " REFMAN - "upgrading-downgrading.html\n" + "InnoDB: A downgrade from MariaDB 10.2.2" + " or later is not supported.\n" "InnoDB: If this error appears when you are" " creating an InnoDB database,\n" "InnoDB: the problem may be that during" @@ -3463,6 +3461,7 @@ log_sys->archived_lsn = log_sys->lsn; #endif /* UNIV_LOG_ARCHIVE */ + memset(log_sys->buf, 0, log_sys->buf_size); log_block_init(log_sys->buf, log_sys->lsn); log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE); diff -Nru mariadb-10.1-10.1.25/storage/innobase/mysql-test/storage_engine/type_spatial_indexes.rdiff mariadb-10.1-10.1.30/storage/innobase/mysql-test/storage_engine/type_spatial_indexes.rdiff --- mariadb-10.1-10.1.25/storage/innobase/mysql-test/storage_engine/type_spatial_indexes.rdiff 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/mysql-test/storage_engine/type_spatial_indexes.rdiff 2017-12-21 15:48:51.000000000 +0000 @@ -352,8 +352,8 @@ -116 0 -SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon; -fid AsText(Centroid(g)) --117 POINT(55.58852775304245 17.426536064113982) --118 POINT(55.58852775304245 17.426536064113982) +-117 POINT(57.98031067576927 17.854754130800433) +-118 POINT(57.98031067576927 17.854754130800433) -119 POINT(2 2) -SELECT fid, Area(g) FROM gis_multi_polygon; -fid Area(g) diff -Nru mariadb-10.1-10.1.25/storage/innobase/os/os0file.cc mariadb-10.1-10.1.30/storage/innobase/os/os0file.cc --- mariadb-10.1-10.1.25/storage/innobase/os/os0file.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/os/os0file.cc 2017-12-21 15:48:51.000000000 +0000 @@ -569,10 +569,9 @@ REFMAN "operating-system-error-codes.html\n"); } + fflush(stderr); } - fflush(stderr); - if (err == ERROR_FILE_NOT_FOUND) { return(OS_FILE_NOT_FOUND); } else if (err == ERROR_DISK_FULL) { @@ -2336,12 +2335,21 @@ return(offset); #else - return((os_offset_t) lseek(file, 0, SEEK_END)); - + struct stat statbuf; + return fstat(file, &statbuf) ? os_offset_t(-1) : statbuf.st_size; #endif /* __WIN__ */ } -/** Set the size of a newly created file. +/** Extend a file. + +On Windows, extending a file allocates blocks for the file, +unless the file is sparse. + +On Unix, we will extend the file with ftruncate(), if +file needs to be sparse. Otherwise posix_fallocate() is used +when available, and if not, binary zeroes are added to the end +of file. + @param[in] name file name @param[in] file file handle @param[in] size desired file size @@ -2382,25 +2390,41 @@ if (srv_use_posix_fallocate) { int err; do { - err = posix_fallocate(file, 0, size); + os_offset_t current_size = os_file_get_size(file); + err = current_size >= size + ? 0 : posix_fallocate(file, current_size, + size - current_size); } while (err == EINTR && srv_shutdown_state == SRV_SHUTDOWN_NONE); - if (err) { + switch (err) { + case 0: + return true; + default: ib_logf(IB_LOG_LEVEL_ERROR, "preallocating " INT64PF " bytes for" "file %s failed with error %d", size, name, err); + /* fall through */ + case EINTR: + errno = err; + return false; + case EINVAL: + /* fall back to the code below */ + break; } - return(!err); } # endif + os_offset_t current_size = os_file_get_size(file); + + if (current_size >= size) { + return true; + } + /* Write up to 1 megabyte at a time. */ ulint buf_size = ut_min(64, (ulint) (size / UNIV_PAGE_SIZE)) * UNIV_PAGE_SIZE; - os_offset_t current_size = 0; - byte* buf2 = static_cast(calloc(1, buf_size + UNIV_PAGE_SIZE)); if (!buf2) { @@ -2430,11 +2454,12 @@ } current_size += n_bytes; - } while (current_size < size); + } while (current_size < size + && srv_shutdown_state == SRV_SHUTDOWN_NONE); free(buf2); - return(ret && os_file_flush(file)); + return(ret && current_size >= size && os_file_flush(file)); #endif } diff -Nru mariadb-10.1-10.1.25/storage/innobase/page/page0cur.cc mariadb-10.1-10.1.30/storage/innobase/page/page0cur.cc --- mariadb-10.1-10.1.25/storage/innobase/page/page0cur.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/page/page0cur.cc 2017-12-21 15:48:51.000000000 +0000 @@ -903,7 +903,7 @@ ut_print_buf(stderr, ptr2, 300); putc('\n', stderr); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); ut_error; } diff -Nru mariadb-10.1-10.1.25/storage/innobase/page/page0page.cc mariadb-10.1-10.1.30/storage/innobase/page/page0page.cc --- mariadb-10.1-10.1.25/storage/innobase/page/page0page.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/page/page0page.cc 2017-12-21 15:48:51.000000000 +0000 @@ -149,7 +149,7 @@ fputs("\n" "InnoDB: on that page!\n", stderr); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); ut_error; } @@ -613,10 +613,8 @@ /* Track an assertion failure reported on the mailing list on June 18th, 2003 */ - buf_page_print(new_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(page_align(rec), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(new_page, 0); + buf_page_print(page_align(rec), 0); ut_print_timestamp(stderr); fprintf(stderr, @@ -1948,7 +1946,8 @@ fprintf(stderr, "InnoDB: Page directory corruption:" " infimum not pointed to\n"); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); + ut_ad(0); } if (UNIV_UNLIKELY(!page_rec_is_supremum_low(supremum_offs))) { @@ -1956,7 +1955,8 @@ fprintf(stderr, "InnoDB: Page directory corruption:" " supremum not pointed to\n"); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); + ut_ad(0); } } #endif /* !UNIV_HOTBACKUP */ @@ -2674,7 +2674,8 @@ (ulong) page_get_space_id(page), (ulong) page_get_page_no(page), index->name); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); + ut_ad(0); } return(ret); diff -Nru mariadb-10.1-10.1.25/storage/innobase/page/page0zip.cc mariadb-10.1-10.1.30/storage/innobase/page/page0zip.cc --- mariadb-10.1-10.1.25/storage/innobase/page/page0zip.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/page/page0zip.cc 2017-12-21 15:48:51.000000000 +0000 @@ -2,7 +2,7 @@ Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. -Copyright (c) 2017, MariaDB Corporation. +Copyright (c) 2014, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -82,12 +82,12 @@ #endif /* HAVE_PSI_INTERFACE */ #endif /* !UNIV_HOTBACKUP */ -/* Compression level to be used by zlib. Settable by user. */ -UNIV_INTERN uint page_zip_level = DEFAULT_COMPRESSION_LEVEL; +/** Compression level to be used by zlib. Settable by user. */ +UNIV_INTERN uint page_zip_level; -/* Whether or not to log compressed page images to avoid possible +/** Whether or not to log compressed page images to avoid possible compression algorithm changes in zlib. */ -UNIV_INTERN my_bool page_zip_log_pages = false; +UNIV_INTERN my_bool page_zip_log_pages; /* Please refer to ../include/page0zip.ic for a description of the compressed page format. */ @@ -4937,26 +4937,26 @@ #error "FIL_PAGE_LSN must be 64 bit aligned" #endif -#ifndef UNIV_INNOCHECKSUM - /* innochecksum doesn't compile with ut_d. Since we don't - need to check for empty pages when running innochecksum, - just don't include this code. */ /* Check if page is empty */ if (stored == 0 && *reinterpret_cast(static_cast( data) + FIL_PAGE_LSN) == 0) { /* make sure that the page is really empty */ - ulint i; - for (i = 0; i < size; i++) { + for (ulint i = 0; i < size; i++) { if (*((const char*) data + i) != 0) { return(FALSE); } } +#ifdef UNIV_INNOCHECKSUM + if (log_file) { + fprintf(log_file, "Page::%llu is empty and" + " uncorrupted\n", cur_page_num); + } +#endif /* UNIV_INNOCHECKSUM */ /* Empty page */ return(TRUE); } -#endif const srv_checksum_algorithm_t curr_algo = static_cast(srv_checksum_algorithm); @@ -4968,6 +4968,33 @@ calc = static_cast(page_zip_calc_checksum( data, size, curr_algo)); +#ifdef UNIV_INNOCHECKSUM + if (log_file) { + fprintf(log_file, "page::%llu;" + " %s checksum: calculated = %u;" + " recorded = %u\n", cur_page_num, + buf_checksum_algorithm_name( + static_cast( + srv_checksum_algorithm)), + calc, stored); + } + + if (!strict_verify) { + + const uint32_t crc32 = page_zip_calc_checksum( + data, size, SRV_CHECKSUM_ALGORITHM_CRC32); + + if (log_file) { + fprintf(log_file, "page::%llu: crc32 checksum:" + " calculated = %u; recorded = %u\n", + cur_page_num, crc32, stored); + fprintf(log_file, "page::%llu: none checksum:" + " calculated = %lu; recorded = %u\n", + cur_page_num, BUF_NO_CHECKSUM_MAGIC, stored); + } + } +#endif /* UNIV_INNOCHECKSUM */ + if (stored == calc) { return(TRUE); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0ftsort.cc mariadb-10.1-10.1.30/storage/innobase/row/row0ftsort.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0ftsort.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0ftsort.cc 2017-12-21 15:48:51.000000000 +0000 @@ -39,7 +39,7 @@ b[N] = row_merge_read_rec( \ block[N], buf[N], b[N], index, \ fd[N], &foffs[N], &mrec[N], offsets[N], \ - crypt_data, crypt_block[N], space); \ + crypt_block[N], space); \ if (UNIV_UNLIKELY(!b[N])) { \ if (mrec[N]) { \ goto exit; \ @@ -191,7 +191,6 @@ fts_psort_t* merge_info = NULL; ulint block_size; ibool ret = TRUE; - fil_space_crypt_t* crypt_data = NULL; bool encrypted = false; block_size = 3 * srv_sort_buf_size; @@ -222,21 +221,8 @@ common_info->merge_event = os_event_create(); common_info->opt_doc_id_size = opt_doc_id_size; - /* Theoretically the tablespace can be dropped straight away. - In practice, the DDL completion will wait for this thread to - finish. */ - if (fil_space_t* space = fil_space_acquire(new_table->space)) { - crypt_data = space->crypt_data; - fil_space_release(space); - } - - if (crypt_data && crypt_data->should_encrypt()) { - common_info->crypt_data = crypt_data; + if (log_tmp_is_encrypted()) { encrypted = true; - } else { - /* Not needed */ - common_info->crypt_data = NULL; - crypt_data = NULL; } ut_ad(trx->mysql_thd != NULL); @@ -574,11 +560,9 @@ cur_len += len; dfield_dup(field, buf->heap); - /* Reserve one byte for the end marker of row_merge_block_t - and we have reserved ROW_MERGE_RESERVE_SIZE (= 4) for - encryption key_version in the beginning of the buffer. */ + /* Reserve one byte for the end marker of row_merge_block_t */ if (buf->total_size + data_size[idx] + cur_len - >= (srv_sort_buf_size - 1 - ROW_MERGE_RESERVE_SIZE)) { + >= (srv_sort_buf_size - 1)) { buf_full = TRUE; break; @@ -672,7 +656,6 @@ fts_tokenize_ctx_t t_ctx; ulint retried = 0; dberr_t error = DB_SUCCESS; - fil_space_crypt_t* crypt_data = NULL; ut_ad(psort_info->psort_common->trx->mysql_thd != NULL); @@ -693,7 +676,6 @@ block = psort_info->merge_block; crypt_block = psort_info->crypt_block; - crypt_data = psort_info->psort_common->crypt_data; zip_size = dict_table_zip_size(table); row_merge_fts_get_next_doc_item(psort_info, &doc_item); @@ -788,7 +770,6 @@ if (!row_merge_write(merge_file[t_ctx.buf_used]->fd, merge_file[t_ctx.buf_used]->offset++, block[t_ctx.buf_used], - crypt_data, crypt_block[t_ctx.buf_used], table->space)) { error = DB_TEMP_FILE_WRITE_FAILURE; @@ -884,7 +865,6 @@ if (!row_merge_write(merge_file[i]->fd, merge_file[i]->offset++, block[i], - crypt_data, crypt_block[i], table->space)) { error = DB_TEMP_FILE_WRITE_FAILURE; @@ -924,7 +904,7 @@ psort_info->psort_common->dup, merge_file[i], block[i], &tmpfd[i], false, 0.0/* pct_progress */, 0.0/* pct_cost */, - crypt_data, crypt_block[i], table->space); + crypt_block[i], table->space); if (error != DB_SUCCESS) { close(tmpfd[i]); @@ -1436,7 +1416,6 @@ ulint start; fts_psort_insert_t ins_ctx; ulint count_diag = 0; - fil_space_crypt_t* crypt_data = NULL; ulint space; ut_ad(index); @@ -1450,7 +1429,6 @@ ins_ctx.trx->op_info = "inserting index entries"; ins_ctx.opt_doc_id_size = psort_info[0].psort_common->opt_doc_id_size; - crypt_data = psort_info[0].psort_common->crypt_data; heap = mem_heap_create(500 + sizeof(mrec_buf_t)); @@ -1544,7 +1522,6 @@ && (!row_merge_read( fd[i], foffs[i], (row_merge_block_t*) block[i], - crypt_data, (row_merge_block_t*) crypt_block[i], space))) { error = DB_CORRUPTION; diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0import.cc mariadb-10.1-10.1.30/storage/innobase/row/row0import.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0import.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0import.cc 2017-12-21 15:48:51.000000000 +0000 @@ -548,7 +548,7 @@ const page_t* page = block->frame; m_space_flags = fsp_header_get_flags(page); - if (!fsp_flags_is_valid(m_space_flags)) { + if (!fsp_flags_is_valid(m_space_flags, true)) { ulint cflags = fsp_flags_convert_from_101(m_space_flags); if (cflags == ULINT_UNDEFINED) { ib_logf(IB_LOG_LEVEL_ERROR, @@ -1601,18 +1601,16 @@ : AbstractCallback(trx), m_cfg(cfg), + m_index(cfg->m_indexes), + m_current_lsn(log_get_lsn()), m_page_zip_ptr(0), - m_heap(0) UNIV_NOTHROW + m_rec_iter(), + m_offsets_(), m_offsets(m_offsets_), + m_heap(0), + m_cluster_index(dict_table_get_first_index(cfg->m_table)) UNIV_NOTHROW { - m_index = m_cfg->m_indexes; - - m_current_lsn = log_get_lsn(); ut_a(m_current_lsn > 0); - - m_offsets = m_offsets_; rec_offs_init(m_offsets_); - - m_cluster_index = dict_table_get_first_index(m_cfg->m_table); } /** @@ -1792,16 +1790,12 @@ m_rec_iter.open(block); - while (!m_rec_iter.end()) { + if (!page_is_leaf(block->frame)) { + return DB_SUCCESS; + } + while (!m_rec_iter.end()) { rec_t* rec = m_rec_iter.current(); - - /* FIXME: Move out of the loop */ - - if (rec_get_status(rec) == REC_STATUS_NODE_PTR) { - break; - } - ibool deleted = rec_get_deleted_flag(rec, comp); /* For the clustered index we have to adjust the BLOB @@ -2107,7 +2101,7 @@ we can work on them */ if ((err = update_page(block, page_type)) != DB_SUCCESS) { - return(err); + break; } /* Note: For compressed pages this function will write to the @@ -2144,9 +2138,15 @@ "%s: Page %lu at offset " UINT64PF " looks corrupted.", m_filepath, (ulong) (offset / m_page_size), offset); - return(DB_CORRUPTION); + err = DB_CORRUPTION; } + /* If we already had and old page with matching number + in the buffer pool, evict it now, because + we no longer evict the pages on DISCARD TABLESPACE. */ + buf_page_get_gen(get_space_id(), get_zip_size(), block->page.offset, + RW_NO_LATCH, NULL, BUF_EVICT_IF_IN_POOL, + __FILE__, __LINE__, NULL); return(err); } @@ -3720,8 +3720,7 @@ The only dirty pages generated should be from the pessimistic purge of delete marked records that couldn't be purged in Phase I. */ - buf_LRU_flush_or_remove_pages( - prebuilt->table->space, BUF_REMOVE_FLUSH_WRITE, trx); + buf_LRU_flush_or_remove_pages(prebuilt->table->space, trx); if (trx_is_interrupted(trx)) { ib_logf(IB_LOG_LEVEL_INFO, "Phase III - Flush interrupted"); diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0ins.cc mariadb-10.1-10.1.30/storage/innobase/row/row0ins.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0ins.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0ins.cc 2017-12-21 15:48:51.000000000 +0000 @@ -38,6 +38,7 @@ #include "btr0btr.h" #include "btr0cur.h" #include "mach0data.h" +#include "ibuf0ibuf.h" #include "que0que.h" #include "row0upd.h" #include "row0sel.h" @@ -930,7 +931,7 @@ mem_free(buf); } #ifdef WITH_WSREP -dberr_t wsrep_append_foreign_key(trx_t *trx, +dberr_t wsrep_append_foreign_key(trx_t *trx, dict_foreign_t* foreign, const rec_t* clust_rec, dict_index_t* clust_index, @@ -1136,7 +1137,7 @@ rec_print(stderr, clust_rec, clust_index); fputs("\n" "InnoDB: Submit a detailed bug report to" - " http://bugs.mysql.com\n", stderr); + " https://jira.mariadb.org/\n", stderr); ut_ad(0); err = DB_SUCCESS; @@ -1290,12 +1291,11 @@ #ifdef WITH_WSREP err = wsrep_append_foreign_key( - thr_get_trx(thr), - foreign, - clust_rec, - clust_index, - FALSE, - (node) ? TRUE : FALSE); + thr_get_trx(thr), + foreign, + clust_rec, + clust_index, + FALSE, FALSE); if (err != DB_SUCCESS) { fprintf(stderr, "WSREP: foreign key append failed: %d\n", err); @@ -2968,6 +2968,10 @@ mem_heap_t* offsets_heap; mem_heap_t* heap; + DBUG_EXECUTE_IF("row_ins_sec_index_entry_timeout", { + DBUG_SET("-d,row_ins_sec_index_entry_timeout"); + return(DB_LOCK_WAIT);}); + if (!index->table->foreign_set.empty()) { err = row_ins_check_foreign_constraints(index->table, index, entry, thr); @@ -2991,6 +2995,11 @@ if (err == DB_FAIL) { mem_heap_empty(heap); + if (index->space == IBUF_SPACE_ID + && !dict_index_is_unique(index)) { + ibuf_free_excess_pages(); + } + /* Try then pessimistic descent to the B-tree */ log_free_check(); diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0log.cc mariadb-10.1-10.1.30/storage/innobase/row/row0log.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0log.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0log.cc 2017-12-21 15:48:51.000000000 +0000 @@ -197,8 +197,14 @@ row_log_buf_t tail; /*!< writer context; protected by mutex and index->lock S-latch, or by index->lock X-latch only */ + byte* crypt_tail; /*!< writer context; + temporary buffer used in encryption, + decryption or NULL*/ row_log_buf_t head; /*!< reader context; protected by MDL only; modifiable by row_log_apply_ops() */ + byte* crypt_head; /*!< reader context; + temporary buffer used in encryption, + decryption or NULL */ const char* path; /*!< where to create temporary file during log operation */ }; @@ -349,6 +355,7 @@ = (os_offset_t) log->tail.blocks * srv_sort_buf_size; ibool ret; + byte * buf = log->tail.block; if (byte_offset + srv_sort_buf_size >= srv_online_max_size) { goto write_failed; @@ -368,11 +375,29 @@ goto err_exit; } + /* If encryption is enabled encrypt buffer before writing it + to file system. */ + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_encrypt(log->tail.block, + srv_sort_buf_size, + log->crypt_tail, + byte_offset, + index->table->space)) { + log->error = DB_DECRYPTION_FAILED; + goto write_failed; + } + + srv_stats.n_rowlog_blocks_encrypted.inc(); + buf = log->crypt_tail; + } + ret = os_file_write_int_fd( "(modification log)", log->fd, - log->tail.block, byte_offset, srv_sort_buf_size); + buf, byte_offset, srv_sort_buf_size); + log->tail.blocks++; + if (!ret) { write_failed: /* We set the flag directly instead of invoking @@ -380,7 +405,9 @@ because the index is not "public" yet. */ index->type |= DICT_CORRUPT; } + UNIV_MEM_INVALID(log->tail.block, srv_sort_buf_size); + memcpy(log->tail.block, log->tail.buf + avail_size, mrec_size - avail_size); log->tail.bytes = mrec_size - avail_size; @@ -451,13 +478,15 @@ void row_log_table_close_func( /*=====================*/ - row_log_t* log, /*!< in/out: online rebuild log */ + dict_index_t* index, /*!< in/out: online rebuilt index */ #ifdef UNIV_DEBUG const byte* b, /*!< in: end of log record */ #endif /* UNIV_DEBUG */ ulint size, /*!< in: size of log record */ ulint avail) /*!< in: available size for log record */ { + row_log_t* log = index->online_log; + ut_ad(mutex_own(&log->mutex)); if (size >= avail) { @@ -465,6 +494,7 @@ = (os_offset_t) log->tail.blocks * srv_sort_buf_size; ibool ret; + byte * buf = log->tail.block; if (byte_offset + srv_sort_buf_size >= srv_online_max_size) { goto write_failed; @@ -484,11 +514,29 @@ goto err_exit; } + /* If encryption is enabled encrypt buffer before writing it + to file system. */ + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_encrypt(log->tail.block, + srv_sort_buf_size, + log->crypt_tail, + byte_offset, + index->table->space)) { + log->error = DB_DECRYPTION_FAILED; + goto err_exit; + } + + srv_stats.n_rowlog_blocks_encrypted.inc(); + buf = log->crypt_tail; + } + ret = os_file_write_int_fd( "(modification log)", log->fd, - log->tail.block, byte_offset, srv_sort_buf_size); + buf, byte_offset, srv_sort_buf_size); + log->tail.blocks++; + if (!ret) { write_failed: log->error = DB_ONLINE_LOG_TOO_BIG; @@ -512,11 +560,11 @@ } #ifdef UNIV_DEBUG -# define row_log_table_close(log, b, size, avail) \ - row_log_table_close_func(log, b, size, avail) +# define row_log_table_close(index, b, size, avail) \ + row_log_table_close_func(index, b, size, avail) #else /* UNIV_DEBUG */ # define row_log_table_close(log, b, size, avail) \ - row_log_table_close_func(log, size, avail) + row_log_table_close_func(index, size, avail) #endif /* UNIV_DEBUG */ /******************************************************//** @@ -688,8 +736,7 @@ b += ext_size; } - row_log_table_close( - index->online_log, b, mrec_size, avail_size); + row_log_table_close(index, b, mrec_size, avail_size); } func_exit: @@ -812,8 +859,7 @@ b + extra_size, index, tuple->fields, tuple->n_fields); b += size; - row_log_table_close( - index->online_log, b, mrec_size, avail_size); + row_log_table_close(index, b, mrec_size, avail_size); } mem_heap_free(heap); @@ -922,8 +968,7 @@ memcpy(b, rec, rec_offs_data_size(offsets)); b += rec_offs_data_size(offsets); - row_log_table_close( - index->online_log, b, mrec_size, avail_size); + row_log_table_close(index, b, mrec_size, avail_size); } } @@ -1528,13 +1573,10 @@ return(error); } - do { - n_index++; - - if (!(index = dict_table_get_next_index(index))) { - break; - } + ut_ad(dict_index_is_clust(index)); + for (n_index += index->type != DICT_CLUSTERED; + (index = dict_table_get_next_index(index)); n_index++) { if (index->type & DICT_FTS) { continue; } @@ -1544,12 +1586,13 @@ flags, BTR_MODIFY_TREE, index, offsets_heap, heap, entry, trx_id, thr); - /* Report correct index name for duplicate key error. */ - if (error == DB_DUPLICATE_KEY) { - thr_get_trx(thr)->error_key_num = n_index; + if (error != DB_SUCCESS) { + if (error == DB_DUPLICATE_KEY) { + thr_get_trx(thr)->error_key_num = n_index; + } + break; } - - } while (error == DB_SUCCESS); + } return(error); } @@ -2128,17 +2171,16 @@ dtuple_big_rec_free(big_rec); } - while ((index = dict_table_get_next_index(index)) != NULL) { - if (error != DB_SUCCESS) { - break; - } - - n_index++; - + for (n_index += index->type != DICT_CLUSTERED; + (index = dict_table_get_next_index(index)); n_index++) { if (index->type & DICT_FTS) { continue; } + if (error != DB_SUCCESS) { + break; + } + if (!row_upd_changes_ord_field_binary( index, update, thr, old_row, NULL)) { continue; @@ -2622,10 +2664,29 @@ goto func_exit; } + byte * buf = index->online_log->head.block; + success = os_file_read_no_error_handling_int_fd( index->online_log->fd, - index->online_log->head.block, ofs, + buf, ofs, srv_sort_buf_size); + + /* If encryption is enabled decrypt buffer after reading it + from file system. */ + if (success && log_tmp_is_encrypted()) { + if (!log_tmp_block_decrypt(buf, + srv_sort_buf_size, + index->online_log->crypt_head, + ofs, + index->table->space)) { + error = DB_DECRYPTION_FAILED; + goto func_exit; + } + + srv_stats.n_rowlog_blocks_decrypted.inc(); + memcpy(buf, index->online_log->crypt_head, srv_sort_buf_size); + } + if (!success) { fprintf(stderr, "InnoDB: unable to read temporary file" " for table %s\n", index->table_name); @@ -2932,9 +2993,21 @@ log->head.blocks = log->head.bytes = 0; log->head.total = 0; log->path = path; + log->crypt_tail = log->crypt_head = NULL; dict_index_set_online_status(index, ONLINE_INDEX_CREATION); index->online_log = log; + if (log_tmp_is_encrypted()) { + ulint size = srv_sort_buf_size; + log->crypt_head = static_cast(os_mem_alloc_large(&size)); + log->crypt_tail = static_cast(os_mem_alloc_large(&size)); + + if (!log->crypt_head || !log->crypt_tail) { + row_log_free(log); + DBUG_RETURN(false); + } + } + /* While we might be holding an exclusive data dictionary lock here, in row_log_abort_sec() we will not always be holding it. Use atomic operations in both cases. */ @@ -2957,6 +3030,15 @@ row_log_block_free(log->tail); row_log_block_free(log->head); row_merge_file_destroy_low(log->fd); + + if (log->crypt_head) { + os_mem_free_large(log->crypt_head, srv_sort_buf_size); + } + + if (log->crypt_tail) { + os_mem_free_large(log->crypt_tail, srv_sort_buf_size); + } + mutex_free(&log->mutex); ut_free(log); log = 0; @@ -3451,11 +3533,29 @@ goto func_exit; } + byte* buf = index->online_log->head.block; + success = os_file_read_no_error_handling_int_fd( index->online_log->fd, - index->online_log->head.block, ofs, + buf, ofs, srv_sort_buf_size); + /* If encryption is enabled decrypt buffer after reading it + from file system. */ + if (success && log_tmp_is_encrypted()) { + if (!log_tmp_block_decrypt(buf, + srv_sort_buf_size, + index->online_log->crypt_head, + ofs, + index->table->space)) { + error = DB_DECRYPTION_FAILED; + goto func_exit; + } + + srv_stats.n_rowlog_blocks_decrypted.inc(); + memcpy(buf, index->online_log->crypt_head, srv_sort_buf_size); + } + if (!success) { fprintf(stderr, "InnoDB: unable to read temporary file" " for index %s\n", index->name + 1); diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0merge.cc mariadb-10.1-10.1.30/storage/innobase/row/row0merge.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0merge.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0merge.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2014, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -79,88 +79,6 @@ /* Maximum pending doc memory limit in bytes for a fts tokenization thread */ #define FTS_PENDING_DOC_MEMORY_LIMIT 1000000 - -/******************************************************//** -Encrypt a merge block. */ -static -void -row_merge_encrypt_buf( -/*==================*/ - fil_space_crypt_t* crypt_data, /*!< in: table crypt data */ - ulint offset, /*!< in: offset where to - write */ - ulint space, /*!< in: tablespace id */ - const byte* input_buf, /*!< in: input buffer */ - byte* crypted_buf) /*!< out: crypted buffer */ -{ - uint key_version; - uint dstlen=0; - os_offset_t ofs = (os_offset_t)srv_sort_buf_size * (os_offset_t)offset; - - key_version = encryption_key_get_latest_version(crypt_data->key_id); - - /* Store key_version at the begining of the input buffer */ - mach_write_to_4((byte *)crypted_buf, key_version); - - int rc = encryption_scheme_encrypt(input_buf+ROW_MERGE_RESERVE_SIZE, - srv_sort_buf_size-ROW_MERGE_RESERVE_SIZE, - crypted_buf+ROW_MERGE_RESERVE_SIZE, &dstlen, - crypt_data, key_version, - space, ofs, 0); - - if (! ((rc == MY_AES_OK) && ((ulint)dstlen == srv_sort_buf_size-ROW_MERGE_RESERVE_SIZE))) { - ib_logf(IB_LOG_LEVEL_FATAL, - "Unable to encrypt data-block " - " src: %p srclen: %lu buf: %p buflen: %d." - " return-code: %d. Can't continue!\n", - input_buf, srv_sort_buf_size, - crypted_buf, dstlen, rc); - } -} - -/******************************************************//** -Decrypt a merge block. */ -static -bool -row_merge_decrypt_buf( -/*==================*/ - fil_space_crypt_t* crypt_data, /*!< in: table crypt data */ - ulint offset, /*!< in: offset where to - write */ - ulint space, /*!< in: tablespace id */ - const byte* input_buf, /*!< in: input buffer */ - byte* crypted_buf) /*!< out: crypted buffer */ -{ - uint key_version; - uint dstlen=0; - os_offset_t ofs = (os_offset_t)srv_sort_buf_size * (os_offset_t)offset; - - /* Read key_version from begining of the buffer */ - key_version = mach_read_from_4((byte *)input_buf); - - if (key_version == 0) { - /* block not encrypted */ - return false; - } - - int rc = encryption_scheme_decrypt(input_buf+ROW_MERGE_RESERVE_SIZE, - srv_sort_buf_size-ROW_MERGE_RESERVE_SIZE, - crypted_buf+ROW_MERGE_RESERVE_SIZE, &dstlen, - crypt_data, key_version, - space, ofs, 0); - - if (! ((rc == MY_AES_OK) && ((ulint)dstlen == srv_sort_buf_size-ROW_MERGE_RESERVE_SIZE))) { - ib_logf(IB_LOG_LEVEL_FATAL, - "Unable to encrypt data-block " - " src: %p srclen: %lu buf: %p buflen: %d." - " return-code: %d. Can't continue!\n", - input_buf, srv_sort_buf_size, - crypted_buf, dstlen, rc); - } - - return true; -} - #ifdef UNIV_DEBUG /******************************************************//** Display a merge tuple. */ @@ -279,7 +197,7 @@ ulint buf_size; mem_heap_t* heap; - max_tuples = (srv_sort_buf_size - ROW_MERGE_RESERVE_SIZE) + max_tuples = (srv_sort_buf_size) / ut_max(1, dict_index_get_min_size(index)); buf_size = (sizeof *buf); @@ -695,7 +613,7 @@ ut_ad(data_size < srv_sort_buf_size); /* Reserve bytes for the end marker of row_merge_block_t. */ - if (buf->total_size + data_size >= (srv_sort_buf_size - ROW_MERGE_RESERVE_SIZE)) { + if (buf->total_size + data_size >= srv_sort_buf_size) { DBUG_RETURN(0); } @@ -816,7 +734,7 @@ /**********************************************************************//** Merge sort the tuple buffer in main memory. */ -static MY_ATTRIBUTE((nonnull(4,5))) +static void row_merge_tuple_sort( /*=================*/ @@ -867,7 +785,7 @@ { const dict_index_t* index = buf->index; ulint n_fields= dict_index_get_n_fields(index); - byte* b = &block[ROW_MERGE_RESERVE_SIZE]; + byte* b = &block[0]; for (ulint i = 0; i < buf->n_tuples; i++) { const mtuple_t* entry = &buf->tuples[i]; @@ -886,7 +804,7 @@ /* Write an "end-of-chunk" marker. */ ut_a(b < &block[srv_sort_buf_size]); - ut_a(b == &block[0] + buf->total_size + ROW_MERGE_RESERVE_SIZE); + ut_a(b == &block[0] + buf->total_size); *b++ = 0; #ifdef UNIV_DEBUG_VALGRIND /* The rest of the block is uninitialized. Initialize it @@ -936,7 +854,7 @@ Read a merge block from the file system. @return TRUE if request was successful, FALSE if fail */ UNIV_INTERN -ibool +bool row_merge_read( /*===========*/ int fd, /*!< in: file descriptor */ @@ -944,12 +862,11 @@ in number of row_merge_block_t elements */ row_merge_block_t* buf, /*!< out: data */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_buf, /*!< in: crypt buf or NULL */ - ulint space) /*!< in: space id */ + ulint space) /*!< in: space id */ { os_offset_t ofs = ((os_offset_t) offset) * srv_sort_buf_size; - ibool success; + bool success; DBUG_EXECUTE_IF("row_merge_read_failure", return(FALSE);); @@ -963,11 +880,15 @@ success = os_file_read_no_error_handling_int_fd(fd, buf, ofs, srv_sort_buf_size); - /* For encrypted tables, decrypt data after reading and copy data */ - if (crypt_data && crypt_buf) { - if (row_merge_decrypt_buf(crypt_data, offset, space, buf, crypt_buf)) { - memcpy(buf, crypt_buf, srv_sort_buf_size); + /* If encryption is enabled decrypt buffer */ + if (success && log_tmp_is_encrypted()) { + if (!log_tmp_block_decrypt(buf, srv_sort_buf_size, + crypt_buf, ofs, space)) { + return (FALSE); } + + srv_stats.n_merge_blocks_decrypted.inc(); + memcpy(buf, crypt_buf, srv_sort_buf_size); } #ifdef POSIX_FADV_DONTNEED @@ -989,31 +910,32 @@ Write a merge block to the file system. @return TRUE if request was successful, FALSE if fail */ UNIV_INTERN -ibool +bool row_merge_write( /*============*/ int fd, /*!< in: file descriptor */ ulint offset, /*!< in: offset where to write, in number of row_merge_block_t elements */ const void* buf, /*!< in: data */ - fil_space_crypt_t* crypt_data, /*!< in: table crypt data */ void* crypt_buf, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ { size_t buf_len = srv_sort_buf_size; os_offset_t ofs = buf_len * (os_offset_t) offset; - ibool ret; + bool ret; void* out_buf = (void *)buf; DBUG_EXECUTE_IF("row_merge_write_failure", return(FALSE);); /* For encrypted tables, encrypt data before writing */ - if (crypt_data && crypt_buf) { - row_merge_encrypt_buf(crypt_data, offset, space, (const byte *)buf, (byte *)crypt_buf); + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_encrypt((const byte *)buf, buf_len, + (byte *)crypt_buf, ofs, space)) { + return (FALSE); + } + + srv_stats.n_merge_blocks_encrypted.inc(); out_buf = crypt_buf; - } else { - /* Mark block unencrypted */ - mach_write_to_4((byte *)out_buf, 0); } ret = os_file_write_int_fd("(merge)", fd, out_buf, ofs, buf_len); @@ -1051,9 +973,8 @@ or NULL on end of list (non-NULL on I/O error) */ ulint* offsets,/*!< out: offsets of mrec */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ - ulint space) /*!< in: space id */ + ulint space) /*!< in: space id */ { ulint extra_size; ulint data_size; @@ -1065,10 +986,6 @@ ut_ad(*offsets == 1 + REC_OFFS_HEADER_SIZE + dict_index_get_n_fields(index)); - if (b == &block[0]) { - b+= ROW_MERGE_RESERVE_SIZE; - } - extra_size = *b++; if (UNIV_UNLIKELY(!extra_size)) { @@ -1090,7 +1007,8 @@ if (UNIV_UNLIKELY(b >= &block[srv_sort_buf_size])) { if (!row_merge_read(fd, ++(*foffs), block, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { err_exit: /* Signal I/O error. */ *mrec = b; @@ -1098,7 +1016,7 @@ } /* Wrap around to the beginning of the buffer. */ - b = &block[ROW_MERGE_RESERVE_SIZE]; + b = &block[0]; } extra_size = (extra_size & 0x7f) << 8; @@ -1120,13 +1038,14 @@ memcpy(*buf, b, avail_size); if (!row_merge_read(fd, ++(*foffs), block, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { goto err_exit; } /* Wrap around to the beginning of the buffer. */ - b = &block[ROW_MERGE_RESERVE_SIZE]; + b = &block[0]; /* Copy the record. */ memcpy(*buf + avail_size, b, extra_size - avail_size); @@ -1182,13 +1101,14 @@ #endif /* UNIV_DEBUG */ if (!row_merge_read(fd, ++(*foffs), block, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { goto err_exit; } /* Wrap around to the beginning of the buffer. */ - b = &block[ROW_MERGE_RESERVE_SIZE]; + b = &block[0]; /* Copy the rest of the record. */ memcpy(*buf + avail_size, b, extra_size + data_size - avail_size); @@ -1265,7 +1185,6 @@ ulint* foffs, /*!< in/out: file offset */ const mrec_t* mrec, /*!< in: record to write */ const ulint* offsets,/*!< in: offsets of mrec */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ { @@ -1288,10 +1207,6 @@ size = extra_size + (extra_size >= 0x80) + rec_offs_data_size(offsets); - if (b == &block[0]) { - b+= ROW_MERGE_RESERVE_SIZE; - } - if (UNIV_UNLIKELY(b + size >= &block[srv_sort_buf_size])) { /* The record spans two blocks. Copy it to the temporary buffer first. */ @@ -1307,14 +1222,15 @@ memcpy(b, buf[0], avail_size); if (!row_merge_write(fd, (*foffs)++, block, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { return(NULL); } UNIV_MEM_INVALID(&block[0], srv_sort_buf_size); /* Copy the rest. */ - b = &block[ROW_MERGE_RESERVE_SIZE]; + b = &block[0]; memcpy(b, buf[0] + avail_size, size - avail_size); b += size - avail_size; } else { @@ -1337,7 +1253,6 @@ byte* b, /*!< in: pointer to end of block */ int fd, /*!< in: file descriptor */ ulint* foffs, /*!< in/out: file offset */ - fil_space_crypt_t* crypt_data, /*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ { @@ -1352,10 +1267,6 @@ } #endif /* UNIV_DEBUG */ - if (b == &block[0]) { - b+= ROW_MERGE_RESERVE_SIZE; - } - *b++ = 0; UNIV_MEM_ASSERT_RW(&block[0], b - &block[0]); UNIV_MEM_ASSERT_W(&block[0], srv_sort_buf_size); @@ -1367,7 +1278,8 @@ #endif /* UNIV_DEBUG_VALGRIND */ if (!row_merge_write(fd, (*foffs)++, block, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { return(NULL); } @@ -1445,10 +1357,9 @@ @param[in,out] block file buffer @param[in,out] tmpfd temporary file handle @param[in] pct_cost percent of task weight out of total alter job -@param[in] crypt_data crypt data or NULL @param[in,out] crypt_block crypted file buffer -return DB_SUCCESS or error */ -static MY_ATTRIBUTE((nonnull(1,2,3,4,6,9,10,16), warn_unused_result)) +@return DB_SUCCESS or error */ +static MY_ATTRIBUTE((warn_unused_result)) dberr_t row_merge_read_clustered_index( trx_t* trx, @@ -1469,7 +1380,6 @@ row_merge_block_t* block, int* tmpfd, float pct_cost, - fil_space_crypt_t* crypt_data, row_merge_block_t* crypt_block) { dict_index_t* clust_index; /* Clustered index */ @@ -1613,6 +1523,8 @@ row_ext_t* ext; page_cur_t* cur = btr_pcur_get_page_cur(&pcur); + mem_heap_empty(row_heap); + /* Do not continue if table pages are still encrypted */ if (!old_table->is_readable() || !new_table->is_readable()) { @@ -2002,8 +1914,8 @@ row_merge_buf_write(buf, file, block); if (!row_merge_write(file->fd, file->offset++, - block, crypt_data, crypt_block, - new_table->space)) { + block, crypt_block, + new_table->space)) { err = DB_TEMP_FILE_WRITE_FAILURE; trx->error_key_num = i; break; @@ -2047,14 +1959,12 @@ goto func_exit; } - mem_heap_empty(row_heap); - /* Increment innodb_onlineddl_pct_progress status variable */ read_rows++; if(read_rows % 1000 == 0) { /* Update progress for each 1000 rows */ curr_progress = (read_rows >= table_total_rows) ? - pct_cost : + pct_cost : ((pct_cost * read_rows) / table_total_rows); /* presenting 10.12% as 1012 integer */ onlineddl_pct_progress = curr_progress * 100; @@ -2183,9 +2093,8 @@ &buf[2], b2, \ of->fd, &of->offset, \ mrec##N, offsets##N, \ - crypt_data, \ crypt_block ? &crypt_block[2 * srv_sort_buf_size] : NULL , \ - space); \ + space); \ if (UNIV_UNLIKELY(!b2 || ++of->n_rec > file->n_rec)) { \ goto corrupt; \ } \ @@ -2193,7 +2102,6 @@ &buf[N], b##N, INDEX, \ file->fd, foffs##N, \ &mrec##N, offsets##N, \ - crypt_data, \ crypt_block ? &crypt_block[N * srv_sort_buf_size] : NULL, \ space); \ \ @@ -2208,7 +2116,7 @@ /*************************************************************//** Merge two blocks of records on disk and write a bigger block. @return DB_SUCCESS or error code */ -static __attribute__((nonnull(1,2,3,4,5,6), warn_unused_result)) +static __attribute__((warn_unused_result)) dberr_t row_merge_blocks( /*=============*/ @@ -2222,7 +2130,6 @@ ulint* foffs1, /*!< in/out: offset of second source list in the file */ merge_file_t* of, /*!< in/out: output file */ - fil_space_crypt_t* crypt_data,/*!< in: crypt data or NULL */ row_merge_block_t* crypt_block,/*!< in: in/out: crypted file buffer */ ulint space) /*!< in: space id */ @@ -2258,9 +2165,11 @@ file in two halves, which can be merged on the following pass. */ if (!row_merge_read(file->fd, *foffs0, &block[0], - crypt_data, crypt_block ? &crypt_block[0] : NULL, space) - || !row_merge_read(file->fd, *foffs1, &block[srv_sort_buf_size], - crypt_data, crypt_block ? &crypt_block[srv_sort_buf_size] : NULL, space)) { + crypt_block ? &crypt_block[0] : NULL, + space) || + !row_merge_read(file->fd, *foffs1, &block[srv_sort_buf_size], + crypt_block ? &crypt_block[srv_sort_buf_size] : NULL, + space)) { corrupt: mem_heap_free(heap); return(DB_CORRUPTION); @@ -2273,13 +2182,15 @@ b0 = row_merge_read_rec( &block[0], &buf[0], b0, dup->index, file->fd, foffs0, &mrec0, offsets0, - crypt_data, crypt_block ? &crypt_block[0] : NULL, space); + crypt_block ? &crypt_block[0] : NULL, + space); b1 = row_merge_read_rec( &block[srv_sort_buf_size], &buf[srv_sort_buf_size], b1, dup->index, file->fd, foffs1, &mrec1, offsets1, - crypt_data, crypt_block ? &crypt_block[srv_sort_buf_size] : NULL, space); + crypt_block ? &crypt_block[srv_sort_buf_size] : NULL, + space); if (UNIV_UNLIKELY(!b0 && mrec0) || UNIV_UNLIKELY(!b1 && mrec1)) { @@ -2325,7 +2236,8 @@ b2 = row_merge_write_eof(&block[2 * srv_sort_buf_size], b2, of->fd, &of->offset, - crypt_data, crypt_block ? &crypt_block[2 * srv_sort_buf_size] : NULL, space); + crypt_block ? &crypt_block[2 * srv_sort_buf_size] : NULL, + space); return(b2 ? DB_SUCCESS : DB_CORRUPTION); } @@ -2333,8 +2245,8 @@ /*************************************************************//** Copy a block of index entries. @return TRUE on success, FALSE on failure */ -static __attribute__((nonnull(1,2,3,4,5), warn_unused_result)) -ibool +static __attribute__((warn_unused_result)) +bool row_merge_blocks_copy( /*==================*/ const dict_index_t* index, /*!< in: index being created */ @@ -2342,9 +2254,8 @@ row_merge_block_t* block, /*!< in/out: 3 buffers */ ulint* foffs0, /*!< in/out: input file offset */ merge_file_t* of, /*!< in/out: output file */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ - ulint space) /*!< in: space id */ + ulint space) /*!< in: space id */ { mem_heap_t* heap; /*!< memory heap for offsets0, offsets1 */ @@ -2372,7 +2283,8 @@ file in two halves, which can be merged on the following pass. */ if (!row_merge_read(file->fd, *foffs0, &block[0], - crypt_data, crypt_block ? &crypt_block[0] : NULL, space)) { + crypt_block ? &crypt_block[0] : NULL, + space)) { corrupt: mem_heap_free(heap); return(FALSE); @@ -2384,7 +2296,8 @@ b0 = row_merge_read_rec(&block[0], &buf[0], b0, index, file->fd, foffs0, &mrec0, offsets0, - crypt_data, crypt_block ? &crypt_block[0] : NULL, space); + crypt_block ? &crypt_block[0] : NULL, + space); if (UNIV_UNLIKELY(!b0 && mrec0)) { @@ -2407,15 +2320,15 @@ return(row_merge_write_eof(&block[2 * srv_sort_buf_size], b2, of->fd, &of->offset, - crypt_data, - crypt_block ? &crypt_block[2 * srv_sort_buf_size] : NULL, space) + crypt_block ? &crypt_block[2 * srv_sort_buf_size] : NULL, + space) != NULL); } /*************************************************************//** Merge disk files. @return DB_SUCCESS or error code */ -static __attribute__((nonnull(1,2,3,4,5,6,7))) +static dberr_t row_merge( /*======*/ @@ -2431,9 +2344,8 @@ ulint* run_offset, /*!< in/out: Array contains the first offset number for each merge run */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ - ulint space) /*!< in: space id */ + ulint space) /*!< in: space id */ { ulint foffs0; /*!< first input offset */ ulint foffs1; /*!< second input offset */ @@ -2481,7 +2393,8 @@ error = row_merge_blocks(dup, file, block, &foffs0, &foffs1, &of, - crypt_data, crypt_block, space); + crypt_block, + space); if (error != DB_SUCCESS) { return(error); @@ -2502,7 +2415,8 @@ if (!row_merge_blocks_copy(dup->index, file, block, &foffs0, &of, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { return(DB_CORRUPTION); } } @@ -2520,7 +2434,8 @@ if (!row_merge_blocks_copy(dup->index, file, block, &foffs1, &of, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { return(DB_CORRUPTION); } } @@ -2576,9 +2491,8 @@ /*!< in: total progress percent until now */ const float pct_cost, /*!< in: current progress percent */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ - ulint space) /*!< in: space id */ + ulint space) /*!< in: space id */ { const ulint half = file->offset / 2; ulint num_runs; @@ -2646,7 +2560,8 @@ error = row_merge(trx, dup, file, block, tmpfd, &num_runs, run_offset, - crypt_data, crypt_block, space); + crypt_block, + space); if(update_progress) { merge_count++; @@ -2723,7 +2638,7 @@ Read sorted file containing index data tuples and insert these data tuples to the index @return DB_SUCCESS or error number */ -static __attribute__((nonnull(2,3,5), warn_unused_result)) +static __attribute__((warn_unused_result)) dberr_t row_merge_insert_index_tuples( /*==========================*/ @@ -2736,9 +2651,8 @@ const float pct_progress, /*!< in: total progress percent until now */ const float pct_cost, /*!< in: current progress percent */ - fil_space_crypt_t* crypt_data,/*!< in: table crypt data */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ - ulint space) /*!< in: space id */ + ulint space) /*!< in: space id */ { const byte* b; mem_heap_t* heap; @@ -2772,7 +2686,8 @@ b = &block[0]; if (!row_merge_read(fd, foffs, block, - crypt_data, crypt_block, space)) { + crypt_block, + space)) { error = DB_CORRUPTION; } else { buf = static_cast( @@ -2789,7 +2704,9 @@ b = row_merge_read_rec(block, buf, b, index, fd, &foffs, &mrec, offsets, - crypt_data, crypt_block, space); + crypt_block, + space); + if (UNIV_UNLIKELY(!b)) { /* End of list, or I/O error */ if (mrec) { @@ -3816,11 +3733,7 @@ /*===================*/ trx_t* trx, /*!< in/out: trx (sets error_state) */ dict_table_t* table, /*!< in: the index is on this table */ - const index_def_t* index_def, - /*!< in: the index definition */ - const char** col_names) - /*! in: column names if columns are - renamed or NULL */ + const index_def_t* index_def) /*!< in: the index definition */ { dict_index_t* index; dberr_t err; @@ -3840,28 +3753,10 @@ for (i = 0; i < n_fields; i++) { index_field_t* ifield = &index_def->fields[i]; - const char * col_name; - - /* - Alter table renaming a column and then adding a index - to this new name e.g ALTER TABLE t - CHANGE COLUMN b c INT NOT NULL, ADD UNIQUE INDEX (c); - requires additional check as column names are not yet - changed when new index definitions are created. Table's - new column names are on a array of column name pointers - if any of the column names are changed. */ - - if (col_names && col_names[i]) { - col_name = col_names[i]; - } else { - col_name = ifield->col_name ? - dict_table_get_col_name_for_mysql(table, ifield->col_name) : - dict_table_get_col_name(table, ifield->col_no); - } dict_mem_index_add_field( index, - col_name, + dict_table_get_col_name(table, ifield->col_no), ifield->prefix_len); } @@ -3974,7 +3869,6 @@ fts_psort_t* merge_info = NULL; ib_int64_t sig_count = 0; bool fts_psort_initiated = false; - fil_space_crypt_t * crypt_data = NULL; float total_static_cost = 0; float total_dynamic_cost = 0; @@ -3999,29 +3893,15 @@ DBUG_RETURN(DB_OUT_OF_MEMORY); } - /* Get crypt data from tablespace if present. We should be protected - from concurrent DDL (e.g. drop table) by MDL-locks. */ - fil_space_t* space = fil_space_acquire(new_table->space); - - if (space) { - crypt_data = space->crypt_data; - } else { - DBUG_RETURN(DB_TABLESPACE_NOT_FOUND); - } - - /* If tablespace is encrypted, allocate additional buffer for + /* If temporal log file is encrypted allocate memory for encryption/decryption. */ - if (crypt_data && crypt_data->should_encrypt()) { + if (log_tmp_is_encrypted()) { crypt_block = static_cast( - os_mem_alloc_large(&block_size)); + os_mem_alloc_large(&block_size)); if (crypt_block == NULL) { - fil_space_release(space); DBUG_RETURN(DB_OUT_OF_MEMORY); } - } else { - /* Not needed */ - crypt_data = NULL; } trx_start_if_not_started_xa(trx); @@ -4103,7 +3983,7 @@ fts_sort_idx, psort_info, merge_files, key_numbers, n_indexes, add_cols, col_map, add_autoinc, sequence, block, &tmpfd, - pct_cost, crypt_data, crypt_block); + pct_cost, crypt_block); pct_progress += pct_cost; @@ -4126,10 +4006,6 @@ /* Now we have files containing index entries ready for sorting and inserting. */ - DBUG_EXECUTE_IF( - "ib_merge_wait_after_read", - os_thread_sleep(20000000);); /* 20 sec */ - for (i = 0; i < n_indexes; i++) { dict_index_t* sort_idx = indexes[i]; @@ -4240,7 +4116,8 @@ trx, &dup, &merge_files[i], block, &tmpfd, true, pct_progress, pct_cost, - crypt_data, crypt_block, new_table->space); + crypt_block, + new_table->space); pct_progress += pct_cost; @@ -4278,7 +4155,8 @@ trx->id, sort_idx, old_table, merge_files[i].fd, block, merge_files[i].n_rec, pct_progress, pct_cost, - crypt_data, crypt_block, new_table->space); + crypt_block, new_table->space); + pct_progress += pct_cost; if (global_system_variables.log_warnings > 2) { @@ -4401,9 +4279,5 @@ } } - if (space) { - fil_space_release(space); - } - DBUG_RETURN(error); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0mysql.cc mariadb-10.1-10.1.30/storage/innobase/row/row0mysql.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0mysql.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0mysql.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2015, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -59,6 +59,7 @@ #include "btr0defragment.h" #include "fil0fil.h" #include "fil0crypt.h" +#include "srv0srv.h" #include "ibuf0ibuf.h" #include "fts0fts.h" #include "fts0types.h" @@ -74,7 +75,7 @@ /** Chain node of the list of tables to drop in the background. */ struct row_mysql_drop_t{ - char* table_name; /*!< table name */ + table_id_t table_id; /*!< table id */ UT_LIST_NODE_T(row_mysql_drop_t)row_mysql_drop_list; /*!< list chain node */ }; @@ -137,19 +138,6 @@ || 0 == strcmp(name + 6, "db")); } -/*********************************************************************//** -If a table is not yet in the drop list, adds the table to the list of tables -which the master thread drops in background. We need this on Unix because in -ALTER TABLE MySQL may call drop table even if the table has running queries on -it. Also, if there are running foreign key checks on the table, we drop the -table lazily. -@return TRUE if the table was not yet in the drop list, and was added there */ -static -ibool -row_add_table_to_background_drop_list( -/*==================================*/ - const char* name); /*!< in: table name */ - /*******************************************************************//** Delays an INSERT, DELETE or UPDATE operation if the purge is lagging. */ static @@ -570,11 +558,33 @@ /* If there is a FTS doc id column and it is not user supplied ( generated by server) then assign it a new doc id. */ - if (prebuilt->table->fts) { + if (!prebuilt->table->fts) { + return; + } - ut_a(prebuilt->table->fts->doc_col != ULINT_UNDEFINED); + ut_a(prebuilt->table->fts->doc_col != ULINT_UNDEFINED); - fts_create_doc_id(prebuilt->table, row, prebuilt->heap); + doc_id_t doc_id; + + if (!DICT_TF2_FLAG_IS_SET(prebuilt->table, DICT_TF2_FTS_HAS_DOC_ID)) { + if (prebuilt->table->fts->cache->first_doc_id + == FTS_NULL_DOC_ID) { + fts_get_next_doc_id(prebuilt->table, &doc_id); + } + return; + } + + dfield_t* fts_doc_id = dtuple_get_nth_field( + row, prebuilt->table->fts->doc_col); + + if (fts_get_next_doc_id(prebuilt->table, &doc_id) == DB_SUCCESS) { + ut_a(doc_id != FTS_NULL_DOC_ID); + ut_ad(sizeof(doc_id) == fts_doc_id->type.len); + dfield_set_data(fts_doc_id, prebuilt->ins_upd_rec_buff + + prebuilt->mysql_row_len, 8); + fts_write_doc_id(fts_doc_id->data, doc_id); + } else { + dfield_set_null(fts_doc_id); } } @@ -1049,7 +1059,10 @@ prebuilt->ins_upd_rec_buff = static_cast( mem_heap_alloc( prebuilt->heap, - prebuilt->mysql_row_len)); + DICT_TF2_FLAG_IS_SET(prebuilt->table, + DICT_TF2_FTS_HAS_DOC_ID) + ? prebuilt->mysql_row_len + 8/* FTS_DOC_ID */ + : prebuilt->mysql_row_len)); } dtuple_t* row; @@ -2451,10 +2464,7 @@ /* We already have .ibd file here. it should be deleted. */ if (table->space - && fil_delete_tablespace( - table->space, - BUF_REMOVE_FLUSH_NO_WRITE) - != DB_SUCCESS) { + && fil_delete_tablespace(table->space) != DB_SUCCESS) { ut_print_timestamp(stderr); fprintf(stderr, @@ -2747,7 +2757,7 @@ mutex_enter(&row_drop_list_mutex); ut_a(row_mysql_drop_list_inited); - +next: drop = UT_LIST_GET_FIRST(row_mysql_drop_list); n_tables = UT_LIST_GET_LEN(row_mysql_drop_list); @@ -2760,62 +2770,39 @@ return(n_tables + n_tables_dropped); } - DBUG_EXECUTE_IF("row_drop_tables_in_background_sleep", - os_thread_sleep(5000000); - ); - - table = dict_table_open_on_name(drop->table_name, FALSE, FALSE, - DICT_ERR_IGNORE_NONE); + table = dict_table_open_on_id(drop->table_id, FALSE, + DICT_TABLE_OP_NORMAL); - if (table == NULL) { - /* If for some reason the table has already been dropped - through some other mechanism, do not try to drop it */ - - goto already_dropped; + if (!table) { + n_tables_dropped++; + mutex_enter(&row_drop_list_mutex); + UT_LIST_REMOVE(row_mysql_drop_list, row_mysql_drop_list, drop); + MONITOR_DEC(MONITOR_BACKGROUND_DROP_TABLE); + ut_free(drop); + goto next; } + ut_a(!table->can_be_evicted); + if (!table->to_be_dropped) { - /* There is a scenario: the old table is dropped - just after it's added into drop list, and new - table with the same name is created, then we try - to drop the new table in background. */ dict_table_close(table, FALSE, FALSE); - goto already_dropped; + mutex_enter(&row_drop_list_mutex); + UT_LIST_REMOVE(row_mysql_drop_list, row_mysql_drop_list, drop); + UT_LIST_ADD_LAST(row_mysql_drop_list, row_mysql_drop_list, + drop); + goto next; } - ut_a(!table->can_be_evicted); - dict_table_close(table, FALSE, FALSE); if (DB_SUCCESS != row_drop_table_for_mysql_in_background( - drop->table_name)) { + table->name)) { /* If the DROP fails for some table, we return, and let the main thread retry later */ - return(n_tables + n_tables_dropped); } - n_tables_dropped++; - -already_dropped: - mutex_enter(&row_drop_list_mutex); - - UT_LIST_REMOVE(row_mysql_drop_list, row_mysql_drop_list, drop); - - MONITOR_DEC(MONITOR_BACKGROUND_DROP_TABLE); - - ut_print_timestamp(stderr); - fputs(" InnoDB: Dropped table ", stderr); - ut_print_name(stderr, NULL, TRUE, drop->table_name); - fputs(" in background drop queue.\n", stderr); - - mem_free(drop->table_name); - - mem_free(drop); - - mutex_exit(&row_drop_list_mutex); - goto loop; } @@ -2847,14 +2834,13 @@ ALTER TABLE MySQL may call drop table even if the table has running queries on it. Also, if there are running foreign key checks on the table, we drop the table lazily. -@return TRUE if the table was not yet in the drop list, and was added there */ +@return whether background DROP TABLE was scheduled for the first time */ static -ibool -row_add_table_to_background_drop_list( -/*==================================*/ - const char* name) /*!< in: table name */ +bool +row_add_table_to_background_drop_list(table_id_t table_id) { row_mysql_drop_t* drop; + bool added = true; mutex_enter(&row_drop_list_mutex); @@ -2865,31 +2851,21 @@ drop != NULL; drop = UT_LIST_GET_NEXT(row_mysql_drop_list, drop)) { - if (strcmp(drop->table_name, name) == 0) { - /* Already in the list */ - - mutex_exit(&row_drop_list_mutex); - - return(FALSE); + if (drop->table_id == table_id) { + added = false; + goto func_exit; } } - drop = static_cast( - mem_alloc(sizeof(row_mysql_drop_t))); - - drop->table_name = mem_strdup(name); + drop = static_cast(ut_malloc(sizeof *drop)); + drop->table_id = table_id; UT_LIST_ADD_LAST(row_mysql_drop_list, row_mysql_drop_list, drop); MONITOR_INC(MONITOR_BACKGROUND_DROP_TABLE); - - /* fputs("InnoDB: Adding table ", stderr); - ut_print_name(stderr, trx, TRUE, drop->table_name); - fputs(" to background drop list\n", stderr); */ - +func_exit: mutex_exit(&row_drop_list_mutex); - - return(TRUE); + return added; } /*********************************************************************//** @@ -3083,9 +3059,6 @@ 4) FOREIGN KEY operations: if table->n_foreign_key_checks_running > 0, we do not allow the discard. */ - /* Play safe and remove all insert buffer entries, though we should - have removed them already when DISCARD TABLESPACE was called */ - ibuf_delete_for_discarded_space(table->space); table_id_t new_id; @@ -4001,6 +3974,16 @@ ut_ad(!table->fts->add_wq); ut_ad(lock_trx_has_sys_table_locks(trx) == 0); + for (;;) { + bool retry = false; + if (dict_fts_index_syncing(table)) { + retry = true; + } + if (!retry) { + break; + } + DICT_BG_YIELD(trx); + } row_mysql_unlock_data_dictionary(trx); fts_optimize_remove_table(table); row_mysql_lock_data_dictionary(trx); @@ -4101,7 +4084,7 @@ DBUG_EXECUTE_IF("row_drop_table_add_to_background", - row_add_table_to_background_drop_list(table->name); + row_add_table_to_background_drop_list(table->id); err = DB_SUCCESS; goto funct_exit; ); @@ -4113,33 +4096,22 @@ checks take an IS or IX lock on the table. */ if (table->n_foreign_key_checks_running > 0) { - - const char* save_tablename = table->name; - ibool added; - - added = row_add_table_to_background_drop_list(save_tablename); - - if (added) { + if (row_add_table_to_background_drop_list(table->id)) { ut_print_timestamp(stderr); fputs(" InnoDB: You are trying to drop table ", stderr); - ut_print_name(stderr, trx, TRUE, save_tablename); + ut_print_name(stderr, trx, TRUE, table->name); fputs("\n" "InnoDB: though there is a" " foreign key check running on it.\n" "InnoDB: Adding the table to" " the background drop queue.\n", stderr); - - /* We return DB_SUCCESS to MySQL though the drop will - happen lazily later */ - - err = DB_SUCCESS; - } else { - /* The table is already in the background drop list */ - err = DB_ERROR; } + /* We return DB_SUCCESS to MySQL though the drop will + happen lazily later */ + err = DB_SUCCESS; goto funct_exit; } @@ -4164,11 +4136,7 @@ lock_remove_all_on_table(table, TRUE); ut_a(table->n_rec_locks == 0); } else if (table->n_ref_count > 0 || table->n_rec_locks > 0) { - ibool added; - - added = row_add_table_to_background_drop_list(table->name); - - if (added) { + if (row_add_table_to_background_drop_list(table->id)) { ut_print_timestamp(stderr); fputs(" InnoDB: Warning: MySQL is" " trying to drop table ", stderr); @@ -4460,9 +4428,7 @@ fil_delete_file(filepath); - } else if (fil_delete_tablespace( - space_id, - BUF_REMOVE_FLUSH_NO_WRITE) + } else if (fil_delete_tablespace(space_id) != DB_SUCCESS) { fprintf(stderr, "InnoDB: We removed now the InnoDB" diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0quiesce.cc mariadb-10.1-10.1.30/storage/innobase/row/row0quiesce.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0quiesce.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0quiesce.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -542,8 +543,7 @@ } if (!trx_is_interrupted(trx)) { - buf_LRU_flush_or_remove_pages( - table->space, BUF_REMOVE_FLUSH_WRITE, trx); + buf_LRU_flush_or_remove_pages(table->space, trx); if (trx_is_interrupted(trx)) { diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0sel.cc mariadb-10.1-10.1.30/storage/innobase/row/row0sel.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0sel.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0sel.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Copyright (c) 2015, 2017, MariaDB Corporation. @@ -1539,6 +1539,7 @@ switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -1597,6 +1598,7 @@ switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -2558,34 +2560,32 @@ row_sel_field_store_in_mysql_format_func(dest,templ,src,len) #endif /* UNIV_DEBUG */ -/**************************************************************//** -Stores a non-SQL-NULL field in the MySQL format. The counterpart of this -function is row_mysql_store_col_in_innobase_format() in row0mysql.cc. */ +/** Stores a non-SQL-NULL field in the MySQL format. The counterpart of this +function is row_mysql_store_col_in_innobase_format() in row0mysql.cc. +@param[in,out] dest buffer where to store; NOTE + that BLOBs are not in themselves stored + here: the caller must allocate and copy + the BLOB into buffer before, and pass + the pointer to the BLOB in 'data' +@param[in] templ MySQL column template. Its following fields + are referenced: type, is_unsigned, mysql_col_len, + mbminlen, mbmaxlen +@param[in] index InnoDB index +@param[in] field_no templ->rec_field_no or templ->clust_rec_field_no + or templ->icp_rec_field_no +@param[in] data data to store +@param[in] len length of the data */ static MY_ATTRIBUTE((nonnull)) void row_sel_field_store_in_mysql_format_func( -/*=====================================*/ - byte* dest, /*!< in/out: buffer where to store; NOTE - that BLOBs are not in themselves - stored here: the caller must allocate - and copy the BLOB into buffer before, - and pass the pointer to the BLOB in - 'data' */ + byte* dest, const mysql_row_templ_t* templ, - /*!< in: MySQL column template. - Its following fields are referenced: - type, is_unsigned, mysql_col_len, - mbminlen, mbmaxlen */ #ifdef UNIV_DEBUG const dict_index_t* index, - /*!< in: InnoDB index */ ulint field_no, - /*!< in: templ->rec_field_no or - templ->clust_rec_field_no or - templ->icp_rec_field_no */ #endif /* UNIV_DEBUG */ - const byte* data, /*!< in: data to store */ - ulint len) /*!< in: length of the data */ + const byte* data, + ulint len) { byte* ptr; #ifdef UNIV_DEBUG @@ -2724,6 +2724,7 @@ case DATA_SYS: /* These column types should never be shipped to MySQL. */ ut_ad(0); + /* fall through */ case DATA_CHAR: case DATA_FIXBINARY: @@ -2758,8 +2759,6 @@ @param[in] field_no templ->rec_field_no or templ->clust_rec_field_no or templ->icp_rec_field_no - or sec field no if clust_templ_for_sec - is TRUE @param[in] templ row template */ static MY_ATTRIBUTE((warn_unused_result)) @@ -2912,10 +2911,6 @@ @param[in] rec_clust TRUE if the rec in the clustered index @param[in] index index of rec @param[in] offsets array returned by rec_get_offsets(rec) -@param[in] clust_templ_for_sec TRUE if rec belongs to secondary index - but the prebuilt->template is in - clustered index format and it is - used only for end range comparison @return TRUE on success, FALSE if not all columns could be retrieved */ static MY_ATTRIBUTE((warn_unused_result)) ibool @@ -3098,7 +3093,7 @@ trx_print(stderr, trx, 600); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } @@ -3339,6 +3334,36 @@ ut_memcpy(buf, cache, len); } +/** Copy used fields from cached row. +Copy cache record field by field, don't touch fields that +are not covered by current key. +@param[out] buf Where to copy the MySQL row. +@param[in] cached_rec What to copy (in MySQL row format). +@param[in] prebuilt prebuilt struct. */ +void +row_sel_copy_cached_fields_for_mysql( + byte* buf, + const byte* cached_rec, + row_prebuilt_t* prebuilt) +{ + const mysql_row_templ_t*templ; + ulint i; + for (i = 0; i < prebuilt->n_template; i++) { + templ = prebuilt->mysql_template + i; + + row_sel_copy_cached_field_for_mysql( + buf, cached_rec, templ); + /* Copy NULL bit of the current field from cached_rec + to buf */ + if (templ->mysql_null_bit_mask) { + buf[templ->mysql_null_byte_offset] + ^= (buf[templ->mysql_null_byte_offset] + ^ cached_rec[templ->mysql_null_byte_offset]) + & (byte) templ->mysql_null_bit_mask; + } + } +} + /********************************************************************//** Pops a cached row for MySQL from the fetch cache. */ UNIV_INLINE @@ -4192,6 +4217,7 @@ switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4282,6 +4308,7 @@ switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4317,8 +4344,7 @@ wrong_offs: if (srv_force_recovery == 0 || moves_up == FALSE) { ut_print_timestamp(stderr); - buf_page_print(page_align(rec), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page_align(rec), 0); fprintf(stderr, "\nInnoDB: rec address %p," " buf block fix count %lu\n", @@ -4563,6 +4589,7 @@ prebuilt->new_rec_locks = 1; } err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; case DB_LOCK_WAIT: diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0uins.cc mariadb-10.1-10.1.30/storage/innobase/row/row0uins.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0uins.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0uins.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -201,6 +202,10 @@ mtr_s_lock(dict_index_get_lock(index), &mtr); } else { ut_ad(mode == BTR_MODIFY_TREE); + if (index->space == IBUF_SPACE_ID + && !dict_index_is_unique(index)) { + ibuf_free_excess_pages(); + } mtr_x_lock(dict_index_get_lock(index), &mtr); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0umod.cc mariadb-10.1-10.1.30/storage/innobase/row/row0umod.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0umod.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0umod.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -35,6 +36,7 @@ #include "trx0roll.h" #include "btr0btr.h" #include "mach0data.h" +#include "ibuf0ibuf.h" #include "row0undo.h" #include "row0vers.h" #include "row0log.h" @@ -439,6 +441,11 @@ log_free_check(); mtr_start_trx(&mtr, thr_get_trx(thr)); + if (mode == BTR_MODIFY_TREE + && index->space == IBUF_SPACE_ID + && !dict_index_is_unique(index)) { + ibuf_free_excess_pages(); + } if (*index->name == TEMP_INDEX_PREFIX) { /* The index->online_status may change if the @@ -611,6 +618,11 @@ log_free_check(); mtr_start_trx(&mtr, thr_get_trx(thr)); + if (mode == BTR_MODIFY_TREE + && index->space == IBUF_SPACE_ID + && !dict_index_is_unique(index)) { + ibuf_free_excess_pages(); + } if (*index->name == TEMP_INDEX_PREFIX) { /* The index->online_status may change if the @@ -671,7 +683,7 @@ trx_print(stderr, trx, 0); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ib_logf(IB_LOG_LEVEL_WARN, "record in index %s was not found" diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0undo.cc mariadb-10.1-10.1.30/storage/innobase/row/row0undo.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0undo.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0undo.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -348,6 +349,13 @@ ut_ad(que_node_get_type(node) == QUE_NODE_UNDO); + if (UNIV_UNLIKELY(trx == trx_roll_crash_recv_trx) + && trx_roll_must_shutdown()) { + /* Shutdown has been initiated. */ + trx->error_state = DB_INTERRUPTED; + return(NULL); + } + err = row_undo(node, thr); trx->error_state = err; diff -Nru mariadb-10.1-10.1.25/storage/innobase/row/row0upd.cc mariadb-10.1-10.1.30/storage/innobase/row/row0upd.cc --- mariadb-10.1-10.1.25/storage/innobase/row/row0upd.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/row/row0upd.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1952,7 +1952,7 @@ trx_print(stderr, trx, 0); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); break; case ROW_FOUND: @@ -1983,6 +1983,8 @@ } #ifdef WITH_WSREP if (err == DB_SUCCESS && !referenced && + wsrep_on_trx(trx) && + !wsrep_thd_is_BF(trx->mysql_thd, FALSE) && !(parent && que_node_get_type(parent) == QUE_NODE_UPDATE && ((upd_node_t*)parent)->cascade_node == node) && @@ -2268,7 +2270,7 @@ } } #ifdef WITH_WSREP - if (!referenced && + if (!referenced && wsrep_on_trx(trx) && !(parent && que_node_get_type(parent) == QUE_NODE_UPDATE && ((upd_node_t*)parent)->cascade_node == node) && foreign @@ -2533,10 +2535,10 @@ node, pcur, index->table, index, offsets, thr, mtr); } #ifdef WITH_WSREP - if (err == DB_SUCCESS && !referenced && + trx_t* trx = thr_get_trx(thr) ; + if (err == DB_SUCCESS && !referenced && wsrep_on_trx(trx) && !(parent && que_node_get_type(parent) == QUE_NODE_UPDATE && ((upd_node_t*)parent)->cascade_node == node) && - thr_get_trx(thr) && foreign ) { err = wsrep_row_upd_check_foreign_constraints( diff -Nru mariadb-10.1-10.1.25/storage/innobase/srv/srv0srv.cc mariadb-10.1-10.1.30/storage/innobase/srv/srv0srv.cc --- mariadb-10.1-10.1.25/storage/innobase/srv/srv0srv.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/srv/srv0srv.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1350,7 +1350,7 @@ ut_total_allocated_memory, mem_pool_get_reserved(mem_comm_pool)); fprintf(file, "Dictionary memory allocated " ULINTPF "\n", - dict_sys->size); + dict_sys_get_size()); buf_print_io(file); @@ -1619,6 +1619,10 @@ export_vars.innodb_pages_page_compression_error = srv_stats.pages_page_compression_error; export_vars.innodb_pages_decrypted = srv_stats.pages_decrypted; export_vars.innodb_pages_encrypted = srv_stats.pages_encrypted; + export_vars.innodb_n_merge_blocks_encrypted = srv_stats.n_merge_blocks_encrypted; + export_vars.innodb_n_merge_blocks_decrypted = srv_stats.n_merge_blocks_decrypted; + export_vars.innodb_n_rowlog_blocks_encrypted = srv_stats.n_rowlog_blocks_encrypted; + export_vars.innodb_n_rowlog_blocks_decrypted = srv_stats.n_rowlog_blocks_decrypted; export_vars.innodb_defragment_compression_failures = btr_defragment_compression_failures; @@ -1910,7 +1914,7 @@ " was greater\n" "InnoDB: than the new log sequence number " LSN_PF "!\n" "InnoDB: Please submit a bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org\n", old_lsn, new_lsn); ut_ad(0); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/srv/srv0start.cc mariadb-10.1-10.1.30/storage/innobase/srv/srv0start.cc --- mariadb-10.1-10.1.25/storage/innobase/srv/srv0start.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/srv/srv0start.cc 2017-12-21 15:48:51.000000000 +0000 @@ -70,8 +70,7 @@ #include "srv0start.h" #include "srv0srv.h" #include "btr0defragment.h" - -#include +#include "mysql/service_wsrep.h" /* wsrep_recovery */ #ifndef UNIV_HOTBACKUP # include "trx0rseg.h" @@ -850,7 +849,7 @@ ibool one_created = FALSE; os_offset_t size; ulint flags; - ulint space; + ulint space=0; ulint rounded_size_pages; char name[10000]; fil_space_crypt_t* crypt_data=NULL; @@ -1191,11 +1190,6 @@ ut_a(ret); if (i == 0) { - if (!crypt_data) { - crypt_data = fil_space_create_crypt_data(FIL_ENCRYPTION_DEFAULT, - FIL_DEFAULT_ENCRYPTION_KEY); - } - flags = FSP_FLAGS_PAGE_SSIZE(); fil_space_create(name, 0, flags, FIL_TABLESPACE, @@ -1332,11 +1326,30 @@ size = os_file_get_size(fh); ut_a(size != (os_offset_t) -1); + /* Load the tablespace into InnoDB's internal + data structures. */ + + const char* check_msg; + fil_space_crypt_t* crypt_data = NULL; + + /* Set the compressed page size to 0 (non-compressed) */ + flags = FSP_FLAGS_PAGE_SSIZE(); + + /* Read first page to find out does the crypt_info + exists on undo tablespace. */ + check_msg = fil_read_first_page( + fh, FALSE, &flags, &space, + NULL, &crypt_data, false); + ret = os_file_close(fh); ut_a(ret); - /* Load the tablespace into InnoDB's internal - data structures. */ + if (check_msg) { + ib_logf(IB_LOG_LEVEL_ERROR, + "%s in data file %s", + check_msg, name); + return (err); + } /* We set the biggest space id to the undo tablespace because InnoDB hasn't opened any other tablespace apart @@ -1344,10 +1357,8 @@ fil_set_max_space_id_if_bigger(space); - /* Set the compressed page size to 0 (non-compressed) */ - flags = FSP_FLAGS_PAGE_SSIZE(); fil_space_create(name, space, flags, FIL_TABLESPACE, - NULL /* no encryption */, + crypt_data, true /* create */); ut_a(fil_validate()); @@ -3002,6 +3013,7 @@ */ if (!wsrep_recovery) { #endif /* WITH_WSREP */ + /* Create the buffer pool dump/load thread */ srv_buf_dump_thread_active = true; buf_dump_thread_handle= @@ -3018,12 +3030,10 @@ /* Create thread(s) that handles key rotation */ fil_system_enter(); + btr_scrub_init(); fil_crypt_threads_init(); fil_system_exit(); - /* Init data for datafile scrub threads */ - btr_scrub_init(); - /* Initialize online defragmentation. */ btr_defragment_init(); btr_defragment_thread_active = true; diff -Nru mariadb-10.1-10.1.25/storage/innobase/trx/trx0purge.cc mariadb-10.1-10.1.30/storage/innobase/trx/trx0purge.cc --- mariadb-10.1-10.1.25/storage/innobase/trx/trx0purge.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/trx/trx0purge.cc 2017-12-21 15:48:51.000000000 +0000 @@ -603,7 +603,7 @@ "InnoDB: but its length is still" " reported as %lu! Make a detailed bug\n" "InnoDB: report, and submit it" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (ulong) trx_sys->rseg_history_len); ut_ad(0); } diff -Nru mariadb-10.1-10.1.25/storage/innobase/trx/trx0rec.cc mariadb-10.1-10.1.30/storage/innobase/trx/trx0rec.cc --- mariadb-10.1-10.1.25/storage/innobase/trx/trx0rec.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/trx/trx0rec.cc 2017-12-21 15:48:51.000000000 +0000 @@ -772,7 +772,25 @@ const dict_col_t* col = dict_table_get_nth_col(table, col_no); - if (col->ord_part) { + if (!col->ord_part) { + continue; + } + + if (update) { + for (i = 0; i < update->n_fields; i++) { + const dict_field_t* f + = dict_index_get_nth_field( + index, + upd_get_nth_field( + update, i) + ->field_no); + if (f->col == col) { + goto already_logged; + } + } + } + + if (TRUE) { ulint pos; /* Write field number to undo log */ @@ -823,6 +841,9 @@ ptr += flen; } } + +already_logged: + continue; } mach_write_to_2(old_ptr, ptr - old_ptr); @@ -1001,7 +1022,7 @@ fprintf(stderr, "\n" "InnoDB: but index has only %lu fields\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n" + " to https://jira.mariadb.org/\n" "InnoDB: Run also CHECK TABLE ", (ulong) dict_index_get_n_fields(index)); ut_print_name(stderr, trx, TRUE, index->table_name); @@ -1200,10 +1221,8 @@ marking, the record in the clustered index, otherwise NULL */ const ulint* offsets, /*!< in: rec_get_offsets(rec) */ - roll_ptr_t* roll_ptr) /*!< out: rollback pointer to the - inserted undo log record, - 0 if BTR_NO_UNDO_LOG - flag was specified */ + roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the + undo log record */ { trx_t* trx; trx_undo_t* undo; diff -Nru mariadb-10.1-10.1.25/storage/innobase/trx/trx0roll.cc mariadb-10.1-10.1.30/storage/innobase/trx/trx0roll.cc --- mariadb-10.1-10.1.25/storage/innobase/trx/trx0roll.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/trx/trx0roll.cc 2017-12-21 15:48:51.000000000 +0000 @@ -24,6 +24,9 @@ Created 3/26/1996 Heikki Tuuri *******************************************************/ +#include "my_config.h" +#include + #include "trx0roll.h" #ifdef UNIV_NONINL @@ -55,14 +58,7 @@ bool trx_rollback_or_clean_is_active; /** In crash recovery, the current trx to be rolled back; NULL otherwise */ -static const trx_t* trx_roll_crash_recv_trx = NULL; - -/** In crash recovery we set this to the undo n:o of the current trx to be -rolled back. Then we can print how many % the rollback has progressed. */ -static undo_no_t trx_roll_max_undo_no; - -/** Auxiliary variable which tells the previous progress % we printed */ -static ulint trx_roll_progress_printed_pct; +const trx_t* trx_roll_crash_recv_trx; /****************************************************************//** Finishes a transaction rollback. */ @@ -552,8 +548,6 @@ que_thr_t* thr; roll_node_t* roll_node; dict_table_t* table; - ib_int64_t rows_to_undo; - const char* unit = ""; ibool dictionary_locked = FALSE; heap = mem_heap_create(512); @@ -572,30 +566,8 @@ ut_a(thr == que_fork_start_command(fork)); - mutex_enter(&trx_sys->mutex); - trx_roll_crash_recv_trx = trx; - trx_roll_max_undo_no = trx->undo_no; - - trx_roll_progress_printed_pct = 0; - - rows_to_undo = trx_roll_max_undo_no; - - mutex_exit(&trx_sys->mutex); - - if (rows_to_undo > 1000000000) { - rows_to_undo = rows_to_undo / 1000000; - unit = "M"; - } - - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: Rolling back trx with id " TRX_ID_FMT ", %lu%s" - " rows to undo\n", - trx->id, - (ulong) rows_to_undo, unit); - if (trx_get_dict_operation(trx) != TRX_DICT_OP_NONE) { row_mysql_lock_data_dictionary(trx); dictionary_locked = TRUE; @@ -606,6 +578,16 @@ que_run_threads(roll_node->undo_thr); + if (trx->error_state != DB_SUCCESS) { + ut_ad(trx->error_state == DB_INTERRUPTED); + ut_ad(!srv_undo_sources); + ut_ad(srv_fast_shutdown); + ut_ad(!dictionary_locked); + que_graph_free(static_cast( + roll_node->undo_thr->common.parent)); + goto func_exit; + } + trx_rollback_finish(thr_get_trx(roll_node->undo_thr)); /* Free the memory reserved by the undo graph */ @@ -650,13 +632,14 @@ } } + ib_logf(IB_LOG_LEVEL_INFO, + "Rollback of trx with id " TRX_ID_FMT " completed", trx->id); + +func_exit: if (dictionary_locked) { row_mysql_unlock_data_dictionary(trx); } - ib_logf(IB_LOG_LEVEL_INFO, - "Rollback of trx with id " TRX_ID_FMT " completed", trx->id); - mem_heap_free(heap); trx_roll_crash_recv_trx = NULL; @@ -673,7 +656,7 @@ trx_rollback_resurrected( /*=====================*/ trx_t* trx, /*!< in: transaction to rollback or clean */ - ibool all) /*!< in: FALSE=roll back dictionary transactions; + ibool* all) /*!< in/out: FALSE=roll back dictionary transactions; TRUE=roll back all non-PREPARED transactions */ { ut_ad(mutex_own(&trx_sys->mutex)); @@ -684,16 +667,15 @@ to accidentally clean up a non-recovered transaction here. */ trx_mutex_enter(trx); - bool is_recovered = trx->is_recovered; - trx_state_t state = trx->state; - trx_mutex_exit(trx); - - if (!is_recovered) { + if (!trx->is_recovered) { +func_exit: + trx_mutex_exit(trx); return(FALSE); } - switch (state) { + switch (trx->state) { case TRX_STATE_COMMITTED_IN_MEMORY: + trx_mutex_exit(trx); mutex_exit(&trx_sys->mutex); fprintf(stderr, "InnoDB: Cleaning up trx with id " TRX_ID_FMT "\n", @@ -702,21 +684,83 @@ trx_free_for_background(trx); return(TRUE); case TRX_STATE_ACTIVE: - if (all || trx_get_dict_operation(trx) != TRX_DICT_OP_NONE) { + if (!srv_undo_sources && srv_fast_shutdown) { +fake_prepared: + trx->state = TRX_STATE_PREPARED; + trx_sys->n_prepared_trx++; + trx_sys->n_prepared_recovered_trx++; + *all = FALSE; + goto func_exit; + } + trx_mutex_exit(trx); + + if (*all || trx_get_dict_operation(trx) != TRX_DICT_OP_NONE) { mutex_exit(&trx_sys->mutex); trx_rollback_active(trx); + if (trx->error_state != DB_SUCCESS) { + ut_ad(trx->error_state == DB_INTERRUPTED); + ut_ad(!srv_undo_sources); + ut_ad(srv_fast_shutdown); + mutex_enter(&trx_sys->mutex); + trx_mutex_enter(trx); + goto fake_prepared; + } trx_free_for_background(trx); return(TRUE); } return(FALSE); case TRX_STATE_PREPARED: - return(FALSE); + goto func_exit; case TRX_STATE_NOT_STARTED: break; } ut_error; - return(FALSE); + goto func_exit; +} + +/** Report progress when rolling back a row of a recovered transaction. +@return whether the rollback should be aborted due to pending shutdown */ +UNIV_INTERN +bool +trx_roll_must_shutdown() +{ + const trx_t* trx = trx_roll_crash_recv_trx; + ut_ad(trx); + ut_ad(trx_state_eq(trx, TRX_STATE_ACTIVE)); + + if (trx_get_dict_operation(trx) == TRX_DICT_OP_NONE + && !srv_undo_sources && srv_fast_shutdown) { + return true; + } + + ib_time_t time = ut_time(); + mutex_enter(&trx_sys->mutex); + mutex_enter(&recv_sys->mutex); + + if (recv_sys->report(time)) { + ulint n_trx = 0, n_rows = 0; + for (const trx_t* t = UT_LIST_GET_FIRST(trx_sys->rw_trx_list); + t != NULL; + t = UT_LIST_GET_NEXT(trx_list, t)) { + + assert_trx_in_rw_list(t); + if (t->is_recovered + && trx_state_eq(t, TRX_STATE_ACTIVE)) { + n_trx++; + n_rows += t->undo_no; + } + } + ib_logf(IB_LOG_LEVEL_INFO, + "To roll back: " ULINTPF " transactions, " + ULINTPF " rows", n_trx, n_rows); + sd_notifyf(0, "STATUS=To roll back: " ULINTPF " transactions, " + ULINTPF " rows", n_trx, n_rows); + } + + mutex_exit(&recv_sys->mutex); + mutex_exit(&trx_sys->mutex); + return false; } /*******************************************************************//** @@ -763,17 +807,11 @@ assert_trx_in_rw_list(trx); - if (srv_shutdown_state != SRV_SHUTDOWN_NONE - && srv_fast_shutdown != 0) { - all = FALSE; - break; - } - /* If this function does a cleanup or rollback then it will release the trx_sys->mutex, therefore we need to reacquire it before retrying the loop. */ - if (trx_rollback_resurrected(trx, all)) { + if (trx_rollback_resurrected(trx, &all)) { mutex_enter(&trx_sys->mutex); @@ -1100,7 +1138,6 @@ undo_no_t undo_no; ibool is_insert; trx_rseg_t* rseg; - ulint progress_pct; mtr_t mtr; rseg = trx->rseg; @@ -1158,27 +1195,6 @@ ut_ad(undo_no + 1 == trx->undo_no); - /* We print rollback progress info if we are in a crash recovery - and the transaction has at least 1000 row operations to undo. */ - - if (trx == trx_roll_crash_recv_trx && trx_roll_max_undo_no > 1000) { - - progress_pct = 100 - (ulint) - ((undo_no * 100) / trx_roll_max_undo_no); - if (progress_pct != trx_roll_progress_printed_pct) { - if (trx_roll_progress_printed_pct == 0) { - fprintf(stderr, - "\nInnoDB: Progress in percents:" - " %lu", (ulong) progress_pct); - } else { - fprintf(stderr, - " %lu", (ulong) progress_pct); - } - fflush(stderr); - trx_roll_progress_printed_pct = progress_pct; - } - } - trx->undo_no = undo_no; if (!trx_undo_arr_store_info(trx, undo_no)) { diff -Nru mariadb-10.1-10.1.25/storage/innobase/trx/trx0sys.cc mariadb-10.1-10.1.30/storage/innobase/trx/trx0sys.cc --- mariadb-10.1-10.1.25/storage/innobase/trx/trx0sys.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/trx/trx0sys.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -179,12 +180,7 @@ mtr_t mtr; trx_sysf_t* sys_header; -#ifndef WITH_WSREP - /* wsrep_fake_trx_id violates this assert - * Copied from trx_sys_get_new_trx_id - */ ut_ad(mutex_own(&trx_sys->mutex)); -#endif /* WITH_WSREP */ if (!srv_read_only_mode) { mtr_start(&mtr); @@ -323,114 +319,126 @@ static long long trx_sys_cur_xid_seqno = -1; static unsigned char trx_sys_cur_xid_uuid[16]; -long long read_wsrep_xid_seqno(const XID* xid) +/** Read WSREP XID seqno */ +static inline long long read_wsrep_xid_seqno(const XID* xid) { - long long seqno; - memcpy(&seqno, xid->data + 24, sizeof(long long)); - return seqno; + long long seqno; + memcpy(&seqno, xid->data + 24, sizeof(long long)); + return seqno; } -void read_wsrep_xid_uuid(const XID* xid, unsigned char* buf) +/** Read WSREP XID UUID */ +static inline void read_wsrep_xid_uuid(const XID* xid, unsigned char* buf) { - memcpy(buf, xid->data + 8, 16); + memcpy(buf, xid->data + 8, 16); } #endif /* UNIV_DEBUG */ +/** Update WSREP XID info in sys_header of TRX_SYS_PAGE_NO = 5. +@param[in] xid Transaction XID +@param[in,out] sys_header sys_header +@param[in] mtr minitransaction */ +UNIV_INTERN void trx_sys_update_wsrep_checkpoint( - const XID* xid, /*!< in: transaction XID */ - trx_sysf_t* sys_header, /*!< in: sys_header */ - mtr_t* mtr) /*!< in: mtr */ + const XID* xid, + trx_sysf_t* sys_header, + mtr_t* mtr) { #ifdef UNIV_DEBUG - { - /* Check that seqno is monotonically increasing */ - unsigned char xid_uuid[16]; - long long xid_seqno = read_wsrep_xid_seqno(xid); - read_wsrep_xid_uuid(xid, xid_uuid); - if (!memcmp(xid_uuid, trx_sys_cur_xid_uuid, 8)) - { - ut_ad(xid_seqno > trx_sys_cur_xid_seqno); - trx_sys_cur_xid_seqno = xid_seqno; - } - else - { - memcpy(trx_sys_cur_xid_uuid, xid_uuid, 16); - } - trx_sys_cur_xid_seqno = xid_seqno; - } + if (xid->formatID != -1 + && mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_MAGIC_N_FLD) + == TRX_SYS_WSREP_XID_MAGIC_N) { + /* Check that seqno is monotonically increasing */ + unsigned char xid_uuid[16]; + long long xid_seqno = read_wsrep_xid_seqno(xid); + read_wsrep_xid_uuid(xid, xid_uuid); + + if (!memcmp(xid_uuid, trx_sys_cur_xid_uuid, 8)) { + ut_ad(xid_seqno > trx_sys_cur_xid_seqno); + trx_sys_cur_xid_seqno = xid_seqno; + } else { + memcpy(trx_sys_cur_xid_uuid, xid_uuid, 16); + } + + trx_sys_cur_xid_seqno = xid_seqno; + } #endif /* UNIV_DEBUG */ - ut_ad(xid && mtr); - ut_a(xid->formatID == -1 || wsrep_is_wsrep_xid(xid)); + ut_ad(xid && mtr); + ut_a(xid->formatID == -1 || wsrep_is_wsrep_xid((const XID *)xid)); - if (mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO - + TRX_SYS_WSREP_XID_MAGIC_N_FLD) - != TRX_SYS_WSREP_XID_MAGIC_N) { - mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO - + TRX_SYS_WSREP_XID_MAGIC_N_FLD, - TRX_SYS_WSREP_XID_MAGIC_N, - MLOG_4BYTES, mtr); - } - - mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO - + TRX_SYS_WSREP_XID_FORMAT, - (int)xid->formatID, - MLOG_4BYTES, mtr); - mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO - + TRX_SYS_WSREP_XID_GTRID_LEN, - (int)xid->gtrid_length, - MLOG_4BYTES, mtr); - mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO - + TRX_SYS_WSREP_XID_BQUAL_LEN, - (int)xid->bqual_length, - MLOG_4BYTES, mtr); - mlog_write_string(sys_header + TRX_SYS_WSREP_XID_INFO - + TRX_SYS_WSREP_XID_DATA, - (const unsigned char*) xid->data, - XIDDATASIZE, mtr); + if (mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_MAGIC_N_FLD) + != TRX_SYS_WSREP_XID_MAGIC_N) { + mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_MAGIC_N_FLD, + TRX_SYS_WSREP_XID_MAGIC_N, + MLOG_4BYTES, mtr); + } + mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_FORMAT, + (int)xid->formatID, + MLOG_4BYTES, mtr); + mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_GTRID_LEN, + (int)xid->gtrid_length, + MLOG_4BYTES, mtr); + mlog_write_ulint(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_BQUAL_LEN, + (int)xid->bqual_length, + MLOG_4BYTES, mtr); + mlog_write_string(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_DATA, + (const unsigned char*) xid->data, + XIDDATASIZE, mtr); } -void +/** Read WSREP XID from sys_header of TRX_SYS_PAGE_NO = 5. +@param[out] xid Transaction XID +@return true on success, false on error. */ +UNIV_INTERN +bool trx_sys_read_wsrep_checkpoint(XID* xid) -/*===================================*/ { - trx_sysf_t* sys_header; + trx_sysf_t* sys_header; mtr_t mtr; - ulint magic; + ulint magic; - ut_ad(xid); + ut_ad(xid); mtr_start(&mtr); sys_header = trx_sysf_get(&mtr); - if ((magic = mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO - + TRX_SYS_WSREP_XID_MAGIC_N_FLD)) - != TRX_SYS_WSREP_XID_MAGIC_N) { - memset(xid, 0, sizeof(*xid)); - xid->formatID = -1; - trx_sys_update_wsrep_checkpoint(xid, sys_header, &mtr); - mtr_commit(&mtr); - return; - } - - xid->formatID = (int)mach_read_from_4( - sys_header - + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_FORMAT); - xid->gtrid_length = (int)mach_read_from_4( - sys_header - + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_GTRID_LEN); - xid->bqual_length = (int)mach_read_from_4( - sys_header - + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_BQUAL_LEN); - ut_memcpy(xid->data, - sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_DATA, - XIDDATASIZE); + if ((magic = mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + + TRX_SYS_WSREP_XID_MAGIC_N_FLD)) + != TRX_SYS_WSREP_XID_MAGIC_N) { + memset(xid, 0, sizeof(*xid)); + xid->formatID = -1; + trx_sys_update_wsrep_checkpoint(xid, sys_header, &mtr); + mtr_commit(&mtr); + return false; + } + + xid->formatID = (int)mach_read_from_4( + sys_header + + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_FORMAT); + xid->gtrid_length = (int)mach_read_from_4( + sys_header + + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_GTRID_LEN); + xid->bqual_length = (int)mach_read_from_4( + sys_header + + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_BQUAL_LEN); + ut_memcpy(xid->data, + sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_DATA, + XIDDATASIZE); mtr_commit(&mtr); + return true; } #endif /* WITH_WSREP */ diff -Nru mariadb-10.1-10.1.25/storage/innobase/trx/trx0trx.cc mariadb-10.1-10.1.30/storage/innobase/trx/trx0trx.cc --- mariadb-10.1-10.1.25/storage/innobase/trx/trx0trx.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/trx/trx0trx.cc 2017-12-21 15:48:51.000000000 +0000 @@ -314,8 +314,9 @@ trx_t* trx) /*!< in, own: trx object */ { ut_a(trx_state_eq(trx, TRX_STATE_PREPARED) - || (trx_state_eq(trx, TRX_STATE_ACTIVE) - && trx->is_recovered + || (trx->is_recovered + && (trx_state_eq(trx, TRX_STATE_ACTIVE) + || trx_state_eq(trx, TRX_STATE_COMMITTED_IN_MEMORY)) && (srv_read_only_mode || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO))); ut_a(trx->magic_n == TRX_MAGIC_N); @@ -542,18 +543,9 @@ "InnoDB: Transaction " TRX_ID_FMT " was in the" " XA prepared state.\n", trx->id); - if (srv_force_recovery == 0) { - - trx->state = TRX_STATE_PREPARED; - trx_sys->n_prepared_trx++; - trx_sys->n_prepared_recovered_trx++; - } else { - fprintf(stderr, - "InnoDB: Since innodb_force_recovery" - " > 0, we will rollback it anyway.\n"); - - trx->state = TRX_STATE_ACTIVE; - } + trx->state = TRX_STATE_PREPARED; + trx_sys->n_prepared_trx++; + trx_sys->n_prepared_recovered_trx++; } else { trx->state = TRX_STATE_COMMITTED_IN_MEMORY; } @@ -611,22 +603,14 @@ "InnoDB: Transaction " TRX_ID_FMT " was in the XA prepared state.\n", trx->id); - if (srv_force_recovery == 0) { - if (trx_state_eq(trx, TRX_STATE_NOT_STARTED)) { - trx_sys->n_prepared_trx++; - trx_sys->n_prepared_recovered_trx++; - } else { - ut_ad(trx_state_eq(trx, TRX_STATE_PREPARED)); - } - - trx->state = TRX_STATE_PREPARED; + if (trx_state_eq(trx, TRX_STATE_NOT_STARTED)) { + trx_sys->n_prepared_trx++; + trx_sys->n_prepared_recovered_trx++; } else { - fprintf(stderr, - "InnoDB: Since innodb_force_recovery" - " > 0, we will rollback it anyway.\n"); - - trx->state = TRX_STATE_ACTIVE; + ut_ad(trx_state_eq(trx, TRX_STATE_PREPARED)); } + + trx->state = TRX_STATE_PREPARED; } else { trx->state = TRX_STATE_COMMITTED_IN_MEMORY; } @@ -2451,4 +2435,3 @@ ut_error; } - diff -Nru mariadb-10.1-10.1.25/storage/innobase/trx/trx0undo.cc mariadb-10.1-10.1.30/storage/innobase/trx/trx0undo.cc --- mariadb-10.1-10.1.25/storage/innobase/trx/trx0undo.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/trx/trx0undo.cc 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2014, 2017, MariaDB Corporation. All Rights Reserved. +Copyright (c) 2014, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -2015,11 +2015,21 @@ switch (trx->update_undo->state) { case TRX_UNDO_PREPARED: break; + case TRX_UNDO_CACHED: + case TRX_UNDO_TO_FREE: + case TRX_UNDO_TO_PURGE: + ut_ad(trx_state_eq(trx, + TRX_STATE_COMMITTED_IN_MEMORY)); + /* fall through */ case TRX_UNDO_ACTIVE: /* lock_trx_release_locks() assigns - trx->is_recovered=false */ + trx->is_recovered=false and + trx->state = TRX_STATE_COMMITTED_IN_MEMORY, + also for transactions that we faked + to TRX_STATE_PREPARED in trx_rollback_resurrected(). */ ut_a(srv_read_only_mode - || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO); + || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO + || srv_fast_shutdown); break; default: ut_error; @@ -2033,11 +2043,21 @@ switch (trx->insert_undo->state) { case TRX_UNDO_PREPARED: break; + case TRX_UNDO_CACHED: + case TRX_UNDO_TO_FREE: + case TRX_UNDO_TO_PURGE: + ut_ad(trx_state_eq(trx, + TRX_STATE_COMMITTED_IN_MEMORY)); + /* fall through */ case TRX_UNDO_ACTIVE: /* lock_trx_release_locks() assigns - trx->is_recovered=false */ + trx->is_recovered=false and + trx->state = TRX_STATE_COMMITTED_IN_MEMORY, + also for transactions that we faked + to TRX_STATE_PREPARED in trx_rollback_resurrected(). */ ut_a(srv_read_only_mode - || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO); + || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO + || srv_fast_shutdown); break; default: ut_error; diff -Nru mariadb-10.1-10.1.25/storage/innobase/ut/ut0dbg.cc mariadb-10.1-10.1.30/storage/innobase/ut/ut0dbg.cc --- mariadb-10.1-10.1.25/storage/innobase/ut/ut0dbg.cc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/innobase/ut/ut0dbg.cc 2017-12-21 15:48:51.000000000 +0000 @@ -63,7 +63,7 @@ fputs("InnoDB: We intentionally generate a memory trap.\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com.\n" + " to https://jira.mariadb.org/\n" "InnoDB: If you get repeated assertion failures" " or crashes, even\n" "InnoDB: immediately after the mysqld startup, there may be\n" diff -Nru mariadb-10.1-10.1.25/storage/maria/ma_check.c mariadb-10.1-10.1.30/storage/maria/ma_check.c --- mariadb-10.1-10.1.25/storage/maria/ma_check.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/maria/ma_check.c 2017-12-21 15:48:51.000000000 +0000 @@ -4260,6 +4260,8 @@ } */ DBUG_PRINT("info", ("is quick repair: %d", (int) rep_quick)); + if (!rep_quick) + my_b_clear(&new_data_cache); /* Initialize pthread structures before goto err. */ mysql_mutex_init(key_SORT_INFO_mutex, &sort_info.mutex, MY_MUTEX_INIT_FAST); @@ -4625,7 +4627,7 @@ already or they were not yet started (if the error happend before creating the threads). */ - if (!rep_quick) + if (!rep_quick && my_b_inited(&new_data_cache)) end_io_cache(&new_data_cache); if (!got_error) { diff -Nru mariadb-10.1-10.1.25/storage/maria/ma_create.c mariadb-10.1-10.1.30/storage/maria/ma_create.c --- mariadb-10.1-10.1.25/storage/maria/ma_create.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/maria/ma_create.c 2017-12-21 15:48:51.000000000 +0000 @@ -33,6 +33,27 @@ static int compare_columns(MARIA_COLUMNDEF **a, MARIA_COLUMNDEF **b); + +static ulonglong update_tot_length(ulonglong tot_length, ulonglong max_rows, uint length) +{ + ulonglong tot_length_part; + + if (tot_length == ULONGLONG_MAX) + return ULONGLONG_MAX; + + tot_length_part= (max_rows/(ulong) ((maria_block_size - + MAX_KEYPAGE_HEADER_SIZE - KEYPAGE_CHECKSUM_SIZE)/ + (length*2))); + if (tot_length_part >= ULONGLONG_MAX / maria_block_size) + return ULONGLONG_MAX; + + if (tot_length > ULONGLONG_MAX - tot_length_part * maria_block_size) + return ULONGLONG_MAX; + + return tot_length + tot_length_part * maria_block_size; +} + + /* Old options is used when recreating database, from maria_chk */ @@ -660,11 +681,8 @@ if (length > max_key_length) max_key_length= length; - tot_length+= ((max_rows/(ulong) (((uint) maria_block_size - - MAX_KEYPAGE_HEADER_SIZE - - KEYPAGE_CHECKSUM_SIZE)/ - (length*2))) * - maria_block_size); + + tot_length= update_tot_length(tot_length, max_rows, length); } unique_key_parts=0; @@ -673,11 +691,8 @@ uniquedef->key=keys+i; unique_key_parts+=uniquedef->keysegs; share.state.key_root[keys+i]= HA_OFFSET_ERROR; - tot_length+= (max_rows/(ulong) (((uint) maria_block_size - - MAX_KEYPAGE_HEADER_SIZE - - KEYPAGE_CHECKSUM_SIZE) / - ((MARIA_UNIQUE_HASH_LENGTH + pointer)*2)))* - (ulong) maria_block_size; + + tot_length= update_tot_length(tot_length, max_rows, MARIA_UNIQUE_HASH_LENGTH + pointer); } keys+=uniques; /* Each unique has 1 key */ key_segs+=uniques; /* Each unique has 1 key seg */ @@ -746,8 +761,7 @@ Get estimate for index file length (this may be wrong for FT keys) This is used for pointers to other key pages. */ - tmp= (tot_length + maria_block_size * keys * - MARIA_INDEX_BLOCK_MARGIN) / maria_block_size; + tmp= (tot_length / maria_block_size + keys * MARIA_INDEX_BLOCK_MARGIN); /* use maximum of key_file_length we calculated and key_file_length value we diff -Nru mariadb-10.1-10.1.25/storage/maria/ma_extra.c mariadb-10.1-10.1.30/storage/maria/ma_extra.c --- mariadb-10.1-10.1.25/storage/maria/ma_extra.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/maria/ma_extra.c 2017-12-21 15:48:51.000000000 +0000 @@ -314,7 +314,7 @@ share->state.open_count= 1; share->changed= 1; _ma_mark_file_changed_now(share); - /* Fall through */ + /* fall through */ case HA_EXTRA_PREPARE_FOR_RENAME: { my_bool do_flush= MY_TEST(function != HA_EXTRA_PREPARE_FOR_DROP); @@ -660,4 +660,3 @@ { return 0; } - diff -Nru mariadb-10.1-10.1.25/storage/maria/ma_key_recover.c mariadb-10.1-10.1.30/storage/maria/ma_key_recover.c --- mariadb-10.1-10.1.25/storage/maria/ma_key_recover.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/maria/ma_key_recover.c 2017-12-21 15:48:51.000000000 +0000 @@ -1169,6 +1169,7 @@ goto err; } page_length= page.size; + break; } case KEY_OP_NONE: default: diff -Nru mariadb-10.1-10.1.25/storage/maria/ma_loghandler.c mariadb-10.1-10.1.30/storage/maria/ma_loghandler.c --- mariadb-10.1-10.1.25/storage/maria/ma_loghandler.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/maria/ma_loghandler.c 2017-12-21 15:48:51.000000000 +0000 @@ -1263,6 +1263,7 @@ mysql_file_close(fd, MYF(MY_WME)))) { translog_stop_writing(); + mysql_mutex_unlock(&log_descriptor.file_header_lock); DBUG_RETURN(1); } } @@ -2277,10 +2278,11 @@ if (cmp_translog_addr(in_buffers, log_descriptor.in_buffers_only) > 0) { if (translog_status != TRANSLOG_OK) - DBUG_VOID_RETURN; + goto end; log_descriptor.in_buffers_only= in_buffers; DBUG_PRINT("info", ("set new in_buffers_only")); } +end: mysql_mutex_unlock(&log_descriptor.sent_to_disk_lock); DBUG_VOID_RETURN; } @@ -2725,7 +2727,7 @@ DBUG_PRINT("enter", ("offset: %u first chunk: %u", (uint) offset, (uint) chunk_offset)); - while (page[chunk_offset] != TRANSLOG_FILLER && chunk_offset < offset) + while (chunk_offset < offset && page[chunk_offset] != TRANSLOG_FILLER) { uint16 chunk_length; if ((chunk_length= @@ -6340,7 +6342,6 @@ short_trid, &parts, trn, hook_arg); break; case LOGRECTYPE_NOT_ALLOWED: - DBUG_ASSERT(0); default: DBUG_ASSERT(0); rc= 1; diff -Nru mariadb-10.1-10.1.25/storage/maria/ma_pagecache.c mariadb-10.1-10.1.30/storage/maria/ma_pagecache.c --- mariadb-10.1-10.1.25/storage/maria/ma_pagecache.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/maria/ma_pagecache.c 2017-12-21 15:48:51.000000000 +0000 @@ -3484,6 +3484,7 @@ lock_to_read[lock].unlock_lock, unlock_pin, FALSE)) { + pagecache_pthread_mutex_unlock(&pagecache->cache_lock); DBUG_ASSERT(0); return (uchar*) 0; } diff -Nru mariadb-10.1-10.1.25/storage/maria/ma_recovery.c mariadb-10.1-10.1.30/storage/maria/ma_recovery.c --- mariadb-10.1-10.1.25/storage/maria/ma_recovery.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/maria/ma_recovery.c 2017-12-21 15:48:51.000000000 +0000 @@ -887,9 +887,7 @@ if (create_database_if_not_exists(name)) goto end; fn_format(filename, name, "", MARIA_NAME_IEXT, - (MY_UNPACK_FILENAME | - (flags & HA_DONT_TOUCH_DATA) ? MY_RETURN_REAL_PATH : 0) | - MY_APPEND_EXT); + MY_UNPACK_FILENAME | MY_RETURN_REAL_PATH | MY_APPEND_EXT); linkname_ptr= NULL; create_flag= MY_DELETE_OLD; tprint(tracef, "Table '%s' creating as '%s'\n", name, filename); @@ -3060,7 +3058,7 @@ case LOGREC_REDO_INDEX: case LOGREC_REDO_INDEX_FREE_PAGE: index_page_redo_entry= 1; - /* Fall through */ + /* fall through*/ case LOGREC_REDO_INSERT_ROW_HEAD: case LOGREC_REDO_INSERT_ROW_TAIL: case LOGREC_REDO_PURGE_ROW_HEAD: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/appveyor.yml mariadb-10.1-10.1.30/storage/mroonga/appveyor.yml --- mariadb-10.1-10.1.25/storage/mroonga/appveyor.yml 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/appveyor.yml 2017-12-21 15:48:51.000000000 +0000 @@ -1,54 +1,63 @@ version: "{build}" clone_depth: 10 +environment: + global: + MARIADB_VERSION: 10.1.26 + matrix: + - CMAKE_GENERATOR_NAME: "Visual Studio 14 2015" + - CMAKE_GENERATOR_NAME: "Visual Studio 14 2015 Win64" + install: - cd .. - choco install -y curl 7zip.commandline - - curl -O http://mirror.jmu.edu/pub/mariadb/mariadb-10.0.20/source/mariadb-10.0.20.tar.gz - - 7z x mariadb-10.0.20.tar.gz - - 7z x mariadb-10.0.20.tar > nul - - cd mariadb-10.0.20 + - curl -O http://mirror.jmu.edu/pub/mariadb/mariadb-%MARIADB_VERSION%/source/mariadb-%MARIADB_VERSION%.tar.gz + - 7z x mariadb-%MARIADB_VERSION%.tar.gz + - 7z x mariadb-%MARIADB_VERSION%.tar > nul + - cd mariadb-%MARIADB_VERSION% - rmdir /S /Q storage\mroonga\ - move ..\mroonga storage\mroonga - - git clone --quiet --depth 1 https://github.com/groonga/groonga.git ..\groonga - - cd ..\groonga - - git submodule update --init - - cd ..\mariadb-10.0.20 + - git clone --quiet --depth 1 --recursive https://github.com/groonga/groonga.git ..\groonga - rmdir /S /Q ..\groonga\test\ + - cd ..\groonga\vendor + - c:\Ruby22-x64\bin\ruby -v download_lz4.rb + - c:\Ruby22-x64\bin\ruby -v download_mecab.rb + - cd ..\..\mariadb-%MARIADB_VERSION% - mkdir storage\mroonga\vendor - move ..\groonga storage\mroonga\vendor\groonga - git clone --quiet --depth 1 https://github.com/groonga/groonga-normalizer-mysql.git storage\mroonga\vendor\groonga\vendor\plugins\groonga-normalizer-mysql build_script: - "echo # > win\\packaging\\CMakeLists.txt" - - cmake . -G "Visual Studio 12 Win64" + - cmake . -G "%CMAKE_GENERATOR_NAME%" -DCMAKE_BUILD_TYPE=Debug - -DWITHOUT_ARCHIVE=ON - -DWITHOUT_BLACKHOLE=ON - -DWITHOUT_CASSANDRA=ON - -DWITHOUT_CONNECT=ON - -DWITHOUT_CSV=ON - -DWITHOUT_EXAMPLE=ON - -DWITHOUT_FEDERATED=ON - -DWITHOUT_FEDERATEDX=ON - -DWITHOUT_HEAP=ON - -DWITHOUT_INNOBASE=ON - -DWITHOUT_MYISAM=ON - -DWITHOUT_MYISAMMRG=ON - -DWITHOUT_OQGRAPH=ON - -DWITHOUT_PERFSCHEMA=OFF - -DWITHOUT_SEQUENCE=ON - -DWITHOUT_SPHINX=ON - -DWITHOUT_SPIDER=ON - -DWITHOUT_TEST_SQL_DISCOVERY=ON - -DWITHOUT_TOKUDB=ON - -DWITHOUT_XTRADB=ON + -DPLUGIN_ARCHIVE=NO + -DPLUGIN_BLACKHOLE=NO + -DPLUGIN_CASSANDRA=NO + -DPLUGIN_CONNECT=NO + -DPLUGIN_CSV=NO + -DPLUGIN_EXAMPLE=NO + -DPLUGIN_FEDERATED=NO + -DPLUGIN_FEDERATEDX=NO + -DPLUGIN_HEAP=NO + -DPLUGIN_INNOBASE=NO + -DPLUGIN_MYISAM=NO + -DPLUGIN_MYISAMMRG=NO + -DPLUGIN_OQGRAPH=NO + -DPLUGIN_PERFSCHEMA=NO + -DPLUGIN_SEQUENCE=NO + -DPLUGIN_SPHINX=NO + -DPLUGIN_SPIDER=NO + -DPLUGIN_TEST_SQL_DISCOVERY=NO + -DPLUGIN_TOKUDB=NO + -DPLUGIN_XTRADB=NO -DWITH_UNIT_TESTS=OFF + -DWITH_MARIABACKUP=OFF + -DGRN_WITH_BUNDLED_MECAB=ON - cmake --build . --config Debug notifications: - provider: Email to: - groonga-mysql-commit@lists.sourceforge.jp - - kou@clear-code.com on_build_status_changed: true test: off diff -Nru mariadb-10.1-10.1.25/storage/mroonga/autogen.sh mariadb-10.1-10.1.30/storage/mroonga/autogen.sh --- mariadb-10.1-10.1.25/storage/mroonga/autogen.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/autogen.sh 2017-12-21 15:48:51.000000000 +0000 @@ -1,116 +1,11 @@ #!/bin/sh -warn() { - echo " WARNING: $@" 1>&2 -} - -# init - -LIBTOOLIZE=libtoolize -ACLOCAL=aclocal -AUTOCONF=autoconf -AUTOHEADER=autoheader -AUTOMAKE=automake - -case `uname -s` in -Darwin) - LIBTOOLIZE=glibtoolize - ;; +case $(uname -s) in FreeBSD) - ACLOCAL_ARGS="$ACLOCAL_ARGS -I /usr/local/share/aclocal/" - ;; + ACLOCAL_ARGS="$ACLOCAL_ARGS -I /usr/local/share/aclocal/" + ;; esac +mkdir -p m4 -# libtoolize -echo "Searching libtoolize..." -if [ `which $LIBTOOLIZE` ] ; then - echo " FOUND: libtoolize -> $LIBTOOLIZE" -else - warn "Cannot Found libtoolize... input libtool command" - read LIBTOOLIZE - LIBTOOLIZE=`which $LIBTOOLIZE` - if [ `which $LIBTOOLIZE` ] ; then - echo " SET: libtoolize -> $LIBTOOLIZE" - else - warn "$LIBTOOLIZE: Command not found." - exit 1; - fi -fi - -# aclocal -echo "Searching aclocal..." -if [ `which $ACLOCAL` ] ; then - echo " FOUND: aclocal -> $ACLOCAL" -else - warn "Cannot Found aclocal... input aclocal command" - read ACLOCAL - ACLOCAL=`which $ACLOCAL` - if [ `which $ACLOCAL` ] ; then - echo " SET: aclocal -> $ACLOCAL" - else - warn "$ACLOCAL: Command not found." - exit 1; - fi -fi - -# automake -echo "Searching automake..." -if [ `which $AUTOMAKE` ] ; then - echo " FOUND: automake -> $AUTOMAKE" -else - warn "Cannot Found automake... input automake command" - read AUTOMAKE - ACLOCAL=`which $AUTOMAKE` - if [ `which $AUTOMAKE` ] ; then - echo " SET: automake -> $AUTOMAKE" - else - warn "$AUTOMAKE: Command not found." - exit 1; - fi -fi - -# autoheader -echo "Searching autoheader..." -if [ `which $AUTOHEADER` ] ; then - echo " FOUND: autoheader -> $AUTOHEADER" -else - warn "Cannot Found autoheader... input autoheader command" - read AUTOHEADER - ACLOCAL=`which $AUTOHEADER` - if [ `which $AUTOHEADER` ] ; then - echo " SET: autoheader -> $AUTOHEADER" - else - warn "$AUTOHEADER: Command not found." - exit 1; - fi -fi - -# autoconf -echo "Searching autoconf..." -if [ `which $AUTOCONF` ] ; then - echo " FOUND: autoconf -> $AUTOCONF" -else - warn "Cannot Found autoconf... input autoconf command" - read AUTOCONF - ACLOCAL=`which $AUTOCONF` - if [ `which $AUTOCONF` ] ; then - echo " SET: autoconf -> $AUTOCONF" - else - warn "$AUTOCONF: Command not found." - exit 1; - fi -fi - -set -e - -echo "Running libtoolize ..." -$LIBTOOLIZE --force --copy -echo "Running aclocal ..." -$ACLOCAL ${ACLOCAL_ARGS} -echo "Running autoheader..." -$AUTOHEADER -echo "Running automake ..." -$AUTOMAKE --add-missing --copy -echo "Running autoconf ..." -$AUTOCONF +${AUTORECONF:-autoreconf} --force --install "$@" diff -Nru mariadb-10.1-10.1.25/storage/mroonga/build/makefiles/sphinx-build.am mariadb-10.1-10.1.30/storage/mroonga/build/makefiles/sphinx-build.am --- mariadb-10.1-10.1.25/storage/mroonga/build/makefiles/sphinx-build.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/build/makefiles/sphinx-build.am 2017-12-21 15:48:51.000000000 +0000 @@ -10,10 +10,8 @@ PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = $(PAPEROPT_$(PAPER)) -E $(SPHINXOPTS) $(SOURCE_DIR) -SPHINX_DIR = $(abs_top_builddir)/doc/sphinx SPHINX_BUILD_COMMAND = \ DOCUMENT_VERSION="$(DOCUMENT_VERSION)" \ DOCUMENT_VERSION_FULL="$(DOCUMENT_VERSION_FULL)" \ LOCALE="$(LOCALE)" \ - PYTHONPATH="$(SPHINX_DIR):$$PYTHONPATH" \ $(SPHINX_BUILD) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/CMakeLists.txt mariadb-10.1-10.1.30/storage/mroonga/CMakeLists.txt --- mariadb-10.1-10.1.25/storage/mroonga/CMakeLists.txt 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/CMakeLists.txt 2017-12-21 15:48:51.000000000 +0000 @@ -15,7 +15,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA cmake_minimum_required(VERSION 2.6) project(mroonga) @@ -51,6 +51,14 @@ endif() endif() +if(MRN_BUNDLED) + if(WITHOUT_MROONGA OR + WITHOUT_MROONGA_STORAGE_ENGINE OR + "${PLUGIN_MROONGA}" STREQUAL "NO") + return() + endif() +endif() + set(MRN_BUNDLED_GROONGA_RELATIVE_DIR "vendor/groonga") set(MRN_BUNDLED_GROONGA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${MRN_BUNDLED_GROONGA_RELATIVE_DIR}") @@ -79,6 +87,58 @@ file(READ ${MRN_SOURCE_DIR}/version_in_hex MRN_VERSION_IN_HEX) file(READ ${MRN_SOURCE_DIR}/plugin_version MRN_PLUGIN_VERSION) +if(MRN_GROONGA_BUNDLED) + option(MRN_GROONGA_EMBED + "Embed libgroonga" + ON) + if(MRN_GROONGA_EMBED) + set(GRN_EMBED ON) + endif() + + set(MRN_BUNDLED_GROONGA_NORMALIZER_MYSQL_DIR + "${MRN_BUNDLED_GROONGA_DIR}/vendor/plugins/groonga-normalizer-mysql") + option(MRN_GROONGA_NORMALIZER_MYSQL_EMBED + "Embed groonga-normalizer-mysql Groonga plugin" + ON) + if(EXISTS ${MRN_BUNDLED_GROONGA_NORMALIZER_MYSQL_DIR}) + set(GROONGA_NORMALIZER_MYSQL_FOUND ON) + else() + set(GROONGA_NORMALIZER_MYSQL_FOUND OFF) + set(MRN_GROONGA_NORMALIZER_MYSQL_EMBED OFF) + endif() + if(MRN_GROONGA_NORMALIZER_MYSQL_EMBED) + set(GROONGA_NORMALIZER_MYSQL_EMBED ON) + endif() + + file(READ "${MRN_BUNDLED_GROONGA_DIR}/bundled_lz4_version" + MRN_BUNDLED_LZ4_VERSION) + string(STRIP + "${MRN_BUNDLED_LZ4_VERSION}" + MRN_BUNDLED_LZ4_VERSION) + set(MRN_BUNDLED_LZ4_DIR + "${MRN_BUNDLED_GROONGA_DIR}/vendor/lz4-${MRN_BUNDLED_LZ4_VERSION}") + if(EXISTS ${MRN_BUNDLED_LZ4_DIR}) + set(GRN_WITH_BUNDLED_LZ4 ON) + set(GRN_WITH_LZ4 "yes") + else() + set(GRN_WITH_LZ4 "no") + endif() + + add_subdirectory("${MRN_BUNDLED_GROONGA_RELATIVE_DIR}") +else() + set(MRN_GROONGA_EMBED OFF) + + file(READ ${MRN_SOURCE_DIR}/required_groonga_version REQUIRED_GROONGA_VERSION) + string(STRIP "${REQUIRED_GROONGA_VERSION}" REQUIRED_GROONGA_VERSION) + + file(READ + ${MRN_SOURCE_DIR}/required_groonga_normalizer_mysql_version + REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION) + string(STRIP + "${REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION}" + REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION) +endif() + set(MRN_PACKAGE_STRING "${PROJECT_NAME} ${MRN_VERSION}") include(CheckCCompilerFlag) @@ -107,18 +167,7 @@ string(REGEX REPLACE "([^;]+)" "${MRN_RELATIVE_DIR_PREFIX}udf/\\1" MRN_UDF_SOURCES "${MRN_UDF_SOURCES}") -set(MRN_ALL_SOURCES - ${MRN_SOURCES} - ${MRN_UDF_SOURCES} - ${LIBMRN_NO_MYSQL_SOURCES} - ${LIBMRN_NEED_MYSQL_SOURCES}) - if(MRN_BUNDLED) - mysql_add_plugin(mroonga ${MRN_ALL_SOURCES} STORAGE_ENGINE MODULE_ONLY) - if(NOT TARGET mroonga) - return() - endif() - set(MYSQL_SOURCE_DIR ${CMAKE_SOURCE_DIR}) set(MYSQL_BUILD_DIR ${MYSQL_SOURCE_DIR}) set(MYSQL_CONFIG ${CMAKE_SOURCE_DIR}/scripts/mysql_config) @@ -134,44 +183,6 @@ endif() find_path(MYSQL_CONFIG "${MYSQL_CONFIG}") -if(MRN_GROONGA_BUNDLED) - option(MRN_GROONGA_EMBED - "Embed libgroonga" - ON) - if(MRN_GROONGA_EMBED) - set(GRN_EMBED ON) - endif() - - set(MRN_BUNDLED_GROONGA_NORMALIZER_MYSQL_DIR - "${MRN_BUNDLED_GROONGA_DIR}/vendor/plugins/groonga-normalizer-mysql") - option(MRN_GROONGA_NORMALIZER_MYSQL_EMBED - "Embed groonga-normalizer-mysql Groonga plugin" - ON) - if(EXISTS ${MRN_BUNDLED_GROONGA_NORMALIZER_MYSQL_DIR}) - set(GROONGA_NORMALIZER_MYSQL_FOUND ON) - else() - set(GROONGA_NORMALIZER_MYSQL_FOUND OFF) - set(MRN_GROONGA_NORMALIZER_MYSQL_EMBED OFF) - endif() - if(MRN_GROONGA_NORMALIZER_MYSQL_EMBED) - set(GROONGA_NORMALIZER_MYSQL_EMBED ON) - endif() - - add_subdirectory("${MRN_BUNDLED_GROONGA_RELATIVE_DIR}") -else() - set(MRN_GROONGA_EMBED OFF) - - file(READ ${MRN_SOURCE_DIR}/required_groonga_version REQUIRED_GROONGA_VERSION) - string(STRIP "${REQUIRED_GROONGA_VERSION}" REQUIRED_GROONGA_VERSION) - - file(READ - ${MRN_SOURCE_DIR}/required_groonga_normalizer_mysql_version - REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION) - string(STRIP - "${REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION}" - REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION) -endif() - if(EXISTS "${MYSQL_SOURCE_DIR}/storage/maria") set(MYSQL_VARIANT "MariaDB") else() @@ -194,6 +205,7 @@ set(MYSQL_LIBBINLOGEVENTS_EXPORT_DIR "${MYSQL_SOURCE_DIR}/libbinlogevents/export") set(MYSQL_LIBBINLOGEVENTS_INCLUDE_DIR + "${MYSQL_BUILD_DIR}/libbinlogevents/include" "${MYSQL_SOURCE_DIR}/libbinlogevents/include") else() set(MYSQL_LIBBINLOGEVENTS_EXPORT_DIR) @@ -270,6 +282,7 @@ set(MRN_LIBRARY_DIRS ${MRN_LIBRARY_DIRS} ${GROONGA_LIBRARY_DIRS}) + set(MRN_LIBRARIES ${GROONGA_LIBRARIES}) endif() include_directories( @@ -291,8 +304,17 @@ ${MRN_LIBRARY_DIRS} ${MYSQL_LIBRARY_DIRS}) +set(MRN_ALL_SOURCES + ${MRN_SOURCES} + ${MRN_UDF_SOURCES} + ${LIBMRN_NO_MYSQL_SOURCES} + ${LIBMRN_NEED_MYSQL_SOURCES}) + if(MRN_BUNDLED) - target_link_libraries(mroonga ${MRN_LIBRARIES}) + mysql_add_plugin(mroonga + ${MRN_ALL_SOURCES} + STORAGE_ENGINE MODULE_ONLY + LINK_LIBRARIES ${MRN_LIBRARIES}) else() add_library(mroonga MODULE ${MRN_ALL_SOURCES}) @@ -337,9 +359,14 @@ MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-strict-aliasing") MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-deprecated") MY_CHECK_AND_SET_COMPILER_FLAG("-fno-implicit-templates") - MY_CHECK_AND_SET_COMPILER_FLAG("-fno-exceptions") - MY_CHECK_AND_SET_COMPILER_FLAG("-fno-rtti") + if(("${MYSQL_VARIANT}" STREQUAL "MariaDB") OR + ("${MYSQL_VARIANT}" STREQUAL "MySQL" AND + ${MYSQL_VERSION} VERSION_LESS "5.7.0")) + MY_CHECK_AND_SET_COMPILER_FLAG("-fno-exceptions") + MY_CHECK_AND_SET_COMPILER_FLAG("-fno-rtti") + endif() MY_CHECK_AND_SET_COMPILER_FLAG("-felide-constructors") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-implicit-fallthrough") endif() set_source_files_properties(${MRN_SOURCES} PROPERTIES COMPILE_FLAGS "${MYSQL_CFLAGS} ${MRN_CXX_COMPILE_FLAGS}") @@ -358,10 +385,20 @@ install(TARGETS mroonga DESTINATION "${MYSQL_PLUGIN_DIR}") endif() +option(MRN_BUILD_FOR_EMBEDDED_SERVER + "Whether to build Mroonga for embedded server or not. You can't use Mroonga built for embedded server with non embedded server." + OFF) +if(MRN_BUILD_FOR_EMBEDDED_SERVER) + set_property(TARGET mroonga APPEND PROPERTY + COMPILE_DEFINITIONS "EMBEDDED_LIBRARY") +endif() + if(GROONGA_NORMALIZER_MYSQL_FOUND) - add_definitions("-DWITH_GROONGA_NORMALIZER_MYSQL=1") + set_property(TARGET mroonga APPEND PROPERTY + COMPILE_DEFINITIONS "WITH_GROONGA_NORMALIZER_MYSQL=1") if(MRN_GROONGA_NORMALIZER_MYSQL_EMBED) - add_definitions("-DMRN_GROONGA_NORMALIZER_MYSQL_EMBEDDED") + set_property(TARGET mroonga APPEND PROPERTY + COMPILE_DEFINITIONS "MRN_GROONGA_NORMALIZER_MYSQL_EMBEDDED") else() set_property(TARGET mroonga APPEND PROPERTY COMPILE_DEFINITIONS "GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME=\"normalizers/mysql\"") @@ -369,7 +406,8 @@ endif() if(MRN_GROONGA_EMBED) - add_definitions("-DMRN_GROONGA_EMBEDDED") + set_property(TARGET mroonga APPEND PROPERTY + COMPILE_DEFINITIONS "MRN_GROONGA_EMBEDDED") endif() set(MRN_DEFAULT_PARSER "" CACHE STRING @@ -415,6 +453,8 @@ set(MRN_DATA_DIR "share/${PROJECT_NAME}") endif() install(FILES + "${PROJECT_SOURCE_DIR}/AUTHORS" + "${PROJECT_SOURCE_DIR}/COPYING" "${PROJECT_BINARY_DIR}/data/install.sql" "${PROJECT_SOURCE_DIR}/data/uninstall.sql" DESTINATION "${MRN_DATA_DIR}/") diff -Nru mariadb-10.1-10.1.25/storage/mroonga/config.sh.in mariadb-10.1-10.1.30/storage/mroonga/config.sh.in --- mariadb-10.1-10.1.25/storage/mroonga/config.sh.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/config.sh.in 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA MYSQL_SOURCE_DIR="@MYSQL_SOURCE_DIR@" MYSQL_BUILD_DIR="@MYSQL_BUILD_DIR@" diff -Nru mariadb-10.1-10.1.25/storage/mroonga/configure.ac mariadb-10.1-10.1.30/storage/mroonga/configure.ac --- mariadb-10.1-10.1.25/storage/mroonga/configure.ac 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/configure.ac 2017-12-21 15:48:51.000000000 +0000 @@ -8,6 +8,7 @@ m4_define([mrn_plugin_version], m4_include(plugin_version)) AC_INIT([mroonga], [mrn_version], [groonga-talk@lists.sourceforge.net]) +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([tar-pax foreign subdir-objects]) @@ -173,18 +174,27 @@ MYSQL_INCLUDES="" MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_build_dir/include" MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir/sql" + if test -d "$ac_mysql_source_dir/sql/auth"; then + MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir/sql/auth" + fi MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir/include" if test -d "$ac_mysql_source_dir/extra/rapidjson"; then mysql_rapidjson_include_dir="$ac_mysql_source_dir/extra/rapidjson/include" MYSQL_INCLUDES="$MYSQL_INCLUDES -I$mysql_rapidjson_include_dir" fi - if test -d "$ac_mysql_source_dir/pcre"; then - mysql_regex_include_dir="$ac_mysql_source_dir/pcre" + if test -d "$ac_mysql_source_dir/extra/regex"; then + mysql_regex_include_dir="$ac_mysql_source_dir/extra/regex" + MYSQL_INCLUDES="$MYSQL_INCLUDES -I$mysql_regex_include_dir" else - mysql_regex_include_dir="$ac_mysql_source_dir/regex" + if test -d "$ac_mysql_source_dir/pcre"; then + mysql_regex_include_dir="$ac_mysql_source_dir/pcre" + else + mysql_regex_include_dir="$ac_mysql_source_dir/regex" + fi + MYSQL_INCLUDES="$MYSQL_INCLUDES -I$mysql_regex_include_dir" fi - MYSQL_INCLUDES="$MYSQL_INCLUDES -I$mysql_regex_include_dir" if test -d "$ac_mysql_source_dir/libbinlogevents"; then + MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_build_dir/libbinlogevents/include" MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir/libbinlogevents/export" MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir/libbinlogevents/include" fi @@ -199,7 +209,7 @@ MYSQL_CXXFLAGS="-fno-implicit-templates -felide-constructors" case "$MYSQL_MAJOR_MINOR_VERSION" in - 5.7) + 5.7|8.*) : ;; *) @@ -381,6 +391,13 @@ [RSYNC_PATH="packages@packages.groonga.org:public"]) AC_SUBST(RSYNC_PATH) +AC_ARG_WITH(launchpad-ppa, + [AS_HELP_STRING([--with-launchpad-ppa=PPA], + [specify Launchpad Personal Package Archive. [default=groonga-ppa]])], + [LAUNCHPAD_PPA="$withval"], + [LAUNCHPAD_PPA="groonga-ppa"]) +AC_SUBST(LAUNCHPAD_PPA) + AC_ARG_WITH(launchpad-uploader-pgp-key, [AS_HELP_STRING([--with-launchpad-uploader-pgp-key=KEY], [specify PGP key UID to upload Groonga packages to Launchpad.])], @@ -429,7 +446,7 @@ AC_PATH_PROG(SPHINX_BUILD, sphinx-build, []) if test -n "$SPHINX_BUILD"; then sphinx_build_version=`"$SPHINX_BUILD" --version` - if ! echo "$sphinx_build_version" | grep -q ' 1\.[[23]]'; then + if ! echo "$sphinx_build_version" | grep -q ' 1\.[[2-6]]'; then AC_MSG_ERROR([ sphinx-build is old: $sphinx_build_version Sphinx 1.2 or later is required.]) @@ -509,12 +526,19 @@ mrn_version.h mysql-test/mroonga/storage/information_schema/r/plugins.result mysql-test/mroonga/storage/variable/r/version.result - packages/debian/control + packages/debian-5.5/control + packages/debian-5.6/control + packages/debian-5.7/control + packages/debian-mariadb-10.0/control packages/apt/env.sh packages/rpm/centos/mysql55-mroonga.spec packages/rpm/centos/mysql56-community-mroonga.spec + packages/rpm/centos/mysql57-community-mroonga.spec packages/rpm/centos/mariadb-mroonga.spec + packages/rpm/centos/mariadb-10.1-mroonga.spec + packages/rpm/centos/mariadb-10.2-mroonga.spec packages/rpm/centos/percona-server-56-mroonga.spec + packages/rpm/centos/percona-server-57-mroonga.spec packages/yum/env.sh data/install.sql ]) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/data/install.sql.in mariadb-10.1-10.1.30/storage/mroonga/data/install.sql.in --- mariadb-10.1-10.1.25/storage/mroonga/data/install.sql.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/data/install.sql.in 2017-12-21 15:48:51.000000000 +0000 @@ -17,3 +17,19 @@ DROP FUNCTION IF EXISTS mroonga_escape; CREATE FUNCTION mroonga_escape RETURNS STRING SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@'; + +DROP FUNCTION IF EXISTS mroonga_snippet_html; +CREATE FUNCTION mroonga_snippet_html RETURNS STRING + SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@'; + +DROP FUNCTION IF EXISTS mroonga_normalize; +CREATE FUNCTION mroonga_normalize RETURNS STRING + SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@'; + +DROP FUNCTION IF EXISTS mroonga_highlight_html; +CREATE FUNCTION mroonga_highlight_html RETURNS STRING + SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@'; + +DROP FUNCTION IF EXISTS mroonga_query_expand; +CREATE FUNCTION mroonga_query_expand RETURNS STRING + SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@'; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/data/uninstall.sql mariadb-10.1-10.1.30/storage/mroonga/data/uninstall.sql --- mariadb-10.1-10.1.25/storage/mroonga/data/uninstall.sql 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/data/uninstall.sql 2017-12-21 15:48:51.000000000 +0000 @@ -2,6 +2,10 @@ DROP FUNCTION IF EXISTS mroonga_snippet; DROP FUNCTION IF EXISTS mroonga_command; DROP FUNCTION IF EXISTS mroonga_escape; +DROP FUNCTION IF EXISTS mroonga_snippet_html; +DROP FUNCTION IF EXISTS mroonga_normalize; +DROP FUNCTION IF EXISTS mroonga_highlight_html; +DROP FUNCTION IF EXISTS mroonga_query_expand; UNINSTALL PLUGIN Mroonga; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/ha_mroonga.cpp mariadb-10.1-10.1.30/storage/mroonga/ha_mroonga.cpp --- mariadb-10.1-10.1.25/storage/mroonga/ha_mroonga.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/ha_mroonga.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -2,7 +2,7 @@ /* Copyright(C) 2010 Tetsuro IKEDA Copyright(C) 2010-2013 Kentoku SHIBA - Copyright(C) 2011-2015 Kouhei Sutou + Copyright(C) 2011-2017 Kouhei Sutou Copyright(C) 2013 Kenji Maruyama This library is free software; you can redistribute it and/or @@ -66,14 +66,9 @@ # include #endif -#define MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(type, variable_name, variable_size) \ - type *variable_name = \ - (type *)mrn_my_malloc(sizeof(type) * (variable_size), MYF(MY_WME)) -#define MRN_FREE_VARIABLE_LENGTH_ARRAYS(variable_name) \ - my_free(variable_name) - #include "mrn_err.h" #include "mrn_table.hpp" +#include #include "ha_mroonga.hpp" #include #include @@ -91,9 +86,17 @@ #include #include #include +#include #include #include #include +#include +#include +#include +#include +#include +#include +#include #ifdef MRN_SUPPORT_FOREIGN_KEYS # include @@ -143,10 +146,18 @@ # define MRN_NEED_M_LOCK_TYPE_CHECK_FOR_WRAPPER_EXTERNAL_LOCK #endif -#if MYSQL_VERSION_ID >= 50603 && !defined(MRN_MARIADB_P) -# define MRN_ORDER_IS_ASC(order) ((order)->direction == ORDER::ORDER_ASC) +#ifdef MRN_MARIADB_P +# if MYSQL_VERSION_ID >= 100200 +# define MRN_ORDER_IS_ASC(order) ((order)->direction == ORDER::ORDER_ASC) +# else +# define MRN_ORDER_IS_ASC(order) ((order)->asc) +# endif #else -# define MRN_ORDER_IS_ASC(order) ((order)->asc) +# if MYSQL_VERSION_ID >= 50603 +# define MRN_ORDER_IS_ASC(order) ((order)->direction == ORDER::ORDER_ASC) +# else +# define MRN_ORDER_IS_ASC(order) ((order)->asc) +# endif #endif #define MRN_STRINGIFY(macro_or_string) MRN_STRINGIFY_ARG(macro_or_string) @@ -200,22 +211,6 @@ #endif #if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) -# define MRN_SELECT_LEX_GET_WHERE_COND(select_lex) \ - ((select_lex)->where_cond()) -# define MRN_SELECT_LEX_GET_HAVING_COND(select_lex) \ - ((select_lex)->having_cond()) -# define MRN_SELECT_LEX_GET_ACTIVE_OPTIONS(select_lex) \ - ((select_lex)->active_options()) -#else -# define MRN_SELECT_LEX_GET_WHERE_COND(select_lex) \ - ((select_lex)->where) -# define MRN_SELECT_LEX_GET_HAVING_COND(select_lex) \ - ((select_lex)->having) -# define MRN_SELECT_LEX_GET_ACTIVE_OPTIONS(select_lex) \ - ((select_lex)->options) -#endif - -#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) # define MRN_TABLE_LIST_GET_DERIVED(table_list) NULL #else # define MRN_TABLE_LIST_GET_DERIVED(table_list) (table_list)->derived @@ -249,10 +244,6 @@ extern "C" { #endif -/* groonga's internal functions */ -int grn_atoi(const char *nptr, const char *end, const char **rest); -uint grn_atoui(const char *nptr, const char *end, const char **rest); - #ifdef HAVE_PSI_INTERFACE # ifdef WIN32 # ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE @@ -266,18 +257,41 @@ PSI_mutex_key mrn_share_mutex_key; PSI_mutex_key mrn_long_term_share_auto_inc_mutex_key; static PSI_mutex_key mrn_log_mutex_key; +static PSI_mutex_key mrn_query_log_mutex_key; static PSI_mutex_key mrn_db_manager_mutex_key; +static PSI_mutex_key mrn_context_pool_mutex_key; +static PSI_mutex_key mrn_operations_mutex_key; + +# if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) +# define MRN_MUTEXT_INFO_ENTRY(key, name, flags, volatility) \ + {key, name, flags, volatility} +# else +# define MRN_MUTEXT_INFO_ENTRY(key, name, flags, volatility) \ + {key, name, flags} +# endif static PSI_mutex_info mrn_mutexes[] = { - {&mrn_open_tables_mutex_key, "open_tables", PSI_FLAG_GLOBAL}, - {&mrn_long_term_share_mutex_key, "long_term_share", PSI_FLAG_GLOBAL}, - {&mrn_allocated_thds_mutex_key, "allocated_thds", PSI_FLAG_GLOBAL}, - {&mrn_share_mutex_key, "share", 0}, - {&mrn_long_term_share_auto_inc_mutex_key, - "long_term_share::auto_inc", 0}, - {&mrn_log_mutex_key, "log", PSI_FLAG_GLOBAL}, - {&mrn_db_manager_mutex_key, "DatabaseManager", PSI_FLAG_GLOBAL} + MRN_MUTEXT_INFO_ENTRY(&mrn_open_tables_mutex_key, + "mrn::open_tables", PSI_FLAG_GLOBAL, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_long_term_share_mutex_key, + "mrn::long_term_share", PSI_FLAG_GLOBAL, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_allocated_thds_mutex_key, + "mrn::allocated_thds", PSI_FLAG_GLOBAL, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_share_mutex_key, + "mrn::share", 0, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_long_term_share_auto_inc_mutex_key, + "mrn::long_term_share::auto_inc", 0, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_log_mutex_key, + "mrn::log", PSI_FLAG_GLOBAL, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_query_log_mutex_key, + "mrn::query_log", PSI_FLAG_GLOBAL, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_db_manager_mutex_key, + "mrn::DatabaseManager", PSI_FLAG_GLOBAL, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_context_pool_mutex_key, + "mrn::ContextPool", PSI_FLAG_GLOBAL, 0), + MRN_MUTEXT_INFO_ENTRY(&mrn_operations_mutex_key, + "mrn::Operations", PSI_FLAG_GLOBAL, 0) }; #endif @@ -294,10 +308,14 @@ /* internal variables */ static grn_ctx mrn_ctx; static mysql_mutex_t mrn_log_mutex; +static mysql_mutex_t mrn_query_log_mutex; static grn_obj *mrn_db; static grn_ctx mrn_db_manager_ctx; static mysql_mutex_t mrn_db_manager_mutex; mrn::DatabaseManager *mrn_db_manager = NULL; +static mysql_mutex_t mrn_context_pool_mutex; +mrn::ContextPool *mrn_context_pool = NULL; +static mysql_mutex_t mrn_operations_mutex; #ifdef WIN32 @@ -540,6 +558,26 @@ inspected = "HA_EXTRA_PREPARE_FOR_FORCED_CLOSE"; break; #endif +#ifdef MRN_HAVE_HA_EXTRA_SKIP_SERIALIZABLE_DD_VIEW + case HA_EXTRA_SKIP_SERIALIZABLE_DD_VIEW: + inspected = "HA_EXTRA_SKIP_SERIALIZABLE_DD_VIEW"; + break; +#endif +#ifdef MRN_HAVE_HA_EXTRA_BEGIN_ALTER_COPY + case HA_EXTRA_BEGIN_ALTER_COPY: + inspected = "HA_EXTRA_BEGIN_ALTER_COPY"; + break; +#endif +#ifdef MRN_HAVE_HA_EXTRA_END_ALTER_COPY + case HA_EXTRA_END_ALTER_COPY: + inspected = "HA_EXTRA_END_ALTER_COPY"; + break; +#endif +#ifdef MRN_HAVE_HA_EXTRA_NO_AUTOINC_LOCKING + case HA_EXTRA_NO_AUTOINC_LOCKING: + inspected = "HA_EXTRA_NO_AUTOINC_LOCKING"; + break; +#endif } return inspected; } @@ -576,6 +614,7 @@ static bool mrn_log_file_opened = false; static grn_log_level mrn_log_level_default = GRN_LOG_DEFAULT_LEVEL; static ulong mrn_log_level = mrn_log_level_default; +static char *mrn_query_log_file_path = NULL; char *mrn_default_tokenizer = NULL; char *mrn_default_wrapper_engine = NULL; @@ -583,16 +622,10 @@ static char *mrn_libgroonga_version = const_cast(grn_get_version()); static char *mrn_version = const_cast(MRN_VERSION); static char *mrn_vector_column_delimiter = NULL; -static my_bool mrn_libgroonga_support_zlib = FALSE; -static my_bool mrn_libgroonga_support_lz4 = FALSE; -typedef enum { - MRN_BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT = (1 << 0), - MRN_BOOLEAN_MODE_SYNTAX_FLAG_SYNTAX_QUERY = (1 << 1), - MRN_BOOLEAN_MODE_SYNTAX_FLAG_SYNTAX_SCRIPT = (1 << 2), - MRN_BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_COLUMN = (1 << 3), - MRN_BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_UPDATE = (1 << 4), - MRN_BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_LEADING_NOT = (1 << 5) -} mrn_boolean_mode_syntax_flag; +static mrn_bool mrn_libgroonga_support_zlib = false; +static mrn_bool mrn_libgroonga_support_lz4 = false; +static mrn_bool mrn_libgroonga_support_zstd = false; +static mrn_bool mrn_enable_operations_recording = true; #ifdef MRN_SUPPORT_THDVAR_SET static const char *mrn_boolean_mode_sytnax_flag_names[] = { "DEFAULT", @@ -611,28 +644,13 @@ }; #endif #ifdef MRN_GROONGA_EMBEDDED -static my_bool mrn_libgroonga_embedded = TRUE; +static mrn_bool mrn_libgroonga_embedded = true; #else -static my_bool mrn_libgroonga_embedded = FALSE; +static mrn_bool mrn_libgroonga_embedded = false; #endif -typedef enum { - MRN_ACTION_ON_ERROR_ERROR, - MRN_ACTION_ON_ERROR_ERROR_AND_LOG, - MRN_ACTION_ON_ERROR_IGNORE, - MRN_ACTION_ON_ERROR_IGNORE_AND_LOG, -} mrn_action_on_error; - -static const char *mrn_action_on_error_names[] = { - "ERROR", - "ERROR_AND_LOG", - "IGNORE", - "IGNORE_AND_LOG", - NullS, -}; - -static mrn_action_on_error mrn_action_on_fulltext_query_error_default = - MRN_ACTION_ON_ERROR_ERROR_AND_LOG; +static mrn::variables::ActionOnError mrn_action_on_fulltext_query_error_default = + mrn::variables::ACTION_ON_ERROR_ERROR_AND_LOG; static void mrn_logger_log(grn_ctx *ctx, grn_log_level level, const char *timestamp, const char *title, @@ -749,20 +767,19 @@ const char *new_value = *((const char **)save); char **old_value_ptr = (char **)var_ptr; - grn_ctx ctx; - grn_ctx_init(&ctx, 0); - mrn_change_encoding(&ctx, system_charset_info); + grn_ctx *ctx = &mrn_ctx; + mrn_change_encoding(ctx, system_charset_info); const char *new_log_file_name; new_log_file_name = *old_value_ptr; if (strcmp(*old_value_ptr, new_value) == 0) { - GRN_LOG(&ctx, GRN_LOG_NOTICE, + GRN_LOG(ctx, GRN_LOG_NOTICE, "log file isn't changed " "because the requested path isn't different: <%s>", new_value); } else { - GRN_LOG(&ctx, GRN_LOG_NOTICE, + GRN_LOG(ctx, GRN_LOG_NOTICE, "log file is changed: <%s> -> <%s>", *old_value_ptr, new_value); @@ -783,18 +800,18 @@ } if (log_file_open_errno == 0) { - GRN_LOG(&ctx, GRN_LOG_NOTICE, + GRN_LOG(ctx, GRN_LOG_NOTICE, "log file is changed: <%s> -> <%s>", *old_value_ptr, new_value); new_log_file_name = new_value; } else { if (mrn_log_file) { - GRN_LOG(&ctx, GRN_LOG_ERROR, + GRN_LOG(ctx, GRN_LOG_ERROR, "log file isn't changed " "because the requested path can't be opened: <%s>: <%s>", new_value, strerror(log_file_open_errno)); } else { - GRN_LOG(&ctx, GRN_LOG_ERROR, + GRN_LOG(ctx, GRN_LOG_ERROR, "log file can't be opened: <%s>: <%s>", new_value, strerror(log_file_open_errno)); } @@ -809,8 +826,6 @@ *old_value_ptr = mrn_my_strdup(new_log_file_name, MYF(MY_WME)); #endif - grn_ctx_fin(&ctx); - DBUG_VOID_RETURN; } @@ -821,23 +836,100 @@ mrn_log_file_update, MRN_LOG_FILE_PATH); +static void mrn_query_log_file_update(THD *thd, struct st_mysql_sys_var *var, + void *var_ptr, const void *save) +{ + MRN_DBUG_ENTER_FUNCTION(); + const char *new_value = *((const char **)save); + char **old_value_ptr = (char **)var_ptr; + const char *normalized_new_value = NULL; + + grn_ctx *ctx = &mrn_ctx; + mrn_change_encoding(ctx, system_charset_info); + + const char *new_query_log_file_name; + new_query_log_file_name = *old_value_ptr; + + bool need_update = false; + if (!*old_value_ptr) { + if (new_value && new_value[0] != '\0') { + GRN_LOG(ctx, GRN_LOG_NOTICE, + "query log is enabled: <%s>", + new_value); + need_update = true; + normalized_new_value = new_value; + } else { + GRN_LOG(ctx, GRN_LOG_NOTICE, + "query log file is still disabled"); + } + } else { + if (!new_value || new_value[0] == '\0') { + GRN_LOG(ctx, GRN_LOG_NOTICE, + "query log file is disabled: <%s>", + *old_value_ptr); + need_update = true; + normalized_new_value = NULL; + } else if (strcmp(*old_value_ptr, new_value) == 0) { + GRN_LOG(ctx, GRN_LOG_NOTICE, + "query log file isn't changed " + "because the requested path isn't different: <%s>", + new_value); + } else { + GRN_LOG(ctx, GRN_LOG_NOTICE, + "query log file is changed: <%s> -> <%s>", + *old_value_ptr, new_value); + need_update = true; + normalized_new_value = new_value; + } + } + + if (need_update) { + { // TODO: Remove me when Groonga 7.0.5 is released. + mrn::Lock lock(&mrn_query_log_mutex); + grn_default_query_logger_set_path(normalized_new_value); + } + grn_query_logger_reopen(ctx); + new_query_log_file_name = normalized_new_value; + } + +#ifdef MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR + char *old_query_log_file_name = *old_value_ptr; +#endif + if (new_query_log_file_name) { + *old_value_ptr = mrn_my_strdup(new_query_log_file_name, MYF(0)); + } else { + *old_value_ptr = NULL; + } +#ifdef MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR + my_free(old_query_log_file_name); +#endif + + DBUG_VOID_RETURN; +} + +static MYSQL_SYSVAR_STR(query_log_file, mrn_query_log_file_path, + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, + "query log file for " MRN_PLUGIN_NAME_STRING, + NULL, + mrn_query_log_file_update, + NULL); + static void mrn_default_tokenizer_update(THD *thd, struct st_mysql_sys_var *var, void *var_ptr, const void *save) { MRN_DBUG_ENTER_FUNCTION(); const char *new_value = *((const char **)save); char **old_value_ptr = (char **)var_ptr; - grn_ctx ctx; + grn_ctx *ctx = &mrn_ctx; - grn_ctx_init(&ctx, 0); - mrn_change_encoding(&ctx, system_charset_info); + mrn_change_encoding(ctx, system_charset_info); if (strcmp(*old_value_ptr, new_value) == 0) { - GRN_LOG(&ctx, GRN_LOG_NOTICE, + GRN_LOG(ctx, GRN_LOG_NOTICE, "default tokenizer for fulltext index isn't changed " "because the requested default tokenizer isn't different: <%s>", new_value); } else { - GRN_LOG(&ctx, GRN_LOG_NOTICE, + GRN_LOG(ctx, GRN_LOG_NOTICE, "default tokenizer for fulltext index is changed: <%s> -> <%s>", *old_value_ptr, new_value); } @@ -849,8 +941,6 @@ *old_value_ptr = (char *)new_value; #endif - grn_ctx_fin(&ctx); - DBUG_VOID_RETURN; } @@ -956,6 +1046,14 @@ NULL, NULL); +static const char *mrn_action_on_error_names[] = { + "ERROR", + "ERROR_AND_LOG", + "IGNORE", + "IGNORE_AND_LOG", + NullS, +}; + static TYPELIB mrn_action_on_error_typelib = { array_elements(mrn_action_on_error_names) - 1, @@ -1010,7 +1108,7 @@ NULL, MRN_VERSION); -static my_bool grn_check_zlib_support() +static mrn_bool grn_check_zlib_support() { bool is_zlib_support = false; grn_obj grn_support_p; @@ -1023,7 +1121,14 @@ return is_zlib_support; } -static my_bool grn_check_lz4_support() +static MYSQL_SYSVAR_BOOL(libgroonga_support_zlib, mrn_libgroonga_support_zlib, + PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, + "The status of libgroonga supports zlib", + NULL, + NULL, + grn_check_zlib_support()); + +static mrn_bool grn_check_lz4_support() { bool is_lz4_support = false; grn_obj grn_support_p; @@ -1036,19 +1141,51 @@ return is_lz4_support; } -static MYSQL_SYSVAR_BOOL(libgroonga_support_zlib, mrn_libgroonga_support_zlib, +static MYSQL_SYSVAR_BOOL(libgroonga_support_lz4, mrn_libgroonga_support_lz4, PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, - "The status of libgroonga supports zlib", + "The status of libgroonga supports LZ4", NULL, NULL, - grn_check_zlib_support()); + grn_check_lz4_support()); -static MYSQL_SYSVAR_BOOL(libgroonga_support_lz4, mrn_libgroonga_support_lz4, +static mrn_bool grn_check_zstd_support() +{ + bool is_zstd_support = false; + grn_obj grn_support_p; + + GRN_BOOL_INIT(&grn_support_p, 0); + grn_obj_get_info(&mrn_ctx, NULL, GRN_INFO_SUPPORT_ZSTD, &grn_support_p); + is_zstd_support = (GRN_BOOL_VALUE(&grn_support_p)); + grn_obj_unlink(&mrn_ctx, &grn_support_p); + + return is_zstd_support; +} + +static MYSQL_SYSVAR_BOOL(libgroonga_support_zstd, mrn_libgroonga_support_zstd, PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, - "The status of libgroonga supports LZ4", + "The status of libgroonga supports Zstandard", NULL, NULL, - grn_check_lz4_support()); + grn_check_zstd_support()); + +static void mrn_enable_operations_recording_update(THD *thd, struct st_mysql_sys_var *var, + void *var_ptr, const void *save) +{ + MRN_DBUG_ENTER_FUNCTION(); + const bool new_value = *static_cast(save); + bool *old_value_ptr = static_cast(var_ptr); + + *old_value_ptr = new_value; + + DBUG_VOID_RETURN; +} + +static MYSQL_SYSVAR_BOOL(enable_operations_recording, mrn_enable_operations_recording, + PLUGIN_VAR_RQCMDARG, + "Whether recording operations for recovery is enabled or not", + NULL, + mrn_enable_operations_recording_update, + true); #ifdef MRN_SUPPORT_THDVAR_SET static MYSQL_THDVAR_SET(boolean_mode_syntax_flags, @@ -1060,7 +1197,7 @@ "ALLOW_COLUMN, ALLOW_UPDATE and ALLOW_LEADING_NOT", NULL, NULL, - MRN_BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT, + mrn::variables::BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT, &mrn_boolean_mode_syntax_flags_typelib); #endif @@ -1102,11 +1239,14 @@ MYSQL_SYSVAR(vector_column_delimiter), MYSQL_SYSVAR(libgroonga_support_zlib), MYSQL_SYSVAR(libgroonga_support_lz4), + MYSQL_SYSVAR(libgroonga_support_zstd), #ifdef MRN_SUPPORT_THDVAR_SET MYSQL_SYSVAR(boolean_mode_syntax_flags), #endif MYSQL_SYSVAR(max_n_records_for_estimate), MYSQL_SYSVAR(libgroonga_embedded), + MYSQL_SYSVAR(query_log_file), + MYSQL_SYSVAR(enable_operations_recording), NULL }; @@ -1188,6 +1328,9 @@ "Statistics for " MRN_PLUGIN_NAME_STRING, PLUGIN_LICENSE_GPL, i_s_mrn_stats_init, +#ifdef MRN_ST_MYSQL_PLUGIN_HAVE_CHECK_UNINSTALL + NULL, +#endif i_s_mrn_stats_deinit, MRN_VERSION_IN_HEX, NULL, @@ -1196,7 +1339,12 @@ }; /* End of mroonga information schema implementations */ -static handler *mrn_handler_create(handlerton *hton, TABLE_SHARE *share, MEM_ROOT *root) +static handler *mrn_handler_create(handlerton *hton, + TABLE_SHARE *share, +#ifdef MRN_HANDLERTON_CREATE_HAVE_PARTITIONED + bool partitioned, +#endif + MEM_ROOT *root) { MRN_DBUG_ENTER_FUNCTION(); handler *new_handler = new (root) ha_mroonga(hton, share); @@ -1407,6 +1555,11 @@ case MYSQL_TYPE_GEOMETRY: // case-by-case type = GRN_DB_WGS84_GEO_POINT; // 8bytes break; +#ifdef MRN_HAVE_MYSQL_TYPE_JSON + case MYSQL_TYPE_JSON: + type = GRN_DB_TEXT; + break; +#endif } return type; } @@ -1457,6 +1610,17 @@ "COMPRESS_LZ4"); } flag_names += 12; + } else if (rest_length >= 13 && !memcmp(flag_names, "COMPRESS_ZSTD", 13)) { + if (mrn_libgroonga_support_zstd) { + *column_flags |= GRN_OBJ_COMPRESS_ZSTD; + found = true; + } else { + push_warning_printf(thd, MRN_SEVERITY_WARNING, + ER_MRN_UNSUPPORTED_COLUMN_FLAG_NUM, + ER_MRN_UNSUPPORTED_COLUMN_FLAG_STR, + "COMPRESS_ZSTD"); + } + flag_names += 13; } else { char invalid_flag_name[MRN_MESSAGE_BUFFER_SIZE]; snprintf(invalid_flag_name, MRN_MESSAGE_BUFFER_SIZE, @@ -1477,7 +1641,7 @@ grn_ctx *ctx, const char *flag_names, uint flag_names_length, - grn_obj_flags *index_column_flags) + grn_column_flags *index_column_flags) { const char *flag_names_end = flag_names + flag_names_length; bool found = false; @@ -1504,6 +1668,14 @@ *index_column_flags |= GRN_OBJ_WITH_WEIGHT; flag_names += 11; found = true; + } else if (rest_length >= 11 && !memcmp(flag_names, "INDEX_SMALL", 11)) { + *index_column_flags |= GRN_OBJ_INDEX_SMALL; + flag_names += 11; + found = true; + } else if (rest_length >= 12 && !memcmp(flag_names, "INDEX_MEDIUM", 12)) { + *index_column_flags |= GRN_OBJ_INDEX_MEDIUM; + flag_names += 12; + found = true; } else { char invalid_flag_name[MRN_MESSAGE_BUFFER_SIZE]; snprintf(invalid_flag_name, MRN_MESSAGE_BUFFER_SIZE, @@ -1615,8 +1787,7 @@ { // init handlerton grn_ctx *ctx = NULL; - handlerton *hton; - hton = (handlerton *)p; + handlerton *hton = static_cast(p); hton->state = SHOW_OPTION_YES; hton->create = mrn_handler_create; hton->flags = HTON_NO_FLAGS; @@ -1671,7 +1842,7 @@ # endif #endif -#ifdef HAVE_PSI_INTERFACE +#ifdef MRN_HAVE_PSI_SERVER if (PSI_server) { const char *category = "mroonga"; int n_mutexes = array_elements(mrn_mutexes); @@ -1679,6 +1850,8 @@ } #endif + grn_default_query_logger_set_path(mrn_query_log_file_path); + if (grn_init() != GRN_SUCCESS) { goto err_grn_init; } @@ -1705,6 +1878,11 @@ MY_MUTEX_INIT_FAST) != 0) { goto err_log_mutex_init; } + if (mysql_mutex_init(mrn_query_log_mutex_key, + &mrn_query_log_mutex, + MY_MUTEX_INIT_FAST) != 0) { + goto err_query_log_mutex_init; + } mrn_logger.max_level = static_cast(mrn_log_level); grn_logger_set(ctx, &mrn_logger); @@ -1737,13 +1915,31 @@ if (!mrn_db_manager->init()) { goto err_db_manager_init; } + + if (mysql_mutex_init(mrn_context_pool_mutex_key, + &mrn_context_pool_mutex, + MY_MUTEX_INIT_FAST) != 0) { + GRN_LOG(ctx, GRN_LOG_ERROR, + "failed to initialize mutex for context pool"); + goto error_context_pool_mutex_init; + } + mrn_context_pool = new mrn::ContextPool(&mrn_context_pool_mutex); + + if (mysql_mutex_init(mrn_operations_mutex_key, + &mrn_operations_mutex, + MY_MUTEX_INIT_FAST) != 0) { + GRN_LOG(ctx, GRN_LOG_ERROR, + "failed to initialize mutex for operations"); + goto error_operations_mutex_init; + } + if ((mysql_mutex_init(mrn_allocated_thds_mutex_key, &mrn_allocated_thds_mutex, MY_MUTEX_INIT_FAST) != 0)) { goto err_allocated_thds_mutex_init; } - if (my_hash_init(&mrn_allocated_thds, system_charset_info, 32, 0, 0, - mrn_allocated_thds_get_key, 0, 0)) { + if (mrn_my_hash_init(&mrn_allocated_thds, system_charset_info, 32, 0, 0, + mrn_allocated_thds_get_key, 0, 0)) { goto error_allocated_thds_hash_init; } if ((mysql_mutex_init(mrn_open_tables_mutex_key, @@ -1751,8 +1947,8 @@ MY_MUTEX_INIT_FAST) != 0)) { goto err_allocated_open_tables_mutex_init; } - if (my_hash_init(&mrn_open_tables, system_charset_info, 32, 0, 0, - mrn_open_tables_get_key, 0, 0)) { + if (mrn_my_hash_init(&mrn_open_tables, system_charset_info, 32, 0, 0, + mrn_open_tables_get_key, 0, 0)) { goto error_allocated_open_tables_hash_init; } if ((mysql_mutex_init(mrn_long_term_share_mutex_key, @@ -1760,8 +1956,8 @@ MY_MUTEX_INIT_FAST) != 0)) { goto error_allocated_long_term_share_mutex_init; } - if (my_hash_init(&mrn_long_term_share, system_charset_info, 32, 0, 0, - mrn_long_term_share_get_key, 0, 0)) { + if (mrn_my_hash_init(&mrn_long_term_share, system_charset_info, 32, 0, 0, + mrn_long_term_share_get_key, 0, 0)) { goto error_allocated_long_term_share_hash_init; } @@ -1782,6 +1978,11 @@ error_allocated_thds_hash_init: mysql_mutex_destroy(&mrn_allocated_thds_mutex); err_allocated_thds_mutex_init: + mysql_mutex_destroy(&mrn_operations_mutex); +error_operations_mutex_init: + delete mrn_context_pool; + mysql_mutex_destroy(&mrn_context_pool_mutex); +error_context_pool_mutex_init: err_db_manager_init: delete mrn_db_manager; mysql_mutex_destroy(&mrn_db_manager_mutex); @@ -1794,6 +1995,8 @@ mrn_log_file_opened = false; } err_log_file_open: + mysql_mutex_destroy(&mrn_query_log_mutex); +err_query_log_mutex_init: mysql_mutex_destroy(&mrn_log_mutex); err_log_mutex_init: err_mrn_change_encoding: @@ -1838,6 +2041,9 @@ mysql_mutex_destroy(&mrn_open_tables_mutex); my_hash_free(&mrn_allocated_thds); mysql_mutex_destroy(&mrn_allocated_thds_mutex); + mysql_mutex_destroy(&mrn_operations_mutex); + delete mrn_context_pool; + mysql_mutex_destroy(&mrn_context_pool_mutex); delete mrn_db_manager; mysql_mutex_destroy(&mrn_db_manager_mutex); grn_ctx_fin(&mrn_db_manager_ctx); @@ -1850,6 +2056,7 @@ fclose(mrn_log_file); mrn_log_file_opened = false; } + mysql_mutex_destroy(&mrn_query_log_mutex); mysql_mutex_destroy(&mrn_log_mutex); return 0; @@ -2336,7 +2543,8 @@ ignoring_no_key_columns(false), replacing_(false), written_by_row_based_binlog(0), - current_ft_item(NULL) + current_ft_item(NULL), + operations_(NULL) { MRN_DBUG_ENTER_METHOD(); grn_ctx_init(ctx, 0); @@ -2355,6 +2563,9 @@ ha_mroonga::~ha_mroonga() { MRN_DBUG_ENTER_METHOD(); + + delete operations_; + if (analyzed_for_create) { if (wrap_handler_for_create) { delete wrap_handler_for_create; @@ -2620,6 +2831,12 @@ #ifdef HA_CAN_FULLTEXT_EXT table_flags |= HA_CAN_FULLTEXT_EXT; #endif +#ifdef HA_GENERATED_COLUMNS + table_flags |= HA_GENERATED_COLUMNS; +#endif +#ifdef HA_CAN_VIRTUAL_COLUMNS + table_flags |= HA_CAN_VIRTUAL_COLUMNS; +#endif DBUG_RETURN(table_flags); } @@ -2649,6 +2866,12 @@ #ifdef HA_CAN_FULLTEXT_EXT flags |= HA_CAN_FULLTEXT_EXT; #endif +#ifdef HA_GENERATED_COLUMNS + flags |= HA_GENERATED_COLUMNS; +#endif +#ifdef HA_CAN_VIRTUAL_COLUMNS + flags |= HA_CAN_VIRTUAL_COLUMNS; +#endif DBUG_RETURN(flags); } @@ -2713,7 +2936,7 @@ part = 0; } Field *field = &(key->key_part[part].field[0]); - if (field && should_normalize(field)) { + if (field && (have_custom_normalizer(key) || should_normalize(field))) { need_normalize_p = true; } if (!need_normalize_p) { @@ -2737,7 +2960,7 @@ DBUG_RETURN(HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR); } if (mrn_is_geo_key(key)) { - DBUG_RETURN(HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR); + DBUG_RETURN(HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR | HA_READ_RANGE); } int error = 0; @@ -2854,9 +3077,11 @@ DBUG_RETURN(ER_REQUIRES_PRIMARY_KEY); } - mrn::PathMapper mapper(name); - error = wrapper_create_index(name, table, info, tmp_share, - mapper.table_name()); + error = ensure_database_open(name); + if (error) + DBUG_RETURN(error); + + error = wrapper_create_index(name, table, tmp_share); if (error) DBUG_RETURN(error); @@ -2904,6 +3129,7 @@ delete hnd; if (error) { + mrn::PathMapper mapper(name); generic_delete_table(name, mapper.table_name()); } @@ -2967,7 +3193,7 @@ GRN_OBJ_PERSISTENT; grn_obj *index_table; - grn_obj_flags index_column_flags = GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT; + grn_column_flags index_column_flags = GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT; if (!find_index_column_flags(key_info, &index_column_flags)) { index_column_flags |= GRN_OBJ_WITH_POSITION; @@ -3014,7 +3240,8 @@ grn_obj_unlink(ctx, &token_filters); } - if (should_normalize(&key_info->key_part->field[0])) { + if (have_custom_normalizer(key_info) || + should_normalize(&key_info->key_part->field[0])) { grn_info_type info_type = GRN_INFO_NORMALIZER; grn_obj *normalizer = find_normalizer(key_info); if (normalizer) { @@ -3103,22 +3330,18 @@ } int ha_mroonga::wrapper_create_index(const char *name, TABLE *table, - HA_CREATE_INFO *info, - MRN_SHARE *tmp_share, - const char *grn_table_name) + MRN_SHARE *tmp_share) { MRN_DBUG_ENTER_METHOD(); int error = 0; - error = ensure_database_open(name); - if (error) - DBUG_RETURN(error); - error = mrn_change_encoding(ctx, system_charset_info); if (error) DBUG_RETURN(error); grn_obj *grn_index_table; + mrn::PathMapper mapper(name); + const char *grn_table_name = mapper.table_name(); char *grn_table_path = NULL; // we don't specify path grn_obj *pkey_type = grn_ctx_at(ctx, GRN_DB_SHORT_TEXT); grn_obj *pkey_value_type = NULL; // we don't use this @@ -3307,10 +3530,9 @@ uint n_columns = table->s->fields; for (uint i = 0; i < n_columns; i++) { Field *field = table->s->field[i]; - const char *column_name = field->field_name; - int column_name_size = strlen(column_name); + mrn::ColumnName column_name(field->field_name); - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + if (strcmp(MRN_COLUMN_NAME_ID, column_name.mysql_name()) == 0) { continue; } @@ -3325,6 +3547,12 @@ } #endif +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + continue; + } +#endif + grn_obj_flags col_flags = GRN_OBJ_PERSISTENT; if (!find_column_flags(field, tmp_share, i, &col_flags)) { col_flags |= GRN_OBJ_COLUMN_SCALAR; @@ -3341,12 +3569,13 @@ } char *col_path = NULL; // we don't specify path - grn_column_create(ctx, table_obj, column_name, column_name_size, + grn_column_create(ctx, table_obj, + column_name.c_str(), column_name.length(), col_path, col_flags, col_type); if (ctx->rc) { - grn_obj_remove(ctx, table_obj); error = ER_CANT_CREATE_TABLE; my_message(error, ctx->errbuf, MYF(0)); + grn_obj_remove(ctx, table_obj); DBUG_RETURN(error); } } @@ -3484,7 +3713,7 @@ if (!grn_table_ref) { error = ER_CANT_CREATE_TABLE; char err_msg[MRN_BUFFER_SIZE]; - sprintf(err_msg, "refference table [%s.%s] is not mroonga table", + sprintf(err_msg, "reference table [%s.%s] is not mroonga table", table->s->db.str, ref_table_name.str); my_message(error, err_msg, MYF(0)); DBUG_RETURN(false); @@ -3503,7 +3732,7 @@ grn_obj_unlink(ctx, grn_table_ref); error = ER_CANT_CREATE_TABLE; char err_msg[MRN_BUFFER_SIZE]; - sprintf(err_msg, "refference table [%s.%s] is not found", + sprintf(err_msg, "reference table [%s.%s] is not found", table->s->db.str, ref_table_name.str); my_message(error, err_msg, MYF(0)); DBUG_RETURN(false); @@ -3516,7 +3745,7 @@ grn_obj_unlink(ctx, grn_table_ref); error = ER_CANT_CREATE_TABLE; char err_msg[MRN_BUFFER_SIZE]; - sprintf(err_msg, "refference table [%s.%s] has no primary key", + sprintf(err_msg, "reference table [%s.%s] has no primary key", table->s->db.str, ref_table_name.str); my_message(error, err_msg, MYF(0)); DBUG_RETURN(false); @@ -3531,7 +3760,7 @@ error = ER_CANT_CREATE_TABLE; char err_msg[MRN_BUFFER_SIZE]; sprintf(err_msg, - "refference table [%s.%s] primary key is multiple column", + "reference table [%s.%s] primary key is multiple column", table->s->db.str, ref_table_name.str); my_message(error, err_msg, MYF(0)); DBUG_RETURN(false); @@ -3545,7 +3774,7 @@ error = ER_CANT_CREATE_TABLE; char err_msg[MRN_BUFFER_SIZE]; sprintf(err_msg, - "refference column [%s.%s.%s] is not used for primary key", + "reference column [%s.%s.%s] is not used for primary key", table->s->db.str, ref_table_name.str, ref_field_name.str); my_message(error, err_msg, MYF(0)); DBUG_RETURN(false); @@ -3721,11 +3950,14 @@ grn_obj *normalizer = NULL; Field *field = &(key_info->key_part->field[0]); if (key_info->flags & HA_FULLTEXT) { - if (should_normalize(field)) { + if (have_custom_normalizer(key_info) || + should_normalize(field)) { normalizer = find_normalizer(key_info); } } else if (key_alg != HA_KEY_ALG_HASH) { - if (!is_multiple_column_index && should_normalize(field)) { + if (!is_multiple_column_index && + (have_custom_normalizer(key_info) || + should_normalize(field))) { normalizer = find_normalizer(key_info); } } @@ -3748,19 +3980,48 @@ { MRN_DBUG_ENTER_METHOD(); int error = 0; - grn_obj *index_table, *index_column; - const char *column_name = NULL; - int column_name_size = 0; + grn_obj *index_column; bool is_multiple_column_index = KEY_N_KEY_PARTS(key_info) > 1; if (!is_multiple_column_index) { Field *field = key_info->key_part[0].field; - column_name = field->field_name; - column_name_size = strlen(column_name); - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + if (strcmp(MRN_COLUMN_NAME_ID, field->field_name) == 0) { // skipping _id virtual column DBUG_RETURN(0); } + + if (is_foreign_key_field(table->s->table_name.str, + field->field_name)) { + DBUG_RETURN(0); + } + +#ifdef HA_CAN_VIRTUAL_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: storage: failed to create index: " + ER_MRN_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN_STR, + field->field_name); + error = ER_MRN_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN_NUM; + my_message(error, error_message, MYF(0)); + DBUG_RETURN(error); + } + } else { + int j, n_key_parts = KEY_N_KEY_PARTS(key_info); + for (j = 0; j < n_key_parts; j++) { + Field *field = key_info->key_part[j].field; + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: storage: failed to create index: " + ER_MRN_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN_STR, + field->field_name); + error = ER_MRN_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN_NUM; + my_message(error, error_message, MYF(0)); + DBUG_RETURN(error); + } + } +#endif } error = mrn_change_encoding(ctx, system_charset_info); @@ -3773,16 +4034,21 @@ if (error) DBUG_RETURN(error); - grn_obj_flags index_column_flags = GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT; + grn_obj *index_table = index_tables[i]; + + grn_column_flags index_column_flags = GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT; if (!find_index_column_flags(key_info, &index_column_flags)) { - index_column_flags |= GRN_OBJ_WITH_POSITION; - if (is_multiple_column_index) { + grn_obj *tokenizer = grn_obj_get_info(ctx, index_table, + GRN_INFO_DEFAULT_TOKENIZER, NULL); + if (tokenizer) { + index_column_flags |= GRN_OBJ_WITH_POSITION; + } + if (is_multiple_column_index && (key_info->flags & HA_FULLTEXT)) { index_column_flags |= GRN_OBJ_WITH_SECTION; } } - index_table = index_tables[i]; const char *index_column_name; if (tmp_share->index_table && tmp_share->index_table[i]) { index_column_name = key_info->name; @@ -3813,10 +4079,11 @@ int j, n_key_parts = KEY_N_KEY_PARTS(key_info); for (j = 0; j < n_key_parts; j++) { Field *field = key_info->key_part[j].field; - const char *column_name = field->field_name; - int column_name_size = strlen(column_name); - grn_obj *source_column = grn_obj_column(ctx, grn_table, - column_name, column_name_size); + mrn::ColumnName column_name(field->field_name); + grn_obj *source_column = grn_obj_column(ctx, + grn_table, + column_name.c_str(), + column_name.length()); grn_id source_id = grn_obj_id(ctx, source_column); GRN_UINT32_PUT(ctx, &source_ids, source_id); grn_obj_unlink(ctx, source_column); @@ -3826,8 +4093,13 @@ grn_obj_unlink(ctx, &source_ids); } } else { + Field *field = key_info->key_part[0].field; + mrn::ColumnName column_name(field->field_name); grn_obj *column; - column = grn_obj_column(ctx, grn_table, column_name, column_name_size); + column = grn_obj_column(ctx, + grn_table, + column_name.c_str(), + column_name.length()); if (column) { grn_obj source_ids; grn_id source_id = grn_obj_id(ctx, column); @@ -3887,18 +4159,31 @@ DBUG_RETURN(error); } -int ha_mroonga::ensure_database_open(const char *name) +int ha_mroonga::ensure_database_open(const char *name, mrn::Database **db) { int error; MRN_DBUG_ENTER_METHOD(); - grn_obj *db; - error = mrn_db_manager->open(name, &db); + if (db) + *db = NULL; + + mrn::Database *local_db; + error = mrn_db_manager->open(name, &local_db); if (error) DBUG_RETURN(error); - grn_ctx_use(ctx, db); + if (db) + *db = local_db; + grn_ctx_use(ctx, local_db->get()); + + delete operations_; + operations_ = new mrn::Operations(ctx); + if (mrn_enable_operations_recording) { + operations_->enable_recording(); + } else { + operations_->disable_recording(); + } DBUG_RETURN(error); } @@ -3913,6 +4198,9 @@ if (error) DBUG_RETURN(error); + delete operations_; + operations_ = NULL; + mrn_db_manager->close(name); mrn::PathMapper mapper(name); @@ -3922,7 +4210,14 @@ } -int ha_mroonga::create(const char *name, TABLE *table, HA_CREATE_INFO *info) +int ha_mroonga::create(const char *name, + TABLE *table, + HA_CREATE_INFO *info +#ifdef MRN_HANDLER_CREATE_HAVE_TABLE_DEFINITION + , + dd::Table *table_def +#endif + ) { int error = 0; MRN_SHARE *tmp_share; @@ -3954,26 +4249,17 @@ DBUG_RETURN(error); } -int ha_mroonga::wrapper_open(const char *name, int mode, uint test_if_locked) +int ha_mroonga::wrapper_open(const char *name, int mode, uint open_options) { int error = 0; MRN_DBUG_ENTER_METHOD(); - if (thd_sql_command(ha_thd()) == SQLCOM_REPAIR) { - error = ensure_database_remove(name); - if (error) - DBUG_RETURN(error); - error = ensure_database_open(name); - if (error) - DBUG_RETURN(error); - grn_table = NULL; - grn_index_tables = NULL; - grn_index_columns = NULL; - } else { - error = ensure_database_open(name); - if (error) - DBUG_RETURN(error); + mrn::Database *db = NULL; + error = ensure_database_open(name, &db); + if (error) + DBUG_RETURN(error); + if (!(open_options & HA_OPEN_FOR_REPAIR)) { error = open_table(name); if (error) DBUG_RETURN(error); @@ -4012,7 +4298,7 @@ #ifdef MRN_HANDLER_HAVE_SET_HA_SHARE_REF wrap_handler->set_ha_share_ref(&table->s->ha_share); #endif - error = wrap_handler->ha_open(table, name, mode, test_if_locked); + error = wrap_handler->ha_open(table, name, mode, open_options); } else { if (!(wrap_handler = parent_for_clone->wrap_handler->clone(name, mem_root_for_clone))) @@ -4039,6 +4325,39 @@ pk_keypart_map = make_prev_keypart_map( KEY_N_KEY_PARTS(&(table->key_info[table_share->primary_key]))); + if (!error) { + if (open_options & HA_OPEN_FOR_REPAIR) { + // TODO: How to check whether is DISABLE KEYS used or not? + error = wrapper_recreate_indexes(ha_thd()); + } else if (db) { + mrn::Lock lock(&mrn_operations_mutex); + mrn::PathMapper mapper(name); + const char *table_name = mapper.table_name(); + size_t table_name_size = strlen(table_name); + if (db->is_broken_table(table_name, table_name_size)) { + GRN_LOG(ctx, GRN_LOG_NOTICE, + "Auto repair is started: <%s>", + name); + error = operations_->clear(table_name, table_name_size); + if (!error) { + db->mark_table_repaired(table_name, table_name_size); + if (!share->disable_keys) { + // TODO: implemented by "reindex" instead of "remove and recreate". + // Because "remove and recreate" invalidates opened indexes by + // other threads. + error = wrapper_disable_indexes_mroonga(HA_KEY_SWITCH_ALL); + if (!error) { + error = wrapper_enable_indexes_mroonga(HA_KEY_SWITCH_ALL); + } + } + } + GRN_LOG(ctx, GRN_LOG_NOTICE, + "Auto repair is done: <%s>: %s", + name, error == 0 ? "success" : "failure"); + } + } + } + if (error) { grn_obj_unlink(ctx, grn_table); @@ -4098,6 +4417,11 @@ grn_index_tables[i] = grn_ctx_get(ctx, index_table_name.c_str(), index_table_name.length()); + if (ctx->rc == GRN_SUCCESS && !grn_index_tables[i]) { + grn_index_tables[i] = grn_ctx_get(ctx, + index_table_name.old_c_str(), + index_table_name.old_length()); + } if (ctx->rc) { DBUG_PRINT("info", ("mroonga: sql_command=%u", thd_sql_command(ha_thd()))); @@ -4160,8 +4484,16 @@ { Field *field = table_share->field[i]; field->part_of_key.clear_all(); +#ifdef MRN_HAVE_MYSQL_FIELD_PART_OF_KEY_NOT_CLUSTERED field->part_of_key_not_clustered.clear_all(); +#endif field->part_of_sortkey.clear_all(); + /* + TODO: We may need to update field->part_of_key_not_extended for + MySQL >= 5.7.18. If users report "raw InnoDB can use index for + this case but Mroonga wrapper mode for InnoDB can't use index + for the same case", we'll reconsider it again. + */ } for (i = 0; i < table_share->keys; i++) { KEY *key_info = &table->s->key_info[i]; @@ -4176,7 +4508,9 @@ { table_share->keys_for_keyread.set_bit(i); field->part_of_key.set_bit(i); +#ifdef MRN_HAVE_MYSQL_FIELD_PART_OF_KEY_NOT_CLUSTERED field->part_of_key_not_clustered.set_bit(i); +#endif } if (index_flags(i, j, 1) & HA_READ_ORDER) field->part_of_sortkey.set_bit(i); @@ -4195,12 +4529,93 @@ DBUG_VOID_RETURN; } -int ha_mroonga::storage_open(const char *name, int mode, uint test_if_locked) +int ha_mroonga::storage_reindex() { int error = 0; MRN_DBUG_ENTER_METHOD(); - error = ensure_database_open(name); + uint n_keys = table_share->keys; + KEY *key_info = table->key_info; + + bool have_multiple_column_index = false; + bitmap_clear_all(table->read_set); + for (uint i = 0; i < n_keys; ++i) { + if (!grn_index_columns[i]) + continue; + + grn_hash *columns = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, + GRN_OBJ_TABLE_HASH_KEY); + grn_table_columns(ctx, grn_index_tables[i], NULL, 0, + reinterpret_cast(columns)); + unsigned int n_columns = + grn_table_size(ctx, reinterpret_cast(columns)); + grn_hash_close(ctx, columns); + + bool is_multiple_column_index = + (KEY_N_KEY_PARTS(&(key_info[i])) != 1 && + !(key_info[i].flags & HA_FULLTEXT)); + + if (n_columns == 1 || is_multiple_column_index) { + grn_table_truncate(ctx, grn_index_tables[i]); + if (ctx->rc != GRN_SUCCESS) { + error = ER_ERROR_ON_WRITE; + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + char index_table_name[GRN_TABLE_MAX_KEY_SIZE]; + int index_table_name_size; + index_table_name_size = + grn_obj_name(ctx, grn_index_tables[i], + index_table_name, GRN_TABLE_MAX_KEY_SIZE); + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: reindex: failed to truncate index table: " + "<%.*s>: <%s>(%d)", + index_table_name_size, index_table_name, + ctx->errbuf, ctx->rc); + my_message(error, error_message, MYF(0)); + break; + } + } + + if (is_multiple_column_index) { + mrn_set_bitmap_by_key(table->read_set, &key_info[i]); + have_multiple_column_index = true; + } else { + grn_obj_reindex(ctx, grn_index_columns[i]); + if (ctx->rc != GRN_SUCCESS) { + error = ER_ERROR_ON_WRITE; + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + char index_column_name[GRN_TABLE_MAX_KEY_SIZE]; + int index_column_name_size; + index_column_name_size = + grn_obj_name(ctx, grn_index_columns[i], + index_column_name, GRN_TABLE_MAX_KEY_SIZE); + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: reindex: failed to reindex: " + "<%.*s>: <%s>(%d)", + index_column_name_size, index_column_name, + ctx->errbuf, ctx->rc); + my_message(error, error_message, MYF(0)); + break; + } + } + } + + if (!error && have_multiple_column_index) + error = storage_add_index_multiple_columns(key_info, n_keys, + grn_index_tables, + grn_index_columns, + false); + bitmap_set_all(table->read_set); + + DBUG_RETURN(error); +} + +int ha_mroonga::storage_open(const char *name, int mode, uint open_options) +{ + int error = 0; + MRN_DBUG_ENTER_METHOD(); + + mrn::Database *db; + error = ensure_database_open(name, &db); if (error) DBUG_RETURN(error); @@ -4215,19 +4630,38 @@ DBUG_RETURN(error); } - if (!(ha_thd()->open_options & HA_OPEN_FOR_REPAIR)) { + if (!(open_options & HA_OPEN_FOR_REPAIR)) { error = storage_open_indexes(name); if (error) { + storage_close_columns(); grn_obj_unlink(ctx, grn_table); grn_table = NULL; - // TODO: unlink elements - free(grn_columns); - // TODO: unlink elements - free(grn_column_ranges); DBUG_RETURN(error); } storage_set_keys_in_use(); + + { + mrn::Lock lock(&mrn_operations_mutex); + mrn::PathMapper mapper(name); + const char *table_name = mapper.table_name(); + size_t table_name_size = strlen(table_name); + if (db->is_broken_table(table_name, table_name_size)) { + GRN_LOG(ctx, GRN_LOG_NOTICE, + "Auto repair is started: <%s>", + name); + error = operations_->repair(table_name, table_name_size); + if (!error) + db->mark_table_repaired(table_name, table_name_size); + if (!share->disable_keys) { + if (!error) + error = storage_reindex(); + } + GRN_LOG(ctx, GRN_LOG_NOTICE, + "Auto repair is done: <%s>: %s", + name, error == 0 ? "success" : "failure"); + } + } } ref_length = sizeof(grn_id); @@ -4294,18 +4728,26 @@ for (int i = 0; i < n_columns; i++) { Field *field = table->field[i]; - const char *column_name = field->field_name; - int column_name_size = strlen(column_name); + mrn::ColumnName column_name(field->field_name); if (table_share->blob_fields) { blob_buffers[i].set_charset(field->charset()); } - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + if (strcmp(MRN_COLUMN_NAME_ID, column_name.mysql_name()) == 0) { continue; } +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + grn_columns[i] = NULL; + grn_column_ranges[i] = NULL; + continue; + } +#endif - grn_columns[i] = grn_obj_column(ctx, grn_table, - column_name, column_name_size); + grn_columns[i] = grn_obj_column(ctx, + grn_table, + column_name.c_str(), + column_name.length()); if (!grn_columns[i]) { error = ER_CANT_OPEN_FILE; my_message(error, ctx->errbuf, MYF(0)); @@ -4322,25 +4764,31 @@ } if (error != 0) { - for (int i = 0; i < n_columns; i++) { - grn_obj *column = grn_columns[i]; - if (column) { - grn_obj_unlink(ctx, column); - } + storage_close_columns(); + } - grn_obj *range = grn_column_ranges[i]; - if (range) { - grn_obj_unlink(ctx, range); - } + DBUG_RETURN(error); +} + +void ha_mroonga::storage_close_columns(void) +{ + int n_columns = table->s->fields; + for (int i = 0; i < n_columns; i++) { + grn_obj *column = grn_columns[i]; + if (column) { + grn_obj_unlink(ctx, column); } - free(grn_columns); - grn_columns = NULL; - free(grn_column_ranges); - grn_column_ranges = NULL; + grn_obj *range = grn_column_ranges[i]; + if (range) { + grn_obj_unlink(ctx, range); + } } - DBUG_RETURN(error); + free(grn_columns); + grn_columns = NULL; + free(grn_column_ranges); + grn_column_ranges = NULL; } int ha_mroonga::storage_open_indexes(const char *name) @@ -4400,6 +4848,11 @@ grn_index_tables[i] = grn_ctx_get(ctx, index_table_name.c_str(), index_table_name.length()); + if (ctx->rc == GRN_SUCCESS && !grn_index_tables[i]) { + grn_index_tables[i] = grn_ctx_get(ctx, + index_table_name.old_c_str(), + index_table_name.old_length()); + } if (ctx->rc == GRN_SUCCESS) { grn_index_columns[i] = grn_obj_column(ctx, grn_index_tables[i], @@ -4458,7 +4911,14 @@ DBUG_RETURN(error); } -int ha_mroonga::open(const char *name, int mode, uint test_if_locked) +int ha_mroonga::open(const char *name, + int mode, + uint open_options +#ifdef MRN_HANDLER_OPEN_HAVE_TABLE_DEFINITION + , + const dd::Table *table_def +#endif + ) { int error = 0; MRN_DBUG_ENTER_METHOD(); @@ -4476,9 +4936,9 @@ if (share->wrapper_mode) { - error = wrapper_open(name, mode, test_if_locked); + error = wrapper_open(name, mode, open_options); } else { - error = storage_open(name, mode, test_if_locked); + error = storage_open(name, mode, open_options); } if (error) @@ -4546,7 +5006,10 @@ DBUG_RETURN(error); } - error = add_wrap_hton(share->table_name, share->hton); + if (thd) + { + error = add_wrap_hton(share->table_name, share->hton); + } bitmap_free(&multiple_column_key_bitmap); if (share->use_count == 1) { mrn_free_long_term_share(share->long_term_share); @@ -4605,7 +5068,7 @@ error = drop_indexes(table_name); grn_obj *table_obj = grn_ctx_get(ctx, table_name, strlen(table_name)); - if (!ctx->rc) { + if (table_obj) { grn_obj_remove(ctx, table_obj); } if (ctx->rc) { @@ -4648,6 +5111,46 @@ } } + if (!wrap_handlerton) { + bool open_table_to_get_wrap_handlerton = true; + if (mapper.is_internal_table_name()) { + open_table_to_get_wrap_handlerton = false; + } + if (open_table_to_get_wrap_handlerton) { + TABLE_LIST table_list; + table_list.init_one_table(mapper.db_name(), strlen(mapper.db_name()), + mapper.mysql_table_name(), + strlen(mapper.mysql_table_name()), + mapper.mysql_table_name(), + TL_WRITE); + mrn_open_mutex_lock(NULL); + TABLE_SHARE *tmp_table_share = + mrn_create_tmp_table_share(&table_list, name, &error); + error = 0; + mrn_open_mutex_unlock(NULL); + if (tmp_table_share) { + TABLE tmp_table; + tmp_table.s = tmp_table_share; +#ifdef WITH_PARTITION_STORAGE_ENGINE + tmp_table.part_info = NULL; +#endif + MRN_SHARE *tmp_share = mrn_get_share(name, &tmp_table, &error); + if (tmp_share) { + wrap_handlerton = tmp_share->hton; + mrn_free_long_term_share(tmp_share->long_term_share); + tmp_share->long_term_share = NULL; + mrn_free_share(tmp_share); + } + mrn_open_mutex_lock(NULL); + mrn_free_tmp_table_share(tmp_table_share); + mrn_open_mutex_unlock(NULL); + if (error) { + DBUG_RETURN(error); + } + } + } + } + if (wrap_handlerton) { error = wrapper_delete_table(name, wrap_handlerton, mapper.table_name()); @@ -4658,8 +5161,8 @@ error = generic_delete_table(name, mapper.table_name()); } - if (!error && is_temporary_table_name(name)) { - mrn_db_manager->drop(name); + if (!error) { + error = operations_->clear(name, strlen(name)); } DBUG_RETURN(error); @@ -5032,6 +5535,70 @@ DBUG_RETURN(error); } +#ifdef MRN_HANDLER_RECORDS_RETURN_ERROR +int ha_mroonga::wrapper_records(ha_rows *num_rows) +{ + int error = 0; + MRN_DBUG_ENTER_METHOD(); + MRN_SET_WRAP_SHARE_KEY(share, table->s); + MRN_SET_WRAP_TABLE_KEY(this, table); + error = wrap_handler->ha_records(num_rows); + MRN_SET_BASE_SHARE_KEY(share, table->s); + MRN_SET_BASE_TABLE_KEY(this, table); + DBUG_RETURN(error); +} + +int ha_mroonga::storage_records(ha_rows *num_rows) +{ + MRN_DBUG_ENTER_METHOD(); + int error = handler::records(num_rows); + DBUG_RETURN(error); +} + +int ha_mroonga::records(ha_rows *num_rows) +{ + MRN_DBUG_ENTER_METHOD(); + int error = 0; + if (share->wrapper_mode) { + error = wrapper_records(num_rows); + } else { + error = storage_records(num_rows); + } + DBUG_RETURN(error); +} +#else +ha_rows ha_mroonga::wrapper_records() +{ + ha_rows num_rows; + MRN_DBUG_ENTER_METHOD(); + MRN_SET_WRAP_SHARE_KEY(share, table->s); + MRN_SET_WRAP_TABLE_KEY(this, table); + num_rows = wrap_handler->records(); + MRN_SET_BASE_SHARE_KEY(share, table->s); + MRN_SET_BASE_TABLE_KEY(this, table); + DBUG_RETURN(num_rows); +} + +ha_rows ha_mroonga::storage_records() +{ + MRN_DBUG_ENTER_METHOD(); + ha_rows num_rows = handler::records(); + DBUG_RETURN(num_rows); +} + +ha_rows ha_mroonga::records() +{ + MRN_DBUG_ENTER_METHOD(); + ha_rows num_rows; + if (share->wrapper_mode) { + num_rows = wrapper_records(); + } else { + num_rows = storage_records(); + } + DBUG_RETURN(num_rows); +} +#endif + int ha_mroonga::wrapper_rnd_next(uchar *buf) { int error = 0; @@ -5273,7 +5840,15 @@ { int error = 0; THD *thd = ha_thd(); + MRN_DBUG_ENTER_METHOD(); + + mrn::Operation operation(operations_, + "write", + table->s->table_name.str, + table->s->table_name.length); + + operation.record_target(record_id); MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); tmp_disable_binlog(thd); @@ -5388,6 +5963,11 @@ DBUG_RETURN(error); } + mrn::Operation operation(operations_, + "write", + table->s->table_name.str, + table->s->table_name.length); + THD *thd = ha_thd(); int i; int n_columns = table->s->fields; @@ -5401,11 +5981,17 @@ mrn::DebugColumnAccess debug_column_access(table, table->read_set); for (i = 0; i < n_columns; i++) { Field *field = table->field[i]; - const char *column_name = field->field_name; + +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + continue; + } +#endif if (field->is_null()) continue; - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + mrn::ColumnName column_name(field->field_name); + if (strcmp(MRN_COLUMN_NAME_ID, column_name.c_str()) == 0) { push_warning_printf(thd, MRN_SEVERITY_WARNING, WARN_DATA_TRUNCATED, MRN_GET_ERR_MSG(WARN_DATA_TRUNCATED), @@ -5489,17 +6075,25 @@ } DBUG_RETURN(error); } + operation.record_target(record_id); } grn_obj colbuf; GRN_VOID_INIT(&colbuf); for (i = 0; i < n_columns; i++) { Field *field = table->field[i]; - const char *column_name = field->field_name; if (field->is_null()) continue; +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + continue; + } +#endif + + mrn::ColumnName column_name(field->field_name); + #ifdef MRN_HAVE_SPATIAL bool is_null_geometry_value = field->real_type() == MYSQL_TYPE_GEOMETRY && @@ -5509,39 +6103,63 @@ } #endif - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + if (strcmp(MRN_COLUMN_NAME_ID, column_name.c_str()) == 0) { continue; } error = mrn_change_encoding(ctx, field->charset()); if (error) { - grn_obj_unlink(ctx, &colbuf); + GRN_OBJ_FIN(ctx, &colbuf); goto err; } error = generic_store_bulk(field, &colbuf); if (error) { - grn_obj_unlink(ctx, &colbuf); + GRN_OBJ_FIN(ctx, &colbuf); goto err; } - if (added && is_grn_zero_column_value(grn_columns[i], &colbuf)) { - // WORKAROUND: groonga can't index newly added '0' value for - // fix size column. So we add non-'0' value first then add - // real '0' value again. It will be removed when groonga - // supports 'null' value. - char *bytes = GRN_BULK_HEAD(&colbuf); - bytes[0] = '\1'; - grn_obj_set_value(ctx, grn_columns[i], record_id, &colbuf, GRN_OBJ_SET); - bytes[0] = '\0'; + + grn_obj *column = grn_columns[i]; + if (is_foreign_key_field(table->s->table_name.str, field->field_name)) { + grn_obj value; + GRN_RECORD_INIT(&value, 0, grn_obj_get_range(ctx, column)); + grn_rc cast_rc = grn_obj_cast(ctx, &colbuf, &value, GRN_FALSE); + if (cast_rc != GRN_SUCCESS) { + grn_obj inspected; + GRN_TEXT_INIT(&inspected, 0); + grn_inspect(ctx, &inspected, &colbuf); + error = HA_ERR_NO_REFERENCED_ROW; + GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT, + "foreign record doesn't exist: <%s>:<%.*s>", + field->field_name, + static_cast(GRN_TEXT_LEN(&inspected)), + GRN_TEXT_VALUE(&inspected)); + GRN_OBJ_FIN(ctx, &value); + GRN_OBJ_FIN(ctx, &colbuf); + GRN_OBJ_FIN(ctx, &inspected); + goto err; + } + grn_obj_set_value(ctx, column, record_id, &value, GRN_OBJ_SET); + } else { + if (added && is_grn_zero_column_value(column, &colbuf)) { + // WORKAROUND: groonga can't index newly added '0' value for + // fix size column. So we add non-'0' value first then add + // real '0' value again. It will be removed when groonga + // supports 'null' value. + char *bytes = GRN_BULK_HEAD(&colbuf); + bytes[0] = '\1'; + grn_obj_set_value(ctx, column, record_id, &colbuf, GRN_OBJ_SET); + bytes[0] = '\0'; + } + grn_obj_set_value(ctx, column, record_id, &colbuf, GRN_OBJ_SET); } - grn_obj_set_value(ctx, grn_columns[i], record_id, &colbuf, GRN_OBJ_SET); if (ctx->rc) { - grn_obj_unlink(ctx, &colbuf); + GRN_OBJ_FIN(ctx, &colbuf); my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0)); error = ER_ERROR_ON_WRITE; goto err; } } - grn_obj_unlink(ctx, &colbuf); + GRN_OBJ_FIN(ctx, &colbuf); error = storage_write_row_multiple_column_indexes(buf, record_id); if (error) { @@ -5862,6 +6480,12 @@ int error = 0; THD *thd = ha_thd(); + + mrn::Operation operation(operations_, + "update", + table->s->table_name.str, + table->s->table_name.length); + MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); tmp_disable_binlog(thd); @@ -5999,6 +6623,12 @@ DBUG_RETURN(error); } + mrn::Operation operation(operations_, + "update", + table->s->table_name.str, + table->s->table_name.length); + operation.record_target(record_id); + grn_obj colbuf; int i; uint j; @@ -6007,11 +6637,22 @@ for (i = 0; i < n_columns; i++) { Field *field = table->field[i]; - const char *column_name = field->field_name; - if (bitmap_is_set(table->write_set, field->field_index)) { - if (field->is_null()) continue; - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + continue; + } +#endif + + if (!bitmap_is_set(table->write_set, field->field_index)) + continue; + + if (field->is_null()) + continue; + + { + mrn::ColumnName column_name(field->field_name); + if (strcmp(MRN_COLUMN_NAME_ID, column_name.c_str()) == 0) { push_warning_printf(thd, MRN_SEVERITY_WARNING, WARN_DATA_TRUNCATED, MRN_GET_ERR_MSG(WARN_DATA_TRUNCATED), MRN_COLUMN_NAME_ID, @@ -6021,6 +6662,38 @@ } } } + + if (!is_foreign_key_field(table->s->table_name.str, field->field_name)) + continue; + + { + grn_obj *column = grn_columns[i]; + grn_obj new_value; + GRN_VOID_INIT(&new_value); + { + mrn::DebugColumnAccess debug_column_access(table, table->read_set); + generic_store_bulk(field, &new_value); + } + grn_obj casted_value; + GRN_RECORD_INIT(&casted_value, 0, grn_obj_get_range(ctx, column)); + grn_rc cast_rc = grn_obj_cast(ctx, &new_value, &casted_value, GRN_FALSE); + GRN_OBJ_FIN(ctx, &casted_value); + if (cast_rc != GRN_SUCCESS) { + grn_obj inspected; + GRN_TEXT_INIT(&inspected, 0); + grn_inspect(ctx, &inspected, &new_value); + GRN_OBJ_FIN(ctx, &new_value); + error = HA_ERR_NO_REFERENCED_ROW; + GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT, + "foreign record doesn't exist: <%s>:<%.*s>", + field->field_name, + static_cast(GRN_TEXT_LEN(&inspected)), + GRN_TEXT_VALUE(&inspected)); + GRN_OBJ_FIN(ctx, &inspected); + DBUG_RETURN(error); + } + GRN_OBJ_FIN(ctx, &new_value); + } } KEY *pkey_info = NULL; @@ -6044,14 +6717,21 @@ GRN_VOID_INIT(&colbuf); for (i = 0; i < n_columns; i++) { Field *field = table->field[i]; - const char *column_name = field->field_name; + +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + continue; + } +#endif + if (bitmap_is_set(table->write_set, field->field_index)) { mrn::DebugColumnAccess debug_column_access(table, table->read_set); DBUG_PRINT("info", ("mroonga: update column %d(%d)",i,field->field_index)); if (field->is_null()) continue; - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + mrn::ColumnName column_name(field->field_name); + if (strcmp(MRN_COLUMN_NAME_ID, column_name.c_str()) == 0) { continue; } @@ -6059,30 +6739,43 @@ if (error) goto err; + bool is_pkey = false; bool on_duplicate_key_update = (inserting_with_update && ignoring_duplicated_key); - if (!on_duplicate_key_update && pkey_info) { - bool have_pkey = false; + if (pkey_info && !on_duplicate_key_update) { for (j = 0; j < KEY_N_KEY_PARTS(pkey_info); j++) { Field *pkey_field = pkey_info->key_part[j].field; - if (strcmp(pkey_field->field_name, column_name) == 0) { - if (!replacing_) { - char message[MRN_BUFFER_SIZE]; - snprintf(message, MRN_BUFFER_SIZE, - "data truncated for primary key column: <%s>", - column_name); - push_warning(thd, MRN_SEVERITY_WARNING, - WARN_DATA_TRUNCATED, message); - } - have_pkey = true; + if (strcmp(pkey_field->field_name, column_name.c_str()) == 0) { + is_pkey = true; + break; } } - if (have_pkey) { - continue; - } } generic_store_bulk(field, &colbuf); + if (is_pkey) { + bool is_multiple_column_index = KEY_N_KEY_PARTS(pkey_info) > 1; + bool is_same_value; + if (is_multiple_column_index) { + is_same_value = false; + } else { + grn_id found_record_id = grn_table_get(ctx, + grn_table, + GRN_BULK_HEAD(&colbuf), + GRN_BULK_VSIZE(&colbuf)); + is_same_value = (record_id == found_record_id); + } + if (!is_same_value && !replacing_) { + char message[MRN_BUFFER_SIZE]; + snprintf(message, MRN_BUFFER_SIZE, + "data truncated for primary key column: <%s>", + column_name.c_str()); + push_warning(thd, MRN_SEVERITY_WARNING, + WARN_DATA_TRUNCATED, message); + } + continue; + } + grn_obj_set_value(ctx, grn_columns[i], record_id, &colbuf, GRN_OBJ_SET); if (ctx->rc) { grn_obj_unlink(ctx, &colbuf); @@ -6340,6 +7033,12 @@ int error = 0; THD *thd= ha_thd(); + + mrn::Operation operation(operations_, + "delete", + table->s->table_name.str, + table->s->table_name.length); + MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); tmp_disable_binlog(thd); @@ -6429,6 +7128,69 @@ DBUG_RETURN(0); } + mrn::Operation operation(operations_, + "delete", + table->s->table_name.str, + table->s->table_name.length); + operation.record_target(record_id); + + { + grn_id referencing_child_table_id = GRN_ID_NIL; + grn_hash *columns = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, + GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY); + grn_table_columns(ctx, grn_table, "", 0, + reinterpret_cast(columns)); + GRN_HASH_EACH_BEGIN(ctx, columns, cursor, id) { + void *key; + grn_hash_cursor_get_key(ctx, cursor, &key); + grn_id column_id = *static_cast(key); + grn_obj *column = grn_ctx_at(ctx, column_id); + if (!column) + continue; + + if (column->header.type != GRN_COLUMN_INDEX) + continue; + + grn_ii_cursor *ii_cursor = + grn_ii_cursor_open(ctx, + reinterpret_cast(column), + record_id, + GRN_ID_NIL, + GRN_ID_MAX, + 0, + 0); + if (!ii_cursor) + continue; + + if (grn_ii_cursor_next(ctx, ii_cursor)) { + referencing_child_table_id = grn_obj_get_range(ctx, column); + } + + grn_ii_cursor_close(ctx, ii_cursor); + + if (referencing_child_table_id != GRN_ID_NIL) + break; + } GRN_HASH_EACH_END(ctx, cursor); + grn_hash_close(ctx, columns); + + if (referencing_child_table_id != GRN_ID_NIL) { + grn_obj *referencing_child_table = + grn_ctx_at(ctx, referencing_child_table_id); + char name[GRN_TABLE_MAX_KEY_SIZE]; + int name_size; + name_size = grn_obj_name(ctx, + referencing_child_table, + name, + GRN_TABLE_MAX_KEY_SIZE); + error = HA_ERR_ROW_IS_REFERENCED; + GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT, + "one or more child rows exist in <%.*s>", + name_size, + name); + DBUG_RETURN(error); + } + } + storage_store_fields_for_prep_update(buf, NULL, record_id); { mrn::Lock lock(&(share->record_mutex), have_unique_index()); @@ -6799,6 +7561,13 @@ grn_ii *ii = reinterpret_cast(index_column); row_count = grn_ii_estimate_size_for_lexicon_cursor(ctx, ii, cursor); grn_table_cursor_close(ctx, cursor); + + unsigned int max_n_lexicon_records = + grn_table_size(ctx, grn_index_tables[key_nr]); + if (cursor_limit >= 0 && + static_cast(cursor_limit) < max_n_lexicon_records) { + row_count++; + } } DBUG_RETURN(row_count); } @@ -6960,7 +7729,7 @@ enum ha_rkey_function find_flag) { MRN_DBUG_ENTER_METHOD(); - check_count_skip(keypart_map, 0, false); + check_count_skip(keypart_map); int error = 0; @@ -6976,6 +7745,29 @@ clear_cursor_geo(); clear_empty_value_records(); + switch (find_flag) { + case HA_READ_BEFORE_KEY: + flags |= GRN_CURSOR_LT | GRN_CURSOR_DESCENDING; + break; + case HA_READ_PREFIX_LAST: + flags |= GRN_CURSOR_PREFIX | GRN_CURSOR_DESCENDING; + break; + case HA_READ_PREFIX_LAST_OR_PREV: + flags |= GRN_CURSOR_LE | GRN_CURSOR_DESCENDING; + break; + case HA_READ_AFTER_KEY: + flags |= GRN_CURSOR_GT | GRN_CURSOR_ASCENDING; + break; + case HA_READ_KEY_OR_NEXT: + flags |= GRN_CURSOR_GE | GRN_CURSOR_ASCENDING; + break; + case HA_READ_KEY_EXACT: + flags |= GRN_CURSOR_LE | GRN_CURSOR_GE; + break; + default: + break; + } + bool is_multiple_column_index = KEY_N_KEY_PARTS(key_info) > 1; if (is_multiple_column_index) { mrn_change_encoding(ctx, NULL); @@ -6987,13 +7779,21 @@ "multiple column index key length=<%u>", key_length, key_info->key_length)); if (key_length == key_info->key_length) { - if (find_flag == HA_READ_BEFORE_KEY || - find_flag == HA_READ_PREFIX_LAST_OR_PREV) { + switch (find_flag) { + case HA_READ_BEFORE_KEY: + case HA_READ_PREFIX_LAST_OR_PREV: key_max = key_max_entity; storage_encode_multiple_column_key(key_info, key, key_length, key_max, &size_max); - } else { + break; + case HA_READ_PREFIX_LAST: + key_min = key_min_entity; + storage_encode_multiple_column_key(key_info, + key, key_length, + key_min, &size_min); + break; + default: key_min = key_min_entity; storage_encode_multiple_column_key(key_info, key, key_length, @@ -7002,13 +7802,102 @@ key_max = key_min; size_max = size_min; } + break; } } else { - flags |= GRN_CURSOR_PREFIX; - key_min = key_min_entity; - storage_encode_multiple_column_key(key_info, - key, key_length, - key_min, &size_min); + const uchar *prev_key = NULL; + uint prev_key_length = 0; + if ((keypart_map >> 1) > 0) { + prev_key = key; + prev_key_length = + mrn_calculate_key_len(table, active_index, key, keypart_map >> 1); + } + switch (find_flag) { + case HA_READ_BEFORE_KEY: + if (prev_key) { + flags |= GRN_CURSOR_GE; + key_min = key_min_entity; + storage_encode_multiple_column_key_range(key_info, + prev_key, prev_key_length, + NULL, 0, + key_min, &size_min, + NULL, NULL); + } + key_max = key_max_entity; + storage_encode_multiple_column_key_range(key_info, + key, key_length, + NULL, 0, + key_max, &size_max, + NULL, NULL); + break; + case HA_READ_PREFIX_LAST: + key_min = key_min_entity; + storage_encode_multiple_column_key(key_info, + key, key_length, + key_min, &size_min); + break; + case HA_READ_PREFIX_LAST_OR_PREV: + if (prev_key) { + flags |= GRN_CURSOR_GE; + key_min = key_min_entity; + storage_encode_multiple_column_key_range(key_info, + prev_key, prev_key_length, + NULL, 0, + key_min, &size_min, + NULL, NULL); + } + key_max = key_max_entity; + storage_encode_multiple_column_key_range(key_info, + NULL, 0, + key, key_length, + NULL, NULL, + key_max, &size_max); + break; + case HA_READ_AFTER_KEY: + key_min = key_min_entity; + storage_encode_multiple_column_key_range(key_info, + NULL, 0, + key, key_length, + NULL, NULL, + key_min, &size_min); + if (prev_key) { + flags |= GRN_CURSOR_LE; + key_max = key_max_entity; + storage_encode_multiple_column_key_range(key_info, + NULL, 0, + prev_key, prev_key_length, + NULL, NULL, + key_max, &size_max); + } + break; + case HA_READ_KEY_OR_NEXT: + key_min = key_min_entity; + storage_encode_multiple_column_key_range(key_info, + key, key_length, + NULL, 0, + key_min, &size_min, + NULL, NULL); + if (prev_key) { + flags |= GRN_CURSOR_LE; + key_max = key_max_entity; + storage_encode_multiple_column_key_range(key_info, + NULL, 0, + prev_key, prev_key_length, + NULL, NULL, + key_max, &size_max); + } + break; + case HA_READ_KEY_EXACT: + key_min = key_min_entity; + key_max = key_max_entity; + storage_encode_multiple_column_key_range(key_info, + key, key_length, + key, key_length, + key_min, &size_min, + key_max, &size_max); + default: + break; + } } } else if (mrn_is_geo_key(key_info)) { error = mrn_change_encoding(ctx, key_info->key_part->field->charset()); @@ -7055,23 +7944,6 @@ } } - switch (find_flag) { - case HA_READ_BEFORE_KEY: - flags |= GRN_CURSOR_LT | GRN_CURSOR_DESCENDING; - break; - case HA_READ_PREFIX_LAST_OR_PREV: - flags |= GRN_CURSOR_LE | GRN_CURSOR_DESCENDING; - break; - case HA_READ_AFTER_KEY: - flags |= GRN_CURSOR_GT | GRN_CURSOR_ASCENDING; - break; - case HA_READ_KEY_OR_NEXT: - flags |= GRN_CURSOR_GE | GRN_CURSOR_ASCENDING; - break; - default: - break; - } - uint pkey_nr = table->s->primary_key; if (key_nr == pkey_nr) { DBUG_PRINT("info", ("mroonga: use primary key")); @@ -7509,222 +8381,6 @@ DBUG_RETURN(error); } -int ha_mroonga::wrapper_read_range_first(const key_range *start_key, - const key_range *end_key, - bool eq_range, bool sorted) -{ - int error = 0; - MRN_DBUG_ENTER_METHOD(); - KEY *key_info = &(table->key_info[active_index]); - if (mrn_is_geo_key(key_info)) { - clear_cursor_geo(); - error = generic_geo_open_cursor(start_key->key, start_key->flag); - if (!error) { - error = wrapper_get_next_geo_record(table->record[0]); - } - DBUG_RETURN(error); - } - MRN_SET_WRAP_SHARE_KEY(share, table->s); - MRN_SET_WRAP_TABLE_KEY(this, table); - if (fulltext_searching) - set_pk_bitmap(); - error = wrap_handler->read_range_first(start_key, end_key, eq_range, - sorted); - MRN_SET_BASE_SHARE_KEY(share, table->s); - MRN_SET_BASE_TABLE_KEY(this, table); - DBUG_RETURN(error); -} - -int ha_mroonga::storage_read_range_first(const key_range *start_key, - const key_range *end_key, - bool eq_range, bool sorted) -{ - MRN_DBUG_ENTER_METHOD(); - check_count_skip(start_key ? start_key->keypart_map : 0, - end_key ? end_key->keypart_map : 0, false); - int flags = 0, error; - uint size_min = 0, size_max = 0; - uchar *key_min = NULL, *key_max = NULL; - uchar key_min_entity[MRN_MAX_KEY_SIZE]; - uchar key_max_entity[MRN_MAX_KEY_SIZE]; - KEY *key_info = &(table->s->key_info[active_index]); - - clear_cursor(); - - bool is_multiple_column_index = KEY_N_KEY_PARTS(key_info) > 1; - if (is_multiple_column_index) { - mrn_change_encoding(ctx, NULL); - if (start_key && end_key && - start_key->length == end_key->length && - memcmp(start_key->key, end_key->key, start_key->length) == 0) { - flags |= GRN_CURSOR_PREFIX; - key_min = key_min_entity; - storage_encode_multiple_column_key(key_info, - start_key->key, start_key->length, - key_min, &size_min); - } else { - key_min = key_min_entity; - key_max = key_max_entity; - storage_encode_multiple_column_key_range(key_info, - start_key, end_key, - key_min, &size_min, - key_max, &size_max); - if (size_min == 0) { - key_min = NULL; - } - if (size_max == 0) { - key_max = NULL; - } - } - } else { - Field *field = key_info->key_part[0].field; - const char *column_name = field->field_name; - error = mrn_change_encoding(ctx, field->charset()); - if (error) - DBUG_RETURN(error); - if (start_key) { - key_min = key_min_entity; - storage_encode_key(field, start_key->key, key_min_entity, - &size_min); - if (start_key->flag == HA_READ_KEY_EXACT) { - // for _id - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { - grn_id found_record_id = *((grn_id *)key_min); - if (grn_table_at(ctx, grn_table, found_record_id) != GRN_ID_NIL) { // found - storage_store_fields(table->record[0], found_record_id); - table->status = 0; - cursor = NULL; - record_id = found_record_id; - DBUG_RETURN(0); - } else { - table->status = STATUS_NOT_FOUND; - cursor = NULL; - record_id = GRN_ID_NIL; - DBUG_RETURN(HA_ERR_END_OF_FILE); - } - } - } - } - if (end_key) { - key_max = key_max_entity; - storage_encode_key(field, end_key->key, key_max, &size_max); - } - } - - if (start_key) { - switch (start_key->flag) { - case HA_READ_AFTER_KEY: - flags |= GRN_CURSOR_GT | GRN_CURSOR_ASCENDING; - break; - case HA_READ_KEY_OR_NEXT: - flags |= GRN_CURSOR_GE | GRN_CURSOR_ASCENDING; - break; - default: - break; - } - } - if (end_key) { - switch (end_key->flag) { - case HA_READ_BEFORE_KEY: - flags |= GRN_CURSOR_LT | GRN_CURSOR_ASCENDING; - break; - case HA_READ_AFTER_KEY: - flags |= GRN_CURSOR_GE | GRN_CURSOR_ASCENDING; - break; - default: - break; - } - } - - uint pkey_nr = table->s->primary_key; - if (active_index == pkey_nr) { - DBUG_PRINT("info", ("mroonga: use primary key")); - cursor = grn_table_cursor_open(ctx, grn_table, - key_min, size_min, key_max, size_max, - 0, -1, flags); - } else { - if (is_multiple_column_index) { - DBUG_PRINT("info", ("mroonga: use multiple column key%u", active_index)); - } else { - DBUG_PRINT("info", ("mroonga: use key%u", active_index)); - } - index_table_cursor = grn_table_cursor_open(ctx, - grn_index_tables[active_index], - key_min, size_min, - key_max, size_max, - 0, -1, flags); - cursor = grn_index_cursor_open(ctx, index_table_cursor, - grn_index_columns[active_index], - 0, GRN_ID_MAX, 0); - } - if (ctx->rc) { - my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0)); - DBUG_RETURN(ER_ERROR_ON_READ); - } - error = storage_get_next_record(table->record[0]); - DBUG_RETURN(error); -} - -int ha_mroonga::read_range_first(const key_range *start_key, - const key_range *end_key, - bool eq_range, bool sorted) -{ - MRN_DBUG_ENTER_METHOD(); - int error = 0; - if (share->wrapper_mode) - { - error = wrapper_read_range_first(start_key, end_key, eq_range, - sorted); - } else { - error = storage_read_range_first(start_key, end_key, eq_range, sorted); - } - DBUG_RETURN(error); -} - -int ha_mroonga::wrapper_read_range_next() -{ - int error = 0; - MRN_DBUG_ENTER_METHOD(); - KEY *key_info = &(table->key_info[active_index]); - if (mrn_is_geo_key(key_info)) { - error = wrapper_get_next_geo_record(table->record[0]); - DBUG_RETURN(error); - } - MRN_SET_WRAP_SHARE_KEY(share, table->s); - MRN_SET_WRAP_TABLE_KEY(this, table); - if (fulltext_searching) - set_pk_bitmap(); - error = wrap_handler->read_range_next(); - MRN_SET_BASE_SHARE_KEY(share, table->s); - MRN_SET_BASE_TABLE_KEY(this, table); - DBUG_RETURN(error); -} - -int ha_mroonga::storage_read_range_next() -{ - MRN_DBUG_ENTER_METHOD(); - - if (cursor == NULL) { - DBUG_RETURN(HA_ERR_END_OF_FILE); - } - int error = storage_get_next_record(count_skip ? NULL : table->record[0]); - - DBUG_RETURN(error); -} - -int ha_mroonga::read_range_next() -{ - MRN_DBUG_ENTER_METHOD(); - int error = 0; - if (share->wrapper_mode) - { - error = wrapper_read_range_next(); - } else { - error = storage_read_range_next(); - } - DBUG_RETURN(error); -} - int ha_mroonga::generic_ft_init() { MRN_DBUG_ENTER_METHOD(); @@ -7744,262 +8400,68 @@ } if (ctx->rc) { error = ER_ERROR_ON_READ; - my_message(error, ctx->errbuf, MYF(0)); - } else { - if (sorted_result) { - if (grn_table->header.type == GRN_TABLE_NO_KEY) { - mrn_ft_info->id_accessor = grn_obj_column(ctx, sorted_result, - MRN_COLUMN_NAME_ID, - strlen(MRN_COLUMN_NAME_ID)); - } else { - mrn_ft_info->key_accessor = grn_obj_column(ctx, sorted_result, - MRN_COLUMN_NAME_KEY, - strlen(MRN_COLUMN_NAME_KEY)); - } - } else { - mrn_ft_info->key_accessor = grn_obj_column(ctx, mrn_ft_info->result, - MRN_COLUMN_NAME_KEY, - strlen(MRN_COLUMN_NAME_KEY)); - } - } - DBUG_RETURN(error); -} - -int ha_mroonga::wrapper_ft_init() -{ - MRN_DBUG_ENTER_METHOD(); - int error = generic_ft_init(); - DBUG_RETURN(error); -} - -int ha_mroonga::storage_ft_init() -{ - MRN_DBUG_ENTER_METHOD(); - int error = generic_ft_init(); - record_id = GRN_ID_NIL; - DBUG_RETURN(error); -} - -int ha_mroonga::ft_init() -{ - MRN_DBUG_ENTER_METHOD(); - int error = 0; - if (share->wrapper_mode) - { - error = wrapper_ft_init(); - } else { - error = storage_ft_init(); - } - DBUG_RETURN(error); -} - -void ha_mroonga::generic_ft_init_ext_add_conditions_fast_order_limit( - struct st_mrn_ft_info *info, grn_obj *expression) -{ - MRN_DBUG_ENTER_METHOD(); - - Item *where = - MRN_SELECT_LEX_GET_WHERE_COND(table->pos_in_table_list->select_lex); - - bool is_storage_mode = !(share->wrapper_mode); - mrn::ConditionConverter converter(info->ctx, grn_table, is_storage_mode); - converter.convert(where, expression); - - DBUG_VOID_RETURN; -} - -bool ha_mroonga::generic_ft_init_ext_parse_pragma_d(struct st_mrn_ft_info *info, - const char *keyword, - uint keyword_length, - grn_operator *default_operator, - uint *consumed_keyword_length) -{ - MRN_DBUG_ENTER_METHOD(); - - grn_bool succeeded = true; - if (keyword_length >= 1 && keyword[0] == '+') { - *default_operator = GRN_OP_AND; - *consumed_keyword_length = 1; - } else if (keyword_length >= 1 && keyword[0] == '-') { - *default_operator = GRN_OP_AND_NOT; - *consumed_keyword_length = 1; - } else if (keyword_length >= 2 && memcmp(keyword, "OR", 2) == 0) { - *default_operator = GRN_OP_OR; - *consumed_keyword_length = 2; - } else { - succeeded = false; - } - - DBUG_RETURN(succeeded); -} - -void ha_mroonga::generic_ft_init_ext_parse_pragma_w_append_section( - struct st_mrn_ft_info *info, - grn_obj *index_column, - grn_obj *match_columns, - uint section, - grn_obj *section_value_buffer, - int weight, - uint n_weights) -{ - MRN_DBUG_ENTER_METHOD(); - - grn_expr_append_obj(info->ctx, match_columns, index_column, GRN_OP_PUSH, 1); - GRN_UINT32_SET(info->ctx, section_value_buffer, section); - grn_expr_append_const(info->ctx, match_columns, section_value_buffer, - GRN_OP_PUSH, 1); - grn_expr_append_op(info->ctx, match_columns, GRN_OP_GET_MEMBER, 2); - - if (weight != 1) { - grn_expr_append_const_int(info->ctx, match_columns, weight, - GRN_OP_PUSH, 1); - grn_expr_append_op(info->ctx, match_columns, GRN_OP_STAR, 2); - } - - if (n_weights >= 2) { - grn_expr_append_op(info->ctx, match_columns, GRN_OP_OR, 2); - } - - DBUG_VOID_RETURN; -} - -bool ha_mroonga::generic_ft_init_ext_parse_pragma_w(struct st_mrn_ft_info *info, - const char *keyword, - uint keyword_length, - grn_obj *index_column, - grn_obj *match_columns, - uint *consumed_keyword_length, - grn_obj *tmp_objects) -{ - MRN_DBUG_ENTER_METHOD(); - - *consumed_keyword_length = 0; - - uint n_sections = KEY_N_KEY_PARTS(info->key_info); - - grn_obj section_value_buffer; - GRN_UINT32_INIT(§ion_value_buffer, 0); - - MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(bool, specified_sections, n_sections); - for (uint i = 0; i < n_sections; ++i) { - specified_sections[i] = false; - } - - uint n_weights = 0; - while (keyword_length >= 1) { - if (n_weights >= 1) { - if (keyword[0] != ',') { - break; - } - uint n_used_keyword_length = 1; - *consumed_keyword_length += n_used_keyword_length; - keyword_length -= n_used_keyword_length; - keyword += n_used_keyword_length; - if (keyword_length == 0) { - break; - } - } - - uint section = 0; - if ('1' <= keyword[0] && keyword[0] <= '9') { - const char *section_start = keyword; - const char *keyword_end = keyword + keyword_length; - const char *keyword_rest; - section = grn_atoui(section_start, keyword_end, &keyword_rest); - if (section_start == keyword_rest) { - break; - } - if (!(0 < section && section <= n_sections)) { - break; + my_message(error, ctx->errbuf, MYF(0)); + } else { + if (sorted_result) { + if (grn_table->header.type == GRN_TABLE_NO_KEY) { + mrn_ft_info->id_accessor = grn_obj_column(ctx, sorted_result, + MRN_COLUMN_NAME_ID, + strlen(MRN_COLUMN_NAME_ID)); + } else { + mrn_ft_info->key_accessor = grn_obj_column(ctx, sorted_result, + MRN_COLUMN_NAME_KEY, + strlen(MRN_COLUMN_NAME_KEY)); } - section -= 1; - specified_sections[section] = true; - uint n_used_keyword_length = keyword_rest - keyword; - *consumed_keyword_length += n_used_keyword_length; - keyword_length -= n_used_keyword_length; - keyword += n_used_keyword_length; } else { - break; - } - - int weight = 1; - if (keyword_length >= 2 && keyword[0] == ':') { - const char *weight_start = keyword + 1; - const char *keyword_end = keyword + keyword_length; - const char *keyword_rest; - weight = grn_atoi(weight_start, keyword_end, &keyword_rest); - if (weight_start == keyword_rest) { - break; - } - uint n_used_keyword_length = keyword_rest - keyword; - *consumed_keyword_length += n_used_keyword_length; - keyword_length -= n_used_keyword_length; - keyword += n_used_keyword_length; + mrn_ft_info->key_accessor = grn_obj_column(ctx, mrn_ft_info->result, + MRN_COLUMN_NAME_KEY, + strlen(MRN_COLUMN_NAME_KEY)); } - - n_weights++; - - generic_ft_init_ext_parse_pragma_w_append_section(info, - index_column, - match_columns, - section, - §ion_value_buffer, - weight, - n_weights); } + DBUG_RETURN(error); +} - for (uint section = 0; section < n_sections; ++section) { - if (specified_sections[section]) { - continue; - } +int ha_mroonga::wrapper_ft_init() +{ + MRN_DBUG_ENTER_METHOD(); + int error = generic_ft_init(); + DBUG_RETURN(error); +} - ++n_weights; +int ha_mroonga::storage_ft_init() +{ + MRN_DBUG_ENTER_METHOD(); + int error = generic_ft_init(); + record_id = GRN_ID_NIL; + DBUG_RETURN(error); +} - int default_weight = 1; - generic_ft_init_ext_parse_pragma_w_append_section(info, - index_column, - match_columns, - section, - §ion_value_buffer, - default_weight, - n_weights); +int ha_mroonga::ft_init() +{ + MRN_DBUG_ENTER_METHOD(); + int error = 0; + if (share->wrapper_mode) + { + error = wrapper_ft_init(); + } else { + error = storage_ft_init(); } - MRN_FREE_VARIABLE_LENGTH_ARRAYS(specified_sections); - - GRN_OBJ_FIN(info->ctx, §ion_value_buffer); - - DBUG_RETURN(n_weights > 0); + DBUG_RETURN(error); } -grn_expr_flags ha_mroonga::expr_flags_in_boolean_mode() +void ha_mroonga::generic_ft_init_ext_add_conditions_fast_order_limit( + struct st_mrn_ft_info *info, grn_obj *expression) { MRN_DBUG_ENTER_METHOD(); - ulonglong syntax_flags = MRN_BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT; -#ifdef MRN_SUPPORT_THDVAR_SET - syntax_flags = THDVAR(ha_thd(), boolean_mode_syntax_flags); -#endif - grn_expr_flags expression_flags = 0; - if (syntax_flags == MRN_BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT) { - expression_flags = GRN_EXPR_SYNTAX_QUERY | GRN_EXPR_ALLOW_LEADING_NOT; - } else { - if (syntax_flags & MRN_BOOLEAN_MODE_SYNTAX_FLAG_SYNTAX_SCRIPT) { - expression_flags |= GRN_EXPR_SYNTAX_SCRIPT; - } else { - expression_flags |= GRN_EXPR_SYNTAX_QUERY; - } - if (syntax_flags & MRN_BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_COLUMN) { - expression_flags |= GRN_EXPR_ALLOW_COLUMN; - } - if (syntax_flags & MRN_BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_UPDATE) { - expression_flags |= GRN_EXPR_ALLOW_UPDATE; - } - if (syntax_flags & MRN_BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_LEADING_NOT) { - expression_flags |= GRN_EXPR_ALLOW_LEADING_NOT; - } - } + Item *where = + MRN_SELECT_LEX_GET_WHERE_COND(table->pos_in_table_list->select_lex); + + bool is_storage_mode = !(share->wrapper_mode); + mrn::ConditionConverter converter(info->ctx, grn_table, is_storage_mode); + converter.convert(where, expression); - DBUG_RETURN(expression_flags); + DBUG_VOID_RETURN; } grn_rc ha_mroonga::generic_ft_init_ext_prepare_expression_in_boolean_mode( @@ -8007,107 +8469,17 @@ String *key, grn_obj *index_column, grn_obj *match_columns, - grn_obj *expression, - grn_obj *tmp_objects) + grn_obj *expression) { MRN_DBUG_ENTER_METHOD(); - grn_rc rc = GRN_SUCCESS; - - const char *keyword, *keyword_original; - uint keyword_length, keyword_length_original; - grn_operator default_operator = GRN_OP_OR; - grn_bool weight_specified = false; - keyword = keyword_original = key->ptr(); - keyword_length = keyword_length_original = key->length(); - // WORKAROUND: support only "D" and "W" pragmas. - if (keyword_length >= 2 && keyword[0] == '*') { - bool parsed = false; - bool done = false; - keyword++; - keyword_length--; - while (!done) { - uint consumed_keyword_length = 0; - switch (keyword[0]) { - case 'D': - if (generic_ft_init_ext_parse_pragma_d(info, - keyword + 1, - keyword_length - 1, - &default_operator, - &consumed_keyword_length)) { - parsed = true; - consumed_keyword_length += 1; - keyword += consumed_keyword_length; - keyword_length -= consumed_keyword_length; - } else { - done = true; - } - break; - case 'W': - if (generic_ft_init_ext_parse_pragma_w(info, - keyword + 1, - keyword_length - 1, - index_column, - match_columns, - &consumed_keyword_length, - tmp_objects)) { - parsed = true; - weight_specified = true; - consumed_keyword_length += 1; - keyword += consumed_keyword_length; - keyword_length -= consumed_keyword_length; - } else { - done = true; - } - break; - default: - done = true; - break; - } - } - if (!parsed) { - keyword = keyword_original; - keyword_length = keyword_length_original; - } - } - // WORKAROUND: ignore the first '+' to support "+apple macintosh" pattern. - while (keyword_length > 0 && keyword[0] == ' ') { - keyword++; - keyword_length--; - } - if (keyword_length > 0 && keyword[0] == '+') { - keyword++; - keyword_length--; - } - if (!weight_specified) { - grn_expr_append_obj(info->ctx, match_columns, index_column, GRN_OP_PUSH, 1); - } - rc = grn_expr_parse(info->ctx, expression, - keyword, keyword_length, - match_columns, GRN_OP_MATCH, default_operator, - expr_flags_in_boolean_mode()); - if (rc) { - char error_message[MRN_MESSAGE_BUFFER_SIZE]; - snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, - "failed to parse fulltext search keyword: <%.*s>: <%s>", - keyword_length_original, keyword_original, - info->ctx->errbuf); - ulong action = THDVAR(ha_thd(), action_on_fulltext_query_error); - switch (static_cast(action)) { - case MRN_ACTION_ON_ERROR_ERROR: - my_message(ER_PARSE_ERROR, error_message, MYF(0)); - break; - case MRN_ACTION_ON_ERROR_ERROR_AND_LOG: - my_message(ER_PARSE_ERROR, error_message, MYF(0)); - GRN_LOG(info->ctx, GRN_LOG_ERROR, "%s", error_message); - break; - case MRN_ACTION_ON_ERROR_IGNORE: - break; - case MRN_ACTION_ON_ERROR_IGNORE_AND_LOG: - GRN_LOG(info->ctx, GRN_LOG_ERROR, "%s", error_message); - break; - } - } + mrn::QueryParser query_parser(info->ctx, + ha_thd(), + expression, + index_column, + KEY_N_KEY_PARTS(info->key_info), + match_columns); + grn_rc rc = query_parser.parse(key->ptr(), key->length()); DBUG_RETURN(rc); } @@ -8117,8 +8489,7 @@ String *key, grn_obj *index_column, grn_obj *match_columns, - grn_obj *expression, - grn_obj *tmp_objects) + grn_obj *expression) { MRN_DBUG_ENTER_METHOD(); @@ -8152,6 +8523,18 @@ info->result = grn_table_create(info->ctx, NULL, 0, NULL, GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC, grn_table, 0); + if (!info->result) { + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "[mroonga][ft-init] failed to create a table " + "to store matched records for one search: <%s>", + ctx->errbuf); + my_message(ER_ERROR_ON_READ, error_message, MYF(0)); + GRN_LOG(ctx, GRN_LOG_ERROR, "%s", error_message); + delete info; + DBUG_RETURN(NULL); + } + info->score_column = grn_obj_column(info->ctx, info->result, MRN_COLUMN_NAME_SCORE, strlen(MRN_COLUMN_NAME_SCORE)); @@ -8177,8 +8560,6 @@ grn_obj *expression, *expression_variable; GRN_EXPR_CREATE_FOR_QUERY(info->ctx, info->table, expression, expression_variable); - grn_obj tmp_objects; - GRN_PTR_INIT(&tmp_objects, GRN_OBJ_VECTOR, GRN_ID_NIL); grn_rc rc = GRN_SUCCESS; if (flags & FT_BOOL) { @@ -8186,15 +8567,13 @@ key, index_column, match_columns, - expression, - &tmp_objects); + expression); } else { rc = generic_ft_init_ext_prepare_expression_in_normal_mode(info, key, index_column, match_columns, - expression, - &tmp_objects); + expression); } if (rc == GRN_SUCCESS) { @@ -8210,12 +8589,6 @@ grn_obj_unlink(info->ctx, expression); grn_obj_unlink(info->ctx, match_columns); - uint n_tmp_objects = GRN_BULK_VSIZE(&tmp_objects) / sizeof(grn_obj *); - for (uint i = 0; i < n_tmp_objects; ++i) { - grn_obj_unlink(info->ctx, GRN_PTR_VALUE_AT(&tmp_objects, i)); - } - grn_obj_unlink(info->ctx, &tmp_objects); - DBUG_RETURN(info); } @@ -8223,7 +8596,7 @@ { MRN_DBUG_ENTER_METHOD(); - check_count_skip(0, 0, true); + check_count_skip(0); mrn_change_encoding(ctx, system_charset_info); grn_operator operation = GRN_OP_OR; @@ -8231,6 +8604,16 @@ matched_record_keys = grn_table_create(ctx, NULL, 0, NULL, GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC, grn_table, 0); + if (!matched_record_keys) { + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "[mroonga][ft-init] " + "failed to create a table to store all matched records: <%s>", + ctx->errbuf); + my_message(ER_ERROR_ON_READ, error_message, MYF(0)); + GRN_LOG(ctx, GRN_LOG_ERROR, "%s", error_message); + DBUG_RETURN(NULL); + } } grn_table_sort_key *sort_keys = NULL; @@ -8238,8 +8621,10 @@ longlong limit = -1; check_fast_order_limit(&sort_keys, &n_sort_keys, &limit); - struct st_mrn_ft_info *info = - generic_ft_init_ext_select(flags, key_nr, key); + struct st_mrn_ft_info *info = generic_ft_init_ext_select(flags, key_nr, key); + if (!info) { + DBUG_RETURN(NULL); + } grn_rc rc; rc = grn_table_setoperation(ctx, matched_record_keys, info->result, @@ -8253,6 +8638,9 @@ GRN_LOG(ctx, GRN_LOG_ERROR, "%s", error_message); } if (fast_order_limit) { + if (sorted_result) { + grn_obj_close(ctx, sorted_result); + } sorted_result = grn_table_create(ctx, NULL, 0, NULL, GRN_OBJ_TABLE_NO_KEY, NULL, @@ -8291,20 +8679,31 @@ FT_INFO *ha_mroonga::wrapper_ft_init_ext(uint flags, uint key_nr, String *key) { MRN_DBUG_ENTER_METHOD(); + FT_INFO *info = generic_ft_init_ext(flags, key_nr, key); + if (!info) { + DBUG_RETURN(NULL); + } + struct st_mrn_ft_info *mrn_ft_info = (struct st_mrn_ft_info *)info; mrn_ft_info->please = &mrn_wrapper_ft_vft; #ifdef HA_CAN_FULLTEXT_EXT mrn_ft_info->could_you = &mrn_wrapper_ft_vft_ext; #endif ++wrap_ft_init_count; + DBUG_RETURN(info); } FT_INFO *ha_mroonga::storage_ft_init_ext(uint flags, uint key_nr, String *key) { MRN_DBUG_ENTER_METHOD(); + FT_INFO *info = generic_ft_init_ext(flags, key_nr, key); + if (!info) { + DBUG_RETURN(NULL); + } + struct st_mrn_ft_info *mrn_ft_info = (struct st_mrn_ft_info *)info; mrn_ft_info->please = &mrn_storage_ft_vft; #ifdef HA_CAN_FULLTEXT_EXT @@ -8453,7 +8852,8 @@ const Item *reminder_cond = cond; if (!pushed_cond) { mrn::ConditionConverter converter(ctx, grn_table, true); - if (converter.find_match_against(cond) && converter.is_convertable(cond)) { + if (converter.count_match_against(cond) == 1 && + converter.is_convertable(cond)) { reminder_cond = NULL; } } @@ -8566,6 +8966,47 @@ DBUG_RETURN(false); } +bool ha_mroonga::is_foreign_key_field(const char *table_name, + const char *field_name) +{ + MRN_DBUG_ENTER_METHOD(); + + grn_obj *table = grn_ctx_get(ctx, table_name, -1); + if (!table) { + DBUG_RETURN(false); + } + + mrn::ColumnName column_name(field_name); + grn_obj *column = grn_obj_column(ctx, + table, + column_name.c_str(), + column_name.length()); + if (!column) { + DBUG_RETURN(false); + } + + grn_obj *range = grn_ctx_at(ctx, grn_obj_get_range(ctx, column)); + if (!range) { + DBUG_RETURN(false); + } + + if (!mrn::grn::is_table(range)) { + DBUG_RETURN(false); + } + + grn_obj *foreign_index_column; + mrn::IndexColumnName index_column_name(table_name, field_name); + foreign_index_column = grn_obj_column(ctx, range, + index_column_name.c_str(), + index_column_name.length()); + if (foreign_index_column) { + grn_obj_unlink(ctx, foreign_index_column); + DBUG_RETURN(true); + } + + DBUG_RETURN(false); +} + void ha_mroonga::push_warning_unsupported_spatial_index_search(enum ha_rkey_function flag) { char search_name[MRN_BUFFER_SIZE]; @@ -8745,7 +9186,7 @@ if (stat(entry->d_name, &file_status) != 0) { continue; } - if (!((file_status.st_mode & S_IFMT) & S_IFREG)) { + if (!((file_status.st_mode & S_IFMT) && S_IFREG)) { continue; } if (strncmp(entry->d_name, base_path, base_path_length) == 0) { @@ -8806,6 +9247,11 @@ grn_obj *index_table = grn_ctx_get(ctx, index_table_name.c_str(), index_table_name.length()); + if (!index_table) { + index_table = grn_ctx_get(ctx, + index_table_name.old_c_str(), + index_table_name.old_length()); + } if (index_table) { target_name_length = grn_obj_name(ctx, index_table, target_name, GRN_TABLE_MAX_KEY_SIZE); @@ -8953,7 +9399,9 @@ DBUG_RETURN(error); } -int ha_mroonga::drop_indexes_multiple(const char *table_name, grn_obj *table) +int ha_mroonga::drop_indexes_multiple(const char *table_name, + grn_obj *table, + const char *index_table_name_separator) { MRN_DBUG_ENTER_METHOD(); @@ -8961,7 +9409,7 @@ char index_table_name_prefix[GRN_TABLE_MAX_KEY_SIZE]; snprintf(index_table_name_prefix, GRN_TABLE_MAX_KEY_SIZE, - "%s%s", table_name, mrn::IndexTableName::SEPARATOR); + "%s%s", table_name, index_table_name_separator); grn_table_cursor *cursor = grn_table_cursor_open(ctx, grn_ctx_db(ctx), @@ -9050,7 +9498,12 @@ error = drop_indexes_normal(table_name, table.get()); if (error == 0) { - error = drop_indexes_multiple(table_name, table.get()); + error = drop_indexes_multiple(table_name, table.get(), + mrn::IndexTableName::SEPARATOR); + } + if (error == 0) { + error = drop_indexes_multiple(table_name, table.get(), + mrn::IndexTableName::OLD_SEPARATOR); } DBUG_RETURN(error); @@ -9177,6 +9630,26 @@ DBUG_RETURN(tokenizer); } +bool ha_mroonga::have_custom_normalizer(KEY *key) const +{ + MRN_DBUG_ENTER_METHOD(); + +#ifdef MRN_SUPPORT_CUSTOM_OPTIONS + if (key->option_struct && key->option_struct->normalizer) { + DBUG_RETURN(true); + } +#endif + + if (key->comment.length > 0) { + mrn::ParametersParser parser(key->comment.str, + key->comment.length); + parser.parse(); + DBUG_RETURN(parser["normalizer"] != NULL); + } + + DBUG_RETURN(false); +} + grn_obj *ha_mroonga::find_normalizer(KEY *key) { MRN_DBUG_ENTER_METHOD(); @@ -9223,7 +9696,7 @@ DBUG_RETURN(normalizer); } -bool ha_mroonga::find_index_column_flags(KEY *key, grn_obj_flags *index_column_flags) +bool ha_mroonga::find_index_column_flags(KEY *key, grn_column_flags *index_column_flags) { MRN_DBUG_ENTER_METHOD(); bool found = false; @@ -9604,154 +10077,51 @@ DBUG_RETURN(need_normalize_p); } -bool ha_mroonga::is_temporary_table_name(const char *name) const -{ - MRN_DBUG_ENTER_METHOD(); - DBUG_PRINT("info", ("mroonga: table name = %s", name)); -#ifdef MRN_USE_MYSQL_DATA_HOME - bool temporary_table_name_p = false; - if (name[0] != '.') { - int len = strlen(name); - int mysql_data_home_len = strlen(mysql_data_home); - if (len < mysql_data_home_len || - strncmp(name, mysql_data_home, mysql_data_home_len) || - !strchr(&name[mysql_data_home_len], FN_LIBCHAR)) { - temporary_table_name_p = true; - } - } -#else - bool temporary_table_name_p = (name[0] != '.'); -#endif - DBUG_RETURN(temporary_table_name_p); -} - -void ha_mroonga::check_count_skip(key_part_map start_key_part_map, - key_part_map end_key_part_map, bool fulltext) +void ha_mroonga::check_count_skip(key_part_map target_key_part_map) { MRN_DBUG_ENTER_METHOD(); if (!is_enable_optimization()) { - DBUG_PRINT("info", ("mroonga: count skip: optimization is disabled")); + GRN_LOG(ctx, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] optimization is disabled"); count_skip = false; DBUG_VOID_RETURN; } - st_select_lex *select_lex = table->pos_in_table_list->select_lex; - - if ( - thd_sql_command(ha_thd()) == SQLCOM_SELECT && - select_lex->item_list.elements == 1 && - !select_lex->group_list.elements && - !MRN_SELECT_LEX_GET_HAVING_COND(select_lex) && - select_lex->table_list.elements == 1 - ) { - Item *info = (Item *) select_lex->item_list.first_node()->info; - if ( - info->type() != Item::SUM_FUNC_ITEM || - ((Item_sum *) info)->sum_func() != Item_sum::COUNT_FUNC || - ((Item_sum *) info)->nest_level || - ((Item_sum *) info)->aggr_level || - ((Item_sum *) info)->max_arg_level != -1 || - ((Item_sum *) info)->max_sum_func_level != -1 - ) { - DBUG_PRINT("info", ("mroonga: count skip: sum func is not match")); - count_skip = false; - DBUG_VOID_RETURN; - } + if (thd_sql_command(ha_thd()) != SQLCOM_SELECT) { + GRN_LOG(ctx, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] not SELECT"); + count_skip = false; + DBUG_VOID_RETURN; + } - uint i = 0; - Item *where; - if (fulltext) { - DBUG_PRINT("info", ("mroonga: count skip: fulltext")); - where = MRN_SELECT_LEX_GET_WHERE_COND(select_lex); - if (!where || - where->type() != Item::FUNC_ITEM || - ((Item_func *)where)->functype() != Item_func::FT_FUNC) { - DBUG_PRINT("info", ("mroonga: count skip: ft func is not match")); - count_skip = false; - DBUG_VOID_RETURN; - } - if (select_lex->select_n_where_fields != 1) { - DBUG_PRINT("info", - ("mroonga: count skip: " - "where clause is not fulltext search only")); - count_skip = false; - DBUG_VOID_RETURN; - } - if (share->wrapper_mode && - !(wrap_handler->ha_table_flags() & HA_NO_TRANSACTIONS)) { - DBUG_PRINT("info", ("mroonga: count skip: transactional wrapper mode")); - count_skip = false; - DBUG_VOID_RETURN; - } - DBUG_PRINT("info", ("mroonga: count skip: skip enabled")); - count_skip = true; - mrn_count_skip++; - DBUG_VOID_RETURN; - } else if (share->wrapper_mode) { - DBUG_PRINT("info", ("mroonga: count skip: wrapper mode")); - count_skip = false; - DBUG_VOID_RETURN; - } else { - DBUG_PRINT("info", ("mroonga: count skip: without fulltext")); - uint key_nr = active_index; - KEY *key_info = &(table->key_info[key_nr]); - KEY_PART_INFO *key_part = key_info->key_part; - for (where = MRN_SELECT_LEX_GET_WHERE_COND(select_lex); - where; - where = where->next) { - Item *target = where; - - if (where->type() == Item::FUNC_ITEM) { - Item_func *func_item = static_cast(where); - if (func_item->argument_count() == 0) { - break; - } - target = func_item->key_item(); - where = where->next; - if (func_item->arguments()[0] == where) { - uint n_args = func_item->argument_count(); - for (; n_args > 0; --n_args) { - where = where->next; - } - } - } + if (share->wrapper_mode && + !(wrap_handler->ha_table_flags() & HA_NO_TRANSACTIONS)) { + GRN_LOG(ctx, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] wrapped engine is transactional"); + count_skip = false; + DBUG_VOID_RETURN; + } - if (target->type() == Item::FIELD_ITEM) - { - Field *field = ((Item_field *)target)->field; - if (!field) - break; - if (field->table != table) - break; - uint j; - for (j = 0; j < KEY_N_KEY_PARTS(key_info); j++) { - if (key_part[j].field == field) - { - if (!(start_key_part_map >> j) && !(end_key_part_map >> j)) - j = KEY_N_KEY_PARTS(key_info); - else - i++; - break; - } - } - if (j >= KEY_N_KEY_PARTS(key_info)) - break; - } - if (i >= select_lex->select_n_where_fields) - { - DBUG_PRINT("info", ("mroonga: count skip: skip enabled")); - count_skip = true; - mrn_count_skip++; - DBUG_VOID_RETURN; - } - } - DBUG_PRINT("info", ("mroonga: count skip: skip disabled")); - } + st_select_lex *select_lex = table->pos_in_table_list->select_lex; + KEY *key_info = NULL; + if (active_index != MAX_KEY) { + key_info = &(table->key_info[active_index]); + } + mrn::CountSkipChecker checker(ctx, + table, + select_lex, + key_info, + target_key_part_map, + !share->wrapper_mode); + if (checker.check()) { + count_skip = true; + mrn_count_skip++; + DBUG_VOID_RETURN; + } else { + count_skip = false; + DBUG_VOID_RETURN; } - DBUG_PRINT("info", ("mroonga: count skip: select type is not match")); - count_skip = false; - DBUG_VOID_RETURN; } bool ha_mroonga::is_grn_zero_column_value(grn_obj *column, grn_obj *value) @@ -9861,15 +10231,22 @@ if (!converter.is_convertable(where)) { DBUG_PRINT("info", ("mroonga: fast_order_limit = false: " - "not groonga layer condition search")); + "not Groonga layer condition search")); + fast_order_limit = false; + DBUG_VOID_RETURN; + } + unsigned int n_match_againsts = converter.count_match_against(where); + if (n_match_againsts == 0) { + DBUG_PRINT("info", + ("mroonga: fast_order_limit = false: " + "Groonga layer condition but not fulltext search")); fast_order_limit = false; DBUG_VOID_RETURN; } - match_against = converter.find_match_against(where); - if (!match_against) { + if (n_match_againsts > 1) { DBUG_PRINT("info", ("mroonga: fast_order_limit = false: " - "groonga layer condition but not fulltext search")); + "MATCH AGAINST must be only one")); fast_order_limit = false; DBUG_VOID_RETURN; } @@ -9890,8 +10267,7 @@ if (item->type() == Item::FIELD_ITEM) { Field *field = static_cast(item)->field; - const char *column_name = field->field_name; - int column_name_size = strlen(column_name); + mrn::ColumnName column_name(field->field_name); if (should_normalize(field)) { @@ -9906,7 +10282,8 @@ if (is_storage_mode) { (*sort_keys)[i].key = grn_obj_column(ctx, matched_record_keys, - column_name, column_name_size); + column_name.c_str(), + column_name.length()); } else { if (is_primary_key_field(field)) { (*sort_keys)[i].key = grn_obj_column(ctx, matched_record_keys, @@ -10365,6 +10742,20 @@ DBUG_RETURN(error); } +#ifdef MRN_HAVE_MYSQL_TYPE_JSON +int ha_mroonga::generic_store_bulk_json(Field *field, grn_obj *buf) +{ + MRN_DBUG_ENTER_METHOD(); + int error = 0; + String buffer; + Field_json *json = static_cast(field); + String *value = json->val_str(&buffer, NULL); + grn_obj_reinit(ctx, buf, GRN_DB_TEXT, 0); + GRN_TEXT_SET(ctx, buf, value->ptr(), value->length()); + DBUG_RETURN(error); +} +#endif + int ha_mroonga::generic_store_bulk(Field *field, grn_obj *buf) { MRN_DBUG_ENTER_METHOD(); @@ -10455,6 +10846,11 @@ case MYSQL_TYPE_GEOMETRY: error = generic_store_bulk_geometry(field, buf); break; +#ifdef MRN_HAVE_MYSQL_TYPE_JSON + case MYSQL_TYPE_JSON: + error = generic_store_bulk_json(field, buf); + break; +#endif default: error = HA_ERR_UNSUPPORTED; break; @@ -10815,6 +11211,18 @@ DBUG_VOID_RETURN; } +#ifdef MRN_HAVE_MYSQL_TYPE_JSON +void ha_mroonga::storage_store_field_json(Field *field, + const char *value, + uint value_length) +{ + MRN_DBUG_ENTER_METHOD(); + Field_json *json = static_cast(field); + json->store(value, value_length, field->charset()); + DBUG_VOID_RETURN; +} +#endif + void ha_mroonga::storage_store_field(Field *field, const char *value, uint value_length) { @@ -10898,6 +11306,11 @@ case MYSQL_TYPE_GEOMETRY: storage_store_field_geometry(field, value, value_length); break; +#ifdef MRN_HAVE_MYSQL_TYPE_JSON + case MYSQL_TYPE_JSON: + storage_store_field_json(field, value, value_length); + break; +#endif } } @@ -10906,6 +11319,10 @@ { MRN_DBUG_ENTER_METHOD(); + if (!grn_columns[nth_column]) { + DBUG_VOID_RETURN; + } + grn_obj *column = grn_columns[nth_column]; grn_id range_id = grn_obj_get_range(ctx, column); grn_obj *range = grn_column_ranges[nth_column]; @@ -11041,6 +11458,11 @@ for (i = 0; i < n_columns; i++) { Field *field = table->field[i]; +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + continue; + } +#endif if ( !bitmap_is_set(table->read_set, field->field_index) && !bitmap_is_set(table->write_set, field->field_index) && @@ -11658,8 +12080,10 @@ } int ha_mroonga::storage_encode_multiple_column_key_range(KEY *key_info, - const key_range *start, - const key_range *end, + const uchar *start, + uint start_size, + const uchar *end, + uint end_size, uchar *min_buffer, uint *min_encoded_size, uchar *max_buffer, @@ -11671,14 +12095,14 @@ uint encoded_key_size = codec.size(); if (start) { memset(min_buffer, 0, encoded_key_size); - error = codec.encode(start->key, start->length, + error = codec.encode(start, start_size, min_buffer, min_encoded_size); // TODO: handle error? *min_encoded_size = encoded_key_size; } if (end) { memset(max_buffer, 0xff, encoded_key_size); - error = codec.encode(end->key, end->length, + error = codec.encode(end, end_size, max_buffer, max_encoded_size); // TODO: handle error? *max_encoded_size = encoded_key_size; @@ -11686,6 +12110,40 @@ DBUG_RETURN(error); } +int ha_mroonga::storage_encode_multiple_column_key_range(KEY *key_info, + const key_range *start, + const key_range *end, + uchar *min_buffer, + uint *min_encoded_size, + uchar *max_buffer, + uint *max_encoded_size) +{ + MRN_DBUG_ENTER_METHOD(); + + const uchar *start_data = NULL; + uint start_size = 0; + const uchar *end_data = NULL; + uint end_size = 0; + if (start) { + start_data = start->key; + start_size = start->length; + } + if (end) { + end_data = end->key; + end_size = end->length; + } + + int error = storage_encode_multiple_column_key_range(key_info, + start_data, start_size, + end_data, end_size, + min_buffer, + min_encoded_size, + max_buffer, + max_encoded_size); + + DBUG_RETURN(error); +} + int ha_mroonga::generic_reset() { MRN_DBUG_ENTER_METHOD(); @@ -12349,6 +12807,29 @@ { MRN_DBUG_ENTER_METHOD(); int error = generic_delete_all_rows(grn_table, __FUNCTION__); + if (!error) { + uint n_keys = table->s->keys; + for (uint i = 0; i < n_keys; i++) { + if (i == table->s->primary_key) { + continue; + } + + KEY *key_info = &(table->key_info[i]); + if (!(key_info->flags & HA_NOSAME)) { + continue; + } + + grn_obj *index_table = grn_index_tables[i]; + if (!index_table) { + continue; + } + + error = generic_delete_all_rows(index_table, __FUNCTION__); + if (error) { + break; + } + } + } DBUG_RETURN(error); } @@ -12512,6 +12993,10 @@ } else { error = storage_truncate(); } + if (!error) { + operations_->clear(table->s->table_name.str, + table->s->table_name.length); + } DBUG_RETURN(error); } @@ -12592,6 +13077,7 @@ DBUG_RETURN(time); } +#ifdef MRN_HANDLER_HAVE_KEYS_TO_USE_FOR_SCANNING const key_map *ha_mroonga::wrapper_keys_to_use_for_scanning() { const key_map *res; @@ -12622,6 +13108,7 @@ } DBUG_RETURN(key_map); } +#endif ha_rows ha_mroonga::wrapper_estimate_rows_upper_bound() { @@ -12776,11 +13263,16 @@ for (i = 0; i < tmp_table_share->keys; i++) { const char *mysql_index_name = tmp_table_share->key_info[i].name; mrn::IndexTableName from_index_table_name(from_table_name, mysql_index_name); - mrn::IndexTableName to_index_table_name(to_table_name, mysql_index_name); + mrn::IndexTableName to_index_table_name(to_table_name, mysql_index_name); grn_obj *index_table; index_table = grn_ctx_get(ctx, from_index_table_name.c_str(), from_index_table_name.length()); + if (!index_table) { + index_table = grn_ctx_get(ctx, + from_index_table_name.old_c_str(), + from_index_table_name.old_length()); + } if (index_table) { rc = grn_table_rename(ctx, index_table, to_index_table_name.c_str(), @@ -12846,6 +13338,11 @@ index_table = grn_ctx_get(ctx, from_index_table_name.c_str(), from_index_table_name.length()); + if (!index_table) { + index_table = grn_ctx_get(ctx, + from_index_table_name.old_c_str(), + from_index_table_name.old_length()); + } if (index_table) { rc = grn_table_rename(ctx, index_table, to_index_table_name.c_str(), @@ -12899,34 +13396,32 @@ MRN_DBUG_ENTER_METHOD(); for (i = 0; i < n_columns; ++i) { Field *field = tmp_table_share->field[i]; - const char *column_name = field->field_name; - uint column_name_size = strlen(column_name); - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + if (!is_foreign_key_field(from_table_name, field->field_name)) { continue; } - column = grn_obj_column(ctx, grn_table, - column_name, column_name_size); + grn_obj *grn_from_table = grn_ctx_get(ctx, from_table_name, -1); + mrn::ColumnName column_name(field->field_name); + column = grn_obj_column(ctx, + grn_from_table, + column_name.c_str(), + column_name.length()); if (!column) { continue; } grn_id ref_table_id = grn_obj_get_range(ctx, column); grn_obj *ref_table = grn_ctx_at(ctx, ref_table_id); - if (ref_table->header.type != GRN_TABLE_NO_KEY && - ref_table->header.type != GRN_TABLE_HASH_KEY && - ref_table->header.type != GRN_TABLE_PAT_KEY && - ref_table->header.type != GRN_TABLE_DAT_KEY) { - continue; - } - mrn::IndexColumnName from_index_column_name(from_table_name, column_name); + mrn::IndexColumnName from_index_column_name(from_table_name, + column_name.c_str()); ref_column = grn_obj_column(ctx, ref_table, from_index_column_name.c_str(), from_index_column_name.length()); if (!ref_column) { continue; } - mrn::IndexColumnName to_index_column_name(to_table_name, column_name); + mrn::IndexColumnName to_index_column_name(to_table_name, + column_name.c_str()); rc = grn_column_rename(ctx, ref_column, to_index_column_name.c_str(), to_index_column_name.length()); @@ -13109,6 +13604,11 @@ grn_obj *index_table = grn_ctx_get(ctx, index_table_name.c_str(), index_table_name.length()); + if (!index_table) { + index_table = grn_ctx_get(ctx, + index_table_name.old_c_str(), + index_table_name.old_length()); + } if (index_table) { grn_obj_remove(ctx, index_table); } @@ -13125,6 +13625,42 @@ DBUG_RETURN(error); } +int ha_mroonga::wrapper_disable_indexes_mroonga(uint mode) +{ + int error = 0; + MRN_DBUG_ENTER_METHOD(); + if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE || mode == HA_KEY_SWITCH_ALL) { + uint i; + for (i = 0; i < table_share->keys; i++) { + if (i == table->s->primary_key) { + continue; + } + if (share->wrap_key_nr[i] < MAX_KEY) { + continue; + } + if (!grn_index_tables[i]) { + DBUG_PRINT("info", ("mroonga: keys are disabled already %u", i)); + DBUG_RETURN(0); + } + } + KEY *key_info = table_share->key_info; + for (i = 0; i < table_share->keys; i++) { + if (!(key_info[i].flags & HA_FULLTEXT) && + !mrn_is_geo_key(&key_info[i])) { + continue; + } + + int sub_error = generic_disable_index(i, key_info); + if (error != 0 && sub_error != 0) { + error = sub_error; + } + } + } else { + error = HA_ERR_WRONG_COMMAND; + } + DBUG_RETURN(error); +} + int ha_mroonga::wrapper_disable_indexes(uint mode) { int error = 0; @@ -13138,35 +13674,7 @@ error = 0; } if (!error) { - if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE || mode == HA_KEY_SWITCH_ALL) { - uint i; - for (i = 0; i < table_share->keys; i++) { - if (i == table->s->primary_key) { - continue; - } - if (share->wrap_key_nr[i] < MAX_KEY) { - continue; - } - if (!grn_index_tables[i]) { - DBUG_PRINT("info", ("mroonga: keys are disabled already %u", i)); - DBUG_RETURN(0); - } - } - KEY *key_info = table_share->key_info; - for (i = 0; i < table_share->keys; i++) { - if (!(key_info[i].flags & HA_FULLTEXT) && - !mrn_is_geo_key(&key_info[i])) { - continue; - } - - int sub_error = generic_disable_index(i, key_info); - if (error != 0 && sub_error != 0) { - error = sub_error; - } - } - } else { - error = HA_ERR_WRONG_COMMAND; - } + error = wrapper_disable_indexes_mroonga(mode); } DBUG_RETURN(error); } @@ -13220,9 +13728,9 @@ DBUG_RETURN(error); } -int ha_mroonga::wrapper_enable_indexes(uint mode) +int ha_mroonga::wrapper_enable_indexes_mroonga(uint mode) { - int error = 0, tmp_error = 0; + int error = 0; MRN_DBUG_ENTER_METHOD(); if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE || mode == HA_KEY_SWITCH_ALL) { uint i, j; @@ -13293,8 +13801,17 @@ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables); MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns); } else { - tmp_error = HA_ERR_WRONG_COMMAND; + error = HA_ERR_WRONG_COMMAND; } + DBUG_RETURN(error); +} + +int ha_mroonga::wrapper_enable_indexes(uint mode) +{ + int error = 0; + MRN_DBUG_ENTER_METHOD(); + + int mroonga_error = wrapper_enable_indexes_mroonga(mode); MRN_SET_WRAP_SHARE_KEY(share, table->s); MRN_SET_WRAP_TABLE_KEY(this, table); @@ -13302,7 +13819,7 @@ MRN_SET_BASE_SHARE_KEY(share, table->s); MRN_SET_BASE_TABLE_KEY(this, table); if (error == HA_ERR_WRONG_COMMAND) { - error = tmp_error; + error = mroonga_error; } DBUG_RETURN(error); } @@ -13416,10 +13933,10 @@ { MRN_DBUG_ENTER_METHOD(); mrn::DatabaseRepairer repairer(ctx, thd); - if (repairer.repair()) { - DBUG_RETURN(HA_ADMIN_OK); - } else { + if (repairer.is_corrupt()) { DBUG_RETURN(HA_ADMIN_CORRUPT); + } else { + DBUG_RETURN(HA_ADMIN_OK); } } @@ -13575,10 +14092,16 @@ "%s.%s", index_table_name.c_str(), INDEX_COLUMN_NAME); remove_grn_obj_force(index_column_full_name); remove_grn_obj_force(index_table_name.c_str()); + + char index_column_full_old_name[MRN_MAX_PATH_SIZE]; + snprintf(index_column_full_old_name, MRN_MAX_PATH_SIZE, + "%s.%s", index_table_name.old_c_str(), INDEX_COLUMN_NAME); + remove_grn_obj_force(index_column_full_old_name); + remove_grn_obj_force(index_table_name.old_c_str()); + mrn_set_bitmap_by_key(table->read_set, &key_info[i]); } - error = wrapper_create_index(table_share->normalized_path.str, table, - NULL, share, mapper.table_name()); + error = wrapper_create_index(table_share->normalized_path.str, table, share); if (error) DBUG_RETURN(error); error = wrapper_open_indexes(table_share->normalized_path.str); @@ -13627,6 +14150,12 @@ "%s.%s", index_table_name.c_str(), INDEX_COLUMN_NAME); remove_grn_obj_force(index_column_full_name); remove_grn_obj_force(index_table_name.c_str()); + + char index_column_full_old_name[MRN_MAX_PATH_SIZE]; + snprintf(index_column_full_old_name, MRN_MAX_PATH_SIZE, + "%s.%s", index_table_name.old_c_str(), INDEX_COLUMN_NAME); + remove_grn_obj_force(index_column_full_old_name); + remove_grn_obj_force(index_table_name.old_c_str()); } int error; @@ -13969,8 +14498,8 @@ ( Alter_inplace_info::ADD_COLUMN | Alter_inplace_info::DROP_COLUMN | - Alter_inplace_info::ALTER_COLUMN_TYPE | - Alter_inplace_info::ALTER_COLUMN_ORDER | + MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_TYPE | + MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_ORDER | Alter_inplace_info::ALTER_COLUMN_NULLABLE | Alter_inplace_info::ALTER_COLUMN_NOT_NULLABLE | Alter_inplace_info::ALTER_COLUMN_STORAGE_TYPE | @@ -14082,15 +14611,22 @@ Alter_inplace_info *ha_alter_info) { MRN_DBUG_ENTER_METHOD(); + Alter_inplace_info::HA_ALTER_FLAGS explicitly_unsupported_flags = + Alter_inplace_info::ADD_FOREIGN_KEY | + Alter_inplace_info::DROP_FOREIGN_KEY; Alter_inplace_info::HA_ALTER_FLAGS supported_flags = Alter_inplace_info::ADD_INDEX | Alter_inplace_info::DROP_INDEX | Alter_inplace_info::ADD_UNIQUE_INDEX | Alter_inplace_info::DROP_UNIQUE_INDEX | - Alter_inplace_info::ADD_COLUMN | + MRN_ALTER_INPLACE_INFO_ADD_VIRTUAL_COLUMN | + MRN_ALTER_INPLACE_INFO_ADD_STORED_BASE_COLUMN | + MRN_ALTER_INPLACE_INFO_ADD_STORED_GENERATED_COLUMN | Alter_inplace_info::DROP_COLUMN | Alter_inplace_info::ALTER_COLUMN_NAME; - if (ha_alter_info->handler_flags & supported_flags) { + if (ha_alter_info->handler_flags & explicitly_unsupported_flags) { + DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); + } else if (ha_alter_info->handler_flags & supported_flags) { DBUG_RETURN(HA_ALTER_INPLACE_EXCLUSIVE_LOCK); } else { DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); @@ -14284,18 +14820,11 @@ need_fill_index = true; } if (!error && need_fill_index) { - my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(table->record[0], altered_table->record[0]); - uint n_columns = altered_table->s->fields; - for (i = 0; i < n_columns; ++i) { - Field *field = altered_table->field[i]; - field->move_field_offset(ptr_diff); - } + my_ptrdiff_t diff = + PTR_BYTE_DIFF(table->record[0], altered_table->record[0]); + mrn::TableFieldsOffsetMover mover(altered_table, diff); error = wrapper_fill_indexes(ha_thd(), altered_table->key_info, index_columns, ha_alter_info->key_count); - for (i = 0; i < n_columns; ++i) { - Field *field = altered_table->field[i]; - field->move_field_offset(-ptr_diff); - } } bitmap_set_all(table->read_set); @@ -14354,31 +14883,12 @@ DBUG_RETURN(result); } -bool ha_mroonga::storage_inplace_alter_table_index( +bool ha_mroonga::storage_inplace_alter_table_add_index( TABLE *altered_table, Alter_inplace_info *ha_alter_info) { MRN_DBUG_ENTER_METHOD(); - bool have_error = false; - int error = 0; - uint n_keys; - uint i, j = 0; - KEY *key_info = table_share->key_info; - mrn::PathMapper mapper(share->table_name); - n_keys = ha_alter_info->index_drop_count; - for (i = 0; i < n_keys; ++i) { - KEY *key = ha_alter_info->index_drop_buffer[i]; - while (strcmp(key_info[j].name, key->name)) { - ++j; - } - error = drop_index(share, j); - if (error) - DBUG_RETURN(true); - grn_index_tables[j] = NULL; - grn_index_columns[j] = NULL; - } - MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables, ha_alter_info->key_count); MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_columns, @@ -14424,11 +14934,11 @@ KEY *p_key_info = &table->key_info[table_share->primary_key]; mrn_set_bitmap_by_key(table->read_set, p_key_info); } - n_keys = ha_alter_info->index_add_count; - for (i = 0; i < n_keys; ++i) { + int error = 0; + uint n_keys = ha_alter_info->index_add_count; + for (uint i = 0; i < n_keys; ++i) { uint key_pos = ha_alter_info->index_add_buffer[i]; - KEY *key = - &altered_table->key_info[key_pos]; + KEY *key = &altered_table->key_info[key_pos]; if (share->disable_keys && !(key->flags & HA_NOSAME)) { continue; // key is disabled } @@ -14437,6 +14947,7 @@ break; } DBUG_PRINT("info", ("mroonga: add key pos=%u", key_pos)); + mrn::PathMapper mapper(share->table_name); if ((error = storage_create_index(table, mapper.table_name(), grn_table, tmp_share, key, index_tables, index_columns, key_pos))) @@ -14464,12 +14975,9 @@ } } if (!error && have_multiple_column_index) { - my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(table->record[0], altered_table->record[0]); - uint n_columns = altered_table->s->fields; - for (i = 0; i < n_columns; ++i) { - Field *field = altered_table->field[i]; - field->move_field_offset(ptr_diff); - } + my_ptrdiff_t diff = + PTR_BYTE_DIFF(table->record[0], altered_table->record[0]); + mrn::TableFieldsOffsetMover mover(altered_table, diff); error = storage_add_index_multiple_columns(altered_table->key_info, ha_alter_info->key_count, index_tables, @@ -14480,17 +14988,14 @@ } else if (error) { my_message(error, "failed to create multiple column index", MYF(0)); } - for (i = 0; i < n_columns; ++i) { - Field *field = altered_table->field[i]; - field->move_field_offset(-ptr_diff); - } } bitmap_set_all(table->read_set); + bool have_error = false; if (error) { n_keys = ha_alter_info->index_add_count; - for (i = 0; i < n_keys; ++i) { + for (uint i = 0; i < n_keys; ++i) { uint key_pos = ha_alter_info->index_add_buffer[i]; KEY *key = &altered_table->key_info[key_pos]; @@ -14513,6 +15018,33 @@ DBUG_RETURN(have_error); } +bool ha_mroonga::storage_inplace_alter_table_drop_index( + TABLE *altered_table, + Alter_inplace_info *ha_alter_info) +{ + MRN_DBUG_ENTER_METHOD(); + + bool have_error = false; + uint n_keys; + uint i, j = 0; + KEY *key_info = table_share->key_info; + mrn::PathMapper mapper(share->table_name); + n_keys = ha_alter_info->index_drop_count; + for (i = 0; i < n_keys; ++i) { + KEY *key = ha_alter_info->index_drop_buffer[i]; + while (strcmp(key_info[j].name, key->name) != 0) { + ++j; + } + int error = drop_index(share, j); + if (error != 0) + DBUG_RETURN(true); + grn_index_tables[j] = NULL; + grn_index_columns[j] = NULL; + } + + DBUG_RETURN(have_error); +} + bool ha_mroonga::storage_inplace_alter_table_add_column( TABLE *altered_table, Alter_inplace_info *ha_alter_info) @@ -14566,9 +15098,14 @@ } Field *field = altered_table->s->field[i]; - const char *column_name = field->field_name; - int column_name_size = strlen(column_name); +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field)) { + continue; + } +#endif + + mrn::ColumnName column_name(field->field_name); int error = mrn_add_column_param(tmp_share, field, i); if (error) { have_error = true; @@ -14593,20 +15130,114 @@ char *col_path = NULL; // we don't specify path grn_obj *column_obj = - grn_column_create(ctx, table_obj, column_name, column_name_size, + grn_column_create(ctx, table_obj, + column_name.c_str(), + column_name.length(), col_path, col_flags, col_type); if (ctx->rc) { error = ER_WRONG_COLUMN_NAME; my_message(error, ctx->errbuf, MYF(0)); have_error = true; - } - if (column_obj) { - grn_obj_unlink(ctx, column_obj); + break; } - if (have_error) { - break; +#ifdef MRN_SUPPORT_GENERATED_COLUMNS + if (MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field)) { +# ifndef MRN_MARIADB_P + MY_BITMAP generated_column_bitmap; + if (bitmap_init(&generated_column_bitmap, NULL, + altered_table->s->fields, false)) { + error = HA_ERR_OUT_OF_MEM; + my_message(ER_OUTOFMEMORY, + "mroonga: storage: " + "failed to allocate memory for getting generated value", + MYF(0)); + have_error = true; + grn_obj_remove(ctx, column_obj); + break; + } + mrn::SmartBitmap smart_generated_column_bitmap(&generated_column_bitmap); + bitmap_set_bit(&generated_column_bitmap, field->field_index); +# endif + + my_ptrdiff_t diff = + PTR_BYTE_DIFF(table->record[0], altered_table->record[0]); + mrn::TableFieldsOffsetMover mover(altered_table, diff); + + error = storage_rnd_init(true); + if (error) { + have_error = true; + grn_obj_remove(ctx, column_obj); + break; + } + + Field *altered_field = altered_table->field[i]; + grn_obj new_value; + GRN_VOID_INIT(&new_value); + mrn::SmartGrnObj smart_new_value(ctx, &new_value); + while (!have_error) { + int next_error = storage_rnd_next(table->record[0]); + if (next_error == HA_ERR_END_OF_FILE) { + break; + } else if (next_error != 0) { + error = next_error; + have_error = true; + grn_obj_remove(ctx, column_obj); + break; + } + +# ifdef MRN_MARIADB_P + MRN_GENERATED_COLUMNS_UPDATE_VIRTUAL_FIELD(altered_table, altered_field); +# else + if (update_generated_write_fields(&generated_column_bitmap, altered_table)) { + error = ER_ERROR_ON_WRITE; + my_message(error, + "mroonga: storage: " + "failed to update generated value for updating column", + MYF(0)); + have_error = true; + grn_obj_remove(ctx, column_obj); + break; + } +# endif + + error = mrn_change_encoding(ctx, altered_field->charset()); + if (error) { + my_message(error, + "mroonga: storage: " + "failed to change encoding to store generated value", + MYF(0)); + have_error = true; + grn_obj_remove(ctx, column_obj); + break; + } + error = generic_store_bulk(altered_field, &new_value); + if (error) { + my_message(error, + "mroonga: storage: " + "failed to get generated value for updating column", + MYF(0)); + have_error = true; + grn_obj_remove(ctx, column_obj); + break; + } + + grn_obj_set_value(ctx, column_obj, record_id, &new_value, GRN_OBJ_SET); + if (ctx->rc) { + error = ER_ERROR_ON_WRITE; + my_message(error, ctx->errbuf, MYF(0)); + break; + } + } + + int end_error = storage_rnd_end(); + if (end_error != 0 && error == 0) { + error = end_error; + grn_obj_remove(ctx, column_obj); + break; + } } +#endif } grn_obj_unlink(ctx, table_obj); @@ -14736,16 +15367,14 @@ have_error = true; } - Alter_inplace_info::HA_ALTER_FLAGS index_related_flags = - Alter_inplace_info::ADD_INDEX | + Alter_inplace_info::HA_ALTER_FLAGS drop_index_related_flags = Alter_inplace_info::DROP_INDEX | - Alter_inplace_info::ADD_UNIQUE_INDEX | Alter_inplace_info::DROP_UNIQUE_INDEX | - Alter_inplace_info::ADD_PK_INDEX | Alter_inplace_info::DROP_PK_INDEX; if (!have_error && - (ha_alter_info->handler_flags & index_related_flags)) { - have_error = storage_inplace_alter_table_index(altered_table, ha_alter_info); + (ha_alter_info->handler_flags & drop_index_related_flags)) { + have_error = storage_inplace_alter_table_drop_index(altered_table, + ha_alter_info); } Alter_inplace_info::HA_ALTER_FLAGS add_column_related_flags = @@ -14769,6 +15398,16 @@ have_error = storage_inplace_alter_table_rename_column(altered_table, ha_alter_info); } + Alter_inplace_info::HA_ALTER_FLAGS add_index_related_flags = + Alter_inplace_info::ADD_INDEX | + Alter_inplace_info::ADD_UNIQUE_INDEX | + Alter_inplace_info::ADD_PK_INDEX; + if (!have_error && + (ha_alter_info->handler_flags & add_index_related_flags)) { + have_error = storage_inplace_alter_table_add_index(altered_table, + ha_alter_info); + } + DBUG_RETURN(have_error); } @@ -15874,26 +16513,22 @@ create_info_str.length(0); for (i = 0; i < n_columns; ++i) { Field *field = table_share->field[i]; - const char *column_name = field->field_name; - uint column_name_size = strlen(column_name); - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + if (!is_foreign_key_field(table_share->table_name.str, + field->field_name)) { continue; } - column = grn_obj_column(ctx, grn_table, - column_name, column_name_size); + mrn::ColumnName column_name(field->field_name); + column = grn_obj_column(ctx, + grn_table, + column_name.c_str(), + column_name.length()); if (!column) { continue; } grn_id ref_table_id = grn_obj_get_range(ctx, column); grn_obj *ref_table = grn_ctx_at(ctx, ref_table_id); - if (ref_table->header.type != GRN_TABLE_NO_KEY && - ref_table->header.type != GRN_TABLE_HASH_KEY && - ref_table->header.type != GRN_TABLE_PAT_KEY && - ref_table->header.type != GRN_TABLE_DAT_KEY) { - continue; - } char ref_table_buff[NAME_LEN + 1]; int ref_table_name_length = grn_obj_name(ctx, ref_table, ref_table_buff, NAME_LEN); @@ -15903,14 +16538,18 @@ DBUG_RETURN(NULL); } create_info_str.q_append(",\n CONSTRAINT ", 15); - append_identifier(ha_thd(), &create_info_str, column_name, - column_name_size); + append_identifier(ha_thd(), + &create_info_str, + column_name.c_str(), + column_name.length()); if (create_info_str.reserve(14)) { DBUG_RETURN(NULL); } create_info_str.q_append(" FOREIGN KEY (", 14); - append_identifier(ha_thd(), &create_info_str, column_name, - column_name_size); + append_identifier(ha_thd(), + &create_info_str, + column_name.c_str(), + column_name.length()); if (create_info_str.reserve(13)) { DBUG_RETURN(NULL); } @@ -16081,37 +16720,35 @@ MRN_DBUG_ENTER_METHOD(); for (i = 0; i < n_columns; ++i) { Field *field = table_share->field[i]; - const char *column_name = field->field_name; - uint column_name_size = strlen(column_name); - if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) { + if (!is_foreign_key_field(table_share->table_name.str, field->field_name)) { continue; } - column = grn_obj_column(ctx, grn_table, - column_name, column_name_size); + mrn::ColumnName column_name(field->field_name); + column = grn_obj_column(ctx, + grn_table, + column_name.c_str(), + column_name.length()); if (!column) { continue; } grn_id ref_table_id = grn_obj_get_range(ctx, column); grn_obj *ref_table = grn_ctx_at(ctx, ref_table_id); - if (ref_table->header.type != GRN_TABLE_NO_KEY && - ref_table->header.type != GRN_TABLE_HASH_KEY && - ref_table->header.type != GRN_TABLE_PAT_KEY && - ref_table->header.type != GRN_TABLE_DAT_KEY) { - continue; - } FOREIGN_KEY_INFO f_key_info; - f_key_info.foreign_id = thd_make_lex_string(thd, NULL, column_name, - column_name_size, TRUE); + f_key_info.foreign_id = thd_make_lex_string(thd, + NULL, + column_name.c_str(), + column_name.length(), + TRUE); f_key_info.foreign_db = thd_make_lex_string(thd, NULL, - table_share->db.str, - table_share->db.length, - TRUE); + table_share->db.str, + table_share->db.length, + TRUE); f_key_info.foreign_table = thd_make_lex_string(thd, NULL, - table_share->table_name.str, - table_share->table_name.length, - TRUE); + table_share->table_name.str, + table_share->table_name.length, + TRUE); f_key_info.referenced_db = f_key_info.foreign_db; char ref_table_buff[NAME_LEN + 1]; @@ -16124,14 +16761,22 @@ ref_table_buff, ref_table_name_length, TRUE); +#ifdef MRN_FOREIGN_KEY_USE_METHOD_ENUM + f_key_info.update_method = FK_OPTION_RESTRICT; + f_key_info.delete_method = FK_OPTION_RESTRICT; +#else f_key_info.update_method = thd_make_lex_string(thd, NULL, "RESTRICT", 8, TRUE); f_key_info.delete_method = thd_make_lex_string(thd, NULL, "RESTRICT", 8, TRUE); +#endif f_key_info.referenced_key_name = thd_make_lex_string(thd, NULL, "PRIMARY", 7, TRUE); - LEX_STRING *field_name = thd_make_lex_string(thd, NULL, column_name, - column_name_size, TRUE); + LEX_STRING *field_name = thd_make_lex_string(thd, + NULL, + column_name.c_str(), + column_name.length(), + TRUE); f_key_info.foreign_fields.push_back(field_name); char ref_path[FN_REFLEN + 1]; @@ -16333,6 +16978,7 @@ DBUG_VOID_RETURN; } +#ifdef MRN_RBR_UPDATE_NEED_ALL_COLUMNS bool ha_mroonga::check_written_by_row_based_binlog() { MRN_DBUG_ENTER_METHOD(); @@ -16366,6 +17012,7 @@ DBUG_RETURN(true); } +#endif #ifdef MRN_HAVE_HA_REBIND_PSI void ha_mroonga::wrapper_unbind_psi() @@ -16495,3 +17142,20 @@ #ifdef __cplusplus } #endif + +namespace mrn { + namespace variables { + ulonglong get_boolean_mode_syntax_flags(THD *thd) { + ulonglong flags = BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT; +#ifdef MRN_SUPPORT_THDVAR_SET + flags = THDVAR(thd, boolean_mode_syntax_flags); +#endif + return flags; + } + + ActionOnError get_action_on_fulltext_query_error(THD *thd) { + ulong action = THDVAR(thd, action_on_fulltext_query_error); + return static_cast(action); + } + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/ha_mroonga.def mariadb-10.1-10.1.30/storage/mroonga/ha_mroonga.def --- mariadb-10.1-10.1.25/storage/mroonga/ha_mroonga.def 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/ha_mroonga.def 2017-12-21 15:48:51.000000000 +0000 @@ -13,3 +13,6 @@ mroonga_escape mroonga_escape_init mroonga_escape_deinit + mroonga_normalize + mroonga_normalize_init + mroonga_normalize_deinit diff -Nru mariadb-10.1-10.1.25/storage/mroonga/ha_mroonga.hpp mariadb-10.1-10.1.30/storage/mroonga/ha_mroonga.hpp --- mariadb-10.1-10.1.25/storage/mroonga/ha_mroonga.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/ha_mroonga.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -32,6 +32,14 @@ #include #include "mrn_mysql_compat.h" +#include +#include + +#if __cplusplus >= 201402 +# define mrn_override override +#else +# define mrn_override +#endif #if (MYSQL_VERSION_ID >= 50514 && MYSQL_VERSION_ID < 50600) # define MRN_HANDLER_HAVE_FINAL_ADD_INDEX 1 @@ -102,6 +110,13 @@ # define MRN_HAVE_HA_EXTRA_PREPARE_FOR_FORCED_CLOSE #endif +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) +#define MRN_HAVE_HA_EXTRA_SKIP_SERIALIZABLE_DD_VIEW +#define MRN_HAVE_HA_EXTRA_BEGIN_ALTER_COPY +#define MRN_HAVE_HA_EXTRA_END_ALTER_COPY +#define MRN_HAVE_HA_EXTRA_NO_AUTOINC_LOCKING +#endif + #if MYSQL_VERSION_ID >= 50607 && \ (!defined(MRN_MARIADB_P) || MYSQL_VERSION_ID < 100008) # define MRN_HAVE_HA_EXTRA_EXPORT @@ -196,6 +211,10 @@ # define MRN_FOREIGN_KEY_USE_CONST_STRING #endif +#if MYSQL_VERSION_ID >= 100203 && defined(MRN_MARIADB_P) +# define MRN_FOREIGN_KEY_USE_METHOD_ENUM +#endif + #if MYSQL_VERSION_ID < 50706 || defined(MRN_MARIADB_P) # define MRN_HANDLER_IS_FATAL_ERROR_HAVE_FLAGS #endif @@ -204,6 +223,45 @@ # define MRN_HANDLER_HAVE_RESET_AUTO_INCREMENT #endif +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50709) || \ + (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100203) +# define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_TYPE \ + Alter_inplace_info::ALTER_STORED_COLUMN_TYPE +# define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_ORDER \ + Alter_inplace_info::ALTER_STORED_COLUMN_ORDER +#else +# define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_TYPE \ + Alter_inplace_info::ALTER_COLUMN_TYPE +# define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_ORDER \ + Alter_inplace_info::ALTER_COLUMN_ORDER +#endif + +#if MYSQL_VERSION_ID >= 50700 && !defined(MRN_MARIADB_P) +# define MRN_HANDLER_RECORDS_RETURN_ERROR +#endif + +#if MYSQL_VERSION_ID < 80002 || defined(MRN_MARIADB_P) +# define MRN_HANDLER_HAVE_KEYS_TO_USE_FOR_SCANNING +#endif + +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) +# define MRN_ST_MYSQL_PLUGIN_HAVE_CHECK_UNINSTALL +#endif + +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) +# define MRN_HANDLER_OPEN_HAVE_TABLE_DEFINITION +# define MRN_HANDLER_CREATE_HAVE_TABLE_DEFINITION +#endif + +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) +# define MRN_HANDLERTON_CREATE_HAVE_PARTITIONED +#endif + +#if defined(HAVE_PSI_INTERFACE) && \ + (MYSQL_VERSION_ID < 80002 || defined(MRN_MARIADB_P)) +# define MRN_HAVE_PSI_SERVER +#endif + class ha_mroonga; /* structs */ @@ -347,6 +405,8 @@ // for ft in where clause test Item_func_match *current_ft_item; + mrn::Operations *operations_; + public: ha_mroonga(handlerton *hton, TABLE_SHARE *share_arg); ~ha_mroonga(); @@ -357,8 +417,20 @@ ulonglong table_flags() const; // required ulong index_flags(uint idx, uint part, bool all_parts) const; // required - int create(const char *name, TABLE *form, HA_CREATE_INFO *info); // required - int open(const char *name, int mode, uint test_if_locked); // required + // required + int create(const char *name, TABLE *form, HA_CREATE_INFO *info +#ifdef MRN_HANDLER_CREATE_HAVE_TABLE_DEFINITION + , + dd::Table *table_def +#endif + ) mrn_override; + // required + int open(const char *name, int mode, uint open_options +#ifdef MRN_HANDLER_OPEN_HAVE_TABLE_DEFINITION + , + const dd::Table *table_def +#endif + ) mrn_override; #ifndef MRN_HANDLER_HAVE_HA_CLOSE int close(); // required #endif @@ -419,11 +491,6 @@ #endif int index_next_same(uchar *buf, const uchar *key, uint keylen); - int read_range_first(const key_range *start_key, - const key_range *end_key, - bool eq_range, bool sorted); - int read_range_next(); - int ft_init(); FT_INFO *ft_init_ext(uint flags, uint inx, String *key); int ft_read(uchar *buf); @@ -469,7 +536,9 @@ int truncate(); double scan_time(); double read_time(uint index, uint ranges, ha_rows rows); +#ifdef MRN_HANDLER_HAVE_KEYS_TO_USE_FOR_SCANNING const key_map *keys_to_use_for_scanning(); +#endif ha_rows estimate_rows_upper_bound(); void update_create_info(HA_CREATE_INFO* create_info); int rename_table(const char *from, const char *to); @@ -518,6 +587,11 @@ int start_stmt(THD *thd, thr_lock_type lock_type); protected: +#ifdef MRN_HANDLER_RECORDS_RETURN_ERROR + int records(ha_rows *num_rows); +#else + ha_rows records(); +#endif #ifdef MRN_HANDLER_HAVE_HA_RND_NEXT int rnd_next(uchar *buf); #endif @@ -580,6 +654,9 @@ bool have_unique_index(); + bool is_foreign_key_field(const char *table_name, + const char *field_name); + void push_warning_unsupported_spatial_index_search(enum ha_rkey_function flag); void clear_cursor(); void clear_cursor_geo(); @@ -592,7 +669,8 @@ void remove_grn_obj_force(const char *name); int drop_index(MRN_SHARE *target_share, uint key_index); int drop_indexes_normal(const char *table_name, grn_obj *table); - int drop_indexes_multiple(const char *table_name, grn_obj *table); + int drop_indexes_multiple(const char *table_name, grn_obj *table, + const char *index_table_name_separator); int drop_indexes(const char *table_name); bool find_column_flags(Field *field, MRN_SHARE *mrn_share, int i, grn_obj_flags *column_flags); @@ -600,9 +678,10 @@ int error_code); grn_obj *find_tokenizer(KEY *key, MRN_SHARE *mrn_share, int i); grn_obj *find_tokenizer(const char *name, int name_length); + bool have_custom_normalizer(KEY *key) const; grn_obj *find_normalizer(KEY *key); grn_obj *find_normalizer(KEY *key, const char *name); - bool find_index_column_flags(KEY *key, grn_obj_flags *index_column_flags); + bool find_index_column_flags(KEY *key, grn_column_flags *index_column_flags); bool find_token_filters(KEY *key, grn_obj *token_filters); bool find_token_filters_put(grn_obj *token_filters, const char *token_filter_name, @@ -622,9 +701,7 @@ bool is_dry_write(); bool is_enable_optimization(); bool should_normalize(Field *field) const; - bool is_temporary_table_name(const char *name) const; - void check_count_skip(key_part_map start_key_part_map, - key_part_map end_key_part_map, bool fulltext); + void check_count_skip(key_part_map target_key_part_map); bool is_grn_zero_column_value(grn_obj *column, grn_obj *value); bool is_primary_key_field(Field *field) const; void check_fast_order_limit(grn_table_sort_key **sort_keys, int *n_sort_keys, @@ -652,6 +729,9 @@ int generic_store_bulk_new_decimal(Field *field, grn_obj *buf); int generic_store_bulk_blob(Field *field, grn_obj *buf); int generic_store_bulk_geometry(Field *field, grn_obj *buf); +#ifdef MRN_HAVE_MYSQL_TYPE_JSON + int generic_store_bulk_json(Field *field, grn_obj *buf); +#endif int generic_store_bulk(Field *field, grn_obj *buf); void storage_store_field_string(Field *field, @@ -687,6 +767,10 @@ const char *value, uint value_length); void storage_store_field_geometry(Field *field, const char *value, uint value_length); +#ifdef MRN_HAVE_MYSQL_TYPE_JSON + void storage_store_field_json(Field *field, + const char *value, uint value_length); +#endif void storage_store_field(Field *field, const char *value, uint value_length); void storage_store_field_column(Field *field, bool is_primary_key, int nth_column, grn_id record_id); @@ -732,6 +816,15 @@ const uchar *key, uint key_length, uchar *buffer, uint *encoded_length); int storage_encode_multiple_column_key_range(KEY *key_info, + const uchar *start, + uint start_size, + const uchar *end, + uint end_size, + uchar *min_buffer, + uint *min_encoded_size, + uchar *max_buffer, + uint *max_encoded_size); + int storage_encode_multiple_column_key_range(KEY *key_info, const key_range *start, const key_range *end, uchar *min_buffer, @@ -758,9 +851,7 @@ grn_obj **index_tables, grn_obj **index_columns, MRN_SHARE *tmp_share); - int wrapper_create_index(const char *name, TABLE *table, - HA_CREATE_INFO *info, MRN_SHARE *tmp_share, - const char *grn_table_name); + int wrapper_create_index(const char *name, TABLE *table, MRN_SHARE *tmp_share); int storage_create_validate_pseudo_column(TABLE *table); #ifdef MRN_SUPPORT_FOREIGN_KEYS bool storage_create_foreign_key(TABLE *table, const char *grn_table_name, @@ -778,16 +869,18 @@ int storage_create_indexes(TABLE *table, const char *grn_table_name, grn_obj *grn_table, MRN_SHARE *tmp_share); int close_databases(); - int ensure_database_open(const char *name); + int ensure_database_open(const char *name, mrn::Database **db=NULL); int ensure_database_remove(const char *name); int wrapper_delete_table(const char *name, handlerton *wrap_handlerton, const char *table_name); int generic_delete_table(const char *name, const char *table_name); - int wrapper_open(const char *name, int mode, uint test_if_locked); + int wrapper_open(const char *name, int mode, uint open_options); int wrapper_open_indexes(const char *name); - int storage_open(const char *name, int mode, uint test_if_locked); + int storage_reindex(); + int storage_open(const char *name, int mode, uint open_options); int open_table(const char *name); int storage_open_columns(void); + void storage_close_columns(void); int storage_open_indexes(const char *name); void wrapper_overwrite_index_bits(); int wrapper_close(); @@ -872,6 +965,13 @@ void storage_info_variable(); void storage_info_variable_records(); void storage_info_variable_data_file_length(); +#ifdef MRN_HANDLER_RECORDS_RETURN_ERROR + int wrapper_records(ha_rows *num_rows); + int storage_records(ha_rows *num_rows); +#else + ha_rows wrapper_records(); + ha_rows storage_records(); +#endif int wrapper_rnd_init(bool scan); int storage_rnd_init(bool scan); int wrapper_rnd_end(); @@ -914,14 +1014,6 @@ int storage_index_last(uchar *buf); int wrapper_index_next_same(uchar *buf, const uchar *key, uint keylen); int storage_index_next_same(uchar *buf, const uchar *key, uint keylen); - int wrapper_read_range_first(const key_range *start_key, - const key_range *end_key, - bool eq_range, bool sorted); - int storage_read_range_first(const key_range *start_key, - const key_range *end_key, - bool eq_range, bool sorted); - int wrapper_read_range_next(); - int storage_read_range_next(); int generic_ft_init(); int wrapper_ft_init(); int storage_ft_init(); @@ -929,41 +1021,18 @@ FT_INFO *storage_ft_init_ext(uint flags, uint key_nr, String *key); void generic_ft_init_ext_add_conditions_fast_order_limit( struct st_mrn_ft_info *info, grn_obj *expression); - bool generic_ft_init_ext_parse_pragma_d(struct st_mrn_ft_info *info, - const char *keyword, - uint keyword_length, - grn_operator *default_operator, - uint *consumed_keyword_length); - void generic_ft_init_ext_parse_pragma_w_append_section( - struct st_mrn_ft_info *info, - grn_obj *index_column, - grn_obj *match_columns, - uint section, - grn_obj *section_value_buffer, - int weight, - uint n_weights); - bool generic_ft_init_ext_parse_pragma_w(struct st_mrn_ft_info *info, - const char *keyword, - uint keyword_length, - grn_obj *index_column, - grn_obj *match_columns, - uint *consumed_keyword_length, - grn_obj *tmp_objects); - grn_expr_flags expr_flags_in_boolean_mode(); grn_rc generic_ft_init_ext_prepare_expression_in_boolean_mode( struct st_mrn_ft_info *info, String *key, grn_obj *index_column, grn_obj *match_columns, - grn_obj *expression, - grn_obj *tmp_objects); + grn_obj *expression); grn_rc generic_ft_init_ext_prepare_expression_in_normal_mode( struct st_mrn_ft_info *info, String *key, grn_obj *index_column, grn_obj *match_columns, - grn_obj *expression, - grn_obj *tmp_objects); + grn_obj *expression); struct st_mrn_ft_info *generic_ft_init_ext_select(uint flags, uint key_nr, String *key); @@ -1041,8 +1110,10 @@ double storage_scan_time(); double wrapper_read_time(uint index, uint ranges, ha_rows rows); double storage_read_time(uint index, uint ranges, ha_rows rows); +#ifdef MRN_HANDLER_HAVE_KEYS_TO_USE_FOR_SCANNING const key_map *wrapper_keys_to_use_for_scanning(); const key_map *storage_keys_to_use_for_scanning(); +#endif ha_rows wrapper_estimate_rows_upper_bound(); ha_rows storage_estimate_rows_upper_bound(); void wrapper_update_create_info(HA_CREATE_INFO* create_info); @@ -1069,8 +1140,10 @@ bool wrapper_auto_repair(int error) const; bool storage_auto_repair(int error) const; int generic_disable_index(int i, KEY *key_info); + int wrapper_disable_indexes_mroonga(uint mode); int wrapper_disable_indexes(uint mode); int storage_disable_indexes(uint mode); + int wrapper_enable_indexes_mroonga(uint mode); int wrapper_enable_indexes(uint mode); int storage_enable_indexes(uint mode); int wrapper_check(THD* thd, HA_CHECK_OPT* check_opt); @@ -1111,8 +1184,10 @@ Alter_inplace_info *ha_alter_info); bool wrapper_inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha_alter_info); - bool storage_inplace_alter_table_index(TABLE *altered_table, - Alter_inplace_info *ha_alter_info); + bool storage_inplace_alter_table_add_index(TABLE *altered_table, + Alter_inplace_info *ha_alter_info); + bool storage_inplace_alter_table_drop_index(TABLE *altered_table, + Alter_inplace_info *ha_alter_info); bool storage_inplace_alter_table_add_column(TABLE *altered_table, Alter_inplace_info *ha_alter_info); bool storage_inplace_alter_table_drop_column(TABLE *altered_table, @@ -1208,7 +1283,9 @@ void storage_free_foreign_key_create_info(char* str); void wrapper_set_keys_in_use(); void storage_set_keys_in_use(); +#ifdef MRN_RBR_UPDATE_NEED_ALL_COLUMNS bool check_written_by_row_based_binlog(); +#endif #ifdef MRN_HAVE_HA_REBIND_PSI void wrapper_unbind_psi(); void storage_unbind_psi(); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/libmrn_need_mysql_sources.am mariadb-10.1-10.1.30/storage/mroonga/lib/libmrn_need_mysql_sources.am --- mariadb-10.1-10.1.25/storage/mroonga/lib/libmrn_need_mysql_sources.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/libmrn_need_mysql_sources.am 2017-12-21 15:48:51.000000000 +0000 @@ -28,4 +28,23 @@ mrn_value_decoder.cpp \ mrn_value_decoder.hpp \ mrn_database_repairer.cpp \ - mrn_database_repairer.hpp + mrn_database_repairer.hpp \ + mrn_context_pool.cpp \ + mrn_context_pool.hpp \ + mrn_operations.cpp \ + mrn_operations.hpp \ + mrn_operation.cpp \ + mrn_operation.hpp \ + mrn_database.cpp \ + mrn_database.hpp \ + mrn_column_name.cpp \ + mrn_column_name.hpp \ + mrn_count_skip_checker.cpp \ + mrn_count_skip_checker.hpp \ + mrn_query_parser.cpp \ + mrn_query_parser.hpp \ + mrn_current_thread.hpp \ + mrn_smart_bitmap.cpp \ + mrn_smart_bitmap.hpp \ + mrn_table_fields_offset_mover.cpp \ + mrn_table_fields_offset_mover.hpp diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_column_name.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_column_name.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_column_name.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_column_name.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,63 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2016 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include "mrn_column_name.hpp" + +#include + +#include + +// for debug +#define MRN_CLASS_NAME "mrn::ColumnName" + +namespace mrn { + ColumnName::ColumnName(const char *mysql_name) + : mysql_name_(mysql_name) { + encode(); + } + + const char *ColumnName::mysql_name() { + return mysql_name_; + } + + const char *ColumnName::c_str() { + return name_; + } + + size_t ColumnName::length() { + return length_; + } + + void ColumnName::encode() { + MRN_DBUG_ENTER_METHOD(); + uint errors; + length_ = mrn_strconvert(system_charset_info, + mysql_name_, + strlen(mysql_name_), + &my_charset_filename, + name_, + MRN_MAX_PATH_SIZE, + &errors); + name_[length_] = '\0'; + DBUG_VOID_RETURN; + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_column_name.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_column_name.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_column_name.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_column_name.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,38 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2016 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#include + +namespace mrn { + class ColumnName { + public: + ColumnName(const char *mysql_name); + const char *mysql_name(); + const char *c_str(); + size_t length(); + private: + const char *mysql_name_; + char name_[MRN_MAX_PATH_SIZE]; + size_t length_; + + void encode(); + }; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_condition_converter.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_condition_converter.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_condition_converter.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_condition_converter.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2 -*- */ /* - Copyright(C) 2013-2014 Kouhei Sutou + Copyright(C) 2013-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -175,7 +175,7 @@ bool convertable = false; - enum_field_types field_type = field_item->field_type(); + enum_field_types field_type = field_item->field->real_type(); NormalizedType normalized_type = normalize_field_type(field_type); switch (normalized_type) { case STRING_TYPE: @@ -185,7 +185,12 @@ } break; case INT_TYPE: - convertable = value_item->type() == Item::INT_ITEM; + if (field_type == MYSQL_TYPE_ENUM) { + convertable = (value_item->type() == Item::STRING_ITEM || + value_item->type() == Item::INT_ITEM); + } else { + convertable = value_item->type() == Item::INT_ITEM; + } break; case TIME_TYPE: if (is_valid_time_value(field_item, value_item)) { @@ -206,7 +211,7 @@ bool convertable = false; - enum_field_types field_type = field_item->field_type(); + enum_field_types field_type = field_item->field->type(); NormalizedType normalized_type = normalize_field_type(field_type); switch (normalized_type) { case STRING_TYPE: @@ -251,7 +256,7 @@ bool error; Item *real_value_item = value_item->real_item(); - switch (field_item->field_type()) { + switch (field_item->field->type()) { case MYSQL_TYPE_TIME: error = real_value_item->get_time(mysql_time); break; @@ -352,6 +357,11 @@ case MYSQL_TYPE_GEOMETRY: type = UNSUPPORTED_TYPE; break; +#ifdef MRN_HAVE_MYSQL_TYPE_JSON + case MYSQL_TYPE_JSON: + type = STRING_TYPE; + break; +#endif } DBUG_RETURN(type); @@ -404,11 +414,11 @@ DBUG_RETURN(have); } - const Item_func *ConditionConverter::find_match_against(const Item *item) { + unsigned int ConditionConverter::count_match_against(const Item *item) { MRN_DBUG_ENTER_METHOD(); if (!item) { - DBUG_RETURN(NULL); + DBUG_RETURN(0); } switch (item->type()) { @@ -416,14 +426,13 @@ if (is_storage_mode_) { Item_cond *cond_item = (Item_cond *)item; if (cond_item->functype() == Item_func::COND_AND_FUNC) { + unsigned int n_match_againsts = 0; List_iterator iterator(*((cond_item)->argument_list())); const Item *sub_item; while ((sub_item = iterator++)) { - const Item_func *match_against = find_match_against(sub_item); - if (match_against) { - DBUG_RETURN(match_against); - } + n_match_againsts += count_match_against(sub_item); } + DBUG_RETURN(n_match_againsts); } } break; @@ -432,7 +441,7 @@ const Item_func *func_item = (const Item_func *)item; switch (func_item->functype()) { case Item_func::FT_FUNC: - DBUG_RETURN(func_item); + DBUG_RETURN(1); break; default: break; @@ -443,7 +452,7 @@ break; } - DBUG_RETURN(NULL); + DBUG_RETURN(0); } void ConditionConverter::convert(const Item *where, grn_obj *expression) { @@ -560,7 +569,7 @@ grn_obj *expression) { MRN_DBUG_ENTER_METHOD(); - enum_field_types field_type = field_item->field_type(); + enum_field_types field_type = field_item->field->real_type(); NormalizedType normalized_type = normalize_field_type(field_type); switch (normalized_type) { @@ -574,7 +583,21 @@ break; case INT_TYPE: grn_obj_reinit(ctx_, &value_, GRN_DB_INT64, 0); - GRN_INT64_SET(ctx_, &value_, const_item->val_int()); + if (field_type == MYSQL_TYPE_ENUM) { + if (const_item->type() == Item::STRING_ITEM) { + String *string; + string = const_item->val_str(NULL); + Field_enum *enum_field = static_cast(field_item->field); + int enum_value = find_type(string->c_ptr(), + enum_field->typelib, + FIND_TYPE_BASIC); + GRN_INT64_SET(ctx_, &value_, enum_value); + } else { + GRN_INT64_SET(ctx_, &value_, const_item->val_int()); + } + } else { + GRN_INT64_SET(ctx_, &value_, const_item->val_int()); + } break; case TIME_TYPE: grn_obj_reinit(ctx_, &value_, GRN_DB_TIME, 0); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_condition_converter.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_condition_converter.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_condition_converter.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_condition_converter.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -33,7 +33,7 @@ ~ConditionConverter(); bool is_convertable(const Item *item); - const Item_func *find_match_against(const Item *item); + unsigned int count_match_against(const Item *item); // caller must check "where" can be convertable by // is_convertable(). This method doesn't validate "where". void convert(const Item *where, grn_obj *expression); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_context_pool.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_context_pool.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_context_pool.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_context_pool.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,120 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "mrn_context_pool.hpp" +#include "mrn_lock.hpp" + +#include + +namespace mrn { + // for debug +#define MRN_CLASS_NAME "mrn::ContextPool::Impl" + + class ContextPool::Impl { + public: + Impl(mysql_mutex_t *mutex) + : mutex_(mutex), + pool_(NULL), + last_pull_time_(0) { + } + + ~Impl(void) { + clear(); + } + + grn_ctx *pull(void) { + MRN_DBUG_ENTER_METHOD(); + grn_ctx *ctx = NULL; + + { + time_t now; + time(&now); + + mrn::Lock lock(mutex_); + if (pool_) { + ctx = static_cast(pool_->data); + list_pop(pool_); + if ((now - last_pull_time_) >= CLEAR_THREATHOLD_IN_SECONDS) { + clear(); + } + } + last_pull_time_ = now; + } + + if (!ctx) { + ctx = grn_ctx_open(0); + } + + DBUG_RETURN(ctx); + } + + void release(grn_ctx *ctx) { + MRN_DBUG_ENTER_METHOD(); + + { + mrn::Lock lock(mutex_); + list_push(pool_, ctx); + grn_ctx_use(ctx, NULL); + } + + DBUG_VOID_RETURN; + } + + private: + static const unsigned int CLEAR_THREATHOLD_IN_SECONDS = 60 * 5; + + mysql_mutex_t *mutex_; + LIST *pool_; + time_t last_pull_time_; + + void clear(void) { + MRN_DBUG_ENTER_METHOD(); + while (pool_) { + grn_ctx *ctx = static_cast(pool_->data); + grn_ctx_close(ctx); + list_pop(pool_); + } + DBUG_VOID_RETURN; + } + }; + + // For debug +#undef MRN_CLASS_NAME +#define MRN_CLASS_NAME "mrn::ContextPool" + + ContextPool::ContextPool(mysql_mutex_t *mutex) + : impl_(new Impl(mutex)) { + } + + ContextPool::~ContextPool(void) { + delete impl_; + } + + grn_ctx *ContextPool::pull(void) { + MRN_DBUG_ENTER_METHOD(); + grn_ctx *ctx = impl_->pull(); + DBUG_RETURN(ctx); + } + + void ContextPool::release(grn_ctx *ctx) { + MRN_DBUG_ENTER_METHOD(); + impl_->release(ctx); + DBUG_VOID_RETURN; + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_context_pool.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_context_pool.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_context_pool.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_context_pool.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef MRN_CONTEXT_POOL_HPP_ +#define MRN_CONTEXT_POOL_HPP_ + +#include + +#include + +namespace mrn { + class ContextPool { + public: + ContextPool(mysql_mutex_t *mutex); + ~ContextPool(void); + grn_ctx *pull(void); + void release(grn_ctx *context); + + private: + class Impl; + Impl *impl_; + }; +} + +#endif /* MRN_CONTEXT_POOL_HPP_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_count_skip_checker.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_count_skip_checker.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_count_skip_checker.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_count_skip_checker.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,303 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2010-2013 Kentoku SHIBA + Copyright(C) 2011-2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "mrn_count_skip_checker.hpp" + +#include + +// for debug +#define MRN_CLASS_NAME "mrn::CountSkipChecker" + +namespace mrn { + CountSkipChecker::CountSkipChecker(grn_ctx *ctx, + TABLE *table, + SELECT_LEX *select_lex, + KEY *key_info, + key_part_map target_key_part_map, + bool is_storage_mode) + : ctx_(ctx), + table_(table), + select_lex_(select_lex), + key_info_(key_info), + target_key_part_map_(target_key_part_map), + is_storage_mode_(is_storage_mode) { + } + + CountSkipChecker::~CountSkipChecker() { + } + + bool CountSkipChecker::check() { + MRN_DBUG_ENTER_METHOD(); + + if (select_lex_->item_list.elements != 1) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] not only one item: %u", + select_lex_->item_list.elements); + DBUG_RETURN(false); + } + if (select_lex_->group_list.elements > 0) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] have groups: %u", + select_lex_->group_list.elements); + DBUG_RETURN(false); + } + if (MRN_SELECT_LEX_GET_HAVING_COND(select_lex_)) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] have HAVING"); + DBUG_RETURN(false); + } + if (select_lex_->table_list.elements != 1) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] not only one table: %u", + select_lex_->table_list.elements); + DBUG_RETURN(false); + } + + Item *info = static_cast(select_lex_->item_list.first_node()->info); + if (info->type() != Item::SUM_FUNC_ITEM) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] item isn't sum function: %u", + info->type()); + DBUG_RETURN(false); + } + Item_sum *sum_item = static_cast(info); + if (sum_item->sum_func() != Item_sum::COUNT_FUNC) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] not COUNT: %u", + sum_item->sum_func()); + DBUG_RETURN(false); + } + if (ITEM_SUM_GET_NEST_LEVEL(sum_item) != 0 || + ITEM_SUM_GET_AGGR_LEVEL(sum_item) != 0 || + ITEM_SUM_GET_MAX_AGGR_LEVEL(sum_item) != -1 || + sum_item->max_sum_func_level != -1) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] not simple COUNT(*): %d:%d:%d:%d", + ITEM_SUM_GET_NEST_LEVEL(sum_item), + ITEM_SUM_GET_AGGR_LEVEL(sum_item), + ITEM_SUM_GET_MAX_AGGR_LEVEL(sum_item), + sum_item->max_sum_func_level); + DBUG_RETURN(false); + } + + Item *where = MRN_SELECT_LEX_GET_WHERE_COND(select_lex_); + if (!where) { + if (is_storage_mode_) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][true] no condition"); + DBUG_RETURN(true); + } else { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] no condition with wrapper mode"); + DBUG_RETURN(false); + } + } + + bool skippable = is_skippable(where); + DBUG_RETURN(skippable); + } + + bool CountSkipChecker::is_skippable(Item *where) { + MRN_DBUG_ENTER_METHOD(); + + bool skippable = false; + switch (where->type()) { + case Item::COND_ITEM: + { + Item_cond *cond_item = static_cast(where); + skippable = is_skippable(cond_item); + if (skippable) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][true] skippable multiple conditions"); + } + } + break; + case Item::FUNC_ITEM: + { + Item_func *func_item = static_cast(where); + if (func_item->functype() == Item_func::FT_FUNC) { + if (select_lex_->select_n_where_fields == 1) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][true] " + "only one full text search condition"); + DBUG_RETURN(true); + } else { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] " + "full text search condition and more conditions: %u", + select_lex_->select_n_where_fields); + DBUG_RETURN(false); + } + } else { + skippable = is_skippable(func_item); + if (skippable) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][true] skippable condition"); + } + } + } + break; + default: + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] unsupported top level item: %u", + where->type()); + break; + } + + DBUG_RETURN(skippable); + } + + bool CountSkipChecker::is_skippable(Item_cond *cond_item) { + MRN_DBUG_ENTER_METHOD(); + + List_iterator iterator(*(cond_item->argument_list())); + Item *sub_item; + while ((sub_item = iterator++)) { + if (sub_item->type() != Item::FUNC_ITEM) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] " + "sub condition isn't function item: %u", + sub_item->type()); + DBUG_RETURN(false); + } + if (!is_skippable(static_cast(sub_item))) { + DBUG_RETURN(false); + } + } + DBUG_RETURN(true); + } + + bool CountSkipChecker::is_skippable(Item_func *func_item) { + MRN_DBUG_ENTER_METHOD(); + + switch (func_item->functype()) { + case Item_func::EQ_FUNC: + case Item_func::EQUAL_FUNC: + case Item_func::NE_FUNC: + case Item_func::LT_FUNC: + case Item_func::LE_FUNC: + case Item_func::GE_FUNC: + case Item_func::GT_FUNC: + { + Item **arguments = func_item->arguments(); + Item *left_item = arguments[0]; + if (left_item->type() != Item::FIELD_ITEM) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] not field: %u:%u", + func_item->functype(), + left_item->type()); + DBUG_RETURN(false); + } + + bool skippable = is_skippable(static_cast(left_item)); + DBUG_RETURN(skippable); + } + break; + case Item_func::BETWEEN: + { + Item **arguments = func_item->arguments(); + Item *target_item = arguments[0]; + if (target_item->type() != Item::FIELD_ITEM) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] BETWEEN target isn't field: %u", + target_item->type()); + DBUG_RETURN(false); + } + + bool skippable = is_skippable(static_cast(target_item)); + DBUG_RETURN(skippable); + } + break; + case Item_func::MULT_EQUAL_FUNC: +#ifdef MRN_HAVE_ITEM_EQUAL_FIELDS_ITERATOR + { + Item_equal *equal_item = static_cast(func_item); + Item_equal_fields_iterator iterator(*equal_item); + Item *field_item; + while ((field_item = iterator++)) { + bool skippable = is_skippable(static_cast(field_item)); + if (!skippable) { + DBUG_RETURN(skippable); + } + } + DBUG_RETURN(true); + } +#endif + break; + default: + break; + } + + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] unsupported function item: %u", + func_item->functype()); + DBUG_RETURN(false); + } + + bool CountSkipChecker::is_skippable(Item_field *field_item) { + MRN_DBUG_ENTER_METHOD(); + + Field *field = field_item->field; + if (!field) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] field is missing"); + DBUG_RETURN(false); + } + + if (field->table != table_) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] external table's field"); + DBUG_RETURN(false); + } + + if (!key_info_) { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] no active index: <%s>:<%s>", + *(field->table_name), + field->field_name); + DBUG_RETURN(false); + } + + uint i; + KEY_PART_INFO *key_part = key_info_->key_part; + for (i = 0; i < KEY_N_KEY_PARTS(key_info_); i++) { + if (key_part[i].field == field) { + if ((target_key_part_map_ >> i) & 1) { + DBUG_RETURN(true); + } else { + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] " + "field's index are out of key part map: %u:%lu: <%s>:<%s>", + i, + target_key_part_map_, + *(field->table_name), + field->field_name); + DBUG_RETURN(false); + } + } + } + + GRN_LOG(ctx_, GRN_LOG_DEBUG, + "[mroonga][count-skip][false] field isn't indexed: <%s>:<%s>", + *(field->table_name), + field->field_name); + DBUG_RETURN(false); + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_count_skip_checker.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_count_skip_checker.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_count_skip_checker.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_count_skip_checker.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,57 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2016 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef MRN_COUNT_SKIP_CHECKER_HPP_ +#define MRN_COUNT_SKIP_CHECKER_HPP_ + +#include + +#include + +#include + +namespace mrn { + class CountSkipChecker { + public: + CountSkipChecker(grn_ctx *ctx, + TABLE *table, + SELECT_LEX *select_lex, + KEY *key_info, + key_part_map target_key_part_map, + bool is_storage_mode); + ~CountSkipChecker(); + + bool check(); + + private: + grn_ctx *ctx_; + TABLE *table_; + SELECT_LEX *select_lex_; + KEY *key_info_; + key_part_map target_key_part_map_; + bool is_storage_mode_; + + bool is_skippable(Item *where); + bool is_skippable(Item_cond *cond_item); + bool is_skippable(Item_func *func_item); + bool is_skippable(Item_field *field_item); + }; +} + +#endif /* MRN_COUNT_SKIP_CHECKER_HPP_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_current_thread.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_current_thread.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_current_thread.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_current_thread.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,27 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#include +#include + +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) +# include +#endif diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,89 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include "mrn_database.hpp" +#include "mrn_operations.hpp" + +// for debug +#define MRN_CLASS_NAME "mrn::Database" + +namespace mrn { + Database::Database(grn_ctx *ctx, grn_obj *db) + : ctx_(ctx), + db_(db), + broken_table_names_(NULL), + is_broken_(false) { + Operations operations(ctx_); + broken_table_names_ = operations.collect_processing_table_names(); + is_broken_ = operations.is_locked(); + } + + Database::~Database(void) { + close(); + } + + void Database::close() { + MRN_DBUG_ENTER_METHOD(); + if (db_) { + grn_hash_close(ctx_, broken_table_names_); + broken_table_names_ = NULL; + grn_obj_close(ctx_, db_); + db_ = NULL; + } + DBUG_VOID_RETURN; + } + + grn_rc Database::remove() { + MRN_DBUG_ENTER_METHOD(); + grn_rc rc = GRN_SUCCESS; + if (db_) { + grn_hash_close(ctx_, broken_table_names_); + broken_table_names_ = NULL; + rc = grn_obj_remove(ctx_, db_); + if (rc == GRN_SUCCESS) { + db_ = NULL; + } + } + DBUG_RETURN(rc); + } + + grn_obj *Database::get() { + MRN_DBUG_ENTER_METHOD(); + DBUG_RETURN(db_); + } + + bool Database::is_broken() { + MRN_DBUG_ENTER_METHOD(); + DBUG_RETURN(is_broken_); + } + + bool Database::is_broken_table(const char *name, size_t name_size) { + MRN_DBUG_ENTER_METHOD(); + grn_id id = grn_hash_get(ctx_, broken_table_names_, name, name_size, NULL); + DBUG_RETURN(id != GRN_ID_NIL); + } + + void Database::mark_table_repaired(const char *name, size_t name_size) { + MRN_DBUG_ENTER_METHOD(); + grn_hash_delete(ctx_, broken_table_names_, name, name_size, NULL); + DBUG_VOID_RETURN; + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,47 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef MRN_DATABASE_HPP_ +#define MRN_DATABASE_HPP_ + +#include + +namespace mrn { + class Database { + public: + Database(grn_ctx *ctx, grn_obj *db); + ~Database(void); + + void close(); + grn_rc remove(); + grn_obj *get(); + + bool is_broken(); + bool is_broken_table(const char *name, size_t name_size); + void mark_table_repaired(const char *name, size_t name_size); + + private: + grn_ctx *ctx_; + grn_obj *db_; + grn_hash *broken_table_names_; + bool is_broken_; + }; +} + +#endif /* MRN_DATABASE_HPP_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_manager.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_manager.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_manager.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_manager.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -56,9 +56,9 @@ if (cache_) { void *db_address; GRN_HASH_EACH(ctx_, cache_, id, NULL, 0, &db_address, { - grn_obj *db; + Database *db; memcpy(&db, db_address, sizeof(grn_obj *)); - grn_obj_unlink(ctx_, db); + delete db; }); grn_hash_close(ctx_, cache_); } @@ -80,7 +80,7 @@ DBUG_RETURN(true); } - int DatabaseManager::open(const char *path, grn_obj **db) { + int DatabaseManager::open(const char *path, Database **db) { MRN_DBUG_ENTER_METHOD(); int error = 0; @@ -100,36 +100,54 @@ mapper.db_name(), strlen(mapper.db_name()), &db_address); if (id == GRN_ID_NIL) { + grn_obj *grn_db; struct stat db_stat; if (stat(mapper.db_path(), &db_stat)) { GRN_LOG(ctx_, GRN_LOG_INFO, "database not found. creating...: <%s>", mapper.db_path()); if (path[0] == FN_CURLIB && - (path[1] == FN_LIBCHAR || path[1] == FN_LIBCHAR2)) { + mrn_is_directory_separator(path[1])) { ensure_database_directory(); } - *db = grn_db_create(ctx_, mapper.db_path(), NULL); + grn_db = grn_db_create(ctx_, mapper.db_path(), NULL); if (ctx_->rc) { error = ER_CANT_CREATE_TABLE; my_message(error, ctx_->errbuf, MYF(0)); DBUG_RETURN(error); } } else { - *db = grn_db_open(ctx_, mapper.db_path()); + grn_db = grn_db_open(ctx_, mapper.db_path()); if (ctx_->rc) { error = ER_CANT_OPEN_FILE; my_message(error, ctx_->errbuf, MYF(0)); DBUG_RETURN(error); } } + *db = new Database(ctx_, grn_db); grn_hash_add(ctx_, cache_, mapper.db_name(), strlen(mapper.db_name()), &db_address, NULL); - memcpy(db_address, db, sizeof(grn_obj *)); - error = ensure_normalizers_registered(*db); + memcpy(db_address, db, sizeof(Database *)); + error = ensure_normalizers_registered((*db)->get()); + if (!error) { + if ((*db)->is_broken()) { + error = ER_CANT_OPEN_FILE; + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: database: open: " + "The database maybe broken. " + "We recommend you to recreate the database. " + "If the database isn't broken, " + "you can remove this error by running " + "'groonga %s table_remove mroonga_operations' " + "on server. But the latter isn't recommended.", + mapper.db_path()); + my_message(error, error_message, MYF(0)); + } + } } else { - memcpy(db, db_address, sizeof(grn_obj *)); - grn_ctx_use(ctx_, *db); + memcpy(db, db_address, sizeof(Database *)); + grn_ctx_use(ctx_, (*db)->get()); } DBUG_RETURN(error); @@ -150,10 +168,11 @@ DBUG_VOID_RETURN; } - grn_obj *db = NULL; - memcpy(&db, db_address, sizeof(grn_obj *)); + Database *db = NULL; + memcpy(&db, db_address, sizeof(Database *)); + grn_ctx_use(ctx_, db->get()); if (db) { - grn_obj_close(ctx_, db); + delete db; } grn_hash_delete_by_id(ctx_, cache_, id, NULL); @@ -173,29 +192,35 @@ mapper.db_name(), strlen(mapper.db_name()), &db_address); - grn_obj *db = NULL; + Database *db = NULL; if (id == GRN_ID_NIL) { struct stat dummy; if (stat(mapper.db_path(), &dummy) == 0) { - db = grn_db_open(ctx_, mapper.db_path()); + grn_obj *grn_db = grn_db_open(ctx_, mapper.db_path()); + db = new Database(ctx_, grn_db); } } else { - memcpy(&db, db_address, sizeof(grn_obj *)); + memcpy(&db, db_address, sizeof(Database *)); + grn_ctx_use(ctx_, db->get()); } if (!db) { DBUG_RETURN(false); } - if (grn_obj_remove(ctx_, db) == GRN_SUCCESS) { + if (db->remove() == GRN_SUCCESS) { if (id != GRN_ID_NIL) { grn_hash_delete_by_id(ctx_, cache_, id, NULL); } + delete db; DBUG_RETURN(true); } else { GRN_LOG(ctx_, GRN_LOG_ERROR, "failed to drop database: <%s>: <%s>", mapper.db_path(), ctx_->errbuf); + if (id == GRN_ID_NIL) { + delete db; + } DBUG_RETURN(false); } } @@ -223,22 +248,28 @@ break; } void *db_address; - grn_obj *db; + Database *db; grn_hash_cursor_get_value(ctx_, cursor, &db_address); - memcpy(&db, db_address, sizeof(grn_obj *)); + memcpy(&db, db_address, sizeof(Database *)); + grn_ctx_use(ctx_, db->get()); grn_rc rc = grn_hash_cursor_delete(ctx_, cursor, NULL); if (rc) { error = ER_ERROR_ON_READ; my_message(error, ctx_->errbuf, MYF(0)); break; } - grn_obj_close(ctx_, db); + delete db; } grn_hash_cursor_close(ctx_, cursor); DBUG_RETURN(error); } + const char *DatabaseManager::error_message() { + MRN_DBUG_ENTER_METHOD(); + DBUG_RETURN(ctx_->errbuf); + } + void DatabaseManager::mkdir_p(const char *directory) { MRN_DBUG_ENTER_METHOD(); @@ -246,8 +277,7 @@ char sub_directory[MRN_MAX_PATH_SIZE]; sub_directory[0] = '\0'; while (true) { - if (directory[i] == FN_LIBCHAR || - directory[i] == FN_LIBCHAR2 || + if (mrn_is_directory_separator(directory[i]) || directory[i] == '\0') { sub_directory[i] = '\0'; struct stat directory_status; @@ -290,8 +320,10 @@ const char *last_path_separator; last_path_separator = strrchr(path_prefix, FN_LIBCHAR); +#ifdef FN_LIBCHAR2 if (!last_path_separator) last_path_separator = strrchr(path_prefix, FN_LIBCHAR2); +#endif if (!last_path_separator) DBUG_VOID_RETURN; if (path_prefix == last_path_separator) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_manager.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_manager.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_manager.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_manager.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -22,6 +22,8 @@ #ifndef MRN_DATABASE_MANAGER_HPP_ #define MRN_DATABASE_MANAGER_HPP_ +#include "mrn_database.hpp" + #include namespace mrn { @@ -30,10 +32,11 @@ DatabaseManager(grn_ctx *ctx, mysql_mutex_t *mutex); ~DatabaseManager(void); bool init(void); - int open(const char *path, grn_obj **db); + int open(const char *path, Database **db); void close(const char *path); bool drop(const char *path); int clear(void); + const char *error_message(); private: grn_ctx *ctx_; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_repairer.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_repairer.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_repairer.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_repairer.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2 -*- */ /* - Copyright(C) 2015 Kouhei Sutou + Copyright(C) 2015-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -36,6 +36,16 @@ #endif namespace mrn { + struct CheckResult { + CheckResult() : + is_crashed(false), + is_corrupt(false) { + } + + bool is_crashed; + bool is_corrupt; + }; + DatabaseRepairer::DatabaseRepairer(grn_ctx *ctx, THD *thd) : ctx_(ctx), thd_(thd), @@ -53,10 +63,19 @@ bool DatabaseRepairer::is_crashed(void) { MRN_DBUG_ENTER_METHOD(); - bool is_crashed = false; - each_database(&DatabaseRepairer::is_crashed_body, &is_crashed); + CheckResult result; + each_database(&DatabaseRepairer::check_body, &result); + + DBUG_RETURN(result.is_crashed); + } + + bool DatabaseRepairer::is_corrupt(void) { + MRN_DBUG_ENTER_METHOD(); + + CheckResult result; + each_database(&DatabaseRepairer::check_body, &result); - DBUG_RETURN(is_crashed); + DBUG_RETURN(result.is_corrupt); } bool DatabaseRepairer::repair(void) { @@ -81,9 +100,19 @@ DBUG_VOID_RETURN; } - do { - each_database_body(data.cFileName, each_body_func, user_data); - } while (FindNextFile(finder, &data) != 0); + grn_ctx ctx; + grn_rc rc = grn_ctx_init(&ctx, 0); + if (rc == GRN_SUCCESS) { + do { + each_database_body(data.cFileName, &ctx, each_body_func, user_data); + } while (FindNextFile(finder, &data) != 0); + grn_ctx_fin(&ctx); + } else { + GRN_LOG(ctx_, GRN_LOG_WARNING, + "[mroonga][database][repairer][each] " + "failed to initialize grn_ctx: %d: %s", + rc, grn_rc_to_string(rc)); + } FindClose(finder); #else DIR *dir = opendir(base_directory_); @@ -91,8 +120,18 @@ DBUG_VOID_RETURN; } - while (struct dirent *entry = readdir(dir)) { - each_database_body(entry->d_name, each_body_func, user_data); + grn_ctx ctx; + grn_rc rc = grn_ctx_init(&ctx, 0); + if (rc == GRN_SUCCESS) { + while (struct dirent *entry = readdir(dir)) { + each_database_body(entry->d_name, &ctx, each_body_func, user_data); + } + grn_ctx_fin(&ctx); + } else { + GRN_LOG(ctx_, GRN_LOG_WARNING, + "[mroonga][database][repairer][each] " + "failed to initialize grn_ctx: %d: %s", + rc, grn_rc_to_string(rc)); } closedir(dir); #endif @@ -101,6 +140,7 @@ } void DatabaseRepairer::each_database_body(const char *base_path, + grn_ctx *ctx, EachBodyFunc each_body_func, void *user_data) { MRN_DBUG_ENTER_METHOD(); @@ -123,14 +163,14 @@ char db_path[MRN_MAX_PATH_SIZE]; snprintf(db_path, MRN_MAX_PATH_SIZE, "%s%c%s", base_directory_, FN_LIBCHAR, base_path); - grn_obj *db = grn_db_open(ctx_, db_path); + grn_obj *db = grn_db_open(ctx, db_path); if (!db) { DBUG_VOID_RETURN; } - (this->*each_body_func)(db, db_path, user_data); + (this->*each_body_func)(ctx, db, db_path, user_data); - grn_obj_close(ctx_, db); + grn_obj_close(ctx, db); DBUG_VOID_RETURN; } @@ -150,8 +190,7 @@ size_t raw_path_prefix_length = strlen(raw_path_prefix); size_t separator_position = raw_path_prefix_length; for (; separator_position > 0; separator_position--) { - if (base_directory_buffer_[separator_position] == FN_LIBCHAR || - base_directory_buffer_[separator_position] == FN_LIBCHAR2) { + if (mrn_is_directory_separator(base_directory_buffer_[separator_position])) { break; } } @@ -169,34 +208,46 @@ DBUG_VOID_RETURN; } - void DatabaseRepairer::is_crashed_body(grn_obj *db, - const char *db_path, - void *user_data) { + void DatabaseRepairer::check_body(grn_ctx *ctx, + grn_obj *db, + const char *db_path, + void *user_data) { MRN_DBUG_ENTER_METHOD(); - bool *is_crashed = static_cast(user_data); + CheckResult *result = static_cast(user_data); - if (grn_obj_is_locked(ctx_, db)) { - *is_crashed = true; + if (grn_obj_is_locked(ctx, db)) { + result->is_crashed = true; + result->is_corrupt = true; DBUG_VOID_RETURN; } grn_table_cursor *cursor; - cursor = grn_table_cursor_open(ctx_, db, + cursor = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1, GRN_CURSOR_BY_ID); if (!cursor) { - *is_crashed = true; + result->is_crashed = true; + result->is_corrupt = true; DBUG_VOID_RETURN; } grn_id id; - while ((id = grn_table_cursor_next(ctx_, cursor)) != GRN_ID_NIL) { - grn_obj *object = grn_ctx_at(ctx_, id); + while ((id = grn_table_cursor_next(ctx, cursor)) != GRN_ID_NIL) { + if (grn_id_is_builtin(ctx, id)) { + continue; + } + + grn_obj *object = grn_ctx_at(ctx, id); if (!object) { - continue; + if (ctx->rc == GRN_SUCCESS) { + continue; + } else { + result->is_corrupt = true; + break; + } } switch (object->header.type) { @@ -207,37 +258,40 @@ case GRN_COLUMN_FIX_SIZE: case GRN_COLUMN_VAR_SIZE: case GRN_COLUMN_INDEX: - grn_obj_is_locked(ctx_, object); - *is_crashed = true; + if (grn_obj_is_locked(ctx_, object)) { + result->is_crashed = true; + result->is_corrupt = true; + } break; default: break; } - grn_obj_unlink(ctx_, object); + grn_obj_unlink(ctx, object); - if (*is_crashed) { + if (result->is_crashed || result->is_corrupt) { break; } } - grn_table_cursor_close(ctx_, cursor); + grn_table_cursor_close(ctx, cursor); DBUG_VOID_RETURN; } - void DatabaseRepairer::repair_body(grn_obj *db, + void DatabaseRepairer::repair_body(grn_ctx *ctx, + grn_obj *db, const char *db_path, void *user_data) { MRN_DBUG_ENTER_METHOD(); bool *succeeded = static_cast(user_data); - if (grn_db_recover(ctx_, db) != GRN_SUCCESS) { + if (grn_db_recover(ctx, db) != GRN_SUCCESS) { push_warning_printf(thd_, MRN_SEVERITY_WARNING, ER_NOT_KEYFILE, "mroonga: repair: " "Failed to recover database: <%s>: <%s>", - db_path, ctx_->errbuf); + db_path, ctx->errbuf); *succeeded = false; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_repairer.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_repairer.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_database_repairer.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_database_repairer.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2 -*- */ /* - Copyright(C) 2015 Kouhei Sutou + Copyright(C) 2015-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -28,6 +28,7 @@ DatabaseRepairer(grn_ctx *ctx, THD *thd); ~DatabaseRepairer(void); bool is_crashed(void); + bool is_corrupt(void); bool repair(void); private: @@ -40,18 +41,26 @@ size_t path_prefix_length_; size_t mrn_db_file_suffix_length_; - typedef void (DatabaseRepairer::*EachBodyFunc)(grn_obj *db, + typedef void (DatabaseRepairer::*EachBodyFunc)(grn_ctx *ctx, + grn_obj *db, const char *db_path, void *user_data); void each_database(EachBodyFunc each_body_func, void *user_data); void each_database_body(const char *base_path, + grn_ctx *ctx, EachBodyFunc each_body_func, void *user_data); void detect_paths(void); - void is_crashed_body(grn_obj *db, const char *db_path, void *user_data); - void repair_body(grn_obj *db, const char *db_path, void *user_data); + void check_body(grn_ctx *ctx, + grn_obj *db, + const char *db_path, + void *user_data); + void repair_body(grn_ctx *ctx, + grn_obj *db, + const char *db_path, + void *user_data); }; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_index_table_name.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_index_table_name.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_index_table_name.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_index_table_name.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /* -*- c-basic-offset: 2 -*- */ /* Copyright(C) 2011 Kentoku SHIBA - Copyright(C) 2011-2012 Kouhei Sutou + Copyright(C) 2011-2015 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -26,7 +26,8 @@ #define MRN_CLASS_NAME "mrn::IndexTableName" namespace mrn { - const char *IndexTableName::SEPARATOR = "-"; + const char *IndexTableName::SEPARATOR = "#"; + const char *IndexTableName::OLD_SEPARATOR = "-"; bool IndexTableName::is_custom_name(const char *table_name, size_t table_name_length, @@ -43,9 +44,12 @@ DBUG_RETURN(true); } - if (strncmp(SEPARATOR, - index_table_name + table_name_length, - strlen(SEPARATOR)) != 0) { + if ((strncmp(OLD_SEPARATOR, + index_table_name + table_name_length, + strlen(OLD_SEPARATOR)) != 0) && + (strncmp(SEPARATOR, + index_table_name + table_name_length, + strlen(SEPARATOR)) != 0)) { DBUG_RETURN(true); } @@ -63,6 +67,12 @@ encoded_mysql_index_name_multibyte + MRN_MAX_KEY_SIZE, mysql_index_name_multibyte, mysql_index_name_multibyte + strlen(mysql_index_name_)); + snprintf(old_name_, MRN_MAX_KEY_SIZE, + "%s%s%s", + table_name_, + OLD_SEPARATOR, + encoded_mysql_index_name_multibyte); + old_length_ = strlen(old_name_); snprintf(name_, MRN_MAX_KEY_SIZE, "%s%s%s", table_name_, @@ -79,6 +89,14 @@ return length_; } + const char *IndexTableName::old_c_str() { + return old_name_; + } + + size_t IndexTableName::old_length() { + return old_length_; + } + uint IndexTableName::encode(uchar *encoded_start, uchar *encoded_end, const uchar *mysql_string_start, diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_index_table_name.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_index_table_name.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_index_table_name.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_index_table_name.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /* -*- c-basic-offset: 2 -*- */ /* Copyright(C) 2011 Kentoku SHIBA - Copyright(C) 2011-2012 Kouhei Sutou + Copyright(C) 2011-2015 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -27,6 +27,7 @@ class IndexTableName { public: static const char *SEPARATOR; + static const char *OLD_SEPARATOR; static bool is_custom_name(const char *table_name, size_t table_name_length, @@ -36,9 +37,13 @@ IndexTableName(const char *table_name, const char *mysql_index_name); const char *c_str(); size_t length(); + const char *old_c_str(); + size_t old_length(); private: const char *table_name_; const char *mysql_index_name_; + char old_name_[MRN_MAX_KEY_SIZE]; + size_t old_length_; char name_[MRN_MAX_KEY_SIZE]; size_t length_; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -288,6 +288,7 @@ decode_long_long_int(current_grn_key, &grn_time); TimeConverter time_converter; MYSQL_TIME mysql_time; + mysql_time.neg = FALSE; mysql_time.time_type = MYSQL_TIMESTAMP_DATETIME; time_converter.grn_time_to_mysql_time(grn_time, &mysql_time); long long int mysql_datetime_packed = @@ -518,6 +519,14 @@ *data_type = TYPE_BYTE_SEQUENCE; *data_size = key_part->length; break; +#ifdef MRN_HAVE_MYSQL_TYPE_JSON + case MYSQL_TYPE_JSON: + // TODO + DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_JSON")); + *data_type = TYPE_BYTE_SEQUENCE; + *data_size = key_part->length; + break; +#endif } DBUG_VOID_RETURN; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_multiple_column_key_codec.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_multiple_column_key_codec.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_multiple_column_key_codec.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_multiple_column_key_codec.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -20,11 +20,11 @@ #ifndef MRN_MULTIPLE_COLUMN_KEY_CODEC_HPP_ #define MRN_MULTIPLE_COLUMN_KEY_CODEC_HPP_ -#include - #include #include +#include + namespace mrn { class MultipleColumnKeyCodec { public: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operation.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operation.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operation.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operation.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,51 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include "mrn_operation.hpp" + +// for debug +#define MRN_CLASS_NAME "mrn::Operation" + +namespace mrn { + Operation::Operation(mrn::Operations *operations, + const char *type, + const char *table_name, + size_t table_name_size) + : operations_(operations), + id_(operations_->start(type, table_name, table_name_size)) { + } + + Operation::~Operation() { + MRN_DBUG_ENTER_METHOD(); + + operations_->finish(id_); + + DBUG_VOID_RETURN; + } + + void Operation::record_target(grn_id record_id) { + MRN_DBUG_ENTER_METHOD(); + + operations_->record_target(id_, record_id); + + DBUG_VOID_RETURN; + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operation.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operation.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operation.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operation.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef MRN_OPERATION_HPP_ +#define MRN_OPERATION_HPP_ + +#include + +namespace mrn { + class Operation { + public: + Operation(mrn::Operations *operations, + const char *type, + const char *table_name, + size_t table_name_size); + ~Operation(); + + void record_target(grn_id record_id); + + private: + mrn::Operations *operations_; + grn_id id_; + }; +} + +#endif /* MRN_OPERATION_HPP_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operations.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operations.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operations.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operations.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,401 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include + +#include "mrn_operations.hpp" + +// for debug +#define MRN_CLASS_NAME "mrn::Operations" + +#define TABLE_NAME "mroonga_operations" +#define COLUMN_TYPE_NAME "type" +#define COLUMN_TABLE_NAME "table" +#define COLUMN_RECORD_NAME "record" + +namespace mrn { + Operations::Operations(grn_ctx *ctx) + : ctx_(ctx) { + MRN_DBUG_ENTER_METHOD(); + + GRN_TEXT_INIT(&text_buffer_, GRN_OBJ_DO_SHALLOW_COPY); + GRN_UINT32_INIT(&id_buffer_, 0); + + table_ = grn_ctx_get(ctx_, TABLE_NAME, -1); + if (!table_) { + table_ = grn_table_create(ctx_, + TABLE_NAME, strlen(TABLE_NAME), + NULL, + GRN_OBJ_TABLE_NO_KEY | GRN_OBJ_PERSISTENT, + NULL, NULL); + columns_.type_ = + grn_column_create(ctx_, table_, + COLUMN_TYPE_NAME, strlen(COLUMN_TYPE_NAME), + NULL, + GRN_OBJ_COLUMN_SCALAR | GRN_OBJ_PERSISTENT, + grn_ctx_at(ctx_, GRN_DB_SHORT_TEXT)); + columns_.table_ = + grn_column_create(ctx_, table_, + COLUMN_TABLE_NAME, strlen(COLUMN_TABLE_NAME), + NULL, + GRN_OBJ_COLUMN_SCALAR | GRN_OBJ_PERSISTENT, + grn_ctx_at(ctx_, GRN_DB_SHORT_TEXT)); + columns_.record_ = + grn_column_create(ctx_, table_, + COLUMN_RECORD_NAME, strlen(COLUMN_RECORD_NAME), + NULL, + GRN_OBJ_COLUMN_SCALAR | GRN_OBJ_PERSISTENT, + grn_ctx_at(ctx_, GRN_DB_UINT32)); + } else { + columns_.type_ = grn_ctx_get(ctx_, TABLE_NAME "." COLUMN_TYPE_NAME, -1); + columns_.table_ = grn_ctx_get(ctx_, TABLE_NAME "." COLUMN_TABLE_NAME, -1); + columns_.record_ = grn_ctx_get(ctx_, TABLE_NAME "." COLUMN_RECORD_NAME, -1); + } + + is_enabled_recording_ = true; + + DBUG_VOID_RETURN; + } + + Operations::~Operations() { + MRN_DBUG_ENTER_METHOD(); + + GRN_OBJ_FIN(ctx_, &id_buffer_); + GRN_OBJ_FIN(ctx_, &text_buffer_); + + DBUG_VOID_RETURN; + } + + bool Operations::is_locked() { + MRN_DBUG_ENTER_METHOD(); + + if (grn_obj_is_locked(ctx_, table_) > 0) + DBUG_RETURN(true); + + if (grn_obj_is_locked(ctx_, columns_.type_) > 0) + DBUG_RETURN(true); + + if (grn_obj_is_locked(ctx_, columns_.table_) > 0) + DBUG_RETURN(true); + + if (grn_obj_is_locked(ctx_, columns_.record_) > 0) + DBUG_RETURN(true); + + DBUG_RETURN(false); + } + + grn_id Operations::start(const char *type, + const char *table_name, size_t table_name_size) { + MRN_DBUG_ENTER_METHOD(); + + if (!is_enabled_recording_) { + DBUG_RETURN(GRN_ID_NIL); + } + + grn_id id = grn_table_add(ctx_, table_, NULL, 0, NULL); + + GRN_TEXT_SETS(ctx_, &text_buffer_, type); + grn_obj_set_value(ctx_, columns_.type_, id, &text_buffer_, GRN_OBJ_SET); + + GRN_TEXT_SET(ctx_, &text_buffer_, table_name, table_name_size); + grn_obj_set_value(ctx_, columns_.table_, id, &text_buffer_, GRN_OBJ_SET); + + DBUG_RETURN(id); + } + + void Operations::record_target(grn_id id, grn_id record_id) { + MRN_DBUG_ENTER_METHOD(); + + if (!is_enabled_recording_) { + DBUG_VOID_RETURN; + } + + GRN_UINT32_SET(ctx_, &id_buffer_, record_id); + grn_obj_set_value(ctx_, columns_.record_, id, &id_buffer_, GRN_OBJ_SET); + + DBUG_VOID_RETURN; + } + + void Operations::finish(grn_id id) { + MRN_DBUG_ENTER_METHOD(); + + if (!is_enabled_recording_) { + DBUG_VOID_RETURN; + } + + grn_table_delete_by_id(ctx_, table_, id); + + DBUG_VOID_RETURN; + } + + void Operations::enable_recording() { + MRN_DBUG_ENTER_METHOD(); + + is_enabled_recording_ = true; + + DBUG_VOID_RETURN; + } + + void Operations::disable_recording() { + MRN_DBUG_ENTER_METHOD(); + + is_enabled_recording_ = false; + + DBUG_VOID_RETURN; + } + + grn_hash *Operations::collect_processing_table_names() { + MRN_DBUG_ENTER_METHOD(); + + grn_hash *table_names = + grn_hash_create(ctx_, NULL, GRN_TABLE_MAX_KEY_SIZE, 0, + GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_KEY_VAR_SIZE); + + grn_table_cursor *cursor; + cursor = grn_table_cursor_open(ctx_, table_, NULL, 0, NULL, 0, 0, -1, 0); + if (!cursor) { + GRN_LOG(ctx_, GRN_LOG_NOTICE, + "[operations] failed to open cursor: %s", + ctx_->errbuf); + DBUG_RETURN(table_names); + } + + grn_id id; + while ((id = grn_table_cursor_next(ctx_, cursor))) { + GRN_BULK_REWIND(&text_buffer_); + grn_obj_get_value(ctx_, columns_.table_, id, &text_buffer_); + if (GRN_TEXT_LEN(&text_buffer_) > 0) { + grn_hash_add(ctx_, table_names, + GRN_TEXT_VALUE(&text_buffer_), + GRN_TEXT_LEN(&text_buffer_), + NULL, + NULL); + } + } + grn_table_cursor_close(ctx_, cursor); + + DBUG_RETURN(table_names); + } + + int Operations::repair(const char *table_name, size_t table_name_size) { + MRN_DBUG_ENTER_METHOD(); + + int error = 0; + + grn_table_cursor *cursor; + cursor = grn_table_cursor_open(ctx_, table_, NULL, 0, NULL, 0, 0, -1, 0); + if (!cursor) { + error = HA_ERR_CRASHED_ON_USAGE; + if (ctx_->rc) { + my_message(error, ctx_->errbuf, MYF(0)); + } else { + my_message(error, + "mroonga: repair: " + "failed to open cursor for operations table", + MYF(0)); + } + DBUG_RETURN(error); + } + + grn_obj *target_table = grn_ctx_get(ctx_, table_name, table_name_size); + if (!target_table) { + GRN_LOG(ctx_, GRN_LOG_WARNING, + "table doesn't exist for auto repair: <%.*s>", + static_cast(table_name_size), table_name); + } + + grn_id id; + while ((id = grn_table_cursor_next(ctx_, cursor))) { + GRN_BULK_REWIND(&text_buffer_); + grn_obj_get_value(ctx_, columns_.table_, id, &text_buffer_); + if (!((static_cast(GRN_TEXT_LEN(&text_buffer_)) == + table_name_size) && + memcmp(GRN_TEXT_VALUE(&text_buffer_), + table_name, + table_name_size) == 0)) { + continue; + } + + if (!target_table) { + grn_rc rc = grn_table_cursor_delete(ctx_, cursor); + if (rc != GRN_SUCCESS) { + GRN_BULK_REWIND(&text_buffer_); + grn_obj_get_value(ctx_, columns_.type_, id, &text_buffer_); + GRN_TEXT_PUTC(ctx_, &text_buffer_, '\0'); + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: repair: failed to delete an orphan operation: " + "[%u]: <%.*s>[%s]: <%s>(%d)", + id, + static_cast(table_name_size), table_name, + GRN_TEXT_VALUE(&text_buffer_), + ctx_->errbuf, + rc); + my_message(error, error_message, MYF(0)); + break; + } + continue; + } + + GRN_BULK_REWIND(&id_buffer_); + grn_obj_get_value(ctx_, columns_.record_, id, &id_buffer_); + grn_id record_id = GRN_UINT32_VALUE(&id_buffer_); + if (record_id == GRN_ID_NIL) { + grn_rc rc = grn_table_cursor_delete(ctx_, cursor); + if (rc != GRN_SUCCESS) { + GRN_BULK_REWIND(&text_buffer_); + grn_obj_get_value(ctx_, columns_.type_, id, &text_buffer_); + GRN_TEXT_PUTC(ctx_, &text_buffer_, '\0'); + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: repair: " + "failed to delete an operation that has no related record: " + "[%u]: <%.*s>[%s]: <%s>(%d)", + id, + static_cast(table_name_size), table_name, + GRN_TEXT_VALUE(&text_buffer_), + ctx_->errbuf, + rc); + my_message(error, error_message, MYF(0)); + break; + } + continue; + } + + GRN_BULK_REWIND(&text_buffer_); + grn_obj_get_value(ctx_, columns_.type_, id, &text_buffer_); + GRN_TEXT_PUTC(ctx_, &text_buffer_, '\0'); + if (strcmp(GRN_TEXT_VALUE(&text_buffer_), "write") == 0 || + strcmp(GRN_TEXT_VALUE(&text_buffer_), "delete") == 0) { + grn_rc rc = grn_table_delete_by_id(ctx_, target_table, record_id); + if (rc != GRN_SUCCESS) { + error = HA_ERR_CRASHED_ON_USAGE; + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: repair: failed to delete an incomplete record: " + "[%u]: <%.*s>[%u]: <%s>(%d)", + id, + static_cast(table_name_size), table_name, + record_id, + ctx_->errbuf, + rc); + my_message(error, error_message, MYF(0)); + break; + } + + rc = grn_table_cursor_delete(ctx_, cursor); + if (rc != GRN_SUCCESS) { + error = HA_ERR_CRASHED_ON_USAGE; + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: repair: failed to delete an incomplete operation: " + "[%u]: <%.*s>[%u][%s]: <%s>(%d)", + id, + static_cast(table_name_size), table_name, + record_id, + GRN_TEXT_VALUE(&text_buffer_), + ctx_->errbuf, + rc); + my_message(error, error_message, MYF(0)); + break; + } + } else if (strcmp(GRN_TEXT_VALUE(&text_buffer_), "update") == 0) { + error = HA_ERR_CRASHED_ON_USAGE; + my_message(error, + "mroonga: repair: can't recover from crash while updating", + MYF(0)); + break; + } else { + error = HA_ERR_CRASHED_ON_USAGE; + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: repair: unknown operation type: " + "[%u]: <%.*s>[%u]: <%s>", + id, + static_cast(table_name_size), table_name, + record_id, + GRN_TEXT_VALUE(&text_buffer_)); + my_message(error, error_message, MYF(0)); + break; + } + } + grn_table_cursor_close(ctx_, cursor); + + DBUG_RETURN(error); + } + + int Operations::clear(const char *table_name, size_t table_name_size) { + MRN_DBUG_ENTER_METHOD(); + + int error = 0; + + grn_table_cursor *cursor; + cursor = grn_table_cursor_open(ctx_, table_, NULL, 0, NULL, 0, 0, -1, 0); + if (!cursor) { + error = HA_ERR_CRASHED_ON_USAGE; + if (ctx_->rc) { + my_message(error, ctx_->errbuf, MYF(0)); + } else { + my_message(error, + "mroonga: clear: " + "failed to open cursor for operations table", + MYF(0)); + } + DBUG_RETURN(error); + } + + grn_id id; + while ((id = grn_table_cursor_next(ctx_, cursor))) { + GRN_BULK_REWIND(&text_buffer_); + grn_obj_get_value(ctx_, columns_.table_, id, &text_buffer_); + if ((static_cast(GRN_TEXT_LEN(&text_buffer_)) == + table_name_size) && + memcmp(GRN_TEXT_VALUE(&text_buffer_), + table_name, + table_name_size) == 0) { + grn_rc rc = grn_table_cursor_delete(ctx_, cursor); + if (rc != GRN_SUCCESS) { + error = HA_ERR_CRASHED_ON_USAGE; + GRN_BULK_REWIND(&id_buffer_); + grn_obj_get_value(ctx_, columns_.record_, id, &id_buffer_); + GRN_BULK_REWIND(&text_buffer_); + grn_obj_get_value(ctx_, columns_.type_, id, &text_buffer_); + GRN_TEXT_PUTC(ctx_, &text_buffer_, '\0'); + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "mroonga: clear: failed to delete an operation: " + "[%u]: <%.*s>[%u][%s]: <%s>(%d)", + id, + static_cast(table_name_size), table_name, + GRN_UINT32_VALUE(&id_buffer_), + GRN_TEXT_VALUE(&text_buffer_), + ctx_->errbuf, + rc); + my_message(error, error_message, MYF(0)); + break; + } + } + } + grn_table_cursor_close(ctx_, cursor); + + DBUG_RETURN(error); + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operations.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operations.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_operations.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_operations.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,60 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2015 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef MRN_OPERATIONS_HPP_ +#define MRN_OPERATIONS_HPP_ + +#include + +namespace mrn { + class Operations { + public: + Operations(grn_ctx *ctx); + ~Operations(); + + bool is_locked(); + + grn_id start(const char *type, + const char *table_name, size_t table_name_size); + void record_target(grn_id id, grn_id target_id); + void finish(grn_id id); + + void enable_recording(); + void disable_recording(); + + grn_hash *collect_processing_table_names(); + + int repair(const char *table_name, size_t table_name_size); + int clear(const char *table_name, size_t table_name_size); + + private: + grn_ctx *ctx_; + grn_obj text_buffer_; + grn_obj id_buffer_; + grn_obj *table_; + struct { + grn_obj *type_; + grn_obj *table_; + grn_obj *record_; + } columns_; + bool is_enabled_recording_; + }; +} + +#endif /* MRN_OPERATIONS_HPP_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_path_mapper.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_path_mapper.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_path_mapper.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_path_mapper.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -222,4 +222,8 @@ mysql_path_[i] = '\0'; return mysql_path_; } + + bool PathMapper::is_internal_table_name() { + return mysql_table_name()[0] == '#'; + } } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_path_mapper.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_path_mapper.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_path_mapper.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_path_mapper.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -38,6 +38,8 @@ const char *table_name(); const char *mysql_table_name(); const char *mysql_path(); + bool is_internal_table_name(); + bool is_temporary_table_name(); private: const char *original_mysql_path_; const char *path_prefix_; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_query_parser.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_query_parser.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_query_parser.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_query_parser.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,361 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "mrn_query_parser.hpp" + +#include + +extern "C" { + /* Groonga's internal functions */ + int grn_atoi(const char *nptr, const char *end, const char **rest); + uint grn_atoui(const char *nptr, const char *end, const char **rest); +} + +#define MRN_CLASS_NAME "mrn::QueryParser" + +namespace mrn { + QueryParser::QueryParser(grn_ctx *ctx, + THD *thd, + grn_obj *expression, + grn_obj *default_column, + uint n_sections, + grn_obj *match_columns) + : ctx_(ctx), + thd_(thd), + expression_(expression), + default_column_(default_column), + n_sections_(n_sections), + match_columns_(match_columns) { + } + + QueryParser::~QueryParser() { + } + + grn_rc QueryParser::parse(const char *query, size_t query_length) { + MRN_DBUG_ENTER_METHOD(); + + const char *raw_query = NULL; + size_t raw_query_length = 0; + grn_operator default_operator = GRN_OP_OR; + grn_expr_flags expression_flags = 0; + parse_pragma(query, + query_length, + &raw_query, + &raw_query_length, + &default_operator, + &expression_flags); + + grn_obj *default_column = default_column_; + if (match_columns_) { + default_column = match_columns_; + } + grn_rc rc = grn_expr_parse(ctx_, + expression_, + raw_query, + raw_query_length, + default_column, + GRN_OP_MATCH, + default_operator, + expression_flags); + if (rc != GRN_SUCCESS) { + char error_message[MRN_MESSAGE_BUFFER_SIZE]; + snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, + "failed to parse fulltext search keyword: <%.*s>: <%s>", + static_cast(query_length), + query, + ctx_->errbuf); + variables::ActionOnError action = + variables::get_action_on_fulltext_query_error(thd_); + switch (action) { + case variables::ACTION_ON_ERROR_ERROR: + my_message(ER_PARSE_ERROR, error_message, MYF(0)); + break; + case variables::ACTION_ON_ERROR_ERROR_AND_LOG: + my_message(ER_PARSE_ERROR, error_message, MYF(0)); + GRN_LOG(ctx_, GRN_LOG_ERROR, "%s", error_message); + break; + case variables::ACTION_ON_ERROR_IGNORE: + break; + case variables::ACTION_ON_ERROR_IGNORE_AND_LOG: + GRN_LOG(ctx_, GRN_LOG_ERROR, "%s", error_message); + break; + } + } + + DBUG_RETURN(rc); + } + + void QueryParser::parse_pragma(const char *query, + size_t query_length, + const char **raw_query, + size_t *raw_query_length, + grn_operator *default_operator, + grn_expr_flags *flags) { + MRN_DBUG_ENTER_METHOD(); + + const char *current_query = query; + size_t current_query_length = query_length; + + *default_operator = GRN_OP_OR; + + if (current_query_length >= 4 && memcmp(current_query, "*SS ", 4) == 0) { + *raw_query = current_query + 4; + *raw_query_length = current_query_length - 4; + *flags = GRN_EXPR_SYNTAX_SCRIPT; + DBUG_VOID_RETURN; + } + + bool weight_specified = false; + *raw_query = query; + *raw_query_length = query_length; + *flags = default_expression_flags(); + if (current_query_length >= 2 && current_query[0] == '*') { + bool parsed = false; + bool done = false; + current_query++; + current_query_length--; + while (!done) { + size_t consumed_query_length = 0; + switch (current_query[0]) { + case 'D': + if (parse_pragma_d(current_query + 1, + current_query_length - 1, + default_operator, + &consumed_query_length)) { + parsed = true; + consumed_query_length += 1; + current_query += consumed_query_length; + current_query_length -= consumed_query_length; + } else { + done = true; + } + break; + case 'W': + if (parse_pragma_w(current_query + 1, + current_query_length - 1, + &consumed_query_length)) { + parsed = true; + weight_specified = true; + consumed_query_length += 1; + current_query += consumed_query_length; + current_query_length -= consumed_query_length; + } else { + done = true; + } + break; + default: + done = true; + break; + } + } + if (parsed) { + *raw_query = current_query; + *raw_query_length = current_query_length; + } + } + + // WORKAROUND: ignore the first '+' to support "+apple macintosh" pattern. + while (*raw_query_length > 0 && (*raw_query)[0] == ' ') { + (*raw_query)++; + (*raw_query_length)--; + } + if (*raw_query_length > 0 && (*raw_query)[0] == '+') { + (*raw_query)++; + (*raw_query_length)--; + } + if (!weight_specified && match_columns_) { + grn_expr_append_obj(ctx_, match_columns_, default_column_, GRN_OP_PUSH, 1); + } + + DBUG_VOID_RETURN; + } + + bool QueryParser::parse_pragma_w(const char *query, + size_t query_length, + size_t *consumed_query_length) { + MRN_DBUG_ENTER_METHOD(); + + *consumed_query_length = 0; + + grn_obj section_value_buffer; + GRN_UINT32_INIT(§ion_value_buffer, 0); + + MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(bool, specified_sections, n_sections_); + for (uint i = 0; i < n_sections_; ++i) { + specified_sections[i] = false; + } + + uint n_weights = 0; + while (query_length >= 1) { + if (n_weights >= 1) { + if (query[0] != ',') { + break; + } + size_t n_used_query_length = 1; + *consumed_query_length += n_used_query_length; + query_length -= n_used_query_length; + query += n_used_query_length; + if (query_length == 0) { + break; + } + } + + uint section = 0; + if ('1' <= query[0] && query[0] <= '9') { + const char *section_start = query; + const char *query_end = query + query_length; + const char *query_rest; + section = grn_atoui(section_start, query_end, &query_rest); + if (section_start == query_rest) { + break; + } + if (!(0 < section && section <= n_sections_)) { + break; + } + section -= 1; + specified_sections[section] = true; + size_t n_used_query_length = query_rest - query; + *consumed_query_length += n_used_query_length; + query_length -= n_used_query_length; + query += n_used_query_length; + } else { + break; + } + + int weight = 1; + if (query_length >= 2 && query[0] == ':') { + const char *weight_start = query + 1; + const char *query_end = query + query_length; + const char *query_rest; + weight = grn_atoi(weight_start, query_end, &query_rest); + if (weight_start == query_rest) { + break; + } + size_t n_used_query_length = query_rest - query; + *consumed_query_length += n_used_query_length; + query_length -= n_used_query_length; + query += n_used_query_length; + } + + n_weights++; + + append_section(section, + §ion_value_buffer, + weight, + n_weights); + } + + for (uint section = 0; section < n_sections_; ++section) { + if (specified_sections[section]) { + continue; + } + + ++n_weights; + + int default_weight = 1; + append_section(section, + §ion_value_buffer, + default_weight, + n_weights); + } + MRN_FREE_VARIABLE_LENGTH_ARRAYS(specified_sections); + + GRN_OBJ_FIN(ctx_, §ion_value_buffer); + + DBUG_RETURN(n_weights > 0); + } + + void QueryParser::append_section(uint section, + grn_obj *section_value_buffer, + int weight, + uint n_weights) { + MRN_DBUG_ENTER_METHOD(); + + if (!match_columns_) { + DBUG_VOID_RETURN; + } + + grn_expr_append_obj(ctx_, match_columns_, default_column_, GRN_OP_PUSH, 1); + GRN_UINT32_SET(ctx_, section_value_buffer, section); + grn_expr_append_const(ctx_, match_columns_, section_value_buffer, + GRN_OP_PUSH, 1); + grn_expr_append_op(ctx_, match_columns_, GRN_OP_GET_MEMBER, 2); + + if (weight != 1) { + grn_expr_append_const_int(ctx_, match_columns_, weight, GRN_OP_PUSH, 1); + grn_expr_append_op(ctx_, match_columns_, GRN_OP_STAR, 2); + } + + if (n_weights >= 2) { + grn_expr_append_op(ctx_, match_columns_, GRN_OP_OR, 2); + } + + DBUG_VOID_RETURN; + } + + bool QueryParser::parse_pragma_d(const char *query, + size_t query_length, + grn_operator *default_operator, + size_t *consumed_query_length) { + MRN_DBUG_ENTER_METHOD(); + + bool succeeded = true; + if (query_length >= 1 && query[0] == '+') { + *default_operator = GRN_OP_AND; + *consumed_query_length = 1; + } else if (query_length >= 1 && query[0] == '-') { + *default_operator = GRN_OP_AND_NOT; + *consumed_query_length = 1; + } else if (query_length >= 2 && memcmp(query, "OR", 2) == 0) { + *default_operator = GRN_OP_OR; + *consumed_query_length = 2; + } else { + succeeded = false; + } + + DBUG_RETURN(succeeded); + } + + grn_expr_flags QueryParser::default_expression_flags() { + MRN_DBUG_ENTER_METHOD(); + + ulonglong syntax_flags = variables::get_boolean_mode_syntax_flags(thd_); + grn_expr_flags expression_flags = 0; + if (syntax_flags == variables::BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT) { + expression_flags = GRN_EXPR_SYNTAX_QUERY | GRN_EXPR_ALLOW_LEADING_NOT; + } else { + if (syntax_flags & variables::BOOLEAN_MODE_SYNTAX_FLAG_SYNTAX_SCRIPT) { + expression_flags |= GRN_EXPR_SYNTAX_SCRIPT; + } else { + expression_flags |= GRN_EXPR_SYNTAX_QUERY; + } + if (syntax_flags & variables::BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_COLUMN) { + expression_flags |= GRN_EXPR_ALLOW_COLUMN; + } + if (syntax_flags & variables::BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_UPDATE) { + expression_flags |= GRN_EXPR_ALLOW_UPDATE; + } + if (syntax_flags & variables::BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_LEADING_NOT) { + expression_flags |= GRN_EXPR_ALLOW_LEADING_NOT; + } + } + + DBUG_RETURN(expression_flags); + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_query_parser.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_query_parser.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_query_parser.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_query_parser.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,67 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#include +#include + +#include + +namespace mrn { + class QueryParser { + public: + QueryParser(grn_ctx *ctx, + THD *thd, + grn_obj *expression, + grn_obj *default_column, + uint n_sections, + grn_obj *match_columns=NULL); + ~QueryParser(); + + grn_rc parse(const char *query, size_t query_length); + void parse_pragma(const char *query, + size_t query_length, + const char **raw_query, + size_t *raw_query_length, + grn_operator *default_operator, + grn_expr_flags *flags); + + private: + grn_ctx *ctx_; + THD *thd_; + grn_obj *expression_; + grn_obj *default_column_; + uint n_sections_; + grn_obj *match_columns_; + + bool parse_pragma_w(const char *query, + size_t query_length, + size_t *consumed_query_length); + void append_section(uint section, + grn_obj *section_value_buffer, + int weight, + uint n_weights); + bool parse_pragma_d(const char *query, + size_t query_length, + grn_operator *default_operator, + size_t *consumed_query_length); + grn_expr_flags default_expression_flags(); + }; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_smart_bitmap.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_smart_bitmap.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_smart_bitmap.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_smart_bitmap.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "mrn_smart_bitmap.hpp" + +namespace mrn { + SmartBitmap::SmartBitmap(MY_BITMAP *bitmap) + : bitmap_(bitmap) { + } + + SmartBitmap::~SmartBitmap() { + if (bitmap_) { + bitmap_free(bitmap_); + } + } + + MY_BITMAP *SmartBitmap::get() { + return bitmap_; + } + + MY_BITMAP *SmartBitmap::release() { + MY_BITMAP *bitmap = bitmap_; + bitmap_ = NULL; + return bitmap; + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_smart_bitmap.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_smart_bitmap.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_smart_bitmap.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_smart_bitmap.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,36 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#include +#include + +namespace mrn { + class SmartBitmap { + public: + SmartBitmap(MY_BITMAP *bitmap); + ~SmartBitmap(); + + MY_BITMAP *get(); + MY_BITMAP *release(); + private: + MY_BITMAP *bitmap_; + }; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_table_fields_offset_mover.cpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_table_fields_offset_mover.cpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_table_fields_offset_mover.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_table_fields_offset_mover.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "mrn_table_fields_offset_mover.hpp" + +namespace mrn { + TableFieldsOffsetMover::TableFieldsOffsetMover(TABLE *table, + my_ptrdiff_t diff) + : table_(table), + diff_(diff) { + uint n_columns = table_->s->fields; + for (uint i = 0; i < n_columns; ++i) { + Field *field = table_->field[i]; + field->move_field_offset(diff_); + } + } + + TableFieldsOffsetMover::~TableFieldsOffsetMover() { + uint n_columns = table_->s->fields; + for (uint i = 0; i < n_columns; ++i) { + Field *field = table_->field[i]; + field->move_field_offset(-diff_); + } + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_table_fields_offset_mover.hpp mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_table_fields_offset_mover.hpp --- mariadb-10.1-10.1.25/storage/mroonga/lib/mrn_table_fields_offset_mover.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/lib/mrn_table_fields_offset_mover.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,33 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#include + +namespace mrn { + class TableFieldsOffsetMover { + public: + TableFieldsOffsetMover(TABLE *table, my_ptrdiff_t diff); + ~TableFieldsOffsetMover(); + private: + TABLE *table_; + my_ptrdiff_t diff_; + }; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/Makefile.am 2017-12-21 15:48:51.000000000 +0000 @@ -1,9 +1,9 @@ +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_ARGS} AUTOMAKE_OPTIONS = 1.9.7 LOCALES = ja AM_CPPFLAGS = $(MYSQL_INCLUDES) $(GROONGA_CFLAGS) -I$(top_srcdir)/lib -ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS include sources.am @@ -49,7 +49,13 @@ cd $(top_srcdir) && \ git tag v$(VERSION) -a -m 'Mroonga $(VERSION)!!!' -update-latest-release: misc +ensure-cutter-source-path: + @if test -z "$(CUTTER_SOURCE_PATH)"; then \ + echo "\$$(CUTTER_SOURCE_PATH) is missing"; \ + exit 1; \ + fi + +update-latest-release: ensure-cutter-source-path @if test -z "$(OLD_RELEASE)"; then \ echo "\$$(OLD_RELEASE) is missing"; \ exit 1; \ @@ -63,17 +69,40 @@ exit 1; \ fi cd $(top_srcdir) && \ - misc/update-latest-release.rb \ + "$(CUTTER_SOURCE_PATH)/misc/update-latest-release.rb" \ $(PACKAGE) $(OLD_RELEASE) $(OLD_RELEASE_DATE) \ $(VERSION) $(NEW_RELEASE_DATE) \ packages/rpm/centos/mariadb-mroonga.spec.in \ + packages/rpm/centos/mariadb-10.1-mroonga.spec.in \ + packages/rpm/centos/mariadb-10.2-mroonga.spec.in \ packages/rpm/centos/mysql55-mroonga.spec.in \ packages/rpm/centos/mysql56-community-mroonga.spec.in \ - packages/debian/changelog \ + packages/rpm/centos/mysql57-community-mroonga.spec.in \ + packages/rpm/centos/percona-server-56-mroonga.spec.in \ + packages/rpm/centos/percona-server-57-mroonga.spec.in \ doc/source/install/*.rst \ doc/locale/*/LC_MESSAGES/install.po \ - $(MROONGA_GITHUB_COM_PATH)/index.html \ - $(MROONGA_GITHUB_COM_PATH)/ja/index.html + $(MROONGA_GITHUB_COM_PATH)/_config.yml + cd $(top_srcdir) && \ + "$(CUTTER_SOURCE_PATH)/misc/update-latest-release.rb" \ + $(PACKAGE)-5.5 $(OLD_RELEASE) $(OLD_RELEASE_DATE) \ + $(VERSION) $(NEW_RELEASE_DATE) \ + packages/debian-5.5/changelog + cd $(top_srcdir) && \ + "$(CUTTER_SOURCE_PATH)/misc/update-latest-release.rb" \ + $(PACKAGE)-5.6 $(OLD_RELEASE) $(OLD_RELEASE_DATE) \ + $(VERSION) $(NEW_RELEASE_DATE) \ + packages/debian-5.6/changelog + cd $(top_srcdir) && \ + "$(CUTTER_SOURCE_PATH)/misc/update-latest-release.rb" \ + $(PACKAGE)-5.7 $(OLD_RELEASE) $(OLD_RELEASE_DATE) \ + $(VERSION) $(NEW_RELEASE_DATE) \ + packages/debian-5.7/changelog + cd $(top_srcdir) && \ + "$(CUTTER_SOURCE_PATH)/misc/update-latest-release.rb" \ + $(PACKAGE)-mariadb-10.0 $(OLD_RELEASE) $(OLD_RELEASE_DATE) \ + $(VERSION) $(NEW_RELEASE_DATE) \ + packages/debian-mariadb-10.0/changelog update-po: @for lang in $(LOCALES); do \ @@ -144,10 +173,3 @@ echo-cutter: echo $(CUTTER) - -misc: - @if test -z "$(CUTTER_SOURCE_PATH)"; then \ - echo "\$$(CUTTER_SOURCE_PATH) is missing"; \ - exit 1; \ - fi - ln -s "$(CUTTER_SOURCE_PATH)/misc" misc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mrn_err.h mariadb-10.1-10.1.30/storage/mroonga/mrn_err.h --- mariadb-10.1-10.1.25/storage/mroonga/mrn_err.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mrn_err.h 2017-12-21 15:48:51.000000000 +0000 @@ -39,5 +39,8 @@ #define ER_MRN_INVALID_INDEX_FLAG_NUM 16508 #define ER_MRN_INVALID_INDEX_FLAG_STR \ "The index flag '%-.64s' is invalid. It is ignored" +#define ER_MRN_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN_NUM 16509 +#define ER_MRN_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN_STR \ + "Index for virtual generated column is not supported: %s" #endif /* MRN_ERR_H_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mrn_mysql_compat.h mariadb-10.1-10.1.30/storage/mroonga/mrn_mysql_compat.h --- mariadb-10.1-10.1.25/storage/mroonga/mrn_mysql_compat.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mrn_mysql_compat.h 2017-12-21 15:48:51.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2 -*- */ /* - Copyright(C) 2011-2015 Kouhei Sutou + Copyright(C) 2011-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -28,6 +28,10 @@ # define MRN_HAVE_MYSQL_TYPE_TIME2 #endif +#if MYSQL_VERSION_ID >= 50709 && !defined(MRN_MARIADB_P) +# define MRN_HAVE_MYSQL_TYPE_JSON +#endif + #if MYSQL_VERSION_ID < 50603 typedef MYSQL_ERROR Sql_condition; #endif @@ -42,6 +46,10 @@ typedef char *range_id_t; #endif +#if defined(MRN_MARIADB_P) || MYSQL_VERSION_ID < 80002 + typedef st_select_lex SELECT_LEX; +#endif + #if MYSQL_VERSION_ID >= 50609 # define MRN_KEY_HAS_USER_DEFINED_KEYPARTS #endif @@ -99,6 +107,9 @@ #if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100009 # define MRN_HAVE_TDC_ACQUIRE_SHARE +# if MYSQL_VERSION_ID < 100200 +# define MRN_TDC_ACQUIRE_SHARE_REQUIRE_KEY +# endif #endif #if MYSQL_VERSION_ID >= 50613 @@ -206,6 +217,26 @@ # define MRN_SUPPORT_CUSTOM_OPTIONS #endif +#ifdef MRN_MARIADB_P +# define MRN_HAVE_ITEM_EQUAL_FIELDS_ITERATOR +#endif + +#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P) +# define MRN_SELECT_LEX_GET_WHERE_COND(select_lex) \ + ((select_lex)->where_cond()) +# define MRN_SELECT_LEX_GET_HAVING_COND(select_lex) \ + ((select_lex)->having_cond()) +# define MRN_SELECT_LEX_GET_ACTIVE_OPTIONS(select_lex) \ + ((select_lex)->active_options()) +#else +# define MRN_SELECT_LEX_GET_WHERE_COND(select_lex) \ + ((select_lex)->where) +# define MRN_SELECT_LEX_GET_HAVING_COND(select_lex) \ + ((select_lex)->having) +# define MRN_SELECT_LEX_GET_ACTIVE_OPTIONS(select_lex) \ + ((select_lex)->options) +#endif + #if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000 # if MYSQL_VERSION_ID >= 100104 # define mrn_init_sql_alloc(thd, mem_root) \ @@ -221,17 +252,25 @@ MYF(0)) # endif #else +# if MYSQL_VERSION_ID >= 50709 +# define mrn_init_sql_alloc(thd, mem_root) \ + init_sql_alloc(mrn_memory_key, \ + mem_root, \ + TABLE_ALLOC_BLOCK_SIZE, \ + 0) +# else # define mrn_init_sql_alloc(thd, mem_root) \ init_sql_alloc(mem_root, \ TABLE_ALLOC_BLOCK_SIZE, \ 0) +# endif #endif #ifdef MRN_MARIADB_P # define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning #else # if MYSQL_VERSION_ID >= 50706 -# define MRN_ABORT_ON_WARNING(thd) false +# define MRN_ABORT_ON_WARNING(thd) thd->is_strict_mode() # else # define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning # endif @@ -240,4 +279,204 @@ #define MRN_ERROR_CODE_DATA_TRUNCATE(thd) \ (MRN_ABORT_ON_WARNING(thd) ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED) +#if MYSQL_VERSION_ID >= 50709 && !defined(MRN_MARIADB_P) +# define mrn_my_hash_init(hash, \ + charset, \ + default_array_elements, \ + key_offset, \ + key_length, \ + get_key, \ + free_element, \ + flags) \ + my_hash_init(hash, \ + charset, \ + default_array_elements, \ + key_offset, \ + key_length, \ + get_key, \ + free_element, \ + flags, \ + mrn_memory_key) +#else +# define mrn_my_hash_init(hash, \ + charset, \ + default_array_elements, \ + key_offset, \ + key_length, \ + get_key, \ + free_element, \ + flags) \ + my_hash_init(hash, \ + charset, \ + default_array_elements, \ + key_offset, \ + key_length, \ + get_key, \ + free_element, \ + flags) +#endif + +#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000 +# define mrn_strconvert(from_cs, \ + from, \ + from_length, \ + to_cs, \ + to, \ + to_length, \ + errors) \ + strconvert((from_cs), \ + (from), \ + (from_length), \ + (to_cs), \ + (to), \ + (to_length), \ + (errors)) +#else +# define mrn_strconvert(from_cs, \ + from, \ + from_length, \ + to_cs, \ + to, \ + to_length, \ + errors) \ + strconvert((from_cs), \ + (from), \ + (to_cs), \ + (to), \ + (to_length), \ + (errors)) +#endif + +#if MYSQL_VERSION_ID >= 50717 && !defined(MRN_MARIADB_P) +# define mrn_is_directory_separator(c) \ + is_directory_separator((c)) +#else +# define mrn_is_directory_separator(c) \ + (c == FN_LIBCHAR || c == FN_LIBCHAR2) +#endif + +#if ((MYSQL_VERSION_ID < 50636) || \ + (MYSQL_VERSION_ID >= 50700 && MYSQL_VERSION_ID < 50718)) && !defined(MRN_MARIADB_P) +# define MRN_HAVE_MYSQL_FIELD_PART_OF_KEY_NOT_CLUSTERED +#endif + +#if defined(MRN_MARIADB_P) && \ + ((MYSQL_VERSION_ID >= 100207) || \ + ((MYSQL_VERSION_ID >= 100126) && (MYSQL_VERSION_ID < 100200)) || \ + ((MYSQL_VERSION_ID >= 100032) && (MYSQL_VERSION_ID < 100100)) || \ + ((MYSQL_VERSION_ID >= 50557) && (MYSQL_VERSION_ID < 100000))) +# define mrn_create_partition_name(out, \ + out_length, \ + in1, \ + in2, \ + name_variant, \ + translate) \ + create_partition_name(out, out_length, in1, in2, name_variant, translate) +# define mrn_create_subpartition_name(out, \ + out_length, \ + in1, \ + in2, \ + in3, \ + name_variant) \ + create_subpartition_name(out, out_length, in1, in2, in3, name_variant) +#else +# define mrn_create_partition_name(out, \ + out_length, \ + in1, \ + in2, \ + name_variant, \ + translate) \ + (create_partition_name(out, in1, in2, name_variant, translate), 0) +# define mrn_create_subpartition_name(out, \ + out_length, \ + in1, \ + in2, \ + in3, \ + name_variant) \ + (create_subpartition_name(out, in1, in2, in3, name_variant), 0) +#endif + +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) +# define ITEM_SUM_GET_NEST_LEVEL(sum_item) (sum_item)->base_select->nest_level +# define ITEM_SUM_GET_AGGR_LEVEL(sum_item) (sum_item)->aggr_select->nest_level +# define ITEM_SUM_GET_MAX_AGGR_LEVEL(sum_item) (sum_item)->max_aggr_level +#else +# define ITEM_SUM_GET_NEST_LEVEL(sum_item) (sum_item)->nest_level +# define ITEM_SUM_GET_AGGR_LEVEL(sum_item) (sum_item)->aggr_level +# define ITEM_SUM_GET_MAX_AGGR_LEVEL(sum_item) (sum_item)->max_arg_level +#endif + +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002) + typedef bool mrn_bool; +#else + typedef my_bool mrn_bool; +#endif + +#define MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(type, variable_name, variable_size) \ + type *variable_name = \ + (type *)mrn_my_malloc(sizeof(type) * (variable_size), MYF(MY_WME)) +#define MRN_FREE_VARIABLE_LENGTH_ARRAYS(variable_name) \ + my_free(variable_name) + +#if ((defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100203)) || \ + (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50711) +# define MRN_ALTER_INPLACE_INFO_ADD_VIRTUAL_COLUMN \ + Alter_inplace_info::ADD_VIRTUAL_COLUMN +# define MRN_ALTER_INPLACE_INFO_ADD_STORED_BASE_COLUMN \ + Alter_inplace_info::ADD_STORED_BASE_COLUMN +# define MRN_ALTER_INPLACE_INFO_ADD_STORED_GENERATED_COLUMN \ + Alter_inplace_info::ADD_STORED_GENERATED_COLUMN +#else +# define MRN_ALTER_INPLACE_INFO_ADD_VIRTUAL_COLUMN 0 +# define MRN_ALTER_INPLACE_INFO_ADD_STORED_BASE_COLUMN \ + Alter_inplace_info::ADD_COLUMN +# define MRN_ALTER_INPLACE_INFO_ADD_STORED_GENERATED_COLUMN 0 +#endif + +#if (defined(HA_CAN_VIRTUAL_COLUMNS) || defined(HA_GENERATED_COLUMNS)) +# define MRN_SUPPORT_GENERATED_COLUMNS +#endif + +#ifdef MRN_MARIADB_P +# if (MYSQL_VERSION_ID >= 100200) +# define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ + (!field->stored_in_db()) +# define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ + (field->vcol_info && field->vcol_info->is_stored()) +# elif (MYSQL_VERSION_ID >= 50500) +# define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ + (!field->stored_in_db) +# define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ + (field->vcol_info && field->vcol_info->is_stored()) +# else +# define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) false +# define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) false +# endif +#else +# if (MYSQL_VERSION_ID >= 50708) +# define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ + (field->is_virtual_gcol()) +# define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ + (field->is_gcol() && !field->is_virtual_gcol()) +# elif (MYSQL_VERSION_ID >= 50706) +# define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) \ + (!field->stored_in_db) +# define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) \ + (field->gcol_info && field->gcol_info->get_field_stored()) +# else +# define MRN_GENERATED_COLUMNS_FIELD_IS_VIRTUAL(field) false +# define MRN_GENERATED_COLUMNS_FIELD_IS_STORED(field) false +# endif +#endif + +#ifdef MRN_MARIADB_P +# if (MYSQL_VERSION_ID >= 100203) +# define MRN_GENERATED_COLUMNS_UPDATE_VIRTUAL_FIELD(table, field) \ + (table->update_virtual_field(field)) +# else +# define MRN_GENERATED_COLUMNS_UPDATE_VIRTUAL_FIELD(table, field) \ + (field->vcol_info->expr_item->save_in_field(field, 0)) +# endif +#endif + #endif /* MRN_MYSQL_COMPAT_H_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mrn_mysql.h mariadb-10.1-10.1.30/storage/mroonga/mrn_mysql.h --- mariadb-10.1-10.1.25/storage/mroonga/mrn_mysql.h 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mrn_mysql.h 2017-12-21 15:48:51.000000000 +0000 @@ -43,21 +43,18 @@ #define MYSQL_SERVER 1 #include -#if MYSQL_VERSION_ID < 50500 -# include -# include -#else -# include -# include -# include -# include -#endif -#include - #ifdef MARIADB_BASE_VERSION # define MRN_MARIADB_P 1 #endif +#include +#include +#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID < 80002) +# include +#endif +#include +#include + #define MRN_MESSAGE_BUFFER_SIZE 1024 #define MRN_DBUG_ENTER_FUNCTION() DBUG_ENTER(__FUNCTION__) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mrn_table.cpp mariadb-10.1-10.1.30/storage/mroonga/mrn_table.cpp --- mariadb-10.1-10.1.25/storage/mroonga/mrn_table.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mrn_table.cpp 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ /* -*- c-basic-offset: 2 -*- */ /* Copyright(C) 2011-2013 Kentoku SHIBA - Copyright(C) 2011-2015 Kouhei Sutou + Copyright(C) 2011-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -202,7 +202,6 @@ const TABLE *table, partition_element **part_elem, partition_element **sub_elem) { - char tmp_name[FN_LEN]; partition_info *part_info = table->part_info; partition_element *tmp_part_elem = NULL, *tmp_sub_elem = NULL; bool tmp_flg = FALSE, tmp_find_flg = FALSE; @@ -224,17 +223,24 @@ List_iterator sub_it((*part_elem)->subpartitions); while ((*sub_elem = sub_it++)) { - create_subpartition_name(tmp_name, table->s->path.str, - (*part_elem)->partition_name, (*sub_elem)->partition_name, - NORMAL_PART_NAME); - DBUG_PRINT("info", ("mroonga tmp_name=%s", tmp_name)); - if (table_name && !memcmp(table_name, tmp_name, table_name_length + 1)) + char subpartition_name[FN_REFLEN + 1]; + int error = mrn_create_subpartition_name(subpartition_name, + sizeof(subpartition_name), + table->s->path.str, + (*part_elem)->partition_name, + (*sub_elem)->partition_name, + NORMAL_PART_NAME); + if (error != 0) + DBUG_VOID_RETURN; + DBUG_PRINT("info", ("mroonga subpartition name=%s", subpartition_name)); + if (table_name && + memcmp(table_name, subpartition_name, table_name_length + 1) == 0) DBUG_VOID_RETURN; if ( tmp_flg && table_name && - *(tmp_name + table_name_length - 5) == '\0' && - !memcmp(table_name, tmp_name, table_name_length - 5) + *(subpartition_name + table_name_length - 5) == '\0' && + memcmp(table_name, subpartition_name, table_name_length - 5) == 0 ) { tmp_part_elem = *part_elem; tmp_sub_elem = *sub_elem; @@ -243,16 +249,24 @@ } } } else { - create_partition_name(tmp_name, table->s->path.str, - (*part_elem)->partition_name, NORMAL_PART_NAME, TRUE); - DBUG_PRINT("info", ("mroonga tmp_name=%s", tmp_name)); - if (table_name && !memcmp(table_name, tmp_name, table_name_length + 1)) + char partition_name[FN_REFLEN + 1]; + int error = mrn_create_partition_name(partition_name, + sizeof(partition_name), + table->s->path.str, + (*part_elem)->partition_name, + NORMAL_PART_NAME, + TRUE); + if (error != 0) + DBUG_VOID_RETURN; + DBUG_PRINT("info", ("mroonga partition name=%s", partition_name)); + if (table_name && + memcmp(table_name, partition_name, table_name_length + 1) == 0) DBUG_VOID_RETURN; if ( tmp_flg && table_name && - *(tmp_name + table_name_length - 5) == '\0' && - !memcmp(table_name, tmp_name, table_name_length - 5) + *(partition_name + table_name_length - 5) == '\0' && + memcmp(table_name, partition_name, table_name_length - 5) == 0 ) { tmp_part_elem = *part_elem; tmp_flg = FALSE; @@ -516,6 +530,7 @@ char *sprit_ptr[2]; char *tmp_ptr, *start_ptr; #endif + THD *thd = current_thd; MRN_DBUG_ENTER_FUNCTION(); #if MYSQL_VERSION_ID >= 50500 @@ -578,6 +593,10 @@ MRN_PARAM_STR_LIST("table", index_table, i); break; case 6: + push_warning_printf(thd, MRN_SEVERITY_WARNING, + ER_WARN_DEPRECATED_SYNTAX, + ER(ER_WARN_DEPRECATED_SYNTAX), + "parser", "tokenizer"); MRN_PARAM_STR_LIST("parser", key_tokenizer, i); break; case 9: @@ -998,29 +1017,34 @@ TABLE_SHARE *mrn_get_table_share(TABLE_LIST *table_list, int *error) { - uint key_length; TABLE_SHARE *share; THD *thd = current_thd; MRN_DBUG_ENTER_FUNCTION(); -#ifdef MRN_HAVE_GET_TABLE_DEF_KEY +#if defined(MRN_HAVE_TDC_ACQUIRE_SHARE) && \ + !defined(MRN_TDC_ACQUIRE_SHARE_REQUIRE_KEY) + share = tdc_acquire_share(thd, table_list, GTS_TABLE); +#else + uint key_length; +# ifdef MRN_HAVE_GET_TABLE_DEF_KEY const char *key; key_length = get_table_def_key(table_list, &key); -#else +# else char key[MAX_DBKEY_LENGTH]; key_length = create_table_def_key(thd, key, table_list, FALSE); -#endif -#ifdef MRN_HAVE_TABLE_DEF_CACHE +# endif +# ifdef MRN_HAVE_TABLE_DEF_CACHE my_hash_value_type hash_value; hash_value = my_calc_hash(mrn_table_def_cache, (uchar*) key, key_length); share = get_table_share(thd, table_list, key, key_length, 0, error, hash_value); -#elif defined(MRN_HAVE_TDC_ACQUIRE_SHARE) +# elif defined(MRN_HAVE_TDC_ACQUIRE_SHARE) share = tdc_acquire_share(thd, table_list->db, table_list->table_name, key, key_length, table_list->mdl_request.key.tc_hash_value(), GTS_TABLE, NULL); -#else +# else share = get_table_share(thd, table_list, key, key_length, 0, error); +# endif #endif DBUG_RETURN(share); } @@ -1051,7 +1075,7 @@ *error = ER_CANT_OPEN_FILE; DBUG_RETURN(NULL); } - share->tmp_table = INTERNAL_TMP_TABLE; // TODO: is this right? + share->tmp_table = NO_TMP_TABLE; // TODO: is this right? share->path.str = (char *) path; share->path.length = strlen(share->path.str); share->normalized_path.str = mrn_my_strdup(path, MYF(MY_WME)); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mrn_variables.hpp mariadb-10.1-10.1.30/storage/mroonga/mrn_variables.hpp --- mariadb-10.1-10.1.25/storage/mroonga/mrn_variables.hpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mrn_variables.hpp 2017-12-21 15:48:51.000000000 +0000 @@ -26,4 +26,28 @@ extern PSI_memory_key mrn_memory_key; #endif +namespace mrn { + namespace variables { + enum BooleanModeSyntaxFlag { + BOOLEAN_MODE_SYNTAX_FLAG_DEFAULT = (1 << 0), + BOOLEAN_MODE_SYNTAX_FLAG_SYNTAX_QUERY = (1 << 1), + BOOLEAN_MODE_SYNTAX_FLAG_SYNTAX_SCRIPT = (1 << 2), + BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_COLUMN = (1 << 3), + BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_UPDATE = (1 << 4), + BOOLEAN_MODE_SYNTAX_FLAG_ALLOW_LEADING_NOT = (1 << 5) + }; + + ulonglong get_boolean_mode_syntax_flags(THD *thd); + + enum ActionOnError { + ACTION_ON_ERROR_ERROR, + ACTION_ON_ERROR_ERROR_AND_LOG, + ACTION_ON_ERROR_IGNORE, + ACTION_ON_ERROR_IGNORE_AND_LOG, + }; + + ActionOnError get_action_on_fulltext_query_error(THD *thd); + } +} + #endif /* MRN_VARIABLES_HPP_ */ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_64bit.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_64bit.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_64bit.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_64bit.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright(C) 2013 Kentoku SHIBA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +disable_query_log; +disable_warnings; +let $version_compile_64bit= + `SELECT IF(@@version_compile_machine LIKE '%64%', 1, 0)`; +enable_warnings; +enable_query_log; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,8 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log -let $VERSION_COMPILE_OS_FREEBSD=`SELECT IF(@@version_compile_os like 'FREEBSD%', 1, 0);`; +let $version_compile_os_freebsd= + `SELECT IF(@@version_compile_os LIKE '%freebsd%', 1, 0);`; --enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_windows.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_embedded.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_embedded.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_embedded.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_embedded.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log let $libgroonga_embedded = `SELECT @@mroonga_libgroonga_embedded;`; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_lz4.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_lz4.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_lz4.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_lz4.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log let $libgroonga_support_lz4 = diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zlib.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zlib.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zlib.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zlib.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log let $libgroonga_support_zlib = diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zstd.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zstd.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zstd.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_libgroonga_support_zstd.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--disable_query_log +let $libgroonga_support_zstd = + `SELECT @@mroonga_libgroonga_support_zstd;`; +--enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log let $mariadb = `SELECT LOCATE('MariaDB', @@global.version) > 0`; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,5 @@ # Copyright(C) 2014 Toshihisa Tashiro +# Copyright(C) 2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,8 +13,19 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log -let $VERSION_COMPILE_OS_OSX=`SELECT IF(@@version_compile_os like 'osx%', 1, 0);`; +let $version_compile_os_osx=`SELECT IF(@@version_compile_os like 'osx%', 1, 0);`; +if ($version_compile_os_osx) { + let $version_compile_os_osx_10_8_or_later= + `SELECT IF(@@version_compile_os = 'osx10.6', 0, 1);`; + if ($version_compile_os_osx_10_8_or_later) { + let $version_compile_os_osx_10_8_or_later= + `SELECT IF(@@version_compile_os = 'osx10.7', 0, 1);`; + } +} +if (!$version_comiple_os_osx) { + let $version_compile_os_osx_10_8_or_later=0; +} --enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_solaris.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_solaris.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_solaris.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_solaris.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--disable_query_log +let $version_compile_os_solaris= + `SELECT IF(@@version_compile_os LIKE 'sun-solaris%', 1, 0);`; +--enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_strict_sql_mode.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_strict_sql_mode.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_strict_sql_mode.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_strict_sql_mode.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--disable_query_log +let $strict_sql_mode = + `SELECT @@sql_mode LIKE '%STRICT_TRANS_TABLES%' OR + @@sql_mode LIKE '%STRICT_ALL_TABLES%'`; +--enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2012-2015 Kouhei Sutou +# Copyright(C) 2012-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,19 +12,22 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log let $version_major_minor = `SELECT CAST(SUBSTRING_INDEX(@@global.version, '.', 2) AS DECIMAL(4, 2))`; -let $version_55 = `SELECT $version_major_minor = 5.5`; -let $version_56 = `SELECT $version_major_minor = 5.6`; -let $version_57 = `SELECT $version_major_minor = 5.7`; -let $version_100 = `SELECT $version_major_minor = 10.0`; +let $version_5_5 = `SELECT $version_major_minor = 5.5`; +let $version_5_6 = `SELECT $version_major_minor = 5.6`; +let $version_5_7 = `SELECT $version_major_minor = 5.7`; +let $version_10_0 = `SELECT $version_major_minor = 10.0`; +let $version_10_1 = `SELECT $version_major_minor = 10.1`; +let $version_10_2 = `SELECT $version_major_minor = 10.2`; -let $version_55_or_later = `SELECT $version_major_minor >= 5.5`; -let $version_56_or_later = `SELECT $version_major_minor >= 5.6`; -let $version_57_or_later = `SELECT $version_major_minor >= 5.7`; -let $version_100_or_later = `SELECT $version_major_minor >= 10.0`; +let $version_5_5_or_later = `SELECT $version_major_minor >= 5.5`; +let $version_5_6_or_later = `SELECT $version_major_minor >= 5.6`; +let $version_5_7_or_later = `SELECT $version_major_minor >= 5.7`; +let $version_10_0_or_later = `SELECT $version_major_minor >= 10.0`; +let $version_10_2_or_later = `SELECT $version_major_minor >= 10.2`; --enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log let $VERSION_COMPILE_OS_WIN=`SELECT IF(@@version_compile_os like 'Win%', 1, 0)`; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -# Copyright(C) 2013 Kentoku SHIBA -# Copyright(C) 2014 Toshihisa Tashiro -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/skip_osx.inc - -disable_query_log; -disable_warnings; -let $VERSION_COMPILE_64BIT= - `SELECT IF(@@version_compile_machine like '%64%', 1, 0)`; -enable_warnings; -enable_query_log; -if ($VERSION_COMPILE_64BIT) { - skip Need a 32 bit machine/binary; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -# Copyright(C) 2013 Kentoku SHIBA -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - -disable_query_log; -disable_warnings; -let $VERSION_COMPILE_64BIT= - `SELECT IF(@@version_compile_machine like '%64%', 1, 0)`; -enable_warnings; -enable_query_log; -if (!$VERSION_COMPILE_64BIT) { - skip Need a 64 binary; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_mariadb.inc --source ../../include/mroonga/check_version.inc @@ -22,11 +22,11 @@ } if (!$mariadb) { - if ($version_56) { + if ($version_5_6) { let $fractional_seconds = `SELECT @@global.version >= '5.6'`; } } if (!$fractional_seconds) { - skip fractional seconds in time values are available in MySQL version 5.6 or later or MariaDB; + --skip fractional seconds in time values are available in MySQL version 5.6 or later or MariaDB } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,10 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_freebsd.inc -if (!$VERSION_COMPILE_OS_FREEBSD) { - skip Need OS FreeBSD; +if (!$version_compile_os_freebsd) { + --skip Need OS FreeBSD } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_groonga_plugin_register.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_groonga_plugin_register.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_groonga_plugin_register.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_groonga_plugin_register.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_libgroonga_embedded.inc if ($libgroonga_embedded) { --source ../../include/mroonga/have_mroonga_deinit.inc - skip "This test requires plugin_register of Groonga. libgroonga embedded build doesn't support it."; + --skip This test requires plugin_register of Groonga. libgroonga embedded build doesn't support it. } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb_10_2_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb_10_2_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb_10_2_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb_10_2_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if (!$mariadb) { + --skip This test is for MariaDB version 10.2.x or later +} + +if (!$version_10_2_or_later) { + --skip This test is for MariaDB version 10.2.x or later +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mariadb.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,10 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_mariadb.inc if (!$mariadb) { - skip This test is for MariaDB; + --skip This test is for MariaDB } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA disable_query_log; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,6 +12,6 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -let $MYSQLD_DATADIR= `select @@datadir`; +let MYSQLD_DATADIR= `select @@datadir`; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_ha_mroonga_so.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql_5_7_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql_5_7_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql_5_7_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql_5_7_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($mariadb) { + --skip This test is for MySQL version 5.7.x or later +} + +if (!$version_5_7_or_later) { + --skip This test is for MySQL version 5.7.x or later +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,10 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_mariadb.inc if ($mariadb) { - skip This test is for MySQL; + --skip This test is for MySQL } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_signed_64bit_time_t.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_signed_64bit_time_t.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_signed_64bit_time_t.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_signed_64bit_time_t.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,28 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_64bit.inc +--source ../../include/mroonga/check_osx.inc + +if (!$version_compile_64bit) { + --skip Need a 64 binary for signed 64bit time_t +} + +if ($version_compile_os_osx) { + if (!$version_compile_os_osx_10_8_or_later) { + --skip Need OS X 10.8 or later for signed 64bit time_t + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_solaris.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_solaris.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_solaris.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_solaris.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_solaris.inc + +if (!$version_compile_os_solaris) { + --skip Need Solaris +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_strict_sql_mode.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_strict_sql_mode.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_strict_sql_mode.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_strict_sql_mode.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_strict_sql_mode.inc + +if (!$strict_sql_mode) { + --skip This test is for STRICT_ALL_TABLES or STRICT_TRANS_TABLES +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2013-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc + +if (!$version_10_0) { + --skip This test is for MariaDB version 10.0.x +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc - -if (!$version_100) { - skip This test is for MariaDB version 10.0.x; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_10_0_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2013-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc + +if (!$version_10_0_or_later) { + --skip This test is for MariaDB version 10.0.x or later +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc - -if (!$version_100_or_later) { - skip This test is for MariaDB version 10.0.x or later; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_5.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_5.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_5.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_5.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2012-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc + +if (!$version_5_5) { + --skip This test is for MySQL version 5.5.x +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Copyright(C) 2012 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc - -if (!$version_55) { - skip This test is for MySQL version 5.5.x; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2012 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc + +if (!$version_5_6) { + --skip This test is for MySQL version 5.6.x +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Copyright(C) 2012 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc - -if (!$version_56) { - skip This test is for MySQL version 5.6.x; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_6_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc + +if (!$version_5_6_or_later) { + --skip This test is for MySQL version 5.6.x or later +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc - -if (!$version_56_or_later) { - skip This test is for MySQL version 5.6.x or later; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc + +if (!$version_5_7) { + --skip This test is for MySQL version 5.7.x +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_57.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_57.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_57.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_57.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Copyright(C) 2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc - -if (!$version_57) { - skip This test is for MySQL version 5.7.x; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_5_7_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2015-2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc + +if (!$version_5_7_or_later) { + --skip This test is for MySQL version 5.7.x or later or MariaDB 10.0.x or later +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2013 Kouhei Sutou +# Copyright(C) 2013-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_ha_mroonga_so.inc @@ -21,4 +21,8 @@ eval CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME $ha_mroonga_so; eval CREATE FUNCTION mroonga_command RETURNS STRING SONAME $ha_mroonga_so; eval CREATE FUNCTION mroonga_escape RETURNS STRING SONAME $ha_mroonga_so; +eval CREATE FUNCTION mroonga_snippet_html RETURNS STRING SONAME $ha_mroonga_so; +eval CREATE FUNCTION mroonga_normalize RETURNS STRING SONAME $ha_mroonga_so; +eval CREATE FUNCTION mroonga_highlight_html RETURNS STRING SONAME $ha_mroonga_so; +eval CREATE FUNCTION mroonga_query_expand RETURNS STRING SONAME $ha_mroonga_so; --enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/print_groonga_query_log.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/print_groonga_query_log.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/print_groonga_query_log.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/print_groonga_query_log.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,8 @@ +SHOW GLOBAL VARIABLES LIKE "mroonga_query_log_file"; +perl; +open(F, '<', $_="$ENV{MYSQLD_DATADIR}/groonga-query-log.log") or die "open(<$_): $!"; +while () { + s/^[^|]+\|[^|]+\|[^|]+\| *//; + print; +} +EOF diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,10 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_freebsd.inc -if ($VERSION_COMPILE_OS_FREEBSD) { - skip This test is not for FreeBSD; +if ($version_compile_os_freebsd) { + --skip This test is not for FreeBSD } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_0_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_0_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_0_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_0_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2012-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($mariadb) { + if ($version_10_0_or_later) { + --skip This test is not for MariaDB 10.x + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_100_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_100_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_100_or_later.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_100_or_later.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# Copyright(C) 2012-2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc ---source ../../include/mroonga/check_mariadb.inc - -if ($version_100_or_later) { - if ($mariadb) { - skip This test is not for MariaDB 10.x; - } -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($version_10_1) { + if ($mariadb) { + --skip This test is not for MariaDB 10.1.x + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1_or_earlier.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1_or_earlier.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1_or_earlier.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_1_or_earlier.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($mariadb) { + if (!$version_10_2_or_later) { + --skip This test is not for MariaDB 5.x, MariaDB 10.0.x nor 10.1.x + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_2_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_2_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_2_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_10_2_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($mariadb) { + if ($version_10_2_or_later) { + --skip This test is not for MariaDB 10.2.x or later + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_5_5.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_5_5.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_5_5.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_5_5.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2012-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($version_5_5) { + if ($mariadb) { + --skip This test is not for MariaDB 5.5.x + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# Copyright(C) 2012-2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc ---source ../../include/mroonga/check_mariadb.inc - -if ($version_55) { - if ($mariadb) { - skip This test is not for MariaDB 5.5.x; - } -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_5.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_5.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_5.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_5.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2014-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($version_5_5) { + if (!$mariadb) { + --skip This test is not for MySQL 5.5.x + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# Copyright(C) 2014 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc ---source ../../include/mroonga/check_mariadb.inc - -if ($version_55) { - if (!$mariadb) { - skip This test is not for MySQL 5.5.x; - } -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($version_5_7) { + if (!$mariadb) { + --skip This test is not for MySQL 5.7.x + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_57.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_57.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_57.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_57.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# Copyright(C) 2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/check_version.inc ---source ../../include/mroonga/check_mariadb.inc - -if ($version_57) { - if (!$mariadb) { - skip This test is not for MySQL 5.7.x; - } -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7_or_later.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7_or_later.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7_or_later.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_5_7_or_later.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_version.inc +--source ../../include/mroonga/check_mariadb.inc + +if ($version_5_7_or_later) { + if (!$mariadb) { + --skip This test is not for MySQL 5.7.x or later + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,10 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_osx.inc if ($VERSION_COMPILE_OS_OSX) { - skip This test is not for OSX; + --skip This test is not for OSX } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_signed_64bit_time_t.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_signed_64bit_time_t.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_signed_64bit_time_t.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_signed_64bit_time_t.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,28 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_64bit.inc +--source ../../include/mroonga/check_osx.inc + +if ($version_compile_64bit) { + --skip This test is for environment that doesn't have signed 64bit time_t +} + +if ($version_compile_os_osx) { + if (!$version_compile_os_osx_10_8_or_later) { + --skip This test is not for OS X 10.7 or earlier that isn't detected signed 64bit time_t availability + } +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris10.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris10.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris10.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris10.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -if (`SELECT @@version_compile_os='solaris10'`) { - skip This test is not for Solaris 10; -} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_solaris.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_solaris.inc + +if ($version_compile_os_solaris) { + --skip This test is not for Solaris +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_strict_sql_mode.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_strict_sql_mode.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_strict_sql_mode.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_strict_sql_mode.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_strict_sql_mode.inc + +if ($strict_sql_mode) { + --skip This test is not for STRICT_ALL_TABLES nor STRICT_TRANS_TABLES +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_lz4.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_lz4.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_lz4.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_lz4.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_libgroonga_support_lz4.inc if (!$libgroonga_support_lz4) { --source ../../include/mroonga/have_mroonga_deinit.inc - skip "This test is for libgroonga supports lz4"; + --skip This test is for libgroonga supports lz4 } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zlib.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zlib.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zlib.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zlib.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_libgroonga_support_zlib.inc if (!$libgroonga_support_zlib) { --source ../../include/mroonga/have_mroonga_deinit.inc - skip "This test is for libgroonga supports zlib"; + --skip This test is for libgroonga supports zlib } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zstd.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zstd.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zstd.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/support_libgroonga_zstd.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_libgroonga_support_zstd.inc + +if (!$libgroonga_support_zstd) { + --source ../../include/mroonga/have_mroonga_deinit.inc + --skip This test is for libgroonga supports zstd +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2013 Kouhei Sutou +# Copyright(C) 2013-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,11 +12,15 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --disable_query_log DROP FUNCTION last_insert_grn_id; DROP FUNCTION mroonga_snippet; DROP FUNCTION mroonga_command; DROP FUNCTION mroonga_escape; +DROP FUNCTION mroonga_snippet_html; +DROP FUNCTION mroonga_normalize; +DROP FUNCTION mroonga_highlight_html; +DROP FUNCTION mroonga_query_expand; --enable_query_log diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_lz4.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_lz4.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_lz4.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_lz4.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_libgroonga_support_lz4.inc if ($libgroonga_support_lz4) { --source ../../include/mroonga/have_mroonga_deinit.inc - skip "This test is for libgroonga doesn't support lz4"; + --skip This test is for libgroonga doesn't support lz4 } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zlib.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zlib.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zlib.inc 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zlib.inc 2017-12-21 15:48:51.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/check_libgroonga_support_zlib.inc if ($libgroonga_support_zlib) { --source ../../include/mroonga/have_mroonga_deinit.inc - skip "This test is for libgroonga doesn't support zlib"; + --skip This test is for libgroonga doesn't support zlib } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zstd.inc mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zstd.inc --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zstd.inc 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/include/mroonga/unsupport_libgroonga_zstd.inc 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/check_libgroonga_support_zstd.inc + +if ($libgroonga_support_zstd) { + --source ../../include/mroonga/have_mroonga_deinit.inc + --skip This test is for libgroonga doesn't support zstd +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,22 +1,22 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -body TEXT +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 -ALTER TABLE diaries ADD title TEXT AFTER id; +ALTER TABLE diaries ADD title VARCHAR(40) AFTER id; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,22 +1,22 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -body TEXT +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 -ALTER TABLE diaries ADD title TEXT FIRST; +ALTER TABLE diaries ADD title VARCHAR(40) FIRST; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( - `title` text, + `title` varchar(40) DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,6 +4,11 @@ ALTER TABLE tags ADD COLUMN name VARCHAR(64) COMMENT 'flags "COLUMN_VECTOR"'; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + table_create tags TABLE_PAT_KEY UInt32 column_create tags id COLUMN_SCALAR UInt32 column_create tags name COLUMN_VECTOR ShortText diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_flags_parameter.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,6 +11,11 @@ ) ENGINE=Mroonga DEFAULT CHARSET=utf8 SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + table_create tags TABLE_PAT_KEY UInt32 column_create tags id COLUMN_SCALAR UInt32 column_create tags name COLUMN_VECTOR ShortText diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -7,12 +7,17 @@ ALTER TABLE bugs ADD COLUMN name VARCHAR(64) COMMENT 'groonga_type "tags"'; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create tags TABLE_PAT_KEY UInt32 -column_create tags id COLUMN_SCALAR UInt32 - table_create bugs TABLE_PAT_KEY UInt32 column_create bugs id COLUMN_SCALAR UInt32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create tags TABLE_PAT_KEY UInt32 +column_create tags id COLUMN_SCALAR UInt32 + column_create bugs name COLUMN_SCALAR tags DROP TABLE bugs; DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_groonga_type_parameter.result 2017-12-21 15:48:51.000000000 +0000 @@ -10,17 +10,21 @@ bugs CREATE TABLE `bugs` ( `id` int(10) unsigned NOT NULL, `name` varchar(64) DEFAULT NULL `GROONGA_TYPE`='tags', - PRIMARY KEY (`id`), - CONSTRAINT `name` FOREIGN KEY (`name`) REFERENCES `test`.`tags` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT + PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create tags TABLE_PAT_KEY UInt32 -column_create tags id COLUMN_SCALAR UInt32 - table_create bugs TABLE_PAT_KEY UInt32 column_create bugs id COLUMN_SCALAR UInt32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create tags TABLE_PAT_KEY UInt32 +column_create tags id COLUMN_SCALAR UInt32 + column_create bugs name COLUMN_SCALAR tags DROP TABLE bugs; DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_cp932.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_cp932.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_cp932.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_cp932.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +DROP TABLE IF EXISTS users; +SET NAMES cp932; +CREATE TABLE users ( +id int PRIMARY KEY +) DEFAULT CHARSET=cp932; +ALTER TABLE users +ADD COLUMN O text, +ADD FULLTEXT INDEX (O); +INSERT INTO users VALUES (1, "܂"); +INSERT INTO users VALUES (2, "Ȃ"); +INSERT INTO users VALUES (3, ""); +SELECT * FROM users; +id O +1 ܂ +2 Ȃ +3 +SELECT * FROM users +WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); +id O +2 Ȃ +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_PAT_KEY Int32 +column_create users @540d@524d COLUMN_SCALAR LongText +column_create users id COLUMN_SCALAR Int32 + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users @540d@524d +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_utf8.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_utf8.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_utf8.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multibyte_utf8.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +DROP TABLE IF EXISTS users; +SET NAMES utf8; +CREATE TABLE users ( +id int PRIMARY KEY +) DEFAULT CHARSET=utf8; +ALTER TABLE users +ADD COLUMN 名前 text, +ADD FULLTEXT INDEX (名前); +INSERT INTO users VALUES (1, "やまだ"); +INSERT INTO users VALUES (2, "たなか"); +INSERT INTO users VALUES (3, "すずき"); +SELECT * FROM users; +id 名前 +1 やまだ +2 たなか +3 すずき +SELECT * FROM users +WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); +id 名前 +2 たなか +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_PAT_KEY Int32 +column_create users @540d@524d COLUMN_SCALAR LongText +column_create users id COLUMN_SCALAR Int32 + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users @540d@524d +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,13 +1,13 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT +title VARCHAR(40) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, + `title` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title) VALUES ("survey"); @@ -15,7 +15,7 @@ id title 1 survey ALTER TABLE diaries -ADD COLUMN body TEXT FIRST, +ADD COLUMN body VARCHAR(140) FIRST, ADD COLUMN published BOOLEAN AFTER id, ADD COLUMN created_at DATETIME; UPDATE diaries SET body = "will start groonga!"; @@ -34,10 +34,10 @@ SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( - `body` text, + `body` varchar(140) DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, `published` tinyint(1) DEFAULT NULL, - `title` text, + `title` varchar(40) DEFAULT NULL, `created_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,20 +1,20 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT +title VARCHAR(40) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, + `title` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title) VALUES ("survey"); SELECT * FROM diaries; id title 1 survey -ALTER TABLE diaries ADD COLUMN body TEXT; +ALTER TABLE diaries ADD COLUMN body VARCHAR(140); UPDATE diaries SET body = "will start groonga!"; SELECT * FROM diaries; id title body @@ -30,8 +30,8 @@ Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_type_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_type_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_type_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_type_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -7,12 +7,17 @@ ALTER TABLE bugs ADD COLUMN name VARCHAR(64) COMMENT 'type "tags"'; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create tags TABLE_PAT_KEY UInt32 -column_create tags id COLUMN_SCALAR UInt32 - table_create bugs TABLE_PAT_KEY UInt32 column_create bugs id COLUMN_SCALAR UInt32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create tags TABLE_PAT_KEY UInt32 +column_create tags id COLUMN_SCALAR UInt32 + column_create bugs name COLUMN_SCALAR tags DROP TABLE bugs; DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,7 +11,12 @@ table_create memos TABLE_NO_KEY column_create memos content COLUMN_SCALAR ShortText -table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord +table_create memos#content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord -column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create memos#content index COLUMN_INDEX|WITH_POSITION memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,24 +1,24 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 -ALTER TABLE diaries CHANGE body description TEXT AFTER id; +ALTER TABLE diaries CHANGE body description VARCHAR(140) AFTER id; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `description` text, - `title` text, + `description` varchar(140) DEFAULT NULL, + `title` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,24 +1,24 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 -ALTER TABLE diaries CHANGE body description TEXT FIRST; +ALTER TABLE diaries CHANGE body description VARCHAR(140) FIRST; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( - `description` text, + `description` varchar(140) DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, + `title` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,34 +1,32 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 ALTER TABLE diaries -CHANGE body description TEXT FIRST, -CHANGE title subject TEXT AFTER internal_id, -CHANGE id internal_id INT; +CHANGE body description VARCHAR(140) FIRST, +CHANGE title subject VARCHAR(40) AFTER internal_id, +CHANGE id internal_id INT AUTO_INCREMENT; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( - `description` text, - `internal_id` int(11) NOT NULL, - `subject` text, + `description` varchar(140) DEFAULT NULL, + `internal_id` int(11) NOT NULL AUTO_INCREMENT, + `subject` varchar(40) DEFAULT NULL, PRIMARY KEY (`internal_id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (subject, description) VALUES ("groonga (1)", "starting groonga."); -Warnings: -Warning 1364 Field 'internal_id' doesn't have a default value SELECT * FROM diaries; description internal_id subject -starting groonga. 0 groonga (1) +starting groonga. 1 groonga (1) DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,24 +1,24 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 -ALTER TABLE diaries CHANGE body description TEXT; +ALTER TABLE diaries CHANGE body description VARCHAR(140); SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `description` text, + `title` varchar(40) DEFAULT NULL, + `description` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_decimal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_decimal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_decimal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_decimal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +temperature DECIMAL(6, 3) +) ENGINE InnoDB DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; +Table Create Table +diaries CREATE TABLE `diaries` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `temperature` decimal(6,3) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +INSERT INTO diaries (temperature) VALUES (21.281); +SELECT * FROM diaries; +id temperature +1 21.281 +ALTER TABLE diaries ENGINE = mroonga; +SELECT * FROM diaries; +id temperature +1 21.281 +INSERT INTO diaries (temperature) VALUES (14.213); +INSERT INTO diaries (temperature) VALUES (17.821); +SELECT * FROM diaries; +id temperature +1 21.281 +2 14.213 +3 17.821 +SHOW CREATE TABLE diaries; +Table Create Table +diaries CREATE TABLE `diaries` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `temperature` decimal(6,3) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_fulltext_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_fulltext_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_fulltext_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine_fulltext_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +title TEXT, +body TEXT, +FULLTEXT INDEX title_index (title), +FULLTEXT INDEX body_index (body) +) ENGINE MyISAM DEFAULT CHARSET UTF8; +SELECT table_name, engine +FROM information_schema.tables +WHERE table_name = 'diaries'; +table_name engine +diaries MyISAM +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +SELECT * FROM diaries +WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND +MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); +id title body +1 survey will start groonga! +ALTER TABLE diaries ENGINE = mroonga; +SELECT table_name, engine +FROM information_schema.tables +WHERE table_name = 'diaries'; +table_name engine +diaries Mroonga +SELECT * FROM diaries +WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND +MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); +id title body +1 survey will start groonga! +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); +SELECT * FROM diaries +WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND +MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); +id title body +2 groonga (1) starting groonga... +3 groonga (2) started groonga. +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -DROP TABLE IF EXISTS diaries; -CREATE TABLE diaries ( -id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT, -FULLTEXT INDEX title_index (title), -FULLTEXT INDEX body_index (body) -) ENGINE MyISAM DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -SELECT * FROM diaries -WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND -MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); -id title body -1 survey will start groonga! -ALTER TABLE diaries ENGINE = mroonga; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 -SELECT * FROM diaries -WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND -MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); -id title body -1 survey will start groonga! -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); -SELECT * FROM diaries -WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND -MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); -id title body -2 groonga (1) starting groonga... -3 groonga (2) started groonga. -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,14 +12,19 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI -column_create terms is_stop_word COLUMN_SCALAR Int8 -column_create terms term COLUMN_SCALAR ShortText - table_create memos TABLE_PAT_KEY Int32 column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI +column_create terms is_stop_word COLUMN_SCALAR Int8 +column_create terms term COLUMN_SCALAR ShortText + column_create terms content COLUMN_INDEX|WITH_POSITION memos content ALTER TABLE terms COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"'; SELECT mroonga_command("dump --dump_plugins no"); @@ -28,6 +33,11 @@ column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord column_create terms is_stop_word COLUMN_SCALAR Int8 column_create terms term COLUMN_SCALAR ShortText @@ -39,6 +49,11 @@ column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord column_create terms is_stop_word COLUMN_SCALAR Int8 column_create terms term COLUMN_SCALAR ShortText diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_table.result 2017-12-21 15:48:51.000000000 +0000 @@ -10,22 +10,32 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto -column_create terms term COLUMN_SCALAR ShortText - table_create memos TABLE_PAT_KEY Int32 column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto +column_create terms term COLUMN_SCALAR ShortText + column_create terms content_index COLUMN_INDEX|WITH_POSITION memos content ALTER TABLE memos DISABLE KEYS; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto -column_create terms term COLUMN_SCALAR ShortText - table_create memos TABLE_PAT_KEY Int32 column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto +column_create terms term COLUMN_SCALAR ShortText DROP TABLE memos; DROP TABLE terms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,15 +1,15 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,15 +1,15 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); @@ -21,7 +21,7 @@ Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, + `title` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 SELECT * FROM diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_table.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,22 +11,32 @@ ALTER TABLE memos DISABLE KEYS; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto -column_create terms term COLUMN_SCALAR ShortText - table_create memos TABLE_PAT_KEY Int32 column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto +column_create terms term COLUMN_SCALAR ShortText ALTER TABLE memos ENABLE KEYS; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto -column_create terms term COLUMN_SCALAR ShortText - table_create memos TABLE_PAT_KEY Int32 column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto +column_create terms term COLUMN_SCALAR ShortText + column_create terms content_index COLUMN_INDEX|WITH_POSITION memos content DROP TABLE memos; DROP TABLE terms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -DROP TABLE IF EXISTS diaries; -CREATE TABLE diaries ( -id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -temperature DECIMAL(6, 3) -) ENGINE InnoDB DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `temperature` decimal(6,3) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281); -SELECT * FROM diaries; -id title temperature -1 clear day 21.281 -ALTER TABLE diaries ENGINE = mroonga; -SELECT * FROM diaries; -id title temperature -1 clear day 21.281 -INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213); -INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821); -SELECT * FROM diaries; -id title temperature -1 clear day 21.281 -2 rainy day 14.213 -3 cloudy day 17.821 -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `temperature` decimal(6,3) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result 2017-12-21 15:48:51.000000000 +0000 @@ -7,15 +7,7 @@ INSERT INTO memos (content) values ("Started Groonga."); INSERT INTO memos (content) values ("Starting Mroonga..."); ALTER TABLE memos ADD FULLTEXT INDEX content_index (content); -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content_index` (`content`) -) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 -SELECT * FROM memos WHERE MATCH(content) AGAINST("groonga"); +SELECT * FROM memos WHERE MATCH(content) AGAINST("+groonga" IN BOOLEAN MODE); id content 1 Starting Groonga... 2 Started Groonga. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,28 +1,28 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); SELECT * FROM diaries; id title body 1 groonga (1) starting groonga. -ALTER TABLE diaries MODIFY body TEXT AFTER id; +ALTER TABLE diaries MODIFY body VARCHAR(140) AFTER id; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - `title` text, + `body` varchar(140) DEFAULT NULL, + `title` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,28 +1,28 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); SELECT * FROM diaries; id title body 1 groonga (1) starting groonga. -ALTER TABLE diaries MODIFY body TEXT FIRST; +ALTER TABLE diaries MODIFY body VARCHAR(140) FIRST; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( - `body` text, + `body` varchar(140) DEFAULT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, + `title` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,15 +1,15 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT +title VARCHAR(40), +body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, + `title` varchar(40) DEFAULT NULL, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); @@ -22,7 +22,7 @@ diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) DEFAULT NULL, - `body` text, + `body` varchar(140) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ body TEXT, FULLTEXT INDEX (body) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("survey", "will start mroonga!"); SELECT * FROM diaries; @@ -35,13 +26,4 @@ WHERE MATCH (body) AGAINST ("+groonga" IN BOOLEAN MODE); id title body 1 survey will start groonga! -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body` (`body`) -) ENGINE=Mroonga AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,16 +6,11 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 +SELECT table_name, engine +FROM information_schema.tables +WHERE table_name = 'diaries'; +table_name engine +diaries Mroonga INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); SELECT * FROM diaries; id title body @@ -32,14 +27,9 @@ WHERE MATCH(title) AGAINST("groonga") AND MATCH(body) AGAINST("starting"); id title body -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 +SELECT table_name, engine +FROM information_schema.tables +WHERE table_name = 'memos'; +table_name engine +memos Mroonga DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ DROP TABLE IF EXISTS shops; CREATE TABLE shops ( id INT PRIMARY KEY AUTO_INCREMENT, -name TEXT, +name VARCHAR(40), location GEOMETRY NOT NULL ); INSERT INTO shops (name, location) @@ -124,7 +124,7 @@ Table Create Table shops CREATE TABLE `shops` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, + `name` varchar(40) DEFAULT NULL, `location` geometry NOT NULL, PRIMARY KEY (`id`), SPATIAL KEY `location_index` (`location`) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/check_table_broken.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/check_table_broken.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/check_table_broken.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/check_table_broken.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +SET NAMES UTF8; +CREATE DATABASE check_test; +USE check_test; +CREATE TABLE diaries ( +title TEXT, +FULLTEXT INDEX (title) +); +INSERT INTO diaries VALUES ('Hello'); +FLUSH TABLES; +CHECK TABLE diaries; +Table Op Msg_type Msg_text +check_test.diaries check error Corrupt +REPAIR TABLE diaries; +Table Op Msg_type Msg_text +check_test.diaries repair status OK +DROP TABLE diaries; +DROP DATABASE check_test; +USE test; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/check_table_not_broken.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/check_table_not_broken.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/check_table_not_broken.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/check_table_not_broken.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,13 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +title TEXT +); +INSERT INTO diaries VALUES ('Hello'); +CHECK TABLE diaries; +Table Op Msg_type Msg_text +test.diaries check status OK +SELECT * FROM diaries; +title +Hello +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('2038-01-18 03:14:07', '2038-01-18 03:14:07'); INSERT INTO diaries (title, created_at) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00'); Warnings: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59'); Warnings: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('2012', '2012'); Warnings: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('2038-01-19 03:14:07', '2038-01-19 03:14:07'); INSERT INTO diaries (title, created_at) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,17 +4,9 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) -VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00'); +VALUES ('1000-01-02 00:00:00', '1000-01-02 00:00:00'); SELECT * FROM diaries; id title created_at -1 1000-01-01 00:00:00 1000-01-01 00:00:00 +1 1000-01-02 00:00:00 1000-01-02 00:00:00 DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59'); SELECT * FROM diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_strict_sql_mode_out_of_range.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_strict_sql_mode_out_of_range.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_strict_sql_mode_out_of_range.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_strict_sql_mode_out_of_range.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +title TEXT, +created_at DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO diaries (title, created_at) +VALUES ('2012', '2012'); +ERROR 22007: Incorrect datetime value: '2012' for column 'created_at' at row 1 +SELECT * FROM diaries; +id title created_at +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_5_out_of_range.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_5_out_of_range.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_5_out_of_range.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_5_out_of_range.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +title TEXT, +created_at DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO diaries (title, created_at) +VALUES ('2012', '2012'); +Warnings: +Warning 1264 Out of range value for column 'created_at' at row 1 +Warning 1265 Data truncated for column 'created_at' at row 1 +SELECT * FROM diaries; +id title created_at +1 2012 0000-01-01 00:00:00 +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -DROP TABLE IF EXISTS diaries; -CREATE TABLE diaries ( -id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -created_at DATETIME -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, created_at) -VALUES ('2012', '2012'); -Warnings: -Warning 1264 Out of range value for column 'created_at' at row 1 -Warning 1265 Data truncated for column 'created_at' at row 1 -SELECT * FROM diaries; -id title created_at -1 2012 0000-01-01 00:00:00 -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_6_or_later_out_of_range.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_6_or_later_out_of_range.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_6_or_later_out_of_range.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_5_6_or_later_out_of_range.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +title TEXT, +created_at DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO diaries (title, created_at) +VALUES ('2012', '2012'); +Warnings: +Warning 1265 Data truncated for column 'created_at' at row 1 +Warning 1265 Data truncated for column 'created_at' at row 1 +SELECT * FROM diaries; +id title created_at +1 2012 0000-01-01 00:00:00 +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -DROP TABLE IF EXISTS diaries; -CREATE TABLE diaries ( -id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -created_at DATETIME -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, created_at) -VALUES ('2012', '2012'); -Warnings: -Warning 1265 Data truncated for column 'created_at' at row 1 -Warning 1265 Data truncated for column 'created_at' at row 1 -SELECT * FROM diaries; -id title created_at -1 2012 0000-01-01 00:00:00 -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ created_at DATETIME(6), KEY (created_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime(6) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `created_at` (`created_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01.111111"); INSERT INTO diaries (title, created_at) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME(6) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime(6) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01.111111"); INSERT INTO diaries (title, created_at) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00'); Warnings: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_date.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_date.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_date.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_date.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,14 @@ +DROP TABLE IF EXISTS timestamps; +CREATE TABLE timestamps ( +id INT PRIMARY KEY AUTO_INCREMENT, +create_dt DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); +ERROR 22003: Out of range value for column 'create_dt' at row 1 +SELECT * FROM timestamps; +id create_dt +INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); +SELECT * FROM timestamps; +id create_dt +2 2015-06-17 00:00:00 +DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_month_day.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_month_day.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_month_day.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mariadb_10_2_or_later_zero_month_day.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS timestamps; +CREATE TABLE timestamps ( +id INT PRIMARY KEY AUTO_INCREMENT, +create_dt DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); +ERROR 22003: Out of range value for column 'create_dt' at row 1 +INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); +ERROR 22003: Out of range value for column 'create_dt' at row 1 +SELECT * FROM timestamps; +id create_dt +DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_date.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_date.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_date.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_date.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,14 @@ +DROP TABLE IF EXISTS timestamps; +CREATE TABLE timestamps ( +id INT PRIMARY KEY AUTO_INCREMENT, +create_dt DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00' for column 'create_dt' at row 1 +SELECT * FROM timestamps; +id create_dt +INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); +SELECT * FROM timestamps; +id create_dt +1 2015-06-17 00:00:00 +DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_month_day.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_month_day.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_month_day.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_mysql_5_7_or_later_zero_month_day.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS timestamps; +CREATE TABLE timestamps ( +id INT PRIMARY KEY AUTO_INCREMENT, +create_dt DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); +ERROR 22007: Incorrect datetime value: '2012-00-01 00:00:00' for column 'create_dt' at row 1 +INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); +ERROR 22007: Incorrect datetime value: '2012-01-00 00:00:00' for column 'create_dt' at row 1 +SELECT * FROM timestamps; +id create_dt +DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ('NULL', NULL); SELECT * FROM diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ created_at DATETIME, KEY (created_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `created_at` (`created_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01"); INSERT INTO diaries (title, created_at) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01"); INSERT INTO diaries (title, created_at) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,25 +3,14 @@ id INT PRIMARY KEY AUTO_INCREMENT, create_dt DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE timestamps; -Table Create Table -timestamps CREATE TABLE `timestamps` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `create_dt` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); -Warnings: -Warning 1265 Data truncated for column 'create_dt' at row 1 -INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); -Warnings: -Warning 1265 Data truncated for column 'create_dt' at row 1 +SET sql_mode='STRICT_TRANS_TABLES'; +INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); +ERROR 22003: Out of range value for column 'create_dt' at row 1 +SET sql_mode=default; SELECT * FROM timestamps; id create_dt -1 2012-01-01 00:00:00 -2 2012-01-01 00:00:00 -SELECT * FROM timestamps WHERE create_dt = "2012-01-01 00:00:00"; +INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); +SELECT * FROM timestamps; id create_dt -1 2012-01-01 00:00:00 -2 2012-01-01 00:00:00 +2 2015-06-17 00:00:00 DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date_strict.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date_strict.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date_strict.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date_strict.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -DROP TABLE IF EXISTS timestamps; -CREATE TABLE timestamps ( -id INT PRIMARY KEY AUTO_INCREMENT, -create_dt DATETIME -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE timestamps; -Table Create Table -timestamps CREATE TABLE `timestamps` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `create_dt` datetime DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -SET sql_mode='STRICT_TRANS_TABLES'; -INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); -ERROR 22003: Out of range value for column 'create_dt' at row 1 -SET sql_mode=default; -SELECT * FROM timestamps; -id create_dt -INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); -SELECT * FROM timestamps; -id create_dt -2 2015-06-17 00:00:00 -DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_month_day.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_month_day.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_month_day.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_month_day.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +DROP TABLE IF EXISTS timestamps; +CREATE TABLE timestamps ( +id INT PRIMARY KEY AUTO_INCREMENT, +create_dt DATETIME +) DEFAULT CHARSET UTF8; +INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); +Warnings: +Warning 1265 Data truncated for column 'create_dt' at row 1 +INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); +Warnings: +Warning 1265 Data truncated for column 'create_dt' at row 1 +SELECT * FROM timestamps; +id create_dt +1 2012-01-01 00:00:00 +2 2012-01-01 00:00:00 +SELECT * FROM timestamps WHERE create_dt = "2012-01-01 00:00:00"; +id create_dt +1 2012-01-01 00:00:00 +2 2012-01-01 00:00:00 +DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,7 +1,7 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, +title VARCHAR(40), created_at DATE, KEY (created_at) ) DEFAULT CHARSET UTF8; @@ -9,7 +9,7 @@ Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, + `title` varchar(40) DEFAULT NULL, `created_at` date DEFAULT NULL, PRIMARY KEY (`id`), KEY `created_at` (`created_at`) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,14 +1,14 @@ DROP TABLE IF EXISTS diaries; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, +title VARCHAR(40), created_at DATE ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; Table Create Table diaries CREATE TABLE `diaries` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, + `title` varchar(40) DEFAULT NULL, `created_at` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=Mroonga DEFAULT CHARSET=utf8 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ temperature DECIMAL(6, 3), KEY (temperature) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `temperature` decimal(6,3) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `temperature` (`temperature`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213); INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, temperature DECIMAL(6, 3) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `temperature` decimal(6,3) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213); INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ temperature DECIMAL, KEY (temperature) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `temperature` decimal(10,0) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `temperature` (`temperature`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, temperature) VALUES ("clear day", 21); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14); INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, temperature DECIMAL ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `temperature` decimal(10,0) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, temperature) VALUES ("clear day", 21); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14); INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_add_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_add_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_add_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_add_column.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED; +ALTER TABLE logs ADD FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"'; +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_delete.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_delete.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +DELETE FROM logs WHERE id = 1; +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_drop_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_drop_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_drop_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_drop_column.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +ALTER TABLE logs DROP COLUMN message; +SELECT * FROM logs; +id record +1 {"level": "info", "message": "start"} +2 {"level": "info", "message": "restart"} +3 {"level": "warn", "message": "abort"} +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_insert.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_insert.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_reindex.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_reindex.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_reindex.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_reindex.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +ALTER TABLE logs DISABLE KEYS; +ALTER TABLE logs ENABLE KEYS; +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_update.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_stored_update.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; +SELECT * FROM logs WHERE MATCH(message) AGAINST("hut" IN BOOLEAN MODE); +id record message +2 {"level": "info", "message": "shutdown"} "shutdown" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_add_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_add_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_add_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_add_column.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL; +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs; +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_delete.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_delete.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +DELETE FROM logs WHERE id = 1; +SELECT * FROM logs; +id record message +2 {"level": "info", "message": "restart"} "restart" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_drop_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_drop_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_drop_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_drop_column.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,16 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +ALTER TABLE logs DROP COLUMN message; +SELECT * FROM logs; +id record +1 {"level": "info", "message": "start"} +2 {"level": "info", "message": "restart"} +3 {"level": "warn", "message": "abort"} +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_insert.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_insert.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs; +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_add_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_add_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_add_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_add_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +ALTER TABLE logs ADD INDEX (message); +ERROR HY000: mroonga: storage: failed to create index: Index for virtual generated column is not supported: message +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,8 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL, +FULLTEXT INDEX (message) +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +ERROR HY000: mroonga: storage: failed to create index: Index for virtual generated column is not supported: message diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mysql_5_7_or_later_add_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mysql_5_7_or_later_add_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mysql_5_7_or_later_add_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_mysql_5_7_or_later_add_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +ALTER TABLE logs ADD INDEX (message); +ERROR HY000: Table storage engine 'Mroonga' does not support the create option 'Index on virtual generated column' +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_update.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_generated_virtual_update.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,16 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; +SELECT * FROM logs; +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "shutdown"} "shutdown" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_vector_other_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_vector_other_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_vector_other_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_vector_other_table.result 2017-12-21 15:48:51.000000000 +0000 @@ -14,12 +14,17 @@ INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL groonga"); SELECT mroonga_command("dump --dump_plugins no --dump_records no"); mroonga_command("dump --dump_plugins no --dump_records no") -table_create tags TABLE_PAT_KEY ShortText --default_tokenizer TokenDelimit -column_create tags name COLUMN_SCALAR ShortText - table_create bugs TABLE_PAT_KEY UInt32 column_create bugs id COLUMN_SCALAR UInt32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create tags TABLE_PAT_KEY ShortText --default_tokenizer TokenDelimit +column_create tags name COLUMN_SCALAR ShortText + column_create bugs tags COLUMN_VECTOR tags column_create tags bugs_tags_index COLUMN_INDEX|WITH_POSITION bugs tags diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result 2017-12-21 15:48:51.000000000 +0000 @@ -15,15 +15,20 @@ INSERT INTO bugs (id, priority) VALUES (3, -2); SELECT mroonga_command("dump --dump_plugins no --dump_records no"); mroonga_command("dump --dump_plugins no --dump_records no") -table_create priorities TABLE_PAT_KEY Int32 -column_create priorities id COLUMN_SCALAR Int32 - table_create bugs TABLE_PAT_KEY UInt32 column_create bugs id COLUMN_SCALAR UInt32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create priorities TABLE_PAT_KEY Int32 +column_create priorities id COLUMN_SCALAR Int32 + column_create bugs priority COLUMN_SCALAR priorities -column_create priorities bugs_priority_index COLUMN_INDEX|WITH_POSITION bugs priority +column_create priorities bugs_priority_index COLUMN_INDEX bugs priority SELECT * FROM bugs WHERE priority = 3; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_support_zstd.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_support_zstd.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_support_zstd.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_support_zstd.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,10 @@ +DROP TABLE IF EXISTS entries; +CREATE TABLE entries ( +id INT UNSIGNED PRIMARY KEY, +content TEXT COMMENT 'flags "COLUMN_SCALAR|COMPRESS_ZSTD"' +) DEFAULT CHARSET=utf8; +INSERT INTO entries (id, content) VALUES (1, "I found Mroonga that is a MySQL storage engine to use Groonga!"); +SELECT * FROM entries; +id content +1 I found Mroonga that is a MySQL storage engine to use Groonga! +DROP TABLE entries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_unsupport_zstd.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_unsupport_zstd.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_unsupport_zstd.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_unsupport_zstd.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS entries; +CREATE TABLE entries ( +id INT UNSIGNED PRIMARY KEY, +content TEXT COMMENT 'flags "COLUMN_SCALAR|COMPRESS_ZSTD"' +) DEFAULT CHARSET=utf8; +Warnings: +Warning 16506 The column flag 'COMPRESS_ZSTD' is unsupported. It is ignored +INSERT INTO entries (id, content) VALUES (1, "I found Mroonga that is a MySQL storage engine to use Groonga!"); +SELECT * FROM entries; +id content +1 I found Mroonga that is a MySQL storage engine to use Groonga! +DROP TABLE entries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,8 +6,15 @@ COMMENT='default_tokenizer "TokenDelimit"'; CREATE TABLE bugs ( id INT UNSIGNED PRIMARY KEY, -tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"' +tags VARCHAR(128) DEFAULT '' COMMENT 'flags "COLUMN_VECTOR", type "tags"' ) DEFAULT CHARSET=utf8; +SHOW CREATE TABLE bugs; +Table Create Table +bugs CREATE TABLE `bugs` ( + `id` int(10) unsigned NOT NULL, + `tags` varchar(128) DEFAULT '' COMMENT 'flags "COLUMN_VECTOR", type "tags"', + PRIMARY KEY (`id`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL groonga"); SELECT * FROM bugs; id tags diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_json_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_json_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_json_insert.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_json_insert.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; +INSERT INTO logs VALUES ('{"message": "start"}'); +INSERT INTO logs VALUES ('{"message": "restart"}'); +INSERT INTO logs VALUES ('{"message": "shutdown"}'); +SELECT * FROM logs; +record +{"message": "start"} +{"message": "restart"} +{"message": "shutdown"} +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_cp932.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_cp932.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_cp932.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_cp932.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,32 @@ +DROP TABLE IF EXISTS users; +SET NAMES cp932; +CREATE TABLE users ( +O text, +FULLTEXT INDEX (O) +) DEFAULT CHARSET=cp932; +INSERT INTO users VALUES ("܂"); +INSERT INTO users VALUES ("Ȃ"); +INSERT INTO users VALUES (""); +SELECT * FROM users; +O +܂ +Ȃ + +SELECT * FROM users +WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); +O +Ȃ +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_NO_KEY +column_create users @540d@524d COLUMN_SCALAR LongText + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users @540d@524d +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_utf8.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_utf8.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_utf8.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_multibyte_utf8.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,32 @@ +DROP TABLE IF EXISTS users; +SET NAMES utf8; +CREATE TABLE users ( +名前 text, +FULLTEXT INDEX (名前) +) DEFAULT CHARSET=utf8; +INSERT INTO users VALUES ("やまだ"); +INSERT INTO users VALUES ("たなか"); +INSERT INTO users VALUES ("すずき"); +SELECT * FROM users; +名前 +やまだ +たなか +すずき +SELECT * FROM users +WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); +名前 +たなか +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_NO_KEY +column_create users @540d@524d COLUMN_SCALAR LongText + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users @540d@524d +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,16 +6,6 @@ max TIME(6), KEY (average) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; -Table Create Table -running_records CREATE TABLE `running_records` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `average` time(6) DEFAULT NULL, - `max` time(6) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `average` (`average`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO running_records (title, average, max) VALUES ("normal condition", "01:00:00.000001", "01:05:00.000001"); INSERT INTO running_records (title, average, max) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,16 +6,6 @@ updated_at TIMESTAMP(6), KEY (updated_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), - `updated_at` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000', - PRIMARY KEY (`id`), - KEY `updated_at` (`updated_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at, updated_at) VALUES ("clear day", "2012-01-29 21:51:01.111111", diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -2,20 +2,10 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, -created_at TIMESTAMP, -updated_at TIMESTAMP, +created_at TIMESTAMP DEFAULT '2016-04-21 00:00:00', +updated_at TIMESTAMP DEFAULT '2016-04-21 00:00:00', KEY (updated_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', - PRIMARY KEY (`id`), - KEY `updated_at` (`updated_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, created_at, updated_at) VALUES ("clear day", "2012-01-29 21:51:01", "2012-01-29 21:51:02"); INSERT INTO diaries (title, created_at, updated_at) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,16 +6,6 @@ max TIME, KEY (average) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; -Table Create Table -running_records CREATE TABLE `running_records` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `average` time DEFAULT NULL, - `max` time DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `average` (`average`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO running_records (title, average, max) VALUES ("normal condition", "01:00:00", "01:05:00"); INSERT INTO running_records (title, average, max) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ party_year YEAR, KEY (party_year) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE aniversary_memos; -Table Create Table -aniversary_memos CREATE TABLE `aniversary_memos` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `party_year` year(4) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `party_year` (`party_year`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO aniversary_memos (title, party_year) VALUES ("We need a big cake!", "11"); INSERT INTO aniversary_memos (title, party_year) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, party_year YEAR ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE aniversary_memos; -Table Create Table -aniversary_memos CREATE TABLE `aniversary_memos` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `party_year` year(4) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO aniversary_memos (title, party_year) VALUES ("We need a big cake!", "11"); INSERT INTO aniversary_memos (title, party_year) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/count_star.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/count_star.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/count_star.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/count_star.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,11 @@ +DROP TABLE IF EXISTS ids; +CREATE TABLE ids ( +id int PRIMARY KEY +); +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +SELECT COUNT(*) FROM ids; +COUNT(*) +3 +DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_comment.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +CREATE TABLE bugs ( +id INT UNSIGNED PRIMARY KEY, +tags TEXT COMMENT 'flags "COLUMN_VECTOR"' +) DEFAULT CHARSET=utf8; +SELECT mroonga_command("dump --dump_plugins no"); +mroonga_command("dump --dump_plugins no") +table_create bugs TABLE_PAT_KEY UInt32 +column_create bugs id COLUMN_SCALAR UInt32 +column_create bugs tags COLUMN_VECTOR LongText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText +DROP TABLE bugs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_parameter.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_flags_parameter.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +CREATE TABLE bugs ( +id INT UNSIGNED PRIMARY KEY, +tags TEXT FLAGS='COLUMN_VECTOR' +) DEFAULT CHARSET=utf8; +SELECT mroonga_command("dump --dump_plugins no"); +mroonga_command("dump --dump_plugins no") +table_create bugs TABLE_PAT_KEY UInt32 +column_create bugs id COLUMN_SCALAR UInt32 +column_create bugs tags COLUMN_VECTOR LongText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText +DROP TABLE bugs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_comment.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,23 @@ +CREATE TABLE tags ( +name VARCHAR(64) PRIMARY KEY +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +CREATE TABLE bugs ( +id INT UNSIGNED PRIMARY KEY, +tag VARCHAR(64) COMMENT 'groonga_type "tags"' +) DEFAULT CHARSET=utf8; +SELECT mroonga_command("dump --dump_plugins no"); +mroonga_command("dump --dump_plugins no") +table_create bugs TABLE_PAT_KEY UInt32 +column_create bugs id COLUMN_SCALAR UInt32 + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create tags TABLE_PAT_KEY ShortText +column_create tags name COLUMN_SCALAR ShortText + +column_create bugs tag COLUMN_SCALAR tags +DROP TABLE bugs; +DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_nonexistent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_nonexistent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_nonexistent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_nonexistent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,6 @@ +DROP TABLE IF EXISTS bugs; +CREATE TABLE bugs ( +id INT UNSIGNED PRIMARY KEY, +tag VARCHAR(64) COMMENT 'groonga_type "Nonexistent"' +) DEFAULT CHARSET=utf8mb4; +ERROR HY000: unknown custom Groonga type name for column: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_parameter.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_groonga_type_parameter.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,30 @@ +CREATE TABLE tags ( +name VARCHAR(64) PRIMARY KEY +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +CREATE TABLE bugs ( +id INT UNSIGNED PRIMARY KEY, +tag VARCHAR(64) GROONGA_TYPE='tags' +) DEFAULT CHARSET=utf8; +SHOW CREATE TABLE bugs; +Table Create Table +bugs CREATE TABLE `bugs` ( + `id` int(10) unsigned NOT NULL, + `tag` varchar(64) DEFAULT NULL `GROONGA_TYPE`='tags', + PRIMARY KEY (`id`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +SELECT mroonga_command("dump --dump_plugins no"); +mroonga_command("dump --dump_plugins no") +table_create bugs TABLE_PAT_KEY UInt32 +column_create bugs id COLUMN_SCALAR UInt32 + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create tags TABLE_PAT_KEY ShortText +column_create tags name COLUMN_SCALAR ShortText + +column_create bugs tag COLUMN_SCALAR tags +DROP TABLE bugs; +DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_comment.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,23 @@ +CREATE TABLE tags ( +name VARCHAR(64) PRIMARY KEY +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +CREATE TABLE bugs ( +id INT UNSIGNED PRIMARY KEY, +tag VARCHAR(64) COMMENT 'type "tags"' +) DEFAULT CHARSET=utf8; +SELECT mroonga_command("dump --dump_plugins no"); +mroonga_command("dump --dump_plugins no") +table_create bugs TABLE_PAT_KEY UInt32 +column_create bugs id COLUMN_SCALAR UInt32 + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create tags TABLE_PAT_KEY ShortText +column_create tags name COLUMN_SCALAR ShortText + +column_create bugs tag COLUMN_SCALAR tags +DROP TABLE bugs; +DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_nonexistent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_nonexistent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_nonexistent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_column_type_nonexistent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,6 @@ +DROP TABLE IF EXISTS bugs; +CREATE TABLE bugs ( +id INT UNSIGNED PRIMARY KEY, +tag VARCHAR(64) COMMENT 'type "Nonexistent"' +) DEFAULT CHARSET=utf8mb4; +ERROR HY000: unknown custom Groonga type name for column: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,6 +5,11 @@ COMMENT='default_tokenizer "TokenDelimit"'; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + table_create tags TABLE_PAT_KEY ShortText --default_tokenizer TokenDelimit column_create tags name COLUMN_SCALAR ShortText DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_comment.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -CREATE TABLE bugs ( -id INT UNSIGNED PRIMARY KEY, -tags TEXT COMMENT 'flags "COLUMN_VECTOR"' -) DEFAULT CHARSET=utf8; -SELECT mroonga_command("dump --dump_plugins no"); -mroonga_command("dump --dump_plugins no") -table_create bugs TABLE_PAT_KEY UInt32 -column_create bugs id COLUMN_SCALAR UInt32 -column_create bugs tags COLUMN_VECTOR LongText -DROP TABLE bugs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_flags_parameter.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -CREATE TABLE bugs ( -id INT UNSIGNED PRIMARY KEY, -tags TEXT FLAGS='COLUMN_VECTOR' -) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE bugs; -Table Create Table -bugs CREATE TABLE `bugs` ( - `id` int(10) unsigned NOT NULL, - `tags` text `FLAGS`='COLUMN_VECTOR', - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -SELECT mroonga_command("dump --dump_plugins no"); -mroonga_command("dump --dump_plugins no") -table_create bugs TABLE_PAT_KEY UInt32 -column_create bugs id COLUMN_SCALAR UInt32 -column_create bugs tags COLUMN_VECTOR LongText -DROP TABLE bugs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_comment.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -CREATE TABLE tags ( -name VARCHAR(64) PRIMARY KEY -) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -CREATE TABLE bugs ( -id INT UNSIGNED PRIMARY KEY, -tag VARCHAR(64) COMMENT 'groonga_type "tags"' -) DEFAULT CHARSET=utf8; -SELECT mroonga_command("dump --dump_plugins no"); -mroonga_command("dump --dump_plugins no") -table_create tags TABLE_PAT_KEY ShortText -column_create tags name COLUMN_SCALAR ShortText - -table_create bugs TABLE_PAT_KEY UInt32 -column_create bugs id COLUMN_SCALAR UInt32 - -column_create bugs tag COLUMN_SCALAR tags -DROP TABLE bugs; -DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_nonexistent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_nonexistent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_nonexistent.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_nonexistent.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS bugs; -CREATE TABLE bugs ( -id INT UNSIGNED PRIMARY KEY, -tag VARCHAR(64) COMMENT 'groonga_type "Nonexistent"' -) DEFAULT CHARSET=utf8mb4; -ERROR HY000: unknown custom Groonga type name for column: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_groonga_type_parameter.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -CREATE TABLE tags ( -name VARCHAR(64) PRIMARY KEY -) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -CREATE TABLE bugs ( -id INT UNSIGNED PRIMARY KEY, -tag VARCHAR(64) GROONGA_TYPE='tags' -) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE bugs; -Table Create Table -bugs CREATE TABLE `bugs` ( - `id` int(10) unsigned NOT NULL, - `tag` varchar(64) DEFAULT NULL `GROONGA_TYPE`='tags', - PRIMARY KEY (`id`), - CONSTRAINT `tag` FOREIGN KEY (`tag`) REFERENCES `test`.`tags` (`name`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -SELECT mroonga_command("dump --dump_plugins no"); -mroonga_command("dump --dump_plugins no") -table_create tags TABLE_PAT_KEY ShortText -column_create tags name COLUMN_SCALAR ShortText - -table_create bugs TABLE_PAT_KEY UInt32 -column_create bugs id COLUMN_SCALAR UInt32 - -column_create bugs tag COLUMN_SCALAR tags -DROP TABLE bugs; -DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_comment.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -CREATE TABLE tags ( -name VARCHAR(64) PRIMARY KEY -) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -CREATE TABLE bugs ( -id INT UNSIGNED PRIMARY KEY, -tag VARCHAR(64) COMMENT 'type "tags"' -) DEFAULT CHARSET=utf8; -SELECT mroonga_command("dump --dump_plugins no"); -mroonga_command("dump --dump_plugins no") -table_create tags TABLE_PAT_KEY ShortText -column_create tags name COLUMN_SCALAR ShortText - -table_create bugs TABLE_PAT_KEY UInt32 -column_create bugs id COLUMN_SCALAR UInt32 - -column_create bugs tag COLUMN_SCALAR tags -DROP TABLE bugs; -DROP TABLE tags; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_nonexistent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_nonexistent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_nonexistent.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_field_type_nonexistent.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS bugs; -CREATE TABLE bugs ( -id INT UNSIGNED PRIMARY KEY, -tag VARCHAR(64) COMMENT 'type "Nonexistent"' -) DEFAULT CHARSET=utf8mb4; -ERROR HY000: unknown custom Groonga type name for column: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,5 +5,5 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content +column_create memos#content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_medium.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_medium.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_medium.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_medium.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,10 @@ +SET NAMES utf8; +CREATE TABLE memos ( +content VARCHAR(64) NOT NULL, +content_size INT NOT NULL, +KEY (content_size) COMMENT 'flags "INDEX_MEDIUM"' +) DEFAULT CHARSET=utf8; +SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); +mroonga_command("dump --dump_plugins no --dump_schema no") +column_create memos#content_size index COLUMN_INDEX|INDEX_MEDIUM memos content_size +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_small.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_small.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_small.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_index_small.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,10 @@ +SET NAMES utf8; +CREATE TABLE memos ( +content VARCHAR(64) NOT NULL, +is_read BOOL NOT NULL, +KEY (is_read) COMMENT 'flags "INDEX_SMALL"' +) DEFAULT CHARSET=utf8; +SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); +mroonga_command("dump --dump_plugins no --dump_schema no") +column_create memos#is_read index COLUMN_INDEX|INDEX_SMALL memos is_read +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_none.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_none.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_none.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_none.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,5 +5,5 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX memos content +column_create memos#content index COLUMN_INDEX memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_flags_parameter.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,5 +11,5 @@ ) ENGINE=Mroonga DEFAULT CHARSET=utf8 SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content +column_create memos#content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_none.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_none.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_none.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_none.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,5 +5,5 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX memos content +column_create memos#content index COLUMN_INDEX memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_with_position_and_with_weight.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_with_position_and_with_weight.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_with_position_and_with_weight.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_index_flags_with_position_and_with_weight.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,5 +5,5 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content +column_create memos#content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_fulltext_index_bin.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_fulltext_index_bin.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_fulltext_index_bin.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_fulltext_index_bin.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,16 @@ +DROP TABLE IF EXISTS diaries; +SET NAMES utf8; +CREATE TABLE diaries ( +day DATE PRIMARY KEY, +content VARCHAR(64) NOT NULL, +FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"' +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +INSERT INTO diaries VALUES ("2013-04-23", "ブラックコーヒーを飲んだ。"); +SELECT * FROM diaries +WHERE MATCH (content) AGAINST ("+ふらつく" IN BOOLEAN MODE); +day content +SELECT * FROM diaries +WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE); +day content +2013-04-23 ブラックコーヒーを飲んだ。 +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_index_bin.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_index_bin.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_index_bin.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_normalizer_index_bin.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +DROP TABLE IF EXISTS diaries; +SET NAMES utf8; +CREATE TABLE diaries ( +day DATE PRIMARY KEY, +content VARCHAR(64) NOT NULL, +INDEX (content) COMMENT 'normalizer "NormalizerAuto"' +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +SELECT mroonga_command("dump --dump_plugins no"); +mroonga_command("dump --dump_plugins no") +table_create diaries TABLE_PAT_KEY Time +column_create diaries content COLUMN_SCALAR ShortText +column_create diaries day COLUMN_SCALAR Time + +table_create diaries#content TABLE_PAT_KEY ShortText --normalizer NormalizerAuto + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create diaries#content index COLUMN_INDEX diaries content +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,11 @@ FULLTEXT INDEX body_index (body) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"' ) DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead INSERT INTO diaries (body) VALUES ("will start Groonga!"); +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead INSERT INTO diaries (body) VALUES ("starting Groonga..."); INSERT INTO diaries (body) VALUES ("started Groonga."); SELECT * FROM diaries; @@ -29,3 +25,5 @@ 2 starting Groonga... 3 started Groonga. DROP TABLE diaries; +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_default.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_default.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_default.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_default.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,14 +6,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries (body) values ("will start Groonga!"); insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_off.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_off.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_off.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_parser_off.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,15 +4,11 @@ name TEXT, FULLTEXT INDEX (name) COMMENT 'parser "off"' ) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE variables; -Table Create Table -variables CREATE TABLE `variables` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `name` (`name`) COMMENT 'parser "off"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead INSERT INTO variables (name) VALUES ("mroonga_database_path_prefix"); +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead INSERT INTO variables (name) VALUES ("mroonga_default_parser"); INSERT INTO variables (name) VALUES ("mroonga_default_wrapper_engine"); INSERT INTO variables (name) VALUES ("mroonga_dry_write"); @@ -40,3 +36,5 @@ 3 mroonga_default_wrapper_engine 2 mroonga_default_parser DROP TABLE variables; +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_multiple_token_filters.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_multiple_token_filters.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_multiple_token_filters.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_multiple_token_filters.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,7 +11,12 @@ table_create memos TABLE_NO_KEY column_create memos content COLUMN_SCALAR ShortText -table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord +table_create memos#content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord -column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create memos#content index COLUMN_INDEX|WITH_POSITION memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_one_token_filter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_one_token_filter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_one_token_filter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_one_token_filter.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,7 +11,12 @@ table_create memos TABLE_NO_KEY column_create memos content COLUMN_SCALAR ShortText -table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord +table_create memos#content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord -column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create memos#content index COLUMN_INDEX|WITH_POSITION memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_token_filters_parameter.result 2017-12-21 15:48:51.000000000 +0000 @@ -17,7 +17,12 @@ table_create memos TABLE_NO_KEY column_create memos content COLUMN_SCALAR ShortText -table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord +table_create memos#content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord -column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create memos#content index COLUMN_INDEX|WITH_POSITION memos content DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_comment.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,14 +5,6 @@ FULLTEXT INDEX body_index (body) COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' ) DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (body) VALUES ("will start Groonga!"); INSERT INTO diaries (body) VALUES ("starting Groonga..."); INSERT INTO diaries (body) VALUES ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_default.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_default.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_default.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_default.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,14 +6,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries (body) values ("will start Groonga!"); insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_off.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_off.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_off.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_off.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ name TEXT, FULLTEXT INDEX (name) COMMENT 'tokenizer "off"' ) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE variables; -Table Create Table -variables CREATE TABLE `variables` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `name` (`name`) COMMENT 'tokenizer "off"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO variables (name) VALUES ("mroonga_database_path_prefix"); INSERT INTO variables (name) VALUES ("mroonga_default_tokenizer"); INSERT INTO variables (name) VALUES ("mroonga_default_wrapper_engine"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_index_tokenizer_parameter.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ body text, FULLTEXT INDEX body_index (body) TOKENIZER='TokenBigramSplitSymbolAlphaDigit' ) DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) `TOKENIZER`='TokenBigramSplitSymbolAlphaDigit' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (body) VALUES ("will start Groonga!"); INSERT INTO diaries (body) VALUES ("starting Groonga..."); INSERT INTO diaries (body) VALUES ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_multiple_token_filters.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_multiple_token_filters.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_multiple_token_filters.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_multiple_token_filters.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,14 +12,19 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord -column_create terms is_stop_word COLUMN_SCALAR Int8 -column_create terms term COLUMN_SCALAR ShortText - table_create memos TABLE_PAT_KEY Int32 column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord +column_create terms is_stop_word COLUMN_SCALAR Int8 +column_create terms term COLUMN_SCALAR ShortText + column_create terms content COLUMN_INDEX|WITH_POSITION memos content DROP TABLE memos; DROP TABLE terms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_one_token_filter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_one_token_filter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_one_token_filter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/create_table_table_token_filters_one_token_filter.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,14 +12,19 @@ ) DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no"); mroonga_command("dump --dump_plugins no") -table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord -column_create terms is_stop_word COLUMN_SCALAR Int8 -column_create terms term COLUMN_SCALAR ShortText - table_create memos TABLE_PAT_KEY Int32 column_create memos content COLUMN_SCALAR LongText column_create memos id COLUMN_SCALAR Int32 +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord +column_create terms is_stop_word COLUMN_SCALAR Int8 +column_create terms term COLUMN_SCALAR ShortText + column_create terms content COLUMN_INDEX|WITH_POSITION memos content DROP TABLE memos; DROP TABLE terms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/drop_database_no_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/drop_database_no_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/drop_database_no_table.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/drop_database_no_table.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +SET NAMES UTF8; +DROP DATABASE IF EXISTS another; +CREATE DATABASE another; +USE another; +CREATE TABLE diaries ( +title TEXT, +FULLTEXT INDEX (title) +); +DROP TABLE diaries; +USE test; +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +title TEXT, +FULLTEXT INDEX (title) +); +DROP DATABASE another; +SELECT mroonga_command('object_exist mroonga_operations'); +mroonga_command('object_exist mroonga_operations') +true +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_add.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_add.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_add.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_add.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; +CREATE TABLE comments ( +comment int unsigned PRIMARY KEY, +content text NOT NULL +); +CREATE TABLE articles ( +content text NOT NULL, +comment int unsigned +); +ALTER TABLE articles ADD FOREIGN KEY (comment) REFERENCES comments (comment); +SHOW CREATE TABLE articles; +Table Create Table +articles CREATE TABLE `articles` ( + `content` text NOT NULL, + `comment` int(10) unsigned DEFAULT NULL, + KEY `comment` (`comment`), + CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE=Mroonga DEFAULT CHARSET=latin1 +DROP TABLE articles; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_drop.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_drop.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_drop.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_alter_drop.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,21 @@ +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; +CREATE TABLE comments ( +comment int unsigned PRIMARY KEY, +content text NOT NULL +); +CREATE TABLE articles ( +content text NOT NULL, +comment int unsigned, +FOREIGN KEY (comment) REFERENCES comments (comment) +); +ALTER TABLE articles DROP FOREIGN KEY comment; +SHOW CREATE TABLE articles; +Table Create Table +articles CREATE TABLE `articles` ( + `content` text NOT NULL, + `comment` int(10) unsigned DEFAULT NULL, + KEY `comment` (`comment`) +) ENGINE=Mroonga DEFAULT CHARSET=latin1 +DROP TABLE articles; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,134 +1,15 @@ -drop table if exists articles2; -drop table if exists articles; -drop table if exists comments2; -drop table if exists comments; -create table comments( -comment int unsigned, -content text not null, -primary key(comment) -); -create table articles( -content text not null, -comment int unsigned, -FOREIGN KEY (comment) REFERENCES comments (comment) -); -insert into comments (comment, content) values -(1, 'aaa bbb'),(2, 'ccc ddd'),(3, 'eee fff'); -insert into articles (content, comment) values -('111aaa', 1),('222bbb', 2),('222ccc', 2); -select comment, content from comments; -comment content -1 aaa bbb -2 ccc ddd -3 eee fff -select content, comment from articles; -content comment -111aaa 1 -222bbb 2 -222ccc 2 -show create table comments; -Table Create Table -comments CREATE TABLE `comments` ( - `comment` int(10) unsigned NOT NULL DEFAULT '0', - `content` text NOT NULL, - PRIMARY KEY (`comment`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 -show create table articles; -Table Create Table -articles CREATE TABLE `articles` ( - `content` text NOT NULL, - `comment` int(10) unsigned DEFAULT NULL, - KEY `comment` (`comment`), - CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=Mroonga DEFAULT CHARSET=latin1 -select * from information_schema.referential_constraints; -CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME -def test comment def test PRIMARY NONE RESTRICT RESTRICT articles comments -rename table comments to comments2; -rename table articles to articles2; -create table comments( -comment int unsigned, -content text not null, -primary key(comment) +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; +CREATE TABLE comments ( +comment int unsigned PRIMARY KEY, +content text NOT NULL ); -create table articles( -content text not null, +CREATE TABLE articles ( +content text NOT NULL, comment int unsigned, FOREIGN KEY (comment) REFERENCES comments (comment) ); -insert into comments (comment, content) values -(1, 'ab'),(2, 'cd'),(3, 'ef'); -insert into articles (content, comment) values -('1a', 1),('2b', 2),('2c', 2); -select comment, content from comments; -comment content -1 ab -2 cd -3 ef -select content, comment from articles; -content comment -1a 1 -2b 2 -2c 2 -select comment, content from comments2; -comment content -1 aaa bbb -2 ccc ddd -3 eee fff -select content, comment from articles2; -content comment -111aaa 1 -222bbb 2 -222ccc 2 -show create table comments; -Table Create Table -comments CREATE TABLE `comments` ( - `comment` int(10) unsigned NOT NULL DEFAULT '0', - `content` text NOT NULL, - PRIMARY KEY (`comment`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 -show create table articles; -Table Create Table -articles CREATE TABLE `articles` ( - `content` text NOT NULL, - `comment` int(10) unsigned DEFAULT NULL, - KEY `comment` (`comment`), - CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=Mroonga DEFAULT CHARSET=latin1 -show create table comments2; -Table Create Table -comments2 CREATE TABLE `comments2` ( - `comment` int(10) unsigned NOT NULL DEFAULT '0', - `content` text NOT NULL, - PRIMARY KEY (`comment`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 -show create table articles2; -Table Create Table -articles2 CREATE TABLE `articles2` ( - `content` text NOT NULL, - `comment` int(10) unsigned DEFAULT NULL, - KEY `comment` (`comment`), - CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments2` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE=Mroonga DEFAULT CHARSET=latin1 -select * from information_schema.referential_constraints; -CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME -def test comment def test PRIMARY NONE RESTRICT RESTRICT articles comments -def test comment def test PRIMARY NONE RESTRICT RESTRICT articles2 comments2 -alter table articles drop foreign key comment; -show create table articles; -Table Create Table -articles CREATE TABLE `articles` ( - `content` text NOT NULL, - `comment` int(10) unsigned DEFAULT NULL, - KEY `comment` (`comment`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 -select content, comment from articles; -content comment -1a 1 -2b 2 -2c 2 -alter table articles add FOREIGN KEY (comment) REFERENCES comments (comment); -show create table articles; +SHOW CREATE TABLE articles; Table Create Table articles CREATE TABLE `articles` ( `content` text NOT NULL, @@ -136,12 +17,6 @@ KEY `comment` (`comment`), CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE=Mroonga DEFAULT CHARSET=latin1 -select content, comment from articles; -content comment -1a 1 -2b 2 -2c 2 -drop table articles2; -drop table articles; -drop table comments2; -drop table comments; +SELECT * FROM information_schema.referential_constraints; +DROP TABLE articles; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_existent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_existent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_existent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_existent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CREATE TABLE comments ( +id int unsigned PRIMARY KEY, +content varchar(140) NOT NULL +); +CREATE TABLE entries ( +content varchar(140) NOT NULL, +comment_id int unsigned, +FOREIGN KEY (comment_id) REFERENCES comments (id) +); +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +DELETE FROM comments WHERE id = 100; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (one or more child rows exist in ) +SELECT * FROM entries; +content comment_id +Hello! 100 +SELECT * FROM comments; +id content +100 Good entry! +SELECT mroonga_command('dump --dump_plugins no'); +mroonga_command('dump --dump_plugins no') +table_create comments TABLE_PAT_KEY UInt32 +column_create comments content COLUMN_SCALAR ShortText +column_create comments id COLUMN_SCALAR UInt32 + +table_create entries TABLE_NO_KEY +column_create entries content COLUMN_SCALAR ShortText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create entries comment_id COLUMN_SCALAR comments + +load --table comments +[ +["_key","content","id"], +[100,"Good entry!",100] +] + +load --table entries +[ +["_id","comment_id","content"], +[1,100,"Hello!"] +] + +column_create comments entries-comment_id----------------------------------------------- COLUMN_INDEX entries comment_id +DROP TABLE entries; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_nonexistent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_nonexistent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_nonexistent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_delete_nonexistent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CREATE TABLE comments ( +id int unsigned PRIMARY KEY, +content varchar(140) NOT NULL +); +CREATE TABLE entries ( +content varchar(140) NOT NULL, +comment_id int unsigned, +FOREIGN KEY (comment_id) REFERENCES comments (id) +); +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO comments (id, content) VALUES (200, 'Very good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +DELETE FROM comments WHERE id = 200; +SELECT * FROM entries; +content comment_id +Hello! 100 +SELECT * FROM comments; +id content +100 Good entry! +SELECT mroonga_command('dump --dump_plugins no'); +mroonga_command('dump --dump_plugins no') +table_create comments TABLE_PAT_KEY UInt32 +column_create comments content COLUMN_SCALAR ShortText +column_create comments id COLUMN_SCALAR UInt32 + +table_create entries TABLE_NO_KEY +column_create entries content COLUMN_SCALAR ShortText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create entries comment_id COLUMN_SCALAR comments + +load --table comments +[ +["_key","content","id"], +[100,"Good entry!",100] +] + +load --table entries +[ +["_id","comment_id","content"], +[1,100,"Hello!"] +] + +column_create comments entries-comment_id----------------------------------------------- COLUMN_INDEX entries comment_id +DROP TABLE entries; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_existent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_existent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_existent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_existent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,51 @@ +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CREATE TABLE comments ( +id int unsigned PRIMARY KEY, +content varchar(140) NOT NULL +); +CREATE TABLE entries ( +content varchar(140) NOT NULL, +comment_id int unsigned, +FOREIGN KEY (comment_id) REFERENCES comments (id) +); +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +SELECT * FROM entries; +content comment_id +Hello! 100 +SELECT * FROM comments; +id content +100 Good entry! +SELECT mroonga_command('dump --dump_plugins no'); +mroonga_command('dump --dump_plugins no') +table_create comments TABLE_PAT_KEY UInt32 +column_create comments content COLUMN_SCALAR ShortText +column_create comments id COLUMN_SCALAR UInt32 + +table_create entries TABLE_NO_KEY +column_create entries content COLUMN_SCALAR ShortText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create entries comment_id COLUMN_SCALAR comments + +load --table comments +[ +["_key","content","id"], +[100,"Good entry!",100] +] + +load --table entries +[ +["_id","comment_id","content"], +[1,100,"Hello!"] +] + +column_create comments entries-comment_id----------------------------------------------- COLUMN_INDEX entries comment_id +DROP TABLE entries; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_nonexistent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_nonexistent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_nonexistent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_insert_nonexistent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,37 @@ +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CREATE TABLE comments ( +id int unsigned PRIMARY KEY, +content varchar(140) NOT NULL +); +CREATE TABLE entries ( +content varchar(140) NOT NULL, +comment_id int unsigned, +FOREIGN KEY (comment_id) REFERENCES comments (id) +); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 1); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (foreign record doesn't exist: :<1>) +SELECT * FROM entries; +content comment_id +SELECT * FROM comments; +id content +SELECT mroonga_command('dump --dump_plugins no'); +mroonga_command('dump --dump_plugins no') +table_create comments TABLE_PAT_KEY UInt32 +column_create comments content COLUMN_SCALAR ShortText +column_create comments id COLUMN_SCALAR UInt32 + +table_create entries TABLE_NO_KEY +column_create entries content COLUMN_SCALAR ShortText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create entries comment_id COLUMN_SCALAR comments + +column_create comments entries-comment_id----------------------------------------------- COLUMN_INDEX entries comment_id +DROP TABLE entries; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_rename.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_rename.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_rename.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_rename.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,28 @@ +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; +DROP TABLE IF EXISTS articles2; +DROP TABLE IF EXISTS comments2; +CREATE TABLE comments ( +comment int unsigned PRIMARY KEY, +content text NOT NULL +); +CREATE TABLE articles ( +content text NOT NULL, +comment int unsigned, +FOREIGN KEY (comment) REFERENCES comments (comment) +); +RENAME TABLE comments TO comments2; +RENAME TABLE articles TO articles2; +SHOW CREATE TABLE articles2; +Table Create Table +articles2 CREATE TABLE `articles2` ( + `content` text NOT NULL, + `comment` int(10) unsigned DEFAULT NULL, + KEY `comment` (`comment`), + CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments2` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE=Mroonga DEFAULT CHARSET=latin1 +SELECT * FROM information_schema.referential_constraints; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME +def test comment def test PRIMARY NONE RESTRICT RESTRICT articles2 comments2 +DROP TABLE articles2; +DROP TABLE comments2; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_existent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_existent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_existent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_existent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,55 @@ +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CREATE TABLE comments ( +id int unsigned PRIMARY KEY, +content varchar(140) NOT NULL +); +CREATE TABLE entries ( +content varchar(140) NOT NULL, +comment_id int unsigned, +FOREIGN KEY (comment_id) REFERENCES comments (id) +); +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO comments (id, content) VALUES (200, 'Very good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +UPDATE entries SET comment_id = 200 WHERE content = 'Hello!'; +SELECT * FROM entries; +content comment_id +Hello! 200 +SELECT * FROM comments; +id content +100 Good entry! +200 Very good entry! +SELECT mroonga_command('dump --dump_plugins no'); +mroonga_command('dump --dump_plugins no') +table_create comments TABLE_PAT_KEY UInt32 +column_create comments content COLUMN_SCALAR ShortText +column_create comments id COLUMN_SCALAR UInt32 + +table_create entries TABLE_NO_KEY +column_create entries content COLUMN_SCALAR ShortText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create entries comment_id COLUMN_SCALAR comments + +load --table comments +[ +["_key","content","id"], +[100,"Good entry!",100], +[200,"Very good entry!",200] +] + +load --table entries +[ +["_id","comment_id","content"], +[1,200,"Hello!"] +] + +column_create comments entries-comment_id----------------------------------------------- COLUMN_INDEX entries comment_id +DROP TABLE entries; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_nonexistent.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_nonexistent.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_nonexistent.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_update_nonexistent.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CREATE TABLE comments ( +id int unsigned PRIMARY KEY, +content varchar(140) NOT NULL +); +CREATE TABLE entries ( +content varchar(140) NOT NULL, +comment_id int unsigned, +FOREIGN KEY (comment_id) REFERENCES comments (id) +); +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +UPDATE entries SET comment_id = 200 WHERE content = 'Hello!'; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (foreign record doesn't exist: :<200>) +SELECT * FROM entries; +content comment_id +Hello! 100 +SELECT * FROM comments; +id content +100 Good entry! +SELECT mroonga_command('dump --dump_plugins no'); +mroonga_command('dump --dump_plugins no') +table_create comments TABLE_PAT_KEY UInt32 +column_create comments content COLUMN_SCALAR ShortText +column_create comments id COLUMN_SCALAR UInt32 + +table_create entries TABLE_NO_KEY +column_create entries content COLUMN_SCALAR ShortText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create entries comment_id COLUMN_SCALAR comments + +load --table comments +[ +["_key","content","id"], +[100,"Good entry!",100] +] + +load --table entries +[ +["_id","comment_id","content"], +[1,100,"Hello!"] +] + +column_create comments entries-comment_id----------------------------------------------- COLUMN_INDEX entries comment_id +DROP TABLE entries; +DROP TABLE comments; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ DROP TABLE IF EXISTS memos; -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET NAMES UTF8; CREATE TABLE memos ( id INT PRIMARY KEY, @@ -15,4 +15,4 @@ 1 (groonga) Installed! 3 (groonga) Upgraded! DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,15 +6,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_operator.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_operator.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_operator.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_operator.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +DROP TABLE IF EXISTS diaries; +SET NAMES utf8; +CREATE TABLE diaries ( +id INT PRIMARY KEY, +title VARCHAR(255), +content TEXT, +FULLTEXT INDEX (title, content) +) DEFAULT CHARSET=utf8; +INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); +INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); +INSERT INTO diaries VALUES(3, "富士山", "今日も天気がよくてきれいに見える。"); +SELECT *, MATCH(title, content) +AGAINST("*SS content @ '天気'" in BOOLEAN MODE) AS score +FROM diaries +WHERE MATCH(title, content) +AGAINST("*SS content @ '天気'" in BOOLEAN MODE); +id title content score +2 天気 明日の富士山の天気について 1 +3 富士山 今日も天気がよくてきれいに見える。 1 +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_selector.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_selector.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_selector.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_syntax_script_selector.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS items; +DROP TABLE IF EXISTS readings; +SET NAMES utf8; +CREATE TABLE readings ( +reading VARCHAR(255) PRIMARY KEY +) DEFAULT CHARSET=utf8 +COLLATE=utf8_bin +COMMENT='default_tokenizer "TokenDelimit"'; +CREATE TABLE items ( +name VARCHAR(255) PRIMARY KEY, +readings TEXT COMMENT 'flags "COLUMN_VECTOR", type "readings"', +FULLTEXT INDEX items_index(readings) COMMENT 'table "readings"' +) DEFAULT CHARSET=utf8; +INSERT INTO items VALUES("日本", "ニホン ニッポン"); +INSERT INTO items VALUES("ローマ字", "ローマジ"); +INSERT INTO items VALUES("漢字", "カンジ"); +SELECT *, MATCH(readings) +AGAINST("*SS sub_filter(readings, 'prefix_rk_search(_key, \"niho\")')" in BOOLEAN MODE) AS score +FROM items +WHERE MATCH(readings) +AGAINST("*SS sub_filter(readings, 'prefix_rk_search(_key, \"niho\")')" in BOOLEAN MODE); +name readings score +日本 ニホン ニッポン 1 +DROP TABLE items; +DROP TABLE readings; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ DROP TABLE IF EXISTS memos; -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = ERROR_AND_LOG; SET NAMES UTF8; CREATE TABLE memos ( @@ -14,4 +14,4 @@ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE); ERROR 42000: failed to parse fulltext search keyword: <(groonga>: > DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ DROP TABLE IF EXISTS memos; -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = ERROR; SET NAMES UTF8; CREATE TABLE memos ( @@ -14,4 +14,4 @@ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE); ERROR 42000: failed to parse fulltext search keyword: <(groonga>: > DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ DROP TABLE IF EXISTS memos; -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = IGNORE_AND_LOG; SET NAMES UTF8; CREATE TABLE memos ( @@ -14,4 +14,4 @@ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE); id content DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ DROP TABLE IF EXISTS memos; -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = "IGNORE"; SET NAMES UTF8; CREATE TABLE memos ( @@ -14,4 +14,4 @@ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE); id content DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,15 +6,6 @@ content TEXT CHARSET utf8mb4 COLLATE utf8mb4_general_ci, FULLTEXT INDEX (content) ) DEFAULT CHARSET utf8mb4; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 INSERT INTO diaries VALUES(1, "Alphabet", "ABCDE"); INSERT INTO diaries VALUES(2, "Mathmatics", "𝐀𝐁𝐂𝐃𝐄 | U+1D400-U+1D405"); INSERT INTO diaries VALUES(3, "ひらがな", "あいうえお"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result 2017-12-21 15:48:51.000000000 +0000 @@ -10,19 +10,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,15 +6,6 @@ content text, fulltext index (title) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,13 +1,5 @@ drop table if exists t1, t2, t3; create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)); -show create table t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `c1` int(11) NOT NULL, - `c2` text, - PRIMARY KEY (`c1`), - FULLTEXT KEY `ft` (`c2`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 insert into t1 values (1, "hoge hoge"); insert into t1 values (2, "fuga fuga"); insert into t1 values (3, "moge moge"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,16 +6,6 @@ fulltext index title_index (title), fulltext index body_index (body) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries (title, body) values ("survey", "will start groonga!"); insert into diaries (title, body) values ("groonga (1)", "starting groonga..."); insert into diaries (title, body) values ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,13 +5,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `title` varchar(255) DEFAULT NULL, - `content` text, - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES("Hello", "今日からはじめました。"); INSERT INTO diaries VALUES("天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES("富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_10_0_no_such_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_10_0_no_such_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_10_0_no_such_key.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_10_0_no_such_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +title TEXT, +body TEXT, +FULLTEXT INDEX title_index (title), +FULLTEXT INDEX body_index (body) +) DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; +Table Create Table +diaries CREATE TABLE `diaries` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` text, + `body` text, + PRIMARY KEY (`id`), + FULLTEXT KEY `title_index` (`title`), + FULLTEXT KEY `body_index` (`body`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); +SELECT * FROM diaries FORCE INDEX(primary) +WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); +ERROR HY000: Can't find FULLTEXT index matching the column list +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -DROP TABLE IF EXISTS diaries; -CREATE TABLE diaries ( -id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT, -FULLTEXT INDEX title_index (title), -FULLTEXT INDEX body_index (body) -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); -SELECT * FROM diaries FORCE INDEX(primary) -WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); -ERROR HY000: Can't find FULLTEXT index matching the column list -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_5_no_such_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_5_no_such_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_5_no_such_key.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_5_no_such_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +title TEXT, +body TEXT, +FULLTEXT INDEX title_index (title), +FULLTEXT INDEX body_index (body) +) DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; +Table Create Table +diaries CREATE TABLE `diaries` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` text, + `body` text, + PRIMARY KEY (`id`), + FULLTEXT KEY `title_index` (`title`), + FULLTEXT KEY `body_index` (`body`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); +SELECT * FROM diaries FORCE INDEX(primary) +WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); +id title body +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -DROP TABLE IF EXISTS diaries; -CREATE TABLE diaries ( -id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT, -FULLTEXT INDEX title_index (title), -FULLTEXT INDEX body_index (body) -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); -SELECT * FROM diaries FORCE INDEX(primary) -WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); -id title body -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_6_no_such_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_6_no_such_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_6_no_such_key.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_5_6_no_such_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +id INT PRIMARY KEY AUTO_INCREMENT, +title TEXT, +body TEXT, +FULLTEXT INDEX title_index (title), +FULLTEXT INDEX body_index (body) +) DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; +Table Create Table +diaries CREATE TABLE `diaries` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` text, + `body` text, + PRIMARY KEY (`id`), + FULLTEXT KEY `title_index` (`title`), + FULLTEXT KEY `body_index` (`body`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); +SELECT * FROM diaries FORCE INDEX(primary) +WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); +ERROR HY000: Can't find FULLTEXT index matching the column list +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -DROP TABLE IF EXISTS diaries; -CREATE TABLE diaries ( -id INT PRIMARY KEY AUTO_INCREMENT, -title TEXT, -body TEXT, -FULLTEXT INDEX title_index (title), -FULLTEXT INDEX body_index (body) -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); -SELECT * FROM diaries FORCE INDEX(primary) -WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); -ERROR HY000: Can't find FULLTEXT index matching the column list -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_command_auto-escape.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_command_auto-escape.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_command_auto-escape.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_command_auto-escape.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,16 @@ +DROP TABLE IF EXISTS diaries; +SET NAMES UTF8; +CREATE TABLE diaries ( +title TEXT, +FULLTEXT KEY (title) +) DEFAULT CHARSET=utf8; +INSERT INTO diaries VALUES('It is Groonga'); +INSERT INTO diaries VALUES('It is Mroonga'); +SELECT mroonga_command('select', +'table', 'diaries', +'filter', 'title @ "Groonga"'); +mroonga_command('select', +'table', 'diaries', +'filter', 'title @ "Groonga"') +[[[1],[["_id","UInt32"],["title","LongText"]],[1,"It is Groonga"]]] +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_command_special-database-name.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_command_special-database-name.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_command_special-database-name.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_command_special-database-name.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +DROP DATABASE IF EXISTS `db-1`; +CREATE DATABASE `db-1`; +USE `db-1`; +SET NAMES UTF8; +CREATE TABLE diaries ( +title TEXT, +FULLTEXT KEY (title) +) DEFAULT CHARSET=utf8; +SELECT mroonga_command('dump --dump_plugins no'); +mroonga_command('dump --dump_plugins no') +table_create diaries TABLE_NO_KEY +column_create diaries title COLUMN_SCALAR LongText + +table_create diaries#title TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create diaries#title index COLUMN_INDEX|WITH_POSITION diaries title +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,3 +1,3 @@ SET NAMES UTF8; SELECT mroonga_escape(29) AS escaped_query; -ERROR HY000: Can't initialize function 'mroonga_escape'; mroonga_escape(): The 1st argument must be query as string +ERROR HY000: Can't initialize function 'mroonga_escape'; mroonga_escape(): The 1st query argument must be string diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_all.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_all.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_all.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_all.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SET NAMES UTF8; +SELECT mroonga_escape('+-><~*()\"\\:') AS escaped_query; +escaped_query +\+\-\>\<\~\*\(\)\"\\\: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_custom.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_custom.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_custom.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_custom.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SET NAMES UTF8; +SELECT mroonga_escape('+-><~*()\"\\:', '()<>~') AS escaped_query; +escaped_query ++-\>\<\~*\(\)"\: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_join.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_join.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_join.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_join.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS users; +DROP TABLE IF EXISTS queries; +CREATE TABLE users ( +id INT +); +CREATE TABLE queries ( +user_id INT, +query TEXT +); +INSERT INTO users VALUES (1); +INSERT INTO users VALUES (2); +INSERT INTO users VALUES (3); +INSERT INTO queries VALUES (1, '(a)'); +INSERT INTO queries VALUES (2, '(b)'); +INSERT INTO queries VALUES (3, '(c)'); +SELECT users.id, mroonga_escape(queries.query) AS escaped_query +FROM queries +LEFT JOIN users ON users.id = queries.user_id +ORDER BY users.id; +id escaped_query +1 \(a\) +2 \(b\) +3 \(c\) +DROP TABLE queries; +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_match_against.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_match_against.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_match_against.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_match_against.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS memos; +SET GLOBAL mroonga_default_parser = TokenDelimit; +SET NAMES utf8mb4; +CREATE TABLE memos ( +id INT PRIMARY KEY, +content TEXT, +FULLTEXT INDEX (content) +) DEFAULT CHARSET=utf8mb4; +INSERT INTO memos VALUES(1, "(Groonga) Installed!"); +INSERT INTO memos VALUES(2, "(Mroonga) Installed!"); +INSERT INTO memos VALUES(3, "(Groonga) Upgraded!"); +SELECT * FROM memos +WHERE MATCH(content) AGAINST(mroonga_escape("(groonga)") IN BOOLEAN MODE); +id content +1 (Groonga) Installed! +3 (Groonga) Upgraded! +DROP TABLE memos; +SET GLOBAL mroonga_default_parser = TokenBigram; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_named.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_named.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_named.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_named.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SET NAMES UTF8; +SELECT mroonga_escape('+-><~*()\"\\:' AS query) AS escaped_query; +escaped_query +\+\-\>\<\~\*\(\)\"\\\: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_nested.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_nested.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_nested.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_query_nested.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS diaries; +SET NAMES UTF8; +CREATE TABLE diaries( +title TEXT, +FULLTEXT KEY (title) +) DEFAULT CHARSET=utf8; +INSERT INTO diaries VALUES("Start groonga"); +INSERT INTO diaries VALUES("Start mroonga"); +INSERT INTO diaries VALUES("Start groonga and Ruby"); +SELECT mroonga_escape(mroonga_escape('*groonga*')); +mroonga_escape(mroonga_escape('*groonga*')) +\\\*groonga\\\* +DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_decimal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_decimal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_decimal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_decimal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,11 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS data; +CREATE TABLE data ( +value DECIMAL(5, 3) +); +INSERT INTO data VALUES (2.9); +SELECT mroonga_escape(value AS script) +FROM data; +mroonga_escape(value AS script) +2.9 +DROP TABLE data; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_integer.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_integer.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_integer.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_integer.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SET NAMES UTF8; +SELECT mroonga_escape(-29 AS script) AS escaped_query; +escaped_query +-29 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_real.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_real.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_real.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_real.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,11 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS data; +CREATE TABLE data ( +value REAL +); +INSERT INTO data VALUES (2.9); +SELECT mroonga_escape(value AS script) +FROM data; +mroonga_escape(value AS script) +2.9 +DROP TABLE data; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_string.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_string.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_string.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_script_string.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SET NAMES UTF8; +SELECT mroonga_escape('a\"\\\'z' AS script) AS escaped_query; +escaped_query +"a\"\\'z" diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -SET NAMES UTF8; -SELECT mroonga_escape('+-><~*()\"\\:') AS escaped_query; -escaped_query -\+\-\>\<\~\*\(\)\"\\\: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -SET NAMES UTF8; -SELECT mroonga_escape('+-><~*()\"\\:', '()<>~') AS escaped_query; -escaped_query -+-\>\<\~*\(\)"\: diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -DROP TABLE IF EXISTS diaries; -SET NAMES UTF8; -CREATE TABLE diaries( -title TEXT, -FULLTEXT KEY (title) -) DEFAULT CHARSET=utf8; -INSERT INTO diaries VALUES("Start groonga"); -INSERT INTO diaries VALUES("Start mroonga"); -INSERT INTO diaries VALUES("Start groonga and Ruby"); -SELECT mroonga_escape(mroonga_escape('*groonga*')); -mroonga_escape(mroonga_escape('*groonga*')) -\\\*groonga\\\* -DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_dynamic_keyword.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_dynamic_keyword.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_dynamic_keyword.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_dynamic_keyword.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,11 @@ +CREATE TABLE keywords ( +keyword text +); +INSERT INTO keywords VALUES ('Mroonga'); +INSERT INTO keywords VALUES ('Groonga'); +SELECT mroonga_highlight_html('Mroonga is the Groonga based storage engine.', +keyword) AS highlighted +FROM keywords; +highlighted +Mroonga is the Groonga based storage engine. +Mroonga is the Groonga based storage engine. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_japanese.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_japanese.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_japanese.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_japanese.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,13 @@ +SET NAMES utf8; +SELECT mroonga_highlight_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', +'ロック', '更新') AS highlighted; +highlighted +Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_multiple_keywords.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_multiple_keywords.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_multiple_keywords.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_multiple_keywords.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SELECT mroonga_highlight_html('Mroonga is the Groonga based storage engine.', +'Mroonga', 'Groonga') AS highlighted; +highlighted +Mroonga is the Groonga based storage engine. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_normalizer.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_normalizer.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_normalizer.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_normalizer.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SELECT mroonga_highlight_html('Mroonga is the Groonga based storage engine.', +'mroonga') AS highlighted; +highlighted +Mroonga is the Groonga based storage engine. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query_pragma.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query_pragma.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query_pragma.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query_pragma.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,13 @@ +SET NAMES utf8; +SELECT mroonga_highlight_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', +'*D- +ロック +更新 ボトルネック' AS query) AS highlighted; +highlighted +Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_query.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,13 @@ +SET NAMES utf8; +SELECT mroonga_highlight_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', +'ロック 更新 -ボトルネック' AS query) AS highlighted; +highlighted +Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_record.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_record.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_record.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_highlight_html_record.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,32 @@ +CREATE TABLE memos ( +content text +); +INSERT INTO memos VALUES ('Mroonga is a MySQL storage engine based on Groonga, the full text search engine. + +In MySQL 5.1 or later, Pluggable Storage Engine interface is introduced, and we can use custom storage engines easily. So we implement Mroonga, so that we can use Groonga through MySQL. + +By using Mroonga, you can use Groonga with SQL.'); +INSERT INTO memos VALUES ('Since Tritonn was the modified version of MySQL, we need to build it by ourselves or use binary files provided by Tritonn project, thus we cannot use the official binary files provided by MySQL. + +On the other hand, Mroonga is an independent program (shared library) using Pluggable Storage Engine interface, and we can dynamically load it on MySQL''s official binary. So we can use it more easily than Tritonn.'); +INSERT INTO memos VALUES ('Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one is "wrapper mode", that adds full text search function on other storage engines like MyISAM or InnoDB. With this mode, you can use Groonga''s fast full text search with having the benefits of the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga''s read-lock free characteristic. And you might have the performance bottle neck in the storage engine in updating data.'); +SELECT mroonga_highlight_html(content, 'Mroonga') AS highlighted +FROM memos; +highlighted +Mroonga is a MySQL storage engine based on Groonga, the full text search engine. + +In MySQL 5.1 or later, Pluggable Storage Engine interface is introduced, and we can use custom storage engines easily. So we implement Mroonga, so that we can use Groonga through MySQL. + +By using Mroonga, you can use Groonga with SQL. +Since Tritonn was the modified version of MySQL, we need to build it by ourselves or use binary files provided by Tritonn project, thus we cannot use the official binary files provided by MySQL. + +On the other hand, Mroonga is an independent program (shared library) using Pluggable Storage Engine interface, and we can dynamically load it on MySQL's official binary. So we can use it more easily than Tritonn. +Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one is "wrapper mode", that adds full text search function on other storage engines like MyISAM or InnoDB. With this mode, you can use Groonga's fast full text search with having the benefits of the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga's read-lock free characteristic. And you might have the performance bottle neck in the storage engine in updating data. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_default.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_default.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_default.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_default.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,3 @@ +SELECT mroonga_normalize('aBcAbC㍑'); +mroonga_normalize('aBcAbC㍑') +abcabcリットル diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_normalizer.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_normalizer.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_normalizer.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_normalizer.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,3 @@ +SELECT mroonga_normalize('aBcAbC㍑', "NormalizerAuto"); +mroonga_normalize('aBcAbC㍑', "NormalizerAuto") +abcabcリットル diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_record.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_record.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_record.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_normalize_record.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,7 @@ +CREATE TABLE memos ( +content text +); +INSERT INTO memos VALUES ('aBcAbC㍑'); +SELECT mroonga_normalize(content) FROM memos; +mroonga_normalize(content) +abcabcリットル diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_multiple.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_multiple.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_multiple.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_multiple.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS synonyms; +CREATE TABLE synonyms ( +term varchar(255), +synonym varchar(255), +INDEX (term) +); +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); +INSERT INTO synonyms VALUES ('Mroonga', 'Mroonga'); +INSERT INTO synonyms VALUES ('Mroonga', 'Groonga MySQL'); +SELECT mroonga_query_expand('synonyms', +'term', +'synonym', +'Mroonga Rroonga PGroonga') AS query; +query +((Mroonga) OR (Groonga MySQL)) ((Rroonga) OR (Groonga Ruby)) PGroonga +DROP TABLE synonyms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_no_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_no_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_no_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_no_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS synonyms; +CREATE TABLE synonyms ( +term varchar(255), +synonym varchar(255) +); +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); +SELECT mroonga_query_expand('synonyms', +'term', +'synonym', +'Mroonga Rroonga PGroonga') AS query; +query +Mroonga ((Rroonga) OR (Groonga Ruby)) PGroonga +DROP TABLE synonyms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_one.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_one.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_one.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_one.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,16 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS synonyms; +CREATE TABLE synonyms ( +term varchar(255), +synonym varchar(255), +INDEX (term) +); +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); +SELECT mroonga_query_expand('synonyms', +'term', +'synonym', +'Mroonga Rroonga PGroonga') AS query; +query +Mroonga ((Rroonga) OR (Groonga Ruby)) PGroonga +DROP TABLE synonyms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_pragma.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_pragma.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_pragma.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_query_expand_pragma.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +SET NAMES UTF8; +DROP TABLE IF EXISTS synonyms; +CREATE TABLE synonyms ( +term varchar(255), +synonym varchar(255), +INDEX (term) +); +INSERT INTO synonyms VALUES ('D+', '[D+]'); +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); +SELECT mroonga_query_expand('synonyms', +'term', +'synonym', +'*D+ Mroonga Rroonga PGroonga') AS query; +query +*D+ Mroonga ((Rroonga) OR (Groonga Ruby)) PGroonga +DROP TABLE synonyms; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_dynamic_keyword.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_dynamic_keyword.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_dynamic_keyword.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_dynamic_keyword.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,11 @@ +CREATE TABLE keywords ( +keyword text +); +INSERT INTO keywords VALUES ('Mroonga'); +INSERT INTO keywords VALUES ('Groonga'); +SELECT mroonga_snippet_html('Mroonga is the Groonga based storage engine.', +keyword) as snippet +FROM keywords; +snippet +

Mroonga is the Groonga based storage engine.
+
Mroonga is the Groonga based storage engine.
diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_japanese.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_japanese.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_japanese.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_japanese.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +SET NAMES utf8; +SELECT mroonga_snippet_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', +'ロック', '更新') as snippet; +snippet +
がデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。
用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネッ
diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_keywords.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_keywords.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_keywords.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_keywords.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SELECT mroonga_snippet_html('Mroonga is the Groonga based storage engine.', +'Mroonga', 'Groonga') as snippet; +snippet +
Mroonga is the Groonga based storage engine.
diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_snippets.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_snippets.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_snippets.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_multiple_snippets.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,10 @@ +SELECT mroonga_snippet_html('Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one is "wrapper mode", that adds full text search function on other storage engines like MyISAM or InnoDB. With this mode, you can use Groonga''s fast full text search with having the benefits of the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga''s read-lock free characteristic. And you might have the performance bottle neck in the storage engine in updating data.', +'lock') as snippet; +snippet +
ng. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one
f the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga's read-lock free characteristic. And you might have the performance bottle neck in the storage engine in upda
diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query_pragma.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query_pragma.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query_pragma.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query_pragma.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +SET NAMES utf8; +SELECT mroonga_snippet_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', +'*D- +ロック +更新 ボトルネック' AS query) as snippet; +snippet +
がデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。
用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネッ
diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_query.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +SET NAMES utf8; +SELECT mroonga_snippet_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', +'ロック 更新 -ボトルネック' AS query) as snippet; +snippet +
がデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。
用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネッ
diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_record.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_record.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_record.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_html_record.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,30 @@ +CREATE TABLE memos ( +content text +); +INSERT INTO memos VALUES ('Mroonga is a MySQL storage engine based on Groonga, the full text search engine. + +In MySQL 5.1 or later, Pluggable Storage Engine interface is introduced, and we can use custom storage engines easily. So we implement Mroonga, so that we can use Groonga through MySQL. + +By using Mroonga, you can use Groonga with SQL.'); +INSERT INTO memos VALUES ('Since Tritonn was the modified version of MySQL, we need to build it by ourselves or use binary files provided by Tritonn project, thus we cannot use the official binary files provided by MySQL. + +On the other hand, Mroonga is an independent program (shared library) using Pluggable Storage Engine interface, and we can dynamically load it on MySQL''s official binary. So we can use it more easily than Tritonn.'); +INSERT INTO memos VALUES ('Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one is "wrapper mode", that adds full text search function on other storage engines like MyISAM or InnoDB. With this mode, you can use Groonga''s fast full text search with having the benefits of the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga''s read-lock free characteristic. And you might have the performance bottle neck in the storage engine in updating data.'); +SELECT mroonga_snippet_html(content, 'Mroonga') as snippet +FROM memos; +snippet +
Mroonga is a MySQL storage engine based on Groonga, the full text search engine. + +In MySQL 5.1 or later, Pluggable Storage Engine interface is introduced, and we can use custom storage engines easily.
So we implement Mroonga, so that we can use Groonga through MySQL. + +By using Mroonga, you can use Groonga with SQL.
+
onn project, thus we cannot use the official binary files provided by MySQL. + +On the other hand, Mroonga is an independent program (shared library) using Pluggable Storage Engine interface, and we can
+
Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described
diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null_57.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null_57.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null_57.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null_57.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -DROP TABLE IF EXISTS shops; -CREATE TABLE shops ( -location GEOMETRY NOT NULL -); -SET SESSION sql_mode = ''; -INSERT INTO shops VALUES (NULL), (NULL); -Warnings: -Warning 1048 Column 'location' cannot be null -SET SESSION sql_mode = default; -SELECT ST_AsText(location) FROM shops; -ST_AsText(location) -POINT(0 0) -POINT(0 0) -DROP TABLE shops; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ location GEOMETRY NOT NULL, SPATIAL KEY location_index (location) ); -SHOW CREATE TABLE shops; -Table Create Table -shops CREATE TABLE `shops` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, - `location` geometry NOT NULL, - PRIMARY KEY (`id`), - SPATIAL KEY `location_index` (`location`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 INSERT INTO shops (name, location) VALUES ('nezu-no-taiyaki', ST_GeomFromText('POINT(139.762573 35.720253)')); @@ -167,4 +158,10 @@ 14 tetsuji POINT(139.76857 35.680911944444446) 19 daruma POINT(139.7705988888889 35.68146111111111) 26 kazuya POINT(139.760895 35.67350805555556) +EXPLAIN +SELECT id, name, ST_AsText(location) AS location_text FROM shops +WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location) +ORDER BY id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE shops range location_index location_index 34 NULL 36 Using where; Using filesort DROP TABLE shops; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_bulk_insert_null.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_bulk_insert_null.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_bulk_insert_null.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_bulk_insert_null.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +DROP TABLE IF EXISTS shops; +CREATE TABLE shops ( +location GEOMETRY NOT NULL +); +INSERT INTO shops VALUES (NULL), (NULL); +ERROR 23000: Column 'location' cannot be null +SELECT ST_AsText(location) FROM shops; +ST_AsText(location) +DROP TABLE shops; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_contains.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_contains.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_contains.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/geometry_strict_sql_mode_contains.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,169 @@ +DROP TABLE IF EXISTS shops; +CREATE TABLE shops ( +id INT PRIMARY KEY AUTO_INCREMENT, +name TEXT, +location GEOMETRY NOT NULL, +SPATIAL KEY location_index (location) +); +INSERT INTO shops (name, location) +VALUES ('nezu-no-taiyaki', +ST_GeomFromText('POINT(139.762573 35.720253)')); +INSERT INTO shops (name, location) +VALUES ('taiyaki-kataoka', +ST_GeomFromText('POINT(139.715591 35.712521)')); +INSERT INTO shops (name, location) +VALUES ('soba-taiyaki-ku', +ST_GeomFromText('POINT(139.659088 35.683712)')); +INSERT INTO shops (name, location) +VALUES ('kuruma', +ST_GeomFromText('POINT(139.706207 35.721516)')); +INSERT INTO shops (name, location) +VALUES ('hirose-ya', +ST_GeomFromText('POINT(139.685608 35.714844)')); +INSERT INTO shops (name, location) +VALUES ('sazare', +ST_GeomFromText('POINT(139.685043 35.714653)')); +INSERT INTO shops (name, location) +VALUES ('omede-taiyaki', +ST_GeomFromText('POINT(139.817154 35.700516)')); +INSERT INTO shops (name, location) +VALUES ('onaga-ya', +ST_GeomFromText('POINT(139.81105 35.698254)')); +INSERT INTO shops (name, location) +VALUES ('shiro-ya', +ST_GeomFromText('POINT(139.638611 35.705517)')); +INSERT INTO shops (name, location) +VALUES ('fuji-ya', +ST_GeomFromText('POINT(139.637115 35.703938)')); +INSERT INTO shops (name, location) +VALUES ('miyoshi', +ST_GeomFromText('POINT(139.537323 35.644539)')); +INSERT INTO shops (name, location) +VALUES ('juju-ya', +ST_GeomFromText('POINT(139.695755 35.628922)')); +INSERT INTO shops (name, location) +VALUES ('tatsumi-ya', +ST_GeomFromText('POINT(139.638657 35.665501)')); +INSERT INTO shops (name, location) +VALUES ('tetsuji', +ST_GeomFromText('POINT(139.76857 35.680912)')); +INSERT INTO shops (name, location) +VALUES ('gazuma-ya', +ST_GeomFromText('POINT(139.647598 35.700817)')); +INSERT INTO shops (name, location) +VALUES ('honma-mon', +ST_GeomFromText('POINT(139.652573 35.722736)')); +INSERT INTO shops (name, location) +VALUES ('naniwa-ya', +ST_GeomFromText('POINT(139.796234 35.730061)')); +INSERT INTO shops (name, location) +VALUES ('kuro-dai', +ST_GeomFromText('POINT(139.704834 35.650345)')); +INSERT INTO shops (name, location) +VALUES ('daruma', +ST_GeomFromText('POINT(139.770599 35.681461)')); +INSERT INTO shops (name, location) +VALUES ('yanagi-ya', +ST_GeomFromText('POINT(139.783981 35.685341)')); +INSERT INTO shops (name, location) +VALUES ('sharaku', +ST_GeomFromText('POINT(139.794846 35.716969)')); +INSERT INTO shops (name, location) +VALUES ('takane', +ST_GeomFromText('POINT(139.560913 35.698601)')); +INSERT INTO shops (name, location) +VALUES ('chiyoda', +ST_GeomFromText('POINT(139.652817 35.642601)')); +INSERT INTO shops (name, location) +VALUES ('da-ka-po', +ST_GeomFromText('POINT(139.727356 35.627346)')); +INSERT INTO shops (name, location) +VALUES ('matsushima-ya', +ST_GeomFromText('POINT(139.737381 35.640556)')); +INSERT INTO shops (name, location) +VALUES ('kazuya', +ST_GeomFromText('POINT(139.760895 35.673508)')); +INSERT INTO shops (name, location) +VALUES ('furuya-kogane-an', +ST_GeomFromText('POINT(139.676071 35.680603)')); +INSERT INTO shops (name, location) +VALUES ('hachi-no-ie', +ST_GeomFromText('POINT(139.668106 35.608021)')); +INSERT INTO shops (name, location) +VALUES ('azuki-chan', +ST_GeomFromText('POINT(139.673203 35.64151)')); +INSERT INTO shops (name, location) +VALUES ('kuriko-an', +ST_GeomFromText('POINT(139.796829 35.712013)')); +INSERT INTO shops (name, location) +VALUES ('yume-no-aru-machi-no-taiyaki-ya-san', +ST_GeomFromText('POINT(139.712524 35.616199)')); +INSERT INTO shops (name, location) +VALUES ('naze-ya', +ST_GeomFromText('POINT(139.665833 35.609039)')); +INSERT INTO shops (name, location) +VALUES ('sanoki-ya', +ST_GeomFromText('POINT(139.770721 35.66592)')); +INSERT INTO shops (name, location) +VALUES ('shigeta', +ST_GeomFromText('POINT(139.780273 35.672626)')); +INSERT INTO shops (name, location) +VALUES ('nishimi-ya', +ST_GeomFromText('POINT(139.774628 35.671825)')); +INSERT INTO shops (name, location) +VALUES ('hiiragi', +ST_GeomFromText('POINT(139.711517 35.647701)')); +SELECT id, name, ST_AsText(location) AS location_text FROM shops; +id name location_text +1 nezu-no-taiyaki POINT(139.76257305555555 35.72025305555556) +2 taiyaki-kataoka POINT(139.7155911111111 35.712521111111116) +3 soba-taiyaki-ku POINT(139.65908805555557 35.68371194444445) +4 kuruma POINT(139.70620694444446 35.72151611111111) +5 hirose-ya POINT(139.68560805555555 35.71484388888889) +6 sazare POINT(139.68504305555555 35.71465305555556) +7 omede-taiyaki POINT(139.8171538888889 35.70051611111111) +8 onaga-ya POINT(139.81105 35.69825388888889) +9 shiro-ya POINT(139.63861111111112 35.70551694444445) +10 fuji-ya POINT(139.637115 35.703938055555554) +11 miyoshi POINT(139.53732305555556 35.644538888888896) +12 juju-ya POINT(139.69575500000002 35.62892194444445) +13 tatsumi-ya POINT(139.63865694444445 35.66550111111111) +14 tetsuji POINT(139.76857 35.680911944444446) +15 gazuma-ya POINT(139.64759805555553 35.70081694444444) +16 honma-mon POINT(139.65257305555556 35.72273611111111) +17 naniwa-ya POINT(139.79623388888888 35.73006111111111) +18 kuro-dai POINT(139.70483388888888 35.650345) +19 daruma POINT(139.7705988888889 35.68146111111111) +20 yanagi-ya POINT(139.78398111111113 35.685341111111114) +21 sharaku POINT(139.79484611111113 35.71696888888889) +22 takane POINT(139.56091305555555 35.69860111111112) +23 chiyoda POINT(139.65281694444442 35.64260111111111) +24 da-ka-po POINT(139.72735611111113 35.62734611111111) +25 matsushima-ya POINT(139.73738111111112 35.64055611111111) +26 kazuya POINT(139.760895 35.67350805555556) +27 furuya-kogane-an POINT(139.67607111111113 35.68060305555556) +28 hachi-no-ie POINT(139.66810611111111 35.608021111111114) +29 azuki-chan POINT(139.67320305555555 35.641510000000004) +30 kuriko-an POINT(139.79682888888888 35.71201305555556) +31 yume-no-aru-machi-no-taiyaki-ya-san POINT(139.71252388888888 35.61619888888889) +32 naze-ya POINT(139.66583305555557 35.60903888888889) +33 sanoki-ya POINT(139.7707211111111 35.66592) +34 shigeta POINT(139.78027305555557 35.67262611111111) +35 nishimi-ya POINT(139.77462805555555 35.671825) +36 hiiragi POINT(139.71151694444444 35.64770111111111) +SELECT id, name, ST_AsText(location) AS location_text FROM shops +WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location) +ORDER BY id; +id name location_text +14 tetsuji POINT(139.76857 35.680911944444446) +19 daruma POINT(139.7705988888889 35.68146111111111) +26 kazuya POINT(139.760895 35.67350805555556) +EXPLAIN +SELECT id, name, ST_AsText(location) AS location_text FROM shops +WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location) +ORDER BY id; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE shops NULL range location_index location_index 34 NULL 36 100.00 Using where; Using filesort +Warnings: +Note 1003 /* select#1 */ select `test`.`shops`.`id` AS `id`,`test`.`shops`.`name` AS `name`,st_astext(`test`.`shops`.`location`) AS `location_text` from `test`.`shops` where mbrcontains((st_geometryfromtext('LineString(139.7727 35.6684, 139.7038 35.7121)')),`test`.`shops`.`location`) order by `test`.`shops`.`id` +DROP TABLE shops; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,28 +1,28 @@ -drop table if exists t1, t2, t3; -create table t1 (_id int, a int, primary key (_id) using hash); -insert into t1 values(null, 100); +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (_id int, a int, PRIMARY KEY (_id) USING HASH); +INSERT INTO t1 VALUES(null, 100); ERROR 23000: Column '_id' cannot be null -insert into t1 values(1,100); +INSERT INTO t1 VALUES(1,100); Warnings: Warning 1265 Data truncated for column '_id' at row 1 -insert into t1 values(1,100); +INSERT INTO t1 VALUES(1,100); Warnings: Warning 1265 Data truncated for column '_id' at row 1 -insert into t1 values(1,100); +INSERT INTO t1 VALUES(1,100); Warnings: Warning 1265 Data truncated for column '_id' at row 1 -insert into t1 values(1,100); +INSERT INTO t1 VALUES(1,100); Warnings: Warning 1265 Data truncated for column '_id' at row 1 -select * from t1; +SELECT * FROM t1; _id a 1 100 2 100 3 100 4 100 -select * from t1 where _id = 2; +SELECT * FROM t1 WHERE _id = 2; _id a 2 100 -select * from t1 where _id = 20; +SELECT * FROM t1 WHERE _id = 20; _id a -drop table t1; +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_strict_sql_mode_id_primary.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_strict_sql_mode_id_primary.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_strict_sql_mode_id_primary.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_strict_sql_mode_id_primary.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,19 @@ +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (_id int, a int, PRIMARY KEY (_id) USING HASH); +INSERT INTO t1 VALUES(null, 100); +ERROR 23000: Column '_id' cannot be null +INSERT INTO t1 VALUES(1,100); +ERROR 01000: Data truncated for column '_id' at row 1 +INSERT INTO t1 VALUES(1,100); +ERROR 01000: Data truncated for column '_id' at row 1 +INSERT INTO t1 VALUES(1,100); +ERROR 01000: Data truncated for column '_id' at row 1 +INSERT INTO t1 VALUES(1,100); +ERROR 01000: Data truncated for column '_id' at row 1 +SELECT * FROM t1; +_id a +SELECT * FROM t1 WHERE _id = 2; +_id a +SELECT * FROM t1 WHERE _id = 20; +_id a +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_asc_asc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_asc_asc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_asc_asc.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_asc_asc.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,40 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +score3 INT, +INDEX (score1, score2, score3) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `score3` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score1` (`score1`,`score2`,`score3`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, score3) VALUES(1, 10, -100); +INSERT INTO items (score1, score2, score3) VALUES(1, 10, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 10, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 100); +SELECT * +FROM items +WHERE score1 = 2 +ORDER BY score2 ASC, score3 ASC; +id score1 score2 score3 +3 2 10 100 +7 2 20 -100 +8 2 20 0 +9 2 20 100 +4 2 30 -100 +5 2 30 0 +6 2 30 100 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_desc_desc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_desc_desc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_desc_desc.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_order_by_where_equal_desc_desc.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,40 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +score3 INT, +INDEX (score1, score2, score3) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `score3` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score1` (`score1`,`score2`,`score3`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, score3) VALUES(1, 10, -100); +INSERT INTO items (score1, score2, score3) VALUES(1, 10, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 10, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 100); +SELECT * +FROM items +WHERE score1 = 2 +ORDER BY score2 DESC, score3 DESC; +id score1 score2 score3 +6 2 30 100 +5 2 30 0 +4 2 30 -100 +9 2 20 100 +8 2 20 0 +7 2 20 -100 +3 2 10 100 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_strict_sql_mode_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_strict_sql_mode_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_strict_sql_mode_update.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_strict_sql_mode_update.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +DROP TABLE IF EXISTS scores; +SET NAMES utf8; +CREATE TABLE scores ( +name char(30) NOT NULL, +score int NOT NULL, +PRIMARY KEY (name, score) +) DEFAULT CHARSET=utf8; +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 29); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", -12); +INSERT INTO scores (name, score) VALUES ("Jiro Yamada", 27); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 10); +SELECT * FROM scores; +name score +Jiro Yamada 27 +Taro Yamada -12 +Taro Yamada 10 +Taro Yamada 29 +UPDATE scores SET name = "Taro Yamada" + WHERE name = "Jiro Yamada" AND score = 27; +ERROR 01000: data truncated for primary key column: +SELECT * FROM scores +WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29); +name score +Taro Yamada -12 +Taro Yamada 10 +DROP TABLE scores; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,32 +1,27 @@ -drop table if exists listing; -set names utf8; -create table scores ( -name char(30) not null, -score int not null, -primary key (name, score) -) default charset utf8; -show create table scores; -Table Create Table -scores CREATE TABLE `scores` ( - `name` char(30) NOT NULL, - `score` int(11) NOT NULL, - PRIMARY KEY (`name`,`score`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -insert into scores (name, score) values("Taro Yamada", 29); -insert into scores (name, score) values("Taro Yamada", -12); -insert into scores (name, score) values("Jiro Yamada", 27); -insert into scores (name, score) values("Taro Yamada", 10); -select * from scores; +DROP TABLE IF EXISTS scores; +SET NAMES utf8; +CREATE TABLE scores ( +name char(30) NOT NULL, +score int NOT NULL, +PRIMARY KEY (name, score) +) DEFAULT CHARSET=utf8; +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 29); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", -12); +INSERT INTO scores (name, score) VALUES ("Jiro Yamada", 27); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 10); +SELECT * FROM scores; name score Jiro Yamada 27 Taro Yamada -12 Taro Yamada 10 Taro Yamada 29 -update scores set name = "Taro Yamada" where name = "Jiro Yamada" and score = 27; +UPDATE scores SET name = "Taro Yamada" + WHERE name = "Jiro Yamada" AND score = 27; Warnings: Warning 1265 data truncated for primary key column: -select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29); +SELECT * FROM scores +WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29); name score Taro Yamada -12 Taro Yamada 10 -drop table scores; +DROP TABLE scores; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,30 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score INT, +created_at DATETIME, +INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score` (`score`,`created_at`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); +SELECT * +FROM items +WHERE score = 2 AND created_at >= "2014-09-11 00:00:00" + ORDER BY created_at DESC; +id score created_at +4 2 2014-09-12 00:00:00 +2 2 2014-09-11 00:00:00 +3 2 2014-09-11 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_greater_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,28 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score INT, +created_at DATETIME, +INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score` (`score`,`created_at`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); +SELECT * +FROM items +WHERE score = 2 AND created_at > "2014-09-11 00:00:00" + ORDER BY created_at DESC; +id score created_at +4 2 2014-09-12 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,30 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score INT, +created_at DATETIME, +INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score` (`score`,`created_at`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); +SELECT * +FROM items +WHERE score = 2 AND created_at <= "2014-09-12 00:00:00" + ORDER BY created_at DESC; +id score created_at +4 2 2014-09-12 00:00:00 +2 2 2014-09-11 00:00:00 +3 2 2014-09-11 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_all_used_less_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,29 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score INT, +created_at DATETIME, +INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score` (`score`,`created_at`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); +SELECT * +FROM items +WHERE score = 2 AND created_at < "2014-09-12 00:00:00" + ORDER BY created_at DESC; +id score created_at +2 2 2014-09-11 00:00:00 +3 2 2014-09-11 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -DROP TABLE IF EXISTS items; -CREATE TABLE items ( -id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, -score INT, -created_at DATETIME, -INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; -Table Create Table -items CREATE TABLE `items` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `score` int(11) DEFAULT NULL, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `score` (`score`,`created_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); -SELECT * -FROM items -WHERE score = 2 AND created_at >= "2014-09-11 00:00:00" - ORDER BY created_at DESC; -id score created_at -4 2 2014-09-12 00:00:00 -2 2 2014-09-11 00:00:00 -3 2 2014-09-11 00:00:00 -DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -DROP TABLE IF EXISTS items; -CREATE TABLE items ( -id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, -score INT, -created_at DATETIME, -INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; -Table Create Table -items CREATE TABLE `items` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `score` int(11) DEFAULT NULL, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `score` (`score`,`created_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); -SELECT * -FROM items -WHERE score = 2 AND created_at > "2014-09-11 00:00:00" - ORDER BY created_at DESC; -id score created_at -4 2 2014-09-12 00:00:00 -DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -DROP TABLE IF EXISTS items; -CREATE TABLE items ( -id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, -score INT, -created_at DATETIME, -INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; -Table Create Table -items CREATE TABLE `items` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `score` int(11) DEFAULT NULL, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `score` (`score`,`created_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); -SELECT * -FROM items -WHERE score = 2 AND created_at <= "2014-09-12 00:00:00" - ORDER BY created_at DESC; -id score created_at -4 2 2014-09-12 00:00:00 -2 2 2014-09-11 00:00:00 -3 2 2014-09-11 00:00:00 -DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -DROP TABLE IF EXISTS items; -CREATE TABLE items ( -id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, -score INT, -created_at DATETIME, -INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; -Table Create Table -items CREATE TABLE `items` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `score` int(11) DEFAULT NULL, - `created_at` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `score` (`score`,`created_at`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); -SELECT * -FROM items -WHERE score = 2 AND created_at < "2014-09-12 00:00:00" - ORDER BY created_at DESC; -id score created_at -2 2 2014-09-11 00:00:00 -3 2 2014-09-11 00:00:00 -DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score1` (`score1`,`created_at`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE score1 = 2 AND created_at >= "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +8 2 0 2015-07-02 00:00:00 +5 2 0 2015-07-01 12:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_greater_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,34 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score1` (`score1`,`created_at`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE score1 = 2 AND created_at > "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +8 2 0 2015-07-02 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score1` (`score1`,`created_at`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE score1 = 2 AND created_at <= "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +5 2 0 2015-07-01 12:00:00 +2 2 0 2015-07-01 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_have_prefix_less_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,34 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `score1` (`score1`,`created_at`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE score1 = 2 AND created_at < "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +2 2 0 2015-07-01 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,30 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `created_at` (`created_at`,`score1`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE created_at >= "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +4 2 0 2015-07-02 00:00:00 +3 2 0 2015-07-01 12:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_greater_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,29 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `created_at` (`created_at`,`score1`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE created_at > "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +4 2 0 2015-07-02 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,31 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `created_at` (`created_at`,`score1`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE created_at <= "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +3 2 0 2015-07-01 12:00:00 +2 2 0 2015-07-01 00:00:00 +1 1 0 2015-07-01 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_partially_used_no_prefix_less_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,30 @@ +DROP TABLE IF EXISTS items; +CREATE TABLE items ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT, +score2 INT, +created_at DATETIME, +INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; +Table Create Table +items CREATE TABLE `items` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `score1` int(11) DEFAULT NULL, + `score2` int(11) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `created_at` (`created_at`,`score1`,`score2`) +) ENGINE=Mroonga DEFAULT CHARSET=utf8 +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +SELECT * +FROM items +WHERE created_at < "2015-07-01 12:00:00" + ORDER BY created_at DESC; +id score1 score2 created_at +2 2 0 2015-07-01 00:00:00 +1 1 0 2015-07-01 00:00:00 +DROP TABLE items; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_max.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_max.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_max.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_max.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +DROP TABLE IF EXISTS listing; +CREATE TABLE scores ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT NOT NULL, +score2 INT NOT NULL, +INDEX (score1, score2) +) DEFAULT CHARSET=UTF8; +INSERT INTO scores (score1, score2) VALUES(1, 1); +INSERT INTO scores (score1, score2) VALUES(1, 2); +INSERT INTO scores (score1, score2) VALUES(2, 3); +INSERT INTO scores (score1, score2) VALUES(2, 2); +INSERT INTO scores (score1, score2) VALUES(2, 1); +INSERT INTO scores (score1, score2) VALUES(2, 0); +INSERT INTO scores (score1, score2) VALUES(2, -1); +INSERT INTO scores (score1, score2) VALUES(2, -2); +INSERT INTO scores (score1, score2) VALUES(2, -3); +SELECT MAX(score2) FROM scores WHERE score1 = 2; +MAX(score2) +3 +DROP TABLE scores; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_min.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_min.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_min.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_min.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +DROP TABLE IF EXISTS listing; +CREATE TABLE scores ( +id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, +score1 INT NOT NULL, +score2 INT NOT NULL, +INDEX (score1, score2) +) DEFAULT CHARSET=UTF8; +INSERT INTO scores (score1, score2) VALUES(1, 1); +INSERT INTO scores (score1, score2) VALUES(1, 2); +INSERT INTO scores (score1, score2) VALUES(2, 3); +INSERT INTO scores (score1, score2) VALUES(2, 2); +INSERT INTO scores (score1, score2) VALUES(2, 1); +INSERT INTO scores (score1, score2) VALUES(2, 0); +INSERT INTO scores (score1, score2) VALUES(2, -1); +INSERT INTO scores (score1, score2) VALUES(2, -2); +INSERT INTO scores (score1, score2) VALUES(2, -3); +SELECT MIN(score2) FROM scores WHERE score1 = 2; +MIN(score2) +-3 +DROP TABLE scores; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,12 +5,12 @@ end DATE, UNIQUE KEY range_key(start, end) ); -INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (1, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (2, "1000-01-02", "9999-12-31"); INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01"); +INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-02"); SELECT * FROM ranges FORCE INDEX(range_key) -WHERE start = "1000-01-01" AND end = "9999-12-31"; +WHERE start = "1000-01-02" AND end = "9999-12-31"; id start end -2 1000-01-01 9999-12-31 +2 1000-01-02 9999-12-31 DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,16 +5,16 @@ end DATE, UNIQUE KEY range_key(start, end) ); -INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (1, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (2, "1000-01-02", "9999-12-31"); INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01"); +INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-02"); SELECT start, end FROM ranges FORCE INDEX(range_key) ORDER BY start, end; start end -1000-01-01 2012-10-05 -1000-01-01 9999-12-31 +1000-01-02 2012-10-05 +1000-01-02 9999-12-31 2012-10-25 9999-12-31 -9999-12-31 1000-01-01 +9999-12-31 1000-01-02 DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,14 +6,14 @@ UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01"); -INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (2, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-02"); +INSERT INTO ranges VALUES (4, "1000-01-02", "9999-12-31"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start, end; id start end -2 1000-01-01 2012-10-05 -4 1000-01-01 9999-12-31 +2 1000-01-02 2012-10-05 +4 1000-01-02 9999-12-31 1 2012-10-25 9999-12-31 -3 9999-12-31 1000-01-01 +3 9999-12-31 1000-01-02 DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,14 +6,14 @@ UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01"); -INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (2, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-02"); +INSERT INTO ranges VALUES (4, "1000-01-02", "9999-12-31"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start DESC, end DESC; id start end -3 9999-12-31 1000-01-01 +3 9999-12-31 1000-01-02 1 2012-10-25 9999-12-31 -4 1000-01-01 9999-12-31 -2 1000-01-01 2012-10-05 +4 1000-01-02 9999-12-31 +2 1000-01-02 2012-10-05 DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,16 +5,16 @@ end datetime, UNIQUE KEY range_key(start, end) ); -INSERT INTO ranges VALUES (1, "1000-01-01 00:00:00", "2012-10-05 16:18:29"); -INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "9999-12-31 23:59:59"); +INSERT INTO ranges VALUES (1, "1000-01-02 00:00:00", "2012-10-05 16:18:29"); +INSERT INTO ranges VALUES (2, "1000-01-02 00:00:00", "9999-12-31 23:59:59"); INSERT INTO ranges VALUES (3, "2012-10-25 16:18:29", "9999-12-31 23:59:59"); -INSERT INTO ranges VALUES (4, "9999-12-31 23:59:59", "1000-01-01 00:00:00"); +INSERT INTO ranges VALUES (4, "9999-12-31 23:59:59", "1000-01-02 00:00:00"); SELECT start, end FROM ranges FORCE INDEX(range_key) ORDER BY start, end; start end -1000-01-01 00:00:00 2012-10-05 16:18:29 -1000-01-01 00:00:00 9999-12-31 23:59:59 +1000-01-02 00:00:00 2012-10-05 16:18:29 +1000-01-02 00:00:00 9999-12-31 23:59:59 2012-10-25 16:18:29 9999-12-31 23:59:59 -9999-12-31 23:59:59 1000-01-01 00:00:00 +9999-12-31 23:59:59 1000-01-02 00:00:00 DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,14 +6,14 @@ UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59"); -INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29"); -INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00"); -INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59"); +INSERT INTO ranges VALUES (2, "1000-01-02 00:00:00", "2012-10-05 16:18:29"); +INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-02 00:00:00"); +INSERT INTO ranges VALUES (4, "1000-01-02 00:00:00", "9999-12-31 23:59:59"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start, end; id start end -2 1000-01-01 00:00:00 2012-10-05 16:18:29 -4 1000-01-01 00:00:00 9999-12-31 23:59:59 +2 1000-01-02 00:00:00 2012-10-05 16:18:29 +4 1000-01-02 00:00:00 9999-12-31 23:59:59 1 2012-10-25 16:18:29 9999-12-31 23:59:59 -3 9999-12-31 23:59:59 1000-01-01 00:00:00 +3 9999-12-31 23:59:59 1000-01-02 00:00:00 DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,14 +6,14 @@ UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59"); -INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29"); -INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00"); -INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59"); +INSERT INTO ranges VALUES (2, "1000-01-02 00:00:00", "2012-10-05 16:18:29"); +INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-02 00:00:00"); +INSERT INTO ranges VALUES (4, "1000-01-02 00:00:00", "9999-12-31 23:59:59"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start DESC, end DESC; id start end -3 9999-12-31 23:59:59 1000-01-01 00:00:00 +3 9999-12-31 23:59:59 1000-01-02 00:00:00 1 2012-10-25 16:18:29 9999-12-31 23:59:59 -4 1000-01-01 00:00:00 9999-12-31 23:59:59 -2 1000-01-01 00:00:00 2012-10-05 16:18:29 +4 1000-01-02 00:00:00 9999-12-31 23:59:59 +2 1000-01-02 00:00:00 2012-10-05 16:18:29 DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,8 +1,8 @@ DROP TABLE IF EXISTS ranges; CREATE TABLE ranges ( id int PRIMARY KEY, -start timestamp, -end timestamp, +start timestamp DEFAULT '2016-04-21 00:00:00', +end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "1970-01-01 12:00:00", "2012-10-05 16:18:29"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,8 +1,8 @@ DROP TABLE IF EXISTS ranges; CREATE TABLE ranges ( id int PRIMARY KEY, -start timestamp, -end timestamp, +start timestamp DEFAULT '2016-04-21 00:00:00', +end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "2038-01-18 15:14:07"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,8 +1,8 @@ DROP TABLE IF EXISTS ranges; CREATE TABLE ranges ( id int PRIMARY KEY, -start timestamp, -end timestamp, +start timestamp DEFAULT '2016-04-21 00:00:00', +end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "2038-01-18 15:14:07"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,8 +1,8 @@ DROP TABLE IF EXISTS ranges; CREATE TABLE ranges ( id int PRIMARY KEY, -start timestamp, -end timestamp, +start timestamp DEFAULT '2016-04-21 00:00:00', +end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ day DATE PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `day` date NOT NULL, - `title` text, - PRIMARY KEY (`day`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (day, title) VALUES ("2012-01-29", "clear day"); INSERT INTO diaries (day, title) VALUES ("2012-01-30", "rainy day"); INSERT INTO diaries (day, title) VALUES ("2012-01-31", "cloudy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ day DATETIME(6) PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `day` datetime(6) NOT NULL, - `title` text, - PRIMARY KEY (`day`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (day, title) VALUES ("2012-01-29 21:51:01.111111", "clear day"); INSERT INTO diaries (day, title) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ day DATETIME PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `day` datetime NOT NULL, - `title` text, - PRIMARY KEY (`day`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (day, title) VALUES ("2012-01-29 21:51:01", "clear day"); INSERT INTO diaries (day, title) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ version DECIMAL(6, 3) PRIMARY KEY, message TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE releases; -Table Create Table -releases CREATE TABLE `releases` ( - `version` decimal(6,3) NOT NULL, - `message` text, - PRIMARY KEY (`version`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO releases (version, message) VALUES (10.000, "10th release!"); INSERT INTO releases (version, message) VALUES (10.001, "minor fix."); INSERT INTO releases (version, message) VALUES (999.999, "the last release!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ version DECIMAL PRIMARY KEY, message TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE releases; -Table Create Table -releases CREATE TABLE `releases` ( - `version` decimal(10,0) NOT NULL, - `message` text, - PRIMARY KEY (`version`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO releases (version, message) VALUES (1, "the first release!!!"); INSERT INTO releases (version, message) VALUES (10, "10th release!"); INSERT INTO releases (version, message) VALUES (999, "the last release!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ time TIMESTAMP(6) PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), - `title` text, - PRIMARY KEY (`time`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (time, title) VALUES ("2012-01-29 21:51:01.111111", "clear day"); INSERT INTO diaries (time, title) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ time TIMESTAMP PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `title` text, - PRIMARY KEY (`time`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (time, title) VALUES ("2012-01-29 21:51:01", "clear day"); INSERT INTO diaries (time, title) VALUES ("2012-01-30 01:23:45", "rainy day"); INSERT INTO diaries (time, title) VALUES ("2012-01-31 08:32:10", "cloudy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ time TIME(6) PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; -Table Create Table -running_records CREATE TABLE `running_records` ( - `time` time(6) NOT NULL, - `title` text, - PRIMARY KEY (`time`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO running_records (time, title) VALUES ("01:00:00.000001", "normal condition"); INSERT INTO running_records (time, title) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ time TIME PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; -Table Create Table -running_records CREATE TABLE `running_records` ( - `time` time NOT NULL, - `title` text, - PRIMARY KEY (`time`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO running_records (time, title) VALUES ("01:00:00", "normal condition"); INSERT INTO running_records (time, title) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ party_year YEAR PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE aniversary_memos; -Table Create Table -aniversary_memos CREATE TABLE `aniversary_memos` ( - `party_year` year(4) NOT NULL, - `title` text, - PRIMARY KEY (`party_year`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO aniversary_memos (party_year, title) VALUES ("11", "We need a big cake!"); INSERT INTO aniversary_memos (party_year, title) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_all.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_all.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_all.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_all.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,14 @@ +DROP TABLE IF EXISTS ids; +CREATE TABLE ids ( +id int, +UNIQUE KEY (id) +); +INSERT INTO ids VALUES (1); +DELETE FROM ids; +INSERT INTO ids VALUES (1); +SELECT * FROM ids; +id +1 +INSERT INTO ids VALUES (1); +ERROR 23000: Duplicate entry '1' for key 'id' +DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,15 +6,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ day DATE PRIMARY KEY, title TEXT ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `day` date NOT NULL, - `title` text, - PRIMARY KEY (`day`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (day, title) VALUES ("2012-02-14", "clear day") ON DUPLICATE KEY UPDATE title = "clear day (duplicated)"; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,15 +5,6 @@ title TEXT, UNIQUE KEY day (day) ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `day` date DEFAULT NULL, - `title` text, - PRIMARY KEY (`id`), - UNIQUE KEY `day` (`day`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (day, title) VALUES ("2012-02-14", "clear day1") ON DUPLICATE KEY UPDATE title = "clear day1 (duplicated)"; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result 2017-12-21 15:48:51.000000000 +0000 @@ -65,18 +65,6 @@ c1 2010-03-26 11:22:33 drop table t1; -create table t1 (c1 int, _id int); -set sql_mode=""; -insert into t1 (c1,_id) values (1,1); -Warnings: -Warning 1265 Data truncated for column '_id' at row 1 -set sql_mode="strict_all_tables"; -insert into t1 (c1,_id) values (4,1); -ERROR 01000: Data truncated for column '_id' at row 1 -select * from t1; -c1 _id -1 1 -drop table t1; create table t1 (c1 int primary key, c2 int); insert into t1 values(1,100); select * from t1; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_virtual_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_virtual_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/insert_virtual_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/insert_virtual_column.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (c1 int, _id int); +SET sql_mode=""; +INSERT INTO t1 (c1,_id) VALUES (1,1); +Warnings: +Warning 1265 Data truncated for column '_id' at row 1 +SET sql_mode="STRICT_ALL_TABLES"; +INSERT INTO t1 (c1,_id) VALUES (4,1); +ERROR 01000: Data truncated for column '_id' at row 1 +SELECT * FROM t1; +c1 _id +1 1 +DROP TABLE t1; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_disabled.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_disabled.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_disabled.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_disabled.result 2017-12-21 15:48:51.000000000 +0000 @@ -7,14 +7,6 @@ content TEXT, FULLTEXT INDEX(content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_and.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_and.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_and.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_and.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,20 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT, +age INT, +INDEX (id, age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id, age) VALUES (1, 28); +INSERT INTO users (id, age) VALUES (1, 28); +INSERT INTO users (id, age) VALUES (1, 29); +INSERT INTO users (id, age) VALUES (2, 29); +INSERT INTO users (id, age) VALUES (2, 29); +INSERT INTO users (id, age) VALUES (3, 29); +SELECT COUNT(*) FROM users WHERE id = 2 AND age = 29; +COUNT(*) +2 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_between.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_between.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_between.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_between.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); +SELECT COUNT(*) FROM users WHERE age BETWEEN 28 AND 30; +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); +SELECT COUNT(*) FROM users WHERE age = 29; +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_boolean_mode.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_boolean_mode.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_boolean_mode.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_boolean_mode.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,19 @@ +DROP TABLE IF EXISTS memos; +FLUSH STATUS; +CREATE TABLE memos ( +content TEXT, +FULLTEXT INDEX (content) +) DEFAULT CHARSET=UTF8; +INSERT INTO memos (content) VALUES ('Groonga is good.'); +INSERT INTO memos (content) VALUES ('Groonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga is good.'); +INSERT INTO memos (content) VALUES ('Mroonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga uses Groonga.'); +SELECT COUNT(*) FROM memos +WHERE MATCH(content) AGAINST('+Groonga' IN BOOLEAN MODE); +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_natural_language_mode.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_natural_language_mode.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_natural_language_mode.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_full_text_search_in_natural_language_mode.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,19 @@ +DROP TABLE IF EXISTS memos; +FLUSH STATUS; +CREATE TABLE memos ( +content TEXT, +FULLTEXT INDEX (content) +) DEFAULT CHARSET=UTF8; +INSERT INTO memos (content) VALUES ('Groonga is good.'); +INSERT INTO memos (content) VALUES ('Groonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga is good.'); +INSERT INTO memos (content) VALUES ('Mroonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga uses Groonga.'); +SELECT COUNT(*) FROM memos +WHERE MATCH(content) AGAINST('Groonga'); +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); +SELECT COUNT(*) FROM users WHERE age >= 29; +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_greater.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); +SELECT COUNT(*) FROM users WHERE age > 29; +COUNT(*) +2 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); +SELECT COUNT(*) FROM users WHERE age <= 29; +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_less.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); +SELECT COUNT(*) FROM users WHERE age < 29; +COUNT(*) +2 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_not_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_not_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_not_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_index_not_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); +SELECT COUNT(*) FROM users WHERE age <> 29; +COUNT(*) +2 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 2 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_multiple_conditions.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_multiple_conditions.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_multiple_conditions.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_multiple_conditions.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT, +age INT, +INDEX (age) +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id, age) VALUES (1, 29); +INSERT INTO users (id, age) VALUES (2, 29); +INSERT INTO users (id, age) VALUES (3, 29); +SELECT COUNT(*) FROM users WHERE id = 3 AND age = 29; +COUNT(*) +1 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 0 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_between.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_between.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_between.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_between.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); +SELECT COUNT(*) FROM users WHERE id BETWEEN 2 AND 4; +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); +SELECT COUNT(*) FROM users WHERE id = 3; +COUNT(*) +1 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); +SELECT COUNT(*) FROM users WHERE id >= 3; +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_greater.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); +SELECT COUNT(*) FROM users WHERE id > 3; +COUNT(*) +2 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); +SELECT COUNT(*) FROM users WHERE id <= 3; +COUNT(*) +3 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 0 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_less.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); +SELECT COUNT(*) FROM users WHERE id < 3; +COUNT(*) +2 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 0 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_not_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_not_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_not_equal.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_primary_key_not_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS users; +FLUSH STATUS; +CREATE TABLE users ( +id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); +SELECT COUNT(*) FROM users WHERE id <> 3; +COUNT(*) +4 +SHOW STATUS LIKE 'mroonga_count_skip'; +Variable_name Value +Mroonga_count_skip 1 +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_TODO_SPLIT_ME.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_TODO_SPLIT_ME.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_TODO_SPLIT_ME.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_count_skip_TODO_SPLIT_ME.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -drop table if exists t1, t2, t3; -flush status; -create table t1 (c1 int primary key, c2 int, c3 text, key idx1(c2), fulltext index ft(c3)); -insert into t1 values(1,10,"aa ii uu ee oo"); -insert into t1 values(2,20,"ka ki ku ke ko"); -insert into t1 values(3,30,"sa si su se so"); -insert into t1 values(4,40,"ta ti tu te to"); -insert into t1 values(5,50,"aa ii uu ee oo"); -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 0 -select * from t1; -c1 c2 c3 -1 10 aa ii uu ee oo -2 20 ka ki ku ke ko -3 30 sa si su se so -4 40 ta ti tu te to -5 50 aa ii uu ee oo -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 0 -select count(*) from t1; -count(*) -5 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 0 -select * from t1 force index(primary) where c1 between 2 and 4; -c1 c2 c3 -2 20 ka ki ku ke ko -3 30 sa si su se so -4 40 ta ti tu te to -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 0 -select count(*) from t1 force index(primary) where c1 between 2 and 4; -count(*) -3 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 1 -select c1 from t1 force index(primary) where c1 < 3; -c1 -1 -2 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 1 -select count(c1) from t1 force index(primary) where c1 < 3; -count(c1) -2 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 1 -select 1 from t1 force index(primary) where c1 > 3; -1 -1 -1 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 1 -select count(1) from t1 force index(primary) where c1 > 3; -count(1) -2 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 2 -select * from t1 where match(c3) against("su"); -c1 c2 c3 -3 30 sa si su se so -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 2 -select count(*) from t1 where match(c3) against("su"); -count(*) -1 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 3 -select * from t1 where match(c3) against("+su" in boolean mode); -c1 c2 c3 -3 30 sa si su se so -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 3 -select count(*) from t1 where match(c3) against("+su" in boolean mode); -count(*) -1 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 4 -select * from t1 force index(idx1) where c2 between 20 and 40; -c1 c2 c3 -2 20 ka ki ku ke ko -3 30 sa si su se so -4 40 ta ti tu te to -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 4 -select count(*) from t1 force index(idx1) where c2 between 20 and 40; -count(*) -3 -show status like 'mroonga_count_skip'; -Variable_name Value -Mroonga_count_skip 5 -drop table t1; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_multiple_match_againsts.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_multiple_match_againsts.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_multiple_match_againsts.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_multiple_match_againsts.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +DROP TABLE IF EXISTS memos; +FLUSH STATUS; +SET NAMES UTF8; +CREATE TABLE memos ( +id INT UNSIGNED NOT NULL, +title VARCHAR(255), +content TEXT, +FULLTEXT INDEX(title), +FULLTEXT INDEX(content) +) DEFAULT CHARSET UTF8; +INSERT INTO memos VALUES(5, "title 1", "content a"); +INSERT INTO memos VALUES(12, "title 1", "content a"); +INSERT INTO memos VALUES(10, "title 1", "content a"); +INSERT INTO memos VALUES(4, "title 2", "content b"); +INSERT INTO memos VALUES(6, "title 2", "content b"); +INSERT INTO memos VALUES(1, "title 2", "content b"); +INSERT INTO memos VALUES(11, "title 1-a", "content a-1"); +INSERT INTO memos VALUES(3, "title 2-b", "content a-2"); +INSERT INTO memos VALUES(2, "title 2-c", "content a-3"); +INSERT INTO memos VALUES(8, "title 1-a", "content b-1"); +INSERT INTO memos VALUES(9, "title 2-b", "content b-2"); +INSERT INTO memos VALUES(7, "title 2-c", "content b-3"); +SELECT * FROM memos +WHERE MATCH(title) AGAINST("+1" IN BOOLEAN MODE) AND +MATCH(content) AGAINST("+a" IN BOOLEAN MODE) +ORDER BY id +LIMIT 1,3; +id title content +10 title 1 content a +11 title 1-a content a-1 +12 title 1 content a +SHOW STATUS LIKE 'mroonga_fast_order_limit'; +Variable_name Value +Mroonga_fast_order_limit 0 +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_cp932.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_cp932.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_cp932.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_cp932.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +DROP TABLE IF EXISTS memos; +FLUSH STATUS; +SET NAMES CP932; +CREATE TABLE memos ( +ʎq INT UNSIGNED, +e TEXT, +FULLTEXT INDEX(e), +KEY(ʎq) +) DEFAULT CHARSET CP932; +INSERT INTO memos VALUES(2, "͎RoB"); +INSERT INTO memos VALUES(3, "̓T{eB"); +INSERT INTO memos VALUES(1, "͓VC悭Ă悩B"); +SELECT * FROM memos +WHERE MATCH(e) AGAINST("" IN BOOLEAN MODE) +ORDER BY ʎq +LIMIT 1; +ʎq e +1 ͓VC悭Ă悩B +SHOW STATUS LIKE 'mroonga_fast_order_limit'; +Variable_name Value +Mroonga_fast_order_limit 1 +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `date` datetime DEFAULT NULL, - `content` text, - KEY `date` (`date`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `date` datetime DEFAULT NULL, - `content` text, - KEY `date` (`date`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `date` datetime DEFAULT NULL, - `content` text, - KEY `date` (`date`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "2011-11-11 12:23:34", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:34", "Tomorrow will be fine."); INSERT INTO diaries VALUES(3, "2011-11-11 12:23:34", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `date` datetime DEFAULT NULL, - `content` text, - KEY `date` (`date`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `date` datetime DEFAULT NULL, - `content` text, - KEY `date` (`date`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `date` datetime DEFAULT NULL, - `content` text, - KEY `date` (`date`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `date` datetime DEFAULT NULL, - `content` text, - KEY `date` (`date`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_name.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_name.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_name.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_name.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS memos; +FLUSH STATUS; +SET NAMES utf8; +CREATE TABLE memos ( +id int PRIMARY KEY, +tag ENUM('Groonga', 'Mroonga'), +content TEXT, +FULLTEXT INDEX(content), +KEY(tag), +KEY(id) +) DEFAULT CHARSET=utf8; +INSERT INTO memos VALUES(1, 'Groonga', 'Groonga is great!'); +INSERT INTO memos VALUES(2, 'Mroonga', 'Mroonga is great!'); +INSERT INTO memos VALUES(3, 'Mroonga', 'Mroonga is a MySQL storage engine.'); +INSERT INTO memos VALUES(4, 'Mroonga', 'Mroonga is based on Groonga.'); +SELECT * FROM memos +WHERE MATCH(content) AGAINST("+Groonga" IN BOOLEAN MODE) AND +tag = 'Mroonga' + ORDER BY id LIMIT 1; +id tag content +4 Mroonga Mroonga is based on Groonga. +SHOW STATUS LIKE 'mroonga_fast_order_limit'; +Variable_name Value +Mroonga_fast_order_limit 1 +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_enum_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS memos; +FLUSH STATUS; +SET NAMES utf8; +CREATE TABLE memos ( +id int PRIMARY KEY, +tag ENUM('Groonga', 'Mroonga'), +content TEXT, +FULLTEXT INDEX(content), +KEY(tag), +KEY(id) +) DEFAULT CHARSET=utf8; +INSERT INTO memos VALUES(1, 'Groonga', 'Groonga is great!'); +INSERT INTO memos VALUES(2, 'Mroonga', 'Mroonga is great!'); +INSERT INTO memos VALUES(3, 'Mroonga', 'Mroonga is a MySQL storage engine.'); +INSERT INTO memos VALUES(4, 'Mroonga', 'Mroonga is based on Groonga.'); +SELECT * FROM memos +WHERE MATCH(content) AGAINST("+Groonga" IN BOOLEAN MODE) AND +tag = 2 +ORDER BY id LIMIT 1; +id tag content +4 Mroonga Mroonga is based on Groonga. +SHOW STATUS LIKE 'mroonga_fast_order_limit'; +Variable_name Value +Mroonga_fast_order_limit 1 +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,19 +11,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result 2017-12-21 15:48:51.000000000 +0000 @@ -11,18 +11,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result 2017-12-21 15:48:51.000000000 +0000 @@ -13,20 +13,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `_id` int(11) DEFAULT NULL, - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(NULL, 1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(NULL, 2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(NULL, 3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(10) unsigned NOT NULL, - `writing_time` time DEFAULT NULL, - `content` text, - KEY `writing_time` (`writing_time`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(10) unsigned NOT NULL, - `writing_time` time DEFAULT NULL, - `content` text, - KEY `writing_time` (`writing_time`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(10) unsigned NOT NULL, - `writing_time` time DEFAULT NULL, - `content` text, - KEY `writing_time` (`writing_time`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO memos VALUES(1, "1:23:34", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:34", "Tomorrow will be fine."); INSERT INTO memos VALUES(3, "1:23:34", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(10) unsigned NOT NULL, - `writing_time` time DEFAULT NULL, - `content` text, - KEY `writing_time` (`writing_time`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" ); INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(10) unsigned NOT NULL, - `writing_time` time DEFAULT NULL, - `content` text, - KEY `writing_time` (`writing_time`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" ); INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(10) unsigned NOT NULL, - `writing_time` time DEFAULT NULL, - `content` text, - KEY `writing_time` (`writing_time`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,15 +8,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(10) unsigned NOT NULL, - `writing_time` time DEFAULT NULL, - `content` text, - KEY `writing_time` (`writing_time`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -13,20 +13,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `title` (`title`), - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -12,19 +12,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - KEY `month` (`month`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/repair_table_no_index_file.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/repair_table_no_index_file.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/repair_table_no_index_file.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/repair_table_no_index_file.result 2017-12-21 15:48:51.000000000 +0000 @@ -6,15 +6,6 @@ body TEXT, FULLTEXT INDEX body_index (body) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, body) VALUES ("survey", "will start Groonga!"); INSERT INTO diaries (title, body) VALUES ("Groonga (1)", "starting Groonga..."); INSERT INTO diaries (title, body) VALUES ("Groonga (2)", "started Groonga."); @@ -23,7 +14,7 @@ 2 Groonga (1) starting Groonga... FLUSH TABLES; SELECT * FROM diaries WHERE MATCH(body) AGAINST("+starting" IN BOOLEAN MODE); -ERROR HY000: syscall error 'repair_test.mrn.000010A.c' (No such file or directory) +ERROR HY000: system call error: No such file or directory: failed to open path: REPAIR TABLE diaries; Table Op Msg_type Msg_text repair_test.diaries repair status OK diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,14 +5,6 @@ content text, fulltext index (content) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries values(1, "今日からはじめました。"); insert into diaries values(2, "明日の富士山の天気について"); insert into diaries values(3, "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result 2017-12-21 15:48:51.000000000 +0000 @@ -5,14 +5,6 @@ content varchar(256), fulltext index (content) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `content` varchar(256) DEFAULT NULL, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries values(1, "今日からはじめました。"); insert into diaries values(2, "明日の富士山の天気について"); insert into diaries values(3, "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -8,8 +8,8 @@ INSERT INTO users VALUES ("Alice", 20); INSERT INTO users VALUES ("Bob", 20); INSERT INTO users VALUES ("Charry", 29); -SELECT *, COUNT(*) FROM users GROUP BY age; -name age COUNT(*) -Alice 20 2 -Charry 29 1 +SELECT age, COUNT(*) FROM users GROUP BY age; +age COUNT(*) +20 2 +29 1 DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result 2017-12-21 15:48:51.000000000 +0000 @@ -7,11 +7,8 @@ INSERT INTO users VALUES ("Alice", 20); INSERT INTO users VALUES ("Bob", 20); INSERT INTO users VALUES ("Charry", 29); -EXPLAIN SELECT *, COUNT(*) FROM users GROUP BY age; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE users ALL NULL NULL NULL NULL 3 Using temporary; Using filesort -SELECT *, COUNT(*) FROM users GROUP BY age; -name age COUNT(*) -Alice 20 2 -Charry 29 1 +SELECT age, COUNT(*) FROM users GROUP BY age; +age COUNT(*) +20 2 +29 1 DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result 2017-12-21 15:48:51.000000000 +0000 @@ -9,15 +9,6 @@ title TEXT, FULLTEXT INDEX (title) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `user_id` int(10) unsigned NOT NULL, - `title` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO users (name) VALUES ("alice"); INSERT INTO users (name) VALUES ("bob"); INSERT INTO users (name) VALUES ("carlos"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,13 +3,6 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TEMPORARY TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title) VALUES ("clear day"); INSERT INTO diaries (title) VALUES ("rainy day"); INSERT INTO diaries (title) VALUES ("cloudy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/truncate.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/truncate.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/truncate.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/truncate.result 2017-12-21 15:48:51.000000000 +0000 @@ -10,19 +10,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/update_binlog_row.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/update_binlog_row.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/update_binlog_row.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/update_binlog_row.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,16 @@ +DROP TABLE IF EXISTS memos; +SET SESSION binlog_format = 'ROW'; +CREATE TABLE memos ( +title varchar(20) PRIMARY KEY, +content varchar(140) NOT NULL +) COLLATE=utf8mb4_general_ci +DEFAULT CHARSET=utf8mb4; +INSERT INTO memos (title, content) VALUES ('Mroonga', 'Mroonga is great!'); +SELECT * FROM memos; +title content +Mroonga Mroonga is great! +UPDATE memos SET content = 'Mroonga is very great!' WHERE title = 'Mroonga'; +SELECT * FROM memos; +title content +Mroonga Mroonga is very great! +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result 2017-12-21 15:48:51.000000000 +0000 @@ -1,28 +1,29 @@ -drop table if exists t1, t2, t3; -create table t1 (c1 int, _id int); -insert into t1 values(1,null); -insert into t1 values(2,null); -insert into t1 values(3,null); -select * from t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (c1 int, _id int); +INSERT INTO t1 VALUES(1,null); +INSERT INTO t1 VALUES(2,null); +INSERT INTO t1 VALUES(3,null); +SELECT * FROM t1; c1 _id 1 1 2 2 3 3 -set sql_mode=""; -update t1 set _id = 10 where c1 = 1; +SET sql_mode=""; +UPDATE t1 SET _id = 10 WHERE c1 = 1; Warnings: Warning 1265 Data truncated for column '_id' at row 1 -select * from t1; +SELECT * FROM t1; c1 _id 1 1 2 2 3 3 -set sql_mode="strict_all_tables"; -update t1 set _id = 11 where c1 = 1; +SET sql_mode="STRICT_ALL_TABLES"; +UPDATE t1 SET _id = 11 WHERE c1 = 1; ERROR 01000: Data truncated for column '_id' at row 1 -select * from t1; +SELECT * FROM t1; c1 _id 1 1 2 2 3 3 -drop table t1; +DROP TABLE t1; +SET sql_mode=DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_new_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_new_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_new_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_new_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,6 @@ +SET @mroonga_default_tokenizer_backup = @@mroonga_default_tokenizer; +SET GLOBAL mroonga_default_tokenizer = "TokenBigramSplitAlpha"; +SHOW GLOBAL VARIABLES LIKE 'mroonga_default_tokenizer'; +Variable_name Value +mroonga_default_tokenizer TokenBigramSplitAlpha +SET GLOBAL mroonga_default_tokenizer = @mroonga_default_tokenizer_backup; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_same_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_same_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_same_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_tokenizer_same_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,4 @@ +SET GLOBAL mroonga_default_tokenizer = "TokenBigram"; +SHOW GLOBAL VARIABLES LIKE 'mroonga_default_tokenizer'; +Variable_name Value +mroonga_default_tokenizer TokenBigram diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries (body) values ("will start groonga!"); select * from diaries; id body diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries (body) values ("will start groonga!"); select * from diaries; id body diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,14 +4,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 insert into diaries (body) values ("will start groonga!"); set mroonga_dry_write=true; update diaries set body = "starting groonga..." where id = 1; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_enable_operations_recording_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_enable_operations_recording_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_enable_operations_recording_insert.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_enable_operations_recording_insert.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,32 @@ +DROP TABLE IF EXISTS diaries; +CREATE TABLE diaries ( +title TEXT +) DEFAULT CHARSET=utf8; +SELECT mroonga_command('truncate mroonga_operations'); +mroonga_command('truncate mroonga_operations') +true +INSERT INTO diaries VALUES("Unlogged: Research for Mroonga"); +SELECT mroonga_command('load --table mroonga_operations --values "[{}]"'); +mroonga_command('load --table mroonga_operations --values "[{}]"') +1 +SELECT mroonga_command('select mroonga_operations --output_columns _id'); +mroonga_command('select mroonga_operations --output_columns _id') +[[[1],[["_id","UInt32"]],[2]]] +SET GLOBAL mroonga_enable_operations_recording = false; +FLUSH TABLES; +SELECT mroonga_command('truncate mroonga_operations'); +mroonga_command('truncate mroonga_operations') +true +INSERT INTO diaries VALUES("Logged: Research for Mroonga"); +SELECT mroonga_command('load --table mroonga_operations --values "[{}]"'); +mroonga_command('load --table mroonga_operations --values "[{}]"') +1 +SELECT mroonga_command('select mroonga_operations --output_columns _id'); +mroonga_command('select mroonga_operations --output_columns _id') +[[[1],[["_id","UInt32"]],[1]]] +DROP TABLE diaries; +SELECT mroonga_command('truncate mroonga_operations'); +mroonga_command('truncate mroonga_operations') +true +SET GLOBAL mroonga_enable_operations_recording = default; +FLUSH TABLES; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result 2017-12-21 15:48:51.000000000 +0000 @@ -4,30 +4,21 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, -FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' +FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `tags` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 -INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); -INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE); +INSERT INTO diaries (title, tags) VALUES ("Hello Groonga!", "groonga install"); +INSERT INTO diaries (title, tags) VALUES ("Hello Mroonga!", "mroonga install"); +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+install" IN BOOLEAN MODE); id title tags -1 Hello groonga! groonga install -2 Hello mroonga! mroonga install -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); +1 Hello Groonga! groonga install +2 Hello Mroonga! mroonga install +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+gr" IN BOOLEAN MODE); id title tags SET GLOBAL mroonga_match_escalation_threshold = 0; -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+gr" IN BOOLEAN MODE); id title tags SET mroonga_match_escalation_threshold = 0; -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+gr" IN BOOLEAN MODE); id title tags -1 Hello groonga! groonga install +1 Hello Groonga! groonga install DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result 2017-12-21 15:48:51.000000000 +0000 @@ -3,17 +3,8 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, -FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' +FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `tags` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +DROP TABLE IF EXISTS ids; +CREATE TABLE ids ( +id INT PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=UTF8; +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +INSERT INTO ids VALUES (4); +INSERT INTO ids VALUES (5); +INSERT INTO ids VALUES (6); +INSERT INTO ids VALUES (7); +INSERT INTO ids VALUES (8); +INSERT INTO ids VALUES (9); +INSERT INTO ids VALUES (10); +SET GLOBAL mroonga_max_n_records_for_estimate = 1; +EXPLAIN SELECT * FROM ids WHERE id > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE ids NULL range PRIMARY PRIMARY 4 NULL 1 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`ids`.`id` AS `id` from `test`.`ids` where (`test`.`ids`.`id` > 5) +SET GLOBAL mroonga_max_n_records_for_estimate = DEFAULT; +DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS ids; +CREATE TABLE ids ( +id INT, +INDEX (id) +) DEFAULT CHARSET=UTF8; +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +DELETE FROM ids WHERE id < 2; +SET mroonga_max_n_records_for_estimate = 1; +EXPLAIN SELECT * FROM ids WHERE id > 0; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE ids NULL range id id 5 NULL 1 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`ids`.`id` AS `id` from `test`.`ids` where (`test`.`ids`.`id` > 0) +SET mroonga_max_n_records_for_estimate = DEFAULT; +DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +DROP TABLE IF EXISTS ids; +CREATE TABLE ids ( +id INT PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=UTF8; +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +INSERT INTO ids VALUES (4); +INSERT INTO ids VALUES (5); +INSERT INTO ids VALUES (6); +INSERT INTO ids VALUES (7); +INSERT INTO ids VALUES (8); +INSERT INTO ids VALUES (9); +INSERT INTO ids VALUES (10); +SET mroonga_max_n_records_for_estimate = 1; +EXPLAIN SELECT * FROM ids WHERE id > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE ids NULL range PRIMARY PRIMARY 4 NULL 1 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`ids`.`id` AS `id` from `test`.`ids` where (`test`.`ids`.`id` > 5) +SET mroonga_max_n_records_for_estimate = DEFAULT; +DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_not_found_in_limit.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_not_found_in_limit.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_not_found_in_limit.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_max_n_records_for_estimate_not_found_in_limit.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS ids; +CREATE TABLE ids ( +id INT, +INDEX (id) +) DEFAULT CHARSET=UTF8; +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +DELETE FROM ids WHERE id < 2; +SET mroonga_max_n_records_for_estimate = 1; +EXPLAIN SELECT * FROM ids WHERE id > 0; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE ids range id id 5 NULL 1 Using where; Using index +SET mroonga_max_n_records_for_estimate = DEFAULT; +DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_empty_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_empty_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_empty_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_empty_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; +SET GLOBAL mroonga_query_log_file = ""; +SHOW GLOBAL VARIABLES LIKE "mroonga_query_log_file"; +Variable_name Value +mroonga_query_log_file +log file is changed: -> +query log file is still disabled +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_null_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_null_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_null_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_disabled_null_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; +SET GLOBAL mroonga_query_log_file = NULL; +SHOW GLOBAL VARIABLES LIKE "mroonga_query_log_file"; +Variable_name Value +mroonga_query_log_file +log file is changed: -> +query log file is still disabled +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_empty_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_empty_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_empty_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_empty_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,10 @@ +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; +SET GLOBAL mroonga_query_log_file = ""; +SHOW GLOBAL VARIABLES LIKE "mroonga_query_log_file"; +Variable_name Value +mroonga_query_log_file +log file is changed: -> +query log file is disabled: +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_null_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_null_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_null_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_enabled_null_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,10 @@ +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; +SET GLOBAL mroonga_query_log_file = NULL; +SHOW GLOBAL VARIABLES LIKE "mroonga_query_log_file"; +Variable_name Value +mroonga_query_log_file +log file is changed: -> +query log file is disabled: +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_new_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_new_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_new_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_new_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,9 @@ +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; +SHOW GLOBAL VARIABLES LIKE "mroonga_query_log_file"; +Variable_name Value +mroonga_query_log_file groonga-query.log +log file is changed: -> +query log is enabled: +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_same_value.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_same_value.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_same_value.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/r/variable_query_log_file_same_value.result 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,10 @@ +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; +SHOW GLOBAL VARIABLES LIKE "mroonga_query_log_file"; +Variable_name Value +mroonga_query_log_file groonga-query.log +log file is changed: -> +query log file isn't changed because the requested path isn't different: +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/suite.pm mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/suite.pm --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/suite.pm 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/suite.pm 2017-12-21 15:48:51.000000000 +0000 @@ -5,7 +5,7 @@ return "No Mroonga engine" unless $ENV{HA_MROONGA_SO} or $::mysqld_variables{'mroonga'} eq "ON"; -sub is_default { not $::opt_embedded_server } +sub is_default { 1 } my $groonga_normalizer_mysql_dir=$::basedir . '/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql'; my $groonga_normalizer_mysql_install_dir=$::basedir . '/lib/groonga/plugins'; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,11 +23,11 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - body TEXT + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; -ALTER TABLE diaries ADD title TEXT AFTER id; +ALTER TABLE diaries ADD title VARCHAR(40) AFTER id; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,11 +23,11 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - body TEXT + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; -ALTER TABLE diaries ADD title TEXT FIRST; +ALTER TABLE diaries ADD title VARCHAR(40) FIRST; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_flags_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source include/not_embedded.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_groonga_type_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,10 +13,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_cp932.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_cp932.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES cp932; + +CREATE TABLE users ( + id int PRIMARY KEY +) DEFAULT CHARSET=cp932; +ALTER TABLE users + ADD COLUMN O text, + ADD FULLTEXT INDEX (O); + +INSERT INTO users VALUES (1, "܂"); +INSERT INTO users VALUES (2, "Ȃ"); +INSERT INTO users VALUES (3, ""); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_utf8.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_utf8.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_utf8.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multibyte_utf8.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES utf8; + +CREATE TABLE users ( + id int PRIMARY KEY +) DEFAULT CHARSET=utf8; +ALTER TABLE users + ADD COLUMN 名前 text, + ADD FULLTEXT INDEX (名前); + +INSERT INTO users VALUES (1, "やまだ"); +INSERT INTO users VALUES (2, "たなか"); +INSERT INTO users VALUES (3, "すずき"); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,7 +23,7 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT + title VARCHAR(40) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; @@ -31,7 +31,7 @@ SELECT * FROM diaries; ALTER TABLE diaries - ADD COLUMN body TEXT FIRST, + ADD COLUMN body VARCHAR(140) FIRST, ADD COLUMN published BOOLEAN AFTER id, ADD COLUMN created_at DATETIME; UPDATE diaries SET body = "will start groonga!"; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,14 +23,14 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT + title VARCHAR(40) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; INSERT INTO diaries (title) VALUES ("survey"); SELECT * FROM diaries; -ALTER TABLE diaries ADD COLUMN body TEXT; +ALTER TABLE diaries ADD COLUMN body VARCHAR(140); UPDATE diaries SET body = "will start groonga!"; SELECT * FROM diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_type_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_type_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_type_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_type_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_groonga_plugin_register.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_multiple_column_duplicated.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_multiple_column_duplicated.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_multiple_column_duplicated.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_multiple_column_duplicated.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,12 +23,12 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; -ALTER TABLE diaries CHANGE body description TEXT AFTER id; +ALTER TABLE diaries CHANGE body description VARCHAR(140) AFTER id; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,12 +23,12 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; -ALTER TABLE diaries CHANGE body description TEXT FIRST; +ALTER TABLE diaries CHANGE body description VARCHAR(140) FIRST; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,15 +23,15 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; ALTER TABLE diaries - CHANGE body description TEXT FIRST, - CHANGE title subject TEXT AFTER internal_id, - CHANGE id internal_id INT; + CHANGE body description VARCHAR(140) FIRST, + CHANGE title subject VARCHAR(40) AFTER internal_id, + CHANGE id internal_id INT AUTO_INCREMENT; SHOW CREATE TABLE diaries; INSERT INTO diaries (subject, description) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,12 +23,12 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; -ALTER TABLE diaries CHANGE body description TEXT; +ALTER TABLE diaries CHANGE body description VARCHAR(140); SHOW CREATE TABLE diaries; INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_decimal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_decimal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_decimal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_decimal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright(C) 2012 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + temperature DECIMAL(6, 3) +) ENGINE InnoDB DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; + +INSERT INTO diaries (temperature) VALUES (21.281); +SELECT * FROM diaries; + +ALTER TABLE diaries ENGINE = mroonga; +SELECT * FROM diaries; + +INSERT INTO diaries (temperature) VALUES (14.213); +INSERT INTO diaries (temperature) VALUES (17.821); +SELECT * FROM diaries; + +SHOW CREATE TABLE diaries; + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_fulltext_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_fulltext_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_fulltext_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine_fulltext_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,58 @@ +# Copyright(C) 2011 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + title TEXT, + body TEXT, + FULLTEXT INDEX title_index (title), + FULLTEXT INDEX body_index (body) +) ENGINE MyISAM DEFAULT CHARSET UTF8; +SELECT table_name, engine + FROM information_schema.tables + WHERE table_name = 'diaries'; + +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +SELECT * FROM diaries + WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND + MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); + +ALTER TABLE diaries ENGINE = mroonga; +SELECT table_name, engine + FROM information_schema.tables + WHERE table_name = 'diaries'; + +SELECT * FROM diaries + WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND + MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); + +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); + +SELECT * FROM diaries + WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND + MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -# Copyright(C) 2011 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -CREATE TABLE diaries ( - id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT, - FULLTEXT INDEX title_index (title), - FULLTEXT INDEX body_index (body) -) ENGINE MyISAM DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; - -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -SELECT * FROM diaries - WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND - MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); - -ALTER TABLE diaries ENGINE = mroonga; -SHOW CREATE TABLE diaries; - -SELECT * FROM diaries - WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND - MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); - -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); - -SELECT * FROM diaries - WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND - MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); - -DROP TABLE diaries; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_groonga_plugin_register.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,8 +23,8 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,8 +23,8 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -# Copyright(C) 2012 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/have_innodb.inc ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -CREATE TABLE diaries ( - id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - temperature DECIMAL(6, 3) -) ENGINE InnoDB DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; - -INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281); -SELECT * FROM diaries; - -ALTER TABLE diaries ENGINE = mroonga; -SELECT * FROM diaries; - -INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213); -INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821); -SELECT * FROM diaries; - -SHOW CREATE TABLE diaries; - -DROP TABLE diaries; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -31,9 +31,8 @@ INSERT INTO memos (content) values ("Starting Mroonga..."); ALTER TABLE memos ADD FULLTEXT INDEX content_index (content); -SHOW CREATE TABLE memos; -SELECT * FROM memos WHERE MATCH(content) AGAINST("groonga"); +SELECT * FROM memos WHERE MATCH(content) AGAINST("+groonga" IN BOOLEAN MODE); DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,15 +23,15 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); SELECT * FROM diaries; -ALTER TABLE diaries MODIFY body TEXT AFTER id; +ALTER TABLE diaries MODIFY body VARCHAR(140) AFTER id; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,15 +23,15 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga."); SELECT * FROM diaries; -ALTER TABLE diaries MODIFY body TEXT FIRST; +ALTER TABLE diaries MODIFY body VARCHAR(140) FIRST; SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,8 +23,8 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT + title VARCHAR(40), + body VARCHAR(140) ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ body TEXT, FULLTEXT INDEX (body) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("survey", "will start mroonga!"); @@ -44,8 +43,6 @@ SELECT * FROM diaries WHERE MATCH (body) AGAINST ("+groonga" IN BOOLEAN MODE); -SHOW CREATE TABLE diaries; - DROP TABLE diaries; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,9 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; +SELECT table_name, engine + FROM information_schema.tables + WHERE table_name = 'diaries'; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); SELECT * FROM diaries; @@ -42,7 +44,9 @@ WHERE MATCH(title) AGAINST("groonga") AND MATCH(body) AGAINST("starting"); -SHOW CREATE TABLE memos; +SELECT table_name, engine + FROM information_schema.tables + WHERE table_name = 'memos'; DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -25,7 +25,7 @@ CREATE TABLE shops ( id INT PRIMARY KEY AUTO_INCREMENT, - name TEXT, + name VARCHAR(40), location GEOMETRY NOT NULL ); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_log_bin.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/check_table_broken.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/check_table_broken.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/check_table_broken.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/check_table_broken.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/have_mroonga_helper.inc + +SET NAMES UTF8; + +CREATE DATABASE check_test; +USE check_test; + +CREATE TABLE diaries ( + title TEXT, + FULLTEXT INDEX (title) +); + +INSERT INTO diaries VALUES ('Hello'); + +--remove_file $MYSQLD_DATADIR/check_test.mrn.000010C + +FLUSH TABLES; + +CHECK TABLE diaries; + +REPAIR TABLE diaries; +DROP TABLE diaries; + +DROP DATABASE check_test; +USE test; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/check_table_not_broken.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/check_table_not_broken.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/check_table_not_broken.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/check_table_not_broken.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,38 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + title TEXT +); + +INSERT INTO diaries VALUES ('Hello'); + +CHECK TABLE diaries; + +SELECT * FROM diaries; + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_french.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_french.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_french.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_french.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_japanese.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_japanese.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_japanese.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_520_ci_japanese.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('2038-01-18 03:14:07', '2038-01-18 03:14:07'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('2012', '2012'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('2038-01-19 03:14:07', '2038-01-19 03:14:07'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,12 +13,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/skip_solaris10.inc ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -30,10 +28,9 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) - VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00'); + VALUES ('1000-01-02 00:00:00', '1000-01-02 00:00:00'); SELECT * FROM diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_strict_sql_mode_out_of_range.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_strict_sql_mode_out_of_range.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_strict_sql_mode_out_of_range.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_strict_sql_mode_out_of_range.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2012 Kentoku SHIBA +# Copyright(C) 2014 Kenji Maruyama +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_freebsd.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc +--source ../../include/mroonga/have_strict_sql_mode.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + title TEXT, + created_at DATETIME +) DEFAULT CHARSET UTF8; + +--error ER_TRUNCATED_WRONG_VALUE +INSERT INTO diaries (title, created_at) + VALUES ('2012', '2012'); + +SELECT * FROM diaries; + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_5_out_of_range.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_5_out_of_range.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_5_out_of_range.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_5_out_of_range.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2012 Kentoku SHIBA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_signed_64bit_time_t.inc +--source ../../include/mroonga/have_version_5_5.inc +--source ../../include/mroonga/have_mysql.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + title TEXT, + created_at DATETIME +) DEFAULT CHARSET UTF8; + +INSERT INTO diaries (title, created_at) + VALUES ('2012', '2012'); + +SELECT * FROM diaries; + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -# Copyright(C) 2012 Kentoku SHIBA -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_64bit.inc ---source ../../include/mroonga/have_version_55.inc ---source ../../include/mroonga/have_mysql.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -CREATE TABLE diaries ( - id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - created_at DATETIME -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; - -INSERT INTO diaries (title, created_at) - VALUES ('2012', '2012'); - -SELECT * FROM diaries; - -DROP TABLE diaries; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_6_or_later_out_of_range.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_6_or_later_out_of_range.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_6_or_later_out_of_range.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_5_6_or_later_out_of_range.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2012 Kentoku SHIBA +# Copyright(C) 2014 Kenji Maruyama +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_freebsd.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc +--source ../../include/mroonga/skip_strict_sql_mode.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + title TEXT, + created_at DATETIME +) DEFAULT CHARSET UTF8; + +INSERT INTO diaries (title, created_at) + VALUES ('2012', '2012'); + +SELECT * FROM diaries; + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -# Copyright(C) 2012 Kentoku SHIBA -# Copyright(C) 2014 Kenji Maruyama -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/have_64bit.inc ---source ../../include/mroonga/have_version_56_or_later.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -CREATE TABLE diaries ( - id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - created_at DATETIME -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; - -INSERT INTO diaries (title, created_at) - VALUES ('2012', '2012'); - -SELECT * FROM diaries; - -DROP TABLE diaries; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_fractional_seconds.inc --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ created_at DATETIME(6), KEY (created_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01.111111"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_fractional_seconds.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME(6) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01.111111"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_freebsd.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_date.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_date.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_date.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_date.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2015-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mariadb_10_2_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS timestamps; +--enable_warnings + +CREATE TABLE timestamps ( + id INT PRIMARY KEY AUTO_INCREMENT, + create_dt DATETIME +) DEFAULT CHARSET UTF8; + +--error ER_WARN_DATA_OUT_OF_RANGE +INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); + +SELECT * FROM timestamps; + +INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); +SELECT * FROM timestamps; + +DROP TABLE timestamps; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_month_day.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_month_day.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_month_day.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mariadb_10_2_or_later_zero_month_day.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2013 Kentoku SHIBA +# Copyright(C) 2016-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mariadb_10_2_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS timestamps; +--enable_warnings + +CREATE TABLE timestamps ( + id INT PRIMARY KEY AUTO_INCREMENT, + create_dt DATETIME +) DEFAULT CHARSET UTF8; + +--error ER_WARN_DATA_OUT_OF_RANGE +INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); +--error ER_WARN_DATA_OUT_OF_RANGE +INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); + +SELECT * FROM timestamps; + +DROP TABLE timestamps; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_date.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_date.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_date.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_date.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2015-2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS timestamps; +--enable_warnings + +CREATE TABLE timestamps ( + id INT PRIMARY KEY AUTO_INCREMENT, + create_dt DATETIME +) DEFAULT CHARSET UTF8; + +--error ER_TRUNCATED_WRONG_VALUE +INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); + +SELECT * FROM timestamps; + +INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); +SELECT * FROM timestamps; + +DROP TABLE timestamps; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_month_day.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_month_day.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_month_day.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_mysql_5_7_or_later_zero_month_day.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2013 Kentoku SHIBA +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS timestamps; +--enable_warnings + +CREATE TABLE timestamps ( + id INT PRIMARY KEY AUTO_INCREMENT, + create_dt DATETIME +) DEFAULT CHARSET UTF8; + +--error ER_TRUNCATED_WRONG_VALUE +INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); +--error ER_TRUNCATED_WRONG_VALUE +INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); + +SELECT * FROM timestamps; + +DROP TABLE timestamps; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ('NULL', NULL); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ created_at DATETIME, KEY (created_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ title TEXT, created_at DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29 21:51:01"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date_strict.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date_strict.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date_strict.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date_strict.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -# Copyright(C) 2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS timestamps; ---enable_warnings - -CREATE TABLE timestamps ( - id INT PRIMARY KEY AUTO_INCREMENT, - create_dt DATETIME -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE timestamps; - -SET sql_mode='STRICT_TRANS_TABLES'; ---error ER_WARN_DATA_OUT_OF_RANGE -INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); -SET sql_mode=default; - -SELECT * FROM timestamps; - -INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); -SELECT * FROM timestamps; - -DROP TABLE timestamps; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2013 Kentoku SHIBA +# Copyright(C) 2015-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,8 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source include/not_embedded.inc +--source ../../include/mroonga/skip_strict_sql_mode.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -24,14 +26,16 @@ id INT PRIMARY KEY AUTO_INCREMENT, create_dt DATETIME ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE timestamps; -INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); -INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); +SET sql_mode='STRICT_TRANS_TABLES'; +--error ER_WARN_DATA_OUT_OF_RANGE +INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00"); +SET sql_mode=default; SELECT * FROM timestamps; -SELECT * FROM timestamps WHERE create_dt = "2012-01-01 00:00:00"; +INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00"); +SELECT * FROM timestamps; DROP TABLE timestamps; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_month_day.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_month_day.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_month_day.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_month_day.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2013 Kentoku SHIBA +# Copyright(C) 2016-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_strict_sql_mode.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS timestamps; +--enable_warnings + +CREATE TABLE timestamps ( + id INT PRIMARY KEY AUTO_INCREMENT, + create_dt DATETIME +) DEFAULT CHARSET UTF8; + +INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00"); +INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00"); + +SELECT * FROM timestamps; + +SELECT * FROM timestamps WHERE create_dt = "2012-01-01 00:00:00"; + +DROP TABLE timestamps; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -22,7 +22,7 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, + title VARCHAR(40), created_at DATE, KEY (created_at) ) DEFAULT CHARSET UTF8; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -22,7 +22,7 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, + title VARCHAR(40), created_at DATE ) DEFAULT CHARSET UTF8; SHOW CREATE TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,5 @@ # Copyright(C) 2013 Kentoku SHIBA +# Copyright(C) 2016-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,8 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source ../../include/mroonga/skip_strict_sql_mode.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ temperature DECIMAL(6, 3), KEY (temperature) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ title TEXT, temperature DECIMAL(6, 3) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ temperature DECIMAL, KEY (temperature) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, temperature) VALUES ("clear day", 21); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ title TEXT, temperature DECIMAL ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, temperature) VALUES ("clear day", 21); INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_add_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_add_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_add_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_add_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); + +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED; +ALTER TABLE logs ADD FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"'; + +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_delete.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_delete.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +DELETE FROM logs WHERE id = 1; + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_drop_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_drop_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_drop_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_drop_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +ALTER TABLE logs DROP COLUMN message; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_insert.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_reindex.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_reindex.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_reindex.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_reindex.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +ALTER TABLE logs DISABLE KEYS; +ALTER TABLE logs ENABLE KEYS; + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_update.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_stored_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; + +SELECT * FROM logs WHERE MATCH(message) AGAINST("hut" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_add_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_add_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_add_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_add_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); + +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL; + +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_delete.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_delete.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +DELETE FROM logs WHERE id = 1; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_drop_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_drop_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_drop_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_drop_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +ALTER TABLE logs DROP COLUMN message; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_insert.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_add_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_add_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_add_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_add_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mariadb_10_2_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +--error 16509 +ALTER TABLE logs ADD INDEX (message); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mariadb_10_2_or_later_create_table_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,32 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mariadb_10_2_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +--error 16509 +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL, + FULLTEXT INDEX (message) +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mysql_5_7_or_later_add_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mysql_5_7_or_later_add_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mysql_5_7_or_later_add_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_mysql_5_7_or_later_add_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE logs ADD INDEX (message); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_update.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_generated_virtual_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_vector_other_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_vector_other_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_vector_other_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_vector_other_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_lz4.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_lz4.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_lz4.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_lz4.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/support_libgroonga_lz4.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zlib.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zlib.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zlib.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zlib.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/support_libgroonga_zlib.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zstd.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zstd.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zstd.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_support_zstd.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,37 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/support_libgroonga_zstd.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS entries; +--enable_warnings + +CREATE TABLE entries ( + id INT UNSIGNED PRIMARY KEY, + content TEXT COMMENT 'flags "COLUMN_SCALAR|COMPRESS_ZSTD"' +) DEFAULT CHARSET=utf8; + +INSERT INTO entries (id, content) VALUES (1, "I found Mroonga that is a MySQL storage engine to use Groonga!"); + +SELECT * FROM entries; + +DROP TABLE entries; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_lz4.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_lz4.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_lz4.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_lz4.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/unsupport_libgroonga_lz4.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zlib.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zlib.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zlib.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zlib.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/unsupport_libgroonga_zlib.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zstd.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zstd.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zstd.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_unsupport_zstd.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,37 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/unsupport_libgroonga_zstd.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS entries; +--enable_warnings + +CREATE TABLE entries ( + id INT UNSIGNED PRIMARY KEY, + content TEXT COMMENT 'flags "COLUMN_SCALAR|COMPRESS_ZSTD"' +) DEFAULT CHARSET=utf8; + +INSERT INTO entries (id, content) VALUES (1, "I found Mroonga that is a MySQL storage engine to use Groonga!"); + +SELECT * FROM entries; + +DROP TABLE entries; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2013 Kouhei Sutou +# Copyright(C) 2013-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc @@ -29,8 +29,9 @@ CREATE TABLE bugs ( id INT UNSIGNED PRIMARY KEY, - tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"' + tags VARCHAR(128) DEFAULT '' COMMENT 'flags "COLUMN_VECTOR", type "tags"' ) DEFAULT CHARSET=utf8; +SHOW CREATE TABLE bugs; INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL groonga"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_json_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_json_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_json_insert.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_json_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,37 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_0_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; + +INSERT INTO logs VALUES ('{"message": "start"}'); +INSERT INTO logs VALUES ('{"message": "restart"}'); +INSERT INTO logs VALUES ('{"message": "shutdown"}'); + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_cp932.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_cp932.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,51 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES cp932; + +CREATE TABLE users ( + O text, + FULLTEXT INDEX (O) +) DEFAULT CHARSET=cp932; + +INSERT INTO users VALUES ("܂"); +INSERT INTO users VALUES ("Ȃ"); +INSERT INTO users VALUES (""); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_utf8.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_utf8.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_utf8.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_multibyte_utf8.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,51 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES utf8; + +CREATE TABLE users ( + 名前 text, + FULLTEXT INDEX (名前) +) DEFAULT CHARSET=utf8; + +INSERT INTO users VALUES ("やまだ"); +INSERT INTO users VALUES ("たなか"); +INSERT INTO users VALUES ("すずき"); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_fractional_seconds.inc @@ -28,7 +28,6 @@ max TIME(6), KEY (average) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; INSERT INTO running_records (title, average, max) VALUES ("normal condition", "01:00:00.000001", "01:05:00.000001"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/skip_mariadb_55.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc --source ../../include/mroonga/have_fractional_seconds.inc --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,6 @@ updated_at TIMESTAMP(6), KEY (updated_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at, updated_at) VALUES ("clear day", diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -23,11 +23,10 @@ CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, - created_at TIMESTAMP, - updated_at TIMESTAMP, + created_at TIMESTAMP DEFAULT '2016-04-21 00:00:00', + updated_at TIMESTAMP DEFAULT '2016-04-21 00:00:00', KEY (updated_at) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, created_at, updated_at) VALUES ("clear day", "2012-01-29 21:51:01", "2012-01-29 21:51:02"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ max TIME, KEY (average) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; INSERT INTO running_records (title, average, max) VALUES ("normal condition", "01:00:00", "01:05:00"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ party_year YEAR, KEY (party_year) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE aniversary_memos; INSERT INTO aniversary_memos (title, party_year) VALUES ("We need a big cake!", "11"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ title TEXT, party_year YEAR ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE aniversary_memos; INSERT INTO aniversary_memos (title, party_year) VALUES ("We need a big cake!", "11"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/count_star.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/count_star.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/count_star.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/count_star.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,35 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS ids; +--enable_warnings + +CREATE TABLE ids ( + id int PRIMARY KEY +); + +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); + +SELECT COUNT(*) FROM ids; + +DROP TABLE ids; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_comment.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,37 @@ +# Copyright(C) 2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +CREATE TABLE bugs ( + id INT UNSIGNED PRIMARY KEY, + tags TEXT COMMENT 'flags "COLUMN_VECTOR"' +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command("dump --dump_plugins no"); + +DROP TABLE bugs; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_parameter.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_flags_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,38 @@ +# Copyright(C) 2013-2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mariadb.inc +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +CREATE TABLE bugs ( + id INT UNSIGNED PRIMARY KEY, + tags TEXT FLAGS='COLUMN_VECTOR' +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command("dump --dump_plugins no"); + +DROP TABLE bugs; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_comment.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2013-2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +CREATE TABLE tags ( + name VARCHAR(64) PRIMARY KEY +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +CREATE TABLE bugs ( + id INT UNSIGNED PRIMARY KEY, + tag VARCHAR(64) COMMENT 'groonga_type "tags"' +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command("dump --dump_plugins no"); + +DROP TABLE bugs; +DROP TABLE tags; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_nonexistent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_nonexistent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_nonexistent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_nonexistent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,29 @@ +# Copyright(C) 2013-2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS bugs; +--enable_warnings + +--error ER_CANT_CREATE_TABLE +CREATE TABLE bugs ( + id INT UNSIGNED PRIMARY KEY, + tag VARCHAR(64) COMMENT 'groonga_type "Nonexistent"' +) DEFAULT CHARSET=utf8mb4; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_parameter.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_groonga_type_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright(C) 2013-2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mariadb.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +CREATE TABLE tags ( + name VARCHAR(64) PRIMARY KEY +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +CREATE TABLE bugs ( + id INT UNSIGNED PRIMARY KEY, + tag VARCHAR(64) GROONGA_TYPE='tags' +) DEFAULT CHARSET=utf8; +SHOW CREATE TABLE bugs; + +SELECT mroonga_command("dump --dump_plugins no"); + +DROP TABLE bugs; +DROP TABLE tags; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_comment.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +CREATE TABLE tags ( + name VARCHAR(64) PRIMARY KEY +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +CREATE TABLE bugs ( + id INT UNSIGNED PRIMARY KEY, + tag VARCHAR(64) COMMENT 'type "tags"' +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command("dump --dump_plugins no"); + +DROP TABLE bugs; +DROP TABLE tags; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_nonexistent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_nonexistent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_nonexistent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_column_type_nonexistent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,29 @@ +# Copyright(C) 2013-2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS bugs; +--enable_warnings + +--error ER_CANT_CREATE_TABLE +CREATE TABLE bugs ( + id INT UNSIGNED PRIMARY KEY, + tag VARCHAR(64) COMMENT 'type "Nonexistent"' +) DEFAULT CHARSET=utf8mb4; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_comment.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - ---disable_query_log -DROP DATABASE test; -CREATE DATABASE test; -USE test; ---enable_query_log - -CREATE TABLE bugs ( - id INT UNSIGNED PRIMARY KEY, - tags TEXT COMMENT 'flags "COLUMN_VECTOR"' -) DEFAULT CHARSET=utf8; - -SELECT mroonga_command("dump --dump_plugins no"); - -DROP TABLE bugs; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_flags_parameter.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -# Copyright(C) 2013-2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mariadb.inc ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - ---disable_query_log -DROP DATABASE test; -CREATE DATABASE test; -USE test; ---enable_query_log - -CREATE TABLE bugs ( - id INT UNSIGNED PRIMARY KEY, - tags TEXT FLAGS='COLUMN_VECTOR' -) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE bugs; - -SELECT mroonga_command("dump --dump_plugins no"); - -DROP TABLE bugs; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_comment.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -# Copyright(C) 2013-2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - ---disable_query_log -DROP DATABASE test; -CREATE DATABASE test; -USE test; ---enable_query_log - -CREATE TABLE tags ( - name VARCHAR(64) PRIMARY KEY -) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; - -CREATE TABLE bugs ( - id INT UNSIGNED PRIMARY KEY, - tag VARCHAR(64) COMMENT 'groonga_type "tags"' -) DEFAULT CHARSET=utf8; - -SELECT mroonga_command("dump --dump_plugins no"); - -DROP TABLE bugs; -DROP TABLE tags; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_nonexistent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_nonexistent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_nonexistent.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_nonexistent.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -# Copyright(C) 2013-2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS bugs; ---enable_warnings - ---error ER_CANT_CREATE_TABLE -CREATE TABLE bugs ( - id INT UNSIGNED PRIMARY KEY, - tag VARCHAR(64) COMMENT 'groonga_type "Nonexistent"' -) DEFAULT CHARSET=utf8mb4; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_groonga_type_parameter.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -# Copyright(C) 2013-2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mariadb.inc ---source ../../include/mroonga/have_version_56_or_later.inc ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - ---disable_query_log -DROP DATABASE test; -CREATE DATABASE test; -USE test; ---enable_query_log - -CREATE TABLE tags ( - name VARCHAR(64) PRIMARY KEY -) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; - -CREATE TABLE bugs ( - id INT UNSIGNED PRIMARY KEY, - tag VARCHAR(64) GROONGA_TYPE='tags' -) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE bugs; - -SELECT mroonga_command("dump --dump_plugins no"); - -DROP TABLE bugs; -DROP TABLE tags; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_comment.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - ---disable_query_log -DROP DATABASE test; -CREATE DATABASE test; -USE test; ---enable_query_log - -CREATE TABLE tags ( - name VARCHAR(64) PRIMARY KEY -) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; - -CREATE TABLE bugs ( - id INT UNSIGNED PRIMARY KEY, - tag VARCHAR(64) COMMENT 'type "tags"' -) DEFAULT CHARSET=utf8; - -SELECT mroonga_command("dump --dump_plugins no"); - -DROP TABLE bugs; -DROP TABLE tags; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_nonexistent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_nonexistent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_nonexistent.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_field_type_nonexistent.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -# Copyright(C) 2013-2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS bugs; ---enable_warnings - ---error ER_CANT_CREATE_TABLE -CREATE TABLE bugs ( - id INT UNSIGNED PRIMARY KEY, - tag VARCHAR(64) COMMENT 'type "Nonexistent"' -) DEFAULT CHARSET=utf8mb4; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_medium.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_medium.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_medium.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_medium.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES utf8; + +CREATE TABLE memos ( + content VARCHAR(64) NOT NULL, + content_size INT NOT NULL, + KEY (content_size) COMMENT 'flags "INDEX_MEDIUM"' +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); + +DROP TABLE memos; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_small.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_small.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_small.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_index_small.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES utf8; + +CREATE TABLE memos ( + content VARCHAR(64) NOT NULL, + is_read BOOL NOT NULL, + KEY (is_read) COMMENT 'flags "INDEX_SMALL"' +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); + +DROP TABLE memos; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_none.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_none.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_none.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_none.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_flags_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_none.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_none.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_none.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_none.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_with_position_and_with_weight.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_with_position_and_with_weight.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_with_position_and_with_weight.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_index_flags_with_position_and_with_weight.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_fulltext_index_bin.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_fulltext_index_bin.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_fulltext_index_bin.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_fulltext_index_bin.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +SET NAMES utf8; + +CREATE TABLE diaries ( + day DATE PRIMARY KEY, + content VARCHAR(64) NOT NULL, + FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"' +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO diaries VALUES ("2013-04-23", "ブラックコーヒーを飲んだ。"); + +SELECT * FROM diaries + WHERE MATCH (content) AGAINST ("+ふらつく" IN BOOLEAN MODE); +SELECT * FROM diaries + WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE); + +DROP TABLE diaries; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_index_bin.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_index_bin.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_index_bin.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_index_bin.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,37 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +SET NAMES utf8; + +CREATE TABLE diaries ( + day DATE PRIMARY KEY, + content VARCHAR(64) NOT NULL, + INDEX (content) COMMENT 'normalizer "NormalizerAuto"' +) DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +SELECT mroonga_command("dump --dump_plugins no"); + +DROP TABLE diaries; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_none.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_none.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_none.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_none.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_no_utf8_charset_with_utf8_normalizer.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_no_utf8_charset_with_utf8_normalizer.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_no_utf8_charset_with_utf8_normalizer.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_no_utf8_charset_with_utf8_normalizer.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_normalizer_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,8 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -26,7 +27,6 @@ FULLTEXT INDEX body_index (body) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"' ) DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (body) VALUES ("will start Groonga!"); INSERT INTO diaries (body) VALUES ("starting Groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_default.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_default.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_default.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_default.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; insert into diaries (body) values ("will start Groonga!"); insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_off.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_off.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_off.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_parser_off.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,8 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -25,7 +26,6 @@ name TEXT, FULLTEXT INDEX (name) COMMENT 'parser "off"' ) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE variables; INSERT INTO variables (name) VALUES ("mroonga_database_path_prefix"); INSERT INTO variables (name) VALUES ("mroonga_default_parser"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_multiple_token_filters.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_multiple_token_filters.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_multiple_token_filters.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_multiple_token_filters.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_groonga_plugin_register.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_one_token_filter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_one_token_filter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_one_token_filter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_one_token_filter.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_groonga_plugin_register.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_token_filters_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_comment.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ FULLTEXT INDEX body_index (body) COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' ) DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (body) VALUES ("will start Groonga!"); INSERT INTO diaries (body) VALUES ("starting Groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_default.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_default.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_default.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_default.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; insert into diaries (body) values ("will start Groonga!"); insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_off.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_off.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_off.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_off.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ name TEXT, FULLTEXT INDEX (name) COMMENT 'tokenizer "off"' ) DEFAULT CHARSET=utf8; -SHOW CREATE TABLE variables; INSERT INTO variables (name) VALUES ("mroonga_database_path_prefix"); INSERT INTO variables (name) VALUES ("mroonga_default_tokenizer"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_index_tokenizer_parameter.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ body text, FULLTEXT INDEX body_index (body) TOKENIZER='TokenBigramSplitSymbolAlphaDigit' ) DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (body) VALUES ("will start Groonga!"); INSERT INTO diaries (body) VALUES ("starting Groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_default.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_default.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_default.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_default.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_hash.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_hash.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_hash.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_normalizer_hash.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_multiple_token_filters.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_multiple_token_filters.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_multiple_token_filters.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_multiple_token_filters.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_groonga_plugin_register.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_one_token_filter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_one_token_filter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_one_token_filter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_one_token_filter.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_groonga_plugin_register.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_stop_word.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_stop_word.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_stop_word.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_table_token_filters_stop_word.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_groonga_plugin_register.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -64,6 +64,8 @@ desc t1; drop table t1; create table t1 (c1 timestamp); +# For MariaDB 10.2.3 +-- replace_result current_timestamp() CURRENT_TIMESTAMP desc t1; drop table t1; create table t1 (c1 datetime); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_no_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_no_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_no_table.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_no_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,57 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP DATABASE IF EXISTS another; +--enable_warnings + +CREATE DATABASE another; +USE another; + +CREATE TABLE diaries ( + title TEXT, + FULLTEXT INDEX (title) +); + +DROP TABLE diaries; + + +USE test; + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + title TEXT, + FULLTEXT INDEX (title) +); + + +DROP DATABASE another; + +SELECT mroonga_command('object_exist mroonga_operations'); + +DROP TABLE diaries; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_add.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_add.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_add.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_add.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,47 @@ +# Copyright(C) 2013 Kentoku SHIBA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/skip_mariadb_10_1.inc +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; +--enable_warnings + +CREATE TABLE comments ( + comment int unsigned PRIMARY KEY, + content text NOT NULL +); + +CREATE TABLE articles ( + content text NOT NULL, + comment int unsigned +); + +ALTER TABLE articles ADD FOREIGN KEY (comment) REFERENCES comments (comment); + +SHOW CREATE TABLE articles; + +SELECT * FROM information_schema.referential_constraints; + +DROP TABLE articles; +DROP TABLE comments; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_drop.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_drop.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_drop.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_alter_drop.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,48 @@ +# Copyright(C) 2013 Kentoku SHIBA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/skip_mariadb_10_1.inc +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; +--enable_warnings + +CREATE TABLE comments ( + comment int unsigned PRIMARY KEY, + content text NOT NULL +); + +CREATE TABLE articles ( + content text NOT NULL, + comment int unsigned, + FOREIGN KEY (comment) REFERENCES comments (comment) +); + +ALTER TABLE articles DROP FOREIGN KEY comment; + +SHOW CREATE TABLE articles; + +SELECT * FROM information_schema.referential_constraints; + +DROP TABLE articles; +DROP TABLE comments; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,102 +12,35 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/skip_mysql_55.inc ---source ../../include/mroonga/skip_mariadb_55.inc +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/skip_mariadb_10_1.inc --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings -drop table if exists articles2; -drop table if exists articles; -drop table if exists comments2; -drop table if exists comments; +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; --enable_warnings -create table comments( - comment int unsigned, - content text not null, - primary key(comment) -); - -create table articles( - content text not null, - comment int unsigned, - FOREIGN KEY (comment) REFERENCES comments (comment) -); - -insert into comments (comment, content) values -(1, 'aaa bbb'),(2, 'ccc ddd'),(3, 'eee fff'); - -insert into articles (content, comment) values -('111aaa', 1),('222bbb', 2),('222ccc', 2); - -select comment, content from comments; - -select content, comment from articles; - -show create table comments; - -show create table articles; - -select * from information_schema.referential_constraints; - -rename table comments to comments2; -rename table articles to articles2; - -create table comments( - comment int unsigned, - content text not null, - primary key(comment) +CREATE TABLE comments ( + comment int unsigned PRIMARY KEY, + content text NOT NULL ); -create table articles( - content text not null, +CREATE TABLE articles ( + content text NOT NULL, comment int unsigned, FOREIGN KEY (comment) REFERENCES comments (comment) ); -insert into comments (comment, content) values -(1, 'ab'),(2, 'cd'),(3, 'ef'); - -insert into articles (content, comment) values -('1a', 1),('2b', 2),('2c', 2); - -select comment, content from comments; - -select content, comment from articles; - -select comment, content from comments2; - -select content, comment from articles2; - -show create table comments; - -show create table articles; - -show create table comments2; - -show create table articles2; - -select * from information_schema.referential_constraints; - -alter table articles drop foreign key comment; - -show create table articles; - -select content, comment from articles; - -alter table articles add FOREIGN KEY (comment) REFERENCES comments (comment); - -show create table articles; +SHOW CREATE TABLE articles; -select content, comment from articles; +SELECT * FROM information_schema.referential_constraints; -drop table articles2; -drop table articles; -drop table comments2; -drop table comments; +DROP TABLE articles; +DROP TABLE comments; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_existent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_existent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_existent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_existent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_warnings + +CREATE TABLE comments ( + id int unsigned PRIMARY KEY, + content varchar(140) NOT NULL +); + +CREATE TABLE entries ( + content varchar(140) NOT NULL, + comment_id int unsigned, + FOREIGN KEY (comment_id) REFERENCES comments (id) +); + +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +--error ER_ROW_IS_REFERENCED_2 +DELETE FROM comments WHERE id = 100; + +SELECT * FROM entries; +SELECT * FROM comments; + +SELECT mroonga_command('dump --dump_plugins no'); + +DROP TABLE entries; +DROP TABLE comments; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_nonexistent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_nonexistent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_nonexistent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_delete_nonexistent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_warnings + +CREATE TABLE comments ( + id int unsigned PRIMARY KEY, + content varchar(140) NOT NULL +); + +CREATE TABLE entries ( + content varchar(140) NOT NULL, + comment_id int unsigned, + FOREIGN KEY (comment_id) REFERENCES comments (id) +); + +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO comments (id, content) VALUES (200, 'Very good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +DELETE FROM comments WHERE id = 200; + +SELECT * FROM entries; +SELECT * FROM comments; + +SELECT mroonga_command('dump --dump_plugins no'); + +DROP TABLE entries; +DROP TABLE comments; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_existent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_existent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_existent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_existent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,51 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_warnings + +CREATE TABLE comments ( + id int unsigned PRIMARY KEY, + content varchar(140) NOT NULL +); + +CREATE TABLE entries ( + content varchar(140) NOT NULL, + comment_id int unsigned, + FOREIGN KEY (comment_id) REFERENCES comments (id) +); + +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); + +SELECT * FROM entries; +SELECT * FROM comments; + +SELECT mroonga_command('dump --dump_plugins no'); + +DROP TABLE entries; +DROP TABLE comments; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_nonexistent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_nonexistent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_nonexistent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_insert_nonexistent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,51 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_warnings + +CREATE TABLE comments ( + id int unsigned PRIMARY KEY, + content varchar(140) NOT NULL +); + +CREATE TABLE entries ( + content varchar(140) NOT NULL, + comment_id int unsigned, + FOREIGN KEY (comment_id) REFERENCES comments (id) +); + +--error ER_NO_REFERENCED_ROW_2 +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 1); + +SELECT * FROM entries; +SELECT * FROM comments; + +SELECT mroonga_command('dump --dump_plugins no'); + +DROP TABLE entries; +DROP TABLE comments; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_rename.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_rename.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_rename.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_rename.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,51 @@ +# Copyright(C) 2013 Kentoku SHIBA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/skip_mariadb_10_1.inc +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS articles; +DROP TABLE IF EXISTS comments; +DROP TABLE IF EXISTS articles2; +DROP TABLE IF EXISTS comments2; +--enable_warnings + +CREATE TABLE comments ( + comment int unsigned PRIMARY KEY, + content text NOT NULL +); + +CREATE TABLE articles ( + content text NOT NULL, + comment int unsigned, + FOREIGN KEY (comment) REFERENCES comments (comment) +); + +RENAME TABLE comments TO comments2; +RENAME TABLE articles TO articles2; + +SHOW CREATE TABLE articles2; + +SELECT * FROM information_schema.referential_constraints; + +DROP TABLE articles2; +DROP TABLE comments2; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_existent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_existent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_existent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_existent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_warnings + +CREATE TABLE comments ( + id int unsigned PRIMARY KEY, + content varchar(140) NOT NULL +); + +CREATE TABLE entries ( + content varchar(140) NOT NULL, + comment_id int unsigned, + FOREIGN KEY (comment_id) REFERENCES comments (id) +); + +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO comments (id, content) VALUES (200, 'Very good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +UPDATE entries SET comment_id = 200 WHERE content = 'Hello!'; + +SELECT * FROM entries; +SELECT * FROM comments; + +SELECT mroonga_command('dump --dump_plugins no'); + +DROP TABLE entries; +DROP TABLE comments; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_nonexistent.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_nonexistent.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_nonexistent.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_update_nonexistent.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_5.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_warnings + +CREATE TABLE comments ( + id int unsigned PRIMARY KEY, + content varchar(140) NOT NULL +); + +CREATE TABLE entries ( + content varchar(140) NOT NULL, + comment_id int unsigned, + FOREIGN KEY (comment_id) REFERENCES comments (id) +); + +INSERT INTO comments (id, content) VALUES (100, 'Good entry!'); +INSERT INTO entries (content, comment_id) VALUES ('Hello!', 100); +--error ER_NO_REFERENCED_ROW_2 +UPDATE entries SET comment_id = 200 WHERE content = 'Hello!'; + +SELECT * FROM entries; +SELECT * FROM comments; + +SELECT mroonga_command('dump --dump_plugins no'); + +DROP TABLE entries; +DROP TABLE comments; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,7 +20,7 @@ DROP TABLE IF EXISTS memos; --enable_warnings -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET NAMES UTF8; CREATE TABLE memos ( @@ -38,6 +38,6 @@ DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_all.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_all.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_all.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_all.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_astarisk.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_astarisk.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_astarisk.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_astarisk.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_operator.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_operator.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_operator.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_operator.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2016 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +SET NAMES utf8; +CREATE TABLE diaries ( + id INT PRIMARY KEY, + title VARCHAR(255), + content TEXT, + FULLTEXT INDEX (title, content) +) DEFAULT CHARSET=utf8; + +INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); +INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); +INSERT INTO diaries VALUES(3, "富士山", "今日も天気がよくてきれいに見える。"); + +SELECT *, MATCH(title, content) + AGAINST("*SS content @ '天気'" in BOOLEAN MODE) AS score + FROM diaries + WHERE MATCH(title, content) + AGAINST("*SS content @ '天気'" in BOOLEAN MODE); + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_selector.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_selector.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_selector.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_syntax_script_selector.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,50 @@ +# Copyright(C) 2016 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +DROP TABLE IF EXISTS readings; +--enable_warnings + +SET NAMES utf8; +CREATE TABLE readings ( + reading VARCHAR(255) PRIMARY KEY +) DEFAULT CHARSET=utf8 + COLLATE=utf8_bin + COMMENT='default_tokenizer "TokenDelimit"'; + +CREATE TABLE items ( + name VARCHAR(255) PRIMARY KEY, + readings TEXT COMMENT 'flags "COLUMN_VECTOR", type "readings"', + FULLTEXT INDEX items_index(readings) COMMENT 'table "readings"' +) DEFAULT CHARSET=utf8; + +INSERT INTO items VALUES("日本", "ニホン ニッポン"); +INSERT INTO items VALUES("ローマ字", "ローマジ"); +INSERT INTO items VALUES("漢字", "カンジ"); + +SELECT *, MATCH(readings) + AGAINST("*SS sub_filter(readings, 'prefix_rk_search(_key, \"niho\")')" in BOOLEAN MODE) AS score + FROM items + WHERE MATCH(readings) + AGAINST("*SS sub_filter(readings, 'prefix_rk_search(_key, \"niho\")')" in BOOLEAN MODE); + +DROP TABLE items; +DROP TABLE readings; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,7 +20,7 @@ DROP TABLE IF EXISTS memos; --enable_warnings -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = ERROR_AND_LOG; SET NAMES UTF8; @@ -40,6 +40,6 @@ DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,7 +20,7 @@ DROP TABLE IF EXISTS memos; --enable_warnings -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = ERROR; SET NAMES UTF8; @@ -40,6 +40,6 @@ DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,7 +20,7 @@ DROP TABLE IF EXISTS memos; --enable_warnings -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = IGNORE_AND_LOG; SET NAMES UTF8; @@ -39,6 +39,6 @@ DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,7 +20,7 @@ DROP TABLE IF EXISTS memos; --enable_warnings -SET GLOBAL mroonga_default_parser = TokenDelimit; +SET GLOBAL mroonga_default_tokenizer = TokenDelimit; SET mroonga_action_on_fulltext_query_error = "IGNORE"; SET NAMES UTF8; @@ -39,6 +39,6 @@ DROP TABLE memos; -SET GLOBAL mroonga_default_parser = TokenBigram; +SET GLOBAL mroonga_default_tokenizer = TokenBigram; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_cp932.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_eucjpms.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ content TEXT CHARSET utf8mb4 COLLATE utf8mb4_general_ci, FULLTEXT INDEX (content) ) DEFAULT CHARSET utf8mb4; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "Alphabet", "ABCDE"); INSERT INTO diaries VALUES(2, "Mathmatics", "𝐀𝐁𝐂𝐃𝐄 | U+1D400-U+1D405"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -31,7 +31,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/load_mroonga_functions.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ content text, fulltext index (title) ) default charset utf8; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -21,7 +21,6 @@ --enable_warnings create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)); -show create table t1; insert into t1 values (1, "hoge hoge"); insert into t1 values (2, "fuga fuga"); insert into t1 values (3, "moge moge"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ fulltext index title_index (title), fulltext index body_index (body) ) default charset utf8; -show create table diaries; insert into diaries (title, body) values ("survey", "will start groonga!"); insert into diaries (title, body) values ("groonga (1)", "starting groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES("Hello", "今日からはじめました。"); INSERT INTO diaries VALUES("天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_match.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_match.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_match.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_different_match.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_no_where.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_no_where.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_no_where.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_no_where.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_same_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_same_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_same_match_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_boolean_mode_same_match_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_match.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_match.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_match.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_different_match.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_no_where.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_no_where.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_no_where.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_no_where.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_same_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_same_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_same_match_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_natural_language_mode_same_match_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_10_0_no_such_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_10_0_no_such_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_10_0_no_such_key.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_10_0_no_such_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2011-2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_10_0.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + title TEXT, + body TEXT, + FULLTEXT INDEX title_index (title), + FULLTEXT INDEX body_index (body) +) DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; + +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); + +-- error ER_FT_MATCHING_KEY_NOT_FOUND +SELECT * FROM diaries FORCE INDEX(primary) + WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -# Copyright(C) 2011-2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_version_100.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -CREATE TABLE diaries ( - id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT, - FULLTEXT INDEX title_index (title), - FULLTEXT INDEX body_index (body) -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; - -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); - --- error ER_FT_MATCHING_KEY_NOT_FOUND -SELECT * FROM diaries FORCE INDEX(primary) - WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); - -DROP TABLE diaries; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_5_no_such_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_5_no_such_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_5_no_such_key.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_5_no_such_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2011-2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_5.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + title TEXT, + body TEXT, + FULLTEXT INDEX title_index (title), + FULLTEXT INDEX body_index (body) +) DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; + +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); + +SELECT * FROM diaries FORCE INDEX(primary) + WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -# Copyright(C) 2011-2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_version_55.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -CREATE TABLE diaries ( - id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT, - FULLTEXT INDEX title_index (title), - FULLTEXT INDEX body_index (body) -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; - -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); - -SELECT * FROM diaries FORCE INDEX(primary) - WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); - -DROP TABLE diaries; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_6_no_such_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_6_no_such_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_6_no_such_key.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_5_6_no_such_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2011-2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_version_5_6.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + id INT PRIMARY KEY AUTO_INCREMENT, + title TEXT, + body TEXT, + FULLTEXT INDEX title_index (title), + FULLTEXT INDEX body_index (body) +) DEFAULT CHARSET UTF8; +SHOW CREATE TABLE diaries; + +INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); +INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); +INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); + +-- error ER_FT_MATCHING_KEY_NOT_FOUND +SELECT * FROM diaries FORCE INDEX(primary) + WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); + +DROP TABLE diaries; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -# Copyright(C) 2011-2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_version_56.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -CREATE TABLE diaries ( - id INT PRIMARY KEY AUTO_INCREMENT, - title TEXT, - body TEXT, - FULLTEXT INDEX title_index (title), - FULLTEXT INDEX body_index (body) -) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; - -INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); -INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); -INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); - --- error ER_FT_MATCHING_KEY_NOT_FOUND -SELECT * FROM diaries FORCE INDEX(primary) - WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE); - -DROP TABLE diaries; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_command_auto-escape.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_command_auto-escape.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_command_auto-escape.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_command_auto-escape.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +SET NAMES UTF8; +CREATE TABLE diaries ( + title TEXT, + FULLTEXT KEY (title) +) DEFAULT CHARSET=utf8; + +INSERT INTO diaries VALUES('It is Groonga'); +INSERT INTO diaries VALUES('It is Mroonga'); + +SELECT mroonga_command('select', + 'table', 'diaries', + 'filter', 'title @ "Groonga"'); + +DROP TABLE diaries; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_command_special-database-name.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_command_special-database-name.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_command_special-database-name.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_command_special-database-name.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP DATABASE IF EXISTS `db-1`; +CREATE DATABASE `db-1`; +USE `db-1`; +--enable_warnings + +SET NAMES UTF8; +CREATE TABLE diaries ( + title TEXT, + FULLTEXT KEY (title) +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command('dump --dump_plugins no'); + +DROP TABLE diaries; + +--disable_query_log +USE test; +DROP DATABASE `db-1`; +--enable_query_log + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_all.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_all.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_all.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_all.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright(C) 2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +SELECT mroonga_escape('+-><~*()\"\\:') AS escaped_query; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_custom.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_custom.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_custom.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_custom.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright(C) 2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +SELECT mroonga_escape('+-><~*()\"\\:', '()<>~') AS escaped_query; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_join.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_join.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_join.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_join.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,54 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS users; +DROP TABLE IF EXISTS queries; +--enable_warnings + +CREATE TABLE users ( + id INT +); + +CREATE TABLE queries ( + user_id INT, + query TEXT +); + +INSERT INTO users VALUES (1); +INSERT INTO users VALUES (2); +INSERT INTO users VALUES (3); + +INSERT INTO queries VALUES (1, '(a)'); +INSERT INTO queries VALUES (2, '(b)'); +INSERT INTO queries VALUES (3, '(c)'); + +SELECT users.id, mroonga_escape(queries.query) AS escaped_query + FROM queries + LEFT JOIN users ON users.id = queries.user_id + ORDER BY users.id; + +DROP TABLE queries; +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_match_against.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_match_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,46 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +SET GLOBAL mroonga_default_parser = TokenDelimit; + +SET NAMES utf8mb4; +CREATE TABLE memos ( + id INT PRIMARY KEY, + content TEXT, + FULLTEXT INDEX (content) +) DEFAULT CHARSET=utf8mb4; + +INSERT INTO memos VALUES(1, "(Groonga) Installed!"); +INSERT INTO memos VALUES(2, "(Mroonga) Installed!"); +INSERT INTO memos VALUES(3, "(Groonga) Upgraded!"); + +SELECT * FROM memos + WHERE MATCH(content) AGAINST(mroonga_escape("(groonga)") IN BOOLEAN MODE); + +DROP TABLE memos; + +SET GLOBAL mroonga_default_parser = TokenBigram; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_named.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_named.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_named.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_named.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +SELECT mroonga_escape('+-><~*()\"\\:' AS query) AS escaped_query; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_nested.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_nested.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_nested.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_query_nested.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright(C) 2013 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +SET NAMES UTF8; +CREATE TABLE diaries( + title TEXT, + FULLTEXT KEY (title) +) DEFAULT CHARSET=utf8; + +INSERT INTO diaries VALUES("Start groonga"); +INSERT INTO diaries VALUES("Start mroonga"); +INSERT INTO diaries VALUES("Start groonga and Ruby"); + +SELECT mroonga_escape(mroonga_escape('*groonga*')); + +DROP TABLE diaries; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_decimal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_decimal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_decimal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_decimal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS data; +--enable_warnings + +CREATE TABLE data ( + value DECIMAL(5, 3) +); + +INSERT INTO data VALUES (2.9); + +SELECT mroonga_escape(value AS script) + FROM data; + +DROP TABLE data; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_integer.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_integer.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_integer.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_integer.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +SELECT mroonga_escape(-29 AS script) AS escaped_query; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_real.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_real.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_real.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_real.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS data; +--enable_warnings + +CREATE TABLE data ( + value REAL +); + +INSERT INTO data VALUES (2.9); + +SELECT mroonga_escape(value AS script) + FROM data; + +DROP TABLE data; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_string.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_string.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_string.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_script_string.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +SELECT mroonga_escape('a\"\\\'z' AS script) AS escaped_query; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - -SET NAMES UTF8; - -SELECT mroonga_escape('+-><~*()\"\\:') AS escaped_query; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - -SET NAMES UTF8; - -SELECT mroonga_escape('+-><~*()\"\\:', '()<>~') AS escaped_query; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -# Copyright(C) 2013 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/not_embedded.inc ---source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/load_mroonga_functions.inc - ---disable_warnings -DROP TABLE IF EXISTS diaries; ---enable_warnings - -SET NAMES UTF8; -CREATE TABLE diaries( - title TEXT, - FULLTEXT KEY (title) -) DEFAULT CHARSET=utf8; - -INSERT INTO diaries VALUES("Start groonga"); -INSERT INTO diaries VALUES("Start mroonga"); -INSERT INTO diaries VALUES("Start groonga and Ruby"); - -SELECT mroonga_escape(mroonga_escape('*groonga*')); - -DROP TABLE diaries; - ---source ../../include/mroonga/unload_mroonga_functions.inc ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_dynamic_keyword.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_dynamic_keyword.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_dynamic_keyword.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_dynamic_keyword.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright(C) 2015-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + + +--disable_warnings +--disable_query_log +DROP TABLE IF EXISTS keywords; +--enable_query_log +--enable_warnings + +CREATE TABLE keywords ( + keyword text +); + +INSERT INTO keywords VALUES ('Mroonga'); +INSERT INTO keywords VALUES ('Groonga'); + +SELECT mroonga_highlight_html('Mroonga is the Groonga based storage engine.', + keyword) AS highlighted + FROM keywords; + +--disable_query_log +DROP TABLE keywords; +--enable_query_log + + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_japanese.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_japanese.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_japanese.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_japanese.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2015-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES utf8; + +SELECT mroonga_highlight_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', + 'ロック', '更新') AS highlighted; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_multiple_keywords.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_multiple_keywords.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_multiple_keywords.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_multiple_keywords.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +# Copyright(C) 2015-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SELECT mroonga_highlight_html('Mroonga is the Groonga based storage engine.', + 'Mroonga', 'Groonga') AS highlighted; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_normalizer.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_normalizer.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_normalizer.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_normalizer.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SELECT mroonga_highlight_html('Mroonga is the Groonga based storage engine.', + 'mroonga') AS highlighted; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query_pragma.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query_pragma.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query_pragma.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query_pragma.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2017-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES utf8; + +SELECT mroonga_highlight_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', + '*D- +ロック +更新 ボトルネック' AS query) AS highlighted; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_query.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2016-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES utf8; + +SELECT mroonga_highlight_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', + 'ロック 更新 -ボトルネック' AS query) AS highlighted; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_record.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_record.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_record.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_highlight_html_record.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,55 @@ +# Copyright(C) 2015-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +--disable_query_log +DROP TABLE IF EXISTS memos; +--enable_query_log +--enable_warnings + +CREATE TABLE memos ( + content text +); + +INSERT INTO memos VALUES ('Mroonga is a MySQL storage engine based on Groonga, the full text search engine. + +In MySQL 5.1 or later, Pluggable Storage Engine interface is introduced, and we can use custom storage engines easily. So we implement Mroonga, so that we can use Groonga through MySQL. + +By using Mroonga, you can use Groonga with SQL.'); + +INSERT INTO memos VALUES ('Since Tritonn was the modified version of MySQL, we need to build it by ourselves or use binary files provided by Tritonn project, thus we cannot use the official binary files provided by MySQL. + +On the other hand, Mroonga is an independent program (shared library) using Pluggable Storage Engine interface, and we can dynamically load it on MySQL''s official binary. So we can use it more easily than Tritonn.'); + +INSERT INTO memos VALUES ('Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one is "wrapper mode", that adds full text search function on other storage engines like MyISAM or InnoDB. With this mode, you can use Groonga''s fast full text search with having the benefits of the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga''s read-lock free characteristic. And you might have the performance bottle neck in the storage engine in updating data.'); + +SELECT mroonga_highlight_html(content, 'Mroonga') AS highlighted + FROM memos; + +--disable_query_log +DROP TABLE memos; +--enable_query_log + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,7 +14,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_default.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_default.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_default.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_default.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2015 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SELECT mroonga_normalize('aBcAbC㍑'); + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_normalizer.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_normalizer.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_normalizer.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_normalizer.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,24 @@ +# Copyright(C) 2015 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SELECT mroonga_normalize('aBcAbC㍑', "NormalizerAuto"); + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_record.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_record.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_record.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_normalize_record.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright(C) 2015 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +--disable_query_log +DROP TABLE IF EXISTS memos; +--enable_query_log +--enable_warnings + +CREATE TABLE memos ( + content text +); + +INSERT INTO memos VALUES ('aBcAbC㍑'); + +SELECT mroonga_normalize(content) FROM memos; + +--disable_query_log +DROP TABLE memos; +--enable_query_log + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_multiple.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_multiple.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_multiple.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_multiple.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,46 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS synonyms; +--enable_warnings + +CREATE TABLE synonyms ( + term varchar(255), + synonym varchar(255), + INDEX (term) +); + +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); +INSERT INTO synonyms VALUES ('Mroonga', 'Mroonga'); +INSERT INTO synonyms VALUES ('Mroonga', 'Groonga MySQL'); + +SELECT mroonga_query_expand('synonyms', + 'term', + 'synonym', + 'Mroonga Rroonga PGroonga') AS query; + +DROP TABLE synonyms; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_no_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_no_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_no_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_no_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS synonyms; +--enable_warnings + +CREATE TABLE synonyms ( + term varchar(255), + synonym varchar(255) +); + +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); + +SELECT mroonga_query_expand('synonyms', + 'term', + 'synonym', + 'Mroonga Rroonga PGroonga') AS query; + +DROP TABLE synonyms; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_one.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_one.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_one.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_one.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS synonyms; +--enable_warnings + +CREATE TABLE synonyms ( + term varchar(255), + synonym varchar(255), + INDEX (term) +); + +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); + +SELECT mroonga_query_expand('synonyms', + 'term', + 'synonym', + 'Mroonga Rroonga PGroonga') AS query; + +DROP TABLE synonyms; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_pragma.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_pragma.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_pragma.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_query_expand_pragma.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES UTF8; + +--disable_warnings +DROP TABLE IF EXISTS synonyms; +--enable_warnings + +CREATE TABLE synonyms ( + term varchar(255), + synonym varchar(255), + INDEX (term) +); + +INSERT INTO synonyms VALUES ('D+', '[D+]'); +INSERT INTO synonyms VALUES ('Rroonga', 'Rroonga'); +INSERT INTO synonyms VALUES ('Rroonga', 'Groonga Ruby'); + +SELECT mroonga_query_expand('synonyms', + 'term', + 'synonym', + '*D+ Mroonga Rroonga PGroonga') AS query; + +DROP TABLE synonyms; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source include/have_cp932.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source include/have_eucjpms.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_dynamic_keyword.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_dynamic_keyword.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_dynamic_keyword.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_dynamic_keyword.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + + +--disable_warnings +--disable_query_log +DROP TABLE IF EXISTS keywords; +--enable_query_log +--enable_warnings + +CREATE TABLE keywords ( + keyword text +); + +INSERT INTO keywords VALUES ('Mroonga'); +INSERT INTO keywords VALUES ('Groonga'); + +SELECT mroonga_snippet_html('Mroonga is the Groonga based storage engine.', + keyword) as snippet + FROM keywords; + +--disable_query_log +DROP TABLE keywords; +--enable_query_log + + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_japanese.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_japanese.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_japanese.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_japanese.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES utf8; + +SELECT mroonga_snippet_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', + 'ロック', '更新') as snippet; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_keywords.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_keywords.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_keywords.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_keywords.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SELECT mroonga_snippet_html('Mroonga is the Groonga based storage engine.', + 'Mroonga', 'Groonga') as snippet; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_snippets.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_snippets.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_snippets.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_multiple_snippets.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,29 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SELECT mroonga_snippet_html('Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one is "wrapper mode", that adds full text search function on other storage engines like MyISAM or InnoDB. With this mode, you can use Groonga''s fast full text search with having the benefits of the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga''s read-lock free characteristic. And you might have the performance bottle neck in the storage engine in updating data.', + 'lock') as snippet; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query_pragma.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query_pragma.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query_pragma.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query_pragma.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES utf8; + +SELECT mroonga_snippet_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', + '*D- +ロック +更新 ボトルネック' AS query) as snippet; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_query.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +SET NAMES utf8; + +SELECT mroonga_snippet_html('Mroongaには2つの動作モードがあります。 + +1つが「ストレージモード」で、データストアも検索機能もすべてGroongaを使うモードです。これがデフォルトのモードです。上述の参照ロックフリーなGroongaの性能特性をフルに活かした高速なデータ更新・全文検索・位置情報検索が特長です。一方、トランザクションなどの機能は提供されません。 + +もう1つが「ラッパーモード」で、MyISAMやInnoDBといった他のストレージエンジンに 全文検索機能だけ を追加するモードです。このモードではトランザクションなど他のストレージエンジンがサポートしている機能に加えてGroongaの高速な全文検索機能を利用することができます。一方、Groongaの参照ロックフリーな特性は活かすことができません。また、更新処理は他のストレージエンジンがボトルネックになることが多いでしょう。', + 'ロック 更新 -ボトルネック' AS query) as snippet; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_record.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_record.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_record.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_html_record.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,55 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +--disable_query_log +DROP TABLE IF EXISTS memos; +--enable_query_log +--enable_warnings + +CREATE TABLE memos ( + content text +); + +INSERT INTO memos VALUES ('Mroonga is a MySQL storage engine based on Groonga, the full text search engine. + +In MySQL 5.1 or later, Pluggable Storage Engine interface is introduced, and we can use custom storage engines easily. So we implement Mroonga, so that we can use Groonga through MySQL. + +By using Mroonga, you can use Groonga with SQL.'); + +INSERT INTO memos VALUES ('Since Tritonn was the modified version of MySQL, we need to build it by ourselves or use binary files provided by Tritonn project, thus we cannot use the official binary files provided by MySQL. + +On the other hand, Mroonga is an independent program (shared library) using Pluggable Storage Engine interface, and we can dynamically load it on MySQL''s official binary. So we can use it more easily than Tritonn.'); + +INSERT INTO memos VALUES ('Mroonga has two running modes. + +One is "storage mode", that is the default mode, and we use Groonga for both storing data and searching. With this mode, you can have full benefits of Groonga described above, like fast data update, lock-free full text search and geolocation search. But it does not support transactions. + +Another one is "wrapper mode", that adds full text search function on other storage engines like MyISAM or InnoDB. With this mode, you can use Groonga''s fast full text search with having the benefits of the storage engine, ex. transaction in InnoDB. But you cannot have benefits from Groonga''s read-lock free characteristic. And you might have the performance bottle neck in the storage engine in updating data.'); + +SELECT mroonga_snippet_html(content, 'Mroonga') as snippet + FROM memos; + +--disable_query_log +DROP TABLE memos; +--enable_query_log + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null_57.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null_57.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null_57.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null_57.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -# Copyright(C) 2014 Kenji Maruyama -# Copyright(C) 2015 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source include/have_geometry.inc ---source ../../include/mroonga/have_version_57.inc ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS shops; ---enable_warnings - -CREATE TABLE shops ( - location GEOMETRY NOT NULL -); - -SET SESSION sql_mode = ''; -INSERT INTO shops VALUES (NULL), (NULL); -SET SESSION sql_mode = default; - -SELECT ST_AsText(location) FROM shops; - -DROP TABLE shops; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc ---source ../../include/mroonga/skip_mysql_57.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc +--source ../../include/mroonga/skip_strict_sql_mode.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2011-2012 Kouhei Sutou +# Copyright(C) 2011-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,10 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc +--source ../../include/mroonga/skip_mysql_5_7.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -28,7 +29,6 @@ location GEOMETRY NOT NULL, SPATIAL KEY location_index (location) ); -SHOW CREATE TABLE shops; INSERT INTO shops (name, location) VALUES ('nezu-no-taiyaki', @@ -143,6 +143,11 @@ SELECT id, name, ST_AsText(location) AS location_text FROM shops WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location) ORDER BY id; + +EXPLAIN +SELECT id, name, ST_AsText(location) AS location_text FROM shops + WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location) + ORDER BY id; DROP TABLE shops; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_bulk_insert_null.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_bulk_insert_null.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_bulk_insert_null.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_bulk_insert_null.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,37 @@ +# Copyright(C) 2014 Kenji Maruyama +# Copyright(C) 2015-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_geometry.inc +--source ../../include/mroonga/have_strict_sql_mode.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS shops; +--enable_warnings + +CREATE TABLE shops ( + location GEOMETRY NOT NULL +); + +--error ER_BAD_NULL_ERROR +INSERT INTO shops VALUES (NULL), (NULL); + +SELECT ST_AsText(location) FROM shops; + +DROP TABLE shops; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_contains.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_contains.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_contains.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/geometry_strict_sql_mode_contains.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,152 @@ +# Copyright(C) 2011-2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS shops; +--enable_warnings + +CREATE TABLE shops ( + id INT PRIMARY KEY AUTO_INCREMENT, + name TEXT, + location GEOMETRY NOT NULL, + SPATIAL KEY location_index (location) +); + +INSERT INTO shops (name, location) + VALUES ('nezu-no-taiyaki', + ST_GeomFromText('POINT(139.762573 35.720253)')); +INSERT INTO shops (name, location) + VALUES ('taiyaki-kataoka', + ST_GeomFromText('POINT(139.715591 35.712521)')); +INSERT INTO shops (name, location) + VALUES ('soba-taiyaki-ku', + ST_GeomFromText('POINT(139.659088 35.683712)')); +INSERT INTO shops (name, location) + VALUES ('kuruma', + ST_GeomFromText('POINT(139.706207 35.721516)')); +INSERT INTO shops (name, location) + VALUES ('hirose-ya', + ST_GeomFromText('POINT(139.685608 35.714844)')); +INSERT INTO shops (name, location) + VALUES ('sazare', + ST_GeomFromText('POINT(139.685043 35.714653)')); +INSERT INTO shops (name, location) + VALUES ('omede-taiyaki', + ST_GeomFromText('POINT(139.817154 35.700516)')); +INSERT INTO shops (name, location) + VALUES ('onaga-ya', + ST_GeomFromText('POINT(139.81105 35.698254)')); +INSERT INTO shops (name, location) + VALUES ('shiro-ya', + ST_GeomFromText('POINT(139.638611 35.705517)')); +INSERT INTO shops (name, location) + VALUES ('fuji-ya', + ST_GeomFromText('POINT(139.637115 35.703938)')); +INSERT INTO shops (name, location) + VALUES ('miyoshi', + ST_GeomFromText('POINT(139.537323 35.644539)')); +INSERT INTO shops (name, location) + VALUES ('juju-ya', + ST_GeomFromText('POINT(139.695755 35.628922)')); +INSERT INTO shops (name, location) + VALUES ('tatsumi-ya', + ST_GeomFromText('POINT(139.638657 35.665501)')); +INSERT INTO shops (name, location) + VALUES ('tetsuji', + ST_GeomFromText('POINT(139.76857 35.680912)')); +INSERT INTO shops (name, location) + VALUES ('gazuma-ya', + ST_GeomFromText('POINT(139.647598 35.700817)')); +INSERT INTO shops (name, location) + VALUES ('honma-mon', + ST_GeomFromText('POINT(139.652573 35.722736)')); +INSERT INTO shops (name, location) + VALUES ('naniwa-ya', + ST_GeomFromText('POINT(139.796234 35.730061)')); +INSERT INTO shops (name, location) + VALUES ('kuro-dai', + ST_GeomFromText('POINT(139.704834 35.650345)')); +INSERT INTO shops (name, location) + VALUES ('daruma', + ST_GeomFromText('POINT(139.770599 35.681461)')); +INSERT INTO shops (name, location) + VALUES ('yanagi-ya', + ST_GeomFromText('POINT(139.783981 35.685341)')); +INSERT INTO shops (name, location) + VALUES ('sharaku', + ST_GeomFromText('POINT(139.794846 35.716969)')); +INSERT INTO shops (name, location) + VALUES ('takane', + ST_GeomFromText('POINT(139.560913 35.698601)')); +INSERT INTO shops (name, location) + VALUES ('chiyoda', + ST_GeomFromText('POINT(139.652817 35.642601)')); +INSERT INTO shops (name, location) + VALUES ('da-ka-po', + ST_GeomFromText('POINT(139.727356 35.627346)')); +INSERT INTO shops (name, location) + VALUES ('matsushima-ya', + ST_GeomFromText('POINT(139.737381 35.640556)')); +INSERT INTO shops (name, location) + VALUES ('kazuya', + ST_GeomFromText('POINT(139.760895 35.673508)')); +INSERT INTO shops (name, location) + VALUES ('furuya-kogane-an', + ST_GeomFromText('POINT(139.676071 35.680603)')); +INSERT INTO shops (name, location) + VALUES ('hachi-no-ie', + ST_GeomFromText('POINT(139.668106 35.608021)')); +INSERT INTO shops (name, location) + VALUES ('azuki-chan', + ST_GeomFromText('POINT(139.673203 35.64151)')); +INSERT INTO shops (name, location) + VALUES ('kuriko-an', + ST_GeomFromText('POINT(139.796829 35.712013)')); +INSERT INTO shops (name, location) + VALUES ('yume-no-aru-machi-no-taiyaki-ya-san', + ST_GeomFromText('POINT(139.712524 35.616199)')); +INSERT INTO shops (name, location) + VALUES ('naze-ya', + ST_GeomFromText('POINT(139.665833 35.609039)')); +INSERT INTO shops (name, location) + VALUES ('sanoki-ya', + ST_GeomFromText('POINT(139.770721 35.66592)')); +INSERT INTO shops (name, location) + VALUES ('shigeta', + ST_GeomFromText('POINT(139.780273 35.672626)')); +INSERT INTO shops (name, location) + VALUES ('nishimi-ya', + ST_GeomFromText('POINT(139.774628 35.671825)')); +INSERT INTO shops (name, location) + VALUES ('hiiragi', + ST_GeomFromText('POINT(139.711517 35.647701)')); + +SELECT id, name, ST_AsText(location) AS location_text FROM shops; +SELECT id, name, ST_AsText(location) AS location_text FROM shops + WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location) + ORDER BY id; + +EXPLAIN +SELECT id, name, ST_AsText(location) AS location_text FROM shops + WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location) + ORDER BY id; + +DROP TABLE shops; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,11 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,5 @@ # Copyright(C) 2010 Tetsuro IKEDA +# Copyright(C) 2016-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,24 +13,28 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source ../../include/mroonga/skip_strict_sql_mode.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings -drop table if exists t1, t2, t3; +DROP TABLE IF EXISTS t1; --enable_warnings -create table t1 (_id int, a int, primary key (_id) using hash); +CREATE TABLE t1 (_id int, a int, PRIMARY KEY (_id) USING HASH); + --error ER_BAD_NULL_ERROR -insert into t1 values(null, 100); -insert into t1 values(1,100); -insert into t1 values(1,100); -insert into t1 values(1,100); -insert into t1 values(1,100); -select * from t1; -select * from t1 where _id = 2; -select * from t1 where _id = 20; -drop table t1; +INSERT INTO t1 VALUES(null, 100); +INSERT INTO t1 VALUES(1,100); +INSERT INTO t1 VALUES(1,100); +INSERT INTO t1 VALUES(1,100); +INSERT INTO t1 VALUES(1,100); + +SELECT * FROM t1; +SELECT * FROM t1 WHERE _id = 2; +SELECT * FROM t1 WHERE _id = 20; + +DROP TABLE t1; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_strict_sql_mode_id_primary.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_strict_sql_mode_id_primary.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_strict_sql_mode_id_primary.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_strict_sql_mode_id_primary.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2010 Tetsuro IKEDA +# Copyright(C) 2016-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_strict_sql_mode.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (_id int, a int, PRIMARY KEY (_id) USING HASH); + +--error ER_BAD_NULL_ERROR +INSERT INTO t1 VALUES(null, 100); +--error 1265 +INSERT INTO t1 VALUES(1,100); +--error 1265 +INSERT INTO t1 VALUES(1,100); +--error 1265 +INSERT INTO t1 VALUES(1,100); +--error 1265 +INSERT INTO t1 VALUES(1,100); + +SELECT * FROM t1; +SELECT * FROM t1 WHERE _id = 2; +SELECT * FROM t1 WHERE _id = 20; + +DROP TABLE t1; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_asc_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_asc_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_asc_asc.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_asc_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,49 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + score3 INT, + INDEX (score1, score2, score3) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, score3) VALUES(1, 10, -100); +INSERT INTO items (score1, score2, score3) VALUES(1, 10, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 10, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 100); + +SELECT * + FROM items + WHERE score1 = 2 + ORDER BY score2 ASC, score3 ASC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_desc_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_desc_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_desc_desc.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_order_by_where_equal_desc_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,49 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + score3 INT, + INDEX (score1, score2, score3) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, score3) VALUES(1, 10, -100); +INSERT INTO items (score1, score2, score3) VALUES(1, 10, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 10, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 30, 100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, -100); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 0); +INSERT INTO items (score1, score2, score3) VALUES(2, 20, 100); + +SELECT * + FROM items + WHERE score1 = 2 + ORDER BY score2 DESC, score3 DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_strict_sql_mode_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_strict_sql_mode_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_strict_sql_mode_update.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_strict_sql_mode_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,47 @@ +# Copyright(C) 2011-2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_strict_sql_mode.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS scores; +--enable_warnings + +SET NAMES utf8; +CREATE TABLE scores ( + name char(30) NOT NULL, + score int NOT NULL, + PRIMARY KEY (name, score) +) DEFAULT CHARSET=utf8; + +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 29); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", -12); +INSERT INTO scores (name, score) VALUES ("Jiro Yamada", 27); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 10); + +SELECT * FROM scores; + +--error 1265 +UPDATE scores SET name = "Taro Yamada" + WHERE name = "Jiro Yamada" AND score = 27; + +SELECT * FROM scores + WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29); + +DROP TABLE scores; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2011 Kouhei Sutou +# Copyright(C) 2011-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,28 +12,35 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source ../../include/mroonga/skip_strict_sql_mode.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings -drop table if exists listing; +DROP TABLE IF EXISTS scores; --enable_warnings -set names utf8; -create table scores ( - name char(30) not null, - score int not null, - primary key (name, score) -) default charset utf8; -show create table scores; -insert into scores (name, score) values("Taro Yamada", 29); -insert into scores (name, score) values("Taro Yamada", -12); -insert into scores (name, score) values("Jiro Yamada", 27); -insert into scores (name, score) values("Taro Yamada", 10); -select * from scores; -update scores set name = "Taro Yamada" where name = "Jiro Yamada" and score = 27; -select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29); -drop table scores; +SET NAMES utf8; +CREATE TABLE scores ( + name char(30) NOT NULL, + score int NOT NULL, + PRIMARY KEY (name, score) +) DEFAULT CHARSET=utf8; + +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 29); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", -12); +INSERT INTO scores (name, score) VALUES ("Jiro Yamada", 27); +INSERT INTO scores (name, score) VALUES ("Taro Yamada", 10); + +SELECT * FROM scores; + +UPDATE scores SET name = "Taro Yamada" + WHERE name = "Jiro Yamada" AND score = 27; + +SELECT * FROM scores + WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29); + +DROP TABLE scores; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2014 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score INT, + created_at DATETIME, + INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); + +SELECT * + FROM items + WHERE score = 2 AND created_at >= "2014-09-11 00:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_greater_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2014 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score INT, + created_at DATETIME, + INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); + +SELECT * + FROM items + WHERE score = 2 AND created_at > "2014-09-11 00:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2014 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score INT, + created_at DATETIME, + INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); + +SELECT * + FROM items + WHERE score = 2 AND created_at <= "2014-09-12 00:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_all_used_less_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2014 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score INT, + created_at DATETIME, + INDEX (score, created_at) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); +INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); +INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); + +SELECT * + FROM items + WHERE score = 2 AND created_at < "2014-09-12 00:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -# Copyright(C) 2014 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS items; ---enable_warnings - -CREATE TABLE items ( - id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, - score INT, - created_at DATETIME, - INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; - -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); - -SELECT * - FROM items - WHERE score = 2 AND created_at >= "2014-09-11 00:00:00" - ORDER BY created_at DESC; - -DROP TABLE items; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -# Copyright(C) 2014 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS items; ---enable_warnings - -CREATE TABLE items ( - id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, - score INT, - created_at DATETIME, - INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; - -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); - -SELECT * - FROM items - WHERE score = 2 AND created_at > "2014-09-11 00:00:00" - ORDER BY created_at DESC; - -DROP TABLE items; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -# Copyright(C) 2014 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS items; ---enable_warnings - -CREATE TABLE items ( - id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, - score INT, - created_at DATETIME, - INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; - -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); - -SELECT * - FROM items - WHERE score = 2 AND created_at <= "2014-09-12 00:00:00" - ORDER BY created_at DESC; - -DROP TABLE items; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -# Copyright(C) 2014 Kouhei Sutou -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -DROP TABLE IF EXISTS items; ---enable_warnings - -CREATE TABLE items ( - id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, - score INT, - created_at DATETIME, - INDEX (score, created_at) -) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE items; - -INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00"); -INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00"); -INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00"); - -SELECT * - FROM items - WHERE score = 2 AND created_at < "2014-09-12 00:00:00" - ORDER BY created_at DESC; - -DROP TABLE items; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,50 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE score1 = 2 AND created_at >= "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_greater_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,50 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE score1 = 2 AND created_at > "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,50 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE score1 = 2 AND created_at <= "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_have_prefix_less_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,50 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (score1, created_at, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(3, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE score1 = 2 AND created_at < "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE created_at >= "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_greater_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE created_at > "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE created_at <= "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_partially_used_no_prefix_less_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2015 Masafumi Yokoyama +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS items; +--enable_warnings + +CREATE TABLE items ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT, + score2 INT, + created_at DATETIME, + INDEX (created_at, score1, score2) +) DEFAULT CHARSET=UTF8; +SHOW CREATE TABLE items; + +INSERT INTO items (score1, score2, created_at) VALUES(1, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 00:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-01 12:00:00"); +INSERT INTO items (score1, score2, created_at) VALUES(2, 0, "2015-07-02 00:00:00"); + +SELECT * + FROM items + WHERE created_at < "2015-07-01 12:00:00" + ORDER BY created_at DESC; + +DROP TABLE items; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_max.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_max.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_max.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_max.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS listing; +--enable_warnings + +CREATE TABLE scores ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT NOT NULL, + score2 INT NOT NULL, + INDEX (score1, score2) +) DEFAULT CHARSET=UTF8; + +INSERT INTO scores (score1, score2) VALUES(1, 1); +INSERT INTO scores (score1, score2) VALUES(1, 2); +INSERT INTO scores (score1, score2) VALUES(2, 3); +INSERT INTO scores (score1, score2) VALUES(2, 2); +INSERT INTO scores (score1, score2) VALUES(2, 1); +INSERT INTO scores (score1, score2) VALUES(2, 0); +INSERT INTO scores (score1, score2) VALUES(2, -1); +INSERT INTO scores (score1, score2) VALUES(2, -2); +INSERT INTO scores (score1, score2) VALUES(2, -3); + +SELECT MAX(score2) FROM scores WHERE score1 = 2; + +DROP TABLE scores; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_min.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_min.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_min.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_min.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS listing; +--enable_warnings + +CREATE TABLE scores ( + id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, + score1 INT NOT NULL, + score2 INT NOT NULL, + INDEX (score1, score2) +) DEFAULT CHARSET=UTF8; + +INSERT INTO scores (score1, score2) VALUES(1, 1); +INSERT INTO scores (score1, score2) VALUES(1, 2); +INSERT INTO scores (score1, score2) VALUES(2, 3); +INSERT INTO scores (score1, score2) VALUES(2, 2); +INSERT INTO scores (score1, score2) VALUES(2, 1); +INSERT INTO scores (score1, score2) VALUES(2, 0); +INSERT INTO scores (score1, score2) VALUES(2, -1); +INSERT INTO scores (score1, score2) VALUES(2, -2); +INSERT INTO scores (score1, score2) VALUES(2, -3); + +SELECT MIN(score2) FROM scores WHERE score1 = 2; + +DROP TABLE scores; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,12 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/skip_solaris10.inc ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -33,13 +31,13 @@ UNIQUE KEY range_key(start, end) ); -INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (1, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (2, "1000-01-02", "9999-12-31"); INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01"); +INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-02"); SELECT * FROM ranges FORCE INDEX(range_key) - WHERE start = "1000-01-01" AND end = "9999-12-31"; + WHERE start = "1000-01-02" AND end = "9999-12-31"; DROP TABLE ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,11 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -32,10 +31,10 @@ UNIQUE KEY range_key(start, end) ); -INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (1, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (2, "1000-01-02", "9999-12-31"); INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01"); +INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-02"); SELECT start, end FROM ranges FORCE INDEX(range_key) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,12 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/skip_solaris10.inc ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -34,9 +32,9 @@ ); INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01"); -INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (2, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-02"); +INSERT INTO ranges VALUES (4, "1000-01-02", "9999-12-31"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start, end; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,12 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/skip_solaris10.inc ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -34,9 +32,9 @@ ); INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31"); -INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05"); -INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01"); -INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31"); +INSERT INTO ranges VALUES (2, "1000-01-02", "2012-10-05"); +INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-02"); +INSERT INTO ranges VALUES (4, "1000-01-02", "9999-12-31"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start DESC, end DESC; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,12 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/skip_solaris10.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -33,10 +31,10 @@ UNIQUE KEY range_key(start, end) ); -INSERT INTO ranges VALUES (1, "1000-01-01 00:00:00", "2012-10-05 16:18:29"); -INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "9999-12-31 23:59:59"); +INSERT INTO ranges VALUES (1, "1000-01-02 00:00:00", "2012-10-05 16:18:29"); +INSERT INTO ranges VALUES (2, "1000-01-02 00:00:00", "9999-12-31 23:59:59"); INSERT INTO ranges VALUES (3, "2012-10-25 16:18:29", "9999-12-31 23:59:59"); -INSERT INTO ranges VALUES (4, "9999-12-31 23:59:59", "1000-01-01 00:00:00"); +INSERT INTO ranges VALUES (4, "9999-12-31 23:59:59", "1000-01-02 00:00:00"); SELECT start, end FROM ranges FORCE INDEX(range_key) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_insert_delete_insert_invalid_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_insert_delete_insert_invalid_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_insert_delete_insert_invalid_value.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_insert_delete_insert_invalid_value.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2015 Kouhei Sutou +# Copyright(C) 2015-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,8 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source ../../include/mroonga/skip_strict_sql_mode.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,12 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/skip_solaris10.inc ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -34,9 +32,9 @@ ); INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59"); -INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29"); -INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00"); -INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59"); +INSERT INTO ranges VALUES (2, "1000-01-02 00:00:00", "2012-10-05 16:18:29"); +INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-02 00:00:00"); +INSERT INTO ranges VALUES (4, "1000-01-02 00:00:00", "9999-12-31 23:59:59"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start, end; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -14,12 +14,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/skip_freebsd.inc ---source ../../include/mroonga/skip_osx.inc ---source ../../include/mroonga/skip_solaris10.inc ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -34,9 +32,9 @@ ); INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59"); -INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29"); -INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00"); -INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59"); +INSERT INTO ranges VALUES (2, "1000-01-02 00:00:00", "2012-10-05 16:18:29"); +INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-02 00:00:00"); +INSERT INTO ranges VALUES (4, "1000-01-02 00:00:00", "9999-12-31 23:59:59"); SELECT * FROM ranges FORCE INDEX(range_key) ORDER BY start DESC, end DESC; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ # Copyright(C) 2012 Kentoku SHIBA -# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -23,8 +23,8 @@ CREATE TABLE ranges ( id int PRIMARY KEY, - start timestamp, - end timestamp, + start timestamp DEFAULT '2016-04-21 00:00:00', + end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -24,8 +24,8 @@ CREATE TABLE ranges ( id int PRIMARY KEY, - start timestamp, - end timestamp, + start timestamp DEFAULT '2016-04-21 00:00:00', + end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ # Copyright(C) 2012 Kentoku SHIBA -# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -24,8 +24,8 @@ CREATE TABLE ranges ( id int PRIMARY KEY, - start timestamp, - end timestamp, + start timestamp DEFAULT '2016-04-21 00:00:00', + end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,5 +1,5 @@ # Copyright(C) 2012 Kentoku SHIBA -# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -23,8 +23,8 @@ CREATE TABLE ranges ( id int PRIMARY KEY, - start timestamp, - end timestamp, + start timestamp DEFAULT '2016-04-21 00:00:00', + end timestamp DEFAULT '2016-04-22 00:00:00', UNIQUE KEY range_key(start, end) ); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,11 +13,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/skip_osx.inc --disable_warnings DROP TABLE IF EXISTS ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,11 +13,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/skip_osx.inc --disable_warnings DROP TABLE IF EXISTS ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,9 +13,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_32bit.inc +--source ../../include/mroonga/skip_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,11 +13,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/skip_osx.inc --disable_warnings DROP TABLE IF EXISTS ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,11 +13,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_64bit.inc +--source ../../include/mroonga/have_signed_64bit_time_t.inc --source ../../include/mroonga/have_mroonga.inc ---source ../../include/mroonga/skip_osx.inc --disable_warnings DROP TABLE IF EXISTS ranges; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ day DATE PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (day, title) VALUES ("2012-01-29", "clear day"); INSERT INTO diaries (day, title) VALUES ("2012-01-30", "rainy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_fractional_seconds.inc --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ day DATETIME(6) PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (day, title) VALUES ("2012-01-29 21:51:01.111111", "clear day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ day DATETIME PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (day, title) VALUES ("2012-01-29 21:51:01", "clear day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ version DECIMAL(6, 3) PRIMARY KEY, message TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE releases; INSERT INTO releases (version, message) VALUES (10.000, "10th release!"); INSERT INTO releases (version, message) VALUES (10.001, "minor fix."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ version DECIMAL PRIMARY KEY, message TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE releases; INSERT INTO releases (version, message) VALUES (1, "the first release!!!"); INSERT INTO releases (version, message) VALUES (10, "10th release!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/skip_mariadb_55.inc +--source ../../include/mroonga/skip_mariadb_5_5.inc --source ../../include/mroonga/have_fractional_seconds.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ time TIMESTAMP(6) PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (time, title) VALUES ("2012-01-29 21:51:01.111111", "clear day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ time TIMESTAMP PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (time, title) VALUES ("2012-01-29 21:51:01", "clear day"); INSERT INTO diaries (time, title) VALUES ("2012-01-30 01:23:45", "rainy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_fractional_seconds.inc @@ -25,7 +25,6 @@ time TIME(6) PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; INSERT INTO running_records (time, title) VALUES ("01:00:00.000001", "normal condition"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ time TIME PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE running_records; INSERT INTO running_records (time, title) VALUES ("01:00:00", "normal condition"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ party_year YEAR PRIMARY KEY, title TEXT ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE aniversary_memos; INSERT INTO aniversary_memos (party_year, title) VALUES ("11", "We need a big cake!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_greater_than_or_equal_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_normal_less_than_or_equal_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_greater_than_or_equal_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_range_primary_less_than_or_equal_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_all.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_all.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_all.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_all.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS ids; +--enable_warnings + +CREATE TABLE ids ( + id int, + UNIQUE KEY (id) +); + +INSERT INTO ids VALUES (1); +DELETE FROM ids; +INSERT INTO ids VALUES (1); + +SELECT * FROM ids; + +-- error ER_DUP_ENTRY +INSERT INTO ids VALUES (1); + +DROP TABLE ids; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_search_after_duplicated.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_search_after_duplicated.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_search_after_duplicated.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_search_after_duplicated.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2014 Kouhei Sutou +# Copyright(C) 2014-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,9 +12,12 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +skip "This test is too fragile."; --source include/not_embedded.inc +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,7 +24,6 @@ day DATE PRIMARY KEY, title TEXT ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (day, title) VALUES ("2012-02-14", "clear day") diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ title TEXT, UNIQUE KEY day (day) ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (day, title) VALUES ("2012-02-14", "clear day1") diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc @@ -77,22 +77,6 @@ select * from t1; drop table t1; - -# for virtual columns -create table t1 (c1 int, _id int); -set sql_mode=""; -# warning WARN_DATA_TRUNCATED -insert into t1 (c1,_id) values (1,1); -set sql_mode="strict_all_tables"; -# We can't use WARN_DATA_TRUNCATED here because "WXXX" isn't supported -# MySQL 5.5, 5.6 and MariaDB 5.6. MariaDB 10.0 only supports it. -# We share this test with all MySQL servers. So we use number here. ---error 1265 -insert into t1 (c1,_id) values (4,1); -select * from t1; -drop table t1; - - # duplicated key error create table t1 (c1 int primary key, c2 int); insert into t1 values(1,100); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_virtual_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_virtual_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/insert_virtual_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/insert_virtual_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2010 Tetsuro IKEDA +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (c1 int, _id int); +--disable_warnings +SET sql_mode=""; +--enable_warnings +# warning WARN_DATA_TRUNCATED +INSERT INTO t1 (c1,_id) VALUES (1,1); +--disable_warnings +SET sql_mode="STRICT_ALL_TABLES"; +--enable_warnings +# We can't use WARN_DATA_TRUNCATED here because "WXXX" isn't supported +# MySQL 5.5, 5.6 and MariaDB 5.6. MariaDB 10.0 only supports it. +# We share this test with all MySQL servers. So we use number here. +--error 1265 +INSERT INTO t1 (c1,_id) VALUES (4,1); +SELECT * FROM t1; +DROP TABLE t1; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_multithread.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_multithread.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_multithread.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_multithread.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,11 +30,17 @@ INSERT INTO diaries VALUES("Hello mroonga!"); INSERT INTO diaries VALUES("It's funny."); +disable_query_log; CONNECT (thread2, localhost, root, ,); CONNECTION thread2; +enable_query_log; + INSERT INTO diaries VALUES("Happy birthday!"); + +disable_query_log; DISCONNECT thread2; CONNECTION default; +enable_query_log; SHOW STATUS LIKE 'mroonga_count_skip'; SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_single_thread.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_single_thread.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_single_thread.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_after_insert_single_thread.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_disabled.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_disabled.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_disabled.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_disabled.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,6 @@ content TEXT, FULLTEXT INDEX(content) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_and.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_and.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_and.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_and.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT, + age INT, + INDEX (id, age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id, age) VALUES (1, 28); +INSERT INTO users (id, age) VALUES (1, 28); +INSERT INTO users (id, age) VALUES (1, 29); +INSERT INTO users (id, age) VALUES (2, 29); +INSERT INTO users (id, age) VALUES (2, 29); +INSERT INTO users (id, age) VALUES (3, 29); + +SELECT COUNT(*) FROM users WHERE id = 2 AND age = 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_between.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_between.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_between.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_between.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); + +SELECT COUNT(*) FROM users WHERE age BETWEEN 28 AND 30; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); + +SELECT COUNT(*) FROM users WHERE age = 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_boolean_mode.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_boolean_mode.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_boolean_mode.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_boolean_mode.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE memos ( + content TEXT, + FULLTEXT INDEX (content) +) DEFAULT CHARSET=UTF8; + +INSERT INTO memos (content) VALUES ('Groonga is good.'); +INSERT INTO memos (content) VALUES ('Groonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga is good.'); +INSERT INTO memos (content) VALUES ('Mroonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga uses Groonga.'); + +SELECT COUNT(*) FROM memos + WHERE MATCH(content) AGAINST('+Groonga' IN BOOLEAN MODE); + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_natural_language_mode.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_natural_language_mode.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_natural_language_mode.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_full_text_search_in_natural_language_mode.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE memos ( + content TEXT, + FULLTEXT INDEX (content) +) DEFAULT CHARSET=UTF8; + +INSERT INTO memos (content) VALUES ('Groonga is good.'); +INSERT INTO memos (content) VALUES ('Groonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga is good.'); +INSERT INTO memos (content) VALUES ('Mroonga is very good.'); +INSERT INTO memos (content) VALUES ('Mroonga uses Groonga.'); + +SELECT COUNT(*) FROM memos + WHERE MATCH(content) AGAINST('Groonga'); + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); + +SELECT COUNT(*) FROM users WHERE age >= 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_greater.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); + +SELECT COUNT(*) FROM users WHERE age > 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); + +SELECT COUNT(*) FROM users WHERE age <= 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_less.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (age) VALUES (27); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (30); +INSERT INTO users (age) VALUES (31); + +SELECT COUNT(*) FROM users WHERE age < 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_not_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_not_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_not_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_not_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (28); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); +INSERT INTO users (age) VALUES (29); + +SELECT COUNT(*) FROM users WHERE age <> 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_view.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_view.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_view.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_index_view.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_multiple_conditions.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_multiple_conditions.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_multiple_conditions.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_multiple_conditions.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT, + age INT, + INDEX (age) +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id, age) VALUES (1, 29); +INSERT INTO users (id, age) VALUES (2, 29); +INSERT INTO users (id, age) VALUES (3, 29); + +SELECT COUNT(*) FROM users WHERE id = 3 AND age = 29; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_between.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_between.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_between.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_between.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); + +SELECT COUNT(*) FROM users WHERE id BETWEEN 2 AND 4; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); + +SELECT COUNT(*) FROM users WHERE id = 3; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); + +SELECT COUNT(*) FROM users WHERE id >= 3; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_greater.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); + +SELECT COUNT(*) FROM users WHERE id > 3; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); + +SELECT COUNT(*) FROM users WHERE id <= 3; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_less.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); + +SELECT COUNT(*) FROM users WHERE id < 3; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_not_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_not_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_not_equal.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_primary_key_not_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +FLUSH STATUS; + +CREATE TABLE users ( + id INT PRIMARY KEY +) DEFAULT CHARSET=UTF8; + +INSERT INTO users (id) VALUES (1); +INSERT INTO users (id) VALUES (2); +INSERT INTO users (id) VALUES (3); +INSERT INTO users (id) VALUES (4); +INSERT INTO users (id) VALUES (5); + +SELECT COUNT(*) FROM users WHERE id <> 3; + +SHOW STATUS LIKE 'mroonga_count_skip'; + +DROP TABLE users; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_count_skip_TODO_SPLIT_ME.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -# Copyright(C) 2010 Kentoku SHIBA -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - ---source ../../include/mroonga/have_mroonga.inc - ---disable_warnings -drop table if exists t1, t2, t3; ---enable_warnings - -flush status; -create table t1 (c1 int primary key, c2 int, c3 text, key idx1(c2), fulltext index ft(c3)); -insert into t1 values(1,10,"aa ii uu ee oo"); -insert into t1 values(2,20,"ka ki ku ke ko"); -insert into t1 values(3,30,"sa si su se so"); -insert into t1 values(4,40,"ta ti tu te to"); -insert into t1 values(5,50,"aa ii uu ee oo"); -show status like 'mroonga_count_skip'; -select * from t1; -show status like 'mroonga_count_skip'; -select count(*) from t1; -show status like 'mroonga_count_skip'; -select * from t1 force index(primary) where c1 between 2 and 4; -show status like 'mroonga_count_skip'; -select count(*) from t1 force index(primary) where c1 between 2 and 4; -show status like 'mroonga_count_skip'; -select c1 from t1 force index(primary) where c1 < 3; -show status like 'mroonga_count_skip'; -select count(c1) from t1 force index(primary) where c1 < 3; -show status like 'mroonga_count_skip'; -select 1 from t1 force index(primary) where c1 > 3; -show status like 'mroonga_count_skip'; -select count(1) from t1 force index(primary) where c1 > 3; -show status like 'mroonga_count_skip'; -select * from t1 where match(c3) against("su"); -show status like 'mroonga_count_skip'; -select count(*) from t1 where match(c3) against("su"); -show status like 'mroonga_count_skip'; -select * from t1 where match(c3) against("+su" in boolean mode); -show status like 'mroonga_count_skip'; -select count(*) from t1 where match(c3) against("+su" in boolean mode); -show status like 'mroonga_count_skip'; -select * from t1 force index(idx1) where c2 between 20 and 40; -show status like 'mroonga_count_skip'; -select count(*) from t1 force index(idx1) where c2 between 20 and 40; -show status like 'mroonga_count_skip'; -drop table t1; - ---source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_multiple_match_againsts.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_multiple_match_againsts.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_multiple_match_againsts.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_multiple_match_againsts.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,57 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +FLUSH STATUS; + +SET NAMES UTF8; +CREATE TABLE memos ( + id INT UNSIGNED NOT NULL, + title VARCHAR(255), + content TEXT, + FULLTEXT INDEX(title), + FULLTEXT INDEX(content) +) DEFAULT CHARSET UTF8; + +INSERT INTO memos VALUES(5, "title 1", "content a"); +INSERT INTO memos VALUES(12, "title 1", "content a"); +INSERT INTO memos VALUES(10, "title 1", "content a"); +INSERT INTO memos VALUES(4, "title 2", "content b"); +INSERT INTO memos VALUES(6, "title 2", "content b"); +INSERT INTO memos VALUES(1, "title 2", "content b"); +INSERT INTO memos VALUES(11, "title 1-a", "content a-1"); +INSERT INTO memos VALUES(3, "title 2-b", "content a-2"); +INSERT INTO memos VALUES(2, "title 2-c", "content a-3"); +INSERT INTO memos VALUES(8, "title 1-a", "content b-1"); +INSERT INTO memos VALUES(9, "title 2-b", "content b-2"); +INSERT INTO memos VALUES(7, "title 2-c", "content b-3"); + +SELECT * FROM memos + WHERE MATCH(title) AGAINST("+1" IN BOOLEAN MODE) AND + MATCH(content) AGAINST("+a" IN BOOLEAN MODE) + ORDER BY id + LIMIT 1,3; + +SHOW STATUS LIKE 'mroonga_fast_order_limit'; + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_cp932.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_cp932.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,46 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +FLUSH STATUS; + +SET NAMES CP932; +CREATE TABLE memos ( + ʎq INT UNSIGNED, + e TEXT, + FULLTEXT INDEX(e), + KEY(ʎq) +) DEFAULT CHARSET CP932; + +INSERT INTO memos VALUES(2, "͎RoB"); +INSERT INTO memos VALUES(3, "̓T{eB"); +INSERT INTO memos VALUES(1, "͓VC悭Ă悩B"); + +SELECT * FROM memos + WHERE MATCH(e) AGAINST("" IN BOOLEAN MODE) + ORDER BY ʎq + LIMIT 1; + +SHOW STATUS LIKE 'mroonga_fast_order_limit'; + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "2011-11-11 12:23:34", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:34", "Tomorrow will be fine."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(date) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine."); INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_duplicated_order_by_columns.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_duplicated_order_by_columns.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_duplicated_order_by_columns.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_duplicated_order_by_columns.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_name.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_name.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_name.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_name.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,49 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +FLUSH STATUS; + +SET NAMES utf8; +CREATE TABLE memos ( + id int PRIMARY KEY, + tag ENUM('Groonga', 'Mroonga'), + content TEXT, + FULLTEXT INDEX(content), + KEY(tag), + KEY(id) +) DEFAULT CHARSET=utf8; + +INSERT INTO memos VALUES(1, 'Groonga', 'Groonga is great!'); +INSERT INTO memos VALUES(2, 'Mroonga', 'Mroonga is great!'); +INSERT INTO memos VALUES(3, 'Mroonga', 'Mroonga is a MySQL storage engine.'); +INSERT INTO memos VALUES(4, 'Mroonga', 'Mroonga is based on Groonga.'); + +SELECT * FROM memos + WHERE MATCH(content) AGAINST("+Groonga" IN BOOLEAN MODE) AND + tag = 'Mroonga' + ORDER BY id LIMIT 1; + +SHOW STATUS LIKE 'mroonga_fast_order_limit'; + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_enum_value.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,49 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +FLUSH STATUS; + +SET NAMES utf8; +CREATE TABLE memos ( + id int PRIMARY KEY, + tag ENUM('Groonga', 'Mroonga'), + content TEXT, + FULLTEXT INDEX(content), + KEY(tag), + KEY(id) +) DEFAULT CHARSET=utf8; + +INSERT INTO memos VALUES(1, 'Groonga', 'Groonga is great!'); +INSERT INTO memos VALUES(2, 'Mroonga', 'Mroonga is great!'); +INSERT INTO memos VALUES(3, 'Mroonga', 'Mroonga is a MySQL storage engine.'); +INSERT INTO memos VALUES(4, 'Mroonga', 'Mroonga is based on Groonga.'); + +SELECT * FROM memos + WHERE MATCH(content) AGAINST("+Groonga" IN BOOLEAN MODE) AND + tag = 2 + ORDER BY id LIMIT 1; + +SHOW STATUS LIKE 'mroonga_fast_order_limit'; + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -33,7 +33,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -33,7 +33,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -35,7 +35,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(NULL, 1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(NULL, 2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; INSERT INTO memos VALUES(1, "1:23:34", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:34", "Tomorrow will be fine."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" ); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" ); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ FULLTEXT INDEX(content), KEY(writing_time) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE memos; INSERT INTO memos VALUES(1, "1:23:30", "Today is fine."); INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -35,7 +35,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -34,7 +34,6 @@ KEY(month), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/partition_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/partition_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/partition_insert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/partition_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/skip_mariadb_100_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_0_or_later.inc +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc --source include/have_partition.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/partition_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/partition_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/partition_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/partition_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/skip_mariadb_100_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_0_or_later.inc +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc --source include/have_partition.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/repair_table_no_index_file.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/repair_table_no_index_file.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/repair_table_no_index_file.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/repair_table_no_index_file.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,9 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc +--source ../../include/mroonga/skip_solaris.inc --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_mroonga_helper.inc @@ -27,7 +28,6 @@ body TEXT, FULLTEXT INDEX body_index (body) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start Groonga!"); INSERT INTO diaries (title, body) VALUES ("Groonga (1)", "starting Groonga..."); @@ -35,11 +35,11 @@ SELECT * FROM diaries WHERE MATCH(body) AGAINST("+starting" IN BOOLEAN MODE); ---remove_file $MYSQLD_DATADIR/repair_test.mrn.000010A.c +--remove_file $MYSQLD_DATADIR/repair_test.mrn.000010E.c FLUSH TABLES; -# Error ER_CANT_OPEN_FILE syscall error 'repair_test.mrn.000010A.c' (No such file or directory) +# Error ER_CANT_OPEN_FILE system call error: No such file or directory: failed to open path: --error ER_CANT_OPEN_FILE SELECT * FROM diaries WHERE MATCH(body) AGAINST("+starting" IN BOOLEAN MODE); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,10 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # Based on #910. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ content text, fulltext index (content) ) default charset utf8; -show create table diaries; insert into diaries values(1, "今日からはじめました。"); insert into diaries values(2, "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ content varchar(256), fulltext index (content) ) default charset utf8; -show create table diaries; insert into diaries values(1, "今日からはじめました。"); insert into diaries values(2, "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_without_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_without_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/replace_without_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/replace_without_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_all.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_all.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_all.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_all.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -31,7 +31,7 @@ INSERT INTO users VALUES ("Bob", 20); INSERT INTO users VALUES ("Charry", 29); -SELECT *, COUNT(*) FROM users GROUP BY age; +SELECT age, COUNT(*) FROM users GROUP BY age; DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -30,9 +30,7 @@ INSERT INTO users VALUES ("Bob", 20); INSERT INTO users VALUES ("Charry", 29); -EXPLAIN SELECT *, COUNT(*) FROM users GROUP BY age; - -SELECT *, COUNT(*) FROM users GROUP BY age; +SELECT age, COUNT(*) FROM users GROUP BY age; DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -31,7 +31,6 @@ title TEXT, FULLTEXT INDEX (title) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO users (name) VALUES ("alice"); INSERT INTO users (name) VALUES ("bob"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/skip_osx.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title) VALUES ("clear day"); INSERT INTO diaries (title) VALUES ("rainy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/truncate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/truncate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/truncate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/truncate.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -31,7 +31,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_binlog_row.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_binlog_row.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_binlog_row.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_binlog_row.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,38 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +SET SESSION binlog_format = 'ROW'; + +CREATE TABLE memos ( + title varchar(20) PRIMARY KEY, + content varchar(140) NOT NULL +) COLLATE=utf8mb4_general_ci + DEFAULT CHARSET=utf8mb4; + +INSERT INTO memos (title, content) VALUES ('Mroonga', 'Mroonga is great!'); +SELECT * FROM memos; +UPDATE memos SET content = 'Mroonga is very great!' WHERE title = 'Mroonga'; +SELECT * FROM memos; + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_int.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,32 +12,38 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings -drop table if exists t1, t2, t3; +DROP TABLE IF EXISTS t1; --enable_warnings # for virtual columns -create table t1 (c1 int, _id int); -insert into t1 values(1,null); -insert into t1 values(2,null); -insert into t1 values(3,null); -select * from t1; -set sql_mode=""; +CREATE TABLE t1 (c1 int, _id int); +INSERT INTO t1 VALUES(1,null); +INSERT INTO t1 VALUES(2,null); +INSERT INTO t1 VALUES(3,null); +SELECT * FROM t1; +--disable_warnings +SET sql_mode=""; +--enable_warnings # warning WARN_DATA_TRUNCATED -update t1 set _id = 10 where c1 = 1; -select * from t1; -set sql_mode="strict_all_tables"; +UPDATE t1 SET _id = 10 WHERE c1 = 1; +SELECT * FROM t1; +--disable_warnings +SET sql_mode="STRICT_ALL_TABLES"; +--enable_warnings # We can't use WARN_DATA_TRUNCATED here because "WXXX" isn't supported # MySQL 5.5, 5.6 and MariaDB 5.6. MariaDB 10.0 only supports it. # We share this test with all MySQL servers. So we use number here. --error 1265 -update t1 set _id = 11 where c1 = 1; -select * from t1; -drop table t1; +UPDATE t1 SET _id = 11 WHERE c1 = 1; +SELECT * FROM t1; +DROP TABLE t1; + +SET sql_mode=DEFAULT; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_column.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # TODO: Remove the check after MariaDB 5.5.42 and MariaDB 10.0.17 are released. --source ../../include/mroonga/have_mysql.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_leading_not.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_leading_not.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_leading_not.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_leading_not.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # TODO: Remove the check after MariaDB 5.5.42 and MariaDB 10.0.17 are released. --source ../../include/mroonga/have_mysql.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_allow_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # TODO: Remove the check after MariaDB 5.5.42 and MariaDB 10.0.17 are released. --source ../../include/mroonga/have_mysql.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_query.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_query.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_query.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_query.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # TODO: Remove the check after MariaDB 5.5.42 and MariaDB 10.0.17 are released. --source ../../include/mroonga/have_mysql.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_script.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_script.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_script.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_boolean_mode_syntax_flags_syntax_script.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # TODO: Remove the check after MariaDB 5.5.42 and MariaDB 10.0.17 are released. --source ../../include/mroonga/have_mysql.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test 2017-12-21 15:48:51.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_new_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_new_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_new_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_new_value.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,25 @@ +# Copyright(C) 2014 Kouhei Sutou +# Copyright(C) 2014 Kentoku SHIBA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +SET @mroonga_default_tokenizer_backup = @@mroonga_default_tokenizer; +SET GLOBAL mroonga_default_tokenizer = "TokenBigramSplitAlpha"; +SHOW GLOBAL VARIABLES LIKE 'mroonga_default_tokenizer'; +SET GLOBAL mroonga_default_tokenizer = @mroonga_default_tokenizer_backup; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_same_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_same_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_same_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_tokenizer_same_value.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright(C) 2014 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mroonga.inc + +SET GLOBAL mroonga_default_tokenizer = "TokenBigram"; +SHOW GLOBAL VARIABLES LIKE 'mroonga_default_tokenizer'; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; insert into diaries (body) values ("will start groonga!"); select * from diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; insert into diaries (body) values ("will start groonga!"); select * from diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test 2017-12-21 15:48:51.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -25,7 +25,6 @@ body text, fulltext index body_index (body) ) default charset utf8; -show create table diaries; insert into diaries (body) values ("will start groonga!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_enable_operations_recording_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_enable_operations_recording_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_enable_operations_recording_insert.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_enable_operations_recording_insert.test 2017-12-21 15:48:51.000000000 +0000 @@ -0,0 +1,50 @@ +# Copyright(C) 2017 Naoya Murakami +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS diaries; +--enable_warnings + +CREATE TABLE diaries ( + title TEXT +) DEFAULT CHARSET=utf8; + +SELECT mroonga_command('truncate mroonga_operations'); +INSERT INTO diaries VALUES("Unlogged: Research for Mroonga"); +SELECT mroonga_command('load --table mroonga_operations --values "[{}]"'); +SELECT mroonga_command('select mroonga_operations --output_columns _id'); + +SET GLOBAL mroonga_enable_operations_recording = false; +FLUSH TABLES; + +SELECT mroonga_command('truncate mroonga_operations'); +INSERT INTO diaries VALUES("Logged: Research for Mroonga"); +SELECT mroonga_command('load --table mroonga_operations --values "[{}]"'); +SELECT mroonga_command('select mroonga_operations --output_columns _id'); + +DROP TABLE diaries; +SELECT mroonga_command('truncate mroonga_operations'); + +SET GLOBAL mroonga_enable_operations_recording = default; +FLUSH TABLES; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2014 Kouhei Sutou +# Copyright(C) 2014-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,17 +12,17 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_version_100_or_later.inc +--source ../../include/mroonga/have_version_10_0_or_later.inc --source ../../include/mroonga/have_mroonga.inc SET GLOBAL mroonga_lock_timeout = -1; SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout"; -disable_query_log; -SET GLOBAL mroonga_lock_timeout = 10000000; -enable_query_log; +--disable_query_log +SET GLOBAL mroonga_lock_timeout = DEFAULT; +--enable_query_log --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2014 Kouhei Sutou +# Copyright(C) 2014-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,17 +12,17 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ---source ../../include/mroonga/have_version_100_or_later.inc +--source ../../include/mroonga/have_version_10_0_or_later.inc --source ../../include/mroonga/have_mroonga.inc SET GLOBAL mroonga_lock_timeout = -2; SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout"; -disable_query_log; -SET GLOBAL mroonga_lock_timeout = 10000000; -enable_query_log; +--disable_query_log +SET GLOBAL mroonga_lock_timeout = DEFAULT; +--enable_query_log --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2014 Kouhei Sutou +# Copyright(C) 2014-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,8 +20,8 @@ SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout"; -disable_query_log; -SET GLOBAL mroonga_lock_timeout = 10000000; -enable_query_log; +--disable_query_log +SET GLOBAL mroonga_lock_timeout = DEFAULT; +--enable_query_log --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2014 Kouhei Sutou +# Copyright(C) 2014-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,8 +20,8 @@ SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout"; -disable_query_log; -SET GLOBAL mroonga_lock_timeout = 10000000; -enable_query_log; +--disable_query_log +SET GLOBAL mroonga_lock_timeout = DEFAULT; +--enable_query_log --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -20,7 +20,7 @@ DROP TABLE IF EXISTS diaries; --enable_warnings -# MySQL <= 5.5 reports wrong a warning. :< +# MySQL <= 5.5 reports a wrong warning. :< # It has been fixed in MySQL >= 5.6 and MariaDB >= 5.3. --disable_warnings SET GLOBAL mroonga_match_escalation_threshold = -1; @@ -30,24 +30,31 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, - FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' + FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; -INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); -INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); +INSERT INTO diaries (title, tags) VALUES ("Hello Groonga!", "groonga install"); +INSERT INTO diaries (title, tags) VALUES ("Hello Mroonga!", "mroonga install"); +disable_query_log; +CONNECT (new_connection, localhost, root, ,); +CONNECTION new_connection; +enable_query_log; -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE); +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+install" IN BOOLEAN MODE); -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+gr" IN BOOLEAN MODE); SET GLOBAL mroonga_match_escalation_threshold = 0; -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+gr" IN BOOLEAN MODE); SET mroonga_match_escalation_threshold = 0; -SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); +SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("+gr" IN BOOLEAN MODE); +disable_query_log; +CONNECTION default; +DISCONNECT new_connection; +enable_query_log; DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -24,9 +24,8 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, - FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' + FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.result 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -DROP TABLE IF EXISTS ids; -CREATE TABLE ids ( -id INT PRIMARY KEY AUTO_INCREMENT -) DEFAULT CHARSET=UTF8; -INSERT INTO ids VALUES (1); -INSERT INTO ids VALUES (2); -INSERT INTO ids VALUES (3); -INSERT INTO ids VALUES (4); -INSERT INTO ids VALUES (5); -INSERT INTO ids VALUES (6); -INSERT INTO ids VALUES (7); -INSERT INTO ids VALUES (8); -INSERT INTO ids VALUES (9); -INSERT INTO ids VALUES (10); -SET GLOBAL mroonga_max_n_records_for_estimate = 1; -EXPLAIN SELECT * FROM ids WHERE id > 5; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE ids range PRIMARY PRIMARY 4 NULL 1 Using where; Using index -SET GLOBAL mroonga_max_n_records_for_estimate = DEFAULT; -DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_global.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2015 Kouhei Sutou +# Copyright(C) 2015-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,8 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -38,13 +39,17 @@ SET GLOBAL mroonga_max_n_records_for_estimate = 1; +disable_query_log; CONNECT (new_connection, localhost, root, ,); CONNECTION new_connection; +enable_query_log; EXPLAIN SELECT * FROM ids WHERE id > 5; +disable_query_log; CONNECTION default; DISCONNECT new_connection; +enable_query_log; SET GLOBAL mroonga_max_n_records_for_estimate = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_global.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,60 @@ +# Copyright(C) 2015-2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS ids; +--enable_warnings + +CREATE TABLE ids ( + id INT PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=UTF8; + +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +INSERT INTO ids VALUES (4); +INSERT INTO ids VALUES (5); +INSERT INTO ids VALUES (6); +INSERT INTO ids VALUES (7); +INSERT INTO ids VALUES (8); +INSERT INTO ids VALUES (9); +INSERT INTO ids VALUES (10); + + +SET GLOBAL mroonga_max_n_records_for_estimate = 1; + +disable_query_log; +CONNECT (new_connection, localhost, root, ,); +CONNECTION new_connection; +enable_query_log; + +EXPLAIN SELECT * FROM ids WHERE id > 5; + +disable_query_log; +CONNECTION default; +DISCONNECT new_connection; +enable_query_log; + +SET GLOBAL mroonga_max_n_records_for_estimate = DEFAULT; + + +DROP TABLE ids; + + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_not_found_in_limit.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS ids; +--enable_warnings + +CREATE TABLE ids ( + id INT, + INDEX (id) +) DEFAULT CHARSET=UTF8; + +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); + +DELETE FROM ids WHERE id < 2; + +SET mroonga_max_n_records_for_estimate = 1; + +EXPLAIN SELECT * FROM ids WHERE id > 0; + +SET mroonga_max_n_records_for_estimate = DEFAULT; + +DROP TABLE ids; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_mysql_5_7_or_later_session.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,47 @@ +# Copyright(C) 2015-2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS ids; +--enable_warnings + +CREATE TABLE ids ( + id INT PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=UTF8; + +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +INSERT INTO ids VALUES (4); +INSERT INTO ids VALUES (5); +INSERT INTO ids VALUES (6); +INSERT INTO ids VALUES (7); +INSERT INTO ids VALUES (8); +INSERT INTO ids VALUES (9); +INSERT INTO ids VALUES (10); + +SET mroonga_max_n_records_for_estimate = 1; + +EXPLAIN SELECT * FROM ids WHERE id > 5; + +SET mroonga_max_n_records_for_estimate = DEFAULT; + +DROP TABLE ids; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_not_found_in_limit.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_not_found_in_limit.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_not_found_in_limit.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_not_found_in_limit.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS ids; +--enable_warnings + +CREATE TABLE ids ( + id INT, + INDEX (id) +) DEFAULT CHARSET=UTF8; + +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); + +DELETE FROM ids WHERE id < 2; + +SET mroonga_max_n_records_for_estimate = 1; + +EXPLAIN SELECT * FROM ids WHERE id > 0; + +SET mroonga_max_n_records_for_estimate = DEFAULT; + +DROP TABLE ids; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_session.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_session.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_session.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_max_n_records_for_estimate_session.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2015 Kouhei Sutou +# Copyright(C) 2015-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,8 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_empty_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_empty_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_empty_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_empty_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/have_mroonga_helper.inc + +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; + +SET GLOBAL mroonga_query_log_file = ""; +--source ../../include/mroonga/print_groonga_query_log.inc + +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; + +--remove_file $MYSQLD_DATADIR/groonga-query-log.log + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_null_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_null_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_null_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_disabled_null_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/have_mroonga_helper.inc + +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; + +SET GLOBAL mroonga_query_log_file = NULL; +--source ../../include/mroonga/print_groonga_query_log.inc + +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; + +--remove_file $MYSQLD_DATADIR/groonga-query-log.log + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_empty_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_empty_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_empty_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_empty_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,33 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/have_mroonga_helper.inc + +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; + +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; + +SET GLOBAL mroonga_query_log_file = ""; +--source ../../include/mroonga/print_groonga_query_log.inc + +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; + +--remove_file $MYSQLD_DATADIR/groonga-query-log.log + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_null_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_null_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_null_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_enabled_null_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,33 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/have_mroonga_helper.inc + +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; + +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; + +SET GLOBAL mroonga_query_log_file = NULL; +--source ../../include/mroonga/print_groonga_query_log.inc + +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; + +--remove_file $MYSQLD_DATADIR/groonga-query-log.log + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_new_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_new_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_new_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_new_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,33 @@ +# Copyright(C) 2012 Kouhei Sutou +# Copyright(C) 2014 Kentoku SHIBA +# Copyright(C) 2017 Kentaro Hayashi +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/have_mroonga_helper.inc + +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; + +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; +--source ../../include/mroonga/print_groonga_query_log.inc + +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; + +--remove_file $MYSQLD_DATADIR/groonga-query-log.log + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_same_value.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_same_value.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_same_value.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_query_log_file_same_value.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,34 @@ +# Copyright(C) 2014-2017 Kouhei Sutou +# Copyright(C) 2017 Kentaro Hayashi +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/have_mroonga_helper.inc + +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; + +SET GLOBAL mroonga_log_file = "groonga-query-log.log"; + +SET GLOBAL mroonga_query_log_file = "groonga-query.log"; +--source ../../include/mroonga/print_groonga_query_log.inc + +SET GLOBAL mroonga_query_log_file = DEFAULT; +SET GLOBAL mroonga_log_file = DEFAULT; + +--remove_file $MYSQLD_DATADIR/groonga-query-log.log + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/not_embedded.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_cp932.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_cp932.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_cp932.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_cp932.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,33 @@ +DROP TABLE IF EXISTS users; +SET NAMES cp932; +CREATE TABLE users ( +id int unsigned PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=cp932 COMMENT='Engine "InnoDB"'; +ALTER TABLE users +ADD COLUMN O text, +ADD FULLTEXT INDEX (O); +INSERT INTO users (O) VALUES ("܂"); +INSERT INTO users (O) VALUES ("Ȃ"); +INSERT INTO users (O) VALUES (""); +SELECT * FROM users; +id O +1 ܂ +2 Ȃ +3 +SELECT * FROM users +WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); +id O +2 Ȃ +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_HASH_KEY ShortText + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_utf8.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_utf8.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_utf8.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column_multibyte_utf8.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,33 @@ +DROP TABLE IF EXISTS users; +SET NAMES utf8; +CREATE TABLE users ( +id int unsigned PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=utf8 COMMENT='Engine "InnoDB"'; +ALTER TABLE users +ADD COLUMN 名前 text, +ADD FULLTEXT INDEX (名前); +INSERT INTO users (名前) VALUES ("やまだ"); +INSERT INTO users (名前) VALUES ("たなか"); +INSERT INTO users (名前) VALUES ("すずき"); +SELECT * FROM users; +id 名前 +1 やまだ +2 たなか +3 すずき +SELECT * FROM users +WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); +id 名前 +2 たなか +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_HASH_KEY ShortText + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result 2017-12-21 15:48:52.000000000 +0000 @@ -3,13 +3,6 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title) VALUES ("survey"); SELECT * FROM diaries; id title @@ -26,12 +19,4 @@ 1 survey will start groonga! 2 groonga (1) starting groonga... 3 groonga (2) started groonga. -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`) -) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,16 +6,11 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) ENGINE MyISAM DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 +SELECT table_name, engine, table_comment +FROM information_schema.tables +WHERE table_name = 'diaries'; +table_name engine table_comment +diaries MyISAM INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); SELECT * FROM diaries @@ -24,16 +19,11 @@ id title body 1 survey will start groonga! ALTER TABLE diaries ENGINE = mroonga COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' +SELECT table_name, engine, table_comment +FROM information_schema.tables +WHERE table_name = 'diaries'; +table_name engine table_comment +diaries Mroonga ENGINE "InnoDB" SELECT * FROM diaries WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,28 +6,15 @@ content TEXT, FULLTEXT INDEX(content) ) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"'; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` varchar(64) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"' INSERT INTO memos (title, content) VALUES ("Hello", "I start to write memos!"); INSERT INTO memos (title, content) VALUES ("groonga", "I start to use groonga!"); INSERT INTO memos (title, content) VALUES ("mroonga", "I use mroonga too!"); ALTER TABLE memos COMMENT='engine "MyISAM"'; -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` varchar(64) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='engine "MyISAM"' +SELECT table_name, table_comment +FROM information_schema.tables +WHERE table_name = 'memos'; +table_name table_comment +memos engine "MyISAM" SELECT * FROM memos; id title content 1 Hello I start to write memos! diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result 2017-12-21 15:48:52.000000000 +0000 @@ -4,26 +4,11 @@ title TEXT, body TEXT ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); SELECT * FROM diaries; id title body 1 survey will start groonga! ALTER TABLE diaries DROP COLUMN body; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - PRIMARY KEY (`id`) -) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' SELECT * FROM diaries; id title 1 survey diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result 2017-12-21 15:48:52.000000000 +0000 @@ -4,14 +4,6 @@ title TEXT, FULLTEXT INDEX title_index (title) ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title) VALUES ("survey"); SELECT * FROM diaries; id title @@ -39,14 +31,4 @@ MATCH(body) AGAINST("starting"); id title body 2 groonga (1) starting groonga... -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' DROP TABLE diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,16 +6,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); SELECT * FROM diaries; id title body @@ -32,14 +22,4 @@ WHERE MATCH(title) AGAINST("groonga") AND MATCH(body) AGAINST("starting"); id title body -SHOW CREATE TABLE memos; -Table Create Table -memos CREATE TABLE `memos` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result 2017-12-21 15:48:52.000000000 +0000 @@ -119,13 +119,4 @@ 14 tetsuji POINT(139.76857 35.680912) 19 daruma POINT(139.770599 35.681461) 26 kazuya POINT(139.760895 35.673508) -SHOW CREATE TABLE shops; -Table Create Table -shops CREATE TABLE `shops` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, - `location` geometry NOT NULL, - PRIMARY KEY (`id`), - SPATIAL KEY `location_index` (`location`) -) ENGINE=Mroonga AUTO_INCREMENT=37 DEFAULT CHARSET=latin1 COMMENT='ENGINE "InnoDB"' DROP TABLE shops; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/check_table_for_upgrade.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/check_table_for_upgrade.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/check_table_for_upgrade.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/check_table_for_upgrade.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS memos; +SET NAMES utf8; +CREATE TABLE memos ( +id int NOT NULL PRIMARY KEY, +content text, +FULLTEXT INDEX (content) +) COMMENT='engine "InnoDB"'; +INSERT INTO memos VALUES (1, 'Hello MySQL'); +INSERT INTO memos VALUES (2, 'Hello Mroonga'); +CHECK TABLE memos FOR UPGRADE; +Table Op Msg_type Msg_text +test.memos check status OK +FLUSH TABLES; +SELECT * FROM memos +WHERE MATCH(content) AGAINST('+mroonga' IN BOOLEAN MODE); +id content +2 Hello Mroonga +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_add_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_add_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_add_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_add_column.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED; +ALTER TABLE logs ADD FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"'; +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_delete.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_delete.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +DELETE FROM logs WHERE id = 1; +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_drop_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_drop_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_drop_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_drop_column.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +ALTER TABLE logs DROP COLUMN message; +SELECT * FROM logs; +id record +1 {"level": "info", "message": "start"} +2 {"level": "info", "message": "restart"} +3 {"level": "warn", "message": "abort"} +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_insert.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_insert.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_reindex.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_reindex.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_reindex.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_reindex.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +ALTER TABLE logs DISABLE KEYS; +ALTER TABLE logs ENABLE KEYS; +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_update.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_stored_update.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, +FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; +SELECT * FROM logs WHERE MATCH(message) AGAINST("hut" IN BOOLEAN MODE); +id record message +2 {"level": "info", "message": "shutdown"} "shutdown" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_column.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL; +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs; +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_fulltext_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_fulltext_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_fulltext_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_fulltext_index.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) +VALUES (1, '{"level": "info", "message": "start server"}'); +ALTER TABLE logs ADD FULLTEXT INDEX (message); +INSERT INTO logs(id, record) +VALUES (2, '{"level": "info", "message": "start server"}'); +INSERT INTO logs(id, record) +VALUES (3, '{"level": "warn", "message": "abort server"}'); +SELECT * FROM logs WHERE MATCH(message) AGAINST('+start' IN BOOLEAN MODE); +id record message +2 {"level": "info", "message": "start server"} "start server" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_add_index.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,19 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +level VARCHAR(255) GENERATED ALWAYS AS +(json_unquote(json_extract(`record`, '$.level'))) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) +VALUES (1, '{"level": "info", "message": "start server"}'); +ALTER TABLE logs ADD INDEX (level); +INSERT INTO logs(id, record) +VALUES (2, '{"level": "info", "message": "start server"}'); +INSERT INTO logs(id, record) +VALUES (3, '{"level": "warn", "message": "abort server"}'); +SELECT * FROM logs WHERE level = 'info'; +id record level +1 {"level": "info", "message": "start server"} info +2 {"level": "info", "message": "start server"} info +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_delete.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_delete.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +DELETE FROM logs WHERE id = 1; +SELECT * FROM logs; +id record message +2 {"level": "info", "message": "restart"} "restart" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_drop_column.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_drop_column.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_drop_column.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_drop_column.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,16 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +ALTER TABLE logs DROP COLUMN message; +SELECT * FROM logs; +id record +1 {"level": "info", "message": "start"} +2 {"level": "info", "message": "restart"} +3 {"level": "warn", "message": "abort"} +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_insert.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_insert.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +SELECT * FROM logs; +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "restart"} "restart" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_update.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_generated_virtual_update.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,16 @@ +DROP TABLE IF EXISTS logs; +CREATE TABLE logs ( +id INT PRIMARY KEY, +record JSON, +message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; +SELECT * FROM logs; +id record message +1 {"level": "info", "message": "start"} "start" +2 {"level": "info", "message": "shutdown"} "shutdown" +3 {"level": "warn", "message": "abort"} "abort" +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_cp932.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_cp932.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_cp932.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_cp932.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,32 @@ +DROP TABLE IF EXISTS users; +SET NAMES cp932; +CREATE TABLE users ( +id int unsigned PRIMARY KEY AUTO_INCREMENT, +O text, +FULLTEXT INDEX (O) +) DEFAULT CHARSET=cp932 COMMENT='Engine "InnoDB"'; +INSERT INTO users (O) VALUES ("܂"); +INSERT INTO users (O) VALUES ("Ȃ"); +INSERT INTO users (O) VALUES (""); +SELECT * FROM users; +id O +1 ܂ +2 Ȃ +3 +SELECT * FROM users +WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); +id O +2 Ȃ +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_HASH_KEY ShortText + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_utf8.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_utf8.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_utf8.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/column_multibyte_utf8.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,32 @@ +DROP TABLE IF EXISTS users; +SET NAMES utf8; +CREATE TABLE users ( +id int unsigned PRIMARY KEY AUTO_INCREMENT, +名前 text, +FULLTEXT INDEX (名前) +) DEFAULT CHARSET=utf8 COMMENT='Engine "InnoDB"'; +INSERT INTO users (名前) VALUES ("やまだ"); +INSERT INTO users (名前) VALUES ("たなか"); +INSERT INTO users (名前) VALUES ("すずき"); +SELECT * FROM users; +id 名前 +1 やまだ +2 たなか +3 すずき +SELECT * FROM users +WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); +id 名前 +2 たなか +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); +mroonga_command("dump --dump_plugins no --dump_records no") +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +table_create users TABLE_HASH_KEY ShortText + +table_create users#@540d@524d TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI + +column_create users#@540d@524d index COLUMN_INDEX|WITH_POSITION users +DROP TABLE users; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_mysql_5_7_or_later_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_mysql_5_7_or_later_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_mysql_5_7_or_later_with_index.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_mysql_5_7_or_later_with_index.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,30 @@ +CREATE TABLE diaries_innodb ( +id INT PRIMARY KEY AUTO_INCREMENT, +body TEXT, +flag TINYINT(2), +INDEX (flag) +) ENGINE = InnoDB DEFAULT CHARSET UTF8; +CREATE TABLE diaries_mroonga ( +id INT PRIMARY KEY AUTO_INCREMENT, +body TEXT, +flag TINYINT(2), +INDEX (flag) +) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8; +INSERT INTO diaries_innodb (body) VALUES ("will start groonga!"); +INSERT INTO diaries_innodb (body) VALUES ("starting groonga..."); +INSERT INTO diaries_innodb (body) VALUES ("started groonga."); +INSERT INTO diaries_mroonga (body) VALUES ("will start groonga!"); +INSERT INTO diaries_mroonga (body) VALUES ("starting groonga..."); +INSERT INTO diaries_mroonga (body) VALUES ("started groonga."); +EXPLAIN SELECT COUNT(*) FROM diaries_innodb; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE diaries_innodb NULL index NULL flag 2 NULL 3 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`diaries_innodb` +EXPLAIN SELECT COUNT(*) FROM diaries_mroonga; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE diaries_mroonga NULL index NULL flag 2 NULL 3 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`diaries_mroonga` +DROP TABLE diaries_innodb; +DROP TABLE diaries_mroonga; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,11 @@ +DROP TABLE IF EXISTS ids; +CREATE TABLE ids ( +id int PRIMARY KEY +) COMMENT='ENGINE "InnoDB"'; +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); +SELECT COUNT(*) FROM ids; +COUNT(*) +3 +DROP TABLE ids; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result 2017-12-21 15:48:52.000000000 +0000 @@ -18,9 +18,9 @@ INSERT INTO diaries_mroonga (body) VALUES ("started groonga."); EXPLAIN SELECT COUNT(*) FROM diaries_innodb; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE diaries_innodb index NULL flag 2 NULL 3 Using index +1 SIMPLE diaries_innodb index NULL flag 2 NULL # Using index EXPLAIN SELECT COUNT(*) FROM diaries_mroonga; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE diaries_mroonga index NULL flag 2 NULL 3 Using index +1 SIMPLE diaries_mroonga index NULL flag 2 NULL # Using index DROP TABLE diaries_innodb; DROP TABLE diaries_mroonga; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result 2017-12-21 15:48:52.000000000 +0000 @@ -3,10 +3,12 @@ id INT UNSIGNED PRIMARY KEY ) DEFAULT CHARSET=utf8 COMMENT='Free style normal comment, engine "InnoDB"'; -SHOW CREATE TABLE bugs; -Table Create Table -bugs CREATE TABLE `bugs` ( - `id` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='Free style normal comment, engine "InnoDB"' +SELECT mroonga_command("dump --dump_plugins no"); +mroonga_command("dump --dump_plugins no") +table_create bugs TABLE_HASH_KEY ShortText + +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText DROP TABLE bugs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_comment.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,5 +5,5 @@ ) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos +column_create memos#content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_none.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_none.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_none.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_none.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,5 +5,5 @@ ) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX memos +column_create memos#content index COLUMN_INDEX memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_flags_parameter.result 2017-12-21 15:48:52.000000000 +0000 @@ -12,5 +12,5 @@ ) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos +column_create memos#content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_none.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_none.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_none.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_none.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,5 +5,5 @@ ) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX memos +column_create memos#content index COLUMN_INDEX memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_with_position_and_with_weight.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_with_position_and_with_weight.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_with_position_and_with_weight.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_index_flags_with_position_and_with_weight.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,5 +5,5 @@ ) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8; SELECT mroonga_command("dump --dump_plugins no --dump_schema no"); mroonga_command("dump --dump_plugins no --dump_schema no") -column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos +column_create memos#content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index_bin.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index_bin.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index_bin.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index_bin.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,21 @@ +DROP TABLE IF EXISTS memos; +SET NAMES utf8; +CREATE TABLE memos ( +id INT NOT NULL PRIMARY KEY, +content TEXT NOT NULL, +FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"' +) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +SHOW CREATE TABLE memos; +Table Create Table +memos CREATE TABLE `memos` ( + `id` int(11) NOT NULL, + `content` text COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`), + FULLTEXT KEY `content` (`content`) COMMENT 'normalizer "NormalizerAuto"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='ENGINE "InnoDB"' +INSERT INTO memos VALUES (1, "1日の消費㌍は約2000㌔㌍"); +SELECT * FROM memos +WHERE MATCH (content) AGAINST ("+カロリー" IN BOOLEAN MODE); +id content +1 1日の消費㌍は約2000㌔㌍ +DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_parser_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_parser_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_parser_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_parser_comment.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,15 +5,11 @@ fulltext index body_index (body) comment 'parser "TokenBigramSplitSymbolAlphaDigit"' ) comment = 'engine "innodb"' default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead insert into diaries (body) values ("will start Groonga!"); +Warnings: +Warning 1287 'parser' is deprecated and will be removed in a future release. Please use tokenizer instead insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); select * from diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_multiple_token_filters.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_multiple_token_filters.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_multiple_token_filters.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_multiple_token_filters.result 2017-12-21 15:48:52.000000000 +0000 @@ -11,7 +11,12 @@ mroonga_command("dump --dump_plugins no") table_create memos TABLE_HASH_KEY ShortText -table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord +table_create memos#content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord -column_create memos-content index COLUMN_INDEX|WITH_POSITION memos +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create memos#content index COLUMN_INDEX|WITH_POSITION memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_one_token_filter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_one_token_filter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_one_token_filter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_one_token_filter.result 2017-12-21 15:48:52.000000000 +0000 @@ -11,7 +11,12 @@ mroonga_command("dump --dump_plugins no") table_create memos TABLE_HASH_KEY ShortText -table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord +table_create memos#content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord -column_create memos-content index COLUMN_INDEX|WITH_POSITION memos +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create memos#content index COLUMN_INDEX|WITH_POSITION memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_parameter.result 2017-12-21 15:48:52.000000000 +0000 @@ -19,7 +19,12 @@ mroonga_command("dump --dump_plugins no") table_create memos TABLE_HASH_KEY ShortText -table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord +table_create memos#content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord -column_create memos-content index COLUMN_INDEX|WITH_POSITION memos +table_create mroonga_operations TABLE_NO_KEY +column_create mroonga_operations record COLUMN_SCALAR UInt32 +column_create mroonga_operations table COLUMN_SCALAR ShortText +column_create mroonga_operations type COLUMN_SCALAR ShortText + +column_create memos#content index COLUMN_INDEX|WITH_POSITION memos DROP TABLE memos; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_comment.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_comment.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_comment.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_comment.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,14 +5,6 @@ fulltext index body_index (body) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' ) comment = 'engine "innodb"' default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries (body) values ("will start Groonga!"); insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_parameter.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_parameter.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_parameter.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_tokenizer_parameter.result 2017-12-21 15:48:52.000000000 +0000 @@ -4,14 +4,6 @@ body text, FULLTEXT INDEX body_index (body) TOKENIZER='TokenBigramSplitSymbolAlphaDigit' ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) `TOKENIZER`='TokenBigramSplitSymbolAlphaDigit' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (body) VALUES ("will start Groonga!"); INSERT INTO diaries (body) VALUES ("starting Groonga..."); INSERT INTO diaries (body) VALUES ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/drop_table_new_connection.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/drop_table_new_connection.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/drop_table_new_connection.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/drop_table_new_connection.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,13 @@ +CREATE TABLE logs ( +id INT PRIMARY KEY AUTO_INCREMENT, +message TEXT, +FULLTEXT INDEX (message) +) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8; +USE test; +DROP TABLE logs; +CREATE TABLE logs ( +id INT PRIMARY KEY AUTO_INCREMENT, +message TEXT, +FULLTEXT INDEX (message) +) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8; +DROP TABLE logs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,15 +6,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result 2017-12-21 15:48:52.000000000 +0000 @@ -7,16 +7,6 @@ FULLTEXT INDEX (title), FULLTEXT INDEX (content) ) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries VALUES(1, "富士山", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気 1月1日", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, "天気 4月4日", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,15 +6,6 @@ content text, FULLTEXT INDEX (title) ) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries VALUES (1, "Hello", "はじめました。"); INSERT INTO diaries VALUES (2, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES (3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,7 +6,11 @@ insert into t1 values (3, "aa ii ii ii oo"); insert into t1 values (4, "sa si su se so"); insert into t1 values (5, "ta ti ii ii to"); -insert into t2 (c1,c2) select c1,c2 from t1; +insert into t2 values (1, "aa ii uu ee oo"); +insert into t2 values (2, "ka ki ku ke ko"); +insert into t2 values (3, "aa ii ii ii oo"); +insert into t2 values (4, "sa si su se so"); +insert into t2 values (5, "ta ti ii ii to"); select * from t1; c1 c2 1 aa ii uu ee oo diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result 2017-12-21 15:48:52.000000000 +0000 @@ -1,13 +1,5 @@ drop table if exists t1, t2, t3; create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "innodb"'; -show create table t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `c1` int(11) NOT NULL, - `c2` text, - PRIMARY KEY (`c1`), - FULLTEXT KEY `ft` (`c2`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"' insert into t1 values (1, "hoge hoge"); insert into t1 values (2, "fuga fuga"); insert into t1 values (3, "moge moge"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,14 +5,6 @@ title varchar(255), fulltext index (title) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' set autocommit=0; insert into diaries values(0, "2011-07-14"); insert into diaries values(1, "2011-07-15"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_matched_and_not_matched_have_where_no_order.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_matched_and_not_matched_have_where_no_order.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_matched_and_not_matched_have_where_no_order.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_matched_and_not_matched_have_where_no_order.result 2017-12-21 15:48:52.000000000 +0000 @@ -10,15 +10,18 @@ INSERT INTO texts VALUES (1, 'Hello1', 'World1'); INSERT INTO texts VALUES (2, 'Hello2', 'World2'); INSERT INTO texts VALUES (3, 'Hello3', 'World3'); -SELECT id, +SELECT * +FROM (SELECT id, matched, not_matched, MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE), MATCH(not_matched) AGAINST('+Hello' IN BOOLEAN MODE) FROM texts -WHERE MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE); +WHERE MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE)) +AS searched_texts +ORDER BY id; id matched not_matched MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE) MATCH(not_matched) AGAINST('+Hello' IN BOOLEAN MODE) 1 Hello1 World1 1 0 -3 Hello3 World3 1 0 2 Hello2 World2 1 0 +3 Hello3 World3 1 0 DROP TABLE texts; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result 2017-12-21 15:48:52.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result 2017-12-21 15:48:52.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result 2017-12-21 15:48:52.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result 2017-12-21 15:48:52.000000000 +0000 @@ -8,17 +8,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title` (`title`,`content`), - FULLTEXT KEY `title_2` (`title`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,16 +6,6 @@ fulltext index title_index (title), fulltext index body_index (body) ) comment = 'engine "innodb"' default charset utf8; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries (title, body) values ("survey", "will start groonga!"); insert into diaries (title, body) values ("groonga (1)", "starting groonga..."); insert into diaries (title, body) values ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result 2017-12-21 15:48:52.000000000 +0000 @@ -1,13 +1,5 @@ drop table if exists t1, t2, t3; create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "myisam"'; -show create table t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `c1` int(11) NOT NULL, - `c2` text, - PRIMARY KEY (`c1`), - FULLTEXT KEY `ft` (`c2`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "myisam"' insert into t1 values (1, "hoge hoge"); insert into t1 values (2, "fuga fuga"); insert into t1 values (3, "moge moge"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result 2017-12-21 15:48:52.000000000 +0000 @@ -1,23 +1,13 @@ DROP TABLE IF EXISTS diaries; SET NAMES UTF8; CREATE TABLE ft( -a INT, +a INT DEFAULT 0, b TEXT, c TEXT, PRIMARY KEY(a), FULLTEXT KEY ftx1(b), FULLTEXT KEY ftx2(c) )ENGINE=Mroonga DEFAULT CHARSET=UTF8 COMMENT = 'engine "innodb"'; -SHOW CREATE TABLE ft; -Table Create Table -ft CREATE TABLE `ft` ( - `a` int(11) NOT NULL, - `b` text, - `c` text, - PRIMARY KEY (`a`), - FULLTEXT KEY `ftx1` (`b`), - FULLTEXT KEY `ftx2` (`c`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' INSERT INTO ft VALUES(1,'aaaaa','abcde'); INSERT INTO ft VALUES(2,'bbbbb','bcdef'); INSERT INTO ft VALUES(3,'ccccc','cdefg'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,16 +6,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' START TRANSACTION; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,15 +5,6 @@ location geometry NOT NULL, spatial key location_index (location) ) comment = 'engine "innodb"'; -show create table shops; -Table Create Table -shops CREATE TABLE `shops` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, - `location` geometry NOT NULL, - PRIMARY KEY (`id`), - SPATIAL KEY `location_index` (`location`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"' insert into shops (name, location) values ('nezu-no-taiyaki', ST_GeomFromText('POINT(139.762573 35.720253)')); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,15 +5,6 @@ location geometry NOT NULL, spatial key location_index (location) ) comment = 'engine "innodb"'; -show create table shops; -Table Create Table -shops CREATE TABLE `shops` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, - `location` geometry NOT NULL, - PRIMARY KEY (`id`), - SPATIAL KEY `location_index` (`location`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"' insert into shops (name, location) values ('sazare', ST_GeomFromText('POINT(139.685043 35.714653)')); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,15 +5,6 @@ location geometry NOT NULL, spatial key location_index (location) ) comment = 'engine "innodb"'; -show create table shops; -Table Create Table -shops CREATE TABLE `shops` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` text, - `location` geometry NOT NULL, - PRIMARY KEY (`id`), - SPATIAL KEY `location_index` (`location`) -) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"' insert into shops (name, location) values ('sazare', ST_GeomFromText('POINT(139.685043 35.714653)')); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result 2017-12-21 15:48:52.000000000 +0000 @@ -5,14 +5,6 @@ content text, fulltext index (content) ) default charset utf8 comment = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL, - `content` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' LOCK TABLE diaries WRITE; insert into diaries values(1, "今日からはじめました。"); insert into diaries values(2, "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_mysql_5_7_or_later_disk_sweep.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_mysql_5_7_or_later_disk_sweep.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_mysql_5_7_or_later_disk_sweep.result 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_mysql_5_7_or_later_disk_sweep.result 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,20 @@ +DROP TABLE IF EXISTS integers; +SET optimizer_switch='mrr_cost_based=off'; +CREATE TABLE integers ( +id INT PRIMARY KEY AUTO_INCREMENT, +value INT, +KEY (value) +) COMMENT='engine "InnoDB"'; +INSERT INTO integers (value) VALUES (0), (1), (2), (3); +EXPLAIN SELECT * FROM integers +WHERE value IN (0, 2); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE integers NULL range value value 5 NULL 2 100.00 Using where; Using MRR +Warnings: +Note 1003 /* select#1 */ select `test`.`integers`.`id` AS `id`,`test`.`integers`.`value` AS `value` from `test`.`integers` where (`test`.`integers`.`value` in (0,2)) +SELECT * FROM integers +WHERE value IN (0, 2); +id value +1 0 +3 2 +DROP TABLE integers; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,15 +6,6 @@ body TEXT, FULLTEXT INDEX body_index (body) ) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,15 +6,6 @@ body TEXT, FULLTEXT INDEX body_index (body) ) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); @@ -23,7 +14,7 @@ 2 groonga (1) starting groonga... FLUSH TABLES; SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting"); -ERROR HY000: syscall error 'repair_test.mrn.0000106' (No such file or directory) +ERROR HY000: system call error: No such file or directory: failed to open path: REPAIR TABLE diaries; Table Op Msg_type Msg_text repair_test.diaries repair status OK diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result 2017-12-21 15:48:52.000000000 +0000 @@ -3,13 +3,6 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT ) DEFAULT CHARSET=UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TEMPORARY TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - PRIMARY KEY (`id`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title) VALUES ("clear day"); INSERT INTO diaries (title) VALUES ("rainy day"); INSERT INTO diaries (title) VALUES ("cloudy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,16 +6,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result 2017-12-21 15:48:52.000000000 +0000 @@ -6,16 +6,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `title_index` (`title`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result 2017-12-21 15:48:52.000000000 +0000 @@ -10,19 +10,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8 COMMENT = 'engine "innodb"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `year` int(10) unsigned DEFAULT NULL, - `month` int(10) unsigned DEFAULT NULL, - `day` int(10) unsigned DEFAULT NULL, - `title` varchar(255) DEFAULT NULL, - `content` text, - PRIMARY KEY (`id`), - KEY `day` (`day`), - FULLTEXT KEY `content` (`content`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気がよくてきれいに見える。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result 2017-12-21 15:48:52.000000000 +0000 @@ -4,14 +4,6 @@ body text, fulltext index body_index (body) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries (body) values ("will start groonga!"); insert into diaries (body) values ("starting groonga..."); insert into diaries (body) values ("started groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result 2017-12-21 15:48:52.000000000 +0000 @@ -4,14 +4,6 @@ body text, fulltext index body_index (body) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries (body) values ("will start groonga!"); select * from diaries; id body diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result 2017-12-21 15:48:52.000000000 +0000 @@ -4,14 +4,6 @@ body text, fulltext index body_index (body) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `body` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `body_index` (`body`) -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"' insert into diaries (body) values ("will start groonga!"); set mroonga_dry_write=true; update diaries set body = "starting groonga..." where id = 1; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result 2017-12-21 15:48:52.000000000 +0000 @@ -3,17 +3,8 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, -FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' +FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `tags` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result 2017-12-21 15:48:52.000000000 +0000 @@ -3,17 +3,8 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, -FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' +FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; -Table Create Table -diaries CREATE TABLE `diaries` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` text, - `tags` text, - PRIMARY KEY (`id`), - FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"' -) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"' INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/suite.pm mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/suite.pm --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/suite.pm 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/suite.pm 2017-12-21 15:48:52.000000000 +0000 @@ -5,7 +5,7 @@ return "No Mroonga engine" unless $ENV{HA_MROONGA_SO} or $::mysqld_variables{'mroonga'} eq "ON"; -sub is_default { not $::opt_embedded_server } +sub is_default { 1 } my $groonga_normalizer_mysql_dir=$::basedir . '/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql'; my $groonga_normalizer_mysql_install_dir=$::basedir . '/lib/groonga/plugins'; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_cp932.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_cp932.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,54 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES cp932; + +CREATE TABLE users ( + id int unsigned PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=cp932 COMMENT='Engine "InnoDB"'; +ALTER TABLE users + ADD COLUMN O text, + ADD FULLTEXT INDEX (O); + +INSERT INTO users (O) VALUES ("܂"); +INSERT INTO users (O) VALUES ("Ȃ"); +INSERT INTO users (O) VALUES (""); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_utf8.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_utf8.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_utf8.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column_multibyte_utf8.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,54 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES utf8; + +CREATE TABLE users ( + id int unsigned PRIMARY KEY AUTO_INCREMENT +) DEFAULT CHARSET=utf8 COMMENT='Engine "InnoDB"'; +ALTER TABLE users + ADD COLUMN 名前 text, + ADD FULLTEXT INDEX (名前); + +INSERT INTO users (名前) VALUES ("やまだ"); +INSERT INTO users (名前) VALUES ("たなか"); +INSERT INTO users (名前) VALUES ("すずき"); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc @@ -26,7 +26,6 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title) VALUES ("survey"); SELECT * FROM diaries; @@ -39,8 +38,6 @@ INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga."); SELECT * FROM diaries; -SHOW CREATE TABLE diaries; - DROP TABLE diaries; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc @@ -29,7 +29,9 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) ENGINE MyISAM DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; +SELECT table_name, engine, table_comment + FROM information_schema.tables + WHERE table_name = 'diaries'; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); @@ -38,7 +40,9 @@ MATCH(body) AGAINST("groonga" IN BOOLEAN MODE); ALTER TABLE diaries ENGINE = mroonga COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; +SELECT table_name, engine, table_comment + FROM information_schema.tables + WHERE table_name = 'diaries'; SELECT * FROM diaries WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,14 +28,15 @@ content TEXT, FULLTEXT INDEX(content) ) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"'; -SHOW CREATE TABLE memos; INSERT INTO memos (title, content) VALUES ("Hello", "I start to write memos!"); INSERT INTO memos (title, content) VALUES ("groonga", "I start to use groonga!"); INSERT INTO memos (title, content) VALUES ("mroonga", "I use mroonga too!"); ALTER TABLE memos COMMENT='engine "MyISAM"'; -SHOW CREATE TABLE memos; +SELECT table_name, table_comment + FROM information_schema.tables + WHERE table_name = 'memos'; SELECT * FROM memos; SELECT * FROM memos WHERE MATCH(content) AGAINST("start" IN BOOLEAN MODE); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc @@ -27,13 +27,11 @@ title TEXT, body TEXT ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); SELECT * FROM diaries; ALTER TABLE diaries DROP COLUMN body; -SHOW CREATE TABLE diaries; SELECT * FROM diaries; INSERT INTO diaries (title) values ("groonga (1)"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc @@ -27,7 +27,6 @@ title TEXT, FULLTEXT INDEX title_index (title) ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title) VALUES ("survey"); SELECT * FROM diaries; @@ -50,8 +49,6 @@ WHERE MATCH(title) AGAINST("groonga") AND MATCH(body) AGAINST("starting"); -SHOW CREATE TABLE diaries; - DROP TABLE diaries; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc @@ -29,7 +29,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); SELECT * FROM diaries; @@ -43,8 +42,6 @@ WHERE MATCH(title) AGAINST("groonga") AND MATCH(body) AGAINST("starting"); -SHOW CREATE TABLE memos; - DROP TABLE memos; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,12 +12,12 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -144,8 +144,6 @@ SELECT id, name, ST_AsText(location) AS location_text FROM shops WHERE MBRContains(ST_GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location); -SHOW CREATE TABLE shops; - DROP TABLE shops; --source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/have_log_bin.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/check_table_for_upgrade.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/check_table_for_upgrade.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/check_table_for_upgrade.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/check_table_for_upgrade.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +SET NAMES utf8; + +CREATE TABLE memos ( + id int NOT NULL PRIMARY KEY, + content text, + FULLTEXT INDEX (content) +) COMMENT='engine "InnoDB"'; + +INSERT INTO memos VALUES (1, 'Hello MySQL'); +INSERT INTO memos VALUES (2, 'Hello Mroonga'); + +CHECK TABLE memos FOR UPGRADE; + +FLUSH TABLES; + +SELECT * FROM memos + WHERE MATCH(content) AGAINST('+mroonga' IN BOOLEAN MODE); + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_add_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_add_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_add_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_add_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); + +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED; +ALTER TABLE logs ADD FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"'; + +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_delete.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_delete.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +DELETE FROM logs WHERE id = 1; + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_drop_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_drop_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_drop_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_drop_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +ALTER TABLE logs DROP COLUMN message; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_insert.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_insert.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_reindex.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_reindex.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_reindex.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_reindex.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +ALTER TABLE logs DISABLE KEYS; +ALTER TABLE logs ENABLE KEYS; + +SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_update.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_stored_update.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED, + FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; + +SELECT * FROM logs WHERE MATCH(message) AGAINST("hut" IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); + +ALTER TABLE logs ADD COLUMN message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL; + +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_fulltext_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_fulltext_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_fulltext_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_fulltext_index.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,46 @@ +# Copyright(C) 2017 Naoya Murakami +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mariadb_10_2_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) + VALUES (1, '{"level": "info", "message": "start server"}'); + +ALTER TABLE logs ADD FULLTEXT INDEX (message); + +INSERT INTO logs(id, record) + VALUES (2, '{"level": "info", "message": "start server"}'); +INSERT INTO logs(id, record) + VALUES (3, '{"level": "warn", "message": "abort server"}'); + +SELECT * FROM logs WHERE MATCH(message) AGAINST('+start' IN BOOLEAN MODE); + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_add_index.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,47 @@ +# Copyright(C) 2017 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + level VARCHAR(255) GENERATED ALWAYS AS + (json_unquote(json_extract(`record`, '$.level'))) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) + VALUES (1, '{"level": "info", "message": "start server"}'); + +ALTER TABLE logs ADD INDEX (level); + +INSERT INTO logs(id, record) + VALUES (2, '{"level": "info", "message": "start server"}'); +INSERT INTO logs(id, record) + VALUES (3, '{"level": "warn", "message": "abort server"}'); + +SELECT * FROM logs WHERE level = 'info'; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_delete.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_delete.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +DELETE FROM logs WHERE id = 1; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_drop_column.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_drop_column.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_drop_column.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_drop_column.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +ALTER TABLE logs DROP COLUMN message; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_insert.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_insert.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_update.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_generated_virtual_update.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright(C) 2017 Naoya Murakami +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_version_5_7_or_later.inc +--source ../../include/mroonga/skip_mariadb_10_1_or_earlier.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS logs; +--enable_warnings + +CREATE TABLE logs ( + id INT PRIMARY KEY, + record JSON, + message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL +) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COMMENT = 'ENGINE "InnoDB"'; + +INSERT INTO logs(id, record) VALUES (1, '{"level": "info", "message": "start"}'); +INSERT INTO logs(id, record) VALUES (2, '{"level": "info", "message": "restart"}'); +INSERT INTO logs(id, record) VALUES (3, '{"level": "warn", "message": "abort"}'); + +UPDATE logs SET record = '{"level": "info", "message": "shutdown"}' WHERE id = 2; + +SELECT * FROM logs; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_cp932.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_cp932.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES cp932; + +CREATE TABLE users ( + id int unsigned PRIMARY KEY AUTO_INCREMENT, + O text, + FULLTEXT INDEX (O) +) DEFAULT CHARSET=cp932 COMMENT='Engine "InnoDB"'; + +INSERT INTO users (O) VALUES ("܂"); +INSERT INTO users (O) VALUES ("Ȃ"); +INSERT INTO users (O) VALUES (""); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (O) AGAINST ('+Ȃ' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_utf8.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_utf8.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_utf8.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_multibyte_utf8.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,53 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc +--source ../../include/mroonga/load_mroonga_functions.inc + +--disable_warnings +DROP TABLE IF EXISTS users; +--enable_warnings + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +SET NAMES utf8; + +CREATE TABLE users ( + id int unsigned PRIMARY KEY AUTO_INCREMENT, + 名前 text, + FULLTEXT INDEX (名前) +) DEFAULT CHARSET=utf8 COMMENT='Engine "InnoDB"'; + +INSERT INTO users (名前) VALUES ("やまだ"); +INSERT INTO users (名前) VALUES ("たなか"); +INSERT INTO users (名前) VALUES ("すずき"); + +SELECT * FROM users; + +SELECT * FROM users + WHERE MATCH (名前) AGAINST ('+たなか' IN BOOLEAN MODE); + +SELECT mroonga_command("dump --dump_plugins no --dump_records no"); + +DROP TABLE users; + +--source ../../include/mroonga/unload_mroonga_functions.inc +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_mysql_5_7_or_later_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_mysql_5_7_or_later_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_mysql_5_7_or_later_with_index.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_mysql_5_7_or_later_with_index.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,55 @@ +# Copyright(C) 2011-2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_query_log +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--enable_query_log + +CREATE TABLE diaries_innodb ( + id INT PRIMARY KEY AUTO_INCREMENT, + body TEXT, + flag TINYINT(2), + INDEX (flag) +) ENGINE = InnoDB DEFAULT CHARSET UTF8; + +CREATE TABLE diaries_mroonga ( + id INT PRIMARY KEY AUTO_INCREMENT, + body TEXT, + flag TINYINT(2), + INDEX (flag) +) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8; + +INSERT INTO diaries_innodb (body) VALUES ("will start groonga!"); +INSERT INTO diaries_innodb (body) VALUES ("starting groonga..."); +INSERT INTO diaries_innodb (body) VALUES ("started groonga."); + +INSERT INTO diaries_mroonga (body) VALUES ("will start groonga!"); +INSERT INTO diaries_mroonga (body) VALUES ("starting groonga..."); +INSERT INTO diaries_mroonga (body) VALUES ("started groonga."); + +EXPLAIN SELECT COUNT(*) FROM diaries_innodb; +EXPLAIN SELECT COUNT(*) FROM diaries_mroonga; + +DROP TABLE diaries_innodb; +DROP TABLE diaries_mroonga; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,36 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS ids; +--enable_warnings + +CREATE TABLE ids ( + id int PRIMARY KEY +) COMMENT='ENGINE "InnoDB"'; + +INSERT INTO ids VALUES (1); +INSERT INTO ids VALUES (2); +INSERT INTO ids VALUES (3); + +SELECT COUNT(*) FROM ids; + +DROP TABLE ids; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2011-2015 Kouhei Sutou +# Copyright(C) 2011-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -12,9 +12,10 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_query_log @@ -45,7 +46,9 @@ INSERT INTO diaries_mroonga (body) VALUES ("starting groonga..."); INSERT INTO diaries_mroonga (body) VALUES ("started groonga."); +-- replace_column 9 # EXPLAIN SELECT COUNT(*) FROM diaries_innodb; +-- replace_column 9 # EXPLAIN SELECT COUNT(*) FROM diaries_mroonga; DROP TABLE diaries_innodb; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,7 @@ ) DEFAULT CHARSET=utf8 COMMENT='Free style normal comment, engine "InnoDB"'; -SHOW CREATE TABLE bugs; +SELECT mroonga_command("dump --dump_plugins no"); DROP TABLE bugs; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_comment.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_none.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_none.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_none.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_none.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_flags_parameter.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source include/have_innodb.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_none.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_none.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_none.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_none.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_with_position_and_with_weight.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_with_position_and_with_weight.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_with_position_and_with_weight.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_index_flags_with_position_and_with_weight.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_comment.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index_bin.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index_bin.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index_bin.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index_bin.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright(C) 2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS memos; +--enable_warnings + +SET NAMES utf8; + +CREATE TABLE memos ( + id INT NOT NULL PRIMARY KEY, + content TEXT NOT NULL, + FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"' +) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +SHOW CREATE TABLE memos; + +INSERT INTO memos VALUES (1, "1日の消費㌍は約2000㌔㌍"); + +SELECT * FROM memos + WHERE MATCH (content) AGAINST ("+カロリー" IN BOOLEAN MODE); + +DROP TABLE memos; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_parameter.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source include/have_innodb.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_parser_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_parser_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_parser_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_parser_comment.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,8 +12,9 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--source include/not_embedded.inc --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +28,6 @@ fulltext index body_index (body) comment 'parser "TokenBigramSplitSymbolAlphaDigit"' ) comment = 'engine "innodb"' default charset utf8; -show create table diaries; insert into diaries (body) values ("will start Groonga!"); insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -65,6 +65,8 @@ desc t1; drop table t1; create table t1 (c1 timestamp primary key) COMMENT = 'engine "innodb"'; +# For MariaDB 10.2.3 +-- replace_result current_timestamp() CURRENT_TIMESTAMP desc t1; drop table t1; create table t1 (c1 datetime primary key) COMMENT = 'engine "innodb"'; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_multiple_token_filters.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_multiple_token_filters.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_multiple_token_filters.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_multiple_token_filters.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_one_token_filter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_one_token_filter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_one_token_filter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_one_token_filter.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_parameter.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source include/have_innodb.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_comment.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_comment.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_comment.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_comment.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ fulltext index body_index (body) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"' ) comment = 'engine "innodb"' default charset utf8; -show create table diaries; insert into diaries (body) values ("will start Groonga!"); insert into diaries (body) values ("starting Groonga..."); insert into diaries (body) values ("started Groonga."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_parameter.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_parameter.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_parameter.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_tokenizer_parameter.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mariadb.inc --source include/have_innodb.inc @@ -27,7 +27,6 @@ body text, FULLTEXT INDEX body_index (body) TOKENIZER='TokenBigramSplitSymbolAlphaDigit' ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET utf8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (body) VALUES ("will start Groonga!"); INSERT INTO diaries (body) VALUES ("starting Groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/drop_table_new_connection.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/drop_table_new_connection.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/drop_table_new_connection.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/drop_table_new_connection.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,46 @@ +# Copyright(C) 2015 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source include/not_embedded.inc +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +CREATE TABLE logs ( + id INT PRIMARY KEY AUTO_INCREMENT, + message TEXT, + FULLTEXT INDEX (message) +) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8; + +disable_query_log; +CONNECT(drop_connection, localhost, root); +enable_query_log; + +USE test; +DROP TABLE logs; + +disable_query_log; +CONNECTION default; +enable_query_log; + +CREATE TABLE logs ( + id INT PRIMARY KEY AUTO_INCREMENT, + message TEXT, + FULLTEXT INDEX (message) +) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8; + +DROP TABLE logs; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ content TEXT, FULLTEXT INDEX (content) ) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,6 @@ FULLTEXT INDEX (title), FULLTEXT INDEX (content) ) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, "富士山", "今日からはじめました。"); INSERT INTO diaries VALUES(2, "天気 1月1日", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/have_cp932.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/have_eucjpms.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ content text, FULLTEXT INDEX (title) ) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES (1, "Hello", "はじめました。"); INSERT INTO diaries VALUES (2, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -29,7 +29,11 @@ insert into t1 values (3, "aa ii ii ii oo"); insert into t1 values (4, "sa si su se so"); insert into t1 values (5, "ta ti ii ii to"); -insert into t2 (c1,c2) select c1,c2 from t1; +insert into t2 values (1, "aa ii uu ee oo"); +insert into t2 values (2, "ka ki ku ke ko"); +insert into t2 values (3, "aa ii ii ii oo"); +insert into t2 values (4, "sa si su se so"); +insert into t2 values (5, "ta ti ii ii to"); select * from t1; select * from t2; select * from t1 where c1=3; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,7 +23,6 @@ --enable_warnings create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "innodb"'; -show create table t1; insert into t1 values (1, "hoge hoge"); insert into t1 values (2, "fuga fuga"); insert into t1 values (3, "moge moge"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ title varchar(255), fulltext index (title) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; set autocommit=0; insert into diaries values(0, "2011-07-14"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_matched_order.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_matched_order.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_matched_order.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_matched_order.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_no_order.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_no_order.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_no_order.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_have_where_no_order.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -35,13 +35,16 @@ INSERT INTO texts VALUES (2, 'Hello2', 'World2'); INSERT INTO texts VALUES (3, 'Hello3', 'World3'); -SELECT id, - matched, - not_matched, - MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE), - MATCH(not_matched) AGAINST('+Hello' IN BOOLEAN MODE) - FROM texts - WHERE MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE); +SELECT * + FROM (SELECT id, + matched, + not_matched, + MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE), + MATCH(not_matched) AGAINST('+Hello' IN BOOLEAN MODE) + FROM texts + WHERE MATCH(matched) AGAINST('+Hello' IN BOOLEAN MODE)) + AS searched_texts + ORDER BY id; DROP TABLE texts; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_no_where_both_order.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_no_where_both_order.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_no_where_both_order.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_matched_and_not_matched_no_where_both_order.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -30,7 +30,6 @@ fulltext index (title), fulltext index (content) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; insert into diaries values(1, "Hello", "はじめました。"); insert into diaries values(2, "天気", "明日の富士山の天気について"); insert into diaries values(3, "富士山", "今日もきれい。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ fulltext index title_index (title), fulltext index body_index (body) ) comment = 'engine "innodb"' default charset utf8; -show create table diaries; insert into diaries (title, body) values ("survey", "will start groonga!"); insert into diaries (title, body) values ("groonga (1)", "starting groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -22,7 +22,6 @@ --enable_warnings create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "myisam"'; -show create table t1; insert into t1 values (1, "hoge hoge"); insert into t1 values (2, "fuga fuga"); insert into t1 values (3, "moge moge"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -23,14 +23,13 @@ SET NAMES UTF8; CREATE TABLE ft( - a INT, + a INT DEFAULT 0, b TEXT, c TEXT, PRIMARY KEY(a), FULLTEXT KEY ftx1(b), FULLTEXT KEY ftx2(c) )ENGINE=Mroonga DEFAULT CHARSET=UTF8 COMMENT = 'engine "innodb"'; -SHOW CREATE TABLE ft; INSERT INTO ft VALUES(1,'aaaaa','abcde'); INSERT INTO ft VALUES(2,'bbbbb','bcdef'); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET=UTF8; -SHOW CREATE TABLE diaries; START TRANSACTION; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); @@ -39,22 +38,32 @@ WHERE MATCH(body) AGAINST("groonga") ORDER BY id; +disable_query_log; CONNECT(search_connection, localhost, root); +enable_query_log; USE test; SELECT * FROM diaries WHERE MATCH(body) AGAINST("groonga") ORDER BY id; +disable_query_log; CONNECTION default; +enable_query_log; COMMIT; +disable_query_log; CONNECTION search_connection; +enable_query_log; SELECT * FROM diaries WHERE MATCH(body) AGAINST("groonga") ORDER BY id; +disable_query_log; DISCONNECT search_connection; +enable_query_log; +disable_query_log; CONNECTION default; +enable_query_log; SELECT * FROM diaries WHERE MATCH(body) AGAINST("groonga") ORDER BY id; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -29,7 +29,6 @@ location geometry NOT NULL, spatial key location_index (location) ) comment = 'engine "innodb"'; -show create table shops; insert into shops (name, location) values ('nezu-no-taiyaki', ST_GeomFromText('POINT(139.762573 35.720253)')); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -29,7 +29,6 @@ location geometry NOT NULL, spatial key location_index (location) ) comment = 'engine "innodb"'; -show create table shops; insert into shops (name, location) values ('sazare', diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,11 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/have_geometry.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc --source ../../include/mroonga/have_mroonga.inc --disable_warnings @@ -29,7 +29,6 @@ location geometry NOT NULL, spatial key location_index (location) ) comment = 'engine "innodb"'; -show create table shops; insert into shops (name, location) values ('sazare', diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -27,7 +27,6 @@ content text, fulltext index (content) ) default charset utf8 comment = 'engine "innodb"'; -show create table diaries; LOCK TABLE diaries WRITE; insert into diaries values(1, "今日からはじめました。"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -26,6 +26,8 @@ content TEXT NOT NULL, PRIMARY KEY (date, title) ) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "MyISAM"'; +# For MariaDB 10.2.3 +-- replace_result current_timestamp() CURRENT_TIMESTAMP SHOW CREATE TABLE diaries; INSERT INTO diaries (date, title, content) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mroonga.inc @@ -27,6 +27,8 @@ content TEXT NOT NULL, UNIQUE INDEX (date, title) ) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "MyISAM"'; +# For MariaDB 10.2.3 +-- replace_result current_timestamp() CURRENT_TIMESTAMP SHOW CREATE TABLE diaries; INSERT INTO diaries (date, title, content) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test 2017-12-21 15:48:52.000000000 +0000 @@ -1,5 +1,5 @@ # Copyright(C) 2013 Kenji Maruyama -# Copyright(C) 2013 Kouhei Sutou +# Copyright(C) 2013-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -13,10 +13,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source ../../include/mroonga/have_mysql.inc ---source ../../include/mroonga/have_version_56_or_later.inc +--source ../../include/mroonga/have_version_5_6_or_later.inc +--source ../../include/mroonga/skip_mysql_5_7_or_later.inc --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_mysql_5_7_or_later_disk_sweep.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_mysql_5_7_or_later_disk_sweep.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_mysql_5_7_or_later_disk_sweep.test 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_mysql_5_7_or_later_disk_sweep.test 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright(C) 2013 Kenji Maruyama +# Copyright(C) 2013-2016 Kouhei Sutou +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--source ../../include/mroonga/have_mysql_5_7_or_later.inc +--source include/have_innodb.inc +--source ../../include/mroonga/have_mroonga.inc + +--disable_warnings +DROP TABLE IF EXISTS integers; +--enable_warnings + +SET optimizer_switch='mrr_cost_based=off'; + +CREATE TABLE integers ( + id INT PRIMARY KEY AUTO_INCREMENT, + value INT, + KEY (value) +) COMMENT='engine "InnoDB"'; + +INSERT INTO integers (value) VALUES (0), (1), (2), (3); + +EXPLAIN SELECT * FROM integers + WHERE value IN (0, 2); + +SELECT * FROM integers + WHERE value IN (0, 2); + +DROP TABLE integers; + +--source ../../include/mroonga/have_mroonga_deinit.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_direction.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_direction.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_direction.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_direction.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_order_by_primary_key.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_order_by_primary_key.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_order_by_primary_key.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_order_by_primary_key.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/performance_schema.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/performance_schema.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/performance_schema.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/performance_schema.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,10 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc +--source ../../include/mroonga/skip_solaris.inc --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_mroonga_helper.inc @@ -28,7 +29,6 @@ body TEXT, FULLTEXT INDEX body_index (body) ) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); @@ -36,13 +36,7 @@ SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting"); ---remove_file $MYSQLD_DATADIR/repair_test.mrn ---remove_file $MYSQLD_DATADIR/repair_test.mrn.001 ---remove_file $MYSQLD_DATADIR/repair_test.mrn.0000000 ---remove_file $MYSQLD_DATADIR/repair_test.mrn.0000105 ---remove_file $MYSQLD_DATADIR/repair_test.mrn.0000106 ---remove_file $MYSQLD_DATADIR/repair_test.mrn.0000107 ---remove_file $MYSQLD_DATADIR/repair_test.mrn.0000107.c +--remove_files_wildcard $MYSQLD_DATADIR repair_test.mrn* FLUSH TABLES; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,10 +12,11 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source include/not_embedded.inc +--source ../../include/mroonga/skip_solaris.inc --source ../../include/mroonga/have_mroonga.inc --source ../../include/mroonga/have_mroonga_helper.inc @@ -28,7 +29,6 @@ body TEXT, FULLTEXT INDEX body_index (body) ) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); @@ -36,14 +36,11 @@ SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting"); ---remove_file $MYSQLD_DATADIR/repair_test.mrn.0000106 +--remove_file $MYSQLD_DATADIR/repair_test.mrn.000010A FLUSH TABLES; -# Error ER_CANT_OPEN_FILE syscall error 'repair_test.mrn.0000104' (No such file or directory) -# The (Error 0)[0]" replaces is for Solaris -# ---replace_result "(Error 0)[0]" "(No such file or directory)" +# Error ER_CANT_OPEN_FILE system call error: No such file or directory: failed to open path: --error ER_CANT_OPEN_FILE SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/skip_osx.inc @@ -27,7 +27,6 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT ) DEFAULT CHARSET=UTF8 COMMENT = 'ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title) VALUES ("clear day"); INSERT INTO diaries (title) VALUES ("rainy day"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -31,22 +31,32 @@ INSERT INTO simple_table (id) VALUES (1),(2); +disable_query_log; CONNECT(second_connection, localhost, root); +enable_query_log; USE test; START TRANSACTION; INSERT INTO simple_table (id) VALUES (3); +disable_query_log; CONNECTION default; +enable_query_log; SELECT * FROM simple_table; +disable_query_log; CONNECTION second_connection; +enable_query_log; COMMIT; +disable_query_log; CONNECTION default; +enable_query_log; SELECT * FROM simple_table; DROP TABLE simple_table; +disable_query_log; DISCONNECT second_connection; +enable_query_log; SET GLOBAL query_cache_size = @tmp_query_cache_size; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -28,7 +28,6 @@ FULLTEXT INDEX title_index (title), FULLTEXT INDEX body_index (body) ) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!"); INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -32,7 +32,6 @@ FULLTEXT INDEX(content), KEY(day) ) DEFAULT CHARSET UTF8 COMMENT = 'engine "innodb"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日からはじめました。"); INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日の富士山の天気について"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test 2017-12-21 15:48:52.000000000 +0000 @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ body text, fulltext index body_index (body) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; insert into diaries (body) values ("will start groonga!"); insert into diaries (body) values ("starting groonga..."); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ body text, fulltext index body_index (body) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; insert into diaries (body) values ("will start groonga!"); select * from diaries; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -26,7 +26,6 @@ body text, fulltext index body_index (body) ) default charset utf8 COMMENT = 'engine "innodb"'; -show create table diaries; insert into diaries (body) values ("will start groonga!"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -25,9 +25,8 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, - FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' + FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); @@ -41,11 +40,17 @@ SET GLOBAL mroonga_match_escalation_threshold = -1; --enable_warnings +disable_query_log; CONNECT(search_connection, localhost, root); +enable_query_log; USE test; + SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE); + +disable_query_log; DISCONNECT search_connection; CONNECTION default; +enable_query_log; SET GLOBAL mroonga_match_escalation_threshold = DEFAULT; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test --- mariadb-10.1-10.1.25/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test 2017-12-21 15:48:52.000000000 +0000 @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --source include/have_innodb.inc --source ../../include/mroonga/have_mroonga.inc @@ -25,9 +25,8 @@ id INT PRIMARY KEY AUTO_INCREMENT, title TEXT, tags TEXT, - FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"' + FULLTEXT INDEX tags_index (tags) COMMENT 'tokenizer "TokenDelimit"' ) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"'; -SHOW CREATE TABLE diaries; INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install"); INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install"); diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/apt/build-deb.sh mariadb-10.1-10.1.30/storage/mroonga/packages/apt/build-deb.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/apt/build-deb.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/apt/build-deb.sh 2017-12-21 15:48:52.000000000 +0000 @@ -2,8 +2,6 @@ LANG=C -mysql_server_package=mysql-server - run() { "$@" @@ -15,14 +13,37 @@ . /vagrant/tmp/env.sh +code_name=$(lsb_release --codename --short) +case "${MYSQL_VARIANT}" in + mariadb-*) + case "${code_name}" in + stretch) + mysql_server_package=mariadb-server-10.1 + MYSQL_VARIANT=mariadb-10.1 + ;; + *) + mysql_server_package=mariadb-server-${MYSQL_VARIANT##mariadb-} + ;; + esac + DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libmariadb-client-lgpl-dev" + DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libmariadbd-dev" + ;; + *) + mysql_server_package=mysql-server-${MYSQL_VARIANT} + DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libmysqlclient-dev" + DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libmysqld-dev" + ;; +esac + grep '^deb ' /etc/apt/sources.list | \ sed -e 's/^deb /deb-src /' > /etc/apt/sources.list.d/base-source.list +run sudo sed -i'' -e 's/httpredir/ftp.jp/g' /etc/apt/sources.list + run apt-get update run apt-get install -y lsb-release distribution=$(lsb_release --id --short | tr 'A-Z' 'a-z') -code_name=$(lsb_release --codename --short) case "${distribution}" in debian) component=main @@ -59,16 +80,23 @@ run apt-get build-dep -y ${mysql_server_package} run mkdir -p build -run cp /vagrant/tmp/${PACKAGE}-${VERSION}.tar.gz \ - build/${PACKAGE}_${VERSION}.orig.tar.gz run cd build -run tar xfz ${PACKAGE}_${VERSION}.orig.tar.gz -run cd ${PACKAGE}-${VERSION}/ +run tar xfz /vagrant/tmp/${PACKAGE}-${VERSION}.tar.gz +run mv ${PACKAGE}-${VERSION} ${PACKAGE}-${MYSQL_VARIANT}-${VERSION} +run tar cfz ${PACKAGE}-${MYSQL_VARIANT}_${VERSION}.orig.tar.gz \ + ${PACKAGE}-${MYSQL_VARIANT}-${VERSION} +run cd ${PACKAGE}-${MYSQL_VARIANT}-${VERSION}/ run cp -rp /vagrant/tmp/debian debian # export DEB_BUILD_OPTIONS=noopt -MYSQL_PACKAGE_INFO=$(apt-cache show mysql-server | grep Version | sort | tail -1) +MYSQL_PACKAGE_INFO=$(apt-cache show ${mysql_server_package} | + grep Version | + sort | + tail -1) MYSQL_PACKAGE_VERSION=${MYSQL_PACKAGE_INFO##Version: } -sed -i "s/MYSQL_VERSION/$MYSQL_PACKAGE_VERSION/" debian/control +sed -i'' \ + -e "s/MYSQL_VERSION/$MYSQL_PACKAGE_VERSION/g" \ + -e "s/MARIADB_VERSION/$MYSQL_PACKAGE_VERSION/g" \ + debian/control run debuild -us -uc run cd - diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/apt/env.sh.in mariadb-10.1-10.1.30/storage/mroonga/packages/apt/env.sh.in --- mariadb-10.1-10.1.25/storage/mroonga/packages/apt/env.sh.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/apt/env.sh.in 2017-12-21 15:48:52.000000000 +0000 @@ -7,8 +7,9 @@ pkg-config libmecab-dev mecab-utils -libmysqlclient-dev -libmysqld-dev +gdb +libxml2-dev +unixodbc-dev libssl-dev groonga-normalizer-mysql wget diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/apt/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/packages/apt/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/packages/apt/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/apt/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -1,11 +1,12 @@ REPOSITORIES_PATH = repositories DISTRIBUTIONS = debian ARCHITECTURES = i386 amd64 -CODE_NAMES = wheezy jessie +CODE_NAMES = jessie stretch +MYSQL_VARIANTS = 5.5 mariadb-10.0 all: -release: build sign-packages update-repository sign-repository upload +release: download build sign-packages update-repository sign-repository upload remove-existing-packages: for distribution in $(DISTRIBUTIONS); do \ @@ -45,21 +46,44 @@ build: build-package-deb -build-package-deb: prepare-build-package-deb +build-package-deb: source env.sh vagrant destroy --force - for architecture in $(ARCHITECTURES); do \ - for code_name in $(CODE_NAMES); do \ - id=debian-$$code_name-$$architecture; \ - vagrant up $$id || exit 1; \ - vagrant destroy --force $$id; \ + for variant in $(MYSQL_VARIANTS); do \ + cp env.sh tmp/; \ + echo "MYSQL_VARIANT=$${variant}" >> tmp/env.sh; \ + for architecture in $(ARCHITECTURES); do \ + for code_name in $(CODE_NAMES); do \ + rm -rf tmp/debian; \ + if [ $${variant} = "5.5" -a $${code_name} = "stretch" ]; then \ + continue; \ + fi; \ + if [ $${code_name} = "stretch" ]; then \ + cp -rp $(srcdir)/../debian-mariadb-10.0 tmp/debian; \ + for f in `find tmp/debian -maxdepth 2 -type f`; do \ + RENAMED=`echo $$f | sed 's/10.0/10.1/'`; \ + sed -i'' 's/10.0/10.1/g' $${f}; \ + if [ $${f} = $$RENAMED ]; then \ + continue; \ + fi; \ + mv $${f} $$RENAMED; \ + done; \ + if [ $${architecture} = "amd64" ]; then \ + sed -i'' 's,lib/mysql/,lib/x86_64-linux-gnu/mariadb18/,' \ + tmp/debian/mariadb-server-10.1-mroonga.install; \ + elif [ $${architecture} = "i386" ]; then \ + sed -i'' 's,lib/mysql/,lib/i386-linux-gnu/mariadb18/,' \ + tmp/debian/mariadb-server-10.1-mroonga.install; \ + fi; \ + else \ + cp -rp $(srcdir)/../debian-$${variant} tmp/debian; \ + fi; \ + id=debian-$$code_name-$$architecture; \ + vagrant up $$id || exit 1; \ + vagrant destroy --force $$id; \ + done; \ done; \ done -prepare-build-package-deb: source env.sh - cp env.sh tmp/ - rm -rf tmp/debian - cp -rp $(srcdir)/../debian tmp/ - source: tmp/$(PACKAGE)-$(VERSION).tar.gz tmp/$(PACKAGE)-$(VERSION).tar.gz: $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/apt/sign-packages.sh mariadb-10.1-10.1.30/storage/mroonga/packages/apt/sign-packages.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/apt/sign-packages.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/apt/sign-packages.sh 2017-12-21 15:48:52.000000000 +0000 @@ -23,7 +23,7 @@ for code_name in ${CODES}; do case ${code_name} in - squeeze|wheezy|jessie|unstable) + jessie|stretch|unstable) distribution=debian ;; *) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/apt/sign-repository.sh mariadb-10.1-10.1.30/storage/mroonga/packages/apt/sign-repository.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/apt/sign-repository.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/apt/sign-repository.sh 2017-12-21 15:48:52.000000000 +0000 @@ -23,7 +23,7 @@ for code_name in ${CODES}; do case ${code_name} in - squeeze|wheezy|jessie|unstable) + jessie|stretch|unstable) distribution=debian ;; *) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/apt/update-repository.sh mariadb-10.1-10.1.30/storage/mroonga/packages/apt/update-repository.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/apt/update-repository.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/apt/update-repository.sh 2017-12-21 15:48:52.000000000 +0000 @@ -109,7 +109,7 @@ for code_name in ${CODES}; do case ${code_name} in - squeeze|wheezy|jessie|unstable) + jessie|stretch|unstable) distribution=debian component=main ;; diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/apt/Vagrantfile mariadb-10.1-10.1.30/storage/mroonga/packages/apt/Vagrantfile --- mariadb-10.1-10.1.25/storage/mroonga/packages/apt/Vagrantfile 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/apt/Vagrantfile 2017-12-21 15:48:52.000000000 +0000 @@ -7,30 +7,43 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| vms = [ { - :id => "debian-wheezy-i386", - :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_debian-7.8-i386_chef-provisionerless.box", + :id => "debian-jessie-i386", + :box => "bento/debian-8.9-i386", }, { - :id => "debian-wheezy-amd64", - :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_debian-7.8_chef-provisionerless.box", + :id => "debian-jessie-amd64", + :box => "bento/debian-8.9", }, { - :id => "debian-jessie-i386", - :box_url => "http://packages.groonga.org/tmp/opscode_debian-8.0-i386_chef-provisionerless.box", + :id => "debian-stretch-i386", + :box => "bento/debian-9.1-i386", }, { - :id => "debian-jessie-amd64", - :box_url => "http://packages.groonga.org/tmp/opscode_debian-8.0_chef-provisionerless.box", + :id => "debian-stretch-amd64", + :box => "bento/debian-9.1", }, ] vms.each do |vm| config.vm.define(vm[:id]) do |node| - node.vm.box = vm[:id] - node.vm.box_url = vm[:box_url] + # Use official box + node.vm.box = vm[:box] if vm[:box] + # Use box and box_url until official box is released + node.vm.box = vm[:id] if vm[:box_url] + node.vm.box_url = vm[:box_url] if vm[:box_url] node.vm.provision(:shell, :path => "build-deb.sh") node.vm.provider("virtualbox") do |virtual_box| - virtual_box.memory = 768 + system_n_cpus = 1 + if File.exist?("/proc/cpuinfo") + system_n_cpus = File.readlines("/proc/cpuinfo").grep(/^processor/).size + end + if system_n_cpus > 1 + vm_n_cpus = system_n_cpus / 2 + else + vm_n_cpus = 1 + end + virtual_box.cpus = (ENV["VM_CPUS"] || vm_n_cpus).to_i + virtual_box.memory = (ENV["VM_MEMORY"] || 768).to_i end end end diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/check-utility.sh mariadb-10.1-10.1.30/storage/mroonga/packages/check-utility.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/check-utility.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/check-utility.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,665 +0,0 @@ -#!/bin/sh - -# Usage: check-utility.sh [--install-groonga] -# [--check-install] -# [--check-address] -# [--enable-repository] -# -# CODES="squeeze wheezy unstable lucid natty oneiric precise" -# DISTRIBUTIONS="centos fedora" - -CHROOT_ROOT=/var/lib/chroot -CHECK_ADDRESS=0 -CHECK_INSTALL=0 -CHECK_INSTALL_PACKAGE=mysql-server-mroonga -CHECK_BUILD=0 -CHECK_DEPENDS=0 -CHECK_PROVIDES=0 -ENABLE_REPOSITORY=0 -DISABLE_REPOSITORY=0 -INSTALL_SCRIPT=0 -INSTALL_MROONGA=0 -UNINSTALL_MROONGA=0 - -common_deb_procedure () -{ - for code in $CODES; do - for arch in $DEB_ARCHITECTURES; do - root_dir=$CHROOT_ROOT/$code-$arch - eval $1 $code $arch $root_dir - done - done -} - -common_rpm_procedure () -{ - for dist in $DISTRIBUTIONS; do - case $dist in - "fedora") - DISTRIBUTIONS_VERSION="19" - ;; - "centos") - DISTRIBUTIONS_VERSION="5 6" - ;; - esac - for ver in $DISTRIBUTIONS_VERSION; do - for arch in $RPM_ARCHITECTURES; do - root_dir=$CHROOT_ROOT/$dist-$ver-$arch - eval $1 $dist $arch $ver $root_dir - done - done - done -} - -echo_packages_repository_address () -{ - root_dir=$1 - code=$2 - arch=$3 - address=`grep "packages.groonga.org" $root_dir/etc/hosts | grep -v "#"` - if [ -z "$address" ]; then - echo "$code-$arch: default" - else - echo "$code-$arch: $address" - fi -} - -setup_distributions () -{ - if [ -z "$DISTRIBUTIONS" ]; then - DISTRIBUTIONS="centos fedora" - fi -} - -setup_rpm_architectures () -{ - if [ -z "$RPM_ARCHITECTURES" ]; then - RPM_ARCHITECTURES="i386 x86_64" - fi -} - -setup_codes () -{ - if [ -z "$CODES" ]; then - CODES="squeeze wheezy jessie unstable lucid precise quantal raring" - fi -} -setup_deb_architectures () -{ - if [ -z "$DEB_ARCHITECTURES" ]; then - DEB_ARCHITECTURES="i386 amd64" - fi -} - -check_packages_repository_address () -{ - common_deb_procedure "check_packages_deb_repository_address" - common_rpm_procedure "check_packages_rpm_repository_address" -} - -check_packages_deb_repository_address () -{ - code=$1 - arch=$2 - root_dir=$4 - echo_packages_repository_address "$root_dir" "$code" "$arch" -} - -check_packages_rpm_repository_address () -{ - dist=$1 - arch=$2 - ver=$3 - root_dir=$4 - echo_packages_repository_address "$root_dir" "$dist-$ver" "$arch" -} - -host_address () -{ - ifconfig_result=`LANG=C /sbin/ifconfig wlan0` - inet_addr=`echo "$ifconfig_result" | grep "inet addr:192"` - address=`echo $inet_addr | ruby -ne '/inet addr:(.+?)\s/ =~ $_ && puts($1)'` - HOST_ADDRESS=$address -} - -check_build_packages () -{ - common_deb_procedure "check_build_deb_packages" - common_rpm_procedure "check_build_rpm_packages" -} - -check_build_deb_packages () -{ - code=$1 - arch=$2 - BASE_VERSION=`cat ../version` - RESULT_SET=`find apt/repositories -name "*$BASE_VERSION*" | grep $code | grep $arch` - if [ -z "$RESULT_SET" ]; then - printf "%8s %5s %s => 0 deb\n" $code $arch $BASE_VERSION - else - PACKAGE_COUNT=`find apt/repositories -name "*$BASE_VERSION*" | grep $code | grep $arch | wc | awk '{print \$1}'` - printf "%8s %5s %s => %2d debs\n" $code $arch $BASE_VERSION $PACKAGE_COUNT - fi -} - -check_build_rpm_packages () -{ - dist=$1 - arch=$2 - ver=$3 - BASE_VERSION=`cat ../version` - FIND_PATH=yum/repositories/$dist/$ver/$arch - RESULT_SET=`find $FIND_PATH -name "*$BASE_VERSION*"` - if [ -z "$RESULT_SET" ]; then - printf "%8s %6s %s => 0 rpm\n" $dist$ver $arch $BASE_VERSION - else - PACKAGE_COUNT=`find $FIND_PATH -name "*$BASE_VERSION*" | wc -l` - printf "%8s %6s %s => %2d rpms\n" $dist$ver $arch $BASE_VERSION $PACKAGE_COUNT - fi -} - -check_depends_packages () -{ - common_deb_procedure "check_depends_deb_packages" - common_rpm_procedure "check_depends_rpm_packages" -} - -check_depends_deb_packages () -{ - code=$1 - arch=$2 - BASE_VERSION=`cat ../version` - FIND_PATH=apt/repositories/*/pool/$code - RESULT_SET=`find $FIND_PATH -name "*$BASE_VERSION*.deb"` - if [ -z "$RESULT_SET" ]; then - printf "%8s %5s %s => 404 deb\n" $code $arch $BASE_VERSION - else - for pkg in $RESULT_SET; do - DEB_NAME=`basename $pkg` - DEPENDS=`dpkg -I $pkg | grep "Depends"` - printf "%8s %5s %s => %s\n" $code $arch $DEB_NAME "$DEPENDS" - done - fi -} - -check_depends_rpm_packages () -{ - dist=$1 - arch=$2 - ver=$3 - BASE_VERSION=`cat ../version` - FIND_PATH=yum/repositories/$dist/$ver/$arch - RESULT_SET=`find $FIND_PATH -name "*$BASE_VERSION*"` - if [ -z "$RESULT_SET" ]; then - printf "%8s %6s %s => 404 rpm\n" $dist$ver $arch $BASE_VERSION - else - for pkg in $RESULT_SET; do - RPM_NAME=`basename $pkg` - DEPENDS=`rpm -qp --requires $pkg | grep -i "mysql" | tr -t '\n' ' '` - printf "%9s %6s %s => %s\n" $dist$ver $arch $RPM_NAME "$DEPENDS" - done - fi -} - -check_provided_mysql_packages () -{ - common_deb_procedure "check_provided_mysql_deb_packages" - common_rpm_procedure "check_provided_mysql_rpm_packages" - for code in $CODES; do - echo $code - cat tmp/$code-amd64-mysql-server.txt - done - for dist in $DISTRIBUTIONS; do - echo $dist - cat tmp/$dist-x86_64-mysql-server.txt - done -} - -check_provided_mysql_deb_packages () -{ - code=$1 - arch=$2 - root_dir=$3 - cat > tmp/check-provided-mysql.sh < /dev/null -apt-cache show mysql-server | grep "Version" | head -1 > /tmp/$code-$arch-mysql-server.txt -EOF - if [ -d $root_dir ]; then - CHECK_SCRIPT=check-provided-mysql.sh - echo "copy check script $CHECK_SCRIPT to $root_dir/tmp" - sudo rm -f $root_dir/tmp/$CHECK_SCRIPT - cp tmp/$CHECK_SCRIPT $root_dir/tmp - sudo chmod 755 $root_dir/tmp/$CHECK_SCRIPT - sudo chname $code-$arch chroot $root_dir /tmp/$CHECK_SCRIPT - cp $root_dir/tmp/$code-$arch-mysql-server.txt tmp - fi -} - -check_provided_mysql_rpm_packages () -{ - dist=$1 - arch=$2 - ver=$3 - root_dir=$4 - cat > tmp/check-provided-mysql.sh < /dev/null -yum info mysql-server | grep "Version" > /tmp/$code-$arch-mysql-server.txt -EOF - if [ -d $root_dir ]; then - CHECK_SCRIPT=check-provided-mysql.sh - echo "copy check script $CHECK_SCRIPT to $root_dir/tmp" - sudo rm -f $root_dir/tmp/$CHECK_SCRIPT - cp tmp/$CHECK_SCRIPT $root_dir/tmp - sudo chmod 755 $root_dir/tmp/$CHECK_SCRIPT - sudo chname $code-$arch chroot $root_dir /tmp/$CHECK_SCRIPT - cp $root_dir/tmp/$code-$arch-mysql-server.txt tmp - fi -} - -check_installed_mroonga_packages () -{ - common_deb_procedure "check_installed_mroonga_deb_packages" - common_rpm_procedure "check_installed_mroonga_rpm_packages" -} - -check_installed_mroonga_deb_packages () -{ - code=$1 - arch=$2 - root_dir=$3 - cat > tmp/check-deb-mroonga.sh < tmp/check-rpm-mroonga.sh < tmp/install-aptitude-mroonga.sh < tmp/install-aptget-mroonga.sh < tmp/install-centos5-mroonga.sh < tmp/install-centos6-mroonga.sh < tmp/install-fedora-mroonga.sh < $UNINSTALL_SCRIPT < tmp/$UNINSTALL_SCRIPT < tmp/enable-repository.sh < /tmp/hosts -echo "$HOST_ADDRESS packages.groonga.org" >> /tmp/hosts -cp -f /tmp/hosts /etc/hosts -EOF - common_deb_procedure "enable_temporaly_mroonga_deb_repository" - common_rpm_procedure "enable_temporaly_mroonga_rpm_repository" - check_packages_repository_address -} - -enable_temporaly_mroonga_deb_repository () -{ - code=$1 - arch=$2 - root_dir=$4 - today=`date '+%Y%m%d.%s'` - if [ -d $root_dir ]; then - sudo cp $root_dir/etc/hosts $root_dir/etc/hosts.$today - sudo cp tmp/enable-repository.sh $root_dir/tmp - sudo chname $code-$arch chroot $root_dir /tmp/enable-repository.sh - fi -} - -enable_temporaly_mroonga_rpm_repository () -{ - dist=$1 - arch=$2 - ver=$3 - root_dir=$4 - today=`date '+%Y%m%d.%s'` - if [ -d $root_dir ]; then - sudo cp $root_dir/etc/hosts $root_dir/etc/hosts.$today - sudo cp tmp/enable-repository.sh $root_dir/tmp - sudo chname $code-$arch chroot $root_dir /tmp/enable-repository.sh - fi -} - -disable_temporaly_mroonga_repository () -{ - cat > tmp/disable-repository.sh < /tmp/hosts -cp -f /tmp/hosts /etc/hosts -EOF - common_deb_procedure "disable_temporaly_mroonga_deb_repository" - common_rpm_procedure "disable_temporaly_mroonga_rpm_repository" - check_packages_repository_address -} - -disable_temporaly_mroonga_deb_repository () -{ - code=$1 - arch=$2 - root_dir=$4 - DISABLE_SCRIPT=disable-repository.sh - today=`date '+%Y%m%d.%s'` - if [ -d $root_dir ]; then - sudo cp $root_dir/etc/hosts $root_dir/etc/hosts.$today - cp tmp/$DISABLE_SCRIPT $root_dir/tmp - chmod 755 $root_dir/tmp/$DISABLE_SCRIPT - sudo chname $code-$arch chroot $root_dir /tmp/$DISABLE_SCRIPT - fi - -} - -disable_temporaly_mroonga_rpm_repository () -{ - dist=$1 - arch=$2 - ver=$3 - root_dir=$4 - DISABLE_SCRIPT=disable-repository.sh - today=`date '+%Y%m%d.%s'` - if [ -d $root_dir ]; then - sudo cp $root_dir/etc/hosts $root_dir/etc/hosts.$today - cp tmp/$DISABLE_SCRIPT $root_dir/tmp - chmod 755 $root_dir/tmp/$DISABLE_SCRIPT - sudo chname $code-$arch chroot $root_dir /tmp/$DISABLE_SCRIPT - fi -} - -host_address -echo $HOST_ADDRESS - -while [ $# -ne 0 ]; do - case $1 in - --check-install) - CHECK_INSTALL=1 - shift - if [ ! -z "$1" ]; then - case $1 in - groonga|mroonga|roonga|mecab|mysql) - CHECK_INSTALL_PACKAGE=$1 - ;; - *) - ;; - esac - fi - ;; - --check-address) - CHECK_ADDRESS=1 - shift - ;; - --check-depends) - CHECK_DEPENDS=1 - shift - ;; - --check-provides) - CHECK_PROVIDES=1 - shift - ;; - --check-build) - CHECK_BUILD=1 - shift - ;; - --enable-repository) - ENABLE_REPOSITORY=1 - shift - ;; - --disable-repository) - DISABLE_REPOSITORY=1 - shift - ;; - --install-mroonga) - INSTALL_MROONGA=1 - shift - ;; - --uninstall-mroonga) - UNINSTALL_MROONGA=1 - shift - ;; - --code) - shift - if [ "$1" = "all" ]; then - setup_codes - else - CODES=$1 - fi - shift - ;; - --code-arch) - shift - if [ "$1" = "all" ]; then - setup_deb_architectures - else - DEB_ARCHITECTURES=$1 - fi - shift - ;; - --dist) - shift - if [ "$1" = "all" ]; then - setup_distributions - else - DISTRIBUTIONS=$1 - fi - shift - ;; - --dist-arch) - shift - if [ "$1" = "all" ]; then - setup_rpm_architectures - else - RPM_ARCHITECTURES=$1 - fi - shift - ;; - *) - shift - ;; - esac -done - -mkdir -p tmp -setup_deb_architectures -setup_rpm_architectures - -if [ $CHECK_INSTALL -ne 0 ]; then - check_installed_mroonga_packages -fi -if [ $CHECK_ADDRESS -ne 0 ]; then - check_packages_repository_address -fi -if [ $CHECK_BUILD -ne 0 ]; then - check_build_packages -fi -if [ $CHECK_DEPENDS -ne 0 ]; then - check_depends_packages -fi -if [ $CHECK_PROVIDES -ne 0 ]; then - check_provided_mysql_packages -fi -if [ $ENABLE_REPOSITORY -ne 0 ]; then - enable_temporaly_mroonga_repository -fi -if [ $DISABLE_REPOSITORY -ne 0 ]; then - disable_temporaly_mroonga_repository -fi -if [ $INSTALL_MROONGA -ne 0 ]; then - install_mroonga_packages -fi -if [ $UNINSTALL_MROONGA -ne 0 ]; then - uninstall_mroonga_packages -fi - diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/apparmor/mysql-server-mroonga mariadb-10.1-10.1.30/storage/mroonga/packages/debian/apparmor/mysql-server-mroonga --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/apparmor/mysql-server-mroonga 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/apparmor/mysql-server-mroonga 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -/usr/lib/groonga/plugins/ r, -/usr/lib/groonga/plugins/** rm, -/etc/mecabrc r, -/var/lib/mecab/dic/** r, -#include diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/changelog mariadb-10.1-10.1.30/storage/mroonga/packages/debian/changelog --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/changelog 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/changelog 1970-01-01 00:00:00.000000000 +0000 @@ -1,415 +0,0 @@ -mroonga (5.04-1) unstable; urgency=low - - * New upstream release. - - -- Masafumi Yokoyama Mon, 29 Jun 2015 00:00:00 +0900 - -mroonga (5.03-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Fri, 29 May 2015 00:00:00 +0900 - -mroonga (5.02-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Wed, 29 Apr 2015 00:00:00 +0900 - -mroonga (5.01-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sun, 29 Mar 2015 00:00:00 +0900 - -mroonga (5.00-1) unstable; urgency=low - - * New upstream release. - - -- Mon, 09 Feb 2015 00:00:00 +0900 - -mroonga (4.10-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Thu, 29 Jan 2015 00:00:00 +0900 - -mroonga (4.09-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Mon, 29 Dec 2014 00:00:00 +0900 - -mroonga (4.08-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sat, 29 Nov 2014 00:00:00 +0900 - -mroonga (4.07-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Wed, 29 Oct 2014 00:00:00 +0900 - -mroonga (4.06-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Mon, 29 Sep 2014 00:00:00 +0900 - -mroonga (4.05-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Fri, 29 Aug 2014 00:00:00 +0900 - -mroonga (4.04-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Tue, 29 Jul 2014 00:00:00 +0900 - -mroonga (4.03-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Thu, 29 May 2014 00:00:00 +0900 - -mroonga (4.02-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Tue, 29 Apr 2014 00:00:00 +0900 - -mroonga (4.01-2) unstable; urgency=low - - * Built for mysql-server 5.5.37 - - -- HAYASHI Kentaro Mon, 28 Apr 2014 00:00:00 +0900 - -mroonga (4.01-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sat, 29 Mar 2014 00:00:00 +0900 - -mroonga (4.00-2) unstable; urgency=low - - * Built for mysql-server 5.5.35+dfsg-2 on Debian jessie - * Built for mysql-server 5.5.35+dfsg-2 on Debian sid - - -- HAYASHI Kentaro Thu, 06 Mar 2014 00:00:00 +0900 - -mroonga (4.00-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sun, 09 Feb 2014 00:00:00 +0900 - -mroonga (3.12-2) unstable; urgency=low - - * Built for mysql-server updates on Ubuntu 12.04,12.10, and 13.10. - - -- HAYASHI Kentaro Wed, 29 Jan 2014 13:12:56 +0900 - -mroonga (3.12-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Wed, 29 Jan 2014 00:00:00 +0900 - -mroonga (3.11-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sun, 29 Dec 2013 00:00:00 +0900 - -mroonga (3.10-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Fri, 29 Nov 2013 00:00:00 +0900 - -mroonga (3.09-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Tue, 29 Oct 2013 00:00:00 +0900 - -mroonga (3.08-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sun, 29 Sep 2013 00:00:00 +0900 - -mroonga (3.07-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Thu, 29 Aug 2013 00:00:00 +0900 - -mroonga (3.06-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Mon, 29 Jul 2013 00:00:00 +0900 - -mroonga (3.05-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sat, 29 Jun 2013 00:00:00 +0900 - -mroonga (3.04-2) unstable; urgency=low - - * Built for mysql-server 5.5.31-0ubuntu0.12.04.2 on Ubuntu 12.04 (precise) - - -- HAYASHI Kentaro Thu, 13 Jun 2013 00:00:00 +0900 - -mroonga (3.04-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Wed, 29 May 2013 00:00:00 +0900 - -mroonga (3.03-2) unstable; urgency=low - - * Built for mysql-server 5.5.31+dfsg-0+wheezy1 on Debian wheezy - * Built for mysql-server 5.5.31+dfsg-1 on Debian unstable - - -- HAYASHI Kentaro Thu, 16 May 2013 00:00:00 +0900 - -mroonga (3.03-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Mon, 29 Apr 2013 00:00:00 +0900 - -mroonga (3.02-2) unstable; urgency=low - - * Built for mysql-server 5.5.29-0ubuntu0.12.04.2 on Ubuntu 12.04 (precise) - - -- HAYASHI Kentaro Fri, 29 Mar 2013 22:15:39 +0900 - -mroonga (3.02-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Fri, 29 Mar 2013 00:00:00 +0900 - -mroonga (3.01-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Thu, 28 Feb 2013 00:00:00 +0900 - -mroonga (3.00-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sat, 09 Feb 2013 00:00:00 +0900 - -mroonga (2.10-2) unstable; urgency=low - - * Built for mysql-server 5.5.29+dfsg-1 on Debian/unstable. - * Built for mysql-server 5.1.67-0ubuntu0.10.04.1 on Ubuntu 10.04(lucid). - * Built for mysql-server 5.1.67-0ubuntu0.11.10.1 on Ubuntu 11.10(oneiric). - * Built for mysql-server 5.5.29-0ubuntu0.12.04.1 on Ubuntu 12.04(precise). - * Built for mysql-server 5.5.29-0ubuntu0.12.10.1 on Ubuntu 12.10(quantal). - - -- HAYASHI Kentaro Thu, 24 Jan 2013 10:28:16 +0900 - -mroonga (2.10-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sat, 29 Dec 2012 00:00:00 +0900 - -mroonga (2.09-2) unstable; urgency=low - - * Built for mysql-server 5.5.28-0ubuntu0.12.10.2 on Ubuntu 12.10. - Reported by @watanabekiyokaz - - -- HAYASHI Kentaro Wed, 12 Dec 2012 13:28:00 +0900 - -mroonga (2.09-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Thu, 29 Nov 2012 00:00:00 +0900 - -mroonga (2.08-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Mon, 29 Oct 2012 00:00:00 +0900 - -mroonga (2.07-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sat, 29 Sep 2012 00:00:00 +0900 - -mroonga (2.06-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Wed, 29 Aug 2012 00:00:00 +0900 - -mroonga (2.05-1) unstable; urgency=low - - * New upstream release. - - -- HAYASHI Kentaro Sun, 29 Jul 2012 00:00:00 +0900 - -mroonga (2.04-1) unstable; urgency=low - - * New upstream release. - * Ensure deleting mroonga plugin before install. - Suggested by Kazuhiro Isobe. Thanks!!! - - -- Kouhei Sutou Fri, 29 Jun 2012 00:00:00 +0900 - -mroonga (2.03-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Tue, 29 May 2012 00:00:00 +0900 - -mroonga (2.02-1) unstable; urgency=low - - * New upstream release. - * Require groonga >= 2.0.2. - - -- Kouhei Sutou Sun, 29 Apr 2012 00:00:00 +0900 - -mroonga (2.01-1) unstable; urgency=low - - * New upstream release. - * Ensure plugin is uninstalled by closing all tables use mroonga. - - -- Kouhei Sutou Thu, 29 Mar 2012 00:00:00 +0900 - -mroonga (2.00-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Wed, 29 Feb 2012 00:00:00 +0900 - -mroonga (1.20-1) unstable; urgency=low - - * New upstream release. - * Add mysql-server-mroonga-compatible package for "groonga" storage engine. - - -- Kouhei Sutou Sun, 29 Jan 2012 00:00:00 +0900 - -mroonga (1.11-1) unstable; urgency=low - - * New upstream release. - * Change apparmor configuration file name: - mysql-server-groonga -> mysql-server-mroonga - - -- Kouhei Sutou Thu, 29 Dec 2011 00:00:00 +0900 - -mroonga (1.10-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Sat, 29 Oct 2011 00:00:00 +0900 - -groonga-storage-engine (1.0.0-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Thu, 29 Sep 2011 00:00:00 +0900 - -groonga-storage-engine (0.9-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Mon, 29 Aug 2011 00:00:00 +0900 - -groonga-storage-engine (0.8-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Fri, 29 Jul 2011 00:00:00 +0900 - -groonga-storage-engine (0.7-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Wed, 29 Jun 2011 00:00:00 +0900 - -groonga-storage-engine (0.6-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Sun, 29 May 2011 00:00:00 +0900 - -groonga-storage-engine (0.5-4) unstable; urgency=low - - * fix a typo. - - -- Kouhei Sutou Tue, 30 Mar 2011 01:05:00 +0900 - -groonga-storage-engine (0.5-3) unstable; urgency=low - - * fix AppArmor files. - - -- Kouhei Sutou Tue, 30 Mar 2011 00:59:00 +0900 - -groonga-storage-engine (0.5-2) unstable; urgency=low - - * hook script fix. - - -- Kouhei Sutou Tue, 30 Mar 2011 00:58:00 +0900 - -groonga-storage-engine (0.5-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Tue, 29 Mar 2011 00:00:00 +0900 - -groonga-storage-engine (0.4-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Mon, 29 Nov 2010 00:00:00 +0900 - -groonga-storage-engine (0.3-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Fri, 29 Oct 2010 16:34:04 +0900 - -groonga-storage-engine (0.2-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Sat, 25 Sep 2010 14:52:49 +0900 - -groonga-storage-engine (0.1-4) unstable; urgency=low - - * follow configure option changes. - - -- Kouhei Sutou Fri, 10 Sep 2010 08:45:53 +0900 - -groonga-storage-engine (0.1-3) unstable; urgency=low - - * Use HEAD. - - -- Kouhei Sutou Thu, 02 Sep 2010 12:03:46 +0900 - -groonga-storage-engine (0.1-2) unstable; urgency=low - - * Built with groonga 1.0.0. - - -- Kouhei Sutou Mon, 30 Aug 2010 13:26:25 +0900 - -groonga-storage-engine (0.1-1) unstable; urgency=low - - * New upstream release. - - -- Kouhei Sutou Mon, 23 Aug 2010 13:52:01 +0900 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/compat mariadb-10.1-10.1.30/storage/mroonga/packages/debian/compat --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/compat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -9 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/control.in mariadb-10.1-10.1.30/storage/mroonga/packages/debian/control.in --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/control.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/control.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -Source: mroonga -Section: database -Priority: optional -Maintainer: Kouhei Sutou -Build-Depends: - debhelper (>= 7.0.50), - autotools-dev, - pkg-config, - libgroonga-dev (>= @REQUIRED_GROONGA_VERSION@), - groonga-normalizer-mysql, - libmysqlclient-dev, - libmysqld-dev, - libssl-dev, - wget, - lsb-release -Standards-Version: 3.9.1 -Homepage: http://mroonga.org/ - -Package: mysql-server-mroonga -Section: database -Architecture: any -Replaces: mysql-server-groonga (<< 1.10-1) -Breaks: mysql-server-groonga (<< 1.10-1) -Depends: - ${misc:Depends}, - ${shlibs:Depends}, - libgroonga0 (>= @REQUIRED_GROONGA_VERSION@), - mysql-server (= MYSQL_VERSION), - groonga-normalizer-mysql -Description: A fast fulltext searchable storage engine for MySQL. - Mroonga is a fast fulltext searchable storage engine for MySQL. - It is based on Groonga, a fast fulltext search engine and column store. - Groonga is good at real time update. - . - This package provides a MySQL storage engine as a shared library. - This provides "mroonga" storage engine. It means you can use - "ENGINE = mroonga" in "CREATE TABLE". - -Package: mysql-server-mroonga-doc -Section: doc -Architecture: all -Replaces: mysql-server-groonga-doc (<< 1.10-1) -Breaks: mysql-server-groonga-doc (<< 1.10-1) -Depends: - ${misc:Depends} -Description: Documentation of Mroonga. - Mroonga is a fast fulltext searchable storage engine for MySQL. - It is based on Groonga, a fast fulltext search engine and column store. - Groonga is good at real time update. - . - This package provides documentation of Mroonga. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/copyright mariadb-10.1-10.1.30/storage/mroonga/packages/debian/copyright --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/copyright 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/copyright 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -This work was packaged for Debian by: - - Kouhei Sutou on Thu, 02 Sep 2010 13:51:56 +0900. - -It was downloaded: - - - -Upstream Author(s): - - Tetsuro IKEDA - Daijiro MORI - Tasuku SUENAGA - Kouhei Sutou - -Copyright: - - Copyright(C) 2009-2010 Tetsuro IKEDA - -License: - - LGPLv2.1 - - See `/usr/share/common-licenses/LGPL-2.1'. - -The Debian packaging is done by Kouhei Sutou in 2010, -and put into public domain, anyone can use it for any purpose. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga-doc.install mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga-doc.install --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga-doc.install 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga-doc.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/share/doc/mysql-server-mroonga-doc/ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.install mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.install --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.install 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -usr/lib/mysql/plugin/ha_mroonga.so* -usr/share/mroonga/* -debian/apparmor/mysql-server-mroonga etc/apparmor.d/abstractions/ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.postinst mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.postinst --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.postinst 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.postinst 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -#! /bin/sh - -set -e - -prevver="$2" - -install_plugin() { - cat /usr/share/mroonga/install.sql | \ - mysql --defaults-file=/etc/mysql/debian.cnf || true -} - -install_apparmor() { - mysql_apparmor_profile_name=usr.sbin.mysqld - mysql_apparmor_profile=/etc/apparmor.d/${mysql_apparmor_profile_name} - mysql_local_apparmor_profile=/etc/apparmor.d/local/${mysql_apparmor_profile_name} - apparmor_profile_name=mysql-server-mroonga - include_profile="#include " - local_apparmor_profile=/etc/apparmor.d/local/${apparmor_profile_name} - if test -f "${mysql_local_apparmor_profile}"; then - if ! grep -q "${include_profile}" "${mysql_local_apparmor_profile}"; then - echo >> "${mysql_local_apparmor_profile}" - echo "${include_profile}" >> "${mysql_local_apparmor_profile}" - fi - else - mysql_abstraction_apparmor_profile=/etc/apparmor.d/abstractions/mysql - mysql_plugin_dir=/usr/lib/mysql/plugin - if test -f "${mysql_abstraction_apparmor_profile}" && \ - ! grep -q "${mysql_plugin_dir}" \ - "${mysql_abstraction_apparmor_profile}"; then - # For Lucid. - cat <> "${mysql_abstraction_apparmor_profile}" - -# ${apparmor_profile_name}: START -# Added by mysql-server-mroonga. -${mysql_plugin_dir}/ r, -${mysql_plugin_dir}/*.so* mr, -${include_profile} -# ${apparmor_profile_name}: END -EOF - fi - fi - - if ! test -e "$local_apparmor_profile"; then - mkdir -p $(dirname "$local_apparmor_profile") - cat < "$local_apparmor_profile" -# Site-specific additions and overrides for ${apparmor_profile_name}. -# For more details, please see /etc/apparmor.d/local/README. -EOF - fi - - if aa-status --enabled 2>/dev/null; then - apparmor_parser -r -T -W "${mysql_apparmor_profile}" || true - fi - - true -} - -case "$1" in - configure) - install_apparmor - install_plugin - ;; - abort-upgrade|abort-deconfigure|abort-remove) - : - ;; - *) - echo "Called with unknown argument $1, bailing out." - exit 1 - ;; -esac - -#DEBHELPER# diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.postrm mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.postrm --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.postrm 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.postrm 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -#! /bin/sh - -set -e - -if [ "$1" = "purge" ]; then - mysql_apparmor_profile_name=usr.sbin.mysqld - mysql_apparmor_profile=/etc/apparmor.d/${mysql_apparmor_profile_name} - mysql_local_apparmor_profile=/etc/apparmor.d/local/${mysql_apparmor_profile_name} - mysql_abstraction_apparmor_profile=/etc/apparmor.d/abstractions/mysql - apparmor_profile_name=mysql-server-mroonga - if test -f "${mysql_local_apparmor_profile}"; then - include_profile="#include " - if grep -q "${include_profile}" "${mysql_local_apparmor_profile}"; then - sed -i'' -e "s,${include_profile},," \ - "${mysql_local_apparmor_profile}" - fi - else - start_marker_re="^# ${apparmor_profile_name}: START$" - end_marker_re="^# ${apparmor_profile_name}: END$" - if test -f "${mysql_abstraction_apparmor_profile}" && \ - grep -q "${start_marker_re}" \ - "${mysql_abstraction_apparmor_profile}"; then - sed -i'' -e "/${start_marker_re}/,/${end_marker_re}/d" \ - "${mysql_abstraction_apparmor_profile}" - fi - fi - - rm -f "/etc/apparmor.d/local/${apparmor_profile_name}" || true - rmdir /etc/apparmor.d/local 2>/dev/null || true - - if aa-status --enabled 2>/dev/null; then - apparmor_parser -r -T -W "${mysql_apparmor_profile}" || true - fi -fi - -#DEBHELPER# - -exit 0 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.prerm mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.prerm --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/mysql-server-mroonga.prerm 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/mysql-server-mroonga.prerm 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -#! /bin/sh - -set -e - -cat /usr/share/mroonga/uninstall.sql | \ - mysql --defaults-file=/etc/mysql/debian.cnf || true - -#DEBHELPER# - -exit 0 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/debian/rules mariadb-10.1-10.1.30/storage/mroonga/packages/debian/rules --- mariadb-10.1-10.1.25/storage/mroonga/packages/debian/rules 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/debian/rules 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile-gmake -*- -# -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 -# This has to be exported to make some magic below work. -export DH_OPTIONS - -export MYSQL_VERSION := $(shell apt-cache show mysql-server-5.5 | grep Version | head -n 1 | awk '{print $$2}' | awk -F '-' '{print $$1}') - -%: - dh $@ - -override_dh_auto_configure: - path=main/m/mysql-5.5/mysql-5.5_$(MYSQL_VERSION).orig.tar.gz; \ - if [ "$$(lsb_release --id --short)" = "Ubuntu" ]; then \ - base_url=http://archive.ubuntu.com/ubuntu/pool; \ - security_base_url=http://security.ubuntu.com/ubuntu/pool; \ - else \ - base_url=http://ftp.debian.org/debian/pool; \ - security_base_url=http://security.debian.org/pool/updates; \ - fi; \ - wget $${security_base_url}/$${path} || \ - wget $${base_url}/$${path} - tar xf mysql-5.5_$(MYSQL_VERSION).orig.tar.gz - dh_auto_configure -- --with-mysql-source=./mysql-$(MYSQL_VERSION) - -# disable 'make check'. -override_dh_auto_test: - -override_dh_install: - mv debian/tmp/usr/share/doc/mroonga/ \ - debian/tmp/usr/share/doc/mysql-server-mroonga-doc/ - dh_install -# if test -x /usr/bin/dh_apparmor; then \ -# dh_apparmor \ -# -pmysql-server-mroonga \ -# --profile-name=usr.lib.mysql.plugin.ha_mroonga; \ -# fi diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -1,9 +1,19 @@ EXTRA_DIST = \ mysql55-mroonga.spec.in \ mysql56-community-mroonga.spec.in \ - mariadb-mroonga.spec.in + mysql57-community-mroonga.spec.in \ + mariadb-mroonga.spec.in \ + mariadb-10.1-mroonga.spec.in \ + mariadb-10.2-mroonga.spec.in \ + percona-server-56-mroonga.spec.in \ + percona-server-57-mroonga.spec.in noinst_DATA = \ mysql55-mroonga.spec \ mysql56-community-mroonga.spec \ - mariadb-mroonga.spec + mysql57-community-mroonga.spec \ + mariadb-mroonga.spec \ + mariadb-10.1-mroonga.spec \ + mariadb-10.2-mroonga.spec \ + percona-server-56-mroonga.spec \ + percona-server-57-mroonga.spec diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/mariadb-mroonga.spec.in mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/mariadb-mroonga.spec.in --- mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/mariadb-mroonga.spec.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/mariadb-mroonga.spec.in 2017-12-21 15:48:52.000000000 +0000 @@ -1,18 +1,18 @@ %define mariadb_epoch_default 1 -%define mariadb_version_default 5.5.41 +%define mariadb_version_default 5.5.56 %define mariadb_release_default 2 -%define mariadb_dist_default .el7_0 -%define mariadb_download_base_url_default http://vault.centos.org/7.1.1503/os/Source/SPackages +%define mariadb_dist_default .el7 +%define mariadb_download_base_url_default http://vault.centos.org/7.4.1708/os/Source/SPackages/ %define mariadb_spec_file_default mariadb.spec -%{!?mariadb_epoch:%define mariadb_epoch %{mariadb_epoch_default}} -%{!?mariadb_version:%define mariadb_version %{mariadb_version_default}} -%{!?mariadb_release:%define mariadb_release %{mariadb_release_default}} -%{!?mariadb_dist:%define mariadb_dist %{mariadb_dist_default}} -%{!?mariadb_download_base_url:%define mariadb_download_base_url %{mariadb_download_base_url_default}} -%{!?mariadb_spec_file:%define mariadb_spec_file %{mariadb_spec_file_default}} +%define _mariadb_epoch %{?mariadb_epoch:%{mariadb_epoch}}%{!?mariadb_epoch:%{mariadb_epoch_default}} +%define _mariadb_version %{?mariadb_version:%{mariadb_version}}%{!?mariadb_version:%{mariadb_version_default}} +%define _mariadb_release %{?mariadb_release:%{mariadb_release}}%{!?mariadb_release:%{mariadb_release_default}} +%define _mariadb_dist %{?mariadb_dist:%{mariadb_dist}}%{!?mariadb_dist:%{mariadb_dist_default}} +%define _mariadb_download_base_url %{?mariadb_download_base_url:%{mariadb_download_base_url}}%{!?mariadb_download_base_url:%{mariadb_download_base_url_default}} +%define _mariadb_spec_file %{?mariadb_spec_file:%{mariadb_spec_file}}%{!?mariadb_spec_file:%{mariadb_spec_file_default}} -%define mariadb_package_version %{mariadb_epoch}:%{mariadb_version}-%{mariadb_release}%{mariadb_dist} +%define _mariadb_package_version %{_mariadb_epoch}:%{_mariadb_version}-%{_mariadb_release}%{_mariadb_dist} %define groonga_required_version @REQUIRED_GROONGA_VERSION@ @@ -30,9 +30,9 @@ BuildRequires: groonga-devel >= %{groonga_required_version} BuildRequires: groonga-normalizer-mysql-devel BuildRequires: wget -BuildRequires: mariadb-devel = %{mariadb_package_version} -Requires: mariadb-server = %{mariadb_package_version} -Requires: mariadb = %{mariadb_package_version} +BuildRequires: mariadb-devel = %{_mariadb_package_version} +Requires: mariadb-server = %{_mariadb_package_version} +Requires: mariadb = %{_mariadb_package_version} Requires: groonga-libs >= %{groonga_required_version} Requires: groonga-normalizer-mysql @@ -53,21 +53,21 @@ %prep %setup -q -n mroonga-%{version} -mariadb_full_version=%{mariadb_version}-%{mariadb_release}%{mariadb_dist} +mariadb_full_version=%{_mariadb_version}-%{_mariadb_release}%{_mariadb_dist} srpm=mariadb-${mariadb_full_version}.src.rpm if [ ! -f ../../SRPMS/$srpm ]; then - wget --continue -O ../../SRPMS/$srpm %{mariadb_download_base_url}/$srpm + wget --continue -O ../../SRPMS/$srpm %{_mariadb_download_base_url}/$srpm rpm -Uvh ../../SRPMS/$srpm rm ../../SRPMS/$srpm fi %build -mariadb_source=../mariadb-%{mariadb_version} +mariadb_source=../mariadb-%{_mariadb_version} if [ ! -d ${mariadb_source} ]; then rpmbuild -bc \ --define 'runselftest 0' \ --define 'optflags -O0' \ - ../../SPECS/%{mariadb_spec_file} + ../../SPECS/%{_mariadb_spec_file} fi %configure \ --disable-static \ @@ -86,7 +86,7 @@ rm -rf $RPM_BUILD_ROOT %post -if /usr/bin/mysql -u root -e "quit"; then +if /usr/bin/mysql -u root -e "quit" > /dev/null 2>&1; then password_option="" else password_option="-p" @@ -128,7 +128,7 @@ %preun uninstall_sql=%{_datadir}/mroonga/uninstall.sql -if mysql -u root -e "quit"; then +if mysql -u root -e "quit" > /dev/null 2>&1; then password_option="" else password_option="-p" @@ -154,6 +154,84 @@ %doc mysql-mroonga-doc/* %changelog +* Thu Oct 12 2017 Kentaro Hayashi - 7.07-1 +- new upstream release. + +* Fri Sep 15 2017 Kouhei Sutou - 7.06-2 +- rebuild against the latest MariaDB. + +* Tue Aug 29 2017 Kentaro Hayashi - 7.06-1 +- new upstream release. + +* Sat Jul 29 2017 Kentaro Hayashi - 7.05-1 +- new upstream release. + +* Thu Jun 29 2017 Kentaro Hayashi - 7.04-1 +- new upstream release. + +* Mon May 29 2017 Kentaro Hayashi - 7.03-1 +- new upstream release. + +* Sat Apr 29 2017 Kentaro Hayashi - 7.02-1 +- new upstream release. + +* Wed Mar 29 2017 Kentaro Hayashi - 7.01-1 +- new upstream release. + +* Thu Feb 09 2017 Kentaro Hayashi - 7.00-1 +- new upstream release. + +* Sat Oct 29 2016 Kentaro Hayashi - 6.10-1 +- new upstream release. + +* Thu Sep 29 2016 Kentaro Hayashi - 6.09-1 +- new upstream release. + +* Mon Aug 29 2016 Kentaro Hayashi - 6.08-1 +- new upstream release. + +* Fri Jul 29 2016 Kentaro Hayashi - 6.07-1 +- new upstream release. + +* Thu Jun 30 2016 Masafumi Yokoyama - 6.06-1 +- new upstream release. + +* Wed Jun 29 2016 Kentaro Hayashi - 6.05-1 +- new upstream release. + +* Sun May 29 2016 Kentaro Hayashi - 6.03-1 +- new upstream release. + +* Fri Apr 29 2016 HAYASHI Kentaro - 6.02-1 +- new upstream release. + +* Tue Mar 29 2016 Masafumi Yokoyama - 6.01-1 +- new upstream release. + +* Mon Feb 29 2016 Kouhei Sutou - 6.00-1 +- new upstream release. + +* Tue Dec 29 2015 Kouhei Sutou - 5.11-1 +- new upstream release. + +* Wed Dec 16 2015 Kouhei Sutou - 5.10-2 +- rebuild against MariaDB on CentOS 7.2. Reported by Larry Kim. Thanks!!! + +* Sun Nov 29 2015 Kouhei Sutou - 5.10-1 +- new upstream release. + +* Thu Oct 29 2015 Kouhei Sutou - 5.09-1 +- new upstream release. + +* Tue Sep 29 2015 Kouhei Sutou - 5.08-1 +- new upstream release. + +* Mon Aug 31 2015 Kouhei Sutou - 5.06-1 +- new upstream release. + +* Wed Jul 29 2015 Masafumi Yokoyama - 5.05-1 +- new upstream release. + * Mon Jun 29 2015 Masafumi Yokoyama - 5.04-1 - new upstream release. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/mysql55-mroonga.spec.in mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/mysql55-mroonga.spec.in --- mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/mysql55-mroonga.spec.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/mysql55-mroonga.spec.in 2017-12-21 15:48:52.000000000 +0000 @@ -1,26 +1,26 @@ %{?scl:%scl_package mroonga} %{!?scl:%global pkg_name %{name}} -%{!?centos_ver:%define centos_ver 5} +%define _centos_ver %{?centos_ver:%{centos_ver}}%{!?centos_ver:5} -%if %{centos_ver} == 6 -%define mysql_version_default 5.5.41 -%define mysql_release_default 2 -%define mysql_dist_default el6.centos.alt -%define mysql_download_base_url_default http://vault.centos.org/6.6/SCL/Source/SPackages +%if %{_centos_ver} == 6 +%define mysql_version_default 5.5.52 +%define mysql_release_default 1 +%define mysql_dist_default el6 +%define mysql_download_base_url_default http://vault.centos.org/6.8/sclo/Source/rh/mysql55/ %define mysql_spec_file_default mysql.spec %else -%define mysql_version_default 5.5.40 -%define mysql_release_default 2 +%define mysql_version_default 5.5.45 +%define mysql_release_default 1 %define mysql_dist_default el5 %define mysql_download_base_url_default http://vault.centos.org/5.11/updates/SRPMS %define mysql_spec_file_default mysql.spec %endif -%{!?mysql_version:%define mysql_version %{mysql_version_default}} -%{!?mysql_release:%define mysql_release %{mysql_release_default}} -%{!?mysql_dist:%define mysql_dist %{mysql_dist_default}} -%{!?mysql_download_base_url:%define mysql_download_base_url %{mysql_download_base_url_default}} -%{!?mysql_spec_file:%define mysql_spec_file %{mysql_spec_file_default}} +%define _mysql_version %{?mysql_version:%{mysql_version}}%{!?mysql_version:%{mysql_version_default}} +%define _mysql_release %{?mysql_release:%{mysql_release}}%{!?mysql_release:%{mysql_release_default}} +%define _mysql_dist %{?mysql_dist:%{mysql_dist}}%{!?mysql_dist:%{mysql_dist_default}} +%define _mysql_download_base_url %{?mysql_download_base_url:%{mysql_download_base_url}}%{!?mysql_download_base_url:%{mysql_download_base_url_default}} +%define _mysql_spec_file %{?mysql_spec_file:%{mysql_spec_file}}%{!?mysql_spec_file:%{mysql_spec_file_default}} %define groonga_required_version @REQUIRED_GROONGA_VERSION@ @@ -39,10 +39,10 @@ BuildRequires: groonga-normalizer-mysql-devel BuildRequires: wget BuildRequires: which -BuildRequires: mysql55-mysql-devel = %{mysql_version}-%{mysql_release}.%{mysql_dist} +BuildRequires: mysql55-mysql-devel = %{_mysql_version}-%{_mysql_release}.%{_mysql_dist} BuildRequires: mysql55-build -Requires: mysql55-mysql-server = %{mysql_version}-%{mysql_release}.%{mysql_dist} -Requires: mysql55-mysql = %{mysql_version}-%{mysql_release}.%{mysql_dist} +Requires: mysql55-mysql-server = %{_mysql_version}-%{_mysql_release}.%{_mysql_dist} +Requires: mysql55-mysql = %{_mysql_version}-%{_mysql_release}.%{_mysql_dist} Requires: groonga-libs >= %{groonga_required_version} Requires: groonga-normalizer-mysql %{?scl:Requires: %scl_runtime} @@ -64,21 +64,21 @@ %prep %setup -q -n %{pkg_name}-%{version} -mysql_full_version=%{mysql_version}-%{mysql_release}.%{mysql_dist} +mysql_full_version=%{_mysql_version}-%{_mysql_release}.%{_mysql_dist} srpm=mysql55-mysql-${mysql_full_version}.src.rpm if [ ! -f ../../SRPMS/$srpm ]; then - wget --continue -O ../../SRPMS/$srpm %{mysql_download_base_url}/$srpm + wget --continue -O ../../SRPMS/$srpm %{_mysql_download_base_url}/$srpm rpm -Uvh ../../SRPMS/$srpm fi %build -mysql_source=../mysql-%{mysql_version} +mysql_source=../mysql-%{_mysql_version} if [ ! -d ${mysql_source} ]; then specs_dir= MYSQL_RPMBUILD_TEST=no rpmbuild -bp \ --define 'runselftest 0' \ --define 'optflags -O0' \ - ../../SPECS/%{mysql_spec_file} + ../../SPECS/%{_mysql_spec_file} fi %configure --disable-static --with-mysql-source=${mysql_source} \ --disable-fast-mutexes \ @@ -97,10 +97,10 @@ %post mysql_command=`scl enable mysql55 'which mysql'` -password_option="" -$mysql_command -u root -e "quit" -if [ $? -ne 0 ]; then - password_option="-p" +if $mysql_command -u root -e "quit" > /dev/null 2>&1; then + password_option="" +else + password_option="-p" fi current_version=0 version=`echo %{groonga_required_version} | sed -e 's/\.//g'` @@ -137,7 +137,7 @@ %preun uninstall_sql=%{_datadir}/mroonga/uninstall.sql mysql_command=`scl enable mysql55 'which mysql'` -if $mysql_command -u root -e "quit"; then +if $mysql_command -u root -e "quit" > /dev/null 2>&1; then password_option="" else password_option="-p" @@ -163,6 +163,87 @@ %doc mysql-mroonga-doc/* %changelog +* Thu Oct 12 2017 Kentaro Hayashi - 7.07-1 +- new upstream release. + +* Tue Aug 29 2017 Kentaro Hayashi - 7.06-1 +- new upstream release. + +* Sat Jul 29 2017 Kentaro Hayashi - 7.05-1 +- new upstream release. + +* Thu Jun 29 2017 Kentaro Hayashi - 7.04-1 +- new upstream release. + +* Mon May 29 2017 Kentaro Hayashi - 7.03-1 +- new upstream release. + +* Sat Apr 29 2017 Kentaro Hayashi - 7.02-1 +- new upstream release. + +* Wed Mar 29 2017 Kentaro Hayashi - 7.01-1 +- new upstream release. + +* Thu Feb 09 2017 Kentaro Hayashi - 7.00-1 +- new upstream release. + +* Fri Jan 13 2017 Kouhei Sutou - 6.13-1 +- new upstream release. + +* Thu Dec 29 2016 Kentaro Hayashi - 6.12-1 +- new upstream release. + +* Tue Nov 29 2016 Kentaro Hayashi - 6.11-1 +- new upstream release. + +* Sat Oct 29 2016 Kentaro Hayashi - 6.10-1 +- new upstream release. + +* Thu Sep 29 2016 Kentaro Hayashi - 6.09-1 +- new upstream release. + +* Mon Aug 29 2016 Kentaro Hayashi - 6.08-1 +- new upstream release. + +* Fri Jul 29 2016 Kentaro Hayashi - 6.07-1 +- new upstream release. + +* Thu Jun 30 2016 Masafumi Yokoyama - 6.06-1 +- new upstream release. + +* Wed Jun 29 2016 Kentaro Hayashi - 6.05-1 +- new upstream release. + +* Sun May 29 2016 Kentaro Hayashi - 6.03-1 +- new upstream release. + +* Fri Apr 29 2016 HAYASHI Kentaro - 6.02-1 +- new upstream release. + +* Tue Mar 29 2016 Masafumi Yokoyama - 6.01-1 +- new upstream release. + +* Mon Feb 29 2016 Kouhei Sutou - 6.00-1 +- new upstream release. + +* Fri Jan 29 2016 Kouhei Sutou - 5.12-1 +- new upstream release. + +* Sun Nov 29 2015 Kouhei Sutou - 5.10-1 +- new upstream release. + +* Thu Oct 29 2015 Kouhei Sutou - 5.09-1 +- new upstream release. + +* Tue Sep 29 2015 Kouhei Sutou - 5.08-1 +- new upstream release. + +* Mon Aug 31 2015 Kouhei Sutou - 5.06-1 +- new upstream release. + +* Wed Jul 29 2015 Masafumi Yokoyama - 5.05-1 +- new upstream release. + * Mon Jun 29 2015 Masafumi Yokoyama - 5.04-1 - new upstream release. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/mysql56-community-mroonga.spec.in mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/mysql56-community-mroonga.spec.in --- mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/mysql56-community-mroonga.spec.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/mysql56-community-mroonga.spec.in 2017-12-21 15:48:52.000000000 +0000 @@ -1,24 +1,24 @@ -%{!?centos_ver:%define centos_ver 6} +%define _centos_ver %{?centos_ver:%{centos_ver}}%{!?centos_ver:5} -%if %{centos_ver} == 7 -%define mysql_version_default 5.6.25 +%if %{_centos_ver} == 7 +%define mysql_version_default 5.6.37 %define mysql_release_default 2 %define mysql_dist_default el7 %define mysql_download_base_url_default http://repo.mysql.com/yum/mysql-5.6-community/el/7/SRPMS %define mysql_spec_file_default mysql.spec %else -%define mysql_version_default 5.6.25 +%define mysql_version_default 5.6.37 %define mysql_release_default 2 %define mysql_dist_default el6 %define mysql_download_base_url_default http://repo.mysql.com/yum/mysql-5.6-community/el/6/SRPMS %define mysql_spec_file_default mysql.spec %endif -%{!?mysql_version:%define mysql_version %{mysql_version_default}} -%{!?mysql_release:%define mysql_release %{mysql_release_default}} -%{!?mysql_dist:%define mysql_dist %{mysql_dist_default}} -%{!?mysql_download_base_url:%define mysql_download_base_url %{mysql_download_base_url_default}} -%{!?mysql_spec_file:%define mysql_spec_file %{mysql_spec_file_default}} +%define _mysql_version %{?mysql_version:%{mysql_version}}%{!?mysql_version:%{mysql_version_default}} +%define _mysql_release %{?mysql_release:%{mysql_release}}%{!?mysql_release:%{mysql_release_default}} +%define _mysql_dist %{?mysql_dist:%{mysql_dist}}%{!?mysql_dist:%{mysql_dist_default}} +%define _mysql_download_base_url %{?mysql_download_base_url:%{mysql_download_base_url}}%{!?mysql_download_base_url:%{mysql_download_base_url_default}} +%define _mysql_spec_file %{?mysql_spec_file:%{mysql_spec_file}}%{!?mysql_spec_file:%{mysql_spec_file_default}} %define groonga_required_version @REQUIRED_GROONGA_VERSION@ @@ -38,9 +38,10 @@ BuildRequires: wget BuildRequires: which BuildRequires: gcc, gcc-c++ -BuildRequires: mysql-community-devel = %{mysql_version}-%{mysql_release}.%{mysql_dist} -Requires: mysql-community-server = %{mysql_version}-%{mysql_release}.%{mysql_dist} -Requires: mysql-community-client = %{mysql_version}-%{mysql_release}.%{mysql_dist} +BuildRequires: numactl-devel +BuildRequires: mysql-community-devel = %{_mysql_version}-%{_mysql_release}.%{_mysql_dist} +Requires: mysql-community-server = %{_mysql_version}-%{_mysql_release}.%{_mysql_dist} +Requires: mysql-community-client = %{_mysql_version}-%{_mysql_release}.%{_mysql_dist} Requires: groonga-libs >= %{groonga_required_version} Requires: groonga-normalizer-mysql @@ -61,21 +62,21 @@ %prep %setup -q -n mroonga-%{version} -mysql_full_version=%{mysql_version}-%{mysql_release}.%{mysql_dist} +mysql_full_version=%{_mysql_version}-%{_mysql_release}.%{_mysql_dist} srpm=mysql-community-${mysql_full_version}.src.rpm if [ ! -f ../../SRPMS/$srpm ]; then - wget --continue -O ../../SRPMS/$srpm %{mysql_download_base_url}/$srpm + wget --continue -O ../../SRPMS/$srpm %{_mysql_download_base_url}/$srpm rpm -Uvh ../../SRPMS/$srpm fi %build -mysql_source=../mysql-%{mysql_version}/mysql-%{mysql_version} +mysql_source=../mysql-%{_mysql_version}/mysql-%{_mysql_version} if [ ! -d ${mysql_source} ]; then specs_dir= MYSQL_RPMBUILD_TEST=no rpmbuild -bp \ --define 'runselftest 0' \ --define 'optflags -O0' \ - ../../SPECS/%{mysql_spec_file} + ../../SPECS/%{_mysql_spec_file} fi %configure \ --disable-static \ @@ -102,10 +103,10 @@ fi mysql_command=`which mysql` -password_option="" -$mysql_command -u root -e "quit" -if [ $? -ne 0 ]; then - password_option="-p" +if $mysql_command -u root -e "quit" > /dev/null 2>&1; then + password_option="" +else + password_option="-p" fi current_version=0 version=`echo %{groonga_required_version} | sed -e 's/\.//g'` @@ -153,7 +154,7 @@ uninstall_sql=%{_datadir}/mroonga/uninstall.sql mysql_command=`which mysql` -if $mysql_command -u root -e "quit"; then +if $mysql_command -u root -e "quit" > /dev/null 2>&1; then password_option="" else password_option="-p" @@ -183,10 +184,118 @@ %doc mysql-mroonga-doc/* %changelog +* Thu Oct 12 2017 Kentaro Hayashi - 7.07-1 +- new upstream release. + +* Tue Aug 29 2017 Kentaro Hayashi - 7.06-1 +- new upstream release. + +* Wed Aug 23 2017 Kentaro Hayashi - 7.05-2 +- build against MySQL 5.6.37 on CentOS 7. Reported by Hiroshi Kagami. Thanks!!! + +* Sat Jul 29 2017 Kentaro Hayashi - 7.05-1 +- new upstream release. + +* Fri Jul 21 2017 Kentaro Hayashi - 7.04-2 +- build against MySQL 5.6.37 on CentOS 6. Reported by Hiroshi Kagami. Thanks!!! + +* Thu Jun 29 2017 Kentaro Hayashi - 7.04-1 +- new upstream release. + +* Mon May 29 2017 Kentaro Hayashi - 7.03-1 +- new upstream release. + +* Sat Apr 29 2017 Kentaro Hayashi - 7.02-1 +- new upstream release. + +* Wed Apr 12 2017 Kentaro Hayashi - 7.01-2 +- build against MySQL 5.6.36 Reported by @tigersun2000. Thanks!!! + +* Wed Mar 29 2017 Kentaro Hayashi - 7.01-1 +- new upstream release. + +* Thu Feb 09 2017 Kentaro Hayashi - 7.00-1 +- new upstream release. + +* Fri Jan 13 2017 Kouhei Sutou - 6.13-1 +- new upstream release. + +* Thu Dec 29 2016 Kentaro Hayashi - 6.12-1 +- new upstream release. + +* Tue Nov 29 2016 Kentaro Hayashi - 6.11-1 +- new upstream release. + +* Sat Oct 29 2016 Kentaro Hayashi - 6.10-1 +- new upstream release. + +* Mon Oct 24 2016 Kouhei Sutou - 6.09-2 +- build against MySQL 5.6.34. Reported by Hiroshi Kagami. Thanks!!! + +* Thu Sep 29 2016 Kentaro Hayashi - 6.09-1 +- new upstream release. + +* Wed Sep 14 2016 Kentaro Hayashi - 6.08-2 +- build against MySQL 5.6.33. + +* Mon Aug 29 2016 Kentaro Hayashi - 6.08-1 +- new upstream release. + +* Fri Jul 29 2016 Kentaro Hayashi - 6.07-1 +- new upstream release. + +* Thu Jun 30 2016 Masafumi Yokoyama - 6.06-1 +- new upstream release. + +* Wed Jun 29 2016 Kentaro Hayashi - 6.05-1 +- new upstream release. + +* Mon Jun 06 2016 Kouhei Sutou - 6.03-2 +- build against MySQL 5.6.30. + +* Sun May 29 2016 Kentaro Hayashi - 6.03-1 +- new upstream release. + +* Fri Apr 29 2016 HAYASHI Kentaro - 6.02-1 +- new upstream release. + +* Tue Mar 29 2016 Masafumi Yokoyama - 6.01-1 +- new upstream release. + +* Mon Feb 29 2016 Kouhei Sutou - 6.00-1 +- new upstream release. + +* Fri Jan 29 2016 Kouhei Sutou - 5.12-1 +- new upstream release. + +* Tue Dec 29 2015 Kouhei Sutou - 5.11-1 +- new upstream release. + +* Wed Dec 09 2015 Kouhei Sutou - 5.10-2 +- build against MySQL 5.6.28. Reported by @stealthinu. Thanks!!! + +* Sun Nov 29 2015 Kouhei Sutou - 5.10-1 +- new upstream release. + +* Thu Oct 29 2015 Kouhei Sutou - 5.09-1 +- new upstream release. + +* Sat Oct 03 2015 Kouhei Sutou - 5.08-2 +- build against MySQL 5.6.27. Reported by @star_orihime. Thanks!!! + +* Tue Sep 29 2015 Kouhei Sutou - 5.08-1 +- new upstream release. + +* Mon Aug 31 2015 Kouhei Sutou - 5.06-1 +- new upstream release. + +* Wed Jul 29 2015 Masafumi Yokoyama - 5.05-1 +- new upstream release. + * Mon Jun 29 2015 Masafumi Yokoyama - 5.04-1 - new upstream release. -* Thu Jun 02 2015 Masafumi Yokoyama - 5.03-2 +* Tue Jun 02 2015 Masafumi Yokoyama - 5.03-2 - build against MySQL 5.6.25. * Fri May 29 2015 HAYASHI Kentaro - 5.03-1 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/percona-server-56-mroonga.spec.in mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/percona-server-56-mroonga.spec.in --- mariadb-10.1-10.1.25/storage/mroonga/packages/rpm/centos/percona-server-56-mroonga.spec.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/rpm/centos/percona-server-56-mroonga.spec.in 2017-12-21 15:48:52.000000000 +0000 @@ -1,16 +1,16 @@ -%{!?centos_ver:%define centos_ver 6} +%define _centos_ver %{?centos_ver:%{centos_ver}}%{!?centos_ver:5} -%define mysql_version_default 5.6.24 -%define mysql_release_default rel72.2 +%define mysql_version_default 5.6.37 +%define mysql_release_default rel82.2 %define mysql_dist_default %{?dist} -%define mysql_download_base_url_default http://repo.percona.com/centos/%{centos_ver}/SRPMS +%define mysql_download_base_url_default http://repo.percona.com/centos/%{_centos_ver}/SRPMS %define mysql_spec_file_default percona-server.spec -%{!?mysql_version:%define mysql_version %{mysql_version_default}} -%{!?mysql_release:%define mysql_release %{mysql_release_default}} -%{!?mysql_dist:%define mysql_dist %{mysql_dist_default}} -%{!?mysql_download_base_url:%define mysql_download_base_url %{mysql_download_base_url_default}} -%{!?mysql_spec_file:%define mysql_spec_file %{mysql_spec_file_default}} +%define _mysql_version %{?mysql_version:%{mysql_version}}%{!?mysql_version:%{mysql_version_default}} +%define _mysql_release %{?mysql_release:%{mysql_release}}%{!?mysql_release:%{mysql_release_default}} +%define _mysql_dist %{?mysql_dist:%{mysql_dist}}%{!?mysql_dist:%{mysql_dist_default}} +%define _mysql_download_base_url %{?mysql_download_base_url:%{mysql_download_base_url}}%{!?mysql_download_base_url:%{mysql_download_base_url_default}} +%define _mysql_spec_file %{?mysql_spec_file:%{mysql_spec_file}}%{!?mysql_spec_file:%{mysql_spec_file_default}} %define groonga_required_version @REQUIRED_GROONGA_VERSION@ @@ -31,10 +31,10 @@ BuildRequires: which BuildRequires: gcc BuildRequires: gcc-c++ -BuildRequires: Percona-Server-devel-56 = %{mysql_version}-%{mysql_release}%{mysql_dist} +BuildRequires: Percona-Server-devel-56 = %{_mysql_version}-%{_mysql_release}%{_mysql_dist} BuildRequires: selinux-policy-devel -Requires: Percona-Server-server-56 = %{mysql_version}-%{mysql_release}%{mysql_dist} -Requires: Percona-Server-client-56 = %{mysql_version}-%{mysql_release}%{mysql_dist} +Requires: Percona-Server-server-56 = %{_mysql_version}-%{_mysql_release}%{_mysql_dist} +Requires: Percona-Server-client-56 = %{_mysql_version}-%{_mysql_release}%{_mysql_dist} Requires: groonga-libs >= %{groonga_required_version} Requires: groonga-normalizer-mysql @@ -55,23 +55,26 @@ %prep %setup -q -n mroonga-%{version} -mysql_full_version=%{mysql_version}-%{mysql_release}.generic +mysql_full_version=%{_mysql_version}-%{_mysql_release}.generic srpm=Percona-Server-56-${mysql_full_version}.src.rpm if [ ! -f ../../SRPMS/$srpm ]; then - wget --continue -O ../../SRPMS/$srpm %{mysql_download_base_url}/$srpm + wget --continue -O ../../SRPMS/$srpm %{_mysql_download_base_url}/$srpm rpm -Uvh ../../SRPMS/$srpm fi %build -mysql_source=../percona-server-%{mysql_version}-$(echo %{mysql_release} | sed -e 's/rel//') +mysql_source=../percona-server-%{_mysql_version}-$(echo %{_mysql_release} | sed -e 's/rel//') if [ ! -d ${mysql_source} ]; then specs_dir= rpmbuild -bp \ --define 'runselftest 0' \ --define 'optflags -O0' \ - ../../SPECS/%{mysql_spec_file} + ../../SPECS/%{_mysql_spec_file} fi -%configure --disable-static --with-mysql-source=${mysql_source} \ +%configure \ + --disable-static \ + --with-mysql-source=${mysql_source} \ + --enable-fast-mutexes \ %{?mroonga_configure_options} make %{?_smp_mflags} @@ -94,9 +97,11 @@ mysql_command=`which mysql` password_option="" -$mysql_command -u root -e "quit" -if [ $? -ne 0 ]; then - password_option="-p" + +if $mysql_command -u root -e "quit" > /dev/null 2>&1; then + password_option="" +else + password_option="-p" fi current_version=0 version=`echo %{groonga_required_version} | sed -e 's/\.//g'` @@ -144,7 +149,7 @@ uninstall_sql=%{_datadir}/mroonga/uninstall.sql mysql_command=`which mysql` -if $mysql_command -u root -e "quit"; then +if $mysql_command -u root -e "quit" > /dev/null 2>&1; then password_option="" else password_option="-p" @@ -174,5 +179,95 @@ %doc mysql-mroonga-doc/* %changelog +* Thu Oct 12 2017 Kentaro Hayashi - 7.07-1 +- new upstream release. + +* Tue Aug 29 2017 Kentaro Hayashi - 7.06-1 +- new upstream release. + +* Mon Aug 14 2017 Kentaro Hayashi - 7.05-2 +- build against Percona Server 5.6.36rel82.1 Reported by @tigersun2000_twitter. Thanks!!! + +* Sat Jul 29 2017 Kentaro Hayashi - 7.05-1 +- new upstream release. + +* Thu Jun 29 2017 Kentaro Hayashi - 7.04-1 +- new upstream release. + +* Mon May 29 2017 Kentaro Hayashi - 7.03-1 +- new upstream release. + +* Thu May 17 2017 Kentaro Hayashi - 7.02-2 +- build against Percona Server 5.6.36. Reported by @pinpikokun. Thanks!!! + +* Sat Apr 29 2017 Kentaro Hayashi - 7.02-1 +- new upstream release. + +* Wed Mar 29 2017 Kentaro Hayashi - 7.01-1 +- new upstream release. + +* Thu Feb 09 2017 Kentaro Hayashi - 7.00-1 +- new upstream release. + +* Fri Jan 13 2017 Kouhei Sutou - 6.13-1 +- new upstream release. + +* Thu Dec 29 2016 Kentaro Hayashi - 6.12-1 +- new upstream release. + +* Tue Nov 29 2016 Kentaro Hayashi - 6.11-1 +- new upstream release. + +* Sat Oct 29 2016 Kentaro Hayashi - 6.10-1 +- new upstream release. + +* Mon Oct 24 2016 Kouhei Sutou - 6.09-2 +- build against Percona Server 5.6.33. Reported by Hiroshi Kagami. Thanks!!! + +* Thu Sep 29 2016 Kentaro Hayashi - 6.09-1 +- new upstream release. + +* Mon Aug 29 2016 Kentaro Hayashi - 6.08-1 +- new upstream release. + +* Fri Jul 29 2016 Kentaro Hayashi - 6.07-1 +- new upstream release. + +* Thu Jun 30 2016 Masafumi Yokoyama - 6.06-1 +- new upstream release. + +* Wed Jun 29 2016 Kentaro Hayashi - 6.05-1 +- new upstream release. + +* Sun May 29 2016 Kentaro Hayashi - 6.03-1 +- new upstream release. + +* Fri Apr 29 2016 HAYASHI Kentaro - 6.02-1 +- new upstream release. + +* Tue Mar 29 2016 Masafumi Yokoyama - 6.01-1 +- new upstream release. + +* Mon Feb 29 2016 Kouhei Sutou - 6.00-1 +- new upstream release. + +* Fri Jan 29 2016 Kouhei Sutou - 5.12-1 +- new upstream release. + +* Tue Dec 29 2015 Kouhei Sutou - 5.11-1 +- new upstream release. + +* Sun Nov 29 2015 Kouhei Sutou - 5.10-1 +- new upstream release. + +* Thu Oct 29 2015 Kouhei Sutou - 5.09-1 +- new upstream release. + +* Tue Sep 29 2015 Kouhei Sutou - 5.08-1 +- new upstream release. + +* Mon Aug 31 2015 Kouhei Sutou - 5.06-1 +- new upstream release. + * Tue Mar 17 2015 Kouhei Sutou - 5.00-1 - initial release. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/source/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/packages/source/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/packages/source/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/source/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -1,17 +1,17 @@ MROONGA_BASE = $(PACKAGE)-$(VERSION) MROONGA_TAR_GZ = $(MROONGA_BASE).tar.gz -GROONGA_VERSION = 5.0.5 +GROONGA_VERSION = 7.0.7 GROONGA_BASE = groonga-$(GROONGA_VERSION) GROONGA_TAR_GZ = $(GROONGA_BASE).tar.gz -GROONGA_NORMALIZER_MYSQL_VERSION = 1.1.0 +GROONGA_NORMALIZER_MYSQL_VERSION = 1.1.1 GROONGA_NORMALIZER_MYSQL_BASE = \ groonga-normalizer-mysql-$(GROONGA_NORMALIZER_MYSQL_VERSION) GROONGA_NORMALIZER_MYSQL_TAR_GZ = \ $(GROONGA_NORMALIZER_MYSQL_BASE).tar.gz -MARIADB_VERSION = 10.0.20 +MARIADB_VERSION = 10.1.28 MARIADB_BASE = mariadb-$(MARIADB_VERSION) MARIADB_TAR_GZ = $(MARIADB_BASE).tar.gz @@ -29,7 +29,7 @@ all: -release: archive upload +release: download archive upload ensure-rsync-path: @if test -z "$(RSYNC_PATH)"; then \ @@ -88,6 +88,8 @@ mkdir -p $$(dirname $(BUNDLED_GROONGA_PATH)) tar xf tmp/$(GROONGA_TAR_GZ) rm -rf $(GROONGA_BASE)/test + cd $(GROONGA_BASE)/vendor && ruby download_mecab.rb + cd $(GROONGA_BASE)/vendor && ruby download_lz4.rb mv $(GROONGA_BASE) $(BUNDLED_GROONGA_PATH) tar xf tmp/$(GROONGA_NORMALIZER_MYSQL_TAR_GZ) @@ -103,7 +105,7 @@ mkdir -p files/ (cd tmp && tar czf ../$@ $(MARIADB_WITH_MROONGA_BASE)) -PATCHES = \ +PATCHES = \ patches/mariadb-10.0.3-windows-build.diff tmp/$(MARIADB_WITH_MROONGA_FOR_WINDOWS_BASE).stamp: tmp/$(MARIADB_WITH_MROONGA_BASE).stamp $(PATCHES) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/ubuntu/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/packages/ubuntu/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/packages/ubuntu/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/ubuntu/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -1,5 +1,13 @@ -CODE_NAMES = precise,trusty,utopic,vivid +CODE_NAMES = trusty,xenial,zesty SOURCE = ../$(PACKAGE)-$(VERSION).tar.gz +SOURCE_55_BASE = $(PACKAGE)-5.5 +SOURCE_55 = $(SOURCE_55_BASE)_$(VERSION).orig.tar.gz +SOURCE_56_BASE = $(PACKAGE)-5.6 +SOURCE_56 = $(SOURCE_56_BASE)_$(VERSION).orig.tar.gz +SOURCE_57_BASE = $(PACKAGE)-5.7 +SOURCE_57 = $(SOURCE_57_BASE)_$(VERSION).orig.tar.gz +SOURCE_MARIADB_10_0_BASE = $(PACKAGE)-mariadb-10.0 +SOURCE_MARIADB_10_0 = $(SOURCE_MARIADB_10_0_BASE)_$(VERSION).orig.tar.gz all: @@ -13,12 +21,37 @@ ./upload.rb \ --package '$(PACKAGE)' \ --version '$(VERSION)' \ - --source-archive '$(SOURCE)' \ + --source-archive-directory '$(builddir)/' \ --code-names '$(CODE_NAMES)' \ - --debian-directory '$(srcdir)/../debian/' \ + --debian-base-directory '$(srcdir)/../' \ + --ppa '$(LAUNCHPAD_PPA)' \ --pgp-sign-key '$(LAUNCHPAD_UPLOADER_PGP_KEY)' -source: $(SOURCE) +source: $(SOURCE_55) $(SOURCE_56) $(SOURCE_57) $(SOURCE_MARIADB_10_0) $(SOURCE): ln -s $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz $(SOURCE) + +$(SOURCE_55): $(SOURCE) + tar xf $(SOURCE) + mv $(PACKAGE)-$(VERSION) $(SOURCE_55_BASE)-$(VERSION) + tar cfz $(SOURCE_55) $(SOURCE_55_BASE)-$(VERSION) + rm -r $(SOURCE_55_BASE)-$(VERSION) + +$(SOURCE_56): $(SOURCE) + tar xf $(SOURCE) + mv $(PACKAGE)-$(VERSION) $(SOURCE_56_BASE)-$(VERSION) + tar cfz $(SOURCE_56) $(SOURCE_56_BASE)-$(VERSION) + rm -r $(SOURCE_56_BASE)-$(VERSION) + +$(SOURCE_57): $(SOURCE) + tar xf $(SOURCE) + mv $(PACKAGE)-$(VERSION) $(SOURCE_57_BASE)-$(VERSION) + tar cfz $(SOURCE_57) $(SOURCE_57_BASE)-$(VERSION) + rm -r $(SOURCE_57_BASE)-$(VERSION) + +$(SOURCE_MARIADB_10_0): $(SOURCE) + tar xf $(SOURCE) + mv $(PACKAGE)-$(VERSION) $(SOURCE_MARIADB_10_0_BASE)-$(VERSION) + tar cfz $(SOURCE_MARIADB_10_0) $(SOURCE_MARIADB_10_0_BASE)-$(VERSION) + rm -r $(SOURCE_MARIADB_10_0_BASE)-$(VERSION) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/ubuntu/upload.rb mariadb-10.1-10.1.30/storage/mroonga/packages/ubuntu/upload.rb --- mariadb-10.1-10.1.25/storage/mroonga/packages/ubuntu/upload.rb 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/ubuntu/upload.rb 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env ruby # -# Copyright(C) 2014 Kouhei Sutou +# Copyright(C) 2014-2016 Kouhei Sutou # Copyright(C) 2014 HAYASHI Kentaro # # This library is free software; you can redistribute it and/or @@ -24,6 +24,7 @@ class Uploader def initialize @dput_configuration_name = "groonga-ppa" + @use_pbuilder = false end def run @@ -36,7 +37,22 @@ @required_groonga_version = required_groonga_version @code_names.each do |code_name| - upload(code_name) + mysql55_version = @mysql55_versions[code_name] + mysql56_version = @mysql56_versions[code_name] + mysql57_version = @mysql57_versions[code_name] + mariadb10_0_version = @mariadb10_0_versions[code_name] + if mysql55_version + upload(code_name, "5.5", mysql55_version) + end + if mysql56_version + upload(code_name, "5.6", mysql56_version) + end + if mysql57_version + upload(code_name, "5.7", mysql57_version) + end + if mariadb10_0_version + upload(code_name, "mariadb-10.0", mariadb10_0_version) + end end end @@ -66,18 +82,37 @@ end def ensure_mysql_version - @mysql_version = {} + @mysql_versions = {} + @mysql55_versions = {} + @mysql56_versions = {} + @mysql57_versions = {} + @mariadb10_0_versions = {} @code_names.each do |code_name| - open("http://packages.ubuntu.com/#{code_name}/allpackages?format=txt.gz") do |file| - file.each_line do |line| - @mysql_version[code_name] = $1 if line =~ /\Amysql-server \((.+?)\).+/ + source_names = [code_name, "#{code_name}-updates"] + source_names.each do |source_name| + allpackages_url = + "http://packages.ubuntu.com/#{source_name}/allpackages?format=txt.gz" + open(allpackages_url) do |file| + file.each_line do |line| + case line + when /\Amysql-server \((.+?)[\s)]/ + @mysql_versions[code_name] = $1 + when /\Amysql-server-5\.5 \((.+?)[\s)]/ + @mysql55_versions[code_name] = $1 + when /\Amysql-server-5\.6 \((.+?)[\s)]/ + @mysql56_versions[code_name] = $1 + when /\Amysql-server-5\.7 \((.+?)[\s)]/ + @mysql57_versions[code_name] = $1 + when /\Amariadb-server-10\.0 \((.+?)[\s)]/ + @mariadb10_0_versions[code_name] = $1 + end + end end end end end def parse_command_line! - parser = OptionParser.new parser.on("--package=NAME", "The package name") do |name| @@ -87,59 +122,97 @@ "The version") do |version| @version = version end - parser.on("--source-archive=ARCHIVE", - "The source archive") do |source_archive| - @source_archive = Pathname.new(source_archive).expand_path + parser.on("--source-archive-directory=DIRECTORY", + "The directory that has source archives") do |directory| + @source_archive_directory = Pathname.new(directory).expand_path end parser.on("--code-names=CODE_NAME1,CODE_NAME2,CODE_NAME3,...", Array, "The target code names") do |code_names| @code_names = code_names end - parser.on("--debian-directory=DIRECTORY", - "The debian/ directory") do |debian_directory| - @debian_directory = Pathname.new(debian_directory).expand_path + parser.on("--debian-base-directory=DIRECTORY", + "The directory that has debianXX/ directory") do |directory| + @debian_base_directory = Pathname.new(directory).expand_path + end + parser.on("--ppa=PPA", + "The personal package archive name (groonga-ppa or groonga-nightly") do |ppa| + @dput_configuration_name = ppa end parser.on("--pgp-sign-key=KEY", "The PGP key to sign .changes and .dsc") do |pgp_sign_key| @pgp_sign_key = pgp_sign_key end - parser.on("--pbuilder", - "Use pbuilder for build check") do |pbuilder| - @use_pbuilder = pbuilder + parser.on("--[no-]pbuilder", + "Use pbuilder for build check") do |use_pbuilder| + @use_pbuilder = use_pbuilder end parser.parse! end - def upload(code_name) + def upload(code_name, mysql_short_version, mysql_version) + default_mysql_version = (@mysql_versions[code_name] == mysql_version) + deb_package_name = "#{@package}-#{mysql_short_version}" in_temporary_directory do - FileUtils.cp(@source_archive.to_s, - "#{@package}_#{@version}.orig.tar.gz") - run_command("tar", "xf", @source_archive.to_s) - directory_name = "#{@package}-#{@version}" + source_archive = + @source_archive_directory + "#{deb_package_name}_#{@version}.orig.tar.gz" + run_command("tar", "xf", source_archive.to_s) + directory_name = "#{deb_package_name}-#{@version}" Dir.chdir(directory_name) do - FileUtils.cp_r(@debian_directory.to_s, "debian") + debian_directory = + @debian_base_directory + "debian-#{mysql_short_version}" + FileUtils.cp_r(debian_directory.to_s, "debian") deb_version = "#{current_deb_version.succ}~#{code_name}1" run_command("dch", "--distribution", code_name, "--newversion", deb_version, "Build for #{code_name}.") - case code_name - when "vivid" - run_command("sed", - "-i", "-e", "s,5\\.5,5.6,g", - "debian/rules") + remove_versionless_mroonga = true + if default_mysql_version or mysql_short_version.start_with?("mariadb-") + remove_versionless_mroonga = false + end + if remove_versionless_mroonga + control_content = File.read("debian/control") + File.open("debian/control", "w") do |control| + in_mysql_server_mroonga = false + control_content.each_line do |line| + case line.chomp + when "" + if in_mysql_server_mroonga + in_mysql_server_mroonga = false + else + control.print(line) + end + when "Package: mysql-server-mroonga" + in_mysql_server_mroonga = true + else + next if in_mysql_server_mroonga + control.print(line) + end + end + end end run_command("sed", - "-i", "-e", "s,MYSQL_VERSION,#{@mysql_version[code_name]},", + "-i", "-e", + "s,MYSQL_VERSION\\|MARIADB_VERSION,#{mysql_version},", "debian/control") - run_command("debuild", "-S", "-sa", "-pgpg2", "-k#{@pgp_sign_key}") + run_command("debuild", + "--no-lintian", + # Workaround for Launchpad. Launchpad doesn't accept + # .buildinfo yet. + # See also: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853795 + "--buildinfo-option=-O", + "-d", + "-S", + "-sa", + "-pgpg2", + "-k#{@pgp_sign_key}") if @use_pbuilder run_command("pbuilder-dist", code_name, "build", - "../#{@package}_#{deb_version}.dsc") + "../#{deb_package_name}_#{deb_version}.dsc") else run_command("dput", @dput_configuration_name, - "../#{@package}_#{deb_version}_source.changes") + "../#{deb_package_name}_#{deb_version}_source.changes") end end end diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -build-vc2013-zip-32.bat -build-vc2013-zip-64.bat -REM build-vc2013-msi-32.bat -REM build-vc2013-msi-64.bat diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-msi-32.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-msi-32.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-msi-32.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-msi-32.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -rmdir /S /Q build-vc2013-msi-32 -mkdir build-vc2013-msi-32 -cd build-vc2013-msi-32 -cmake ..\source -G "Visual Studio 12" > config.log -cmake --build . --config RelWithDebInfo > build.log -cmake --build . --config RelWithDebInfo --target msi > msi.log -move *.msi ..\ -cd .. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-msi-64.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-msi-64.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-msi-64.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-msi-64.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -rmdir /S /Q build-vc2013-msi-64 -mkdir build-vc2013-msi-64 -cd build-vc2013-msi-64 -cmake ..\source -G "Visual Studio 12 Win64" > config.log -cmake --build . --config RelWithDebInfo > build.log -cmake --build . --config RelWithDebInfo --target msi > msi.log -move *.msi ..\ -cd .. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-zip-32.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-zip-32.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-zip-32.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-zip-32.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -rmdir /S /Q build-vc2013-zip-32 -mkdir build-vc2013-zip-32 -cd build-vc2013-zip-32 -cmake ..\source -G "Visual Studio 12" -DMRN_GROONGA_EMBED=OFF -DMRN_GROONGA_NORMALIZER_MYSQL_EMBED=OFF > config.log -cmake --build . --config RelWithDebInfo > build.log -cmake --build . --config RelWithDebInfo --target package > zip.log -move *.zip ..\ -cd .. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-zip-64.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-zip-64.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2013-zip-64.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2013-zip-64.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -rmdir /S /Q build-vc2013-zip-64 -mkdir build-vc2013-zip-64 -cd build-vc2013-zip-64 -cmake ..\source -G "Visual Studio 12 Win64" -DMRN_GROONGA_EMBED=OFF -DMRN_GROONGA_NORMALIZER_MYSQL_EMBED=OFF > config.log -cmake --build . --config RelWithDebInfo > build.log -cmake --build . --config RelWithDebInfo --target package > zip.log -move *.zip ..\ -cd .. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015.bat 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -build-vc2015-zip-32.bat -build-vc2015-zip-64.bat +call build-vc2015-zip-32.bat +call build-vc2015-zip-64.bat REM build-vc2015-msi-32.bat REM build-vc2015--msi-64.bat diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-msi-32.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-msi-32.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-msi-32.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-msi-32.bat 2017-12-21 15:48:52.000000000 +0000 @@ -1,7 +1,7 @@ rmdir /S /Q build-vc2015-msi-32 mkdir build-vc2015-msi-32 cd build-vc2015-msi-32 -cmake ..\source -G "Visual Studio 14" > config.log +cmake ..\source -G "Visual Studio 14 2015" > config.log cmake --build . --config RelWithDebInfo > build.log cmake --build . --config RelWithDebInfo --target msi > msi.log move *.msi ..\ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-msi-64.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-msi-64.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-msi-64.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-msi-64.bat 2017-12-21 15:48:52.000000000 +0000 @@ -1,7 +1,7 @@ rmdir /S /Q build-vc2015-msi-64 mkdir build-vc2015-msi-64 cd build-vc2015-msi-64 -cmake ..\source -G "Visual Studio 14 Win64" > config.log +cmake ..\source -G "Visual Studio 14 2015 Win64" > config.log cmake --build . --config RelWithDebInfo > build.log cmake --build . --config RelWithDebInfo --target msi > msi.log move *.msi ..\ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-zip-32.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-zip-32.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-zip-32.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-zip-32.bat 2017-12-21 15:48:52.000000000 +0000 @@ -1,7 +1,12 @@ rmdir /S /Q build-vc2015-zip-32 mkdir build-vc2015-zip-32 cd build-vc2015-zip-32 -cmake ..\source -G "Visual Studio 14" -DMRN_GROONGA_EMBED=OFF -DMRN_GROONGA_NORMALIZER_MYSQL_EMBED=OFF > config.log +cmake ..\source -G "Visual Studio 14 2015" ^ + -DMRN_GROONGA_EMBED=OFF ^ + -DMRN_GROONGA_NORMALIZER_MYSQL_EMBED=OFF ^ + -DGRN_WITH_BUNDLED_LZ4=ON ^ + -DGRN_WITH_BUNDLED_MECAB=ON ^ + > config.log cmake --build . --config RelWithDebInfo > build.log cmake --build . --config RelWithDebInfo --target package > zip.log move *.zip ..\ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-zip-64.bat mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-zip-64.bat --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/build-vc2015-zip-64.bat 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/build-vc2015-zip-64.bat 2017-12-21 15:48:52.000000000 +0000 @@ -1,7 +1,12 @@ rmdir /S /Q build-vc2015-zip-64 mkdir build-vc2015-zip-64 cd build-vc2015-zip-64 -cmake ..\source -G "Visual Studio 14 Win64" -DMRN_GROONGA_EMBED=OFF -DMRN_GROONGA_NORMALIZER_MYSQL_EMBED=OFF > config.log +cmake ..\source -G "Visual Studio 14 2015 Win64" ^ + -DMRN_GROONGA_EMBED=OFF ^ + -DMRN_GROONGA_NORMALIZER_MYSQL_EMBED=OFF ^ + -DGRN_WITH_BUNDLED_LZ4=ON ^ + -DGRN_WITH_BUNDLED_MECAB=ON ^ + > config.log cmake --build . --config RelWithDebInfo > build.log cmake --build . --config RelWithDebInfo --target package > zip.log move *.zip ..\ diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/packages/windows/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -1,12 +1,12 @@ EXTRA_DIST = \ README.md \ - build-vc2013.bat \ - build-vc2013-zip-32.bat \ - build-vc2013-zip-64.bat \ - build-vc2013-msi-32.bat \ - build-vc2013-msi-64.bat \ build-vc2015.bat \ build-vc2015-zip-32.bat \ build-vc2015-zip-64.bat \ build-vc2015-msi-32.bat \ - build-vc2015-msi-64.bat + build-vc2015-msi-64.bat \ + build-vc2017.bat \ + build-vc2017-zip-32.bat \ + build-vc2017-zip-64.bat \ + build-vc2017-msi-32.bat \ + build-vc2017-msi-64.bat diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/windows/README.md mariadb-10.1-10.1.30/storage/mroonga/packages/windows/README.md --- mariadb-10.1-10.1.25/storage/mroonga/packages/windows/README.md 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/windows/README.md 2017-12-21 15:48:52.000000000 +0000 @@ -6,16 +6,16 @@ ## Build with Visual C++ Express -You need to use Visual C++ 2013 or later to build Mroonga with Express -edition. `build-vc2013.bat` is a build batch script to build with -Visual C++ Express 2013. +You need to use Visual Studio 2015 for Windows Desktop or later to build Mroonga with express +edition. `build-vc2015.bat` is a build batch script to build with +Visual Studio 2015 for Windows Desktop. Note that you can't build MSI file with Express edition. You need to use Professional edition or upper editions to build MSI file. -## Build with Visual C++ Professional +## Build with Visual Studio Community You can build both zip file MSI file with Professional edition. But now, this feature is temporary disabled. -If you want to create MSI package, please uncomment in `build-vc2013.bat`. -And then, you can build MSI package with Visual Studio 2013 Professional. +If you want to create MSI package, please uncomment in `build-vc2015.bat`. +And then, you can build MSI package with Visual Studio 2015 Community. diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/yum/build-in-vm.sh mariadb-10.1-10.1.30/storage/mroonga/packages/yum/build-in-vm.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/yum/build-in-vm.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/yum/build-in-vm.sh 2017-12-21 15:48:52.000000000 +0000 @@ -1,8 +1,8 @@ #!/bin/sh -if [ $# != 4 ]; then +if [ $# != 5 ]; then echo "Usage: $0 PACKAGE SPEC_DIR MYSQL_VARIANTS ARCHITECTURES" - echo " e.g.: $0 mroonga ../rpm/centos 'mysql55 mariadb' 'i386 x86_64'" + echo " e.g.: $0 mroonga ../rpm/centos 'mysql55 mariadb' 'i386 x86_64' '6 7'" exit 1 fi @@ -10,6 +10,7 @@ SPEC_DIR="$2" MYSQL_VARIANTS="$3" ARCHITECTURES="$4" +CENTOS_VERSIONS="$5" run() { @@ -30,21 +31,42 @@ architectures="${ARCHITECTURES}" case ${mysql_variant} in mysql55) - centos_versions="5 6" + centos_versions="6" ;; mysql56-community) centos_versions="6 7" ;; + mysql57-community) + centos_versions="6 7" + ;; mariadb) centos_versions="7" ;; + mariadb-10.1) + centos_versions="6 7" + ;; + mariadb-10.2) + centos_versions="6 7" + ;; percona-server-56) centos_versions="6 7" ;; + percona-server-57) + centos_versions="6 7" + ;; esac for architecture in ${architectures}; do for centos_version in ${centos_versions}; do + skip=1 + for given_version in ${CENTOS_VERSIONS}; do + if [ ${given_version} = ${centos_version} ]; then + skip=0 + fi + done + if [ $skip -eq 1 ]; then + continue + fi if [ ${mysql_variant} = mysql55 -a ${centos_version} = 6 -a ${architecture} = i386 ]; then continue fi diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/yum/build-rpm.sh mariadb-10.1-10.1.30/storage/mroonga/packages/yum/build-rpm.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/yum/build-rpm.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/yum/build-rpm.sh 2017-12-21 15:48:52.000000000 +0000 @@ -70,36 +70,94 @@ run yum install -y mariadb-devel ;; centos) + release_rpm=groonga-release-1.3.0-1.noarch.rpm + if [ ${distribution_version} = 5 ]; then + wget http://packages.groonga.org/${distribution}/${release_rpm} + run yum install -y --nogpgcheck ${release_rpm} + rm -f ${release_rpm} + else + run yum install -y \ + http://packages.groonga.org/${distribution}/${release_rpm} + fi + run yum makecache + case ${package_name} in mysql55-${PACKAGE}) USE_MYSQLSERVICES_COMPAT=yes run yum install -y scl-utils-build if [ ${distribution_version} = 6 ]; then - run yum install -y centos-release-SCL + run yum install -y centos-release-scl fi run yum install -y mysql55-mysql-devel mysql55-build ;; - mysql56-community-${PACKAGE}) - release_rpm=mysql-community-release-el${distribution_version}-5.noarch.rpm + mysql5?-community-${PACKAGE}) + release_rpm=mysql-community-release-el${distribution_version}-7.noarch.rpm run yum -y install http://repo.mysql.com/${release_rpm} - run yum -y install mysql-community-devel + if [ "${package_name}" = "mysql57-community-${PACKAGE}" ]; then + run yum install -y yum-utils + run yum-config-manager --disable mysql56-community + run yum-config-manager --enable mysql57-community + if [ ${distribution_version} = 6 ]; then + run yum install -y cmake28 + fi + fi + run yum install -y mysql-community-devel ;; mariadb-${PACKAGE}) - run yum -y install mariadb-devel - ;; + run yum install -y mariadb-devel + ;; + mariadb-10.1-${PACKAGE}) + if [ "${architecture}" = "x86_64" ]; then + mariadb_architecture="amd64" + else + mariadb_architecture="x86" + fi + cat < /etc/yum.repos.d/MariaDB.repo +[mariadb] +name = MariaDB +baseurl = http://yum.mariadb.org/10.1/${distribution}${distribution_version}-${mariadb_architecture} +gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB +gpgcheck=1 +REPO + run yum install -y MariaDB-devel + if [ ${distribution_version} = 6 ]; then + run yum install -y cmake28 + fi + ;; + mariadb-10.2-${PACKAGE}) + if [ "${architecture}" = "x86_64" ]; then + mariadb_architecture="amd64" + else + mariadb_architecture="x86" + fi + cat < /etc/yum.repos.d/MariaDB.repo +[mariadb] +name = MariaDB +baseurl = http://yum.mariadb.org/10.2/${distribution}${distribution_version}-${mariadb_architecture} +gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB +gpgcheck=1 +REPO + run yum install -y MariaDB-devel + if [ ${distribution_version} = 6 ]; then + run yum install -y cmake28 + fi + ;; percona-server-56-${PACKAGE}) - release_rpm_version=0.1-3 + release_rpm_version=0.1-4 + release_rpm=percona-release-${release_rpm_version}.noarch.rpm + run yum install -y http://www.percona.com/downloads/percona-release/redhat/${release_rpm_version}/${release_rpm} + run yum install -y Percona-Server-devel-56 + ;; + percona-server-57-${PACKAGE}) + release_rpm_version=0.1-4 release_rpm=percona-release-${release_rpm_version}.noarch.rpm - run yum -y install http://www.percona.com/downloads/percona-release/redhat/${release_rpm_version}/${release_rpm} - run yum -y install Percona-Server-devel-56 + run yum install -y http://www.percona.com/downloads/percona-release/redhat/${release_rpm_version}/${release_rpm} + run yum install -y Percona-Server-devel-57 + if [ ${distribution_version} = 6 ]; then + run yum install -y cmake28 + fi ;; esac - - release_rpm=groonga-release-1.1.0-1.noarch.rpm - wget http://packages.groonga.org/${distribution}/${release_rpm} - run rpm -U ${release_rpm} - rm -f ${release_rpm} - run yum makecache ;; esac run yum install -y ${DEPENDED_PACKAGES} @@ -108,6 +166,11 @@ if [ "${distribution_version}" = "7" ]; then rpmbuild_options="$rpmbuild_options --define 'dist .el7'" fi +fi +if [ "${package_name}" = "percona-server-57-${PACKAGE}" ]; then + if [ "${distribution_version}" = "7" ]; then + rpmbuild_options="$rpmbuild_options --define 'dist .el7'" + fi fi if [ "${USE_MYSQLSERVICES_COMPAT}" = "yes" ]; then rpmbuild_options="$rpmbuild_options --define 'mroonga_configure_options --with-libmysqlservices-compat'" diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/yum/env.sh.in mariadb-10.1-10.1.30/storage/mroonga/packages/yum/env.sh.in --- mariadb-10.1-10.1.25/storage/mroonga/packages/yum/env.sh.in 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/yum/env.sh.in 2017-12-21 15:48:52.000000000 +0000 @@ -9,6 +9,7 @@ gperf readline-devel openssl-devel +zlib-devel time wget ncurses-devel @@ -23,6 +24,9 @@ perl-Test-Simple pam-devel selinux-policy-devel +numactl-devel groonga-devel groonga-normalizer-mysql-devel +cyrus-sasl-devel +openldap-devel " diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/yum/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/packages/yum/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/packages/yum/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/yum/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -1,7 +1,16 @@ REPOSITORIES_PATH = repositories DISTRIBUTIONS = centos ARCHITECTURES = i386 x86_64 -MYSQL_VARIANTS = mysql55 mysql56-community mariadb percona-server-56 +MYSQL_VARIANTS = \ + mysql55 \ + mysql56-community \ + mysql57-community \ + mariadb \ + mariadb-10.1 \ + mariadb-10.2 \ + percona-server-56 \ + percona-server-57 +CENTOS_VERSIONS = 6 7 SPEC_DIR = $(builddir)/../rpm/centos all: @@ -47,7 +56,8 @@ "$(PACKAGE)" \ "$(SPEC_DIR)" \ "$(MYSQL_VARIANTS)" \ - "$(ARCHITECTURES)" + "$(ARCHITECTURES)" \ + "$(CENTOS_VERSIONS)" source: tmp/$(PACKAGE)-$(VERSION).tar.gz @@ -61,4 +71,7 @@ specs: $(SPEC_DIR)/mysql55-$(PACKAGE).spec specs: $(SPEC_DIR)/mysql56-community-$(PACKAGE).spec specs: $(SPEC_DIR)/mariadb-$(PACKAGE).spec +specs: $(SPEC_DIR)/mariadb-10.1-$(PACKAGE).spec +specs: $(SPEC_DIR)/mariadb-10.2-$(PACKAGE).spec specs: $(SPEC_DIR)/percona-server-56-$(PACKAGE).spec +specs: $(SPEC_DIR)/percona-server-57-$(PACKAGE).spec diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/yum/update-repository.sh mariadb-10.1-10.1.30/storage/mroonga/packages/yum/update-repository.sh --- mariadb-10.1-10.1.25/storage/mroonga/packages/yum/update-repository.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/yum/update-repository.sh 2017-12-21 15:48:52.000000000 +0000 @@ -22,8 +22,6 @@ for distribution in ${DISTRIBUTIONS}; do for dir in ${DESTINATION}${distribution}/*/*; do - # "--checksum sha" is for CentOS 5. If we drop CentOS 5 support, - # we can remove the option. - test -d $dir && run createrepo --checksum sha $dir + test -d $dir && run createrepo $dir done; done diff -Nru mariadb-10.1-10.1.25/storage/mroonga/packages/yum/Vagrantfile mariadb-10.1-10.1.30/storage/mroonga/packages/yum/Vagrantfile --- mariadb-10.1-10.1.25/storage/mroonga/packages/yum/Vagrantfile 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/packages/yum/Vagrantfile 2017-12-21 15:48:52.000000000 +0000 @@ -7,31 +7,22 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| vms = [ { - :id => "centos-5-i386", - :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-5.11-i386_chef-provisionerless.box", - }, - { - :id => "centos-5-x86_64", - :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-5.11_chef-provisionerless.box", - }, - { :id => "centos-6-i386", - :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.6-i386_chef-provisionerless.box", + :box => "bento/centos-6.9-i386", }, { :id => "centos-6-x86_64", - :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.6_chef-provisionerless.box", + :box => "bento/centos-6.9", }, { :id => "centos-7-x86_64", - :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.1_chef-provisionerless.box", + :box => "bento/centos-7.4", }, ] vms.each do |vm| config.vm.define(vm[:id]) do |node| - node.vm.box = vm[:id] - node.vm.box_url = vm[:box_url] + node.vm.box = vm[:box] node.vm.provision(:shell, :path => "build-rpm.sh") node.vm.provider("virtualbox") do |virtual_box| system_n_cpus = 1 @@ -44,6 +35,7 @@ vm_n_cpus = 1 end virtual_box.cpus = vm_n_cpus + virtual_box.memory = (ENV["VM_MEMORY"] || 1024).to_i end end end diff -Nru mariadb-10.1-10.1.25/storage/mroonga/plugin_version mariadb-10.1-10.1.30/storage/mroonga/plugin_version --- mariadb-10.1-10.1.25/storage/mroonga/plugin_version 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/plugin_version 2017-12-21 15:48:52.000000000 +0000 @@ -1 +1 @@ -5.4 \ No newline at end of file +7.7 \ No newline at end of file diff -Nru mariadb-10.1-10.1.25/storage/mroonga/required_groonga_version mariadb-10.1-10.1.30/storage/mroonga/required_groonga_version --- mariadb-10.1-10.1.25/storage/mroonga/required_groonga_version 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/required_groonga_version 2017-12-21 15:48:52.000000000 +0000 @@ -1 +1 @@ -5.0.2 +7.0.6 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/test/run-sql-test.sh mariadb-10.1-10.1.30/storage/mroonga/test/run-sql-test.sh --- mariadb-10.1-10.1.25/storage/mroonga/test/run-sql-test.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/test/run-sql-test.sh 2017-12-21 15:48:52.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # # Copyright(C) 2010 Tetsuro IKEDA -# Copyright(C) 2010-2013 Kouhei Sutou +# Copyright(C) 2010-2017 Kouhei Sutou # Copyright(C) 2011 Kazuhiko # # This library is free software; you can redistribute it and/or @@ -16,7 +16,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA export BASE_DIR="$(cd $(dirname $0); pwd)" top_dir="$BASE_DIR/.." @@ -24,31 +24,44 @@ n_processors=1 case `uname` in - Linux) - n_processors="$(grep '^processor' /proc/cpuinfo | wc -l)" - ;; - Darwin) - n_processors="$(/usr/sbin/sysctl -n hw.ncpu)" - ;; - *) - : - ;; + Linux) + n_processors="$(grep '^processor' /proc/cpuinfo | wc -l)" + ;; + Darwin) + n_processors="$(/usr/sbin/sysctl -n hw.ncpu)" + ;; + *) + : + ;; esac if [ "$NO_MAKE" != "yes" ]; then - MAKE_ARGS= - if [ -n "$n_processors" ]; then - MAKE_ARGS="-j${n_processors}" - fi - make $MAKE_ARGS -C $top_dir > /dev/null || exit 1 + MAKE_ARGS= + if [ -n "$n_processors" ]; then + MAKE_ARGS="-j${n_processors}" + fi + make $MAKE_ARGS -C $top_dir > /dev/null || exit 1 fi . "${top_dir}/config.sh" bundled_groonga_normalizer_mysql_dir="${top_dir}/vendor/groonga/vendor/plugins/groonga-normalizer-mysql" if [ -d "${bundled_groonga_normalizer_mysql_dir}" ]; then - GRN_PLUGINS_DIR="${bundled_groonga_normalizer_mysql_dir}" - export GRN_PLUGINS_DIR + GRN_PLUGINS_DIR="${bundled_groonga_normalizer_mysql_dir}" + export GRN_PLUGINS_DIR +fi + +maria_storage_dir="${MYSQL_SOURCE_DIR}/storage/maria" +if [ -d "${maria_storage_dir}" ]; then + mariadb="yes" +else + mariadb="no" +fi +percona_udf_dir="${MYSQL_SOURCE_DIR}/plugin/percona-udf" +if [ -d "${percona_udf_dir}" ]; then + percona="yes" +else + percona="no" fi source_mysql_test_dir="${MYSQL_SOURCE_DIR}/mysql-test" @@ -58,51 +71,47 @@ build_test_suites_dir="${build_mysql_test_dir}/suite" build_test_include_dir="${build_mysql_test_dir}/include" case "${MYSQL_VERSION}" in - 5.1.*) - plugins_dir="${MYSQL_BUILD_DIR}/lib/mysql/plugin" - if [ ! -d "${build_test_suites_dir}" ]; then - mkdir -p "${build_test_suites_dir}" - fi - ;; - *) - if [ ! -d "${build_test_suites_dir}" ]; then - ln -s "${source_test_suites_dir}" "${build_test_suites_dir}" - fi - maria_storage_dir="${MYSQL_SOURCE_DIR}/storage/maria" - if [ -d "${maria_storage_dir}" ]; then - mariadb="yes" - else - mariadb="no" - fi - if [ "${mariadb}" = "yes" ]; then - if [ "${MRN_BUNDLED}" != "TRUE" ]; then - mariadb_mroonga_plugin_dir="${MYSQL_BUILD_DIR}/plugin/mroonga" - if [ ! -e "${mariadb_mroonga_plugin_dir}" ]; then - ln -s "${top_dir}" "${mariadb_mroonga_plugin_dir}" - fi - fi - plugins_dir= - else - plugins_dir="${MYSQL_SOURCE_DIR}/lib/plugin" + 5.1.*) + plugins_dir="${MYSQL_BUILD_DIR}/lib/mysql/plugin" + if [ ! -d "${build_test_suites_dir}" ]; then + mkdir -p "${build_test_suites_dir}" + fi + ;; + *) + if [ ! -d "${build_test_suites_dir}" ]; then + ln -s "${source_test_suites_dir}" "${build_test_suites_dir}" + fi + if [ "${mariadb}" = "yes" ]; then + if [ "${MRN_BUNDLED}" != "TRUE" ]; then + mariadb_mroonga_plugin_dir="${MYSQL_BUILD_DIR}/plugin/mroonga" + if [ ! -e "${mariadb_mroonga_plugin_dir}" ]; then + ln -s "${top_dir}" "${mariadb_mroonga_plugin_dir}" fi - ;; + fi + plugins_dir= + elif [ "${percona}" = "yes" ]; then + plugins_dir="${MYSQL_SOURCE_DIR}/lib/mysql/plugin" + else + plugins_dir="${MYSQL_SOURCE_DIR}/lib/plugin" + fi + ;; esac same_link_p() { - src=$1 - dest=$2 - if [ -L "$dest" -a "$(readlink "$dest")" = "$src" ]; then - return 0 - else - return 1 - fi + src=$1 + dest=$2 + if [ -L "$dest" -a "$(readlink "$dest")" = "$src" ]; then + return 0 + else + return 1 + fi } mroonga_mysql_test_suite_dir="${build_test_suites_dir}/mroonga" if ! same_link_p "${mroonga_test_dir}" "${mroonga_mysql_test_suite_dir}"; then - rm -rf "${mroonga_mysql_test_suite_dir}" - ln -s "${mroonga_test_dir}" "${mroonga_mysql_test_suite_dir}" + rm -rf "${mroonga_mysql_test_suite_dir}" + ln -s "${mroonga_test_dir}" "${mroonga_mysql_test_suite_dir}" fi innodb_test_suite_dir="${build_test_suites_dir}/innodb" @@ -110,27 +119,27 @@ mroonga_wrapper_innodb_test_suite_dir="${build_test_suites_dir}/${mroonga_wrapper_innodb_test_suite_name}" mroonga_wrapper_innodb_include_dir="${mroonga_wrapper_innodb_test_suite_dir}/include/" if [ "$0" -nt "$(dirname "${mroonga_wrapper_innodb_test_suite_dir}")" ]; then - rm -rf "${mroonga_wrapper_innodb_test_suite_dir}" + rm -rf "${mroonga_wrapper_innodb_test_suite_dir}" fi if [ ! -d "${mroonga_wrapper_innodb_test_suite_dir}" ]; then - cp -rp "${innodb_test_suite_dir}" "${mroonga_wrapper_innodb_test_suite_dir}" - mkdir -p "${mroonga_wrapper_innodb_include_dir}" - cp -rp "${source_test_include_dir}"/innodb[-_]*.inc \ - "${mroonga_wrapper_innodb_include_dir}" - ruby -i'' \ - -pe "\$_.gsub!(/\\bengine\\s*=\\s*innodb\\b([^;\\n]*)/i, + cp -rp "${innodb_test_suite_dir}" "${mroonga_wrapper_innodb_test_suite_dir}" + mkdir -p "${mroonga_wrapper_innodb_include_dir}" + cp -rp "${source_test_include_dir}"/innodb[-_]*.inc \ + "${mroonga_wrapper_innodb_include_dir}" + ruby -i'' \ + -pe "\$_.gsub!(/\\bengine\\s*=\\s*innodb\\b([^;\\n]*)/i, \"ENGINE=mroonga\\\1 COMMENT='ENGINE \\\"InnoDB\\\"'\") \$_.gsub!(/\\b(storage_engine\\s*=\\s*)innodb\\b([^;\\n]*)/i, \"\\\1mroonga\") \$_.gsub!(/^(--\\s*source\\s+)(include\\/innodb)/i, \"\\\1suite/mroonga_wrapper_innodb/\\\2\") " \ - ${mroonga_wrapper_innodb_test_suite_dir}/r/*.result \ - ${mroonga_wrapper_innodb_test_suite_dir}/t/*.test \ - ${mroonga_wrapper_innodb_test_suite_dir}/include/*.inc - sed -i'' \ - -e '1 i --source ../mroonga/include/mroonga/have_mroonga.inc' \ - ${mroonga_wrapper_innodb_test_suite_dir}/t/*.test + ${mroonga_wrapper_innodb_test_suite_dir}/r/*.result \ + ${mroonga_wrapper_innodb_test_suite_dir}/t/*.test \ + ${mroonga_wrapper_innodb_test_suite_dir}/include/*.inc + sed -i'' \ + -e '1 i --source ../mroonga/include/mroonga/have_mroonga.inc' \ + ${mroonga_wrapper_innodb_test_suite_dir}/t/*.test fi all_test_suite_names="" @@ -138,84 +147,87 @@ cd "${suite_dir}" suite_dir="$(pwd)" for test_suite_name in \ - $(find mroonga -type d -name 'include' '!' -prune -o \ - -type d '!' -name 'mroonga' \ - '!' -name 'include' \ - '!' -name '[tr]'); do - if [ -n "${all_test_suite_names}" ]; then - all_test_suite_names="${all_test_suite_names}," - fi - all_test_suite_names="${all_test_suite_names}${test_suite_name}" + $(find mroonga -type d -name 'include' '!' -prune -o \ + -type d '!' -name 'mroonga' \ + '!' -name 'include' \ + '!' -name '[tr]'); do + if [ -n "${all_test_suite_names}" ]; then + all_test_suite_names="${all_test_suite_names}," + fi + all_test_suite_names="${all_test_suite_names}${test_suite_name}" done cd - if [ -n "${plugins_dir}" ]; then - if [ -d "${top_dir}/.libs" ]; then - make -C ${top_dir} \ - install-pluginLTLIBRARIES \ - plugindir=${plugins_dir} > /dev/null || \ - exit 1 - else - mkdir -p "${plugins_dir}" - cp "${top_dir}/ha_mroonga.so" "${plugins_dir}" || exit 1 - fi + if [ -d "${top_dir}/.libs" ]; then + make -C ${top_dir} \ + install-pluginLTLIBRARIES \ + plugindir=${plugins_dir} > /dev/null || \ + exit 1 + else + mkdir -p "${plugins_dir}" + cp "${top_dir}/ha_mroonga.so" "${plugins_dir}" || exit 1 + fi fi +mysql_test_run_options="" test_suite_names="" test_names="" while [ $# -gt 0 ]; do - case "$1" in - --manual-gdb|--debug) - n_processors=1 - break - ;; - --*) - break - ;; + arg="$1" + shift + case "$arg" in + --manual-gdb|--gdb|--client-gdb|--boot-gdb|--debug|--valgrind) + n_processors=1 + mysql_test_run_options="${mysql_test_run_options} ${arg}" + ;; + --*) + mysql_test_run_options="${mysql_test_run_options} ${arg}" + ;; + *) + case "$arg" in + */t/*.test) + test_suite_name=$(echo "$arg" | sed -e 's,/t/.*\.test,,g') + test_suite_name=$(cd "$test_suite_name" && pwd) + test_name=$(echo "$arg" | sed -e 's,.*/t/\(.*\)\.test,\1,g') + ;; *) - case "$1" in - */t/*.test) - test_suite_name=$(echo "$1" | sed -e 's,/t/.*\.test,,g') - test_suite_name=$(cd "$test_suite_name" && pwd) - test_name=$(echo "$1" | sed -e 's,.*/t/\(.*\)\.test,\1,g') - ;; - *) - if [ -d "$1" ]; then - test_suite_name=$(cd "$1" && pwd) - else - test_suite_name="$1" - fi - test_name="" - ;; - esac - shift - - if [ -n "${test_name}" ]; then - if [ -n "${test_names}" ]; then - test_names="${test_names}|" - fi - test_names="${test_names}.*${test_name}" - fi - - test_suite_name=$(echo "$test_suite_name" | sed -e "s,^${suite_dir}/,,") - if echo "${test_suite_names}" | grep --quiet "${test_suite_name}"; then - continue - fi - if [ -n "${test_suite_names}" ]; then - test_suite_names="${test_suite_names}," - fi - test_suite_names="${test_suite_names}${test_suite_name}" - ;; - esac + if [ -d "$arg" ]; then + test_suite_name=$(cd "$arg" && pwd) + else + test_suite_name="$arg" + fi + test_name="" + ;; + esac + + if [ -n "${test_name}" ]; then + if [ -n "${test_names}" ]; then + test_names="${test_names}|" + fi + test_names="${test_names}${test_name}" + fi + + test_suite_name=$(echo "$test_suite_name" | sed -e "s,^${suite_dir}/,,") + if echo "${test_suite_names}" | grep --quiet "${test_suite_name}"; then + continue + fi + if [ -n "${test_suite_names}" ]; then + test_suite_names="${test_suite_names}," + fi + test_suite_names="${test_suite_names}${test_suite_name}" + ;; + esac done if [ -z "$test_suite_names" ]; then - test_suite_names="${all_test_suite_names}" + test_suite_names="${all_test_suite_names}" fi mysql_test_run_args="" -mysql_test_run_args="${mysql_test_run_args} --mem" -mysql_test_run_args="${mysql_test_run_args} --no-check-testcases" +if [ "${percona}" != "yes" ]; then + mysql_test_run_args="${mysql_test_run_args} --mem" +fi mysql_test_run_args="${mysql_test_run_args} --parallel=${n_processors}" mysql_test_run_args="${mysql_test_run_args} --retry=1" mysql_test_run_args="${mysql_test_run_args} --suite=${test_suite_names}" @@ -223,10 +235,10 @@ mysql_test_run_args="${mysql_test_run_args} --mysqld=--loose-plugin-load-add=ha_mroonga.so" mysql_test_run_args="${mysql_test_run_args} --mysqld=--loose-plugin-mroonga=ON" if [ -n "$test_names" ]; then - mysql_test_run_args="${mysql_test_run_args} --do-test=${test_names}" + mysql_test_run_args="${mysql_test_run_args} --do-test=${test_names}" fi (cd "$build_mysql_test_dir" && \ - ./mysql-test-run.pl \ - ${mysql_test_run_args} \ - "$@") + perl -I . ./mysql-test-run.pl \ + ${mysql_test_run_args} \ + ${mysql_test_run_options}) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/test/unit/test_mrn_path_mapper.cpp mariadb-10.1-10.1.30/storage/mroonga/test/unit/test_mrn_path_mapper.cpp --- mariadb-10.1-10.1.25/storage/mroonga/test/unit/test_mrn_path_mapper.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/test/unit/test_mrn_path_mapper.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -14,7 +14,7 @@ You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff -Nru mariadb-10.1-10.1.25/storage/mroonga/tools/prepare-sphinx-html.rb mariadb-10.1-10.1.30/storage/mroonga/tools/prepare-sphinx-html.rb --- mariadb-10.1-10.1.25/storage/mroonga/tools/prepare-sphinx-html.rb 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/tools/prepare-sphinx-html.rb 2017-12-21 15:48:52.000000000 +0000 @@ -48,13 +48,6 @@ end end -def add_language_annotation_to_source_label(html) - html.gsub(/>(ソースコードを表示)#{label}(英語)<" - end -end - def fix_js_link(js, language) fix_link_path(js) end @@ -156,7 +149,6 @@ content = fix_link(content, extension, language) if extension == "html" content = insert_facebook_html(content, language) - content = add_language_annotation_to_source_label(content) end dest_path.open("wb") do |dest| dest.print(content.strip) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/tools/travis/before_script.sh mariadb-10.1-10.1.30/storage/mroonga/tools/travis/before_script.sh --- mariadb-10.1-10.1.25/storage/mroonga/tools/travis/before_script.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/tools/travis/before_script.sh 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright(C) 2012-2015 Kouhei Sutou +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -14,7 +14,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # set -x set -e @@ -40,6 +40,7 @@ cmake_args=("${cmake_args[@]}" -DWITHOUT_TOKUDB=TRUE) if [ "${MROONGA_TEST_EMBEDDED}" = "yes" ]; then cmake_args=("${cmake_args[@]}" -DWITH_EMBEDDED_SERVER=TRUE) + cmake_args=("${cmake_args[@]}" -DMRN_BUILD_FOR_EMBEDDED_SERVER=TRUE) fi cmake . "${cmake_args[@]}" else @@ -49,9 +50,48 @@ PATH=$(echo /opt/mysql/server-*/bin/):$PATH fi configure_args=("--with-mysql-source=$PWD/vendor/mysql") - if [ "${MYSQL_VERSION}" = "mysql-5.6.25" ]; then - configure_args=("${configure_args[@]}" --enable-fast-mutexes) - fi + case "${MYSQL_VERSION}" in + mysql-5.6) + configure_args=("${configure_args[@]}" --enable-fast-mutexes) + ;; + mysql-5.7) + boost_archive=boost_1_59_0.tar.gz + curl -L -O http://downloads.sourceforge.net/project/boost/boost/1.59.0/${boost_archive} + sudo mkdir -p /usr/global/share + sudo mv ${boost_archive} /usr/global/share/ + (cd vendor/mysql && sudo debian/rules override_dh_auto_configure) + ;; + mariadb-5.5) + (cd vendor/mysql && sudo debian/rules configure) + configure_args=("${configure_args[@]}" + "--with-mysql-build=$PWD/vendor/mysql/builddir") + ;; + percona-server-5.6) + (cd vendor/mysql && \ + sudo debian/rules configure SKIP_DEBUG_BINARY=yes && \ + cd builddir/libservices && \ + sudo make > /dev/null && \ + cd ../extra && \ + sudo make > /dev/null) + configure_args=("${configure_args[@]}" + "--enable-fast-mutexes" + "--with-mysql-build=$PWD/vendor/mysql/builddir" + "--with-mysql-config=$PWD/vendor/mysql/builddir/scripts/mysql_config") + ;; + percona-server-5.7) + (cd vendor/mysql && \ + sudo debian/rules override_dh_auto_configure SKIP_DEBUG_BINARY=yes && \ + cd builddir/libservices && \ + sudo make > /dev/null && \ + cd ../extra && \ + sudo make > /dev/null) + configure_args=("${configure_args[@]}" + "--with-mysql-build=$PWD/vendor/mysql/builddir" + "--with-mysql-config=$PWD/vendor/mysql/builddir/scripts/mysql_config") + ;; + *) + : + ;; + esac ./configure "${configure_args[@]}" - cat "$(mysql_config --include | sed -e 's/-I//g')/my_config.h" fi diff -Nru mariadb-10.1-10.1.25/storage/mroonga/tools/travis/install.sh mariadb-10.1-10.1.30/storage/mroonga/tools/travis/install.sh --- mariadb-10.1-10.1.25/storage/mroonga/tools/travis/install.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/tools/travis/install.sh 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright(C) 2012-2015 Kouhei Sutou +# Copyright(C) 2012-2017 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -14,21 +14,50 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -# set -x +set -x set -e -mariadb_download_base=http://mirror.jmu.edu/pub/mariadb +# export GROONGA_MASTER=yes +# export GROONGA_NORMALIZER_MYSQL_MASTER=yes -export GROONGA_MASTER=yes -export GROONGA_NORMALIZER_MYSQL_MASTER=yes +#mariadb_download_base=http://mirror.jmu.edu/pub/mariadb +mariadb_download_base=http://ftp.osuosl.org/pub/mariadb + +version=$(echo "$MYSQL_VERSION" | sed -r -e 's/^(mysql|mariadb|percona-server)-//') +series=$(echo "$version" | sed -r -e 's/^([0-9]+\.[0-9]+).*$/\1/g') + +setup_mariadb_apt() +{ + distribution=$(lsb_release --short --id | tr 'A-Z' 'a-z') + code_name=$(lsb_release --short --codename) + component=main + apt_url_base="${mariadb_download_base}/repo/${series}" + cat < +# Copyright(C) 2012-2016 Kouhei Sutou # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -14,7 +14,7 @@ # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # set -x set -e @@ -43,11 +43,7 @@ build() { - if [ "${MROONGA_BUNDLED}" = "yes" ]; then - make -j${n_processors} > /dev/null - else - make -j${n_processors} > /dev/null - fi + make -j${n_processors} > /dev/null } run_unit_test() @@ -62,8 +58,12 @@ mysql_test_dir=/usr/mysql-test if [ -d /usr/lib/mysql-testsuite/ ]; then sudo cp -a /usr/lib/mysql-testsuite/ ${mysql_test_dir}/ + elif [ -d /usr/lib/mysql-test/ ]; then + sudo cp -a /usr/lib/mysql-test/ ${mysql_test_dir}/ elif [ -d /usr/share/mysql/mysql-test/ ]; then sudo cp -a /usr/share/mysql/mysql-test/ ${mysql_test_dir}/ + elif [ -d /usr/share/mysql-test/ ]; then + sudo cp -a /usr/share/mysql-test/ ${mysql_test_dir}/ elif [ -d /opt/mysql/ ]; then mysql_test_dir=$(echo /opt/mysql/server-*/mysql-test) else @@ -100,6 +100,9 @@ if [ "${MROONGA_TEST_EMBEDDED}" = "yes" ]; then test_args=("${test_args[@]}" "--embedded-server") fi + if [ "${MROONGA_TEST_PS_PROTOCOL}" = "yes" ]; then + test_args=("${test_args[@]}" "--ps-protocol") + fi if [ "${MROONGA_BUNDLED}" = "yes" ]; then # Plugins aren't supported. @@ -112,16 +115,17 @@ ${mroonga_dir}/test/run-sql-test.sh \ "${test_args[@]}" \ - --parallel="${n_processors}" + --parallel="${n_processors}" \ + --retry=3 else prepare_sql_test cd ${mysql_test_dir}/ - ./mysql-test-run.pl \ + perl ./mysql-test-run.pl \ "${test_args[@]}" \ --no-check-testcases \ --parallel="${n_processors}" \ - --retry=1 \ + --retry=3 \ --suite="${test_suite_names}" \ --force fi diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_command.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_command.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_command.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_command.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -2,7 +2,7 @@ /* Copyright(C) 2010 Tetsuro IKEDA Copyright(C) 2010-2013 Kentoku SHIBA - Copyright(C) 2011-2013 Kouhei Sutou + Copyright(C) 2011-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -25,39 +25,93 @@ #include #include #include +#include #include +#include + +#include MRN_BEGIN_DECLS extern mrn::DatabaseManager *mrn_db_manager; +extern mrn::ContextPool *mrn_context_pool; struct CommandInfo { - grn_ctx ctx; + grn_ctx *ctx; grn_obj *db; bool use_shared_db; + grn_obj command; String result; }; -MRN_API my_bool mroonga_command_init(UDF_INIT *initid, UDF_ARGS *args, +MRN_API my_bool mroonga_command_init(UDF_INIT *init, UDF_ARGS *args, char *message) { CommandInfo *info = NULL; - initid->ptr = NULL; - if (args->arg_count != 1) { - sprintf(message, - "mroonga_command(): Incorrect number of arguments: %u for 1", - args->arg_count); + init->ptr = NULL; + if (args->arg_count == 0) { + grn_snprintf(message, + MYSQL_ERRMSG_SIZE, + MYSQL_ERRMSG_SIZE, + "mroonga_command(): Wrong number of arguments: %u for 1..", + args->arg_count); goto error; } - if (args->arg_type[0] != STRING_RESULT) { - strcpy(message, - "mroonga_command(): The 1st argument must be command as string"); + + if ((args->arg_count % 2) == 0) { + grn_snprintf(message, + MYSQL_ERRMSG_SIZE, + MYSQL_ERRMSG_SIZE, + "mroonga_command(): The number of arguments must be odd: %u", + args->arg_count); goto error; } - initid->maybe_null = 1; - initid->const_item = 1; + + for (unsigned int i = 0; i < args->arg_count; ++i) { + switch (args->arg_type[i]) { + case STRING_RESULT: + // OK + break; + case REAL_RESULT: + grn_snprintf(message, + MYSQL_ERRMSG_SIZE, + MYSQL_ERRMSG_SIZE, + "mroonga_command(): Argument must be string: <%g>", + *reinterpret_cast(args->args[i])); + goto error; + break; + case INT_RESULT: + grn_snprintf(message, + MYSQL_ERRMSG_SIZE, + MYSQL_ERRMSG_SIZE, + "mroonga_command(): Argument must be string: <%lld>", + *reinterpret_cast(args->args[i])); + goto error; + break; + case DECIMAL_RESULT: + grn_snprintf(message, + MYSQL_ERRMSG_SIZE, + MYSQL_ERRMSG_SIZE, + "mroonga_command(): Argument must be string: <%.*s>", + static_cast(args->lengths[i]), + args->args[i]); + goto error; + break; + default: + grn_snprintf(message, + MYSQL_ERRMSG_SIZE, + MYSQL_ERRMSG_SIZE, + "mroonga_command(): Argument must be string: <%d>(%u)", + args->arg_type[i], + i); + goto error; + break; + } + } + init->maybe_null = 1; + init->const_item = 0; info = (CommandInfo *)mrn_my_malloc(sizeof(CommandInfo), MYF(MY_WME | MY_ZEROFILL)); @@ -66,53 +120,100 @@ goto error; } - grn_ctx_init(&(info->ctx), 0); + info->ctx = mrn_context_pool->pull(); { const char *current_db_path = MRN_THD_DB_PATH(current_thd); const char *action; if (current_db_path) { action = "open database"; - int error = mrn_db_manager->open(current_db_path, &(info->db)); + char encoded_db_path[FN_REFLEN + 1]; + uint encoded_db_path_length = + tablename_to_filename(current_db_path, + encoded_db_path, + sizeof(encoded_db_path)); + encoded_db_path[encoded_db_path_length] = '\0'; + mrn::Database *db; + int error = mrn_db_manager->open(encoded_db_path, &db); if (error == 0) { - grn_ctx_use(&(info->ctx), info->db); + info->db = db->get(); + grn_ctx_use(info->ctx, info->db); info->use_shared_db = true; } } else { action = "create anonymous database"; - info->db = grn_db_create(&(info->ctx), NULL, NULL); + info->db = grn_db_create(info->ctx, NULL, NULL); info->use_shared_db = false; } if (!info->db) { - sprintf(message, - "mroonga_command(): failed to %s: %s", - action, - info->ctx.errbuf); + grn_snprintf(message, + MYSQL_ERRMSG_SIZE, + MYSQL_ERRMSG_SIZE, + "mroonga_command(): failed to %s: %s", + action, + info->ctx->errbuf); goto error; } } + GRN_TEXT_INIT(&(info->command), 0); - initid->ptr = (char *)info; + init->ptr = (char *)info; return FALSE; error: if (info) { if (!info->use_shared_db) { - grn_obj_close(&(info->ctx), info->db); + grn_obj_close(info->ctx, info->db); } - grn_ctx_fin(&(info->ctx)); + mrn_context_pool->release(info->ctx); my_free(info); } return TRUE; } -MRN_API char *mroonga_command(UDF_INIT *initid, UDF_ARGS *args, char *result, +static void mroonga_command_escape_value(grn_ctx *ctx, + grn_obj *command, + const char *value, + unsigned long value_length) +{ + GRN_TEXT_PUTC(ctx, command, '"'); + + const char *value_current = value; + const char *value_end = value_current + value_length; + while (value_current < value_end) { + int char_length = grn_charlen(ctx, value_current, value_end); + + if (char_length == 0) { + break; + } else if (char_length == 1) { + switch (*value_current) { + case '\\': + case '"': + GRN_TEXT_PUTC(ctx, command, '\\'); + GRN_TEXT_PUTC(ctx, command, *value_current); + break; + case '\n': + GRN_TEXT_PUTS(ctx, command, "\\n"); + break; + default: + GRN_TEXT_PUTC(ctx, command, *value_current); + break; + } + } else { + GRN_TEXT_PUT(ctx, command, value_current, char_length); + } + + value_current += char_length; + } + + GRN_TEXT_PUTC(ctx, command, '"'); +} + +MRN_API char *mroonga_command(UDF_INIT *init, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { - CommandInfo *info = (CommandInfo *)initid->ptr; - grn_ctx *ctx = &(info->ctx); - char *command; - unsigned int command_length; + CommandInfo *info = (CommandInfo *)init->ptr; + grn_ctx *ctx = info->ctx; int flags = 0; if (!args->args[0]) { @@ -120,11 +221,31 @@ return NULL; } + GRN_BULK_REWIND(&(info->command)); + GRN_TEXT_PUT(ctx, &(info->command), args->args[0], args->lengths[0]); + for (unsigned int i = 1; i < args->arg_count; i += 2) { + if (!args->args[i] || !args->args[i + 1]) { + *is_null = 1; + return NULL; + } + + const char *name = args->args[i]; + unsigned long name_length = args->lengths[i]; + GRN_TEXT_PUTS(ctx, &(info->command), " --"); + GRN_TEXT_PUT(ctx, &(info->command), name, name_length); + + const char *value = args->args[i + 1]; + unsigned long value_length = args->lengths[i + 1]; + GRN_TEXT_PUTS(ctx, &(info->command), " "); + mroonga_command_escape_value(ctx, &(info->command), value, value_length); + } + *is_null = 0; - command = args->args[0]; - command_length = args->lengths[0]; - grn_ctx_send(ctx, command, command_length, 0); + grn_ctx_send(ctx, + GRN_TEXT_VALUE(&(info->command)), + GRN_TEXT_LEN(&(info->command)), + 0); if (ctx->rc) { my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0)); goto error; @@ -156,14 +277,15 @@ return NULL; } -MRN_API void mroonga_command_deinit(UDF_INIT *initid) +MRN_API void mroonga_command_deinit(UDF_INIT *init) { - CommandInfo *info = (CommandInfo *)initid->ptr; + CommandInfo *info = (CommandInfo *)init->ptr; if (info) { + GRN_OBJ_FIN(info->ctx, &(info->command)); if (!info->use_shared_db) { - grn_obj_close(&(info->ctx), info->db); + grn_obj_close(info->ctx, info->db); } - grn_ctx_fin(&(info->ctx)); + mrn_context_pool->release(info->ctx); MRN_STRING_FREE(info->result); my_free(info); } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_escape.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_escape.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_escape.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_escape.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */ /* - Copyright(C) 2013-2015 Kouhei Sutou + Copyright(C) 2013-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -23,33 +23,56 @@ #include #include #include +#include MRN_BEGIN_DECLS +extern mrn::ContextPool *mrn_context_pool; + struct EscapeInfo { - grn_ctx ctx; + grn_ctx *ctx; + bool script_mode; grn_obj target_characters; - grn_obj escaped_query; - bool processed; + grn_obj escaped_value; }; -MRN_API my_bool mroonga_escape_init(UDF_INIT *initid, UDF_ARGS *args, +MRN_API my_bool mroonga_escape_init(UDF_INIT *init, UDF_ARGS *args, char *message) { EscapeInfo *info = NULL; + bool script_mode = false; - initid->ptr = NULL; + init->ptr = NULL; if (!(1 <= args->arg_count && args->arg_count <= 2)) { - sprintf(message, - "mroonga_escape(): Incorrect number of arguments: %u for 1..2", - args->arg_count); + snprintf(message, + MYSQL_ERRMSG_SIZE, + "mroonga_escape(): Incorrect number of arguments: %u for 1..2", + args->arg_count); goto error; } - if (args->arg_type[0] != STRING_RESULT) { - strcpy(message, - "mroonga_escape(): The 1st argument must be query as string"); - goto error; + + if (args->attribute_lengths[0] == strlen("script") && + strncmp(args->attributes[0], "script", strlen("script")) == 0) { + switch (args->arg_type[0]) { + case ROW_RESULT: + snprintf(message, + MYSQL_ERRMSG_SIZE, + "mroonga_escape(): " + "The 1st script argument must be " + "string, integer or floating point: "); + goto error; + break; + default: + break; + } + script_mode = true; + } else { + if (args->arg_type[0] != STRING_RESULT) { + strcpy(message, + "mroonga_escape(): The 1st query argument must be string"); + goto error; + } } if (args->arg_count == 2) { if (args->arg_type[1] != STRING_RESULT) { @@ -60,28 +83,27 @@ } } - initid->maybe_null = 1; - initid->const_item = 1; + init->maybe_null = 1; - info = (EscapeInfo *)mrn_my_malloc(sizeof(EscapeInfo), - MYF(MY_WME | MY_ZEROFILL)); + info = static_cast(mrn_my_malloc(sizeof(EscapeInfo), + MYF(MY_WME | MY_ZEROFILL))); if (!info) { strcpy(message, "mroonga_escape(): out of memory"); goto error; } - grn_ctx_init(&(info->ctx), 0); + info->ctx = mrn_context_pool->pull(); + info->script_mode = script_mode; GRN_TEXT_INIT(&(info->target_characters), 0); - GRN_TEXT_INIT(&(info->escaped_query), 0); - info->processed = false; + GRN_TEXT_INIT(&(info->escaped_value), 0); - initid->ptr = (char *)info; + init->ptr = reinterpret_cast(info); return FALSE; error: if (info) { - grn_ctx_fin(&(info->ctx)); + mrn_context_pool->release(info->ctx); my_free(info); } return TRUE; @@ -89,32 +111,103 @@ static void escape(EscapeInfo *info, UDF_ARGS *args) { - grn_ctx *ctx = &(info->ctx); - char *query = args->args[0]; - unsigned int query_length = args->lengths[0]; + grn_ctx *ctx = info->ctx; - if (args->arg_count == 2) { - char *target_characters = args->args[1]; - unsigned int target_characters_length = args->lengths[1]; - GRN_TEXT_PUT(ctx, &(info->target_characters), - target_characters, - target_characters_length); - GRN_TEXT_PUTC(ctx, &(info->target_characters), '\0'); - grn_expr_syntax_escape(ctx, query, query_length, - GRN_TEXT_VALUE(&(info->target_characters)), - GRN_QUERY_ESCAPE, - &(info->escaped_query)); + GRN_BULK_REWIND(&(info->escaped_value)); + if (info->script_mode) { + switch (args->arg_type[0]) { + case STRING_RESULT: + { + char *value = args->args[0]; + unsigned long value_length = args->lengths[0]; + GRN_TEXT_PUTC(ctx, &(info->escaped_value), '"'); + if (args->arg_count == 2) { + grn_obj special_characters; + GRN_TEXT_INIT(&special_characters, 0); + GRN_TEXT_PUT(ctx, + &special_characters, + args->args[1], + args->lengths[1]); + GRN_TEXT_PUTC(ctx, &special_characters, '\0'); + grn_expr_syntax_escape(ctx, + value, + value_length, + GRN_TEXT_VALUE(&special_characters), + '\\', + &(info->escaped_value)); + GRN_OBJ_FIN(ctx, &special_characters); + } else { + const char *special_characters = "\"\\"; + grn_expr_syntax_escape(ctx, + value, + value_length, + special_characters, + '\\', + &(info->escaped_value)); + } + GRN_TEXT_PUTC(ctx, &(info->escaped_value), '"'); + } + break; + case REAL_RESULT: + { + double value = *reinterpret_cast(args->args[0]); + grn_text_ftoa(ctx, &(info->escaped_value), value); + } + break; + case INT_RESULT: + { + longlong value = *reinterpret_cast(args->args[0]); + grn_text_lltoa(ctx, &(info->escaped_value), value); + } + break; + case DECIMAL_RESULT: + { + grn_obj value_raw; + GRN_TEXT_INIT(&value_raw, GRN_OBJ_DO_SHALLOW_COPY); + GRN_TEXT_SET(ctx, &value_raw, args->args[0], args->lengths[0]); + grn_obj value; + GRN_FLOAT_INIT(&value, 0); + if (grn_obj_cast(ctx, &value_raw, &value, GRN_FALSE) == GRN_SUCCESS) { + grn_text_ftoa(ctx, &(info->escaped_value), GRN_FLOAT_VALUE(&value)); + } else { + GRN_TEXT_PUT(ctx, + &(info->escaped_value), + args->args[0], + args->lengths[0]); + } + GRN_OBJ_FIN(ctx, &value); + GRN_OBJ_FIN(ctx, &value_raw); + } + break; + default: + break; + } } else { - grn_expr_syntax_escape_query(ctx, query, query_length, - &(info->escaped_query)); + char *query = args->args[0]; + unsigned long query_length = args->lengths[0]; + if (args->arg_count == 2) { + char *target_characters = args->args[1]; + unsigned long target_characters_length = args->lengths[1]; + GRN_TEXT_PUT(ctx, &(info->target_characters), + target_characters, + target_characters_length); + GRN_TEXT_PUTC(ctx, &(info->target_characters), '\0'); + grn_expr_syntax_escape(ctx, query, query_length, + GRN_TEXT_VALUE(&(info->target_characters)), + GRN_QUERY_ESCAPE, + &(info->escaped_value)); + } else { + grn_expr_syntax_escape_query(ctx, query, query_length, + &(info->escaped_value)); + } } } -MRN_API char *mroonga_escape(UDF_INIT *initid, UDF_ARGS *args, char *result, +MRN_API char *mroonga_escape(UDF_INIT *init, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { - EscapeInfo *info = (EscapeInfo *)initid->ptr; - grn_ctx *ctx = &(info->ctx); + EscapeInfo *info = reinterpret_cast(init->ptr); + grn_ctx *ctx = info->ctx; if (!args->args[0]) { *is_null = 1; @@ -123,31 +216,28 @@ *is_null = 0; - if (!info->processed) { - escape(info, args); - info->processed = true; - } + escape(info, args); if (ctx->rc) { my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0)); goto error; } - *length = GRN_TEXT_LEN(&(info->escaped_query)); - return (char *)(GRN_TEXT_VALUE(&(info->escaped_query))); + *length = GRN_TEXT_LEN(&(info->escaped_value)); + return GRN_TEXT_VALUE(&(info->escaped_value)); error: *error = 1; return NULL; } -MRN_API void mroonga_escape_deinit(UDF_INIT *initid) +MRN_API void mroonga_escape_deinit(UDF_INIT *init) { - EscapeInfo *info = (EscapeInfo *)initid->ptr; + EscapeInfo *info = reinterpret_cast(init->ptr); if (info) { - grn_obj_unlink(&(info->ctx), &(info->target_characters)); - grn_obj_unlink(&(info->ctx), &(info->escaped_query)); - grn_ctx_fin(&(info->ctx)); + grn_obj_unlink(info->ctx, &(info->target_characters)); + grn_obj_unlink(info->ctx, &(info->escaped_value)); + mrn_context_pool->release(info->ctx); my_free(info); } } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_highlight_html.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_highlight_html.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_highlight_html.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_highlight_html.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,494 @@ +/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MRN_BEGIN_DECLS + +extern mrn::DatabaseManager *mrn_db_manager; +extern mrn::ContextPool *mrn_context_pool; + +typedef struct st_mrn_highlight_html_info +{ + grn_ctx *ctx; + grn_obj *db; + bool use_shared_db; + grn_obj *keywords; + String result_str; + struct { + bool used; + grn_obj *table; + grn_obj *default_column; + } query_mode; +} mrn_highlight_html_info; + +static my_bool mrn_highlight_html_prepare(mrn_highlight_html_info *info, + UDF_ARGS *args, + char *message, + grn_obj **keywords) +{ + MRN_DBUG_ENTER_FUNCTION(); + + grn_ctx *ctx = info->ctx; + const char *normalizer_name = "NormalizerAuto"; + grn_obj *expr = NULL; + String *result_str = &(info->result_str); + + *keywords = NULL; + + mrn::encoding::set_raw(ctx, system_charset_info); + if (system_charset_info->state & (MY_CS_BINSORT | MY_CS_CSSORT)) { + normalizer_name = NULL; + } + + *keywords = grn_table_create(ctx, NULL, 0, NULL, + GRN_OBJ_TABLE_PAT_KEY, + grn_ctx_at(ctx, GRN_DB_SHORT_TEXT), + NULL); + if (ctx->rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): " + "failed to create grn_pat for keywords: <%s>", + ctx->errbuf); + } + goto error; + } + if (normalizer_name) { + grn_obj_set_info(ctx, + *keywords, + GRN_INFO_NORMALIZER, + grn_ctx_get(ctx, normalizer_name, -1)); + } + + if (info->query_mode.used) { + if (!info->query_mode.table) { + grn_obj *short_text; + short_text = grn_ctx_at(info->ctx, GRN_DB_SHORT_TEXT); + info->query_mode.table = grn_table_create(info->ctx, + NULL, 0, NULL, + GRN_TABLE_HASH_KEY, + short_text, + NULL); + } + if (!info->query_mode.default_column) { + info->query_mode.default_column = + grn_obj_column(info->ctx, + info->query_mode.table, + GRN_COLUMN_NAME_KEY, + GRN_COLUMN_NAME_KEY_LEN); + } + + grn_obj *record = NULL; + GRN_EXPR_CREATE_FOR_QUERY(info->ctx, info->query_mode.table, expr, record); + if (!expr) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): " + "failed to create expression: <%s>", + ctx->errbuf); + } + goto error; + } + + mrn::QueryParser query_parser(info->ctx, + current_thd, + expr, + info->query_mode.default_column, + 0, + NULL); + grn_rc rc = query_parser.parse(args->args[1], args->lengths[1]); + if (rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): " + "failed to parse query: <%s>", + ctx->errbuf); + } + goto error; + } + + { + grn_obj extracted_keywords; + GRN_PTR_INIT(&extracted_keywords, GRN_OBJ_VECTOR, GRN_ID_NIL); + grn_expr_get_keywords(ctx, expr, &extracted_keywords); + + size_t n_keywords = + GRN_BULK_VSIZE(&extracted_keywords) / sizeof(grn_obj *); + for (size_t i = 0; i < n_keywords; ++i) { + grn_obj *extracted_keyword = GRN_PTR_VALUE_AT(&extracted_keywords, i); + grn_table_add(ctx, + *keywords, + GRN_TEXT_VALUE(extracted_keyword), + GRN_TEXT_LEN(extracted_keyword), + NULL); + if (ctx->rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): " + "failed to add a keyword: <%.*s>: <%s>", + static_cast(GRN_TEXT_LEN(extracted_keyword)), + GRN_TEXT_VALUE(extracted_keyword), + ctx->errbuf); + GRN_OBJ_FIN(ctx, &extracted_keywords); + } + goto error; + } + } + GRN_OBJ_FIN(ctx, &extracted_keywords); + } + } else { + for (unsigned int i = 1; i < args->arg_count; ++i) { + if (!args->args[i]) { + continue; + } + grn_table_add(ctx, + *keywords, + args->args[i], + args->lengths[i], + NULL); + if (ctx->rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): " + "failed to add a keyword: <%.*s>: <%s>", + static_cast(args->lengths[i]), + args->args[i], + ctx->errbuf); + } + goto error; + } + } + } + + result_str->set_charset(system_charset_info); + DBUG_RETURN(FALSE); + +error: + if (expr) { + grn_obj_close(ctx, expr); + } + if (*keywords) { + grn_obj_close(ctx, *keywords); + } + DBUG_RETURN(TRUE); +} + +MRN_API my_bool mroonga_highlight_html_init(UDF_INIT *init, + UDF_ARGS *args, + char *message) +{ + MRN_DBUG_ENTER_FUNCTION(); + + mrn_highlight_html_info *info = NULL; + + init->ptr = NULL; + + if (args->arg_count < 1) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): wrong number of arguments: %u for 1+", + args->arg_count); + goto error; + } + + + for (unsigned int i = 0; i < args->arg_count; ++i) { + switch (args->arg_type[i]) { + case STRING_RESULT: + /* OK */ + break; + case REAL_RESULT: + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): all arguments must be string: " + "<%u>=<%g>", + i, *((double *)(args->args[i]))); + goto error; + break; + case INT_RESULT: + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): all arguments must be string: " + "<%u>=<%lld>", + i, *((longlong *)(args->args[i]))); + goto error; + break; + default: + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): all arguments must be string: <%u>", + i); + goto error; + break; + } + } + + init->maybe_null = 0; + + info = + reinterpret_cast( + mrn_my_malloc(sizeof(mrn_highlight_html_info), + MYF(MY_WME | MY_ZEROFILL))); + if (!info) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_highlight_html(): failed to allocate memory"); + goto error; + } + + info->ctx = mrn_context_pool->pull(); + { + const char *current_db_path = MRN_THD_DB_PATH(current_thd); + const char *action; + if (current_db_path) { + action = "open database"; + mrn::Database *db; + int error = mrn_db_manager->open(current_db_path, &db); + if (error == 0) { + info->db = db->get(); + grn_ctx_use(info->ctx, info->db); + info->use_shared_db = true; + } + } else { + action = "create anonymous database"; + info->db = grn_db_create(info->ctx, NULL, NULL); + info->use_shared_db = false; + } + if (!info->db) { + sprintf(message, + "mroonga_highlight_html(): failed to %s: %s", + action, + info->ctx->errbuf); + goto error; + } + } + + info->query_mode.used = FALSE; + + if (args->arg_count == 2 && + args->attribute_lengths[1] == strlen("query") && + strncmp(args->attributes[1], "query", strlen("query")) == 0) { + info->query_mode.used = TRUE; + info->query_mode.table = NULL; + info->query_mode.default_column = NULL; + } + + { + bool all_keywords_are_constant = TRUE; + for (unsigned int i = 1; i < args->arg_count; ++i) { + if (!args->args[i]) { + all_keywords_are_constant = FALSE; + break; + } + } + + if (all_keywords_are_constant) { + if (mrn_highlight_html_prepare(info, args, message, &(info->keywords))) { + goto error; + } + } else { + info->keywords = NULL; + } + } + + init->ptr = (char *)info; + + DBUG_RETURN(FALSE); + +error: + if (info) { + if (!info->use_shared_db) { + grn_obj_close(info->ctx, info->db); + } + mrn_context_pool->release(info->ctx); + my_free(info); + } + DBUG_RETURN(TRUE); +} + +static bool highlight_html(grn_ctx *ctx, + grn_pat *keywords, + const char *target, + size_t target_length, + String *output) +{ + MRN_DBUG_ENTER_FUNCTION(); + + grn_obj buffer; + + GRN_TEXT_INIT(&buffer, 0); + + { + const char *open_tag = ""; + size_t open_tag_length = strlen(open_tag); + const char *close_tag = ""; + size_t close_tag_length = strlen(close_tag); + + while (target_length > 0) { +#define MAX_N_HITS 16 + grn_pat_scan_hit hits[MAX_N_HITS]; + const char *rest; + size_t previous = 0; + size_t chunk_length; + + int n_hits = grn_pat_scan(ctx, + keywords, + target, + target_length, + hits, MAX_N_HITS, &rest); + for (int i = 0; i < n_hits; i++) { + if ((hits[i].offset - previous) > 0) { + grn_text_escape_xml(ctx, + &buffer, + target + previous, + hits[i].offset - previous); + } + GRN_TEXT_PUT(ctx, &buffer, open_tag, open_tag_length); + grn_text_escape_xml(ctx, + &buffer, + target + hits[i].offset, + hits[i].length); + GRN_TEXT_PUT(ctx, &buffer, close_tag, close_tag_length); + previous = hits[i].offset + hits[i].length; + } + + chunk_length = rest - target; + if ((chunk_length - previous) > 0) { + grn_text_escape_xml(ctx, + &buffer, + target + previous, + target_length - previous); + } + target_length -= chunk_length; + target = rest; +#undef MAX_N_HITS + } + } + + if (output->reserve(GRN_TEXT_LEN(&buffer))) { + my_error(ER_OUT_OF_RESOURCES, MYF(0), HA_ERR_OUT_OF_MEM); + GRN_OBJ_FIN(ctx, &buffer); + DBUG_RETURN(false); + } + + output->q_append(GRN_TEXT_VALUE(&buffer), GRN_TEXT_LEN(&buffer)); + GRN_OBJ_FIN(ctx, &buffer); + DBUG_RETURN(true); +} + +MRN_API char *mroonga_highlight_html(UDF_INIT *init, + UDF_ARGS *args, + char *result, + unsigned long *length, + char *is_null, + char *error) +{ + MRN_DBUG_ENTER_FUNCTION(); + + mrn_highlight_html_info *info = + reinterpret_cast(init->ptr); + + grn_ctx *ctx = info->ctx; + grn_obj *keywords = info->keywords; + String *result_str = &(info->result_str); + + if (!args->args[0]) { + *is_null = 1; + DBUG_RETURN(NULL); + } + + if (!keywords) { + if (mrn_highlight_html_prepare(info, args, NULL, &keywords)) { + goto error; + } + } + + *is_null = 0; + result_str->length(0); + + if (!highlight_html(ctx, + reinterpret_cast(keywords), + args->args[0], + args->lengths[0], + result_str)) { + goto error; + } + + if (!info->keywords) { + grn_rc rc = grn_obj_close(ctx, keywords); + if (rc != GRN_SUCCESS) { + my_printf_error(ER_MRN_ERROR_FROM_GROONGA_NUM, + ER_MRN_ERROR_FROM_GROONGA_STR, MYF(0), ctx->errbuf); + goto error; + } + } + + *length = result_str->length(); + DBUG_RETURN((char *)result_str->ptr()); + +error: + if (!info->keywords && keywords) { + grn_obj_close(ctx, keywords); + } + + *is_null = 1; + *error = 1; + + DBUG_RETURN(NULL); +} + +MRN_API void mroonga_highlight_html_deinit(UDF_INIT *init) +{ + MRN_DBUG_ENTER_FUNCTION(); + + mrn_highlight_html_info *info = + reinterpret_cast(init->ptr); + if (!info) { + DBUG_VOID_RETURN; + } + + if (info->keywords) { + grn_obj_close(info->ctx, info->keywords); + } + if (info->query_mode.used) { + if (info->query_mode.default_column) { + grn_obj_close(info->ctx, info->query_mode.default_column); + } + if (info->query_mode.table) { + grn_obj_close(info->ctx, info->query_mode.table); + } + } + MRN_STRING_FREE(info->result_str); + if (!info->use_shared_db) { + grn_obj_close(info->ctx, info->db); + } + mrn_context_pool->release(info->ctx); + my_free(info); + + DBUG_VOID_RETURN; +} + +MRN_END_DECLS diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -2,7 +2,7 @@ /* Copyright(C) 2010 Tetsuro IKEDA Copyright(C) 2010-2013 Kentoku SHIBA - Copyright(C) 2011-2013 Kouhei Sutou + Copyright(C) 2011-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -23,20 +23,21 @@ #include #include #include +#include MRN_BEGIN_DECLS -MRN_API my_bool last_insert_grn_id_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +MRN_API my_bool last_insert_grn_id_init(UDF_INIT *init, UDF_ARGS *args, char *message) { if (args->arg_count != 0) { strcpy(message, "last_insert_grn_id must not have arguments"); return 1; } - initid->maybe_null = 0; + init->maybe_null = 0; return 0; } -MRN_API longlong last_insert_grn_id(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) +MRN_API longlong last_insert_grn_id(UDF_INIT *init, UDF_ARGS *args, char *is_null, char *error) { THD *thd = current_thd; st_mrn_slot_data *slot_data = mrn_get_slot_data(thd, false); @@ -47,7 +48,7 @@ return last_insert_record_id; } -MRN_API void last_insert_grn_id_deinit(UDF_INIT *initid) +MRN_API void last_insert_grn_id_deinit(UDF_INIT *init) { } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_normalize.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_normalize.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_normalize.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_normalize.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,212 @@ +/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */ +/* + Copyright(C) 2015 Naoya Murakami + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MRN_BEGIN_DECLS + +extern mrn::DatabaseManager *mrn_db_manager; +extern mrn::ContextPool *mrn_context_pool; + +#define DEFAULT_NORMALIZER_NAME "NormalizerAuto" + +struct st_mrn_normalize_info +{ + grn_ctx *ctx; + grn_obj *db; + bool use_shared_db; + grn_obj *normalizer; + int flags; + String result_str; +}; + +MRN_API my_bool mroonga_normalize_init(UDF_INIT *init, UDF_ARGS *args, + char *message) +{ + st_mrn_normalize_info *info = NULL; + String *result_str = NULL; + + init->ptr = NULL; + if (!(1 <= args->arg_count && args->arg_count <= 2)) { + sprintf(message, + "mroonga_normalize(): Incorrect number of arguments: %u for 1..2", + args->arg_count); + goto error; + } + if (args->arg_type[0] != STRING_RESULT) { + strcpy(message, + "mroonga_normalize(): The 1st argument must be query as string"); + goto error; + } + if (args->arg_count == 2) { + if (args->arg_type[1] != STRING_RESULT) { + strcpy(message, + "mroonga_normalize(): " + "The 2st argument must be normalizer name as string"); + goto error; + } + } + + init->maybe_null = 1; + + info = (st_mrn_normalize_info *)mrn_my_malloc(sizeof(st_mrn_normalize_info), + MYF(MY_WME | MY_ZEROFILL)); + if (!info) { + strcpy(message, "mroonga_normalize(): out of memory"); + goto error; + } + + info->ctx = mrn_context_pool->pull(); + { + const char *current_db_path = MRN_THD_DB_PATH(current_thd); + const char *action; + if (current_db_path) { + action = "open database"; + mrn::Database *db; + int error = mrn_db_manager->open(current_db_path, &db); + if (error == 0) { + info->db = db->get(); + grn_ctx_use(info->ctx, info->db); + info->use_shared_db = true; + } + } else { + action = "create anonymous database"; + info->db = grn_db_create(info->ctx, NULL, NULL); + info->use_shared_db = false; + } + if (!info->db) { + sprintf(message, + "mroonga_normalize(): failed to %s: %s", + action, + info->ctx->errbuf); + goto error; + } + } + + if (args->arg_count == 1) { + info->normalizer = grn_ctx_get(info->ctx, DEFAULT_NORMALIZER_NAME, -1); + } else { + info->normalizer = grn_ctx_get(info->ctx, args->args[1], args->lengths[1]); + } + if (!info->normalizer) { + sprintf(message, "mroonga_normalize(): nonexistent normalizer %.*s", + (int)args->lengths[1], args->args[1]); + goto error; + } + info->flags = 0; + + result_str = &(info->result_str); + mrn::encoding::set_raw(info->ctx, system_charset_info); + result_str->set_charset(system_charset_info); + + init->ptr = (char *)info; + + return FALSE; + +error: + if (info) { + if (!info->use_shared_db) { + grn_obj_close(info->ctx, info->db); + } + mrn_context_pool->release(info->ctx); + my_free(info); + } + return TRUE; +} + +MRN_API char *mroonga_normalize(UDF_INIT *init, UDF_ARGS *args, char *result, + unsigned long *length, char *is_null, char *error) +{ + st_mrn_normalize_info *info = (st_mrn_normalize_info *)init->ptr; + grn_ctx *ctx = info->ctx; + String *result_str = &(info->result_str); + + if (!args->args[0]) { + *is_null = 1; + return NULL; + } + + result_str->length(0); + { + char *target = args->args[0]; + unsigned int target_length = args->lengths[0]; + grn_obj *grn_string; + const char *normalized; + unsigned int normalized_length_in_bytes; + unsigned int normalized_n_characters; + + grn_string = grn_string_open(ctx, + target, target_length, + info->normalizer, info->flags); + grn_string_get_normalized(ctx, grn_string, + &normalized, + &normalized_length_in_bytes, + &normalized_n_characters); + if (result_str->reserve(normalized_length_in_bytes)) { + my_error(ER_OUT_OF_RESOURCES, MYF(0), HA_ERR_OUT_OF_MEM); + goto error; + } + result_str->q_append(normalized, normalized_length_in_bytes); + result_str->length(normalized_length_in_bytes); + grn_obj_unlink(ctx, grn_string); + } + *is_null = 0; + + if (ctx->rc) { + my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0)); + goto error; + } + + *length = result_str->length(); + return (char *)result_str->ptr(); + +error: + *is_null = 1; + *error = 1; + return NULL; +} + +MRN_API void mroonga_normalize_deinit(UDF_INIT *init) +{ + st_mrn_normalize_info *info = (st_mrn_normalize_info *)init->ptr; + + if (info) { + MRN_STRING_FREE(info->result_str); + if (info->normalizer) { + grn_obj_unlink(info->ctx, info->normalizer); + } + if (!info->use_shared_db) { + grn_obj_close(info->ctx, info->db); + } + mrn_context_pool->release(info->ctx); + my_free(info); + } +} + +MRN_END_DECLS diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_query_expand.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_query_expand.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_query_expand.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_query_expand.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,282 @@ +/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */ +/* + Copyright(C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MRN_BEGIN_DECLS + +extern mrn::DatabaseManager *mrn_db_manager; +extern mrn::ContextPool *mrn_context_pool; + +namespace mrn { + struct QueryExpandInfo { + grn_ctx *ctx; + grn_obj expanded_query; + grn_obj *term_column; + grn_obj *expanded_term_column; + }; +} + +static void mrn_query_expand_info_free(mrn::QueryExpandInfo *info) +{ + MRN_DBUG_ENTER_FUNCTION(); + + if (!info) { + DBUG_VOID_RETURN; + } + + if (info->ctx) { + GRN_OBJ_FIN(info->ctx, &(info->expanded_query)); + if (grn_obj_is_accessor(info->ctx, info->expanded_term_column)) { + grn_obj_unlink(info->ctx, info->expanded_term_column); + } + if (grn_obj_is_accessor(info->ctx, info->term_column)) { + grn_obj_unlink(info->ctx, info->term_column); + } + mrn_context_pool->release(info->ctx); + } + my_free(info); + + DBUG_VOID_RETURN; +} + +MRN_API my_bool mroonga_query_expand_init(UDF_INIT *init, + UDF_ARGS *args, + char *message) +{ + mrn::QueryExpandInfo *info = NULL; + + MRN_DBUG_ENTER_FUNCTION(); + + init->ptr = NULL; + if (args->arg_count != 4) { + sprintf(message, + "mroonga_query_expand(): wrong number of arguments: %u for 4", + args->arg_count); + goto error; + } + if (args->arg_type[0] != STRING_RESULT) { + strcpy(message, + "mroonga_query_expand(): " + "the 1st argument must be table name as string"); + goto error; + } + if (args->arg_type[1] != STRING_RESULT) { + strcpy(message, + "mroonga_query_expand(): " + "the 2nd argument must be term column name as string"); + goto error; + } + if (args->arg_type[2] != STRING_RESULT) { + strcpy(message, + "mroonga_query_expand(): " + "the 3nd argument must be expanded term column name as string"); + goto error; + } + if (args->arg_type[3] != STRING_RESULT) { + strcpy(message, + "mroonga_query_expand(): " + "the 4th argument must be query as string"); + goto error; + } + + init->maybe_null = 1; + + info = static_cast( + mrn_my_malloc(sizeof(mrn::QueryExpandInfo), + MYF(MY_WME | MY_ZEROFILL))); + if (!info) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_query_expand(): failed to allocate memory"); + goto error; + } + + { + const char *current_db_path = MRN_THD_DB_PATH(current_thd); + if (!current_db_path) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_query_expand(): no current database"); + goto error; + } + + mrn::Database *db; + int error = mrn_db_manager->open(current_db_path, &db); + if (error != 0) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_query_expand(): failed to open database: %s", + mrn_db_manager->error_message()); + goto error; + } + info->ctx = mrn_context_pool->pull(); + grn_ctx_use(info->ctx, db->get()); + } + + GRN_TEXT_INIT(&(info->expanded_query), 0); + + { + const char *table_name = args->args[0]; + unsigned int table_name_length = args->lengths[0]; + grn_obj *table = grn_ctx_get(info->ctx, + table_name, + table_name_length); + if (!table) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_query_expand(): table doesn't exist: <%.*s>", + static_cast(table_name_length), + table_name); + goto error; + } + + const char *term_column_name = args->args[1]; + unsigned int term_column_name_length = args->lengths[1]; + info->term_column = grn_obj_column(info->ctx, + table, + term_column_name, + term_column_name_length); + if (!info->term_column) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_query_expand(): term column doesn't exist: <%.*s.%.*s>", + static_cast(table_name_length), + table_name, + static_cast(term_column_name_length), + term_column_name); + goto error; + } + + const char *expanded_term_column_name = args->args[2]; + unsigned int expanded_term_column_name_length = args->lengths[2]; + info->expanded_term_column = grn_obj_column(info->ctx, + table, + expanded_term_column_name, + expanded_term_column_name_length); + if (!info->expanded_term_column) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_query_expand(): " + "expanded term column doesn't exist: <%.*s.%.*s>", + static_cast(table_name_length), + table_name, + static_cast(expanded_term_column_name_length), + expanded_term_column_name); + goto error; + } + } + + init->ptr = reinterpret_cast(info); + + DBUG_RETURN(FALSE); + +error: + mrn_query_expand_info_free(info); + DBUG_RETURN(TRUE); +} + +static void query_expand(mrn::QueryExpandInfo *info, UDF_ARGS *args) +{ + grn_ctx *ctx = info->ctx; + const char *query = args->args[3]; + unsigned int query_length = args->lengths[3]; + + mrn::QueryParser query_parser(info->ctx, + current_thd, + NULL, + NULL, + 0, + NULL); + const char *raw_query; + size_t raw_query_length; + grn_operator default_operator; + grn_expr_flags flags; + query_parser.parse_pragma(query, + query_length, + &raw_query, + &raw_query_length, + &default_operator, + &flags); + GRN_TEXT_SET(info->ctx, + &(info->expanded_query), + query, + raw_query - query); + grn_expr_syntax_expand_query_by_table(ctx, + raw_query, + raw_query_length, + flags, + info->term_column, + info->expanded_term_column, + &(info->expanded_query)); +} + +MRN_API char *mroonga_query_expand(UDF_INIT *init, + UDF_ARGS *args, + char *result, + unsigned long *length, + char *is_null, + char *error) +{ + MRN_DBUG_ENTER_FUNCTION(); + + mrn::QueryExpandInfo *info = + reinterpret_cast(init->ptr); + grn_ctx *ctx = info->ctx; + + if (!args->args[3]) { + *is_null = 1; + DBUG_RETURN(NULL); + } + + *is_null = 0; + + query_expand(info, args); + + if (ctx->rc) { + char message[MYSQL_ERRMSG_SIZE]; + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_query_expand(): " + "failed to expand: %s", + ctx->errbuf); + my_message(ER_ERROR_ON_WRITE, message, MYF(0)); + goto error; + } + + *length = GRN_TEXT_LEN(&(info->expanded_query)); + DBUG_RETURN(GRN_TEXT_VALUE(&(info->expanded_query))); + +error: + *error = 1; + DBUG_RETURN(NULL); +} + +MRN_API void mroonga_query_expand_deinit(UDF_INIT *init) +{ + MRN_DBUG_ENTER_FUNCTION(); + mrn::QueryExpandInfo *info = + reinterpret_cast(init->ptr); + mrn_query_expand_info_free(info); + DBUG_VOID_RETURN; +} + +MRN_END_DECLS diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_snippet.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_snippet.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_snippet.cpp 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_snippet.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -2,7 +2,7 @@ /* Copyright(C) 2010 Tetsuro IKEDA Copyright(C) 2010-2013 Kentoku SHIBA - Copyright(C) 2011-2014 Kouhei Sutou + Copyright(C) 2011-2017 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -26,13 +26,21 @@ #include #include #include +#include +#include #include +#include MRN_BEGIN_DECLS +extern mrn::DatabaseManager *mrn_db_manager; +extern mrn::ContextPool *mrn_context_pool; + struct st_mrn_snip_info { - grn_ctx ctx; + grn_ctx *ctx; + grn_obj *db; + bool use_shared_db; grn_obj *snippet; String result_str; }; @@ -42,7 +50,7 @@ { unsigned int i; CHARSET_INFO *cs; - grn_ctx *ctx = &snip_info->ctx; + grn_ctx *ctx = snip_info->ctx; long long snip_max_len; long long snip_max_num; long long skip_leading_spaces; @@ -121,12 +129,12 @@ return TRUE; } -MRN_API my_bool mroonga_snippet_init(UDF_INIT *initid, UDF_ARGS *args, char *message) +MRN_API my_bool mroonga_snippet_init(UDF_INIT *init, UDF_ARGS *args, char *message) { uint i; st_mrn_snip_info *snip_info = NULL; bool can_open_snippet = TRUE; - initid->ptr = NULL; + init->ptr = NULL; if (args->arg_count < 11 || (args->arg_count - 11) % 3) { sprintf(message, "Incorrect number of arguments for mroonga_snippet(): %u", @@ -168,8 +176,7 @@ goto error; } } - initid->maybe_null = 1; - initid->const_item = 1; + init->maybe_null = 1; if (!(snip_info = (st_mrn_snip_info *) mrn_my_malloc(sizeof(st_mrn_snip_info), MYF(MY_WME | MY_ZEROFILL)))) @@ -177,8 +184,32 @@ strcpy(message, "mroonga_snippet() out of memory"); goto error; } - grn_ctx_init(&snip_info->ctx, 0); - grn_db_create(&snip_info->ctx, NULL, 0); + snip_info->ctx = mrn_context_pool->pull(); + { + const char *current_db_path = MRN_THD_DB_PATH(current_thd); + const char *action; + if (current_db_path) { + action = "open database"; + mrn::Database *db; + int error = mrn_db_manager->open(current_db_path, &db); + if (error == 0) { + snip_info->db = db->get(); + grn_ctx_use(snip_info->ctx, snip_info->db); + snip_info->use_shared_db = true; + } + } else { + action = "create anonymous database"; + snip_info->db = grn_db_create(snip_info->ctx, NULL, NULL); + snip_info->use_shared_db = false; + } + if (!snip_info->db) { + sprintf(message, + "mroonga_snippet(): failed to %s: %s", + action, + snip_info->ctx->errbuf); + goto error; + } + } for (i = 1; i < args->arg_count; i++) { if (!args->args[i]) { @@ -191,24 +222,26 @@ goto error; } } - initid->ptr = (char *) snip_info; + init->ptr = (char *) snip_info; return FALSE; error: if (snip_info) { - grn_obj_close(&snip_info->ctx, grn_ctx_db(&snip_info->ctx)); - grn_ctx_fin(&snip_info->ctx); + if (!snip_info->use_shared_db) { + grn_obj_close(snip_info->ctx, snip_info->db); + } + mrn_context_pool->release(snip_info->ctx); my_free(snip_info); } return TRUE; } -MRN_API char *mroonga_snippet(UDF_INIT *initid, UDF_ARGS *args, char *result, - unsigned long *length, char *is_null, char *error) +MRN_API char *mroonga_snippet(UDF_INIT *init, UDF_ARGS *args, char *result, + unsigned long *length, char *is_null, char *error) { - st_mrn_snip_info *snip_info = (st_mrn_snip_info *) initid->ptr; - grn_ctx *ctx = &snip_info->ctx; + st_mrn_snip_info *snip_info = (st_mrn_snip_info *) init->ptr; + grn_ctx *ctx = snip_info->ctx; String *result_str = &snip_info->result_str; char *target; unsigned int target_length; @@ -286,16 +319,18 @@ return NULL; } -MRN_API void mroonga_snippet_deinit(UDF_INIT *initid) +MRN_API void mroonga_snippet_deinit(UDF_INIT *init) { - st_mrn_snip_info *snip_info = (st_mrn_snip_info *) initid->ptr; + st_mrn_snip_info *snip_info = (st_mrn_snip_info *) init->ptr; if (snip_info) { if (snip_info->snippet) { - grn_obj_close(&snip_info->ctx, snip_info->snippet); + grn_obj_close(snip_info->ctx, snip_info->snippet); } MRN_STRING_FREE(snip_info->result_str); - grn_obj_close(&snip_info->ctx, grn_ctx_db(&snip_info->ctx)); - grn_ctx_fin(&snip_info->ctx); + if (!snip_info->use_shared_db) { + grn_obj_close(snip_info->ctx, snip_info->db); + } + mrn_context_pool->release(snip_info->ctx); my_free(snip_info); } } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_snippet_html.cpp mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_snippet_html.cpp --- mariadb-10.1-10.1.25/storage/mroonga/udf/mrn_udf_snippet_html.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/mrn_udf_snippet_html.cpp 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,444 @@ +/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */ +/* + Copyright(C) 2015-2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MRN_BEGIN_DECLS + +extern mrn::DatabaseManager *mrn_db_manager; +extern mrn::ContextPool *mrn_context_pool; + +typedef struct st_mrn_snippet_html_info +{ + grn_ctx *ctx; + grn_obj *db; + bool use_shared_db; + grn_obj *snippet; + String result_str; + struct { + bool used; + grn_obj *table; + grn_obj *default_column; + } query_mode; +} mrn_snippet_html_info; + +static my_bool mrn_snippet_html_prepare(mrn_snippet_html_info *info, + UDF_ARGS *args, + char *message, + grn_obj **snippet) +{ + MRN_DBUG_ENTER_FUNCTION(); + + grn_ctx *ctx = info->ctx; + int flags = GRN_SNIP_SKIP_LEADING_SPACES; + unsigned int width = 200; + unsigned int max_n_results = 3; + const char *open_tag = ""; + const char *close_tag = ""; + grn_snip_mapping *mapping = GRN_SNIP_MAPPING_HTML_ESCAPE; + grn_obj *expr = NULL; + String *result_str = &(info->result_str); + + *snippet = NULL; + + mrn::encoding::set_raw(ctx, system_charset_info); + if (!(system_charset_info->state & (MY_CS_BINSORT | MY_CS_CSSORT))) { + flags |= GRN_SNIP_NORMALIZE; + } + + *snippet = grn_snip_open(ctx, flags, + width, max_n_results, + open_tag, strlen(open_tag), + close_tag, strlen(close_tag), + mapping); + if (ctx->rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): failed to open grn_snip: <%s>", + ctx->errbuf); + } + goto error; + } + + if (info->query_mode.used) { + if (!info->query_mode.table) { + grn_obj *short_text; + short_text = grn_ctx_at(info->ctx, GRN_DB_SHORT_TEXT); + info->query_mode.table = grn_table_create(info->ctx, + NULL, 0, NULL, + GRN_TABLE_HASH_KEY, + short_text, + NULL); + } + if (!info->query_mode.default_column) { + info->query_mode.default_column = + grn_obj_column(info->ctx, + info->query_mode.table, + GRN_COLUMN_NAME_KEY, + GRN_COLUMN_NAME_KEY_LEN); + } + + grn_obj *record = NULL; + GRN_EXPR_CREATE_FOR_QUERY(info->ctx, info->query_mode.table, expr, record); + if (!expr) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): " + "failed to create expression: <%s>", + ctx->errbuf); + } + goto error; + } + + mrn::QueryParser query_parser(info->ctx, + current_thd, + expr, + info->query_mode.default_column, + 0, + NULL); + grn_rc rc = query_parser.parse(args->args[1], args->lengths[1]); + if (rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): " + "failed to parse query: <%s>", + ctx->errbuf); + } + goto error; + } + + rc = grn_expr_snip_add_conditions(info->ctx, + expr, + *snippet, + 0, + NULL, NULL, + NULL, NULL); + if (rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): " + "failed to add conditions: <%s>", + ctx->errbuf); + } + goto error; + } + } else { + unsigned int i; + for (i = 1; i < args->arg_count; ++i) { + if (!args->args[i]) { + continue; + } + grn_rc rc = grn_snip_add_cond(ctx, *snippet, + args->args[i], args->lengths[i], + NULL, 0, + NULL, 0); + if (rc != GRN_SUCCESS) { + if (message) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): " + "failed to add a condition to grn_snip: <%s>", + ctx->errbuf); + } + goto error; + } + } + } + + result_str->set_charset(system_charset_info); + DBUG_RETURN(FALSE); + +error: + if (expr) { + grn_obj_close(ctx, expr); + } + if (*snippet) { + grn_obj_close(ctx, *snippet); + } + DBUG_RETURN(TRUE); +} + +MRN_API my_bool mroonga_snippet_html_init(UDF_INIT *init, + UDF_ARGS *args, + char *message) +{ + MRN_DBUG_ENTER_FUNCTION(); + + mrn_snippet_html_info *info = NULL; + + init->ptr = NULL; + + if (args->arg_count < 1) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): wrong number of arguments: %u for 1+", + args->arg_count); + goto error; + } + + + for (unsigned int i = 0; i < args->arg_count; ++i) { + switch (args->arg_type[i]) { + case STRING_RESULT: + /* OK */ + break; + case REAL_RESULT: + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): all arguments must be string: " + "<%u>=<%g>", + i, *((double *)(args->args[i]))); + goto error; + break; + case INT_RESULT: + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): all arguments must be string: " + "<%u>=<%lld>", + i, *((longlong *)(args->args[i]))); + goto error; + break; + default: + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): all arguments must be string: <%u>", + i); + goto error; + break; + } + } + + init->maybe_null = 1; + + info = (mrn_snippet_html_info *)mrn_my_malloc(sizeof(mrn_snippet_html_info), + MYF(MY_WME | MY_ZEROFILL)); + if (!info) { + snprintf(message, MYSQL_ERRMSG_SIZE, + "mroonga_snippet_html(): failed to allocate memory"); + goto error; + } + + info->ctx = mrn_context_pool->pull(); + { + const char *current_db_path = MRN_THD_DB_PATH(current_thd); + const char *action; + if (current_db_path) { + action = "open database"; + mrn::Database *db; + int error = mrn_db_manager->open(current_db_path, &db); + if (error == 0) { + info->db = db->get(); + grn_ctx_use(info->ctx, info->db); + info->use_shared_db = true; + } + } else { + action = "create anonymous database"; + info->db = grn_db_create(info->ctx, NULL, NULL); + info->use_shared_db = false; + } + if (!info->db) { + sprintf(message, + "mroonga_snippet_html(): failed to %s: %s", + action, + info->ctx->errbuf); + goto error; + } + } + + info->query_mode.used = FALSE; + + if (args->arg_count == 2 && + args->attribute_lengths[1] == strlen("query") && + strncmp(args->attributes[1], "query", strlen("query")) == 0) { + info->query_mode.used = TRUE; + info->query_mode.table = NULL; + info->query_mode.default_column = NULL; + } + + { + bool all_keywords_are_constant = TRUE; + for (unsigned int i = 1; i < args->arg_count; ++i) { + if (!args->args[i]) { + all_keywords_are_constant = FALSE; + break; + } + } + + if (all_keywords_are_constant) { + if (mrn_snippet_html_prepare(info, args, message, &(info->snippet))) { + goto error; + } + } else { + info->snippet = NULL; + } + } + + init->ptr = (char *)info; + + DBUG_RETURN(FALSE); + +error: + if (info) { + if (!info->use_shared_db) { + grn_obj_close(info->ctx, info->db); + } + mrn_context_pool->release(info->ctx); + my_free(info); + } + DBUG_RETURN(TRUE); +} + +MRN_API char *mroonga_snippet_html(UDF_INIT *init, + UDF_ARGS *args, + char *result, + unsigned long *length, + char *is_null, + char *error) +{ + MRN_DBUG_ENTER_FUNCTION(); + + mrn_snippet_html_info *info = + reinterpret_cast(init->ptr); + + grn_ctx *ctx = info->ctx; + grn_obj *snippet = info->snippet; + String *result_str = &(info->result_str); + + if (!args->args[0]) { + *is_null = 1; + DBUG_RETURN(NULL); + } + + if (!snippet) { + if (mrn_snippet_html_prepare(info, args, NULL, &snippet)) { + goto error; + } + } + + { + char *target = args->args[0]; + unsigned int target_length = args->lengths[0]; + + unsigned int n_results, max_tagged_length; + { + grn_rc rc = grn_snip_exec(ctx, snippet, target, target_length, + &n_results, &max_tagged_length); + if (rc != GRN_SUCCESS) { + my_printf_error(ER_MRN_ERROR_FROM_GROONGA_NUM, + ER_MRN_ERROR_FROM_GROONGA_STR, MYF(0), ctx->errbuf); + goto error; + } + } + + *is_null = 0; + result_str->length(0); + + { + const char *start_tag = "
"; + const char *end_tag = "
"; + size_t start_tag_length = strlen(start_tag); + size_t end_tag_length = strlen(end_tag); + unsigned int max_length_per_snippet = + start_tag_length + end_tag_length + max_tagged_length; + if (result_str->reserve(max_length_per_snippet * n_results)) { + my_error(ER_OUT_OF_RESOURCES, MYF(0), HA_ERR_OUT_OF_MEM); + goto error; + } + + for (unsigned int i = 0; i < n_results; ++i) { + result_str->q_append(start_tag, start_tag_length); + + unsigned int result_length; + grn_rc rc = + grn_snip_get_result(ctx, snippet, i, + (char *)result_str->ptr() + result_str->length(), + &result_length); + if (rc) { + my_printf_error(ER_MRN_ERROR_FROM_GROONGA_NUM, + ER_MRN_ERROR_FROM_GROONGA_STR, MYF(0), ctx->errbuf); + goto error; + } + result_str->length(result_str->length() + result_length); + + result_str->q_append(end_tag, end_tag_length); + } + } + + if (!info->snippet) { + grn_rc rc = grn_obj_close(ctx, snippet); + if (rc != GRN_SUCCESS) { + my_printf_error(ER_MRN_ERROR_FROM_GROONGA_NUM, + ER_MRN_ERROR_FROM_GROONGA_STR, MYF(0), ctx->errbuf); + goto error; + } + } + } + + *length = result_str->length(); + DBUG_RETURN((char *)result_str->ptr()); + +error: + if (!info->snippet && snippet) { + grn_obj_close(ctx, snippet); + } + + *is_null = 1; + *error = 1; + + DBUG_RETURN(NULL); +} + +MRN_API void mroonga_snippet_html_deinit(UDF_INIT *init) +{ + MRN_DBUG_ENTER_FUNCTION(); + + mrn_snippet_html_info *info = + reinterpret_cast(init->ptr); + if (!info) { + DBUG_VOID_RETURN; + } + + if (info->snippet) { + grn_obj_close(info->ctx, info->snippet); + } + if (info->query_mode.used) { + if (info->query_mode.default_column) { + grn_obj_close(info->ctx, info->query_mode.default_column); + } + if (info->query_mode.table) { + grn_obj_close(info->ctx, info->query_mode.table); + } + } + MRN_STRING_FREE(info->result_str); + if (!info->use_shared_db) { + grn_obj_close(info->ctx, info->db); + } + mrn_context_pool->release(info->ctx); + my_free(info); + + DBUG_VOID_RETURN; +} + +MRN_END_DECLS diff -Nru mariadb-10.1-10.1.25/storage/mroonga/udf/sources.am mariadb-10.1-10.1.30/storage/mroonga/udf/sources.am --- mariadb-10.1-10.1.25/storage/mroonga/udf/sources.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/udf/sources.am 2017-12-21 15:48:52.000000000 +0000 @@ -1,5 +1,9 @@ libmrn_udf_la_SOURCES = \ mrn_udf_last_insert_grn_id.cpp \ mrn_udf_snippet.cpp \ + mrn_udf_snippet_html.cpp \ mrn_udf_command.cpp \ - mrn_udf_escape.cpp + mrn_udf_escape.cpp \ + mrn_udf_normalize.cpp \ + mrn_udf_highlight_html.cpp \ + mrn_udf_query_expand.cpp diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/appveyor.yml mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/appveyor.yml --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/appveyor.yml 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/appveyor.yml 2017-12-21 15:48:52.000000000 +0000 @@ -1,19 +1,72 @@ version: "{build}" clone_depth: 10 -build_script: - - git submodule update --init - - cmake . -G "Visual Studio 12 2013 Win64" - - cmake --build . --config Debug + +environment: + matrix: + - VS_VERSION: 12 + ARCH: x86 + - VS_VERSION: 12 + ARCH: amd64 + - VS_VERSION: 14 + ARCH: x86 + - VS_VERSION: 14 + ARCH: amd64 notifications: - provider: Email to: - - kou@clear-code.com - - groonga-commit@lists.sourceforge.jp + - groonga-commit@lists.osdn.me on_build_status_changed: true -test: off -# before_test: -# - gem install grntest -# test_script: -# - grntest --groonga src\groonga.exe --base-directory test\command test\command\suite +init: + - set PATH=C:\Ruby22\bin;%PATH% + - set PATH=C:\msys64\usr\bin;%PATH% + - call + "C:\Program Files (x86)\Microsoft Visual Studio %VS_VERSION%.0\VC\vcvarsall.bat" + %ARCH% +# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + +install: + - tzutil /s "Tokyo Standard Time" + # - choco install -y imdisk-toolkit + # - mkdir tmp + # - imdisk -a -t file -m tmp -o awe -s 1G -p "/fs:ntfs /q /y" + +build_script: + - git submodule update --init + - cd vendor + - ruby download_mecab.rb + - ruby download_message_pack.rb + - ruby download_lz4.rb + - cd .. + - set CMAKE_GENERATOR_NAME=Visual Studio %VS_VERSION% + - if "%VS_VERSION%" == "12" + set CMAKE_GENERATOR_NAME=%CMAKE_GENERATOR_NAME% 2013 + - if "%VS_VERSION%" == "14" + set CMAKE_GENERATOR_NAME=%CMAKE_GENERATOR_NAME% 2015 + - if "%ARCH%" == "amd64" + set CMAKE_GENERATOR_NAME=%CMAKE_GENERATOR_NAME% Win64 + - cmake . -G "%CMAKE_GENERATOR_NAME%" + -DCMAKE_INSTALL_PREFIX=c:\groonga + -DGRN_WITH_MRUBY=yes + -DGRN_WITH_BUNDLED_MECAB=yes + -DGRN_WITH_BUNDLED_MESSAGE_PACK=yes + -DGRN_WITH_BUNDLED_LZ4=yes + - cmake --build . --config Debug + - cmake --build . --config Debug --target Install + +before_test: + - git clone --depth 1 + https://github.com/groonga/grntest.git + test\command\grntest + - cd test\command\grntest + - bundle install --binstubs=..\bin + - cd ..\..\.. +test_script: + - ruby test\command\bin\grntest + --groonga c:\groonga\bin\groonga.exe + --base-directory test\command + --reporter mark + --n-workers 1 + --timeout 60 + test\command\suite diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/autogen.sh mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/autogen.sh --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/autogen.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/autogen.sh 2017-12-21 15:48:52.000000000 +0000 @@ -6,15 +6,20 @@ Darwin) homebrew_aclocal=/usr/local/share/aclocal if [ -d $homebrew_aclocal ]; then - ACLOCAL_ARGS="$ACLOCAL_ARGS -I $homebrew_aclocal" + ACLOCAL_PATH="$ACLOCAL_PATH $homebrew_aclocal" fi - gettext_aclocal="$(echo /usr/local/Cellar/gettext/*/share/aclocal)" - if [ -d $gettext_aclocal ]; then - ACLOCAL_ARGS="$ACLOCAL_ARGS -I $gettext_aclocal" + gettext_prefix=/usr/local/Cellar/gettext + if [ -d $gettext_prefix ]; then + gettext_aclocal=$(ls $gettext_prefix/*/share/aclocal | \ + gsort --version-sort | \ + tail -n 1) + if [ -d $gettext_aclocal ]; then + ACLOCAL_PATH="$ACLOCAL_PATH $gettext_aclocal" + fi fi ;; FreeBSD) - ACLOCAL_ARGS="$ACLOCAL_ARGS -I /usr/local/share/aclocal/" + ACLOCAL_PATH="$ACLOCAL_PATH /usr/local/share/aclocal/" ;; esac @@ -23,4 +28,6 @@ fi git submodule update --init -${AUTORECONF:-autoreconf} --force --install +mkdir -p m4 + +${AUTORECONF:-autoreconf} --force --install "$@" diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/base_version mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/base_version --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/base_version 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/base_version 2017-12-21 15:48:52.000000000 +0000 @@ -1 +1 @@ -5.0.5 \ No newline at end of file +7.0.7 \ No newline at end of file diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-between-sequential.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-between-sequential.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-between-sequential.c 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-between-sequential.c 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,276 @@ +/* -*- c-basic-offset: 2; coding: utf-8 -*- */ +/* + Copyright (C) 2016 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz + + CFLAGS: -O2 -g + + Groonga: e2971d9a555a90724b76964cc8c8805373500b4a + % make --quiet -C benchmark run-bench-between-sequential + run-bench-between-sequential: + Process 10 times in each pattern + (total) (average) (median) + ( 500, 600] ( 1000): between: (0.0528s) (0.0053s) (0.0043s) + ( 500, 600] ( 1000): range: (0.0120s) (0.0012s) (0.2500ms) + ( 5000, 5100] ( 10000): between: (0.4052s) (0.0405s) (0.0395s) + ( 5000, 5100] ( 10000): range: (0.0197s) (0.0020s) (0.0010s) + ( 50000, 50100] ( 100000): between: (3.9343s) (0.3934s) (0.3900s) + ( 50000, 50100] ( 100000): range: (0.0969s) (0.0097s) (0.0088s) + (500000, 500100] (1000000): between: (38.2969s) (3.8297s) (3.7983s) + (500000, 500100] (1000000): range: (0.9158s) (0.0916s) (0.0900s) + + Groonga: 35e4e431bb7660b3170e98c329f7219bd6723f05 + % make --quiet -C benchmark run-bench-between-sequential + run-bench-between-sequential: + Process 10 times in each pattern + (total) (average) (median) + ( 500, 600] ( 1000): between: (0.0130s) (0.0013s) (0.2590ms) + ( 500, 600] ( 1000): range: (0.0124s) (0.0012s) (0.2530ms) + ( 5000, 5100] ( 10000): between: (0.0163s) (0.0016s) (0.6440ms) + ( 5000, 5100] ( 10000): range: (0.0205s) (0.0021s) (0.0011s) + ( 50000, 50100] ( 100000): between: (0.0611s) (0.0061s) (0.0051s) + ( 50000, 50100] ( 100000): range: (0.1004s) (0.0100s) (0.0091s) + (500000, 500100] (1000000): between: (0.4518s) (0.0452s) (0.0442s) + (500000, 500100] (1000000): range: (0.8866s) (0.0887s) (0.0878s) +*/ + +#include +#include + +#include +#include + +#include "lib/benchmark.h" + +#define GET(context, name) (grn_ctx_get(context, name, strlen(name))) + +typedef struct _BenchmarkData +{ + grn_ctx context; + grn_obj *database; + guint n_records; + const gchar *command; +} BenchmarkData; + +static void +run_command(grn_ctx *context, const gchar *command) +{ + gchar *response; + unsigned int response_length; + int flags; + + grn_ctx_send(context, command, strlen(command), 0); + grn_ctx_recv(context, &response, &response_length, &flags); +} + +static void +bench(gpointer user_data) +{ + BenchmarkData *data = user_data; + grn_ctx *context = &(data->context); + + run_command(context, data->command); +} + +static gchar * +get_tmp_dir(void) +{ + gchar *current_dir; + gchar *tmp_dir; + + current_dir = g_get_current_dir(); + tmp_dir = g_build_filename(current_dir, "tmp", NULL); + g_free(current_dir); + + return tmp_dir; +} + +static void +setup_database(BenchmarkData *data) +{ + grn_ctx *context = &(data->context); + gchar *tmp_dir; + gchar *database_last_component_name; + gchar *database_path; + guint i; + + tmp_dir = get_tmp_dir(); + database_last_component_name = g_strdup_printf("db-%d", data->n_records); + database_path = g_build_filename(tmp_dir, + "between-sequential", + database_last_component_name, + NULL); + g_free(database_last_component_name); + + if (g_file_test(database_path, G_FILE_TEST_EXISTS)) { + data->database = grn_db_open(context, database_path); + run_command(context, "dump"); + } else { + data->database = grn_db_create(context, database_path, NULL); + + run_command(context, "table_create Entries TABLE_NO_KEY"); + run_command(context, "column_create Entries rank COLUMN_SCALAR Int32"); + + run_command(context, "load --table Entries"); + run_command(context, "["); + for (i = 0; i < data->n_records; i++) { +#define BUFFER_SIZE 4096 + gchar buffer[BUFFER_SIZE]; + const gchar *separator; + if (i == (data->n_records - 1)) { + separator = ""; + } else { + separator = ","; + } + snprintf(buffer, BUFFER_SIZE, "{\"rank\": %u}%s", i, separator); + run_command(context, buffer); +#undef BUFFER_SIZE + } + run_command(context, "]"); + } + + g_free(database_path); +} + +static void +bench_startup(BenchmarkData *data) +{ + grn_ctx_init(&(data->context), 0); + setup_database(data); +} + +static void +bench_shutdown(BenchmarkData *data) +{ + grn_ctx *context = &(data->context); + + grn_obj_close(context, data->database); + grn_ctx_fin(context); +} + +int +main(int argc, gchar **argv) +{ + grn_rc rc; + BenchReporter *reporter; + gint n = 10; + + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } + + g_print("Process %d times in each pattern\n", n); + + bench_init(&argc, &argv); + reporter = bench_reporter_new(); + + { + BenchmarkData data_small_between; + BenchmarkData data_small_range; + BenchmarkData data_medium_between; + BenchmarkData data_medium_range; + BenchmarkData data_large_between; + BenchmarkData data_large_range; + BenchmarkData data_very_large_between; + BenchmarkData data_very_large_range; + +#define REGISTER(data, n_records_, min, max, is_between) \ + do { \ + gchar *label; \ + label = \ + g_strdup_printf("(%6d, %6d] (%7d): %7s", \ + min, max, n_records_, \ + is_between ? "between" : "range"); \ + data.n_records = n_records_; \ + if (is_between) { \ + data.command = \ + "select Entries --cache no " \ + "--filter " \ + "'between(rank, " #min ", \"exclude\"," \ + " " #max ", \"include\")'"; \ + } else { \ + data.command = \ + "select Entries --cache no " \ + "--filter 'rank > " #min " && rank <= " #max "'"; \ + } \ + bench_startup(&data); \ + bench_reporter_register(reporter, label, \ + n, \ + NULL, \ + bench, \ + NULL, \ + &data); \ + g_free(label); \ + } while(FALSE) + + REGISTER(data_small_between, + 1000, + 500, 600, + TRUE); + REGISTER(data_small_range, + 1000, + 500, 600, + FALSE); + REGISTER(data_medium_between, + 10000, + 5000, 5100, + TRUE); + REGISTER(data_medium_range, + 10000, + 5000, 5100, + FALSE); + REGISTER(data_large_between, + 100000, + 50000, 50100, + TRUE); + REGISTER(data_large_range, + 100000, + 50000, 50100, + FALSE); + REGISTER(data_very_large_between, + 1000000, + 500000, 500100, + TRUE); + REGISTER(data_very_large_range, + 1000000, + 500000, 500100, + FALSE); + +#undef REGISTER + + bench_reporter_run(reporter); + + bench_shutdown(&data_small_between); + bench_shutdown(&data_small_range); + bench_shutdown(&data_medium_between); + bench_shutdown(&data_medium_range); + bench_shutdown(&data_large_between); + bench_shutdown(&data_large_range); + bench_shutdown(&data_very_large_between); + bench_shutdown(&data_very_large_range); + } + g_object_unref(reporter); + + grn_fin(); + + return EXIT_SUCCESS; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-cache.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-cache.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-cache.c 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-cache.c 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,155 @@ +/* -*- c-basic-offset: 2; coding: utf-8 -*- */ +/* + Copyright (C) 2017 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + Groonga: eb65125330b3a8f920693ef3ad53011c7412f2c9 + CFLAGS: -O2 -g3 + CPU: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz + + % make --silent -C benchmark run-bench-cache + run-bench-cache: + (total) (average) (median) + 1000: (0.0458s) (0.4576ms) (0.4170ms) + 10000: (0.3464s) (0.0035s) (0.0034s) + % GRN_CACHE_TYPE=persistent make --silent -C benchmark run-bench-cache + run-bench-cache: + (total) (average) (median) + 1000: (0.0480s) (0.4801ms) (0.4700ms) + 10000: (0.4033s) (0.0040s) (0.0040s) + */ + +#include +#include +#include + +#include + +#include "lib/benchmark.h" + +typedef struct _BenchmarkData +{ + grn_ctx *context; + grn_cache *cache; + grn_obj value; +} BenchmarkData; + +static void +bench_n(BenchmarkData *data, gint64 n) +{ + gint64 i; + grn_ctx *ctx; + grn_cache *cache; + grn_obj *value; + grn_obj fetch_buffer; + + ctx = data->context; + cache = data->cache; + value = &(data->value); + GRN_TEXT_INIT(&fetch_buffer, 0); + for (i = 0; i < n; i++) { + char key[GRN_TABLE_MAX_KEY_SIZE]; + grn_snprintf(key, + GRN_TABLE_MAX_KEY_SIZE, + GRN_TABLE_MAX_KEY_SIZE, + "key:%" GRN_FMT_INT64D, + i); + GRN_BULK_REWIND(&fetch_buffer); + grn_cache_fetch(ctx, cache, key, strlen(key), &fetch_buffer); + grn_cache_update(ctx, cache, key, strlen(key), value); + } + GRN_OBJ_FIN(ctx, &fetch_buffer); +} + +static void +bench_1000(gpointer user_data) +{ + BenchmarkData *data = user_data; + bench_n(data, 1000); +} + +static void +bench_10000(gpointer user_data) +{ + BenchmarkData *data = user_data; + bench_n(data, 10000); +} + +static void +bench_setup(gpointer user_data) +{ + BenchmarkData *data = user_data; + + data->cache = grn_cache_open(data->context); + GRN_TEXT_INIT(&(data->value), 0); + while (GRN_TEXT_LEN(&(data->value)) < 1024) { + GRN_TEXT_PUTS(data->context, &(data->value), "XXXXXXXXXXX"); + } +} + +static void +bench_teardown(gpointer user_data) +{ + BenchmarkData *data = user_data; + + grn_obj_close(data->context, &(data->value)); + grn_cache_close(data->context, data->cache); +} + +int +main(int argc, gchar **argv) +{ + grn_rc rc; + BenchmarkData data; + BenchReporter *reporter; + gchar *base_dir; + grn_ctx ctx; + gint n = 100; + + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } + bench_init(&argc, &argv); + + grn_ctx_init(&ctx, 0); + + data.context = &ctx; + + base_dir = g_build_filename(g_get_tmp_dir(), "groonga-bench", NULL); + bench_utils_remove_path_recursive_force(base_dir); + g_mkdir_with_parents(base_dir, 0755); + + reporter = bench_reporter_new(); + bench_reporter_register(reporter, "1000", n, + bench_setup, bench_1000, bench_teardown, &data); + bench_reporter_register(reporter, "10000", n, + bench_setup, bench_10000, bench_teardown, &data); + bench_reporter_run(reporter); + g_object_unref(reporter); + + grn_ctx_fin(&ctx); + + bench_utils_remove_path_recursive_force(base_dir); + + bench_quit(); + grn_fin(); + + return EXIT_SUCCESS; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2; coding: utf-8 -*- */ /* - Copyright (C) 2013-2014 Kouhei Sutou + Copyright (C) 2013-2016 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -153,12 +153,18 @@ int main(int argc, gchar **argv) { + grn_rc rc; grn_ctx context; BenchmarkData data; BenchReporter *reporter; gint n = 1; - grn_init(); + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } bench_init(&argc, &argv); grn_ctx_init(&context, 0); @@ -188,5 +194,5 @@ grn_fin(); - return 0; + return EXIT_SUCCESS; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2; coding: utf-8 -*- */ /* - Copyright (C) 2009 Kouhei Sutou + Copyright (C) 2009-2016 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -48,6 +48,7 @@ */ #include +#include #include #include @@ -421,11 +422,17 @@ int main(int argc, gchar **argv) { + grn_rc rc; BenchmarkData data; BenchReporter *reporter; gint n = 1000; - grn_init(); + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } bench_init(&argc, &argv); data.report_result = g_getenv("GROONGA_BENCH_REPORT_RESULT") != NULL; @@ -495,5 +502,5 @@ bench_quit(); grn_fin(); - return 0; + return EXIT_SUCCESS; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2; coding: utf-8 -*- */ /* - Copyright (C) 2011 Kouhei Sutou + Copyright (C) 2011-2016 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -56,6 +56,7 @@ 2nd: select_in_rectangle (all): (4.61558) */ +#include #include #include @@ -212,11 +213,17 @@ int main(int argc, gchar **argv) { + grn_rc rc; BenchmarkData data; BenchReporter *reporter; gint n = 100; - grn_init(); + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } bench_init(&argc, &argv); data.report_result = g_getenv("GROONGA_BENCH_REPORT_RESULT") != NULL; @@ -265,5 +272,5 @@ bench_quit(); grn_fin(); - return 0; + return EXIT_SUCCESS; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-nfkc.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-nfkc.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-nfkc.c 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-nfkc.c 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,275 @@ +/* -*- c-basic-offset: 2; coding: utf-8 -*- */ +/* + Copyright (C) 2015-2016 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + Groonga: ed300a833d44eaefa978b5ecf46a96ef91ae0891 + + CFLAGS: -O2 -g + % make --quiet -C benchmark run-bench-nfkc + run-bench-nfkc: + (total) (average) (median) + map1 - switch : (0.0060ms) (0.00060000ms) (0.00000000ms) + map1 - table : (0.00000000ms) (0.00000000ms) (0.00000000ms) + map2 - switch - no change: (0.0010ms) (0.00010000ms) (0.00000000ms) + map2 - table - no change: (0.00000000ms) (0.00000000ms) (0.00000000ms) + map2 - switch - change: (0.0010ms) (0.00010000ms) (0.00000000ms) + map2 - table - change: (0.0010ms) (0.00010000ms) (0.00000000ms) +*/ + +#include +#include + +#include + +#include + +#include "lib/benchmark.h" + +#include "../lib/nfkc50.c" + +#define MAX_UNICODE 0x110000 +#define BUFFER_SIZE 0x100 + +static inline int +ucs2utf8(unsigned int i, unsigned char *buf) +{ + unsigned char *p = buf; + if (i < 0x80) { + *p++ = i; + } else { + if (i < 0x800) { + *p++ = (i >> 6) | 0xc0; + } else { + if (i < 0x00010000) { + *p++ = (i >> 12) | 0xe0; + } else { + if (i < 0x00200000) { + *p++ = (i >> 18) | 0xf0; + } else { + if (i < 0x04000000) { + *p++ = (i >> 24) | 0xf8; + } else if (i < 0x80000000) { + *p++ = (i >> 30) | 0xfc; + *p++ = ((i >> 24) & 0x3f) | 0x80; + } + *p++ = ((i >> 18) & 0x3f) | 0x80; + } + *p++ = ((i >> 12) & 0x3f) | 0x80; + } + *p++ = ((i >> 6) & 0x3f) | 0x80; + } + *p++ = (0x3f & i) | 0x80; + } + *p = '\0'; + return (p - buf); +} + +static void +bench_char_type(gpointer user_data) +{ + uint64_t code_point; + char utf8[7]; + + for (code_point = 1; code_point < MAX_UNICODE; code_point++) { + ucs2utf8(code_point, (unsigned char *)utf8); + grn_nfkc50_char_type(utf8); + } +} + +static void +bench_decompose(gpointer user_data) +{ + uint64_t code_point; + char utf8[7]; + + for (code_point = 1; code_point < MAX_UNICODE; code_point++) { + ucs2utf8(code_point, (unsigned char *)utf8); + grn_nfkc50_decompose(utf8); + } +} + +static void +bench_compose_no_change(gpointer user_data) +{ + uint64_t prefix_code_point; + uint64_t suffix_code_point = 0x61; /* a */ + char prefix_utf8[7]; + char suffix_utf8[7]; + + ucs2utf8(suffix_code_point, (unsigned char *)suffix_utf8); + for (prefix_code_point = 1; + prefix_code_point < MAX_UNICODE; + prefix_code_point++) { + ucs2utf8(prefix_code_point, (unsigned char *)prefix_utf8); + grn_nfkc50_compose(prefix_utf8, suffix_utf8); + } +} + +static void +bench_compose_change(gpointer user_data) +{ + uint64_t prefix_code_point; + uint64_t suffix_code_point = 0x11ba; + char prefix_utf8[7]; + char suffix_utf8[7]; + + ucs2utf8(suffix_code_point, (unsigned char *)suffix_utf8); + for (prefix_code_point = 1; + prefix_code_point < MAX_UNICODE; + prefix_code_point++) { + ucs2utf8(prefix_code_point, (unsigned char *)prefix_utf8); + grn_nfkc50_compose(prefix_utf8, suffix_utf8); + } +} + +/* +static void +check_char_type(gpointer user_data) +{ + uint64_t code_point; + char utf8[7]; + + for (code_point = 1; code_point < MAX_UNICODE; code_point++) { + grn_char_type a; + grn_char_type b; + + ucs2utf8(code_point, (unsigned char *)utf8); + a = grn_nfkc_char_type(utf8); + b = grn_nfkc50_char_type(utf8); + if (a == b) { + continue; + } + printf("%lx: %s: %d != %d\n", code_point, utf8, a, b); + } +} + +static void +check_decompose(gpointer user_data) +{ + uint64_t code_point; + char utf8[7]; + + for (code_point = 1; code_point < MAX_UNICODE; code_point++) { + const char *a; + const char *b; + + ucs2utf8(code_point, (unsigned char *)utf8); + a = grn_nfkc_decompose(utf8); + b = grn_nfkc50_decompose(utf8); + if (a == b) { + continue; + } + if (!a || !b) { + printf("%lx: %s: %s != %s\n", code_point, utf8, a, b); + continue; + } + if (strcmp(a, b) != 0) { + printf("%lx: %s: %s != %s\n", code_point, utf8, a, b); + } + } +} + +static void +check_compose(gpointer user_data) +{ + uint64_t prefix_code_point; + uint64_t suffix_code_point; + char prefix_utf8[7]; + char suffix_utf8[7]; + + for (prefix_code_point = 1; + prefix_code_point < MAX_UNICODE; + prefix_code_point++) { + ucs2utf8(prefix_code_point, (unsigned char *)prefix_utf8); + for (suffix_code_point = 1; + suffix_code_point < MAX_UNICODE; + suffix_code_point++) { + const char *a; + const char *b; + + ucs2utf8(suffix_code_point, (unsigned char *)suffix_utf8); + a = grn_nfkc_compose(prefix_utf8, suffix_utf8); + b = grn_nfkc50_compose(prefix_utf8, suffix_utf8); + if (a == b) { + continue; + } + if (!a || !b) { + printf("%lx-%lx: %s-%s: %s != %s\n", + prefix_code_point, suffix_code_point, + prefix_utf8, suffix_utf8, + a, b); + continue; + } + if (strcmp(a, b) != 0) { + printf("%lx-%lx: %s-%s: %s != %s\n", + prefix_code_point, suffix_code_point, + prefix_utf8, suffix_utf8, + a, b); + } + } + if ((prefix_code_point % 10000) == 0) { + printf("%" G_GUINT64_FORMAT "\n", prefix_code_point); + } + } +} +*/ + +int +main(int argc, gchar **argv) +{ + grn_rc rc; + BenchReporter *reporter; + gint n = 10; + + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } + bench_init(&argc, &argv); + + reporter = bench_reporter_new(); + + if (g_getenv("N")) { + n = atoi(g_getenv("N")); + } + +#define REGISTER(label, bench_function) \ + bench_reporter_register(reporter, label, n, \ + NULL, \ + bench_function, \ + NULL, \ + NULL) + REGISTER("char_type ", bench_char_type); + REGISTER("decompose ", bench_decompose); + REGISTER("compose - no change", bench_compose_no_change); + REGISTER("compose - change", bench_compose_change); + + /* + REGISTER("check - char_type", check_char_type); + REGISTER("check - decompose", check_decompose); + REGISTER("check - compose ", check_compose); + */ +#undef REGISTER + + bench_reporter_run(reporter); + g_object_unref(reporter); + + return EXIT_SUCCESS; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2; coding: utf-8 -*- */ /* - Copyright (C) 2014 Kouhei Sutou + Copyright (C) 2014-2016 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -135,12 +135,18 @@ int main(int argc, gchar **argv) { + grn_rc rc; grn_ctx context; grn_obj *database; BenchReporter *reporter; gint n = 100; - grn_init(); + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } bench_init(&argc, &argv); grn_ctx_init(&context, 0); @@ -204,5 +210,5 @@ grn_fin(); - return 0; + return EXIT_SUCCESS; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-range-select.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-range-select.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-range-select.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-range-select.c 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2; coding: utf-8 -*- */ /* - Copyright (C) 2014 Kouhei Sutou + Copyright (C) 2014-2016 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -179,10 +179,16 @@ int main(int argc, gchar **argv) { + grn_rc rc; BenchReporter *reporter; gint n = 10; - grn_init(); + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } g_print("Process %d times in each pattern\n", n); @@ -270,5 +276,5 @@ grn_fin(); - return 0; + return EXIT_SUCCESS; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-result-set.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-result-set.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-result-set.c 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-result-set.c 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1,151 @@ +/* -*- c-basic-offset: 2; coding: utf-8 -*- */ +/* + Copyright (C) 2015-2016 Kouhei Sutou + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include + +#include "lib/benchmark.h" + +typedef struct _BenchmarkData +{ + gchar *base_dir; + grn_ctx *context; + grn_obj *source_table; + grn_obj *result_set; +} BenchmarkData; + +static void +bench_n(BenchmarkData *data, gint64 n) +{ + gint64 i; + grn_ctx *ctx; + grn_hash *result_set; + + ctx = data->context; + result_set = (grn_hash *)data->result_set; + for (i = 0; i < n; i++) { + grn_id id = i; + grn_hash_add(ctx, result_set, &id, sizeof(grn_id), NULL, NULL); + } +} + +static void +bench_1000(gpointer user_data) +{ + BenchmarkData *data = user_data; + bench_n(data, 1000); +} + +static void +bench_10000(gpointer user_data) +{ + BenchmarkData *data = user_data; + bench_n(data, 10000); +} + +static void +bench_100000(gpointer user_data) +{ + BenchmarkData *data = user_data; + bench_n(data, 100000); +} + +static void +bench_setup(gpointer user_data) +{ + BenchmarkData *data = user_data; + + data->result_set = grn_table_create(data->context, + NULL, 0, NULL, + GRN_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC, + data->source_table, + NULL); + +} + +static void +bench_teardown(gpointer user_data) +{ + BenchmarkData *data = user_data; + + grn_obj_close(data->context, data->result_set); +} + +int +main(int argc, gchar **argv) +{ + grn_rc rc; + BenchmarkData data; + BenchReporter *reporter; + gchar *base_dir; + grn_ctx ctx; + gint n = 100; + + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } + bench_init(&argc, &argv); + + data.context = &ctx; + + base_dir = g_build_filename(g_get_tmp_dir(), "groonga-bench", NULL); + bench_utils_remove_path_recursive_force(base_dir); + g_mkdir_with_parents(base_dir, 0755); + + { + gchar *database_path; + const gchar *source_table_name = "Sources"; + + grn_ctx_init(&ctx, 0); + database_path = g_build_filename(base_dir, "db", NULL); + grn_db_create(&ctx, database_path, NULL); + g_free(database_path); + + data.source_table = grn_table_create(&ctx, + source_table_name, + strlen(source_table_name), + NULL, + GRN_TABLE_PAT_KEY | GRN_OBJ_PERSISTENT, + grn_ctx_at(&ctx, GRN_DB_SHORT_TEXT), + NULL); + } + + reporter = bench_reporter_new(); + bench_reporter_register(reporter, "1000", n, + bench_setup, bench_1000, bench_teardown, &data); + bench_reporter_register(reporter, "10000", n, + bench_setup, bench_10000, bench_teardown, &data); + bench_reporter_register(reporter, "100000", n, + bench_setup, bench_100000, bench_teardown, &data); + bench_reporter_run(reporter); + g_object_unref(reporter); + + grn_ctx_fin(&ctx); + + bench_utils_remove_path_recursive_force(data.base_dir); + + bench_quit(); + grn_fin(); + + return EXIT_SUCCESS; +} diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c 2017-12-21 15:48:52.000000000 +0000 @@ -1,6 +1,6 @@ /* -*- c-basic-offset: 2; coding: utf-8 -*- */ /* - Copyright (C) 2008 Kouhei Sutou + Copyright (C) 2008-2016 Kouhei Sutou This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -17,6 +17,7 @@ */ #include +#include #include @@ -226,11 +227,17 @@ int main(int argc, gchar **argv) { + grn_rc rc; BenchmarkData data; BenchReporter *reporter; gint n = 100; - grn_init(); + rc = grn_init(); + if (rc != GRN_SUCCESS) { + g_print("failed to initialize Groonga: <%d>: %s\n", + rc, grn_get_global_error_message()); + return EXIT_FAILURE; + } bench_init(&argc, &argv); data.context = g_new(grn_ctx, 1); @@ -266,5 +273,5 @@ bench_quit(); grn_fin(); - return 0; + return EXIT_SUCCESS; } diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -9,6 +9,9 @@ AM_CFLAGS = \ $(GLIB_CFLAGS) +CFLAGS += \ + $(NO_BAD_FUNCTION_CAST_CFLAGS) + LIBS = \ $(GLIB_LIBS) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/Makefile.am mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/Makefile.am --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/benchmark/Makefile.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/benchmark/Makefile.am 2017-12-21 15:48:52.000000000 +0000 @@ -5,17 +5,23 @@ NONEXISTENT_CXX_SOURCE = nonexistent.cpp if WITH_BENCHMARK -noinst_PROGRAMS = \ - bench-table-factory \ - bench-geo-distance \ - bench-geo-select \ - bench-ctx-create \ - bench-query-optimizer \ - bench-range-select +noinst_PROGRAMS = \ + bench-table-factory \ + bench-geo-distance \ + bench-geo-select \ + bench-ctx-create \ + bench-query-optimizer \ + bench-range-select \ + bench-result-set \ + bench-between-sequential \ + bench-nfkc \ + bench-cache endif EXTRA_DIST = \ - bench-query-optimizer-ddl.grn + bench-geo-select.sh \ + bench-query-optimizer-ddl.grn \ + geo-select-generate-grn.rb AM_CPPFLAGS = \ -I$(srcdir) \ @@ -50,33 +56,56 @@ bench_range_select_SOURCES = bench-range-select.c nodist_EXTRA_bench_range_select_SOURCES = $(NONEXISTENT_CXX_SOURCE) +bench_result_set_SOURCES = bench-result-set.c +nodist_EXTRA_bench_result_set_SOURCES = $(NONEXISTENT_CXX_SOURCE) + +bench_between_sequential_SOURCES = bench-between-sequential.c +nodist_EXTRA_bench_between_sequential_SOURCES = $(NONEXISTENT_CXX_SOURCE) + +bench_nfkc_SOURCES = bench-nfkc.c +nodist_EXTRA_bench_nfkc_SOURCES = $(NONEXISTENT_CXX_SOURCE) + +bench_cache_SOURCES = bench-cache.c +nodist_EXTRA_bench_cache_SOURCES = $(NONEXISTENT_CXX_SOURCE) + benchmarks = \ run-bench-table-factory \ run-bench-geo-distance \ run-bench-geo-select \ run-bench-ctx-create \ run-bench-query-optimizer \ - run-bench-range-select + run-bench-range-select \ + run-bench-result-set \ + run-bench-between-sequential \ + run-bench-nfkc \ + run-bench-cache run-bench-table-factory: bench-table-factory @echo $@: - ./bench-table-factory + env \ + GRN_RUBY_SCRIPTS_DIR="$(top_srcdir)/lib/mrb/scripts" \ + ./bench-table-factory run-bench-geo-distance: bench-geo-distance @echo $@: - ./bench-geo-distance + env \ + GRN_RUBY_SCRIPTS_DIR="$(top_srcdir)/lib/mrb/scripts" \ + ./bench-geo-distance run-bench-geo-select: bench-geo-select @echo $@: - env \ - RUBY="$(RUBY)" \ - GROONGA="$(GROONGA)" \ - srcdir="$(srcdir)" \ + env \ + RUBY="$(RUBY)" \ + GROONGA="$(GROONGA)" \ + GRN_RUBY_SCRIPTS_DIR="$(top_srcdir)/lib/mrb/scripts" \ + srcdir="$(srcdir)" \ $(srcdir)/bench-geo-select.sh run-bench-ctx-create: bench-ctx-create @echo $@: - ./bench-ctx-create + env \ + GRN_RUBY_SCRIPTS_DIR="$(top_srcdir)/lib/mrb/scripts" \ + ./bench-ctx-create run-bench-query-optimizer: bench-query-optimizer @echo $@: @@ -99,4 +128,26 @@ GRN_RUBY_SCRIPTS_DIR=$(top_srcdir)/lib/mrb/scripts \ ./bench-range-select +run-bench-result-set: bench-result-set + @echo $@: + env \ + GRN_RUBY_SCRIPTS_DIR="$(top_srcdir)/lib/mrb/scripts" \ + ./bench-result-set + +run-bench-between-sequential: bench-between-sequential + @echo $@: + @[ ! -e tmp ] && ln -s /dev/shm tmp || : + @mkdir -p tmp/between-sequential + env \ + GRN_RUBY_SCRIPTS_DIR="$(top_srcdir)/lib/mrb/scripts" \ + ./bench-between-sequential + +run-bench-nfkc: bench-nfkc + @echo $@: + ./bench-nfkc + +run-bench-cache: bench-cache + @echo $@: + ./bench-cache + benchmark: $(benchmarks) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m4 mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m4 --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m4 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m4 2017-12-21 15:48:52.000000000 +0000 @@ -2,8 +2,6 @@ AC_CHECK_FUNCS(_gmtime64_s) AC_CHECK_FUNCS(_localtime64_s) -AC_CHECK_FUNCS(_stricmp) -AC_CHECK_FUNCS(_strnicmp) AC_CHECK_FUNCS(_strtoui64) AC_CHECK_FUNCS(gmtime_r) AC_CHECK_FUNCS(localtime_r) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m4 mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m4 --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m4 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m4 2017-12-21 15:48:52.000000000 +0000 @@ -7,10 +7,6 @@ AC_CHECK_HEADERS(inttypes.h) AC_CHECK_HEADERS(netdb.h) AC_CHECK_HEADERS(signal.h) -AC_CHECK_HEADERS(stdarg.h) -AC_CHECK_HEADERS(stdint.h) -AC_CHECK_HEADERS(string.h) -AC_CHECK_HEADERS(strings.h) AC_CHECK_HEADERS(sys/mman.h) AC_CHECK_HEADERS(sys/param.h) AC_CHECK_HEADERS(sys/resource.h) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/makefiles/gettext.am mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/makefiles/gettext.am --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/makefiles/gettext.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/makefiles/gettext.am 2017-12-21 15:48:52.000000000 +0000 @@ -59,8 +59,6 @@ endif html: build -man: build -pdf: build gettext: rm *.pot || true diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/makefiles/sphinx.am mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/makefiles/sphinx.am --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/makefiles/sphinx.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/makefiles/sphinx.am 2017-12-21 15:48:52.000000000 +0000 @@ -3,7 +3,6 @@ $(html_files): html-build-stamp $(html_files_relative_from_locale_dir): html-build-stamp -$(man_files): man-build-stamp am__nobase_dist_doc_locale_DATA_DIST = if DOCUMENT_AVAILABLE @@ -22,41 +21,16 @@ required_build_stamps = \ html-build-stamp \ - man-build-stamp \ mo-build-stamp if DOCUMENT_BUILDABLE EXTRA_DIST += $(required_build_stamps) endif -man_files = \ - man/$(PACKAGE_NAME).1 - generated_files = \ $(DOCTREES_BASE) \ - man \ - man-build-stamp \ html \ - html-build-stamp \ - pdf \ - pdf-build-stamp \ - dirhtml \ - dirhtml-build-stamp \ - pickle \ - pikcle-build-stamp \ - json \ - json-build-stamp \ - htmlhelp \ - htmlhelp-build-stamp \ - qthelp \ - qthelp-build-stamp \ - latex \ - latex-build-stamp \ - changes \ - changes-build-stamp \ - linkcheck \ - linkcheck-build-stamp \ - doctest + html-build-stamp $(mo_files_relative_from_locale_dir): mo-build-stamp @@ -75,83 +49,24 @@ endif .PHONY: help -.PHONY: man clean-man .PHONY: html clean-html -.PHONY: pdf -.PHONY: dirhtml -.PHONY: pickle -.PHONY: json -.PHONY: htmlhelp -.PHONY: qthelp -.PHONY: latex -.PHONY: changes -.PHONY: linkcheck -.PHONY: doctest if DOCUMENT_BUILDABLE help: @echo "Please use \`make ' where is one of" - @echo " man to make man files" @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " rdoc to make RDoc files" - @echo " textile to make Textile files" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" -man: man-build-stamp html: html-recursive html-build-stamp -dirhtml: dirhtml-build-stamp -pickle: pickle-build-stamp -json: json-build-stamp -htmlhelp: htmlhelp-build-stamp -qthelp: qthelp-build-stamp -latex: latex-build-stamp -rdoc: rdoc-build-stamp -textile: textile-build-stamp -changes: changes-build-stamp -linkcheck: linkcheck-build-stamp -doctest: doctest-build-stamp clean_targets = \ - clean-man \ - clean-html \ - clean-dirhtml \ - clean-pickle \ - clean-json \ - clean-htmlhelp \ - clean-qthelp \ - clean-latex \ - clean-rdoc \ - clean-textile \ - clean-changes \ - clean-linkcheck \ - clean-doctest + clean-html $(clean_targets): target=`echo $@ | sed -e 's/^clean-//'`; \ rm -rf $${target}-build-stamp $${target} build_stamps = \ - man-build-stamp \ - html-build-stamp \ - dirhtml-build-stamp \ - pickle-build-stamp \ - json-build-stamp \ - htmlhelp-build-stamp \ - qthelp-build-stamp \ - latex-build-stamp \ - rdoc-build-stamp \ - textile-build-stamp \ - changes-build-stamp \ - linkcheck-build-stamp \ - doctest-build-stamp + html-build-stamp $(build_stamps): $(document_source_files) target=`echo $@ | sed -e 's/-build-stamp$$//'`; \ @@ -162,18 +77,4 @@ $(ALLSPHINXOPTS) \ $${target} @touch $@ - -qthelp: qthelp-message -qthelp-message: qthelp-build-stamp - @echo "Build finished; now you can run 'qcollectiongenerator' with the" \ - ".qhcp project file in qthelp/*, like this:" - @echo "# qcollectiongenerator qthelp/groonga.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile qthelp/groonga.qhc" - -latex: latex-message -latex-message: latex-build-stamp - @echo "Build finished; the LaTeX files are in latex/*." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." endif diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am 2017-12-21 15:48:52.000000000 +0000 @@ -2,18 +2,13 @@ DOCTREES_BASE = doctrees SPHINXOPTS = -PAPER = # Internal variables. SOURCE_DIR = $(abs_top_srcdir)/doc/source -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = $(PAPEROPT_$(PAPER)) -E $(SPHINXOPTS) $(SOURCE_DIR) +ALLSPHINXOPTS = -E $(SPHINXOPTS) $(SOURCE_DIR) -SPHINX_DIR = $(abs_top_builddir)/doc/sphinx -SPHINX_BUILD_COMMAND = \ - DOCUMENT_VERSION="$(DOCUMENT_VERSION)" \ +SPHINX_BUILD_COMMAND = \ + DOCUMENT_VERSION="$(DOCUMENT_VERSION)" \ DOCUMENT_VERSION_FULL="$(DOCUMENT_VERSION_FULL)" \ - LOCALE="$(LOCALE)" \ - PYTHONPATH="$(SPHINX_DIR):$$PYTHONPATH" \ + LOCALE="$(LOCALE)" \ $(SPHINX_BUILD) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_lz4_version mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_lz4_version --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_lz4_version 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_lz4_version 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1 @@ +1.7.5 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_mecab_naist_jdic_version mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_mecab_naist_jdic_version --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_mecab_naist_jdic_version 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_mecab_naist_jdic_version 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1 @@ +0.6.3b-20111013 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_mecab_version mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_mecab_version --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_mecab_version 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_mecab_version 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1 @@ +0.996 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_message_pack_version mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_message_pack_version --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/bundled_message_pack_version 1970-01-01 00:00:00.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/bundled_message_pack_version 2017-12-21 15:48:52.000000000 +0000 @@ -0,0 +1 @@ +2.1.1 diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/CMakeLists.txt mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/CMakeLists.txt --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/CMakeLists.txt 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/CMakeLists.txt 2017-12-21 15:48:52.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright(C) 2012-2015 Brazil +# Copyright(C) 2012-2016 Brazil # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -18,6 +18,7 @@ cmake_minimum_required(VERSION 2.6.2) # cmake_minimum_required(VERSION 2.6.4) # CentOS 5 set(GRN_PROJECT_NAME "groonga") +set(GRN_PROJECT_LABEL "Groonga") project("${GRN_PROJECT_NAME}") if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") @@ -39,7 +40,7 @@ endif() if(CMAKE_C_COMPILER_ID STREQUAL "Clang") - set(CMAKE_COMPILER_IS_CLANGC ON) + set(CMAKE_COMPILER_IS_CLANGCC ON) endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_COMPILER_IS_CLANGCXX ON) @@ -59,6 +60,8 @@ endif() endif() string(REGEX REPLACE "(^.*=|\n)" "" GRN_VERSION "${GRN_VERSION}") +string(REGEX REPLACE "\\." "," GRN_VERSION_RC "${GRN_VERSION}") +string(REGEX REPLACE "-.*$" "" GRN_VERSION_RC "${GRN_VERSION_RC}") include(CheckIncludeFile) include(CheckFunctionExists) @@ -97,25 +100,25 @@ CACHE STRING "Groonga's default encoding") set(GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD 0 - CACHE STRING "groonga default match escalation threshold") + CACHE STRING "Groonga's default match escalation threshold") set(GRN_DEFAULT_DOCUMENT_ROOT_BASE "html/admin" - CACHE PATH "groonga default document root base path") + CACHE PATH "Groonga's default document root base path") set(GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT "share/${GRN_PROJECT_NAME}/${GRN_DEFAULT_DOCUMENT_ROOT_BASE}" - CACHE PATH "groonga default relative document root") + CACHE PATH "Groonga's default relative document root") set(GRN_DEFAULT_DOCUMENT_ROOT "${CMAKE_INSTALL_PREFIX}/${GRN_DATA_DIR}/${GRN_DEFAULT_DOCUMENT_ROOT_BASE}" - CACHE PATH "groonga default document root") + CACHE PATH "Groonga's default document root") set(GRN_DEFAULT_DB_KEY "auto" CACHE STRING "Groonga's default DB key management algorithm") set(GRN_STACK_SIZE 1024 CACHE STRING - "DANGER!!! groonga stack size. Normarlly, you should not change this variable.") + "DANGER!!! Groonga's stack size. Normarlly, you should not change this variable.") set(GRN_LOCK_TIMEOUT - 10000000 + 900000 CACHE STRING "timeout to acquire a lock.") set(GRN_LOCK_WAIT_TIME_NANOSECOND @@ -129,42 +132,43 @@ set(GRN_PLUGIN_SUFFIX "${CMAKE_SHARED_MODULE_SUFFIX}") set(GRN_DLL_FILENAME "${CMAKE_SHARED_LIBRARY_PREFIX}groonga${CMAKE_SHARED_LIBRARY_SUFFIX}") -set(GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE "synonyms.tsv") +set(GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE + "${GRN_CONFIG_DIR}/synonyms.tsv") set(GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE - "${CMAKE_INSTALL_PREFIX}/${GRN_DATA_DIR}/${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE}") + "${CMAKE_INSTALL_PREFIX}/${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE}") set(GRN_RELATIVE_RUBY_SCRIPTS_DIR "${LIB_DIR}/${GRN_PROJECT_NAME}/scripts/ruby") set(GRN_RUBY_SCRIPTS_DIR "${CMAKE_INSTALL_PREFIX}/${GRN_RELATIVE_RUBY_SCRIPTS_DIR}") -if(CMAKE_COMPILER_IS_GNUCC) +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) set(GRN_C_COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS} -std=gnu99") endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGCXX) MY_CHECK_AND_SET_COMPILER_FLAG("-Wall") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wextra") MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-unused-but-set-variable") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-unused-parameter") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-sign-compare") MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-pointer-sign") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-missing-field-initializers") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wformat=2") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wformat") MY_CHECK_AND_SET_COMPILER_FLAG("-Wstrict-aliasing=2") MY_CHECK_AND_SET_COMPILER_FLAG("-fno-strict-aliasing") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wdisabled-optimization") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-disabled-optimization") MY_CHECK_AND_SET_COMPILER_FLAG("-Wfloat-equal") MY_CHECK_AND_SET_COMPILER_FLAG("-Wpointer-arith") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wdeclaration-after-statement") MY_CHECK_AND_SET_COMPILER_FLAG("-Wbad-function-cast") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wcast-align") - #MY_CHECK_AND_SET_COMPILER_FLAG("-Wredundant-decls") + if(NOT CMAKE_COMPILER_IS_CLANGCXX) + MY_CHECK_AND_SET_COMPILER_FLAG("-Wcast-align") + endif() + # MY_CHECK_AND_SET_COMPILER_FLAG("-Wredundant-decls") MY_CHECK_AND_SET_COMPILER_FLAG("-Wwrite-strings") MY_CHECK_AND_SET_COMPILER_FLAG("-fexceptions") MY_CHECK_AND_SET_COMPILER_FLAG("-fimplicit-templates") - MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-clobbered") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-unused-parameter") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-sign-compare") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-missing-field-initializers") + MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-implicit-fallthrough") endif() if(NOT DEFINED CMAKE_C_COMPILE_OPTIONS_PIC) @@ -303,7 +307,7 @@ endif() if(NOT USE_KQUEUE) - ac_check_headers(sys/poll.h) + ac_check_headers(poll.h) if(${HAVE_SYS_POLL_H}) ac_check_funcs(poll) if(${HAVE_POLL}) @@ -338,54 +342,92 @@ endif() endif() +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/bundled_lz4_version" + GRN_BUNDLED_LZ4_VERSION) +string(STRIP + "${GRN_BUNDLED_LZ4_VERSION}" + GRN_BUNDLED_LZ4_VERSION) +option(GRN_WITH_BUNDLED_LZ4 "use bundled LZ4" OFF) + set(GRN_WITH_LZ4 "auto" CACHE STRING "Support data compression by LZ4.") if(NOT ${GRN_WITH_LZ4} STREQUAL "no") - if(NOT DEFINED LIBLZ4_FOUND) - pkg_check_modules(LIBLZ4 liblz4) - endif() - if(LIBLZ4_FOUND) - set(GRN_WITH_LZ4 TRUE) + if(GRN_WITH_BUNDLED_LZ4) + set(LIBLZ4_INCLUDE_DIRS + "${CMAKE_CURRENT_SOURCE_DIR}/vendor/lz4-${GRN_BUNDLED_LZ4_VERSION}/lib") + set(LZ4_LIBS liblz4) else() - if(${GRN_WITH_LZ4} STREQUAL "yes") - message(FATAL_ERROR "No LZ4 found") + if(NOT DEFINED LIBLZ4_FOUND) + pkg_check_modules(LIBLZ4 liblz4) + endif() + if(LIBLZ4_FOUND) + find_library(LZ4_LIBS + NAMES ${LIBLZ4_LIBRARIES} + PATHS ${LIBLZ4_LIBRARY_DIRS} + NO_DEFAULT_PATH) + set(GRN_WITH_LZ4 TRUE) + else() + if(${GRN_WITH_LZ4} STREQUAL "yes") + message(FATAL_ERROR "No LZ4 found") + endif() + set(GRN_WITH_LZ4 FALSE) endif() - set(GRN_WITH_LZ4 FALSE) endif() endif() + +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/bundled_mecab_version" + GRN_BUNDLED_MECAB_VERSION) +string(STRIP + "${GRN_BUNDLED_MECAB_VERSION}" + GRN_BUNDLED_MECAB_VERSION) +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/bundled_mecab_naist_jdic_version" + GRN_BUNDLED_MECAB_NAIST_JDIC_VERSION) +string(STRIP + "${GRN_BUNDLED_MECAB_NAIST_JDIC_VERSION}" + GRN_BUNDLED_MECAB_NAIST_JDIC_VERSION) +option(GRN_WITH_BUNDLED_MECAB "use bundled MeCab" OFF) + set(GRN_WITH_MECAB "auto" CACHE STRING "use MeCab for morphological analysis") if(NOT ${GRN_WITH_MECAB} STREQUAL "no") - set(GRN_MECAB_CONFIG "mecab-config" CACHE FILEPATH "mecab-config path") - if(NOT CMAKE_CROSSCOMPILING) - find_program(GRN_MECAB_CONFIG_ABSOLUTE_PATH "${GRN_MECAB_CONFIG}") - endif() - if(EXISTS "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}") - execute_process(COMMAND "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}" --inc-dir - OUTPUT_VARIABLE MECAB_INCLUDE_DIRS - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}" --libs-only-L - OUTPUT_VARIABLE MECAB_LIBRARY_DIRS - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(MECAB_LIBRARIES "mecab") - ac_check_lib(${MECAB_LIBRARIES} mecab_new) - if(HAVE_LIBMECAB) - set(GRN_WITH_MECAB TRUE) + if(GRN_WITH_BUNDLED_MECAB) + set(MECAB_INCLUDE_DIRS + "${CMAKE_CURRENT_SOURCE_DIR}/vendor/mecab-${GRN_BUNDLED_MECAB_VERSION}/src") + set(MECAB_LIBRARY_DIRS + "${CMAKE_CURRENT_BUILD_DIR}/vendor/mecab") + set(MECAB_LIBRARIES libmecab) + else() + set(GRN_MECAB_CONFIG "mecab-config" CACHE FILEPATH "mecab-config path") + if(NOT CMAKE_CROSSCOMPILING) + find_program(GRN_MECAB_CONFIG_ABSOLUTE_PATH "${GRN_MECAB_CONFIG}") + endif() + if(EXISTS "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}") + execute_process(COMMAND "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}" --inc-dir + OUTPUT_VARIABLE MECAB_INCLUDE_DIRS + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}" --libs-only-L + OUTPUT_VARIABLE MECAB_LIBRARY_DIRS + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(MECAB_LIBRARIES "mecab") + ac_check_lib(${MECAB_LIBRARIES} mecab_new) + if(HAVE_LIBMECAB) + set(GRN_WITH_MECAB TRUE) + else() + if(${GRN_WITH_MECAB} STREQUAL "yes") + message(FATAL_ERROR + "No MeCab library found: " + "include directories: <${MECAB_INCLUDE_DIRS}>, " + "library directories: <${MECAB_LIBRARY_DIRS}>") + endif() + set(GRN_WITH_MECAB FALSE) + endif() else() if(${GRN_WITH_MECAB} STREQUAL "yes") - message(FATAL_ERROR - "No MeCab library found: " - "include directories: <${MECAB_INCLUDE_DIRS}>, " - "library directories: <${MECAB_LIBRARY_DIRS}>") + message(FATAL_ERROR "No mecab-config found: <${GRN_MECAB_CONFIG}>") endif() set(GRN_WITH_MECAB FALSE) endif() - else() - if(${GRN_WITH_MECAB} STREQUAL "yes") - message(FATAL_ERROR "No mecab-config found: <${GRN_MECAB_CONFIG}>") - endif() - set(GRN_WITH_MECAB FALSE) endif() else() set(GRN_WITH_MECAB FALSE) @@ -486,41 +528,65 @@ set(GRN_WITH_LIBEVENT FALSE) endif() +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/bundled_message_pack_version" + GRN_BUNDLED_MESSAGE_PACK_VERSION) +string(STRIP + "${GRN_BUNDLED_MESSAGE_PACK_VERSION}" + GRN_BUNDLED_MESSAGE_PACK_VERSION) +option(GRN_WITH_BUNDLED_MESSAGE_PACK "use bundled MessagePack" OFF) + set(GRN_WITH_MESSAGE_PACK "auto" CACHE STRING "use MessagePack for suggestion") if(NOT ${GRN_WITH_MESSAGE_PACK} STREQUAL "no") - if(NOT DEFINED MESSAGE_PACK_FOUND) - pkg_check_modules(MESSAGE_PACK msgpack) - endif() - if(MESSAGE_PACK_FOUND) - set(GRN_WITH_MESSAGE_PACK TRUE) + if(GRN_WITH_BUNDLED_MESSAGE_PACK) + set(MESSAGE_PACK_INCLUDE_DIRS + "${CMAKE_CURRENT_SOURCE_DIR}/vendor/msgpack-${GRN_BUNDLED_MESSAGE_PACK_VERSION}/include") + set(MESSAGE_PACK_LIBS msgpackc) else() - if("${GRN_WITH_MESSAGE_PACK}" STREQUAL "yes" OR - "${GRN_WITH_MESSAGE_PACK}" STREQUAL "auto") - set(MESSAGE_PACK_INCLUDE_DIRS "") - set(MESSAGE_PACK_LIBRARY_DIRS "") - else() - set(MESSAGE_PACK_INCLUDE_DIRS "${GRN_WITH_MESSAGE_PACK}/include") - set(MESSAGE_PACK_LIBRARY_DIRS "${GRN_WITH_MESSAGE_PACK}/lib") + if(NOT DEFINED MESSAGE_PACK_FOUND) + pkg_check_modules(MESSAGE_PACK msgpack) endif() - set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) - ac_check_lib(msgpack msgpack_version "${MESSAGE_PACK_LIBRARY_DIRS}") - set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) - if(HAVE_LIBMSGPACK) - set(MESSAGE_PACK_LIBRARIES "msgpack") + if(MESSAGE_PACK_FOUND) + find_library(MESSAGE_PACK_LIBS + NAMES ${MESSAGE_PACK_LIBRARIES} + PATHS ${MESSAGE_PACK_LIBRARY_DIRS} + NO_DEFAULT_PATH) set(GRN_WITH_MESSAGE_PACK TRUE) else() - if(${GRN_WITH_MESSAGE_PACK} STREQUAL "yes") - message(FATAL_ERROR "No MessagePack found") + if("${GRN_WITH_MESSAGE_PACK}" STREQUAL "yes" OR + "${GRN_WITH_MESSAGE_PACK}" STREQUAL "auto") + set(MESSAGE_PACK_INCLUDE_DIRS "") + set(MESSAGE_PACK_LIBRARY_DIRS "") + else() + set(MESSAGE_PACK_INCLUDE_DIRS "${GRN_WITH_MESSAGE_PACK}/include") + set(MESSAGE_PACK_LIBRARY_DIRS "${GRN_WITH_MESSAGE_PACK}/lib") + endif() + set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) + ac_check_lib(msgpack msgpack_version "${MESSAGE_PACK_LIBRARY_DIRS}") + set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) + if(HAVE_LIBMSGPACK) + find_library(MESSAGE_PACK_LIBS + NAMES "msgpack" + PATHS ${MESSAGE_PACK_LIBRARY_DIRS} + NO_DEFAULT_PATH) + set(GRN_WITH_MESSAGE_PACK TRUE) + else() + if(${GRN_WITH_MESSAGE_PACK} STREQUAL "yes") + message(FATAL_ERROR "No MessagePack found") + endif() + set(GRN_WITH_MESSAGE_PACK FALSE) endif() - set(GRN_WITH_MESSAGE_PACK FALSE) endif() endif() else() set(GRN_WITH_MESSAGE_PACK FALSE) endif() -find_program(RUBY NAMES "ruby2.1" "ruby21" "ruby") +find_program(RUBY NAMES + "ruby2.3" "ruby23" + "ruby2.2" "ruby22" + "ruby2.1" "ruby21" + "ruby") option(GRN_WITH_MRUBY "use mruby" OFF) if(GRN_WITH_MRUBY) @@ -531,6 +597,7 @@ set(MRUBY_INCLUDE_DIRS "") set(MRUBY_LIBS "") endif() +set(MRUBY_DEFINITIONS "MRB_INT64" "HAVE_ONIGMO_H") # TODO: Support using system Onigmo instead of bundled Onigmo. # set(GRN_WITH_ONIGMO ON) @@ -580,4 +647,9 @@ DESTINATION "${LIB_DIR}/pkgconfig/") endif() +install(FILES + "COPYING" + "README.md" + DESTINATION "${GRN_DATA_DIR}") + add_subdirectory(vendor/plugins) diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/config.h.cmake mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/config.h.cmake --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/config.h.cmake 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/config.h.cmake 2017-12-21 15:48:52.000000000 +0000 @@ -3,12 +3,13 @@ /* general constants */ #define CONFIGURE_OPTIONS "${CONFIGURE_OPTIONS}" -#define HOST_CPU "${CMAKE_HOST_SYSTEM_PROCESSOR}" -#define HOST_OS "${CMAKE_HOST_SYSTEM_NAME}" +#define HOST_CPU "${CMAKE_SYSTEM_PROCESSOR}" +#define HOST_OS "${CMAKE_SYSTEM_NAME}" #define VERSION "${VERSION}" #define PACKAGE "${PROJECT_NAME}" #define PACKAGE_NAME "${PROJECT_NAME}" +#define PACKAGE_LABEL "${GRN_PROJECT_LABEL}" #define PACKAGE_STRING "${PROJECT_NAME} ${VERSION}" #define PACKAGE_TARNAME "${PROJECT_NAME}" #define PACKAGE_URL "${PACKAGE_URL}" @@ -84,6 +85,7 @@ #cmakedefine GRN_WITH_CUTTER #cmakedefine GRN_WITH_KYTEA #cmakedefine GRN_WITH_LZ4 +#cmakedefine GRN_WITH_ZSTD #cmakedefine GRN_WITH_MECAB #cmakedefine GRN_WITH_MESSAGE_PACK #cmakedefine GRN_WITH_MRUBY @@ -103,10 +105,6 @@ #cmakedefine HAVE_NETDB_H #cmakedefine HAVE_PTHREAD_H #cmakedefine HAVE_SIGNAL_H -#cmakedefine HAVE_STDARG_H -#cmakedefine HAVE_STDINT_H -#cmakedefine HAVE_STRINGS_H -#cmakedefine HAVE_STRING_H #cmakedefine HAVE_SYS_MMAN_H #cmakedefine HAVE_SYS_PARAM_H #cmakedefine HAVE_SYS_RESOURCE_H @@ -133,8 +131,6 @@ /* functions */ #cmakedefine HAVE__GMTIME64_S #cmakedefine HAVE__LOCALTIME64_S -#cmakedefine HAVE__STRICMP -#cmakedefine HAVE__STRNICMP #cmakedefine HAVE__STRTOUI64 #cmakedefine HAVE_BACKTRACE #cmakedefine HAVE_CLOCK diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/configure.ac mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/configure.ac --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/configure.ac 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/configure.ac 2017-12-21 15:48:52.000000000 +0000 @@ -1,13 +1,18 @@ AC_PREREQ(2.59) m4_define([groonga_version], m4_include(base_version)) AC_INIT([groonga], groonga_version, [groonga@razil.jp]) +AC_CONFIG_MACRO_DIR([m4]) AM_CONFIG_HEADER(config.h) +GRN_VERSION_RC=`echo groonga_version | sed -e 's/\./,/g'` +AC_SUBST(GRN_VERSION_RC) + AM_INIT_AUTOMAKE([foreign tar-pax subdir-objects]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) -PACKAGE_TITLE=Groonga -AC_SUBST(PACKAGE_TITLE) +PACKAGE_LABEL=Groonga +AC_SUBST(PACKAGE_LABEL) +AC_DEFINE_UNQUOTED(PACKAGE_LABEL, ["$PACKAGE_LABEL"], [Label of package]) # for Autoconf 2.60 or earlier. if test -z "${datarootdir}"; then @@ -74,6 +79,8 @@ AC_C_BIGENDIAN AC_PROG_CXX +m4_ifdef([AX_CXX_COMPILE_STDCXX_11], + [AX_CXX_COMPILE_STDCXX_11([ext], [optional])]) AC_PROG_CC m4_ifdef([AC_PROG_CC_C99], [AC_PROG_CC_C99]) @@ -142,19 +149,17 @@ TEST_CXXFLAGS="" NO_STRICT_ALIASING_CFLAGS="" NO_FLOAT_EQUAL_CFLAGS="" +NO_BAD_FUNCTION_CAST_CFLAGS="" if test "$GCC" = "yes"; then CHECK_BUILD_FLAG([-Wall]) - CHECK_BUILD_FLAG([-Wextra]) if test "x$check_cflag" = "xno"; then CHECK_BUILD_FLAG([-W]) fi CHECK_BUILD_FLAG([-Wno-unused-but-set-variable]) # FIXME: enable it. - CHECK_BUILD_FLAG([-Wno-unused-parameter]) - CHECK_BUILD_FLAG([-Wno-sign-compare]) CHECK_CFLAG([-Wno-pointer-sign]) - CHECK_BUILD_FLAG([-Wno-missing-field-initializers]) + CHECK_CFLAG([-Wno-declaration-after-statement]) - CHECK_BUILD_FLAG([-Wformat=2]) + CHECK_BUILD_FLAG([-Wformat]) CHECK_BUILD_FLAG([-Wstrict-aliasing=2]) if test "x$check_cflag" = "xyes"; then NO_STRICT_ALIASING_CFLAGS="-fno-strict-aliasing" @@ -166,6 +171,9 @@ fi CHECK_BUILD_FLAG([-Wpointer-arith]) CHECK_CFLAG([-Wbad-function-cast]) + if test "x$check_cflag" = "xyes"; then + NO_BAD_FUNCTION_CAST_CFLAGS="-Wno-bad-function-cast" + fi if test "$CLANG" = "no"; then CHECK_BUILD_FLAG([-Wcast-align]) fi @@ -180,27 +188,16 @@ CHECK_CXXFLAG([-fexceptions]) CHECK_CXXFLAG([-fimplicit-templates]) - - CFLAGS_for_source="$CFLAGS" - CXXFLAGS_for_source="$CXXFLAGS" - CHECK_BUILD_FLAG([-Wno-clobbered]) - if test "x$check_cflag" = "xyes"; then - TEST_CFLAGS="-Wno-clobbered" - fi - if test "x$check_cxxflag" = "xyes"; then - TEST_CXXFLAGS="-Wno-clobbered" - fi - CFLAGS="$CFLAGS_for_source" - CXXFLAGS="$CXXFLAGS_for_source" fi AC_SUBST(TEST_CFLAGS) AC_SUBST(TEST_CXXFLAGS) AC_SUBST(NO_STRICT_ALIASING_CFLAGS) AC_SUBST(NO_FLOAT_EQUAL_CFLAGS) +AC_SUBST(NO_BAD_FUNCTION_CAST_CFLAGS) -AC_LIBTOOL_WIN32_DLL -AM_PROG_LIBTOOL -m4_ifdef([LT_OUTPUT], [LT_OUTPUT]) +LT_INIT([dlopen win32-dll]) +LT_LANG([Windows Resource]) +LT_OUTPUT LT_CURRENT=0 LT_REVISION=0 @@ -233,19 +230,23 @@ lib/mrb/scripts/Makefile lib/mrb/scripts/command_line/Makefile lib/mrb/scripts/context/Makefile + lib/mrb/scripts/expression_tree/Makefile lib/mrb/scripts/initialize/Makefile lib/mrb/scripts/logger/Makefile + lib/mrb/scripts/query_logger/Makefile + lib/proc/Makefile + lib/ts/Makefile include/Makefile include/groonga/Makefile plugins/Makefile plugins/tokenizers/Makefile plugins/suggest/Makefile - plugins/table/Makefile plugins/query_expanders/Makefile plugins/ruby/Makefile plugins/token_filters/Makefile plugins/sharding/Makefile plugins/functions/Makefile + plugins/expression_rewriters/Makefile examples/Makefile examples/dictionary/Makefile examples/dictionary/edict/Makefile @@ -264,19 +265,18 @@ packages/windows/language-files/Makefile packages/windows/setup-x64.nsi data/Makefile - data/images/Makefile - data/images/logo/Makefile data/html/Makefile data/munin/Makefile data/init.d/Makefile - data/init.d/redhat/Makefile - data/init.d/redhat/sysconfig/Makefile + data/init.d/centos/Makefile + data/init.d/centos/sysconfig/Makefile data/logrotate.d/Makefile - data/logrotate.d/redhat/Makefile + data/logrotate.d/centos/Makefile data/systemd/Makefile - data/systemd/fedora/Makefile - data/systemd/fedora/sysconfig/Makefile + data/systemd/centos/Makefile + data/systemd/centos/sysconfig/Makefile data/scripts/Makefile + data/tmpfiles.d/Makefile tools/Makefile doc/Makefile doc/locale/Makefile @@ -304,7 +304,10 @@ benchmark/fixtures/geo-select/Makefile benchmark/lib/Makefile vendor/Makefile + vendor/lz4/Makefile vendor/onigmo/Makefile + vendor/mecab/Makefile + vendor/message_pack/Makefile vendor/mruby/Makefile ]) @@ -355,14 +358,14 @@ [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( - [#define _ISOC99_SOURCE + [#define _ISOC99_SOURCE #include ], - [if (fpclassify(0.0)) {return 0;}] + [if (fpclassify(0.0)) {return 0;}] )], [ AC_DEFINE(_ISOC99_SOURCE, [1], [Define to 1 for fpclassify]) - AC_DEFINE(HAVE_FPCLASSIFY, [1], [use fpclassify with _ISOC99_SOURCE]) - AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FPCLASSIFY, [1], [use fpclassify with _ISOC99_SOURCE]) + AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) @@ -454,7 +457,7 @@ AC_DEFINE_UNQUOTED(GRN_STACK_SIZE, [$GRN_STACK_SIZE], [stack size]) # lock timeout -GRN_LOCK_TIMEOUT=10000000 +GRN_LOCK_TIMEOUT=900000 AC_ARG_WITH(lock_timeout, [AS_HELP_STRING([--with-lock-timeout=N], [This option specifies how many times Groonga tries to acquire a lock. @@ -609,7 +612,7 @@ ]) ]) if test "x$have_kqueue" != "xyes"; then - AC_CHECK_HEADER(sys/poll.h, [ + AC_CHECK_HEADER(poll.h, [ AC_CHECK_FUNC(poll, [ have_poll="yes" AC_DEFINE(USE_POLL, [1], [use poll]) @@ -617,7 +620,7 @@ ]) if test "x$have_poll" != "xyes"; then if test "$os_win32" = "yes"; then - AC_CHECK_HEADER(winsock2.h, [have_select="yes"]) + AC_CHECK_HEADER(winsock2.h, [have_select="yes"]) else AC_CHECK_FUNC(select, [ have_select="yes" @@ -750,18 +753,23 @@ else if test "x$RUBY" = "xyes"; then AC_PATH_PROGS(RUBY, - [ruby2.1 ruby21 ruby2.0 ruby20 ruby1.9 ruby19 ruby1.9.1 ruby], + [ dnl + ruby2.3 ruby23 dnl + ruby2.2 ruby22 dnl + ruby2.1 ruby21 dnl + ruby dnl + ], ruby-not-found) if test "$RUBY" != "ruby-not-found"; then ruby_version="`$RUBY --version`" - if echo "$ruby_version" | grep -q -- 'ruby \(1\.9\|2\.\)'; then + if echo "$ruby_version" | grep -q -- 'ruby \(2\.\)'; then ac_cv_ruby_available="yes" else - AC_MSG_WARN([$RUBY isn't Ruby 1.9 or later ($ruby_version)]) + AC_MSG_WARN([$RUBY isn't Ruby 2.0 or later ($ruby_version)]) fi fi else - ruby_not_found_warning_message="$RUBY is not found. Disable HTTP test." + ruby_not_found_warning_message="$RUBY is not found." case "$RUBY" in /*) AC_CHECK_FILE([$RUBY], @@ -791,39 +799,13 @@ AM_CONDITIONAL([WITH_COMMAND_TEST], [test "$ac_cv_ruby_available" = "yes"]) -# check Inkscape for generating PNG images -inkscape_available="no" -AC_ARG_WITH([inkscape], - AS_HELP_STRING([--with-inkscape=PATH], - [Inkscape path (default: auto)]), - [INKSCAPE="$withval"], - [INKSCAPE="yes"]) - -if test "x$INKSCAPE" = "xno"; then - INKSCAPE= -else - if test "x$INKSCAPE" = "xyes"; then - AC_PATH_PROGS(INKSCAPE, [inkscape], none) - if test "$INKSCAPE" != "none"; then - inkscape_available="yes" - fi - else - AC_CHECK_FILE([$INKSCAPE], - [inkscape_available="yes"], - [AC_MSG_WARN([$INKSCAPE is not found. - Disable PNG image generation.])]) - fi -fi -AC_SUBST(INKSCAPE) -AM_CONDITIONAL([WITH_INKSCAPE], [test "$inkscape_available" = "yes"]) - # check Lemon for generating .c and .h files from .y file lemon_available="no" AC_ARG_WITH([lemon], AS_HELP_STRING([--with-lemon=PATH], [Lemon path (default: auto)]), [LEMON="$withval"], - [: ${LEMON:=auto}]) + [: ${LEMON:=auto}]) if test "$LEMON" = "no"; then LEMON= @@ -842,8 +824,8 @@ fi else AC_CHECK_FILE([$LEMON], - [lemon_available="yes"], - [AC_MSG_WARN([$LEMON is not found. Disable .y compilation.])]) + [lemon_available="yes"], + [AC_MSG_WARN([$LEMON is not found. Disable .y compilation.])]) fi fi AC_SUBST(LEMON) @@ -925,6 +907,30 @@ fi fi +# Zstandard +AC_ARG_WITH(zstd, + [AS_HELP_STRING([--with-zstd], + [Support data compression by Zstandard. [default=auto]])], + [with_zstd="$withval"], + [with_zstd="auto"]) +if test "x$with_zstd" != "xno"; then + m4_ifdef([PKG_CHECK_MODULES], [ + PKG_CHECK_MODULES([LIBZSTD], + [libzstd], + [GRN_WITH_ZSTD=yes], + [GRN_WITH_ZSTD=no]) + ], + [GRN_WITH_ZSTD=no]) + if test "$GRN_WITH_ZSTD" = "yes"; then + AC_DEFINE(GRN_WITH_ZSTD, [1], + [Support data compression by Zstandard.]) + else + if test "x$with_zstd" != "xauto"; then + AC_MSG_ERROR("No libzstd found") + fi + fi +fi + # jemalloc AC_ARG_WITH(jemalloc, [AS_HELP_STRING([--with-jemalloc], @@ -941,8 +947,38 @@ [AC_MSG_ERROR("No libjemalloc found")]) fi +# Apache Arrow +AC_ARG_ENABLE(arrow, + [AS_HELP_STRING([--disable-arrow], + [enable Apache Arrow support. [default=auto-detect]])], + [enable_arrow="$enableval"], + [enable_arrow="auto"]) +if test "x$enable_arrow" != "xno"; then + m4_ifdef([PKG_CHECK_MODULES], [ + PKG_CHECK_MODULES([ARROW], + [arrow >= 0.5.0], + [arrow_available=yes], + [arrow_available=no]) + ], + [arrow_available=no]) + if test "x$arrow_available" = "xyes"; then + AC_DEFINE(GRN_WITH_ARROW, [1], [Enable Apache Arrow support.]) + else + if test "x$enable_arrow" = "xyes"; then + AC_MSG_ERROR("No Apache Arrow found") + fi + fi +fi +AM_CONDITIONAL([GRN_WITH_ARROW], [test "$arrow_available" = "yes"]) + # MeCab # NOTE: MUST be checked last + +BUNDLED_MECAB_VERSION=m4_include([bundled_mecab_version]) +AC_SUBST(BUNDLED_MECAB_VERSION) +BUNDLED_MECAB_NAIST_JDIC_VERSION=m4_include([bundled_mecab_naist_jdic_version]) +AC_SUBST(BUNDLED_MECAB_NAIST_JDIC_VERSION) + AC_ARG_WITH(mecab, [AS_HELP_STRING([--with-mecab], [use MeCab for morphological analysis. [default=yes]])], @@ -1170,6 +1206,9 @@ AC_SUBST(LIBEVENT_LIBS) # MessagePack +BUNDLED_MESSAGE_PACK_VERSION=m4_include([bundled_message_pack_version]) +AC_SUBST(BUNDLED_MESSAGE_PACK_VERSION) + AC_ARG_ENABLE(message-pack, [AS_HELP_STRING([--disable-message-pack], [Disable MessagePack support. [default=auto-detect]])], @@ -1203,7 +1242,7 @@ if test "x$message_pack_available" = "xyes"; then MESSAGE_PACK_CFLAGS="-I$with_message_pack/include" - MESSAGE_PACK_LIBS="-L$with_message_pack/lib -lmsgpack" + MESSAGE_PACK_LIBS="-L$with_message_pack/lib -lmsgpackc" fi fi @@ -1224,6 +1263,17 @@ "$libevent_available" = "yes" -a \ "$message_pack_available" = "yes"]) +# Check built-in atomic +case "$host" in + i*86*|x86_64*) + ;; + *) + AC_MSG_CHECKING([for platform which requires libatomic]) + AC_CHECK_LIB(atomic, __atomic_store_8, [ATOMIC_LIBS="-latomic"]) + AC_SUBST(ATOMIC_LIBS) + ;; +esac + # Document AC_MSG_CHECKING([whether enable document]) AC_ARG_ENABLE(document, @@ -1246,10 +1296,10 @@ AC_PATH_PROG(SPHINX_BUILD, sphinx-build, []) if test -n "$SPHINX_BUILD"; then sphinx_build_version=`"$SPHINX_BUILD" --version` - if ! echo "$sphinx_build_version" | grep -q ' 1\.[[23]]'; then - AC_MSG_ERROR([ + if ! echo "$sphinx_build_version" | grep -q ' 1\.[[3-6]]'; then + AC_MSG_ERROR([ sphinx-build is old: $sphinx_build_version -Sphinx 1.2 or later is required.]) +Sphinx 1.3 or later is required.]) fi document_available=yes document_buildable=yes @@ -1281,8 +1331,8 @@ AC_ARG_WITH([cutter-source-path], AS_HELP_STRING([--with-cutter-source-path=PATH], [Specify Cutter source path for - groonga's release manager.]), - [CUTTER_SOURCE_PATH="$withval"]) + groonga's release manager.]), + [CUTTER_SOURCE_PATH="$withval"]) case "$CUTTER_SOURCE_PATH" in ""|/*) : # do nothing @@ -1330,15 +1380,29 @@ AC_ARG_WITH(package-platform, [AS_HELP_STRING([--with-package-platform=PLATFORM], [install package platform related files. [default=no] - (supported package platforms: redhat, fedora)])], + (supported package platforms: centos, centos5, centos6, centos7, fedora)])], [package_platform="$withval"], [package_platform="no"]) +if test "$package_platform" = "centos"; then + distribution=$(cut -d " " -f 1 /etc/redhat-release | tr "A-Z" "a-z") + if grep -q Linux /etc/redhat-release; then + distribution_version=$(cut -d " " -f 4 /etc/redhat-release) + else + distribution_version=$(cut -d " " -f 3 /etc/redhat-release) + fi + distribution_version=$(echo ${distribution_version} | sed -e 's/\..*$//g') + package_platform="${package_platform}${distribution_version}" +fi AC_MSG_RESULT($package_platform) -AM_CONDITIONAL([REDHAT_PLATFORM], - [test "${package_platform}" = "redhat"]) -AM_CONDITIONAL([FEDORA_PLATFORM], - [test "${package_platform}" = "fedora"]) +AM_CONDITIONAL([CENTOS_PLATFORM], + [test "${package_platform}" != "no"]) +AM_CONDITIONAL([CENTOS_INIT_PLATFORM], + [test "${package_platform}" = "centos5" || + test "${package_platform}" = "centos6"]) +AM_CONDITIONAL([CENTOS_SYSTEMD_PLATFORM], + [test "${package_platform}" = "centos7" || + test "${package_platform}" = "fedora"]) # plugins check relative_pluginsdir_base="\$(PACKAGE)/plugins" @@ -1354,18 +1418,15 @@ expanded_pluginsdir="\${libdir}/${expanded_relative_pluginsdir_base}" AC_SUBST(expanded_pluginsdir) -tokenizers_pluginsdir="\${pluginsdir}/tokenizers" -AC_SUBST(tokenizers_pluginsdir) +tokenizer_pluginsdir="\${pluginsdir}/tokenizers" +AC_SUBST(tokenizer_pluginsdir) -query_expanders_pluginsdir="\${pluginsdir}/query_expanders" -AC_SUBST(query_expanders_pluginsdir) +query_expander_pluginsdir="\${pluginsdir}/query_expanders" +AC_SUBST(query_expander_pluginsdir) suggest_pluginsdir="\${pluginsdir}/suggest" AC_SUBST(suggest_pluginsdir) -table_pluginsdir="\${pluginsdir}/table" -AC_SUBST(table_pluginsdir) - ruby_pluginsdir="\${pluginsdir}/ruby" AC_SUBST(ruby_pluginsdir) @@ -1378,6 +1439,9 @@ function_pluginsdir="\${pluginsdir}/functions" AC_SUBST(function_pluginsdir) +expression_rewriter_pluginsdir="\${pluginsdir}/expression_rewriters" +AC_SUBST(expression_rewriter_pluginsdir) + AC_MSG_CHECKING(for the suffix of plugin shared libraries) shrext_cmds=$(./libtool --config | grep '^shrext_cmds=') eval $shrext_cmds @@ -1389,12 +1453,13 @@ AC_DEFINE_UNQUOTED(GRN_PLUGIN_SUFFIX, ["$suffix"], "plugin suffix") # for query expanders -GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE="synonyms.tsv" +GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE_BASE="synonyms.tsv" +GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE="etc/${PACKAGE}/${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE_BASE}" AC_DEFINE_UNQUOTED(GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE, ["$GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE"], "The relative synonyms file for TSV query expander") GRN_QUERY_EXPANDER_TSV_SYNONYMS_PATH="` - eval echo ${sysconfdir}/${PACKAGE}/${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE} + eval echo ${sysconfdir}/${PACKAGE}/${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE_BASE} `" AC_DEFINE_UNQUOTED(GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE, ["$GRN_QUERY_EXPANDER_TSV_SYNONYMS_PATH"], @@ -1451,8 +1516,7 @@ AC_SUBST(GROONGA_ORG_PATH) # groonga-httpd -m4_define([nginx_version], m4_include(nginx_version)) -NGINX_VERSION=nginx_version +NGINX_VERSION=m4_include([nginx_version]) AC_SUBST(NGINX_VERSION) # groonga-httpd binary path @@ -1472,6 +1536,12 @@ fi AM_CONDITIONAL(WITH_GROONGA_HTTPD, test "$enable_groonga_httpd" = "yes") +GROONGA_HTTPD_PID_PATH="` + test \"$prefix\" = NONE && prefix=/usr/local + eval echo ${localstatedir}/run/groonga/groonga-httpd.pid +`" +AC_SUBST(GROONGA_HTTPD_PID_PATH) + # mruby AC_ARG_ENABLE(mruby, [AS_HELP_STRING([--enable-mruby], @@ -1492,12 +1562,17 @@ fi AC_DEFINE(GRN_WITH_MRUBY, [1], [Define to 1 if mruby is enabled.]) MRUBY_CFLAGS="-I\$(top_srcdir)/vendor/mruby-source/include" + GRN_WITH_MRUBY="yes" else MRUBY_CFLAGS="" fi +AC_SUBST(GRN_WITH_MRUBY) AC_SUBST(MRUBY_CFLAGS) AM_CONDITIONAL(WITH_MRUBY, test "$enable_mruby" = "yes") +MRUBY_CPPFLAGS="-DMRB_INT64" +AC_SUBST(MRUBY_CPPFLAGS) + # This option is used in vendor/onigmo/configure AC_ARG_ENABLE(shared-onigmo, [AS_HELP_STRING([--enable-shared-onigmo], @@ -1506,16 +1581,37 @@ [enable_shared_onigmo="no"]) AM_CONDITIONAL(WITH_SHARED_ONIGMO, test "$enable_shared_onigmo" = "yes") -# TODO: Support using system Onigmo instead of bundled Onigmo. -AC_DEFINE(GRN_WITH_ONIGMO, [1], [Use Onigmo.]) -GRN_WITH_ONIGMO="yes" +AC_ARG_WITH(onigmo, + [AS_HELP_STRING([--without-onigmo], + [Don't Use Onigmo. [default=bundled]])], + [with_onigmo="$withval"], + [with_onigmo="bundled"]) +if test "x$with_onigmo" != "xno"; then + GRN_WITH_ONIGMO="yes" + if test "x$with_onigmo" != "xbundled"; then + m4_ifdef([PKG_CHECK_MODULES], [ + PKG_CHECK_MODULES([ONIGMO], [onigmo], + [have_onigmo=yes], + [have_onigmo=no]) + ], + [have_onigmo=no]) + fi + if test "x$with_onigmo" = "xsystem" -a "$have_onigmo" = "no"; then + AC_MSG_ERROR("No Onigmo found") + fi + if test "x$with_onigmo" = "xbundled" -o "$have_onigmo" = "no"; then + AC_CONFIG_SUBDIRS([vendor/onigmo]) + ONIGMO_CFLAGS="-I\$(top_srcdir)/vendor/onigmo-source" + ONIGMO_LIBS="\$(top_builddir)/vendor/onigmo-source/libonigmo.la" + fi + AC_DEFINE(GRN_WITH_ONIGMO, [1], [Use Onigmo.]) +else + GRN_WITH_ONIGMO="no" +fi AC_SUBST(GRN_WITH_ONIGMO) -AC_CONFIG_SUBDIRS([vendor/onigmo]) - -ONIGMO_CFLAGS="-I\$(top_srcdir)/vendor/onigmo-source" -ONIGMO_LIBS="\$(top_builddir)/vendor/onigmo-source/libonig.la" AC_SUBST(ONIGMO_CFLAGS) AC_SUBST(ONIGMO_LIBS) +AM_CONDITIONAL(WITH_BUNDLED_ONIGMO, test "$with_onigmo" != "no" -a "x$have_onigmo" != "xyes") # PCRE GRN_WITH_PCRE=no @@ -1541,6 +1637,30 @@ AC_SUBST(PCRE_CFLAGS) AC_SUBST(PCRE_LIBS_ONLY_L) +# SSL +GRN_WITH_SSL=no +AC_ARG_WITH(ssl, + [AS_HELP_STRING([--without-ssl], + [Don't use SSL module for groonga-httpd. [default=auto-detect]])], + [with_ssl="$withval"], + [with_ssl="auto"]) +if test "x$with_ssl" != "xno"; then + m4_ifdef([PKG_CHECK_MODULES], [ + PKG_CHECK_MODULES([SSL], [libssl], + [_PKG_CONFIG(SSL_LIBS_ONLY_L, [libs-only-L], [libssl]) + SSL_LIBS_ONLY_L="$pkg_cv_SSL_LIBS_ONLY_L" + GRN_WITH_SSL=yes], + [GRN_WITH_SSL=no]) + ], + [GRN_WITH_SSL=no]) + if test "x$with_ssl" = "xyes" -a "$GRN_WITH_SSL" != "yes"; then + AC_MSG_ERROR("No SSL found") + fi +fi +AC_SUBST(GRN_WITH_SSL) +AC_SUBST(SSL_CFLAGS) +AC_SUBST(SSL_LIBS_ONLY_L) + # For package AC_ARG_WITH(rsync-path, [AS_HELP_STRING([--with-rsync-path=PATH], @@ -1549,6 +1669,13 @@ [RSYNC_PATH="packages@packages.groonga.org:public"]) AC_SUBST(RSYNC_PATH) +AC_ARG_WITH(launchpad-ppa, + [AS_HELP_STRING([--with-launchpad-ppa=PPA], + [specify Launchpad Personal Package Archive. [default=groonga-ppa]])], + [LAUNCHPAD_PPA="$withval"], + [LAUNCHPAD_PPA="groonga-ppa"]) +AC_SUBST(LAUNCHPAD_PPA) + AC_ARG_WITH(launchpad-uploader-pgp-key, [AS_HELP_STRING([--with-launchpad-uploader-pgp-key=KEY], [specify PGP key UID to upload Groonga packages to Launchpad.])], @@ -1582,15 +1709,19 @@ AC_SUBST(GROONGA_HTTPD_DEFAULT_DATABASE_PATH) AC_OUTPUT([ + lib/metadata.rc packages/rpm/centos/groonga.spec packages/apt/debian/groonga-keyring.postrm packages/apt/env.sh packages/yum/env.sh groonga.pc + groonga-arrow.pc config.sh groonga-httpd-conf.sh data/groonga-httpd.conf + data/logrotate.d/centos/groonga-httpd data/scripts/groonga-httpd-restart + data/systemd/centos/groonga-httpd.service ]) echo "$PACKAGE_NAME $PACKAGE_VERSION configuration:" @@ -1657,11 +1788,16 @@ echo " enable: $enable_groonga_httpd" if test "$enable_groonga_httpd" = "yes"; then echo " default database path: $GROONGA_HTTPD_DEFAULT_DATABASE_PATH" - echo " PCRE: $WITH_PCRE" - if test "$WITH_PCRE" = "yes"; then + echo " PCRE: $GRN_WITH_PCRE" + if test "$GRN_WITH_PCRE" = "yes"; then echo " CFLAGS: $PCRE_CFLAGS" echo " LIBS only -L: $PCRE_LIBS_ONLY_L" fi + echo " SSL: $GRN_WITH_SSL" + if test "$GRN_WITH_SSL" = "yes"; then + echo " CFLAGS: $SSL_CFLAGS" + echo " LIBS only -L: $SSL_LIBS_ONLY_L" + fi fi echo diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/examples/dictionary/edict/edict-import.sh mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/examples/dictionary/edict/edict-import.sh --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/examples/dictionary/edict/edict-import.sh 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/examples/dictionary/edict/edict-import.sh 2017-12-21 15:48:52.000000000 +0000 @@ -16,6 +16,12 @@ edict_gz=$2 fi -if zcat $edict_gz | ${base_dir}/edict2grn.rb | groonga $1 > /dev/null; then +if type gzcat > /dev/null 2>&1; then + zcat="gzcat" +else + zcat="zcat" +fi + +if $zcat $edict_gz | ${base_dir}/edict2grn.rb | groonga $1 > /dev/null; then echo "edict data loaded." fi diff -Nru mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/examples/dictionary/html/index.html mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/examples/dictionary/html/index.html --- mariadb-10.1-10.1.25/storage/mroonga/vendor/groonga/examples/dictionary/html/index.html 2017-07-01 18:20:20.000000000 +0000 +++ mariadb-10.1-10.1.30/storage/mroonga/vendor/groonga/examples/dictionary/html/index.html 2017-12-21 15:48:52.000000000 +0000 @@ -16,7 +16,7 @@ - +